sherick-ui 2.1.1 → 2.2.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.
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.2.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 DialogHeader = ({ children, className }) => {
10
- return (jsxRuntime.jsx("div", { className: utils.cn("pt-5 pb-2 ps-6 pe-16 sm:ps-7", className), children: jsxRuntime.jsx(dialog.Dialog.Title, { className: utils.cn("text-xl font-semibold tracking-[-0.02em]", ui_common.text.high), children: children }) }));
10
+ return (jsxRuntime.jsx("div", { className: utils.cn("pt-5 pb-2 ps-6 pe-16 sm:ps-7", className), children: jsxRuntime.jsx(dialog.Dialog.Title, { className: utils.cn("m-0 text-xl font-semibold tracking-[-0.02em]", ui_common.text.high), children: children }) }));
11
11
  };
12
12
 
13
13
  exports.DialogHeader = DialogHeader;
@@ -1 +1 @@
1
- {"version":3,"file":"DialogHeader.cjs","sources":["../../../src/components/DialogHeader.tsx"],"sourcesContent":["\"use client\";\n\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport React, { type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { text } from \"./ui.common\";\n\nexport interface DialogHeaderProps {\n children: ReactNode;\n className?: string;\n}\n\nexport const DialogHeader = ({ children, className }: DialogHeaderProps) => {\n return (\n <div className={cn(\"pt-5 pb-2 ps-6 pe-16 sm:ps-7\", className)}>\n <BaseDialog.Title className={cn(\"text-xl font-semibold tracking-[-0.02em]\", text.high)}>\n {children}\n </BaseDialog.Title>\n </div>\n );\n};\n"],"names":["_jsx","cn","BaseDialog","text"],"mappings":";;;;;;;;AAYO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,GAAG,CAAC,CAAA,CAAE,QAAQ,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAqB,CAAA,CAAA,CAAA,CAAA,CAAI;AACzE,CAAA,CAAA,CAAA,CAAA,QACEA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAK,SAAS,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,CAA8B,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC3DD,cAAA,CAACE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,EAAA,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAED,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAE,CAAC,0CAA0C,CAAA,CAAEE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnF,QAAQ,CAAA,CAAA,CACQ,EAAA,CACf,CAAA;AAEV,CAAA;;"}
1
+ {"version":3,"file":"DialogHeader.cjs","sources":["../../../src/components/DialogHeader.tsx"],"sourcesContent":["\"use client\";\n\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport React, { type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { text } from \"./ui.common\";\n\nexport interface DialogHeaderProps {\n children: ReactNode;\n className?: string;\n}\n\nexport const DialogHeader = ({ children, className }: DialogHeaderProps) => {\n return (\n <div className={cn(\"pt-5 pb-2 ps-6 pe-16 sm:ps-7\", className)}>\n <BaseDialog.Title className={cn(\"m-0 text-xl font-semibold tracking-[-0.02em]\", text.high)}>\n {children}\n </BaseDialog.Title>\n </div>\n );\n};\n"],"names":["_jsx","cn","BaseDialog","text"],"mappings":";;;;;;;;AAYO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,GAAG,CAAC,CAAA,CAAE,QAAQ,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAqB,CAAA,CAAA,CAAA,CAAA,CAAI;AACzE,CAAA,CAAA,CAAA,CAAA,QACEA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAK,SAAS,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,CAA8B,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC3DD,cAAA,CAACE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,EAAA,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAED,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAE,CAAC,8CAA8C,CAAA,CAAEE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACvF,QAAQ,CAAA,CAAA,CACQ,EAAA,CACf,CAAA;AAEV,CAAA;;"}
@@ -33,7 +33,7 @@ const DrawerContent = ({ children, className }) => {
33
33
  has been visited. Base still owns initial focus and the focus trap. */
34
34
  jsxRuntime.jsxs(DialogSurface.DialogSurface, { attachment: side, className: utils.cn(className), initialFocus: contentRef, children: [jsxRuntime.jsx(DialogSurface.DialogDismiss, { label: "Close" }), jsxRuntime.jsx("div", { ref: contentRef, tabIndex: -1, className: utils.cn("flex min-h-0 flex-1 flex-col overflow-y-auto overscroll-contain outline-none"), children: children })] }));
35
35
  };
36
- const DrawerHeader = ({ children, className }) => (jsxRuntime.jsx("div", { className: utils.cn("pt-5 pb-2 ps-6 pe-16 sm:ps-7", className), children: jsxRuntime.jsx(dialog.Dialog.Title, { className: utils.cn("text-xl font-semibold tracking-[-0.02em]", ui_common.text.high), children: children }) }));
36
+ const DrawerHeader = ({ children, className }) => (jsxRuntime.jsx("div", { className: utils.cn("pt-5 pb-2 ps-6 pe-16 sm:ps-7", className), children: jsxRuntime.jsx(dialog.Dialog.Title, { className: utils.cn("m-0 text-xl font-semibold tracking-[-0.02em]", ui_common.text.high), children: children }) }));
37
37
  const DrawerDescription = ({ children, className }) => (jsxRuntime.jsx(dialog.Dialog.Description, { className: utils.cn("px-6 pt-2 text-sm leading-7 sm:px-7", ui_common.text.medium, className), children: children }));
38
38
  /* Actions stay on the sheet's own surface: no divider, no second layer. */
39
39
  const DrawerFooter = ({ children, className }) => (jsxRuntime.jsx("div", { className: utils.cn("mt-auto flex flex-wrap items-center justify-end gap-3 px-6 pb-6 pt-4 sm:px-7", className), children: children }));
