@atelier-ui/react 0.2.42 → 0.2.43

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.
Files changed (110) hide show
  1. package/CHANGELOG.md +29 -8
  2. package/package.json +1 -1
  3. package/src/lib/accordion/atl-accordion.css +2 -8
  4. package/src/lib/accordion/atl-accordion.d.ts.map +1 -1
  5. package/src/lib/accordion/atl-accordion.js +30 -8
  6. package/src/lib/accordion/atl-accordion.js.map +1 -1
  7. package/src/lib/alert/atl-alert.css +18 -4
  8. package/src/lib/alert/atl-alert.d.ts.map +1 -1
  9. package/src/lib/alert/atl-alert.js +3 -1
  10. package/src/lib/alert/atl-alert.js.map +1 -1
  11. package/src/lib/avatar/atl-avatar.css +75 -25
  12. package/src/lib/avatar/atl-avatar.d.ts.map +1 -1
  13. package/src/lib/avatar/atl-avatar.js +6 -3
  14. package/src/lib/avatar/atl-avatar.js.map +1 -1
  15. package/src/lib/badge/atl-badge.css +8 -4
  16. package/src/lib/badge/atl-badge.d.ts.map +1 -1
  17. package/src/lib/badge/atl-badge.js +3 -2
  18. package/src/lib/badge/atl-badge.js.map +1 -1
  19. package/src/lib/breadcrumbs/atl-breadcrumbs.css +5 -9
  20. package/src/lib/breadcrumbs/atl-breadcrumbs.d.ts.map +1 -1
  21. package/src/lib/breadcrumbs/atl-breadcrumbs.js +1 -1
  22. package/src/lib/breadcrumbs/atl-breadcrumbs.js.map +1 -1
  23. package/src/lib/button/atl-button.css +20 -8
  24. package/src/lib/button/atl-button.d.ts.map +1 -1
  25. package/src/lib/button/atl-button.js.map +1 -1
  26. package/src/lib/card/atl-card.css +2 -12
  27. package/src/lib/card/atl-card.d.ts.map +1 -1
  28. package/src/lib/card/atl-card.js +6 -1
  29. package/src/lib/card/atl-card.js.map +1 -1
  30. package/src/lib/chat/atl-chat.css +28 -13
  31. package/src/lib/chat/atl-chat.d.ts.map +1 -1
  32. package/src/lib/chat/atl-chat.js +11 -7
  33. package/src/lib/chat/atl-chat.js.map +1 -1
  34. package/src/lib/checkbox/atl-checkbox.css +13 -6
  35. package/src/lib/checkbox/atl-checkbox.d.ts.map +1 -1
  36. package/src/lib/checkbox/atl-checkbox.js +1 -1
  37. package/src/lib/checkbox/atl-checkbox.js.map +1 -1
  38. package/src/lib/code-block/atl-code-block.css +4 -1
  39. package/src/lib/combobox/atl-combobox.css +27 -17
  40. package/src/lib/combobox/atl-combobox.d.ts.map +1 -1
  41. package/src/lib/combobox/atl-combobox.js +4 -2
  42. package/src/lib/combobox/atl-combobox.js.map +1 -1
  43. package/src/lib/dialog/atl-dialog.css +3 -12
  44. package/src/lib/dialog/atl-dialog.d.ts.map +1 -1
  45. package/src/lib/dialog/atl-dialog.js +3 -1
  46. package/src/lib/dialog/atl-dialog.js.map +1 -1
  47. package/src/lib/drawer/atl-drawer.css +6 -5
  48. package/src/lib/drawer/atl-drawer.d.ts.map +1 -1
  49. package/src/lib/drawer/atl-drawer.js.map +1 -1
  50. package/src/lib/icon/atl-icon.d.ts.map +1 -1
  51. package/src/lib/icon/atl-icon.js +4 -2
  52. package/src/lib/icon/atl-icon.js.map +1 -1
  53. package/src/lib/icons.d.ts.map +1 -1
  54. package/src/lib/icons.js +48 -10
  55. package/src/lib/icons.js.map +1 -1
  56. package/src/lib/input/atl-input.css +9 -5
  57. package/src/lib/input/atl-input.d.ts.map +1 -1
  58. package/src/lib/input/atl-input.js +1 -1
  59. package/src/lib/input/atl-input.js.map +1 -1
  60. package/src/lib/menu/atl-menu.css +11 -14
  61. package/src/lib/menu/atl-menu.d.ts.map +1 -1
  62. package/src/lib/menu/atl-menu.js +3 -1
  63. package/src/lib/menu/atl-menu.js.map +1 -1
  64. package/src/lib/pagination/atl-pagination.d.ts.map +1 -1
  65. package/src/lib/pagination/atl-pagination.js +7 -9
  66. package/src/lib/pagination/atl-pagination.js.map +1 -1
  67. package/src/lib/progress/atl-progress.d.ts.map +1 -1
  68. package/src/lib/progress/atl-progress.js +3 -1
  69. package/src/lib/progress/atl-progress.js.map +1 -1
  70. package/src/lib/radio/atl-radio.css +5 -4
  71. package/src/lib/radio/atl-radio.d.ts +1 -1
  72. package/src/lib/radio/atl-radio.d.ts.map +1 -1
  73. package/src/lib/radio/atl-radio.js +1 -1
  74. package/src/lib/radio/atl-radio.js.map +1 -1
  75. package/src/lib/radio-group/atl-radio-group.d.ts.map +1 -1
  76. package/src/lib/radio-group/atl-radio-group.js.map +1 -1
  77. package/src/lib/select/atl-select.css +7 -3
  78. package/src/lib/select/atl-select.d.ts.map +1 -1
  79. package/src/lib/select/atl-select.js +2 -2
  80. package/src/lib/select/atl-select.js.map +1 -1
  81. package/src/lib/skeleton/atl-skeleton.d.ts.map +1 -1
  82. package/src/lib/skeleton/atl-skeleton.js +14 -4
  83. package/src/lib/skeleton/atl-skeleton.js.map +1 -1
  84. package/src/lib/spec.d.ts.map +1 -1
  85. package/src/lib/spec.js.map +1 -1
  86. package/src/lib/stepper/atl-stepper.d.ts.map +1 -1
  87. package/src/lib/stepper/atl-stepper.js +14 -7
  88. package/src/lib/stepper/atl-stepper.js.map +1 -1
  89. package/src/lib/table/atl-table.css +10 -9
  90. package/src/lib/table/atl-table.d.ts +1 -1
  91. package/src/lib/table/atl-table.d.ts.map +1 -1
  92. package/src/lib/table/atl-table.js +1 -1
  93. package/src/lib/table/atl-table.js.map +1 -1
  94. package/src/lib/tabs/atl-tabs.css +19 -5
  95. package/src/lib/tabs/atl-tabs.d.ts.map +1 -1
  96. package/src/lib/tabs/atl-tabs.js.map +1 -1
  97. package/src/lib/textarea/atl-textarea.css +4 -4
  98. package/src/lib/textarea/atl-textarea.d.ts.map +1 -1
  99. package/src/lib/textarea/atl-textarea.js +1 -1
  100. package/src/lib/textarea/atl-textarea.js.map +1 -1
  101. package/src/lib/toast/atl-toast.css +25 -13
  102. package/src/lib/toast/atl-toast.d.ts +1 -1
  103. package/src/lib/toast/atl-toast.d.ts.map +1 -1
  104. package/src/lib/toast/atl-toast.js +1 -1
  105. package/src/lib/toast/atl-toast.js.map +1 -1
  106. package/src/lib/toggle/atl-toggle.css +7 -5
  107. package/src/lib/toggle/atl-toggle.d.ts.map +1 -1
  108. package/src/lib/toggle/atl-toggle.js.map +1 -1
  109. package/src/lib/tooltip/atl-tooltip.css +6 -10
  110. package/styles/tokens.css +59 -43
