@moldable-ai/ui 0.2.20 → 0.2.22

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 (196) hide show
  1. package/dist/catalog/catalog-coverage.d.ts +15 -0
  2. package/dist/catalog/catalog-coverage.d.ts.map +1 -0
  3. package/dist/catalog/catalog-coverage.js +44 -0
  4. package/dist/catalog/catalog-manifest.d.ts.map +1 -1
  5. package/dist/catalog/catalog-manifest.js +35 -23
  6. package/dist/catalog/catalog-types.d.ts +17 -0
  7. package/dist/catalog/catalog-types.d.ts.map +1 -1
  8. package/dist/catalog/catalog-types.js +7 -0
  9. package/dist/catalog/component-catalog.d.ts.map +1 -1
  10. package/dist/catalog/component-catalog.js +16 -6
  11. package/dist/catalog/core-catalog-exclusions.d.ts +8 -0
  12. package/dist/catalog/core-catalog-exclusions.d.ts.map +1 -0
  13. package/dist/catalog/core-catalog-exclusions.js +155 -0
  14. package/dist/catalog/core-catalog.d.ts +0 -4
  15. package/dist/catalog/core-catalog.d.ts.map +1 -1
  16. package/dist/catalog/core-catalog.js +12 -98
  17. package/dist/catalog/core-collection-stories.d.ts +3 -0
  18. package/dist/catalog/core-collection-stories.d.ts.map +1 -0
  19. package/dist/catalog/core-collection-stories.js +42 -0
  20. package/dist/catalog/core-control-stories.d.ts +3 -0
  21. package/dist/catalog/core-control-stories.d.ts.map +1 -0
  22. package/dist/catalog/core-control-stories.js +97 -0
  23. package/dist/catalog/core-feedback-stories.d.ts +3 -0
  24. package/dist/catalog/core-feedback-stories.d.ts.map +1 -0
  25. package/dist/catalog/core-feedback-stories.js +50 -0
  26. package/dist/catalog/core-foundation-stories.d.ts +3 -0
  27. package/dist/catalog/core-foundation-stories.d.ts.map +1 -0
  28. package/dist/catalog/core-foundation-stories.js +53 -0
  29. package/dist/catalog/core-navigation-stories.d.ts +3 -0
  30. package/dist/catalog/core-navigation-stories.d.ts.map +1 -0
  31. package/dist/catalog/core-navigation-stories.js +25 -0
  32. package/dist/catalog/core-overlay-stories.d.ts +3 -0
  33. package/dist/catalog/core-overlay-stories.d.ts.map +1 -0
  34. package/dist/catalog/core-overlay-stories.js +20 -0
  35. package/dist/catalog/index.d.ts +3 -1
  36. package/dist/catalog/index.d.ts.map +1 -1
  37. package/dist/catalog/index.js +3 -1
  38. package/dist/components/app-error-boundary.d.ts.map +1 -1
  39. package/dist/components/app-error-boundary.js +3 -2
  40. package/dist/components/chat/chat-panel.d.ts +0 -1
  41. package/dist/components/chat/chat-panel.d.ts.map +1 -1
  42. package/dist/components/chat/chat-panel.js +7 -11
  43. package/dist/components/ui/alert-dialog.d.ts +10 -4
  44. package/dist/components/ui/alert-dialog.d.ts.map +1 -1
  45. package/dist/components/ui/alert-dialog.js +14 -6
  46. package/dist/components/ui/alert.d.ts +19 -3
  47. package/dist/components/ui/alert.d.ts.map +1 -1
  48. package/dist/components/ui/alert.js +25 -8
  49. package/dist/components/ui/app-frame.d.ts +9 -3
  50. package/dist/components/ui/app-frame.d.ts.map +1 -1
  51. package/dist/components/ui/app-frame.js +45 -6
  52. package/dist/components/ui/button.d.ts +6 -4
  53. package/dist/components/ui/button.d.ts.map +1 -1
  54. package/dist/components/ui/button.js +40 -8
  55. package/dist/components/ui/collapsible.d.ts +9 -1
  56. package/dist/components/ui/collapsible.d.ts.map +1 -1
  57. package/dist/components/ui/collapsible.js +13 -2
  58. package/dist/components/ui/collection-navigation.d.ts +8 -0
  59. package/dist/components/ui/collection-navigation.d.ts.map +1 -0
  60. package/dist/components/ui/collection-navigation.js +19 -0
  61. package/dist/components/ui/command.d.ts +5 -1
  62. package/dist/components/ui/command.d.ts.map +1 -1
  63. package/dist/components/ui/command.js +13 -1
  64. package/dist/components/ui/confirm-dialog.d.ts +19 -0
  65. package/dist/components/ui/confirm-dialog.d.ts.map +1 -0
  66. package/dist/components/ui/confirm-dialog.js +45 -0
  67. package/dist/components/ui/date-picker.d.ts +24 -0
  68. package/dist/components/ui/date-picker.d.ts.map +1 -0
  69. package/dist/components/ui/date-picker.js +92 -0
  70. package/dist/components/ui/dialog-primary-action.d.ts +4 -0
  71. package/dist/components/ui/dialog-primary-action.d.ts.map +1 -0
  72. package/dist/components/ui/dialog-primary-action.js +37 -0
  73. package/dist/components/ui/dialog.d.ts +8 -2
  74. package/dist/components/ui/dialog.d.ts.map +1 -1
  75. package/dist/components/ui/dialog.js +15 -5
  76. package/dist/components/ui/empty.d.ts +7 -2
  77. package/dist/components/ui/empty.d.ts.map +1 -1
  78. package/dist/components/ui/empty.js +20 -7
  79. package/dist/components/ui/error-boundary-view.d.ts +12 -0
  80. package/dist/components/ui/error-boundary-view.d.ts.map +1 -0
  81. package/dist/components/ui/error-boundary-view.js +8 -0
  82. package/dist/components/ui/grid.d.ts.map +1 -1
  83. package/dist/components/ui/grid.js +70 -46
  84. package/dist/components/ui/icon-button.d.ts.map +1 -1
  85. package/dist/components/ui/icon-button.js +1 -2
  86. package/dist/components/ui/index.d.ts +5 -0
  87. package/dist/components/ui/index.d.ts.map +1 -1
  88. package/dist/components/ui/index.js +5 -0
  89. package/dist/components/ui/input-group.d.ts +1 -1
  90. package/dist/components/ui/list.d.ts +5 -1
  91. package/dist/components/ui/list.d.ts.map +1 -1
  92. package/dist/components/ui/list.js +27 -16
  93. package/dist/components/ui/material.d.ts +34 -0
  94. package/dist/components/ui/material.d.ts.map +1 -0
  95. package/dist/components/ui/material.js +34 -0
  96. package/dist/components/ui/message-scroller-controller.d.ts +162 -0
  97. package/dist/components/ui/message-scroller-controller.d.ts.map +1 -0
  98. package/dist/components/ui/message-scroller-controller.js +888 -0
  99. package/dist/components/ui/message-scroller-policy.d.ts +74 -0
  100. package/dist/components/ui/message-scroller-policy.d.ts.map +1 -0
  101. package/dist/components/ui/message-scroller-policy.js +129 -0
  102. package/dist/components/ui/message-scroller-primitive.d.ts +55 -0
  103. package/dist/components/ui/message-scroller-primitive.d.ts.map +1 -0
  104. package/dist/components/ui/message-scroller-primitive.js +226 -0
  105. package/dist/components/ui/message-scroller.d.ts +2 -2
  106. package/dist/components/ui/message-scroller.d.ts.map +1 -1
  107. package/dist/components/ui/message-scroller.js +3 -15
  108. package/dist/components/ui/navigation-button-group.d.ts +16 -0
  109. package/dist/components/ui/navigation-button-group.d.ts.map +1 -0
  110. package/dist/components/ui/navigation-button-group.js +9 -0
  111. package/dist/components/ui/popover.d.ts +9 -2
  112. package/dist/components/ui/popover.d.ts.map +1 -1
  113. package/dist/components/ui/popover.js +13 -3
  114. package/dist/components/ui/scroll-area.d.ts +8 -2
  115. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  116. package/dist/components/ui/scroll-area.js +6 -3
  117. package/dist/components/ui/search-field.d.ts.map +1 -1
  118. package/dist/components/ui/segmented-control.d.ts.map +1 -1
  119. package/dist/components/ui/segmented-control.js +6 -5
  120. package/dist/components/ui/sheet.d.ts +4 -2
  121. package/dist/components/ui/sheet.d.ts.map +1 -1
  122. package/dist/components/ui/sheet.js +12 -9
  123. package/dist/components/ui/sonner.d.ts +1 -1
  124. package/dist/components/ui/sonner.d.ts.map +1 -1
  125. package/dist/components/ui/spinner.d.ts.map +1 -1
  126. package/dist/components/ui/spinner.js +1 -1
  127. package/dist/components/ui/table.d.ts.map +1 -1
  128. package/dist/components/ui/table.js +7 -2
  129. package/dist/components/ui/toggle.d.ts +12 -4
  130. package/dist/components/ui/toggle.d.ts.map +1 -1
  131. package/dist/components/ui/toggle.js +13 -2
  132. package/dist/components/ui/toolbar.d.ts +9 -2
  133. package/dist/components/ui/toolbar.d.ts.map +1 -1
  134. package/dist/components/ui/toolbar.js +23 -4
  135. package/dist/components/ui/tooltip.d.ts +8 -3
  136. package/dist/components/ui/tooltip.d.ts.map +1 -1
  137. package/dist/components/ui/tooltip.js +11 -6
  138. package/dist/index.d.ts +6 -1
  139. package/dist/index.d.ts.map +1 -1
  140. package/dist/index.js +7 -1
  141. package/dist/lib/frame-lifecycle.d.ts +23 -0
  142. package/dist/lib/frame-lifecycle.d.ts.map +1 -1
  143. package/dist/lib/frame-lifecycle.js +30 -3
  144. package/dist/lib/host-date-time-picker.d.ts +36 -0
  145. package/dist/lib/host-date-time-picker.d.ts.map +1 -0
  146. package/dist/lib/host-date-time-picker.js +162 -0
  147. package/dist/lib/host-file-dialog.d.ts +66 -0
  148. package/dist/lib/host-file-dialog.d.ts.map +1 -0
  149. package/dist/lib/host-file-dialog.js +221 -0
  150. package/dist/lib/host-native-menu.d.ts +75 -0
  151. package/dist/lib/host-native-menu.d.ts.map +1 -0
  152. package/dist/lib/host-native-menu.js +187 -0
  153. package/dist/lib/host-services.d.ts +13 -0
  154. package/dist/lib/host-services.d.ts.map +1 -0
  155. package/dist/lib/host-services.js +161 -0
  156. package/dist/lib/host-share.d.ts +39 -0
  157. package/dist/lib/host-share.d.ts.map +1 -0
  158. package/dist/lib/host-share.js +161 -0
  159. package/dist/lib/theme.d.ts.map +1 -1
  160. package/dist/lib/theme.js +2 -1
  161. package/docs/README.md +4 -1
  162. package/docs/adaptive-materials.md +79 -0
  163. package/docs/app-anatomy.md +3 -1
  164. package/docs/component-catalog.md +26 -3
  165. package/docs/design-tokens.md +17 -4
  166. package/docs/foundations.md +5 -3
  167. package/docs/standalone-app-windows.md +8 -0
  168. package/docs/visual-regression.md +78 -0
  169. package/package.json +12 -4
  170. package/src/components/ui/alert-dialog.md +58 -0
  171. package/src/components/ui/alert.md +28 -6
  172. package/src/components/ui/app-frame.md +5 -0
  173. package/src/components/ui/button.md +10 -3
  174. package/src/components/ui/collapsible.md +52 -0
  175. package/src/components/ui/combobox.md +0 -1
  176. package/src/components/ui/command.md +54 -0
  177. package/src/components/ui/date-field.md +1 -1
  178. package/src/components/ui/date-picker.md +55 -0
  179. package/src/components/ui/dialog.md +59 -0
  180. package/src/components/ui/empty.md +8 -3
  181. package/src/components/ui/error-boundary-view.md +98 -0
  182. package/src/components/ui/grid.md +8 -4
  183. package/src/components/ui/icon-button.md +2 -2
  184. package/src/components/ui/list.md +35 -2
  185. package/src/components/ui/material.md +51 -0
  186. package/src/components/ui/navigation-button-group.md +46 -0
  187. package/src/components/ui/popover.md +31 -0
  188. package/src/components/ui/scroll-area.md +11 -7
  189. package/src/components/ui/search-field.md +1 -1
  190. package/src/components/ui/segmented-control.md +2 -5
  191. package/src/components/ui/sheet.md +30 -0
  192. package/src/components/ui/table.md +4 -2
  193. package/src/components/ui/toggle-button.md +48 -0
  194. package/src/components/ui/toolbar.md +5 -0
  195. package/src/components/ui/tooltip.md +31 -0
  196. package/src/styles/index.css +213 -0