@@ -1 +1 @@
1
- {"version":3,"file":"Drawer.cjs","sources":["../../../src/components/Drawer.tsx"],"sourcesContent":["\"use client\";\n\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport React, { createContext, useContext, useRef, type ComponentProps, type ReactElement, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { text } from \"./ui.common\";\nimport { DialogDismiss, DialogSurface, type DialogAttachment } from \"./DialogSurface\";\n\n/**\n * The viewport edge a sheet is attached to. Sides are **physical** rather than logical: the\n * contract places the sheet against that edge of the screen rather than resolving a writing\n * direction the component cannot see, so a direction-sensitive placement is the consumer's own\n * `dir`-aware arrangement rather than an inferred one.\n */\nexport type DrawerSide = Exclude<DialogAttachment, \"center\">;\n\nexport interface DrawerProps {\n children: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n /** Base's own open-change callback, event details included. */\n onOpenChange?: BaseDialog.Root.Props[\"onOpenChange\"];\n /** The edge the sheet is attached to. */\n side?: DrawerSide;\n}\n\nexport interface DrawerTriggerProps {\n /**\n * The element the trigger's own props are handed to — usually a Sherick `Button`. The sheet\n * opens from whatever this renders, so the control that opens it looks like the control it is.\n */\n render?: ReactElement;\n children?: ReactNode;\n /** Adds to the rendered element. The trigger writes no visual rules of its own. */\n className?: string;\n}\n\nexport interface DrawerContentProps {\n children: ReactNode;\n /** Adds to the sheet's own surface. Its shell, elevation and presence are the recipe's. */\n className?: string;\n}\n\nexport interface DrawerHeaderProps {\n children: ReactNode;\n className?: string;\n}\n\nexport interface DrawerDescriptionProps {\n children: ReactNode;\n className?: string;\n}\n\nexport interface DrawerFooterProps {\n children: ReactNode;\n className?: string;\n}\n\ntype DrawerComponent = ((props: DrawerProps) => React.JSX.Element) & {\n Trigger: typeof DrawerTrigger;\n Content: typeof DrawerContent;\n Header: typeof DrawerHeader;\n Description: typeof DrawerDescription;\n Footer: typeof DrawerFooter;\n Close: typeof DrawerClose;\n};\n\n/* Base's dialog root has no notion of an edge, so the side a sheet was given travels down to the\n sheet's own part through context rather than through a second prop a consumer would have to\n keep in step with the first. */\nconst SideContext = createContext<DrawerSide>(\"bottom\");\n\nconst DrawerTrigger = ({ ...props }: DrawerTriggerProps) => <BaseDialog.Trigger {...props} />;\n\n/**\n * The sheet itself: the plane behind it, the viewport, the edge-attached surface, and the\n * dismissal control every sheet carries. Base UI — through the same dialog root a `Dialog` uses —\n * owns the portal, focus trapping and restoration, document scroll locking, Escape and outside\n * dismissal; Sherick UI owns the surface and how it slides out of its edge.\n *\n * It is a `Dialog` that changed its attachment: there is no second modal system here, so a sheet\n * traps focus, restores it, locks the page and dismisses exactly as a dialog does. Use a `Dialog`\n * when the surface has no edge.\n */\nconst DrawerContent = ({ children, className }: DrawerContentProps) => {\n const side = useContext(SideContext);\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n return (\n /* Focus the reading region, so native PageDown/Space scroll the sheet before a control\n has been visited. Base still owns initial focus and the focus trap. */\n <DialogSurface\n attachment={side}\n className={cn(className)}\n initialFocus={contentRef}\n >\n <DialogDismiss label=\"Close\" />\n <div ref={contentRef} tabIndex={-1} className={cn(\"flex min-h-0 flex-1 flex-col overflow-y-auto overscroll-contain outline-none\")}>\n {children}\n </div>\n </DialogSurface>\n );\n};\n\nconst DrawerHeader = ({ children, className }: DrawerHeaderProps) => (\n <div className={cn(\"pt-5 pb-2 ps-6 pe-16 sm:ps-7\", className)}>\n <BaseDialog.Title className={cn(\"text-xl font-semibold tracking-[-0.02em]\", text.high)}>\n {children}\n </BaseDialog.Title>\n </div>\n);\n\nconst DrawerDescription = ({ children, className }: DrawerDescriptionProps) => (\n <BaseDialog.Description\n className={cn(\"px-6 pt-2 text-sm leading-7 sm:px-7\", text.medium, className)}\n >\n {children}\n </BaseDialog.Description>\n);\n\n/* Actions stay on the sheet's own surface: no divider, no second layer. */\nconst DrawerFooter = ({ children, className }: DrawerFooterProps) => (\n <div className={cn(\"mt-auto flex flex-wrap items-center justify-end gap-3 px-6 pb-6 pt-4 sm:px-7\", className)}>\n {children}\n </div>\n);\n\n/* The dismissal control as a part, for an action that closes the sheet from its own footer: Base\n hands the close behavior to whatever the caller renders. */\nconst DrawerClose = (props: ComponentProps<typeof BaseDialog.Close>) => (\n <BaseDialog.Close {...props} />\n);\n\n/**\n * A surface attached to one edge of the viewport: a bottom sheet, a side panel, a top drawer. It\n * is a `Dialog` with an edge rather than a second kind of modal — the same root, the same scrim,\n * the same focus trapping and restoration, the same Escape and outside dismissal, the same\n * document scroll locking and the same portal — and only the placement and the direction the\n * surface arrives from differ.\n *\n * Compose a `Drawer.Trigger` and a `Drawer.Content`; the header, description and footer parts\n * mirror a `Dialog`'s, because it is the same surface.\n */\nconst Drawer = (({ children, side = \"bottom\", ...props }: DrawerProps) => {\n return (\n <SideContext.Provider value={side}>\n <BaseDialog.Root {...props}>{children}</BaseDialog.Root>\n </SideContext.Provider>\n );\n}) as DrawerComponent;\n\nDrawer.Trigger = DrawerTrigger;\nDrawer.Content = DrawerContent;\nDrawer.Header = DrawerHeader;\nDrawer.Description = DrawerDescription;\nDrawer.Footer = DrawerFooter;\nDrawer.Close = DrawerClose;\n\nexport default Drawer;\n"],"names":["createContext","_jsx","BaseDialog","useContext","useRef","_jsxs","DialogSurface","cn","DialogDismiss","text"],"mappings":"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"}
1
+ {"version":3,"file":"Drawer.cjs","sources":["../../../src/components/Drawer.tsx"],"sourcesContent":["\"use client\";\n\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport React, { createContext, useContext, useRef, type ComponentProps, type ReactElement, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { text } from \"./ui.common\";\nimport { DialogDismiss, DialogSurface, type DialogAttachment } from \"./DialogSurface\";\n\n/**\n * The viewport edge a sheet is attached to. Sides are **physical** rather than logical: the\n * contract places the sheet against that edge of the screen rather than resolving a writing\n * direction the component cannot see, so a direction-sensitive placement is the consumer's own\n * `dir`-aware arrangement rather than an inferred one.\n */\nexport type DrawerSide = Exclude<DialogAttachment, \"center\">;\n\nexport interface DrawerProps {\n children: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n /** Base's own open-change callback, event details included. */\n onOpenChange?: BaseDialog.Root.Props[\"onOpenChange\"];\n /** The edge the sheet is attached to. */\n side?: DrawerSide;\n}\n\nexport interface DrawerTriggerProps {\n /**\n * The element the trigger's own props are handed to — usually a Sherick `Button`. The sheet\n * opens from whatever this renders, so the control that opens it looks like the control it is.\n */\n render?: ReactElement;\n children?: ReactNode;\n /** Adds to the rendered element. The trigger writes no visual rules of its own. */\n className?: string;\n}\n\nexport interface DrawerContentProps {\n children: ReactNode;\n /** Adds to the sheet's own surface. Its shell, elevation and presence are the recipe's. */\n className?: string;\n}\n\nexport interface DrawerHeaderProps {\n children: ReactNode;\n className?: string;\n}\n\nexport interface DrawerDescriptionProps {\n children: ReactNode;\n className?: string;\n}\n\nexport interface DrawerFooterProps {\n children: ReactNode;\n className?: string;\n}\n\ntype DrawerComponent = ((props: DrawerProps) => React.JSX.Element) & {\n Trigger: typeof DrawerTrigger;\n Content: typeof DrawerContent;\n Header: typeof DrawerHeader;\n Description: typeof DrawerDescription;\n Footer: typeof DrawerFooter;\n Close: typeof DrawerClose;\n};\n\n/* Base's dialog root has no notion of an edge, so the side a sheet was given travels down to the\n sheet's own part through context rather than through a second prop a consumer would have to\n keep in step with the first. */\nconst SideContext = createContext<DrawerSide>(\"bottom\");\n\nconst DrawerTrigger = ({ ...props }: DrawerTriggerProps) => <BaseDialog.Trigger {...props} />;\n\n/**\n * The sheet itself: the plane behind it, the viewport, the edge-attached surface, and the\n * dismissal control every sheet carries. Base UI — through the same dialog root a `Dialog` uses —\n * owns the portal, focus trapping and restoration, document scroll locking, Escape and outside\n * dismissal; Sherick UI owns the surface and how it slides out of its edge.\n *\n * It is a `Dialog` that changed its attachment: there is no second modal system here, so a sheet\n * traps focus, restores it, locks the page and dismisses exactly as a dialog does. Use a `Dialog`\n * when the surface has no edge.\n */\nconst DrawerContent = ({ children, className }: DrawerContentProps) => {\n const side = useContext(SideContext);\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n return (\n /* Focus the reading region, so native PageDown/Space scroll the sheet before a control\n has been visited. Base still owns initial focus and the focus trap. */\n <DialogSurface\n attachment={side}\n className={cn(className)}\n initialFocus={contentRef}\n >\n <DialogDismiss label=\"Close\" />\n <div ref={contentRef} tabIndex={-1} className={cn(\"flex min-h-0 flex-1 flex-col overflow-y-auto overscroll-contain outline-none\")}>\n {children}\n </div>\n </DialogSurface>\n );\n};\n\nconst DrawerHeader = ({ children, className }: DrawerHeaderProps) => (\n <div className={cn(\"pt-5 pb-2 ps-6 pe-16 sm:ps-7\", className)}>\n <BaseDialog.Title className={cn(\"m-0 text-xl font-semibold tracking-[-0.02em]\", text.high)}>\n {children}\n </BaseDialog.Title>\n </div>\n);\n\nconst DrawerDescription = ({ children, className }: DrawerDescriptionProps) => (\n <BaseDialog.Description\n className={cn(\"px-6 pt-2 text-sm leading-7 sm:px-7\", text.medium, className)}\n >\n {children}\n </BaseDialog.Description>\n);\n\n/* Actions stay on the sheet's own surface: no divider, no second layer. */\nconst DrawerFooter = ({ children, className }: DrawerFooterProps) => (\n <div className={cn(\"mt-auto flex flex-wrap items-center justify-end gap-3 px-6 pb-6 pt-4 sm:px-7\", className)}>\n {children}\n </div>\n);\n\n/* The dismissal control as a part, for an action that closes the sheet from its own footer: Base\n hands the close behavior to whatever the caller renders. */\nconst DrawerClose = (props: ComponentProps<typeof BaseDialog.Close>) => (\n <BaseDialog.Close {...props} />\n);\n\n/**\n * A surface attached to one edge of the viewport: a bottom sheet, a side panel, a top drawer. It\n * is a `Dialog` with an edge rather than a second kind of modal — the same root, the same scrim,\n * the same focus trapping and restoration, the same Escape and outside dismissal, the same\n * document scroll locking and the same portal — and only the placement and the direction the\n * surface arrives from differ.\n *\n * Compose a `Drawer.Trigger` and a `Drawer.Content`; the header, description and footer parts\n * mirror a `Dialog`'s, because it is the same surface.\n */\nconst Drawer = (({ children, side = \"bottom\", ...props }: DrawerProps) => {\n return (\n <SideContext.Provider value={side}>\n <BaseDialog.Root {...props}>{children}</BaseDialog.Root>\n </SideContext.Provider>\n );\n}) as DrawerComponent;\n\nDrawer.Trigger = DrawerTrigger;\nDrawer.Content = DrawerContent;\nDrawer.Header = DrawerHeader;\nDrawer.Description = DrawerDescription;\nDrawer.Footer = DrawerFooter;\nDrawer.Close = DrawerClose;\n\nexport default Drawer;\n"],"names":["createContext","_jsx","BaseDialog","useContext","useRef","_jsxs","DialogSurface","cn","DialogDismiss","text"],"mappings":"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"}
@@ -16,11 +16,12 @@ var ui_motion = require('./ui.motion.cjs');
16
16
  * One choice out of a list. Base UI owns the value, the roving tab index, the arrow keys,