@@ -70,16 +70,20 @@ export function AtlStepper({ activeStep: externalStep, onActiveStepChange, orien
70
70
  if (p >= 0 && !steps[p]?.disabled)
71
71
  setStep(p);
72
72
  };
73
- const classes = [
74
- 'atl-stepper',
75
- `orientation-${orientation}`,
76
- className,
77
- ]
73
+ const classes = ['atl-stepper', `orientation-${orientation}`, className]
78
74
  .filter(Boolean)
79
75
  .join(' ');
80
76
  const stepPanels = childArray.filter((c) => isValidElement(c) &&
81
77
  c.type.displayName === 'AtlStep');
82
- return (_jsx(StepperContext.Provider, { value: { activeStep, setActiveStep: setStep, steps, linear, next, prev, goTo }, children: _jsxs("div", { className: classes, ...rest, children: [_jsx("ol", { className: "stepper-header", role: "list", "aria-label": "Progress", children: steps.map((step, i) => {
78
+ return (_jsx(StepperContext.Provider, { value: {
79
+ activeStep,
80
+ setActiveStep: setStep,
81
+ steps,
82
+ linear,
83
+ next,
84
+ prev,
85
+ goTo,
86
+ }, children: _jsxs("div", { className: classes, ...rest, children: [_jsx("ol", { className: "stepper-header", role: "list", "aria-label": "Progress", children: steps.map((step, i) => {
83
87
  const isActive = activeStep === i;
84
88
  const isCompleted = step.completed && !isActive;
85
89
  const itemClass = [
@@ -91,7 +95,10 @@ export function AtlStepper({ activeStep: externalStep, onActiveStepChange, orien
91
95
  ]
92
96
  .filter(Boolean)
93
97
  .join(' ');
94
- return (_jsxs(Fragment, { children: [_jsxs("li", { className: itemClass, children: [_jsx("button", { type: "button", id: `atl-step-${i}`, className: "step-circle", "aria-label": step.label, "aria-current": isActive ? 'step' : undefined, disabled: !isReachable(i), onClick: () => goTo(i), children: step.completed && !step.error ? (_jsx(AtlIcon, { name: "check", size: "sm" })) : step.error ? (_jsx(AtlIcon, { name: "close", size: "sm" })) : (i + 1) }), _jsxs("div", { className: "step-text", children: [_jsx("span", { className: "step-label", children: step.label }), step.description && (_jsx("span", { className: "step-description", children: step.description })), step.optional && !step.completed && (_jsx("span", { className: "step-optional", children: "Optional" }))] })] }), i < steps.length - 1 && (_jsx("li", { "aria-hidden": "true", className: ['step-connector', (activeStep > i || step.completed) && 'is-active']
98
+ return (_jsxs(Fragment, { children: [_jsxs("li", { className: itemClass, children: [_jsx("button", { type: "button", id: `atl-step-${i}`, className: "step-circle", "aria-label": step.label, "aria-current": isActive ? 'step' : undefined, disabled: !isReachable(i), onClick: () => goTo(i), children: step.completed && !step.error ? (_jsx(AtlIcon, { name: "check", size: "sm" })) : step.error ? (_jsx(AtlIcon, { name: "close", size: "sm" })) : (i + 1) }), _jsxs("div", { className: "step-text", children: [_jsx("span", { className: "step-label", children: step.label }), step.description && (_jsx("span", { className: "step-description", children: step.description })), step.optional && !step.completed && (_jsx("span", { className: "step-optional", children: "Optional" }))] })] }), i < steps.length - 1 && (_jsx("li", { "aria-hidden": "true", className: [
99
+ 'step-connector',
100
+ (activeStep > i || step.completed) && 'is-active',
101
+ ]
95
102
  .filter(Boolean)
96
103
  .join(' ') }))] }, i));
97
104
  }) }), _jsx("div", { className: "stepper-content", children: stepPanels.map((panel, i) => {
@@ -1 +1 @@
1
- {"version":3,"file":"atl-stepper.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/stepper/atl-stepper.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Fragment,\n createContext,\n useContext,\n useState,\n ReactNode,\n HTMLAttributes,\n Children,\n isValidElement,\n useMemo,\n ReactElement,\n} from 'react';\nimport type { AtlStepperSpec, AtlStepSpec } from '../spec';\nimport './atl-stepper.css';\nimport { AtlIcon } from '../icon/atl-icon';\n\ninterface StepInfo {\n label: string;\n description?: string;\n completed: boolean;\n error: boolean;\n optional: boolean;\n disabled: boolean;\n}\n\ninterface StepperContextValue {\n activeStep: number;\n setActiveStep: (i: number) => void;\n steps: StepInfo[];\n linear: boolean;\n next(): void;\n prev(): void;\n goTo(i: number): void;\n}\n\nconst StepperContext = createContext<StepperContextValue>({\n activeStep: 0,\n setActiveStep: () => undefined,\n steps: [],\n linear: false,\n next: () => undefined,\n prev: () => undefined,\n goTo: () => undefined,\n});\n\n/** Access stepper navigation from within step content. */\nexport function useAtlStepper() {\n return useContext(StepperContext);\n}\n\nexport interface AtlStepperProps\n extends HTMLAttributes<HTMLDivElement>,\n AtlStepperSpec {\n /** Currently active step index. */\n activeStep?: number;\n /** Callback when the active step changes. */\n onActiveStepChange?: (index: number) => void;\n /** Layout orientation. */\n orientation?: 'horizontal' | 'vertical';\n /** Restrict forward navigation until previous steps are completed. */\n linear?: boolean;\n children?: ReactNode;\n}\n\nexport function AtlStepper({\n activeStep: externalStep,\n onActiveStepChange,\n orientation = 'horizontal',\n linear = false,\n children,\n className,\n ...rest\n}: AtlStepperProps) {\n const [internalStep, setInternalStep] = useState(externalStep ?? 0);\n const isControlled = externalStep !== undefined;\n const activeStep = isControlled ? externalStep : internalStep;\n\n const setStep = (i: number) => {\n if (!isControlled) setInternalStep(i);\n onActiveStepChange?.(i);\n };\n\n const childArray = Children.toArray(children);\n const steps: StepInfo[] = useMemo(\n () =>\n childArray\n .filter(\n (c) =>\n isValidElement(c) &&\n (c.type as { displayName?: string }).displayName === 'AtlStep'\n )\n .map((c) => {\n const element = c as ReactElement<AtlStepProps>;\n return {\n label: element.props.label ?? '',\n description: element.props.description,\n completed: element.props.completed ?? false,\n error: element.props.error ?? false,\n optional: element.props.optional ?? false,\n disabled: element.props.disabled ?? false,\n };\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [children]\n );\n\n // Whether step `i` can be activated right now: not itself disabled, and — in\n // linear mode — either at/behind the active step, or ahead of it with every\n // step before it completed or optional. Drives both goTo()'s guard and the\n // header button's native `disabled` state, so an unreachable step is also\n // not focusable — no roving-tabindex bookkeeping needed, since the header is\n // a list, not a tab widget.\n const isReachable = (i: number) => {\n const step = steps[i];\n if (!step || step.disabled) return false;\n if (!linear) return true;\n if (i <= activeStep) return true;\n return steps.slice(0, i).every((s) => s.completed || s.optional);\n };\n\n const goTo = (i: number) => {\n if (i < 0 || i >= steps.length) return;\n if (!isReachable(i)) return;\n setStep(i);\n };\n\n const next = () => goTo(activeStep + 1);\n const prev = () => {\n const p = activeStep - 1;\n if (p >= 0 && !steps[p]?.disabled) setStep(p);\n };\n\n const classes = [\n 'atl-stepper',\n `orientation-${orientation}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const stepPanels = childArray.filter(\n (c) =>\n isValidElement(c) &&\n (c.type as { displayName?: string }).displayName === 'AtlStep'\n );\n\n return (\n <StepperContext.Provider value={{ activeStep, setActiveStep: setStep, steps, linear, next, prev, goTo }}>\n <div className={classes} {...rest}>\n <ol className=\"stepper-header\" role=\"list\" aria-label=\"Progress\">\n {steps.map((step, i) => {\n const isActive = activeStep === i;\n const isCompleted = step.completed && !isActive;\n const itemClass = [\n 'step-item',\n isActive && 'is-active',\n isCompleted && 'is-completed',\n step.error && 'is-error',\n step.disabled && 'is-disabled',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Fragment key={i}>\n <li className={itemClass}>\n <button\n type=\"button\"\n id={`atl-step-${i}`}\n className=\"step-circle\"\n aria-label={step.label}\n aria-current={isActive ? 'step' : undefined}\n disabled={!isReachable(i)}\n onClick={() => goTo(i)}\n >\n {step.completed && !step.error ? (\n <AtlIcon name=\"check\" size=\"sm\" />\n ) : step.error ? (\n <AtlIcon name=\"close\" size=\"sm\" />\n ) : (\n i + 1\n )}\n </button>\n <div className=\"step-text\">\n <span className=\"step-label\">{step.label}</span>\n {step.description && (\n <span className=\"step-description\">{step.description}</span>\n )}\n {step.optional && !step.completed && (\n <span className=\"step-optional\">Optional</span>\n )}\n </div>\n </li>\n {i < steps.length - 1 && (\n <li\n aria-hidden=\"true\"\n className={['step-connector', (activeStep > i || step.completed) && 'is-active']\n .filter(Boolean)\n .join(' ')}\n />\n )}\n </Fragment>\n );\n })}\n </ol>\n <div className=\"stepper-content\">\n {stepPanels.map((panel, i) => {\n const element = panel as ReactElement<AtlStepProps>;\n return (\n <div\n key={i}\n role=\"region\"\n className=\"step-panel\"\n aria-labelledby={`atl-step-${i}`}\n hidden={i !== activeStep}\n >\n {element.props.children}\n </div>\n );\n })}\n </div>\n </div>\n </StepperContext.Provider>\n );\n}\n\nexport interface AtlStepProps extends AtlStepSpec {\n /** Text displayed on the step indicator. Required. */\n label: string;\n /** Optional subtitle. */\n description?: string;\n /** Mark as completed (shows checkmark). */\n completed?: boolean;\n /** Mark as errored (shows X). */\n error?: boolean;\n /** Mark as optional. */\n optional?: boolean;\n /** Whether the step is disabled. */\n disabled?: boolean;\n children?: ReactNode;\n}\n\nexport function AtlStep({ children }: AtlStepProps) {\n return children;\n}\nAtlStep.displayName = 'AtlStep';\n"]}
1
+ {"version":3,"file":"atl-stepper.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/stepper/atl-stepper.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Fragment,\n createContext,\n useContext,\n useState,\n ReactNode,\n HTMLAttributes,\n Children,\n isValidElement,\n useMemo,\n ReactElement,\n} from 'react';\nimport type { AtlStepperSpec, AtlStepSpec } from '../spec';\nimport './atl-stepper.css';\nimport { AtlIcon } from '../icon/atl-icon';\n\ninterface StepInfo {\n label: string;\n description?: string;\n completed: boolean;\n error: boolean;\n optional: boolean;\n disabled: boolean;\n}\n\ninterface StepperContextValue {\n activeStep: number;\n setActiveStep: (i: number) => void;\n steps: StepInfo[];\n linear: boolean;\n next(): void;\n prev(): void;\n goTo(i: number): void;\n}\n\nconst StepperContext = createContext<StepperContextValue>({\n activeStep: 0,\n setActiveStep: () => undefined,\n steps: [],\n linear: false,\n next: () => undefined,\n prev: () => undefined,\n goTo: () => undefined,\n});\n\n/** Access stepper navigation from within step content. */\nexport function useAtlStepper() {\n return useContext(StepperContext);\n}\n\nexport interface AtlStepperProps\n extends HTMLAttributes<HTMLDivElement>, AtlStepperSpec {\n /** Currently active step index. */\n activeStep?: number;\n /** Callback when the active step changes. */\n onActiveStepChange?: (index: number) => void;\n /** Layout orientation. */\n orientation?: 'horizontal' | 'vertical';\n /** Restrict forward navigation until previous steps are completed. */\n linear?: boolean;\n children?: ReactNode;\n}\n\nexport function AtlStepper({\n activeStep: externalStep,\n onActiveStepChange,\n orientation = 'horizontal',\n linear = false,\n children,\n className,\n ...rest\n}: AtlStepperProps) {\n const [internalStep, setInternalStep] = useState(externalStep ?? 0);\n const isControlled = externalStep !== undefined;\n const activeStep = isControlled ? externalStep : internalStep;\n\n const setStep = (i: number) => {\n if (!isControlled) setInternalStep(i);\n onActiveStepChange?.(i);\n };\n\n const childArray = Children.toArray(children);\n const steps: StepInfo[] = useMemo(\n () =>\n childArray\n .filter(\n (c) =>\n isValidElement(c) &&\n (c.type as { displayName?: string }).displayName === 'AtlStep',\n )\n .map((c) => {\n const element = c as ReactElement<AtlStepProps>;\n return {\n label: element.props.label ?? '',\n description: element.props.description,\n completed: element.props.completed ?? false,\n error: element.props.error ?? false,\n optional: element.props.optional ?? false,\n disabled: element.props.disabled ?? false,\n };\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [children],\n );\n\n // Whether step `i` can be activated right now: not itself disabled, and — in\n // linear mode — either at/behind the active step, or ahead of it with every\n // step before it completed or optional. Drives both goTo()'s guard and the\n // header button's native `disabled` state, so an unreachable step is also\n // not focusable — no roving-tabindex bookkeeping needed, since the header is\n // a list, not a tab widget.\n const isReachable = (i: number) => {\n const step = steps[i];\n if (!step || step.disabled) return false;\n if (!linear) return true;\n if (i <= activeStep) return true;\n return steps.slice(0, i).every((s) => s.completed || s.optional);\n };\n\n const goTo = (i: number) => {\n if (i < 0 || i >= steps.length) return;\n if (!isReachable(i)) return;\n setStep(i);\n };\n\n const next = () => goTo(activeStep + 1);\n const prev = () => {\n const p = activeStep - 1;\n if (p >= 0 && !steps[p]?.disabled) setStep(p);\n };\n\n const classes = ['atl-stepper', `orientation-${orientation}`, className]\n .filter(Boolean)\n .join(' ');\n\n const stepPanels = childArray.filter(\n (c) =>\n isValidElement(c) &&\n (c.type as { displayName?: string }).displayName === 'AtlStep',\n );\n\n return (\n <StepperContext.Provider\n value={{\n activeStep,\n setActiveStep: setStep,\n steps,\n linear,\n next,\n prev,\n goTo,\n }}\n >\n <div className={classes} {...rest}>\n <ol className=\"stepper-header\" role=\"list\" aria-label=\"Progress\">\n {steps.map((step, i) => {\n const isActive = activeStep === i;\n const isCompleted = step.completed && !isActive;\n const itemClass = [\n 'step-item',\n isActive && 'is-active',\n isCompleted && 'is-completed',\n step.error && 'is-error',\n step.disabled && 'is-disabled',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Fragment key={i}>\n <li className={itemClass}>\n <button\n type=\"button\"\n id={`atl-step-${i}`}\n className=\"step-circle\"\n aria-label={step.label}\n aria-current={isActive ? 'step' : undefined}\n disabled={!isReachable(i)}\n onClick={() => goTo(i)}\n >\n {step.completed && !step.error ? (\n <AtlIcon name=\"check\" size=\"sm\" />\n ) : step.error ? (\n <AtlIcon name=\"close\" size=\"sm\" />\n ) : (\n i + 1\n )}\n </button>\n <div className=\"step-text\">\n <span className=\"step-label\">{step.label}</span>\n {step.description && (\n <span className=\"step-description\">\n {step.description}\n </span>\n )}\n {step.optional && !step.completed && (\n <span className=\"step-optional\">Optional</span>\n )}\n </div>\n </li>\n {i < steps.length - 1 && (\n <li\n aria-hidden=\"true\"\n className={[\n 'step-connector',\n (activeStep > i || step.completed) && 'is-active',\n ]\n .filter(Boolean)\n .join(' ')}\n />\n )}\n </Fragment>\n );\n })}\n </ol>\n <div className=\"stepper-content\">\n {stepPanels.map((panel, i) => {\n const element = panel as ReactElement<AtlStepProps>;\n return (\n <div\n key={i}\n role=\"region\"\n className=\"step-panel\"\n aria-labelledby={`atl-step-${i}`}\n hidden={i !== activeStep}\n >\n {element.props.children}\n </div>\n );\n })}\n </div>\n </div>\n </StepperContext.Provider>\n );\n}\n\nexport interface AtlStepProps extends AtlStepSpec {\n /** Text displayed on the step indicator. Required. */\n label: string;\n /** Optional subtitle. */\n description?: string;\n /** Mark as completed (shows checkmark). */\n completed?: boolean;\n /** Mark as errored (shows X). */\n error?: boolean;\n /** Mark as optional. */\n optional?: boolean;\n /** Whether the step is disabled. */\n disabled?: boolean;\n children?: ReactNode;\n}\n\nexport function AtlStep({ children }: AtlStepProps) {\n return children;\n}\nAtlStep.displayName = 'AtlStep';\n"]}
@@ -14,15 +14,16 @@
14
14
  .atl-tr-select-cell
15
15
  ),
16
16
  :is(
17
- .atl-table,
18
- .atl-table-wrapper,
19
- .atl-tbody-empty-cell,
20
- .atl-th-sort-asc-arrow,
21
- .atl-th-sort-btn,
22
- .atl-th-sort-desc-arrow,
23
- .atl-th-sort-icon,
24
- .atl-tr-select-cell
25
- ) * {
17
+ .atl-table,
18
+ .atl-table-wrapper,
19
+ .atl-tbody-empty-cell,
20
+ .atl-th-sort-asc-arrow,
21
+ .atl-th-sort-btn,
22
+ .atl-th-sort-desc-arrow,
23
+ .atl-th-sort-icon,
24
+ .atl-tr-select-cell
25
+ )
26
+ * {
26
27
  box-sizing: border-box;
27
28
  }
28
29
 
@@ -22,7 +22,7 @@ export interface AtlTbodyProps extends AtlTbodySpec {
22
22
  /** Content shown in place of rows when empty=true. */
23
23
  emptyContent?: ReactNode;
24
24
  }
25
- export declare function AtlTbody({ empty, colSpan, children, emptyContent }: AtlTbodyProps): import("react").JSX.Element;
25
+ export declare function AtlTbody({ empty, colSpan, children, emptyContent, }: AtlTbodyProps): import("react").JSX.Element;
26
26
  export interface AtlTrProps extends AtlTrSpec {
27
27
  children?: ReactNode;
28
28
  onSelectedChange?: (selected: boolean) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"atl-table.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/table/atl-table.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACtF,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,SAAS,EACT,SAAS,EACT,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB,OAAO,iBAAiB,CAAC;AAGzB,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAMjC,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,cAAc,CAAC,EAAE,YAAY;IACjF,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,QAAQ,CAAC,EACvB,OAAmB,EACnB,IAAW,EACX,YAAoB,EACpB,QAAQ,EACR,SAAS,EACT,YAAY,EAAE,SAAS,EACvB,GAAG,IAAI,EACR,EAAE,aAAa,+BA2Bf;AAMD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,aAAa,+BAEnD;AAMD,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,sDAAsD;IACtD,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAa,EAAE,OAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,aAAa,+BAc7F;AAMD,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC3C,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;CAChD;AAED,wBAAgB,KAAK,CAAC,EACpB,QAAgB,EAChB,UAAkB,EAClB,QAAQ,EACR,gBAAgB,GACjB,EAAE,UAAU,+BAWZ;AAMD,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC,EAAE,SAAS;IAClG,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAChD;AAED,wBAAgB,KAAK,CAAC,EACpB,QAAgB,EAChB,aAAoB,EACpB,KAAe,EACf,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,GAAG,IAAI,EACR,EAAE,UAAU,+BA6CZ;AAMD,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC,EAAE,SAAS;IAClG,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,KAAK,CAAC,EAAE,KAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,UAAU,+BAOlF"}
1
+ {"version":3,"file":"atl-table.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/table/atl-table.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,SAAS,EACT,SAAS,EACT,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB,OAAO,iBAAiB,CAAC;AAGzB,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAMjC,MAAM,WAAW,aACf,SAAQ,cAAc,CAAC,cAAc,CAAC,EAAE,YAAY;IACpD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,QAAQ,CAAC,EACvB,OAAmB,EACnB,IAAW,EACX,YAAoB,EACpB,QAAQ,EACR,SAAS,EACT,YAAY,EAAE,SAAS,EACvB,GAAG,IAAI,EACR,EAAE,aAAa,+BA2Bf;AAMD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,aAAa,+BAEnD;AAMD,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,sDAAsD;IACtD,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAAa,EACb,OAAW,EACX,QAAQ,EACR,YAAY,GACb,EAAE,aAAa,+BAcf;AAMD,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC3C,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;CAChD;AAED,wBAAgB,KAAK,CAAC,EACpB,QAAgB,EAChB,UAAkB,EAClB,QAAQ,EACR,gBAAgB,GACjB,EAAE,UAAU,+BAcZ;AAMD,MAAM,WAAW,UACf,SAAQ,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC,EAAE,SAAS;IACxE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAChD;AAED,wBAAgB,KAAK,CAAC,EACpB,QAAgB,EAChB,aAAoB,EACpB,KAAe,EACf,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,GAAG,IAAI,EACR,EAAE,UAAU,+BAsDZ;AAMD,MAAM,WAAW,UACf,SAAQ,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC,EAAE,SAAS;IACxE,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,KAAK,CAAC,EACpB,KAAe,EACf,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,UAAU,+BAOZ"}
@@ -17,7 +17,7 @@ export function AtlTable({ variant = 'default', size = 'md', stickyHeader = fals
17
17
  export function AtlThead({ children }) {
18
18
  return _jsx("thead", { children: children });
19
19
  }
20
- export function AtlTbody({ empty = false, colSpan = 1, children, emptyContent }) {
20
+ export function AtlTbody({ empty = false, colSpan = 1, children, emptyContent, }) {
21
21
  return (_jsx("tbody", { children: !empty ? (children) : (_jsx("tr", { children: _jsx("td", { colSpan: colSpan, className: "atl-tbody-empty-cell", children: emptyContent }) })) }));
22
22
  }
23
23
  export function AtlTr({ selected = false, selectable = false, children, onSelectedChange, }) {
@@ -1 +1 @@
1
- {"version":3,"file":"atl-table.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/table/atl-table.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAmB3C,MAAM,UAAU,QAAQ,CAAC,EACvB,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,IAAI,EACX,YAAY,GAAG,KAAK,EACpB,QAAQ,EACR,SAAS,EACT,YAAY,EAAE,SAAS,EACvB,GAAG,IAAI,EACO;IACd,MAAM,OAAO,GAAG;QACd,WAAW;QACX,WAAW,OAAO,EAAE;QACpB,QAAQ,IAAI,EAAE;QACd,YAAY,IAAI,kBAAkB;QAClC,SAAS;KACV;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,CACL,cAAK,SAAS,EAAE,OAAO,KAAM,IAAI,YAK/B,cACE,SAAS,EAAC,mBAAmB,EAC7B,QAAQ,EAAE,CAAC,EACX,IAAI,EAAC,QAAQ,gBACD,SAAS,IAAI,OAAO,YAEhC,0BAAQ,QAAQ,GAAS,GACrB,GACF,CACP,CAAC;AACJ,CAAC;AAUD,MAAM,UAAU,QAAQ,CAAC,EAAE,QAAQ,EAAiB;IAClD,OAAO,0BAAQ,QAAQ,GAAS,CAAC;AACnC,CAAC;AAYD,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAiB;IAC5F,OAAO,CACL,0BACG,CAAC,KAAK,CAAC,CAAC,CAAC,CACR,QAAQ,CACT,CAAC,CAAC,CAAC,CACF,uBACE,aAAI,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,sBAAsB,YACnD,YAAY,GACV,GACF,CACN,GACK,CACT,CAAC;AACJ,CAAC;AAWD,MAAM,UAAU,KAAK,CAAC,EACpB,QAAQ,GAAG,KAAK,EAChB,UAAU,GAAG,KAAK,EAClB,QAAQ,EACR,gBAAgB,GACL;IACX,OAAO,CACL,+BAAmB,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,aAClG,UAAU,IAAI,CACb,aAAI,SAAS,EAAC,oBAAoB,YAChC,KAAC,WAAW,IAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,GAAI,GAClE,CACN,EACA,QAAQ,IACN,CACN,CAAC;AACJ,CAAC;AAWD,MAAM,UAAU,KAAK,CAAC,EACpB,QAAQ,GAAG,KAAK,EAChB,aAAa,GAAG,IAAI,EACpB,KAAK,GAAG,OAAO,EACf,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,GAAG,IAAI,EACI;IACX,MAAM,OAAO,GAAG;QACd,SAAS,KAAK,EAAE;QAChB,aAAa,IAAI,WAAW;QAC5B,aAAa,KAAK,KAAK,IAAI,UAAU;QACrC,aAAa,KAAK,MAAM,IAAI,WAAW;QACvC,SAAS;KACV;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;IAE1B,MAAM,QAAQ,GAAG,QAAQ;QACvB,CAAC,CAAC,aAAa,KAAK,KAAK;YACvB,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,aAAa,KAAK,MAAM;gBACxB,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,MAAM;QACZ,CAAC,CAAC,SAAS,CAAC;IAEd,SAAS,SAAS;QAChB,MAAM,IAAI,GACR,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3E,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,CACL,0BACa,QAAQ,EACnB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,EACpC,SAAS,EAAE,OAAO,KACd,IAAI,YAEP,QAAQ,CAAC,CAAC,CAAC,CACV,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,iBAAiB,EAAC,OAAO,EAAE,SAAS,aACjE,QAAQ,EACT,gBAAM,SAAS,EAAC,kBAAkB,iBAAa,MAAM,aACnD,KAAC,OAAO,IAAC,IAAI,EAAC,UAAU,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,uBAAuB,GAAG,EACvE,KAAC,OAAO,IAAC,IAAI,EAAC,WAAW,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,wBAAwB,GAAG,IACpE,IACA,CACV,CAAC,CAAC,CAAC,CACF,QAAQ,CACT,GACE,CACN,CAAC;AACJ,CAAC;AAUD,MAAM,UAAU,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAc;IACjF,MAAM,OAAO,GAAG,CAAC,SAAS,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxE,OAAO,CACL,aAAI,SAAS,EAAE,OAAO,KAAM,IAAI,YAC7B,QAAQ,GACN,CACN,CAAC;AACJ,CAAC","sourcesContent":["import { HTMLAttributes, ReactNode, TdHTMLAttributes, ThHTMLAttributes } from 'react';\nimport type {\n AtlTableSpec,\n AtlTbodySpec,\n AtlTrSpec,\n AtlThSpec,\n AtlTdSpec,\n AtlSortDirection,\n} from '../spec';\nimport { AtlCheckbox } from '../checkbox/atl-checkbox';\nimport './atl-table.css';\nimport { AtlIcon } from '../icon/atl-icon';\n\nexport type { AtlSortDirection };\n\n// ---------------------------------------------------------------------------\n// AtlTable\n// ---------------------------------------------------------------------------\n\nexport interface AtlTableProps extends HTMLAttributes<HTMLDivElement>, AtlTableSpec {\n children?: ReactNode;\n /**\n * Accessible name for the scrollable table region. Surfaces to\n * screen readers as the region's label so keyboard users who\n * scroll the wrapper know what they're scrolling. Defaults to\n * `\"Table\"` if unset.\n */\n 'aria-label'?: string;\n}\n\nexport function AtlTable({\n variant = 'default',\n size = 'md',\n stickyHeader = false,\n children,\n className,\n 'aria-label': ariaLabel,\n ...rest\n}: AtlTableProps) {\n const classes = [\n 'atl-table',\n `variant-${variant}`,\n `size-${size}`,\n stickyHeader && 'is-sticky-header',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes} {...rest}>\n {/* The wrapper is the scrollable region — give it tabindex=0 so\n * keyboard users can scroll horizontally through wide tables.\n * role=region + aria-label expose it as a labelled landmark for\n * screen readers (axe rule: scrollable-region-focusable). */}\n <div\n className=\"atl-table-wrapper\"\n tabIndex={0}\n role=\"region\"\n aria-label={ariaLabel ?? 'Table'}\n >\n <table>{children}</table>\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// AtlThead\n// ---------------------------------------------------------------------------\n\nexport interface AtlTheadProps {\n children?: ReactNode;\n}\n\nexport function AtlThead({ children }: AtlTheadProps) {\n return <thead>{children}</thead>;\n}\n\n// ---------------------------------------------------------------------------\n// AtlTbody\n// ---------------------------------------------------------------------------\n\nexport interface AtlTbodyProps extends AtlTbodySpec {\n children?: ReactNode;\n /** Content shown in place of rows when empty=true. */\n emptyContent?: ReactNode;\n}\n\nexport function AtlTbody({ empty = false, colSpan = 1, children, emptyContent }: AtlTbodyProps) {\n return (\n <tbody>\n {!empty ? (\n children\n ) : (\n <tr>\n <td colSpan={colSpan} className=\"atl-tbody-empty-cell\">\n {emptyContent}\n </td>\n </tr>\n )}\n </tbody>\n );\n}\n\n// ---------------------------------------------------------------------------\n// AtlTr\n// ---------------------------------------------------------------------------\n\nexport interface AtlTrProps extends AtlTrSpec {\n children?: ReactNode;\n onSelectedChange?: (selected: boolean) => void;\n}\n\nexport function AtlTr({\n selected = false,\n selectable = false,\n children,\n onSelectedChange,\n}: AtlTrProps) {\n return (\n <tr aria-selected={selectable ? selected : undefined} className={selected ? 'is-selected' : undefined}>\n {selectable && (\n <td className=\"atl-tr-select-cell\">\n <AtlCheckbox checked={selected} onCheckedChange={onSelectedChange} />\n </td>\n )}\n {children}\n </tr>\n );\n}\n\n// ---------------------------------------------------------------------------\n// AtlTh\n// ---------------------------------------------------------------------------\n\nexport interface AtlThProps extends Omit<ThHTMLAttributes<HTMLTableCellElement>, 'align'>, AtlThSpec {\n children?: ReactNode;\n onSort?: (direction: AtlSortDirection) => void;\n}\n\nexport function AtlTh({\n sortable = false,\n sortDirection = null,\n align = 'start',\n width,\n children,\n onSort,\n className,\n ...rest\n}: AtlThProps) {\n const classes = [\n `align-${align}`,\n sortDirection && 'is-sorted',\n sortDirection === 'asc' && 'sort-asc',\n sortDirection === 'desc' && 'sort-desc',\n className,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const ariaSort = sortable\n ? sortDirection === 'asc'\n ? 'ascending'\n : sortDirection === 'desc'\n ? 'descending'\n : 'none'\n : undefined;\n\n function cycleSort() {\n const next: AtlSortDirection =\n sortDirection === null ? 'asc' : sortDirection === 'asc' ? 'desc' : null;\n onSort?.(next);\n }\n\n return (\n <th\n aria-sort={ariaSort}\n style={width ? { width } : undefined}\n className={classes}\n {...rest}\n >\n {sortable ? (\n <button type=\"button\" className=\"atl-th-sort-btn\" onClick={cycleSort}>\n {children}\n <span className=\"atl-th-sort-icon\" aria-hidden=\"true\">\n <AtlIcon name=\"sort-asc\" size=\"sm\" className=\"atl-th-sort-asc-arrow\" />\n <AtlIcon name=\"sort-desc\" size=\"sm\" className=\"atl-th-sort-desc-arrow\" />\n </span>\n </button>\n ) : (\n children\n )}\n </th>\n );\n}\n\n// ---------------------------------------------------------------------------\n// AtlTd\n// ---------------------------------------------------------------------------\n\nexport interface AtlTdProps extends Omit<TdHTMLAttributes<HTMLTableCellElement>, 'align'>, AtlTdSpec {\n children?: ReactNode;\n}\n\nexport function AtlTd({ align = 'start', children, className, ...rest }: AtlTdProps) {\n const classes = [`align-${align}`, className].filter(Boolean).join(' ');\n return (\n <td className={classes} {...rest}>\n {children}\n </td>\n );\n}\n"]}
1
+ {"version":3,"file":"atl-table.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/table/atl-table.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n HTMLAttributes,\n ReactNode,\n TdHTMLAttributes,\n ThHTMLAttributes,\n} from 'react';\nimport type {\n AtlTableSpec,\n AtlTbodySpec,\n AtlTrSpec,\n AtlThSpec,\n AtlTdSpec,\n AtlSortDirection,\n} from '../spec';\nimport { AtlCheckbox } from '../checkbox/atl-checkbox';\nimport './atl-table.css';\nimport { AtlIcon } from '../icon/atl-icon';\n\nexport type { AtlSortDirection };\n\n// ---------------------------------------------------------------------------\n// AtlTable\n// ---------------------------------------------------------------------------\n\nexport interface AtlTableProps\n extends HTMLAttributes<HTMLDivElement>, AtlTableSpec {\n children?: ReactNode;\n /**\n * Accessible name for the scrollable table region. Surfaces to\n * screen readers as the region's label so keyboard users who\n * scroll the wrapper know what they're scrolling. Defaults to\n * `\"Table\"` if unset.\n */\n 'aria-label'?: string;\n}\n\nexport function AtlTable({\n variant = 'default',\n size = 'md',\n stickyHeader = false,\n children,\n className,\n 'aria-label': ariaLabel,\n ...rest\n}: AtlTableProps) {\n const classes = [\n 'atl-table',\n `variant-${variant}`,\n `size-${size}`,\n stickyHeader && 'is-sticky-header',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes} {...rest}>\n {/* The wrapper is the scrollable region — give it tabindex=0 so\n * keyboard users can scroll horizontally through wide tables.\n * role=region + aria-label expose it as a labelled landmark for\n * screen readers (axe rule: scrollable-region-focusable). */}\n <div\n className=\"atl-table-wrapper\"\n tabIndex={0}\n role=\"region\"\n aria-label={ariaLabel ?? 'Table'}\n >\n <table>{children}</table>\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// AtlThead\n// ---------------------------------------------------------------------------\n\nexport interface AtlTheadProps {\n children?: ReactNode;\n}\n\nexport function AtlThead({ children }: AtlTheadProps) {\n return <thead>{children}</thead>;\n}\n\n// ---------------------------------------------------------------------------\n// AtlTbody\n// ---------------------------------------------------------------------------\n\nexport interface AtlTbodyProps extends AtlTbodySpec {\n children?: ReactNode;\n /** Content shown in place of rows when empty=true. */\n emptyContent?: ReactNode;\n}\n\nexport function AtlTbody({\n empty = false,\n colSpan = 1,\n children,\n emptyContent,\n}: AtlTbodyProps) {\n return (\n <tbody>\n {!empty ? (\n children\n ) : (\n <tr>\n <td colSpan={colSpan} className=\"atl-tbody-empty-cell\">\n {emptyContent}\n </td>\n </tr>\n )}\n </tbody>\n );\n}\n\n// ---------------------------------------------------------------------------\n// AtlTr\n// ---------------------------------------------------------------------------\n\nexport interface AtlTrProps extends AtlTrSpec {\n children?: ReactNode;\n onSelectedChange?: (selected: boolean) => void;\n}\n\nexport function AtlTr({\n selected = false,\n selectable = false,\n children,\n onSelectedChange,\n}: AtlTrProps) {\n return (\n <tr\n aria-selected={selectable ? selected : undefined}\n className={selected ? 'is-selected' : undefined}\n >\n {selectable && (\n <td className=\"atl-tr-select-cell\">\n <AtlCheckbox checked={selected} onCheckedChange={onSelectedChange} />\n </td>\n )}\n {children}\n </tr>\n );\n}\n\n// ---------------------------------------------------------------------------\n// AtlTh\n// ---------------------------------------------------------------------------\n\nexport interface AtlThProps\n extends Omit<ThHTMLAttributes<HTMLTableCellElement>, 'align'>, AtlThSpec {\n children?: ReactNode;\n onSort?: (direction: AtlSortDirection) => void;\n}\n\nexport function AtlTh({\n sortable = false,\n sortDirection = null,\n align = 'start',\n width,\n children,\n onSort,\n className,\n ...rest\n}: AtlThProps) {\n const classes =\n [\n `align-${align}`,\n sortDirection && 'is-sorted',\n sortDirection === 'asc' && 'sort-asc',\n sortDirection === 'desc' && 'sort-desc',\n className,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const ariaSort = sortable\n ? sortDirection === 'asc'\n ? 'ascending'\n : sortDirection === 'desc'\n ? 'descending'\n : 'none'\n : undefined;\n\n function cycleSort() {\n const next: AtlSortDirection =\n sortDirection === null ? 'asc' : sortDirection === 'asc' ? 'desc' : null;\n onSort?.(next);\n }\n\n return (\n <th\n aria-sort={ariaSort}\n style={width ? { width } : undefined}\n className={classes}\n {...rest}\n >\n {sortable ? (\n <button type=\"button\" className=\"atl-th-sort-btn\" onClick={cycleSort}>\n {children}\n <span className=\"atl-th-sort-icon\" aria-hidden=\"true\">\n <AtlIcon\n name=\"sort-asc\"\n size=\"sm\"\n className=\"atl-th-sort-asc-arrow\"\n />\n <AtlIcon\n name=\"sort-desc\"\n size=\"sm\"\n className=\"atl-th-sort-desc-arrow\"\n />\n </span>\n </button>\n ) : (\n children\n )}\n </th>\n );\n}\n\n// ---------------------------------------------------------------------------\n// AtlTd\n// ---------------------------------------------------------------------------\n\nexport interface AtlTdProps\n extends Omit<TdHTMLAttributes<HTMLTableCellElement>, 'align'>, AtlTdSpec {\n children?: ReactNode;\n}\n\nexport function AtlTd({\n align = 'start',\n children,\n className,\n ...rest\n}: AtlTdProps) {\n const classes = [`align-${align}`, className].filter(Boolean).join(' ');\n return (\n <td className={classes} {...rest}>\n {children}\n </td>\n );\n}\n"]}
@@ -46,7 +46,13 @@
46
46
  line-height: var(--ui-line-height-tight);
47
47
  /* Derived from the height, not authored: 12+12 padding on a 20px line box
48
48
  * rendered 41px against a 40px token (ADR-0041's recipe, ADR-0047's finding). */
49
- padding: calc((var(--ui-control-height-md) - var(--ui-line-height-tight) * var(--ui-font-size-sm)) / 2)
49
+ padding: calc(
50
+ (
51
+ var(--ui-control-height-md) - var(--ui-line-height-tight) *
52
+ var(--ui-font-size-sm)
53
+ ) /
54
+ 2
55
+ )
50
56
  var(--ui-spacing-4);
51
57
  font-size: var(--ui-font-size-sm);
52
58
  font-weight: var(--ui-font-weight-medium);
@@ -100,11 +106,11 @@
100
106
  }
101
107
 
102
108
  /* ─── Tab panel ─── */
103
- .atl-tab-group [role="tabpanel"] {
109
+ .atl-tab-group [role='tabpanel'] {
104
110
  padding: var(--ui-spacing-5) 0;
105
111
  }
106
112
 
107
- .atl-tab-group [role="tabpanel"]:focus-visible {
113
+ .atl-tab-group [role='tabpanel']:focus-visible {
108
114
  outline: none;
109
115
  box-shadow: var(--ui-focus-ring);
110
116
  border-radius: var(--ui-radius-md);
@@ -126,7 +132,13 @@
126
132
  * text metrics, which is how three controls measured right on one machine and
127
133
  * wrong on another (ADR-0048). */
128
134
  line-height: var(--ui-line-height-tight);
129
- padding: calc((var(--ui-control-height-sm) - var(--ui-line-height-tight) * var(--ui-font-size-sm)) / 2)
135
+ padding: calc(
136
+ (
137
+ var(--ui-control-height-sm) - var(--ui-line-height-tight) *
138
+ var(--ui-font-size-sm)
139
+ ) /
140
+ 2
141
+ )
130
142
  var(--ui-spacing-4);
131
143
  font-size: var(--ui-font-size-sm);
132
144
  }
@@ -141,7 +153,9 @@
141
153
  box-shadow: var(--ui-shadow-sm);
142
154
  }
143
155
 
144
- .atl-tab-group.variant-pills .tablist button:hover:not(.is-disabled):not(.is-active) {
156
+ .atl-tab-group.variant-pills
157
+ .tablist
158
+ button:hover:not(.is-disabled):not(.is-active) {
145
159
  background: transparent;
146
160
  color: var(--ui-color-text);
147
161
  }
@@ -1 +1 @@
1
- {"version":3,"file":"atl-tabs.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/tabs/atl-tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,SAAS,EACT,cAAc,EAKf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACX,MAAM,SAAS,CAAC;AACjB,OAAO,gBAAgB,CAAC;AAqBxB;;GAEG;AACH,MAAM,WAAW,gBACf,SAAQ,cAAc,CAAC,cAAc,CAAC,EACpC,eAAe;IACjB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAC1B,aAAa,EAAE,aAAa,EAC5B,qBAAqB,EACrB,OAAmB,EACnB,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,gBAAgB,+BA4GlB;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,WAAW,aAE/C;yBAFe,MAAM"}
1
+ {"version":3,"file":"atl-tabs.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/tabs/atl-tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,SAAS,EACT,cAAc,EAKf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,gBAAgB,CAAC;AAqBxB;;GAEG;AACH,MAAM,WAAW,gBACf,SAAQ,cAAc,CAAC,cAAc,CAAC,EAAE,eAAe;IACvD;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAC1B,aAAa,EAAE,aAAa,EAC5B,qBAAqB,EACrB,OAAmB,EACnB,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,gBAAgB,+BAgHlB;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,WAAW,aAE/C;yBAFe,MAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"atl-tabs.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/tabs/atl-tabs.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n createContext,\n useState,\n useRef,\n ReactNode,\n HTMLAttributes,\n KeyboardEvent,\n Children,\n isValidElement,\n ReactElement,\n} from 'react';\nimport type {\n AtlTabGroupSpec,\n AtlTabSpec,\n} from '../spec';\nimport './atl-tabs.css';\n\ninterface TabInfo {\n label: string;\n disabled: boolean;\n}\n\ninterface TabGroupContextValue {\n selectedIndex: number;\n setSelectedIndex: (index: number) => void;\n variant: 'default' | 'pills';\n tabs: TabInfo[];\n}\n\nconst TabGroupContext = createContext<TabGroupContextValue>({\n selectedIndex: 0,\n setSelectedIndex: () => undefined,\n variant: 'default',\n tabs: [],\n});\n\n/**\n * Properties for the AtlTabGroup component.\n */\nexport interface AtlTabGroupProps\n extends HTMLAttributes<HTMLDivElement>,\n AtlTabGroupSpec {\n /**\n * The index of the currently selected tab.\n */\n selectedIndex?: number;\n /**\n * Callback triggered when the selected tab index changes.\n */\n onSelectedIndexChange?: (index: number) => void;\n /**\n * The visual style variant of the tabs.\n */\n variant?: 'default' | 'pills';\n /**\n * The AtlTab components to be rendered.\n */\n children?: ReactNode;\n}\n\n/**\n * A component for organizing content into multiple tabs.\n */\nexport function AtlTabGroup({\n selectedIndex: externalIndex,\n onSelectedIndexChange,\n variant = 'default',\n children,\n className,\n ...rest\n}: AtlTabGroupProps) {\n const [internalIndex, setInternalIndex] = useState(0);\n const isControlled = externalIndex !== undefined;\n const selectedIndex = isControlled ? externalIndex : internalIndex;\n const tabListRef = useRef<HTMLDivElement>(null);\n\n const setIndex = (i: number) => {\n if (!isControlled) setInternalIndex(i);\n onSelectedIndexChange?.(i);\n };\n\n const childArray = Children.toArray(children);\n const tabs: TabInfo[] = childArray\n .filter(\n (child) =>\n isValidElement(child) &&\n (child.type as { displayName?: string }).displayName === 'AtlTab'\n )\n .map((child) => {\n const element = child as ReactElement<AtlTabProps>;\n return {\n label: element.props.label ?? '',\n disabled: element.props.disabled ?? false,\n };\n });\n\n const classes = ['atl-tab-group', `variant-${variant}`, className]\n .filter(Boolean)\n .join(' ');\n\n const handleKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n const enabledIndices = tabs\n .map((t, i) => (!t.disabled ? i : -1))\n .filter((i) => i >= 0);\n if (enabledIndices.length === 0) return;\n\n const currentEnabled = enabledIndices.indexOf(selectedIndex);\n let nextPos = currentEnabled;\n\n if (e.key === 'ArrowRight')\n nextPos = (currentEnabled + 1) % enabledIndices.length;\n else if (e.key === 'ArrowLeft')\n nextPos =\n (currentEnabled - 1 + enabledIndices.length) % enabledIndices.length;\n else if (e.key === 'Home') nextPos = 0;\n else if (e.key === 'End') nextPos = enabledIndices.length - 1;\n else return;\n\n e.preventDefault();\n const nextIndex = enabledIndices[nextPos];\n setIndex(nextIndex);\n const buttons =\n tabListRef.current?.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]');\n buttons?.[nextIndex]?.focus();\n };\n\n const panels = childArray.filter(\n (child) =>\n isValidElement(child) &&\n (child.type as { displayName?: string }).displayName === 'AtlTab'\n );\n\n return (\n <TabGroupContext.Provider value={{ selectedIndex, setSelectedIndex: setIndex, variant, tabs }}>\n <div className={classes} {...rest}>\n <div className=\"tablist\" role=\"tablist\" ref={tabListRef}>\n {tabs.map((tab, i) => (\n <button\n key={i}\n type=\"button\"\n role=\"tab\"\n id={`atl-tab-${i}`}\n aria-selected={i === selectedIndex}\n aria-controls={`atl-tab-panel-${i}`}\n aria-disabled={tab.disabled || undefined}\n tabIndex={i === selectedIndex ? 0 : -1}\n className={[\n i === selectedIndex && 'is-active',\n tab.disabled && 'is-disabled',\n ]\n .filter(Boolean)\n .join(' ') || undefined}\n disabled={tab.disabled}\n onClick={() => !tab.disabled && setIndex(i)}\n onKeyDown={handleKeyDown}\n >\n {tab.label}\n </button>\n ))}\n </div>\n {panels.map((panel, i) => {\n const element = panel as ReactElement<AtlTabProps>;\n return (\n <div\n key={i}\n id={`atl-tab-panel-${i}`}\n role=\"tabpanel\"\n aria-labelledby={`atl-tab-${i}`}\n tabIndex={0}\n hidden={i !== selectedIndex}\n >\n {element.props.children}\n </div>\n );\n })}\n </div>\n </TabGroupContext.Provider>\n );\n}\n\n/**\n * Properties for the AtlTab component.\n */\nexport interface AtlTabProps extends AtlTabSpec {\n /**\n * The label to display on the tab button.\n */\n label: string;\n /**\n * Whether the tab is disabled.\n */\n disabled?: boolean;\n /**\n * The content to be rendered when the tab is selected.\n */\n children?: ReactNode;\n}\n\n/**\n * An individual tab component for use within AtlTabGroup.\n */\nexport function AtlTab({ children }: AtlTabProps) {\n return children;\n}\nAtlTab.displayName = 'AtlTab';\n"]}
1
+ {"version":3,"file":"atl-tabs.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/tabs/atl-tabs.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n createContext,\n useState,\n useRef,\n ReactNode,\n HTMLAttributes,\n KeyboardEvent,\n Children,\n isValidElement,\n ReactElement,\n} from 'react';\nimport type { AtlTabGroupSpec, AtlTabSpec } from '../spec';\nimport './atl-tabs.css';\n\ninterface TabInfo {\n label: string;\n disabled: boolean;\n}\n\ninterface TabGroupContextValue {\n selectedIndex: number;\n setSelectedIndex: (index: number) => void;\n variant: 'default' | 'pills';\n tabs: TabInfo[];\n}\n\nconst TabGroupContext = createContext<TabGroupContextValue>({\n selectedIndex: 0,\n setSelectedIndex: () => undefined,\n variant: 'default',\n tabs: [],\n});\n\n/**\n * Properties for the AtlTabGroup component.\n */\nexport interface AtlTabGroupProps\n extends HTMLAttributes<HTMLDivElement>, AtlTabGroupSpec {\n /**\n * The index of the currently selected tab.\n */\n selectedIndex?: number;\n /**\n * Callback triggered when the selected tab index changes.\n */\n onSelectedIndexChange?: (index: number) => void;\n /**\n * The visual style variant of the tabs.\n */\n variant?: 'default' | 'pills';\n /**\n * The AtlTab components to be rendered.\n */\n children?: ReactNode;\n}\n\n/**\n * A component for organizing content into multiple tabs.\n */\nexport function AtlTabGroup({\n selectedIndex: externalIndex,\n onSelectedIndexChange,\n variant = 'default',\n children,\n className,\n ...rest\n}: AtlTabGroupProps) {\n const [internalIndex, setInternalIndex] = useState(0);\n const isControlled = externalIndex !== undefined;\n const selectedIndex = isControlled ? externalIndex : internalIndex;\n const tabListRef = useRef<HTMLDivElement>(null);\n\n const setIndex = (i: number) => {\n if (!isControlled) setInternalIndex(i);\n onSelectedIndexChange?.(i);\n };\n\n const childArray = Children.toArray(children);\n const tabs: TabInfo[] = childArray\n .filter(\n (child) =>\n isValidElement(child) &&\n (child.type as { displayName?: string }).displayName === 'AtlTab',\n )\n .map((child) => {\n const element = child as ReactElement<AtlTabProps>;\n return {\n label: element.props.label ?? '',\n disabled: element.props.disabled ?? false,\n };\n });\n\n const classes = ['atl-tab-group', `variant-${variant}`, className]\n .filter(Boolean)\n .join(' ');\n\n const handleKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n const enabledIndices = tabs\n .map((t, i) => (!t.disabled ? i : -1))\n .filter((i) => i >= 0);\n if (enabledIndices.length === 0) return;\n\n const currentEnabled = enabledIndices.indexOf(selectedIndex);\n let nextPos = currentEnabled;\n\n if (e.key === 'ArrowRight')\n nextPos = (currentEnabled + 1) % enabledIndices.length;\n else if (e.key === 'ArrowLeft')\n nextPos =\n (currentEnabled - 1 + enabledIndices.length) % enabledIndices.length;\n else if (e.key === 'Home') nextPos = 0;\n else if (e.key === 'End') nextPos = enabledIndices.length - 1;\n else return;\n\n e.preventDefault();\n const nextIndex = enabledIndices[nextPos];\n setIndex(nextIndex);\n const buttons =\n tabListRef.current?.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]');\n buttons?.[nextIndex]?.focus();\n };\n\n const panels = childArray.filter(\n (child) =>\n isValidElement(child) &&\n (child.type as { displayName?: string }).displayName === 'AtlTab',\n );\n\n return (\n <TabGroupContext.Provider\n value={{ selectedIndex, setSelectedIndex: setIndex, variant, tabs }}\n >\n <div className={classes} {...rest}>\n <div className=\"tablist\" role=\"tablist\" ref={tabListRef}>\n {tabs.map((tab, i) => (\n <button\n key={i}\n type=\"button\"\n role=\"tab\"\n id={`atl-tab-${i}`}\n aria-selected={i === selectedIndex}\n aria-controls={`atl-tab-panel-${i}`}\n aria-disabled={tab.disabled || undefined}\n tabIndex={i === selectedIndex ? 0 : -1}\n className={\n [\n i === selectedIndex && 'is-active',\n tab.disabled && 'is-disabled',\n ]\n .filter(Boolean)\n .join(' ') || undefined\n }\n disabled={tab.disabled}\n onClick={() => !tab.disabled && setIndex(i)}\n onKeyDown={handleKeyDown}\n >\n {tab.label}\n </button>\n ))}\n </div>\n {panels.map((panel, i) => {\n const element = panel as ReactElement<AtlTabProps>;\n return (\n <div\n key={i}\n id={`atl-tab-panel-${i}`}\n role=\"tabpanel\"\n aria-labelledby={`atl-tab-${i}`}\n tabIndex={0}\n hidden={i !== selectedIndex}\n >\n {element.props.children}\n </div>\n );\n })}\n </div>\n </TabGroupContext.Provider>\n );\n}\n\n/**\n * Properties for the AtlTab component.\n */\nexport interface AtlTabProps extends AtlTabSpec {\n /**\n * The label to display on the tab button.\n */\n label: string;\n /**\n * Whether the tab is disabled.\n */\n disabled?: boolean;\n /**\n * The content to be rendered when the tab is selected.\n */\n children?: ReactNode;\n}\n\n/**\n * An individual tab component for use within AtlTabGroup.\n */\nexport function AtlTab({ children }: AtlTabProps) {\n return children;\n}\nAtlTab.displayName = 'AtlTab';\n"]}
@@ -29,9 +29,10 @@
29
29
  background-color: var(--ui-color-input-bg);
30
30
  border: var(--ui-border-width) solid var(--ui-color-input-border);
31
31
  border-radius: var(--ui-radius-md);
32
- transition: border-color var(--ui-transition-fast),
33
- box-shadow var(--ui-transition-fast),
34
- background-color var(--ui-transition-fast);
32
+ transition:
33
+ border-color var(--ui-transition-fast),
34
+ box-shadow var(--ui-transition-fast),
35
+ background-color var(--ui-transition-fast);
35
36
  outline: none;
36
37
  box-sizing: border-box;
37
38
  resize: vertical;
@@ -79,7 +80,6 @@
79
80
  pointer-events: none;
80
81
  }
81
82
 
82
-
83
83
  /* Disabled state */
84
84
  .atl-textarea.is-disabled {
85
85
  opacity: var(--ui-opacity-disabled);
@@ -1 +1 @@
1
- {"version":3,"file":"atl-textarea.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/textarea/atl-textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAA4B,MAAM,OAAO,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,oBAAoB,CAAC;AAG5B;;GAEG;AACH,MAAM,WAAW,gBACf,SAAQ,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,EAAE,UAAU,CAAC,EACnE,eAAe;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,aAAa,EACb,OAAe,EACf,MAAW,EACX,QAAgB,EAChB,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,YAAY,EACtB,QAAgB,EAChB,KAAK,EACL,UAAkB,EAClB,IAAQ,EACR,SAAS,EACT,EAAE,EACF,GAAG,IAAI,EACR,EAAE,gBAAgB,+BAqElB"}
1
+ {"version":3,"file":"atl-textarea.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/textarea/atl-textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAA4B,MAAM,OAAO,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,oBAAoB,CAAC;AAG5B;;GAEG;AACH,MAAM,WAAW,gBACf,SACE,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,EAAE,UAAU,CAAC,EAC7D,eAAe;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,aAAa,EACb,OAAe,EACf,MAAW,EACX,QAAgB,EAChB,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,YAAY,EACtB,QAAgB,EAChB,KAAK,EACL,UAAkB,EAClB,IAAQ,EACR,SAAS,EACT,EAAE,EACF,GAAG,IAAI,EACR,EAAE,gBAAgB,+BAuElB"}
@@ -39,6 +39,6 @@ export function AtlTextarea({ value, onChange, onValueChange, invalid = false, e
39
39
  }
40
40
  };
41
41
  const errorId = inputId ? `${inputId}-errors` : undefined;
42
- return (_jsxs("div", { className: classes, children: [label && _jsx("label", { htmlFor: inputId, children: label }), _jsxs("div", { className: "textarea-field", children: [_jsx("textarea", { ref: textareaRef, id: inputId, value: value, onChange: handleChange, disabled: disabled, readOnly: readOnly, required: required, rows: rows, "aria-invalid": invalid || undefined, "aria-required": required || undefined, "aria-describedby": errors.length > 0 ? errorId : undefined, ...rest }), invalid && _jsx(AtlIcon, { name: "danger", size: "sm", className: "invalid-icon" })] }), errors.length > 0 && (_jsx("div", { className: "errors", id: errorId, "aria-live": "polite", children: errors.map((err, i) => (_jsx("p", { className: "error-message", children: err }, i))) }))] }));
42
+ return (_jsxs("div", { className: classes, children: [label && _jsx("label", { htmlFor: inputId, children: label }), _jsxs("div", { className: "textarea-field", children: [_jsx("textarea", { ref: textareaRef, id: inputId, value: value, onChange: handleChange, disabled: disabled, readOnly: readOnly, required: required, rows: rows, "aria-invalid": invalid || undefined, "aria-required": required || undefined, "aria-describedby": errors.length > 0 ? errorId : undefined, ...rest }), invalid && (_jsx(AtlIcon, { name: "danger", size: "sm", className: "invalid-icon" }))] }), errors.length > 0 && (_jsx("div", { className: "errors", id: errorId, "aria-live": "polite", children: errors.map((err, i) => (_jsx("p", { className: "error-message", children: err }, i))) }))] }));
43
43
  }
44
44
  //# sourceMappingURL=atl-textarea.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"atl-textarea.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/textarea/atl-textarea.tsx"],"names":[],"mappings":"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","sourcesContent":["import { TextareaHTMLAttributes, useRef, useEffect, useId } from 'react';\nimport type { AtlTextareaSpec } from '../spec';\nimport './atl-textarea.css';\nimport { AtlIcon } from '../icon/atl-icon';\n\n/**\n * Properties for the AtlTextarea component.\n */\nexport interface AtlTextareaProps\n extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'readOnly'>,\n AtlTextareaSpec {\n /**\n * Current value of the textarea.\n */\n value?: string;\n /**\n * Whether the textarea is read-only.\n */\n readOnly?: boolean;\n /**\n * Callback fired when the value changes.\n */\n onValueChange?: (value: string) => void;\n /**\n * List of error messages to display.\n */\n errors?: string[];\n /**\n * Label text for the textarea.\n */\n label?: string;\n}\n\n/**\n * A multi-line text input component that supports automatic resizing and validation states.\n */\nexport function AtlTextarea({\n value,\n onChange,\n onValueChange,\n invalid = false,\n errors = [],\n disabled = false,\n readOnly: reactReadOnly,\n readonly: specReadOnly,\n required = false,\n label,\n autoResize = false,\n rows = 3,\n className,\n id,\n ...rest\n}: AtlTextareaProps) {\n const readOnly = reactReadOnly ?? specReadOnly ?? false;\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n // useId(), not a slug derived from the label text: two textareas with the\n // same label used to collide on one id and break the for/id association\n // (same bug as AtlInput's — see ADR-0091).\n const generatedId = useId();\n const inputId = id || (label ? `textarea-${generatedId}` : undefined);\n const classes = [\n 'atl-textarea',\n invalid && 'is-invalid',\n disabled && 'is-disabled',\n readOnly && 'is-readonly',\n autoResize && 'is-auto-resize',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n useEffect(() => {\n if (autoResize && textareaRef.current) {\n const el = textareaRef.current;\n el.style.height = 'auto';\n el.style.height = `${el.scrollHeight}px`;\n }\n }, [value, autoResize]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange?.(e);\n onValueChange?.(e.target.value);\n if (autoResize && textareaRef.current) {\n textareaRef.current.style.height = 'auto';\n textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`;\n }\n };\n\n const errorId = inputId ? `${inputId}-errors` : undefined;\n\n return (\n <div className={classes}>\n {label && <label htmlFor={inputId}>{label}</label>}\n <div className=\"textarea-field\">\n <textarea\n ref={textareaRef}\n id={inputId}\n value={value}\n onChange={handleChange}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n rows={rows}\n aria-invalid={invalid || undefined}\n aria-required={required || undefined}\n aria-describedby={errors.length > 0 ? errorId : undefined}\n {...rest}\n />\n {invalid && <AtlIcon name=\"danger\" size=\"sm\" className=\"invalid-icon\" />}\n </div>\n {errors.length > 0 && (\n <div className=\"errors\" id={errorId} aria-live=\"polite\">\n {errors.map((err, i) => (\n <p key={i} className=\"error-message\">\n {err}\n </p>\n ))}\n </div>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"atl-textarea.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/textarea/atl-textarea.tsx"],"names":[],"mappings":"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","sourcesContent":["import { TextareaHTMLAttributes, useRef, useEffect, useId } from 'react';\nimport type { AtlTextareaSpec } from '../spec';\nimport './atl-textarea.css';\nimport { AtlIcon } from '../icon/atl-icon';\n\n/**\n * Properties for the AtlTextarea component.\n */\nexport interface AtlTextareaProps\n extends\n Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'readOnly'>,\n AtlTextareaSpec {\n /**\n * Current value of the textarea.\n */\n value?: string;\n /**\n * Whether the textarea is read-only.\n */\n readOnly?: boolean;\n /**\n * Callback fired when the value changes.\n */\n onValueChange?: (value: string) => void;\n /**\n * List of error messages to display.\n */\n errors?: string[];\n /**\n * Label text for the textarea.\n */\n label?: string;\n}\n\n/**\n * A multi-line text input component that supports automatic resizing and validation states.\n */\nexport function AtlTextarea({\n value,\n onChange,\n onValueChange,\n invalid = false,\n errors = [],\n disabled = false,\n readOnly: reactReadOnly,\n readonly: specReadOnly,\n required = false,\n label,\n autoResize = false,\n rows = 3,\n className,\n id,\n ...rest\n}: AtlTextareaProps) {\n const readOnly = reactReadOnly ?? specReadOnly ?? false;\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n // useId(), not a slug derived from the label text: two textareas with the\n // same label used to collide on one id and break the for/id association\n // (same bug as AtlInput's — see ADR-0091).\n const generatedId = useId();\n const inputId = id || (label ? `textarea-${generatedId}` : undefined);\n const classes = [\n 'atl-textarea',\n invalid && 'is-invalid',\n disabled && 'is-disabled',\n readOnly && 'is-readonly',\n autoResize && 'is-auto-resize',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n useEffect(() => {\n if (autoResize && textareaRef.current) {\n const el = textareaRef.current;\n el.style.height = 'auto';\n el.style.height = `${el.scrollHeight}px`;\n }\n }, [value, autoResize]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange?.(e);\n onValueChange?.(e.target.value);\n if (autoResize && textareaRef.current) {\n textareaRef.current.style.height = 'auto';\n textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`;\n }\n };\n\n const errorId = inputId ? `${inputId}-errors` : undefined;\n\n return (\n <div className={classes}>\n {label && <label htmlFor={inputId}>{label}</label>}\n <div className=\"textarea-field\">\n <textarea\n ref={textareaRef}\n id={inputId}\n value={value}\n onChange={handleChange}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n rows={rows}\n aria-invalid={invalid || undefined}\n aria-required={required || undefined}\n aria-describedby={errors.length > 0 ? errorId : undefined}\n {...rest}\n />\n {invalid && (\n <AtlIcon name=\"danger\" size=\"sm\" className=\"invalid-icon\" />\n )}\n </div>\n {errors.length > 0 && (\n <div className=\"errors\" id={errorId} aria-live=\"polite\">\n {errors.map((err, i) => (\n <p key={i} className=\"error-message\">\n {err}\n </p>\n ))}\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -3,14 +3,8 @@
3
3
  * same file as the sizes it governs and no consuming app has to supply one.
4
4
  * Gated by check:box-sizing; the resulting boxes are measured by check:geometry.
5
5
  * See ADR-0043. */
6
- :is(
7
- .atl-toast,
8
- .atl-toast-container
9
- ),
10
- :is(
11
- .atl-toast,
12
- .atl-toast-container
13
- ) * {
6
+ :is(.atl-toast, .atl-toast-container),
7
+ :is(.atl-toast, .atl-toast-container) * {
14
8
  box-sizing: border-box;
15
9
  }
16
10
 
@@ -83,22 +77,38 @@
83
77
 
84
78
  .atl-toast.variant-success {
85
79
  border-left-color: var(--ui-color-success);
86
- background-color: color-mix(in srgb, var(--ui-color-success) 8%, var(--ui-color-surface-raised, var(--ui-color-surface)));
80
+ background-color: color-mix(
81
+ in srgb,
82
+ var(--ui-color-success) 8%,
83
+ var(--ui-color-surface-raised, var(--ui-color-surface))
84
+ );
87
85
  }
88
86
 
89
87
  .atl-toast.variant-warning {
90
88
  border-left-color: var(--ui-color-warning);
91
- background-color: color-mix(in srgb, var(--ui-color-warning) 8%, var(--ui-color-surface-raised, var(--ui-color-surface)));
89
+ background-color: color-mix(
90
+ in srgb,
91
+ var(--ui-color-warning) 8%,
92
+ var(--ui-color-surface-raised, var(--ui-color-surface))
93
+ );
92
94
  }
93
95
 
94
96
  .atl-toast.variant-danger {
95
97
  border-left-color: var(--ui-color-danger);
96
- background-color: color-mix(in srgb, var(--ui-color-danger) 8%, var(--ui-color-surface-raised, var(--ui-color-surface)));
98
+ background-color: color-mix(
99
+ in srgb,
100
+ var(--ui-color-danger) 8%,
101
+ var(--ui-color-surface-raised, var(--ui-color-surface))
102
+ );
97
103
  }
98
104
 
99
105
  .atl-toast.variant-info {
100
106
  border-left-color: var(--ui-color-info);
101
- background-color: color-mix(in srgb, var(--ui-color-info) 8%, var(--ui-color-surface-raised, var(--ui-color-surface)));
107
+ background-color: color-mix(
108
+ in srgb,
109
+ var(--ui-color-info) 8%,
110
+ var(--ui-color-surface-raised, var(--ui-color-surface))
111
+ );
102
112
  }
103
113
 
104
114
  /* ── Message ── */
@@ -121,7 +131,9 @@
121
131
  cursor: pointer;
122
132
  color: var(--ui-color-text-muted, currentColor);
123
133
  opacity: 0.7;
124
- transition: opacity var(--ui-transition-fast, 150ms), background-color var(--ui-transition-fast, 150ms);
134
+ transition:
135
+ opacity var(--ui-transition-fast, 150ms),
136
+ background-color var(--ui-transition-fast, 150ms);
125
137
  line-height: 1;
126
138
  }
127
139
 
@@ -33,7 +33,7 @@ export interface AtlToastContainerProps {
33
33
  * Renders the toast stack at a fixed viewport position.
34
34
  * Must be placed inside AtlToastProvider.
35
35
  */
36
- export declare function AtlToastContainer({ position }: AtlToastContainerProps): import("react").JSX.Element;
36
+ export declare function AtlToastContainer({ position, }: AtlToastContainerProps): import("react").JSX.Element;
37
37
  /**
38
38
  * Properties for the AtlToastItem component.
39
39
  */
@@ -1 +1 @@
1
- {"version":3,"file":"atl-toast.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/toast/atl-toast.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,SAAS,EACV,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,eAAe,EACf,yBAAyB,EAC1B,MAAM,SAAS,CAAC;AACjB,OAAO,iBAAiB,CAAC;AAGzB;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,QAAQ,CAAC,eAAe,CAAC;IAC1D,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAgBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BA6CrE;AAED,mFAAmF;AACnF,wBAAgB,WAAW;oBAhET,MAAM,YAAY,eAAe,KAAK,MAAM;kBAC9C,MAAM,KAAK,IAAI;iBAChB,IAAI;EAiElB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,QAAQ,CAAC,EAAE,yBAAyB,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,QAAyB,EAAE,EAAE,sBAAsB,+BAWtF;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,IAAI,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,iBAAiB,+BAiBlE"}
1
+ {"version":3,"file":"atl-toast.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/toast/atl-toast.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,SAAS,EACV,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,iBAAiB,CAAC;AAGzB;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,QAAQ,CAAC,eAAe,CAAC;IAC1D,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAgBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BA+CrE;AAED,mFAAmF;AACnF,wBAAgB,WAAW;oBAlET,MAAM,YAAY,eAAe,KAAK,MAAM;kBAC9C,MAAM,KAAK,IAAI;iBAChB,IAAI;EAmElB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,QAAQ,CAAC,EAAE,yBAAyB,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,QAAyB,GAC1B,EAAE,sBAAsB,+BAWxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,IAAI,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,iBAAiB,+BAiBlE"}
@@ -56,7 +56,7 @@ export function useAtlToast() {
56
56
  * Renders the toast stack at a fixed viewport position.
57
57
  * Must be placed inside AtlToastProvider.
58
58
  */
59
- export function AtlToastContainer({ position = 'bottom-right' }) {
59
+ export function AtlToastContainer({ position = 'bottom-right', }) {
60
60
  const { toasts, dismiss } = useContext(ToastContext);
61
61
  const classes = `atl-toast-container position-${position}`;
62
62
  return (_jsx("div", { className: classes, "aria-live": "polite", role: "status", children: toasts.map((toast) => (_jsx(AtlToastItem, { data: toast, onDismiss: dismiss }, toast.id))) }));
@@ -1 +1 @@
1
- {"version":3,"file":"atl-toast.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/toast/atl-toast.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n createContext,\n useContext,\n useState,\n useCallback,\n useRef,\n ReactNode,\n} from 'react';\nimport type {\n AtlToastOptions,\n AtlToastContainerPosition,\n} from '../spec';\nimport './atl-toast.css';\nimport { AtlIcon } from '../icon/atl-icon';\n\n/**\n * Internal data structure for a toast message.\n */\nexport interface ToastData extends Required<AtlToastOptions> {\n id: string;\n message: string;\n}\n\ninterface ToastContextValue {\n show: (message: string, options?: AtlToastOptions) => string;\n dismiss: (id: string) => void;\n clear: () => void;\n toasts: ToastData[];\n}\n\nconst ToastContext = createContext<ToastContextValue>({\n show: () => '',\n dismiss: () => undefined,\n clear: () => undefined,\n toasts: [],\n});\n\n/**\n * Context provider that manages the toast state.\n */\nexport function AtlToastProvider({ children }: { children: ReactNode }) {\n const [toasts, setToasts] = useState<ToastData[]>([]);\n const timersRef = useRef<Map<string, ReturnType<typeof setTimeout>>>(new Map());\n const toastId = useRef(0);\n\n const dismiss = useCallback((id: string) => {\n const timer = timersRef.current.get(id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(id);\n }\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const show = useCallback(\n (message: string, options: AtlToastOptions = {}): string => {\n const id = `atl-toast-${toastId.current++}`;\n const toast: ToastData = {\n id,\n message,\n variant: options.variant ?? 'default',\n duration: options.duration ?? 5000,\n dismissible: options.dismissible ?? true,\n };\n setToasts((prev) => [...prev, toast]);\n if (toast.duration > 0) {\n const timer = setTimeout(() => dismiss(id), toast.duration);\n timersRef.current.set(id, timer);\n }\n return id;\n },\n [dismiss]\n );\n\n const clear = useCallback(() => {\n for (const timer of timersRef.current.values()) clearTimeout(timer);\n timersRef.current.clear();\n setToasts([]);\n }, []);\n\n return (\n <ToastContext.Provider value={{ show, dismiss, clear, toasts }}>\n {children}\n </ToastContext.Provider>\n );\n}\n\n/** Access toast actions: show, dismiss, clear. Must be inside AtlToastProvider. */\nexport function useAtlToast() {\n const ctx = useContext(ToastContext);\n return { show: ctx.show, dismiss: ctx.dismiss, clear: ctx.clear };\n}\n\n/**\n * Properties for the AtlToastContainer component.\n */\nexport interface AtlToastContainerProps {\n /**\n * Position of the toast container in the viewport.\n */\n position?: AtlToastContainerPosition;\n}\n\n/**\n * Renders the toast stack at a fixed viewport position.\n * Must be placed inside AtlToastProvider.\n */\nexport function AtlToastContainer({ position = 'bottom-right' }: AtlToastContainerProps) {\n const { toasts, dismiss } = useContext(ToastContext);\n const classes = `atl-toast-container position-${position}`;\n\n return (\n <div className={classes} aria-live=\"polite\" role=\"status\">\n {toasts.map((toast) => (\n <AtlToastItem key={toast.id} data={toast} onDismiss={dismiss} />\n ))}\n </div>\n );\n}\n\n/**\n * Properties for the AtlToastItem component.\n */\nexport interface AtlToastItemProps {\n /**\n * The toast data to display.\n */\n data: ToastData;\n /**\n * Callback fired when the toast is dismissed.\n */\n onDismiss: (id: string) => void;\n}\n\n/**\n * An individual toast notification item.\n */\nexport function AtlToastItem({ data, onDismiss }: AtlToastItemProps) {\n const classes = `atl-toast variant-${data.variant}`;\n return (\n <div className={classes} role=\"status\">\n <span className=\"message\">{data.message}</span>\n {data.dismissible && (\n <button\n className=\"dismiss\"\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={() => onDismiss(data.id)}\n >\n <AtlIcon name=\"close\" size=\"sm\" />\n </button>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"atl-toast.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/toast/atl-toast.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n createContext,\n useContext,\n useState,\n useCallback,\n useRef,\n ReactNode,\n} from 'react';\nimport type { AtlToastOptions, AtlToastContainerPosition } from '../spec';\nimport './atl-toast.css';\nimport { AtlIcon } from '../icon/atl-icon';\n\n/**\n * Internal data structure for a toast message.\n */\nexport interface ToastData extends Required<AtlToastOptions> {\n id: string;\n message: string;\n}\n\ninterface ToastContextValue {\n show: (message: string, options?: AtlToastOptions) => string;\n dismiss: (id: string) => void;\n clear: () => void;\n toasts: ToastData[];\n}\n\nconst ToastContext = createContext<ToastContextValue>({\n show: () => '',\n dismiss: () => undefined,\n clear: () => undefined,\n toasts: [],\n});\n\n/**\n * Context provider that manages the toast state.\n */\nexport function AtlToastProvider({ children }: { children: ReactNode }) {\n const [toasts, setToasts] = useState<ToastData[]>([]);\n const timersRef = useRef<Map<string, ReturnType<typeof setTimeout>>>(\n new Map(),\n );\n const toastId = useRef(0);\n\n const dismiss = useCallback((id: string) => {\n const timer = timersRef.current.get(id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(id);\n }\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const show = useCallback(\n (message: string, options: AtlToastOptions = {}): string => {\n const id = `atl-toast-${toastId.current++}`;\n const toast: ToastData = {\n id,\n message,\n variant: options.variant ?? 'default',\n duration: options.duration ?? 5000,\n dismissible: options.dismissible ?? true,\n };\n setToasts((prev) => [...prev, toast]);\n if (toast.duration > 0) {\n const timer = setTimeout(() => dismiss(id), toast.duration);\n timersRef.current.set(id, timer);\n }\n return id;\n },\n [dismiss],\n );\n\n const clear = useCallback(() => {\n for (const timer of timersRef.current.values()) clearTimeout(timer);\n timersRef.current.clear();\n setToasts([]);\n }, []);\n\n return (\n <ToastContext.Provider value={{ show, dismiss, clear, toasts }}>\n {children}\n </ToastContext.Provider>\n );\n}\n\n/** Access toast actions: show, dismiss, clear. Must be inside AtlToastProvider. */\nexport function useAtlToast() {\n const ctx = useContext(ToastContext);\n return { show: ctx.show, dismiss: ctx.dismiss, clear: ctx.clear };\n}\n\n/**\n * Properties for the AtlToastContainer component.\n */\nexport interface AtlToastContainerProps {\n /**\n * Position of the toast container in the viewport.\n */\n position?: AtlToastContainerPosition;\n}\n\n/**\n * Renders the toast stack at a fixed viewport position.\n * Must be placed inside AtlToastProvider.\n */\nexport function AtlToastContainer({\n position = 'bottom-right',\n}: AtlToastContainerProps) {\n const { toasts, dismiss } = useContext(ToastContext);\n const classes = `atl-toast-container position-${position}`;\n\n return (\n <div className={classes} aria-live=\"polite\" role=\"status\">\n {toasts.map((toast) => (\n <AtlToastItem key={toast.id} data={toast} onDismiss={dismiss} />\n ))}\n </div>\n );\n}\n\n/**\n * Properties for the AtlToastItem component.\n */\nexport interface AtlToastItemProps {\n /**\n * The toast data to display.\n */\n data: ToastData;\n /**\n * Callback fired when the toast is dismissed.\n */\n onDismiss: (id: string) => void;\n}\n\n/**\n * An individual toast notification item.\n */\nexport function AtlToastItem({ data, onDismiss }: AtlToastItemProps) {\n const classes = `atl-toast variant-${data.variant}`;\n return (\n <div className={classes} role=\"status\">\n <span className=\"message\">{data.message}</span>\n {data.dismissible && (\n <button\n className=\"dismiss\"\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={() => onDismiss(data.id)}\n >\n <AtlIcon name=\"close\" size=\"sm\" />\n </button>\n )}\n </div>\n );\n}\n"]}
@@ -57,9 +57,10 @@
57
57
  border-radius: var(--ui-radius-full);
58
58
  border: var(--ui-border-width) solid var(--ui-color-border-strong);
59
59
  background-color: var(--ui-color-input-bg);
60
- transition: background-color var(--ui-transition-fast),
61
- border-color var(--ui-transition-fast),
62
- box-shadow var(--ui-transition-fast);
60
+ transition:
61
+ background-color var(--ui-transition-fast),
62
+ border-color var(--ui-transition-fast),
63
+ box-shadow var(--ui-transition-fast);
63
64
  cursor: pointer;
64
65
  }
65
66
 
@@ -72,8 +73,9 @@
72
73
  border-radius: var(--ui-radius-full);
73
74
  background-color: var(--ui-color-border-strong);
74
75
  box-shadow: var(--ui-shadow-xs);
75
- transition: transform var(--ui-transition-normal) var(--ui-ease-out),
76
- background-color var(--ui-transition-fast);
76
+ transition:
77
+ transform var(--ui-transition-normal) var(--ui-ease-out),
78
+ background-color var(--ui-transition-fast);
77
79
  }
78
80
 
79
81
  /* Hover state */
@@ -1 +1 @@
1
- {"version":3,"file":"atl-toggle.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/toggle/atl-toggle.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAS,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,kBAAkB,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,EACzG,aAAa;IACf;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,EACxB,OAAe,EACf,eAAe,EACf,OAAe,EACf,MAAW,EACX,QAAgB,EAChB,QAAgB,EAChB,QAAQ,EACR,SAAS,EACT,EAAE,EACF,IAAI,EACJ,GAAG,IAAI,EACR,EAAE,cAAc,+BAiDhB"}
1
+ {"version":3,"file":"atl-toggle.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/toggle/atl-toggle.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAS,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,kBAAkB,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,cACf,SACE,IAAI,CACF,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CACvD,EACD,aAAa;IACf;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,EACxB,OAAe,EACf,eAAe,EACf,OAAe,EACf,MAAW,EACX,QAAgB,EAChB,QAAgB,EAChB,QAAQ,EACR,SAAS,EACT,EAAE,EACF,IAAI,EACJ,GAAG,IAAI,EACR,EAAE,cAAc,+BAiDhB"}