@tomny-dev/uzi 0.2.12 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/README.md +9 -0
  2. package/dist/components/application-scaffolding.test.d.ts +2 -0
  3. package/dist/components/application-scaffolding.test.d.ts.map +1 -0
  4. package/dist/components/empty-state/EmptyState.d.ts +14 -0
  5. package/dist/components/empty-state/EmptyState.d.ts.map +1 -0
  6. package/dist/components/layout-primitives/LayoutPrimitives.d.ts +16 -0
  7. package/dist/components/layout-primitives/LayoutPrimitives.d.ts.map +1 -0
  8. package/dist/components/page-container/PageContainer.d.ts +10 -0
  9. package/dist/components/page-container/PageContainer.d.ts.map +1 -0
  10. package/dist/components/page-header/PageHeader.d.ts +11 -0
  11. package/dist/components/page-header/PageHeader.d.ts.map +1 -0
  12. package/dist/components/section-header/SectionHeader.d.ts +10 -0
  13. package/dist/components/section-header/SectionHeader.d.ts.map +1 -0
  14. package/dist/components/stat/Stat.d.ts +12 -0
  15. package/dist/components/stat/Stat.d.ts.map +1 -0
  16. package/dist/index.cjs +19 -5
  17. package/dist/index.d.ts +12 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +12 -6
  20. package/dist/index41.js +12 -10
  21. package/dist/index41.js.map +1 -1
  22. package/dist/index42.cjs +14 -11
  23. package/dist/index42.cjs.map +1 -1
  24. package/dist/index42.js +14 -13
  25. package/dist/index42.js.map +1 -1
  26. package/dist/index43.cjs +14 -13
  27. package/dist/index43.cjs.map +1 -1
  28. package/dist/index43.js +15 -11
  29. package/dist/index43.js.map +1 -1
  30. package/dist/index44.cjs +21 -13
  31. package/dist/index44.cjs.map +1 -1
  32. package/dist/index44.js +28 -17
  33. package/dist/index44.js.map +1 -1
  34. package/dist/index45.cjs +27 -16
  35. package/dist/index45.cjs.map +1 -1
  36. package/dist/index45.js +13 -9
  37. package/dist/index45.js.map +1 -1
  38. package/dist/index46.cjs +18 -12
  39. package/dist/index46.cjs.map +1 -1
  40. package/dist/index46.js +22 -90
  41. package/dist/index46.js.map +1 -1
  42. package/dist/index47.cjs +21 -91
  43. package/dist/index47.cjs.map +1 -1
  44. package/dist/index47.js +17 -21
  45. package/dist/index47.js.map +1 -1
  46. package/dist/index48.cjs +24 -30
  47. package/dist/index48.cjs.map +1 -1
  48. package/dist/index48.js +30 -45
  49. package/dist/index48.js.map +1 -1
  50. package/dist/index49.cjs +29 -46
  51. package/dist/index49.cjs.map +1 -1
  52. package/dist/index49.js +14 -57
  53. package/dist/index49.js.map +1 -1
  54. package/dist/index50.cjs +17 -84
  55. package/dist/index50.cjs.map +1 -1
  56. package/dist/index50.js +24 -428
  57. package/dist/index50.js.map +1 -1
  58. package/dist/index51.cjs +24 -431
  59. package/dist/index51.cjs.map +1 -1
  60. package/dist/index51.js +21 -0
  61. package/dist/index51.js.map +1 -0
  62. package/dist/index52.cjs +26 -0
  63. package/dist/index52.cjs.map +1 -0
  64. package/dist/index52.js +35 -0
  65. package/dist/index52.js.map +1 -0
  66. package/dist/index53.cjs +36 -0
  67. package/dist/index53.cjs.map +1 -0
  68. package/dist/index53.js +14 -0
  69. package/dist/index53.js.map +1 -0
  70. package/dist/index54.cjs +15 -0
  71. package/dist/index54.cjs.map +1 -0
  72. package/dist/index54.js +21 -0
  73. package/dist/index54.js.map +1 -0
  74. package/dist/index55.cjs +21 -0
  75. package/dist/index55.cjs.map +1 -0
  76. package/dist/index55.js +15 -0
  77. package/dist/index55.js.map +1 -0
  78. package/dist/index56.cjs +17 -0
  79. package/dist/index56.cjs.map +1 -0
  80. package/dist/index56.js +24 -0
  81. package/dist/index56.js.map +1 -0
  82. package/dist/index57.cjs +24 -0
  83. package/dist/index57.cjs.map +1 -0
  84. package/dist/index57.js +13 -0
  85. package/dist/index57.js.map +1 -0
  86. package/dist/index58.cjs +16 -0
  87. package/dist/index58.cjs.map +1 -0
  88. package/dist/index58.js +96 -0
  89. package/dist/index58.js.map +1 -0
  90. package/dist/index59.cjs +98 -0
  91. package/dist/index59.cjs.map +1 -0
  92. package/dist/index59.js +25 -0
  93. package/dist/index59.js.map +1 -0
  94. package/dist/index60.cjs +34 -0
  95. package/dist/index60.cjs.map +1 -0
  96. package/dist/index60.js +50 -0
  97. package/dist/index60.js.map +1 -0
  98. package/dist/index61.cjs +52 -0
  99. package/dist/index61.cjs.map +1 -0
  100. package/dist/index61.js +61 -0
  101. package/dist/index61.js.map +1 -0
  102. package/dist/index62.cjs +88 -0
  103. package/dist/index62.cjs.map +1 -0
  104. package/dist/index62.js +439 -0
  105. package/dist/index62.js.map +1 -0
  106. package/dist/index63.cjs +443 -0
  107. package/dist/index63.cjs.map +1 -0
  108. package/dist/style.css +237 -0
  109. package/package.json +1 -1
package/dist/index45.cjs CHANGED
@@ -1,24 +1,35 @@
1
1
  const require_cx = require("./index4.cjs");
2
- const require_progress_module = require("./index44.cjs");
2
+ const require_page_header_module = require("./index44.cjs");
3
3
  let react_jsx_runtime = require("react/jsx-runtime");
4
- //#region src/components/progress/Progress.tsx
5
- function Progress({ value, tone = "default", className, "aria-label": ariaLabel, ...rest }) {
6
- const clamped = Math.max(0, Math.min(100, value));
7
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
8
- className: require_cx.cx(require_progress_module.default.track, className),
9
- role: "progressbar",
10
- "aria-valuenow": clamped,
11
- "aria-valuemin": 0,
12
- "aria-valuemax": 100,
13
- "aria-label": ariaLabel,
4
+ //#region src/components/page-header/PageHeader.tsx
5
+ function PageHeader({ title, description, eyebrow, actions, headingLevel = 1, className, ...rest }) {
6
+ const Heading = `h${headingLevel}`;
7
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
8
+ className: require_cx.cx(require_page_header_module.default.header, className),
14
9
  ...rest,
15
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
16
- className: require_cx.cx(require_progress_module.default.fill, require_progress_module.default[`tone-${tone}`]),
17
- style: { width: `${clamped}%` }
18
- })
10
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11
+ className: require_page_header_module.default.content,
12
+ children: [
13
+ eyebrow != null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
14
+ className: require_page_header_module.default.eyebrow,
15
+ children: eyebrow
16
+ }),
17
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Heading, {
18
+ className: require_page_header_module.default.title,
19
+ children: title
20
+ }),
21
+ description != null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
22
+ className: require_page_header_module.default.description,
23
+ children: description
24
+ })
25
+ ]
26
+ }), actions != null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
27
+ className: require_page_header_module.default.actions,
28
+ children: actions
29
+ })]
19
30
  });
