actual-css 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/components.json +2 -0
- package/dist/actual.css +10 -3
- package/dist/actual.full.css +238 -71
- package/dist/actual.full.js +1 -1
- package/dist/actual.full.min.css +1 -1
- package/dist/actual.min.css +1 -1
- package/docs/pages/foundations/tokens.md +1 -1
- package/docs/pages/guides/progressive-enhancement.md +12 -8
- package/package.json +159 -159
- package/src/css/components/accordion.css +2 -0
- package/src/css/components/actions.css +2 -0
- package/src/css/components/alert.css +2 -0
- package/src/css/components/app-nav.css +2 -0
- package/src/css/components/avatar.css +2 -0
- package/src/css/components/badge.css +2 -0
- package/src/css/components/breadcrumb.css +2 -0
- package/src/css/components/busy.css +2 -0
- package/src/css/components/button.css +2 -0
- package/src/css/components/card.css +2 -0
- package/src/css/components/chat.css +2 -0
- package/src/css/components/data-list.css +2 -0
- package/src/css/components/drawer.css +35 -22
- package/src/css/components/fab.css +2 -0
- package/src/css/components/flyout.css +2 -0
- package/src/css/components/indicator.css +2 -0
- package/src/css/components/join.css +2 -0
- package/src/css/components/key.css +2 -0
- package/src/css/components/list.css +2 -0
- package/src/css/components/meter.css +2 -0
- package/src/css/components/modal.css +47 -40
- package/src/css/components/navbar.css +2 -0
- package/src/css/components/pagination.css +2 -0
- package/src/css/components/progress.css +2 -0
- package/src/css/components/rating.css +2 -0
- package/src/css/components/scrollspy.css +2 -0
- package/src/css/components/skeleton.css +2 -0
- package/src/css/components/spinner.css +2 -0
- package/src/css/components/status-bar.css +2 -0
- package/src/css/components/steps.css +2 -0
- package/src/css/components/tab.css +2 -0
- package/src/css/components/table.css +2 -0
- package/src/css/components/tooltip.css +2 -0
- package/src/css/core/print.css +3 -0
- package/src/css/core/variants.css +7 -3
- package/src/css/effects/aura.css +2 -0
- package/src/css/forms/choice-card.css +4 -0
- package/src/css/forms/control.css +2 -0
- package/src/css/forms/floating-field.css +5 -1
- package/src/css/forms/form-actions.css +2 -0
- package/src/css/forms/form.css +2 -0
- package/src/css/forms/input-icon.css +2 -0
- package/src/css/forms/native.css +2 -0
- package/src/css/forms/otp.css +10 -0
- package/src/css/forms/range.css +2 -0
- package/src/css/forms/select.css +2 -0
- package/src/css/forms/switch.css +2 -0
- package/src/css/forms/validation.css +2 -0
- package/src/css/layout/app-layout.css +2 -0
- package/src/css/layout/app-shell.css +5 -1
- package/src/css/layout/center.css +2 -0
- package/src/css/layout/cluster.css +2 -0
- package/src/css/layout/column-layout.css +2 -0
- package/src/css/layout/frame.css +2 -0
- package/src/css/layout/grid.css +2 -0
- package/src/css/layout/media.css +2 -1
- package/src/css/layout/scroll-snap.css +2 -0
- package/src/css/layout/scroll-target.css +2 -0
- package/src/css/layout/sidebar-layout.css +2 -0
- package/src/css/layout/stack.css +2 -1
- package/src/css/layout/switcher.css +2 -0
- package/src/css/layout/topbar.css +2 -0
- package/src/css/typography/fluid.css +2 -0
- package/src/css/typography/lead.css +2 -1
- package/src/css/typography/overline.css +2 -0
- package/src/css/typography/prose.css +2 -0
- package/src/css/utilities/base.css +6 -1
- package/src/js/context-menu.js +56 -15
- package/src/js/enhancement-loader.js +5 -1
- package/src/js/escape.js +11 -1
- package/src/js/flyout.js +6 -1
- package/src/js/focus.js +8 -3
- package/src/js/surface.js +28 -0
- package/src/js/tooltip.js +10 -4
package/dist/actual.min.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
*, *::before, *::after { box-sizing: border-box; } html { -webkit-text-size-adjust: 100%; } body { margin: 0; } button, input, textarea, select { font: inherit; } [hidden]:not([hidden="until-found"]) { display: none !important; } :where(img, svg, video) { max-inline-size: 100%; block-size: auto; } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto !important; } *, *::before, *::after { animation-duration: 0.01ms !important; animation-delay: 0s !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; transition-delay: 0s !important; } } :root { --font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; --font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; --line-height: 1.5; --line-height-tight: 1.25; --line-height-relaxed: 1.75; --font-weight-normal: 400; --font-weight-medium: 500; --font-weight-semibold: 600; --font-weight-bold: 700; --font-size-xs: 0.8125rem; --font-size-sm: 0.875rem; --font-size-md: 1rem; --font-size-lg: 1.125rem; --gap: 0.75rem; --density-space: var(--space-40); --space-10: 0.25rem; --space-20: 0.5rem; --space-30: 0.75rem; --space-40: 1rem; --space-50: 1.5rem; --space-60: 2rem; --border-width: 1px; --radius-full: 9999px; --shadow: 0 1px 3px rgb(0 0 0 / 0.05), 0 4px 12px rgb(0 0 0 / 0.04); --shadow-popout: 0 0.25rem 0.75rem rgb(0 0 0 / 0.15); --duration: 150ms; --duration-fast: 100ms; --duration-slow: 200ms; --duration-spin: 0.75s; --duration-shimmer: 1.2s; --ease-enter: cubic-bezier(0.2, 0, 0, 1); --ease-exit: cubic-bezier(0.4, 0, 1, 1); --focus-outline-color: currentColor; --focus-outline: calc(var(--border-width) * 2) solid var(--focus-outline-color); --focus-outline-offset: 2px; --focus-ring-width: 3px; --indicator-offset: 14.65%; --backdrop-color: rgb(0 0 0); --backdrop-opacity: 0.45; --backdrop-fill: rgb(0 0 0 / var(--backdrop-opacity)); --bar-height: 0.65rem; --control-size-sm: 2rem; --control-size-md: 2.375rem; --control-size-lg: 2.75rem; --control-size: var(--control-size-md); --control-pad-x: var(--font-size-md); --control-font-size: var(--font-size-md); --choice-control-size: 1.125em; --disabled-opacity: 0.65; } :root, [data-theme] { --state-selected: var(--primary); --state-selected-fg: var(--primary-fg); --state-disabled: var(--text-subtle); --indicator-ring: var(--surface); } :root { --soft-bg-mix: 88%; --soft-border-mix: 65%; --soft-hover-alpha: 12%; --soft-fg-mix: 100%; --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%238a8594' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E"); --icon-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E"); --icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='6' y1='6' x2='18' y2='18'/%3E%3Cline x1='18' y1='6' x2='6' y2='18'/%3E%3C/svg%3E"); --icon-plus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='12' y1='5' x2='12' y2='19'/%3E%3Cline x1='5' y1='12' x2='19' y2='12'/%3E%3C/svg%3E"); --viewport-block: 100vh; --viewport-inline: 100vw; --z-sticky: 10; --z-menu: 20; --z-status: 60; } @media (forced-colors: active) { :root, [data-theme] { --state-disabled: GrayText; --disabled-opacity: 1; } } @supports (block-size: 100dvh) { :root { --viewport-block: 100dvh; } } @supports (inline-size: 100vi) { :root { --viewport-inline: 100vi; } } @supports (color: color-mix(in oklch, red, white)) { :root, [data-theme] { --shadow: 0 1px 3px color-mix(in oklch, var(--shadow-color) 5%, transparent), 0 4px 12px color-mix(in oklch, var(--shadow-color) 4%, transparent); --shadow-popout: 0 0.25rem 0.75rem color-mix(in oklch, var(--shadow-color) 15%, transparent); } :root, [data-theme] { --backdrop-fill: color-mix( in oklch, var(--backdrop-color) calc(var(--backdrop-opacity) * 100%), transparent ); } } :root { color-scheme: light dark; } [data-theme="light"] { color-scheme: light; } [data-theme="dark"] { color-scheme: dark; } @supports not (color: light-dark(red, blue)) { :root, [data-theme="light"], [data-theme="dark"] { color-scheme: light; } } :root, [data-theme="light"] { --primary: hsl(268 32% 33%); --primary-fg: hsl(0 0% 98%); --secondary: hsl(16 38% 38%); --secondary-fg: hsl(0 0% 98%); --success: hsl(150 40% 31%); --success-fg: hsl(0 0% 98%); --warning: hsl(36 68% 34%); --warning-fg: hsl(0 0% 98%); --danger: hsl(5 58% 43%); --danger-fg: hsl(0 0% 98%); --neutral: hsl(258 7% 43%); --neutral-fg: hsl(0 0% 98%); --surface: hsl(0 0% 100%); --surface-raised: hsl(0 0% 100%); --surface-subtle: hsl(262 24% 96%); --surface-solid: hsl(261 16% 13%); --text: hsl(261 20% 13%); --text-muted: hsl(259 9% 42%); --text-subtle: hsl(258 7% 57%); --border: hsl(260 15% 88%); --focus: var(--neutral); --focus-ring: hsl(258 7% 43% / 0.3); --hover-overlay: hsl(260 20% 10% / 0.04); --radius: 0.5rem; --radius-sm: 0.25rem; --radius-lg: 0.75rem; --shadow-color: hsl(260 25% 10%); --hgroup-gap: 0.25em; } :root, [data-theme] { --heading: var(--text); --selection-bg: var(--primary); --selection-fg: var(--primary-fg); --focus-ring-shadow: 0 0 0 var(--focus-ring-width) var(--focus-ring); } :where([data-theme]:not([data-theme="light"]):not([data-theme="dark"])) { --primary-soft-fg: initial; --secondary-soft-fg: initial; --success-soft-fg: initial; --warning-soft-fg: initial; --danger-soft-fg: initial; --neutral-soft-fg: initial; } :root, [data-theme="light"], [data-theme="dark"] { --secondary-soft-fg: color-mix(in oklab, var(--text) 10%, var(--secondary) 90%); --success-soft-fg: color-mix(in oklab, var(--text) 15%, var(--success) 85%); --warning-soft-fg: color-mix(in oklab, var(--text) 25%, var(--warning) 75%); --danger-soft-fg: color-mix(in oklab, var(--text) 15%, var(--danger) 85%); --neutral-soft-fg: color-mix(in oklab, var(--text) 20%, var(--neutral) 80%); } :root, [data-theme] { accent-color: var(--primary); } [data-tone="dark"] { --tone-fg: white; } [data-tone="light"] { --tone-fg: var(--text); } @supports (color: color-mix(in oklch, red, white)) { :root, [data-theme] { --focus-ring: color-mix(in oklch, var(--focus) 30%, transparent); } } @supports (color: light-dark(red, blue)) { :root, [data-theme="light"] { --primary: light-dark(hsl(268 32% 33%), hsl(268 42% 76%)); --primary-fg: light-dark(hsl(0 0% 98%), hsl(268 30% 12%)); --secondary: light-dark(hsl(16 38% 38%), hsl(18 45% 72%)); --secondary-fg: light-dark(hsl(0 0% 98%), hsl(18 32% 11%)); --success: light-dark(hsl(150 40% 31%), hsl(150 38% 62%)); --success-fg: light-dark(hsl(0 0% 98%), hsl(150 35% 8%)); --warning: light-dark(hsl(36 68% 34%), hsl(40 62% 64%)); --warning-fg: light-dark(hsl(0 0% 98%), hsl(38 35% 10%)); --danger: light-dark(hsl(5 58% 43%), hsl(4 60% 70%)); --danger-fg: light-dark(hsl(0 0% 98%), hsl(4 35% 10%)); --neutral: light-dark(hsl(258 7% 43%), hsl(258 10% 72%)); --neutral-fg: light-dark(hsl(0 0% 98%), hsl(260 18% 10%)); --surface: light-dark(hsl(0 0% 100%), hsl(263 17% 9%)); --surface-raised: light-dark(hsl(0 0% 100%), hsl(263 15% 12%)); --surface-subtle: light-dark(hsl(262 24% 96%), hsl(263 13% 16%)); --surface-solid: light-dark(hsl(261 16% 13%), hsl(0 0% 96%)); --text: light-dark(hsl(261 20% 13%), hsl(260 12% 95%)); --text-muted: light-dark(hsl(259 9% 42%), hsl(259 9% 67%)); --text-subtle: light-dark(hsl(258 7% 57%), hsl(258 7% 54%)); --border: light-dark(hsl(260 15% 88%), hsl(262 12% 24%)); --focus-ring: light-dark(hsl(258 7% 43% / 0.3), hsl(258 10% 72% / 0.28)); --hover-overlay: light-dark(hsl(260 20% 10% / 0.04), hsl(0 0% 100% / 0.06)); --shadow-color: light-dark(hsl(260 25% 10%), hsl(262 40% 2%)); } } @supports (color: color-mix(in oklch, red, white)) and (color: light-dark(red, blue)) { :root, [data-theme] { --focus-ring: light-dark( color-mix(in oklch, var(--focus) 30%, transparent), color-mix(in oklch, var(--focus) 28%, transparent) ); } } @media (prefers-contrast: more) { :root, [data-theme][data-theme] { --border-width: 2px; --focus-outline-offset: 3px; --focus-ring-width: 4px; --text-muted: var(--text); --text-subtle: var(--text); } } body { background: var(--surface); color: var(--text); font-family: var(--font-sans); line-height: var(--line-height); } a { color: var(--link, inherit); text-underline-offset: 0.18em; } a:hover { text-decoration-thickness: 0.12em; } :where(h1, h2, h3, h4, h5, h6) { color: var(--heading, inherit); line-height: var(--line-height-tight); text-wrap: balance; } hgroup { display: grid; gap: var(--hgroup-gap); } hgroup > * { margin-block: 0; } hr { border: 0; border-block-start: var(--border-width) solid var(--border); margin-block: var(--hr-space, var(--space-60)); margin-inline: 0; } code, kbd, samp, pre { font-family: var(--font-mono); } pre { overflow-x: auto; } small { font-size: 0.875em; } ::selection { background: var(--selection-bg, var(--primary)); color: var(--selection-fg, var(--primary-fg)); } .primary { --intent: var(--primary); --intent-fg: var(--primary-fg); --intent-soft-fg: var(--primary-soft-fg); } .secondary { --intent: var(--secondary); --intent-fg: var(--secondary-fg); --intent-soft-fg: var(--secondary-soft-fg); } .success { --intent: var(--success); --intent-fg: var(--success-fg); --intent-soft-fg: var(--success-soft-fg); } .warning { --intent: var(--warning); --intent-fg: var(--warning-fg); --intent-soft-fg: var(--warning-soft-fg); } .danger { --intent: var(--danger); --intent-fg: var(--danger-fg); --intent-soft-fg: var(--danger-soft-fg); } .neutral { --intent: var(--neutral); --intent-fg: var(--neutral-fg); --intent-soft-fg: var(--neutral-soft-fg); } .intent-color { color: var(--intent); } .solid { --ui-bg: var(--intent, var(--neutral)); --ui-fg: var(--intent-fg, var(--neutral-fg)); --ui-border: transparent; } .soft { --ui-bg: var(--surface-subtle); --ui-border: var(--border); --ui-fg: var(--intent, var(--text)); } .outline { --ui-bg: transparent; --ui-fg: var(--intent, currentColor); --ui-border: var(--intent, currentColor); } .surface { --ui-bg: var(--surface); --ui-fg: var(--intent, var(--text)); --ui-border: var(--border); } .inverted { --ui-bg: var(--surface-solid); --ui-fg: var(--surface); --ui-border: transparent; --ui-hover-bg: var(--surface-solid); --heading: var(--surface); --busy-overlay-bg: var(--surface-solid); background: var(--ui-bg); color: var(--ui-fg); border-color: var(--ui-border); } .compact { --gap: var(--space-20); --density-space: var(--space-20); --control-size: var(--control-size-sm); } .spacious { --gap: var(--space-50); --density-space: var(--space-50); --control-size: var(--control-size-lg); } :where( .btn, .input, .textarea, .select, .color, .file, .field, .choice, .input-icon, .otp, .join, .pagination, .tabs, .tab, .flyout ).sm { --control-size: var(--control-size-sm); --control-font-size: var(--font-size-sm); --control-pad-x: var(--font-size-sm); } :where( .btn, .input, .textarea, .select, .color, .file, .field, .choice, .input-icon, .otp, .join, .pagination, .tabs, .tab, .flyout ).lg { --control-size: var(--control-size-lg); --control-font-size: var(--font-size-lg); --control-pad-x: var(--font-size-lg); } @supports (color: color-mix(in oklch, red, white)) { .soft { --ui-bg: color-mix(in oklab, var(--surface) var(--soft-bg-mix), var(--intent, var(--neutral))); --ui-border: color-mix( in oklab, var(--surface) var(--soft-border-mix), var(--intent, var(--neutral)) ); --ui-fg: var( --intent-soft-fg, color-mix(in oklab, var(--text), var(--intent, var(--text)) var(--soft-fg-mix)) ); } .inverted { --ui-hover-bg: color-mix(in oklch, var(--surface-solid) 88%, black); } } :focus { outline: var(--focus-outline); outline-offset: var(--focus-outline-offset); } @supports selector(:focus-visible) { :focus:not(:focus-visible) { outline: none; } } @media print { :root, body { color-scheme: light; background: #fff; color: #000; } h1, h2, h3, h4, h5, h6 { break-after: avoid; } }
|
|
1
|
+
*, *::before, *::after { box-sizing: border-box; } html { -webkit-text-size-adjust: 100%; } body { margin: 0; } button, input, textarea, select { font: inherit; } [hidden]:not([hidden="until-found"]) { display: none !important; } :where(img, svg, video) { max-inline-size: 100%; block-size: auto; } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto !important; } *, *::before, *::after { animation-duration: 0.01ms !important; animation-delay: 0s !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; transition-delay: 0s !important; } } :root { --font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; --font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; --line-height: 1.5; --line-height-tight: 1.25; --line-height-relaxed: 1.75; --font-weight-normal: 400; --font-weight-medium: 500; --font-weight-semibold: 600; --font-weight-bold: 700; --font-size-xs: 0.8125rem; --font-size-sm: 0.875rem; --font-size-md: 1rem; --font-size-lg: 1.125rem; --gap: 0.75rem; --density-space: var(--space-40); --space-10: 0.25rem; --space-20: 0.5rem; --space-30: 0.75rem; --space-40: 1rem; --space-50: 1.5rem; --space-60: 2rem; --border-width: 1px; --radius-full: 9999px; --shadow: 0 1px 3px rgb(0 0 0 / 0.05), 0 4px 12px rgb(0 0 0 / 0.04); --shadow-popout: 0 0.25rem 0.75rem rgb(0 0 0 / 0.15); --duration: 150ms; --duration-fast: 100ms; --duration-slow: 200ms; --duration-spin: 0.75s; --duration-shimmer: 1.2s; --ease-enter: cubic-bezier(0.2, 0, 0, 1); --ease-exit: cubic-bezier(0.4, 0, 1, 1); --focus-outline-color: currentColor; --focus-outline: calc(var(--border-width) * 2) solid var(--focus-outline-color); --focus-outline-offset: 2px; --focus-ring-width: 3px; --indicator-offset: 14.65%; --backdrop-color: rgb(0 0 0); --backdrop-opacity: 0.45; --backdrop-fill: rgb(0 0 0 / var(--backdrop-opacity)); --bar-height: 0.65rem; --control-size-sm: 2rem; --control-size-md: 2.375rem; --control-size-lg: 2.75rem; --control-size: var(--control-size-md); --control-pad-x: var(--font-size-md); --control-font-size: var(--font-size-md); --choice-control-size: 1.125em; --disabled-opacity: 0.65; } :root, [data-theme] { --state-selected: var(--primary); --state-selected-fg: var(--primary-fg); --state-disabled: var(--text-subtle); --indicator-ring: var(--surface); } :root { --soft-bg-mix: 88%; --soft-border-mix: 65%; --soft-hover-alpha: 12%; --soft-fg-mix: 100%; --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%238a8594' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E"); --icon-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E"); --icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='6' y1='6' x2='18' y2='18'/%3E%3Cline x1='18' y1='6' x2='6' y2='18'/%3E%3C/svg%3E"); --icon-plus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='12' y1='5' x2='12' y2='19'/%3E%3Cline x1='5' y1='12' x2='19' y2='12'/%3E%3C/svg%3E"); --viewport-block: 100vh; --viewport-inline: 100vw; --z-sticky: 10; --z-menu: 20; --z-status: 60; } @media (forced-colors: active) { :root, [data-theme] { --state-disabled: GrayText; --disabled-opacity: 1; } } @supports (block-size: 100dvh) { :root { --viewport-block: 100dvh; } } @supports (inline-size: 100vi) { :root { --viewport-inline: 100vi; } } @supports (color: color-mix(in oklch, red, white)) { :root, [data-theme] { --shadow: 0 1px 3px color-mix(in oklch, var(--shadow-color) 5%, transparent), 0 4px 12px color-mix(in oklch, var(--shadow-color) 4%, transparent); --shadow-popout: 0 0.25rem 0.75rem color-mix(in oklch, var(--shadow-color) 15%, transparent); } :root, [data-theme] { --backdrop-fill: color-mix( in oklch, var(--backdrop-color) calc(var(--backdrop-opacity) * 100%), transparent ); } } :root { color-scheme: light dark; } [data-theme="light"] { color-scheme: light; } [data-theme="dark"] { color-scheme: dark; } @supports not (color: light-dark(red, blue)) { :root, [data-theme="light"], [data-theme="dark"] { color-scheme: light; } } :root, [data-theme="light"] { --primary: hsl(268 32% 33%); --primary-fg: hsl(0 0% 98%); --secondary: hsl(16 38% 38%); --secondary-fg: hsl(0 0% 98%); --success: hsl(150 40% 31%); --success-fg: hsl(0 0% 98%); --warning: hsl(36 68% 34%); --warning-fg: hsl(0 0% 98%); --danger: hsl(5 58% 43%); --danger-fg: hsl(0 0% 98%); --neutral: hsl(258 7% 43%); --neutral-fg: hsl(0 0% 98%); --surface: hsl(0 0% 100%); --surface-raised: hsl(0 0% 100%); --surface-subtle: hsl(262 24% 96%); --surface-solid: hsl(261 16% 13%); --text: hsl(261 20% 13%); --text-muted: hsl(259 9% 42%); --text-subtle: hsl(258 7% 57%); --border: hsl(260 15% 88%); --focus: var(--neutral); --focus-ring: hsl(258 7% 43% / 0.3); --hover-overlay: hsl(260 20% 10% / 0.04); --radius: 0.5rem; --radius-sm: 0.25rem; --radius-lg: 0.75rem; --shadow-color: hsl(260 25% 10%); --hgroup-gap: 0.25em; } :root, [data-theme] { --heading: var(--text); --selection-bg: var(--primary); --selection-fg: var(--primary-fg); --focus-ring-shadow: 0 0 0 var(--focus-ring-width) var(--focus-ring); } :where([data-theme]:not([data-theme="light"]):not([data-theme="dark"])) { --primary-soft-fg: initial; --secondary-soft-fg: initial; --success-soft-fg: initial; --warning-soft-fg: initial; --danger-soft-fg: initial; --neutral-soft-fg: initial; } :root, [data-theme="light"], [data-theme="dark"] { --secondary-soft-fg: color-mix(in oklab, var(--text) 10%, var(--secondary) 90%); --success-soft-fg: color-mix(in oklab, var(--text) 15%, var(--success) 85%); --warning-soft-fg: color-mix(in oklab, var(--text) 25%, var(--warning) 75%); --danger-soft-fg: color-mix(in oklab, var(--text) 15%, var(--danger) 85%); --neutral-soft-fg: color-mix(in oklab, var(--text) 20%, var(--neutral) 80%); } :root, [data-theme] { accent-color: var(--primary); } [data-tone="dark"] { --tone-fg: white; } [data-tone="light"] { --tone-fg: var(--text); } @supports (color: color-mix(in oklch, red, white)) { :root, [data-theme] { --focus-ring: color-mix(in oklch, var(--focus) 30%, transparent); } } @supports (color: light-dark(red, blue)) { :root, [data-theme="light"] { --primary: light-dark(hsl(268 32% 33%), hsl(268 42% 76%)); --primary-fg: light-dark(hsl(0 0% 98%), hsl(268 30% 12%)); --secondary: light-dark(hsl(16 38% 38%), hsl(18 45% 72%)); --secondary-fg: light-dark(hsl(0 0% 98%), hsl(18 32% 11%)); --success: light-dark(hsl(150 40% 31%), hsl(150 38% 62%)); --success-fg: light-dark(hsl(0 0% 98%), hsl(150 35% 8%)); --warning: light-dark(hsl(36 68% 34%), hsl(40 62% 64%)); --warning-fg: light-dark(hsl(0 0% 98%), hsl(38 35% 10%)); --danger: light-dark(hsl(5 58% 43%), hsl(4 60% 70%)); --danger-fg: light-dark(hsl(0 0% 98%), hsl(4 35% 10%)); --neutral: light-dark(hsl(258 7% 43%), hsl(258 10% 72%)); --neutral-fg: light-dark(hsl(0 0% 98%), hsl(260 18% 10%)); --surface: light-dark(hsl(0 0% 100%), hsl(263 17% 9%)); --surface-raised: light-dark(hsl(0 0% 100%), hsl(263 15% 12%)); --surface-subtle: light-dark(hsl(262 24% 96%), hsl(263 13% 16%)); --surface-solid: light-dark(hsl(261 16% 13%), hsl(0 0% 96%)); --text: light-dark(hsl(261 20% 13%), hsl(260 12% 95%)); --text-muted: light-dark(hsl(259 9% 42%), hsl(259 9% 67%)); --text-subtle: light-dark(hsl(258 7% 57%), hsl(258 7% 54%)); --border: light-dark(hsl(260 15% 88%), hsl(262 12% 24%)); --focus-ring: light-dark(hsl(258 7% 43% / 0.3), hsl(258 10% 72% / 0.28)); --hover-overlay: light-dark(hsl(260 20% 10% / 0.04), hsl(0 0% 100% / 0.06)); --shadow-color: light-dark(hsl(260 25% 10%), hsl(262 40% 2%)); } } @supports (color: color-mix(in oklch, red, white)) and (color: light-dark(red, blue)) { :root, [data-theme] { --focus-ring: light-dark( color-mix(in oklch, var(--focus) 30%, transparent), color-mix(in oklch, var(--focus) 28%, transparent) ); } } @media (prefers-contrast: more) { :root, [data-theme][data-theme] { --border-width: 2px; --focus-outline-offset: 3px; --focus-ring-width: 4px; --text-muted: var(--text); --text-subtle: var(--text); } } body { background: var(--surface); color: var(--text); font-family: var(--font-sans); line-height: var(--line-height); } a { color: var(--link, inherit); text-underline-offset: 0.18em; } a:hover { text-decoration-thickness: 0.12em; } :where(h1, h2, h3, h4, h5, h6) { color: var(--heading, inherit); line-height: var(--line-height-tight); text-wrap: balance; } hgroup { display: grid; gap: var(--hgroup-gap); } hgroup > * { margin-block: 0; } hr { border: 0; border-block-start: var(--border-width) solid var(--border); margin-block: var(--hr-space, var(--space-60)); margin-inline: 0; } code, kbd, samp, pre { font-family: var(--font-mono); } pre { overflow-x: auto; } small { font-size: 0.875em; } ::selection { background: var(--selection-bg, var(--primary)); color: var(--selection-fg, var(--primary-fg)); } .primary { --intent: var(--primary); --intent-fg: var(--primary-fg); --intent-soft-fg: var(--primary-soft-fg); } .secondary { --intent: var(--secondary); --intent-fg: var(--secondary-fg); --intent-soft-fg: var(--secondary-soft-fg); } .success { --intent: var(--success); --intent-fg: var(--success-fg); --intent-soft-fg: var(--success-soft-fg); } .warning { --intent: var(--warning); --intent-fg: var(--warning-fg); --intent-soft-fg: var(--warning-soft-fg); } .danger { --intent: var(--danger); --intent-fg: var(--danger-fg); --intent-soft-fg: var(--danger-soft-fg); } .neutral { --intent: var(--neutral); --intent-fg: var(--neutral-fg); --intent-soft-fg: var(--neutral-soft-fg); } .intent-color { color: var(--intent); } .solid { --ui-bg: var(--intent, var(--neutral)); --ui-fg: var(--intent-fg, var(--neutral-fg)); --ui-border: transparent; } .soft { --ui-bg: var(--surface-subtle); --ui-border: var(--border); --ui-fg: var(--intent, var(--text)); } .outline { --ui-bg: transparent; --ui-fg: var(--intent, currentColor); --ui-border: var(--intent, currentColor); } .surface { --ui-bg: var(--surface); --ui-fg: var(--intent, var(--text)); --ui-border: var(--border); } .inverted { --ui-bg: var(--surface-solid); --ui-fg: var(--surface); --ui-border: transparent; --ui-hover-bg: var(--surface-solid); --heading: var(--surface); --busy-overlay-bg: var(--surface-solid); background: var(--ui-bg); color: var(--ui-fg); border-color: var(--ui-border); } .compact { --gap: var(--space-20); --density-space: var(--space-20); --control-size: var(--control-size-sm); } .spacious { --gap: var(--space-50); --density-space: var(--space-50); --control-size: var(--control-size-lg); } :where( .btn, .input, .textarea, .select, .color, .file, .field, .choice, .choice-card, .input-icon, .floating-field, .otp, .join, .pagination, .tabs, .tab, .flyout ).sm { --control-size: var(--control-size-sm); --control-font-size: var(--font-size-sm); --control-pad-x: var(--font-size-sm); } :where( .btn, .input, .textarea, .select, .color, .file, .field, .choice, .choice-card, .input-icon, .floating-field, .otp, .join, .pagination, .tabs, .tab, .flyout ).lg { --control-size: var(--control-size-lg); --control-font-size: var(--font-size-lg); --control-pad-x: var(--font-size-lg); } @supports (color: color-mix(in oklch, red, white)) { .soft { --ui-bg: color-mix(in oklab, var(--surface) var(--soft-bg-mix), var(--intent, var(--neutral))); --ui-border: color-mix( in oklab, var(--surface) var(--soft-border-mix), var(--intent, var(--neutral)) ); --ui-fg: var( --intent-soft-fg, color-mix(in oklab, var(--text), var(--intent, var(--text)) var(--soft-fg-mix)) ); } .inverted { --ui-hover-bg: color-mix(in oklch, var(--surface-solid) 88%, black); } } :focus { outline: var(--focus-outline); outline-offset: var(--focus-outline-offset); } @supports selector(:focus-visible) { :focus:not(:focus-visible) { outline: none; } } @media print { :root, [data-theme][data-theme], body { color-scheme: light; background: #fff; color: #000; } h1, h2, h3, h4, h5, h6 { break-after: avoid; } }
|
|
@@ -505,7 +505,7 @@ Because the native select chevron is an SVG background image and cannot inherit
|
|
|
505
505
|
|
|
506
506
|
Under `prefers-contrast: more`, the user's contrast preference wins over a theme's palette by contract: the core collapses `--text-muted`/`--text-subtle` to `--text` and thickens borders and focus so no theme can defeat a legibility requirement. This is a deliberate decision, not a specificity quirk — the repeated `[data-theme][data-theme]` attribute only outranks a preset theme stylesheet loaded after the core.
|
|
507
507
|
|
|
508
|
-
Under `forced-colors: active`, the browser automatically remaps `color`, `background`, and `border` properties to system colors. The
|
|
508
|
+
Under `forced-colors: active`, the browser automatically remaps `color`, `background`, and `border` properties to system colors. The core only adjusts what the remapping cannot express on its own — `--state-disabled` becomes `GrayText` and `--disabled-opacity` becomes `1` — declared on `:root` and `[data-theme]` so every theme boundary follows. Keep local forced-color rules only for custom control geometry, native bar parts, or selected/checked states that would otherwise be communicated only by background color.
|
|
509
509
|
|
|
510
510
|
## Component mapping
|
|
511
511
|
|
|
@@ -286,14 +286,14 @@ The runtime dispatches a small set of public `actual:*` events. All are
|
|
|
286
286
|
listenable on the document; cancelable events veto the associated action when
|
|
287
287
|
`preventDefault()` is called.
|
|
288
288
|
|
|
289
|
-
| Event | Dispatch
|
|
290
|
-
| ---------------------- |
|
|
291
|
-
| `actual:surface-open` | before a surface opens
|
|
292
|
-
| `actual:context-menu` | before a context menu opens
|
|
293
|
-
| `actual:status` | status module, or any code
|
|
294
|
-
| `actual:invalid` | after a submit was blocked
|
|
295
|
-
| `actual:dialog-cancel` | before a native cancel close
|
|
296
|
-
| `actual:dismiss` | after `--dismiss`
|
|
289
|
+
| Event | Dispatch | `detail` |
|
|
290
|
+
| ---------------------- | ----------------------------- | ------------------------------------ |
|
|
291
|
+
| `actual:surface-open` | before a surface opens | `{ surface, options }` |
|
|
292
|
+
| `actual:context-menu` | before a context menu opens | `{ menu, context, origin, trigger }` |
|
|
293
|
+
| `actual:status` | status module, or any code | `{ message, intent, duration }` |
|
|
294
|
+
| `actual:invalid` | after a submit was blocked | `{ form, firstInvalid, message }` |
|
|
295
|
+
| `actual:dialog-cancel` | before a native cancel close | `{ dialog, sourceEvent }` |
|
|
296
|
+
| `actual:dismiss` | after a `--dismiss` dismissal | `{ trigger }` |
|
|
297
297
|
|
|
298
298
|
`actual:surface-open`, `actual:context-menu` and `actual:dialog-cancel` are
|
|
299
299
|
cancelable. `actual:status` both shows and clears the status bar — omit
|
|
@@ -343,6 +343,10 @@ applications that unload the module owning the command.
|
|
|
343
343
|
The runtime includes a generic `--dismiss` command for hiding any resolved
|
|
344
344
|
target. It prevents the trigger's default action, sets `hidden`, and emits a
|
|
345
345
|
bubbling `actual:dismiss` event with the trigger in `event.detail.trigger`.
|
|
346
|
+
On an open surface (flyout, context menu), the surface consumes the event to
|
|
347
|
+
close through its own lifecycle instead of staying hidden — by the time the
|
|
348
|
+
event reaches document listeners, `hidden` has already been lifted again and
|
|
349
|
+
the surface reads as closed, not merely attribute-hidden.
|
|
346
350
|
|
|
347
351
|
```html demo
|
|
348
352
|
<section id="notice" class="alert">
|
package/package.json
CHANGED
|
@@ -1,159 +1,159 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "actual-css",
|
|
3
|
-
"version": "0.9.
|
|
4
|
-
"description": "Plain CSS component framework with semantic classes, universal variants, small tokens, theme hooks, and progressive enhancements.",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"packageManager": "bun@1.4.2",
|
|
7
|
-
"license": "MIT",
|
|
8
|
-
"author": "Thomas <thomas@lekoala.be>",
|
|
9
|
-
"repository": {
|
|
10
|
-
"type": "git",
|
|
11
|
-
"url": "https://github.com/lekoala/actual-css.git"
|
|
12
|
-
},
|
|
13
|
-
"homepage": "https://github.com/lekoala/actual-css",
|
|
14
|
-
"bugs": {
|
|
15
|
-
"url": "https://github.com/lekoala/actual-css/issues"
|
|
16
|
-
},
|
|
17
|
-
"keywords": [
|
|
18
|
-
"css",
|
|
19
|
-
"css-framework",
|
|
20
|
-
"component-library",
|
|
21
|
-
"semantic",
|
|
22
|
-
"accessibility",
|
|
23
|
-
"dark-mode",
|
|
24
|
-
"themable",
|
|
25
|
-
"no-build",
|
|
26
|
-
"progressive-enhancement"
|
|
27
|
-
],
|
|
28
|
-
"exports": {
|
|
29
|
-
".": "./dist/actual.min.css",
|
|
30
|
-
"./full": "./dist/actual.full.min.css",
|
|
31
|
-
"./css": "./src/css/actual.css",
|
|
32
|
-
"./css/components": "./src/css/components/index.css",
|
|
33
|
-
"./css/components/*": "./src/css/components/*.css",
|
|
34
|
-
"./css/effects": "./src/css/effects/index.css",
|
|
35
|
-
"./css/effects/*": "./src/css/effects/*.css",
|
|
36
|
-
"./css/forms": "./src/css/forms/base.css",
|
|
37
|
-
"./css/forms/all": "./src/css/forms/index.css",
|
|
38
|
-
"./css/forms/*": "./src/css/forms/*.css",
|
|
39
|
-
"./css/full": "./src/css/actual.full.css",
|
|
40
|
-
"./css/layer": "./src/css/actual.layer.css",
|
|
41
|
-
"./css/layout": "./src/css/layout/index.css",
|
|
42
|
-
"./css/layout/*": "./src/css/layout/*.css",
|
|
43
|
-
"./css/themes": null,
|
|
44
|
-
"./css/themes/*": null,
|
|
45
|
-
"./css/typography": "./src/css/typography/index.css",
|
|
46
|
-
"./css/typography/*": "./src/css/typography/*.css",
|
|
47
|
-
"./css/utilities": "./src/css/utilities/index.css",
|
|
48
|
-
"./css/utilities/*": "./src/css/utilities/*.css",
|
|
49
|
-
"./js": "./src/js/index.js",
|
|
50
|
-
"./js/full": "./src/js/full.js",
|
|
51
|
-
"./js/command": "./src/js/command.js",
|
|
52
|
-
"./js/context-menu": "./src/js/context-menu.js",
|
|
53
|
-
"./js/dialog": "./src/js/dialog.js",
|
|
54
|
-
"./js/dismiss": "./src/js/dismiss.js",
|
|
55
|
-
"./js/escape": "./src/js/escape.js",
|
|
56
|
-
"./js/enhance": "./src/js/enhance.js",
|
|
57
|
-
"./js/enhancement-loader": "./src/js/enhancement-loader.js",
|
|
58
|
-
"./js/parse-config": "./src/js/parse-config.js",
|
|
59
|
-
"./js/events": "./src/js/events.js",
|
|
60
|
-
"./js/filter": "./src/js/filter.js",
|
|
61
|
-
"./js/flyout": "./src/js/flyout.js",
|
|
62
|
-
"./js/focus": "./src/js/focus.js",
|
|
63
|
-
"./js/focus-group": "./src/js/focus-group.js",
|
|
64
|
-
"./js/input": "./src/js/input.js",
|
|
65
|
-
"./js/keys": "./src/js/keys.js",
|
|
66
|
-
"./js/mask": "./src/js/mask.js",
|
|
67
|
-
"./js/menu": "./src/js/menu.js",
|
|
68
|
-
"./js/password": "./src/js/password.js",
|
|
69
|
-
"./js/scrollspy": "./src/js/scrollspy.js",
|
|
70
|
-
"./js/selectors": "./src/js/selectors.js",
|
|
71
|
-
"./js/tab": "./src/js/tab.js",
|
|
72
|
-
"./js/tooltip": "./src/js/tooltip.js",
|
|
73
|
-
"./js/validation": "./src/js/validation.js",
|
|
74
|
-
"./js/status": "./src/js/status.js",
|
|
75
|
-
"./js/surface": "./src/js/surface.js",
|
|
76
|
-
"./reserved-classes.json": "./reserved-classes.json",
|
|
77
|
-
"./components.json": "./components.json",
|
|
78
|
-
"./package.json": "./package.json"
|
|
79
|
-
},
|
|
80
|
-
"bin": {
|
|
81
|
-
"actual-css": "./src/cli/actual-css.js"
|
|
82
|
-
},
|
|
83
|
-
"main": "./dist/actual.js",
|
|
84
|
-
"style": "./dist/actual.min.css",
|
|
85
|
-
"unpkg": "./dist/actual.min.css",
|
|
86
|
-
"jsdelivr": "./dist/actual.min.css",
|
|
87
|
-
"sideEffects": true,
|
|
88
|
-
"files": [
|
|
89
|
-
"dist",
|
|
90
|
-
"src/css/*.css",
|
|
91
|
-
"src/css/core",
|
|
92
|
-
"src/css/layout",
|
|
93
|
-
"src/css/typography",
|
|
94
|
-
"src/css/forms",
|
|
95
|
-
"src/css/components",
|
|
96
|
-
"src/css/effects",
|
|
97
|
-
"src/css/utilities",
|
|
98
|
-
"src/cli",
|
|
99
|
-
"src/js",
|
|
100
|
-
"src/tooling",
|
|
101
|
-
"reserved-classes.json",
|
|
102
|
-
"components.json",
|
|
103
|
-
"docs",
|
|
104
|
-
"CHANGELOG.md",
|
|
105
|
-
"llms.txt",
|
|
106
|
-
"LICENSE",
|
|
107
|
-
"README.md"
|
|
108
|
-
],
|
|
109
|
-
"engines": {
|
|
110
|
-
"bun": ">=1.4.0",
|
|
111
|
-
"node": ">=18"
|
|
112
|
-
},
|
|
113
|
-
"scripts": {
|
|
114
|
-
"lint": "biome check",
|
|
115
|
-
"lint:fix": "biome check --write",
|
|
116
|
-
"build:docs": "bun run build:themes && bun scripts/build-docs.js",
|
|
117
|
-
"watch:docs": "bun run build:themes && bun scripts/build-docs.js --watch",
|
|
118
|
-
"check:docs": "bun scripts/check-docs.js",
|
|
119
|
-
"format:docs": "bun scripts/format-doc-tables.js",
|
|
120
|
-
"check:doc-classes": "bun scripts/check-doc-classes.js",
|
|
121
|
-
"check:compat": "bun scripts/check-compat.js",
|
|
122
|
-
"check:css-api": "bun scripts/check-css-api.js",
|
|
123
|
-
"check:color-space": "bun scripts/check-color-space.js",
|
|
124
|
-
"report:theme-contrast": "bun scripts/report-theme-contrast.js",
|
|
125
|
-
"report:neutral-ramp": "bun scripts/report-neutral-ramp.js",
|
|
126
|
-
"report:dead-css": "bun scripts/report-dead-css.js",
|
|
127
|
-
"report:overflow": "bun scripts/report-overflow.js",
|
|
128
|
-
"check:architecture": "bun scripts/check-css-architecture.js",
|
|
129
|
-
"build:dist": "bun scripts/build-dist.js",
|
|
130
|
-
"build:js": "bun scripts/build-js.js",
|
|
131
|
-
"build:themes": "bun scripts/build-themes.js",
|
|
132
|
-
"build:size": "bun scripts/build-size.js",
|
|
133
|
-
"check:enhance": "bun run scripts/check-enhance.js",
|
|
134
|
-
"generate:reserved": "bun scripts/generate-reserved-classes.js",
|
|
135
|
-
"check:reserved": "bun scripts/check-reserved.js",
|
|
136
|
-
"generate:catalog": "bun scripts/build-catalog.js",
|
|
137
|
-
"check:catalog": "bun scripts/check-catalog.js",
|
|
138
|
-
"check:links": "bun scripts/check-doc-links.js",
|
|
139
|
-
"check:templates": "bun scripts/check-templates.js",
|
|
140
|
-
"check:markup": "bun scripts/check-markup.js",
|
|
141
|
-
"shot:forced": "bun scripts/forced-colors-shot.js",
|
|
142
|
-
"shot:multi": "bun scripts/multi-shot.js",
|
|
143
|
-
"shot:page": "bun scripts/page-shot.js",
|
|
144
|
-
"probe": "bun scripts/probe.js",
|
|
145
|
-
"serve": "bun scripts/serve.js",
|
|
146
|
-
"check:sync": "bun scripts/check-sync.js",
|
|
147
|
-
"test": "bun test",
|
|
148
|
-
"test:changed": "bun test --changed=master",
|
|
149
|
-
"build:all": "bun run lint && bun run build:dist && bun run build:js && bun run build:size && bun run format:docs && bun run build:docs && bun run check:docs && bun run check:doc-classes && bun run check:compat && bun run check:css-api && bun run check:color-space && bun run check:architecture && bun run check:enhance && bun run generate:reserved && bun run check:reserved && bun run generate:catalog && bun run check:catalog && bun run check:sync && bun run check:links && bun run check:templates && bun run check:markup && bun run test",
|
|
150
|
-
"prepublishOnly": "bun run build:all"
|
|
151
|
-
},
|
|
152
|
-
"devDependencies": {
|
|
153
|
-
"@biomejs/biome": "^2.5.12",
|
|
154
|
-
"happy-dom": "^20.14.0"
|
|
155
|
-
},
|
|
156
|
-
"dependencies": {
|
|
157
|
-
"@lekoala/floating": "^0.2.0"
|
|
158
|
-
}
|
|
159
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "actual-css",
|
|
3
|
+
"version": "0.9.1",
|
|
4
|
+
"description": "Plain CSS component framework with semantic classes, universal variants, small tokens, theme hooks, and progressive enhancements.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"packageManager": "bun@1.4.2",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"author": "Thomas <thomas@lekoala.be>",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/lekoala/actual-css.git"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://github.com/lekoala/actual-css",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/lekoala/actual-css/issues"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"css",
|
|
19
|
+
"css-framework",
|
|
20
|
+
"component-library",
|
|
21
|
+
"semantic",
|
|
22
|
+
"accessibility",
|
|
23
|
+
"dark-mode",
|
|
24
|
+
"themable",
|
|
25
|
+
"no-build",
|
|
26
|
+
"progressive-enhancement"
|
|
27
|
+
],
|
|
28
|
+
"exports": {
|
|
29
|
+
".": "./dist/actual.min.css",
|
|
30
|
+
"./full": "./dist/actual.full.min.css",
|
|
31
|
+
"./css": "./src/css/actual.css",
|
|
32
|
+
"./css/components": "./src/css/components/index.css",
|
|
33
|
+
"./css/components/*": "./src/css/components/*.css",
|
|
34
|
+
"./css/effects": "./src/css/effects/index.css",
|
|
35
|
+
"./css/effects/*": "./src/css/effects/*.css",
|
|
36
|
+
"./css/forms": "./src/css/forms/base.css",
|
|
37
|
+
"./css/forms/all": "./src/css/forms/index.css",
|
|
38
|
+
"./css/forms/*": "./src/css/forms/*.css",
|
|
39
|
+
"./css/full": "./src/css/actual.full.css",
|
|
40
|
+
"./css/layer": "./src/css/actual.layer.css",
|
|
41
|
+
"./css/layout": "./src/css/layout/index.css",
|
|
42
|
+
"./css/layout/*": "./src/css/layout/*.css",
|
|
43
|
+
"./css/themes": null,
|
|
44
|
+
"./css/themes/*": null,
|
|
45
|
+
"./css/typography": "./src/css/typography/index.css",
|
|
46
|
+
"./css/typography/*": "./src/css/typography/*.css",
|
|
47
|
+
"./css/utilities": "./src/css/utilities/index.css",
|
|
48
|
+
"./css/utilities/*": "./src/css/utilities/*.css",
|
|
49
|
+
"./js": "./src/js/index.js",
|
|
50
|
+
"./js/full": "./src/js/full.js",
|
|
51
|
+
"./js/command": "./src/js/command.js",
|
|
52
|
+
"./js/context-menu": "./src/js/context-menu.js",
|
|
53
|
+
"./js/dialog": "./src/js/dialog.js",
|
|
54
|
+
"./js/dismiss": "./src/js/dismiss.js",
|
|
55
|
+
"./js/escape": "./src/js/escape.js",
|
|
56
|
+
"./js/enhance": "./src/js/enhance.js",
|
|
57
|
+
"./js/enhancement-loader": "./src/js/enhancement-loader.js",
|
|
58
|
+
"./js/parse-config": "./src/js/parse-config.js",
|
|
59
|
+
"./js/events": "./src/js/events.js",
|
|
60
|
+
"./js/filter": "./src/js/filter.js",
|
|
61
|
+
"./js/flyout": "./src/js/flyout.js",
|
|
62
|
+
"./js/focus": "./src/js/focus.js",
|
|
63
|
+
"./js/focus-group": "./src/js/focus-group.js",
|
|
64
|
+
"./js/input": "./src/js/input.js",
|
|
65
|
+
"./js/keys": "./src/js/keys.js",
|
|
66
|
+
"./js/mask": "./src/js/mask.js",
|
|
67
|
+
"./js/menu": "./src/js/menu.js",
|
|
68
|
+
"./js/password": "./src/js/password.js",
|
|
69
|
+
"./js/scrollspy": "./src/js/scrollspy.js",
|
|
70
|
+
"./js/selectors": "./src/js/selectors.js",
|
|
71
|
+
"./js/tab": "./src/js/tab.js",
|
|
72
|
+
"./js/tooltip": "./src/js/tooltip.js",
|
|
73
|
+
"./js/validation": "./src/js/validation.js",
|
|
74
|
+
"./js/status": "./src/js/status.js",
|
|
75
|
+
"./js/surface": "./src/js/surface.js",
|
|
76
|
+
"./reserved-classes.json": "./reserved-classes.json",
|
|
77
|
+
"./components.json": "./components.json",
|
|
78
|
+
"./package.json": "./package.json"
|
|
79
|
+
},
|
|
80
|
+
"bin": {
|
|
81
|
+
"actual-css": "./src/cli/actual-css.js"
|
|
82
|
+
},
|
|
83
|
+
"main": "./dist/actual.js",
|
|
84
|
+
"style": "./dist/actual.min.css",
|
|
85
|
+
"unpkg": "./dist/actual.min.css",
|
|
86
|
+
"jsdelivr": "./dist/actual.min.css",
|
|
87
|
+
"sideEffects": true,
|
|
88
|
+
"files": [
|
|
89
|
+
"dist",
|
|
90
|
+
"src/css/*.css",
|
|
91
|
+
"src/css/core",
|
|
92
|
+
"src/css/layout",
|
|
93
|
+
"src/css/typography",
|
|
94
|
+
"src/css/forms",
|
|
95
|
+
"src/css/components",
|
|
96
|
+
"src/css/effects",
|
|
97
|
+
"src/css/utilities",
|
|
98
|
+
"src/cli",
|
|
99
|
+
"src/js",
|
|
100
|
+
"src/tooling",
|
|
101
|
+
"reserved-classes.json",
|
|
102
|
+
"components.json",
|
|
103
|
+
"docs",
|
|
104
|
+
"CHANGELOG.md",
|
|
105
|
+
"llms.txt",
|
|
106
|
+
"LICENSE",
|
|
107
|
+
"README.md"
|
|
108
|
+
],
|
|
109
|
+
"engines": {
|
|
110
|
+
"bun": ">=1.4.0",
|
|
111
|
+
"node": ">=18"
|
|
112
|
+
},
|
|
113
|
+
"scripts": {
|
|
114
|
+
"lint": "biome check",
|
|
115
|
+
"lint:fix": "biome check --write",
|
|
116
|
+
"build:docs": "bun run build:themes && bun scripts/build-docs.js",
|
|
117
|
+
"watch:docs": "bun run build:themes && bun scripts/build-docs.js --watch",
|
|
118
|
+
"check:docs": "bun scripts/check-docs.js",
|
|
119
|
+
"format:docs": "bun scripts/format-doc-tables.js",
|
|
120
|
+
"check:doc-classes": "bun scripts/check-doc-classes.js",
|
|
121
|
+
"check:compat": "bun scripts/check-compat.js",
|
|
122
|
+
"check:css-api": "bun scripts/check-css-api.js",
|
|
123
|
+
"check:color-space": "bun scripts/check-color-space.js",
|
|
124
|
+
"report:theme-contrast": "bun scripts/report-theme-contrast.js",
|
|
125
|
+
"report:neutral-ramp": "bun scripts/report-neutral-ramp.js",
|
|
126
|
+
"report:dead-css": "bun scripts/report-dead-css.js",
|
|
127
|
+
"report:overflow": "bun scripts/report-overflow.js",
|
|
128
|
+
"check:architecture": "bun scripts/check-css-architecture.js",
|
|
129
|
+
"build:dist": "bun scripts/build-dist.js",
|
|
130
|
+
"build:js": "bun scripts/build-js.js",
|
|
131
|
+
"build:themes": "bun scripts/build-themes.js",
|
|
132
|
+
"build:size": "bun scripts/build-size.js",
|
|
133
|
+
"check:enhance": "bun run scripts/check-enhance.js",
|
|
134
|
+
"generate:reserved": "bun scripts/generate-reserved-classes.js",
|
|
135
|
+
"check:reserved": "bun scripts/check-reserved.js",
|
|
136
|
+
"generate:catalog": "bun scripts/build-catalog.js",
|
|
137
|
+
"check:catalog": "bun scripts/check-catalog.js",
|
|
138
|
+
"check:links": "bun scripts/check-doc-links.js",
|
|
139
|
+
"check:templates": "bun scripts/check-templates.js",
|
|
140
|
+
"check:markup": "bun scripts/check-markup.js",
|
|
141
|
+
"shot:forced": "bun scripts/forced-colors-shot.js",
|
|
142
|
+
"shot:multi": "bun scripts/multi-shot.js",
|
|
143
|
+
"shot:page": "bun scripts/page-shot.js",
|
|
144
|
+
"probe": "bun scripts/probe.js",
|
|
145
|
+
"serve": "bun scripts/serve.js",
|
|
146
|
+
"check:sync": "bun scripts/check-sync.js",
|
|
147
|
+
"test": "bun test",
|
|
148
|
+
"test:changed": "bun test --changed=master",
|
|
149
|
+
"build:all": "bun run lint && bun run build:dist && bun run build:js && bun run build:size && bun run format:docs && bun run build:docs && bun run check:docs && bun run check:doc-classes && bun run check:compat && bun run check:css-api && bun run check:color-space && bun run check:architecture && bun run check:enhance && bun run generate:reserved && bun run check:reserved && bun run generate:catalog && bun run check:catalog && bun run check:sync && bun run check:links && bun run check:templates && bun run check:markup && bun run test",
|
|
150
|
+
"prepublishOnly": "bun run build:all"
|
|
151
|
+
},
|
|
152
|
+
"devDependencies": {
|
|
153
|
+
"@biomejs/biome": "^2.5.12",
|
|
154
|
+
"happy-dom": "^20.14.0"
|
|
155
|
+
},
|
|
156
|
+
"dependencies": {
|
|
157
|
+
"@lekoala/floating": "^0.2.0"
|
|
158
|
+
}
|
|
159
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Accordion disclosures built on native details and summary.
|
|
3
3
|
*
|
|
4
|
+
* Docs: docs/pages/components/accordion.md
|
|
5
|
+
*
|
|
4
6
|
* Keeps the clickable summary affordance aligned and usable without JavaScript
|
|
5
7
|
* or demo styles. Decorative palettes and custom markers belong outside the
|
|
6
8
|
* base component.
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Avatars for initials, images, links, and buttons.
|
|
3
3
|
*
|
|
4
|
+
* Docs: docs/pages/components/avatar.md
|
|
5
|
+
*
|
|
4
6
|
* The visual box stays the same across semantic elements. Grouping and status
|
|
5
7
|
* dots (an empty .badge child) compose around the avatar without changing its
|
|
6
8
|
* meaning.
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Badges for compact labels, counts, and state hints.
|
|
3
3
|
*
|
|
4
|
+
* Docs: docs/pages/components/badge.md
|
|
5
|
+
*
|
|
4
6
|
* Soft by default. .solid for counters and notification badges. The dot
|
|
5
7
|
* (.badge:empty) stays solid regardless — a soft dot is pointless.
|
|
6
8
|
* Shared .outline variant stays available.
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Busy overlay — non-button loading state.
|
|
3
3
|
*
|
|
4
|
+
* Docs: docs/pages/components/spinner.md
|
|
5
|
+
*
|
|
4
6
|
* A non-button element with aria-busy="true" and a direct last-child .spinner
|
|
5
7
|
* shows that spinner as a centered overlay over a faded surface. Buttons keep
|
|
6
8
|
* their spinners inline (e.g. .btn[aria-busy] > .spinner stays inline-flex).
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Cards provide a neutral raised surface for grouped content.
|
|
3
3
|
*
|
|
4
|
+
* Docs: docs/pages/components/card.md
|
|
5
|
+
*
|
|
4
6
|
* Surface, border, radius, padding, density, and elevation stay local here.
|
|
5
7
|
* Direct header/footer children are structural slots; a direct footer is
|
|
6
8
|
* anchored to the card's bottom edge when extra block space is available (so
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Data list — term/value pairs for the properties of a single object.
|
|
3
3
|
*
|
|
4
|
+
* Docs: docs/pages/components/data-list.md
|
|
5
|
+
*
|
|
4
6
|
* Expects alternating <dt>/<dd> children: one term, one value per property.
|
|
5
7
|
* A plain <dl> handles richer relationships (several terms or descriptions)
|
|
6
8
|
* and stays untouched by this component.
|