sherick-ui 2.1.1 → 2.3.0

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 (139) hide show
  1. package/README.md +24 -1
  2. package/dist/cjs/components/Badge.cjs +1 -1
  3. package/dist/cjs/components/Badge.cjs.map +1 -1
  4. package/dist/cjs/components/Button.cjs +11 -2
  5. package/dist/cjs/components/Button.cjs.map +1 -1
  6. package/dist/cjs/components/Calendar.cjs +2 -2
  7. package/dist/cjs/components/Calendar.cjs.map +1 -1
  8. package/dist/cjs/components/Card.cjs +3 -2
  9. package/dist/cjs/components/Card.cjs.map +1 -1
  10. package/dist/cjs/components/Chip.cjs +3 -3
  11. package/dist/cjs/components/Chip.cjs.map +1 -1
  12. package/dist/cjs/components/Combobox.cjs +1 -1
  13. package/dist/cjs/components/Combobox.cjs.map +1 -1
  14. package/dist/cjs/components/Command.cjs +2 -2
  15. package/dist/cjs/components/Command.cjs.map +1 -1
  16. package/dist/cjs/components/CommandPalette.cjs +1 -1
  17. package/dist/cjs/components/CommandPalette.cjs.map +1 -1
  18. package/dist/cjs/components/DateRangePicker.cjs +1 -1
  19. package/dist/cjs/components/DateRangePicker.cjs.map +1 -1
  20. package/dist/cjs/components/DialogHeader.cjs +1 -1
  21. package/dist/cjs/components/DialogHeader.cjs.map +1 -1
  22. package/dist/cjs/components/Drawer.cjs +1 -1
  23. package/dist/cjs/components/Drawer.cjs.map +1 -1
  24. package/dist/cjs/components/Field.cjs +1 -1
  25. package/dist/cjs/components/Field.cjs.map +1 -1
  26. package/dist/cjs/components/FileUpload.cjs +2 -2
  27. package/dist/cjs/components/FileUpload.cjs.map +1 -1
  28. package/dist/cjs/components/IconButton.cjs +1 -1
  29. package/dist/cjs/components/IconButton.cjs.map +1 -1
  30. package/dist/cjs/components/Input.cjs +1 -1
  31. package/dist/cjs/components/Input.cjs.map +1 -1
  32. package/dist/cjs/components/NavItem.cjs +3 -3
  33. package/dist/cjs/components/NavItem.cjs.map +1 -1
  34. package/dist/cjs/components/NumberField.cjs +1 -1
  35. package/dist/cjs/components/NumberField.cjs.map +1 -1
  36. package/dist/cjs/components/Pagination.cjs +1 -1
  37. package/dist/cjs/components/Pagination.cjs.map +1 -1
  38. package/dist/cjs/components/Progress.cjs +7 -4
  39. package/dist/cjs/components/Progress.cjs.map +1 -1
  40. package/dist/cjs/components/RadioGroup.cjs +3 -2
  41. package/dist/cjs/components/RadioGroup.cjs.map +1 -1
  42. package/dist/cjs/components/Select.cjs +1 -1
  43. package/dist/cjs/components/Select.cjs.map +1 -1
  44. package/dist/cjs/components/Slider.cjs +1 -1
  45. package/dist/cjs/components/Slider.cjs.map +1 -1
  46. package/dist/cjs/components/Stepper.cjs +5 -1
  47. package/dist/cjs/components/Stepper.cjs.map +1 -1
  48. package/dist/cjs/components/Table.cjs +10 -2
  49. package/dist/cjs/components/Table.cjs.map +1 -1
  50. package/dist/cjs/components/Tabs.cjs +1 -1
  51. package/dist/cjs/components/Tabs.cjs.map +1 -1
  52. package/dist/cjs/components/Textarea.cjs +1 -1
  53. package/dist/cjs/components/Textarea.cjs.map +1 -1
  54. package/dist/cjs/components/Toast.cjs +5 -2
  55. package/dist/cjs/components/Toast.cjs.map +1 -1
  56. package/dist/cjs/components/Tooltip.cjs +1 -1
  57. package/dist/cjs/components/Tooltip.cjs.map +1 -1
  58. package/dist/cjs/components/TreeView.cjs +43 -10
  59. package/dist/cjs/components/TreeView.cjs.map +1 -1
  60. package/dist/cjs/components/ui.common.cjs +109 -44
  61. package/dist/cjs/components/ui.common.cjs.map +1 -1
  62. package/dist/cjs/components/ui.motion.cjs +37 -13
  63. package/dist/cjs/components/ui.motion.cjs.map +1 -1
  64. package/dist/cjs/dev.cjs +10 -0
  65. package/dist/cjs/dev.cjs.map +1 -1
  66. package/dist/esm/components/Badge.js +2 -2
  67. package/dist/esm/components/Badge.js.map +1 -1
  68. package/dist/esm/components/Button.js +12 -3
  69. package/dist/esm/components/Button.js.map +1 -1
  70. package/dist/esm/components/Calendar.js +3 -3
  71. package/dist/esm/components/Calendar.js.map +1 -1
  72. package/dist/esm/components/Card.js +4 -3
  73. package/dist/esm/components/Card.js.map +1 -1
  74. package/dist/esm/components/Chip.js +3 -3
  75. package/dist/esm/components/Chip.js.map +1 -1
  76. package/dist/esm/components/CodeBlock.js +5 -4
  77. package/dist/esm/components/CodeBlock.js.map +1 -1
  78. package/dist/esm/components/Combobox.js +2 -2
  79. package/dist/esm/components/Combobox.js.map +1 -1
  80. package/dist/esm/components/Command.js +3 -3
  81. package/dist/esm/components/Command.js.map +1 -1
  82. package/dist/esm/components/CommandPalette.js +2 -2
  83. package/dist/esm/components/CommandPalette.js.map +1 -1
  84. package/dist/esm/components/DateRangePicker.js +2 -2
  85. package/dist/esm/components/DateRangePicker.js.map +1 -1
  86. package/dist/esm/components/DialogHeader.js +2 -2
  87. package/dist/esm/components/DialogHeader.js.map +1 -1
  88. package/dist/esm/components/Drawer.js +2 -2
  89. package/dist/esm/components/Drawer.js.map +1 -1
  90. package/dist/esm/components/Field.js +2 -2
  91. package/dist/esm/components/Field.js.map +1 -1
  92. package/dist/esm/components/FileUpload.js +3 -3
  93. package/dist/esm/components/FileUpload.js.map +1 -1
  94. package/dist/esm/components/IconButton.js +1 -1
  95. package/dist/esm/components/IconButton.js.map +1 -1
  96. package/dist/esm/components/Input.js +2 -2
  97. package/dist/esm/components/Input.js.map +1 -1
  98. package/dist/esm/components/Markdown.js +3 -2
  99. package/dist/esm/components/Markdown.js.map +1 -1
  100. package/dist/esm/components/NavItem.js +5 -5
  101. package/dist/esm/components/NavItem.js.map +1 -1
  102. package/dist/esm/components/NumberField.js +2 -2
  103. package/dist/esm/components/NumberField.js.map +1 -1
  104. package/dist/esm/components/Pagination.js +2 -2
  105. package/dist/esm/components/Pagination.js.map +1 -1
  106. package/dist/esm/components/Progress.js +8 -5
  107. package/dist/esm/components/Progress.js.map +1 -1
  108. package/dist/esm/components/RadioGroup.js +5 -4
  109. package/dist/esm/components/RadioGroup.js.map +1 -1
  110. package/dist/esm/components/Select.js +2 -2
  111. package/dist/esm/components/Select.js.map +1 -1
  112. package/dist/esm/components/Slider.js +1 -1
  113. package/dist/esm/components/Slider.js.map +1 -1
  114. package/dist/esm/components/Stepper.js +6 -2
  115. package/dist/esm/components/Stepper.js.map +1 -1
  116. package/dist/esm/components/Table.js +11 -3
  117. package/dist/esm/components/Table.js.map +1 -1
  118. package/dist/esm/components/Tabs.js +2 -2
  119. package/dist/esm/components/Tabs.js.map +1 -1
  120. package/dist/esm/components/Textarea.js +2 -2
  121. package/dist/esm/components/Textarea.js.map +1 -1
  122. package/dist/esm/components/Toast.js +6 -3
  123. package/dist/esm/components/Toast.js.map +1 -1
  124. package/dist/esm/components/Tooltip.js +2 -2
  125. package/dist/esm/components/Tooltip.js.map +1 -1
  126. package/dist/esm/components/TreeView.js +45 -12
  127. package/dist/esm/components/TreeView.js.map +1 -1
  128. package/dist/esm/components/ui.common.js +105 -46
  129. package/dist/esm/components/ui.common.js.map +1 -1
  130. package/dist/esm/components/ui.motion.js +34 -14
  131. package/dist/esm/components/ui.motion.js.map +1 -1
  132. package/dist/esm/dev.js +2 -2
  133. package/dist/styles.css +173 -61
  134. package/dist/theme.css +33 -4
  135. package/dist/types/dev.d.cts +56 -35
  136. package/dist/types/dev.d.ts +56 -35
  137. package/dist/types/index.d.cts +15 -3
  138. package/dist/types/index.d.ts +15 -3
  139. package/package.json +1 -1
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  A React 18/19 component library with soft tonal surfaces, deliberate shape contrast
4
4
  and restrained motion. `2.0.0` established the stable line; `1.x` is frozen.
