Skip to content
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 0 additions & 102 deletions .github/workflows/codeql.yml

This file was deleted.

70 changes: 0 additions & 70 deletions .github/workflows/dependency-review.yml

This file was deleted.

2 changes: 1 addition & 1 deletion docs/app/views/application/_app_head_content.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-T8W9NCJ');</script>
<% end %>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@pine-ds/core@latest/dist/pine-core/pine-core.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@kajabi-ui/styles@latest/dist/pine/pine.css">
<%= stylesheet_pack_tag "docs" %>
<link rel="canonical" href="<%= url_for(only_path: false) %>" />
<link href="/apple-touch-icon.png" rel="apple-touch-icon" sizes="180x180" type="image/png">
Expand Down
13 changes: 13 additions & 0 deletions docs/app/views/application/_assistant.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,18 @@
name: "search"
}
} %>
<%= sage_component SageButton, {
value: "Toggle dark mode",
attributes: {
"data-js-dark-mode-toggle": true,
title: "Toggle dark mode",
"aria-label": "Toggle dark mode"
},
subtle: true,
icon: {
name: "flash",
style: "only"
}
} %>
<% end %>
<% end %>
74 changes: 74 additions & 0 deletions docs/lib/sage-frontend/javascript/docs/dark-mode-toggle.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/**
* Dark Mode Toggle
* Handles switching between light and dark themes
*/

const THEME_KEY = 'sage-theme';
const THEME_DARK = 'dark';
const THEME_LIGHT = 'light';

class DarkModeToggle {
constructor() {
this.toggle = document.querySelector('[data-js-dark-mode-toggle]');
if (!this.toggle) return;

this.init();
}

init() {
// Set initial theme from localStorage or system preference
const savedTheme = localStorage.getItem(THEME_KEY);
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
const initialTheme = savedTheme || (prefersDark ? THEME_DARK : THEME_LIGHT);

this.setTheme(initialTheme, false);

// Listen for toggle clicks
this.toggle.addEventListener('click', () => this.handleToggle());

// Listen for system theme changes
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
if (!localStorage.getItem(THEME_KEY)) {
this.setTheme(e.matches ? THEME_DARK : THEME_LIGHT, false);
}
});
}

handleToggle() {
const currentTheme = document.documentElement.getAttribute('data-theme');
const newTheme = currentTheme === THEME_DARK ? THEME_LIGHT : THEME_DARK;
this.setTheme(newTheme, true);
}

setTheme(theme, save = true) {
// Update data-theme attribute on <html>
document.documentElement.setAttribute('data-theme', theme);

// Update toggle button aria-label and icon
const isDark = theme === THEME_DARK;
this.toggle.setAttribute('aria-label', isDark ? 'Switch to light mode' : 'Switch to dark mode');
this.toggle.setAttribute('title', isDark ? 'Switch to light mode' : 'Switch to dark mode');

// Update icon (pds-icon element)
const icon = this.toggle.querySelector('pds-icon');
if (icon) {
// When dark mode: use flash-filled, when light mode: use flash
icon.setAttribute('name', isDark ? 'flash-filled' : 'flash');
}

// Save to localStorage if requested
if (save) {
localStorage.setItem(THEME_KEY, theme);
}
}
}

// Initialize when DOM is ready
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => new DarkModeToggle());
} else {
new DarkModeToggle();
}

export default DarkModeToggle;

1 change: 1 addition & 0 deletions docs/lib/sage-frontend/javascript/docs/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ require('./meter')
require('./button-group')
require('./example')
require('./scroll-to-active-nav-item')
require('./dark-mode-toggle')

import SageDocsTabs from './tabs';

Expand Down
2 changes: 1 addition & 1 deletion docs/lib/sage-frontend/stylesheets/docs/_assistant.scss
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,6 @@
margin-block-end: 0;

.sage-switch__label {
color: sage-color(white);
color: var(--pine-color-white);
}
}
Loading
Loading