eidotter 0.3.4 → 0.3.6

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.
@@ -1 +1,2 @@
1
1
  export { Icon } from './Icon';
2
+ export type { IconProps } from './Icon';
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+ import './Stat.css';
3
+ export interface StatProps {
4
+ /**
5
+ * The label describing the metric
6
+ */
7
+ label: string;
8
+ /**
9
+ * The metric value to display
10
+ */
11
+ value: string | number;
12
+ /**
13
+ * Optional trend direction
14
+ */
15
+ trend?: 'up' | 'down' | 'neutral';
16
+ /**
17
+ * Optional trend value (e.g., "+5%", "-12")
18
+ */
19
+ trendValue?: string;
20
+ /**
21
+ * Size variant
22
+ */
23
+ size?: 'small' | 'medium' | 'large';
24
+ /**
25
+ * Optional CSS class name
26
+ */
27
+ className?: string;
28
+ }
29
+ /**
30
+ * DOS-styled Stat component for displaying metrics with optional trends
31
+ *
32
+ * Features:
33
+ * - Label and value display
34
+ * - Optional trend indicator (up/down/neutral)
35
+ * - Three sizes (small, medium, large)
36
+ * - DOS-authentic styling with CGA colors
37
+ * - WCAG 2.1 AA compliant
38
+ */
39
+ export declare const Stat: React.FC<StatProps>;
@@ -0,0 +1,2 @@
1
+ export { Stat } from './Stat';
2
+ export type { StatProps } from './Stat';
@@ -0,0 +1,2 @@
1
+ export { Stat } from './components';
2
+ export type { StatProps } from './components';
package/dist/eidotter.css CHANGED
@@ -1 +1 @@
1
- .alert{width:100%;position:relative;overflow:hidden;text-align:left;font-size:16px;font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback);border:none}.alert--info{background-color:var(--color-semantic-alert-info);color:var(--color-cga-amber)}.alert--success{background-color:var(--color-semantic-alert-success);color:var(--color-cga-brightGreen)}.alert--warning{background-color:var(--color-semantic-alert-warning);color:var(--color-cga-amber)}.alert--error{background-color:var(--color-semantic-alert-error);color:var(--color-cga-brightRed)}.alert--l{width:1020px;overflow:hidden;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;padding:16px;box-sizing:border-box;gap:4px}.alert--s{width:350px;height:40px;overflow:hidden;display:flex;flex-direction:row;align-items:center;justify-content:flex-start;padding:0 8px;box-sizing:border-box;gap:8px}.alert__header{align-self:stretch;display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:8px;width:100%}.alert__icon{display:flex;align-items:center;justify-content:center;align-self:flex-start;width:24px;height:24px;flex-shrink:0;margin-top:2px}.alert--s .alert__icon{width:20px;height:20px}.alert--s .alert__icon svg{width:20px!important;height:20px!important}.alert__title{flex:1;position:relative;line-height:140%}.alert__close{display:flex;align-items:center;justify-content:center;width:20px;height:20px;flex-shrink:0;background:none;border:none;padding:0;cursor:pointer;color:inherit}.alert__close svg{width:20px!important;height:20px!important}.alert--s .alert__content{display:none}.alert__content{align-self:stretch;display:flex;flex-direction:row;align-items:flex-start;justify-content:flex-start;padding:0 0 0 32px;font-size:14px}.alert__message{flex:1;position:relative;line-height:140%;color:var(--color-cga-amberDim)}.alert__link{background:none;border:none;padding:0;cursor:pointer;font-family:inherit;font-size:inherit;color:inherit;text-decoration:none}.icon{display:inline-block;vertical-align:middle;fill:currentColor;color:var(--color-system-foreground)}.icon--l{width:56px;height:56px}.icon--s{width:24px;height:24px}.icon[role=button]{cursor:pointer}.icon[role=button]:hover{color:var(--color-system-link-hover)}.section{width:100%;border:1px solid var(--color-semantic-border-default);background-color:var(--color-semantic-background-primary);color:var(--color-semantic-text-primary);font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback)}.section__header{width:100%;display:flex;justify-content:space-between;align-items:center;padding:8px 16px;background:none;border:none;color:inherit;font-family:inherit;cursor:pointer;text-align:left}.section__title{flex:1;font-size:16px;line-height:24px}.section__icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px;margin-left:8px;color:inherit}.section__content{padding:16px;border-top:1px solid var(--color-semantic-border-default);font-size:14px;line-height:20px;color:var(--color-semantic-text-secondary)}.section--hover .section__header,.section__header:hover{background-color:var(--color-semantic-background-accent);color:var(--color-semantic-text-secondary)}.section--active .section__header,.section__header:active{background-color:var(--color-semantic-background-secondary);color:var(--color-cga-amber);text-shadow:0 0 8px var(--color-cga-amberGlow)}.section--expanded{border-color:var(--color-semantic-text-secondary)}.section--expanded .section__header{background-color:var(--color-semantic-background-accent);color:var(--color-semantic-text-secondary)}.section__header:focus{outline:none;box-shadow:0 0 0 2px var(--color-semantic-border-focus)}.section__icon{transition:transform .2s ease-in-out}.section--expanded .section__icon{transform:rotate(180deg)}.accordion-fill{width:100%;display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:var(--spacing-2);text-align:left;font-size:var(--typography-font-size-base);font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback);color:var(--color-semantic-text-secondary)}.accordion-fill>.section{margin-bottom:4px}.accordion-fill>.section:last-child{margin-bottom:0}.button{display:inline-flex;align-items:center;justify-content:center;position:relative;border:none;outline:none;cursor:pointer;text-decoration:none;font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback);font-weight:var(--typography-font-weight-regular);line-height:1;white-space:nowrap;-webkit-user-select:none;user-select:none;transition:all .1s ease;box-sizing:border-box;border:2px solid;background-clip:padding-box}.button--primary{background-color:var(--color-semantic-background-accent);color:var(--color-semantic-text-secondary);border-color:var(--color-semantic-border-default)}.button--primary:hover:not(:disabled){background-color:var(--color-semantic-border-focus);border-color:var(--color-semantic-text-secondary);box-shadow:var(--shadow-glow-sm)}.button--primary:active:not(:disabled){background-color:var(--color-semantic-background-accent);border-color:var(--color-semantic-text-disabled)}.button--secondary{background-color:var(--color-semantic-background-secondary);color:var(--color-semantic-text-primary);border-color:var(--color-semantic-border-default)}.button--secondary:hover:not(:disabled){background-color:var(--color-semantic-text-primary);color:var(--color-semantic-background-primary);border-color:var(--color-semantic-text-secondary);box-shadow:var(--shadow-glow-sm)}.button--secondary:active:not(:disabled){background-color:var(--color-semantic-background-secondary);border-color:var(--color-semantic-text-disabled)}.button--ghost{background-color:transparent;color:var(--color-semantic-text-primary);border-color:var(--color-semantic-border-default)}.button--ghost:hover:not(:disabled){background-color:var(--color-semantic-text-primary);color:var(--color-semantic-background-primary);border-color:var(--color-semantic-text-secondary);box-shadow:var(--shadow-glow-sm)}.button--ghost:active:not(:disabled){background-color:var(--color-semantic-background-secondary);color:var(--color-semantic-text-primary)}.button--link{background-color:transparent;color:var(--color-semantic-text-accent);border-color:transparent;text-decoration:underline}.button--link:hover:not(:disabled){color:var(--color-cga-amber-bright);background-color:transparent;border-color:transparent}.button--link:active:not(:disabled){color:var(--color-semantic-text-disabled)}.button--small{font-size:12px;padding:4px 8px;min-height:24px;gap:4px}.button--medium{font-size:14px;padding:8px 16px;min-height:32px;gap:6px}.button--large{font-size:16px;padding:12px 20px;min-height:40px;gap:8px}.button--disabled,.button:disabled{cursor:not-allowed;opacity:.6;background-color:var(--color-semantic-background-secondary)!important;color:var(--color-semantic-text-disabled)!important;border-color:var(--color-semantic-text-disabled)!important}.button--loading{cursor:wait}.button--full-width{width:100%;justify-content:center}.button__loading-indicator{animation:blink 1s infinite;margin-right:4px}@keyframes blink{0%,50%{opacity:1}51%,to{opacity:0}}.button__content{display:inline-flex;align-items:center;justify-content:center}.button__content--loading{opacity:.7}.button:focus-visible{outline:2px solid var(--color-semantic-border-focus);outline-offset:2px}@media(prefers-contrast:high){.button{border-width:3px}}@media(prefers-reduced-motion:reduce){.button{transition:none}.button__loading-indicator{animation:none}}.card{background-color:var(--color-semantic-background-primary);border:var(--border-width-medium) solid var(--color-semantic-border-default);font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback);color:var(--color-semantic-text-primary)}.card--default{border-color:var(--color-semantic-border-default)}.card--elevated{border-color:var(--color-semantic-text-secondary);box-shadow:4px 4px 0 0 var(--color-semantic-text-disabled)}.card--glow{border-color:var(--color-cga-amber);box-shadow:var(--shadow-glow-md)}.card--bordered{border-color:var(--color-semantic-text-accent);border-width:var(--border-width-medium)}.card__header{padding:var(--spacing-2) var(--spacing-3);border-bottom:var(--border-width-thin) solid var(--color-semantic-text-disabled);background-color:var(--color-cga-amber-dim)}.card__title{color:var(--color-semantic-text-secondary);font-size:var(--typography-font-size-base);font-weight:var(--typography-font-weight-bold);text-transform:uppercase}.card__body{padding:var(--spacing-3)}.card__footer{padding:var(--spacing-2) var(--spacing-3);border-top:var(--border-width-thin) solid var(--color-semantic-text-disabled);background-color:var(--color-semantic-background-secondary)}.card:focus-visible{outline:2px solid var(--color-semantic-border-focus);outline-offset:2px}@media(prefers-reduced-motion:reduce){.card{transition:none}}.checkbox{display:inline-flex;align-items:center;gap:var(--spacing-2);font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback);font-size:var(--typography-font-size-base);color:var(--color-semantic-text-primary);cursor:pointer;-webkit-user-select:none;user-select:none}.checkbox--disabled{cursor:not-allowed;opacity:.6}.checkbox__input{position:absolute;opacity:0;width:0;height:0}.checkbox__box{display:inline-block;white-space:nowrap;text-align:center;color:var(--color-semantic-text-primary)}.checkbox__box:before{content:"[ ]"}.checkbox__input:checked+.checkbox__box:before{content:"[X]";color:var(--color-semantic-text-accent)}.checkbox__input:focus-visible+.checkbox__box{outline:2px solid var(--color-semantic-border-focus);outline-offset:2px}.checkbox:hover:not(.checkbox--disabled) .checkbox__box{color:var(--color-semantic-text-secondary)}.checkbox:hover:not(.checkbox--disabled) .checkbox__input:checked+.checkbox__box:before{color:var(--color-semantic-text-secondary)}.checkbox--disabled .checkbox__box{color:var(--color-semantic-text-disabled)}.checkbox--disabled .checkbox__input:checked+.checkbox__box:before{color:var(--color-semantic-text-disabled)}.checkbox__label{color:inherit}@media(prefers-reduced-motion:reduce){.checkbox{transition:none}}.command-prompt{display:flex;align-items:center;font-family:var(--typography-font-family-primary);font-size:var(--typography-font-size-base);background:var(--color-semantic-background-primary);color:var(--color-semantic-text-accent);padding:var(--spacing-2);cursor:text}.command-prompt__prompt{color:var(--color-semantic-text-primary);margin-right:var(--spacing-2);white-space:nowrap;-webkit-user-select:none;user-select:none}.command-prompt__input{flex:1;background:transparent;border:none;color:var(--color-semantic-text-primary);font-family:inherit;font-size:inherit;outline:none;padding:0;margin:0;min-width:0}.command-prompt__input::placeholder{color:var(--color-semantic-text-disabled)}.command-prompt__cursor{color:var(--color-semantic-text-primary);animation:blink 1s step-end infinite;-webkit-user-select:none;user-select:none}.command-prompt--disabled{opacity:.5;cursor:not-allowed}.command-prompt--disabled .command-prompt__cursor{animation:none}.command-prompt__input:focus+.command-prompt__cursor{display:none}.progress{display:inline-flex;align-items:center;gap:var(--spacing-2);font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback)}.progress--small{font-size:var(--typography-font-size-xs)}.progress--medium{font-size:var(--typography-font-size-base)}.progress--large{font-size:var(--typography-font-size-lg)}.progress__bar{display:inline-block;letter-spacing:0;line-height:1}.progress__fill{color:var(--color-semantic-text-primary)}.progress--success .progress__fill{color:var(--color-semantic-status-success)}.progress--warning .progress__fill{color:var(--color-semantic-status-warning)}.progress--error .progress__fill{color:var(--color-semantic-status-error)}.progress__empty{color:var(--color-semantic-text-disabled)}.progress__label{color:var(--color-semantic-text-primary);min-width:4ch;text-align:right}@media(prefers-reduced-motion:reduce){.progress{transition:none}}.input{background:var(--color-semantic-background-primary);color:var(--color-semantic-text-primary);border:var(--border-width-medium) solid var(--color-semantic-border-default);font-family:var(--typography-font-family-primary);font-size:var(--typography-font-size-base);padding:var(--spacing-2);outline:none;width:100%;box-sizing:border-box}.input::placeholder{color:var(--color-semantic-text-disabled)}.input:focus{border-color:var(--color-semantic-border-focus);box-shadow:var(--shadow-glow-sm)}.input--error{border-color:var(--color-semantic-status-error)}.input--error:focus{border-color:var(--color-semantic-status-error)}.input--disabled,.input:disabled{opacity:.5;cursor:not-allowed;background:var(--color-semantic-background-primary)}:root{--terminal-bg: var(--color-semantic-background-primary);--terminal-border: var(--color-semantic-text-disabled);--terminal-border-active: var(--color-semantic-text-secondary);--terminal-title-bg: var(--color-semantic-background-secondary);--terminal-title-text: var(--color-semantic-text-secondary);--terminal-title-bg-inactive: var(--color-semantic-background-secondary);--terminal-title-text-inactive: var(--color-semantic-text-primary);--terminal-text: var(--color-semantic-text-primary);--terminal-control-bg: var(--color-semantic-text-primary);--terminal-control-symbol: var(--color-semantic-background-primary)}.terminal{background-color:var(--terminal-bg);border:2px solid var(--terminal-border);color:var(--terminal-text);font-family:Perfect DOS VGA,monospace;display:flex;flex-direction:column;box-shadow:5px 5px #00000080;min-width:320px;min-height:200px}.terminal:focus,.terminal--active{border-color:var(--terminal-border-active);outline:none}.terminal--active .terminal__title-bar{background-color:var(--color-semantic-background-accent)}.terminal--inactive{border-color:var(--terminal-border)}.terminal--inactive .terminal__title-bar{background-color:var(--terminal-title-bg-inactive);color:var(--terminal-title-text-inactive)}.terminal--small{width:480px;height:320px}.terminal--medium{width:640px;height:480px}.terminal--large{width:800px;height:600px}.terminal--maximized{width:100vw;height:100vh;position:fixed;top:0;left:0;border:none;box-shadow:none;z-index:1000}.terminal__title-bar{background-color:var(--terminal-title-bg);color:var(--terminal-title-text);padding:2px 4px;display:flex;justify-content:space-between;align-items:center;-webkit-user-select:none;user-select:none;cursor:default;height:24px}.terminal__title{display:flex;align-items:center;gap:4px}.terminal__controls{display:flex}.terminal__control{background-color:var(--terminal-control-bg);border:1px solid var(--terminal-control-symbol);width:20px;height:20px;margin-left:2px;cursor:default;display:flex;align-items:center;justify-content:center;color:var(--terminal-control-symbol)}.terminal__control:active{filter:invert(1)}.terminal__content{flex-grow:1;padding:8px;overflow-y:auto}.terminal__default-content{display:flex;flex-direction:column}.terminal__prompt{display:flex}.terminal__path{margin-right:4px}.terminal__cursor{background-color:var(--terminal-text);width:8px;height:16px;animation:blink 1s step-end infinite}@keyframes blink{50%{opacity:0}}.terminal__resize-handle{position:absolute;bottom:0;right:0;width:16px;height:16px;cursor:nwse-resize}.terminal--minimized{display:none}.terminal__taskbar-item{display:inline-flex;align-items:center;background-color:var(--terminal-control-bg);border:1px solid var(--color-semantic-background-primary);padding:2px 8px;cursor:default;-webkit-user-select:none;user-select:none}.terminal__taskbar-title{margin-left:4px;color:var(--color-semantic-background-primary)}.tabs{display:inline-flex;align-items:center;gap:0;font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback);box-sizing:border-box}.tabs__tab{position:relative;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer;font-family:inherit;font-weight:var(--typography-font-weight-regular);text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;transition:all .15s ease;color:var(--color-semantic-text-primary);opacity:.7}.tabs__tab:hover:not(:disabled){opacity:1}.tabs__tab--active{opacity:1}.tabs__tab--disabled{cursor:not-allowed;opacity:.3}.tabs--underline{gap:4px}.tabs--underline .tabs__tab{padding:8px 16px;border-bottom:2px solid transparent}.tabs--underline .tabs__tab--active{border-bottom-color:var(--color-semantic-text-accent);color:var(--color-semantic-text-accent)}.tabs--underline .tabs__tab:hover:not(:disabled):not(.tabs__tab--active){border-bottom-color:var(--color-semantic-border-default)}.tabs--pills{gap:4px;padding:4px;background-color:var(--color-semantic-background-secondary);border:1px solid var(--color-semantic-border-default);border-radius:2px}.tabs--pills .tabs__tab{padding:6px 12px;border-radius:2px}.tabs--pills .tabs__tab--active{background-color:var(--color-semantic-background-accent);color:var(--color-semantic-text-secondary)}.tabs--pills .tabs__tab:hover:not(:disabled):not(.tabs__tab--active){background-color:var(--color-semantic-background-primary)}.tabs--small .tabs__tab{font-size:10px;padding:4px 8px}.tabs--small.tabs--underline .tabs__tab{padding:4px 10px}.tabs--medium .tabs__tab{font-size:12px}.tabs--large .tabs__tab{font-size:14px;padding:10px 20px}.tabs--large.tabs--underline .tabs__tab{padding:10px 20px}.tabs--large.tabs--pills .tabs__tab{padding:8px 16px}.tabs__tab:focus-visible{outline:2px solid var(--color-semantic-border-focus);outline-offset:2px}@media(prefers-contrast:high){.tabs--underline .tabs__tab{border-bottom-width:3px}.tabs--pills{border-width:2px}}@media(prefers-reduced-motion:reduce){.tabs__tab{transition:none}}.badge{display:inline-flex;align-items:center;justify-content:center;gap:6px;font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback);font-weight:var(--typography-font-weight-regular);line-height:1;white-space:nowrap;-webkit-user-select:none;user-select:none;border-radius:2px;text-transform:uppercase;letter-spacing:.05em;box-sizing:border-box}.badge--small{font-size:10px;padding:2px 6px;min-height:18px;gap:4px}.badge--medium{font-size:12px;padding:4px 8px;min-height:22px;gap:6px}.badge--default{background-color:var(--color-semantic-background-secondary);color:var(--color-semantic-text-primary);border:1px solid var(--color-semantic-border-default)}.badge--success{background-color:transparent;color:var(--color-cga-brightGreen);border:1px solid var(--color-cga-brightGreen)}.badge--warning{background-color:transparent;color:var(--color-cga-yellow);border:1px solid var(--color-cga-yellow)}.badge--error{background-color:transparent;color:var(--color-cga-brightRed);border:1px solid var(--color-cga-brightRed)}.badge--info{background-color:transparent;color:var(--color-cga-brightCyan);border:1px solid var(--color-cga-brightCyan)}.badge--accent{background-color:var(--color-semantic-background-accent);color:var(--color-semantic-text-secondary);border:1px solid var(--color-semantic-border-default)}.badge__dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.badge--default .badge__dot{background-color:var(--color-semantic-text-primary)}.badge--success .badge__dot{background-color:var(--color-cga-brightGreen)}.badge--warning .badge__dot{background-color:var(--color-cga-yellow)}.badge--error .badge__dot{background-color:var(--color-cga-brightRed)}.badge--info .badge__dot{background-color:var(--color-cga-brightCyan)}.badge--accent .badge__dot{background-color:var(--color-semantic-text-secondary)}.badge__content{display:inline-flex;align-items:center}@media(prefers-contrast:high){.badge{border-width:2px}}@media(prefers-reduced-motion:reduce){.badge{transition:none}}.switch{display:inline-flex;align-items:center;justify-content:flex-start;padding:0;border:none;background:transparent;cursor:pointer;outline:none;font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback)}.switch__track{position:relative;display:inline-flex;align-items:center;width:40px;height:20px;background-color:var(--color-semantic-background-secondary);border:2px solid var(--color-semantic-border-default);border-radius:2px;transition:all .15s ease}.switch__thumb{position:absolute;left:2px;width:12px;height:12px;background-color:var(--color-semantic-text-primary);border-radius:1px;transition:transform .15s ease,background-color .15s ease}.switch--checked .switch__track{background-color:var(--color-semantic-background-accent);border-color:var(--color-semantic-border-focus)}.switch--checked .switch__thumb{transform:translate(20px);background-color:var(--color-semantic-text-secondary)}.switch:hover:not(.switch--disabled) .switch__track{border-color:var(--color-semantic-border-hover)}.switch:hover:not(.switch--disabled):not(.switch--checked) .switch__thumb{background-color:var(--color-semantic-text-accent)}.switch:focus-visible .switch__track{outline:2px solid var(--color-semantic-border-focus);outline-offset:2px}.switch--disabled{cursor:not-allowed;opacity:.5}.switch--disabled .switch__track{background-color:var(--color-semantic-background-secondary);border-color:var(--color-semantic-border-disabled)}.switch--disabled .switch__thumb{background-color:var(--color-semantic-text-disabled)}@media(prefers-contrast:high){.switch__track{border-width:3px}}@media(prefers-reduced-motion:reduce){.switch__track,.switch__thumb{transition:none}}.breadcrumb{font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback);font-size:var(--typography-font-size-xs);text-transform:uppercase;letter-spacing:.35em}.breadcrumb__list{display:flex;flex-wrap:wrap;align-items:center;gap:8px;list-style:none;margin:0;padding:0}.breadcrumb__item{display:flex;align-items:center;gap:8px}.breadcrumb__link{display:inline-flex;align-items:center;gap:4px;color:var(--color-semantic-text-disabled);text-decoration:none;transition:color .15s ease}.breadcrumb__link:hover{color:var(--color-semantic-text-primary)}.breadcrumb__link:focus-visible{outline:2px solid var(--color-semantic-border-focus);outline-offset:2px}.breadcrumb__back-arrow{font-size:1em;line-height:1}.breadcrumb__separator{color:var(--color-semantic-text-disabled);opacity:.6;-webkit-user-select:none;user-select:none}.breadcrumb__current{color:var(--color-semantic-text-primary)}@media(min-width:768px){.breadcrumb{font-size:var(--typography-font-size-sm)}}@media(prefers-contrast:high){.breadcrumb__link:focus-visible{outline-width:3px}}@media(prefers-reduced-motion:reduce){.breadcrumb__link{transition:none}}.retro-effects{--retro-intensity: 1;pointer-events:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999}.retro-effects__scanlines{position:absolute;top:0;right:0;bottom:0;left:0;opacity:calc(.6 * var(--retro-intensity));mix-blend-mode:screen;background:repeating-linear-gradient(to bottom,rgba(255,176,0,.05) 0px,rgba(255,176,0,.02) 1px,transparent 2px,transparent 4px);animation:retro-scanline 9s linear infinite}.retro-effects__glow{position:absolute;top:0;right:0;bottom:0;left:0;opacity:var(--retro-intensity);box-shadow:inset 0 0 200px #ffb0001f;background:radial-gradient(ellipse 120% 100% at center,transparent 0%,transparent 50%,rgba(0,0,0,.3) 80%,rgba(0,0,0,.5) 100%)}.retro-effects__flicker{position:absolute;top:0;right:0;bottom:0;left:0;opacity:calc(.04 * var(--retro-intensity));background-color:#ffb0001a;animation:retro-flicker .18s steps(2) infinite}@keyframes retro-scanline{0%{transform:translateY(0)}to{transform:translateY(12px)}}@keyframes retro-flicker{0%{opacity:calc(.02 * var(--retro-intensity))}50%{opacity:calc(.06 * var(--retro-intensity))}to{opacity:calc(.02 * var(--retro-intensity))}}@media(prefers-reduced-motion:reduce){.retro-effects__scanlines,.retro-effects__flicker{animation:none}}.timeline-node{display:inline-flex;align-items:center;gap:var(--spacing-2);font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback)}.timeline-node__marker{display:block;background:var(--color-cga-amber-dim);border:2px solid var(--color-cga-amber-dim);transition:all .15s ease;flex-shrink:0}.timeline-node--small .timeline-node__marker{width:8px;height:8px}.timeline-node--medium .timeline-node__marker{width:12px;height:12px}.timeline-node--large .timeline-node__marker{width:16px;height:16px}.timeline-node--circle .timeline-node__marker{border-radius:50%}.timeline-node--square .timeline-node__marker{border-radius:2px}.timeline-node--diamond .timeline-node__marker{transform:rotate(45deg)}.timeline-node--diamond.timeline-node--small .timeline-node__marker{width:7px;height:7px}.timeline-node--diamond.timeline-node--medium .timeline-node__marker{width:10px;height:10px}.timeline-node--diamond.timeline-node--large .timeline-node__marker{width:14px;height:14px}.timeline-node--default .timeline-node__marker{background:var(--color-cga-amber-dim);border-color:var(--color-cga-amber-dim)}.timeline-node--primary .timeline-node__marker{background:var(--color-cga-amber);border-color:var(--color-cga-amber)}.timeline-node--secondary .timeline-node__marker{background:var(--color-semantic-text-primary);border-color:var(--color-semantic-text-primary)}.timeline-node--accent .timeline-node__marker{background:var(--color-semantic-text-accent);border-color:var(--color-semantic-text-accent)}.timeline-node--interactive{cursor:pointer}.timeline-node--interactive:hover .timeline-node__marker{background:var(--color-cga-amber);border-color:var(--color-cga-amber);box-shadow:var(--shadow-glow-sm)}.timeline-node--active .timeline-node__marker{background:var(--color-cga-amber-bright);border-color:var(--color-cga-amber-bright);box-shadow:var(--shadow-glow-sm)}.timeline-node--active.timeline-node--interactive:hover .timeline-node__marker{box-shadow:var(--shadow-glow-md)}.timeline-node--interactive:focus-visible{outline:2px solid var(--color-semantic-border-focus);outline-offset:2px}.timeline-node__label{color:var(--color-cga-amber);font-size:var(--typography-font-size-xs);white-space:nowrap}.timeline-node--small .timeline-node__label{font-size:10px}.timeline-node--large .timeline-node__label{font-size:var(--typography-font-size-sm)}.timeline-node--label-left,.timeline-node--label-right{flex-direction:row}.timeline-node--label-top,.timeline-node--label-bottom{flex-direction:column}.timeline-node__label--left,.timeline-node__label--top{order:-1}@media(prefers-reduced-motion:reduce){.timeline-node__marker{transition:none}}@media(prefers-contrast:high){.timeline-node__marker{border-width:3px}.timeline-node--interactive:focus-visible{outline-width:3px}}.modal{padding:0;border:none;background:transparent;max-width:100vw;max-height:100vh}.modal::backdrop{background-color:#000c}.modal__container{background-color:var(--color-semantic-background-primary);border:2px solid var(--color-cga-yellow);box-shadow:var(--shadow-drop);width:480px;max-width:calc(100vw - 32px);max-height:calc(100vh - 32px);display:flex;flex-direction:column;font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback)}.modal__header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-4);border-bottom:1px solid var(--color-cga-darkGray)}.modal__title{margin:0;font-size:16px;font-weight:400;color:var(--color-cga-yellow);line-height:1.4}.modal__close{display:flex;align-items:center;justify-content:center;background:none;border:none;padding:4px;cursor:pointer;color:var(--color-cga-lightGray)}.modal__close:hover{color:var(--color-cga-yellow)}.modal__close:focus-visible{outline:2px solid var(--color-semantic-border-focus);outline-offset:2px}.modal__body{padding:var(--spacing-4);color:var(--color-cga-lightGray);font-size:14px;line-height:1.5;overflow-y:auto;flex:1}.modal__footer{display:flex;gap:var(--spacing-2);justify-content:flex-end;padding:var(--spacing-4);border-top:1px solid var(--color-cga-darkGray)}.modal[open]{animation:modal-open .15s ease-out}.modal[open]::backdrop{animation:backdrop-open .15s ease-out}@keyframes modal-open{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes backdrop-open{0%{opacity:0}to{opacity:1}}@media(prefers-reduced-motion:reduce){.modal[open],.modal[open]::backdrop{animation:none}}@media(prefers-contrast:high){.modal__container{border-width:3px}}
1
+ .alert{width:100%;position:relative;overflow:hidden;text-align:left;font-size:16px;font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback);border:none}.alert--info{background-color:var(--color-semantic-alert-info);color:var(--color-cga-amber)}.alert--success{background-color:var(--color-semantic-alert-success);color:var(--color-cga-brightGreen)}.alert--warning{background-color:var(--color-semantic-alert-warning);color:var(--color-cga-amber)}.alert--error{background-color:var(--color-semantic-alert-error);color:var(--color-cga-brightRed)}.alert--l{width:1020px;overflow:hidden;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;padding:16px;box-sizing:border-box;gap:4px}.alert--s{width:350px;height:40px;overflow:hidden;display:flex;flex-direction:row;align-items:center;justify-content:flex-start;padding:0 8px;box-sizing:border-box;gap:8px}.alert__header{align-self:stretch;display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:8px;width:100%}.alert__icon{display:flex;align-items:center;justify-content:center;align-self:flex-start;width:24px;height:24px;flex-shrink:0;margin-top:2px}.alert--s .alert__icon{width:20px;height:20px}.alert--s .alert__icon svg{width:20px!important;height:20px!important}.alert__title{flex:1;position:relative;line-height:140%}.alert__close{display:flex;align-items:center;justify-content:center;width:20px;height:20px;flex-shrink:0;background:none;border:none;padding:0;cursor:pointer;color:inherit}.alert__close svg{width:20px!important;height:20px!important}.alert--s .alert__content{display:none}.alert__content{align-self:stretch;display:flex;flex-direction:row;align-items:flex-start;justify-content:flex-start;padding:0 0 0 32px;font-size:14px}.alert__message{flex:1;position:relative;line-height:140%;color:var(--color-cga-amberDim)}.alert__link{background:none;border:none;padding:0;cursor:pointer;font-family:inherit;font-size:inherit;color:inherit;text-decoration:none}@media(prefers-contrast:high){.alert{border:2px solid currentColor}.alert__title{font-weight:700}.alert__close:focus-visible{outline:3px solid currentColor;outline-offset:2px}.alert__link{text-decoration:underline;font-weight:700}}.icon{display:inline-block;vertical-align:middle;fill:currentColor;color:var(--color-system-foreground)}.icon--l{width:56px;height:56px}.icon--s{width:24px;height:24px}.icon[role=button]{cursor:pointer}.icon[role=button]:hover{color:var(--color-system-link-hover)}@media(prefers-contrast:high){.icon[role=button]:focus-visible{outline:3px solid currentColor;outline-offset:2px}}.section{width:100%;border:1px solid var(--color-semantic-border-default);background-color:var(--color-semantic-background-primary);color:var(--color-semantic-text-primary);font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback)}.section__header{width:100%;display:flex;justify-content:space-between;align-items:center;padding:8px 16px;background:none;border:none;color:inherit;font-family:inherit;cursor:pointer;text-align:left}.section__title{flex:1;font-size:16px;line-height:24px}.section__icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px;margin-left:8px;color:inherit}.section__content{padding:16px;border-top:1px solid var(--color-semantic-border-default);font-size:14px;line-height:20px;color:var(--color-semantic-text-secondary)}.section--hover .section__header,.section__header:hover{background-color:var(--color-semantic-background-accent);color:var(--color-semantic-text-secondary)}.section--active .section__header,.section__header:active{background-color:var(--color-semantic-background-secondary);color:var(--color-cga-amber);text-shadow:0 0 8px var(--color-cga-amberGlow)}.section--expanded{border-color:var(--color-semantic-text-secondary)}.section--expanded .section__header{background-color:var(--color-semantic-background-accent);color:var(--color-semantic-text-secondary)}.section__header:focus{outline:none;box-shadow:0 0 0 2px var(--color-semantic-border-focus)}.section__icon{transition:transform .2s ease-in-out}.section--expanded .section__icon{transform:rotate(180deg)}@media(prefers-contrast:high){.section{border-width:3px}.section__title{font-weight:700}.section__content{border-top-width:2px}.section__header:focus{box-shadow:0 0 0 3px var(--color-semantic-border-focus)}}@media(prefers-reduced-motion:reduce){.section__icon{transition:none}}.accordion-fill{width:100%;display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:var(--spacing-2);text-align:left;font-size:var(--typography-font-size-base);font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback);color:var(--color-semantic-text-secondary)}.accordion-fill>.section{margin-bottom:4px}.accordion-fill>.section:last-child{margin-bottom:0}@media(prefers-contrast:high){.accordion-fill{font-weight:600}}.button{display:inline-flex;align-items:center;justify-content:center;position:relative;border:none;outline:none;cursor:pointer;text-decoration:none;font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback);font-weight:var(--typography-font-weight-regular);line-height:1;white-space:nowrap;-webkit-user-select:none;user-select:none;transition:all .1s ease;box-sizing:border-box;border:2px solid;background-clip:padding-box}.button--primary{background-color:var(--color-semantic-background-accent);color:var(--color-semantic-text-secondary);border-color:var(--color-semantic-border-default)}.button--primary:hover:not(:disabled){background-color:var(--color-semantic-border-focus);border-color:var(--color-semantic-text-secondary);box-shadow:var(--shadow-glow-sm)}.button--primary:active:not(:disabled){background-color:var(--color-semantic-background-accent);border-color:var(--color-semantic-text-disabled)}.button--secondary{background-color:var(--color-semantic-background-secondary);color:var(--color-semantic-text-primary);border-color:var(--color-semantic-border-default)}.button--secondary:hover:not(:disabled){background-color:var(--color-semantic-text-primary);color:var(--color-semantic-background-primary);border-color:var(--color-semantic-text-secondary);box-shadow:var(--shadow-glow-sm)}.button--secondary:active:not(:disabled){background-color:var(--color-semantic-background-secondary);border-color:var(--color-semantic-text-disabled)}.button--ghost{background-color:transparent;color:var(--color-semantic-text-primary);border-color:var(--color-semantic-border-default)}.button--ghost:hover:not(:disabled){background-color:var(--color-semantic-text-primary);color:var(--color-semantic-background-primary);border-color:var(--color-semantic-text-secondary);box-shadow:var(--shadow-glow-sm)}.button--ghost:active:not(:disabled){background-color:var(--color-semantic-background-secondary);color:var(--color-semantic-text-primary)}.button--link{background-color:transparent;color:var(--color-semantic-text-accent);border-color:transparent;text-decoration:underline}.button--link:hover:not(:disabled){color:var(--color-cga-amber-bright);background-color:transparent;border-color:transparent}.button--link:active:not(:disabled){color:var(--color-semantic-text-disabled)}.button--small{font-size:12px;padding:4px 8px;min-height:24px;gap:4px}.button--medium{font-size:14px;padding:8px 16px;min-height:32px;gap:6px}.button--large{font-size:16px;padding:12px 20px;min-height:40px;gap:8px}.button--disabled,.button:disabled{cursor:not-allowed;opacity:.6;background-color:var(--color-semantic-background-secondary)!important;color:var(--color-semantic-text-disabled)!important;border-color:var(--color-semantic-text-disabled)!important}.button--loading{cursor:wait}.button--full-width{width:100%;justify-content:center}.button__loading-indicator{animation:blink 1s infinite;margin-right:4px}@keyframes blink{0%,50%{opacity:1}51%,to{opacity:0}}.button__content{display:inline-flex;align-items:center;justify-content:center}.button__content--loading{opacity:.7}.button:focus-visible{outline:2px solid var(--color-semantic-border-focus);outline-offset:2px}@media(prefers-contrast:high){.button{border-width:3px}}@media(prefers-reduced-motion:reduce){.button{transition:none}.button__loading-indicator{animation:none}}.card{background-color:var(--color-semantic-background-primary);border:var(--border-width-medium) solid var(--color-semantic-border-default);font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback);color:var(--color-semantic-text-primary)}.card--default{border-color:var(--color-semantic-border-default)}.card--elevated{border-color:var(--color-semantic-text-secondary);box-shadow:4px 4px 0 0 var(--color-semantic-text-disabled)}.card--glow{border-color:var(--color-cga-amber);box-shadow:var(--shadow-glow-md)}.card--bordered{border-color:var(--color-semantic-text-accent);border-width:var(--border-width-medium)}.card__header{padding:var(--spacing-2) var(--spacing-3);border-bottom:var(--border-width-thin) solid var(--color-semantic-text-disabled);background-color:var(--color-cga-amber-dim)}.card__title{color:var(--color-semantic-text-secondary);font-size:var(--typography-font-size-base);font-weight:var(--typography-font-weight-bold);text-transform:uppercase}.card__body{padding:var(--spacing-3)}.card__footer{padding:var(--spacing-2) var(--spacing-3);border-top:var(--border-width-thin) solid var(--color-semantic-text-disabled);background-color:var(--color-semantic-background-secondary)}.card:focus-visible{outline:2px solid var(--color-semantic-border-focus);outline-offset:2px}@media(prefers-contrast:high){.card{border-width:3px}.card__header{border-bottom-width:2px}.card__footer{border-top-width:2px}.card:focus-visible{outline-width:3px}}@media(prefers-reduced-motion:reduce){.card{transition:none}}.checkbox{display:inline-flex;align-items:center;gap:var(--spacing-2);font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback);font-size:var(--typography-font-size-base);color:var(--color-semantic-text-primary);cursor:pointer;-webkit-user-select:none;user-select:none}.checkbox--disabled{cursor:not-allowed;opacity:.6}.checkbox__input{position:absolute;opacity:0;width:0;height:0}.checkbox__box{display:inline-block;white-space:nowrap;text-align:center;color:var(--color-semantic-text-primary)}.checkbox__box:before{content:"[ ]"}.checkbox__input:checked+.checkbox__box:before{content:"[X]";color:var(--color-semantic-text-accent)}.checkbox__input:focus-visible+.checkbox__box{outline:2px solid var(--color-semantic-border-focus);outline-offset:2px}.checkbox:hover:not(.checkbox--disabled) .checkbox__box{color:var(--color-semantic-text-secondary)}.checkbox:hover:not(.checkbox--disabled) .checkbox__input:checked+.checkbox__box:before{color:var(--color-semantic-text-secondary)}.checkbox--disabled .checkbox__box{color:var(--color-semantic-text-disabled)}.checkbox--disabled .checkbox__input:checked+.checkbox__box:before{color:var(--color-semantic-text-disabled)}.checkbox__label{color:inherit}@media(prefers-contrast:high){.checkbox__box{font-weight:700}.checkbox__input:focus-visible+.checkbox__box{outline-width:3px}.checkbox__label{font-weight:600}}@media(prefers-reduced-motion:reduce){.checkbox{transition:none}}.command-prompt{display:flex;align-items:center;font-family:var(--typography-font-family-primary);font-size:var(--typography-font-size-base);background:var(--color-semantic-background-primary);color:var(--color-semantic-text-accent);padding:var(--spacing-2);cursor:text}.command-prompt__prompt{color:var(--color-semantic-text-primary);margin-right:var(--spacing-2);white-space:nowrap;-webkit-user-select:none;user-select:none}.command-prompt__input{flex:1;background:transparent;border:none;color:var(--color-semantic-text-primary);font-family:inherit;font-size:inherit;outline:none;padding:0;margin:0;min-width:0}.command-prompt__input::placeholder{color:var(--color-semantic-text-disabled)}.command-prompt__cursor{color:var(--color-semantic-text-primary);animation:blink 1s step-end infinite;-webkit-user-select:none;user-select:none}.command-prompt--disabled{opacity:.5;cursor:not-allowed}.command-prompt--disabled .command-prompt__cursor{animation:none}.command-prompt__input:focus+.command-prompt__cursor{display:none}@media(prefers-contrast:high){.command-prompt{border:3px solid var(--color-semantic-border-default)}.command-prompt__prompt{font-weight:700}.command-prompt__input:focus{outline:3px solid var(--color-semantic-border-focus);outline-offset:2px}}@media(prefers-reduced-motion:reduce){.command-prompt__cursor{animation:none}}.progress{display:inline-flex;align-items:center;gap:var(--spacing-2);font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback)}.progress--small{font-size:var(--typography-font-size-xs)}.progress--medium{font-size:var(--typography-font-size-base)}.progress--large{font-size:var(--typography-font-size-lg)}.progress__bar{display:inline-block;letter-spacing:0;line-height:1}.progress__fill{color:var(--color-semantic-text-primary)}.progress--success .progress__fill{color:var(--color-semantic-status-success)}.progress--warning .progress__fill{color:var(--color-semantic-status-warning)}.progress--error .progress__fill{color:var(--color-semantic-status-error)}.progress__empty{color:var(--color-semantic-text-disabled)}.progress__label{color:var(--color-semantic-text-primary);min-width:4ch;text-align:right}@media(prefers-contrast:high){.progress__fill,.progress__label{font-weight:700}}@media(prefers-reduced-motion:reduce){.progress{transition:none}}.input{background:var(--color-semantic-background-primary);color:var(--color-semantic-text-primary);border:var(--border-width-medium) solid var(--color-semantic-border-default);font-family:var(--typography-font-family-primary);font-size:var(--typography-font-size-base);padding:var(--spacing-2);outline:none;width:100%;box-sizing:border-box}.input::placeholder{color:var(--color-semantic-text-disabled)}.input:focus{border-color:var(--color-semantic-border-focus);box-shadow:var(--shadow-glow-sm)}.input--error{border-color:var(--color-semantic-status-error)}.input--error:focus{border-color:var(--color-semantic-status-error)}.input--disabled,.input:disabled{opacity:.5;cursor:not-allowed;background:var(--color-semantic-background-primary)}@media(prefers-contrast:high){.input{border-width:3px}.input:focus{outline:3px solid var(--color-semantic-border-focus);outline-offset:2px}}:root{--terminal-bg: var(--color-semantic-background-primary);--terminal-border: var(--color-semantic-text-disabled);--terminal-border-active: var(--color-semantic-text-secondary);--terminal-title-bg: var(--color-semantic-background-secondary);--terminal-title-text: var(--color-semantic-text-secondary);--terminal-title-bg-inactive: var(--color-semantic-background-secondary);--terminal-title-text-inactive: var(--color-semantic-text-primary);--terminal-text: var(--color-semantic-text-primary);--terminal-control-bg: var(--color-semantic-text-primary);--terminal-control-symbol: var(--color-semantic-background-primary)}.terminal{background-color:var(--terminal-bg);border:2px solid var(--terminal-border);color:var(--terminal-text);font-family:Perfect DOS VGA,monospace;display:flex;flex-direction:column;box-shadow:5px 5px #00000080;min-width:320px;min-height:200px}.terminal:focus,.terminal--active{border-color:var(--terminal-border-active);outline:none}.terminal--active .terminal__title-bar{background-color:var(--color-semantic-background-accent)}.terminal--inactive{border-color:var(--terminal-border)}.terminal--inactive .terminal__title-bar{background-color:var(--terminal-title-bg-inactive);color:var(--terminal-title-text-inactive)}.terminal--small{width:480px;height:320px}.terminal--medium{width:640px;height:480px}.terminal--large{width:800px;height:600px}.terminal--maximized{width:100vw;height:100vh;position:fixed;top:0;left:0;border:none;box-shadow:none;z-index:1000}.terminal__title-bar{background-color:var(--terminal-title-bg);color:var(--terminal-title-text);padding:2px 4px;display:flex;justify-content:space-between;align-items:center;-webkit-user-select:none;user-select:none;cursor:default;height:24px}.terminal__title{display:flex;align-items:center;gap:4px}.terminal__controls{display:flex}.terminal__control{background-color:var(--terminal-control-bg);border:1px solid var(--terminal-control-symbol);width:20px;height:20px;margin-left:2px;cursor:default;display:flex;align-items:center;justify-content:center;color:var(--terminal-control-symbol)}.terminal__control:active{filter:invert(1)}.terminal__content{flex-grow:1;padding:8px;overflow-y:auto}.terminal__default-content{display:flex;flex-direction:column}.terminal__prompt{display:flex}.terminal__path{margin-right:4px}.terminal__cursor{background-color:var(--terminal-text);width:8px;height:16px;animation:blink 1s step-end infinite}@keyframes blink{50%{opacity:0}}.terminal__resize-handle{position:absolute;bottom:0;right:0;width:16px;height:16px;cursor:nwse-resize}.terminal--minimized{display:none}.terminal__taskbar-item{display:inline-flex;align-items:center;background-color:var(--terminal-control-bg);border:1px solid var(--color-semantic-background-primary);padding:2px 8px;cursor:default;-webkit-user-select:none;user-select:none}.terminal__taskbar-title{margin-left:4px;color:var(--color-semantic-background-primary)}@media(prefers-contrast:high){.terminal{border-width:3px}.terminal__title{font-weight:700}.terminal__control{border-width:2px}.terminal:focus{outline:3px solid var(--color-semantic-border-focus);outline-offset:2px}}@media(prefers-reduced-motion:reduce){.terminal__cursor{animation:none}}.tabs{display:inline-flex;align-items:center;gap:0;font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback);box-sizing:border-box}.tabs__tab{position:relative;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer;font-family:inherit;font-weight:var(--typography-font-weight-regular);text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;transition:all .15s ease;color:var(--color-semantic-text-primary);opacity:.7}.tabs__tab:hover:not(:disabled){opacity:1}.tabs__tab--active{opacity:1}.tabs__tab--disabled{cursor:not-allowed;opacity:.3}.tabs--underline{gap:4px}.tabs--underline .tabs__tab{padding:8px 16px;border-bottom:2px solid transparent}.tabs--underline .tabs__tab--active{border-bottom-color:var(--color-semantic-text-accent);color:var(--color-semantic-text-accent)}.tabs--underline .tabs__tab:hover:not(:disabled):not(.tabs__tab--active){border-bottom-color:var(--color-semantic-border-default)}.tabs--pills{gap:4px;padding:4px;background-color:var(--color-semantic-background-secondary);border:1px solid var(--color-semantic-border-default);border-radius:2px}.tabs--pills .tabs__tab{padding:6px 12px;border-radius:2px}.tabs--pills .tabs__tab--active{background-color:var(--color-semantic-background-accent);color:var(--color-semantic-text-secondary)}.tabs--pills .tabs__tab:hover:not(:disabled):not(.tabs__tab--active){background-color:var(--color-semantic-background-primary)}.tabs--small .tabs__tab{font-size:10px;padding:4px 8px}.tabs--small.tabs--underline .tabs__tab{padding:4px 10px}.tabs--medium .tabs__tab{font-size:12px}.tabs--large .tabs__tab{font-size:14px;padding:10px 20px}.tabs--large.tabs--underline .tabs__tab{padding:10px 20px}.tabs--large.tabs--pills .tabs__tab{padding:8px 16px}.tabs__tab:focus-visible{outline:2px solid var(--color-semantic-border-focus);outline-offset:2px}@media(prefers-contrast:high){.tabs--underline .tabs__tab{border-bottom-width:3px}.tabs--pills{border-width:2px}}@media(prefers-reduced-motion:reduce){.tabs__tab{transition:none}}.badge{display:inline-flex;align-items:center;justify-content:center;gap:6px;font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback);font-weight:var(--typography-font-weight-regular);line-height:1;white-space:nowrap;-webkit-user-select:none;user-select:none;border-radius:2px;text-transform:uppercase;letter-spacing:.05em;box-sizing:border-box}.badge--small{font-size:10px;padding:2px 6px;min-height:18px;gap:4px}.badge--medium{font-size:12px;padding:4px 8px;min-height:22px;gap:6px}.badge--default{background-color:var(--color-semantic-background-secondary);color:var(--color-semantic-text-primary);border:1px solid var(--color-semantic-border-default)}.badge--success{background-color:transparent;color:var(--color-cga-brightGreen);border:1px solid var(--color-cga-brightGreen)}.badge--warning{background-color:transparent;color:var(--color-cga-yellow);border:1px solid var(--color-cga-yellow)}.badge--error{background-color:transparent;color:var(--color-cga-brightRed);border:1px solid var(--color-cga-brightRed)}.badge--info{background-color:transparent;color:var(--color-cga-brightCyan);border:1px solid var(--color-cga-brightCyan)}.badge--accent{background-color:var(--color-semantic-background-accent);color:var(--color-semantic-text-secondary);border:1px solid var(--color-semantic-border-default)}.badge__dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.badge--default .badge__dot{background-color:var(--color-semantic-text-primary)}.badge--success .badge__dot{background-color:var(--color-cga-brightGreen)}.badge--warning .badge__dot{background-color:var(--color-cga-yellow)}.badge--error .badge__dot{background-color:var(--color-cga-brightRed)}.badge--info .badge__dot{background-color:var(--color-cga-brightCyan)}.badge--accent .badge__dot{background-color:var(--color-semantic-text-secondary)}.badge__content{display:inline-flex;align-items:center}@media(prefers-contrast:high){.badge{border-width:2px}}@media(prefers-reduced-motion:reduce){.badge{transition:none}}.switch{display:inline-flex;align-items:center;justify-content:flex-start;padding:0;border:none;background:transparent;cursor:pointer;outline:none;font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback)}.switch__track{position:relative;display:inline-flex;align-items:center;width:40px;height:20px;background-color:var(--color-semantic-background-secondary);border:2px solid var(--color-semantic-border-default);border-radius:2px;transition:all .15s ease}.switch__thumb{position:absolute;left:2px;width:12px;height:12px;background-color:var(--color-semantic-text-primary);border-radius:1px;transition:transform .15s ease,background-color .15s ease}.switch--checked .switch__track{background-color:var(--color-semantic-background-accent);border-color:var(--color-semantic-border-focus)}.switch--checked .switch__thumb{transform:translate(20px);background-color:var(--color-semantic-text-secondary)}.switch:hover:not(.switch--disabled) .switch__track{border-color:var(--color-semantic-border-hover)}.switch:hover:not(.switch--disabled):not(.switch--checked) .switch__thumb{background-color:var(--color-semantic-text-accent)}.switch:focus-visible .switch__track{outline:2px solid var(--color-semantic-border-focus);outline-offset:2px}.switch--disabled{cursor:not-allowed;opacity:.5}.switch--disabled .switch__track{background-color:var(--color-semantic-background-secondary);border-color:var(--color-semantic-border-disabled)}.switch--disabled .switch__thumb{background-color:var(--color-semantic-text-disabled)}@media(prefers-contrast:high){.switch__track{border-width:3px}}@media(prefers-reduced-motion:reduce){.switch__track,.switch__thumb{transition:none}}.breadcrumb{font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback);font-size:var(--typography-font-size-xs);text-transform:uppercase;letter-spacing:.35em}.breadcrumb__list{display:flex;flex-wrap:wrap;align-items:center;gap:8px;list-style:none;margin:0;padding:0}.breadcrumb__item{display:flex;align-items:center;gap:8px}.breadcrumb__link{display:inline-flex;align-items:center;gap:4px;color:var(--color-semantic-text-disabled);text-decoration:none;transition:color .15s ease}.breadcrumb__link:hover{color:var(--color-semantic-text-primary)}.breadcrumb__link:focus-visible{outline:2px solid var(--color-semantic-border-focus);outline-offset:2px}.breadcrumb__back-arrow{font-size:1em;line-height:1}.breadcrumb__separator{color:var(--color-semantic-text-disabled);opacity:.6;-webkit-user-select:none;user-select:none}.breadcrumb__current{color:var(--color-semantic-text-primary)}@media(min-width:768px){.breadcrumb{font-size:var(--typography-font-size-sm)}}@media(prefers-contrast:high){.breadcrumb__link:focus-visible{outline-width:3px}}@media(prefers-reduced-motion:reduce){.breadcrumb__link{transition:none}}.retro-effects{--retro-intensity: 1;pointer-events:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999}.retro-effects__scanlines{position:absolute;top:0;right:0;bottom:0;left:0;opacity:calc(.6 * var(--retro-intensity));mix-blend-mode:screen;background:repeating-linear-gradient(to bottom,rgba(255,176,0,.05) 0px,rgba(255,176,0,.02) 1px,transparent 2px,transparent 4px);animation:retro-scanline 9s linear infinite}.retro-effects__glow{position:absolute;top:0;right:0;bottom:0;left:0;opacity:var(--retro-intensity);box-shadow:inset 0 0 200px #ffb0001f;background:radial-gradient(ellipse 120% 100% at center,transparent 0%,transparent 50%,rgba(0,0,0,.3) 80%,rgba(0,0,0,.5) 100%)}.retro-effects__flicker{position:absolute;top:0;right:0;bottom:0;left:0;opacity:calc(.04 * var(--retro-intensity));background-color:#ffb0001a;animation:retro-flicker .18s steps(2) infinite}@keyframes retro-scanline{0%{transform:translateY(0)}to{transform:translateY(12px)}}@keyframes retro-flicker{0%{opacity:calc(.02 * var(--retro-intensity))}50%{opacity:calc(.06 * var(--retro-intensity))}to{opacity:calc(.02 * var(--retro-intensity))}}@media(prefers-reduced-motion:reduce){.retro-effects__scanlines,.retro-effects__flicker{animation:none}}@media(prefers-contrast:high){.retro-effects{display:none}}.timeline-node{display:inline-flex;align-items:center;gap:var(--spacing-2);font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback)}.timeline-node__marker{display:block;background:var(--color-cga-amber-dim);border:2px solid var(--color-cga-amber-dim);transition:all .15s ease;flex-shrink:0}.timeline-node--small .timeline-node__marker{width:8px;height:8px}.timeline-node--medium .timeline-node__marker{width:12px;height:12px}.timeline-node--large .timeline-node__marker{width:16px;height:16px}.timeline-node--circle .timeline-node__marker{border-radius:50%}.timeline-node--square .timeline-node__marker{border-radius:2px}.timeline-node--diamond .timeline-node__marker{transform:rotate(45deg)}.timeline-node--diamond.timeline-node--small .timeline-node__marker{width:7px;height:7px}.timeline-node--diamond.timeline-node--medium .timeline-node__marker{width:10px;height:10px}.timeline-node--diamond.timeline-node--large .timeline-node__marker{width:14px;height:14px}.timeline-node--default .timeline-node__marker{background:var(--color-cga-amber-dim);border-color:var(--color-cga-amber-dim)}.timeline-node--primary .timeline-node__marker{background:var(--color-cga-amber);border-color:var(--color-cga-amber)}.timeline-node--secondary .timeline-node__marker{background:var(--color-semantic-text-primary);border-color:var(--color-semantic-text-primary)}.timeline-node--accent .timeline-node__marker{background:var(--color-semantic-text-accent);border-color:var(--color-semantic-text-accent)}.timeline-node--interactive{cursor:pointer}.timeline-node--interactive:hover .timeline-node__marker{background:var(--color-cga-amber);border-color:var(--color-cga-amber);box-shadow:var(--shadow-glow-sm)}.timeline-node--active .timeline-node__marker{background:var(--color-cga-amber-bright);border-color:var(--color-cga-amber-bright);box-shadow:var(--shadow-glow-sm)}.timeline-node--active.timeline-node--interactive:hover .timeline-node__marker{box-shadow:var(--shadow-glow-md)}.timeline-node--interactive:focus-visible{outline:2px solid var(--color-semantic-border-focus);outline-offset:2px}.timeline-node__label{color:var(--color-cga-amber);font-size:var(--typography-font-size-xs);white-space:nowrap}.timeline-node--small .timeline-node__label{font-size:10px}.timeline-node--large .timeline-node__label{font-size:var(--typography-font-size-sm)}.timeline-node--label-left,.timeline-node--label-right{flex-direction:row}.timeline-node--label-top,.timeline-node--label-bottom{flex-direction:column}.timeline-node__label--left,.timeline-node__label--top{order:-1}@media(prefers-reduced-motion:reduce){.timeline-node__marker{transition:none}}@media(prefers-contrast:high){.timeline-node__marker{border-width:3px}.timeline-node--interactive:focus-visible{outline-width:3px}}.modal{padding:0;border:none;background:transparent;max-width:100vw;max-height:100vh}.modal::backdrop{background-color:#000c}.modal__container{background-color:var(--color-semantic-background-primary);border:2px solid var(--color-cga-yellow);box-shadow:var(--shadow-drop);width:480px;max-width:calc(100vw - 32px);max-height:calc(100vh - 32px);display:flex;flex-direction:column;font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback)}.modal__header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-4);border-bottom:1px solid var(--color-cga-darkGray)}.modal__title{margin:0;font-size:16px;font-weight:400;color:var(--color-cga-yellow);line-height:1.4}.modal__close{display:flex;align-items:center;justify-content:center;background:none;border:none;padding:4px;cursor:pointer;color:var(--color-cga-lightGray)}.modal__close:hover{color:var(--color-cga-yellow)}.modal__close:focus-visible{outline:2px solid var(--color-semantic-border-focus);outline-offset:2px}.modal__body{padding:var(--spacing-4);color:var(--color-cga-lightGray);font-size:14px;line-height:1.5;overflow-y:auto;flex:1}.modal__footer{display:flex;gap:var(--spacing-2);justify-content:flex-end;padding:var(--spacing-4);border-top:1px solid var(--color-cga-darkGray)}.modal[open]{animation:modal-open .15s ease-out}.modal[open]::backdrop{animation:backdrop-open .15s ease-out}@keyframes modal-open{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes backdrop-open{0%{opacity:0}to{opacity:1}}@media(prefers-reduced-motion:reduce){.modal[open],.modal[open]::backdrop{animation:none}}@media(prefers-contrast:high){.modal__container{border-width:3px}}.stat{display:flex;flex-direction:column;gap:4px;font-family:var(--typography-font-family-primary),var(--typography-font-family-fallback);box-sizing:border-box}.stat--small{gap:2px}.stat--small .stat__label{font-size:10px}.stat--small .stat__value{font-size:18px}.stat--small .stat__trend{font-size:10px}.stat--medium{gap:4px}.stat--medium .stat__label{font-size:11px}.stat--medium .stat__value{font-size:24px}.stat--medium .stat__trend{font-size:11px}.stat--large{gap:6px}.stat--large .stat__label{font-size:12px}.stat--large .stat__value{font-size:32px}.stat--large .stat__trend{font-size:12px}.stat__label{color:var(--color-semantic-text-primary);text-transform:uppercase;letter-spacing:.05em;line-height:1.2}.stat__value{color:var(--color-semantic-text-accent);font-weight:var(--typography-font-weight-bold);line-height:1;font-variant-numeric:tabular-nums}.stat__trend{display:inline-flex;align-items:center;gap:4px;line-height:1}.stat__trend--up{color:var(--color-cga-brightGreen)}.stat__trend--down{color:var(--color-cga-brightRed)}.stat__trend--neutral{color:var(--color-semantic-text-primary)}.stat__trend-icon{font-size:.8em}.stat__trend-value{font-variant-numeric:tabular-nums}@media(prefers-contrast:high){.stat__value,.stat__trend{font-weight:700}.stat__trend-icon{font-size:1em}}@media(prefers-reduced-motion:reduce){.stat{transition:none}}
package/dist/index.d.ts CHANGED
@@ -15,6 +15,7 @@ export { Breadcrumb } from './components/Breadcrumb';
15
15
  export { RetroEffects } from './components/RetroEffects';
16
16
  export { TimelineNode } from './components/TimelineNode';
17
17
  export { Modal } from './components/Modal';
18
+ export { Stat } from './components/Stat';
18
19
  export type { AlertProps } from './components/Alert';
19
20
  export type { SectionProps, AccordionFillProps } from './components/Accordion';
20
21
  export type { ButtonProps } from './components/Button';
@@ -22,6 +23,7 @@ export type { CardProps } from './components/Card';
22
23
  export type { CheckboxProps } from './components/Checkbox';
23
24
  export type { CommandPromptProps } from './components/CommandPrompt';
24
25
  export type { ProgressProps } from './components/Progress';
26
+ export type { IconProps } from './components/Icon';
25
27
  export type { InputProps } from './components/Input';
26
28
  export type { TerminalProps } from './components/Terminal';
27
29
  export type { TabsProps, TabItem } from './components/Tabs';
@@ -31,4 +33,5 @@ export type { BreadcrumbProps, BreadcrumbItem } from './components/Breadcrumb';
31
33
  export type { RetroEffectsProps } from './components/RetroEffects';
32
34
  export type { TimelineNodeProps, TimelineNodeShape, TimelineNodeVariant } from './components/TimelineNode';
33
35
  export type { ModalProps } from './components/Modal';
34
- export declare const version = "0.3.0";
36
+ export type { StatProps } from './components/Stat';
37
+ export declare const version = "0.3.5";
package/dist/index.es.js CHANGED
@@ -1,24 +1,24 @@
1
- import { jsx as e, jsxs as _, Fragment as j } from "react/jsx-runtime";
2
- import A, { useState as C, useEffect as B, useRef as S, forwardRef as E, useCallback as I, useId as K } from "react";
1
+ import { jsx as e, jsxs as u, Fragment as j } from "react/jsx-runtime";
2
+ import A, { useState as g, useEffect as D, useRef as S, forwardRef as E, useCallback as I, useId as K } from "react";
3
3
  import { createPortal as R } from "react-dom";
4
4
  const k = ({
5
- name: t,
5
+ name: r,
6
6
  size: i = "L",
7
- className: s = "",
7
+ className: t = "",
8
8
  onClick: a,
9
9
  color: n,
10
- role: r
10
+ role: s
11
11
  }) => {
12
12
  const l = process.env.NODE_ENV === "production" ? "/eiDotter" : "";
13
13
  return /* @__PURE__ */ e(
14
14
  "svg",
15
15
  {
16
- className: `icon ${i === "L" ? "icon--l" : "icon--s"} ${s} ${r ? `icon--${r}` : ""}`.trim(),
16
+ className: `icon ${i === "L" ? "icon--l" : "icon--s"} ${t} ${s ? `icon--${s}` : ""}`.trim(),
17
17
  onClick: a,
18
- role: r,
19
- "aria-label": `${t} icon`,
18
+ role: s,
19
+ "aria-label": `${r} icon`,
20
20
  style: n ? { color: n } : void 0,
21
- children: /* @__PURE__ */ e("use", { href: `${l}/icons/sprites.svg#${t}` })
21
+ children: /* @__PURE__ */ e("use", { href: `${l}/icons/sprites.svg#${r}` })
22
22
  }
23
23
  );
24
24
  }, L = {
@@ -26,16 +26,16 @@ const k = ({
26
26
  success: "Done",
27
27
  warning: "Warning",
28
28
  error: "Error"
29
- }, W = ({
30
- size: t = "L",
29
+ }, O = ({
30
+ size: r = "L",
31
31
  type: i = "info",
32
- title: s = "Notification Title",
32
+ title: t = "Notification Title",
33
33
  children: a = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Blandit amet diam neque bibendum. Quisque in praesent sit erat...",
34
34
  onClose: n,
35
- onClickHere: r,
35
+ onClickHere: s,
36
36
  className: l = ""
37
- }) => /* @__PURE__ */ _("div", { className: `alert alert--${t.toLowerCase()} alert--${i} ${l}`.trim(), children: [
38
- /* @__PURE__ */ _("div", { className: "alert__header", children: [
37
+ }) => /* @__PURE__ */ u("div", { className: `alert alert--${r.toLowerCase()} alert--${i} ${l}`.trim(), children: [
38
+ /* @__PURE__ */ u("div", { className: "alert__header", children: [
39
39
  /* @__PURE__ */ e("div", { className: "alert__icon", children: /* @__PURE__ */ e(
40
40
  k,
41
41
  {
@@ -44,7 +44,7 @@ const k = ({
44
44
  "aria-label": `${i} alert`
45
45
  }
46
46
  ) }),
47
- /* @__PURE__ */ e("div", { className: "alert__title", children: s }),
47
+ /* @__PURE__ */ e("div", { className: "alert__title", children: t }),
48
48
  n && /* @__PURE__ */ e(
49
49
  "button",
50
50
  {
@@ -61,35 +61,35 @@ const k = ({
61
61
  }
62
62
  )
63
63
  ] }),
64
- /* @__PURE__ */ e("div", { className: "alert__content", children: /* @__PURE__ */ _("div", { className: "alert__message", children: [
64
+ /* @__PURE__ */ e("div", { className: "alert__content", children: /* @__PURE__ */ u("div", { className: "alert__message", children: [
65
65
  /* @__PURE__ */ e("span", { children: a }),
66
- r && /* @__PURE__ */ e(
66
+ s && /* @__PURE__ */ e(
67
67
  "button",
68
68
  {
69
69
  className: "alert__link",
70
- onClick: r,
70
+ onClick: s,
71
71
  "aria-label": "Click for more information",
72
72
  children: "Click here"
73
73
  }
74
74
  )
75
75
  ] }) })
76
76
  ] }), M = ({
77
- title: t,
77
+ title: r,
78
78
  children: i,
79
- defaultExpanded: s = !1,
79
+ defaultExpanded: t = !1,
80
80
  isHovered: a = !1,
81
81
  isActive: n = !1,
82
- onToggle: r
82
+ onToggle: s
83
83
  }) => {
84
- const [l, o] = C(s);
85
- B(() => {
86
- o(s);
87
- }, [s]);
84
+ const [l, o] = g(t);
85
+ D(() => {
86
+ o(t);
87
+ }, [t]);
88
88
  const c = () => {
89
89
  const m = !l;
90
- o(m), r == null || r(m);
90
+ o(m), s == null || s(m);
91
91
  };
92
- return /* @__PURE__ */ _(
92
+ return /* @__PURE__ */ u(
93
93
  "div",
94
94
  {
95
95
  className: `
@@ -99,14 +99,14 @@ const k = ({
99
99
  ${n ? "section--active" : ""}
100
100
  `.trim(),
101
101
  children: [
102
- /* @__PURE__ */ _(
102
+ /* @__PURE__ */ u(
103
103
  "button",
104
104
  {
105
105
  className: "section__header",
106
106
  onClick: c,
107
107
  "aria-expanded": l,
108
108
  children: [
109
- /* @__PURE__ */ e("div", { className: "section__title", children: t }),
109
+ /* @__PURE__ */ e("div", { className: "section__title", children: r }),
110
110
  /* @__PURE__ */ e("div", { className: "section__icon", children: /* @__PURE__ */ e(
111
111
  k,
112
112
  {
@@ -121,50 +121,50 @@ const k = ({
121
121
  ]
122
122
  }
123
123
  );
124
- }, O = ({
125
- sections: t,
124
+ }, Q = ({
125
+ sections: r,
126
126
  defaultExpandedIndex: i = -1
127
127
  }) => {
128
- const [s, a] = C(i), n = (r, l) => {
129
- a(l ? r : -1);
128
+ const [t, a] = g(i), n = (s, l) => {
129
+ a(l ? s : -1);
130
130
  };
131
- return /* @__PURE__ */ e("div", { className: "accordion-fill", children: t.map((r, l) => /* @__PURE__ */ e(
131
+ return /* @__PURE__ */ e("div", { className: "accordion-fill", children: r.map((s, l) => /* @__PURE__ */ e(
132
132
  M,
133
133
  {
134
- title: r.title,
134
+ title: s.title,
135
135
  defaultExpanded: l === i,
136
136
  onToggle: (o) => n(l, o),
137
- children: r.content
137
+ children: s.content
138
138
  },
139
139
  l
140
140
  )) });
141
- }, Q = ({
142
- variant: t = "primary",
141
+ }, G = ({
142
+ variant: r = "primary",
143
143
  size: i = "medium",
144
- type: s = "button",
144
+ type: t = "button",
145
145
  disabled: a = !1,
146
146
  loading: n = !1,
147
- children: r,
147
+ children: s,
148
148
  onClick: l,
149
149
  className: o = "",
150
150
  fullWidth: c = !1,
151
151
  ...m
152
152
  }) => {
153
- const d = (b) => {
154
- a || n || l == null || l(b);
153
+ const d = (p) => {
154
+ a || n || l == null || l(p);
155
155
  }, h = [
156
156
  "button",
157
- `button--${t}`,
157
+ `button--${r}`,
158
158
  `button--${i}`,
159
159
  a && "button--disabled",
160
160
  n && "button--loading",
161
161
  c && "button--full-width",
162
162
  o
163
163
  ].filter(Boolean).join(" ");
164
- return /* @__PURE__ */ _(
164
+ return /* @__PURE__ */ u(
165
165
  "button",
166
166
  {
167
- type: s,
167
+ type: t,
168
168
  className: h,
169
169
  onClick: d,
170
170
  disabled: a || n,
@@ -172,58 +172,58 @@ const k = ({
172
172
  ...m,
173
173
  children: [
174
174
  n && /* @__PURE__ */ e("span", { className: "button__loading-indicator", "aria-hidden": "true", children: "█" }),
175
- /* @__PURE__ */ e("span", { className: `button__content ${n ? "button__content--loading" : ""}`, children: r })
175
+ /* @__PURE__ */ e("span", { className: `button__content ${n ? "button__content--loading" : ""}`, children: s })
176
176
  ]
177
177
  }
178
178
  );
179
- }, G = ({
180
- title: t,
179
+ }, H = ({
180
+ title: r,
181
181
  children: i,
182
- footer: s,
182
+ footer: t,
183
183
  variant: a = "default",
184
184
  className: n = "",
185
- ...r
185
+ ...s
186
186
  }) => {
187
187
  const l = [
188
188
  "card",
189
189
  `card--${a}`,
190
190
  n
191
191
  ].filter(Boolean).join(" ");
192
- return /* @__PURE__ */ _("div", { className: l, ...r, children: [
193
- t && /* @__PURE__ */ e("div", { className: "card__header", children: /* @__PURE__ */ e("span", { className: "card__title", children: t }) }),
192
+ return /* @__PURE__ */ u("div", { className: l, ...s, children: [
193
+ r && /* @__PURE__ */ e("div", { className: "card__header", children: /* @__PURE__ */ e("span", { className: "card__title", children: r }) }),
194
194
  /* @__PURE__ */ e("div", { className: "card__body", children: i }),
195
- s && /* @__PURE__ */ e("div", { className: "card__footer", children: s })
195
+ t && /* @__PURE__ */ e("div", { className: "card__footer", children: t })
196
196
  ] });
197
- }, H = ({
198
- checked: t,
197
+ }, J = ({
198
+ checked: r,
199
199
  defaultChecked: i,
200
- onChange: s,
200
+ onChange: t,
201
201
  label: a,
202
202
  disabled: n = !1,
203
- name: r,
203
+ name: s,
204
204
  value: l,
205
205
  className: o = "",
206
206
  "aria-label": c,
207
207
  ...m
208
208
  }) => {
209
- const d = (b) => {
210
- n || s == null || s(b.target.checked);
209
+ const d = (p) => {
210
+ n || t == null || t(p.target.checked);
211
211
  }, h = [
212
212
  "checkbox",
213
213
  n && "checkbox--disabled",
214
214
  o
215
215
  ].filter(Boolean).join(" ");
216
- return /* @__PURE__ */ _("label", { className: h, children: [
216
+ return /* @__PURE__ */ u("label", { className: h, children: [
217
217
  /* @__PURE__ */ e(
218
218
  "input",
219
219
  {
220
220
  type: "checkbox",
221
221
  className: "checkbox__input",
222
- checked: t,
222
+ checked: r,
223
223
  defaultChecked: i,
224
224
  onChange: d,
225
225
  disabled: n,
226
- name: r,
226
+ name: s,
227
227
  value: l,
228
228
  "aria-label": c || a,
229
229
  ...m
@@ -232,32 +232,32 @@ const k = ({
232
232
  /* @__PURE__ */ e("span", { className: "checkbox__box", "aria-hidden": "true" }),
233
233
  a && /* @__PURE__ */ e("span", { className: "checkbox__label", children: a })
234
234
  ] });
235
- }, J = ({
236
- prompt: t = "C:\\>",
235
+ }, P = ({
236
+ prompt: r = "C:\\>",
237
237
  onCommand: i,
238
- autoFocus: s = !1,
238
+ autoFocus: t = !1,
239
239
  className: a = "",
240
240
  placeholder: n,
241
- disabled: r = !1
241
+ disabled: s = !1
242
242
  }) => {
243
- const [l, o] = C(""), c = S(null);
244
- B(() => {
245
- s && c.current && c.current.focus();
246
- }, [s]);
243
+ const [l, o] = g(""), c = S(null);
244
+ D(() => {
245
+ t && c.current && c.current.focus();
246
+ }, [t]);
247
247
  const m = (h) => {
248
- h.key === "Enter" && l.trim() && !r && (i(l.trim()), o(""));
248
+ h.key === "Enter" && l.trim() && !s && (i(l.trim()), o(""));
249
249
  }, d = () => {
250
- !r && c.current && c.current.focus();
250
+ !s && c.current && c.current.focus();
251
251
  };
252
- return /* @__PURE__ */ _(
252
+ return /* @__PURE__ */ u(
253
253
  "div",
254
254
  {
255
- className: `command-prompt ${r ? "command-prompt--disabled" : ""} ${a}`.trim(),
255
+ className: `command-prompt ${s ? "command-prompt--disabled" : ""} ${a}`.trim(),
256
256
  onClick: d,
257
257
  role: "textbox",
258
258
  "aria-label": "Command prompt",
259
259
  children: [
260
- /* @__PURE__ */ e("span", { className: "command-prompt__prompt", "aria-hidden": "true", children: t }),
260
+ /* @__PURE__ */ e("span", { className: "command-prompt__prompt", "aria-hidden": "true", children: r }),
261
261
  /* @__PURE__ */ e(
262
262
  "input",
263
263
  {
@@ -266,13 +266,13 @@ const k = ({
266
266
  value: l,
267
267
  onChange: (h) => o(h.target.value),
268
268
  onKeyDown: m,
269
- autoFocus: s,
269
+ autoFocus: t,
270
270
  spellCheck: !1,
271
271
  autoComplete: "off",
272
272
  autoCapitalize: "off",
273
273
  autoCorrect: "off",
274
274
  placeholder: n,
275
- disabled: r,
275
+ disabled: s,
276
276
  "aria-label": "Command input"
277
277
  }
278
278
  ),
@@ -280,38 +280,38 @@ const k = ({
280
280
  ]
281
281
  }
282
282
  );
283
- }, P = ({
284
- value: t,
283
+ }, V = ({
284
+ value: r,
285
285
  max: i = 100,
286
- variant: s = "default",
286
+ variant: t = "default",
287
287
  size: a = "medium",
288
288
  showLabel: n = !1,
289
- className: r = "",
289
+ className: s = "",
290
290
  "aria-label": l,
291
291
  ...o
292
292
  }) => {
293
- const c = Math.min(100, Math.max(0, t / i * 100)), m = Math.round(c / 5), d = 20 - m, h = [
293
+ const c = Math.min(100, Math.max(0, r / i * 100)), m = Math.round(c / 5), d = 20 - m, h = [
294
294
  "progress",
295
- `progress--${s}`,
295
+ `progress--${t}`,
296
296
  `progress--${a}`,
297
- r
297
+ s
298
298
  ].filter(Boolean).join(" ");
299
- return /* @__PURE__ */ _(
299
+ return /* @__PURE__ */ u(
300
300
  "div",
301
301
  {
302
302
  className: h,
303
303
  role: "progressbar",
304
- "aria-valuenow": t,
304
+ "aria-valuenow": r,
305
305
  "aria-valuemin": 0,
306
306
  "aria-valuemax": i,
307
307
  "aria-label": l || `Progress: ${Math.round(c)}%`,
308
308
  ...o,
309
309
  children: [
310
- /* @__PURE__ */ _("span", { className: "progress__bar", children: [
310
+ /* @__PURE__ */ u("span", { className: "progress__bar", children: [
311
311
  /* @__PURE__ */ e("span", { className: "progress__fill", children: "█".repeat(m) }),
312
312
  /* @__PURE__ */ e("span", { className: "progress__empty", children: "░".repeat(d) })
313
313
  ] }),
314
- n && /* @__PURE__ */ _("span", { className: "progress__label", children: [
314
+ n && /* @__PURE__ */ u("span", { className: "progress__label", children: [
315
315
  Math.round(c),
316
316
  "%"
317
317
  ] })
@@ -319,91 +319,91 @@ const k = ({
319
319
  }
320
320
  );
321
321
  }, T = E(({
322
- variant: t = "default",
322
+ variant: r = "default",
323
323
  className: i = "",
324
- disabled: s,
324
+ disabled: t,
325
325
  ...a
326
326
  }, n) => {
327
- const r = [
327
+ const s = [
328
328
  "input",
329
- `input--${t}`,
330
- s && "input--disabled",
329
+ `input--${r}`,
330
+ t && "input--disabled",
331
331
  i
332
332
  ].filter(Boolean).join(" ");
333
333
  return /* @__PURE__ */ e(
334
334
  "input",
335
335
  {
336
336
  ref: n,
337
- className: r,
338
- disabled: s,
339
- "aria-invalid": t === "error",
337
+ className: s,
338
+ disabled: t,
339
+ "aria-invalid": r === "error",
340
340
  ...a
341
341
  }
342
342
  );
343
343
  });
344
344
  T.displayName = "Input";
345
345
  const X = ({
346
- size: t = "medium",
346
+ size: r = "medium",
347
347
  title: i = "MS-DOS Terminal",
348
- state: s = "active",
348
+ state: t = "active",
349
349
  resizable: a = !0,
350
350
  minimizable: n = !0,
351
- maximizable: r = !0,
351
+ maximizable: s = !0,
352
352
  closeable: l = !0,
353
353
  children: o,
354
354
  onMinimize: c,
355
355
  onMaximize: m,
356
356
  onClose: d,
357
357
  onFocus: h,
358
- className: b = "",
358
+ className: p = "",
359
359
  autoFocus: y = !1
360
360
  }) => {
361
- const [$, u] = C(s), [p, f] = C(!1), v = S(null);
362
- B(() => {
361
+ const [$, _] = g(t), [b, f] = g(!1), v = S(null);
362
+ D(() => {
363
363
  y && v.current && v.current.focus();
364
364
  }, [y]);
365
365
  const N = () => {
366
- u("minimized"), c == null || c();
366
+ _("minimized"), c == null || c();
367
367
  }, x = () => {
368
- f(!p), m == null || m();
368
+ f(!b), m == null || m();
369
369
  }, w = () => {
370
370
  d == null || d();
371
- }, D = () => {
372
- u("active"), h == null || h();
373
- }, z = (g) => {
374
- g.altKey && g.key === "F4" && l && (g.preventDefault(), w());
371
+ }, B = () => {
372
+ _("active"), h == null || h();
373
+ }, z = (C) => {
374
+ C.altKey && C.key === "F4" && l && (C.preventDefault(), w());
375
375
  };
376
376
  return $ === "minimized" ? /* @__PURE__ */ e(
377
377
  "div",
378
378
  {
379
- className: `terminal terminal--minimized ${b}`.trim(),
380
- onClick: D,
379
+ className: `terminal terminal--minimized ${p}`.trim(),
380
+ onClick: B,
381
381
  role: "button",
382
382
  tabIndex: 0,
383
383
  "aria-label": `Restore ${i} window`,
384
- onKeyDown: (g) => g.key === "Enter" && D(),
385
- children: /* @__PURE__ */ _("div", { className: "terminal__taskbar-item", children: [
384
+ onKeyDown: (C) => C.key === "Enter" && B(),
385
+ children: /* @__PURE__ */ u("div", { className: "terminal__taskbar-item", children: [
386
386
  /* @__PURE__ */ e(k, { name: "App", size: "S" }),
387
387
  /* @__PURE__ */ e("span", { className: "terminal__taskbar-title", children: i })
388
388
  ] })
389
389
  }
390
- ) : /* @__PURE__ */ _(
390
+ ) : /* @__PURE__ */ u(
391
391
  "div",
392
392
  {
393
393
  ref: v,
394
- className: `terminal terminal--${t} terminal--${$} ${p ? "terminal--maximized" : ""} ${b}`.trim(),
394
+ className: `terminal terminal--${r} terminal--${$} ${b ? "terminal--maximized" : ""} ${p}`.trim(),
395
395
  tabIndex: 0,
396
396
  role: "dialog",
397
397
  "aria-label": `${i} terminal window`,
398
- onFocus: D,
398
+ onFocus: B,
399
399
  onKeyDown: z,
400
400
  children: [
401
- /* @__PURE__ */ _("div", { className: "terminal__title-bar", children: [
402
- /* @__PURE__ */ _("div", { className: "terminal__title", children: [
401
+ /* @__PURE__ */ u("div", { className: "terminal__title-bar", children: [
402
+ /* @__PURE__ */ u("div", { className: "terminal__title", children: [
403
403
  /* @__PURE__ */ e(k, { name: "App", size: "S", "aria-hidden": "true" }),
404
404
  /* @__PURE__ */ e("span", { className: "terminal__title-text", children: i })
405
405
  ] }),
406
- /* @__PURE__ */ _("div", { className: "terminal__controls", children: [
406
+ /* @__PURE__ */ u("div", { className: "terminal__controls", children: [
407
407
  n && /* @__PURE__ */ e(
408
408
  "button",
409
409
  {
@@ -414,14 +414,14 @@ const X = ({
414
414
  children: /* @__PURE__ */ e(k, { name: "Cancel", size: "S" })
415
415
  }
416
416
  ),
417
- r && /* @__PURE__ */ e(
417
+ s && /* @__PURE__ */ e(
418
418
  "button",
419
419
  {
420
420
  className: "terminal__control terminal__control--maximize",
421
421
  onClick: x,
422
- "aria-label": p ? "Restore window" : "Maximize window",
423
- title: p ? "Restore" : "Maximize",
424
- children: /* @__PURE__ */ e(k, { name: p ? "Fullscreen" : "Add", size: "S" })
422
+ "aria-label": b ? "Restore window" : "Maximize window",
423
+ title: b ? "Restore" : "Maximize",
424
+ children: /* @__PURE__ */ e(k, { name: b ? "Fullscreen" : "Add", size: "S" })
425
425
  }
426
426
  ),
427
427
  l && /* @__PURE__ */ e(
@@ -436,7 +436,7 @@ const X = ({
436
436
  )
437
437
  ] })
438
438
  ] }),
439
- /* @__PURE__ */ e("div", { className: "terminal__content", role: "main", children: o || /* @__PURE__ */ e("div", { className: "terminal__default-content", children: /* @__PURE__ */ _("div", { className: "terminal__prompt", children: [
439
+ /* @__PURE__ */ e("div", { className: "terminal__content", role: "main", children: o || /* @__PURE__ */ e("div", { className: "terminal__default-content", children: /* @__PURE__ */ u("div", { className: "terminal__prompt", children: [
440
440
  /* @__PURE__ */ e("span", { className: "terminal__path", children: "C:\\\\>" }),
441
441
  /* @__PURE__ */ e("span", { className: "terminal__cursor", children: "█" })
442
442
  ] }) }) }),
@@ -445,114 +445,114 @@ const X = ({
445
445
  }
446
446
  );
447
447
  }, Y = ({
448
- tabs: t,
448
+ tabs: r,
449
449
  variant: i = "underline",
450
- size: s = "medium",
450
+ size: t = "medium",
451
451
  activeTab: a,
452
452
  defaultActiveTab: n,
453
- onTabChange: r,
453
+ onTabChange: s,
454
454
  className: l = "",
455
455
  ...o
456
456
  }) => {
457
457
  var $;
458
- const [c, m] = C(
459
- n || (($ = t[0]) == null ? void 0 : $.id) || ""
460
- ), d = a !== void 0 ? a : c, h = I((u, p) => {
461
- p || (a === void 0 && m(u), r == null || r(u));
462
- }, [a, r]), b = I((u, p) => {
458
+ const [c, m] = g(
459
+ n || (($ = r[0]) == null ? void 0 : $.id) || ""
460
+ ), d = a !== void 0 ? a : c, h = I((_, b) => {
461
+ b || (a === void 0 && m(_), s == null || s(_));
462
+ }, [a, s]), p = I((_, b) => {
463
463
  var x;
464
- const f = t.filter((w) => !w.disabled), v = f.findIndex((w) => w.id === t[p].id);
464
+ const f = r.filter((w) => !w.disabled), v = f.findIndex((w) => w.id === r[b].id);
465
465
  let N = null;
466
- switch (u.key) {
466
+ switch (_.key) {
467
467
  case "ArrowLeft":
468
468
  case "ArrowUp":
469
- u.preventDefault(), N = v > 0 ? v - 1 : f.length - 1;
469
+ _.preventDefault(), N = v > 0 ? v - 1 : f.length - 1;
470
470
  break;
471
471
  case "ArrowRight":
472
472
  case "ArrowDown":
473
- u.preventDefault(), N = v < f.length - 1 ? v + 1 : 0;
473
+ _.preventDefault(), N = v < f.length - 1 ? v + 1 : 0;
474
474
  break;
475
475
  case "Home":
476
- u.preventDefault(), N = 0;
476
+ _.preventDefault(), N = 0;
477
477
  break;
478
478
  case "End":
479
- u.preventDefault(), N = f.length - 1;
479
+ _.preventDefault(), N = f.length - 1;
480
480
  break;
481
481
  }
482
482
  if (N !== null) {
483
483
  const w = f[N];
484
484
  h(w.id, w.disabled), (x = document.querySelectorAll('[role="tab"]:not([disabled])')[N]) == null || x.focus();
485
485
  }
486
- }, [t, h]), y = [
486
+ }, [r, h]), y = [
487
487
  "tabs",
488
488
  `tabs--${i}`,
489
- `tabs--${s}`,
489
+ `tabs--${t}`,
490
490
  l
491
491
  ].filter(Boolean).join(" ");
492
- return /* @__PURE__ */ e("div", { className: y, role: "tablist", ...o, children: t.map((u, p) => {
493
- const f = d === u.id, v = [
492
+ return /* @__PURE__ */ e("div", { className: y, role: "tablist", ...o, children: r.map((_, b) => {
493
+ const f = d === _.id, v = [
494
494
  "tabs__tab",
495
495
  f && "tabs__tab--active",
496
- u.disabled && "tabs__tab--disabled"
496
+ _.disabled && "tabs__tab--disabled"
497
497
  ].filter(Boolean).join(" ");
498
498
  return /* @__PURE__ */ e(
499
499
  "button",
500
500
  {
501
501
  role: "tab",
502
- id: `tab-${u.id}`,
502
+ id: `tab-${_.id}`,
503
503
  "aria-selected": f,
504
504
  tabIndex: f ? 0 : -1,
505
- disabled: u.disabled,
505
+ disabled: _.disabled,
506
506
  className: v,
507
- onClick: () => h(u.id, u.disabled),
508
- onKeyDown: (N) => b(N, p),
509
- children: u.label
507
+ onClick: () => h(_.id, _.disabled),
508
+ onKeyDown: (N) => p(N, b),
509
+ children: _.label
510
510
  },
511
- u.id
511
+ _.id
512
512
  );
513
513
  }) });
514
514
  }, Z = ({
515
- variant: t = "default",
515
+ variant: r = "default",
516
516
  size: i = "medium",
517
- dot: s = !1,
517
+ dot: t = !1,
518
518
  children: a,
519
519
  className: n = "",
520
- ...r
520
+ ...s
521
521
  }) => {
522
522
  const l = [
523
523
  "badge",
524
- `badge--${t}`,
524
+ `badge--${r}`,
525
525
  `badge--${i}`,
526
- s && "badge--with-dot",
526
+ t && "badge--with-dot",
527
527
  n
528
528
  ].filter(Boolean).join(" ");
529
- return /* @__PURE__ */ _("span", { className: l, ...r, children: [
530
- s && /* @__PURE__ */ e("span", { className: "badge__dot", "aria-hidden": "true" }),
529
+ return /* @__PURE__ */ u("span", { className: l, ...s, children: [
530
+ t && /* @__PURE__ */ e("span", { className: "badge__dot", "aria-hidden": "true" }),
531
531
  /* @__PURE__ */ e("span", { className: "badge__content", children: a })
532
532
  ] });
533
533
  }, F = ({
534
- checked: t,
534
+ checked: r,
535
535
  defaultChecked: i = !1,
536
- onCheckedChange: s,
536
+ onCheckedChange: t,
537
537
  disabled: a = !1,
538
538
  name: n,
539
- value: r,
539
+ value: s,
540
540
  className: l = "",
541
541
  ...o
542
542
  }) => {
543
- const [c, m] = A.useState(i), d = t !== void 0, h = d ? t : c, b = () => {
543
+ const [c, m] = A.useState(i), d = r !== void 0, h = d ? r : c, p = () => {
544
544
  if (a) return;
545
- const u = !h;
546
- d || m(u), s == null || s(u);
547
- }, y = (u) => {
548
- (u.key === " " || u.key === "Enter") && (u.preventDefault(), b());
545
+ const _ = !h;
546
+ d || m(_), t == null || t(_);
547
+ }, y = (_) => {
548
+ (_.key === " " || _.key === "Enter") && (_.preventDefault(), p());
549
549
  }, $ = [
550
550
  "switch",
551
551
  h && "switch--checked",
552
552
  a && "switch--disabled",
553
553
  l
554
554
  ].filter(Boolean).join(" ");
555
- return /* @__PURE__ */ _(
555
+ return /* @__PURE__ */ u(
556
556
  "button",
557
557
  {
558
558
  type: "button",
@@ -560,7 +560,7 @@ const X = ({
560
560
  "aria-checked": h,
561
561
  "aria-disabled": a,
562
562
  className: $,
563
- onClick: b,
563
+ onClick: p,
564
564
  onKeyDown: y,
565
565
  disabled: a,
566
566
  ...o,
@@ -571,91 +571,91 @@ const X = ({
571
571
  {
572
572
  type: "hidden",
573
573
  name: n,
574
- value: h ? r || "on" : ""
574
+ value: h ? s || "on" : ""
575
575
  }
576
576
  )
577
577
  ]
578
578
  }
579
579
  );
580
580
  }, ee = ({
581
- trail: t = [],
581
+ trail: r = [],
582
582
  currentLabel: i,
583
- showBackArrow: s = !0,
583
+ showBackArrow: t = !0,
584
584
  separator: a = "/",
585
585
  linkComponent: n,
586
- className: r = ""
586
+ className: s = ""
587
587
  }) => {
588
588
  const l = [
589
589
  "breadcrumb",
590
- r
590
+ s
591
591
  ].filter(Boolean).join(" "), o = (c, m) => {
592
- const d = /* @__PURE__ */ _(j, { children: [
593
- s && m && /* @__PURE__ */ e("span", { className: "breadcrumb__back-arrow", "aria-hidden": "true", children: "<" }),
592
+ const d = /* @__PURE__ */ u(j, { children: [
593
+ t && m && /* @__PURE__ */ e("span", { className: "breadcrumb__back-arrow", "aria-hidden": "true", children: "<" }),
594
594
  /* @__PURE__ */ e("span", { children: c.label })
595
595
  ] });
596
596
  return n ? /* @__PURE__ */ e(n, { href: c.href, className: "breadcrumb__link", children: d }) : /* @__PURE__ */ e("a", { href: c.href, className: "breadcrumb__link", children: d });
597
597
  };
598
- return /* @__PURE__ */ e("nav", { "aria-label": "Breadcrumb", className: l, children: /* @__PURE__ */ _("ol", { className: "breadcrumb__list", children: [
599
- t.map((c, m) => {
600
- const d = m === t.length - 1, h = m < t.length - 1;
601
- return /* @__PURE__ */ _("li", { className: "breadcrumb__item", children: [
598
+ return /* @__PURE__ */ e("nav", { "aria-label": "Breadcrumb", className: l, children: /* @__PURE__ */ u("ol", { className: "breadcrumb__list", children: [
599
+ r.map((c, m) => {
600
+ const d = m === r.length - 1, h = m < r.length - 1;
601
+ return /* @__PURE__ */ u("li", { className: "breadcrumb__item", children: [
602
602
  o(c, d),
603
603
  h && /* @__PURE__ */ e("span", { className: "breadcrumb__separator", "aria-hidden": "true", children: a })
604
604
  ] }, `${c.href}-${c.label}`);
605
605
  }),
606
- t.length > 0 && /* @__PURE__ */ e("li", { className: "breadcrumb__item", children: /* @__PURE__ */ e("span", { className: "breadcrumb__separator", "aria-hidden": "true", children: a }) }),
606
+ r.length > 0 && /* @__PURE__ */ e("li", { className: "breadcrumb__item", children: /* @__PURE__ */ e("span", { className: "breadcrumb__separator", "aria-hidden": "true", children: a }) }),
607
607
  /* @__PURE__ */ e("li", { className: "breadcrumb__item breadcrumb__item--current", "aria-current": "page", children: /* @__PURE__ */ e("span", { className: "breadcrumb__current", children: i }) })
608
608
  ] }) });
609
609
  }, ae = ({
610
- scanlines: t = !0,
610
+ scanlines: r = !0,
611
611
  glow: i = !0,
612
- flicker: s = !0,
612
+ flicker: t = !0,
613
613
  intensity: a = 1,
614
614
  className: n = ""
615
615
  }) => {
616
- const r = [
616
+ const s = [
617
617
  "retro-effects",
618
618
  n
619
619
  ].filter(Boolean).join(" ");
620
- return /* @__PURE__ */ _("div", { className: r, style: { "--retro-intensity": a }, "aria-hidden": "true", children: [
621
- t && /* @__PURE__ */ e("div", { className: "retro-effects__scanlines" }),
620
+ return /* @__PURE__ */ u("div", { className: s, style: { "--retro-intensity": a }, "aria-hidden": "true", children: [
621
+ r && /* @__PURE__ */ e("div", { className: "retro-effects__scanlines" }),
622
622
  i && /* @__PURE__ */ e("div", { className: "retro-effects__glow" }),
623
- s && /* @__PURE__ */ e("div", { className: "retro-effects__flicker" })
623
+ t && /* @__PURE__ */ e("div", { className: "retro-effects__flicker" })
624
624
  ] });
625
625
  }, ne = ({
626
- shape: t = "circle",
626
+ shape: r = "circle",
627
627
  variant: i = "default",
628
- isActive: s = !1,
628
+ isActive: t = !1,
629
629
  label: a,
630
630
  labelPosition: n = "left",
631
- size: r = "medium",
631
+ size: s = "medium",
632
632
  className: l = "",
633
633
  onClick: o,
634
634
  ...c
635
635
  }) => {
636
636
  const m = [
637
637
  "timeline-node",
638
- `timeline-node--${t}`,
639
- `timeline-node--${i}`,
640
638
  `timeline-node--${r}`,
639
+ `timeline-node--${i}`,
640
+ `timeline-node--${s}`,
641
641
  `timeline-node--label-${n}`,
642
- s && "timeline-node--active",
642
+ t && "timeline-node--active",
643
643
  o && "timeline-node--interactive",
644
644
  l
645
645
  ].filter(Boolean).join(" ");
646
- return /* @__PURE__ */ _(
646
+ return /* @__PURE__ */ u(
647
647
  "div",
648
648
  {
649
649
  className: m,
650
650
  onClick: () => {
651
651
  o && o();
652
652
  },
653
- onKeyDown: (b) => {
654
- o && (b.key === "Enter" || b.key === " ") && (b.preventDefault(), o());
653
+ onKeyDown: (p) => {
654
+ o && (p.key === "Enter" || p.key === " ") && (p.preventDefault(), o());
655
655
  },
656
656
  role: o ? "button" : void 0,
657
657
  tabIndex: o ? 0 : void 0,
658
- "aria-pressed": o ? s : void 0,
658
+ "aria-pressed": o ? t : void 0,
659
659
  ...c,
660
660
  children: [
661
661
  a && n === "left" && /* @__PURE__ */ e("span", { className: "timeline-node__label timeline-node__label--left", children: a }),
@@ -667,18 +667,18 @@ const X = ({
667
667
  }
668
668
  );
669
669
  }, te = ({
670
- isOpen: t,
670
+ isOpen: r,
671
671
  onClose: i,
672
- title: s,
672
+ title: t,
673
673
  children: a,
674
674
  footer: n,
675
- className: r = ""
675
+ className: s = ""
676
676
  }) => {
677
677
  const l = S(null), o = K();
678
- B(() => {
678
+ D(() => {
679
679
  const d = l.current;
680
- d && (t && !d.open ? d.showModal() : !t && d.open && d.close());
681
- }, [t]);
680
+ d && (r && !d.open ? d.showModal() : !r && d.open && d.close());
681
+ }, [r]);
682
682
  const c = () => {
683
683
  i();
684
684
  }, m = (d) => {
@@ -689,13 +689,13 @@ const X = ({
689
689
  "dialog",
690
690
  {
691
691
  ref: l,
692
- className: `modal ${r}`.trim(),
692
+ className: `modal ${s}`.trim(),
693
693
  "aria-labelledby": o,
694
694
  onClose: c,
695
695
  onClick: m,
696
- children: /* @__PURE__ */ _("div", { className: "modal__container", children: [
697
- /* @__PURE__ */ _("header", { className: "modal__header", children: [
698
- /* @__PURE__ */ e("h2", { id: o, className: "modal__title", children: s }),
696
+ children: /* @__PURE__ */ u("div", { className: "modal__container", children: [
697
+ /* @__PURE__ */ u("header", { className: "modal__header", children: [
698
+ /* @__PURE__ */ e("h2", { id: o, className: "modal__title", children: t }),
699
699
  /* @__PURE__ */ e(
700
700
  "button",
701
701
  {
@@ -714,25 +714,80 @@ const X = ({
714
714
  ),
715
715
  document.body
716
716
  );
717
- }, re = "0.3.0";
717
+ }, re = ({
718
+ label: r,
719
+ value: i,
720
+ trend: t,
721
+ trendValue: a,
722
+ size: n = "medium",
723
+ className: s = "",
724
+ ...l
725
+ }) => {
726
+ const o = [
727
+ "stat",
728
+ `stat--${n}`,
729
+ s
730
+ ].filter(Boolean).join(" "), c = [
731
+ "stat__trend",
732
+ t && `stat__trend--${t}`
733
+ ].filter(Boolean).join(" "), m = () => {
734
+ switch (t) {
735
+ case "up":
736
+ return "▲";
737
+ case "down":
738
+ return "▼";
739
+ case "neutral":
740
+ return "►";
741
+ default:
742
+ return null;
743
+ }
744
+ };
745
+ return /* @__PURE__ */ u("div", { className: o, ...l, children: [
746
+ /* @__PURE__ */ e("span", { className: "stat__label", children: r }),
747
+ /* @__PURE__ */ e("span", { className: "stat__value", children: i }),
748
+ t && /* @__PURE__ */ u(
749
+ "span",
750
+ {
751
+ className: c,
752
+ "aria-label": `Trend: ${(() => {
753
+ switch (t) {
754
+ case "up":
755
+ return "increasing";
756
+ case "down":
757
+ return "decreasing";
758
+ case "neutral":
759
+ return "unchanged";
760
+ default:
761
+ return "";
762
+ }
763
+ })()}${a ? `, ${a}` : ""}`,
764
+ children: [
765
+ /* @__PURE__ */ e("span", { className: "stat__trend-icon", "aria-hidden": "true", children: m() }),
766
+ a && /* @__PURE__ */ e("span", { className: "stat__trend-value", children: a })
767
+ ]
768
+ }
769
+ )
770
+ ] });
771
+ }, se = "0.3.5";
718
772
  export {
719
- O as AccordionFill,
720
- W as Alert,
773
+ Q as AccordionFill,
774
+ O as Alert,
721
775
  Z as Badge,
722
776
  ee as Breadcrumb,
723
- Q as Button,
724
- G as Card,
725
- H as Checkbox,
726
- J as CommandPrompt,
777
+ G as Button,
778
+ H as Card,
779
+ J as Checkbox,
780
+ P as CommandPrompt,
727
781
  k as Icon,
728
782
  T as Input,
729
783
  te as Modal,
730
- P as Progress,
784
+ V as Progress,
731
785
  ae as RetroEffects,
732
786
  M as Section,
787
+ re as Stat,
733
788
  F as Switch,
734
789
  Y as Tabs,
735
790
  X as Terminal,
736
791
  ne as TimelineNode,
737
- re as version
792
+ se as version
738
793
  };
package/dist/index.umd.js CHANGED
@@ -1,6 +1,6 @@
1
- (function(m,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("react/jsx-runtime"),require("react"),require("react-dom")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react","react-dom"],e):(m=typeof globalThis<"u"?globalThis:m||self,e(m.eidotter={},m.jsxRuntime,m.React,m.ReactDOM))})(this,(function(m,e,b,E){"use strict";const w=({name:r,size:c="L",className:t="",onClick:a,color:s,role:l})=>{const n=process.env.NODE_ENV==="production"?"/eiDotter":"";return e.jsx("svg",{className:`icon ${c==="L"?"icon--l":"icon--s"} ${t} ${l?`icon--${l}`:""}`.trim(),onClick:a,role:l,"aria-label":`${r} icon`,style:s?{color:s}:void 0,children:e.jsx("use",{href:`${n}/icons/sprites.svg#${r}`})})},j={info:"Info",success:"Done",warning:"Warning",error:"Error"},z=({size:r="L",type:c="info",title:t="Notification Title",children:a="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Blandit amet diam neque bibendum. Quisque in praesent sit erat...",onClose:s,onClickHere:l,className:n=""})=>e.jsxs("div",{className:`alert alert--${r.toLowerCase()} alert--${c} ${n}`.trim(),children:[e.jsxs("div",{className:"alert__header",children:[e.jsx("div",{className:"alert__icon",children:e.jsx(w,{name:j[c],size:"L","aria-label":`${c} alert`})}),e.jsx("div",{className:"alert__title",children:t}),s&&e.jsx("button",{className:"alert__close",onClick:s,"aria-label":"Close alert",children:e.jsx(w,{name:"Close",size:"S"})})]}),e.jsx("div",{className:"alert__content",children:e.jsxs("div",{className:"alert__message",children:[e.jsx("span",{children:a}),l&&e.jsx("button",{className:"alert__link",onClick:l,"aria-label":"Click for more information",children:"Click here"})]})})]}),D=({title:r,children:c,defaultExpanded:t=!1,isHovered:a=!1,isActive:s=!1,onToggle:l})=>{const[n,o]=b.useState(t);b.useEffect(()=>{o(t)},[t]);const i=()=>{const _=!n;o(_),l==null||l(_)};return e.jsxs("div",{className:`
1
+ (function(h,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("react/jsx-runtime"),require("react"),require("react-dom")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react","react-dom"],e):(h=typeof globalThis<"u"?globalThis:h||self,e(h.eidotter={},h.jsxRuntime,h.React,h.ReactDOM))})(this,(function(h,e,b,j){"use strict";const w=({name:l,size:c="L",className:r="",onClick:a,color:s,role:n})=>{const t=process.env.NODE_ENV==="production"?"/eiDotter":"";return e.jsx("svg",{className:`icon ${c==="L"?"icon--l":"icon--s"} ${r} ${n?`icon--${n}`:""}`.trim(),onClick:a,role:n,"aria-label":`${l} icon`,style:s?{color:s}:void 0,children:e.jsx("use",{href:`${t}/icons/sprites.svg#${l}`})})},E={info:"Info",success:"Done",warning:"Warning",error:"Error"},z=({size:l="L",type:c="info",title:r="Notification Title",children:a="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Blandit amet diam neque bibendum. Quisque in praesent sit erat...",onClose:s,onClickHere:n,className:t=""})=>e.jsxs("div",{className:`alert alert--${l.toLowerCase()} alert--${c} ${t}`.trim(),children:[e.jsxs("div",{className:"alert__header",children:[e.jsx("div",{className:"alert__icon",children:e.jsx(w,{name:E[c],size:"L","aria-label":`${c} alert`})}),e.jsx("div",{className:"alert__title",children:r}),s&&e.jsx("button",{className:"alert__close",onClick:s,"aria-label":"Close alert",children:e.jsx(w,{name:"Close",size:"S"})})]}),e.jsx("div",{className:"alert__content",children:e.jsxs("div",{className:"alert__message",children:[e.jsx("span",{children:a}),n&&e.jsx("button",{className:"alert__link",onClick:n,"aria-label":"Click for more information",children:"Click here"})]})})]}),D=({title:l,children:c,defaultExpanded:r=!1,isHovered:a=!1,isActive:s=!1,onToggle:n})=>{const[t,o]=b.useState(r);b.useEffect(()=>{o(r)},[r]);const i=()=>{const _=!t;o(_),n==null||n(_)};return e.jsxs("div",{className:`
2
2
  section
3
- ${n?"section--expanded":""}
3
+ ${t?"section--expanded":""}
4
4
  ${a?"section--hover":""}
5
5
  ${s?"section--active":""}
6
- `.trim(),children:[e.jsxs("button",{className:"section__header",onClick:i,"aria-expanded":n,children:[e.jsx("div",{className:"section__title",children:r}),e.jsx("div",{className:"section__icon",children:e.jsx(w,{name:n?"Chevron Up":"Chevron Down",size:"S"})})]}),n&&e.jsx("div",{className:"section__content",children:c})]})},A=({sections:r,defaultExpandedIndex:c=-1})=>{const[t,a]=b.useState(c),s=(l,n)=>{a(n?l:-1)};return e.jsx("div",{className:"accordion-fill",children:r.map((l,n)=>e.jsx(D,{title:l.title,defaultExpanded:n===c,onToggle:o=>s(n,o),children:l.content},n))})},x=({variant:r="primary",size:c="medium",type:t="button",disabled:a=!1,loading:s=!1,children:l,onClick:n,className:o="",fullWidth:i=!1,..._})=>{const d=p=>{a||s||n==null||n(p)},f=["button",`button--${r}`,`button--${c}`,a&&"button--disabled",s&&"button--loading",i&&"button--full-width",o].filter(Boolean).join(" ");return e.jsxs("button",{type:t,className:f,onClick:d,disabled:a||s,"aria-disabled":a||s,..._,children:[s&&e.jsx("span",{className:"button__loading-indicator","aria-hidden":"true",children:"█"}),e.jsx("span",{className:`button__content ${s?"button__content--loading":""}`,children:l})]})},K=({title:r,children:c,footer:t,variant:a="default",className:s="",...l})=>{const n=["card",`card--${a}`,s].filter(Boolean).join(" ");return e.jsxs("div",{className:n,...l,children:[r&&e.jsx("div",{className:"card__header",children:e.jsx("span",{className:"card__title",children:r})}),e.jsx("div",{className:"card__body",children:c}),t&&e.jsx("div",{className:"card__footer",children:t})]})},M=({checked:r,defaultChecked:c,onChange:t,label:a,disabled:s=!1,name:l,value:n,className:o="","aria-label":i,..._})=>{const d=p=>{s||t==null||t(p.target.checked)},f=["checkbox",s&&"checkbox--disabled",o].filter(Boolean).join(" ");return e.jsxs("label",{className:f,children:[e.jsx("input",{type:"checkbox",className:"checkbox__input",checked:r,defaultChecked:c,onChange:d,disabled:s,name:l,value:n,"aria-label":i||a,..._}),e.jsx("span",{className:"checkbox__box","aria-hidden":"true"}),a&&e.jsx("span",{className:"checkbox__label",children:a})]})},T=({prompt:r="C:\\>",onCommand:c,autoFocus:t=!1,className:a="",placeholder:s,disabled:l=!1})=>{const[n,o]=b.useState(""),i=b.useRef(null);b.useEffect(()=>{t&&i.current&&i.current.focus()},[t]);const _=f=>{f.key==="Enter"&&n.trim()&&!l&&(c(n.trim()),o(""))},d=()=>{!l&&i.current&&i.current.focus()};return e.jsxs("div",{className:`command-prompt ${l?"command-prompt--disabled":""} ${a}`.trim(),onClick:d,role:"textbox","aria-label":"Command prompt",children:[e.jsx("span",{className:"command-prompt__prompt","aria-hidden":"true",children:r}),e.jsx("input",{ref:i,className:"command-prompt__input",value:n,onChange:f=>o(f.target.value),onKeyDown:_,autoFocus:t,spellCheck:!1,autoComplete:"off",autoCapitalize:"off",autoCorrect:"off",placeholder:s,disabled:l,"aria-label":"Command input"}),e.jsx("span",{className:"command-prompt__cursor","aria-hidden":"true",children:"█"})]})},L=({value:r,max:c=100,variant:t="default",size:a="medium",showLabel:s=!1,className:l="","aria-label":n,...o})=>{const i=Math.min(100,Math.max(0,r/c*100)),_=Math.round(i/5),d=20-_,f=["progress",`progress--${t}`,`progress--${a}`,l].filter(Boolean).join(" ");return e.jsxs("div",{className:f,role:"progressbar","aria-valuenow":r,"aria-valuemin":0,"aria-valuemax":c,"aria-label":n||`Progress: ${Math.round(i)}%`,...o,children:[e.jsxs("span",{className:"progress__bar",children:[e.jsx("span",{className:"progress__fill",children:"█".repeat(_)}),e.jsx("span",{className:"progress__empty",children:"░".repeat(d)})]}),s&&e.jsxs("span",{className:"progress__label",children:[Math.round(i),"%"]})]})},I=b.forwardRef(({variant:r="default",className:c="",disabled:t,...a},s)=>{const l=["input",`input--${r}`,t&&"input--disabled",c].filter(Boolean).join(" ");return e.jsx("input",{ref:s,className:l,disabled:t,"aria-invalid":r==="error",...a})});I.displayName="Input";const q=({size:r="medium",title:c="MS-DOS Terminal",state:t="active",resizable:a=!0,minimizable:s=!0,maximizable:l=!0,closeable:n=!0,children:o,onMinimize:i,onMaximize:_,onClose:d,onFocus:f,className:p="",autoFocus:C=!1})=>{const[y,h]=b.useState(t),[u,N]=b.useState(!1),k=b.useRef(null);b.useEffect(()=>{C&&k.current&&k.current.focus()},[C]);const v=()=>{h("minimized"),i==null||i()},S=()=>{N(!u),_==null||_()},$=()=>{d==null||d()},B=()=>{h("active"),f==null||f()},H=g=>{g.altKey&&g.key==="F4"&&n&&(g.preventDefault(),$())};return y==="minimized"?e.jsx("div",{className:`terminal terminal--minimized ${p}`.trim(),onClick:B,role:"button",tabIndex:0,"aria-label":`Restore ${c} window`,onKeyDown:g=>g.key==="Enter"&&B(),children:e.jsxs("div",{className:"terminal__taskbar-item",children:[e.jsx(w,{name:"App",size:"S"}),e.jsx("span",{className:"terminal__taskbar-title",children:c})]})}):e.jsxs("div",{ref:k,className:`terminal terminal--${r} terminal--${y} ${u?"terminal--maximized":""} ${p}`.trim(),tabIndex:0,role:"dialog","aria-label":`${c} terminal window`,onFocus:B,onKeyDown:H,children:[e.jsxs("div",{className:"terminal__title-bar",children:[e.jsxs("div",{className:"terminal__title",children:[e.jsx(w,{name:"App",size:"S","aria-hidden":"true"}),e.jsx("span",{className:"terminal__title-text",children:c})]}),e.jsxs("div",{className:"terminal__controls",children:[s&&e.jsx("button",{className:"terminal__control terminal__control--minimize",onClick:v,"aria-label":"Minimize window",title:"Minimize",children:e.jsx(w,{name:"Cancel",size:"S"})}),l&&e.jsx("button",{className:"terminal__control terminal__control--maximize",onClick:S,"aria-label":u?"Restore window":"Maximize window",title:u?"Restore":"Maximize",children:e.jsx(w,{name:u?"Fullscreen":"Add",size:"S"})}),n&&e.jsx("button",{className:"terminal__control terminal__control--close",onClick:$,"aria-label":"Close window",title:"Close",children:e.jsx(w,{name:"Close",size:"S"})})]})]}),e.jsx("div",{className:"terminal__content",role:"main",children:o||e.jsx("div",{className:"terminal__default-content",children:e.jsxs("div",{className:"terminal__prompt",children:[e.jsx("span",{className:"terminal__path",children:"C:\\\\>"}),e.jsx("span",{className:"terminal__cursor",children:"█"})]})})}),a&&e.jsx("div",{className:"terminal__resize-handle","aria-hidden":"true"})]})},O=({tabs:r,variant:c="underline",size:t="medium",activeTab:a,defaultActiveTab:s,onTabChange:l,className:n="",...o})=>{var y;const[i,_]=b.useState(s||((y=r[0])==null?void 0:y.id)||""),d=a!==void 0?a:i,f=b.useCallback((h,u)=>{u||(a===void 0&&_(h),l==null||l(h))},[a,l]),p=b.useCallback((h,u)=>{var S;const N=r.filter($=>!$.disabled),k=N.findIndex($=>$.id===r[u].id);let v=null;switch(h.key){case"ArrowLeft":case"ArrowUp":h.preventDefault(),v=k>0?k-1:N.length-1;break;case"ArrowRight":case"ArrowDown":h.preventDefault(),v=k<N.length-1?k+1:0;break;case"Home":h.preventDefault(),v=0;break;case"End":h.preventDefault(),v=N.length-1;break}if(v!==null){const $=N[v];f($.id,$.disabled),(S=document.querySelectorAll('[role="tab"]:not([disabled])')[v])==null||S.focus()}},[r,f]),C=["tabs",`tabs--${c}`,`tabs--${t}`,n].filter(Boolean).join(" ");return e.jsx("div",{className:C,role:"tablist",...o,children:r.map((h,u)=>{const N=d===h.id,k=["tabs__tab",N&&"tabs__tab--active",h.disabled&&"tabs__tab--disabled"].filter(Boolean).join(" ");return e.jsx("button",{role:"tab",id:`tab-${h.id}`,"aria-selected":N,tabIndex:N?0:-1,disabled:h.disabled,className:k,onClick:()=>f(h.id,h.disabled),onKeyDown:v=>p(v,u),children:h.label},h.id)})})},P=({variant:r="default",size:c="medium",dot:t=!1,children:a,className:s="",...l})=>{const n=["badge",`badge--${r}`,`badge--${c}`,t&&"badge--with-dot",s].filter(Boolean).join(" ");return e.jsxs("span",{className:n,...l,children:[t&&e.jsx("span",{className:"badge__dot","aria-hidden":"true"}),e.jsx("span",{className:"badge__content",children:a})]})},U=({checked:r,defaultChecked:c=!1,onCheckedChange:t,disabled:a=!1,name:s,value:l,className:n="",...o})=>{const[i,_]=b.useState(c),d=r!==void 0,f=d?r:i,p=()=>{if(a)return;const h=!f;d||_(h),t==null||t(h)},C=h=>{(h.key===" "||h.key==="Enter")&&(h.preventDefault(),p())},y=["switch",f&&"switch--checked",a&&"switch--disabled",n].filter(Boolean).join(" ");return e.jsxs("button",{type:"button",role:"switch","aria-checked":f,"aria-disabled":a,className:y,onClick:p,onKeyDown:C,disabled:a,...o,children:[e.jsx("span",{className:"switch__track",children:e.jsx("span",{className:"switch__thumb"})}),s&&e.jsx("input",{type:"hidden",name:s,value:f?l||"on":""})]})},V=({trail:r=[],currentLabel:c,showBackArrow:t=!0,separator:a="/",linkComponent:s,className:l=""})=>{const n=["breadcrumb",l].filter(Boolean).join(" "),o=(i,_)=>{const d=e.jsxs(e.Fragment,{children:[t&&_&&e.jsx("span",{className:"breadcrumb__back-arrow","aria-hidden":"true",children:"<"}),e.jsx("span",{children:i.label})]});return s?e.jsx(s,{href:i.href,className:"breadcrumb__link",children:d}):e.jsx("a",{href:i.href,className:"breadcrumb__link",children:d})};return e.jsx("nav",{"aria-label":"Breadcrumb",className:n,children:e.jsxs("ol",{className:"breadcrumb__list",children:[r.map((i,_)=>{const d=_===r.length-1,f=_<r.length-1;return e.jsxs("li",{className:"breadcrumb__item",children:[o(i,d),f&&e.jsx("span",{className:"breadcrumb__separator","aria-hidden":"true",children:a})]},`${i.href}-${i.label}`)}),r.length>0&&e.jsx("li",{className:"breadcrumb__item",children:e.jsx("span",{className:"breadcrumb__separator","aria-hidden":"true",children:a})}),e.jsx("li",{className:"breadcrumb__item breadcrumb__item--current","aria-current":"page",children:e.jsx("span",{className:"breadcrumb__current",children:c})})]})})},W=({scanlines:r=!0,glow:c=!0,flicker:t=!0,intensity:a=1,className:s=""})=>{const l=["retro-effects",s].filter(Boolean).join(" "),n={"--retro-intensity":a};return e.jsxs("div",{className:l,style:n,"aria-hidden":"true",children:[r&&e.jsx("div",{className:"retro-effects__scanlines"}),c&&e.jsx("div",{className:"retro-effects__glow"}),t&&e.jsx("div",{className:"retro-effects__flicker"})]})},Q=({shape:r="circle",variant:c="default",isActive:t=!1,label:a,labelPosition:s="left",size:l="medium",className:n="",onClick:o,...i})=>{const _=["timeline-node",`timeline-node--${r}`,`timeline-node--${c}`,`timeline-node--${l}`,`timeline-node--label-${s}`,t&&"timeline-node--active",o&&"timeline-node--interactive",n].filter(Boolean).join(" "),d=()=>{o&&o()},f=p=>{o&&(p.key==="Enter"||p.key===" ")&&(p.preventDefault(),o())};return e.jsxs("div",{className:_,onClick:d,onKeyDown:f,role:o?"button":void 0,tabIndex:o?0:void 0,"aria-pressed":o?t:void 0,...i,children:[a&&s==="left"&&e.jsx("span",{className:"timeline-node__label timeline-node__label--left",children:a}),a&&s==="top"&&e.jsx("span",{className:"timeline-node__label timeline-node__label--top",children:a}),e.jsx("span",{className:"timeline-node__marker","aria-hidden":"true"}),a&&s==="right"&&e.jsx("span",{className:"timeline-node__label timeline-node__label--right",children:a}),a&&s==="bottom"&&e.jsx("span",{className:"timeline-node__label timeline-node__label--bottom",children:a})]})},F=({isOpen:r,onClose:c,title:t,children:a,footer:s,className:l=""})=>{const n=b.useRef(null),o=b.useId();b.useEffect(()=>{const d=n.current;d&&(r&&!d.open?d.showModal():!r&&d.open&&d.close())},[r]);const i=()=>{c()},_=d=>{d.target===n.current&&c()};return E.createPortal(e.jsx("dialog",{ref:n,className:`modal ${l}`.trim(),"aria-labelledby":o,onClose:i,onClick:_,children:e.jsxs("div",{className:"modal__container",children:[e.jsxs("header",{className:"modal__header",children:[e.jsx("h2",{id:o,className:"modal__title",children:t}),e.jsx("button",{type:"button",className:"modal__close",onClick:c,"aria-label":"Close modal",children:e.jsx(w,{name:"Close",size:"S"})})]}),e.jsx("div",{className:"modal__body",children:a}),s&&e.jsx("footer",{className:"modal__footer",children:s})]})}),document.body)},G="0.3.0";m.AccordionFill=A,m.Alert=z,m.Badge=P,m.Breadcrumb=V,m.Button=x,m.Card=K,m.Checkbox=M,m.CommandPrompt=T,m.Icon=w,m.Input=I,m.Modal=F,m.Progress=L,m.RetroEffects=W,m.Section=D,m.Switch=U,m.Tabs=O,m.Terminal=q,m.TimelineNode=Q,m.version=G,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})}));
6
+ `.trim(),children:[e.jsxs("button",{className:"section__header",onClick:i,"aria-expanded":t,children:[e.jsx("div",{className:"section__title",children:l}),e.jsx("div",{className:"section__icon",children:e.jsx(w,{name:t?"Chevron Up":"Chevron Down",size:"S"})})]}),t&&e.jsx("div",{className:"section__content",children:c})]})},A=({sections:l,defaultExpandedIndex:c=-1})=>{const[r,a]=b.useState(c),s=(n,t)=>{a(t?n:-1)};return e.jsx("div",{className:"accordion-fill",children:l.map((n,t)=>e.jsx(D,{title:n.title,defaultExpanded:t===c,onToggle:o=>s(t,o),children:n.content},t))})},x=({variant:l="primary",size:c="medium",type:r="button",disabled:a=!1,loading:s=!1,children:n,onClick:t,className:o="",fullWidth:i=!1,..._})=>{const d=p=>{a||s||t==null||t(p)},f=["button",`button--${l}`,`button--${c}`,a&&"button--disabled",s&&"button--loading",i&&"button--full-width",o].filter(Boolean).join(" ");return e.jsxs("button",{type:r,className:f,onClick:d,disabled:a||s,"aria-disabled":a||s,..._,children:[s&&e.jsx("span",{className:"button__loading-indicator","aria-hidden":"true",children:"█"}),e.jsx("span",{className:`button__content ${s?"button__content--loading":""}`,children:n})]})},T=({title:l,children:c,footer:r,variant:a="default",className:s="",...n})=>{const t=["card",`card--${a}`,s].filter(Boolean).join(" ");return e.jsxs("div",{className:t,...n,children:[l&&e.jsx("div",{className:"card__header",children:e.jsx("span",{className:"card__title",children:l})}),e.jsx("div",{className:"card__body",children:c}),r&&e.jsx("div",{className:"card__footer",children:r})]})},K=({checked:l,defaultChecked:c,onChange:r,label:a,disabled:s=!1,name:n,value:t,className:o="","aria-label":i,..._})=>{const d=p=>{s||r==null||r(p.target.checked)},f=["checkbox",s&&"checkbox--disabled",o].filter(Boolean).join(" ");return e.jsxs("label",{className:f,children:[e.jsx("input",{type:"checkbox",className:"checkbox__input",checked:l,defaultChecked:c,onChange:d,disabled:s,name:n,value:t,"aria-label":i||a,..._}),e.jsx("span",{className:"checkbox__box","aria-hidden":"true"}),a&&e.jsx("span",{className:"checkbox__label",children:a})]})},M=({prompt:l="C:\\>",onCommand:c,autoFocus:r=!1,className:a="",placeholder:s,disabled:n=!1})=>{const[t,o]=b.useState(""),i=b.useRef(null);b.useEffect(()=>{r&&i.current&&i.current.focus()},[r]);const _=f=>{f.key==="Enter"&&t.trim()&&!n&&(c(t.trim()),o(""))},d=()=>{!n&&i.current&&i.current.focus()};return e.jsxs("div",{className:`command-prompt ${n?"command-prompt--disabled":""} ${a}`.trim(),onClick:d,role:"textbox","aria-label":"Command prompt",children:[e.jsx("span",{className:"command-prompt__prompt","aria-hidden":"true",children:l}),e.jsx("input",{ref:i,className:"command-prompt__input",value:t,onChange:f=>o(f.target.value),onKeyDown:_,autoFocus:r,spellCheck:!1,autoComplete:"off",autoCapitalize:"off",autoCorrect:"off",placeholder:s,disabled:n,"aria-label":"Command input"}),e.jsx("span",{className:"command-prompt__cursor","aria-hidden":"true",children:"█"})]})},L=({value:l,max:c=100,variant:r="default",size:a="medium",showLabel:s=!1,className:n="","aria-label":t,...o})=>{const i=Math.min(100,Math.max(0,l/c*100)),_=Math.round(i/5),d=20-_,f=["progress",`progress--${r}`,`progress--${a}`,n].filter(Boolean).join(" ");return e.jsxs("div",{className:f,role:"progressbar","aria-valuenow":l,"aria-valuemin":0,"aria-valuemax":c,"aria-label":t||`Progress: ${Math.round(i)}%`,...o,children:[e.jsxs("span",{className:"progress__bar",children:[e.jsx("span",{className:"progress__fill",children:"█".repeat(_)}),e.jsx("span",{className:"progress__empty",children:"░".repeat(d)})]}),s&&e.jsxs("span",{className:"progress__label",children:[Math.round(i),"%"]})]})},I=b.forwardRef(({variant:l="default",className:c="",disabled:r,...a},s)=>{const n=["input",`input--${l}`,r&&"input--disabled",c].filter(Boolean).join(" ");return e.jsx("input",{ref:s,className:n,disabled:r,"aria-invalid":l==="error",...a})});I.displayName="Input";const q=({size:l="medium",title:c="MS-DOS Terminal",state:r="active",resizable:a=!0,minimizable:s=!0,maximizable:n=!0,closeable:t=!0,children:o,onMinimize:i,onMaximize:_,onClose:d,onFocus:f,className:p="",autoFocus:C=!1})=>{const[y,m]=b.useState(r),[u,N]=b.useState(!1),k=b.useRef(null);b.useEffect(()=>{C&&k.current&&k.current.focus()},[C]);const v=()=>{m("minimized"),i==null||i()},S=()=>{N(!u),_==null||_()},$=()=>{d==null||d()},B=()=>{m("active"),f==null||f()},V=g=>{g.altKey&&g.key==="F4"&&t&&(g.preventDefault(),$())};return y==="minimized"?e.jsx("div",{className:`terminal terminal--minimized ${p}`.trim(),onClick:B,role:"button",tabIndex:0,"aria-label":`Restore ${c} window`,onKeyDown:g=>g.key==="Enter"&&B(),children:e.jsxs("div",{className:"terminal__taskbar-item",children:[e.jsx(w,{name:"App",size:"S"}),e.jsx("span",{className:"terminal__taskbar-title",children:c})]})}):e.jsxs("div",{ref:k,className:`terminal terminal--${l} terminal--${y} ${u?"terminal--maximized":""} ${p}`.trim(),tabIndex:0,role:"dialog","aria-label":`${c} terminal window`,onFocus:B,onKeyDown:V,children:[e.jsxs("div",{className:"terminal__title-bar",children:[e.jsxs("div",{className:"terminal__title",children:[e.jsx(w,{name:"App",size:"S","aria-hidden":"true"}),e.jsx("span",{className:"terminal__title-text",children:c})]}),e.jsxs("div",{className:"terminal__controls",children:[s&&e.jsx("button",{className:"terminal__control terminal__control--minimize",onClick:v,"aria-label":"Minimize window",title:"Minimize",children:e.jsx(w,{name:"Cancel",size:"S"})}),n&&e.jsx("button",{className:"terminal__control terminal__control--maximize",onClick:S,"aria-label":u?"Restore window":"Maximize window",title:u?"Restore":"Maximize",children:e.jsx(w,{name:u?"Fullscreen":"Add",size:"S"})}),t&&e.jsx("button",{className:"terminal__control terminal__control--close",onClick:$,"aria-label":"Close window",title:"Close",children:e.jsx(w,{name:"Close",size:"S"})})]})]}),e.jsx("div",{className:"terminal__content",role:"main",children:o||e.jsx("div",{className:"terminal__default-content",children:e.jsxs("div",{className:"terminal__prompt",children:[e.jsx("span",{className:"terminal__path",children:"C:\\\\>"}),e.jsx("span",{className:"terminal__cursor",children:"█"})]})})}),a&&e.jsx("div",{className:"terminal__resize-handle","aria-hidden":"true"})]})},O=({tabs:l,variant:c="underline",size:r="medium",activeTab:a,defaultActiveTab:s,onTabChange:n,className:t="",...o})=>{var y;const[i,_]=b.useState(s||((y=l[0])==null?void 0:y.id)||""),d=a!==void 0?a:i,f=b.useCallback((m,u)=>{u||(a===void 0&&_(m),n==null||n(m))},[a,n]),p=b.useCallback((m,u)=>{var S;const N=l.filter($=>!$.disabled),k=N.findIndex($=>$.id===l[u].id);let v=null;switch(m.key){case"ArrowLeft":case"ArrowUp":m.preventDefault(),v=k>0?k-1:N.length-1;break;case"ArrowRight":case"ArrowDown":m.preventDefault(),v=k<N.length-1?k+1:0;break;case"Home":m.preventDefault(),v=0;break;case"End":m.preventDefault(),v=N.length-1;break}if(v!==null){const $=N[v];f($.id,$.disabled),(S=document.querySelectorAll('[role="tab"]:not([disabled])')[v])==null||S.focus()}},[l,f]),C=["tabs",`tabs--${c}`,`tabs--${r}`,t].filter(Boolean).join(" ");return e.jsx("div",{className:C,role:"tablist",...o,children:l.map((m,u)=>{const N=d===m.id,k=["tabs__tab",N&&"tabs__tab--active",m.disabled&&"tabs__tab--disabled"].filter(Boolean).join(" ");return e.jsx("button",{role:"tab",id:`tab-${m.id}`,"aria-selected":N,tabIndex:N?0:-1,disabled:m.disabled,className:k,onClick:()=>f(m.id,m.disabled),onKeyDown:v=>p(v,u),children:m.label},m.id)})})},P=({variant:l="default",size:c="medium",dot:r=!1,children:a,className:s="",...n})=>{const t=["badge",`badge--${l}`,`badge--${c}`,r&&"badge--with-dot",s].filter(Boolean).join(" ");return e.jsxs("span",{className:t,...n,children:[r&&e.jsx("span",{className:"badge__dot","aria-hidden":"true"}),e.jsx("span",{className:"badge__content",children:a})]})},U=({checked:l,defaultChecked:c=!1,onCheckedChange:r,disabled:a=!1,name:s,value:n,className:t="",...o})=>{const[i,_]=b.useState(c),d=l!==void 0,f=d?l:i,p=()=>{if(a)return;const m=!f;d||_(m),r==null||r(m)},C=m=>{(m.key===" "||m.key==="Enter")&&(m.preventDefault(),p())},y=["switch",f&&"switch--checked",a&&"switch--disabled",t].filter(Boolean).join(" ");return e.jsxs("button",{type:"button",role:"switch","aria-checked":f,"aria-disabled":a,className:y,onClick:p,onKeyDown:C,disabled:a,...o,children:[e.jsx("span",{className:"switch__track",children:e.jsx("span",{className:"switch__thumb"})}),s&&e.jsx("input",{type:"hidden",name:s,value:f?n||"on":""})]})},W=({trail:l=[],currentLabel:c,showBackArrow:r=!0,separator:a="/",linkComponent:s,className:n=""})=>{const t=["breadcrumb",n].filter(Boolean).join(" "),o=(i,_)=>{const d=e.jsxs(e.Fragment,{children:[r&&_&&e.jsx("span",{className:"breadcrumb__back-arrow","aria-hidden":"true",children:"<"}),e.jsx("span",{children:i.label})]});return s?e.jsx(s,{href:i.href,className:"breadcrumb__link",children:d}):e.jsx("a",{href:i.href,className:"breadcrumb__link",children:d})};return e.jsx("nav",{"aria-label":"Breadcrumb",className:t,children:e.jsxs("ol",{className:"breadcrumb__list",children:[l.map((i,_)=>{const d=_===l.length-1,f=_<l.length-1;return e.jsxs("li",{className:"breadcrumb__item",children:[o(i,d),f&&e.jsx("span",{className:"breadcrumb__separator","aria-hidden":"true",children:a})]},`${i.href}-${i.label}`)}),l.length>0&&e.jsx("li",{className:"breadcrumb__item",children:e.jsx("span",{className:"breadcrumb__separator","aria-hidden":"true",children:a})}),e.jsx("li",{className:"breadcrumb__item breadcrumb__item--current","aria-current":"page",children:e.jsx("span",{className:"breadcrumb__current",children:c})})]})})},Q=({scanlines:l=!0,glow:c=!0,flicker:r=!0,intensity:a=1,className:s=""})=>{const n=["retro-effects",s].filter(Boolean).join(" "),t={"--retro-intensity":a};return e.jsxs("div",{className:n,style:t,"aria-hidden":"true",children:[l&&e.jsx("div",{className:"retro-effects__scanlines"}),c&&e.jsx("div",{className:"retro-effects__glow"}),r&&e.jsx("div",{className:"retro-effects__flicker"})]})},F=({shape:l="circle",variant:c="default",isActive:r=!1,label:a,labelPosition:s="left",size:n="medium",className:t="",onClick:o,...i})=>{const _=["timeline-node",`timeline-node--${l}`,`timeline-node--${c}`,`timeline-node--${n}`,`timeline-node--label-${s}`,r&&"timeline-node--active",o&&"timeline-node--interactive",t].filter(Boolean).join(" "),d=()=>{o&&o()},f=p=>{o&&(p.key==="Enter"||p.key===" ")&&(p.preventDefault(),o())};return e.jsxs("div",{className:_,onClick:d,onKeyDown:f,role:o?"button":void 0,tabIndex:o?0:void 0,"aria-pressed":o?r:void 0,...i,children:[a&&s==="left"&&e.jsx("span",{className:"timeline-node__label timeline-node__label--left",children:a}),a&&s==="top"&&e.jsx("span",{className:"timeline-node__label timeline-node__label--top",children:a}),e.jsx("span",{className:"timeline-node__marker","aria-hidden":"true"}),a&&s==="right"&&e.jsx("span",{className:"timeline-node__label timeline-node__label--right",children:a}),a&&s==="bottom"&&e.jsx("span",{className:"timeline-node__label timeline-node__label--bottom",children:a})]})},G=({isOpen:l,onClose:c,title:r,children:a,footer:s,className:n=""})=>{const t=b.useRef(null),o=b.useId();b.useEffect(()=>{const d=t.current;d&&(l&&!d.open?d.showModal():!l&&d.open&&d.close())},[l]);const i=()=>{c()},_=d=>{d.target===t.current&&c()};return j.createPortal(e.jsx("dialog",{ref:t,className:`modal ${n}`.trim(),"aria-labelledby":o,onClose:i,onClick:_,children:e.jsxs("div",{className:"modal__container",children:[e.jsxs("header",{className:"modal__header",children:[e.jsx("h2",{id:o,className:"modal__title",children:r}),e.jsx("button",{type:"button",className:"modal__close",onClick:c,"aria-label":"Close modal",children:e.jsx(w,{name:"Close",size:"S"})})]}),e.jsx("div",{className:"modal__body",children:a}),s&&e.jsx("footer",{className:"modal__footer",children:s})]})}),document.body)},H=({label:l,value:c,trend:r,trendValue:a,size:s="medium",className:n="",...t})=>{const o=["stat",`stat--${s}`,n].filter(Boolean).join(" "),i=["stat__trend",r&&`stat__trend--${r}`].filter(Boolean).join(" "),_=()=>{switch(r){case"up":return"▲";case"down":return"▼";case"neutral":return"►";default:return null}},d=()=>{switch(r){case"up":return"increasing";case"down":return"decreasing";case"neutral":return"unchanged";default:return""}};return e.jsxs("div",{className:o,...t,children:[e.jsx("span",{className:"stat__label",children:l}),e.jsx("span",{className:"stat__value",children:c}),r&&e.jsxs("span",{className:i,"aria-label":`Trend: ${d()}${a?`, ${a}`:""}`,children:[e.jsx("span",{className:"stat__trend-icon","aria-hidden":"true",children:_()}),a&&e.jsx("span",{className:"stat__trend-value",children:a})]})]})},J="0.3.5";h.AccordionFill=A,h.Alert=z,h.Badge=P,h.Breadcrumb=W,h.Button=x,h.Card=T,h.Checkbox=K,h.CommandPrompt=M,h.Icon=w,h.Input=I,h.Modal=G,h.Progress=L,h.RetroEffects=Q,h.Section=D,h.Stat=H,h.Switch=U,h.Tabs=O,h.Terminal=q,h.TimelineNode=F,h.version=J,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eidotter",
3
- "version": "0.3.4",
3
+ "version": "0.3.6",
4
4
  "type": "module",
5
5
  "description": "A DOS Themed Design System",
6
6
  "main": "./dist/index.umd.js",