lintje 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist-elements/actions.js +1 -1
- package/dist-elements/chunks/{base-Bg-IFOPG.js → base-DRGvkF-r.js} +484 -309
- package/dist-elements/chunks/{controls-B1455oPG.js → controls-_4ac1Lpz.js} +7 -1
- package/dist-elements/chunks/{date-format-mHtZyBys.js → date-format-DxP9yfDp.js} +1 -1
- package/dist-elements/chunks/dialog-B7aRBtjy.js +28 -0
- package/dist-elements/chunks/{disclosure-BXTX04gM.js → disclosure-D39vAR5q.js} +1 -1
- package/dist-elements/chunks/{disclosure-CMXhX-Vb.js → disclosure-DirPLy2E.js} +6 -6
- package/dist-elements/chunks/download-C68kcwPj.js +206 -0
- package/dist-elements/chunks/{focus-trap-9BnE-xWv.js → focus-trap-Dv8zu64A.js} +1 -1
- package/dist-elements/chunks/input-BGMLam-O.js +195 -0
- package/dist-elements/chunks/input-lQTmOMOz.js +4 -0
- package/dist-elements/chunks/{player-DXOZEyEy.js → player-BApadXr8.js} +27 -27
- package/dist-elements/chunks/{sentence-BI3lwEuT.js → sentence-0wO85ZdJ.js} +3 -3
- package/dist-elements/chunks/{stagger-qGD3wmhg.js → stagger-BB_gcxBI.js} +88 -74
- package/dist-elements/content.js +1 -0
- package/dist-elements/core.js +1 -1
- package/dist-elements/custom-elements.json +8858 -7715
- package/dist-elements/data-types.json +6900 -0
- package/dist-elements/feedback.js +2 -1
- package/dist-elements/frame.js +0 -2
- package/dist-elements/guides/dashboard.md +8 -0
- package/dist-elements/guides/events.md +4 -5
- package/dist-elements/guides/loading.md +10 -9
- package/dist-elements/guides/page-contents.md +110 -0
- package/dist-elements/guides/start.md +12 -0
- package/dist-elements/inputs.js +3 -1
- package/dist-elements/layout.js +1 -1
- package/dist-elements/lintje.js +8562 -7138
- package/dist-elements/overlays.js +2 -2
- package/dist-elements/skills/lintje/SKILL.md +1 -1
- package/dist-elements/tables.js +1 -1
- package/dist-elements/tag/activity-log.js +15 -15
- package/dist-elements/tag/ai-label.js +10 -10
- package/dist-elements/tag/announcement.js +36 -76
- package/dist-elements/tag/app-search.js +49 -49
- package/dist-elements/tag/audio-player.js +57 -57
- package/dist-elements/tag/badge.d.ts +1 -1
- package/dist-elements/tag/badge.js +1 -1
- package/dist-elements/tag/breadcrumbs.js +15 -15
- package/dist-elements/tag/button.d.ts +1 -1
- package/dist-elements/tag/button.js +1 -1
- package/dist-elements/tag/card-list.js +12 -12
- package/dist-elements/tag/card.js +39 -44
- package/dist-elements/tag/chart.js +1357 -787
- package/dist-elements/tag/chat-answer.js +49 -49
- package/dist-elements/tag/chat-composer.js +75 -71
- package/dist-elements/tag/chat-message.js +8 -8
- package/dist-elements/tag/chat-strip.js +22 -22
- package/dist-elements/tag/chat-suggestions.js +12 -12
- package/dist-elements/tag/chat.js +56 -56
- package/dist-elements/tag/checkbox-group.d.ts +1 -0
- package/dist-elements/tag/checkbox-group.js +60 -0
- package/dist-elements/tag/checkbox.js +9 -8
- package/dist-elements/tag/code.js +9 -9
- package/dist-elements/tag/combobox.js +19 -18
- package/dist-elements/tag/conflict-alert.js +12 -12
- package/dist-elements/tag/copy-button.js +14 -14
- package/dist-elements/tag/data-table.js +880 -532
- package/dist-elements/tag/date-input.js +30 -29
- package/dist-elements/tag/date-range.js +39 -38
- package/dist-elements/tag/description-list.js +29 -32
- package/dist-elements/tag/dialog.d.ts +1 -0
- package/dist-elements/tag/dialog.js +144 -0
- package/dist-elements/tag/document-viewer.js +23 -23
- package/dist-elements/tag/drawer.js +28 -32
- package/dist-elements/tag/empty-state.js +19 -30
- package/dist-elements/tag/error-page.d.ts +1 -0
- package/dist-elements/tag/error-page.js +109 -0
- package/dist-elements/tag/error-summary.js +10 -10
- package/dist-elements/tag/expander.js +8 -8
- package/dist-elements/tag/explainer.js +11 -11
- package/dist-elements/tag/field.js +5 -5
- package/dist-elements/tag/file-upload.js +35 -34
- package/dist-elements/tag/filter-bar.js +56 -56
- package/dist-elements/tag/filter-sheet.js +11 -11
- package/dist-elements/tag/filter-zone.js +31 -31
- package/dist-elements/tag/find.d.ts +1 -0
- package/dist-elements/tag/find.js +128 -0
- package/dist-elements/tag/footer.js +21 -21
- package/dist-elements/tag/form-actions.js +29 -25
- package/dist-elements/tag/form-section.js +6 -6
- package/dist-elements/tag/form.js +12 -12
- package/dist-elements/tag/gallery.js +14 -14
- package/dist-elements/tag/grid-item.d.ts +1 -1
- package/dist-elements/tag/grid-item.js +1 -1
- package/dist-elements/tag/grid.d.ts +1 -1
- package/dist-elements/tag/grid.js +1 -1
- package/dist-elements/tag/hero.js +12 -12
- package/dist-elements/tag/highlight.js +5 -5
- package/dist-elements/tag/icon-button.d.ts +1 -1
- package/dist-elements/tag/icon-button.js +1 -1
- package/dist-elements/tag/icon.d.ts +1 -1
- package/dist-elements/tag/icon.js +1 -1
- package/dist-elements/tag/job-list.js +22 -44
- package/dist-elements/tag/kpi-row.js +12 -10
- package/dist-elements/tag/kpi.js +149 -140
- package/dist-elements/tag/level-meter.js +11 -11
- package/dist-elements/tag/list.js +55 -55
- package/dist-elements/tag/logo.js +30 -30
- package/dist-elements/tag/map.js +702 -671
- package/dist-elements/tag/menu-button.js +70 -69
- package/dist-elements/tag/modal.js +28 -37
- package/dist-elements/tag/multiselect.js +35 -34
- package/dist-elements/tag/note.js +5 -5
- package/dist-elements/tag/notifications.js +36 -36
- package/dist-elements/tag/number-input.js +13 -12
- package/dist-elements/tag/page-header.js +140 -37
- package/dist-elements/tag/pagination.js +54 -49
- package/dist-elements/tag/popover.d.ts +1 -1
- package/dist-elements/tag/popover.js +1 -1
- package/dist-elements/tag/progress-bar.d.ts +1 -1
- package/dist-elements/tag/progress-bar.js +1 -1
- package/dist-elements/tag/prose.js +6 -6
- package/dist-elements/tag/qr-code.js +7 -7
- package/dist-elements/tag/radio-group.js +13 -12
- package/dist-elements/tag/range.js +23 -22
- package/dist-elements/tag/recording-status.js +14 -14
- package/dist-elements/tag/repeater.js +10 -10
- package/dist-elements/tag/segmented.js +14 -13
- package/dist-elements/tag/select.js +11 -10
- package/dist-elements/tag/shell.js +356 -339
- package/dist-elements/tag/skeleton.d.ts +1 -1
- package/dist-elements/tag/skeleton.js +1 -1
- package/dist-elements/tag/slot-picker.js +16 -15
- package/dist-elements/tag/sortable-list.js +14 -14
- package/dist-elements/tag/spinner.d.ts +1 -1
- package/dist-elements/tag/spinner.js +1 -1
- package/dist-elements/tag/split-pane.js +12 -12
- package/dist-elements/tag/status-dot.d.ts +1 -1
- package/dist-elements/tag/status-dot.js +1 -1
- package/dist-elements/tag/stepper.js +21 -21
- package/dist-elements/tag/streaming-text.js +13 -13
- package/dist-elements/tag/sub-nav.js +39 -38
- package/dist-elements/tag/tabs.js +38 -38
- package/dist-elements/tag/tag-input.js +20 -19
- package/dist-elements/tag/text-editor.js +25 -24
- package/dist-elements/tag/text-input.js +15 -14
- package/dist-elements/tag/textarea.js +15 -14
- package/dist-elements/tag/tile.d.ts +1 -1
- package/dist-elements/tag/tile.js +1 -1
- package/dist-elements/tag/time-input.js +20 -19
- package/dist-elements/tag/toast.js +32 -23
- package/dist-elements/tag/toggle.js +9 -8
- package/dist-elements/tag/toggletip.js +27 -27
- package/dist-elements/tag/token-value.d.ts +1 -0
- package/dist-elements/tag/token-value.js +75 -0
- package/dist-elements/tag/tooltip.d.ts +1 -1
- package/dist-elements/tag/tooltip.js +1 -1
- package/dist-elements/tag/transcript.js +48 -48
- package/dist-elements/tag/translator.js +13 -13
- package/dist-elements/tag/tree-view.js +13 -13
- package/dist-elements/tag/user-menu.js +37 -37
- package/dist-elements/tag/video-player.js +21 -21
- package/dist-elements/tokens.css +120 -96
- package/dist-elements/tokens.json +1244 -0
- package/dist-elements/types/bundle/actions.d.ts +3 -3
- package/dist-elements/types/bundle/content.d.ts +1 -0
- package/dist-elements/types/bundle/feedback.d.ts +6 -5
- package/dist-elements/types/bundle/frame.d.ts +0 -2
- package/dist-elements/types/bundle/index.d.ts +0 -10
- package/dist-elements/types/bundle/inputs.d.ts +2 -0
- package/dist-elements/types/bundle/layout.d.ts +3 -3
- package/dist-elements/types/bundle/overlays.d.ts +3 -3
- package/dist-elements/types/categories.d.ts +4 -0
- package/dist-elements/types/{primitives → components/actions}/button/button.d.ts +13 -10
- package/dist-elements/types/components/actions/copy-button/copy-button.d.ts +8 -9
- package/dist-elements/types/{icons → components/actions}/icon/icon.d.ts +4 -5
- package/dist-elements/types/{primitives → components/actions}/icon-button/icon-button.d.ts +8 -6
- package/dist-elements/types/components/actions/menu-button/menu-button.d.ts +16 -18
- package/dist-elements/types/components/actions/qr-code/qr-code.d.ts +10 -10
- package/dist-elements/types/components/charts/chart/chart.d.ts +6 -5
- package/dist-elements/types/components/charts/explainer/explainer.d.ts +1 -1
- package/dist-elements/types/components/charts/kpi/kpi.d.ts +19 -11
- package/dist-elements/types/components/charts/kpi-row/kpi-row.d.ts +2 -8
- package/dist-elements/types/components/charts/note/note.d.ts +2 -2
- package/dist-elements/types/components/chat/chat/chat.d.ts +9 -11
- package/dist-elements/types/components/chat/chat-answer/chat-answer.d.ts +10 -11
- package/dist-elements/types/components/chat/chat-composer/chat-composer.d.ts +10 -12
- package/dist-elements/types/components/chat/chat-message/chat-message.d.ts +7 -8
- package/dist-elements/types/components/chat/chat-strip/chat-strip.d.ts +5 -5
- package/dist-elements/types/components/chat/chat-suggestions/chat-suggestions.d.ts +9 -10
- package/dist-elements/types/components/content/audio-player/audio-player.d.ts +15 -17
- package/dist-elements/types/components/content/code/code.d.ts +3 -4
- package/dist-elements/types/components/content/document-viewer/document-viewer.d.ts +10 -11
- package/dist-elements/types/components/content/gallery/gallery.d.ts +5 -4
- package/dist-elements/types/components/content/highlight/highlight.d.ts +5 -4
- package/dist-elements/types/components/content/prose/prose.d.ts +3 -4
- package/dist-elements/types/components/content/token-value/token-value.d.ts +42 -0
- package/dist-elements/types/components/content/transcript/transcript.d.ts +15 -28
- package/dist-elements/types/components/content/translator/translator.d.ts +12 -16
- package/dist-elements/types/components/content/video-player/video-player.d.ts +12 -14
- package/dist-elements/types/components/feedback/ai-label/ai-label.d.ts +3 -4
- package/dist-elements/types/components/feedback/announcement/announcement.d.ts +5 -9
- package/dist-elements/types/{primitives → components/feedback}/badge/badge.d.ts +10 -6
- package/dist-elements/types/components/feedback/conflict-alert/conflict-alert.d.ts +4 -5
- package/dist-elements/types/components/feedback/empty-state/empty-state.d.ts +5 -8
- package/dist-elements/types/components/feedback/error-page/error-page.d.ts +52 -0
- package/dist-elements/types/components/feedback/job-list/job-list.d.ts +9 -12
- package/dist-elements/types/components/feedback/level-meter/level-meter.d.ts +4 -6
- package/dist-elements/types/{primitives → components/feedback}/progress-bar/progress-bar.d.ts +9 -7
- package/dist-elements/types/components/feedback/recording-status/recording-status.d.ts +5 -6
- package/dist-elements/types/{primitives → components/feedback}/skeleton/skeleton.d.ts +2 -2
- package/dist-elements/types/{primitives → components/feedback}/spinner/spinner.d.ts +2 -3
- package/dist-elements/types/{primitives → components/feedback}/status-dot/status-dot.d.ts +5 -6
- package/dist-elements/types/components/feedback/streaming-text/streaming-text.d.ts +12 -9
- package/dist-elements/types/components/feedback/toast/toast.d.ts +8 -9
- package/dist-elements/types/components/filters/filter-bar/filter-bar.d.ts +9 -4
- package/dist-elements/types/components/filters/filter-sheet/filter-sheet.d.ts +7 -7
- package/dist-elements/types/components/filters/filter-zone/filter-zone.d.ts +4 -4
- package/dist-elements/types/components/forms/error-summary/error-summary.d.ts +6 -7
- package/dist-elements/types/components/forms/form/form.d.ts +5 -5
- package/dist-elements/types/components/forms/form-actions/form-actions.d.ts +10 -8
- package/dist-elements/types/components/forms/form-section/form-section.d.ts +6 -5
- package/dist-elements/types/components/forms/repeater/repeater.d.ts +15 -9
- package/dist-elements/types/components/forms/stepper/stepper.d.ts +6 -5
- package/dist-elements/types/components/frame/app-search/app-search.d.ts +7 -8
- package/dist-elements/types/components/frame/breadcrumbs/breadcrumbs.d.ts +2 -2
- package/dist-elements/types/components/frame/footer/footer.d.ts +3 -2
- package/dist-elements/types/components/frame/hero/hero.d.ts +7 -9
- package/dist-elements/types/components/frame/notifications/notifications.d.ts +7 -11
- package/dist-elements/types/components/frame/page-header/page-header.d.ts +13 -16
- package/dist-elements/types/components/frame/shell/shell.d.ts +15 -14
- package/dist-elements/types/components/frame/sub-nav/sub-nav.d.ts +10 -6
- package/dist-elements/types/components/frame/user-menu/user-menu.d.ts +13 -12
- package/dist-elements/types/components/index.d.ts +51 -12
- package/dist-elements/types/components/inputs/checkbox/checkbox.d.ts +4 -4
- package/dist-elements/types/components/inputs/checkbox-group/checkbox-group.d.ts +33 -0
- package/dist-elements/types/components/inputs/combobox/combobox.d.ts +14 -8
- package/dist-elements/types/components/inputs/date-input/date-input.d.ts +6 -6
- package/dist-elements/types/components/inputs/date-range/date-range.d.ts +13 -8
- package/dist-elements/types/components/inputs/field/field.d.ts +5 -3
- package/dist-elements/types/components/inputs/file-upload/file-upload.d.ts +8 -10
- package/dist-elements/types/components/inputs/find/find.d.ts +51 -0
- package/dist-elements/types/components/inputs/multiselect/multiselect.d.ts +4 -6
- package/dist-elements/types/components/inputs/number-input/number-input.d.ts +8 -7
- package/dist-elements/types/components/inputs/radio-group/radio-group.d.ts +2 -4
- package/dist-elements/types/components/inputs/range/range.d.ts +5 -6
- package/dist-elements/types/components/inputs/segmented/segmented.d.ts +7 -4
- package/dist-elements/types/components/inputs/select/select.d.ts +6 -3
- package/dist-elements/types/components/inputs/shared/input.d.ts +1 -1
- package/dist-elements/types/components/inputs/slot-picker/slot-picker.d.ts +6 -5
- package/dist-elements/types/components/inputs/tag-input/tag-input.d.ts +8 -6
- package/dist-elements/types/components/inputs/text-editor/text-editor.d.ts +8 -8
- package/dist-elements/types/components/inputs/text-input/text-input.d.ts +12 -7
- package/dist-elements/types/components/inputs/textarea/textarea.d.ts +12 -11
- package/dist-elements/types/components/inputs/time-input/time-input.d.ts +8 -9
- package/dist-elements/types/components/inputs/toggle/toggle.d.ts +3 -1
- package/dist-elements/types/components/layout/expander/expander.d.ts +10 -11
- package/dist-elements/types/{primitives → components/layout}/grid/grid.d.ts +4 -4
- package/dist-elements/types/{primitives → components/layout}/grid-item/grid-item.d.ts +2 -2
- package/dist-elements/types/components/layout/split-pane/split-pane.d.ts +6 -6
- package/dist-elements/types/components/layout/tabs/tabs.d.ts +12 -10
- package/dist-elements/types/{primitives → components/layout}/tile/tile.d.ts +22 -10
- package/dist-elements/types/components/map/map/map.d.ts +12 -11
- package/dist-elements/types/components/overlays/dialog/dialog.d.ts +49 -0
- package/dist-elements/types/components/overlays/drawer/drawer.d.ts +6 -5
- package/dist-elements/types/components/overlays/modal/modal.d.ts +9 -14
- package/dist-elements/types/{primitives → components/overlays}/popover/popover.d.ts +7 -6
- package/dist-elements/types/components/overlays/toggletip/toggletip.d.ts +4 -8
- package/dist-elements/types/{primitives → components/overlays}/tooltip/tooltip.d.ts +8 -8
- package/dist-elements/types/components/shared/announcement-block.d.ts +38 -0
- package/dist-elements/types/components/shared/charts/index.d.ts +5 -1
- package/dist-elements/types/components/shared/charts/kinds.d.ts +92 -0
- package/dist-elements/types/components/shared/charts/line-chart/line-chart.d.ts +2 -2
- package/dist-elements/types/components/shared/charts/map-chart/leaflet.d.ts +5 -0
- package/dist-elements/types/components/shared/charts/map-chart/map-chart.d.ts +1 -1
- package/dist-elements/types/components/shared/charts/radar-chart/radar-chart.d.ts +31 -0
- package/dist-elements/types/components/shared/charts/shared/axes.d.ts +3 -1
- package/dist-elements/types/components/shared/charts/shared/chart-states.d.ts +8 -19
- package/dist-elements/types/components/shared/charts/shared/controller.d.ts +12 -0
- package/dist-elements/types/components/shared/charts/shared/types.d.ts +62 -0
- package/dist-elements/types/components/shared/charts/stacked-area-chart/stacked-area-chart.d.ts +13 -0
- package/dist-elements/types/components/shared/content-tile.d.ts +1 -1
- package/dist-elements/types/components/{forms/form → shared}/controls.d.ts +3 -2
- package/dist-elements/types/components/shared/dialog.d.ts +9 -0
- package/dist-elements/types/components/shared/empty-state-block.d.ts +26 -0
- package/dist-elements/types/components/shared/overflow.d.ts +58 -0
- package/dist-elements/types/components/shared/tone.d.ts +18 -0
- package/dist-elements/types/components/tables/activity-log/activity-log.d.ts +3 -4
- package/dist-elements/types/components/tables/card/card.d.ts +17 -23
- package/dist-elements/types/components/tables/card-list/card-list.d.ts +9 -11
- package/dist-elements/types/components/tables/data-table/actions.d.ts +1 -1
- package/dist-elements/types/components/tables/data-table/data-table.d.ts +88 -19
- package/dist-elements/types/components/tables/data-table/editing.d.ts +1 -1
- package/dist-elements/types/components/tables/data-table/filters.d.ts +15 -6
- package/dist-elements/types/components/tables/description-list/description-list.d.ts +13 -12
- package/dist-elements/types/components/tables/list/list.d.ts +13 -24
- package/dist-elements/types/components/tables/pagination/pagination.d.ts +12 -11
- package/dist-elements/types/components/tables/sortable-list/sortable-list.d.ts +5 -6
- package/dist-elements/types/components/tables/tree-view/tree-view.d.ts +5 -5
- package/dist-elements/types/core/focus.d.ts +1 -1
- package/dist-elements/types/core/media.d.ts +2 -2
- package/dist-elements/types/core/motion.d.ts +5 -0
- package/dist-elements/types/core/print.d.ts +15 -0
- package/dist-elements/types/core/shortcuts.d.ts +2 -2
- package/dist-elements/types/icons/register.d.ts +1 -1
- package/dist-elements/types/types.d.ts +70 -10
- package/dist-icons/functioneel-kolommen.svg +1 -0
- package/dist-icons/functioneel-trechter.svg +1 -0
- package/package.json +1 -1
- package/dist-elements/chunks/confirm-dialog-D5EVGuil.js +0 -4
- package/dist-elements/chunks/download-y528pIHP.js +0 -230
- package/dist-elements/chunks/input-BtuNFSWk.js +0 -195
- package/dist-elements/tag/confirm-dialog.d.ts +0 -1
- package/dist-elements/tag/confirm-dialog.js +0 -118
- package/dist-elements/tag/session-expiry.d.ts +0 -1
- package/dist-elements/tag/session-expiry.js +0 -184
- package/dist-elements/tag/shortcuts.d.ts +0 -1
- package/dist-elements/tag/shortcuts.js +0 -104
- package/dist-elements/types/components/frame/session-expiry/session-expiry.d.ts +0 -55
- package/dist-elements/types/components/frame/shortcuts/shortcuts.d.ts +0 -41
- package/dist-elements/types/components/overlays/confirm-dialog/confirm-dialog.d.ts +0 -41
- package/dist-elements/types/primitives/index.d.ts +0 -33
- /package/dist-elements/types/components/content/{audio-player → shared}/playback.d.ts +0 -0
- /package/dist-elements/types/components/content/{audio-player → shared}/player.d.ts +0 -0
- /package/dist-elements/types/components/{inputs/date-input → shared}/date-format.d.ts +0 -0
- /package/dist-elements/types/{primitives → components}/shared/grid-item-element.d.ts +0 -0
- /package/dist-elements/types/{primitives → components}/shared/length.d.ts +0 -0
- /package/dist-elements/types/{primitives → components}/shared/place.d.ts +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region src/components/
|
|
1
|
+
//#region src/components/shared/controls.ts
|
|
2
2
|
var e = /* @__PURE__ */ new Set([
|
|
3
3
|
"input",
|
|
4
4
|
"select",
|
|
@@ -40,6 +40,12 @@ var o = {
|
|
|
40
40
|
e.selected = Array.isArray(t) ? [...t] : [];
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
|
+
"lintje-checkbox-group": {
|
|
44
|
+
read: (e) => [...e.selected ?? []],
|
|
45
|
+
write: (e, t) => {
|
|
46
|
+
e.selected = Array.isArray(t) ? [...t] : [];
|
|
47
|
+
}
|
|
48
|
+
},
|
|
43
49
|
"lintje-date-range": {
|
|
44
50
|
read: (e) => ({ ...e.range }),
|
|
45
51
|
write: (e, t) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region src/components/
|
|
1
|
+
//#region src/components/shared/date-format.ts
|
|
2
2
|
var e = /^(\d{4})-(\d{2})-(\d{2})$/, t = /^(\d{1,2})[-./](\d{1,2})[-./](\d{2}|\d{4})$/, n = (e, t = 2) => String(e).padStart(t, "0");
|
|
3
3
|
function r(e, t) {
|
|
4
4
|
return new Date(Date.UTC(e, t, 0)).getUTCDate();
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Ht as e } from "./base-DRGvkF-r.js";
|
|
2
|
+
import { t } from "./focus-trap-Dv8zu64A.js";
|
|
3
|
+
//#region src/components/shared/dialog.ts
|
|
4
|
+
var n = class {
|
|
5
|
+
#e = new t();
|
|
6
|
+
#t;
|
|
7
|
+
#n = null;
|
|
8
|
+
#r = (e) => {
|
|
9
|
+
e.key === "Escape" && this.#e.isTopmost() && this.#t();
|
|
10
|
+
};
|
|
11
|
+
constructor(e) {
|
|
12
|
+
this.#t = e;
|
|
13
|
+
}
|
|
14
|
+
get held() {
|
|
15
|
+
return this.#n !== null;
|
|
16
|
+
}
|
|
17
|
+
isTopmost() {
|
|
18
|
+
return this.#e.isTopmost();
|
|
19
|
+
}
|
|
20
|
+
hold(t) {
|
|
21
|
+
this.#n || (this.#n = e(), document.addEventListener("keydown", this.#r), this.#e.activate(t, { focus: !1 }));
|
|
22
|
+
}
|
|
23
|
+
release() {
|
|
24
|
+
this.#n && (document.removeEventListener("keydown", this.#r), this.#n(), this.#n = null, this.#e.deactivate());
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
//#endregion
|
|
28
|
+
export { n as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
//#region src/components/shared/disclosure.css?inline
|
|
2
|
-
var e = "/*\n * The disclosure shared by `lintje-expander` and `lintje-explainer`: the surface stays with each\n * element. The body unfolds with `grid-template-rows: 0fr -> 1fr`, as the filter zone does;\n * `--dur-collapse` is 0 ms under reduced motion (`tokens/base.css`).\n */\n:host(lintje-expander) {\n display: block;\n min-width: 0;\n}\n:host([hidden]) { display: none; }\n\n/* --- */\n\n.lintje-disclosure__heading { margin: 0; font: inherit; }\n.lintje-disclosure__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n min-height: var(--h-target);\n gap: var(--space-3);\n text-align: left;\n}\n/* Spans, because a button holds phrasing content only. */\n.lintje-disclosure__title { display: block; font: var(--text-tile-title); color: var(--color-text-primary); }\n/* A grid only with an icon or subtitle: the subtitle then sits under the title text. */\n.lintje-disclosure__label {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr);\n min-width: 0;\n}\n.lintje-disclosure__label--plain { display: block; }\n.lintje-disclosure__icon { grid-row: 1; }\n.lintje-disclosure__label .lintje-disclosure__title,\n.lintje-disclosure__label .lintje-disclosure__sub { grid-column: 2; }\n.lintje-disclosure__label--plain .lintje-disclosure__title,\n.lintje-disclosure__label--plain .lintje-disclosure__sub { grid-column: auto; }\n.lintje-disclosure__sub { display: block; font: var(--text-tile-sub); color: var(--color-text-muted); margin-top: 2px; }\n\n/* --- Opening and closing -------------------------------------------------- */\n.lintje-disclosure__body {\n display: grid;\n grid-template-rows: 0fr;\n /* Named column: an implicit `auto` track takes the max-content width, so a code block with\n `wrap: false` would run out of the box instead of scrolling. */\n grid-template-columns: minmax(0, 1fr);\n transition: grid-template-rows var(--dur-collapse) var(--ease-in-motion);\n}\n.lintje-disclosure.is-open .lintje-disclosure__body { grid-template-rows: 1fr; }\n\n.lintje-disclosure__body-inner {\n /* The containing block of what is positioned inside, so the clip holds that too: a\n visually hidden label in a closed body would otherwise stretch the page below it. */\n position: relative;\n min-height: 0;\n overflow: hidden;\n opacity: 0;\n /* Closed: out of the tab order and the accessibility tree; hiding waits for the collapse. */\n visibility: hidden;\n transition:\n opacity var(--dur-collapse) var(--ease-in-motion),\n visibility 0s linear var(--dur-collapse);\n}\n.lintje-disclosure.is-open .lintje-disclosure__body-inner {\n opacity: 1;\n visibility: visible;\n transition: opacity var(--dur-collapse) var(--ease-in-motion), visibility 0s;\n}\n/* Standing open, nothing clips: slotted content may hang a popover out of the box. */\n.lintje-disclosure.is-open.is-settled .lintje-disclosure__body-inner { overflow: visible; }\n\n/* Inside the clipped box: on the body it would show under a closed disclosure. */\n.lintje-disclosure__content { margin-top: var(--space-3); }\n\n.lintje-disclosure__chevron {\n flex: none;\n transform-origin: 50% 50%;\n transition: transform var(--dur-collapse) var(--ease-in-motion);\n}\n.lintje-disclosure.is-open .lintje-disclosure__chevron { transform: rotate(180deg); }\n/* Leading: the chevron first, the title after it, and the content in line with the title. */\n.lintje-disclosure--leading .lintje-disclosure__header { justify-content: flex-start; align-items: flex-start; padding-top: var(--space-3); }\n/* The chevron stands in line with the title's first line, not between title and subtitle. */\n.lintje-disclosure--leading .lintje-disclosure__chevron { margin-top: calc((1lh - 16px) / 2); }\n.lintje-disclosure--leading .lintje-disclosure__label { flex: 1 1 auto; }\n.lintje-disclosure--leading .lintje-disclosure__content { margin-left: calc(16px + var(--space-3)); }\n\n/* Columns: the title in its own column, the content beside it in the text's column, the actions\n at the end; the host's width decides, so a narrow one stacks again. */\n:host([columns]) { container-type: inline-size; }\n.lintje-expander--columns {\n display: grid;\n grid-template-columns: var(--lintje-expander-label, calc(4 * var(--space-10))) minmax(0, 1fr) auto;\n grid-template-areas: 'head body actions';\n column-gap: var(--space-5);\n align-items: start;\n}\n.lintje-expander--columns .lintje-expander__top { display: contents; }\n.lintje-expander--columns .lintje-disclosure__heading { grid-area: head; }\n.lintje-expander--columns .lintje-expander__actions { grid-area: actions; }\n.lintje-expander--columns .lintje-disclosure__body { grid-area: body; }\n.lintje-expander--columns .lintje-disclosure__content { margin: 0; padding-top: var(--space-3); }\n@container (max-width: 40rem) {\n .lintje-expander--columns {\n grid-template-columns: minmax(0, 1fr) auto;\n grid-template-areas: 'head actions' 'body body';\n }\n .lintje-expander--columns .lintje-disclosure__content { margin-left: calc(16px + var(--space-3)); padding-top: 0; }\n}\n\n.lintje-expander {\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-default);\n padding: var(--tile-pad-y) var(--tile-pad-x);\n}\n/* `flat`: an expander inside a tile is not a second card. */\n.lintje-expander--flat { background: none; border: none; padding: 0; }\n.lintje-expander__content { font: var(--text-body); color: var(--color-text-secondary); }\n/* The actions stand beside the title's button, never inside it. */\n.lintje-expander__top { display: flex; align-items: flex-start; gap: var(--space-2); }\n.lintje-expander__top .lintje-disclosure__heading { flex: 1 1 auto; min-width: 0; }\n.lintje-expander__actions { display: flex; flex: none; align-items: center; gap: var(--space-1); }\n";
|
|
2
|
+
var e = "/*\n * The disclosure shared by `lintje-expander` and `lintje-explainer`: the surface stays with each\n * element. The body unfolds with `grid-template-rows: 0fr -> 1fr`, as the filter zone does;\n * `--dur-collapse` is 0 ms under reduced motion (`tokens/base.css`).\n */\n:host(lintje-expander) {\n display: block;\n min-width: 0;\n}\n:host([hidden]) { display: none; }\n\n/* --- */\n\n.lintje-disclosure__heading { margin: 0; font: inherit; }\n.lintje-disclosure__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n min-height: var(--h-target);\n gap: var(--space-3);\n text-align: left;\n}\n/* Spans, because a button holds phrasing content only. */\n.lintje-disclosure__title { display: block; font: var(--text-tile-title); color: var(--color-text-primary); }\n/* A grid only with an icon or subtitle: the subtitle then sits under the title text. */\n.lintje-disclosure__label {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr);\n min-width: 0;\n}\n.lintje-disclosure__label--plain { display: block; }\n.lintje-disclosure__icon { grid-row: 1; }\n.lintje-disclosure__label .lintje-disclosure__title,\n.lintje-disclosure__label .lintje-disclosure__sub { grid-column: 2; }\n.lintje-disclosure__label--plain .lintje-disclosure__title,\n.lintje-disclosure__label--plain .lintje-disclosure__sub { grid-column: auto; }\n.lintje-disclosure__sub { display: block; font: var(--text-tile-sub); color: var(--color-text-muted); margin-top: 2px; }\n\n/* --- Opening and closing -------------------------------------------------- */\n.lintje-disclosure__body {\n display: grid;\n grid-template-rows: 0fr;\n /* Named column: an implicit `auto` track takes the max-content width, so a code block with\n `wrap: false` would run out of the box instead of scrolling. */\n grid-template-columns: minmax(0, 1fr);\n transition: grid-template-rows var(--dur-collapse) var(--ease-in-motion);\n}\n.lintje-disclosure.is-open .lintje-disclosure__body { grid-template-rows: 1fr; }\n\n.lintje-disclosure__body-inner {\n /* The containing block of what is positioned inside, so the clip holds that too: a\n visually hidden label in a closed body would otherwise stretch the page below it. */\n position: relative;\n min-height: 0;\n overflow: hidden;\n opacity: 0;\n /* Closed: out of the tab order and the accessibility tree; hiding waits for the collapse. */\n visibility: hidden;\n transition:\n opacity var(--dur-collapse) var(--ease-in-motion),\n visibility 0s linear var(--dur-collapse);\n}\n.lintje-disclosure.is-open .lintje-disclosure__body-inner {\n opacity: 1;\n visibility: visible;\n transition: opacity var(--dur-collapse) var(--ease-in-motion), visibility 0s;\n}\n/* Standing open, nothing clips: slotted content may hang a popover out of the box. */\n.lintje-disclosure.is-open.is-settled .lintje-disclosure__body-inner { overflow: visible; }\n\n/* Inside the clipped box: on the body it would show under a closed disclosure. */\n.lintje-disclosure__content { margin-top: var(--space-3); }\n\n.lintje-disclosure__chevron {\n flex: none;\n transform-origin: 50% 50%;\n transition: transform var(--dur-collapse) var(--ease-in-motion);\n}\n.lintje-disclosure.is-open .lintje-disclosure__chevron { transform: rotate(180deg); }\n/* Paper cannot be unfolded: what a disclosure holds is printed, and its chevron is not. */\n@media print {\n .lintje-disclosure__body { grid-template-rows: 1fr; }\n .lintje-disclosure__body-inner { opacity: 1; visibility: visible; overflow: visible; }\n .lintje-disclosure__chevron { display: none; }\n}\n/* Leading: the chevron first, the title after it, and the content in line with the title. */\n.lintje-disclosure--leading .lintje-disclosure__header { justify-content: flex-start; align-items: flex-start; padding-top: var(--space-3); }\n/* The chevron stands in line with the title's first line, not between title and subtitle. */\n.lintje-disclosure--leading .lintje-disclosure__chevron { margin-top: calc((1lh - 16px) / 2); }\n.lintje-disclosure--leading .lintje-disclosure__label { flex: 1 1 auto; }\n.lintje-disclosure--leading .lintje-disclosure__content { margin-left: calc(16px + var(--space-3)); }\n\n/* Columns: the title in its own column, the content beside it in the text's column, the actions\n at the end; the host's width decides, so a narrow one stacks again. */\n:host([columns]) { container-type: inline-size; }\n.lintje-expander--columns {\n display: grid;\n grid-template-columns: var(--lintje-expander-label, calc(4 * var(--space-10))) minmax(0, 1fr) auto;\n grid-template-areas: 'head body actions';\n column-gap: var(--space-5);\n align-items: start;\n}\n.lintje-expander--columns .lintje-expander__top { display: contents; }\n.lintje-expander--columns .lintje-disclosure__heading { grid-area: head; }\n.lintje-expander--columns .lintje-expander__actions { grid-area: actions; }\n.lintje-expander--columns .lintje-disclosure__body { grid-area: body; }\n.lintje-expander--columns .lintje-disclosure__content { margin: 0; padding-top: var(--space-3); }\n@container (max-width: 40rem) {\n .lintje-expander--columns {\n grid-template-columns: minmax(0, 1fr) auto;\n grid-template-areas: 'head actions' 'body body';\n }\n .lintje-expander--columns .lintje-disclosure__content { margin-left: calc(16px + var(--space-3)); padding-top: 0; }\n}\n\n.lintje-expander {\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-default);\n padding: var(--tile-pad-y) var(--tile-pad-x);\n}\n/* `flat`: an expander inside a tile is not a second card. */\n.lintje-expander--flat { background: none; border: none; padding: 0; }\n.lintje-expander__content { font: var(--text-body); color: var(--color-text-secondary); }\n/* The actions stand beside the title's button, never inside it. */\n.lintje-expander__top { display: flex; align-items: flex-start; gap: var(--space-2); }\n.lintje-expander__top .lintje-disclosure__heading { flex: 1 1 auto; min-width: 0; }\n.lintje-expander__actions { display: flex; flex: none; align-items: center; gap: var(--space-1); }\n";
|
|
3
3
|
//#endregion
|
|
4
4
|
export { e as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { dt as e, en as t, nn as n, ut as r } from "./base-DRGvkF-r.js";
|
|
2
2
|
//#region src/components/shared/disclosure.ts
|
|
3
3
|
var i = 0;
|
|
4
4
|
function a() {
|
|
@@ -30,7 +30,7 @@ var o = class {
|
|
|
30
30
|
}
|
|
31
31
|
};
|
|
32
32
|
function s(i) {
|
|
33
|
-
let a =
|
|
33
|
+
let a = r("functioneel-delta-omlaag", {
|
|
34
34
|
size: 16,
|
|
35
35
|
className: "lintje-disclosure__chevron"
|
|
36
36
|
}), { bodyId: o, open: s, title: c, subtitle: l, icon: u, leading: d, toggle: f } = i;
|
|
@@ -42,14 +42,14 @@ function s(i) {
|
|
|
42
42
|
aria-controls=${o}
|
|
43
43
|
@click=${f}
|
|
44
44
|
>
|
|
45
|
-
${d ? a :
|
|
45
|
+
${d ? a : t}
|
|
46
46
|
<span class="lintje-disclosure__label ${!u && !l ? "lintje-disclosure__label--plain" : ""}">
|
|
47
|
-
${
|
|
47
|
+
${e(u, "lintje-disclosure__icon")}<span class="lintje-disclosure__title"
|
|
48
48
|
>${c}</span
|
|
49
49
|
>
|
|
50
|
-
${l ? n`<span class="lintje-disclosure__sub">${l}</span>` :
|
|
50
|
+
${l ? n`<span class="lintje-disclosure__sub">${l}</span>` : t}
|
|
51
51
|
</span>
|
|
52
|
-
${d ?
|
|
52
|
+
${d ? t : a}
|
|
53
53
|
</button>
|
|
54
54
|
</h3>`;
|
|
55
55
|
}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { P as e, bt as t, en as n, in as r, lt as i, nn as a, ut as o } from "./base-DRGvkF-r.js";
|
|
2
|
+
import "../tag/modal.js";
|
|
3
|
+
//#region src/components/shared/content-tile.ts
|
|
4
|
+
var s = class extends e {
|
|
5
|
+
constructor(...e) {
|
|
6
|
+
super(...e), this.expanded = !1;
|
|
7
|
+
}
|
|
8
|
+
static {
|
|
9
|
+
this.properties = { expanded: { state: !0 } };
|
|
10
|
+
}
|
|
11
|
+
expand(e) {
|
|
12
|
+
this.expanded !== e && (this.expanded = e, this.expandChanged(e));
|
|
13
|
+
}
|
|
14
|
+
expandChanged(e) {}
|
|
15
|
+
renderExpandModal(e, t) {
|
|
16
|
+
let { heading: r, subtitle: i, footnote: o, csv: s, png: c } = t;
|
|
17
|
+
return a`<lintje-modal
|
|
18
|
+
.open=${this.expanded}
|
|
19
|
+
heading=${r ?? "Vergroot"}
|
|
20
|
+
subtitle=${i ?? n}
|
|
21
|
+
.csv=${s !== void 0}
|
|
22
|
+
.png=${c !== void 0}
|
|
23
|
+
@lintje-close=${(e) => {
|
|
24
|
+
e.stopPropagation(), this.expand(!1);
|
|
25
|
+
}}
|
|
26
|
+
@lintje-download-csv=${(e) => {
|
|
27
|
+
e.stopPropagation(), s?.();
|
|
28
|
+
}}
|
|
29
|
+
@lintje-download-png=${(e) => {
|
|
30
|
+
e.stopPropagation(), c?.();
|
|
31
|
+
}}
|
|
32
|
+
>
|
|
33
|
+
${e}${o ? a`<span slot="footer">${o}</span>` : n}
|
|
34
|
+
</lintje-modal>`;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
//#endregion
|
|
38
|
+
//#region src/components/shared/charts/shared/chart-icons.ts
|
|
39
|
+
function c(e, t, r = 16, i) {
|
|
40
|
+
let a = o(e, {
|
|
41
|
+
size: r,
|
|
42
|
+
flip: i
|
|
43
|
+
});
|
|
44
|
+
return a === n ? t : a;
|
|
45
|
+
}
|
|
46
|
+
var l = [
|
|
47
|
+
{
|
|
48
|
+
action: "in",
|
|
49
|
+
name: "functioneel-plus",
|
|
50
|
+
text: "+",
|
|
51
|
+
label: "Inzoomen"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
action: "out",
|
|
55
|
+
name: "functioneel-minus",
|
|
56
|
+
text: "−",
|
|
57
|
+
label: "Uitzoomen"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
action: "home",
|
|
61
|
+
name: "functioneel-refresh",
|
|
62
|
+
flip: "horizontal",
|
|
63
|
+
text: "Terug",
|
|
64
|
+
label: "Kaart terugzetten"
|
|
65
|
+
}
|
|
66
|
+
];
|
|
67
|
+
//#endregion
|
|
68
|
+
//#region src/components/shared/charts/shared/chart-states.ts
|
|
69
|
+
function u(e = "100%", n = 12, r = "") {
|
|
70
|
+
let i = (e) => typeof e == "number" ? `${e}px` : e;
|
|
71
|
+
return a`<span class="lintje-skeleton ${r}"
|
|
72
|
+
${t({
|
|
73
|
+
width: i(e),
|
|
74
|
+
height: i(n)
|
|
75
|
+
})} aria-hidden="true"></span>`;
|
|
76
|
+
}
|
|
77
|
+
function d({ kind: e = "line", height: r, status: i = !0 } = {}) {
|
|
78
|
+
return a`
|
|
79
|
+
<div class="lintje-chart-skeleton lintje-chart-skeleton--${e}"
|
|
80
|
+
${t({ height: r ?? (e === "table" ? void 0 : "var(--chart-h-main)") })}
|
|
81
|
+
role=${i ? "status" : n}
|
|
82
|
+
aria-hidden=${i ? n : "true"}>
|
|
83
|
+
<!-- In words, not only in a label: a status region is spoken from its content. -->
|
|
84
|
+
${i ? a`<span class="visually-hidden">Gegevens laden…</span>` : n}
|
|
85
|
+
${e === "line" || e === "bar" ? a`
|
|
86
|
+
<div class="lintje-chart-skeleton__y-labels">
|
|
87
|
+
${[
|
|
88
|
+
0,
|
|
89
|
+
1,
|
|
90
|
+
2,
|
|
91
|
+
3
|
|
92
|
+
].map(() => u(24, 10))}
|
|
93
|
+
</div>
|
|
94
|
+
<div class="lintje-chart-skeleton__x-labels">
|
|
95
|
+
${[
|
|
96
|
+
0,
|
|
97
|
+
1,
|
|
98
|
+
2
|
|
99
|
+
].map(() => u(32, 10))}
|
|
100
|
+
</div>
|
|
101
|
+
<div class="lintje-chart-skeleton__plot">
|
|
102
|
+
${u("100%", "100%", "lintje-chart-skeleton__fill")}
|
|
103
|
+
</div>
|
|
104
|
+
` : n}
|
|
105
|
+
${e === "pie" || e === "donut" ? a`
|
|
106
|
+
<!-- Sized by the skeleton's own box, so it always fits beside its lines. -->
|
|
107
|
+
${u("min(100cqh, 60cqw, 200px)", "auto", "lintje-chart-skeleton__disc")}
|
|
108
|
+
<div class="lintje-chart-skeleton__lines">
|
|
109
|
+
${[
|
|
110
|
+
"80%",
|
|
111
|
+
"64%",
|
|
112
|
+
"48%"
|
|
113
|
+
].map((e) => u(e, 13))}
|
|
114
|
+
</div>
|
|
115
|
+
` : n}
|
|
116
|
+
${e === "heatmap" ? Array.from({ length: 35 }, () => u("100%", "100%")) : n}
|
|
117
|
+
${e === "map" ? a`
|
|
118
|
+
${u("100%", "100%", "lintje-chart-skeleton__fill")}
|
|
119
|
+
<div class="lintje-chart-skeleton__zoom" aria-hidden="true">
|
|
120
|
+
${l.map((e) => a`
|
|
121
|
+
<span class="lintje-chart-skeleton__zoom-button">${c(e.name, e.text, 16, "flip" in e ? e.flip : void 0)}</span>
|
|
122
|
+
`)}
|
|
123
|
+
</div>
|
|
124
|
+
` : n}
|
|
125
|
+
${e === "table" ? Array.from({ length: 5 }, () => a`
|
|
126
|
+
<div class="lintje-chart-skeleton__row">
|
|
127
|
+
${u("32%")}
|
|
128
|
+
${u("12%", 12, "lintje-chart-skeleton__measure")}
|
|
129
|
+
${u("12%")}
|
|
130
|
+
</div>
|
|
131
|
+
`) : n}
|
|
132
|
+
</div>
|
|
133
|
+
`;
|
|
134
|
+
}
|
|
135
|
+
//#endregion
|
|
136
|
+
//#region src/components/shared/charts/shared/chart.css?inline
|
|
137
|
+
var f = ".lintje-chart { display: flex; flex-direction: column; gap: 6px; min-width: 0; margin: 0; }\n/* Charts that are as high as their rows (horizontal bars, target progress) center in a taller\n tile instead of leaving the space below them empty. */\n.lintje-chart--rows { margin-block: auto; }\n.lintje-chart__axis-title { font: var(--text-axis); color: var(--color-text-muted); }\n/* The title of the x axis (`xTitle` in `renderChartFrame`): the axis title's type, in the\n drawing, under the x labels at the right. */\n.lintje-chart__x-title { font: var(--text-axis); fill: var(--color-text-muted); }\n.lintje-chart__svg {\n width: 100%;\n display: block;\n overflow: visible;\n}\n\n.lintje-chart__axis-label {\n font-family: var(--font-ui);\n font-size: 0.75rem;\n font-weight: 400;\n fill: var(--color-chart-axis);\n}\n/* Data labels are bold so they read as values rather than axis labels. */\n.lintje-chart__data-label {\n font-family: var(--font-ui);\n font-size: 0.75rem;\n font-weight: 700;\n fill: var(--color-text-primary);\n}\n/* On a mark the label takes the text of the fill it stands on: white on a dark rung, ink on a\n light one. The fills are the same in both modes, so the label is too. */\n.lintje-chart__data-label--inside { fill: var(--color-text-on-fill); }\n.lintje-chart__data-label--inside-light { fill: var(--color-text-on-light-fill); }\n/* On a threshold line (horizontal bars) or beside one (histogram, scatter): a halo in the surface color.\n Invisible on the tile, it cuts a line or a bar where the label crosses it. */\n.lintje-chart__data-label--halo,\n.lintje-chart__axis-label--halo {\n stroke: var(--color-bg-surface);\n stroke-width: 4px;\n stroke-linejoin: round;\n paint-order: stroke fill;\n}\n.lintje-chart__as-of-label {\n font-family: var(--font-ui);\n font-size: 0.75rem;\n font-weight: 700;\n fill: var(--color-text-primary);\n}\n.lintje-chart__as-of-note {\n font-family: var(--font-ui);\n font-size: 0.75rem;\n fill: var(--color-text-muted);\n /* A halo in the surface, as a data label on a line has: an event line may cross it. */\n stroke: var(--color-bg-surface);\n stroke-width: 4px;\n stroke-linejoin: round;\n paint-order: stroke fill;\n}\n\n.lintje-chart__line { stroke-width: 2.5; fill: none; stroke-linejoin: round; }\n/* 1 px either side of the line, under it (`lineCasing`). */\n.lintje-chart__line--casing { stroke-width: 4.5; }\n\n/* Bars. transform-box: fill-box puts the origin in the bar's own box instead of the svg's:\n a bar widens around its own middle. A horizontal bar is anchored at the category axis. */\n.lintje-chart__bar {\n transform-box: fill-box;\n transform-origin: 50% 100%;\n transition: transform var(--dur-hover) var(--ease-in-motion), filter var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-chart__bar--horizontal { transform-origin: 0 50%; }\n\n/* The bar under the pointer widens a little and lifts with a light\n shadow, so it is clear what the tooltip describes — the same lift as a pie segment. Only the\n width grows: the length carries the value. A stacked column lifts as a whole. */\n.lintje-chart__bar-group:hover .lintje-chart__bar,\n.lintje-chart__bar-group.is-hovered .lintje-chart__bar {\n transform: scaleX(1.06);\n filter: drop-shadow(var(--shadow-chart-hover));\n}\n/* A histogram's classes touch: its lift is a copy drawn over its neighbours. */\n.lintje-chart__bar--lifted {\n transform: scaleX(1.06);\n filter: drop-shadow(var(--shadow-chart-hover));\n pointer-events: none;\n}\n.lintje-chart__bar-row:hover .lintje-chart__bar--horizontal,\n.lintje-chart__bar-row.is-hovered .lintje-chart__bar--horizontal {\n transform: scaleY(1.12);\n filter: drop-shadow(var(--shadow-chart-hover));\n}\n\n/* A mark that drills. The same three states wherever a mark can carry a\n href — bars, stacked segments, pie slices — and the same ones the map draws: the chosen\n mark takes the text colour as a 2 px outline (the outline is the carrier, not the colour,\n rule 13) and every other mark steps back so it reads against them; .45 is the legend's own\n dimming. The focus ring is the orange 3 px of every other control, around the shape with\n a 1 px gap in the surface (`renderFocusRing`, axes.ts), so an orange mark keeps it too: the\n box an outline draws around a slice or a stacked segment is not the shape the reader is on. */\n.lintje-chart__mark.is-clickable { cursor: pointer; }\n.lintje-chart__mark.is-selected { stroke: var(--color-text-primary); stroke-width: 2; }\n.lintje-chart__mark.is-muted { fill-opacity: .45; }\n/* A focused SVG element with a tabindex gets the browser's own box even where `:focus-visible`\n does not match, after a click: the ring below is the only one. */\n.lintje-chart__mark:focus { outline: none; }\n/* Weighs as much as the hover's lift and stands after it, so the ring is what a focused bar\n under the pointer shows. Only a clickable mark takes the focus. */\n.lintje-chart__mark.is-clickable:focus-visible {\n outline: none;\n filter: var(--lintje-focus-ring);\n}\n.lintje-chart__focus-ring { flood-color: var(--color-focus); }\n.lintje-chart__focus-gap { flood-color: var(--color-bg-surface); }\n/* Stacked segments and slices of neighbouring tints part with a 1 px line in the surface:\n two rungs of the ladder differ by 1.2–1.5:1. */\n.lintje-chart__segment { stroke: var(--color-bg-surface); stroke-width: 1px; }\n\n/* Radar: polygon rings in the grid; the spokes are the axes and take the zero line's colour. */\n.lintje-radar__ring { fill: none; stroke: var(--color-chart-grid); stroke-width: 1; }\n.lintje-radar__spoke { stroke: var(--color-chart-zero); stroke-width: 1; }\n.lintje-radar__spoke.is-active { stroke: var(--color-chart-axis); stroke-width: 1.5; }\n.lintje-radar__name { font: var(--text-small); fill: var(--color-text-primary); }\n.lintje-radar__no-value { font-weight: 400; fill: var(--color-text-muted); }\n/* The fill a line chart gives its area. */\n.lintje-radar__area { fill-opacity: 0; transition: fill-opacity var(--dur-hover) var(--ease-in-motion); }\n.lintje-radar__area.is-filled { fill-opacity: .14; }\n.lintje-radar__norm { fill: none; stroke: var(--color-chart-emphasis); stroke-width: 1.5; stroke-dasharray: 4 3; }\n/* Of more layers the one pointed at in the legend leads; the others step back as a hidden one does. */\n.lintje-radar__layer { transition: opacity var(--dur-hover) var(--ease-in-motion); }\n.lintje-radar__layer.is-muted { opacity: .45; }\n/* A layer the legend hides keeps its node, so switching it back lets nothing grow in again. */\n.lintje-radar__layer.is-hidden,\n.lintje-radar__bar.is-hidden,\n.lintje-radar__value.is-hidden { visibility: hidden; }\n.lintje-radar__lift { pointer-events: none; }\n.lintje-radar__zero { stroke: var(--color-chart-zero); stroke-width: 1; }\n.lintje-radar__row.is-active .lintje-radar__name { font-weight: 700; }\n\n/* Draw-in takes 900 ms for data marks only. Axes, grid and titles appear immediately. */\n@media (prefers-reduced-motion: no-preference) {\n /* A line and the area below it are uncovered together from left to right. The clip opens over the box\n of the series; the negative insets leave room for the stroke outside that box. */\n .lintje-chart__reveal { animation: lintje-reveal var(--dur-draw) var(--ease-in-motion) backwards; }\n /* Bars grow from the axis one after another: left to right, or top to bottom when horizontal\n --lintje-stagger (0 to 1, set per bar) spreads the starts over the first\n 40 % of the draw and each bar grows in the other 60 %, so all are done at --dur-draw. A\n column grows as a whole, so stacked segments stay together. Fill mode `backwards`, not\n `both`: a transform held after the end would override the hover transform. */\n .lintje-chart__bar-group,\n .lintje-chart__bar--horizontal {\n animation-duration: calc(var(--dur-draw) * 0.6);\n animation-timing-function: var(--ease-in-motion);\n animation-delay: calc(var(--dur-draw) * 0.4 * var(--lintje-stagger, 0));\n animation-fill-mode: backwards;\n }\n .lintje-chart__bar-group {\n transform-box: fill-box;\n transform-origin: 50% 100%;\n animation-name: lintje-grow;\n }\n .lintje-chart__bar--horizontal { animation-name: lintje-grow-x; }\n .lintje-chart__bar--lifted { animation: lintje-lift var(--dur-hover) var(--ease-in-motion) backwards; }\n /* Data labels fade in once the marks are drawn, eased at both ends. */\n .lintje-chart__data-label { animation: lintje-fade-in var(--dur-data-label) ease-in-out var(--dur-draw) both; }\n /* A reference line comes in with its label once the marks are drawn, as a data label does;\n a data label inside it does not fade a second time. */\n .lintje-chart__reference { animation: lintje-fade-in var(--dur-data-label) ease-in-out var(--dur-draw) both; }\n /* A scatter point grows from its middle as a map point does, one after another along x, with\n the bars' timing. */\n .lintje-chart__point {\n transform-box: fill-box;\n transform-origin: 50% 50%;\n animation: lintje-point-grow calc(var(--dur-draw) * 0.6) var(--ease-in-motion)\n calc(var(--dur-draw) * 0.4 * var(--lintje-stagger, 0)) backwards;\n }\n .lintje-chart__reference .lintje-chart__data-label { animation: none; }\n /* A radar's layers grow from the centre once, with the bars' timing; the norm comes after. */\n .lintje-radar__layer {\n animation: lintje-point-grow calc(var(--dur-draw) * 0.6) var(--ease-in-motion)\n calc(var(--dur-draw) * 0.4) backwards;\n }\n\n /* Draw in only once the chart comes into view. By default the marks are\n paused on their first frame (series covered, bar flat, label gone); as soon\n as usePlotArea sets data-in-view on the outermost chart element, they run.\n These rules come after the `animation` shorthands above: those set\n animation-play-state back to running and would otherwise win at equal\n specificity. They sit inside this media block because with reduced motion\n there is no animation — and a paused fill-mode would keep the marks\n invisible there. */\n .lintje-chart__reveal,\n .lintje-chart__bar-group,\n .lintje-chart__bar--horizontal,\n .lintje-chart__data-label,\n .lintje-chart__reference,\n .lintje-chart__point,\n .lintje-radar__layer { animation-play-state: paused; }\n [data-in-view] .lintje-chart__reveal,\n [data-in-view] .lintje-chart__bar-group,\n [data-in-view] .lintje-chart__bar--horizontal,\n [data-in-view] .lintje-chart__data-label,\n [data-in-view] .lintje-chart__reference,\n [data-in-view] .lintje-chart__point,\n [data-in-view] .lintje-radar__layer { animation-play-state: running; }\n}\n@keyframes lintje-reveal {\n from { clip-path: inset(-8px calc(100% + 8px) -8px -8px); }\n to { clip-path: inset(-8px); }\n}\n@keyframes lintje-grow { from { transform: scaleY(0); } to { transform: scaleY(1); } }\n@keyframes lintje-lift { from { transform: none; filter: none; } }\n@keyframes lintje-grow-x { from { transform: scaleX(0); } to { transform: scaleX(1); } }\n\n/* --- Legend -------------------------------------------------------------- */\n.lintje-legend {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-2) var(--space-4);\n font: var(--text-small);\n color: var(--color-text-primary);\n}\n/* A legend above the chart keeps 12 px to the axis title below it. */\n.lintje-chart-wrap > .lintje-legend { margin-bottom: var(--space-3); }\n.lintje-legend--right { flex-direction: column; flex-wrap: nowrap; }\n.lintje-legend__item { display: flex; align-items: center; gap: 6px; }\n.lintje-legend__button { display: flex; align-items: center; gap: 6px; font: inherit; color: inherit; }\n/* A series switched off: the marker steps back and the name is struck through, at full\n contrast — the strike and `aria-pressed` carry the state, not a faded word. */\n.lintje-legend__item.is-hidden .lintje-legend__marker { opacity: 0.45; }\n.lintje-legend__item.is-hidden .lintje-legend__label { text-decoration: line-through; }\n\n.lintje-legend__marker { flex: none; display: block; }\n.lintje-legend__marker--symbol { width: 14px; height: 14px; }\n.lintje-legend__marker--square { width: 12px; height: 12px; background: currentColor; }\n.lintje-legend__marker--line { width: 14px; height: 3px; background: currentColor; }\n/* \"No data\" on a map: the hatch the mark carries, on the surface (rule 15). */\n.lintje-legend__marker--hatch {\n width: 16px; height: 10px;\n background: repeating-linear-gradient(45deg, var(--color-chart-hatch) 0 2px, transparent 2px 6px);\n border: 1px solid var(--color-border-default);\n}\n.lintje-legend__marker--dashed {\n width: 14px; height: 0;\n border-top: 2px dashed currentColor;\n}\n\n/* --- Tooltip ------------------------------------------------------------- */\n.lintje-chart-tooltip {\n position: absolute;\n z-index: 55;\n pointer-events: none;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-popover);\n box-shadow: var(--shadow-popover);\n padding: var(--space-2) 10px;\n font: var(--text-small);\n min-width: 160px;\n /* Its own width, whatever its position: shrink-to-fit narrowed it near the right edge. */\n width: max-content;\n max-width: 320px;\n}\n.lintje-chart-tooltip__title { font-weight: 700; margin-bottom: 4px; }\n.lintje-chart-tooltip__row { display: flex; align-items: center; gap: 6px; justify-content: space-between; }\n.lintje-chart-tooltip__label { display: flex; align-items: center; gap: 6px; }\n.lintje-chart-tooltip__marker { width: 10px; height: 10px; flex: none; }\n.lintje-chart-tooltip__marker--symbol { width: 14px; height: 14px; }\n.lintje-chart-tooltip__marker--line { width: 14px; height: 3px; background: currentColor; }\n.lintje-chart-tooltip__marker--dashed { width: 14px; height: 0; border-top: 2px dashed currentColor; }\n.lintje-chart-tooltip__row--divider {\n border-top: 1px solid var(--color-border-popover);\n margin-top: var(--space-1);\n padding-top: var(--space-1);\n}\n.lintje-chart-tooltip__value { font-weight: 700; margin-left: var(--space-3); }\n.lintje-chart-tooltip__event {\n display: flex;\n align-items: flex-start;\n gap: var(--space-2);\n margin-top: var(--space-1);\n padding-top: var(--space-1);\n border-top: 1px solid var(--color-border-default);\n}\n/* One line divides the values from the events, not one event from the next. */\n.lintje-chart-tooltip__event + .lintje-chart-tooltip__event { padding-top: 0; border-top: 0; }\n\n.lintje-chart-wrap { position: relative; min-width: 0; }\n\n/* Chart tooltip anchor: coordinates and positioning both share this element. */\n[data-tooltip-anchor] { position: relative; }\n\n/* Hover point on a line: 4 px in the series color — the size of the as-of point —\n with a ring in the surface color, so it stays legible on the line and on the\n filled area below it. No animation: hover does not redraw. */\n.lintje-chart__hover-point { stroke: var(--color-bg-surface); stroke-width: 2; pointer-events: none; }\n/* A point of a series the legend hides keeps its node, so it does not grow again. */\n.lintje-chart__point.is-hidden { visibility: hidden; }\n/* The edge of a dark-yellow hover point (`lineCasing`), over its ring. */\n.lintje-chart__hover-casing { fill: none; stroke-width: 1; pointer-events: none; }\n\n/* The scatter plot's one pointer target, under its points: the nearest point within half of\n --h-target answers (`pick`, scatter-chart.ts), so a small point is a full target. */\n.lintje-chart__hit { fill: transparent; }\n.lintje-chart__hit.is-clickable { cursor: pointer; }\n\n/* An event: a numbered square above the plot with a solid line to the zero line — apart from\n the dashed as-of line — and its text in a list under the chart and in the tooltip. */\n.lintje-chart__event-line { stroke: var(--color-chart-axis); stroke-width: 1px; }\n.lintje-chart__event-chip { fill: var(--color-text-primary); }\n.lintje-chart__event-number {\n font-family: var(--font-ui);\n font-size: 0.75rem;\n font-weight: 700;\n fill: var(--color-text-inverse);\n}\n/* The square stands in a box one line of its text tall, so it centres on the first line. The\n size comes from the drawing (`--lintje-event-size`), where the squares are measured. */\n.lintje-event-chip { flex: none; display: flex; align-items: center; height: 1lh; }\n.lintje-event-chip__number {\n width: var(--lintje-event-size);\n height: var(--lintje-event-size);\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--color-text-primary);\n color: var(--color-text-inverse);\n font-family: var(--font-ui);\n font-size: 0.75rem;\n font-weight: 700;\n}\n.lintje-chart-events {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n margin-top: var(--space-3);\n font: var(--text-small);\n color: var(--color-text-primary);\n}\n.lintje-chart-events__item { display: flex; align-items: flex-start; gap: var(--space-2); }\n.lintje-chart-events__category { font-weight: 700; }\n\n\n/* --- States -------------------------------------------------------------- */\n/* Loading uses a skeleton per chart type, exactly as tall as the chart it stands in for. */\n/* The stand-in grows into a tile that is taller than it: a tile that holds its height\n while it fetches again or stretches to its row. `height` stays\n the basis, so where there is no room to take nothing changes; in a held box that is\n shorter than the stand-in it shrinks to fit. */\n.lintje-chart-skeleton { position: relative; min-width: 0; overflow: hidden; flex: 1 1 auto; min-height: 0; }\n/* Line, area and bars: \"assen echt, datavlak één glanzend blok\". Real axis lines around one\n shimmering block, in the charts' plot area (left 52, right 8, top 16, bottom 28). The axis\n labels load with the data: four bars in the gutter, from the top line to the zero line where\n the labels sit, and three below the axis, so the gutter doesn't read as empty. */\n.lintje-chart-skeleton__plot {\n position: absolute;\n top: 16px; right: 8px; bottom: 28px; left: 52px;\n border-left: 1px solid var(--color-chart-grid);\n border-bottom: 1px solid var(--color-chart-zero);\n}\n.lintje-chart-skeleton__fill { position: absolute; inset: 0; }\n.lintje-chart-skeleton__y-labels {\n position: absolute;\n top: 11px; bottom: 23px; left: 0; width: 44px;\n display: flex; flex-direction: column; justify-content: space-between; align-items: flex-end;\n}\n.lintje-chart-skeleton__x-labels {\n position: absolute;\n right: 8px; bottom: 7px; left: 52px;\n display: flex; justify-content: space-between;\n}\n/* Pie and donut: \"ring + drie legendaregels\", a disc for the pie and a ring\n with a 62 % hole for the donut, beside three lines. The skeleton is a size container: the disc\n is never taller than the skeleton, never wider than 60 % of it and at most 200 px, so the lines\n keep their room in a narrow tile. */\n.lintje-chart-skeleton--pie,\n.lintje-chart-skeleton--donut { container-type: size; display: flex; align-items: center; gap: var(--space-5); }\n.lintje-chart-skeleton__disc {\n position: relative;\n flex: none;\n aspect-ratio: 1;\n border-radius: var(--radius-round);\n}\n.lintje-chart-skeleton--donut .lintje-chart-skeleton__disc::after {\n content: '';\n position: absolute;\n inset: 19%;\n border-radius: var(--radius-round);\n background: var(--color-bg-surface);\n}\n.lintje-chart-skeleton__lines {\n flex: 1;\n min-width: 0;\n max-width: 240px;\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n}\n/* Heatmap: \"cellen glanzen individueel\" — cells with the heatmap's 3 px gutter, each with its\n own sweep. */\n.lintje-chart-skeleton--heatmap {\n display: grid;\n grid-template-columns: repeat(7, minmax(0, 1fr));\n grid-template-rows: repeat(5, minmax(0, 1fr));\n gap: 3px;\n}\n/* Map: \"kaartvlak glanst, overlays echt\" — the map area shimmers; the zoom buttons are drawn\n as on the map (48 px, top right). */\n.lintje-chart-skeleton__zoom {\n position: absolute;\n top: var(--space-2); right: var(--space-2);\n display: flex;\n flex-direction: column;\n}\n.lintje-chart-skeleton__zoom-button {\n width: var(--h-target); height: var(--h-target);\n display: flex; align-items: center; justify-content: center;\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n border: 1px solid var(--color-border-strong);\n margin-top: -1px;\n}\n.lintje-chart-skeleton__zoom-button:first-child { margin-top: 0; }\n/* Table: \"5 rijen\" — five rows at the table's row height. */\n.lintje-chart-skeleton--table { display: flex; flex-direction: column; }\n.lintje-chart-skeleton__row {\n flex: none;\n height: var(--h-table-row);\n display: flex;\n align-items: center;\n gap: var(--space-6);\n padding: 0 var(--space-3);\n border-bottom: 1px solid var(--color-border-default);\n}\n.lintje-chart-skeleton__measure { margin-left: auto; }\n\n/* --- Forced colours ------------------------------------------------------- */\n/* One colour per variable is what tells the series apart, and the legend's\n marker is what ties a colour to a name: with the reader's palette they would\n all come out one colour. So the data marks and the markers keep their drawing\n (`forced-color-adjust: none`) — the bars, segments and slices, the lines and\n their areas, the hover point, the legend's and the tooltip's markers — and\n nothing else does: the axes, the grid, the labels and the titles take the\n reader's palette. A data label is forced again even where it stands in a\n group that is not (the stacked column), except one drawn ON a mark, which keeps\n its own colour against that mark. The halo behind a label is the surface, so\n Canvas, and so are the gap between segments and the one inside the focus\n ring. The chosen mark is outlined in CanvasText and the focused one ringed in\n Highlight. */\n@media (forced-colors: active) {\n .lintje-chart__bar,\n .lintje-chart__mark,\n .lintje-chart__line,\n .lintje-chart__reveal,\n .lintje-chart__hover-point,\n .lintje-chart__hover-casing,\n .lintje-chart__hit,\n .lintje-legend__marker,\n .lintje-chart-tooltip__marker,\n .lintje-event-chip__number { forced-color-adjust: none; }\n .lintje-chart__data-label { forced-color-adjust: auto; }\n /* Text in the reader's palette by name, not left to the engine: not every\n engine repaints an SVG `fill`, and near-black on a black Canvas is nothing. */\n .lintje-chart__axis-label,\n .lintje-chart__data-label,\n .lintje-chart__as-of-label,\n .lintje-chart__as-of-note,\n .lintje-chart__x-title,\n .lintje-radar__name { fill: CanvasText; }\n .lintje-radar__ring,\n .lintje-radar__spoke,\n .lintje-radar__zero { stroke: CanvasText; }\n .lintje-chart__data-label--inside { forced-color-adjust: none; fill: var(--color-text-on-fill); }\n .lintje-chart__data-label--inside-light { forced-color-adjust: none; fill: var(--color-text-on-light-fill); }\n .lintje-chart__data-label--halo,\n .lintje-chart__as-of-note { stroke: Canvas; }\n .lintje-chart__axis-label--halo { stroke: Canvas; }\n .lintje-chart__segment { stroke: Canvas; }\n .lintje-chart__mark.is-selected { stroke: CanvasText; }\n .lintje-chart__focus-ring { flood-color: Highlight; }\n .lintje-chart__focus-gap { flood-color: Canvas; }\n /* An event's square in the reader's text colour, its number in the canvas. */\n .lintje-chart__event-line { stroke: CanvasText; }\n .lintje-chart__event-chip { fill: CanvasText; }\n .lintje-chart__event-number { fill: Canvas; }\n .lintje-event-chip__number { background: CanvasText; color: Canvas; }\n}\n", p = ".lintje-pie-chart {\n display: flex; gap: var(--space-8); align-items: center; justify-content: center; flex-wrap: wrap;\n padding-top: var(--space-3);\n}\n.lintje-pie-chart--expanded { gap: var(--space-10); height: 100%; padding-top: 0; }\n.lintje-pie-chart--expanded .lintje-pie-chart__table { flex: 0 1 440px; min-width: 260px; }\n.lintje-pie-chart__center { font-family: var(--font-ui); font-size: 1.5rem; font-weight: 700; fill: var(--color-text-primary); }\n.lintje-pie-chart__table { flex: 1; min-width: 200px; border-collapse: collapse; font: var(--text-small); }\n.lintje-pie-chart__column-label,\n.lintje-pie-chart__label,\n.lintje-pie-chart__value,\n.lintje-pie-chart__total-label,\n.lintje-pie-chart__total { padding: 5px 0; text-align: left; font-weight: 400; }\n.lintje-pie-chart__column-label {\n font-size: var(--label-size); font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking); text-transform: uppercase;\n color: var(--color-text-muted);\n border-bottom: 1px solid var(--color-border-default);\n}\n/* The numeric columns sit right-aligned under their heading, a fixed step from their neighbour. */\n.lintje-pie-chart__column-label--numeric,\n.lintje-pie-chart__value,\n.lintje-pie-chart__total { padding-left: var(--space-4); text-align: right; }\n.lintje-pie-chart__value,\n.lintje-pie-chart__total { font-variant-numeric: tabular-nums; }\n.lintje-pie-chart__label { display: flex; align-items: center; gap: 6px; }\n.lintje-pie-chart__total-label,\n.lintje-pie-chart__total {\n font-weight: 700; border-top: 1px solid var(--color-border-default); padding-top: 6px;\n}\n.lintje-pie-chart__marker { width: 10px; height: 10px; flex: none; display: block; }\n\n/* Hover scales the segment around the center, so its side edges keep their angle. The shadow\n sits on a copy on top (`__lift`); the segment itself only scales and eases back. */\n.lintje-pie-chart__svg { overflow: visible; flex: none; }\n.lintje-pie-chart__segment { transition: transform var(--dur-hover) var(--ease-in-motion); }\n.lintje-pie-chart__segment.is-hovered { transform: scale(1.03); }\n.lintje-pie-chart__lift {\n pointer-events: none;\n transform: scale(1.03);\n filter: drop-shadow(var(--shadow-chart-hover));\n animation: lintje-pie-lift var(--dur-hover) var(--ease-in-motion) backwards;\n}\n@keyframes lintje-pie-lift { from { transform: none; filter: none; } }\n.lintje-pie-chart__row.is-hovered { background: var(--color-bg-subtle); }\n/* The chosen row carries the outline the chosen slice has (rule 13). */\n.lintje-pie-chart__row.is-muted .lintje-pie-chart__marker { opacity: .45; }\n.lintje-pie-chart__row.is-selected .lintje-pie-chart__marker { outline: 2px solid var(--color-text-primary); }\n.lintje-pie-chart__row.is-selected .lintje-pie-chart__label { font-weight: 700; }\n\n/* Forced colours: the slices, the lifted copy and the table's swatches keep their colours (as\n `chart.css`); the chosen row's swatch is outlined in CanvasText. */\n@media (forced-colors: active) {\n .lintje-pie-chart__lift,\n .lintje-pie-chart__marker { forced-color-adjust: none; }\n .lintje-pie-chart__center { fill: CanvasText; }\n .lintje-pie-chart__row.is-selected .lintje-pie-chart__marker { outline-color: CanvasText; }\n}\n", m = ".lintje-heatmap { display: flex; flex-direction: column; gap: var(--space-3); min-width: 0; }\n.lintje-heatmap__grid { border-collapse: separate; border-spacing: 3px; width: 100%; }\n.lintje-heatmap__column-label,\n.lintje-heatmap__row-label {\n font: var(--text-axis);\n font-weight: 400;\n color: var(--color-text-muted);\n text-align: center;\n padding: 2px;\n}\n/* `width: 1%` keeps the auto table layout from handing the label column surplus width; a longer\n label ends in an ellipsis. */\n.lintje-heatmap__row-label { text-align: right; padding-right: var(--space-2); white-space: nowrap; width: 1%; }\n.lintje-heatmap__row-label-text { display: block; max-width: 160px; overflow: hidden; text-overflow: ellipsis; }\n.lintje-heatmap__slot { padding: 0; }\n\n.lintje-heatmap__cell {\n width: 100%;\n height: 34px;\n display: flex; align-items: center; justify-content: center;\n font-size: 0.75rem;\n font-weight: 700;\n font-variant-numeric: tabular-nums;\n /* The class range is the same in both modes, so the text on it is too: ink up to the fourth\n rung (5.9:1), white on the darkest (4.5:1). */\n background: var(--lintje-cell);\n color: var(--color-text-on-light-fill);\n transition: background-color var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-heatmap__cell--class-4 { color: var(--color-text-on-fill); }\n.lintje-heatmap__cell--class-0 { box-shadow: inset 0 0 0 1px var(--color-border-default); }\n.lintje-heatmap__cell.is-selected { outline: 2px solid currentColor; outline-offset: -2px; }\n/* A cell steps back by its fill alone, mixed into the surface; the figure stays in the text\n colour, which reaches 4.5:1 on every rung so mixed, in both modes. */\n.lintje-heatmap__cell.is-dimmed {\n background: color-mix(in srgb, var(--lintje-cell) 25%, var(--color-bg-surface));\n color: var(--color-text-primary);\n}\n/* A drilling cell that is not chosen steps back while a cell is chosen; less than the legend's\n dimming, which answers \"show me this class\". */\n.lintje-heatmap__cell.is-muted {\n background: color-mix(in srgb, var(--lintje-cell) 40%, var(--color-bg-surface));\n color: var(--color-text-primary);\n}\n.lintje-heatmap__cell.is-empty { background: var(--color-bg-subtle); }\n\n/* Cells fade in left to right, then top to bottom. Fill mode `backwards`: a held opacity would\n override a dimmed class. The paused declaration follows the shorthand, see chart.css. */\n@media (prefers-reduced-motion: no-preference) {\n .lintje-heatmap__cell:not(.is-empty) {\n animation: lintje-fade-in calc(var(--dur-draw) * 0.6) ease-in-out calc(var(--dur-draw) * 0.4 * var(--lintje-stagger, 0)) backwards;\n animation-play-state: paused;\n }\n [data-in-view] .lintje-heatmap__cell:not(.is-empty) { animation-play-state: running; }\n}\n\n.lintje-heatmap__selection {\n min-height: var(--h-touch);\n display: flex; align-items: center; gap: 6px;\n padding: 0 var(--space-3);\n background: var(--color-bg-subtle);\n font: var(--text-small);\n}\n\n.lintje-heatmap__legend { display: flex; gap: var(--space-2) var(--space-4); flex-wrap: wrap; font: var(--text-small); }\n.lintje-heatmap__legend-item {\n display: flex; align-items: center; gap: 6px;\n font: inherit; color: var(--color-text-primary);\n}\n.lintje-heatmap__legend-item[aria-pressed='true'] { font-weight: 700; }\n/* Only the swatch steps back: the word keeps its contrast. */\n.lintje-heatmap__legend-item.is-dimmed .lintje-heatmap__swatch { opacity: 0.45; }\n.lintje-heatmap__swatch {\n width: 12px; height: 12px; display: block; flex: none;\n transition: opacity var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-heatmap__swatch--class-0 { box-shadow: inset 0 0 0 1px var(--color-border-default); }\n\n/* Forced colours: the class colours are the heatmap, so cells and swatches keep them\n (`forced-color-adjust: none`). */\n@media (forced-colors: active) {\n .lintje-heatmap__cell,\n .lintje-heatmap__swatch { forced-color-adjust: none; }\n}\n", h = r(f), g = [
|
|
138
|
+
h,
|
|
139
|
+
r(p),
|
|
140
|
+
r(m),
|
|
141
|
+
i
|
|
142
|
+
];
|
|
143
|
+
//#endregion
|
|
144
|
+
//#region src/components/shared/download.ts
|
|
145
|
+
function _(e) {
|
|
146
|
+
if (e == null) return "";
|
|
147
|
+
let t = typeof e == "number" ? String(e).replace(".", ",") : e;
|
|
148
|
+
return /[";\n\r]/.test(t) ? `"${t.replace(/"/g, "\"\"")}"` : t;
|
|
149
|
+
}
|
|
150
|
+
function v(e) {
|
|
151
|
+
return e.map((e) => e.map(_).join(";")).join("\r\n");
|
|
152
|
+
}
|
|
153
|
+
function y(e, t) {
|
|
154
|
+
let n = URL.createObjectURL(e), r = document.createElement("a");
|
|
155
|
+
r.href = n, r.download = t, r.click(), setTimeout(() => URL.revokeObjectURL(n), 0);
|
|
156
|
+
}
|
|
157
|
+
function b(e, t) {
|
|
158
|
+
let n = e.toLowerCase().endsWith(".csv") ? e : `${e}.csv`;
|
|
159
|
+
y(new Blob(["", v(t)], { type: "text/csv;charset=utf-8" }), n);
|
|
160
|
+
}
|
|
161
|
+
var x = [
|
|
162
|
+
"fill",
|
|
163
|
+
"fill-opacity",
|
|
164
|
+
"stroke",
|
|
165
|
+
"stroke-width",
|
|
166
|
+
"stroke-dasharray",
|
|
167
|
+
"stroke-linecap",
|
|
168
|
+
"stroke-linejoin",
|
|
169
|
+
"opacity",
|
|
170
|
+
"font-family",
|
|
171
|
+
"font-size",
|
|
172
|
+
"font-weight",
|
|
173
|
+
"text-anchor",
|
|
174
|
+
"dominant-baseline",
|
|
175
|
+
"letter-spacing"
|
|
176
|
+
];
|
|
177
|
+
function S(e, t) {
|
|
178
|
+
let n = getComputedStyle(e), r = t.style;
|
|
179
|
+
for (let e of x) r.setProperty(e, n.getPropertyValue(e));
|
|
180
|
+
let i = e.children, a = t.children;
|
|
181
|
+
for (let e = 0; e < i.length; e += 1) {
|
|
182
|
+
let t = a[e];
|
|
183
|
+
t && S(i[e], t);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
function C(e) {
|
|
187
|
+
let t = (e) => getComputedStyle(e).getPropertyValue("--color-bg-surface").trim();
|
|
188
|
+
return t(e) || t(document.documentElement);
|
|
189
|
+
}
|
|
190
|
+
async function w(e, t) {
|
|
191
|
+
let n = e.toLowerCase().endsWith(".png") ? e : `${e}.png`, r = t.getBoundingClientRect(), i = Math.max(1, Math.round(r.width)), a = Math.max(1, Math.round(r.height)), o = t.cloneNode(!0);
|
|
192
|
+
o.setAttribute("xmlns", "http://www.w3.org/2000/svg"), o.setAttribute("width", String(i)), o.setAttribute("height", String(a)), S(t, o);
|
|
193
|
+
let s = C(t), c = new XMLSerializer().serializeToString(o), l = new Image();
|
|
194
|
+
l.decoding = "sync", await new Promise((e, t) => {
|
|
195
|
+
l.onload = () => e(), l.onerror = () => t(/* @__PURE__ */ Error("svg")), l.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(c)}`;
|
|
196
|
+
});
|
|
197
|
+
let u = document.createElement("canvas");
|
|
198
|
+
u.width = i * 2, u.height = a * 2;
|
|
199
|
+
let d = u.getContext("2d");
|
|
200
|
+
if (!d) return;
|
|
201
|
+
s && (d.fillStyle = s, d.fillRect(0, 0, u.width, u.height)), d.drawImage(l, 0, 0, u.width, u.height);
|
|
202
|
+
let f = await new Promise((e) => u.toBlob(e, "image/png"));
|
|
203
|
+
f && y(f, n);
|
|
204
|
+
}
|
|
205
|
+
//#endregion
|
|
206
|
+
export { d as a, s as c, g as i, w as n, l as o, h as r, c as s, b as t };
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { P as e, en as t, nn as n, st as r, ut as i } from "./base-DRGvkF-r.js";
|
|
2
|
+
import { d as a, s as o, u as s } from "./controls-_4ac1Lpz.js";
|
|
3
|
+
//#region src/components/inputs/shared/field-foot.ts
|
|
4
|
+
function c(e, n, r) {
|
|
5
|
+
return n ? r.errorId : e ? r.hintId : t;
|
|
6
|
+
}
|
|
7
|
+
function l(e, r, a, o = !0) {
|
|
8
|
+
return r ? n`<span id=${a.errorId} class="lintje-field__error" role=${o ? "alert" : t}
|
|
9
|
+
>${i("functioneel-waarschuwing", { size: 14 })}${r}</span
|
|
10
|
+
>` : e ? n`<span id=${a.hintId} class="lintje-field__hint">${e}</span>` : t;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
//#region src/components/inputs/shared/input.ts
|
|
14
|
+
var u = "(niet verplicht)", d = "afwijkend van standaard", f = class extends e {
|
|
15
|
+
static {
|
|
16
|
+
this.properties = {
|
|
17
|
+
name: { type: String },
|
|
18
|
+
label: { type: String },
|
|
19
|
+
hideLabel: {
|
|
20
|
+
type: Boolean,
|
|
21
|
+
attribute: "hide-label"
|
|
22
|
+
},
|
|
23
|
+
hint: { type: String },
|
|
24
|
+
error: { type: String },
|
|
25
|
+
disabled: {
|
|
26
|
+
type: Boolean,
|
|
27
|
+
reflect: !0
|
|
28
|
+
},
|
|
29
|
+
modified: {
|
|
30
|
+
type: Boolean,
|
|
31
|
+
reflect: !0
|
|
32
|
+
},
|
|
33
|
+
required: {
|
|
34
|
+
type: Boolean,
|
|
35
|
+
reflect: !0
|
|
36
|
+
},
|
|
37
|
+
optional: { type: Boolean },
|
|
38
|
+
layout: {
|
|
39
|
+
type: String,
|
|
40
|
+
reflect: !0
|
|
41
|
+
},
|
|
42
|
+
resetLabel: {
|
|
43
|
+
type: String,
|
|
44
|
+
attribute: "reset-label"
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
static {
|
|
49
|
+
this.formAssociated = !0;
|
|
50
|
+
}
|
|
51
|
+
#e;
|
|
52
|
+
#t;
|
|
53
|
+
constructor() {
|
|
54
|
+
super(), this.name = "", this.label = "", this.hideLabel = !1, this.disabled = !1, this.modified = !1, this.required = !1, this.optional = !1, this.internals = typeof this.attachInternals == "function" ? this.attachInternals() : null, this.#t = !1, this.addController({ hostUpdated: () => this.syncForm() });
|
|
55
|
+
}
|
|
56
|
+
get postedValue() {
|
|
57
|
+
return s(this);
|
|
58
|
+
}
|
|
59
|
+
syncForm() {
|
|
60
|
+
if (this.#t || (this.#t = !0, this.#e = structuredClone(s(this))), !this.internals) return;
|
|
61
|
+
let e = new FormData();
|
|
62
|
+
if (this.name && !this.disabled) for (let [t, n] of o(this.name, this.postedValue)) e.append(t, n);
|
|
63
|
+
this.internals.setFormValue(e);
|
|
64
|
+
}
|
|
65
|
+
formResetCallback() {
|
|
66
|
+
a(this, structuredClone(this.#e));
|
|
67
|
+
}
|
|
68
|
+
formDisabledCallback(e) {
|
|
69
|
+
this.disabled = e;
|
|
70
|
+
}
|
|
71
|
+
get labelId() {
|
|
72
|
+
return "lintje-input-label";
|
|
73
|
+
}
|
|
74
|
+
get controlId() {
|
|
75
|
+
return "lintje-input-control";
|
|
76
|
+
}
|
|
77
|
+
focusControl(e) {
|
|
78
|
+
if (this.disabled) return;
|
|
79
|
+
let t = this.renderRoot;
|
|
80
|
+
(t.querySelector(`#${this.controlId}`) ?? t.querySelector("input[type=\"radio\"]:checked:not(:disabled)") ?? [...t.querySelectorAll("input, select, button, textarea")].find((e) => !e.disabled))?.focus(e);
|
|
81
|
+
}
|
|
82
|
+
focus(e) {
|
|
83
|
+
this.focusControl(e);
|
|
84
|
+
}
|
|
85
|
+
get hintId() {
|
|
86
|
+
return "lintje-input-hint";
|
|
87
|
+
}
|
|
88
|
+
get errorId() {
|
|
89
|
+
return "lintje-input-error";
|
|
90
|
+
}
|
|
91
|
+
get footMessage() {
|
|
92
|
+
return this.error ?? "";
|
|
93
|
+
}
|
|
94
|
+
get describedBy() {
|
|
95
|
+
return c(this.hint, this.footMessage, {
|
|
96
|
+
hintId: this.hintId,
|
|
97
|
+
errorId: this.errorId
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
commit(e) {
|
|
101
|
+
this.announce(e);
|
|
102
|
+
}
|
|
103
|
+
announce(e, t = e) {
|
|
104
|
+
this.disabled || (this.emitLocal("lintje-change", e), this.name && this.emit("lintje-values-change", { [this.name]: t }));
|
|
105
|
+
}
|
|
106
|
+
renderLabel(e, i = t) {
|
|
107
|
+
let a = () => this.focusControl();
|
|
108
|
+
if (this.hideLabel) {
|
|
109
|
+
let t = this.renderLabelSuffix();
|
|
110
|
+
return e ? n`<label id=${this.labelId} for=${e} class="visually-hidden">${this.label} ${t}</label>` : n`<span id=${this.labelId} class="visually-hidden" @click=${a}>${this.label} ${t}</span>`;
|
|
111
|
+
}
|
|
112
|
+
let o = r({
|
|
113
|
+
"lintje-label": !0,
|
|
114
|
+
"is-modified": this.modified
|
|
115
|
+
}), s = this.modified ? n`<span class="lintje-label__dot"><span class="visually-hidden">${d}</span></span>` : t, c = this.renderLabelSuffix();
|
|
116
|
+
return e ? n`<label id=${this.labelId} for=${e} class=${o}>${this.label} ${c} ${s} ${i}</label>` : n`<span id=${this.labelId} class=${o} @click=${a}>${this.label} ${c} ${s} ${i}</span>`;
|
|
117
|
+
}
|
|
118
|
+
renderLabelSuffix() {
|
|
119
|
+
return this.isOptional ? n`<span class="lintje-label__optional">${u}</span>` : t;
|
|
120
|
+
}
|
|
121
|
+
get isOptional() {
|
|
122
|
+
return this.optional && !this.required;
|
|
123
|
+
}
|
|
124
|
+
get labelSuffixText() {
|
|
125
|
+
return [this.isOptional ? u : "", this.modified && !this.hideLabel ? d : ""].filter(Boolean).map((e) => ` ${e}`).join("");
|
|
126
|
+
}
|
|
127
|
+
get labelText() {
|
|
128
|
+
return this.label ? `${this.label}${this.labelSuffixText}` : "";
|
|
129
|
+
}
|
|
130
|
+
renderFoot() {
|
|
131
|
+
let e = l(this.hint, this.footMessage, {
|
|
132
|
+
hintId: this.hintId,
|
|
133
|
+
errorId: this.errorId
|
|
134
|
+
});
|
|
135
|
+
return !this.modified || !this.resetLabel ? e : n`${e}<button
|
|
136
|
+
type="button"
|
|
137
|
+
class="lintje-field__reset"
|
|
138
|
+
?disabled=${this.disabled}
|
|
139
|
+
@click=${() => {
|
|
140
|
+
this.focusControl(), this.emitLocal("lintje-reset");
|
|
141
|
+
}}
|
|
142
|
+
>
|
|
143
|
+
${this.resetLabel}
|
|
144
|
+
</button>`;
|
|
145
|
+
}
|
|
146
|
+
}, p = class extends f {
|
|
147
|
+
constructor(...e) {
|
|
148
|
+
super(...e), this.readonly = !1, this.initialValue = void 0;
|
|
149
|
+
}
|
|
150
|
+
static {
|
|
151
|
+
this.properties = {
|
|
152
|
+
name: {
|
|
153
|
+
type: String,
|
|
154
|
+
reflect: !0
|
|
155
|
+
},
|
|
156
|
+
readonly: {
|
|
157
|
+
type: Boolean,
|
|
158
|
+
reflect: !0
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
get nativeControl() {
|
|
163
|
+
return this.renderRoot.querySelector(`#${this.controlId}`);
|
|
164
|
+
}
|
|
165
|
+
announce(e, t = e) {
|
|
166
|
+
this.readonly || super.announce(e, t);
|
|
167
|
+
}
|
|
168
|
+
firstUpdated(e) {
|
|
169
|
+
super.firstUpdated(e), this.initialValue = this.value;
|
|
170
|
+
}
|
|
171
|
+
syncForm() {}
|
|
172
|
+
updated(e) {
|
|
173
|
+
super.updated(e);
|
|
174
|
+
let t = this.internals;
|
|
175
|
+
if (!t) return;
|
|
176
|
+
t.setFormValue(this.disabled ? null : this.formValue);
|
|
177
|
+
let n = this.nativeControl;
|
|
178
|
+
this.required && !this.disabled && !this.readonly && this.formValue === "" && n ? t.setValidity({ valueMissing: !0 }, n.validationMessage || "Vul dit veld in.", n) : t.setValidity({});
|
|
179
|
+
}
|
|
180
|
+
submitOnEnter(e, t) {
|
|
181
|
+
if (e.key !== "Enter" || e.isComposing || this.readonly || this.disabled) return;
|
|
182
|
+
t();
|
|
183
|
+
let n = this.internals?.form;
|
|
184
|
+
n && typeof n.requestSubmit == "function" && setTimeout(() => {
|
|
185
|
+
e.defaultPrevented || n.requestSubmit();
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
formResetCallback() {
|
|
189
|
+
this.value = this.initialValue;
|
|
190
|
+
let e = this.nativeControl;
|
|
191
|
+
e && (e.value = this.formValue), this.requestUpdate();
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
//#endregion
|
|
195
|
+
export { l as i, f as n, c as r, p as t };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
//#region src/components/inputs/shared/input.css?inline
|
|
2
|
+
var e = "/*\n * The fields' own boxes and the `.lintje-choice` rules of the checkbox, radio and toggle.\n * `lintje-data-table` adopts this sheet too for its selectable rows' checkbox; the\n * `:host(lintje-multiselect)` blocks do not match there.\n */\n:host(lintje-multiselect) {\n display: block;\n min-width: 0;\n width: 180px;\n}\n:host(lintje-range) {\n display: block;\n min-width: 0;\n width: 180px;\n}\n:host(lintje-text-input),\n:host(lintje-number-input),\n:host(lintje-checkbox),\n:host(lintje-checkbox-group),\n:host(lintje-toggle),\n:host(lintje-radio-group) {\n display: block;\n min-width: 0;\n}\n:host([hidden]) { display: none; }\n\n/* --- */\n\n/* Order matters in every field sheet: disabled wins over read-only, read-only over error, at\n equal specificity. A disabled control cannot be in error, so its rule sets the whole border. */\n\n.lintje-field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }\n.lintje-label {\n display: flex; align-items: baseline; gap: var(--space-2);\n font-size: 0.875rem; font-weight: 700; color: var(--color-text-primary);\n padding: 0;\n}\n.lintje-label.is-modified { color: var(--color-accent-text); }\n.lintje-label__dot {\n width: 6px; height: 6px; border-radius: var(--radius-round);\n background: var(--color-attention);\n flex: none; align-self: center;\n}\n:host([disabled]) .lintje-label { color: var(--color-text-disabled); }\n.lintje-label__optional { font-weight: 400; color: var(--color-text-muted); }\n:host([disabled]) .lintje-label__optional { color: var(--color-text-disabled); }\n/* A value and its unit stay together when a long label wraps. */\n.lintje-field__value { font-weight: 400; color: var(--color-text-muted); white-space: nowrap; }\n.lintje-field__hint { font: var(--text-meta); color: var(--color-text-muted); }\n.lintje-field__error {\n display: flex; align-items: center; gap: 6px;\n font: var(--text-meta); color: var(--color-error-text); font-weight: 700;\n}\n\n/* --- A setting's row: name and hint on the left, the control on the right ----- */\n/* A row reads its own width, not the screen's: in a drawer it stays a column. */\n:host([layout='row']) { width: 100%; container-type: inline-size; }\n@container (min-width: 35rem) {\n :host([layout='row']) .lintje-field {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, calc(8 * var(--space-10)));\n gap: var(--space-1) var(--space-8);\n align-items: center;\n }\n :host([layout='row']) .lintje-field > * { grid-column: 2; }\n /* Regular weight: the bold above it is the section's heading, the grey under it the hint. */\n :host([layout='row']) .lintje-field > .lintje-label {\n grid-column: 1; grid-row: 1;\n font: var(--text-ui);\n }\n :host([layout='row']) .lintje-field > .lintje-field__hint,\n :host([layout='row']) .lintje-field > .lintje-field__error { grid-column: 1; grid-row: 2; align-self: start; }\n :host([layout='row']) .lintje-field > .lintje-field__reset { grid-column: 1; grid-row: 3; }\n /* A switch is its own label: the row is the label, the switch stands at its right edge. */\n :host([layout='row']) .lintje-field > .lintje-choice {\n grid-column: 1 / -1; grid-row: 1;\n flex-direction: row-reverse; justify-content: space-between;\n }\n}\n\n/* Back to the default: a link, so it stays quieter than the field it belongs to. */\n.lintje-field__reset {\n align-self: flex-start;\n justify-self: start;\n min-height: var(--h-target);\n padding: 0;\n border: 0;\n background: none;\n color: var(--color-link);\n font: var(--text-meta);\n font-weight: 700;\n text-decoration: underline;\n cursor: pointer;\n}\n.lintje-field__reset:hover { color: var(--color-link-hover); }\n\n/* --- Checkbox, radio, toggle ---------------------------------------------- */\n.lintje-choice {\n display: flex; align-items: center; gap: 10px;\n min-height: var(--h-target);\n font-size: 1rem;\n cursor: pointer;\n}\n.lintje-choice__input { position: absolute; opacity: 0; width: 0; height: 0; }\n.lintje-choice__label.is-modified { color: var(--color-accent-text); font-weight: 700; }\n\n.lintje-choice__box {\n width: 24px; height: 24px; flex: none;\n display: flex; align-items: center; justify-content: center;\n border: 2px solid var(--color-border-choice);\n background: var(--color-bg-surface);\n color: var(--color-action-primary-text); font-size: 0.875rem; font-weight: 700; line-height: 1;\n transition: background-color var(--dur-hover) var(--ease-in-motion),\n border-color var(--dur-hover) var(--ease-in-motion);\n}\n/* The mark is always drawn and grows in when the box is checked, so checking and unchecking both move. */\n.lintje-choice__mark {\n opacity: 0; transform: scale(0.4);\n transition: opacity var(--dur-hover) var(--ease-in-motion),\n transform var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-choice__input:checked ~ .lintje-choice__box .lintje-choice__mark,\n.lintje-choice__input:indeterminate ~ .lintje-choice__box .lintje-choice__mark {\n opacity: 1; transform: none;\n}\n/* The border takes the primary-fill border: in dark the tint, so the box is no dark square. */\n.lintje-choice__input:checked ~ .lintje-choice__box,\n.lintje-choice__input:indeterminate ~ .lintje-choice__box {\n background: var(--color-accent); border-color: var(--color-action-primary-border);\n}\n.lintje-choice__input:focus-visible ~ .lintje-choice__box,\n.lintje-choice__input:focus-visible ~ .lintje-choice__radio,\n.lintje-choice__input:focus-visible ~ .lintje-choice__switch {\n outline: var(--focus-width) solid var(--color-focus);\n outline-offset: var(--focus-offset);\n}\n\n.lintje-choice__radio {\n width: 24px; height: 24px; flex: none;\n border: 2px solid var(--color-border-choice);\n border-radius: 50%;\n background: var(--color-bg-surface);\n display: flex; align-items: center; justify-content: center;\n}\n/* Ring and dot take the line accent: the dot stands on the surface by itself, so the primary\n fill would sink into the dark surface. */\n.lintje-choice__input:checked ~ .lintje-choice__radio { border-color: var(--color-accent-line); }\n.lintje-choice__input:checked ~ .lintje-choice__radio::after {\n content: ''; width: 12px; height: 12px; border-radius: 50%; background: var(--color-accent-line);\n}\n\n/* Off: edged with the field's edge (3:1, WCAG 1.4.11) as an inset ring, keeping the box size. */\n.lintje-choice__switch {\n box-sizing: border-box;\n width: 40px; height: 22px; flex: none;\n border-radius: 11px;\n /* Off is a filled track, not a pale one with a ring: the fill alone reaches 3:1. */\n background: var(--color-border-field);\n display: flex; align-items: center;\n padding: 2px;\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-choice__knob {\n width: 18px; height: 18px; display: block;\n border-radius: 50%;\n background: var(--color-bg-surface);\n transition: transform var(--dur-hover) var(--ease-in-motion);\n}\n/* An inset ring, not a border: a border would eat into the knob's inset and travel. */\n.lintje-choice__input:checked ~ .lintje-choice__switch {\n background: var(--color-accent);\n box-shadow: inset 0 0 0 1px var(--color-action-primary-border);\n}\n.lintje-choice__input:checked ~ .lintje-choice__switch .lintje-choice__knob { transform: translateX(18px); }\n\n.lintje-choice.is-disabled { color: var(--color-text-disabled); cursor: not-allowed; }\n.lintje-choice__input:disabled ~ .lintje-choice__box,\n.lintje-choice__input:disabled ~ .lintje-choice__radio {\n border-color: var(--color-border-strong);\n background: var(--color-bg-subtle);\n color: var(--color-text-disabled);\n}\n.lintje-choice__input:disabled:checked ~ .lintje-choice__box {\n background: var(--color-border-strong);\n}\n.lintje-choice__input:disabled:checked ~ .lintje-choice__radio::after {\n background: var(--color-border-strong);\n}\n/* After the checked rule, so a disabled switch also loses its inset ring. */\n.lintje-choice__input:disabled ~ .lintje-choice__switch { background: var(--color-border-default); box-shadow: none; }\n\n/* --- Stacked in the filter sheet ----------------------------------------- */\n:host([stacked]) {\n width: 100%;\n --h-control: var(--h-touch);\n}\n\n/* --- Forced colours ------------------------------------------------------- */\n/* Fills and box-shadows are dropped: the dot, pill and knob keep their drawing in system\n colours. The pill takes a 1 px border and gives up 1 px of its inset, so the knob's travel stays. */\n@media (forced-colors: active) {\n .lintje-label__dot { forced-color-adjust: none; background: CanvasText; }\n\n .lintje-choice__input:focus-visible ~ .lintje-choice__box,\n .lintje-choice__input:focus-visible ~ .lintje-choice__radio,\n .lintje-choice__input:focus-visible ~ .lintje-choice__switch { outline-color: Highlight; }\n\n .lintje-choice__input:checked ~ .lintje-choice__box,\n .lintje-choice__input:indeterminate ~ .lintje-choice__box,\n .lintje-choice__input:checked ~ .lintje-choice__radio { border-color: Highlight; }\n .lintje-choice__radio::after { forced-color-adjust: none; }\n .lintje-choice__input:checked ~ .lintje-choice__radio::after { background: Highlight; }\n\n .lintje-choice__switch { border: 1px solid CanvasText; padding: 1px; }\n .lintje-choice__input:checked ~ .lintje-choice__switch { border-color: Highlight; }\n .lintje-choice__knob { forced-color-adjust: none; background: CanvasText; }\n .lintje-choice__input:checked ~ .lintje-choice__switch .lintje-choice__knob { background: Highlight; }\n\n .lintje-choice__input:disabled ~ .lintje-choice__box,\n .lintje-choice__input:disabled ~ .lintje-choice__radio,\n .lintje-choice__input:disabled ~ .lintje-choice__switch { border-color: GrayText; }\n .lintje-choice__input:disabled:checked ~ .lintje-choice__radio::after,\n .lintje-choice__input:disabled ~ .lintje-choice__switch .lintje-choice__knob { background: GrayText; }\n .lintje-choice.is-disabled { color: GrayText; }\n}\n";
|
|
3
|
+
//#endregion
|
|
4
|
+
export { e as t };
|