@rookcom/monarch-react 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +4 -2
  3. package/dist/components/alert.d.ts +17 -0
  4. package/dist/components/alert.d.ts.map +1 -0
  5. package/dist/components/alert.js +17 -0
  6. package/dist/components/alert.js.map +1 -0
  7. package/dist/components/avatar.d.ts +16 -0
  8. package/dist/components/avatar.d.ts.map +1 -0
  9. package/dist/components/avatar.js +28 -0
  10. package/dist/components/avatar.js.map +1 -0
  11. package/dist/components/badge.d.ts +13 -0
  12. package/dist/components/badge.d.ts.map +1 -0
  13. package/dist/components/badge.js +7 -0
  14. package/dist/components/badge.js.map +1 -0
  15. package/dist/components/breadcrumb.d.ts +19 -0
  16. package/dist/components/breadcrumb.d.ts.map +1 -0
  17. package/dist/components/breadcrumb.js +19 -0
  18. package/dist/components/breadcrumb.js.map +1 -0
  19. package/dist/components/button.d.ts +32 -0
  20. package/dist/components/button.d.ts.map +1 -0
  21. package/dist/components/button.js +30 -0
  22. package/dist/components/button.js.map +1 -0
  23. package/dist/components/card.d.ts +18 -0
  24. package/dist/components/card.d.ts.map +1 -0
  25. package/dist/components/card.js +21 -0
  26. package/dist/components/card.js.map +1 -0
  27. package/dist/components/checkbox.d.ts +15 -0
  28. package/dist/components/checkbox.d.ts.map +1 -0
  29. package/dist/components/checkbox.js +23 -0
  30. package/dist/components/checkbox.js.map +1 -0
  31. package/dist/components/combobox.d.ts +35 -0
  32. package/dist/components/combobox.d.ts.map +1 -0
  33. package/dist/components/combobox.js +152 -0
  34. package/dist/components/combobox.js.map +1 -0
  35. package/dist/components/dialog.d.ts +22 -0
  36. package/dist/components/dialog.d.ts.map +1 -0
  37. package/dist/components/dialog.js +33 -0
  38. package/dist/components/dialog.js.map +1 -0
  39. package/dist/components/dropdown-menu.d.ts +24 -0
  40. package/dist/components/dropdown-menu.d.ts.map +1 -0
  41. package/dist/components/dropdown-menu.js +41 -0
  42. package/dist/components/dropdown-menu.js.map +1 -0
  43. package/dist/components/empty-state.d.ts +17 -0
  44. package/dist/components/empty-state.d.ts.map +1 -0
  45. package/dist/components/empty-state.js +10 -0
  46. package/dist/components/empty-state.js.map +1 -0
  47. package/dist/components/field.d.ts +65 -0
  48. package/dist/components/field.d.ts.map +1 -0
  49. package/dist/components/field.js +101 -0
  50. package/dist/components/field.js.map +1 -0
  51. package/dist/components/input.d.ts +15 -0
  52. package/dist/components/input.d.ts.map +1 -0
  53. package/dist/components/input.js +14 -0
  54. package/dist/components/input.js.map +1 -0
  55. package/dist/components/kbd.d.ts +4 -0
  56. package/dist/components/kbd.d.ts.map +1 -0
  57. package/dist/components/kbd.js +7 -0
  58. package/dist/components/kbd.js.map +1 -0
  59. package/dist/components/link.d.ts +13 -0
  60. package/dist/components/link.d.ts.map +1 -0
  61. package/dist/components/link.js +18 -0
  62. package/dist/components/link.js.map +1 -0
  63. package/dist/components/pagination.d.ts +18 -0
  64. package/dist/components/pagination.d.ts.map +1 -0
  65. package/dist/components/pagination.js +40 -0
  66. package/dist/components/pagination.js.map +1 -0
  67. package/dist/components/popover.d.ts +8 -0
  68. package/dist/components/popover.d.ts.map +1 -0
  69. package/dist/components/popover.js +14 -0
  70. package/dist/components/popover.js.map +1 -0
  71. package/dist/components/progress.d.ts +14 -0
  72. package/dist/components/progress.d.ts.map +1 -0
  73. package/dist/components/progress.js +12 -0
  74. package/dist/components/progress.js.map +1 -0
  75. package/dist/components/select.d.ts +27 -0
  76. package/dist/components/select.d.ts.map +1 -0
  77. package/dist/components/select.js +39 -0
  78. package/dist/components/select.js.map +1 -0
  79. package/dist/components/separator.d.ts +4 -0
  80. package/dist/components/separator.d.ts.map +1 -0
  81. package/dist/components/separator.js +9 -0
  82. package/dist/components/separator.js.map +1 -0
  83. package/dist/components/skeleton.d.ts +12 -0
  84. package/dist/components/skeleton.d.ts.map +1 -0
  85. package/dist/components/skeleton.js +10 -0
  86. package/dist/components/skeleton.js.map +1 -0
  87. package/dist/components/spinner.d.ts +12 -0
  88. package/dist/components/spinner.d.ts.map +1 -0
  89. package/dist/components/spinner.js +10 -0
  90. package/dist/components/spinner.js.map +1 -0
  91. package/dist/components/switch.d.ts +13 -0
  92. package/dist/components/switch.d.ts.map +1 -0
  93. package/dist/components/switch.js +21 -0
  94. package/dist/components/switch.js.map +1 -0
  95. package/dist/components/table.d.ts +53 -0
  96. package/dist/components/table.d.ts.map +1 -0
  97. package/dist/components/table.js +47 -0
  98. package/dist/components/table.js.map +1 -0
  99. package/dist/components/tabs.d.ts +12 -0
  100. package/dist/components/tabs.d.ts.map +1 -0
  101. package/dist/components/tabs.js +17 -0
  102. package/dist/components/tabs.js.map +1 -0
  103. package/dist/components/toast.d.ts +40 -0
  104. package/dist/components/toast.d.ts.map +1 -0
  105. package/dist/components/toast.js +67 -0
  106. package/dist/components/toast.js.map +1 -0
  107. package/dist/components/tooltip.d.ts +20 -0
  108. package/dist/components/tooltip.d.ts.map +1 -0
  109. package/dist/components/tooltip.js +12 -0
  110. package/dist/components/tooltip.js.map +1 -0
  111. package/dist/components/visually-hidden.d.ts +4 -0
  112. package/dist/components/visually-hidden.d.ts.map +1 -0
  113. package/dist/components/visually-hidden.js +7 -0
  114. package/dist/components/visually-hidden.js.map +1 -0
  115. package/dist/index.d.ts +31 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +34 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/internal/cx.d.ts +3 -0
  120. package/dist/internal/cx.d.ts.map +1 -0
  121. package/dist/internal/cx.js +6 -0
  122. package/dist/internal/cx.js.map +1 -0
  123. package/dist/internal/icons.d.ts +12 -0
  124. package/dist/internal/icons.d.ts.map +1 -0
  125. package/dist/internal/icons.js +41 -0
  126. package/dist/internal/icons.js.map +1 -0
  127. package/dist/manifest.json +3814 -0
  128. package/dist/patterns/description-list.d.ts +17 -0
  129. package/dist/patterns/description-list.d.ts.map +1 -0
  130. package/dist/patterns/description-list.js +10 -0
  131. package/dist/patterns/description-list.js.map +1 -0
  132. package/dist/patterns/filter-bar.d.ts +25 -0
  133. package/dist/patterns/filter-bar.d.ts.map +1 -0
  134. package/dist/patterns/filter-bar.js +13 -0
  135. package/dist/patterns/filter-bar.js.map +1 -0
  136. package/dist/patterns/index.d.ts +9 -0
  137. package/dist/patterns/index.d.ts.map +1 -0
  138. package/dist/patterns/index.js +9 -0
  139. package/dist/patterns/index.js.map +1 -0
  140. package/dist/patterns/page-header.d.ts +17 -0
  141. package/dist/patterns/page-header.d.ts.map +1 -0
  142. package/dist/patterns/page-header.js +7 -0
  143. package/dist/patterns/page-header.js.map +1 -0
  144. package/dist/patterns/settings.d.ts +33 -0
  145. package/dist/patterns/settings.d.ts.map +1 -0
  146. package/dist/patterns/settings.js +15 -0
  147. package/dist/patterns/settings.js.map +1 -0
  148. package/dist/patterns/split-layout.d.ts +21 -0
  149. package/dist/patterns/split-layout.d.ts.map +1 -0
  150. package/dist/patterns/split-layout.js +10 -0
  151. package/dist/patterns/split-layout.js.map +1 -0
  152. package/dist/patterns/stat-card.d.ts +19 -0
  153. package/dist/patterns/stat-card.d.ts.map +1 -0
  154. package/dist/patterns/stat-card.js +11 -0
  155. package/dist/patterns/stat-card.js.map +1 -0
  156. package/dist/patterns/states.d.ts +23 -0
  157. package/dist/patterns/states.d.ts.map +1 -0
  158. package/dist/patterns/states.js +15 -0
  159. package/dist/patterns/states.js.map +1 -0
  160. package/dist/patterns/toolbar.d.ts +20 -0
  161. package/dist/patterns/toolbar.d.ts.map +1 -0
  162. package/dist/patterns/toolbar.js +46 -0
  163. package/dist/patterns/toolbar.js.map +1 -0
  164. package/dist/styles.css +1984 -0
  165. package/package.json +70 -4