17
17
  * the name and the form participation; Sherick UI owns the labelled column and the rows.
18
18
  */
19
- const RadioGroup = React.forwardRef(({ options, label, value, defaultValue, onValueChange, name, form, required, disabled, readOnly, inputRef, className, ...groupProps }, ref) => {
19
+ const RadioGroup = React.forwardRef(({ options, appearance = "default", label, value, defaultValue, onValueChange, name, form, required, disabled, readOnly, inputRef, className, ...groupProps }, ref) => {
20
20
  return (
21
21
  // The group owns the field scope its options are labelled in. Base UI scopes each
22
22
  // option's label to its own `Field.Item`, which has to sit inside a `Field.Root`.
23
- jsxRuntime.jsxs(field.Field.Root, { className: utils.cn(ui_common.fieldLayout, className), children: [label && (jsxRuntime.jsxs(field.Field.Label, { className: utils.cn("mb-2 text-sm font-medium", ui_common.text.high), children: [label, required && (jsxRuntime.jsx("span", { className: utils.cn("ms-1 text-sherick-danger"), "aria-hidden": "true", children: "*" }))] })), jsxRuntime.jsx(radioGroup.RadioGroup, { ...groupProps, ref: ref, value: value, defaultValue: defaultValue, onValueChange: onValueChange, name: name, form: form, required: required, disabled: disabled, readOnly: readOnly, inputRef: inputRef, className: utils.cn("flex flex-col"), children: options.map((option) => (jsxRuntime.jsx(field.Field.Item, { className: utils.cn("group flex items-stretch", ui_common.density.normal, ui_common.state.enabled, ui_common.state.effectiveDisabled, ui_common.state.disabledRow), children: jsxRuntime.jsx(field.Field.Label, { className: utils.cn("flex min-w-0 flex-1 items-center"), children: jsxRuntime.jsxs("span", { className: utils.cn("flex w-full items-start gap-3"), children: [jsxRuntime.jsx(radio.Radio.Root, { value: option.value, disabled: option.disabled, className: utils.cn("group relative flex size-6 shrink-0 items-center justify-center outline-none"), children: jsxRuntime.jsx("span", { "aria-hidden": "true", className: utils.cn("flex size-6 items-center justify-center", ui_common.shape.circle, ui_common.selectable.markSurface, ui_common.selectable.mark, ui_common.selectable.selected, ui_common.stateLayer.track, ui_common.groupFocusRing), children: jsxRuntime.jsx(radio.Radio.Indicator, { className: utils.cn("flex items-center justify-center", ui_motion.motionArrive), children: jsxRuntime.jsx("span", { className: utils.cn("block size-2.5", ui_common.shape.circle, "bg-current") }) }) }) }), jsxRuntime.jsx("span", { className: utils.cn(ui_common.text.high, "min-w-0 leading-6"), children: option.label })] }) }) }, option.value))) })] }));
23
+ jsxRuntime.jsxs(field.Field.Root, { className: utils.cn(ui_common.fieldLayout, className), children: [label && (jsxRuntime.jsxs(field.Field.Label, { className: utils.cn("mb-2 text-sm font-medium", ui_common.text.high), children: [label, required && (jsxRuntime.jsx("span", { className: utils.cn("ms-1 text-sherick-danger"), "aria-hidden": "true", children: "*" }))] })), jsxRuntime.jsx(radioGroup.RadioGroup, { ...groupProps, ref: ref, value: value, defaultValue: defaultValue, onValueChange: onValueChange, name: name, form: form, required: required, disabled: disabled, readOnly: readOnly, inputRef: inputRef, className: utils.cn("flex flex-col", appearance === "surface" && "gap-2"), children: options.map((option) => (jsxRuntime.jsx(field.Field.Item, { ...(appearance === "surface" && readOnly ? { "data-readonly": "" } : {}), className: utils.cn("group flex items-stretch", ui_common.density.normal, appearance === "surface" &&
24
+ utils.cn("relative min-w-0 forced-colors:has-[:focus-visible]:[outline-style:none]", ui_common.shape.control, ui_common.material.matteQuiet, ui_common.selectableRowSurface, ui_common.stateLayerQuietComposite, ui_common.focusRingWithin, ui_motion.motionFeedback), ui_common.state.enabled, ui_common.state.effectiveDisabled, ui_common.state.disabledRow), children: jsxRuntime.jsx(field.Field.Label, { className: utils.cn("flex min-w-0 flex-1 items-center", appearance === "surface" && "px-4 py-3"), children: jsxRuntime.jsxs("span", { className: utils.cn("flex w-full items-start gap-3"), children: [jsxRuntime.jsx(radio.Radio.Root, { value: option.value, disabled: option.disabled, className: utils.cn("group relative flex size-6 shrink-0 items-center justify-center outline-none"), children: jsxRuntime.jsx("span", { "aria-hidden": "true", className: utils.cn("flex size-6 items-center justify-center", ui_common.shape.circle, ui_common.selectable.markSurface, ui_common.selectable.mark, ui_common.selectable.selected, ui_common.stateLayer.track, appearance === "default" && ui_common.groupFocusRing), children: jsxRuntime.jsx(radio.Radio.Indicator, { className: utils.cn("flex items-center justify-center", ui_motion.motionArrive), children: jsxRuntime.jsx("span", { className: utils.cn("block size-2.5", ui_common.shape.circle, "bg-current") }) }) }) }), jsxRuntime.jsx("span", { className: utils.cn(ui_common.text.high, "min-w-0 leading-6", appearance === "surface" && "flex-1"), children: option.label })] }) }) }, option.value))) })] }));
24
25
  });
25
26
  RadioGroup.displayName = "RadioGroup";
26
27
 
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroup.cjs","sources":["../../../src/components/RadioGroup.tsx"],"sourcesContent":["\"use client\";\n\nimport { Field } from \"@base-ui/react/field\";\nimport { Radio } from \"@base-ui/react/radio\";\nimport { RadioGroup as BaseRadioGroup } from \"@base-ui/react/radio-group\";\nimport React, { forwardRef, type ComponentProps, type ReactNode, type Ref } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport {\n density,\n fieldLayout,\n groupFocusRing,\n selectable,\n shape,\n state,\n stateLayer,\n text,\n} from \"./ui.common\";\nimport { motionArrive } from \"./ui.motion\";\n\nexport interface RadioGroupOption {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps\n extends Omit<ComponentProps<\"div\">, \"onChange\" | \"defaultValue\" | \"children\"> {\n options: RadioGroupOption[];\n /** The group's own label. Naming the group is the group's job, not a field's: an\n * enclosing `Field` names one control, while every option here is its own control. */\n label?: ReactNode;\n value?: string;\n defaultValue?: string;\n onValueChange?: BaseRadioGroup.Props<string>[\"onValueChange\"];\n name?: string;\n form?: string;\n required?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n /** A ref to the hidden `<input>` that participates in the form. */\n inputRef?: Ref<HTMLInputElement>;\n /** Styles the labelled group. */\n className?: string;\n}\n\n/**\n * One choice out of a list. Base UI owns the value, the roving tab index, the arrow keys,\n * the name and the form participation; Sherick UI owns the labelled column and the rows.\n */\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n (\n {\n options,\n label,\n value,\n defaultValue,\n onValueChange,\n name,\n form,\n required,\n disabled,\n readOnly,\n inputRef,\n className,\n ...groupProps\n },\n ref\n ) => {\n return (\n // The group owns the field scope its options are labelled in. Base UI scopes each\n // option's label to its own `Field.Item`, which has to sit inside a `Field.Root`.\n <Field.Root className={cn(fieldLayout, className)}>\n {label && (\n <Field.Label className={cn(\"mb-2 text-sm font-medium\", text.high)}>\n {label}\n {required && (\n <span className={cn(\"ms-1 text-sherick-danger\")} aria-hidden=\"true\">\n *\n </span>\n )}\n </Field.Label>\n )}\n <BaseRadioGroup\n {...groupProps}\n ref={ref}\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n name={name}\n form={form}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n inputRef={inputRef}\n className={cn(\"flex flex-col\")}\n >\n {options.map((option) => (\n <Field.Item\n key={option.value}\n className={cn(\n \"group flex items-stretch\",\n density.normal,\n state.enabled,\n state.effectiveDisabled,\n state.disabledRow\n )}\n >\n {/* The row itself is the label, so the whole row stays the pointer target. Inside it the\n mark and the copy are one first-line group: a wrapped label then aligns the radio to\n its first line instead of centring it on the block, while a one-line row is still\n centred in the row's own density height. The copy declares its own line height —\n `density.normal` sets the type step but no leading, and this package ships no reset —\n so the mark's 24px slot and the line it is centred on are the same 24px whatever\n line height a host happens to inherit. */}\n <Field.Label className={cn(\"flex min-w-0 flex-1 items-center\")}>\n <span className={cn(\"flex w-full items-start gap-3\")}>\n <Radio.Root\n value={option.value}\n disabled={option.disabled}\n className={cn(\n \"group relative flex size-6 shrink-0 items-center justify-center outline-none\"\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n \"flex size-6 items-center justify-center\",\n shape.circle,\n selectable.markSurface,\n selectable.mark,\n selectable.selected,\n stateLayer.track,\n groupFocusRing\n )}\n >\n <Radio.Indicator className={cn(\"flex items-center justify-center\", motionArrive)}>\n <span className={cn(\"block size-2.5\", shape.circle, \"bg-current\")} />\n </Radio.Indicator>\n </span>\n </Radio.Root>\n <span className={cn(text.high, \"min-w-0 leading-6\")}>{option.label}</span>\n </span>\n </Field.Label>\n </Field.Item>\n ))}\n </BaseRadioGroup>\n </Field.Root>\n );\n }\n);\n\nRadioGroup.displayName = \"RadioGroup\";\n\nexport default RadioGroup;\n"],"names":["forwardRef","_jsxs","Field","cn","fieldLayout","text","_jsx","BaseRadioGroup","density","state","Radio","shape","selectable","stateLayer","groupFocusRing","motionArrive"],"mappings":"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"}
1
+ {"version":3,"file":"RadioGroup.cjs","sources":["../../../src/components/RadioGroup.tsx"],"sourcesContent":["\"use client\";\n\nimport { Field } from \"@base-ui/react/field\";\nimport { Radio } from \"@base-ui/react/radio\";\nimport { RadioGroup as BaseRadioGroup } from \"@base-ui/react/radio-group\";\nimport React, { forwardRef, type ComponentProps, type ReactNode, type Ref } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport {\n density,\n fieldLayout,\n groupFocusRing,\n focusRingWithin,\n material,\n selectable,\n selectableRowSurface,\n shape,\n state,\n stateLayer,\n stateLayerQuietComposite,\n text,\n} from \"./ui.common\";\nimport { motionArrive, motionFeedback } from \"./ui.motion\";\n\nexport interface RadioGroupOption {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps\n extends Omit<ComponentProps<\"div\">, \"onChange\" | \"defaultValue\" | \"children\"> {\n options: RadioGroupOption[];\n /** Gives each choice its own selectable surface. The default keeps the compact, unfilled rows. */\n appearance?: \"default\" | \"surface\";\n /** The group's own label. Naming the group is the group's job, not a field's: an\n * enclosing `Field` names one control, while every option here is its own control. */\n label?: ReactNode;\n value?: string;\n defaultValue?: string;\n onValueChange?: BaseRadioGroup.Props<string>[\"onValueChange\"];\n name?: string;\n form?: string;\n required?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n /** A ref to the hidden `<input>` that participates in the form. */\n inputRef?: Ref<HTMLInputElement>;\n /** Styles the labelled group. */\n className?: string;\n}\n\n/**\n * One choice out of a list. Base UI owns the value, the roving tab index, the arrow keys,\n * the name and the form participation; Sherick UI owns the labelled column and the rows.\n */\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n (\n {\n options,\n appearance = \"default\",\n label,\n value,\n defaultValue,\n onValueChange,\n name,\n form,\n required,\n disabled,\n readOnly,\n inputRef,\n className,\n ...groupProps\n },\n ref\n ) => {\n return (\n // The group owns the field scope its options are labelled in. Base UI scopes each\n // option's label to its own `Field.Item`, which has to sit inside a `Field.Root`.\n <Field.Root className={cn(fieldLayout, className)}>\n {label && (\n <Field.Label className={cn(\"mb-2 text-sm font-medium\", text.high)}>\n {label}\n {required && (\n <span className={cn(\"ms-1 text-sherick-danger\")} aria-hidden=\"true\">\n *\n </span>\n )}\n </Field.Label>\n )}\n <BaseRadioGroup\n {...groupProps}\n ref={ref}\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n name={name}\n form={form}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n inputRef={inputRef}\n className={cn(\"flex flex-col\", appearance === \"surface\" && \"gap-2\")}\n >\n {options.map((option) => (\n <Field.Item\n key={option.value}\n {...(appearance === \"surface\" && readOnly ? { \"data-readonly\": \"\" } : {})}\n className={cn(\n \"group flex items-stretch\",\n density.normal,\n appearance === \"surface\" &&\n cn(\n \"relative min-w-0 forced-colors:has-[:focus-visible]:[outline-style:none]\",\n shape.control,\n material.matteQuiet,\n selectableRowSurface,\n stateLayerQuietComposite,\n focusRingWithin,\n motionFeedback\n ),\n state.enabled,\n state.effectiveDisabled,\n state.disabledRow\n )}\n >\n {/* The row itself is the label, so the whole row stays the pointer target. Inside it the\n mark and the copy are one first-line group: a wrapped label then aligns the radio to\n its first line instead of centring it on the block, while a one-line row is still\n centred in the row's own density height. The copy declares its own line height —\n `density.normal` sets the type step but no leading, and this package ships no reset —\n so the mark's 24px slot and the line it is centred on are the same 24px whatever\n line height a host happens to inherit. */}\n <Field.Label\n className={cn(\n \"flex min-w-0 flex-1 items-center\",\n appearance === \"surface\" && \"px-4 py-3\"\n )}\n >\n <span className={cn(\"flex w-full items-start gap-3\")}>\n <Radio.Root\n value={option.value}\n disabled={option.disabled}\n className={cn(\n \"group relative flex size-6 shrink-0 items-center justify-center outline-none\"\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n \"flex size-6 items-center justify-center\",\n shape.circle,\n selectable.markSurface,\n selectable.mark,\n selectable.selected,\n stateLayer.track,\n appearance === \"default\" && groupFocusRing\n )}\n >\n <Radio.Indicator className={cn(\"flex items-center justify-center\", motionArrive)}>\n <span className={cn(\"block size-2.5\", shape.circle, \"bg-current\")} />\n </Radio.Indicator>\n </span>\n </Radio.Root>\n <span className={cn(text.high, \"min-w-0 leading-6\", appearance === \"surface\" && \"flex-1\")}>{option.label}</span>\n </span>\n </Field.Label>\n </Field.Item>\n ))}\n </BaseRadioGroup>\n </Field.Root>\n );\n }\n);\n\nRadioGroup.displayName = \"RadioGroup\";\n\nexport default RadioGroup;\n"],"names":["forwardRef","_jsxs","Field","cn","fieldLayout","text","_jsx","BaseRadioGroup","density","shape","material","selectableRowSurface","stateLayerQuietComposite","focusRingWithin","motionFeedback","state","Radio","selectable","stateLayer","groupFocusRing","motionArrive"],"mappings":"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"}
@@ -8,8 +8,16 @@ var ui_motion = require('./ui.motion.cjs');
8
8
  /* A table is a quiet, dense data region: the lightest matte fill, tighter geometry than
9
9
  a card, and hairlines between rows. Row feedback is tonality only — the rows are
10
10
  scannable, not manipulated. */
