lintje 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-elements/actions.js +1 -1
- package/dist-elements/chunks/{base-DRGvkF-r.js → base-CVKIPSLx.js} +99 -96
- package/dist-elements/chunks/chart-styles-JK4clSyA.js +108 -0
- package/dist-elements/chunks/{dialog-B7aRBtjy.js → dialog-D4V467iC.js} +2 -2
- package/dist-elements/chunks/{disclosure-DirPLy2E.js → disclosure-DVex7Lo_.js} +1 -1
- package/dist-elements/chunks/download-D7ZarlMZ.js +103 -0
- package/dist-elements/chunks/{focus-trap-Dv8zu64A.js → focus-trap-rje9Oz19.js} +1 -1
- package/dist-elements/chunks/{input-BGMLam-O.js → input-DEHA2Z_0.js} +1 -1
- package/dist-elements/chunks/{player-BApadXr8.js → player-DDDWUevR.js} +1 -1
- package/dist-elements/chunks/{sentence-0wO85ZdJ.js → sentence-mY0Iqu5H.js} +1 -1
- package/dist-elements/chunks/{stagger-BB_gcxBI.js → stagger-Dvkth9_C.js} +95 -94
- package/dist-elements/content.js +1 -0
- package/dist-elements/core.js +1 -1
- package/dist-elements/custom-elements.json +120 -2
- package/dist-elements/data-types.json +208 -1
- package/dist-elements/feedback.js +1 -1
- package/dist-elements/guides/loading.md +1 -1
- package/dist-elements/inputs.js +2 -2
- package/dist-elements/layout.js +1 -1
- package/dist-elements/lintje.js +2836 -1915
- package/dist-elements/overlays.js +1 -1
- package/dist-elements/tag/activity-log.js +1 -1
- package/dist-elements/tag/ai-label.js +1 -1
- package/dist-elements/tag/announcement.js +2 -2
- package/dist-elements/tag/app-search.js +2 -2
- package/dist-elements/tag/audio-player.js +2 -2
- package/dist-elements/tag/badge.js +1 -1
- package/dist-elements/tag/breadcrumbs.js +1 -1
- package/dist-elements/tag/button.js +1 -1
- package/dist-elements/tag/card-list.js +1 -1
- package/dist-elements/tag/card.js +1 -1
- package/dist-elements/tag/chart.js +1020 -961
- package/dist-elements/tag/chat-answer.js +2 -2
- package/dist-elements/tag/chat-composer.js +1 -1
- package/dist-elements/tag/chat-message.js +1 -1
- package/dist-elements/tag/chat-strip.js +1 -1
- package/dist-elements/tag/chat-suggestions.js +1 -1
- package/dist-elements/tag/chat.js +1 -1
- package/dist-elements/tag/checkbox-group.js +2 -2
- package/dist-elements/tag/checkbox.js +2 -2
- package/dist-elements/tag/code.js +1 -1
- package/dist-elements/tag/combobox.js +2 -2
- package/dist-elements/tag/conflict-alert.js +1 -1
- package/dist-elements/tag/copy-button.js +1 -1
- package/dist-elements/tag/data-table.js +264 -263
- package/dist-elements/tag/date-input.js +2 -2
- package/dist-elements/tag/date-range.js +3 -3
- package/dist-elements/tag/description-list.js +1 -1
- package/dist-elements/tag/dialog.js +3 -3
- package/dist-elements/tag/document-viewer.js +1 -1
- package/dist-elements/tag/drawer.js +3 -3
- package/dist-elements/tag/empty-state.js +1 -1
- package/dist-elements/tag/error-page.js +1 -1
- package/dist-elements/tag/error-summary.js +1 -1
- package/dist-elements/tag/expander.js +2 -2
- package/dist-elements/tag/explainer.js +2 -2
- package/dist-elements/tag/field.js +1 -1
- package/dist-elements/tag/file-upload.js +3 -3
- package/dist-elements/tag/filter-bar.js +3 -3
- package/dist-elements/tag/filter-sheet.js +3 -3
- package/dist-elements/tag/filter-zone.js +2 -2
- package/dist-elements/tag/find.js +15 -11
- package/dist-elements/tag/footer.js +1 -1
- package/dist-elements/tag/form-actions.js +1 -1
- package/dist-elements/tag/form-section.js +1 -1
- package/dist-elements/tag/form.js +1 -1
- package/dist-elements/tag/gallery.js +1 -1
- package/dist-elements/tag/grid-item.js +1 -1
- package/dist-elements/tag/grid.js +1 -1
- package/dist-elements/tag/hero.js +1 -1
- package/dist-elements/tag/highlight.js +1 -1
- package/dist-elements/tag/icon-button.js +1 -1
- package/dist-elements/tag/icon.js +1 -1
- package/dist-elements/tag/job-list.js +1 -1
- package/dist-elements/tag/kpi-row.js +1 -1
- package/dist-elements/tag/kpi.js +38 -36
- package/dist-elements/tag/level-meter.js +1 -1
- package/dist-elements/tag/list.js +2 -2
- package/dist-elements/tag/log-viewer.d.ts +1 -0
- package/dist-elements/tag/log-viewer.js +847 -0
- package/dist-elements/tag/logo.js +1 -1
- package/dist-elements/tag/map.js +184 -183
- package/dist-elements/tag/menu-button.js +14 -9
- package/dist-elements/tag/modal.js +2 -2
- package/dist-elements/tag/multiselect.js +3 -3
- package/dist-elements/tag/note.js +1 -1
- package/dist-elements/tag/notifications.js +2 -2
- package/dist-elements/tag/number-input.js +2 -2
- package/dist-elements/tag/page-header.js +1 -1
- package/dist-elements/tag/pagination.js +16 -16
- package/dist-elements/tag/popover.js +1 -1
- package/dist-elements/tag/progress-bar.js +1 -1
- package/dist-elements/tag/prose.js +1 -1
- package/dist-elements/tag/qr-code.js +1 -1
- package/dist-elements/tag/radio-group.js +2 -2
- package/dist-elements/tag/range.js +2 -2
- package/dist-elements/tag/recording-status.js +1 -1
- package/dist-elements/tag/repeater.js +1 -1
- package/dist-elements/tag/segmented.js +2 -2
- package/dist-elements/tag/select.js +2 -2
- package/dist-elements/tag/shell.js +2 -2
- package/dist-elements/tag/skeleton.js +1 -1
- package/dist-elements/tag/slot-picker.js +2 -2
- package/dist-elements/tag/sortable-list.js +1 -1
- package/dist-elements/tag/spinner.js +1 -1
- package/dist-elements/tag/split-pane.js +1 -1
- package/dist-elements/tag/status-dot.js +1 -1
- package/dist-elements/tag/stepper.js +1 -1
- package/dist-elements/tag/streaming-text.js +1 -1
- package/dist-elements/tag/sub-nav.js +1 -1
- package/dist-elements/tag/tabs.js +1 -1
- package/dist-elements/tag/tag-input.js +2 -2
- package/dist-elements/tag/text-editor.js +2 -2
- package/dist-elements/tag/text-input.js +2 -2
- package/dist-elements/tag/textarea.js +2 -2
- package/dist-elements/tag/tile.js +1 -1
- package/dist-elements/tag/time-input.js +2 -2
- package/dist-elements/tag/toast.js +2 -2
- package/dist-elements/tag/toggle.js +2 -2
- package/dist-elements/tag/toggletip.js +2 -2
- package/dist-elements/tag/token-value.js +1 -1
- package/dist-elements/tag/tooltip.js +1 -1
- package/dist-elements/tag/transcript.js +1 -1
- package/dist-elements/tag/translator.js +1 -1
- package/dist-elements/tag/tree-view.js +1 -1
- package/dist-elements/tag/user-menu.js +1 -1
- package/dist-elements/tag/video-player.js +2 -2
- package/dist-elements/tokens.css +2 -0
- package/dist-elements/tokens.json +4 -0
- package/dist-elements/types/bundle/content.d.ts +1 -0
- package/dist-elements/types/bundle/index.d.ts +1 -1
- package/dist-elements/types/components/actions/menu-button/menu-button.d.ts +4 -1
- package/dist-elements/types/components/content/log-viewer/lines.d.ts +33 -0
- package/dist-elements/types/components/content/log-viewer/log-viewer.d.ts +117 -0
- package/dist-elements/types/components/index.d.ts +2 -0
- package/dist-elements/types/components/inputs/find/find.d.ts +1 -0
- package/dist-elements/types/components/shared/charts/shared/axes.d.ts +7 -1
- package/dist-elements/types/components/shared/charts/shared/controller.d.ts +0 -1
- package/dist-elements/types/components/shared/charts/shared/layer-motion.d.ts +21 -0
- package/dist-elements/types/components/shared/download.d.ts +2 -0
- package/dist-elements/types/types.d.ts +44 -0
- package/package.json +1 -1
- package/dist-elements/chunks/download-C68kcwPj.js +0 -206
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import { F as e, Kt as t, O as n, Q as r, Yt as i, Z as a, Zt as o, at as s,
|
|
2
|
-
import { n as y, r as b } from "../chunks/focus-trap-
|
|
1
|
+
import { F as e, Kt as t, O as n, Q as r, Yt as i, Z as a, Zt as o, at as s, en as c, et as l, f as u, lt as d, nn as f, o as p, ot as m, p as h, rt as g, st as _, ut as v } from "../chunks/base-CVKIPSLx.js";
|
|
2
|
+
import { n as y, r as b } from "../chunks/focus-trap-rje9Oz19.js";
|
|
3
3
|
import "./menu-button.js";
|
|
4
4
|
import { t as x } from "../chunks/input-lQTmOMOz.js";
|
|
5
5
|
import { t as S } from "./announcement.js";
|
|
6
6
|
import "./drawer.js";
|
|
7
|
+
import { i as C, t as w } from "../chunks/download-D7ZarlMZ.js";
|
|
7
8
|
import "./empty-state.js";
|
|
8
9
|
import "./description-list.js";
|
|
9
|
-
import { d as
|
|
10
|
-
import {
|
|
10
|
+
import { d as T } from "../chunks/date-format-DxP9yfDp.js";
|
|
11
|
+
import { r as E, t as D } from "../chunks/chart-styles-JK4clSyA.js";
|
|
11
12
|
import "./pagination.js";
|
|
12
13
|
import "./sortable-list.js";
|
|
13
14
|
//#region src/components/tables/data-table/data-table.css?inline
|
|
14
|
-
var D = ":host {\n display: block;\n min-width: 0;\n}\n:host([hidden]) { display: none; }\n/* On the page there is no tile padding to bleed into below 768 px: the rows keep the page's edge. */\n:host([plain]) { --tile-pad-x: 0px; }\n/* A table breaks between its rows on paper, so it starts where the page has room. */\n@media print { :host { break-inside: auto; } }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-data-table { min-width: 0; }\n\n.lintje-data-table__full { width: 100%; border-collapse: collapse; font: var(--text-table); }\n.lintje-data-table__mobile { display: none; width: 100%; border-collapse: collapse; font: var(--text-table); }\n\n/* A shadow marks each side where columns are hidden; it sits on the frame so it doesn't scroll. */\n.lintje-data-table__frame { position: relative; }\n.lintje-data-table__frame::before,\n.lintje-data-table__frame::after {\n content: '';\n position: absolute;\n top: 0; bottom: 0;\n width: var(--space-4);\n pointer-events: none;\n opacity: 0;\n transition: opacity var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-data-table__frame::before { left: 0; box-shadow: var(--shadow-scroll-start); }\n.lintje-data-table__frame::after { right: 0; box-shadow: var(--shadow-scroll-end); }\n.lintje-data-table__frame.is-scrollable-start::before,\n.lintje-data-table__frame.is-scrollable-end::after { opacity: 1; }\n/* Positioned, so an absolute visually hidden label is clipped with its cell. */\n.lintje-data-table__scroller { position: relative; overflow-x: auto; }\n.lintje-data-table__scroller:focus-visible { outline-offset: -3px; }\n/* A styled scrollbar is a classic one: it doesn't hide between scrolls like an overlay one. */\n.lintje-data-table__scroller::-webkit-scrollbar { height: 8px; }\n.lintje-data-table__scroller::-webkit-scrollbar-track { background: var(--color-bg-subtle); }\n.lintje-data-table__scroller::-webkit-scrollbar-thumb { background: var(--color-border-heavy); }\n@supports not selector(::-webkit-scrollbar) {\n .lintje-data-table__scroller { scrollbar-width: thin; scrollbar-color: var(--color-border-heavy) var(--color-bg-subtle); }\n}\n\n.lintje-data-table__header-cell,\n.lintje-data-table__name,\n.lintje-data-table__mobile-cell { text-align: left; }\n\n.lintje-data-table__header-cell {\n font: var(--text-table-head);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n color: var(--color-text-muted);\n background: var(--color-bg-surface);\n padding: 10px var(--space-3);\n border-bottom: 2px solid var(--color-border-heavy);\n}\n/* The sorted column: its label is text (4.5:1), the rule under it a line (3:1). */\n.lintje-data-table__header-cell.is-active {\n color: var(--color-accent-text);\n border-bottom-color: var(--color-accent-line);\n}\n/* The button takes the cell's padding, so the whole cell sorts. */\n.lintje-data-table__header-cell--sortable { padding: 0; }\n.lintje-data-table__sort-button {\n display: flex; align-items: center; gap: 6px;\n width: 100%;\n min-height: var(--h-target);\n padding: 0 var(--space-3);\n font: inherit; color: inherit; text-align: inherit;\n /* A button resets these; the header's label style must reach the label. */\n text-transform: inherit; letter-spacing: inherit;\n}\n.lintje-data-table__header-cell--align-right .lintje-data-table__sort-button { justify-content: flex-end; }\n/* Tracking also follows the last letter; it widened the table 1 px past its tile at 1024 px.\n Giving that trailing step back keeps the gap at 6 px. */\n.lintje-data-table__sort-label { margin-inline-end: calc(var(--label-tracking) * -1); }\n.lintje-data-table__sort-button:hover { background: var(--color-bg-subtle); }\n/* The scroller clips the ring, so it sits inside the cell. */\n.lintje-data-table__sort-button:focus-visible { outline-offset: -3px; }\n/* The arrows are a glyph, outside the type scale, one above the other in a box that never changes\n width. A head says only what holds now: the sorted column shows its one arrow, and another\n column both under the pointer or the focus. A hidden arrow keeps its place. */\n.lintje-data-table__sort-icon {\n display: inline-flex; flex-direction: column; flex: none;\n font-size: 8px; line-height: 1;\n color: var(--color-text-muted);\n visibility: hidden;\n}\n.lintje-data-table__sort-button:hover .lintje-data-table__sort-icon,\n.lintje-data-table__sort-button:focus-visible .lintje-data-table__sort-icon,\n.lintje-data-table__header-cell.is-active .lintje-data-table__sort-icon { visibility: visible; }\n.lintje-data-table__sort-icon > .is-off { visibility: hidden; }\n.lintje-data-table__sort-icon > .is-on { color: var(--color-accent-text); }\n\n.lintje-data-table__row { border-bottom: 1px solid var(--color-border-default); }\n/* Filler rows keep a short last page as tall as a full one. */\n.lintje-data-table__row--filler { border-bottom-color: transparent; }\n/* A row is one line: no cell wraps, not even at a hyphen (\"04-10-2026\"). */\n.lintje-data-table__cell {\n padding: 0 var(--space-3);\n height: var(--h-table-row);\n font-weight: 400;\n color: var(--color-text-primary);\n white-space: nowrap;\n}\n.lintje-data-table__name { font-weight: 700 !important; }\n/* The name that opens its row is dark, as in the work list: a column of blue reads as a column of\n links and outweighs the figures beside it. The pointer and the focus show the line. */\n.lintje-data-table__open {\n padding: 0;\n font: inherit; text-align: inherit;\n color: var(--color-text-primary);\n text-decoration: none;\n transition: color var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-data-table__open:hover,\n.lintje-data-table__open:focus-visible { color: var(--color-link); text-decoration: underline; }\n.lintje-data-table__header-cell--align-right,\n.lintje-data-table__cell--align-right,\n.lintje-data-table__mobile-cell--align-right { text-align: right !important; }\n.lintje-data-table__cell--align-right { font-variant-numeric: tabular-nums; }\n/* A `truncate` column: `width: 1%` keeps the auto layout from handing it surplus width, so it is as\n wide as its longest value up to the cap, and a longer value ends in an ellipsis (the heatmap's\n label column does the same). */\n.lintje-data-table__cell--truncate { width: 1%; }\n.lintje-data-table__cell-text { display: block; max-width: 280px; overflow: hidden; text-overflow: ellipsis; }\n/* The `title` needs a pointer: under the keyboard's focus and without hover the value wraps whole. */\n.lintje-data-table__row:focus-visible .lintje-data-table__cell-text,\n.lintje-data-table__row:has(:focus-visible) .lintje-data-table__cell-text { white-space: normal; overflow-wrap: anywhere; }\n@media (hover: none) {\n .lintje-data-table__cell-text { white-space: normal; overflow-wrap: anywhere; }\n}\n\n.lintje-data-table__row.is-clickable { cursor: pointer; }\n.lintje-data-table__row.is-clickable:hover,\n.lintje-data-table__mobile-row.is-clickable:hover { background: var(--color-bg-subtle); }\n/* Selected and hover share a surface; the 4 px edge is the only carrier, so it must stay visible. */\n.lintje-data-table__row.is-selected,\n.lintje-data-table__mobile-row.is-selected {\n background: var(--color-bg-selected);\n box-shadow: inset 4px 0 0 var(--color-accent-line);\n}\n/* A checked row takes the selected background without the bar: the bar means drilldown. */\n.lintje-data-table__check-cell { width: 24px; padding-right: var(--space-3); }\n.lintje-data-table__header-cell.lintje-data-table__check-cell { padding-block: 0; }\n.lintje-data-table__check-cell .lintje-choice,\n.lintje-data-table__mobile-check .lintje-choice { gap: 0; }\n.lintje-data-table__mobile-check { display: flex; align-items: center; gap: var(--space-3); }\n.lintje-data-table__mobile-identity { min-width: 0; }\n.lintje-data-table__row.is-checked,\n.lintje-data-table__mobile-row.is-checked { background: var(--color-bg-selected); }\n.lintje-data-table__row:focus-visible,\n.lintje-data-table__mobile-row:focus-visible { outline-offset: -3px; }\n\n.lintje-threshold-cell {\n display: inline-flex; align-items: center; justify-content: center;\n gap: var(--space-1);\n min-width: 44px;\n padding: 4px var(--space-2);\n font-weight: 700;\n}\n.lintje-threshold-cell__icon { flex: none; }\n.lintje-threshold-cell--good { background: transparent; }\n/* At most one fill in a row: a caution is its glyph and weight, only a crossed threshold fills. */\n.lintje-threshold-cell--caution { background: transparent; }\n.lintje-threshold-cell--caution .lintje-threshold-cell__icon { color: var(--color-attention-line); }\n.lintje-threshold-cell--above-threshold { background: var(--color-error); color: var(--color-text-on-fill); }\n\n.lintje-data-table__muted { color: var(--color-text-muted); }\n\n/* Tones are modifiers, not inline colours: the host's `style-src 'self'` drops `style`. */\n.lintje-data-table__change { font-weight: 700; }\n.lintje-data-table__change--flat { color: var(--color-text-muted); }\n.lintje-data-table__change--up { color: var(--color-success-text); }\n.lintje-data-table__change--down { color: var(--color-error-text); }\n\n/* Each representation has its own pager; the phone's is hidden on desktop. */\n.lintje-data-table__pagination { padding-top: var(--space-3); }\n.lintje-data-table__pagination--mobile { display: none; }\n\n/* --- Editing a cell (editing.ts) ------------------------------------------ */\n/* The pencil sits at the end of the text, at the start for a number. */\n.lintje-data-table__cell--editable { position: relative; }\n.lintje-data-table__cell--editable:hover { background: var(--color-bg-subtle); }\n.lintje-data-table__edit-icon {\n position: absolute;\n top: 50%; right: var(--space-1);\n translate: 0 -50%;\n color: var(--color-text-muted);\n visibility: hidden;\n}\n.lintje-data-table__cell--align-right .lintje-data-table__edit-icon { right: auto; left: var(--space-1); }\n.lintje-data-table__cell--editable:hover .lintje-data-table__edit-icon { visibility: visible; }\n.lintje-data-table__cell--editable.is-editing { padding: 2px; vertical-align: top; }\n.lintje-data-table__cell--editable.is-editing:hover { background: transparent; }\n.lintje-data-table__editor {\n display: block;\n width: 100%; height: var(--h-control);\n padding: 0 var(--space-2);\n border: 1px solid var(--color-border-field);\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n font: var(--text-table);\n font-weight: 400;\n text-align: inherit;\n}\n.lintje-data-table__cell--align-right .lintje-data-table__editor { font-variant-numeric: tabular-nums; }\n.lintje-data-table__editor::placeholder { color: var(--color-text-placeholder); opacity: 1; }\n.lintje-data-table__editor.is-error { border: 2px solid var(--color-error); }\n.lintje-data-table__edit-error {\n display: block;\n padding: 2px var(--space-2) var(--space-1);\n font-size: 0.875rem; font-weight: 700;\n color: var(--color-error-text);\n text-align: left;\n}\n.lintje-data-table__busy {\n display: inline-flex; align-items: center; gap: var(--space-2);\n color: var(--color-text-muted);\n}\n\n/* --- Row actions and the selection bar (actions.ts) ------------------------ */\n.lintje-data-table__action-cell { width: var(--h-icon-button); text-align: right; }\n/* The chooser's tooltip is a sentence, not a column label: it does not take the head's capitals. */\n.lintje-data-table__action-cell lintje-tooltip { text-transform: none; letter-spacing: normal; font-weight: 400; }\n.lintje-data-table__selection {\n position: sticky; top: var(--h-sticky); z-index: 1;\n display: flex; flex-wrap: wrap; align-items: center;\n gap: var(--space-2) var(--space-4);\n padding: var(--space-2) var(--space-3);\n background: var(--color-bg-selected);\n border-top: 2px solid var(--color-accent-line);\n font: var(--text-table);\n color: var(--color-text-primary);\n}\n.lintje-data-table__selection-count { font-weight: 700; }\n.lintje-data-table__selection-clear { margin-left: auto; }\n\n/* --- Filters and the column chooser (filters.ts) ---------------------------- */\n.lintje-data-table__toolbar {\n display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;\n gap: var(--space-2) var(--space-4);\n padding-bottom: var(--space-3);\n}\n.lintje-data-table__toolbar--quiet,\n.lintje-data-table__sheet-button,\n.lintje-data-table__sort-menu { display: none; }\n.lintje-data-table__chips {\n display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2);\n font: var(--text-small);\n}\n.lintje-data-table__chip {\n display: inline-flex; align-items: center; gap: var(--space-1);\n height: var(--h-chip);\n padding: 0 var(--space-1) 0 var(--space-2);\n background: var(--color-bg-subtle);\n border: 1px solid var(--color-border-default);\n color: var(--color-text-primary);\n white-space: nowrap;\n}\n/* A transparent hit area reaches the target height up and down; sideways stands other content. */\n.lintje-data-table__chip-clear {\n position: relative;\n width: var(--h-chip-field); height: var(--h-chip-field);\n display: flex; align-items: center; justify-content: center;\n color: var(--color-text-muted);\n}\n.lintje-data-table__chip-clear::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2)) 0;\n}\n.lintje-data-table__chip-clear:hover { color: var(--color-text-primary); }\n.lintje-data-table__filter-total { color: var(--color-text-muted); }\n/* The table's own controls, at the toolbar's end, each with its word. */\n.lintje-data-table__tools { display: flex; align-items: center; gap: var(--space-2); margin-left: auto; }\n.lintje-data-table__chooser-reset { align-self: flex-start; }\n\n.lintje-data-table__header-cell--filterable { padding-block: 0; }\n.lintje-data-table__header-inner {\n display: flex; align-items: center; gap: var(--space-2);\n min-height: var(--h-control);\n}\n.lintje-data-table__header-cell--sortable .lintje-data-table__header-inner { padding-right: var(--space-2); }\n.lintje-data-table__header-inner .lintje-data-table__sort-button { flex: 1; min-width: 0; }\n/* A filtered column carries one mark, its filled funnel; the chips above say it in words. */\n/* A transparent hit area reaches the target height up and down; on its left stands the sort button. */\n.lintje-data-table__funnel {\n position: relative;\n width: var(--h-chip); height: var(--h-chip); flex: none;\n display: flex; align-items: center; justify-content: center;\n margin-left: auto;\n border: 1px solid transparent;\n color: var(--color-text-muted);\n}\n.lintje-data-table__funnel::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2)) 0;\n}\n.lintje-data-table__funnel:hover { background: var(--color-bg-subtle); color: var(--color-text-primary); }\n/* As wide as the row menus beside or under them, so their icons line up. */\n.lintje-data-table__chooser-button,\n.lintje-data-table__detail-toggle,\n.lintje-data-table__mobile-toggle {\n width: var(--h-icon-button); height: var(--h-icon-button);\n display: flex; align-items: center; justify-content: center;\n margin-left: auto;\n border: 1px solid transparent;\n color: var(--color-text-muted);\n}\n.lintje-data-table__chooser-button:hover,\n.lintje-data-table__chooser-button[aria-expanded='true'],\n.lintje-data-table__detail-toggle:hover,\n.lintje-data-table__mobile-toggle:hover { background: var(--color-bg-subtle); color: var(--color-text-primary); }\n.lintje-data-table__funnel.is-filtered {\n background: var(--color-action-primary);\n border-color: var(--color-action-primary-border);\n color: var(--color-action-primary-text);\n}\n\n.lintje-data-table__filter-panel {\n display: flex; flex-direction: column; gap: var(--space-3);\n width: 260px; max-width: 100%;\n padding: var(--space-4);\n font: var(--text-table);\n color: var(--color-text-primary);\n}\n.lintje-data-table__filter-name { font-size: 0.875rem; font-weight: 700; }\n.lintje-data-table__filter-options { display: flex; flex-direction: column; }\n.lintje-data-table__filter-option { min-height: var(--h-option); }\n.lintje-data-table__filter-count { margin-left: auto; color: var(--color-text-muted); font-variant-numeric: tabular-nums; }\n.lintje-data-table__filter-search {\n width: 100%; height: var(--h-control);\n padding: 0 var(--space-3);\n border: 1px solid var(--color-border-field);\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n font-size: 1rem;\n}\n.lintje-data-table__filter-search::placeholder { color: var(--color-text-placeholder); opacity: 1; }\n/* \"Wissen\" clears the field; it draws no cross of its own. */\n.lintje-data-table__filter-search::-webkit-search-cancel-button,\n.lintje-data-table__filter-search::-webkit-search-decoration { appearance: none; }\n.lintje-data-table__filter-actions {\n display: flex; justify-content: flex-end; gap: var(--space-2);\n padding-top: var(--space-1);\n}\n.lintje-data-table__filter-section {\n display: flex; flex-direction: column; gap: var(--space-2);\n margin-bottom: var(--space-6);\n}\n.lintje-data-table__chooser-note { font: var(--text-small); color: var(--color-text-muted); }\n\n/* The sizer: each column's widest value, with no height, so a sort or a page never moves a column. */\n.lintje-data-table__sizer .lintje-data-table__cell { height: 0; padding-block: 0; border: 0; }\n.lintje-data-table__sizer-box { height: 0; overflow: hidden; visibility: hidden; }\n\n/* --- A row's detail, groups and totals ------------------------------------- */\n.lintje-data-table__detail-cell { width: var(--h-icon-button); padding: 0; }\n.lintje-data-table__row.is-open { background: var(--color-bg-subtle); border-bottom-color: transparent; }\n.lintje-data-table__detail { border-bottom: 1px solid var(--color-border-default); }\n.lintje-data-table__detail-body { padding: 0 var(--space-3) var(--space-4) calc(var(--h-icon-button) + var(--space-3)); background: var(--color-bg-subtle); }\n\n/* A group's heading spans the name's column; collapsed, its other cells hold the subtotals. */\n.lintje-data-table__group-row { border-bottom: 1px solid var(--color-border-default); }\n.lintje-data-table__group-head { padding: 0; }\n.lintje-data-table__group-toggle {\n display: flex; align-items: center; gap: var(--space-2);\n width: 100%;\n min-height: var(--h-table-row);\n padding: 0 var(--space-3);\n font: inherit; font-weight: 700; color: var(--color-text-primary); text-align: left;\n}\n.lintje-data-table__group-toggle:hover { background: var(--color-bg-subtle); }\n.lintje-data-table__group-toggle:focus-visible { outline-offset: -3px; }\n.lintje-data-table__group-count { font-weight: 400; font-size: 0.875rem; color: var(--color-text-muted); }\n.lintje-data-table__group-row .lintje-data-table__cell { font-weight: 700; }\n/* Rows in a group stand in from its heading, by the chevron's width and gap. */\n.lintje-data-table__row--in-group > .lintje-data-table__name { padding-left: calc(var(--space-3) + var(--space-4) + var(--space-2)); }\n\n/* A total is the host's: bold, over a heavy line, never sticky. The word before it says how. */\n.lintje-data-table__total > *,\n.lintje-data-table__subtotal > * { font-weight: 700; }\n.lintje-data-table__total { border-top: 2px solid var(--color-border-heavy); }\n.lintje-data-table__subtotal { border-top: 1px solid var(--color-border-heavy); border-bottom: 1px solid var(--color-border-default); }\n.lintje-data-table__sum-label { text-align: left; }\n.lintje-data-table__subtotal > .lintje-data-table__sum-label { font-weight: 400; color: var(--color-text-muted); }\n.lintje-data-table__full .lintje-data-table__subtotal > .lintje-data-table__sum-label { padding-left: calc(var(--space-3) + var(--space-4) + var(--space-2)); }\n.lintje-data-table__how { font-weight: 400; font-size: 0.875rem; color: var(--color-text-muted); }\n\n/* --- Below 768 px the representation switches ---------------------------- */\n/* Below 768 px, from the media controller's `is-phone`: WebKit does not re-apply a shadow root's\n media query after a resize, and the script already decides by MOBILE. */\n:where(.lintje-data-table.is-phone) .lintje-data-table__toolbar { padding: 0 var(--tile-pad-x) var(--space-3); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__toolbar--quiet { display: flex; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__sheet-button,\n:where(.lintje-data-table.is-phone) .lintje-data-table__sort-menu { display: inline-flex; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__selection--mobile { top: auto; bottom: 0; margin-top: var(--space-3); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__frame { display: none; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile { display: table; }\n.lintje-data-table:where(.is-phone) { margin: 0 calc(var(--tile-pad-x) * -1); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__header-cell--mobile { padding: 10px var(--tile-pad-x); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__header-cell--mobile.lintje-data-table__header-cell--sortable { padding: 0; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__header-cell--mobile .lintje-data-table__sort-button { padding: 0 var(--tile-pad-x); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-row { border-bottom: 1px solid var(--color-border-default); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-row--filler,\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-row.is-open { border-bottom-color: transparent; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-detail { border-bottom: 1px solid var(--color-border-default); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-detail > .lintje-data-table__mobile-cell { padding-top: 0; }\n/* The toggle and the row menu sit at the row's end, on the name's first line. Two classes, so the\n cell padding below does not give the column its start back. */\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-cell.lintje-data-table__mobile-cell--actions,\n:where(.lintje-data-table.is-phone) .lintje-data-table__header-cell--mobile.lintje-data-table__mobile-cell--actions { width: 1%; padding-inline-start: 0; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-actions { display: flex; align-items: center; justify-content: flex-end; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-cell {\n padding: var(--space-2) var(--tile-pad-x);\n vertical-align: top;\n font-weight: 400;\n}\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-name { display: block; font-size: 0.875rem; font-weight: 700; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-sub { display: block; font-size: 0.875rem; color: var(--color-text-muted); margin-top: 2px; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-measure { display: block; font-size: 0.875rem; font-weight: 700; font-variant-numeric: tabular-nums; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-status { display: block; font-size: 0.875rem; margin-top: 2px; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-status--within { color: var(--color-text-muted); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-status--outside { color: var(--color-error-text); font-weight: 700; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__pagination--full { display: none; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__pagination--mobile { display: block; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__pagination { padding: var(--space-3) var(--tile-pad-x) 0; }\n/* The phone shows two columns and lists the rest under a row: there is nothing to choose. */\n:where(.lintje-data-table.is-phone) .lintje-data-table__group-row .lintje-data-table__mobile-cell { padding-block: 0; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__group-toggle { padding: 0; min-height: var(--h-target); }\n/* On a phone the name and the count run as text, so a long name wraps instead of widening the table. */\n:where(.lintje-data-table.is-phone) .lintje-data-table__group-toggle { display: block; padding-block: var(--space-3); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__group-toggle .lintje-icon { vertical-align: -2px; margin-inline-end: var(--space-2); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__group-count { margin-inline-start: var(--space-2); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__group-row .lintje-data-table__mobile-cell--align-right { vertical-align: middle; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__total { border-top: 2px solid var(--color-border-heavy); }\n\n/* Paper: every column on the sheet, a row never split, and no control. Values wrap rather than\n run off the edge. What the columns are filtered on stays, as the chips. */\n@media print {\n /* Its own height, not the cell's: a tile split over two sheets measures its rows again. */\n .lintje-data-table__tile { height: auto; }\n /* Chromium repeats a head on the next sheet without its words, so the head stands once. */\n .lintje-data-table__full thead { display: table-row-group; }\n .lintje-data-table__scroller { overflow: visible; }\n .lintje-data-table__frame::before,\n .lintje-data-table__frame::after { display: none; }\n .lintje-data-table__cell { white-space: normal; height: auto; padding-block: var(--space-2); }\n .lintje-data-table__cell-text { max-width: none; white-space: normal; }\n .lintje-data-table__row { break-inside: avoid; }\n /* The count belongs to the rows above it, not alone on a sheet of its own. */\n .lintje-data-table__pagination { break-before: avoid; }\n .lintje-data-table__row--filler,\n .lintje-data-table__check-cell,\n .lintje-data-table__action-cell,\n .lintje-data-table__sort-icon,\n .lintje-data-table__funnel,\n .lintje-data-table__tools,\n .lintje-data-table__clear-all,\n .lintje-data-table__detail-cell,\n .lintje-data-table__chip-clear,\n .lintje-data-table__selection,\n .lintje-data-table__edit-icon { display: none; }\n .lintje-data-table__open { color: inherit; text-decoration: none; }\n}\n\n/* Forced colours drop the selected row's fill and inset bar. A real 4 px border on the first\n cell (Canvas at rest, Highlight when selected) replaces the bar without moving a column. */\n@media (forced-colors: active) {\n .lintje-data-table__row > :first-child,\n .lintje-data-table__mobile-row > :first-child { border-left: 4px solid Canvas; }\n .lintje-data-table__row.is-selected > :first-child,\n .lintje-data-table__mobile-row.is-selected > :first-child { border-left-color: Highlight; }\n .lintje-data-table__header-cell.is-active { border-bottom-color: Highlight; }\n .lintje-data-table__funnel.is-filtered { border-color: Highlight; }\n}\n";
|
|
15
|
+
var ee = ":host {\n display: block;\n min-width: 0;\n}\n:host([hidden]) { display: none; }\n/* On the page there is no tile padding to bleed into below 768 px: the rows keep the page's edge. */\n:host([plain]) { --tile-pad-x: 0px; }\n/* A table breaks between its rows on paper, so it starts where the page has room. */\n@media print { :host { break-inside: auto; } }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-data-table { min-width: 0; }\n\n.lintje-data-table__full { width: 100%; border-collapse: collapse; font: var(--text-table); }\n.lintje-data-table__mobile { display: none; width: 100%; border-collapse: collapse; font: var(--text-table); }\n\n/* A shadow marks each side where columns are hidden; it sits on the frame so it doesn't scroll. */\n.lintje-data-table__frame { position: relative; }\n.lintje-data-table__frame::before,\n.lintje-data-table__frame::after {\n content: '';\n position: absolute;\n top: 0; bottom: 0;\n width: var(--space-4);\n pointer-events: none;\n opacity: 0;\n transition: opacity var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-data-table__frame::before { left: 0; box-shadow: var(--shadow-scroll-start); }\n.lintje-data-table__frame::after { right: 0; box-shadow: var(--shadow-scroll-end); }\n.lintje-data-table__frame.is-scrollable-start::before,\n.lintje-data-table__frame.is-scrollable-end::after { opacity: 1; }\n/* Positioned, so an absolute visually hidden label is clipped with its cell. */\n.lintje-data-table__scroller { position: relative; overflow-x: auto; }\n.lintje-data-table__scroller:focus-visible { outline-offset: -3px; }\n/* A styled scrollbar is a classic one: it doesn't hide between scrolls like an overlay one. */\n.lintje-data-table__scroller::-webkit-scrollbar { height: 8px; }\n.lintje-data-table__scroller::-webkit-scrollbar-track { background: var(--color-bg-subtle); }\n.lintje-data-table__scroller::-webkit-scrollbar-thumb { background: var(--color-border-heavy); }\n@supports not selector(::-webkit-scrollbar) {\n .lintje-data-table__scroller { scrollbar-width: thin; scrollbar-color: var(--color-border-heavy) var(--color-bg-subtle); }\n}\n\n.lintje-data-table__header-cell,\n.lintje-data-table__name,\n.lintje-data-table__mobile-cell { text-align: left; }\n\n.lintje-data-table__header-cell {\n font: var(--text-table-head);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n color: var(--color-text-muted);\n background: var(--color-bg-surface);\n padding: 10px var(--space-3);\n border-bottom: 2px solid var(--color-border-heavy);\n}\n/* The sorted column: its label is text (4.5:1), the rule under it a line (3:1). */\n.lintje-data-table__header-cell.is-active {\n color: var(--color-accent-text);\n border-bottom-color: var(--color-accent-line);\n}\n/* The button takes the cell's padding, so the whole cell sorts. */\n.lintje-data-table__header-cell--sortable { padding: 0; }\n.lintje-data-table__sort-button {\n display: flex; align-items: center; gap: 6px;\n width: 100%;\n min-height: var(--h-target);\n padding: 0 var(--space-3);\n font: inherit; color: inherit; text-align: inherit;\n /* A button resets these; the header's label style must reach the label. */\n text-transform: inherit; letter-spacing: inherit;\n}\n.lintje-data-table__header-cell--align-right .lintje-data-table__sort-button { justify-content: flex-end; }\n/* Tracking also follows the last letter; it widened the table 1 px past its tile at 1024 px.\n Giving that trailing step back keeps the gap at 6 px. */\n.lintje-data-table__sort-label { margin-inline-end: calc(var(--label-tracking) * -1); }\n.lintje-data-table__sort-button:hover { background: var(--color-bg-subtle); }\n/* The scroller clips the ring, so it sits inside the cell. */\n.lintje-data-table__sort-button:focus-visible { outline-offset: -3px; }\n/* The arrows are a glyph, outside the type scale, one above the other in a box that never changes\n width. A head says only what holds now: the sorted column shows its one arrow, and another\n column both under the pointer or the focus. A hidden arrow keeps its place. */\n.lintje-data-table__sort-icon {\n display: inline-flex; flex-direction: column; flex: none;\n font-size: 8px; line-height: 1;\n color: var(--color-text-muted);\n visibility: hidden;\n}\n.lintje-data-table__sort-button:hover .lintje-data-table__sort-icon,\n.lintje-data-table__sort-button:focus-visible .lintje-data-table__sort-icon,\n.lintje-data-table__header-cell.is-active .lintje-data-table__sort-icon { visibility: visible; }\n.lintje-data-table__sort-icon > .is-off { visibility: hidden; }\n.lintje-data-table__sort-icon > .is-on { color: var(--color-accent-text); }\n\n.lintje-data-table__row { border-bottom: 1px solid var(--color-border-default); }\n/* Filler rows keep a short last page as tall as a full one. */\n.lintje-data-table__row--filler { border-bottom-color: transparent; }\n/* A row is one line: no cell wraps, not even at a hyphen (\"04-10-2026\"). */\n.lintje-data-table__cell {\n padding: 0 var(--space-3);\n height: var(--h-table-row);\n font-weight: 400;\n color: var(--color-text-primary);\n white-space: nowrap;\n}\n.lintje-data-table__name { font-weight: 700 !important; }\n/* The name that opens its row is dark, as in the work list: a column of blue reads as a column of\n links and outweighs the figures beside it. The pointer and the focus show the line. */\n.lintje-data-table__open {\n padding: 0;\n font: inherit; text-align: inherit;\n color: var(--color-text-primary);\n text-decoration: none;\n transition: color var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-data-table__open:hover,\n.lintje-data-table__open:focus-visible { color: var(--color-link); text-decoration: underline; }\n.lintje-data-table__header-cell--align-right,\n.lintje-data-table__cell--align-right,\n.lintje-data-table__mobile-cell--align-right { text-align: right !important; }\n.lintje-data-table__cell--align-right { font-variant-numeric: tabular-nums; }\n/* A `truncate` column: `width: 1%` keeps the auto layout from handing it surplus width, so it is as\n wide as its longest value up to the cap, and a longer value ends in an ellipsis (the heatmap's\n label column does the same). */\n.lintje-data-table__cell--truncate { width: 1%; }\n.lintje-data-table__cell-text { display: block; max-width: 280px; overflow: hidden; text-overflow: ellipsis; }\n/* The `title` needs a pointer: under the keyboard's focus and without hover the value wraps whole. */\n.lintje-data-table__row:focus-visible .lintje-data-table__cell-text,\n.lintje-data-table__row:has(:focus-visible) .lintje-data-table__cell-text { white-space: normal; overflow-wrap: anywhere; }\n@media (hover: none) {\n .lintje-data-table__cell-text { white-space: normal; overflow-wrap: anywhere; }\n}\n\n.lintje-data-table__row.is-clickable { cursor: pointer; }\n.lintje-data-table__row.is-clickable:hover,\n.lintje-data-table__mobile-row.is-clickable:hover { background: var(--color-bg-subtle); }\n/* Selected and hover share a surface; the 4 px edge is the only carrier, so it must stay visible. */\n.lintje-data-table__row.is-selected,\n.lintje-data-table__mobile-row.is-selected {\n background: var(--color-bg-selected);\n box-shadow: inset 4px 0 0 var(--color-accent-line);\n}\n/* A checked row takes the selected background without the bar: the bar means drilldown. */\n.lintje-data-table__check-cell { width: 24px; padding-right: var(--space-3); }\n.lintje-data-table__header-cell.lintje-data-table__check-cell { padding-block: 0; }\n.lintje-data-table__check-cell .lintje-choice,\n.lintje-data-table__mobile-check .lintje-choice { gap: 0; }\n.lintje-data-table__mobile-check { display: flex; align-items: center; gap: var(--space-3); }\n.lintje-data-table__mobile-identity { min-width: 0; }\n.lintje-data-table__row.is-checked,\n.lintje-data-table__mobile-row.is-checked { background: var(--color-bg-selected); }\n.lintje-data-table__row:focus-visible,\n.lintje-data-table__mobile-row:focus-visible { outline-offset: -3px; }\n\n.lintje-threshold-cell {\n display: inline-flex; align-items: center; justify-content: center;\n gap: var(--space-1);\n min-width: 44px;\n padding: 4px var(--space-2);\n font-weight: 700;\n}\n.lintje-threshold-cell__icon { flex: none; }\n.lintje-threshold-cell--good { background: transparent; }\n/* At most one fill in a row: a caution is its glyph and weight, only a crossed threshold fills. */\n.lintje-threshold-cell--caution { background: transparent; }\n.lintje-threshold-cell--caution .lintje-threshold-cell__icon { color: var(--color-attention-line); }\n.lintje-threshold-cell--above-threshold { background: var(--color-error); color: var(--color-text-on-fill); }\n\n.lintje-data-table__muted { color: var(--color-text-muted); }\n\n/* Tones are modifiers, not inline colours: the host's `style-src 'self'` drops `style`. */\n.lintje-data-table__change { font-weight: 700; }\n.lintje-data-table__change--flat { color: var(--color-text-muted); }\n.lintje-data-table__change--up { color: var(--color-success-text); }\n.lintje-data-table__change--down { color: var(--color-error-text); }\n\n/* Each representation has its own pager; the phone's is hidden on desktop. */\n.lintje-data-table__pagination { padding-top: var(--space-3); }\n.lintje-data-table__pagination--mobile { display: none; }\n\n/* --- Editing a cell (editing.ts) ------------------------------------------ */\n/* The pencil sits at the end of the text, at the start for a number. */\n.lintje-data-table__cell--editable { position: relative; }\n.lintje-data-table__cell--editable:hover { background: var(--color-bg-subtle); }\n.lintje-data-table__edit-icon {\n position: absolute;\n top: 50%; right: var(--space-1);\n translate: 0 -50%;\n color: var(--color-text-muted);\n visibility: hidden;\n}\n.lintje-data-table__cell--align-right .lintje-data-table__edit-icon { right: auto; left: var(--space-1); }\n.lintje-data-table__cell--editable:hover .lintje-data-table__edit-icon { visibility: visible; }\n.lintje-data-table__cell--editable.is-editing { padding: 2px; vertical-align: top; }\n.lintje-data-table__cell--editable.is-editing:hover { background: transparent; }\n.lintje-data-table__editor {\n display: block;\n width: 100%; height: var(--h-control);\n padding: 0 var(--space-2);\n border: 1px solid var(--color-border-field);\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n font: var(--text-table);\n font-weight: 400;\n text-align: inherit;\n}\n.lintje-data-table__cell--align-right .lintje-data-table__editor { font-variant-numeric: tabular-nums; }\n.lintje-data-table__editor::placeholder { color: var(--color-text-placeholder); opacity: 1; }\n.lintje-data-table__editor.is-error { border: 2px solid var(--color-error); }\n.lintje-data-table__edit-error {\n display: block;\n padding: 2px var(--space-2) var(--space-1);\n font-size: 0.875rem; font-weight: 700;\n color: var(--color-error-text);\n text-align: left;\n}\n.lintje-data-table__busy {\n display: inline-flex; align-items: center; gap: var(--space-2);\n color: var(--color-text-muted);\n}\n\n/* --- Row actions and the selection bar (actions.ts) ------------------------ */\n.lintje-data-table__action-cell { width: var(--h-icon-button); text-align: right; }\n/* The chooser's tooltip is a sentence, not a column label: it does not take the head's capitals. */\n.lintje-data-table__action-cell lintje-tooltip { text-transform: none; letter-spacing: normal; font-weight: 400; }\n.lintje-data-table__selection {\n position: sticky; top: var(--h-sticky); z-index: 1;\n display: flex; flex-wrap: wrap; align-items: center;\n gap: var(--space-2) var(--space-4);\n padding: var(--space-2) var(--space-3);\n background: var(--color-bg-selected);\n border-top: 2px solid var(--color-accent-line);\n font: var(--text-table);\n color: var(--color-text-primary);\n}\n.lintje-data-table__selection-count { font-weight: 700; }\n.lintje-data-table__selection-clear { margin-left: auto; }\n\n/* --- Filters and the column chooser (filters.ts) ---------------------------- */\n.lintje-data-table__toolbar {\n display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;\n gap: var(--space-2) var(--space-4);\n padding-bottom: var(--space-3);\n}\n.lintje-data-table__toolbar--quiet,\n.lintje-data-table__sheet-button,\n.lintje-data-table__sort-menu { display: none; }\n.lintje-data-table__chips {\n display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2);\n font: var(--text-small);\n}\n.lintje-data-table__chip {\n display: inline-flex; align-items: center; gap: var(--space-1);\n height: var(--h-chip);\n padding: 0 var(--space-1) 0 var(--space-2);\n background: var(--color-bg-subtle);\n border: 1px solid var(--color-border-default);\n color: var(--color-text-primary);\n white-space: nowrap;\n}\n/* A transparent hit area reaches the target height up and down; sideways stands other content. */\n.lintje-data-table__chip-clear {\n position: relative;\n width: var(--h-chip-field); height: var(--h-chip-field);\n display: flex; align-items: center; justify-content: center;\n color: var(--color-text-muted);\n}\n.lintje-data-table__chip-clear::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2)) 0;\n}\n.lintje-data-table__chip-clear:hover { color: var(--color-text-primary); }\n.lintje-data-table__filter-total { color: var(--color-text-muted); }\n/* The table's own controls, at the toolbar's end, each with its word. */\n.lintje-data-table__tools { display: flex; align-items: center; gap: var(--space-2); margin-left: auto; }\n.lintje-data-table__chooser-reset { align-self: flex-start; }\n\n.lintje-data-table__header-cell--filterable { padding-block: 0; }\n.lintje-data-table__header-inner {\n display: flex; align-items: center; gap: var(--space-2);\n min-height: var(--h-control);\n}\n.lintje-data-table__header-cell--sortable .lintje-data-table__header-inner { padding-right: var(--space-2); }\n.lintje-data-table__header-inner .lintje-data-table__sort-button { flex: 1; min-width: 0; }\n/* A filtered column carries one mark, its filled funnel; the chips above say it in words. */\n/* A transparent hit area reaches the target height up and down; on its left stands the sort button. */\n.lintje-data-table__funnel {\n position: relative;\n width: var(--h-chip); height: var(--h-chip); flex: none;\n display: flex; align-items: center; justify-content: center;\n margin-left: auto;\n border: 1px solid transparent;\n color: var(--color-text-muted);\n}\n.lintje-data-table__funnel::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2)) 0;\n}\n.lintje-data-table__funnel:hover { background: var(--color-bg-subtle); color: var(--color-text-primary); }\n/* As wide as the row menus beside or under them, so their icons line up. */\n.lintje-data-table__chooser-button,\n.lintje-data-table__detail-toggle,\n.lintje-data-table__mobile-toggle {\n width: var(--h-icon-button); height: var(--h-icon-button);\n display: flex; align-items: center; justify-content: center;\n margin-left: auto;\n border: 1px solid transparent;\n color: var(--color-text-muted);\n}\n.lintje-data-table__chooser-button:hover,\n.lintje-data-table__chooser-button[aria-expanded='true'],\n.lintje-data-table__detail-toggle:hover,\n.lintje-data-table__mobile-toggle:hover { background: var(--color-bg-subtle); color: var(--color-text-primary); }\n.lintje-data-table__funnel.is-filtered {\n background: var(--color-action-primary);\n border-color: var(--color-action-primary-border);\n color: var(--color-action-primary-text);\n}\n\n.lintje-data-table__filter-panel {\n display: flex; flex-direction: column; gap: var(--space-3);\n width: 260px; max-width: 100%;\n padding: var(--space-4);\n font: var(--text-table);\n color: var(--color-text-primary);\n}\n.lintje-data-table__filter-name { font-size: 0.875rem; font-weight: 700; }\n.lintje-data-table__filter-options { display: flex; flex-direction: column; }\n.lintje-data-table__filter-option { min-height: var(--h-option); }\n.lintje-data-table__filter-count { margin-left: auto; color: var(--color-text-muted); font-variant-numeric: tabular-nums; }\n.lintje-data-table__filter-search {\n width: 100%; height: var(--h-control);\n padding: 0 var(--space-3);\n border: 1px solid var(--color-border-field);\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n font-size: 1rem;\n}\n.lintje-data-table__filter-search::placeholder { color: var(--color-text-placeholder); opacity: 1; }\n/* \"Wissen\" clears the field; it draws no cross of its own. */\n.lintje-data-table__filter-search::-webkit-search-cancel-button,\n.lintje-data-table__filter-search::-webkit-search-decoration { appearance: none; }\n.lintje-data-table__filter-actions {\n display: flex; justify-content: flex-end; gap: var(--space-2);\n padding-top: var(--space-1);\n}\n.lintje-data-table__filter-section {\n display: flex; flex-direction: column; gap: var(--space-2);\n margin-bottom: var(--space-6);\n}\n.lintje-data-table__chooser-note { font: var(--text-small); color: var(--color-text-muted); }\n\n/* The sizer: each column's widest value, with no height, so a sort or a page never moves a column. */\n.lintje-data-table__sizer .lintje-data-table__cell { height: 0; padding-block: 0; border: 0; }\n.lintje-data-table__sizer-box { height: 0; overflow: hidden; visibility: hidden; }\n\n/* --- A row's detail, groups and totals ------------------------------------- */\n.lintje-data-table__detail-cell { width: var(--h-icon-button); padding: 0; }\n.lintje-data-table__row.is-open { background: var(--color-bg-subtle); border-bottom-color: transparent; }\n.lintje-data-table__detail { border-bottom: 1px solid var(--color-border-default); }\n.lintje-data-table__detail-body { padding: 0 var(--space-3) var(--space-4) calc(var(--h-icon-button) + var(--space-3)); background: var(--color-bg-subtle); }\n\n/* A group's heading spans the name's column; collapsed, its other cells hold the subtotals. */\n.lintje-data-table__group-row { border-bottom: 1px solid var(--color-border-default); }\n.lintje-data-table__group-head { padding: 0; }\n.lintje-data-table__group-toggle {\n display: flex; align-items: center; gap: var(--space-2);\n width: 100%;\n min-height: var(--h-table-row);\n padding: 0 var(--space-3);\n font: inherit; font-weight: 700; color: var(--color-text-primary); text-align: left;\n}\n.lintje-data-table__group-toggle:hover { background: var(--color-bg-subtle); }\n.lintje-data-table__group-toggle:focus-visible { outline-offset: -3px; }\n.lintje-data-table__group-count { font-weight: 400; font-size: 0.875rem; color: var(--color-text-muted); }\n.lintje-data-table__group-row .lintje-data-table__cell { font-weight: 700; }\n/* Rows in a group stand in from its heading, by the chevron's width and gap. */\n.lintje-data-table__row--in-group > .lintje-data-table__name { padding-left: calc(var(--space-3) + var(--space-4) + var(--space-2)); }\n\n/* A total is the host's: bold, over a heavy line, never sticky. The word before it says how. */\n.lintje-data-table__total > *,\n.lintje-data-table__subtotal > * { font-weight: 700; }\n.lintje-data-table__total { border-top: 2px solid var(--color-border-heavy); }\n.lintje-data-table__subtotal { border-top: 1px solid var(--color-border-heavy); border-bottom: 1px solid var(--color-border-default); }\n.lintje-data-table__sum-label { text-align: left; }\n.lintje-data-table__subtotal > .lintje-data-table__sum-label { font-weight: 400; color: var(--color-text-muted); }\n.lintje-data-table__full .lintje-data-table__subtotal > .lintje-data-table__sum-label { padding-left: calc(var(--space-3) + var(--space-4) + var(--space-2)); }\n.lintje-data-table__how { font-weight: 400; font-size: 0.875rem; color: var(--color-text-muted); }\n\n/* --- Below 768 px the representation switches ---------------------------- */\n/* Below 768 px, from the media controller's `is-phone`: WebKit does not re-apply a shadow root's\n media query after a resize, and the script already decides by MOBILE. */\n:where(.lintje-data-table.is-phone) .lintje-data-table__toolbar { padding: 0 var(--tile-pad-x) var(--space-3); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__toolbar--quiet { display: flex; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__sheet-button,\n:where(.lintje-data-table.is-phone) .lintje-data-table__sort-menu { display: inline-flex; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__selection--mobile { top: auto; bottom: 0; margin-top: var(--space-3); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__frame { display: none; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile { display: table; }\n.lintje-data-table:where(.is-phone) { margin: 0 calc(var(--tile-pad-x) * -1); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__header-cell--mobile { padding: 10px var(--tile-pad-x); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__header-cell--mobile.lintje-data-table__header-cell--sortable { padding: 0; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__header-cell--mobile .lintje-data-table__sort-button { padding: 0 var(--tile-pad-x); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-row { border-bottom: 1px solid var(--color-border-default); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-row--filler,\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-row.is-open { border-bottom-color: transparent; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-detail { border-bottom: 1px solid var(--color-border-default); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-detail > .lintje-data-table__mobile-cell { padding-top: 0; }\n/* The toggle and the row menu sit at the row's end, on the name's first line. Two classes, so the\n cell padding below does not give the column its start back. */\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-cell.lintje-data-table__mobile-cell--actions,\n:where(.lintje-data-table.is-phone) .lintje-data-table__header-cell--mobile.lintje-data-table__mobile-cell--actions { width: 1%; padding-inline-start: 0; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-actions { display: flex; align-items: center; justify-content: flex-end; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-cell {\n padding: var(--space-2) var(--tile-pad-x);\n vertical-align: top;\n font-weight: 400;\n}\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-name { display: block; font-size: 0.875rem; font-weight: 700; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-sub { display: block; font-size: 0.875rem; color: var(--color-text-muted); margin-top: 2px; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-measure { display: block; font-size: 0.875rem; font-weight: 700; font-variant-numeric: tabular-nums; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-status { display: block; font-size: 0.875rem; margin-top: 2px; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-status--within { color: var(--color-text-muted); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__mobile-status--outside { color: var(--color-error-text); font-weight: 700; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__pagination--full { display: none; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__pagination--mobile { display: block; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__pagination { padding: var(--space-3) var(--tile-pad-x) 0; }\n/* The phone shows two columns and lists the rest under a row: there is nothing to choose. */\n:where(.lintje-data-table.is-phone) .lintje-data-table__group-row .lintje-data-table__mobile-cell { padding-block: 0; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__group-toggle { padding: 0; min-height: var(--h-target); }\n/* On a phone the name and the count run as text, so a long name wraps instead of widening the table. */\n:where(.lintje-data-table.is-phone) .lintje-data-table__group-toggle { display: block; padding-block: var(--space-3); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__group-toggle .lintje-icon { vertical-align: -2px; margin-inline-end: var(--space-2); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__group-count { margin-inline-start: var(--space-2); }\n:where(.lintje-data-table.is-phone) .lintje-data-table__group-row .lintje-data-table__mobile-cell--align-right { vertical-align: middle; }\n:where(.lintje-data-table.is-phone) .lintje-data-table__total { border-top: 2px solid var(--color-border-heavy); }\n\n/* Paper: every column on the sheet, a row never split, and no control. Values wrap rather than\n run off the edge. What the columns are filtered on stays, as the chips. */\n@media print {\n /* Its own height, not the cell's: a tile split over two sheets measures its rows again. */\n .lintje-data-table__tile { height: auto; }\n /* Chromium repeats a head on the next sheet without its words, so the head stands once. */\n .lintje-data-table__full thead { display: table-row-group; }\n .lintje-data-table__scroller { overflow: visible; }\n .lintje-data-table__frame::before,\n .lintje-data-table__frame::after { display: none; }\n .lintje-data-table__cell { white-space: normal; height: auto; padding-block: var(--space-2); }\n .lintje-data-table__cell-text { max-width: none; white-space: normal; }\n .lintje-data-table__row { break-inside: avoid; }\n /* The count belongs to the rows above it, not alone on a sheet of its own. */\n .lintje-data-table__pagination { break-before: avoid; }\n .lintje-data-table__row--filler,\n .lintje-data-table__check-cell,\n .lintje-data-table__action-cell,\n .lintje-data-table__sort-icon,\n .lintje-data-table__funnel,\n .lintje-data-table__tools,\n .lintje-data-table__clear-all,\n .lintje-data-table__detail-cell,\n .lintje-data-table__chip-clear,\n .lintje-data-table__selection,\n .lintje-data-table__edit-icon { display: none; }\n .lintje-data-table__open { color: inherit; text-decoration: none; }\n}\n\n/* Forced colours drop the selected row's fill and inset bar. A real 4 px border on the first\n cell (Canvas at rest, Highlight when selected) replaces the bar without moving a column. */\n@media (forced-colors: active) {\n .lintje-data-table__row > :first-child,\n .lintje-data-table__mobile-row > :first-child { border-left: 4px solid Canvas; }\n .lintje-data-table__row.is-selected > :first-child,\n .lintje-data-table__mobile-row.is-selected > :first-child { border-left-color: Highlight; }\n .lintje-data-table__header-cell.is-active { border-bottom-color: Highlight; }\n .lintje-data-table__funnel.is-filtered { border-color: Highlight; }\n}\n";
|
|
15
16
|
//#endregion
|
|
16
17
|
//#region src/components/tables/data-table/editing.ts
|
|
17
18
|
function te(e, t, n, r, i) {
|
|
@@ -143,14 +144,14 @@ var ne = 0, re = class {
|
|
|
143
144
|
}
|
|
144
145
|
content(e, t, n, r, i, a) {
|
|
145
146
|
let o = this.mode(e, n);
|
|
146
|
-
if (o.kind === "busy") return
|
|
147
|
+
if (o.kind === "busy") return f`<span class="lintje-data-table__busy"
|
|
147
148
|
><lintje-spinner size="16"></lintje-spinner><span>${o.value}</span></span
|
|
148
149
|
>`;
|
|
149
|
-
if (o.kind === "rest") return
|
|
150
|
+
if (o.kind === "rest") return f`${r}${v("functioneel-bewerken", {
|
|
150
151
|
size: 14,
|
|
151
152
|
className: "lintje-data-table__edit-icon"
|
|
152
153
|
})}`;
|
|
153
|
-
let s = o.error ? `${this.#t}-${a.copy}-error-${a.ids.indexOf(e.id)}-${e.column}` : null,
|
|
154
|
+
let s = o.error ? `${this.#t}-${a.copy}-error-${a.ids.indexOf(e.id)}-${e.column}` : null, l = (t) => {
|
|
154
155
|
let r = t.currentTarget;
|
|
155
156
|
t.stopPropagation(), t.key === "Escape" ? (t.preventDefault(), this.cancel(e)) : t.key === "Enter" ? (t.preventDefault(), this.commit(e, r.value, n, "down", a)) : t.key === "Tab" && (t.preventDefault(), this.commit(e, r.value, n, t.shiftKey ? "previous" : "next", a));
|
|
156
157
|
}, u = (t) => {
|
|
@@ -159,30 +160,30 @@ var ne = 0, re = class {
|
|
|
159
160
|
"lintje-data-table__editor": !0,
|
|
160
161
|
"focus-inset": !0,
|
|
161
162
|
"is-error": !!o.error
|
|
162
|
-
}),
|
|
163
|
+
}), p = t.editor, m = p?.kind === "select" ? f`<select
|
|
163
164
|
class=${d}
|
|
164
165
|
aria-label=${i}
|
|
165
|
-
aria-invalid=${o.error ? "true" :
|
|
166
|
-
aria-describedby=${s ??
|
|
167
|
-
@keydown=${
|
|
166
|
+
aria-invalid=${o.error ? "true" : c}
|
|
167
|
+
aria-describedby=${s ?? c}
|
|
168
|
+
@keydown=${l}
|
|
168
169
|
@blur=${u}
|
|
169
170
|
>
|
|
170
|
-
${(
|
|
171
|
+
${(p.options ?? []).map((e) => f`<option value=${e.value} ?selected=${e.value === o.value}>
|
|
171
172
|
${e.label ?? e.value}
|
|
172
173
|
</option>`)}
|
|
173
|
-
</select>` :
|
|
174
|
+
</select>` : f`<input
|
|
174
175
|
type="text"
|
|
175
176
|
class=${d}
|
|
176
|
-
inputmode=${
|
|
177
|
-
placeholder=${
|
|
177
|
+
inputmode=${p?.kind === "number" ? "decimal" : c}
|
|
178
|
+
placeholder=${p?.kind === "date" ? "dd-mm-jjjj" : c}
|
|
178
179
|
aria-label=${i}
|
|
179
|
-
aria-invalid=${o.error ? "true" :
|
|
180
|
-
aria-describedby=${s ??
|
|
180
|
+
aria-invalid=${o.error ? "true" : c}
|
|
181
|
+
aria-describedby=${s ?? c}
|
|
181
182
|
.value=${o.value}
|
|
182
|
-
@keydown=${
|
|
183
|
+
@keydown=${l}
|
|
183
184
|
@blur=${u}
|
|
184
185
|
/>`;
|
|
185
|
-
return
|
|
186
|
+
return f`${m}${o.error ? f`<span id=${s ?? c} class="lintje-data-table__edit-error">${o.error}</span>` : c}`;
|
|
186
187
|
}
|
|
187
188
|
cellClasses(e, t) {
|
|
188
189
|
let n = this.mode(e, t);
|
|
@@ -196,7 +197,7 @@ var ne = 0, re = class {
|
|
|
196
197
|
t.target === t.currentTarget && (t.key === "Enter" || t.key === "F2") && (t.preventDefault(), t.stopPropagation(), this.open(e, t.currentTarget));
|
|
197
198
|
}
|
|
198
199
|
renderStatus() {
|
|
199
|
-
return
|
|
200
|
+
return f`<span id=${this.hintId} class="visually-hidden">Bewerkbaar met Enter of F2</span
|
|
200
201
|
><span class="visually-hidden" role="status">${this.message}</span>`;
|
|
201
202
|
}
|
|
202
203
|
};
|
|
@@ -209,12 +210,12 @@ function ie(e, t, n) {
|
|
|
209
210
|
let [a, o] = i < r ? [i, r] : [r, i];
|
|
210
211
|
return e.slice(a, o + 1);
|
|
211
212
|
}
|
|
212
|
-
function
|
|
213
|
+
function A(e, t) {
|
|
213
214
|
let n = new Set(e);
|
|
214
215
|
return [...e, ...t.filter((e) => !n.has(e))];
|
|
215
216
|
}
|
|
216
|
-
function
|
|
217
|
-
return
|
|
217
|
+
function j(e, t, n) {
|
|
218
|
+
return f`<lintje-menu-button
|
|
218
219
|
icon
|
|
219
220
|
variant="tertiary"
|
|
220
221
|
placement="bottom-end"
|
|
@@ -225,22 +226,22 @@ function A(e, t, n) {
|
|
|
225
226
|
}}
|
|
226
227
|
></lintje-menu-button>`;
|
|
227
228
|
}
|
|
228
|
-
function
|
|
229
|
-
let a = n ? e.length > 0 ?
|
|
229
|
+
function ae(e, t, n, r, i) {
|
|
230
|
+
let a = n ? e.length > 0 ? f`<lintje-menu-button
|
|
230
231
|
label="Acties"
|
|
231
232
|
.items=${e}
|
|
232
233
|
@lintje-action=${(e) => {
|
|
233
234
|
e.stopPropagation(), r(e.detail);
|
|
234
235
|
}}
|
|
235
|
-
></lintje-menu-button>` :
|
|
236
|
+
></lintje-menu-button>` : c : e.map((e) => f`<lintje-button
|
|
236
237
|
variant=${e.danger ? "danger-secondary" : "secondary"}
|
|
237
238
|
size="compact"
|
|
238
|
-
icon=${e.icon ??
|
|
239
|
+
icon=${e.icon ?? c}
|
|
239
240
|
?disabled=${!!e.disabled}
|
|
240
241
|
@click=${() => r(e.value)}
|
|
241
242
|
>${e.label}</lintje-button
|
|
242
243
|
>`);
|
|
243
|
-
return
|
|
244
|
+
return f`<div
|
|
244
245
|
class="lintje-data-table__selection ${n ? "lintje-data-table__selection--mobile" : ""}"
|
|
245
246
|
role="toolbar"
|
|
246
247
|
aria-label="Acties op de selectie"
|
|
@@ -268,15 +269,15 @@ function N(e) {
|
|
|
268
269
|
function oe(e, t) {
|
|
269
270
|
return e.filter?.options?.find((e) => e.value === t)?.label ?? t;
|
|
270
271
|
}
|
|
271
|
-
function
|
|
272
|
+
function P(e, t) {
|
|
272
273
|
let n = Array.isArray(t) ? t.map((t) => oe(e, t)).join(", ") : `‘${t}’`;
|
|
273
274
|
return `${e.header}: ${n}`;
|
|
274
275
|
}
|
|
275
|
-
function
|
|
276
|
+
function F(e, t) {
|
|
276
277
|
let n = `Filter op ${e.header.toLocaleLowerCase("nl")}`;
|
|
277
278
|
return M(t) ? Array.isArray(t) ? `${n}, ${t.length} gekozen` : `${n}, ‘${t}’` : n;
|
|
278
279
|
}
|
|
279
|
-
function
|
|
280
|
+
function I(e, t, n) {
|
|
280
281
|
let [r, ...i] = e;
|
|
281
282
|
if (!r) return [];
|
|
282
283
|
let a = new Set(n), o = new Map((t ?? []).map((e, t) => [e, t]));
|
|
@@ -285,18 +286,18 @@ function F(e, t, n) {
|
|
|
285
286
|
index: t
|
|
286
287
|
})).sort((e, t) => (o.get(e.column.key) ?? o.size + e.index) - (o.get(t.column.key) ?? o.size + t.index)).map((e) => e.column).filter((e) => !a.has(e.key))];
|
|
287
288
|
}
|
|
288
|
-
function
|
|
289
|
+
function se(e, t, n) {
|
|
289
290
|
let r = new Set(n);
|
|
290
291
|
return {
|
|
291
292
|
order: [e, ...t],
|
|
292
293
|
hidden: t.filter((e) => !r.has(e))
|
|
293
294
|
};
|
|
294
295
|
}
|
|
295
|
-
function
|
|
296
|
+
function L(e, t) {
|
|
296
297
|
return {
|
|
297
298
|
focusout: (n) => {
|
|
298
299
|
let r = n.relatedTarget, i = n.currentTarget, a = i.getRootNode().host;
|
|
299
|
-
!r || r === e || i.contains(r) ||
|
|
300
|
+
!r || r === e || i.contains(r) || l(a, r) || t("away");
|
|
300
301
|
},
|
|
301
302
|
keydown: (e) => {
|
|
302
303
|
if (e.key !== "Tab" || e.defaultPrevented) return;
|
|
@@ -305,16 +306,16 @@ function I(e, t) {
|
|
|
305
306
|
}
|
|
306
307
|
};
|
|
307
308
|
}
|
|
308
|
-
function
|
|
309
|
+
function ce(e, t, n, r) {
|
|
309
310
|
let i = M(t);
|
|
310
|
-
return
|
|
311
|
+
return f`<button
|
|
311
312
|
type="button"
|
|
312
313
|
class=${_({
|
|
313
314
|
"lintje-data-table__funnel": !0,
|
|
314
315
|
"is-filtered": i
|
|
315
316
|
})}
|
|
316
317
|
data-column=${e.key}
|
|
317
|
-
aria-label=${
|
|
318
|
+
aria-label=${F(e, t)}
|
|
318
319
|
aria-haspopup="dialog"
|
|
319
320
|
aria-expanded=${n ? "true" : "false"}
|
|
320
321
|
@click=${(e) => r(e.currentTarget)}
|
|
@@ -322,8 +323,8 @@ function le(e, t, n, r) {
|
|
|
322
323
|
${v("functioneel-trechter", { size: 14 })}
|
|
323
324
|
</button>`;
|
|
324
325
|
}
|
|
325
|
-
function
|
|
326
|
-
if (e.filter?.kind === "text") return
|
|
326
|
+
function R(e, t, n) {
|
|
327
|
+
if (e.filter?.kind === "text") return f`<input
|
|
327
328
|
type="search"
|
|
328
329
|
class="lintje-data-table__filter-search"
|
|
329
330
|
aria-label=${`Zoek in ${e.header.toLocaleLowerCase("nl")}`}
|
|
@@ -331,8 +332,8 @@ function L(e, t, n) {
|
|
|
331
332
|
@input=${(e) => n(e.target.value)}
|
|
332
333
|
/>`;
|
|
333
334
|
let r = new Set(Array.isArray(t) ? t : []);
|
|
334
|
-
return
|
|
335
|
-
${(e.filter?.options ?? []).map((e) =>
|
|
335
|
+
return f`<div class="lintje-data-table__filter-options">
|
|
336
|
+
${(e.filter?.options ?? []).map((e) => f`<label class="lintje-choice lintje-data-table__filter-option">
|
|
336
337
|
<input
|
|
337
338
|
type="checkbox"
|
|
338
339
|
class="lintje-choice__input"
|
|
@@ -346,16 +347,16 @@ function L(e, t, n) {
|
|
|
346
347
|
><span class="lintje-choice__mark">✓</span></span
|
|
347
348
|
>
|
|
348
349
|
<span class="lintje-choice__label">${e.label ?? e.value}</span>
|
|
349
|
-
${e.count == null ?
|
|
350
|
+
${e.count == null ? c : f`<span class="lintje-data-table__filter-count">${e.count}</span>`}
|
|
350
351
|
</label>`)}
|
|
351
352
|
</div>`;
|
|
352
353
|
}
|
|
353
|
-
function
|
|
354
|
-
let { column: t } = e, n =
|
|
355
|
-
return
|
|
354
|
+
function le(e) {
|
|
355
|
+
let { column: t } = e, n = L(e.anchor, e.onLeave);
|
|
356
|
+
return f`<lintje-popover
|
|
356
357
|
open
|
|
357
358
|
panel-role="dialog"
|
|
358
|
-
label=${
|
|
359
|
+
label=${F(t, null)}
|
|
359
360
|
.anchor=${e.anchor}
|
|
360
361
|
@focusout=${n.focusout}
|
|
361
362
|
@keydown=${n.keydown}
|
|
@@ -365,7 +366,7 @@ function ue(e) {
|
|
|
365
366
|
>
|
|
366
367
|
<div class="lintje-data-table__filter-panel">
|
|
367
368
|
<div class="lintje-data-table__filter-name">${t.header}</div>
|
|
368
|
-
${
|
|
369
|
+
${R(t, e.draft, e.onDraft)}
|
|
369
370
|
<div class="lintje-data-table__filter-actions">
|
|
370
371
|
<lintje-button variant="tertiary" size="compact" @click=${e.onClear}>Wissen</lintje-button>
|
|
371
372
|
<lintje-button variant="primary" size="compact" @click=${e.onApply}>Toepassen</lintje-button>
|
|
@@ -373,17 +374,17 @@ function ue(e) {
|
|
|
373
374
|
</div>
|
|
374
375
|
</lintje-popover>`;
|
|
375
376
|
}
|
|
376
|
-
function
|
|
377
|
-
return
|
|
377
|
+
function ue(e) {
|
|
378
|
+
return f`<lintje-drawer
|
|
378
379
|
open
|
|
379
380
|
heading="Filters"
|
|
380
381
|
@lintje-close=${(t) => {
|
|
381
382
|
t.stopPropagation(), e.onClose();
|
|
382
383
|
}}
|
|
383
384
|
>
|
|
384
|
-
${e.columns.map((t) =>
|
|
385
|
+
${e.columns.map((t) => f`<section class="lintje-data-table__filter-section">
|
|
385
386
|
<div class="lintje-data-table__filter-name">${t.header}</div>
|
|
386
|
-
${
|
|
387
|
+
${R(t, e.draft[t.key], (n) => e.onDraft(t.key, n))}
|
|
387
388
|
</section>`)}
|
|
388
389
|
<lintje-button slot="footer" variant="tertiary" @click=${e.onClear}>Wissen</lintje-button>
|
|
389
390
|
<lintje-button slot="footer" variant="primary" @click=${e.onApply}>Toepassen</lintje-button>
|
|
@@ -391,46 +392,46 @@ function R(e) {
|
|
|
391
392
|
}
|
|
392
393
|
function z(e) {
|
|
393
394
|
let t = e.columns.filter((t) => M(e.values[t.key])), n = t.length === 0 && !e.chooser;
|
|
394
|
-
return
|
|
395
|
+
return f`<div
|
|
395
396
|
class="lintje-data-table__toolbar ${n ? "lintje-data-table__toolbar--quiet" : ""}"
|
|
396
397
|
>
|
|
397
398
|
<div class="lintje-data-table__chips">
|
|
398
|
-
${e.columns.length > 0 ?
|
|
399
|
+
${e.columns.length > 0 ? f`<lintje-button
|
|
399
400
|
class="lintje-data-table__sheet-button"
|
|
400
401
|
variant="secondary"
|
|
401
402
|
size="compact"
|
|
402
403
|
icon="functioneel-filters"
|
|
403
404
|
@click=${e.onOpenSheet}
|
|
404
405
|
>Filters</lintje-button
|
|
405
|
-
>` :
|
|
406
|
-
${e.sortMenu ??
|
|
406
|
+
>` : c}
|
|
407
|
+
${e.sortMenu ?? c}
|
|
407
408
|
${t.map((t) => {
|
|
408
409
|
let n = e.values[t.key];
|
|
409
|
-
return
|
|
410
|
-
>${
|
|
410
|
+
return f`<span class="lintje-data-table__chip"
|
|
411
|
+
>${P(t, n)}<button
|
|
411
412
|
type="button"
|
|
412
413
|
class="lintje-data-table__chip-clear"
|
|
413
|
-
aria-label=${`${
|
|
414
|
+
aria-label=${`${F(t, null)} wissen`}
|
|
414
415
|
@click=${(n) => e.onClearFilter(t.key, n.currentTarget)}
|
|
415
416
|
>
|
|
416
417
|
${v("functioneel-kruis", { size: 12 })}
|
|
417
418
|
</button></span
|
|
418
419
|
>`;
|
|
419
420
|
})}
|
|
420
|
-
${t.length > 1 ?
|
|
421
|
+
${t.length > 1 ? f`<button
|
|
421
422
|
type="button"
|
|
422
423
|
class="lintje-button lintje-button--tertiary lintje-button--compact lintje-data-table__clear-all"
|
|
423
424
|
@click=${(t) => e.onClearAll(t.currentTarget)}
|
|
424
425
|
>
|
|
425
426
|
<span class="lintje-button__label">Filters wissen</span>
|
|
426
|
-
</button>` :
|
|
427
|
-
${e.count ?
|
|
427
|
+
</button>` : c}
|
|
428
|
+
${e.count ? f`<span class="lintje-data-table__filter-total">${e.count}</span>` : c}
|
|
428
429
|
</div>
|
|
429
|
-
${e.chooser ??
|
|
430
|
+
${e.chooser ?? c}
|
|
430
431
|
</div>`;
|
|
431
432
|
}
|
|
432
433
|
function B(e, t) {
|
|
433
|
-
return
|
|
434
|
+
return f`<lintje-tooltip text="Kolommen kiezen" no-describe
|
|
434
435
|
><button
|
|
435
436
|
type="button"
|
|
436
437
|
class="lintje-data-table__chooser-button"
|
|
@@ -444,8 +445,8 @@ function B(e, t) {
|
|
|
444
445
|
>`;
|
|
445
446
|
}
|
|
446
447
|
function V(e) {
|
|
447
|
-
let t =
|
|
448
|
-
return
|
|
448
|
+
let t = L(e.anchor, e.onLeave);
|
|
449
|
+
return f`<lintje-popover
|
|
449
450
|
open
|
|
450
451
|
panel-role="dialog"
|
|
451
452
|
label="Kolommen kiezen"
|
|
@@ -515,7 +516,7 @@ function G(e, t) {
|
|
|
515
516
|
if (t == null) return null;
|
|
516
517
|
if (e.format === "label") return e.labels?.[String(t)]?.label ?? String(t);
|
|
517
518
|
let n;
|
|
518
|
-
return n = typeof t == "string" || e.format === "text" ? String(t) : e.format === "change" || e.format === "change-compact" ? `${t > 0 ? "▲" : t < 0 ? "▼" : "●"} ${t > 0 ? "+" : ""}${
|
|
519
|
+
return n = typeof t == "string" || e.format === "text" ? String(t) : e.format === "change" || e.format === "change-compact" ? `${t > 0 ? "▲" : t < 0 ? "▼" : "●"} ${t > 0 ? "+" : ""}${u(t, e.decimals ?? 0)}%` : e.format === "percent" ? h(t, e.decimals ?? 0) : e.format === "decimal" ? u(t, e.decimals ?? 1) : u(t, e.decimals ?? 0), e.unit ? `${n} ${e.unit}` : n;
|
|
519
520
|
}
|
|
520
521
|
function K(e, t) {
|
|
521
522
|
let n = e.threshold;
|
|
@@ -538,7 +539,7 @@ function he(e, t) {
|
|
|
538
539
|
return me.has(n) ? n : null;
|
|
539
540
|
}
|
|
540
541
|
function J(e) {
|
|
541
|
-
return
|
|
542
|
+
return f`<span class="lintje-data-table__sort-icon" aria-hidden="true"
|
|
542
543
|
><span class=${_({
|
|
543
544
|
"lintje-data-table__sort-up": !0,
|
|
544
545
|
"is-on": e === "asc",
|
|
@@ -564,7 +565,7 @@ function ge(e) {
|
|
|
564
565
|
unit: e.unit
|
|
565
566
|
};
|
|
566
567
|
}
|
|
567
|
-
var Z =
|
|
568
|
+
var Z = f`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
568
569
|
><span class="visually-hidden">geen gegevens</span>`, Q = class {
|
|
569
570
|
#e;
|
|
570
571
|
#t;
|
|
@@ -582,7 +583,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
582
583
|
disconnect() {
|
|
583
584
|
this.#e?.removeEventListener("scroll", this.measure), this.#t?.disconnect(), this.#e = null, this.#t = null;
|
|
584
585
|
}
|
|
585
|
-
}, $ = class extends
|
|
586
|
+
}, $ = class extends C {
|
|
586
587
|
constructor(...e) {
|
|
587
588
|
super(...e), this.bare = !1, this.plain = !1, this.sort = null, this.checkedIds = [], this.page = 0, this.mobilePage = 0, this.#e = new t(this), this.#t = new Q(() => this.requestUpdate()), this.#n = new Q(() => this.requestUpdate()), this.#r = JSON.stringify(null), this.#i = JSON.stringify([]), this.filterValues = {}, this.filterDraft = {}, this.columnOrder = null, this.hiddenKeys = [], this.panel = null, this.openRows = [], this.collapsedGroups = [], this.liveMessage = "", this.#a = 0, this.#o = !1, this.#s = new re({
|
|
588
589
|
requestUpdate: () => this.requestUpdate(),
|
|
@@ -598,15 +599,15 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
598
599
|
}
|
|
599
600
|
static {
|
|
600
601
|
this.styles = [
|
|
601
|
-
|
|
602
|
+
d,
|
|
602
603
|
s,
|
|
603
604
|
e,
|
|
604
605
|
o(g),
|
|
605
606
|
o(S),
|
|
606
607
|
o(n),
|
|
607
608
|
o(x),
|
|
608
|
-
|
|
609
|
-
o(
|
|
609
|
+
D,
|
|
610
|
+
o(ee)
|
|
610
611
|
];
|
|
611
612
|
}
|
|
612
613
|
static {
|
|
@@ -804,7 +805,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
804
805
|
let n = t[e.key];
|
|
805
806
|
if (e.format === "label" && n != null) return G(e, n) ?? "";
|
|
806
807
|
if (e.editor?.kind === "date") {
|
|
807
|
-
let e =
|
|
808
|
+
let e = T(String(n ?? ""));
|
|
808
809
|
return e.kind === "ok" ? e.iso : "";
|
|
809
810
|
}
|
|
810
811
|
return n ?? (W(e, this.rows) ? -Infinity : "");
|
|
@@ -851,7 +852,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
851
852
|
this.checkedIds = e, this.emit("lintje-checked-change", e), this.data?.bulkActions && this.announce(e.length > 0 ? `${e.length} geselecteerd` : "Selectie opgeheven");
|
|
852
853
|
}
|
|
853
854
|
get shown() {
|
|
854
|
-
let e = this.groupColumn, t = !this.data?.columnChooser && this.hiddenKeys.length === 0 ? this.columns :
|
|
855
|
+
let e = this.groupColumn, t = !this.data?.columnChooser && this.hiddenKeys.length === 0 ? this.columns : I(this.columns, this.columnOrder, this.hiddenKeys);
|
|
855
856
|
return e ? t.filter((t) => t !== e) : t;
|
|
856
857
|
}
|
|
857
858
|
get filterColumns() {
|
|
@@ -905,7 +906,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
905
906
|
o && y(o).focus();
|
|
906
907
|
}
|
|
907
908
|
chooserItems() {
|
|
908
|
-
let e = this.groupColumn, [, ...t] =
|
|
909
|
+
let e = this.groupColumn, [, ...t] = I(this.columns, this.columnOrder, []).filter((t) => t !== e), n = JSON.stringify([t.map((e) => e.key), this.hiddenKeys]);
|
|
909
910
|
if (n !== this.#p.seen) {
|
|
910
911
|
let e = new Set(this.hiddenKeys);
|
|
911
912
|
this.#p = {
|
|
@@ -922,7 +923,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
922
923
|
changeColumns(e, t) {
|
|
923
924
|
let n = this.columns[0];
|
|
924
925
|
if (!n) return;
|
|
925
|
-
let r =
|
|
926
|
+
let r = se(n.key, e, t);
|
|
926
927
|
this.columnOrder = e, this.hiddenKeys = r.hidden, this.emit("lintje-columns-change", r);
|
|
927
928
|
}
|
|
928
929
|
get columnsAreDefault() {
|
|
@@ -950,25 +951,25 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
950
951
|
}
|
|
951
952
|
render() {
|
|
952
953
|
let e = this.data;
|
|
953
|
-
if (!e) return
|
|
954
|
+
if (!e) return c;
|
|
954
955
|
if (this.bare) return this.table(this.#t);
|
|
955
956
|
if (this.plain) return this.content();
|
|
956
957
|
let t = (e.state ?? "ready") === "ready", n = this.#e.matches && e.mobileSubtitle ? e.mobileSubtitle : e.subtitle;
|
|
957
|
-
return
|
|
958
|
+
return f`<lintje-tile
|
|
958
959
|
class="lintje-data-table__tile"
|
|
959
960
|
breakable
|
|
960
|
-
id=${this.id ? `${this.id}-tile` :
|
|
961
|
-
span=${e.span ??
|
|
962
|
-
heading=${e.title ??
|
|
963
|
-
icon=${e.icon ??
|
|
964
|
-
subtitle=${n ??
|
|
965
|
-
intro=${e.intro ??
|
|
966
|
-
footnote=${e.footnote ??
|
|
961
|
+
id=${this.id ? `${this.id}-tile` : c}
|
|
962
|
+
span=${e.span ?? c}
|
|
963
|
+
heading=${e.title ?? c}
|
|
964
|
+
icon=${e.icon ?? c}
|
|
965
|
+
subtitle=${n ?? c}
|
|
966
|
+
intro=${e.intro ?? c}
|
|
967
|
+
footnote=${e.footnote ?? c}
|
|
967
968
|
?expandable=${!!e.expandable && t}
|
|
968
969
|
?download=${!!e.download && t}
|
|
969
970
|
state=${e.state ?? "ready"}
|
|
970
|
-
message=${e.message ??
|
|
971
|
-
last-known=${e.lastKnown ??
|
|
971
|
+
message=${e.message ?? c}
|
|
972
|
+
last-known=${e.lastKnown ?? c}
|
|
972
973
|
@lintje-tile-expand=${(e) => {
|
|
973
974
|
e.stopPropagation(), this.expand(!0);
|
|
974
975
|
}}
|
|
@@ -976,11 +977,11 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
976
977
|
e.stopPropagation(), this.csv();
|
|
977
978
|
}}
|
|
978
979
|
>
|
|
979
|
-
${e.notice ?
|
|
980
|
+
${e.notice ? f`<lintje-announcement slot="notice" .data=${e.notice}></lintje-announcement>` : c}
|
|
980
981
|
${this.content(!0)}
|
|
981
982
|
</lintje-tile>
|
|
982
983
|
|
|
983
|
-
${this.renderExpandModal(this.expanded && t ? this.table(this.#n) :
|
|
984
|
+
${this.renderExpandModal(this.expanded && t ? this.table(this.#n) : c, {
|
|
984
985
|
heading: e.title,
|
|
985
986
|
subtitle: n,
|
|
986
987
|
footnote: e.footnote,
|
|
@@ -991,7 +992,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
991
992
|
let e = this.data;
|
|
992
993
|
if (!e?.download) return;
|
|
993
994
|
let t = (e, t) => e.format === "label" && t != null ? G(e, t) : t, n = e.totals;
|
|
994
|
-
|
|
995
|
+
w(e.download.filename, [
|
|
995
996
|
e.columns.map((e) => e.header),
|
|
996
997
|
...e.rows.map((n) => e.columns.map((e) => t(e, n[e.key]))),
|
|
997
998
|
...n ? [e.columns.map((r, i) => i === 0 ? e.totalsLabel ?? "Totaal" : t(r, X(n[r.key]).value))] : []
|
|
@@ -1000,12 +1001,12 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1000
1001
|
content(e = !1) {
|
|
1001
1002
|
let t = this.data;
|
|
1002
1003
|
switch (t.state ?? "ready") {
|
|
1003
|
-
case "loading": return e ?
|
|
1004
|
+
case "loading": return e ? f`<div slot="loading">${E({
|
|
1004
1005
|
kind: "table",
|
|
1005
1006
|
status: !1
|
|
1006
|
-
})}</div>` :
|
|
1007
|
-
case "empty": return e ?
|
|
1008
|
-
case "error": return e ?
|
|
1007
|
+
})}</div>` : E({ kind: "table" });
|
|
1008
|
+
case "empty": return e ? c : f`<lintje-empty-state compact status text=${t.message ?? c}></lintje-empty-state>`;
|
|
1009
|
+
case "error": return e ? c : f`<lintje-announcement
|
|
1009
1010
|
compact
|
|
1010
1011
|
.data=${{
|
|
1011
1012
|
kind: "warning",
|
|
@@ -1017,18 +1018,18 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1017
1018
|
}
|
|
1018
1019
|
}
|
|
1019
1020
|
table(e) {
|
|
1020
|
-
let t = this.data, n = this.sortedRows, r = this.#e.matches, i = this.grouped, a = i ? this.groupsOf(n) : [], o = i ? a.length : n.length, s = i ? this.groupsPerPage : t.pageSize ?? 25,
|
|
1021
|
+
let t = this.data, n = this.sortedRows, r = this.#e.matches, i = this.grouped, a = i ? this.groupsOf(n) : [], o = i ? a.length : n.length, s = i ? this.groupsPerPage : t.pageSize ?? 25, l = i ? this.groupsPerPage : H, u = Math.ceil(o / s), d = Math.ceil(o / l), m = a.slice(this.page * s, (this.page + 1) * s), h = a.slice(this.mobilePage * l, (this.mobilePage + 1) * l), g = new Set(this.collapsedGroups), v = i ? m.filter((e) => !g.has(e.key)).flatMap((e) => e.rows) : n.slice(this.page * s, (this.page + 1) * s), y = this.mobilePage * H, b = i ? [] : n.slice(y, y + H), x = !i && (r ? d : u) > 1, S = i ? {
|
|
1021
1022
|
many: "groepen",
|
|
1022
1023
|
one: "groep"
|
|
1023
1024
|
} : {
|
|
1024
1025
|
many: "rijen",
|
|
1025
1026
|
one: "rij"
|
|
1026
1027
|
}, C = e === this.#n === this.expanded, w = e === this.#n ? "modal" : "tile", T = e.start || e.end;
|
|
1027
|
-
return
|
|
1028
|
+
return f`<div class=${_({
|
|
1028
1029
|
"lintje-data-table": !0,
|
|
1029
1030
|
"is-phone": r
|
|
1030
1031
|
})}>
|
|
1031
|
-
${this.toolbar(e, x)} ${r ?
|
|
1032
|
+
${this.toolbar(e, x)} ${r ? c : this.selectionBar(!1)}
|
|
1032
1033
|
<!-- Desktop table: scrolls sideways when it is wider than the tile -->
|
|
1033
1034
|
<div
|
|
1034
1035
|
class=${_({
|
|
@@ -1039,12 +1040,12 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1039
1040
|
>
|
|
1040
1041
|
<div
|
|
1041
1042
|
class="lintje-data-table__scroller"
|
|
1042
|
-
${
|
|
1043
|
-
tabindex=${T ? 0 :
|
|
1044
|
-
role=${T ? "region" :
|
|
1045
|
-
aria-label=${T ? this.data?.caption ??
|
|
1043
|
+
${p(e.watch)}
|
|
1044
|
+
tabindex=${T ? 0 : c}
|
|
1045
|
+
role=${T ? "region" : c}
|
|
1046
|
+
aria-label=${T ? this.data?.caption ?? c : c}
|
|
1046
1047
|
>
|
|
1047
|
-
${this.fullTable(v, u, s, e, i ?
|
|
1048
|
+
${this.fullTable(v, u, s, e, i ? m : null)}
|
|
1048
1049
|
</div>
|
|
1049
1050
|
</div>
|
|
1050
1051
|
|
|
@@ -1052,12 +1053,12 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1052
1053
|
${this.mobileTable(b, d, w, i ? h : null)}
|
|
1053
1054
|
${u > 1 ? this.pager("full", this.page, u, s, o, S, (e) => {
|
|
1054
1055
|
this.page = e;
|
|
1055
|
-
}) :
|
|
1056
|
-
${d > 1 ? this.pager("mobile", this.mobilePage, d,
|
|
1056
|
+
}) : c}
|
|
1057
|
+
${d > 1 ? this.pager("mobile", this.mobilePage, d, l, o, S, (e) => {
|
|
1057
1058
|
this.mobilePage = e;
|
|
1058
|
-
}) :
|
|
1059
|
-
${r ? this.selectionBar(!0) :
|
|
1060
|
-
${C && this.columns.some((e) => e.editor) ? this.#s.renderStatus() :
|
|
1059
|
+
}) : c}
|
|
1060
|
+
${r ? this.selectionBar(!0) : c} ${this.panels(e)}
|
|
1061
|
+
${C && this.columns.some((e) => e.editor) ? this.#s.renderStatus() : c}
|
|
1061
1062
|
<span class="visually-hidden" role="status">${C ? this.liveMessage : ""}</span>
|
|
1062
1063
|
</div>`;
|
|
1063
1064
|
}
|
|
@@ -1066,8 +1067,8 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1066
1067
|
return this.filterColumns.some((e) => M(this.filterValues[e.key])) && e != null ? `${this.rows.length} van ${Y(e)}` : "";
|
|
1067
1068
|
}
|
|
1068
1069
|
toolbar(e, t) {
|
|
1069
|
-
let n = this.sortMenu(), r = this.groupToggle(), i = r ===
|
|
1070
|
-
return this.filterColumns.length === 0 && n ===
|
|
1070
|
+
let n = this.sortMenu(), r = this.groupToggle(), i = r === c ? void 0 : f`<div class="lintje-data-table__tools">${r}</div>`;
|
|
1071
|
+
return this.filterColumns.length === 0 && n === c && !i ? c : z({
|
|
1071
1072
|
columns: this.filterColumns,
|
|
1072
1073
|
values: this.filterValues,
|
|
1073
1074
|
count: t ? "" : this.filteredCount,
|
|
@@ -1082,9 +1083,9 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1082
1083
|
});
|
|
1083
1084
|
}
|
|
1084
1085
|
groupToggle() {
|
|
1085
|
-
if (!this.grouped) return
|
|
1086
|
+
if (!this.grouped) return c;
|
|
1086
1087
|
let e = this.groupsOf(this.rows).map((e) => e.key), t = new Set(this.collapsedGroups), n = e.some((e) => !t.has(e));
|
|
1087
|
-
return
|
|
1088
|
+
return f`<button
|
|
1088
1089
|
type="button"
|
|
1089
1090
|
class="lintje-button lintje-button--tertiary lintje-button--compact lintje-data-table__group-all"
|
|
1090
1091
|
@click=${() => {
|
|
@@ -1096,7 +1097,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1096
1097
|
}
|
|
1097
1098
|
sortMenu() {
|
|
1098
1099
|
let e = this.shown.filter((e) => e.sortable !== !1), [t] = this.shown, n = this.mobileMeasure;
|
|
1099
|
-
if (!e.some((e) => e !== t && e !== n)) return
|
|
1100
|
+
if (!e.some((e) => e !== t && e !== n)) return c;
|
|
1100
1101
|
let r = this.activeSort, i = [
|
|
1101
1102
|
{ heading: "Sorteren op" },
|
|
1102
1103
|
...e.map((e) => ({
|
|
@@ -1119,7 +1120,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1119
1120
|
checked: r.direction === "desc"
|
|
1120
1121
|
}
|
|
1121
1122
|
];
|
|
1122
|
-
return
|
|
1123
|
+
return f`<lintje-menu-button
|
|
1123
1124
|
class="lintje-data-table__sort-menu"
|
|
1124
1125
|
label="Sorteren"
|
|
1125
1126
|
.items=${i}
|
|
@@ -1144,14 +1145,14 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1144
1145
|
}
|
|
1145
1146
|
selectionBar(e) {
|
|
1146
1147
|
let t = this.data;
|
|
1147
|
-
return !t.selectable || !t.bulkActions || this.checkedIds.length === 0 ?
|
|
1148
|
+
return !t.selectable || !t.bulkActions || this.checkedIds.length === 0 ? c : ae(t.bulkActions, this.checkedIds.length, e, (e) => this.emit("lintje-bulk-action", {
|
|
1148
1149
|
ids: [...this.checkedIds],
|
|
1149
1150
|
action: e
|
|
1150
1151
|
}), () => this.setChecked([]));
|
|
1151
1152
|
}
|
|
1152
1153
|
panels(e) {
|
|
1153
1154
|
let t = this.panel;
|
|
1154
|
-
if (!t || t.edges !== e) return
|
|
1155
|
+
if (!t || t.edges !== e) return c;
|
|
1155
1156
|
if (t.kind === "columns") {
|
|
1156
1157
|
let e = this.columns[0];
|
|
1157
1158
|
return e ? V({
|
|
@@ -1164,11 +1165,11 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1164
1165
|
isDefault: this.columnsAreDefault,
|
|
1165
1166
|
onClose: () => this.closePanel(t),
|
|
1166
1167
|
onLeave: (e) => this.leavePanel(t, e)
|
|
1167
|
-
}) :
|
|
1168
|
+
}) : c;
|
|
1168
1169
|
}
|
|
1169
1170
|
if (t.kind === "sheet") {
|
|
1170
1171
|
let e = this.filterColumns;
|
|
1171
|
-
return
|
|
1172
|
+
return ue({
|
|
1172
1173
|
columns: e,
|
|
1173
1174
|
draft: this.filterDraft,
|
|
1174
1175
|
onDraft: (e, t) => {
|
|
@@ -1183,7 +1184,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1183
1184
|
});
|
|
1184
1185
|
}
|
|
1185
1186
|
let n = this.columns.find((e) => e.key === t.column);
|
|
1186
|
-
return n ?
|
|
1187
|
+
return n ? le({
|
|
1187
1188
|
column: n,
|
|
1188
1189
|
anchor: this.#u,
|
|
1189
1190
|
draft: this.filterDraft[n.key],
|
|
@@ -1197,57 +1198,57 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1197
1198
|
onClear: () => this.applyFilters([n.key], !0),
|
|
1198
1199
|
onClose: () => this.closePanel(t),
|
|
1199
1200
|
onLeave: (e) => this.leavePanel(t, e)
|
|
1200
|
-
}) :
|
|
1201
|
+
}) : c;
|
|
1201
1202
|
}
|
|
1202
1203
|
fullTable(e, t, n, r, i) {
|
|
1203
|
-
let a = this.data, o = this.shown, s = !!a.selectable,
|
|
1204
|
+
let a = this.data, o = this.shown, s = !!a.selectable, l = this.activeSort, u = a.rowActions?.length ? a.rowActions : null, d = this.detailColumns.length > 0, p = r === this.#n ? "modal" : "tile", m = i ? this.groupsOf(this.sortedRows).slice(0, this.page * n).reduce((e, t) => e + t.rows.length, 0) : this.page * n, h = {
|
|
1204
1205
|
ids: e.map((e) => this.rowKey(e)),
|
|
1205
1206
|
columns: o,
|
|
1206
1207
|
offset: m,
|
|
1207
|
-
copy:
|
|
1208
|
-
}, g = o.length + +!!s + +!!d + +!!this.actionColumn, _ = (e, t, n) => e.map((e, r) => this.fullRow(e, t + r, h,
|
|
1209
|
-
return
|
|
1208
|
+
copy: p
|
|
1209
|
+
}, g = o.length + +!!s + +!!d + +!!this.actionColumn, _ = (e, t, n) => e.map((e, r) => this.fullRow(e, t + r, h, p, n));
|
|
1210
|
+
return f`<table class="lintje-data-table__full">
|
|
1210
1211
|
<caption class="visually-hidden">${a.caption}</caption>
|
|
1211
1212
|
<thead>
|
|
1212
1213
|
<tr>
|
|
1213
|
-
${s ?
|
|
1214
|
+
${s ? f`<th
|
|
1214
1215
|
scope="col"
|
|
1215
1216
|
class="lintje-data-table__header-cell lintje-data-table__check-cell"
|
|
1216
1217
|
>
|
|
1217
1218
|
${this.headerCheck()}
|
|
1218
|
-
</th>` :
|
|
1219
|
-
${d ?
|
|
1219
|
+
</th>` : c}
|
|
1220
|
+
${d ? f`<th scope="col" class="lintje-data-table__header-cell lintje-data-table__detail-cell">
|
|
1220
1221
|
<span class="visually-hidden">Details</span>
|
|
1221
|
-
</th>` :
|
|
1222
|
-
${o.map((e) => this.headerCell(e,
|
|
1223
|
-
${this.actionColumn ?
|
|
1224
|
-
${u ?
|
|
1222
|
+
</th>` : c}
|
|
1223
|
+
${o.map((e) => this.headerCell(e, l, r))}
|
|
1224
|
+
${this.actionColumn ? f`<th scope="col" class="lintje-data-table__header-cell lintje-data-table__action-cell">
|
|
1225
|
+
${u ? f`<span class="visually-hidden">Acties</span>` : c}
|
|
1225
1226
|
${a.columnChooser ? B(this.panel?.kind === "columns", (e) => this.panel?.kind === "columns" ? this.closePanel() : this.openPanel({
|
|
1226
1227
|
kind: "columns",
|
|
1227
1228
|
edges: r
|
|
1228
|
-
}, e)) :
|
|
1229
|
-
</th>` :
|
|
1229
|
+
}, e)) : c}
|
|
1230
|
+
</th>` : c}
|
|
1230
1231
|
</tr>
|
|
1231
1232
|
</thead>
|
|
1232
1233
|
${i ? (() => {
|
|
1233
1234
|
let e = 0;
|
|
1234
1235
|
return i.map((t) => {
|
|
1235
1236
|
let n = !this.collapsedGroups.includes(t.key), r = e;
|
|
1236
|
-
return e += n ? t.rows.length : 0,
|
|
1237
|
+
return e += n ? t.rows.length : 0, f`<tbody class="lintje-data-table__group">
|
|
1237
1238
|
${this.groupRow(t, n)}
|
|
1238
|
-
${n ? _(t.rows, r, !0) :
|
|
1239
|
-
${n ? this.subtotalRow(t, o) :
|
|
1239
|
+
${n ? _(t.rows, r, !0) : c}
|
|
1240
|
+
${n ? this.subtotalRow(t, o) : c}
|
|
1240
1241
|
</tbody>`;
|
|
1241
1242
|
});
|
|
1242
|
-
})() :
|
|
1243
|
+
})() : f`<tbody>
|
|
1243
1244
|
${_(e, 0, !1)}
|
|
1244
1245
|
<!-- A short last page keeps the height of a full one, so the page below doesn't jump. -->
|
|
1245
|
-
${t > 1 ? Array.from({ length: n - e.length }, () =>
|
|
1246
|
+
${t > 1 ? Array.from({ length: n - e.length }, () => f`<tr
|
|
1246
1247
|
class="lintje-data-table__row lintje-data-table__row--filler"
|
|
1247
1248
|
aria-hidden="true"
|
|
1248
1249
|
>
|
|
1249
1250
|
<td class="lintje-data-table__cell" colspan=${g}></td>
|
|
1250
|
-
</tr>`) :
|
|
1251
|
+
</tr>`) : c}
|
|
1251
1252
|
</tbody>`}
|
|
1252
1253
|
${this.sizerRow(o)}
|
|
1253
1254
|
${this.totalsRow(o, a.totals, a.totalsLabel ?? "Totaal")}
|
|
@@ -1255,13 +1256,13 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1255
1256
|
}
|
|
1256
1257
|
sizerRow(e) {
|
|
1257
1258
|
let t = this.data, n = this.widestRow(e);
|
|
1258
|
-
return
|
|
1259
|
+
return f`<tbody class="lintje-data-table__sizer" aria-hidden="true">
|
|
1259
1260
|
<tr class=${_({ "lintje-data-table__row--in-group": this.grouped })}>
|
|
1260
|
-
${t.selectable ?
|
|
1261
|
-
${this.detailColumns.length > 0 ?
|
|
1261
|
+
${t.selectable ? f`<td class="lintje-data-table__cell lintje-data-table__check-cell"></td>` : c}
|
|
1262
|
+
${this.detailColumns.length > 0 ? f`<td class="lintje-data-table__cell lintje-data-table__detail-cell"></td>` : c}
|
|
1262
1263
|
${e.map((e, t) => {
|
|
1263
1264
|
let r = n[e.key] ?? null;
|
|
1264
|
-
return
|
|
1265
|
+
return f`<td
|
|
1265
1266
|
class=${_({
|
|
1266
1267
|
"lintje-data-table__cell": !0,
|
|
1267
1268
|
"lintje-data-table__name": t === 0,
|
|
@@ -1274,7 +1275,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1274
1275
|
</div>
|
|
1275
1276
|
</td>`;
|
|
1276
1277
|
})}
|
|
1277
|
-
${this.actionColumn ?
|
|
1278
|
+
${this.actionColumn ? f`<td class="lintje-data-table__cell lintje-data-table__action-cell"></td>` : c}
|
|
1278
1279
|
</tr>
|
|
1279
1280
|
</tbody>`;
|
|
1280
1281
|
}
|
|
@@ -1296,7 +1297,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1296
1297
|
}, r;
|
|
1297
1298
|
}
|
|
1298
1299
|
headerCell(e, t, n) {
|
|
1299
|
-
let r = t.key === e.key, i = this.alignsRight(e), a = !!e.filter && M(this.filterValues[e.key]), o = e.sortable === !1 ? e.header :
|
|
1300
|
+
let r = t.key === e.key, i = this.alignsRight(e), a = !!e.filter && M(this.filterValues[e.key]), o = e.sortable === !1 ? e.header : f`<button
|
|
1300
1301
|
type="button"
|
|
1301
1302
|
class="lintje-data-table__sort-button"
|
|
1302
1303
|
@click=${() => this.toggleSort(e)}
|
|
@@ -1304,7 +1305,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1304
1305
|
<span class="lintje-data-table__sort-label">${e.header}</span>
|
|
1305
1306
|
${J(r ? t.direction : null)}
|
|
1306
1307
|
</button>`;
|
|
1307
|
-
return
|
|
1308
|
+
return f`<th
|
|
1308
1309
|
scope="col"
|
|
1309
1310
|
class=${_({
|
|
1310
1311
|
"lintje-data-table__header-cell": !0,
|
|
@@ -1316,8 +1317,8 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1316
1317
|
})}
|
|
1317
1318
|
aria-sort=${r ? t.direction === "asc" ? "ascending" : "descending" : "none"}
|
|
1318
1319
|
>
|
|
1319
|
-
${e.filter ?
|
|
1320
|
-
>${o}${
|
|
1320
|
+
${e.filter ? f`<span class="lintje-data-table__header-inner"
|
|
1321
|
+
>${o}${ce(e, this.filterValues[e.key], this.panel?.kind === "filter" && this.panel.column === e.key, (t) => this.panel?.kind === "filter" && this.panel.column === e.key ? this.closePanel() : this.openPanel({
|
|
1321
1322
|
kind: "filter",
|
|
1322
1323
|
column: e.key,
|
|
1323
1324
|
edges: n
|
|
@@ -1332,34 +1333,34 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1332
1333
|
return (e.align ?? (W(e, this.rows) ? "right" : "left")) === "right";
|
|
1333
1334
|
}
|
|
1334
1335
|
fullRow(e, t, n, r, i) {
|
|
1335
|
-
let a = this.data, o = this.shown, s = !!a.selectable,
|
|
1336
|
-
return
|
|
1336
|
+
let a = this.data, o = this.shown, s = !!a.selectable, l = !!a.clickable && !s, u = a.rowActions?.length ? a.rowActions : null, d = this.detailColumns, p = this.rowKey(e), m = p === a.selectedId, h = this.checkedIds.includes(p), g = d.length > 0 && this.openRows.includes(p), v = `lintje-data-table-${r}-row-${p}`, y = o.length + +!!s + +(d.length > 0) + +!!this.actionColumn;
|
|
1337
|
+
return f`<tr
|
|
1337
1338
|
class=${_({
|
|
1338
1339
|
"lintje-data-table__row": !0,
|
|
1339
1340
|
"lintje-data-table__row--in-group": i,
|
|
1340
|
-
"is-clickable":
|
|
1341
|
+
"is-clickable": l,
|
|
1341
1342
|
"is-selected": m,
|
|
1342
1343
|
"is-checked": h,
|
|
1343
1344
|
"is-open": g
|
|
1344
1345
|
})}
|
|
1345
|
-
tabindex=${
|
|
1346
|
-
aria-selected=${
|
|
1347
|
-
@click=${
|
|
1348
|
-
@keydown=${
|
|
1346
|
+
tabindex=${l ? 0 : c}
|
|
1347
|
+
aria-selected=${l ? m : c}
|
|
1348
|
+
@click=${l ? () => this.emit("lintje-row-click", this.rowDetail(e)) : c}
|
|
1349
|
+
@keydown=${l ? (t) => this.rowKeydown(t, e) : c}
|
|
1349
1350
|
>
|
|
1350
|
-
${s ?
|
|
1351
|
-
${this.rowCheck(e,
|
|
1352
|
-
</td>` :
|
|
1353
|
-
${d.length > 0 ?
|
|
1351
|
+
${s ? f`<td class="lintje-data-table__cell lintje-data-table__check-cell">
|
|
1352
|
+
${this.rowCheck(e, p, h)}
|
|
1353
|
+
</td>` : c}
|
|
1354
|
+
${d.length > 0 ? f`<td
|
|
1354
1355
|
class="lintje-data-table__cell lintje-data-table__detail-cell"
|
|
1355
1356
|
@click=${(e) => e.stopPropagation()}
|
|
1356
1357
|
@keydown=${(e) => e.stopPropagation()}
|
|
1357
1358
|
>
|
|
1358
1359
|
${this.rowToggle(e, g, v, "lintje-data-table__detail-toggle")}
|
|
1359
|
-
</td>` :
|
|
1360
|
+
</td>` : c}
|
|
1360
1361
|
${o.map((r, i) => {
|
|
1361
1362
|
let a = r.truncate === !0, o = a ? this.truncatedCell(r, e[r.key]) : this.cell(r, e[r.key]), s = this.alignsRight(r);
|
|
1362
|
-
return r.editor ? this.editableCell(e, t, r, i === 0, s, o, n) : i === 0 ?
|
|
1363
|
+
return r.editor ? this.editableCell(e, t, r, i === 0, s, o, n) : i === 0 ? f`<th
|
|
1363
1364
|
scope="row"
|
|
1364
1365
|
class=${_({
|
|
1365
1366
|
"lintje-data-table__cell": !0,
|
|
@@ -1368,7 +1369,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1368
1369
|
})}
|
|
1369
1370
|
>
|
|
1370
1371
|
${this.opener(e, o)}
|
|
1371
|
-
</th>` :
|
|
1372
|
+
</th>` : f`<td
|
|
1372
1373
|
class=${_({
|
|
1373
1374
|
"lintje-data-table__cell": !0,
|
|
1374
1375
|
"lintje-data-table__cell--align-right": s,
|
|
@@ -1378,26 +1379,26 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1378
1379
|
${o}
|
|
1379
1380
|
</td>`;
|
|
1380
1381
|
})}
|
|
1381
|
-
${u ?
|
|
1382
|
+
${u ? f`<td
|
|
1382
1383
|
class="lintje-data-table__cell lintje-data-table__action-cell"
|
|
1383
1384
|
@click=${(e) => e.stopPropagation()}
|
|
1384
1385
|
@keydown=${(e) => e.stopPropagation()}
|
|
1385
1386
|
>
|
|
1386
|
-
${
|
|
1387
|
-
id:
|
|
1387
|
+
${j(u, this.rowDetail(e).label, (e) => this.emit("lintje-row-action", {
|
|
1388
|
+
id: p,
|
|
1388
1389
|
action: e
|
|
1389
1390
|
}))}
|
|
1390
|
-
</td>` : this.actionColumn ?
|
|
1391
|
+
</td>` : this.actionColumn ? f`<td class="lintje-data-table__cell lintje-data-table__action-cell"></td>` : c}
|
|
1391
1392
|
</tr>
|
|
1392
|
-
${d.length > 0 ?
|
|
1393
|
+
${d.length > 0 ? f`<tr class="lintje-data-table__detail" id=${v} ?hidden=${!g}>
|
|
1393
1394
|
<td class="lintje-data-table__detail-body" colspan=${y}>
|
|
1394
|
-
${g ? this.detailList(e, d, "grid") :
|
|
1395
|
+
${g ? this.detailList(e, d, "grid") : c}
|
|
1395
1396
|
</td>
|
|
1396
|
-
</tr>` :
|
|
1397
|
+
</tr>` : c}`;
|
|
1397
1398
|
}
|
|
1398
1399
|
rowToggle(e, t, n, r) {
|
|
1399
1400
|
let { id: i, label: a } = this.rowDetail(e);
|
|
1400
|
-
return
|
|
1401
|
+
return f`<button
|
|
1401
1402
|
type="button"
|
|
1402
1403
|
class=${r}
|
|
1403
1404
|
aria-label=${`Alle gegevens van ${a}`}
|
|
@@ -1413,7 +1414,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1413
1414
|
}
|
|
1414
1415
|
detailList(e, t, n) {
|
|
1415
1416
|
let r = Math.ceil(t.length / 4);
|
|
1416
|
-
return
|
|
1417
|
+
return f`<lintje-description-list
|
|
1417
1418
|
layout=${n}
|
|
1418
1419
|
.columns=${Math.ceil(t.length / r)}
|
|
1419
1420
|
.items=${t.map((t) => ({
|
|
@@ -1423,7 +1424,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1423
1424
|
></lintje-description-list>`;
|
|
1424
1425
|
}
|
|
1425
1426
|
groupRow(e, t) {
|
|
1426
|
-
let n = this.data, r = this.groupColumn, i = this.shown, a = +!!n.selectable + +(this.detailColumns.length > 0), o = n.groupTotals?.[e.key], s = e.rows.length,
|
|
1427
|
+
let n = this.data, r = this.groupColumn, i = this.shown, a = +!!n.selectable + +(this.detailColumns.length > 0), o = n.groupTotals?.[e.key], s = e.rows.length, l = f`<button
|
|
1427
1428
|
type="button"
|
|
1428
1429
|
class="lintje-data-table__group-toggle"
|
|
1429
1430
|
aria-expanded=${t ? "true" : "false"}
|
|
@@ -1436,74 +1437,74 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1436
1437
|
<span class="lintje-data-table__group-name">${this.cell(r, e.value)}</span>
|
|
1437
1438
|
<span class="lintje-data-table__group-count">${s} ${s === 1 ? "rij" : "rijen"}</span>
|
|
1438
1439
|
</button>`;
|
|
1439
|
-
return
|
|
1440
|
-
${a > 0 ?
|
|
1441
|
-
<th scope="rowgroup" class="lintje-data-table__cell lintje-data-table__group-head">${
|
|
1440
|
+
return f`<tr class="lintje-data-table__group-row">
|
|
1441
|
+
${a > 0 ? f`<td class="lintje-data-table__cell" colspan=${a}></td>` : c}
|
|
1442
|
+
<th scope="rowgroup" class="lintje-data-table__cell lintje-data-table__group-head">${l}</th>
|
|
1442
1443
|
${i.slice(1).map((e) => this.totalCell(e, t ? void 0 : o?.[e.key]))}
|
|
1443
|
-
${this.actionColumn ?
|
|
1444
|
+
${this.actionColumn ? f`<td class="lintje-data-table__cell"></td>` : c}
|
|
1444
1445
|
</tr>`;
|
|
1445
1446
|
}
|
|
1446
1447
|
subtotalRow(e, t) {
|
|
1447
1448
|
let n = this.data?.groupTotals?.[e.key];
|
|
1448
|
-
if (!n) return
|
|
1449
|
+
if (!n) return c;
|
|
1449
1450
|
let r = this.groupColumn, i = G(r, e.value) ?? "Zonder waarde";
|
|
1450
1451
|
return this.sumRow("lintje-data-table__subtotal", `Subtotaal ${i}`, t, n);
|
|
1451
1452
|
}
|
|
1452
1453
|
totalsRow(e, t, n) {
|
|
1453
|
-
return t ?
|
|
1454
|
+
return t ? f`<tfoot>${this.sumRow("lintje-data-table__total", n, e, t)}</tfoot>` : c;
|
|
1454
1455
|
}
|
|
1455
1456
|
sumRow(e, t, n, r) {
|
|
1456
1457
|
let i = +!!this.data.selectable + +(this.detailColumns.length > 0);
|
|
1457
|
-
return
|
|
1458
|
-
${i > 0 ?
|
|
1458
|
+
return f`<tr class=${e}>
|
|
1459
|
+
${i > 0 ? f`<td class="lintje-data-table__cell" colspan=${i}></td>` : c}
|
|
1459
1460
|
<th scope="row" class="lintje-data-table__cell lintje-data-table__sum-label">${t}</th>
|
|
1460
1461
|
${n.slice(1).map((e) => this.totalCell(e, r[e.key]))}
|
|
1461
|
-
${this.actionColumn ?
|
|
1462
|
+
${this.actionColumn ? f`<td class="lintje-data-table__cell"></td>` : c}
|
|
1462
1463
|
</tr>`;
|
|
1463
1464
|
}
|
|
1464
1465
|
totalCell(e, t) {
|
|
1465
1466
|
let n = t === void 0;
|
|
1466
|
-
return
|
|
1467
|
+
return f`<td
|
|
1467
1468
|
class=${_({
|
|
1468
1469
|
"lintje-data-table__cell": !0,
|
|
1469
1470
|
"lintje-data-table__cell--align-right": this.alignsRight(e)
|
|
1470
1471
|
})}
|
|
1471
1472
|
>
|
|
1472
|
-
${n ?
|
|
1473
|
+
${n ? c : this.totalContent(e, t)}
|
|
1473
1474
|
</td>`;
|
|
1474
1475
|
}
|
|
1475
1476
|
editableCell(e, t, n, r, i, a, o) {
|
|
1476
|
-
let s = this.#s,
|
|
1477
|
+
let s = this.#s, l = {
|
|
1477
1478
|
id: this.rowKey(e),
|
|
1478
1479
|
column: n.key
|
|
1479
|
-
}, u = e[n.key] ?? null, d = s.mode(
|
|
1480
|
+
}, u = e[n.key] ?? null, d = s.mode(l, u).kind, p = _({
|
|
1480
1481
|
"lintje-data-table__cell": !0,
|
|
1481
1482
|
"lintje-data-table__name": r,
|
|
1482
1483
|
"lintje-data-table__cell--align-right": i,
|
|
1483
1484
|
"lintje-data-table__cell--truncate": n.truncate === !0,
|
|
1484
1485
|
"focus-inset": !0,
|
|
1485
|
-
...s.cellClasses(
|
|
1486
|
-
}), m = s.content(
|
|
1487
|
-
s.editable(
|
|
1486
|
+
...s.cellClasses(l, u)
|
|
1487
|
+
}), m = s.content(l, n, u, a, `${n.header} van rij ${o.offset + t + 1}`, o), h = (e) => {
|
|
1488
|
+
s.editable(l, n) && s.cellKeydown(l, e);
|
|
1488
1489
|
}, g = (e) => {
|
|
1489
|
-
d === "rest" && s.editable(
|
|
1490
|
-
}, v = (e) => e.stopPropagation(), y = d === "editor" ? -1 : 0, b = O(
|
|
1491
|
-
return r ?
|
|
1490
|
+
d === "rest" && s.editable(l, n) && s.open(l, e.currentTarget);
|
|
1491
|
+
}, v = (e) => e.stopPropagation(), y = d === "editor" ? -1 : 0, b = O(l);
|
|
1492
|
+
return r ? f`<th
|
|
1492
1493
|
scope="row"
|
|
1493
|
-
class=${
|
|
1494
|
+
class=${p}
|
|
1494
1495
|
tabindex=${y}
|
|
1495
1496
|
data-cell=${b}
|
|
1496
|
-
aria-describedby=${d === "rest" ? s.hintId :
|
|
1497
|
+
aria-describedby=${d === "rest" ? s.hintId : c}
|
|
1497
1498
|
@keydown=${h}
|
|
1498
1499
|
@dblclick=${g}
|
|
1499
1500
|
@click=${v}
|
|
1500
1501
|
>
|
|
1501
1502
|
${m}
|
|
1502
|
-
</th>` :
|
|
1503
|
-
class=${
|
|
1503
|
+
</th>` : f`<td
|
|
1504
|
+
class=${p}
|
|
1504
1505
|
tabindex=${y}
|
|
1505
1506
|
data-cell=${b}
|
|
1506
|
-
aria-describedby=${d === "rest" ? s.hintId :
|
|
1507
|
+
aria-describedby=${d === "rest" ? s.hintId : c}
|
|
1507
1508
|
@keydown=${h}
|
|
1508
1509
|
@dblclick=${g}
|
|
1509
1510
|
@click=${v}
|
|
@@ -1512,10 +1513,10 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1512
1513
|
</td>`;
|
|
1513
1514
|
}
|
|
1514
1515
|
mobileTable(e, t, n, r) {
|
|
1515
|
-
let i = this.data, a = this.shown, o = !!i.selectable, s = a[0],
|
|
1516
|
-
if (!s || !
|
|
1517
|
-
let d = i.rowActions?.length ? i.rowActions : null,
|
|
1518
|
-
return
|
|
1516
|
+
let i = this.data, a = this.shown, o = !!i.selectable, s = a[0], l = this.mobileMeasure, u = this.activeSort;
|
|
1517
|
+
if (!s || !l) return f`<table class="lintje-data-table__mobile"></table>`;
|
|
1518
|
+
let d = i.rowActions?.length ? i.rowActions : null, p = [...a.filter((e) => e !== s && e !== l), ...this.detailColumns], m = !!d || p.length > 0, h = m ? 3 : 2, g = u.key === l.key;
|
|
1519
|
+
return f`<table class="lintje-data-table__mobile">
|
|
1519
1520
|
<caption class="visually-hidden">${i.caption}</caption>
|
|
1520
1521
|
<thead>
|
|
1521
1522
|
<tr>
|
|
@@ -1523,7 +1524,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1523
1524
|
scope="col"
|
|
1524
1525
|
class="lintje-data-table__header-cell lintje-data-table__header-cell--mobile"
|
|
1525
1526
|
>
|
|
1526
|
-
${o ?
|
|
1527
|
+
${o ? f`<span class="lintje-data-table__mobile-check"
|
|
1527
1528
|
>${this.headerCheck()}${s.header}</span
|
|
1528
1529
|
>` : s.header}
|
|
1529
1530
|
</th>
|
|
@@ -1533,65 +1534,65 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1533
1534
|
"lintje-data-table__header-cell": !0,
|
|
1534
1535
|
"lintje-data-table__header-cell--mobile": !0,
|
|
1535
1536
|
"lintje-data-table__header-cell--align-right": !0,
|
|
1536
|
-
"lintje-data-table__header-cell--sortable":
|
|
1537
|
+
"lintje-data-table__header-cell--sortable": l.sortable !== !1,
|
|
1537
1538
|
"is-active": g
|
|
1538
1539
|
})}
|
|
1539
|
-
aria-sort=${
|
|
1540
|
+
aria-sort=${l.sortable === !1 ? c : g ? u.direction === "asc" ? "ascending" : "descending" : "none"}
|
|
1540
1541
|
>
|
|
1541
|
-
${
|
|
1542
|
+
${l.sortable === !1 ? l.header : f`<button
|
|
1542
1543
|
type="button"
|
|
1543
1544
|
class="lintje-data-table__sort-button"
|
|
1544
|
-
@click=${() => this.toggleSort(
|
|
1545
|
+
@click=${() => this.toggleSort(l)}
|
|
1545
1546
|
>
|
|
1546
|
-
<span class="lintje-data-table__sort-label">${
|
|
1547
|
+
<span class="lintje-data-table__sort-label">${l.header}</span>
|
|
1547
1548
|
${J(g ? u.direction : null)}
|
|
1548
1549
|
</button>`}
|
|
1549
1550
|
</th>
|
|
1550
|
-
${m ?
|
|
1551
|
+
${m ? f`<th
|
|
1551
1552
|
scope="col"
|
|
1552
1553
|
class="lintje-data-table__header-cell lintje-data-table__header-cell--mobile lintje-data-table__mobile-cell--actions"
|
|
1553
1554
|
>
|
|
1554
1555
|
<span class="visually-hidden">${d ? "Acties" : "Meer gegevens"}</span>
|
|
1555
|
-
</th>` :
|
|
1556
|
+
</th>` : c}
|
|
1556
1557
|
</tr>
|
|
1557
1558
|
</thead>
|
|
1558
1559
|
${r ? r.map((e) => {
|
|
1559
1560
|
let t = !this.collapsedGroups.includes(e.key);
|
|
1560
|
-
return
|
|
1561
|
-
${this.mobileGroupRow(e, t,
|
|
1562
|
-
${t ? e.rows.map((e) => this.mobileRow(e, n,
|
|
1563
|
-
${t && i.groupTotals?.[e.key] ? this.mobileSumRow("lintje-data-table__subtotal", `Subtotaal ${G(this.groupColumn, e.value) ?? "Zonder waarde"}`, i.groupTotals[e.key]?.[
|
|
1561
|
+
return f`<tbody class="lintje-data-table__group">
|
|
1562
|
+
${this.mobileGroupRow(e, t, l, h)}
|
|
1563
|
+
${t ? e.rows.map((e) => this.mobileRow(e, n, p, m, h, l)) : c}
|
|
1564
|
+
${t && i.groupTotals?.[e.key] ? this.mobileSumRow("lintje-data-table__subtotal", `Subtotaal ${G(this.groupColumn, e.value) ?? "Zonder waarde"}`, i.groupTotals[e.key]?.[l.key], l, h) : c}
|
|
1564
1565
|
</tbody>`;
|
|
1565
|
-
}) :
|
|
1566
|
-
${e.map((e) => this.mobileRow(e, n,
|
|
1566
|
+
}) : f`<tbody>
|
|
1567
|
+
${e.map((e) => this.mobileRow(e, n, p, m, h, l))}
|
|
1567
1568
|
<!-- Empty rows with the same two lines per cell keep a short last page as tall as a full one. -->
|
|
1568
|
-
${t > 1 ? Array.from({ length: H - e.length }, () =>
|
|
1569
|
+
${t > 1 ? Array.from({ length: H - e.length }, () => f`<tr
|
|
1569
1570
|
class="lintje-data-table__mobile-row lintje-data-table__mobile-row--filler"
|
|
1570
1571
|
aria-hidden="true"
|
|
1571
1572
|
>
|
|
1572
1573
|
<td class="lintje-data-table__mobile-cell">
|
|
1573
1574
|
<span class="lintje-data-table__mobile-name"> </span>
|
|
1574
|
-
${this.hasSubline ?
|
|
1575
|
+
${this.hasSubline ? f`<span class="lintje-data-table__mobile-sub"> </span>` : c}
|
|
1575
1576
|
</td>
|
|
1576
1577
|
<td class="lintje-data-table__mobile-cell" colspan=${h - 1}>
|
|
1577
1578
|
<span class="lintje-data-table__mobile-measure"> </span>
|
|
1578
|
-
${
|
|
1579
|
+
${l.threshold ? f`<span class="lintje-data-table__mobile-status"> </span>` : c}
|
|
1579
1580
|
</td>
|
|
1580
|
-
</tr>`) :
|
|
1581
|
+
</tr>`) : c}
|
|
1581
1582
|
</tbody>`}
|
|
1582
|
-
${i.totals ?
|
|
1583
|
-
${this.mobileSumRow("lintje-data-table__total", i.totalsLabel ?? "Totaal", i.totals[
|
|
1584
|
-
</tfoot>` :
|
|
1583
|
+
${i.totals ? f`<tfoot>
|
|
1584
|
+
${this.mobileSumRow("lintje-data-table__total", i.totalsLabel ?? "Totaal", i.totals[l.key], l, h)}
|
|
1585
|
+
</tfoot>` : c}
|
|
1585
1586
|
</table>`;
|
|
1586
1587
|
}
|
|
1587
1588
|
mobileRow(e, t, n, r, i, a) {
|
|
1588
|
-
let o = this.data, s = this.shown[0],
|
|
1589
|
+
let o = this.data, s = this.shown[0], l = !!o.selectable, u = !!o.clickable && !l, d = o.rowActions?.length ? o.rowActions : null, p = a.format === "change-compact" ? {
|
|
1589
1590
|
...a,
|
|
1590
1591
|
format: "change"
|
|
1591
|
-
} : a, m = this.rowKey(e), h = this.rowDetail(e), g = this.mobileStatus(a, e), v = n.length > 0 && this.openRows.includes(m), y = `lintje-data-table-${t}-detail-${m}`, b =
|
|
1592
|
+
} : a, m = this.rowKey(e), h = this.rowDetail(e), g = this.mobileStatus(a, e), v = n.length > 0 && this.openRows.includes(m), y = `lintje-data-table-${t}-detail-${m}`, b = f`<span class="lintje-data-table__mobile-name"
|
|
1592
1593
|
>${this.opener(e, this.cell(s, e[s.key]))}</span
|
|
1593
1594
|
>${this.subline(e)}`, x = m === o.selectedId, S = this.checkedIds.includes(m);
|
|
1594
|
-
return
|
|
1595
|
+
return f`<tr
|
|
1595
1596
|
class=${_({
|
|
1596
1597
|
"lintje-data-table__mobile-row": !0,
|
|
1597
1598
|
"is-clickable": u,
|
|
@@ -1599,49 +1600,49 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1599
1600
|
"is-checked": S,
|
|
1600
1601
|
"is-open": v
|
|
1601
1602
|
})}
|
|
1602
|
-
tabindex=${u ? 0 :
|
|
1603
|
-
aria-selected=${u ? x :
|
|
1604
|
-
@click=${u ? () => this.emit("lintje-row-click", h) :
|
|
1605
|
-
@keydown=${u ? (t) => this.rowKeydown(t, e) :
|
|
1603
|
+
tabindex=${u ? 0 : c}
|
|
1604
|
+
aria-selected=${u ? x : c}
|
|
1605
|
+
@click=${u ? () => this.emit("lintje-row-click", h) : c}
|
|
1606
|
+
@keydown=${u ? (t) => this.rowKeydown(t, e) : c}
|
|
1606
1607
|
>
|
|
1607
1608
|
<th scope="row" class="lintje-data-table__mobile-cell">
|
|
1608
|
-
${
|
|
1609
|
+
${l ? f`<span class="lintje-data-table__mobile-check">
|
|
1609
1610
|
${this.rowCheck(e, m, S)}
|
|
1610
1611
|
<span class="lintje-data-table__mobile-identity">${b}</span>
|
|
1611
1612
|
</span>` : b}
|
|
1612
1613
|
</th>
|
|
1613
1614
|
<td class="lintje-data-table__mobile-cell lintje-data-table__mobile-cell--align-right">
|
|
1614
1615
|
<span class="lintje-data-table__mobile-measure"
|
|
1615
|
-
>${this.cell(
|
|
1616
|
+
>${this.cell(p, e[a.key])}</span
|
|
1616
1617
|
>
|
|
1617
|
-
${g ?
|
|
1618
|
+
${g ? f`<span
|
|
1618
1619
|
class="lintje-data-table__mobile-status lintje-data-table__mobile-status--${g.tone}"
|
|
1619
1620
|
>${g.label}</span
|
|
1620
|
-
>` :
|
|
1621
|
+
>` : c}
|
|
1621
1622
|
</td>
|
|
1622
|
-
${r ?
|
|
1623
|
+
${r ? f`<td
|
|
1623
1624
|
class="lintje-data-table__mobile-cell lintje-data-table__mobile-cell--actions"
|
|
1624
1625
|
@click=${(e) => e.stopPropagation()}
|
|
1625
1626
|
@keydown=${(e) => e.stopPropagation()}
|
|
1626
1627
|
>
|
|
1627
1628
|
<span class="lintje-data-table__mobile-actions">
|
|
1628
|
-
${n.length > 0 ? this.rowToggle(e, v, y, "lintje-data-table__mobile-toggle") :
|
|
1629
|
-
${d ?
|
|
1629
|
+
${n.length > 0 ? this.rowToggle(e, v, y, "lintje-data-table__mobile-toggle") : c}
|
|
1630
|
+
${d ? j(d, h.label, (e) => this.emit("lintje-row-action", {
|
|
1630
1631
|
id: m,
|
|
1631
1632
|
action: e
|
|
1632
|
-
})) :
|
|
1633
|
+
})) : c}
|
|
1633
1634
|
</span>
|
|
1634
|
-
</td>` :
|
|
1635
|
+
</td>` : c}
|
|
1635
1636
|
</tr>
|
|
1636
|
-
${n.length > 0 ?
|
|
1637
|
+
${n.length > 0 ? f`<tr class="lintje-data-table__mobile-detail" id=${y} ?hidden=${!v}>
|
|
1637
1638
|
<td class="lintje-data-table__mobile-cell" colspan=${i}>
|
|
1638
|
-
${v ? this.detailList(e, n, "row") :
|
|
1639
|
+
${v ? this.detailList(e, n, "row") : c}
|
|
1639
1640
|
</td>
|
|
1640
|
-
</tr>` :
|
|
1641
|
+
</tr>` : c}`;
|
|
1641
1642
|
}
|
|
1642
1643
|
mobileGroupRow(e, t, n, r) {
|
|
1643
1644
|
let i = this.groupColumn, a = this.data?.groupTotals?.[e.key]?.[n.key], o = e.rows.length;
|
|
1644
|
-
return
|
|
1645
|
+
return f`<tr class="lintje-data-table__group-row">
|
|
1645
1646
|
<th scope="rowgroup" class="lintje-data-table__mobile-cell lintje-data-table__group-head">
|
|
1646
1647
|
<button
|
|
1647
1648
|
type="button"
|
|
@@ -1658,18 +1659,18 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1658
1659
|
</button>
|
|
1659
1660
|
</th>
|
|
1660
1661
|
<td class="lintje-data-table__mobile-cell lintje-data-table__mobile-cell--align-right">
|
|
1661
|
-
${!t && a !== void 0 ?
|
|
1662
|
+
${!t && a !== void 0 ? f`<span class="lintje-data-table__mobile-measure">${this.totalContent(n, a)}</span>` : c}
|
|
1662
1663
|
</td>
|
|
1663
|
-
${r > 2 ?
|
|
1664
|
+
${r > 2 ? f`<td class="lintje-data-table__mobile-cell"></td>` : c}
|
|
1664
1665
|
</tr>`;
|
|
1665
1666
|
}
|
|
1666
1667
|
mobileSumRow(e, t, n, r, i) {
|
|
1667
|
-
return
|
|
1668
|
+
return f`<tr class=${e}>
|
|
1668
1669
|
<th scope="row" class="lintje-data-table__mobile-cell lintje-data-table__sum-label">${t}</th>
|
|
1669
1670
|
<td class="lintje-data-table__mobile-cell lintje-data-table__mobile-cell--align-right">
|
|
1670
|
-
${n === void 0 ?
|
|
1671
|
+
${n === void 0 ? c : f`<span class="lintje-data-table__mobile-measure">${this.totalContent(r, n)}</span>`}
|
|
1671
1672
|
</td>
|
|
1672
|
-
${i > 2 ?
|
|
1673
|
+
${i > 2 ? f`<td class="lintje-data-table__mobile-cell"></td>` : c}
|
|
1673
1674
|
</tr>`;
|
|
1674
1675
|
}
|
|
1675
1676
|
totalContent(e, t) {
|
|
@@ -1677,14 +1678,14 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1677
1678
|
...e,
|
|
1678
1679
|
threshold: void 0
|
|
1679
1680
|
};
|
|
1680
|
-
return
|
|
1681
|
+
return f`${r ? f`<span class="lintje-data-table__how">${r} </span>` : c}${this.cell(i, n)}`;
|
|
1681
1682
|
}
|
|
1682
1683
|
rowKeydown(e, t) {
|
|
1683
1684
|
e.target === e.currentTarget && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), this.emit("lintje-row-click", this.rowDetail(t)));
|
|
1684
1685
|
}
|
|
1685
1686
|
pager(e, t, n, r, i, a, o) {
|
|
1686
1687
|
let s = this.data?.caption, c = this.filteredCount ? this.data?.totalRows : void 0;
|
|
1687
|
-
return
|
|
1688
|
+
return f`<lintje-pagination
|
|
1688
1689
|
class="lintje-data-table__pagination lintje-data-table__pagination--${e}"
|
|
1689
1690
|
label=${s ? `Paginering ${s}` : "Paginering"}
|
|
1690
1691
|
.page=${t + 1}
|
|
@@ -1700,7 +1701,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1700
1701
|
></lintje-pagination>`;
|
|
1701
1702
|
}
|
|
1702
1703
|
opener(e, t) {
|
|
1703
|
-
return this.data?.openable ?
|
|
1704
|
+
return this.data?.openable ? f`<button
|
|
1704
1705
|
type="button"
|
|
1705
1706
|
class="lintje-data-table__open"
|
|
1706
1707
|
@click=${(t) => {
|
|
@@ -1711,10 +1712,10 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1711
1712
|
</button>` : t;
|
|
1712
1713
|
}
|
|
1713
1714
|
cell(e, t) {
|
|
1714
|
-
if (t === 0 && e.zeroText != null) return
|
|
1715
|
+
if (t === 0 && e.zeroText != null) return f`<span class="lintje-data-table__muted">${e.zeroText}</span>`;
|
|
1715
1716
|
if (e.format === "label" && t != null) {
|
|
1716
1717
|
let n = e.labels?.[String(t)];
|
|
1717
|
-
return n ?
|
|
1718
|
+
return n ? m({
|
|
1718
1719
|
value: n.label,
|
|
1719
1720
|
tone: n.tone,
|
|
1720
1721
|
icon: n.icon,
|
|
@@ -1723,34 +1724,34 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1723
1724
|
}
|
|
1724
1725
|
if (e.format === "status" && t != null) {
|
|
1725
1726
|
let n = he(e, String(t));
|
|
1726
|
-
if (n) return
|
|
1727
|
+
if (n) return f`<lintje-status-dot
|
|
1727
1728
|
tone=${n}
|
|
1728
|
-
label=${e.status?.labels?.[String(t)] ??
|
|
1729
|
+
label=${e.status?.labels?.[String(t)] ?? c}
|
|
1729
1730
|
></lintje-status-dot>`;
|
|
1730
1731
|
}
|
|
1731
1732
|
let n = G(e, t);
|
|
1732
1733
|
if (n == null) return Z;
|
|
1733
1734
|
if ((e.format === "change" || e.format === "change-compact") && typeof t == "number") {
|
|
1734
1735
|
let r = t === 0 ? "flat" : t > 0 ? "up" : "down";
|
|
1735
|
-
return e.format === "change-compact" ?
|
|
1736
|
+
return e.format === "change-compact" ? f`<span
|
|
1736
1737
|
class="lintje-data-table__change lintje-data-table__change--${r}"
|
|
1737
1738
|
aria-hidden="true"
|
|
1738
1739
|
>${t > 0 ? "▲" : t < 0 ? "▼" : "●"}</span
|
|
1739
|
-
><span class="visually-hidden">${n}</span>` :
|
|
1740
|
+
><span class="visually-hidden">${n}</span>` : f`<span class="lintje-data-table__change lintje-data-table__change--${r}">${n}</span>`;
|
|
1740
1741
|
}
|
|
1741
1742
|
let r = K(e, t);
|
|
1742
1743
|
if (!r) return n;
|
|
1743
|
-
let i = r.tone === "good" ?
|
|
1744
|
+
let i = r.tone === "good" ? c : v(r.tone === "caution" ? "functioneel-waarschuwing" : "functioneel-foutmelding", {
|
|
1744
1745
|
size: 14,
|
|
1745
1746
|
className: "lintje-threshold-cell__icon"
|
|
1746
1747
|
});
|
|
1747
|
-
return
|
|
1748
|
+
return f`<span class="lintje-threshold-cell lintje-threshold-cell--${r.tone}"
|
|
1748
1749
|
>${i}${n}<span class="visually-hidden"> · ${r.label}</span></span
|
|
1749
1750
|
>`;
|
|
1750
1751
|
}
|
|
1751
1752
|
truncatedCell(e, t) {
|
|
1752
1753
|
let n = q(e, t);
|
|
1753
|
-
return n == null ? Z :
|
|
1754
|
+
return n == null ? Z : f`<span class="lintje-data-table__cell-text" aria-hidden="true" title=${n}
|
|
1754
1755
|
>${this.cell(e, t)}</span
|
|
1755
1756
|
><span class="visually-hidden">${n}</span>`;
|
|
1756
1757
|
}
|
|
@@ -1765,7 +1766,7 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1765
1766
|
return t ? n = t.replace(/\{(\w+)\}/g, (t, n) => {
|
|
1766
1767
|
let r = this.columns.find((e) => e.key === n), i = e[n];
|
|
1767
1768
|
return (r ? G(r, i) : i == null ? null : String(i)) ?? "—";
|
|
1768
|
-
}) : this.sublineColumns.length > 0 && (n = this.sublineColumns.map((t) => G(t, e[t.key]) ?? "—").join(" · ")), n == null ?
|
|
1769
|
+
}) : this.sublineColumns.length > 0 && (n = this.sublineColumns.map((t) => G(t, e[t.key]) ?? "—").join(" · ")), n == null ? c : f`<span class="lintje-data-table__mobile-sub">${n}</span>`;
|
|
1769
1770
|
}
|
|
1770
1771
|
mobileStatus(e, t) {
|
|
1771
1772
|
if (!e.threshold) return null;
|
|
@@ -1777,21 +1778,21 @@ var Z = p`<span aria-hidden="true" class="lintje-data-table__muted">—</span
|
|
|
1777
1778
|
}
|
|
1778
1779
|
headerCheck() {
|
|
1779
1780
|
let e = this.uncheckable, t = this.rows.filter((t) => !e.has(this.rowKey(t))), n = new Set(this.checkedIds), r = t.filter((e) => n.has(this.rowKey(e))).length;
|
|
1780
|
-
return this.checkbox(
|
|
1781
|
+
return this.checkbox(f`<span class="visually-hidden">Alles selecteren</span>`, t.length > 0 && r === t.length, r > 0, (e) => this.setChecked(e ? t.map((e) => this.rowKey(e)) : []));
|
|
1781
1782
|
}
|
|
1782
1783
|
rowCheck(e, t, n) {
|
|
1783
1784
|
let r = this.columns[0], i = r ? this.sortValue(r, e) : t;
|
|
1784
|
-
return this.checkbox(
|
|
1785
|
+
return this.checkbox(f`<span class="visually-hidden">${`${i} selecteren`}</span>`, n, !1, (e) => {
|
|
1785
1786
|
let n = this.checkedIds.filter((e) => e !== t);
|
|
1786
1787
|
if (e && this.#f && this.data?.bulkActions) {
|
|
1787
1788
|
let e = this.uncheckable, n = this.sortedRows.map((e) => this.rowKey(e)).filter((t) => !e.has(t));
|
|
1788
|
-
this.setChecked(
|
|
1789
|
+
this.setChecked(A(this.checkedIds, ie(n, this.#d, t)));
|
|
1789
1790
|
} else this.setChecked(e ? [...n, t] : n);
|
|
1790
1791
|
this.#d = t;
|
|
1791
1792
|
}, this.uncheckable.has(t));
|
|
1792
1793
|
}
|
|
1793
1794
|
checkbox(e, t, n, r, i = !1) {
|
|
1794
|
-
return
|
|
1795
|
+
return f`<label class="lintje-choice${i ? " is-disabled" : ""}">
|
|
1795
1796
|
<input
|
|
1796
1797
|
type="checkbox"
|
|
1797
1798
|
class="lintje-choice__input"
|