@handamade/psi-react 0.20.0 → 0.22.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 (115) hide show
  1. package/README.md +1 -1
  2. package/dist/AppShell/AppShell.d.ts +51 -0
  3. package/dist/AppShell/AppShell.d.ts.map +1 -0
  4. package/dist/Banner/Banner.d.ts +35 -0
  5. package/dist/Banner/Banner.d.ts.map +1 -0
  6. package/dist/Button/Button.d.ts +4 -0
  7. package/dist/Button/Button.d.ts.map +1 -1
  8. package/dist/CopyButton/CopyButton.d.ts +23 -0
  9. package/dist/CopyButton/CopyButton.d.ts.map +1 -0
  10. package/dist/CursorPagination/CursorPagination.d.ts +29 -0
  11. package/dist/CursorPagination/CursorPagination.d.ts.map +1 -0
  12. package/dist/Field/Field.d.ts +16 -2
  13. package/dist/Field/Field.d.ts.map +1 -1
  14. package/dist/Field/useFieldControl.d.ts +40 -0
  15. package/dist/Field/useFieldControl.d.ts.map +1 -0
  16. package/dist/InlineAlert/InlineAlert.d.ts +32 -0
  17. package/dist/InlineAlert/InlineAlert.d.ts.map +1 -0
  18. package/dist/NavBar/NavBar.d.ts +10 -2
  19. package/dist/NavBar/NavBar.d.ts.map +1 -1
  20. package/dist/NavTree/NavGroup.d.ts +22 -0
  21. package/dist/NavTree/NavGroup.d.ts.map +1 -0
  22. package/dist/NavTree/NavItem.d.ts +29 -0
  23. package/dist/NavTree/NavItem.d.ts.map +1 -0
  24. package/dist/NavTree/NavTree.d.ts +23 -0
  25. package/dist/NavTree/NavTree.d.ts.map +1 -0
  26. package/dist/Skeleton/Skeleton.d.ts +22 -0
  27. package/dist/Skeleton/Skeleton.d.ts.map +1 -0
  28. package/dist/SkipLink/SkipLink.d.ts +25 -0
  29. package/dist/SkipLink/SkipLink.d.ts.map +1 -0
  30. package/dist/Table/Table.d.ts +6 -3
  31. package/dist/Table/Table.d.ts.map +1 -1
  32. package/dist/Table/TableBody.d.ts +7 -4
  33. package/dist/Table/TableBody.d.ts.map +1 -1
  34. package/dist/Table/TableCaption.d.ts +21 -0
  35. package/dist/Table/TableCaption.d.ts.map +1 -0
  36. package/dist/Table/TableCell.d.ts +15 -5
  37. package/dist/Table/TableCell.d.ts.map +1 -1
  38. package/dist/Table/TableHead.d.ts +5 -3
  39. package/dist/Table/TableHead.d.ts.map +1 -1
  40. package/dist/Table/TableHeaderCell.d.ts +5 -3
  41. package/dist/Table/TableHeaderCell.d.ts.map +1 -1
  42. package/dist/Table/TableRow.d.ts +5 -3
  43. package/dist/Table/TableRow.d.ts.map +1 -1
  44. package/dist/Tabs/Tab.d.ts.map +1 -1
  45. package/dist/Tabs/Tabs.d.ts +20 -1
  46. package/dist/Tabs/Tabs.d.ts.map +1 -1
  47. package/dist/Toast/Announcement.d.ts +38 -0
  48. package/dist/Toast/Announcement.d.ts.map +1 -0
  49. package/dist/Toast/Toast.d.ts +16 -2
  50. package/dist/Toast/Toast.d.ts.map +1 -1
  51. package/dist/Toast/ToastProvider.d.ts +27 -4
  52. package/dist/Toast/ToastProvider.d.ts.map +1 -1
  53. package/dist/Toast/ToastRegion.d.ts +26 -8
  54. package/dist/Toast/ToastRegion.d.ts.map +1 -1
  55. package/dist/Toast/status.d.ts +15 -0
  56. package/dist/Toast/status.d.ts.map +1 -0
  57. package/dist/Toast/useToast.d.ts +17 -3
  58. package/dist/Toast/useToast.d.ts.map +1 -1
  59. package/dist/Toolbar/Toolbar.d.ts +26 -4
  60. package/dist/Toolbar/Toolbar.d.ts.map +1 -1
  61. package/dist/a11y-meta.d.ts.map +1 -1
  62. package/dist/index.d.ts +30 -4
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +1305 -958
  65. package/dist/manifest.json +1049 -235
  66. package/dist/patterns.json +671 -3
  67. package/dist/styles.css +1 -1
  68. package/docs/Announcement.md +37 -0
  69. package/docs/AppShell.md +46 -0
  70. package/docs/AspectRatio.md +1 -1
  71. package/docs/Banner.md +54 -0
  72. package/docs/Button.md +2 -1
  73. package/docs/Card.md +1 -1
  74. package/docs/Checkbox.md +1 -1
  75. package/docs/CopyButton.md +51 -0
  76. package/docs/CursorPagination.md +45 -0
  77. package/docs/DescriptionItem.md +1 -1
  78. package/docs/DescriptionList.md +1 -1
  79. package/docs/Dialog.md +1 -1
  80. package/docs/Field.md +4 -3
  81. package/docs/IconButton.md +1 -1
  82. package/docs/InlineAlert.md +53 -0
  83. package/docs/Input.md +1 -1
  84. package/docs/Menu.md +1 -1
  85. package/docs/MenuItem.md +1 -1
  86. package/docs/MenuSeparator.md +1 -1
  87. package/docs/NavBar.md +4 -2
  88. package/docs/NavGroup.md +40 -0
  89. package/docs/NavItem.md +40 -0
  90. package/docs/NavTree.md +39 -0
  91. package/docs/Pagination.md +1 -1
  92. package/docs/Panel.md +1 -1
  93. package/docs/Select.md +1 -1
  94. package/docs/Skeleton.md +50 -0
  95. package/docs/SkipLink.md +40 -0
  96. package/docs/Switch.md +1 -1
  97. package/docs/Tab.md +1 -1
  98. package/docs/TabList.md +1 -1
  99. package/docs/TabPanel.md +1 -1
  100. package/docs/Table.md +1 -1
  101. package/docs/TableBody.md +3 -2
  102. package/docs/TableCaption.md +39 -0
  103. package/docs/TableCell.md +5 -2
  104. package/docs/TableHead.md +2 -1
  105. package/docs/TableHeaderCell.md +2 -1
  106. package/docs/TableRow.md +2 -1
  107. package/docs/Tabs.md +3 -3
  108. package/docs/Tag.md +1 -1
  109. package/docs/Toast.md +5 -3
  110. package/docs/ToastProvider.md +6 -3
  111. package/docs/ToastRegion.md +5 -5
  112. package/docs/Toolbar.md +5 -3
  113. package/docs/Tooltip.md +1 -1
  114. package/llms.txt +41 -9
  115. package/package.json +2 -2
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @handamade/psi-react
2
2
 
