@duro-app/ui 5.7.0 → 5.8.1

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 (127) hide show
  1. package/dist/{Table-Dj7PXqO_.js → Table-CAjPFgTX.js} +397 -394
  2. package/dist/Table-CAjPFgTX.js.map +1 -0
  3. package/dist/{compiler-runtime-B2IcI8_O.js → compiler-runtime-BuugS4D0.js} +67 -59
  4. package/dist/{compiler-runtime-B2IcI8_O.js.map → compiler-runtime-BuugS4D0.js.map} +1 -1
  5. package/dist/components/AppShell/AppShell.d.ts +74 -0
  6. package/dist/components/AppShell/AppShell.d.ts.map +1 -0
  7. package/dist/components/AppShell/AppShell.meta.d.ts +3 -0
  8. package/dist/components/AppShell/AppShell.meta.d.ts.map +1 -0
  9. package/dist/components/AppShell/AppShell.stories.d.ts +192 -0
  10. package/dist/components/AppShell/AppShell.stories.d.ts.map +1 -0
  11. package/dist/components/AppShell/styles.css.d.ts +187 -0
  12. package/dist/components/AppShell/styles.css.d.ts.map +1 -0
  13. package/dist/components/Aside/Aside.d.ts +23 -0
  14. package/dist/components/Aside/Aside.d.ts.map +1 -0
  15. package/dist/components/Aside/Aside.meta.d.ts +3 -0
  16. package/dist/components/Aside/Aside.meta.d.ts.map +1 -0
  17. package/dist/components/Aside/Aside.stories.d.ts +45 -0
  18. package/dist/components/Aside/Aside.stories.d.ts.map +1 -0
  19. package/dist/components/Aside/styles.css.d.ts +44 -0
  20. package/dist/components/Aside/styles.css.d.ts.map +1 -0
  21. package/dist/components/Button/styles.css.d.ts +2 -0
  22. package/dist/components/Button/styles.css.d.ts.map +1 -1
  23. package/dist/components/ButtonGroup/ButtonGroup.stories.d.ts +3 -3
  24. package/dist/components/ButtonGroup/ButtonGroup.stories.d.ts.map +1 -1
  25. package/dist/components/CodeBlock/CodeBlock.d.ts +29 -0
  26. package/dist/components/CodeBlock/CodeBlock.d.ts.map +1 -0
  27. package/dist/components/CodeBlock/CodeBlock.meta.d.ts +3 -0
  28. package/dist/components/CodeBlock/CodeBlock.meta.d.ts.map +1 -0
  29. package/dist/components/CodeBlock/CodeBlock.stories.d.ts +73 -0
  30. package/dist/components/CodeBlock/CodeBlock.stories.d.ts.map +1 -0
  31. package/dist/components/CodeBlock/styles.css.d.ts +41 -0
  32. package/dist/components/CodeBlock/styles.css.d.ts.map +1 -0
  33. package/dist/components/Grid/Grid.d.ts +13 -4
  34. package/dist/components/Grid/Grid.d.ts.map +1 -1
  35. package/dist/components/Grid/Grid.meta.d.ts.map +1 -1
  36. package/dist/components/Grid/Grid.stories.d.ts +28 -0
  37. package/dist/components/Grid/Grid.stories.d.ts.map +1 -1
  38. package/dist/components/Grid/styles.css.d.ts +3 -0
  39. package/dist/components/Grid/styles.css.d.ts.map +1 -1
  40. package/dist/components/Heading/Heading.d.ts +3 -1
  41. package/dist/components/Heading/Heading.d.ts.map +1 -1
  42. package/dist/components/Heading/Heading.stories.d.ts +9 -0
  43. package/dist/components/Heading/Heading.stories.d.ts.map +1 -0
  44. package/dist/components/LinkButton/LinkButton.stories.d.ts +7 -0
  45. package/dist/components/LinkButton/LinkButton.stories.d.ts.map +1 -1
  46. package/dist/components/LinkButton/styles.css.d.ts +2 -0
  47. package/dist/components/LinkButton/styles.css.d.ts.map +1 -1
  48. package/dist/components/LiveRegion/LiveRegion.d.ts +28 -0
  49. package/dist/components/LiveRegion/LiveRegion.d.ts.map +1 -0
  50. package/dist/components/LiveRegion/LiveRegion.meta.d.ts +3 -0
  51. package/dist/components/LiveRegion/LiveRegion.meta.d.ts.map +1 -0
  52. package/dist/components/LiveRegion/LiveRegion.stories.d.ts +66 -0
  53. package/dist/components/LiveRegion/LiveRegion.stories.d.ts.map +1 -0
  54. package/dist/components/Menu/Menu.stories.d.ts +7 -0
  55. package/dist/components/Menu/Menu.stories.d.ts.map +1 -1
  56. package/dist/components/Menu/styles.css.d.ts +2 -0
  57. package/dist/components/Menu/styles.css.d.ts.map +1 -1
  58. package/dist/components/PageNav/styles.css.d.ts +1 -1
  59. package/dist/components/Prose/Prose.d.ts +17 -0
  60. package/dist/components/Prose/Prose.d.ts.map +1 -0
  61. package/dist/components/Prose/Prose.meta.d.ts +3 -0
  62. package/dist/components/Prose/Prose.meta.d.ts.map +1 -0
  63. package/dist/components/Prose/Prose.stories.d.ts +63 -0
  64. package/dist/components/Prose/Prose.stories.d.ts.map +1 -0
  65. package/dist/components/SideNav/SideNav.d.ts +7 -1
  66. package/dist/components/SideNav/SideNav.d.ts.map +1 -1
  67. package/dist/components/SideNav/SideNav.stories.d.ts +3 -0
  68. package/dist/components/SideNav/SideNav.stories.d.ts.map +1 -1
  69. package/dist/components/Time/Time.d.ts +26 -0
  70. package/dist/components/Time/Time.d.ts.map +1 -0
  71. package/dist/components/Time/Time.meta.d.ts +3 -0
  72. package/dist/components/Time/Time.meta.d.ts.map +1 -0
  73. package/dist/components/Time/Time.stories.d.ts +77 -0
  74. package/dist/components/Time/Time.stories.d.ts.map +1 -0
  75. package/dist/components/Time/relative.d.ts +27 -0
  76. package/dist/components/Time/relative.d.ts.map +1 -0
  77. package/dist/form.js +1 -1
  78. package/dist/hooks/useContainerBelow.d.ts +18 -0
  79. package/dist/hooks/useContainerBelow.d.ts.map +1 -0
  80. package/dist/index.css +1 -1
  81. package/dist/index.d.ts +9 -1
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +4870 -4183
  84. package/dist/index.js.map +1 -1
  85. package/dist/table.js +2 -2
  86. package/package.json +2 -2
  87. package/src/components/AppShell/AppShell.meta.ts +62 -0
  88. package/src/components/AppShell/AppShell.stories.tsx +825 -0
  89. package/src/components/AppShell/AppShell.tsx +346 -0
  90. package/src/components/AppShell/styles.css.ts +219 -0
  91. package/src/components/Aside/Aside.meta.ts +33 -0
  92. package/src/components/Aside/Aside.stories.tsx +106 -0
  93. package/src/components/Aside/Aside.tsx +42 -0
  94. package/src/components/Aside/styles.css.ts +60 -0
  95. package/src/components/Button/styles.css.ts +7 -2
  96. package/src/components/ButtonGroup/ButtonGroup.stories.tsx +4 -5
  97. package/src/components/CodeBlock/CodeBlock.meta.ts +29 -0
  98. package/src/components/CodeBlock/CodeBlock.stories.tsx +192 -0
  99. package/src/components/CodeBlock/CodeBlock.tsx +99 -0
  100. package/src/components/CodeBlock/styles.css.ts +48 -0
  101. package/src/components/Grid/Grid.meta.ts +2 -1
  102. package/src/components/Grid/Grid.stories.tsx +202 -3
  103. package/src/components/Grid/Grid.tsx +35 -6
  104. package/src/components/Grid/styles.css.ts +11 -0
  105. package/src/components/Heading/Heading.stories.tsx +51 -0
  106. package/src/components/Heading/Heading.tsx +38 -7
  107. package/src/components/LinkButton/LinkButton.stories.tsx +41 -1
  108. package/src/components/LinkButton/styles.css.ts +6 -2
  109. package/src/components/LiveRegion/LiveRegion.meta.ts +29 -0
  110. package/src/components/LiveRegion/LiveRegion.stories.tsx +139 -0
  111. package/src/components/LiveRegion/LiveRegion.tsx +48 -0
  112. package/src/components/Menu/Menu.stories.tsx +62 -0
  113. package/src/components/Menu/styles.css.ts +6 -3
  114. package/src/components/Prose/Prose.meta.ts +32 -0
  115. package/src/components/Prose/Prose.stories.tsx +240 -0
  116. package/src/components/Prose/Prose.tsx +25 -0
  117. package/src/components/Prose/prose.css +179 -0
  118. package/src/components/SideNav/SideNav.stories.tsx +29 -0
  119. package/src/components/SideNav/SideNav.tsx +14 -2
  120. package/src/components/Time/Time.meta.ts +17 -0
  121. package/src/components/Time/Time.stories.tsx +173 -0
  122. package/src/components/Time/Time.tsx +33 -0
  123. package/src/components/Time/relative.ts +89 -0
  124. package/src/hooks/useContainerBelow.ts +39 -0
  125. package/src/index.ts +13 -1
  126. package/src/strict.css +4 -1
  127. package/dist/Table-Dj7PXqO_.js.map +0 -1
