@cascivo/react 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. package/dist/accordion/accordion.js +1 -1
  2. package/dist/action-sheet/action-sheet.js +1 -1
  3. package/dist/alert/alert.js +1 -1
  4. package/dist/alert-dialog/alert-dialog.js +1 -1
  5. package/dist/app-shell/app-shell.css +1 -1
  6. package/dist/app-shell/app-shell.js +1 -1
  7. package/dist/app-shell/app-shell.module.js +1 -1
  8. package/dist/aspect-ratio/aspect-ratio.js +1 -1
  9. package/dist/avatar/avatar.js +1 -1
  10. package/dist/avatar-group/avatar-group.js +1 -1
  11. package/dist/badge/badge.js +1 -1
  12. package/dist/blockquote/blockquote.js +1 -1
  13. package/dist/bottom-sheet/bottom-sheet.js +1 -1
  14. package/dist/brand/logo/logo.js +1 -1
  15. package/dist/breadcrumb/breadcrumb.js +1 -1
  16. package/dist/button/button.css +1 -1
  17. package/dist/button/button.module.js +1 -1
  18. package/dist/button-group/button-group.js +1 -1
  19. package/dist/calendar/calendar-date.js +1 -1
  20. package/dist/calendar/calendar.js +1 -1
  21. package/dist/card/card.js +1 -1
  22. package/dist/carousel/carousel.js +1 -1
  23. package/dist/chat-bubble/chat-bubble.js +1 -1
  24. package/dist/code/code.js +1 -1
  25. package/dist/code-snippet/code-snippet.js +2 -2
  26. package/dist/code-snippet/highlight.js +1 -1
  27. package/dist/collapsible/collapsible.js +1 -1
  28. package/dist/color-picker/color-picker.js +1 -1
  29. package/dist/color-picker/color.js +1 -1
  30. package/dist/combobox/combobox.js +1 -1
  31. package/dist/combobox/list-nav.js +1 -1
  32. package/dist/combobox/option-list.js +1 -1
  33. package/dist/command-menu/command-menu.js +1 -1
  34. package/dist/comparison/comparison.js +1 -1
  35. package/dist/contained-list/contained-list.js +1 -1
  36. package/dist/context-menu/context-menu.js +1 -1
  37. package/dist/data-list/data-list.js +1 -1
  38. package/dist/data-table/column-filter.js +1 -1
  39. package/dist/data-table/column-layout.js +1 -1
  40. package/dist/data-table/data-table.js +1 -1
  41. package/dist/data-table/grid-keys.js +1 -1
  42. package/dist/data-table/row-group.js +1 -1
  43. package/dist/data-table/row-search.js +1 -1
  44. package/dist/data-table/row-sort.js +1 -1
  45. package/dist/data-table/to-csv.js +2 -2
  46. package/dist/data-table/virtual-window.js +1 -1
  47. package/dist/date-picker/date-picker.js +1 -1
  48. package/dist/date-picker/parse-date.js +1 -1
  49. package/dist/date-range-picker/date-range-picker.js +1 -1
  50. package/dist/dock/dock.js +1 -1
  51. package/dist/drawer/drawer.js +1 -1
  52. package/dist/dropdown/dropdown.js +1 -1
  53. package/dist/editable/editable.js +1 -1
  54. package/dist/empty-state/empty-state.js +1 -1
  55. package/dist/fab/fab.js +1 -1
  56. package/dist/field/field.js +1 -1
  57. package/dist/file-uploader/file-uploader.js +1 -1
  58. package/dist/filter/filter.js +1 -1
  59. package/dist/form/form.js +1 -1
  60. package/dist/header/header.js +1 -1
  61. package/dist/header-panel/header-panel.js +1 -1
  62. package/dist/heading/heading.js +1 -1
  63. package/dist/hover-card/hover-card.js +1 -1
  64. package/dist/image/image.js +1 -1
  65. package/dist/index.d.ts +749 -13
  66. package/dist/indicator/indicator.js +1 -1
  67. package/dist/infinite-scroll/infinite-scroll.js +1 -1
  68. package/dist/inline-loading/inline-loading.js +1 -1
  69. package/dist/input-group/input-group.js +1 -1
  70. package/dist/item/item.js +1 -1
  71. package/dist/join/join.js +1 -1
  72. package/dist/kbd/kbd.js +1 -1
  73. package/dist/label/label.js +1 -1
  74. package/dist/large-title-header/large-title-header.js +1 -1
  75. package/dist/layouts/src/auto-grid/auto-grid.js +1 -1
  76. package/dist/layouts/src/center/center.js +1 -1
  77. package/dist/layouts/src/columns/columns.js +1 -1
  78. package/dist/layouts/src/flex/flex.css +1 -1
  79. package/dist/layouts/src/flex/flex.js +1 -1
  80. package/dist/layouts/src/flex/flex.module.js +1 -1
  81. package/dist/layouts/src/grid/grid.js +1 -1
  82. package/dist/layouts/src/page-header/page-header.js +1 -1
  83. package/dist/layouts/src/spacer/spacer.js +1 -1
  84. package/dist/list/list.js +1 -1
  85. package/dist/log-viewer/log-viewer.css +1 -1
  86. package/dist/log-viewer/log-viewer.js +2 -2
  87. package/dist/log-viewer/log-viewer.module.js +1 -1
  88. package/dist/menu/menu.js +1 -1
  89. package/dist/menu-button/menu-button.js +1 -1
  90. package/dist/menubar/menubar.js +1 -1
  91. package/dist/modal/modal.js +1 -1
  92. package/dist/multi-select/list-nav.js +1 -1
  93. package/dist/multi-select/multi-select.js +1 -1
  94. package/dist/multi-select/option-list.js +1 -1
  95. package/dist/navigation-menu/navigation-menu.js +1 -1
  96. package/dist/node/accordion/accordion.js +1 -1
  97. package/dist/node/action-sheet/action-sheet.js +1 -1
  98. package/dist/node/alert/alert.js +1 -1
  99. package/dist/node/alert-dialog/alert-dialog.js +1 -1
  100. package/dist/node/app-shell/app-shell.js +1 -1
  101. package/dist/node/app-shell/app-shell.module.js +1 -1
  102. package/dist/node/aspect-ratio/aspect-ratio.js +1 -1
  103. package/dist/node/avatar/avatar.js +1 -1
  104. package/dist/node/avatar-group/avatar-group.js +1 -1
  105. package/dist/node/badge/badge.js +1 -1
  106. package/dist/node/blockquote/blockquote.js +1 -1
  107. package/dist/node/bottom-sheet/bottom-sheet.js +1 -1
  108. package/dist/node/brand/logo/logo.js +1 -1
  109. package/dist/node/breadcrumb/breadcrumb.js +1 -1
  110. package/dist/node/button/button.module.js +1 -1
  111. package/dist/node/button-group/button-group.js +1 -1
  112. package/dist/node/calendar/calendar-date.js +1 -1
  113. package/dist/node/calendar/calendar.js +1 -1
  114. package/dist/node/card/card.js +1 -1
  115. package/dist/node/carousel/carousel.js +1 -1
  116. package/dist/node/chat-bubble/chat-bubble.js +1 -1
  117. package/dist/node/code/code.js +1 -1
  118. package/dist/node/code-snippet/code-snippet.js +2 -2
  119. package/dist/node/code-snippet/highlight.js +1 -1
  120. package/dist/node/collapsible/collapsible.js +1 -1
  121. package/dist/node/color-picker/color-picker.js +1 -1
  122. package/dist/node/color-picker/color.js +1 -1
  123. package/dist/node/combobox/combobox.js +1 -1
  124. package/dist/node/combobox/list-nav.js +1 -1
  125. package/dist/node/combobox/option-list.js +1 -1
  126. package/dist/node/command-menu/command-menu.js +1 -1
  127. package/dist/node/comparison/comparison.js +1 -1
  128. package/dist/node/contained-list/contained-list.js +1 -1
  129. package/dist/node/context-menu/context-menu.js +1 -1
  130. package/dist/node/data-list/data-list.js +1 -1
  131. package/dist/node/data-table/column-filter.js +1 -1
  132. package/dist/node/data-table/column-layout.js +1 -1
  133. package/dist/node/data-table/data-table.js +1 -1
  134. package/dist/node/data-table/grid-keys.js +1 -1
  135. package/dist/node/data-table/row-group.js +1 -1
  136. package/dist/node/data-table/row-search.js +1 -1
  137. package/dist/node/data-table/row-sort.js +1 -1
  138. package/dist/node/data-table/to-csv.js +2 -2
  139. package/dist/node/data-table/virtual-window.js +1 -1
  140. package/dist/node/date-picker/date-picker.js +1 -1
  141. package/dist/node/date-picker/parse-date.js +1 -1
  142. package/dist/node/date-range-picker/date-range-picker.js +1 -1
  143. package/dist/node/dock/dock.js +1 -1
  144. package/dist/node/drawer/drawer.js +1 -1
  145. package/dist/node/dropdown/dropdown.js +1 -1
  146. package/dist/node/editable/editable.js +1 -1
  147. package/dist/node/empty-state/empty-state.js +1 -1
  148. package/dist/node/fab/fab.js +1 -1
  149. package/dist/node/field/field.js +1 -1
  150. package/dist/node/file-uploader/file-uploader.js +1 -1
  151. package/dist/node/filter/filter.js +1 -1
  152. package/dist/node/form/form.js +1 -1
  153. package/dist/node/header/header.js +1 -1
  154. package/dist/node/header-panel/header-panel.js +1 -1
  155. package/dist/node/heading/heading.js +1 -1
  156. package/dist/node/hover-card/hover-card.js +1 -1
  157. package/dist/node/image/image.js +1 -1
  158. package/dist/node/indicator/indicator.js +1 -1
  159. package/dist/node/infinite-scroll/infinite-scroll.js +1 -1
  160. package/dist/node/inline-loading/inline-loading.js +1 -1
  161. package/dist/node/input-group/input-group.js +1 -1
  162. package/dist/node/item/item.js +1 -1
  163. package/dist/node/join/join.js +1 -1
  164. package/dist/node/kbd/kbd.js +1 -1
  165. package/dist/node/label/label.js +1 -1
  166. package/dist/node/large-title-header/large-title-header.js +1 -1
  167. package/dist/node/layouts/src/auto-grid/auto-grid.js +1 -1
  168. package/dist/node/layouts/src/center/center.js +1 -1
  169. package/dist/node/layouts/src/columns/columns.js +1 -1
  170. package/dist/node/layouts/src/flex/flex.js +1 -1
  171. package/dist/node/layouts/src/flex/flex.module.js +1 -1
  172. package/dist/node/layouts/src/grid/grid.js +1 -1
  173. package/dist/node/layouts/src/page-header/page-header.js +1 -1
  174. package/dist/node/layouts/src/spacer/spacer.js +1 -1
  175. package/dist/node/list/list.js +1 -1
  176. package/dist/node/log-viewer/log-viewer.js +2 -2
  177. package/dist/node/log-viewer/log-viewer.module.js +1 -1
  178. package/dist/node/menu/menu.js +1 -1
  179. package/dist/node/menu-button/menu-button.js +1 -1
  180. package/dist/node/menubar/menubar.js +1 -1
  181. package/dist/node/modal/modal.js +1 -1
  182. package/dist/node/multi-select/list-nav.js +1 -1
  183. package/dist/node/multi-select/multi-select.js +1 -1
  184. package/dist/node/multi-select/option-list.js +1 -1
  185. package/dist/node/navigation-menu/navigation-menu.js +1 -1
  186. package/dist/node/notification/notification.js +1 -1
  187. package/dist/node/number-input/number-input.js +1 -1
  188. package/dist/node/otp-input/otp-input.js +1 -1
  189. package/dist/node/overflow-menu/overflow-menu.js +1 -1
  190. package/dist/node/pagination/pagination.js +1 -1
  191. package/dist/node/password-input/password-input.js +1 -1
  192. package/dist/node/popover/popover.js +1 -1
  193. package/dist/node/popover/use-popover.js +1 -1
  194. package/dist/node/progress/progress.js +1 -1
  195. package/dist/node/progress-bar/progress-bar.js +1 -1
  196. package/dist/node/progress-circle/progress-circle.js +1 -1
  197. package/dist/node/progress-indicator/progress-indicator.js +1 -1
  198. package/dist/node/prose/prose.js +1 -1
  199. package/dist/node/pull-to-refresh/pull-to-refresh.js +1 -1
  200. package/dist/node/qr-code/encode.js +1 -1
  201. package/dist/node/qr-code/qr-code.js +1 -1
  202. package/dist/node/radial-progress/radial-progress.js +1 -1
  203. package/dist/node/radio/radio.js +1 -1
  204. package/dist/node/radio-card/radio-card.js +1 -1
  205. package/dist/node/rating-group/rating-group.js +1 -1
  206. package/dist/node/react/src/index.js +1 -1
  207. package/dist/node/relative-time/relative-time.js +1 -1
  208. package/dist/node/reorder-list/reorder-list.js +1 -1
  209. package/dist/node/resizable/resizable.js +1 -1
  210. package/dist/node/scroll-area/scroll-area.js +1 -1
  211. package/dist/node/search/search.js +1 -1
  212. package/dist/node/segmented-control/segmented-control.js +1 -1
  213. package/dist/node/separator/separator.js +1 -1
  214. package/dist/node/sheet/sheet.js +1 -1
  215. package/dist/node/shell-header/shell-header.js +1 -1
  216. package/dist/node/side-nav/side-nav.js +1 -1
  217. package/dist/node/side-nav/side-nav.module.js +1 -1
  218. package/dist/node/skeleton/skeleton.js +1 -1
  219. package/dist/node/skip-nav/skip-nav.js +1 -1
  220. package/dist/node/spinner/spinner.js +1 -1
  221. package/dist/node/stack/stack.js +1 -1
  222. package/dist/node/stat/stat.js +1 -1
  223. package/dist/node/status/status.js +1 -1
  224. package/dist/node/steps/steps.js +1 -1
  225. package/dist/node/structured-list/structured-list.js +1 -1
  226. package/dist/node/swap/swap.js +1 -1
  227. package/dist/node/swipe-item/swipe-item.js +1 -1
  228. package/dist/node/switcher/switcher.js +1 -1
  229. package/dist/node/tabs/tabs.js +1 -1
  230. package/dist/node/tag/tag.js +1 -1
  231. package/dist/node/tags-input/tags-input.js +1 -1
  232. package/dist/node/text/text.js +1 -1
  233. package/dist/node/tile/tile.js +1 -1
  234. package/dist/node/timeline/timeline.js +1 -1
  235. package/dist/node/toast/toast.js +1 -1
  236. package/dist/node/toc/toc.js +1 -1
  237. package/dist/node/toc/use-toc-from-region.js +1 -1
  238. package/dist/node/toggle-group/toggle-group.js +1 -1
  239. package/dist/node/toggletip/toggletip.js +1 -1
  240. package/dist/node/tooltip/tooltip.js +1 -1
  241. package/dist/node/tree-view/tree-view.js +1 -1
  242. package/dist/node/user/user.js +1 -1
  243. package/dist/node/virtual-list/virtual-list.js +1 -1
  244. package/dist/node/wheel-picker/wheel-picker.js +1 -1
  245. package/dist/notification/notification.js +1 -1
  246. package/dist/number-input/number-input.js +1 -1
  247. package/dist/otp-input/otp-input.js +1 -1
  248. package/dist/overflow-menu/overflow-menu.js +1 -1
  249. package/dist/pagination/pagination.js +1 -1
  250. package/dist/password-input/password-input.js +1 -1
  251. package/dist/popover/popover.js +1 -1
  252. package/dist/popover/use-popover.js +1 -1
  253. package/dist/progress/progress.js +1 -1
  254. package/dist/progress-bar/progress-bar.js +1 -1
  255. package/dist/progress-circle/progress-circle.js +1 -1
  256. package/dist/progress-indicator/progress-indicator.js +1 -1
  257. package/dist/prose/prose.js +1 -1
  258. package/dist/pull-to-refresh/pull-to-refresh.js +1 -1
  259. package/dist/qr-code/encode.js +1 -1
  260. package/dist/qr-code/qr-code.js +1 -1
  261. package/dist/radial-progress/radial-progress.js +1 -1
  262. package/dist/radio/radio.js +1 -1
  263. package/dist/radio-card/radio-card.js +1 -1
  264. package/dist/rating-group/rating-group.js +1 -1
  265. package/dist/react/src/index.js +1 -1
  266. package/dist/relative-time/relative-time.js +1 -1
  267. package/dist/reorder-list/reorder-list.js +1 -1
  268. package/dist/resizable/resizable.js +1 -1
  269. package/dist/scroll-area/scroll-area.js +1 -1
  270. package/dist/search/search.js +1 -1
  271. package/dist/segmented-control/segmented-control.js +1 -1
  272. package/dist/separator/separator.js +1 -1
  273. package/dist/sheet/sheet.js +1 -1
  274. package/dist/shell-header/shell-header.js +1 -1
  275. package/dist/side-nav/side-nav.css +1 -1
  276. package/dist/side-nav/side-nav.js +1 -1
  277. package/dist/side-nav/side-nav.module.js +1 -1
  278. package/dist/skeleton/skeleton.js +1 -1
  279. package/dist/skip-nav/skip-nav.js +1 -1
  280. package/dist/spinner/spinner.js +1 -1
  281. package/dist/stack/stack.js +1 -1
  282. package/dist/stat/stat.js +1 -1
  283. package/dist/status/status.js +1 -1
  284. package/dist/steps/steps.js +1 -1
  285. package/dist/structured-list/structured-list.js +1 -1
  286. package/dist/styles.css +10 -6
  287. package/dist/swap/swap.js +1 -1
  288. package/dist/swipe-item/swipe-item.js +1 -1
  289. package/dist/switcher/switcher.js +1 -1
  290. package/dist/tabs/tabs.js +1 -1
  291. package/dist/tag/tag.js +1 -1
  292. package/dist/tags-input/tags-input.js +1 -1
  293. package/dist/text/text.js +1 -1
  294. package/dist/tile/tile.js +1 -1
  295. package/dist/timeline/timeline.js +1 -1
  296. package/dist/toast/toast.js +1 -1
  297. package/dist/toc/toc.js +1 -1
  298. package/dist/toc/use-toc-from-region.js +1 -1
  299. package/dist/toggle-group/toggle-group.js +1 -1
  300. package/dist/toggletip/toggletip.js +1 -1
  301. package/dist/tooltip/tooltip.js +1 -1
  302. package/dist/tree-view/tree-view.js +1 -1
  303. package/dist/user/user.js +1 -1
  304. package/dist/virtual-list/virtual-list.js +1 -1
  305. package/dist/wheel-picker/wheel-picker.js +1 -1
  306. package/package.json +4 -4
