lintje 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist-elements/actions.js +1 -1
- package/dist-elements/chunks/{base-Bg-IFOPG.js → base-CbmWxUig.js} +444 -272
- package/dist-elements/chunks/{controls-B1455oPG.js → controls-DxmnDSBr.js} +6 -0
- package/dist-elements/chunks/dialog-DChINFxD.js +28 -0
- package/dist-elements/chunks/{disclosure-BXTX04gM.js → disclosure-D39vAR5q.js} +1 -1
- package/dist-elements/chunks/{disclosure-CMXhX-Vb.js → disclosure-DLkXPUpV.js} +6 -6
- package/dist-elements/chunks/download-Ct9q2anY.js +206 -0
- package/dist-elements/chunks/{focus-trap-9BnE-xWv.js → focus-trap-BwOxE5BX.js} +1 -1
- package/dist-elements/chunks/input-CRW_exv_.js +195 -0
- package/dist-elements/chunks/{player-DXOZEyEy.js → player-B8QXJ0Z5.js} +26 -26
- package/dist-elements/chunks/{sentence-BI3lwEuT.js → sentence-B19AyZBS.js} +3 -3
- package/dist-elements/chunks/{stagger-qGD3wmhg.js → stagger-BHoOgy0g.js} +81 -75
- package/dist-elements/core.js +1 -1
- package/dist-elements/custom-elements.json +980 -670
- package/dist-elements/data-types.json +6798 -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 +8 -7
- package/dist-elements/guides/page-contents.md +110 -0
- package/dist-elements/guides/start.md +12 -0
- package/dist-elements/inputs.js +2 -1
- package/dist-elements/layout.js +1 -1
- package/dist-elements/lintje.js +6975 -6120
- 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.js +1 -1
- package/dist-elements/tag/breadcrumbs.js +15 -15
- 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 +1050 -795
- 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 +59 -0
- package/dist-elements/tag/checkbox.js +8 -8
- package/dist-elements/tag/code.js +9 -9
- package/dist-elements/tag/combobox.js +18 -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 +878 -530
- package/dist-elements/tag/date-input.js +30 -30
- package/dist-elements/tag/date-range.js +37 -37
- 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 +34 -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/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.js +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.js +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 +146 -137
- 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 +690 -665
- package/dist-elements/tag/menu-button.js +70 -69
- package/dist-elements/tag/modal.js +28 -37
- package/dist-elements/tag/multiselect.js +34 -34
- package/dist-elements/tag/note.js +5 -5
- package/dist-elements/tag/notifications.js +36 -36
- package/dist-elements/tag/number-input.js +12 -12
- package/dist-elements/tag/page-header.js +140 -37
- package/dist-elements/tag/pagination.js +53 -48
- package/dist-elements/tag/popover.js +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 +12 -12
- package/dist-elements/tag/range.js +22 -22
- package/dist-elements/tag/recording-status.js +14 -14
- package/dist-elements/tag/repeater.js +10 -10
- package/dist-elements/tag/segmented.js +13 -13
- package/dist-elements/tag/select.js +10 -10
- package/dist-elements/tag/shell.js +356 -339
- package/dist-elements/tag/skeleton.js +1 -1
- package/dist-elements/tag/slot-picker.js +14 -14
- package/dist-elements/tag/sortable-list.js +14 -14
- package/dist-elements/tag/spinner.js +1 -1
- package/dist-elements/tag/split-pane.js +12 -12
- 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 +19 -19
- package/dist-elements/tag/text-editor.js +24 -24
- package/dist-elements/tag/text-input.js +14 -14
- package/dist-elements/tag/textarea.js +14 -14
- package/dist-elements/tag/tile.js +1 -1
- package/dist-elements/tag/time-input.js +19 -19
- package/dist-elements/tag/toast.js +32 -23
- package/dist-elements/tag/toggle.js +8 -8
- package/dist-elements/tag/toggletip.js +27 -27
- 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/types/bundle/feedback.d.ts +1 -0
- package/dist-elements/types/bundle/frame.d.ts +0 -2
- package/dist-elements/types/bundle/inputs.d.ts +1 -0
- package/dist-elements/types/bundle/overlays.d.ts +1 -1
- package/dist-elements/types/components/actions/copy-button/copy-button.d.ts +6 -7
- package/dist-elements/types/components/actions/menu-button/menu-button.d.ts +13 -15
- package/dist-elements/types/components/actions/qr-code/qr-code.d.ts +9 -9
- package/dist-elements/types/components/charts/chart/chart.d.ts +5 -4
- package/dist-elements/types/components/charts/kpi/kpi.d.ts +16 -8
- package/dist-elements/types/components/charts/kpi-row/kpi-row.d.ts +1 -7
- package/dist-elements/types/components/charts/note/note.d.ts +1 -1
- package/dist-elements/types/components/chat/chat/chat.d.ts +8 -10
- package/dist-elements/types/components/chat/chat-answer/chat-answer.d.ts +7 -8
- package/dist-elements/types/components/chat/chat-composer/chat-composer.d.ts +8 -10
- package/dist-elements/types/components/chat/chat-message/chat-message.d.ts +6 -7
- 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 +10 -12
- package/dist-elements/types/components/content/code/code.d.ts +2 -3
- package/dist-elements/types/components/content/document-viewer/document-viewer.d.ts +8 -9
- package/dist-elements/types/components/content/gallery/gallery.d.ts +5 -4
- package/dist-elements/types/components/content/highlight/highlight.d.ts +4 -3
- package/dist-elements/types/components/content/prose/prose.d.ts +2 -3
- package/dist-elements/types/components/content/transcript/transcript.d.ts +12 -25
- package/dist-elements/types/components/content/translator/translator.d.ts +11 -15
- package/dist-elements/types/components/content/video-player/video-player.d.ts +11 -13
- package/dist-elements/types/components/feedback/ai-label/ai-label.d.ts +3 -4
- package/dist-elements/types/components/feedback/announcement/announcement.d.ts +3 -7
- package/dist-elements/types/components/feedback/conflict-alert/conflict-alert.d.ts +3 -4
- 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/components/feedback/recording-status/recording-status.d.ts +5 -6
- package/dist-elements/types/components/feedback/streaming-text/streaming-text.d.ts +10 -7
- 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 +5 -5
- 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 +5 -6
- package/dist-elements/types/components/forms/form/form.d.ts +5 -5
- package/dist-elements/types/components/forms/form-actions/form-actions.d.ts +9 -7
- package/dist-elements/types/components/forms/form-section/form-section.d.ts +6 -5
- package/dist-elements/types/components/forms/repeater/repeater.d.ts +13 -7
- package/dist-elements/types/components/forms/stepper/stepper.d.ts +5 -4
- package/dist-elements/types/components/frame/app-search/app-search.d.ts +6 -7
- 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 +5 -9
- package/dist-elements/types/components/frame/page-header/page-header.d.ts +12 -15
- package/dist-elements/types/components/frame/shell/shell.d.ts +14 -13
- 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 +11 -10
- package/dist-elements/types/components/index.d.ts +8 -9
- 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 +12 -6
- package/dist-elements/types/components/inputs/date-input/date-input.d.ts +5 -5
- package/dist-elements/types/components/inputs/date-range/date-range.d.ts +11 -6
- package/dist-elements/types/components/inputs/field/field.d.ts +5 -3
- package/dist-elements/types/components/inputs/file-upload/file-upload.d.ts +6 -8
- 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/slot-picker/slot-picker.d.ts +6 -5
- package/dist-elements/types/components/inputs/tag-input/tag-input.d.ts +7 -5
- package/dist-elements/types/components/inputs/text-editor/text-editor.d.ts +6 -6
- package/dist-elements/types/components/inputs/text-input/text-input.d.ts +11 -6
- package/dist-elements/types/components/inputs/textarea/textarea.d.ts +12 -11
- package/dist-elements/types/components/inputs/time-input/time-input.d.ts +7 -8
- package/dist-elements/types/components/inputs/toggle/toggle.d.ts +3 -1
- package/dist-elements/types/components/layout/expander/expander.d.ts +9 -10
- package/dist-elements/types/components/layout/split-pane/split-pane.d.ts +6 -6
- package/dist-elements/types/components/layout/tabs/tabs.d.ts +11 -9
- package/dist-elements/types/components/map/map/map.d.ts +10 -9
- 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 +7 -12
- package/dist-elements/types/components/overlays/toggletip/toggletip.d.ts +3 -7
- package/dist-elements/types/components/shared/charts/index.d.ts +4 -1
- package/dist-elements/types/components/shared/charts/kinds.d.ts +86 -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/shared/chart-states.d.ts +8 -19
- package/dist-elements/types/components/shared/charts/shared/controller.d.ts +7 -0
- package/dist-elements/types/components/shared/charts/shared/types.d.ts +29 -0
- package/dist-elements/types/components/shared/charts/stacked-area-chart/stacked-area-chart.d.ts +13 -0
- package/dist-elements/types/components/shared/dialog.d.ts +9 -0
- package/dist-elements/types/components/shared/overflow.d.ts +58 -0
- package/dist-elements/types/components/tables/activity-log/activity-log.d.ts +2 -3
- package/dist-elements/types/components/tables/card/card.d.ts +14 -20
- package/dist-elements/types/components/tables/card-list/card-list.d.ts +9 -11
- package/dist-elements/types/components/tables/data-table/data-table.d.ts +85 -16
- package/dist-elements/types/components/tables/data-table/filters.d.ts +13 -4
- package/dist-elements/types/components/tables/description-list/description-list.d.ts +12 -11
- package/dist-elements/types/components/tables/list/list.d.ts +9 -20
- 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 +4 -4
- 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/icon/icon.d.ts +2 -3
- package/dist-elements/types/icons/register.d.ts +1 -1
- package/dist-elements/types/primitives/badge/badge.d.ts +9 -5
- package/dist-elements/types/primitives/button/button.d.ts +12 -9
- package/dist-elements/types/primitives/grid/grid.d.ts +3 -3
- package/dist-elements/types/primitives/grid-item/grid-item.d.ts +1 -1
- package/dist-elements/types/primitives/icon-button/icon-button.d.ts +7 -5
- package/dist-elements/types/primitives/index.d.ts +3 -1
- package/dist-elements/types/primitives/popover/popover.d.ts +5 -4
- package/dist-elements/types/primitives/progress-bar/progress-bar.d.ts +8 -6
- package/dist-elements/types/primitives/shared/announcement-block.d.ts +38 -0
- package/dist-elements/types/primitives/shared/empty-state-block.d.ts +26 -0
- package/dist-elements/types/primitives/shared/tone.d.ts +18 -0
- package/dist-elements/types/primitives/skeleton/skeleton.d.ts +1 -1
- package/dist-elements/types/primitives/spinner/spinner.d.ts +1 -2
- package/dist-elements/types/primitives/status-dot/status-dot.d.ts +4 -5
- package/dist-elements/types/primitives/tile/tile.d.ts +17 -5
- package/dist-elements/types/primitives/tooltip/tooltip.d.ts +6 -6
- 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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/core/version.ts
|
|
2
|
-
var e = "0.
|
|
2
|
+
var e = "0.3.0", t = globalThis, n = t.ShadowRoot && (t.ShadyCSS === void 0 || t.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype, r = Symbol(), i = /* @__PURE__ */ new WeakMap(), a = class {
|
|
3
3
|
constructor(e, t, n) {
|
|
4
4
|
if (this._$cssResult$ = !0, n !== r) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");
|
|
5
5
|
this.cssText = e, this.t = t;
|
|
@@ -521,7 +521,7 @@ var Re = Le.litElementPolyfillSupport;
|
|
|
521
521
|
Re?.({ LitElement: k }), (Le.litElementVersions ??= []).push("4.2.2");
|
|
522
522
|
//#endregion
|
|
523
523
|
//#region src/tokens/tokens.css?inline
|
|
524
|
-
var ze = "/* ============================================================================\n Lintje — design tokens\n\n Colour is in three groups: themable UI colour (a theme sets only `--primary` and `--accent`, in\n `themes.css`), fixed data colour (`--data-*`, identical in every\n mode and theme except the two grays) and fixed status colour (`--status-*`).\n\n Three layers, one direction: component -> semantic (`--color-*`) -> primitives. Only the\n primitive blocks may hold a colour literal. To change a colour in one mode, re-point the\n layer-2 name inside `[data-mode='dark']`.\n\n `color-mix(in srgb, …)` and the relative `oklch(from …)` need Chrome/Edge 122+, Firefox 128+\n or Safari 18+;\n `colour-scheme.test.ts` repeats the arithmetic. The `@font-face` rules live in `fonts.css`:\n they cannot work inside a shadow root.\n ========================================================================= */\n\n/* ============================================================================\n Layer 1 — primitives (the only literals)\n ========================================================================= */\n:root {\n /* --- Neutral (light). The one mode-dependent primitive family ----------\n Neutral-5 is the cool-grey step 600, not 500, because it carries muted TEXT:\n #64748B is 4.34:1 on neutral-2, #475569 is 6.92:1. */\n --neutral-0: #FFFFFF;\n --neutral-1: #F8FAFC;\n --neutral-2: #F1F5F9;\n --neutral-3: #E2E8F0;\n --neutral-4: #94A3B8;\n --neutral-5: #475569;\n --neutral-6: #0F172A;\n\n /* --- Fixed ink ---------------------------------------------------------\n The same in both modes because it sits on a fill, not on the page. */\n --ink-white: #FFFFFF;\n --ink-black: #0F172A;\n --alpha-white-82: rgba(255, 255, 255, 0.82);\n --alpha-white-45: rgba(255, 255, 255, 0.45);\n\n /* --- Focus -------------------------------------------------------------\n Its own constant: it must not move with the accent or the attention status. */\n --focus-orange: #E17000;\n\n /* --- The ribbon --------------------------------------------------------\n Lintblauw, and the Rijkshuisstijl's own lighter tint for the ribbon in the logo in dark. */\n --ribbon-blue: #154273;\n --ribbon-blue-dark: #004A8D;\n\n /* --- Data (fixed Rijkshuisstijl, identical in light, dark and every theme)\n The two grays follow the mode: as fixed literals the comparison line landed at 2.69:1\n on the dark surface. Light #475569 / #94A3B8, dark #B0B0B0 / #7A7A7A. The variables\n stand in the order of `tokens/colors.ts`, the one list of their names. */\n --data-sky-blue: #007BC7;\n --data-dark-yellow: #FFB612;\n --data-red: #D52B1E;\n --data-green: #39870C;\n --data-mint-green: #76D2B6;\n --data-violet: #A90061;\n --data-orange: #E17000;\n --data-pink: #F092CD;\n --data-dark-green: #275937;\n --data-purple: #42145F;\n --data-ruby-red: #CA005D;\n --data-yellow: #F9E11E;\n --data-dark-brown: #673328;\n --data-brown: #94710A;\n --data-dark-blue: #01689B;\n --data-light-blue: #8FCAE7;\n --data-moss-green: #777B00;\n /* Sky blue's ladder is written out: the map's areas draw in from the land to these classes,\n and Chromium interpolates a `color-mix()` target wrongly (the land's RGB numbers taken as\n oklab), so the areas flash yellow. The values are its mix with white; the test checks. */\n --data-sky-blue-75: #409CD5;\n --data-sky-blue-60: #66B0DD;\n --data-sky-blue-45: #8CC4E6;\n --data-sky-blue-30: #B2D7EE;\n --data-sky-blue-15: #D9EBF7;\n --data-comparison: var(--neutral-5);\n --data-other: var(--neutral-4);\n /* Yellow as TEXT fails contrast on white: light writes a wait time in this dark gold. */\n --data-dark-yellow-text: #B07A00;\n /* Grid and emphasis follow the surface, like the two grays. */\n --data-grid: var(--neutral-3);\n --data-emphasis: var(--neutral-6);\n\n /* --- Status (fixed) ---------------------------------------------------- */\n --status-success: #39870C;\n --status-warning: #FFB612;\n --status-attention: #E17000;\n --status-error: #D52B1E;\n --status-info: #007BC7;\n\n /* Black at the alphas the shadows and overlays use; the digits are the alpha in percent. */\n --alpha-black-08: rgba(0, 0, 0, 0.08);\n --alpha-black-14: rgba(0, 0, 0, 0.14);\n --alpha-black-16: rgba(0, 0, 0, 0.16);\n --alpha-black-18: rgba(0, 0, 0, 0.18);\n --alpha-black-22: rgba(0, 0, 0, 0.22);\n --alpha-black-40: rgba(0, 0, 0, 0.4);\n --alpha-black-55: rgba(0, 0, 0, 0.55);\n --alpha-black-60: rgba(0, 0, 0, 0.6);\n}\n\n/* ============================================================================\n Layer 1 — derivations\n\n Mixes of the primitives and of the theme's two properties. The tint ladder is 75 / 60 / 45\n / 30 / 15 % of the base over white; every data colour carries the complete ladder.\n ========================================================================= */\n:root {\n /* Darker than the primary in light: a lighter fill under white text lost contrast (2.80:1 on\n orange). The dark block re-declares it lighter. */\n --primary-hover: color-mix(in srgb, var(--primary), black 30%);\n --primary-line: color-mix(in srgb, var(--primary), white 22%);\n /* The dark tints lift only the perceived lightness, so they keep the primary's colour; a mix\n with white greys it. Each lightness is the smallest hundredth that clears its floor in every\n theme: 3:1 on #282828 for a line, 4.5:1 on #333333 (neutral-2), the lightest neutral\n surface a word stands on, for text. A primary that is lighter already keeps its own. */\n --primary-tint: oklch(from var(--primary) max(l, 0.55) c h);\n --primary-tint-text: oklch(from var(--primary) max(l, 0.71) c h);\n /* A wash behind a word or under a band, never a colour that reads by itself. Fixed in\n perceived lightness, so it is equally light in every theme and keeps the primary's hue; an\n sRGB mix with white greys a dark primary. The chroma cap keeps every theme inside sRGB. */\n --primary-wash: oklch(from var(--primary) 0.955 min(c, 0.02) h);\n\n --data-dark-yellow-75: color-mix(in srgb, var(--data-dark-yellow) 75%, white);\n --data-dark-yellow-60: color-mix(in srgb, var(--data-dark-yellow) 60%, white);\n --data-dark-yellow-45: color-mix(in srgb, var(--data-dark-yellow) 45%, white);\n --data-dark-yellow-30: color-mix(in srgb, var(--data-dark-yellow) 30%, white);\n --data-dark-yellow-15: color-mix(in srgb, var(--data-dark-yellow) 15%, white);\n\n --data-red-75: color-mix(in srgb, var(--data-red) 75%, white);\n --data-red-60: color-mix(in srgb, var(--data-red) 60%, white);\n --data-red-45: color-mix(in srgb, var(--data-red) 45%, white);\n --data-red-30: color-mix(in srgb, var(--data-red) 30%, white);\n --data-red-15: color-mix(in srgb, var(--data-red) 15%, white);\n\n --data-green-75: color-mix(in srgb, var(--data-green) 75%, white);\n --data-green-60: color-mix(in srgb, var(--data-green) 60%, white);\n --data-green-45: color-mix(in srgb, var(--data-green) 45%, white);\n --data-green-30: color-mix(in srgb, var(--data-green) 30%, white);\n --data-green-15: color-mix(in srgb, var(--data-green) 15%, white);\n\n --data-mint-green-75: color-mix(in srgb, var(--data-mint-green) 75%, white);\n --data-mint-green-60: color-mix(in srgb, var(--data-mint-green) 60%, white);\n --data-mint-green-45: color-mix(in srgb, var(--data-mint-green) 45%, white);\n --data-mint-green-30: color-mix(in srgb, var(--data-mint-green) 30%, white);\n --data-mint-green-15: color-mix(in srgb, var(--data-mint-green) 15%, white);\n\n --data-violet-75: color-mix(in srgb, var(--data-violet) 75%, white);\n --data-violet-60: color-mix(in srgb, var(--data-violet) 60%, white);\n --data-violet-45: color-mix(in srgb, var(--data-violet) 45%, white);\n --data-violet-30: color-mix(in srgb, var(--data-violet) 30%, white);\n --data-violet-15: color-mix(in srgb, var(--data-violet) 15%, white);\n\n --data-orange-75: color-mix(in srgb, var(--data-orange) 75%, white);\n --data-orange-60: color-mix(in srgb, var(--data-orange) 60%, white);\n --data-orange-45: color-mix(in srgb, var(--data-orange) 45%, white);\n --data-orange-30: color-mix(in srgb, var(--data-orange) 30%, white);\n --data-orange-15: color-mix(in srgb, var(--data-orange) 15%, white);\n\n --data-pink-75: color-mix(in srgb, var(--data-pink) 75%, white);\n --data-pink-60: color-mix(in srgb, var(--data-pink) 60%, white);\n --data-pink-45: color-mix(in srgb, var(--data-pink) 45%, white);\n --data-pink-30: color-mix(in srgb, var(--data-pink) 30%, white);\n --data-pink-15: color-mix(in srgb, var(--data-pink) 15%, white);\n\n --data-dark-green-75: color-mix(in srgb, var(--data-dark-green) 75%, white);\n --data-dark-green-60: color-mix(in srgb, var(--data-dark-green) 60%, white);\n --data-dark-green-45: color-mix(in srgb, var(--data-dark-green) 45%, white);\n --data-dark-green-30: color-mix(in srgb, var(--data-dark-green) 30%, white);\n --data-dark-green-15: color-mix(in srgb, var(--data-dark-green) 15%, white);\n\n --data-purple-75: color-mix(in srgb, var(--data-purple) 75%, white);\n --data-purple-60: color-mix(in srgb, var(--data-purple) 60%, white);\n --data-purple-45: color-mix(in srgb, var(--data-purple) 45%, white);\n --data-purple-30: color-mix(in srgb, var(--data-purple) 30%, white);\n --data-purple-15: color-mix(in srgb, var(--data-purple) 15%, white);\n\n --data-ruby-red-75: color-mix(in srgb, var(--data-ruby-red) 75%, white);\n --data-ruby-red-60: color-mix(in srgb, var(--data-ruby-red) 60%, white);\n --data-ruby-red-45: color-mix(in srgb, var(--data-ruby-red) 45%, white);\n --data-ruby-red-30: color-mix(in srgb, var(--data-ruby-red) 30%, white);\n --data-ruby-red-15: color-mix(in srgb, var(--data-ruby-red) 15%, white);\n\n --data-yellow-75: color-mix(in srgb, var(--data-yellow) 75%, white);\n --data-yellow-60: color-mix(in srgb, var(--data-yellow) 60%, white);\n --data-yellow-45: color-mix(in srgb, var(--data-yellow) 45%, white);\n --data-yellow-30: color-mix(in srgb, var(--data-yellow) 30%, white);\n --data-yellow-15: color-mix(in srgb, var(--data-yellow) 15%, white);\n\n --data-dark-brown-75: color-mix(in srgb, var(--data-dark-brown) 75%, white);\n --data-dark-brown-60: color-mix(in srgb, var(--data-dark-brown) 60%, white);\n --data-dark-brown-45: color-mix(in srgb, var(--data-dark-brown) 45%, white);\n --data-dark-brown-30: color-mix(in srgb, var(--data-dark-brown) 30%, white);\n --data-dark-brown-15: color-mix(in srgb, var(--data-dark-brown) 15%, white);\n\n --data-brown-75: color-mix(in srgb, var(--data-brown) 75%, white);\n --data-brown-60: color-mix(in srgb, var(--data-brown) 60%, white);\n --data-brown-45: color-mix(in srgb, var(--data-brown) 45%, white);\n --data-brown-30: color-mix(in srgb, var(--data-brown) 30%, white);\n --data-brown-15: color-mix(in srgb, var(--data-brown) 15%, white);\n\n --data-dark-blue-75: color-mix(in srgb, var(--data-dark-blue) 75%, white);\n --data-dark-blue-60: color-mix(in srgb, var(--data-dark-blue) 60%, white);\n --data-dark-blue-45: color-mix(in srgb, var(--data-dark-blue) 45%, white);\n --data-dark-blue-30: color-mix(in srgb, var(--data-dark-blue) 30%, white);\n --data-dark-blue-15: color-mix(in srgb, var(--data-dark-blue) 15%, white);\n\n --data-light-blue-75: color-mix(in srgb, var(--data-light-blue) 75%, white);\n --data-light-blue-60: color-mix(in srgb, var(--data-light-blue) 60%, white);\n --data-light-blue-45: color-mix(in srgb, var(--data-light-blue) 45%, white);\n --data-light-blue-30: color-mix(in srgb, var(--data-light-blue) 30%, white);\n --data-light-blue-15: color-mix(in srgb, var(--data-light-blue) 15%, white);\n\n --data-moss-green-75: color-mix(in srgb, var(--data-moss-green) 75%, white);\n --data-moss-green-60: color-mix(in srgb, var(--data-moss-green) 60%, white);\n --data-moss-green-45: color-mix(in srgb, var(--data-moss-green) 45%, white);\n --data-moss-green-30: color-mix(in srgb, var(--data-moss-green) 30%, white);\n --data-moss-green-15: color-mix(in srgb, var(--data-moss-green) 15%, white);\n\n /* 15 % of the status colour over the surface, so one declaration covers both modes. */\n --status-success-bg: color-mix(in srgb, var(--status-success) 15%, var(--neutral-0));\n --status-warning-bg: color-mix(in srgb, var(--status-warning) 15%, var(--neutral-0));\n --status-attention-bg: color-mix(in srgb, var(--status-attention) 15%, var(--neutral-0));\n --status-error-bg: color-mix(in srgb, var(--status-error) 15%, var(--neutral-0));\n --status-info-bg: color-mix(in srgb, var(--status-info) 15%, var(--neutral-0));\n}\n\n/* ============================================================================\n Layers 2 and 3 — semantic and component tokens (light)\n\n No colour literal below this line.\n ========================================================================= */\n:root {\n /* --- Typography -------------------------------------------------------- */\n --font-ui: 'RijksSans', 'Source Sans 3', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n --font-mono: 'Source Code Pro', ui-monospace, SFMono-Regular, Menlo, monospace;\n\n --text-dashboard: 700 1.25rem/1.2 var(--font-ui);\n --text-h1: 700 1.75rem/1.2 var(--font-ui);\n --text-h1-mobile: 700 1.5rem/1.15 var(--font-ui);\n --text-h1-display: 700 2.5rem/1.1 var(--font-ui);\n --text-h2: 700 1.25rem/1.25 var(--font-ui);\n --text-tile-title: 700 1rem/1.3 var(--font-ui);\n --text-tile-sub: 400 0.875rem/1.35 var(--font-ui);\n --text-kpi: 700 2rem/1.1 var(--font-ui);\n --text-kpi-mobile: 700 1.5rem/1.1 var(--font-ui);\n --text-kpi-secondary: 700 1.25rem/1.1 var(--font-ui);\n --text-body: 400 1rem/1.5 var(--font-ui);\n /* The text being translated and its translation: larger than body, read at a glance. */\n --text-translation: 400 1.25rem/1.5 var(--font-ui);\n --text-ui: 400 1rem/1.4 var(--font-ui);\n --text-small: 400 0.875rem/1.45 var(--font-ui);\n --text-meta: 400 0.875rem/1.4 var(--font-ui);\n --text-table: 400 1rem/1.4 var(--font-ui);\n --text-table-head: 700 0.875rem/1.3 var(--font-ui);\n --text-axis: 400 0.75rem/1.2 var(--font-ui);\n\n --label-size: 0.875rem;\n --label-weight: 700;\n --label-tracking: 0.08em;\n --kpi-tracking: -0.02em;\n\n /* --- Spacing (4 px scale) --------------------------------------------- */\n --space-1: 4px;\n --space-2: 8px;\n --space-3: 12px;\n --space-4: 16px;\n --space-5: 20px;\n --space-6: 24px;\n --space-8: 32px;\n --space-10: 40px;\n\n /* --- Component sizes --------------------------------------------------- */\n --h-topbar: 3.5rem;\n --h-contextbar: 3rem;\n --h-mobile-header: 4.5rem;\n --h-control: 3rem;\n --h-button: 3rem;\n --h-button-compact: 2.5rem;\n --h-button-chrome: 2.5rem;\n --h-icon-button: 2.5rem;\n --h-chip: 2rem;\n --h-chip-field: 1.75rem;\n --h-nav-row: 3rem;\n --h-nav-head: 6.5rem;\n --h-table-row: 3rem;\n --h-touch: 3rem;\n /* The smallest pointer target. A box that draws smaller reaches it through a\n transparent hit area (`::after`, negative inset). */\n --h-target: 3rem;\n /* A link in a list of text links: one line of text, the WCAG AA floor, as on rijksoverheid.nl. */\n --h-target-text: 1.5rem;\n /* The two dense exceptions to the target: a date picker day cell and a listbox option row. */\n --h-option: 2.5rem;\n /* The sparkline of a KPI: a line and its area under the figure, with no axes. */\n --h-sparkline: 2rem;\n\n --w-nav: 288px;\n --w-rail: 72px;\n --w-text: 760px;\n --w-message: 560px;\n /* A language choice in the translator's bar. */\n --w-translator-language: 18rem;\n /* The widest the page's content gets. A host sets `--lintje-content-width` to change it. */\n --w-content: 1360px;\n --nav-edge: 4px;\n /* The ribbon is the unit: 48 px, 40 on a phone. Both bars are in rem, so they grow with the\n reader's text size. */\n --w-ribbon: 3rem;\n --h-logobar: calc(2.5 * var(--w-ribbon));\n /* The top bar's height: what pins under the bar measures `--h-topbar`. */\n --h-navbar: var(--h-topbar);\n /* How far what follows the hero stands over its band's lower edge. */\n --hero-overlap: var(--space-10);\n /* The widest the picture beside the hero's text gets: four of the twelve columns at 1440. */\n --w-hero-aside: 400px;\n /* The narrowest a card gets in a card list before the list drops a column. */\n --w-card: 320px;\n /* The same for a horizontal card, whose picture takes a column of its own. */\n --w-card-wide: 480px;\n --w-card-media: 200px;\n --w-card-logo: 3.5rem;\n --w-card-logo-wide: 5rem;\n /* The narrowest thumbnail under a gallery's large picture. */\n --w-gallery-thumb: 120px;\n /* The narrowest column of links in a footer before the columns stand under each other. */\n --w-footer-column: 220px;\n\n --page-pad-y: 32px;\n --page-pad-x: 24px;\n /* What a full-width bar or the content adds to its side padding so what stands in it keeps to\n `--w-content`; the percentage is taken of the box the bar stands in. */\n --page-gutter: max(\n 0px,\n calc((100% - var(--lintje-content-width, var(--w-content)) - 2 * var(--page-pad-x)) / 2)\n );\n --grid-gutter: 24px;\n --tile-pad-y: 20px;\n --tile-pad-x: 24px;\n --chart-h-main: 260px;\n --chart-h-small: 180px;\n --chart-h-expanded: 560px;\n\n /* Sticky context = top bar + summary bar. */\n --h-sticky: calc(var(--h-topbar) + var(--h-contextbar));\n\n --radius: 0px;\n --radius-round: 50%;\n\n --shadow-sticky: 0 2px 6px var(--alpha-black-08);\n --shadow-popover: 0 4px 16px var(--alpha-black-14);\n --shadow-nav: 2px 0 8px var(--alpha-black-08);\n --shadow-chart-hover: 0 1px 4px var(--alpha-black-22);\n --shadow-scroll-start: inset 12px 0 10px -10px var(--alpha-black-18);\n --shadow-scroll-end: inset -12px 0 10px -10px var(--alpha-black-18);\n\n --color-overlay-page: var(--alpha-black-60);\n --color-overlay-nav: var(--alpha-black-16);\n\n --focus-width: 3px;\n --focus-offset: 2px;\n\n /* --- Motion ------------------------------------------------------------ */\n /* `@kind other` marks these for design tooling as neither colors, sizes nor type; the library\n CSS ships unminified so the notes reach it. */\n --ease-in-motion: cubic-bezier(0.2, 0, 0, 1); /* @kind other */\n --ease-out-motion: cubic-bezier(0.4, 0, 1, 1); /* @kind other */\n --dur-base: 200ms; /* @kind other */\n --dur-hover: 120ms; /* @kind other */\n --dur-popover: var(--dur-base); /* @kind other */\n --dur-submenu: 300ms; /* @kind other */\n --dur-toast: var(--dur-base); /* @kind other */\n --dur-scrim: var(--dur-base); /* @kind other */\n --dur-rail: var(--dur-base); /* @kind other */\n --dur-collapse: var(--dur-base); /* @kind other */\n --dur-modal: var(--dur-base); /* @kind other */\n --dur-sheet: var(--dur-base); /* @kind other */\n --dur-kpi: var(--dur-base); /* @kind other */\n --dur-badge: 300ms; /* @kind other */\n --dur-draw: 900ms; /* @kind other */\n --dur-data-label: 300ms; /* @kind other */\n --dur-skeleton: 1200ms; /* @kind other */\n --dur-wave: 600ms; /* @kind other */\n\n /* --- Semantic: surfaces ------------------------------------------------ */\n --color-bg-page: var(--neutral-1);\n --color-bg-surface: var(--neutral-0);\n --color-bg-subtle: var(--neutral-2);\n --color-bg-title: var(--neutral-1);\n /* Between steps 2 and 3: on the cool-grey ramp neutral-2 sits too close to the page to read\n as a band. */\n --color-bg-filter: color-mix(in srgb, var(--neutral-2), var(--neutral-3));\n --color-bg-selected: var(--neutral-2);\n --color-bg-inset: var(--neutral-2);\n\n /* --- Semantic: text ---------------------------------------------------- */\n --color-text-primary: var(--neutral-6);\n --color-text-secondary: var(--neutral-6);\n --color-text-muted: var(--neutral-5);\n --color-text-inverse: var(--neutral-0);\n --color-text-disabled: var(--neutral-4);\n /* A placeholder must stay readable: 4.5:1 on the surface in both modes. */\n --color-text-placeholder: var(--neutral-5);\n --color-text-on-fill: var(--ink-white);\n --color-text-on-light-fill: var(--ink-black);\n --color-qr-bg: var(--ink-white);\n --color-qr-fg: var(--ink-black);\n\n /* --- Semantic: borders ------------------------------------------------- */\n --color-border-default: var(--neutral-3);\n --color-border-strong: var(--neutral-3);\n --color-border-filter: var(--neutral-3);\n --color-border-heavy: var(--neutral-4);\n /* The resting edge of a field box: 3:1 (WCAG 1.4.11) on the surface and the filter band. */\n --color-border-field: var(--neutral-5);\n /* The 2 px edge of a checkbox and a radio: 3:1 on the surface; dark re-points it. */\n --color-border-choice: var(--neutral-5);\n /* In dark a sheet is the same #282828 as the tile under it, so this line separates them. */\n --color-border-popover: var(--neutral-3);\n /* A DASHED outline (a suggestion, an uncertain term): neutral-5, because a dashed line has half\n the ink of a solid one and must still reach 3:1. */\n --color-border-suggestion: var(--neutral-5);\n\n /* --- Semantic: action -------------------------------------------------- */\n --color-action-primary: var(--primary);\n --color-action-primary-hover: var(--primary-hover);\n --color-action-primary-text: var(--ink-white);\n /* A primary fill in dark is a dark box on a dark page (WCAG 1.4.11): it gets a tint border. */\n --color-action-primary-border: var(--primary);\n --color-action-secondary-border: var(--primary);\n /* The destructive fill: the error red, white text on it (5.01:1). Hover is darker in light,\n lighter in dark. In dark the border is a tint, because #D52B1E is 2.94:1 on #282828. */\n --color-action-danger: var(--status-error);\n --color-action-danger-hover: color-mix(in srgb, var(--status-error), black 30%);\n --color-action-danger-border: var(--status-error);\n /* The word of the outlined danger button; dark re-points it (the red is 2.94:1 on #282828). */\n --color-action-danger-text: var(--status-error);\n --color-link: var(--primary);\n --color-link-hover: var(--primary-hover);\n /* A link on a status background: in dark no tint of the primary reaches 4.5:1 there, so it\n reads in the text colour. It is bold and underlined, so colour never carried it alone. */\n --color-link-on-status: var(--primary);\n\n /* The accent splits in three, because a fill, a line and a word have different floors:\n fill (the primary), line (non-text, 3:1: `--primary-tint` in dark) and text (4.5:1:\n `--primary-tint-text` in dark). A word in the line token fails: it is sized for 3:1. */\n --color-accent: var(--primary);\n --color-accent-line: var(--primary);\n --color-accent-text: var(--primary);\n\n --color-focus: var(--focus-orange);\n\n /* --- Semantic: status -------------------------------------------------- */\n --color-attention: var(--status-attention);\n --color-success: var(--status-success);\n --color-warning: var(--status-warning);\n --color-error: var(--status-error);\n --color-info: var(--status-info);\n\n --color-warning-bg: var(--status-warning-bg);\n --color-attention-bg: var(--status-attention-bg);\n --color-error-bg: var(--status-error-bg);\n --color-info-bg: var(--status-info-bg);\n --color-success-bg: var(--status-success-bg);\n\n /* A status mark on its own tint: the status colour, nudged to 3:1 where it falls short. */\n --color-attention-line: color-mix(in srgb, var(--status-attention), black 10%);\n --color-error-line: var(--status-error);\n --color-info-line: var(--status-info);\n --color-success-line: var(--status-success);\n /* A status WORD at 4.5:1 on the surface and on `--color-bg-subtle`: the red itself, the green\n 5 % darker (4.13:1 on neutral-2); dark lifts both. A glyph or an edge keeps the line token. */\n --color-error-text: var(--status-error);\n --color-success-text: color-mix(in srgb, var(--status-success), black 5%);\n\n /* --- Navigation (the theme fill; neutral in dark) ---------------------- */\n --color-nav-bg: var(--primary);\n --color-nav-text: var(--ink-white);\n --color-nav-text-sub: var(--alpha-white-82);\n --color-nav-hover: var(--primary-hover);\n --color-nav-active: var(--primary-hover);\n --color-nav-active-edge: var(--ink-white);\n --color-nav-active-text: var(--ink-white);\n --color-nav-line: var(--primary-line);\n --color-nav-disabled: var(--alpha-white-45);\n --color-nav-badge-bg: var(--status-error);\n --color-nav-badge-text: var(--ink-white);\n /* The avatar is white with black initials wherever it stands, in both modes. */\n --color-nav-avatar-bg: var(--ink-white);\n --color-nav-avatar-text: var(--ink-black);\n /* Orange fails on the theme fill (1.89:1 on #01689B, 1:1 on #E17000); white reaches 3:1 on\n all six primaries. Dark re-points it to the orange. */\n --color-focus-on-theme: var(--ink-white);\n /* The theme's ACCENT, not the attention status: on `defensie` the menu is `#E17000` and the\n status colour made the band disappear. `--accent` is document level only. */\n --color-nav-environment-bg: var(--accent);\n --color-nav-environment-text: var(--color-text-on-fill);\n /* The page's surface in both modes. The navigation bar under it is the menu turned a quarter,\n on `--color-nav-*`. */\n --color-logobar-bg: var(--color-bg-surface);\n --color-logobar-text: var(--color-text-primary);\n /* The ribbon in the emblem; only the logo re-points it in dark, never lintblauw elsewhere. */\n --color-logo-ribbon: var(--ribbon-blue);\n /* What marks an entry in that bar. They name the primitives, never `--color-nav-*`: the bar\n points those at these, and the two would refer to each other. */\n --color-navbar-hover: var(--primary-hover);\n --color-navbar-active: var(--primary-hover);\n --color-navbar-active-edge: var(--ink-white);\n --color-navbar-open-text: var(--color-accent-text);\n /* The start page's band is the primary's wash, so it never reads as the menu. The orange ring\n misses 3:1 on it; the ring takes the text colour. */\n --color-hero-bg: var(--primary-wash);\n --color-hero-text: var(--color-text-primary);\n --color-hero-focus: var(--color-text-primary);\n /* The site's foot stands on the menu's own fill, as on rijksoverheid.nl; in dark it follows the menu. */\n --color-footer-bg: var(--color-nav-bg);\n --color-footer-text: var(--color-nav-text);\n --color-footer-line: var(--color-nav-line);\n --color-footer-focus: var(--color-focus-on-theme);\n\n /* The box behind a recognised term: the primary's wash; dark re-points it. */\n --color-term-bg: var(--primary-wash);\n /* The chosen option of a row of options: the primary's wash; dark re-points it. */\n --color-choice-active-bg: var(--primary-wash);\n /* The 2 px line under a term; dark takes the text tint, as the line tint falls short on it. */\n --color-term-line: var(--color-accent-line);\n\n /* --- Data colors ------------------------------------------------------- */\n /* One colour per variable, named after the Rijkshuisstijl colour. */\n --color-chart-sky-blue: var(--data-sky-blue);\n --color-chart-dark-yellow: var(--data-dark-yellow);\n --color-chart-dark-yellow-text: var(--data-dark-yellow-text);\n --color-chart-red: var(--data-red);\n --color-chart-green: var(--data-green);\n --color-chart-mint-green: var(--data-mint-green);\n --color-chart-violet: var(--data-violet);\n --color-chart-orange: var(--data-orange);\n --color-chart-pink: var(--data-pink);\n --color-chart-dark-green: var(--data-dark-green);\n --color-chart-purple: var(--data-purple);\n --color-chart-ruby-red: var(--data-ruby-red);\n --color-chart-yellow: var(--data-yellow);\n --color-chart-dark-brown: var(--data-dark-brown);\n --color-chart-brown: var(--data-brown);\n --color-chart-dark-blue: var(--data-dark-blue);\n --color-chart-light-blue: var(--data-light-blue);\n --color-chart-moss-green: var(--data-moss-green);\n --color-chart-secondary: var(--data-comparison); /* comparison, context */\n --color-chart-other: var(--data-other); /* \"Overig\" */\n --color-chart-remainder: var(--neutral-3); /* the rest of a whole, e.g. a donut's open part */\n --color-chart-emphasis: var(--data-emphasis); /* trend, threshold, target */\n --color-chart-grid: var(--data-grid);\n --color-chart-axis: var(--neutral-5);\n /* The zero line (darker than the grid) and the hatch of missing data carry meaning, so they\n reach 3:1 on the surface: a fifth of the way from neutral-4 to neutral-5 (3.1:1; 4.0:1 dark). */\n --color-chart-zero: color-mix(in srgb, var(--neutral-5) 20%, var(--neutral-4));\n --color-chart-hatch: color-mix(in srgb, var(--neutral-5) 20%, var(--neutral-4));\n /* A speaker's colour under a whole fragment: this share of it over the surface, so text keeps\n its contrast in light and in dark. */\n --tint-speaker: 12%;\n\n /* These map colours stay deliberately neutral so the data is the only colour on the map. */\n --color-map-water: var(--neutral-0);\n --color-map-land: var(--neutral-2);\n --color-map-border: var(--neutral-4);\n /* An area with a figure: 3:1 against the land and the lightest class, which are 1.1:1 apart. */\n --color-map-border-data: var(--neutral-5);\n\n /* The variable a figure draws when its data names none: the first colour of the list, the\n same decision as `DEFAULT_SERIES_COLOR` in `charts/shared/colors.ts`. */\n --color-chart-default: var(--color-chart-sky-blue);\n\n /* Subdivision of one variable: its colour in its tint ladder, strongest first, on the steps\n 100 / 75 / 60 / 45 / 30. Every colour carries its ladder, so a figure that brings a colour\n brings its tints: a renderer names `--color-chart-<colour>` and\n `--color-chart-<colour>-tint-N`, never a --data-* colour. */\n --color-chart-sky-blue-tint-2: var(--data-sky-blue-75);\n --color-chart-sky-blue-tint-3: var(--data-sky-blue-60);\n --color-chart-sky-blue-tint-4: var(--data-sky-blue-45);\n --color-chart-sky-blue-tint-5: var(--data-sky-blue-30);\n\n --color-chart-dark-yellow-tint-2: var(--data-dark-yellow-75);\n --color-chart-dark-yellow-tint-3: var(--data-dark-yellow-60);\n --color-chart-dark-yellow-tint-4: var(--data-dark-yellow-45);\n --color-chart-dark-yellow-tint-5: var(--data-dark-yellow-30);\n\n --color-chart-red-tint-2: var(--data-red-75);\n --color-chart-red-tint-3: var(--data-red-60);\n --color-chart-red-tint-4: var(--data-red-45);\n --color-chart-red-tint-5: var(--data-red-30);\n\n --color-chart-green-tint-2: var(--data-green-75);\n --color-chart-green-tint-3: var(--data-green-60);\n --color-chart-green-tint-4: var(--data-green-45);\n --color-chart-green-tint-5: var(--data-green-30);\n\n --color-chart-mint-green-tint-2: var(--data-mint-green-75);\n --color-chart-mint-green-tint-3: var(--data-mint-green-60);\n --color-chart-mint-green-tint-4: var(--data-mint-green-45);\n --color-chart-mint-green-tint-5: var(--data-mint-green-30);\n\n --color-chart-violet-tint-2: var(--data-violet-75);\n --color-chart-violet-tint-3: var(--data-violet-60);\n --color-chart-violet-tint-4: var(--data-violet-45);\n --color-chart-violet-tint-5: var(--data-violet-30);\n\n --color-chart-orange-tint-2: var(--data-orange-75);\n --color-chart-orange-tint-3: var(--data-orange-60);\n --color-chart-orange-tint-4: var(--data-orange-45);\n --color-chart-orange-tint-5: var(--data-orange-30);\n\n --color-chart-pink-tint-2: var(--data-pink-75);\n --color-chart-pink-tint-3: var(--data-pink-60);\n --color-chart-pink-tint-4: var(--data-pink-45);\n --color-chart-pink-tint-5: var(--data-pink-30);\n\n --color-chart-dark-green-tint-2: var(--data-dark-green-75);\n --color-chart-dark-green-tint-3: var(--data-dark-green-60);\n --color-chart-dark-green-tint-4: var(--data-dark-green-45);\n --color-chart-dark-green-tint-5: var(--data-dark-green-30);\n\n --color-chart-purple-tint-2: var(--data-purple-75);\n --color-chart-purple-tint-3: var(--data-purple-60);\n --color-chart-purple-tint-4: var(--data-purple-45);\n --color-chart-purple-tint-5: var(--data-purple-30);\n\n --color-chart-ruby-red-tint-2: var(--data-ruby-red-75);\n --color-chart-ruby-red-tint-3: var(--data-ruby-red-60);\n --color-chart-ruby-red-tint-4: var(--data-ruby-red-45);\n --color-chart-ruby-red-tint-5: var(--data-ruby-red-30);\n\n --color-chart-yellow-tint-2: var(--data-yellow-75);\n --color-chart-yellow-tint-3: var(--data-yellow-60);\n --color-chart-yellow-tint-4: var(--data-yellow-45);\n --color-chart-yellow-tint-5: var(--data-yellow-30);\n\n --color-chart-dark-brown-tint-2: var(--data-dark-brown-75);\n --color-chart-dark-brown-tint-3: var(--data-dark-brown-60);\n --color-chart-dark-brown-tint-4: var(--data-dark-brown-45);\n --color-chart-dark-brown-tint-5: var(--data-dark-brown-30);\n\n --color-chart-brown-tint-2: var(--data-brown-75);\n --color-chart-brown-tint-3: var(--data-brown-60);\n --color-chart-brown-tint-4: var(--data-brown-45);\n --color-chart-brown-tint-5: var(--data-brown-30);\n\n --color-chart-dark-blue-tint-2: var(--data-dark-blue-75);\n --color-chart-dark-blue-tint-3: var(--data-dark-blue-60);\n --color-chart-dark-blue-tint-4: var(--data-dark-blue-45);\n --color-chart-dark-blue-tint-5: var(--data-dark-blue-30);\n\n --color-chart-light-blue-tint-2: var(--data-light-blue-75);\n --color-chart-light-blue-tint-3: var(--data-light-blue-60);\n --color-chart-light-blue-tint-4: var(--data-light-blue-45);\n --color-chart-light-blue-tint-5: var(--data-light-blue-30);\n\n --color-chart-moss-green-tint-2: var(--data-moss-green-75);\n --color-chart-moss-green-tint-3: var(--data-moss-green-60);\n --color-chart-moss-green-tint-4: var(--data-moss-green-45);\n --color-chart-moss-green-tint-5: var(--data-moss-green-30);\n\n /* The default ladder, for a figure that names no colour: the sky blue's. */\n --color-chart-tint-1: var(--color-chart-sky-blue);\n --color-chart-tint-2: var(--color-chart-sky-blue-tint-2);\n --color-chart-tint-3: var(--color-chart-sky-blue-tint-3);\n --color-chart-tint-4: var(--color-chart-sky-blue-tint-4);\n --color-chart-tint-5: var(--color-chart-sky-blue-tint-5);\n\n /* Sequential scale for ordinal classes (heatmap, choropleth), lightest first. A component names\n these, never a --data-* colour directly. */\n --color-chart-seq-1: var(--data-sky-blue-15);\n --color-chart-seq-2: var(--data-sky-blue-30);\n --color-chart-seq-3: var(--data-sky-blue-45);\n --color-chart-seq-4: var(--data-sky-blue-75);\n --color-chart-seq-5: var(--data-sky-blue);\n}\n\n/* ============================================================================\n Dark mode — the Logius range, no inversion\n\n Redefines the seven `--neutral-*` primitives, re-declares `--primary-hover` lighter and\n re-points the layer-2/3 names whose meaning changes; everything that merely follows a\n neutral is absent on purpose. Page and tiles are both #282828, the border separates them: the\n step below is the menu's, so it stays a band beside the page and under the logo bar.\n ========================================================================= */\n[data-mode='dark'] {\n --neutral-0: #282828;\n --neutral-1: #1D1D1D;\n --neutral-2: #333333;\n --neutral-3: #4A4A4A;\n --neutral-4: #7A7A7A;\n --neutral-5: #B0B0B0;\n --neutral-6: #FFFFFF;\n\n /* The hover goes UP in dark: the light mix would put a near-black fill on the near-black page. */\n --primary-hover: color-mix(in srgb, var(--primary), white 12%);\n\n --color-bg-page: var(--neutral-0);\n --color-bg-title: var(--neutral-0);\n /* The hero's wash sits halfway between the menu (L 0.231) and the page (L 0.277), below the\n page as in light: a panel or tab on it is lighter than its ground. */\n --primary-wash: oklch(from var(--primary) 0.254 min(c, 0.02) h);\n\n /* The filter zone must read as a band, so in dark it steps UP to neutral-2 (neutral-1 turned\n the fields in it into light boxes). `--color-bg-inset` keeps neutral-1: \"sunken\". */\n --color-bg-filter: var(--neutral-2);\n --color-bg-inset: var(--neutral-1);\n\n --color-text-inverse: var(--neutral-1);\n\n /* Colour that must read by itself on #282828 becomes the tint; a FILL keeps the primary. */\n --color-action-primary-border: var(--primary-tint);\n --color-action-secondary-border: var(--primary-tint);\n /* Danger hover: 8 % white is the most that keeps white text at 4.5:1 (4.56:1). The border and\n the word lift the red as the primary's tints do, to 3:1 on #282828 and 4.5:1 on #333333,\n the hover surface; the word's chroma cap keeps it inside sRGB. */\n --color-action-danger-hover: color-mix(in srgb, var(--status-error), white 8%);\n --color-action-danger-border: oklch(from var(--status-error) max(l, 0.58) c h);\n --color-action-danger-text: oklch(from var(--status-error) max(l, 0.71) min(c, 0.18) h);\n /* A status mark at 3:1 on its own tint. */\n --color-attention-line: var(--status-attention);\n --color-error-line: oklch(from var(--status-error) max(l, 0.6) c h);\n --color-info-line: oklch(from var(--status-info) max(l, 0.58) c h);\n --color-success-line: oklch(from var(--status-success) max(l, 0.57) c h);\n /* A status word at 4.5:1 on #333333, lifted as the danger word is. */\n --color-error-text: oklch(from var(--status-error) max(l, 0.71) min(c, 0.18) h);\n --color-success-text: oklch(from var(--status-success) max(l, 0.68) min(c, 0.18) h);\n /* A link is text: the text tint, not the line tint. The hover stays white. */\n --color-link: var(--primary-tint-text);\n --color-link-hover: var(--neutral-6);\n --color-link-on-status: var(--neutral-6);\n --color-accent-line: var(--primary-tint);\n --color-accent-text: var(--primary-tint-text);\n\n /* Lintblauw has too little contrast on the dark surface; the house style lightens it. */\n --color-logo-ribbon: var(--ribbon-blue-dark);\n\n /* The menu is neutral in dark: near-black, in the rail and in the bar alike, so in the top\n layout it stays its own band under the logo bar. Hover and active are one step up, as they\n are one fill in light; the edge is the text tint, as the line tint is 3:1 on neutral-0 only. */\n --color-nav-bg: var(--neutral-1);\n --color-nav-text: var(--neutral-6);\n --color-nav-text-sub: var(--neutral-5);\n --color-nav-hover: var(--neutral-2);\n --color-nav-active: var(--neutral-2);\n --color-nav-active-edge: var(--primary-tint-text);\n --color-navbar-hover: var(--neutral-2);\n --color-navbar-active: var(--neutral-2);\n --color-navbar-active-edge: var(--primary-tint-text);\n /* The open entry's word stands on the panel's surface: full text contrast, not the tint. */\n --color-navbar-open-text: var(--color-text-primary);\n /* The label is 16 px text: the tint is 3.0:1 and needs 4.5:1. The edge keeps the tint. */\n --color-nav-active-text: var(--neutral-6);\n /* The sheet is told from the page by its shadow and this quiet line; 1.66:1 is accepted here. */\n --color-border-popover: var(--neutral-3);\n --color-nav-line: var(--neutral-2);\n --color-nav-disabled: var(--neutral-4);\n /* The menu is neutral here, so its ring is the orange of every other surface. */\n --color-focus-on-theme: var(--color-focus);\n /* The choice edge keeps neutral-4 in dark: it already reaches 3:1 there (3.43:1 on #282828). */\n --color-border-choice: var(--neutral-4);\n\n /* A term's box is the subtle surface: behind a word on #282828 the dark wash would be a hole. */\n --color-term-bg: var(--neutral-2);\n --color-choice-active-bg: var(--neutral-2);\n --color-hero-focus: var(--color-focus);\n --color-term-line: var(--primary-tint-text);\n\n /* Yellow as text works on the dark surface, so the dark gold is not needed. */\n --color-chart-dark-yellow-text: var(--data-dark-yellow);\n --color-map-water: var(--neutral-1);\n\n --shadow-sticky: 0 2px 6px var(--alpha-black-40);\n --shadow-popover: 0 4px 16px var(--alpha-black-55);\n --shadow-nav: 2px 0 8px var(--alpha-black-40);\n --shadow-chart-hover: 0 1px 4px var(--alpha-black-60);\n --shadow-scroll-start: inset 12px 0 10px -10px var(--alpha-black-60);\n --shadow-scroll-end: inset -12px 0 10px -10px var(--alpha-black-60);\n --color-overlay-nav: var(--alpha-black-40);\n}\n\n/* ============================================================================\n Below 768 px the gutter follows the page padding and every pointer target is the touch\n floor.\n ========================================================================= */\n@media (max-width: 767px) {\n :root {\n --grid-gutter: 16px;\n --h-target: var(--h-touch);\n --h-option: var(--h-touch);\n --chart-h-expanded: 320px;\n --w-ribbon: 2.5rem;\n }\n}\n", Be = "/*\n * The reset every shadow root needs, adopted once as one shared `CSSStyleSheet`.\n *\n * `background` and `color` are deliberately not on `:host`: every element has a `:host`, so\n * they would cut the inheritance chain at each boundary (an icon in the navigation would lose\n * its white `currentColor`). Page-level rules (`html, body`) belong to the host page.\n */\n\n:host {\n font: var(--text-ui);\n font-family: var(--font-ui);\n -webkit-font-smoothing: antialiased;\n font-variant-numeric: tabular-nums;\n}\n\n*, *::before, *::after { box-sizing: border-box; }\n\nh1, h2, h3, h4, h5, h6, p, figure { margin: 0; }\nul, ol { margin: 0; padding: 0; list-style: none; }\n\nbutton {\n font: inherit;\n color: inherit;\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n}\n\na { color: var(--color-link); }\n\ninput, select, textarea { font: inherit; color: inherit; }\n\n/* Focus: always orange 3 px, never animated. */\n:focus-visible {\n outline: var(--focus-width) solid var(--color-focus);\n outline-offset: var(--focus-offset);\n}\n/* Where the outside would be clipped (tiles in a grid, table rows) the ring sits inside. */\n.focus-inset:focus-visible { outline-offset: calc(var(--focus-width) * -1); }\n\n[hidden] { display: none !important; }\n\n.visually-hidden {\n position: absolute;\n width: 1px; height: 1px;\n padding: 0; margin: -1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n border: 0;\n}\n\n@keyframes lintje-shimmer {\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n}\n@keyframes lintje-rise {\n from { opacity: 0; transform: translateY(6px); }\n to { opacity: 1; transform: none; }\n}\n@keyframes lintje-sheet-in {\n from { transform: translateY(100%); }\n to { transform: none; }\n}\n@keyframes lintje-menu-in {\n from { transform: translateY(-100%); }\n to { transform: none; }\n}\n@keyframes lintje-menu-out {\n from { transform: none; }\n to { transform: translateY(-100%); }\n}\n@keyframes lintje-fade-in { from { opacity: 0; } to { opacity: 1; } }\n/* A point, on a map or in a scatter plot, grows from its middle. */\n@keyframes lintje-point-grow { from { transform: scale(0); } }\n@keyframes lintje-drop-in { from { transform: translateY(-10px); } to { transform: none; } }\n@keyframes lintje-popover-in {\n from { opacity: 0; transform: translateY(-6px); }\n to { opacity: 1; transform: none; }\n}\n\n/* prefers-reduced-motion: all durations 0 except opacity (80 ms). */\n@media (prefers-reduced-motion: reduce) {\n :host {\n --dur-base: 0ms; --dur-hover: 0ms; --dur-popover: 0ms; --dur-submenu: 0ms; --dur-toast: 0ms; --dur-scrim: 0ms; --dur-rail: 0ms; --dur-collapse: 0ms;\n --dur-modal: 0ms; --dur-sheet: 0ms; --dur-kpi: 0ms; --dur-badge: 0ms; --dur-draw: 0ms;\n }\n *, *::before, *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 80ms !important;\n scroll-behavior: auto !important;\n }\n}\n\n/* Forced colours: the browser replaces every colour and drops shadows; what every root shares\n is the focus ring, in the system's Highlight. */\n@media (forced-colors: active) {\n :focus-visible { outline-color: Highlight; }\n}\n";
|
|
524
|
+
var ze = "/* ============================================================================\n Lintje — design tokens\n\n Colour is in three groups: themable UI colour (a theme sets only `--primary` and `--accent`, in\n `themes.css`), fixed data colour (`--data-*`, identical in every\n mode and theme except the two grays) and fixed status colour (`--status-*`).\n\n Three layers, one direction: component -> semantic (`--color-*`) -> primitives. Only the\n primitive blocks may hold a colour literal. To change a colour in one mode, re-point the\n layer-2 name inside `[data-mode='dark']`.\n\n `color-mix(in srgb, …)` and the relative `oklch(from …)` need Chrome/Edge 122+, Firefox 128+\n or Safari 18+;\n `colour-scheme.test.ts` repeats the arithmetic. The `@font-face` rules live in `fonts.css`:\n they cannot work inside a shadow root.\n ========================================================================= */\n\n/* ============================================================================\n Layer 1 — primitives (the only literals)\n ========================================================================= */\n:root {\n /* --- Neutral (light). The one mode-dependent primitive family ----------\n Neutral-5 is the cool-grey step 600, not 500, because it carries muted TEXT:\n #64748B is 4.34:1 on neutral-2, #475569 is 6.92:1. */\n --neutral-0: #FFFFFF;\n --neutral-1: #F8FAFC;\n --neutral-2: #F1F5F9;\n --neutral-3: #E2E8F0;\n --neutral-4: #94A3B8;\n --neutral-5: #475569;\n --neutral-6: #0F172A;\n\n /* --- Fixed ink ---------------------------------------------------------\n The same in both modes because it sits on a fill, not on the page. */\n --ink-white: #FFFFFF;\n --ink-black: #0F172A;\n --alpha-white-82: rgba(255, 255, 255, 0.82);\n --alpha-white-45: rgba(255, 255, 255, 0.45);\n\n /* --- Focus -------------------------------------------------------------\n Its own constant: it must not move with the accent or the attention status. */\n --focus-orange: #E17000;\n\n /* --- The ribbon --------------------------------------------------------\n Lintblauw, and the Rijkshuisstijl's own lighter tint for the ribbon in the logo in dark. */\n --ribbon-blue: #154273;\n --ribbon-blue-dark: #004A8D;\n\n /* --- Data (fixed Rijkshuisstijl, identical in light, dark and every theme)\n The two grays follow the mode: as fixed literals the comparison line landed at 2.69:1\n on the dark surface. Light #475569 / #94A3B8, dark #B0B0B0 / #7A7A7A. The variables\n stand in the order of `tokens/colors.ts`, the one list of their names. */\n --data-sky-blue: #007BC7;\n --data-dark-yellow: #FFB612;\n --data-red: #D52B1E;\n --data-green: #39870C;\n --data-mint-green: #76D2B6;\n --data-violet: #A90061;\n --data-orange: #E17000;\n --data-pink: #F092CD;\n --data-dark-green: #275937;\n --data-purple: #42145F;\n --data-ruby-red: #CA005D;\n --data-yellow: #F9E11E;\n --data-dark-brown: #673328;\n --data-brown: #94710A;\n --data-dark-blue: #01689B;\n --data-light-blue: #8FCAE7;\n --data-moss-green: #777B00;\n /* Sky blue's ladder is written out: the map's areas draw in from the land to these classes,\n and Chromium interpolates a `color-mix()` target wrongly (the land's RGB numbers taken as\n oklab), so the areas flash yellow. The values are its mix with white; the test checks. */\n --data-sky-blue-75: #409CD5;\n --data-sky-blue-60: #66B0DD;\n --data-sky-blue-45: #8CC4E6;\n --data-sky-blue-30: #B2D7EE;\n --data-sky-blue-15: #D9EBF7;\n --data-comparison: var(--neutral-5);\n --data-other: var(--neutral-4);\n /* Yellow as TEXT fails contrast on white: light writes a wait time in this dark gold. */\n --data-dark-yellow-text: #B07A00;\n /* Grid and emphasis follow the surface, like the two grays. */\n --data-grid: var(--neutral-3);\n --data-emphasis: var(--neutral-6);\n\n /* --- Status (fixed) ---------------------------------------------------- */\n --status-success: #39870C;\n --status-warning: #FFB612;\n --status-attention: #E17000;\n --status-error: #D52B1E;\n --status-info: #007BC7;\n\n /* Black at the alphas the shadows and overlays use; the digits are the alpha in percent. */\n --alpha-black-08: rgba(0, 0, 0, 0.08);\n --alpha-black-14: rgba(0, 0, 0, 0.14);\n --alpha-black-16: rgba(0, 0, 0, 0.16);\n --alpha-black-18: rgba(0, 0, 0, 0.18);\n --alpha-black-22: rgba(0, 0, 0, 0.22);\n --alpha-black-40: rgba(0, 0, 0, 0.4);\n --alpha-black-55: rgba(0, 0, 0, 0.55);\n --alpha-black-60: rgba(0, 0, 0, 0.6);\n}\n\n/* ============================================================================\n Layer 1 — derivations\n\n Mixes of the primitives and of the theme's two properties. The tint ladder is 75 / 60 / 45\n / 30 / 15 % of the base over white; every data colour carries the complete ladder.\n ========================================================================= */\n:root {\n /* Darker than the primary in light: a lighter fill under white text lost contrast (2.80:1 on\n orange). The dark block re-declares it lighter. */\n --primary-hover: color-mix(in srgb, var(--primary), black 30%);\n --primary-line: color-mix(in srgb, var(--primary), white 22%);\n /* The dark tints lift only the perceived lightness, so they keep the primary's colour; a mix\n with white greys it. Each lightness is the smallest hundredth that clears its floor in every\n theme: 3:1 on #282828 for a line, 4.5:1 on #333333 (neutral-2), the lightest neutral\n surface a word stands on, for text. A primary that is lighter already keeps its own. */\n --primary-tint: oklch(from var(--primary) max(l, 0.55) c h);\n --primary-tint-text: oklch(from var(--primary) max(l, 0.71) c h);\n /* A wash behind a word or under a band, never a colour that reads by itself. Fixed in\n perceived lightness, so it is equally light in every theme and keeps the primary's hue; an\n sRGB mix with white greys a dark primary. The chroma cap keeps every theme inside sRGB. */\n --primary-wash: oklch(from var(--primary) 0.955 min(c, 0.02) h);\n\n --data-dark-yellow-75: color-mix(in srgb, var(--data-dark-yellow) 75%, white);\n --data-dark-yellow-60: color-mix(in srgb, var(--data-dark-yellow) 60%, white);\n --data-dark-yellow-45: color-mix(in srgb, var(--data-dark-yellow) 45%, white);\n --data-dark-yellow-30: color-mix(in srgb, var(--data-dark-yellow) 30%, white);\n --data-dark-yellow-15: color-mix(in srgb, var(--data-dark-yellow) 15%, white);\n\n --data-red-75: color-mix(in srgb, var(--data-red) 75%, white);\n --data-red-60: color-mix(in srgb, var(--data-red) 60%, white);\n --data-red-45: color-mix(in srgb, var(--data-red) 45%, white);\n --data-red-30: color-mix(in srgb, var(--data-red) 30%, white);\n --data-red-15: color-mix(in srgb, var(--data-red) 15%, white);\n\n --data-green-75: color-mix(in srgb, var(--data-green) 75%, white);\n --data-green-60: color-mix(in srgb, var(--data-green) 60%, white);\n --data-green-45: color-mix(in srgb, var(--data-green) 45%, white);\n --data-green-30: color-mix(in srgb, var(--data-green) 30%, white);\n --data-green-15: color-mix(in srgb, var(--data-green) 15%, white);\n\n --data-mint-green-75: color-mix(in srgb, var(--data-mint-green) 75%, white);\n --data-mint-green-60: color-mix(in srgb, var(--data-mint-green) 60%, white);\n --data-mint-green-45: color-mix(in srgb, var(--data-mint-green) 45%, white);\n --data-mint-green-30: color-mix(in srgb, var(--data-mint-green) 30%, white);\n --data-mint-green-15: color-mix(in srgb, var(--data-mint-green) 15%, white);\n\n --data-violet-75: color-mix(in srgb, var(--data-violet) 75%, white);\n --data-violet-60: color-mix(in srgb, var(--data-violet) 60%, white);\n --data-violet-45: color-mix(in srgb, var(--data-violet) 45%, white);\n --data-violet-30: color-mix(in srgb, var(--data-violet) 30%, white);\n --data-violet-15: color-mix(in srgb, var(--data-violet) 15%, white);\n\n --data-orange-75: color-mix(in srgb, var(--data-orange) 75%, white);\n --data-orange-60: color-mix(in srgb, var(--data-orange) 60%, white);\n --data-orange-45: color-mix(in srgb, var(--data-orange) 45%, white);\n --data-orange-30: color-mix(in srgb, var(--data-orange) 30%, white);\n --data-orange-15: color-mix(in srgb, var(--data-orange) 15%, white);\n\n --data-pink-75: color-mix(in srgb, var(--data-pink) 75%, white);\n --data-pink-60: color-mix(in srgb, var(--data-pink) 60%, white);\n --data-pink-45: color-mix(in srgb, var(--data-pink) 45%, white);\n --data-pink-30: color-mix(in srgb, var(--data-pink) 30%, white);\n --data-pink-15: color-mix(in srgb, var(--data-pink) 15%, white);\n\n --data-dark-green-75: color-mix(in srgb, var(--data-dark-green) 75%, white);\n --data-dark-green-60: color-mix(in srgb, var(--data-dark-green) 60%, white);\n --data-dark-green-45: color-mix(in srgb, var(--data-dark-green) 45%, white);\n --data-dark-green-30: color-mix(in srgb, var(--data-dark-green) 30%, white);\n --data-dark-green-15: color-mix(in srgb, var(--data-dark-green) 15%, white);\n\n --data-purple-75: color-mix(in srgb, var(--data-purple) 75%, white);\n --data-purple-60: color-mix(in srgb, var(--data-purple) 60%, white);\n --data-purple-45: color-mix(in srgb, var(--data-purple) 45%, white);\n --data-purple-30: color-mix(in srgb, var(--data-purple) 30%, white);\n --data-purple-15: color-mix(in srgb, var(--data-purple) 15%, white);\n\n --data-ruby-red-75: color-mix(in srgb, var(--data-ruby-red) 75%, white);\n --data-ruby-red-60: color-mix(in srgb, var(--data-ruby-red) 60%, white);\n --data-ruby-red-45: color-mix(in srgb, var(--data-ruby-red) 45%, white);\n --data-ruby-red-30: color-mix(in srgb, var(--data-ruby-red) 30%, white);\n --data-ruby-red-15: color-mix(in srgb, var(--data-ruby-red) 15%, white);\n\n --data-yellow-75: color-mix(in srgb, var(--data-yellow) 75%, white);\n --data-yellow-60: color-mix(in srgb, var(--data-yellow) 60%, white);\n --data-yellow-45: color-mix(in srgb, var(--data-yellow) 45%, white);\n --data-yellow-30: color-mix(in srgb, var(--data-yellow) 30%, white);\n --data-yellow-15: color-mix(in srgb, var(--data-yellow) 15%, white);\n\n --data-dark-brown-75: color-mix(in srgb, var(--data-dark-brown) 75%, white);\n --data-dark-brown-60: color-mix(in srgb, var(--data-dark-brown) 60%, white);\n --data-dark-brown-45: color-mix(in srgb, var(--data-dark-brown) 45%, white);\n --data-dark-brown-30: color-mix(in srgb, var(--data-dark-brown) 30%, white);\n --data-dark-brown-15: color-mix(in srgb, var(--data-dark-brown) 15%, white);\n\n --data-brown-75: color-mix(in srgb, var(--data-brown) 75%, white);\n --data-brown-60: color-mix(in srgb, var(--data-brown) 60%, white);\n --data-brown-45: color-mix(in srgb, var(--data-brown) 45%, white);\n --data-brown-30: color-mix(in srgb, var(--data-brown) 30%, white);\n --data-brown-15: color-mix(in srgb, var(--data-brown) 15%, white);\n\n --data-dark-blue-75: color-mix(in srgb, var(--data-dark-blue) 75%, white);\n --data-dark-blue-60: color-mix(in srgb, var(--data-dark-blue) 60%, white);\n --data-dark-blue-45: color-mix(in srgb, var(--data-dark-blue) 45%, white);\n --data-dark-blue-30: color-mix(in srgb, var(--data-dark-blue) 30%, white);\n --data-dark-blue-15: color-mix(in srgb, var(--data-dark-blue) 15%, white);\n\n --data-light-blue-75: color-mix(in srgb, var(--data-light-blue) 75%, white);\n --data-light-blue-60: color-mix(in srgb, var(--data-light-blue) 60%, white);\n --data-light-blue-45: color-mix(in srgb, var(--data-light-blue) 45%, white);\n --data-light-blue-30: color-mix(in srgb, var(--data-light-blue) 30%, white);\n --data-light-blue-15: color-mix(in srgb, var(--data-light-blue) 15%, white);\n\n --data-moss-green-75: color-mix(in srgb, var(--data-moss-green) 75%, white);\n --data-moss-green-60: color-mix(in srgb, var(--data-moss-green) 60%, white);\n --data-moss-green-45: color-mix(in srgb, var(--data-moss-green) 45%, white);\n --data-moss-green-30: color-mix(in srgb, var(--data-moss-green) 30%, white);\n --data-moss-green-15: color-mix(in srgb, var(--data-moss-green) 15%, white);\n\n /* 15 % of the status colour over the surface, so one declaration covers both modes. */\n --status-success-bg: color-mix(in srgb, var(--status-success) 15%, var(--neutral-0));\n --status-warning-bg: color-mix(in srgb, var(--status-warning) 15%, var(--neutral-0));\n --status-attention-bg: color-mix(in srgb, var(--status-attention) 15%, var(--neutral-0));\n --status-error-bg: color-mix(in srgb, var(--status-error) 15%, var(--neutral-0));\n --status-info-bg: color-mix(in srgb, var(--status-info) 15%, var(--neutral-0));\n}\n\n/* ============================================================================\n Layers 2 and 3 — semantic and component tokens (light)\n\n No colour literal below this line.\n ========================================================================= */\n:root {\n /* --- Typography -------------------------------------------------------- */\n --font-ui: 'RijksSans', 'Source Sans 3', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n --font-mono: 'Source Code Pro', ui-monospace, SFMono-Regular, Menlo, monospace;\n\n --text-dashboard: 700 1.25rem/1.2 var(--font-ui);\n --text-h1: 700 1.75rem/1.2 var(--font-ui);\n --text-h1-mobile: 700 1.5rem/1.15 var(--font-ui);\n --text-h1-display: 700 2.5rem/1.1 var(--font-ui);\n --text-h2: 700 1.25rem/1.25 var(--font-ui);\n --text-tile-title: 700 1rem/1.3 var(--font-ui);\n --text-tile-sub: 400 0.875rem/1.35 var(--font-ui);\n --text-kpi: 700 2rem/1.1 var(--font-ui);\n --text-kpi-mobile: 700 1.5rem/1.1 var(--font-ui);\n --text-kpi-secondary: 700 1.25rem/1.1 var(--font-ui);\n --text-body: 400 1rem/1.5 var(--font-ui);\n /* The text being translated and its translation: larger than body, read at a glance. */\n --text-translation: 400 1.25rem/1.5 var(--font-ui);\n --text-ui: 400 1rem/1.4 var(--font-ui);\n --text-small: 400 0.875rem/1.45 var(--font-ui);\n --text-meta: 400 0.875rem/1.4 var(--font-ui);\n --text-table: 400 1rem/1.4 var(--font-ui);\n --text-table-head: 700 0.875rem/1.3 var(--font-ui);\n --text-axis: 400 0.75rem/1.2 var(--font-ui);\n\n --label-size: 0.875rem;\n --label-weight: 700;\n --label-tracking: 0.08em;\n --kpi-tracking: -0.02em;\n\n /* --- Spacing (4 px scale) --------------------------------------------- */\n --space-1: 4px;\n --space-2: 8px;\n --space-3: 12px;\n --space-4: 16px;\n --space-5: 20px;\n --space-6: 24px;\n --space-8: 32px;\n --space-10: 40px;\n\n /* --- Component sizes --------------------------------------------------- */\n --h-topbar: 3.5rem;\n --h-contextbar: 3rem;\n --h-mobile-header: 4.5rem;\n --h-control: 3rem;\n --h-button: 3rem;\n --h-button-compact: 2.5rem;\n --h-button-chrome: 2.5rem;\n --h-icon-button: 2.5rem;\n --h-chip: 2rem;\n --h-chip-field: 1.75rem;\n --h-nav-row: 3rem;\n --h-nav-head: 6.5rem;\n --h-table-row: 3rem;\n --h-touch: 3rem;\n /* The smallest pointer target. A box that draws smaller reaches it through a\n transparent hit area (`::after`, negative inset). */\n --h-target: 3rem;\n /* A link in a list of text links: one line of text, the WCAG AA floor, as on rijksoverheid.nl. */\n --h-target-text: 1.5rem;\n /* The two dense exceptions to the target: a date picker day cell and a listbox option row. */\n --h-option: 2.5rem;\n /* The sparkline of a KPI: a line and its area under the figure, with no axes. */\n --h-sparkline: 2rem;\n\n --w-nav: 288px;\n --w-rail: 72px;\n --w-text: 760px;\n --w-message: 560px;\n /* A language choice in the translator's bar. */\n --w-translator-language: 18rem;\n /* The widest the page's content gets. A host sets `--lintje-content-width` to change it. */\n --w-content: 1360px;\n --nav-edge: 4px;\n /* The ribbon is the unit: 48 px, 40 on a phone. Both bars are in rem, so they grow with the\n reader's text size. */\n --w-ribbon: 3rem;\n --h-logobar: calc(2.5 * var(--w-ribbon));\n /* The top bar's height: what pins under the bar measures `--h-topbar`. */\n --h-navbar: var(--h-topbar);\n /* How far what follows the hero stands over its band's lower edge. */\n --hero-overlap: var(--space-10);\n /* The widest the picture beside the hero's text gets: four of the twelve columns at 1440. */\n --w-hero-aside: 400px;\n /* The narrowest a card gets in a card list before the list drops a column. */\n --w-card: 320px;\n /* The same for a horizontal card, whose picture takes a column of its own. */\n --w-card-wide: 480px;\n --w-card-media: 200px;\n --w-card-logo: 3.5rem;\n --w-card-logo-wide: 5rem;\n /* The narrowest thumbnail under a gallery's large picture. */\n --w-gallery-thumb: 120px;\n /* The narrowest column of links in a footer before the columns stand under each other. */\n --w-footer-column: 220px;\n\n --page-pad-y: 32px;\n --page-pad-x: 24px;\n /* What a full-width bar or the content adds to its side padding so what stands in it keeps to\n `--w-content`; the percentage is taken of the box the bar stands in. */\n --page-gutter: max(\n 0px,\n calc((100% - var(--lintje-content-width, var(--w-content)) - 2 * var(--page-pad-x)) / 2)\n );\n --grid-gutter: 24px;\n --tile-pad-y: 20px;\n --tile-pad-x: 24px;\n --chart-h-main: 260px;\n --chart-h-small: 180px;\n --chart-h-expanded: 560px;\n\n /* Sticky context = top bar + summary bar. */\n --h-sticky: calc(var(--h-topbar) + var(--h-contextbar));\n\n --radius: 0px;\n --radius-round: 50%;\n\n --shadow-sticky: 0 2px 6px var(--alpha-black-08);\n --shadow-popover: 0 4px 16px var(--alpha-black-14);\n --shadow-nav: 2px 0 8px var(--alpha-black-08);\n --shadow-chart-hover: 0 1px 4px var(--alpha-black-22);\n --shadow-scroll-start: inset 12px 0 10px -10px var(--alpha-black-18);\n --shadow-scroll-end: inset -12px 0 10px -10px var(--alpha-black-18);\n\n --color-overlay-page: var(--alpha-black-60);\n --color-overlay-nav: var(--alpha-black-16);\n\n --focus-width: 3px;\n --focus-offset: 2px;\n\n /* --- Motion ------------------------------------------------------------ */\n /* `@kind other` marks these for design tooling as neither colors, sizes nor type; the library\n CSS ships unminified so the notes reach it. */\n --ease-in-motion: cubic-bezier(0.2, 0, 0, 1); /* @kind other */\n --ease-out-motion: cubic-bezier(0.4, 0, 1, 1); /* @kind other */\n --dur-base: 200ms; /* @kind other */\n --dur-hover: 120ms; /* @kind other */\n --dur-popover: var(--dur-base); /* @kind other */\n --dur-submenu: 300ms; /* @kind other */\n --dur-toast: var(--dur-base); /* @kind other */\n --dur-scrim: var(--dur-base); /* @kind other */\n --dur-rail: var(--dur-base); /* @kind other */\n --dur-collapse: var(--dur-base); /* @kind other */\n --dur-modal: var(--dur-base); /* @kind other */\n --dur-sheet: var(--dur-base); /* @kind other */\n --dur-kpi: var(--dur-base); /* @kind other */\n --dur-badge: 300ms; /* @kind other */\n --dur-draw: 900ms; /* @kind other */\n --dur-data-label: 300ms; /* @kind other */\n --dur-layer: 400ms; /* @kind other */\n --dur-skeleton: 1200ms; /* @kind other */\n --dur-wave: 600ms; /* @kind other */\n\n /* --- Semantic: surfaces ------------------------------------------------ */\n --color-bg-page: var(--neutral-1);\n --color-bg-surface: var(--neutral-0);\n --color-bg-subtle: var(--neutral-2);\n --color-bg-title: var(--neutral-1);\n /* Between steps 2 and 3: on the cool-grey ramp neutral-2 sits too close to the page to read\n as a band. */\n --color-bg-filter: color-mix(in srgb, var(--neutral-2), var(--neutral-3));\n --color-bg-selected: var(--neutral-2);\n --color-bg-inset: var(--neutral-2);\n\n /* --- Semantic: text ---------------------------------------------------- */\n --color-text-primary: var(--neutral-6);\n --color-text-secondary: var(--neutral-6);\n --color-text-muted: var(--neutral-5);\n --color-text-inverse: var(--neutral-0);\n --color-text-disabled: var(--neutral-4);\n /* A placeholder must stay readable: 4.5:1 on the surface in both modes. */\n --color-text-placeholder: var(--neutral-5);\n --color-text-on-fill: var(--ink-white);\n --color-text-on-light-fill: var(--ink-black);\n --color-qr-bg: var(--ink-white);\n --color-qr-fg: var(--ink-black);\n\n /* --- Semantic: borders ------------------------------------------------- */\n --color-border-default: var(--neutral-3);\n --color-border-strong: var(--neutral-3);\n --color-border-filter: var(--neutral-3);\n --color-border-heavy: var(--neutral-4);\n /* The resting edge of a field box: 3:1 (WCAG 1.4.11) on the surface and the filter band. */\n --color-border-field: var(--neutral-5);\n /* The 2 px edge of a checkbox and a radio: 3:1 on the surface; dark re-points it. */\n --color-border-choice: var(--neutral-5);\n /* In dark a sheet is the same #282828 as the tile under it, so this line separates them. */\n --color-border-popover: var(--neutral-3);\n /* A DASHED outline (a suggestion, an uncertain term): neutral-5, because a dashed line has half\n the ink of a solid one and must still reach 3:1. */\n --color-border-suggestion: var(--neutral-5);\n\n /* --- Semantic: action -------------------------------------------------- */\n --color-action-primary: var(--primary);\n --color-action-primary-hover: var(--primary-hover);\n --color-action-primary-text: var(--ink-white);\n /* A primary fill in dark is a dark box on a dark page (WCAG 1.4.11): it gets a tint border. */\n --color-action-primary-border: var(--primary);\n --color-action-secondary-border: var(--primary);\n /* The destructive fill: the error red, white text on it (5.01:1). Hover is darker in light,\n lighter in dark. In dark the border is a tint, because #D52B1E is 2.94:1 on #282828. */\n --color-action-danger: var(--status-error);\n --color-action-danger-hover: color-mix(in srgb, var(--status-error), black 30%);\n --color-action-danger-border: var(--status-error);\n /* The word of the outlined danger button; dark re-points it (the red is 2.94:1 on #282828). */\n --color-action-danger-text: var(--status-error);\n --color-link: var(--primary);\n --color-link-hover: var(--primary-hover);\n /* A link on a status background: in dark no tint of the primary reaches 4.5:1 there, so it\n reads in the text colour. It is bold and underlined, so colour never carried it alone. */\n --color-link-on-status: var(--primary);\n\n /* The accent splits in three, because a fill, a line and a word have different floors:\n fill (the primary), line (non-text, 3:1: `--primary-tint` in dark) and text (4.5:1:\n `--primary-tint-text` in dark). A word in the line token fails: it is sized for 3:1. */\n --color-accent: var(--primary);\n --color-accent-line: var(--primary);\n --color-accent-text: var(--primary);\n\n --color-focus: var(--focus-orange);\n\n /* --- Semantic: status -------------------------------------------------- */\n --color-attention: var(--status-attention);\n --color-success: var(--status-success);\n --color-warning: var(--status-warning);\n --color-error: var(--status-error);\n --color-info: var(--status-info);\n\n --color-warning-bg: var(--status-warning-bg);\n --color-attention-bg: var(--status-attention-bg);\n --color-error-bg: var(--status-error-bg);\n --color-info-bg: var(--status-info-bg);\n --color-success-bg: var(--status-success-bg);\n\n /* A status mark on its own tint: the status colour, nudged to 3:1 where it falls short. */\n --color-attention-line: color-mix(in srgb, var(--status-attention), black 10%);\n --color-error-line: var(--status-error);\n --color-info-line: var(--status-info);\n --color-success-line: var(--status-success);\n /* A status WORD at 4.5:1 on the surface and on `--color-bg-subtle`: the red itself, the green\n 5 % darker (4.13:1 on neutral-2); dark lifts both. A glyph or an edge keeps the line token. */\n --color-error-text: var(--status-error);\n --color-success-text: color-mix(in srgb, var(--status-success), black 5%);\n\n /* --- Navigation (the theme fill; neutral in dark) ---------------------- */\n --color-nav-bg: var(--primary);\n --color-nav-text: var(--ink-white);\n --color-nav-text-sub: var(--alpha-white-82);\n --color-nav-hover: var(--primary-hover);\n --color-nav-active: var(--primary-hover);\n --color-nav-active-edge: var(--ink-white);\n --color-nav-active-text: var(--ink-white);\n --color-nav-line: var(--primary-line);\n --color-nav-disabled: var(--alpha-white-45);\n --color-nav-badge-bg: var(--status-error);\n --color-nav-badge-text: var(--ink-white);\n /* The avatar is white with black initials wherever it stands, in both modes. */\n --color-nav-avatar-bg: var(--ink-white);\n --color-nav-avatar-text: var(--ink-black);\n /* Orange fails on the theme fill (1.89:1 on #01689B, 1:1 on #E17000); white reaches 3:1 on\n all six primaries. Dark re-points it to the orange. */\n --color-focus-on-theme: var(--ink-white);\n /* The theme's ACCENT, not the attention status: on `defensie` the menu is `#E17000` and the\n status colour made the band disappear. `--accent` is document level only. */\n --color-nav-environment-bg: var(--accent);\n --color-nav-environment-text: var(--color-text-on-fill);\n /* The page's surface in both modes. The navigation bar under it is the menu turned a quarter,\n on `--color-nav-*`. */\n --color-logobar-bg: var(--color-bg-surface);\n --color-logobar-text: var(--color-text-primary);\n /* The ribbon in the emblem; only the logo re-points it in dark, never lintblauw elsewhere. */\n --color-logo-ribbon: var(--ribbon-blue);\n /* What marks an entry in that bar. They name the primitives, never `--color-nav-*`: the bar\n points those at these, and the two would refer to each other. */\n --color-navbar-hover: var(--primary-hover);\n --color-navbar-active: var(--primary-hover);\n --color-navbar-active-edge: var(--ink-white);\n --color-navbar-open-text: var(--color-accent-text);\n /* The start page's band is the primary's wash, so it never reads as the menu. The orange ring\n misses 3:1 on it; the ring takes the text colour. */\n --color-hero-bg: var(--primary-wash);\n --color-hero-text: var(--color-text-primary);\n --color-hero-focus: var(--color-text-primary);\n /* The site's foot stands on the menu's own fill, as on rijksoverheid.nl; in dark it follows the menu. */\n --color-footer-bg: var(--color-nav-bg);\n --color-footer-text: var(--color-nav-text);\n --color-footer-line: var(--color-nav-line);\n --color-footer-focus: var(--color-focus-on-theme);\n\n /* The box behind a recognised term: the primary's wash; dark re-points it. */\n --color-term-bg: var(--primary-wash);\n /* The chosen option of a row of options: the primary's wash; dark re-points it. */\n --color-choice-active-bg: var(--primary-wash);\n /* The 2 px line under a term; dark takes the text tint, as the line tint falls short on it. */\n --color-term-line: var(--color-accent-line);\n\n /* --- Data colors ------------------------------------------------------- */\n /* One colour per variable, named after the Rijkshuisstijl colour. */\n --color-chart-sky-blue: var(--data-sky-blue);\n --color-chart-dark-yellow: var(--data-dark-yellow);\n --color-chart-dark-yellow-text: var(--data-dark-yellow-text);\n --color-chart-red: var(--data-red);\n --color-chart-green: var(--data-green);\n --color-chart-mint-green: var(--data-mint-green);\n --color-chart-violet: var(--data-violet);\n --color-chart-orange: var(--data-orange);\n --color-chart-pink: var(--data-pink);\n --color-chart-dark-green: var(--data-dark-green);\n --color-chart-purple: var(--data-purple);\n --color-chart-ruby-red: var(--data-ruby-red);\n --color-chart-yellow: var(--data-yellow);\n --color-chart-dark-brown: var(--data-dark-brown);\n --color-chart-brown: var(--data-brown);\n --color-chart-dark-blue: var(--data-dark-blue);\n --color-chart-light-blue: var(--data-light-blue);\n --color-chart-moss-green: var(--data-moss-green);\n --color-chart-secondary: var(--data-comparison); /* comparison, context */\n --color-chart-other: var(--data-other); /* \"Overig\" */\n --color-chart-remainder: var(--neutral-3); /* the rest of a whole, e.g. a donut's open part */\n --color-chart-emphasis: var(--data-emphasis); /* trend, threshold, target */\n --color-chart-grid: var(--data-grid);\n --color-chart-axis: var(--neutral-5);\n /* The zero line (darker than the grid) and the hatch of missing data carry meaning, so they\n reach 3:1 on the surface: a fifth of the way from neutral-4 to neutral-5 (3.1:1; 4.0:1 dark). */\n --color-chart-zero: color-mix(in srgb, var(--neutral-5) 20%, var(--neutral-4));\n --color-chart-hatch: color-mix(in srgb, var(--neutral-5) 20%, var(--neutral-4));\n /* A speaker's colour under a whole fragment: this share of it over the surface, so text keeps\n its contrast in light and in dark. */\n --tint-speaker: 12%;\n\n /* These map colours stay deliberately neutral so the data is the only colour on the map. */\n --color-map-water: var(--neutral-0);\n --color-map-land: var(--neutral-2);\n --color-map-border: var(--neutral-4);\n /* An area with a figure: 3:1 against the land and the lightest class, which are 1.1:1 apart. */\n --color-map-border-data: var(--neutral-5);\n\n /* The variable a figure draws when its data names none: the first colour of the list, the\n same decision as `DEFAULT_SERIES_COLOR` in `charts/shared/colors.ts`. */\n --color-chart-default: var(--color-chart-sky-blue);\n\n /* Subdivision of one variable: its colour in its tint ladder, strongest first, on the steps\n 100 / 75 / 60 / 45 / 30. Every colour carries its ladder, so a figure that brings a colour\n brings its tints: a renderer names `--color-chart-<colour>` and\n `--color-chart-<colour>-tint-N`, never a --data-* colour. */\n --color-chart-sky-blue-tint-2: var(--data-sky-blue-75);\n --color-chart-sky-blue-tint-3: var(--data-sky-blue-60);\n --color-chart-sky-blue-tint-4: var(--data-sky-blue-45);\n --color-chart-sky-blue-tint-5: var(--data-sky-blue-30);\n\n --color-chart-dark-yellow-tint-2: var(--data-dark-yellow-75);\n --color-chart-dark-yellow-tint-3: var(--data-dark-yellow-60);\n --color-chart-dark-yellow-tint-4: var(--data-dark-yellow-45);\n --color-chart-dark-yellow-tint-5: var(--data-dark-yellow-30);\n\n --color-chart-red-tint-2: var(--data-red-75);\n --color-chart-red-tint-3: var(--data-red-60);\n --color-chart-red-tint-4: var(--data-red-45);\n --color-chart-red-tint-5: var(--data-red-30);\n\n --color-chart-green-tint-2: var(--data-green-75);\n --color-chart-green-tint-3: var(--data-green-60);\n --color-chart-green-tint-4: var(--data-green-45);\n --color-chart-green-tint-5: var(--data-green-30);\n\n --color-chart-mint-green-tint-2: var(--data-mint-green-75);\n --color-chart-mint-green-tint-3: var(--data-mint-green-60);\n --color-chart-mint-green-tint-4: var(--data-mint-green-45);\n --color-chart-mint-green-tint-5: var(--data-mint-green-30);\n\n --color-chart-violet-tint-2: var(--data-violet-75);\n --color-chart-violet-tint-3: var(--data-violet-60);\n --color-chart-violet-tint-4: var(--data-violet-45);\n --color-chart-violet-tint-5: var(--data-violet-30);\n\n --color-chart-orange-tint-2: var(--data-orange-75);\n --color-chart-orange-tint-3: var(--data-orange-60);\n --color-chart-orange-tint-4: var(--data-orange-45);\n --color-chart-orange-tint-5: var(--data-orange-30);\n\n --color-chart-pink-tint-2: var(--data-pink-75);\n --color-chart-pink-tint-3: var(--data-pink-60);\n --color-chart-pink-tint-4: var(--data-pink-45);\n --color-chart-pink-tint-5: var(--data-pink-30);\n\n --color-chart-dark-green-tint-2: var(--data-dark-green-75);\n --color-chart-dark-green-tint-3: var(--data-dark-green-60);\n --color-chart-dark-green-tint-4: var(--data-dark-green-45);\n --color-chart-dark-green-tint-5: var(--data-dark-green-30);\n\n --color-chart-purple-tint-2: var(--data-purple-75);\n --color-chart-purple-tint-3: var(--data-purple-60);\n --color-chart-purple-tint-4: var(--data-purple-45);\n --color-chart-purple-tint-5: var(--data-purple-30);\n\n --color-chart-ruby-red-tint-2: var(--data-ruby-red-75);\n --color-chart-ruby-red-tint-3: var(--data-ruby-red-60);\n --color-chart-ruby-red-tint-4: var(--data-ruby-red-45);\n --color-chart-ruby-red-tint-5: var(--data-ruby-red-30);\n\n --color-chart-yellow-tint-2: var(--data-yellow-75);\n --color-chart-yellow-tint-3: var(--data-yellow-60);\n --color-chart-yellow-tint-4: var(--data-yellow-45);\n --color-chart-yellow-tint-5: var(--data-yellow-30);\n\n --color-chart-dark-brown-tint-2: var(--data-dark-brown-75);\n --color-chart-dark-brown-tint-3: var(--data-dark-brown-60);\n --color-chart-dark-brown-tint-4: var(--data-dark-brown-45);\n --color-chart-dark-brown-tint-5: var(--data-dark-brown-30);\n\n --color-chart-brown-tint-2: var(--data-brown-75);\n --color-chart-brown-tint-3: var(--data-brown-60);\n --color-chart-brown-tint-4: var(--data-brown-45);\n --color-chart-brown-tint-5: var(--data-brown-30);\n\n --color-chart-dark-blue-tint-2: var(--data-dark-blue-75);\n --color-chart-dark-blue-tint-3: var(--data-dark-blue-60);\n --color-chart-dark-blue-tint-4: var(--data-dark-blue-45);\n --color-chart-dark-blue-tint-5: var(--data-dark-blue-30);\n\n --color-chart-light-blue-tint-2: var(--data-light-blue-75);\n --color-chart-light-blue-tint-3: var(--data-light-blue-60);\n --color-chart-light-blue-tint-4: var(--data-light-blue-45);\n --color-chart-light-blue-tint-5: var(--data-light-blue-30);\n\n --color-chart-moss-green-tint-2: var(--data-moss-green-75);\n --color-chart-moss-green-tint-3: var(--data-moss-green-60);\n --color-chart-moss-green-tint-4: var(--data-moss-green-45);\n --color-chart-moss-green-tint-5: var(--data-moss-green-30);\n\n /* The default ladder, for a figure that names no colour: the sky blue's. */\n --color-chart-tint-1: var(--color-chart-sky-blue);\n --color-chart-tint-2: var(--color-chart-sky-blue-tint-2);\n --color-chart-tint-3: var(--color-chart-sky-blue-tint-3);\n --color-chart-tint-4: var(--color-chart-sky-blue-tint-4);\n --color-chart-tint-5: var(--color-chart-sky-blue-tint-5);\n\n /* Sequential scale for ordinal classes (heatmap, choropleth), lightest first. A component names\n these, never a --data-* colour directly. */\n --color-chart-seq-1: var(--data-sky-blue-15);\n --color-chart-seq-2: var(--data-sky-blue-30);\n --color-chart-seq-3: var(--data-sky-blue-45);\n --color-chart-seq-4: var(--data-sky-blue-75);\n --color-chart-seq-5: var(--data-sky-blue);\n}\n\n/* ============================================================================\n Dark mode — the Logius range, no inversion\n\n Redefines the seven `--neutral-*` primitives, re-declares `--primary-hover` lighter and\n re-points the layer-2/3 names whose meaning changes; everything that merely follows a\n neutral is absent on purpose. Page and tiles are both #282828, the border separates them: the\n step below is the menu's, so it stays a band beside the page and under the logo bar.\n Screen only: paper is always light, whatever the reader chose.\n ========================================================================= */\n@media screen {\n [data-mode='dark'] {\n --neutral-0: #282828;\n --neutral-1: #1D1D1D;\n --neutral-2: #333333;\n --neutral-3: #4A4A4A;\n --neutral-4: #7A7A7A;\n --neutral-5: #B0B0B0;\n --neutral-6: #FFFFFF;\n\n /* The hover goes UP in dark: the light mix would put a near-black fill on the near-black page. */\n --primary-hover: color-mix(in srgb, var(--primary), white 12%);\n\n --color-bg-page: var(--neutral-0);\n --color-bg-title: var(--neutral-0);\n /* The hero's wash sits halfway between the menu (L 0.231) and the page (L 0.277), below the\n page as in light: a panel or tab on it is lighter than its ground. */\n --primary-wash: oklch(from var(--primary) 0.254 min(c, 0.02) h);\n\n /* The filter zone must read as a band, so in dark it steps UP to neutral-2 (neutral-1 turned\n the fields in it into light boxes). `--color-bg-inset` keeps neutral-1: \"sunken\". */\n --color-bg-filter: var(--neutral-2);\n --color-bg-inset: var(--neutral-1);\n\n --color-text-inverse: var(--neutral-1);\n\n /* Colour that must read by itself on #282828 becomes the tint; a FILL keeps the primary. */\n --color-action-primary-border: var(--primary-tint);\n --color-action-secondary-border: var(--primary-tint);\n /* Danger hover: 8 % white is the most that keeps white text at 4.5:1 (4.56:1). The border and\n the word lift the red as the primary's tints do, to 3:1 on #282828 and 4.5:1 on #333333,\n the hover surface; the word's chroma cap keeps it inside sRGB. */\n --color-action-danger-hover: color-mix(in srgb, var(--status-error), white 8%);\n --color-action-danger-border: oklch(from var(--status-error) max(l, 0.58) c h);\n --color-action-danger-text: oklch(from var(--status-error) max(l, 0.71) min(c, 0.18) h);\n /* A status mark at 3:1 on its own tint. */\n --color-attention-line: var(--status-attention);\n --color-error-line: oklch(from var(--status-error) max(l, 0.6) c h);\n --color-info-line: oklch(from var(--status-info) max(l, 0.58) c h);\n --color-success-line: oklch(from var(--status-success) max(l, 0.57) c h);\n /* A status word at 4.5:1 on #333333, lifted as the danger word is. */\n --color-error-text: oklch(from var(--status-error) max(l, 0.71) min(c, 0.18) h);\n --color-success-text: oklch(from var(--status-success) max(l, 0.68) min(c, 0.18) h);\n /* A link is text: the text tint, not the line tint. The hover stays white. */\n --color-link: var(--primary-tint-text);\n --color-link-hover: var(--neutral-6);\n --color-link-on-status: var(--neutral-6);\n --color-accent-line: var(--primary-tint);\n --color-accent-text: var(--primary-tint-text);\n\n /* Lintblauw has too little contrast on the dark surface; the house style lightens it. */\n --color-logo-ribbon: var(--ribbon-blue-dark);\n\n /* The menu is neutral in dark: near-black, in the rail and in the bar alike, so in the top\n layout it stays its own band under the logo bar. Hover and active are one step up, as they\n are one fill in light; the edge is the text tint, as the line tint is 3:1 on neutral-0 only. */\n --color-nav-bg: var(--neutral-1);\n --color-nav-text: var(--neutral-6);\n --color-nav-text-sub: var(--neutral-5);\n --color-nav-hover: var(--neutral-2);\n --color-nav-active: var(--neutral-2);\n --color-nav-active-edge: var(--primary-tint-text);\n --color-navbar-hover: var(--neutral-2);\n --color-navbar-active: var(--neutral-2);\n --color-navbar-active-edge: var(--primary-tint-text);\n /* The open entry's word stands on the panel's surface: full text contrast, not the tint. */\n --color-navbar-open-text: var(--color-text-primary);\n /* The label is 16 px text: the tint is 3.0:1 and needs 4.5:1. The edge keeps the tint. */\n --color-nav-active-text: var(--neutral-6);\n /* The sheet is told from the page by its shadow and this quiet line; 1.66:1 is accepted here. */\n --color-border-popover: var(--neutral-3);\n --color-nav-line: var(--neutral-2);\n --color-nav-disabled: var(--neutral-4);\n /* The menu is neutral here, so its ring is the orange of every other surface. */\n --color-focus-on-theme: var(--color-focus);\n /* The choice edge keeps neutral-4 in dark: it already reaches 3:1 there (3.43:1 on #282828). */\n --color-border-choice: var(--neutral-4);\n\n /* A term's box is the subtle surface: behind a word on #282828 the dark wash would be a hole. */\n --color-term-bg: var(--neutral-2);\n --color-choice-active-bg: var(--neutral-2);\n --color-hero-focus: var(--color-focus);\n --color-term-line: var(--primary-tint-text);\n\n /* Yellow as text works on the dark surface, so the dark gold is not needed. */\n --color-chart-dark-yellow-text: var(--data-dark-yellow);\n --color-map-water: var(--neutral-1);\n\n --shadow-sticky: 0 2px 6px var(--alpha-black-40);\n --shadow-popover: 0 4px 16px var(--alpha-black-55);\n --shadow-nav: 2px 0 8px var(--alpha-black-40);\n --shadow-chart-hover: 0 1px 4px var(--alpha-black-60);\n --shadow-scroll-start: inset 12px 0 10px -10px var(--alpha-black-60);\n --shadow-scroll-end: inset -12px 0 10px -10px var(--alpha-black-60);\n --color-overlay-nav: var(--alpha-black-40);\n }\n}\n\n/* ============================================================================\n Below 768 px the gutter follows the page padding and every pointer target is the touch\n floor. Screen only: a portrait page is narrower than 768 px and keeps the desktop form.\n ========================================================================= */\n@media screen and (max-width: 767px) {\n :root {\n --grid-gutter: 16px;\n --h-target: var(--h-touch);\n --h-option: var(--h-touch);\n --chart-h-expanded: 320px;\n --w-ribbon: 2.5rem;\n }\n}\n\n/* ============================================================================\n Paper — white under the content, since Lintje prints its own fills\n (`print-color-adjust: exact` in base.css): a band in the page's grey would cost ink and\n say nothing.\n ========================================================================= */\n@media print {\n :root {\n /* The paper's margin is the page's edge: bars and content start at it, aligned. */\n --page-pad-x: 0px;\n --color-bg-page: var(--neutral-0);\n --color-bg-title: var(--neutral-0);\n --color-bg-filter: var(--neutral-0);\n }\n}\n\n/* The sheet's own margin, so the content never runs to the paper's edge: room for the browser's\n date, address and page number above and below, and a portrait sheet still wide enough for the\n tablet's form. A custom property does not reach `@page`, so the value stands here. */\n@page { margin: 15mm 12mm; }\n", Be = "/*\n * The reset every shadow root needs, adopted once as one shared `CSSStyleSheet`.\n *\n * `background` and `color` are deliberately not on `:host`: every element has a `:host`, so\n * they would cut the inheritance chain at each boundary (an icon in the navigation would lose\n * its white `currentColor`). Page-level rules (`html, body`) belong to the host page.\n */\n\n:host {\n font: var(--text-ui);\n font-family: var(--font-ui);\n -webkit-font-smoothing: antialiased;\n font-variant-numeric: tabular-nums;\n}\n\n*, *::before, *::after { box-sizing: border-box; }\n\nh1, h2, h3, h4, h5, h6, p, figure { margin: 0; }\nul, ol { margin: 0; padding: 0; list-style: none; }\n\nbutton {\n font: inherit;\n color: inherit;\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n}\n\na { color: var(--color-link); }\n\ninput, select, textarea { font: inherit; color: inherit; }\n\n/* Focus: always orange 3 px, never animated. */\n:focus-visible {\n outline: var(--focus-width) solid var(--color-focus);\n outline-offset: var(--focus-offset);\n}\n/* Where the outside would be clipped (tiles in a grid, table rows) the ring sits inside. */\n.focus-inset:focus-visible { outline-offset: calc(var(--focus-width) * -1); }\n\n[hidden] { display: none !important; }\n\n.visually-hidden {\n position: absolute;\n width: 1px; height: 1px;\n padding: 0; margin: -1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n border: 0;\n}\n\n@keyframes lintje-shimmer {\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n}\n@keyframes lintje-rise {\n from { opacity: 0; transform: translateY(6px); }\n to { opacity: 1; transform: none; }\n}\n@keyframes lintje-sheet-in {\n from { transform: translateY(100%); }\n to { transform: none; }\n}\n@keyframes lintje-menu-in {\n from { transform: translateY(-100%); }\n to { transform: none; }\n}\n@keyframes lintje-menu-out {\n from { transform: none; }\n to { transform: translateY(-100%); }\n}\n@keyframes lintje-fade-in { from { opacity: 0; } to { opacity: 1; } }\n/* A point, on a map or in a scatter plot, grows from its middle. */\n@keyframes lintje-point-grow { from { transform: scale(0); } }\n@keyframes lintje-drop-in { from { transform: translateY(-10px); } to { transform: none; } }\n@keyframes lintje-popover-in {\n from { opacity: 0; transform: translateY(-6px); }\n to { opacity: 1; transform: none; }\n}\n\n/* prefers-reduced-motion: all durations 0 except opacity (80 ms). */\n@media (prefers-reduced-motion: reduce) {\n :host {\n --dur-base: 0ms; --dur-hover: 0ms; --dur-popover: 0ms; --dur-submenu: 0ms; --dur-toast: 0ms; --dur-scrim: 0ms; --dur-rail: 0ms; --dur-collapse: 0ms;\n --dur-modal: 0ms; --dur-sheet: 0ms; --dur-kpi: 0ms; --dur-badge: 0ms; --dur-draw: 0ms;\n }\n *, *::before, *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 80ms !important;\n scroll-behavior: auto !important;\n }\n}\n\n/* Forced colours: the browser replaces every colour and drops shadows; what every root shares\n is the focus ring, in the system's Highlight. */\n@media (forced-colors: active) {\n :focus-visible { outline-color: Highlight; }\n}\n\n/* Paper. A fill carries meaning (a legend swatch, a status cell, the current page), so it prints\n even with the browser's background graphics off; the surfaces under it are white in print.\n A drawing in progress would print half drawn, so every mark stands in its final state. */\n@media print {\n *, *::before, *::after {\n print-color-adjust: exact;\n animation: none !important;\n transition: none !important;\n }\n}\n";
|
|
525
525
|
//#endregion
|
|
526
526
|
//#region src/core/styles.ts
|
|
527
527
|
function Ve(e) {
|
|
@@ -629,7 +629,7 @@ function M(e, t) {
|
|
|
629
629
|
}
|
|
630
630
|
//#endregion
|
|
631
631
|
//#region src/core/media.ts
|
|
632
|
-
var et = "(max-width: 767px)", tt = "(min-width: 1440px)", nt = /* @__PURE__ */ new Map();
|
|
632
|
+
var et = "screen and (max-width: 767px)", tt = "(min-width: 1440px)", nt = /* @__PURE__ */ new Map();
|
|
633
633
|
function rt(e) {
|
|
634
634
|
if (typeof matchMedia > "u") return null;
|
|
635
635
|
let t = nt.get(e);
|
|
@@ -766,11 +766,8 @@ function Ct(e) {
|
|
|
766
766
|
e ? localStorage.removeItem(xt) : localStorage.setItem(xt, "off");
|
|
767
767
|
} catch {}
|
|
768
768
|
}
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
}
|
|
772
|
-
var Tt = (e) => !e.ctrl && !e.alt && !e.meta && e.key.length === 1, Et = (e) => /^[a-z]$/i.test(e);
|
|
773
|
-
function Dt(e) {
|
|
769
|
+
var wt = (e) => !e.ctrl && !e.alt && !e.meta && e.key.length === 1, Tt = (e) => /^[a-z]$/i.test(e);
|
|
770
|
+
function Et(e) {
|
|
774
771
|
let t = e === "+" ? ["+"] : e.split("+").filter((e) => e !== "");
|
|
775
772
|
e.endsWith("++") && t.push("+");
|
|
776
773
|
let n = {
|
|
@@ -790,7 +787,7 @@ function Dt(e) {
|
|
|
790
787
|
n.key = a ?? (e.length === 1 ? e.toLowerCase() : e);
|
|
791
788
|
}), n;
|
|
792
789
|
}
|
|
793
|
-
function
|
|
790
|
+
function Dt(e) {
|
|
794
791
|
return [
|
|
795
792
|
e.ctrl ? "Ctrl" : "",
|
|
796
793
|
e.alt ? "Alt" : "",
|
|
@@ -799,10 +796,10 @@ function Ot(e) {
|
|
|
799
796
|
e.key
|
|
800
797
|
].filter(Boolean).join("+");
|
|
801
798
|
}
|
|
802
|
-
function
|
|
803
|
-
return t.ctrlKey !== e.ctrl || t.altKey !== e.alt || t.metaKey !== e.meta || (t.key.length === 1 ? t.key.toLowerCase() : t.key) !== e.key ? !1 : e.key.length === 1 && !
|
|
799
|
+
function Ot(e, t) {
|
|
800
|
+
return t.ctrlKey !== e.ctrl || t.altKey !== e.alt || t.metaKey !== e.meta || (t.key.length === 1 ? t.key.toLowerCase() : t.key) !== e.key ? !1 : e.key.length === 1 && !Tt(e.key) || t.shiftKey === e.shift;
|
|
804
801
|
}
|
|
805
|
-
function
|
|
802
|
+
function kt(e) {
|
|
806
803
|
let t = e.composedPath()[0];
|
|
807
804
|
return t instanceof HTMLElement ? t.isContentEditable || t.getAttribute("contenteditable") === "true" || t instanceof HTMLTextAreaElement || t instanceof HTMLSelectElement ? !0 : t instanceof HTMLInputElement && ![
|
|
808
805
|
"button",
|
|
@@ -815,28 +812,28 @@ function At(e) {
|
|
|
815
812
|
"file"
|
|
816
813
|
].includes(t.type) : !1;
|
|
817
814
|
}
|
|
818
|
-
var
|
|
815
|
+
var At = (e) => {
|
|
819
816
|
if (!(e.defaultPrevented || e.isComposing)) for (let t = F.length - 1; t >= 0; t--) {
|
|
820
817
|
let { chord: n, options: r } = F[t];
|
|
821
|
-
if (
|
|
822
|
-
if (
|
|
818
|
+
if (Ot(n, e) && (!wt(n) || St())) {
|
|
819
|
+
if (kt(e) && (!(n.ctrl || n.alt || n.meta) || !r.inFields)) return;
|
|
823
820
|
e.preventDefault(), r.handler(e);
|
|
824
821
|
return;
|
|
825
822
|
}
|
|
826
823
|
}
|
|
827
824
|
};
|
|
828
|
-
function
|
|
829
|
-
let t =
|
|
825
|
+
function jt(e) {
|
|
826
|
+
let t = Et(e.keys), n = {
|
|
830
827
|
options: e,
|
|
831
828
|
chord: t,
|
|
832
|
-
normalized:
|
|
829
|
+
normalized: Dt(t)
|
|
833
830
|
};
|
|
834
|
-
return F.push(n), !bt && typeof document < "u" && (document.addEventListener("keydown",
|
|
831
|
+
return F.push(n), !bt && typeof document < "u" && (document.addEventListener("keydown", At), bt = !0), () => {
|
|
835
832
|
let e = F.indexOf(n);
|
|
836
|
-
e !== -1 && F.splice(e, 1), !F.length && bt && (document.removeEventListener("keydown",
|
|
833
|
+
e !== -1 && F.splice(e, 1), !F.length && bt && (document.removeEventListener("keydown", At), bt = !1);
|
|
837
834
|
};
|
|
838
835
|
}
|
|
839
|
-
function
|
|
836
|
+
function Mt() {
|
|
840
837
|
let e = /* @__PURE__ */ new Set(), t = [];
|
|
841
838
|
for (let n = F.length - 1; n >= 0; n--) {
|
|
842
839
|
let { options: r, normalized: i } = F[n];
|
|
@@ -848,12 +845,12 @@ function Nt() {
|
|
|
848
845
|
}
|
|
849
846
|
return t;
|
|
850
847
|
}
|
|
851
|
-
function
|
|
852
|
-
let t =
|
|
848
|
+
function Nt(e) {
|
|
849
|
+
let t = Et(e), n = [];
|
|
853
850
|
return t.ctrl && n.push("Ctrl"), t.alt && n.push("Alt"), t.meta && n.push(yt.Meta), t.shift && n.push("Shift"), n.push(yt[t.key] ?? (t.key.length === 1 ? t.key.toUpperCase() : t.key)), n;
|
|
854
851
|
}
|
|
855
|
-
function
|
|
856
|
-
let t =
|
|
852
|
+
function Pt(e) {
|
|
853
|
+
let t = Et(e), n = t.key === " " ? "Space" : t.key.length === 1 ? t.key.toUpperCase() : t.key;
|
|
857
854
|
return [
|
|
858
855
|
t.ctrl ? "Control" : "",
|
|
859
856
|
t.alt ? "Alt" : "",
|
|
@@ -864,7 +861,7 @@ function Ft(e) {
|
|
|
864
861
|
}
|
|
865
862
|
//#endregion
|
|
866
863
|
//#region src/icons/register.ts
|
|
867
|
-
var
|
|
864
|
+
var Ft = {
|
|
868
865
|
"beeld-en-geluid-microfoon": {
|
|
869
866
|
viewBox: "0 0 64 64",
|
|
870
867
|
attributes: {},
|
|
@@ -955,11 +952,6 @@ var It = {
|
|
|
955
952
|
attributes: {},
|
|
956
953
|
body: "<path d=\"m40.391 10.59c-.254-1.547-1.434-2.723-2.98-2.98-4.469-.746-11.922-.746-13.41-.746s-8.941 0-13.41.746c-1.547.258-2.727 1.434-2.98 2.98-.746 4.469-.746 11.922-.746 13.41s0 8.941.746 13.41c.254 1.547 1.434 2.723 2.98 2.98 4.469.746 11.922.746 13.41.746s8.941 0 13.41-.746c1.547-.258 2.727-1.434 2.98-2.98.746-4.469.746-11.922.746-13.41 0-4.473 0-8.941-.746-13.41zm-14.141 25.41h-4.922l.422-10.5v-6h4.5zm-2.234-19.5c-1.68 0-2.641-.941-2.641-2.656 0-1.461.891-2.594 2.609-2.594 1.68 0 2.641.906 2.641 2.594 0 1.488-.891 2.656-2.609 2.656zm0 0\"/>"
|
|
957
954
|
},
|
|
958
|
-
"functioneel-instellingen": {
|
|
959
|
-
viewBox: "0 0 48 48",
|
|
960
|
-
attributes: {},
|
|
961
|
-
body: "<path d=\"m28.008 24c0-2.164-1.797-3.918-4.008-3.918s-4.004 1.754-4.004 3.918 1.793 3.918 4.004 3.918 4.008-1.754 4.008-3.918zm12.383-13.414c-.258-1.547-1.434-2.719-2.98-2.977-4.469-.746-11.922-.746-13.41-.746s-8.941 0-13.414.746a3.59 3.59 0 0 0 -2.98 2.977c-.744 4.473-.744 11.922-.744 13.414s0 8.941.742 13.41a3.59 3.59 0 0 0 2.98 2.98c4.473.746 11.922.746 13.414.746s8.941 0 13.41-.746a3.59 3.59 0 0 0 2.98-2.98c.746-4.469.746-11.922.746-13.41 0-4.473 0-8.941-.746-13.414zm-3.898 14.047c0 .359-.27.77-.594.91l-2.23 1.012c-.332.129-.719.504-.855.832l-.125.301a1.63 1.63 0 0 0 .027 1.184l.879 2.188a1.03 1.03 0 0 1 -.215 1.055l-1.012.992a1.12 1.12 0 0 1 -1.074.227l-2.297-.832a1.78 1.78 0 0 0 -1.199-.008l-.328.129c-.328.137-.703.52-.828.852l-.957 2.16a1.07 1.07 0 0 1 -.906.594h-1.441c-.355 0-.77-.266-.918-.59l-1.023-2.156a1.76 1.76 0 0 0 -.848-.848l-.324-.133a1.74 1.74 0 0 0 -1.191.027l-2.25.871c-.332.133-.812.035-1.066-.215l-1.016-.992c-.258-.25-.359-.727-.23-1.059l.84-2.238c.145-.324.152-.863.012-1.191l-.125-.297a1.71 1.71 0 0 0 -.863-.816l-2.223-.945a1.05 1.05 0 0 1 -.602-.898v-1.387c0-.355.27-.766.594-.91l2.227-1.004a1.78 1.78 0 0 0 .859-.832l.125-.301c.137-.328.125-.863-.027-1.184l-.879-2.187c-.137-.332-.039-.805.215-1.055l1.012-.992a1.12 1.12 0 0 1 1.074-.227l2.305.828a1.78 1.78 0 0 0 1.199.008l.316-.129a1.68 1.68 0 0 0 .828-.852l.961-2.156a1.07 1.07 0 0 1 .906-.598h1.441a1.11 1.11 0 0 1 .922.59l1.02 2.16c.133.332.516.711.848.848l.32.129c.332.137.871.125 1.195-.023l2.25-.871c.332-.133.813-.035 1.07.215l1.012.988c.254.25.359.727.23 1.059l-.84 2.238a1.74 1.74 0 0 0 -.012 1.191l.129.301c.137.328.527.695.863.816l2.219.945c.332.133.602.539.602.895zm0 0\"/>"
|
|
962
|
-
},
|
|
963
955
|
"functioneel-kalender": {
|
|
964
956
|
viewBox: "0 0 48 48",
|
|
965
957
|
attributes: {},
|
|
@@ -970,6 +962,11 @@ var It = {
|
|
|
970
962
|
attributes: {},
|
|
971
963
|
body: "<path d=\"m24 2a21.94 21.94 0 0 0 -22 22 21.94 21.94 0 0 0 22 22 21.94 21.94 0 0 0 22-22 21.94 21.94 0 0 0 -22-22zm0 39a16.99 16.99 0 1 1 0-34 16.99 16.99 0 1 1 0 34zm10.398-18.199-8.398-.602-.602-10.801c0-.797-.598-1.199-1.398-1.199s-1.398.602-1.398 1.199l-.602 12.403c0 1 .801 2 1.801 2 .398 0 2 0 10.398-.602.801 0 1.402-.598 1.402-1.199.199-.398 0-1-1.203-1.199zm0 0\"/>"
|
|
972
964
|
},
|
|
965
|
+
"functioneel-kolommen": {
|
|
966
|
+
viewBox: "0 0 24 24",
|
|
967
|
+
attributes: {},
|
|
968
|
+
body: "<path d=\"M3.9 4h3a.9.9 0 0 1 .9.9v14.2a.9.9 0 0 1-.9.9h-3a.9.9 0 0 1-.9-.9V4.9a.9.9 0 0 1 .9-.9Zm.7 1.6v12.8h1.6V5.6ZM10.5 4h3a.9.9 0 0 1 .9.9v14.2a.9.9 0 0 1-.9.9h-3a.9.9 0 0 1-.9-.9V4.9a.9.9 0 0 1 .9-.9Zm.7 1.6v12.8h1.6V5.6ZM17.1 4h3a.9.9 0 0 1 .9.9v14.2a.9.9 0 0 1-.9.9h-3a.9.9 0 0 1-.9-.9V4.9a.9.9 0 0 1 .9-.9Zm.7 1.6v12.8h1.6V5.6Z\" fill-rule=\"evenodd\"/>"
|
|
969
|
+
},
|
|
973
970
|
"functioneel-kopieren": {
|
|
974
971
|
viewBox: "0 0 24 24",
|
|
975
972
|
attributes: {},
|
|
@@ -1065,6 +1062,11 @@ var It = {
|
|
|
1065
1062
|
attributes: {},
|
|
1066
1063
|
body: "<path d=\"m38.684 18h-15.856l4.754-7.141c.68-1.02.512-2.383-.398-3.207a2.49 2.49 0 0 0 -1.867-.645c-.488.031-.973.211-1.383.535l-16.993 13.517c-.594.469-.937 1.188-.937 1.941a2.49 2.49 0 0 0 .938 1.941l16.992 13.516c.461.363 1.012.543 1.563.543.605 0 1.211-.219 1.688-.652.91-.824 1.078-2.187.398-3.207l-4.755-7.141h15.855c2.555 0 3.317-2.809 3.317-5.301s-.762-4.699-3.316-4.699zm0 0\"/>"
|
|
1067
1064
|
},
|
|
1065
|
+
"functioneel-trechter": {
|
|
1066
|
+
viewBox: "0 0 24 24",
|
|
1067
|
+
attributes: {},
|
|
1068
|
+
body: "<path d=\"M3.6 4h16.8a.9.9 0 0 1 .7 1.47l-6.5 7.83v5.6a.9.9 0 0 1-.5.8l-3 1.5a.9.9 0 0 1-1.3-.8v-7.1L2.9 5.47A.9.9 0 0 1 3.6 4Zm1.9 1.8 5.6 6.7a.9.9 0 0 1 .2.58v6.04l1.5-.75v-5.29a.9.9 0 0 1 .2-.58l5.6-6.7Z\" fill-rule=\"evenodd\"/>"
|
|
1069
|
+
},
|
|
1068
1070
|
"functioneel-uitloggen": {
|
|
1069
1071
|
viewBox: "0 0 24 24",
|
|
1070
1072
|
attributes: {},
|
|
@@ -1199,7 +1201,7 @@ var It = {
|
|
|
1199
1201
|
update(e, t) {
|
|
1200
1202
|
return this.render(...t);
|
|
1201
1203
|
}
|
|
1202
|
-
},
|
|
1204
|
+
}, It = class extends z {
|
|
1203
1205
|
constructor(e) {
|
|
1204
1206
|
if (super(e), this.it = T, e.type !== L.CHILD) throw Error(this.constructor.directiveName + "() can only be used in child bindings");
|
|
1205
1207
|
}
|
|
@@ -1217,13 +1219,13 @@ var It = {
|
|
|
1217
1219
|
};
|
|
1218
1220
|
}
|
|
1219
1221
|
};
|
|
1220
|
-
|
|
1221
|
-
var
|
|
1222
|
-
|
|
1223
|
-
var
|
|
1222
|
+
It.directiveName = "unsafeHTML", It.resultType = 1;
|
|
1223
|
+
var Lt = R(It), Rt = class extends It {};
|
|
1224
|
+
Rt.directiveName = "unsafeSVG", Rt.resultType = 2;
|
|
1225
|
+
var zt = R(Rt);
|
|
1224
1226
|
//#endregion
|
|
1225
1227
|
//#region src/core/style-props.ts
|
|
1226
|
-
function
|
|
1228
|
+
function Bt(e) {
|
|
1227
1229
|
return e.includes("-") ? e : e.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g, "-$&").toLowerCase();
|
|
1228
1230
|
}
|
|
1229
1231
|
var B = R(class extends z {
|
|
@@ -1237,120 +1239,120 @@ var B = R(class extends z {
|
|
|
1237
1239
|
let { style: n } = e.element, r = /* @__PURE__ */ new Set();
|
|
1238
1240
|
for (let [e, i] of Object.entries(t)) {
|
|
1239
1241
|
if (i == null || i === !1) continue;
|
|
1240
|
-
let t =
|
|
1242
|
+
let t = Bt(e);
|
|
1241
1243
|
r.add(t), n.setProperty(t, String(i));
|
|
1242
1244
|
}
|
|
1243
1245
|
for (let e of this.applied) r.has(e) || n.removeProperty(e);
|
|
1244
1246
|
return this.applied = r, T;
|
|
1245
1247
|
}
|
|
1246
|
-
}),
|
|
1248
|
+
}), Vt = [
|
|
1247
1249
|
"fill",
|
|
1248
1250
|
"stroke",
|
|
1249
1251
|
"stroke-width",
|
|
1250
1252
|
"stroke-linecap",
|
|
1251
1253
|
"stroke-linejoin"
|
|
1252
|
-
],
|
|
1253
|
-
function
|
|
1254
|
-
return e.fill === "none" && !
|
|
1254
|
+
], Ht = /(fill|stroke)="(#000|#000000|black)"/g, Ut = /\s(?:fill|stroke)="(?!none")[^"]*"/, Wt = (e) => e.startsWith("embleem-"), V = (e, t) => e.match(RegExp(`\\s${t}\\s*=\\s*"([^"]*)"`))?.[1];
|
|
1255
|
+
function Gt(e, t) {
|
|
1256
|
+
return e.fill === "none" && !Ut.test(t.replace(Ht, ""));
|
|
1255
1257
|
}
|
|
1256
|
-
function
|
|
1258
|
+
function Kt(e) {
|
|
1257
1259
|
return e.replace(/<(script|style)\b[\s\S]*?<\/\1>/gi, "").replace(/<(script|style)\b[^>]*\/>/gi, "").replace(/\sstyle\s*=\s*"[^"]*"/gi, "").replace(/\sstyle\s*=\s*'[^']*'/gi, "").replace(/\son[a-z]+\s*=\s*"[^"]*"/gi, "").replace(/\son[a-z]+\s*=\s*'[^']*'/gi, "").replace(/\s+/g, " ").trim();
|
|
1258
1260
|
}
|
|
1259
|
-
function
|
|
1261
|
+
function qt(e, t, n) {
|
|
1260
1262
|
let r = {};
|
|
1261
|
-
for (let e of
|
|
1263
|
+
for (let e of Vt) {
|
|
1262
1264
|
let n = V(t, e);
|
|
1263
1265
|
n !== void 0 && (r[e] = n);
|
|
1264
1266
|
}
|
|
1265
|
-
|
|
1267
|
+
Gt(r, Kt(n)) && delete r.fill;
|
|
1266
1268
|
for (let [e, t] of Object.entries(r)) /^(#000|#000000|black)$/.test(t) && (r[e] = "currentColor");
|
|
1267
1269
|
return r;
|
|
1268
1270
|
}
|
|
1269
|
-
function
|
|
1270
|
-
let r =
|
|
1271
|
-
for (let e of
|
|
1271
|
+
function Jt(e, t, n) {
|
|
1272
|
+
let r = Kt(n), i = {};
|
|
1273
|
+
for (let e of Vt) {
|
|
1272
1274
|
let n = V(t, e);
|
|
1273
1275
|
n !== void 0 && (i[e] = n);
|
|
1274
1276
|
}
|
|
1275
|
-
return
|
|
1277
|
+
return Wt(e) || Gt(i, r) ? r.replace(Ht, "$1=\"currentColor\"") : r;
|
|
1276
1278
|
}
|
|
1277
|
-
function
|
|
1279
|
+
function Yt(e) {
|
|
1278
1280
|
let t = V(e, "width"), n = V(e, "height");
|
|
1279
1281
|
return t && n ? `0 0 ${parseFloat(t)} ${parseFloat(n)}` : "0 0 24 24";
|
|
1280
1282
|
}
|
|
1281
|
-
function
|
|
1283
|
+
function Xt(e, t) {
|
|
1282
1284
|
let n = t.indexOf("<svg"), r = t.indexOf(">", n), i = t.slice(n, r + 1), a = t.slice(r + 1, t.lastIndexOf("</svg>"));
|
|
1283
1285
|
return {
|
|
1284
|
-
viewBox: V(i, "viewBox") ??
|
|
1285
|
-
attributes:
|
|
1286
|
-
body:
|
|
1286
|
+
viewBox: V(i, "viewBox") ?? Yt(i),
|
|
1287
|
+
attributes: qt(e, i, a),
|
|
1288
|
+
body: Jt(e, i, a)
|
|
1287
1289
|
};
|
|
1288
1290
|
}
|
|
1289
1291
|
//#endregion
|
|
1290
1292
|
//#region src/icons/loader.ts
|
|
1291
|
-
var H = /* @__PURE__ */ new Map(), U = /* @__PURE__ */ new Set(),
|
|
1292
|
-
function
|
|
1293
|
+
var H = /* @__PURE__ */ new Map(), U = /* @__PURE__ */ new Set(), Zt = /* @__PURE__ */ new Map(), Qt = /* @__PURE__ */ new Set(), W = { base: "/icons/" };
|
|
1294
|
+
function $t(e) {
|
|
1293
1295
|
let t = W;
|
|
1294
1296
|
W = {
|
|
1295
1297
|
...e,
|
|
1296
1298
|
base: e.base.endsWith("/") ? e.base : `${e.base}/`
|
|
1297
|
-
}, (W.base !== t.base || W.version !== t.version) && U.size && (U.clear(),
|
|
1299
|
+
}, (W.base !== t.base || W.version !== t.version) && U.size && (U.clear(), on());
|
|
1298
1300
|
}
|
|
1299
|
-
function
|
|
1301
|
+
function en() {
|
|
1300
1302
|
return W;
|
|
1301
1303
|
}
|
|
1302
|
-
function
|
|
1304
|
+
function tn(e) {
|
|
1303
1305
|
return e ? H.get(e) : void 0;
|
|
1304
1306
|
}
|
|
1305
|
-
function
|
|
1307
|
+
function nn(e) {
|
|
1306
1308
|
return e ? U.has(e) : !1;
|
|
1307
1309
|
}
|
|
1308
|
-
function
|
|
1310
|
+
function rn() {
|
|
1309
1311
|
return [...H.keys()];
|
|
1310
1312
|
}
|
|
1313
|
+
function an(e) {
|
|
1314
|
+
return Qt.add(e), () => Qt.delete(e);
|
|
1315
|
+
}
|
|
1311
1316
|
function on(e) {
|
|
1312
|
-
|
|
1317
|
+
for (let t of Qt) t(e);
|
|
1313
1318
|
}
|
|
1314
1319
|
function sn(e) {
|
|
1315
|
-
|
|
1316
|
-
}
|
|
1317
|
-
function cn(e) {
|
|
1318
|
-
if (!e || H.has(e) || U.has(e) || Qt.has(e) || typeof fetch != "function") return;
|
|
1320
|
+
if (!e || H.has(e) || U.has(e) || Zt.has(e) || typeof fetch != "function") return;
|
|
1319
1321
|
let t = W, n = `${t.base}${encodeURIComponent(e)}.svg${t.version ? `?b=${t.version}` : ""}`, r = fetch(n).then(async (t) => {
|
|
1320
1322
|
if (!t.ok) throw Error(`${t.status}`);
|
|
1321
|
-
let n =
|
|
1323
|
+
let n = Xt(e, await t.text());
|
|
1322
1324
|
if (!n.body) throw Error("empty");
|
|
1323
1325
|
H.set(e, n);
|
|
1324
1326
|
}).catch(() => {
|
|
1325
1327
|
t === W && U.add(e);
|
|
1326
1328
|
}).finally(() => {
|
|
1327
|
-
|
|
1329
|
+
Zt.delete(e), on(e);
|
|
1328
1330
|
});
|
|
1329
|
-
|
|
1331
|
+
Zt.set(e, r);
|
|
1330
1332
|
}
|
|
1331
|
-
async function
|
|
1332
|
-
return
|
|
1333
|
+
async function cn(e) {
|
|
1334
|
+
return sn(e), await Zt.get(e), H.get(e);
|
|
1333
1335
|
}
|
|
1334
1336
|
//#endregion
|
|
1335
1337
|
//#region src/icons/render.ts
|
|
1336
|
-
var G = A("/* One icon, drawn inline in the root that shows it: the glyph is the layout box. */\n.lintje-icon {\n display: inline-flex;\n flex: none;\n}\n/* A host-resolved SVG file, painted as a mask in the text color so nothing inside it runs. */\n.lintje-icon--file {\n background-color: currentColor;\n}\n\n/* --- An icon that leads a line of text ----------------------------------- */\n/* One line high (`1lh`), so it stays on the first line of a wrapping title; centred on the line\n box, where a 20 px glyph reads as level with the title. */\n.lintje-leading-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: none;\n align-self: start;\n font: var(--text-tile-title);\n height: 1.3em;\n height: 1lh;\n /* The gap is a margin, not a grid `column-gap`: an icon without a file draws nothing and a gap\n would indent the title. */\n margin-right: var(--space-2);\n color: var(--color-text-primary);\n}\n/* An icon known to be absent draws nothing; the heading is then the heading without an icon. */\n.lintje-leading-icon:empty { display: none; }\n\n/* `transform-origin` is explicit: the initial value for an `<svg>` differs between contexts. */\n.lintje-icon--rotate-90,\n.lintje-icon--rotate-180,\n.lintje-icon--rotate-270,\n.lintje-icon--flip-x,\n.lintje-icon--flip-y {\n transform-origin: 50% 50%;\n}\n.lintje-icon--rotate-90 { transform: rotate(90deg); }\n.lintje-icon--rotate-180 { transform: rotate(180deg); }\n.lintje-icon--rotate-270 { transform: rotate(270deg); }\n.lintje-icon--flip-x { transform: scaleX(-1); }\n.lintje-icon--flip-y { transform: scaleY(-1); }\n"),
|
|
1337
|
-
function
|
|
1338
|
-
if (!e || (
|
|
1339
|
-
|
|
1338
|
+
var G = A("/* One icon, drawn inline in the root that shows it: the glyph is the layout box. */\n.lintje-icon {\n display: inline-flex;\n flex: none;\n}\n/* A host-resolved SVG file, painted as a mask in the text color so nothing inside it runs. */\n.lintje-icon--file {\n background-color: currentColor;\n}\n\n/* --- An icon that leads a line of text ----------------------------------- */\n/* One line high (`1lh`), so it stays on the first line of a wrapping title; centred on the line\n box, where a 20 px glyph reads as level with the title. */\n.lintje-leading-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: none;\n align-self: start;\n font: var(--text-tile-title);\n height: 1.3em;\n height: 1lh;\n /* The gap is a margin, not a grid `column-gap`: an icon without a file draws nothing and a gap\n would indent the title. */\n margin-right: var(--space-2);\n color: var(--color-text-primary);\n}\n/* An icon known to be absent draws nothing; the heading is then the heading without an icon. */\n.lintje-leading-icon:empty { display: none; }\n\n/* `transform-origin` is explicit: the initial value for an `<svg>` differs between contexts. */\n.lintje-icon--rotate-90,\n.lintje-icon--rotate-180,\n.lintje-icon--rotate-270,\n.lintje-icon--flip-x,\n.lintje-icon--flip-y {\n transform-origin: 50% 50%;\n}\n.lintje-icon--rotate-90 { transform: rotate(90deg); }\n.lintje-icon--rotate-180 { transform: rotate(180deg); }\n.lintje-icon--rotate-270 { transform: rotate(270deg); }\n.lintje-icon--flip-x { transform: scaleX(-1); }\n.lintje-icon--flip-y { transform: scaleY(-1); }\n"), ln = /* @__PURE__ */ new Set(), un = !1;
|
|
1339
|
+
function dn(e) {
|
|
1340
|
+
if (!e || (ln.add(e), un)) return;
|
|
1341
|
+
un = !0;
|
|
1340
1342
|
let t = !1;
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
t = !1,
|
|
1343
|
+
an(() => {
|
|
1344
|
+
ln.size && !t && (t = !0, fn(() => {
|
|
1345
|
+
t = !1, ln.size && (ln.clear(), $e());
|
|
1344
1346
|
}));
|
|
1345
1347
|
});
|
|
1346
1348
|
}
|
|
1347
|
-
function
|
|
1349
|
+
function fn(e) {
|
|
1348
1350
|
typeof requestAnimationFrame == "function" ? requestAnimationFrame(e) : Promise.resolve().then(e);
|
|
1349
1351
|
}
|
|
1350
|
-
function
|
|
1351
|
-
return (e ?
|
|
1352
|
+
function pn(e) {
|
|
1353
|
+
return (e ? Ft[e] : void 0) ?? tn(e);
|
|
1352
1354
|
}
|
|
1353
|
-
function
|
|
1355
|
+
function mn(e, t) {
|
|
1354
1356
|
return e ? C`<span class="lintje-leading-icon ${t}"
|
|
1355
1357
|
>${K(e, { size: 20 })}</span
|
|
1356
1358
|
>` : T;
|
|
@@ -1377,7 +1379,7 @@ function K(e, t = {}) {
|
|
|
1377
1379
|
aria-hidden=${d}
|
|
1378
1380
|
></span>`;
|
|
1379
1381
|
}
|
|
1380
|
-
let p =
|
|
1382
|
+
let p = pn(e);
|
|
1381
1383
|
if (!p) {
|
|
1382
1384
|
let t = C`<svg
|
|
1383
1385
|
class="${f} lintje-icon--pending"
|
|
@@ -1387,7 +1389,7 @@ function K(e, t = {}) {
|
|
|
1387
1389
|
viewBox="0 0 24 24"
|
|
1388
1390
|
aria-hidden="true"
|
|
1389
1391
|
></svg>`;
|
|
1390
|
-
return c && e ? t : (
|
|
1392
|
+
return c && e ? t : (dn(e), e && !nn(e) ? (sn(e), t) : T);
|
|
1391
1393
|
}
|
|
1392
1394
|
return C`<svg
|
|
1393
1395
|
class=${f}
|
|
@@ -1403,7 +1405,7 @@ function K(e, t = {}) {
|
|
|
1403
1405
|
role=${l}
|
|
1404
1406
|
aria-label=${u}
|
|
1405
1407
|
aria-hidden=${d}
|
|
1406
|
-
>${
|
|
1408
|
+
>${zt(p.body)}</svg>`;
|
|
1407
1409
|
}
|
|
1408
1410
|
//#endregion
|
|
1409
1411
|
//#region node_modules/lit-html/directives/class-map.js
|
|
@@ -1428,28 +1430,35 @@ var q = R(class extends z {
|
|
|
1428
1430
|
}
|
|
1429
1431
|
return w;
|
|
1430
1432
|
}
|
|
1431
|
-
}),
|
|
1432
|
-
function
|
|
1433
|
-
let { value: t, tone: n = "neutral", variant: r = "label", label: i, surface: a, muted: o, className: s } = e,
|
|
1433
|
+
}), hn = "/*\n * The badge's drawing, shared by `<lintje-badge>` and every root that draws one through\n * `renderBadge()`. It holds no `:host` rule; the element's own box is `badge-host.css`.\n */\n\n.lintje-badge {\n display: inline-flex; align-items: center; justify-content: center;\n flex: none;\n box-sizing: border-box;\n height: 1.5rem;\n padding: 0 var(--space-2);\n border: 1px solid transparent;\n border-radius: var(--radius);\n font-family: var(--font-ui);\n font-size: 0.875rem; font-weight: 700; line-height: 1;\n white-space: nowrap;\n}\n.lintje-badge__icon { flex: none; margin-inline-end: var(--space-1); }\n\n/* Neutral: a line and a word, for what has not started. Subtle: the gray surface, for what is over. */\n.lintje-badge--neutral {\n color: var(--color-text-primary);\n border-color: var(--color-text-muted);\n}\n.lintje-badge--subtle {\n background: var(--color-bg-subtle);\n color: var(--color-text-primary);\n border-color: var(--color-border-default);\n}\n.lintje-badge--busy {\n background: var(--color-action-primary);\n color: var(--color-action-primary-text);\n border-color: var(--color-action-primary-border);\n}\n/* A saturated status fill carries white text (success 4.52:1, error 5.01, info 4.51). */\n.lintje-badge--success { background: var(--color-success); color: var(--color-text-on-fill); }\n.lintje-badge--error { background: var(--color-error); color: var(--color-text-on-fill); }\n.lintje-badge--info { background: var(--color-info); color: var(--color-text-on-fill); }\n/* Yellow and orange take dark text in both modes: white on the orange is 3.2:1, near-black 5.54:1. */\n.lintje-badge--warning { background: var(--color-warning); color: var(--color-text-on-light-fill); }\n.lintje-badge--attention { background: var(--color-attention); color: var(--color-text-on-light-fill); }\n/* Live: the fill says it records now, the dot says it again for whoever does not see the colour. */\n.lintje-badge--live { gap: var(--space-2); background: var(--color-error); color: var(--color-text-on-fill); }\n.lintje-badge--live::before {\n content: '';\n width: 0.5rem; height: 0.5rem;\n border-radius: 50%;\n background: currentColor;\n}\n\n/* The quiet counter. The 2 px at its foot lift the figure 1 px: the house font's digits sit low. */\n.lintje-badge--count,\n.lintje-badge--unread {\n min-width: 1.5rem;\n padding: 0 var(--space-1) 2px;\n}\n.lintje-badge--count {\n background: var(--color-bg-subtle);\n color: var(--color-text-primary);\n border-color: var(--color-border-default);\n}\n/* Smaller than a label: it sits on a glyph's corner and must not cover it. At 12 px the\n digits need no lift. */\n.lintje-badge--unread {\n height: 1.25rem; min-width: 1.25rem;\n padding: 0 var(--space-1);\n font-size: 0.75rem;\n border: 0;\n border-radius: 999px;\n background: var(--color-nav-badge-bg);\n color: var(--color-nav-badge-text);\n animation: lintje-badge-pop var(--dur-badge) var(--ease-in-motion) both;\n}\n\n/* A new unread count pops in: past its size and back, so the eye catches it. It plays when the\n badge appears; a changing figure is the host's to animate. */\n@keyframes lintje-badge-pop {\n 0% { transform: scale(0); }\n 60% { transform: scale(1.2); }\n 100% { transform: none; }\n}\n\n/* On the menu's surface: the menu's text colour as the fill and its surface as the ink. After\n `--unread`, so the menu's count wins over the unread colours. */\n.lintje-badge--nav { background: var(--color-nav-text); color: var(--color-nav-bg); border: 0; }\n.lintje-badge--nav.lintje-badge--label { letter-spacing: 0.04em; }\n.lintje-badge--nav.is-muted { background: var(--color-nav-disabled); color: var(--color-nav-bg); }\n\n/* Forced colours: a fill is dropped, so every badge keeps a CanvasText edge in its border. */\n@media (forced-colors: active) {\n .lintje-badge { border-color: CanvasText; }\n .lintje-badge--unread,\n .lintje-badge--nav { outline: 1px solid CanvasText; outline-offset: -1px; }\n}\n", gn = "/*\n * `<lintje-badge>`'s own box: inline, on the text line it stands in. The drawing is `badge.css`,\n * which the element adopts beside this file and which other roots adopt without it.\n */\n:host { display: inline-flex; vertical-align: middle; }\n:host([hidden]) { display: none; }\n", _n = A(hn);
|
|
1434
|
+
function vn(e) {
|
|
1435
|
+
let { value: t, tone: n = "neutral", variant: r = "label", label: i, surface: a, muted: o, className: s, icon: c } = e, l = a === "nav", u = c && r === "label" ? K(c, {
|
|
1436
|
+
size: 12,
|
|
1437
|
+
className: "lintje-badge__icon"
|
|
1438
|
+
}) : T;
|
|
1434
1439
|
return C`<span
|
|
1435
1440
|
class=${q({
|
|
1436
1441
|
"lintje-badge": !0,
|
|
1437
1442
|
[`lintje-badge--${r}`]: !0,
|
|
1438
|
-
[`lintje-badge--${n}`]: r === "label" && !
|
|
1439
|
-
"lintje-badge--nav":
|
|
1440
|
-
"is-muted":
|
|
1443
|
+
[`lintje-badge--${n}`]: r === "label" && !l,
|
|
1444
|
+
"lintje-badge--nav": l,
|
|
1445
|
+
"is-muted": l && !!o,
|
|
1441
1446
|
...Object.fromEntries((s ?? "").split(/\s+/).filter(Boolean).map((e) => [e, !0]))
|
|
1442
1447
|
})}
|
|
1443
|
-
>${i ? C`<span aria-hidden="true">${t}</span
|
|
1448
|
+
>${u}${i ? C`<span aria-hidden="true">${t}</span
|
|
1444
1449
|
><span class="visually-hidden">${i}</span>` : t}</span
|
|
1445
1450
|
>`;
|
|
1446
1451
|
}
|
|
1447
|
-
var
|
|
1452
|
+
var yn = class extends j {
|
|
1448
1453
|
constructor(...e) {
|
|
1449
1454
|
super(...e), this.tone = "neutral", this.variant = "label";
|
|
1450
1455
|
}
|
|
1451
1456
|
static {
|
|
1452
|
-
this.styles = [
|
|
1457
|
+
this.styles = [
|
|
1458
|
+
G,
|
|
1459
|
+
A(gn),
|
|
1460
|
+
_n
|
|
1461
|
+
];
|
|
1453
1462
|
}
|
|
1454
1463
|
static {
|
|
1455
1464
|
this.properties = {
|
|
@@ -1461,24 +1470,30 @@ var bn = class extends j {
|
|
|
1461
1470
|
type: String,
|
|
1462
1471
|
reflect: !0
|
|
1463
1472
|
},
|
|
1464
|
-
label: { type: String }
|
|
1473
|
+
label: { type: String },
|
|
1474
|
+
icon: { type: String }
|
|
1465
1475
|
};
|
|
1466
1476
|
}
|
|
1467
1477
|
render() {
|
|
1468
|
-
return
|
|
1478
|
+
return vn({
|
|
1469
1479
|
value: C`<slot></slot>`,
|
|
1470
1480
|
tone: this.tone,
|
|
1471
1481
|
variant: this.variant,
|
|
1472
|
-
label: this.label
|
|
1482
|
+
label: this.label,
|
|
1483
|
+
icon: this.icon
|
|
1473
1484
|
});
|
|
1474
1485
|
}
|
|
1475
1486
|
};
|
|
1476
|
-
M("lintje-badge",
|
|
1487
|
+
M("lintje-badge", yn);
|
|
1477
1488
|
//#endregion
|
|
1478
1489
|
//#region src/primitives/button/button.css?inline
|
|
1479
|
-
var
|
|
1490
|
+
var bn = "/*\n * Above the divider: what the element itself needs (`lintje-button` is the box the page lays\n * out). Below it: the block's own BEM CSS, in the shadow root.\n */\n:host {\n display: inline-flex;\n vertical-align: middle;\n}\n:host([hidden]) { display: none; }\n:host(.lintje-button--block),\n:host([block]) { display: flex; }\n:host([block]) .lintje-button { width: 100%; }\n:host([span]) .lintje-button { width: 100%; }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-button {\n /* Never wider than its place: in a narrow cell the label is cut with an ellipsis. */\n max-width: 100%;\n min-width: 0;\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-2);\n height: var(--h-button);\n padding: 0 var(--space-4);\n border: 1px solid transparent;\n font-family: var(--font-ui);\n font-size: 1rem;\n font-weight: 700;\n text-decoration: none;\n cursor: pointer;\n border-radius: var(--radius);\n transition: background var(--dur-hover) var(--ease-in-motion),\n color var(--dur-hover) var(--ease-in-motion),\n border-color var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-button__label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.lintje-button--compact { height: var(--h-button-compact); padding: 0 var(--space-3); }\n.lintje-button--chrome { height: var(--h-button-chrome); padding: 0 14px; }\n/* The compact and chrome button reach the 48 px target through a transparent hit area, 4 px out\n on each side. A row of them keeps 8 px between the boxes, so hit areas never overlap. */\n.lintje-button--compact::after,\n.lintje-button--chrome::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2)) 0;\n}\n\n/* The 1 px border is transparent, so the primary fill fills it in light; in dark it draws the\n tint, the only thing that separates a #0E3B6E box from a #282828 page (1.31:1). */\n.lintje-button--primary {\n background: var(--color-action-primary);\n color: var(--color-action-primary-text);\n border-color: var(--color-action-primary-border);\n}\n.lintje-button--primary:not(.is-disabled, .is-busy, :disabled, [aria-disabled='true']):hover { background: var(--color-action-primary-hover); }\n\n.lintje-button--secondary {\n background: var(--color-bg-surface);\n color: var(--color-accent-text);\n border-color: var(--color-action-secondary-border);\n}\n.lintje-button--secondary:not(.is-disabled, .is-busy, :disabled, [aria-disabled='true']):hover { background: var(--color-bg-selected); }\n\n.lintje-button--tertiary {\n background: transparent;\n color: var(--color-text-primary);\n border-color: var(--color-border-strong);\n}\n.lintje-button--tertiary:not(.is-disabled, .is-busy, :disabled, [aria-disabled='true']):hover { background: var(--color-bg-subtle); }\n\n/* The destructive weight; in dark the border is the red's tint, the only thing reaching 3:1. */\n.lintje-button--danger {\n background: var(--color-action-danger);\n color: var(--color-text-on-fill);\n border-color: var(--color-action-danger-border);\n}\n.lintje-button--danger:not(.is-disabled, .is-busy, :disabled, [aria-disabled='true']):hover { background: var(--color-action-danger-hover); }\n\n/* `danger-secondary`: the quieter destructive form, for a row where the fill would shout. The\n colour is `--color-action-danger-text`. The hover is the tertiary's `--color-bg-subtle`:\n the red word on `--color-error-bg` was 3.96:1 in light. */\n.lintje-button--danger-secondary {\n background: var(--color-bg-surface);\n color: var(--color-action-danger-text);\n border-color: var(--color-action-danger-text);\n}\n.lintje-button--danger-secondary:not(.is-disabled, .is-busy, :disabled, [aria-disabled='true']):hover { background: var(--color-bg-subtle); }\n\n.lintje-button--link {\n height: auto;\n padding: 0;\n color: var(--color-link);\n text-decoration: underline;\n background: none;\n}\n.lintje-button--link:not(.is-disabled, .is-busy, :disabled, [aria-disabled='true']):hover { color: var(--color-link-hover); }\n/* The link reaches the text target (24 px) through a transparent hit area. */\n.lintje-button--link::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target-text)) / 2)) 0;\n}\n\n/* Disabled is `aria-disabled`: the button keeps its tab order and focus ring. A busy button is\n not `is-disabled`: it keeps its variant's colours. Native `<button>`s with these classes get\n the look from `:disabled` or `aria-disabled`, without the class. */\n.lintje-button.is-disabled,\n.lintje-button:disabled,\n.lintje-button[aria-disabled='true']:not(.is-busy) {\n opacity: 1;\n cursor: not-allowed;\n background: var(--color-bg-subtle);\n color: var(--color-text-disabled);\n border-color: var(--color-border-default);\n}\n.lintje-button--link.is-disabled,\n.lintje-button--link:disabled,\n.lintje-button--link[aria-disabled='true']:not(.is-busy) {\n background: none;\n border-color: transparent;\n text-decoration: none;\n}\n\n/* --- Busy --------------------------------------------------------------- */\n/*\n * An action that round-trips. The button keeps its width: label and icons only lose their ink,\n * and the ring is drawn over the middle, so nothing re-flows. The label is transparent, not\n * `visibility: hidden`, so the focused button keeps its name.\n */\n.lintje-button.is-busy { cursor: progress; }\n.lintje-button.is-busy .lintje-button__label { opacity: 0; }\n.lintje-button.is-busy .lintje-button__icon { visibility: hidden; }\n.lintje-button__busy {\n position: absolute;\n top: 50%; left: 50%;\n width: 16px; height: 16px;\n margin: -8px 0 0 -8px;\n border: 2px solid currentColor;\n border-top-color: transparent;\n border-radius: var(--radius-round);\n opacity: 0.85;\n animation: lintje-spin var(--dur-skeleton) linear infinite;\n}\n/* A keyframe only works in the root that uses it. */\n@keyframes lintje-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n/* Reduced motion: the ring stands still; `aria-busy` carries the state. */\n@media (prefers-reduced-motion: reduce) {\n .lintje-button__busy { animation: none; }\n}\n\n/* Forced colours: `aria-disabled` is not grayed out by the browser. */\n@media (forced-colors: active) {\n .lintje-button.is-disabled,\n .lintje-button:disabled,\n .lintje-button[aria-disabled='true']:not(.is-busy) { color: GrayText; border-color: GrayText; }\n}\n", xn = "/*\n * Adopted by a control that has nothing to say on paper: a button, a question box, a bar of\n * actions. What the reader chose stays in the elements that show it; what to press does not.\n * `!important`, so a page's own `display` on the tag does not bring it back.\n */\n@media print {\n :host { display: none !important; }\n}\n", Sn = "lintje-button-reason", Cn = class extends j {
|
|
1480
1491
|
static {
|
|
1481
|
-
this.styles = [
|
|
1492
|
+
this.styles = [
|
|
1493
|
+
G,
|
|
1494
|
+
A(bn),
|
|
1495
|
+
A(xn)
|
|
1496
|
+
];
|
|
1482
1497
|
}
|
|
1483
1498
|
static {
|
|
1484
1499
|
this.shadowRootOptions = {
|
|
@@ -1643,10 +1658,40 @@ function kn(e) {
|
|
|
1643
1658
|
return t !== null && On(t, e);
|
|
1644
1659
|
}
|
|
1645
1660
|
//#endregion
|
|
1646
|
-
//#region
|
|
1647
|
-
var
|
|
1661
|
+
//#region src/primitives/shared/tone.ts
|
|
1662
|
+
var An = {
|
|
1663
|
+
success: "functioneel-cirkel-vinkje",
|
|
1664
|
+
warning: "functioneel-waarschuwing",
|
|
1665
|
+
attention: "functioneel-waarschuwing",
|
|
1666
|
+
error: "functioneel-foutmelding",
|
|
1667
|
+
info: "functioneel-info"
|
|
1668
|
+
}, jn = {
|
|
1669
|
+
neutral: "onbekend",
|
|
1670
|
+
subtle: "onbekend",
|
|
1671
|
+
busy: "bezig",
|
|
1672
|
+
success: "in orde",
|
|
1673
|
+
warning: "let op",
|
|
1674
|
+
error: "storing",
|
|
1675
|
+
info: "informatie",
|
|
1676
|
+
attention: "aandacht",
|
|
1677
|
+
live: "live"
|
|
1678
|
+
}, Mn = {
|
|
1679
|
+
queued: "neutral",
|
|
1680
|
+
busy: "busy",
|
|
1681
|
+
paused: "warning",
|
|
1682
|
+
done: "success",
|
|
1683
|
+
error: "error",
|
|
1684
|
+
cancelled: "subtle"
|
|
1685
|
+
}, Nn = {
|
|
1686
|
+
queued: "Wachtrij",
|
|
1687
|
+
busy: "Bezig",
|
|
1688
|
+
paused: "Onderbroken",
|
|
1689
|
+
done: "Klaar",
|
|
1690
|
+
error: "Mislukt",
|
|
1691
|
+
cancelled: "Geannuleerd"
|
|
1692
|
+
}, { I: Pn } = Pe, Fn = (e) => e, In = (e) => e.strings === void 0, Ln = () => document.createComment(""), J = (e, t, n) => {
|
|
1648
1693
|
let r = e._$AA.parentNode, i = t === void 0 ? e._$AB : t._$AA;
|
|
1649
|
-
if (n === void 0) n = new
|
|
1694
|
+
if (n === void 0) n = new Pn(r.insertBefore(Ln(), i), r.insertBefore(Ln(), i), e, e.options);
|
|
1650
1695
|
else {
|
|
1651
1696
|
let t = n._$AB.nextSibling, a = n._$AM, o = a !== e;
|
|
1652
1697
|
if (o) {
|
|
@@ -1656,15 +1701,15 @@ var { I: An } = Pe, jn = (e) => e, Mn = (e) => e.strings === void 0, Nn = () =>
|
|
|
1656
1701
|
if (t !== i || o) {
|
|
1657
1702
|
let e = n._$AA;
|
|
1658
1703
|
for (; e !== t;) {
|
|
1659
|
-
let t =
|
|
1660
|
-
|
|
1704
|
+
let t = Fn(e).nextSibling;
|
|
1705
|
+
Fn(r).insertBefore(e, i), e = t;
|
|
1661
1706
|
}
|
|
1662
1707
|
}
|
|
1663
1708
|
}
|
|
1664
1709
|
return n;
|
|
1665
|
-
}, Y = (e, t, n = e) => (e._$AI(t, n), e),
|
|
1710
|
+
}, Y = (e, t, n = e) => (e._$AI(t, n), e), Rn = {}, zn = (e, t = Rn) => e._$AH = t, Bn = (e) => e._$AH, Vn = (e) => {
|
|
1666
1711
|
e._$AR(), e._$AA.remove();
|
|
1667
|
-
},
|
|
1712
|
+
}, Hn = R(class extends z {
|
|
1668
1713
|
constructor() {
|
|
1669
1714
|
super(...arguments), this.key = T;
|
|
1670
1715
|
}
|
|
@@ -1672,10 +1717,10 @@ var { I: An } = Pe, jn = (e) => e, Mn = (e) => e.strings === void 0, Nn = () =>
|
|
|
1672
1717
|
return this.key = e, t;
|
|
1673
1718
|
}
|
|
1674
1719
|
update(e, [t, n]) {
|
|
1675
|
-
return t !== this.key && (
|
|
1720
|
+
return t !== this.key && (zn(e), this.key = t), n;
|
|
1676
1721
|
}
|
|
1677
|
-
}),
|
|
1678
|
-
function
|
|
1722
|
+
}), Un = (e) => e ?? T, Wn = 180;
|
|
1723
|
+
function Gn(e, t, n, r = "bottom-start", i = 6) {
|
|
1679
1724
|
if (r === "left-center" || r === "left-start") {
|
|
1680
1725
|
let a = e.left - i - t.width;
|
|
1681
1726
|
if (a >= 8) {
|
|
@@ -1689,7 +1734,7 @@ function Vn(e, t, n, r = "bottom-start", i = 6) {
|
|
|
1689
1734
|
}
|
|
1690
1735
|
r = r === "left-start" ? "bottom-end" : "top-center";
|
|
1691
1736
|
}
|
|
1692
|
-
let a = n.height - e.bottom - i - 8, o = e.top - i - 8, s = Math.min(t.height ||
|
|
1737
|
+
let a = n.height - e.bottom - i - 8, o = e.top - i - 8, s = Math.min(t.height || Wn, Wn), c = r.startsWith("top") ? !(o < s && a > o) : a < s && o > a, l = e.left;
|
|
1693
1738
|
return r.endsWith("-end") && (l = e.right - t.width), r === "top-center" && (l = e.left + e.width / 2 - t.width / 2), l = Math.max(8, Math.min(l, n.width - t.width - 8)), {
|
|
1694
1739
|
top: c ? null : e.bottom + i,
|
|
1695
1740
|
bottom: c ? n.height - e.top + i : null,
|
|
@@ -1697,10 +1742,10 @@ function Vn(e, t, n, r = "bottom-start", i = 6) {
|
|
|
1697
1742
|
space: Math.max(0, c ? o : a)
|
|
1698
1743
|
};
|
|
1699
1744
|
}
|
|
1700
|
-
function
|
|
1745
|
+
function Kn(e, t) {
|
|
1701
1746
|
return !e || !t ? e === t : e.top === t.top && e.bottom === t.bottom && e.left === t.left && e.space === t.space;
|
|
1702
1747
|
}
|
|
1703
|
-
function
|
|
1748
|
+
function qn() {
|
|
1704
1749
|
return {
|
|
1705
1750
|
width: window.innerWidth || document.documentElement.clientWidth || 1024,
|
|
1706
1751
|
height: window.innerHeight || document.documentElement.clientHeight || 768
|
|
@@ -1708,10 +1753,10 @@ function Un() {
|
|
|
1708
1753
|
}
|
|
1709
1754
|
//#endregion
|
|
1710
1755
|
//#region src/primitives/popover/popover.css?inline
|
|
1711
|
-
var
|
|
1756
|
+
var Jn = ":host { display: contents; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n/* Fixed, not absolute: an `overflow` ancestor would cut it off. z-index 85: above the scrim (80),\n below the tooltip (90). */\n.lintje-popover {\n position: fixed;\n z-index: 85;\n max-width: calc(100vw - var(--space-4));\n max-height: var(--lintje-popover-space, none);\n overflow: auto;\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n border: 1px solid var(--color-border-popover);\n box-shadow: var(--shadow-popover);\n font: var(--text-ui);\n animation: lintje-popover-in var(--dur-popover) var(--ease-in-motion);\n}\n";
|
|
1712
1757
|
//#endregion
|
|
1713
1758
|
//#region src/primitives/popover/popover.ts
|
|
1714
|
-
function
|
|
1759
|
+
function Yn(e, t) {
|
|
1715
1760
|
return e ? {
|
|
1716
1761
|
top: e.top === null ? null : `${e.top}px`,
|
|
1717
1762
|
bottom: e.bottom === null ? null : `${e.bottom}px`,
|
|
@@ -1720,9 +1765,9 @@ function Gn(e, t) {
|
|
|
1720
1765
|
"--lintje-popover-space": `${e.space}px`
|
|
1721
1766
|
} : {};
|
|
1722
1767
|
}
|
|
1723
|
-
var
|
|
1768
|
+
var Xn = class extends j {
|
|
1724
1769
|
static {
|
|
1725
|
-
this.styles = A(
|
|
1770
|
+
this.styles = A(Jn);
|
|
1726
1771
|
}
|
|
1727
1772
|
static {
|
|
1728
1773
|
this.properties = {
|
|
@@ -1779,8 +1824,8 @@ var Kn = class extends j {
|
|
|
1779
1824
|
height: n?.offsetHeight ?? 0
|
|
1780
1825
|
};
|
|
1781
1826
|
this.matchWidth && (r.width = Math.max(r.width, t.width));
|
|
1782
|
-
let i =
|
|
1783
|
-
|
|
1827
|
+
let i = Gn(t, r, qn(), this.placement), a = this.matchWidth ? Math.round(t.width) : null;
|
|
1828
|
+
Kn(this.spot, i) && a === this.anchorWidth || (this.anchorWidth = a, this.spot = i);
|
|
1784
1829
|
}
|
|
1785
1830
|
willUpdate(e) {
|
|
1786
1831
|
super.willUpdate(e), e.has("open") && (this.open ? this.measure() : this.spot = null);
|
|
@@ -1791,28 +1836,28 @@ var Kn = class extends j {
|
|
|
1791
1836
|
render() {
|
|
1792
1837
|
return this.open ? C`<div
|
|
1793
1838
|
class="lintje-popover"
|
|
1794
|
-
role=${
|
|
1795
|
-
aria-label=${
|
|
1796
|
-
${B(
|
|
1839
|
+
role=${Un(this.panelRole)}
|
|
1840
|
+
aria-label=${Un(this.label)}
|
|
1841
|
+
${B(Yn(this.spot, this.anchorWidth))}
|
|
1797
1842
|
>
|
|
1798
1843
|
<slot></slot>
|
|
1799
1844
|
</div>` : T;
|
|
1800
1845
|
}
|
|
1801
1846
|
};
|
|
1802
|
-
M("lintje-popover",
|
|
1847
|
+
M("lintje-popover", Xn);
|
|
1803
1848
|
//#endregion
|
|
1804
1849
|
//#region src/core/links.ts
|
|
1805
|
-
function
|
|
1850
|
+
function Zn(e) {
|
|
1806
1851
|
return e.button === 0 && !e.metaKey && !e.ctrlKey && !e.shiftKey && !e.altKey;
|
|
1807
1852
|
}
|
|
1808
1853
|
//#endregion
|
|
1809
1854
|
//#region src/primitives/spinner/spinner.css?inline
|
|
1810
|
-
var
|
|
1855
|
+
var Qn = ":host { display: inline-flex; vertical-align: middle; }\n:host([stacked]) { display: flex; justify-content: center; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-spinner {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n font: var(--text-ui);\n color: var(--color-text-primary);\n}\n.lintje-spinner--stacked { flex-direction: column; gap: var(--space-3); }\n\n/* A line on a surface (3:1): the accent line, not the fill. */\n.lintje-spinner__ring {\n flex: none;\n width: 1rem; height: 1rem;\n border: 2px solid var(--color-accent-line);\n border-top-color: transparent;\n border-radius: var(--radius-round);\n animation: lintje-spin var(--dur-skeleton) linear infinite;\n}\n/* 16, 24 and 40 px: 1, 1.5 and 2.5rem, so the ring grows with the text beside it. */\n.lintje-spinner--24 .lintje-spinner__ring { width: 1.5rem; height: 1.5rem; }\n.lintje-spinner--40 .lintje-spinner__ring { width: 2.5rem; height: 2.5rem; border-width: 3px; }\n.lintje-spinner--current .lintje-spinner__ring {\n border-color: currentColor;\n border-top-color: transparent;\n}\n\n/* A keyframe only works in the root that uses it. */\n@keyframes lintje-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n@media (prefers-reduced-motion: reduce) {\n .lintje-spinner__ring { animation: none; }\n}\n\n/* Forced colours: the ring draws in CanvasText with its open quarter in Canvas, so it still turns. */\n@media (forced-colors: active) {\n .lintje-spinner__ring,\n .lintje-spinner--current .lintje-spinner__ring {\n border-color: CanvasText;\n border-top-color: Canvas;\n }\n}\n", $n = class extends j {
|
|
1811
1856
|
constructor(...e) {
|
|
1812
1857
|
super(...e), this.size = 16, this.stacked = !1, this.current = !1, this.filled = null, this.#e = 0;
|
|
1813
1858
|
}
|
|
1814
1859
|
static {
|
|
1815
|
-
this.styles = A(
|
|
1860
|
+
this.styles = A(Qn);
|
|
1816
1861
|
}
|
|
1817
1862
|
static {
|
|
1818
1863
|
this.properties = {
|
|
@@ -1861,18 +1906,18 @@ var Jn = ":host { display: inline-flex; vertical-align: middle; }\n:host([stacke
|
|
|
1861
1906
|
</span>`;
|
|
1862
1907
|
}
|
|
1863
1908
|
};
|
|
1864
|
-
M("lintje-spinner",
|
|
1909
|
+
M("lintje-spinner", $n);
|
|
1865
1910
|
//#endregion
|
|
1866
1911
|
//#region src/primitives/tooltip/tooltip.css?inline
|
|
1867
|
-
var
|
|
1868
|
-
function
|
|
1912
|
+
var er = "/* A box of its own for the pointer and focus to enter; inline, so flow is unchanged. */\n:host { display: inline-flex; vertical-align: middle; min-width: 0; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n/* The pointer can rest on it, to read it at a larger zoom; Escape takes it away. */\n.lintje-tooltip {\n position: fixed;\n z-index: 90;\n max-width: 15rem;\n padding: var(--space-2) var(--space-3);\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n border: 1px solid var(--color-border-popover);\n box-shadow: var(--shadow-popover);\n font: var(--text-small);\n animation: lintje-fade-in var(--dur-hover) var(--ease-in-motion);\n}\n", tr = 300, nr = 150;
|
|
1913
|
+
function rr(e) {
|
|
1869
1914
|
return e ? {
|
|
1870
1915
|
top: e.top === null ? null : `${e.top}px`,
|
|
1871
1916
|
bottom: e.bottom === null ? null : `${e.bottom}px`,
|
|
1872
1917
|
left: `${e.left}px`
|
|
1873
1918
|
} : {};
|
|
1874
1919
|
}
|
|
1875
|
-
var
|
|
1920
|
+
var ir = class extends j {
|
|
1876
1921
|
constructor(...e) {
|
|
1877
1922
|
super(...e), this.text = "", this.noDescribe = !1, this.placement = "top", this.open = !1, this.spot = null, this.reflowFrame = 0, this.#e = "", this.onPointerEnter = () => {
|
|
1878
1923
|
this.open ? clearTimeout(this.timer) : this.show(300);
|
|
@@ -1887,7 +1932,7 @@ var er = class extends j {
|
|
|
1887
1932
|
};
|
|
1888
1933
|
}
|
|
1889
1934
|
static {
|
|
1890
|
-
this.styles = A(
|
|
1935
|
+
this.styles = A(er);
|
|
1891
1936
|
}
|
|
1892
1937
|
static {
|
|
1893
1938
|
this.properties = {
|
|
@@ -1926,8 +1971,8 @@ var er = class extends j {
|
|
|
1926
1971
|
let t = this.renderRoot.querySelector(".lintje-tooltip"), n = {
|
|
1927
1972
|
width: t?.offsetWidth ?? 0,
|
|
1928
1973
|
height: t?.offsetHeight ?? 0
|
|
1929
|
-
}, r = this.placement === "left" ? "left-center" : "top-center", i =
|
|
1930
|
-
|
|
1974
|
+
}, r = this.placement === "left" ? "left-center" : "top-center", i = Gn(e.getBoundingClientRect(), n, qn(), r, 8);
|
|
1975
|
+
Kn(this.spot, i) || (this.spot = i);
|
|
1931
1976
|
}
|
|
1932
1977
|
willUpdate(e) {
|
|
1933
1978
|
super.willUpdate(e), (e.has("text") || e.has("noDescribe")) && this.describe(), e.has("open") && (this.open ? this.measure() : this.spot = null);
|
|
@@ -1948,28 +1993,28 @@ var er = class extends j {
|
|
|
1948
1993
|
} else n ? e.setAttribute("aria-description", n) : e.removeAttribute("aria-description");
|
|
1949
1994
|
}
|
|
1950
1995
|
render() {
|
|
1951
|
-
return C`<slot @slotchange=${this.describe}></slot>${this.open ? C`<span class="lintje-tooltip" role="tooltip" ${B(
|
|
1996
|
+
return C`<slot @slotchange=${this.describe}></slot>${this.open ? C`<span class="lintje-tooltip" role="tooltip" ${B(rr(this.spot))}
|
|
1952
1997
|
>${this.text}</span
|
|
1953
1998
|
>` : T}`;
|
|
1954
1999
|
}
|
|
1955
2000
|
};
|
|
1956
|
-
M("lintje-tooltip",
|
|
2001
|
+
M("lintje-tooltip", ir);
|
|
1957
2002
|
//#endregion
|
|
1958
2003
|
//#region src/primitives/icon-button/icon-button.css?inline
|
|
1959
|
-
var
|
|
2004
|
+
var ar = "/* Above the divider: what the element itself needs. Below it: the block's own BEM CSS. */\n:host {\n display: inline-flex;\n vertical-align: middle;\n}\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-icon-button {\n position: relative;\n width: var(--h-icon-button);\n height: var(--h-icon-button);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n border-radius: var(--radius);\n transition: opacity var(--dur-hover) var(--ease-in-motion),\n background var(--dur-hover) var(--ease-in-motion);\n}\n/* The target reaches `--h-target` through a transparent hit area; 100 % is the box's own size,\n so the label variant's wider box only grows it upwards and downwards. */\n.lintje-icon-button::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2));\n}\n/* Without a file for its icon the label becomes the text; the square grows as wide as the word. */\n.lintje-icon-button--text { width: auto; min-width: var(--h-icon-button); padding: 0 var(--space-3); }\n.lintje-icon-button__label { font-size: 0.875rem; font-weight: 700; white-space: nowrap; }\n\n/* The box is a line (3:1), the glyph stands in for a word (4.5:1): different tokens. */\n.lintje-icon-button--outlined {\n border: 1px solid var(--color-accent-line);\n background: var(--color-bg-surface);\n color: var(--color-accent-text);\n}\n.lintje-icon-button--outlined:not(.is-disabled):hover { background: var(--color-bg-selected); }\n\n.lintje-icon-button--flat { background: transparent; color: var(--color-text-primary); }\n.lintje-icon-button--flat:not(.is-disabled):hover { background: var(--color-bg-subtle); }\n\n/* Tile actions stand back in the muted text colour, never below 3:1; hover and focus darken them. */\n.lintje-icon-button--tile { background: transparent; color: var(--color-text-muted); }\n.lintje-icon-button--tile:not(.is-disabled):hover, .lintje-icon-button--tile:focus-visible { color: var(--color-text-primary); }\n\n/* The active button takes the primary-fill border, so the square keeps an edge in dark. */\n.lintje-icon-button.is-active {\n background: var(--color-action-primary);\n color: var(--color-action-primary-text);\n border-color: var(--color-action-primary-border);\n}\n\n/* Live: it listens or speaks now. The primary fill with its border, and bars that move beside\n the icon, so the state is never colour alone; the box grows to hold them. */\n.lintje-icon-button.is-live {\n width: auto;\n gap: var(--space-2);\n padding: 0 var(--space-3);\n border: 1px solid var(--color-action-primary-border);\n background: var(--color-action-primary);\n color: var(--color-action-primary-text);\n}\n.lintje-icon-button.is-live:not(.is-disabled):hover { background: var(--color-action-primary-hover); }\n.lintje-icon-button__waves { display: inline-flex; align-items: center; gap: 2px; height: 16px; }\n.lintje-icon-button__wave {\n width: 2px;\n height: 100%;\n background: currentColor;\n animation: lintje-icon-button-wave var(--dur-wave) var(--ease-in-motion) infinite alternate;\n}\n.lintje-icon-button__wave:nth-child(2) { animation-delay: calc(var(--dur-wave) * -0.5); }\n.lintje-icon-button__wave:nth-child(3) { animation-delay: calc(var(--dur-wave) * -0.25); }\n.lintje-icon-button__wave:nth-child(4) { animation-delay: calc(var(--dur-wave) * -0.75); }\n@keyframes lintje-icon-button-wave {\n from { transform: scaleY(0.25); }\n to { transform: scaleY(1); }\n}\n/* Without motion the bars stand still at different heights: still a wave, never a pulse. */\n@media (prefers-reduced-motion: reduce) {\n .lintje-icon-button__wave { animation: none; transform: scaleY(0.5); }\n .lintje-icon-button__wave:nth-child(2) { transform: scaleY(1); }\n .lintje-icon-button__wave:nth-child(4) { transform: scaleY(0.75); }\n}\n\n/* Disabled is `aria-disabled`: tab order and focus ring stay. After is-active, so it loses the fill. */\n.lintje-icon-button.is-disabled { cursor: not-allowed; color: var(--color-text-disabled); }\n.lintje-icon-button--outlined.is-disabled { background: var(--color-bg-surface); border-color: var(--color-border-default); }\n\n/* Forced colours: the active fill is dropped, so its border turns Highlight. */\n@media (forced-colors: active) {\n .lintje-icon-button.is-active,\n .lintje-icon-button.is-live { border-color: Highlight; }\n .lintje-icon-button.is-disabled { color: GrayText; border-color: GrayText; }\n}\n";
|
|
1960
2005
|
//#endregion
|
|
1961
2006
|
//#region src/core/length.ts
|
|
1962
|
-
function
|
|
2007
|
+
function or(e, t, n) {
|
|
1963
2008
|
let r = getComputedStyle(e).getPropertyValue(t).trim(), i = parseFloat(r);
|
|
1964
|
-
return Number.isFinite(i) ? r.endsWith("rem") ? i *
|
|
2009
|
+
return Number.isFinite(i) ? r.endsWith("rem") ? i * sr() : i : n;
|
|
1965
2010
|
}
|
|
1966
|
-
function
|
|
2011
|
+
function sr() {
|
|
1967
2012
|
let e = parseFloat(getComputedStyle(document.documentElement).fontSize);
|
|
1968
2013
|
return Number.isFinite(e) && e > 0 ? e : 16;
|
|
1969
2014
|
}
|
|
1970
2015
|
//#endregion
|
|
1971
2016
|
//#region src/primitives/shared/grid-item-element.ts
|
|
1972
|
-
var
|
|
2017
|
+
var cr = A("/* `min-width: auto` is the default; tiles hold long words and wide tables that would overflow. */\n:host {\n min-width: 0;\n}\n:host(lintje-grid-item) {\n display: block;\n}\n:host([span]) {\n grid-column: span var(--lintje-span, 1);\n}\n@media (min-width: 768px) and (max-width: 1023px), print and (max-width: 1023px) {\n :host([span='4']) { grid-column: span 6; }\n :host([span='8']) { grid-column: span 12; }\n}\n@media screen and (max-width: 767px) {\n :host([span]) { grid-column: span 1; }\n}\n"), lr = class extends j {
|
|
1973
2018
|
static {
|
|
1974
2019
|
this.properties = { span: {
|
|
1975
2020
|
type: Number,
|
|
@@ -1979,15 +2024,82 @@ var ir = A("/* `min-width: auto` is the default; tiles hold long words and wide
|
|
|
1979
2024
|
willUpdate(e) {
|
|
1980
2025
|
super.willUpdate(e), this.span ? this.style.setProperty("--lintje-span", String(this.span)) : this.style.removeProperty("--lintje-span");
|
|
1981
2026
|
}
|
|
1982
|
-
},
|
|
1983
|
-
|
|
1984
|
-
|
|
2027
|
+
}, ur = "/* The block is the container, so the inner row can take its margin from the block's own width. */\n.lintje-announcement {\n container-type: inline-size;\n border-radius: var(--radius);\n}\n.lintje-announcement__inner {\n display: flex;\n align-items: flex-start;\n gap: var(--space-2);\n padding: var(--space-3);\n}\n\n.lintje-announcement__icon {\n width: 20px; height: 20px;\n flex: none;\n display: flex; align-items: center; justify-content: center;\n color: var(--color-text-primary);\n margin-top: 1px;\n}\n.lintje-announcement__body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--space-1); }\n.lintje-announcement__content { min-width: 0; display: flex; flex-direction: column; gap: var(--space-1); }\n.lintje-announcement__title { font: var(--text-tile-title); color: var(--color-text-primary); }\n.lintje-announcement__text { font: var(--text-ui); line-height: 1.45; color: var(--color-text-primary); }\n.lintje-announcement__meta { font: var(--text-meta); color: var(--color-text-muted); }\n.lintje-announcement__link { color: var(--color-link-on-status); font-weight: 700; }\n/* The `action` slot keeps its own width: under the text, or beside it where the announcement is wide. */\n.lintje-announcement__action::slotted(*) { align-self: flex-start; }\n.lintje-announcement__media::slotted(*) { flex: none; max-width: 40%; height: auto; }\n/* Wide enough for the action beside the text, wide enough for the full margin. */\n@container (min-width: 560px) {\n .lintje-announcement__inner { padding: var(--space-4); }\n .lintje-announcement__body { flex-direction: row; align-items: center; gap: var(--space-4); }\n .lintje-announcement__content { flex: 1; }\n .lintje-announcement__action::slotted(*) { align-self: center; flex: none; }\n}\n\n/* The margin pulls the button's middle in line with the icon box; the hit area reaches the target. */\n.lintje-announcement__close {\n position: relative;\n width: var(--h-icon-button); height: var(--h-icon-button); flex: none;\n display: flex; align-items: center; justify-content: center;\n --lintje-close-pull: calc((var(--space-5) - var(--h-icon-button)) / 2);\n margin: var(--lintje-close-pull) var(--lintje-close-pull) var(--lintje-close-pull) 0;\n border: 0;\n background: transparent;\n color: var(--color-text-primary);\n cursor: pointer;\n}\n.lintje-announcement__close:hover { background: var(--color-bg-subtle); }\n.lintje-announcement__close::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2));\n}\n\n.lintje-announcement--warning { background: var(--color-attention-bg); }\n.lintje-announcement--warning .lintje-announcement__icon { color: var(--color-attention-line); }\n.lintje-announcement--error { background: var(--color-error-bg); }\n.lintje-announcement--error .lintje-announcement__icon { color: var(--color-error-line); }\n.lintje-announcement--outage { background: var(--color-error-bg); }\n.lintje-announcement--outage .lintje-announcement__icon { color: var(--color-error-line); }\n.lintje-announcement--info { background: var(--color-info-bg); }\n.lintje-announcement--info .lintje-announcement__icon { color: var(--color-info-line); }\n.lintje-announcement--ok { background: var(--color-success-bg); }\n.lintje-announcement--ok .lintje-announcement__icon { color: var(--color-success-line); }\n\n@media screen and (max-width: 767px) {\n .lintje-announcement__inner { padding: var(--space-3); }\n .lintje-announcement__text { font: var(--text-small); }\n}\n\n/* Forced colours drop the fill, so the announcement takes an outline. */\n@media (forced-colors: active) {\n .lintje-announcement { outline: 1px solid CanvasText; outline-offset: -1px; }\n}\n\n@media print {\n .lintje-announcement { break-inside: avoid; }\n}\n", dr = {
|
|
2028
|
+
warning: "attention",
|
|
2029
|
+
outage: "error",
|
|
2030
|
+
error: "error",
|
|
2031
|
+
info: "info",
|
|
2032
|
+
ok: "success"
|
|
2033
|
+
}, fr = {
|
|
2034
|
+
warning: "status",
|
|
2035
|
+
outage: "alert",
|
|
2036
|
+
error: "status",
|
|
2037
|
+
info: "status",
|
|
2038
|
+
ok: "status"
|
|
2039
|
+
}, pr = {
|
|
2040
|
+
warning: "Waarschuwing",
|
|
2041
|
+
outage: "Storing",
|
|
2042
|
+
error: "Fout",
|
|
2043
|
+
info: "Informatie",
|
|
2044
|
+
ok: "Gelukt"
|
|
2045
|
+
}, mr = A(ur);
|
|
2046
|
+
function hr(e) {
|
|
2047
|
+
let t = e.kind ?? "warning", n = e.live === !0, r = n && !e.filled;
|
|
2048
|
+
return C`<div
|
|
2049
|
+
class=${q({
|
|
2050
|
+
"lintje-announcement": !0,
|
|
2051
|
+
[`lintje-announcement--${t}`]: !0
|
|
2052
|
+
})}
|
|
2053
|
+
role=${n ? fr[t] : T}
|
|
2054
|
+
>
|
|
2055
|
+
<div class="lintje-announcement__inner">
|
|
2056
|
+
${gr(t)} ${r ? T : _r(t, e)}
|
|
2057
|
+
</div>
|
|
2058
|
+
</div>`;
|
|
2059
|
+
}
|
|
2060
|
+
function gr(e) {
|
|
2061
|
+
let t = An[dr[e]];
|
|
2062
|
+
return C`<span class="lintje-announcement__icon" aria-hidden="true"
|
|
2063
|
+
>${t ? K(t, { size: 16 }) : T}</span
|
|
2064
|
+
>`;
|
|
2065
|
+
}
|
|
2066
|
+
function _r(e, t) {
|
|
2067
|
+
let { title: n, text: r, meta: i, link: a } = t, o = C`<span class="visually-hidden">${pr[e]}: </span>`;
|
|
2068
|
+
return C`<div class="lintje-announcement__body">
|
|
2069
|
+
<div class="lintje-announcement__content">
|
|
2070
|
+
${n ? C`<p class="lintje-announcement__title">${o}${n}</p>` : T}
|
|
2071
|
+
${r ? C`<p class="lintje-announcement__text">${n ? T : o}${r}</p>` : T}
|
|
2072
|
+
${i || a ? C`<p class="lintje-announcement__meta">
|
|
2073
|
+
${i ?? T}${i && a ? " · " : T}${a ? C`<a class="lintje-announcement__link" href=${a.href}>${a.label}</a>` : T}
|
|
2074
|
+
</p>` : T}
|
|
2075
|
+
</div>
|
|
2076
|
+
${t.action ?? T}
|
|
2077
|
+
</div>
|
|
2078
|
+
${t.media ?? T}
|
|
2079
|
+
${t.onClose ? C`<button
|
|
2080
|
+
type="button"
|
|
2081
|
+
class="lintje-announcement__close"
|
|
2082
|
+
aria-label="Mededeling sluiten"
|
|
2083
|
+
@click=${t.onClose}
|
|
2084
|
+
>
|
|
2085
|
+
${K("functioneel-kruis", { size: 16 })}
|
|
2086
|
+
</button>` : T}`;
|
|
2087
|
+
}
|
|
2088
|
+
//#endregion
|
|
2089
|
+
//#region src/primitives/shared/length.ts
|
|
2090
|
+
var vr = /^-?\d+(?:\.\d+)?$/;
|
|
2091
|
+
function yr(e) {
|
|
2092
|
+
if (e !== void 0) return typeof e == "number" || vr.test(e) ? `${e}px` : e;
|
|
1985
2093
|
}
|
|
1986
2094
|
//#endregion
|
|
1987
2095
|
//#region src/primitives/icon-button/icon-button.ts
|
|
1988
|
-
var
|
|
2096
|
+
var br = class extends j {
|
|
1989
2097
|
static {
|
|
1990
|
-
this.styles = [
|
|
2098
|
+
this.styles = [
|
|
2099
|
+
G,
|
|
2100
|
+
A(ar),
|
|
2101
|
+
A(xn)
|
|
2102
|
+
];
|
|
1991
2103
|
}
|
|
1992
2104
|
static {
|
|
1993
2105
|
this.properties = {
|
|
@@ -2051,20 +2163,25 @@ var cr = class extends j {
|
|
|
2051
2163
|
</button>`;
|
|
2052
2164
|
}
|
|
2053
2165
|
};
|
|
2054
|
-
M("lintje-icon-button",
|
|
2166
|
+
M("lintje-icon-button", br);
|
|
2055
2167
|
//#endregion
|
|
2056
2168
|
//#region src/primitives/status-dot/status-dot.css?inline
|
|
2057
|
-
var
|
|
2169
|
+
var xr = ":host { display: inline-flex; vertical-align: middle; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-status { display: inline-flex; align-items: center; gap: var(--space-2); font: var(--text-small); }\n.lintje-status__dot { border-radius: var(--radius-round); flex: none; display: block; }\n.lintje-status__dot--success { background: var(--color-success); }\n.lintje-status__dot--warning { background: var(--color-warning); }\n.lintje-status__dot--attention { background: var(--color-attention); }\n.lintje-status__dot--error { background: var(--color-error); }\n.lintje-status__dot--info { background: var(--color-info); }\n.lintje-status__dot--busy { background: var(--color-action-primary); }\n.lintje-status__dot--neutral { background: var(--color-text-muted); }\n.lintje-status__dot--subtle { background: var(--color-text-muted); }\n.lintje-status__dot--live { background: var(--color-error); }\n\n/* Forced colours: the dot's fill is dropped, so it keeps its drawing as one CanvasText dot. */\n@media (forced-colors: active) {\n .lintje-status__dot { forced-color-adjust: none; background: CanvasText; }\n}\n", Sr = {
|
|
2170
|
+
complete: "success",
|
|
2171
|
+
delayed: "warning",
|
|
2172
|
+
outage: "error",
|
|
2173
|
+
"no-data": "neutral"
|
|
2174
|
+
}, Cr = {
|
|
2058
2175
|
complete: "compleet",
|
|
2059
2176
|
delayed: "vertraagd",
|
|
2060
2177
|
outage: "storing",
|
|
2061
2178
|
"no-data": "geen data"
|
|
2062
|
-
},
|
|
2179
|
+
}, wr = class extends j {
|
|
2063
2180
|
constructor(...e) {
|
|
2064
2181
|
super(...e), this.tone = "complete", this.size = 10;
|
|
2065
2182
|
}
|
|
2066
2183
|
static {
|
|
2067
|
-
this.styles = A(
|
|
2184
|
+
this.styles = A(xr);
|
|
2068
2185
|
}
|
|
2069
2186
|
static {
|
|
2070
2187
|
this.properties = {
|
|
@@ -2077,27 +2194,28 @@ var lr = ":host { display: inline-flex; vertical-align: middle; }\n:host([hidden
|
|
|
2077
2194
|
};
|
|
2078
2195
|
}
|
|
2079
2196
|
render() {
|
|
2197
|
+
let e = Object.hasOwn(Sr, this.tone) ? this.tone : void 0, t = e ? Sr[e] : this.tone, n = e ? Cr[e] : jn[t];
|
|
2080
2198
|
return C`<span class="lintje-status">
|
|
2081
2199
|
<span
|
|
2082
|
-
class="lintje-status__dot lintje-status__dot--${
|
|
2200
|
+
class="lintje-status__dot lintje-status__dot--${t}"
|
|
2083
2201
|
${B({
|
|
2084
2202
|
width: `${this.size}px`,
|
|
2085
2203
|
height: `${this.size}px`
|
|
2086
2204
|
})}
|
|
2087
2205
|
></span>
|
|
2088
|
-
<span>${this.label ??
|
|
2206
|
+
<span>${this.label ?? n}</span>
|
|
2089
2207
|
</span>`;
|
|
2090
2208
|
}
|
|
2091
2209
|
};
|
|
2092
|
-
M("lintje-status-dot",
|
|
2210
|
+
M("lintje-status-dot", wr);
|
|
2093
2211
|
//#endregion
|
|
2094
2212
|
//#region src/primitives/skeleton/skeleton.css?inline
|
|
2095
|
-
var
|
|
2213
|
+
var Tr = "/* The size is on the host so a percentage has a box to resolve against. */\n:host { display: block; }\n:host(lintje-skeleton) .lintje-skeleton { width: 100%; height: 100%; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-skeleton {\n display: block;\n background: linear-gradient(90deg,\n var(--color-bg-subtle) 25%,\n var(--color-border-default) 37%,\n var(--color-bg-subtle) 63%);\n background-size: 200% 100%;\n animation: lintje-shimmer var(--dur-skeleton) linear infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n .lintje-skeleton { animation: none; background: var(--color-bg-subtle); }\n}\n\n/* Forced colours: the gradient is dropped, so the placeholder keeps a 1 px GrayText line. */\n@media (forced-colors: active) {\n .lintje-skeleton { outline: 1px solid GrayText; outline-offset: -1px; }\n}\n", Er = class extends j {
|
|
2096
2214
|
constructor(...e) {
|
|
2097
2215
|
super(...e), this.width = "100%", this.height = 12;
|
|
2098
2216
|
}
|
|
2099
2217
|
static {
|
|
2100
|
-
this.styles = A(
|
|
2218
|
+
this.styles = A(Tr);
|
|
2101
2219
|
}
|
|
2102
2220
|
static {
|
|
2103
2221
|
this.properties = {
|
|
@@ -2106,25 +2224,57 @@ var fr = "/* The size is on the host so a percentage has a box to resolve agains
|
|
|
2106
2224
|
};
|
|
2107
2225
|
}
|
|
2108
2226
|
willUpdate(e) {
|
|
2109
|
-
super.willUpdate(e), this.style.width =
|
|
2227
|
+
super.willUpdate(e), this.style.width = yr(this.width) ?? "", this.style.height = yr(this.height) ?? "";
|
|
2110
2228
|
}
|
|
2111
2229
|
render() {
|
|
2112
2230
|
return C`<span class="lintje-skeleton" aria-hidden="true"></span>`;
|
|
2113
2231
|
}
|
|
2114
2232
|
};
|
|
2115
|
-
M("lintje-skeleton",
|
|
2233
|
+
M("lintje-skeleton", Er);
|
|
2234
|
+
//#endregion
|
|
2235
|
+
//#region src/primitives/shared/empty-state-block.ts
|
|
2236
|
+
var Dr = A(".lintje-empty-state {\n display: flex; flex-direction: column; align-items: center;\n gap: var(--space-2);\n padding: var(--space-8) var(--space-4);\n text-align: center;\n font: var(--text-ui);\n color: var(--color-text-primary);\n}\n.lintje-empty-state__icon { color: var(--color-text-muted); }\n.lintje-empty-state__heading {\n margin: var(--space-1) 0 0;\n font: var(--text-tile-title);\n color: var(--color-text-primary);\n}\n.lintje-empty-state__text {\n max-width: 280px;\n margin: 0;\n color: var(--color-text-muted);\n}\n.lintje-empty-state__action { margin-top: var(--space-2); }\n\n.lintje-empty-state--compact {\n display: block;\n padding: var(--space-4);\n text-align: left;\n color: var(--color-text-muted);\n}\n\n/* Phone: the action runs the full width. */\n@media screen and (max-width: 767px) {\n .lintje-empty-state:not(.lintje-empty-state--compact) .lintje-empty-state__action {\n align-self: stretch;\n }\n}\n");
|
|
2237
|
+
function Or(e, t) {
|
|
2238
|
+
switch (t) {
|
|
2239
|
+
case 2: return C`<h2 class="lintje-empty-state__heading">${e}</h2>`;
|
|
2240
|
+
case 4: return C`<h4 class="lintje-empty-state__heading">${e}</h4>`;
|
|
2241
|
+
case 5: return C`<h5 class="lintje-empty-state__heading">${e}</h5>`;
|
|
2242
|
+
case 6: return C`<h6 class="lintje-empty-state__heading">${e}</h6>`;
|
|
2243
|
+
default: return C`<h3 class="lintje-empty-state__heading">${e}</h3>`;
|
|
2244
|
+
}
|
|
2245
|
+
}
|
|
2246
|
+
function kr(e) {
|
|
2247
|
+
let t = e.status ? "status" : T, n = !!e.status && !e.filled;
|
|
2248
|
+
return e.compact ? C`<div class="lintje-empty-state lintje-empty-state--compact" role=${t}>
|
|
2249
|
+
${n ? T : C`${e.text ?? T} ${e.action ?? T}`}
|
|
2250
|
+
</div>` : C`<div class="lintje-empty-state" role=${t}>
|
|
2251
|
+
${n ? T : Ar(e)}
|
|
2252
|
+
</div>`;
|
|
2253
|
+
}
|
|
2254
|
+
function Ar(e) {
|
|
2255
|
+
return C`${e.icon ? K(e.icon, {
|
|
2256
|
+
size: 40,
|
|
2257
|
+
className: "lintje-empty-state__icon"
|
|
2258
|
+
}) : T}
|
|
2259
|
+
${e.heading ? Or(e.heading, e.level ?? 3) : T}
|
|
2260
|
+
${e.text ? C`<p class="lintje-empty-state__text">${e.text}</p>` : T}
|
|
2261
|
+
${e.action === void 0 ? T : C`<div class="lintje-empty-state__action" ?hidden=${!e.actionShown}>
|
|
2262
|
+
${e.action}
|
|
2263
|
+
</div>`}`;
|
|
2264
|
+
}
|
|
2116
2265
|
//#endregion
|
|
2117
2266
|
//#region src/primitives/tile/tile.css?inline
|
|
2118
|
-
var
|
|
2267
|
+
var jr = "/*\n * Above the divider: the host, the grid item the tile fills by its height or, when the host has\n * only a floor, by `min-height: inherit`. Below it: the block's BEM CSS.\n */\n:host {\n display: block;\n min-width: 0;\n}\n:host([hidden]) { display: none; }\n.lintje-tile {\n height: 100%;\n min-height: inherit;\n}\n/* On paper a tile stays on one sheet where it fits, unless it is `breakable`. */\n@media print { :host(:not([breakable])) { break-inside: avoid; } }\n.lintje-chart-state {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n justify-content: center;\n align-items: center;\n min-width: 0;\n}\n.lintje-chart-state--empty { text-align: center; gap: var(--space-3); }\n.lintje-chart-state--empty .lintje-empty-state--compact { text-align: center; font: var(--text-small); }\n/* An announcement measures as a container, so it has no width of its own to centre by. */\n.lintje-chart-state--error { justify-content: flex-start; align-items: stretch; gap: var(--space-4); }\n.lintje-chart-state__last-known { font: var(--text-small); color: var(--color-text-muted); text-align: center; }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-tile {\n display: flex;\n flex-direction: column;\n gap: 14px;\n min-width: 0;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-default);\n border-radius: var(--radius);\n padding: var(--tile-pad-y) var(--tile-pad-x);\n}\n\n.lintje-tile__head {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: var(--space-4);\n}\n.lintje-tile__heading { min-width: 0; }\n/* With an icon the heading becomes two columns, which centres the icon on the title's line and\n keeps the subtitle under the title text. */\n.lintje-tile__heading--icon {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr);\n}\n/* Only the placement is the tile's; the alignment is `.lintje-leading-icon`. */\n.lintje-tile__icon { grid-row: 1; }\n.lintje-tile__heading--icon .lintje-tile__title,\n.lintje-tile__heading--icon .lintje-tile__sub { grid-column: 2; }\n.lintje-tile__title { font: var(--text-tile-title); color: var(--color-text-primary); }\n.lintje-tile__sub { font: var(--text-tile-sub); color: var(--color-text-muted); margin-top: 2px; }\n/* The actions are 40 px icon buttons beside a title of one line: they stand out above and below\n it, so the head is the title's height and a tile without a subtitle keeps no empty band. */\n.lintje-tile__actions {\n display: flex; gap: var(--space-2); flex: none;\n margin-block: calc(var(--space-2) * -1);\n}\n/* Expand and download appear only while the tile is hovered or holds keyboard focus; without\n hover they stay visible. The tile only hides the action; how the visible action looks is the\n icon button's own. */\n.lintje-tile:not(:hover):not(:focus-within) lintje-icon-button[variant='tile'] { opacity: 0; }\n@media (hover: none) {\n .lintje-tile:not(:hover):not(:focus-within) lintje-icon-button[variant='tile'] { opacity: 1; }\n}\n\n.lintje-tile__intro { font: var(--text-small); color: var(--color-text-secondary); }\n\n/* Body and content are flex columns, so slotted content can place itself in a taller tile. */\n.lintje-tile__body { flex: 1; min-height: 0; min-width: 0; display: flex; flex-direction: column; }\n.lintje-tile__content { flex: 1; min-height: 0; display: flex; flex-direction: column; }\n/* A tile with a height of its own scrolls what does not fit (`content-scroll`). */\n:host([content-scroll]) .lintje-tile__content { overflow: auto; }\n.lintje-tile__body--aside { flex-direction: row; gap: var(--space-5); align-items: stretch; }\n.lintje-tile__body--aside .lintje-tile__content { flex: 1; min-width: 0; }\n.lintje-tile__aside { flex: none; display: flex; flex-direction: column; justify-content: center; }\n/* On a phone the content keeps its full width and the key figure leads above it. */\n@media screen and (max-width: 767px) {\n .lintje-tile__body--aside { flex-direction: column; }\n}\n\n.lintje-tile__footnote {\n font: var(--text-meta);\n color: var(--color-text-muted);\n border-top: 1px solid var(--color-border-default);\n padding-top: var(--space-2);\n margin-top: auto;\n}\n\n/* Flush: the rows' lines reach the frame, and what they draw keeps the heading's indent through\n --lintje-inset, as does a pager under them. The last row's line is the footnote's rule. */\n.lintje-tile--flush .lintje-tile__body {\n margin-inline: calc(var(--tile-pad-x) * -1);\n --lintje-inset: var(--tile-pad-x);\n}\n.lintje-tile--flush .lintje-tile__footnote { border-top: 0; padding-top: 0; }\n/* Without a footnote the last row's line is the frame's: no empty strip under it. A pager under\n the rows gives the strip back through --lintje-inset-end. */\n.lintje-tile--flush:has(> .lintje-tile__footnote[hidden]) > .lintje-tile__body {\n margin-bottom: calc(var(--tile-pad-y) * -1 - 1px);\n --lintje-inset-end: calc(var(--tile-pad-y) + 1px);\n}\n\n/* Enlarging and downloading are for the screen. A tile split over two sheets is a block:\n Chromium sizes a flex column that breaks too short, and what follows overlaps its rows. */\n@media print {\n .lintje-tile__actions { display: none; }\n :host([breakable]) .lintje-tile { display: block; }\n :host([breakable]) .lintje-tile > :not(:first-child) { margin-top: 14px; }\n}\n", Mr = "Gegevens laden…", Nr = class e extends lr {
|
|
2119
2268
|
constructor(...e) {
|
|
2120
|
-
super(...e), this.footnoteSlotted = !1, this.asideSlotted = !1, this.legendBelow = !1, this.expandable = !1, this.download = !1, this.state = "ready", this.contentHeight = "var(--chart-h-main)", this.contentScroll = !1, this.flush = !1, this.filled = null, this.#e = 0;
|
|
2269
|
+
super(...e), this.footnoteSlotted = !1, this.asideSlotted = !1, this.legendBelow = !1, this.expandable = !1, this.download = !1, this.state = "ready", this.contentHeight = "var(--chart-h-main)", this.contentScroll = !1, this.flush = !1, this.breakable = !1, this.filled = null, this.#e = 0;
|
|
2121
2270
|
}
|
|
2122
2271
|
static {
|
|
2123
2272
|
this.styles = [
|
|
2124
|
-
|
|
2273
|
+
cr,
|
|
2125
2274
|
G,
|
|
2126
|
-
A(
|
|
2127
|
-
|
|
2275
|
+
A(jr),
|
|
2276
|
+
mr,
|
|
2277
|
+
Dr
|
|
2128
2278
|
];
|
|
2129
2279
|
}
|
|
2130
2280
|
static {
|
|
@@ -2161,6 +2311,10 @@ var mr = "/*\n * Above the divider: the host, the grid item the tile fills by it
|
|
|
2161
2311
|
reflect: !0
|
|
2162
2312
|
},
|
|
2163
2313
|
flush: { type: Boolean },
|
|
2314
|
+
breakable: {
|
|
2315
|
+
type: Boolean,
|
|
2316
|
+
reflect: !0
|
|
2317
|
+
},
|
|
2164
2318
|
filled: { state: !0 }
|
|
2165
2319
|
};
|
|
2166
2320
|
}
|
|
@@ -2172,7 +2326,7 @@ var mr = "/*\n * Above the divider: the host, the grid item the tile fills by it
|
|
|
2172
2326
|
this.#e && cancelAnimationFrame(this.#e), this.#e = 0, super.disconnectedCallback();
|
|
2173
2327
|
}
|
|
2174
2328
|
get regionText() {
|
|
2175
|
-
return this.state === "error" ? this.message ?? "" : this.state === "loading" ?
|
|
2329
|
+
return this.state === "error" || this.state === "empty" ? this.message ?? "" : this.state === "loading" ? Mr : null;
|
|
2176
2330
|
}
|
|
2177
2331
|
willUpdate(e) {
|
|
2178
2332
|
super.willUpdate(e), e.has("state") && (this.filled = null);
|
|
@@ -2207,7 +2361,7 @@ var mr = "/*\n * Above the divider: the host, the grid item the tile fills by it
|
|
|
2207
2361
|
"lintje-tile__heading--icon": !!this.icon
|
|
2208
2362
|
})}
|
|
2209
2363
|
>
|
|
2210
|
-
${
|
|
2364
|
+
${mn(this.icon, "lintje-tile__icon")}
|
|
2211
2365
|
${this.heading ? C`<h3 id=${t ?? T} class="lintje-tile__title">${this.heading}</h3>` : T}
|
|
2212
2366
|
${this.subtitle ? C`<p class="lintje-tile__sub">${this.subtitle}</p>` : T}
|
|
2213
2367
|
</div>
|
|
@@ -2251,44 +2405,45 @@ var mr = "/*\n * Above the divider: the host, the grid item the tile fills by it
|
|
|
2251
2405
|
</section>`;
|
|
2252
2406
|
}
|
|
2253
2407
|
content() {
|
|
2254
|
-
let e =
|
|
2408
|
+
let e = yr(this.contentHeight);
|
|
2255
2409
|
switch (this.state) {
|
|
2256
2410
|
case "loading": return C`<div ${B({ height: e })} role="status">
|
|
2257
|
-
<span class="visually-hidden">${this.filled ===
|
|
2411
|
+
<span class="visually-hidden">${this.filled === Mr ? Mr : T}</span>
|
|
2258
2412
|
<slot name="loading"><lintje-skeleton height="100%"></lintje-skeleton></slot>
|
|
2259
2413
|
</div>`;
|
|
2260
2414
|
case "empty": return C`<div class="lintje-chart-state lintje-chart-state--empty" ${B({ height: e })}>
|
|
2261
|
-
|
|
2415
|
+
${kr({
|
|
2416
|
+
text: this.message,
|
|
2417
|
+
compact: !0,
|
|
2418
|
+
status: !0,
|
|
2419
|
+
filled: this.filled === this.regionText
|
|
2420
|
+
})}
|
|
2262
2421
|
</div>`;
|
|
2263
2422
|
case "error": return C`<div
|
|
2264
2423
|
class="lintje-chart-state lintje-chart-state--error"
|
|
2265
2424
|
${B({ minHeight: e })}
|
|
2266
2425
|
>
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
<span class="visually-hidden">Waarschuwing: </span>${this.message}
|
|
2274
|
-
</p>` : T}
|
|
2275
|
-
</div>
|
|
2276
|
-
</div>
|
|
2426
|
+
${hr({
|
|
2427
|
+
kind: "warning",
|
|
2428
|
+
text: this.message,
|
|
2429
|
+
live: !0,
|
|
2430
|
+
filled: this.filled === this.regionText
|
|
2431
|
+
})}
|
|
2277
2432
|
${this.lastKnown ? C`<div class="lintje-chart-state__last-known">${this.lastKnown}</div>` : T}
|
|
2278
2433
|
</div>`;
|
|
2279
2434
|
default: return C`<slot></slot>`;
|
|
2280
2435
|
}
|
|
2281
2436
|
}
|
|
2282
2437
|
};
|
|
2283
|
-
M("lintje-tile",
|
|
2438
|
+
M("lintje-tile", Nr);
|
|
2284
2439
|
//#endregion
|
|
2285
2440
|
//#region src/primitives/grid/grid.css?inline
|
|
2286
|
-
var
|
|
2441
|
+
var Pr = "/*\n * Written with `:host(…)` and `::slotted()`: a selector from outside cannot reach into an item's\n * own root. An item's width comes from `--lintje-span`, so a media rule can override `grid-column`.\n */\n\n/* --- The grid ------------------------------------------------------------ */\n:host {\n display: grid;\n grid-template-columns: repeat(var(--lintje-grid-columns, 12), minmax(0, 1fr));\n gap: var(--grid-gutter);\n align-items: stretch;\n}\n:host([hidden]) { display: none; }\n\n@media (min-width: 768px) and (max-width: 1023px), print and (max-width: 1023px) {\n :host([variant='kpi-row']) { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n}\n@media screen and (max-width: 767px) {\n :host { grid-template-columns: minmax(0, 1fr); }\n :host([variant='kpi-row']) { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n}\n\n/* --- Every item its column ------------------------------------------------ */\n\n::slotted([span]) {\n min-width: 0;\n grid-column: span var(--lintje-span, 1);\n}\n\n@media (min-width: 768px) and (max-width: 1023px), print and (max-width: 1023px) {\n ::slotted([span='4']) { grid-column: span 6; }\n ::slotted([span='8']) { grid-column: span 12; }\n}\n@media screen and (max-width: 767px) {\n ::slotted([span]) { grid-column: span 1; }\n}\n", Fr = class extends j {
|
|
2287
2442
|
constructor(...e) {
|
|
2288
2443
|
super(...e), this.columns = 12;
|
|
2289
2444
|
}
|
|
2290
2445
|
static {
|
|
2291
|
-
this.styles = A(
|
|
2446
|
+
this.styles = A(Pr);
|
|
2292
2447
|
}
|
|
2293
2448
|
static {
|
|
2294
2449
|
this.properties = {
|
|
@@ -2306,45 +2461,45 @@ var vr = "/*\n * Written with `:host(…)` and `::slotted()`: a selector from ou
|
|
|
2306
2461
|
return C`<slot></slot>`;
|
|
2307
2462
|
}
|
|
2308
2463
|
};
|
|
2309
|
-
M("lintje-grid",
|
|
2464
|
+
M("lintje-grid", Fr);
|
|
2310
2465
|
//#endregion
|
|
2311
2466
|
//#region src/primitives/grid-item/grid-item.ts
|
|
2312
|
-
var
|
|
2467
|
+
var Ir = class extends lr {
|
|
2313
2468
|
static {
|
|
2314
|
-
this.styles =
|
|
2469
|
+
this.styles = cr;
|
|
2315
2470
|
}
|
|
2316
2471
|
render() {
|
|
2317
2472
|
return C`<slot></slot>`;
|
|
2318
2473
|
}
|
|
2319
2474
|
};
|
|
2320
|
-
M("lintje-grid-item",
|
|
2475
|
+
M("lintje-grid-item", Ir);
|
|
2321
2476
|
//#endregion
|
|
2322
2477
|
//#region src/icons/visible.ts
|
|
2323
|
-
var
|
|
2324
|
-
function
|
|
2325
|
-
return X ||
|
|
2478
|
+
var Lr = "400px", Rr = /* @__PURE__ */ new WeakMap(), X = null, zr = !1;
|
|
2479
|
+
function Br() {
|
|
2480
|
+
return X || zr ? X : typeof IntersectionObserver == "function" ? (X = new IntersectionObserver((e) => {
|
|
2326
2481
|
for (let t of e) {
|
|
2327
2482
|
if (!t.isIntersecting) continue;
|
|
2328
|
-
let e =
|
|
2329
|
-
|
|
2483
|
+
let e = Rr.get(t.target);
|
|
2484
|
+
Hr(t.target), e?.();
|
|
2330
2485
|
}
|
|
2331
|
-
}, { rootMargin:
|
|
2486
|
+
}, { rootMargin: Lr }), X) : (zr = !0, null);
|
|
2332
2487
|
}
|
|
2333
|
-
function
|
|
2334
|
-
let n =
|
|
2335
|
-
n ? (
|
|
2488
|
+
function Vr(e, t) {
|
|
2489
|
+
let n = Br();
|
|
2490
|
+
n ? (Rr.set(e, t), n.observe(e)) : t();
|
|
2336
2491
|
}
|
|
2337
|
-
function
|
|
2338
|
-
|
|
2492
|
+
function Hr(e) {
|
|
2493
|
+
Rr.delete(e), X?.unobserve(e);
|
|
2339
2494
|
}
|
|
2340
2495
|
//#endregion
|
|
2341
2496
|
//#region src/icons/icon/icon.css?inline
|
|
2342
|
-
var
|
|
2497
|
+
var Ur = "/* `<lintje-icon>`'s own box: the host is the flex child; the glyph inside is a plain block. */\n:host {\n display: inline-flex;\n flex: none;\n}\n:host([hidden]) { display: none; }\n.lintje-icon {\n display: block;\n}\n", Wr = Object.keys(Ft), Gr = class extends j {
|
|
2343
2498
|
constructor(...e) {
|
|
2344
2499
|
super(...e), this.size = 16, this.lazy = !1, this.#e = null, this.#t = !1;
|
|
2345
2500
|
}
|
|
2346
2501
|
static {
|
|
2347
|
-
this.styles = [G, A(
|
|
2502
|
+
this.styles = [G, A(Ur)];
|
|
2348
2503
|
}
|
|
2349
2504
|
static {
|
|
2350
2505
|
this.properties = {
|
|
@@ -2358,14 +2513,14 @@ var Dr = "/* `<lintje-icon>`'s own box: the host is the flex child; the glyph in
|
|
|
2358
2513
|
#e;
|
|
2359
2514
|
#t;
|
|
2360
2515
|
connectedCallback() {
|
|
2361
|
-
super.connectedCallback(), this.#e =
|
|
2516
|
+
super.connectedCallback(), this.#e = an((e) => {
|
|
2362
2517
|
(e === void 0 || e === this.name) && this.requestUpdate();
|
|
2363
|
-
}), this.lazy && !this.#t &&
|
|
2518
|
+
}), this.lazy && !this.#t && Vr(this, () => {
|
|
2364
2519
|
this.#t = !0, this.requestUpdate();
|
|
2365
2520
|
});
|
|
2366
2521
|
}
|
|
2367
2522
|
disconnectedCallback() {
|
|
2368
|
-
this.#e?.(), this.#e = null,
|
|
2523
|
+
this.#e?.(), this.#e = null, Hr(this), super.disconnectedCallback();
|
|
2369
2524
|
}
|
|
2370
2525
|
render() {
|
|
2371
2526
|
return K(this.name, {
|
|
@@ -2376,37 +2531,38 @@ var Dr = "/* `<lintje-icon>`'s own box: the host is the flex child; the glyph in
|
|
|
2376
2531
|
});
|
|
2377
2532
|
}
|
|
2378
2533
|
};
|
|
2379
|
-
M("lintje-icon",
|
|
2534
|
+
M("lintje-icon", Gr);
|
|
2380
2535
|
//#endregion
|
|
2381
2536
|
//#region src/core/motion.ts
|
|
2382
|
-
function
|
|
2537
|
+
function Kr(e, t) {
|
|
2383
2538
|
let n = getComputedStyle(e).getPropertyValue(t).trim(), r = parseFloat(n);
|
|
2384
2539
|
return Number.isFinite(r) ? n.endsWith("ms") ? r : n.endsWith("s") ? r * 1e3 : r : 0;
|
|
2385
2540
|
}
|
|
2386
|
-
function
|
|
2541
|
+
function qr(e, t) {
|
|
2542
|
+
let n = getComputedStyle(e).getPropertyValue(t).trim(), r = /^cubic-bezier\(([^)]+)\)$/.exec(n)?.[1].split(",").map(Number);
|
|
2543
|
+
if (!r || r.length !== 4 || r.some((e) => !Number.isFinite(e))) return (e) => e;
|
|
2544
|
+
let [i, a, o, s] = r, c = (e, t, n) => 3 * e * n * (1 - n) ** 2 + 3 * t * n * n * (1 - n) + n ** 3;
|
|
2545
|
+
return (e) => {
|
|
2546
|
+
if (e <= 0 || e >= 1) return Math.min(1, Math.max(0, e));
|
|
2547
|
+
let t = 0, n = 1;
|
|
2548
|
+
for (let r = 0; r < 24; r++) {
|
|
2549
|
+
let r = (t + n) / 2;
|
|
2550
|
+
c(i, o, r) < e ? t = r : n = r;
|
|
2551
|
+
}
|
|
2552
|
+
return c(a, s, (t + n) / 2);
|
|
2553
|
+
};
|
|
2554
|
+
}
|
|
2555
|
+
function Jr() {
|
|
2387
2556
|
return typeof matchMedia < "u" && matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
2388
2557
|
}
|
|
2389
2558
|
//#endregion
|
|
2390
2559
|
//#region src/primitives/progress-bar/progress-bar.css?inline
|
|
2391
|
-
var
|
|
2392
|
-
done: {
|
|
2393
|
-
word: "klaar",
|
|
2394
|
-
icon: "functioneel-cirkel-vinkje"
|
|
2395
|
-
},
|
|
2396
|
-
error: {
|
|
2397
|
-
word: "mislukt",
|
|
2398
|
-
icon: "functioneel-waarschuwing"
|
|
2399
|
-
},
|
|
2400
|
-
paused: {
|
|
2401
|
-
word: "gepauzeerd",
|
|
2402
|
-
icon: "multimedia-player-pauze"
|
|
2403
|
-
}
|
|
2404
|
-
}, Pr = class extends j {
|
|
2560
|
+
var Yr = ":host { display: block; min-width: 0; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-progress { display: flex; flex-direction: column; gap: var(--space-2); min-width: 0; }\n.lintje-progress__head {\n display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between;\n gap: var(--space-1) var(--space-4);\n font: var(--text-small);\n}\n.lintje-progress__label { font-weight: 700; color: var(--color-text-primary); }\n.lintje-progress__detail { color: var(--color-text-muted); }\n.lintje-progress__mark { margin-right: var(--space-1); vertical-align: -0.125em; }\n.lintje-progress--done .lintje-progress__mark { color: var(--color-success-line); }\n.lintje-progress--error .lintje-progress__mark { color: var(--color-error-line); }\n.lintje-progress--paused .lintje-progress__mark { color: var(--color-text-muted); }\n\n/* The accent LINE, not the fill colour, keeps 3:1 on the dark surface. */\n.lintje-progress__track { height: 6px; background: var(--color-border-default); overflow: hidden; }\n.lintje-progress__fill {\n height: 100%;\n background: var(--color-accent-line);\n transition: width var(--dur-base) var(--ease-in-motion);\n}\n\n.lintje-progress--done .lintje-progress__fill { background: var(--color-success); }\n.lintje-progress--error .lintje-progress__fill { background: var(--color-error); }\n.lintje-progress--error .lintje-progress__label { color: var(--color-error-text); }\n.lintje-progress--paused .lintje-progress__fill { background: var(--color-text-muted); }\n\n.lintje-progress__track.is-indeterminate .lintje-progress__fill {\n width: 30%;\n animation: lintje-progress-slide var(--dur-skeleton) linear infinite alternate;\n}\n@keyframes lintje-progress-slide {\n from { margin-left: 0; }\n to { margin-left: 70%; }\n}\n@media (prefers-reduced-motion: reduce) {\n .lintje-progress__fill { transition: none; }\n .lintje-progress__track.is-indeterminate .lintje-progress__fill { animation: none; margin-left: 35%; }\n}\n\n/* Forced colours: the browser drops fills, so the track keeps a CanvasText edge and the fill\n draws as Highlight. */\n@media (forced-colors: active) {\n .lintje-progress__track { outline: 1px solid CanvasText; outline-offset: -1px; }\n .lintje-progress__fill { forced-color-adjust: none; background: Highlight; }\n}\n", Xr = class extends j {
|
|
2405
2561
|
constructor(...e) {
|
|
2406
|
-
super(...e), this.label = "", this.hideLabel = !1, this.
|
|
2562
|
+
super(...e), this.label = "", this.hideLabel = !1, this.state = "busy";
|
|
2407
2563
|
}
|
|
2408
2564
|
static {
|
|
2409
|
-
this.styles = [G, A(
|
|
2565
|
+
this.styles = [G, A(Yr)];
|
|
2410
2566
|
}
|
|
2411
2567
|
static {
|
|
2412
2568
|
this.properties = {
|
|
@@ -2417,7 +2573,7 @@ var Mr = ":host { display: block; min-width: 0; }\n:host([hidden]) { display: no
|
|
|
2417
2573
|
attribute: "hide-label"
|
|
2418
2574
|
},
|
|
2419
2575
|
detail: { type: String },
|
|
2420
|
-
|
|
2576
|
+
state: {
|
|
2421
2577
|
type: String,
|
|
2422
2578
|
reflect: !0
|
|
2423
2579
|
}
|
|
@@ -2429,14 +2585,17 @@ var Mr = ":host { display: block; min-width: 0; }\n:host([hidden]) { display: no
|
|
|
2429
2585
|
get percent() {
|
|
2430
2586
|
return Math.max(0, Math.min(100, this.value ?? 0));
|
|
2431
2587
|
}
|
|
2432
|
-
get
|
|
2433
|
-
return this.
|
|
2588
|
+
get resolvedState() {
|
|
2589
|
+
return this.state === "busy" && this.known && this.percent >= 100 ? "done" : this.state;
|
|
2434
2590
|
}
|
|
2435
2591
|
valueText(e) {
|
|
2436
2592
|
return [this.detail ?? (e && this.known ? `${this.percent}%` : void 0), e?.word].filter(Boolean).join(", ") || void 0;
|
|
2437
2593
|
}
|
|
2438
2594
|
render() {
|
|
2439
|
-
let e = this.
|
|
2595
|
+
let e = this.resolvedState, t = e === "busy" ? void 0 : {
|
|
2596
|
+
word: Nn[e].toLowerCase(),
|
|
2597
|
+
icon: e === "paused" ? "multimedia-player-pauze" : An[Mn[e]]
|
|
2598
|
+
}, n = !this.hideLabel && (this.label || this.detail);
|
|
2440
2599
|
return C`<div class=${q({
|
|
2441
2600
|
"lintje-progress": !0,
|
|
2442
2601
|
[`lintje-progress--${e}`]: !0
|
|
@@ -2470,14 +2629,14 @@ var Mr = ":host { display: block; min-width: 0; }\n:host([hidden]) { display: no
|
|
|
2470
2629
|
</div>`;
|
|
2471
2630
|
}
|
|
2472
2631
|
};
|
|
2473
|
-
M("lintje-progress-bar",
|
|
2632
|
+
M("lintje-progress-bar", Xr);
|
|
2474
2633
|
//#endregion
|
|
2475
2634
|
//#region node_modules/lit-html/directives/repeat.js
|
|
2476
|
-
var
|
|
2635
|
+
var Zr = (e, t, n) => {
|
|
2477
2636
|
let r = /* @__PURE__ */ new Map();
|
|
2478
2637
|
for (let i = t; i <= n; i++) r.set(e[i], i);
|
|
2479
2638
|
return r;
|
|
2480
|
-
},
|
|
2639
|
+
}, Qr = R(class extends z {
|
|
2481
2640
|
constructor(e) {
|
|
2482
2641
|
if (super(e), e.type !== L.CHILD) throw Error("repeat() can only be used in text expressions");
|
|
2483
2642
|
}
|
|
@@ -2495,7 +2654,7 @@ var Fr = (e, t, n) => {
|
|
|
2495
2654
|
return this.dt(e, t, n).values;
|
|
2496
2655
|
}
|
|
2497
2656
|
update(e, [t, n, r]) {
|
|
2498
|
-
let i =
|
|
2657
|
+
let i = Bn(e), { values: a, keys: o } = this.dt(t, n, r);
|
|
2499
2658
|
if (!Array.isArray(i)) return this.ut = o, a;
|
|
2500
2659
|
let s = this.ut ??= [], c = [], l, u, d = 0, f = i.length - 1, p = 0, m = a.length - 1;
|
|
2501
2660
|
for (; d <= f && p <= m;) if (i[d] === null) d++;
|
|
@@ -2504,7 +2663,7 @@ var Fr = (e, t, n) => {
|
|
|
2504
2663
|
else if (s[f] === o[m]) c[m] = Y(i[f], a[m]), f--, m--;
|
|
2505
2664
|
else if (s[d] === o[m]) c[m] = Y(i[d], a[m]), J(e, c[m + 1], i[d]), d++, m--;
|
|
2506
2665
|
else if (s[f] === o[p]) c[p] = Y(i[f], a[p]), J(e, i[d], i[f]), f--, p++;
|
|
2507
|
-
else if (l === void 0 && (l =
|
|
2666
|
+
else if (l === void 0 && (l = Zr(o, p, m), u = Zr(s, d, f)), l.has(s[d])) {
|
|
2508
2667
|
if (l.has(s[f])) {
|
|
2509
2668
|
let t = u.get(o[p]), n = t === void 0 ? null : i[t];
|
|
2510
2669
|
if (n === null) {
|
|
@@ -2512,22 +2671,22 @@ var Fr = (e, t, n) => {
|
|
|
2512
2671
|
Y(t, a[p]), c[p] = t;
|
|
2513
2672
|
} else c[p] = Y(n, a[p]), J(e, i[d], n), i[t] = null;
|
|
2514
2673
|
p++;
|
|
2515
|
-
} else
|
|
2516
|
-
} else
|
|
2674
|
+
} else Vn(i[f]), f--;
|
|
2675
|
+
} else Vn(i[d]), d++;
|
|
2517
2676
|
for (; p <= m;) {
|
|
2518
2677
|
let t = J(e, c[m + 1]);
|
|
2519
2678
|
Y(t, a[p]), c[p++] = t;
|
|
2520
2679
|
}
|
|
2521
2680
|
for (; d <= f;) {
|
|
2522
2681
|
let e = i[d++];
|
|
2523
|
-
e !== null &&
|
|
2682
|
+
e !== null && Vn(e);
|
|
2524
2683
|
}
|
|
2525
|
-
return this.ut = o,
|
|
2684
|
+
return this.ut = o, zn(e, c), w;
|
|
2526
2685
|
}
|
|
2527
|
-
}),
|
|
2686
|
+
}), $r = R(class extends z {
|
|
2528
2687
|
constructor(e) {
|
|
2529
2688
|
if (super(e), e.type !== L.PROPERTY && e.type !== L.ATTRIBUTE && e.type !== L.BOOLEAN_ATTRIBUTE) throw Error("The `live` directive is not allowed on child or event bindings");
|
|
2530
|
-
if (!
|
|
2689
|
+
if (!In(e)) throw Error("`live` bindings can only contain a single expression");
|
|
2531
2690
|
}
|
|
2532
2691
|
render(e) {
|
|
2533
2692
|
return e;
|
|
@@ -2540,53 +2699,53 @@ var Fr = (e, t, n) => {
|
|
|
2540
2699
|
} else if (e.type === L.BOOLEAN_ATTRIBUTE) {
|
|
2541
2700
|
if (!!t === n.hasAttribute(r)) return w;
|
|
2542
2701
|
} else if (e.type === L.ATTRIBUTE && n.getAttribute(r) === t + "") return w;
|
|
2543
|
-
return
|
|
2702
|
+
return zn(e), t;
|
|
2544
2703
|
}
|
|
2545
2704
|
}), Z = (e, t) => {
|
|
2546
2705
|
let n = e._$AN;
|
|
2547
2706
|
if (n === void 0) return !1;
|
|
2548
2707
|
for (let e of n) e._$AO?.(t, !1), Z(e, t);
|
|
2549
2708
|
return !0;
|
|
2550
|
-
},
|
|
2709
|
+
}, ei = (e) => {
|
|
2551
2710
|
let t, n;
|
|
2552
2711
|
do {
|
|
2553
2712
|
if ((t = e._$AM) === void 0) break;
|
|
2554
2713
|
n = t._$AN, n.delete(e), e = t;
|
|
2555
2714
|
} while (n?.size === 0);
|
|
2556
|
-
},
|
|
2715
|
+
}, ti = (e) => {
|
|
2557
2716
|
for (let t; t = e._$AM; e = t) {
|
|
2558
2717
|
let n = t._$AN;
|
|
2559
2718
|
if (n === void 0) t._$AN = n = /* @__PURE__ */ new Set();
|
|
2560
2719
|
else if (n.has(e)) break;
|
|
2561
|
-
n.add(e),
|
|
2720
|
+
n.add(e), ii(t);
|
|
2562
2721
|
}
|
|
2563
2722
|
};
|
|
2564
|
-
function
|
|
2565
|
-
this._$AN === void 0 ? this._$AM = e : (
|
|
2723
|
+
function ni(e) {
|
|
2724
|
+
this._$AN === void 0 ? this._$AM = e : (ei(this), this._$AM = e, ti(this));
|
|
2566
2725
|
}
|
|
2567
|
-
function
|
|
2726
|
+
function ri(e, t = !1, n = 0) {
|
|
2568
2727
|
let r = this._$AH, i = this._$AN;
|
|
2569
2728
|
if (i !== void 0 && i.size !== 0) {
|
|
2570
2729
|
if (t) {
|
|
2571
|
-
if (Array.isArray(r)) for (let e = n; e < r.length; e++) Z(r[e], !1),
|
|
2572
|
-
else r != null && (Z(r, !1),
|
|
2730
|
+
if (Array.isArray(r)) for (let e = n; e < r.length; e++) Z(r[e], !1), ei(r[e]);
|
|
2731
|
+
else r != null && (Z(r, !1), ei(r));
|
|
2573
2732
|
} else Z(this, e);
|
|
2574
2733
|
}
|
|
2575
2734
|
}
|
|
2576
|
-
var
|
|
2577
|
-
e.type == L.CHILD && (e._$AP ??=
|
|
2578
|
-
},
|
|
2735
|
+
var ii = (e) => {
|
|
2736
|
+
e.type == L.CHILD && (e._$AP ??= ri, e._$AQ ??= ni);
|
|
2737
|
+
}, ai = class extends z {
|
|
2579
2738
|
constructor() {
|
|
2580
2739
|
super(...arguments), this._$AN = void 0;
|
|
2581
2740
|
}
|
|
2582
2741
|
_$AT(e, t, n) {
|
|
2583
|
-
super._$AT(e, t, n),
|
|
2742
|
+
super._$AT(e, t, n), ti(this), this.isConnected = e._$AU;
|
|
2584
2743
|
}
|
|
2585
2744
|
_$AO(e, t = !0) {
|
|
2586
|
-
e !== this.isConnected && (this.isConnected = e, e ? this.reconnected?.() : this.disconnected?.()), t && (Z(this, e),
|
|
2745
|
+
e !== this.isConnected && (this.isConnected = e, e ? this.reconnected?.() : this.disconnected?.()), t && (Z(this, e), ei(this));
|
|
2587
2746
|
}
|
|
2588
2747
|
setValue(e) {
|
|
2589
|
-
if (
|
|
2748
|
+
if (In(this._$Ct)) this._$Ct._$AI(e, this);
|
|
2590
2749
|
else {
|
|
2591
2750
|
let t = [...this._$Ct._$AH];
|
|
2592
2751
|
t[this._$Ci] = e, this._$Ct._$AI(t, this, 0);
|
|
@@ -2594,7 +2753,7 @@ var Hr = (e) => {
|
|
|
2594
2753
|
}
|
|
2595
2754
|
disconnected() {}
|
|
2596
2755
|
reconnected() {}
|
|
2597
|
-
},
|
|
2756
|
+
}, oi = /* @__PURE__ */ new WeakMap(), si = R(class extends ai {
|
|
2598
2757
|
render(e) {
|
|
2599
2758
|
return T;
|
|
2600
2759
|
}
|
|
@@ -2605,13 +2764,13 @@ var Hr = (e) => {
|
|
|
2605
2764
|
rt(e) {
|
|
2606
2765
|
if (this.G !== void 0) {
|
|
2607
2766
|
if (this.isConnected || (e = void 0), typeof this.G == "function") {
|
|
2608
|
-
let t = this.ht ?? globalThis, n =
|
|
2609
|
-
n === void 0 && (n = /* @__PURE__ */ new WeakMap(),
|
|
2767
|
+
let t = this.ht ?? globalThis, n = oi.get(t);
|
|
2768
|
+
n === void 0 && (n = /* @__PURE__ */ new WeakMap(), oi.set(t, n)), n.get(this.G) !== void 0 && this.G.call(this.ht, void 0), n.set(this.G, e), e !== void 0 && this.G.call(this.ht, e);
|
|
2610
2769
|
} else this.G.value = e;
|
|
2611
2770
|
}
|
|
2612
2771
|
}
|
|
2613
2772
|
get lt() {
|
|
2614
|
-
return typeof this.G == "function" ?
|
|
2773
|
+
return typeof this.G == "function" ? oi.get(this.ht ?? globalThis)?.get(this.G) : this.G?.value;
|
|
2615
2774
|
}
|
|
2616
2775
|
disconnected() {
|
|
2617
2776
|
this.lt === this.ct && this.rt(void 0);
|
|
@@ -2619,7 +2778,20 @@ var Hr = (e) => {
|
|
|
2619
2778
|
reconnected() {
|
|
2620
2779
|
this.rt(this.ct);
|
|
2621
2780
|
}
|
|
2622
|
-
});
|
|
2781
|
+
}), ci = /* @__PURE__ */ new Set(), li = !1;
|
|
2782
|
+
function ui() {
|
|
2783
|
+
for (let e of ci) e();
|
|
2784
|
+
}
|
|
2785
|
+
function di(e) {
|
|
2786
|
+
return !li && typeof window < "u" && (window.addEventListener("beforeprint", ui), li = !0), ci.add(e), () => ci.delete(e);
|
|
2787
|
+
}
|
|
2788
|
+
var fi = /* @__PURE__ */ new Set(), pi = null;
|
|
2789
|
+
function mi(e) {
|
|
2790
|
+
for (let t of fi) t(e.matches);
|
|
2791
|
+
}
|
|
2792
|
+
function hi(e) {
|
|
2793
|
+
return !pi && typeof matchMedia < "u" && (pi = matchMedia("print"), pi.addEventListener("change", mi)), fi.add(e), () => fi.delete(e);
|
|
2794
|
+
}
|
|
2623
2795
|
//#endregion
|
|
2624
2796
|
//#region src/core/format.ts
|
|
2625
2797
|
function Q(e, t = 0) {
|
|
@@ -2628,37 +2800,37 @@ function Q(e, t = 0) {
|
|
|
2628
2800
|
maximumFractionDigits: t
|
|
2629
2801
|
});
|
|
2630
2802
|
}
|
|
2631
|
-
function
|
|
2803
|
+
function gi(e) {
|
|
2632
2804
|
return Math.abs(e) >= 1e6 ? `${Q(e / 1e6, 1)} mln` : Math.abs(e) >= 1e4 ? `${Math.round(e / 1e3)}k` : Q(e);
|
|
2633
2805
|
}
|
|
2634
|
-
function
|
|
2806
|
+
function _i(e, t) {
|
|
2635
2807
|
let n = Q(e);
|
|
2636
|
-
return
|
|
2808
|
+
return yi(n, t) ? n : gi(e);
|
|
2637
2809
|
}
|
|
2638
|
-
var
|
|
2639
|
-
function
|
|
2640
|
-
return e.length *
|
|
2810
|
+
var vi = 6.5;
|
|
2811
|
+
function yi(e, t) {
|
|
2812
|
+
return e.length * vi <= t;
|
|
2641
2813
|
}
|
|
2642
|
-
var
|
|
2643
|
-
function
|
|
2644
|
-
if (
|
|
2814
|
+
var bi = "'RijksSans', 'Source Sans 3', sans-serif", $;
|
|
2815
|
+
function xi(e, t, n = "") {
|
|
2816
|
+
if (Si(e, n) <= t) return e;
|
|
2645
2817
|
let r = e.length;
|
|
2646
2818
|
for (; r > 1;) {
|
|
2647
2819
|
--r;
|
|
2648
2820
|
let i = `${e.slice(0, r).trimEnd()}…`;
|
|
2649
|
-
if (
|
|
2821
|
+
if (Si(i, n) <= t) return i;
|
|
2650
2822
|
}
|
|
2651
2823
|
return "…";
|
|
2652
2824
|
}
|
|
2653
|
-
function
|
|
2654
|
-
return $ === void 0 && ($ = typeof document > "u" ? null : document.createElement("canvas").getContext("2d") ?? null), $ ? ($.font = `${n} 12px ${t.trim() ||
|
|
2825
|
+
function Si(e, t = "", n = 400) {
|
|
2826
|
+
return $ === void 0 && ($ = typeof document > "u" ? null : document.createElement("canvas").getContext("2d") ?? null), $ ? ($.font = `${n} 12px ${t.trim() || bi}`, $.measureText(e).width) : e.length * vi;
|
|
2655
2827
|
}
|
|
2656
|
-
function
|
|
2828
|
+
function Ci(e, t = 0) {
|
|
2657
2829
|
return `${Q(e, t)}%`;
|
|
2658
2830
|
}
|
|
2659
2831
|
//#endregion
|
|
2660
2832
|
//#region src/tokens/colors.ts
|
|
2661
|
-
var
|
|
2833
|
+
var wi = [
|
|
2662
2834
|
"sky-blue",
|
|
2663
2835
|
"dark-yellow",
|
|
2664
2836
|
"red",
|
|
@@ -2677,11 +2849,11 @@ var ei = [
|
|
|
2677
2849
|
"light-blue",
|
|
2678
2850
|
"moss-green"
|
|
2679
2851
|
];
|
|
2680
|
-
function
|
|
2681
|
-
return typeof e == "string" &&
|
|
2852
|
+
function Ti(e) {
|
|
2853
|
+
return typeof e == "string" && wi.includes(e);
|
|
2682
2854
|
}
|
|
2683
|
-
function
|
|
2855
|
+
function Ei(e) {
|
|
2684
2856
|
return `var(--color-chart-${e})`;
|
|
2685
2857
|
}
|
|
2686
2858
|
//#endregion
|
|
2687
|
-
export {
|
|
2859
|
+
export { Dn as $, Ue as $t, Cr as A, Nt as At, nr as B, ht as Bt, Fr as C, R as Ct, Er as D, Pt as Dt, kr as E, Ft as Et, cr as F, _t as Ft, qn as G, et as Gt, Zn as H, lt as Ht, or as I, dt as It, An as J, j as Jt, Un as K, it as Kt, ar as L, ft as Lt, mr as M, Ct as Mt, hr as N, Mt as Nt, Tr as O, St as Ot, lr as P, gt as Pt, kn as Q, Ve as Qt, ir as R, mt as Rt, Ir as S, Lt as St, Dr as T, L as Tt, Xn as U, st as Ut, $n as V, ct as Vt, Gn as W, ot as Wt, Mn as X, We as Xt, Nn as Y, M as Yt, wn as Z, A as Zt, Kr as _, an as _t, gi as a, e as an, _n as at, Wr as b, B as bt, Ci as c, pn as ct, di as d, mn as dt, T as en, On as et, hi as f, nn as ft, Xr as g, rn as gt, Qr as h, tn as ht, yi as i, o as in, yn as it, br as j, jt, wr as k, kt, Si as l, G as lt, $r as m, cn as mt, Ei as n, C as nn, xn as nt, _i as o, vn as ot, si as p, en as pt, Hn as q, tt as qt, Ti as r, Ce as rn, bn as rt, Q as s, q as st, wi as t, Ie as tn, Cn as tt, xi as u, K as ut, qr as v, sn as vt, Nr as w, z as wt, Gr as x, zt as xt, Jr as y, $t as yt, tr as z, pt as zt };
|