snice 7.8.0 → 7.9.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 +1 -1
- package/adapters/react/SniceProvider.js +1 -1
- package/adapters/react/SniceRouter.js +1 -1
- package/adapters/react/matchRoute.js +1 -1
- package/adapters/react/table.d.ts +1 -0
- package/adapters/react/table.d.ts.map +1 -1
- package/adapters/react/table.js +1 -1
- package/adapters/react/table.js.map +1 -1
- package/adapters/react/table.tsx +2 -1
- package/adapters/react/useRequestHandler.js +1 -1
- package/bin/analyzer-contracts.js +17 -1
- package/custom-elements.json +57 -3
- package/dist/cdn/accordion/snice-accordion.js +1 -1
- package/dist/cdn/action-bar/snice-action-bar.js +1 -1
- package/dist/cdn/activity-feed/snice-activity-feed.js +1 -1
- package/dist/cdn/alert/snice-alert.js +1 -1
- package/dist/cdn/app-tiles/snice-app-tiles.js +1 -1
- package/dist/cdn/approval-flow/snice-approval-flow.js +1 -1
- package/dist/cdn/audio-recorder/snice-audio-recorder.js +1 -1
- package/dist/cdn/availability/snice-availability.js +1 -1
- package/dist/cdn/avatar/snice-avatar.js +1 -1
- package/dist/cdn/avatar-group/snice-avatar-group.js +1 -1
- package/dist/cdn/badge/snice-badge.js +1 -1
- package/dist/cdn/banner/snice-banner.js +1 -1
- package/dist/cdn/binpack/snice-binpack.js +1 -1
- package/dist/cdn/book/snice-book.js +1 -1
- package/dist/cdn/booking/snice-booking.js +1 -1
- package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +1 -1
- package/dist/cdn/button/snice-button.js +1 -1
- package/dist/cdn/calendar/README.md +2 -2
- package/dist/cdn/calendar/snice-calendar.js +537 -44
- package/dist/cdn/calendar/snice-calendar.js.map +1 -1
- package/dist/cdn/calendar/snice-calendar.min.js +2 -2
- package/dist/cdn/calendar/snice-calendar.min.js.map +1 -1
- package/dist/cdn/camera/snice-camera.js +1 -1
- package/dist/cdn/camera-annotate/snice-camera-annotate.js +1 -1
- package/dist/cdn/candlestick/snice-candlestick.js +1 -1
- package/dist/cdn/card/snice-card.js +1 -1
- package/dist/cdn/carousel/snice-carousel.js +1 -1
- package/dist/cdn/cart/snice-cart.js +1 -1
- package/dist/cdn/chart/snice-chart.js +1 -1
- package/dist/cdn/chat/snice-chat.js +1 -1
- package/dist/cdn/checkbox/snice-checkbox.js +1 -1
- package/dist/cdn/chip/snice-chip.js +1 -1
- package/dist/cdn/code-block/README.md +2 -2
- package/dist/cdn/code-block/snice-code-block.js +177 -167
- package/dist/cdn/code-block/snice-code-block.js.map +1 -1
- package/dist/cdn/code-block/snice-code-block.min.js +2 -2
- package/dist/cdn/code-block/snice-code-block.min.js.map +1 -1
- package/dist/cdn/color-display/snice-color-display.js +1 -1
- package/dist/cdn/color-picker/snice-color-picker.js +1 -1
- package/dist/cdn/command-palette/README.md +1 -1
- package/dist/cdn/command-palette/snice-command-palette.js +2 -2
- package/dist/cdn/command-palette/snice-command-palette.js.map +1 -1
- package/dist/cdn/command-palette/snice-command-palette.min.js +1 -1
- package/dist/cdn/command-palette/snice-command-palette.min.js.map +1 -1
- package/dist/cdn/comments/snice-comments.js +1 -1
- package/dist/cdn/countdown/snice-countdown.js +1 -1
- package/dist/cdn/cropper/snice-cropper.js +1 -1
- package/dist/cdn/data-card/snice-data-card.js +1 -1
- package/dist/cdn/date-picker/snice-date-picker.js +1 -1
- package/dist/cdn/date-range-picker/snice-date-range-picker.js +1 -1
- package/dist/cdn/date-time-picker/snice-date-time-picker.js +1 -1
- package/dist/cdn/diff/snice-diff.js +1 -1
- package/dist/cdn/divider/snice-divider.js +1 -1
- package/dist/cdn/doc/snice-doc.js +1 -1
- package/dist/cdn/draw/snice-draw.js +1 -1
- package/dist/cdn/drawer/snice-drawer.js +1 -1
- package/dist/cdn/empty-state/snice-empty-state.js +1 -1
- package/dist/cdn/estimate/snice-estimate.js +1 -1
- package/dist/cdn/file-gallery/snice-file-gallery.js +1 -1
- package/dist/cdn/file-upload/snice-file-upload.js +1 -1
- package/dist/cdn/flip-card/snice-flip-card.js +1 -1
- package/dist/cdn/flow/snice-flow.js +1 -1
- package/dist/cdn/form-layout/snice-form-layout.js +1 -1
- package/dist/cdn/funnel/snice-funnel.js +1 -1
- package/dist/cdn/gantt/snice-gantt.js +1 -1
- package/dist/cdn/gauge/snice-gauge.js +1 -1
- package/dist/cdn/grid/snice-grid.js +1 -1
- package/dist/cdn/heatmap/snice-heatmap.js +1 -1
- package/dist/cdn/image/snice-image.js +1 -1
- package/dist/cdn/input/snice-input.js +1 -1
- package/dist/cdn/invoice/snice-invoice.js +1 -1
- package/dist/cdn/kanban/snice-kanban.js +1 -1
- package/dist/cdn/key-value/snice-key-value.js +1 -1
- package/dist/cdn/kpi/snice-kpi.js +1 -1
- package/dist/cdn/layout/snice-layout.js +1 -1
- package/dist/cdn/leaderboard/snice-leaderboard.js +1 -1
- package/dist/cdn/link/snice-link.js +1 -1
- package/dist/cdn/link-preview/snice-link-preview.js +1 -1
- package/dist/cdn/list/snice-list.js +1 -1
- package/dist/cdn/location/snice-location.js +1 -1
- package/dist/cdn/login/snice-login.js +1 -1
- package/dist/cdn/map/snice-map.js +1 -1
- package/dist/cdn/markdown/snice-markdown.js +1 -1
- package/dist/cdn/masonry/snice-masonry.js +1 -1
- package/dist/cdn/menu/snice-menu.js +1 -1
- package/dist/cdn/message-strip/snice-message-strip.js +1 -1
- package/dist/cdn/modal/snice-modal.js +1 -1
- package/dist/cdn/music-player/snice-music-player.js +1 -1
- package/dist/cdn/nav/snice-nav.js +1 -1
- package/dist/cdn/network-graph/snice-network-graph.js +1 -1
- package/dist/cdn/notification-center/snice-notification-center.js +1 -1
- package/dist/cdn/order-tracker/snice-order-tracker.js +1 -1
- package/dist/cdn/org-chart/snice-org-chart.js +1 -1
- package/dist/cdn/pagination/snice-pagination.js +1 -1
- package/dist/cdn/paint/snice-paint.js +1 -1
- package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +1 -1
- package/dist/cdn/permission-matrix/snice-permission-matrix.js +1 -1
- package/dist/cdn/podcast-player/snice-podcast-player.js +1 -1
- package/dist/cdn/popover/snice-popover.js +1 -1
- package/dist/cdn/pricing-table/snice-pricing-table.js +1 -1
- package/dist/cdn/product-card/snice-product-card.js +1 -1
- package/dist/cdn/progress/snice-progress.js +2 -2
- package/dist/cdn/progress/snice-progress.js.map +1 -1
- package/dist/cdn/progress/snice-progress.min.js +1 -1
- package/dist/cdn/progress/snice-progress.min.js.map +1 -1
- package/dist/cdn/progress-ring/snice-progress-ring.js +1 -1
- package/dist/cdn/qr-code/README.md +2 -2
- package/dist/cdn/qr-code/snice-qr-code.js +19 -3
- package/dist/cdn/qr-code/snice-qr-code.js.map +1 -1
- package/dist/cdn/qr-code/snice-qr-code.min.js +2 -2
- package/dist/cdn/qr-code/snice-qr-code.min.js.map +1 -1
- package/dist/cdn/qr-reader/snice-qr-reader.js +1 -1
- package/dist/cdn/radio/snice-radio.js +1 -1
- package/dist/cdn/range-slider/snice-range-slider.js +1 -1
- package/dist/cdn/rating/snice-rating.js +1 -1
- package/dist/cdn/receipt/snice-receipt.js +5 -2
- package/dist/cdn/receipt/snice-receipt.js.map +1 -1
- package/dist/cdn/receipt/snice-receipt.min.js +1 -1
- package/dist/cdn/receipt/snice-receipt.min.js.map +1 -1
- package/dist/cdn/recipe/snice-recipe.js +1 -1
- package/dist/cdn/runtime/snice-runtime.esm.js +4 -4
- package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.js +4 -4
- package/dist/cdn/runtime/snice-runtime.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
- package/dist/cdn/sankey/snice-sankey.js +1 -1
- package/dist/cdn/segmented-control/snice-segmented-control.js +1 -1
- package/dist/cdn/select/README.md +2 -2
- package/dist/cdn/select/snice-select.js +6 -9
- package/dist/cdn/select/snice-select.js.map +1 -1
- package/dist/cdn/select/snice-select.min.js +2 -2
- package/dist/cdn/select/snice-select.min.js.map +1 -1
- package/dist/cdn/skeleton/snice-skeleton.js +1 -1
- package/dist/cdn/slider/snice-slider.js +1 -1
- package/dist/cdn/sortable/snice-sortable.js +1 -1
- package/dist/cdn/sparkline/snice-sparkline.js +1 -1
- package/dist/cdn/spinner/snice-spinner.js +1 -1
- package/dist/cdn/split-button/snice-split-button.js +1 -1
- package/dist/cdn/split-pane/snice-split-pane.js +1 -1
- package/dist/cdn/spotlight/snice-spotlight.js +1 -1
- package/dist/cdn/stat-group/snice-stat-group.js +1 -1
- package/dist/cdn/step-input/snice-step-input.js +1 -1
- package/dist/cdn/stepper/snice-stepper.js +1 -1
- package/dist/cdn/switch/snice-switch.js +1 -1
- package/dist/cdn/table/README.md +2 -2
- package/dist/cdn/table/snice-table.esm.js +1940 -407
- package/dist/cdn/table/snice-table.esm.js.map +1 -1
- package/dist/cdn/table/snice-table.esm.min.js +242 -53
- package/dist/cdn/table/snice-table.esm.min.js.map +1 -1
- package/dist/cdn/table/snice-table.js +1940 -407
- package/dist/cdn/table/snice-table.js.map +1 -1
- package/dist/cdn/table/snice-table.min.js +234 -45
- package/dist/cdn/table/snice-table.min.js.map +1 -1
- package/dist/cdn/tabs/snice-tabs.js +1 -1
- package/dist/cdn/tag/snice-tag.js +1 -1
- package/dist/cdn/tag-input/snice-tag-input.js +1 -1
- package/dist/cdn/terminal/snice-terminal.js +1 -1
- package/dist/cdn/testimonial/snice-testimonial.js +1 -1
- package/dist/cdn/textarea/snice-textarea.js +1 -1
- package/dist/cdn/time-picker/snice-time-picker.js +1 -1
- package/dist/cdn/time-range-picker/snice-time-range-picker.js +1 -1
- package/dist/cdn/timeline/snice-timeline.js +1 -1
- package/dist/cdn/timer/snice-timer.js +1 -1
- package/dist/cdn/toast/snice-toast.js +1 -1
- package/dist/cdn/tooltip/snice-tooltip.js +1 -1
- package/dist/cdn/tree/snice-tree.js +1 -1
- package/dist/cdn/treemap/snice-treemap.js +1 -1
- package/dist/cdn/user-card/snice-user-card.js +1 -1
- package/dist/cdn/video-player/snice-video-player.js +1 -1
- package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +1 -1
- package/dist/cdn/waterfall/snice-waterfall.js +1 -1
- package/dist/cdn/weather/snice-weather.js +1 -1
- package/dist/cdn/work-order/snice-work-order.js +1 -1
- package/dist/components/calendar/snice-calendar.d.ts +187 -5
- package/dist/components/calendar/snice-calendar.js +537 -44
- package/dist/components/calendar/snice-calendar.js.map +1 -1
- package/dist/components/calendar/snice-calendar.types.d.ts +2 -1
- package/dist/components/code-block/formatter.d.ts +6 -0
- package/dist/components/code-block/formatter.js +174 -164
- package/dist/components/code-block/formatter.js.map +1 -1
- package/dist/components/code-block/grammars/snice.json +1 -1
- package/dist/components/code-block/grammars/typescript.json +1 -1
- package/dist/components/command-palette/snice-command-palette.js +1 -1
- package/dist/components/command-palette/snice-command-palette.js.map +1 -1
- package/dist/components/progress/snice-progress.js +1 -1
- package/dist/components/progress/snice-progress.js.map +1 -1
- package/dist/components/qr-code/qrcode.d.ts +1 -1
- package/dist/components/qr-code/qrcode.js +18 -2
- package/dist/components/qr-code/qrcode.js.map +1 -1
- package/dist/components/receipt/snice-receipt.js +4 -1
- package/dist/components/receipt/snice-receipt.js.map +1 -1
- package/dist/components/select/snice-select.d.ts +1 -1
- package/dist/components/select/snice-select.js +5 -8
- package/dist/components/select/snice-select.js.map +1 -1
- package/dist/components/table/snice-cell-actions.js +1 -1
- package/dist/components/table/snice-cell-actions.js.map +1 -1
- package/dist/components/table/snice-cell-color.js +1 -1
- package/dist/components/table/snice-cell-color.js.map +1 -1
- package/dist/components/table/snice-cell-date.js +20 -8
- package/dist/components/table/snice-cell-date.js.map +1 -1
- package/dist/components/table/snice-cell-email.js +1 -1
- package/dist/components/table/snice-cell-email.js.map +1 -1
- package/dist/components/table/snice-cell-image.js +1 -1
- package/dist/components/table/snice-cell-image.js.map +1 -1
- package/dist/components/table/snice-cell-json.js +1 -1
- package/dist/components/table/snice-cell-json.js.map +1 -1
- package/dist/components/table/snice-cell-link.js +1 -1
- package/dist/components/table/snice-cell-link.js.map +1 -1
- package/dist/components/table/snice-cell-location.js +1 -1
- package/dist/components/table/snice-cell-location.js.map +1 -1
- package/dist/components/table/snice-cell-phone.js +1 -1
- package/dist/components/table/snice-cell-phone.js.map +1 -1
- package/dist/components/table/snice-cell-status.js +1 -1
- package/dist/components/table/snice-cell-status.js.map +1 -1
- package/dist/components/table/snice-cell.d.ts +10 -0
- package/dist/components/table/snice-cell.js +59 -13
- package/dist/components/table/snice-cell.js.map +1 -1
- package/dist/components/table/snice-row.d.ts +0 -1
- package/dist/components/table/snice-row.js +4 -10
- package/dist/components/table/snice-row.js.map +1 -1
- package/dist/components/table/snice-table.d.ts +170 -2
- package/dist/components/table/snice-table.js +868 -189
- package/dist/components/table/snice-table.js.map +1 -1
- package/dist/components/table/snice-table.types.d.ts +17 -0
- package/dist/components/table/table-cell-presentation.d.ts +17 -4
- package/dist/components/table/table-cell-presentation.js +37 -11
- package/dist/components/table/table-cell-presentation.js.map +1 -1
- package/dist/components/table/table-column-manager.d.ts +153 -2
- package/dist/components/table/table-column-manager.js +364 -43
- package/dist/components/table/table-column-manager.js.map +1 -1
- package/dist/components/table/table-date.d.ts +29 -0
- package/dist/components/table/table-date.js +78 -0
- package/dist/components/table/table-date.js.map +1 -0
- package/dist/components/table/table-export.js +6 -2
- package/dist/components/table/table-export.js.map +1 -1
- package/dist/components/table/table-filter-engine.d.ts +9 -0
- package/dist/components/table/table-filter-engine.js +58 -14
- package/dist/components/table/table-filter-engine.js.map +1 -1
- package/dist/components/table/table-keyboard.d.ts +8 -0
- package/dist/components/table/table-keyboard.js +14 -3
- package/dist/components/table/table-keyboard.js.map +1 -1
- package/dist/components/table/table-toolbar.js +1 -0
- package/dist/components/table/table-toolbar.js.map +1 -1
- package/dist/components/table/table-tree-data.d.ts +2 -0
- package/dist/components/table/table-tree-data.js +35 -9
- package/dist/components/table/table-tree-data.js.map +1 -1
- package/dist/components/table/table-virtualizer.d.ts +44 -7
- package/dist/components/table/table-virtualizer.js +101 -54
- package/dist/components/table/table-virtualizer.js.map +1 -1
- package/dist/components/theme/theme.css +9 -0
- package/dist/index.cjs +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.iife.js +1 -1
- package/dist/react/SniceProvider.js +1 -1
- package/dist/react/SniceRouter.js +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/matchRoute.js +1 -1
- package/dist/react/useRequestHandler.js +1 -1
- package/dist/symbols.cjs +1 -1
- package/dist/symbols.esm.js +1 -1
- package/dist/testing-dom.cjs +1 -1
- package/dist/testing-dom.esm.js +1 -1
- package/dist/transitions.cjs +1 -1
- package/dist/transitions.esm.js +1 -1
- package/docs/ai/DEVELOPMENT.md +93 -2
- package/docs/ai/components/calendar.md +113 -10
- package/docs/ai/components/code-block.md +4 -0
- package/docs/ai/components/doc.md +1 -1
- package/docs/ai/components/progress.md +1 -0
- package/docs/ai/components/receipt.md +1 -1
- package/docs/ai/components/table.md +29 -30
- package/docs/ai/components/theme.md +1 -0
- package/docs/ai/events.md +30 -0
- package/docs/ai/theme.md +1 -0
- package/docs/components/calendar.md +171 -11
- package/docs/components/code-block.md +2 -0
- package/docs/components/doc.md +1 -1
- package/docs/components/progress.md +13 -0
- package/docs/components/receipt.md +1 -0
- package/docs/components/table.md +274 -15
- package/docs/components/theme.md +5 -0
- package/docs/events.md +49 -0
- package/docs/plans/2026-03-06-date-range-picker-plan.md +4 -4
- package/docs/plans/2026-03-07-table-mui-parity-design.md +1 -1
- package/docs/plans/2026-03-09-action-bar-plan.md +11 -11
- package/docs/superpowers/specs/2026-07-09-table-incredible-design.md +1 -1
- package/docs/superpowers/specs/2026-07-09-table-phase0-implementation.md +2 -2
- package/package.json +3 -1
- package/vscode.html-custom-data.json +13 -1
|
@@ -4,6 +4,7 @@ import '../button/snice-button';
|
|
|
4
4
|
import '../checkbox/snice-checkbox';
|
|
5
5
|
import '../modal/snice-modal';
|
|
6
6
|
import '../empty-state/snice-empty-state';
|
|
7
|
+
import '../progress/snice-progress';
|
|
7
8
|
import './snice-cell.ts';
|
|
8
9
|
import './snice-cell-text.ts';
|
|
9
10
|
import './snice-cell-number.ts';
|
|
@@ -33,7 +34,7 @@ import type { DetailPanelOptions } from './table-master-detail';
|
|
|
33
34
|
import type { ToolbarOptions } from './table-toolbar';
|
|
34
35
|
import type { TreeDataOptions } from './table-tree-data';
|
|
35
36
|
import type { ColumnGroup } from './table-column-manager';
|
|
36
|
-
import type { SniceTableElement, SelectionMode, ListViewRenderer } from './snice-table.types';
|
|
37
|
+
import type { ColumnFit, SniceTableElement, SelectionMode, ListViewRenderer } from './snice-table.types';
|
|
37
38
|
export declare class SniceTable extends HTMLElement implements SniceTableElement {
|
|
38
39
|
striped: boolean;
|
|
39
40
|
searchable: boolean;
|
|
@@ -84,6 +85,15 @@ export declare class SniceTable extends HTMLElement implements SniceTableElement
|
|
|
84
85
|
editable: boolean;
|
|
85
86
|
editMode: 'cell' | 'row';
|
|
86
87
|
density: 'compact' | 'standard' | 'comfortable';
|
|
88
|
+
/**
|
|
89
|
+
* How the columns relate to the frame's width.
|
|
90
|
+
*
|
|
91
|
+
* `scroll` keeps every column at or above its `minWidth` and lets the frame
|
|
92
|
+
* scroll horizontally when they no longer fit. `squish` makes the frame the
|
|
93
|
+
* hard constraint instead: minimums relax, content ellipsises, and the table
|
|
94
|
+
* never scrolls sideways. See the `ColumnFit` docs in snice-table.types.ts.
|
|
95
|
+
*/
|
|
96
|
+
columnFit: ColumnFit;
|
|
87
97
|
headerFilters: boolean;
|
|
88
98
|
quickFilter: boolean;
|
|
89
99
|
rowReorder: boolean;
|
|
@@ -122,6 +132,8 @@ export declare class SniceTable extends HTMLElement implements SniceTableElement
|
|
|
122
132
|
table: HTMLTableElement;
|
|
123
133
|
thead: HTMLTableSectionElement;
|
|
124
134
|
tbody: HTMLTableSectionElement;
|
|
135
|
+
/** Frame width the columns were last fitted to — see handleFrameResize. */
|
|
136
|
+
private lastFittedFrameWidth;
|
|
125
137
|
getTableConfig(): any;
|
|
126
138
|
getTableData(): any;
|
|
127
139
|
private unsortedData;
|
|
@@ -133,9 +145,22 @@ export declare class SniceTable extends HTMLElement implements SniceTableElement
|
|
|
133
145
|
private renderedRows;
|
|
134
146
|
private settingSortedData;
|
|
135
147
|
private settingDataImperative;
|
|
148
|
+
private reorderingRows;
|
|
136
149
|
private renderQueued;
|
|
137
150
|
private pendingHeaderRender;
|
|
138
151
|
private pendingBodyRender;
|
|
152
|
+
private bodyRenderRetries;
|
|
153
|
+
private bodyRenderRetryQueued;
|
|
154
|
+
/**
|
|
155
|
+
* Requeue a body render whose target had not been committed yet. A frame is
|
|
156
|
+
* the right granularity — the shadow template commits between frames — and
|
|
157
|
+
* the paint is dropped again (silently, as before) once the retries run out.
|
|
158
|
+
*
|
|
159
|
+
* The retry CHAINS: a template that needs more than one frame to commit is
|
|
160
|
+
* the whole reason this exists, so a retry that still finds no <tbody> spends
|
|
161
|
+
* one more of the budget rather than giving the frame back and quitting.
|
|
162
|
+
*/
|
|
163
|
+
private rearmBodyRender;
|
|
139
164
|
private scheduleRender;
|
|
140
165
|
private debouncedDataRequest;
|
|
141
166
|
styles(): import("snice").CSSResult;
|
|
@@ -157,7 +182,14 @@ export declare class SniceTable extends HTMLElement implements SniceTableElement
|
|
|
157
182
|
handleColumnsAssignment(): void;
|
|
158
183
|
handleGroupByChange(): void;
|
|
159
184
|
private syncGrouping;
|
|
160
|
-
handleDataAssignment(): void;
|
|
185
|
+
handleDataAssignment(oldVal?: any[]): void;
|
|
186
|
+
/**
|
|
187
|
+
* Drop the failed-load state: the ⚠️ message row's text and the `table--error`
|
|
188
|
+
* host class always move together, so they are cleared together and from one
|
|
189
|
+
* place. Idempotent, and deliberately does NOT render — every caller is either
|
|
190
|
+
* mid-delivery (the data watcher renders) or already renders itself.
|
|
191
|
+
*/
|
|
192
|
+
private clearLoadError;
|
|
161
193
|
handleDataChange(): void;
|
|
162
194
|
/**
|
|
163
195
|
* Refetch affordance: with rows on screen `loading` only dims the tbody, so
|
|
@@ -171,6 +203,28 @@ export declare class SniceTable extends HTMLElement implements SniceTableElement
|
|
|
171
203
|
handleControlsChange(): void;
|
|
172
204
|
handleControlledSort(): void;
|
|
173
205
|
handleCurrentPageChange(): void;
|
|
206
|
+
/**
|
|
207
|
+
* Write a page number the display model just derived (a re-clamp after the
|
|
208
|
+
* row set shortened), WITHOUT re-entering the render scheduler.
|
|
209
|
+
*
|
|
210
|
+
* The three clamp sites all sit inside a display-model computation whose
|
|
211
|
+
* caller paints immediately afterwards with the clamped page — the ordinary
|
|
212
|
+
* body path slices with it and then renders the pager, the grouping and tree
|
|
213
|
+
* models return the clamped slice. Letting the @watch fire here queued a
|
|
214
|
+
* second, byte-identical body pass per delivery — the measured cost, and what
|
|
215
|
+
* the regression test pins. Suppressing the write's watcher makes the clamp
|
|
216
|
+
* cost zero extra passes and makes an oscillating clamp structurally unable
|
|
217
|
+
* to loop.
|
|
218
|
+
*
|
|
219
|
+
* All three sites are reachable only under `paginationMode === 'client'`, so
|
|
220
|
+
* the watcher's server branch (debouncedDataRequest, whose `loading = true`
|
|
221
|
+
* re-enters renderBody SYNCHRONOUSLY through the loading watcher — from the
|
|
222
|
+
* middle of a render) is not reachable from a clamp today. It is the reason
|
|
223
|
+
* to keep this guard rather than to drop the watcher suppression if a fourth
|
|
224
|
+
* clamp site ever lands outside that guard.
|
|
225
|
+
*/
|
|
226
|
+
private clampingPage;
|
|
227
|
+
private clampCurrentPage;
|
|
174
228
|
handlePageSizeChange(): void;
|
|
175
229
|
handleDensityChange(): void;
|
|
176
230
|
handleListChange(): void;
|
|
@@ -184,12 +238,73 @@ export declare class SniceTable extends HTMLElement implements SniceTableElement
|
|
|
184
238
|
handleColumnReorderChange(): void;
|
|
185
239
|
handleLazyLoadChange(): void;
|
|
186
240
|
handleColumnMenuChange(): void;
|
|
241
|
+
/**
|
|
242
|
+
* Switching fit policy re-decides every unsized column's width, so the frame
|
|
243
|
+
* has to be re-fitted from scratch: the cached width would otherwise make the
|
|
244
|
+
* resize observer's "did the frame move?" guard swallow the very next pass.
|
|
245
|
+
*/
|
|
246
|
+
handleColumnFitChange(): void;
|
|
187
247
|
/** Column definitions in their actual painted order. Column state owns
|
|
188
248
|
* visibility/order; pinned columns are partitioned to their physical edges
|
|
189
249
|
* so right-pinned cells do not overlap later unpinned columns. */
|
|
190
250
|
private getVisibleColumnDefinitions;
|
|
251
|
+
/**
|
|
252
|
+
* Cells one full-width row spans: every visible data column plus the tool
|
|
253
|
+
* columns that precede them. Group, aggregate, detail, empty-state, and
|
|
254
|
+
* virtual-spacer rows all measure themselves against this — a row that spans
|
|
255
|
+
* MORE than the table has invents columns, and `table-layout: fixed` then
|
|
256
|
+
* spends the frame's leftover width on the phantoms.
|
|
257
|
+
*/
|
|
258
|
+
private getTotalColumnSpan;
|
|
259
|
+
/**
|
|
260
|
+
* Re-fit the columns nobody sized to the frame they are painted in.
|
|
261
|
+
*
|
|
262
|
+
* A column width is a CONTENT width, so the frame's budget has to be reduced
|
|
263
|
+
* by each column's own padding + border and by the fixed tool columns before
|
|
264
|
+
* it can be shared out. Both are read off the live header — the previous
|
|
265
|
+
* render's, on the first pass — rather than guessed, so the fitted table
|
|
266
|
+
* lands on the frame's width instead of a few pixels past it.
|
|
267
|
+
*
|
|
268
|
+
* Widths are written straight onto the header cells: under fixed layout the
|
|
269
|
+
* first row owns the column grid, so no body repaint is needed and this can
|
|
270
|
+
* run inside a resize observer without a render cascade.
|
|
271
|
+
*/
|
|
272
|
+
private syncColumnWidthsToFrame;
|
|
273
|
+
/**
|
|
274
|
+
* Sticky geometry plus the visible affordance for a pinned cell.
|
|
275
|
+
*
|
|
276
|
+
* Freezing a column is only communicated if the reader can see where the
|
|
277
|
+
* frozen region ends, so the inner-most pinned column on each side carries
|
|
278
|
+
* the divider (`--edge`); the header additionally carries a pin marker, which
|
|
279
|
+
* is the only cue when the table happens to be wide enough not to scroll.
|
|
280
|
+
*/
|
|
281
|
+
private applyPinnedCell;
|
|
282
|
+
/** The pin marker a frozen header carries, so pinning reads at any width. */
|
|
283
|
+
private static pinIndicator;
|
|
284
|
+
/**
|
|
285
|
+
* List mode is only "list mode" once a renderer is installed: `list` alone is
|
|
286
|
+
* a border treatment and still paints normal columnar cells. With a renderer
|
|
287
|
+
* every row collapses to one full-width cell, so there is no column geometry
|
|
288
|
+
* left for a header to label.
|
|
289
|
+
*/
|
|
290
|
+
private usesListRowRenderer;
|
|
191
291
|
renderHeader(): void;
|
|
192
292
|
renderSortableHeader(column: any): string;
|
|
293
|
+
/**
|
|
294
|
+
* The single message row a zero-row body shows: loading spinner, load error,
|
|
295
|
+
* or the empty state (the `empty-state` slot cloned fresh, else the default
|
|
296
|
+
* placeholder). Returns null when there is data to render. Shared by the
|
|
297
|
+
* ordinary and virtualized paths — the virtualizer wipes the tbody itself, so
|
|
298
|
+
* it asks for this row rather than leaving a virtualized empty table blank.
|
|
299
|
+
*/
|
|
300
|
+
/**
|
|
301
|
+
* The spinner both loading affordances draw. `snice-progress` paints its
|
|
302
|
+
* track at 20% alpha, which vanishes against a dark surface — the table pins
|
|
303
|
+
* `--progress-track-opacity` in its own stylesheet so the ring reads on any
|
|
304
|
+
* theme; the indicator arc keeps the primary color.
|
|
305
|
+
*/
|
|
306
|
+
private createLoadingSpinner;
|
|
307
|
+
private createEmptyBodyRow;
|
|
193
308
|
renderBody(): void;
|
|
194
309
|
/**
|
|
195
310
|
* When the host is taller than its rows, append an inert filler row so the
|
|
@@ -197,6 +312,20 @@ export declare class SniceTable extends HTMLElement implements SniceTableElement
|
|
|
197
312
|
* data row, so column widths, pinning, and alignment track the table
|
|
198
313
|
* engine natively. Removed entirely when content fills (or overflows) the
|
|
199
314
|
* frame, restoring the plain last-row styling.
|
|
315
|
+
*
|
|
316
|
+
* INVARIANT — the filler may only consume space the frame ALREADY has; space
|
|
317
|
+
* that exists only BECAUSE of the filler must be given back. The filler is
|
|
318
|
+
* table content, and `@observe('resize', '.table-frame')` re-derives it from
|
|
319
|
+
* the frame's box, so on a host whose height is content-driven (the
|
|
320
|
+
* documented `:host { height: 100% }` resolving against an auto or
|
|
321
|
+
* max-content container — a stretched grid/flex item, a plain block parent)
|
|
322
|
+
* the filler is an input to the very measurement that produced it: the frame
|
|
323
|
+
* grows, the observer fires, the leftover computes positive again, and the
|
|
324
|
+
* table inflates by one slack per animation frame without bound. No static
|
|
325
|
+
* check distinguishes a content-driven frame from a genuinely sized one, so
|
|
326
|
+
* this measures instead: apply the filler, then confirm the frame kept its
|
|
327
|
+
* height. Any growth is self-inflicted and is subtracted from the filler;
|
|
328
|
+
* once nothing honest is left, the frame had no free space to fill at all.
|
|
200
329
|
*/
|
|
201
330
|
private updateFillRow;
|
|
202
331
|
private reconcileRows;
|
|
@@ -279,6 +408,14 @@ export declare class SniceTable extends HTMLElement implements SniceTableElement
|
|
|
279
408
|
private selectorDebounceTimeout;
|
|
280
409
|
private handleSelectorChange;
|
|
281
410
|
updateRowSelectionState(): void;
|
|
411
|
+
/**
|
|
412
|
+
* The two selection reflections a row carries, written together: `data-selected`
|
|
413
|
+
* drives the CSS, `aria-selected` is the documented a11y contract ("selected
|
|
414
|
+
* data rows expose aria-selected"). The keyboard module stamps ARIA only on a
|
|
415
|
+
* full body render, so the delta paths below have to carry it themselves —
|
|
416
|
+
* otherwise a screen reader never hears an interaction-driven selection.
|
|
417
|
+
*/
|
|
418
|
+
private stampRowSelection;
|
|
282
419
|
private updateRowSelectionStateFor;
|
|
283
420
|
updateSelectAllState(): void;
|
|
284
421
|
toggleSort(columnKey: string, multiSort?: boolean): void;
|
|
@@ -289,6 +426,20 @@ export declare class SniceTable extends HTMLElement implements SniceTableElement
|
|
|
289
426
|
*/
|
|
290
427
|
private applyLocalSortOrder;
|
|
291
428
|
private sortLocalData;
|
|
429
|
+
/**
|
|
430
|
+
* Selection is anchored to the ROW, not to its position. `selectedRows` holds
|
|
431
|
+
* indices into `data`, so any reorder of that array — a local sort, or a
|
|
432
|
+
* re-delivery of the same row objects in another order — has to re-resolve
|
|
433
|
+
* them; otherwise the indices keep pointing at whatever row now occupies the
|
|
434
|
+
* slot and the user's checkmark silently jumps to a different row (the same
|
|
435
|
+
* remap the row-reorder/DnD path performs).
|
|
436
|
+
*
|
|
437
|
+
* Only a permutation is remapped: same length, same identities, no duplicates.
|
|
438
|
+
* A genuinely new dataset keeps the documented raw-index semantics untouched,
|
|
439
|
+
* and rows carrying no identity (duplicate objects) have nothing to anchor to.
|
|
440
|
+
* Call AFTER rebuildRowIndex() — the remap reads the fresh row-index map.
|
|
441
|
+
*/
|
|
442
|
+
private remapSelectionAfterReorder;
|
|
292
443
|
private dispatchRowSelectionChanged;
|
|
293
444
|
private dispatchRowClicked;
|
|
294
445
|
private dispatchLoadError;
|
|
@@ -316,6 +467,23 @@ export declare class SniceTable extends HTMLElement implements SniceTableElement
|
|
|
316
467
|
* virtualized); otherwise it is the filtered data. Each descriptor carries
|
|
317
468
|
* the logical index used for `data-index`, selection, and detail lookups.
|
|
318
469
|
*/
|
|
470
|
+
/**
|
|
471
|
+
* Re-derive the windowed row model and hand it to the virtualizer.
|
|
472
|
+
*
|
|
473
|
+
* `virtualRowsSnapshot` is the ONLY state the paint pipeline caches, and
|
|
474
|
+
* `renderRowRange` paints from it. Any caller that resolves a display index
|
|
475
|
+
* against a FRESH `getVirtualRows()` and then asks the virtualizer to paint
|
|
476
|
+
* (scrollToRow, the keyboard ensure-visible hook) must republish that model
|
|
477
|
+
* first, or it scrolls to an offset computed in one list and paints rows from
|
|
478
|
+
* another — the requested row never appears. Returns the fresh model so the
|
|
479
|
+
* caller indexes exactly what will be painted.
|
|
480
|
+
*
|
|
481
|
+
* `paint` false leaves the repaint to the caller (scrollToIndex refreshes the
|
|
482
|
+
* window itself). Those callers must not paint from here: the virtualizer's
|
|
483
|
+
* afterRender hook re-runs keyboard.refresh(), whose ensure-visible callback
|
|
484
|
+
* lands back in ensureKeyboardRowRendered — an unbounded recursion.
|
|
485
|
+
*/
|
|
486
|
+
private syncVirtualRows;
|
|
319
487
|
private getVirtualRows;
|
|
320
488
|
private renderRowRange;
|
|
321
489
|
/** Build a fragment of pinned rows for the given position (top/bottom). */
|