@bysages/solid 0.2.2 → 0.3.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/README.md +16 -2
- package/dist/ai-response-ClGGptX3.mjs +139 -0
- package/dist/chevron-D5RzcayK.mjs +9 -0
- package/dist/components/accordion/index.d.mts +7 -0
- package/dist/components/accordion/index.mjs +10 -0
- package/dist/components/affix/index.d.mts +20 -0
- package/dist/components/affix/index.mjs +33 -0
- package/dist/components/ai/index.d.mts +2 -0
- package/dist/components/ai/index.mjs +71 -0
- package/dist/components/ai-action/index.d.mts +13 -0
- package/dist/components/ai-action/index.mjs +27 -0
- package/dist/components/ai-attachments/index.d.mts +20 -0
- package/dist/components/ai-attachments/index.mjs +110 -0
- package/dist/components/ai-message/index.d.mts +13 -0
- package/dist/components/ai-message/index.mjs +22 -0
- package/dist/components/ai-prompt-input/index.d.mts +45 -0
- package/dist/components/ai-prompt-input/index.mjs +153 -0
- package/dist/components/ai-reasoning/index.d.mts +13 -0
- package/dist/components/ai-reasoning/index.mjs +38 -0
- package/dist/components/ai-response/index.d.mts +20 -0
- package/dist/components/ai-response/index.mjs +2 -0
- package/dist/components/ai-source/index.d.mts +13 -0
- package/dist/components/ai-source/index.mjs +36 -0
- package/dist/components/ai-suggestion/index.d.mts +13 -0
- package/dist/components/ai-suggestion/index.mjs +22 -0
- package/dist/components/ai-tool/index.d.mts +23 -0
- package/dist/components/ai-tool/index.mjs +90 -0
- package/dist/components/alert/index.d.mts +22 -0
- package/dist/components/alert/index.mjs +87 -0
- package/dist/components/angle-slider/index.d.mts +15 -0
- package/dist/components/angle-slider/index.mjs +18 -0
- package/dist/components/aspect-ratio/index.d.mts +10 -0
- package/dist/components/aspect-ratio/index.mjs +23 -0
- package/dist/components/autocomplete/index.d.mts +21 -0
- package/dist/components/autocomplete/index.mjs +76 -0
- package/dist/components/avatar/index.d.mts +23 -0
- package/dist/components/avatar/index.mjs +20 -0
- package/dist/components/avatar-group/index.d.mts +11 -0
- package/dist/components/avatar-group/index.mjs +20 -0
- package/dist/components/back-top/index.d.mts +29 -0
- package/dist/components/back-top/index.mjs +93 -0
- package/dist/components/badge/index.d.mts +10 -0
- package/dist/components/badge/index.mjs +23 -0
- package/dist/components/banner/index.d.mts +24 -0
- package/dist/components/banner/index.mjs +67 -0
- package/dist/components/bento/index.d.mts +24 -0
- package/dist/components/bento/index.mjs +51 -0
- package/dist/components/block-ui/index.d.mts +12 -0
- package/dist/components/block-ui/index.mjs +43 -0
- package/dist/components/breadcrumb/index.d.mts +11 -0
- package/dist/components/breadcrumb/index.mjs +45 -0
- package/dist/components/browser/index.d.mts +21 -0
- package/dist/components/browser/index.mjs +87 -0
- package/dist/components/button/index.d.mts +15 -0
- package/dist/components/button/index.mjs +43 -0
- package/dist/components/button-group/index.d.mts +23 -0
- package/dist/components/button-group/index.mjs +38 -0
- package/dist/components/calendar/index.d.mts +17 -0
- package/dist/components/calendar/index.mjs +209 -0
- package/dist/components/card/index.d.mts +11 -0
- package/dist/components/card/index.mjs +33 -0
- package/dist/components/carousel/index.d.mts +9 -0
- package/dist/components/carousel/index.mjs +12 -0
- package/dist/components/cascade-select/index.d.mts +31 -0
- package/dist/components/cascade-select/index.mjs +304 -0
- package/dist/components/checkbox/index.d.mts +15 -0
- package/dist/components/checkbox/index.mjs +18 -0
- package/dist/components/checkbox-group/index.d.mts +28 -0
- package/dist/components/checkbox-group/index.mjs +97 -0
- package/dist/components/chip/index.d.mts +12 -0
- package/dist/components/chip/index.mjs +36 -0
- package/dist/components/client-only/index.d.mts +2 -0
- package/dist/components/client-only/index.mjs +2 -0
- package/dist/components/clipboard/index.d.mts +16 -0
- package/dist/components/clipboard/index.mjs +19 -0
- package/dist/components/collapsible/index.d.mts +7 -0
- package/dist/components/collapsible/index.mjs +10 -0
- package/dist/components/collection/index.d.mts +2 -0
- package/dist/components/collection/index.mjs +2 -0
- package/dist/components/color-picker/index.d.mts +19 -0
- package/dist/components/color-picker/index.mjs +18 -0
- package/dist/components/combobox/index.d.mts +17 -0
- package/dist/components/combobox/index.mjs +18 -0
- package/dist/components/command/index.d.mts +43 -0
- package/dist/components/command/index.mjs +253 -0
- package/dist/components/comment/index.d.mts +17 -0
- package/dist/components/comment/index.mjs +101 -0
- package/dist/components/config-provider/index.d.mts +48 -0
- package/dist/components/config-provider/index.mjs +67 -0
- package/dist/components/container/index.d.mts +13 -0
- package/dist/components/container/index.mjs +23 -0
- package/dist/components/data-view/index.d.mts +18 -0
- package/dist/components/data-view/index.mjs +110 -0
- package/dist/components/date-input/index.d.mts +15 -0
- package/dist/components/date-input/index.mjs +18 -0
- package/dist/components/date-picker/index.d.mts +17 -0
- package/dist/components/date-picker/index.mjs +18 -0
- package/dist/components/deferred-content/index.d.mts +16 -0
- package/dist/components/deferred-content/index.mjs +52 -0
- package/dist/components/descriptions/index.d.mts +26 -0
- package/dist/components/descriptions/index.mjs +69 -0
- package/dist/components/dialog/index.d.mts +9 -0
- package/dist/components/dialog/index.mjs +11 -0
- package/dist/components/dock/index.d.mts +22 -0
- package/dist/components/dock/index.mjs +64 -0
- package/dist/components/download-trigger/index.d.mts +2 -0
- package/dist/components/download-trigger/index.mjs +2 -0
- package/dist/components/drawer/index.d.mts +9 -0
- package/dist/components/drawer/index.mjs +12 -0
- package/dist/components/dynamic-input/index.d.mts +30 -0
- package/dist/components/dynamic-input/index.mjs +119 -0
- package/dist/components/editable/index.d.mts +15 -0
- package/dist/components/editable/index.mjs +18 -0
- package/dist/components/ellipsis/index.d.mts +10 -0
- package/dist/components/ellipsis/index.mjs +27 -0
- package/dist/components/empty/index.d.mts +10 -0
- package/dist/components/empty/index.mjs +31 -0
- package/dist/components/field/index.d.mts +8 -0
- package/dist/components/field/index.mjs +11 -0
- package/dist/components/fieldset/index.d.mts +7 -0
- package/dist/components/fieldset/index.mjs +10 -0
- package/dist/components/file-upload/index.d.mts +17 -0
- package/dist/components/file-upload/index.mjs +18 -0
- package/dist/components/float-button/index.d.mts +61 -0
- package/dist/components/float-button/index.mjs +129 -0
- package/dist/components/floating-panel/index.d.mts +9 -0
- package/dist/components/floating-panel/index.mjs +12 -0
- package/dist/components/focus-trap/index.d.mts +2 -0
- package/dist/components/focus-trap/index.mjs +2 -0
- package/dist/components/form/index.d.mts +2 -0
- package/dist/components/form/index.mjs +125 -0
- package/dist/components/format/index.d.mts +9 -0
- package/dist/components/format/index.mjs +10 -0
- package/dist/components/frame/index.d.mts +10 -0
- package/dist/components/frame/index.mjs +12 -0
- package/dist/components/grid/index.d.mts +13 -0
- package/dist/components/grid/index.mjs +42 -0
- package/dist/components/highlight/index.d.mts +7 -0
- package/dist/components/highlight/index.mjs +11 -0
- package/dist/components/hover-card/index.d.mts +7 -0
- package/dist/components/hover-card/index.mjs +10 -0
- package/dist/components/icon/index.d.mts +24 -0
- package/dist/components/icon/index.mjs +54 -0
- package/dist/components/image/index.d.mts +17 -0
- package/dist/components/image/index.mjs +70 -0
- package/dist/components/image-cropper/index.d.mts +8 -0
- package/dist/components/image-cropper/index.mjs +11 -0
- package/dist/components/image-viewer/index.d.mts +19 -0
- package/dist/components/image-viewer/index.mjs +152 -0
- package/dist/components/input/index.d.mts +19 -0
- package/dist/components/input/index.mjs +2 -0
- package/dist/components/input-group/index.d.mts +18 -0
- package/dist/components/input-group/index.mjs +36 -0
- package/dist/components/json-tree-view/index.d.mts +7 -0
- package/dist/components/json-tree-view/index.mjs +10 -0
- package/dist/components/kbd/index.d.mts +6 -0
- package/dist/components/kbd/index.mjs +15 -0
- package/dist/components/layout/index.d.mts +60 -0
- package/dist/components/layout/index.mjs +192 -0
- package/dist/components/link/index.d.mts +10 -0
- package/dist/components/link/index.mjs +24 -0
- package/dist/components/list/index.d.mts +26 -0
- package/dist/components/list/index.mjs +97 -0
- package/dist/components/listbox/index.d.mts +17 -0
- package/dist/components/listbox/index.mjs +19 -0
- package/dist/components/marquee/index.d.mts +7 -0
- package/dist/components/marquee/index.mjs +10 -0
- package/dist/components/masonry/index.d.mts +11 -0
- package/dist/components/masonry/index.mjs +34 -0
- package/dist/components/mentions/index.d.mts +2 -0
- package/dist/components/mentions/index.mjs +3 -0
- package/dist/components/menu/index.d.mts +13 -0
- package/dist/components/menu/index.mjs +38 -0
- package/dist/components/menubar/index.d.mts +32 -0
- package/dist/components/menubar/index.mjs +83 -0
- package/dist/components/meter/index.d.mts +21 -0
- package/dist/components/meter/index.mjs +95 -0
- package/dist/components/navigation-menu/index.d.mts +8 -0
- package/dist/components/navigation-menu/index.mjs +11 -0
- package/dist/components/number-input/index.d.mts +15 -0
- package/dist/components/number-input/index.mjs +18 -0
- package/dist/components/order-list/index.d.mts +21 -0
- package/dist/components/order-list/index.mjs +160 -0
- package/dist/components/page-header/index.d.mts +11 -0
- package/dist/components/page-header/index.mjs +34 -0
- package/dist/components/pagination/index.d.mts +17 -0
- package/dist/components/pagination/index.mjs +18 -0
- package/dist/components/password-input/index.d.mts +15 -0
- package/dist/components/password-input/index.mjs +18 -0
- package/dist/components/pin-input/index.d.mts +14 -0
- package/dist/components/pin-input/index.mjs +18 -0
- package/dist/components/popconfirm/index.d.mts +17 -0
- package/dist/components/popconfirm/index.mjs +85 -0
- package/dist/components/popover/index.d.mts +8 -0
- package/dist/components/popover/index.mjs +11 -0
- package/dist/components/presence/index.d.mts +2 -0
- package/dist/components/presence/index.mjs +2 -0
- package/dist/components/progress/index.d.mts +15 -0
- package/dist/components/progress/index.mjs +18 -0
- package/dist/components/progress-group/index.d.mts +22 -0
- package/dist/components/progress-group/index.mjs +84 -0
- package/dist/components/qr-code/index.d.mts +8 -0
- package/dist/components/qr-code/index.mjs +11 -0
- package/dist/components/radio-group/index.d.mts +15 -0
- package/dist/components/radio-group/index.mjs +18 -0
- package/dist/components/rating-group/index.d.mts +15 -0
- package/dist/components/rating-group/index.mjs +18 -0
- package/dist/components/result/index.d.mts +22 -0
- package/dist/components/result/index.mjs +66 -0
- package/dist/components/scroll-area/index.d.mts +7 -0
- package/dist/components/scroll-area/index.mjs +10 -0
- package/dist/components/segment-group/index.d.mts +17 -0
- package/dist/components/segment-group/index.mjs +23 -0
- package/dist/components/select/index.d.mts +2 -0
- package/dist/components/select/index.mjs +2 -0
- package/dist/components/separator/index.d.mts +11 -0
- package/dist/components/separator/index.mjs +27 -0
- package/dist/components/signature-pad/index.d.mts +8 -0
- package/dist/components/signature-pad/index.mjs +11 -0
- package/dist/components/skeleton/index.d.mts +7 -0
- package/dist/components/skeleton/index.mjs +15 -0
- package/dist/components/slider/index.d.mts +15 -0
- package/dist/components/slider/index.mjs +18 -0
- package/dist/components/spinner/index.d.mts +9 -0
- package/dist/components/spinner/index.mjs +26 -0
- package/dist/components/split-button/index.d.mts +36 -0
- package/dist/components/split-button/index.mjs +124 -0
- package/dist/components/splitter/index.d.mts +7 -0
- package/dist/components/splitter/index.mjs +10 -0
- package/dist/components/spotlight/index.d.mts +11 -0
- package/dist/components/spotlight/index.mjs +38 -0
- package/dist/components/stack/index.d.mts +11 -0
- package/dist/components/stack/index.mjs +45 -0
- package/dist/components/stat/index.d.mts +17 -0
- package/dist/components/stat/index.mjs +44 -0
- package/dist/components/steps/index.d.mts +18 -0
- package/dist/components/steps/index.mjs +18 -0
- package/dist/components/swap/index.d.mts +8 -0
- package/dist/components/swap/index.mjs +11 -0
- package/dist/components/switch/index.d.mts +15 -0
- package/dist/components/switch/index.mjs +18 -0
- package/dist/components/table/index.d.mts +77 -0
- package/dist/components/table/index.mjs +837 -0
- package/dist/components/tabs/index.d.mts +19 -0
- package/dist/components/tabs/index.mjs +23 -0
- package/dist/components/tags-input/index.d.mts +16 -0
- package/dist/components/tags-input/index.mjs +18 -0
- package/dist/components/terminal/index.d.mts +17 -0
- package/dist/components/terminal/index.mjs +84 -0
- package/dist/components/textarea/index.d.mts +14 -0
- package/dist/components/textarea/index.mjs +37 -0
- package/dist/components/timeline/index.d.mts +15 -0
- package/dist/components/timeline/index.mjs +44 -0
- package/dist/components/timer/index.d.mts +8 -0
- package/dist/components/timer/index.mjs +11 -0
- package/dist/components/toast/index.d.mts +11 -0
- package/dist/components/toast/index.mjs +13 -0
- package/dist/components/toc/index.d.mts +7 -0
- package/dist/components/toc/index.mjs +10 -0
- package/dist/components/toggle/index.d.mts +7 -0
- package/dist/components/toggle/index.mjs +10 -0
- package/dist/components/toggle-group/index.d.mts +14 -0
- package/dist/components/toggle-group/index.mjs +18 -0
- package/dist/components/toolbar/index.d.mts +17 -0
- package/dist/components/toolbar/index.mjs +46 -0
- package/dist/components/tooltip/index.d.mts +7 -0
- package/dist/components/tooltip/index.mjs +10 -0
- package/dist/components/tour/index.d.mts +11 -0
- package/dist/components/tour/index.mjs +13 -0
- package/dist/components/transfer/index.d.mts +24 -0
- package/dist/components/transfer/index.mjs +175 -0
- package/dist/components/tree-select/index.d.mts +28 -0
- package/dist/components/tree-select/index.mjs +253 -0
- package/dist/components/tree-view/index.d.mts +18 -0
- package/dist/components/tree-view/index.mjs +19 -0
- package/dist/components/typography/index.d.mts +11 -0
- package/dist/components/typography/index.mjs +34 -0
- package/dist/components/user/index.d.mts +19 -0
- package/dist/components/user/index.mjs +68 -0
- package/dist/components/virtual-list/index.d.mts +17 -0
- package/dist/components/virtual-list/index.mjs +71 -0
- package/dist/components/watermark/index.d.mts +17 -0
- package/dist/components/watermark/index.mjs +77 -0
- package/dist/index-B1xiJ5ki.d.mts +1811 -0
- package/dist/index-DDX7x8aT.d.mts +95 -0
- package/dist/index-IfofF-SW.d.mts +10356 -0
- package/dist/index-YPUiqD3n.d.mts +42 -0
- package/dist/index.d.mts +141 -15209
- package/dist/index.mjs +141 -6171
- package/dist/input-DoFQ7RXh.mjs +78 -0
- package/dist/mentions-f5Js_2W7.mjs +263 -0
- package/dist/select-CHaXbzLX.mjs +115 -0
- package/package.json +101 -7
|
@@ -0,0 +1,837 @@
|
|
|
1
|
+
import { Pagination } from "../pagination/index.mjs";
|
|
2
|
+
import { t as Select$1 } from "../../select-CHaXbzLX.mjs";
|
|
3
|
+
import { injectComponentStyle } from "@bysages/core";
|
|
4
|
+
import { addEvent, createComponent, delegateEvents, effect, insert, memo, readShallow, ref, setAttribute, setStyleProperty, spread, style, template } from "@solidjs/web";
|
|
5
|
+
import { For, createMemo, createSignal, onCleanup, onMount } from "solid-js";
|
|
6
|
+
import { createListCollection } from "@ark-ui/solid/select";
|
|
7
|
+
import { FlexRender, cellSpanningFeature, columnFilteringFeature, columnOrderingFeature, columnPinningFeature, columnSizingFeature, columnVisibilityFeature, createColumnHelper, createExpandedRowModel, createFilteredRowModel, createPaginatedRowModel, createSortedRowModel, createTable, filterFn_arrIncludes, filterFn_equals, filterFn_inDateRange, filterFn_inNumberRange, filterFn_includesString, filterFn_weakEquals, globalFilteringFeature, rowExpandingFeature, rowPaginationFeature, rowSelectionFeature, rowSortingFeature, sortFn_alphanumeric, sortFn_alphanumericCaseSensitive, sortFn_basic, sortFn_datetime, sortFn_text, sortFn_textCaseSensitive, tableFeatures } from "@tanstack/solid-table";
|
|
8
|
+
import { createVirtualizer } from "@tanstack/solid-virtual";
|
|
9
|
+
//#region src/components/table/index.tsx
|
|
10
|
+
var _tmpl$ = /* @__PURE__ */ template(`<svg viewBox="0 0 24 24"width=14 height=14 fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path>`);
|
|
11
|
+
var _tmpl$2 = /* @__PURE__ */ template(`<svg viewBox="0 0 24 24"width=14 height=14 fill=none stroke=currentColor stroke-width=2.5 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="m6 9 6 6 6-6">`);
|
|
12
|
+
var _tmpl$3 = /* @__PURE__ */ template(`<svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2.5 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="m9 6 6 6-6 6">`);
|
|
13
|
+
var _tmpl$4 = /* @__PURE__ */ template(`<input>`);
|
|
14
|
+
var _tmpl$5 = /* @__PURE__ */ template(`<div data-scope=table data-part=cell-main><button type=button data-scope=table data-part=expander>`);
|
|
15
|
+
var _tmpl$6 = /* @__PURE__ */ template(`<div>`);
|
|
16
|
+
var _tmpl$7 = /* @__PURE__ */ template(`<div role=row data-scope=table data-part=row>`);
|
|
17
|
+
var _tmpl$8 = /* @__PURE__ */ template(`<div><!><!>`);
|
|
18
|
+
var _tmpl$9 = /* @__PURE__ */ template(`<input type=text data-scope=table data-part=header-filter placeholder=Filter>`);
|
|
19
|
+
var _tmpl$10 = /* @__PURE__ */ template(`<div data-scope=table data-part=root><div data-scope=table data-part=viewport><div role=table data-scope=table data-part=table><div role=rowgroup data-scope=table data-part=header></div><div role=rowgroup data-scope=table data-part=body><!><!></div></div></div><!>`);
|
|
20
|
+
var _tmpl$11 = /* @__PURE__ */ template(`<div data-scope=table data-part=toolbar><input type=search data-scope=table data-part=global-filter aria-label="Filter all columns">`);
|
|
21
|
+
var _tmpl$12 = /* @__PURE__ */ template(`<div><input>`);
|
|
22
|
+
var _tmpl$13 = /* @__PURE__ */ template(`<div data-scope=table data-part=empty>`);
|
|
23
|
+
var _tmpl$14 = /* @__PURE__ */ template(`<div role=rowgroup data-scope=table data-part=footer>`);
|
|
24
|
+
var _tmpl$15 = /* @__PURE__ */ template(`<div data-scope=table data-part=pagination><span data-scope=table data-part=page-status></span><div data-scope=table data-part=page-nav><!><!>`);
|
|
25
|
+
/** The pagination bar's arrows — thin chevrons for the row of seals. */
|
|
26
|
+
function pageGlyph(direction) {
|
|
27
|
+
var _el$ = _tmpl$();
|
|
28
|
+
var _el$2 = _el$.firstChild;
|
|
29
|
+
setAttribute(_el$2, "d", direction === "start" ? "m15 18-6-6 6-6" : "m9 18 6-6-6-6");
|
|
30
|
+
return _el$;
|
|
31
|
+
}
|
|
32
|
+
/** The page-size select's pointing chevron. */
|
|
33
|
+
function chevronDownGlyph() {
|
|
34
|
+
return _tmpl$2();
|
|
35
|
+
}
|
|
36
|
+
const SELECT_COL_ID = "__select";
|
|
37
|
+
const SELECT_COL_WIDTH = 48;
|
|
38
|
+
/** The list holding `id` and the index inside it, or null when absent. */
|
|
39
|
+
function findNode(rows, id) {
|
|
40
|
+
for (let index = 0; index < rows.length; index++) {
|
|
41
|
+
const row = rows[index];
|
|
42
|
+
if (String(row.id) === id) return {
|
|
43
|
+
list: rows,
|
|
44
|
+
index
|
|
45
|
+
};
|
|
46
|
+
if (row.subRows) {
|
|
47
|
+
const hit = findNode(row.subRows, id);
|
|
48
|
+
if (hit) return hit;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
/** True when `id` sits anywhere in the node's subtree — dropping a node
|
|
54
|
+
* into its own descendants would orphan it. */
|
|
55
|
+
function containsNode(node, id) {
|
|
56
|
+
return !!node.subRows?.some((child) => String(child.id) === id || containsNode(child, id));
|
|
57
|
+
}
|
|
58
|
+
/** Rebuild every array along the path to `id`, leaving sibling branches
|
|
59
|
+
* untouched by reference (TanStack's memoization keeps their rows). */
|
|
60
|
+
function removeById(rows, id) {
|
|
61
|
+
const next = [];
|
|
62
|
+
for (const row of rows) {
|
|
63
|
+
if (String(row.id) === id) continue;
|
|
64
|
+
next.push(row.subRows ? {
|
|
65
|
+
...row,
|
|
66
|
+
subRows: removeById(row.subRows, id)
|
|
67
|
+
} : row);
|
|
68
|
+
}
|
|
69
|
+
return next;
|
|
70
|
+
}
|
|
71
|
+
/** Rebuild the path to `id` and swap the node for `patch(node)`. */
|
|
72
|
+
function replaceById(rows, id, patch) {
|
|
73
|
+
return rows.map((row) => {
|
|
74
|
+
if (String(row.id) === id) return patch(row);
|
|
75
|
+
return row.subRows ? {
|
|
76
|
+
...row,
|
|
77
|
+
subRows: replaceById(row.subRows, id, patch)
|
|
78
|
+
} : row;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/** Toggle one drop-indicator attribute without rewriting it every event. */
|
|
82
|
+
function mark(el, attr, on) {
|
|
83
|
+
if (on) el.setAttribute(attr, "");
|
|
84
|
+
else el.removeAttribute(attr);
|
|
85
|
+
}
|
|
86
|
+
const chevronGlyph = _tmpl$3();
|
|
87
|
+
function DataTable(props) {
|
|
88
|
+
injectComponentStyle("table");
|
|
89
|
+
if (props.virtual && props.merge) console.warn("[DataTable] `virtual` and `merge` are mutually exclusive; merge wins.");
|
|
90
|
+
/** Features follow the construction-time switches: sorting, selection,
|
|
91
|
+
* expansion, pinning, and spanning are always part of the one-stop
|
|
92
|
+
* shape; filtering and pagination ride their own render paths. */
|
|
93
|
+
const features = tableFeatures({
|
|
94
|
+
rowSortingFeature,
|
|
95
|
+
sortedRowModel: createSortedRowModel(),
|
|
96
|
+
sortFns: {
|
|
97
|
+
alphanumeric: sortFn_alphanumeric,
|
|
98
|
+
alphanumericCaseSensitive: sortFn_alphanumericCaseSensitive,
|
|
99
|
+
basic: sortFn_basic,
|
|
100
|
+
datetime: sortFn_datetime,
|
|
101
|
+
text: sortFn_text,
|
|
102
|
+
textCaseSensitive: sortFn_textCaseSensitive
|
|
103
|
+
},
|
|
104
|
+
rowSelectionFeature,
|
|
105
|
+
rowExpandingFeature,
|
|
106
|
+
expandedRowModel: createExpandedRowModel(),
|
|
107
|
+
columnPinningFeature,
|
|
108
|
+
columnOrderingFeature,
|
|
109
|
+
columnSizingFeature,
|
|
110
|
+
columnVisibilityFeature,
|
|
111
|
+
cellSpanningFeature,
|
|
112
|
+
...props.filterable ? {
|
|
113
|
+
columnFilteringFeature,
|
|
114
|
+
globalFilteringFeature,
|
|
115
|
+
filteredRowModel: createFilteredRowModel(),
|
|
116
|
+
filterFns: {
|
|
117
|
+
arrIncludes: filterFn_arrIncludes,
|
|
118
|
+
equals: filterFn_equals,
|
|
119
|
+
includesString: filterFn_includesString,
|
|
120
|
+
inDateRange: filterFn_inDateRange,
|
|
121
|
+
inNumberRange: filterFn_inNumberRange,
|
|
122
|
+
weakEquals: filterFn_weakEquals
|
|
123
|
+
}
|
|
124
|
+
} : {},
|
|
125
|
+
...props.paginated ? {
|
|
126
|
+
rowPaginationFeature,
|
|
127
|
+
paginatedRowModel: createPaginatedRowModel()
|
|
128
|
+
} : {}
|
|
129
|
+
});
|
|
130
|
+
const mergeIds = new Set(props.merge ?? []);
|
|
131
|
+
const defId = (def) => def.id ?? ("accessorKey" in def ? String(def.accessorKey) : "");
|
|
132
|
+
const columns = props.columns.map((def) => mergeIds.has(defId(def)) ? {
|
|
133
|
+
...def,
|
|
134
|
+
spanRows: true
|
|
135
|
+
} : def);
|
|
136
|
+
if (props.selectable) columns.unshift({
|
|
137
|
+
id: SELECT_COL_ID,
|
|
138
|
+
size: SELECT_COL_WIDTH,
|
|
139
|
+
enableSorting: false,
|
|
140
|
+
header: () => "",
|
|
141
|
+
cell: () => ""
|
|
142
|
+
});
|
|
143
|
+
const table = createTable({
|
|
144
|
+
features,
|
|
145
|
+
columns,
|
|
146
|
+
get data() {
|
|
147
|
+
return props.data;
|
|
148
|
+
},
|
|
149
|
+
enableSorting: props.sortable !== false,
|
|
150
|
+
getRowId: (row) => String(row.id),
|
|
151
|
+
getSubRows: (row) => row.subRows,
|
|
152
|
+
autoResetExpanded: false,
|
|
153
|
+
initialState: {
|
|
154
|
+
...props.initialSorting ? { sorting: props.initialSorting } : {},
|
|
155
|
+
...props.paginated ? { pagination: {
|
|
156
|
+
pageIndex: 0,
|
|
157
|
+
pageSize: props.pageSize ?? 10
|
|
158
|
+
} } : {},
|
|
159
|
+
...props.pinStart || props.pinEnd ? { columnPinning: {
|
|
160
|
+
start: props.pinStart ?? [],
|
|
161
|
+
end: props.pinEnd ?? []
|
|
162
|
+
} } : {}
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
const [viewport, setViewport] = createSignal(null);
|
|
166
|
+
const rows = createMemo(() => table.getRowModel().rows);
|
|
167
|
+
/** The declared row height is the density-scale baseline; the live
|
|
168
|
+
* scale comes off the document so the virtual window matches what CSS
|
|
169
|
+
* actually renders. It is read once and re-read only when the density
|
|
170
|
+
* or scene attribute moves — estimateSize runs on every scroll frame. */
|
|
171
|
+
const baseRowHeight = () => props.rowHeight ?? 40;
|
|
172
|
+
let densityScale = 1;
|
|
173
|
+
const readDensityScale = () => {
|
|
174
|
+
const value = Number(getComputedStyle(document.documentElement).getPropertyValue("--bs-density-scale"));
|
|
175
|
+
densityScale = Number.isFinite(value) && value > 0 ? value : 1;
|
|
176
|
+
};
|
|
177
|
+
const virtualizer = createVirtualizer({
|
|
178
|
+
get count() {
|
|
179
|
+
return rows().length;
|
|
180
|
+
},
|
|
181
|
+
getScrollElement: () => viewport(),
|
|
182
|
+
estimateSize: () => baseRowHeight() * densityScale,
|
|
183
|
+
getItemKey: (index) => rows()[index]?.id ?? index,
|
|
184
|
+
overscan: 8
|
|
185
|
+
});
|
|
186
|
+
onMount(() => {
|
|
187
|
+
if (typeof MutationObserver === "undefined") return;
|
|
188
|
+
readDensityScale();
|
|
189
|
+
const densityObserver = new MutationObserver(() => {
|
|
190
|
+
readDensityScale();
|
|
191
|
+
virtualizer.measure();
|
|
192
|
+
});
|
|
193
|
+
densityObserver.observe(document.documentElement, {
|
|
194
|
+
attributes: true,
|
|
195
|
+
attributeFilter: ["data-density", "data-scene"]
|
|
196
|
+
});
|
|
197
|
+
onCleanup(() => densityObserver.disconnect());
|
|
198
|
+
});
|
|
199
|
+
const virtual = () => props.virtual && !props.merge;
|
|
200
|
+
const mergeMode = () => !props.virtual && !!props.merge;
|
|
201
|
+
/** Column ids of the visible leaves, for pin-seam bookkeeping. */
|
|
202
|
+
const leafIds = createMemo(() => table.getAllLeafColumns().map((c) => c.id));
|
|
203
|
+
const expandHostId = createMemo(() => {
|
|
204
|
+
const id = leafIds().find((id) => id !== SELECT_COL_ID);
|
|
205
|
+
return props.tree ? id : void 0;
|
|
206
|
+
});
|
|
207
|
+
/** Track list for every grid in the table; explicit sizes pin to px,
|
|
208
|
+
* everything else flexes. */
|
|
209
|
+
const colsTemplate = createMemo(() => table.getAllLeafColumns().map((column) => {
|
|
210
|
+
if (column.id === SELECT_COL_ID) return `${SELECT_COL_WIDTH}px`;
|
|
211
|
+
const def = props.columns.find((d) => d.id === column.id || "accessorKey" in d && String(d.accessorKey) === column.id);
|
|
212
|
+
return def?.size != null ? `${def.size}px` : def?.minSize != null ? `minmax(${def.minSize}px, 1fr)` : "1fr";
|
|
213
|
+
}).join(" "));
|
|
214
|
+
/** Inline placement for pinned cells plus the seam attributes the
|
|
215
|
+
* stylesheet reads. */
|
|
216
|
+
function pinAttrs(column) {
|
|
217
|
+
const pinned = column.getIsPinned();
|
|
218
|
+
if (!pinned) return { "data-pinned": void 0 };
|
|
219
|
+
const offset = pinned === "start" ? column.getStart("start") : column.getAfter("end");
|
|
220
|
+
const siblings = leafIds();
|
|
221
|
+
const index = siblings.indexOf(column.id);
|
|
222
|
+
const prev = index > 0 ? table.getColumn(siblings[index - 1]) : void 0;
|
|
223
|
+
const next = index < siblings.length - 1 ? table.getColumn(siblings[index + 1]) : void 0;
|
|
224
|
+
return {
|
|
225
|
+
"data-pinned": pinned,
|
|
226
|
+
"data-last-pinned": pinned === "start" && next?.getIsPinned() !== "start" ? "" : void 0,
|
|
227
|
+
"data-first-pinned": pinned === "end" && prev?.getIsPinned() !== "end" ? "" : void 0,
|
|
228
|
+
style: { "--pin-offset": `${offset}px` }
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
let dragColId = null;
|
|
232
|
+
let dragRowId = null;
|
|
233
|
+
let lastColDrop = null;
|
|
234
|
+
let lastRowDrop = null;
|
|
235
|
+
function clearColDrop() {
|
|
236
|
+
if (lastColDrop) {
|
|
237
|
+
lastColDrop.removeAttribute("data-drop-before-col");
|
|
238
|
+
lastColDrop.removeAttribute("data-drop-after-col");
|
|
239
|
+
lastColDrop = null;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
function clearRowDrop() {
|
|
243
|
+
if (lastRowDrop) {
|
|
244
|
+
lastRowDrop.removeAttribute("data-drop-before");
|
|
245
|
+
lastRowDrop.removeAttribute("data-drop-inside");
|
|
246
|
+
lastRowDrop.removeAttribute("data-drop-after");
|
|
247
|
+
lastRowDrop.style.removeProperty("--bs-drop-indent");
|
|
248
|
+
lastRowDrop = null;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
function onColDragStart(e) {
|
|
252
|
+
dragColId = e.currentTarget.dataset.id;
|
|
253
|
+
e.dataTransfer.effectAllowed = "move";
|
|
254
|
+
e.dataTransfer.setData("text/plain", dragColId);
|
|
255
|
+
e.currentTarget.setAttribute("data-dragging", "");
|
|
256
|
+
}
|
|
257
|
+
/** Header cells answer drops on either side of their midpoint; pinned
|
|
258
|
+
* columns and the drag source themselves never light up. */
|
|
259
|
+
function onColDragOver(column, e) {
|
|
260
|
+
if (!dragColId || dragColId === column.id || column.getIsPinned()) return;
|
|
261
|
+
e.preventDefault();
|
|
262
|
+
e.dataTransfer.dropEffect = "move";
|
|
263
|
+
const el = e.currentTarget;
|
|
264
|
+
if (lastColDrop !== el) clearColDrop();
|
|
265
|
+
const before = e.clientX < el.getBoundingClientRect().left + el.getBoundingClientRect().width / 2;
|
|
266
|
+
mark(el, "data-drop-before-col", before);
|
|
267
|
+
mark(el, "data-drop-after-col", !before);
|
|
268
|
+
lastColDrop = el;
|
|
269
|
+
}
|
|
270
|
+
function onColDragLeave(e) {
|
|
271
|
+
if (e.currentTarget === lastColDrop) clearColDrop();
|
|
272
|
+
}
|
|
273
|
+
function onColDrop(column, e) {
|
|
274
|
+
e.preventDefault();
|
|
275
|
+
if (!dragColId || dragColId === column.id) return;
|
|
276
|
+
const el = e.currentTarget;
|
|
277
|
+
const before = e.clientX < el.getBoundingClientRect().left + el.getBoundingClientRect().width / 2;
|
|
278
|
+
const state = table.atoms.columnOrder.get();
|
|
279
|
+
const order = (state.length ? [...state] : table.getAllLeafColumns().map((c) => c.id)).filter((id) => id !== dragColId);
|
|
280
|
+
const at = order.indexOf(column.id);
|
|
281
|
+
order.splice(before ? at : at + 1, 0, dragColId);
|
|
282
|
+
const selectAt = order.indexOf(SELECT_COL_ID);
|
|
283
|
+
if (selectAt > 0) {
|
|
284
|
+
order.splice(selectAt, 1);
|
|
285
|
+
order.unshift(SELECT_COL_ID);
|
|
286
|
+
}
|
|
287
|
+
table.setColumnOrder(order);
|
|
288
|
+
props.onColumnReorder?.(order);
|
|
289
|
+
clearColDrop();
|
|
290
|
+
}
|
|
291
|
+
function onColDragEnd(e) {
|
|
292
|
+
dragColId = null;
|
|
293
|
+
e.currentTarget.removeAttribute("data-dragging");
|
|
294
|
+
clearColDrop();
|
|
295
|
+
}
|
|
296
|
+
/** Row dragging rests while any view (sorting, filtering, pagination
|
|
297
|
+
* past the first page) stands between the display order and the data
|
|
298
|
+
* order — a drop there would lie about what it reordered. */
|
|
299
|
+
const rowDraggable = createMemo(() => {
|
|
300
|
+
if (!props.reorderable || mergeMode()) return false;
|
|
301
|
+
if (table.atoms.sorting.get().length) return false;
|
|
302
|
+
if (props.filterable && (table.atoms.columnFilters.get().length || table.atoms.globalFilter.get())) return false;
|
|
303
|
+
if (props.paginated && table.atoms.pagination.get().pageIndex !== 0) return false;
|
|
304
|
+
return true;
|
|
305
|
+
});
|
|
306
|
+
function onRowDragStart(row, e) {
|
|
307
|
+
dragRowId = String(row.id);
|
|
308
|
+
e.dataTransfer.effectAllowed = "move";
|
|
309
|
+
e.dataTransfer.setData("text/plain", dragRowId);
|
|
310
|
+
e.currentTarget.setAttribute("data-dragging", "");
|
|
311
|
+
}
|
|
312
|
+
/** Where a tree drop lands: the outer bands of the target row read as
|
|
313
|
+
* sibling slots (40% each, so the insertion line answers the hand
|
|
314
|
+
* everywhere and indents to the reference row's own depth — cross a
|
|
315
|
+
* boundary and the level flips from the row above's to the row
|
|
316
|
+
* below's); the narrow middle band reads as "make child". A node
|
|
317
|
+
* never drops into its own subtree. */
|
|
318
|
+
function rowZone(row, e) {
|
|
319
|
+
const box = e.currentTarget.getBoundingClientRect();
|
|
320
|
+
const pos = (e.clientY - box.top) / box.height;
|
|
321
|
+
return pos < .4 ? "before" : pos > .6 ? "after" : "inside";
|
|
322
|
+
}
|
|
323
|
+
function onRowDragOver(row, e) {
|
|
324
|
+
if (!dragRowId || dragRowId === String(row.id)) return;
|
|
325
|
+
const el = e.currentTarget;
|
|
326
|
+
let zone;
|
|
327
|
+
if (props.tree) {
|
|
328
|
+
const hit = findNode(props.data, dragRowId);
|
|
329
|
+
const dragged = hit?.list[hit.index];
|
|
330
|
+
if (!dragged || containsNode(dragged, String(row.id))) return;
|
|
331
|
+
zone = rowZone(row, e);
|
|
332
|
+
} else {
|
|
333
|
+
const box = el.getBoundingClientRect();
|
|
334
|
+
zone = e.clientY - box.top < box.height / 2 ? "before" : "after";
|
|
335
|
+
}
|
|
336
|
+
e.preventDefault();
|
|
337
|
+
e.dataTransfer.dropEffect = "move";
|
|
338
|
+
if (lastRowDrop !== el) clearRowDrop();
|
|
339
|
+
mark(el, "data-drop-before", zone === "before");
|
|
340
|
+
mark(el, "data-drop-inside", zone === "inside");
|
|
341
|
+
mark(el, "data-drop-after", zone === "after");
|
|
342
|
+
el.style.setProperty("--bs-drop-indent", String(props.tree ? row.depth : 0));
|
|
343
|
+
lastRowDrop = el;
|
|
344
|
+
}
|
|
345
|
+
function onRowDragLeave(e) {
|
|
346
|
+
if (e.currentTarget === lastRowDrop) clearRowDrop();
|
|
347
|
+
}
|
|
348
|
+
function onRowDrop(row, e) {
|
|
349
|
+
e.preventDefault();
|
|
350
|
+
if (!dragRowId || dragRowId === String(row.id)) return;
|
|
351
|
+
const box = e.currentTarget.getBoundingClientRect();
|
|
352
|
+
const targetId = String(row.id);
|
|
353
|
+
if (props.tree) {
|
|
354
|
+
const zone = rowZone(row, e);
|
|
355
|
+
const hit = findNode(props.data, dragRowId);
|
|
356
|
+
const dragged = hit?.list[hit.index];
|
|
357
|
+
if (!dragged || containsNode(dragged, targetId)) return;
|
|
358
|
+
let next = removeById(props.data, dragRowId);
|
|
359
|
+
if (zone === "inside") next = replaceById(next, targetId, (node) => ({
|
|
360
|
+
...node,
|
|
361
|
+
subRows: [...node.subRows ?? [], dragged]
|
|
362
|
+
}));
|
|
363
|
+
else {
|
|
364
|
+
const slot = findNode(next, targetId);
|
|
365
|
+
if (!slot) return;
|
|
366
|
+
slot.list.splice(slot.index + (zone === "after" ? 1 : 0), 0, dragged);
|
|
367
|
+
}
|
|
368
|
+
props.onRowReorder?.(next);
|
|
369
|
+
} else {
|
|
370
|
+
const pos = (e.clientY - box.top) / box.height;
|
|
371
|
+
const from = props.data.findIndex((r) => String(r.id) === dragRowId);
|
|
372
|
+
const to = props.data.findIndex((r) => String(r.id) === targetId);
|
|
373
|
+
if (from < 0 || to < 0) return;
|
|
374
|
+
const next = [...props.data];
|
|
375
|
+
const [moved] = next.splice(from, 1);
|
|
376
|
+
const slot = to > from ? to - 1 : to;
|
|
377
|
+
next.splice(pos < .5 ? slot : slot + 1, 0, moved);
|
|
378
|
+
props.onRowReorder?.(next);
|
|
379
|
+
}
|
|
380
|
+
clearRowDrop();
|
|
381
|
+
}
|
|
382
|
+
function onRowDragEnd(e) {
|
|
383
|
+
dragRowId = null;
|
|
384
|
+
e.currentTarget.removeAttribute("data-dragging");
|
|
385
|
+
clearRowDrop();
|
|
386
|
+
}
|
|
387
|
+
function renderCell(cell, row) {
|
|
388
|
+
const column = cell.column;
|
|
389
|
+
if (cell.getIsCovered()) return null;
|
|
390
|
+
const isExpandHost = column.id === expandHostId();
|
|
391
|
+
const pin = pinAttrs(column);
|
|
392
|
+
const pinStyle = pin.style ?? {};
|
|
393
|
+
delete pin.style;
|
|
394
|
+
const rowSpan = cell.getRowSpan();
|
|
395
|
+
const style = {
|
|
396
|
+
...pinStyle,
|
|
397
|
+
...rowSpan > 1 ? { "grid-row": `span ${rowSpan}` } : {}
|
|
398
|
+
};
|
|
399
|
+
let content;
|
|
400
|
+
if (column.id === SELECT_COL_ID) content = (() => {
|
|
401
|
+
var _el$5 = _tmpl$4();
|
|
402
|
+
spread(_el$5, [
|
|
403
|
+
{
|
|
404
|
+
type: "checkbox",
|
|
405
|
+
get checked() {
|
|
406
|
+
return row.getIsSelected();
|
|
407
|
+
}
|
|
408
|
+
},
|
|
409
|
+
{ indeterminate: false },
|
|
410
|
+
{
|
|
411
|
+
"aria-label": "Select row",
|
|
412
|
+
onchange: () => row.toggleSelected(!row.getIsSelected())
|
|
413
|
+
}
|
|
414
|
+
], false);
|
|
415
|
+
return _el$5;
|
|
416
|
+
})();
|
|
417
|
+
else if (isExpandHost) content = (() => {
|
|
418
|
+
var _el$6 = _tmpl$5();
|
|
419
|
+
var _el$7 = _el$6.firstChild;
|
|
420
|
+
_el$7._$$click = () => row.toggleExpanded();
|
|
421
|
+
insert(_el$7, chevronGlyph);
|
|
422
|
+
insert(_el$6, createComponent(FlexRender, { cell }), null);
|
|
423
|
+
effect(() => {
|
|
424
|
+
return {
|
|
425
|
+
e: String(row.depth),
|
|
426
|
+
t: row.getIsExpanded() || void 0,
|
|
427
|
+
a: !row.getCanExpand() || void 0,
|
|
428
|
+
o: row.getIsExpanded() ? "Collapse row" : "Expand row"
|
|
429
|
+
};
|
|
430
|
+
}, ({ e, t, a, o }, _p$) => {
|
|
431
|
+
e !== _p$?.e && setStyleProperty(_el$6, "--bs-table-depth", e);
|
|
432
|
+
t !== _p$?.t && setAttribute(_el$7, "data-expanded", t);
|
|
433
|
+
a !== _p$?.a && setAttribute(_el$7, "data-leaf", a);
|
|
434
|
+
o !== _p$?.o && setAttribute(_el$7, "aria-label", o);
|
|
435
|
+
});
|
|
436
|
+
return _el$6;
|
|
437
|
+
})();
|
|
438
|
+
else content = createComponent(FlexRender, { cell });
|
|
439
|
+
var _el$8 = _tmpl$6();
|
|
440
|
+
spread(_el$8, [
|
|
441
|
+
{
|
|
442
|
+
role: "cell",
|
|
443
|
+
"data-scope": "table",
|
|
444
|
+
"data-part": "cell",
|
|
445
|
+
get "data-numeric"() {
|
|
446
|
+
return column.columnDef.meta?.numeric ? "" : void 0;
|
|
447
|
+
},
|
|
448
|
+
"data-spanned": rowSpan > 1 ? "" : void 0
|
|
449
|
+
},
|
|
450
|
+
pin,
|
|
451
|
+
{ style }
|
|
452
|
+
], true);
|
|
453
|
+
insert(_el$8, content);
|
|
454
|
+
return _el$8;
|
|
455
|
+
}
|
|
456
|
+
function renderRow(row, virtualItem) {
|
|
457
|
+
const style$1 = virtualItem ? {
|
|
458
|
+
position: "absolute",
|
|
459
|
+
"inset-inline-start": "0",
|
|
460
|
+
"inline-size": "100%",
|
|
461
|
+
transform: `translateY(${virtualItem.start}px)`,
|
|
462
|
+
"block-size": `${virtualItem.size}px`
|
|
463
|
+
} : {};
|
|
464
|
+
const draggable = rowDraggable();
|
|
465
|
+
var _el$9 = _tmpl$7();
|
|
466
|
+
addEvent(_el$9, "dragend", draggable ? onRowDragEnd : void 0);
|
|
467
|
+
addEvent(_el$9, "drop", draggable ? (e) => onRowDrop(row, e) : void 0);
|
|
468
|
+
addEvent(_el$9, "dragleave", draggable ? onRowDragLeave : void 0);
|
|
469
|
+
addEvent(_el$9, "dragover", draggable ? (e) => onRowDragOver(row, e) : void 0);
|
|
470
|
+
addEvent(_el$9, "dragstart", draggable ? (e) => onRowDragStart(row, e) : void 0);
|
|
471
|
+
setAttribute(_el$9, "draggable", draggable || void 0);
|
|
472
|
+
insert(_el$9, createComponent(For, {
|
|
473
|
+
get each() {
|
|
474
|
+
return row.getVisibleCells();
|
|
475
|
+
},
|
|
476
|
+
children: (cell) => renderCell(cell, row)
|
|
477
|
+
}));
|
|
478
|
+
effect(() => {
|
|
479
|
+
return {
|
|
480
|
+
e: row.getIsSelected() || void 0,
|
|
481
|
+
t: readShallow(style$1)
|
|
482
|
+
};
|
|
483
|
+
}, ({ e, t }, _p$) => {
|
|
484
|
+
e !== _p$?.e && setAttribute(_el$9, "data-selected", e);
|
|
485
|
+
style(_el$9, t, _p$?.t);
|
|
486
|
+
});
|
|
487
|
+
return _el$9;
|
|
488
|
+
}
|
|
489
|
+
function renderHeaderCell(header) {
|
|
490
|
+
const column = header.column;
|
|
491
|
+
const sorted = column.getIsSorted();
|
|
492
|
+
const canSort = column.getCanSort();
|
|
493
|
+
const canFilter = props.filterable && column.getCanFilter();
|
|
494
|
+
const canDrag = !!props.reorderable && column.id !== SELECT_COL_ID && !column.getIsPinned();
|
|
495
|
+
var _el$10 = _tmpl$8();
|
|
496
|
+
var _el$11 = _el$10.firstChild;
|
|
497
|
+
var _el$12 = _el$11.nextSibling;
|
|
498
|
+
spread(_el$10, [
|
|
499
|
+
{
|
|
500
|
+
role: "columnheader",
|
|
501
|
+
"data-scope": "table",
|
|
502
|
+
"data-part": "header-cell",
|
|
503
|
+
"data-sortable": canSort || void 0,
|
|
504
|
+
"data-sort": sorted || void 0,
|
|
505
|
+
get "data-numeric"() {
|
|
506
|
+
return column.columnDef.meta?.numeric ? "" : void 0;
|
|
507
|
+
},
|
|
508
|
+
"data-draggable": canDrag || void 0,
|
|
509
|
+
get "data-id"() {
|
|
510
|
+
return column.id;
|
|
511
|
+
},
|
|
512
|
+
draggable: canDrag || void 0,
|
|
513
|
+
"aria-sort": sorted === "asc" ? "ascending" : sorted === "desc" ? "descending" : void 0
|
|
514
|
+
},
|
|
515
|
+
() => {
|
|
516
|
+
return pinAttrs(column);
|
|
517
|
+
},
|
|
518
|
+
{
|
|
519
|
+
onclick: canSort ? () => column.toggleSorting() : void 0,
|
|
520
|
+
ondragstart: canDrag ? onColDragStart : void 0,
|
|
521
|
+
ondragover: canDrag ? (e) => onColDragOver(column, e) : void 0,
|
|
522
|
+
ondragleave: canDrag ? onColDragLeave : void 0,
|
|
523
|
+
ondrop: canDrag ? (e) => onColDrop(column, e) : void 0,
|
|
524
|
+
ondragend: canDrag ? onColDragEnd : void 0
|
|
525
|
+
}
|
|
526
|
+
], true);
|
|
527
|
+
insert(_el$10, (() => {
|
|
528
|
+
var _c$ = memo(() => {
|
|
529
|
+
return !!(header.isPlaceholder || header.column.columnDef.header === "");
|
|
530
|
+
});
|
|
531
|
+
return () => {
|
|
532
|
+
return _c$() ? null : createComponent(FlexRender, { header });
|
|
533
|
+
};
|
|
534
|
+
})(), _el$11);
|
|
535
|
+
insert(_el$10, canFilter ? (() => {
|
|
536
|
+
var _el$13 = _tmpl$9();
|
|
537
|
+
_el$13._$$input = (e) => column.setFilterValue(e.target.value);
|
|
538
|
+
_el$13.addEventListener("dragstart", (e) => e.stopPropagation());
|
|
539
|
+
_el$13._$$click = (e) => e.stopPropagation();
|
|
540
|
+
effect(() => {
|
|
541
|
+
return {
|
|
542
|
+
e: `Filter ${column.id}`,
|
|
543
|
+
t: column.getFilterValue() ?? ""
|
|
544
|
+
};
|
|
545
|
+
}, ({ e, t }, _p$) => {
|
|
546
|
+
e !== _p$?.e && setAttribute(_el$13, "aria-label", e);
|
|
547
|
+
_el$13.value = t ?? "";
|
|
548
|
+
});
|
|
549
|
+
return _el$13;
|
|
550
|
+
})() : null, _el$12);
|
|
551
|
+
return _el$10;
|
|
552
|
+
}
|
|
553
|
+
var _el$14 = _tmpl$10();
|
|
554
|
+
var _el$15 = _el$14.firstChild;
|
|
555
|
+
var _el$16 = _el$15.firstChild;
|
|
556
|
+
var _el$17 = _el$16.firstChild;
|
|
557
|
+
var _el$18 = _el$17.nextSibling;
|
|
558
|
+
var _el$19 = _el$18.firstChild;
|
|
559
|
+
var _el$20 = _el$19.nextSibling;
|
|
560
|
+
var _el$21 = _el$15.nextSibling;
|
|
561
|
+
insert(_el$14, (() => {
|
|
562
|
+
var _c$2 = memo(() => {
|
|
563
|
+
return !!(props.filterable && (props.showToolbar ?? true));
|
|
564
|
+
});
|
|
565
|
+
return () => {
|
|
566
|
+
return _c$2() ? (() => {
|
|
567
|
+
var _el$22 = _tmpl$11();
|
|
568
|
+
var _el$23 = _el$22.firstChild;
|
|
569
|
+
_el$23._$$input = (e) => table.setGlobalFilter(e.target.value);
|
|
570
|
+
effect(() => {
|
|
571
|
+
return {
|
|
572
|
+
e: props.globalFilterPlaceholder,
|
|
573
|
+
t: table.atoms.globalFilter.get() ?? ""
|
|
574
|
+
};
|
|
575
|
+
}, ({ e, t }, _p$) => {
|
|
576
|
+
e !== _p$?.e && setAttribute(_el$23, "placeholder", e);
|
|
577
|
+
_el$23.value = t ?? "";
|
|
578
|
+
});
|
|
579
|
+
return _el$22;
|
|
580
|
+
})() : null;
|
|
581
|
+
};
|
|
582
|
+
})(), _el$15);
|
|
583
|
+
ref(() => {
|
|
584
|
+
return setViewport;
|
|
585
|
+
}, _el$15);
|
|
586
|
+
insert(_el$17, createComponent(For, {
|
|
587
|
+
get each() {
|
|
588
|
+
return table.getHeaderGroups();
|
|
589
|
+
},
|
|
590
|
+
children: (group) => (() => {
|
|
591
|
+
var _el$24 = _tmpl$7();
|
|
592
|
+
insert(_el$24, createComponent(For, {
|
|
593
|
+
get each() {
|
|
594
|
+
return group.headers;
|
|
595
|
+
},
|
|
596
|
+
children: (header) => {
|
|
597
|
+
const column = header.column;
|
|
598
|
+
if (column.id !== SELECT_COL_ID) return renderHeaderCell(header);
|
|
599
|
+
const all = table.getIsAllRowsSelected();
|
|
600
|
+
var _el$25 = _tmpl$12();
|
|
601
|
+
var _el$26 = _el$25.firstChild;
|
|
602
|
+
spread(_el$25, [{
|
|
603
|
+
role: "columnheader",
|
|
604
|
+
"data-scope": "table",
|
|
605
|
+
"data-part": "header-cell"
|
|
606
|
+
}, () => {
|
|
607
|
+
return pinAttrs(column);
|
|
608
|
+
}], true);
|
|
609
|
+
spread(_el$26, [
|
|
610
|
+
{
|
|
611
|
+
type: "checkbox",
|
|
612
|
+
checked: all
|
|
613
|
+
},
|
|
614
|
+
() => {
|
|
615
|
+
return { indeterminate: table.getIsSomeRowsSelected() && !all };
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
"aria-label": "Select all rows",
|
|
619
|
+
onchange: () => table.toggleAllRowsSelected(!all)
|
|
620
|
+
}
|
|
621
|
+
], false);
|
|
622
|
+
return _el$25;
|
|
623
|
+
}
|
|
624
|
+
}));
|
|
625
|
+
return _el$24;
|
|
626
|
+
})()
|
|
627
|
+
}));
|
|
628
|
+
insert(_el$18, (() => {
|
|
629
|
+
var _c$3 = memo(() => {
|
|
630
|
+
return !!virtual();
|
|
631
|
+
});
|
|
632
|
+
return () => {
|
|
633
|
+
return _c$3() ? createComponent(For, {
|
|
634
|
+
get each() {
|
|
635
|
+
return virtualizer.getVirtualItems();
|
|
636
|
+
},
|
|
637
|
+
children: (item) => renderRow(rows()[item.index], item)
|
|
638
|
+
}) : createComponent(For, {
|
|
639
|
+
get each() {
|
|
640
|
+
return rows();
|
|
641
|
+
},
|
|
642
|
+
children: (row) => renderRow(row)
|
|
643
|
+
});
|
|
644
|
+
};
|
|
645
|
+
})(), _el$19);
|
|
646
|
+
insert(_el$18, (() => {
|
|
647
|
+
var _c$4 = memo(() => {
|
|
648
|
+
return rows().length === 0;
|
|
649
|
+
});
|
|
650
|
+
return () => {
|
|
651
|
+
return _c$4() ? (() => {
|
|
652
|
+
var _el$27 = _tmpl$13();
|
|
653
|
+
insert(_el$27, () => {
|
|
654
|
+
return props.emptyText;
|
|
655
|
+
});
|
|
656
|
+
return _el$27;
|
|
657
|
+
})() : null;
|
|
658
|
+
};
|
|
659
|
+
})(), _el$20);
|
|
660
|
+
insert(_el$16, (() => {
|
|
661
|
+
var _c$5 = memo(() => {
|
|
662
|
+
return !!(props.stickyFooter && table.getFooterGroups().some((group) => group.headers.some((header) => header.column.columnDef.footer)));
|
|
663
|
+
});
|
|
664
|
+
return () => {
|
|
665
|
+
return _c$5() ? (() => {
|
|
666
|
+
var _el$28 = _tmpl$14();
|
|
667
|
+
insert(_el$28, createComponent(For, {
|
|
668
|
+
get each() {
|
|
669
|
+
return table.getFooterGroups();
|
|
670
|
+
},
|
|
671
|
+
children: (group) => (() => {
|
|
672
|
+
var _el$29 = _tmpl$7();
|
|
673
|
+
insert(_el$29, createComponent(For, {
|
|
674
|
+
get each() {
|
|
675
|
+
return group.headers;
|
|
676
|
+
},
|
|
677
|
+
children: (header) => (() => {
|
|
678
|
+
var _el$30 = _tmpl$6();
|
|
679
|
+
spread(_el$30, [{
|
|
680
|
+
role: "columnheader",
|
|
681
|
+
"data-scope": "table",
|
|
682
|
+
"data-part": "footer-cell",
|
|
683
|
+
get "data-numeric"() {
|
|
684
|
+
return header.column.columnDef.meta?.numeric ? "" : void 0;
|
|
685
|
+
}
|
|
686
|
+
}, () => {
|
|
687
|
+
return pinAttrs(header.column);
|
|
688
|
+
}], true);
|
|
689
|
+
insert(_el$30, (() => {
|
|
690
|
+
var _c$7 = memo(() => {
|
|
691
|
+
return !!header.isPlaceholder;
|
|
692
|
+
});
|
|
693
|
+
return () => {
|
|
694
|
+
return _c$7() ? null : createComponent(FlexRender, { footer: header });
|
|
695
|
+
};
|
|
696
|
+
})());
|
|
697
|
+
return _el$30;
|
|
698
|
+
})()
|
|
699
|
+
}));
|
|
700
|
+
return _el$29;
|
|
701
|
+
})()
|
|
702
|
+
}));
|
|
703
|
+
return _el$28;
|
|
704
|
+
})() : null;
|
|
705
|
+
};
|
|
706
|
+
})(), null);
|
|
707
|
+
insert(_el$14, (() => {
|
|
708
|
+
var _c$6 = memo(() => {
|
|
709
|
+
return !!props.paginated;
|
|
710
|
+
});
|
|
711
|
+
return () => {
|
|
712
|
+
return _c$6() ? (() => {
|
|
713
|
+
var _el$31 = _tmpl$15();
|
|
714
|
+
var _el$32 = _el$31.firstChild;
|
|
715
|
+
var _el$33 = _el$32.nextSibling;
|
|
716
|
+
var _el$34 = _el$33.firstChild;
|
|
717
|
+
var _el$35 = _el$34.nextSibling;
|
|
718
|
+
insert(_el$32, () => {
|
|
719
|
+
return `${table.getRowCount()} rows`;
|
|
720
|
+
});
|
|
721
|
+
insert(_el$33, createComponent(Select$1.Root, {
|
|
722
|
+
get collection() {
|
|
723
|
+
return createListCollection({ items: (props.pageSizeOptions ?? [
|
|
724
|
+
10,
|
|
725
|
+
20,
|
|
726
|
+
50
|
|
727
|
+
]).map((size) => ({
|
|
728
|
+
label: `${size} / page`,
|
|
729
|
+
value: String(size)
|
|
730
|
+
})) });
|
|
731
|
+
},
|
|
732
|
+
get value() {
|
|
733
|
+
return [String(table.atoms.pagination.get().pageSize)];
|
|
734
|
+
},
|
|
735
|
+
onValueChange: (details) => table.setPageSize(Number(details.value[0])),
|
|
736
|
+
positioning: { placement: "top-start" },
|
|
737
|
+
get children() {
|
|
738
|
+
return [createComponent(Select$1.Control, { get children() {
|
|
739
|
+
return createComponent(Select$1.Trigger, {
|
|
740
|
+
"aria-label": "Rows per page",
|
|
741
|
+
get children() {
|
|
742
|
+
return [createComponent(Select$1.ValueText, {}), createComponent(Select$1.Indicator, { get children() {
|
|
743
|
+
return chevronDownGlyph();
|
|
744
|
+
} })];
|
|
745
|
+
}
|
|
746
|
+
});
|
|
747
|
+
} }), createComponent(Select$1.Positioner, { get children() {
|
|
748
|
+
return createComponent(Select$1.Content, { get children() {
|
|
749
|
+
return createComponent(For, {
|
|
750
|
+
get each() {
|
|
751
|
+
return (props.pageSizeOptions ?? [
|
|
752
|
+
10,
|
|
753
|
+
20,
|
|
754
|
+
50
|
|
755
|
+
]).map((size) => ({
|
|
756
|
+
label: `${size} / page`,
|
|
757
|
+
value: String(size)
|
|
758
|
+
}));
|
|
759
|
+
},
|
|
760
|
+
children: (item) => createComponent(Select$1.Item, {
|
|
761
|
+
item,
|
|
762
|
+
get children() {
|
|
763
|
+
return [createComponent(Select$1.ItemText, { get children() {
|
|
764
|
+
return item.label;
|
|
765
|
+
} }), createComponent(Select$1.ItemIndicator, { children: "✓" })];
|
|
766
|
+
}
|
|
767
|
+
})
|
|
768
|
+
});
|
|
769
|
+
} });
|
|
770
|
+
} })];
|
|
771
|
+
}
|
|
772
|
+
}), _el$34);
|
|
773
|
+
insert(_el$33, createComponent(Pagination.Root, {
|
|
774
|
+
get count() {
|
|
775
|
+
return table.getRowCount();
|
|
776
|
+
},
|
|
777
|
+
get pageSize() {
|
|
778
|
+
return table.atoms.pagination.get().pageSize;
|
|
779
|
+
},
|
|
780
|
+
get page() {
|
|
781
|
+
return table.atoms.pagination.get().pageIndex + 1;
|
|
782
|
+
},
|
|
783
|
+
onPageChange: (details) => table.setPageIndex(details.page - 1),
|
|
784
|
+
get children() {
|
|
785
|
+
return [
|
|
786
|
+
createComponent(Pagination.PrevTrigger, { get children() {
|
|
787
|
+
return pageGlyph("start");
|
|
788
|
+
} }),
|
|
789
|
+
createComponent(Pagination.Context, { children: (scope) => createComponent(For, {
|
|
790
|
+
get each() {
|
|
791
|
+
return scope().pages;
|
|
792
|
+
},
|
|
793
|
+
children: (page, index) => page.type === "ellipsis" ? createComponent(Pagination.Ellipsis, { get index() {
|
|
794
|
+
return index();
|
|
795
|
+
} }) : createComponent(Pagination.Item, {
|
|
796
|
+
type: "page",
|
|
797
|
+
get value() {
|
|
798
|
+
return page.value;
|
|
799
|
+
},
|
|
800
|
+
get children() {
|
|
801
|
+
return String(page.value);
|
|
802
|
+
}
|
|
803
|
+
})
|
|
804
|
+
}) }),
|
|
805
|
+
createComponent(Pagination.NextTrigger, { get children() {
|
|
806
|
+
return pageGlyph("end");
|
|
807
|
+
} })
|
|
808
|
+
];
|
|
809
|
+
}
|
|
810
|
+
}), _el$35);
|
|
811
|
+
return _el$31;
|
|
812
|
+
})() : null;
|
|
813
|
+
};
|
|
814
|
+
})(), _el$21);
|
|
815
|
+
effect(() => {
|
|
816
|
+
return {
|
|
817
|
+
e: props.reorderable || void 0,
|
|
818
|
+
t: `calc(${baseRowHeight()}px * var(--bs-density-scale, 1))`,
|
|
819
|
+
a: colsTemplate(),
|
|
820
|
+
o: mergeMode() || void 0,
|
|
821
|
+
i: readShallow(virtual() ? {
|
|
822
|
+
position: "relative",
|
|
823
|
+
"block-size": `${virtualizer.getTotalSize()}px`
|
|
824
|
+
} : void 0)
|
|
825
|
+
};
|
|
826
|
+
}, ({ e, t, a, o, i }, _p$) => {
|
|
827
|
+
e !== _p$?.e && setAttribute(_el$14, "data-reorderable", e);
|
|
828
|
+
t !== _p$?.t && setStyleProperty(_el$14, "--bs-table-row-height", t);
|
|
829
|
+
a !== _p$?.a && setStyleProperty(_el$16, "--bs-table-cols", a);
|
|
830
|
+
o !== _p$?.o && setAttribute(_el$18, "data-merge", o);
|
|
831
|
+
style(_el$18, i, _p$?.i);
|
|
832
|
+
});
|
|
833
|
+
return _el$14;
|
|
834
|
+
}
|
|
835
|
+
delegateEvents(["click", "input"]);
|
|
836
|
+
//#endregion
|
|
837
|
+
export { DataTable, FlexRender, createColumnHelper };
|