lintje 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist-elements/actions.js +1 -1
- package/dist-elements/chunks/{base-Bg-IFOPG.js → base-CbmWxUig.js} +444 -272
- package/dist-elements/chunks/{controls-B1455oPG.js → controls-DxmnDSBr.js} +6 -0
- package/dist-elements/chunks/dialog-DChINFxD.js +28 -0
- package/dist-elements/chunks/{disclosure-BXTX04gM.js → disclosure-D39vAR5q.js} +1 -1
- package/dist-elements/chunks/{disclosure-CMXhX-Vb.js → disclosure-DLkXPUpV.js} +6 -6
- package/dist-elements/chunks/download-Ct9q2anY.js +206 -0
- package/dist-elements/chunks/{focus-trap-9BnE-xWv.js → focus-trap-BwOxE5BX.js} +1 -1
- package/dist-elements/chunks/input-CRW_exv_.js +195 -0
- package/dist-elements/chunks/{player-DXOZEyEy.js → player-B8QXJ0Z5.js} +26 -26
- package/dist-elements/chunks/{sentence-BI3lwEuT.js → sentence-B19AyZBS.js} +3 -3
- package/dist-elements/chunks/{stagger-qGD3wmhg.js → stagger-BHoOgy0g.js} +81 -75
- package/dist-elements/core.js +1 -1
- package/dist-elements/custom-elements.json +980 -670
- package/dist-elements/data-types.json +6798 -0
- package/dist-elements/feedback.js +2 -1
- package/dist-elements/frame.js +0 -2
- package/dist-elements/guides/dashboard.md +8 -0
- package/dist-elements/guides/events.md +4 -5
- package/dist-elements/guides/loading.md +8 -7
- package/dist-elements/guides/page-contents.md +110 -0
- package/dist-elements/guides/start.md +12 -0
- package/dist-elements/inputs.js +2 -1
- package/dist-elements/layout.js +1 -1
- package/dist-elements/lintje.js +6975 -6120
- package/dist-elements/overlays.js +2 -2
- package/dist-elements/skills/lintje/SKILL.md +1 -1
- package/dist-elements/tables.js +1 -1
- package/dist-elements/tag/activity-log.js +15 -15
- package/dist-elements/tag/ai-label.js +10 -10
- package/dist-elements/tag/announcement.js +36 -76
- package/dist-elements/tag/app-search.js +49 -49
- package/dist-elements/tag/audio-player.js +57 -57
- package/dist-elements/tag/badge.js +1 -1
- package/dist-elements/tag/breadcrumbs.js +15 -15
- package/dist-elements/tag/button.js +1 -1
- package/dist-elements/tag/card-list.js +12 -12
- package/dist-elements/tag/card.js +39 -44
- package/dist-elements/tag/chart.js +1050 -795
- package/dist-elements/tag/chat-answer.js +49 -49
- package/dist-elements/tag/chat-composer.js +75 -71
- package/dist-elements/tag/chat-message.js +8 -8
- package/dist-elements/tag/chat-strip.js +22 -22
- package/dist-elements/tag/chat-suggestions.js +12 -12
- package/dist-elements/tag/chat.js +56 -56
- package/dist-elements/tag/checkbox-group.d.ts +1 -0
- package/dist-elements/tag/checkbox-group.js +59 -0
- package/dist-elements/tag/checkbox.js +8 -8
- package/dist-elements/tag/code.js +9 -9
- package/dist-elements/tag/combobox.js +18 -18
- package/dist-elements/tag/conflict-alert.js +12 -12
- package/dist-elements/tag/copy-button.js +14 -14
- package/dist-elements/tag/data-table.js +878 -530
- package/dist-elements/tag/date-input.js +30 -30
- package/dist-elements/tag/date-range.js +37 -37
- package/dist-elements/tag/description-list.js +29 -32
- package/dist-elements/tag/dialog.d.ts +1 -0
- package/dist-elements/tag/dialog.js +144 -0
- package/dist-elements/tag/document-viewer.js +23 -23
- package/dist-elements/tag/drawer.js +28 -32
- package/dist-elements/tag/empty-state.js +19 -30
- package/dist-elements/tag/error-page.d.ts +1 -0
- package/dist-elements/tag/error-page.js +109 -0
- package/dist-elements/tag/error-summary.js +10 -10
- package/dist-elements/tag/expander.js +8 -8
- package/dist-elements/tag/explainer.js +11 -11
- package/dist-elements/tag/field.js +5 -5
- package/dist-elements/tag/file-upload.js +34 -34
- package/dist-elements/tag/filter-bar.js +56 -56
- package/dist-elements/tag/filter-sheet.js +11 -11
- package/dist-elements/tag/filter-zone.js +31 -31
- package/dist-elements/tag/footer.js +21 -21
- package/dist-elements/tag/form-actions.js +29 -25
- package/dist-elements/tag/form-section.js +6 -6
- package/dist-elements/tag/form.js +12 -12
- package/dist-elements/tag/gallery.js +14 -14
- package/dist-elements/tag/grid-item.js +1 -1
- package/dist-elements/tag/grid.js +1 -1
- package/dist-elements/tag/hero.js +12 -12
- package/dist-elements/tag/highlight.js +5 -5
- package/dist-elements/tag/icon-button.js +1 -1
- package/dist-elements/tag/icon.js +1 -1
- package/dist-elements/tag/job-list.js +22 -44
- package/dist-elements/tag/kpi-row.js +12 -10
- package/dist-elements/tag/kpi.js +146 -137
- package/dist-elements/tag/level-meter.js +11 -11
- package/dist-elements/tag/list.js +55 -55
- package/dist-elements/tag/logo.js +30 -30
- package/dist-elements/tag/map.js +690 -665
- package/dist-elements/tag/menu-button.js +70 -69
- package/dist-elements/tag/modal.js +28 -37
- package/dist-elements/tag/multiselect.js +34 -34
- package/dist-elements/tag/note.js +5 -5
- package/dist-elements/tag/notifications.js +36 -36
- package/dist-elements/tag/number-input.js +12 -12
- package/dist-elements/tag/page-header.js +140 -37
- package/dist-elements/tag/pagination.js +53 -48
- package/dist-elements/tag/popover.js +1 -1
- package/dist-elements/tag/progress-bar.js +1 -1
- package/dist-elements/tag/prose.js +6 -6
- package/dist-elements/tag/qr-code.js +7 -7
- package/dist-elements/tag/radio-group.js +12 -12
- package/dist-elements/tag/range.js +22 -22
- package/dist-elements/tag/recording-status.js +14 -14
- package/dist-elements/tag/repeater.js +10 -10
- package/dist-elements/tag/segmented.js +13 -13
- package/dist-elements/tag/select.js +10 -10
- package/dist-elements/tag/shell.js +356 -339
- package/dist-elements/tag/skeleton.js +1 -1
- package/dist-elements/tag/slot-picker.js +14 -14
- package/dist-elements/tag/sortable-list.js +14 -14
- package/dist-elements/tag/spinner.js +1 -1
- package/dist-elements/tag/split-pane.js +12 -12
- package/dist-elements/tag/status-dot.js +1 -1
- package/dist-elements/tag/stepper.js +21 -21
- package/dist-elements/tag/streaming-text.js +13 -13
- package/dist-elements/tag/sub-nav.js +39 -38
- package/dist-elements/tag/tabs.js +38 -38
- package/dist-elements/tag/tag-input.js +19 -19
- package/dist-elements/tag/text-editor.js +24 -24
- package/dist-elements/tag/text-input.js +14 -14
- package/dist-elements/tag/textarea.js +14 -14
- package/dist-elements/tag/tile.js +1 -1
- package/dist-elements/tag/time-input.js +19 -19
- package/dist-elements/tag/toast.js +32 -23
- package/dist-elements/tag/toggle.js +8 -8
- package/dist-elements/tag/toggletip.js +27 -27
- package/dist-elements/tag/tooltip.js +1 -1
- package/dist-elements/tag/transcript.js +48 -48
- package/dist-elements/tag/translator.js +13 -13
- package/dist-elements/tag/tree-view.js +13 -13
- package/dist-elements/tag/user-menu.js +37 -37
- package/dist-elements/tag/video-player.js +21 -21
- package/dist-elements/tokens.css +120 -96
- package/dist-elements/types/bundle/feedback.d.ts +1 -0
- package/dist-elements/types/bundle/frame.d.ts +0 -2
- package/dist-elements/types/bundle/inputs.d.ts +1 -0
- package/dist-elements/types/bundle/overlays.d.ts +1 -1
- package/dist-elements/types/components/actions/copy-button/copy-button.d.ts +6 -7
- package/dist-elements/types/components/actions/menu-button/menu-button.d.ts +13 -15
- package/dist-elements/types/components/actions/qr-code/qr-code.d.ts +9 -9
- package/dist-elements/types/components/charts/chart/chart.d.ts +5 -4
- package/dist-elements/types/components/charts/kpi/kpi.d.ts +16 -8
- package/dist-elements/types/components/charts/kpi-row/kpi-row.d.ts +1 -7
- package/dist-elements/types/components/charts/note/note.d.ts +1 -1
- package/dist-elements/types/components/chat/chat/chat.d.ts +8 -10
- package/dist-elements/types/components/chat/chat-answer/chat-answer.d.ts +7 -8
- package/dist-elements/types/components/chat/chat-composer/chat-composer.d.ts +8 -10
- package/dist-elements/types/components/chat/chat-message/chat-message.d.ts +6 -7
- package/dist-elements/types/components/chat/chat-strip/chat-strip.d.ts +5 -5
- package/dist-elements/types/components/chat/chat-suggestions/chat-suggestions.d.ts +9 -10
- package/dist-elements/types/components/content/audio-player/audio-player.d.ts +10 -12
- package/dist-elements/types/components/content/code/code.d.ts +2 -3
- package/dist-elements/types/components/content/document-viewer/document-viewer.d.ts +8 -9
- package/dist-elements/types/components/content/gallery/gallery.d.ts +5 -4
- package/dist-elements/types/components/content/highlight/highlight.d.ts +4 -3
- package/dist-elements/types/components/content/prose/prose.d.ts +2 -3
- package/dist-elements/types/components/content/transcript/transcript.d.ts +12 -25
- package/dist-elements/types/components/content/translator/translator.d.ts +11 -15
- package/dist-elements/types/components/content/video-player/video-player.d.ts +11 -13
- package/dist-elements/types/components/feedback/ai-label/ai-label.d.ts +3 -4
- package/dist-elements/types/components/feedback/announcement/announcement.d.ts +3 -7
- package/dist-elements/types/components/feedback/conflict-alert/conflict-alert.d.ts +3 -4
- package/dist-elements/types/components/feedback/empty-state/empty-state.d.ts +5 -8
- package/dist-elements/types/components/feedback/error-page/error-page.d.ts +52 -0
- package/dist-elements/types/components/feedback/job-list/job-list.d.ts +9 -12
- package/dist-elements/types/components/feedback/level-meter/level-meter.d.ts +4 -6
- package/dist-elements/types/components/feedback/recording-status/recording-status.d.ts +5 -6
- package/dist-elements/types/components/feedback/streaming-text/streaming-text.d.ts +10 -7
- package/dist-elements/types/components/feedback/toast/toast.d.ts +8 -9
- package/dist-elements/types/components/filters/filter-bar/filter-bar.d.ts +9 -4
- package/dist-elements/types/components/filters/filter-sheet/filter-sheet.d.ts +5 -5
- package/dist-elements/types/components/filters/filter-zone/filter-zone.d.ts +4 -4
- package/dist-elements/types/components/forms/error-summary/error-summary.d.ts +5 -6
- package/dist-elements/types/components/forms/form/form.d.ts +5 -5
- package/dist-elements/types/components/forms/form-actions/form-actions.d.ts +9 -7
- package/dist-elements/types/components/forms/form-section/form-section.d.ts +6 -5
- package/dist-elements/types/components/forms/repeater/repeater.d.ts +13 -7
- package/dist-elements/types/components/forms/stepper/stepper.d.ts +5 -4
- package/dist-elements/types/components/frame/app-search/app-search.d.ts +6 -7
- package/dist-elements/types/components/frame/breadcrumbs/breadcrumbs.d.ts +2 -2
- package/dist-elements/types/components/frame/footer/footer.d.ts +3 -2
- package/dist-elements/types/components/frame/hero/hero.d.ts +7 -9
- package/dist-elements/types/components/frame/notifications/notifications.d.ts +5 -9
- package/dist-elements/types/components/frame/page-header/page-header.d.ts +12 -15
- package/dist-elements/types/components/frame/shell/shell.d.ts +14 -13
- package/dist-elements/types/components/frame/sub-nav/sub-nav.d.ts +10 -6
- package/dist-elements/types/components/frame/user-menu/user-menu.d.ts +11 -10
- package/dist-elements/types/components/index.d.ts +8 -9
- package/dist-elements/types/components/inputs/checkbox/checkbox.d.ts +4 -4
- package/dist-elements/types/components/inputs/checkbox-group/checkbox-group.d.ts +33 -0
- package/dist-elements/types/components/inputs/combobox/combobox.d.ts +12 -6
- package/dist-elements/types/components/inputs/date-input/date-input.d.ts +5 -5
- package/dist-elements/types/components/inputs/date-range/date-range.d.ts +11 -6
- package/dist-elements/types/components/inputs/field/field.d.ts +5 -3
- package/dist-elements/types/components/inputs/file-upload/file-upload.d.ts +6 -8
- package/dist-elements/types/components/inputs/multiselect/multiselect.d.ts +4 -6
- package/dist-elements/types/components/inputs/number-input/number-input.d.ts +8 -7
- package/dist-elements/types/components/inputs/radio-group/radio-group.d.ts +2 -4
- package/dist-elements/types/components/inputs/range/range.d.ts +5 -6
- package/dist-elements/types/components/inputs/segmented/segmented.d.ts +7 -4
- package/dist-elements/types/components/inputs/select/select.d.ts +6 -3
- package/dist-elements/types/components/inputs/slot-picker/slot-picker.d.ts +6 -5
- package/dist-elements/types/components/inputs/tag-input/tag-input.d.ts +7 -5
- package/dist-elements/types/components/inputs/text-editor/text-editor.d.ts +6 -6
- package/dist-elements/types/components/inputs/text-input/text-input.d.ts +11 -6
- package/dist-elements/types/components/inputs/textarea/textarea.d.ts +12 -11
- package/dist-elements/types/components/inputs/time-input/time-input.d.ts +7 -8
- package/dist-elements/types/components/inputs/toggle/toggle.d.ts +3 -1
- package/dist-elements/types/components/layout/expander/expander.d.ts +9 -10
- package/dist-elements/types/components/layout/split-pane/split-pane.d.ts +6 -6
- package/dist-elements/types/components/layout/tabs/tabs.d.ts +11 -9
- package/dist-elements/types/components/map/map/map.d.ts +10 -9
- package/dist-elements/types/components/overlays/dialog/dialog.d.ts +49 -0
- package/dist-elements/types/components/overlays/drawer/drawer.d.ts +6 -5
- package/dist-elements/types/components/overlays/modal/modal.d.ts +7 -12
- package/dist-elements/types/components/overlays/toggletip/toggletip.d.ts +3 -7
- package/dist-elements/types/components/shared/charts/index.d.ts +4 -1
- package/dist-elements/types/components/shared/charts/kinds.d.ts +86 -0
- package/dist-elements/types/components/shared/charts/line-chart/line-chart.d.ts +2 -2
- package/dist-elements/types/components/shared/charts/map-chart/leaflet.d.ts +5 -0
- package/dist-elements/types/components/shared/charts/shared/chart-states.d.ts +8 -19
- package/dist-elements/types/components/shared/charts/shared/controller.d.ts +7 -0
- package/dist-elements/types/components/shared/charts/shared/types.d.ts +29 -0
- package/dist-elements/types/components/shared/charts/stacked-area-chart/stacked-area-chart.d.ts +13 -0
- package/dist-elements/types/components/shared/dialog.d.ts +9 -0
- package/dist-elements/types/components/shared/overflow.d.ts +58 -0
- package/dist-elements/types/components/tables/activity-log/activity-log.d.ts +2 -3
- package/dist-elements/types/components/tables/card/card.d.ts +14 -20
- package/dist-elements/types/components/tables/card-list/card-list.d.ts +9 -11
- package/dist-elements/types/components/tables/data-table/data-table.d.ts +85 -16
- package/dist-elements/types/components/tables/data-table/filters.d.ts +13 -4
- package/dist-elements/types/components/tables/description-list/description-list.d.ts +12 -11
- package/dist-elements/types/components/tables/list/list.d.ts +9 -20
- package/dist-elements/types/components/tables/pagination/pagination.d.ts +12 -11
- package/dist-elements/types/components/tables/sortable-list/sortable-list.d.ts +5 -6
- package/dist-elements/types/components/tables/tree-view/tree-view.d.ts +4 -4
- package/dist-elements/types/core/media.d.ts +2 -2
- package/dist-elements/types/core/motion.d.ts +5 -0
- package/dist-elements/types/core/print.d.ts +15 -0
- package/dist-elements/types/core/shortcuts.d.ts +2 -2
- package/dist-elements/types/icons/icon/icon.d.ts +2 -3
- package/dist-elements/types/icons/register.d.ts +1 -1
- package/dist-elements/types/primitives/badge/badge.d.ts +9 -5
- package/dist-elements/types/primitives/button/button.d.ts +12 -9
- package/dist-elements/types/primitives/grid/grid.d.ts +3 -3
- package/dist-elements/types/primitives/grid-item/grid-item.d.ts +1 -1
- package/dist-elements/types/primitives/icon-button/icon-button.d.ts +7 -5
- package/dist-elements/types/primitives/index.d.ts +3 -1
- package/dist-elements/types/primitives/popover/popover.d.ts +5 -4
- package/dist-elements/types/primitives/progress-bar/progress-bar.d.ts +8 -6
- package/dist-elements/types/primitives/shared/announcement-block.d.ts +38 -0
- package/dist-elements/types/primitives/shared/empty-state-block.d.ts +26 -0
- package/dist-elements/types/primitives/shared/tone.d.ts +18 -0
- package/dist-elements/types/primitives/skeleton/skeleton.d.ts +1 -1
- package/dist-elements/types/primitives/spinner/spinner.d.ts +1 -2
- package/dist-elements/types/primitives/status-dot/status-dot.d.ts +4 -5
- package/dist-elements/types/primitives/tile/tile.d.ts +17 -5
- package/dist-elements/types/primitives/tooltip/tooltip.d.ts +6 -6
- package/dist-elements/types/types.d.ts +70 -10
- package/dist-icons/functioneel-kolommen.svg +1 -0
- package/dist-icons/functioneel-trechter.svg +1 -0
- package/package.json +1 -1
- package/dist-elements/chunks/confirm-dialog-D5EVGuil.js +0 -4
- package/dist-elements/chunks/download-y528pIHP.js +0 -230
- package/dist-elements/chunks/input-BtuNFSWk.js +0 -195
- package/dist-elements/tag/confirm-dialog.d.ts +0 -1
- package/dist-elements/tag/confirm-dialog.js +0 -118
- package/dist-elements/tag/session-expiry.d.ts +0 -1
- package/dist-elements/tag/session-expiry.js +0 -184
- package/dist-elements/tag/shortcuts.d.ts +0 -1
- package/dist-elements/tag/shortcuts.js +0 -104
- package/dist-elements/types/components/frame/session-expiry/session-expiry.d.ts +0 -55
- package/dist-elements/types/components/frame/shortcuts/shortcuts.d.ts +0 -41
- package/dist-elements/types/components/overlays/confirm-dialog/confirm-dialog.d.ts +0 -41
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Jt as e, Q as t, Yt as n, Z as r, Zt as i, at as a, bt as o, en as s, lt as c, nn as l, ot as u, st as d, ut as f, y as p } from "../chunks/base-CbmWxUig.js";
|
|
2
2
|
import "./menu-button.js";
|
|
3
3
|
import "./highlight.js";
|
|
4
4
|
import "./textarea.js";
|
|
@@ -51,7 +51,7 @@ function S(e, t) {
|
|
|
51
51
|
}
|
|
52
52
|
];
|
|
53
53
|
}
|
|
54
|
-
var C = class extends
|
|
54
|
+
var C = class extends e {
|
|
55
55
|
constructor(...e) {
|
|
56
56
|
super(...e), this.segments = [], this.readonly = !1, this.size = "regular", this.layout = "rows", this.tinted = !1, this.grouped = !1, this.errors = {}, this.searchMatches = {}, this.hasNote = !1, this.lastUserScroll = -Infinity, this.followed = null, this.savedFrom = null, this.onNoteChange = (e) => {
|
|
57
57
|
this.hasNote = e.target.assignedNodes({ flatten: !0 }).length > 0;
|
|
@@ -63,8 +63,8 @@ var C = class extends p {
|
|
|
63
63
|
}
|
|
64
64
|
static {
|
|
65
65
|
this.styles = [
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
c,
|
|
67
|
+
a,
|
|
68
68
|
i(_)
|
|
69
69
|
];
|
|
70
70
|
}
|
|
@@ -158,20 +158,20 @@ var C = class extends p {
|
|
|
158
158
|
willUpdate(e) {
|
|
159
159
|
if (super.willUpdate(e), e.has("busyId") && this.busyId) {
|
|
160
160
|
let e = this.segmentElement(this.busyId)?.querySelector("lintje-textarea");
|
|
161
|
-
this.savedFrom = e &&
|
|
161
|
+
this.savedFrom = e && t(e) ? this.busyId : null;
|
|
162
162
|
}
|
|
163
163
|
}
|
|
164
164
|
keepSaveFocus() {
|
|
165
165
|
let e = this.savedFrom;
|
|
166
166
|
if (!e) return;
|
|
167
|
-
let
|
|
167
|
+
let n = this.segmentElement(e)?.querySelector(".lintje-transcript__editor");
|
|
168
168
|
if (this.busyId === e) {
|
|
169
|
-
|
|
169
|
+
n?.querySelector("lintje-button")?.shadowRoot?.querySelector("button")?.focus();
|
|
170
170
|
return;
|
|
171
171
|
}
|
|
172
|
-
if (this.savedFrom = null, this.editingId !== e || !
|
|
173
|
-
let
|
|
174
|
-
(!
|
|
172
|
+
if (this.savedFrom = null, this.editingId !== e || !n) return;
|
|
173
|
+
let i = r();
|
|
174
|
+
(!i || i === document.body || t(n)) && this.focusInside(n.querySelector("lintje-textarea"), "textarea");
|
|
175
175
|
}
|
|
176
176
|
updated(e) {
|
|
177
177
|
if (super.updated(e), e.has("busyId") && this.keepSaveFocus(), e.has("editingId")) {
|
|
@@ -180,7 +180,7 @@ var C = class extends p {
|
|
|
180
180
|
}
|
|
181
181
|
(e.has("currentTime") || e.has("segments")) && this.follow(), e.has("currentMatch") && this.currentMatch && this.renderRoot.querySelector("lintje-highlight[kind=\"match\"][current]")?.scrollIntoView?.({
|
|
182
182
|
block: "nearest",
|
|
183
|
-
behavior:
|
|
183
|
+
behavior: p() ? "auto" : "smooth"
|
|
184
184
|
});
|
|
185
185
|
}
|
|
186
186
|
reveal() {
|
|
@@ -188,31 +188,31 @@ var C = class extends p {
|
|
|
188
188
|
let e = this.segments[this.currentIndex];
|
|
189
189
|
e && (this.followed = e.id, this.updateComplete.then(() => this.segmentElement(e.id)?.scrollIntoView?.({
|
|
190
190
|
block: "center",
|
|
191
|
-
behavior:
|
|
191
|
+
behavior: p() ? "auto" : "smooth"
|
|
192
192
|
})));
|
|
193
193
|
}
|
|
194
194
|
follow() {
|
|
195
195
|
let e = this.segments[this.currentIndex];
|
|
196
196
|
e && e.id !== this.followed && !this.editingId && x(Date.now(), this.lastUserScroll) && (this.followed = e.id, this.segmentElement(e.id)?.scrollIntoView?.({
|
|
197
197
|
block: "nearest",
|
|
198
|
-
behavior:
|
|
198
|
+
behavior: p() ? "auto" : "smooth"
|
|
199
199
|
}));
|
|
200
200
|
}
|
|
201
201
|
renderText(e) {
|
|
202
|
-
let t = this.currentMatch?.id === e.id ? this.currentMatch.index : -1,
|
|
203
|
-
return
|
|
204
|
-
${
|
|
205
|
-
let n = e.uncertain ?
|
|
206
|
-
return e.match === -1 ? n :
|
|
202
|
+
let t = this.currentMatch?.id === e.id ? this.currentMatch.index : -1, n = b(e.text, e.uncertain, this.searchMatches?.[e.id]);
|
|
203
|
+
return l`<p class="lintje-transcript__text">
|
|
204
|
+
${n.map((e) => {
|
|
205
|
+
let n = e.uncertain ? l`<lintje-highlight kind="uncertain">${e.text}</lintje-highlight>` : e.text;
|
|
206
|
+
return e.match === -1 ? n : l`<lintje-highlight kind="match" ?current=${e.match === t}
|
|
207
207
|
>${n}</lintje-highlight
|
|
208
208
|
>`;
|
|
209
|
-
})}${e.pending ?
|
|
210
|
-
><span class="lintje-transcript__caret" aria-hidden="true"></span>` :
|
|
209
|
+
})}${e.pending ? l` <span class="lintje-transcript__pending">${e.pending}</span
|
|
210
|
+
><span class="lintje-transcript__caret" aria-hidden="true"></span>` : s}
|
|
211
211
|
</p>`;
|
|
212
212
|
}
|
|
213
213
|
renderEditor(e) {
|
|
214
214
|
let t = this.busyId === e.id;
|
|
215
|
-
return
|
|
215
|
+
return l`<div
|
|
216
216
|
class="lintje-transcript__editor"
|
|
217
217
|
@keydown=${(t) => this.onEditorKeydown(e, t)}
|
|
218
218
|
>
|
|
@@ -223,7 +223,7 @@ var C = class extends p {
|
|
|
223
223
|
hint="Ctrl+Enter bewaart, Esc annuleert"
|
|
224
224
|
.value=${e.text}
|
|
225
225
|
?disabled=${t}
|
|
226
|
-
error=${this.errors?.[e.id] ||
|
|
226
|
+
error=${this.errors?.[e.id] || s}
|
|
227
227
|
></lintje-textarea>
|
|
228
228
|
<div class="lintje-transcript__actions">
|
|
229
229
|
<lintje-button
|
|
@@ -244,7 +244,7 @@ var C = class extends p {
|
|
|
244
244
|
</div>`;
|
|
245
245
|
}
|
|
246
246
|
renderSpeaker(e, t) {
|
|
247
|
-
return this.readonly ?
|
|
247
|
+
return this.readonly ? l`<span class="lintje-transcript__speaker is-static">${e.speaker}</span>` : l`<lintje-menu-button
|
|
248
248
|
class="lintje-transcript__speaker"
|
|
249
249
|
variant="flat"
|
|
250
250
|
label=${e.speaker}
|
|
@@ -254,26 +254,26 @@ var C = class extends p {
|
|
|
254
254
|
></lintje-menu-button>`;
|
|
255
255
|
}
|
|
256
256
|
renderTime(e, t) {
|
|
257
|
-
let
|
|
258
|
-
return this.readonly ?
|
|
257
|
+
let n = m(e.start);
|
|
258
|
+
return this.readonly ? l`<span class="lintje-transcript__time is-static">${n}</span>` : l`<button
|
|
259
259
|
type="button"
|
|
260
260
|
class="lintje-transcript__time"
|
|
261
|
-
aria-label=${`Speel af vanaf ${
|
|
261
|
+
aria-label=${`Speel af vanaf ${n}`}
|
|
262
262
|
@click=${() => this.seek(e)}
|
|
263
263
|
>
|
|
264
|
-
${t ?
|
|
264
|
+
${t ? f("multimedia-player-afspelen", {
|
|
265
265
|
size: 12,
|
|
266
266
|
className: "lintje-transcript__playing"
|
|
267
|
-
}) :
|
|
267
|
+
}) : s}${n}
|
|
268
268
|
</button>`;
|
|
269
269
|
}
|
|
270
270
|
render() {
|
|
271
271
|
let e = this.currentIndex, t = this.speakers?.length ? this.speakers.map((e) => ({
|
|
272
272
|
start: 0,
|
|
273
273
|
speaker: e
|
|
274
|
-
})) : null,
|
|
275
|
-
return
|
|
276
|
-
<div class=${
|
|
274
|
+
})) : null, n = h(t ?? this.segments), r = [...n.keys()];
|
|
275
|
+
return l`<div class="lintje-transcript">
|
|
276
|
+
<div class=${d({
|
|
277
277
|
"lintje-transcript__note": !0,
|
|
278
278
|
"has-note": this.hasNote
|
|
279
279
|
})}>
|
|
@@ -289,39 +289,39 @@ var C = class extends p {
|
|
|
289
289
|
@touchmove=${this.onUserScroll}
|
|
290
290
|
@keydown=${this.onListKeydown}
|
|
291
291
|
>
|
|
292
|
-
${this.segments.map((t,
|
|
293
|
-
let
|
|
294
|
-
return
|
|
295
|
-
class=${
|
|
292
|
+
${this.segments.map((t, i) => {
|
|
293
|
+
let a = i === e, c = this.editingId === t.id, f = this.segments[i - 1]?.speaker === t.speaker, p = n.get(t.speaker);
|
|
294
|
+
return l`<li
|
|
295
|
+
class=${d({
|
|
296
296
|
"lintje-transcript__segment": !0,
|
|
297
|
-
"is-current":
|
|
298
|
-
"is-editing":
|
|
299
|
-
"is-repeat":
|
|
297
|
+
"is-current": a,
|
|
298
|
+
"is-editing": c,
|
|
299
|
+
"is-repeat": f
|
|
300
300
|
})}
|
|
301
301
|
data-id=${t.id}
|
|
302
|
-
aria-current=${
|
|
303
|
-
${
|
|
302
|
+
aria-current=${a ? "true" : s}
|
|
303
|
+
${o({ "--lintje-speaker": p ? `var(--color-chart-${p})` : null })}
|
|
304
304
|
>
|
|
305
305
|
<div class="lintje-transcript__who">
|
|
306
|
-
${this.renderSpeaker(t,
|
|
307
|
-
${t.id === this.speakingId ?
|
|
306
|
+
${this.renderSpeaker(t, r)}
|
|
307
|
+
${t.id === this.speakingId ? l`<span class="lintje-transcript__now">spreekt nu</span>` : s}
|
|
308
308
|
</div>
|
|
309
309
|
<div class="lintje-transcript__when">
|
|
310
|
-
${this.renderTime(t,
|
|
311
|
-
${(t.tags ?? []).map((e) =>
|
|
310
|
+
${this.renderTime(t, a)}
|
|
311
|
+
${(t.tags ?? []).map((e) => u({
|
|
312
312
|
value: e.label,
|
|
313
313
|
tone: e.tone ?? "neutral"
|
|
314
314
|
}))}
|
|
315
315
|
</div>
|
|
316
316
|
<div
|
|
317
317
|
class="lintje-transcript__body"
|
|
318
|
-
@dblclick=${this.readonly ||
|
|
318
|
+
@dblclick=${this.readonly || c ? s : (e) => {
|
|
319
319
|
e.preventDefault(), getSelection()?.removeAllRanges(), this.edit(t);
|
|
320
320
|
}}
|
|
321
321
|
>
|
|
322
|
-
${
|
|
322
|
+
${c ? this.renderEditor(t) : this.renderText(t)}
|
|
323
323
|
</div>
|
|
324
|
-
${this.readonly ||
|
|
324
|
+
${this.readonly || c ? s : l`<lintje-icon-button
|
|
325
325
|
class="lintje-transcript__edit"
|
|
326
326
|
icon="functioneel-bewerken"
|
|
327
327
|
label=${`Fragment van ${m(t.start)} bewerken`}
|
|
@@ -334,6 +334,6 @@ var C = class extends p {
|
|
|
334
334
|
</div>`;
|
|
335
335
|
}
|
|
336
336
|
};
|
|
337
|
-
|
|
337
|
+
n("lintje-transcript", C);
|
|
338
338
|
//#endregion
|
|
339
339
|
export { v as FOLLOW_PAUSE, C as LintjeTranscript, b as markedParts, x as shouldFollow, S as speakerMenu };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Gt as e, Jt as t, Kt as n, Yt as r, Zt as i, en as a, nn as o } from "../chunks/base-CbmWxUig.js";
|
|
2
2
|
import "./textarea.js";
|
|
3
3
|
//#region src/components/content/translator/translator.css?inline
|
|
4
|
-
var s = ":host { display: block; min-width: 0; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n/* The halves stretch to one height: the taller text sets both. The plain field has no edge of\n its own, so the surface's is the field's (3:1). */\n.lintje-translator {\n display: flex;\n border: 1px solid var(--color-border-field);\n background: var(--color-bg-surface);\n}\n.lintje-translator__half {\n flex: 1 1 0;\n min-width: 0;\n display: flex;\n flex-direction: column;\n font: var(--text-translation);\n color: var(--color-text-primary);\n}\n/* Inset, not subtle: the fields and buttons on it are the surface, so in dark it steps down. */\n.lintje-translator__half--target {\n position: relative;\n background: var(--color-bg-inset);\n border-left: 1px solid var(--color-border-default);\n}\n\n.lintje-translator__bar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-2);\n min-height: calc(var(--h-control) + 2 * var(--space-4));\n box-sizing: border-box;\n padding: var(--space-4);\n border-bottom: 1px solid var(--color-border-default);\n font: var(--text-ui);\n}\n/* A language choice keeps a readable width; on a phone it takes the row. What else stands in the\n bar keeps its own width. */\n.lintje-translator__bar ::slotted(lintje-combobox) { flex: 0 1 var(--w-translator-language); min-width: 0; }\n/* The languages flank the swap, which stands half in each bar: the source at the line, the\n target after it, so the pair reads as one \"from ⇄ to\". */\n.lintje-translator__bar--source { justify-content: flex-end; padding-right: var(--space-10); }\n.lintje-translator__half--target .lintje-translator__bar { padding-left: var(--space-10); }\n\n.lintje-translator__body {\n position: relative;\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n padding: var(--space-4);\n}\n.lintje-translator__body--source { padding-right: calc(var(--space-4) + var(--h-icon-button)); }\n/* The source body is the field: the text fills it, and the ring goes round it, inside the edge. */\n.lintje-translator__text { flex: 1; }\n.lintje-translator__body--source:has(.lintje-translator__text:focus-within) {\n outline: var(--focus-width) solid var(--color-focus);\n outline-offset: calc(var(--focus-width) * -1);\n}\n.lintje-translator__clear { position: absolute; top: var(--space-2); right: var(--space-2); }\n\n.lintje-translator__foot {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-1) var(--space-2);\n min-height: var(--h-touch);\n /* As far from the sides and the bottom as the language choices stand from the top. */\n padding: var(--space-1) var(--space-4) var(--space-4);\n font: var(--text-ui);\n}\n.lintje-translator__actions { display: flex; align-items: center; gap: var(--space-1); margin-left: auto; }\n/* The AI label belongs to the text it marks: right under it, so the foot holds only actions and\n stands level with the source's at every width. A hidden label leaves no gap. */\n.lintje-translator__body ::slotted([slot='target-note']) { align-self: flex-start; margin-top: var(--space-4); }\n/* The counter stands on the source's foot line, right, level with its tools; the text keeps\n the body. */\n.lintje-translator__text::part(counter) {\n position: absolute;\n top: calc(100% + var(--space-1) + var(--h-icon-button) / 2);\n right: var(--space-4);\n transform: translateY(-50%);\n}\n\n/* Documents: the languages in one row, the content under them at full width. */\n.lintje-translator--documents { flex-direction: column; }\n.lintje-translator__bars { display: flex; }\n.lintje-translator__content {\n display: flex;\n flex-direction: column;\n gap: var(--space-6);\n padding: var(--space-6);\n font: var(--text-ui);\n}\n\n/* On the line between the halves, level with the language choices. */\n.lintje-translator__swap {\n position: absolute;\n z-index: 1;\n top: calc(var(--space-4) + (var(--h-control) - var(--h-icon-button)) / 2);\n left: 0;\n transform: translateX(-50%);\n}\n\n@media (max-width: 767px) {\n .lintje-translator, .lintje-translator__bars { flex-direction: column; }\n .lintje-translator__content { padding: var(--space-4); }\n .lintje-translator__half--target { border-left: 0; border-top: 1px solid var(--color-border-default); }\n .lintje-translator__bar ::slotted(lintje-combobox) { flex: 1 1 100%; }\n .lintje-translator__bar--source { padding-right: var(--space-4); }\n .lintje-translator__swap { top: 0; left: 50%; transform: translate(-50%, -50%); }\n .lintje-translator__half--target .lintje-translator__bar {\n padding-top: calc(var(--space-2) + var(--h-icon-button) / 2);\n padding-left: var(--space-4);\n }\n}\n";
|
|
4
|
+
var s = ":host { display: block; min-width: 0; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n/* The halves stretch to one height: the taller text sets both. The plain field has no edge of\n its own, so the surface's is the field's (3:1). */\n.lintje-translator {\n display: flex;\n border: 1px solid var(--color-border-field);\n background: var(--color-bg-surface);\n}\n.lintje-translator__half {\n flex: 1 1 0;\n min-width: 0;\n display: flex;\n flex-direction: column;\n font: var(--text-translation);\n color: var(--color-text-primary);\n}\n/* Inset, not subtle: the fields and buttons on it are the surface, so in dark it steps down. */\n.lintje-translator__half--target {\n position: relative;\n background: var(--color-bg-inset);\n border-left: 1px solid var(--color-border-default);\n}\n\n.lintje-translator__bar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-2);\n min-height: calc(var(--h-control) + 2 * var(--space-4));\n box-sizing: border-box;\n padding: var(--space-4);\n border-bottom: 1px solid var(--color-border-default);\n font: var(--text-ui);\n}\n/* A language choice keeps a readable width; on a phone it takes the row. What else stands in the\n bar keeps its own width. */\n.lintje-translator__bar ::slotted(lintje-combobox) { flex: 0 1 var(--w-translator-language); min-width: 0; }\n/* The languages flank the swap, which stands half in each bar: the source at the line, the\n target after it, so the pair reads as one \"from ⇄ to\". */\n.lintje-translator__bar--source { justify-content: flex-end; padding-right: var(--space-10); }\n.lintje-translator__half--target .lintje-translator__bar { padding-left: var(--space-10); }\n\n.lintje-translator__body {\n position: relative;\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n padding: var(--space-4);\n}\n.lintje-translator__body--source { padding-right: calc(var(--space-4) + var(--h-icon-button)); }\n/* The source body is the field: the text fills it, and the ring goes round it, inside the edge. */\n.lintje-translator__text { flex: 1; }\n.lintje-translator__body--source:has(.lintje-translator__text:focus-within) {\n outline: var(--focus-width) solid var(--color-focus);\n outline-offset: calc(var(--focus-width) * -1);\n}\n.lintje-translator__clear { position: absolute; top: var(--space-2); right: var(--space-2); }\n\n.lintje-translator__foot {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-1) var(--space-2);\n min-height: var(--h-touch);\n /* As far from the sides and the bottom as the language choices stand from the top. */\n padding: var(--space-1) var(--space-4) var(--space-4);\n font: var(--text-ui);\n}\n.lintje-translator__actions { display: flex; align-items: center; gap: var(--space-1); margin-left: auto; }\n/* The AI label belongs to the text it marks: right under it, so the foot holds only actions and\n stands level with the source's at every width. A hidden label leaves no gap. */\n.lintje-translator__body ::slotted([slot='target-note']) { align-self: flex-start; margin-top: var(--space-4); }\n/* The counter stands on the source's foot line, right, level with its tools; the text keeps\n the body. */\n.lintje-translator__text::part(counter) {\n position: absolute;\n top: calc(100% + var(--space-1) + var(--h-icon-button) / 2);\n right: var(--space-4);\n transform: translateY(-50%);\n}\n\n/* Documents: the languages in one row, the content under them at full width. */\n.lintje-translator--documents { flex-direction: column; }\n.lintje-translator__bars { display: flex; }\n.lintje-translator__content {\n display: flex;\n flex-direction: column;\n gap: var(--space-6);\n padding: var(--space-6);\n font: var(--text-ui);\n}\n\n/* On the line between the halves, level with the language choices. */\n.lintje-translator__swap {\n position: absolute;\n z-index: 1;\n top: calc(var(--space-4) + (var(--h-control) - var(--h-icon-button)) / 2);\n left: 0;\n transform: translateX(-50%);\n}\n\n@media screen and (max-width: 767px) {\n .lintje-translator, .lintje-translator__bars { flex-direction: column; }\n .lintje-translator__content { padding: var(--space-4); }\n .lintje-translator__half--target { border-left: 0; border-top: 1px solid var(--color-border-default); }\n .lintje-translator__bar ::slotted(lintje-combobox) { flex: 1 1 100%; }\n .lintje-translator__bar--source { padding-right: var(--space-4); }\n .lintje-translator__swap { top: 0; left: 50%; transform: translate(-50%, -50%); }\n .lintje-translator__half--target .lintje-translator__bar {\n padding-top: calc(var(--space-2) + var(--h-icon-button) / 2);\n padding-left: var(--space-4);\n }\n}\n";
|
|
5
5
|
//#endregion
|
|
6
6
|
//#region src/components/content/translator/translator.ts
|
|
7
7
|
function c(e) {
|
|
@@ -10,12 +10,12 @@ function c(e) {
|
|
|
10
10
|
let { options: n, value: r } = t ?? {};
|
|
11
11
|
return Array.isArray(n) && n.find((e) => e.value === r)?.label || "";
|
|
12
12
|
}
|
|
13
|
-
var l = class extends
|
|
14
|
-
constructor(...
|
|
15
|
-
super(...
|
|
13
|
+
var l = class extends t {
|
|
14
|
+
constructor(...t) {
|
|
15
|
+
super(...t), this.value = "", this.placeholder = "Typ of plak hier je tekst", this.sourceLabel = "Tekst om te vertalen", this.targetLabel = "Vertaling", this.variant = "text", this.spoken = "", this.spokenTimer = 0, this.#e = new n(this, e);
|
|
16
16
|
}
|
|
17
17
|
static {
|
|
18
|
-
this.styles =
|
|
18
|
+
this.styles = i(s);
|
|
19
19
|
}
|
|
20
20
|
static {
|
|
21
21
|
this.properties = {
|
|
@@ -57,10 +57,10 @@ var l = class extends o {
|
|
|
57
57
|
}, 100);
|
|
58
58
|
}
|
|
59
59
|
renderStatus() {
|
|
60
|
-
return
|
|
60
|
+
return o`<span class="visually-hidden" role="status">${this.spoken}</span>`;
|
|
61
61
|
}
|
|
62
62
|
renderSwap() {
|
|
63
|
-
return
|
|
63
|
+
return o`<div class="lintje-translator__swap">
|
|
64
64
|
<lintje-icon-button
|
|
65
65
|
icon="functioneel-wissel-horizontaal"
|
|
66
66
|
label="Talen omwisselen"
|
|
@@ -70,7 +70,7 @@ var l = class extends o {
|
|
|
70
70
|
</div>`;
|
|
71
71
|
}
|
|
72
72
|
renderDocuments() {
|
|
73
|
-
return
|
|
73
|
+
return o`<div class="lintje-translator lintje-translator--documents">
|
|
74
74
|
<div class="lintje-translator__bars">
|
|
75
75
|
<div class="lintje-translator__half">
|
|
76
76
|
<div class="lintje-translator__bar lintje-translator__bar--source"><slot name="source-language"></slot></div>
|
|
@@ -84,7 +84,7 @@ var l = class extends o {
|
|
|
84
84
|
</div>${this.renderStatus()}`;
|
|
85
85
|
}
|
|
86
86
|
render() {
|
|
87
|
-
return this.variant === "documents" ? this.renderDocuments() :
|
|
87
|
+
return this.variant === "documents" ? this.renderDocuments() : o`<div class="lintje-translator">
|
|
88
88
|
<div class="lintje-translator__half" role="group" aria-label=${this.sourceLabel}>
|
|
89
89
|
<div class="lintje-translator__bar lintje-translator__bar--source"><slot name="source-language"></slot></div>
|
|
90
90
|
<div class="lintje-translator__body lintje-translator__body--source">
|
|
@@ -100,13 +100,13 @@ var l = class extends o {
|
|
|
100
100
|
.placeholder=${this.placeholder}
|
|
101
101
|
@lintje-change=${this.onText}
|
|
102
102
|
></lintje-textarea>
|
|
103
|
-
${this.value ?
|
|
103
|
+
${this.value ? o`<lintje-icon-button
|
|
104
104
|
class="lintje-translator__clear"
|
|
105
105
|
icon="functioneel-kruis"
|
|
106
106
|
label="Tekst wissen"
|
|
107
107
|
variant="flat"
|
|
108
108
|
@click=${this.clear}
|
|
109
|
-
></lintje-icon-button>` :
|
|
109
|
+
></lintje-icon-button>` : a}
|
|
110
110
|
</div>
|
|
111
111
|
<div class="lintje-translator__foot">
|
|
112
112
|
<slot name="source-actions"></slot>
|
|
@@ -126,6 +126,6 @@ var l = class extends o {
|
|
|
126
126
|
</div>${this.renderStatus()}`;
|
|
127
127
|
}
|
|
128
128
|
};
|
|
129
|
-
|
|
129
|
+
r("lintje-translator", l);
|
|
130
130
|
//#endregion
|
|
131
131
|
export { l as LintjeTranslator };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Jt as e, Yt as t, Zt as n, bt as r, en as i, lt as a, nn as o, st as s, ut as c } from "../chunks/base-CbmWxUig.js";
|
|
2
2
|
//#region src/components/tables/tree-view/tree-view.css?inline
|
|
3
3
|
var l = ":host { display: block; min-width: 0; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-tree,\n.lintje-tree__group { list-style: none; margin: 0; padding: 0; }\n.lintje-tree { font: var(--text-ui); color: var(--color-text-primary); }\n\n/* The treeitem holds its row and its children, so the ring is drawn inside the row alone. */\n.lintje-tree__item:focus-visible { outline: none; }\n.lintje-tree__item:focus-visible > .lintje-tree__row {\n outline: var(--focus-width) solid var(--color-focus);\n outline-offset: calc(var(--focus-width) * -1);\n}\n\n.lintje-tree__row {\n display: flex; align-items: center;\n gap: var(--space-1);\n height: var(--h-option);\n padding: 0 var(--space-2) 0 calc(var(--space-2) + var(--lintje-tree-depth, 0) * var(--space-5));\n cursor: pointer;\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-tree__row:hover { background: var(--color-bg-subtle); }\n.lintje-tree__row.is-selected {\n background: var(--color-bg-selected);\n box-shadow: inset 4px 0 0 var(--color-accent-line);\n font-weight: 700;\n}\n\n.lintje-tree__arrow {\n flex: none;\n display: inline-flex; align-items: center; justify-content: center;\n width: 16px; height: 16px;\n color: var(--color-text-muted);\n}\n/* The fold target reaches 24 × 24 px with a transparent hit area; it stays inside the gap. */\n.lintje-tree__arrow--toggle { position: relative; }\n.lintje-tree__arrow--toggle::after {\n content: '';\n position: absolute;\n inset: calc(var(--space-1) * -1);\n}\n.lintje-tree__label {\n min-width: 0;\n overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n.lintje-tree__count { flex: none; font-weight: 400; color: var(--color-text-muted); }\n\n@media (prefers-reduced-motion: reduce) {\n .lintje-tree__row { transition: none; }\n}\n\n/* Forced colours: the fill and inset bar are dropped. The bar becomes a real border (Canvas at\n rest, Highlight when selected), so selecting moves nothing. */\n@media (forced-colors: active) {\n .lintje-tree__row { border-left: 4px solid Canvas; }\n .lintje-tree__row.is-selected { border-left-color: Highlight; }\n}\n";
|
|
4
4
|
//#endregion
|
|
@@ -23,12 +23,12 @@ function f(e, t, n) {
|
|
|
23
23
|
}
|
|
24
24
|
return -1;
|
|
25
25
|
}
|
|
26
|
-
var p = class extends
|
|
26
|
+
var p = class extends e {
|
|
27
27
|
constructor(...e) {
|
|
28
28
|
super(...e), this.nodes = [], this.expanded = [], this.name = "", this.open = /* @__PURE__ */ new Set(), this.focusId = null;
|
|
29
29
|
}
|
|
30
30
|
static {
|
|
31
|
-
this.styles = [
|
|
31
|
+
this.styles = [a, n(l)];
|
|
32
32
|
}
|
|
33
33
|
static {
|
|
34
34
|
this.properties = {
|
|
@@ -118,41 +118,41 @@ var p = class extends c {
|
|
|
118
118
|
@click=${(n) => {
|
|
119
119
|
n.stopPropagation(), this.toggle(e, !t);
|
|
120
120
|
}}
|
|
121
|
-
>${
|
|
121
|
+
>${c(t ? "functioneel-delta-omlaag" : "functioneel-delta-rechts", { size: 16 })}</span
|
|
122
122
|
>`;
|
|
123
123
|
}
|
|
124
|
-
item(e, t,
|
|
124
|
+
item(e, t, n) {
|
|
125
125
|
let a = u(e), c = a && this.open.has(e.id), l = e.id === this.selectedId, d = e.count ?? e.children?.length;
|
|
126
126
|
return o`<li
|
|
127
127
|
class="lintje-tree__item"
|
|
128
128
|
role="treeitem"
|
|
129
129
|
data-id=${e.id}
|
|
130
|
-
tabindex=${e.id ===
|
|
130
|
+
tabindex=${e.id === n ? "0" : "-1"}
|
|
131
131
|
aria-level=${t}
|
|
132
132
|
aria-selected=${l ? "true" : "false"}
|
|
133
|
-
aria-expanded=${a ? String(c) :
|
|
134
|
-
aria-busy=${e.loading ? "true" :
|
|
133
|
+
aria-expanded=${a ? String(c) : i}
|
|
134
|
+
aria-busy=${e.loading ? "true" : i}
|
|
135
135
|
@focus=${(t) => {
|
|
136
136
|
t.target === t.currentTarget && (this.focusId = e.id);
|
|
137
137
|
}}
|
|
138
138
|
>
|
|
139
139
|
<div
|
|
140
|
-
class=${
|
|
140
|
+
class=${s({
|
|
141
141
|
"lintje-tree__row": !0,
|
|
142
142
|
"is-selected": l
|
|
143
143
|
})}
|
|
144
|
-
${
|
|
144
|
+
${r({ "--lintje-tree-depth": t - 1 })}
|
|
145
145
|
@click=${() => {
|
|
146
146
|
this.choose(e), this.moveFocus(e.id);
|
|
147
147
|
}}
|
|
148
148
|
>
|
|
149
149
|
${this.arrow(e)}
|
|
150
150
|
<span class="lintje-tree__label">${e.label}</span>
|
|
151
|
-
${a && !c && d ? o`<span class="lintje-tree__count">· ${d}</span>` :
|
|
151
|
+
${a && !c && d ? o`<span class="lintje-tree__count">· ${d}</span>` : i}
|
|
152
152
|
</div>
|
|
153
153
|
${c && e.children?.length ? o`<ul class="lintje-tree__group" role="group">
|
|
154
|
-
${e.children.map((e) => this.item(e, t + 1,
|
|
155
|
-
</ul>` :
|
|
154
|
+
${e.children.map((e) => this.item(e, t + 1, n))}
|
|
155
|
+
</ul>` : i}
|
|
156
156
|
</li>`;
|
|
157
157
|
}
|
|
158
158
|
render() {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { H as e, Jt as t, Yt as n, Zt as r, en as i, et as a, lt as o, nn as s, st as c, ut as l } from "../chunks/base-CbmWxUig.js";
|
|
2
2
|
import { n as u, nextRow as d, renderMenuEntries as f, t as p } from "./menu-button.js";
|
|
3
3
|
//#region src/components/frame/user-menu/user-menu.css?inline
|
|
4
|
-
var m = "/*\n * The host is the avatar button's `--h-touch` box in the navigation bar; the menu is a fixed popover\n * and takes no space. `inline`, it is a block at the bottom of the mobile navigation.\n * `menu-button.css` is adopted beside this file: the rows are its `.lintje-menu__row`.\n */\n:host { display: inline-flex; flex: none; vertical-align: middle; }\n:host([inline]) { display: block; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n/* The avatar and the chevron that says it opens a menu; at least `--h-touch` high. */\n.lintje-user-menu__trigger {\n display: flex; align-items: center; justify-content: center;\n gap: var(--space-2);\n min-width: var(--h-touch); height: var(--lintje-tool-height, var(--h-touch));\n padding: 0 var(--space-3);\n color: var(--color-nav-text);\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-user-menu__trigger:hover,\n.lintje-user-menu__trigger.is-open { background: var(--color-nav-hover); }\n\n.lintje-user-menu__avatar {\n display: flex; align-items: center; justify-content: center;\n flex: none;\n width: 2rem; height: 2rem;\n border-radius: var(--radius-round);\n background: var(--color-nav-avatar-bg);\n color: var(--color-nav-avatar-text);\n font-size: 0.875rem; font-weight: 700;\n}\n\n.lintje-user-menu__panel {\n width: 17.5rem;\n max-width: 100%;\n font: var(--text-ui);\n color: var(--color-text-primary);\n}\n\n.lintje-user-menu__who {\n display: flex; align-items: center; gap: var(--space-3);\n padding: var(--space-3) var(--space-4);\n border-bottom: 1px solid var(--color-border-default);\n}\n.lintje-user-menu__names { min-width: 0; }\n.lintje-user-menu__name { margin: 0; font-weight: 700; overflow-wrap: anywhere; }\n.lintje-user-menu__role { margin: 0; font-size: 0.875rem; color: var(--color-text-muted); }\n\n.lintje-user-menu__group { display: flex; flex-direction: column; padding: var(--space-1) 0; }\n.lintje-user-menu__group--logout { border-top: 1px solid var(--color-border-default); }\n.lintje-user-menu__group:first-child.lintje-user-menu__group--logout { border-top: 0; }\n.lintje-user-menu__logout { display: flex; flex-direction: column; margin: 0; }\n.lintje-user-menu__logout-row { font-weight: 700; }\n\n.lintje-user-menu__version {\n margin: 0;\n padding: var(--space-2) var(--space-4);\n border-top: 1px solid var(--color-border-default);\n font-size: 0.875rem;\n color: var(--color-text-muted);\n}\n\n.lintje-user-menu__panel.is-inline { width: 100%; color: var(--color-nav-text); }\n.lintje-user-menu__panel.is-inline .lintje-user-menu__who,\n.lintje-user-menu__panel.is-inline .lintje-user-menu__group--logout,\n.lintje-user-menu__panel.is-inline .lintje-user-menu__version { border-color: var(--color-nav-line); }\n.lintje-user-menu__panel.is-inline .lintje-user-menu__who { padding: var(--space-4) var(--space-5); }\n/* Small text on the theme fill takes the menu's own ink: the sub tint is 3.82:1 on #01689B. */\n.lintje-user-menu__panel.is-inline .lintje-user-menu__role,\n.lintje-user-menu__panel.is-inline .lintje-user-menu__version,\n.lintje-user-menu__panel.is-inline .lintje-menu__hint { color: var(--color-nav-text); }\n.lintje-user-menu__panel.is-inline .lintje-user-menu__version { padding: var(--space-2) var(--space-5); }\n.lintje-user-menu__panel.is-inline .lintje-menu__row {\n height: var(--h-touch);\n padding: 0 var(--space-5);\n color: var(--color-nav-text);\n}\n.lintje-user-menu__panel.is-inline .lintje-menu__row:hover { background: var(--color-nav-hover); }\n.lintje-user-menu__panel.is-inline .lintje-menu__row.is-disabled,\n.lintje-user-menu__panel.is-inline .lintje-menu__row.is-disabled .lintje-menu__hint { color: var(--color-nav-disabled); }\n.lintje-user-menu__panel.is-inline .lintje-menu__separator { background: var(--color-nav-line); }\n\n/* On the theme fill the orange ring disappears: the on-theme ring, as the side menu. */\n.lintje-user-menu__trigger:focus-visible,\n.lintje-user-menu__panel.is-inline :focus-visible { outline-color: var(--color-focus-on-theme); }\n\n/* Forced colours: the open button keeps a Highlight edge, the avatar a CanvasText ring. */\n@media (forced-colors: active) {\n .lintje-user-menu__trigger:focus-visible,\n .lintje-user-menu__panel.is-inline :focus-visible { outline-color: Highlight; }\n .lintje-user-menu__trigger.is-open:not(:focus-visible) { outline: 1px solid Highlight; outline-offset: -1px; }\n .lintje-user-menu__avatar { border: 1px solid CanvasText; }\n}\n", h = 0, g = class extends
|
|
4
|
+
var m = "/*\n * The host is the avatar button's `--h-touch` box in the navigation bar; the menu is a fixed popover\n * and takes no space. `inline`, it is a block at the bottom of the mobile navigation.\n * `menu-button.css` is adopted beside this file: the rows are its `.lintje-menu__row`.\n */\n:host { display: inline-flex; flex: none; vertical-align: middle; }\n:host([inline]) { display: block; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n/* The avatar and the chevron that says it opens a menu; at least `--h-touch` high. */\n.lintje-user-menu__trigger {\n display: flex; align-items: center; justify-content: center;\n gap: var(--space-2);\n min-width: var(--h-touch); height: var(--lintje-tool-height, var(--h-touch));\n padding: 0 var(--space-3);\n color: var(--color-nav-text);\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-user-menu__trigger:hover,\n.lintje-user-menu__trigger.is-open { background: var(--color-nav-hover); }\n\n.lintje-user-menu__avatar {\n display: flex; align-items: center; justify-content: center;\n flex: none;\n width: 2rem; height: 2rem;\n border-radius: var(--radius-round);\n background: var(--color-nav-avatar-bg);\n color: var(--color-nav-avatar-text);\n font-size: 0.875rem; font-weight: 700;\n}\n\n.lintje-user-menu__panel {\n width: 17.5rem;\n max-width: 100%;\n font: var(--text-ui);\n color: var(--color-text-primary);\n}\n\n.lintje-user-menu__who {\n display: flex; align-items: center; gap: var(--space-3);\n padding: var(--space-3) var(--space-4);\n border-bottom: 1px solid var(--color-border-default);\n}\n.lintje-user-menu__names { min-width: 0; }\n.lintje-user-menu__name { margin: 0; font-weight: 700; overflow-wrap: anywhere; }\n.lintje-user-menu__role { margin: 0; font-size: 0.875rem; color: var(--color-text-muted); }\n\n.lintje-user-menu__group { display: flex; flex-direction: column; padding: var(--space-1) 0; }\n.lintje-user-menu__group--logout { border-top: 1px solid var(--color-border-default); }\n.lintje-user-menu__group:first-child.lintje-user-menu__group--logout { border-top: 0; }\n.lintje-user-menu__logout { display: flex; flex-direction: column; margin: 0; }\n.lintje-user-menu__logout-row { font-weight: 700; }\n\n.lintje-user-menu__version {\n margin: 0;\n padding: var(--space-2) var(--space-4);\n border-top: 1px solid var(--color-border-default);\n font-size: 0.875rem;\n color: var(--color-text-muted);\n}\n\n.lintje-user-menu__panel.is-inline { width: 100%; color: var(--color-nav-text); }\n.lintje-user-menu__panel.is-inline .lintje-user-menu__who,\n.lintje-user-menu__panel.is-inline .lintje-user-menu__group--logout,\n.lintje-user-menu__panel.is-inline .lintje-user-menu__version { border-color: var(--color-nav-line); }\n.lintje-user-menu__panel.is-inline .lintje-user-menu__who { padding: var(--space-4) var(--space-5); }\n/* Small text on the theme fill takes the menu's own ink: the sub tint is 3.82:1 on #01689B. */\n.lintje-user-menu__panel.is-inline .lintje-user-menu__role,\n.lintje-user-menu__panel.is-inline .lintje-user-menu__version,\n.lintje-user-menu__panel.is-inline .lintje-menu__hint { color: var(--color-nav-text); }\n.lintje-user-menu__panel.is-inline .lintje-user-menu__version { padding: var(--space-2) var(--space-5); }\n.lintje-user-menu__panel.is-inline .lintje-menu__row {\n height: var(--h-touch);\n padding: 0 var(--space-5);\n color: var(--color-nav-text);\n}\n.lintje-user-menu__panel.is-inline .lintje-menu__row:hover { background: var(--color-nav-hover); }\n.lintje-user-menu__panel.is-inline .lintje-menu__row.is-disabled,\n.lintje-user-menu__panel.is-inline .lintje-menu__row.is-disabled .lintje-menu__hint { color: var(--color-nav-disabled); }\n.lintje-user-menu__panel.is-inline .lintje-menu__separator { background: var(--color-nav-line); }\n\n/* On the theme fill the orange ring disappears: the on-theme ring, as the side menu. */\n.lintje-user-menu__trigger:focus-visible,\n.lintje-user-menu__panel.is-inline :focus-visible { outline-color: var(--color-focus-on-theme); }\n\n/* Forced colours: the open button keeps a Highlight edge, the avatar a CanvasText ring. */\n@media (forced-colors: active) {\n .lintje-user-menu__trigger:focus-visible,\n .lintje-user-menu__panel.is-inline :focus-visible { outline-color: Highlight; }\n .lintje-user-menu__trigger.is-open:not(:focus-visible) { outline: 1px solid Highlight; outline-offset: -1px; }\n .lintje-user-menu__avatar { border: 1px solid CanvasText; }\n}\n", h = 0, g = class extends t {
|
|
5
5
|
static {
|
|
6
6
|
this.styles = [
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
o,
|
|
8
|
+
r(u),
|
|
9
|
+
r(p),
|
|
10
|
+
r(m)
|
|
11
11
|
];
|
|
12
12
|
}
|
|
13
13
|
static {
|
|
@@ -58,7 +58,7 @@ var m = "/*\n * The host is the avatar button's `--h-touch` box in the navigatio
|
|
|
58
58
|
constructor() {
|
|
59
59
|
super(), this.items = [], this.csrf = "", this.inline = !1, this.open = !1, this.#e = `lintje-user-menu-${++h}`, this.#t = null, this.onFocusOut = (e) => {
|
|
60
60
|
let t = e.relatedTarget;
|
|
61
|
-
this.open && t && !
|
|
61
|
+
this.open && t && !a(t, this) && !a(this, t) && this.hide(!1);
|
|
62
62
|
}, this.onTriggerKeydown = (e) => {
|
|
63
63
|
(e.key === "ArrowDown" || e.key === "ArrowUp") && (e.preventDefault(), this.show(e.key === "ArrowDown" ? "first" : "last"));
|
|
64
64
|
}, this.onMenuKeydown = (e) => {
|
|
@@ -90,8 +90,8 @@ var m = "/*\n * The host is the avatar button's `--h-touch` box in the navigatio
|
|
|
90
90
|
onPopoverClose(e) {
|
|
91
91
|
e.stopPropagation(), this.hide(e.detail?.reason === "escape");
|
|
92
92
|
}
|
|
93
|
-
choose(
|
|
94
|
-
|
|
93
|
+
choose(t, n) {
|
|
94
|
+
t.disabled ? n.preventDefault() : (!t.href || e(n)) && (this.hide(!this.inline), this.emit("lintje-action", t.value), t.href && this.followLink(t.href, n));
|
|
95
95
|
}
|
|
96
96
|
logout() {
|
|
97
97
|
this.hide(!this.inline), this.emit("lintje-logout");
|
|
@@ -103,41 +103,41 @@ var m = "/*\n * The host is the avatar button's `--h-touch` box in the navigatio
|
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
renderRow(e) {
|
|
106
|
-
let t = this.inline ?
|
|
106
|
+
let t = this.inline ? i : "menuitem", n = this.inline ? i : "-1", r = c({
|
|
107
107
|
"lintje-menu__row": !0,
|
|
108
108
|
"focus-inset": !0,
|
|
109
109
|
"is-danger": !!e.danger,
|
|
110
110
|
"is-disabled": !!e.disabled
|
|
111
|
-
}), a =
|
|
111
|
+
}), a = s`${e.icon ? l(e.icon, {
|
|
112
112
|
size: 16,
|
|
113
113
|
className: "lintje-menu__icon"
|
|
114
|
-
}) :
|
|
115
|
-
if (e.href && !e.disabled) return
|
|
116
|
-
class=${
|
|
114
|
+
}) : i}<span class="lintje-menu__label">${e.label}</span>${e.hint ? s`<span class="lintje-menu__hint">${e.hint}</span>` : i}`;
|
|
115
|
+
if (e.href && !e.disabled) return s`<a
|
|
116
|
+
class=${r}
|
|
117
117
|
role=${t}
|
|
118
118
|
tabindex=${n}
|
|
119
119
|
href=${e.href}
|
|
120
120
|
@click=${(t) => this.choose(e, t)}
|
|
121
121
|
>${a}</a
|
|
122
122
|
>`;
|
|
123
|
-
let
|
|
123
|
+
let o = s`<button
|
|
124
124
|
type="button"
|
|
125
|
-
class=${
|
|
125
|
+
class=${r}
|
|
126
126
|
role=${t}
|
|
127
127
|
tabindex=${n}
|
|
128
|
-
aria-disabled=${e.disabled ? "true" :
|
|
128
|
+
aria-disabled=${e.disabled ? "true" : i}
|
|
129
129
|
@click=${(t) => this.choose(e, t)}
|
|
130
130
|
>
|
|
131
131
|
${a}
|
|
132
132
|
</button>`;
|
|
133
|
-
return e.disabled && e.reason ?
|
|
133
|
+
return e.disabled && e.reason ? s`<lintje-tooltip class="lintje-menu__tip" text=${e.reason}>${o}</lintje-tooltip>` : o;
|
|
134
134
|
}
|
|
135
135
|
renderLogout() {
|
|
136
|
-
let e = this.inline ?
|
|
136
|
+
let e = this.inline ? i : "menuitem", t = this.inline ? i : "-1", n = l("functioneel-uitloggen", {
|
|
137
137
|
size: 16,
|
|
138
138
|
className: "lintje-menu__icon"
|
|
139
|
-
}),
|
|
140
|
-
return this.logoutAction ?
|
|
139
|
+
}), r = s`${n}<span class="lintje-menu__label">Afmelden</span>`;
|
|
140
|
+
return this.logoutAction ? s`<form class="lintje-user-menu__logout" method="post" action=${this.logoutAction}>
|
|
141
141
|
<input type="hidden" name="csrf_token" .value=${this.csrf} />
|
|
142
142
|
<button
|
|
143
143
|
type="submit"
|
|
@@ -145,53 +145,53 @@ var m = "/*\n * The host is the avatar button's `--h-touch` box in the navigatio
|
|
|
145
145
|
role=${e}
|
|
146
146
|
tabindex=${t}
|
|
147
147
|
>
|
|
148
|
-
${
|
|
148
|
+
${r}
|
|
149
149
|
</button>
|
|
150
|
-
</form>` :
|
|
150
|
+
</form>` : s`<button
|
|
151
151
|
type="button"
|
|
152
152
|
class="lintje-menu__row lintje-user-menu__logout-row focus-inset"
|
|
153
153
|
role=${e}
|
|
154
154
|
tabindex=${t}
|
|
155
155
|
@click=${() => this.logout()}
|
|
156
156
|
>
|
|
157
|
-
${
|
|
157
|
+
${r}
|
|
158
158
|
</button>`;
|
|
159
159
|
}
|
|
160
160
|
renderContent() {
|
|
161
161
|
let e = this.user;
|
|
162
|
-
return
|
|
163
|
-
class=${
|
|
162
|
+
return s`<div
|
|
163
|
+
class=${c({
|
|
164
164
|
"lintje-user-menu__panel": !0,
|
|
165
165
|
"is-inline": this.inline
|
|
166
166
|
})}
|
|
167
167
|
@keydown=${this.onMenuKeydown}
|
|
168
168
|
>
|
|
169
|
-
${e ?
|
|
170
|
-
${this.inline ?
|
|
169
|
+
${e ? s`<div class="lintje-user-menu__who">
|
|
170
|
+
${this.inline ? s`<span class="lintje-user-menu__avatar" aria-hidden="true">${e.initials}</span>` : i}
|
|
171
171
|
<div class="lintje-user-menu__names">
|
|
172
172
|
<p class="lintje-user-menu__name">${e.name}</p>
|
|
173
|
-
${e.role ?
|
|
173
|
+
${e.role ? s`<p class="lintje-user-menu__role">${e.role}</p>` : i}
|
|
174
174
|
</div>
|
|
175
|
-
</div>` :
|
|
175
|
+
</div>` : i}
|
|
176
176
|
<div
|
|
177
177
|
class="lintje-user-menu__menu"
|
|
178
178
|
role=${this.inline ? "group" : "menu"}
|
|
179
179
|
aria-label=${e ? `Menu van ${e.name}` : "Gebruikersmenu"}
|
|
180
180
|
>
|
|
181
|
-
${this.items.length ?
|
|
181
|
+
${this.items.length ? s`<div class="lintje-user-menu__group">
|
|
182
182
|
${f(this.items, "lintje-user-menu", (e) => this.renderRow(e))}
|
|
183
|
-
</div>` :
|
|
183
|
+
</div>` : i}
|
|
184
184
|
<div class="lintje-user-menu__group lintje-user-menu__group--logout">${this.renderLogout()}</div>
|
|
185
185
|
</div>
|
|
186
|
-
${this.version ?
|
|
186
|
+
${this.version ? s`<p class="lintje-user-menu__version">Versie ${this.version}</p>` : i}
|
|
187
187
|
</div>`;
|
|
188
188
|
}
|
|
189
189
|
render() {
|
|
190
190
|
if (this.inline) return this.renderContent();
|
|
191
191
|
let e = this.user;
|
|
192
|
-
return
|
|
192
|
+
return s`<button
|
|
193
193
|
type="button"
|
|
194
|
-
class=${
|
|
194
|
+
class=${c({
|
|
195
195
|
"lintje-user-menu__trigger": !0,
|
|
196
196
|
"is-open": this.open
|
|
197
197
|
})}
|
|
@@ -203,7 +203,7 @@ var m = "/*\n * The host is the avatar button's `--h-touch` box in the navigatio
|
|
|
203
203
|
@keydown=${this.onTriggerKeydown}
|
|
204
204
|
>
|
|
205
205
|
<span class="lintje-user-menu__avatar" aria-hidden="true">${e?.initials ?? ""}</span>
|
|
206
|
-
${
|
|
206
|
+
${l("functioneel-delta-omlaag", {
|
|
207
207
|
size: 16,
|
|
208
208
|
rotate: this.open ? 180 : void 0
|
|
209
209
|
})}
|
|
@@ -217,6 +217,6 @@ var m = "/*\n * The host is the avatar button's `--h-touch` box in the navigatio
|
|
|
217
217
|
>`;
|
|
218
218
|
}
|
|
219
219
|
};
|
|
220
|
-
|
|
220
|
+
n("lintje-user-menu", g);
|
|
221
221
|
//#endregion
|
|
222
222
|
export { g as LintjeUserMenu };
|