11
- const Table = ({ headers, rows, className, }) => {
12
- return (jsxRuntime.jsx("div", { className: utils.cn("w-full overflow-auto", ui_common.shape.control, ui_common.material.matteQuiet, className), children: jsxRuntime.jsxs("table", { className: utils.cn("w-full border-collapse"), children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsx("tr", { className: utils.cn(ui_common.edge.header), children: headers.map((header) => (jsxRuntime.jsx("th", { className: utils.cn("px-4 py-3 text-start text-sm font-medium", ui_common.text.medium), children: header }, header))) }) }), jsxRuntime.jsx("tbody", { children: rows.map((row, i) => (jsxRuntime.jsx("tr", { className: utils.cn(ui_common.edge.row, ui_motion.motionFeedback, ui_common.state.rowHover), children: row.map((cell, j) => (jsxRuntime.jsx("td", { className: utils.cn("px-4 py-3 text-sm", ui_common.text.high), children: cell }, j))) }, i))) })] }) }));
11
+ const Table = ({ headers, rows, className, tableClassName, }) => {
12
+ const columns = headers.map((header, index) => typeof header === "string"
13
+ ? { key: `string:${index}`, label: header }
14
+ : { ...header, key: `column:${header.id}` });
15
+ return (
16
+ // Passive cells still need a keyboard-reachable surface when the table overflows.
17
+ jsxRuntime.jsx("div", { tabIndex: 0, className: utils.cn("w-full overflow-auto", ui_common.shape.control, ui_common.material.matteQuiet, ui_common.focusRing, className), children: jsxRuntime.jsxs("table", { className: utils.cn("w-full border-collapse", tableClassName), children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsx("tr", { className: utils.cn(ui_common.edge.header), children: columns.map((column) => (jsxRuntime.jsx("th", { className: utils.cn("px-4 py-3 text-start text-sm font-medium", ui_common.text.medium, column.className), children: column.label }, column.key))) }) }), jsxRuntime.jsx("tbody", { children: rows.map((row, i) => (jsxRuntime.jsx("tr", { className: utils.cn(ui_common.edge.row, ui_motion.motionFeedback, ui_common.state.rowHover), children: row.map((cell, j) => {
18
+ var _a, _b, _c;
19
+ return (jsxRuntime.jsx("td", { className: utils.cn("px-4 py-3 text-sm", ui_common.text.high, (_a = columns[j]) === null || _a === void 0 ? void 0 : _a.className), children: cell }, (_c = (_b = columns[j]) === null || _b === void 0 ? void 0 : _b.key) !== null && _c !== void 0 ? _c : `extra:${j}`));
20
+ }) }, i))) })] }) }));
13
21
  };
