lintje 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist-elements/actions.js +1 -1
- package/dist-elements/chunks/{base-Bg-IFOPG.js → base-DRGvkF-r.js} +484 -309
- package/dist-elements/chunks/{controls-B1455oPG.js → controls-_4ac1Lpz.js} +7 -1
- package/dist-elements/chunks/{date-format-mHtZyBys.js → date-format-DxP9yfDp.js} +1 -1
- package/dist-elements/chunks/dialog-B7aRBtjy.js +28 -0
- package/dist-elements/chunks/{disclosure-BXTX04gM.js → disclosure-D39vAR5q.js} +1 -1
- package/dist-elements/chunks/{disclosure-CMXhX-Vb.js → disclosure-DirPLy2E.js} +6 -6
- package/dist-elements/chunks/download-C68kcwPj.js +206 -0
- package/dist-elements/chunks/{focus-trap-9BnE-xWv.js → focus-trap-Dv8zu64A.js} +1 -1
- package/dist-elements/chunks/input-BGMLam-O.js +195 -0
- package/dist-elements/chunks/input-lQTmOMOz.js +4 -0
- package/dist-elements/chunks/{player-DXOZEyEy.js → player-BApadXr8.js} +27 -27
- package/dist-elements/chunks/{sentence-BI3lwEuT.js → sentence-0wO85ZdJ.js} +3 -3
- package/dist-elements/chunks/{stagger-qGD3wmhg.js → stagger-BB_gcxBI.js} +88 -74
- package/dist-elements/content.js +1 -0
- package/dist-elements/core.js +1 -1
- package/dist-elements/custom-elements.json +8858 -7715
- package/dist-elements/data-types.json +6900 -0
- package/dist-elements/feedback.js +2 -1
- package/dist-elements/frame.js +0 -2
- package/dist-elements/guides/dashboard.md +8 -0
- package/dist-elements/guides/events.md +4 -5
- package/dist-elements/guides/loading.md +10 -9
- package/dist-elements/guides/page-contents.md +110 -0
- package/dist-elements/guides/start.md +12 -0
- package/dist-elements/inputs.js +3 -1
- package/dist-elements/layout.js +1 -1
- package/dist-elements/lintje.js +8562 -7138
- package/dist-elements/overlays.js +2 -2
- package/dist-elements/skills/lintje/SKILL.md +1 -1
- package/dist-elements/tables.js +1 -1
- package/dist-elements/tag/activity-log.js +15 -15
- package/dist-elements/tag/ai-label.js +10 -10
- package/dist-elements/tag/announcement.js +36 -76
- package/dist-elements/tag/app-search.js +49 -49
- package/dist-elements/tag/audio-player.js +57 -57
- package/dist-elements/tag/badge.d.ts +1 -1
- package/dist-elements/tag/badge.js +1 -1
- package/dist-elements/tag/breadcrumbs.js +15 -15
- package/dist-elements/tag/button.d.ts +1 -1
- package/dist-elements/tag/button.js +1 -1
- package/dist-elements/tag/card-list.js +12 -12
- package/dist-elements/tag/card.js +39 -44
- package/dist-elements/tag/chart.js +1357 -787
- package/dist-elements/tag/chat-answer.js +49 -49
- package/dist-elements/tag/chat-composer.js +75 -71
- package/dist-elements/tag/chat-message.js +8 -8
- package/dist-elements/tag/chat-strip.js +22 -22
- package/dist-elements/tag/chat-suggestions.js +12 -12
- package/dist-elements/tag/chat.js +56 -56
- package/dist-elements/tag/checkbox-group.d.ts +1 -0
- package/dist-elements/tag/checkbox-group.js +60 -0
- package/dist-elements/tag/checkbox.js +9 -8
- package/dist-elements/tag/code.js +9 -9
- package/dist-elements/tag/combobox.js +19 -18
- package/dist-elements/tag/conflict-alert.js +12 -12
- package/dist-elements/tag/copy-button.js +14 -14
- package/dist-elements/tag/data-table.js +880 -532
- package/dist-elements/tag/date-input.js +30 -29
- package/dist-elements/tag/date-range.js +39 -38
- package/dist-elements/tag/description-list.js +29 -32
- package/dist-elements/tag/dialog.d.ts +1 -0
- package/dist-elements/tag/dialog.js +144 -0
- package/dist-elements/tag/document-viewer.js +23 -23
- package/dist-elements/tag/drawer.js +28 -32
- package/dist-elements/tag/empty-state.js +19 -30
- package/dist-elements/tag/error-page.d.ts +1 -0
- package/dist-elements/tag/error-page.js +109 -0
- package/dist-elements/tag/error-summary.js +10 -10
- package/dist-elements/tag/expander.js +8 -8
- package/dist-elements/tag/explainer.js +11 -11
- package/dist-elements/tag/field.js +5 -5
- package/dist-elements/tag/file-upload.js +35 -34
- package/dist-elements/tag/filter-bar.js +56 -56
- package/dist-elements/tag/filter-sheet.js +11 -11
- package/dist-elements/tag/filter-zone.js +31 -31
- package/dist-elements/tag/find.d.ts +1 -0
- package/dist-elements/tag/find.js +128 -0
- package/dist-elements/tag/footer.js +21 -21
- package/dist-elements/tag/form-actions.js +29 -25
- package/dist-elements/tag/form-section.js +6 -6
- package/dist-elements/tag/form.js +12 -12
- package/dist-elements/tag/gallery.js +14 -14
- package/dist-elements/tag/grid-item.d.ts +1 -1
- package/dist-elements/tag/grid-item.js +1 -1
- package/dist-elements/tag/grid.d.ts +1 -1
- package/dist-elements/tag/grid.js +1 -1
- package/dist-elements/tag/hero.js +12 -12
- package/dist-elements/tag/highlight.js +5 -5
- package/dist-elements/tag/icon-button.d.ts +1 -1
- package/dist-elements/tag/icon-button.js +1 -1
- package/dist-elements/tag/icon.d.ts +1 -1
- package/dist-elements/tag/icon.js +1 -1
- package/dist-elements/tag/job-list.js +22 -44
- package/dist-elements/tag/kpi-row.js +12 -10
- package/dist-elements/tag/kpi.js +149 -140
- package/dist-elements/tag/level-meter.js +11 -11
- package/dist-elements/tag/list.js +55 -55
- package/dist-elements/tag/logo.js +30 -30
- package/dist-elements/tag/map.js +702 -671
- package/dist-elements/tag/menu-button.js +70 -69
- package/dist-elements/tag/modal.js +28 -37
- package/dist-elements/tag/multiselect.js +35 -34
- package/dist-elements/tag/note.js +5 -5
- package/dist-elements/tag/notifications.js +36 -36
- package/dist-elements/tag/number-input.js +13 -12
- package/dist-elements/tag/page-header.js +140 -37
- package/dist-elements/tag/pagination.js +54 -49
- package/dist-elements/tag/popover.d.ts +1 -1
- package/dist-elements/tag/popover.js +1 -1
- package/dist-elements/tag/progress-bar.d.ts +1 -1
- package/dist-elements/tag/progress-bar.js +1 -1
- package/dist-elements/tag/prose.js +6 -6
- package/dist-elements/tag/qr-code.js +7 -7
- package/dist-elements/tag/radio-group.js +13 -12
- package/dist-elements/tag/range.js +23 -22
- package/dist-elements/tag/recording-status.js +14 -14
- package/dist-elements/tag/repeater.js +10 -10
- package/dist-elements/tag/segmented.js +14 -13
- package/dist-elements/tag/select.js +11 -10
- package/dist-elements/tag/shell.js +356 -339
- package/dist-elements/tag/skeleton.d.ts +1 -1
- package/dist-elements/tag/skeleton.js +1 -1
- package/dist-elements/tag/slot-picker.js +16 -15
- package/dist-elements/tag/sortable-list.js +14 -14
- package/dist-elements/tag/spinner.d.ts +1 -1
- package/dist-elements/tag/spinner.js +1 -1
- package/dist-elements/tag/split-pane.js +12 -12
- package/dist-elements/tag/status-dot.d.ts +1 -1
- package/dist-elements/tag/status-dot.js +1 -1
- package/dist-elements/tag/stepper.js +21 -21
- package/dist-elements/tag/streaming-text.js +13 -13
- package/dist-elements/tag/sub-nav.js +39 -38
- package/dist-elements/tag/tabs.js +38 -38
- package/dist-elements/tag/tag-input.js +20 -19
- package/dist-elements/tag/text-editor.js +25 -24
- package/dist-elements/tag/text-input.js +15 -14
- package/dist-elements/tag/textarea.js +15 -14
- package/dist-elements/tag/tile.d.ts +1 -1
- package/dist-elements/tag/tile.js +1 -1
- package/dist-elements/tag/time-input.js +20 -19
- package/dist-elements/tag/toast.js +32 -23
- package/dist-elements/tag/toggle.js +9 -8
- package/dist-elements/tag/toggletip.js +27 -27
- package/dist-elements/tag/token-value.d.ts +1 -0
- package/dist-elements/tag/token-value.js +75 -0
- package/dist-elements/tag/tooltip.d.ts +1 -1
- package/dist-elements/tag/tooltip.js +1 -1
- package/dist-elements/tag/transcript.js +48 -48
- package/dist-elements/tag/translator.js +13 -13
- package/dist-elements/tag/tree-view.js +13 -13
- package/dist-elements/tag/user-menu.js +37 -37
- package/dist-elements/tag/video-player.js +21 -21
- package/dist-elements/tokens.css +120 -96
- package/dist-elements/tokens.json +1244 -0
- package/dist-elements/types/bundle/actions.d.ts +3 -3
- package/dist-elements/types/bundle/content.d.ts +1 -0
- package/dist-elements/types/bundle/feedback.d.ts +6 -5
- package/dist-elements/types/bundle/frame.d.ts +0 -2
- package/dist-elements/types/bundle/index.d.ts +0 -10
- package/dist-elements/types/bundle/inputs.d.ts +2 -0
- package/dist-elements/types/bundle/layout.d.ts +3 -3
- package/dist-elements/types/bundle/overlays.d.ts +3 -3
- package/dist-elements/types/categories.d.ts +4 -0
- package/dist-elements/types/{primitives → components/actions}/button/button.d.ts +13 -10
- package/dist-elements/types/components/actions/copy-button/copy-button.d.ts +8 -9
- package/dist-elements/types/{icons → components/actions}/icon/icon.d.ts +4 -5
- package/dist-elements/types/{primitives → components/actions}/icon-button/icon-button.d.ts +8 -6
- package/dist-elements/types/components/actions/menu-button/menu-button.d.ts +16 -18
- package/dist-elements/types/components/actions/qr-code/qr-code.d.ts +10 -10
- package/dist-elements/types/components/charts/chart/chart.d.ts +6 -5
- package/dist-elements/types/components/charts/explainer/explainer.d.ts +1 -1
- package/dist-elements/types/components/charts/kpi/kpi.d.ts +19 -11
- package/dist-elements/types/components/charts/kpi-row/kpi-row.d.ts +2 -8
- package/dist-elements/types/components/charts/note/note.d.ts +2 -2
- package/dist-elements/types/components/chat/chat/chat.d.ts +9 -11
- package/dist-elements/types/components/chat/chat-answer/chat-answer.d.ts +10 -11
- package/dist-elements/types/components/chat/chat-composer/chat-composer.d.ts +10 -12
- package/dist-elements/types/components/chat/chat-message/chat-message.d.ts +7 -8
- package/dist-elements/types/components/chat/chat-strip/chat-strip.d.ts +5 -5
- package/dist-elements/types/components/chat/chat-suggestions/chat-suggestions.d.ts +9 -10
- package/dist-elements/types/components/content/audio-player/audio-player.d.ts +15 -17
- package/dist-elements/types/components/content/code/code.d.ts +3 -4
- package/dist-elements/types/components/content/document-viewer/document-viewer.d.ts +10 -11
- package/dist-elements/types/components/content/gallery/gallery.d.ts +5 -4
- package/dist-elements/types/components/content/highlight/highlight.d.ts +5 -4
- package/dist-elements/types/components/content/prose/prose.d.ts +3 -4
- package/dist-elements/types/components/content/token-value/token-value.d.ts +42 -0
- package/dist-elements/types/components/content/transcript/transcript.d.ts +15 -28
- package/dist-elements/types/components/content/translator/translator.d.ts +12 -16
- package/dist-elements/types/components/content/video-player/video-player.d.ts +12 -14
- package/dist-elements/types/components/feedback/ai-label/ai-label.d.ts +3 -4
- package/dist-elements/types/components/feedback/announcement/announcement.d.ts +5 -9
- package/dist-elements/types/{primitives → components/feedback}/badge/badge.d.ts +10 -6
- package/dist-elements/types/components/feedback/conflict-alert/conflict-alert.d.ts +4 -5
- package/dist-elements/types/components/feedback/empty-state/empty-state.d.ts +5 -8
- package/dist-elements/types/components/feedback/error-page/error-page.d.ts +52 -0
- package/dist-elements/types/components/feedback/job-list/job-list.d.ts +9 -12
- package/dist-elements/types/components/feedback/level-meter/level-meter.d.ts +4 -6
- package/dist-elements/types/{primitives → components/feedback}/progress-bar/progress-bar.d.ts +9 -7
- package/dist-elements/types/components/feedback/recording-status/recording-status.d.ts +5 -6
- package/dist-elements/types/{primitives → components/feedback}/skeleton/skeleton.d.ts +2 -2
- package/dist-elements/types/{primitives → components/feedback}/spinner/spinner.d.ts +2 -3
- package/dist-elements/types/{primitives → components/feedback}/status-dot/status-dot.d.ts +5 -6
- package/dist-elements/types/components/feedback/streaming-text/streaming-text.d.ts +12 -9
- package/dist-elements/types/components/feedback/toast/toast.d.ts +8 -9
- package/dist-elements/types/components/filters/filter-bar/filter-bar.d.ts +9 -4
- package/dist-elements/types/components/filters/filter-sheet/filter-sheet.d.ts +7 -7
- package/dist-elements/types/components/filters/filter-zone/filter-zone.d.ts +4 -4
- package/dist-elements/types/components/forms/error-summary/error-summary.d.ts +6 -7
- package/dist-elements/types/components/forms/form/form.d.ts +5 -5
- package/dist-elements/types/components/forms/form-actions/form-actions.d.ts +10 -8
- package/dist-elements/types/components/forms/form-section/form-section.d.ts +6 -5
- package/dist-elements/types/components/forms/repeater/repeater.d.ts +15 -9
- package/dist-elements/types/components/forms/stepper/stepper.d.ts +6 -5
- package/dist-elements/types/components/frame/app-search/app-search.d.ts +7 -8
- package/dist-elements/types/components/frame/breadcrumbs/breadcrumbs.d.ts +2 -2
- package/dist-elements/types/components/frame/footer/footer.d.ts +3 -2
- package/dist-elements/types/components/frame/hero/hero.d.ts +7 -9
- package/dist-elements/types/components/frame/notifications/notifications.d.ts +7 -11
- package/dist-elements/types/components/frame/page-header/page-header.d.ts +13 -16
- package/dist-elements/types/components/frame/shell/shell.d.ts +15 -14
- package/dist-elements/types/components/frame/sub-nav/sub-nav.d.ts +10 -6
- package/dist-elements/types/components/frame/user-menu/user-menu.d.ts +13 -12
- package/dist-elements/types/components/index.d.ts +51 -12
- package/dist-elements/types/components/inputs/checkbox/checkbox.d.ts +4 -4
- package/dist-elements/types/components/inputs/checkbox-group/checkbox-group.d.ts +33 -0
- package/dist-elements/types/components/inputs/combobox/combobox.d.ts +14 -8
- package/dist-elements/types/components/inputs/date-input/date-input.d.ts +6 -6
- package/dist-elements/types/components/inputs/date-range/date-range.d.ts +13 -8
- package/dist-elements/types/components/inputs/field/field.d.ts +5 -3
- package/dist-elements/types/components/inputs/file-upload/file-upload.d.ts +8 -10
- package/dist-elements/types/components/inputs/find/find.d.ts +51 -0
- package/dist-elements/types/components/inputs/multiselect/multiselect.d.ts +4 -6
- package/dist-elements/types/components/inputs/number-input/number-input.d.ts +8 -7
- package/dist-elements/types/components/inputs/radio-group/radio-group.d.ts +2 -4
- package/dist-elements/types/components/inputs/range/range.d.ts +5 -6
- package/dist-elements/types/components/inputs/segmented/segmented.d.ts +7 -4
- package/dist-elements/types/components/inputs/select/select.d.ts +6 -3
- package/dist-elements/types/components/inputs/shared/input.d.ts +1 -1
- package/dist-elements/types/components/inputs/slot-picker/slot-picker.d.ts +6 -5
- package/dist-elements/types/components/inputs/tag-input/tag-input.d.ts +8 -6
- package/dist-elements/types/components/inputs/text-editor/text-editor.d.ts +8 -8
- package/dist-elements/types/components/inputs/text-input/text-input.d.ts +12 -7
- package/dist-elements/types/components/inputs/textarea/textarea.d.ts +12 -11
- package/dist-elements/types/components/inputs/time-input/time-input.d.ts +8 -9
- package/dist-elements/types/components/inputs/toggle/toggle.d.ts +3 -1
- package/dist-elements/types/components/layout/expander/expander.d.ts +10 -11
- package/dist-elements/types/{primitives → components/layout}/grid/grid.d.ts +4 -4
- package/dist-elements/types/{primitives → components/layout}/grid-item/grid-item.d.ts +2 -2
- package/dist-elements/types/components/layout/split-pane/split-pane.d.ts +6 -6
- package/dist-elements/types/components/layout/tabs/tabs.d.ts +12 -10
- package/dist-elements/types/{primitives → components/layout}/tile/tile.d.ts +22 -10
- package/dist-elements/types/components/map/map/map.d.ts +12 -11
- package/dist-elements/types/components/overlays/dialog/dialog.d.ts +49 -0
- package/dist-elements/types/components/overlays/drawer/drawer.d.ts +6 -5
- package/dist-elements/types/components/overlays/modal/modal.d.ts +9 -14
- package/dist-elements/types/{primitives → components/overlays}/popover/popover.d.ts +7 -6
- package/dist-elements/types/components/overlays/toggletip/toggletip.d.ts +4 -8
- package/dist-elements/types/{primitives → components/overlays}/tooltip/tooltip.d.ts +8 -8
- package/dist-elements/types/components/shared/announcement-block.d.ts +38 -0
- package/dist-elements/types/components/shared/charts/index.d.ts +5 -1
- package/dist-elements/types/components/shared/charts/kinds.d.ts +92 -0
- package/dist-elements/types/components/shared/charts/line-chart/line-chart.d.ts +2 -2
- package/dist-elements/types/components/shared/charts/map-chart/leaflet.d.ts +5 -0
- package/dist-elements/types/components/shared/charts/map-chart/map-chart.d.ts +1 -1
- package/dist-elements/types/components/shared/charts/radar-chart/radar-chart.d.ts +31 -0
- package/dist-elements/types/components/shared/charts/shared/axes.d.ts +3 -1
- package/dist-elements/types/components/shared/charts/shared/chart-states.d.ts +8 -19
- package/dist-elements/types/components/shared/charts/shared/controller.d.ts +12 -0
- package/dist-elements/types/components/shared/charts/shared/types.d.ts +62 -0
- package/dist-elements/types/components/shared/charts/stacked-area-chart/stacked-area-chart.d.ts +13 -0
- package/dist-elements/types/components/shared/content-tile.d.ts +1 -1
- package/dist-elements/types/components/{forms/form → shared}/controls.d.ts +3 -2
- package/dist-elements/types/components/shared/dialog.d.ts +9 -0
- package/dist-elements/types/components/shared/empty-state-block.d.ts +26 -0
- package/dist-elements/types/components/shared/overflow.d.ts +58 -0
- package/dist-elements/types/components/shared/tone.d.ts +18 -0
- package/dist-elements/types/components/tables/activity-log/activity-log.d.ts +3 -4
- package/dist-elements/types/components/tables/card/card.d.ts +17 -23
- package/dist-elements/types/components/tables/card-list/card-list.d.ts +9 -11
- package/dist-elements/types/components/tables/data-table/actions.d.ts +1 -1
- package/dist-elements/types/components/tables/data-table/data-table.d.ts +88 -19
- package/dist-elements/types/components/tables/data-table/editing.d.ts +1 -1
- package/dist-elements/types/components/tables/data-table/filters.d.ts +15 -6
- package/dist-elements/types/components/tables/description-list/description-list.d.ts +13 -12
- package/dist-elements/types/components/tables/list/list.d.ts +13 -24
- package/dist-elements/types/components/tables/pagination/pagination.d.ts +12 -11
- package/dist-elements/types/components/tables/sortable-list/sortable-list.d.ts +5 -6
- package/dist-elements/types/components/tables/tree-view/tree-view.d.ts +5 -5
- package/dist-elements/types/core/focus.d.ts +1 -1
- package/dist-elements/types/core/media.d.ts +2 -2
- package/dist-elements/types/core/motion.d.ts +5 -0
- package/dist-elements/types/core/print.d.ts +15 -0
- package/dist-elements/types/core/shortcuts.d.ts +2 -2
- package/dist-elements/types/icons/register.d.ts +1 -1
- package/dist-elements/types/types.d.ts +70 -10
- package/dist-icons/functioneel-kolommen.svg +1 -0
- package/dist-icons/functioneel-trechter.svg +1 -0
- package/package.json +1 -1
- package/dist-elements/chunks/confirm-dialog-D5EVGuil.js +0 -4
- package/dist-elements/chunks/download-y528pIHP.js +0 -230
- package/dist-elements/chunks/input-BtuNFSWk.js +0 -195
- package/dist-elements/tag/confirm-dialog.d.ts +0 -1
- package/dist-elements/tag/confirm-dialog.js +0 -118
- package/dist-elements/tag/session-expiry.d.ts +0 -1
- package/dist-elements/tag/session-expiry.js +0 -184
- package/dist-elements/tag/shortcuts.d.ts +0 -1
- package/dist-elements/tag/shortcuts.js +0 -104
- package/dist-elements/types/components/frame/session-expiry/session-expiry.d.ts +0 -55
- package/dist-elements/types/components/frame/shortcuts/shortcuts.d.ts +0 -41
- package/dist-elements/types/components/overlays/confirm-dialog/confirm-dialog.d.ts +0 -41
- package/dist-elements/types/primitives/index.d.ts +0 -33
- /package/dist-elements/types/components/content/{audio-player → shared}/playback.d.ts +0 -0
- /package/dist-elements/types/components/content/{audio-player → shared}/player.d.ts +0 -0
- /package/dist-elements/types/components/{inputs/date-input → shared}/date-format.d.ts +0 -0
- /package/dist-elements/types/{primitives → components}/shared/grid-item-element.d.ts +0 -0
- /package/dist-elements/types/{primitives → components}/shared/length.d.ts +0 -0
- /package/dist-elements/types/{primitives → components}/shared/place.d.ts +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { $ as e,
|
|
1
|
+
import { $ as e, Gt as t, H as n, Ht as r, I as i, Jt as a, Kt as o, Lt as s, Pt as c, Q as l, Ut as u, Yt as ee, Z as d, Zt as f, at as p, en as m, lt as te, nn as h, ot as g, qt as ne, st as _, ut as v } from "../chunks/base-DRGvkF-r.js";
|
|
2
2
|
import "./logo.js";
|
|
3
|
-
import { n as y, r as re, t as b } from "../chunks/focus-trap-
|
|
3
|
+
import { n as y, r as re, t as b } from "../chunks/focus-trap-Dv8zu64A.js";
|
|
4
4
|
import "./toast.js";
|
|
5
5
|
import "./qr-code.js";
|
|
6
6
|
import { t as ie } from "../chunks/dialog-close-u75fVEw4.js";
|
|
@@ -14,86 +14,86 @@ var x = {
|
|
|
14
14
|
phone: 40
|
|
15
15
|
};
|
|
16
16
|
function oe(e) {
|
|
17
|
-
let { logo: t, emblem:
|
|
17
|
+
let { logo: t, emblem: r, ribbon: i, environment: a, home: o } = e, s = h`<lintje-logo
|
|
18
18
|
full
|
|
19
19
|
width=${i}
|
|
20
|
-
src=${t ??
|
|
21
|
-
name=${
|
|
22
|
-
alt=${
|
|
23
|
-
byline=${
|
|
20
|
+
src=${t ?? m}
|
|
21
|
+
name=${r?.name ?? m}
|
|
22
|
+
alt=${r?.label ?? m}
|
|
23
|
+
byline=${r?.byline ?? m}
|
|
24
24
|
></lintje-logo>`;
|
|
25
|
-
return
|
|
26
|
-
${
|
|
25
|
+
return h`<div class="lintje-logobar">
|
|
26
|
+
${o ? h`<a
|
|
27
27
|
class="lintje-logobar__home focus-inset"
|
|
28
|
-
href=${
|
|
28
|
+
href=${o.href}
|
|
29
29
|
aria-label="Naar de startpagina"
|
|
30
30
|
title="Naar de startpagina"
|
|
31
31
|
@click=${(e) => {
|
|
32
|
-
|
|
32
|
+
n(e) && o.onNavigate(e);
|
|
33
33
|
}}
|
|
34
|
-
>${
|
|
35
|
-
>` :
|
|
36
|
-
${a ?
|
|
34
|
+
>${s}</a
|
|
35
|
+
>` : s}
|
|
36
|
+
${a ? h`<p class="lintje-logobar__environment" title=${a}>
|
|
37
37
|
<span class="lintje-logobar__environment-label">${a}</span>
|
|
38
38
|
<span class="lintje-logobar__environment-short" aria-hidden="true"
|
|
39
39
|
>${a.slice(0, 3)}</span
|
|
40
40
|
>
|
|
41
|
-
</p>` :
|
|
41
|
+
</p>` : m}
|
|
42
42
|
</div>`;
|
|
43
43
|
}
|
|
44
44
|
var S = (e) => !!e.href && !e.noAccess;
|
|
45
45
|
function C(e) {
|
|
46
|
-
return
|
|
46
|
+
return h`<span class="visually-hidden"
|
|
47
47
|
>${e.noAccess ? ", geen toegang" : ", niet beschikbaar"}</span
|
|
48
48
|
>`;
|
|
49
49
|
}
|
|
50
|
-
function w(e, t,
|
|
51
|
-
|
|
50
|
+
function w(e, t, r) {
|
|
51
|
+
n(r) && (e.onOpen(null), e.onNavigate(t, r));
|
|
52
52
|
}
|
|
53
53
|
function se(e) {
|
|
54
54
|
let t = e.badge;
|
|
55
|
-
return t ?
|
|
55
|
+
return t ? g({
|
|
56
56
|
value: t.value,
|
|
57
57
|
variant: t.tone === "new" ? "label" : t.tone === "action" ? "unread" : "count",
|
|
58
58
|
label: t.label,
|
|
59
59
|
className: "lintje-navbar__badge"
|
|
60
|
-
}) :
|
|
60
|
+
}) : m;
|
|
61
61
|
}
|
|
62
62
|
function ce(e, t) {
|
|
63
|
-
if (!S(t)) return
|
|
63
|
+
if (!S(t)) return h`<span class="lintje-navbar__entry is-unavailable" aria-disabled="true"
|
|
64
64
|
>${t.label}${C(t)}</span
|
|
65
65
|
>`;
|
|
66
66
|
let n = !!t.active;
|
|
67
|
-
return
|
|
68
|
-
class=${
|
|
67
|
+
return h`<a
|
|
68
|
+
class=${_({
|
|
69
69
|
"lintje-navbar__entry": !0,
|
|
70
70
|
"focus-inset": !0,
|
|
71
71
|
"is-active": n
|
|
72
72
|
})}
|
|
73
73
|
href=${t.href}
|
|
74
|
-
aria-current=${n ? "page" :
|
|
74
|
+
aria-current=${n ? "page" : m}
|
|
75
75
|
@click=${(n) => w(e, t, n)}
|
|
76
76
|
><span class="lintje-navbar__label">${t.label}</span></a
|
|
77
77
|
>`;
|
|
78
78
|
}
|
|
79
79
|
function le(e, t) {
|
|
80
|
-
let n =
|
|
80
|
+
let n = h`${v(t.icon, {
|
|
81
81
|
size: 20,
|
|
82
82
|
src: t.iconSrc
|
|
83
83
|
})}
|
|
84
84
|
<span class="lintje-navbar__page-text">
|
|
85
85
|
<span class="lintje-navbar__label">${t.label}</span>
|
|
86
|
-
${t.metric ?
|
|
86
|
+
${t.metric ? h`<span class="lintje-navbar__metric"
|
|
87
87
|
><span class="lintje-navbar__metric-value">${t.metric.value}</span> ${t.metric.label}</span
|
|
88
|
-
>` :
|
|
88
|
+
>` : m}
|
|
89
89
|
</span>
|
|
90
|
-
${t.noAccess ?
|
|
90
|
+
${t.noAccess ? v("gebruiksvoorwerpen-hangslot-dicht", {
|
|
91
91
|
size: 16,
|
|
92
92
|
label: "Geen toegang"
|
|
93
|
-
}) : S(t) ?
|
|
93
|
+
}) : S(t) ? m : C(t)}
|
|
94
94
|
${se(t)}`;
|
|
95
|
-
if (!S(t)) return
|
|
96
|
-
class=${
|
|
95
|
+
if (!S(t)) return h`<span
|
|
96
|
+
class=${_({
|
|
97
97
|
"lintje-navbar__page": !0,
|
|
98
98
|
"is-unavailable": !0,
|
|
99
99
|
"is-no-access": !!t.noAccess
|
|
@@ -101,51 +101,51 @@ function le(e, t) {
|
|
|
101
101
|
aria-disabled="true"
|
|
102
102
|
>${n}</span
|
|
103
103
|
>`;
|
|
104
|
-
let
|
|
105
|
-
return
|
|
106
|
-
class=${
|
|
104
|
+
let r = !!t.active;
|
|
105
|
+
return h`<a
|
|
106
|
+
class=${_({
|
|
107
107
|
"lintje-navbar__page": !0,
|
|
108
|
-
"is-active":
|
|
108
|
+
"is-active": r
|
|
109
109
|
})}
|
|
110
110
|
href=${t.href}
|
|
111
|
-
aria-current=${
|
|
111
|
+
aria-current=${r ? "page" : m}
|
|
112
112
|
@click=${(n) => w(e, t, n)}
|
|
113
113
|
>${n}</a
|
|
114
114
|
>`;
|
|
115
115
|
}
|
|
116
|
-
function T(e, t, n, i, a, o
|
|
117
|
-
let
|
|
118
|
-
return
|
|
116
|
+
function T(e, t, n, r, i, a, o = {}) {
|
|
117
|
+
let s = e.open === t, c = t === -1, l = `${n}-entry`;
|
|
118
|
+
return h`<div class="lintje-navbar__group">
|
|
119
119
|
<button
|
|
120
120
|
type="button"
|
|
121
|
-
id=${
|
|
122
|
-
class=${
|
|
121
|
+
id=${l}
|
|
122
|
+
class=${_({
|
|
123
123
|
"lintje-navbar__entry": !0,
|
|
124
124
|
"lintje-navbar__entry--group": !0,
|
|
125
125
|
"focus-inset": !0,
|
|
126
|
-
"is-active":
|
|
127
|
-
"is-open":
|
|
128
|
-
...
|
|
126
|
+
"is-active": i,
|
|
127
|
+
"is-open": s,
|
|
128
|
+
...o
|
|
129
129
|
})}
|
|
130
|
-
aria-expanded=${String(
|
|
130
|
+
aria-expanded=${String(s)}
|
|
131
131
|
aria-controls=${n}
|
|
132
132
|
@click=${(n) => {
|
|
133
|
-
e.onOpen(
|
|
133
|
+
e.onOpen(s && (c || n.detail === 0) ? null : t);
|
|
134
134
|
}}
|
|
135
|
-
@mouseenter=${
|
|
135
|
+
@mouseenter=${c ? m : () => e.onOpen(t)}
|
|
136
136
|
>
|
|
137
|
-
${
|
|
138
|
-
${
|
|
137
|
+
${c ? s ? h`<span class="lintje-navbar__label">Sluiten</span>${v("functioneel-kruis", { size: 16 })}` : h`${v("functioneel-menu", { size: 16 })}<span class="lintje-navbar__label">${r}</span>` : h`<span class="lintje-navbar__label">${r}</span>
|
|
138
|
+
${v("functioneel-delta-omlaag", {
|
|
139
139
|
size: 16,
|
|
140
|
-
rotate:
|
|
140
|
+
rotate: s ? 180 : void 0
|
|
141
141
|
})}`}
|
|
142
142
|
</button>
|
|
143
|
-
${
|
|
143
|
+
${s ? h`<div id=${n} class="lintje-navbar__submenu">${a(l)}</div>` : m}
|
|
144
144
|
</div>`;
|
|
145
145
|
}
|
|
146
146
|
function E(e, t, n) {
|
|
147
|
-
return
|
|
148
|
-
${t.map((t) =>
|
|
147
|
+
return h`<ul class="lintje-navbar__pages" aria-labelledby=${n}>
|
|
148
|
+
${t.map((t) => h`<li class="lintje-navbar__item">${le(e, t)}</li>`)}
|
|
149
149
|
</ul>`;
|
|
150
150
|
}
|
|
151
151
|
var ue = (e) => e.some((e) => S(e) && !!e.active);
|
|
@@ -154,49 +154,49 @@ function de(e, t, n) {
|
|
|
154
154
|
}
|
|
155
155
|
function fe(e) {
|
|
156
156
|
let t = `${e.id}-menu`, n = e.groups.filter((e) => !e.heading).flatMap((e) => e.items);
|
|
157
|
-
return T(e, -1, t, "Menu", !1, (
|
|
158
|
-
${e.groups.map((n,
|
|
159
|
-
if (!n.heading) return
|
|
160
|
-
let
|
|
161
|
-
return
|
|
162
|
-
${E(e, n.items,
|
|
157
|
+
return T(e, -1, t, "Menu", !1, (r) => h`${n.length ? E(e, n, r) : m}
|
|
158
|
+
${e.groups.map((n, r) => {
|
|
159
|
+
if (!n.heading) return m;
|
|
160
|
+
let i = `${t}-heading-${r}`;
|
|
161
|
+
return h`<p id=${i} class="lintje-navbar__heading">${n.heading}</p>
|
|
162
|
+
${E(e, n.items, i)}`;
|
|
163
163
|
})}`, { "lintje-navbar__entry--menu": !0 });
|
|
164
164
|
}
|
|
165
165
|
function pe(e) {
|
|
166
166
|
let t = !!e.collapsed;
|
|
167
|
-
return
|
|
167
|
+
return h`<div class="lintje-navbar" @mouseleave=${() => {
|
|
168
168
|
e.open !== -1 && e.onOpen(null);
|
|
169
169
|
}}>
|
|
170
170
|
<div class="lintje-navbar__start">
|
|
171
|
-
${e.start ??
|
|
171
|
+
${e.start ?? m}
|
|
172
172
|
<nav class="lintje-navbar__entries" aria-label="Hoofdnavigatie">
|
|
173
173
|
<div
|
|
174
|
-
class=${
|
|
174
|
+
class=${_({
|
|
175
175
|
"lintje-navbar__list": !0,
|
|
176
176
|
"is-hidden": t
|
|
177
177
|
})}
|
|
178
178
|
?inert=${t}
|
|
179
|
-
aria-hidden=${t ? "true" :
|
|
179
|
+
aria-hidden=${t ? "true" : m}
|
|
180
180
|
>
|
|
181
181
|
${e.groups.map((t, n) => t.heading ? de(e, t, n) : t.items.map((t) => ce(e, t)))}
|
|
182
182
|
</div>
|
|
183
|
-
${t ? fe(e) :
|
|
183
|
+
${t ? fe(e) : m}
|
|
184
184
|
</nav>
|
|
185
185
|
</div>
|
|
186
|
-
${e.end ?
|
|
186
|
+
${e.end ? h`<div class="lintje-navbar__end">${e.end}</div>` : m}
|
|
187
187
|
</div>`;
|
|
188
188
|
}
|
|
189
189
|
var me = class {
|
|
190
190
|
#e;
|
|
191
191
|
#t;
|
|
192
192
|
#n;
|
|
193
|
-
constructor(
|
|
194
|
-
this.host =
|
|
195
|
-
if (
|
|
196
|
-
let
|
|
197
|
-
if (
|
|
198
|
-
let
|
|
199
|
-
this.host.openGroup = null,
|
|
193
|
+
constructor(n) {
|
|
194
|
+
this.host = n, this.collapsed = !1, this.#t = null, this.#n = [], this.#i = (t) => {
|
|
195
|
+
if (t.key !== "Escape" || this.host.openGroup === null) return;
|
|
196
|
+
let n = this.#r;
|
|
197
|
+
if (n && !e(n)) return;
|
|
198
|
+
let r = this.host.renderRoot.querySelector(".lintje-navbar__entry[aria-expanded=\"true\"]"), i = r?.parentElement, a = i ? l(i) : !1;
|
|
199
|
+
this.host.openGroup = null, a && r?.focus();
|
|
200
200
|
}, this.#a = (e) => {
|
|
201
201
|
if (this.host.openGroup === null) return;
|
|
202
202
|
let t = this.#r;
|
|
@@ -205,7 +205,7 @@ var me = class {
|
|
|
205
205
|
if (this.host.openGroup === null) return;
|
|
206
206
|
let t = e.relatedTarget, n = this.#r;
|
|
207
207
|
t && n && !n.contains(t) && (this.host.openGroup = null);
|
|
208
|
-
},
|
|
208
|
+
}, n.addController(this), this.#e = new o(n, t);
|
|
209
209
|
}
|
|
210
210
|
get #r() {
|
|
211
211
|
return this.host.renderRoot.querySelector(".lintje-navbar");
|
|
@@ -248,14 +248,14 @@ var me = class {
|
|
|
248
248
|
}
|
|
249
249
|
};
|
|
250
250
|
function he(e) {
|
|
251
|
-
return e ?
|
|
251
|
+
return e ? h`<div class="lintje-header-scrim" aria-hidden="true"></div>` : m;
|
|
252
252
|
}
|
|
253
253
|
//#endregion
|
|
254
254
|
//#region src/components/frame/shell/navigation.ts
|
|
255
255
|
var D = "Menu vastzetten";
|
|
256
256
|
function ge(e) {
|
|
257
|
-
let t =
|
|
258
|
-
return t ===
|
|
257
|
+
let t = v(e ? "functioneel-punaise" : "functioneel-punaise-outline", { size: 16 });
|
|
258
|
+
return t === m ? {
|
|
259
259
|
content: "Vastzetten",
|
|
260
260
|
asText: !0
|
|
261
261
|
} : {
|
|
@@ -270,7 +270,7 @@ function O(e, t) {
|
|
|
270
270
|
return !1;
|
|
271
271
|
}
|
|
272
272
|
}
|
|
273
|
-
var k = (e) =>
|
|
273
|
+
var k = (e) => l(e) && O(d(), ":focus-visible");
|
|
274
274
|
function _e(e, t) {
|
|
275
275
|
return {
|
|
276
276
|
mouseenter: () => {
|
|
@@ -288,10 +288,10 @@ function _e(e, t) {
|
|
|
288
288
|
},
|
|
289
289
|
keydown: async (n) => {
|
|
290
290
|
if (n.key !== "Escape" || !t || !e.railExpanded) return;
|
|
291
|
-
let r = n.currentTarget,
|
|
292
|
-
if (e.railExpanded = !1,
|
|
293
|
-
let
|
|
294
|
-
await e.updateComplete,
|
|
291
|
+
let r = n.currentTarget, i = d(), a = re(r), o = i ? a.indexOf(i) : -1, s = (e) => !!e.closest(".lintje-nav__pin, .lintje-nav__logout");
|
|
292
|
+
if (e.railExpanded = !1, o < 0 || !s(a[o])) return;
|
|
293
|
+
let c = (e) => !s(e), l = a.slice(0, o).reverse().find(c) ?? a.slice(o + 1).find(c);
|
|
294
|
+
await e.updateComplete, l?.isConnected && (e.railRefocus = !0, y(l).focus());
|
|
295
295
|
}
|
|
296
296
|
};
|
|
297
297
|
}
|
|
@@ -301,15 +301,15 @@ var ve = class {
|
|
|
301
301
|
#n;
|
|
302
302
|
constructor(e) {
|
|
303
303
|
this.#t = null, this.#n = null, this.draw = () => {
|
|
304
|
-
let e = this.#r,
|
|
305
|
-
if (this.#i(e), !e || !
|
|
306
|
-
let
|
|
307
|
-
if (
|
|
308
|
-
|
|
304
|
+
let e = this.#r, t = this.#e.renderRoot.querySelector(".lintje-nav__thumb");
|
|
305
|
+
if (this.#i(e), !e || !t) return;
|
|
306
|
+
let n = e.clientHeight, r = e.scrollHeight;
|
|
307
|
+
if (r <= n + 1) {
|
|
308
|
+
t.style.height = "0px", t.style.transform = "";
|
|
309
309
|
return;
|
|
310
310
|
}
|
|
311
|
-
let a = Math.max(
|
|
312
|
-
|
|
311
|
+
let a = Math.max(i(this.#e, "--space-8", 32), Math.round(n * n / r)), o = e.offsetTop + Math.round(e.scrollTop / (r - n) * (n - a));
|
|
312
|
+
t.style.height = `${a}px`, t.style.transform = `translateY(${o}px)`;
|
|
313
313
|
}, this.grab = (e) => {
|
|
314
314
|
let t = e.currentTarget, n = this.#r;
|
|
315
315
|
if (!n || e.button !== 0) return;
|
|
@@ -343,122 +343,122 @@ var ve = class {
|
|
|
343
343
|
}
|
|
344
344
|
};
|
|
345
345
|
function A(e) {
|
|
346
|
-
let t =
|
|
346
|
+
let t = v("gebruiksvoorwerpen-hangslot-dicht", {
|
|
347
347
|
size: 16,
|
|
348
348
|
label: "Geen toegang"
|
|
349
349
|
});
|
|
350
|
-
return t ===
|
|
350
|
+
return t === m ? h`<span class=${e}>geen toegang</span>` : t;
|
|
351
351
|
}
|
|
352
352
|
var j = (e) => `v${e.replace(/^v/, "")}`, M = (e) => e.label ?? "Vragen of feedback";
|
|
353
|
-
function N(e, t,
|
|
354
|
-
let a = e.data,
|
|
355
|
-
width=${
|
|
356
|
-
src=${a?.logo ??
|
|
357
|
-
name=${a?.emblem?.name ??
|
|
358
|
-
alt=${a?.emblem?.label ??
|
|
359
|
-
></lintje-logo>`,
|
|
360
|
-
return
|
|
361
|
-
href=${
|
|
353
|
+
function N(e, t, r, i) {
|
|
354
|
+
let a = e.data, o = h`<lintje-logo
|
|
355
|
+
width=${r}
|
|
356
|
+
src=${a?.logo ?? m}
|
|
357
|
+
name=${a?.emblem?.name ?? m}
|
|
358
|
+
alt=${a?.emblem?.label ?? m}
|
|
359
|
+
></lintje-logo>`, s = a?.home;
|
|
360
|
+
return s ? h`<a
|
|
361
|
+
href=${s}
|
|
362
362
|
class=${t}
|
|
363
363
|
aria-label="Naar de startpagina"
|
|
364
364
|
title="Naar de startpagina"
|
|
365
365
|
@click=${(t) => {
|
|
366
|
-
|
|
366
|
+
n(t) && (i?.(), e.follow(s, t));
|
|
367
367
|
}}
|
|
368
|
-
>${
|
|
369
|
-
>` :
|
|
368
|
+
>${o}</a
|
|
369
|
+
>` : h`<span class=${t}>${o}</span>`;
|
|
370
370
|
}
|
|
371
|
-
function P(e, t,
|
|
372
|
-
let i = S(t), a = !i,
|
|
373
|
-
${
|
|
371
|
+
function P(e, t, r) {
|
|
372
|
+
let i = S(t), a = !i, o = h`
|
|
373
|
+
${v(t.icon, {
|
|
374
374
|
size: 20,
|
|
375
375
|
src: t.iconSrc
|
|
376
376
|
})}
|
|
377
|
-
${
|
|
378
|
-
${
|
|
379
|
-
${t.noAccess &&
|
|
380
|
-
${!i && !(t.noAccess &&
|
|
381
|
-
${t.badge ?
|
|
377
|
+
${r ? h`<span class="lintje-nav__label">${t.label}</span>` : h`<span class="visually-hidden">${t.label}</span>`}
|
|
378
|
+
${r && t.metric ? h`<span class="lintje-nav__metric">${t.metric.value}</span>` : m}
|
|
379
|
+
${t.noAccess && r ? A("lintje-nav__metric") : m}
|
|
380
|
+
${!i && !(t.noAccess && r) ? C(t) : m}
|
|
381
|
+
${t.badge ? g({
|
|
382
382
|
value: t.badge.value,
|
|
383
383
|
variant: t.badge.tone === "new" ? "label" : "unread",
|
|
384
384
|
surface: t.badge.tone === "action" && !a ? void 0 : "nav",
|
|
385
385
|
muted: a,
|
|
386
386
|
label: t.badge.label,
|
|
387
387
|
className: `lintje-nav__badge lintje-nav__badge--${t.badge.tone}`
|
|
388
|
-
}) :
|
|
388
|
+
}) : m}
|
|
389
389
|
`;
|
|
390
|
-
return i ?
|
|
390
|
+
return i ? h`<a
|
|
391
391
|
href=${t.href}
|
|
392
|
-
class=${
|
|
392
|
+
class=${_({
|
|
393
393
|
"lintje-nav__item": !0,
|
|
394
394
|
"is-active": !!t.active
|
|
395
395
|
})}
|
|
396
|
-
aria-current=${t.active ? "page" :
|
|
397
|
-
@click=${(
|
|
398
|
-
|
|
396
|
+
aria-current=${t.active ? "page" : m}
|
|
397
|
+
@click=${(r) => {
|
|
398
|
+
n(r) && e.follow(t.href, r);
|
|
399
399
|
}}
|
|
400
|
-
>${
|
|
401
|
-
>` :
|
|
402
|
-
class=${
|
|
400
|
+
>${o}</a
|
|
401
|
+
>` : h`<span
|
|
402
|
+
class=${_({
|
|
403
403
|
"lintje-nav__item": !0,
|
|
404
404
|
"is-no-page": !t.noAccess,
|
|
405
405
|
"is-no-access": !!t.noAccess
|
|
406
406
|
})}
|
|
407
407
|
aria-disabled="true"
|
|
408
|
-
title=${
|
|
409
|
-
>${
|
|
408
|
+
title=${r ? m : t.label}
|
|
409
|
+
>${o}</span
|
|
410
410
|
>`;
|
|
411
411
|
}
|
|
412
412
|
function F(e, t) {
|
|
413
|
-
let n = e.data,
|
|
414
|
-
return
|
|
413
|
+
let n = e.data, r = n?.menu ?? "pinned", i = e.wide.matches, a = r === "unpinned" || !i, o = !a || e.railExpanded, s = ge(r === "pinned"), c = _e(e, a);
|
|
414
|
+
return h`
|
|
415
415
|
<nav
|
|
416
|
-
class=${
|
|
416
|
+
class=${_({
|
|
417
417
|
"lintje-nav": !0,
|
|
418
|
-
"lintje-nav--rail":
|
|
418
|
+
"lintje-nav--rail": a,
|
|
419
419
|
"is-expanded": e.railExpanded
|
|
420
420
|
})}
|
|
421
421
|
aria-label="Hoofdnavigatie"
|
|
422
|
-
@mouseenter=${
|
|
423
|
-
@mouseleave=${
|
|
424
|
-
@focusin=${
|
|
425
|
-
@focusout=${
|
|
426
|
-
@keydown=${
|
|
422
|
+
@mouseenter=${c.mouseenter}
|
|
423
|
+
@mouseleave=${c.mouseleave}
|
|
424
|
+
@focusin=${c.focusin}
|
|
425
|
+
@focusout=${c.focusout}
|
|
426
|
+
@keydown=${c.keydown}
|
|
427
427
|
>
|
|
428
428
|
<div class="lintje-nav__header">
|
|
429
429
|
${N(e, "lintje-nav__home", 44)}
|
|
430
|
-
${
|
|
430
|
+
${o && i ? h`<button
|
|
431
431
|
type="button"
|
|
432
|
-
class=${
|
|
432
|
+
class=${_({
|
|
433
433
|
"lintje-nav__pin": !0,
|
|
434
|
-
"lintje-nav__pin--text":
|
|
434
|
+
"lintje-nav__pin--text": s.asText
|
|
435
435
|
})}
|
|
436
|
-
aria-pressed=${
|
|
437
|
-
aria-label=${
|
|
436
|
+
aria-pressed=${r === "pinned"}
|
|
437
|
+
aria-label=${s.asText ? m : D}
|
|
438
438
|
title=${D}
|
|
439
439
|
@click=${(t) => {
|
|
440
|
-
e.changeView({ menu:
|
|
440
|
+
e.changeView({ menu: r === "pinned" ? "unpinned" : "pinned" });
|
|
441
441
|
let n = t.currentTarget.closest(".lintje-nav");
|
|
442
442
|
(!n || !k(n)) && (e.railExpanded = !1);
|
|
443
443
|
}}
|
|
444
444
|
>
|
|
445
|
-
${
|
|
446
|
-
</button>` :
|
|
445
|
+
${s.content}
|
|
446
|
+
</button>` : m}
|
|
447
447
|
</div>
|
|
448
448
|
|
|
449
449
|
<div class="lintje-nav__list" @scroll=${e.navScrollbar.draw}>
|
|
450
|
-
${t.map((t, n) =>
|
|
450
|
+
${t.map((t, n) => h`<div
|
|
451
451
|
class="lintje-nav__group"
|
|
452
|
-
role=${t.heading ? "group" :
|
|
453
|
-
aria-labelledby=${t.heading ? `lintje-nav-group-${n}` :
|
|
452
|
+
role=${t.heading ? "group" : m}
|
|
453
|
+
aria-labelledby=${t.heading ? `lintje-nav-group-${n}` : m}
|
|
454
454
|
>
|
|
455
455
|
<!-- One element in both states, with a fixed height: the text heading when
|
|
456
456
|
expanded, a line in the same spot in the rail. -->
|
|
457
|
-
${t.heading ?
|
|
457
|
+
${t.heading ? h`<p class="lintje-nav__section-heading" id=${`lintje-nav-group-${n}`}>
|
|
458
458
|
<span class="lintje-nav__section-label">${t.heading}</span>
|
|
459
459
|
<span class="lintje-nav__separator" aria-hidden="true"></span>
|
|
460
|
-
</p>` :
|
|
461
|
-
${t.items.map((t) => P(e, t,
|
|
460
|
+
</p>` : m}
|
|
461
|
+
${t.items.map((t) => P(e, t, o))}
|
|
462
462
|
</div>`)}
|
|
463
463
|
</div>
|
|
464
464
|
<!-- The list's scrollbar, right after it: its focus shows the thumb. -->
|
|
@@ -468,57 +468,57 @@ function F(e, t) {
|
|
|
468
468
|
@pointerdown=${e.navScrollbar.grab}
|
|
469
469
|
></span>
|
|
470
470
|
|
|
471
|
-
${n?.environment ?
|
|
471
|
+
${n?.environment ? h`<p class="lintje-nav__environment" title=${n.environment}>
|
|
472
472
|
<!-- Both texts always in the DOM, like the headings: the short one for the rail. -->
|
|
473
473
|
<span class="lintje-nav__environment-label">${n.environment}</span>
|
|
474
474
|
<span class="lintje-nav__environment-short" aria-hidden="true"
|
|
475
475
|
>${n.environment.slice(0, 3)}</span
|
|
476
476
|
>
|
|
477
|
-
</p>` :
|
|
478
|
-
${ye(e,
|
|
479
|
-
${n?.user ?
|
|
477
|
+
</p>` : m}
|
|
478
|
+
${ye(e, o)}
|
|
479
|
+
${n?.user ? h`<div class="lintje-nav__footer">
|
|
480
480
|
<span class="lintje-nav__avatar">${n.user.initials}</span>
|
|
481
481
|
<!-- Always in the DOM; the rail hides it with opacity. -->
|
|
482
482
|
<span class="lintje-nav__user">
|
|
483
483
|
<b>${n.user.name}</b>
|
|
484
|
-
${n.user.role ?
|
|
484
|
+
${n.user.role ? h`<span class="lintje-nav__role">${n.user.role}</span>` : m}
|
|
485
485
|
</span>
|
|
486
|
-
${n.logout ? be(n.logout, "lintje-nav__logout-button",
|
|
487
|
-
</div>` :
|
|
486
|
+
${n.logout ? be(n.logout, "lintje-nav__logout-button", o) : m}
|
|
487
|
+
</div>` : m}
|
|
488
488
|
</nav>
|
|
489
489
|
<!-- Darkens the page while the rail lies over it expanded; purely visual. -->
|
|
490
|
-
${
|
|
491
|
-
class=${
|
|
490
|
+
${a ? h`<div
|
|
491
|
+
class=${_({
|
|
492
492
|
"lintje-nav__scrim": !0,
|
|
493
493
|
"is-visible": e.railExpanded
|
|
494
494
|
})}
|
|
495
495
|
aria-hidden="true"
|
|
496
|
-
></div>` :
|
|
496
|
+
></div>` : m}
|
|
497
497
|
`;
|
|
498
498
|
}
|
|
499
499
|
function ye(e, t) {
|
|
500
|
-
let n = e.data,
|
|
500
|
+
let n = e.data, r = n?.version ? j(n.version) : null;
|
|
501
501
|
if (n?.feedback) {
|
|
502
502
|
let e = M(n.feedback);
|
|
503
|
-
return
|
|
504
|
-
${
|
|
503
|
+
return h`<a class="lintje-nav__item lintje-nav__feedback" href=${n.feedback.href}>
|
|
504
|
+
${v("functioneel-mail", {
|
|
505
505
|
size: 20,
|
|
506
506
|
label: t ? void 0 : e
|
|
507
507
|
})}
|
|
508
|
-
${t ?
|
|
509
|
-
${t &&
|
|
508
|
+
${t ? h`<span class="lintje-nav__label">${e}</span>` : m}
|
|
509
|
+
${t && r ? h`<span class="lintje-nav__metric lintje-nav__version">${r}</span>` : m}
|
|
510
510
|
</a>`;
|
|
511
511
|
}
|
|
512
|
-
return
|
|
513
|
-
${t ?
|
|
514
|
-
</p>` :
|
|
512
|
+
return r ? h`<p class="lintje-nav__version-row">
|
|
513
|
+
${t ? h`<span class="lintje-nav__metric lintje-nav__version">${r}</span>` : m}
|
|
514
|
+
</p>` : m;
|
|
515
515
|
}
|
|
516
516
|
function be(e, t, n) {
|
|
517
|
-
let
|
|
518
|
-
return
|
|
517
|
+
let r = "Afmelden", i = v("functioneel-uitloggen", { size: 18 });
|
|
518
|
+
return h`<form class="lintje-nav__logout" method="post" action=${e.href} ?hidden=${!n}>
|
|
519
519
|
<input type="hidden" name="csrf_token" value=${e.token} />
|
|
520
|
-
<button type="submit" class=${t} aria-label=${
|
|
521
|
-
${
|
|
520
|
+
<button type="submit" class=${t} aria-label=${r} title=${r}>
|
|
521
|
+
${i === m ? h`<span class="lintje-nav__logout-text">${r}</span>` : i}
|
|
522
522
|
</button>
|
|
523
523
|
</form>`;
|
|
524
524
|
}
|
|
@@ -542,7 +542,7 @@ var xe = [
|
|
|
542
542
|
}
|
|
543
543
|
];
|
|
544
544
|
function I(e, t, n) {
|
|
545
|
-
return e.mobile.matches ?
|
|
545
|
+
return e.mobile.matches ? h`<div class="lintje-share__header">
|
|
546
546
|
<h2 class="lintje-share__title" id="lintje-sheet-title">${t}</h2>
|
|
547
547
|
<button
|
|
548
548
|
type="button"
|
|
@@ -550,52 +550,52 @@ function I(e, t, n) {
|
|
|
550
550
|
aria-label="${t} sluiten"
|
|
551
551
|
@click=${n}
|
|
552
552
|
>
|
|
553
|
-
${
|
|
553
|
+
${v("functioneel-kruis", { size: 16 })}
|
|
554
554
|
</button>
|
|
555
|
-
</div>` :
|
|
555
|
+
</div>` : m;
|
|
556
556
|
}
|
|
557
557
|
function Se(e) {
|
|
558
558
|
return [e?.pageName, e?.name].filter(Boolean).join(" – ");
|
|
559
559
|
}
|
|
560
560
|
function L(e) {
|
|
561
|
-
let t =
|
|
562
|
-
return t ===
|
|
561
|
+
let t = v(e, { size: 16 });
|
|
562
|
+
return t === m ? h`<span class="lintje-share__gap" aria-hidden="true"></span>` : t;
|
|
563
563
|
}
|
|
564
564
|
function Ce(e) {
|
|
565
565
|
let t = e.data, n = e.store.state.titleHidden;
|
|
566
|
-
return
|
|
566
|
+
return h`<header class="lintje-top-bar">
|
|
567
567
|
<div class="lintje-top-bar__name">
|
|
568
568
|
<div class="lintje-top-bar__words">
|
|
569
569
|
<!-- The page's one h1. Below 768 px this bar is display: none and the mobile header
|
|
570
570
|
carries it instead. -->
|
|
571
|
-
${t?.name ?
|
|
572
|
-
${t?.pageName ?
|
|
573
|
-
class=${
|
|
571
|
+
${t?.name ? h`<h1 class="lintje-top-bar__dashboard">${t.name}</h1>` : m}
|
|
572
|
+
${t?.pageName ? h`<span
|
|
573
|
+
class=${_({
|
|
574
574
|
"lintje-top-bar__page": !0,
|
|
575
575
|
"is-visible": n
|
|
576
576
|
})}
|
|
577
577
|
aria-hidden=${!n}
|
|
578
578
|
>› ${t.pageName}</span
|
|
579
|
-
>` :
|
|
579
|
+
>` : m}
|
|
580
580
|
</div>
|
|
581
581
|
</div>
|
|
582
582
|
|
|
583
583
|
<div class="lintje-top-bar__actions">
|
|
584
|
-
${e.toolsCompact ?
|
|
584
|
+
${e.toolsCompact ? h`${e.renderSearch()}${e.renderNotifications()}${H(e)}` : we(e)}
|
|
585
585
|
</div>
|
|
586
586
|
</header>`;
|
|
587
587
|
}
|
|
588
588
|
function we(e) {
|
|
589
589
|
let t = e.data;
|
|
590
|
-
return
|
|
590
|
+
return h`${t?.search ? h`<lintje-button
|
|
591
591
|
variant="tertiary"
|
|
592
592
|
size="chrome"
|
|
593
593
|
icon="functioneel-zoek"
|
|
594
594
|
keyshortcuts="/"
|
|
595
595
|
@click=${() => e.askSearch()}
|
|
596
596
|
>Zoeken <kbd class="lintje-key lintje-top-bar__key" aria-hidden="true">/</kbd></lintje-button
|
|
597
|
-
>` :
|
|
598
|
-
${t?.view ?
|
|
597
|
+
>` : m}${e.renderNotifications()}
|
|
598
|
+
${t?.view ? h`<div class="lintje-view" @focusout=${(t) => B(e, t)}>
|
|
599
599
|
<lintje-button
|
|
600
600
|
class="lintje-view__button"
|
|
601
601
|
variant="tertiary"
|
|
@@ -606,9 +606,9 @@ function we(e) {
|
|
|
606
606
|
@click=${() => R(e)}
|
|
607
607
|
>Weergave</lintje-button
|
|
608
608
|
>
|
|
609
|
-
${e.viewOpen ? U(e, t.view) :
|
|
610
|
-
</div>` :
|
|
611
|
-
${t?.share ?
|
|
609
|
+
${e.viewOpen ? U(e, t.view) : m}
|
|
610
|
+
</div>` : m}
|
|
611
|
+
${t?.share ? h`<div class="lintje-share" @focusout=${(t) => B(e, t)}>
|
|
612
612
|
<lintje-button
|
|
613
613
|
class="lintje-share__button"
|
|
614
614
|
variant="tertiary"
|
|
@@ -619,8 +619,8 @@ function we(e) {
|
|
|
619
619
|
@click=${() => z(e)}
|
|
620
620
|
>Delen</lintje-button
|
|
621
621
|
>
|
|
622
|
-
${e.shareOpen ? K(e) :
|
|
623
|
-
</div>` :
|
|
622
|
+
${e.shareOpen ? K(e) : m}
|
|
623
|
+
</div>` : m}`;
|
|
624
624
|
}
|
|
625
625
|
function R(e) {
|
|
626
626
|
e.viewOpen = !e.viewOpen, e.shareOpen = !1, e.openGroup = null;
|
|
@@ -632,43 +632,43 @@ function B(e, t) {
|
|
|
632
632
|
let n = t.relatedTarget, r = t.currentTarget;
|
|
633
633
|
!n || e.mobile.matches || r.contains(n) || (r.classList.contains("lintje-view") ? e.viewOpen = !1 : e.shareOpen = !1);
|
|
634
634
|
}
|
|
635
|
-
function V(e, t, n,
|
|
636
|
-
let
|
|
637
|
-
return
|
|
635
|
+
function V(e, t, n, r, i) {
|
|
636
|
+
let a = v(t, { size: 20 });
|
|
637
|
+
return h`<button
|
|
638
638
|
type="button"
|
|
639
|
-
class=${
|
|
639
|
+
class=${_({
|
|
640
640
|
"lintje-shell__tool": !0,
|
|
641
|
-
"lintje-shell__tool--text":
|
|
641
|
+
"lintje-shell__tool--text": a === m,
|
|
642
642
|
[n]: !0
|
|
643
643
|
})}
|
|
644
644
|
aria-label=${e}
|
|
645
645
|
title=${e}
|
|
646
|
-
aria-expanded=${
|
|
647
|
-
@click=${
|
|
646
|
+
aria-expanded=${r}
|
|
647
|
+
@click=${i}
|
|
648
648
|
>
|
|
649
|
-
${
|
|
649
|
+
${a === m ? e : a}
|
|
650
650
|
</button>`;
|
|
651
651
|
}
|
|
652
652
|
function H(e) {
|
|
653
653
|
let t = e.data;
|
|
654
|
-
return
|
|
654
|
+
return h`${t?.view ? h`<div class="lintje-view" @focusout=${(t) => B(e, t)}>
|
|
655
655
|
${V("Weergave", "functioneel-darkmode", "lintje-view__button", e.viewOpen, () => R(e))}
|
|
656
|
-
${e.viewOpen ? U(e, t.view) :
|
|
657
|
-
</div>` :
|
|
656
|
+
${e.viewOpen ? U(e, t.view) : m}
|
|
657
|
+
</div>` : m}${t?.share ? h`<div class="lintje-share" @focusout=${(t) => B(e, t)}>
|
|
658
658
|
${V("Delen", "functioneel-delen", "lintje-share__button", e.shareOpen, () => z(e))}
|
|
659
|
-
${e.shareOpen ? K(e) :
|
|
660
|
-
</div>` :
|
|
659
|
+
${e.shareOpen ? K(e) : m}
|
|
660
|
+
</div>` : m}`;
|
|
661
661
|
}
|
|
662
662
|
function U(e, t) {
|
|
663
663
|
let n = () => {
|
|
664
664
|
e.viewOpen = !1;
|
|
665
|
-
},
|
|
666
|
-
return
|
|
665
|
+
}, r = e.mobile.matches;
|
|
666
|
+
return h`
|
|
667
667
|
<div class="lintje-share__scrim" @click=${n}></div>
|
|
668
668
|
<div
|
|
669
669
|
class="lintje-view__popover"
|
|
670
|
-
role=${
|
|
671
|
-
aria-modal=${
|
|
670
|
+
role=${r ? "dialog" : "group"}
|
|
671
|
+
aria-modal=${r ? "true" : m}
|
|
672
672
|
aria-label="Weergave"
|
|
673
673
|
tabindex="-1"
|
|
674
674
|
>
|
|
@@ -679,20 +679,20 @@ function U(e, t) {
|
|
|
679
679
|
${xe.map((n) => W(n.label, "", n.text, n.value === t.mode, () => e.changeView({ mode: n.value }), !0))}
|
|
680
680
|
</div>
|
|
681
681
|
</div>
|
|
682
|
-
${t.layoutChoice ?
|
|
682
|
+
${t.layoutChoice ? h`<p class="lintje-share__heading">Menu</p>
|
|
683
683
|
<div class="lintje-view__row">
|
|
684
684
|
<div class="lintje-toggle-group" role="group" aria-label="Plaats van het menu">
|
|
685
685
|
${W("Menu als zijbalk", "", "Zijbalk", e.layout === "side", () => e.changeView({ layout: "side" }), !0)}
|
|
686
686
|
${W("Menu boven", "", "Boven", e.layout === "top", () => e.changeView({ layout: "top" }), !0)}
|
|
687
687
|
</div>
|
|
688
|
-
</div>` :
|
|
688
|
+
</div>` : m}
|
|
689
689
|
${Te(e, t)}
|
|
690
690
|
</div>
|
|
691
691
|
`;
|
|
692
692
|
}
|
|
693
693
|
function Te(e, t) {
|
|
694
694
|
let n = t.themes;
|
|
695
|
-
return n?.length ?
|
|
695
|
+
return n?.length ? h`<p class="lintje-share__heading" aria-hidden="true">Thema</p>
|
|
696
696
|
<div class="lintje-view__row">
|
|
697
697
|
<lintje-radio-group
|
|
698
698
|
class="lintje-view__themes"
|
|
@@ -702,23 +702,23 @@ function Te(e, t) {
|
|
|
702
702
|
.value=${t.theme ?? n[0].value}
|
|
703
703
|
@lintje-change=${(t) => e.changeView({ theme: t.detail })}
|
|
704
704
|
></lintje-radio-group>
|
|
705
|
-
</div>` :
|
|
705
|
+
</div>` : m;
|
|
706
706
|
}
|
|
707
|
-
function W(e, t, n, i, a
|
|
708
|
-
let
|
|
709
|
-
return
|
|
707
|
+
function W(e, t, n, r, i, a = !1) {
|
|
708
|
+
let o = a ? m : v(t, { size: 16 });
|
|
709
|
+
return h`<button
|
|
710
710
|
type="button"
|
|
711
|
-
class=${
|
|
711
|
+
class=${_({
|
|
712
712
|
"lintje-toggle-group__option": !0,
|
|
713
|
-
"lintje-toggle-group__option--text":
|
|
714
|
-
"is-active":
|
|
713
|
+
"lintje-toggle-group__option--text": o === m,
|
|
714
|
+
"is-active": r
|
|
715
715
|
})}
|
|
716
|
-
aria-pressed=${
|
|
716
|
+
aria-pressed=${r}
|
|
717
717
|
aria-label=${e}
|
|
718
718
|
title=${e}
|
|
719
|
-
@click=${
|
|
719
|
+
@click=${i}
|
|
720
720
|
>
|
|
721
|
-
${
|
|
721
|
+
${o === m ? n : o}
|
|
722
722
|
</button>`;
|
|
723
723
|
}
|
|
724
724
|
function G(e, t) {
|
|
@@ -729,7 +729,7 @@ function Ee(e, t = "") {
|
|
|
729
729
|
return n ? n + e.slice(e.indexOf(":")) : e;
|
|
730
730
|
}
|
|
731
731
|
function De(e, t) {
|
|
732
|
-
return
|
|
732
|
+
return h`
|
|
733
733
|
<div class="lintje-share__scrim" @click=${t}></div>
|
|
734
734
|
<div class="lintje-share__popover" role="dialog" aria-labelledby="lintje-share-phone">
|
|
735
735
|
<button type="button" class="lintje-share__item lintje-share__back" @click=${() => G(e, !1)}>
|
|
@@ -753,17 +753,17 @@ function K(e) {
|
|
|
753
753
|
e.shareOpen = !1;
|
|
754
754
|
}, n = () => e.closePanel(".lintje-share__button");
|
|
755
755
|
if (e.sharePhone) return De(e, t);
|
|
756
|
-
let
|
|
757
|
-
return
|
|
756
|
+
let r = e.mobile.matches;
|
|
757
|
+
return h`
|
|
758
758
|
<div class="lintje-share__scrim" @click=${t}></div>
|
|
759
759
|
<div
|
|
760
760
|
class="lintje-share__popover"
|
|
761
|
-
role=${
|
|
762
|
-
aria-modal=${
|
|
761
|
+
role=${r ? "dialog" : "group"}
|
|
762
|
+
aria-modal=${r ? "true" : m}
|
|
763
763
|
aria-label="Delen"
|
|
764
764
|
tabindex="-1"
|
|
765
765
|
>
|
|
766
|
-
${
|
|
766
|
+
${r ? I(e, "Delen", t) : h`<p class="lintje-share__heading">Delen</p>`}
|
|
767
767
|
<button
|
|
768
768
|
type="button"
|
|
769
769
|
class="lintje-share__item"
|
|
@@ -804,7 +804,7 @@ function K(e) {
|
|
|
804
804
|
"Abonneer: dagelijks om 08:00" needs a mail service, "Alle data (CSV)" an export
|
|
805
805
|
of every tile. Each returns here with its action. -->
|
|
806
806
|
<!-- The footer is the filter bar's "Je ziet" sentence, through the store. -->
|
|
807
|
-
${e.store.state.summary ?
|
|
807
|
+
${e.store.state.summary ? h`<p class="lintje-share__footer">${e.store.state.summary}</p>` : m}
|
|
808
808
|
</div>
|
|
809
809
|
`;
|
|
810
810
|
}
|
|
@@ -812,75 +812,75 @@ function K(e) {
|
|
|
812
812
|
//#region src/components/frame/shell/mobile-header.ts
|
|
813
813
|
function Oe(e) {
|
|
814
814
|
let t = e.data, n = t?.version && !t.user ? j(t.version) : null;
|
|
815
|
-
return
|
|
816
|
-
${t?.environment ?
|
|
817
|
-
${t?.feedback ?
|
|
818
|
-
${
|
|
815
|
+
return h`
|
|
816
|
+
${t?.environment ? h`<p class="lintje-mobile-menu__environment">${t.environment}</p>` : m}
|
|
817
|
+
${t?.feedback ? h`<a class="lintje-mobile-menu__item lintje-mobile-menu__feedback" href=${t.feedback.href}>
|
|
818
|
+
${v("functioneel-mail", { size: 20 })}
|
|
819
819
|
<span class="lintje-mobile-menu__label">${M(t.feedback)}</span>
|
|
820
|
-
${n ?
|
|
821
|
-
</a>` : n ?
|
|
820
|
+
${n ? h`<span class="lintje-mobile-menu__version">${n}</span>` : m}
|
|
821
|
+
</a>` : n ? h`<p class="lintje-mobile-menu__item lintje-mobile-menu__feedback">
|
|
822
822
|
<span class="lintje-mobile-menu__version">${n}</span>
|
|
823
|
-
</p>` :
|
|
823
|
+
</p>` : m}
|
|
824
824
|
`;
|
|
825
825
|
}
|
|
826
826
|
function q(e, t) {
|
|
827
|
-
let n = e.data,
|
|
828
|
-
return
|
|
827
|
+
let n = e.data, r = e.store.state.modifiedCount, i = e.menuOpen, a = "lintje-mobile-header__word";
|
|
828
|
+
return h`<div
|
|
829
829
|
class="lintje-mobile-chrome"
|
|
830
830
|
tabindex="-1"
|
|
831
|
-
role=${
|
|
832
|
-
aria-modal=${
|
|
833
|
-
aria-label=${
|
|
831
|
+
role=${i ? "dialog" : m}
|
|
832
|
+
aria-modal=${i ? "true" : m}
|
|
833
|
+
aria-label=${i ? "Menu" : m}
|
|
834
834
|
>
|
|
835
|
-
<header class=${
|
|
835
|
+
<header class=${_({
|
|
836
836
|
"lintje-mobile-header": !0,
|
|
837
837
|
"is-compact": e.headerCompact
|
|
838
838
|
})}>
|
|
839
|
-
${e.layout === "top" ? n?.name ?
|
|
839
|
+
${e.layout === "top" ? n?.name ? h`<h1 class="lintje-mobile-header__title" title=${n.name}>${n.name}</h1>` : m : h`
|
|
840
840
|
<!-- The page's one h1 below 768 px. The header draws no name — the page
|
|
841
841
|
header's kicker shows it — so the heading is there for the outline only.
|
|
842
842
|
At 768 px and up this header is display: none and the top bar has it. -->
|
|
843
|
-
${n?.name ?
|
|
843
|
+
${n?.name ? h`<h1 class="visually-hidden">${n.name}</h1>` : m}
|
|
844
844
|
${N(e, "lintje-mobile-header__home", 32, () => {
|
|
845
845
|
e.menuOpen = !1;
|
|
846
846
|
})}
|
|
847
847
|
`}
|
|
848
848
|
<div class="lintje-mobile-header__actions">
|
|
849
849
|
<!-- Open, the menu is a dialog of its own: only its close button stays. -->
|
|
850
|
-
${
|
|
850
|
+
${i ? m : h`${e.renderSearch()}${e.renderNotifications()}${e.mobile.matches ? H(e) : m}${e.store.state.hasFilters ? h`<button
|
|
851
851
|
type="button"
|
|
852
852
|
class="lintje-mobile-header__button"
|
|
853
853
|
aria-haspopup="dialog"
|
|
854
854
|
aria-expanded=${e.store.state.sheetOpen}
|
|
855
|
-
@click=${() =>
|
|
855
|
+
@click=${() => s({ sheetOpen: !0 })}
|
|
856
856
|
>
|
|
857
|
-
${
|
|
858
|
-
<span class=${
|
|
859
|
-
${
|
|
860
|
-
value:
|
|
861
|
-
label: `${
|
|
857
|
+
${v("functioneel-filters", { size: 16 })}
|
|
858
|
+
<span class=${a}>Filters</span>
|
|
859
|
+
${r > 0 ? g({
|
|
860
|
+
value: r,
|
|
861
|
+
label: `${r} aangepast`,
|
|
862
862
|
tone: "attention",
|
|
863
863
|
className: "lintje-mobile-header__badge"
|
|
864
|
-
}) :
|
|
865
|
-
</button>` :
|
|
864
|
+
}) : m}
|
|
865
|
+
</button>` : m}`}
|
|
866
866
|
<!-- One button in both states, so opening the menu leaves the focus
|
|
867
867
|
where it is: only the label and the glyph change places. -->
|
|
868
868
|
<button
|
|
869
869
|
type="button"
|
|
870
870
|
class="lintje-mobile-header__button"
|
|
871
|
-
aria-expanded=${
|
|
871
|
+
aria-expanded=${i}
|
|
872
872
|
aria-controls="lintje-mobile-menu-panel"
|
|
873
873
|
@click=${() => {
|
|
874
874
|
e.menuOpen = !e.menuOpen;
|
|
875
875
|
}}
|
|
876
876
|
>
|
|
877
|
-
${
|
|
877
|
+
${i ? h`<span class=${a}>Sluiten</span>${v("functioneel-kruis", { size: 16 })}` : h`${v("functioneel-menu", { size: 16 })}<span class=${a}>Menu</span>`}
|
|
878
878
|
</button>
|
|
879
879
|
</div>
|
|
880
880
|
</header>
|
|
881
881
|
|
|
882
|
-
${
|
|
883
|
-
class=${
|
|
882
|
+
${i || e.menuLeaving ? h`<div
|
|
883
|
+
class=${_({
|
|
884
884
|
"lintje-mobile-menu": !0,
|
|
885
885
|
"is-leaving": e.menuLeaving
|
|
886
886
|
})}
|
|
@@ -891,51 +891,51 @@ function q(e, t) {
|
|
|
891
891
|
}}
|
|
892
892
|
>
|
|
893
893
|
<nav class="lintje-mobile-menu__list" aria-label="Hoofdnavigatie">
|
|
894
|
-
${t.map((t, n) =>
|
|
895
|
-
role=${t.heading ? "group" :
|
|
896
|
-
aria-labelledby=${t.heading ? `lintje-mobile-menu-group-${n}` :
|
|
894
|
+
${t.map((t, n) => h`<div
|
|
895
|
+
role=${t.heading ? "group" : m}
|
|
896
|
+
aria-labelledby=${t.heading ? `lintje-mobile-menu-group-${n}` : m}
|
|
897
897
|
>
|
|
898
|
-
${t.heading ?
|
|
898
|
+
${t.heading ? h`<p
|
|
899
899
|
class="lintje-mobile-menu__heading"
|
|
900
900
|
id=${`lintje-mobile-menu-group-${n}`}
|
|
901
901
|
>
|
|
902
902
|
${t.heading}
|
|
903
|
-
</p>` :
|
|
903
|
+
</p>` : m}
|
|
904
904
|
${t.items.map((t) => ke(e, t))}
|
|
905
905
|
</div>`)}
|
|
906
906
|
</nav>
|
|
907
907
|
${Oe(e)} ${e.renderUserMenu(!0)}
|
|
908
|
-
</div>` :
|
|
908
|
+
</div>` : m}
|
|
909
909
|
</div>`;
|
|
910
910
|
}
|
|
911
911
|
function ke(e, t) {
|
|
912
|
-
let
|
|
913
|
-
${
|
|
912
|
+
let r = h`
|
|
913
|
+
${v(t.icon, {
|
|
914
914
|
size: 20,
|
|
915
915
|
src: t.iconSrc
|
|
916
916
|
})}
|
|
917
917
|
<span class="lintje-mobile-menu__label">${t.label}</span>
|
|
918
|
-
${t.noAccess ? A("lintje-mobile-menu__meta") :
|
|
919
|
-
${S(t) || t.noAccess ?
|
|
918
|
+
${t.noAccess ? A("lintje-mobile-menu__meta") : m}
|
|
919
|
+
${S(t) || t.noAccess ? m : C(t)}
|
|
920
920
|
`;
|
|
921
|
-
return S(t) ?
|
|
921
|
+
return S(t) ? h`<a
|
|
922
922
|
href=${t.href}
|
|
923
|
-
class=${
|
|
923
|
+
class=${_({
|
|
924
924
|
"lintje-mobile-menu__item": !0,
|
|
925
925
|
"is-active": !!t.active
|
|
926
926
|
})}
|
|
927
|
-
aria-current=${t.active ? "page" :
|
|
928
|
-
@click=${(
|
|
929
|
-
|
|
927
|
+
aria-current=${t.active ? "page" : m}
|
|
928
|
+
@click=${(r) => {
|
|
929
|
+
n(r) && (e.menuOpen = !1, e.follow(t.href, r));
|
|
930
930
|
}}
|
|
931
|
-
>${
|
|
932
|
-
>` :
|
|
933
|
-
>${
|
|
931
|
+
>${r}</a
|
|
932
|
+
>` : h`<span class="lintje-mobile-menu__item is-muted" aria-disabled="true"
|
|
933
|
+
>${r}</span
|
|
934
934
|
>`;
|
|
935
935
|
}
|
|
936
936
|
//#endregion
|
|
937
937
|
//#region src/components/frame/shell/header.css?inline
|
|
938
|
-
var Ae = "/* Header of the top layout, drawn by `header.ts` inside the caller's shadow root. */\n\n/* The logo bar sits above the veil, so an open submenu does not dim it. A box wider than a narrow\n phone is cut at both sides alike, which keeps the ribbon centred. */\n.lintje-logobar {\n position: relative;\n z-index: 31;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n min-height: var(--h-logobar);\n overflow: hidden;\n background: var(--color-logobar-bg);\n color: var(--color-logobar-text);\n}\n.lintje-logobar__home { display: block; flex: none; color: inherit; }\n/* The logo link's ring is drawn inside its box (`focus-inset`): the bar cuts what stands outside\n its top edge. */\n\n/* The environment outside production: the accent, not a status. */\n.lintje-logobar__environment {\n position: absolute;\n top: var(--space-6);\n right: calc(var(--page-pad-x) + var(--page-gutter));\n height: var(--h-chip);\n margin: 0;\n padding: 0 var(--space-3);\n background: var(--color-nav-environment-bg);\n color: var(--color-nav-environment-text);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n line-height: var(--h-chip);\n white-space: nowrap;\n}\n.lintje-logobar__environment-short { display: none; }\n/* On a phone the organisation's name reaches the right edge: the block shrinks to three letters above it. */\n:where(.lintje-shell.is-phone) .lintje-logobar__environment {\n top: var(--space-2);\n right: var(--space-4);\n height: var(--h-chip-field);\n line-height: var(--h-chip-field);\n}\n/* The full name stays for a screen reader; the three letters are only seen. */\n:where(.lintje-shell.is-phone) .lintje-logobar__environment-label {\n position: absolute;\n width: 1px; height: 1px;\n margin: -1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n:where(.lintje-shell.is-phone) .lintje-logobar__environment-short { display: inline; }\n\n/* The bar is the submenu's positioning context, which is why a group is not one. Hover, active\n and edge are set on the bar for what inherits, and on each element at its end, because an\n element with a shadow root declares the tokens again on its own host. */\n.lintje-navbar,\n.lintje-navbar__end > * {\n --color-nav-hover: var(--color-navbar-hover);\n --color-nav-active: var(--color-navbar-active);\n --color-nav-active-edge: var(--color-navbar-active-edge);\n}\n.lintje-navbar__end > * { --lintje-tool-height: var(--h-navbar); }\n/* The colour runs to the edges; the content keeps to `--page-gutter`. */\n.lintje-navbar {\n position: relative;\n z-index: 30;\n display: flex;\n align-items: stretch;\n justify-content: space-between;\n gap: 0 var(--space-4);\n height: var(--h-navbar);\n padding: 0 calc(var(--space-3) + var(--page-gutter)) 0\n calc(var(--page-pad-x) - var(--space-5) + var(--page-gutter));\n background: var(--color-nav-bg);\n color: var(--color-nav-text);\n}\n/* Both widths are measured (`SubmenuController`): neither may depend on whether the entries or\n \"Menu\" stand there. */\n.lintje-navbar__start { display: flex; flex: 1 1 auto; align-items: stretch; min-width: 0; }\n.lintje-navbar__entries { display: flex; flex: 1 1 0; align-items: stretch; min-width: 0; }\n.lintje-navbar__list { display: flex; flex: none; align-items: stretch; width: max-content; }\n/* Hanging from the bar's end, the overflow falls off the left, where the page gains no scroll. */\n.lintje-navbar__list.is-hidden {\n position: absolute;\n top: 0;\n right: 0;\n visibility: hidden;\n pointer-events: none;\n}\n.lintje-navbar__group { display: flex; }\n.lintje-navbar__end { display: flex; flex: none; align-items: center; gap: var(--space-1); }\n/* The orange ring disappears on the theme's fill, so the bar takes `--color-focus-on-theme`. The\n open entry and the submenu stand on the page's surface and keep the standard ring. */\n.lintje-navbar :focus-visible { outline-color: var(--color-focus-on-theme); }\n.lintje-navbar .lintje-navbar__entry.is-open:focus-visible,\n.lintje-navbar .lintje-navbar__submenu :focus-visible { outline-color: var(--color-focus); }\n\n/* The edge is always there on both sides so the word stays centred; transparent until active. */\n.lintje-navbar__entry {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n box-sizing: border-box;\n height: var(--h-navbar);\n padding: 0 var(--space-5);\n border-top: var(--nav-edge) solid transparent;\n border-bottom: var(--nav-edge) solid transparent;\n color: var(--color-nav-text);\n font: var(--text-body);\n white-space: nowrap;\n text-decoration: none;\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-navbar__entry:hover:not(.is-unavailable) { background: var(--color-navbar-hover); }\n.lintje-navbar__entry:hover:not(.is-unavailable) .lintje-navbar__label { text-decoration: underline; }\n/* Not bold: the bold cut sets narrower and reads as another size beside its neighbours. */\n.lintje-navbar__entry.is-active {\n background: var(--color-navbar-active);\n border-bottom-color: var(--color-navbar-active-edge);\n color: var(--color-nav-active-text);\n}\n.lintje-navbar__entry.is-open,\n.lintje-navbar__entry.is-open:hover {\n background: var(--color-bg-surface);\n border-bottom-color: transparent;\n color: var(--color-navbar-open-text);\n}\n.lintje-navbar__entry.is-open .lintje-navbar__label { text-decoration: none; }\n.lintje-navbar__entry.is-unavailable { color: var(--color-nav-disabled); cursor: default; }\n\n/* The shadow falls down only: `clip-path` cuts what would fall on the bar, so the open entry and\n the panel stay one shape. `--lintje-navbar-room` is measured. */\n.lintje-navbar__submenu {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n padding: var(--space-8) calc(var(--page-pad-x) + var(--page-gutter)) var(--space-10);\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n border-bottom: 1px solid var(--color-border-default);\n box-shadow: var(--shadow-popover);\n clip-path: inset(0 0 -32px 0);\n max-height: var(--lintje-navbar-room, calc(100dvh - var(--h-navbar)));\n box-sizing: border-box;\n overflow-y: auto;\n overscroll-behavior: contain;\n}\n.lintje-navbar__heading {\n margin: var(--space-6) 0 var(--space-3);\n color: var(--color-text-muted);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n}\n.lintje-navbar__heading:first-child { margin-top: 0; }\n.lintje-navbar__pages {\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: var(--space-4);\n margin: 0;\n padding: 0;\n list-style: none;\n animation:\n lintje-fade-in var(--dur-popover) linear,\n lintje-drop-in var(--dur-submenu) ease;\n}\n@media (max-width: 1023px) {\n .lintje-navbar__pages { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n}\n.lintje-navbar__item { display: flex; }\n\n/* The 1 px edge is always there, so hover moves nothing. */\n.lintje-navbar__page {\n flex: 1;\n display: flex;\n align-items: center;\n gap: var(--space-3);\n box-sizing: border-box;\n min-width: 0;\n min-height: 4rem;\n padding: var(--space-3) var(--space-4);\n background: var(--color-bg-subtle);\n border: 1px solid transparent;\n color: var(--color-text-primary);\n font: var(--text-body);\n text-decoration: none;\n transition: border-color var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-navbar__page-text { display: flex; flex: 1; flex-direction: column; min-width: 0; }\n.lintje-navbar__page .lintje-navbar__label { font-weight: 700; }\n.lintje-navbar__metric { color: var(--color-text-muted); font: var(--text-small); }\n.lintje-navbar__metric-value { color: var(--color-text-primary); }\n.lintje-navbar__page:hover:not(.is-unavailable) { border-color: var(--color-accent-line); }\n.lintje-navbar__page:hover:not(.is-unavailable) .lintje-navbar__label { text-decoration: underline; }\n.lintje-navbar__page.is-active {\n box-shadow: inset var(--nav-edge) 0 0 var(--color-accent-line);\n color: var(--color-accent-text);\n}\n.lintje-navbar__page.is-unavailable,\n.lintje-navbar__page.is-unavailable .lintje-navbar__metric-value { color: var(--color-text-muted); cursor: default; }\n.lintje-navbar__page.is-no-access .lintje-navbar__label { text-decoration: line-through; }\n\n/* Fixed to the viewport: the header may stand in a box of its own height above the page. */\n.lintje-header-scrim {\n position: fixed;\n inset: 0;\n z-index: 20;\n background: var(--color-overlay-nav);\n pointer-events: none;\n animation: lintje-fade-in var(--dur-scrim) var(--ease-in-motion);\n}\n\n@media print {\n .lintje-logobar, .lintje-navbar, .lintje-header-scrim { display: none; }\n}\n\n/* Forced colours: the browser drops the fill that carries the active page and the open group. */\n@media (forced-colors: active) {\n .lintje-navbar { border-bottom: 1px solid CanvasText; }\n .lintje-navbar__entry.is-active { border-bottom-color: Highlight; }\n .lintje-navbar__entry.is-open { outline: 1px solid CanvasText; outline-offset: -1px; }\n .lintje-navbar__entry.is-unavailable,\n .lintje-navbar__page.is-unavailable { color: GrayText; }\n .lintje-navbar__page { border-color: CanvasText; }\n .lintje-navbar__page.is-active { border-left: var(--nav-edge) solid Highlight; }\n .lintje-navbar__page.is-unavailable { border-color: GrayText; }\n .lintje-navbar__submenu { border: 1px solid CanvasText; }\n .lintje-navbar :focus-visible,\n .lintje-navbar .lintje-navbar__entry.is-open:focus-visible,\n .lintje-navbar .lintje-navbar__submenu :focus-visible { outline-color: Highlight; }\n}\n", je = ":host { display: block; min-width: 0; min-height: 100vh; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n/*\n * The page's left edge, for what pins itself to the viewport (the filter bar): the menu's width\n * beside the page, nothing above it. Custom properties reach the slotted content.\n */\n.lintje-shell {\n --lintje-shell-left: 0px;\n position: relative;\n display: flex;\n flex-direction: column;\n min-height: inherit;\n background: var(--color-bg-page);\n color: var(--color-text-primary);\n}\n/* A specimen's bars (z-index 25–31) would otherwise cover the outer shell's open menus. */\n.lintje-shell.is-nested { isolation: isolate; }\n.lintje-shell--side { --lintje-shell-left: var(--w-rail); flex-direction: row; }\n@media (min-width: 1440px) {\n .lintje-shell--side:not(.is-unpinned) { --lintje-shell-left: var(--w-nav); }\n}\n.lintje-shell--side:where(.is-phone) { --lintje-shell-left: 0px; }\n.lintje-shell__column {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n\n/* \"Naar de inhoud\": hidden until focused. The ring is drawn inside the box (`focus-inset`):\n outside it would lie on the theme fill (1.89:1, on Defensie 1:1); inside, its neighbour is\n white. */\n.lintje-shell__skip {\n position: absolute;\n top: var(--space-2);\n left: var(--space-2);\n z-index: 50;\n display: inline-flex;\n align-items: center;\n min-height: var(--h-touch);\n padding: var(--space-2) var(--space-4);\n background: var(--color-bg-surface);\n color: var(--color-link);\n font: var(--text-ui);\n text-decoration: underline;\n box-shadow: var(--shadow-popover);\n}\n.lintje-shell__skip:not(:focus) {\n width: 1px;\n height: 1px;\n min-height: 0;\n padding: 0;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n box-shadow: none;\n}\n\n/* The main region takes the skip link's focus; it is not a control and draws no ring. */\n.lintje-shell__main {\n display: flex;\n flex-direction: column;\n flex: 1 0 auto;\n min-width: 0;\n}\n.lintje-shell__main:focus { outline: none; }\n/* Without content the last edge-to-edge part takes the room left: a conversation keeps its\n question box at the bottom of a short page. */\n.lintje-shell__main.is-bare ::slotted([slot='full']) { flex: 1 0 auto; }\n\n/* The content keeps to the design system's maximum width, as the bars above it do. */\n.lintje-shell__content {\n display: flex;\n flex-direction: column;\n gap: var(--grid-gutter);\n padding: var(--page-pad-y) calc(var(--page-pad-x) + var(--page-gutter)) var(--space-10);\n}\n.lintje-shell__content[hidden] { display: none; }\n:where(.lintje-shell.is-phone) .lintje-shell__content { padding: var(--space-4) var(--space-4) var(--space-8); gap: var(--space-3); }\n\n/*\n * Top layout. The navigation bar cannot be `sticky`: it would stick inside the header's own box\n * and leave with it, so its slot keeps the bar's height (`--h-navbar`) and the bar is pinned\n * once the slot has left the viewport.\n */\n.lintje-shell__sentinel { height: 1px; margin-bottom: -1px; }\n.lintje-shell__nav { position: relative; z-index: 25; min-height: var(--h-navbar); }\n.lintje-shell__nav.is-stuck .lintje-navbar {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n}\n\n/* Below 768 px the mobile header is the bar under the logo bar; its slot keeps the height. */\n.lintje-shell__mobile-bar { height: var(--h-topbar); }\n.lintje-shell__mobile-pin { position: relative; z-index: 25; }\n.lintje-shell__mobile-bar.is-stuck .lintje-shell__mobile-pin {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n}\n.lintje-shell--top .lintje-mobile-header {\n position: static;\n height: var(--h-topbar);\n align-items: center;\n gap: var(--space-3);\n}\n.lintje-shell--top .lintje-mobile-header__actions { margin-top: 0; flex: none; }\n.lintje-shell--top .lintje-mobile-menu {\n position: absolute;\n inset: 100% 0 auto 0;\n height: calc(100dvh - var(--h-topbar));\n}\n/* 16 px so two lines fit inside the 56 px bar; longer is cut with an ellipsis. */\n.lintje-mobile-header__title {\n display: -webkit-box;\n min-width: 0;\n overflow: hidden;\n color: var(--color-nav-text);\n font: var(--text-dashboard);\n font-size: 1rem;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n}\n/* The logo bar already shows the environment. */\n.lintje-shell--top .lintje-mobile-menu__environment { display: none; }\n\n/* The page's one h1; cut before it can push the entries out. */\n.lintje-shell__name {\n flex: 0 1 auto;\n min-width: 0;\n max-width: 24rem;\n margin: 0;\n padding: 0 var(--space-5);\n overflow: hidden;\n color: var(--color-nav-text);\n font: var(--text-dashboard);\n line-height: var(--h-navbar);\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n/* Bare glyphs in a bar; on the navigation bar their ring is the on-theme one (`header.css`). */\n.lintje-shell__tool {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: none;\n width: var(--h-touch);\n height: var(--lintje-tool-height, var(--h-touch));\n color: var(--color-nav-text);\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-shell__tool:hover { background: var(--color-nav-hover); }\n.lintje-shell__tool--text {\n width: auto;\n padding: 0 var(--space-3);\n font: var(--text-ui);\n}\n.lintje-navbar .lintje-shell__tool { height: var(--h-navbar); }\n\n/* The panels hang from the bar, not the tool. They stand on the page's surface: standard ring. */\n.lintje-navbar .lintje-view,\n.lintje-navbar .lintje-share { position: static; }\n.lintje-navbar .lintje-view__popover,\n.lintje-navbar .lintje-share__popover {\n top: 100%;\n right: calc(var(--space-3) + var(--page-gutter));\n}\n.lintje-navbar .lintje-view__popover :focus-visible,\n.lintje-navbar .lintje-share__popover :focus-visible { outline-color: var(--color-focus); }\n\n.lintje-shell__sheet-user { border-top: 1px solid var(--color-nav-line); }\n\n@media print { .lintje-shell__skip { display: none; } }\n\n@media (forced-colors: active) {\n .lintje-navbar .lintje-view__popover :focus-visible,\n .lintje-navbar .lintje-share__popover :focus-visible { outline-color: Highlight; }\n}\n", Me = "\n/* Dark is its own surface, not an inversion: every colour here is a `--color-nav-*` token. */\n.lintje-nav {\n width: var(--w-nav);\n flex: none;\n /* `align-self: flex-start`: a stretched flex child would make sticky do nothing. */\n position: sticky;\n top: 0;\n align-self: flex-start;\n height: 100vh;\n background: var(--color-nav-bg);\n color: var(--color-nav-text);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n /* Above the page also while the rail collapses: with a z-index only while expanded,\n later positioned content (charts, KPI tiles) painted over the shrinking menu. */\n z-index: 30;\n box-shadow: var(--shadow-nav);\n /* The margin mirrors the width growth, so width + margin-right is 72 px at every moment;\n otherwise the content jumps 216 px for one frame. */\n transition:\n width var(--dur-rail) var(--ease-in-motion),\n margin-right var(--dur-rail) var(--ease-in-motion);\n}\n/* The orange ring disappears into the theme fill: the menu takes the on-theme ring. */\n.lintje-nav :focus-visible { outline-color: var(--color-focus-on-theme); }\n.lintje-nav--rail { width: var(--w-rail); margin-right: 0; }\n/* Expanding lies on top of the content: 288 px drawn, 72 px taken. A negative right margin does\n that; `fixed` or `absolute` would make the page jump. */\n.lintje-nav--rail.is-expanded {\n width: var(--w-nav);\n margin-right: calc(var(--w-rail) - var(--w-nav));\n}\n/* The overlay behind the expanded rail. A sibling of the nav: inside its stacking context it\n would darken the menu itself. */\n.lintje-nav__scrim {\n position: fixed;\n inset: 0;\n z-index: 29;\n background: var(--color-overlay-nav);\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--dur-rail) var(--ease-in-motion);\n}\n.lintje-nav__scrim.is-visible { opacity: 1; }\n\n.lintje-nav__header {\n height: var(--h-nav-head);\n flex: none;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 0 var(--space-4) 0 12px;\n}\n\n.lintje-nav__pin {\n position: relative;\n width: var(--h-icon-button); height: var(--h-icon-button);\n margin-top: 12px;\n display: flex; align-items: center; justify-content: center;\n color: var(--color-nav-text);\n background: transparent;\n flex: none;\n}\n.lintje-nav__pin--text {\n width: auto;\n padding: 0 var(--space-2);\n font-size: 0.875rem;\n font-weight: 700;\n white-space: nowrap;\n}\n/* The pin and Afmelden: a transparent hit area takes the target to 48 px. */\n.lintje-nav__pin::after,\n.lintje-nav__logout-button::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2));\n}\n.lintje-nav__pin { transition: background var(--dur-hover) var(--ease-in-motion); }\n.lintje-nav__pin:hover { background: var(--color-nav-hover); }\n\n/* No native bar: a styled one takes width in every browser and the rows' fill would stop short\n of the menu's edge. `NavScrollbar` sizes and places the thumb drawn instead. */\n.lintje-nav__list { flex: 1; overflow-y: auto; overflow-x: hidden; scrollbar-width: none; }\n.lintje-nav__list::-webkit-scrollbar { display: none; }\n.lintje-nav__thumb {\n position: absolute;\n top: 0; right: 0;\n width: var(--space-2);\n height: 0;\n /* The menu's second ink reads on its fill and on a hovered row. */\n background: var(--color-nav-text-sub);\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--dur-hover) var(--ease-in-motion);\n}\n/* There while the pointer is on the menu or a drag lasts; the keyboard's focus shows it at once. */\n.lintje-nav:hover .lintje-nav__thumb,\n.lintje-nav__thumb.is-dragging,\n.lintje-nav__list:focus-within + .lintje-nav__thumb { opacity: 1; pointer-events: auto; }\n.lintje-nav__list:focus-within + .lintje-nav__thumb { transition: none; }\n.lintje-nav__group { display: flex; flex-direction: column; }\n\n/* The same height in both modes, so every row below stays in place when the rail expands. */\n.lintje-nav__section-heading {\n position: relative;\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n color: var(--color-nav-text-sub);\n padding: 22px var(--space-5) 6px;\n white-space: nowrap;\n margin: 0;\n}\n/* A line in the rail, text once it expands: the text fades in 80 ms after the width starts. */\n.lintje-nav__section-label {\n display: block;\n transition: opacity 160ms var(--ease-in-motion) 80ms, transform var(--dur-base) var(--ease-in-motion) 80ms;\n}\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__section-label {\n opacity: 0;\n transform: translateX(-8px);\n transition: opacity 60ms var(--ease-out-motion), transform 0ms linear 60ms;\n}\n.lintje-nav__separator {\n position: absolute;\n left: 14px; right: 14px;\n top: 50%;\n height: 1px;\n background: var(--color-nav-line);\n opacity: 0;\n transform: scaleX(0);\n transform-origin: left center;\n transition: transform 140ms var(--ease-out-motion), opacity 0ms linear 140ms;\n}\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__separator {\n opacity: 1;\n transform: none;\n transition: transform 160ms var(--ease-in-motion) 60ms;\n}\n\n/* One row in every mode. A 4 px border + 22 px padding centres the 20 px icon in the 72 px rail,\n in line with the logo. Expanding animates only the width, so the icon stays in place. */\n.lintje-nav__item {\n position: relative;\n height: var(--h-nav-row);\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: var(--space-3);\n padding: 0 22px;\n border-left: var(--nav-edge) solid transparent;\n font-size: 1rem;\n color: var(--color-nav-text);\n text-decoration: none;\n white-space: nowrap;\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-nav__item:hover:not(.is-no-page):not(.is-no-access) {\n background: var(--color-nav-hover);\n}\n.lintje-nav__item.is-active {\n background: var(--color-nav-active);\n border-left-color: var(--color-nav-active-edge);\n color: var(--color-nav-active-text);\n /* Not bold: the bold cut sets narrower and reads as another font size beside its neighbours. */\n}\n.lintje-nav__item:focus-visible { outline-offset: -3px; }\n\n.lintje-nav__item.is-no-page { color: var(--color-nav-disabled); cursor: default; }\n.lintje-nav__item.is-no-access { color: var(--color-nav-disabled); text-decoration: line-through; cursor: not-allowed; }\n\n.lintje-nav__label { flex: 1; overflow: hidden; text-overflow: ellipsis; }\n.lintje-nav--rail.is-expanded .lintje-nav__label,\n.lintje-nav--rail.is-expanded .lintje-nav__metric {\n animation: lintje-nav-text-in var(--dur-base) var(--ease-in-motion) 80ms backwards;\n}\n@keyframes lintje-nav-text-in { from { opacity: 0; transform: translateX(-8px); } }\n.lintje-nav__metric { font-size: 0.875rem; color: var(--color-nav-text-sub); flex: none; }\n.lintje-nav__item.is-no-access .lintje-nav__metric { text-decoration: none; }\n.lintje-nav__item.is-no-page .lintje-nav__metric { color: var(--color-nav-disabled); }\n\n/* The badge is the primitive's (`badge.css` adopted by the shell). In the rail a word (\"NIEUW\")\n does not fit: it becomes a dot, so the rail does not overflow. */\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__badge {\n position: absolute; top: 2px; right: var(--space-1);\n}\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__badge--new {\n min-width: 8px; width: 8px; height: 8px; padding: 0;\n border-radius: 999px;\n font-size: 0; overflow: hidden;\n}\n\n/* Environment band, only outside production. Its fill is the theme's accent, not the attention\n status: on `defensie` (menu `#E17000`) the accent draws a blue band that reads against it. */\n.lintje-nav__environment {\n position: relative;\n flex: none;\n height: 2rem;\n margin: 0;\n background: var(--color-nav-environment-bg);\n color: var(--color-nav-environment-text);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n text-align: center;\n line-height: 2rem;\n white-space: nowrap;\n overflow: hidden;\n}\n.lintje-nav__environment-label,\n.lintje-nav__environment-short { position: absolute; inset: 0; }\n.lintje-nav__environment-label {\n transition: opacity 160ms var(--ease-in-motion) 80ms;\n}\n.lintje-nav__environment-short { opacity: 0; transition: opacity 60ms var(--ease-out-motion); }\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__environment-label { opacity: 0; transition: opacity 60ms var(--ease-out-motion); }\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__environment-short { opacity: 1; transition: opacity 160ms var(--ease-in-motion) 80ms; }\n\n.lintje-nav__feedback { flex: none; }\n.lintje-nav__version { font-family: var(--font-mono); font-size: 0.875rem; letter-spacing: .02em; margin-left: auto; }\n/* Without a contact the version gets a row with the menu row's geometry, so the user block does\n not move; not `.lintje-nav__item`, which carries a hover. */\n.lintje-nav__version-row {\n flex: none;\n height: var(--h-nav-row);\n margin: 0;\n display: flex;\n align-items: center;\n padding: 0 22px;\n border-left: var(--nav-edge) solid transparent;\n}\n\n/* \"Afmelden\": a real form, because signing out is a POST that leaves the page. */\n/* The form is `hidden` in the rail, not transparent, so the button is out of the tab order. */\n.lintje-nav__logout { flex: none; margin-left: auto; }\n.lintje-nav__logout[hidden] { display: none; }\n.lintje-nav__logout-button {\n position: relative;\n width: var(--h-icon-button); height: var(--h-icon-button);\n display: flex; align-items: center; justify-content: center;\n /* Quiet at rest; full text colour on hover and focus. */\n color: var(--color-nav-text-sub);\n background: transparent;\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-nav__logout-button:hover,\n.lintje-nav__logout-button:focus-visible { background: var(--color-nav-hover); color: var(--color-nav-text); }\n.lintje-nav__logout-text { font-size: 0.875rem; font-weight: 700; white-space: nowrap; padding: 0 var(--space-2); }\n\n.lintje-nav__footer {\n flex: none;\n display: flex; align-items: center; gap: 10px;\n padding: var(--space-4) var(--space-5) var(--space-5) var(--space-4);\n border-top: 1px solid var(--color-nav-line);\n font-size: 1rem;\n}\n/* As high as name and role together (two 1.25rem lines); the left padding keeps it centred in\n the rail. */\n.lintje-nav__avatar {\n width: 2.5rem; height: 2.5rem; flex: none;\n display: flex; align-items: center; justify-content: center;\n border-radius: var(--radius-round);\n background: var(--color-nav-avatar-bg);\n color: var(--color-nav-avatar-text);\n font-size: 1rem; font-weight: 700;\n}\n/* Name and role fade and slide in like the headings; `nowrap` keeps one line. */\n.lintje-nav__user {\n display: flex; flex-direction: column; line-height: 1.25rem;\n min-width: 0; flex: 1 1 auto; white-space: nowrap;\n transition: opacity 160ms var(--ease-in-motion) 80ms, transform var(--dur-base) var(--ease-in-motion) 80ms;\n}\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__user { opacity: 0; transform: translateX(-8px); transition: none; }\n.lintje-nav__user > b,\n.lintje-nav__role { overflow: hidden; text-overflow: ellipsis; }\n.lintje-nav__role { font-size: 0.875rem; color: var(--color-nav-text-sub); }\n\n:where(.lintje-shell.is-phone) .lintje-nav,\n:where(.lintje-shell.is-phone) .lintje-nav__scrim { display: none; }\n\n/* An emblem's black, if it has any, draws in the menu's text colour (`currentColor`). */\n.lintje-nav__home { display: block; flex: none; color: var(--color-nav-text); }\n\n\n@media print { .lintje-nav, .lintje-nav__scrim { display: none; } }\n\n/* Forced colours: the active row is a fill and a 4 px edge; the fill is dropped and the edge\n turns Highlight. A row without a page or access is GrayText. The ring is Highlight. The\n shadow is dropped, so an outline keeps the menu's edge against the page. */\n@media (forced-colors: active) {\n .lintje-nav { outline: 1px solid CanvasText; }\n .lintje-nav :focus-visible { outline-color: Highlight; }\n .lintje-nav__item { border-left-color: Canvas; }\n .lintje-nav__item.is-active { border-left-color: Highlight; }\n .lintje-nav__item.is-no-page,\n .lintje-nav__item.is-no-access { color: GrayText; }\n .lintje-nav__avatar { border: 1px solid CanvasText; }\n .lintje-nav__thumb { forced-color-adjust: none; background: CanvasText; }\n}\n", J = "\n/* One region: the open menu's dialog and the box its focus trap keeps Tab inside. It shows no\n ring when the trap pulls back stray focus. The region sticks, not the header: a sticky box\n stays inside its parent, and this one is as tall as the header. */\n.lintje-mobile-chrome { flex: none; position: sticky; top: 0; z-index: 25; }\n.lintje-mobile-chrome:focus { outline: none; }\n\n.lintje-mobile-header {\n display: none;\n height: var(--h-mobile-header);\n flex: none;\n background: var(--color-nav-bg);\n align-items: flex-start;\n justify-content: space-between;\n padding: 0 var(--space-4);\n /* Tools that do not fit must not widen the page, or a phone zooms out and they seem to fit\n (`headerCompact`). Sideways only: the focus ring stays inside the padding. */\n overflow-x: clip;\n}\n:where(.lintje-shell.is-phone) .lintje-mobile-header { display: flex; }\n/* On the theme fill the ring is the on-theme one, as in the desktop menu. */\n.lintje-mobile-header :focus-visible,\n.lintje-mobile-menu :focus-visible { outline-color: var(--color-focus-on-theme); }\n/* \"Weergave\" and \"Delen\" open from this header as sheets on the page's surface: standard ring. */\n.lintje-mobile-header .lintje-view__popover :focus-visible,\n.lintje-mobile-header .lintje-share__popover :focus-visible { outline-color: var(--color-focus); }\n\n.lintje-mobile-header__actions { margin-top: var(--space-3); display: flex; gap: var(--space-2); }\n.lintje-mobile-header__button {\n height: var(--h-touch);\n padding: 0 var(--space-3);\n background: var(--color-nav-active);\n color: var(--color-nav-text);\n border: 1px solid var(--color-nav-line);\n font-size: 0.875rem;\n font-weight: 700;\n display: flex; align-items: center; justify-content: center; gap: var(--space-2);\n /* Square when only the glyph shows (`headerCompact`). */\n min-width: var(--h-touch);\n}\n/* Without room the words are read, not shown: the glyph and the badge stay. */\n.lintje-mobile-header.is-compact .lintje-mobile-header__word {\n position: absolute;\n width: 1px; height: 1px;\n margin: -1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n/* The modified-filters count is the primitive badge's `attention` tone: near-black on the\n orange, because white on #E17000 is 3.2:1. */\n\n.lintje-mobile-menu {\n position: fixed;\n inset: var(--h-mobile-header) 0 0 0;\n z-index: 24;\n background: var(--color-nav-bg);\n color: var(--color-nav-text);\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n animation: lintje-menu-in var(--dur-sheet) var(--ease-in-motion);\n}\n.lintje-mobile-menu.is-leaving {\n animation: lintje-menu-out var(--dur-sheet) var(--ease-out-motion) forwards;\n pointer-events: none;\n}\n.lintje-mobile-menu__list { flex: 1; padding-bottom: var(--space-4); }\n.lintje-mobile-menu__heading {\n font-size: var(--label-size); font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking); text-transform: uppercase;\n color: var(--color-nav-text-sub);\n padding: 22px var(--space-5) 6px;\n}\n.lintje-mobile-menu__item {\n height: var(--h-touch);\n display: flex; align-items: center; gap: var(--space-3);\n padding: 0 var(--space-5);\n border-left: var(--nav-edge) solid transparent;\n color: var(--color-nav-text);\n font-size: 1rem;\n text-decoration: none;\n}\n.lintje-mobile-menu__item.is-active {\n background: var(--color-nav-active);\n border-left-color: var(--color-nav-active-edge);\n color: var(--color-nav-active-text);\n /* Not bold: the bold cut sets narrower and reads as another font size beside its neighbours. */\n}\n.lintje-mobile-menu__item.is-muted { color: var(--color-nav-disabled); }\n.lintje-mobile-menu__label { flex: 1; }\n.lintje-mobile-menu__meta { font-size: 0.875rem; color: var(--color-nav-disabled); flex: none; }\n/* The environment band and the feedback row with the version: below 768 px there is no rail,\n and a page's own footer is the host's, so this is the only place they can stand. */\n.lintje-mobile-menu__environment {\n flex: none;\n height: 2rem;\n margin: 0;\n background: var(--color-nav-environment-bg);\n color: var(--color-nav-environment-text);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n text-align: center;\n line-height: 2rem;\n white-space: nowrap;\n overflow: hidden;\n}\n.lintje-mobile-menu__feedback { flex: none; margin: 0; }\n.lintje-mobile-menu__version {\n flex: none;\n margin-left: auto;\n font-family: var(--font-mono); font-size: 0.875rem; letter-spacing: .02em;\n color: var(--color-nav-text-sub);\n}\n\n.lintje-mobile-header__home { display: block; flex: none; color: var(--color-nav-text); }\n\n\n@media print { .lintje-mobile-header, .lintje-mobile-menu { display: none; } }\n\n/* Forced colours: the active row's 4 px edge is Highlight, a muted row GrayText. */\n@media (forced-colors: active) {\n .lintje-mobile-header :focus-visible,\n .lintje-mobile-menu :focus-visible { outline-color: Highlight; }\n .lintje-mobile-header .lintje-view__popover :focus-visible,\n .lintje-mobile-header .lintje-share__popover :focus-visible { outline-color: Highlight; }\n .lintje-mobile-menu__item { border-left-color: Canvas; }\n .lintje-mobile-menu__item.is-active { border-left-color: Highlight; }\n .lintje-mobile-menu__item.is-muted { color: GrayText; }\n}\n", Ne = "/* The bar, the two toggle groups and the share popover are all drawn by the shell itself. */\n\n.lintje-top-bar {\n height: var(--h-topbar);\n flex: none;\n position: sticky;\n top: 0;\n z-index: 20;\n background: var(--color-bg-surface);\n border-bottom: 1px solid var(--color-border-default);\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 calc(var(--space-6) + var(--page-gutter));\n}\n/* The name and the page's name share a baseline and stand in the middle of the bar as one. */\n.lintje-top-bar__name { display: flex; align-items: center; gap: var(--space-1); min-width: 0; }\n.lintje-top-bar__words { display: flex; align-items: baseline; gap: 6px; min-width: 0; }\n/* The dashboard's name is a word, not a line, so it uses `--color-accent-text`. */\n.lintje-top-bar__dashboard {\n font: var(--text-dashboard);\n color: var(--color-accent-text);\n white-space: nowrap;\n}\n.lintje-top-bar__page {\n font-size: 1rem;\n color: var(--color-text-muted);\n opacity: 0;\n transition: opacity var(--dur-hover) var(--ease-in-motion);\n white-space: nowrap;\n}\n.lintje-top-bar__page.is-visible { opacity: 1; }\n\n.lintje-top-bar__actions { display: flex; flex: none; align-items: center; gap: var(--space-3); }\n.lintje-top-bar__key { margin-left: var(--space-1); }\n/* The tools of the navigation bar stand here on the page's surface; an element with a shadow\n root declares the tokens again on its own host, so they are set on each one too. */\n.lintje-top-bar__actions,\n.lintje-top-bar__actions > * {\n --color-nav-text: var(--color-text-primary);\n --color-nav-hover: var(--color-bg-subtle);\n --lintje-tool-height: var(--h-button-chrome);\n}\n\n.lintje-toggle-group {\n display: flex;\n height: var(--h-button-chrome);\n border: 1px solid var(--color-border-strong);\n}\n.lintje-toggle-group__option {\n position: relative;\n width: var(--h-button-chrome);\n display: flex; align-items: center; justify-content: center;\n color: var(--color-text-primary);\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n/* Without a file for its icon the option shows its short Dutch word instead.\n The group keeps its height; only the option gets as wide as the word. */\n.lintje-toggle-group__option--text {\n width: auto;\n padding: 0 var(--space-3);\n font-size: 0.875rem;\n font-weight: 700;\n white-space: nowrap;\n}\n.lintje-toggle-group__option:hover { background: var(--color-bg-subtle); }\n/* A 40 px option reaches the 48 px target through a transparent hit area 4 px above and\n below; the options of a group touch, so it does not reach sideways. */\n.lintje-toggle-group__option::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2)) 0;\n}\n/* The chosen half has no border of its own — the group draws one around both —\n so the primary-fill border is an inset ring: the same\n 1 px line, drawn inside the box, so neither half moves a pixel. Invisible in\n light (the token is the primary there), the tint in dark. */\n.lintje-toggle-group__option.is-active {\n background: var(--color-action-primary);\n color: var(--color-action-primary-text);\n box-shadow: inset 0 0 0 1px var(--color-action-primary-border);\n}\n\n/* The panels' side inset: their own as they hang from a tool, the filter sheet's as a sheet. */\n.lintje-view__popover,\n.lintje-share__popover { --lintje-panel-inset: 14px; }\n\n/* \"Weergave\": the share menu's panel, with a group of words under each heading. */\n.lintje-view { position: relative; }\n/* A panel sets the text colour of its surface: on the navigation bar it would take the bar's. */\n.lintje-view__popover {\n position: absolute;\n right: 0; top: calc(100% + 4px);\n z-index: 41;\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 padding: var(--space-2) 0;\n animation: lintje-popover-in var(--dur-popover) var(--ease-in-motion);\n}\n.lintje-view__row { display: flex; padding: var(--space-1) var(--lintje-panel-inset) var(--space-2); }\n/* A theme's name stays one line; the panel grows to it. */\n.lintje-view__themes { white-space: nowrap; }\n\n.lintje-share { position: relative; }\n.lintje-share__scrim { position: fixed; inset: 0; z-index: 40; }\n.lintje-share__popover {\n position: absolute;\n right: 0; top: calc(100% + 4px);\n z-index: 41;\n width: 18.75rem;\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 padding: var(--space-2) 0;\n animation: lintje-popover-in var(--dur-popover) var(--ease-in-motion);\n}\n.lintje-share__heading {\n font-size: var(--label-size); font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking); text-transform: uppercase;\n color: var(--color-text-muted);\n padding: var(--space-3) var(--lintje-panel-inset) 4px;\n}\n.lintje-share__item {\n width: 100%;\n display: flex; align-items: center; gap: 10px;\n min-height: var(--h-target);\n padding: 0 var(--lintje-panel-inset);\n font-size: 1rem;\n text-align: left;\n color: var(--color-text-primary);\n}\n.lintje-share__item:hover { background: var(--color-bg-subtle); }\n/* Where an icon is still missing: the label keeps the column's text edge. */\n.lintje-share__gap { width: 16px; flex: none; }\n.lintje-share__qr {\n display: flex; flex-direction: column; align-items: center; gap: var(--space-3);\n padding: var(--space-2) var(--lintje-panel-inset) var(--space-3);\n}\n.lintje-share__hint { text-align: center; }\n.lintje-share__code { align-self: stretch; }\n.lintje-share__footer {\n font: var(--text-meta); color: var(--color-text-muted);\n padding: var(--space-2) var(--lintje-panel-inset) 0;\n margin-top: var(--space-2);\n border-top: 1px solid var(--color-border-default);\n}\n\n:where(.lintje-shell.is-phone) .lintje-top-bar { display: none; }\n\n/* Below 768 px \"Weergave\" and \"Delen\" open from below, as the filter sheet does. A phone has its\n own way to a phone, so the QR code is not offered there. */\n:where(.lintje-shell.is-phone) .lintje-share__scrim {\n z-index: 60;\n background: var(--color-overlay-page);\n animation: lintje-fade-in var(--dur-scrim) var(--ease-in-motion);\n}\n:where(.lintje-shell.is-phone) .lintje-view__popover,\n:where(.lintje-shell.is-phone) .lintje-share__popover,\n:where(.lintje-shell.is-phone) .lintje-navbar .lintje-view__popover,\n:where(.lintje-shell.is-phone) .lintje-navbar .lintje-share__popover {\n position: fixed;\n inset: auto 0 0 0;\n z-index: 61;\n width: auto;\n max-height: 88vh;\n overflow-y: auto;\n padding-bottom: var(--space-4);\n border: 0;\n border-top: 1px solid var(--color-border-popover);\n box-shadow: none;\n animation: lintje-sheet-in var(--dur-sheet) var(--ease-in-motion);\n}\n:where(.lintje-shell.is-phone) .lintje-view__popover,\n:where(.lintje-shell.is-phone) .lintje-share__popover { padding-top: 0; --lintje-panel-inset: var(--space-4); }\n:where(.lintje-shell.is-phone) .lintje-view__popover:focus,\n:where(.lintje-shell.is-phone) .lintje-share__popover:focus { outline: none; }\n:where(.lintje-shell.is-phone) .lintje-share__phone { display: none; }\n/* The filter sheet's head; it stays while the sheet scrolls. */\n.lintje-share__header {\n position: sticky;\n top: 0;\n z-index: 1;\n display: flex; align-items: center; gap: var(--space-2);\n margin-bottom: var(--space-2);\n padding: var(--space-4);\n background: var(--color-bg-surface);\n border-bottom: 1px solid var(--color-border-popover);\n}\n.lintje-share__title { flex: 1; margin: 0; font: var(--text-h2); }\n\n\n/* On paper the chrome is not part of the page. */\n@media print { .lintje-top-bar { display: none; } }\n\n/* Forced colours: the chosen half is carried by its fill and an inset\n ring, both of which the browser drops. Every half takes a 1 px border inside\n its own box — Canvas at rest, Highlight when chosen — so nothing moves. */\n@media (forced-colors: active) {\n .lintje-toggle-group__option { border: 1px solid Canvas; }\n .lintje-toggle-group__option.is-active { border-color: Highlight; }\n}\n", Y = "lintje-shell-main", X = (e) => "links" in e, Z = (e) => e?.navigation?.flatMap((e) => X(e) ? e.links : [e]).find((e) => e.active);
|
|
938
|
+
var Ae = "/* Header of the top layout, drawn by `header.ts` inside the caller's shadow root. */\n\n/* The logo bar sits above the veil, so an open submenu does not dim it. A box wider than a narrow\n phone is cut at both sides alike, which keeps the ribbon centred. */\n.lintje-logobar {\n position: relative;\n z-index: 31;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n min-height: var(--h-logobar);\n overflow: hidden;\n background: var(--color-logobar-bg);\n color: var(--color-logobar-text);\n}\n.lintje-logobar__home { display: block; flex: none; color: inherit; }\n/* The logo link's ring is drawn inside its box (`focus-inset`): the bar cuts what stands outside\n its top edge. */\n\n/* The environment outside production: the accent, not a status. */\n.lintje-logobar__environment {\n position: absolute;\n top: var(--space-6);\n right: calc(var(--page-pad-x) + var(--page-gutter));\n height: var(--h-chip);\n margin: 0;\n padding: 0 var(--space-3);\n background: var(--color-nav-environment-bg);\n color: var(--color-nav-environment-text);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n line-height: var(--h-chip);\n white-space: nowrap;\n}\n.lintje-logobar__environment-short { display: none; }\n/* On a phone the organisation's name reaches the right edge: the block shrinks to three letters above it. */\n:where(.lintje-shell.is-phone) .lintje-logobar__environment {\n top: var(--space-2);\n right: var(--space-4);\n height: var(--h-chip-field);\n line-height: var(--h-chip-field);\n}\n/* The full name stays for a screen reader; the three letters are only seen. */\n:where(.lintje-shell.is-phone) .lintje-logobar__environment-label {\n position: absolute;\n width: 1px; height: 1px;\n margin: -1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n:where(.lintje-shell.is-phone) .lintje-logobar__environment-short { display: inline; }\n\n/* The bar is the submenu's positioning context, which is why a group is not one. Hover, active\n and edge are set on the bar for what inherits, and on each element at its end, because an\n element with a shadow root declares the tokens again on its own host. */\n.lintje-navbar,\n.lintje-navbar__end > * {\n --color-nav-hover: var(--color-navbar-hover);\n --color-nav-active: var(--color-navbar-active);\n --color-nav-active-edge: var(--color-navbar-active-edge);\n}\n.lintje-navbar__end > * { --lintje-tool-height: var(--h-navbar); }\n/* The colour runs to the edges; the content keeps to `--page-gutter`. */\n.lintje-navbar {\n position: relative;\n z-index: 30;\n display: flex;\n align-items: stretch;\n justify-content: space-between;\n gap: 0 var(--space-4);\n height: var(--h-navbar);\n padding: 0 calc(var(--space-3) + var(--page-gutter)) 0\n calc(var(--page-pad-x) - var(--space-5) + var(--page-gutter));\n background: var(--color-nav-bg);\n color: var(--color-nav-text);\n}\n/* Both widths are measured (`SubmenuController`): neither may depend on whether the entries or\n \"Menu\" stand there. */\n.lintje-navbar__start { display: flex; flex: 1 1 auto; align-items: stretch; min-width: 0; }\n.lintje-navbar__entries { display: flex; flex: 1 1 0; align-items: stretch; min-width: 0; }\n.lintje-navbar__list { display: flex; flex: none; align-items: stretch; width: max-content; }\n/* Hanging from the bar's end, the overflow falls off the left, where the page gains no scroll. */\n.lintje-navbar__list.is-hidden {\n position: absolute;\n top: 0;\n right: 0;\n visibility: hidden;\n pointer-events: none;\n}\n.lintje-navbar__group { display: flex; }\n.lintje-navbar__end { display: flex; flex: none; align-items: center; gap: var(--space-1); }\n/* The orange ring disappears on the theme's fill, so the bar takes `--color-focus-on-theme`. The\n open entry and the submenu stand on the page's surface and keep the standard ring. */\n.lintje-navbar :focus-visible { outline-color: var(--color-focus-on-theme); }\n.lintje-navbar .lintje-navbar__entry.is-open:focus-visible,\n.lintje-navbar .lintje-navbar__submenu :focus-visible { outline-color: var(--color-focus); }\n\n/* The edge is always there on both sides so the word stays centred; transparent until active. */\n.lintje-navbar__entry {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n box-sizing: border-box;\n height: var(--h-navbar);\n padding: 0 var(--space-5);\n border-top: var(--nav-edge) solid transparent;\n border-bottom: var(--nav-edge) solid transparent;\n color: var(--color-nav-text);\n font: var(--text-body);\n white-space: nowrap;\n text-decoration: none;\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-navbar__entry:hover:not(.is-unavailable) { background: var(--color-navbar-hover); }\n.lintje-navbar__entry:hover:not(.is-unavailable) .lintje-navbar__label { text-decoration: underline; }\n/* Not bold: the bold cut sets narrower and reads as another size beside its neighbours. */\n.lintje-navbar__entry.is-active {\n background: var(--color-navbar-active);\n border-bottom-color: var(--color-navbar-active-edge);\n color: var(--color-nav-active-text);\n}\n.lintje-navbar__entry.is-open,\n.lintje-navbar__entry.is-open:hover {\n background: var(--color-bg-surface);\n border-bottom-color: transparent;\n color: var(--color-navbar-open-text);\n}\n.lintje-navbar__entry.is-open .lintje-navbar__label { text-decoration: none; }\n.lintje-navbar__entry.is-unavailable { color: var(--color-nav-disabled); cursor: default; }\n\n/* The shadow falls down only: `clip-path` cuts what would fall on the bar, so the open entry and\n the panel stay one shape. `--lintje-navbar-room` is measured. */\n.lintje-navbar__submenu {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n padding: var(--space-8) calc(var(--page-pad-x) + var(--page-gutter)) var(--space-10);\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n border-bottom: 1px solid var(--color-border-default);\n box-shadow: var(--shadow-popover);\n clip-path: inset(0 0 -32px 0);\n max-height: var(--lintje-navbar-room, calc(100dvh - var(--h-navbar)));\n box-sizing: border-box;\n overflow-y: auto;\n overscroll-behavior: contain;\n}\n.lintje-navbar__heading {\n margin: var(--space-6) 0 var(--space-3);\n color: var(--color-text-muted);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n}\n.lintje-navbar__heading:first-child { margin-top: 0; }\n.lintje-navbar__pages {\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: var(--space-4);\n margin: 0;\n padding: 0;\n list-style: none;\n animation:\n lintje-fade-in var(--dur-popover) linear,\n lintje-drop-in var(--dur-submenu) ease;\n}\n@media (max-width: 1023px) {\n .lintje-navbar__pages { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n}\n.lintje-navbar__item { display: flex; }\n\n/* The 1 px edge is always there, so hover moves nothing. */\n.lintje-navbar__page {\n flex: 1;\n display: flex;\n align-items: center;\n gap: var(--space-3);\n box-sizing: border-box;\n min-width: 0;\n min-height: 4rem;\n padding: var(--space-3) var(--space-4);\n background: var(--color-bg-subtle);\n border: 1px solid transparent;\n color: var(--color-text-primary);\n font: var(--text-body);\n text-decoration: none;\n transition: border-color var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-navbar__page-text { display: flex; flex: 1; flex-direction: column; min-width: 0; }\n.lintje-navbar__page .lintje-navbar__label { font-weight: 700; }\n.lintje-navbar__metric { color: var(--color-text-muted); font: var(--text-small); }\n.lintje-navbar__metric-value { color: var(--color-text-primary); }\n.lintje-navbar__page:hover:not(.is-unavailable) { border-color: var(--color-accent-line); }\n.lintje-navbar__page:hover:not(.is-unavailable) .lintje-navbar__label { text-decoration: underline; }\n.lintje-navbar__page.is-active {\n box-shadow: inset var(--nav-edge) 0 0 var(--color-accent-line);\n color: var(--color-accent-text);\n}\n.lintje-navbar__page.is-unavailable,\n.lintje-navbar__page.is-unavailable .lintje-navbar__metric-value { color: var(--color-text-muted); cursor: default; }\n.lintje-navbar__page.is-no-access .lintje-navbar__label { text-decoration: line-through; }\n\n/* Fixed to the viewport: the header may stand in a box of its own height above the page. */\n.lintje-header-scrim {\n position: fixed;\n inset: 0;\n z-index: 20;\n background: var(--color-overlay-nav);\n pointer-events: none;\n animation: lintje-fade-in var(--dur-scrim) var(--ease-in-motion);\n}\n\n@media print {\n .lintje-logobar, .lintje-navbar, .lintje-header-scrim { display: none; }\n}\n\n/* Forced colours: the browser drops the fill that carries the active page and the open group. */\n@media (forced-colors: active) {\n .lintje-navbar { border-bottom: 1px solid CanvasText; }\n .lintje-navbar__entry.is-active { border-bottom-color: Highlight; }\n .lintje-navbar__entry.is-open { outline: 1px solid CanvasText; outline-offset: -1px; }\n .lintje-navbar__entry.is-unavailable,\n .lintje-navbar__page.is-unavailable { color: GrayText; }\n .lintje-navbar__page { border-color: CanvasText; }\n .lintje-navbar__page.is-active { border-left: var(--nav-edge) solid Highlight; }\n .lintje-navbar__page.is-unavailable { border-color: GrayText; }\n .lintje-navbar__submenu { border: 1px solid CanvasText; }\n .lintje-navbar :focus-visible,\n .lintje-navbar .lintje-navbar__entry.is-open:focus-visible,\n .lintje-navbar .lintje-navbar__submenu :focus-visible { outline-color: Highlight; }\n}\n", je = ":host { display: block; min-width: 0; min-height: 100vh; }\n:host([hidden]) { display: none; }\n/* A short page is one sheet, not one sheet with the rest left empty. */\n@media print { :host { min-height: 0; } }\n\n/* ------------------------------------------------------------------------ */\n\n/*\n * The page's left edge, for what pins itself to the viewport (the filter bar): the menu's width\n * beside the page, nothing above it. Custom properties reach the slotted content.\n */\n.lintje-shell {\n --lintje-shell-left: 0px;\n position: relative;\n display: flex;\n flex-direction: column;\n min-height: inherit;\n background: var(--color-bg-page);\n color: var(--color-text-primary);\n}\n/* A specimen's bars (z-index 25–31) would otherwise cover the outer shell's open menus. */\n.lintje-shell.is-nested { isolation: isolate; }\n.lintje-shell--side { --lintje-shell-left: var(--w-rail); flex-direction: row; }\n@media (min-width: 1440px) {\n .lintje-shell--side:not(.is-unpinned) { --lintje-shell-left: var(--w-nav); }\n}\n.lintje-shell--side:where(.is-phone) { --lintje-shell-left: 0px; }\n.lintje-shell__column {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n\n/* \"Naar de inhoud\": hidden until focused. The ring is drawn inside the box (`focus-inset`):\n outside it would lie on the theme fill (1.89:1, on Defensie 1:1); inside, its neighbour is\n white. */\n.lintje-shell__skip {\n position: absolute;\n top: var(--space-2);\n left: var(--space-2);\n z-index: 50;\n display: inline-flex;\n align-items: center;\n min-height: var(--h-touch);\n padding: var(--space-2) var(--space-4);\n background: var(--color-bg-surface);\n color: var(--color-link);\n font: var(--text-ui);\n text-decoration: underline;\n box-shadow: var(--shadow-popover);\n}\n.lintje-shell__skip:not(:focus) {\n width: 1px;\n height: 1px;\n min-height: 0;\n padding: 0;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n box-shadow: none;\n}\n\n/* The main region takes the skip link's focus; it is not a control and draws no ring. */\n.lintje-shell__main {\n display: flex;\n flex-direction: column;\n flex: 1 0 auto;\n min-width: 0;\n}\n.lintje-shell__main:focus { outline: none; }\n/* Without content the last edge-to-edge part takes the room left: a conversation keeps its\n question box at the bottom of a short page. */\n.lintje-shell__main.is-bare ::slotted([slot='full']) { flex: 1 0 auto; }\n\n/* The content keeps to the design system's maximum width, as the bars above it do. */\n.lintje-shell__content {\n display: flex;\n flex-direction: column;\n gap: var(--grid-gutter);\n padding: var(--page-pad-y) calc(var(--page-pad-x) + var(--page-gutter)) var(--space-10);\n}\n.lintje-shell__content[hidden] { display: none; }\n:where(.lintje-shell.is-phone) .lintje-shell__content { padding: var(--space-4) var(--space-4) var(--space-8); gap: var(--space-3); }\n\n/*\n * Top layout. The navigation bar cannot be `sticky`: it would stick inside the header's own box\n * and leave with it, so its slot keeps the bar's height (`--h-navbar`) and the bar is pinned\n * once the slot has left the viewport.\n */\n.lintje-shell__sentinel { height: 1px; margin-bottom: -1px; }\n.lintje-shell__nav { position: relative; z-index: 25; min-height: var(--h-navbar); }\n.lintje-shell__nav.is-stuck .lintje-navbar {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n}\n\n/* Below 768 px the mobile header is the bar under the logo bar; its slot keeps the height. */\n.lintje-shell__mobile-bar { height: var(--h-topbar); }\n.lintje-shell__mobile-pin { position: relative; z-index: 25; }\n.lintje-shell__mobile-bar.is-stuck .lintje-shell__mobile-pin {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n}\n.lintje-shell--top .lintje-mobile-header {\n position: static;\n height: var(--h-topbar);\n align-items: center;\n gap: var(--space-3);\n}\n.lintje-shell--top .lintje-mobile-header__actions { margin-top: 0; flex: none; }\n.lintje-shell--top .lintje-mobile-menu {\n position: absolute;\n inset: 100% 0 auto 0;\n height: calc(100dvh - var(--h-topbar));\n}\n/* 16 px so two lines fit inside the 56 px bar; longer is cut with an ellipsis. */\n.lintje-mobile-header__title {\n display: -webkit-box;\n min-width: 0;\n overflow: hidden;\n color: var(--color-nav-text);\n font: var(--text-dashboard);\n font-size: 1rem;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n}\n/* The logo bar already shows the environment. */\n.lintje-shell--top .lintje-mobile-menu__environment { display: none; }\n\n/* The page's one h1; cut before it can push the entries out. */\n.lintje-shell__name {\n flex: 0 1 auto;\n min-width: 0;\n max-width: 24rem;\n margin: 0;\n padding: 0 var(--space-5);\n overflow: hidden;\n color: var(--color-nav-text);\n font: var(--text-dashboard);\n line-height: var(--h-navbar);\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n/* Bare glyphs in a bar; on the navigation bar their ring is the on-theme one (`header.css`). */\n.lintje-shell__tool {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: none;\n width: var(--h-touch);\n height: var(--lintje-tool-height, var(--h-touch));\n color: var(--color-nav-text);\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-shell__tool:hover { background: var(--color-nav-hover); }\n.lintje-shell__tool--text {\n width: auto;\n padding: 0 var(--space-3);\n font: var(--text-ui);\n}\n.lintje-navbar .lintje-shell__tool { height: var(--h-navbar); }\n\n/* The panels hang from the bar, not the tool. They stand on the page's surface: standard ring. */\n.lintje-navbar .lintje-view,\n.lintje-navbar .lintje-share { position: static; }\n.lintje-navbar .lintje-view__popover,\n.lintje-navbar .lintje-share__popover {\n top: 100%;\n right: calc(var(--space-3) + var(--page-gutter));\n}\n.lintje-navbar .lintje-view__popover :focus-visible,\n.lintje-navbar .lintje-share__popover :focus-visible { outline-color: var(--color-focus); }\n\n.lintje-shell__sheet-user { border-top: 1px solid var(--color-nav-line); }\n\n/* On paper the bars give way to the logo and the application's name; the screen never shows it. */\n.lintje-shell__print-head { display: none; }\n\n@media print {\n .lintje-shell__skip,\n .lintje-shell__sentinel,\n .lintje-shell__nav,\n .lintje-shell__mobile-bar { display: none; }\n .lintje-shell__print-head {\n display: block;\n border-bottom: 1px solid var(--color-border-default);\n }\n .lintje-shell__print-logo {\n display: flex;\n justify-content: center;\n min-height: var(--h-logobar);\n }\n .lintje-shell__print-name {\n margin: 0;\n padding: var(--space-3) 0;\n color: var(--color-text-primary);\n font: var(--text-dashboard);\n }\n}\n\n@media (forced-colors: active) {\n .lintje-navbar .lintje-view__popover :focus-visible,\n .lintje-navbar .lintje-share__popover :focus-visible { outline-color: Highlight; }\n}\n", Me = "\n/* Dark is its own surface, not an inversion: every colour here is a `--color-nav-*` token. */\n.lintje-nav {\n width: var(--w-nav);\n flex: none;\n /* `align-self: flex-start`: a stretched flex child would make sticky do nothing. */\n position: sticky;\n top: 0;\n align-self: flex-start;\n height: 100vh;\n background: var(--color-nav-bg);\n color: var(--color-nav-text);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n /* Above the page also while the rail collapses: with a z-index only while expanded,\n later positioned content (charts, KPI tiles) painted over the shrinking menu. */\n z-index: 30;\n box-shadow: var(--shadow-nav);\n /* The margin mirrors the width growth, so width + margin-right is 72 px at every moment;\n otherwise the content jumps 216 px for one frame. */\n transition:\n width var(--dur-rail) var(--ease-in-motion),\n margin-right var(--dur-rail) var(--ease-in-motion);\n}\n/* The orange ring disappears into the theme fill: the menu takes the on-theme ring. */\n.lintje-nav :focus-visible { outline-color: var(--color-focus-on-theme); }\n.lintje-nav--rail { width: var(--w-rail); margin-right: 0; }\n/* Expanding lies on top of the content: 288 px drawn, 72 px taken. A negative right margin does\n that; `fixed` or `absolute` would make the page jump. */\n.lintje-nav--rail.is-expanded {\n width: var(--w-nav);\n margin-right: calc(var(--w-rail) - var(--w-nav));\n}\n/* The overlay behind the expanded rail. A sibling of the nav: inside its stacking context it\n would darken the menu itself. */\n.lintje-nav__scrim {\n position: fixed;\n inset: 0;\n z-index: 29;\n background: var(--color-overlay-nav);\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--dur-rail) var(--ease-in-motion);\n}\n.lintje-nav__scrim.is-visible { opacity: 1; }\n\n.lintje-nav__header {\n height: var(--h-nav-head);\n flex: none;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 0 var(--space-4) 0 12px;\n}\n\n.lintje-nav__pin {\n position: relative;\n width: var(--h-icon-button); height: var(--h-icon-button);\n margin-top: 12px;\n display: flex; align-items: center; justify-content: center;\n color: var(--color-nav-text);\n background: transparent;\n flex: none;\n}\n.lintje-nav__pin--text {\n width: auto;\n padding: 0 var(--space-2);\n font-size: 0.875rem;\n font-weight: 700;\n white-space: nowrap;\n}\n/* The pin and Afmelden: a transparent hit area takes the target to 48 px. */\n.lintje-nav__pin::after,\n.lintje-nav__logout-button::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2));\n}\n.lintje-nav__pin { transition: background var(--dur-hover) var(--ease-in-motion); }\n.lintje-nav__pin:hover { background: var(--color-nav-hover); }\n\n/* No native bar: a styled one takes width in every browser and the rows' fill would stop short\n of the menu's edge. `NavScrollbar` sizes and places the thumb drawn instead. */\n.lintje-nav__list { flex: 1; overflow-y: auto; overflow-x: hidden; scrollbar-width: none; }\n.lintje-nav__list::-webkit-scrollbar { display: none; }\n.lintje-nav__thumb {\n position: absolute;\n top: 0; right: 0;\n width: var(--space-2);\n height: 0;\n /* The menu's second ink reads on its fill and on a hovered row. */\n background: var(--color-nav-text-sub);\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--dur-hover) var(--ease-in-motion);\n}\n/* There while the pointer is on the menu or a drag lasts; the keyboard's focus shows it at once. */\n.lintje-nav:hover .lintje-nav__thumb,\n.lintje-nav__thumb.is-dragging,\n.lintje-nav__list:focus-within + .lintje-nav__thumb { opacity: 1; pointer-events: auto; }\n.lintje-nav__list:focus-within + .lintje-nav__thumb { transition: none; }\n.lintje-nav__group { display: flex; flex-direction: column; }\n\n/* The same height in both modes, so every row below stays in place when the rail expands. */\n.lintje-nav__section-heading {\n position: relative;\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n color: var(--color-nav-text-sub);\n padding: 22px var(--space-5) 6px;\n white-space: nowrap;\n margin: 0;\n}\n/* A line in the rail, text once it expands: the text fades in 80 ms after the width starts. */\n.lintje-nav__section-label {\n display: block;\n transition: opacity 160ms var(--ease-in-motion) 80ms, transform var(--dur-base) var(--ease-in-motion) 80ms;\n}\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__section-label {\n opacity: 0;\n transform: translateX(-8px);\n transition: opacity 60ms var(--ease-out-motion), transform 0ms linear 60ms;\n}\n.lintje-nav__separator {\n position: absolute;\n left: 14px; right: 14px;\n top: 50%;\n height: 1px;\n background: var(--color-nav-line);\n opacity: 0;\n transform: scaleX(0);\n transform-origin: left center;\n transition: transform 140ms var(--ease-out-motion), opacity 0ms linear 140ms;\n}\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__separator {\n opacity: 1;\n transform: none;\n transition: transform 160ms var(--ease-in-motion) 60ms;\n}\n\n/* One row in every mode. A 4 px border + 22 px padding centres the 20 px icon in the 72 px rail,\n in line with the logo. Expanding animates only the width, so the icon stays in place. */\n.lintje-nav__item {\n position: relative;\n height: var(--h-nav-row);\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: var(--space-3);\n padding: 0 22px;\n border-left: var(--nav-edge) solid transparent;\n font-size: 1rem;\n color: var(--color-nav-text);\n text-decoration: none;\n white-space: nowrap;\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-nav__item:hover:not(.is-no-page):not(.is-no-access) {\n background: var(--color-nav-hover);\n}\n.lintje-nav__item.is-active {\n background: var(--color-nav-active);\n border-left-color: var(--color-nav-active-edge);\n color: var(--color-nav-active-text);\n /* Not bold: the bold cut sets narrower and reads as another font size beside its neighbours. */\n}\n.lintje-nav__item:focus-visible { outline-offset: -3px; }\n\n.lintje-nav__item.is-no-page { color: var(--color-nav-disabled); cursor: default; }\n.lintje-nav__item.is-no-access { color: var(--color-nav-disabled); text-decoration: line-through; cursor: not-allowed; }\n\n.lintje-nav__label { flex: 1; overflow: hidden; text-overflow: ellipsis; }\n.lintje-nav--rail.is-expanded .lintje-nav__label,\n.lintje-nav--rail.is-expanded .lintje-nav__metric {\n animation: lintje-nav-text-in var(--dur-base) var(--ease-in-motion) 80ms backwards;\n}\n@keyframes lintje-nav-text-in { from { opacity: 0; transform: translateX(-8px); } }\n.lintje-nav__metric { font-size: 0.875rem; color: var(--color-nav-text-sub); flex: none; }\n.lintje-nav__item.is-no-access .lintje-nav__metric { text-decoration: none; }\n.lintje-nav__item.is-no-page .lintje-nav__metric { color: var(--color-nav-disabled); }\n\n/* The badge is `badge.css`, adopted by the shell. In the rail a word (\"NIEUW\")\n does not fit: it becomes a dot, so the rail does not overflow. */\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__badge {\n position: absolute; top: 2px; right: var(--space-1);\n}\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__badge--new {\n min-width: 8px; width: 8px; height: 8px; padding: 0;\n border-radius: 999px;\n font-size: 0; overflow: hidden;\n}\n\n/* Environment band, only outside production. Its fill is the theme's accent, not the attention\n status: on `defensie` (menu `#E17000`) the accent draws a blue band that reads against it. */\n.lintje-nav__environment {\n position: relative;\n flex: none;\n height: 2rem;\n margin: 0;\n background: var(--color-nav-environment-bg);\n color: var(--color-nav-environment-text);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n text-align: center;\n line-height: 2rem;\n white-space: nowrap;\n overflow: hidden;\n}\n.lintje-nav__environment-label,\n.lintje-nav__environment-short { position: absolute; inset: 0; }\n.lintje-nav__environment-label {\n transition: opacity 160ms var(--ease-in-motion) 80ms;\n}\n.lintje-nav__environment-short { opacity: 0; transition: opacity 60ms var(--ease-out-motion); }\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__environment-label { opacity: 0; transition: opacity 60ms var(--ease-out-motion); }\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__environment-short { opacity: 1; transition: opacity 160ms var(--ease-in-motion) 80ms; }\n\n.lintje-nav__feedback { flex: none; }\n.lintje-nav__version { font-family: var(--font-mono); font-size: 0.875rem; letter-spacing: .02em; margin-left: auto; }\n/* Without a contact the version gets a row with the menu row's geometry, so the user block does\n not move; not `.lintje-nav__item`, which carries a hover. */\n.lintje-nav__version-row {\n flex: none;\n height: var(--h-nav-row);\n margin: 0;\n display: flex;\n align-items: center;\n padding: 0 22px;\n border-left: var(--nav-edge) solid transparent;\n}\n\n/* \"Afmelden\": a real form, because signing out is a POST that leaves the page. */\n/* The form is `hidden` in the rail, not transparent, so the button is out of the tab order. */\n.lintje-nav__logout { flex: none; margin-left: auto; }\n.lintje-nav__logout[hidden] { display: none; }\n.lintje-nav__logout-button {\n position: relative;\n width: var(--h-icon-button); height: var(--h-icon-button);\n display: flex; align-items: center; justify-content: center;\n /* Quiet at rest; full text colour on hover and focus. */\n color: var(--color-nav-text-sub);\n background: transparent;\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-nav__logout-button:hover,\n.lintje-nav__logout-button:focus-visible { background: var(--color-nav-hover); color: var(--color-nav-text); }\n.lintje-nav__logout-text { font-size: 0.875rem; font-weight: 700; white-space: nowrap; padding: 0 var(--space-2); }\n\n.lintje-nav__footer {\n flex: none;\n display: flex; align-items: center; gap: 10px;\n padding: var(--space-4) var(--space-5) var(--space-5) var(--space-4);\n border-top: 1px solid var(--color-nav-line);\n font-size: 1rem;\n}\n/* As high as name and role together (two 1.25rem lines); the left padding keeps it centred in\n the rail. */\n.lintje-nav__avatar {\n width: 2.5rem; height: 2.5rem; flex: none;\n display: flex; align-items: center; justify-content: center;\n border-radius: var(--radius-round);\n background: var(--color-nav-avatar-bg);\n color: var(--color-nav-avatar-text);\n font-size: 1rem; font-weight: 700;\n}\n/* Name and role fade and slide in like the headings; `nowrap` keeps one line. */\n.lintje-nav__user {\n display: flex; flex-direction: column; line-height: 1.25rem;\n min-width: 0; flex: 1 1 auto; white-space: nowrap;\n transition: opacity 160ms var(--ease-in-motion) 80ms, transform var(--dur-base) var(--ease-in-motion) 80ms;\n}\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__user { opacity: 0; transform: translateX(-8px); transition: none; }\n.lintje-nav__user > b,\n.lintje-nav__role { overflow: hidden; text-overflow: ellipsis; }\n.lintje-nav__role { font-size: 0.875rem; color: var(--color-nav-text-sub); }\n\n:where(.lintje-shell.is-phone) .lintje-nav,\n:where(.lintje-shell.is-phone) .lintje-nav__scrim { display: none; }\n\n/* An emblem's black, if it has any, draws in the menu's text colour (`currentColor`). */\n.lintje-nav__home { display: block; flex: none; color: var(--color-nav-text); }\n\n\n@media print { .lintje-nav, .lintje-nav__scrim { display: none; } }\n\n/* Forced colours: the active row is a fill and a 4 px edge; the fill is dropped and the edge\n turns Highlight. A row without a page or access is GrayText. The ring is Highlight. The\n shadow is dropped, so an outline keeps the menu's edge against the page. */\n@media (forced-colors: active) {\n .lintje-nav { outline: 1px solid CanvasText; }\n .lintje-nav :focus-visible { outline-color: Highlight; }\n .lintje-nav__item { border-left-color: Canvas; }\n .lintje-nav__item.is-active { border-left-color: Highlight; }\n .lintje-nav__item.is-no-page,\n .lintje-nav__item.is-no-access { color: GrayText; }\n .lintje-nav__avatar { border: 1px solid CanvasText; }\n .lintje-nav__thumb { forced-color-adjust: none; background: CanvasText; }\n}\n", J = "\n/* One region: the open menu's dialog and the box its focus trap keeps Tab inside. It shows no\n ring when the trap pulls back stray focus. The region sticks, not the header: a sticky box\n stays inside its parent, and this one is as tall as the header. */\n.lintje-mobile-chrome { flex: none; position: sticky; top: 0; z-index: 25; }\n.lintje-mobile-chrome:focus { outline: none; }\n\n.lintje-mobile-header {\n display: none;\n height: var(--h-mobile-header);\n flex: none;\n background: var(--color-nav-bg);\n align-items: flex-start;\n justify-content: space-between;\n padding: 0 var(--space-4);\n /* Tools that do not fit must not widen the page, or a phone zooms out and they seem to fit\n (`headerCompact`). Sideways only: the focus ring stays inside the padding. */\n overflow-x: clip;\n}\n:where(.lintje-shell.is-phone) .lintje-mobile-header { display: flex; }\n/* On the theme fill the ring is the on-theme one, as in the desktop menu. */\n.lintje-mobile-header :focus-visible,\n.lintje-mobile-menu :focus-visible { outline-color: var(--color-focus-on-theme); }\n/* \"Weergave\" and \"Delen\" open from this header as sheets on the page's surface: standard ring. */\n.lintje-mobile-header .lintje-view__popover :focus-visible,\n.lintje-mobile-header .lintje-share__popover :focus-visible { outline-color: var(--color-focus); }\n\n.lintje-mobile-header__actions { margin-top: var(--space-3); display: flex; gap: var(--space-2); }\n.lintje-mobile-header__button {\n height: var(--h-touch);\n padding: 0 var(--space-3);\n background: var(--color-nav-active);\n color: var(--color-nav-text);\n border: 1px solid var(--color-nav-line);\n font-size: 0.875rem;\n font-weight: 700;\n display: flex; align-items: center; justify-content: center; gap: var(--space-2);\n /* Square when only the glyph shows (`headerCompact`). */\n min-width: var(--h-touch);\n}\n/* Without room the words are read, not shown: the glyph and the badge stay. */\n.lintje-mobile-header.is-compact .lintje-mobile-header__word {\n position: absolute;\n width: 1px; height: 1px;\n margin: -1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n/* The modified-filters count is the badge's `attention` tone: near-black on the\n orange, because white on #E17000 is 3.2:1. */\n\n.lintje-mobile-menu {\n position: fixed;\n inset: var(--h-mobile-header) 0 0 0;\n z-index: 24;\n background: var(--color-nav-bg);\n color: var(--color-nav-text);\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n animation: lintje-menu-in var(--dur-sheet) var(--ease-in-motion);\n}\n.lintje-mobile-menu.is-leaving {\n animation: lintje-menu-out var(--dur-sheet) var(--ease-out-motion) forwards;\n pointer-events: none;\n}\n.lintje-mobile-menu__list { flex: 1; padding-bottom: var(--space-4); }\n.lintje-mobile-menu__heading {\n font-size: var(--label-size); font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking); text-transform: uppercase;\n color: var(--color-nav-text-sub);\n padding: 22px var(--space-5) 6px;\n}\n.lintje-mobile-menu__item {\n height: var(--h-touch);\n display: flex; align-items: center; gap: var(--space-3);\n padding: 0 var(--space-5);\n border-left: var(--nav-edge) solid transparent;\n color: var(--color-nav-text);\n font-size: 1rem;\n text-decoration: none;\n}\n.lintje-mobile-menu__item.is-active {\n background: var(--color-nav-active);\n border-left-color: var(--color-nav-active-edge);\n color: var(--color-nav-active-text);\n /* Not bold: the bold cut sets narrower and reads as another font size beside its neighbours. */\n}\n.lintje-mobile-menu__item.is-muted { color: var(--color-nav-disabled); }\n.lintje-mobile-menu__label { flex: 1; }\n.lintje-mobile-menu__meta { font-size: 0.875rem; color: var(--color-nav-disabled); flex: none; }\n/* The environment band and the feedback row with the version: below 768 px there is no rail,\n and a page's own footer is the host's, so this is the only place they can stand. */\n.lintje-mobile-menu__environment {\n flex: none;\n height: 2rem;\n margin: 0;\n background: var(--color-nav-environment-bg);\n color: var(--color-nav-environment-text);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n text-align: center;\n line-height: 2rem;\n white-space: nowrap;\n overflow: hidden;\n}\n.lintje-mobile-menu__feedback { flex: none; margin: 0; }\n.lintje-mobile-menu__version {\n flex: none;\n margin-left: auto;\n font-family: var(--font-mono); font-size: 0.875rem; letter-spacing: .02em;\n color: var(--color-nav-text-sub);\n}\n\n.lintje-mobile-header__home { display: block; flex: none; color: var(--color-nav-text); }\n\n\n@media print { .lintje-mobile-header, .lintje-mobile-menu { display: none; } }\n\n/* Forced colours: the active row's 4 px edge is Highlight, a muted row GrayText. */\n@media (forced-colors: active) {\n .lintje-mobile-header :focus-visible,\n .lintje-mobile-menu :focus-visible { outline-color: Highlight; }\n .lintje-mobile-header .lintje-view__popover :focus-visible,\n .lintje-mobile-header .lintje-share__popover :focus-visible { outline-color: Highlight; }\n .lintje-mobile-menu__item { border-left-color: Canvas; }\n .lintje-mobile-menu__item.is-active { border-left-color: Highlight; }\n .lintje-mobile-menu__item.is-muted { color: GrayText; }\n}\n", Ne = "/* The bar, the two toggle groups and the share popover are all drawn by the shell itself. */\n\n.lintje-top-bar {\n height: var(--h-topbar);\n flex: none;\n position: sticky;\n top: 0;\n z-index: 20;\n background: var(--color-bg-surface);\n border-bottom: 1px solid var(--color-border-default);\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 calc(var(--space-6) + var(--page-gutter));\n}\n/* The name and the page's name share a baseline and stand in the middle of the bar as one. */\n.lintje-top-bar__name { display: flex; align-items: center; gap: var(--space-1); min-width: 0; }\n.lintje-top-bar__words { display: flex; align-items: baseline; gap: 6px; min-width: 0; }\n/* The dashboard's name is a word, not a line, so it uses `--color-accent-text`. */\n.lintje-top-bar__dashboard {\n font: var(--text-dashboard);\n color: var(--color-accent-text);\n white-space: nowrap;\n}\n.lintje-top-bar__page {\n font-size: 1rem;\n color: var(--color-text-muted);\n opacity: 0;\n transition: opacity var(--dur-hover) var(--ease-in-motion);\n white-space: nowrap;\n}\n.lintje-top-bar__page.is-visible { opacity: 1; }\n\n.lintje-top-bar__actions { display: flex; flex: none; align-items: center; gap: var(--space-3); }\n.lintje-top-bar__key { margin-left: var(--space-1); }\n/* The tools of the navigation bar stand here on the page's surface; an element with a shadow\n root declares the tokens again on its own host, so they are set on each one too. */\n.lintje-top-bar__actions,\n.lintje-top-bar__actions > * {\n --color-nav-text: var(--color-text-primary);\n --color-nav-hover: var(--color-bg-subtle);\n --lintje-tool-height: var(--h-button-chrome);\n}\n\n.lintje-toggle-group {\n display: flex;\n height: var(--h-button-chrome);\n border: 1px solid var(--color-border-strong);\n}\n.lintje-toggle-group__option {\n position: relative;\n width: var(--h-button-chrome);\n display: flex; align-items: center; justify-content: center;\n color: var(--color-text-primary);\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n/* Without a file for its icon the option shows its short Dutch word instead.\n The group keeps its height; only the option gets as wide as the word. */\n.lintje-toggle-group__option--text {\n width: auto;\n padding: 0 var(--space-3);\n font-size: 0.875rem;\n font-weight: 700;\n white-space: nowrap;\n}\n.lintje-toggle-group__option:hover { background: var(--color-bg-subtle); }\n/* A 40 px option reaches the 48 px target through a transparent hit area 4 px above and\n below; the options of a group touch, so it does not reach sideways. */\n.lintje-toggle-group__option::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2)) 0;\n}\n/* The chosen half has no border of its own — the group draws one around both —\n so the primary-fill border is an inset ring: the same\n 1 px line, drawn inside the box, so neither half moves a pixel. Invisible in\n light (the token is the primary there), the tint in dark. */\n.lintje-toggle-group__option.is-active {\n background: var(--color-action-primary);\n color: var(--color-action-primary-text);\n box-shadow: inset 0 0 0 1px var(--color-action-primary-border);\n}\n\n/* The panels' side inset: their own as they hang from a tool, the filter sheet's as a sheet. */\n.lintje-view__popover,\n.lintje-share__popover { --lintje-panel-inset: 14px; }\n\n/* \"Weergave\": the share menu's panel, with a group of words under each heading. */\n.lintje-view { position: relative; }\n/* A panel sets the text colour of its surface: on the navigation bar it would take the bar's. */\n.lintje-view__popover {\n position: absolute;\n right: 0; top: calc(100% + 4px);\n z-index: 41;\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 padding: var(--space-2) 0;\n animation: lintje-popover-in var(--dur-popover) var(--ease-in-motion);\n}\n.lintje-view__row { display: flex; padding: var(--space-1) var(--lintje-panel-inset) var(--space-2); }\n/* A theme's name stays one line; the panel grows to it. */\n.lintje-view__themes { white-space: nowrap; }\n\n.lintje-share { position: relative; }\n.lintje-share__scrim { position: fixed; inset: 0; z-index: 40; }\n.lintje-share__popover {\n position: absolute;\n right: 0; top: calc(100% + 4px);\n z-index: 41;\n width: 18.75rem;\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 padding: var(--space-2) 0;\n animation: lintje-popover-in var(--dur-popover) var(--ease-in-motion);\n}\n.lintje-share__heading {\n font-size: var(--label-size); font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking); text-transform: uppercase;\n color: var(--color-text-muted);\n padding: var(--space-3) var(--lintje-panel-inset) 4px;\n}\n.lintje-share__item {\n width: 100%;\n display: flex; align-items: center; gap: 10px;\n min-height: var(--h-target);\n padding: 0 var(--lintje-panel-inset);\n font-size: 1rem;\n text-align: left;\n color: var(--color-text-primary);\n}\n.lintje-share__item:hover { background: var(--color-bg-subtle); }\n/* Where an icon is still missing: the label keeps the column's text edge. */\n.lintje-share__gap { width: 16px; flex: none; }\n.lintje-share__qr {\n display: flex; flex-direction: column; align-items: center; gap: var(--space-3);\n padding: var(--space-2) var(--lintje-panel-inset) var(--space-3);\n}\n.lintje-share__hint { text-align: center; }\n.lintje-share__code { align-self: stretch; }\n.lintje-share__footer {\n font: var(--text-meta); color: var(--color-text-muted);\n padding: var(--space-2) var(--lintje-panel-inset) 0;\n margin-top: var(--space-2);\n border-top: 1px solid var(--color-border-default);\n}\n\n:where(.lintje-shell.is-phone) .lintje-top-bar { display: none; }\n\n/* Below 768 px \"Weergave\" and \"Delen\" open from below, as the filter sheet does. A phone has its\n own way to a phone, so the QR code is not offered there. */\n:where(.lintje-shell.is-phone) .lintje-share__scrim {\n z-index: 60;\n background: var(--color-overlay-page);\n animation: lintje-fade-in var(--dur-scrim) var(--ease-in-motion);\n}\n:where(.lintje-shell.is-phone) .lintje-view__popover,\n:where(.lintje-shell.is-phone) .lintje-share__popover,\n:where(.lintje-shell.is-phone) .lintje-navbar .lintje-view__popover,\n:where(.lintje-shell.is-phone) .lintje-navbar .lintje-share__popover {\n position: fixed;\n inset: auto 0 0 0;\n z-index: 61;\n width: auto;\n max-height: 88vh;\n overflow-y: auto;\n padding-bottom: var(--space-4);\n border: 0;\n border-top: 1px solid var(--color-border-popover);\n box-shadow: none;\n animation: lintje-sheet-in var(--dur-sheet) var(--ease-in-motion);\n}\n:where(.lintje-shell.is-phone) .lintje-view__popover,\n:where(.lintje-shell.is-phone) .lintje-share__popover { padding-top: 0; --lintje-panel-inset: var(--space-4); }\n:where(.lintje-shell.is-phone) .lintje-view__popover:focus,\n:where(.lintje-shell.is-phone) .lintje-share__popover:focus { outline: none; }\n:where(.lintje-shell.is-phone) .lintje-share__phone { display: none; }\n/* The filter sheet's head; it stays while the sheet scrolls. */\n.lintje-share__header {\n position: sticky;\n top: 0;\n z-index: 1;\n display: flex; align-items: center; gap: var(--space-2);\n margin-bottom: var(--space-2);\n padding: var(--space-4);\n background: var(--color-bg-surface);\n border-bottom: 1px solid var(--color-border-popover);\n}\n.lintje-share__title { flex: 1; margin: 0; font: var(--text-h2); }\n\n\n/* On paper the chrome is not part of the page. */\n@media print { .lintje-top-bar { display: none; } }\n\n/* Forced colours: the chosen half is carried by its fill and an inset\n ring, both of which the browser drops. Every half takes a 1 px border inside\n its own box — Canvas at rest, Highlight when chosen — so nothing moves. */\n@media (forced-colors: active) {\n .lintje-toggle-group__option { border: 1px solid Canvas; }\n .lintje-toggle-group__option.is-active { border-color: Highlight; }\n}\n", Y = "lintje-shell-main", X = (e) => "links" in e, Z = (e) => e?.navigation?.flatMap((e) => X(e) ? e.links : [e]).find((e) => e.active);
|
|
939
939
|
function Q(e) {
|
|
940
940
|
let t = [], n = null;
|
|
941
941
|
for (let r of e) X(r) ? (n = null, t.push({
|
|
@@ -944,15 +944,15 @@ function Q(e) {
|
|
|
944
944
|
})) : (n || t.push(n = { items: [] }), n.items.push(r));
|
|
945
945
|
return t;
|
|
946
946
|
}
|
|
947
|
-
var $ = class extends
|
|
948
|
-
constructor(...
|
|
949
|
-
super(...
|
|
950
|
-
if (
|
|
947
|
+
var $ = class extends a {
|
|
948
|
+
constructor(...n) {
|
|
949
|
+
super(...n), this.layout = "top", this.openGroup = null, this.barStuck = !1, this.railExpanded = !1, this.railRefocus = !1, this.menuOpen = !1, this.menuLeaving = !1, this.shareOpen = !1, this.sharePhone = !1, this.viewOpen = !1, this.toolsCompact = !1, this.headerCompact = !1, this.hasContent = !0, this.toastKind = "ok", this.wide = new o(this, ne), this.mobile = new o(this, t), this.submenu = new me(this), this.navScrollbar = new ve(this), this.store = new c(this), this.#e = new b(), this.#t = null, this.#n = null, this.#r = 0, this.#i = !1, this.#a = null, this.#o = [], this.#s = 0, this.#c = null, this.#l = new b(), this.#u = null, this.#d = null, this.#f = (t) => {
|
|
950
|
+
if (t.key === "Escape") {
|
|
951
951
|
if (this.#u) {
|
|
952
952
|
if (!this.#l.isTopmost()) return;
|
|
953
953
|
this.viewOpen = !1, this.shareOpen = !1;
|
|
954
954
|
} else if (this.viewOpen || this.shareOpen) {
|
|
955
|
-
if (!
|
|
955
|
+
if (!e(this)) return;
|
|
956
956
|
this.#y() ? this.closePanel(this.viewOpen ? ".lintje-view__button" : ".lintje-share__button") : (this.viewOpen = !1, this.shareOpen = !1);
|
|
957
957
|
} else this.menuOpen && this.#e.isTopmost() && (this.menuOpen = !1);
|
|
958
958
|
}
|
|
@@ -964,15 +964,15 @@ var $ = class extends v {
|
|
|
964
964
|
}
|
|
965
965
|
static {
|
|
966
966
|
this.styles = [
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
967
|
+
te,
|
|
968
|
+
p,
|
|
969
|
+
f(Ae),
|
|
970
|
+
f(je),
|
|
971
|
+
f(Me),
|
|
972
|
+
f(J),
|
|
973
|
+
f(ie),
|
|
974
|
+
f(ae),
|
|
975
|
+
f(Ne)
|
|
976
976
|
];
|
|
977
977
|
}
|
|
978
978
|
static {
|
|
@@ -993,7 +993,8 @@ var $ = class extends v {
|
|
|
993
993
|
toolsCompact: { state: !0 },
|
|
994
994
|
headerCompact: { state: !0 },
|
|
995
995
|
hasContent: { state: !0 },
|
|
996
|
-
toast: { state: !0 }
|
|
996
|
+
toast: { state: !0 },
|
|
997
|
+
toastKind: { state: !0 }
|
|
997
998
|
};
|
|
998
999
|
}
|
|
999
1000
|
get dataSettings() {
|
|
@@ -1023,7 +1024,7 @@ var $ = class extends v {
|
|
|
1023
1024
|
}
|
|
1024
1025
|
#m() {
|
|
1025
1026
|
let e = this.mobile.matches && (this.viewOpen || this.shareOpen) ? this.renderRoot.querySelector(".lintje-mobile-header .lintje-view__popover, .lintje-mobile-header .lintje-share__popover") : null;
|
|
1026
|
-
e && !this.#u ? (this.#u =
|
|
1027
|
+
e && !this.#u ? (this.#u = r(), this.#l.activate(e, { focus: e.querySelector(".lintje-share__close") ?? !0 })) : e || this.#h(!0);
|
|
1027
1028
|
}
|
|
1028
1029
|
#h(e) {
|
|
1029
1030
|
this.#u && (this.#u(), this.#u = null, this.#l.deactivate(e));
|
|
@@ -1034,7 +1035,7 @@ var $ = class extends v {
|
|
|
1034
1035
|
updated(e) {
|
|
1035
1036
|
if (super.updated(e), e.has("data") && e.get("data") === void 0 && this.#b(), e.has("menuOpen")) {
|
|
1036
1037
|
if (this.menuOpen) {
|
|
1037
|
-
this.#c ??=
|
|
1038
|
+
this.#c ??= r();
|
|
1038
1039
|
let e = this.renderRoot.querySelector(".lintje-mobile-chrome");
|
|
1039
1040
|
e && this.#e.activate(e, { focus: !1 });
|
|
1040
1041
|
} else e.get("menuOpen") === !0 && (this.#p(), this.#e.deactivate(!1), this.renderRoot.querySelector("[aria-controls=\"lintje-mobile-menu-panel\"]")?.focus());
|
|
@@ -1043,28 +1044,28 @@ var $ = class extends v {
|
|
|
1043
1044
|
}
|
|
1044
1045
|
#g() {
|
|
1045
1046
|
if (this.#i) return;
|
|
1046
|
-
let e =
|
|
1047
|
+
let e = u() ?? document.documentElement;
|
|
1047
1048
|
this.#d && this.#d !== e && (this.#d.style.scrollPaddingTop = ""), this.#d = e;
|
|
1048
|
-
let
|
|
1049
|
-
e.style.scrollPaddingTop = `${Math.round(
|
|
1049
|
+
let t = this.mobile.matches && this.layout === "side" ? i(this, "--h-mobile-header", 72) : i(this, "--h-topbar", 56), n = this.store.state.hasFilters ? i(this, "--h-contextbar", 48) : 0;
|
|
1050
|
+
e.style.scrollPaddingTop = `${Math.round(t + n)}px`;
|
|
1050
1051
|
}
|
|
1051
1052
|
menuLeft() {
|
|
1052
1053
|
this.#n && clearTimeout(this.#n), this.#n = null, this.menuLeaving = !1;
|
|
1053
1054
|
}
|
|
1054
1055
|
measureFit() {
|
|
1055
|
-
let e = this.renderRoot.querySelector(".lintje-top-bar"),
|
|
1056
|
-
this.#_([e,
|
|
1057
|
-
let
|
|
1058
|
-
if (this.layout === "side" && e &&
|
|
1059
|
-
this.toolsCompact || (this.#s =
|
|
1060
|
-
let
|
|
1056
|
+
let e = this.renderRoot.querySelector(".lintje-top-bar"), t = this.renderRoot.querySelector(".lintje-mobile-header");
|
|
1057
|
+
this.#_([e, t].filter((e) => e !== null));
|
|
1058
|
+
let n = e?.querySelector(".lintje-top-bar__words"), r = e?.querySelector(".lintje-top-bar__actions");
|
|
1059
|
+
if (this.layout === "side" && e && n && r && e.clientWidth) {
|
|
1060
|
+
this.toolsCompact || (this.#s = r.getBoundingClientRect().width);
|
|
1061
|
+
let t = getComputedStyle(e), a = e.clientWidth - parseFloat(t.paddingLeft) - parseFloat(t.paddingRight), o = n.scrollWidth + i(this, "--space-6", 24) + this.#s > a + .5;
|
|
1061
1062
|
o !== this.toolsCompact && (this.toolsCompact = o);
|
|
1062
1063
|
}
|
|
1063
|
-
if (
|
|
1064
|
-
let e =
|
|
1065
|
-
|
|
1066
|
-
let
|
|
1067
|
-
|
|
1064
|
+
if (t?.clientWidth) {
|
|
1065
|
+
let e = t.classList.contains("is-compact");
|
|
1066
|
+
t.classList.remove("is-compact");
|
|
1067
|
+
let n = t.scrollWidth > t.clientWidth + .5;
|
|
1068
|
+
t.classList.toggle("is-compact", e), n !== this.headerCompact && (this.headerCompact = n);
|
|
1068
1069
|
}
|
|
1069
1070
|
}
|
|
1070
1071
|
#_(e) {
|
|
@@ -1092,19 +1093,19 @@ var $ = class extends v {
|
|
|
1092
1093
|
this.viewOpen = !1, this.shareOpen = !1, Array.from(this.renderRoot.querySelectorAll(e)).find((e) => e.getClientRects().length > 0)?.focus();
|
|
1093
1094
|
}
|
|
1094
1095
|
#y() {
|
|
1095
|
-
return Array.from(this.renderRoot.querySelectorAll(".lintje-view__popover, .lintje-share__popover"), (e) => e.parentElement).some((e) => e !== null &&
|
|
1096
|
+
return Array.from(this.renderRoot.querySelectorAll(".lintje-view__popover, .lintje-share__popover"), (e) => e.parentElement).some((e) => e !== null && l(e));
|
|
1096
1097
|
}
|
|
1097
|
-
showToast(e) {
|
|
1098
|
-
this.toast = e;
|
|
1098
|
+
showToast(e, t = "ok") {
|
|
1099
|
+
this.toast = e, this.toastKind = t;
|
|
1099
1100
|
}
|
|
1100
1101
|
skipToContent(e) {
|
|
1101
1102
|
e.preventDefault();
|
|
1102
|
-
let
|
|
1103
|
-
if (!
|
|
1104
|
-
|
|
1105
|
-
let
|
|
1103
|
+
let t = this.renderRoot.querySelector(`#${Y}`);
|
|
1104
|
+
if (!t) return;
|
|
1105
|
+
t.focus({ preventScroll: !0 });
|
|
1106
|
+
let n = this.renderRoot.querySelectorAll(".lintje-top-bar, .lintje-mobile-header"), r = this.layout === "top" ? i(this, "--h-topbar", 56) : Math.max(0, ...Array.from(n, (e) => e.getBoundingClientRect().bottom)), a = t.getBoundingClientRect().top - r;
|
|
1106
1107
|
if (a === 0) return;
|
|
1107
|
-
let o =
|
|
1108
|
+
let o = u();
|
|
1108
1109
|
o && o !== document.scrollingElement ? o.scrollBy({ top: a }) : window.scrollBy({ top: a });
|
|
1109
1110
|
}
|
|
1110
1111
|
#b() {
|
|
@@ -1112,7 +1113,7 @@ var $ = class extends v {
|
|
|
1112
1113
|
this.hasContent = Array.from(e).some((e) => e.assignedNodes({ flatten: !0 }).some((e) => e.nodeType === Node.ELEMENT_NODE || e.textContent?.trim()));
|
|
1113
1114
|
}
|
|
1114
1115
|
renderSearch() {
|
|
1115
|
-
return this.data?.search ?
|
|
1116
|
+
return this.data?.search ? h`<button
|
|
1116
1117
|
type="button"
|
|
1117
1118
|
class="lintje-shell__tool"
|
|
1118
1119
|
aria-label="Zoeken"
|
|
@@ -1120,27 +1121,27 @@ var $ = class extends v {
|
|
|
1120
1121
|
aria-keyshortcuts="/"
|
|
1121
1122
|
@click=${() => this.askSearch()}
|
|
1122
1123
|
>
|
|
1123
|
-
${
|
|
1124
|
-
</button>` :
|
|
1124
|
+
${v("functioneel-zoek", { size: 20 })}
|
|
1125
|
+
</button>` : m;
|
|
1125
1126
|
}
|
|
1126
1127
|
renderNotifications() {
|
|
1127
1128
|
let e = this.data?.notifications;
|
|
1128
|
-
return e ?
|
|
1129
|
+
return e ? h`<lintje-notifications .items=${e}></lintje-notifications>` : m;
|
|
1129
1130
|
}
|
|
1130
1131
|
renderUserMenu(e) {
|
|
1131
1132
|
let t = this.data;
|
|
1132
|
-
return t?.user ?
|
|
1133
|
+
return t?.user ? h`<lintje-user-menu
|
|
1133
1134
|
class=${e ? "lintje-shell__sheet-user" : "lintje-shell__user"}
|
|
1134
1135
|
?inline=${e}
|
|
1135
1136
|
.user=${t.user}
|
|
1136
1137
|
.items=${t.userMenu ?? []}
|
|
1137
|
-
version=${t.version ??
|
|
1138
|
-
logout-action=${t.logout?.href ??
|
|
1139
|
-
csrf=${t.logout?.token ??
|
|
1140
|
-
></lintje-user-menu>` :
|
|
1138
|
+
version=${t.version ?? m}
|
|
1139
|
+
logout-action=${t.logout?.href ?? m}
|
|
1140
|
+
csrf=${t.logout?.token ?? m}
|
|
1141
|
+
></lintje-user-menu>` : m;
|
|
1141
1142
|
}
|
|
1142
1143
|
renderSkipLink() {
|
|
1143
|
-
return
|
|
1144
|
+
return h`<a
|
|
1144
1145
|
class="lintje-shell__skip focus-inset"
|
|
1145
1146
|
href="#${Y}"
|
|
1146
1147
|
@click=${(e) => this.skipToContent(e)}
|
|
@@ -1160,20 +1161,36 @@ var $ = class extends v {
|
|
|
1160
1161
|
} : void 0
|
|
1161
1162
|
});
|
|
1162
1163
|
}
|
|
1164
|
+
renderPrintHead(e) {
|
|
1165
|
+
let t = [e.name, e.environment].filter(Boolean).join(" · ");
|
|
1166
|
+
return h`<div class="lintje-shell__print-head" aria-hidden="true">
|
|
1167
|
+
<div class="lintje-shell__print-logo">
|
|
1168
|
+
<lintje-logo
|
|
1169
|
+
full
|
|
1170
|
+
width=${x.desktop}
|
|
1171
|
+
src=${e.logo ?? m}
|
|
1172
|
+
name=${e.emblem?.name ?? m}
|
|
1173
|
+
alt=${e.emblem?.label ?? m}
|
|
1174
|
+
byline=${e.emblem?.byline ?? m}
|
|
1175
|
+
></lintje-logo>
|
|
1176
|
+
</div>
|
|
1177
|
+
${t ? h`<p class="lintje-shell__print-name">${t}</p>` : m}
|
|
1178
|
+
</div>`;
|
|
1179
|
+
}
|
|
1163
1180
|
renderNavEnd(e) {
|
|
1164
1181
|
let t = e.feedback;
|
|
1165
|
-
return
|
|
1182
|
+
return h`${this.renderSearch()}${this.renderNotifications()}${H(this)}${t ? h`<a
|
|
1166
1183
|
class="lintje-shell__tool"
|
|
1167
1184
|
href=${t.href}
|
|
1168
1185
|
aria-label=${M(t)}
|
|
1169
1186
|
title=${M(t)}
|
|
1170
|
-
>${
|
|
1171
|
-
>` :
|
|
1187
|
+
>${v("communicatie-tekstballonnen-met-vraagteken", { size: 20 })}</a
|
|
1188
|
+
>` : m}${this.renderUserMenu(!1)}`;
|
|
1172
1189
|
}
|
|
1173
1190
|
renderTop(e, t) {
|
|
1174
|
-
return
|
|
1191
|
+
return h`${this.renderLogo(x.desktop)}
|
|
1175
1192
|
<div class="lintje-shell__sentinel" aria-hidden="true"></div>
|
|
1176
|
-
<div class=${
|
|
1193
|
+
<div class=${_({
|
|
1177
1194
|
"lintje-shell__nav": !0,
|
|
1178
1195
|
"is-stuck": this.barStuck
|
|
1179
1196
|
})}>
|
|
@@ -1184,16 +1201,16 @@ var $ = class extends v {
|
|
|
1184
1201
|
collapsed: this.submenu.collapsed,
|
|
1185
1202
|
onNavigate: (e, t) => this.follow(e.href, t),
|
|
1186
1203
|
onOpen: (e) => this.openGroup = e,
|
|
1187
|
-
start: e.name ?
|
|
1204
|
+
start: e.name ? h`<h1 class="lintje-shell__name" title=${e.name}>${e.name}</h1>` : m,
|
|
1188
1205
|
end: this.renderNavEnd(e)
|
|
1189
1206
|
})}
|
|
1190
1207
|
</div>
|
|
1191
1208
|
${he(this.openGroup !== null)}`;
|
|
1192
1209
|
}
|
|
1193
1210
|
renderTopPhone(e) {
|
|
1194
|
-
return
|
|
1211
|
+
return h`${this.renderLogo(x.phone)}
|
|
1195
1212
|
<div class="lintje-shell__sentinel" aria-hidden="true"></div>
|
|
1196
|
-
<div class=${
|
|
1213
|
+
<div class=${_({
|
|
1197
1214
|
"lintje-shell__mobile-bar": !0,
|
|
1198
1215
|
"is-stuck": this.barStuck
|
|
1199
1216
|
})}>
|
|
@@ -1202,9 +1219,9 @@ var $ = class extends v {
|
|
|
1202
1219
|
}
|
|
1203
1220
|
renderMain() {
|
|
1204
1221
|
let e = () => this.#b();
|
|
1205
|
-
return
|
|
1222
|
+
return h`<main
|
|
1206
1223
|
id=${Y}
|
|
1207
|
-
class=${
|
|
1224
|
+
class=${_({
|
|
1208
1225
|
"lintje-shell__main": !0,
|
|
1209
1226
|
"is-bare": !this.hasContent
|
|
1210
1227
|
})}
|
|
@@ -1218,31 +1235,31 @@ var $ = class extends v {
|
|
|
1218
1235
|
</main>`;
|
|
1219
1236
|
}
|
|
1220
1237
|
renderToast() {
|
|
1221
|
-
return this.toast ?
|
|
1222
|
-
kind
|
|
1238
|
+
return this.toast ? h`<lintje-toast
|
|
1239
|
+
kind=${this.toastKind}
|
|
1223
1240
|
@lintje-close=${(e) => {
|
|
1224
1241
|
e.stopPropagation(), this.toast = null;
|
|
1225
1242
|
}}
|
|
1226
1243
|
>${this.toast}</lintje-toast
|
|
1227
|
-
>` :
|
|
1244
|
+
>` : m;
|
|
1228
1245
|
}
|
|
1229
1246
|
render() {
|
|
1230
1247
|
let e = this.data;
|
|
1231
|
-
if (!e) return
|
|
1248
|
+
if (!e) return m;
|
|
1232
1249
|
let t = Q(e.navigation ?? []);
|
|
1233
|
-
return this.layout === "top" ?
|
|
1234
|
-
class=${
|
|
1250
|
+
return this.layout === "top" ? h`<div
|
|
1251
|
+
class=${_({
|
|
1235
1252
|
"lintje-shell": !0,
|
|
1236
1253
|
"lintje-shell--top": !0,
|
|
1237
1254
|
"is-nested": this.#i,
|
|
1238
1255
|
"is-phone": this.mobile.matches
|
|
1239
1256
|
})}
|
|
1240
1257
|
>
|
|
1241
|
-
${this.renderSkipLink()}
|
|
1258
|
+
${this.renderSkipLink()} ${this.renderPrintHead(e)}
|
|
1242
1259
|
${this.mobile.matches ? this.renderTopPhone(t) : this.renderTop(e, t)}
|
|
1243
1260
|
${this.renderMain()} <slot name="footer"></slot> ${this.renderToast()}
|
|
1244
|
-
</div>` :
|
|
1245
|
-
class=${
|
|
1261
|
+
</div>` : h`<div
|
|
1262
|
+
class=${_({
|
|
1246
1263
|
"lintje-shell": !0,
|
|
1247
1264
|
"lintje-shell--side": !0,
|
|
1248
1265
|
"is-unpinned": e.menu === "unpinned",
|
|
@@ -1252,13 +1269,13 @@ var $ = class extends v {
|
|
|
1252
1269
|
>
|
|
1253
1270
|
${this.renderSkipLink()} ${F(this, t)}
|
|
1254
1271
|
<div class="lintje-shell__column">
|
|
1255
|
-
${q(this, t)} ${Ce(this)} ${this.renderMain()}
|
|
1272
|
+
${this.renderPrintHead(e)} ${q(this, t)} ${Ce(this)} ${this.renderMain()}
|
|
1256
1273
|
<slot name="footer"></slot>
|
|
1257
1274
|
</div>
|
|
1258
1275
|
${this.renderToast()}
|
|
1259
1276
|
</div>`;
|
|
1260
1277
|
}
|
|
1261
1278
|
};
|
|
1262
|
-
|
|
1279
|
+
ee("lintje-shell", $);
|
|
1263
1280
|
//#endregion
|
|
1264
1281
|
export { $ as LintjeShell, Q as toGroups };
|