5
- This package source is `2.1.0`; verified `main` stages new versions via npm trusted
5
+ This package source is `2.3.0`; verified `main` stages new versions via npm trusted
6
6
  publishing for maintainer approval. Check the installed version for availability.
7
7
 
8
8
  ## Install and style
@@ -59,6 +59,29 @@ Command/CommandPalette, Pagination/Breadcrumb, FileUpload, Stepper and TreeView
59
59
  the same root barrel. Its [component contracts](https://github.com/Sherick16/sherick-ui/blob/main/docs/V2_1_COMPONENTS.md)
60
60
  use civil `YYYY-MM-DD` dates and `File[]` selections; FileUpload does not upload files.
61
61
 
62
+ ## Table and surface choices (from 2.2.0)
63
+
64
+ `Table` keeps string headers valid and also accepts descriptors. Its scroll wrapper is keyboard focusable, including when every cell contains passive text:
65
+
66
+ ```tsx
67
+ const columns = [
68
+ { id: "name", label: "Name", className: "name-column" },
69
+ { id: "amount", label: "Amount", className: "amount-column" },
70
+ ];
71
+ <Table headers={columns} rows={rows} className="table-surface" tableClassName="invoice-table" />
72
+ ```
73
+
74
+ A descriptor's class reaches both header and body cells. Use ordinary CSS for widths,
75
+ alignment and tabular figures, and reuse the columns for placeholder rows. `className`
76
+ remains on the scroll wrapper; `tableClassName` reaches the native table. Sorting,
77
+ filtering, row content and data ownership remain yours. See the
78
+ [resource-list example](https://github.com/Sherick16/sherick-ui/tree/main/examples/resources).
79
+
80
+ `RadioGroup appearance="surface"` presents its existing radio rows as selectable surfaces.
81
+ Use `options[].label` for rich, wrapping text, badges and non-interactive hints. It retains
82
+ the same single-selection, keyboard and form contract; omit `appearance` for the original
83
+ plain rows. Do not put buttons or links inside a radio's label.
84
+
62
85
  ## Themes and direction
63
86
 
64
87
  With no root `data-sherick-theme`, the library follows `prefers-color-scheme`. Set
@@ -7,7 +7,7 @@ var utils = require('../libs/utils.cjs');
7
7
  var ui_common = require('./ui.common.cjs');
8
8
 
9
9
  const Badge = ({ children, variant = "primary", icon, className, ...props }) => {
10
- return (jsxRuntime.jsxs("span", { ...props, className: utils.cn("inline-flex min-h-7 min-w-0 max-w-full items-center justify-center gap-1.5 px-3 py-1 text-xs font-semibold", ui_common.shape.pill, ui_common.tone.soft[variant], ui_common.text.high, className), children: [icon && (jsxRuntime.jsx("span", { className: utils.cn("inline-flex size-3.5 shrink-0 items-center justify-center [&>svg]:size-3.5", ui_common.tone.text[variant]), "aria-hidden": "true", children: icon })), jsxRuntime.jsx("span", { className: utils.cn("min-w-0 truncate"), children: children })] }));
10
+ return (jsxRuntime.jsxs("span", { ...props, className: utils.cn("inline-flex min-h-7 min-w-0 max-w-full items-center justify-center gap-1.5 px-3 py-1 font-semibold", ui_common.type.caption, ui_common.shape.pill, ui_common.tone.soft[variant], ui_common.text.high, className), children: [icon && (jsxRuntime.jsx("span", { className: utils.cn("inline-flex size-3.5 shrink-0 items-center justify-center [&>svg]:size-3.5", ui_common.tone.text[variant]), "aria-hidden": "true", children: icon })), jsxRuntime.jsx("span", { className: utils.cn("min-w-0 truncate"), children: children })] }));
11
11
  };
12
12
 
13
13
  exports.default = Badge;
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.cjs","sources":["../../../src/components/Badge.tsx"],"sourcesContent":["import React, { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { shape, text, tone } from \"./ui.common\";\nimport { Variant } from \"./ui.types\";\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n children: ReactNode;\n variant?: Variant;\n icon?: ReactNode;\n}\n\nconst Badge = ({\n children,\n variant = \"primary\",\n icon,\n className,\n ...props\n}: BadgeProps) => {\n return (\n <span\n {...props}\n className={cn(\n \"inline-flex min-h-7 min-w-0 max-w-full items-center justify-center gap-1.5 px-3 py-1 text-xs font-semibold\",\n shape.pill,\n tone.soft[variant],\n text.high,\n className\n )}\n >\n {/* A badge gives its leading mark one predictable slot: 14px, held at that size whatever artwork\n a caller hands in, with the box — not the artwork's own whitespace — aligned to the label. */}\n {icon && (\n <span className={cn(\"inline-flex size-3.5 shrink-0 items-center justify-center [&>svg]:size-3.5\", tone.text[variant])} aria-hidden=\"true\">\n {icon}\n </span>\n )}\n <span className={cn(\"min-w-0 truncate\")}>{children}</span>\n </span>\n );\n};\n\nexport default Badge;\n"],"names":["_jsxs","cn","shape","tone","text","_jsx"],"mappings":";;;;;;;;AAWA,MAAM,KAAK,GAAG,CAAC,EACb,QAAQ,EACR,OAAO,GAAG,SAAS,EACnB,IAAI,EACJ,SAAS,EACT,GAAG,KAAK,EACG,KAAI;AACf,IAAA,QACEA,eAAA,CAAA,MAAA,EAAA,EAAA,GACM,KAAK,EACT,SAAS,EAAEC,QAAE,CACX,4GAA4G,EAC5GC,eAAK,CAAC,IAAI,EACVC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAClBC,cAAI,CAAC,IAAI,EACT,SAAS,CACV,EAAA,QAAA,EAAA,CAIA,IAAI,KACHC,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAEJ,QAAE,CAAC,4EAA4E,EAAEE,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAA,aAAA,EAAc,MAAM,EAAA,QAAA,EACtI,IAAI,EAAA,CACA,CACR,EACDE,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAEJ,QAAE,CAAC,kBAAkB,CAAC,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAQ,CAAA,EAAA,CACrD;AAEX;;"}
1
+ {"version":3,"file":"Badge.cjs","sources":["../../../src/components/Badge.tsx"],"sourcesContent":["import React, { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { shape, text, tone, type } from \"./ui.common\";\nimport { Variant } from \"./ui.types\";\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n children: ReactNode;\n variant?: Variant;\n icon?: ReactNode;\n}\n\nconst Badge = ({\n children,\n variant = \"primary\",\n icon,\n className,\n ...props\n}: BadgeProps) => {\n return (\n <span\n {...props}\n className={cn(\n \"inline-flex min-h-7 min-w-0 max-w-full items-center justify-center gap-1.5 px-3 py-1 font-semibold\",\n type.caption,\n shape.pill,\n tone.soft[variant],\n text.high,\n className\n )}\n >\n {/* A badge gives its leading mark one predictable slot: 14px, held at that size whatever artwork\n a caller hands in, with the box — not the artwork's own whitespace — aligned to the label. */}\n {icon && (\n <span className={cn(\"inline-flex size-3.5 shrink-0 items-center justify-center [&>svg]:size-3.5\", tone.text[variant])} aria-hidden=\"true\">\n {icon}\n </span>\n )}\n <span className={cn(\"min-w-0 truncate\")}>{children}</span>\n </span>\n );\n};\n\nexport default Badge;\n"],"names":["_jsxs","cn","type","shape","tone","text","_jsx"],"mappings":";;;;;;;;AAWA,MAAM,KAAK,GAAG,CAAC,EACb,QAAQ,EACR,OAAO,GAAG,SAAS,EACnB,IAAI,EACJ,SAAS,EACT,GAAG,KAAK,EACG,KAAI;AACf,IAAA,QACEA,eAAA,CAAA,MAAA,EAAA,EAAA,GACM,KAAK,EACT,SAAS,EAAEC,QAAE,CACX,oGAAoG,EACpGC,cAAI,CAAC,OAAO,EACZC,eAAK,CAAC,IAAI,EACVC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAClBC,cAAI,CAAC,IAAI,EACT,SAAS,CACV,aAIA,IAAI,KACHC,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAEL,QAAE,CAAC,4EAA4E,EAAEG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,iBAAc,MAAM,EAAA,QAAA,EACtI,IAAI,EAAA,CACA,CACR,EACDE,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAEL,QAAE,CAAC,kBAAkB,CAAC,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAQ,CAAA,EAAA,CACrD;AAEX;;"}
@@ -11,6 +11,12 @@ var ui_common = require('./ui.common.cjs');
11
11
  var ui_motion = require('./ui.motion.cjs');
12
12
  var Spinner = require('./Spinner.cjs');
13
13
 
14
+ /* The mark follows the type step beside it (§10): a compact label takes the compact slot. */
15
+ const slotMap = {
16
+ sm: ui_common.iconSlot.compact,
17
+ md: ui_common.iconSlot.normal,
18
+ lg: ui_common.iconSlot.prominent,
19
+ };
14
20
  const sizeMap = {
15
21
  sm: `${ui_common.density.compact} px-4 py-2`,
16
22
  md: `${ui_common.density.normal} px-6 py-3`,
@@ -18,8 +24,11 @@ const sizeMap = {
18
24
  };
19
25
  const Button = React.forwardRef(({ children, variant = "primary", appearance = "tonal", size = "md", icon, className, loading = false, disabled, type = "button", ...props }, ref) => {
20
26
  const isDisabled = disabled || loading;
21
- const isTactile = appearance === "tonal" && !isDisabled;
22
- return (jsxRuntime.jsxs(button.Button, { ...props, render: jsxRuntime.jsx("button", { ref: ref }), type: type, disabled: isDisabled, "aria-busy": loading || undefined, className: utils.cn("relative inline-flex min-w-0 max-w-full items-center justify-center gap-2 font-medium tracking-[-0.01em]", ui_common.shape.pill, sizeMap[size], ui_motion.motionTactile, ui_common.focusRing, appearance === "filled" && ui_common.tone.strong[variant], appearance === "filled" && !isDisabled && ui_common.stateLayer.filled, appearance === "tonal" && ui_common.tone.tonal[variant], appearance === "tonal" && ui_common.tone.text[variant], appearance === "tonal" && !isDisabled && ui_common.stateLayer.tonal, appearance === "text" && ui_common.tone.text[variant], appearance === "text" && !isDisabled && ui_common.stateLayer.quiet, appearance === "tonal" && ui_common.elevation.raised, isTactile && ui_common.state.recess, isDisabled ? ui_common.state.disabled : ui_common.state.enabled, className), children: [loading ? (jsxRuntime.jsx("span", { className: utils.cn("inline-flex size-5 shrink-0 items-center justify-center", !icon && "absolute"), children: jsxRuntime.jsx(Spinner.Spinner, { size: "small", className: utils.cn("size-5") }) })) : icon ? (jsxRuntime.jsx("span", { className: utils.cn("inline-flex size-5 shrink-0 items-center justify-center [&>svg]:size-5"), "aria-hidden": "true", children: icon })) : null, jsxRuntime.jsx("span", { className: utils.cn("min-w-0 [overflow-wrap:anywhere]", loading && !icon && "opacity-0"), children: children })] }));
27
+ /* The action ladder: text sits flat, tonal and filled are raised and recess while held. The
28
+ priority action is never flatter than the one beside it. */
29
+ const isRaised = appearance !== "text";
30
+ const isTactile = isRaised && !isDisabled;
31
+ return (jsxRuntime.jsxs(button.Button, { ...props, render: jsxRuntime.jsx("button", { ref: ref }), type: type, disabled: isDisabled, "aria-busy": loading || undefined, className: utils.cn("relative inline-flex min-w-0 max-w-full items-center justify-center gap-2 font-medium tracking-[-0.01em]", ui_common.shape.pill, sizeMap[size], ui_motion.motionTactile, ui_common.focusRing, appearance === "filled" && ui_common.tone.strong[variant], appearance === "filled" && !isDisabled && ui_common.stateLayer.filled, appearance === "tonal" && ui_common.tone.tonal[variant], appearance === "tonal" && ui_common.tone.text[variant], appearance === "tonal" && !isDisabled && (variant === "secondary" ? ui_common.stateLayer.tonalNeutral : ui_common.stateLayer.tonal), appearance === "text" && ui_common.tone.text[variant], appearance === "text" && !isDisabled && ui_common.stateLayer.quiet, isRaised && ui_common.elevation.raised, isTactile && ui_common.state.recess, isDisabled ? ui_common.state.disabled : ui_common.state.enabled, className), children: [loading ? (jsxRuntime.jsx("span", { className: utils.cn(slotMap[size], !icon && "absolute"), children: jsxRuntime.jsx(Spinner.Spinner, { size: "small", className: utils.cn("size-full") }) })) : icon ? (jsxRuntime.jsx("span", { className: utils.cn(slotMap[size]), "aria-hidden": "true", children: icon })) : null, jsxRuntime.jsx("span", { className: utils.cn("min-w-0 [overflow-wrap:anywhere]", loading && !icon && "opacity-0"), children: children })] }));
23
32
  });
24
33
  Button.displayName = "Button";
25
34
 
@@ -1 +1 @@
1
- {"version":3,"file":"Button.cjs","sources":["../../../src/components/Button.tsx"],"sourcesContent":["\"use client\";\n\nimport { Button as BaseButton } from \"@base-ui/react/button\";\nimport React, { forwardRef, type ButtonHTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport {\n density,\n elevation,\n focusRing,\n shape,\n state,\n stateLayer,\n tone,\n} from \"./ui.common\";\nimport { motionTactile } from \"./ui.motion\";\nimport { Variant } from \"./ui.types\";\nimport { Spinner } from \"./Spinner\";\n\nexport type ButtonAppearance = \"filled\" | \"tonal\" | \"text\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n children: ReactNode;\n variant?: Variant;\n appearance?: ButtonAppearance;\n size?: ButtonSize;\n icon?: ReactNode;\n loading?: boolean;\n}\n\nconst sizeMap: Record<ButtonSize, string> = {\n sm: `${density.compact} px-4 py-2`,\n md: `${density.normal} px-6 py-3`,\n lg: `${density.prominent} px-8 py-4`,\n};\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({\n children,\n variant = \"primary\",\n appearance = \"tonal\",\n size = \"md\",\n icon,\n className,\n loading = false,\n disabled,\n type = \"button\",\n ...props\n }, ref) => {\n const isDisabled = disabled || loading;\n const isTactile = appearance === \"tonal\" && !isDisabled;\n\n return (\n <BaseButton\n {...props}\n render={<button ref={ref} />}\n type={type}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n className={cn(\n \"relative inline-flex min-w-0 max-w-full items-center justify-center gap-2 font-medium tracking-[-0.01em]\",\n shape.pill,\n sizeMap[size],\n motionTactile,\n focusRing,\n appearance === \"filled\" && tone.strong[variant],\n appearance === \"filled\" && !isDisabled && stateLayer.filled,\n appearance === \"tonal\" && tone.tonal[variant],\n appearance === \"tonal\" && tone.text[variant],\n appearance === \"tonal\" && !isDisabled && stateLayer.tonal,\n appearance === \"text\" && tone.text[variant],\n appearance === \"text\" && !isDisabled && stateLayer.quiet,\n appearance === \"tonal\" && elevation.raised,\n isTactile && state.recess,\n isDisabled ? state.disabled : state.enabled,\n className\n )}\n >\n {/* A mark occupies one slot whatever is inside it. The slot is a fixed 20px box, so a nested\n node — a wrapped mark, a status dot — cannot change the control's width, and the loading\n mark lands in the box the icon had. `[&>svg]` normalizes direct SVG artwork; sizing nested\n artwork is the caller's business, as §17 says. */}\n {loading ? (\n <span className={cn(\"inline-flex size-5 shrink-0 items-center justify-center\", !icon && \"absolute\")}>\n <Spinner size=\"small\" className={cn(\"size-5\")} />\n </span>\n ) : icon ? (\n <span className={cn(\"inline-flex size-5 shrink-0 items-center justify-center [&>svg]:size-5\")} aria-hidden=\"true\">\n {icon}\n </span>\n ) : null}\n {/* Retain one label subtree and its accessible name while the spinner occupies its footprint. */}\n <span className={cn(\"min-w-0 [overflow-wrap:anywhere]\", loading && !icon && \"opacity-0\")}>{children}</span>\n </BaseButton>\n );\n }\n);\n\nButton.displayName = \"Button\";\n\nexport default Button;\n"],"names":["density","forwardRef","_jsxs","BaseButton","_jsx","cn","shape","motionTactile","focusRing","tone","stateLayer","elevation","state","Spinner"],"mappings":"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"}
1
+ {"version":3,"file":"Button.cjs","sources":["../../../src/components/Button.tsx"],"sourcesContent":["\"use client\";\n\nimport { Button as BaseButton } from \"@base-ui/react/button\";\nimport React, { forwardRef, type ButtonHTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport {\n density,\n elevation,\n focusRing,\n iconSlot,\n shape,\n state,\n stateLayer,\n tone,\n} from \"./ui.common\";\nimport { motionTactile } from \"./ui.motion\";\nimport { Variant } from \"./ui.types\";\nimport { Spinner } from \"./Spinner\";\n\nexport type ButtonAppearance = \"filled\" | \"tonal\" | \"text\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n children: ReactNode;\n variant?: Variant;\n appearance?: ButtonAppearance;\n size?: ButtonSize;\n icon?: ReactNode;\n loading?: boolean;\n}\n\n/* The mark follows the type step beside it (§10): a compact label takes the compact slot. */\nconst slotMap: Record<ButtonSize, string> = {\n sm: iconSlot.compact,\n md: iconSlot.normal,\n lg: iconSlot.prominent,\n};\n\nconst sizeMap: Record<ButtonSize, string> = {\n sm: `${density.compact} px-4 py-2`,\n md: `${density.normal} px-6 py-3`,\n lg: `${density.prominent} px-8 py-4`,\n};\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({\n children,\n variant = \"primary\",\n appearance = \"tonal\",\n size = \"md\",\n icon,\n className,\n loading = false,\n disabled,\n type = \"button\",\n ...props\n }, ref) => {\n const isDisabled = disabled || loading;\n /* The action ladder: text sits flat, tonal and filled are raised and recess while held. The\n priority action is never flatter than the one beside it. */\n const isRaised = appearance !== \"text\";\n const isTactile = isRaised && !isDisabled;\n\n return (\n <BaseButton\n {...props}\n render={<button ref={ref} />}\n type={type}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n className={cn(\n \"relative inline-flex min-w-0 max-w-full items-center justify-center gap-2 font-medium tracking-[-0.01em]\",\n shape.pill,\n sizeMap[size],\n motionTactile,\n focusRing,\n appearance === \"filled\" && tone.strong[variant],\n appearance === \"filled\" && !isDisabled && stateLayer.filled,\n appearance === \"tonal\" && tone.tonal[variant],\n appearance === \"tonal\" && tone.text[variant],\n appearance === \"tonal\" && !isDisabled && (variant === \"secondary\" ? stateLayer.tonalNeutral : stateLayer.tonal),\n appearance === \"text\" && tone.text[variant],\n appearance === \"text\" && !isDisabled && stateLayer.quiet,\n isRaised && elevation.raised,\n isTactile && state.recess,\n isDisabled ? state.disabled : state.enabled,\n className\n )}\n >\n {/* A mark occupies one slot whatever is inside it. The slot is a fixed box sized by the\n button's type step, so a nested node — a wrapped mark, a status dot — cannot change the\n control's width, and the loading mark lands in the box the icon had. `[&>svg]` normalizes\n direct SVG artwork; sizing nested artwork is the caller's business, as §17 says. */}\n {loading ? (\n <span className={cn(slotMap[size], !icon && \"absolute\")}>\n <Spinner size=\"small\" className={cn(\"size-full\")} />\n </span>\n ) : icon ? (\n <span className={cn(slotMap[size])} aria-hidden=\"true\">\n {icon}\n </span>\n ) : null}\n {/* Retain one label subtree and its accessible name while the spinner occupies its footprint. */}\n <span className={cn(\"min-w-0 [overflow-wrap:anywhere]\", loading && !icon && \"opacity-0\")}>{children}</span>\n </BaseButton>\n );\n }\n);\n\nButton.displayName = \"Button\";\n\nexport default Button;\n"],"names":["iconSlot","density","forwardRef","_jsxs","BaseButton","_jsx","cn","shape","motionTactile","focusRing","tone","stateLayer","elevation","state","Spinner"],"mappings":";;;;;;;;;;;;;AA+BA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAO,CAAA,CAAA,CAA+B;IAC1C,CAAA,CAAE,CAAA,CAAEA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO;IACpB,CAAA,CAAE,CAAA,CAAEA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM;IACnB,CAAA,CAAE,CAAA,CAAEA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS;CACvB;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAO,CAAA,CAAA,CAA+B;AAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAE,CAAA,CAAA,CAAGC,iBAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAE,CAAA,CAAA,CAAGA,iBAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAE,CAAA,CAAA,CAAGA,iBAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY;CACrC;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,MAAM,CAAA,CAAA,CAAGC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU,CACvB,CAAC,EACC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAG,SAAS,CAAA,CACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CACpB,IAAI,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAI,CAAA,CACX,CAAA,CAAA,CAAA,CAAI,EACJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CACT,OAAO,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,EACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CACR,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAG,QAAQ,CAAA,CACf,CAAA,CAAA,CAAG,KAAK,CAAA,CACT,CAAA,CAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAI;AACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,IAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC8D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC9D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,KAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM;AACtC,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU;IAEzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAACC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAG,CAAA,CAAE,CAAA,CAAA,CAAG,CAAA,CAAA,CAAI,CAAA,CAC5B,CAAA,CAAA,CAAA,CAAI,CAAA,CAAE,CAAA,CAAA,CAAA,CAAI,CAAA,CACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAE,CACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA0G,CAAA,CAC1GC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAI,CAAA,CACV,OAAO,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CACbC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAa,CAAA,CACbC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAS,CAAA,CACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAIC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,OAAO,CAAC,CAAA,CAC/C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAIC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAC3D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,IAAID,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAIA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAGC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAGA,oBAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAC/G,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAID,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,KAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAIC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CACxD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAIC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,IAAIC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAGA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAGA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CACV,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAMA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CACNR,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACrDD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAACS,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAO,CAAA,CAAA,CAAA,CAAC,CAAA,CAAA,CAAA,CAAI,EAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAER,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAI,CAAA,CAAA,CAC/C,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CACND,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnD,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAA,CAAI,CAAA,CAERD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkC,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAQ,CAAA,EAAA,CAChG,CAAA;AAEjB,CAAC,CAAA;AAGH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ;;"}
@@ -266,7 +266,7 @@ const Calendar = React.forwardRef((props, ref) => {
266
266
  }
267
267
  }, className: utils.cn("w-full table-fixed border-separate border-spacing-0"), children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsx("tr", { children: Array.from({ length: 7 }, (_, index) => {
268
268
  const name = format.weekdayNames[(index + weekStartsOn) % 7];
269
- return (jsxRuntime.jsxs("th", { scope: "col", abbr: name.long, className: utils.cn("h-8 px-0 text-center text-xs font-medium", ui_common.text.medium), children: [jsxRuntime.jsx("span", { "aria-hidden": "true", children: name.short }), jsxRuntime.jsx("span", { className: utils.cn("sr-only"), children: name.long })] }, name.long));
269
+ return (jsxRuntime.jsxs("th", { scope: "col", abbr: name.long, className: utils.cn("h-8 px-0 text-center font-medium", ui_common.type.caption, ui_common.text.medium), children: [jsxRuntime.jsx("span", { "aria-hidden": "true", children: name.short }), jsxRuntime.jsx("span", { className: utils.cn("sr-only"), children: name.long })] }, name.long));
270
270
  }) }) }), jsxRuntime.jsx("tbody", { children: rows.map((row, rowIndex) => (jsxRuntime.jsx("tr", { children: row.map((day, columnIndex) => {
271
271
  if (day === null) {
272
272
  return (jsxRuntime.jsx("td", { role: "gridcell", className: utils.cn("p-0 text-center align-middle") }, `blank-${rowIndex}-${columnIndex}`));
@@ -290,7 +290,7 @@ const Calendar = React.forwardRef((props, ref) => {
290
290
  if (day !== activeDayState)
291
291
  setActiveDayState(day);
292
292
  }, className: utils.cn(dayButtonClassName, ui_common.text.high, isToday && `${ui_common.tone.text.primary} underline underline-offset-4`, selected && isEdge && "font-medium", selected && !joinedRange && utils.cn(invalid ? ui_common.tone.selected.danger : ui_common.tone.selected.primary, ui_common.elevation.control), !disabled && !unavailable && `${ui_common.stateLayer.quiet} ${ui_common.state.enabled}`, unavailable && !disabled && ui_common.state.disabled, disabled && ui_common.state.disabledDescendant), children: format.formatDayNumber(day) })] }, date));
293
- }) }, rowIndex))) })] }), jsxRuntime.jsxs("div", { className: utils.cn("mt-3 flex items-center justify-between gap-3"), children: [jsxRuntime.jsx("button", { type: "button", disabled: disabled, onClick: goToToday, className: utils.cn(todayButtonClassName, disabled ? ui_common.state.disabledDescendant : ui_common.state.enabled), children: labels.today }), jsxRuntime.jsx("div", { role: "status", className: utils.cn("min-w-0 text-xs", ui_common.tone.text.danger), children: rangeMessage !== null && rangeMessage !== void 0 ? rangeMessage : "" })] }), jsxRuntime.jsx("p", { id: hintId, className: utils.cn("sr-only"), children: isRange ? labels.selectRange : labels.selectDate })] }));
293
+ }) }, rowIndex))) })] }), jsxRuntime.jsxs("div", { className: utils.cn("mt-3 flex items-center justify-between gap-3"), children: [jsxRuntime.jsx("button", { type: "button", disabled: disabled, onClick: goToToday, className: utils.cn(todayButtonClassName, disabled ? ui_common.state.disabledDescendant : ui_common.state.enabled), children: labels.today }), jsxRuntime.jsx("div", { role: "status", className: utils.cn("min-w-0", ui_common.type.supporting, ui_common.tone.text.danger), children: rangeMessage !== null && rangeMessage !== void 0 ? rangeMessage : "" })] }), jsxRuntime.jsx("p", { id: hintId, className: utils.cn("sr-only"), children: isRange ? labels.selectRange : labels.selectDate })] }));
294
294
  });
295
295
  Calendar.displayName = "Calendar";
296
296