@hoardodile/ui 0.1.7 → 0.1.9

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 (260) hide show
  1. package/dist/chunk-2BVZEYNW.js +97 -0
  2. package/dist/chunk-2BVZEYNW.js.map +1 -0
  3. package/dist/chunk-2DTR6CD5.js +47 -0
  4. package/dist/chunk-2DTR6CD5.js.map +1 -0
  5. package/dist/chunk-2HWSCY4T.js +20 -0
  6. package/dist/chunk-2HWSCY4T.js.map +1 -0
  7. package/dist/chunk-363CCKQ7.js +75 -0
  8. package/dist/chunk-363CCKQ7.js.map +1 -0
  9. package/dist/chunk-3ZQJWBVB.js +30 -0
  10. package/dist/chunk-3ZQJWBVB.js.map +1 -0
  11. package/dist/chunk-4D36OO5W.js +277 -0
  12. package/dist/chunk-4D36OO5W.js.map +1 -0
  13. package/dist/chunk-4UITFLIN.js +31 -0
  14. package/dist/chunk-4UITFLIN.js.map +1 -0
  15. package/dist/chunk-6HAIUXNZ.js +11 -0
  16. package/dist/chunk-6HAIUXNZ.js.map +1 -0
  17. package/dist/chunk-7JMMFY67.js +62 -0
  18. package/dist/chunk-7JMMFY67.js.map +1 -0
  19. package/dist/chunk-7MWWHI6T.js +1149 -0
  20. package/dist/chunk-7MWWHI6T.js.map +1 -0
  21. package/dist/chunk-AEHTAUAQ.js +65 -0
  22. package/dist/chunk-AEHTAUAQ.js.map +1 -0
  23. package/dist/chunk-ASRGQ5BD.js +130 -0
  24. package/dist/chunk-ASRGQ5BD.js.map +1 -0
  25. package/dist/chunk-BFGOE5AI.js +187 -0
  26. package/dist/chunk-BFGOE5AI.js.map +1 -0
  27. package/dist/chunk-BRT25IDQ.js +46 -0
  28. package/dist/chunk-BRT25IDQ.js.map +1 -0
  29. package/dist/chunk-BU5DQOPM.js +29 -0
  30. package/dist/chunk-BU5DQOPM.js.map +1 -0
  31. package/dist/chunk-BWASOT5X.js +266 -0
  32. package/dist/chunk-BWASOT5X.js.map +1 -0
  33. package/dist/chunk-F32V4Z7Q.js +26 -0
  34. package/dist/chunk-F32V4Z7Q.js.map +1 -0
  35. package/dist/chunk-F7RHDRRJ.js +24 -0
  36. package/dist/chunk-F7RHDRRJ.js.map +1 -0
  37. package/dist/chunk-FH5RNCFR.js +21 -0
  38. package/dist/chunk-FH5RNCFR.js.map +1 -0
  39. package/dist/chunk-GKSX5ULZ.js +513 -0
  40. package/dist/chunk-GKSX5ULZ.js.map +1 -0
  41. package/dist/chunk-JPFDNRCA.js +26 -0
  42. package/dist/chunk-JPFDNRCA.js.map +1 -0
  43. package/dist/chunk-KNPRUZ4H.js +13 -0
  44. package/dist/chunk-KNPRUZ4H.js.map +1 -0
  45. package/dist/chunk-KOFWEPPB.js +254 -0
  46. package/dist/chunk-KOFWEPPB.js.map +1 -0
  47. package/dist/chunk-M5OJN54O.js +10 -0
  48. package/dist/chunk-M5OJN54O.js.map +1 -0
  49. package/dist/chunk-OEVALKQ5.js +51 -0
  50. package/dist/chunk-OEVALKQ5.js.map +1 -0
  51. package/dist/chunk-OW5FWLPH.js +33 -0
  52. package/dist/chunk-OW5FWLPH.js.map +1 -0
  53. package/dist/chunk-POX7TXBH.js +41 -0
  54. package/dist/chunk-POX7TXBH.js.map +1 -0
  55. package/dist/chunk-PWJBHUM2.js +58 -0
  56. package/dist/chunk-PWJBHUM2.js.map +1 -0
  57. package/dist/chunk-QGMDWGJT.js +23 -0
  58. package/dist/chunk-QGMDWGJT.js.map +1 -0
  59. package/dist/chunk-QGTQQNUL.js +36 -0
  60. package/dist/chunk-QGTQQNUL.js.map +1 -0
  61. package/dist/chunk-SAY52ZKI.js +152 -0
  62. package/dist/chunk-SAY52ZKI.js.map +1 -0
  63. package/dist/chunk-SKDPGSRL.js +166 -0
  64. package/dist/chunk-SKDPGSRL.js.map +1 -0
  65. package/dist/chunk-T56ARCUK.js +38 -0
  66. package/dist/chunk-T56ARCUK.js.map +1 -0
  67. package/dist/chunk-TDDHQZ62.js +227 -0
  68. package/dist/chunk-TDDHQZ62.js.map +1 -0
  69. package/dist/chunk-TMQ5OMBK.js +29 -0
  70. package/dist/chunk-TMQ5OMBK.js.map +1 -0
  71. package/dist/chunk-UEVND7AS.js +23 -0
  72. package/dist/chunk-UEVND7AS.js.map +1 -0
  73. package/dist/chunk-UPWHCG4S.js +40 -0
  74. package/dist/chunk-UPWHCG4S.js.map +1 -0
  75. package/dist/chunk-VWUNF7VX.js +3 -0
  76. package/dist/chunk-VWUNF7VX.js.map +1 -0
  77. package/dist/chunk-WI6O7GZK.js +45 -0
  78. package/dist/chunk-WI6O7GZK.js.map +1 -0
  79. package/dist/chunk-WVEK3WCX.js +21 -0
  80. package/dist/chunk-WVEK3WCX.js.map +1 -0
  81. package/dist/chunk-XBPQEZES.js +48 -0
  82. package/dist/chunk-XBPQEZES.js.map +1 -0
  83. package/dist/chunk-ZYAGKKR7.js +142 -0
  84. package/dist/chunk-ZYAGKKR7.js.map +1 -0
  85. package/dist/components/alert.js +2 -21
  86. package/dist/components/alert.js.map +1 -1
  87. package/dist/components/app-dialog.js +10 -654
  88. package/dist/components/app-dialog.js.map +1 -1
  89. package/dist/components/badge.js +2 -23
  90. package/dist/components/badge.js.map +1 -1
  91. package/dist/components/breadcrumb.js +5 -504
  92. package/dist/components/breadcrumb.js.map +1 -1
  93. package/dist/components/button.js +3 -76
  94. package/dist/components/button.js.map +1 -1
  95. package/dist/components/caption-bar.js +7 -521
  96. package/dist/components/caption-bar.js.map +1 -1
  97. package/dist/components/checkbox.js +4 -74
  98. package/dist/components/checkbox.js.map +1 -1
  99. package/dist/components/chip-button.js +4 -85
  100. package/dist/components/chip-button.js.map +1 -1
  101. package/dist/components/close-confirm-dialog.js +12 -662
  102. package/dist/components/close-confirm-dialog.js.map +1 -1
  103. package/dist/components/color-picker.js +7 -533
  104. package/dist/components/color-picker.js.map +1 -1
  105. package/dist/components/combobox.js +15 -937
  106. package/dist/components/combobox.js.map +1 -1
  107. package/dist/components/confirm-by-typing-dialog.js +12 -669
  108. package/dist/components/confirm-by-typing-dialog.js.map +1 -1
  109. package/dist/components/confirm-dialog.js +11 -637
  110. package/dist/components/confirm-dialog.js.map +1 -1
  111. package/dist/components/count-badge.js +2 -21
  112. package/dist/components/count-badge.js.map +1 -1
  113. package/dist/components/dialog.js +8 -569
  114. package/dist/components/dialog.js.map +1 -1
  115. package/dist/components/dropdown-menu.js +9 -1007
  116. package/dist/components/dropdown-menu.js.map +1 -1
  117. package/dist/components/dropdown-select.js +9 -883
  118. package/dist/components/dropdown-select.js.map +1 -1
  119. package/dist/components/empty.js +2 -21
  120. package/dist/components/empty.js.map +1 -1
  121. package/dist/components/filter-rail.js +7 -145
  122. package/dist/components/filter-rail.js.map +1 -1
  123. package/dist/components/fixed-action-bar.js +2 -21
  124. package/dist/components/fixed-action-bar.js.map +1 -1
  125. package/dist/components/font-picker.js +11 -589
  126. package/dist/components/font-picker.js.map +1 -1
  127. package/dist/components/form.js +9 -66
  128. package/dist/components/form.js.map +1 -1
  129. package/dist/components/icon-tile.js +3 -43
  130. package/dist/components/icon-tile.js.map +1 -1
  131. package/dist/components/icon-toggle.js +3 -43
  132. package/dist/components/icon-toggle.js.map +1 -1
  133. package/dist/components/icon.js +3 -47
  134. package/dist/components/icon.js.map +1 -1
  135. package/dist/components/image-crop-panel.js +19 -775
  136. package/dist/components/image-crop-panel.js.map +1 -1
  137. package/dist/components/image-cropper.js +1 -164
  138. package/dist/components/image-cropper.js.map +1 -1
  139. package/dist/components/input-group.js +6 -268
  140. package/dist/components/input-group.js.map +1 -1
  141. package/dist/components/input.js +3 -58
  142. package/dist/components/input.js.map +1 -1
  143. package/dist/components/label.js +3 -38
  144. package/dist/components/label.js.map +1 -1
  145. package/dist/components/list-empty-row.js +2 -21
  146. package/dist/components/list-empty-row.js.map +1 -1
  147. package/dist/components/management-empty.js +2 -21
  148. package/dist/components/management-empty.js.map +1 -1
  149. package/dist/components/management-skeleton.js +4 -59
  150. package/dist/components/management-skeleton.js.map +1 -1
  151. package/dist/components/meta-chip.js +2 -21
  152. package/dist/components/meta-chip.js.map +1 -1
  153. package/dist/components/mobile-drawer.js +7 -268
  154. package/dist/components/mobile-drawer.js.map +1 -1
  155. package/dist/components/page-header.js +3 -42
  156. package/dist/components/page-header.js.map +1 -1
  157. package/dist/components/page-scaffold.js +5 -76
  158. package/dist/components/page-scaffold.js.map +1 -1
  159. package/dist/components/pagination-bar.js +13 -617
  160. package/dist/components/pagination-bar.js.map +1 -1
  161. package/dist/components/pagination.js +6 -684
  162. package/dist/components/pagination.js.map +1 -1
  163. package/dist/components/panel-toolbar.js +11 -716
  164. package/dist/components/panel-toolbar.js.map +1 -1
  165. package/dist/components/pill-tabs.js +2 -21
  166. package/dist/components/pill-tabs.js.map +1 -1
  167. package/dist/components/plugin-download-consent.js +13 -663
  168. package/dist/components/plugin-download-consent.js.map +1 -1
  169. package/dist/components/popover.js +5 -242
  170. package/dist/components/popover.js.map +1 -1
  171. package/dist/components/preview-card.js +2 -21
  172. package/dist/components/preview-card.js.map +1 -1
  173. package/dist/components/progress.js +2 -20
  174. package/dist/components/progress.js.map +1 -1
  175. package/dist/components/radio-group.js +2 -21
  176. package/dist/components/radio-group.js.map +1 -1
  177. package/dist/components/scroll-area.js +2 -21
  178. package/dist/components/scroll-area.js.map +1 -1
  179. package/dist/components/search-field.js +6 -590
  180. package/dist/components/search-field.js.map +1 -1
  181. package/dist/components/secondary-stat.js +3 -40
  182. package/dist/components/secondary-stat.js.map +1 -1
  183. package/dist/components/section-header.js +3 -43
  184. package/dist/components/section-header.js.map +1 -1
  185. package/dist/components/section-label.js +3 -44
  186. package/dist/components/section-label.js.map +1 -1
  187. package/dist/components/section-tabs.js +2 -21
  188. package/dist/components/section-tabs.js.map +1 -1
  189. package/dist/components/separator.js +3 -47
  190. package/dist/components/separator.js.map +1 -1
  191. package/dist/components/sheet.js +8 -467
  192. package/dist/components/sheet.js.map +1 -1
  193. package/dist/components/sidebar.js +24 -1047
  194. package/dist/components/sidebar.js.map +1 -1
  195. package/dist/components/skeleton.js +3 -39
  196. package/dist/components/skeleton.js.map +1 -1
  197. package/dist/components/slider.js +2 -21
  198. package/dist/components/slider.js.map +1 -1
  199. package/dist/components/sortable-chip-list.js +2 -21
  200. package/dist/components/sortable-chip-list.js.map +1 -1
  201. package/dist/components/special-tag-surface.js +3 -531
  202. package/dist/components/special-tag-surface.js.map +1 -1
  203. package/dist/components/spinner.js +3 -63
  204. package/dist/components/spinner.js.map +1 -1
  205. package/dist/components/surface.js +3 -49
  206. package/dist/components/surface.js.map +1 -1
  207. package/dist/components/switch.js +3 -51
  208. package/dist/components/switch.js.map +1 -1
  209. package/dist/components/table.js +2 -20
  210. package/dist/components/table.js.map +1 -1
  211. package/dist/components/tag-chip.js +6 -617
  212. package/dist/components/tag-chip.js.map +1 -1
  213. package/dist/components/textarea.js +3 -56
  214. package/dist/components/textarea.js.map +1 -1
  215. package/dist/components/toast.js +8 -809
  216. package/dist/components/toast.js.map +1 -1
  217. package/dist/components/toggle.js +2 -20
  218. package/dist/components/toggle.js.map +1 -1
  219. package/dist/components/tooltip.js +3 -80
  220. package/dist/components/tooltip.js.map +1 -1
  221. package/dist/hooks/use-dialog-footer-actions.js +1 -9
  222. package/dist/hooks/use-dialog-footer-actions.js.map +1 -1
  223. package/dist/hooks/use-form-field.js +1 -34
  224. package/dist/hooks/use-form-field.js.map +1 -1
  225. package/dist/hooks/use-mobile.js +2 -27
  226. package/dist/hooks/use-mobile.js.map +1 -1
  227. package/dist/hooks/useMobileBackToClose.js +3 -232
  228. package/dist/hooks/useMobileBackToClose.js.map +1 -1
  229. package/dist/icons/actions.js +4 -524
  230. package/dist/icons/actions.js.map +1 -1
  231. package/dist/icons/icon-style.js +1 -49
  232. package/dist/icons/icon-style.js.map +1 -1
  233. package/dist/icons/marks.js +1 -46
  234. package/dist/icons/marks.js.map +1 -1
  235. package/dist/icons/registry.js +2 -1194
  236. package/dist/icons/registry.js.map +1 -1
  237. package/dist/index.js +10 -651
  238. package/dist/index.js.map +1 -1
  239. package/dist/lib/colors.js +1 -63
  240. package/dist/lib/colors.js.map +1 -1
  241. package/dist/lib/merge-config.js +1 -18
  242. package/dist/lib/merge-config.js.map +1 -1
  243. package/dist/lib/pagination.js +1 -24
  244. package/dist/lib/pagination.js.map +1 -1
  245. package/dist/lib/tag-surface.js +5 -613
  246. package/dist/lib/tag-surface.js.map +1 -1
  247. package/dist/lib/utils.js +2 -24
  248. package/dist/lib/utils.js.map +1 -1
  249. package/dist/res-card-template/format.js +1 -21
  250. package/dist/res-card-template/format.js.map +1 -1
  251. package/dist/res-card-template/icon.js +1 -39
  252. package/dist/res-card-template/icon.js.map +1 -1
  253. package/dist/res-card-template/index.js +3 -329
  254. package/dist/res-card-template/index.js.map +1 -1
  255. package/dist/res-card-template/template.js +3 -331
  256. package/dist/res-card-template/template.js.map +1 -1
  257. package/dist/viewport.js +1 -11
  258. package/dist/viewport.js.map +1 -1
  259. package/package.json +3 -3
  260. package/src/components/image-crop-panel.dist.test.tsx +54 -0