3
- 34 React 19 components consuming @handamade/psi-tokens. Zero runtime dependencies, CSS Modules, full TypeScript support.
3
+ 46 React 19 components consuming @handamade/psi-tokens. Zero runtime dependencies, CSS Modules, full TypeScript support.
4
4
 
5
5
  ## Installation
6
6
 
@@ -0,0 +1,51 @@
1
+ import type { HTMLAttributes, ReactNode, Ref } from "react";
2
+ export interface AppShellProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
3
+ /** A `SkipLink` (D88), rendered first so it is the first tab stop. Point its
4
+ * `href` at `#` plus `mainId`. */
5
+ skipLink?: ReactNode;
6
+ /** The header row, usually a `NavBar` (D88). It sits in a row of its own
7
+ * above the sidebar and `main`, so nothing scrolls under it. */
8
+ header?: ReactNode;
9
+ /** The sidebar's content, usually a `NavTree` (D88). The shell wraps it in a
10
+ * `<div>`, not an `<aside>`: a `NavTree` is already the landmark. */
11
+ sidebar?: ReactNode;
12
+ /** The page, rendered inside `<main>` (D88). */
13
+ children?: ReactNode;
14
+ /** Whether the sidebar is shown. Controlled: wire your Menu toggle's
15
+ * `aria-expanded` and this to one piece of state. Closed, the sidebar is
16
+ * `hidden`, so it leaves the layout and the accessibility tree, and stays in
17
+ * the DOM so the toggle's `aria-controls` keeps naming an element (D88).
18
+ * @default true */
19
+ sidebarOpen?: boolean;
20
+ /** A theme name for the sidebar alone, such as `"dark"`: sets
21
+ * `data-psi-theme` on the sidebar element, so every token inside re-resolves
22
+ * under that theme while the rest of the page keeps its own (D88). The
23
+ * sidebar paints `--psi-bg-primary` itself; a theme paints no background. */
24
+ sidebarTheme?: string;
25
+ /** `id` of the sidebar element, which a toggle names with `aria-controls`
26
+ * (D88). @default "sidebar" */
27
+ sidebarId?: string;
28
+ /** `id` of `<main>`, which a `SkipLink`'s `href` names (D88). @default "main" */
29
+ mainId?: string;
30
+ className?: string;
31
+ /** Forwarded ref to the root `<div>`. */
32
+ ref?: Ref<HTMLDivElement>;
33
+ }
34
+ /** The frame of an application (D88): a header row over a sidebar and a
35
+ * `<main>` that each scroll on their own, filling the viewport (`100dvh`).
36
+ * Because the header has a row of its own and `main` is its own scroller,
37
+ * nothing scrolls under the header, so a focused element is never obscured by
38
+ * it (WCAG 2.2 *Focus Not Obscured*) without `scroll-padding`.
39
+ *
40
+ * `main` carries `id={mainId}` and `tabIndex={-1}`: the target of a `SkipLink`,
41
+ * not a tab stop; focused by the skip link it draws the shared focus ring
42
+ * inside its box. A closed sidebar is `hidden`, not narrowed to icons; there is
43
+ * no responsive drawer and no stored open state, so this is a desktop frame.
44
+ * A page whose document must scroll as a whole does not use `AppShell`. Mount it
45
+ * at the root of the page with no margin or padding around it: it is `100dvh`
46
+ * tall, so anything around it makes the document scroll and slides the frame.
47
+ *
48
+ * Do not place a `ToastRegion` at `top-start` in an app with a skip link: the
49
+ * native top layer paints over the focused link. */
50
+ export declare function AppShell({ skipLink, header, sidebar, children, sidebarOpen, sidebarTheme, sidebarId, mainId, className, ref, ...rest }: AppShellProps): import("react").JSX.Element;
51
+ //# sourceMappingURL=AppShell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../src/AppShell/AppShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5D,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IACrF;sCACkC;IAClC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;oEACgE;IAChE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;yEACqE;IACrE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;uBAImB;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;iFAG6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;mCAC+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;oDAeoD;AACpD,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,MAAM,EACN,OAAO,EACP,QAAQ,EACR,WAAkB,EAClB,YAAY,EACZ,SAAqB,EACrB,MAAe,EACf,SAAS,EACT,GAAG,EACH,GAAG,IAAI,EACR,EAAE,aAAa,+BAgBf"}
@@ -0,0 +1,35 @@
1
+ import type { HTMLAttributes, ReactNode, Ref } from "react";
2
+ import type { StatusVariant } from "../Toast/status.js";
3
+ /** Banner's variants are the shared status axis (see Toast/status.ts). */
4
+ export type BannerVariant = StatusVariant;
5
+ export interface BannerProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
6
+ /** Status variant. @default "neutral" */
7
+ variant?: BannerVariant;
8
+ /** A short heading, rendered before the body in the medium weight. */
9
+ title?: ReactNode;
10
+ /** The message. */
11
+ children: ReactNode;
12
+ /** Trailing affordance — a ghost Button (Review, Retry, Learn more). */
13
+ action?: ReactNode;
14
+ /** When provided, renders the dismiss button and calls this. Banner does not
15
+ * remove itself; the owner disposes. */
16
+ onDismiss?: () => void;
17
+ /** The visually hidden status word (D83). A string replaces the default
18
+ * ("Success:", "Warning:", "Error:") — pass the translated word; `null`
19
+ * drops it. Unset keeps the default, and `neutral` has none. */
20
+ statusLabel?: string | null;
21
+ className?: string;
22
+ /** Forwarded ref to the underlying `<div>`. */
23
+ ref?: Ref<HTMLDivElement>;
24
+ }
25
+ /** A full-width, page-level status message (D86). It is not a live region:
26
+ * it renders no `role` and no `aria-live`, so mounting one announces nothing,
27
+ * and announcing stays the application's — route the same event through a
28
+ * `ToastRegion` or an `Announcement` if it must be spoken.
29
+ *
30
+ * Controlled and presentational: it holds no state and never removes itself;
31
+ * `onDismiss` reports and the owner disposes. A tinted strip with no radius
32
+ * and no border, it is meant to span the page edge to edge, above the
33
+ * content. For the same message inside content, use `InlineAlert`. */
34
+ export declare function Banner({ variant, title, children, action, onDismiss, statusLabel, className, ref, ...rest }: BannerProps): import("react").JSX.Element;
35
+ //# sourceMappingURL=Banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Banner.d.ts","sourceRoot":"","sources":["../../src/Banner/Banner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAI5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,0EAA0E;AAC1E,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC;AAE1C,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAChF,yCAAyC;IACzC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,sEAAsE;IACtE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,mBAAmB;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,wEAAwE;IACxE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;4CACwC;IACxC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB;;oEAEgE;IAChE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B;AASD;;;;;;;;sEAQsE;AACtE,wBAAgB,MAAM,CAAC,EACrB,OAAmB,EACnB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,WAAW,EACX,SAAS,EACT,GAAG,EACH,GAAG,IAAI,EACR,EAAE,WAAW,+BAuBb"}
@@ -8,6 +8,10 @@ export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
8
8
  variant?: Variant;
