@svgrid/grid 2.2.30 → 2.2.32
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 +1 -1
- package/dist/SvAvatar.svelte +1 -1
- package/dist/SvCheckBox.svelte +2 -1
- package/dist/SvCircularProgress.svelte +1 -1
- package/dist/SvGrid.controller.svelte.d.ts +20 -0
- package/dist/SvGrid.controller.svelte.js +358 -18
- package/dist/SvGrid.css +103 -3
- package/dist/SvGrid.svelte +162 -10
- package/dist/SvGrid.types.d.ts +81 -0
- package/dist/SvGridDropdown.svelte +38 -6
- package/dist/SvGridDropdown.svelte.d.ts +4 -0
- package/dist/SvGridSelect.svelte +12 -3
- package/dist/SvGridSelect.svelte.d.ts +6 -0
- package/dist/SvGroupCell.svelte +9 -2
- package/dist/SvMultiSelect.svelte +12 -3
- package/dist/SvMultiSelect.svelte.d.ts +6 -0
- package/dist/SvPasswordInput.svelte +1 -1
- package/dist/SvProgress.svelte +1 -1
- package/dist/SvRating.svelte +1 -1
- package/dist/SvResult.svelte +1 -1
- package/dist/SvRichText.svelte +31 -16
- package/dist/SvRichText.svelte.d.ts +9 -0
- package/dist/SvSwitchButton.svelte +2 -1
- package/dist/SvToaster.svelte +1 -1
- package/dist/SvTree.svelte +9 -2
- package/dist/SvTree.svelte.d.ts +5 -0
- package/dist/SvTreeSelect.svelte +6 -2
- package/dist/build-api.js +16 -0
- package/dist/cdn/{GridMenus-Ds3OpzZT.js → GridMenus-C6ixSGWW.js} +33 -33
- package/dist/cdn/{GridMenus-Da_p7SKS.js → GridMenus-Cyk3qpJ7.js} +33 -33
- package/dist/cdn/{SvDateTimePicker-B8GopjhC.js → SvDateTimePicker-CdqaP61H.js} +2 -1
- package/dist/cdn/{SvDateTimePicker-DB0aIEk8.js → SvDateTimePicker-ClqtVIj3.js} +2 -1
- package/dist/cdn/{SvGridDropdown-DjALc_4f.js → SvGridDropdown-D0VdjeR8.js} +129 -123
- package/dist/cdn/{SvGridDropdown-hpnHvOGt.js → SvGridDropdown-Dh-2ej8j.js} +92 -87
- package/dist/cdn/{src-BLJfdyL0.js → src-BgHjWF0Q.js} +4193 -3837
- package/dist/cdn/{src-DYDCiC0D.js → src-CgD-wiuS.js} +5956 -5602
- package/dist/cdn/svgrid.js +8 -8
- package/dist/cdn/svgrid.svelte-external.js +8 -8
- package/dist/cell-render.d.ts +1 -0
- package/dist/cell-render.js +115 -1
- package/dist/cell-values.js +5 -0
- package/dist/core.d.ts +80 -9
- package/dist/core.js +89 -0
- package/dist/editor-contract.d.ts +12 -5
- package/dist/editor-registry.d.ts +18 -7
- package/dist/editor-registry.js +10 -1
- package/dist/group-display.d.ts +39 -0
- package/dist/group-display.js +52 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/keyboard-handlers.js +16 -0
- package/dist/recurrence.js +3 -2
- package/dist/svgrid-wrapper.types.d.ts +8 -2
- package/dist/themes/index.d.ts +10 -0
- package/dist/themes/index.js +26 -0
- package/package.json +1 -1
- package/src/SvAccordion.test.ts +5 -5
- package/src/SvAvatar.svelte +1 -1
- package/src/SvButtonGroup.test.ts +6 -6
- package/src/SvCheckBox.svelte +2 -1
- package/src/SvCircularProgress.svelte +1 -1
- package/src/SvFileUpload.test.ts +1 -1
- package/src/SvGrid.controller.svelte.ts +367 -17
- package/src/SvGrid.css +103 -3
- package/src/SvGrid.svelte +162 -10
- package/src/SvGrid.types.ts +81 -0
- package/src/SvGridDropdown.svelte +38 -6
- package/src/SvGridSelect.svelte +12 -3
- package/src/SvGroupCell.svelte +9 -2
- package/src/SvMultiSelect.svelte +12 -3
- package/src/SvPasswordInput.svelte +1 -1
- package/src/SvProgress.svelte +1 -1
- package/src/SvRating.svelte +1 -1
- package/src/SvResult.svelte +1 -1
- package/src/SvRichText.svelte +31 -16
- package/src/SvSwitchButton.svelte +2 -1
- package/src/SvToaster.svelte +1 -1
- package/src/SvTree.svelte +9 -2
- package/src/SvTreeSelect.svelte +6 -2
- package/src/build-api.ts +15 -0
- package/src/builtin-editors.test.ts +3 -1
- package/src/cell-render.test.ts +27 -3
- package/src/cell-render.ts +122 -1
- package/src/cell-values.ts +4 -0
- package/src/chart-export.test.ts +2 -2
- package/src/clipboard.test.ts +0 -2
- package/src/core.ts +157 -8
- package/src/editing.test.ts +1 -1
- package/src/editor-contract.ts +12 -5
- package/src/editor-registry.grid.test.ts +48 -0
- package/src/editor-registry.test.ts +3 -1
- package/src/editor-registry.ts +23 -7
- package/src/facet-buckets.test.ts +33 -33
- package/src/group-display.test.ts +91 -1
- package/src/group-display.ts +83 -0
- package/src/index.ts +9 -0
- package/src/keyboard-handlers.ts +17 -0
- package/src/list-power.test.ts +2 -2
- package/src/menus.test.ts +4 -4
- package/src/named-views.coverage.test.ts +3 -3
- package/src/recurrence.ts +3 -2
- package/src/row-resize.test.ts +40 -40
- package/src/scheduler-model.ts +1 -1
- package/src/server-data-source.coverage.test.ts +1 -1
- package/src/server-group-model.test.ts +6 -6
- package/src/spreadsheet.test.ts +0 -1
- package/src/svgrid-wrapper.types.ts +11 -9
- package/src/svgrid.async-editor-options.test.ts +271 -0
- package/src/svgrid.auto-row-height.test.ts +204 -0
- package/src/svgrid.charting.test.ts +4 -4
- package/src/svgrid.comments-autocomplete.test.ts +8 -2
- package/src/svgrid.context-menu.test.ts +25 -9
- package/src/svgrid.filter-depth.test.ts +163 -0
- package/src/svgrid.filter-menu-listbox.svelte.test.ts +16 -2
- package/src/svgrid.filter-menu-scroll.test.ts +10 -2
- package/src/svgrid.grand-total.test.ts +188 -0
- package/src/svgrid.group-display-mode.test.ts +171 -0
- package/src/svgrid.group-footers.test.ts +121 -0
- package/src/svgrid.group-pagination.test.ts +153 -0
- package/src/svgrid.tree-data.test.ts +186 -0
- package/src/svgriddropdown.async-panel.svelte.test.ts +195 -0
- package/src/themes/index.ts +42 -0
- package/src/tree-edit.test.ts +4 -4
- package/src/tree-row-model.test.ts +169 -0
- package/src/ui-localization.test.ts +113 -0
- package/themes/ag-alpine.css +22 -0
- package/themes/antd.css +22 -0
- package/themes/atlassian.css +22 -0
- package/themes/bootstrap.css +22 -0
- package/themes/carbon.css +22 -0
- package/themes/catppuccin.css +22 -0
- package/themes/dracula.css +22 -0
- package/themes/ember.css +22 -0
- package/themes/excel.css +22 -0
- package/themes/fluent.css +22 -0
- package/themes/github.css +22 -0
- package/themes/linear.css +22 -0
- package/themes/material.css +22 -0
- package/themes/nord.css +22 -0
- package/themes/notion.css +22 -0
- package/themes/salesforce.css +22 -0
- package/themes/sap.css +22 -0
- package/themes/shadcn.css +22 -0
- package/themes/tailwind.css +22 -0
- package/themes/vercel.css +22 -0
|
@@ -38,6 +38,10 @@ type Props = {
|
|
|
38
38
|
onCommit?: () => void;
|
|
39
39
|
/** Called when the user dismisses (Escape, blur with no change). */
|
|
40
40
|
onCancel?: () => void;
|
|
41
|
+
/** The option list is still being fetched (async `editorOptions`). Shows a
|
|
42
|
+
* loading line instead of "No options", which would read as "nothing to
|
|
43
|
+
* pick" when the truth is "not here yet". */
|
|
44
|
+
loading?: boolean;
|
|
41
45
|
};
|
|
42
46
|
declare const SvGridDropdown: import("svelte").Component<Props, {}, "">;
|
|
43
47
|
type SvGridDropdown = ReturnType<typeof SvGridDropdown>;
|
package/dist/SvGridSelect.svelte
CHANGED
|
@@ -38,6 +38,12 @@
|
|
|
38
38
|
loadOptions?: (query: string) => Promise<Row[]>
|
|
39
39
|
debounceMs?: number
|
|
40
40
|
loadingText?: string
|
|
41
|
+
/** Shown when the list is empty / a search matches nothing (localization). */
|
|
42
|
+
emptyText?: string
|
|
43
|
+
/** Placeholder in the panel's search box (localization). */
|
|
44
|
+
searchPlaceholder?: string
|
|
45
|
+
/** Accessible name for the panel's search box (localization). */
|
|
46
|
+
searchLabel?: string
|
|
41
47
|
}
|
|
42
48
|
|
|
43
49
|
let {
|
|
@@ -54,6 +60,9 @@
|
|
|
54
60
|
loadOptions,
|
|
55
61
|
debounceMs = 250,
|
|
56
62
|
loadingText = 'Loading…',
|
|
63
|
+
emptyText = 'No matches',
|
|
64
|
+
searchPlaceholder = 'Search…',
|
|
65
|
+
searchLabel = 'Search options',
|
|
57
66
|
disabled = false,
|
|
58
67
|
readonly = false,
|
|
59
68
|
label,
|
|
@@ -168,8 +177,8 @@
|
|
|
168
177
|
aria-expanded="true"
|
|
169
178
|
aria-controls={gs.panelId}
|
|
170
179
|
aria-activedescendant={gs.activeDescendant()}
|
|
171
|
-
aria-label=
|
|
172
|
-
placeholder=
|
|
180
|
+
aria-label={searchLabel}
|
|
181
|
+
placeholder={searchPlaceholder}
|
|
173
182
|
value={search}
|
|
174
183
|
oninput={(e) => { search = e.currentTarget.value; gs.active = 0; if (loadOptions) runLoad(search) }}
|
|
175
184
|
/>
|
|
@@ -205,7 +214,7 @@
|
|
|
205
214
|
{/each}
|
|
206
215
|
</div>
|
|
207
216
|
{:else}
|
|
208
|
-
<div class="sv-gs__empty" role="row">{loading ? loadingText :
|
|
217
|
+
<div class="sv-gs__empty" role="row">{loading ? loadingText : emptyText}</div>
|
|
209
218
|
{/each}
|
|
210
219
|
{#if loading && filtered.length}
|
|
211
220
|
<div class="sv-gs__empty" role="row" aria-live="polite">{loadingText}</div>
|
|
@@ -26,6 +26,12 @@ type Props = Pick<SvEditorProps, 'disabled' | 'readonly' | 'label' | 'hint' | 'e
|
|
|
26
26
|
loadOptions?: (query: string) => Promise<Row[]>;
|
|
27
27
|
debounceMs?: number;
|
|
28
28
|
loadingText?: string;
|
|
29
|
+
/** Shown when the list is empty / a search matches nothing (localization). */
|
|
30
|
+
emptyText?: string;
|
|
31
|
+
/** Placeholder in the panel's search box (localization). */
|
|
32
|
+
searchPlaceholder?: string;
|
|
33
|
+
/** Accessible name for the panel's search box (localization). */
|
|
34
|
+
searchLabel?: string;
|
|
29
35
|
};
|
|
30
36
|
declare const SvGridSelect: import("svelte").Component<Props, {}, "value">;
|
|
31
37
|
type SvGridSelect = ReturnType<typeof SvGridSelect>;
|
package/dist/SvGroupCell.svelte
CHANGED
|
@@ -39,7 +39,12 @@
|
|
|
39
39
|
aria-label={meta.expanded ? 'Collapse group' : 'Expand group'}
|
|
40
40
|
onclick={() => onToggle(row)}
|
|
41
41
|
>
|
|
42
|
-
|
|
42
|
+
<!-- Same chevron the grid's own expanders and SvTree draw, so every
|
|
43
|
+
expander in the library looks identical. -->
|
|
44
|
+
<span class="sv-group-chev" class:open={meta.expanded} aria-hidden="true">
|
|
45
|
+
<svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor"
|
|
46
|
+
stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="m9 18 6-6-6-6" /></svg>
|
|
47
|
+
</span>
|
|
43
48
|
<span class="sv-group-key">{meta.key}</span>
|
|
44
49
|
{#if meta.loading}<span class="sv-group-load" aria-hidden="true">…</span>{/if}
|
|
45
50
|
</button>
|
|
@@ -76,7 +81,9 @@
|
|
|
76
81
|
cursor: pointer;
|
|
77
82
|
}
|
|
78
83
|
.sv-group-chev {
|
|
79
|
-
display: inline-
|
|
84
|
+
display: inline-flex;
|
|
85
|
+
align-items: center;
|
|
86
|
+
justify-content: center;
|
|
80
87
|
transition: transform 0.15s;
|
|
81
88
|
color: var(--sg-muted, #64748b);
|
|
82
89
|
}
|
|
@@ -37,6 +37,12 @@
|
|
|
37
37
|
/** Debounce for remote search. Default 250ms. */
|
|
38
38
|
debounceMs?: number
|
|
39
39
|
loadingText?: string
|
|
40
|
+
/** Shown when the list is empty / a search matches nothing (localization). */
|
|
41
|
+
emptyText?: string
|
|
42
|
+
/** Placeholder in the panel's search box (localization). */
|
|
43
|
+
searchPlaceholder?: string
|
|
44
|
+
/** Accessible name for the panel's search box (localization). */
|
|
45
|
+
searchLabel?: string
|
|
40
46
|
}
|
|
41
47
|
|
|
42
48
|
let {
|
|
@@ -52,6 +58,9 @@
|
|
|
52
58
|
loadOptions,
|
|
53
59
|
debounceMs = 250,
|
|
54
60
|
loadingText = 'Loading…',
|
|
61
|
+
emptyText = 'No matches',
|
|
62
|
+
searchPlaceholder = 'Search…',
|
|
63
|
+
searchLabel = 'Search options',
|
|
55
64
|
disabled = false,
|
|
56
65
|
readonly = false,
|
|
57
66
|
label,
|
|
@@ -193,8 +202,8 @@
|
|
|
193
202
|
aria-expanded="true"
|
|
194
203
|
aria-controls={ms.panelId}
|
|
195
204
|
aria-activedescendant={ms.activeDescendant()}
|
|
196
|
-
aria-label=
|
|
197
|
-
placeholder=
|
|
205
|
+
aria-label={searchLabel}
|
|
206
|
+
placeholder={searchPlaceholder}
|
|
198
207
|
value={search}
|
|
199
208
|
oninput={(e) => { search = e.currentTarget.value; ms.active = 0; if (loadOptions) runLoad(search) }}
|
|
200
209
|
/>
|
|
@@ -224,7 +233,7 @@
|
|
|
224
233
|
<span class="sv-ms__label">{opt.label}</span>
|
|
225
234
|
</li>
|
|
226
235
|
{:else}
|
|
227
|
-
<li class="sv-ms__empty" aria-disabled="true">{loading ? loadingText :
|
|
236
|
+
<li class="sv-ms__empty" aria-disabled="true">{loading ? loadingText : emptyText}</li>
|
|
228
237
|
{/each}
|
|
229
238
|
{#if loading && filtered.length}
|
|
230
239
|
<li class="sv-ms__loading" aria-live="polite">{loadingText}</li>
|
|
@@ -25,6 +25,12 @@ type Props = Pick<SvEditorProps, 'disabled' | 'readonly' | 'label' | 'hint' | 'e
|
|
|
25
25
|
/** Debounce for remote search. Default 250ms. */
|
|
26
26
|
debounceMs?: number;
|
|
27
27
|
loadingText?: string;
|
|
28
|
+
/** Shown when the list is empty / a search matches nothing (localization). */
|
|
29
|
+
emptyText?: string;
|
|
30
|
+
/** Placeholder in the panel's search box (localization). */
|
|
31
|
+
searchPlaceholder?: string;
|
|
32
|
+
/** Accessible name for the panel's search box (localization). */
|
|
33
|
+
searchLabel?: string;
|
|
28
34
|
};
|
|
29
35
|
declare const SvMultiSelect: import("svelte").Component<Props, {}, "value">;
|
|
30
36
|
type SvMultiSelect = ReturnType<typeof SvMultiSelect>;
|
|
@@ -142,7 +142,7 @@
|
|
|
142
142
|
.sv-pw__meter { display: flex; gap: 4px; }
|
|
143
143
|
.sv-pw__bar { flex: 1; height: 4px; border-radius: 2px; background: var(--sg-border, #e2e8f0); transition: background 0.15s; }
|
|
144
144
|
.sv-pw__bar.on.is-lvl1 { background: var(--sg-danger, #dc2626); }
|
|
145
|
-
.sv-pw__bar.on.is-lvl2 { background: var(--sg-warning, #
|
|
145
|
+
.sv-pw__bar.on.is-lvl2 { background: var(--sg-warning, #d97706); }
|
|
146
146
|
.sv-pw__bar.on.is-lvl3 { background: #eab308; }
|
|
147
147
|
.sv-pw__bar.on.is-lvl4 { background: var(--sg-success, #16a34a); }
|
|
148
148
|
.sv-pw__strength { font-size: 11px; font-weight: 600; color: var(--sg-muted, #64748b); }
|
package/dist/SvProgress.svelte
CHANGED
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
display: flex; align-items: center; gap: 10px; width: 100%;
|
|
76
76
|
}
|
|
77
77
|
.sv-prog--success { --_c: var(--sg-success, #16a34a); }
|
|
78
|
-
.sv-prog--warning { --_c: var(--sg-warning, #
|
|
78
|
+
.sv-prog--warning { --_c: var(--sg-warning, #d97706); }
|
|
79
79
|
.sv-prog--danger { --_c: var(--sg-danger, #dc2626); }
|
|
80
80
|
.sv-prog__track {
|
|
81
81
|
position: relative; flex: 1; overflow: hidden;
|
package/dist/SvRating.svelte
CHANGED
package/dist/SvResult.svelte
CHANGED
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
}
|
|
60
60
|
.sv-result--success { --_c: var(--sg-success, #16a34a); }
|
|
61
61
|
.sv-result--error { --_c: var(--sg-danger, #dc2626); }
|
|
62
|
-
.sv-result--warning { --_c: var(--sg-warning, #
|
|
62
|
+
.sv-result--warning { --_c: var(--sg-warning, #d97706); }
|
|
63
63
|
.sv-result--notfound { --_c: var(--sg-muted, #64748b); }
|
|
64
64
|
.sv-result__icon {
|
|
65
65
|
display: grid; place-items: center; width: 60px; height: 60px; border-radius: 50%; margin-bottom: 4px;
|
package/dist/SvRichText.svelte
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* <SvRichText bind:value={html} placeholder="Write something…" />
|
|
20
20
|
* ```
|
|
21
21
|
*/
|
|
22
|
-
import { nextEditorId } from './editor-contract'
|
|
22
|
+
import { nextEditorId, resolveMessages } from './editor-contract'
|
|
23
23
|
|
|
24
24
|
const DEFAULT_TOOLS: RichTextTool[] = [
|
|
25
25
|
'bold', 'italic', 'underline', 'strike', '|',
|
|
@@ -29,16 +29,27 @@
|
|
|
29
29
|
'link', 'clear', '|', 'undo', 'redo',
|
|
30
30
|
]
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
ul:
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
32
|
+
/** Toolbar glyphs. Mode-independent and not language-dependent, so they stay
|
|
33
|
+
* fixed; the LABELS beside them are localizable via `messages`. */
|
|
34
|
+
const GLYPH: Record<Exclude<RichTextTool, '|'>, string> = {
|
|
35
|
+
bold: 'B', italic: 'I', underline: 'U', strike: 'S',
|
|
36
|
+
h1: 'H1', h2: 'H2', h3: 'H3', p: '¶',
|
|
37
|
+
ul: '•', ol: '1.', quote: '❝', code: '</>',
|
|
38
|
+
alignLeft: '≡', alignCenter: '≣', alignRight: '≡', link: '🔗',
|
|
39
|
+
clear: '⌫', undo: '↶', redo: '↷',
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** User-facing strings (localizable via `messages`). Every one is a tooltip +
|
|
43
|
+
* accessible name on a toolbar button, so leaving them hard-coded made the
|
|
44
|
+
* whole toolbar English-only for screen-reader users. */
|
|
45
|
+
type RichTextMessages = Record<Exclude<RichTextTool, '|'>, string> & { linkPrompt: string; toolbar: string }
|
|
46
|
+
const DEFAULT_MESSAGES: RichTextMessages = {
|
|
47
|
+
bold: 'Bold', italic: 'Italic', underline: 'Underline', strike: 'Strikethrough',
|
|
48
|
+
h1: 'Heading 1', h2: 'Heading 2', h3: 'Heading 3', p: 'Paragraph',
|
|
49
|
+
ul: 'Bullet list', ol: 'Numbered list', quote: 'Quote', code: 'Code block',
|
|
50
|
+
alignLeft: 'Align left', alignCenter: 'Align center', alignRight: 'Align right',
|
|
51
|
+
link: 'Link', clear: 'Clear formatting', undo: 'Undo', redo: 'Redo',
|
|
52
|
+
linkPrompt: 'Link URL', toolbar: 'Formatting',
|
|
42
53
|
}
|
|
43
54
|
|
|
44
55
|
type Props = {
|
|
@@ -52,6 +63,8 @@
|
|
|
52
63
|
/** Toolbar tools + order; use '|' for a separator. */
|
|
53
64
|
tools?: RichTextTool[]
|
|
54
65
|
ariaLabel?: string
|
|
66
|
+
/** Override any toolbar label / prompt (localization). */
|
|
67
|
+
messages?: Partial<RichTextMessages>
|
|
55
68
|
}
|
|
56
69
|
|
|
57
70
|
let {
|
|
@@ -63,8 +76,10 @@
|
|
|
63
76
|
minHeight = '160px',
|
|
64
77
|
tools = DEFAULT_TOOLS,
|
|
65
78
|
ariaLabel = 'Rich text editor',
|
|
79
|
+
messages,
|
|
66
80
|
}: Props = $props()
|
|
67
81
|
|
|
82
|
+
const M = $derived(resolveMessages(DEFAULT_MESSAGES, messages))
|
|
68
83
|
const uid = nextEditorId('sv-rt')
|
|
69
84
|
let editorEl = $state<HTMLDivElement | null>(null)
|
|
70
85
|
let focused = $state(false)
|
|
@@ -109,14 +124,14 @@
|
|
|
109
124
|
ul: () => exec('insertUnorderedList'), ol: () => exec('insertOrderedList'),
|
|
110
125
|
quote: () => exec('formatBlock', 'BLOCKQUOTE'), code: () => exec('formatBlock', 'PRE'),
|
|
111
126
|
alignLeft: () => exec('justifyLeft'), alignCenter: () => exec('justifyCenter'), alignRight: () => exec('justifyRight'),
|
|
112
|
-
link: () => { const url = typeof prompt === 'function' ? prompt(
|
|
127
|
+
link: () => { const url = typeof prompt === 'function' ? prompt(M.linkPrompt, 'https://') : null; if (url) exec('createLink', url) },
|
|
113
128
|
clear: () => exec('removeFormat'), undo: () => exec('undo'), redo: () => exec('redo'),
|
|
114
129
|
}
|
|
115
130
|
</script>
|
|
116
131
|
|
|
117
132
|
<div class="sv-rt" class:is-disabled={disabled} class:is-readonly={readonly}>
|
|
118
133
|
{#if !readonly}
|
|
119
|
-
<div class="sv-rt__toolbar" role="toolbar" aria-label=
|
|
134
|
+
<div class="sv-rt__toolbar" role="toolbar" aria-label={M.toolbar} aria-controls={uid}>
|
|
120
135
|
{#each tools as t, i (i)}
|
|
121
136
|
{#if t === '|'}
|
|
122
137
|
<span class="sv-rt__sep" aria-hidden="true"></span>
|
|
@@ -126,13 +141,13 @@
|
|
|
126
141
|
class="sv-rt__btn"
|
|
127
142
|
class:is-on={activeState[t]}
|
|
128
143
|
data-tool={t}
|
|
129
|
-
title={
|
|
130
|
-
aria-label={
|
|
144
|
+
title={M[t]}
|
|
145
|
+
aria-label={M[t]}
|
|
131
146
|
aria-pressed={activeState[t] ? true : undefined}
|
|
132
147
|
{disabled}
|
|
133
148
|
onmousedown={(e) => e.preventDefault()}
|
|
134
149
|
onclick={run[t]}
|
|
135
|
-
>{
|
|
150
|
+
>{GLYPH[t]}</button>
|
|
136
151
|
{/if}
|
|
137
152
|
{/each}
|
|
138
153
|
</div>
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
export type RichTextTool = 'bold' | 'italic' | 'underline' | 'strike' | 'h1' | 'h2' | 'h3' | 'p' | 'ul' | 'ol' | 'quote' | 'code' | 'alignLeft' | 'alignCenter' | 'alignRight' | 'link' | 'clear' | 'undo' | 'redo' | '|';
|
|
2
|
+
/** User-facing strings (localizable via `messages`). Every one is a tooltip +
|
|
3
|
+
* accessible name on a toolbar button, so leaving them hard-coded made the
|
|
4
|
+
* whole toolbar English-only for screen-reader users. */
|
|
5
|
+
type RichTextMessages = Record<Exclude<RichTextTool, '|'>, string> & {
|
|
6
|
+
linkPrompt: string;
|
|
7
|
+
toolbar: string;
|
|
8
|
+
};
|
|
2
9
|
type Props = {
|
|
3
10
|
/** HTML string (bindable). */
|
|
4
11
|
value?: string;
|
|
@@ -10,6 +17,8 @@ type Props = {
|
|
|
10
17
|
/** Toolbar tools + order; use '|' for a separator. */
|
|
11
18
|
tools?: RichTextTool[];
|
|
12
19
|
ariaLabel?: string;
|
|
20
|
+
/** Override any toolbar label / prompt (localization). */
|
|
21
|
+
messages?: Partial<RichTextMessages>;
|
|
13
22
|
};
|
|
14
23
|
declare const SvRichText: import("svelte").Component<Props, {}, "value">;
|
|
15
24
|
type SvRichText = ReturnType<typeof SvRichText>;
|
|
@@ -53,8 +53,9 @@
|
|
|
53
53
|
</script>
|
|
54
54
|
|
|
55
55
|
<SvField id={uid} {label} {hint} {error} {required} {dir}>
|
|
56
|
+
<!-- role="switch" arrives via switchProps(), which the a11y pass cannot see through -->
|
|
57
|
+
<!-- svelte-ignore a11y_role_supports_aria_props_implicit -->
|
|
56
58
|
<button
|
|
57
|
-
role="switch"
|
|
58
59
|
class="sv-switch sv-switch--{size}"
|
|
59
60
|
class:is-on={checked}
|
|
60
61
|
class:is-readonly={readonly}
|
package/dist/SvToaster.svelte
CHANGED
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
|
|
136
136
|
:global(.sv-toast--success) { --_accent: var(--sg-success, #16a34a); }
|
|
137
137
|
:global(.sv-toast--error) { --_accent: var(--sg-danger, #dc2626); }
|
|
138
|
-
:global(.sv-toast--warning) { --_accent: var(--sg-warning, #
|
|
138
|
+
:global(.sv-toast--warning) { --_accent: var(--sg-warning, #d97706); }
|
|
139
139
|
:global(.sv-toast--info) { --_accent: var(--sg-accent, #2563eb); }
|
|
140
140
|
|
|
141
141
|
:global(.sv-toast__icon) { flex: none; width: 18px; height: 18px; display: grid; place-items: center; color: var(--_accent); font-weight: 700; }
|
package/dist/SvTree.svelte
CHANGED
|
@@ -48,6 +48,11 @@
|
|
|
48
48
|
/** Render a built-in search box that drives the filter. */
|
|
49
49
|
searchable?: boolean
|
|
50
50
|
searchPlaceholder?: string
|
|
51
|
+
/** Placeholder row shown under a lazy node while its children load
|
|
52
|
+
* (localization). */
|
|
53
|
+
loadingText?: string
|
|
54
|
+
/** Accessible name for the search box's clear button (localization). */
|
|
55
|
+
clearSearchLabel?: string
|
|
51
56
|
/** Sort siblings by label ('asc'/'desc') or a custom comparator. */
|
|
52
57
|
sort?: 'asc' | 'desc' | ((a: TreeNode, b: TreeNode) => number)
|
|
53
58
|
/** Allow inline rename (double-click or F2). Fires onRename. */
|
|
@@ -77,6 +82,8 @@
|
|
|
77
82
|
filter,
|
|
78
83
|
searchable = false,
|
|
79
84
|
searchPlaceholder = 'Search...',
|
|
85
|
+
loadingText = 'Loading...',
|
|
86
|
+
clearSearchLabel = 'Clear search',
|
|
80
87
|
sort,
|
|
81
88
|
editable = false,
|
|
82
89
|
onRename,
|
|
@@ -173,7 +180,7 @@
|
|
|
173
180
|
if (!node?.lazy || loaded.has(id) || loadingIds.has(id)) return
|
|
174
181
|
loadingIds = new Set(loadingIds).add(id)
|
|
175
182
|
// A placeholder row shows immediately while the promise resolves.
|
|
176
|
-
loaded = new Map(loaded).set(id, [{ id: `${id}__loading`, label:
|
|
183
|
+
loaded = new Map(loaded).set(id, [{ id: `${id}__loading`, label: loadingText, disabled: true }])
|
|
177
184
|
try {
|
|
178
185
|
const kids = await loadChildren(node)
|
|
179
186
|
loaded = new Map(loaded).set(id, kids)
|
|
@@ -268,7 +275,7 @@
|
|
|
268
275
|
<div class="sv-tree__search">
|
|
269
276
|
<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7" /><path d="m21 21-4.3-4.3" /></svg>
|
|
270
277
|
<input class="sv-tree__search-input" type="text" placeholder={searchPlaceholder} bind:value={query} aria-label={searchPlaceholder} />
|
|
271
|
-
{#if query}<button type="button" class="sv-tree__search-clear" aria-label=
|
|
278
|
+
{#if query}<button type="button" class="sv-tree__search-clear" aria-label={clearSearchLabel} onclick={() => (query = '')}>×</button>{/if}
|
|
272
279
|
</div>
|
|
273
280
|
{/if}
|
|
274
281
|
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
package/dist/SvTree.svelte.d.ts
CHANGED
|
@@ -30,6 +30,11 @@ type Props = {
|
|
|
30
30
|
/** Render a built-in search box that drives the filter. */
|
|
31
31
|
searchable?: boolean;
|
|
32
32
|
searchPlaceholder?: string;
|
|
33
|
+
/** Placeholder row shown under a lazy node while its children load
|
|
34
|
+
* (localization). */
|
|
35
|
+
loadingText?: string;
|
|
36
|
+
/** Accessible name for the search box's clear button (localization). */
|
|
37
|
+
clearSearchLabel?: string;
|
|
33
38
|
/** Sort siblings by label ('asc'/'desc') or a custom comparator. */
|
|
34
39
|
sort?: 'asc' | 'desc' | ((a: TreeNode, b: TreeNode) => number);
|
|
35
40
|
/** Allow inline rename (double-click or F2). Fires onRename. */
|
package/dist/SvTreeSelect.svelte
CHANGED
|
@@ -186,7 +186,11 @@
|
|
|
186
186
|
{...ts.itemProps(i)}
|
|
187
187
|
>
|
|
188
188
|
{#if row.hasChildren}
|
|
189
|
-
|
|
189
|
+
<!-- Same chevron as SvTree and the grid's expanders. -->
|
|
190
|
+
<span class="sv-ts__chev" class:is-open={row.expanded} aria-hidden="true">
|
|
191
|
+
<svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor"
|
|
192
|
+
stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="m9 18 6-6-6-6" /></svg>
|
|
193
|
+
</span>
|
|
190
194
|
{:else}
|
|
191
195
|
<span class="sv-ts__chev sv-ts__chev--leaf" aria-hidden="true"></span>
|
|
192
196
|
{/if}
|
|
@@ -226,7 +230,7 @@
|
|
|
226
230
|
:global(.sv-ts__row.is-active) { background: var(--sg-row-hover-bg, #f1f5f9); }
|
|
227
231
|
:global(.sv-ts__row.is-selected) { color: var(--sg-accent, #2563eb); font-weight: 600; }
|
|
228
232
|
:global(.sv-ts__row.is-disabled) { opacity: 0.5; cursor: not-allowed; }
|
|
229
|
-
:global(.sv-ts__chev) { width: 14px; flex: none; color: var(--sg-muted, #64748b); transition: transform 0.12s;
|
|
233
|
+
:global(.sv-ts__chev) { width: 14px; flex: none; display: inline-flex; align-items: center; justify-content: center; color: var(--sg-muted, #64748b); transition: transform 0.12s; }
|
|
230
234
|
:global(.sv-ts__chev.is-open) { transform: rotate(90deg); }
|
|
231
235
|
:global(.sv-ts__chev--leaf) { visibility: hidden; }
|
|
232
236
|
:global(.sv-ts__label) { flex: 1; white-space: nowrap; }
|
package/dist/build-api.js
CHANGED
|
@@ -315,6 +315,22 @@ export function createGridApi(ctx) {
|
|
|
315
315
|
clearFilter(columnId) {
|
|
316
316
|
ctx.clearColumnFilter(columnId);
|
|
317
317
|
},
|
|
318
|
+
refreshEditorOptions(columnId) {
|
|
319
|
+
// Async `editorOptions` are cached per column (or per column+row for a
|
|
320
|
+
// per-row source) so opening an editor twice does not refetch. This
|
|
321
|
+
// drops those entries, so the next render re-runs the source - use it
|
|
322
|
+
// when the underlying list changed server-side.
|
|
323
|
+
if (columnId == null) {
|
|
324
|
+
ctx.asyncEditorOptions = {};
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
const next = { ...ctx.asyncEditorOptions };
|
|
328
|
+
for (const key of Object.keys(next)) {
|
|
329
|
+
if (key === columnId || key.startsWith(`${columnId}::`))
|
|
330
|
+
delete next[key];
|
|
331
|
+
}
|
|
332
|
+
ctx.asyncEditorOptions = next;
|
|
333
|
+
},
|
|
318
334
|
clearAllFilters() {
|
|
319
335
|
// See `setFilter` for why the read-modify-write is untracked.
|
|
320
336
|
untrack(() => {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { l as i } from "./SvDateTimePicker-
|
|
1
|
+
import { Gn as e, io as t, no as n, ro as r } from "./src-BgHjWF0Q.js";
|
|
2
|
+
import { l as i } from "./SvDateTimePicker-ClqtVIj3.js";
|
|
3
3
|
import * as a from "svelte/internal/client";
|
|
4
4
|
import "svelte/internal/disclose-version";
|
|
5
5
|
//#region src/GridMenus.svelte
|
|
6
6
|
var o = a.from_html("<option> </option>"), s = a.from_html("<input class=\"sv-grid-menu-condition-value\" placeholder=\"To\"/>"), c = a.from_html("<option> </option>"), l = a.from_html("<input class=\"sv-grid-menu-condition-value\" placeholder=\"To\"/>"), u = a.from_html("<input class=\"sv-grid-menu-condition-value\"/> <!>", 1), d = a.from_html("<div class=\"sv-grid-menu-join\" role=\"radiogroup\" aria-label=\"Combine conditions\"><button type=\"button\">AND</button> <button type=\"button\">OR</button> <button type=\"button\" class=\"sv-grid-menu-join-x\" title=\"Remove second condition\" aria-label=\"Remove second condition\">×</button></div> <select class=\"sv-grid-menu-operator-select\" aria-label=\"Second filter condition\"></select> <!>", 1), f = a.from_html("<button type=\"button\" class=\"sv-grid-menu-add-cond\">+ Add condition</button>"), p = a.from_html("<input class=\"sv-grid-menu-condition-value\"/> <!> <!>", 1), m = a.from_html("<div class=\"sv-grid-facet-empty\">No values</div>"), h = a.from_html("<div class=\"sv-grid-facet-note\"> </div>"), g = a.from_html("<div class=\"sv-grid-menu-filter\"><div class=\"sv-grid-menu-filter-head\"><span class=\"sv-grid-header-icon\"><!></span> Filter\n condition</div> <select class=\"sv-grid-menu-operator-select\" aria-label=\"Filter condition\"></select> <!> <div class=\"sv-grid-menu-sep\"></div> <div class=\"sv-grid-menu-filter-head\">Values</div> <input class=\"sv-grid-menu-search\" placeholder=\"Search values...\"/> <label class=\"sv-grid-facet sv-grid-facet-all\"><input type=\"checkbox\"/> <span class=\"sv-grid-facet-label\">(Select all)</span></label> <!> <!> <div class=\"sv-grid-menu-actions\"><button type=\"button\" class=\"sv-grid-menu-btn\">Clear filter</button> <button type=\"button\" class=\"sv-grid-menu-btn sv-grid-menu-btn-primary\">Done</button></div></div>"), _ = a.from_html("<div role=\"tooltip\"> </div>"), v = a.from_html("<div class=\"sv-grid-menu-backdrop\" role=\"presentation\"></div>"), y = a.from_html("<button type=\"button\" role=\"tab\">Filter</button>"), b = a.from_html("<div class=\"sv-grid-menu-tabs\" role=\"tablist\"><button type=\"button\" role=\"tab\">General</button> <!> <button type=\"button\" role=\"tab\">Columns</button></div>"), x = a.from_html("<div class=\"sv-grid-menu-filter-head\">Visible columns</div> <!>", 1), S = a.from_html("<button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Sort\n ascending</button> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Sort\n descending</button> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Remove sort</button>", 1), ee = a.from_html("<div class=\"sv-grid-menu-sep\"></div> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Pin to left</button> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Pin to right</button> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Unpin column</button>", 1), C = a.from_html("<div class=\"sv-grid-menu-sep\"></div> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Group\n by this column</button> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Remove grouping</button>", 1), w = a.from_html("<button type=\"button\" role=\"menuitem\" aria-haspopup=\"menu\"><span class=\"sv-grid-header-icon\"><!></span> Choose columns <span class=\"sv-grid-header-icon sv-grid-menu-item-chevron\"><!></span></button>"), T = a.from_html("<!> <!> <div class=\"sv-grid-menu-sep\"></div> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Autosize\n this column</button> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Autosize\n all columns</button> <!> <div class=\"sv-grid-menu-sep\"></div> <!> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Reset columns</button>", 1), te = a.from_html("<div class=\"sv-grid-menu sv-grid-column-menu\" role=\"menu\"><!> <!></div>"), E = a.from_html("<div class=\"sv-grid-menu sv-grid-filter-menu\" role=\"menu\"><!></div>"), D = a.from_html("<div class=\"sv-grid-menu sv-grid-choose-columns-menu\" role=\"menu\"><div class=\"sv-grid-menu-filter-head\">Visible columns</div> <!></div>"), O = a.from_html("<button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitemradio\"><span class=\"sv-grid-header-icon\"><!></span> </button>"), k = a.from_html("<div class=\"sv-grid-menu sv-grid-operator-menu\" role=\"menu\"></div>"), ne = a.from_html("<div class=\"sv-grid-facet-empty\">No values</div>"), re = a.from_html("<div class=\"sv-grid-menu sv-grid-in-suggest\"><!></div>"), A = a.from_html("<div class=\"sv-grid-menu-sep\"></div>"), ie = a.from_html("<button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"> </button>"), j = a.from_html("<div class=\"sv-grid-menu-backdrop\" role=\"presentation\"></div> <div class=\"sv-grid-menu sv-grid-context-menu\" role=\"menu\"></div>", 1), M = a.from_html("<div class=\"sv-grid-menu-backdrop\" role=\"presentation\"></div> <div class=\"sv-grid-menu sv-grid-comment-editor\" role=\"dialog\" aria-label=\"Edit comment\"><textarea class=\"sv-grid-comment-textarea\" rows=\"3\" placeholder=\"Add a comment…\"></textarea> <div class=\"sv-grid-comment-actions\"><button type=\"button\" class=\"sv-grid-comment-remove\">Remove</button> <span class=\"sv-grid-comment-spacer\"></span> <button type=\"button\" class=\"sv-grid-comment-cancel\">Cancel</button> <button type=\"button\" class=\"sv-grid-comment-save\">Save</button></div></div>", 1), ae = a.from_html("<!> <!> <!> <!> <!> <!> <!> <!> <!>", 1);
|
|
7
7
|
function oe(oe, N) {
|
|
8
8
|
a.push(N, !0);
|
|
9
|
-
let se = (
|
|
10
|
-
let i = a.derived(() => a.get(G).find((e) => e.id === r())), _ = a.derived(() => a.get(xe)(a.get(i))), v = a.derived(() => a.get(F)[r()]?.operator ?? a.get(K)(a.get(i))), y = a.derived(() =>
|
|
9
|
+
let se = (n, r = a.noop) => {
|
|
10
|
+
let i = a.derived(() => a.get(G).find((e) => e.id === r())), _ = a.derived(() => a.get(xe)(a.get(i))), v = a.derived(() => a.get(F)[r()]?.operator ?? a.get(K)(a.get(i))), y = a.derived(() => t(a.get(i)?.columnDef.editorType ?? "text"));
|
|
11
11
|
var b = g(), x = a.child(b), S = a.child(x), ee = a.child(S);
|
|
12
12
|
a.snippet(ee, () => N.icon, () => "filter"), a.reset(S), a.next(), a.reset(x);
|
|
13
13
|
var C = a.sibling(x, 2);
|
|
@@ -106,10 +106,10 @@ function oe(oe, N) {
|
|
|
106
106
|
a.remove_input_defaults(E);
|
|
107
107
|
var D = a.sibling(E, 2), O = a.child(D);
|
|
108
108
|
a.remove_input_defaults(O), a.next(2), a.reset(D);
|
|
109
|
-
var k = a.sibling(D, 2), ne = (
|
|
109
|
+
var k = a.sibling(D, 2), ne = (t) => {
|
|
110
110
|
{
|
|
111
111
|
let n = a.derived(() => a.get(X).length > Ue);
|
|
112
|
-
t
|
|
112
|
+
e(t, {
|
|
113
113
|
block: !0,
|
|
114
114
|
checkbox: !0,
|
|
115
115
|
multiple: !0,
|
|
@@ -148,7 +148,7 @@ function oe(oe, N) {
|
|
|
148
148
|
w !== (w = a.get(v)) && (C.value = (C.__value = a.get(v)) ?? "", a.select_option(C, a.get(v))), a.set_checked(O, e), M.disabled = t;
|
|
149
149
|
}, [() => a.get(Ve)(r()), () => !a.get(Te)(r())]), a.delegated("change", C, (e) => a.get(ve)(r(), e.currentTarget.value)), a.bind_value(E, () => P().columnMenuSearch, (e) => P().columnMenuSearch = e), a.delegated("change", O, () => a.get(He)(r())), a.delegated("click", M, () => a.get(Ye)(r())), a.delegated("click", ae, function(...e) {
|
|
150
150
|
a.get(Y)?.apply(this, e);
|
|
151
|
-
}), a.append(
|
|
151
|
+
}), a.append(n, b);
|
|
152
152
|
}, P = a.prop(N, "ctrl", 7), ce = a.derived(() => P().groupingControlsEnabled), F = a.derived(() => P().filterMenuValues), I = a.derived(() => P().tooltip);
|
|
153
153
|
a.derived(() => P().showTooltipFor);
|
|
154
154
|
let L = a.derived(() => P().columnMenuFor), R = a.derived(() => P().columnMenuPos), z = a.derived(() => P().filterMenuFor), B = a.derived(() => P().filterMenuPos), V = a.derived(() => P().operatorMenuFor), le = a.derived(() => P().operatorMenuPos), H = a.derived(() => P().chooseColumnsPos), U = a.derived(() => P().showColumnFiltersEffective), W = a.derived(() => P().props.columnMenuTabs === !0), ue = a.derived(() => P().grid), G = a.derived(() => P().allColumns), de = a.derived(() => P().isColumnPinned), fe = a.derived(() => P().pinColumnLeft), pe = a.derived(() => P().pinColumnRight), me = a.derived(() => P().unpinColumn), he = a.derived(() => P().sortDirectionByColumn), ge = a.derived(() => P().groupingColumns), _e = a.derived(() => P().columnVirtualizationEnabled), ve = a.derived(() => P().updateFilterOperator), ye = a.derived(() => P().updateFilterMenuValue), be = a.derived(() => P().updateFilterMenuValueTo), xe = a.derived(() => P().operatorsForColumn), K = a.derived(() => P().defaultOperatorFor), q = a.derived(() => P().operatorLabelFor), Se = a.derived(() => P().filterRowValues), Ce = a.derived(() => P().inSuggestFor), we = a.derived(() => P().inSuggestPos);
|
|
@@ -174,11 +174,11 @@ function oe(oe, N) {
|
|
|
174
174
|
};
|
|
175
175
|
});
|
|
176
176
|
let Ee = a.derived(() => P().autosizeColumn), De = a.derived(() => P().autosizeAllColumns), Oe = a.derived(() => P().resetColumns), ke = a.derived(() => P().openChooseColumns), Ae = a.derived(() => P().sortColumnFromMenu), je = a.derived(() => P().clearColumnSort), Me = a.derived(() => P().groupByColumnFromMenu), Ne = a.derived(() => P().clearGroupingFromMenu), Pe = a.derived(() => P().columnMenuFacetValues), Fe = a.derived(() => P().columnMenuVisibleFacets), X = a.derived(() => P().columnMenuFacetOptions), Ie = a.derived(() => P().columnMenuSelectedFacets), Le = a.derived(() => P().setFacetSelection), Re = a.derived(() => P().setFilterTokens), Z = a.derived(() => P().inSuggestOptions), ze = a.derived(() => P().openInSuggest), Be = a.derived(() => P().closeInSuggest), Ve = a.derived(() => P().isAllFacetsChecked), He = a.derived(() => P().toggleAllFacets), Ue = 40;
|
|
177
|
-
function We(
|
|
178
|
-
a.get(ze)(
|
|
177
|
+
function We(e, t) {
|
|
178
|
+
a.get(ze)(e, t), P().inSuggestQuery = r(e.value);
|
|
179
179
|
}
|
|
180
|
-
function Ge(
|
|
181
|
-
P().inSuggestQuery = e
|
|
180
|
+
function Ge(e, t) {
|
|
181
|
+
P().inSuggestQuery = r(e.value), P().inSuggestFor !== t && a.get(ze)(e, t);
|
|
182
182
|
}
|
|
183
183
|
function Ke(e) {
|
|
184
184
|
return e.map((e) => ({
|
|
@@ -217,7 +217,7 @@ function oe(oe, N) {
|
|
|
217
217
|
a.if(at, (e) => {
|
|
218
218
|
(a.get(L) || a.get(z) || a.get(V) || a.get(H)) && e(ot);
|
|
219
219
|
});
|
|
220
|
-
var st = a.sibling(at, 2), ct = (
|
|
220
|
+
var st = a.sibling(at, 2), ct = (t) => {
|
|
221
221
|
let n = a.derived(() => a.get(L)), r = a.derived(() => a.get(G).find((e) => e.id === a.get(n))), i = a.derived(() => a.get(r)?.getCanSort?.() ?? !1), o = a.derived(() => a.get(r)?.columnDef.field != null && a.get(r)?.columnDef.filterable !== !1), s = a.derived(() => P().columnMenuTab);
|
|
222
222
|
var c = te(), l = a.child(c), u = (e) => {
|
|
223
223
|
var t = b(), n = a.child(t);
|
|
@@ -243,17 +243,17 @@ function oe(oe, N) {
|
|
|
243
243
|
});
|
|
244
244
|
var d = a.sibling(l, 2), f = (e) => {
|
|
245
245
|
se(e, () => a.get(n));
|
|
246
|
-
}, p = (
|
|
246
|
+
}, p = (t) => {
|
|
247
247
|
let n = a.derived(() => a.get(ue).getAllColumns());
|
|
248
248
|
var r = x(), i = a.sibling(a.first_child(r), 2);
|
|
249
249
|
{
|
|
250
|
-
let
|
|
251
|
-
|
|
250
|
+
let t = a.derived(() => a.get(n).length > 40), r = a.derived(() => Ke(a.get(n))), o = a.derived(() => qe(a.get(n)));
|
|
251
|
+
e(i, {
|
|
252
252
|
block: !0,
|
|
253
253
|
checkbox: !0,
|
|
254
254
|
multiple: !0,
|
|
255
255
|
get virtual() {
|
|
256
|
-
return a.get(
|
|
256
|
+
return a.get(t);
|
|
257
257
|
},
|
|
258
258
|
rows: 9,
|
|
259
259
|
rowHeight: 24,
|
|
@@ -268,7 +268,7 @@ function oe(oe, N) {
|
|
|
268
268
|
onChange: (e) => Je(a.get(n), e)
|
|
269
269
|
});
|
|
270
270
|
}
|
|
271
|
-
a.append(
|
|
271
|
+
a.append(t, r);
|
|
272
272
|
}, m = (e) => {
|
|
273
273
|
var t = T(), r = a.first_child(t), o = (e) => {
|
|
274
274
|
var t = S(), r = a.first_child(t), i = a.child(r), o = a.child(i);
|
|
@@ -334,7 +334,7 @@ function oe(oe, N) {
|
|
|
334
334
|
};
|
|
335
335
|
a.if(d, (e) => {
|
|
336
336
|
a.get(W) && a.get(s) === "filter" && a.get(o) && a.get(U) ? e(f) : a.get(W) && a.get(s) === "columns" ? e(p, 1) : e(m, -1);
|
|
337
|
-
}), a.reset(c), a.template_effect(() => a.set_style(c, `left: ${a.get(R).x}px; top: ${a.get(R).y}px; max-height: calc(100vh - ${a.get(R).y}px - 12px);`)), a.append(
|
|
337
|
+
}), a.reset(c), a.template_effect(() => a.set_style(c, `left: ${a.get(R).x}px; top: ${a.get(R).y}px; max-height: calc(100vh - ${a.get(R).y}px - 12px);`)), a.append(t, c);
|
|
338
338
|
};
|
|
339
339
|
a.if(st, (e) => {
|
|
340
340
|
a.get(L) && e(ct);
|
|
@@ -346,17 +346,17 @@ function oe(oe, N) {
|
|
|
346
346
|
a.if(lt, (e) => {
|
|
347
347
|
a.get(z) && a.get(U) && e(ut);
|
|
348
348
|
});
|
|
349
|
-
var dt = a.sibling(lt, 2), ft = (
|
|
349
|
+
var dt = a.sibling(lt, 2), ft = (t) => {
|
|
350
350
|
let n = a.derived(() => a.get(ue).getAllColumns());
|
|
351
351
|
var r = D(), i = a.sibling(a.child(r), 2);
|
|
352
352
|
{
|
|
353
|
-
let
|
|
354
|
-
|
|
353
|
+
let t = a.derived(() => a.get(n).length > 40), r = a.derived(() => Ke(a.get(n))), o = a.derived(() => qe(a.get(n)));
|
|
354
|
+
e(i, {
|
|
355
355
|
block: !0,
|
|
356
356
|
checkbox: !0,
|
|
357
357
|
multiple: !0,
|
|
358
358
|
get virtual() {
|
|
359
|
-
return a.get(
|
|
359
|
+
return a.get(t);
|
|
360
360
|
},
|
|
361
361
|
rows: 11,
|
|
362
362
|
rowHeight: 24,
|
|
@@ -371,7 +371,7 @@ function oe(oe, N) {
|
|
|
371
371
|
onChange: (e) => Je(a.get(n), e)
|
|
372
372
|
});
|
|
373
373
|
}
|
|
374
|
-
a.reset(r), a.template_effect(() => a.set_style(r, `left: ${a.get(H).x}px; top: ${a.get(H).y}px;`)), a.append(
|
|
374
|
+
a.reset(r), a.template_effect(() => a.set_style(r, `left: ${a.get(H).x}px; top: ${a.get(H).y}px;`)), a.append(t, r);
|
|
375
375
|
};
|
|
376
376
|
a.if(dt, (e) => {
|
|
377
377
|
a.get(H) && e(ft);
|
|
@@ -393,17 +393,17 @@ function oe(oe, N) {
|
|
|
393
393
|
a.if(pt, (e) => {
|
|
394
394
|
a.get(V) && e(mt);
|
|
395
395
|
});
|
|
396
|
-
var ht = a.sibling(pt, 2), gt = (
|
|
397
|
-
let i = a.derived(() => a.get(Ce)), o = a.derived(() => new Set(
|
|
398
|
-
var s = re(), c = a.child(s), l = (
|
|
396
|
+
var ht = a.sibling(pt, 2), gt = (t) => {
|
|
397
|
+
let i = a.derived(() => a.get(Ce)), o = a.derived(() => new Set(n(a.get(Se)[a.get(i)] ?? "")));
|
|
398
|
+
var s = re(), c = a.child(s), l = (t) => {
|
|
399
399
|
{
|
|
400
|
-
let
|
|
401
|
-
t
|
|
400
|
+
let n = a.derived(() => a.get(Z).length > 40);
|
|
401
|
+
e(t, {
|
|
402
402
|
block: !0,
|
|
403
403
|
checkbox: !0,
|
|
404
404
|
multiple: !0,
|
|
405
405
|
get virtual() {
|
|
406
|
-
return a.get(
|
|
406
|
+
return a.get(n);
|
|
407
407
|
},
|
|
408
408
|
rows: 8,
|
|
409
409
|
rowHeight: 26,
|
|
@@ -415,9 +415,9 @@ function oe(oe, N) {
|
|
|
415
415
|
get value() {
|
|
416
416
|
return a.get(o);
|
|
417
417
|
},
|
|
418
|
-
onChange: (
|
|
419
|
-
let
|
|
420
|
-
|
|
418
|
+
onChange: (e) => {
|
|
419
|
+
let t = new Set(e), n = r(a.get(Se)[a.get(i)] ?? "");
|
|
420
|
+
n && t.delete(n), a.get(Re)(a.get(i), [...t]), P().inSuggestQuery = "";
|
|
421
421
|
}
|
|
422
422
|
});
|
|
423
423
|
}
|
|
@@ -427,7 +427,7 @@ function oe(oe, N) {
|
|
|
427
427
|
};
|
|
428
428
|
a.if(c, (e) => {
|
|
429
429
|
a.get(Z).length ? e(l) : e(u, -1);
|
|
430
|
-
}), a.reset(s), a.template_effect(() => a.set_style(s, `left: ${a.get(we).x}px; top: ${a.get(we).y}px;`)), a.delegated("mousedown", s, (e) => e.preventDefault()), a.append(
|
|
430
|
+
}), a.reset(s), a.template_effect(() => a.set_style(s, `left: ${a.get(we).x}px; top: ${a.get(we).y}px;`)), a.delegated("mousedown", s, (e) => e.preventDefault()), a.append(t, s);
|
|
431
431
|
};
|
|
432
432
|
a.if(ht, (e) => {
|
|
433
433
|
a.get(Ce) && e(gt);
|