@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
- "use client";import e from"./carousel.module.js";import{Children as t,useId as n,useRef as r}from"react";import{cn as i,useControllableSignal as a,useMediaQuery as o,useRovingFocus 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";function h(e,n){return n||t.toArray(e)}function g({children:t,slides:g,index:_,defaultIndex:v,onIndexChange:y,loop:b=!1,autoplay:x,className:S,labels:C}){u();let w=n(),T=h(t,g),E=T.length,[D,O]=a({value:_,defaultValue:v??0,onChange:y}),k=r(null),A=r(!1),j=o(`(prefers-reduced-motion: reduce)`),{getItemProps:M,setActiveIndex:N}=s({orientation:`horizontal`,loop:b});l(()=>{let e=k.current;if(!e)return;let t=()=>{if(A.current||e.clientWidth===0)return;let t=Math.round(e.scrollLeft/e.clientWidth);t!==D.value&&O(t)};return e.addEventListener(`scroll`,t,{passive:!0}),()=>e.removeEventListener(`scroll`,t)});let P=e=>{if(E===0)return;let t=e;t<0&&(t=b?E-1:0),t>=E&&(t=b?0:E-1);let n=k.current;n&&typeof n.scrollTo==`function`&&n.clientWidth>0&&(A.current=!0,n.scrollTo({left:t*n.clientWidth,behavior:j.value?`auto`:`smooth`}),window.setTimeout(()=>{A.current=!1},400)),O(t),N(t)};l(()=>{N(D.value)});let F=c(x!==void 0&&x>0),I=c(!1);l(()=>{if(!x||x<=0||!F.value||I.value||j.value)return;let e=window.setInterval(()=>{let e=D.peek()+1;P(e>=E?0:e)},x);return()=>window.clearInterval(e)}),l(()=>{if(typeof document>`u`)return;let e=()=>{I.value=document.hidden};return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)});let L=C?.region??f(d.carousel.region),R=C?.previous??f(d.carousel.previous),z=C?.next??f(d.carousel.next),B=C?.play??f(d.carousel.play),V=C?.pause??f(d.carousel.pause),H=!!(x&&x>0);return m(`section`,{className:i(e.carousel,S),"aria-roledescription":`carousel`,"aria-label":L,onMouseEnter:()=>{H&&(I.value=!0)},onMouseLeave:()=>{H&&(I.value=!1)},onFocusCapture:()=>{H&&(I.value=!0)},onBlurCapture:e=>{H&&!e.currentTarget.contains(e.relatedTarget)&&(I.value=!1)},children:[m(`div`,{className:e.viewport,children:[p(`button`,{type:`button`,className:i(e.nav,e.prev),"aria-label":R,"aria-controls":`${w}-track`,disabled:!b&&D.value<=0,onClick:()=>P(D.value-1),children:p(`span`,{className:i(e.chevron,e.chevronPrev),"aria-hidden":`true`})}),p(`div`,{ref:k,id:`${w}-track`,className:e.track,"aria-live":H&&F.value&&!I.value?`off`:`polite`,children:T.map((t,n)=>p(`div`,{className:e.slide,role:`group`,"aria-roledescription":`slide`,"aria-label":f(d.carousel.slide,{n:n+1,total:E}),inert:n===D.value?void 0:!0,children:t},n))}),p(`button`,{type:`button`,className:i(e.nav,e.next),"aria-label":z,"aria-controls":`${w}-track`,disabled:!b&&D.value>=E-1,onClick:()=>P(D.value+1),children:p(`span`,{className:i(e.chevron,e.chevronNext),"aria-hidden":`true`})})]}),m(`div`,{className:e.controls,children:[H&&p(`button`,{type:`button`,className:e.playPause,"aria-label":F.value?V:B,onClick:()=>{F.value=!F.value},children:p(`span`,{className:F.value?e.pauseGlyph:e.playGlyph,"aria-hidden":`true`})}),p(`div`,{className:e.dots,role:`group`,"aria-label":f(d.carousel.choose),children:T.map((t,n)=>{let r=M(n);return p(`button`,{ref:r.ref,type:`button`,className:e.dot,"aria-label":f(d.carousel.goTo,{n:n+1}),"aria-current":n===D.value||void 0,"data-active":n===D.value||void 0,tabIndex:r.tabIndex,onKeyDown:r.onKeyDown,onFocus:()=>{r.onFocus?.(),n!==D.value&&P(n)},onClick:()=>P(n)},n)})})]})]})}export{g as Carousel};
1
+ "use client";import e from"./carousel.module.js";import{Children as t,useId as n,useRef as r}from"react";import{cn as i,useControllableSignal as a,useMediaQuery as o,useRovingFocus 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";function toSlides(e,n){return n||t.toArray(e)}function Carousel({children:t,slides:h,index:g,defaultIndex:_,onIndexChange:v,loop:y=!1,autoplay:b,className:x,labels:S}){u();let C=n(),w=toSlides(t,h),T=w.length,[E,D]=a({value:g,defaultValue:_??0,onChange:v}),O=r(null),k=r(!1),A=o(`(prefers-reduced-motion: reduce)`),{getItemProps:j,setActiveIndex:M}=s({orientation:`horizontal`,loop:y});l(()=>{let e=O.current;if(!e)return;let onScroll=()=>{if(k.current||e.clientWidth===0)return;let t=Math.round(e.scrollLeft/e.clientWidth);t!==E.value&&D(t)};return e.addEventListener(`scroll`,onScroll,{passive:!0}),()=>e.removeEventListener(`scroll`,onScroll)});let goTo=e=>{if(T===0)return;let t=e;t<0&&(t=y?T-1:0),t>=T&&(t=y?0:T-1);let n=O.current;n&&typeof n.scrollTo==`function`&&n.clientWidth>0&&(k.current=!0,n.scrollTo({left:t*n.clientWidth,behavior:A.value?`auto`:`smooth`}),window.setTimeout(()=>{k.current=!1},400)),D(t),M(t)};l(()=>{M(E.value)});let N=c(b!==void 0&&b>0),P=c(!1);l(()=>{if(!b||b<=0||!N.value||P.value||A.value)return;let e=window.setInterval(()=>{let e=E.peek()+1;goTo(e>=T?0:e)},b);return()=>window.clearInterval(e)}),l(()=>{if(typeof document>`u`)return;let onVisibility=()=>{P.value=document.hidden};return document.addEventListener(`visibilitychange`,onVisibility),()=>document.removeEventListener(`visibilitychange`,onVisibility)});let F=S?.region??f(d.carousel.region),I=S?.previous??f(d.carousel.previous),L=S?.next??f(d.carousel.next),R=S?.play??f(d.carousel.play),z=S?.pause??f(d.carousel.pause),B=!!(b&&b>0);return m(`section`,{className:i(e.carousel,x),"aria-roledescription":`carousel`,"aria-label":F,onMouseEnter:()=>{B&&(P.value=!0)},onMouseLeave:()=>{B&&(P.value=!1)},onFocusCapture:()=>{B&&(P.value=!0)},onBlurCapture:e=>{B&&!e.currentTarget.contains(e.relatedTarget)&&(P.value=!1)},children:[m(`div`,{className:e.viewport,children:[p(`button`,{type:`button`,className:i(e.nav,e.prev),"aria-label":I,"aria-controls":`${C}-track`,disabled:!y&&E.value<=0,onClick:()=>goTo(E.value-1),children:p(`span`,{className:i(e.chevron,e.chevronPrev),"aria-hidden":`true`})}),p(`div`,{ref:O,id:`${C}-track`,className:e.track,"aria-live":B&&N.value&&!P.value?`off`:`polite`,children:w.map((t,n)=>p(`div`,{className:e.slide,role:`group`,"aria-roledescription":`slide`,"aria-label":f(d.carousel.slide,{n:n+1,total:T}),inert:n===E.value?void 0:!0,children:t},n))}),p(`button`,{type:`button`,className:i(e.nav,e.next),"aria-label":L,"aria-controls":`${C}-track`,disabled:!y&&E.value>=T-1,onClick:()=>goTo(E.value+1),children:p(`span`,{className:i(e.chevron,e.chevronNext),"aria-hidden":`true`})})]}),m(`div`,{className:e.controls,children:[B&&p(`button`,{type:`button`,className:e.playPause,"aria-label":N.value?z:R,onClick:()=>{N.value=!N.value},children:p(`span`,{className:N.value?e.pauseGlyph:e.playGlyph,"aria-hidden":`true`})}),p(`div`,{className:e.dots,role:`group`,"aria-label":f(d.carousel.choose),children:w.map((t,n)=>{let r=j(n);return p(`button`,{ref:r.ref,type:`button`,className:e.dot,"aria-label":f(d.carousel.goTo,{n:n+1}),"aria-current":n===E.value||void 0,"data-active":n===E.value||void 0,tabIndex:r.tabIndex,onKeyDown:r.onKeyDown,onFocus:()=>{r.onFocus?.(),n!==E.value&&goTo(n)},onClick:()=>goTo(n)},n)})})]})]})}export{Carousel};
@@ -1 +1 @@
1
- import e from"./chat-bubble.module.js";import{jsx as t,jsxs as n}from"react/jsx-runtime";function r({children:r,side:i=`start`,avatar:a,name:o,time:s,className:c}){return n(`div`,{className:[e.bubble,c].filter(Boolean).join(` `),"data-side":i,children:[a&&t(`div`,{className:e.avatar,"aria-hidden":`true`,children:a}),n(`div`,{className:e.content,children:[(o||s)&&n(`div`,{className:e.meta,children:[o&&t(`span`,{className:e.name,children:o}),s&&t(`time`,{className:e.time,children:s})]}),t(`div`,{className:e.body,children:r})]})]})}export{r as ChatBubble};
1
+ import e from"./chat-bubble.module.js";import{jsx as t,jsxs as n}from"react/jsx-runtime";function ChatBubble({children:r,side:i=`start`,avatar:a,name:o,time:s,className:c}){return n(`div`,{className:[e.bubble,c].filter(Boolean).join(` `),"data-side":i,children:[a&&t(`div`,{className:e.avatar,"aria-hidden":`true`,children:a}),n(`div`,{className:e.content,children:[(o||s)&&n(`div`,{className:e.meta,children:[o&&t(`span`,{className:e.name,children:o}),s&&t(`time`,{className:e.time,children:s})]}),t(`div`,{className:e.body,children:r})]})]})}export{ChatBubble};
@@ -1 +1 @@
1
- import e from"./code.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(`code`,{"data-size":r,className:t(e.code,i),...o,children:a})}export{r as Code};
1
+ import e from"./code.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";function Code({size:r=`md`,className:i,children:a,...o}){return n(`code`,{"data-size":r,className:t(e.code,i),...o,children:a})}export{Code};
@@ -1,2 +1,2 @@
1
- "use client";import{tokenize as e}from"./highlight.js";import t from"./code-snippet.module.js";import{cn as n,useClipboard as r,useSignals as i}from"@cascivo/core";import{builtin as a,t as o}from"@cascivo/i18n";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l(){return globalThis.process?.env?.NODE_ENV!==`production`}function u({code:n,language:r}){return s(`code`,{className:t.code,children:e(n,r).map((e,t)=>e.type===`text`?s(`span`,{children:e.value},t):s(`span`,{"data-tok":e.type,children:e.value},t))})}function d({code:e,children:d,variant:f=`single`,language:p,terminal:m=!1,title:h,showLineNumbers:g,showCopyButton:_,labels:v,className:y}){i();let b=e??d??``;l()&&e===void 0&&d===void 0&&console.error("CodeSnippet: pass the code either as the `code` prop or as a plain-string child. Rendering nothing.");let{copied:x,copy:S}=r(),C=v?.copy??o(a.codeSnippet.copy),w=v?.copied??o(a.codeSnippet.copied),T=_??f!==`inline`?s(`button`,{type:`button`,"aria-label":x.value?w:C,"data-state":x.value?`copied`:`idle`,className:t.copy,onClick:()=>void S(b),children:x.value?s(`svg`,{"aria-hidden":`true`,viewBox:`0 0 16 16`,className:t.icon,children:s(`path`,{d:`M13.5 4.5 6 12 2.5 8.5`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})}):c(`svg`,{"aria-hidden":`true`,viewBox:`0 0 16 16`,className:t.icon,children:[s(`rect`,{x:`5.5`,y:`5.5`,width:`8`,height:`8`,rx:`1.5`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`}),s(`path`,{d:`M3.5 10.5h-1a1 1 0 0 1-1-1v-7a1 1 0 0 1 1-1h7a1 1 0 0 1 1 1v1`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`})]})}):null;if(f===`inline`)return c(`span`,{className:n(t.root,y),"data-variant":`inline`,children:[s(`code`,{className:t.inlineCode,children:b}),T]});let E=b.split(`
2
- `),D=f===`multi`&&g&&!p;return c(`div`,{className:n(t.root,y),"data-variant":f,"data-terminal":m?``:void 0,children:[m&&c(`div`,{className:t.bar,"aria-hidden":`true`,children:[c(`span`,{className:t.dots,children:[s(`span`,{className:t.dot}),s(`span`,{className:t.dot}),s(`span`,{className:t.dot})]}),h&&s(`span`,{className:t.title,children:h})]}),s(`pre`,{className:t.pre,children:D?s(`code`,{className:t.code,children:E.map((e,n)=>c(`span`,{className:t.line,children:[s(`span`,{"aria-hidden":`true`,className:t.lineNumber,children:n+1}),s(`span`,{className:t.lineText,children:e})]},n))}):p?s(u,{code:b,language:p}):s(`code`,{className:t.code,children:b})}),T]})}export{d as CodeSnippet};
1
+ "use client";import{tokenize as e}from"./highlight.js";import t from"./code-snippet.module.js";import{cn as n,useClipboard as r,useSignals as i}from"@cascivo/core";import{builtin as a,t as o}from"@cascivo/i18n";import{jsx as s,jsxs as c}from"react/jsx-runtime";function isDev(){return globalThis.process?.env?.NODE_ENV!==`production`}function Highlighted({code:n,language:r}){return s(`code`,{className:t.code,children:e(n,r).map((e,t)=>e.type===`text`?s(`span`,{children:e.value},t):s(`span`,{"data-tok":e.type,children:e.value},t))})}function CodeSnippet({code:e,children:l,variant:u=`single`,language:d,terminal:f=!1,title:p,showLineNumbers:m,showCopyButton:h,labels:g,className:_}){i();let v=e??l??``;isDev()&&e===void 0&&l===void 0&&console.error("CodeSnippet: pass the code either as the `code` prop or as a plain-string child. Rendering nothing.");let{copied:y,copy:b}=r(),x=g?.copy??o(a.codeSnippet.copy),S=g?.copied??o(a.codeSnippet.copied),C=h??u!==`inline`?s(`button`,{type:`button`,"aria-label":y.value?S:x,"data-state":y.value?`copied`:`idle`,className:t.copy,onClick:()=>void b(v),children:y.value?s(`svg`,{"aria-hidden":`true`,viewBox:`0 0 16 16`,className:t.icon,children:s(`path`,{d:`M13.5 4.5 6 12 2.5 8.5`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})}):c(`svg`,{"aria-hidden":`true`,viewBox:`0 0 16 16`,className:t.icon,children:[s(`rect`,{x:`5.5`,y:`5.5`,width:`8`,height:`8`,rx:`1.5`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`}),s(`path`,{d:`M3.5 10.5h-1a1 1 0 0 1-1-1v-7a1 1 0 0 1 1-1h7a1 1 0 0 1 1 1v1`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`})]})}):null;if(u===`inline`)return c(`span`,{className:n(t.root,_),"data-variant":`inline`,children:[s(`code`,{className:t.inlineCode,children:v}),C]});let w=v.split(`
2
+ `),T=u===`multi`&&m&&!d;return c(`div`,{className:n(t.root,_),"data-variant":u,"data-terminal":f?``:void 0,children:[f&&c(`div`,{className:t.bar,"aria-hidden":`true`,children:[c(`span`,{className:t.dots,children:[s(`span`,{className:t.dot}),s(`span`,{className:t.dot}),s(`span`,{className:t.dot})]}),p&&s(`span`,{className:t.title,children:p})]}),s(`pre`,{className:t.pre,children:T?s(`code`,{className:t.code,children:w.map((e,n)=>c(`span`,{className:t.line,children:[s(`span`,{"aria-hidden":`true`,className:t.lineNumber,children:n+1}),s(`span`,{className:t.lineText,children:e})]},n))}):d?s(Highlighted,{code:v,language:d}):s(`code`,{className:t.code,children:v})}),C]})}export{CodeSnippet};
@@ -1 +1 @@
1
- function e(e){return e.map(([e,t])=>({type:e,re:RegExp(`^(?:${t})`)}))}var t=`"(?:[^"\\\\]|\\\\.)*"|'(?:[^'\\\\]|\\\\.)*'`,n="`(?:[^`\\\\]|\\\\.)*`",r=`const|let|var|function|return|if|else|for|while|do|switch|case|break|continue|new|class|extends|super|import|export|from|default|async|await|yield|typeof|instanceof|in|of|void|delete|this|null|true|false|undefined`,i=`${r}|interface|type|as|readonly|enum|implements|public|private|protected|abstract|namespace|declare|satisfies|keyof|infer|is|string|number|boolean|unknown|never|any`,a={bash:e([[`comment`,`#[^\\n]*`],[`string`,t],[`prompt`,`\\$(?= )`],[`keyword`,`\\b(?:npx|npm|pnpm|yarn|bun|deno|node|git|cd|ls|cat|echo|export|sudo|mkdir|rm|cp|mv|curl|wget|chmod|source)\\b`],[`variable`,`--?[A-Za-z][\\w-]*`],[`number`,`\\b\\d+(?:\\.\\d+)?\\b`]]),css:e([[`comment`,`/\\*[\\s\\S]*?\\*/`],[`string`,t],[`keyword`,`@[\\w-]+`],[`variable`,`--[\\w-]+`],[`fn`,`[\\w-]+(?=\\()`],[`number`,`#[0-9a-fA-F]{3,8}\\b|-?\\d*\\.?\\d+(?:[a-z%]+)?`],[`punct`,`[{}();:,]`]]),js:e([[`comment`,`//[^\\n]*|/\\*[\\s\\S]*?\\*/`],[`string`,`${t}|${n}`],[`keyword`,`\\b(?:${r})\\b`],[`fn`,`[A-Za-z_$][\\w$]*(?=\\()`],[`number`,`-?\\d*\\.?\\d+`],[`punct`,`[{}()\\[\\];:,.]|=>`]]),ts:e([[`comment`,`//[^\\n]*|/\\*[\\s\\S]*?\\*/`],[`string`,`${t}|${n}`],[`keyword`,`\\b(?:${i})\\b`],[`fn`,`[A-Za-z_$][\\w$]*(?=\\()`],[`number`,`-?\\d*\\.?\\d+`],[`punct`,`[{}()\\[\\];:,.]|=>`]])};function o(e,t){let n=a[t],r=[],i=e,o=``,s=()=>{o&&=(r.push({type:`text`,value:o}),``)};for(;i.length>0;){let e=!1;for(let{type:t,re:a}of n){let n=a.exec(i);if(n&&n[0].length>0){s(),r.push({type:t,value:n[0]}),i=i.slice(n[0].length),e=!0;break}}e||(o+=i[0],i=i.slice(1))}return s(),r}export{o as tokenize};
1
+ function compile(e){return e.map(([e,t])=>({type:e,re:RegExp(`^(?:${t})`)}))}var e=`"(?:[^"\\\\]|\\\\.)*"|'(?:[^'\\\\]|\\\\.)*'`,t="`(?:[^`\\\\]|\\\\.)*`",n=`const|let|var|function|return|if|else|for|while|do|switch|case|break|continue|new|class|extends|super|import|export|from|default|async|await|yield|typeof|instanceof|in|of|void|delete|this|null|true|false|undefined`,r=`${n}|interface|type|as|readonly|enum|implements|public|private|protected|abstract|namespace|declare|satisfies|keyof|infer|is|string|number|boolean|unknown|never|any`,i={bash:compile([[`comment`,`#[^\\n]*`],[`string`,e],[`prompt`,`\\$(?= )`],[`keyword`,`\\b(?:npx|npm|pnpm|yarn|bun|deno|node|git|cd|ls|cat|echo|export|sudo|mkdir|rm|cp|mv|curl|wget|chmod|source)\\b`],[`variable`,`--?[A-Za-z][\\w-]*`],[`number`,`\\b\\d+(?:\\.\\d+)?\\b`]]),css:compile([[`comment`,`/\\*[\\s\\S]*?\\*/`],[`string`,e],[`keyword`,`@[\\w-]+`],[`variable`,`--[\\w-]+`],[`fn`,`[\\w-]+(?=\\()`],[`number`,`#[0-9a-fA-F]{3,8}\\b|-?\\d*\\.?\\d+(?:[a-z%]+)?`],[`punct`,`[{}();:,]`]]),js:compile([[`comment`,`//[^\\n]*|/\\*[\\s\\S]*?\\*/`],[`string`,`${e}|${t}`],[`keyword`,`\\b(?:${n})\\b`],[`fn`,`[A-Za-z_$][\\w$]*(?=\\()`],[`number`,`-?\\d*\\.?\\d+`],[`punct`,`[{}()\\[\\];:,.]|=>`]]),ts:compile([[`comment`,`//[^\\n]*|/\\*[\\s\\S]*?\\*/`],[`string`,`${e}|${t}`],[`keyword`,`\\b(?:${r})\\b`],[`fn`,`[A-Za-z_$][\\w$]*(?=\\()`],[`number`,`-?\\d*\\.?\\d+`],[`punct`,`[{}()\\[\\];:,.]|=>`]])};function tokenize(e,t){let n=i[t],r=[],a=e,o=``,flush=()=>{o&&=(r.push({type:`text`,value:o}),``)};for(;a.length>0;){let e=!1;for(let{type:t,re:i}of n){let n=i.exec(a);if(n&&n[0].length>0){flush(),r.push({type:t,value:n[0]}),a=a.slice(n[0].length),e=!0;break}}e||(o+=a[0],a=a.slice(1))}return flush(),r}export{tokenize};
@@ -1 +1 @@
1
- "use client";import e from"./collapsible.module.js";import{useId as t,useRef as n}from"react";import{cn as r,useControllableSignal as i,useSignalEffect as a,useSignals as o}from"@cascivo/core";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l({open:l,defaultOpen:u=!1,onOpenChange:d,trigger:f,disabled:p=!1,className:m,children:h}){o();let[g,_]=i({...l===void 0?{}:{value:l},defaultValue:u,...d?{onChange:d}:{}}),v=t(),y=`${v}-content`,b=`${v}-trigger`,x=n(null),S=g.value;return a(()=>{let e=x.current;e&&e.open!==g.value&&(e.open=g.value)}),c(`details`,{ref:x,open:S,"data-state":S?`open`:`closed`,className:r(e.root,m),onToggle:e=>{let t=e.currentTarget;t.open!==g.value&&_(t.open),t.open!==g.value&&(t.open=g.value)},children:[s(`summary`,{id:b,"aria-controls":y,...p?{"aria-disabled":!0}:{},"data-state":S?`open`:`closed`,className:e.trigger,onClick:e=>{p&&e.preventDefault()},children:f}),s(`div`,{id:y,role:`region`,"aria-labelledby":b,className:e.content,children:h})]})}export{l as Collapsible};
1
+ "use client";import e from"./collapsible.module.js";import{useId as t,useRef as n}from"react";import{cn as r,useControllableSignal as i,useSignalEffect as a,useSignals as o}from"@cascivo/core";import{jsx as s,jsxs as c}from"react/jsx-runtime";function Collapsible({open:l,defaultOpen:u=!1,onOpenChange:d,trigger:f,disabled:p=!1,className:m,children:h}){o();let[g,_]=i({...l===void 0?{}:{value:l},defaultValue:u,...d?{onChange:d}:{}}),v=t(),y=`${v}-content`,b=`${v}-trigger`,x=n(null),S=g.value;return a(()=>{let e=x.current;e&&e.open!==g.value&&(e.open=g.value)}),c(`details`,{ref:x,open:S,"data-state":S?`open`:`closed`,className:r(e.root,m),onToggle:e=>{let t=e.currentTarget;t.open!==g.value&&_(t.open),t.open!==g.value&&(t.open=g.value)},children:[s(`summary`,{id:b,"aria-controls":y,...p?{"aria-disabled":!0}:{},"data-state":S?`open`:`closed`,className:e.trigger,onClick:e=>{p&&e.preventDefault()},children:f}),s(`div`,{id:y,role:`region`,"aria-labelledby":b,className:e.content,children:h})]})}export{Collapsible};
@@ -1 +1 @@
1
- "use client";import{clamp as e,formatColor as t,hsvToRgb as n,parseColor as r,sameColor as i,toHex as a}from"./color.js";import o from"./color-picker.module.js";import{useId as ee,useRef as s}from"react";import{cn as c,useControllableSignal as l,useRovingFocus as u,useSignal as d,useSignalEffect as f,useSignals as p}from"@cascivo/core";import{builtin as m,t as h}from"@cascivo/i18n";import{jsx as g,jsxs as _}from"react/jsx-runtime";var v=`#3b82f6`;function y({id:y,value:b,defaultValue:x,onValueChange:te,presets:ne,alpha:S=!0,format:C=`hex`,label:w,ariaLabel:T,disabled:E=!1,name:D,size:O=`md`,className:k,labels:A,"aria-labelledby":j,"aria-describedby":M,"aria-invalid":N}){p();let P=ee(),F=y??`${P}-hex`,I=s(null),L=d(!1),[R,z]=l({value:b,defaultValue:x??v,onChange:te}),B=d(r(R.peek())??{h:217,s:76,v:96,a:1}),V=s(R.peek()),H=R.value;if(H!==V.current&&!i(H,V.current)){let e=r(H);e&&(B.value=e),V.current=H}let U=B.value,W=t(U,C,S),G=a(n({...U,a:1}),!1),K=a(n({h:U.h,s:100,v:100,a:1}),!1),q={hue:A?.hue??h(m.colorPicker.hue),alpha:A?.alpha??h(m.colorPicker.alpha),colorArea:A?.colorArea??h(m.colorPicker.colorArea),saturation:A?.saturation??h(m.colorPicker.saturation),brightness:A?.brightness??h(m.colorPicker.brightness),eyedropper:A?.eyedropper??h(m.colorPicker.eyedropper),presets:A?.presets??h(m.colorPicker.presets),hex:A?.hex??h(m.colorPicker.hex)};function J(e){B.value=e;let n=t(e,C,S);V.current=n,z(n)}function Y(t,n){let r=I.current;if(!r)return;let i=r.getBoundingClientRect();if(i.width===0||i.height===0)return;let a=e((t-i.left)/i.width,0,1),o=e((n-i.top)/i.height,0,1);J({...B.peek(),s:a*100,v:(1-o)*100})}f(()=>{if(!L.value)return;let e=e=>Y(e.clientX,e.clientY),t=()=>{L.value=!1};return window.addEventListener(`pointermove`,e),window.addEventListener(`pointerup`,t),()=>{window.removeEventListener(`pointermove`,e),window.removeEventListener(`pointerup`,t)}});let X=d(!1);f(()=>{X.value=typeof window<`u`&&typeof window.EyeDropper==`function`});async function re(){let e=window.EyeDropper;if(e)try{let t=r((await new e().open()).sRGBHex);t&&J({...t,a:B.peek().a})}catch{}}let Z=d(null),ie=Z.value??(C===`hex`?W:a(n(U),S));function Q(){let e=Z.peek();if(Z.value=null,e===null)return;let t=r(e);t&&J(S?t:{...t,a:1})}let $=ne??[],ae=u({orientation:`horizontal`,loop:!0});return _(`div`,{className:c(o.wrapper,k),"data-size":O,"data-disabled":E||void 0,children:[w&&g(`label`,{className:o.label,htmlFor:F,children:w}),_(`div`,{ref:I,role:`group`,"aria-label":q.colorArea,className:o.area,style:{background:K},onPointerDown:e=>{E||(e.preventDefault(),L.value=!0,Y(e.clientX,e.clientY))},children:[g(`input`,{type:`range`,className:o.axis,"aria-label":q.saturation,min:0,max:100,step:1,value:Math.round(U.s),disabled:E,"aria-valuetext":`${Math.round(U.s)}%`,onChange:e=>J({...B.peek(),s:Number(e.currentTarget.value)})}),g(`input`,{type:`range`,className:o.axis,"aria-label":q.brightness,min:0,max:100,step:1,value:Math.round(U.v),disabled:E,"aria-valuetext":`${Math.round(U.v)}%`,onChange:e=>J({...B.peek(),v:Number(e.currentTarget.value)})}),g(`span`,{className:o.thumb,style:{insetInlineStart:`${U.s}%`,insetBlockStart:`${100-U.v}%`,backgroundColor:G},"aria-hidden":`true`})]}),_(`div`,{className:o.sliders,children:[g(`input`,{type:`range`,className:c(o.slider,o.hue),"aria-label":q.hue,min:0,max:360,step:1,value:Math.round(U.h),disabled:E,onChange:e=>J({...B.peek(),h:Number(e.currentTarget.value)})}),S&&g(`input`,{type:`range`,className:c(o.slider,o.alpha),"aria-label":q.alpha,min:0,max:100,step:1,value:Math.round(U.a*100),disabled:E,"aria-valuetext":`${Math.round(U.a*100)}%`,style:{"--cascivo-color-picker-alpha-to":G},onChange:e=>J({...B.peek(),a:Number(e.currentTarget.value)/100})})]}),_(`div`,{className:o.row,children:[g(`span`,{className:o.preview,style:{backgroundColor:W},"aria-hidden":`true`}),g(`input`,{id:F,type:`text`,className:o.hex,value:ie,disabled:E,autoComplete:`off`,"aria-label":j?void 0:T??q.hex,"aria-labelledby":j,"aria-describedby":M,"aria-invalid":N,onChange:e=>{Z.value=e.currentTarget.value},onBlur:Q,onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),Q()):e.key===`Escape`&&(Z.value=null)}}),X.value&&g(`button`,{type:`button`,className:o.eyedropper,"aria-label":q.eyedropper,disabled:E,onClick:()=>void re(),children:g(`span`,{className:o.eyedropperGlyph,"aria-hidden":`true`})})]}),$.length>0&&g(`div`,{role:`group`,"aria-label":q.presets,className:o.presets,children:$.map((e,t)=>{let n=ae.getItemProps(t),a=i(e,W);return g(`button`,{ref:n.ref,type:`button`,className:o.preset,style:{backgroundColor:e},"aria-label":e,"aria-pressed":a,disabled:E,tabIndex:n.tabIndex,onKeyDown:n.onKeyDown,onFocus:n.onFocus,onClick:()=>{let t=r(e);t&&J(S?t:{...t,a:1})}},e)})}),D!==void 0&&g(`input`,{type:`hidden`,name:D,value:W}),g(`span`,{className:o.srOnly,role:`status`,"aria-live":`polite`,children:h(m.colorPicker.value,{color:W})})]})}export{y as ColorPicker};
1
+ "use client";import{clamp as e,formatColor as t,hsvToRgb as n,parseColor as r,sameColor as i,toHex as a}from"./color.js";import o from"./color-picker.module.js";import{useId as s,useRef as c}from"react";import{cn as l,useControllableSignal as u,useRovingFocus as d,useSignal as f,useSignalEffect as p,useSignals as m}from"@cascivo/core";import{builtin as h,t as g}from"@cascivo/i18n";import{jsx as _,jsxs as v}from"react/jsx-runtime";var y=`#3b82f6`;function ColorPicker({id:b,value:x,defaultValue:S,onValueChange:C,presets:w,alpha:T=!0,format:E=`hex`,label:D,ariaLabel:O,disabled:k=!1,name:A,size:j=`md`,className:M,labels:N,"aria-labelledby":P,"aria-describedby":F,"aria-invalid":ee}){m();let I=s(),L=b??`${I}-hex`,R=c(null),z=f(!1),[B,V]=u({value:x,defaultValue:S??y,onChange:C}),H=f(r(B.peek())??{h:217,s:76,v:96,a:1}),U=c(B.peek()),W=B.value;if(W!==U.current&&!i(W,U.current)){let e=r(W);e&&(H.value=e),U.current=W}let G=H.value,K=t(G,E,T),q=a(n({...G,a:1}),!1),J=a(n({h:G.h,s:100,v:100,a:1}),!1),Y={hue:N?.hue??g(h.colorPicker.hue),alpha:N?.alpha??g(h.colorPicker.alpha),colorArea:N?.colorArea??g(h.colorPicker.colorArea),saturation:N?.saturation??g(h.colorPicker.saturation),brightness:N?.brightness??g(h.colorPicker.brightness),eyedropper:N?.eyedropper??g(h.colorPicker.eyedropper),presets:N?.presets??g(h.colorPicker.presets),hex:N?.hex??g(h.colorPicker.hex)};function commit(e){H.value=e;let n=t(e,E,T);U.current=n,V(n)}function setFromPointer(t,n){let r=R.current;if(!r)return;let i=r.getBoundingClientRect();if(i.width===0||i.height===0)return;let a=e((t-i.left)/i.width,0,1),o=e((n-i.top)/i.height,0,1);commit({...H.peek(),s:a*100,v:(1-o)*100})}p(()=>{if(!z.value)return;let onMove=e=>setFromPointer(e.clientX,e.clientY),onUp=()=>{z.value=!1};return window.addEventListener(`pointermove`,onMove),window.addEventListener(`pointerup`,onUp),()=>{window.removeEventListener(`pointermove`,onMove),window.removeEventListener(`pointerup`,onUp)}});let X=f(!1);p(()=>{X.value=typeof window<`u`&&typeof window.EyeDropper==`function`});async function pickFromScreen(){let e=window.EyeDropper;if(e)try{let t=r((await new e().open()).sRGBHex);t&&commit({...t,a:H.peek().a})}catch{}}let Z=f(null),Q=Z.value??(E===`hex`?K:a(n(G),T));function commitDraft(){let e=Z.peek();if(Z.value=null,e===null)return;let t=r(e);t&&commit(T?t:{...t,a:1})}let $=w??[],te=d({orientation:`horizontal`,loop:!0});return v(`div`,{className:l(o.wrapper,M),"data-size":j,"data-disabled":k||void 0,children:[D&&_(`label`,{className:o.label,htmlFor:L,children:D}),v(`div`,{ref:R,role:`group`,"aria-label":Y.colorArea,className:o.area,style:{background:J},onPointerDown:e=>{k||(e.preventDefault(),z.value=!0,setFromPointer(e.clientX,e.clientY))},children:[_(`input`,{type:`range`,className:o.axis,"aria-label":Y.saturation,min:0,max:100,step:1,value:Math.round(G.s),disabled:k,"aria-valuetext":`${Math.round(G.s)}%`,onChange:e=>commit({...H.peek(),s:Number(e.currentTarget.value)})}),_(`input`,{type:`range`,className:o.axis,"aria-label":Y.brightness,min:0,max:100,step:1,value:Math.round(G.v),disabled:k,"aria-valuetext":`${Math.round(G.v)}%`,onChange:e=>commit({...H.peek(),v:Number(e.currentTarget.value)})}),_(`span`,{className:o.thumb,style:{insetInlineStart:`${G.s}%`,insetBlockStart:`${100-G.v}%`,backgroundColor:q},"aria-hidden":`true`})]}),v(`div`,{className:o.sliders,children:[_(`input`,{type:`range`,className:l(o.slider,o.hue),"aria-label":Y.hue,min:0,max:360,step:1,value:Math.round(G.h),disabled:k,onChange:e=>commit({...H.peek(),h:Number(e.currentTarget.value)})}),T&&_(`input`,{type:`range`,className:l(o.slider,o.alpha),"aria-label":Y.alpha,min:0,max:100,step:1,value:Math.round(G.a*100),disabled:k,"aria-valuetext":`${Math.round(G.a*100)}%`,style:{"--cascivo-color-picker-alpha-to":q},onChange:e=>commit({...H.peek(),a:Number(e.currentTarget.value)/100})})]}),v(`div`,{className:o.row,children:[_(`span`,{className:o.preview,style:{backgroundColor:K},"aria-hidden":`true`}),_(`input`,{id:L,type:`text`,className:o.hex,value:Q,disabled:k,autoComplete:`off`,"aria-label":P?void 0:O??Y.hex,"aria-labelledby":P,"aria-describedby":F,"aria-invalid":ee,onChange:e=>{Z.value=e.currentTarget.value},onBlur:commitDraft,onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),commitDraft()):e.key===`Escape`&&(Z.value=null)}}),X.value&&_(`button`,{type:`button`,className:o.eyedropper,"aria-label":Y.eyedropper,disabled:k,onClick:()=>void pickFromScreen(),children:_(`span`,{className:o.eyedropperGlyph,"aria-hidden":`true`})})]}),$.length>0&&_(`div`,{role:`group`,"aria-label":Y.presets,className:o.presets,children:$.map((e,t)=>{let n=te.getItemProps(t),a=i(e,K);return _(`button`,{ref:n.ref,type:`button`,className:o.preset,style:{backgroundColor:e},"aria-label":e,"aria-pressed":a,disabled:k,tabIndex:n.tabIndex,onKeyDown:n.onKeyDown,onFocus:n.onFocus,onClick:()=>{let t=r(e);t&&commit(T?t:{...t,a:1})}},e)})}),A!==void 0&&_(`input`,{type:`hidden`,name:A,value:K}),_(`span`,{className:o.srOnly,role:`status`,"aria-live":`polite`,children:g(h.colorPicker.value,{color:K})})]})}export{ColorPicker};
@@ -1 +1 @@
1
- function e(e,t,n){return Math.min(n,Math.max(t,e))}function t(e){let t=e.trim().replace(/^#/,``);if(!/^(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(t))return null;let n=(e=>e.length<=4?e.split(``).map(e=>e+e).join(``):e)(t);return{r:parseInt(n.slice(0,2),16),g:parseInt(n.slice(2,4),16),b:parseInt(n.slice(4,6),16),a:n.length>=8?parseInt(n.slice(6,8),16)/255:1}}function n({r:t,g:n,b:r,a:i},a){let o=t=>e(Math.round(t),0,255).toString(16).padStart(2,`0`),s=`#${o(t)}${o(n)}${o(r)}`;return a?s+o(i*255):s}function r({r:t,g:n,b:r,a:i},o){let s=t=>e(Math.round(t),0,255),c=`${s(t)} ${s(n)} ${s(r)}`;return o?`rgb(${c} / ${a(i,2)})`:`rgb(${c})`}function i(e,t){let{h:n,s:r,l:i}=c(e),o=`${Math.round(n)} ${Math.round(r)}% ${Math.round(i)}%`;return t?`hsl(${o} / ${a(e.a,2)})`:`hsl(${o})`}function a(e,t){let n=10**t;return Math.round(e*n)/n}function o({r:e,g:t,b:n,a:r}){let i=e/255,a=t/255,o=n/255,s=Math.max(i,a,o),c=s-Math.min(i,a,o),l=0;return c!==0&&(l=s===i?(a-o)/c%6:s===a?(o-i)/c+2:(i-a)/c+4,l*=60,l<0&&(l+=360)),{h:l,s:s===0?0:c/s*100,v:s*100,a:r}}function s({h:t,s:n,v:r,a:i}){let a=e(n,0,100)/100,o=e(r,0,100)/100,s=(t%360+360)%360,c=o*a,l=c*(1-Math.abs(s/60%2-1)),u=o-c,d=0,f=0,p=0;return s<60?[d,f,p]=[c,l,0]:s<120?[d,f,p]=[l,c,0]:s<180?[d,f,p]=[0,c,l]:s<240?[d,f,p]=[0,l,c]:s<300?[d,f,p]=[l,0,c]:[d,f,p]=[c,0,l],{r:(d+u)*255,g:(f+u)*255,b:(p+u)*255,a:i}}function c({h:t,s:n,v:r,a:i}){let a=e(n,0,100)/100,o=e(r,0,100)/100,s=o*(1-a/2);return{h:t,s:(s===0||s===1?0:(o-s)/Math.min(s,1-s))*100,l:s*100,a:i}}function l(e,t,a){return t===`rgb`?r(s(e),a):t===`hsl`?i(e,a):n(s(e),a)}function u(e){let n=e.trim(),r=/^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:\s*[/,]\s*([\d.%]+))?\s*\)$/i.exec(n);if(r)return o({r:Number(r[1]),g:Number(r[2]),b:Number(r[3]),a:d(r[4])});let i=/^hsla?\(\s*([\d.]+)(?:deg)?[\s,]+([\d.]+)%[\s,]+([\d.]+)%(?:\s*[/,]\s*([\d.%]+))?\s*\)$/i.exec(n);if(i)return f(Number(i[1]),Number(i[2]),Number(i[3]),d(i[4]));let a=t(n);return a?o(a):null}function d(t){if(t===void 0)return 1;let n=t.endsWith(`%`)?Number(t.slice(0,-1))/100:Number(t);return Number.isNaN(n)?1:e(n,0,1)}function f(t,n,r,i){let a=e(n,0,100)/100,o=e(r,0,100)/100,s=o+a*Math.min(o,1-o);return{h:t,s:s===0?0:2*(1-o/s)*100,v:s*100,a:i}}function p(e,t){let n=u(e),r=u(t);if(!n||!r)return!1;let i=s(n),a=s(r);return Math.round(i.r)===Math.round(a.r)&&Math.round(i.g)===Math.round(a.g)&&Math.round(i.b)===Math.round(a.b)&&Math.round(i.a*255)===Math.round(a.a*255)}export{e as clamp,l as formatColor,s as hsvToRgb,u as parseColor,p as sameColor,n as toHex};
1
+ function clamp(e,t,r){return Math.min(r,Math.max(t,e))}function parseHex(e){let t=e.trim().replace(/^#/,``);if(!/^(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(t))return null;let r=(e=>e.length<=4?e.split(``).map(e=>e+e).join(``):e)(t);return{r:parseInt(r.slice(0,2),16),g:parseInt(r.slice(2,4),16),b:parseInt(r.slice(4,6),16),a:r.length>=8?parseInt(r.slice(6,8),16)/255:1}}function toHex({r:e,g:t,b:r,a:i},a){let part=e=>clamp(Math.round(e),0,255).toString(16).padStart(2,`0`),o=`#${part(e)}${part(t)}${part(r)}`;return a?o+part(i*255):o}function toRgbString({r:e,g:t,b:r,a:i},a){let n=e=>clamp(Math.round(e),0,255),o=`${n(e)} ${n(t)} ${n(r)}`;return a?`rgb(${o} / ${round(i,2)})`:`rgb(${o})`}function toHslString(e,t){let{h:r,s:i,l:a}=hsvToHsl(e),o=`${Math.round(r)} ${Math.round(i)}% ${Math.round(a)}%`;return t?`hsl(${o} / ${round(e.a,2)})`:`hsl(${o})`}function round(e,t){let r=10**t;return Math.round(e*r)/r}function rgbToHsv({r:e,g:t,b:r,a:i}){let a=e/255,o=t/255,s=r/255,c=Math.max(a,o,s),l=c-Math.min(a,o,s),u=0;return l!==0&&(u=c===a?(o-s)/l%6:c===o?(s-a)/l+2:(a-o)/l+4,u*=60,u<0&&(u+=360)),{h:u,s:c===0?0:l/c*100,v:c*100,a:i}}function hsvToRgb({h:e,s:t,v:r,a:i}){let a=clamp(t,0,100)/100,o=clamp(r,0,100)/100,s=(e%360+360)%360,c=o*a,l=c*(1-Math.abs(s/60%2-1)),u=o-c,d=0,f=0,p=0;return s<60?[d,f,p]=[c,l,0]:s<120?[d,f,p]=[l,c,0]:s<180?[d,f,p]=[0,c,l]:s<240?[d,f,p]=[0,l,c]:s<300?[d,f,p]=[l,0,c]:[d,f,p]=[c,0,l],{r:(d+u)*255,g:(f+u)*255,b:(p+u)*255,a:i}}function hsvToHsl({h:e,s:t,v:r,a:i}){let a=clamp(t,0,100)/100,o=clamp(r,0,100)/100,s=o*(1-a/2);return{h:e,s:(s===0||s===1?0:(o-s)/Math.min(s,1-s))*100,l:s*100,a:i}}function formatColor(e,t,r){return t===`rgb`?toRgbString(hsvToRgb(e),r):t===`hsl`?toHslString(e,r):toHex(hsvToRgb(e),r)}function parseColor(e){let t=e.trim(),r=/^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:\s*[/,]\s*([\d.%]+))?\s*\)$/i.exec(t);if(r)return rgbToHsv({r:Number(r[1]),g:Number(r[2]),b:Number(r[3]),a:parseAlpha(r[4])});let i=/^hsla?\(\s*([\d.]+)(?:deg)?[\s,]+([\d.]+)%[\s,]+([\d.]+)%(?:\s*[/,]\s*([\d.%]+))?\s*\)$/i.exec(t);if(i)return hslToHsv(Number(i[1]),Number(i[2]),Number(i[3]),parseAlpha(i[4]));let a=parseHex(t);return a?rgbToHsv(a):null}function parseAlpha(e){if(e===void 0)return 1;let t=e.endsWith(`%`)?Number(e.slice(0,-1))/100:Number(e);return Number.isNaN(t)?1:clamp(t,0,1)}function hslToHsv(e,t,r,i){let a=clamp(t,0,100)/100,o=clamp(r,0,100)/100,s=o+a*Math.min(o,1-o);return{h:e,s:s===0?0:2*(1-o/s)*100,v:s*100,a:i}}function sameColor(e,t){let r=parseColor(e),i=parseColor(t);if(!r||!i)return!1;let a=hsvToRgb(r),o=hsvToRgb(i);return Math.round(a.r)===Math.round(o.r)&&Math.round(a.g)===Math.round(o.g)&&Math.round(a.b)===Math.round(o.b)&&Math.round(a.a*255)===Math.round(o.a*255)}export{clamp,formatColor,hsvToRgb,parseColor,sameColor,toHex};
@@ -1 +1 @@
1
- "use client";import{activeForValue as e,firstActive as t,lastActive as n,moveActive as r,pageActive as i}from"./list-nav.js";import{filterOptions as a,groupOptions as ee,highlightSegments as te,isNewLabel as o,orderByGroup as s,typeaheadIndex as ne}from"./option-list.js";import c from"./combobox.module.js";import{useId as re,useRef as l}from"react";import{DismissableLayer as ie,cn as u,focusElement as d,useControllableSignal as f,useSignal as p,useSignalEffect as ae,useSignals as oe,useTypeahead as se}from"@cascivo/core";import{builtin as m,t as h}from"@cascivo/i18n";import{jsx as g,jsxs as _}from"react/jsx-runtime";function ce(...e){return e.filter(Boolean).join(` `)||void 0}function v({options:v,value:le,defaultValue:ue,onValueChange:de,clearable:fe=!1,searchable:y=!0,label:b,ariaLabel:x,hint:S,error:C,size:pe=`md`,disabled:w=!1,loading:T=!1,onSearchChange:E,filter:D,creatable:O=!1,onCreate:me,name:k,required:he,open:ge,defaultOpen:_e,onOpenChange:ve,labels:A,className:ye,id:be,"aria-labelledby":xe,"aria-describedby":Se,"aria-invalid":Ce}){oe();let j=re(),M=be??`cascade-combobox-${j}`,N=`${j}-listbox`,we=`${j}-status`,P=e=>`${j}-option-${e}`,F=l(null),I=l(null),[Te,L]=f({value:le,defaultValue:ue,onChange:de}),[R,z]=f({value:ge,defaultValue:_e??!1,onChange:ve}),B=p(``),V=p(-1),H=R.value,U=Te.value,W=B.value,G=s(a(v,y?W:``,D)),K=O&&W.trim()!==``&&o(v,W.trim()),q=K?G.length:-1,Ee=ee(G),J=v.find(e=>e.value===U),Y=A?.placeholder??h(m.combobox.placeholder),De=A?.empty??h(m.combobox.empty),Oe=A?.clear??h(m.combobox.clear),ke=A?.loading??h(m.combobox.loading),Ae=e=>A?.create?A.create.replaceAll(`{label}`,e):h(m.combobox.create,{label:e}),je=ce(C?`${j}-error`:S?`${j}-hint`:void 0,Se);function X(t=`value`){w||(V.value=t===`value`?e(G,U):-1,z(!0))}function Z(e=!0){z(!1),B.value=``,V.value=-1,e&&d(F.current)}function Q(e){L(e),Z()}function Me(){L(void 0),B.value=``,E?.(``),d(F.current)}function $(e){if(e===q&&K){me?.(W.trim()),Z();return}let t=G[e];t&&!t.disabled&&Q(t.value)}let Ne=se({onMatch:e=>{let t=H?G:v,n=ne(t,e,H?V.value:-1);if(n!==-1)if(H)V.value=n;else{let e=t[n];e&&L(e.value)}}});ae(()=>{let e=V.value;if(!R.value||e<0)return;let t=I.current?.querySelector(`#${CSS.escape(P(e))}`);t&&typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`nearest`})});function Pe(e){if(w)return;let a=K?[...G,{value:``,label:W}]:G;if(e.altKey&&e.key===`ArrowDown`){e.preventDefault(),H||X(`none`);return}if(e.altKey&&e.key===`ArrowUp`){e.preventDefault(),H&&Z();return}switch(e.key){case`ArrowDown`:e.preventDefault(),H?V.value=r(V.value,1,a):X();break;case`ArrowUp`:e.preventDefault(),H?V.value=r(V.value,-1,a):X();break;case`Home`:if(y||!H)break;e.preventDefault(),V.value=t(a);break;case`End`:if(y||!H)break;e.preventDefault(),V.value=n(a);break;case`PageDown`:if(!H)break;e.preventDefault(),V.value=i(V.value,1,a);break;case`PageUp`:if(!H)break;e.preventDefault(),V.value=i(V.value,-1,a);break;case`Enter`:if(!H)break;e.preventDefault(),V.value>=0&&$(V.value);break;case` `:if(y)break;e.preventDefault(),H&&V.value>=0?$(V.value):X();break;case`Escape`:if(!H)break;e.preventDefault(),e.stopPropagation(),Z();break;case`Tab`:H&&Z(!1);break}!y&&e.key!==` `&&Ne.onKeyDown(e)}function Fe(e,t){let n=e.value===U;return _(`div`,{id:P(t),role:`option`,"aria-selected":n,"aria-disabled":e.disabled||void 0,"data-state":t===V.value?`active`:void 0,"data-disabled":e.disabled||void 0,className:c.option,onMouseDown:e=>e.preventDefault(),onClick:()=>{e.disabled||Q(e.value)},onMouseEnter:()=>{e.disabled||(V.value=t)},children:[g(`span`,{className:c.optionLabel,children:te(e.label,y?W:``).map((e,t)=>e.match?g(`mark`,{className:c.match,children:e.text},t):g(`span`,{children:e.text},t))}),g(`span`,{className:c.check,"aria-hidden":`true`})]},e.value)}let Ie={id:M,role:`combobox`,"aria-expanded":H,"aria-controls":N,"aria-haspopup":`listbox`,"aria-activedescendant":H&&V.value>=0?P(V.value):void 0,"aria-labelledby":xe,"aria-label":x,"aria-invalid":C?!0:Ce,"aria-describedby":je,"aria-required":he||void 0,disabled:w,onKeyDown:Pe};return g(ie,{onDismiss:()=>H&&Z(!1),children:_(`div`,{className:u(c.wrapper,ye),"data-state":C?`error`:H?`open`:`closed`,"data-size":pe,children:[b&&g(`label`,{className:c.label,htmlFor:M,children:b}),_(`div`,{className:c.field,children:[y?g(`input`,{...Ie,ref:F,type:`text`,className:c.trigger,autoComplete:`off`,"aria-autocomplete":`list`,placeholder:Y,value:H?W:J?.label??``,onChange:e=>{let n=e.currentTarget.value;B.value=n,E?.(n),H||z(!0);let r=s(a(v,n,D)),i=t(r);V.value=i===-1&&O&&n.trim()!==``&&o(v,n.trim())?r.length:i},onClick:()=>{H||X()}}):g(`button`,{...Ie,ref:F,type:`button`,className:c.trigger,onClick:()=>H?Z():X(),children:g(`span`,{className:u(c.value,J?void 0:c.placeholder),children:J?.label??Y})}),fe&&U!==void 0&&!w&&g(`button`,{type:`button`,className:c.clear,"aria-label":Oe,onClick:e=>{e.stopPropagation(),Me()},children:g(`span`,{className:c.clearGlyph,"aria-hidden":`true`})}),g(`span`,{className:c.chevron,"aria-hidden":`true`})]}),k!==void 0&&g(`input`,{type:`hidden`,name:k,value:U??``}),_(`div`,{className:c.popup,"data-state":H?`open`:`closed`,children:[_(`div`,{ref:I,role:`listbox`,id:N,className:c.listbox,"aria-label":x??b??Y,"aria-busy":T||void 0,children:[Ee.map(e=>e.label===void 0?e.entries.map(({option:e,index:t})=>Fe(e,t)):_(`div`,{role:`group`,"aria-label":e.label,className:c.group,children:[g(`span`,{className:c.groupLabel,"aria-hidden":`true`,children:e.label}),e.entries.map(({option:e,index:t})=>Fe(e,t))]},e.label)),K&&g(`div`,{id:P(q),role:`option`,"aria-selected":!1,"data-state":q===V.value?`active`:void 0,className:u(c.option,c.create),onMouseDown:e=>e.preventDefault(),onClick:()=>$(q),onMouseEnter:()=>{V.value=q},children:Ae(W.trim())})]}),T?g(`div`,{className:c.empty,role:`status`,children:ke}):G.length===0&&!K?g(`div`,{className:c.empty,role:`status`,children:De}):null]}),g(`span`,{id:we,className:c.srOnly,role:`status`,"aria-live":`polite`,children:H&&!T?h(m.combobox.resultCount,{count:String(G.length)}):``}),C&&g(`span`,{id:`${j}-error`,className:c.error,role:`alert`,children:C}),!C&&S&&g(`span`,{id:`${j}-hint`,className:c.hint,children:S})]})})}export{v as Combobox};
1
+ "use client";import{activeForValue as e,firstActive as t,lastActive as n,moveActive as r,pageActive as i}from"./list-nav.js";import{filterOptions as a,groupOptions as ee,highlightSegments as te,isNewLabel as o,orderByGroup as s,typeaheadIndex as ne}from"./option-list.js";import c from"./combobox.module.js";import{useId as re,useRef as l}from"react";import{DismissableLayer as ie,cn as u,focusElement as d,useControllableSignal as f,useSignal as p,useSignalEffect as ae,useSignals as oe,useTypeahead as se}from"@cascivo/core";import{builtin as m,t as h}from"@cascivo/i18n";import{jsx as g,jsxs as _}from"react/jsx-runtime";function mergeDescribedBy(...e){return e.filter(Boolean).join(` `)||void 0}function Combobox({options:v,value:ce,defaultValue:y,onValueChange:le,clearable:ue=!1,searchable:b=!0,label:x,ariaLabel:S,hint:C,error:w,size:de=`md`,disabled:T=!1,loading:E=!1,onSearchChange:D,filter:O,creatable:k=!1,onCreate:fe,name:A,required:pe,open:me,defaultOpen:he,onOpenChange:ge,labels:j,className:_e,id:ve,"aria-labelledby":M,"aria-describedby":N,"aria-invalid":P}){oe();let F=re(),I=ve??`cascade-combobox-${F}`,L=`${F}-listbox`,ye=`${F}-status`,optionId=e=>`${F}-option-${e}`,R=l(null),z=l(null),[be,B]=f({value:ce,defaultValue:y,onChange:le}),[V,H]=f({value:me,defaultValue:he??!1,onChange:ge}),U=p(``),W=p(-1),G=V.value,K=be.value,q=U.value,J=s(a(v,b?q:``,O)),Y=k&&q.trim()!==``&&o(v,q.trim()),X=Y?J.length:-1,xe=ee(J),Z=v.find(e=>e.value===K),Q=j?.placeholder??h(m.combobox.placeholder),Se=j?.empty??h(m.combobox.empty),Ce=j?.clear??h(m.combobox.clear),we=j?.loading??h(m.combobox.loading),createLabel=e=>j?.create?j.create.replaceAll(`{label}`,e):h(m.combobox.create,{label:e}),Te=mergeDescribedBy(w?`${F}-error`:C?`${F}-hint`:void 0,N);function openList(t=`value`){T||(W.value=t===`value`?e(J,K):-1,H(!0))}function closeList(e=!0){H(!1),U.value=``,W.value=-1,e&&d(R.current)}function select(e){B(e),closeList()}function clear(){B(void 0),U.value=``,D?.(``),d(R.current)}function activate(e){if(e===X&&Y){fe?.(q.trim()),closeList();return}let t=J[e];t&&!t.disabled&&select(t.value)}let Ee=se({onMatch:e=>{let t=G?J:v,n=ne(t,e,G?W.value:-1);if(n!==-1)if(G)W.value=n;else{let e=t[n];e&&B(e.value)}}});ae(()=>{let e=W.value;if(!V.value||e<0)return;let t=z.current?.querySelector(`#${CSS.escape(optionId(e))}`);t&&typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`nearest`})});function handleKeyDown(e){if(T)return;let a=Y?[...J,{value:``,label:q}]:J;if(e.altKey&&e.key===`ArrowDown`){e.preventDefault(),G||openList(`none`);return}if(e.altKey&&e.key===`ArrowUp`){e.preventDefault(),G&&closeList();return}switch(e.key){case`ArrowDown`:e.preventDefault(),G?W.value=r(W.value,1,a):openList();break;case`ArrowUp`:e.preventDefault(),G?W.value=r(W.value,-1,a):openList();break;case`Home`:if(b||!G)break;e.preventDefault(),W.value=t(a);break;case`End`:if(b||!G)break;e.preventDefault(),W.value=n(a);break;case`PageDown`:if(!G)break;e.preventDefault(),W.value=i(W.value,1,a);break;case`PageUp`:if(!G)break;e.preventDefault(),W.value=i(W.value,-1,a);break;case`Enter`:if(!G)break;e.preventDefault(),W.value>=0&&activate(W.value);break;case` `:if(b)break;e.preventDefault(),G&&W.value>=0?activate(W.value):openList();break;case`Escape`:if(!G)break;e.preventDefault(),e.stopPropagation(),closeList();break;case`Tab`:G&&closeList(!1);break}!b&&e.key!==` `&&Ee.onKeyDown(e)}function renderOption(e,t){let n=e.value===K;return _(`div`,{id:optionId(t),role:`option`,"aria-selected":n,"aria-disabled":e.disabled||void 0,"data-state":t===W.value?`active`:void 0,"data-disabled":e.disabled||void 0,className:c.option,onMouseDown:e=>e.preventDefault(),onClick:()=>{e.disabled||select(e.value)},onMouseEnter:()=>{e.disabled||(W.value=t)},children:[g(`span`,{className:c.optionLabel,children:te(e.label,b?q:``).map((e,t)=>e.match?g(`mark`,{className:c.match,children:e.text},t):g(`span`,{children:e.text},t))}),g(`span`,{className:c.check,"aria-hidden":`true`})]},e.value)}let $={id:I,role:`combobox`,"aria-expanded":G,"aria-controls":L,"aria-haspopup":`listbox`,"aria-activedescendant":G&&W.value>=0?optionId(W.value):void 0,"aria-labelledby":M,"aria-label":S,"aria-invalid":w?!0:P,"aria-describedby":Te,"aria-required":pe||void 0,disabled:T,onKeyDown:handleKeyDown};return g(ie,{onDismiss:()=>G&&closeList(!1),children:_(`div`,{className:u(c.wrapper,_e),"data-state":w?`error`:G?`open`:`closed`,"data-size":de,children:[x&&g(`label`,{className:c.label,htmlFor:I,children:x}),_(`div`,{className:c.field,children:[b?g(`input`,{...$,ref:R,type:`text`,className:c.trigger,autoComplete:`off`,"aria-autocomplete":`list`,placeholder:Q,value:G?q:Z?.label??``,onChange:e=>{let n=e.currentTarget.value;U.value=n,D?.(n),G||H(!0);let r=s(a(v,n,O)),i=t(r);W.value=i===-1&&k&&n.trim()!==``&&o(v,n.trim())?r.length:i},onClick:()=>{G||openList()}}):g(`button`,{...$,ref:R,type:`button`,className:c.trigger,onClick:()=>G?closeList():openList(),children:g(`span`,{className:u(c.value,Z?void 0:c.placeholder),children:Z?.label??Q})}),ue&&K!==void 0&&!T&&g(`button`,{type:`button`,className:c.clear,"aria-label":Ce,onClick:e=>{e.stopPropagation(),clear()},children:g(`span`,{className:c.clearGlyph,"aria-hidden":`true`})}),g(`span`,{className:c.chevron,"aria-hidden":`true`})]}),A!==void 0&&g(`input`,{type:`hidden`,name:A,value:K??``}),_(`div`,{className:c.popup,"data-state":G?`open`:`closed`,children:[_(`div`,{ref:z,role:`listbox`,id:L,className:c.listbox,"aria-label":S??x??Q,"aria-busy":E||void 0,children:[xe.map(e=>e.label===void 0?e.entries.map(({option:e,index:t})=>renderOption(e,t)):_(`div`,{role:`group`,"aria-label":e.label,className:c.group,children:[g(`span`,{className:c.groupLabel,"aria-hidden":`true`,children:e.label}),e.entries.map(({option:e,index:t})=>renderOption(e,t))]},e.label)),Y&&g(`div`,{id:optionId(X),role:`option`,"aria-selected":!1,"data-state":X===W.value?`active`:void 0,className:u(c.option,c.create),onMouseDown:e=>e.preventDefault(),onClick:()=>activate(X),onMouseEnter:()=>{W.value=X},children:createLabel(q.trim())})]}),E?g(`div`,{className:c.empty,role:`status`,children:we}):J.length===0&&!Y?g(`div`,{className:c.empty,role:`status`,children:Se}):null]}),g(`span`,{id:ye,className:c.srOnly,role:`status`,"aria-live":`polite`,children:G&&!E?h(m.combobox.resultCount,{count:String(J.length)}):``}),w&&g(`span`,{id:`${F}-error`,className:c.error,role:`alert`,children:w}),!w&&C&&g(`span`,{id:`${F}-hint`,className:c.hint,children:C})]})})}export{Combobox};
@@ -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){if(t!==void 0){let n=e.findIndex(e=>e.value===t&&!e.disabled);if(n!==-1)return n}return n(e)}export{a as activeForValue,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 activeForValue(e,t){if(t!==void 0){let n=e.findIndex(e=>e.value===t&&!e.disabled);if(n!==-1)return n}return firstActive(e)}export{activeForValue,firstActive,lastActive,moveActive,pageActive};
@@ -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)}function c(e,n,r){let i=t(n).join(``);if(i===``||e.length===0)return-1;let a=e.map((t,n)=>(r+1+n)%e.length),o=a.find(n=>{let r=e[n];return r&&!r.disabled&&t(r.label).join(``).startsWith(i)});return o===void 0?a.find(n=>{let r=e[n];return r&&!r.disabled&&t(r.label).join(``).includes(i)})??-1:o}export{r as filterOptions,a as groupOptions,i as highlightSegments,s as isNewLabel,o as orderByGroup,c as typeaheadIndex};
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)}function typeaheadIndex(e,t,n){let r=fold(t).join(``);if(r===``||e.length===0)return-1;let i=e.map((t,r)=>(n+1+r)%e.length),a=i.find(t=>{let n=e[t];return n&&!n.disabled&&fold(n.label).join(``).startsWith(r)});return a===void 0?i.find(t=>{let n=e[t];return n&&!n.disabled&&fold(n.label).join(``).includes(r)})??-1:a}export{filterOptions,groupOptions,highlightSegments,isNewLabel,orderByGroup,typeaheadIndex};
@@ -1 +1 @@
1
- "use client";import{Spinner as e}from"../spinner/spinner.js";import{Kbd as t}from"../kbd/kbd.js";import n from"./command-menu.module.js";import{useId as r,useRef as i}from"react";import{batch as a,cn as o,focusElement as s,useEffectPropSignal as c,useSignal as l,useSignalEffect as u,useSignals as d}from"@cascivo/core";import{builtin as f,t as p}from"@cascivo/i18n";import{jsx as m,jsxs as h}from"react/jsx-runtime";function g(e,t){if(e.length===0)return{score:1,indices:[]};let n=e.toLowerCase(),r=t.toLowerCase(),i=0,a=0,o=-2,s=[];for(let e=0;e<r.length&&a<n.length;e++){if(r[e]!==n[a])continue;i+=1,e===o+1&&(i+=4);let t=e===0?` `:r[e-1];(t===` `||t===`-`||t===`_`||t===`/`)&&(i+=8),o=e,s.push(e),a++}return a===n.length?{score:i,indices:s}:null}function _(e,t){return g(e,t)?.score??0}function v(e,t){let n=_(e,t.label);for(let r of t.keywords??[]){let t=_(e,r);t>n&&(n=t)}return n}function ee(e,t){if(t.length===0)return e;let r=new Set(t),i=[],a=``,o=r.has(0),s=e=>{a!==``&&(i.push(o?m(`mark`,{className:n.match,children:a},e):a),a=``)};for(let t=0;t<e.length;t++){let n=r.has(t);n!==o&&(s(t),o=n),a+=e[t]}return s(e.length),i}function te(e,t){for(let n of t){let t=n.prefix;if(t){if(e.startsWith(`${t} `)||e.startsWith(`${t}:`))return{scope:n,rest:e.slice(t.length+1).replace(/^\s+/,``)};if(!/\w/.test(t)&&e.startsWith(t))return{scope:n,rest:e.slice(t.length).replace(/^\s+/,``)}}}return null}function y({open:_,onOpenChange:y,groups:ne,placeholder:b,emptyLabel:x,hotkey:re=!0,label:S,ariaLabel:ie,loading:C=!1,onQueryChange:w,scopes:T=[],className:ae}){d();let E=ie??S??p(f.commandMenu.label),D=x??p(f.commandMenu.empty),O=r(),k=`${O}-listbox`,A=i(null),j=i(null),M=i([]),N=i(y);N.current=y;let P=i(w);P.current=w;let F=c(_),oe=c(re),I=l(``),L=l(0),R=l([]),z=l(null),se=R.value.at(-1)?.groups??ne,B=b??R.value.at(-1)?.placeholder??p(f.commandMenu.placeholder),V=T.find(e=>e.id===z.value)??null,H=se.filter(e=>!z.value||!e.scope||e.scope===z.value).map(e=>({heading:e.heading,items:e.items.map(e=>({item:e,score:v(I.value,e)})).filter(({score:e})=>e>0).sort((e,t)=>t.score-e.score).map(({item:e})=>({item:e,indices:g(I.value,e.label)?.indices??[]}))})).filter(e=>e.items.length>0),U=H.flatMap(e=>e.items.map(e=>e.item)),W=U.flatMap((e,t)=>e.disabled?[]:[t]),G=W.includes(L.value)?L.value:W[0]??-1,K=e=>`${O}-option-${e}`;u(()=>{let e=A.current;e&&(F.value?e.open||(a(()=>{I.value=``,L.value=0,R.value=[],z.value=null}),typeof e.showModal==`function`&&e.showModal(),s(j.current)):e.open&&(R.value=[],e.close()))}),u(()=>{let e=A.current;if(!e)return;let t=()=>N.current(!1);return e.addEventListener(`close`,t),()=>e.removeEventListener(`close`,t)}),u(()=>{if(!oe.value)return;let e=e=>{(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`k`&&(e.preventDefault(),N.current(!F.value))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)});let q=e=>{L.value=e;let t=M.current[e];t&&typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`nearest`})},J=e=>{if(W.length===0)return;let t=W[(W.indexOf(G)+e+W.length)%W.length];t!==void 0&&q(t)},Y=e=>{e.onSelect(),y(!1)},X=(e,t)=>{if(!(!e||e.disabled)){if(e.page){if(t===`secondary`)return;a(()=>{R.value=[...R.value,e.page],I.value=``,L.value=0});return}if(e.actions&&e.actions.length>0){let n=t===`secondary`?e.actions[1]:e.actions[0];n&&Y(n);return}t!==`secondary`&&(e.onSelect?.(),y(!1))}},ce=e=>{if(T.length===0)return;let t=[null,...T.map(e=>e.id)],n=t[(t.indexOf(z.value)+e+t.length)%t.length];a(()=>{z.value=n??null,L.value=0})},Z=()=>{a(()=>{z.value=null,L.value=0}),s(j.current)},Q=()=>{a(()=>{R.value=R.value.slice(0,-1),I.value=``,L.value=0})},le=e=>{switch(e.key){case`ArrowDown`:e.preventDefault(),J(1);break;case`ArrowUp`:e.preventDefault(),J(-1);break;case`Tab`:T.length>0&&(e.preventDefault(),ce(e.shiftKey?-1:1));break;case`Home`:e.preventDefault(),W[0]!==void 0&&q(W[0]);break;case`End`:{e.preventDefault();let t=W[W.length-1];t!==void 0&&q(t);break}case`Enter`:e.preventDefault(),G>=0&&X(U[G],e.metaKey||e.ctrlKey?`secondary`:`primary`);break;case`Backspace`:I.value===``&&(R.value.length>0?(e.preventDefault(),Q()):z.value&&(e.preventDefault(),Z()));break}},ue=e=>{e.key===`Escape`&&(e.preventDefault(),R.value.length>0?Q():A.current?.close())},de=e=>{e.target===A.current&&A.current?.close()},$=-1;return m(`dialog`,{ref:A,"aria-label":E,className:o(n.dialog,ae),onClick:de,onKeyDown:ue,children:h(`div`,{className:n.panel,children:[h(`div`,{className:n.search,children:[h(`svg`,{className:n.searchIcon,"aria-hidden":`true`,viewBox:`0 0 16 16`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,children:[m(`circle`,{cx:`7`,cy:`7`,r:`4.5`}),m(`line`,{x1:`10.5`,y1:`10.5`,x2:`14`,y2:`14`})]}),V&&h(`span`,{className:n.scopeChip,children:[V.label,m(`button`,{type:`button`,className:n.scopeClear,"aria-label":p(f.commandMenu.clearScope),onClick:Z,children:m(`svg`,{viewBox:`0 0 16 16`,width:`12`,height:`12`,"aria-hidden":`true`,children:m(`path`,{d:`M4 4l8 8M12 4l-8 8`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})})]}),m(`input`,{ref:j,type:`text`,role:`combobox`,"aria-expanded":`true`,"aria-controls":k,"aria-activedescendant":G>=0?K(G):void 0,"aria-autocomplete":`list`,"aria-label":E,autoComplete:`off`,spellCheck:!1,className:n.input,placeholder:B,value:I.value,onChange:e=>{let t=e.target.value;if(!z.value&&T.length>0){let e=te(t,T);e&&(z.value=e.scope.id,t=e.rest)}I.value=t,L.value=0,P.current?.(t)},onKeyDown:le})]}),T.length>0&&h(`div`,{className:n.scopes,children:[m(`span`,{className:n.scopesLabel,children:p(f.commandMenu.scopeLabel)}),T.map(e=>h(`button`,{type:`button`,className:n.scopePill,"data-active":e.id===z.value||void 0,onClick:()=>{a(()=>{z.value=z.value===e.id?null:e.id,L.value=0}),s(j.current)},children:[e.prefix&&m(`span`,{className:n.scopePrefix,children:e.prefix}),e.label]},e.id))]}),h(`div`,{className:n.list,children:[m(`div`,{role:`listbox`,id:k,"aria-label":S,tabIndex:0,children:H.map((e,r)=>h(`div`,{role:`group`,"aria-label":e.heading,className:n.group,children:[e.heading&&h(`div`,{className:n.heading,"aria-hidden":`true`,children:[m(`span`,{children:e.heading}),I.value!==``&&m(`span`,{className:n.count,children:p(f.commandMenu.matches,{count:e.items.length})})]}),e.items.map(e=>{let{item:r,indices:i}=e;$++;let a=$;return h(`div`,{ref:e=>{M.current[a]=e},id:K(a),role:`option`,"aria-selected":a===G,"aria-disabled":r.disabled||void 0,"data-state":a===G?`active`:void 0,"data-disabled":r.disabled||void 0,className:n.option,onMouseEnter:()=>{r.disabled||(L.value=a)},onClick:()=>X(r,`primary`),children:[r.icon&&m(`span`,{className:n.icon,"aria-hidden":`true`,children:r.icon}),h(`span`,{className:n.text,children:[m(`span`,{className:n.label,children:ee(r.label,i)}),r.description&&m(`span`,{className:n.description,children:r.description})]}),r.status&&h(`span`,{className:n.status,"data-tone":r.status.tone??`neutral`,children:[m(`span`,{className:n.statusDot,"aria-hidden":`true`}),r.status.label]}),r.actions&&r.actions.length>0&&m(`span`,{className:n.actions,children:r.actions.map(e=>h(`span`,{className:n.action,onClick:t=>{t.stopPropagation(),Y(e)},children:[e.label,e.shortcut&&m(`span`,{className:n.actionKeys,"aria-hidden":`true`,children:e.shortcut.map((e,n)=>m(t,{size:`sm`,children:e},n))})]},e.id))}),r.shortcut&&m(`span`,{className:n.shortcut,"aria-hidden":`true`,children:r.shortcut.map((e,n)=>m(t,{size:`sm`,children:e},n))})]},r.id)})]},e.heading??`group-${r}`))}),U.length===0&&(C?h(`div`,{role:`status`,className:n.empty,children:[m(e,{size:`sm`}),p(f.commandMenu.loading)]}):m(`div`,{role:`status`,className:n.empty,children:D}))]}),h(`div`,{className:n.footer,"aria-hidden":`true`,children:[h(`span`,{className:n.hint,children:[m(t,{size:`sm`,children:`↑`}),m(t,{size:`sm`,children:`↓`}),` navigate`]}),h(`span`,{className:n.hint,children:[m(t,{size:`sm`,children:`↵`}),` open`]}),T.length>0&&h(`span`,{className:n.hint,children:[m(t,{size:`sm`,children:`Tab`}),` scope`]}),h(`span`,{className:n.hint,children:[m(t,{size:`sm`,children:`esc`}),` close`]})]})]})})}export{y as CommandMenu,g as fuzzyMatch,_ as fuzzyScore};
1
+ "use client";import{Spinner as e}from"../spinner/spinner.js";import{Kbd as t}from"../kbd/kbd.js";import n from"./command-menu.module.js";import{useId as r,useRef as i}from"react";import{batch as a,cn as o,focusElement as s,useEffectPropSignal as c,useSignal as l,useSignalEffect as u,useSignals as d}from"@cascivo/core";import{builtin as f,t as p}from"@cascivo/i18n";import{jsx as m,jsxs as h}from"react/jsx-runtime";function fuzzyMatch(e,t){if(e.length===0)return{score:1,indices:[]};let n=e.toLowerCase(),r=t.toLowerCase(),i=0,a=0,o=-2,s=[];for(let e=0;e<r.length&&a<n.length;e++){if(r[e]!==n[a])continue;i+=1,e===o+1&&(i+=4);let t=e===0?` `:r[e-1];(t===` `||t===`-`||t===`_`||t===`/`)&&(i+=8),o=e,s.push(e),a++}return a===n.length?{score:i,indices:s}:null}function fuzzyScore(e,t){return fuzzyMatch(e,t)?.score??0}function itemScore(e,t){let n=fuzzyScore(e,t.label);for(let r of t.keywords??[]){let t=fuzzyScore(e,r);t>n&&(n=t)}return n}function highlightLabel(e,t){if(t.length===0)return e;let r=new Set(t),i=[],a=``,o=r.has(0),flush=e=>{a!==``&&(i.push(o?m(`mark`,{className:n.match,children:a},e):a),a=``)};for(let t=0;t<e.length;t++){let n=r.has(t);n!==o&&(flush(t),o=n),a+=e[t]}return flush(e.length),i}function matchScopePrefix(e,t){for(let n of t){let t=n.prefix;if(t){if(e.startsWith(`${t} `)||e.startsWith(`${t}:`))return{scope:n,rest:e.slice(t.length+1).replace(/^\s+/,``)};if(!/\w/.test(t)&&e.startsWith(t))return{scope:n,rest:e.slice(t.length).replace(/^\s+/,``)}}}return null}function CommandMenu({open:g,onOpenChange:_,groups:v,placeholder:y,emptyLabel:b,hotkey:x=!0,label:S,ariaLabel:C,loading:w=!1,onQueryChange:T,scopes:E=[],className:D}){d();let O=C??S??p(f.commandMenu.label),k=b??p(f.commandMenu.empty),A=r(),j=`${A}-listbox`,M=i(null),N=i(null),P=i([]),F=i(_);F.current=_;let I=i(T);I.current=T;let L=c(g),R=c(x),z=l(``),B=l(0),V=l([]),H=l(null),U=V.value.at(-1)?.groups??v,W=y??V.value.at(-1)?.placeholder??p(f.commandMenu.placeholder),G=E.find(e=>e.id===H.value)??null,K=U.filter(e=>!H.value||!e.scope||e.scope===H.value).map(e=>({heading:e.heading,items:e.items.map(e=>({item:e,score:itemScore(z.value,e)})).filter(({score:e})=>e>0).sort((e,t)=>t.score-e.score).map(({item:e})=>({item:e,indices:fuzzyMatch(z.value,e.label)?.indices??[]}))})).filter(e=>e.items.length>0),q=K.flatMap(e=>e.items.map(e=>e.item)),J=q.flatMap((e,t)=>e.disabled?[]:[t]),Y=J.includes(B.value)?B.value:J[0]??-1,optionId=e=>`${A}-option-${e}`;u(()=>{let e=M.current;e&&(L.value?e.open||(a(()=>{z.value=``,B.value=0,V.value=[],H.value=null}),typeof e.showModal==`function`&&e.showModal(),s(N.current)):e.open&&(V.value=[],e.close()))}),u(()=>{let e=M.current;if(!e)return;let handler=()=>F.current(!1);return e.addEventListener(`close`,handler),()=>e.removeEventListener(`close`,handler)}),u(()=>{if(!R.value)return;let handler=e=>{(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`k`&&(e.preventDefault(),F.current(!L.value))};return window.addEventListener(`keydown`,handler),()=>window.removeEventListener(`keydown`,handler)});let setActive=e=>{B.value=e;let t=P.current[e];t&&typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`nearest`})},moveActive=e=>{if(J.length===0)return;let t=J[(J.indexOf(Y)+e+J.length)%J.length];t!==void 0&&setActive(t)},runAction=e=>{e.onSelect(),_(!1)},activateItem=(e,t)=>{if(!(!e||e.disabled)){if(e.page){if(t===`secondary`)return;a(()=>{V.value=[...V.value,e.page],z.value=``,B.value=0});return}if(e.actions&&e.actions.length>0){let n=t===`secondary`?e.actions[1]:e.actions[0];n&&runAction(n);return}t!==`secondary`&&(e.onSelect?.(),_(!1))}},cycleScope=e=>{if(E.length===0)return;let t=[null,...E.map(e=>e.id)],n=t[(t.indexOf(H.value)+e+t.length)%t.length];a(()=>{H.value=n??null,B.value=0})},clearScope=()=>{a(()=>{H.value=null,B.value=0}),s(N.current)},popPage=()=>{a(()=>{V.value=V.value.slice(0,-1),z.value=``,B.value=0})},handleInputKeyDown=e=>{switch(e.key){case`ArrowDown`:e.preventDefault(),moveActive(1);break;case`ArrowUp`:e.preventDefault(),moveActive(-1);break;case`Tab`:E.length>0&&(e.preventDefault(),cycleScope(e.shiftKey?-1:1));break;case`Home`:e.preventDefault(),J[0]!==void 0&&setActive(J[0]);break;case`End`:{e.preventDefault();let t=J[J.length-1];t!==void 0&&setActive(t);break}case`Enter`:e.preventDefault(),Y>=0&&activateItem(q[Y],e.metaKey||e.ctrlKey?`secondary`:`primary`);break;case`Backspace`:z.value===``&&(V.value.length>0?(e.preventDefault(),popPage()):H.value&&(e.preventDefault(),clearScope()));break}},handleDialogKeyDown=e=>{e.key===`Escape`&&(e.preventDefault(),V.value.length>0?popPage():M.current?.close())},handleBackdropClick=e=>{e.target===M.current&&M.current?.close()},X=-1;return m(`dialog`,{ref:M,"aria-label":O,className:o(n.dialog,D),onClick:handleBackdropClick,onKeyDown:handleDialogKeyDown,children:h(`div`,{className:n.panel,children:[h(`div`,{className:n.search,children:[h(`svg`,{className:n.searchIcon,"aria-hidden":`true`,viewBox:`0 0 16 16`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,children:[m(`circle`,{cx:`7`,cy:`7`,r:`4.5`}),m(`line`,{x1:`10.5`,y1:`10.5`,x2:`14`,y2:`14`})]}),G&&h(`span`,{className:n.scopeChip,children:[G.label,m(`button`,{type:`button`,className:n.scopeClear,"aria-label":p(f.commandMenu.clearScope),onClick:clearScope,children:m(`svg`,{viewBox:`0 0 16 16`,width:`12`,height:`12`,"aria-hidden":`true`,children:m(`path`,{d:`M4 4l8 8M12 4l-8 8`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})})]}),m(`input`,{ref:N,type:`text`,role:`combobox`,"aria-expanded":`true`,"aria-controls":j,"aria-activedescendant":Y>=0?optionId(Y):void 0,"aria-autocomplete":`list`,"aria-label":O,autoComplete:`off`,spellCheck:!1,className:n.input,placeholder:W,value:z.value,onChange:e=>{let t=e.target.value;if(!H.value&&E.length>0){let e=matchScopePrefix(t,E);e&&(H.value=e.scope.id,t=e.rest)}z.value=t,B.value=0,I.current?.(t)},onKeyDown:handleInputKeyDown})]}),E.length>0&&h(`div`,{className:n.scopes,children:[m(`span`,{className:n.scopesLabel,children:p(f.commandMenu.scopeLabel)}),E.map(e=>h(`button`,{type:`button`,className:n.scopePill,"data-active":e.id===H.value||void 0,onClick:()=>{a(()=>{H.value=H.value===e.id?null:e.id,B.value=0}),s(N.current)},children:[e.prefix&&m(`span`,{className:n.scopePrefix,children:e.prefix}),e.label]},e.id))]}),h(`div`,{className:n.list,children:[m(`div`,{role:`listbox`,id:j,"aria-label":S,tabIndex:0,children:K.map((e,r)=>h(`div`,{role:`group`,"aria-label":e.heading,className:n.group,children:[e.heading&&h(`div`,{className:n.heading,"aria-hidden":`true`,children:[m(`span`,{children:e.heading}),z.value!==``&&m(`span`,{className:n.count,children:p(f.commandMenu.matches,{count:e.items.length})})]}),e.items.map(e=>{let{item:r,indices:i}=e;X++;let a=X;return h(`div`,{ref:e=>{P.current[a]=e},id:optionId(a),role:`option`,"aria-selected":a===Y,"aria-disabled":r.disabled||void 0,"data-state":a===Y?`active`:void 0,"data-disabled":r.disabled||void 0,className:n.option,onMouseEnter:()=>{r.disabled||(B.value=a)},onClick:()=>activateItem(r,`primary`),children:[r.icon&&m(`span`,{className:n.icon,"aria-hidden":`true`,children:r.icon}),h(`span`,{className:n.text,children:[m(`span`,{className:n.label,children:highlightLabel(r.label,i)}),r.description&&m(`span`,{className:n.description,children:r.description})]}),r.status&&h(`span`,{className:n.status,"data-tone":r.status.tone??`neutral`,children:[m(`span`,{className:n.statusDot,"aria-hidden":`true`}),r.status.label]}),r.actions&&r.actions.length>0&&m(`span`,{className:n.actions,children:r.actions.map(e=>h(`span`,{className:n.action,onClick:t=>{t.stopPropagation(),runAction(e)},children:[e.label,e.shortcut&&m(`span`,{className:n.actionKeys,"aria-hidden":`true`,children:e.shortcut.map((e,n)=>m(t,{size:`sm`,children:e},n))})]},e.id))}),r.shortcut&&m(`span`,{className:n.shortcut,"aria-hidden":`true`,children:r.shortcut.map((e,n)=>m(t,{size:`sm`,children:e},n))})]},r.id)})]},e.heading??`group-${r}`))}),q.length===0&&(w?h(`div`,{role:`status`,className:n.empty,children:[m(e,{size:`sm`}),p(f.commandMenu.loading)]}):m(`div`,{role:`status`,className:n.empty,children:k}))]}),h(`div`,{className:n.footer,"aria-hidden":`true`,children:[h(`span`,{className:n.hint,children:[m(t,{size:`sm`,children:`↑`}),m(t,{size:`sm`,children:`↓`}),` navigate`]}),h(`span`,{className:n.hint,children:[m(t,{size:`sm`,children:`↵`}),` open`]}),E.length>0&&h(`span`,{className:n.hint,children:[m(t,{size:`sm`,children:`Tab`}),` scope`]}),h(`span`,{className:n.hint,children:[m(t,{size:`sm`,children:`esc`}),` close`]})]})]})})}export{CommandMenu,fuzzyMatch,fuzzyScore};
@@ -1 +1 @@
1
- "use client";import e from"./comparison.module.js";import{useRef as t}from"react";import{cn as n,useControllableSignal as r,useSignal as i,useSignals as a}from"@cascivo/core";import{builtin as o,t as s}from"@cascivo/i18n";import{jsx as c,jsxs as l}from"react/jsx-runtime";var u=e=>Math.min(100,Math.max(0,e));function d({after:d,before:f,position:p,defaultPosition:m=50,onPositionChange:h,orientation:g=`horizontal`,keyboardStep:_=5,label:v,ariaLabel:y,className:b,...x}){a();let S=t(null),C=i(!1),[w,T]=r({value:p,defaultValue:m,onChange:h}),E=Math.round(u(w.value)),D=e=>{let t=S.current;if(!t)return;let n=t.getBoundingClientRect();T(u(g===`vertical`?(e.clientY-n.top)/n.height*100:(e.clientX-n.left)/n.width*100))},O=e=>{let t=g===`vertical`?`ArrowUp`:`ArrowLeft`,n=g===`vertical`?`ArrowDown`:`ArrowRight`,r=null;e.key===t||e.key===`ArrowLeft`||e.key===`ArrowUp`?r=E-_:e.key===n||e.key===`ArrowRight`||e.key===`ArrowDown`?r=E+_:e.key===`Home`?r=0:e.key===`End`?r=100:e.key===`PageUp`?r=E+_*2:e.key===`PageDown`&&(r=E-_*2),r!==null&&(e.preventDefault(),T(u(r)))};return l(`div`,{ref:S,"data-orientation":g,"data-dragging":C.value||void 0,className:n(e.comparison,b),style:{"--position":`${E}%`},onPointerDown:e=>{C.value=!0,e.currentTarget.setPointerCapture?.(e.pointerId),D(e)},onPointerMove:e=>{C.value&&D(e)},onPointerUp:e=>{C.value=!1,e.currentTarget.releasePointerCapture?.(e.pointerId)},...x,children:[c(`div`,{className:e.item,children:d}),c(`div`,{className:e.before,"aria-hidden":`true`,children:f}),c(`div`,{className:e.divider,children:c(`div`,{role:`slider`,tabIndex:0,"aria-label":y??v??s(o.comparison.label),"aria-orientation":g,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":E,className:e.handle,onKeyDown:O})})]})}export{d as Comparison};
1
+ "use client";import e from"./comparison.module.js";import{useRef as t}from"react";import{cn as n,useControllableSignal as r,useSignal as i,useSignals as a}from"@cascivo/core";import{builtin as o,t as s}from"@cascivo/i18n";import{jsx as c,jsxs as l}from"react/jsx-runtime";var clamp=e=>Math.min(100,Math.max(0,e));function Comparison({after:u,before:d,position:f,defaultPosition:p=50,onPositionChange:m,orientation:h=`horizontal`,keyboardStep:g=5,label:_,ariaLabel:v,className:y,...b}){a();let x=t(null),S=i(!1),[C,w]=r({value:f,defaultValue:p,onChange:m}),T=Math.round(clamp(C.value)),updateFromPointer=e=>{let t=x.current;if(!t)return;let n=t.getBoundingClientRect();w(clamp(h===`vertical`?(e.clientY-n.top)/n.height*100:(e.clientX-n.left)/n.width*100))},onKeyDown=e=>{let t=h===`vertical`?`ArrowUp`:`ArrowLeft`,n=h===`vertical`?`ArrowDown`:`ArrowRight`,r=null;e.key===t||e.key===`ArrowLeft`||e.key===`ArrowUp`?r=T-g:e.key===n||e.key===`ArrowRight`||e.key===`ArrowDown`?r=T+g:e.key===`Home`?r=0:e.key===`End`?r=100:e.key===`PageUp`?r=T+g*2:e.key===`PageDown`&&(r=T-g*2),r!==null&&(e.preventDefault(),w(clamp(r)))};return l(`div`,{ref:x,"data-orientation":h,"data-dragging":S.value||void 0,className:n(e.comparison,y),style:{"--position":`${T}%`},onPointerDown:e=>{S.value=!0,e.currentTarget.setPointerCapture?.(e.pointerId),updateFromPointer(e)},onPointerMove:e=>{S.value&&updateFromPointer(e)},onPointerUp:e=>{S.value=!1,e.currentTarget.releasePointerCapture?.(e.pointerId)},...b,children:[c(`div`,{className:e.item,children:u}),c(`div`,{className:e.before,"aria-hidden":`true`,children:d}),c(`div`,{className:e.divider,children:c(`div`,{role:`slider`,tabIndex:0,"aria-label":v??_??s(o.comparison.label),"aria-orientation":h,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":T,className:e.handle,onKeyDown})})]})}export{Comparison};
@@ -1 +1 @@
1
- "use client";import e from"./contained-list.module.js";import{Slot as t,cn as n}from"@cascivo/core";import{jsx as r,jsxs as i}from"react/jsx-runtime";function a({label:t,kind:a=`on-page`,action:o,className:s,children:c,...l}){return i(`div`,{"data-kind":a,className:n(e.root,s),...l,children:[i(`div`,{className:e.header,children:[r(`h3`,{className:e.label,children:t}),o?r(`div`,{className:e.action,children:o}):null]}),r(`ul`,{className:e.list,children:c})]})}function o({asChild:i=!1,onClick:a,className:o,children:s,...c}){let l=i||typeof a==`function`,u=i?t:`div`;return r(`li`,{className:e.item,"data-interactive":l?``:void 0,children:r(u,{className:n(e.itemContent,o),onClick:a,...c,children:s})})}export{a as ContainedList,o as ContainedListItem};
1
+ "use client";import e from"./contained-list.module.js";import{Slot as t,cn as n}from"@cascivo/core";import{jsx as r,jsxs as i}from"react/jsx-runtime";function ContainedList({label:t,kind:a=`on-page`,action:o,className:s,children:c,...l}){return i(`div`,{"data-kind":a,className:n(e.root,s),...l,children:[i(`div`,{className:e.header,children:[r(`h3`,{className:e.label,children:t}),o?r(`div`,{className:e.action,children:o}):null]}),r(`ul`,{className:e.list,children:c})]})}function ContainedListItem({asChild:i=!1,onClick:a,className:o,children:s,...c}){let l=i||typeof a==`function`,u=i?t:`div`;return r(`li`,{className:e.item,"data-interactive":l?``:void 0,children:r(u,{className:n(e.itemContent,o),onClick:a,...c,children:s})})}export{ContainedList,ContainedListItem};
@@ -1 +1 @@
1
- "use client";import e from"./context-menu.module.js";import{Children as t,isValidElement as n,useRef as r}from"react";import{useSignal as i,useSignalEffect as a,useSignals as o}from"@cascivo/core";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l(){return globalThis.process?.env?.NODE_ENV!==`production`}function u({children:u}){o();let f=r(null),p=r(null),m=i(!1),h=()=>{let e=f.current;return e?Array.from(e.querySelectorAll(`[role="menuitem"]:not([aria-disabled="true"])`)):[]},g=e=>{let t=h();t.length!==0&&t[e(t,t.indexOf(document.activeElement))]?.focus()},_=e=>{switch(e.key){case`ArrowDown`:e.preventDefault(),g((e,t)=>t<0?0:(t+1)%e.length);break;case`ArrowUp`:e.preventDefault(),g((e,t)=>t<0?e.length-1:(t-1+e.length)%e.length);break;case`Home`:e.preventDefault(),g(()=>0);break;case`End`:e.preventDefault(),g(e=>e.length-1);break}};a(()=>{let e=f.current;if(e)if(m.value){try{e.showPopover()}catch{}h()[0]?.focus()}else try{e.hidePopover()}catch{}}),a(()=>{let e=f.current;if(!e)return;let t=e=>{e.newState===`closed`&&(m.value=!1)};return e.addEventListener(`toggle`,t),()=>e.removeEventListener(`toggle`,t)});function v(e){e.preventDefault();let t=p.current;t&&(t.style.setProperty(`--cascivo-context-x`,`${e.clientX}px`),t.style.setProperty(`--cascivo-context-y`,`${e.clientY}px`),m.value=!0)}let y=t.toArray(u),b=y.filter(e=>n(e)&&e.type===d),x=y.filter(e=>!b.includes(e));if(b.length===0&&l())throw Error(`<ContextMenu> requires at least one <ContextMenuItem> child. Items are matched by component identity, so they must be direct children — not wrapped in a fragment or another component.`);return c(`div`,{ref:p,onContextMenu:v,className:e.wrapper,children:[x,s(`div`,{ref:f,popover:`auto`,role:`menu`,"data-state":m.value?`open`:`closed`,className:e.menu,onKeyDown:_,children:b})]})}function d({children:t,onSelect:n,disabled:r}){function i(){r||n()}function a(e){(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),i())}return s(`div`,{role:`menuitem`,tabIndex:r?-1:0,"aria-disabled":r,onClick:i,onKeyDown:a,className:e.item,children:t})}export{u as ContextMenu,d as ContextMenuItem};
1
+ "use client";import e from"./context-menu.module.js";import{Children as t,isValidElement as n,useRef as r}from"react";import{useSignal as i,useSignalEffect as a,useSignals as o}from"@cascivo/core";import{jsx as s,jsxs as c}from"react/jsx-runtime";function isDev(){return globalThis.process?.env?.NODE_ENV!==`production`}function ContextMenu({children:l}){o();let u=r(null),d=r(null),f=i(!1),enabledItems=()=>{let e=u.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()},handleMenuKeyDown=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}};a(()=>{let e=u.current;if(e)if(f.value){try{e.showPopover()}catch{}enabledItems()[0]?.focus()}else try{e.hidePopover()}catch{}}),a(()=>{let e=u.current;if(!e)return;let handler=e=>{e.newState===`closed`&&(f.value=!1)};return e.addEventListener(`toggle`,handler),()=>e.removeEventListener(`toggle`,handler)});function handleContextMenu(e){e.preventDefault();let t=d.current;t&&(t.style.setProperty(`--cascivo-context-x`,`${e.clientX}px`),t.style.setProperty(`--cascivo-context-y`,`${e.clientY}px`),f.value=!0)}let p=t.toArray(l),m=p.filter(e=>n(e)&&e.type===ContextMenuItem),h=p.filter(e=>!m.includes(e));if(m.length===0&&isDev())throw Error(`<ContextMenu> requires at least one <ContextMenuItem> child. Items are matched by component identity, so they must be direct children — not wrapped in a fragment or another component.`);return c(`div`,{ref:d,onContextMenu:handleContextMenu,className:e.wrapper,children:[h,s(`div`,{ref:u,popover:`auto`,role:`menu`,"data-state":f.value?`open`:`closed`,className:e.menu,onKeyDown:handleMenuKeyDown,children:m})]})}function ContextMenuItem({children:t,onSelect:n,disabled:r}){function handleSelect(){r||n()}function handleKeyDown(e){(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),handleSelect())}return s(`div`,{role:`menuitem`,tabIndex:r?-1:0,"aria-disabled":r,onClick:handleSelect,onKeyDown:handleKeyDown,className:e.item,children:t})}export{ContextMenu,ContextMenuItem};
@@ -1 +1 @@
1
- import e from"./data-list.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n,jsxs as r}from"react/jsx-runtime";function i({items:i,orientation:a=`horizontal`,dividers:o=!1,size:s=`md`,className:c,...l}){return n(`dl`,{"data-orientation":a,"data-size":s,"data-dividers":o?``:void 0,className:t(e.list,c),...l,children:i.map((t,i)=>r(`div`,{className:e.row,children:[n(`dt`,{className:e.term,children:t.label}),n(`dd`,{className:e.detail,children:t.value})]},t.id??i))})}export{i as DataList};
1
+ import e from"./data-list.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n,jsxs as r}from"react/jsx-runtime";function DataList({items:i,orientation:a=`horizontal`,dividers:o=!1,size:s=`md`,className:c,children:l,...u}){return r(`dl`,{"data-orientation":a,"data-size":s,"data-dividers":o?``:void 0,className:t(e.list,c),...u,children:[i?.map((t,i)=>r(`div`,{className:e.row,children:[n(`dt`,{className:e.term,children:t.label}),n(`dd`,{className:e.detail,children:t.value})]},t.id??i)),l]})}function DataListItem({label:t,children:i}){return r(`div`,{className:e.row,children:[n(`dt`,{className:e.term,children:t}),n(`dd`,{className:e.detail,children:i})]})}export{DataList,DataListItem};
@@ -1 +1 @@
1
- function e(e){if(!e)return!1;switch(e.kind){case`text`:return e.value.trim()!==``;case`select`:return e.values.length>0;case`range`:return e.min!==void 0||e.max!==void 0}}function t(t){let n=0;for(let r in t)e(t[r])&&n++;return n}function n(e,t){switch(t.kind){case`text`:{let n=t.value.trim().toLowerCase();return n===``||String(e??``).toLowerCase().includes(n)}case`select`:return t.values.length===0||t.values.includes(String(e??``));case`range`:{if(t.min===void 0&&t.max===void 0)return!0;let n=typeof e==`number`?e:Number(e);return!(Number.isNaN(n)||t.min!==void 0&&n<t.min||t.max!==void 0&&n>t.max)}}}function r(t,r,i){let a=[];for(let t in r){let n=r[t];n&&e(n)&&a.push([t,n])}if(a.length===0)return t;let o=[];for(let e of t){let t=!0;for(let[r,o]of a)if(!n(i(e,r),o)){t=!1;break}t&&o.push(e)}return o}function i(e,t){let n=new Map;for(let r of e){let e=String(t(r)??``);n.set(e,(n.get(e)??0)+1)}let r=new Intl.Collator().compare;return[...n.entries()].map(([e,t])=>({value:e,count:t})).sort((e,t)=>t.count-e.count||r(e.value,t.value))}function a(e,t){let n=1/0,r=-1/0;for(let i of e){let e=t(i),a=typeof e==`number`?e:Number(e);Number.isNaN(a)||e==null||e===``||(a<n&&(n=a),a>r&&(r=a))}return n<=r?{min:n,max:r}:void 0}export{r as applyColumnFilters,t as countActiveFilters,i as facetValues,e as isFilterActive,a as numericExtent};
1
+ function isFilterActive(e){if(!e)return!1;switch(e.kind){case`text`:return e.value.trim()!==``;case`select`:return e.values.length>0;case`range`:return e.min!==void 0||e.max!==void 0}}function countActiveFilters(e){let t=0;for(let n in e)isFilterActive(e[n])&&t++;return t}function matchesFilter(e,t){switch(t.kind){case`text`:{let n=t.value.trim().toLowerCase();return n===``||String(e??``).toLowerCase().includes(n)}case`select`:return t.values.length===0||t.values.includes(String(e??``));case`range`:{if(t.min===void 0&&t.max===void 0)return!0;let n=typeof e==`number`?e:Number(e);return!(Number.isNaN(n)||t.min!==void 0&&n<t.min||t.max!==void 0&&n>t.max)}}}function applyColumnFilters(e,t,n){let r=[];for(let e in t){let n=t[e];n&&isFilterActive(n)&&r.push([e,n])}if(r.length===0)return e;let i=[];for(let t of e){let e=!0;for(let[i,a]of r)if(!matchesFilter(n(t,i),a)){e=!1;break}e&&i.push(t)}return i}function facetValues(e,t){let n=new Map;for(let r of e){let e=String(t(r)??``);n.set(e,(n.get(e)??0)+1)}let r=new Intl.Collator().compare;return[...n.entries()].map(([e,t])=>({value:e,count:t})).sort((e,t)=>t.count-e.count||r(e.value,t.value))}function numericExtent(e,t){let n=1/0,r=-1/0;for(let i of e){let e=t(i),a=typeof e==`number`?e:Number(e);Number.isNaN(a)||e==null||e===``||(a<n&&(n=a),a>r&&(r=a))}return n<=r?{min:n,max:r}:void 0}export{applyColumnFilters,countActiveFilters,facetValues,isFilterActive,numericExtent};
@@ -1 +1 @@
1
- function e(e,t){let n=t.order;if(!n||n.length===0)return[...e];let r=new Map(e.map(e=>[e.key,e])),i=[];for(let e of n){let t=r.get(e);t&&(i.push(t),r.delete(e))}for(let t of e)r.has(t.key)&&i.push(t);return i}function t(t,n){let r=new Set(n.hidden??[]),i=n.pinned??{},a=e(t,n).filter(e=>!r.has(e.key));if(a.length===0)return[...t];let o=a.filter(e=>i[e.key]===`start`),s=a.filter(e=>i[e.key]===void 0),c=a.filter(e=>i[e.key]===`end`);return[...o,...s,...c]}function n(t,n,r,i){let a=new Set(n.hidden??[]),o=n.pinned??{},s=e(t,n).map(e=>e.key),c=s.indexOf(r);if(c===-1)return n;let l=o[r],u=c+i;for(;u>=0&&u<s.length;){let e=s[u];if(!a.has(e)&&o[e]===l)break;if(o[e]!==l)return n;u+=i}if(u<0||u>=s.length)return n;let d=[...s];return d.splice(c,1),d.splice(u,0,r),{...n,order:d}}function r(e,t,n){let r={...e.pinned};return n===null?delete r[t]:r[t]=n,{...e,pinned:r}}function i(e,t,n){let r={...e.widths};return n===void 0?delete r[t]:r[t]=Math.max(48,Math.round(n)),{...e,widths:r}}function a(e,t,n){let r=t.hidden??[];return r.includes(n)?{...t,hidden:r.filter(e=>e!==n)}:e.filter(e=>!r.includes(e.key)).length<=1?t:{...t,hidden:[...r,n]}}function o(e,t){let n=Array.from({length:e.length}),r=0;for(let i=0;i<e.length;i++)t[i]===`start`&&(n[i]=r,r+=e[i]);r=0;for(let i=e.length-1;i>=0;i--)t[i]===`end`&&(n[i]=r,r+=e[i]);return n}export{t as displayColumns,n as moveColumn,r as pinColumn,i as resizeColumn,o as stickyOffsets,a as toggleColumnHidden};
1
+ function orderedColumns(e,t){let n=t.order;if(!n||n.length===0)return[...e];let r=new Map(e.map(e=>[e.key,e])),i=[];for(let e of n){let t=r.get(e);t&&(i.push(t),r.delete(e))}for(let t of e)r.has(t.key)&&i.push(t);return i}function displayColumns(e,t){let n=new Set(t.hidden??[]),r=t.pinned??{},i=orderedColumns(e,t).filter(e=>!n.has(e.key));if(i.length===0)return[...e];let a=i.filter(e=>r[e.key]===`start`),o=i.filter(e=>r[e.key]===void 0),s=i.filter(e=>r[e.key]===`end`);return[...a,...o,...s]}function moveColumn(e,t,n,r){let i=new Set(t.hidden??[]),a=t.pinned??{},o=orderedColumns(e,t).map(e=>e.key),s=o.indexOf(n);if(s===-1)return t;let c=a[n],l=s+r;for(;l>=0&&l<o.length;){let e=o[l];if(!i.has(e)&&a[e]===c)break;if(a[e]!==c)return t;l+=r}if(l<0||l>=o.length)return t;let u=[...o];return u.splice(s,1),u.splice(l,0,n),{...t,order:u}}function pinColumn(e,t,n){let r={...e.pinned};return n===null?delete r[t]:r[t]=n,{...e,pinned:r}}function resizeColumn(e,t,n){let r={...e.widths};return n===void 0?delete r[t]:r[t]=Math.max(48,Math.round(n)),{...e,widths:r}}function toggleColumnHidden(e,t,n){let r=t.hidden??[];return r.includes(n)?{...t,hidden:r.filter(e=>e!==n)}:e.filter(e=>!r.includes(e.key)).length<=1?t:{...t,hidden:[...r,n]}}function stickyOffsets(e,t){let n=Array.from({length:e.length}),r=0;for(let i=0;i<e.length;i++)t[i]===`start`&&(n[i]=r,r+=e[i]);r=0;for(let i=e.length-1;i>=0;i--)t[i]===`end`&&(n[i]=r,r+=e[i]);return n}export{displayColumns,moveColumn,pinColumn,resizeColumn,stickyOffsets,toggleColumnHidden};
@@ -1 +1 @@
1
- "use client";import{Button as e}from"../button/button.js";import{Checkbox as t}from"../checkbox/checkbox.js";import{OverflowMenu as n}from"../overflow-menu/overflow-menu.js";import{Editable as r}from"../editable/editable.js";import{Popover as i,PopoverContent as a,PopoverTrigger as o}from"../popover/popover.js";import s from"./data-table.module.js";import{applyColumnFilters as c,countActiveFilters as l,facetValues as ee,isFilterActive as te,numericExtent as ne}from"./column-filter.js";import{displayColumns as re,moveColumn as ie,pinColumn as ae,resizeColumn as oe,stickyOffsets as se,toggleColumnHidden as ce}from"./column-layout.js";import{moveGridFocus as le}from"./grid-keys.js";import{aggregate as u,groupItems as ue,headerSpans as de}from"./row-group.js";import{createRowSearch as fe}from"./row-search.js";import{downloadCsv as pe,toCsv as me}from"./to-csv.js";import{sortRowsBy as he}from"./row-sort.js";import{computeWindow as ge,scrollTopForRow as _e}from"./virtual-window.js";import{Fragment as ve,useId as ye,useRef as d}from"react";import{batch as f,cn as be,persistedSignal as xe,useComputed as p,useControllableSignal as m,useSignal as h,useSignalEffect as g,useSignals as Se}from"@cascivo/core";import{builtin as _,formatNumber as v,t as y}from"@cascivo/i18n";import{jsx as b,jsxs as x}from"react/jsx-runtime";import{flushSync as Ce}from"react-dom";var we=``;function Te(e,t){let n=e.aggregate;if(n===void 0)return null;if(typeof n==`function`)return n(t);let r=u(t.map(t=>S(t,e.key)),n);return r===void 0?null:n===`count`?v(r):v(r,{maximumFractionDigits:2})}var Ee=new Map;function De(e){let t=Ee.get(e);return t||(t=xe(`cascivo.data-table.${e}`,{columnState:{}}),Ee.set(e,t)),t}var Oe=new Set;function ke(){return globalThis.process?.env?.NODE_ENV!==`production`}var Ae=new Set;function je(e,t,n){if(!ke())return;let r=e.scrollWidth-e.clientWidth;if(r<=1)return;let i=`${n}:${e.clientWidth}`;Ae.has(i)||(Ae.add(i),console.warn(`cascivo DataTable: the table overflows its container (scrollWidth ${e.scrollWidth}px > clientWidth ${e.clientWidth}px, by ${r}px), so the last column is cut off. `+(t.length>0?`Drop a \`width\` from one of the sized columns (${t.join(`, `)}), or lower the \`minWidth\` on the free-form one.`:"Lower the `minWidth` on the widest column.")))}function Me(e,t,n){ke()&&(e!==void 0||t!==void 0||Oe.has(n)||(Oe.add(n),console.warn(`cascivo DataTable: this table has no accessible name (columns: ${n}). Pass \`title\` for a visible caption, or \`ariaLabel\` for a name only screen readers hear.`)))}function S(e,t){return e[t]}function Ne({columns:u,rows:xe,getRowId:v,sort:Ee,defaultSort:Oe,sortMode:ke=`client`,onSortChange:Ae,searchable:Ne=!1,pagination:C,selection:w,batchActions:Pe,renderExpandedRow:T,filters:Fe,defaultFilters:Ie,onFiltersChange:Le,noResultsState:Re,toolbar:ze,rowActions:E,columnState:Be,defaultColumnState:Ve,onColumnStateChange:He,columnSettings:D,server:O,multiSort:Ue=!1,stateKey:We,keyboardNavigation:Ge=`row`,onCellEdit:Ke,groupBy:qe,totals:Je=!1,pinnedRows:Ye,columnGroups:Xe,exportable:Ze=!1,density:Qe=`normal`,zebra:$e=!1,stickyHeader:et=!1,loading:k=!1,emptyState:tt,title:A,ariaLabel:nt,description:rt,labels:j,className:it,virtualized:M=!1,rowHeight:at,windowSize:ot,overscan:st=3}){Se();let ct=ye(),N={search:j?.search??y(_.dataTable.search),empty:j?.empty??y(_.dataTable.empty),selectAll:j?.selectAll??y(_.dataTable.selectAll),selectRow:j?.selectRow??y(_.dataTable.selectRow),itemsSelected:e=>j?.itemsSelected?.(e)??y(_.dataTable.itemsSelected,{count:e}),expandRow:j?.expandRow??y(_.dataTable.expandRow),previousPage:j?.previousPage??y(_.dataTable.previousPage),nextPage:j?.nextPage??y(_.dataTable.nextPage),columns:j?.columns??y(_.dataTable.columns),actions:j?.actions??y(_.dataTable.actions),noResults:j?.noResults??y(_.dataTable.noResults),clearFilters:j?.clearFilters??y(_.dataTable.clearFilters),filterColumn:e=>j?.filterColumn?.(e)??y(_.dataTable.filterColumn,{column:e}),min:j?.min??y(_.dataTable.min),max:j?.max??y(_.dataTable.max),all:j?.all??y(_.dataTable.all),columnMenu:e=>j?.columnMenu?.(e)??y(_.dataTable.columnMenu,{column:e}),sortAscending:j?.sortAscending??y(_.dataTable.sortAscending),sortDescending:j?.sortDescending??y(_.dataTable.sortDescending),clearSort:j?.clearSort??y(_.dataTable.clearSort),moveLeft:j?.moveLeft??y(_.dataTable.moveLeft),moveRight:j?.moveRight??y(_.dataTable.moveRight),pinStart:j?.pinStart??y(_.dataTable.pinStart),pinEnd:j?.pinEnd??y(_.dataTable.pinEnd),unpin:j?.unpin??y(_.dataTable.unpin),hideColumn:j?.hideColumn??y(_.dataTable.hideColumn),resizeColumn:e=>j?.resizeColumn?.(e)??y(_.dataTable.resizeColumn,{column:e}),editCell:e=>j?.editCell?.(e)??y(_.dataTable.editCell,{column:e}),totals:j?.totals??y(_.dataTable.totals),exportCsv:j?.exportCsv??y(_.dataTable.exportCsv)},[lt]=m({value:xe}),[ut]=m({value:u}),dt=We===void 0?void 0:De(We),[P,ft]=m({value:Ee,defaultValue:dt?.value.sort??Oe}),[pt]=m({value:(typeof qe==`string`?[qe]:qe??[]).join(we)}),mt=h(new Set),ht=h([]),F=w?.selected??ht.value,gt=e=>{w?.selected===void 0&&(ht.value=e),w?.onChange?.(e)},_t=h(``),[vt,I]=m({value:C?.page,defaultValue:1,onChange:C?.onPageChange}),[yt,bt]=m({value:Fe,defaultValue:Ie??{},onChange:Le}),[L,R]=m({value:Be,defaultValue:dt?.value.columnState??Ve??{},onChange:He});g(()=>{let e={columnState:L.value};P.value&&(e.sort=P.value),dt&&(dt.value=e)});let xt=p(()=>re(ut.value,L.value)),z=d(null),St=h([]);g(()=>{let e=L.value.pinned;if(!e||Object.keys(e).length===0)return;let t=V.current;if(!t||typeof ResizeObserver>`u`)return;let n=()=>{let e=t.querySelector(`thead tr:not([data-group-header])`);e&&(St.value=Array.from(e.children,e=>e.getBoundingClientRect().width))};n();let r=new ResizeObserver(n);r.observe(t);let i=t.querySelector(`table`);return i&&r.observe(i),()=>r.disconnect()});let Ct=h(null);g(()=>{let e=Ct.value;if(!e)return;let t=z.current?getComputedStyle(z.current).direction===`rtl`:!1,n=n=>{let r=(n.clientX-e.startX)*(t?-1:1);R(oe(L.value,e.key,e.startWidth+r))},r=()=>{Ct.value=null};return window.addEventListener(`pointermove`,n),window.addEventListener(`pointerup`,r),()=>{window.removeEventListener(`pointermove`,n),window.removeEventListener(`pointerup`,r)}});let B=h(C?.pageSize??0),wt=h(new Set),Tt=Ge===`grid`,Et=h({row:-1,col:0}),Dt=d(!1),V=d(null),Ot=h(0),kt=h(0),At=h(0);g(()=>{let e=V.current;if(!e||typeof ResizeObserver>`u`)return;let t=u.filter(e=>e.width!==void 0).map(e=>e.key),n=u.map(e=>e.key).join(`,`),r=0,i=new ResizeObserver(()=>{cancelAnimationFrame(r),r=requestAnimationFrame(()=>{je(e,t,n);let r=e.querySelector(`thead tr[data-group-header]`);e.style.setProperty(`--_group-h`,`${r?r.getBoundingClientRect().height:0}px`);let i=e.querySelector(`thead tr:not([data-group-header])`);i&&e.style.setProperty(`--_head-h`,`${i.getBoundingClientRect().height}px`);let a=e.querySelector(`thead`);a&&e.style.setProperty(`--_thead-h`,`${a.getBoundingClientRect().height}px`)})});return i.observe(e),()=>{cancelAnimationFrame(r),i.disconnect()}}),g(()=>{if(!M)return;let e=V.current;if(!e)return;let t=()=>{Ce(()=>{Ot.value=e.scrollTop})};return e.addEventListener(`scroll`,t,{passive:!0}),()=>e.removeEventListener(`scroll`,t)}),g(()=>{if(!M)return;let e=V.current;if(!e||typeof ResizeObserver>`u`)return;let t=()=>{kt.value=e.clientHeight;let t=e.querySelector(`tbody tr[aria-rowindex]`)?.getBoundingClientRect().height??0;t>0&&(At.value=t)};t();let n=new ResizeObserver(t);n.observe(e);let r=e.querySelector(`table`);return r&&n.observe(r),()=>n.disconnect()});let jt=p(()=>(xt.value,lt.value.map((e,t)=>({row:e,id:v?v(e):String(t)})))),Mt=p(()=>{let e=P.value;return!e||ke===`server`||O?jt.value:he(jt.value,[e,...e.thenBy??[]].map(e=>({keyOf:t=>S(t.row,e.key),direction:e.direction})))}),Nt=p(()=>O?Mt.value:c(Mt.value,yt.value,(e,t)=>S(e.row,t))),Pt=p(()=>{let e=xt.value;return fe(t=>{if(t.haystack===void 0){let n=``;for(let r of e)n+=String(S(t.row,r.key)??``)+`\0`;t.haystack=n.toLowerCase()}return t.haystack})});g(()=>{if(!Ne)return;let e=jt.value,t=Pt.value,n=typeof requestIdleCallback==`function`,r,i=0,a=()=>{i=t.prime(e,i,2e4),i<e.length&&o()},o=()=>{r=n?requestIdleCallback(a,{timeout:500}):setTimeout(a,16)};return o(),()=>{n?cancelIdleCallback(r):clearTimeout(r)}});let Ft=p(()=>{if(O)return Mt.value;let e=_t.value.trim().toLowerCase();return e?Pt.value.filter(Nt.value,e):Nt.value}),It=p(()=>{let e=pt.value===``?[]:pt.value.split(we);return e.length===0?Ft.value:ue(Ft.value,e,(e,t)=>S(e.row,t),mt.value)}),Lt=p(()=>C?Math.max(1,Math.ceil(It.value.length/B.value)):1),Rt=p(()=>Math.min(vt.value,Lt.value)),zt=p(()=>{if(!C||O)return It.value;let e=(Rt.value-1)*B.value;return It.value.slice(e,e+B.value)}),Bt=p(()=>pt.value===``?zt.value:zt.value.filter(e=>e.group===void 0)),Vt=p(()=>{let e=new Map,t=ut.value.filter(e=>e.aggregate!==void 0);if(t.length===0)return e;let n=Ft.value.map(e=>e.row);for(let r of t)e.set(r.key,Te(r,n));return e}),Ht=d(O);Ht.current=O;let Ut=d(!1);g(()=>{let e={sort:P.value,search:_t.value.trim(),filters:yt.value,page:vt.value,pageSize:B.value};if(!Ut.current){Ut.current=!0;return}Ht.current?.onQueryChange(e)});let Wt=(e,t)=>{let n={...yt.value};t&&te(t)?n[e]=t:delete n[e],f(()=>{bt(n),I(1)})},Gt=()=>f(()=>{bt({}),I(1)}),Kt=e=>R(ce(ut.value,L.value,e)),qt=(e,t)=>{let n=L.value,r=z.current?getComputedStyle(z.current).direction===`rtl`:!1;switch(t){case`sort-asc`:return $t({key:e.key,direction:`asc`});case`sort-desc`:return $t({key:e.key,direction:`desc`});case`sort-clear`:return $t(void 0);case`move-left`:return R(ie(ut.value,n,e.key,r?1:-1));case`move-right`:return R(ie(ut.value,n,e.key,r?-1:1));case`pin-start`:return R(ae(n,e.key,`start`));case`pin-end`:return R(ae(n,e.key,`end`));case`unpin`:return R(ae(n,e.key,null));case`hide`:return Kt(e.key);default:return}},Jt=h(null),Yt=d(null),Xt=()=>{let e=jt.value;return Yt.current?.entries!==e&&(Yt.current={entries:e,facets:new Map,extents:new Map}),Yt.current},Zt=e=>{let t=Xt(),n=t.facets.get(e);return n||(n=ee(t.entries,t=>S(t.row,e)),t.facets.set(e,n)),n},Qt=e=>{let t=Xt();return t.extents.has(e)||t.extents.set(e,ne(t.entries,t=>S(t.row,e))),t.extents.get(e)},$t=e=>{f(()=>{ft(e),I(1)}),Ae?.(e)},en=(e,t=!1)=>{let n=P.value;if(t&&Ue&&n&&n.key!==e){let t=n.thenBy??[],r=t.findIndex(t=>t.key===e),i=r===-1?[...t,{key:e,direction:`asc`}]:t.map((t,n)=>n===r?{key:e,direction:t.direction===`asc`?`desc`:`asc`}:t);return $t({...n,thenBy:i})}let r;r=!n||n.key!==e?{key:e,direction:`asc`}:n.direction===`asc`?{key:e,direction:`desc`}:void 0,$t(r)},tn=e=>{let t=P.value;if(!t)return;if(t.key===e)return{index:0,direction:t.direction};let n=(t.thenBy??[]).findIndex(t=>t.key===e);return n===-1?void 0:{index:n+1,direction:(t.thenBy??[])[n].direction}},nn=e=>{if(![`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`].includes(e.key))return;let t=e.currentTarget,n=Array.from(t.querySelectorAll(`th button, td button, td input[type="checkbox"]`)),r=n.indexOf(document.activeElement);if(r===-1)return;e.preventDefault();let i=e=>e.closest(`tr`),a;if(e.key===`ArrowRight`||e.key===`ArrowLeft`){let t=n[r+(e.key===`ArrowRight`?1:-1)];t&&i(t)===i(n[r])&&(a=t)}else{let t=e.key===`ArrowDown`?1:-1,o=n[r];for(let e=r+t;e>=0&&e<n.length;e+=t)if(i(n[e])!==i(o)){a=n[e];break}}a?.focus()},rn=d(null);rn.current?.ids!==F&&(rn.current={ids:F,set:new Set(F)});let H=rn.current.set,an=e=>{let t=F;w?.mode===`single`?gt(H.has(e)?[]:[e]):gt(H.has(e)?t.filter(t=>t!==e):[...t,e])},on=e=>{let t=new Set(wt.value);t.has(e)?t.delete(e):t.add(e),wt.value=t},U=zt.value,W=Bt.value,sn=wt.value,cn=d(null);(cn.current?.page!==W||cn.current.set!==H)&&(cn.current={page:W,set:H,all:W.length>0&&W.every(e=>H.has(e.id)),some:W.some(e=>H.has(e.id))});let ln=cn.current.all,un=cn.current.some,dn=at??(At.value>0?At.value:40),fn=ot===void 0?kt.value>0?kt.value:20*dn:ot*dn,G=M?ge({scrollTop:Ot.value,viewportHeight:fn,rowHeight:dn,count:U.length,overscan:st}):void 0,pn=G?U.slice(G.start,G.end):U,mn=G?.start??0,hn=()=>{if(ln){let e=new Set(W.map(e=>e.id));gt(F.filter(t=>!e.has(t)))}else{let e=new Set(F);for(let t of W)e.add(t.id);gt([...e])}},K=xt.value,q=L.value,gn=new Set(q.hidden??[]),_n=D?.visibility===!0,vn=D!==void 0&&(D.reorderable===!0||D.pinnable===!0||D.visibility===!0),yn=D?.resizable===!0,bn=Object.keys(q.widths??{}).length>0,J=q.pinned??{},Y=+!!T+ +!!w,xn=K.some(e=>J[e.key]===`start`),Sn=K.some(e=>J[e.key]===`end`),X=[...Array.from({length:Y},()=>xn?`start`:void 0),...K.map(e=>J[e.key]),...E?[Sn?`end`:void 0]:[]],Cn=St.value,wn=Cn.length===X.length?se(Cn,X):X.map(()=>void 0),Tn=X.lastIndexOf(`start`),En=X.indexOf(`end`),Z=e=>{let t=X[e];if(!t)return{};let n=wn[e];return{"data-pinned":t,"data-pinned-edge":e===Tn||e===En?!0:void 0,style:n===void 0?void 0:t===`start`?{insetInlineStart:n}:{insetInlineEnd:n}}},Dn=Math.min(Et.value.row,U.length-1),On={row:Dn,col:U[Dn]?.group?Y:Math.min(Et.value.col,X.length-1)},kn=e=>{e&&Dt.current&&(Dt.current=!1,e.focus())},Q=(e,t)=>{if(!Tt||e===void 0)return{};let n=On.row===e&&On.col===t;return{tabIndex:n?0:-1,"data-cell":`${e},${t}`,ref:n?kn:void 0,onFocus:()=>{n||(Et.value={row:e,col:t})}}},$=Tt?{tabIndex:-1}:{},An=Math.max(1,Math.floor(fn/dn)),jn=e=>{if(Dt.current=!0,Et.value=e,G&&e.row>=0&&(e.row<G.start||e.row>=G.end)){let t=V.current;t&&(t.scrollTop=_e(e.row,{viewportHeight:fn,rowHeight:dn,count:U.length,overscan:st}))}},Mn=e=>{let t=e.target,n=t.closest(`[data-cell]`);if(!n)return;if(t!==n){e.key===`Escape`&&(e.preventDefault(),n.focus());return}if(e.key===`Enter`||e.key===`F2`){let t=n.querySelector(`button, input, select, a[href], [tabindex]`);if(!t)return;e.preventDefault(),t.focus(),n.hasAttribute(`data-editable`)&&t.click();return}let[r=-1,i=0]=(n.dataset.cell??``).split(`,`).map(Number),a=le({row:r,col:i},e.key,{rowCount:U.length,colCount:X.length,pageRows:An},e.ctrlKey||e.metaKey);a&&(e.preventDefault(),jn(U[a.row]?.group?{row:a.row,col:Y}:a))},Nn=()=>{pe(me(Ft.value.map(e=>e.row),K.map(e=>({key:e.key,header:e.header})),S),(typeof Ze==`object`?Ze.filename:void 0)??A??`export`)},Pn=e=>{let t=new Set(mt.value);t.has(e)?t.delete(e):t.add(e),mt.value=t},Fn=d(new WeakMap),In=(e,t)=>(e??[]).map((e,n)=>({row:e,id:v?v(e):`${t}-${n}`})),Ln=In(Ye?.top,`pinned-top`),Rn=In(Ye?.bottom,`pinned-bottom`),zn=e=>{let t=[];if(e.sortable&&(t.push({id:`sort-asc`,label:N.sortAscending},{id:`sort-desc`,label:N.sortDescending}),P.value?.key===e.key&&t.push({id:`sort-clear`,label:N.clearSort})),D?.reorderable){let n=K.filter(t=>J[t.key]===J[e.key]),r=n.indexOf(e);t.push({id:`move-left`,label:N.moveLeft,disabled:r===0},{id:`move-right`,label:N.moveRight,disabled:r===n.length-1})}if(D?.pinnable){let n=J[e.key];n!==`start`&&t.push({id:`pin-start`,label:N.pinStart}),n!==`end`&&t.push({id:`pin-end`,label:N.pinEnd}),n&&t.push({id:`unpin`,label:N.unpin})}return D?.visibility&&t.push({id:`hide`,label:N.hideColumn,disabled:K.length===1}),t},Bn=(e,t)=>{let n=z.current?getComputedStyle(z.current).direction===`rtl`:!1,r=t.shiftKey?64:16,i=n?`ArrowLeft`:`ArrowRight`,a=n?`ArrowRight`:`ArrowLeft`,o=q.widths?.[e.key]??(t.currentTarget.parentElement?.getBoundingClientRect().width||0);if(t.key===i)R(oe(q,e.key,o+r));else if(t.key===a)R(oe(q,e.key,o-r));else if(t.key===`Home`)R(oe(q,e.key,void 0));else return;t.preventDefault()},Vn=l(yt.value),Hn=K.some(e=>e.filter!==void 0),Un=K.length+ +!!w+ +!!T+ +!!E,Wn=(_t.value.trim()!==``||Vn>0)&&(O?!0:xe.length>0),Gn=O?O.totalItems??xe.length:It.value.length,Kn=C?Math.max(1,Math.ceil(Gn/B.value)):1,qn=Math.min(vt.value,Kn),Jn=C&&!M&&pn.length>0?Math.max(0,B.value-pn.length):0;Me(A,nt,u.map(e=>e.key).join(`,`));let Yn=`${ct}-title`,Xn=`${ct}-description`,Zn=Gn===0?0:(qn-1)*B.value+1,Qn=Gn===0?0:Zn+U.length-1,$n=!!Pe&&Pe.length>0&&F.length>0,er=n=>{let r=yt.value[n.key],c=N.filterColumn(n.header);switch(n.filter){case`text`:return b(`input`,{type:`search`,className:s.filterInput,"aria-label":c,value:r?.kind===`text`?r.value:``,onChange:e=>Wt(n.key,{kind:`text`,value:e.target.value})});case`range`:{let e=r?.kind===`range`?r.min:void 0,t=r?.kind===`range`?r.max:void 0,i=Qt(n.key),a=e=>e===``?void 0:Number(e);return x(`div`,{className:s.rangeInputs,children:[b(`input`,{type:`number`,className:s.filterInput,"aria-label":`${c}: ${N.min}`,placeholder:i?String(i.min):N.min,value:e??``,onChange:e=>{let r={kind:`range`},i=a(e.target.value);i!==void 0&&!Number.isNaN(i)&&(r.min=i),t!==void 0&&(r.max=t),Wt(n.key,r)}}),b(`input`,{type:`number`,className:s.filterInput,"aria-label":`${c}: ${N.max}`,placeholder:i?String(i.max):N.max,value:t??``,onChange:t=>{let r={kind:`range`};e!==void 0&&(r.min=e);let i=a(t.target.value);i!==void 0&&!Number.isNaN(i)&&(r.max=i),Wt(n.key,r)}})]})}case`select`:{let l=r?.kind===`select`?r.values:[],ee=Jt.value===n.key;return x(i,{placement:`bottom`,open:ee,onOpenChange:e=>{Jt.value=e?n.key:null},children:[b(o,{asChild:!0,children:b(e,{size:`sm`,variant:`secondary`,"aria-label":c,children:l.length>0?N.itemsSelected(l.length):N.all})}),b(a,{className:s.menu,children:ee&&Zt(n.key).map(e=>{let r=l.includes(e.value);return b(t,{label:`${e.value===``?`—`:e.value} (${e.count})`,checked:r,onChange:()=>Wt(n.key,{kind:`select`,values:r?l.filter(t=>t!==e.value):[...l,e.value]})},e.value)})})]})}default:return null}},tr=(e,i,a,o)=>{let c=H.has(e.id),l=sn.has(e.id);return x(ve,{children:[x(`tr`,{className:s.row,"data-parity":i%2==0?`even`:`odd`,"data-state":c?`selected`:void 0,"aria-rowindex":M&&!o?i+1:void 0,"data-pinned-row":o,style:o===`top`?{"--_pin-index":i}:void 0,children:[T&&b(`td`,{className:s.controlCell,...Z(0),...Q(a,0),children:b(`button`,{type:`button`,className:s.expandButton,"aria-expanded":l,"aria-label":N.expandRow,"data-state":l?`open`:`closed`,onClick:()=>on(e.id),...$,children:b(`span`,{className:s.chevron,"aria-hidden":`true`})})}),w&&b(`td`,{className:s.controlCell,...Z(+!!T),...Q(a,+!!T),children:b(t,{"aria-label":N.selectRow,checked:c,onChange:()=>an(e.id),...$})}),K.map((t,n)=>{let i=Ke!==void 0&&t.editable&&!t.render;return b(`td`,{"data-align":t.align??`start`,"data-sized":t.width!==void 0||q.widths?.[t.key]!==void 0||void 0,"data-editable":i||void 0,...Z(Y+n),...Q(a,Y+n),children:t.render?t.render(e.row):i?b(r,{value:String(S(e.row,t.key)??``),onValueChange:n=>Ke(e.row,t.key,n),"aria-label":N.editCell(t.header),...$}):String(S(e.row,t.key)??``)},t.key)}),E&&b(`td`,{className:s.controlCell,...Z(Y+K.length),...Q(a,Y+K.length),children:(()=>{let t=E(e.row);return t.length===0?null:b(n,{size:`sm`,ariaLabel:N.actions,items:t.map(e=>({id:e.id,label:e.label,...e.destructive!==void 0&&{destructive:e.destructive},...e.disabled!==void 0&&{disabled:e.disabled},...e.icon!==void 0&&{icon:e.icon}})),onSelect:n=>t.find(e=>e.id===n)?.onSelect(e.row),...$})})()})]}),T&&b(`tr`,{className:s.expansionRow,"data-state":l?`open`:`closed`,children:b(`td`,{colSpan:Un,children:b(`div`,{className:s.expansionGrid,"data-state":l?`open`:`closed`,children:b(`div`,{className:s.expansionInner,children:T(e.row)})})})})]},e.id)},nr=(e,t)=>{let{group:n}=e,r=Fn.current.get(e);r||(r=new Map,Fn.current.set(e,r));let i=r,a,o=t=>t.aggregate===void 0?null:(i.has(t.key)||(a??=e.leaves.map(e=>e.row),i.set(t.key,Te(t,a))),i.get(t.key));return x(`tr`,{className:s.groupRow,"data-depth":n.depth,"data-state":n.collapsed?`closed`:`open`,"aria-rowindex":M?t+1:void 0,children:[T&&b(`td`,{className:s.controlCell,...Z(0)}),w&&b(`td`,{className:s.controlCell,...Z(+!!T)}),K.map((e,r)=>b(`td`,{"data-align":r===0?`start`:e.align??`start`,...Z(Y+r),...Q(r===0?t:void 0,Y+r),children:r===0?x(`button`,{type:`button`,className:s.groupToggle,"aria-expanded":!n.collapsed,"data-state":n.collapsed?`closed`:`open`,style:{marginInlineStart:`${n.depth*1.25}rem`},onClick:()=>Pn(n.key),...$,children:[b(`span`,{className:s.chevron,"aria-hidden":`true`}),b(`span`,{children:String(n.value??``)||`—`}),x(`span`,{className:s.groupCount,children:[`(`,n.count,`)`]})]}):o(e)},e.key)),E&&b(`td`,{className:s.controlCell,...Z(Y+K.length)})]},e.id)};return x(`div`,{ref:z,className:be(s.root,it),"data-density":Qe,"data-resized":bn||void 0,"data-zebra":$e||void 0,"data-sticky-header":et||void 0,"data-paginated":C?!0:void 0,"data-fixed-layout":K.every(e=>e.width!==void 0)||void 0,children:[b(`span`,{"aria-live":`polite`,className:s.srOnly,children:F.length>0?N.itemsSelected(F.length):``}),(A!==void 0||rt!==void 0||Ne||ze!==void 0||_n||Ze!==!1||Vn>0)&&x(`div`,{className:s.toolbar,children:[(A!==void 0||rt!==void 0)&&x(`div`,{className:s.heading,children:[A!==void 0&&b(`div`,{id:Yn,className:s.title,children:A}),rt!==void 0&&b(`div`,{id:Xn,className:s.description,children:rt})]}),x(`div`,{className:s.toolbarActions,children:[Ne&&b(`input`,{type:`search`,className:s.search,"aria-label":N.search,placeholder:N.search,value:_t.value,onChange:e=>{f(()=>{_t.value=e.target.value,I(1)})}}),Vn>0&&x(e,{size:`sm`,variant:`ghost`,onClick:Gt,children:[N.clearFilters,` (`,Vn,`)`]}),Ze!==!1&&b(e,{size:`sm`,variant:`secondary`,onClick:Nn,children:N.exportCsv}),ze,_n&&x(i,{placement:`bottom`,children:[b(o,{asChild:!0,children:b(e,{size:`sm`,variant:`secondary`,children:N.columns})}),b(a,{className:s.menu,children:u.map(e=>{let n=!gn.has(e.key);return b(t,{label:e.header,checked:n,disabled:n&&K.length===1,onChange:()=>Kt(e.key)},e.key)})})]})]})]}),$n&&x(`div`,{className:s.batchBar,children:[b(`span`,{className:s.batchCount,children:N.itemsSelected(F.length)}),b(`div`,{className:s.batchActions,children:Pe.map((t,n)=>b(e,{size:`sm`,variant:`secondary`,onClick:()=>t.onClick(F),children:t.label},t.id??`${n}-${t.label}`))})]}),b(`div`,{ref:V,className:be(s.scroller,M&&s.scrollerVirtualized),children:x(`table`,{className:s.table,"aria-labelledby":A===void 0?void 0:Yn,"aria-label":A===void 0?nt:void 0,"aria-describedby":rt===void 0?void 0:Xn,"aria-busy":k||void 0,role:Tt?`grid`:void 0,"aria-rowcount":M?U.length:void 0,onKeyDown:Tt?Mn:nn,children:[x(`colgroup`,{children:[T&&b(`col`,{className:s.controlCol}),w&&b(`col`,{className:s.controlCol}),K.map(e=>{let t=q.widths?.[e.key],n=t===void 0?e.width:`${t}px`;return b(`col`,{style:n!==void 0||e.minWidth!==void 0?{...n===void 0?{}:{width:n},...e.minWidth===void 0?{}:{minWidth:e.minWidth}}:void 0},e.key)}),E&&b(`col`,{className:s.controlCol})]}),x(`thead`,{children:[Xe&&x(`tr`,{"data-group-header":!0,children:[Y>0&&b(`th`,{colSpan:Y,className:s.controlCell}),de(K.map(e=>e.key),Xe).map((e,t)=>b(`th`,{scope:`colgroup`,colSpan:e.span,className:s.groupHeader,children:e.header},t)),E&&b(`th`,{className:s.controlCell})]}),x(`tr`,{children:[T&&b(`th`,{scope:`col`,className:s.controlCell,...Z(0),...Q(-1,0),children:b(`span`,{className:s.srOnly,children:N.expandRow})}),w&&b(`th`,{scope:`col`,className:s.controlCell,...Z(+!!T),...Q(-1,+!!T),children:w.mode===`multi`?b(t,{"aria-label":N.selectAll,checked:ln,indeterminate:un&&!ln,onChange:hn,...$}):b(`span`,{className:s.srOnly,children:N.selectRow})}),K.map((e,t)=>{let r=tn(e.key),i=r?.direction,a=i===`asc`?`ascending`:i===`desc`?`descending`:`none`,o=r!==void 0&&(P.value?.thenBy?.length??0)>0,c=q.widths?.[e.key];return x(`th`,{scope:`col`,className:s.headerCell,"data-align":e.align??`start`,"data-sized":e.width!==void 0||c!==void 0||void 0,"aria-sort":e.sortable?a:void 0,...Z(Y+t),...Q(-1,Y+t),children:[x(`span`,{className:s.headerInner,children:[e.sortable?x(`button`,{type:`button`,className:s.sortButton,"data-state":a,onClick:t=>en(e.key,t.shiftKey),...$,children:[e.header,o&&b(`sup`,{className:s.sortIndex,"aria-hidden":`true`,children:r.index+1})]}):e.header,vn&&b(n,{size:`sm`,ariaLabel:N.columnMenu(e.header),items:zn(e),onSelect:t=>qt(e,t),...$})]}),yn&&b(`span`,{role:`separator`,"aria-orientation":`vertical`,"aria-label":N.resizeColumn(e.header),"aria-valuenow":c,tabIndex:Tt?-1:0,className:s.resizeHandle,"data-state":Ct.value?.key===e.key?`resizing`:void 0,onKeyDown:t=>Bn(e,t),onDoubleClick:()=>R(oe(q,e.key,void 0)),onPointerDown:t=>{t.preventDefault();let n=t.currentTarget.parentElement;Ct.value={key:e.key,startX:t.clientX,startWidth:n?n.getBoundingClientRect().width:0}}})]},e.key)}),E&&b(`th`,{scope:`col`,className:s.controlCell,...Z(Y+K.length),...Q(-1,Y+K.length),children:b(`span`,{className:s.srOnly,children:N.actions})})]}),Hn&&x(`tr`,{className:s.filterRow,children:[T&&b(`th`,{...Z(0)}),w&&b(`th`,{...Z(+!!T)}),K.map((e,t)=>b(`th`,{"data-align":e.align??`start`,...Z(Y+t),children:e.filter!==void 0&&er(e)},e.key)),E&&b(`th`,{...Z(Y+K.length)})]})]}),x(`tbody`,{children:[k&&Array.from({length:5},(e,t)=>b(`tr`,{className:s.row,children:Array.from({length:Un},(e,t)=>b(`td`,{children:b(`span`,{className:s.shimmer,"aria-hidden":`true`})},t))},t)),!k&&Ln.map((e,t)=>tr(e,t,void 0,`top`)),!k&&U.length===0&&b(`tr`,{"data-empty-row":!0,children:b(`td`,{colSpan:Un,className:s.emptyCell,children:Wn?Re??N.noResults:tt??N.empty})}),!k&&G&&G.topPad>0&&b(`tr`,{"aria-hidden":`true`,style:{height:G.topPad}}),!k&&pn.map((e,t)=>{let n=M?mn+t:t;return e.group?nr(e,n):tr(e,n,n)}),!k&&G&&G.bottomPad>0&&b(`tr`,{"aria-hidden":`true`,style:{height:G.bottomPad}}),Jn>0&&b(`tr`,{"aria-hidden":`true`,"data-filler-row":!0,children:b(`td`,{colSpan:Un,style:{blockSize:`calc(var(--_row-height) * ${Jn})`,padding:0}})}),!k&&Rn.map((e,t)=>tr(e,t,void 0,`bottom`))]}),Je&&b(`tfoot`,{className:s.totals,children:x(`tr`,{"data-totals-row":!0,children:[T&&b(`td`,{className:s.controlCell,...Z(0)}),w&&b(`td`,{className:s.controlCell,...Z(+!!T)}),K.map((e,t)=>x(`td`,{"data-align":e.align??`start`,...Z(Y+t),children:[t===0&&b(`span`,{className:e.aggregate===void 0?void 0:s.srOnly,children:N.totals}),Vt.value.get(e.key)]},e.key)),E&&b(`td`,{className:s.controlCell,...Z(Y+K.length)})]})})]})}),C&&x(`div`,{className:s.footer,children:[C.pageSizeOptions&&x(`label`,{className:s.pageSize,children:[b(`span`,{children:`Rows per page`}),b(`select`,{value:B.value,onChange:e=>{f(()=>{B.value=Number(e.target.value),I(1)})},children:C.pageSizeOptions.map(e=>b(`option`,{value:e,children:e},e))})]}),x(`span`,{className:s.range,children:[Zn,`–`,Qn,` of `,Gn]}),x(`div`,{className:s.pageButtons,children:[b(`button`,{type:`button`,className:s.pageButton,"aria-label":N.previousPage,disabled:qn<=1,onClick:()=>I(qn-1),children:b(`span`,{"aria-hidden":`true`,children:`‹`})}),b(`button`,{type:`button`,className:s.pageButton,"aria-label":N.nextPage,disabled:qn>=Kn,onClick:()=>I(qn+1),children:b(`span`,{"aria-hidden":`true`,children:`›`})})]})]})]})}export{Ne as DataTable};
1
+ "use client";import{Button as e}from"../button/button.js";import{Checkbox as t}from"../checkbox/checkbox.js";import{OverflowMenu as n}from"../overflow-menu/overflow-menu.js";import{Editable as r}from"../editable/editable.js";import{Popover as i,PopoverContent as a,PopoverTrigger as o}from"../popover/popover.js";import s from"./data-table.module.js";import{applyColumnFilters as c,countActiveFilters as l,facetValues as ee,isFilterActive as te,numericExtent as ne}from"./column-filter.js";import{displayColumns as re,moveColumn as ie,pinColumn as ae,resizeColumn as u,stickyOffsets as oe,toggleColumnHidden as se}from"./column-layout.js";import{moveGridFocus as ce}from"./grid-keys.js";import{aggregate as d,groupItems as le,headerSpans as ue}from"./row-group.js";import{createRowSearch as de}from"./row-search.js";import{downloadCsv as fe,toCsv as pe}from"./to-csv.js";import{sortRowsBy as me}from"./row-sort.js";import{computeWindow as he,scrollTopForRow as ge}from"./virtual-window.js";import{Fragment as _e,useId as ve,useRef as f}from"react";import{batch as ye,cn as be,persistedSignal as xe,useComputed as p,useControllableSignal as m,useSignal as h,useSignalEffect as g,useSignals as Se}from"@cascivo/core";import{builtin as _,formatNumber as v,t as y}from"@cascivo/i18n";import{jsx as b,jsxs as x}from"react/jsx-runtime";import{flushSync as Ce}from"react-dom";var we=``;function aggregateCell(e,t){let n=e.aggregate;if(n===void 0)return null;if(typeof n==`function`)return n(t);let r=d(t.map(t=>cellValue(t,e.key)),n);return r===void 0?null:n===`count`?v(r):v(r,{maximumFractionDigits:2})}var Te=new Map;function persistedTableState(e){let t=Te.get(e);return t||(t=xe(`cascivo.data-table.${e}`,{columnState:{}}),Te.set(e,t)),t}var Ee=new Set;function isDev(){return globalThis.process?.env?.NODE_ENV!==`production`}var De=new Set;function warnIfOverflowing(e,t,n){if(!isDev())return;let r=e.scrollWidth-e.clientWidth;if(r<=1)return;let i=`${n}:${e.clientWidth}`;De.has(i)||(De.add(i),console.warn(`cascivo DataTable: the table overflows its container (scrollWidth ${e.scrollWidth}px > clientWidth ${e.clientWidth}px, by ${r}px), so the last column is cut off. `+(t.length>0?`Drop a \`width\` from one of the sized columns (${t.join(`, `)}), or lower the \`minWidth\` on the free-form one.`:"Lower the `minWidth` on the widest column.")))}function warnIfUnnamed(e,t,n){isDev()&&(e!==void 0||t!==void 0||Ee.has(n)||(Ee.add(n),console.warn(`cascivo DataTable: this table has no accessible name (columns: ${n}). Pass \`title\` for a visible caption, or \`ariaLabel\` for a name only screen readers hear.`)))}function cellValue(e,t){return e[t]}function DataTable({columns:d,rows:xe,getRowId:v,sort:Te,defaultSort:Ee,sortMode:De=`client`,onSortChange:Oe,searchable:ke=!1,pagination:S,selection:C,batchActions:Ae,renderExpandedRow:w,filters:je,defaultFilters:Me,onFiltersChange:Ne,noResultsState:Pe,toolbar:Fe,rowActions:T,columnState:Ie,defaultColumnState:Le,onColumnStateChange:Re,columnSettings:E,server:D,multiSort:ze=!1,stateKey:Be,keyboardNavigation:Ve=`row`,onCellEdit:He,groupBy:Ue,totals:We=!1,pinnedRows:Ge,columnGroups:Ke,exportable:qe=!1,density:Je=`normal`,zebra:Ye=!1,stickyHeader:Xe=!1,loading:O=!1,emptyState:Ze,title:k,ariaLabel:Qe,description:A,labels:j,className:$e,virtualized:M=!1,rowHeight:et,windowSize:tt,overscan:nt=3}){Se();let rt=ve(),N={search:j?.search??y(_.dataTable.search),empty:j?.empty??y(_.dataTable.empty),selectAll:j?.selectAll??y(_.dataTable.selectAll),selectRow:j?.selectRow??y(_.dataTable.selectRow),itemsSelected:e=>j?.itemsSelected?.(e)??y(_.dataTable.itemsSelected,{count:e}),expandRow:j?.expandRow??y(_.dataTable.expandRow),previousPage:j?.previousPage??y(_.dataTable.previousPage),nextPage:j?.nextPage??y(_.dataTable.nextPage),columns:j?.columns??y(_.dataTable.columns),actions:j?.actions??y(_.dataTable.actions),noResults:j?.noResults??y(_.dataTable.noResults),clearFilters:j?.clearFilters??y(_.dataTable.clearFilters),filterColumn:e=>j?.filterColumn?.(e)??y(_.dataTable.filterColumn,{column:e}),min:j?.min??y(_.dataTable.min),max:j?.max??y(_.dataTable.max),all:j?.all??y(_.dataTable.all),columnMenu:e=>j?.columnMenu?.(e)??y(_.dataTable.columnMenu,{column:e}),sortAscending:j?.sortAscending??y(_.dataTable.sortAscending),sortDescending:j?.sortDescending??y(_.dataTable.sortDescending),clearSort:j?.clearSort??y(_.dataTable.clearSort),moveLeft:j?.moveLeft??y(_.dataTable.moveLeft),moveRight:j?.moveRight??y(_.dataTable.moveRight),pinStart:j?.pinStart??y(_.dataTable.pinStart),pinEnd:j?.pinEnd??y(_.dataTable.pinEnd),unpin:j?.unpin??y(_.dataTable.unpin),hideColumn:j?.hideColumn??y(_.dataTable.hideColumn),resizeColumn:e=>j?.resizeColumn?.(e)??y(_.dataTable.resizeColumn,{column:e}),editCell:e=>j?.editCell?.(e)??y(_.dataTable.editCell,{column:e}),totals:j?.totals??y(_.dataTable.totals),exportCsv:j?.exportCsv??y(_.dataTable.exportCsv)},[it]=m({value:xe}),[P]=m({value:d}),at=Be===void 0?void 0:persistedTableState(Be),[F,ot]=m({value:Te,defaultValue:at?.value.sort??Ee}),[st]=m({value:(typeof Ue==`string`?[Ue]:Ue??[]).join(we)}),ct=h(new Set),lt=h([]),I=C?.selected??lt.value,setSelected=e=>{C?.selected===void 0&&(lt.value=e),C?.onChange?.(e)},ut=h(``),[dt,L]=m({value:S?.page,defaultValue:1,onChange:S?.onPageChange}),[ft,pt]=m({value:je,defaultValue:Me??{},onChange:Ne}),[R,z]=m({value:Ie,defaultValue:at?.value.columnState??Le??{},onChange:Re});g(()=>{let e={columnState:R.value};F.value&&(e.sort=F.value),at&&(at.value=e)});let mt=p(()=>re(P.value,R.value)),B=f(null),ht=h([]);g(()=>{let e=R.value.pinned;if(!e||Object.keys(e).length===0)return;let t=H.current;if(!t||typeof ResizeObserver>`u`)return;let measure=()=>{let e=t.querySelector(`thead tr:not([data-group-header])`);e&&(ht.value=Array.from(e.children,e=>e.getBoundingClientRect().width))};measure();let n=new ResizeObserver(measure);n.observe(t);let r=t.querySelector(`table`);return r&&n.observe(r),()=>n.disconnect()});let gt=h(null);g(()=>{let e=gt.value;if(!e)return;let t=B.current?getComputedStyle(B.current).direction===`rtl`:!1,onMove=n=>{let r=(n.clientX-e.startX)*(t?-1:1);z(u(R.value,e.key,e.startWidth+r))},onUp=()=>{gt.value=null};return window.addEventListener(`pointermove`,onMove),window.addEventListener(`pointerup`,onUp),()=>{window.removeEventListener(`pointermove`,onMove),window.removeEventListener(`pointerup`,onUp)}});let V=h(S?.pageSize??0),_t=h(new Set),vt=Ve===`grid`,yt=h({row:-1,col:0}),bt=f(!1),H=f(null),xt=h(0),St=h(0),Ct=h(0);g(()=>{let e=H.current;if(!e||typeof ResizeObserver>`u`)return;let t=d.filter(e=>e.width!==void 0).map(e=>e.key),n=d.map(e=>e.key).join(`,`),r=0,i=new ResizeObserver(()=>{cancelAnimationFrame(r),r=requestAnimationFrame(()=>{warnIfOverflowing(e,t,n);let r=e.querySelector(`thead tr[data-group-header]`);e.style.setProperty(`--_group-h`,`${r?r.getBoundingClientRect().height:0}px`);let i=e.querySelector(`thead tr:not([data-group-header])`);i&&e.style.setProperty(`--_head-h`,`${i.getBoundingClientRect().height}px`);let a=e.querySelector(`thead`);a&&e.style.setProperty(`--_thead-h`,`${a.getBoundingClientRect().height}px`)})});return i.observe(e),()=>{cancelAnimationFrame(r),i.disconnect()}}),g(()=>{if(!M)return;let e=H.current;if(!e)return;let onScroll=()=>{Ce(()=>{xt.value=e.scrollTop})};return e.addEventListener(`scroll`,onScroll,{passive:!0}),()=>e.removeEventListener(`scroll`,onScroll)}),g(()=>{if(!M)return;let e=H.current;if(!e||typeof ResizeObserver>`u`)return;let measure=()=>{St.value=e.clientHeight;let t=e.querySelector(`tbody tr[aria-rowindex]`)?.getBoundingClientRect().height??0;t>0&&(Ct.value=t)};measure();let t=new ResizeObserver(measure);t.observe(e);let n=e.querySelector(`table`);return n&&t.observe(n),()=>t.disconnect()});let wt=p(()=>(mt.value,it.value.map((e,t)=>({row:e,id:v?v(e):String(t)})))),Tt=p(()=>{let e=F.value;return!e||De===`server`||D?wt.value:me(wt.value,[e,...e.thenBy??[]].map(e=>({keyOf:t=>cellValue(t.row,e.key),direction:e.direction})))}),Et=p(()=>D?Tt.value:c(Tt.value,ft.value,(e,t)=>cellValue(e.row,t))),Dt=p(()=>{let e=mt.value;return de(t=>{if(t.haystack===void 0){let n=``;for(let r of e)n+=String(cellValue(t.row,r.key)??``)+`\0`;t.haystack=n.toLowerCase()}return t.haystack})});g(()=>{if(!ke)return;let e=wt.value,t=Dt.value,n=typeof requestIdleCallback==`function`,r,i=0,step=()=>{i=t.prime(e,i,2e4),i<e.length&&schedule()},schedule=()=>{r=n?requestIdleCallback(step,{timeout:500}):setTimeout(step,16)};return schedule(),()=>{n?cancelIdleCallback(r):clearTimeout(r)}});let Ot=p(()=>{if(D)return Tt.value;let e=ut.value.trim().toLowerCase();return e?Dt.value.filter(Et.value,e):Et.value}),kt=p(()=>{let e=st.value===``?[]:st.value.split(we);return e.length===0?Ot.value:le(Ot.value,e,(e,t)=>cellValue(e.row,t),ct.value)}),At=p(()=>S?Math.max(1,Math.ceil(kt.value.length/V.value)):1),jt=p(()=>Math.min(dt.value,At.value)),Mt=p(()=>{if(!S||D)return kt.value;let e=(jt.value-1)*V.value;return kt.value.slice(e,e+V.value)}),Nt=p(()=>st.value===``?Mt.value:Mt.value.filter(e=>e.group===void 0)),Pt=p(()=>{let e=new Map,t=P.value.filter(e=>e.aggregate!==void 0);if(t.length===0)return e;let n=Ot.value.map(e=>e.row);for(let r of t)e.set(r.key,aggregateCell(r,n));return e}),Ft=f(D);Ft.current=D;let It=f(!1);g(()=>{let e={sort:F.value,search:ut.value.trim(),filters:ft.value,page:dt.value,pageSize:V.value};if(!It.current){It.current=!0;return}Ft.current?.onQueryChange(e)});let setColumnFilter=(e,t)=>{let n={...ft.value};t&&te(t)?n[e]=t:delete n[e],ye(()=>{pt(n),L(1)})},clearFilters=()=>ye(()=>{pt({}),L(1)}),toggleColumn=e=>z(se(P.value,R.value,e)),onColumnMenu=(e,t)=>{let n=R.value,r=B.current?getComputedStyle(B.current).direction===`rtl`:!1;switch(t){case`sort-asc`:return applySort({key:e.key,direction:`asc`});case`sort-desc`:return applySort({key:e.key,direction:`desc`});case`sort-clear`:return applySort(void 0);case`move-left`:return z(ie(P.value,n,e.key,r?1:-1));case`move-right`:return z(ie(P.value,n,e.key,r?-1:1));case`pin-start`:return z(ae(n,e.key,`start`));case`pin-end`:return z(ae(n,e.key,`end`));case`unpin`:return z(ae(n,e.key,null));case`hide`:return toggleColumn(e.key);default:return}},Lt=h(null),Rt=f(null),facetCache=()=>{let e=wt.value;return Rt.current?.entries!==e&&(Rt.current={entries:e,facets:new Map,extents:new Map}),Rt.current},facetsOf=e=>{let t=facetCache(),n=t.facets.get(e);return n||(n=ee(t.entries,t=>cellValue(t.row,e)),t.facets.set(e,n)),n},extentOf=e=>{let t=facetCache();return t.extents.has(e)||t.extents.set(e,ne(t.entries,t=>cellValue(t.row,e))),t.extents.get(e)},applySort=e=>{ye(()=>{ot(e),L(1)}),Oe?.(e)},cycleSort=(e,t=!1)=>{let n=F.value;if(t&&ze&&n&&n.key!==e){let t=n.thenBy??[],r=t.findIndex(t=>t.key===e),i=r===-1?[...t,{key:e,direction:`asc`}]:t.map((t,n)=>n===r?{key:e,direction:t.direction===`asc`?`desc`:`asc`}:t);return applySort({...n,thenBy:i})}let r;r=!n||n.key!==e?{key:e,direction:`asc`}:n.direction===`asc`?{key:e,direction:`desc`}:void 0,applySort(r)},sortLevelOf=e=>{let t=F.value;if(!t)return;if(t.key===e)return{index:0,direction:t.direction};let n=(t.thenBy??[]).findIndex(t=>t.key===e);return n===-1?void 0:{index:n+1,direction:(t.thenBy??[])[n].direction}},onTableKeyDown=e=>{if(![`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`].includes(e.key))return;let t=e.currentTarget,n=Array.from(t.querySelectorAll(`th button, td button, td input[type="checkbox"]`)),r=n.indexOf(document.activeElement);if(r===-1)return;e.preventDefault();let row=e=>e.closest(`tr`),i;if(e.key===`ArrowRight`||e.key===`ArrowLeft`){let t=n[r+(e.key===`ArrowRight`?1:-1)];t&&row(t)===row(n[r])&&(i=t)}else{let t=e.key===`ArrowDown`?1:-1,a=n[r];for(let e=r+t;e>=0&&e<n.length;e+=t)if(row(n[e])!==row(a)){i=n[e];break}}i?.focus()},zt=f(null);zt.current?.ids!==I&&(zt.current={ids:I,set:new Set(I)});let U=zt.current.set,toggleRow=e=>{let t=I;C?.mode===`single`?setSelected(U.has(e)?[]:[e]):setSelected(U.has(e)?t.filter(t=>t!==e):[...t,e])},toggleExpanded=e=>{let t=new Set(_t.value);t.has(e)?t.delete(e):t.add(e),_t.value=t},W=Mt.value,G=Nt.value,Bt=_t.value,Vt=f(null);(Vt.current?.page!==G||Vt.current.set!==U)&&(Vt.current={page:G,set:U,all:G.length>0&&G.every(e=>U.has(e.id)),some:G.some(e=>U.has(e.id))});let Ht=Vt.current.all,Ut=Vt.current.some,Wt=et??(Ct.value>0?Ct.value:40),Gt=tt===void 0?St.value>0?St.value:20*Wt:tt*Wt,K=M?he({scrollTop:xt.value,viewportHeight:Gt,rowHeight:Wt,count:W.length,overscan:nt}):void 0,Kt=K?W.slice(K.start,K.end):W,qt=K?.start??0,toggleAll=()=>{if(Ht){let e=new Set(G.map(e=>e.id));setSelected(I.filter(t=>!e.has(t)))}else{let e=new Set(I);for(let t of G)e.add(t.id);setSelected([...e])}},q=mt.value,J=R.value,Jt=new Set(J.hidden??[]),Yt=E?.visibility===!0,Xt=E!==void 0&&(E.reorderable===!0||E.pinnable===!0||E.visibility===!0),Zt=E?.resizable===!0,Qt=Object.keys(J.widths??{}).length>0,Y=J.pinned??{},X=+!!w+ +!!C,$t=q.some(e=>Y[e.key]===`start`),en=q.some(e=>Y[e.key]===`end`),Z=[...Array.from({length:X},()=>$t?`start`:void 0),...q.map(e=>Y[e.key]),...T?[en?`end`:void 0]:[]],tn=ht.value,nn=tn.length===Z.length?oe(tn,Z):Z.map(()=>void 0),rn=Z.lastIndexOf(`start`),an=Z.indexOf(`end`),pinAttrs=e=>{let t=Z[e];if(!t)return{};let n=nn[e];return{"data-pinned":t,"data-pinned-edge":e===rn||e===an?!0:void 0,style:n===void 0?void 0:t===`start`?{insetInlineStart:n}:{insetInlineEnd:n}}},on=Math.min(yt.value.row,W.length-1),sn={row:on,col:W[on]?.group?X:Math.min(yt.value.col,Z.length-1)},focusCellRef=e=>{e&&bt.current&&(bt.current=!1,e.focus())},gridAttrs=(e,t)=>{if(!vt||e===void 0)return{};let n=sn.row===e&&sn.col===t;return{tabIndex:n?0:-1,"data-cell":`${e},${t}`,ref:n?focusCellRef:void 0,onFocus:()=>{n||(yt.value={row:e,col:t})}}},Q=vt?{tabIndex:-1}:{},cn=Math.max(1,Math.floor(Gt/Wt)),moveFocusTo=e=>{if(bt.current=!0,yt.value=e,K&&e.row>=0&&(e.row<K.start||e.row>=K.end)){let t=H.current;t&&(t.scrollTop=ge(e.row,{viewportHeight:Gt,rowHeight:Wt,count:W.length,overscan:nt}))}},onGridKeyDown=e=>{let t=e.target,n=t.closest(`[data-cell]`);if(!n)return;if(t!==n){e.key===`Escape`&&(e.preventDefault(),n.focus());return}if(e.key===`Enter`||e.key===`F2`){let t=n.querySelector(`button, input, select, a[href], [tabindex]`);if(!t)return;e.preventDefault(),t.focus(),n.hasAttribute(`data-editable`)&&t.click();return}let[r=-1,i=0]=(n.dataset.cell??``).split(`,`).map(Number),a=ce({row:r,col:i},e.key,{rowCount:W.length,colCount:Z.length,pageRows:cn},e.ctrlKey||e.metaKey);a&&(e.preventDefault(),moveFocusTo(W[a.row]?.group?{row:a.row,col:X}:a))},exportCsv=()=>{fe(pe(Ot.value.map(e=>e.row),q.map(e=>({key:e.key,header:e.header})),cellValue),(typeof qe==`object`?qe.filename:void 0)??k??`export`)},toggleGroup=e=>{let t=new Set(ct.value);t.has(e)?t.delete(e):t.add(e),ct.value=t},ln=f(new WeakMap),toEntries=(e,t)=>(e??[]).map((e,n)=>({row:e,id:v?v(e):`${t}-${n}`})),un=toEntries(Ge?.top,`pinned-top`),dn=toEntries(Ge?.bottom,`pinned-bottom`),columnMenuItems=e=>{let t=[];if(e.sortable&&(t.push({id:`sort-asc`,label:N.sortAscending},{id:`sort-desc`,label:N.sortDescending}),F.value?.key===e.key&&t.push({id:`sort-clear`,label:N.clearSort})),E?.reorderable){let n=q.filter(t=>Y[t.key]===Y[e.key]),r=n.indexOf(e);t.push({id:`move-left`,label:N.moveLeft,disabled:r===0},{id:`move-right`,label:N.moveRight,disabled:r===n.length-1})}if(E?.pinnable){let n=Y[e.key];n!==`start`&&t.push({id:`pin-start`,label:N.pinStart}),n!==`end`&&t.push({id:`pin-end`,label:N.pinEnd}),n&&t.push({id:`unpin`,label:N.unpin})}return E?.visibility&&t.push({id:`hide`,label:N.hideColumn,disabled:q.length===1}),t},onResizeKeyDown=(e,t)=>{let n=B.current?getComputedStyle(B.current).direction===`rtl`:!1,r=t.shiftKey?64:16,i=n?`ArrowLeft`:`ArrowRight`,a=n?`ArrowRight`:`ArrowLeft`,o=J.widths?.[e.key]??(t.currentTarget.parentElement?.getBoundingClientRect().width||0);if(t.key===i)z(u(J,e.key,o+r));else if(t.key===a)z(u(J,e.key,o-r));else if(t.key===`Home`)z(u(J,e.key,void 0));else return;t.preventDefault()},fn=l(ft.value),pn=q.some(e=>e.filter!==void 0),mn=q.length+ +!!C+ +!!w+ +!!T,hn=(ut.value.trim()!==``||fn>0)&&(D?!0:xe.length>0),gn=D?D.totalItems??xe.length:kt.value.length,_n=S?Math.max(1,Math.ceil(gn/V.value)):1,$=Math.min(dt.value,_n),vn=S&&!M&&Kt.length>0?Math.max(0,V.value-Kt.length):0;warnIfUnnamed(k,Qe,d.map(e=>e.key).join(`,`));let yn=`${rt}-title`,bn=`${rt}-description`,xn=gn===0?0:($-1)*V.value+1,Sn=gn===0?0:xn+W.length-1,Cn=!!Ae&&Ae.length>0&&I.length>0,renderFilter=n=>{let r=ft.value[n.key],c=N.filterColumn(n.header);switch(n.filter){case`text`:return b(`input`,{type:`search`,className:s.filterInput,"aria-label":c,value:r?.kind===`text`?r.value:``,onChange:e=>setColumnFilter(n.key,{kind:`text`,value:e.target.value})});case`range`:{let e=r?.kind===`range`?r.min:void 0,t=r?.kind===`range`?r.max:void 0,i=extentOf(n.key),parse=e=>e===``?void 0:Number(e);return x(`div`,{className:s.rangeInputs,children:[b(`input`,{type:`number`,className:s.filterInput,"aria-label":`${c}: ${N.min}`,placeholder:i?String(i.min):N.min,value:e??``,onChange:e=>{let r={kind:`range`},i=parse(e.target.value);i!==void 0&&!Number.isNaN(i)&&(r.min=i),t!==void 0&&(r.max=t),setColumnFilter(n.key,r)}}),b(`input`,{type:`number`,className:s.filterInput,"aria-label":`${c}: ${N.max}`,placeholder:i?String(i.max):N.max,value:t??``,onChange:t=>{let r={kind:`range`};e!==void 0&&(r.min=e);let i=parse(t.target.value);i!==void 0&&!Number.isNaN(i)&&(r.max=i),setColumnFilter(n.key,r)}})]})}case`select`:{let l=r?.kind===`select`?r.values:[],ee=Lt.value===n.key;return x(i,{placement:`bottom`,open:ee,onOpenChange:e=>{Lt.value=e?n.key:null},children:[b(o,{asChild:!0,children:b(e,{size:`sm`,variant:`secondary`,"aria-label":c,children:l.length>0?N.itemsSelected(l.length):N.all})}),b(a,{className:s.menu,children:ee&&facetsOf(n.key).map(e=>{let r=l.includes(e.value);return b(t,{label:`${e.value===``?`—`:e.value} (${e.count})`,checked:r,onChange:()=>setColumnFilter(n.key,{kind:`select`,values:r?l.filter(t=>t!==e.value):[...l,e.value]})},e.value)})})]})}default:return null}},renderRow=(e,i,a,o)=>{let c=U.has(e.id),l=Bt.has(e.id);return x(_e,{children:[x(`tr`,{className:s.row,"data-parity":i%2==0?`even`:`odd`,"data-state":c?`selected`:void 0,"aria-rowindex":M&&!o?i+1:void 0,"data-pinned-row":o,style:o===`top`?{"--_pin-index":i}:void 0,children:[w&&b(`td`,{className:s.controlCell,...pinAttrs(0),...gridAttrs(a,0),children:b(`button`,{type:`button`,className:s.expandButton,"aria-expanded":l,"aria-label":N.expandRow,"data-state":l?`open`:`closed`,onClick:()=>toggleExpanded(e.id),...Q,children:b(`span`,{className:s.chevron,"aria-hidden":`true`})})}),C&&b(`td`,{className:s.controlCell,...pinAttrs(+!!w),...gridAttrs(a,+!!w),children:b(t,{"aria-label":N.selectRow,checked:c,onChange:()=>toggleRow(e.id),...Q})}),q.map((t,n)=>{let i=He!==void 0&&t.editable&&!t.render;return b(`td`,{"data-align":t.align??`start`,"data-sized":t.width!==void 0||J.widths?.[t.key]!==void 0||void 0,"data-editable":i||void 0,...pinAttrs(X+n),...gridAttrs(a,X+n),children:t.render?t.render(e.row):i?b(r,{value:String(cellValue(e.row,t.key)??``),onValueChange:n=>He(e.row,t.key,n),"aria-label":N.editCell(t.header),...Q}):String(cellValue(e.row,t.key)??``)},t.key)}),T&&b(`td`,{className:s.controlCell,...pinAttrs(X+q.length),...gridAttrs(a,X+q.length),children:(()=>{let t=T(e.row);return t.length===0?null:b(n,{size:`sm`,ariaLabel:N.actions,items:t.map(e=>({id:e.id,label:e.label,...e.destructive!==void 0&&{destructive:e.destructive},...e.disabled!==void 0&&{disabled:e.disabled},...e.icon!==void 0&&{icon:e.icon}})),onSelect:n=>t.find(e=>e.id===n)?.onSelect(e.row),...Q})})()})]}),w&&b(`tr`,{className:s.expansionRow,"data-state":l?`open`:`closed`,children:b(`td`,{colSpan:mn,children:b(`div`,{className:s.expansionGrid,"data-state":l?`open`:`closed`,children:b(`div`,{className:s.expansionInner,children:w(e.row)})})})})]},e.id)},renderGroupRow=(e,t)=>{let{group:n}=e,r=ln.current.get(e);r||(r=new Map,ln.current.set(e,r));let i=r,a,cellFor=t=>t.aggregate===void 0?null:(i.has(t.key)||(a??=e.leaves.map(e=>e.row),i.set(t.key,aggregateCell(t,a))),i.get(t.key));return x(`tr`,{className:s.groupRow,"data-depth":n.depth,"data-state":n.collapsed?`closed`:`open`,"aria-rowindex":M?t+1:void 0,children:[w&&b(`td`,{className:s.controlCell,...pinAttrs(0)}),C&&b(`td`,{className:s.controlCell,...pinAttrs(+!!w)}),q.map((e,r)=>b(`td`,{"data-align":r===0?`start`:e.align??`start`,...pinAttrs(X+r),...gridAttrs(r===0?t:void 0,X+r),children:r===0?x(`button`,{type:`button`,className:s.groupToggle,"aria-expanded":!n.collapsed,"data-state":n.collapsed?`closed`:`open`,style:{marginInlineStart:`${n.depth*1.25}rem`},onClick:()=>toggleGroup(n.key),...Q,children:[b(`span`,{className:s.chevron,"aria-hidden":`true`}),b(`span`,{children:String(n.value??``)||`—`}),x(`span`,{className:s.groupCount,children:[`(`,n.count,`)`]})]}):cellFor(e)},e.key)),T&&b(`td`,{className:s.controlCell,...pinAttrs(X+q.length)})]},e.id)};return x(`div`,{ref:B,className:be(s.root,$e),"data-density":Je,"data-resized":Qt||void 0,"data-zebra":Ye||void 0,"data-sticky-header":Xe||void 0,"data-paginated":S?!0:void 0,"data-fixed-layout":q.every(e=>e.width!==void 0)||void 0,children:[b(`span`,{"aria-live":`polite`,className:s.srOnly,children:I.length>0?N.itemsSelected(I.length):``}),(k!==void 0||A!==void 0||ke||Fe!==void 0||Yt||qe!==!1||fn>0)&&x(`div`,{className:s.toolbar,children:[(k!==void 0||A!==void 0)&&x(`div`,{className:s.heading,children:[k!==void 0&&b(`div`,{id:yn,className:s.title,children:k}),A!==void 0&&b(`div`,{id:bn,className:s.description,children:A})]}),x(`div`,{className:s.toolbarActions,children:[ke&&b(`input`,{type:`search`,className:s.search,"aria-label":N.search,placeholder:N.search,value:ut.value,onChange:e=>{ye(()=>{ut.value=e.target.value,L(1)})}}),fn>0&&x(e,{size:`sm`,variant:`ghost`,onClick:clearFilters,children:[N.clearFilters,` (`,fn,`)`]}),qe!==!1&&b(e,{size:`sm`,variant:`secondary`,onClick:exportCsv,children:N.exportCsv}),Fe,Yt&&x(i,{placement:`bottom`,children:[b(o,{asChild:!0,children:b(e,{size:`sm`,variant:`secondary`,children:N.columns})}),b(a,{className:s.menu,children:d.map(e=>{let n=!Jt.has(e.key);return b(t,{label:e.header,checked:n,disabled:n&&q.length===1,onChange:()=>toggleColumn(e.key)},e.key)})})]})]})]}),Cn&&x(`div`,{className:s.batchBar,children:[b(`span`,{className:s.batchCount,children:N.itemsSelected(I.length)}),b(`div`,{className:s.batchActions,children:Ae.map((t,n)=>b(e,{size:`sm`,variant:`secondary`,onClick:()=>t.onClick(I),children:t.label},t.id??`${n}-${t.label}`))})]}),b(`div`,{ref:H,className:be(s.scroller,M&&s.scrollerVirtualized),children:x(`table`,{className:s.table,"aria-labelledby":k===void 0?void 0:yn,"aria-label":k===void 0?Qe:void 0,"aria-describedby":A===void 0?void 0:bn,"aria-busy":O||void 0,role:vt?`grid`:void 0,"aria-rowcount":M?W.length:void 0,onKeyDown:vt?onGridKeyDown:onTableKeyDown,children:[x(`colgroup`,{children:[w&&b(`col`,{className:s.controlCol}),C&&b(`col`,{className:s.controlCol}),q.map(e=>{let t=J.widths?.[e.key],n=t===void 0?e.width:`${t}px`;return b(`col`,{style:n!==void 0||e.minWidth!==void 0?{...n===void 0?{}:{width:n},...e.minWidth===void 0?{}:{minWidth:e.minWidth}}:void 0},e.key)}),T&&b(`col`,{className:s.controlCol})]}),x(`thead`,{children:[Ke&&x(`tr`,{"data-group-header":!0,children:[X>0&&b(`th`,{colSpan:X,className:s.controlCell}),ue(q.map(e=>e.key),Ke).map((e,t)=>b(`th`,{scope:`colgroup`,colSpan:e.span,className:s.groupHeader,children:e.header},t)),T&&b(`th`,{className:s.controlCell})]}),x(`tr`,{children:[w&&b(`th`,{scope:`col`,className:s.controlCell,...pinAttrs(0),...gridAttrs(-1,0),children:b(`span`,{className:s.srOnly,children:N.expandRow})}),C&&b(`th`,{scope:`col`,className:s.controlCell,...pinAttrs(+!!w),...gridAttrs(-1,+!!w),children:C.mode===`multi`?b(t,{"aria-label":N.selectAll,checked:Ht,indeterminate:Ut&&!Ht,onChange:toggleAll,...Q}):b(`span`,{className:s.srOnly,children:N.selectRow})}),q.map((e,t)=>{let r=sortLevelOf(e.key),i=r?.direction,a=i===`asc`?`ascending`:i===`desc`?`descending`:`none`,o=r!==void 0&&(F.value?.thenBy?.length??0)>0,c=J.widths?.[e.key];return x(`th`,{scope:`col`,className:s.headerCell,"data-align":e.align??`start`,"data-sized":e.width!==void 0||c!==void 0||void 0,"aria-sort":e.sortable?a:void 0,...pinAttrs(X+t),...gridAttrs(-1,X+t),children:[x(`span`,{className:s.headerInner,children:[e.sortable?x(`button`,{type:`button`,className:s.sortButton,"data-state":a,onClick:t=>cycleSort(e.key,t.shiftKey),...Q,children:[e.header,o&&b(`sup`,{className:s.sortIndex,"aria-hidden":`true`,children:r.index+1})]}):e.header,Xt&&b(n,{size:`sm`,ariaLabel:N.columnMenu(e.header),items:columnMenuItems(e),onSelect:t=>onColumnMenu(e,t),...Q})]}),Zt&&b(`span`,{role:`separator`,"aria-orientation":`vertical`,"aria-label":N.resizeColumn(e.header),"aria-valuenow":c,tabIndex:vt?-1:0,className:s.resizeHandle,"data-state":gt.value?.key===e.key?`resizing`:void 0,onKeyDown:t=>onResizeKeyDown(e,t),onDoubleClick:()=>z(u(J,e.key,void 0)),onPointerDown:t=>{t.preventDefault();let n=t.currentTarget.parentElement;gt.value={key:e.key,startX:t.clientX,startWidth:n?n.getBoundingClientRect().width:0}}})]},e.key)}),T&&b(`th`,{scope:`col`,className:s.controlCell,...pinAttrs(X+q.length),...gridAttrs(-1,X+q.length),children:b(`span`,{className:s.srOnly,children:N.actions})})]}),pn&&x(`tr`,{className:s.filterRow,children:[w&&b(`th`,{...pinAttrs(0)}),C&&b(`th`,{...pinAttrs(+!!w)}),q.map((e,t)=>b(`th`,{"data-align":e.align??`start`,...pinAttrs(X+t),children:e.filter!==void 0&&renderFilter(e)},e.key)),T&&b(`th`,{...pinAttrs(X+q.length)})]})]}),x(`tbody`,{children:[O&&Array.from({length:5},(e,t)=>b(`tr`,{className:s.row,children:Array.from({length:mn},(e,t)=>b(`td`,{children:b(`span`,{className:s.shimmer,"aria-hidden":`true`})},t))},t)),!O&&un.map((e,t)=>renderRow(e,t,void 0,`top`)),!O&&W.length===0&&b(`tr`,{"data-empty-row":!0,children:b(`td`,{colSpan:mn,className:s.emptyCell,children:hn?Pe??N.noResults:Ze??N.empty})}),!O&&K&&K.topPad>0&&b(`tr`,{"aria-hidden":`true`,style:{height:K.topPad}}),!O&&Kt.map((e,t)=>{let n=M?qt+t:t;return e.group?renderGroupRow(e,n):renderRow(e,n,n)}),!O&&K&&K.bottomPad>0&&b(`tr`,{"aria-hidden":`true`,style:{height:K.bottomPad}}),vn>0&&b(`tr`,{"aria-hidden":`true`,"data-filler-row":!0,children:b(`td`,{colSpan:mn,style:{blockSize:`calc(var(--_row-height) * ${vn})`,padding:0}})}),!O&&dn.map((e,t)=>renderRow(e,t,void 0,`bottom`))]}),We&&b(`tfoot`,{className:s.totals,children:x(`tr`,{"data-totals-row":!0,children:[w&&b(`td`,{className:s.controlCell,...pinAttrs(0)}),C&&b(`td`,{className:s.controlCell,...pinAttrs(+!!w)}),q.map((e,t)=>x(`td`,{"data-align":e.align??`start`,...pinAttrs(X+t),children:[t===0&&b(`span`,{className:e.aggregate===void 0?void 0:s.srOnly,children:N.totals}),Pt.value.get(e.key)]},e.key)),T&&b(`td`,{className:s.controlCell,...pinAttrs(X+q.length)})]})})]})}),S&&x(`div`,{className:s.footer,children:[S.pageSizeOptions&&x(`label`,{className:s.pageSize,children:[b(`span`,{children:`Rows per page`}),b(`select`,{value:V.value,onChange:e=>{ye(()=>{V.value=Number(e.target.value),L(1)})},children:S.pageSizeOptions.map(e=>b(`option`,{value:e,children:e},e))})]}),x(`span`,{className:s.range,children:[xn,`–`,Sn,` of `,gn]}),x(`div`,{className:s.pageButtons,children:[b(`button`,{type:`button`,className:s.pageButton,"aria-label":N.previousPage,disabled:$<=1,onClick:()=>L($-1),children:b(`span`,{"aria-hidden":`true`,children:`‹`})}),b(`button`,{type:`button`,className:s.pageButton,"aria-label":N.nextPage,disabled:$>=_n,onClick:()=>L($+1),children:b(`span`,{"aria-hidden":`true`,children:`›`})})]})]})]})}export{DataTable};
@@ -1 +1 @@
1
- function e(e,t,n,r=!1){let i=n.rowCount-1,a=n.colCount-1,o=e=>Math.max(-1,Math.min(i,e)),s=e=>Math.max(0,Math.min(a,e));switch(t){case`ArrowDown`:return{row:o(e.row+1),col:e.col};case`ArrowUp`:return{row:o(e.row-1),col:e.col};case`ArrowRight`:return{row:e.row,col:s(e.col+1)};case`ArrowLeft`:return{row:e.row,col:s(e.col-1)};case`Home`:return r?{row:o(0),col:0}:{row:e.row,col:0};case`End`:return r?{row:i,col:a}:{row:e.row,col:a};case`PageDown`:return{row:o(e.row+n.pageRows),col:e.col};case`PageUp`:return{row:o(e.row-n.pageRows),col:e.col};default:return}}export{e as moveGridFocus};
1
+ function moveGridFocus(e,t,n,r=!1){let i=n.rowCount-1,a=n.colCount-1,clampRow=e=>Math.max(-1,Math.min(i,e)),clampCol=e=>Math.max(0,Math.min(a,e));switch(t){case`ArrowDown`:return{row:clampRow(e.row+1),col:e.col};case`ArrowUp`:return{row:clampRow(e.row-1),col:e.col};case`ArrowRight`:return{row:e.row,col:clampCol(e.col+1)};case`ArrowLeft`:return{row:e.row,col:clampCol(e.col-1)};case`Home`:return r?{row:clampRow(0),col:0}:{row:e.row,col:0};case`End`:return r?{row:i,col:a}:{row:e.row,col:a};case`PageDown`:return{row:clampRow(e.row+n.pageRows),col:e.col};case`PageUp`:return{row:clampRow(e.row-n.pageRows),col:e.col};default:return}}export{moveGridFocus};
@@ -1 +1 @@
1
- var e=``;function t(t,n,r,i){let a=[],o=(t,s,c)=>{let l=n[s];if(l===void 0){for(let e of t)a.push(e);return}let u=new Map;for(let e of t){let t=r(e,l),n=String(t??``),i=u.get(n);i?i.rows.push(e):u.set(n,{value:t,rows:[e]})}for(let[t,n]of u){let r=`${c}${l}=${t}`,u=i.has(r);a.push({id:`group${e}${r}`,group:{key:r,column:l,value:n.value,depth:s,count:n.rows.length,collapsed:u},leaves:n.rows}),u||o(n.rows,s+1,`${r}${e}`)}};return o(t,0,``),a}function n(e,t){if(t===`count`)return e.length;let n=0,r=0,i=1/0,a=-1/0;for(let t of e){if(t==null||t===``)continue;let e=typeof t==`number`?t:Number(t);Number.isNaN(e)||(r++,n+=e,e<i&&(i=e),e>a&&(a=e))}if(r!==0)switch(t){case`sum`:return n;case`avg`:return n/r;case`min`:return i;default:return a}}function r(e,t){let n=new Map;for(let e of t)for(let t of e.columns)n.set(t,e.header);let r=[];for(let t of e){let e=n.get(t),i=r[r.length-1];i&&i.header===e?i.span++:r.push({header:e,span:1})}return r}export{n as aggregate,t as groupItems,r as headerSpans};
1
+ var e=``;function groupItems(t,n,r,i){let a=[],walk=(t,o,s)=>{let c=n[o];if(c===void 0){for(let e of t)a.push(e);return}let l=new Map;for(let e of t){let t=r(e,c),n=String(t??``),i=l.get(n);i?i.rows.push(e):l.set(n,{value:t,rows:[e]})}for(let[t,n]of l){let r=`${s}${c}=${t}`,l=i.has(r);a.push({id:`group${e}${r}`,group:{key:r,column:c,value:n.value,depth:o,count:n.rows.length,collapsed:l},leaves:n.rows}),l||walk(n.rows,o+1,`${r}${e}`)}};return walk(t,0,``),a}function aggregate(e,t){if(t===`count`)return e.length;let n=0,r=0,i=1/0,a=-1/0;for(let t of e){if(t==null||t===``)continue;let e=typeof t==`number`?t:Number(t);Number.isNaN(e)||(r++,n+=e,e<i&&(i=e),e>a&&(a=e))}if(r!==0)switch(t){case`sum`:return n;case`avg`:return n/r;case`min`:return i;default:return a}}function headerSpans(e,t){let n=new Map;for(let e of t)for(let t of e.columns)n.set(t,e.header);let r=[];for(let t of e){let e=n.get(t),i=r[r.length-1];i&&i.header===e?i.span++:r.push({header:e,span:1})}return r}export{aggregate,groupItems,headerSpans};
@@ -1 +1 @@
1
- function e(e){let t,n=``,r=[];return{filter(i,a){if(a===``)return t=i,n=``,r=i,i;let o=i===t;if(o&&a===n)return r;let s=o&&n!==``&&a.startsWith(n)?r:i,c=[];for(let t of s)e(t).includes(a)&&c.push(t);return t=i,n=a,r=c,c},prime(t,n,r){let i=Math.min(t.length,n+r);for(let r=n;r<i;r++)e(t[r]);return i}}}export{e as createRowSearch};
1
+ function createRowSearch(e){let t,n=``,r=[];return{filter(i,a){if(a===``)return t=i,n=``,r=i,i;let o=i===t;if(o&&a===n)return r;let s=o&&n!==``&&a.startsWith(n)?r:i,c=[];for(let t of s)e(t).includes(a)&&c.push(t);return t=i,n=a,r=c,c},prime(t,n,r){let i=Math.min(t.length,n+r);for(let r=n;r<i;r++)e(t[r]);return i}}}export{createRowSearch};
@@ -1 +1 @@
1
- function e(e,n){let r=e.length;if(r<2||n.length===0)return[...e];let i=Array.from({length:r},(e,t)=>t),a=()=>i.map(t=>e[t]),o=new Intl.Collator().compare,s=[],c=[];for(let l of n){let u=Array.from({length:r}),d=!0;for(let t=0;t<r;t++){let n=l.keyOf(e[t]);u[t]=n,typeof n!=`number`&&(d=!1)}let f=l.direction===`desc`?-1:1,p=new Float64Array(r);if(d)for(let e=0;e<r;e++)p[e]=u[e];else{let e=Array.from({length:r});for(let t=0;t<r;t++)e[t]=String(u[t]??``);if(n.length===1&&t(e))return i.sort((t,n)=>{let r=o(e[t],e[n]);return r===0?t-n:f*r}),a();let s=new Map;for(let t=0;t<r;t++)s.set(e[t],0);let c=[...s.keys()].sort(o);for(let e=0;e<c.length;e++)s.set(c[e],e);for(let t=0;t<r;t++)p[t]=s.get(e[t])}s.push(p),c.push(f)}let l=s.length;return i.sort((e,t)=>{for(let n=0;n<l;n++){let r=s[n],i=r[e]-r[t];if(i!==0)return c[n]*i}return e-t}),a()}function t(e){let t=Math.min(e.length,2048),n=new Set;for(let r=0;r<t;r++)n.add(e[r]);return n.size>t*.9}export{e as sortRowsBy};
1
+ function sortRowsBy(e,t){let n=e.length;if(n<2||t.length===0)return[...e];let r=Array.from({length:n},(e,t)=>t),collect=()=>r.map(t=>e[t]),i=new Intl.Collator().compare,a=[],o=[];for(let s of t){let c=Array.from({length:n}),l=!0;for(let t=0;t<n;t++){let n=s.keyOf(e[t]);c[t]=n,typeof n!=`number`&&(l=!1)}let u=s.direction===`desc`?-1:1,d=new Float64Array(n);if(l)for(let e=0;e<n;e++)d[e]=c[e];else{let e=Array.from({length:n});for(let t=0;t<n;t++)e[t]=String(c[t]??``);if(t.length===1&&mostlyDistinct(e))return r.sort((t,n)=>{let r=i(e[t],e[n]);return r===0?t-n:u*r}),collect();let a=new Map;for(let t=0;t<n;t++)a.set(e[t],0);let o=[...a.keys()].sort(i);for(let e=0;e<o.length;e++)a.set(o[e],e);for(let t=0;t<n;t++)d[t]=a.get(e[t])}a.push(d),o.push(u)}let s=a.length;return r.sort((e,t)=>{for(let n=0;n<s;n++){let r=a[n],i=r[e]-r[t];if(i!==0)return o[n]*i}return e-t}),collect()}function mostlyDistinct(e){let t=Math.min(e.length,2048),n=new Set;for(let r=0;r<t;r++)n.add(e[r]);return n.size>t*.9}export{sortRowsBy};
@@ -1,3 +1,3 @@
1
- function e(e){let t=e==null?``:String(e);return/[",\r\n]/.test(t)?`"${t.replaceAll(`"`,`""`)}"`:t}function t(t,n,r){let i=[n.map(t=>e(t.header)).join(`,`)];for(let a of t)i.push(n.map(t=>e(r(a,t.key))).join(`,`));return i.join(`\r
1
+ function csvField(e){let t=e==null?``:String(e);return/[",\r\n]/.test(t)?`"${t.replaceAll(`"`,`""`)}"`:t}function toCsv(e,t,n){let r=[t.map(e=>csvField(e.header)).join(`,`)];for(let i of e)r.push(t.map(e=>csvField(n(i,e.key))).join(`,`));return r.join(`\r
2
2
  `)+`\r
3
- `}function n(e,t){let n=new Blob([``,e],{type:`text/csv;charset=utf-8`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=t.endsWith(`.csv`)?t:`${t}.csv`,i.click(),URL.revokeObjectURL(r)}export{n as downloadCsv,t as toCsv};
3
+ `}function downloadCsv(e,t){let n=new Blob([``,e],{type:`text/csv;charset=utf-8`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=t.endsWith(`.csv`)?t:`${t}.csv`,i.click(),URL.revokeObjectURL(r)}export{downloadCsv,toCsv};
@@ -1 +1 @@
1
- function e(e){let{viewportHeight:t,rowHeight:n,count:r,overscan:i}=e,a=e.maxCanvas??12e6,o=r*n,s=Math.min(o,a);if(r===0)return{start:0,end:0,topPad:0,bottomPad:0,canvasHeight:0,scale:1};let c=Math.max(0,s-t),l=Math.max(0,Math.min(e.scrollTop,c)),u=c>0?Math.max(0,o-t)/c:1,d=l*u,f=Math.min(r-1,Math.floor(d/n)),p=Math.ceil(t/n)+1,m=Math.max(0,f-i),h=Math.min(r,f+p+i),g=d-f*n,_=Math.max(0,l-g-(f-m)*n);return{start:m,end:h,topPad:_,bottomPad:Math.max(0,s-_-(h-m)*n),canvasHeight:s,scale:u}}function t(e,t){let{viewportHeight:n,rowHeight:r,count:i}=t,a=t.maxCanvas??12e6,o=i*r,s=Math.max(0,Math.min(o,a)-n);if(s===0)return 0;let c=Math.max(0,o-n)/s,l=Math.max(0,e*r-(n-r)/2);return Math.max(0,Math.min(s,Math.round(l/c)))}export{e as computeWindow,t as scrollTopForRow};
1
+ function computeWindow(e){let{viewportHeight:t,rowHeight:n,count:r,overscan:i}=e,a=e.maxCanvas??12e6,o=r*n,s=Math.min(o,a);if(r===0)return{start:0,end:0,topPad:0,bottomPad:0,canvasHeight:0,scale:1};let c=Math.max(0,s-t),l=Math.max(0,Math.min(e.scrollTop,c)),u=c>0?Math.max(0,o-t)/c:1,d=l*u,f=Math.min(r-1,Math.floor(d/n)),p=Math.ceil(t/n)+1,m=Math.max(0,f-i),h=Math.min(r,f+p+i),g=d-f*n,_=Math.max(0,l-g-(f-m)*n);return{start:m,end:h,topPad:_,bottomPad:Math.max(0,s-_-(h-m)*n),canvasHeight:s,scale:u}}function scrollTopForRow(e,t){let{viewportHeight:n,rowHeight:r,count:i}=t,a=t.maxCanvas??12e6,o=i*r,s=Math.max(0,Math.min(o,a)-n);if(s===0)return 0;let c=Math.max(0,o-n)/s,l=Math.max(0,e*r-(n-r)/2);return Math.max(0,Math.min(s,Math.round(l/c)))}export{computeWindow,scrollTopForRow};
@@ -1 +1 @@
1
- "use client";import{Calendar as e}from"../calendar/calendar.js";import{formatDate as t,formatHint as ee,fromISO as n,parseTypedDate as te,toISO as r}from"./parse-date.js";import i from"./date-picker.module.js";import{useId as ne,useRef as a}from"react";import{DismissableLayer as o,cn as s,focusElement as c,useControllableSignal as l,useSignal as re,useSignalEffect as ie,useSignals as ae}from"@cascivo/core";import{builtin as u,currentLocale as d,t as f}from"@cascivo/i18n";import{jsx as p,jsxs as m}from"react/jsx-runtime";function oe(...e){return e.filter(Boolean).join(` `)||void 0}function h({value:h,defaultValue:se,onValueChange:ce,min:g,max:_,disabledDate:v,clearable:y=!1,label:b,ariaLabel:x,hint:S,error:C,size:w=`md`,disabled:T=!1,typeable:E=!0,format:le,showToday:ue=!1,name:D,required:de,open:O,onOpenChange:fe,labels:k,className:pe,id:me,"aria-labelledby":he,"aria-describedby":ge,"aria-invalid":_e}){ae();let A=ne(),j=me??`cascade-date-picker-${A}`,M=`${A}-dialog`,N=d(),P=k?.placeholder??f(u.datePicker.placeholder),F=k?.clear??f(u.datePicker.clear),ve=k?.open??f(u.datePicker.open),I=a(null),L=a(null),R=a(null),[z,ye]=l({value:h,defaultValue:se,onChange:ce}),[B,V]=l({value:O,defaultValue:!1,onChange:fe}),H=B.value,U=z.value?n(z.value):null,W=g?n(g):null,G=_?n(_):null,K=U?t(U,N,le):``,q=re(null),be=q.value??K;function J(){T||V(!0)}function Y(e=!0){V(!1),e&&c(E?I.current:L.current)}let X=a(!1);ie(()=>{if(B.value){X.current=!0;let e=setTimeout(()=>{c(R.current?.querySelector(`[tabindex="0"]`)??null)},0);return()=>clearTimeout(e)}X.current=!1});function Z(e){q.value=null,ye(e?r(e):void 0)}function Q(){let e=q.peek();if(e===null)return;if(e.trim()===``){Z(null);return}let t=te(e,N,U?.getUTCFullYear());t&&!xe(t)?Z(t):q.value=null}function xe(e){return W&&e.getTime()<W.getTime()||G&&e.getTime()>G.getTime()?!0:v?.(e)??!1}function Se(e){if(!T){if(e.altKey&&e.key===`ArrowDown`){e.preventDefault(),J();return}switch(e.key){case`ArrowDown`:e.preventDefault(),J();break;case`Enter`:E&&(e.preventDefault(),Q());break;case`Escape`:H?(e.preventDefault(),e.stopPropagation(),Y()):q.peek()!==null&&(q.value=null);break;case`Backspace`:case`Delete`:!E&&y&&z.peek()!==void 0&&(e.preventDefault(),Z(null));break}}}let Ce=oe(C?`${A}-error`:S?`${A}-hint`:void 0,ge),$={id:j,role:`combobox`,"aria-expanded":H,"aria-controls":M,"aria-haspopup":`dialog`,"aria-labelledby":he,"aria-label":x,"aria-invalid":C?!0:_e,"aria-describedby":Ce,"aria-required":de||void 0,disabled:T,onKeyDown:Se};return p(o,{onDismiss:()=>H&&Y(!1),children:m(`div`,{className:s(i.wrapper,pe),"data-state":C?`error`:H?`open`:`closed`,"data-size":w,children:[b&&p(`label`,{className:i.label,htmlFor:j,children:b}),m(`div`,{className:i.field,children:[E?p(`input`,{...$,ref:I,type:`text`,className:i.trigger,autoComplete:`off`,inputMode:`numeric`,placeholder:P||ee(N),value:be,onChange:e=>{q.value=e.currentTarget.value},onBlur:Q}):p(`button`,{...$,ref:L,type:`button`,className:i.trigger,children:p(`span`,{className:s(i.value,K?void 0:i.placeholder),children:K||P})}),y&&z.value!==void 0&&!T&&p(`button`,{type:`button`,className:i.clear,"aria-label":F,onClick:()=>{Z(null),c(E?I.current:L.current)},children:p(`span`,{className:i.clearGlyph,"aria-hidden":`true`})}),p(`button`,{ref:E?L:void 0,type:`button`,className:i.openButton,"aria-label":ve,"aria-expanded":H,"aria-controls":M,disabled:T,onClick:()=>H?Y():J(),children:p(`span`,{className:i.calendarGlyph,"aria-hidden":`true`})})]}),D!==void 0&&p(`input`,{type:`hidden`,name:D,value:z.value??``}),p(`div`,{ref:R,id:M,role:`dialog`,"aria-label":b??x??P,className:i.popup,"data-state":H?`open`:`closed`,onKeyDown:e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),Y())},children:p(e,{value:U,onValueChange:e=>{Z(e),Y()},...W?{min:W}:{},...G?{max:G}:{},...v?{disabled:v}:{},labels:{...k?.previousMonth?{previousMonth:k.previousMonth}:{},...k?.nextMonth?{nextMonth:k.nextMonth}:{},...k?.today?{today:k.today}:{}},showToday:ue,size:w,locale:N})}),C&&p(`span`,{id:`${A}-error`,className:i.error,role:`alert`,children:C}),!C&&S&&p(`span`,{id:`${A}-hint`,className:i.hint,children:S})]})})}export{h as DatePicker};
1
+ "use client";import{Calendar as e}from"../calendar/calendar.js";import{formatDate as t,formatHint as ee,fromISO as n,parseTypedDate as r,toISO as te}from"./parse-date.js";import i from"./date-picker.module.js";import{useId as ne,useRef as a}from"react";import{DismissableLayer as o,cn as s,focusElement as c,useControllableSignal as l,useSignal as re,useSignalEffect as u,useSignals as d}from"@cascivo/core";import{builtin as f,currentLocale 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 DatePicker({value:ie,defaultValue:ae,onValueChange:oe,min:_,max:v,disabledDate:y,clearable:b=!1,label:x,ariaLabel:S,hint:C,error:w,size:T=`md`,disabled:E=!1,typeable:D=!0,format:se,showToday:ce=!1,name:O,required:le,open:k,onOpenChange:ue,labels:A,className:de,id:fe,"aria-labelledby":pe,"aria-describedby":j,"aria-invalid":M}){d();let N=ne(),P=fe??`cascade-date-picker-${N}`,F=`${N}-dialog`,I=p(),L=A?.placeholder??m(f.datePicker.placeholder),R=A?.clear??m(f.datePicker.clear),z=A?.open??m(f.datePicker.open),B=a(null),V=a(null),H=a(null),[U,me]=l({value:ie,defaultValue:ae,onChange:oe}),[W,G]=l({value:k,defaultValue:!1,onChange:ue}),K=W.value,q=U.value?n(U.value):null,J=_?n(_):null,Y=v?n(v):null,X=q?t(q,I,se):``,Z=re(null),he=Z.value??X;function openPopup(){E||G(!0)}function closePopup(e=!0){G(!1),e&&c(D?B.current:V.current)}let Q=a(!1);u(()=>{if(W.value){Q.current=!0;let e=setTimeout(()=>{c(H.current?.querySelector(`[tabindex="0"]`)??null)},0);return()=>clearTimeout(e)}Q.current=!1});function commit(e){Z.value=null,me(e?te(e):void 0)}function commitDraft(){let e=Z.peek();if(e===null)return;if(e.trim()===``){commit(null);return}let t=r(e,I,q?.getUTCFullYear());t&&!outside(t)?commit(t):Z.value=null}function outside(e){return J&&e.getTime()<J.getTime()||Y&&e.getTime()>Y.getTime()?!0:y?.(e)??!1}function handleFieldKeyDown(e){if(!E){if(e.altKey&&e.key===`ArrowDown`){e.preventDefault(),openPopup();return}switch(e.key){case`ArrowDown`:e.preventDefault(),openPopup();break;case`Enter`:D&&(e.preventDefault(),commitDraft());break;case`Escape`:K?(e.preventDefault(),e.stopPropagation(),closePopup()):Z.peek()!==null&&(Z.value=null);break;case`Backspace`:case`Delete`:!D&&b&&U.peek()!==void 0&&(e.preventDefault(),commit(null));break}}}let ge=mergeDescribedBy(w?`${N}-error`:C?`${N}-hint`:void 0,j),$={id:P,role:`combobox`,"aria-expanded":K,"aria-controls":F,"aria-haspopup":`dialog`,"aria-labelledby":pe,"aria-label":S,"aria-invalid":w?!0:M,"aria-describedby":ge,"aria-required":le||void 0,disabled:E,onKeyDown:handleFieldKeyDown};return h(o,{onDismiss:()=>K&&closePopup(!1),children:g(`div`,{className:s(i.wrapper,de),"data-state":w?`error`:K?`open`:`closed`,"data-size":T,children:[x&&h(`label`,{className:i.label,htmlFor:P,children:x}),g(`div`,{className:i.field,children:[D?h(`input`,{...$,ref:B,type:`text`,className:i.trigger,autoComplete:`off`,inputMode:`numeric`,placeholder:L||ee(I),value:he,onChange:e=>{Z.value=e.currentTarget.value},onBlur:commitDraft}):h(`button`,{...$,ref:V,type:`button`,className:i.trigger,children:h(`span`,{className:s(i.value,X?void 0:i.placeholder),children:X||L})}),b&&U.value!==void 0&&!E&&h(`button`,{type:`button`,className:i.clear,"aria-label":R,onClick:()=>{commit(null),c(D?B.current:V.current)},children:h(`span`,{className:i.clearGlyph,"aria-hidden":`true`})}),h(`button`,{ref:D?V:void 0,type:`button`,className:i.openButton,"aria-label":z,"aria-expanded":K,"aria-controls":F,disabled:E,onClick:()=>K?closePopup():openPopup(),children:h(`span`,{className:i.calendarGlyph,"aria-hidden":`true`})})]}),O!==void 0&&h(`input`,{type:`hidden`,name:O,value:U.value??``}),h(`div`,{ref:H,id:F,role:`dialog`,"aria-label":x??S??L,className:i.popup,"data-state":K?`open`:`closed`,onKeyDown:e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),closePopup())},children:h(e,{value:q,onValueChange:e=>{commit(e),closePopup()},...J?{min:J}:{},...Y?{max:Y}:{},...y?{disabled:y}:{},labels:{...A?.previousMonth?{previousMonth:A.previousMonth}:{},...A?.nextMonth?{nextMonth:A.nextMonth}:{},...A?.today?{today:A.today}:{}},showToday:ce,size:T,locale:I})}),w&&h(`span`,{id:`${N}-error`,className:i.error,role:`alert`,children:w}),!w&&C&&h(`span`,{id:`${N}-hint`,className:i.hint,children:C})]})})}export{DatePicker};