@@ -1 +1 @@
1
- function e(e){return`${String(e.getUTCFullYear()).padStart(4,`0`)}-${String(e.getUTCMonth()+1).padStart(2,`0`)}-${String(e.getUTCDate()).padStart(2,`0`)}`}function t(e){let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e.trim());return t?n(Number(t[1]),Number(t[2]),Number(t[3])):null}function n(e,t,n){if(t<1||t>12||n<1||n>31)return null;let r=new Date(Date.UTC(e,t-1,n));return r.getUTCMonth()!==t-1||r.getUTCDate()!==n?null:r}function r(e){try{return new Intl.DateTimeFormat(e).formatToParts(new Date(Date.UTC(2026,0,2))).filter(e=>e.type===`day`||e.type===`month`).map(e=>e.type)[0]===`day`}catch{return!1}}function i(e,i,a){let o=e.trim();if(o===``)return null;let s=t(o);if(s)return s;let c=o.split(/[/.\-\s]+/).filter(Boolean);if(c.length<2||c.length>3||!c.every(e=>/^\d{1,4}$/.test(e)))return null;let l=c.map(Number),u=r(i),d,f,p;return l.length===2?([d,f]=u?[l[0],l[1]]:[l[1],l[0]],p=a??new Date().getFullYear()):([d,f]=u?[l[0],l[1]]:[l[1],l[0]],p=l[2],c[2].length<=2&&(p=2e3+p)),n(p,f,d)}function a(e,t,n){return new Intl.DateTimeFormat(t,n??{timeZone:`UTC`}).format(e)}function o(e){try{return new Intl.DateTimeFormat(e,{timeZone:`UTC`}).formatToParts(new Date(Date.UTC(2026,10,22))).map(e=>e.type===`day`?`DD`:e.type===`month`?`MM`:e.type===`year`?`YYYY`:e.value).join(``)}catch{return`YYYY-MM-DD`}}export{a as formatDate,o as formatHint,t as fromISO,i as parseTypedDate,e as toISO};
1
+ function toISO(e){return`${String(e.getUTCFullYear()).padStart(4,`0`)}-${String(e.getUTCMonth()+1).padStart(2,`0`)}-${String(e.getUTCDate()).padStart(2,`0`)}`}function fromISO(e){let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e.trim());return t?makeDate(Number(t[1]),Number(t[2]),Number(t[3])):null}function makeDate(e,t,n){if(t<1||t>12||n<1||n>31)return null;let r=new Date(Date.UTC(e,t-1,n));return r.getUTCMonth()!==t-1||r.getUTCDate()!==n?null:r}function isDayFirst(e){try{return new Intl.DateTimeFormat(e).formatToParts(new Date(Date.UTC(2026,0,2))).filter(e=>e.type===`day`||e.type===`month`).map(e=>e.type)[0]===`day`}catch{return!1}}function parseTypedDate(e,t,n){let r=e.trim();if(r===``)return null;let i=fromISO(r);if(i)return i;let a=r.split(/[/.\-\s]+/).filter(Boolean);if(a.length<2||a.length>3||!a.every(e=>/^\d{1,4}$/.test(e)))return null;let o=a.map(Number),s=isDayFirst(t),c,l,u;return o.length===2?([c,l]=s?[o[0],o[1]]:[o[1],o[0]],u=n??new Date().getFullYear()):([c,l]=s?[o[0],o[1]]:[o[1],o[0]],u=o[2],a[2].length<=2&&(u=2e3+u)),makeDate(u,l,c)}function formatDate(e,t,n){return new Intl.DateTimeFormat(t,n??{timeZone:`UTC`}).format(e)}function formatHint(e){try{return new Intl.DateTimeFormat(e,{timeZone:`UTC`}).formatToParts(new Date(Date.UTC(2026,10,22))).map(e=>e.type===`day`?`DD`:e.type===`month`?`MM`:e.type===`year`?`YYYY`:e.value).join(``)}catch{return`YYYY-MM-DD`}}export{formatDate,formatHint,fromISO,parseTypedDate,toISO};
@@ -1 +1 @@
1
- "use client";import{Calendar as e}from"../calendar/calendar.js";import t from"./date-range-picker.module.js";import{useRef as n}from"react";import{batch as r,cn as i,useControllableSignal as a,useSignal as o,useSignalEffect as s,useSignals as ee}from"@cascivo/core";import{builtin as c,currentLocale as l,t as u}from"@cascivo/i18n";import{jsx as d,jsxs as f}from"react/jsx-runtime";function p(e){return Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate())}function m(e,t){return!e||!t?!1:p(e)===p(t)}function h(e,t,n){let r=new Date(Date.UTC(e,t+n,1));return{year:r.getUTCFullYear(),month:r.getUTCMonth()}}function g({value:g,defaultValue:_,onValueChange:v,min:y,max:b,disabled:x,presets:S,locale:C,placeholder:w,size:T=`md`,labels:E,className:D}){ee();let O=C??l(),te=w??u(c.dateRangePicker.placeholder),ne=E?.apply??u(c.dateRangePicker.apply),re=E?.clear??u(c.dateRangePicker.clear),k=E?.previousMonth??u(c.calendar.previousMonth),A=E?.nextMonth??u(c.calendar.nextMonth),[j,M]=a({value:g===void 0?void 0:g,defaultValue:_??null,onChange:e=>{e&&v?.(e)}}),N=o(!1),P=o(null),F=o(null),I=j.value?.start??_?.start??new Date,L=o(I.getUTCFullYear()),R=o(I.getUTCMonth()),z=n(null);s(()=>{if(!N.value)return;let e=e=>{z.current&&!z.current.contains(e.target)&&(N.value=!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)});let B=()=>{N.value=!0},V=()=>{N.value=!1},H=e=>{let t=h(L.value,R.value,e);r(()=>{L.value=t.year,R.value=t.month})},U=e=>{let t=P.value;if(t===null){P.value=e;return}if(m(t,e)){r(()=>{P.value=null,F.value=null}),M(null);return}let n=p(t)<=p(e)?{start:t,end:e}:{start:e,end:t};r(()=>{P.value=null,F.value=null}),M(n)},W=e=>{r(()=>{P.value=null,F.value=null,L.value=e.range.start.getUTCFullYear(),R.value=e.range.start.getUTCMonth()}),M(e.range)},G=()=>{r(()=>{P.value=null,F.value=null}),M(null)},K=P.value??j.value?.start??null,q=P.value?F.value??null:j.value?.end??null,J=K&&q?Math.min(p(K),p(q)):null,Y=K&&q?Math.max(p(K),p(q)):null,ie=e=>{if(J===null||Y===null)return!1;let t=p(e);return t>J&&t<Y},ae=e=>m(e,K)||J!==null&&p(e)===J,oe=e=>m(e,q)||Y!==null&&p(e)===Y,X=new Intl.DateTimeFormat(O,{year:`numeric`,month:`short`,day:`numeric`}),Z=j.value?`${X.format(j.value.start)} → ${X.format(j.value.end)}`:``,Q=h(L.value,R.value,1),$={locale:O,size:T,...y===void 0?{}:{min:y},...b===void 0?{}:{max:b},...x===void 0?{}:{disabled:x},hideNav:!0,isInRange:ie,isRangeStart:ae,isRangeEnd:oe,onValueChange:U,onDayHover:e=>{F.value=e},labels:{previousMonth:k,nextMonth:A}};return f(`div`,{ref:z,className:i(t.wrapper,D),"data-size":T,onKeyDown:e=>{e.key===`Escape`&&N.value&&(e.stopPropagation(),V())},children:[f(`button`,{type:`button`,role:`combobox`,"aria-expanded":N.value,"aria-haspopup":`dialog`,"aria-label":E?.label??u(c.dateRangePicker.label),className:t.trigger,onClick:N.value?V:B,children:[d(`span`,{className:i(t.value,Z?void 0:t.placeholder),children:Z||te}),d(`span`,{className:t.icon,"aria-hidden":`true`,children:`📅`})]}),f(`div`,{role:`dialog`,className:t.panel,"data-state":N.value?`open`:`closed`,children:[S&&S.length>0&&d(`div`,{className:t.presets,children:S.map(e=>d(`button`,{type:`button`,className:t.preset,onClick:()=>W(e),children:e.label},e.id??e.label))}),f(`div`,{className:t.calendars,children:[d(`div`,{className:t.calNav,children:d(`button`,{type:`button`,className:t.navButton,"aria-label":k,onClick:()=>H(-1),children:`‹`})}),d(e,{month:R.value,year:L.value,...$}),d(e,{month:Q.month,year:Q.year,...$}),d(`div`,{className:t.calNav,children:d(`button`,{type:`button`,className:t.navButton,"aria-label":A,onClick:()=>H(1),children:`›`})})]}),f(`div`,{className:t.footer,children:[d(`button`,{type:`button`,className:t.clearBtn,onClick:G,children:re}),d(`button`,{type:`button`,className:t.applyBtn,onClick:V,children:ne})]})]})]})}export{g as DateRangePicker};
1
+ "use client";import{Calendar as e}from"../calendar/calendar.js";import t from"./date-range-picker.module.js";import{useRef as n}from"react";import{batch as r,cn as i,useControllableSignal as a,useSignal as o,useSignalEffect as s,useSignals as c}from"@cascivo/core";import{builtin as l,currentLocale as u,t as d}from"@cascivo/i18n";import{jsx as f,jsxs as p}from"react/jsx-runtime";function dayMs(e){return Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate())}function sameDay(e,t){return!e||!t?!1:dayMs(e)===dayMs(t)}function addMonths(e,t,n){let r=new Date(Date.UTC(e,t+n,1));return{year:r.getUTCFullYear(),month:r.getUTCMonth()}}function DateRangePicker({value:m,defaultValue:h,onValueChange:g,min:_,max:v,disabled:y,presets:b,locale:x,placeholder:S,size:C=`md`,labels:w,className:T}){c();let E=x??u(),D=S??d(l.dateRangePicker.placeholder),O=w?.apply??d(l.dateRangePicker.apply),k=w?.clear??d(l.dateRangePicker.clear),A=w?.previousMonth??d(l.calendar.previousMonth),j=w?.nextMonth??d(l.calendar.nextMonth),[M,N]=a({value:m===void 0?void 0:m,defaultValue:h??null,onChange:e=>{e&&g?.(e)}}),P=o(!1),F=o(null),I=o(null),L=M.value?.start??h?.start??new Date,R=o(L.getUTCFullYear()),z=o(L.getUTCMonth()),B=n(null);s(()=>{if(!P.value)return;let handler=e=>{B.current&&!B.current.contains(e.target)&&(P.value=!1)};return document.addEventListener(`mousedown`,handler),()=>document.removeEventListener(`mousedown`,handler)});let openPanel=()=>{P.value=!0},closePanel=()=>{P.value=!1},advance=e=>{let t=addMonths(R.value,z.value,e);r(()=>{R.value=t.year,z.value=t.month})},handleDayClick=e=>{let t=F.value;if(t===null){F.value=e;return}if(sameDay(t,e)){r(()=>{F.value=null,I.value=null}),N(null);return}let n=dayMs(t)<=dayMs(e)?{start:t,end:e}:{start:e,end:t};r(()=>{F.value=null,I.value=null}),N(n)},applyPreset=e=>{r(()=>{F.value=null,I.value=null,R.value=e.range.start.getUTCFullYear(),z.value=e.range.start.getUTCMonth()}),N(e.range)},clear=()=>{r(()=>{F.value=null,I.value=null}),N(null)},V=F.value??M.value?.start??null,H=F.value?I.value??null:M.value?.end??null,U=V&&H?Math.min(dayMs(V),dayMs(H)):null,W=V&&H?Math.max(dayMs(V),dayMs(H)):null,isInRange=e=>{if(U===null||W===null)return!1;let t=dayMs(e);return t>U&&t<W},isRangeStart=e=>sameDay(e,V)||U!==null&&dayMs(e)===U,isRangeEnd=e=>sameDay(e,H)||W!==null&&dayMs(e)===W,G=new Intl.DateTimeFormat(E,{year:`numeric`,month:`short`,day:`numeric`}),K=M.value?`${G.format(M.value.start)} → ${G.format(M.value.end)}`:``,q=addMonths(R.value,z.value,1),J={locale:E,size:C,..._===void 0?{}:{min:_},...v===void 0?{}:{max:v},...y===void 0?{}:{disabled:y},hideNav:!0,isInRange,isRangeStart,isRangeEnd,onValueChange:handleDayClick,onDayHover:e=>{I.value=e},labels:{previousMonth:A,nextMonth:j}};return p(`div`,{ref:B,className:i(t.wrapper,T),"data-size":C,onKeyDown:e=>{e.key===`Escape`&&P.value&&(e.stopPropagation(),closePanel())},children:[p(`button`,{type:`button`,role:`combobox`,"aria-expanded":P.value,"aria-haspopup":`dialog`,"aria-label":w?.label??d(l.dateRangePicker.label),className:t.trigger,onClick:P.value?closePanel:openPanel,children:[f(`span`,{className:i(t.value,K?void 0:t.placeholder),children:K||D}),f(`span`,{className:t.icon,"aria-hidden":`true`,children:`📅`})]}),p(`div`,{role:`dialog`,className:t.panel,"data-state":P.value?`open`:`closed`,children:[b&&b.length>0&&f(`div`,{className:t.presets,children:b.map(e=>f(`button`,{type:`button`,className:t.preset,onClick:()=>applyPreset(e),children:e.label},e.id??e.label))}),p(`div`,{className:t.calendars,children:[f(`div`,{className:t.calNav,children:f(`button`,{type:`button`,className:t.navButton,"aria-label":A,onClick:()=>advance(-1),children:`‹`})}),f(e,{month:z.value,year:R.value,...J}),f(e,{month:q.month,year:q.year,...J}),f(`div`,{className:t.calNav,children:f(`button`,{type:`button`,className:t.navButton,"aria-label":j,onClick:()=>advance(1),children:`›`})})]}),p(`div`,{className:t.footer,children:[f(`button`,{type:`button`,className:t.clearBtn,onClick:clear,children:k}),f(`button`,{type:`button`,className:t.applyBtn,onClick:closePanel,children:O})]})]})]})}export{DateRangePicker};
@@ -1 +1 @@
1
- "use client";import e from"./dock.module.js";import{getLinkComponent as t,useSignals as n}from"@cascivo/core";import{builtin as r,t as i}from"@cascivo/i18n";import{jsx as a,jsxs as o}from"react/jsx-runtime";function s({items:s,activeIndex:c,className:l,ariaLabel:u,label:d}){return n(),a(`nav`,{"aria-label":u??d??i(r.dock.nav),className:[e.dock,l].filter(Boolean).join(` `),children:s.map((n,r)=>{let i=r===c;return o(n.href?t():`button`,{className:e.item,"data-active":i||void 0,"aria-current":i?`page`:void 0,...n.href?{href:n.href}:{},type:n.href?void 0:`button`,onClick:n.onClick,children:[a(`span`,{className:e.icon,"aria-hidden":`true`,children:n.icon}),a(`span`,{className:e.label,children:n.label})]},n.id??`${r}-${n.label}`)})})}export{s as Dock};
1
+ "use client";import e from"./dock.module.js";import{getLinkComponent as t,useSignals as n}from"@cascivo/core";import{builtin as r,t as i}from"@cascivo/i18n";import{jsx as a,jsxs as o}from"react/jsx-runtime";function Dock({items:s,activeIndex:c,className:l,ariaLabel:u,label:d}){return n(),a(`nav`,{"aria-label":u??d??i(r.dock.nav),className:[e.dock,l].filter(Boolean).join(` `),children:s.map((n,r)=>{let i=r===c;return o(n.href?t():`button`,{className:e.item,"data-active":i||void 0,"aria-current":i?`page`:void 0,...n.href?{href:n.href}:{},type:n.href?void 0:`button`,onClick:n.onClick,children:[a(`span`,{className:e.icon,"aria-hidden":`true`,children:n.icon}),a(`span`,{className:e.label,children:n.label})]},n.id??`${r}-${n.label}`)})})}export{Dock};
@@ -1 +1 @@
1
- "use client";import e from"./drawer.module.js";import{useId as t}from"react";import{DismissableLayer as n,FocusScope as r,Portal as i,Presence as a,cn as o,useControllableSignal as s,useDraggable as c,useScrollLock as l,useSignals as u}from"@cascivo/core";import{builtin as d,t as f}from"@cascivo/i18n";import{jsx as p,jsxs as m}from"react/jsx-runtime";var h=80;function g({open:g,defaultOpen:_,onOpenChange:v,side:y=`end`,size:b,title:x,description:S,children:C,labels:w,className:T,swipeToDismiss:E=!1}){u();let[D,O]=s({value:g,defaultValue:_??!1,onChange:v});l(D);let k=y===`top`||y===`bottom`?`y`:`x`,{handleRef:A,offset:j,isDragging:M,reset:N}=c({isDisabled:!E,axis:k,onDragEnd:e=>{let t=k===`y`?e.y:e.x,n=y===`end`&&t>h||y===`start`&&t<-80||y===`bottom`&&t>h||y===`top`&&t<-80;N(),n&&O(!1)}}),P=t(),F=t(),I=w?.close??f(d.drawer.close),L={...b?{"--_drawer-size":b}:{},...E?{"--_drawer-drag-x":`${j.value.x}px`,"--_drawer-drag-y":`${j.value.y}px`}:{}};return p(i,{children:p(a,{present:D,children:p(`div`,{className:e.overlay,"data-side":y,children:p(n,{onDismiss:()=>O(!1),children:p(r,{trapped:!0,restoreFocus:!0,autoFocus:!0,children:m(`div`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":x?P:void 0,"aria-describedby":S?F:void 0,"data-side":y,"data-dragging":E&&M.value?``:void 0,className:o(e.panel,T),style:L,children:[(x||S)&&m(`div`,{className:e.header,ref:E?A:void 0,children:[m(`div`,{className:e.heading,children:[x&&p(`h2`,{id:P,className:e.title,children:x}),S&&p(`p`,{id:F,className:e.description,children:S})]}),p(`button`,{type:`button`,"aria-label":I,onClick:()=>O(!1),className:e.close,children:p(`svg`,{"aria-hidden":`true`,viewBox:`0 0 16 16`,className:e.closeIcon,children:p(`path`,{d:`M4 4l8 8M12 4l-8 8`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})})]}),p(`div`,{className:e.body,"data-cascivo-drawer-body":``,children:C})]})})})})})})}export{g as Drawer};
1
+ "use client";import e from"./drawer.module.js";import{useId as t}from"react";import{DismissableLayer as n,FocusScope as r,Portal as i,Presence as a,cn as o,useControllableSignal as s,useDraggable as c,useScrollLock as l,useSignals as u}from"@cascivo/core";import{builtin as d,t as f}from"@cascivo/i18n";import{jsx as p,jsxs as m}from"react/jsx-runtime";var h=80;function Drawer({open:g,defaultOpen:_,onOpenChange:v,side:y=`end`,size:b,title:x,description:S,children:C,labels:w,className:T,swipeToDismiss:E=!1}){u();let[D,O]=s({value:g,defaultValue:_??!1,onChange:v});l(D);let k=y===`top`||y===`bottom`?`y`:`x`,{handleRef:A,offset:j,isDragging:M,reset:N}=c({isDisabled:!E,axis:k,onDragEnd:e=>{let t=k===`y`?e.y:e.x,n=y===`end`&&t>h||y===`start`&&t<-80||y===`bottom`&&t>h||y===`top`&&t<-80;N(),n&&O(!1)}}),P=t(),F=t(),I=w?.close??f(d.drawer.close),L={...b?{"--_drawer-size":b}:{},...E?{"--_drawer-drag-x":`${j.value.x}px`,"--_drawer-drag-y":`${j.value.y}px`}:{}};return p(i,{children:p(a,{present:D,children:p(`div`,{className:e.overlay,"data-side":y,children:p(n,{onDismiss:()=>O(!1),children:p(r,{trapped:!0,restoreFocus:!0,autoFocus:!0,children:m(`div`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":x?P:void 0,"aria-describedby":S?F:void 0,"data-side":y,"data-dragging":E&&M.value?``:void 0,className:o(e.panel,T),style:L,children:[(x||S)&&m(`div`,{className:e.header,ref:E?A:void 0,children:[m(`div`,{className:e.heading,children:[x&&p(`h2`,{id:P,className:e.title,children:x}),S&&p(`p`,{id:F,className:e.description,children:S})]}),p(`button`,{type:`button`,"aria-label":I,onClick:()=>O(!1),className:e.close,children:p(`svg`,{"aria-hidden":`true`,viewBox:`0 0 16 16`,className:e.closeIcon,children:p(`path`,{d:`M4 4l8 8M12 4l-8 8`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})})]}),p(`div`,{className:e.body,"data-cascivo-drawer-body":``,children:C})]})})})})})})}export{Drawer};
@@ -1 +1 @@
1
- "use client";import e from"./dropdown.module.js";import{cloneElement as t,useRef as n}from"react";import{composeRefs as r,createMachine as i,focusElement as a,useEffectPropSignal as o,useMachine as s,useSignal as c,useSignalEffect as l,useSignals as u}from"@cascivo/core";import{jsx as d,jsxs as f}from"react/jsx-runtime";var p=i({initial:`closed`,states:{closed:{on:{OPEN:`open`}},open:{on:{CLOSE:`closed`}}}});function m(e){return!(`kind`in e)}function h({trigger:i,items:h,onSelect:g,placement:_=`bottom-start`,open:v,onOpenChange:y}){u();let[b,x]=s(p),S=n(null),C=n(null),w=n(null),T=n([]),E=c(-1),D=v!==void 0,O=D?v:b.value===`open`,k=o(O),A=h.map((e,t)=>({item:e,index:t})).filter(({item:e})=>m(e)&&!e.disabled).map(({index:e})=>e),j=e=>{D||x(e?`OPEN`:`CLOSE`),y?.(e)};l(()=>{let e=E.value;k.value&&e>=0&&T.current[e]?.focus()}),l(()=>{k.value?E.value=A[0]??-1:E.value=-1}),l(()=>{k.value?w.current?.showPopover():w.current?.hidePopover()}),l(()=>{let e=w.current;if(!e)return;let t=e=>{e.newState===`closed`&&j(!1)};return e.addEventListener(`toggle`,t),()=>e.removeEventListener(`toggle`,t)});let M=e=>{let t=h[e];!t||!m(t)||t.disabled||(g?.(t.value),j(!1),a(C.current))},N=e=>{A.length!==0&&(E.value=A[(A.indexOf(E.value)+e+A.length)%A.length]??-1)},P=e=>{switch(e.key){case`ArrowDown`:e.preventDefault(),N(1);break;case`ArrowUp`:e.preventDefault(),N(-1);break;case`Home`:e.preventDefault(),E.value=A[0]??-1;break;case`End`:e.preventDefault(),E.value=A[A.length-1]??-1;break;case`Escape`:e.preventDefault(),j(!1),a(C.current);break;case`Enter`:case` `:e.preventDefault(),M(E.value);break}},F=i,I=t(F,{ref:r(C,F.props.ref),onClick:e=>{F.props.onClick?.(e),j(!O)},"aria-haspopup":`menu`,"aria-expanded":O});return f(`div`,{ref:S,className:e.root,children:[I,d(`div`,{ref:w,popover:`auto`,role:`menu`,"data-placement":_,"data-state":O?`open`:`closed`,className:e.menu,onKeyDown:P,children:h.map((t,n)=>m(t)?f(`button`,{type:`button`,role:`menuitem`,ref:e=>{T.current[n]=e},tabIndex:E.value===n?0:-1,disabled:t.disabled,className:e.item,onClick:()=>M(n),children:[t.icon&&d(`span`,{className:e.icon,"aria-hidden":`true`,children:t.icon}),t.label]},t.value):d(`div`,{role:`separator`,className:e.separator},`sep-${n}`))})]})}export{h as Dropdown};
1
+ "use client";import e from"./dropdown.module.js";import{cloneElement as t,useRef as n}from"react";import{composeRefs as r,createMachine as i,focusElement as a,useEffectPropSignal as o,useMachine as s,useSignal as c,useSignalEffect as l,useSignals as u}from"@cascivo/core";import{jsx as d,jsxs as f}from"react/jsx-runtime";var p=i({initial:`closed`,states:{closed:{on:{OPEN:`open`}},open:{on:{CLOSE:`closed`}}}});function isMenuItem(e){return!(`kind`in e)}function Dropdown({trigger:i,items:m,onSelect:h,placement:g=`bottom-start`,open:_,onOpenChange:v}){u();let[y,b]=s(p),x=n(null),S=n(null),C=n(null),w=n([]),T=c(-1),E=_!==void 0,D=E?_:y.value===`open`,O=o(D),k=m.map((e,t)=>({item:e,index:t})).filter(({item:e})=>isMenuItem(e)&&!e.disabled).map(({index:e})=>e),setOpen=e=>{E||b(e?`OPEN`:`CLOSE`),v?.(e)};l(()=>{let e=T.value;O.value&&e>=0&&w.current[e]?.focus()}),l(()=>{O.value?T.value=k[0]??-1:T.value=-1}),l(()=>{O.value?C.current?.showPopover():C.current?.hidePopover()}),l(()=>{let e=C.current;if(!e)return;let handleToggle=e=>{e.newState===`closed`&&setOpen(!1)};return e.addEventListener(`toggle`,handleToggle),()=>e.removeEventListener(`toggle`,handleToggle)});let selectAt=e=>{let t=m[e];!t||!isMenuItem(t)||t.disabled||(h?.(t.value),setOpen(!1),a(S.current))},moveActive=e=>{k.length!==0&&(T.value=k[(k.indexOf(T.value)+e+k.length)%k.length]??-1)},handleMenuKeyDown=e=>{switch(e.key){case`ArrowDown`:e.preventDefault(),moveActive(1);break;case`ArrowUp`:e.preventDefault(),moveActive(-1);break;case`Home`:e.preventDefault(),T.value=k[0]??-1;break;case`End`:e.preventDefault(),T.value=k[k.length-1]??-1;break;case`Escape`:e.preventDefault(),setOpen(!1),a(S.current);break;case`Enter`:case` `:e.preventDefault(),selectAt(T.value);break}},A=i,j=t(A,{ref:r(S,A.props.ref),onClick:e=>{A.props.onClick?.(e),setOpen(!D)},"aria-haspopup":`menu`,"aria-expanded":D});return f(`div`,{ref:x,className:e.root,children:[j,d(`div`,{ref:C,popover:`auto`,role:`menu`,"data-placement":g,"data-state":D?`open`:`closed`,className:e.menu,onKeyDown:handleMenuKeyDown,children:m.map((t,n)=>isMenuItem(t)?f(`button`,{type:`button`,role:`menuitem`,ref:e=>{w.current[n]=e},tabIndex:T.value===n?0:-1,disabled:t.disabled,className:e.item,onClick:()=>selectAt(n),children:[t.icon&&d(`span`,{className:e.icon,"aria-hidden":`true`,children:t.icon}),t.label]},t.value):d(`div`,{role:`separator`,className:e.separator},`sep-${n}`))})]})}export{Dropdown};
@@ -1 +1 @@
1
- "use client";import e from"./editable.module.js";import{useRef as t}from"react";import{cn as n,useSignal as r,useSignals as i}from"@cascivo/core";import{jsx as a,jsxs as o}from"react/jsx-runtime";function s(e){e&&(e.focus(),e.select())}function c({value:c,onValueChange:l,placeholder:u,disabled:d=!1,submitOnBlur:f=!0,onCancel:p,className:m,id:h,"aria-label":g,"aria-labelledby":_,"aria-describedby":v,"aria-invalid":y,tabIndex:b,...x}){i();let S=r(!1),C=r(c),w=t(p);w.current=p;let T=t(l);T.current=l;let E={id:h,"aria-label":g,"aria-labelledby":_,"aria-describedby":v,"aria-invalid":y,tabIndex:b};S.value||(C.value=c);function D(){T.current(C.value),S.value=!1}function O(){C.value=c,S.value=!1,w.current?.()}return S.value?a(`div`,{className:n(e.wrapper,e.editing,m),...x,children:a(`input`,{ref:s,className:e.input,...E,value:C.value,onChange:e=>{C.value=e.currentTarget.value},onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),D()):e.key===`Escape`&&(e.preventDefault(),O())},onBlur:()=>{f?D():O()}})}):a(`div`,{className:n(e.wrapper,m),"data-disabled":d?``:void 0,...x,children:o(`button`,{type:`button`,className:e.preview,...E,disabled:d,onClick:()=>{d||(S.value=!0)},children:[a(`span`,{className:e[`preview-text`],children:c||a(`span`,{className:e.placeholder,children:u})}),a(`span`,{className:e[`edit-icon`],"aria-hidden":`true`})]})})}export{c as Editable};
1
+ "use client";import e from"./editable.module.js";import{useRef as t}from"react";import{cn as n,useSignal as r,useSignals as i}from"@cascivo/core";import{jsx as a,jsxs as o}from"react/jsx-runtime";function focusOnMount(e){e&&(e.focus(),e.select())}function Editable({value:s,onValueChange:c,placeholder:l,disabled:u=!1,submitOnBlur:d=!0,onCancel:f,className:p,id:m,"aria-label":h,"aria-labelledby":g,"aria-describedby":_,"aria-invalid":v,tabIndex:y,...b}){i();let x=r(!1),S=r(s),C=t(f);C.current=f;let w=t(c);w.current=c;let T={id:m,"aria-label":h,"aria-labelledby":g,"aria-describedby":_,"aria-invalid":v,tabIndex:y};x.value||(S.value=s);function confirm(){w.current(S.value),x.value=!1}function cancel(){S.value=s,x.value=!1,C.current?.()}return x.value?a(`div`,{className:n(e.wrapper,e.editing,p),...b,children:a(`input`,{ref:focusOnMount,className:e.input,...T,value:S.value,onChange:e=>{S.value=e.currentTarget.value},onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),confirm()):e.key===`Escape`&&(e.preventDefault(),cancel())},onBlur:()=>{d?confirm():cancel()}})}):a(`div`,{className:n(e.wrapper,p),"data-disabled":u?``:void 0,...b,children:o(`button`,{type:`button`,className:e.preview,...T,disabled:u,onClick:()=>{u||(x.value=!0)},children:[a(`span`,{className:e[`preview-text`],children:s||a(`span`,{className:e.placeholder,children:l})}),a(`span`,{className:e[`edit-icon`],"aria-hidden":`true`})]})})}export{Editable};
@@ -1 +1 @@
1
- import e from"./empty-state.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n,jsxs as r}from"react/jsx-runtime";function i({icon:i,title:a,description:o,action:s,size:c=`md`,className:l,...u}){return r(`div`,{"data-size":c,className:t(e[`empty-state`],l),...u,children:[i&&n(`span`,{className:e.icon,"aria-hidden":`true`,children:i}),n(`h3`,{className:e.title,children:a}),o&&n(`p`,{className:e.description,children:o}),s&&n(`div`,{className:e.action,children:s})]})}export{i as EmptyState};
1
+ import e from"./empty-state.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n,jsxs as r}from"react/jsx-runtime";function EmptyState({icon:i,title:a,description:o,action:s,size:c=`md`,className:l,...u}){return r(`div`,{"data-size":c,className:t(e[`empty-state`],l),...u,children:[i&&n(`span`,{className:e.icon,"aria-hidden":`true`,children:i}),n(`h3`,{className:e.title,children:a}),o&&n(`p`,{className:e.description,children:o}),s&&n(`div`,{className:e.action,children:s})]})}export{EmptyState};
@@ -1 +1 @@
1
- "use client";import e from"./fab.module.js";import{useId as t,useRef as n}from"react";import{DismissableLayer as r,Presence as i,cn as a,focusElement as o,useControllableSignal as s,useRovingFocus as c,useSignalEffect as l,useSignals as u}from"@cascivo/core";import{jsx as d,jsxs as f}from"react/jsx-runtime";function p({children:p,ariaLabel:m,label:h,onClick:g,actions:_,position:v=`bottom-end`,open:y,defaultOpen:b,onOpenChange:x,className:S}){u();let C=_!=null&&_.length>0,[w,T]=s({value:y,defaultValue:b??!1,onChange:x}),E=c({orientation:`vertical`,loop:!0}),D=n(null),O=n(null),k=t(),A=n(!1);l(()=>{let e=C&&w.value;e&&!A.current?O.current?.querySelector(`[role="menuitem"]:not([aria-disabled="true"])`)?.focus():!e&&A.current&&o(D.current),A.current=e});let j=e=>{e.disabled||(e.onSelect(),T(!1))},M=d(`button`,{ref:D,type:`button`,"aria-label":h??m,className:e.fab,...C?{"aria-haspopup":`menu`,"aria-expanded":w.value,"aria-controls":k,"data-state":w.value?`open`:`closed`,onClick:()=>T(!w.value)}:{onClick:g},children:d(`span`,{className:e.icon,"aria-hidden":`true`,children:p})});return C?d(r,{onDismiss:()=>T(!1),escapeDismisses:w.value,disableOutsidePointer:!w.value,children:f(`div`,{className:a(e.root,S),"data-position":v,children:[d(i,{present:w,children:d(`menu`,{ref:O,id:k,role:`menu`,"aria-label":h??m,className:e.dial,children:_.map((t,n)=>{let r=E.getItemProps(n);return d(`li`,{role:`presentation`,className:e.dialItem,children:f(`button`,{ref:r.ref,type:`button`,role:`menuitem`,tabIndex:r.tabIndex,"aria-disabled":t.disabled||void 0,className:e.action,onKeyDown:r.onKeyDown,onFocus:r.onFocus,onClick:()=>j(t),children:[d(`span`,{className:e.actionLabel,children:t.label}),d(`span`,{className:e.actionIcon,"aria-hidden":`true`,children:t.icon})]})},t.id??n)})})}),M]})}):d(`div`,{className:a(e.root,S),"data-position":v,children:M})}export{p as Fab};
1
+ "use client";import e from"./fab.module.js";import{useId as t,useRef as n}from"react";import{DismissableLayer as r,Presence as i,cn as a,focusElement as o,useControllableSignal as s,useRovingFocus as c,useSignalEffect as l,useSignals as u}from"@cascivo/core";import{jsx as d,jsxs as f}from"react/jsx-runtime";function Fab({children:p,ariaLabel:m,label:h,onClick:g,actions:_,position:v=`bottom-end`,open:y,defaultOpen:b,onOpenChange:x,className:S}){u();let C=_!=null&&_.length>0,[w,T]=s({value:y,defaultValue:b??!1,onChange:x}),E=c({orientation:`vertical`,loop:!0}),D=n(null),O=n(null),k=t(),A=n(!1);l(()=>{let e=C&&w.value;e&&!A.current?O.current?.querySelector(`[role="menuitem"]:not([aria-disabled="true"])`)?.focus():!e&&A.current&&o(D.current),A.current=e});let selectAction=e=>{e.disabled||(e.onSelect(),T(!1))},j=d(`button`,{ref:D,type:`button`,"aria-label":h??m,className:e.fab,...C?{"aria-haspopup":`menu`,"aria-expanded":w.value,"aria-controls":k,"data-state":w.value?`open`:`closed`,onClick:()=>T(!w.value)}:{onClick:g},children:d(`span`,{className:e.icon,"aria-hidden":`true`,children:p})});return C?d(r,{onDismiss:()=>T(!1),escapeDismisses:w.value,disableOutsidePointer:!w.value,children:f(`div`,{className:a(e.root,S),"data-position":v,children:[d(i,{present:w,children:d(`menu`,{ref:O,id:k,role:`menu`,"aria-label":h??m,className:e.dial,children:_.map((t,n)=>{let r=E.getItemProps(n);return d(`li`,{role:`presentation`,className:e.dialItem,children:f(`button`,{ref:r.ref,type:`button`,role:`menuitem`,tabIndex:r.tabIndex,"aria-disabled":t.disabled||void 0,className:e.action,onKeyDown:r.onKeyDown,onFocus:r.onFocus,onClick:()=>selectAction(t),children:[d(`span`,{className:e.actionLabel,children:t.label}),d(`span`,{className:e.actionIcon,"aria-hidden":`true`,children:t.icon})]})},t.id??n)})})}),j]})}):d(`div`,{className:a(e.root,S),"data-position":v,children:j})}export{Fab};
@@ -1 +1 @@
1
- import{Label as e}from"../label/label.js";import t from"./field.module.js";import{cn as n,useId as r}from"@cascivo/core/pure";import{Children as i,cloneElement as a,isValidElement as o}from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";var l=new Set;function u(){return globalThis.process?.env?.NODE_ENV!==`production`}function d(e,t){if(!u()||e==null||t.props.label==null)return;let n=String(e);l.has(n)||(l.add(n),console.warn(`cascivo Field: both the Field and its child control define a \`label\` (${n}). Omit the child's \`label\` inside a Field — it renders a second <label> for the same control. The Field owns the label.`))}var f=new Set;function p(e,t){if(!u()||e==null||t.props.hint==null)return;let n=String(e);f.has(n)||(f.add(n),console.warn(`cascivo Field: both the Field and its child control define supporting text (${n}). Omit the child's \`hint\` inside a Field — the Field owns it, and only the Field's is wired into aria-describedby.`))}function m({label:l,description:u,hint:f,error:m,required:h=!1,disabled:g=!1,id:_,children:v,className:y}){let b=u??f,x=r(`cascade-field`),S=_??x,C=`${S}-description`,w=`${S}-error`,T=`${S}-label`,E=[b?C:null,m?w:null].filter(Boolean).join(` `)||void 0,D={id:S};l!=null&&(D[`aria-labelledby`]=T),E&&(D[`aria-describedby`]=E),m&&(D[`aria-invalid`]=!0),(g||v.props.disabled)&&(D.disabled=!0),o(v)&&(d(l,v),p(b,v));let O=o(v)?a(i.only(v),D):v;return c(`div`,{className:n(t.field,y),"data-disabled":g?``:void 0,children:[l&&s(e,{id:T,htmlFor:S,required:h,disabled:g,children:l}),O,b&&s(`p`,{id:C,className:t.description,children:b}),m&&s(`p`,{id:w,role:`alert`,className:t.error,children:m})]})}export{m as Field};
1
+ import{Label as e}from"../label/label.js";import t from"./field.module.js";import{cn as n,useId as r}from"@cascivo/core/pure";import{Children as i,cloneElement as a,isValidElement as o}from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";var l=new Set;function isDev(){return globalThis.process?.env?.NODE_ENV!==`production`}function warnIfDoubleLabel(e,t){if(!isDev()||e==null||t.props.label==null)return;let n=String(e);l.has(n)||(l.add(n),console.warn(`cascivo Field: both the Field and its child control define a \`label\` (${n}). Omit the child's \`label\` inside a Field — it renders a second <label> for the same control. The Field owns the label.`))}var u=new Set;function warnIfDoubleHint(e,t){if(!isDev()||e==null||t.props.hint==null)return;let n=String(e);u.has(n)||(u.add(n),console.warn(`cascivo Field: both the Field and its child control define supporting text (${n}). Omit the child's \`hint\` inside a Field — the Field owns it, and only the Field's is wired into aria-describedby.`))}function Field({label:l,description:u,hint:d,error:f,required:p=!1,disabled:m=!1,id:h,children:g,className:_}){let v=u??d,y=r(`cascade-field`),b=h??y,x=`${b}-description`,S=`${b}-error`,C=`${b}-label`,w=[v?x:null,f?S:null].filter(Boolean).join(` `)||void 0,T={id:b};l!=null&&(T[`aria-labelledby`]=C),w&&(T[`aria-describedby`]=w),f&&(T[`aria-invalid`]=!0),(m||g.props.disabled)&&(T.disabled=!0),o(g)&&(warnIfDoubleLabel(l,g),warnIfDoubleHint(v,g));let E=o(g)?a(i.only(g),T):g;return c(`div`,{className:n(t.field,_),"data-disabled":m?``:void 0,children:[l&&s(e,{id:C,htmlFor:b,required:p,disabled:m,children:l}),E,v&&s(`p`,{id:x,className:t.description,children:v}),f&&s(`p`,{id:S,role:`alert`,className:t.error,children:f})]})}export{Field};
@@ -1 +1 @@
1
- "use client";import{Spinner as e}from"../spinner/spinner.js";import t from"./file-uploader.module.js";import{useRef as n}from"react";import{cn as r,useId as i,useSignal as a,useSignals as o}from"@cascivo/core";import{builtin as s,currentLocale as c,t as l}from"@cascivo/i18n";import{jsx as u,jsxs as d}from"react/jsx-runtime";function f(e,t){let n=t.split(`,`).map(e=>e.trim()).filter(Boolean);return n.length===0?!0:n.some(t=>t.startsWith(`.`)?e.name.toLowerCase().endsWith(t.toLowerCase()):t.endsWith(`/*`)?e.type.startsWith(t.slice(0,-1)):e.type===t)}function p(e,t){let[n,r]=e>=1024*1024?[e/(1024*1024),`megabyte`]:e>=1024?[e/1024,`kilobyte`]:[e,`byte`];try{return new Intl.NumberFormat(t,{style:`unit`,unit:r,unitDisplay:`short`,maximumFractionDigits:r===`byte`?0:1}).format(n)}catch{return new Intl.NumberFormat(t,{maximumFractionDigits:r===`byte`?0:1}).format(n)}}function m(e,t,n,r){return e.some(e=>e.status===`error`)?r:e.some(e=>e.status===`uploading`)?t:n}function h({files:h=[],onFilesAdded:g,onRemove:_,multiple:v=!1,accept:y,maxSize:b,onRejected:x,label:S,ariaLabel:C,hint:w,labels:T,disabled:E=!1,className:D}){o();let O=c(),k=n(null),A=a(!1),j=S??T?.label??l(s.fileUploader.label),M=T?.drop??l(s.fileUploader.drop),N=T?.uploading??l(s.fileUploader.uploading),P=T?.complete??l(s.fileUploader.complete),F=T?.error??l(s.fileUploader.error),I=e=>T?.remove?T.remove.replaceAll(`{name}`,e):l(s.fileUploader.remove,{name:e}),L=i(`cascivo-uploader`),R=`${L}-label`,z=`${L}-hint`,B=`${L}-status`,V=e=>{if(!e||e.length===0)return;let t=v?Array.from(e):Array.from(e).slice(0,1),n=[],r=[],i=[];for(let e of t)y&&!f(e,y)?r.push(e):b!==void 0&&e.size>b?i.push(e):n.push(e);r.length>0&&x?.(r,`type`),i.length>0&&x?.(i,`size`),n.length>0&&g?.(n)};return d(`div`,{className:r(t.uploader,D),children:[u(`span`,{id:R,className:t.label,children:j}),u(`input`,{ref:k,type:`file`,className:t.input,tabIndex:-1,"aria-labelledby":R,multiple:v,accept:y,disabled:E,onChange:e=>{V(e.target.files),e.target.value=``}}),u(`button`,{type:`button`,className:t.zone,"data-state":A.value?`dragover`:`idle`,disabled:E,"aria-labelledby":C?void 0:R,"aria-label":C,"aria-describedby":w?z:void 0,onClick:()=>k.current?.click(),onDragEnter:e=>{e.preventDefault(),E||(A.value=!0)},onDragOver:e=>{e.preventDefault(),E||(e.dataTransfer.dropEffect=`copy`)},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||(A.value=!1)},onDrop:e=>{e.preventDefault(),A.value=!1,!E&&V(e.dataTransfer.files)},children:u(`span`,{className:t.zoneText,children:M})}),w&&u(`span`,{id:z,className:t.hint,children:w}),u(`span`,{id:B,className:t.srOnly,role:`status`,"aria-live":`polite`,children:h.length>0?l(s.fileUploader.status,{count:h.length,state:m(h,N,P,F)}):``}),h.length>0&&u(`ul`,{className:t.list,children:h.map(n=>d(`li`,{className:t.file,"data-state":n.status,children:[d(`span`,{className:t.status,children:[n.status===`uploading`&&u(e,{size:`sm`,label:N}),n.status===`complete`&&u(`span`,{className:t[`glyph-complete`],role:`img`,"aria-label":P,children:`✓`}),n.status===`error`&&u(`span`,{className:t[`glyph-error`],role:`img`,"aria-label":F,children:`✕`})]}),u(`span`,{className:t.name,children:n.name}),n.size!==void 0&&u(`span`,{className:t.size,children:p(n.size,O)}),u(`button`,{type:`button`,className:t.remove,"aria-label":I(n.name),disabled:E,onClick:()=>_?.(n.id),children:`✕`}),n.status===`error`&&n.errorMessage&&u(`span`,{className:t[`error-message`],role:`alert`,children:n.errorMessage})]},n.id))})]})}export{h as FileUploader};
1
+ "use client";import{Spinner as e}from"../spinner/spinner.js";import t from"./file-uploader.module.js";import{useRef as n}from"react";import{cn as r,useId as i,useSignal as a,useSignals as o}from"@cascivo/core";import{builtin as s,currentLocale as c,t as l}from"@cascivo/i18n";import{jsx as u,jsxs as d}from"react/jsx-runtime";function matchesAccept(e,t){let n=t.split(`,`).map(e=>e.trim()).filter(Boolean);return n.length===0?!0:n.some(t=>t.startsWith(`.`)?e.name.toLowerCase().endsWith(t.toLowerCase()):t.endsWith(`/*`)?e.type.startsWith(t.slice(0,-1)):e.type===t)}function formatSize(e,t){let[n,r]=e>=1024*1024?[e/(1024*1024),`megabyte`]:e>=1024?[e/1024,`kilobyte`]:[e,`byte`];try{return new Intl.NumberFormat(t,{style:`unit`,unit:r,unitDisplay:`short`,maximumFractionDigits:r===`byte`?0:1}).format(n)}catch{return new Intl.NumberFormat(t,{maximumFractionDigits:r===`byte`?0:1}).format(n)}}function statusSummary(e,t,n,r){return e.some(e=>e.status===`error`)?r:e.some(e=>e.status===`uploading`)?t:n}function FileUploader({files:f=[],onFilesAdded:p,onRemove:m,multiple:h=!1,accept:g,maxSize:_,onRejected:v,label:y,ariaLabel:b,hint:x,labels:S,disabled:C=!1,className:w}){o();let T=c(),E=n(null),D=a(!1),O=y??S?.label??l(s.fileUploader.label),k=S?.drop??l(s.fileUploader.drop),A=S?.uploading??l(s.fileUploader.uploading),j=S?.complete??l(s.fileUploader.complete),M=S?.error??l(s.fileUploader.error),resolveRemove=e=>S?.remove?S.remove.replaceAll(`{name}`,e):l(s.fileUploader.remove,{name:e}),N=i(`cascivo-uploader`),P=`${N}-label`,F=`${N}-hint`,I=`${N}-status`,processFiles=e=>{if(!e||e.length===0)return;let t=h?Array.from(e):Array.from(e).slice(0,1),n=[],r=[],i=[];for(let e of t)g&&!matchesAccept(e,g)?r.push(e):_!==void 0&&e.size>_?i.push(e):n.push(e);r.length>0&&v?.(r,`type`),i.length>0&&v?.(i,`size`),n.length>0&&p?.(n)};return d(`div`,{className:r(t.uploader,w),children:[u(`span`,{id:P,className:t.label,children:O}),u(`input`,{ref:E,type:`file`,className:t.input,tabIndex:-1,"aria-labelledby":P,multiple:h,accept:g,disabled:C,onChange:e=>{processFiles(e.target.files),e.target.value=``}}),u(`button`,{type:`button`,className:t.zone,"data-state":D.value?`dragover`:`idle`,disabled:C,"aria-labelledby":b?void 0:P,"aria-label":b,"aria-describedby":x?F:void 0,onClick:()=>E.current?.click(),onDragEnter:e=>{e.preventDefault(),C||(D.value=!0)},onDragOver:e=>{e.preventDefault(),C||(e.dataTransfer.dropEffect=`copy`)},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||(D.value=!1)},onDrop:e=>{e.preventDefault(),D.value=!1,!C&&processFiles(e.dataTransfer.files)},children:u(`span`,{className:t.zoneText,children:k})}),x&&u(`span`,{id:F,className:t.hint,children:x}),u(`span`,{id:I,className:t.srOnly,role:`status`,"aria-live":`polite`,children:f.length>0?l(s.fileUploader.status,{count:f.length,state:statusSummary(f,A,j,M)}):``}),f.length>0&&u(`ul`,{className:t.list,children:f.map(n=>d(`li`,{className:t.file,"data-state":n.status,children:[d(`span`,{className:t.status,children:[n.status===`uploading`&&u(e,{size:`sm`,label:A}),n.status===`complete`&&u(`span`,{className:t[`glyph-complete`],role:`img`,"aria-label":j,children:`✓`}),n.status===`error`&&u(`span`,{className:t[`glyph-error`],role:`img`,"aria-label":M,children:`✕`})]}),u(`span`,{className:t.name,children:n.name}),n.size!==void 0&&u(`span`,{className:t.size,children:formatSize(n.size,T)}),u(`button`,{type:`button`,className:t.remove,"aria-label":resolveRemove(n.name),disabled:C,onClick:()=>m?.(n.id),children:`✕`}),n.status===`error`&&n.errorMessage&&u(`span`,{className:t[`error-message`],role:`alert`,children:n.errorMessage})]},n.id))})]})}export{FileUploader};
@@ -1 +1 @@
1
- "use client";import e from"./filter.module.js";import{useControllableSignal as t,useSignals as n}from"@cascivo/core";import{jsx as r}from"react/jsx-runtime";function i({options:i,value:a,defaultValue:o=[],onValueChange:s,multi:c=!1,multiple:l,variant:u=`pill`,className:d,ariaLabel:f,label:p,...m}){n();let h=l??c,[g,_]=t({value:a,defaultValue:o,onChange:s});function v(e){let t=g.value,n;n=h?t.includes(e)?t.filter(t=>t!==e):[...t,e]:t.includes(e)?[]:[e],_(n)}return r(`div`,{role:`group`,className:[e.filter,d].filter(Boolean).join(` `),"data-variant":u,"aria-label":m[`aria-label`]??f??p,...m,children:i.map(t=>r(`button`,{type:`button`,className:e.item,"data-selected":g.value.includes(t.value)||void 0,onClick:()=>v(t.value),"aria-pressed":g.value.includes(t.value),children:t.label},t.value))})}export{i as Filter};
1
+ "use client";import e from"./filter.module.js";import{useControllableSignal as t,useSignals as n}from"@cascivo/core";import{jsx as r}from"react/jsx-runtime";function Filter({options:i,value:a,defaultValue:o=[],onValueChange:s,multi:c=!1,multiple:l,variant:u=`pill`,className:d,ariaLabel:f,label:p,...m}){n();let h=l??c,[g,_]=t({value:a,defaultValue:o,onChange:s});function toggle(e){let t=g.value,n;n=h?t.includes(e)?t.filter(t=>t!==e):[...t,e]:t.includes(e)?[]:[e],_(n)}return r(`div`,{role:`group`,className:[e.filter,d].filter(Boolean).join(` `),"data-variant":u,"aria-label":m[`aria-label`]??f??p,...m,children:i.map(t=>r(`button`,{type:`button`,className:e.item,"data-selected":g.value.includes(t.value)||void 0,onClick:()=>toggle(t.value),"aria-pressed":g.value.includes(t.value),children:t.label},t.value))})}export{Filter};
@@ -1 +1 @@
1
- "use client";import e from"./form.module.js";import{batch as t,cn as n,signal as r,useSignal as i,useSignals as a}from"@cascivo/core";import{jsx as o}from"react/jsx-runtime";function s(e){let t=e[0];return t===void 0?``:String(typeof t==`string`||typeof t==`number`?t:t.key)}async function c(e,t){let n=await e[`~standard`].validate(t);if(!(`issues`in n)||n.issues===void 0)return{};let r={};for(let e of n.issues){let t=e.path&&e.path.length>0?s(e.path):``;t&&!(t in r)&&(r[t]=e.message)}return r}function l(e){let n=r({...e.initialValues}),i=r({}),a=r({}),o=r(!1),s=async t=>{let n={};return e.schema&&(n=await c(e.schema,t)),Object.keys(n).length===0&&e.validate&&(n=await e.validate(t)),n},l=0,u=(t,r)=>{if(n.value={...n.value,[t]:r},!e.validateOnChange)return;let a=++l;s(n.value).then(e=>{if(a!==l)return;let n={...i.value},r=e[t];r===void 0?delete n[t]:n[t]=r,i.value=n})};return{values:n,errors:i,touched:a,submitting:o,setValue:u,field(e){return{get value(){return n.value[e]},onChange:t=>u(e,t),onBlur:()=>{a.value={...a.value,[e]:!0}},get error(){return i.value[e]}}},async submit(r){o.value=!0;try{let o=await s(n.value),c=Object.fromEntries(Object.keys(e.initialValues).map(e=>[e,!0]));t(()=>{i.value=o,a.value=c}),Object.keys(o).length===0&&await r(n.value)}finally{o.value=!1}},reset(){t(()=>{n.value={...e.initialValues},i.value={},a.value={}})}}}function u(e){a();let t=i(null);return t.peek()===null&&(t.value=l(e)),t.peek()}function d({form:t,onValid:r,children:i,className:a,...s}){return o(`form`,{noValidate:!0,className:n(e.form,a),onSubmit:e=>{e.preventDefault(),t.submit(r)},...s,children:i})}export{d as Form,l as createForm,u as useForm};
1
+ "use client";import e from"./form.module.js";import{batch as t,cn as n,signal as r,useSignal as i,useSignals as a}from"@cascivo/core";import{jsx as o}from"react/jsx-runtime";function pathHead(e){let t=e[0];return t===void 0?``:String(typeof t==`string`||typeof t==`number`?t:t.key)}async function runSchema(e,t){let n=await e[`~standard`].validate(t);if(!(`issues`in n)||n.issues===void 0)return{};let r={};for(let e of n.issues){let t=e.path&&e.path.length>0?pathHead(e.path):``;t&&!(t in r)&&(r[t]=e.message)}return r}function createForm(e){let n=r({...e.initialValues}),i=r({}),a=r({}),o=r(!1),validateValues=async t=>{let n={};return e.schema&&(n=await runSchema(e.schema,t)),Object.keys(n).length===0&&e.validate&&(n=await e.validate(t)),n},s=0,setValue=(t,r)=>{if(n.value={...n.value,[t]:r},!e.validateOnChange)return;let a=++s;validateValues(n.value).then(e=>{if(a!==s)return;let n={...i.value},r=e[t];r===void 0?delete n[t]:n[t]=r,i.value=n})};return{values:n,errors:i,touched:a,submitting:o,setValue,field(e){return{get value(){return n.value[e]},onChange:t=>setValue(e,t),onBlur:()=>{a.value={...a.value,[e]:!0}},get error(){return i.value[e]}}},async submit(r){o.value=!0;try{let o=await validateValues(n.value),s=Object.fromEntries(Object.keys(e.initialValues).map(e=>[e,!0]));t(()=>{i.value=o,a.value=s}),Object.keys(o).length===0&&await r(n.value)}finally{o.value=!1}},reset(){t(()=>{n.value={...e.initialValues},i.value={},a.value={}})}}}function useForm(e){a();let t=i(null);return t.peek()===null&&(t.value=createForm(e)),t.peek()}function Form({form:t,onValid:r,children:i,className:a,...s}){return o(`form`,{noValidate:!0,className:n(e.form,a),onSubmit:e=>{e.preventDefault(),t.submit(r)},...s,children:i})}export{Form,createForm,useForm};
@@ -1 +1 @@
1
- "use client";import e from"./header.module.js";import{cn as t,getLinkComponent as n,useSignals as r}from"@cascivo/core";import{builtin as i,t as a}from"@cascivo/i18n";import{jsx as o,jsxs as s}from"react/jsx-runtime";function c({brand:c,links:l,actions:u,sticky:d=!1,labels:f,className:p,...m}){r();let h=n(),g=f?.nav??a(i.header.nav);return s(`header`,{role:`banner`,"data-sticky":d||void 0,className:t(e.header,p),...m,children:[c&&o(`div`,{className:e.brand,children:c}),l&&l.length>0&&o(`nav`,{"aria-label":g,className:e.nav,children:o(`ul`,{className:e.list,children:l.map((t,n)=>o(`li`,{children:o(h,{href:t.href,"aria-current":t.active?`page`:void 0,"data-state":t.active?`active`:void 0,className:e.link,children:t.label})},t.id??`${n}-${t.href}`))})}),o(`div`,{className:e.spacer}),u&&o(`div`,{className:e.actions,children:u})]})}export{c as Header};
1
+ "use client";import e from"./header.module.js";import{cn as t,getLinkComponent as n,useSignals as r}from"@cascivo/core";import{builtin as i,t as a}from"@cascivo/i18n";import{jsx as o,jsxs as s}from"react/jsx-runtime";function Header({brand:c,links:l,actions:u,sticky:d=!1,labels:f,className:p,...m}){r();let h=n(),g=f?.nav??a(i.header.nav);return s(`header`,{role:`banner`,"data-sticky":d||void 0,className:t(e.header,p),...m,children:[c&&o(`div`,{className:e.brand,children:c}),l&&l.length>0&&o(`nav`,{"aria-label":g,className:e.nav,children:o(`ul`,{className:e.list,children:l.map((t,n)=>o(`li`,{children:o(h,{href:t.href,"aria-current":t.active?`page`:void 0,"data-state":t.active?`active`:void 0,className:e.link,children:t.label})},t.id??`${n}-${t.href}`))})}),o(`div`,{className:e.spacer}),u&&o(`div`,{className:e.actions,children:u})]})}export{Header};
@@ -1 +1 @@
1
- "use client";import e from"./header-panel.module.js";import{useRef as t}from"react";import{cn as n,focusElement as r,useEffectPropSignal as i,useSignalEffect as a,useSignals as o}from"@cascivo/core";import{builtin as s,t as c}from"@cascivo/i18n";import{jsx as l,jsxs as u}from"react/jsx-runtime";function d({open:d,onClose:f,label:p,children:m,labels:h,className:g}){o();let _=t(null),v=t(null),y=i(d),b=t(f);return b.current=f,a(()=>{let e=_.current;if(e)if(y.value){v.current=document.activeElement;try{e.showPopover()}catch{}e.focus()}else{try{e.hidePopover()}catch{}r(v.current),v.current=null}}),a(()=>{let e=_.current;if(!e)return;let t=e=>{let t=`newState`in e?e.newState===`closed`:!0;y.peek()&&t&&b.current()};return e.addEventListener(`toggle`,t),()=>e.removeEventListener(`toggle`,t)}),u(`div`,{ref:_,popover:`auto`,role:`region`,"aria-label":p,tabIndex:-1,"data-state":d?`open`:`closed`,className:n(e.panel,g),children:[u(`div`,{className:e.header,children:[l(`span`,{className:e.title,children:p}),l(`button`,{type:`button`,"aria-label":h?.close??c(s.headerPanel.close),className:e.close,onClick:()=>b.current(),children:l(`svg`,{viewBox:`0 0 16 16`,width:`14`,height:`14`,"aria-hidden":`true`,children:l(`path`,{d:`M4 4l8 8M12 4l-8 8`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})})]}),l(`div`,{className:e.body,children:m})]})}export{d as HeaderPanel};
1
+ "use client";import e from"./header-panel.module.js";import{useRef as t}from"react";import{cn as n,focusElement as r,useEffectPropSignal as i,useSignalEffect as a,useSignals as o}from"@cascivo/core";import{builtin as s,t as c}from"@cascivo/i18n";import{jsx as l,jsxs as u}from"react/jsx-runtime";function HeaderPanel({open:d,onClose:f,label:p,children:m,labels:h,className:g}){o();let _=t(null),v=t(null),y=i(d),b=t(f);return b.current=f,a(()=>{let e=_.current;if(e)if(y.value){v.current=document.activeElement;try{e.showPopover()}catch{}e.focus()}else{try{e.hidePopover()}catch{}r(v.current),v.current=null}}),a(()=>{let e=_.current;if(!e)return;let handler=e=>{let t=`newState`in e?e.newState===`closed`:!0;y.peek()&&t&&b.current()};return e.addEventListener(`toggle`,handler),()=>e.removeEventListener(`toggle`,handler)}),u(`div`,{ref:_,popover:`auto`,role:`region`,"aria-label":p,tabIndex:-1,"data-state":d?`open`:`closed`,className:n(e.panel,g),children:[u(`div`,{className:e.header,children:[l(`span`,{className:e.title,children:p}),l(`button`,{type:`button`,"aria-label":h?.close??c(s.headerPanel.close),className:e.close,onClick:()=>b.current(),children:l(`svg`,{viewBox:`0 0 16 16`,width:`14`,height:`14`,"aria-hidden":`true`,children:l(`path`,{d:`M4 4l8 8M12 4l-8 8`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})})]}),l(`div`,{className:e.body,children:m})]})}export{HeaderPanel};
@@ -1 +1 @@
1
- import e from"./heading.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";var r={1:`2xl`,2:`xl`,3:`lg`,4:`md`,5:`sm`,6:`sm`};function i({level:i=2,size:a,className:o,children:s,...c}){return n(`h${i}`,{"data-size":a??r[i],className:t(e.heading,o),...c,children:s})}export{i as Heading};
1
+ import e from"./heading.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";var r={1:`2xl`,2:`xl`,3:`lg`,4:`md`,5:`sm`,6:`sm`};function Heading({level:i=2,size:a,className:o,children:s,...c}){return n(`h${i}`,{"data-size":a??r[i],className:t(e.heading,o),...c,children:s})}export{Heading};
@@ -1 +1 @@
1
- "use client";import{usePopover as e}from"../popover/use-popover.js";import t from"./hover-card.module.js";import{createContext as n,useRef as r}from"react";import{useSignalEffect as i,useSignals as a}from"@cascivo/core";import{jsx as o}from"react/jsx-runtime";var s=n(null);function c({children:t,openDelay:n=300,closeDelay:a=100}){let c=e(),l=r(void 0),u=r(void 0),d=r(n);d.current=n;let f=r(a);f.current=a;let p={...c,open:()=>{clearTimeout(u.current),l.current=setTimeout(()=>{c.isOpen.value=!0},d.current)},close:()=>{clearTimeout(l.current),u.current=setTimeout(()=>{c.isOpen.value=!1},f.current)}};return i(()=>()=>{clearTimeout(l.current),clearTimeout(u.current)}),o(s.Provider,{value:p,children:t})}function l({ctx:e,children:n}){a();let{triggerRef:r,anchorName:i,open:s,close:c}=e;return o(`span`,{ref:r,style:{anchorName:i},onMouseEnter:s,onMouseLeave:c,onFocus:s,onBlur:c,className:t.trigger,children:n})}function u({children:e}){return o(s.Consumer,{children:t=>{if(!t)throw Error(`HoverCardTrigger must be inside <HoverCard>`);return o(l,{ctx:t,children:e})}})}function d({ctx:e,children:n,className:r}){a();let{popoverRef:i,anchorName:s,isOpen:c,open:l,close:u}=e;return o(`div`,{ref:i,popover:`auto`,role:`complementary`,"data-state":c.value?`open`:`closed`,style:{positionAnchor:s},onMouseEnter:l,onMouseLeave:u,className:[t.content,r].filter(Boolean).join(` `),children:n})}function f({children:e,className:t}){return o(s.Consumer,{children:n=>{if(!n)throw Error(`HoverCardContent must be inside <HoverCard>`);return o(d,{ctx:n,...t!==void 0&&{className:t},children:e})}})}export{c as HoverCard,f as HoverCardContent,u as HoverCardTrigger};
1
+ "use client";import{usePopover as e}from"../popover/use-popover.js";import t from"./hover-card.module.js";import{createContext as n,useRef as r}from"react";import{useSignalEffect as i,useSignals as a}from"@cascivo/core";import{jsx as o}from"react/jsx-runtime";var s=n(null);function HoverCard({children:t,openDelay:n=300,closeDelay:a=100}){let c=e(),l=r(void 0),u=r(void 0),d=r(n);d.current=n;let f=r(a);f.current=a;let p={...c,open:()=>{clearTimeout(u.current),l.current=setTimeout(()=>{c.isOpen.value=!0},d.current)},close:()=>{clearTimeout(l.current),u.current=setTimeout(()=>{c.isOpen.value=!1},f.current)}};return i(()=>()=>{clearTimeout(l.current),clearTimeout(u.current)}),o(s.Provider,{value:p,children:t})}function HoverCardTriggerInner({ctx:e,children:n}){a();let{triggerRef:r,anchorName:i,open:s,close:c}=e;return o(`span`,{ref:r,style:{anchorName:i},onMouseEnter:s,onMouseLeave:c,onFocus:s,onBlur:c,className:t.trigger,children:n})}function HoverCardTrigger({children:e}){return o(s.Consumer,{children:t=>{if(!t)throw Error(`HoverCardTrigger must be inside <HoverCard>`);return o(HoverCardTriggerInner,{ctx:t,children:e})}})}function HoverCardContentInner({ctx:e,children:n,className:r}){a();let{popoverRef:i,anchorName:s,isOpen:c,open:l,close:u}=e;return o(`div`,{ref:i,popover:`auto`,role:`complementary`,"data-state":c.value?`open`:`closed`,style:{positionAnchor:s},onMouseEnter:l,onMouseLeave:u,className:[t.content,r].filter(Boolean).join(` `),children:n})}function HoverCardContent({children:e,className:t}){return o(s.Consumer,{children:n=>{if(!n)throw Error(`HoverCardContent must be inside <HoverCard>`);return o(HoverCardContentInner,{ctx:n,...t!==void 0&&{className:t},children:e})}})}export{HoverCard,HoverCardContent,HoverCardTrigger};
@@ -1 +1 @@
1
- "use client";import e from"./image.module.js";import{cn as t,createMachine as n,useMachine as r,useSignals as i}from"@cascivo/core";import{jsx as a,jsxs as o}from"react/jsx-runtime";var s=n({initial:`loading`,states:{loading:{on:{LOADED:`loaded`,ERROR:`error`}},loaded:{},error:{}}});function c({src:n,alt:c=``,fallbackSrc:l,width:u,height:d,radius:f=`md`,zoom:p=!1,removeWrapper:m=!1,isBlurred:h=!1,className:g,style:_,...v}){i();let[y,b]=r(s),x=y.value===`error`,S=x&&!l,C=x&&l?l:n,w={...u!==void 0&&{inlineSize:u},...d!==void 0&&{blockSize:d}};return m?a(`img`,{className:t(e.image,g),src:C,alt:c,onLoad:()=>b(`LOADED`),onError:()=>b(`ERROR`),style:{...w,..._},...v}):o(`span`,{"data-state":y.value,"data-radius":f,"data-zoom":p||void 0,"data-blurred":h||void 0,className:t(e.wrapper,g),style:{...w,..._},role:S?`img`:void 0,"aria-label":S?c:void 0,children:[y.value===`loading`&&a(`span`,{className:e.placeholder,"aria-hidden":`true`}),S?a(`span`,{className:e.fallback,"aria-hidden":`true`}):a(`img`,{className:e.image,src:C,alt:c,onLoad:()=>b(`LOADED`),onError:()=>b(`ERROR`),...v})]})}export{c as Image};
1
+ "use client";import e from"./image.module.js";import{cn as t,createMachine as n,useMachine as r,useSignals as i}from"@cascivo/core";import{jsx as a,jsxs as o}from"react/jsx-runtime";var s=n({initial:`loading`,states:{loading:{on:{LOADED:`loaded`,ERROR:`error`}},loaded:{},error:{}}});function Image({src:n,alt:c=``,fallbackSrc:l,width:u,height:d,radius:f=`md`,zoom:p=!1,removeWrapper:m=!1,isBlurred:h=!1,className:g,style:_,...v}){i();let[y,b]=r(s),x=y.value===`error`,S=x&&!l,C=x&&l?l:n,w={...u!==void 0&&{inlineSize:u},...d!==void 0&&{blockSize:d}};return m?a(`img`,{className:t(e.image,g),src:C,alt:c,onLoad:()=>b(`LOADED`),onError:()=>b(`ERROR`),style:{...w,..._},...v}):o(`span`,{"data-state":y.value,"data-radius":f,"data-zoom":p||void 0,"data-blurred":h||void 0,className:t(e.wrapper,g),style:{...w,..._},role:S?`img`:void 0,"aria-label":S?c:void 0,children:[y.value===`loading`&&a(`span`,{className:e.placeholder,"aria-hidden":`true`}),S?a(`span`,{className:e.fallback,"aria-hidden":`true`}):a(`img`,{className:e.image,src:C,alt:c,onLoad:()=>b(`LOADED`),onError:()=>b(`ERROR`),...v})]})}export{Image};
@@ -1 +1 @@
1
- import e from"./indicator.module.js";import{jsx as t,jsxs as n}from"react/jsx-runtime";function r({children:r,overlay:i,placement:a=`top-end`,className:o}){return n(`div`,{className:[e.indicator,o].filter(Boolean).join(` `),"data-placement":a,children:[r,t(`div`,{className:e.overlay,"aria-hidden":!0,children:i})]})}export{r as Indicator};
1
+ import e from"./indicator.module.js";import{jsx as t,jsxs as n}from"react/jsx-runtime";function Indicator({children:r,overlay:i,placement:a=`top-end`,className:o}){return n(`div`,{className:[e.indicator,o].filter(Boolean).join(` `),"data-placement":a,children:[r,t(`div`,{className:e.overlay,"aria-hidden":!0,children:i})]})}export{Indicator};
@@ -1 +1 @@
1
- "use client";import{Spinner as e}from"../spinner/spinner.js";import t from"./infinite-scroll.module.js";import{useRef as n}from"react";import{cn as r,useSignal as i,useSignalEffect as a,useSignals as o}from"@cascivo/core";import{builtin as s,t as c}from"@cascivo/i18n";import{jsx as l,jsxs as u}from"react/jsx-runtime";function d({onLoadMore:d,disabled:f=!1,rootMargin:p=`200px`,labels:m,className:h}){o();let g=n(null),_=i(!1),v=n(d);v.current=d;let y=n(f);y.current=f;let b=()=>{_.value||y.current||(_.value=!0,Promise.resolve(v.current()).then(()=>{_.value=!1},()=>{_.value=!1}))},x=n(b);return x.current=b,a(()=>{let e=g.current;if(!e||f||typeof IntersectionObserver>`u`)return;let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&x.current()},{rootMargin:p});return t.observe(e),()=>t.disconnect()}),f?null:l(`div`,{ref:g,className:r(t.root,h),children:_.value?u(`span`,{className:t.status,role:`status`,children:[l(e,{size:`sm`,"aria-hidden":`true`}),m?.loading??c(s.infiniteScroll.loading)]}):l(`button`,{type:`button`,className:t.button,onClick:b,children:m?.loadMore??c(s.infiniteScroll.loadMore)})})}export{d as InfiniteScroll};
1
+ "use client";import{Spinner as e}from"../spinner/spinner.js";import t from"./infinite-scroll.module.js";import{useRef as n}from"react";import{cn as r,useSignal as i,useSignalEffect as a,useSignals as o}from"@cascivo/core";import{builtin as s,t as c}from"@cascivo/i18n";import{jsx as l,jsxs as u}from"react/jsx-runtime";function InfiniteScroll({onLoadMore:d,disabled:f=!1,rootMargin:p=`200px`,labels:m,className:h}){o();let g=n(null),_=i(!1),v=n(d);v.current=d;let y=n(f);y.current=f;let load=()=>{_.value||y.current||(_.value=!0,Promise.resolve(v.current()).then(()=>{_.value=!1},()=>{_.value=!1}))},b=n(load);return b.current=load,a(()=>{let e=g.current;if(!e||f||typeof IntersectionObserver>`u`)return;let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&b.current()},{rootMargin:p});return t.observe(e),()=>t.disconnect()}),f?null:l(`div`,{ref:g,className:r(t.root,h),children:_.value?u(`span`,{className:t.status,role:`status`,children:[l(e,{size:`sm`,"aria-hidden":`true`}),m?.loading??c(s.infiniteScroll.loading)]}):l(`button`,{type:`button`,className:t.button,onClick:load,children:m?.loadMore??c(s.infiniteScroll.loadMore)})})}export{InfiniteScroll};
@@ -1 +1 @@
1
- import{Spinner as e}from"../spinner/spinner.js";import t from"./inline-loading.module.js";import{cn as n}from"@cascivo/core/pure";import{builtin as r,t as i}from"@cascivo/i18n";import{jsx as a,jsxs as o}from"react/jsx-runtime";function s(e,t){switch(e){case`active`:return t?.active??i(r.inlineLoading.active);case`finished`:return t?.finished??i(r.inlineLoading.finished);case`error`:return t?.error??i(r.inlineLoading.error);default:return``}}function c({status:n}){return n===`active`?a(e,{size:`sm`,className:t.spinner}):n===`finished`?a(`svg`,{className:t.icon,viewBox:`0 0 16 16`,width:`16`,height:`16`,fill:`none`,"aria-hidden":`true`,children:a(`path`,{d:`M3.5 8.5l3 3 6-7`,stroke:`currentColor`,strokeWidth:`1.75`,strokeLinecap:`round`,strokeLinejoin:`round`})}):n===`error`?o(`svg`,{className:t.icon,viewBox:`0 0 16 16`,width:`16`,height:`16`,fill:`none`,"aria-hidden":`true`,children:[a(`path`,{d:`M8 4.5v4M8 11h.01`,stroke:`currentColor`,strokeWidth:`1.75`,strokeLinecap:`round`,strokeLinejoin:`round`}),a(`circle`,{cx:`8`,cy:`8`,r:`6.25`,stroke:`currentColor`,strokeWidth:`1.5`})]}):null}function l({status:e,label:r,labels:i,className:l,...u}){let d=r??s(e,i);return o(`div`,{role:`status`,"aria-live":`polite`,"data-status":e,className:n(t[`inline-loading`],l),...u,children:[a(`span`,{className:t.indicator,"aria-hidden":`true`,children:a(c,{status:e})}),d&&a(`span`,{className:t.label,children:d})]})}export{l as InlineLoading};
1
+ import{Spinner as e}from"../spinner/spinner.js";import t from"./inline-loading.module.js";import{cn as n}from"@cascivo/core/pure";import{builtin as r,t as i}from"@cascivo/i18n";import{jsx as a,jsxs as o}from"react/jsx-runtime";function defaultLabel(e,t){switch(e){case`active`:return t?.active??i(r.inlineLoading.active);case`finished`:return t?.finished??i(r.inlineLoading.finished);case`error`:return t?.error??i(r.inlineLoading.error);default:return``}}function StatusIcon({status:n}){return n===`active`?a(e,{size:`sm`,className:t.spinner}):n===`finished`?a(`svg`,{className:t.icon,viewBox:`0 0 16 16`,width:`16`,height:`16`,fill:`none`,"aria-hidden":`true`,children:a(`path`,{d:`M3.5 8.5l3 3 6-7`,stroke:`currentColor`,strokeWidth:`1.75`,strokeLinecap:`round`,strokeLinejoin:`round`})}):n===`error`?o(`svg`,{className:t.icon,viewBox:`0 0 16 16`,width:`16`,height:`16`,fill:`none`,"aria-hidden":`true`,children:[a(`path`,{d:`M8 4.5v4M8 11h.01`,stroke:`currentColor`,strokeWidth:`1.75`,strokeLinecap:`round`,strokeLinejoin:`round`}),a(`circle`,{cx:`8`,cy:`8`,r:`6.25`,stroke:`currentColor`,strokeWidth:`1.5`})]}):null}function InlineLoading({status:e,label:r,labels:i,className:s,...c}){let l=r??defaultLabel(e,i);return o(`div`,{role:`status`,"aria-live":`polite`,"data-status":e,className:n(t[`inline-loading`],s),...c,children:[a(`span`,{className:t.indicator,"aria-hidden":`true`,children:a(StatusIcon,{status:e})}),l&&a(`span`,{className:t.label,children:l})]})}export{InlineLoading};
@@ -1 +1 @@
1
- import e from"./input-group.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n,jsxs as r}from"react/jsx-runtime";function i({align:r=`inline-start`,children:i,className:a,...o}){return n(`span`,{className:t(e[`inline-addon`],a),"data-align":r,"aria-hidden":`true`,...o,children:i})}function a({prefix:i,suffix:a,children:o,className:s,...c}){return r(`div`,{className:t(e[`input-group`],s),"data-has-prefix":i?``:void 0,"data-has-suffix":a?``:void 0,...c,children:[i&&n(`span`,{className:e.addon,"data-position":`prefix`,children:i}),n(`span`,{className:e[`input-wrap`],children:o}),a&&n(`span`,{className:e.addon,"data-position":`suffix`,children:a})]})}export{a as InputGroup,i as InputGroupAddon};
1
+ import e from"./input-group.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n,jsxs as r}from"react/jsx-runtime";function InputGroupAddon({align:r=`inline-start`,children:i,className:a,...o}){return n(`span`,{className:t(e[`inline-addon`],a),"data-align":r,"aria-hidden":`true`,...o,children:i})}function InputGroup({prefix:i,suffix:a,children:o,className:s,...c}){return r(`div`,{className:t(e[`input-group`],s),"data-has-prefix":i?``:void 0,"data-has-suffix":a?``:void 0,...c,children:[i&&n(`span`,{className:e.addon,"data-position":`prefix`,children:i}),n(`span`,{className:e[`input-wrap`],children:o}),a&&n(`span`,{className:e.addon,"data-position":`suffix`,children:a})]})}export{InputGroup,InputGroupAddon};
@@ -1 +1 @@
1
- import e from"./item.module.js";import{Slot as t,cn as n}from"@cascivo/core/pure";import{jsx as r}from"react/jsx-runtime";function i({asChild:i=!1,variant:a=`default`,size:o=`md`,className:s,children:c,...l}){return r(i?t:`div`,{"data-variant":a,"data-size":o,className:n(e.item,s),...l,children:c})}function a({className:t,children:i,...a}){return r(`div`,{className:n(e.media,t),...a,children:i})}function o({className:t,children:i,...a}){return r(`div`,{className:n(e.content,t),...a,children:i})}function s({className:t,children:i,...a}){return r(`div`,{className:n(e.title,t),...a,children:i})}function c({className:t,children:i,...a}){return r(`p`,{className:n(e.description,t),...a,children:i})}function l({className:t,children:i,...a}){return r(`div`,{className:n(e.actions,t),...a,children:i})}export{i as Item,l as ItemActions,o as ItemContent,c as ItemDescription,a as ItemMedia,s as ItemTitle};
1
+ import e from"./item.module.js";import{Slot as t,cn as n}from"@cascivo/core/pure";import{jsx as r}from"react/jsx-runtime";function Item({asChild:i=!1,variant:a=`default`,size:o=`md`,className:s,children:c,...l}){return r(i?t:`div`,{"data-variant":a,"data-size":o,className:n(e.item,s),...l,children:c})}function ItemMedia({className:t,children:i,...a}){return r(`div`,{className:n(e.media,t),...a,children:i})}function ItemContent({className:t,children:i,...a}){return r(`div`,{className:n(e.content,t),...a,children:i})}function ItemTitle({className:t,children:i,...a}){return r(`div`,{className:n(e.title,t),...a,children:i})}function ItemDescription({className:t,children:i,...a}){return r(`p`,{className:n(e.description,t),...a,children:i})}function ItemActions({className:t,children:i,...a}){return r(`div`,{className:n(e.actions,t),...a,children:i})}export{Item,ItemActions,ItemContent,ItemDescription,ItemMedia,ItemTitle};
@@ -1 +1 @@
1
- import e from"./join.module.js";import{jsx as t}from"react/jsx-runtime";function n({children:n,orientation:r=`horizontal`,className:i}){return t(`div`,{className:[e.join,i].filter(Boolean).join(` `),"data-orientation":r,children:n})}export{n as Join};
1
+ import e from"./join.module.js";import{jsx as t}from"react/jsx-runtime";function Join({children:n,orientation:r=`horizontal`,className:i}){return t(`div`,{className:[e.join,i].filter(Boolean).join(` `),"data-orientation":r,children:n})}export{Join};
@@ -1 +1 @@
1
- import e from"./kbd.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";function r({size:r=`md`,className:i,children:a,...o}){return n(`kbd`,{"data-size":r,className:t(e.kbd,i),...o,children:a})}export{r as Kbd};
1
+ import e from"./kbd.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";function Kbd({size:r=`md`,className:i,children:a,...o}){return n(`kbd`,{"data-size":r,className:t(e.kbd,i),...o,children:a})}export{Kbd};
@@ -1 +1 @@
1
- import e from"./label.module.js";import{Slot as t,cn as n}from"@cascivo/core/pure";import{builtin as r,t as i}from"@cascivo/i18n";import{Fragment as a,jsx as o,jsxs as s}from"react/jsx-runtime";function c({asChild:c=!1,required:l=!1,disabled:u=!1,className:d,children:f,labels:p,...m}){let h=c?t:`label`,g=p?.required??i(r.label.required),_=l?s(a,{children:[o(`span`,{className:e.marker,"aria-hidden":`true`,children:`*`}),o(`span`,{className:e.srOnly,children:g})]}):null;return o(h,{"data-disabled":u?``:void 0,className:n(e.label,d),...m,children:_?s(a,{children:[f,_]}):f})}export{c as Label};
1
+ import e from"./label.module.js";import{Slot as t,cn as n}from"@cascivo/core/pure";import{builtin as r,t as i}from"@cascivo/i18n";import{Fragment as a,jsx as o,jsxs as s}from"react/jsx-runtime";function Label({asChild:c=!1,required:l=!1,disabled:u=!1,className:d,children:f,labels:p,...m}){let h=c?t:`label`,g=p?.required??i(r.label.required),_=l?s(a,{children:[o(`span`,{className:e.marker,"aria-hidden":`true`,children:`*`}),o(`span`,{className:e.srOnly,children:g})]}):null;return o(h,{"data-disabled":u?``:void 0,className:n(e.label,d),...m,children:_?s(a,{children:[f,_]}):f})}export{Label};
@@ -1 +1 @@
1
- import e from"./large-title-header.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n,jsxs as r}from"react/jsx-runtime";function i({title:i,children:a,leading:o,actions:s,level:c=1,collapseDistance:l=48,className:u}){let d=`h${c}`,f={"--_collapse":`${l}px`};return r(`div`,{className:t(e.root,u),style:f,children:[r(`div`,{className:e.bar,children:[n(`div`,{className:e.slot,children:o}),n(`span`,{"aria-hidden":`true`,className:e.compactTitle,children:i}),n(`div`,{className:t(e.slot,e.slotEnd),children:s})]}),n(d,{className:e.largeTitle,children:i}),a]})}export{i as LargeTitleHeader};
1
+ import e from"./large-title-header.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n,jsxs as r}from"react/jsx-runtime";function LargeTitleHeader({title:i,children:a,leading:o,actions:s,level:c=1,collapseDistance:l=48,className:u}){let d=`h${c}`,f={"--_collapse":`${l}px`};return r(`div`,{className:t(e.root,u),style:f,children:[r(`div`,{className:e.bar,children:[n(`div`,{className:e.slot,children:o}),n(`span`,{"aria-hidden":`true`,className:e.compactTitle,children:i}),n(`div`,{className:t(e.slot,e.slotEnd),children:s})]}),n(d,{className:e.largeTitle,children:i}),a]})}export{LargeTitleHeader};
@@ -1 +1 @@
1
- import e from"./auto-grid.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";function r({min:r=`16rem`,gap:i=4,className:a,style:o,...s}){return n(`div`,{className:t(e[`auto-grid`],a),style:{"--_min":r,"--_gap":`var(--cascivo-space-${i})`,...o},...s})}export{r as AutoGrid};
1
+ import e from"./auto-grid.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";function AutoGrid({min:r=`16rem`,gap:i=4,className:a,style:o,...s}){return n(`div`,{className:t(e[`auto-grid`],a),style:{"--_min":r,"--_gap":`var(--cascivo-space-${i})`,...o},...s})}export{AutoGrid};
@@ -1 +1 @@
1
- import e from"./center.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";function r({maxWidth:r=`48rem`,className:i,style:a,...o}){return n(`div`,{className:t(e.center,i),style:{"--_center-max":r,...a},...o})}export{r as Center};
1
+ import e from"./center.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";function Center({maxWidth:r=`48rem`,className:i,style:a,...o}){return n(`div`,{className:t(e.center,i),style:{"--_center-max":r,...a},...o})}export{Center};
@@ -1 +1 @@
1
- import e from"./columns.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";function r({count:r=2,gap:i=4,className:a,style:o,children:s,...c}){return n(`div`,{className:t(e[`columns-container`],a),style:{"--_cols":String(r),"--_gap":`var(--cascivo-space-${i})`,...o},...c,children:n(`div`,{className:e.columns,children:s})})}export{r as Columns};
1
+ import e from"./columns.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";function Columns({count:r=2,gap:i=4,className:a,style:o,children:s,...c}){return n(`div`,{className:t(e[`columns-container`],a),style:{"--_cols":String(r),"--_gap":`var(--cascivo-space-${i})`,...o},...c,children:n(`div`,{className:e.columns,children:s})})}export{Columns};
@@ -1 +1 @@
1
- import e from"./flex.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";function r({direction:r=`vertical`,gap:i=4,align:a,justify:o,wrap:s=!1,className:c,style:l,...u}){return n(`div`,{className:t(e.flex,c),"data-direction":r,"data-wrap":s?``:void 0,style:{"--_flex-gap":`var(--cascivo-space-${i})`,...a?{alignItems:a===`start`||a===`end`?`flex-${a}`:a}:{},...o?{justifyContent:o===`between`?`space-between`:o===`start`||o===`end`?`flex-${o}`:o}:{},...l},...u})}export{r as Flex};
1
+ import e from"./flex.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";function Flex({direction:r=`vertical`,gap:i=4,align:a,justify:o,wrap:s=!1,className:c,style:l,...u}){return n(`div`,{className:t(e.flex,c),"data-direction":r,"data-wrap":s?``:void 0,style:{"--_flex-gap":`var(--cascivo-space-${i})`,...a?{alignItems:a===`start`||a===`end`?`flex-${a}`:a}:{},...o?{justifyContent:o===`between`?`space-between`:o===`start`||o===`end`?`flex-${o}`:o}:{},...l},...u})}function FlexItem({size:r=`auto`,basis:i,truncate:a=!1,className:o,style:s,...c}){return n(`div`,{className:t(e[`flex-item`],o),"data-size":r,"data-truncate":a?``:void 0,style:{...i===void 0?{}:{flexBasis:i},...s},...c})}export{Flex,FlexItem};
@@ -1 +1 @@
1
- var e={flex:`_flex_1cngp_2`};export{e as default};
1
+ var e={flex:`_flex_39htm_2`,"flex-item":`_flex-item_39htm_19`};export{e as default};
@@ -1 +1 @@
1
- import e from"./grid.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";function r(e){return typeof e==`object`&&!!e}function i(e,t){if(t===void 0)return{};if(!r(t))return{[e]:String(t)};let n={};t.base!==void 0&&(n[e]=String(t.base));for(let r of[`sm`,`md`,`lg`,`xl`]){let i=t[r];i!==void 0&&(n[`${e}-${r}`]=String(i))}return n}function a({cols:a=12,gap:o=4,align:s,justify:c,alignRows:l=!1,className:u,style:d,children:f,...p}){return n(`div`,{className:t(e[`grid-container`],u),style:{...i(`--_grid-cols`,a),"--_grid-gap":`var(--cascivo-space-${o})`,...s?{"--_grid-align":s}:{},...c?{"--_grid-justify":c}:{},...d},...p,children:n(`div`,{className:e.grid,"data-responsive":r(a)?``:void 0,"data-align-rows":l?``:void 0,children:f})})}function o({span:a,className:o,style:s,...c}){let l=a!==void 0&&r(a);return n(`div`,{className:t(e[`grid-item`],o),"data-responsive":l?``:void 0,style:{...i(`--_span`,a),...s},...c})}export{a as Grid,o as GridItem};
1
+ import e from"./grid.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";function isResponsive(e){return typeof e==`object`&&!!e}function responsiveVars(e,t){if(t===void 0)return{};if(!isResponsive(t))return{[e]:String(t)};let n={};t.base!==void 0&&(n[e]=String(t.base));for(let r of[`sm`,`md`,`lg`,`xl`]){let i=t[r];i!==void 0&&(n[`${e}-${r}`]=String(i))}return n}function Grid({cols:r=12,gap:i=4,align:a,justify:o,alignRows:s=!1,className:c,style:l,children:u,...d}){return n(`div`,{className:t(e[`grid-container`],c),style:{...responsiveVars(`--_grid-cols`,r),"--_grid-gap":`var(--cascivo-space-${i})`,...a?{"--_grid-align":a}:{},...o?{"--_grid-justify":o}:{},...l},...d,children:n(`div`,{className:e.grid,"data-responsive":isResponsive(r)?``:void 0,"data-align-rows":s?``:void 0,children:u})})}function GridItem({span:r,className:i,style:a,...o}){let s=r!==void 0&&isResponsive(r);return n(`div`,{className:t(e[`grid-item`],i),"data-responsive":s?``:void 0,style:{...responsiveVars(`--_span`,r),...a},...o})}export{Grid,GridItem};
@@ -1 +1 @@
1
- import e from"./page-header.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n,jsxs as r}from"react/jsx-runtime";function i({title:i,description:a,breadcrumb:o,actions:s,className:c}){return r(`header`,{className:t(e.header,c),children:[o&&n(`div`,{className:e.breadcrumb,children:o}),r(`div`,{className:e.row,children:[n(`h1`,{className:e.title,children:i}),s&&n(`div`,{className:e.actions,children:s})]}),a&&n(`p`,{className:e.description,children:a})]})}export{i as PageHeader};
1
+ import e from"./page-header.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n,jsxs as r}from"react/jsx-runtime";function PageHeader({title:i,description:a,breadcrumb:o,actions:s,className:c}){return r(`header`,{className:t(e.header,c),children:[o&&n(`div`,{className:e.breadcrumb,children:o}),r(`div`,{className:e.row,children:[n(`h1`,{className:e.title,children:i}),s&&n(`div`,{className:e.actions,children:s})]}),a&&n(`p`,{className:e.description,children:a})]})}export{PageHeader};
@@ -1 +1 @@
1
- import e from"./spacer.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";function r({size:r=4,className:i,style:a,...o}){return n(`div`,{role:`none`,className:t(e.spacer,i),style:{"--_spacer-size":`var(--cascivo-space-${r})`,...a},...o})}export{r as Spacer};
1
+ import e from"./spacer.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";function Spacer({size:r=4,className:i,style:a,...o}){return n(`div`,{role:`none`,className:t(e.spacer,i),style:{"--_spacer-size":`var(--cascivo-space-${r})`,...a},...o})}export{Spacer};
@@ -1 +1 @@
1
- import e from"./list.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";function r({as:r=`ul`,marker:i,className:a,children:o,...s}){return n(r,{"data-marker":i??(r===`ol`?`decimal`:`disc`),className:t(e.list,a),...s,children:o})}function i({className:r,children:i,...a}){return n(`li`,{className:t(e.item,r),...a,children:i})}export{r as List,i as ListItem};
1
+ import e from"./list.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";function List({as:r=`ul`,marker:i,className:a,children:o,...s}){return n(r,{"data-marker":i??(r===`ol`?`decimal`:`disc`),className:t(e.list,a),...s,children:o})}function ListItem({className:r,children:i,...a}){return n(`li`,{className:t(e.item,r),...a,children:i})}export{List,ListItem};
@@ -1,2 +1,2 @@
1
- "use client";import e from"./log-viewer.module.js";import{Fragment as t}from"react";import{VisuallyHidden as n,cn as r,useClipboard as i,useComputed as a,useControllableSignal as o,useResizeObserver as s,useSignal as c,useSignalEffect as l,useSignals as u}from"@cascivo/core";import{builtin as d,t as f}from"@cascivo/i18n";import{jsx as p,jsxs as m}from"react/jsx-runtime";var h={30:`black`,31:`red`,32:`green`,33:`yellow`,34:`blue`,35:`magenta`,36:`cyan`,37:`white`,90:`bright-black`,91:`red`,92:`green`,93:`yellow`,94:`blue`,95:`magenta`,96:`cyan`,97:`white`};function g(e){if(!e.includes(`\x1B[`))return[{text:e}];try{let t=[],n=/\[([0-9;]*)m/g,r=0,i,a=!1,o;for(;(o=n.exec(e))!==null;){o.index>r&&t.push({text:e.slice(r,o.index),color:i,bold:a});for(let e of o[1].split(`;`)){let t=Number(e||`0`);t===0?(i=void 0,a=!1):t===1?a=!0:t===22?a=!1:h[t]&&(i=h[t])}r=n.lastIndex}return r<e.length&&t.push({text:e.slice(r),color:i,bold:a}),t.length>0?t:[{text:e}]}catch{return[{text:e}]}}function _(e,t,n){if(!t)return e;let r=e.toLowerCase(),i=t.toLowerCase(),a=[],o=0,s=r.indexOf(i,o),c=0;for(;s!==-1;)s>o&&a.push(e.slice(o,s)),a.push(p(`mark`,{children:e.slice(s,s+i.length)},`${n}-${c++}`)),o=s+i.length,s=r.indexOf(i,o);return o<e.length&&a.push(e.slice(o)),a}function v(t,n,r){return(n?g(t.text):[{text:t.text}]).map((n,i)=>p(`span`,{"data-ansi":n.color,style:n.bold?{fontWeight:700}:void 0,className:n.color?e.ansi:void 0,children:_(n.text,r,`${String(t.id)}-${i}`)},i))}function y({lines:h,rowHeight:g=20,overscan:_=8,follow:y,onFollowChange:b,ansi:x=!1,search:S,maxHeight:C=`24rem`,labels:w,className:T,...E}){u();let D={searchPlaceholder:w?.searchPlaceholder??f(d.logViewer.search),follow:w?.follow??f(d.logViewer.follow),paused:w?.paused??f(d.logViewer.paused),copy:w?.copy??f(d.logViewer.copy),copied:w?.copied??f(d.logViewer.copied),empty:w?.empty??f(d.logViewer.empty),label:f(d.logViewer.label)},O=c(Array.isArray(h)?h:[]);Array.isArray(h)&&(O.value=h);let k=Array.isArray(h)?O:h,{ref:A,size:j}=s(),M=c(0),[N,P]=o({value:y,defaultValue:!0,onChange:b}),F=c(S??``),{copied:I,copy:L}=i(),R=a(()=>{let e=k.value,t=e.length,n=j.value?.height??320,r=Math.max(0,t*g-n),i=N.value?r:M.value,a=Math.floor(i/g),o=Math.ceil(n/g)+_*2,s=Math.max(0,a-_),c=Math.min(t,s+o);return{total:t,start:s,end:c,rows:e.slice(s,c)}}),z=a(()=>{let e=F.value.trim().toLowerCase();if(!e)return 0;let t=0;for(let n of k.value)n.text.toLowerCase().includes(e)&&t++;return t});l(()=>{if(k.value,!N.value)return;let e=A.current;e&&(e.scrollTop=e.scrollHeight)});let B=e=>{let t=e.currentTarget;M.value=t.scrollTop,P(t.scrollHeight-t.clientHeight-t.scrollTop<=g)},V=R.value,H=F.value.trim();return m(`div`,{className:r(e.root,T),...E,children:[m(`div`,{className:e.toolbar,children:[p(`input`,{type:`search`,className:e.search,placeholder:D.searchPlaceholder,"aria-label":D.searchPlaceholder,value:F.value,onInput:e=>{F.value=e.currentTarget.value}}),H?p(`span`,{className:e.count,"aria-live":`polite`,children:f(d.logViewer.matches,{count:z.value})}):null,p(`span`,{className:e.spacer}),p(`button`,{type:`button`,className:e.toggle,"aria-pressed":N.value,onClick:()=>{let e=!N.value;if(P(e),e){let e=A.current;e&&(e.scrollTop=e.scrollHeight)}},children:N.value?D.follow:D.paused}),p(`button`,{type:`button`,className:e.copy,onClick:()=>void L(k.value.map(e=>e.text).join(`
2
- `)),children:I.value?D.copied:D.copy})]}),p(`div`,{ref:A,className:e.scroll,role:`log`,"aria-live":`polite`,"aria-label":D.label,tabIndex:0,style:{maxBlockSize:C},onScroll:B,children:V.total===0?p(`div`,{className:e.empty,children:D.empty}):p(`div`,{className:e.sizer,style:{blockSize:V.total*g},children:V.rows.map((n,r)=>p(t,{children:p(`div`,{className:e.line,"data-level":n.level,style:{insetBlockStart:(V.start+r)*g,blockSize:g},children:v(n,x,H)})},n.id))})}),p(n,{"aria-live":`polite`,children:f(d.logViewer.lines,{count:V.total})})]})}export{y as LogViewer};
1
+ "use client";import e from"./log-viewer.module.js";import{Fragment as t}from"react";import{VisuallyHidden as n,cn as r,useClipboard as i,useComputed as a,useControllableSignal as o,useResizeObserver as s,useSignal as c,useSignalEffect as l,useSignals as u}from"@cascivo/core";import{builtin as d,t as f}from"@cascivo/i18n";import{Fragment as p,jsx as m,jsxs as h}from"react/jsx-runtime";var g={30:`black`,31:`red`,32:`green`,33:`yellow`,34:`blue`,35:`magenta`,36:`cyan`,37:`white`,90:`bright-black`,91:`red`,92:`green`,93:`yellow`,94:`blue`,95:`magenta`,96:`cyan`,97:`white`};function parseAnsi(e){if(!e.includes(`\x1B[`))return[{text:e}];try{let t=[],n=/\[([0-9;]*)m/g,r=0,i,a=!1,o;for(;(o=n.exec(e))!==null;){o.index>r&&t.push({text:e.slice(r,o.index),color:i,bold:a});for(let e of o[1].split(`;`)){let t=Number(e||`0`);t===0?(i=void 0,a=!1):t===1?a=!0:t===22?a=!1:g[t]&&(i=g[t])}r=n.lastIndex}return r<e.length&&t.push({text:e.slice(r),color:i,bold:a}),t.length>0?t:[{text:e}]}catch{return[{text:e}]}}function highlight(e,t,n){if(!t)return e;let r=e.toLowerCase(),i=t.toLowerCase(),a=[],o=0,s=r.indexOf(i,o),c=0;for(;s!==-1;)s>o&&a.push(e.slice(o,s)),a.push(m(`mark`,{children:e.slice(s,s+i.length)},`${n}-${c++}`)),o=s+i.length,s=r.indexOf(i,o);return o<e.length&&a.push(e.slice(o)),a}function renderLine(t,n,r){let i=n?parseAnsi(t.text):[{text:t.text}];return h(p,{children:[t.timestamp!==void 0&&m(`span`,{className:e.timestamp,children:t.timestamp}),i.map((n,i)=>m(`span`,{"data-ansi":n.color,style:n.bold?{fontWeight:700}:void 0,className:n.color?e.ansi:void 0,children:highlight(n.text,r,`${String(t.id)}-${i}`)},i))]})}function LogViewer({lines:p,rowHeight:g=20,overscan:_=8,follow:v,onFollowChange:y,ansi:b=!1,search:x,maxHeight:S=`24rem`,timestampWidth:C=`6.5rem`,labels:w,className:T,...E}){u();let D={searchPlaceholder:w?.searchPlaceholder??f(d.logViewer.search),follow:w?.follow??f(d.logViewer.follow),paused:w?.paused??f(d.logViewer.paused),copy:w?.copy??f(d.logViewer.copy),copied:w?.copied??f(d.logViewer.copied),empty:w?.empty??f(d.logViewer.empty),label:f(d.logViewer.label)},O=c(Array.isArray(p)?p:[]);Array.isArray(p)&&(O.value=p);let k=Array.isArray(p)?O:p,{ref:A,size:j}=s(),M=c(0),[N,P]=o({value:v,defaultValue:!0,onChange:y}),F=c(x??``),{copied:I,copy:L}=i(),R=a(()=>{let e=k.value,t=e.length,n=j.value?.height??320,r=Math.max(0,t*g-n),i=N.value?r:M.value,a=Math.floor(i/g),o=Math.ceil(n/g)+_*2,s=Math.max(0,a-_),c=Math.min(t,s+o);return{total:t,start:s,end:c,rows:e.slice(s,c)}}),z=a(()=>{let e=F.value.trim().toLowerCase();if(!e)return 0;let t=0;for(let n of k.value)n.text.toLowerCase().includes(e)&&t++;return t});l(()=>{if(k.value,!N.value)return;let e=A.current;e&&(e.scrollTop=e.scrollHeight)});let onScroll=e=>{let t=e.currentTarget;M.value=t.scrollTop,P(t.scrollHeight-t.clientHeight-t.scrollTop<=g)},B=R.value,V=F.value.trim();return h(`div`,{className:r(e.root,T),style:{"--_timestamp-width":C},...E,children:[h(`div`,{className:e.toolbar,children:[m(`input`,{type:`search`,className:e.search,placeholder:D.searchPlaceholder,"aria-label":D.searchPlaceholder,value:F.value,onInput:e=>{F.value=e.currentTarget.value}}),V?m(`span`,{className:e.count,"aria-live":`polite`,children:f(d.logViewer.matches,{count:z.value})}):null,m(`span`,{className:e.spacer}),m(`button`,{type:`button`,className:e.toggle,"aria-pressed":N.value,onClick:()=>{let e=!N.value;if(P(e),e){let e=A.current;e&&(e.scrollTop=e.scrollHeight)}},children:N.value?D.follow:D.paused}),m(`button`,{type:`button`,className:e.copy,onClick:()=>void L(k.value.map(e=>e.text).join(`
2
+ `)),children:I.value?D.copied:D.copy})]}),m(`div`,{ref:A,className:e.scroll,role:`log`,"aria-live":`polite`,"aria-label":D.label,tabIndex:0,style:{maxBlockSize:S},onScroll,children:B.total===0?m(`div`,{className:e.empty,children:D.empty}):m(`div`,{className:e.sizer,style:{blockSize:B.total*g},children:B.rows.map((n,r)=>m(t,{children:m(`div`,{className:e.line,"data-level":n.level,style:{insetBlockStart:(B.start+r)*g,blockSize:g},children:renderLine(n,b,V)})},n.id))})}),m(n,{"aria-live":`polite`,children:f(d.logViewer.lines,{count:B.total})})]})}export{LogViewer};
@@ -1 +1 @@
1
- var e={root:`_root_18p0l_2`,toolbar:`_toolbar_18p0l_11`,search:`_search_18p0l_20`,count:`_count_18p0l_33`,spacer:`_spacer_18p0l_38`,toggle:`_toggle_18p0l_42`,copy:`_copy_18p0l_43`,scroll:`_scroll_18p0l_81`,sizer:`_sizer_18p0l_96`,line:`_line_18p0l_101`,ansi:`_ansi_18p0l_128`,empty:`_empty_18p0l_149`};export{e as default};
1
+ var e={root:`_root_p7fwz_2`,toolbar:`_toolbar_p7fwz_11`,search:`_search_p7fwz_20`,count:`_count_p7fwz_33`,spacer:`_spacer_p7fwz_38`,toggle:`_toggle_p7fwz_42`,copy:`_copy_p7fwz_43`,scroll:`_scroll_p7fwz_81`,sizer:`_sizer_p7fwz_96`,line:`_line_p7fwz_101`,timestamp:`_timestamp_p7fwz_112`,ansi:`_ansi_p7fwz_137`,empty:`_empty_p7fwz_158`};export{e as default};
@@ -1 +1 @@
1
- "use client";import{usePopover as e}from"../popover/use-popover.js";import t from"./menu.module.js";import{Children as n,createContext as r,isValidElement as i}from"react";import{useSignalEffect as a,useSignals as o,useTypeahead as s}from"@cascivo/core";import{jsx as c,jsxs as l}from"react/jsx-runtime";var u=r(null);function d({ctx:e,children:n}){o();let{popoverRef:r,anchorName:i,isOpen:l}=e,u=()=>{let e=r.current;return e?Array.from(e.querySelectorAll(`[role="menuitem"]:not([aria-disabled="true"])`)):[]},d=e=>{let t=u();t.length!==0&&t[e(t,t.indexOf(document.activeElement))]?.focus()},f=s({onMatch:e=>{u().find(t=>(t.textContent??``).trim().toLowerCase().startsWith(e))?.focus()}});return a(()=>{if(!l.value)return;let e=r.current;e&&e.querySelector(`[role="menuitem"]:not([aria-disabled="true"])`)?.focus()}),c(`div`,{ref:r,popover:`auto`,role:`menu`,"data-state":l.value?`open`:`closed`,style:{positionAnchor:i},className:t.panel,onKeyDown:e=>{switch(e.key){case`ArrowDown`:e.preventDefault(),d((e,t)=>t<0?0:(t+1)%e.length);break;case`ArrowUp`:e.preventDefault(),d((e,t)=>t<0?e.length-1:(t-1+e.length)%e.length);break;case`Home`:e.preventDefault(),d(()=>0);break;case`End`:e.preventDefault(),d(e=>e.length-1);break;default:f.onKeyDown(e)}},children:n})}function f({children:e}){return c(u.Consumer,{children:t=>{if(!t)throw Error(`MenuPanel must be inside <Menu>`);return c(d,{ctx:t,children:e})}})}function p(){return globalThis.process?.env?.NODE_ENV!==`production`}function m({children:t}){let r=e(),a=n.toArray(t),o=a.find(e=>i(e)&&e.type===g),s=a.filter(e=>e!==o);if(o===void 0&&p())throw Error(`<Menu> requires a <MenuTrigger> child. It is matched by component identity, so it may appear in any order — but it must be a direct child, not wrapped in a fragment or another component.`);return l(u.Provider,{value:r,children:[o,c(f,{children:s})]})}function h({ctx:e,children:n,ariaLabel:r,"aria-label":i}){o();let{triggerRef:a,toggle:s,anchorName:l,isOpen:u}=e;return c(`button`,{ref:a,type:`button`,"aria-haspopup":`menu`,"aria-expanded":u.value,"aria-label":r??i,style:{anchorName:l},onClick:s,className:t.trigger,children:n})}function g({children:e,ariaLabel:t,"aria-label":n}){let r=t??n;return c(u.Consumer,{children:t=>{if(!t)throw Error(`MenuTrigger must be inside <Menu>`);return c(h,{ctx:t,...r!==void 0&&{ariaLabel:r},children:e})}})}function _({children:e,onSelect:n,disabled:r}){return c(u.Consumer,{children:i=>{if(!i)throw Error(`MenuItem must be inside <Menu>`);let{close:a}=i;function o(){r||(n(),a())}function s(e){(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),e.stopPropagation(),o())}return c(`div`,{role:`menuitem`,tabIndex:r?-1:0,"aria-disabled":r,onClick:o,onKeyDown:s,className:t.item,children:e})}})}function v(){return c(`div`,{role:`separator`,className:t.separator})}export{m as Menu,_ as MenuItem,v as MenuSeparator,g as MenuTrigger};
1
+ "use client";import{usePopover as e}from"../popover/use-popover.js";import t from"./menu.module.js";import{Children as n,createContext as r,isValidElement as i}from"react";import{useSignalEffect as a,useSignals as o,useTypeahead as s}from"@cascivo/core";import{jsx as c,jsxs as l}from"react/jsx-runtime";var u=r(null);function MenuPanelInner({ctx:e,children:n}){o();let{popoverRef:r,anchorName:i,isOpen:l}=e,enabledItems=()=>{let e=r.current;return e?Array.from(e.querySelectorAll(`[role="menuitem"]:not([aria-disabled="true"])`)):[]},focusItem=e=>{let t=enabledItems();t.length!==0&&t[e(t,t.indexOf(document.activeElement))]?.focus()},u=s({onMatch:e=>{enabledItems().find(t=>(t.textContent??``).trim().toLowerCase().startsWith(e))?.focus()}});return a(()=>{if(!l.value)return;let e=r.current;e&&e.querySelector(`[role="menuitem"]:not([aria-disabled="true"])`)?.focus()}),c(`div`,{ref:r,popover:`auto`,role:`menu`,"data-state":l.value?`open`:`closed`,style:{positionAnchor:i},className:t.panel,onKeyDown:e=>{switch(e.key){case`ArrowDown`:e.preventDefault(),focusItem((e,t)=>t<0?0:(t+1)%e.length);break;case`ArrowUp`:e.preventDefault(),focusItem((e,t)=>t<0?e.length-1:(t-1+e.length)%e.length);break;case`Home`:e.preventDefault(),focusItem(()=>0);break;case`End`:e.preventDefault(),focusItem(e=>e.length-1);break;default:u.onKeyDown(e)}},children:n})}function MenuPanel({children:e}){return c(u.Consumer,{children:t=>{if(!t)throw Error(`MenuPanel must be inside <Menu>`);return c(MenuPanelInner,{ctx:t,children:e})}})}function isDev(){return globalThis.process?.env?.NODE_ENV!==`production`}function Menu({children:t}){let r=e(),a=n.toArray(t),o=a.find(e=>i(e)&&e.type===MenuTrigger),s=a.filter(e=>e!==o);if(o===void 0&&isDev())throw Error(`<Menu> requires a <MenuTrigger> child. It is matched by component identity, so it may appear in any order — but it must be a direct child, not wrapped in a fragment or another component.`);return l(u.Provider,{value:r,children:[o,c(MenuPanel,{children:s})]})}function MenuTriggerInner({ctx:e,children:n,ariaLabel:r,"aria-label":i}){o();let{triggerRef:a,toggle:s,anchorName:l,isOpen:u}=e;return c(`button`,{ref:a,type:`button`,"aria-haspopup":`menu`,"aria-expanded":u.value,"aria-label":r??i,style:{anchorName:l},onClick:s,className:t.trigger,children:n})}function MenuTrigger({children:e,ariaLabel:t,"aria-label":n}){let r=t??n;return c(u.Consumer,{children:t=>{if(!t)throw Error(`MenuTrigger must be inside <Menu>`);return c(MenuTriggerInner,{ctx:t,...r!==void 0&&{ariaLabel:r},children:e})}})}function MenuItem({children:e,onSelect:n,disabled:r}){return c(u.Consumer,{children:i=>{if(!i)throw Error(`MenuItem must be inside <Menu>`);let{close:a}=i;function handleClick(){r||(n(),a())}function handleKeyDown(e){(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),e.stopPropagation(),handleClick())}return c(`div`,{role:`menuitem`,tabIndex:r?-1:0,"aria-disabled":r,onClick:handleClick,onKeyDown:handleKeyDown,className:t.item,children:e})}})}function MenuSeparator(){return c(`div`,{role:`separator`,className:t.separator})}export{Menu,MenuItem,MenuSeparator,MenuTrigger};
@@ -1 +1 @@
1
- "use client";import e from"./menu-button.module.js";import{useId as t,useRef as n}from"react";import{DismissableLayer as r,cn as i,focusElement as a,useAnchorPosition as o,useSignal as s,useSignalEffect as c,useSignals as l}from"@cascivo/core";import{jsx as u,jsxs as d}from"react/jsx-runtime";function f(e,t){if(!e)return;let n=e.querySelectorAll(`[role="menuitem"]:not([aria-disabled="true"])`);n[t<0?n.length-1:t%n.length]?.focus()}function p({label:p,items:m,variant:h=`secondary`,size:g=`md`,disabled:_=!1,align:v=`start`,labels:y,className:b}){l();let x=s(!1),S=n(null),C=n(null),w=t(),{anchorStyle:T,floatingStyle:E}=o({anchorRef:S,floatingRef:C,placement:v===`end`?`bottom-end`:`bottom-start`,enabled:x});c(()=>{x.value&&f(C.current,0)});function D(e){_||(x.value=!0,queueMicrotask(()=>f(C.current,e)))}function O(e){x.value=!1,e&&a(S.current)}function k(e){e.key===`ArrowDown`||e.key===`Enter`||e.key===` `?(e.preventDefault(),D(0)):e.key===`ArrowUp`&&(e.preventDefault(),D(-1))}function A(e){if(e.key===`ArrowDown`){e.preventDefault();let t=e.currentTarget.nextElementSibling;t?t.focus():f(C.current,0)}else if(e.key===`ArrowUp`){e.preventDefault();let t=e.currentTarget.previousElementSibling;t?t.focus():f(C.current,-1)}else e.key===`Escape`?(e.preventDefault(),O(!0)):e.key===`Tab`&&O(!1)}function j(e){e.disabled||(e.onSelect?.(),O(!0))}return d(`div`,{className:i(e.root,b),children:[u(`button`,{ref:S,type:`button`,className:e.trigger,"data-variant":h,"data-size":g,disabled:_,"aria-haspopup":`menu`,"aria-expanded":x.value,"aria-controls":w,...y?.open!==void 0&&{"aria-label":y.open},style:T,onClick:()=>{x.value?O(!1):D(0)},onKeyDown:k,children:p}),x.value?u(r,{onDismiss:()=>O(!0),children:u(`div`,{ref:C,id:w,role:`menu`,"data-state":`open`,"data-align":v,className:e.menu,style:E,children:m.map(t=>u(`div`,{role:`menuitem`,tabIndex:-1,"aria-disabled":t.disabled,className:e.item,onClick:()=>j(t),onKeyDown:e=>{e.key===`Enter`||e.key===` `?(e.preventDefault(),j(t)):A(e)},children:t.label},t.id))})}):null]})}export{p as MenuButton};
1
+ "use client";import e from"./menu-button.module.js";import{useId as t,useRef as n}from"react";import{DismissableLayer as r,cn as i,focusElement as a,useAnchorPosition as o,useSignal as s,useSignalEffect as c,useSignals as l}from"@cascivo/core";import{jsx as u,jsxs as d}from"react/jsx-runtime";function focusItem(e,t){if(!e)return;let n=e.querySelectorAll(`[role="menuitem"]:not([aria-disabled="true"])`);n[t<0?n.length-1:t%n.length]?.focus()}function MenuButton({label:f,items:p,variant:m=`secondary`,size:h=`md`,disabled:g=!1,align:_=`start`,labels:v,className:y}){l();let b=s(!1),x=n(null),S=n(null),C=t(),{anchorStyle:w,floatingStyle:T}=o({anchorRef:x,floatingRef:S,placement:_===`end`?`bottom-end`:`bottom-start`,enabled:b});c(()=>{b.value&&focusItem(S.current,0)});function openMenu(e){g||(b.value=!0,queueMicrotask(()=>focusItem(S.current,e)))}function close(e){b.value=!1,e&&a(x.current)}function handleTriggerKeyDown(e){e.key===`ArrowDown`||e.key===`Enter`||e.key===` `?(e.preventDefault(),openMenu(0)):e.key===`ArrowUp`&&(e.preventDefault(),openMenu(-1))}function handleItemKeyDown(e){if(e.key===`ArrowDown`){e.preventDefault();let t=e.currentTarget.nextElementSibling;t?t.focus():focusItem(S.current,0)}else if(e.key===`ArrowUp`){e.preventDefault();let t=e.currentTarget.previousElementSibling;t?t.focus():focusItem(S.current,-1)}else e.key===`Escape`?(e.preventDefault(),close(!0)):e.key===`Tab`&&close(!1)}function select(e){e.disabled||(e.onSelect?.(),close(!0))}return d(`div`,{className:i(e.root,y),children:[u(`button`,{ref:x,type:`button`,className:e.trigger,"data-variant":m,"data-size":h,disabled:g,"aria-haspopup":`menu`,"aria-expanded":b.value,"aria-controls":C,...v?.open!==void 0&&{"aria-label":v.open},style:w,onClick:()=>{b.value?close(!1):openMenu(0)},onKeyDown:handleTriggerKeyDown,children:f}),b.value?u(r,{onDismiss:()=>close(!0),children:u(`div`,{ref:S,id:C,role:`menu`,"data-state":`open`,"data-align":_,className:e.menu,style:T,children:p.map(t=>u(`div`,{role:`menuitem`,tabIndex:-1,"aria-disabled":t.disabled,className:e.item,onClick:()=>select(t),onKeyDown:e=>{e.key===`Enter`||e.key===` `?(e.preventDefault(),select(t)):handleItemKeyDown(e)},children:t.label},t.id))})}):null]})}export{MenuButton};
@@ -1 +1 @@
1
- "use client";import e from"./menubar.module.js";import{useId as t,useRef as n}from"react";import{DismissableLayer as r,Presence as i,cn as a,focusElement as o,useAnchorPosition as s,useRovingFocus as c,useSignal as l,useSignals as u}from"@cascivo/core";import{Fragment as d,jsx as f,jsxs as p}from"react/jsx-runtime";function m({menus:n,ariaLabel:r,"aria-label":i,className:o}){u();let s=t(),d=l(null),p=c({orientation:`horizontal`,loop:!0});return f(`div`,{role:`menubar`,"aria-label":r??i,className:a(e.menubar,o),children:n.map((e,t)=>f(h,{menu:e,index:t,baseId:s,openId:d,itemProps:p.getItemProps(t)},e.id))})}function h({menu:t,baseId:r,openId:a,itemProps:c}){u();let l=n(null),m=n(null),h=a.value===t.id,_=`${r}-menu-${t.id}`,{anchorStyle:v,floatingStyle:y}=s({anchorRef:l,floatingRef:m,placement:`bottom-start`,enabled:h}),b=()=>{(m.current?.querySelector(`[role="menuitem"]:not([aria-disabled="true"])`))?.focus()},x=e=>{c.onKeyDown(e),!e.defaultPrevented&&(e.key===`ArrowDown`||e.key===`Enter`||e.key===` `?(e.preventDefault(),a.value=t.id,requestAnimationFrame(b)):e.key===`Escape`&&(a.value=null))},{ref:S,onKeyDown:C,...w}=c;return p(d,{children:[f(`button`,{ref:e=>{l.current=e,S(e)},type:`button`,role:`menuitem`,"aria-haspopup":`menu`,"aria-expanded":h,"aria-controls":_,"data-state":h?`open`:`closed`,className:e.trigger,style:v,onClick:()=>{a.value=h?null:t.id},onKeyDown:x,...w,children:t.label}),f(i,{present:h,children:f(g,{menu:t,menuId:_,floatingRef:m,floatingStyle:y,onClose:()=>{a.value=null,o(l.current)}})})]})}function g({menu:t,menuId:n,floatingRef:i,floatingStyle:a,onClose:o}){let s=e=>{let t=Array.from(i.current?.querySelectorAll(`[role="menuitem"]:not([aria-disabled="true"])`)??[]);if(t.length===0)return;let n=t.indexOf(e.currentTarget);e.key===`ArrowDown`?(e.preventDefault(),t[(n+1)%t.length]?.focus()):e.key===`ArrowUp`?(e.preventDefault(),t[(n-1+t.length)%t.length]?.focus()):e.key===`Home`?(e.preventDefault(),t[0]?.focus()):e.key===`End`&&(e.preventDefault(),t[t.length-1]?.focus())};return f(r,{onDismiss:o,children:f(`div`,{ref:i,id:n,role:`menu`,"aria-label":typeof t.label==`string`?t.label:void 0,className:e.panel,style:a,children:t.items.map(t=>f(`div`,{role:`menuitem`,tabIndex:-1,"aria-disabled":t.disabled,className:e.item,onClick:()=>{t.disabled||(t.onSelect?.(),o())},onKeyDown:e=>{t.disabled||(e.key===`Enter`||e.key===` `?(e.preventDefault(),t.onSelect?.(),o()):s(e))},children:t.label},t.id))})})}export{m as Menubar};
1
+ "use client";import e from"./menubar.module.js";import{useId as t,useRef as n}from"react";import{DismissableLayer as r,Presence as i,cn as a,focusElement as o,useAnchorPosition as s,useRovingFocus as c,useSignal as l,useSignals as u}from"@cascivo/core";import{Fragment as d,jsx as f,jsxs as p}from"react/jsx-runtime";function Menubar({menus:n,ariaLabel:r,"aria-label":i,className:o}){u();let s=t(),d=l(null),p=c({orientation:`horizontal`,loop:!0});return f(`div`,{role:`menubar`,"aria-label":r??i,className:a(e.menubar,o),children:n.map((e,t)=>f(MenubarTrigger,{menu:e,index:t,baseId:s,openId:d,itemProps:p.getItemProps(t)},e.id))})}function MenubarTrigger({menu:t,baseId:r,openId:a,itemProps:c}){u();let l=n(null),m=n(null),h=a.value===t.id,g=`${r}-menu-${t.id}`,{anchorStyle:_,floatingStyle:v}=s({anchorRef:l,floatingRef:m,placement:`bottom-start`,enabled:h}),focusFirstItem=()=>{(m.current?.querySelector(`[role="menuitem"]:not([aria-disabled="true"])`))?.focus()},handleKeyDown=e=>{c.onKeyDown(e),!e.defaultPrevented&&(e.key===`ArrowDown`||e.key===`Enter`||e.key===` `?(e.preventDefault(),a.value=t.id,requestAnimationFrame(focusFirstItem)):e.key===`Escape`&&(a.value=null))},{ref:y,onKeyDown:b,...x}=c;return p(d,{children:[f(`button`,{ref:e=>{l.current=e,y(e)},type:`button`,role:`menuitem`,"aria-haspopup":`menu`,"aria-expanded":h,"aria-controls":g,"data-state":h?`open`:`closed`,className:e.trigger,style:_,onClick:()=>{a.value=h?null:t.id},onKeyDown:handleKeyDown,...x,children:t.label}),f(i,{present:h,children:f(MenubarPanel,{menu:t,menuId:g,floatingRef:m,floatingStyle:v,onClose:()=>{a.value=null,o(l.current)}})})]})}function MenubarPanel({menu:t,menuId:n,floatingRef:i,floatingStyle:a,onClose:o}){let handleItemKeyDown=e=>{let t=Array.from(i.current?.querySelectorAll(`[role="menuitem"]:not([aria-disabled="true"])`)??[]);if(t.length===0)return;let n=t.indexOf(e.currentTarget);e.key===`ArrowDown`?(e.preventDefault(),t[(n+1)%t.length]?.focus()):e.key===`ArrowUp`?(e.preventDefault(),t[(n-1+t.length)%t.length]?.focus()):e.key===`Home`?(e.preventDefault(),t[0]?.focus()):e.key===`End`&&(e.preventDefault(),t[t.length-1]?.focus())};return f(r,{onDismiss:o,children:f(`div`,{ref:i,id:n,role:`menu`,"aria-label":typeof t.label==`string`?t.label:void 0,className:e.panel,style:a,children:t.items.map(t=>f(`div`,{role:`menuitem`,tabIndex:-1,"aria-disabled":t.disabled,className:e.item,onClick:()=>{t.disabled||(t.onSelect?.(),o())},onKeyDown:e=>{t.disabled||(e.key===`Enter`||e.key===` `?(e.preventDefault(),t.onSelect?.(),o()):handleItemKeyDown(e))},children:t.label},t.id))})})}export{Menubar};
@@ -1 +1 @@
1
- "use client";import e from"./modal.module.js";import{useRef as t}from"react";import{cn as n,useDraggable as r,useEffectPropSignal as i,useId as a,useSignalEffect as o,useSignals as s}from"@cascivo/core";import{builtin as c,t as l}from"@cascivo/i18n";import{jsx as u,jsxs as d}from"react/jsx-runtime";function f({open:f=!1,onClose:p,title:m,description:h,children:g,footer:_,className:v,size:y=`md`,draggable:b=!1}){s();let x=t(null),S=t(p);S.current=p;let C=a(`cascivo-modal-title`),w=a(`cascivo-modal-desc`),{handleRef:T,offset:E}=r({isDisabled:!b}),D=b?{"--modal-x":`${E.value.x}px`,"--modal-y":`${E.value.y}px`}:void 0,O=i(f);return o(()=>{let e=x.current;e&&(O.value?e.open||e.showModal():e.open&&e.close())}),o(()=>{let e=x.current;if(!e)return;let t=()=>S.current?.();return e.addEventListener(`close`,t),()=>e.removeEventListener(`close`,t)}),u(`dialog`,{ref:x,"data-size":y,"data-draggable":b||void 0,className:n(e.dialog,v),style:D,onClick:e=>{e.target===x.current&&x.current?.close()},"aria-labelledby":m?C:void 0,"aria-describedby":h?w:void 0,children:d(`div`,{className:e.panel,children:[(m||p)&&d(`div`,{className:e.header,ref:b?e=>{T.current=e}:void 0,children:[m&&u(`h2`,{id:C,className:e.title,children:m}),p&&u(`button`,{type:`button`,className:e.close,onClick:()=>x.current?.close(),"aria-label":l(c.modal.close),children:`✕`})]}),h&&u(`p`,{id:w,className:e.description,children:h}),u(`div`,{className:e.body,"data-cascivo-modal-body":``,children:g}),_&&u(`div`,{className:e.footer,"data-cascivo-modal-footer":``,children:_})]})})}export{f as Modal};
1
+ "use client";import e from"./modal.module.js";import{useRef as t}from"react";import{cn as n,useDraggable as r,useEffectPropSignal as i,useId as a,useSignalEffect as o,useSignals as s}from"@cascivo/core";import{builtin as c,t as l}from"@cascivo/i18n";import{jsx as u,jsxs as d}from"react/jsx-runtime";function Modal({open:f=!1,onClose:p,title:m,description:h,children:g,footer:_,className:v,size:y=`md`,draggable:b=!1}){s();let x=t(null),S=t(p);S.current=p;let C=a(`cascivo-modal-title`),w=a(`cascivo-modal-desc`),{handleRef:T,offset:E}=r({isDisabled:!b}),D=b?{"--modal-x":`${E.value.x}px`,"--modal-y":`${E.value.y}px`}:void 0,O=i(f);return o(()=>{let e=x.current;e&&(O.value?e.open||e.showModal():e.open&&e.close())}),o(()=>{let e=x.current;if(!e)return;let handler=()=>S.current?.();return e.addEventListener(`close`,handler),()=>e.removeEventListener(`close`,handler)}),u(`dialog`,{ref:x,"data-size":y,"data-draggable":b||void 0,className:n(e.dialog,v),style:D,onClick:e=>{e.target===x.current&&x.current?.close()},"aria-labelledby":m?C:void 0,"aria-describedby":h?w:void 0,children:d(`div`,{className:e.panel,children:[(m||p)&&d(`div`,{className:e.header,ref:b?e=>{T.current=e}:void 0,children:[m&&u(`h2`,{id:C,className:e.title,children:m}),p&&u(`button`,{type:`button`,className:e.close,onClick:()=>x.current?.close(),"aria-label":l(c.modal.close),children:`✕`})]}),h&&u(`p`,{id:w,className:e.description,children:h}),u(`div`,{className:e.body,"data-cascivo-modal-body":``,children:g}),_&&u(`div`,{className:e.footer,"data-cascivo-modal-footer":``,children:_})]})})}export{Modal};
@@ -1 +1 @@
1
- function e(e){let t=[];return e.forEach((e,n)=>{e.disabled||t.push(n)}),t}function t(t,n,r){let i=e(r);if(i.length===0)return-1;let a=i.indexOf(t);return a===-1?n>0?i[0]:i[i.length-1]:i[(a+n+i.length)%i.length]}function n(t){return e(t)[0]??-1}function r(t){let n=e(t);return n[n.length-1]??-1}function i(t,n,r){let i=e(r);if(i.length===0)return-1;let a=i.indexOf(t),o=a===-1?n>0?-1:i.length:a;return i[Math.min(Math.max(o+n*10,0),i.length-1)]}function a(e,t){return e>=0&&e<t.length&&!t[e]?.disabled?e:n(t)}export{a as clampActive,n as firstActive,r as lastActive,t as moveActive,i as pageActive};
1
+ function enabledIndexes(e){let t=[];return e.forEach((e,n)=>{e.disabled||t.push(n)}),t}function moveActive(e,t,n){let r=enabledIndexes(n);if(r.length===0)return-1;let i=r.indexOf(e);return i===-1?t>0?r[0]:r[r.length-1]:r[(i+t+r.length)%r.length]}function firstActive(e){return enabledIndexes(e)[0]??-1}function lastActive(e){let t=enabledIndexes(e);return t[t.length-1]??-1}function pageActive(e,t,n){let r=enabledIndexes(n);if(r.length===0)return-1;let i=r.indexOf(e),a=i===-1?t>0?-1:r.length:i;return r[Math.min(Math.max(a+t*10,0),r.length-1)]}function clampActive(e,t){return e>=0&&e<t.length&&!t[e]?.disabled?e:firstActive(t)}export{clampActive,firstActive,lastActive,moveActive,pageActive};
@@ -1 +1 @@
1
- "use client";import{usePopover as e}from"../popover/use-popover.js";import{clampActive as t,firstActive as n,lastActive as r,moveActive as i,pageActive as a}from"./list-nav.js";import{filterOptions as o,groupOptions as ee,highlightSegments as te,isNewLabel as ne,orderByGroup as re}from"./option-list.js";import s from"./multi-select.module.js";import{useId as ie,useRef as c}from"react";import{cn as ae,focusElement as oe,useControllableSignal as se,useSignal as ce,useSignalEffect as l,useSignals as le}from"@cascivo/core";import{builtin as u,t as d}from"@cascivo/i18n";import{jsx as f,jsxs as p}from"react/jsx-runtime";function ue(...e){return e.filter(Boolean).join(` `)||void 0}function m({options:m,value:de,defaultValue:fe,onValueChange:pe,placeholder:me,label:h,ariaLabel:g,hint:_,error:v,display:y=`count`,disabled:b=!1,clearable:he=!1,selectAll:ge=!1,max:x,creatable:_e=!1,onCreate:ve,loading:S=!1,onSearchChange:C,filter:w,searchable:T=!0,size:ye=`md`,name:E,labels:D,className:be,id:xe,"aria-labelledby":Se,"aria-describedby":Ce,"aria-invalid":we,...Te}){le();let O=e({placement:`bottom`}),k=ie(),A=xe??`${k}-trigger`,j=`${k}-listbox`,M=`${k}-panel`,Ee=`${k}-search`,N=e=>`${k}-option-${e}`,P=ce(``),F=ce(-1),I=c(null),L=c(null),R=c(null),[z,De]=se({value:de,defaultValue:fe??[],onChange:pe}),B=O.isOpen.value,V=z.value,H=x!==void 0&&V.length>=x,U=P.value,W=re(o(m,T?U:``,w)),G=_e&&U.trim()!==``&&ne(m,U.trim()),K=G?W.length:-1,Oe=ee(W),ke=me??D?.placeholder??d(u.multiSelect.placeholder),q=D?.search??d(u.multiSelect.search),Ae=D?.noResults??d(u.multiSelect.noResults),je=D?.loading??d(u.multiSelect.loading),Me=D?.label??h??g??d(u.multiSelect.label),Ne=D?.clear??d(u.multiSelect.clear),Pe=D?.selectAll??d(u.multiSelect.selectAll),Fe=D?.clearAll??d(u.multiSelect.clearAll),Ie=e=>D?.remove?D.remove.replaceAll(`{label}`,e):d(u.multiSelect.remove,{label:e}),Le=e=>D?.create?D.create.replaceAll(`{label}`,e):d(u.multiSelect.create,{label:e}),Re=V.flatMap(e=>{let t=m.find(t=>t.value===e);return t?[t]:[{value:e,label:e}]}),ze=V.length===0?ke:D?.selected?D.selected(V.length):d(u.multiSelect.selected,{count:String(V.length)}),J=c(!1);l(()=>{if(O.isOpen.value){F.value=-1;let e=setTimeout(()=>oe(T?L.current:I.current),0);return J.current=!0,()=>clearTimeout(e)}P.value=``,J.current&&(J.current=!1,oe(R.current))}),l(()=>{let e=F.value;if(!O.isOpen.value||e<0)return;let t=I.current?.querySelector(`#${CSS.escape(N(e))}`);t&&typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`nearest`})});function Y(e){De(e)}function Be(e){let t=z.value;if(t.includes(e)){Y(t.filter(t=>t!==e));return}x!==void 0&&t.length>=x||Y([...t,e])}function X(e){if(e===K&&G){ve?.(U.trim()),P.value=``,C?.(``);return}let t=W[e];t&&!t.disabled&&Be(t.value)}function Z(e){F.value=e}function Ve(e){let t=[...W.map(e=>({...e,disabled:e.disabled||H&&!V.includes(e.value)})),...G?[{value:``,label:U}]:[]];switch(e.key){case`ArrowDown`:e.preventDefault(),Z(i(F.value,1,t));break;case`ArrowUp`:e.preventDefault(),Z(i(F.value,-1,t));break;case`Home`:e.preventDefault(),Z(n(t));break;case`End`:e.preventDefault(),Z(r(t));break;case`PageDown`:e.preventDefault(),Z(a(F.value,1,t));break;case`PageUp`:e.preventDefault(),Z(a(F.value,-1,t));break;case`Enter`:F.value>=0&&(e.preventDefault(),X(F.value));break;case` `:!T&&F.value>=0&&(e.preventDefault(),X(F.value));break;case`Escape`:e.preventDefault(),e.stopPropagation(),O.close();break;case`Backspace`:y===`chips`&&U===``&&z.value.length>0&&(e.preventDefault(),Y(z.value.slice(0,-1)));break}}function He(e){b||(e.key===`ArrowDown`||e.key===`ArrowUp`||e.key===`Enter`||e.key===` `)&&(e.preventDefault(),O.open())}let Q=m.filter(e=>!e.disabled).map(e=>e.value),Ue=Q.length>0&&Q.every(e=>V.includes(e)),We=ue(v?`${k}-error`:_?`${k}-hint`:void 0,Ce);function $(e,t){let n=V.includes(e.value),r=e.disabled||H&&!n;return p(`div`,{id:N(t),role:`option`,"aria-selected":n,"aria-disabled":r||void 0,"data-active":t===F.value?``:void 0,"data-selected":n?``:void 0,"data-disabled":r?``:void 0,className:s.option,onMouseDown:e=>e.preventDefault(),onClick:()=>{r||Be(e.value)},onMouseEnter:()=>{r||Z(t)},children:[f(`span`,{className:s.checkbox,"aria-hidden":`true`}),f(`span`,{className:s[`option-label`],children:te(e.label,T?U:``).map((e,t)=>e.match?f(`mark`,{className:s.match,children:e.text},t):f(`span`,{children:e.text},t))})]},e.value)}return p(`div`,{className:ae(s.wrapper,be),"data-state":v?`error`:B?`open`:`closed`,"data-size":ye,...Te,children:[h&&f(`label`,{className:s.label,htmlFor:A,children:h}),p(`div`,{className:s.field,"data-display":y,children:[y===`chips`&&Re.map(e=>p(`span`,{className:s.chip,children:[f(`span`,{className:s[`chip-label`],children:e.label}),f(`button`,{type:`button`,className:s[`chip-remove`],"aria-label":Ie(e.label),disabled:b,onClick:()=>Y(z.value.filter(t=>t!==e.value))})]},e.value)),p(`button`,{ref:e=>{R.current=e,O.triggerRef.current=e},id:A,type:`button`,className:s.trigger,"aria-haspopup":`listbox`,"aria-expanded":B,"aria-controls":M,"aria-labelledby":Se,"aria-label":g,"aria-invalid":v?!0:we,"aria-describedby":We,disabled:b,style:{anchorName:O.anchorName},onClick:()=>{b||O.toggle()},onKeyDown:He,children:[f(`span`,{className:s[`trigger-label`],"data-empty":V.length===0?``:void 0,children:y===`chips`&&V.length>0?f(`span`,{className:s[`sr-only`],children:ze}):ze}),f(`span`,{className:s.chevron,"aria-hidden":`true`})]}),he&&V.length>0&&!b&&f(`button`,{type:`button`,className:s.clear,"aria-label":Ne,onClick:()=>Y([]),children:f(`span`,{className:s[`clear-glyph`],"aria-hidden":`true`})})]}),E!==void 0&&V.map(e=>f(`input`,{type:`hidden`,name:E,value:e},e)),p(`div`,{ref:O.popoverRef,id:M,popover:`auto`,className:s.panel,style:{positionAnchor:O.anchorName},tabIndex:-1,children:[T&&f(`div`,{className:s[`search-row`],children:f(`input`,{ref:L,id:Ee,type:`text`,role:`combobox`,className:s.search,placeholder:q,"aria-label":q,"aria-expanded":B,"aria-controls":j,"aria-autocomplete":`list`,"aria-activedescendant":B&&F.value>=0?N(F.value):void 0,autoComplete:`off`,value:U,onChange:e=>{P.value=e.currentTarget.value,C?.(e.currentTarget.value),F.value=t(-1,o(m,e.currentTarget.value,w))},onKeyDown:Ve})}),ge&&Q.length>0&&f(`button`,{type:`button`,className:s[`select-all`],onMouseDown:e=>e.preventDefault(),onClick:()=>Y(Ue?[]:x===void 0?Q:Q.slice(0,x)),children:Ue?Fe:Pe}),p(`div`,{ref:I,role:`listbox`,id:j,"aria-multiselectable":`true`,"aria-label":Me,"aria-busy":S||void 0,"aria-activedescendant":!T&&B&&F.value>=0?N(F.value):void 0,tabIndex:T?-1:0,className:s.options,onKeyDown:T?void 0:Ve,children:[Oe.map(e=>e.label===void 0?e.entries.map(({option:e,index:t})=>$(e,t)):p(`div`,{role:`group`,"aria-label":e.label,className:s.group,children:[f(`span`,{className:s[`group-label`],"aria-hidden":`true`,children:e.label}),e.entries.map(({option:e,index:t})=>$(e,t))]},e.label)),G&&f(`div`,{id:N(K),role:`option`,"aria-selected":!1,"data-active":K===F.value?``:void 0,className:ae(s.option,s.create),onMouseDown:e=>e.preventDefault(),onClick:()=>X(K),onMouseEnter:()=>Z(K),children:Le(U.trim())})]}),S?f(`div`,{className:s.status,role:`status`,children:je}):W.length===0&&!G?f(`div`,{className:s.status,role:`status`,children:Ae}):null]}),f(`span`,{className:s[`sr-only`],role:`status`,"aria-live":`polite`,children:B?d(u.multiSelect.selectionChanged,{count:String(V.length),total:String(m.length)}):``}),v&&f(`span`,{id:`${k}-error`,className:s.error,role:`alert`,children:v}),!v&&_&&f(`span`,{id:`${k}-hint`,className:s.hint,children:_})]})}export{m as MultiSelect};
1
+ "use client";import{usePopover as e}from"../popover/use-popover.js";import{clampActive as t,firstActive as n,lastActive as r,moveActive as i,pageActive as a}from"./list-nav.js";import{filterOptions as o,groupOptions as ee,highlightSegments as te,isNewLabel as ne,orderByGroup as re}from"./option-list.js";import s from"./multi-select.module.js";import{useId as ie,useRef as c}from"react";import{cn as l,focusElement as u,useControllableSignal as ae,useSignal as d,useSignalEffect as f,useSignals as oe}from"@cascivo/core";import{builtin as p,t as m}from"@cascivo/i18n";import{jsx as h,jsxs as g}from"react/jsx-runtime";function mergeDescribedBy(...e){return e.filter(Boolean).join(` `)||void 0}function MultiSelect({options:_,value:se,defaultValue:ce,onValueChange:le,placeholder:ue,label:v,ariaLabel:y,hint:b,error:x,display:S=`count`,disabled:C=!1,clearable:de=!1,selectAll:fe=!1,max:w,creatable:pe=!1,onCreate:me,loading:T=!1,onSearchChange:E,filter:D,searchable:O=!0,size:he=`md`,name:k,labels:A,className:ge,id:_e,"aria-labelledby":ve,"aria-describedby":ye,"aria-invalid":be,...xe}){oe();let j=e({placement:`bottom`}),M=ie(),N=_e??`${M}-trigger`,P=`${M}-listbox`,F=`${M}-panel`,Se=`${M}-search`,optionId=e=>`${M}-option-${e}`,I=d(``),L=d(-1),R=c(null),z=c(null),B=c(null),[V,Ce]=ae({value:se,defaultValue:ce??[],onChange:le}),H=j.isOpen.value,U=V.value,W=w!==void 0&&U.length>=w,G=I.value,K=re(o(_,O?G:``,D)),q=pe&&G.trim()!==``&&ne(_,G.trim()),J=q?K.length:-1,we=ee(K),Te=ue??A?.placeholder??m(p.multiSelect.placeholder),Y=A?.search??m(p.multiSelect.search),Ee=A?.noResults??m(p.multiSelect.noResults),De=A?.loading??m(p.multiSelect.loading),Oe=A?.label??v??y??m(p.multiSelect.label),ke=A?.clear??m(p.multiSelect.clear),Ae=A?.selectAll??m(p.multiSelect.selectAll),je=A?.clearAll??m(p.multiSelect.clearAll),removeLabel=e=>A?.remove?A.remove.replaceAll(`{label}`,e):m(p.multiSelect.remove,{label:e}),createLabel=e=>A?.create?A.create.replaceAll(`{label}`,e):m(p.multiSelect.create,{label:e}),Me=U.flatMap(e=>{let t=_.find(t=>t.value===e);return t?[t]:[{value:e,label:e}]}),X=U.length===0?Te:A?.selected?A.selected(U.length):m(p.multiSelect.selected,{count:String(U.length)}),Z=c(!1);f(()=>{if(j.isOpen.value){L.value=-1;let e=setTimeout(()=>u(O?z.current:R.current),0);return Z.current=!0,()=>clearTimeout(e)}I.value=``,Z.current&&(Z.current=!1,u(B.current))}),f(()=>{let e=L.value;if(!j.isOpen.value||e<0)return;let t=R.current?.querySelector(`#${CSS.escape(optionId(e))}`);t&&typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`nearest`})});function commit(e){Ce(e)}function toggleOption(e){let t=V.value;if(t.includes(e)){commit(t.filter(t=>t!==e));return}w!==void 0&&t.length>=w||commit([...t,e])}function activate(e){if(e===J&&q){me?.(G.trim()),I.value=``,E?.(``);return}let t=K[e];t&&!t.disabled&&toggleOption(t.value)}function setActive(e){L.value=e}function handleKeyDown(e){let t=[...K.map(e=>({...e,disabled:e.disabled||W&&!U.includes(e.value)})),...q?[{value:``,label:G}]:[]];switch(e.key){case`ArrowDown`:e.preventDefault(),setActive(i(L.value,1,t));break;case`ArrowUp`:e.preventDefault(),setActive(i(L.value,-1,t));break;case`Home`:e.preventDefault(),setActive(n(t));break;case`End`:e.preventDefault(),setActive(r(t));break;case`PageDown`:e.preventDefault(),setActive(a(L.value,1,t));break;case`PageUp`:e.preventDefault(),setActive(a(L.value,-1,t));break;case`Enter`:L.value>=0&&(e.preventDefault(),activate(L.value));break;case` `:!O&&L.value>=0&&(e.preventDefault(),activate(L.value));break;case`Escape`:e.preventDefault(),e.stopPropagation(),j.close();break;case`Backspace`:S===`chips`&&G===``&&V.value.length>0&&(e.preventDefault(),commit(V.value.slice(0,-1)));break}}function handleTriggerKeyDown(e){C||(e.key===`ArrowDown`||e.key===`ArrowUp`||e.key===`Enter`||e.key===` `)&&(e.preventDefault(),j.open())}let Q=_.filter(e=>!e.disabled).map(e=>e.value),$=Q.length>0&&Q.every(e=>U.includes(e)),Ne=mergeDescribedBy(x?`${M}-error`:b?`${M}-hint`:void 0,ye);function renderOption(e,t){let n=U.includes(e.value),r=e.disabled||W&&!n;return g(`div`,{id:optionId(t),role:`option`,"aria-selected":n,"aria-disabled":r||void 0,"data-active":t===L.value?``:void 0,"data-selected":n?``:void 0,"data-disabled":r?``:void 0,className:s.option,onMouseDown:e=>e.preventDefault(),onClick:()=>{r||toggleOption(e.value)},onMouseEnter:()=>{r||setActive(t)},children:[h(`span`,{className:s.checkbox,"aria-hidden":`true`}),h(`span`,{className:s[`option-label`],children:te(e.label,O?G:``).map((e,t)=>e.match?h(`mark`,{className:s.match,children:e.text},t):h(`span`,{children:e.text},t))})]},e.value)}return g(`div`,{className:l(s.wrapper,ge),"data-state":x?`error`:H?`open`:`closed`,"data-size":he,...xe,children:[v&&h(`label`,{className:s.label,htmlFor:N,children:v}),g(`div`,{className:s.field,"data-display":S,children:[S===`chips`&&Me.map(e=>g(`span`,{className:s.chip,children:[h(`span`,{className:s[`chip-label`],children:e.label}),h(`button`,{type:`button`,className:s[`chip-remove`],"aria-label":removeLabel(e.label),disabled:C,onClick:()=>commit(V.value.filter(t=>t!==e.value))})]},e.value)),g(`button`,{ref:e=>{B.current=e,j.triggerRef.current=e},id:N,type:`button`,className:s.trigger,"aria-haspopup":`listbox`,"aria-expanded":H,"aria-controls":F,"aria-labelledby":ve,"aria-label":y,"aria-invalid":x?!0:be,"aria-describedby":Ne,disabled:C,style:{anchorName:j.anchorName},onClick:()=>{C||j.toggle()},onKeyDown:handleTriggerKeyDown,children:[h(`span`,{className:s[`trigger-label`],"data-empty":U.length===0?``:void 0,children:S===`chips`&&U.length>0?h(`span`,{className:s[`sr-only`],children:X}):X}),h(`span`,{className:s.chevron,"aria-hidden":`true`})]}),de&&U.length>0&&!C&&h(`button`,{type:`button`,className:s.clear,"aria-label":ke,onClick:()=>commit([]),children:h(`span`,{className:s[`clear-glyph`],"aria-hidden":`true`})})]}),k!==void 0&&U.map(e=>h(`input`,{type:`hidden`,name:k,value:e},e)),g(`div`,{ref:j.popoverRef,id:F,popover:`auto`,className:s.panel,style:{positionAnchor:j.anchorName},tabIndex:-1,children:[O&&h(`div`,{className:s[`search-row`],children:h(`input`,{ref:z,id:Se,type:`text`,role:`combobox`,className:s.search,placeholder:Y,"aria-label":Y,"aria-expanded":H,"aria-controls":P,"aria-autocomplete":`list`,"aria-activedescendant":H&&L.value>=0?optionId(L.value):void 0,autoComplete:`off`,value:G,onChange:e=>{I.value=e.currentTarget.value,E?.(e.currentTarget.value),L.value=t(-1,o(_,e.currentTarget.value,D))},onKeyDown:handleKeyDown})}),fe&&Q.length>0&&h(`button`,{type:`button`,className:s[`select-all`],onMouseDown:e=>e.preventDefault(),onClick:()=>commit($?[]:w===void 0?Q:Q.slice(0,w)),children:$?je:Ae}),g(`div`,{ref:R,role:`listbox`,id:P,"aria-multiselectable":`true`,"aria-label":Oe,"aria-busy":T||void 0,"aria-activedescendant":!O&&H&&L.value>=0?optionId(L.value):void 0,tabIndex:O?-1:0,className:s.options,onKeyDown:O?void 0:handleKeyDown,children:[we.map(e=>e.label===void 0?e.entries.map(({option:e,index:t})=>renderOption(e,t)):g(`div`,{role:`group`,"aria-label":e.label,className:s.group,children:[h(`span`,{className:s[`group-label`],"aria-hidden":`true`,children:e.label}),e.entries.map(({option:e,index:t})=>renderOption(e,t))]},e.label)),q&&h(`div`,{id:optionId(J),role:`option`,"aria-selected":!1,"data-active":J===L.value?``:void 0,className:l(s.option,s.create),onMouseDown:e=>e.preventDefault(),onClick:()=>activate(J),onMouseEnter:()=>setActive(J),children:createLabel(G.trim())})]}),T?h(`div`,{className:s.status,role:`status`,children:De}):K.length===0&&!q?h(`div`,{className:s.status,role:`status`,children:Ee}):null]}),h(`span`,{className:s[`sr-only`],role:`status`,"aria-live":`polite`,children:H?m(p.multiSelect.selectionChanged,{count:String(U.length),total:String(_.length)}):``}),x&&h(`span`,{id:`${M}-error`,className:s.error,role:`alert`,children:x}),!x&&b&&h(`span`,{id:`${M}-hint`,className:s.hint,children:b})]})}export{MultiSelect};
@@ -1 +1 @@
1
- function e(e){return(e.normalize(`NFD`)[0]??e).toLowerCase()}function t(t){return Array.from(t,e)}function n(e,n){let r=t(n).join(``);return r===``?!0:t(e.label).join(``).includes(r)||t(e.value).join(``).includes(r)}function r(e,t,r){let i=r??n;return t===``&&!r?e:e.filter(e=>i(e,t))}function i(e,n){let r=t(n).join(``);if(r===``)return[{text:e,match:!1}];let i=Array.from(e),a=t(e).join(``).indexOf(r);if(a===-1)return[{text:e,match:!1}];let o=Array.from(n).length,s=[],c=i.slice(0,a).join(``),l=i.slice(a,a+o).join(``),u=i.slice(a+o).join(``);return c!==``&&s.push({text:c,match:!1}),s.push({text:l,match:!0}),u!==``&&s.push({text:u,match:!1}),s}function a(e){let t=[],n=new Map;return e.forEach((e,r)=>{let i=e.group,a=n.get(i);a||(a={label:i,entries:[]},n.set(i,a),t.push(a)),a.entries.push({option:e,index:r})}),t.sort((e,t)=>Number(e.label!==void 0)-Number(t.label!==void 0))}function o(e){return a(e).flatMap(e=>e.entries.map(e=>e.option))}function s(e,n){let r=t(n).join(``);return r===``?!1:!e.some(e=>t(e.label).join(``)===r)}export{r as filterOptions,a as groupOptions,i as highlightSegments,s as isNewLabel,o as orderByGroup};
1
+ function foldChar(e){return(e.normalize(`NFD`)[0]??e).toLowerCase()}function fold(e){return Array.from(e,foldChar)}function defaultMatch(e,t){let n=fold(t).join(``);return n===``?!0:fold(e.label).join(``).includes(n)||fold(e.value).join(``).includes(n)}function filterOptions(e,t,n){let r=n??defaultMatch;return t===``&&!n?e:e.filter(e=>r(e,t))}function highlightSegments(e,t){let n=fold(t).join(``);if(n===``)return[{text:e,match:!1}];let r=Array.from(e),i=fold(e).join(``).indexOf(n);if(i===-1)return[{text:e,match:!1}];let a=Array.from(t).length,o=[],s=r.slice(0,i).join(``),c=r.slice(i,i+a).join(``),l=r.slice(i+a).join(``);return s!==``&&o.push({text:s,match:!1}),o.push({text:c,match:!0}),l!==``&&o.push({text:l,match:!1}),o}function groupOptions(e){let t=[],n=new Map;return e.forEach((e,r)=>{let i=e.group,a=n.get(i);a||(a={label:i,entries:[]},n.set(i,a),t.push(a)),a.entries.push({option:e,index:r})}),t.sort((e,t)=>Number(e.label!==void 0)-Number(t.label!==void 0))}function orderByGroup(e){return groupOptions(e).flatMap(e=>e.entries.map(e=>e.option))}function isNewLabel(e,t){let n=fold(t).join(``);return n===``?!1:!e.some(e=>fold(e.label).join(``)===n)}export{filterOptions,groupOptions,highlightSegments,isNewLabel,orderByGroup};
@@ -1 +1 @@
1
- "use client";import e from"./navigation-menu.module.js";import{useId as t,useRef as n}from"react";import{DismissableLayer as r,Presence as i,cn as a,focusElement as o,getLinkComponent as s,useAnchorPosition as c,useRovingFocus as l,useSignal as u,useSignals as d}from"@cascivo/core";import{jsx as f,jsxs as p}from"react/jsx-runtime";function m({items:n,"aria-label":r,ariaLabel:i,label:o,orientation:s=`horizontal`,className:c}){d();let p=t(),m=u(null),g=l({orientation:s,loop:!0});return f(`nav`,{"aria-label":i??r??o,className:a(e.nav,c),"data-orientation":s,children:f(`ul`,{role:`list`,className:e.list,children:n.map((e,t)=>f(h,{item:e,baseId:p,openId:m,itemProps:g.getItemProps(t)},e.id))})})}function h({item:t,baseId:r,openId:a,itemProps:l}){d();let u=n(null),m=n(null),h=t.content!=null,_=a.value===t.id,v=`${r}-panel-${t.id}`,{anchorStyle:y,floatingStyle:b}=c({anchorRef:u,floatingRef:m,placement:`bottom-start`,enabled:_}),{ref:x,onKeyDown:S,...C}=l;if(!h){let n=s();return f(`li`,{className:e.item,children:f(n,{ref:e=>x(e),href:t.href,className:e.link,onKeyDown:S,...C,children:t.label})})}return p(`li`,{className:e.item,children:[f(`button`,{ref:e=>{u.current=e,x(e)},type:`button`,"aria-expanded":_,"aria-controls":v,"data-state":_?`open`:`closed`,className:e.trigger,style:y,onClick:()=>{a.value=_?null:t.id},onKeyDown:e=>{S(e),!e.defaultPrevented&&e.key===`Escape`&&(a.value=null)},...C,children:t.label}),f(i,{present:_,children:f(g,{panelId:v,floatingRef:m,floatingStyle:b,onClose:()=>{a.value=null,o(u.current)},children:t.content})})]})}function g({panelId:t,floatingRef:n,floatingStyle:i,onClose:a,children:o}){return f(r,{onDismiss:a,children:f(`div`,{ref:n,id:t,className:e.panel,style:i,children:o})})}export{m as NavigationMenu};
1
+ "use client";import e from"./navigation-menu.module.js";import{useId as t,useRef as n}from"react";import{DismissableLayer as r,Presence as i,cn as a,focusElement as o,getLinkComponent as s,useAnchorPosition as c,useRovingFocus as l,useSignal as u,useSignals as d}from"@cascivo/core";import{jsx as f,jsxs as p}from"react/jsx-runtime";function NavigationMenu({items:n,"aria-label":r,ariaLabel:i,label:o,orientation:s=`horizontal`,className:c}){d();let p=t(),m=u(null),h=l({orientation:s,loop:!0});return f(`nav`,{"aria-label":i??r??o,className:a(e.nav,c),"data-orientation":s,children:f(`ul`,{role:`list`,className:e.list,children:n.map((e,t)=>f(NavigationMenuEntry,{item:e,baseId:p,openId:m,itemProps:h.getItemProps(t)},e.id))})})}function NavigationMenuEntry({item:t,baseId:r,openId:a,itemProps:l}){d();let u=n(null),m=n(null),h=t.content!=null,g=a.value===t.id,_=`${r}-panel-${t.id}`,{anchorStyle:v,floatingStyle:y}=c({anchorRef:u,floatingRef:m,placement:`bottom-start`,enabled:g}),{ref:b,onKeyDown:x,...S}=l;if(!h){let n=s();return f(`li`,{className:e.item,children:f(n,{ref:e=>b(e),href:t.href,className:e.link,onKeyDown:x,...S,children:t.label})})}return p(`li`,{className:e.item,children:[f(`button`,{ref:e=>{u.current=e,b(e)},type:`button`,"aria-expanded":g,"aria-controls":_,"data-state":g?`open`:`closed`,className:e.trigger,style:v,onClick:()=>{a.value=g?null:t.id},onKeyDown:e=>{x(e),!e.defaultPrevented&&e.key===`Escape`&&(a.value=null)},...S,children:t.label}),f(i,{present:g,children:f(NavigationMenuPanel,{panelId:_,floatingRef:m,floatingStyle:y,onClose:()=>{a.value=null,o(u.current)},children:t.content})})]})}function NavigationMenuPanel({panelId:t,floatingRef:n,floatingStyle:i,onClose:a,children:o}){return f(r,{onDismiss:a,children:f(`div`,{ref:n,id:t,className:e.panel,style:i,children:o})})}export{NavigationMenu};