9
9
  /** Height in px (24 | 32 | 40 | 48). @default 32 */
10
10
  size?: Size;
11
+ /** Button type. Declared so the manifest lists it and a pattern can say
12
+ * `submit` (D87). No default is set: the platform's applies — `submit`
13
+ * inside a form, a plain button elsewhere. */
14
+ type?: "button" | "submit" | "reset";
11
15
  /** Render as an anchor with this href (D33). disabled → aria-disabled,
12
16
  * no href attribute, pointer-events: none. */
13
17
  href?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/Button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EAEpB,GAAG,EACH,SAAS,EACV,MAAM,OAAO,CAAC;AAGf,KAAK,OAAO,GACR,QAAQ,GACR,eAAe,GACf,SAAS,GACT,gBAAgB,GAChB,OAAO,GACP,QAAQ,GACR,eAAe,GACf,SAAS,CAAC;AAEd,KAAK,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAE9B,MAAM,WAAW,WAAY,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC1E,qBAAqB;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,yCAAyC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;kDAC8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,CAAC;CAClD;AAoBD;8CAC8C;AAC9C,wBAAgB,MAAM,CAAC,EACrB,OAAmB,EACnB,IAAS,EACT,IAAI,EACJ,MAAM,EACN,GAAG,EACH,QAAQ,EACR,SAAS,EACT,OAAO,EACP,GAAG,EACH,GAAG,IAAI,EACR,EAAE,WAAW,+BA0Cb"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/Button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EAEpB,GAAG,EACH,SAAS,EACV,MAAM,OAAO,CAAC;AAGf,KAAK,OAAO,GACR,QAAQ,GACR,eAAe,GACf,SAAS,GACT,gBAAgB,GAChB,OAAO,GACP,QAAQ,GACR,eAAe,GACf,SAAS,CAAC;AAEd,KAAK,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAE9B,MAAM,WAAW,WAAY,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC1E,qBAAqB;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,yCAAyC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;kDAE8C;IAC9C,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC;kDAC8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,CAAC;CAClD;AAoBD;8CAC8C;AAC9C,wBAAgB,MAAM,CAAC,EACrB,OAAmB,EACnB,IAAS,EACT,IAAI,EACJ,MAAM,EACN,GAAG,EACH,QAAQ,EACR,SAAS,EACT,OAAO,EACP,GAAG,EACH,GAAG,IAAI,EACR,EAAE,WAAW,+BA0Cb"}