14
22
 
15
23
  exports.Table = Table;
@@ -1 +1 @@
1
- {"version":3,"file":"Table.cjs","sources":["../../../src/components/Table.tsx"],"sourcesContent":["import React, { type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { edge, material, shape, state, text } from \"./ui.common\";\nimport { motionFeedback } from \"./ui.motion\";\n\nexport interface TableProps {\n headers: string[];\n rows: ReactNode[][];\n className?: string;\n}\n\n/* A table is a quiet, dense data region: the lightest matte fill, tighter geometry than\n a card, and hairlines between rows. Row feedback is tonality only — the rows are\n scannable, not manipulated. */\nexport const Table = ({\n headers,\n rows,\n className,\n}: TableProps) => {\n return (\n <div className={cn(\"w-full overflow-auto\", shape.control, material.matteQuiet, className)}>\n <table className={cn(\"w-full border-collapse\")}>\n <thead>\n <tr className={cn(edge.header)}>\n {headers.map((header) => (\n <th\n key={header}\n className={cn(\"px-4 py-3 text-start text-sm font-medium\", text.medium)}\n >\n {header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((row, i) => (\n <tr key={i} className={cn(edge.row, motionFeedback, state.rowHover)}>\n {row.map((cell, j) => (\n <td key={j} className={cn(\"px-4 py-3 text-sm\", text.high)}>\n {cell}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n};\n"],"names":["_jsx","cn","shape","material","_jsxs","edge","text","motionFeedback","state"],"mappings":";;;;;;;AAWA;;AAEiC;AAC1B,MAAM,KAAK,GAAG,CAAC,EACpB,OAAO,EACP,IAAI,EACJ,SAAS,GACE,KAAI;AACf,IAAA,QACEA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEC,QAAE,CAAC,sBAAsB,EAAEC,eAAK,CAAC,OAAO,EAAEC,kBAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,EAAA,QAAA,EACvFC,eAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAEH,QAAE,CAAC,wBAAwB,CAAC,EAAA,QAAA,EAAA,CAC5CD,cAAA,CAAA,OAAA,EAAA,EAAA,QAAA,EACEA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAEC,QAAE,CAACI,cAAI,CAAC,MAAM,CAAC,EAAA,QAAA,EAC3B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,MAClBL,cAAA,CAAA,IAAA,EAAA,EAEE,SAAS,EAAEC,QAAE,CAAC,0CAA0C,EAAEK,cAAI,CAAC,MAAM,CAAC,EAAA,QAAA,EAErE,MAAM,EAAA,EAHF,MAAM,CAIR,CACN,CAAC,EAAA,CACC,EAAA,CACC,EACRN,cAAA,CAAA,OAAA,EAAA,EAAA,QAAA,EACG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,MACfA,uBAAY,SAAS,EAAEC,QAAE,CAACI,cAAI,CAAC,GAAG,EAAEE,wBAAc,EAAEC,eAAK,CAAC,QAAQ,CAAC,EAAA,QAAA,EAChE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MACfR,cAAA,CAAA,IAAA,EAAA,EAAY,SAAS,EAAEC,QAAE,CAAC,mBAAmB,EAAEK,cAAI,CAAC,IAAI,CAAC,EAAA,QAAA,EACtD,IAAI,EAAA,EADE,CAAC,CAEL,CACN,CAAC,EAAA,EALK,CAAC,CAML,CACN,CAAC,EAAA,CACI,CAAA,EAAA,CACF,EAAA,CACJ;AAEV;;"}
1
+ {"version":3,"file":"Table.cjs","sources":["../../../src/components/Table.tsx"],"sourcesContent":["import React, { type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { edge, focusRing, material, shape, state, text } from \"./ui.common\";\nimport { motionFeedback } from \"./ui.motion\";\n\nexport interface TableProps {\n headers: Array<string | TableColumn>;\n rows: ReactNode[][];\n /** Classes for the outer scrollable surface. */\n className?: string;\n /** Classes for the native table element. */\n tableClassName?: string;\n}\n\nexport interface TableColumn {\n /** Stable identity for this column, shared by its header and body cells. */\n id: string;\n label: string;\n /** Classes applied to this column's header and body cells. */\n className?: string;\n}\n\n/* A table is a quiet, dense data region: the lightest matte fill, tighter geometry than\n a card, and hairlines between rows. Row feedback is tonality only — the rows are\n scannable, not manipulated. */\nexport const Table = ({\n headers,\n rows,\n className,\n tableClassName,\n}: TableProps) => {\n const columns = headers.map((header, index): { key: string; label: string; className?: string } =>\n typeof header === \"string\"\n ? { key: `string:${index}`, label: header }\n : { ...header, key: `column:${header.id}` }\n );\n\n return (\n // Passive cells still need a keyboard-reachable surface when the table overflows.\n <div tabIndex={0} className={cn(\"w-full overflow-auto\", shape.control, material.matteQuiet, focusRing, className)}>\n <table className={cn(\"w-full border-collapse\", tableClassName)}>\n <thead>\n <tr className={cn(edge.header)}>\n {columns.map((column) => (\n <th\n key={column.key}\n className={cn(\"px-4 py-3 text-start text-sm font-medium\", text.medium, column.className)}\n >\n {column.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((row, i) => (\n <tr key={i} className={cn(edge.row, motionFeedback, state.rowHover)}>\n {row.map((cell, j) => (\n <td key={columns[j]?.key ?? `extra:${j}`} className={cn(\"px-4 py-3 text-sm\", text.high, columns[j]?.className)}>\n {cell}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n};\n"],"names":["_jsx","cn","shape","material","focusRing","_jsxs","edge","text","motionFeedback","state"],"mappings":";;;;;;;AAsBA;;AAEiC;AAC1B,MAAM,KAAK,GAAG,CAAC,EACpB,OAAO,EACP,IAAI,EACJ,SAAS,EACT,cAAc,GACH,KAAI;AACf,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,KACxC,OAAO,MAAM,KAAK;UACd,EAAE,GAAG,EAAE,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,EAAE,KAAK,EAAE,MAAM;AACzC,UAAE,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,CAAA,OAAA,EAAU,MAAM,CAAC,EAAE,CAAA,CAAE,EAAE,CAC9C;IAED;;IAEEA,cAAA,CAAA,KAAA,EAAA,EAAK,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAEC,QAAE,CAAC,sBAAsB,EAAEC,eAAK,CAAC,OAAO,EAAEC,kBAAQ,CAAC,UAAU,EAAEC,mBAAS,EAAE,SAAS,CAAC,EAAA,QAAA,EAC/GC,eAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAEJ,QAAE,CAAC,wBAAwB,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,CAC5DD,cAAA,CAAA,OAAA,EAAA,EAAA,QAAA,EACEA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAEC,QAAE,CAACK,cAAI,CAAC,MAAM,CAAC,EAAA,QAAA,EAC3B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,MAClBN,cAAA,CAAA,IAAA,EAAA,EAEE,SAAS,EAAEC,QAAE,CAAC,0CAA0C,EAAEM,cAAI,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,EAAA,QAAA,EAEvF,MAAM,CAAC,KAAK,EAAA,EAHR,MAAM,CAAC,GAAG,CAIZ,CACN,CAAC,EAAA,CACC,EAAA,CACC,EACRP,cAAA,CAAA,OAAA,EAAA,EAAA,QAAA,EACG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,MACfA,cAAA,CAAA,IAAA,EAAA,EAAY,SAAS,EAAEC,QAAE,CAACK,cAAI,CAAC,GAAG,EAAEE,wBAAc,EAAEC,eAAK,CAAC,QAAQ,CAAC,EAAA,QAAA,EAChE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;;AAAC,4BAAA,QACpBT,cAAA,CAAA,IAAA,EAAA,EAA0C,SAAS,EAAEC,QAAE,CAAC,mBAAmB,EAAEM,cAAI,CAAC,IAAI,EAAE,CAAA,EAAA,GAAA,OAAO,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,SAAS,CAAC,YAC3G,IAAI,EAAA,EADE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAA,MAAA,EAAS,CAAC,CAAA,CAAE,CAEnC;yBACN,CAAC,EAAA,EALK,CAAC,CAML,CACN,CAAC,EAAA,CACI,CAAA,EAAA,CACF,EAAA,CACJ;AAEV;;"}
@@ -280,6 +280,10 @@ const pressQuiet = "[&:not([data-disabled]):not(:disabled)]:active:before:opacit
280
280
  const pressTonal = "[&:not([data-disabled]):not(:disabled)]:active:before:opacity-[0.15]";