20
31
  }
21
32
  //#endregion
22
- exports.Progress = Progress;
33
+ exports.PageHeader = PageHeader;
23
34
 
24
35
  //# sourceMappingURL=index45.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index45.cjs","names":[],"sources":["../src/components/progress/Progress.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./progress.module.css\";\n\nexport type ProgressTone = \"default\" | \"success\" | \"warning\" | \"danger\";\n\nexport type ProgressProps = HTMLAttributes<HTMLDivElement> & {\n /** Value 0–100. */\n value: number;\n /** Visual tone. Defaults to \"default\". */\n tone?: ProgressTone;\n /** Accessible label. */\n \"aria-label\"?: string;\n};\n\nexport function Progress({\n value,\n tone = \"default\",\n className,\n \"aria-label\": ariaLabel,\n ...rest\n}: ProgressProps) {\n const clamped = Math.max(0, Math.min(100, value));\n return (\n <div\n className={cx(styles.track, className)}\n role=\"progressbar\"\n aria-valuenow={clamped}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={ariaLabel}\n {...rest}\n >\n <div\n className={cx(styles.fill, styles[`tone-${tone}`])}\n style={{ width: `${clamped}%` }}\n />\n </div>\n );\n}\n"],"mappings":";;;;AAeA,SAAgB,SAAS,EACvB,OACA,OAAO,WACP,WACA,cAAc,WACd,GAAG,QACa;CAChB,MAAM,UAAU,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC;CAChD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACE,WAAW,WAAA,GAAG,wBAAA,QAAO,OAAO,SAAS;EACrC,MAAK;EACL,iBAAe;EACf,iBAAe;EACf,iBAAe;EACf,cAAY;EACZ,GAAI;YAEJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GACE,WAAW,WAAA,GAAG,wBAAA,QAAO,MAAM,wBAAA,QAAO,QAAQ,OAAO;GACjD,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG;EAC/B,CAAA;CACE,CAAA;AAET"}
