@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,22 @@
1
+ import { type ComponentPropsWithoutRef, type HTMLAttributes } from 'react';
2
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
3
+ /**
4
+ * Modal dialog. Focus is trapped inside, Escape closes it, and focus returns
5
+ * to the trigger. Every dialog needs a DialogTitle (visually hidden if
6
+ * necessary) so it has an accessible name.
7
+ */
8
+ export declare const Dialog: import("react").FC<DialogPrimitive.DialogProps>;
9
+ export declare const DialogTrigger: import("react").ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
10
+ export declare const DialogClose: import("react").ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & import("react").RefAttributes<HTMLButtonElement>>;
11
+ export interface DialogContentProps extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {
12
+ size?: 'sm' | 'md' | 'lg' | 'xl';
13
+ /** Accessible label of the built-in close button. Pass null to hide the button. */
14
+ closeLabel?: string | null;
15
+ }
16
+ export declare const DialogContent: import("react").ForwardRefExoticComponent<DialogContentProps & import("react").RefAttributes<HTMLDivElement>>;
17
+ export declare function DialogHeader({ className, ...rest }: HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
18
+ export declare const DialogTitle: import("react").ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & import("react").RefAttributes<HTMLHeadingElement>, "ref"> & import("react").RefAttributes<HTMLHeadingElement>>;
19
+ export declare const DialogDescription: import("react").ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & import("react").RefAttributes<HTMLParagraphElement>, "ref"> & import("react").RefAttributes<HTMLParagraphElement>>;
20
+ export declare function DialogBody({ className, ...rest }: HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
21
+ export declare function DialogFooter({ className, ...rest }: HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
22
+ //# sourceMappingURL=dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/components/dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,wBAAwB,EAE7B,KAAK,cAAc,EACpB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAI1D;;;;GAIG;AACH,eAAO,MAAM,MAAM,iDAAuB,CAAC;AAC3C,eAAO,MAAM,aAAa,kIAA0B,CAAC;AACrD,eAAO,MAAM,WAAW,gIAAwB,CAAC;AAEjD,MAAM,WAAW,kBAAmB,SAAQ,wBAAwB,CAClE,OAAO,eAAe,CAAC,OAAO,CAC/B;IACC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,eAAO,MAAM,aAAa,+GAsBxB,CAAC;AAEH,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,cAAc,CAAC,+BAElF;AAED,eAAO,MAAM,WAAW,kMAOtB,CAAC;AAEH,eAAO,MAAM,iBAAiB,4MAW5B,CAAC;AAEH,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,cAAc,CAAC,+BAEhF;AAED,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,cAAc,CAAC,+BAElF"}
@@ -0,0 +1,33 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { forwardRef, } from 'react';
4
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
5
+ import { cx } from '../internal/cx.js';
6
+ import { CloseGlyph } from '../internal/icons.js';
7
+ /**
8
+ * Modal dialog. Focus is trapped inside, Escape closes it, and focus returns
9
+ * to the trigger. Every dialog needs a DialogTitle (visually hidden if
10
+ * necessary) so it has an accessible name.
11
+ */
12
+ export const Dialog = DialogPrimitive.Root;
13
+ export const DialogTrigger = DialogPrimitive.Trigger;
14
+ export const DialogClose = DialogPrimitive.Close;
15
+ export const DialogContent = forwardRef(function DialogContent({ size = 'md', closeLabel = 'Close', className, children, ...rest }, ref) {
16
+ return (_jsxs(DialogPrimitive.Portal, { children: [_jsx(DialogPrimitive.Overlay, { className: "mn-overlay" }), _jsxs(DialogPrimitive.Content, { ref: ref, ...rest, "data-size": size, className: cx('mn-dialog', className), children: [children, closeLabel ? (_jsx(DialogPrimitive.Close, { className: "mn-dialog__close", "aria-label": closeLabel, children: _jsx(CloseGlyph, {}) })) : null] })] }));
17
+ });
18
+ export function DialogHeader({ className, ...rest }) {
19
+ return _jsx("div", { ...rest, className: cx('mn-dialog__header', className) });
20
+ }
21
+ export const DialogTitle = forwardRef(function DialogTitle({ className, ...rest }, ref) {
22
+ return (_jsx(DialogPrimitive.Title, { ref: ref, ...rest, className: cx('mn-dialog__title', className) }));
23
+ });
24
+ export const DialogDescription = forwardRef(function DialogDescription({ className, ...rest }, ref) {
25
+ return (_jsx(DialogPrimitive.Description, { ref: ref, ...rest, className: cx('mn-dialog__description', className) }));
26
+ });
27
+ export function DialogBody({ className, ...rest }) {
28
+ return _jsx("div", { ...rest, className: cx('mn-dialog__body', className) });
29
+ }
30
+ export function DialogFooter({ className, ...rest }) {
31
+ return _jsx("div", { ...rest, className: cx('mn-dialog__footer', className) });
32
+ }
33
+ //# sourceMappingURL=dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../src/components/dialog.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EACL,UAAU,GAIX,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC;AAC3C,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC;AACrD,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC;AAUjD,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAGrC,SAAS,aAAa,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,UAAU,GAAG,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG;IAC/F,OAAO,CACL,MAAC,eAAe,CAAC,MAAM,eACrB,KAAC,eAAe,CAAC,OAAO,IAAC,SAAS,EAAC,YAAY,GAAG,EAClD,MAAC,eAAe,CAAC,OAAO,IACtB,GAAG,EAAE,GAAG,KACJ,IAAI,eACG,IAAI,EACf,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,aAEpC,QAAQ,EACR,UAAU,CAAC,CAAC,CAAC,CACZ,KAAC,eAAe,CAAC,KAAK,IAAC,SAAS,EAAC,kBAAkB,gBAAa,UAAU,YACxE,KAAC,UAAU,KAAG,GACQ,CACzB,CAAC,CAAC,CAAC,IAAI,IACgB,IACH,CAC1B,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,UAAU,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAkC;IACjF,OAAO,iBAAS,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,GAAI,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAGnC,SAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG;IAChD,OAAO,CACL,KAAC,eAAe,CAAC,KAAK,IAAC,GAAG,EAAE,GAAG,KAAM,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC,GAAI,CAC5F,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAGzC,SAAS,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG;IACtD,OAAO,CACL,KAAC,eAAe,CAAC,WAAW,IAC1B,GAAG,EAAE,GAAG,KACJ,IAAI,EACR,SAAS,EAAE,EAAE,CAAC,wBAAwB,EAAE,SAAS,CAAC,GAClD,CACH,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,UAAU,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAkC;IAC/E,OAAO,iBAAS,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,GAAI,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAkC;IACjF,OAAO,iBAAS,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,GAAI,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { type ComponentPropsWithoutRef, type ReactNode } from 'react';
2
+ import * as Menu from '@radix-ui/react-dropdown-menu';
3
+ /** Action menu. Arrow keys move, typeahead jumps, Escape closes and restores focus. */
4
+ export declare const DropdownMenu: import("react").FC<Menu.DropdownMenuProps>;
5
+ export declare const DropdownMenuTrigger: import("react").ForwardRefExoticComponent<Menu.DropdownMenuTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
6
+ export declare const DropdownMenuGroup: import("react").ForwardRefExoticComponent<Menu.DropdownMenuGroupProps & import("react").RefAttributes<HTMLDivElement>>;
7
+ export declare const DropdownMenuRadioGroup: import("react").ForwardRefExoticComponent<Menu.DropdownMenuRadioGroupProps & import("react").RefAttributes<HTMLDivElement>>;
8
+ export declare const DropdownMenuSub: import("react").FC<Menu.DropdownMenuSubProps>;
9
+ export declare const DropdownMenuContent: import("react").ForwardRefExoticComponent<Omit<Menu.DropdownMenuContentProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
10
+ export interface DropdownMenuItemProps extends ComponentPropsWithoutRef<typeof Menu.Item> {
11
+ /** `danger` for destructive actions. Pair with a confirmation step. */
12
+ tone?: 'default' | 'danger';
13
+ icon?: ReactNode;
14
+ /** Keyboard shortcut hint, e.g. "⌘D". Display only. */
15
+ shortcut?: string;
16
+ }
17
+ export declare const DropdownMenuItem: import("react").ForwardRefExoticComponent<DropdownMenuItemProps & import("react").RefAttributes<HTMLDivElement>>;
18
+ export declare const DropdownMenuCheckboxItem: import("react").ForwardRefExoticComponent<Omit<Menu.DropdownMenuCheckboxItemProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
19
+ export declare const DropdownMenuRadioItem: import("react").ForwardRefExoticComponent<Omit<Menu.DropdownMenuRadioItemProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
20
+ export declare const DropdownMenuLabel: import("react").ForwardRefExoticComponent<Omit<Menu.DropdownMenuLabelProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
21
+ export declare const DropdownMenuSeparator: import("react").ForwardRefExoticComponent<Omit<Menu.DropdownMenuSeparatorProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
22
+ export declare const DropdownMenuSubTrigger: import("react").ForwardRefExoticComponent<Omit<Menu.DropdownMenuSubTriggerProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
23
+ export declare const DropdownMenuSubContent: import("react").ForwardRefExoticComponent<Omit<Menu.DropdownMenuSubContentProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
24
+ //# sourceMappingURL=dropdown-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-menu.d.ts","sourceRoot":"","sources":["../../src/components/dropdown-menu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,wBAAwB,EAAmB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACnG,OAAO,KAAK,IAAI,MAAM,+BAA+B,CAAC;AAItD,uFAAuF;AACvF,eAAO,MAAM,YAAY,4CAAY,CAAC;AACtC,eAAO,MAAM,mBAAmB,6HAAe,CAAC;AAChD,eAAO,MAAM,iBAAiB,wHAAa,CAAC;AAC5C,eAAO,MAAM,sBAAsB,6HAAkB,CAAC;AACtD,eAAO,MAAM,eAAe,+CAAW,CAAC;AAExC,eAAO,MAAM,mBAAmB,uLAe9B,CAAC;AAEH,MAAM,WAAW,qBAAsB,SAAQ,wBAAwB,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC;IACvF,uEAAuE;IACvE,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,gBAAgB,kHA6B5B,CAAC;AAEF,eAAO,MAAM,wBAAwB,4LAYnC,CAAC;AAEH,eAAO,MAAM,qBAAqB,yLAYhC,CAAC;AAEH,eAAO,MAAM,iBAAiB,qLAK5B,CAAC;AAEH,eAAO,MAAM,qBAAqB,yLAKhC,CAAC;AAEH,eAAO,MAAM,sBAAsB,0LAUjC,CAAC;AAEH,eAAO,MAAM,sBAAsB,0LASjC,CAAC"}
@@ -0,0 +1,41 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { forwardRef } from 'react';
4
+ import * as Menu from '@radix-ui/react-dropdown-menu';
5
+ import { cx } from '../internal/cx.js';
6
+ import { CheckGlyph, ChevronRightGlyph, DotGlyph } from '../internal/icons.js';
7
+ /** Action menu. Arrow keys move, typeahead jumps, Escape closes and restores focus. */
8
+ export const DropdownMenu = Menu.Root;
9
+ export const DropdownMenuTrigger = Menu.Trigger;
10
+ export const DropdownMenuGroup = Menu.Group;
11
+ export const DropdownMenuRadioGroup = Menu.RadioGroup;
12
+ export const DropdownMenuSub = Menu.Sub;
13
+ export const DropdownMenuContent = forwardRef(function DropdownMenuContent({ className, sideOffset = 4, align = 'start', ...rest }, ref) {
14
+ return (_jsx(Menu.Portal, { children: _jsx(Menu.Content, { ref: ref, sideOffset: sideOffset, align: align, ...rest, className: cx('mn-menu', className) }) }));
15
+ });
16
+ export const DropdownMenuItem = forwardRef(function DropdownMenuItem({ tone = 'default', icon, shortcut, className, children, ...rest }, ref) {
17
+ if (rest.asChild) {
18
+ // The child (e.g. a link) becomes the menu item; icon and shortcut do not apply.
19
+ return (_jsx(Menu.Item, { ref: ref, ...rest, "data-tone": tone, className: cx('mn-menu__item', className), children: children }));
20
+ }
21
+ return (_jsxs(Menu.Item, { ref: ref, ...rest, "data-tone": tone, className: cx('mn-menu__item', className), children: [icon ? (_jsx("span", { className: "mn-menu__icon", "aria-hidden": true, children: icon })) : null, _jsx("span", { className: "mn-menu__text", children: children }), shortcut ? (_jsx("span", { className: "mn-menu__shortcut", "aria-hidden": true, children: shortcut })) : null] }));
22
+ });
23
+ export const DropdownMenuCheckboxItem = forwardRef(function DropdownMenuCheckboxItem({ className, children, ...rest }, ref) {
24
+ return (_jsxs(Menu.CheckboxItem, { ref: ref, ...rest, className: cx('mn-menu__item', className), children: [_jsx("span", { className: "mn-menu__text", children: children }), _jsx(Menu.ItemIndicator, { className: "mn-menu__indicator", children: _jsx(CheckGlyph, {}) })] }));
25
+ });
26
+ export const DropdownMenuRadioItem = forwardRef(function DropdownMenuRadioItem({ className, children, ...rest }, ref) {
27
+ return (_jsxs(Menu.RadioItem, { ref: ref, ...rest, className: cx('mn-menu__item', className), children: [_jsx("span", { className: "mn-menu__text", children: children }), _jsx(Menu.ItemIndicator, { className: "mn-menu__indicator", children: _jsx(DotGlyph, {}) })] }));
28
+ });
29
+ export const DropdownMenuLabel = forwardRef(function DropdownMenuLabel({ className, ...rest }, ref) {
30
+ return _jsx(Menu.Label, { ref: ref, ...rest, className: cx('mn-menu__label', className) });
31
+ });
32
+ export const DropdownMenuSeparator = forwardRef(function DropdownMenuSeparator({ className, ...rest }, ref) {
33
+ return _jsx(Menu.Separator, { ref: ref, ...rest, className: cx('mn-menu__separator', className) });
34
+ });
35
+ export const DropdownMenuSubTrigger = forwardRef(function DropdownMenuSubTrigger({ className, children, ...rest }, ref) {
36
+ return (_jsxs(Menu.SubTrigger, { ref: ref, ...rest, className: cx('mn-menu__item', className), children: [_jsx("span", { className: "mn-menu__text", children: children }), _jsx(ChevronRightGlyph, { className: "mn-menu__indicator" })] }));
37
+ });
38
+ export const DropdownMenuSubContent = forwardRef(function DropdownMenuSubContent({ className, ...rest }, ref) {
39
+ return (_jsx(Menu.Portal, { children: _jsx(Menu.SubContent, { ref: ref, ...rest, className: cx('mn-menu', className) }) }));
40
+ });
41
+ //# sourceMappingURL=dropdown-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-menu.js","sourceRoot":"","sources":["../../src/components/dropdown-menu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ export interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
3
+ icon?: ReactNode;
4
+ title: ReactNode;
5
+ description?: ReactNode;
6
+ /** Primary and secondary actions, usually Buttons. */
7
+ actions?: ReactNode;
8
+ headingLevel?: 'h2' | 'h3' | 'h4';
9
+ /** `page` fills an empty view; `inline` sits inside a card or table. */
10
+ size?: 'inline' | 'page';
11
+ }
12
+ /**
13
+ * Shown when there is nothing to display yet. Say what will appear here and
14
+ * offer the action that creates it.
15
+ */
16
+ export declare function EmptyState({ icon, title, description, actions, headingLevel: Heading, size, className, ...rest }: EmptyStateProps): import("react").JSX.Element;
17
+ //# sourceMappingURL=empty-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empty-state.d.ts","sourceRoot":"","sources":["../../src/components/empty-state.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACpF,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,sDAAsD;IACtD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAClC,wEAAwE;IACxE,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,KAAK,EACL,WAAW,EACX,OAAO,EACP,YAAY,EAAE,OAAc,EAC5B,IAAe,EACf,SAAS,EACT,GAAG,IAAI,EACR,EAAE,eAAe,+BAajB"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from '../internal/cx.js';
3
+ /**
4
+ * Shown when there is nothing to display yet. Say what will appear here and
5
+ * offer the action that creates it.
6
+ */
7
+ export function EmptyState({ icon, title, description, actions, headingLevel: Heading = 'h3', size = 'inline', className, ...rest }) {
8
+ return (_jsxs("div", { ...rest, className: cx('mn-empty-state', className), "data-size": size, children: [icon ? (_jsx("div", { className: "mn-empty-state__icon", "aria-hidden": true, children: icon })) : null, _jsx(Heading, { className: "mn-empty-state__title", children: title }), description ? _jsx("p", { className: "mn-empty-state__description", children: description }) : null, actions ? _jsx("div", { className: "mn-empty-state__actions", children: actions }) : null] }));
9
+ }
10
+ //# sourceMappingURL=empty-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empty-state.js","sourceRoot":"","sources":["../../src/components/empty-state.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAavC;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,IAAI,EACJ,KAAK,EACL,WAAW,EACX,OAAO,EACP,YAAY,EAAE,OAAO,GAAG,IAAI,EAC5B,IAAI,GAAG,QAAQ,EACf,SAAS,EACT,GAAG,IAAI,EACS;IAChB,OAAO,CACL,kBAAS,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,eAAa,IAAI,aACvE,IAAI,CAAC,CAAC,CAAC,CACN,cAAK,SAAS,EAAC,sBAAsB,iCAClC,IAAI,GACD,CACP,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,OAAO,IAAC,SAAS,EAAC,uBAAuB,YAAE,KAAK,GAAW,EAC3D,WAAW,CAAC,CAAC,CAAC,YAAG,SAAS,EAAC,6BAA6B,YAAE,WAAW,GAAK,CAAC,CAAC,CAAC,IAAI,EACjF,OAAO,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,yBAAyB,YAAE,OAAO,GAAO,CAAC,CAAC,CAAC,IAAI,IACtE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { type HTMLAttributes, type LabelHTMLAttributes, type ReactNode } from 'react';
2
+ interface FieldContextValue {
3
+ controlId: string;
4
+ labelId: string;
5
+ descriptionId: string;
6
+ errorId: string;
7
+ invalid: boolean;
8
+ required: boolean;
9
+ disabled: boolean;
10
+ hasDescription: boolean;
11
+ hasError: boolean;
12
+ register: (part: 'description' | 'error', present: boolean) => void;
13
+ }
14
+ export interface FieldProps extends HTMLAttributes<HTMLDivElement> {
15
+ /** Override the generated control id (e.g. to match an existing label). */
16
+ id?: string;
17
+ invalid?: boolean;
18
+ required?: boolean;
19
+ disabled?: boolean;
20
+ children: ReactNode;
21
+ }
22
+ /**
23
+ * Groups a label, a control, help text and an error message, and wires their
24
+ * ids together: the control gets `id`, `aria-describedby`, `aria-invalid`,
25
+ * `aria-required` and `disabled` automatically. Descriptions and errors
26
+ * register themselves, so `aria-describedby` only names elements that exist.
27
+ *
28
+ * <Field invalid={!!error}>
29
+ * <FieldLabel>Email</FieldLabel>
30
+ * <Input type="email" />
31
+ * <FieldError>{error}</FieldError>
32
+ * </Field>
33
+ */
34
+ export declare function Field({ id, invalid, required, disabled, className, children, ...rest }: FieldProps): import("react").JSX.Element;
35
+ export declare function useFieldContext(): FieldContextValue | null;
36
+ export interface FieldControlProps {
37
+ id?: string | undefined;
38
+ disabled?: boolean | undefined;
39
+ required?: boolean | undefined;
40
+ 'aria-describedby'?: string | undefined;
41
+ 'aria-invalid'?: boolean | 'true' | 'false' | 'grammar' | 'spelling' | undefined;
42
+ }
43
+ /**
44
+ * Merges Field context into a control's props. Explicit props win, so a
45
+ * control can still be used outside a Field.
46
+ */
47
+ export declare function useFieldControl<P extends FieldControlProps>(props: P, options?: {
48
+ invalid?: boolean | undefined;
49
+ }): P & {
50
+ 'aria-required'?: true;
51
+ 'aria-invalid'?: true;
52
+ };
53
+ export interface FieldLabelProps extends LabelHTMLAttributes<HTMLLabelElement> {
54
+ /** Text shown after the label for optional fields, e.g. "Optional". */
55
+ optionalText?: string;
56
+ }
57
+ export declare const FieldLabel: import("react").ForwardRefExoticComponent<FieldLabelProps & import("react").RefAttributes<HTMLLabelElement>>;
58
+ export declare function FieldDescription({ className, ...rest }: HTMLAttributes<HTMLParagraphElement>): import("react").JSX.Element;
59
+ /**
60
+ * Renders nothing when empty, so it can always be present. Announced politely
61
+ * when it appears.
62
+ */
63
+ export declare function FieldError({ className, children, ...rest }: HTMLAttributes<HTMLParagraphElement>): import("react").JSX.Element | null;
64
+ export {};
65
+ //# sourceMappingURL=field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../src/components/field.tsx"],"names":[],"mappings":"AAEA,OAAO,EASL,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,UAAU,iBAAiB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACrE;AAID,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,cAAc,CAAC;IAChE,2EAA2E;IAC3E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,EACpB,EAAE,EACF,OAAe,EACf,QAAgB,EAChB,QAAgB,EAChB,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,UAAU,+BAoCZ;AAED,wBAAgB,eAAe,IAAI,iBAAiB,GAAG,IAAI,CAE1D;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;CAClF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,iBAAiB,EACzD,KAAK,EAAE,CAAC,EACR,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAO,GAC9C,CAAC,GAAG;IAAE,eAAe,CAAC,EAAE,IAAI,CAAC;IAAC,cAAc,CAAC,EAAE,IAAI,CAAA;CAAE,CAoBvD;AAED,MAAM,WAAW,eAAgB,SAAQ,mBAAmB,CAAC,gBAAgB,CAAC;IAC5E,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,UAAU,8GAuBrB,CAAC;AAaH,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,oBAAoB,CAAC,+BAS5F;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,oBAAoB,CAAC,sCAehG"}
@@ -0,0 +1,101 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { createContext, forwardRef, useCallback, useContext, useEffect, useId, useMemo, useState, } from 'react';
4
+ import { cx } from '../internal/cx.js';
5
+ const FieldContext = createContext(null);
6
+ /**
7
+ * Groups a label, a control, help text and an error message, and wires their
8
+ * ids together: the control gets `id`, `aria-describedby`, `aria-invalid`,
9
+ * `aria-required` and `disabled` automatically. Descriptions and errors
10
+ * register themselves, so `aria-describedby` only names elements that exist.
11
+ *
12
+ * <Field invalid={!!error}>
13
+ * <FieldLabel>Email</FieldLabel>
14
+ * <Input type="email" />
15
+ * <FieldError>{error}</FieldError>
16
+ * </Field>
17
+ */
18
+ export function Field({ id, invalid = false, required = false, disabled = false, className, children, ...rest }) {
19
+ const auto = useId();
20
+ const controlId = id ?? `mn-field-${auto}`;
21
+ const [hasDescription, setHasDescription] = useState(false);
22
+ const [hasError, setHasError] = useState(false);
23
+ const register = useCallback((part, present) => {
24
+ if (part === 'description')
25
+ setHasDescription(present);
26
+ else
27
+ setHasError(present);
28
+ }, []);
29
+ const value = useMemo(() => ({
30
+ controlId,
31
+ labelId: `${controlId}-label`,
32
+ descriptionId: `${controlId}-description`,
33
+ errorId: `${controlId}-error`,
34
+ invalid,
35
+ required,
36
+ disabled,
37
+ hasDescription,
38
+ hasError,
39
+ register,
40
+ }), [controlId, invalid, required, disabled, hasDescription, hasError, register]);
41
+ return (_jsx(FieldContext.Provider, { value: value, children: _jsx("div", { ...rest, className: cx('mn-field', className), "data-invalid": invalid || undefined, "data-disabled": disabled || undefined, children: children }) }));
42
+ }
43
+ export function useFieldContext() {
44
+ return useContext(FieldContext);
45
+ }
46
+ /**
47
+ * Merges Field context into a control's props. Explicit props win, so a
48
+ * control can still be used outside a Field.
49
+ */
50
+ export function useFieldControl(props, options = {}) {
51
+ const field = useContext(FieldContext);
52
+ const invalid = options.invalid ?? field?.invalid ?? false;
53
+ const describedBy = [
54
+ props['aria-describedby'],
55
+ field?.hasDescription ? field.descriptionId : undefined,
56
+ field?.hasError && invalid ? field.errorId : undefined,
57
+ ]
58
+ .filter(Boolean)
59
+ .join(' ');
60
+ const required = props.required ?? field?.required;
61
+ return {
62
+ ...props,
63
+ id: props.id ?? field?.controlId,
64
+ disabled: props.disabled ?? (field?.disabled || undefined),
65
+ required,
66
+ 'aria-describedby': describedBy || undefined,
67
+ ...(invalid ? { 'aria-invalid': true } : {}),
68
+ ...(required ? { 'aria-required': true } : {}),
69
+ };
70
+ }
71
+ export const FieldLabel = forwardRef(function FieldLabel({ className, children, optionalText, htmlFor, ...rest }, ref) {
72
+ const field = useContext(FieldContext);
73
+ return (_jsxs("label", { ref: ref, ...rest, id: rest.id ?? field?.labelId, htmlFor: htmlFor ?? field?.controlId, className: cx('mn-field__label', className), children: [children, field?.required ? (_jsx("span", { className: "mn-field__required", "aria-hidden": true, children: "*" })) : optionalText ? (_jsx("span", { className: "mn-field__optional", children: optionalText })) : null] }));
74
+ });
75
+ function useRegister(part, present) {
76
+ const field = useContext(FieldContext);
77
+ const register = field?.register;
78
+ useEffect(() => {
79
+ if (!register || !present)
80
+ return;
81
+ register(part, true);
82
+ return () => register(part, false);
83
+ }, [register, part, present]);
84
+ return field;
85
+ }
86
+ export function FieldDescription({ className, ...rest }) {
87
+ const field = useRegister('description', true);
88
+ return (_jsx("p", { ...rest, id: rest.id ?? field?.descriptionId, className: cx('mn-field__description', className) }));
89
+ }
90
+ /**
91
+ * Renders nothing when empty, so it can always be present. Announced politely
92
+ * when it appears.
93
+ */
94
+ export function FieldError({ className, children, ...rest }) {
95
+ const empty = children === null || children === undefined || children === false || children === '';
96
+ const field = useRegister('error', !empty);
97
+ if (empty)
98
+ return null;
99
+ return (_jsx("p", { ...rest, id: rest.id ?? field?.errorId, className: cx('mn-field__error', className), "aria-live": "polite", children: children }));
100
+ }
101
+ //# sourceMappingURL=field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field.js","sourceRoot":"","sources":["../../src/components/field.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type InputHTMLAttributes, type TextareaHTMLAttributes } from 'react';
2
+ export type ControlSize = 'sm' | 'md' | 'lg';
3
+ export interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {
4
+ size?: ControlSize;
5
+ /** Marks the value invalid. Inside a Field, the Field's `invalid` is used. */
6
+ invalid?: boolean;
7
+ }
8
+ export declare const Input: import("react").ForwardRefExoticComponent<InputProps & import("react").RefAttributes<HTMLInputElement>>;
9
+ export interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {
10
+ invalid?: boolean;
11
+ /** Allow vertical resizing. Default true. */
12
+ resizable?: boolean;
13
+ }
14
+ export declare const Textarea: import("react").ForwardRefExoticComponent<TextareaProps & import("react").RefAttributes<HTMLTextAreaElement>>;
15
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/components/input.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,mBAAmB,EAAE,KAAK,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAI1F,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7C,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACrF,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,KAAK,yGAMhB,CAAC;AAEH,MAAM,WAAW,aAAc,SAAQ,sBAAsB,CAAC,mBAAmB,CAAC;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,QAAQ,+GAcnB,CAAC"}
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from 'react';
4
+ import { cx } from '../internal/cx.js';
5
+ import { useFieldControl } from './field.js';
6
+ export const Input = forwardRef(function Input({ size = 'md', invalid, className, ...rest }, ref) {
7
+ const props = useFieldControl(rest, { invalid });
8
+ return _jsx("input", { ref: ref, ...props, "data-size": size, className: cx('mn-input', className) });
9
+ });
10
+ export const Textarea = forwardRef(function Textarea({ invalid, resizable = true, rows = 3, className, ...rest }, ref) {
11
+ const props = useFieldControl(rest, { invalid });
12
+ return (_jsx("textarea", { ref: ref, rows: rows, ...props, "data-resizable": resizable || undefined, className: cx('mn-input', 'mn-textarea', className) }));
13
+ });
14
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/components/input.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,UAAU,EAAyD,MAAM,OAAO,CAAC;AAC1F,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAU7C,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAA+B,SAAS,KAAK,CAC1E,EAAE,IAAI,GAAG,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAC5C,GAAG;IAEH,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACjD,OAAO,gBAAO,GAAG,EAAE,GAAG,KAAM,KAAK,eAAa,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,GAAI,CAAC;AAC/F,CAAC,CAAC,CAAC;AAQH,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAqC,SAAS,QAAQ,CACtF,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAC3D,GAAG;IAEH,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACjD,OAAO,CACL,mBACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,KACN,KAAK,oBACO,SAAS,IAAI,SAAS,EACtC,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,SAAS,CAAC,GACnD,CACH,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { HTMLAttributes } from 'react';
2
+ /** A keyboard key or shortcut, e.g. <Kbd>⌘K</Kbd>. */
3
+ export declare function Kbd({ className, ...rest }: HTMLAttributes<HTMLElement>): import("react").JSX.Element;
4
+ //# sourceMappingURL=kbd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kbd.d.ts","sourceRoot":"","sources":["../../src/components/kbd.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAG5C,sDAAsD;AACtD,wBAAgB,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,WAAW,CAAC,+BAEtE"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cx } from '../internal/cx.js';
3
+ /** A keyboard key or shortcut, e.g. <Kbd>⌘K</Kbd>. */
4
+ export function Kbd({ className, ...rest }) {
5
+ return _jsx("kbd", { ...rest, className: cx('mn-kbd', className) });
6
+ }
7
+ //# sourceMappingURL=kbd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kbd.js","sourceRoot":"","sources":["../../src/components/kbd.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC,sDAAsD;AACtD,MAAM,UAAU,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAA+B;IACrE,OAAO,iBAAS,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAI,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type AnchorHTMLAttributes } from 'react';
2
+ export interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
3
+ /** `inline` (default) for links in text, `standalone` for links in lists and footers. */
4
+ variant?: 'inline' | 'standalone' | 'subtle';
5
+ /** Render the child element (e.g. a Next.js Link) with link styling. */
6
+ asChild?: boolean;
7
+ }
8
+ /**
9
+ * Text link. When `target="_blank"` it adds `rel="noopener noreferrer"`, an
10
+ * external icon and a hidden "opens in a new tab" note.
11
+ */
12
+ export declare const Link: import("react").ForwardRefExoticComponent<LinkProps & import("react").RefAttributes<HTMLAnchorElement>>;
13
+ //# sourceMappingURL=link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/components/link.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAK9D,MAAM,WAAW,SAAU,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IACxE,yFAAyF;IACzF,OAAO,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,QAAQ,CAAC;IAC7C,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAqBD;;;GAGG;AACH,eAAO,MAAM,IAAI,yGA0Bf,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ import { Slot } from '@radix-ui/react-slot';
4
+ import { cx } from '../internal/cx.js';
5
+ import { VisuallyHidden } from './visually-hidden.js';
6
+ function ExternalGlyph() {
7
+ return (_jsx("svg", { "aria-hidden": true, focusable: false, width: "12", height: "12", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: 1.75, strokeLinecap: "round", strokeLinejoin: "round", children: _jsx("path", { d: "M6.5 3.5h-3v9h9v-3M9.5 2.5h4v4M13.5 2.5 7 9" }) }));
8
+ }
9
+ /**
10
+ * Text link. When `target="_blank"` it adds `rel="noopener noreferrer"`, an
11
+ * external icon and a hidden "opens in a new tab" note.
12
+ */
13
+ export const Link = forwardRef(function Link({ variant = 'inline', asChild = false, target, rel, className, children, ...rest }, ref) {
14
+ const external = target === '_blank';
15
+ const Comp = asChild ? Slot : 'a';
16
+ return (_jsxs(Comp, { ref: ref, ...rest, target: target, rel: external ? cx(rel, 'noopener', 'noreferrer') : rel, "data-variant": variant, className: cx('mn-link', className), children: [children, external ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "mn-link__external", children: _jsx(ExternalGlyph, {}) }), _jsx(VisuallyHidden, { children: " (opens in a new tab)" })] })) : null] }));
17
+ });
18
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/components/link.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAA6B,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAStD,SAAS,aAAa;IACpB,OAAO,CACL,mCAEE,SAAS,EAAE,KAAK,EAChB,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAE,IAAI,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,YAEtB,eAAM,CAAC,EAAC,6CAA6C,GAAG,GACpD,CACP,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAA+B,SAAS,IAAI,CACxE,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAClF,GAAG;IAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,QAAQ,CAAC;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IAClC,OAAO,CACL,MAAC,IAAI,IACH,GAAG,EAAE,GAAG,KACJ,IAAI,EACR,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,kBACzC,OAAO,EACrB,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,aAElC,QAAQ,EACR,QAAQ,CAAC,CAAC,CAAC,CACV,8BACE,eAAM,SAAS,EAAC,mBAAmB,YACjC,KAAC,aAAa,KAAG,GACZ,EACP,KAAC,cAAc,wCAAuC,IACrD,CACJ,CAAC,CAAC,CAAC,IAAI,IACH,CACR,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface PaginationProps {
2
+ /** 1-based current page. */
3
+ page: number;
4
+ pageCount: number;
5
+ onPageChange: (page: number) => void;
6
+ /** `full` shows numbered pages; `compact` shows "1–20 of 143" with arrows. */
7
+ variant?: 'full' | 'compact';
8
+ /** Needed for the compact range text. */
9
+ pageSize?: number;
10
+ totalItems?: number;
11
+ /** Accessible name of the nav. */
12
+ label?: string;
13
+ className?: string;
14
+ }
15
+ /** Which page numbers to show: first, last, and a window around the current page. */
16
+ export declare function pageWindow(page: number, pageCount: number, radius?: number): Array<number | 'gap'>;
17
+ export declare function Pagination({ page, pageCount, onPageChange, variant, pageSize, totalItems, label, className, }: PaginationProps): import("react").JSX.Element;
18
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/components/pagination.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAe7F;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,OAAgB,EAChB,QAAQ,EACR,UAAU,EACV,KAAoB,EACpB,SAAS,GACV,EAAE,eAAe,+BAgEjB"}
@@ -0,0 +1,40 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cx } from '../internal/cx.js';
4
+ import { ChevronRightGlyph } from '../internal/icons.js';
5
+ import { IconButton } from './button.js';
6
+ /** Which page numbers to show: first, last, and a window around the current page. */
7
+ export function pageWindow(page, pageCount, radius = 1) {
8
+ if (pageCount <= 7)
9
+ return Array.from({ length: pageCount }, (_, i) => i + 1);
10
+ const pages = new Set([1, pageCount]);
11
+ for (let p = page - radius; p <= page + radius; p++)
12
+ if (p >= 1 && p <= pageCount)
13
+ pages.add(p);
14
+ if (page <= 3)
15
+ [2, 3, 4].forEach((p) => pages.add(p));
16
+ if (page >= pageCount - 2)
17
+ [pageCount - 3, pageCount - 2, pageCount - 1].forEach((p) => pages.add(p));
18
+ const sorted = [...pages].sort((a, b) => a - b);
19
+ const out = [];
20
+ sorted.forEach((p, i) => {
21
+ const prev = sorted[i - 1];
22
+ if (prev !== undefined && p - prev > 1)
23
+ out.push('gap');
24
+ out.push(p);
25
+ });
26
+ return out;
27
+ }
28
+ export function Pagination({ page, pageCount, onPageChange, variant = 'full', pageSize, totalItems, label = 'Pagination', className, }) {
29
+ const prev = (_jsx(IconButton, { label: "Previous page", size: "sm", disabled: page <= 1, onClick: () => onPageChange(page - 1), icon: _jsx(ChevronRightGlyph, { style: { transform: 'rotate(180deg)' } }) }));
30
+ const next = (_jsx(IconButton, { label: "Next page", size: "sm", disabled: page >= pageCount, onClick: () => onPageChange(page + 1), icon: _jsx(ChevronRightGlyph, {}) }));
31
+ if (variant === 'compact') {
32
+ const start = pageSize && totalItems ? Math.min((page - 1) * pageSize + 1, totalItems) : undefined;
33
+ const end = pageSize && totalItems ? Math.min(page * pageSize, totalItems) : undefined;
34
+ return (_jsxs("nav", { "aria-label": label, className: cx('mn-pagination', className), "data-variant": "compact", children: [_jsx("p", { className: "mn-pagination__range", "aria-live": "polite", children: start !== undefined && end !== undefined
35
+ ? `${start}–${end} of ${totalItems}`
36
+ : `Page ${page} of ${pageCount}` }), prev, next] }));
37
+ }
38
+ return (_jsxs("nav", { "aria-label": label, className: cx('mn-pagination', className), "data-variant": "full", children: [prev, _jsx("ol", { className: "mn-pagination__pages", children: pageWindow(page, pageCount).map((p, i) => p === 'gap' ? (_jsx("li", { className: "mn-pagination__gap", "aria-hidden": true, children: "\u2026" }, `gap-${i}`)) : (_jsx("li", { children: _jsx("button", { type: "button", className: "mn-pagination__page", "aria-current": p === page ? 'page' : undefined, "aria-label": `Page ${p}`, onClick: () => onPageChange(p), children: p }) }, p))) }), next] }));
39
+ }
40
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/components/pagination.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiBzC,qFAAqF;AACrF,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,SAAiB,EAAE,MAAM,GAAG,CAAC;IACpE,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAChG,IAAI,IAAI,IAAI,CAAC;QAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,IAAI,IAAI,IAAI,SAAS,GAAG,CAAC;QACvB,CAAC,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,MAAM,GAAG,GAA0B,EAAE,CAAC;IACtC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EACzB,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,OAAO,GAAG,MAAM,EAChB,QAAQ,EACR,UAAU,EACV,KAAK,GAAG,YAAY,EACpB,SAAS,GACO;IAChB,MAAM,IAAI,GAAG,CACX,KAAC,UAAU,IACT,KAAK,EAAC,eAAe,EACrB,IAAI,EAAC,IAAI,EACT,QAAQ,EAAE,IAAI,IAAI,CAAC,EACnB,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,EACrC,IAAI,EAAE,KAAC,iBAAiB,IAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAI,GACnE,CACH,CAAC;IACF,MAAM,IAAI,GAAG,CACX,KAAC,UAAU,IACT,KAAK,EAAC,WAAW,EACjB,IAAI,EAAC,IAAI,EACT,QAAQ,EAAE,IAAI,IAAI,SAAS,EAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,EACrC,IAAI,EAAE,KAAC,iBAAiB,KAAG,GAC3B,CACH,CAAC;IAEF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,KAAK,GACT,QAAQ,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,MAAM,GAAG,GAAG,QAAQ,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,OAAO,CACL,6BAAiB,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,kBAAe,SAAS,aACvF,YAAG,SAAS,EAAC,sBAAsB,eAAW,QAAQ,YACnD,KAAK,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS;wBACvC,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,OAAO,UAAU,EAAE;wBACpC,CAAC,CAAC,QAAQ,IAAI,OAAO,SAAS,EAAE,GAChC,EACH,IAAI,EACJ,IAAI,IACD,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,6BAAiB,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,kBAAe,MAAM,aACnF,IAAI,EACL,aAAI,SAAS,EAAC,sBAAsB,YACjC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACxC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CACZ,aAAqB,SAAS,EAAC,oBAAoB,6CAA1C,OAAO,CAAC,EAAE,CAEd,CACN,CAAC,CAAC,CAAC,CACF,uBACE,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,qBAAqB,kBACjB,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,gBACjC,QAAQ,CAAC,EAAE,EACvB,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,YAE7B,CAAC,GACK,IATF,CAAC,CAUL,CACN,CACF,GACE,EACJ,IAAI,IACD,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
2
+ /** Non-modal floating panel for filters, pickers and quick edits. */
3
+ export declare const Popover: import("react").FC<PopoverPrimitive.PopoverProps>;
4
+ export declare const PopoverTrigger: import("react").ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
5
+ export declare const PopoverAnchor: import("react").ForwardRefExoticComponent<PopoverPrimitive.PopoverAnchorProps & import("react").RefAttributes<HTMLDivElement>>;
6
+ export declare const PopoverClose: import("react").ForwardRefExoticComponent<PopoverPrimitive.PopoverCloseProps & import("react").RefAttributes<HTMLButtonElement>>;
7
+ export declare const PopoverContent: import("react").ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverContentProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
8
+ //# sourceMappingURL=popover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../src/components/popover.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAG5D,qEAAqE;AACrE,eAAO,MAAM,OAAO,mDAAwB,CAAC;AAC7C,eAAO,MAAM,cAAc,oIAA2B,CAAC;AACvD,eAAO,MAAM,aAAa,gIAA0B,CAAC;AACrD,eAAO,MAAM,YAAY,kIAAyB,CAAC;AAEnD,eAAO,MAAM,cAAc,8LAezB,CAAC"}
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from 'react';
4
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
5
+ import { cx } from '../internal/cx.js';
6
+ /** Non-modal floating panel for filters, pickers and quick edits. */
7
+ export const Popover = PopoverPrimitive.Root;
8
+ export const PopoverTrigger = PopoverPrimitive.Trigger;
9
+ export const PopoverAnchor = PopoverPrimitive.Anchor;
10
+ export const PopoverClose = PopoverPrimitive.Close;
11
+ export const PopoverContent = forwardRef(function PopoverContent({ className, sideOffset = 6, align = 'start', ...rest }, ref) {
12
+ return (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { ref: ref, sideOffset: sideOffset, align: align, ...rest, className: cx('mn-popover', className) }) }));
13
+ });
14
+ //# sourceMappingURL=popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.js","sourceRoot":"","sources":["../../src/components/popover.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,UAAU,EAAkD,MAAM,OAAO,CAAC;AACnF,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC,qEAAqE;AACrE,MAAM,CAAC,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC;AAC7C,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,CAAC;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC;AACrD,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC;AAEnD,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAGtC,SAAS,cAAc,CAAC,EAAE,SAAS,EAAE,UAAU,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG;IACpF,OAAO,CACL,KAAC,gBAAgB,CAAC,MAAM,cACtB,KAAC,gBAAgB,CAAC,OAAO,IACvB,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,KACR,IAAI,EACR,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,GACtC,GACsB,CAC3B,CAAC;AACJ,CAAC,CAAC,CAAC"}