@@ -1,10 +1,26 @@
1
1
  import * as React from 'react';
2
+ import { type IconButtonProps } from './icon-button';
2
3
  import { type VariantProps } from 'class-variance-authority';
3
4
  declare const alertVariants: (props?: ({
4
- variant?: "default" | "destructive" | null | undefined;
5
+ tone?: "neutral" | "info" | "success" | "warning" | "danger" | null | undefined;
6
+ density?: "compact" | "default" | null | undefined;
5
7
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
- declare function Alert({ className, variant, ...props }: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>): import("react/jsx-runtime").JSX.Element;
8
+ type AlertTone = NonNullable<VariantProps<typeof alertVariants>['tone']>;
9
+ type AlertDensity = NonNullable<VariantProps<typeof alertVariants>['density']>;
10
+ interface AlertProps extends Omit<React.ComponentProps<'div'>, 'role'>, VariantProps<typeof alertVariants> {
11
+ /**
12
+ * Compatibility alias. Prefer `tone`; `destructive` maps to `danger`.
13
+ */
14
+ variant?: 'default' | 'destructive';
15
+ role?: React.AriaRole;
16
+ }
17
+ declare function Alert({ className, density, role, tone, variant, ...props }: AlertProps): import("react/jsx-runtime").JSX.Element;
7
18
  declare function AlertTitle({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
8
19
  declare function AlertDescription({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
9
- export { Alert, AlertTitle, AlertDescription };
20
+ declare function AlertActions({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
21
+ interface AlertDismissProps extends Omit<IconButtonProps, 'children' | 'label' | 'loading' | 'shape' | 'size'> {
22
+ label: string;
23
+ }
24
+ declare function AlertDismiss({ className, label, ...props }: AlertDismissProps): import("react/jsx-runtime").JSX.Element;
25
+ export { Alert, AlertActions, AlertDescription, AlertDismiss, AlertTitle, alertVariants, type AlertDensity, type AlertDismissProps, type AlertProps, type AlertTone, };
10
26
  //# sourceMappingURL=alert.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../../src/components/ui/alert.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,KAAK,YAAY,EAAO,MAAM,0BAA0B,CAAA;AAEjE,QAAA,MAAM,aAAa;;8EAclB,CAAA;AAED,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,OAAO,EACP,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,2CASlE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWvE;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAW7B;AAED,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAA"}
1
+ {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../../src/components/ui/alert.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAE,KAAK,YAAY,EAAO,MAAM,0BAA0B,CAAA;AAEjE,QAAA,MAAM,aAAa;;;8EAwBlB,CAAA;AAED,KAAK,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AACxE,KAAK,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;AAE9E,UAAU,UACR,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,EAC/C,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,CAAA;IACnC,IAAI,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAA;CACtB;AAED,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,OAAmB,EACnB,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,GAAG,KAAK,EACT,EAAE,UAAU,2CAcZ;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWvE;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAW7B;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWzE;AAED,UAAU,iBACR,SAAQ,IAAI,CACV,eAAe,EACf,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CACpD;IACD,KAAK,EAAE,MAAM,CAAA;CACd;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,2CActE;AAED,OAAO,EACL,KAAK,EACL,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,SAAS,GACf,CAAA"}
@@ -1,20 +1,31 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { XIcon } from 'lucide-react';
3
4
  import { cn } from '../../lib/utils';
5
+ import { IconButton } from './icon-button';
4
6
  import { cva } from 'class-variance-authority';
5
- const alertVariants = cva('relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current', {
7
+ const alertVariants = cva('relative grid w-full items-start rounded-container border text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 has-[>[data-slot=alert-dismiss]]:pr-10 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current', {
6
8
  variants: {
7
- variant: {
8
- default: 'bg-card text-card-foreground',
9
- destructive: 'text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90',
9
+ tone: {
10
+ neutral: 'border-border bg-card text-card-foreground',
11
+ info: 'border-ring/35 bg-ring/8 text-foreground [&>svg]:text-ring',
12
+ success: 'border-success/35 bg-success/10 text-foreground [&>svg]:text-success',
13
+ warning: 'border-warning/40 bg-warning/12 text-foreground [&>svg]:text-warning',
14
+ danger: 'border-destructive/35 bg-destructive/8 text-destructive [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90',
15
+ },
16
+ density: {
17
+ compact: 'gap-y-0 px-3 py-2 text-xs',
18
+ default: 'gap-y-0.5 px-4 py-3 text-sm',
10
19
  },
11
20
  },
12
21
  defaultVariants: {
13
- variant: 'default',
22
+ tone: 'neutral',
23
+ density: 'default',
14
24
  },
15
25
  });
16
- function Alert({ className, variant, ...props }) {
17
- return (_jsx("div", { "data-slot": "alert", role: "alert", className: cn(alertVariants({ variant }), className), ...props }));
26
+ function Alert({ className, density = 'default', role, tone, variant, ...props }) {
27
+ const resolvedTone = tone ?? (variant === 'destructive' ? 'danger' : 'neutral');
28
+ return (_jsx("div", { "data-slot": "alert", "data-tone": resolvedTone, "data-density": density, role: role ?? (resolvedTone === 'danger' ? 'alert' : 'status'), className: cn(alertVariants({ tone: resolvedTone, density }), className), ...props }));
18
29
  }
19
30
  function AlertTitle({ className, ...props }) {
20
31
  return (_jsx("div", { "data-slot": "alert-title", className: cn('col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight', className), ...props }));
@@ -22,4 +33,10 @@ function AlertTitle({ className, ...props }) {
22
33
  function AlertDescription({ className, ...props }) {
23
34
  return (_jsx("div", { "data-slot": "alert-description", className: cn('text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed', className), ...props }));
24
35
  }
25
- export { Alert, AlertTitle, AlertDescription };
36
+ function AlertActions({ className, ...props }) {
37
+ return (_jsx("div", { "data-slot": "alert-actions", className: cn('col-start-2 mt-2 flex flex-wrap items-center gap-1.5', className), ...props }));
38
+ }
39
+ function AlertDismiss({ className, label, ...props }) {
40
+ return (_jsx(IconButton, { "data-slot": "alert-dismiss", label: label, tooltip: true, variant: "ghost", size: "xs", className: cn('absolute right-2 top-2', className), ...props, children: _jsx(XIcon, {}) }));
41
+ }
42
+ export { Alert, AlertActions, AlertDescription, AlertDismiss, AlertTitle, alertVariants, };
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import type { MaterialVariant } from './material';
2
3
  export type AppFrameMode = 'auto' | 'embedded' | 'window';
3
4
  declare function resolveAppFrameMode(mode: AppFrameMode): Exclude<AppFrameMode, 'auto'>;
4
5
  export interface AppFrameProps extends React.ComponentProps<'div'> {
@@ -9,14 +10,19 @@ export interface AppFrameProps extends React.ComponentProps<'div'> {
9
10
  mode?: AppFrameMode;
10
11
  }
11
12
  declare function AppFrame({ mode, className, style, ...props }: AppFrameProps): import("react/jsx-runtime").JSX.Element;
12
- export type AppFrameTitlebarProps = React.ComponentPropsWithoutRef<'header'>;
13
- declare function AppFrameTitlebar({ className, style, ...props }: AppFrameTitlebarProps): import("react/jsx-runtime").JSX.Element;
13
+ export interface AppFrameTitlebarProps extends React.ComponentPropsWithoutRef<'header'> {
14
+ material?: MaterialVariant | 'none';
15
+ }
16
+ declare function AppFrameTitlebar({ className, material, onDoubleClick, onPointerDown, style, ...props }: AppFrameTitlebarProps): import("react/jsx-runtime").JSX.Element;
14
17
  declare function AppFrameToolbar({ className, ...props }: React.ComponentPropsWithoutRef<'div'>): import("react/jsx-runtime").JSX.Element;
15
18
  export interface AppFrameContentProps extends React.ComponentPropsWithoutRef<'main'> {
16
19
  scrollable?: boolean;
17
20
  chatSafe?: boolean;
18
21
  }
19
22
  declare function AppFrameContent({ scrollable, chatSafe, className, style, ...props }: AppFrameContentProps): import("react/jsx-runtime").JSX.Element;
20
- declare function AppFrameStatusbar({ className, style, ...props }: React.ComponentPropsWithoutRef<'footer'>): import("react/jsx-runtime").JSX.Element;
23
+ export interface AppFrameStatusbarProps extends React.ComponentPropsWithoutRef<'footer'> {
24
+ material?: MaterialVariant | 'none';
25
+ }
26
+ declare function AppFrameStatusbar({ className, material, style, ...props }: AppFrameStatusbarProps): import("react/jsx-runtime").JSX.Element;
21
27
  export { AppFrame, AppFrameContent, AppFrameStatusbar, AppFrameTitlebar, AppFrameToolbar, resolveAppFrameMode, };
22
28
  //# sourceMappingURL=app-frame.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-frame.d.ts","sourceRoot":"","sources":["../../../src/components/ui/app-frame.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAA;AAEzD,iBAAS,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAM9E;AAED,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;IAChE;;;OAGG;IACH,IAAI,CAAC,EAAE,YAAY,CAAA;CACpB;AAED,iBAAS,QAAQ,CAAC,EAChB,IAAa,EACb,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,aAAa,2CA+Bf;AAED,MAAM,MAAM,qBAAqB,GAAG,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAA;AAE5E,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,qBAAqB,2CAoBvB;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,2CAWvC;AAED,MAAM,WAAW,oBACf,SAAQ,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC;IAC9C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,iBAAS,eAAe,CAAC,EACvB,UAAiB,EACjB,QAAe,EACf,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,oBAAoB,2CAoBtB;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC,2CAgB1C;AAED,OAAO,EACL,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,CAAA"}
1
+ {"version":3,"file":"app-frame.d.ts","sourceRoot":"","sources":["../../../src/components/ui/app-frame.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAA;AAEzD,iBAAS,mBAAmB,CAC1B,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAM/B;AAED,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;IAChE;;;OAGG;IACH,IAAI,CAAC,EAAE,YAAY,CAAA;CACpB;AAED,iBAAS,QAAQ,CAAC,EAChB,IAAa,EACb,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,aAAa,2CA+Bf;AAED,MAAM,WAAW,qBACf,SAAQ,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC;IAChD,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,CAAA;CACpC;AAiCD,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAoB,EACpB,aAAa,EACb,aAAa,EACb,KAAK,EACL,GAAG,KAAK,EACT,EAAE,qBAAqB,2CA4CvB;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,2CAWvC;AAED,MAAM,WAAW,oBACf,SAAQ,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC;IAC9C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,iBAAS,eAAe,CAAC,EACvB,UAAiB,EACjB,QAAe,EACf,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,oBAAoB,2CAoBtB;AAED,MAAM,WAAW,sBACf,SAAQ,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC;IAChD,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,CAAA;CACpC;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,QAAoB,EACpB,KAAK,EACL,GAAG,KAAK,EACT,EAAE,sBAAsB,2CAmBxB;AAED,OAAO,EACL,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,CAAA"}
@@ -22,18 +22,57 @@ function AppFrame({ mode = 'auto', className, style, ...props }) {
22
22
  window.addEventListener('moldable:host-context-change', updateMode);
23
23
  return () => window.removeEventListener('moldable:host-context-change', updateMode);
24
24
  }, [mode]);
25
- return (_jsx("div", { "data-slot": "app-frame", "data-mode": resolvedMode, className: cn('bg-[var(--surface-canvas,var(--background))] text-foreground flex h-dvh min-h-0 min-w-0 flex-col overflow-hidden', className), style: {
25
+ return (_jsx("div", { "data-slot": "app-frame", "data-mode": resolvedMode, className: cn('text-foreground flex h-dvh min-h-0 min-w-0 flex-col overflow-hidden bg-[var(--surface-canvas,var(--background))]', className), style: {
26
26
  paddingInlineStart: 'var(--window-safe-area-inline-start, 0px)',
27
27
  paddingInlineEnd: 'var(--window-safe-area-inline-end, 0px)',
28
28
  ...style,
29
29
  }, ...props }));
30
30
  }
31
- function AppFrameTitlebar({ className, style, ...props }) {
32
- return (_jsx("header", { "data-slot": "app-frame-titlebar", className: cn('border-border/70 bg-[var(--surface-toolbar,var(--background))] flex shrink-0 items-center gap-2 border-b', className), style: {
33
- minHeight: 'max(var(--density-toolbar-height, 2.5rem), var(--window-drag-region-height, 0px))',
31
+ const WINDOW_TITLEBAR_INTERACTIVE_SELECTOR = [
32
+ 'a',
33
+ 'button',
34
+ 'input',
35
+ 'select',
36
+ 'textarea',
37
+ '[contenteditable]:not([contenteditable="false"])',
38
+ '[role="button"]',
39
+ '[role="link"]',
40
+ '[data-moldable-no-window-drag]',
41
+ ].join(',');
42
+ function isAppOwnedWindowTitlebar() {
43
+ return (document.documentElement.dataset.moldableDisplayMode === 'window' &&
44
+ document.documentElement.dataset.moldableWindowTitlebar === 'app');
45
+ }
46
+ function isInteractiveTitlebarTarget(target) {
47
+ return (target instanceof Element &&
48
+ target.closest(WINDOW_TITLEBAR_INTERACTIVE_SELECTOR) !== null);
49
+ }
50
+ function postWindowTitlebarMessage(type) {
51
+ if (!isAppOwnedWindowTitlebar())
52
+ return;
53
+ window.parent.postMessage({ type }, '*');
54
+ }
55
+ function AppFrameTitlebar({ className, material = 'regular', onDoubleClick, onPointerDown, style, ...props }) {
56
+ return (_jsx("header", { "data-slot": "app-frame-titlebar", "data-material": material === 'none' ? undefined : material, "data-material-elevation": material === 'none' ? undefined : 'none', className: cn('border-border/70 flex shrink-0 items-center gap-2 border-b', material !== 'none' && 'moldable-material', className), style: {
57
+ minHeight: 'max(var(--density-toolbar-height, 2.5rem), var(--window-titlebar-height, 0px))',
34
58
  paddingInlineStart: 'max(var(--density-pane-padding, 0.75rem), var(--window-control-inset-inline-start, 0px))',
35
59
  paddingInlineEnd: 'max(var(--density-pane-padding, 0.75rem), var(--window-control-inset-inline-end, 0px))',
36
60
  ...style,
61
+ }, onPointerDown: (event) => {
62
+ onPointerDown?.(event);
63
+ if (event.defaultPrevented ||
64
+ event.button !== 0 ||
65
+ isInteractiveTitlebarTarget(event.target)) {
66
+ return;
67
+ }
68
+ postWindowTitlebarMessage('startWindowDrag');
69
+ }, onDoubleClick: (event) => {
70
+ onDoubleClick?.(event);
71
+ if (event.defaultPrevented ||
72
+ isInteractiveTitlebarTarget(event.target)) {
73
+ return;
74
+ }
75
+ postWindowTitlebarMessage('titlebarDoubleClick');
37
76
  }, ...props }));
38
77
  }
39
78
  function AppFrameToolbar({ className, ...props }) {
@@ -47,8 +86,8 @@ function AppFrameContent({ scrollable = true, chatSafe = true, className, style,
47
86
  ...style,
48
87
  }, ...props }));
49
88
  }
50
- function AppFrameStatusbar({ className, style, ...props }) {
51
- return (_jsx("footer", { "data-slot": "app-frame-statusbar", className: cn('border-border/70 bg-[var(--surface-toolbar,var(--background))] flex min-h-7 shrink-0 items-center gap-2 border-t px-3 py-1 text-xs text-muted-foreground', className), style: {
89
+ function AppFrameStatusbar({ className, material = 'regular', style, ...props }) {
90
+ return (_jsx("footer", { "data-slot": "app-frame-statusbar", "data-material": material === 'none' ? undefined : material, "data-material-elevation": material === 'none' ? undefined : 'none', className: cn('border-border/70 text-muted-foreground flex min-h-7 shrink-0 items-center gap-2 border-t px-3 py-1 text-xs', material !== 'none' && 'moldable-material', className), style: {
52
91
  paddingBlockEnd: 'calc(var(--window-content-inset-bottom, 0px) + 0.25rem)',
53
92
  ...style,
54
93
  }, ...props }));
@@ -1,11 +1,13 @@
1
1
  import * as React from 'react';
2
2
  import { type VariantProps } from 'class-variance-authority';
3
3
  declare const buttonVariants: (props?: ({
4
- variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
5
- size?: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
4
+ variant?: "link" | "default" | "outline" | "destructive" | "secondary" | "ghost" | null | undefined;
5
+ size?: "default" | "sm" | "icon" | "xs" | "lg" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
6
6
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
- declare function Button({ className, variant, size, asChild, ...props }: React.ComponentProps<'button'> & VariantProps<typeof buttonVariants> & {
7
+ type ButtonProps = React.ComponentProps<'button'> & VariantProps<typeof buttonVariants> & {
8
8
  asChild?: boolean;
9
- }): import("react/jsx-runtime").JSX.Element;
9
+ loading?: boolean;
10
+ };
11
+ declare function Button({ 'aria-busy': ariaBusy, children, className, disabled, loading, onClick, onKeyDown, variant, size, asChild, ...props }: ButtonProps): import("react/jsx-runtime").JSX.Element;
10
12
  export { Button, buttonVariants };
11
13
  //# sourceMappingURL=button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,KAAK,YAAY,EAAO,MAAM,0BAA0B,CAAA;AAEjE,QAAA,MAAM,cAAc;;;8EAgCnB,CAAA;AAED,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAmB,EACnB,IAAgB,EAChB,OAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAC/B,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,2CAYF;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA"}
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAE,KAAK,YAAY,EAAO,MAAM,0BAA0B,CAAA;AAEjE,QAAA,MAAM,cAAc;;;8EAgCnB,CAAA;AAED,KAAK,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAC/C,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AA4CH,iBAAS,MAAM,CAAC,EACd,WAAW,EAAE,QAAQ,EACrB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,OAAe,EACf,OAAO,EACP,SAAS,EACT,OAAmB,EACnB,IAAgB,EAChB,OAAe,EACf,GAAG,KAAK,EACT,EAAE,WAAW,2CAqDb;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA"}
@@ -1,8 +1,10 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Slot } from '@radix-ui/react-slot';
3
+ import * as React from 'react';
3
4
  import { cn } from '../../lib/utils';
5
+ import { Spinner } from './spinner';
4
6
  import { cva } from 'class-variance-authority';
5
- const buttonVariants = cva("inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", {
7
+ const buttonVariants = cva("relative inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", {
6
8
  variants: {
7
9
  variant: {
8
10
  default: 'bg-primary text-primary-foreground hover:bg-primary/90',
@@ -13,10 +15,10 @@ const buttonVariants = cva("inline-flex cursor-pointer items-center justify-cent
13
15
  link: 'text-primary underline-offset-4 hover:underline',
14
16
  },
15
17
  size: {
16
- default: 'h-9 px-4 py-2 has-[>svg]:px-3',
17
- xs: "h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
18
- sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',
19
- lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',
18
+ default: 'h-9 px-4 py-2 has-[>[data-slot=button-content]>svg]:px-3',
19
+ xs: "h-6 gap-1 rounded-md px-2 text-xs has-[>[data-slot=button-content]>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
20
+ sm: 'h-8 rounded-md gap-1.5 px-3 has-[>[data-slot=button-content]>svg]:px-2.5',
21
+ lg: 'h-10 rounded-md px-6 has-[>[data-slot=button-content]>svg]:px-4',
20
22
  icon: 'size-9',
21
23
  'icon-xs': "size-6 rounded-md [&_svg:not([class*='size-'])]:size-3",
22
24
  'icon-sm': 'size-8',
@@ -28,8 +30,38 @@ const buttonVariants = cva("inline-flex cursor-pointer items-center justify-cent
28
30
  size: 'default',
29
31
  },
30
32
  });
31
- function Button({ className, variant = 'default', size = 'default', asChild = false, ...props }) {
33
+ function ButtonContent({ children, loading, }) {
34
+ return (_jsxs(_Fragment, { children: [_jsx("span", { "data-slot": "button-content", className: cn('inline-flex items-center justify-center [gap:inherit]', loading && 'opacity-0'), children: children }), loading ? (_jsx("span", { "data-slot": "button-loading-indicator", "aria-hidden": "true", className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: _jsx(Spinner, { "aria-hidden": "true" }) })) : null] }));
35
+ }
36
+ function blockLoadingInteraction(event) {
37
+ event.preventDefault();
38
+ event.stopPropagation();
39
+ }
40
+ function Button({ 'aria-busy': ariaBusy, children, className, disabled, loading = false, onClick, onKeyDown, variant = 'default', size = 'default', asChild = false, ...props }) {
32
41
  const Comp = asChild ? Slot : 'button';
33
- return (_jsx(Comp, { "data-slot": "button", "data-variant": variant, "data-size": size, className: cn(buttonVariants({ variant, size, className })), ...props }));
42
+ const buttonChildren = (_jsx(ButtonContent, { loading: loading, children: children }));
43
+ const renderedChildren = asChild && React.isValidElement(children)
44
+ ? React.cloneElement(React.Children.only(children), loading
45
+ ? {
46
+ onClick: blockLoadingInteraction,
47
+ onKeyDown: blockLoadingInteraction,
48
+ }
49
+ : undefined, _jsx(ButtonContent, { loading: loading, children: children.props.children }))
50
+ : buttonChildren;
51
+ const handleClick = (event) => {
52
+ if (loading) {
53
+ blockLoadingInteraction(event);
54
+ return;
55
+ }
56
+ onClick?.(event);
57
+ };
58
+ const handleKeyDown = (event) => {
59
+ if (loading) {
60
+ blockLoadingInteraction(event);
61
+ return;
62
+ }
63
+ onKeyDown?.(event);
64
+ };
65
+ return (_jsx(Comp, { "data-slot": "button", "data-variant": variant, "data-size": size, "data-loading": loading || undefined, "aria-busy": loading || ariaBusy || undefined, disabled: disabled || loading, className: cn(buttonVariants({ variant, size, className })), onClick: handleClick, onKeyDown: handleKeyDown, ...props, children: renderedChildren }));
34
66
  }
35
67
  export { Button, buttonVariants };
@@ -1,6 +1,14 @@
1
1
  import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
2
+ import * as React from 'react';
2
3
  declare function Collapsible({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.Root>): import("react/jsx-runtime").JSX.Element;
3
4
  declare function CollapsibleTrigger({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>): import("react/jsx-runtime").JSX.Element;
4
5
  declare function CollapsibleContent({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>): import("react/jsx-runtime").JSX.Element;
5
- export { Collapsible, CollapsibleTrigger, CollapsibleContent };
6
+ declare function CollapsibleSection({ className, ...props }: React.ComponentProps<typeof CollapsiblePrimitive.Root>): import("react/jsx-runtime").JSX.Element;
7
+ declare function CollapsibleSectionTrigger({ className, children, ...props }: React.ComponentProps<typeof CollapsiblePrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
8
+ interface CollapsibleSectionContentProps extends React.ComponentProps<typeof CollapsiblePrimitive.Content> {
9
+ motion?: 'default' | 'none';
10
+ contentClassName?: string;
11
+ }
12
+ declare function CollapsibleSectionContent({ className, contentClassName, children, motion, ...props }: CollapsibleSectionContentProps): import("react/jsx-runtime").JSX.Element;
13
+ export { Collapsible, CollapsibleContent, CollapsibleSection, CollapsibleSectionContent, CollapsibleSectionTrigger, CollapsibleTrigger, type CollapsibleSectionContentProps, };
6
14
  //# sourceMappingURL=collapsible.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"collapsible.d.ts","sourceRoot":"","sources":["../../../src/components/ui/collapsible.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,oBAAoB,MAAM,6BAA6B,CAAA;AAEnE,iBAAS,WAAW,CAAC,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,2CAExD;AAED,iBAAS,kBAAkB,CAAC,EAC1B,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,kBAAkB,CAAC,2CAOtE;AAED,iBAAS,kBAAkB,CAAC,EAC1B,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,kBAAkB,CAAC,2CAOtE;AAED,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAA"}
1
+ {"version":3,"file":"collapsible.d.ts","sourceRoot":"","sources":["../../../src/components/ui/collapsible.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,oBAAoB,MAAM,6BAA6B,CAAA;AAEnE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,iBAAS,WAAW,CAAC,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,2CAExD;AAED,iBAAS,kBAAkB,CAAC,EAC1B,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,kBAAkB,CAAC,2CAOtE;AAED,iBAAS,kBAAkB,CAAC,EAC1B,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,kBAAkB,CAAC,2CAOtE;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,2CAWxD;AAED,iBAAS,yBAAyB,CAAC,EACjC,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,OAAO,CAAC,2CAiB3D;AAED,UAAU,8BACR,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,OAAO,CAAC;IACjE,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,iBAAS,yBAAyB,CAAC,EACjC,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,MAAkB,EAClB,GAAG,KAAK,EACT,EAAE,8BAA8B,2CAsBhC;AAED,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,KAAK,8BAA8B,GACpC,CAAA"}
@@ -1,6 +1,8 @@
1
1
  'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
4
+ import { ChevronRightIcon } from 'lucide-react';
5
+ import { cn } from '../../lib/utils';
4
6
  function Collapsible({ ...props }) {
5
7
  return _jsx(CollapsiblePrimitive.Root, { "data-slot": "collapsible", ...props });
6
8
  }
@@ -10,4 +12,13 @@ function CollapsibleTrigger({ ...props }) {
10
12
  function CollapsibleContent({ ...props }) {
11
13
  return (_jsx(CollapsiblePrimitive.CollapsibleContent, { "data-slot": "collapsible-content", ...props }));
12
14
  }
13
- export { Collapsible, CollapsibleTrigger, CollapsibleContent };
15
+ function CollapsibleSection({ className, ...props }) {
16
+ return (_jsx(CollapsiblePrimitive.Root, { "data-slot": "collapsible-section", className: cn('border-border/60 rounded-container overflow-hidden border', className), ...props }));
17
+ }
18
+ function CollapsibleSectionTrigger({ className, children, ...props }) {
19
+ return (_jsxs(CollapsiblePrimitive.Trigger, { "data-slot": "collapsible-section-trigger", className: cn('hover:bg-control-hover focus-visible:ring-ring/50 flex min-h-8 w-full cursor-pointer items-center gap-2 px-3 py-1.5 text-left text-sm font-medium outline-none transition-[background-color,color] focus-visible:ring-[3px] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 [&[data-state=open]>svg]:rotate-90', className), ...props, children: [_jsx(ChevronRightIcon, { "aria-hidden": "true", className: "text-muted-foreground duration-(--motion-duration-normal) ease-(--motion-ease-standard) size-3.5 shrink-0 transition-transform" }), _jsx("span", { className: "min-w-0 flex-1", children: children })] }));
20
+ }
21
+ function CollapsibleSectionContent({ className, contentClassName, children, motion = 'default', ...props }) {
22
+ return (_jsx(CollapsiblePrimitive.Content, { "data-slot": "collapsible-section-content", "data-motion": motion, className: cn('data-[state=closed]:animate-out data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:slide-out-to-top-1 data-[state=open]:slide-in-from-top-1 overflow-hidden text-sm data-[motion=none]:animate-none', className), ...props, children: _jsx("div", { "data-slot": "collapsible-section-content-inner", className: cn('border-border/60 border-t px-3 py-2.5', contentClassName), children: children }) }));
23
+ }
24
+ export { Collapsible, CollapsibleContent, CollapsibleSection, CollapsibleSectionContent, CollapsibleSectionTrigger, CollapsibleTrigger, };
@@ -0,0 +1,8 @@
1
+ type CollectionItem<Node extends HTMLElement = HTMLElement> = {
2
+ node: Node;
3
+ disabled: boolean;
4
+ };
5
+ declare function getCollectionItemsInDomOrder<Value, Node extends HTMLElement = HTMLElement>(items: ReadonlyMap<Value, CollectionItem<Node>>): [Value, CollectionItem<Node>][];
6
+ declare function isInteractiveDescendant(target: EventTarget | null, currentTarget: HTMLElement): boolean;
7
+ export { getCollectionItemsInDomOrder, isInteractiveDescendant, type CollectionItem, };
8
+ //# sourceMappingURL=collection-navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection-navigation.d.ts","sourceRoot":"","sources":["../../../src/components/ui/collection-navigation.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,CAAC,IAAI,SAAS,WAAW,GAAG,WAAW,IAAI;IAC5D,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAWD,iBAAS,4BAA4B,CACnC,KAAK,EACL,IAAI,SAAS,WAAW,GAAG,WAAW,EACtC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,mCAIhD;AAED,iBAAS,uBAAuB,CAC9B,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,aAAa,EAAE,WAAW,WAS3B;AAED,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,KAAK,cAAc,GACpB,CAAA"}
@@ -0,0 +1,19 @@
1
+ function compareNodesInDocumentOrder(left, right) {
2
+ if (left === right)
3
+ return 0;
4
+ const position = left.compareDocumentPosition(right);
5
+ if (position & Node.DOCUMENT_POSITION_FOLLOWING)
6
+ return -1;
7
+ if (position & Node.DOCUMENT_POSITION_PRECEDING)
8
+ return 1;
9
+ return 0;
10
+ }
11
+ function getCollectionItemsInDomOrder(items) {
12
+ return [...items.entries()].sort(([, left], [, right]) => compareNodesInDocumentOrder(left.node, right.node));
13
+ }
14
+ function isInteractiveDescendant(target, currentTarget) {
15
+ if (!(target instanceof HTMLElement) || target === currentTarget)
16
+ return false;
17
+ return Boolean(target.closest('a,button,input,select,textarea,[contenteditable="true"],[role="button"],[role="link"]'));
18
+ }
19
+ export { getCollectionItemsInDomOrder, isInteractiveDescendant, };
@@ -15,6 +15,10 @@ declare function CommandEmpty({ ...props }: React.ComponentProps<typeof CommandP
15
15
  declare function CommandGroup({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Group>): import("react/jsx-runtime").JSX.Element;
16
16
  declare function CommandSeparator({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Separator>): import("react/jsx-runtime").JSX.Element;
17
17
  declare function CommandItem({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Item>): import("react/jsx-runtime").JSX.Element;
18
+ declare function CommandItemIcon({ className, 'aria-hidden': ariaHidden, ...props }: React.ComponentProps<'span'>): import("react/jsx-runtime").JSX.Element;
19
+ declare function CommandItemContent({ className, ...props }: React.ComponentProps<'span'>): import("react/jsx-runtime").JSX.Element;
20
+ declare function CommandItemTitle({ className, ...props }: React.ComponentProps<'span'>): import("react/jsx-runtime").JSX.Element;
21
+ declare function CommandItemDescription({ className, ...props }: React.ComponentProps<'span'>): import("react/jsx-runtime").JSX.Element;
18
22
  declare function CommandShortcut({ className, ...props }: React.ComponentProps<'span'>): import("react/jsx-runtime").JSX.Element;
19
- export { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator, };
23
+ export { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandItemContent, CommandItemDescription, CommandItemIcon, CommandItemTitle, CommandShortcut, CommandSeparator, };
20
24
  //# sourceMappingURL=command.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/components/ui/command.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EACL,MAAM,EAKP,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,MAAM,CAAA;AAElD,iBAAS,OAAO,CAAC,EACf,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,2CAW/C;AAED,iBAAS,aAAa,CAAC,EACrB,KAAyB,EACzB,WAA8C,EAC9C,QAAQ,EACR,SAAS,EACT,eAAsB,EACtB,MAAM,EACN,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,GAAG;IACvC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,MAAM,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAA;CACjE,2CAoBA;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,2CAiBrD;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,2CAWpD;AAED,iBAAS,YAAY,CAAC,EACpB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,2CAQrD;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,2CAWrD;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,SAAS,CAAC,2CAQzD;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,2CAWpD;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,2CAW9B;AAED,OAAO,EACL,OAAO,EACP,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,gBAAgB,GACjB,CAAA"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/components/ui/command.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EACL,MAAM,EAKP,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,MAAM,CAAA;AAElD,iBAAS,OAAO,CAAC,EACf,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,2CAW/C;AAED,iBAAS,aAAa,CAAC,EACrB,KAAyB,EACzB,WAA8C,EAC9C,QAAQ,EACR,SAAS,EACT,eAAsB,EACtB,MAAM,EACN,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,GAAG;IACvC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,MAAM,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAA;CACjE,2CAoBA;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,2CAiBrD;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,2CAWpD;AAED,iBAAS,YAAY,CAAC,EACpB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,2CAQrD;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,2CAWrD;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,SAAS,CAAC,2CAQzD;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,2CAWpD;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,aAAa,EAAE,UAAiB,EAChC,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,2CAY9B;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,2CAQ9B;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,2CAQ9B;AAED,iBAAS,sBAAsB,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,2CAQ9B;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,2CAW9B;AAED,OAAO,EACL,OAAO,EACP,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,CAAA"}
@@ -28,7 +28,19 @@ function CommandSeparator({ className, ...props }) {
28
28
  function CommandItem({ className, ...props }) {
29
29
  return (_jsx(CommandPrimitive.Item, { "data-slot": "command-item", className: cn("data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), ...props }));
30
30
  }
31
+ function CommandItemIcon({ className, 'aria-hidden': ariaHidden = true, ...props }) {
32
+ return (_jsx("span", { "data-slot": "command-item-icon", "aria-hidden": ariaHidden, className: cn("flex size-5 shrink-0 items-center justify-center [&_img]:size-4 [&_img]:object-contain [&_svg:not([class*='size-'])]:size-4", className), ...props }));
33
+ }
34
+ function CommandItemContent({ className, ...props }) {
35
+ return (_jsx("span", { "data-slot": "command-item-content", className: cn('flex min-w-0 flex-1 flex-col', className), ...props }));
36
+ }
37
+ function CommandItemTitle({ className, ...props }) {
38
+ return (_jsx("span", { "data-slot": "command-item-title", className: cn('flex min-w-0 items-center gap-2 truncate', className), ...props }));
39
+ }
40
+ function CommandItemDescription({ className, ...props }) {
41
+ return (_jsx("span", { "data-slot": "command-item-description", className: cn('text-muted-foreground truncate text-xs', className), ...props }));
42
+ }
31
43
  function CommandShortcut({ className, ...props }) {
32
44
  return (_jsx("span", { "data-slot": "command-shortcut", className: cn('text-muted-foreground ml-auto text-xs tracking-widest', className), ...props }));
33
45
  }
34
- export { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator, };
46
+ export { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandItemContent, CommandItemDescription, CommandItemIcon, CommandItemTitle, CommandShortcut, CommandSeparator, };
@@ -0,0 +1,19 @@
1
+ import * as React from 'react';
2
+ import { AlertDialog } from './alert-dialog';
3
+ interface ConfirmDialogProps extends Omit<React.ComponentProps<typeof AlertDialog>, 'children' | 'onOpenChange'> {
4
+ title: React.ReactNode;
5
+ description: React.ReactNode;
6
+ trigger?: React.ReactElement;
7
+ confirmLabel?: React.ReactNode;
8
+ pendingLabel?: React.ReactNode;
9
+ cancelLabel?: React.ReactNode;
10
+ variant?: 'default' | 'destructive';
11
+ size?: 'sm' | 'default' | 'lg';
12
+ onOpenChange?: (open: boolean) => void;
13
+ onConfirm: () => void | Promise<void>;
14
+ onConfirmError?: (error: unknown) => void;
15
+ getErrorMessage?: (error: unknown) => React.ReactNode;
16
+ }
17
+ declare function ConfirmDialog({ cancelLabel, confirmLabel, defaultOpen, description, getErrorMessage, onConfirm, onConfirmError, onOpenChange, open, pendingLabel, size, title, trigger, variant, ...props }: ConfirmDialogProps): import("react/jsx-runtime").JSX.Element;
18
+ export { ConfirmDialog, type ConfirmDialogProps };
19
+ //# sourceMappingURL=confirm-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm-dialog.d.ts","sourceRoot":"","sources":["../../../src/components/ui/confirm-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EACL,WAAW,EASZ,MAAM,gBAAgB,CAAA;AAEvB,UAAU,kBACR,SAAQ,IAAI,CACV,KAAK,CAAC,cAAc,CAAC,OAAO,WAAW,CAAC,EACxC,UAAU,GAAG,cAAc,CAC5B;IACD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,WAAW,EAAE,KAAK,CAAC,SAAS,CAAA;IAC5B,OAAO,CAAC,EAAE,KAAK,CAAC,YAAY,CAAA;IAC5B,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC9B,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC9B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,CAAA;IACnC,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,CAAA;IAC9B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,SAAS,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACzC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,CAAC,SAAS,CAAA;CACtD;AAED,iBAAS,aAAa,CAAC,EACrB,WAAsB,EACtB,YAAwB,EACxB,WAAmB,EACnB,WAAW,EACX,eAAe,EACf,SAAS,EACT,cAAc,EACd,YAAY,EACZ,IAAI,EACJ,YAAyB,EACzB,IAAgB,EAChB,KAAK,EACL,OAAO,EACP,OAAmB,EACnB,GAAG,KAAK,EACT,EAAE,kBAAkB,2CAiFpB;AAED,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,CAAA"}
@@ -0,0 +1,45 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from './alert-dialog';
5
+ function ConfirmDialog({ cancelLabel = 'Cancel', confirmLabel = 'Confirm', defaultOpen = false, description, getErrorMessage, onConfirm, onConfirmError, onOpenChange, open, pendingLabel = 'Working…', size = 'default', title, trigger, variant = 'default', ...props }) {
6
+ const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);
7
+ const [pending, setPending] = React.useState(false);
8
+ const [error, setError] = React.useState(null);
9
+ const pendingRef = React.useRef(false);
10
+ const resolvedOpen = open ?? uncontrolledOpen;
11
+ const updateOpen = React.useCallback((nextOpen) => {
12
+ if (pendingRef.current && !nextOpen)
13
+ return;
14
+ if (open === undefined)
15
+ setUncontrolledOpen(nextOpen);
16
+ if (nextOpen)
17
+ setError(null);
18
+ onOpenChange?.(nextOpen);
19
+ }, [onOpenChange, open]);
20
+ const handleConfirm = React.useCallback(async (event) => {
21
+ event.preventDefault();
22
+ if (pendingRef.current)
23
+ return;
24
+ pendingRef.current = true;
25
+ setPending(true);
26
+ setError(null);
27
+ try {
28
+ await onConfirm();
29
+ pendingRef.current = false;
30
+ setPending(false);
31
+ if (open === undefined)
32
+ setUncontrolledOpen(false);
33
+ onOpenChange?.(false);
34
+ }
35
+ catch (confirmError) {
36
+ pendingRef.current = false;
37
+ setPending(false);
38
+ setError(getErrorMessage?.(confirmError) ??
39
+ 'Could not complete the action. Please try again.');
40
+ onConfirmError?.(confirmError);
41
+ }
42
+ }, [getErrorMessage, onConfirm, onConfirmError, onOpenChange, open]);
43
+ return (_jsxs(AlertDialog, { open: resolvedOpen, onOpenChange: updateOpen, ...props, children: [trigger ? (_jsx(AlertDialogTrigger, { asChild: true, children: trigger })) : null, _jsxs(AlertDialogContent, { size: size, children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: title }), _jsx(AlertDialogDescription, { children: description })] }), error ? (_jsx("p", { "data-slot": "confirm-dialog-error", role: "alert", className: "text-destructive text-sm", children: error })) : null, _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { disabled: pending, children: cancelLabel }), _jsx(AlertDialogAction, { primary: true, variant: variant, pending: pending, pendingLabel: pendingLabel, onClick: handleConfirm, children: confirmLabel })] })] })] }));
44
+ }
45
+ export { ConfirmDialog };
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+ import { Button } from './button';
3
+ import { Calendar } from './calendar';
4
+ type DatePickerDensity = 'compact' | 'default' | 'comfortable';
5
+ interface DatePickerProps extends Omit<React.ComponentProps<typeof Button>, 'children' | 'defaultValue' | 'size' | 'value'> {
6
+ /** ISO calendar date in YYYY-MM-DD form. No timezone conversion is applied. */
7
+ value?: string;
8
+ defaultValue?: string;
9
+ onValueChange?: (value: string) => void;
10
+ min?: string;
11
+ max?: string;
12
+ placeholder?: string;
13
+ locale?: React.ComponentProps<typeof Calendar>['locale'];
14
+ formatValue?: (value: string) => React.ReactNode;
15
+ clearable?: boolean;
16
+ clearLabel?: string;
17
+ density?: DatePickerDensity;
18
+ open?: boolean;
19
+ defaultOpen?: boolean;
20
+ onOpenChange?: (open: boolean) => void;
21
+ }
22
+ declare function DatePicker({ className, value, defaultValue, onValueChange, min, max, placeholder, locale, formatValue, clearable, clearLabel, density, open, defaultOpen, onOpenChange, disabled, variant, 'aria-invalid': ariaInvalid, ...buttonProps }: DatePickerProps): import("react/jsx-runtime").JSX.Element;
23
+ export { DatePicker, type DatePickerDensity, type DatePickerProps };
24
+ //# sourceMappingURL=date-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../../../src/components/ui/date-picker.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAGrC,KAAK,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAA;AAE9D,UAAU,eACR,SAAQ,IAAI,CACV,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EACnC,UAAU,GAAG,cAAc,GAAG,MAAM,GAAG,OAAO,CAC/C;IACD,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAA;IACxD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;IAChD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,iBAAiB,CAAA;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CACvC;AAwCD,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,KAAK,EACL,YAAiB,EACjB,aAAa,EACb,GAAG,EACH,GAAG,EACH,WAA2B,EAC3B,MAAM,EACN,WAAW,EACX,SAAiB,EACjB,UAAyB,EACzB,OAAmB,EACnB,IAAI,EACJ,WAAmB,EACnB,YAAY,EACZ,QAAQ,EACR,OAAmB,EACnB,cAAc,EAAE,WAAW,EAC3B,GAAG,WAAW,EACf,EAAE,eAAe,2CA2GjB;AAED,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,KAAK,eAAe,EAAE,CAAA"}