@@ -0,0 +1,187 @@
1
+ import { Spinner } from './chunk-WI6O7GZK.js';
2
+ import { Cross } from './chunk-XBPQEZES.js';
3
+ import { Button } from './chunk-PWJBHUM2.js';
4
+ import { CheckCircle, InfoCircle, DangerTriangle, ForbiddenCircle } from './chunk-7MWWHI6T.js';
5
+ import { cn } from './chunk-M5OJN54O.js';
6
+ import 'react';
7
+ import { Toast as Toast$1 } from '@base-ui/react/toast';
8
+ import { useTranslation } from 'react-i18next';
9
+ import { jsx, jsxs } from 'react/jsx-runtime';
10
+
11
+ var toast = Toast$1.createToastManager();
12
+ function ToastProvider({ ...props }) {
13
+ return /* @__PURE__ */ jsx(Toast$1.Provider, { ...props });
14
+ }
15
+ function ToastPortal({ ...props }) {
16
+ return /* @__PURE__ */ jsx(Toast$1.Portal, { "data-slot": "toast-portal", ...props });
17
+ }
18
+ function ToastViewport({ className, ...props }) {
19
+ return /* @__PURE__ */ jsx(
20
+ Toast$1.Viewport,
21
+ {
22
+ "data-slot": "toast-viewport",
23
+ className: cn(
24
+ "pointer-events-none fixed inset-x-4 bottom-4 z-50 mx-auto w-auto max-w-sm outline-none sm:right-4 sm:left-auto sm:mx-0 sm:w-full",
25
+ className
26
+ ),
27
+ ...props
28
+ }
29
+ );
30
+ }
31
+ function Toast({ className, ...props }) {
32
+ return /* @__PURE__ */ jsx(
33
+ Toast$1.Root,
34
+ {
35
+ "data-slot": "toast",
36
+ className: cn(
37
+ "group/toast pointer-events-auto absolute right-0 bottom-0 z-[calc(1000-var(--toast-index))] w-full origin-bottom rounded-2xl border bg-popover text-popover-foreground shadow-lg will-change-transform outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
38
+ "[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]",
39
+ "h-(--height) [transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms]",
40
+ "after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']",
41
+ "data-expanded:h-(--toast-height) data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]",
42
+ "data-limited:opacity-0 data-starting-style:[transform:translateY(150%)]",
43
+ "[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]",
44
+ "data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]",
45
+ "data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]",
46
+ "data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]",
47
+ "data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]",
48
+ "data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]",
49
+ "data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]",
50
+ "data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]",
51
+ "data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]",
52
+ className
53
+ ),
54
+ ...props
55
+ }
56
+ );
57
+ }
58
+ function ToastContent({ className, ...props }) {
59
+ return /* @__PURE__ */ jsx(
60
+ Toast$1.Content,
61
+ {
62
+ "data-slot": "toast-content",
63
+ className: cn(
64
+ "flex h-full items-center gap-3 overflow-hidden p-4 transition-opacity duration-250 ease-[cubic-bezier(0.22,1,0.36,1)] data-behind:opacity-0 data-expanded:opacity-100",
65
+ className
66
+ ),
67
+ ...props
68
+ }
69
+ );
70
+ }
71
+ function ToastTitle({ className, ...props }) {
72
+ return /* @__PURE__ */ jsx(
73
+ Toast$1.Title,
74
+ {
75
+ "data-slot": "toast-title",
76
+ className: cn("text-sm font-medium", className),
77
+ ...props
78
+ }
79
+ );
80
+ }
81
+ function ToastDescription({
82
+ className,
83
+ ...props
84
+ }) {
85
+ return /* @__PURE__ */ jsx(
86
+ Toast$1.Description,
87
+ {
88
+ "data-slot": "toast-description",
89
+ className: cn("text-sm text-muted-foreground", className),
90
+ ...props
91
+ }
92
+ );
93
+ }
94
+ function ToastAction({
95
+ className,
96
+ render = /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm" }),
97
+ ...props
98
+ }) {
99
+ return /* @__PURE__ */ jsx(
100
+ Toast$1.Action,
101
+ {
102
+ "data-slot": "toast-action",
103
+ render,
104
+ className: cn("shrink-0", className),
105
+ ...props
106
+ }
107
+ );
108
+ }
109
+ function ToastClose({
110
+ className,
111
+ children,
112
+ render = /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon-sm" }),
113
+ ...props
114
+ }) {
115
+ const { t } = useTranslation("ui", { useSuspense: false });
116
+ return /* @__PURE__ */ jsx(
117
+ Toast$1.Close,
118
+ {
119
+ "data-slot": "toast-close",
120
+ "aria-label": t("aria.closeToast"),
121
+ render,
122
+ className: cn(
123
+ "relative shrink-0 text-muted-foreground after:absolute after:-inset-2 after:content-[''] hover:text-foreground",
124
+ className
125
+ ),
126
+ ...props,
127
+ children: children ?? /* @__PURE__ */ jsx(Cross, { "aria-hidden": "true" })
128
+ }
129
+ );
130
+ }
131
+ function ToastIcon({ type }) {
132
+ let icon = null;
133
+ if (type === "success") {
134
+ icon = /* @__PURE__ */ jsx(CheckCircle, { className: "text-emerald-500", "aria-hidden": "true" });
135
+ }
136
+ if (type === "info") {
137
+ icon = /* @__PURE__ */ jsx(InfoCircle, { "aria-hidden": "true" });
138
+ }
139
+ if (type === "warning") {
140
+ icon = /* @__PURE__ */ jsx(DangerTriangle, { className: "text-amber-500", "aria-hidden": "true" });
141
+ }
142
+ if (type === "error") {
143
+ icon = /* @__PURE__ */ jsx(ForbiddenCircle, { className: "text-destructive", "aria-hidden": "true" });
144
+ }
145
+ if (type === "loading") {
146
+ icon = /* @__PURE__ */ jsx(Spinner, { className: "size-4", "aria-hidden": "true" });
147
+ }
148
+ if (!icon) {
149
+ return null;
150
+ }
151
+ return /* @__PURE__ */ jsx(
152
+ "span",
153
+ {
154
+ "data-slot": "toast-icon",
155
+ className: "shrink-0 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
156
+ children: icon
157
+ }
158
+ );
159
+ }
160
+ function ToastList() {
161
+ const { toasts } = Toast$1.useToastManager();
162
+ return toasts.map((toastItem) => /* @__PURE__ */ jsx(Toast, { toast: toastItem, children: /* @__PURE__ */ jsxs(ToastContent, { children: [
163
+ /* @__PURE__ */ jsx(ToastIcon, { type: toastItem.type }),
164
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
165
+ /* @__PURE__ */ jsx(ToastTitle, {}),
166
+ /* @__PURE__ */ jsx(ToastDescription, {})
167
+ ] }),
168
+ /* @__PURE__ */ jsx(ToastAction, {}),
169
+ /* @__PURE__ */ jsx(ToastClose, {})
170
+ ] }) }, toastItem.id));
171
+ }
172
+ function Toaster({
173
+ children,
174
+ toastManager = toast,
175
+ ...props
176
+ }) {
177
+ return /* @__PURE__ */ jsxs(ToastProvider, { toastManager, ...props, children: [
178
+ children,
179
+ /* @__PURE__ */ jsx(ToastPortal, { children: /* @__PURE__ */ jsx(ToastViewport, { children: /* @__PURE__ */ jsx(ToastList, {}) }) })
180
+ ] });
181
+ }
182
+ var createToastManager = Toast$1.createToastManager;
183
+ var useToastManager = Toast$1.useToastManager;
184
+
185
+ export { Toast, ToastAction, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastProvider, ToastTitle, ToastViewport, Toaster, createToastManager, toast, useToastManager };
186
+ //# sourceMappingURL=chunk-BFGOE5AI.js.map
187
+ //# sourceMappingURL=chunk-BFGOE5AI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/toast.tsx"],"names":["ToastPrimitive"],"mappings":"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","file":"chunk-BFGOE5AI.js","sourcesContent":["import { CheckCircle } from \"@hoardodile/ui/icons/registry\"\nimport { DangerTriangle } from \"@hoardodile/ui/icons/registry\"\nimport { ForbiddenCircle } from \"@hoardodile/ui/icons/registry\"\nimport { InfoCircle } from \"@hoardodile/ui/icons/registry\"\nimport * as React from \"react\"\nimport { Toast as ToastPrimitive } from \"@base-ui/react/toast\"\nimport { useTranslation } from \"react-i18next\"\n\nimport { cn } from \"@hoardodile/ui/lib/utils\"\nimport { Button } from \"@hoardodile/ui/components/button\"\nimport { Cross } from \"@hoardodile/ui/icons/marks\"\nimport { Spinner } from \"@hoardodile/ui/components/spinner\"\n\nconst toast = ToastPrimitive.createToastManager()\n\nfunction ToastProvider({ ...props }: ToastPrimitive.Provider.Props) {\n return <ToastPrimitive.Provider {...props} />\n}\n\nfunction ToastPortal({ ...props }: ToastPrimitive.Portal.Props) {\n return <ToastPrimitive.Portal data-slot=\"toast-portal\" {...props} />\n}\n\nfunction ToastViewport({ className, ...props }: ToastPrimitive.Viewport.Props) {\n return (\n <ToastPrimitive.Viewport\n data-slot=\"toast-viewport\"\n className={cn(\n \"pointer-events-none fixed inset-x-4 bottom-4 z-50 mx-auto w-auto max-w-sm outline-none sm:right-4 sm:left-auto sm:mx-0 sm:w-full\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction Toast({ className, ...props }: ToastPrimitive.Root.Props) {\n return (\n <ToastPrimitive.Root\n data-slot=\"toast\"\n className={cn(\n \"group/toast pointer-events-auto absolute right-0 bottom-0 z-[calc(1000-var(--toast-index))] w-full origin-bottom rounded-2xl border bg-popover text-popover-foreground shadow-lg will-change-transform outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]\",\n \"h-(--height) [transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms]\",\n \"after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']\",\n \"data-expanded:h-(--toast-height) data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]\",\n \"data-limited:opacity-0 data-starting-style:[transform:translateY(150%)]\",\n \"[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]\",\n \"data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]\",\n \"data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]\",\n \"data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]\",\n \"data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]\",\n \"data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]\",\n \"data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]\",\n \"data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]\",\n \"data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ToastContent({ className, ...props }: ToastPrimitive.Content.Props) {\n return (\n <ToastPrimitive.Content\n data-slot=\"toast-content\"\n className={cn(\n \"flex h-full items-center gap-3 overflow-hidden p-4 transition-opacity duration-250 ease-[cubic-bezier(0.22,1,0.36,1)] data-behind:opacity-0 data-expanded:opacity-100\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ToastTitle({ className, ...props }: ToastPrimitive.Title.Props) {\n return (\n <ToastPrimitive.Title\n data-slot=\"toast-title\"\n className={cn(\"text-sm font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction ToastDescription({\n className,\n ...props\n}: ToastPrimitive.Description.Props) {\n return (\n <ToastPrimitive.Description\n data-slot=\"toast-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction ToastAction({\n className,\n render = <Button variant=\"outline\" size=\"sm\" />,\n ...props\n}: ToastPrimitive.Action.Props) {\n return (\n <ToastPrimitive.Action\n data-slot=\"toast-action\"\n render={render}\n className={cn(\"shrink-0\", className)}\n {...props}\n />\n )\n}\n\nfunction ToastClose({\n className,\n children,\n render = <Button variant=\"ghost\" size=\"icon-sm\" />,\n ...props\n}: ToastPrimitive.Close.Props) {\n const { t } = useTranslation(\"ui\", { useSuspense: false })\n return (\n <ToastPrimitive.Close\n data-slot=\"toast-close\"\n aria-label={t(\"aria.closeToast\")}\n render={render}\n className={cn(\n \"relative shrink-0 text-muted-foreground after:absolute after:-inset-2 after:content-[''] hover:text-foreground\",\n className\n )}\n {...props}\n >\n {children ?? (\n <Cross aria-hidden=\"true\" />\n )}\n </ToastPrimitive.Close>\n )\n}\n\nfunction ToastIcon({ type }: { type: string | undefined }) {\n let icon: React.ReactNode = null\n\n if (type === \"success\") {\n icon = (\n <CheckCircle className=\"text-emerald-500\" aria-hidden=\"true\" />\n )\n }\n\n if (type === \"info\") {\n icon = (\n <InfoCircle aria-hidden=\"true\" />\n )\n }\n\n if (type === \"warning\") {\n icon = (\n <DangerTriangle className=\"text-amber-500\" aria-hidden=\"true\" />\n )\n }\n\n if (type === \"error\") {\n icon = (\n <ForbiddenCircle className=\"text-destructive\" aria-hidden=\"true\" />\n )\n }\n\n if (type === \"loading\") {\n icon = (\n <Spinner className=\"size-4\" aria-hidden=\"true\" />\n )\n }\n\n if (!icon) {\n return null\n }\n\n return (\n <span\n data-slot=\"toast-icon\"\n className=\"shrink-0 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\"\n >\n {icon}\n </span>\n )\n}\n\nfunction ToastList() {\n const { toasts } = ToastPrimitive.useToastManager()\n\n return toasts.map((toastItem) => (\n <Toast key={toastItem.id} toast={toastItem}>\n <ToastContent>\n <ToastIcon type={toastItem.type} />\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <ToastTitle />\n <ToastDescription />\n </div>\n <ToastAction />\n <ToastClose />\n </ToastContent>\n </Toast>\n ))\n}\n\nfunction Toaster({\n children,\n toastManager = toast,\n ...props\n}: ToastPrimitive.Provider.Props) {\n return (\n <ToastProvider toastManager={toastManager} {...props}>\n {children}\n <ToastPortal>\n <ToastViewport>\n <ToastList />\n </ToastViewport>\n </ToastPortal>\n </ToastProvider>\n )\n}\n\nconst createToastManager = ToastPrimitive.createToastManager\nconst useToastManager = ToastPrimitive.useToastManager\n\nexport {\n Toaster,\n Toast,\n ToastAction,\n ToastClose,\n ToastContent,\n ToastDescription,\n ToastPortal,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n createToastManager,\n toast,\n useToastManager,\n}\n"]}
@@ -0,0 +1,46 @@
1
+ import { Icon } from './chunk-TMQ5OMBK.js';
2
+ import { cn } from './chunk-M5OJN54O.js';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+
5
+ function ChipButton(props) {
6
+ const {
7
+ icon,
8
+ active,
9
+ dashed,
10
+ disabled,
11
+ children,
12
+ className,
13
+ onClick,
14
+ testId
15
+ } = props;
16
+ return /* @__PURE__ */ jsxs(
17
+ "button",
18
+ {
19
+ type: "button",
20
+ onClick: disabled ? void 0 : onClick,
21
+ "data-testid": testId,
22
+ disabled,
23
+ className: cn(
24
+ "inline-flex h-chip shrink-0 items-center gap-1.5 rounded-md px-2.5 text-xs whitespace-nowrap",
25
+ !dashed && "font-medium",
26
+ disabled ? "cursor-default" : "cursor-pointer",
27
+ active && "bg-accent text-foreground",
28
+ // The dashed outline keeps a 1px transparent border when
29
+ // active so the width never moves with the state.
30
+ active && dashed && "border border-transparent",
31
+ !active && disabled && "text-muted-foreground",
32
+ !active && !disabled && dashed && "border border-dashed border-border-strong bg-card text-muted-foreground hover:text-secondary-foreground",
33
+ !active && !disabled && !dashed && "text-secondary-foreground hover:text-foreground",
34
+ className
35
+ ),
36
+ children: [
37
+ icon !== void 0 ? /* @__PURE__ */ jsx(Icon, { icon }) : null,
38
+ children
39
+ ]
40
+ }
41
+ );
42
+ }
43
+
44
+ export { ChipButton };
45
+ //# sourceMappingURL=chunk-BRT25IDQ.js.map
46
+ //# sourceMappingURL=chunk-BRT25IDQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chip-button.tsx"],"names":[],"mappings":";;;;AA2BO,SAAS,WAAW,KAAA,EAAwB;AAClD,EAAA,MAAM;AAAA,IACL,IAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACD,GAAI,KAAA;AACJ,EAAA,uBACC,IAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,WAAW,MAAA,GAAY,OAAA;AAAA,MAChC,aAAA,EAAa,MAAA;AAAA,MACb,QAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACV,8FAAA;AAAA,QACA,CAAC,MAAA,IAAU,aAAA;AAAA,QACX,WAAW,gBAAA,GAAmB,gBAAA;AAAA,QAC9B,MAAA,IAAU,2BAAA;AAAA;AAAA;AAAA,QAGV,UAAU,MAAA,IAAU,2BAAA;AAAA,QACpB,CAAC,UAAU,QAAA,IAAY,uBAAA;AAAA,QACvB,CAAC,MAAA,IACA,CAAC,QAAA,IACD,MAAA,IACA,yGAAA;AAAA,QACD,CAAC,MAAA,IACA,CAAC,QAAA,IACD,CAAC,MAAA,IACD,iDAAA;AAAA,QACD;AAAA,OACD;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,IAAA,KAAS,MAAA,mBAAY,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAY,CAAA,GAAK,IAAA;AAAA,QAC5C;AAAA;AAAA;AAAA,GACF;AAEF","file":"chunk-BRT25IDQ.js","sourcesContent":["import type { IconType } from \"@hoardodile/ui/components/icon\"\nimport { Icon } from \"@hoardodile/ui/components/icon\"\nimport { cn } from \"@hoardodile/ui/lib/utils\"\nimport type { ReactNode } from \"react\"\n\nexport type ChipButtonProps = {\n\treadonly icon?: IconType\n\t/** Latched-toggle state — accent fill, no hover shift. */\n\treadonly active?: boolean\n\t/** The dashed outline (the Unused triage filter) instead of the quiet\n\t text idle state. */\n\treadonly dashed?: boolean\n\treadonly disabled?: boolean\n\treadonly children: ReactNode\n\treadonly className?: string\n\treadonly onClick?: () => void\n\treadonly testId?: string\n}\n\n/**\n * Chip button: the toolbar's compact toggle, h-chip height. Two kinds:\n * the quiet toggle (Reorder) wears medium weight in both states so its\n * width never moves; the dashed filter (Unused) is an indicator, not a\n * toggle, so it stays regular weight with a dashed outline. `active`\n * latches the accent fill on both; the dashed outline keeps a transparent\n * border when active so the width never shifts.\n */\nexport function ChipButton(props: ChipButtonProps) {\n\tconst {\n\t\ticon,\n\t\tactive,\n\t\tdashed,\n\t\tdisabled,\n\t\tchildren,\n\t\tclassName,\n\t\tonClick,\n\t\ttestId,\n\t} = props\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={disabled ? undefined : onClick}\n\t\t\tdata-testid={testId}\n\t\t\tdisabled={disabled}\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex h-chip shrink-0 items-center gap-1.5 rounded-md px-2.5 text-xs whitespace-nowrap\",\n\t\t\t\t!dashed && \"font-medium\",\n\t\t\t\tdisabled ? \"cursor-default\" : \"cursor-pointer\",\n\t\t\t\tactive && \"bg-accent text-foreground\",\n\t\t\t\t// The dashed outline keeps a 1px transparent border when\n\t\t\t\t// active so the width never moves with the state.\n\t\t\t\tactive && dashed && \"border border-transparent\",\n\t\t\t\t!active && disabled && \"text-muted-foreground\",\n\t\t\t\t!active &&\n\t\t\t\t\t!disabled &&\n\t\t\t\t\tdashed &&\n\t\t\t\t\t\"border border-dashed border-border-strong bg-card text-muted-foreground hover:text-secondary-foreground\",\n\t\t\t\t!active &&\n\t\t\t\t\t!disabled &&\n\t\t\t\t\t!dashed &&\n\t\t\t\t\t\"text-secondary-foreground hover:text-foreground\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{icon !== undefined ? <Icon icon={icon} /> : null}\n\t\t\t{children}\n\t\t</button>\n\t)\n}\n"]}
@@ -0,0 +1,29 @@
1
+ import { cn } from './chunk-M5OJN54O.js';
2
+ import { Separator as Separator$1 } from '@base-ui/react/separator';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ function Separator({
6
+ className,
7
+ orientation = "horizontal",
8
+ size = "hairline",
9
+ ...props
10
+ }) {
11
+ const thickness = size === "seam" ? "data-horizontal:h-0.5 data-vertical:w-0.5" : "data-horizontal:h-px data-vertical:w-px";
12
+ return /* @__PURE__ */ jsx(
13
+ Separator$1,
14
+ {
15
+ "data-slot": "separator",
16
+ orientation,
17
+ className: cn(
18
+ "shrink-0 bg-border data-horizontal:w-full data-vertical:self-stretch",
19
+ thickness,
20
+ className
21
+ ),
22
+ ...props
23
+ }
24
+ );
25
+ }
26
+
27
+ export { Separator };
28
+ //# sourceMappingURL=chunk-BU5DQOPM.js.map
29
+ //# sourceMappingURL=chunk-BU5DQOPM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/separator.tsx"],"names":["SeparatorPrimitive"],"mappings":";;;;AAWA,SAAS,SAAA,CAAU;AAAA,EACjB,SAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,IAAA,GAAO,UAAA;AAAA,EACP,GAAG;AACL,CAAA,EAEG;AACD,EAAA,MAAM,SAAA,GACJ,IAAA,KAAS,MAAA,GACL,2CAAA,GACA,yCAAA;AACN,EAAA,uBACE,GAAA;AAAA,IAACA,WAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,sEAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-BU5DQOPM.js","sourcesContent":["import { Separator as SeparatorPrimitive } from \"@base-ui/react/separator\"\n\nimport { cn } from \"@hoardodile/ui/lib/utils\"\n\nexport type SeparatorSize = \"hairline\" | \"seam\"\n\n/**\n * Horizontal/vertical divider: hairlines are 1px and quiet; the 2px\n * `seam` tier marks only structural seams (tab bars, panel sections,\n * pinned action bars).\n */\nfunction Separator({\n className,\n orientation = \"horizontal\",\n size = \"hairline\",\n ...props\n}: SeparatorPrimitive.Props & {\n readonly size?: SeparatorSize\n}) {\n const thickness =\n size === \"seam\"\n ? \"data-horizontal:h-0.5 data-vertical:w-0.5\"\n : \"data-horizontal:h-px data-vertical:w-px\"\n return (\n <SeparatorPrimitive\n data-slot=\"separator\"\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border data-horizontal:w-full data-vertical:self-stretch\",\n thickness,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n"]}
@@ -0,0 +1,266 @@
1
+ import { useMobileBackToClose } from './chunk-TDDHQZ62.js';
2
+ import { Check } from './chunk-XBPQEZES.js';
3
+ import { AltArrowRight } from './chunk-7MWWHI6T.js';
4
+ import { cn } from './chunk-M5OJN54O.js';
5
+ import * as React from 'react';
6
+ import { Menu } from '@base-ui/react/menu';
7
+ import { jsx, jsxs } from 'react/jsx-runtime';
8
+
9
+ function DropdownMenu({
10
+ open,
11
+ defaultOpen,
12
+ onOpenChange,
13
+ ...props
14
+ }) {
15
+ const [uncontrolledOpen, setUncontrolledOpen] = React.useState(
16
+ defaultOpen ?? false
17
+ );
18
+ const isControlled = open !== void 0;
19
+ const currentOpen = isControlled ? open : uncontrolledOpen;
20
+ function handleOpenChange(next, eventDetails) {
21
+ if (!isControlled) setUncontrolledOpen(next);
22
+ onOpenChange?.(next, eventDetails);
23
+ }
24
+ useMobileBackToClose(currentOpen, handleOpenChange);
25
+ return /* @__PURE__ */ jsx(
26
+ Menu.Root,
27
+ {
28
+ "data-slot": "dropdown-menu",
29
+ open: currentOpen,
30
+ onOpenChange: handleOpenChange,
31
+ ...props
32
+ }
33
+ );
34
+ }
35
+ function DropdownMenuPortal({ ...props }) {
36
+ return /* @__PURE__ */ jsx(Menu.Portal, { "data-slot": "dropdown-menu-portal", ...props });
37
+ }
38
+ function DropdownMenuTrigger({ ...props }) {
39
+ return /* @__PURE__ */ jsx(Menu.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
40
+ }
41
+ function DropdownMenuContent({
42
+ align = "start",
43
+ alignOffset = 0,
44
+ side = "bottom",
45
+ sideOffset = 4,
46
+ className,
47
+ container,
48
+ ...props
49
+ }) {
50
+ return /* @__PURE__ */ jsx(Menu.Portal, { container, children: /* @__PURE__ */ jsx(
51
+ Menu.Positioner,
52
+ {
53
+ className: "isolate z-50 outline-none",
54
+ align,
55
+ alignOffset,
56
+ side,
57
+ sideOffset,
58
+ children: /* @__PURE__ */ jsx(
59
+ Menu.Popup,
60
+ {
61
+ "data-slot": "dropdown-menu-content",
62
+ className: cn("z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95", className),
63
+ ...props
64
+ }
65
+ )
66
+ }
67
+ ) });
68
+ }
69
+ function DropdownMenuGroup({ ...props }) {
70
+ return /* @__PURE__ */ jsx(Menu.Group, { "data-slot": "dropdown-menu-group", ...props });
71
+ }
72
+ function DropdownMenuLabel({
73
+ className,
74
+ inset,
75
+ ...props
76
+ }) {
77
+ return /* @__PURE__ */ jsx(
78
+ Menu.GroupLabel,
79
+ {
80
+ "data-slot": "dropdown-menu-label",
81
+ "data-inset": inset,
82
+ className: cn(
83
+ "px-2 py-1.5 text-xs font-medium text-muted-foreground data-inset:pl-8",
84
+ className
85
+ ),
86
+ ...props
87
+ }
88
+ );
89
+ }
90
+ function DropdownMenuItem({
91
+ className,
92
+ inset,
93
+ variant = "default",
94
+ ...props
95
+ }) {
96
+ return /* @__PURE__ */ jsx(
97
+ Menu.Item,
98
+ {
99
+ "data-slot": "dropdown-menu-item",
100
+ "data-inset": inset,
101
+ "data-variant": variant,
102
+ className: cn(
103
+ "group/dropdown-menu-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive",
104
+ className
105
+ ),
106
+ ...props
107
+ }
108
+ );
109
+ }
110
+ function DropdownMenuSub({ ...props }) {
111
+ return /* @__PURE__ */ jsx(Menu.SubmenuRoot, { "data-slot": "dropdown-menu-sub", ...props });
112
+ }
113
+ function DropdownMenuSubTrigger({
114
+ className,
115
+ inset,
116
+ children,
117
+ ...props
118
+ }) {
119
+ return /* @__PURE__ */ jsxs(
120
+ Menu.SubmenuTrigger,
121
+ {
122
+ "data-slot": "dropdown-menu-sub-trigger",
123
+ "data-inset": inset,
124
+ className: cn(
125
+ "flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
126
+ className
127
+ ),
128
+ ...props,
129
+ children: [
130
+ children,
131
+ /* @__PURE__ */ jsx(AltArrowRight, { className: "ml-auto" })
132
+ ]
133
+ }
134
+ );
135
+ }
136
+ function DropdownMenuSubContent({
137
+ align = "start",
138
+ alignOffset = -3,
139
+ side = "right",
140
+ sideOffset = 0,
141
+ className,
142
+ ...props
143
+ }) {
144
+ return /* @__PURE__ */ jsx(
145
+ DropdownMenuContent,
146
+ {
147
+ "data-slot": "dropdown-menu-sub-content",
148
+ className: cn("w-auto min-w-[96px] rounded-md bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
149
+ align,
150
+ alignOffset,
151
+ side,
152
+ sideOffset,
153
+ ...props
154
+ }
155
+ );
156
+ }
157
+ function DropdownMenuCheckboxItem({
158
+ className,
159
+ children,
160
+ checked,
161
+ inset,
162
+ ...props
163
+ }) {
164
+ return /* @__PURE__ */ jsxs(
165
+ Menu.CheckboxItem,
166
+ {
167
+ "data-slot": "dropdown-menu-checkbox-item",
168
+ "data-inset": inset,
169
+ className: cn(
170
+ "relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
171
+ className
172
+ ),
173
+ checked,
174
+ ...props,
175
+ children: [
176
+ /* @__PURE__ */ jsx(
177
+ "span",
178
+ {
179
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
180
+ "data-slot": "dropdown-menu-checkbox-item-indicator",
181
+ children: /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(
182
+ Check,
183
+ {}
184
+ ) })
185
+ }
186
+ ),
187
+ children
188
+ ]
189
+ }
190
+ );
191
+ }
192
+ function DropdownMenuRadioGroup({ ...props }) {
193
+ return /* @__PURE__ */ jsx(
194
+ Menu.RadioGroup,
195
+ {
196
+ "data-slot": "dropdown-menu-radio-group",
197
+ ...props
198
+ }
199
+ );
200
+ }
201
+ function DropdownMenuRadioItem({
202
+ className,
203
+ children,
204
+ inset,
205
+ ...props
206
+ }) {
207
+ return /* @__PURE__ */ jsxs(
208
+ Menu.RadioItem,
209
+ {
210
+ "data-slot": "dropdown-menu-radio-item",
211
+ "data-inset": inset,
212
+ className: cn(
213
+ "relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
214
+ className
215
+ ),
216
+ ...props,
217
+ children: [
218
+ /* @__PURE__ */ jsx(
219
+ "span",
220
+ {
221
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
222
+ "data-slot": "dropdown-menu-radio-item-indicator",
223
+ children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(
224
+ Check,
225
+ {}
226
+ ) })
227
+ }
228
+ ),
229
+ children
230
+ ]
231
+ }
232
+ );
233
+ }
234
+ function DropdownMenuSeparator({
235
+ className,
236
+ ...props
237
+ }) {
238
+ return /* @__PURE__ */ jsx(
239
+ Menu.Separator,
240
+ {
241
+ "data-slot": "dropdown-menu-separator",
242
+ className: cn("-mx-1 my-1 h-px bg-border", className),
243
+ ...props
244
+ }
245
+ );
246
+ }
247
+ function DropdownMenuShortcut({
248
+ className,
249
+ ...props
250
+ }) {
251
+ return /* @__PURE__ */ jsx(
252
+ "span",
253
+ {
254
+ "data-slot": "dropdown-menu-shortcut",
255
+ className: cn(
256
+ "ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground",
257
+ className
258
+ ),
259
+ ...props
260
+ }
261
+ );
262
+ }
263
+
264
+ export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger };
265
+ //# sourceMappingURL=chunk-BWASOT5X.js.map
266
+ //# sourceMappingURL=chunk-BWASOT5X.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/dropdown-menu.tsx"],"names":["MenuPrimitive"],"mappings":"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","file":"chunk-BWASOT5X.js","sourcesContent":["import * as React from \"react\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\n\nimport { cn } from \"@hoardodile/ui/lib/utils\"\nimport { useMobileBackToClose } from \"@hoardodile/ui/hooks/useMobileBackToClose\"\nimport { AltArrowRight } from \"@hoardodile/ui/icons/registry\"\nimport { Check } from \"@hoardodile/ui/icons/marks\"\n\nfunction DropdownMenu({\n open,\n defaultOpen,\n onOpenChange,\n ...props\n}: Omit<MenuPrimitive.Root.Props, \"onOpenChange\"> & {\n /**\n * `eventDetails` is absent for closes triggered by the mobile back\n * gesture (a synthetic close with no underlying Base UI event).\n */\n onOpenChange?: (\n open: boolean,\n eventDetails?: MenuPrimitive.Root.ChangeEventDetails,\n ) => void\n}) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(\n defaultOpen ?? false,\n )\n const isControlled = open !== undefined\n const currentOpen = isControlled ? open : uncontrolledOpen\n function handleOpenChange(\n next: boolean,\n eventDetails?: MenuPrimitive.Root.ChangeEventDetails,\n ) {\n if (!isControlled) setUncontrolledOpen(next)\n onOpenChange?.(next, eventDetails)\n }\n useMobileBackToClose(currentOpen, handleOpenChange)\n return (\n <MenuPrimitive.Root\n data-slot=\"dropdown-menu\"\n open={currentOpen}\n onOpenChange={handleOpenChange}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n return <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n}\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n return <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />\n}\n\nfunction DropdownMenuContent({\n align = \"start\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n className,\n container,\n ...props\n}: MenuPrimitive.Popup.Props &\n Pick<\n MenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n > & {\n /**\n * Override the portal target. Mirrors the escape hatch on\n * `SelectContent` / `PopoverContent`: the video player provides\n * its own fullscreen container so the menu stays interactive in\n * fullscreen mode.\n */\n container?: MenuPrimitive.Portal.Props[\"container\"]\n }) {\n return (\n <MenuPrimitive.Portal container={container}>\n <MenuPrimitive.Positioner\n className=\"isolate z-50 outline-none\"\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n >\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-content\"\n className={cn(\"z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95\", className )}\n {...props}\n />\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n return <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: MenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-xs font-medium text-muted-foreground data-inset:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: MenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/dropdown-menu-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n return <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.SubmenuTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <AltArrowRight className=\"ml-auto\" />\n </MenuPrimitive.SubmenuTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n align = \"start\",\n alignOffset = -3,\n side = \"right\",\n sideOffset = 0,\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuContent>) {\n return (\n <DropdownMenuContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\"w-auto min-w-[96px] rounded-md bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\", className )}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: MenuPrimitive.CheckboxItem.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-checkbox-item-indicator\"\n >\n <MenuPrimitive.CheckboxItemIndicator>\n <Check\n />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </MenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n return (\n <MenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: MenuPrimitive.RadioItem.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-radio-item-indicator\"\n >\n <MenuPrimitive.RadioItemIndicator>\n <Check\n />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </MenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: MenuPrimitive.Separator.Props) {\n return (\n <MenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import { cn } from './chunk-M5OJN54O.js';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ function SectionLabel({
5
+ tone = "muted",
6
+ size = "xs",
7
+ className,
8
+ children
9
+ }) {
10
+ return /* @__PURE__ */ jsx(
11
+ "div",
12
+ {
13
+ className: cn(
14
+ size === "tiny" ? "text-tiny leading-none" : "text-xs",
15
+ "font-semibold tracking-label uppercase",
16
+ tone === "foreground" ? "text-foreground" : tone === "danger" ? "text-destructive" : "text-muted-foreground",
17
+ className
18
+ ),
19
+ children
20
+ }
21
+ );
22
+ }
23
+
24
+ export { SectionLabel };
25
+ //# sourceMappingURL=chunk-F32V4Z7Q.js.map
26
+ //# sourceMappingURL=chunk-F32V4Z7Q.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/section-label.tsx"],"names":[],"mappings":";;;AAYO,SAAS,YAAA,CAAa;AAAA,EAC5B,IAAA,GAAO,OAAA;AAAA,EACP,IAAA,GAAO,IAAA;AAAA,EACP,SAAA;AAAA,EACA;AACD,CAAA,EAKG;AACF,EAAA,uBACC,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACV,IAAA,KAAS,SAAS,wBAAA,GAA2B,SAAA;AAAA,QAC7C,wCAAA;AAAA,QACA,IAAA,KAAS,YAAA,GACN,iBAAA,GACA,IAAA,KAAS,WACR,kBAAA,GACA,uBAAA;AAAA,QACJ;AAAA,OACD;AAAA,MAEC;AAAA;AAAA,GACF;AAEF","file":"chunk-F32V4Z7Q.js","sourcesContent":["import { cn } from \"@hoardodile/ui/lib/utils\"\nimport type { ReactNode } from \"react\"\n\n/**\n * Section label — the 12px uppercase tracking-label voice (DESIGN.md —\n * Typography), one component instead of a class string repeated across\n * panels, rails, dialogs and settings. Ink tones: `muted` (default, the\n * quiet section voice), `foreground` (structural headings), `danger`\n * (the dialog eyebrow of a destructive ritual). Callers with a\n * right-aligned count arrange it inside `children` (flex via\n * `className`) — the voice is the unit.\n */\nexport function SectionLabel({\n\ttone = \"muted\",\n\tsize = \"xs\",\n\tclassName,\n\tchildren,\n}: {\n\ttone?: \"muted\" | \"foreground\" | \"danger\"\n\tsize?: \"xs\" | \"tiny\"\n\tclassName?: string\n\tchildren: ReactNode\n}) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tsize === \"tiny\" ? \"text-tiny leading-none\" : \"text-xs\",\n\t\t\t\t\"font-semibold tracking-label uppercase\",\n\t\t\t\ttone === \"foreground\"\n\t\t\t\t\t? \"text-foreground\"\n\t\t\t\t\t: tone === \"danger\"\n\t\t\t\t\t\t? \"text-destructive\"\n\t\t\t\t\t\t: \"text-muted-foreground\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n"]}