@@ -1,5 +1,6 @@
1
1
  import { Meta, StoryObj } from '@storybook/react';
2
2
  import { Grid } from './Grid';
3
+ import { SpacingToken } from '@duro-app/tokens/keys';
3
4
  declare const meta: Meta<typeof Grid>;
4
5
  export default meta;
5
6
  type Story = StoryObj<typeof Grid>;
@@ -25,4 +26,31 @@ export declare const WeightedColumns: Story;
25
26
  export declare const WithContainerQuery: Story;
26
27
  export declare const TracksWithAside: Story;
27
28
  export declare const TracksWithMinmax: Story;
29
+ interface ContentAsideArgs {
30
+ /** The gap between the reading column and the Aside. */
31
+ gap: SpacingToken;
32
+ /** The frame's width in px: the container the Grid measures. */
33
+ width: number;
34
+ }
35
+ /**
36
+ * A reading column beside an Aside (asideW); one column below md (768px),
37
+ * measured on the Grid's own container. Drag `width` across 768 to see it
38
+ * collapse: the column reports what `useContainerBelow` sees.
39
+ */
40
+ export declare const ContentAside: StoryObj<ContentAsideArgs>;
41
+ /** ContentAside's checks, kept off the visible story so a Control change cannot fail them. */
42
+ export declare const ContentAsideChecks: StoryObj<ContentAsideArgs>;
43
+ /** ContentAside's checks below md (pageSm, 600px): the Aside stacks under the column. */
44
+ export declare const ContentAsideStackedChecks: StoryObj<ContentAsideArgs>;
45
+ /** A wide page and a narrow one, side by side: beside, then stacked. */
46
+ export declare const ContentAsideWideAndNarrow: Story;
47
+ /**
48
+ * The collapse and `useContainerBelow` follow the Grid's container, not the
49
+ * window: in a 1440px viewport the 600px page stacks and reports "below md",
50
+ * the 1200px one does not. The forwarded ref is the container the query
51
+ * measures. Sizes the browser through Vitest, so it runs as a test only.
52
+ */
53
+ export declare const ContentAsideFollowsItsContainer: Story;
54
+ /** `ref` reaches the grid element itself when there is no named layout. */
55
+ export declare const RefWithoutLayout: Story;
28
56
  //# sourceMappingURL=Grid.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Grid.stories.d.ts","sourceRoot":"","sources":["../../../src/components/Grid/Grid.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAGpD,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAU3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,IAAI,CAgB3B,CAAA;AAED,eAAe,IAAI,CAAA;AACnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAA;AA2BlC,eAAO,MAAM,YAAY,EAAE,KAe1B,CAAA;AAED,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,KAiBnB,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,EAAE,KAqC1B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,KAmB7B,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KAsBhC,CAAA;AAID,eAAO,MAAM,eAAe,EAAE,KAmB7B,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,KAgB9B,CAAA"}