1
+ {"version":3,"file":"index45.cjs","names":[],"sources":["../src/components/page-header/PageHeader.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./page-header.module.css\";\n\nexport type PageHeaderHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport type PageHeaderProps = Omit<HTMLAttributes<HTMLElement>, \"title\"> & {\n title: ReactNode;\n description?: ReactNode;\n eyebrow?: ReactNode;\n actions?: ReactNode;\n headingLevel?: PageHeaderHeadingLevel;\n};\n\nexport function PageHeader({\n title,\n description,\n eyebrow,\n actions,\n headingLevel = 1,\n className,\n ...rest\n}: PageHeaderProps) {\n const Heading = `h${headingLevel}` as `h${PageHeaderHeadingLevel}`;\n\n return (\n <header className={cx(styles.header, className)} {...rest}>\n <div className={styles.content}>\n {eyebrow != null && <div className={styles.eyebrow}>{eyebrow}</div>}\n <Heading className={styles.title}>{title}</Heading>\n {description != null && <div className={styles.description}>{description}</div>}\n </div>\n {actions != null && <div className={styles.actions}>{actions}</div>}\n </header>\n );\n}\n"],"mappings":";;;;AAcA,SAAgB,WAAW,EACzB,OACA,aACA,SACA,SACA,eAAe,GACf,WACA,GAAG,QACe;CAClB,MAAM,UAAU,IAAI;CAEpB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;EAAQ,WAAW,WAAA,GAAG,2BAAA,QAAO,QAAQ,SAAS;EAAG,GAAI;YAArD,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAW,2BAAA,QAAO;aAAvB;IACG,WAAW,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAW,2BAAA,QAAO;eAAU;IAAa,CAAA;IAClE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;KAAS,WAAW,2BAAA,QAAO;eAAQ;IAAe,CAAA;IACjD,eAAe,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAW,2BAAA,QAAO;eAAc;IAAiB,CAAA;GAC3E;MACJ,WAAW,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAW,2BAAA,QAAO;aAAU;EAAa,CAAA,CAC5D;;AAEZ"}
package/dist/index45.js CHANGED
@@ -1,13 +1,17 @@
1
- //#region src/components/segmented-toggle/segmented-toggle.module.css
2
- var track = "uzi-segmented-toggle-module__track__M4fjm";
3
- var option = "uzi-segmented-toggle-module__option__7cEZJ";
4
- var label = "uzi-segmented-toggle-module__label__bDAIv";
5
- var segmented_toggle_module_default = {
6
- track,
7
- option,
8
- label
1
+ //#region src/components/section-header/section-header.module.css
2
+ var header = "uzi-section-header-module__header__tTqQQ";
3
+ var content = "uzi-section-header-module__content__6prWG";
4
+ var title = "uzi-section-header-module__title__7ddbh";
5
+ var description = "uzi-section-header-module__description__T8tck";
6
+ var actions = "uzi-section-header-module__actions__kS-uK";
7
+ var section_header_module_default = {
8
+ header,
9
+ content,
10
+ title,
11
+ description,
12
+ actions
9
13
  };
10
14
  //#endregion
11
- export { segmented_toggle_module_default as default, label, option, track };
15
+ export { actions, content, section_header_module_default as default, description, header, title };
12
16
 
13
17
  //# sourceMappingURL=index45.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index45.js","names":[],"sources":["../src/components/segmented-toggle/segmented-toggle.module.css"],"sourcesContent":[".track {\n display: inline-flex;\n border-radius: 999px;\n border: 1px solid var(--border);\n background: var(--card);\n padding: 4px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n gap: 2px;\n}\n\n.option {\n border-radius: 999px;\n padding: 6px 16px;\n font-size: var(--uzi-control-font-size);\n font-weight: 500;\n line-height: var(--uzi-control-line-height);\n background: transparent;\n color: var(--muted-foreground);\n border: none;\n cursor: pointer;\n transition:\n color 120ms ease,\n background 120ms ease;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n white-space: nowrap;\n}\n\n.label {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.option:hover:not([aria-checked=\"true\"]):not(:disabled) {\n color: var(--foreground);\n}\n\n.option[aria-checked=\"true\"] {\n background: var(--foreground);\n color: var(--background);\n}\n\n.option:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.option:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n"],"mappings":""}
1
+ {"version":3,"file":"index45.js","names":[],"sources":["../src/components/section-header/section-header.module.css"],"sourcesContent":[".header {\n display: flex;\n align-items: flex-end;\n justify-content: space-between;\n gap: 1rem;\n}\n\n.content {\n min-width: 0;\n display: grid;\n gap: 0.375rem;\n}\n\n.title {\n margin: 0;\n color: var(--foreground);\n font-size: clamp(1.25rem, 2vw, 1.625rem);\n line-height: 1.2;\n letter-spacing: -0.015em;\n}\n\n.description {\n max-width: 44rem;\n color: var(--muted-foreground);\n font-size: 0.875rem;\n line-height: 1.6;\n}\n\n.actions {\n display: flex;\n flex: 0 0 auto;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: 0.5rem;\n}\n\n@media (max-width: 40rem) {\n .header {\n align-items: flex-start;\n flex-direction: column;\n }\n\n .actions {\n width: 100%;\n justify-content: flex-start;\n }\n}\n"],"mappings":""}
package/dist/index46.cjs CHANGED
@@ -1,16 +1,22 @@
1
- //#region src/components/segmented-toggle/segmented-toggle.module.css
2
- var track = "uzi-segmented-toggle-module__track__M4fjm";
3
- var option = "uzi-segmented-toggle-module__option__7cEZJ";
4
- var label = "uzi-segmented-toggle-module__label__bDAIv";
5
- var segmented_toggle_module_default = {
6
- track,
7
- option,
8
- label
1
+ //#region src/components/section-header/section-header.module.css
2
+ var header = "uzi-section-header-module__header__tTqQQ";
3
+ var content = "uzi-section-header-module__content__6prWG";
4
+ var title = "uzi-section-header-module__title__7ddbh";
5
+ var description = "uzi-section-header-module__description__T8tck";
6
+ var actions = "uzi-section-header-module__actions__kS-uK";
7
+ var section_header_module_default = {
8
+ header,
9
+ content,
10
+ title,
11
+ description,
12
+ actions
9
13
  };
10
14
  //#endregion
11
- exports.default = segmented_toggle_module_default;
12
- exports.label = label;
13
- exports.option = option;
14
- exports.track = track;
15
+ exports.actions = actions;
16
+ exports.content = content;
17
+ exports.default = section_header_module_default;
18
+ exports.description = description;
19
+ exports.header = header;
20
+ exports.title = title;
15
21
 
16
22
  //# sourceMappingURL=index46.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index46.cjs","names":[],"sources":["../src/components/segmented-toggle/segmented-toggle.module.css"],"sourcesContent":[".track {\n display: inline-flex;\n border-radius: 999px;\n border: 1px solid var(--border);\n background: var(--card);\n padding: 4px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n gap: 2px;\n}\n\n.option {\n border-radius: 999px;\n padding: 6px 16px;\n font-size: var(--uzi-control-font-size);\n font-weight: 500;\n line-height: var(--uzi-control-line-height);\n background: transparent;\n color: var(--muted-foreground);\n border: none;\n cursor: pointer;\n transition:\n color 120ms ease,\n background 120ms ease;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n white-space: nowrap;\n}\n\n.label {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.option:hover:not([aria-checked=\"true\"]):not(:disabled) {\n color: var(--foreground);\n}\n\n.option[aria-checked=\"true\"] {\n background: var(--foreground);\n color: var(--background);\n}\n\n.option:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.option:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n"],"mappings":""}
1
+ {"version":3,"file":"index46.cjs","names":[],"sources":["../src/components/section-header/section-header.module.css"],"sourcesContent":[".header {\n display: flex;\n align-items: flex-end;\n justify-content: space-between;\n gap: 1rem;\n}\n\n.content {\n min-width: 0;\n display: grid;\n gap: 0.375rem;\n}\n\n.title {\n margin: 0;\n color: var(--foreground);\n font-size: clamp(1.25rem, 2vw, 1.625rem);\n line-height: 1.2;\n letter-spacing: -0.015em;\n}\n\n.description {\n max-width: 44rem;\n color: var(--muted-foreground);\n font-size: 0.875rem;\n line-height: 1.6;\n}\n\n.actions {\n display: flex;\n flex: 0 0 auto;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: 0.5rem;\n}\n\n@media (max-width: 40rem) {\n .header {\n align-items: flex-start;\n flex-direction: column;\n }\n\n .actions {\n width: 100%;\n justify-content: flex-start;\n }\n}\n"],"mappings":""}
package/dist/index46.js CHANGED
@@ -1,96 +1,28 @@
1
- "use client";
2
1
  import { cx } from "./index3.js";
3
- import segmented_toggle_module_default from "./index45.js";
4
- import * as React from "react";
5
- import { jsx } from "react/jsx-runtime";
6
- //#region src/components/segmented-toggle/SegmentedToggle.tsx
7
- function SegmentedToggle({ options, value, onChange, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, className }) {
8
- const itemRefs = React.useRef([]);
9
- const selectedIndex = options.findIndex((opt) => opt.value === value);
10
- const fallbackIndex = options.findIndex((opt) => !opt.disabled);
11
- let lastEnabledIndex = -1;
12
- for (let index = options.length - 1; index >= 0; index -= 1) if (!options[index]?.disabled) {
13
- lastEnabledIndex = index;
14
- break;
15
- }
16
- const tabbableIndex = selectedIndex >= 0 && !options[selectedIndex]?.disabled ? selectedIndex : fallbackIndex;
17
- const focusItem = (index) => {
18
- itemRefs.current[index]?.focus();
19
- };
20
- const findEnabledIndex = (startIndex, direction) => {
21
- if (options.length === 0) return -1;
22
- let nextIndex = startIndex;
23
- for (let i = 0; i < options.length; i += 1) {
24
- nextIndex = (nextIndex + direction + options.length) % options.length;
25
- if (!options[nextIndex]?.disabled) return nextIndex;
26
- }
27
- return startIndex;
28
- };
29
- const selectIndex = (index) => {
30
- const nextOption = options[index];
31
- if (!nextOption || nextOption.disabled || nextOption.value === value) return;
32
- onChange(nextOption.value);
33
- };
34
- const handleKeyDown = (event, index) => {
35
- switch (event.key) {
36
- case "ArrowRight":
37
- case "ArrowDown": {
38
- event.preventDefault();
39
- const nextIndex = findEnabledIndex(index, 1);
40
- focusItem(nextIndex);
41
- selectIndex(nextIndex);
42
- break;
43
- }
44
- case "ArrowLeft":
45
- case "ArrowUp": {
46
- event.preventDefault();
47
- const nextIndex = findEnabledIndex(index, -1);
48
- focusItem(nextIndex);
49
- selectIndex(nextIndex);
50
- break;
51
- }
52
- case "Home":
53
- event.preventDefault();
54
- focusItem(fallbackIndex);
55
- if (fallbackIndex >= 0) selectIndex(fallbackIndex);
56
- break;
57
- case "End":
58
- event.preventDefault();
59
- if (lastEnabledIndex >= 0) {
60
- focusItem(lastEnabledIndex);
61
- selectIndex(lastEnabledIndex);
62
- }
63
- break;
64
- default: break;
65
- }
66
- };
67
- return /* @__PURE__ */ jsx("div", {
68
- className: cx(segmented_toggle_module_default.track, className),
69
- role: "radiogroup",
70
- "aria-label": ariaLabel,
71
- "aria-labelledby": ariaLabelledBy,
72
- children: options.map((opt, index) => /* @__PURE__ */ jsx("button", {
73
- ref: (node) => {
74
- itemRefs.current[index] = node;
75
- },
76
- type: "button",
77
- role: "radio",
78
- "aria-checked": opt.value === value,
79
- disabled: opt.disabled,
80
- tabIndex: opt.disabled ? -1 : index === tabbableIndex ? 0 : -1,
81
- onClick: () => {
82
- if (opt.value !== value) onChange(opt.value);
83
- },
84
- onKeyDown: (event) => handleKeyDown(event, index),
85
- className: cx(segmented_toggle_module_default.option),
86
- children: /* @__PURE__ */ jsx("span", {
87
- className: segmented_toggle_module_default.label,
88
- children: opt.label
89
- })
90
- }, opt.value))
2
+ import section_header_module_default from "./index45.js";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/components/section-header/SectionHeader.tsx
5
+ function SectionHeader({ title, description, actions, headingLevel = 2, className, ...rest }) {
6
+ const Heading = `h${headingLevel}`;
7
+ return /* @__PURE__ */ jsxs("div", {
8
+ className: cx(section_header_module_default.header, className),
9
+ ...rest,
10
+ children: [/* @__PURE__ */ jsxs("div", {
11
+ className: section_header_module_default.content,
12
+ children: [/* @__PURE__ */ jsx(Heading, {
13
+ className: section_header_module_default.title,
14
+ children: title
15
+ }), description != null && /* @__PURE__ */ jsx("div", {
16
+ className: section_header_module_default.description,
17
+ children: description
18
+ })]
19
+ }), actions != null && /* @__PURE__ */ jsx("div", {
20
+ className: section_header_module_default.actions,
21
+ children: actions
22
+ })]
91
23
  });
92
24
  }
93
25
  //#endregion
94
- export { SegmentedToggle };
26
+ export { SectionHeader };
95
27
 
96
28
  //# sourceMappingURL=index46.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index46.js","names":[],"sources":["../src/components/segmented-toggle/SegmentedToggle.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport type { ReactNode } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./segmented-toggle.module.css\";\n\nexport type SegmentedToggleOption<T extends string = string> = {\n label: ReactNode;\n value: T;\n disabled?: boolean;\n};\n\nexport type SegmentedToggleProps<T extends string = string> = {\n options: SegmentedToggleOption<T>[];\n value: T;\n onChange: (value: T) => void;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n className?: string;\n};\n\nexport function SegmentedToggle<T extends string = string>({\n options,\n value,\n onChange,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n className,\n}: SegmentedToggleProps<T>) {\n const itemRefs = React.useRef<Array<HTMLButtonElement | null>>([]);\n const selectedIndex = options.findIndex((opt) => opt.value === value);\n const fallbackIndex = options.findIndex((opt) => !opt.disabled);\n let lastEnabledIndex = -1;\n for (let index = options.length - 1; index >= 0; index -= 1) {\n if (!options[index]?.disabled) {\n lastEnabledIndex = index;\n break;\n }\n }\n const tabbableIndex =\n selectedIndex >= 0 && !options[selectedIndex]?.disabled\n ? selectedIndex\n : fallbackIndex;\n\n const focusItem = (index: number) => {\n itemRefs.current[index]?.focus();\n };\n\n const findEnabledIndex = (\n startIndex: number,\n direction: 1 | -1,\n ): number => {\n if (options.length === 0) return -1;\n\n let nextIndex = startIndex;\n for (let i = 0; i < options.length; i += 1) {\n nextIndex = (nextIndex + direction + options.length) % options.length;\n if (!options[nextIndex]?.disabled) {\n return nextIndex;\n }\n }\n\n return startIndex;\n };\n\n const selectIndex = (index: number) => {\n const nextOption = options[index];\n if (!nextOption || nextOption.disabled || nextOption.value === value) {\n return;\n }\n onChange(nextOption.value);\n };\n\n const handleKeyDown = (\n event: React.KeyboardEvent<HTMLButtonElement>,\n index: number,\n ) => {\n switch (event.key) {\n case \"ArrowRight\":\n case \"ArrowDown\": {\n event.preventDefault();\n const nextIndex = findEnabledIndex(index, 1);\n focusItem(nextIndex);\n selectIndex(nextIndex);\n break;\n }\n case \"ArrowLeft\":\n case \"ArrowUp\": {\n event.preventDefault();\n const nextIndex = findEnabledIndex(index, -1);\n focusItem(nextIndex);\n selectIndex(nextIndex);\n break;\n }\n case \"Home\": {\n event.preventDefault();\n focusItem(fallbackIndex);\n if (fallbackIndex >= 0) {\n selectIndex(fallbackIndex);\n }\n break;\n }\n case \"End\": {\n event.preventDefault();\n if (lastEnabledIndex >= 0) {\n focusItem(lastEnabledIndex);\n selectIndex(lastEnabledIndex);\n }\n break;\n }\n default:\n break;\n }\n };\n\n return (\n <div\n className={cx(styles.track, className)}\n role=\"radiogroup\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n >\n {options.map((opt, index) => (\n <button\n key={opt.value}\n ref={(node) => {\n itemRefs.current[index] = node;\n }}\n type=\"button\"\n role=\"radio\"\n aria-checked={opt.value === value}\n disabled={opt.disabled}\n tabIndex={\n opt.disabled\n ? -1\n : index === tabbableIndex\n ? 0\n : -1\n }\n onClick={() => {\n if (opt.value !== value) {\n onChange(opt.value);\n }\n }}\n onKeyDown={(event) => handleKeyDown(event, index)}\n className={cx(styles.option)}\n >\n <span className={styles.label}>{opt.label}</span>\n </button>\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;;AAsBA,SAAgB,gBAA2C,EACzD,SACA,OACA,UACA,cAAc,WACd,mBAAmB,gBACnB,aAC0B;CAC1B,MAAM,WAAW,MAAM,OAAwC,CAAC,CAAC;CACjE,MAAM,gBAAgB,QAAQ,WAAW,QAAQ,IAAI,UAAU,KAAK;CACpE,MAAM,gBAAgB,QAAQ,WAAW,QAAQ,CAAC,IAAI,QAAQ;CAC9D,IAAI,mBAAmB;CACvB,KAAK,IAAI,QAAQ,QAAQ,SAAS,GAAG,SAAS,GAAG,SAAS,GACxD,IAAI,CAAC,QAAQ,MAAM,EAAE,UAAU;EAC7B,mBAAmB;EACnB;CACF;CAEF,MAAM,gBACJ,iBAAiB,KAAK,CAAC,QAAQ,cAAc,EAAE,WAC3C,gBACA;CAEN,MAAM,aAAa,UAAkB;EACnC,SAAS,QAAQ,MAAM,EAAE,MAAM;CACjC;CAEA,MAAM,oBACJ,YACA,cACW;EACX,IAAI,QAAQ,WAAW,GAAG,OAAO;EAEjC,IAAI,YAAY;EAChB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;GAC1C,aAAa,YAAY,YAAY,QAAQ,UAAU,QAAQ;GAC/D,IAAI,CAAC,QAAQ,UAAU,EAAE,UACvB,OAAO;EAEX;EAEA,OAAO;CACT;CAEA,MAAM,eAAe,UAAkB;EACrC,MAAM,aAAa,QAAQ;EAC3B,IAAI,CAAC,cAAc,WAAW,YAAY,WAAW,UAAU,OAC7D;EAEF,SAAS,WAAW,KAAK;CAC3B;CAEA,MAAM,iBACJ,OACA,UACG;EACH,QAAQ,MAAM,KAAd;GACE,KAAK;GACL,KAAK,aAAa;IAChB,MAAM,eAAe;IACrB,MAAM,YAAY,iBAAiB,OAAO,CAAC;IAC3C,UAAU,SAAS;IACnB,YAAY,SAAS;IACrB;GACF;GACA,KAAK;GACL,KAAK,WAAW;IACd,MAAM,eAAe;IACrB,MAAM,YAAY,iBAAiB,OAAO,EAAE;IAC5C,UAAU,SAAS;IACnB,YAAY,SAAS;IACrB;GACF;GACA,KAAK;IACH,MAAM,eAAe;IACrB,UAAU,aAAa;IACvB,IAAI,iBAAiB,GACnB,YAAY,aAAa;IAE3B;GAEF,KAAK;IACH,MAAM,eAAe;IACrB,IAAI,oBAAoB,GAAG;KACzB,UAAU,gBAAgB;KAC1B,YAAY,gBAAgB;IAC9B;IACA;GAEF,SACE;EACJ;CACF;CAEA,OACE,oBAAC,OAAD;EACE,WAAW,GAAG,gCAAO,OAAO,SAAS;EACrC,MAAK;EACL,cAAY;EACZ,mBAAiB;YAEhB,QAAQ,KAAK,KAAK,UACjB,oBAAC,UAAD;GAEE,MAAM,SAAS;IACb,SAAS,QAAQ,SAAS;GAC5B;GACA,MAAK;GACL,MAAK;GACL,gBAAc,IAAI,UAAU;GAC5B,UAAU,IAAI;GACd,UACE,IAAI,WACA,KACA,UAAU,gBACR,IACA;GAER,eAAe;IACb,IAAI,IAAI,UAAU,OAChB,SAAS,IAAI,KAAK;GAEtB;GACA,YAAY,UAAU,cAAc,OAAO,KAAK;GAChD,WAAW,GAAG,gCAAO,MAAM;aAE3B,oBAAC,QAAD;IAAM,WAAW,gCAAO;cAAQ,IAAI;GAAY,CAAA;EAC1C,GAxBD,IAAI,KAwBH,CACT;CACE,CAAA;AAET"}
1
+ {"version":3,"file":"index46.js","names":[],"sources":["../src/components/section-header/SectionHeader.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./section-header.module.css\";\n\nexport type SectionHeaderHeadingLevel = 2 | 3 | 4 | 5 | 6;\n\nexport type SectionHeaderProps = Omit<HTMLAttributes<HTMLDivElement>, \"title\"> & {\n title: ReactNode;\n description?: ReactNode;\n actions?: ReactNode;\n headingLevel?: SectionHeaderHeadingLevel;\n};\n\nexport function SectionHeader({\n title,\n description,\n actions,\n headingLevel = 2,\n className,\n ...rest\n}: SectionHeaderProps) {\n const Heading = `h${headingLevel}` as `h${SectionHeaderHeadingLevel}`;\n\n return (\n <div className={cx(styles.header, className)} {...rest}>\n <div className={styles.content}>\n <Heading className={styles.title}>{title}</Heading>\n {description != null && <div className={styles.description}>{description}</div>}\n </div>\n {actions != null && <div className={styles.actions}>{actions}</div>}\n </div>\n );\n}\n"],"mappings":";;;;AAaA,SAAgB,cAAc,EAC5B,OACA,aACA,SACA,eAAe,GACf,WACA,GAAG,QACkB;CACrB,MAAM,UAAU,IAAI;CAEpB,OACE,qBAAC,OAAD;EAAK,WAAW,GAAG,8BAAO,QAAQ,SAAS;EAAG,GAAI;YAAlD,CACE,qBAAC,OAAD;GAAK,WAAW,8BAAO;aAAvB,CACE,oBAAC,SAAD;IAAS,WAAW,8BAAO;cAAQ;GAAe,CAAA,GACjD,eAAe,QAAQ,oBAAC,OAAD;IAAK,WAAW,8BAAO;cAAc;GAAiB,CAAA,CAC3E;MACJ,WAAW,QAAQ,oBAAC,OAAD;GAAK,WAAW,8BAAO;aAAU;EAAa,CAAA,CAC/D;;AAET"}
package/dist/index47.cjs CHANGED
@@ -1,98 +1,28 @@
1
- "use client";
2
- const require_runtime = require("./index2.cjs");
3
1
  const require_cx = require("./index4.cjs");
4
- const require_segmented_toggle_module = require("./index46.cjs");
5
- let react = require("react");
6
- react = require_runtime.__toESM(react, 1);
2
+ const require_section_header_module = require("./index46.cjs");
7
3
  let react_jsx_runtime = require("react/jsx-runtime");
8
- //#region src/components/segmented-toggle/SegmentedToggle.tsx
9
- function SegmentedToggle({ options, value, onChange, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, className }) {
10
- const itemRefs = react.useRef([]);
11
- const selectedIndex = options.findIndex((opt) => opt.value === value);
12
- const fallbackIndex = options.findIndex((opt) => !opt.disabled);
13
- let lastEnabledIndex = -1;
14
- for (let index = options.length - 1; index >= 0; index -= 1) if (!options[index]?.disabled) {
15
- lastEnabledIndex = index;
16
- break;
17
- }
18
- const tabbableIndex = selectedIndex >= 0 && !options[selectedIndex]?.disabled ? selectedIndex : fallbackIndex;
19
- const focusItem = (index) => {
20
- itemRefs.current[index]?.focus();
21
- };
22
- const findEnabledIndex = (startIndex, direction) => {
23
- if (options.length === 0) return -1;
24
- let nextIndex = startIndex;
25
- for (let i = 0; i < options.length; i += 1) {
26
- nextIndex = (nextIndex + direction + options.length) % options.length;
27
- if (!options[nextIndex]?.disabled) return nextIndex;
28
- }
29
- return startIndex;
30
- };
31
- const selectIndex = (index) => {
32
- const nextOption = options[index];
33
- if (!nextOption || nextOption.disabled || nextOption.value === value) return;
34
- onChange(nextOption.value);
35
- };
36
- const handleKeyDown = (event, index) => {
37
- switch (event.key) {
38
- case "ArrowRight":
39
- case "ArrowDown": {
40
- event.preventDefault();
41
- const nextIndex = findEnabledIndex(index, 1);
42
- focusItem(nextIndex);
43
- selectIndex(nextIndex);
44
- break;
45
- }
46
- case "ArrowLeft":
47
- case "ArrowUp": {
48
- event.preventDefault();
49
- const nextIndex = findEnabledIndex(index, -1);
50
- focusItem(nextIndex);
51
- selectIndex(nextIndex);
52
- break;
53
- }
54
- case "Home":
55
- event.preventDefault();
56
- focusItem(fallbackIndex);
57
- if (fallbackIndex >= 0) selectIndex(fallbackIndex);
58
- break;
59
- case "End":
60
- event.preventDefault();
61
- if (lastEnabledIndex >= 0) {
62
- focusItem(lastEnabledIndex);
63
- selectIndex(lastEnabledIndex);
64
- }
65
- break;
66
- default: break;
67
- }
68
- };
69
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
70
- className: require_cx.cx(require_segmented_toggle_module.default.track, className),
71
- role: "radiogroup",
72
- "aria-label": ariaLabel,
73
- "aria-labelledby": ariaLabelledBy,
74
- children: options.map((opt, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
75
- ref: (node) => {
76
- itemRefs.current[index] = node;
77
- },
78
- type: "button",
79
- role: "radio",
80
- "aria-checked": opt.value === value,
81
- disabled: opt.disabled,
82
- tabIndex: opt.disabled ? -1 : index === tabbableIndex ? 0 : -1,
83
- onClick: () => {
84
- if (opt.value !== value) onChange(opt.value);
85
- },
86
- onKeyDown: (event) => handleKeyDown(event, index),
87
- className: require_cx.cx(require_segmented_toggle_module.default.option),
88
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
89
- className: require_segmented_toggle_module.default.label,
90
- children: opt.label
91
- })
92
- }, opt.value))
4
+ //#region src/components/section-header/SectionHeader.tsx
5
+ function SectionHeader({ title, description, actions, headingLevel = 2, className, ...rest }) {
6
+ const Heading = `h${headingLevel}`;
7
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8
+ className: require_cx.cx(require_section_header_module.default.header, className),
9
+ ...rest,
10
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11
+ className: require_section_header_module.default.content,
12
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Heading, {
13
+ className: require_section_header_module.default.title,
14
+ children: title
15
+ }), description != null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
16
+ className: require_section_header_module.default.description,
17
+ children: description
18
+ })]
19
+ }), actions != null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
20
+ className: require_section_header_module.default.actions,
21
+ children: actions
22
+ })]
93
23
  });