281
281
  const pressFilled = "[&:not([data-disabled]):not(:disabled)]:active:before:opacity-[0.26]";
282
282
  const pressTrack = "group-[:not([data-disabled]):not(:disabled)]:active:before:opacity-[0.26]";
283
+ /* A labelled control surface paints its state on a row that owns the pointer area while the
284
+ actual disabled marker belongs to a descendant control. Gate the same quiet response on that
285
+ descendant so a disabled or read-only choice does not advertise a press it cannot accept. */
286
+ const stateLayerQuietComposite = /* @__PURE__ */ utils.cx("relative", stateLayerBase, "before:rounded-[inherit] before:bg-current", "[&:not([data-disabled]):not([data-readonly]):not(:disabled):not(:has([data-disabled])):not(:has([data-readonly]))]:hover:before:opacity-[0.05]", "[&:not([data-disabled]):not([data-readonly]):not(:disabled):not(:has([data-disabled])):not(:has([data-readonly]))]:active:before:opacity-[0.09]");
283
287
  const stateLayer = {
284
288
  /* Quiet surfaces — ghost controls, navigation rows, menu options. */
285
289
  quiet: /* @__PURE__ */ utils.cx("relative", stateLayerBase, "before:rounded-[inherit] before:bg-current", hoverQuiet, pressQuiet),
@@ -593,6 +597,10 @@ const tone = {
593
597
  primitive's own `data-checked` / `data-indeterminate`, so an uncontrolled control is styled
594
598
  from the same source of truth as a controlled one. A mixed box is selected but is not
595
599
  ticked, which is why the second attribute stands beside the first. */
600
+ /* A radio's opt-in full row follows the Base control it labels. `:has` keeps uncontrolled
601
+ selection authoritative at the primitive rather than mirroring it in component state.
602
+ Keep this independent so unrelated consumers of the mark recipes can tree-shake it. */
603
+ const selectableRowSurface = "has-[[data-checked]]:bg-sherick-primary/[0.22] has-[[data-checked]]:text-sherick-ink has-[[data-checked]]:shadow-sherick-control";
596
604
  const selectable = {
597
605
  surface: /* @__PURE__ */ utils.cx("relative", elevation.recessed, ui_motion.motionFeedback),
598
606
  /* The same object one rung deeper, for a mark whose identity is its depth. */
@@ -689,10 +697,12 @@ exports.parentFocusRingInset = parentFocusRingInset;
689
697
  exports.recessedTop = recessedTop;
690
698
  exports.recipeAlphas = recipeAlphas;
691
699
  exports.selectable = selectable;
700
+ exports.selectableRowSurface = selectableRowSurface;
692
701
  exports.shape = shape;
693
702
  exports.stacking = stacking;
694
703
  exports.state = state;
695
704
  exports.stateLayer = stateLayer;
705
+ exports.stateLayerQuietComposite = stateLayerQuietComposite;
696
706
  exports.text = text;
697
707
  exports.tone = tone;
698
708
  //# sourceMappingURL=ui.common.cjs.map