@@ -0,0 +1,23 @@
1
+ import type { ButtonProps } from "../Button/Button.js";
2
+ export interface CopyButtonProps {
3
+ /** The text written to the clipboard. */
4
+ value: string;
5
+ /** Visible text of the button. @default "Copy" */
6
+ label?: string;
7
+ /** Button height in px. @default 32 */
8
+ size?: 24 | 32 | 40 | 48;
9
+ /** Button variant. @default "ghost" */
10
+ variant?: ButtonProps["variant"];
11
+ /** Called with the outcome once the clipboard write settles. `"failed"` covers
12
+ * a rejected write and an environment with no clipboard API. */
13
+ onCopy?: (result: "copied" | "failed") => void;
14
+ className?: string;
15
+ }
16
+ /** Not a live region: it renders no role and no `aria-live`, never changes its
17
+ * label or icon after a copy, and announces nothing. The application speaks
18
+ * the result — route `onCopy` through its announcer or a Toast (D86).
19
+ *
20
+ * Copies `value` to the clipboard when pressed. A `Button` with a leading
21
+ * `IconCopy` and a visible label; the icon only reinforces the word. */
22
+ export declare function CopyButton({ value, label, size, variant, onCopy, className, }: CopyButtonProps): import("react").JSX.Element;
23
+ //# sourceMappingURL=CopyButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CopyButton.d.ts","sourceRoot":"","sources":["../../src/CopyButton/CopyButton.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACzB,uCAAuC;IACvC,OAAO,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACjC;oEACgE;IAChE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAC;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;wEAKwE;AACxE,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAc,EACd,IAAS,EACT,OAAiB,EACjB,MAAM,EACN,SAAS,GACV,EAAE,eAAe,+BAuBjB"}
@@ -0,0 +1,29 @@
1
+ export interface CursorPaginationProps {
2
+ /** Whether a previous page exists — the consumer knows, from its tokens. */
3
+ hasPrevious: boolean;
4
+ /** Whether a next page exists. */
5
+ hasNext: boolean;
6
+ /** Called when the user asks for the previous page. */
7
+ onPrevious: () => void;
8
+ /** Called when the user asks for the next page. */
9
+ onNext: () => void;
10
+ /** Visible text of the previous button. @default "Previous" */
11
+ previousLabel?: string;
12
+ /** Visible text of the next button. @default "Next" */
13
+ nextLabel?: string;
14
+ /** Button height in px. @default 32 */
15
+ size?: 32 | 40;
16
+ /** Accessible name for the nav landmark. @default "Pagination" */
17
+ "aria-label"?: string;
18
+ className?: string;
19
+ }
20
+ /** A pager for a list that pages by cursor (D85): a backend that returns a
21
+ * `nextPageToken` and no page count. Two `ghost` Buttons with visible words in
22
+ * a `<nav>`; the chevrons only reinforce them. A direction that is not
23
+ * available is disabled. It holds no state and knows nothing about pages —
24
+ * the consumer holds the tokens and answers `hasPrevious` / `hasNext`.
25
+ *
26
+ * A sibling of `Pagination`, not a mode of it: `Pagination`'s contract is a
27
+ * page count and numbers, and this one has neither. */
28
+ export declare function CursorPagination({ hasPrevious, hasNext, onPrevious, onNext, previousLabel, nextLabel, size, "aria-label": ariaLabel, className, }: CursorPaginationProps): import("react").JSX.Element;
29
+ //# sourceMappingURL=CursorPagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CursorPagination.d.ts","sourceRoot":"","sources":["../../src/CursorPagination/CursorPagination.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,qBAAqB;IACpC,4EAA4E;IAC5E,WAAW,EAAE,OAAO,CAAC;IACrB,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,uDAAuD;IACvD,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,mDAAmD;IACnD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;IACf,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;uDAOuD;AACvD,wBAAgB,gBAAgB,CAAC,EAC/B,WAAW,EACX,OAAO,EACP,UAAU,EACV,MAAM,EACN,aAA0B,EAC1B,SAAkB,EAClB,IAAS,EACT,YAAY,EAAE,SAAwB,EACtC,SAAS,GACV,EAAE,qBAAqB,+BAgBvB"}
@@ -3,6 +3,10 @@ import type { HTMLAttributes, ReactNode, Ref } from "react";
3
3
  export interface FieldContextValue {
4
4
  /** Generated (or htmlFor-overridden) id the label points at. */
5
5
  id: string;
6
+ /** id of the rendered <label>, when there is one and the Field is not a
7
+ * group. A <label for> names only a labelable element, so a control that is
8
+ * not one (a combobox div, say) names itself with aria-labelledby (D84). */
9
+ labelId?: string;
6
10
  /** id of the rendered message line, if any — joins aria-describedby. */
7
11
  describedBy?: string;
8
12
  /** True when the Field carries an error. */
@@ -23,6 +27,12 @@ export interface FieldProps extends HTMLAttributes<HTMLElement> {
23
27
  error?: ReactNode;
24
28
  /** Renders the required marker and flows `required` to the control. @default false */
25
29
  required?: boolean;
30
+ /** With `required`, the label shows this text — "(Required)", say — instead
31
+ * of the asterisk, so the requirement is stated in words and not by a glyph
32
+ * alone (D84). Visible and aria-hidden: the control carries the programmatic
33
+ * signal (`required` / `aria-required`), and a screen reader that heard both
34
+ * would say it twice. Without `required` it renders nothing. */
35
+ requiredText?: string;
26
36
  /** Group mode: fieldset/legend wrapping several self-labeled controls
27
37
  * (Checkbox/Switch); the message describes the whole group. @default false */
28
38
  group?: boolean;
@@ -38,6 +48,10 @@ export interface FieldProps extends HTMLAttributes<HTMLElement> {
38
48
  }
39
49
  /** Labeled form-row wrapper: label above, control, one message line below —
40
50
  * description normally, error when set (aria-live unless `announce={false}`).
41
- * Auto-wires id/aria-describedby/aria-invalid into Input and Select (D49). */
42
- export declare function Field({ label, description, error, required, group, htmlFor, announce, className, children, ref, ...rest }: FieldProps): import("react").JSX.Element;
51
+ * Auto-wires id/aria-describedby/aria-invalid into Input and Select (D49).
52
+ * Overriding `--psi-field-gap` or `--psi-field-label-height` on a narrower
53
+ * scope than the theme root, inside a `Toolbar align="start"` row, also needs
54
+ * `--psi-toolbar-action-offset` set on that same scope, or the row's button
55
+ * keeps the theme-root offset (D92). */
56
+ export declare function Field({ label, description, error, required, requiredText, group, htmlFor, announce, className, children, ref, ...rest }: FieldProps): import("react").JSX.Element;
43
57
  //# sourceMappingURL=Field.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../src/Field/Field.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5D,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IACX,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,YAAY,mDAAgD,CAAC;AAE1E,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,WAAW,CAAC;IAC7D,qCAAqC;IACrC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,oEAAoE;IACpE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;8DAC0D;IAC1D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,sFAAsF;IACtF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;kFAC8E;IAC9E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;iDAG6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yCAAyC;IACzC,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,GAAG,mBAAmB,CAAC,CAAC;CACjD;AAED;;8EAE8E;AAC9E,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,WAAW,EACX,KAAK,EACL,QAAgB,EAChB,KAAa,EACb,OAAO,EACP,QAAe,EACf,SAAS,EACT,QAAQ,EACR,GAAG,EACH,GAAG,IAAI,EACR,EAAE,UAAU,+BAwDZ"}
1
+ {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../src/Field/Field.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5D,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IACX;;gFAE4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,YAAY,mDAAgD,CAAC;AAE1E,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,WAAW,CAAC;IAC7D,qCAAqC;IACrC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,oEAAoE;IACpE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;8DAC0D;IAC1D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,sFAAsF;IACtF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;oEAIgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;kFAC8E;IAC9E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;iDAG6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yCAAyC;IACzC,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,GAAG,mBAAmB,CAAC,CAAC;CACjD;AAED;;;;;;wCAMwC;AACxC,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,WAAW,EACX,KAAK,EACL,QAAgB,EAChB,YAAY,EACZ,KAAa,EACb,OAAO,EACP,QAAe,EACf,SAAS,EACT,QAAQ,EACR,GAAG,EACH,GAAG,IAAI,EACR,EAAE,UAAU,+BA+DZ"}
@@ -0,0 +1,40 @@
1
+ /** What a control spreads onto its focusable element to join a Field (D84).
2
+ * Each key is present only when the Field supplies it: the flags are `true`
3
+ * or absent, never `false`. */
4
+ export interface FieldControlProps {
5
+ /** The id the Field's label points at. */
6
+ id?: string;
7
+ /** The Field's label. A `<label for>` names only a labelable element (input,
8
+ * select, textarea, button), and a custom control is usually a div, so the
9
+ * label is handed over by reference as well. */
10
+ "aria-labelledby"?: string;
11
+ /** The Field's message line — its description, or its error when set. */
12
+ "aria-describedby"?: string;
13
+ /** Present while the Field carries an error. */
14
+ "aria-invalid"?: true;
15
+ /** Present while the Field is required. */
16
+ "aria-required"?: true;
17
+ /** Present while the Field is required, for a native form control. */
18
+ required?: true;
19
+ }
20
+ /** The wiring a Field gives its control, as props, for a control Psi did not
21
+ * write (D84) — a combo box or date-time picker built on another library, say.
22
+ * Spread the result onto the element that takes focus:
23
+ *
24
+ * const field = useFieldControl();
25
+ * <div role="combobox" {...field} />
26
+ *
27
+ * Inside a Field it returns the `id` the label points at, `aria-labelledby`
28
+ * for the label itself (a `<label for>` names only a labelable element, and a
29
+ * div is not one), `aria-describedby` for the message line, and
30
+ * `aria-invalid`, `aria-required` and `required` when the Field sets them —
31
+ * the wiring Input and Select do for themselves, plus the name they get from
32
+ * `<label for>` for free.
33
+ * Outside a Field it returns an empty object, so a control can be used with
34
+ * or without one.
35
+ *
36
+ * The element must carry a role that admits `aria-required` (combobox,
37
+ * textbox, listbox, spinbutton, …). If it also merges its own
38
+ * `aria-describedby`, join the two ids with a space. */
39
+ export declare function useFieldControl(): FieldControlProps;
40
+ //# sourceMappingURL=useFieldControl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFieldControl.d.ts","sourceRoot":"","sources":["../../src/Field/useFieldControl.ts"],"names":[],"mappings":"AAGA;;+BAE+B;AAC/B,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;oDAEgD;IAChD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,IAAI,CAAC;IACvB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;wDAkBwD;AACxD,wBAAgB,eAAe,IAAI,iBAAiB,CAUnD"}
@@ -0,0 +1,32 @@
1
+ import type { HTMLAttributes, ReactNode, Ref } from "react";
2
+ import type { StatusVariant } from "../Toast/status.js";
3
+ /** InlineAlert's variants are the shared status axis (see Toast/status.ts). */
4
+ export type InlineAlertVariant = StatusVariant;
5
+ export interface InlineAlertProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
6
+ /** Status variant. @default "neutral" */
7
+ variant?: InlineAlertVariant;
8
+ /** A short heading, rendered before the body in the medium weight. */
9
+ title?: ReactNode;
10
+ /** The message. */
11
+ children: ReactNode;
12
+ /** Trailing affordance — a ghost Button (Review, Retry, Learn more). */
13
+ action?: ReactNode;
14
+ /** The visually hidden status word (D83). A string replaces the default
15
+ * ("Success:", "Warning:", "Error:") — pass the translated word; `null`
16
+ * drops it. Unset keeps the default, and `neutral` has none. */
17
+ statusLabel?: string | null;
18
+ className?: string;
19
+ /** Forwarded ref to the underlying `<div>`. */
20
+ ref?: Ref<HTMLDivElement>;
21
+ }
22
+ /** Not `role="alert"`, despite its name. It is not a live region: it renders
23
+ * no `role` and no `aria-live`, so mounting one announces nothing, and
24
+ * announcing stays the application's — route the same event through a
25
+ * `ToastRegion` or an `Announcement` if it must be spoken.
26
+ *
27
+ * A status message that sits inside content (D86): above a form, in a panel.
28
+ * A tinted surface with a 1px border in the variant's colour and a radius; it
29
+ * fills the width of its container rather than setting its own. Presentational
30
+ * and stateless, with no dismiss button. For a page-wide strip, use `Banner`. */
31
+ export declare function InlineAlert({ variant, title, children, action, statusLabel, className, ref, ...rest }: InlineAlertProps): import("react").JSX.Element;
32
+ //# sourceMappingURL=InlineAlert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InlineAlert.d.ts","sourceRoot":"","sources":["../../src/InlineAlert/InlineAlert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,+EAA+E;AAC/E,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAC;AAE/C,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACrF,yCAAyC;IACzC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,sEAAsE;IACtE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,mBAAmB;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,wEAAwE;IACxE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;oEAEgE;IAChE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B;AASD;;;;;;;;iFAQiF;AACjF,wBAAgB,WAAW,CAAC,EAC1B,OAAmB,EACnB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,WAAW,EACX,SAAS,EACT,GAAG,EACH,GAAG,IAAI,EACR,EAAE,gBAAgB,+BAkBlB"}
@@ -4,11 +4,19 @@ export interface NavBarProps extends HTMLAttributes<HTMLElement> {
4
4
  brand?: ReactNode;
5
5
  /** Trailing actions slot (theme switch, CTA). */
6
6
  actions?: ReactNode;
7
- /** Nav links. */
7
+ /** Nav links. The `<nav>` renders only when there are children, so a bar with
8
+ * a brand and actions and no links has no empty landmark (D88). */
8
9
  children?: ReactNode;
10
+ /** Accessible name of the links' `<nav>` (its `aria-label`). Rest props land
11
+ * on the `<header>`, so this is the only way to label the `<nav>` (D88). */
12
+ navLabel?: string;
13
+ /** Lay the row out at full width: it drops `psi-container` (the centred
14
+ * max-width column) and keeps the `--psi-gutter` side padding. For an
15
+ * application header over a full-width frame (D88). @default false */
16
+ fluid?: boolean;
9
17
  /** Forwarded ref to the header element. */
10
18
  ref?: Ref<HTMLElement>;
11
19
  }
12
20
  /** Top navigation bar with brand, nav-link, and trailing-action slots. */
13
- export declare function NavBar({ brand, actions, children, className, ref, ...rest }: NavBarProps): import("react").JSX.Element;
21
+ export declare function NavBar({ brand, actions, children, navLabel, fluid, className, ref, ...rest }: NavBarProps): import("react").JSX.Element;
14
22
  //# sourceMappingURL=NavBar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NavBar.d.ts","sourceRoot":"","sources":["../../src/NavBar/NavBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5D,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,WAAW,CAAC;IAC9D,uDAAuD;IACvD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,iDAAiD;IACjD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,iBAAiB;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,2CAA2C;IAC3C,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;CACxB;AAED,0EAA0E;AAC1E,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAWxF"}
1
+ {"version":3,"file":"NavBar.d.ts","sourceRoot":"","sources":["../../src/NavBar/NavBar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5D,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,WAAW,CAAC;IAC9D,uDAAuD;IACvD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,iDAAiD;IACjD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;uEACmE;IACnE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;gFAC4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;0EAEsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2CAA2C;IAC3C,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;CACxB;AAED,0EAA0E;AAC1E,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAa,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAgBjH"}
@@ -0,0 +1,22 @@
1
+ import type { ReactNode } from "react";
2
+ export interface NavGroupProps {
3
+ /** The group's visible label, such as "Reports". */
4
+ label: ReactNode;
5
+ /** Whether the group's items are shown. Controlled. */
6
+ open: boolean;
7
+ /** Called with the next state when the button is pressed. The group never
8
+ * changes `open` itself. */
9
+ onOpenChange: (open: boolean) => void;
10
+ /** `NavItem`s of the group. */
11
+ children: ReactNode;
12
+ className?: string;
13
+ }
14
+ /** A collapsible group of `NavItem`s in a `NavTree` (D88). Controlled-only,
15
+ * like `Tabs` (D67): `open` and `onOpenChange` are required and nothing is
16
+ * remembered. Renders a native `<button aria-expanded aria-controls>` over a
17
+ * `<ul>` that is `hidden` when closed, so the items leave the layout and the
18
+ * accessibility tree while `aria-controls` keeps naming an element. The
19
+ * chevron turns with the state and is `aria-hidden`: the label and
20
+ * `aria-expanded` carry the meaning. */
21
+ export declare function NavGroup({ label, open, onOpenChange, children, className }: NavGroupProps): import("react").JSX.Element;
22
+ //# sourceMappingURL=NavGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavGroup.d.ts","sourceRoot":"","sources":["../../src/NavTree/NavGroup.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,KAAK,EAAE,SAAS,CAAC;IACjB,uDAAuD;IACvD,IAAI,EAAE,OAAO,CAAC;IACd;gCAC4B;IAC5B,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,+BAA+B;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;wCAMwC;AACxC,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,aAAa,+BAoBzF"}
@@ -0,0 +1,29 @@
1
+ import type { HTMLAttributes, ReactNode, Ref } from "react";
2
+ export interface NavItemProps extends Omit<HTMLAttributes<HTMLLIElement>, "children"> {
3
+ /** Without `href`: one anchor, your router's link. With `href`: the link's
4
+ * text. */
5
+ children: ReactNode;
6
+ /** Render the anchor yourself (D88), for a plain link or a preset: the
7
+ * `<li>` holds `<a href>` with `children` as its text. Router apps leave it
8
+ * out and pass their own link as the child, so the link keeps its own
9
+ * handlers. */
10
+ href?: string;
11
+ /** Mark the link as the current page (`aria-current="page"`): on the
12
+ * anchor `href` renders, or on the single element you pass as a child (D93).
13
+ * Without `current`, a child's own `aria-current` is left alone, so a router
14
+ * that marks its active link keeps working. */
15
+ current?: boolean;
16
+ className?: string;
17
+ /** Forwarded ref to the `<li>`. */
18
+ ref?: Ref<HTMLLIElement>;
19
+ }
20
+ /** One entry of a `NavTree` (D88): an `<li>` that styles the single anchor
21
+ * inside it. Router apps pass their own link as the child, so it keeps its
22
+ * `href` and handlers; with `current`, `NavItem` clones it to add
23
+ * `aria-current="page"` (D93), as `Menu` clones its trigger. `href` is for
24
+ * plain links and for presets, where the compose tree can hold only manifest
25
+ * components and a raw `<a>` is not one. The current page is never marked by
26
+ * colour alone: medium weight, a raised surface and a bar at the inline
27
+ * start. */
28
+ export declare function NavItem({ children, href, current, className, ref, ...rest }: NavItemProps): import("react").JSX.Element;
29
+ //# sourceMappingURL=NavItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavItem.d.ts","sourceRoot":"","sources":["../../src/NavTree/NavItem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAgB,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG1E,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC;IACnF;eACW;IACX,QAAQ,EAAE,SAAS,CAAC;IACpB;;;mBAGe;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;mDAG+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,GAAG,CAAC,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;CAC1B;AAED;;;;;;;YAOY;AACZ,wBAAgB,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,YAAY,+BAuBzF"}
@@ -0,0 +1,23 @@
1
+ import type { HTMLAttributes, ReactNode, Ref } from "react";
2
+ export interface NavTreeProps extends Omit<HTMLAttributes<HTMLElement>, "aria-label" | "children"> {
3
+ /**
4
+ * Accessible name of the navigation landmark, such as "Main". Required: an
5
+ * app has more than one `<nav>` (a header's, a sidebar's), and an unnamed
6
+ * one is indistinguishable from the rest. Declared here rather than
7
+ * inherited so docgen keeps it in the manifest (D60).
8
+ */
9
+ "aria-label": string;
10
+ /** `NavItem`s and `NavGroup`s — each renders an `<li>`. */
11
+ children: ReactNode;
12
+ className?: string;
13
+ /** Forwarded ref to the `<nav>`. */
14
+ ref?: Ref<HTMLElement>;
15
+ }
16
+ /** A navigation tree (D88): a `<nav aria-label>` around a `<ul>` of `NavItem`s
17
+ * and `NavGroup`s. Native elements only — *Tab* moves through the group
18
+ * buttons and the links of open groups; there is no roving focus and no
19
+ * `role="menu"` or `role="tree"`, because site navigation is a list of links,
20
+ * not a widget. Router-agnostic: pass your router's link inside each
21
+ * `NavItem`, with `aria-current="page"` on the current one. */
22
+ export declare function NavTree({ children, className, ref, ...rest }: NavTreeProps): import("react").JSX.Element;
23
+ //# sourceMappingURL=NavTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavTree.d.ts","sourceRoot":"","sources":["../../src/NavTree/NavTree.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5D,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IAChG;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;CACxB;AAED;;;;;+DAK+D;AAC/D,wBAAgB,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,YAAY,+BAO1E"}
@@ -0,0 +1,22 @@
1
+ import type { HTMLAttributes, Ref } from "react";
2
+ export interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {
3
+ /** `text` renders `lines` stacked bars; `block` one box. @default "text" */
4
+ variant?: "text" | "block";
5
+ /** Number of text lines; the last of several is shorter. Text only. @default 1 */
6
+ lines?: number;
7
+ /** Height of a block, from the size scale. Block only. @default 40 */
8
+ size?: 24 | 32 | 40 | 48;
9
+ className?: string;
10
+ /** Forwarded ref to the underlying `<div>`. */
11
+ ref?: Ref<HTMLDivElement>;
12
+ }
13
+ /** A loading placeholder. It is not a live region: it renders no `role` and
14
+ * no `aria-live`, and it is always `aria-hidden="true"`, so assistive tech
15
+ * skips it entirely. Put `aria-busy` on the region the skeleton stands for —
16
+ * that is what tells a screen reader the content is coming.
17
+ *
18
+ * Its width fills the container; size the container, not the skeleton. The
19
+ * pulse is an opacity animation that stops under
20
+ * `prefers-reduced-motion: reduce` (D86). */
21
+ export declare function Skeleton({ variant, lines, size, className, ref, ...rest }: SkeletonProps): import("react").JSX.Element;
22
+ //# sourceMappingURL=Skeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skeleton.d.ts","sourceRoot":"","sources":["../../src/Skeleton/Skeleton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAGjD,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,cAAc,CAAC;IACnE,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B;AAED;;;;;;;6CAO6C;AAC7C,wBAAgB,QAAQ,CAAC,EACvB,OAAgB,EAChB,KAAS,EACT,IAAS,EACT,SAAS,EACT,GAAG,EACH,GAAG,IAAI,EACR,EAAE,aAAa,+BAiBf"}
@@ -0,0 +1,25 @@
1
+ import type { AnchorHTMLAttributes, ReactNode, Ref } from "react";
2
+ export interface SkipLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
3
+ /** Fragment of the element to skip to, such as `"#main"`. The target must be
4
+ * focusable (`tabIndex={-1}` is enough), or focus does not move. */
5
+ href: string;
6
+ /** Visible text, such as "Skip to content". */
7
+ children: ReactNode;
8
+ /** Forwarded ref to the anchor. */
9
+ ref?: Ref<HTMLAnchorElement>;
10
+ }
11
+ /** A link to the page's main content, invisible until it takes keyboard focus
12
+ * and then fixed at the inline-start top corner on a surface, drawing the
13
+ * shared focus ring (D88). Render it first in the document.
14
+ *
15
+ * No script: native fragment navigation moves focus to a target that is
16
+ * focusable, so the next *Tab* continues from inside it. `AppShell`'s `main`
17
+ * is one (`tabIndex={-1}`); a bare `<main>` is not, so give it one.
18
+ *
19
+ * A modal `Dialog` makes the rest of the document inert, so the link never
20
+ * needs to beat one. A `ToastRegion` is on the native top layer, which paints
21
+ * above everything whatever its `z-index`: do not place one at `top-start`
22
+ * (its default is `bottom-end`) in an app with a skip link, or it covers the
23
+ * focused link. */
24
+ export declare function SkipLink({ className, ref, children, ...rest }: SkipLinkProps): import("react").JSX.Element;
25
+ //# sourceMappingURL=SkipLink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkipLink.d.ts","sourceRoot":"","sources":["../../src/SkipLink/SkipLink.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAGlE,MAAM,WAAW,aAAc,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC5E;wEACoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,QAAQ,EAAE,SAAS,CAAC;IACpB,mCAAmC;IACnC,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;CAC9B;AAED;;;;;;;;;;;;mBAYmB;AACnB,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,aAAa,+BAO5E"}
@@ -1,11 +1,14 @@
1
- import type { ReactNode, Ref } from "react";
1
+ import type { ReactNode, Ref, TableHTMLAttributes } from "react";
2
2
  export type TableSize = 32 | 40 | 48;
3
3
  /** Controlled sort state. `null` means no column is sorted. */
4
4
  export interface TableSortState {
5
5
  key: string;
6
6
  direction: "asc" | "desc";
7
7
  }
8
- export interface TableProps {
8
+ /** Remaining HTML attributes land on the `<table>` (D85): `aria-label`,
9
+ * `aria-busy` while a page loads, `id`, `data-*`. The table's own attributes
10
+ * (`data-size`) win. */
11
+ export interface TableProps extends Omit<TableHTMLAttributes<HTMLTableElement>, "children"> {
9
12
  /** Row height in px. @default 40 */
10
13
  size?: TableSize;
11
14
  /** Pins the header while the body scrolls. */
@@ -38,5 +41,5 @@ export interface TableProps {
38
41
  }
39
42
  /** Data table on native table semantics. Holds no state: sorting, selection
40
43
  * and pagination are the consumer's (D62, extending D50/D53). */
41
- export declare function Table({ size, stickyHeader, sortable, sort, onSortChange, selectable, selected, onSelectionChange, children, className, ref, }: TableProps): import("react").JSX.Element;
44
+ export declare function Table({ size, stickyHeader, sortable, sort, onSortChange, selectable, selected, onSelectionChange, children, className, ref, ...rest }: TableProps): import("react").JSX.Element;
42
45
  //# sourceMappingURL=Table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/Table/Table.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAK5C,MAAM,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAErC,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;CAC3B;AAiDD,MAAM,WAAW,UAAU;IACzB,oCAAoC;IACpC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9C,iDAAiD;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IAC5D,+BAA+B;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC7B;AAED;iEACiE;AACjE,wBAAgB,KAAK,CAAC,EACpB,IAAS,EACT,YAAY,EACZ,QAAgB,EAChB,IAAW,EACX,YAAY,EACZ,UAAkB,EAClB,QAA0B,EAC1B,iBAAiB,EACjB,QAAQ,EACR,SAAS,EACT,GAAG,GACJ,EAAE,UAAU,+BAkBZ"}
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/Table/Table.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAKjE,MAAM,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAErC,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;CAC3B;AAiDD;;wBAEwB;AACxB,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC;IACzF,oCAAoC;IACpC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9C,iDAAiD;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IAC5D,+BAA+B;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC7B;AAED;iEACiE;AACjE,wBAAgB,KAAK,CAAC,EACpB,IAAS,EACT,YAAY,EACZ,QAAgB,EAChB,IAAW,EACX,YAAY,EACZ,UAAkB,EAClB,QAA0B,EAC1B,iBAAiB,EACjB,QAAQ,EACR,SAAS,EACT,GAAG,EACH,GAAG,IAAI,EACR,EAAE,UAAU,+BAkBZ"}
@@ -1,9 +1,12 @@
1
- import type { ReactNode } from "react";
2
- export interface TableBodyProps {
1
+ import type { HTMLAttributes, ReactNode, Ref } from "react";
2
+ export interface TableBodyProps extends Omit<HTMLAttributes<HTMLTableSectionElement>, "children"> {
3
3
  /** The body TableRows. */
4
4
  children: ReactNode;
5
5
  className?: string;
6
+ /** Forwarded ref to the `<tbody>`. */
7
+ ref?: Ref<HTMLTableSectionElement>;
6
8
  }
7
- /** `<tbody>` wrapper. */
8
- export declare function TableBody({ children, className }: TableBodyProps): import("react").JSX.Element;
9
+ /** `<tbody>` wrapper. Remaining attributes land on it (D85) — `aria-busy`
10
+ * while a page of rows loads, say. */
11
+ export declare function TableBody({ children, className, ref, ...rest }: TableBodyProps): import("react").JSX.Element;
9
12
  //# sourceMappingURL=TableBody.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableBody.d.ts","sourceRoot":"","sources":["../../src/Table/TableBody.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,yBAAyB;AACzB,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,cAAc,+BAEhE"}
1
+ {"version":3,"file":"TableBody.d.ts","sourceRoot":"","sources":["../../src/Table/TableBody.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5D,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,EAAE,UAAU,CAAC;IAC/F,0BAA0B;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,GAAG,CAAC,EAAE,GAAG,CAAC,uBAAuB,CAAC,CAAC;CACpC;AAED;sCACsC;AACtC,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,+BAM9E"}
@@ -0,0 +1,21 @@
1
+ import type { HTMLAttributes, ReactNode, Ref } from "react";
2
+ export interface TableCaptionProps extends Omit<HTMLAttributes<HTMLTableCaptionElement>, "children"> {
3
+ /** The name line — what the table lists. Also the table's accessible name. */
4
+ children: ReactNode;
5
+ /** An optional second line: the range shown, say — "Rows 51–100 of more
6
+ * than 100,000". */
7
+ detail?: ReactNode;
8
+ className?: string;
9
+ /** Forwarded ref to the `<caption>`, so focus can be moved to it. */
10
+ ref?: Ref<HTMLTableCaptionElement>;
11
+ }
12
+ /** `<caption>` — the table's name, above it, and an optional detail line
13
+ * (D85). It names the table for assistive tech, which an `aria-label` on the
14
+ * `Table` would also do, but a caption is visible.
15
+ *
16
+ * A token-paged list has no page numbers to land on, so after a page change
17
+ * the consumer moves focus here: give it `tabIndex={-1}`, put the range in
18
+ * `detail`, and call `focus()` on the ref. The ring is the shared one (D82),
19
+ * drawn inside the caption's box. Remaining attributes land on the element. */
20
+ export declare function TableCaption({ children, detail, className, ref, ...rest }: TableCaptionProps): import("react").JSX.Element;
21
+ //# sourceMappingURL=TableCaption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableCaption.d.ts","sourceRoot":"","sources":["../../src/Table/TableCaption.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5D,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,EAAE,UAAU,CAAC;IAClG,8EAA8E;IAC9E,QAAQ,EAAE,SAAS,CAAC;IACpB;wBACoB;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,GAAG,CAAC,EAAE,GAAG,CAAC,uBAAuB,CAAC,CAAC;CACpC;AAED;;;;;;;+EAO+E;AAC/E,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,iBAAiB,+BAO5F"}
@@ -1,12 +1,22 @@
1
- import type { ReactNode } from "react";
2
- export interface TableCellProps {
1
+ import type { ReactNode, Ref, TdHTMLAttributes } from "react";
2
+ export interface TableCellProps extends Omit<TdHTMLAttributes<HTMLTableCellElement>, "children"> {
3
3
  /** Right-aligns and renders tabular figures (D62). */
4
4
  numeric?: boolean;
5
+ /** Columns the cell spans — an empty-state row spanning the table (D85). */
6
+ colSpan?: number;
7
+ /** Renders `<th scope="row">` instead of `<td>`: the cell that names its
8
+ * row, an identifier say, so a screen reader reads it with every cell in
9
+ * the row (D85). Styled as a cell, at medium weight. */
10
+ rowHeader?: boolean;
5
11
  /** Cell content. */
6
12
  children?: ReactNode;
7
13
  className?: string;
14
+ /** Forwarded ref to the cell element. */
15
+ ref?: Ref<HTMLTableCellElement>;
8
16
  }
9
- /** `<td>`. `numeric` means right-aligned *and* tabular — a column that aligns
10
- * but whose digits jitter between rows defeats the purpose. */
11
- export declare function TableCell({ numeric, children, className }: TableCellProps): import("react").JSX.Element;
17
+ /** `<td>`, or `<th scope="row">` with `rowHeader`. `numeric` means
18
+ * right-aligned *and* tabular — a column that aligns but whose digits jitter
19
+ * between rows defeats the purpose. Remaining attributes land on the cell
20
+ * (D85). */
21
+ export declare function TableCell({ numeric, colSpan, rowHeader, children, className, ref, ...rest }: TableCellProps): import("react").JSX.Element;
12
22
  //# sourceMappingURL=TableCell.d.ts.map