@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.
- package/dist/accordion/accordion.js +1 -1
- package/dist/action-sheet/action-sheet.js +1 -1
- package/dist/alert/alert.js +1 -1
- package/dist/alert-dialog/alert-dialog.js +1 -1
- package/dist/app-shell/app-shell.css +1 -1
- package/dist/app-shell/app-shell.js +1 -1
- package/dist/app-shell/app-shell.module.js +1 -1
- package/dist/aspect-ratio/aspect-ratio.js +1 -1
- package/dist/avatar/avatar.js +1 -1
- package/dist/avatar-group/avatar-group.js +1 -1
- package/dist/badge/badge.js +1 -1
- package/dist/blockquote/blockquote.js +1 -1
- package/dist/bottom-sheet/bottom-sheet.js +1 -1
- package/dist/brand/logo/logo.js +1 -1
- package/dist/breadcrumb/breadcrumb.js +1 -1
- package/dist/button/button.css +1 -1
- package/dist/button/button.module.js +1 -1
- package/dist/button-group/button-group.js +1 -1
- package/dist/calendar/calendar-date.js +1 -1
- package/dist/calendar/calendar.js +1 -1
- package/dist/card/card.js +1 -1
- package/dist/carousel/carousel.js +1 -1
- package/dist/chat-bubble/chat-bubble.js +1 -1
- package/dist/code/code.js +1 -1
- package/dist/code-snippet/code-snippet.js +2 -2
- package/dist/code-snippet/highlight.js +1 -1
- package/dist/collapsible/collapsible.js +1 -1
- package/dist/color-picker/color-picker.js +1 -1
- package/dist/color-picker/color.js +1 -1
- package/dist/combobox/combobox.js +1 -1
- package/dist/combobox/list-nav.js +1 -1
- package/dist/combobox/option-list.js +1 -1
- package/dist/command-menu/command-menu.js +1 -1
- package/dist/comparison/comparison.js +1 -1
- package/dist/contained-list/contained-list.js +1 -1
- package/dist/context-menu/context-menu.js +1 -1
- package/dist/data-list/data-list.js +1 -1
- package/dist/data-table/column-filter.js +1 -1
- package/dist/data-table/column-layout.js +1 -1
- package/dist/data-table/data-table.js +1 -1
- package/dist/data-table/grid-keys.js +1 -1
- package/dist/data-table/row-group.js +1 -1
- package/dist/data-table/row-search.js +1 -1
- package/dist/data-table/row-sort.js +1 -1
- package/dist/data-table/to-csv.js +2 -2
- package/dist/data-table/virtual-window.js +1 -1
- package/dist/date-picker/date-picker.js +1 -1
- package/dist/date-picker/parse-date.js +1 -1
- package/dist/date-range-picker/date-range-picker.js +1 -1
- package/dist/dock/dock.js +1 -1
- package/dist/drawer/drawer.js +1 -1
- package/dist/dropdown/dropdown.js +1 -1
- package/dist/editable/editable.js +1 -1
- package/dist/empty-state/empty-state.js +1 -1
- package/dist/fab/fab.js +1 -1
- package/dist/field/field.js +1 -1
- package/dist/file-uploader/file-uploader.js +1 -1
- package/dist/filter/filter.js +1 -1
- package/dist/form/form.js +1 -1
- package/dist/header/header.js +1 -1
- package/dist/header-panel/header-panel.js +1 -1
- package/dist/heading/heading.js +1 -1
- package/dist/hover-card/hover-card.js +1 -1
- package/dist/image/image.js +1 -1
- package/dist/index.d.ts +749 -13
- package/dist/indicator/indicator.js +1 -1
- package/dist/infinite-scroll/infinite-scroll.js +1 -1
- package/dist/inline-loading/inline-loading.js +1 -1
- package/dist/input-group/input-group.js +1 -1
- package/dist/item/item.js +1 -1
- package/dist/join/join.js +1 -1
- package/dist/kbd/kbd.js +1 -1
- package/dist/label/label.js +1 -1
- package/dist/large-title-header/large-title-header.js +1 -1
- package/dist/layouts/src/auto-grid/auto-grid.js +1 -1
- package/dist/layouts/src/center/center.js +1 -1
- package/dist/layouts/src/columns/columns.js +1 -1
- package/dist/layouts/src/flex/flex.css +1 -1
- package/dist/layouts/src/flex/flex.js +1 -1
- package/dist/layouts/src/flex/flex.module.js +1 -1
- package/dist/layouts/src/grid/grid.js +1 -1
- package/dist/layouts/src/page-header/page-header.js +1 -1
- package/dist/layouts/src/spacer/spacer.js +1 -1
- package/dist/list/list.js +1 -1
- package/dist/log-viewer/log-viewer.css +1 -1
- package/dist/log-viewer/log-viewer.js +2 -2
- package/dist/log-viewer/log-viewer.module.js +1 -1
- package/dist/menu/menu.js +1 -1
- package/dist/menu-button/menu-button.js +1 -1
- package/dist/menubar/menubar.js +1 -1
- package/dist/modal/modal.js +1 -1
- package/dist/multi-select/list-nav.js +1 -1
- package/dist/multi-select/multi-select.js +1 -1
- package/dist/multi-select/option-list.js +1 -1
- package/dist/navigation-menu/navigation-menu.js +1 -1
- package/dist/node/accordion/accordion.js +1 -1
- package/dist/node/action-sheet/action-sheet.js +1 -1
- package/dist/node/alert/alert.js +1 -1
- package/dist/node/alert-dialog/alert-dialog.js +1 -1
- package/dist/node/app-shell/app-shell.js +1 -1
- package/dist/node/app-shell/app-shell.module.js +1 -1
- package/dist/node/aspect-ratio/aspect-ratio.js +1 -1
- package/dist/node/avatar/avatar.js +1 -1
- package/dist/node/avatar-group/avatar-group.js +1 -1
- package/dist/node/badge/badge.js +1 -1
- package/dist/node/blockquote/blockquote.js +1 -1
- package/dist/node/bottom-sheet/bottom-sheet.js +1 -1
- package/dist/node/brand/logo/logo.js +1 -1
- package/dist/node/breadcrumb/breadcrumb.js +1 -1
- package/dist/node/button/button.module.js +1 -1
- package/dist/node/button-group/button-group.js +1 -1
- package/dist/node/calendar/calendar-date.js +1 -1
- package/dist/node/calendar/calendar.js +1 -1
- package/dist/node/card/card.js +1 -1
- package/dist/node/carousel/carousel.js +1 -1
- package/dist/node/chat-bubble/chat-bubble.js +1 -1
- package/dist/node/code/code.js +1 -1
- package/dist/node/code-snippet/code-snippet.js +2 -2
- package/dist/node/code-snippet/highlight.js +1 -1
- package/dist/node/collapsible/collapsible.js +1 -1
- package/dist/node/color-picker/color-picker.js +1 -1
- package/dist/node/color-picker/color.js +1 -1
- package/dist/node/combobox/combobox.js +1 -1
- package/dist/node/combobox/list-nav.js +1 -1
- package/dist/node/combobox/option-list.js +1 -1
- package/dist/node/command-menu/command-menu.js +1 -1
- package/dist/node/comparison/comparison.js +1 -1
- package/dist/node/contained-list/contained-list.js +1 -1
- package/dist/node/context-menu/context-menu.js +1 -1
- package/dist/node/data-list/data-list.js +1 -1
- package/dist/node/data-table/column-filter.js +1 -1
- package/dist/node/data-table/column-layout.js +1 -1
- package/dist/node/data-table/data-table.js +1 -1
- package/dist/node/data-table/grid-keys.js +1 -1
- package/dist/node/data-table/row-group.js +1 -1
- package/dist/node/data-table/row-search.js +1 -1
- package/dist/node/data-table/row-sort.js +1 -1
- package/dist/node/data-table/to-csv.js +2 -2
- package/dist/node/data-table/virtual-window.js +1 -1
- package/dist/node/date-picker/date-picker.js +1 -1
- package/dist/node/date-picker/parse-date.js +1 -1
- package/dist/node/date-range-picker/date-range-picker.js +1 -1
- package/dist/node/dock/dock.js +1 -1
- package/dist/node/drawer/drawer.js +1 -1
- package/dist/node/dropdown/dropdown.js +1 -1
- package/dist/node/editable/editable.js +1 -1
- package/dist/node/empty-state/empty-state.js +1 -1
- package/dist/node/fab/fab.js +1 -1
- package/dist/node/field/field.js +1 -1
- package/dist/node/file-uploader/file-uploader.js +1 -1
- package/dist/node/filter/filter.js +1 -1
- package/dist/node/form/form.js +1 -1
- package/dist/node/header/header.js +1 -1
- package/dist/node/header-panel/header-panel.js +1 -1
- package/dist/node/heading/heading.js +1 -1
- package/dist/node/hover-card/hover-card.js +1 -1
- package/dist/node/image/image.js +1 -1
- package/dist/node/indicator/indicator.js +1 -1
- package/dist/node/infinite-scroll/infinite-scroll.js +1 -1
- package/dist/node/inline-loading/inline-loading.js +1 -1
- package/dist/node/input-group/input-group.js +1 -1
- package/dist/node/item/item.js +1 -1
- package/dist/node/join/join.js +1 -1
- package/dist/node/kbd/kbd.js +1 -1
- package/dist/node/label/label.js +1 -1
- package/dist/node/large-title-header/large-title-header.js +1 -1
- package/dist/node/layouts/src/auto-grid/auto-grid.js +1 -1
- package/dist/node/layouts/src/center/center.js +1 -1
- package/dist/node/layouts/src/columns/columns.js +1 -1
- package/dist/node/layouts/src/flex/flex.js +1 -1
- package/dist/node/layouts/src/flex/flex.module.js +1 -1
- package/dist/node/layouts/src/grid/grid.js +1 -1
- package/dist/node/layouts/src/page-header/page-header.js +1 -1
- package/dist/node/layouts/src/spacer/spacer.js +1 -1
- package/dist/node/list/list.js +1 -1
- package/dist/node/log-viewer/log-viewer.js +2 -2
- package/dist/node/log-viewer/log-viewer.module.js +1 -1
- package/dist/node/menu/menu.js +1 -1
- package/dist/node/menu-button/menu-button.js +1 -1
- package/dist/node/menubar/menubar.js +1 -1
- package/dist/node/modal/modal.js +1 -1
- package/dist/node/multi-select/list-nav.js +1 -1
- package/dist/node/multi-select/multi-select.js +1 -1
- package/dist/node/multi-select/option-list.js +1 -1
- package/dist/node/navigation-menu/navigation-menu.js +1 -1
- package/dist/node/notification/notification.js +1 -1
- package/dist/node/number-input/number-input.js +1 -1
- package/dist/node/otp-input/otp-input.js +1 -1
- package/dist/node/overflow-menu/overflow-menu.js +1 -1
- package/dist/node/pagination/pagination.js +1 -1
- package/dist/node/password-input/password-input.js +1 -1
- package/dist/node/popover/popover.js +1 -1
- package/dist/node/popover/use-popover.js +1 -1
- package/dist/node/progress/progress.js +1 -1
- package/dist/node/progress-bar/progress-bar.js +1 -1
- package/dist/node/progress-circle/progress-circle.js +1 -1
- package/dist/node/progress-indicator/progress-indicator.js +1 -1
- package/dist/node/prose/prose.js +1 -1
- package/dist/node/pull-to-refresh/pull-to-refresh.js +1 -1
- package/dist/node/qr-code/encode.js +1 -1
- package/dist/node/qr-code/qr-code.js +1 -1
- package/dist/node/radial-progress/radial-progress.js +1 -1
- package/dist/node/radio/radio.js +1 -1
- package/dist/node/radio-card/radio-card.js +1 -1
- package/dist/node/rating-group/rating-group.js +1 -1
- package/dist/node/react/src/index.js +1 -1
- package/dist/node/relative-time/relative-time.js +1 -1
- package/dist/node/reorder-list/reorder-list.js +1 -1
- package/dist/node/resizable/resizable.js +1 -1
- package/dist/node/scroll-area/scroll-area.js +1 -1
- package/dist/node/search/search.js +1 -1
- package/dist/node/segmented-control/segmented-control.js +1 -1
- package/dist/node/separator/separator.js +1 -1
- package/dist/node/sheet/sheet.js +1 -1
- package/dist/node/shell-header/shell-header.js +1 -1
- package/dist/node/side-nav/side-nav.js +1 -1
- package/dist/node/side-nav/side-nav.module.js +1 -1
- package/dist/node/skeleton/skeleton.js +1 -1
- package/dist/node/skip-nav/skip-nav.js +1 -1
- package/dist/node/spinner/spinner.js +1 -1
- package/dist/node/stack/stack.js +1 -1
- package/dist/node/stat/stat.js +1 -1
- package/dist/node/status/status.js +1 -1
- package/dist/node/steps/steps.js +1 -1
- package/dist/node/structured-list/structured-list.js +1 -1
- package/dist/node/swap/swap.js +1 -1
- package/dist/node/swipe-item/swipe-item.js +1 -1
- package/dist/node/switcher/switcher.js +1 -1
- package/dist/node/tabs/tabs.js +1 -1
- package/dist/node/tag/tag.js +1 -1
- package/dist/node/tags-input/tags-input.js +1 -1
- package/dist/node/text/text.js +1 -1
- package/dist/node/tile/tile.js +1 -1
- package/dist/node/timeline/timeline.js +1 -1
- package/dist/node/toast/toast.js +1 -1
- package/dist/node/toc/toc.js +1 -1
- package/dist/node/toc/use-toc-from-region.js +1 -1
- package/dist/node/toggle-group/toggle-group.js +1 -1
- package/dist/node/toggletip/toggletip.js +1 -1
- package/dist/node/tooltip/tooltip.js +1 -1
- package/dist/node/tree-view/tree-view.js +1 -1
- package/dist/node/user/user.js +1 -1
- package/dist/node/virtual-list/virtual-list.js +1 -1
- package/dist/node/wheel-picker/wheel-picker.js +1 -1
- package/dist/notification/notification.js +1 -1
- package/dist/number-input/number-input.js +1 -1
- package/dist/otp-input/otp-input.js +1 -1
- package/dist/overflow-menu/overflow-menu.js +1 -1
- package/dist/pagination/pagination.js +1 -1
- package/dist/password-input/password-input.js +1 -1
- package/dist/popover/popover.js +1 -1
- package/dist/popover/use-popover.js +1 -1
- package/dist/progress/progress.js +1 -1
- package/dist/progress-bar/progress-bar.js +1 -1
- package/dist/progress-circle/progress-circle.js +1 -1
- package/dist/progress-indicator/progress-indicator.js +1 -1
- package/dist/prose/prose.js +1 -1
- package/dist/pull-to-refresh/pull-to-refresh.js +1 -1
- package/dist/qr-code/encode.js +1 -1
- package/dist/qr-code/qr-code.js +1 -1
- package/dist/radial-progress/radial-progress.js +1 -1
- package/dist/radio/radio.js +1 -1
- package/dist/radio-card/radio-card.js +1 -1
- package/dist/rating-group/rating-group.js +1 -1
- package/dist/react/src/index.js +1 -1
- package/dist/relative-time/relative-time.js +1 -1
- package/dist/reorder-list/reorder-list.js +1 -1
- package/dist/resizable/resizable.js +1 -1
- package/dist/scroll-area/scroll-area.js +1 -1
- package/dist/search/search.js +1 -1
- package/dist/segmented-control/segmented-control.js +1 -1
- package/dist/separator/separator.js +1 -1
- package/dist/sheet/sheet.js +1 -1
- package/dist/shell-header/shell-header.js +1 -1
- package/dist/side-nav/side-nav.css +1 -1
- package/dist/side-nav/side-nav.js +1 -1
- package/dist/side-nav/side-nav.module.js +1 -1
- package/dist/skeleton/skeleton.js +1 -1
- package/dist/skip-nav/skip-nav.js +1 -1
- package/dist/spinner/spinner.js +1 -1
- package/dist/stack/stack.js +1 -1
- package/dist/stat/stat.js +1 -1
- package/dist/status/status.js +1 -1
- package/dist/steps/steps.js +1 -1
- package/dist/structured-list/structured-list.js +1 -1
- package/dist/styles.css +10 -6
- package/dist/swap/swap.js +1 -1
- package/dist/swipe-item/swipe-item.js +1 -1
- package/dist/switcher/switcher.js +1 -1
- package/dist/tabs/tabs.js +1 -1
- package/dist/tag/tag.js +1 -1
- package/dist/tags-input/tags-input.js +1 -1
- package/dist/text/text.js +1 -1
- package/dist/tile/tile.js +1 -1
- package/dist/timeline/timeline.js +1 -1
- package/dist/toast/toast.js +1 -1
- package/dist/toc/toc.js +1 -1
- package/dist/toc/use-toc-from-region.js +1 -1
- package/dist/toggle-group/toggle-group.js +1 -1
- package/dist/toggletip/toggletip.js +1 -1
- package/dist/tooltip/tooltip.js +1 -1
- package/dist/tree-view/tree-view.js +1 -1
- package/dist/user/user.js +1 -1
- package/dist/virtual-list/virtual-list.js +1 -1
- package/dist/wheel-picker/wheel-picker.js +1 -1
- package/package.json +4 -4
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function toISO(e){return`${String(e.getUTCFullYear()).padStart(4,`0`)}-${String(e.getUTCMonth()+1).padStart(2,`0`)}-${String(e.getUTCDate()).padStart(2,`0`)}`}function fromISO(e){let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e.trim());return t?makeDate(Number(t[1]),Number(t[2]),Number(t[3])):null}function makeDate(e,t,n){if(t<1||t>12||n<1||n>31)return null;let r=new Date(Date.UTC(e,t-1,n));return r.getUTCMonth()!==t-1||r.getUTCDate()!==n?null:r}function isDayFirst(e){try{return new Intl.DateTimeFormat(e).formatToParts(new Date(Date.UTC(2026,0,2))).filter(e=>e.type===`day`||e.type===`month`).map(e=>e.type)[0]===`day`}catch{return!1}}function parseTypedDate(e,t,n){let r=e.trim();if(r===``)return null;let i=fromISO(r);if(i)return i;let a=r.split(/[/.\-\s]+/).filter(Boolean);if(a.length<2||a.length>3||!a.every(e=>/^\d{1,4}$/.test(e)))return null;let o=a.map(Number),s=isDayFirst(t),c,l,u;return o.length===2?([c,l]=s?[o[0],o[1]]:[o[1],o[0]],u=n??new Date().getFullYear()):([c,l]=s?[o[0],o[1]]:[o[1],o[0]],u=o[2],a[2].length<=2&&(u=2e3+u)),makeDate(u,l,c)}function formatDate(e,t,n){return new Intl.DateTimeFormat(t,n??{timeZone:`UTC`}).format(e)}function formatHint(e){try{return new Intl.DateTimeFormat(e,{timeZone:`UTC`}).formatToParts(new Date(Date.UTC(2026,10,22))).map(e=>e.type===`day`?`DD`:e.type===`month`?`MM`:e.type===`year`?`YYYY`:e.value).join(``)}catch{return`YYYY-MM-DD`}}export{formatDate,formatHint,fromISO,parseTypedDate,toISO};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{Calendar as e}from"../calendar/calendar.js";import t from"./date-range-picker.module.js";import{useRef as n}from"react";import{batch as r,cn as i,useControllableSignal as a,useSignal as o,useSignalEffect as s,useSignals as
|
|
1
|
+
"use client";import{Calendar as e}from"../calendar/calendar.js";import t from"./date-range-picker.module.js";import{useRef as n}from"react";import{batch as r,cn as i,useControllableSignal as a,useSignal as o,useSignalEffect as s,useSignals as c}from"@cascivo/core";import{builtin as l,currentLocale as u,t as d}from"@cascivo/i18n";import{jsx as f,jsxs as p}from"react/jsx-runtime";function dayMs(e){return Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate())}function sameDay(e,t){return!e||!t?!1:dayMs(e)===dayMs(t)}function addMonths(e,t,n){let r=new Date(Date.UTC(e,t+n,1));return{year:r.getUTCFullYear(),month:r.getUTCMonth()}}function DateRangePicker({value:m,defaultValue:h,onValueChange:g,min:_,max:v,disabled:y,presets:b,locale:x,placeholder:S,size:C=`md`,labels:w,className:T}){c();let E=x??u(),D=S??d(l.dateRangePicker.placeholder),O=w?.apply??d(l.dateRangePicker.apply),k=w?.clear??d(l.dateRangePicker.clear),A=w?.previousMonth??d(l.calendar.previousMonth),j=w?.nextMonth??d(l.calendar.nextMonth),[M,N]=a({value:m===void 0?void 0:m,defaultValue:h??null,onChange:e=>{e&&g?.(e)}}),P=o(!1),F=o(null),I=o(null),L=M.value?.start??h?.start??new Date,R=o(L.getUTCFullYear()),z=o(L.getUTCMonth()),B=n(null);s(()=>{if(!P.value)return;let handler=e=>{B.current&&!B.current.contains(e.target)&&(P.value=!1)};return document.addEventListener(`mousedown`,handler),()=>document.removeEventListener(`mousedown`,handler)});let openPanel=()=>{P.value=!0},closePanel=()=>{P.value=!1},advance=e=>{let t=addMonths(R.value,z.value,e);r(()=>{R.value=t.year,z.value=t.month})},handleDayClick=e=>{let t=F.value;if(t===null){F.value=e;return}if(sameDay(t,e)){r(()=>{F.value=null,I.value=null}),N(null);return}let n=dayMs(t)<=dayMs(e)?{start:t,end:e}:{start:e,end:t};r(()=>{F.value=null,I.value=null}),N(n)},applyPreset=e=>{r(()=>{F.value=null,I.value=null,R.value=e.range.start.getUTCFullYear(),z.value=e.range.start.getUTCMonth()}),N(e.range)},clear=()=>{r(()=>{F.value=null,I.value=null}),N(null)},V=F.value??M.value?.start??null,H=F.value?I.value??null:M.value?.end??null,U=V&&H?Math.min(dayMs(V),dayMs(H)):null,W=V&&H?Math.max(dayMs(V),dayMs(H)):null,isInRange=e=>{if(U===null||W===null)return!1;let t=dayMs(e);return t>U&&t<W},isRangeStart=e=>sameDay(e,V)||U!==null&&dayMs(e)===U,isRangeEnd=e=>sameDay(e,H)||W!==null&&dayMs(e)===W,G=new Intl.DateTimeFormat(E,{year:`numeric`,month:`short`,day:`numeric`}),K=M.value?`${G.format(M.value.start)} → ${G.format(M.value.end)}`:``,q=addMonths(R.value,z.value,1),J={locale:E,size:C,..._===void 0?{}:{min:_},...v===void 0?{}:{max:v},...y===void 0?{}:{disabled:y},hideNav:!0,isInRange,isRangeStart,isRangeEnd,onValueChange:handleDayClick,onDayHover:e=>{I.value=e},labels:{previousMonth:A,nextMonth:j}};return p(`div`,{ref:B,className:i(t.wrapper,T),"data-size":C,onKeyDown:e=>{e.key===`Escape`&&P.value&&(e.stopPropagation(),closePanel())},children:[p(`button`,{type:`button`,role:`combobox`,"aria-expanded":P.value,"aria-haspopup":`dialog`,"aria-label":w?.label??d(l.dateRangePicker.label),className:t.trigger,onClick:P.value?closePanel:openPanel,children:[f(`span`,{className:i(t.value,K?void 0:t.placeholder),children:K||D}),f(`span`,{className:t.icon,"aria-hidden":`true`,children:`📅`})]}),p(`div`,{role:`dialog`,className:t.panel,"data-state":P.value?`open`:`closed`,children:[b&&b.length>0&&f(`div`,{className:t.presets,children:b.map(e=>f(`button`,{type:`button`,className:t.preset,onClick:()=>applyPreset(e),children:e.label},e.id??e.label))}),p(`div`,{className:t.calendars,children:[f(`div`,{className:t.calNav,children:f(`button`,{type:`button`,className:t.navButton,"aria-label":A,onClick:()=>advance(-1),children:`‹`})}),f(e,{month:z.value,year:R.value,...J}),f(e,{month:q.month,year:q.year,...J}),f(`div`,{className:t.calNav,children:f(`button`,{type:`button`,className:t.navButton,"aria-label":j,onClick:()=>advance(1),children:`›`})})]}),p(`div`,{className:t.footer,children:[f(`button`,{type:`button`,className:t.clearBtn,onClick:clear,children:k}),f(`button`,{type:`button`,className:t.applyBtn,onClick:closePanel,children:O})]})]})]})}export{DateRangePicker};
|
package/dist/dock/dock.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import e from"./dock.module.js";import{getLinkComponent as t,useSignals as n}from"@cascivo/core";import{builtin as r,t as i}from"@cascivo/i18n";import{jsx as a,jsxs as o}from"react/jsx-runtime";function
|
|
1
|
+
"use client";import e from"./dock.module.js";import{getLinkComponent as t,useSignals as n}from"@cascivo/core";import{builtin as r,t as i}from"@cascivo/i18n";import{jsx as a,jsxs as o}from"react/jsx-runtime";function Dock({items:s,activeIndex:c,className:l,ariaLabel:u,label:d}){return n(),a(`nav`,{"aria-label":u??d??i(r.dock.nav),className:[e.dock,l].filter(Boolean).join(` `),children:s.map((n,r)=>{let i=r===c;return o(n.href?t():`button`,{className:e.item,"data-active":i||void 0,"aria-current":i?`page`:void 0,...n.href?{href:n.href}:{},type:n.href?void 0:`button`,onClick:n.onClick,children:[a(`span`,{className:e.icon,"aria-hidden":`true`,children:n.icon}),a(`span`,{className:e.label,children:n.label})]},n.id??`${r}-${n.label}`)})})}export{Dock};
|
package/dist/drawer/drawer.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import e from"./drawer.module.js";import{useId as t}from"react";import{DismissableLayer as n,FocusScope as r,Portal as i,Presence as a,cn as o,useControllableSignal as s,useDraggable as c,useScrollLock as l,useSignals as u}from"@cascivo/core";import{builtin as d,t as f}from"@cascivo/i18n";import{jsx as p,jsxs as m}from"react/jsx-runtime";var h=80;function
|
|
1
|
+
"use client";import e from"./drawer.module.js";import{useId as t}from"react";import{DismissableLayer as n,FocusScope as r,Portal as i,Presence as a,cn as o,useControllableSignal as s,useDraggable as c,useScrollLock as l,useSignals as u}from"@cascivo/core";import{builtin as d,t as f}from"@cascivo/i18n";import{jsx as p,jsxs as m}from"react/jsx-runtime";var h=80;function Drawer({open:g,defaultOpen:_,onOpenChange:v,side:y=`end`,size:b,title:x,description:S,children:C,labels:w,className:T,swipeToDismiss:E=!1}){u();let[D,O]=s({value:g,defaultValue:_??!1,onChange:v});l(D);let k=y===`top`||y===`bottom`?`y`:`x`,{handleRef:A,offset:j,isDragging:M,reset:N}=c({isDisabled:!E,axis:k,onDragEnd:e=>{let t=k===`y`?e.y:e.x,n=y===`end`&&t>h||y===`start`&&t<-80||y===`bottom`&&t>h||y===`top`&&t<-80;N(),n&&O(!1)}}),P=t(),F=t(),I=w?.close??f(d.drawer.close),L={...b?{"--_drawer-size":b}:{},...E?{"--_drawer-drag-x":`${j.value.x}px`,"--_drawer-drag-y":`${j.value.y}px`}:{}};return p(i,{children:p(a,{present:D,children:p(`div`,{className:e.overlay,"data-side":y,children:p(n,{onDismiss:()=>O(!1),children:p(r,{trapped:!0,restoreFocus:!0,autoFocus:!0,children:m(`div`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":x?P:void 0,"aria-describedby":S?F:void 0,"data-side":y,"data-dragging":E&&M.value?``:void 0,className:o(e.panel,T),style:L,children:[(x||S)&&m(`div`,{className:e.header,ref:E?A:void 0,children:[m(`div`,{className:e.heading,children:[x&&p(`h2`,{id:P,className:e.title,children:x}),S&&p(`p`,{id:F,className:e.description,children:S})]}),p(`button`,{type:`button`,"aria-label":I,onClick:()=>O(!1),className:e.close,children:p(`svg`,{"aria-hidden":`true`,viewBox:`0 0 16 16`,className:e.closeIcon,children:p(`path`,{d:`M4 4l8 8M12 4l-8 8`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})})]}),p(`div`,{className:e.body,"data-cascivo-drawer-body":``,children:C})]})})})})})})}export{Drawer};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import e from"./dropdown.module.js";import{cloneElement as t,useRef as n}from"react";import{composeRefs as r,createMachine as i,focusElement as a,useEffectPropSignal as o,useMachine as s,useSignal as c,useSignalEffect as l,useSignals as u}from"@cascivo/core";import{jsx as d,jsxs as f}from"react/jsx-runtime";var p=i({initial:`closed`,states:{closed:{on:{OPEN:`open`}},open:{on:{CLOSE:`closed`}}}});function
|
|
1
|
+
"use client";import e from"./dropdown.module.js";import{cloneElement as t,useRef as n}from"react";import{composeRefs as r,createMachine as i,focusElement as a,useEffectPropSignal as o,useMachine as s,useSignal as c,useSignalEffect as l,useSignals as u}from"@cascivo/core";import{jsx as d,jsxs as f}from"react/jsx-runtime";var p=i({initial:`closed`,states:{closed:{on:{OPEN:`open`}},open:{on:{CLOSE:`closed`}}}});function isMenuItem(e){return!(`kind`in e)}function Dropdown({trigger:i,items:m,onSelect:h,placement:g=`bottom-start`,open:_,onOpenChange:v}){u();let[y,b]=s(p),x=n(null),S=n(null),C=n(null),w=n([]),T=c(-1),E=_!==void 0,D=E?_:y.value===`open`,O=o(D),k=m.map((e,t)=>({item:e,index:t})).filter(({item:e})=>isMenuItem(e)&&!e.disabled).map(({index:e})=>e),setOpen=e=>{E||b(e?`OPEN`:`CLOSE`),v?.(e)};l(()=>{let e=T.value;O.value&&e>=0&&w.current[e]?.focus()}),l(()=>{O.value?T.value=k[0]??-1:T.value=-1}),l(()=>{O.value?C.current?.showPopover():C.current?.hidePopover()}),l(()=>{let e=C.current;if(!e)return;let handleToggle=e=>{e.newState===`closed`&&setOpen(!1)};return e.addEventListener(`toggle`,handleToggle),()=>e.removeEventListener(`toggle`,handleToggle)});let selectAt=e=>{let t=m[e];!t||!isMenuItem(t)||t.disabled||(h?.(t.value),setOpen(!1),a(S.current))},moveActive=e=>{k.length!==0&&(T.value=k[(k.indexOf(T.value)+e+k.length)%k.length]??-1)},handleMenuKeyDown=e=>{switch(e.key){case`ArrowDown`:e.preventDefault(),moveActive(1);break;case`ArrowUp`:e.preventDefault(),moveActive(-1);break;case`Home`:e.preventDefault(),T.value=k[0]??-1;break;case`End`:e.preventDefault(),T.value=k[k.length-1]??-1;break;case`Escape`:e.preventDefault(),setOpen(!1),a(S.current);break;case`Enter`:case` `:e.preventDefault(),selectAt(T.value);break}},A=i,j=t(A,{ref:r(S,A.props.ref),onClick:e=>{A.props.onClick?.(e),setOpen(!D)},"aria-haspopup":`menu`,"aria-expanded":D});return f(`div`,{ref:x,className:e.root,children:[j,d(`div`,{ref:C,popover:`auto`,role:`menu`,"data-placement":g,"data-state":D?`open`:`closed`,className:e.menu,onKeyDown:handleMenuKeyDown,children:m.map((t,n)=>isMenuItem(t)?f(`button`,{type:`button`,role:`menuitem`,ref:e=>{w.current[n]=e},tabIndex:T.value===n?0:-1,disabled:t.disabled,className:e.item,onClick:()=>selectAt(n),children:[t.icon&&d(`span`,{className:e.icon,"aria-hidden":`true`,children:t.icon}),t.label]},t.value):d(`div`,{role:`separator`,className:e.separator},`sep-${n}`))})]})}export{Dropdown};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import e from"./editable.module.js";import{useRef as t}from"react";import{cn as n,useSignal as r,useSignals as i}from"@cascivo/core";import{jsx as a,jsxs as o}from"react/jsx-runtime";function
|
|
1
|
+
"use client";import e from"./editable.module.js";import{useRef as t}from"react";import{cn as n,useSignal as r,useSignals as i}from"@cascivo/core";import{jsx as a,jsxs as o}from"react/jsx-runtime";function focusOnMount(e){e&&(e.focus(),e.select())}function Editable({value:s,onValueChange:c,placeholder:l,disabled:u=!1,submitOnBlur:d=!0,onCancel:f,className:p,id:m,"aria-label":h,"aria-labelledby":g,"aria-describedby":_,"aria-invalid":v,tabIndex:y,...b}){i();let x=r(!1),S=r(s),C=t(f);C.current=f;let w=t(c);w.current=c;let T={id:m,"aria-label":h,"aria-labelledby":g,"aria-describedby":_,"aria-invalid":v,tabIndex:y};x.value||(S.value=s);function confirm(){w.current(S.value),x.value=!1}function cancel(){S.value=s,x.value=!1,C.current?.()}return x.value?a(`div`,{className:n(e.wrapper,e.editing,p),...b,children:a(`input`,{ref:focusOnMount,className:e.input,...T,value:S.value,onChange:e=>{S.value=e.currentTarget.value},onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),confirm()):e.key===`Escape`&&(e.preventDefault(),cancel())},onBlur:()=>{d?confirm():cancel()}})}):a(`div`,{className:n(e.wrapper,p),"data-disabled":u?``:void 0,...b,children:o(`button`,{type:`button`,className:e.preview,...T,disabled:u,onClick:()=>{u||(x.value=!0)},children:[a(`span`,{className:e[`preview-text`],children:s||a(`span`,{className:e.placeholder,children:l})}),a(`span`,{className:e[`edit-icon`],"aria-hidden":`true`})]})})}export{Editable};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"./empty-state.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n,jsxs as r}from"react/jsx-runtime";function
|
|
1
|
+
import e from"./empty-state.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n,jsxs as r}from"react/jsx-runtime";function EmptyState({icon:i,title:a,description:o,action:s,size:c=`md`,className:l,...u}){return r(`div`,{"data-size":c,className:t(e[`empty-state`],l),...u,children:[i&&n(`span`,{className:e.icon,"aria-hidden":`true`,children:i}),n(`h3`,{className:e.title,children:a}),o&&n(`p`,{className:e.description,children:o}),s&&n(`div`,{className:e.action,children:s})]})}export{EmptyState};
|
package/dist/fab/fab.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import e from"./fab.module.js";import{useId as t,useRef as n}from"react";import{DismissableLayer as r,Presence as i,cn as a,focusElement as o,useControllableSignal as s,useRovingFocus as c,useSignalEffect as l,useSignals as u}from"@cascivo/core";import{jsx as d,jsxs as f}from"react/jsx-runtime";function
|
|
1
|
+
"use client";import e from"./fab.module.js";import{useId as t,useRef as n}from"react";import{DismissableLayer as r,Presence as i,cn as a,focusElement as o,useControllableSignal as s,useRovingFocus as c,useSignalEffect as l,useSignals as u}from"@cascivo/core";import{jsx as d,jsxs as f}from"react/jsx-runtime";function Fab({children:p,ariaLabel:m,label:h,onClick:g,actions:_,position:v=`bottom-end`,open:y,defaultOpen:b,onOpenChange:x,className:S}){u();let C=_!=null&&_.length>0,[w,T]=s({value:y,defaultValue:b??!1,onChange:x}),E=c({orientation:`vertical`,loop:!0}),D=n(null),O=n(null),k=t(),A=n(!1);l(()=>{let e=C&&w.value;e&&!A.current?O.current?.querySelector(`[role="menuitem"]:not([aria-disabled="true"])`)?.focus():!e&&A.current&&o(D.current),A.current=e});let selectAction=e=>{e.disabled||(e.onSelect(),T(!1))},j=d(`button`,{ref:D,type:`button`,"aria-label":h??m,className:e.fab,...C?{"aria-haspopup":`menu`,"aria-expanded":w.value,"aria-controls":k,"data-state":w.value?`open`:`closed`,onClick:()=>T(!w.value)}:{onClick:g},children:d(`span`,{className:e.icon,"aria-hidden":`true`,children:p})});return C?d(r,{onDismiss:()=>T(!1),escapeDismisses:w.value,disableOutsidePointer:!w.value,children:f(`div`,{className:a(e.root,S),"data-position":v,children:[d(i,{present:w,children:d(`menu`,{ref:O,id:k,role:`menu`,"aria-label":h??m,className:e.dial,children:_.map((t,n)=>{let r=E.getItemProps(n);return d(`li`,{role:`presentation`,className:e.dialItem,children:f(`button`,{ref:r.ref,type:`button`,role:`menuitem`,tabIndex:r.tabIndex,"aria-disabled":t.disabled||void 0,className:e.action,onKeyDown:r.onKeyDown,onFocus:r.onFocus,onClick:()=>selectAction(t),children:[d(`span`,{className:e.actionLabel,children:t.label}),d(`span`,{className:e.actionIcon,"aria-hidden":`true`,children:t.icon})]})},t.id??n)})})}),j]})}):d(`div`,{className:a(e.root,S),"data-position":v,children:j})}export{Fab};
|
package/dist/field/field.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Label as e}from"../label/label.js";import t from"./field.module.js";import{cn as n,useId as r}from"@cascivo/core/pure";import{Children as i,cloneElement as a,isValidElement as o}from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";var l=new Set;function
|
|
1
|
+
import{Label as e}from"../label/label.js";import t from"./field.module.js";import{cn as n,useId as r}from"@cascivo/core/pure";import{Children as i,cloneElement as a,isValidElement as o}from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";var l=new Set;function isDev(){return globalThis.process?.env?.NODE_ENV!==`production`}function warnIfDoubleLabel(e,t){if(!isDev()||e==null||t.props.label==null)return;let n=String(e);l.has(n)||(l.add(n),console.warn(`cascivo Field: both the Field and its child control define a \`label\` (${n}). Omit the child's \`label\` inside a Field — it renders a second <label> for the same control. The Field owns the label.`))}var u=new Set;function warnIfDoubleHint(e,t){if(!isDev()||e==null||t.props.hint==null)return;let n=String(e);u.has(n)||(u.add(n),console.warn(`cascivo Field: both the Field and its child control define supporting text (${n}). Omit the child's \`hint\` inside a Field — the Field owns it, and only the Field's is wired into aria-describedby.`))}function Field({label:l,description:u,hint:d,error:f,required:p=!1,disabled:m=!1,id:h,children:g,className:_}){let v=u??d,y=r(`cascade-field`),b=h??y,x=`${b}-description`,S=`${b}-error`,C=`${b}-label`,w=[v?x:null,f?S:null].filter(Boolean).join(` `)||void 0,T={id:b};l!=null&&(T[`aria-labelledby`]=C),w&&(T[`aria-describedby`]=w),f&&(T[`aria-invalid`]=!0),(m||g.props.disabled)&&(T.disabled=!0),o(g)&&(warnIfDoubleLabel(l,g),warnIfDoubleHint(v,g));let E=o(g)?a(i.only(g),T):g;return c(`div`,{className:n(t.field,_),"data-disabled":m?``:void 0,children:[l&&s(e,{id:C,htmlFor:b,required:p,disabled:m,children:l}),E,v&&s(`p`,{id:x,className:t.description,children:v}),f&&s(`p`,{id:S,role:`alert`,className:t.error,children:f})]})}export{Field};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{Spinner as e}from"../spinner/spinner.js";import t from"./file-uploader.module.js";import{useRef as n}from"react";import{cn as r,useId as i,useSignal as a,useSignals as o}from"@cascivo/core";import{builtin as s,currentLocale as c,t as l}from"@cascivo/i18n";import{jsx as u,jsxs as d}from"react/jsx-runtime";function
|
|
1
|
+
"use client";import{Spinner as e}from"../spinner/spinner.js";import t from"./file-uploader.module.js";import{useRef as n}from"react";import{cn as r,useId as i,useSignal as a,useSignals as o}from"@cascivo/core";import{builtin as s,currentLocale as c,t as l}from"@cascivo/i18n";import{jsx as u,jsxs as d}from"react/jsx-runtime";function matchesAccept(e,t){let n=t.split(`,`).map(e=>e.trim()).filter(Boolean);return n.length===0?!0:n.some(t=>t.startsWith(`.`)?e.name.toLowerCase().endsWith(t.toLowerCase()):t.endsWith(`/*`)?e.type.startsWith(t.slice(0,-1)):e.type===t)}function formatSize(e,t){let[n,r]=e>=1024*1024?[e/(1024*1024),`megabyte`]:e>=1024?[e/1024,`kilobyte`]:[e,`byte`];try{return new Intl.NumberFormat(t,{style:`unit`,unit:r,unitDisplay:`short`,maximumFractionDigits:r===`byte`?0:1}).format(n)}catch{return new Intl.NumberFormat(t,{maximumFractionDigits:r===`byte`?0:1}).format(n)}}function statusSummary(e,t,n,r){return e.some(e=>e.status===`error`)?r:e.some(e=>e.status===`uploading`)?t:n}function FileUploader({files:f=[],onFilesAdded:p,onRemove:m,multiple:h=!1,accept:g,maxSize:_,onRejected:v,label:y,ariaLabel:b,hint:x,labels:S,disabled:C=!1,className:w}){o();let T=c(),E=n(null),D=a(!1),O=y??S?.label??l(s.fileUploader.label),k=S?.drop??l(s.fileUploader.drop),A=S?.uploading??l(s.fileUploader.uploading),j=S?.complete??l(s.fileUploader.complete),M=S?.error??l(s.fileUploader.error),resolveRemove=e=>S?.remove?S.remove.replaceAll(`{name}`,e):l(s.fileUploader.remove,{name:e}),N=i(`cascivo-uploader`),P=`${N}-label`,F=`${N}-hint`,I=`${N}-status`,processFiles=e=>{if(!e||e.length===0)return;let t=h?Array.from(e):Array.from(e).slice(0,1),n=[],r=[],i=[];for(let e of t)g&&!matchesAccept(e,g)?r.push(e):_!==void 0&&e.size>_?i.push(e):n.push(e);r.length>0&&v?.(r,`type`),i.length>0&&v?.(i,`size`),n.length>0&&p?.(n)};return d(`div`,{className:r(t.uploader,w),children:[u(`span`,{id:P,className:t.label,children:O}),u(`input`,{ref:E,type:`file`,className:t.input,tabIndex:-1,"aria-labelledby":P,multiple:h,accept:g,disabled:C,onChange:e=>{processFiles(e.target.files),e.target.value=``}}),u(`button`,{type:`button`,className:t.zone,"data-state":D.value?`dragover`:`idle`,disabled:C,"aria-labelledby":b?void 0:P,"aria-label":b,"aria-describedby":x?F:void 0,onClick:()=>E.current?.click(),onDragEnter:e=>{e.preventDefault(),C||(D.value=!0)},onDragOver:e=>{e.preventDefault(),C||(e.dataTransfer.dropEffect=`copy`)},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||(D.value=!1)},onDrop:e=>{e.preventDefault(),D.value=!1,!C&&processFiles(e.dataTransfer.files)},children:u(`span`,{className:t.zoneText,children:k})}),x&&u(`span`,{id:F,className:t.hint,children:x}),u(`span`,{id:I,className:t.srOnly,role:`status`,"aria-live":`polite`,children:f.length>0?l(s.fileUploader.status,{count:f.length,state:statusSummary(f,A,j,M)}):``}),f.length>0&&u(`ul`,{className:t.list,children:f.map(n=>d(`li`,{className:t.file,"data-state":n.status,children:[d(`span`,{className:t.status,children:[n.status===`uploading`&&u(e,{size:`sm`,label:A}),n.status===`complete`&&u(`span`,{className:t[`glyph-complete`],role:`img`,"aria-label":j,children:`✓`}),n.status===`error`&&u(`span`,{className:t[`glyph-error`],role:`img`,"aria-label":M,children:`✕`})]}),u(`span`,{className:t.name,children:n.name}),n.size!==void 0&&u(`span`,{className:t.size,children:formatSize(n.size,T)}),u(`button`,{type:`button`,className:t.remove,"aria-label":resolveRemove(n.name),disabled:C,onClick:()=>m?.(n.id),children:`✕`}),n.status===`error`&&n.errorMessage&&u(`span`,{className:t[`error-message`],role:`alert`,children:n.errorMessage})]},n.id))})]})}export{FileUploader};
|
package/dist/filter/filter.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import e from"./filter.module.js";import{useControllableSignal as t,useSignals as n}from"@cascivo/core";import{jsx as r}from"react/jsx-runtime";function
|
|
1
|
+
"use client";import e from"./filter.module.js";import{useControllableSignal as t,useSignals as n}from"@cascivo/core";import{jsx as r}from"react/jsx-runtime";function Filter({options:i,value:a,defaultValue:o=[],onValueChange:s,multi:c=!1,multiple:l,variant:u=`pill`,className:d,ariaLabel:f,label:p,...m}){n();let h=l??c,[g,_]=t({value:a,defaultValue:o,onChange:s});function toggle(e){let t=g.value,n;n=h?t.includes(e)?t.filter(t=>t!==e):[...t,e]:t.includes(e)?[]:[e],_(n)}return r(`div`,{role:`group`,className:[e.filter,d].filter(Boolean).join(` `),"data-variant":u,"aria-label":m[`aria-label`]??f??p,...m,children:i.map(t=>r(`button`,{type:`button`,className:e.item,"data-selected":g.value.includes(t.value)||void 0,onClick:()=>toggle(t.value),"aria-pressed":g.value.includes(t.value),children:t.label},t.value))})}export{Filter};
|
package/dist/form/form.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import e from"./form.module.js";import{batch as t,cn as n,signal as r,useSignal as i,useSignals as a}from"@cascivo/core";import{jsx as o}from"react/jsx-runtime";function
|
|
1
|
+
"use client";import e from"./form.module.js";import{batch as t,cn as n,signal as r,useSignal as i,useSignals as a}from"@cascivo/core";import{jsx as o}from"react/jsx-runtime";function pathHead(e){let t=e[0];return t===void 0?``:String(typeof t==`string`||typeof t==`number`?t:t.key)}async function runSchema(e,t){let n=await e[`~standard`].validate(t);if(!(`issues`in n)||n.issues===void 0)return{};let r={};for(let e of n.issues){let t=e.path&&e.path.length>0?pathHead(e.path):``;t&&!(t in r)&&(r[t]=e.message)}return r}function createForm(e){let n=r({...e.initialValues}),i=r({}),a=r({}),o=r(!1),validateValues=async t=>{let n={};return e.schema&&(n=await runSchema(e.schema,t)),Object.keys(n).length===0&&e.validate&&(n=await e.validate(t)),n},s=0,setValue=(t,r)=>{if(n.value={...n.value,[t]:r},!e.validateOnChange)return;let a=++s;validateValues(n.value).then(e=>{if(a!==s)return;let n={...i.value},r=e[t];r===void 0?delete n[t]:n[t]=r,i.value=n})};return{values:n,errors:i,touched:a,submitting:o,setValue,field(e){return{get value(){return n.value[e]},onChange:t=>setValue(e,t),onBlur:()=>{a.value={...a.value,[e]:!0}},get error(){return i.value[e]}}},async submit(r){o.value=!0;try{let o=await validateValues(n.value),s=Object.fromEntries(Object.keys(e.initialValues).map(e=>[e,!0]));t(()=>{i.value=o,a.value=s}),Object.keys(o).length===0&&await r(n.value)}finally{o.value=!1}},reset(){t(()=>{n.value={...e.initialValues},i.value={},a.value={}})}}}function useForm(e){a();let t=i(null);return t.peek()===null&&(t.value=createForm(e)),t.peek()}function Form({form:t,onValid:r,children:i,className:a,...s}){return o(`form`,{noValidate:!0,className:n(e.form,a),onSubmit:e=>{e.preventDefault(),t.submit(r)},...s,children:i})}export{Form,createForm,useForm};
|
package/dist/header/header.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import e from"./header.module.js";import{cn as t,getLinkComponent as n,useSignals as r}from"@cascivo/core";import{builtin as i,t as a}from"@cascivo/i18n";import{jsx as o,jsxs as s}from"react/jsx-runtime";function
|
|
1
|
+
"use client";import e from"./header.module.js";import{cn as t,getLinkComponent as n,useSignals as r}from"@cascivo/core";import{builtin as i,t as a}from"@cascivo/i18n";import{jsx as o,jsxs as s}from"react/jsx-runtime";function Header({brand:c,links:l,actions:u,sticky:d=!1,labels:f,className:p,...m}){r();let h=n(),g=f?.nav??a(i.header.nav);return s(`header`,{role:`banner`,"data-sticky":d||void 0,className:t(e.header,p),...m,children:[c&&o(`div`,{className:e.brand,children:c}),l&&l.length>0&&o(`nav`,{"aria-label":g,className:e.nav,children:o(`ul`,{className:e.list,children:l.map((t,n)=>o(`li`,{children:o(h,{href:t.href,"aria-current":t.active?`page`:void 0,"data-state":t.active?`active`:void 0,className:e.link,children:t.label})},t.id??`${n}-${t.href}`))})}),o(`div`,{className:e.spacer}),u&&o(`div`,{className:e.actions,children:u})]})}export{Header};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import e from"./header-panel.module.js";import{useRef as t}from"react";import{cn as n,focusElement as r,useEffectPropSignal as i,useSignalEffect as a,useSignals as o}from"@cascivo/core";import{builtin as s,t as c}from"@cascivo/i18n";import{jsx as l,jsxs as u}from"react/jsx-runtime";function
|
|
1
|
+
"use client";import e from"./header-panel.module.js";import{useRef as t}from"react";import{cn as n,focusElement as r,useEffectPropSignal as i,useSignalEffect as a,useSignals as o}from"@cascivo/core";import{builtin as s,t as c}from"@cascivo/i18n";import{jsx as l,jsxs as u}from"react/jsx-runtime";function HeaderPanel({open:d,onClose:f,label:p,children:m,labels:h,className:g}){o();let _=t(null),v=t(null),y=i(d),b=t(f);return b.current=f,a(()=>{let e=_.current;if(e)if(y.value){v.current=document.activeElement;try{e.showPopover()}catch{}e.focus()}else{try{e.hidePopover()}catch{}r(v.current),v.current=null}}),a(()=>{let e=_.current;if(!e)return;let handler=e=>{let t=`newState`in e?e.newState===`closed`:!0;y.peek()&&t&&b.current()};return e.addEventListener(`toggle`,handler),()=>e.removeEventListener(`toggle`,handler)}),u(`div`,{ref:_,popover:`auto`,role:`region`,"aria-label":p,tabIndex:-1,"data-state":d?`open`:`closed`,className:n(e.panel,g),children:[u(`div`,{className:e.header,children:[l(`span`,{className:e.title,children:p}),l(`button`,{type:`button`,"aria-label":h?.close??c(s.headerPanel.close),className:e.close,onClick:()=>b.current(),children:l(`svg`,{viewBox:`0 0 16 16`,width:`14`,height:`14`,"aria-hidden":`true`,children:l(`path`,{d:`M4 4l8 8M12 4l-8 8`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})})]}),l(`div`,{className:e.body,children:m})]})}export{HeaderPanel};
|
package/dist/heading/heading.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"./heading.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";var r={1:`2xl`,2:`xl`,3:`lg`,4:`md`,5:`sm`,6:`sm`};function
|
|
1
|
+
import e from"./heading.module.js";import{cn as t}from"@cascivo/core/pure";import{jsx as n}from"react/jsx-runtime";var r={1:`2xl`,2:`xl`,3:`lg`,4:`md`,5:`sm`,6:`sm`};function Heading({level:i=2,size:a,className:o,children:s,...c}){return n(`h${i}`,{"data-size":a??r[i],className:t(e.heading,o),...c,children:s})}export{Heading};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{usePopover as e}from"../popover/use-popover.js";import t from"./hover-card.module.js";import{createContext as n,useRef as r}from"react";import{useSignalEffect as i,useSignals as a}from"@cascivo/core";import{jsx as o}from"react/jsx-runtime";var s=n(null);function
|
|
1
|
+
"use client";import{usePopover as e}from"../popover/use-popover.js";import t from"./hover-card.module.js";import{createContext as n,useRef as r}from"react";import{useSignalEffect as i,useSignals as a}from"@cascivo/core";import{jsx as o}from"react/jsx-runtime";var s=n(null);function HoverCard({children:t,openDelay:n=300,closeDelay:a=100}){let c=e(),l=r(void 0),u=r(void 0),d=r(n);d.current=n;let f=r(a);f.current=a;let p={...c,open:()=>{clearTimeout(u.current),l.current=setTimeout(()=>{c.isOpen.value=!0},d.current)},close:()=>{clearTimeout(l.current),u.current=setTimeout(()=>{c.isOpen.value=!1},f.current)}};return i(()=>()=>{clearTimeout(l.current),clearTimeout(u.current)}),o(s.Provider,{value:p,children:t})}function HoverCardTriggerInner({ctx:e,children:n}){a();let{triggerRef:r,anchorName:i,open:s,close:c}=e;return o(`span`,{ref:r,style:{anchorName:i},onMouseEnter:s,onMouseLeave:c,onFocus:s,onBlur:c,className:t.trigger,children:n})}function HoverCardTrigger({children:e}){return o(s.Consumer,{children:t=>{if(!t)throw Error(`HoverCardTrigger must be inside <HoverCard>`);return o(HoverCardTriggerInner,{ctx:t,children:e})}})}function HoverCardContentInner({ctx:e,children:n,className:r}){a();let{popoverRef:i,anchorName:s,isOpen:c,open:l,close:u}=e;return o(`div`,{ref:i,popover:`auto`,role:`complementary`,"data-state":c.value?`open`:`closed`,style:{positionAnchor:s},onMouseEnter:l,onMouseLeave:u,className:[t.content,r].filter(Boolean).join(` `),children:n})}function HoverCardContent({children:e,className:t}){return o(s.Consumer,{children:n=>{if(!n)throw Error(`HoverCardContent must be inside <HoverCard>`);return o(HoverCardContentInner,{ctx:n,...t!==void 0&&{className:t},children:e})}})}export{HoverCard,HoverCardContent,HoverCardTrigger};
|
package/dist/image/image.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import e from"./image.module.js";import{cn as t,createMachine as n,useMachine as r,useSignals as i}from"@cascivo/core";import{jsx as a,jsxs as o}from"react/jsx-runtime";var s=n({initial:`loading`,states:{loading:{on:{LOADED:`loaded`,ERROR:`error`}},loaded:{},error:{}}});function
|
|
1
|
+
"use client";import e from"./image.module.js";import{cn as t,createMachine as n,useMachine as r,useSignals as i}from"@cascivo/core";import{jsx as a,jsxs as o}from"react/jsx-runtime";var s=n({initial:`loading`,states:{loading:{on:{LOADED:`loaded`,ERROR:`error`}},loaded:{},error:{}}});function Image({src:n,alt:c=``,fallbackSrc:l,width:u,height:d,radius:f=`md`,zoom:p=!1,removeWrapper:m=!1,isBlurred:h=!1,className:g,style:_,...v}){i();let[y,b]=r(s),x=y.value===`error`,S=x&&!l,C=x&&l?l:n,w={...u!==void 0&&{inlineSize:u},...d!==void 0&&{blockSize:d}};return m?a(`img`,{className:t(e.image,g),src:C,alt:c,onLoad:()=>b(`LOADED`),onError:()=>b(`ERROR`),style:{...w,..._},...v}):o(`span`,{"data-state":y.value,"data-radius":f,"data-zoom":p||void 0,"data-blurred":h||void 0,className:t(e.wrapper,g),style:{...w,..._},role:S?`img`:void 0,"aria-label":S?c:void 0,children:[y.value===`loading`&&a(`span`,{className:e.placeholder,"aria-hidden":`true`}),S?a(`span`,{className:e.fallback,"aria-hidden":`true`}):a(`img`,{className:e.image,src:C,alt:c,onLoad:()=>b(`LOADED`),onError:()=>b(`ERROR`),...v})]})}export{Image};
|