94
24
  }
95
25
  //#endregion
96
- exports.SegmentedToggle = SegmentedToggle;
26
+ exports.SectionHeader = SectionHeader;
97
27
 
98
28
  //# sourceMappingURL=index47.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index47.cjs","names":[],"sources":["../src/components/segmented-toggle/SegmentedToggle.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport type { ReactNode } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./segmented-toggle.module.css\";\n\nexport type SegmentedToggleOption<T extends string = string> = {\n label: ReactNode;\n value: T;\n disabled?: boolean;\n};\n\nexport type SegmentedToggleProps<T extends string = string> = {\n options: SegmentedToggleOption<T>[];\n value: T;\n onChange: (value: T) => void;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n className?: string;\n};\n\nexport function SegmentedToggle<T extends string = string>({\n options,\n value,\n onChange,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n className,\n}: SegmentedToggleProps<T>) {\n const itemRefs = React.useRef<Array<HTMLButtonElement | null>>([]);\n const selectedIndex = options.findIndex((opt) => opt.value === value);\n const fallbackIndex = options.findIndex((opt) => !opt.disabled);\n let lastEnabledIndex = -1;\n for (let index = options.length - 1; index >= 0; index -= 1) {\n if (!options[index]?.disabled) {\n lastEnabledIndex = index;\n break;\n }\n }\n const tabbableIndex =\n selectedIndex >= 0 && !options[selectedIndex]?.disabled\n ? selectedIndex\n : fallbackIndex;\n\n const focusItem = (index: number) => {\n itemRefs.current[index]?.focus();\n };\n\n const findEnabledIndex = (\n startIndex: number,\n direction: 1 | -1,\n ): number => {\n if (options.length === 0) return -1;\n\n let nextIndex = startIndex;\n for (let i = 0; i < options.length; i += 1) {\n nextIndex = (nextIndex + direction + options.length) % options.length;\n if (!options[nextIndex]?.disabled) {\n return nextIndex;\n }\n }\n\n return startIndex;\n };\n\n const selectIndex = (index: number) => {\n const nextOption = options[index];\n if (!nextOption || nextOption.disabled || nextOption.value === value) {\n return;\n }\n onChange(nextOption.value);\n };\n\n const handleKeyDown = (\n event: React.KeyboardEvent<HTMLButtonElement>,\n index: number,\n ) => {\n switch (event.key) {\n case \"ArrowRight\":\n case \"ArrowDown\": {\n event.preventDefault();\n const nextIndex = findEnabledIndex(index, 1);\n focusItem(nextIndex);\n selectIndex(nextIndex);\n break;\n }\n case \"ArrowLeft\":\n case \"ArrowUp\": {\n event.preventDefault();\n const nextIndex = findEnabledIndex(index, -1);\n focusItem(nextIndex);\n selectIndex(nextIndex);\n break;\n }\n case \"Home\": {\n event.preventDefault();\n focusItem(fallbackIndex);\n if (fallbackIndex >= 0) {\n selectIndex(fallbackIndex);\n }\n break;\n }\n case \"End\": {\n event.preventDefault();\n if (lastEnabledIndex >= 0) {\n focusItem(lastEnabledIndex);\n selectIndex(lastEnabledIndex);\n }\n break;\n }\n default:\n break;\n }\n };\n\n return (\n <div\n className={cx(styles.track, className)}\n role=\"radiogroup\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n >\n {options.map((opt, index) => (\n <button\n key={opt.value}\n ref={(node) => {\n itemRefs.current[index] = node;\n }}\n type=\"button\"\n role=\"radio\"\n aria-checked={opt.value === value}\n disabled={opt.disabled}\n tabIndex={\n opt.disabled\n ? -1\n : index === tabbableIndex\n ? 0\n : -1\n }\n onClick={() => {\n if (opt.value !== value) {\n onChange(opt.value);\n }\n }}\n onKeyDown={(event) => handleKeyDown(event, index)}\n className={cx(styles.option)}\n >\n <span className={styles.label}>{opt.label}</span>\n </button>\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAsBA,SAAgB,gBAA2C,EACzD,SACA,OACA,UACA,cAAc,WACd,mBAAmB,gBACnB,aAC0B;CAC1B,MAAM,WAAW,MAAM,OAAwC,CAAC,CAAC;CACjE,MAAM,gBAAgB,QAAQ,WAAW,QAAQ,IAAI,UAAU,KAAK;CACpE,MAAM,gBAAgB,QAAQ,WAAW,QAAQ,CAAC,IAAI,QAAQ;CAC9D,IAAI,mBAAmB;CACvB,KAAK,IAAI,QAAQ,QAAQ,SAAS,GAAG,SAAS,GAAG,SAAS,GACxD,IAAI,CAAC,QAAQ,MAAM,EAAE,UAAU;EAC7B,mBAAmB;EACnB;CACF;CAEF,MAAM,gBACJ,iBAAiB,KAAK,CAAC,QAAQ,cAAc,EAAE,WAC3C,gBACA;CAEN,MAAM,aAAa,UAAkB;EACnC,SAAS,QAAQ,MAAM,EAAE,MAAM;CACjC;CAEA,MAAM,oBACJ,YACA,cACW;EACX,IAAI,QAAQ,WAAW,GAAG,OAAO;EAEjC,IAAI,YAAY;EAChB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;GAC1C,aAAa,YAAY,YAAY,QAAQ,UAAU,QAAQ;GAC/D,IAAI,CAAC,QAAQ,UAAU,EAAE,UACvB,OAAO;EAEX;EAEA,OAAO;CACT;CAEA,MAAM,eAAe,UAAkB;EACrC,MAAM,aAAa,QAAQ;EAC3B,IAAI,CAAC,cAAc,WAAW,YAAY,WAAW,UAAU,OAC7D;EAEF,SAAS,WAAW,KAAK;CAC3B;CAEA,MAAM,iBACJ,OACA,UACG;EACH,QAAQ,MAAM,KAAd;GACE,KAAK;GACL,KAAK,aAAa;IAChB,MAAM,eAAe;IACrB,MAAM,YAAY,iBAAiB,OAAO,CAAC;IAC3C,UAAU,SAAS;IACnB,YAAY,SAAS;IACrB;GACF;GACA,KAAK;GACL,KAAK,WAAW;IACd,MAAM,eAAe;IACrB,MAAM,YAAY,iBAAiB,OAAO,EAAE;IAC5C,UAAU,SAAS;IACnB,YAAY,SAAS;IACrB;GACF;GACA,KAAK;IACH,MAAM,eAAe;IACrB,UAAU,aAAa;IACvB,IAAI,iBAAiB,GACnB,YAAY,aAAa;IAE3B;GAEF,KAAK;IACH,MAAM,eAAe;IACrB,IAAI,oBAAoB,GAAG;KACzB,UAAU,gBAAgB;KAC1B,YAAY,gBAAgB;IAC9B;IACA;GAEF,SACE;EACJ;CACF;CAEA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACE,WAAW,WAAA,GAAG,gCAAA,QAAO,OAAO,SAAS;EACrC,MAAK;EACL,cAAY;EACZ,mBAAiB;YAEhB,QAAQ,KAAK,KAAK,UACjB,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GAEE,MAAM,SAAS;IACb,SAAS,QAAQ,SAAS;GAC5B;GACA,MAAK;GACL,MAAK;GACL,gBAAc,IAAI,UAAU;GAC5B,UAAU,IAAI;GACd,UACE,IAAI,WACA,KACA,UAAU,gBACR,IACA;GAER,eAAe;IACb,IAAI,IAAI,UAAU,OAChB,SAAS,IAAI,KAAK;GAEtB;GACA,YAAY,UAAU,cAAc,OAAO,KAAK;GAChD,WAAW,WAAA,GAAG,gCAAA,QAAO,MAAM;aAE3B,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAW,gCAAA,QAAO;cAAQ,IAAI;GAAY,CAAA;EAC1C,GAxBD,IAAI,KAwBH,CACT;CACE,CAAA;AAET"}