@@ -0,0 +1,17 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ export interface DescriptionListProps extends HTMLAttributes<HTMLDListElement> {
3
+ columns?: 1 | 2 | 3;
4
+ /** `stacked` (default) puts the term above the value; `inline` side by side. */
5
+ layout?: 'stacked' | 'inline';
6
+ }
7
+ /** Key/value facts on detail pages (owner, stage, created, …). */
8
+ export declare function DescriptionList({ columns, layout, className, ...rest }: DescriptionListProps): import("react").JSX.Element;
9
+ export interface DescriptionItemProps {
10
+ term: ReactNode;
11
+ children: ReactNode;
12
+ /** Span all columns. */
13
+ wide?: boolean;
14
+ className?: string;
15
+ }
16
+ export declare function DescriptionItem({ term, children, wide, className }: DescriptionItemProps): import("react").JSX.Element;
17
+ //# sourceMappingURL=description-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"description-list.d.ts","sourceRoot":"","sources":["../../src/patterns/description-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,MAAM,WAAW,oBAAqB,SAAQ,cAAc,CAAC,gBAAgB,CAAC;IAC5E,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,gFAAgF;IAChF,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC/B;AAED,kEAAkE;AAClE,wBAAgB,eAAe,CAAC,EAC9B,OAAW,EACX,MAAkB,EAClB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,oBAAoB,+BAItB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;IACpB,wBAAwB;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,oBAAoB,+BAOxF"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from '../internal/cx.js';
3
+ /** Key/value facts on detail pages (owner, stage, created, …). */
4
+ export function DescriptionList({ columns = 2, layout = 'stacked', className, ...rest }) {
5
+ return (_jsx("dl", { ...rest, "data-columns": columns, "data-layout": layout, className: cx('mn-dl', className) }));
6
+ }
7
+ export function DescriptionItem({ term, children, wide, className }) {
8
+ return (_jsxs("div", { className: cx('mn-dl__item', className), "data-wide": wide || undefined, children: [_jsx("dt", { className: "mn-dl__term", children: term }), _jsx("dd", { className: "mn-dl__value", children: children })] }));
9
+ }
10
+ //# sourceMappingURL=description-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"description-list.js","sourceRoot":"","sources":["../../src/patterns/description-list.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAQvC,kEAAkE;AAClE,MAAM,UAAU,eAAe,CAAC,EAC9B,OAAO,GAAG,CAAC,EACX,MAAM,GAAG,SAAS,EAClB,SAAS,EACT,GAAG,IAAI,EACc;IACrB,OAAO,CACL,gBAAQ,IAAI,kBAAgB,OAAO,iBAAe,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,GAAI,CAChG,CAAC;AACJ,CAAC;AAUD,MAAM,UAAU,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAwB;IACvF,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC,eAAa,IAAI,IAAI,SAAS,aACxE,aAAI,SAAS,EAAC,aAAa,YAAE,IAAI,GAAM,EACvC,aAAI,SAAS,EAAC,cAAc,YAAE,QAAQ,GAAM,IACxC,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ export interface FilterChipProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
3
+ /** Filter field, e.g. "Status". */
4
+ name: string;
5
+ /** Current value, e.g. "Open". */
6
+ value: ReactNode;
7
+ /** Removes the filter. The remove button is labelled "Remove <name> filter". */
8
+ onRemove?: () => void;
9
+ }
10
+ /** One active filter. */
11
+ export declare function FilterChip({ name, value, onRemove, className, ...rest }: FilterChipProps): import("react").JSX.Element;
12
+ export interface FilterBarProps extends HTMLAttributes<HTMLDivElement> {
13
+ /** Accessible name of the group. */
14
+ label?: string;
15
+ /** Called by the "Clear all" button; the button is hidden when omitted. */
16
+ onClearAll?: () => void;
17
+ /** Hide "Clear all" when there is nothing to clear. */
18
+ clearAllLabel?: string;
19
+ /** Slot for an "Add filter" control. */
20
+ add?: ReactNode;
21
+ children?: ReactNode;
22
+ }
23
+ /** Row of FilterChips with an optional add control and "Clear all". */
24
+ export declare function FilterBar({ label, onClearAll, clearAllLabel, add, className, children, ...rest }: FilterBarProps): import("react").JSX.Element;
25
+ //# sourceMappingURL=filter-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-bar.d.ts","sourceRoot":"","sources":["../../src/patterns/filter-bar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvD,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC;IACxF,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,KAAK,EAAE,SAAS,CAAC;IACjB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,yBAAyB;AACzB,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,eAAe,+BAiBxF;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc,CAAC,cAAc,CAAC;IACpE,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wCAAwC;IACxC,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,uEAAuE;AACvE,wBAAgB,SAAS,CAAC,EACxB,KAAwB,EACxB,UAAU,EACV,aAA2B,EAC3B,GAAG,EACH,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,cAAc,+BAYhB"}
@@ -0,0 +1,13 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cx } from '../internal/cx.js';
4
+ import { CloseGlyph } from '../internal/icons.js';
5
+ /** One active filter. */
6
+ export function FilterChip({ name, value, onRemove, className, ...rest }) {
7
+ return (_jsxs("span", { ...rest, className: cx('mn-filter-chip', className), children: [_jsx("span", { className: "mn-filter-chip__name", children: name }), _jsx("span", { className: "mn-filter-chip__value", children: value }), onRemove ? (_jsx("button", { type: "button", className: "mn-filter-chip__remove", "aria-label": `Remove ${name} filter`, onClick: onRemove, children: _jsx(CloseGlyph, {}) })) : null] }));
8
+ }
9
+ /** Row of FilterChips with an optional add control and "Clear all". */
10
+ export function FilterBar({ label = 'Active filters', onClearAll, clearAllLabel = 'Clear all', add, className, children, ...rest }) {
11
+ return (_jsxs("div", { ...rest, role: "group", "aria-label": label, className: cx('mn-filter-bar', className), children: [children, add, onClearAll ? (_jsx("button", { type: "button", className: "mn-filter-bar__clear", onClick: onClearAll, children: clearAllLabel })) : null] }));
12
+ }
13
+ //# sourceMappingURL=filter-bar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-bar.js","sourceRoot":"","sources":["../../src/patterns/filter-bar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAWlD,yBAAyB;AACzB,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAmB;IACvF,OAAO,CACL,mBAAU,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,aACxD,eAAM,SAAS,EAAC,sBAAsB,YAAE,IAAI,GAAQ,EACpD,eAAM,SAAS,EAAC,uBAAuB,YAAE,KAAK,GAAQ,EACrD,QAAQ,CAAC,CAAC,CAAC,CACV,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,wBAAwB,gBACtB,UAAU,IAAI,SAAS,EACnC,OAAO,EAAE,QAAQ,YAEjB,KAAC,UAAU,KAAG,GACP,CACV,CAAC,CAAC,CAAC,IAAI,IACH,CACR,CAAC;AACJ,CAAC;AAcD,uEAAuE;AACvE,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,GAAG,gBAAgB,EACxB,UAAU,EACV,aAAa,GAAG,WAAW,EAC3B,GAAG,EACH,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACQ;IACf,OAAO,CACL,kBAAS,IAAI,EAAE,IAAI,EAAC,OAAO,gBAAa,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,aACrF,QAAQ,EACR,GAAG,EACH,UAAU,CAAC,CAAC,CAAC,CACZ,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,sBAAsB,EAAC,OAAO,EAAE,UAAU,YACvE,aAAa,GACP,CACV,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { PageHeader, type PageHeaderProps } from './page-header.js';
2
+ export { Toolbar, ToolbarGroup, type ToolbarProps } from './toolbar.js';
3
+ export { FilterBar, FilterChip, type FilterBarProps, type FilterChipProps } from './filter-bar.js';
4
+ export { SettingsSection, SettingsRow, type SettingsSectionProps, type SettingsRowProps, } from './settings.js';
5
+ export { DescriptionList, DescriptionItem, type DescriptionListProps, type DescriptionItemProps, } from './description-list.js';
6
+ export { SplitLayout, type SplitLayoutProps } from './split-layout.js';
7
+ export { StatCard, type StatCardProps } from './stat-card.js';
8
+ export { ErrorState, LoadingState, type ErrorStateProps, type LoadingStateProps, } from './states.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/patterns/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnG,OAAO,EACL,eAAe,EACf,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EACL,UAAU,EACV,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { PageHeader } from './page-header.js';
2
+ export { Toolbar, ToolbarGroup } from './toolbar.js';
3
+ export { FilterBar, FilterChip } from './filter-bar.js';
4
+ export { SettingsSection, SettingsRow, } from './settings.js';
5
+ export { DescriptionList, DescriptionItem, } from './description-list.js';
6
+ export { SplitLayout } from './split-layout.js';
7
+ export { StatCard } from './stat-card.js';
8
+ export { ErrorState, LoadingState, } from './states.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/patterns/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAwB,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAqB,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,UAAU,EAA6C,MAAM,iBAAiB,CAAC;AACnG,OAAO,EACL,eAAe,EACf,WAAW,GAGZ,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,eAAe,GAGhB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAyB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAsB,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EACL,UAAU,EACV,YAAY,GAGb,MAAM,aAAa,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ export interface PageHeaderProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
3
+ /** Page title, rendered as the page's single h1. */
4
+ title: ReactNode;
5
+ description?: ReactNode;
6
+ /** Breadcrumb or eyebrow text above the title. */
7
+ eyebrow?: ReactNode;
8
+ /** Primary and secondary actions. Keep one `primary` Button. */
9
+ actions?: ReactNode;
10
+ /** A TabsList for section navigation below the title. */
11
+ tabs?: ReactNode;
12
+ /** Badge or status next to the title. */
13
+ meta?: ReactNode;
14
+ }
15
+ /** Top of every main view: title, context, and the actions that apply to the whole page. */
16
+ export declare function PageHeader({ title, description, eyebrow, actions, tabs, meta, className, ...rest }: PageHeaderProps): import("react").JSX.Element;
17
+ //# sourceMappingURL=page-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-header.d.ts","sourceRoot":"","sources":["../../src/patterns/page-header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IACjF,oDAAoD;IACpD,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,kDAAkD;IAClD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,gEAAgE;IAChE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,yDAAyD;IACzD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,yCAAyC;IACzC,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,4FAA4F;AAC5F,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,OAAO,EACP,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,GAAG,IAAI,EACR,EAAE,eAAe,+BAiBjB"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from '../internal/cx.js';
3
+ /** Top of every main view: title, context, and the actions that apply to the whole page. */
4
+ export function PageHeader({ title, description, eyebrow, actions, tabs, meta, className, ...rest }) {
5
+ return (_jsxs("header", { ...rest, className: cx('mn-page-header', className), children: [eyebrow ? _jsx("div", { className: "mn-page-header__eyebrow", children: eyebrow }) : null, _jsxs("div", { className: "mn-page-header__row", children: [_jsxs("div", { className: "mn-page-header__text", children: [_jsxs("div", { className: "mn-page-header__title-row", children: [_jsx("h1", { className: "mn-page-header__title", children: title }), meta ? _jsx("div", { className: "mn-page-header__meta", children: meta }) : null] }), description ? _jsx("p", { className: "mn-page-header__description", children: description }) : null] }), actions ? _jsx("div", { className: "mn-page-header__actions", children: actions }) : null] }), tabs ? _jsx("div", { className: "mn-page-header__tabs", children: tabs }) : null] }));
6
+ }
7
+ //# sourceMappingURL=page-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-header.js","sourceRoot":"","sources":["../../src/patterns/page-header.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAgBvC,4FAA4F;AAC5F,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,OAAO,EACP,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,GAAG,IAAI,EACS;IAChB,OAAO,CACL,qBAAY,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,aACzD,OAAO,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,yBAAyB,YAAE,OAAO,GAAO,CAAC,CAAC,CAAC,IAAI,EAC1E,eAAK,SAAS,EAAC,qBAAqB,aAClC,eAAK,SAAS,EAAC,sBAAsB,aACnC,eAAK,SAAS,EAAC,2BAA2B,aACxC,aAAI,SAAS,EAAC,uBAAuB,YAAE,KAAK,GAAM,EACjD,IAAI,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,sBAAsB,YAAE,IAAI,GAAO,CAAC,CAAC,CAAC,IAAI,IAC7D,EACL,WAAW,CAAC,CAAC,CAAC,YAAG,SAAS,EAAC,6BAA6B,YAAE,WAAW,GAAK,CAAC,CAAC,CAAC,IAAI,IAC9E,EACL,OAAO,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,yBAAyB,YAAE,OAAO,GAAO,CAAC,CAAC,CAAC,IAAI,IACtE,EACL,IAAI,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,sBAAsB,YAAE,IAAI,GAAO,CAAC,CAAC,CAAC,IAAI,IAC1D,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ export interface SettingsSectionProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
3
+ /** Section title (h2). */
4
+ title: ReactNode;
5
+ description?: ReactNode;
6
+ /** Footer with Save/Cancel actions. */
7
+ actions?: ReactNode;
8
+ /** `danger` for destructive zones (delete workspace, transfer ownership). */
9
+ tone?: 'default' | 'danger';
10
+ /** Heading level if the section is nested under another h2. */
11
+ headingLevel?: 'h2' | 'h3';
12
+ children: ReactNode;
13
+ }
14
+ /** Titled group of settings in a card, as in Workspace App Settings. */
15
+ export declare function SettingsSection({ title, description, actions, tone, headingLevel: H, className, children, ...rest }: SettingsSectionProps): import("react").JSX.Element;
16
+ export interface SettingsRowProps {
17
+ /** Label of the setting; becomes the control's label. */
18
+ label: ReactNode;
19
+ description?: ReactNode;
20
+ /** The control: Input, Select, Switch, Combobox. It receives the Field ids. */
21
+ children: ReactNode;
22
+ /** Pass `id` to match an existing control id. */
23
+ id?: string;
24
+ required?: boolean;
25
+ disabled?: boolean;
26
+ invalid?: boolean;
27
+ /** Error message rendered under the control. */
28
+ error?: ReactNode;
29
+ className?: string;
30
+ }
31
+ /** One setting: label and description on the left, control on the right. */
32
+ export declare function SettingsRow({ label, description, children, id, required, disabled, invalid, error, className, }: SettingsRowProps): import("react").JSX.Element;
33
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/patterns/settings.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAS,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAInE,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtF,0BAA0B;IAC1B,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,uCAAuC;IACvC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5B,+DAA+D;IAC/D,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,WAAW,EACX,OAAO,EACP,IAAgB,EAChB,YAAY,EAAE,CAAQ,EACtB,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,oBAAoB,+BAqBtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,+EAA+E;IAC/E,QAAQ,EAAE,SAAS,CAAC;IACpB,iDAAiD;IACjD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,WAAW,EACX,QAAQ,EACR,EAAE,EACF,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,KAAK,EACL,SAAS,GACV,EAAE,gBAAgB,+BAuBlB"}
@@ -0,0 +1,15 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useId } from 'react';
4
+ import { cx } from '../internal/cx.js';
5
+ import { Field, FieldDescription, FieldLabel } from '../components/field.js';
6
+ /** Titled group of settings in a card, as in Workspace App Settings. */
7
+ export function SettingsSection({ title, description, actions, tone = 'default', headingLevel: H = 'h2', className, children, ...rest }) {
8
+ const id = useId();
9
+ return (_jsxs("section", { ...rest, "aria-labelledby": `${id}-title`, "data-tone": tone, className: cx('mn-settings-section', className), children: [_jsxs("div", { className: "mn-settings-section__header", children: [_jsx(H, { id: `${id}-title`, className: "mn-settings-section__title", children: title }), description ? _jsx("p", { className: "mn-settings-section__description", children: description }) : null] }), _jsxs("div", { className: "mn-settings-section__card", children: [_jsx("div", { className: "mn-settings-section__body", children: children }), actions ? _jsx("div", { className: "mn-settings-section__footer", children: actions }) : null] })] }));
10
+ }
11
+ /** One setting: label and description on the left, control on the right. */
12
+ export function SettingsRow({ label, description, children, id, required, disabled, invalid, error, className, }) {
13
+ return (_jsxs(Field, { ...(id ? { id } : {}), required: required ?? false, disabled: disabled ?? false, invalid: invalid ?? Boolean(error), className: cx('mn-settings-row', className), children: [_jsxs("div", { className: "mn-settings-row__text", children: [_jsx(FieldLabel, { children: label }), description ? _jsx(FieldDescription, { children: description }) : null] }), _jsxs("div", { className: "mn-settings-row__control", children: [children, error ? (_jsx("p", { className: "mn-field__error", "aria-live": "polite", children: error })) : null] })] }));
14
+ }
15
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/patterns/settings.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,KAAK,EAAuC,MAAM,OAAO,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAe7E,wEAAwE;AACxE,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,WAAW,EACX,OAAO,EACP,IAAI,GAAG,SAAS,EAChB,YAAY,EAAE,CAAC,GAAG,IAAI,EACtB,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACc;IACrB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,OAAO,CACL,sBACM,IAAI,qBACS,GAAG,EAAE,QAAQ,eACnB,IAAI,EACf,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,aAE/C,eAAK,SAAS,EAAC,6BAA6B,aAC1C,KAAC,CAAC,IAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAC,4BAA4B,YACzD,KAAK,GACJ,EACH,WAAW,CAAC,CAAC,CAAC,YAAG,SAAS,EAAC,kCAAkC,YAAE,WAAW,GAAK,CAAC,CAAC,CAAC,IAAI,IACnF,EACN,eAAK,SAAS,EAAC,2BAA2B,aACxC,cAAK,SAAS,EAAC,2BAA2B,YAAE,QAAQ,GAAO,EAC1D,OAAO,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,6BAA6B,YAAE,OAAO,GAAO,CAAC,CAAC,CAAC,IAAI,IAC1E,IACE,CACX,CAAC;AACJ,CAAC;AAkBD,4EAA4E;AAC5E,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,WAAW,EACX,QAAQ,EACR,EAAE,EACF,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,KAAK,EACL,SAAS,GACQ;IACjB,OAAO,CACL,MAAC,KAAK,OACA,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACtB,QAAQ,EAAE,QAAQ,IAAI,KAAK,EAC3B,QAAQ,EAAE,QAAQ,IAAI,KAAK,EAC3B,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,EAClC,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,aAE3C,eAAK,SAAS,EAAC,uBAAuB,aACpC,KAAC,UAAU,cAAE,KAAK,GAAc,EAC/B,WAAW,CAAC,CAAC,CAAC,KAAC,gBAAgB,cAAE,WAAW,GAAoB,CAAC,CAAC,CAAC,IAAI,IACpE,EACN,eAAK,SAAS,EAAC,0BAA0B,aACtC,QAAQ,EACR,KAAK,CAAC,CAAC,CAAC,CACP,YAAG,SAAS,EAAC,iBAAiB,eAAW,QAAQ,YAC9C,KAAK,GACJ,CACL,CAAC,CAAC,CAAC,IAAI,IACJ,IACA,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ export interface SplitLayoutProps extends HTMLAttributes<HTMLDivElement> {
3
+ /** The list pane (e.g. ticket list). */
4
+ list: ReactNode;
5
+ /** The detail pane. When empty, pass an EmptyState. */
6
+ detail: ReactNode;
7
+ listLabel?: string;
8
+ detailLabel?: string;
9
+ /** Width of the list pane on wide screens. */
10
+ listWidth?: 'sm' | 'md' | 'lg';
11
+ /**
12
+ * Below the `md` breakpoint only one pane shows. `detailOpen` picks which;
13
+ * `onBack` renders a back button in the detail pane.
14
+ */
15
+ detailOpen?: boolean;
16
+ onBack?: () => void;
17
+ backLabel?: string;
18
+ }
19
+ /** List + detail two-pane layout (Tickets inbox, Chat, Dossier). No routing inside. */
20
+ export declare function SplitLayout({ list, detail, listLabel, detailLabel, listWidth, detailOpen, onBack, backLabel, className, ...rest }: SplitLayoutProps): import("react").JSX.Element;
21
+ //# sourceMappingURL=split-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-layout.d.ts","sourceRoot":"","sources":["../../src/patterns/split-layout.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvD,MAAM,WAAW,gBAAiB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACtE,wCAAwC;IACxC,IAAI,EAAE,SAAS,CAAC;IAChB,uDAAuD;IACvD,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC/B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,uFAAuF;AACvF,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,MAAM,EACN,SAAkB,EAClB,WAAsB,EACtB,SAAgB,EAChB,UAAkB,EAClB,MAAM,EACN,SAA0B,EAC1B,SAAS,EACT,GAAG,IAAI,EACR,EAAE,gBAAgB,+BAyBlB"}
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cx } from '../internal/cx.js';
4
+ import { IconButton } from '../components/button.js';
5
+ import { ChevronRightGlyph } from '../internal/icons.js';
6
+ /** List + detail two-pane layout (Tickets inbox, Chat, Dossier). No routing inside. */
7
+ export function SplitLayout({ list, detail, listLabel = 'List', detailLabel = 'Detail', listWidth = 'md', detailOpen = false, onBack, backLabel = 'Back to list', className, ...rest }) {
8
+ return (_jsxs("div", { ...rest, "data-list-width": listWidth, "data-detail-open": detailOpen || undefined, className: cx('mn-split', className), children: [_jsx("section", { "aria-label": listLabel, className: "mn-split__list", children: list }), _jsxs("section", { "aria-label": detailLabel, className: "mn-split__detail", children: [onBack ? (_jsx("div", { className: "mn-split__back", children: _jsx(IconButton, { label: backLabel, icon: _jsx(ChevronRightGlyph, { style: { transform: 'rotate(180deg)' } }), onClick: onBack }) })) : null, detail] })] }));
9
+ }
10
+ //# sourceMappingURL=split-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-layout.js","sourceRoot":"","sources":["../../src/patterns/split-layout.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAoBzD,uFAAuF;AACvF,MAAM,UAAU,WAAW,CAAC,EAC1B,IAAI,EACJ,MAAM,EACN,SAAS,GAAG,MAAM,EAClB,WAAW,GAAG,QAAQ,EACtB,SAAS,GAAG,IAAI,EAChB,UAAU,GAAG,KAAK,EAClB,MAAM,EACN,SAAS,GAAG,cAAc,EAC1B,SAAS,EACT,GAAG,IAAI,EACU;IACjB,OAAO,CACL,kBACM,IAAI,qBACS,SAAS,sBACR,UAAU,IAAI,SAAS,EACzC,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,aAEpC,gCAAqB,SAAS,EAAE,SAAS,EAAC,gBAAgB,YACvD,IAAI,GACG,EACV,iCAAqB,WAAW,EAAE,SAAS,EAAC,kBAAkB,aAC3D,MAAM,CAAC,CAAC,CAAC,CACR,cAAK,SAAS,EAAC,gBAAgB,YAC7B,KAAC,UAAU,IACT,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,KAAC,iBAAiB,IAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAI,EACnE,OAAO,EAAE,MAAM,GACf,GACE,CACP,CAAC,CAAC,CAAC,IAAI,EACP,MAAM,IACC,IACN,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ export interface StatCardProps extends HTMLAttributes<HTMLDivElement> {
3
+ label: ReactNode;
4
+ /** Formatted value, e.g. "₹12.4L" or "143". */
5
+ value: ReactNode;
6
+ /** Change versus the previous period, e.g. "+12%". */
7
+ delta?: ReactNode;
8
+ /** Direction of the change; `up` is success unless `deltaTone` says otherwise. */
9
+ deltaDirection?: 'up' | 'down' | 'flat';
10
+ /** Override the colour of the delta, e.g. `danger` when up is bad (churn). */
11
+ deltaTone?: 'success' | 'danger' | 'neutral';
12
+ /** Period label, e.g. "vs last 30 days". */
13
+ caption?: ReactNode;
14
+ /** Sparkline or icon slot. */
15
+ visual?: ReactNode;
16
+ }
17
+ /** Single KPI for dashboards (Dots pipelines, Pulse). */
18
+ export declare function StatCard({ label, value, delta, deltaDirection, deltaTone, caption, visual, className, ...rest }: StatCardProps): import("react").JSX.Element;
19
+ //# sourceMappingURL=stat-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stat-card.d.ts","sourceRoot":"","sources":["../../src/patterns/stat-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvD,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,cAAc,CAAC;IACnE,KAAK,EAAE,SAAS,CAAC;IACjB,+CAA+C;IAC/C,KAAK,EAAE,SAAS,CAAC;IACjB,sDAAsD;IACtD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,kFAAkF;IAClF,cAAc,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IACxC,8EAA8E;IAC9E,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC7C,4CAA4C;IAC5C,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,yDAAyD;AACzD,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,KAAK,EACL,KAAK,EACL,cAAuB,EACvB,SAAS,EACT,OAAO,EACP,MAAM,EACN,SAAS,EACT,GAAG,IAAI,EACR,EAAE,aAAa,+BAiCf"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from '../internal/cx.js';
3
+ import { VisuallyHidden } from '../components/visually-hidden.js';
4
+ /** Single KPI for dashboards (Dots pipelines, Pulse). */
5
+ export function StatCard({ label, value, delta, deltaDirection = 'flat', deltaTone, caption, visual, className, ...rest }) {
6
+ const tone = deltaTone ??
7
+ (deltaDirection === 'up' ? 'success' : deltaDirection === 'down' ? 'danger' : 'neutral');
8
+ const srDirection = deltaDirection === 'up' ? 'increase' : deltaDirection === 'down' ? 'decrease' : 'no change';
9
+ return (_jsxs("div", { ...rest, className: cx('mn-stat', className), children: [_jsxs("div", { className: "mn-stat__body", children: [_jsx("p", { className: "mn-stat__label", children: label }), _jsx("p", { className: "mn-stat__value", children: value }), delta !== undefined || caption ? (_jsxs("p", { className: "mn-stat__footer", children: [delta !== undefined ? (_jsxs("span", { className: "mn-stat__delta", "data-tone": tone, "data-direction": deltaDirection, children: [_jsx("span", { "aria-hidden": true, children: deltaDirection === 'up' ? '↑' : deltaDirection === 'down' ? '↓' : '→' }), _jsxs(VisuallyHidden, { children: [srDirection, " "] }), delta] })) : null, caption ? _jsx("span", { className: "mn-stat__caption", children: caption }) : null] })) : null] }), visual ? (_jsx("div", { className: "mn-stat__visual", "aria-hidden": true, children: visual })) : null] }));
10
+ }
11
+ //# sourceMappingURL=stat-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stat-card.js","sourceRoot":"","sources":["../../src/patterns/stat-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAkBlE,yDAAyD;AACzD,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,EACL,KAAK,EACL,KAAK,EACL,cAAc,GAAG,MAAM,EACvB,SAAS,EACT,OAAO,EACP,MAAM,EACN,SAAS,EACT,GAAG,IAAI,EACO;IACd,MAAM,IAAI,GACR,SAAS;QACT,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3F,MAAM,WAAW,GACf,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;IAC9F,OAAO,CACL,kBAAS,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,aAChD,eAAK,SAAS,EAAC,eAAe,aAC5B,YAAG,SAAS,EAAC,gBAAgB,YAAE,KAAK,GAAK,EACzC,YAAG,SAAS,EAAC,gBAAgB,YAAE,KAAK,GAAK,EACxC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,CAChC,aAAG,SAAS,EAAC,iBAAiB,aAC3B,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CACrB,gBAAM,SAAS,EAAC,gBAAgB,eAAY,IAAI,oBAAkB,cAAc,aAC9E,8CACG,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GACjE,EACP,MAAC,cAAc,eAAE,WAAW,SAAmB,EAC9C,KAAK,IACD,CACR,CAAC,CAAC,CAAC,IAAI,EACP,OAAO,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,kBAAkB,YAAE,OAAO,GAAQ,CAAC,CAAC,CAAC,IAAI,IACnE,CACL,CAAC,CAAC,CAAC,IAAI,IACJ,EACL,MAAM,CAAC,CAAC,CAAC,CACR,cAAK,SAAS,EAAC,iBAAiB,iCAC7B,MAAM,GACH,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ import { type EmptyStateProps } from '../components/empty-state.js';
3
+ export interface ErrorStateProps extends Omit<EmptyStateProps, 'actions' | 'icon'> {
4
+ /** Retry handler; renders a "Try again" button. */
5
+ onRetry?: () => void;
6
+ retryLabel?: string;
7
+ /** Extra actions next to retry. */
8
+ actions?: ReactNode;
9
+ icon?: ReactNode;
10
+ }
11
+ /** Something failed to load. Say what failed and offer a retry. */
12
+ export declare function ErrorState({ title, description, onRetry, retryLabel, actions, icon, className, ...rest }: ErrorStateProps): import("react").JSX.Element;
13
+ export interface LoadingStateProps extends HTMLAttributes<HTMLDivElement> {
14
+ /** Announced to screen readers, e.g. "Loading tickets". */
15
+ label: string;
16
+ /** Skeleton rows to render. */
17
+ rows?: number;
18
+ /** `list` (default) stacks rows; `cards` renders a grid; `detail` a title + paragraphs. */
19
+ variant?: 'list' | 'cards' | 'detail';
20
+ }
21
+ /** Skeleton placeholder with an aria-busy region and a live announcement. */
22
+ export declare function LoadingState({ label, rows, variant, className, ...rest }: LoadingStateProps): import("react").JSX.Element;
23
+ //# sourceMappingURL=states.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"states.d.ts","sourceRoot":"","sources":["../../src/patterns/states.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAIhF,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,MAAM,CAAC;IAChF,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,OAAO,EACP,UAAwB,EACxB,OAAO,EACP,IAAI,EACJ,SAAS,EACT,GAAG,IAAI,EACR,EAAE,eAAe,+BAuBjB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACvE,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;CACvC;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,IAAQ,EACR,OAAgB,EAChB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,iBAAiB,+BAqCnB"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from '../internal/cx.js';
3
+ import { Button } from '../components/button.js';
4
+ import { EmptyState } from '../components/empty-state.js';
5
+ import { Skeleton } from '../components/skeleton.js';
6
+ import { WarningGlyph } from '../internal/icons.js';
7
+ /** Something failed to load. Say what failed and offer a retry. */
8
+ export function ErrorState({ title, description, onRetry, retryLabel = 'Try again', actions, icon, className, ...rest }) {
9
+ return (_jsx(EmptyState, { ...rest, role: "alert", className: cx('mn-error-state', className), icon: icon ?? _jsx(WarningGlyph, {}), title: title, description: description, actions: onRetry || actions ? (_jsxs(_Fragment, { children: [onRetry ? (_jsx(Button, { variant: "primary", onClick: onRetry, children: retryLabel })) : null, actions] })) : undefined }));
10
+ }
11
+ /** Skeleton placeholder with an aria-busy region and a live announcement. */
12
+ export function LoadingState({ label, rows = 4, variant = 'list', className, ...rest }) {
13
+ return (_jsxs("div", { ...rest, "aria-busy": "true", className: cx('mn-loading-state', className), "data-variant": variant, children: [_jsx("span", { role: "status", className: "mn-visually-hidden", children: label }), variant === 'detail' ? (_jsxs(_Fragment, { children: [_jsx(Skeleton, { shape: "text", width: "40%", height: "1.25rem" }), _jsx(Skeleton, { shape: "text", width: "90%" }), _jsx(Skeleton, { shape: "text", width: "75%" }), _jsx(Skeleton, { shape: "text", width: "60%" })] })) : (Array.from({ length: rows }, (_, i) => (_jsx("div", { className: "mn-loading-state__row", children: variant === 'cards' ? (_jsx(Skeleton, { height: "6rem" })) : (_jsxs(_Fragment, { children: [_jsx(Skeleton, { shape: "circle", width: "2rem", height: "2rem" }), _jsxs("div", { className: "mn-loading-state__lines", children: [_jsx(Skeleton, { shape: "text", width: `${55 + ((i * 17) % 30)}%` }), _jsx(Skeleton, { shape: "text", width: `${30 + ((i * 11) % 25)}%` })] })] })) }, i))))] }));
14
+ }
15
+ //# sourceMappingURL=states.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"states.js","sourceRoot":"","sources":["../../src/patterns/states.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ export interface ToolbarProps extends HTMLAttributes<HTMLDivElement> {
3
+ /** Accessible name, e.g. "Ticket list tools". Required by the toolbar role. */
4
+ label: string;
5
+ /** Search or filter input area on the leading edge. */
6
+ search?: ReactNode;
7
+ /** Filter chips row rendered under the toolbar. */
8
+ filters?: ReactNode;
9
+ /** Controls on the trailing edge (view switch, density, export). */
10
+ end?: ReactNode;
11
+ children?: ReactNode;
12
+ }
13
+ /**
14
+ * `role="toolbar"` with roving focus: Tab enters the toolbar, Left/Right
15
+ * move between controls, Home/End jump. Text inputs keep their own arrow keys.
16
+ */
17
+ export declare function Toolbar({ label, search, filters, end, className, children, onKeyDown, ...rest }: ToolbarProps): import("react").JSX.Element;
18
+ /** Visual grouping inside a Toolbar. */
19
+ export declare function ToolbarGroup({ className, ...rest }: HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
20
+ //# sourceMappingURL=toolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../src/patterns/toolbar.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAe,KAAK,cAAc,EAAsB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG7F,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,cAAc,CAAC;IAClE,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,mDAAmD;IACnD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,oEAAoE;IACpE,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAKD;;;GAGG;AACH,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,MAAM,EACN,OAAO,EACP,GAAG,EACH,SAAS,EACT,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,YAAY,+BAsCd;AAED,wCAAwC;AACxC,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,cAAc,CAAC,+BAElF"}
@@ -0,0 +1,46 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useCallback } from 'react';
4
+ import { cx } from '../internal/cx.js';
5
+ const FOCUSABLE = 'a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex="-1"])';
6
+ /**
7
+ * `role="toolbar"` with roving focus: Tab enters the toolbar, Left/Right
8
+ * move between controls, Home/End jump. Text inputs keep their own arrow keys.
9
+ */
10
+ export function Toolbar({ label, search, filters, end, className, children, onKeyDown, ...rest }) {
11
+ const handleKey = useCallback((e) => {
12
+ onKeyDown?.(e);
13
+ if (e.defaultPrevented)
14
+ return;
15
+ const target = e.target;
16
+ const isText = target instanceof HTMLInputElement &&
17
+ !['checkbox', 'radio', 'button'].includes(target.type);
18
+ if (isText && (e.key === 'ArrowLeft' || e.key === 'ArrowRight'))
19
+ return;
20
+ if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(e.key))
21
+ return;
22
+ const items = Array.from(e.currentTarget.querySelectorAll(FOCUSABLE)).filter((el) => el.closest('[role="toolbar"]') === e.currentTarget);
23
+ if (items.length === 0)
24
+ return;
25
+ const i = items.indexOf(document.activeElement);
26
+ let next = i;
27
+ if (e.key === 'ArrowRight')
28
+ next = Math.min(i + 1, items.length - 1);
29
+ if (e.key === 'ArrowLeft')
30
+ next = Math.max(i - 1, 0);
31
+ if (e.key === 'Home')
32
+ next = 0;
33
+ if (e.key === 'End')
34
+ next = items.length - 1;
35
+ if (next !== i) {
36
+ e.preventDefault();
37
+ items[next]?.focus();
38
+ }
39
+ }, [onKeyDown]);
40
+ return (_jsxs("div", { className: cx('mn-toolbar-wrap', className), children: [_jsxs("div", { ...rest, role: "toolbar", "aria-label": label, className: "mn-toolbar", onKeyDown: handleKey, children: [search ? _jsx("div", { className: "mn-toolbar__search", children: search }) : null, children ? _jsx("div", { className: "mn-toolbar__group", children: children }) : null, end ? _jsx("div", { className: "mn-toolbar__end", children: end }) : null] }), filters ? _jsx("div", { className: "mn-toolbar__filters", children: filters }) : null] }));
41
+ }
42
+ /** Visual grouping inside a Toolbar. */
43
+ export function ToolbarGroup({ className, ...rest }) {
44
+ return _jsx("div", { ...rest, role: "group", className: cx('mn-toolbar__group', className) });
45
+ }
46
+ //# sourceMappingURL=toolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../../src/patterns/toolbar.tsx"],"names":[],"mappings":"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"}