1
+ {"version":3,"file":"Grid.stories.d.ts","sourceRoot":"","sources":["../../../src/components/Grid/Grid.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,IAAI,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAGpD,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAI3B,OAAO,EAAyB,KAAK,YAAY,EAAC,MAAM,uBAAuB,CAAA;AAU/E,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,IAAI,CAgB3B,CAAA;AAED,eAAe,IAAI,CAAA;AACnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAA;AA2BlC,eAAO,MAAM,YAAY,EAAE,KAe1B,CAAA;AAED,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,KAiBnB,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,EAAE,KAqC1B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,KAmB7B,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KAsBhC,CAAA;AAID,eAAO,MAAM,eAAe,EAAE,KAmB7B,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,KAgB9B,CAAA;AAuDD,UAAU,gBAAgB;IACxB,wDAAwD;IACxD,GAAG,EAAE,YAAY,CAAA;IACjB,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,gBAAgB,CAanD,CAAA;AAED,8FAA8F;AAC9F,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,gBAAgB,CAiBzD,CAAA;AAED,yFAAyF;AACzF,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,gBAAgB,CAGhE,CAAA;AAED,wEAAwE;AACxE,eAAO,MAAM,yBAAyB,EAAE,KA2BvC,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,EAAE,KA2C7C,CAAA;AAID,2EAA2E;AAC3E,eAAO,MAAM,gBAAgB,EAAE,KAY9B,CAAA"}
@@ -33,6 +33,9 @@ export declare const styles: Readonly<{
33
33
  readonly splitWide: Readonly<{
34
34
  readonly gridTemplateColumns: css.StyleXClassNameFor<"gridTemplateColumns", "1fr" | `minmax(${css.StyleXVar<string>}, 1fr) minmax(0, 3fr)`>;
35
35
  }>;
36
+ readonly contentAside: Readonly<{
37
+ readonly gridTemplateColumns: css.StyleXClassNameFor<"gridTemplateColumns", "minmax(0, 1fr)" | `minmax(0, 1fr) ${css.StyleXVar<string>}`>;
38
+ }>;
36
39
  readonly template: (tracks: string) => readonly [Readonly<{
37
40
  gridTemplateColumns: css.StyleXClassNameFor<"gridTemplateColumns", string>;
38
41
  }>, css.InlineStyles];
@@ -1 +1 @@
1
- {"version":3,"file":"styles.css.d.ts","sourceRoot":"","sources":["../../../src/components/Grid/styles.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AAepC,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+FjB,CAAA"}
1
+ {"version":3,"file":"styles.css.d.ts","sourceRoot":"","sources":["../../../src/components/Grid/styles.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AAgBpC,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyGjB,CAAA"}
@@ -5,8 +5,10 @@ interface HeadingProps {
5
5
  variant?: HeadingVariant;
6
6
  color?: 'default' | 'muted' | 'accent';
7
7
  align?: 'start' | 'center' | 'end';
8
+ /** The heading's id: an in-page link's target (`href="#id"`), an `aria-labelledby` reference. */
9
+ id?: string;
8
10
  children: ReactNode;
9
11
  }
10
- export declare function Heading({ level, variant, color, align, children }: HeadingProps): import("react/jsx-runtime").JSX.Element;
12
+ export declare function Heading({ level, variant, color, align, id, children }: HeadingProps): import("react/jsx-runtime").JSX.Element;
11
13
  export {};
12
14
  //# sourceMappingURL=Heading.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Heading.d.ts","sourceRoot":"","sources":["../../../src/components/Heading/Heading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAA;AAKpC,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,CAAA;AAEf,UAAU,YAAY;IACpB,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAA;IACtC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAA;IAClC,QAAQ,EAAE,SAAS,CAAA;CACpB;AAiBD,wBAAgB,OAAO,CAAC,EAAC,KAAK,EAAE,OAAO,EAAE,KAAiB,EAAE,KAAK,EAAE,QAAQ,EAAC,EAAE,YAAY,2CAUzF"}
1
+ {"version":3,"file":"Heading.d.ts","sourceRoot":"","sources":["../../../src/components/Heading/Heading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAA;AAKpC,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,CAAA;AAEf,UAAU,YAAY;IACpB,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAA;IACtC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAA;IAClC,iGAAiG;IACjG,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,SAAS,CAAA;CACpB;AAiBD,wBAAgB,OAAO,CAAC,EAAC,KAAK,EAAE,OAAO,EAAE,KAAiB,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAC,EAAE,YAAY,2CAuC7F"}
@@ -0,0 +1,9 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ declare const meta: Meta;
3
+ export default meta;
4
+ type Story = StoryObj;
5
+ export declare const Levels: Story;
6
+ /** `id` makes a heading the target of an in-page link (a table of contents)
7
+ * or of `aria-labelledby`. */
8
+ export declare const WithId: Story;
9
+ //# sourceMappingURL=Heading.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Heading.stories.d.ts","sourceRoot":"","sources":["../../../src/components/Heading/Heading.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAOpD,QAAA,MAAM,IAAI,EAAE,IAIX,CAAA;AAED,eAAe,IAAI,CAAA;AACnB,KAAK,KAAK,GAAG,QAAQ,CAAA;AAErB,eAAO,MAAM,MAAM,EAAE,KAepB,CAAA;AAED;+BAC+B;AAC/B,eAAO,MAAM,MAAM,EAAE,KAepB,CAAA"}
@@ -18,4 +18,11 @@ export declare const AllVariants: Story;
18
18
  export declare const ClientNavigation: StoryObj<{
19
19
  onNavigate: OnNavigate;
20
20
  }>;
21
+ /**
22
+ * A touch screen gets 44px links, default and small alike (5.6, as Button);
23
+ * a mouse keeps the compact control.
24
+ * It drives Chrome's touch emulation through Vitest's CDP session, so it runs
25
+ * as a test and stays out of the dev sidebar (there is no Vitest there).
26
+ */
27
+ export declare const TouchTargets: Story;
21
28
  //# sourceMappingURL=LinkButton.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LinkButton.stories.d.ts","sourceRoot":"","sources":["../../../src/components/LinkButton/LinkButton.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAGpD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAGvC,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAA;AAGrD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,UAAU,CAcjC,CAAA;AAED,eAAe,IAAI,CAAA;AACnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAA;AAExC,eAAO,MAAM,OAAO,EAAE,KAOrB,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,KAKvB,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,KAEnB,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,KAEvB,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAY1B,CAAA;AAOD,eAAO,MAAM,WAAW,EAAE,KAuBzB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAC,CA+B/D,CAAA"}
1
+ {"version":3,"file":"LinkButton.stories.d.ts","sourceRoot":"","sources":["../../../src/components/LinkButton/LinkButton.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAGpD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAGvC,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAA;AAKrD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,UAAU,CAcjC,CAAA;AAED,eAAe,IAAI,CAAA;AACnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAA;AAExC,eAAO,MAAM,OAAO,EAAE,KAOrB,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,KAKvB,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,KAEnB,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,KAEvB,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAY1B,CAAA;AAOD,eAAO,MAAM,WAAW,EAAE,KAuBzB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAC,CA+B/D,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,KA8B1B,CAAA"}
@@ -15,12 +15,14 @@ export declare const styles: Readonly<{
15
15
  readonly transitionProperty: css.StyleXClassNameFor<"transitionProperty", "background-color, border-color, color">;
16
16
  readonly transitionDuration: css.StyleXClassNameFor<"transitionDuration", string>;
17
17
  readonly transitionTimingFunction: css.StyleXClassNameFor<"transitionTimingFunction", string>;
18
+ readonly minWidth: css.StyleXClassNameFor<"minWidth", string | null>;
18
19
  }>;
19
20
  readonly sizeDefault: Readonly<{
20
21
  readonly paddingTop: css.StyleXClassNameFor<"paddingTop", string>;
21
22
  readonly paddingBottom: css.StyleXClassNameFor<"paddingBottom", string>;
22
23
  readonly paddingLeft: css.StyleXClassNameFor<"paddingLeft", string>;
23
24
  readonly paddingRight: css.StyleXClassNameFor<"paddingRight", string>;
25
+ readonly minHeight: css.StyleXClassNameFor<"minHeight", string | null>;
24
26
  }>;
25
27
  readonly sizeSmall: Readonly<{
26
28
  readonly paddingTop: css.StyleXClassNameFor<"paddingTop", string>;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.css.d.ts","sourceRoot":"","sources":["../../../src/components/LinkButton/styles.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AAQpC,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqDjB,CAAA"}
1
+ {"version":3,"file":"styles.css.d.ts","sourceRoot":"","sources":["../../../src/components/LinkButton/styles.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AAQpC,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyDjB,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { ReactNode } from 'react';
2
+ export type LiveRegionPoliteness = 'polite' | 'assertive';
3
+ interface LiveRegionProps {
4
+ /**
5
+ * What to announce. Change it to announce; leave it empty when there is
6
+ * nothing to say — never unmount the region to clear it.
7
+ */
8
+ children?: ReactNode;
9
+ /**
10
+ * `polite` (default) waits for the screen reader to finish (`role="status"`):
11
+ * "Copied", "3 results". `assertive` interrupts (`role="alert"`): only for
12
+ * what the person must hear now, such as an error that blocks them.
13
+ */
14
+ politeness?: LiveRegionPoliteness;
15
+ /** Keeps the region off screen and in the accessibility tree. Default false. */
16
+ visuallyHidden?: boolean;
17
+ id?: string;
18
+ }
19
+ /**
20
+ * LiveRegion — tells assistive tech about a change that has no focus move to
21
+ * go with it ("Link copied", "Answer ready"). A screen reader only announces
22
+ * a change to a region that was already in the page, so render it from the
23
+ * start (empty) and change its content; a region mounted together with its
24
+ * message is often not read at all.
25
+ */
26
+ export declare function LiveRegion({ children, politeness, visuallyHidden, id, }: LiveRegionProps): import("react/jsx-runtime").JSX.Element;
27
+ export {};
28
+ //# sourceMappingURL=LiveRegion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveRegion.d.ts","sourceRoot":"","sources":["../../../src/components/LiveRegion/LiveRegion.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAA;AAIpC,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEzD,UAAU,eAAe;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,oBAAoB,CAAA;IACjC,gFAAgF;IAChF,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,UAAqB,EACrB,cAAsB,EACtB,EAAE,GACH,EAAE,eAAe,2CAYjB"}
@@ -0,0 +1,3 @@
1
+ import { ComponentMeta } from '../component-meta';
2
+ export declare const meta: ComponentMeta;
3
+ //# sourceMappingURL=LiveRegion.meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveRegion.meta.d.ts","sourceRoot":"","sources":["../../../src/components/LiveRegion/LiveRegion.meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAA;AAEpD,eAAO,MAAM,IAAI,EAAE,aA0BlB,CAAA"}
@@ -0,0 +1,66 @@
1
+ import { StoryObj } from '@storybook/react';
2
+ import { LiveRegionPoliteness } from './LiveRegion';
3
+ interface LiveRegionArgs {
4
+ /** `polite` (role="status") waits for a pause; `assertive` (role="alert") interrupts. */
5
+ politeness: LiveRegionPoliteness;
6
+ /** Off screen, still in the accessibility tree. */
7
+ visuallyHidden: boolean;
8
+ /** What the region announces when the trigger button is pressed. */
9
+ message: string;
10
+ /** The trigger button's label. */
11
+ triggerLabel: string;
12
+ /** The button that empties the region. */
13
+ clearLabel: string;
14
+ /** Called with the message the region now holds. */
15
+ onAnnounce: (message: string) => void;
16
+ }
17
+ declare const meta: {
18
+ title: string;
19
+ args: {
20
+ politeness: "polite";
21
+ visuallyHidden: false;
22
+ message: string;
23
+ triggerLabel: string;
24
+ clearLabel: string;
25
+ onAnnounce: import('storybook/test').Mock<(...args: any[]) => any>;
26
+ };
27
+ argTypes: {
28
+ politeness: {
29
+ control: "radio";
30
+ options: string[];
31
+ };
32
+ visuallyHidden: {
33
+ control: "boolean";
34
+ };
35
+ message: {
36
+ control: "text";
37
+ };
38
+ triggerLabel: {
39
+ control: "text";
40
+ };
41
+ clearLabel: {
42
+ control: "text";
43
+ };
44
+ };
45
+ parameters: {
46
+ a11y: {
47
+ test: string;
48
+ };
49
+ };
50
+ decorators: import('@storybook/react').Decorator[];
51
+ render: (args: LiveRegionArgs) => import("react/jsx-runtime").JSX.Element;
52
+ };
53
+ export default meta;
54
+ type Story = StoryObj<typeof meta>;
55
+ /**
56
+ * Press the trigger: the message appears in the region (unless
57
+ * `visuallyHidden`) and the Actions panel logs `onAnnounce`. Switch
58
+ * `politeness` to assertive for role="alert".
59
+ */
60
+ export declare const Playground: Story;
61
+ /** Mounted empty from the start; a change of content is what gets announced. */
62
+ export declare const Polite: Story;
63
+ export declare const Assertive: Story;
64
+ /** Off screen, still in the accessibility tree. */
65
+ export declare const VisuallyHidden: Story;
66
+ //# sourceMappingURL=LiveRegion.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveRegion.stories.d.ts","sourceRoot":"","sources":["../../../src/components/LiveRegion/LiveRegion.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAO,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAEpD,OAAO,EAAa,KAAK,oBAAoB,EAAC,MAAM,cAAc,CAAA;AAMlE,UAAU,cAAc;IACtB,yFAAyF;IACzF,UAAU,EAAE,oBAAoB,CAAA;IAChC,mDAAmD;IACnD,cAAc,EAAE,OAAO,CAAA;IACvB,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAA;IACf,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAA;IACpB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAA;IAClB,oDAAoD;IACpD,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACtC;AAsCD,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoBsB,CAAA;AAEhC,eAAe,IAAI,CAAA;AACnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAA;AAIlC;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,KAAU,CAAA;AAEnC,gFAAgF;AAChF,eAAO,MAAM,MAAM,EAAE,KAmBpB,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAA;AAED,mDAAmD;AACnD,eAAO,MAAM,cAAc,EAAE,KAW5B,CAAA"}
@@ -15,4 +15,11 @@ export declare const TypingElsewhereIsNotIntercepted: Story;
15
15
  export declare const GhostIconTrigger: Story;
16
16
  export declare const EnterActivatesOnce: Story;
17
17
  export declare const TabInsideDialog: Story;
18
+ /**
19
+ * A touch screen gets 44px triggers (coarse pointer), the default and the
20
+ * ghost variant alike; a mouse keeps the compact control.
21
+ * It drives Chrome's touch emulation through Vitest's CDP session, so it runs
22
+ * as a test and stays out of the dev sidebar (there is no Vitest there).
23
+ */
24
+ export declare const TouchTargets: Story;
18
25
  //# sourceMappingURL=Menu.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.stories.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/Menu.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAWpD,QAAA,MAAM,IAAI,EAAE,IAEX,CAAA;AAED,eAAe,IAAI,CAAA;AACnB,KAAK,KAAK,GAAG,QAAQ,CAAA;AAErB,eAAO,MAAM,OAAO,EAAE,KAqCrB,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,KAsBvB,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KAgChC,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,KAqCvB,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,KAwB3B,CAAA;AAID,eAAO,MAAM,kBAAkB,EAAE,KAqBhC,CAAA;AAsCD,eAAO,MAAM,uBAAuB,EAAE,KAgCrC,CAAA;AAID,eAAO,MAAM,wBAAwB,EAAE,KAwBtC,CAAA;AAMD,eAAO,MAAM,kBAAkB,EAAE,KA0ChC,CAAA;AAID,eAAO,MAAM,+BAA+B,EAAE,KAyB7C,CAAA;AAGD,eAAO,MAAM,gBAAgB,EAAE,KAiB9B,CAAA;AAKD,eAAO,MAAM,kBAAkB,EAAE,KAoBhC,CAAA;AAMD,eAAO,MAAM,eAAe,EAAE,KAmC7B,CAAA"}
1
+ {"version":3,"file":"Menu.stories.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/Menu.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAcpD,QAAA,MAAM,IAAI,EAAE,IAEX,CAAA;AAED,eAAe,IAAI,CAAA;AACnB,KAAK,KAAK,GAAG,QAAQ,CAAA;AAErB,eAAO,MAAM,OAAO,EAAE,KAqCrB,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,KAsBvB,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KAgChC,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,KAqCvB,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,KAwB3B,CAAA;AAID,eAAO,MAAM,kBAAkB,EAAE,KAqBhC,CAAA;AAsCD,eAAO,MAAM,uBAAuB,EAAE,KAgCrC,CAAA;AAID,eAAO,MAAM,wBAAwB,EAAE,KAwBtC,CAAA;AAMD,eAAO,MAAM,kBAAkB,EAAE,KA0ChC,CAAA;AAID,eAAO,MAAM,+BAA+B,EAAE,KAyB7C,CAAA;AAGD,eAAO,MAAM,gBAAgB,EAAE,KAiB9B,CAAA;AAKD,eAAO,MAAM,kBAAkB,EAAE,KAoBhC,CAAA;AAMD,eAAO,MAAM,eAAe,EAAE,KAmC7B,CAAA;AAgBD;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,KA+C1B,CAAA"}
@@ -20,6 +20,8 @@ export declare const styles: Readonly<{
20
20
  readonly borderStyle: css.StyleXClassNameFor<"borderStyle", "solid">;
21
21
  readonly borderColor: css.StyleXClassNameFor<"borderColor", string>;
22
22
  readonly borderRadius: css.StyleXClassNameFor<"borderRadius", string>;
23
+ readonly minWidth: css.StyleXClassNameFor<"minWidth", string | null>;
24
+ readonly minHeight: css.StyleXClassNameFor<"minHeight", string | null>;
23
25
  readonly cursor: css.StyleXClassNameFor<"cursor", "pointer">;
24
26
  readonly transitionProperty: css.StyleXClassNameFor<"transitionProperty", "background-color, border-color">;
25
27
  readonly transitionDuration: css.StyleXClassNameFor<"transitionDuration", string>;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.css.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/styles.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AAUpC,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4HjB,CAAA"}
1
+ {"version":3,"file":"styles.css.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/styles.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AAUpC,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+HjB,CAAA"}
@@ -6,7 +6,7 @@ export declare const styles: Readonly<{
6
6
  }>;
7
7
  readonly grid: Readonly<{
8
8
  readonly display: css.StyleXClassNameFor<"display", "grid">;
9
- readonly gridTemplateColumns: css.StyleXClassNameFor<"gridTemplateColumns", "minmax(0, 1fr) minmax(0, 1fr)" | "minmax(0, 1fr)">;
9
+ readonly gridTemplateColumns: css.StyleXClassNameFor<"gridTemplateColumns", "minmax(0, 1fr)" | "minmax(0, 1fr) minmax(0, 1fr)">;
10
10
  readonly gap: css.StyleXClassNameFor<"gap", string>;
11
11
  }>;
12
12
  readonly card: Readonly<{
@@ -0,0 +1,17 @@
1
+ import { ReactNode, Ref } from 'react';
2
+ interface ProseProps {
3
+ /** HTML Duro does not author: the output of a Markdown renderer. */
4
+ children: ReactNode;
5
+ /** The container element. */
6
+ ref?: Ref<HTMLDivElement>;
7
+ }
8
+ /**
9
+ * Prose — the container for HTML Duro does not author (rendered Markdown, CMS
10
+ * output): headings, paragraphs, lists, tables, blockquotes, inline code,
11
+ * links and images are styled from tokens by descendant rules scoped to it.
12
+ * Duro components inside it (a TextLink, a CodeBlock) keep their own styles,
13
+ * and an app's own CSS wins over every Prose rule. Web only.
14
+ */
15
+ export declare function Prose({ children, ref }: ProseProps): import("react/jsx-runtime").JSX.Element;
16
+ export {};
17
+ //# sourceMappingURL=Prose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Prose.d.ts","sourceRoot":"","sources":["../../../src/components/Prose/Prose.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAE,GAAG,EAAC,MAAM,OAAO,CAAA;AAEzC,OAAO,aAAa,CAAA;AAEpB,UAAU,UAAU;IAClB,oEAAoE;IACpE,QAAQ,EAAE,SAAS,CAAA;IACnB,6BAA6B;IAC7B,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAA;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,EAAC,QAAQ,EAAE,GAAG,EAAC,EAAE,UAAU,2CAMhD"}
@@ -0,0 +1,3 @@
1
+ import { ComponentMeta } from '../component-meta';
2
+ export declare const meta: ComponentMeta;
3
+ //# sourceMappingURL=Prose.meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Prose.meta.d.ts","sourceRoot":"","sources":["../../../src/components/Prose/Prose.meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAA;AAEpD,eAAO,MAAM,IAAI,EAAE,aA6BlB,CAAA"}
@@ -0,0 +1,63 @@
1
+ import { StoryObj } from '@storybook/react';
2
+ declare const DOCUMENTS: {
3
+ readonly runbook: "\n<p>Flux reconciles every cluster from <code>kubernetes/</code>. Read the\n<a href=\"#bootstrap\">bootstrap notes</a> first.</p>\n<h2 id=\"bootstrap\" class=\"docs_title__a1b2\">Bootstrap</h2>\n<p>Each cluster starts from the same three steps:</p>\n<ol>\n <li>Install the operator.</li>\n <li>Seed the secrets:\n <ul>\n <li>the Vault token</li>\n <li>the registry pull secret</li>\n </ul>\n </li>\n <li>Point Flux at the repository.</li>\n</ol>\n<blockquote><p>Never commit a decrypted secret.</p></blockquote>\n<h3>Clusters</h3>\n<table>\n <thead><tr><th>Cluster</th><th>Nodes</th><th>Role</th></tr></thead>\n <tbody>\n <tr><td>homelab</td><td>5</td><td>Applications</td></tr>\n <tr><td>nas</td><td>1</td><td>Storage</td></tr>\n </tbody>\n</table>\n<pre><code>flux bootstrap git --url=ssh://git@forge/homelab</code></pre>\n<hr>\n<p><img alt=\"\" src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'/%3E\"></p>\n";
4
+ readonly 'release-notes': "\n<h2>5.6.0</h2>\n<p>Small controls line up: every <code>size=\"small\"</code> control is at least\n<code>controlSm</code> tall, whatever it holds.</p>\n<h3>Fixed</h3>\n<ul>\n <li>A small <code>Menu.Trigger</code> in a toolbar no longer shrinks.</li>\n <li>Toggle and Button share one small padding.</li>\n</ul>\n<blockquote><p>Upgrade with <code>pnpm add @duro-app/ui@5.6.0</code>.</p></blockquote>\n";
5
+ readonly reference: "\n<h2>relative(date, options)</h2>\n<p>Formats <code>date</code> against <code>options.now</code> with\n<a href=\"https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat\">Intl.RelativeTimeFormat</a>.</p>\n<table>\n <thead><tr><th>Option</th><th>Type</th><th>Default</th></tr></thead>\n <tbody>\n <tr><td><code>now</code></td><td>Date | number</td><td>required</td></tr>\n <tr><td><code>locale</code></td><td>string</td><td>required</td></tr>\n <tr><td><code>numeric</code></td><td>'auto' | 'always'</td><td>'auto'</td></tr>\n </tbody>\n</table>\n<pre><code>relative(commit.date, {now, locale: 'fr'})</code></pre>\n";
6
+ };
7
+ type DocumentName = keyof typeof DOCUMENTS;
8
+ interface ProseArgs {
9
+ /** A sample of what a Markdown renderer hands over. */
10
+ document: DocumentName;
11
+ /** Your own HTML, in place of the sample; empty to show the sample. */
12
+ html: string;
13
+ }
14
+ declare const meta: {
15
+ title: string;
16
+ args: {
17
+ document: "runbook";
18
+ html: string;
19
+ };
20
+ argTypes: {
21
+ document: {
22
+ control: {
23
+ type: "select";
24
+ labels: {
25
+ runbook: string;
26
+ 'release-notes': string;
27
+ reference: string;
28
+ };
29
+ };
30
+ options: string[];
31
+ };
32
+ html: {
33
+ control: "text";
34
+ };
35
+ };
36
+ parameters: {
37
+ a11y: {
38
+ test: string;
39
+ };
40
+ };
41
+ decorators: import('@storybook/react').Decorator[];
42
+ render: (args: ProseArgs) => import("react/jsx-runtime").JSX.Element;
43
+ };
44
+ export default meta;
45
+ type Story = StoryObj<typeof meta>;
46
+ /**
47
+ * Rendered Markdown styled by Prose. Pick another sample in `document`, or
48
+ * paste your own HTML in `html`.
49
+ */
50
+ export declare const Playground: Story;
51
+ /** The runbook sample, measured: flow, headings, lists, tables, code, links. */
52
+ export declare const RenderedMarkdown: Story;
53
+ /**
54
+ * An app's own CSS wins over every Prose rule: a CSS Module class and even a
55
+ * bare element selector, loaded after Duro's stylesheet. Prose sits in its
56
+ * own cascade layer and weighs nothing (:where()).
57
+ */
58
+ export declare const AppCssWins: Story;
59
+ /** A Duro component inside Prose keeps its own styles: Prose is below them. */
60
+ export declare const DuroComponentsInside: Story;
61
+ /** DuroComponentsInside's checks, kept off the visible story so a Control change cannot fail them. */
62
+ export declare const DuroComponentsInsideChecks: Story;
63
+ //# sourceMappingURL=Prose.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Prose.stories.d.ts","sourceRoot":"","sources":["../../../src/components/Prose/Prose.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAO,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAiEpD,QAAA,MAAM,SAAS;;;;CAIL,CAAA;AAEV,KAAK,YAAY,GAAG,MAAM,OAAO,SAAS,CAAA;AAE1C,UAAU,SAAS;IACjB,uDAAuD;IACvD,QAAQ,EAAE,YAAY,CAAA;IACtB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAA;CACb;AAeD,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgBiB,CAAA;AAE3B,eAAe,IAAI,CAAA;AACnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAA;AAgBlC;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,KAAU,CAAA;AAEnC,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,EAAE,KAyC9B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,KAsBxB,CAAA;AAED,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,EAAE,KAYlC,CAAA;AAED,sGAAsG;AACtG,eAAO,MAAM,0BAA0B,EAAE,KAgBxC,CAAA"}
@@ -26,11 +26,17 @@ import { ReactNode } from 'react';
26
26
  */
27
27
  interface RootProps {
28
28
  children: ReactNode;
29
+ /**
30
+ * Names the navigation landmark ("Main", "Settings"). Give one whenever
31
+ * the page has another nav (a breadcrumb, a pager): screen readers list
32
+ * landmarks by name.
33
+ */
34
+ 'aria-label'?: string;
29
35
  value?: string;
30
36
  defaultValue?: string;
31
37
  onValueChange?: (value: string) => void;
32
38
  }
33
- declare function Root({ children, value: controlledValue, defaultValue, onValueChange }: RootProps): import("react/jsx-runtime").JSX.Element;
39
+ declare function Root({ children, 'aria-label': ariaLabel, value: controlledValue, defaultValue, onValueChange, }: RootProps): import("react/jsx-runtime").JSX.Element;
34
40
  interface GroupProps {
35
41
  children: ReactNode;
36
42
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"SideNav.d.ts","sourceRoot":"","sources":["../../../src/components/SideNav/SideNav.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,SAAS,EAAkD,MAAM,OAAO,CAAA;AAMrF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,UAAU,SAAS;IACjB,QAAQ,EAAE,SAAS,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC;AAED,iBAAS,IAAI,CAAC,EAAC,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAC,EAAE,SAAS,2CAgEvF;AAID,UAAU,UAAU;IAClB,QAAQ,EAAE,SAAS,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,iBAAS,KAAK,CAAC,EAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAC,EAAE,UAAU,2CAoEtE;AAID,UAAU,YAAY;IACpB,QAAQ,EAAE,SAAS,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;;GASG;AACH,iBAAS,OAAO,CAAC,EAAC,QAAQ,EAAE,KAAK,EAAC,EAAE,YAAY,2CAY/C;AAID,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,SAAS,CAAA;IACnB;yEACqE;IACrE,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,iBAAS,IAAI,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAC,EAAE,SAAS,2CAyB/C;AAED,eAAO,MAAM,OAAO;;;;;CAKnB,CAAA"}
1
+ {"version":3,"file":"SideNav.d.ts","sourceRoot":"","sources":["../../../src/components/SideNav/SideNav.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,SAAS,EAAkD,MAAM,OAAO,CAAA;AAMrF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,UAAU,SAAS;IACjB,QAAQ,EAAE,SAAS,CAAA;IACnB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC;AAED,iBAAS,IAAI,CAAC,EACZ,QAAQ,EACR,YAAY,EAAE,SAAS,EACvB,KAAK,EAAE,eAAe,EACtB,YAAY,EACZ,aAAa,GACd,EAAE,SAAS,2CAgEX;AAID,UAAU,UAAU;IAClB,QAAQ,EAAE,SAAS,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,iBAAS,KAAK,CAAC,EAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAC,EAAE,UAAU,2CAoEtE;AAID,UAAU,YAAY;IACpB,QAAQ,EAAE,SAAS,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;;GASG;AACH,iBAAS,OAAO,CAAC,EAAC,QAAQ,EAAE,KAAK,EAAC,EAAE,YAAY,2CAY/C;AAID,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,SAAS,CAAA;IACnB;yEACqE;IACrE,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,iBAAS,IAAI,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAC,EAAE,SAAS,2CAyB/C;AAED,eAAO,MAAM,OAAO;;;;;CAKnB,CAAA"}
@@ -9,4 +9,7 @@ export declare const Collapsed: Story;
9
9
  export declare const DefaultExpandedWithActiveItem: Story;
10
10
  export declare const Interactive: Story;
11
11
  export declare const FlatWithIcons: Story;
12
+ /** `aria-label` names the landmark, so a page with a breadcrumb or a pager
13
+ * beside it still lists the side navigation by name. */
14
+ export declare const Named: Story;
12
15
  //# sourceMappingURL=SideNav.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SideNav.stories.d.ts","sourceRoot":"","sources":["../../../src/components/SideNav/SideNav.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAEpD,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAGjC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,OAAO,CAAC,IAAI,CAMnC,CAAA;AAED,eAAe,IAAI,CAAA;AACnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;AAK1C,eAAO,MAAM,OAAO,EAAE,KAgCrB,CAAA;AAKD,eAAO,MAAM,6BAA6B,EAAE,KAwC3C,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,KAoBvB,CAAA;AAMD,eAAO,MAAM,6BAA6B,EAAE,KAgB3C,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,KAgBzB,CAAA;AAKD,eAAO,MAAM,aAAa,EAAE,KAsC3B,CAAA"}
1
+ {"version":3,"file":"SideNav.stories.d.ts","sourceRoot":"","sources":["../../../src/components/SideNav/SideNav.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAEpD,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAIjC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,OAAO,CAAC,IAAI,CAMnC,CAAA;AAED,eAAe,IAAI,CAAA;AACnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;AAK1C,eAAO,MAAM,OAAO,EAAE,KAgCrB,CAAA;AAKD,eAAO,MAAM,6BAA6B,EAAE,KAwC3C,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,KAoBvB,CAAA;AAMD,eAAO,MAAM,6BAA6B,EAAE,KAgB3C,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,KAgBzB,CAAA;AAKD,eAAO,MAAM,aAAa,EAAE,KAsC3B,CAAA;AAED;yDACyD;AACzD,eAAO,MAAM,KAAK,EAAE,KAwBnB,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { ReactNode } from 'react';
2
+ interface TimeProps {
3
+ /**
4
+ * The instant, machine-readable: a `Date` (written as its ISO string) or an
5
+ * ISO 8601 string, which is passed through unchanged.
6
+ */
7
+ dateTime: Date | string;
8
+ /**
9
+ * The exact date and time, shown on hover ("8 October 2026, 14:03 UTC"),
10
+ * formatted by you in the reader's locale.
11
+ */
12
+ title?: string;
13
+ /** What the reader sees: a relative label from `relative()`, or a date. */
14
+ children: ReactNode;
15
+ }
16
+ /**
17
+ * Time — a date or time in running text as a `<time>` element: the visible
18
+ * text is yours (often `relative(date, {now, locale})`), the exact instant
19
+ * goes in `dateTime` for machines and `title` for people.
20
+ *
21
+ * Web only. A raw `<time>`: react-strict-dom has no `html.time`, and the
22
+ * element carries no style of its own (it inherits the text around it).
23
+ */
24
+ export declare function Time({ dateTime, title, children }: TimeProps): import("react/jsx-runtime").JSX.Element;
25
+ export {};
26
+ //# sourceMappingURL=Time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Time.d.ts","sourceRoot":"","sources":["../../../src/components/Time/Time.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAA;AAEpC,UAAU,SAAS;IACjB;;;OAGG;IACH,QAAQ,EAAE,IAAI,GAAG,MAAM,CAAA;IACvB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2EAA2E;IAC3E,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,EAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAC,EAAE,SAAS,2CAO1D"}
@@ -0,0 +1,3 @@
1
+ import { ComponentMeta } from '../component-meta';
2
+ export declare const meta: ComponentMeta;
3
+ //# sourceMappingURL=Time.meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Time.meta.d.ts","sourceRoot":"","sources":["../../../src/components/Time/Time.meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAA;AAEpD,eAAO,MAAM,IAAI,EAAE,aAclB,CAAA"}
@@ -0,0 +1,77 @@
1
+ import { StoryObj } from '@storybook/react';
2
+ type Locale = 'en' | 'fr' | 'de';
3
+ interface TimeArgs {
4
+ /** The instant shown, in days from `now` (negative: in the past). */
5
+ offsetDays: number;
6
+ /** The locale `relative` and the title use. */
7
+ locale: Locale;
8
+ /** `auto` says "yesterday" where the locale has a word; `always` keeps the number. */
9
+ numeric: 'auto' | 'always';
10
+ /** The text before the date. */
11
+ label: string;
12
+ }
13
+ declare const meta: {
14
+ title: string;
15
+ args: {
16
+ offsetDays: number;
17
+ locale: "en";
18
+ numeric: "auto";
19
+ label: string;
20
+ };
21
+ argTypes: {
22
+ offsetDays: {
23
+ control: {
24
+ type: "range";
25
+ min: number;
26
+ max: number;
27
+ step: number;
28
+ };
29
+ };
30
+ locale: {
31
+ control: {
32
+ type: "select";
33
+ labels: {
34
+ en: string;
35
+ fr: string;
36
+ de: string;
37
+ };
38
+ };
39
+ options: string[];
40
+ };
41
+ numeric: {
42
+ control: "radio";
43
+ options: string[];
44
+ };
45
+ label: {
46
+ control: "text";
47
+ };
48
+ };
49
+ parameters: {
50
+ a11y: {
51
+ test: string;
52
+ };
53
+ };
54
+ decorators: import('@storybook/react').Decorator[];
55
+ render: ({ offsetDays, locale, numeric, label }: TimeArgs) => import("react/jsx-runtime").JSX.Element;
56
+ };
57
+ export default meta;
58
+ type Story = StoryObj<typeof meta>;
59
+ /**
60
+ * A date relative to a fixed `now` (2026-10-08 12:00 UTC). Move `offsetDays`
61
+ * to walk through the units (days, weeks, months, years), switch `locale`, and
62
+ * `numeric` to always for "1 day ago" instead of "yesterday". Hover the date
63
+ * for the exact instant (title).
64
+ */
65
+ export declare const Playground: Story;
66
+ /** Playground's checks, kept off the visible story so a Control change cannot fail them. */
67
+ export declare const PlaygroundChecks: Story;
68
+ /** The words come from the locale; the exact instant stays in dateTime and title. */
69
+ export declare const TwoLocales: Story;
70
+ /** TwoLocales' checks, kept off the visible story so a Control change cannot fail them. */
71
+ export declare const TwoLocalesChecks: Story;
72
+ /** A Date is written as its ISO string. */
73
+ export declare const FromDate: Story;
74
+ /** Server and client render the same text from the same `now`: hydration
75
+ * reports nothing. It replaces the canvas's content, so it runs as a test only. */
76
+ export declare const ServerRender: Story;
77
+ //# sourceMappingURL=Time.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Time.stories.d.ts","sourceRoot":"","sources":["../../../src/components/Time/Time.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAO,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAgBpD,KAAK,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAEhC,UAAU,QAAQ;IAChB,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAA;IAClB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAA;IACd,sFAAsF;IACtF,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAA;IAC1B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAA;CACd;AAED,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyBgB,CAAA;AAE1B,eAAe,IAAI,CAAA;AACnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAA;AAuBlC;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,KAAU,CAAA;AAEnC,4FAA4F;AAC5F,eAAO,MAAM,gBAAgB,EAAE,KAS9B,CAAA;AAED,qFAAqF;AACrF,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAA;AAED,2FAA2F;AAC3F,eAAO,MAAM,gBAAgB,EAAE,KAc9B,CAAA;AAED,2CAA2C;AAC3C,eAAO,MAAM,QAAQ,EAAE,KAYtB,CAAA;AAED;oFACoF;AACpF,eAAO,MAAM,YAAY,EAAE,KA4B1B,CAAA"}
@@ -0,0 +1,27 @@
1
+ export interface RelativeOptions {
2
+ /**
3
+ * The instant to measure from. Required: read the clock once where the data
4
+ * is loaded (a route loader) and pass the same value to the server and the
5
+ * client render, so both produce the same text. Never `Date.now()` during a
6
+ * render — the client would hydrate a different string.
7
+ */
8
+ now: Date | number;
9
+ /** BCP 47 locale(s) for the words ("3 days ago", "il y a 3 jours"). */
10
+ locale: string | readonly string[];
11
+ /**
12
+ * `auto` (default) says "yesterday" / "tomorrow" / "now" where the locale has
13
+ * a word for it; `always` keeps the number ("1 day ago").
14
+ */
15
+ numeric?: 'auto' | 'always';
16
+ }
17
+ /**
18
+ * How far `date` is from `now`, in words, in the caller's locale:
19
+ * `relative(lastCommit, {now, locale: 'en'})` → "3 days ago". Built on
20
+ * `Intl.RelativeTimeFormat`; the largest unit that keeps the count at least 1
21
+ * is used, rounded to the nearest whole unit.
22
+ *
23
+ * An unparseable date throws a `RangeError` (as `Intl` does): check the data
24
+ * before rendering it.
25
+ */
26
+ export declare function relative(date: Date | number | string, options: RelativeOptions): string;
27
+ //# sourceMappingURL=relative.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relative.d.ts","sourceRoot":"","sources":["../../../src/components/Time/relative.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,GAAG,EAAE,IAAI,GAAG,MAAM,CAAA;IAClB,uEAAuE;IACvE,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAA;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;CAC5B;AAgDD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,CAavF"}
package/dist/form.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { jsx as T } from "react/jsx-runtime";
2
- import { c as A, m as B, d as G } from "./compiler-runtime-B2IcI8_O.js";
2
+ import { c as A, m as B, d as G } from "./compiler-runtime-BuugS4D0.js";
3
3
  import { useRef as M, useEffect as q } from "react";
4
4
  import { useForm as H, FormProvider as J } from "react-hook-form";
5
5
  import { effectTsResolver as N } from "@hookform/resolvers/effect-ts";