1
+ {"version":3,"file":"index47.cjs","names":[],"sources":["../src/components/section-header/SectionHeader.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./section-header.module.css\";\n\nexport type SectionHeaderHeadingLevel = 2 | 3 | 4 | 5 | 6;\n\nexport type SectionHeaderProps = Omit<HTMLAttributes<HTMLDivElement>, \"title\"> & {\n title: ReactNode;\n description?: ReactNode;\n actions?: ReactNode;\n headingLevel?: SectionHeaderHeadingLevel;\n};\n\nexport function SectionHeader({\n title,\n description,\n actions,\n headingLevel = 2,\n className,\n ...rest\n}: SectionHeaderProps) {\n const Heading = `h${headingLevel}` as `h${SectionHeaderHeadingLevel}`;\n\n return (\n <div className={cx(styles.header, className)} {...rest}>\n <div className={styles.content}>\n <Heading className={styles.title}>{title}</Heading>\n {description != null && <div className={styles.description}>{description}</div>}\n </div>\n {actions != null && <div className={styles.actions}>{actions}</div>}\n </div>\n );\n}\n"],"mappings":";;;;AAaA,SAAgB,cAAc,EAC5B,OACA,aACA,SACA,eAAe,GACf,WACA,GAAG,QACkB;CACrB,MAAM,UAAU,IAAI;CAEpB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAW,WAAA,GAAG,8BAAA,QAAO,QAAQ,SAAS;EAAG,GAAI;YAAlD,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAW,8BAAA,QAAO;aAAvB,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;IAAS,WAAW,8BAAA,QAAO;cAAQ;GAAe,CAAA,GACjD,eAAe,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAW,8BAAA,QAAO;cAAc;GAAiB,CAAA,CAC3E;MACJ,WAAW,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAW,8BAAA,QAAO;aAAU;EAAa,CAAA,CAC/D;;AAET"}
package/dist/index47.js CHANGED
@@ -1,25 +1,21 @@
1
- //#region src/components/auth-card/auth-card.module.css
2
- var authLayout = "uzi-auth-card-module__authLayout__GHr1j";
3
- var authCard = "uzi-auth-card-module__authCard__ZYYit";
4
- var authBrand = "uzi-auth-card-module__authBrand__ZCDVm";
5
- var authHeader = "uzi-auth-card-module__authHeader__NB6UQ";
6
- var authTitle = "uzi-auth-card-module__authTitle__VtHLn";
7
- var authSubtitle = "uzi-auth-card-module__authSubtitle__ZupId";
8
- var authBody = "uzi-auth-card-module__authBody__PTyaL";
9
- var divider = "uzi-auth-card-module__divider__D8r12";
10
- var authFooter = "uzi-auth-card-module__authFooter__C5s--";
11
- var auth_card_module_default = {
12
- authLayout,
13
- authCard,
14
- authBrand,
15
- authHeader,
16
- authTitle,
17
- authSubtitle,
18
- authBody,
19
- divider,
20
- authFooter
1
+ //#region src/components/empty-state/empty-state.module.css
2
+ var root = "uzi-empty-state-module__root__UNTr-";
3
+ var compact = "uzi-empty-state-module__compact__eStzZ";
4
+ var visual = "uzi-empty-state-module__visual__4yzn6";
5
+ var content = "uzi-empty-state-module__content__lZQTI";
6
+ var title = "uzi-empty-state-module__title__Aoaqa";
7
+ var description = "uzi-empty-state-module__description__muQc4";
8
+ var actions = "uzi-empty-state-module__actions__511Kv";
9
+ var empty_state_module_default = {
10
+ root,
11
+ compact,
12
+ visual,
13
+ content,
14
+ title,
15
+ description,
16
+ actions
21
17
  };
22
18
  //#endregion
23
- export { authBody, authBrand, authCard, authFooter, authHeader, authLayout, authSubtitle, authTitle, auth_card_module_default as default, divider };
19
+ export { actions, compact, content, empty_state_module_default as default, description, root, title, visual };
24
20
 
25
21
  //# sourceMappingURL=index47.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index47.js","names":[],"sources":["../src/components/auth-card/auth-card.module.css"],"sourcesContent":[".authLayout {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n min-height: 100dvh;\n padding: 24px;\n background: var(--background);\n}\n\n.authCard {\n width: 100%;\n max-width: 400px;\n border-radius: var(--ts-card-radius, 12px);\n border: 1px solid var(--ts-card-border, var(--border));\n background: var(--ts-card-bg, var(--card));\n color: var(--ts-card-fg, var(--foreground));\n box-shadow: var(--ts-card-shadow, 0 16px 36px rgba(0, 0, 0, 0.28));\n padding: 24px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.authBrand {\n display: flex;\n justify-content: center;\n margin-bottom: 8px;\n}\n\n.authBrand svg {\n width: 40px;\n height: 40px;\n color: var(--primary);\n}\n\n.authHeader {\n text-align: center;\n}\n\n.authTitle {\n font-size: 1.25rem;\n font-weight: 600;\n line-height: 1.4;\n margin: 0;\n color: var(--foreground);\n}\n\n.authSubtitle {\n font-size: 0.875rem;\n color: var(--muted-foreground);\n margin-top: 8px;\n margin-bottom: 0;\n line-height: 1.4;\n}\n\n.authBody {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.divider {\n border: none;\n border-top: 1px solid var(--border);\n margin: 0;\n}\n\n.authFooter {\n text-align: center;\n font-size: 0.875rem;\n color: var(--muted-foreground);\n margin: 0;\n}\n\n.authFooter a {\n color: var(--primary);\n text-decoration: none;\n font-weight: 500;\n}\n\n.authFooter a:hover {\n text-decoration: underline;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"index47.js","names":[],"sources":["../src/components/empty-state/empty-state.module.css"],"sourcesContent":[".root {\n display: grid;\n place-items: center;\n gap: 1rem;\n padding: clamp(2rem, 6vw, 4rem) 1.5rem;\n text-align: center;\n}\n\n.compact {\n padding-block: 1.5rem;\n}\n\n.visual {\n display: grid;\n place-items: center;\n color: var(--muted-foreground);\n font-size: 2rem;\n}\n\n.content {\n display: grid;\n gap: 0.5rem;\n max-width: 34rem;\n}\n\n.title {\n margin: 0;\n color: var(--foreground);\n font-size: 1.25rem;\n line-height: 1.25;\n}\n\n.description {\n color: var(--muted-foreground);\n font-size: 0.9rem;\n line-height: 1.65;\n}\n\n.actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n gap: 0.625rem;\n}\n"],"mappings":""}
package/dist/index48.cjs CHANGED
@@ -1,34 +1,28 @@
1
- //#region src/components/auth-card/auth-card.module.css
2
- var authLayout = "uzi-auth-card-module__authLayout__GHr1j";
3
- var authCard = "uzi-auth-card-module__authCard__ZYYit";
4
- var authBrand = "uzi-auth-card-module__authBrand__ZCDVm";
5
- var authHeader = "uzi-auth-card-module__authHeader__NB6UQ";
6
- var authTitle = "uzi-auth-card-module__authTitle__VtHLn";
7
- var authSubtitle = "uzi-auth-card-module__authSubtitle__ZupId";
8
- var authBody = "uzi-auth-card-module__authBody__PTyaL";
9
- var divider = "uzi-auth-card-module__divider__D8r12";
10
- var authFooter = "uzi-auth-card-module__authFooter__C5s--";
11
- var auth_card_module_default = {
12
- authLayout,
13
- authCard,
14
- authBrand,
15
- authHeader,
16
- authTitle,
17
- authSubtitle,
18
- authBody,
19
- divider,
20
- authFooter
1
+ //#region src/components/empty-state/empty-state.module.css
2
+ var root = "uzi-empty-state-module__root__UNTr-";
3
+ var compact = "uzi-empty-state-module__compact__eStzZ";
4
+ var visual = "uzi-empty-state-module__visual__4yzn6";
5
+ var content = "uzi-empty-state-module__content__lZQTI";
6
+ var title = "uzi-empty-state-module__title__Aoaqa";
7
+ var description = "uzi-empty-state-module__description__muQc4";
8
+ var actions = "uzi-empty-state-module__actions__511Kv";
9
+ var empty_state_module_default = {
10
+ root,
11
+ compact,
12
+ visual,
13
+ content,
14
+ title,
15
+ description,
16
+ actions
21
17
  };
22
18
  //#endregion
23
- exports.authBody = authBody;
24
- exports.authBrand = authBrand;
25
- exports.authCard = authCard;
26
- exports.authFooter = authFooter;
27
- exports.authHeader = authHeader;
28
- exports.authLayout = authLayout;
29
- exports.authSubtitle = authSubtitle;
30
- exports.authTitle = authTitle;
31
- exports.default = auth_card_module_default;
32
- exports.divider = divider;
19
+ exports.actions = actions;
20
+ exports.compact = compact;
21
+ exports.content = content;
22
+ exports.default = empty_state_module_default;
23
+ exports.description = description;
24
+ exports.root = root;
25
+ exports.title = title;
26
+ exports.visual = visual;
33
27
 
34
28
  //# sourceMappingURL=index48.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index48.cjs","names":[],"sources":["../src/components/auth-card/auth-card.module.css"],"sourcesContent":[".authLayout {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n min-height: 100dvh;\n padding: 24px;\n background: var(--background);\n}\n\n.authCard {\n width: 100%;\n max-width: 400px;\n border-radius: var(--ts-card-radius, 12px);\n border: 1px solid var(--ts-card-border, var(--border));\n background: var(--ts-card-bg, var(--card));\n color: var(--ts-card-fg, var(--foreground));\n box-shadow: var(--ts-card-shadow, 0 16px 36px rgba(0, 0, 0, 0.28));\n padding: 24px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.authBrand {\n display: flex;\n justify-content: center;\n margin-bottom: 8px;\n}\n\n.authBrand svg {\n width: 40px;\n height: 40px;\n color: var(--primary);\n}\n\n.authHeader {\n text-align: center;\n}\n\n.authTitle {\n font-size: 1.25rem;\n font-weight: 600;\n line-height: 1.4;\n margin: 0;\n color: var(--foreground);\n}\n\n.authSubtitle {\n font-size: 0.875rem;\n color: var(--muted-foreground);\n margin-top: 8px;\n margin-bottom: 0;\n line-height: 1.4;\n}\n\n.authBody {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.divider {\n border: none;\n border-top: 1px solid var(--border);\n margin: 0;\n}\n\n.authFooter {\n text-align: center;\n font-size: 0.875rem;\n color: var(--muted-foreground);\n margin: 0;\n}\n\n.authFooter a {\n color: var(--primary);\n text-decoration: none;\n font-weight: 500;\n}\n\n.authFooter a:hover {\n text-decoration: underline;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"index48.cjs","names":[],"sources":["../src/components/empty-state/empty-state.module.css"],"sourcesContent":[".root {\n display: grid;\n place-items: center;\n gap: 1rem;\n padding: clamp(2rem, 6vw, 4rem) 1.5rem;\n text-align: center;\n}\n\n.compact {\n padding-block: 1.5rem;\n}\n\n.visual {\n display: grid;\n place-items: center;\n color: var(--muted-foreground);\n font-size: 2rem;\n}\n\n.content {\n display: grid;\n gap: 0.5rem;\n max-width: 34rem;\n}\n\n.title {\n margin: 0;\n color: var(--foreground);\n font-size: 1.25rem;\n line-height: 1.25;\n}\n\n.description {\n color: var(--muted-foreground);\n font-size: 0.9rem;\n line-height: 1.65;\n}\n\n.actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n gap: 0.625rem;\n}\n"],"mappings":""}