lintje 0.5.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-elements/actions.js +1 -5
- package/dist-elements/charts.js +1 -5
- package/dist-elements/chat.js +1 -6
- package/dist-elements/chunks/addon-CFoSG70u.js +5 -0
- package/dist-elements/chunks/base-BsZyWDre.js +226 -0
- package/dist-elements/chunks/chart-styles-C5IzbVUF.js +44 -0
- package/dist-elements/chunks/controls-lVYdiFQu.js +1 -0
- package/dist-elements/chunks/copied-Dx6jfxoK.js +1 -0
- package/dist-elements/chunks/date-format-5bii3QLP.js +1 -0
- package/dist-elements/chunks/debounce-Dfwdcv-z.js +1 -0
- package/dist-elements/chunks/dialog-close-CzMRXkJ6.js +1 -0
- package/dist-elements/chunks/disclosure-CQcLUnKh.js +22 -0
- package/dist-elements/chunks/disclosure-DjLQzn9n.js +1 -0
- package/dist-elements/chunks/download-CxEzwMxI.js +13 -0
- package/dist-elements/chunks/focus-trap-BDxiHED1.js +1 -0
- package/dist-elements/chunks/follow-7IBDa51N.js +1 -0
- package/dist-elements/chunks/input-C7qx0e4p.js +8 -0
- package/dist-elements/chunks/input-CazTpGUd.js +1 -0
- package/dist-elements/chunks/key-CAxrgBxD.js +1 -0
- package/dist-elements/chunks/live-message-CYZ-Ch7D.js +1 -0
- package/dist-elements/chunks/other-BaLStKaf.js +11 -0
- package/dist-elements/chunks/playback-gEUDw038.js +1 -0
- package/dist-elements/chunks/player-BEG3MVCm.js +39 -0
- package/dist-elements/chunks/prose-DOF7h3je.js +1 -0
- package/dist-elements/chunks/sentence-CjgQjBP9.js +3 -0
- package/dist-elements/chunks/sentence-end-DqHdi7Wb.js +1 -0
- package/dist-elements/chunks/stagger-CwsMNTLl.js +133 -0
- package/dist-elements/chunks/transition-DZKyyCQs.js +1 -0
- package/dist-elements/content.js +1 -11
- package/dist-elements/core.js +1 -1
- package/dist-elements/custom-elements.json +627 -161
- package/dist-elements/data-types.json +294 -28
- package/dist-elements/dev.js +1 -31
- package/dist-elements/feedback.js +1 -11
- package/dist-elements/filters.js +1 -3
- package/dist-elements/forms.js +1 -7
- package/dist-elements/frame.js +1 -9
- package/dist-elements/guides/dashboard.md +3 -2
- package/dist-elements/guides/events.md +19 -3
- package/dist-elements/guides/start.md +6 -3
- package/dist-elements/inputs.js +1 -21
- package/dist-elements/layout.js +1 -4
- package/dist-elements/lintje.js +3769 -43711
- package/dist-elements/map.js +1 -1
- package/dist-elements/overlays.js +1 -5
- package/dist-elements/tables.js +1 -9
- package/dist-elements/tag/activity-log.js +11 -59
- package/dist-elements/tag/ai-label.js +5 -38
- package/dist-elements/tag/announcement.js +9 -105
- package/dist-elements/tag/app-search.js +26 -177
- package/dist-elements/tag/audio-player.js +51 -265
- package/dist-elements/tag/badge.js +1 -1
- package/dist-elements/tag/breadcrumbs.js +11 -76
- package/dist-elements/tag/button.js +1 -1
- package/dist-elements/tag/card-list.js +9 -78
- package/dist-elements/tag/card.js +37 -172
- package/dist-elements/tag/chart.js +468 -2302
- package/dist-elements/tag/chat-answer.js +56 -201
- package/dist-elements/tag/chat-composer.js +53 -410
- package/dist-elements/tag/chat-message.js +14 -76
- package/dist-elements/tag/chat-strip.js +28 -108
- package/dist-elements/tag/chat-suggestions.js +9 -52
- package/dist-elements/tag/chat.js +40 -198
- package/dist-elements/tag/checkbox-group.js +17 -49
- package/dist-elements/tag/checkbox.js +10 -49
- package/dist-elements/tag/code.js +9 -55
- package/dist-elements/tag/combobox.js +25 -183
- package/dist-elements/tag/conflict-alert.js +15 -70
- package/dist-elements/tag/copy-button.js +13 -104
- package/dist-elements/tag/data-table.js +314 -1546
- package/dist-elements/tag/date-input.js +30 -159
- package/dist-elements/tag/date-range.js +35 -235
- package/dist-elements/tag/description-list.js +20 -89
- package/dist-elements/tag/dialog.js +10 -120
- package/dist-elements/tag/document-viewer.js +39 -211
- package/dist-elements/tag/drawer.js +10 -86
- package/dist-elements/tag/empty-state.js +1 -58
- package/dist-elements/tag/error-page.js +13 -90
- package/dist-elements/tag/error-summary.js +16 -75
- package/dist-elements/tag/expander.js +5 -68
- package/dist-elements/tag/explainer.js +6 -61
- package/dist-elements/tag/field.js +5 -50
- package/dist-elements/tag/file-upload.js +45 -239
- package/dist-elements/tag/filter-bar.js +48 -221
- package/dist-elements/tag/filter-sheet.js +8 -78
- package/dist-elements/tag/filter-zone.js +24 -202
- package/dist-elements/tag/find.js +18 -112
- package/dist-elements/tag/footer.js +14 -36
- package/dist-elements/tag/form-actions.js +3 -103
- package/dist-elements/tag/form-section.js +6 -49
- package/dist-elements/tag/form.js +7 -293
- package/dist-elements/tag/gallery.js +12 -50
- package/dist-elements/tag/grid-item.js +1 -1
- package/dist-elements/tag/grid.js +1 -1
- package/dist-elements/tag/hero.js +7 -50
- package/dist-elements/tag/highlight.js +4 -58
- package/dist-elements/tag/icon-button.js +1 -1
- package/dist-elements/tag/icon.js +1 -1
- package/dist-elements/tag/job-list.js +4 -117
- package/dist-elements/tag/kpi-row.js +10 -30
- package/dist-elements/tag/kpi.js +79 -362
- package/dist-elements/tag/level-meter.js +9 -52
- package/dist-elements/tag/list.js +44 -233
- package/dist-elements/tag/log-viewer.js +104 -710
- package/dist-elements/tag/logo.js +27 -85
- package/dist-elements/tag/map.js +833 -21857
- package/dist-elements/tag/menu-button.js +40 -291
- package/dist-elements/tag/modal.js +16 -82
- package/dist-elements/tag/multiselect.js +29 -158
- package/dist-elements/tag/note.js +3 -22
- package/dist-elements/tag/notifications.js +34 -160
- package/dist-elements/tag/number-input.js +23 -90
- package/dist-elements/tag/page-header.js +18 -180
- package/dist-elements/tag/pagination.js +31 -234
- package/dist-elements/tag/popover.js +1 -1
- package/dist-elements/tag/progress-bar.js +1 -1
- package/dist-elements/tag/prose.js +1 -31
- package/dist-elements/tag/qr-code.js +6 -878
- package/dist-elements/tag/radio-group.js +31 -64
- package/dist-elements/tag/range.js +33 -231
- package/dist-elements/tag/recording-status.js +10 -82
- package/dist-elements/tag/repeater-row.js +1 -1
- package/dist-elements/tag/repeater.js +9 -140
- package/dist-elements/tag/segmented.js +13 -74
- package/dist-elements/tag/select.js +9 -51
- package/dist-elements/tag/shell.js +274 -1026
- package/dist-elements/tag/skeleton.js +1 -1
- package/dist-elements/tag/slot-picker.js +18 -61
- package/dist-elements/tag/sortable-list.js +23 -197
- package/dist-elements/tag/spinner.js +1 -1
- package/dist-elements/tag/split-pane.js +12 -157
- package/dist-elements/tag/status-dot.js +1 -1
- package/dist-elements/tag/stepper.js +20 -120
- package/dist-elements/tag/streaming-text.js +14 -94
- package/dist-elements/tag/sub-nav.js +27 -141
- package/dist-elements/tag/tabs.js +41 -153
- package/dist-elements/tag/tag-input.js +35 -218
- package/dist-elements/tag/text-editor.js +32 -398
- package/dist-elements/tag/text-input.js +56 -130
- package/dist-elements/tag/textarea.js +14 -142
- package/dist-elements/tag/tile.js +1 -1
- package/dist-elements/tag/time-input.js +19 -201
- package/dist-elements/tag/toast.js +12 -100
- package/dist-elements/tag/toggle.js +7 -40
- package/dist-elements/tag/toggletip.js +7 -108
- package/dist-elements/tag/token-value.js +2 -72
- package/dist-elements/tag/tooltip.js +1 -1
- package/dist-elements/tag/transcript.js +38 -285
- package/dist-elements/tag/translator.js +7 -80
- package/dist-elements/tag/tree-view.js +25 -159
- package/dist-elements/tag/user-menu.js +47 -182
- package/dist-elements/tag/video-player.js +16 -155
- package/dist-elements/tokens.css +26 -8
- package/dist-elements/tokens.json +14 -6
- package/dist-elements/types/components/actions/button/button.d.ts +1 -0
- package/dist-elements/types/components/actions/icon/icon.d.ts +2 -1
- package/dist-elements/types/components/actions/icon-button/icon-button.d.ts +0 -5
- package/dist-elements/types/components/actions/logo/logo.d.ts +7 -2
- package/dist-elements/types/components/charts/chart/chart.d.ts +9 -1
- package/dist-elements/types/components/chat/chat/chat.d.ts +0 -2
- package/dist-elements/types/components/chat/chat-composer/chat-composer.d.ts +1 -11
- package/dist-elements/types/components/content/document-viewer/document-viewer.d.ts +14 -1
- package/dist-elements/types/components/content/log-viewer/log-viewer.d.ts +1 -2
- package/dist-elements/types/components/feedback/job-list/job-list.d.ts +9 -2
- package/dist-elements/types/components/feedback/recording-status/recording-status.d.ts +5 -2
- package/dist-elements/types/components/feedback/streaming-text/streaming-text.d.ts +1 -0
- package/dist-elements/types/components/filters/filter-bar/filter-bar.d.ts +3 -0
- package/dist-elements/types/components/filters/filter-sheet/filter-sheet.d.ts +2 -7
- package/dist-elements/types/components/filters/filter-zone/filter-zone.d.ts +0 -2
- package/dist-elements/types/components/forms/error-summary/error-summary.d.ts +5 -1
- package/dist-elements/types/components/forms/form/form.d.ts +10 -3
- package/dist-elements/types/components/forms/form-actions/form-actions.d.ts +4 -1
- package/dist-elements/types/components/forms/repeater/repeater.d.ts +1 -1
- package/dist-elements/types/components/forms/stepper/stepper.d.ts +12 -1
- package/dist-elements/types/components/frame/app-search/app-search.d.ts +1 -0
- package/dist-elements/types/components/frame/notifications/notifications.d.ts +0 -2
- package/dist-elements/types/components/frame/page-header/page-header.d.ts +1 -1
- package/dist-elements/types/components/frame/shell/header.d.ts +6 -8
- package/dist-elements/types/components/frame/shell/navigation.d.ts +0 -7
- package/dist-elements/types/components/frame/shell/shell.d.ts +7 -6
- package/dist-elements/types/components/frame/shell/top-bar.d.ts +5 -2
- package/dist-elements/types/components/frame/user-menu/user-menu.d.ts +15 -2
- package/dist-elements/types/components/index.d.ts +3 -2
- package/dist-elements/types/components/inputs/checkbox-group/checkbox-group.d.ts +15 -8
- package/dist-elements/types/components/inputs/file-upload/file-upload.d.ts +12 -2
- package/dist-elements/types/components/inputs/find/find.d.ts +0 -3
- package/dist-elements/types/components/inputs/number-input/number-input.d.ts +7 -4
- package/dist-elements/types/components/inputs/radio-group/radio-group.d.ts +16 -4
- package/dist-elements/types/components/inputs/range/range.d.ts +1 -1
- package/dist-elements/types/components/inputs/segmented/segmented.d.ts +0 -2
- package/dist-elements/types/components/inputs/shared/addon.d.ts +14 -0
- package/dist-elements/types/components/inputs/shared/input.d.ts +83 -4
- package/dist-elements/types/components/inputs/tag-input/tag-input.d.ts +0 -1
- package/dist-elements/types/components/inputs/text-input/text-input.d.ts +15 -1
- package/dist-elements/types/components/inputs/textarea/textarea.d.ts +3 -2
- package/dist-elements/types/components/layout/tabs/tabs.d.ts +0 -4
- package/dist-elements/types/components/map/map/map.d.ts +9 -1
- package/dist-elements/types/components/overlays/popover/popover.d.ts +8 -5
- package/dist-elements/types/components/overlays/toggletip/toggletip.d.ts +2 -4
- package/dist-elements/types/components/overlays/tooltip/tooltip.d.ts +0 -2
- package/dist-elements/types/components/shared/charts/map-chart/drawings.d.ts +4 -1
- package/dist-elements/types/components/shared/charts/map-chart/leaflet.d.ts +1 -1
- package/dist-elements/types/components/shared/charts/map-chart/map-chart.d.ts +5 -2
- package/dist-elements/types/components/shared/charts/map-chart/marks.d.ts +15 -4
- package/dist-elements/types/components/shared/charts/map-chart/series-style.d.ts +10 -0
- package/dist-elements/types/components/shared/charts/pie-chart/pie-chart.d.ts +2 -1
- package/dist-elements/types/components/shared/charts/shared/axes.d.ts +5 -3
- package/dist-elements/types/components/shared/charts/shared/controller.d.ts +15 -3
- package/dist-elements/types/components/shared/charts/shared/mark-select.d.ts +2 -1
- package/dist-elements/types/components/shared/charts/shared/runs.d.ts +7 -0
- package/dist-elements/types/components/shared/charts/shared/types.d.ts +57 -3
- package/dist-elements/types/components/shared/controls.d.ts +28 -0
- package/dist-elements/types/components/shared/cut-text.d.ts +6 -0
- package/dist-elements/types/components/shared/dialog.d.ts +8 -2
- package/dist-elements/types/components/shared/disclosure.d.ts +2 -2
- package/dist-elements/types/components/shared/focus-trap.d.ts +2 -0
- package/dist-elements/types/components/shared/follow.d.ts +8 -0
- package/dist-elements/types/components/shared/frame-resize-observer.d.ts +12 -0
- package/dist-elements/types/components/shared/live-message.d.ts +17 -0
- package/dist-elements/types/components/shared/other.d.ts +24 -0
- package/dist-elements/types/components/shared/overflow.d.ts +4 -3
- package/dist-elements/types/components/shared/place.d.ts +5 -0
- package/dist-elements/types/components/shared/transition.d.ts +12 -0
- package/dist-elements/types/components/tables/card/card.d.ts +0 -5
- package/dist-elements/types/components/tables/card-list/card-list.d.ts +2 -5
- 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 +23 -8
- package/dist-elements/types/components/tables/data-table/filters.d.ts +6 -2
- package/dist-elements/types/components/tables/description-list/description-list.d.ts +3 -2
- package/dist-elements/types/components/tables/list/list.d.ts +2 -6
- package/dist-elements/types/components/tables/sortable-list/sortable-list.d.ts +1 -1
- package/dist-elements/types/core/element.d.ts +5 -2
- package/dist-elements/types/core/frame-state.d.ts +2 -0
- package/dist-elements/types/core/links.d.ts +2 -0
- package/dist-elements/types/core/styles.d.ts +2 -0
- package/dist-elements/types/icons/register.d.ts +1 -1
- package/dist-elements/types/icons/render.d.ts +1 -1
- package/dist-elements/types/types.d.ts +35 -8
- package/package.json +2 -2
- package/dist-elements/chunks/base-Bd2pmq86.js +0 -2865
- package/dist-elements/chunks/chart-styles-DEd0uIWK.js +0 -108
- package/dist-elements/chunks/controls-_4ac1Lpz.js +0 -121
- package/dist-elements/chunks/copied-7BXYVkXT.js +0 -4
- package/dist-elements/chunks/date-format-DxP9yfDp.js +0 -152
- package/dist-elements/chunks/debounce-JXnLMCcF.js +0 -25
- package/dist-elements/chunks/dialog-BNbkcAxH.js +0 -28
- package/dist-elements/chunks/dialog-close-u75fVEw4.js +0 -4
- package/dist-elements/chunks/disclosure-BK-MJsEn.js +0 -4
- package/dist-elements/chunks/disclosure-CcTr_FLd.js +0 -64
- package/dist-elements/chunks/download-BGe7rpQo.js +0 -103
- package/dist-elements/chunks/focus-trap-Cl99vti9.js +0 -73
- package/dist-elements/chunks/input-Dg1o0Sfu.js +0 -4
- package/dist-elements/chunks/input-KqBT3qWD.js +0 -195
- package/dist-elements/chunks/key-D5wy9ZTj.js +0 -4
- package/dist-elements/chunks/playback-DZJ_NMXv.js +0 -133
- package/dist-elements/chunks/player-BRG7bk_h.js +0 -208
- package/dist-elements/chunks/prose-CmKVp5kL.js +0 -4
- package/dist-elements/chunks/sentence-DIByCXQV.js +0 -15
- package/dist-elements/chunks/sentence-end-8jlqKJ5P.js +0 -8
- package/dist-elements/chunks/stagger-DGRHP_We.js +0 -515
|
@@ -1,172 +1,60 @@
|
|
|
1
|
-
import
|
|
2
|
-
//#region src/components/layout/tabs/tabs.css?inline
|
|
3
|
-
var l = ":host { display: block; min-width: 0; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n/* `position: relative` makes the row the tabs' offset parent, for scrolling the chosen tab into sight. */\n.lintje-tabs__list {\n position: relative;\n display: flex; flex-wrap: wrap;\n border-bottom: 1px solid var(--color-border-heavy);\n}\n\n/* A transparent bottom edge in reserve, so the chosen tab's line takes no space of its own. */\n.lintje-tabs__tab {\n display: inline-flex; align-items: center; gap: var(--space-2);\n height: var(--h-touch);\n padding: 0 var(--space-4);\n background: transparent;\n color: var(--color-text-primary);\n border-bottom: 3px solid transparent;\n font: var(--text-ui);\n text-decoration: none;\n white-space: nowrap;\n transition: background var(--dur-hover) var(--ease-in-motion),\n border-color var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-tabs__tab:hover:not(.is-active):not(.is-disabled) {\n background: var(--color-bg-subtle);\n border-bottom-color: var(--color-border-heavy);\n}\n\n/* The chosen tab: the line is a line (3:1) and the word is text (4.5:1), hence two tokens. */\n.lintje-tabs__tab.is-active {\n border-bottom-color: var(--color-accent-line);\n color: var(--color-accent-text);\n font-weight: 700;\n}\n\n.lintje-tabs__tab.is-disabled { color: var(--color-text-disabled); cursor: not-allowed; }\n\n.lintje-tabs__panel { padding-top: var(--space-4); }\n.lintje-tabs__panel.is-pressed:focus-visible { outline: none; }\n\n@media screen and (max-width: 767px) {\n .lintje-tabs__list {\n flex-wrap: nowrap;\n overflow-x: auto;\n scrollbar-width: none;\n }\n .lintje-tabs__list::-webkit-scrollbar { display: none; }\n .lintje-tabs__tab { flex: 0 0 auto; }\n .lintje-tabs__list.is-scroll-start { box-shadow: var(--shadow-scroll-start); }\n .lintje-tabs__list.is-scroll-end { box-shadow: var(--shadow-scroll-end); }\n .lintje-tabs__list.is-scroll-start.is-scroll-end {\n box-shadow: var(--shadow-scroll-start), var(--shadow-scroll-end);\n }\n}\n\n/* Forced colours: the chosen tab's line turns Highlight, a disabled tab GrayText. */\n@media (forced-colors: active) {\n .lintje-tabs__tab.is-active { border-bottom-color: Highlight; }\n .lintje-tabs__tab.is-disabled { color: GrayText; }\n}\n\n/* --- The panel variant --------------------------------------------------------\n Large tabs that head a bordered panel. The chosen tab is the panel's own surface and runs into\n it; the others stand on the subtle fill. No line: surface, accent word and weight say it. */\n.lintje-tabs--panel {\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-default);\n}\n.lintje-tabs--panel .lintje-tabs__list {\n flex-wrap: nowrap;\n background: var(--color-bg-subtle);\n border-bottom-color: var(--color-border-default);\n}\n.lintje-tabs--panel .lintje-tabs__tab {\n flex: 1 1 0;\n min-width: 0;\n height: auto;\n min-height: var(--h-touch);\n margin-bottom: -1px;\n align-items: flex-start;\n gap: var(--space-3);\n padding: var(--space-4) var(--space-5);\n border-right: 1px solid var(--color-border-default);\n border-bottom: 1px solid var(--color-border-default);\n white-space: normal;\n text-align: left;\n}\n.lintje-tabs--panel .lintje-tabs__tab:last-child { border-right: 0; }\n.lintje-tabs--panel .lintje-tabs__tab:hover:not(.is-active):not(.is-disabled) {\n background: var(--color-bg-subtle);\n border-bottom-color: var(--color-border-default);\n}\n.lintje-tabs--panel .lintje-tabs__tab:hover:not(.is-active):not(.is-disabled) .lintje-tabs__label {\n text-decoration: underline;\n}\n/* The bottom edge takes the surface, so the tab and the panel are one shape. */\n.lintje-tabs--panel .lintje-tabs__tab.is-active {\n background: var(--color-bg-surface);\n border-bottom-color: var(--color-bg-surface);\n color: var(--color-accent-text);\n}\n.lintje-tabs__icon { flex: none; }\n.lintje-tabs__text { display: flex; flex-direction: column; gap: 2px; min-width: 0; }\n.lintje-tabs__head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-1) var(--space-2); }\n.lintje-tabs__hint { font: var(--text-small); color: var(--color-text-muted); }\n.lintje-tabs--panel .lintje-tabs__panel { padding: var(--space-6); }\n\n@media screen and (max-width: 767px) {\n .lintje-tabs--panel .lintje-tabs__tab {\n flex-direction: column;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-3) var(--space-2);\n text-align: center;\n }\n .lintje-tabs--panel .lintje-tabs__text { align-items: center; }\n .lintje-tabs--panel .lintje-tabs__head { justify-content: center; }\n .lintje-tabs--panel .lintje-tabs__hint { display: none; }\n .lintje-tabs--panel .lintje-tabs__panel { padding: var(--space-4); }\n}\n\n/* Forced colours drop the surface: the chosen tab's label is underlined instead. */\n@media (forced-colors: active) {\n .lintje-tabs--panel .lintje-tabs__tab.is-active .lintje-tabs__label { text-decoration: underline; }\n}\n";
|
|
4
|
-
//#endregion
|
|
5
|
-
//#region src/components/layout/tabs/tabs.ts
|
|
6
|
-
function u(e, t, n) {
|
|
7
|
-
return {
|
|
8
|
-
start: e > 1,
|
|
9
|
-
end: e + t < n - 1
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
function d(e, t, n, r) {
|
|
13
|
-
return e < n ? e : e + t > n + r ? e + t - r : n;
|
|
14
|
-
}
|
|
15
|
-
var f = class extends t {
|
|
16
|
-
constructor(...e) {
|
|
17
|
-
super(...e), this.tabs = [], this.label = "", this.variant = "line", this.edges = {
|
|
18
|
-
start: !1,
|
|
19
|
-
end: !1
|
|
20
|
-
}, this.#e = null, this.#t = !1;
|
|
21
|
-
}
|
|
22
|
-
static {
|
|
23
|
-
this.styles = [a, r(l)];
|
|
24
|
-
}
|
|
25
|
-
static {
|
|
26
|
-
this.properties = {
|
|
27
|
-
tabs: { attribute: !1 },
|
|
28
|
-
value: { type: String },
|
|
29
|
-
label: { type: String },
|
|
30
|
-
variant: {
|
|
31
|
-
type: String,
|
|
32
|
-
reflect: !0
|
|
33
|
-
},
|
|
34
|
-
edges: { state: !0 }
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
#e;
|
|
38
|
-
#t;
|
|
39
|
-
onPanelFocus(e) {
|
|
40
|
-
e.currentTarget.classList.toggle("is-pressed", this.#t), this.#t = !1;
|
|
41
|
-
}
|
|
42
|
-
get selectedIndex() {
|
|
43
|
-
let e = this.tabs.findIndex((e) => e.value === this.value);
|
|
44
|
-
return e < 0 ? 0 : e;
|
|
45
|
-
}
|
|
46
|
-
get isNav() {
|
|
47
|
-
return this.tabs.length > 0 && this.tabs.every((e) => !!e.href);
|
|
48
|
-
}
|
|
49
|
-
get list() {
|
|
50
|
-
return this.renderRoot.querySelector(".lintje-tabs__list");
|
|
51
|
-
}
|
|
52
|
-
tabElement(e) {
|
|
53
|
-
return this.renderRoot.querySelector(`#tab-${e}`);
|
|
54
|
-
}
|
|
55
|
-
disconnectedCallback() {
|
|
56
|
-
this.#e?.disconnect(), this.#e = null, super.disconnectedCallback();
|
|
57
|
-
}
|
|
58
|
-
choose(e, t) {
|
|
59
|
-
let n = this.tabs[e];
|
|
60
|
-
n && !n.disabled && (this.emit("lintje-tab-change", n.value), n.href && this.followLink(n.href, t));
|
|
61
|
-
}
|
|
62
|
-
onClick(t, n) {
|
|
63
|
-
let r = this.tabs[n];
|
|
64
|
-
r && (!r.href || r.disabled || e(t)) && this.choose(n, t);
|
|
65
|
-
}
|
|
66
|
-
onKeydown(e) {
|
|
67
|
-
let t = this.tabs.length;
|
|
68
|
-
if (!t) return;
|
|
69
|
-
let n = this.shadowRoot?.activeElement, r = Math.max(0, this.tabs.findIndex((e, t) => this.tabElement(t) === n)), i = null;
|
|
70
|
-
e.key === "ArrowRight" ? i = (r + 1) % t : e.key === "ArrowLeft" ? i = (r - 1 + t) % t : e.key === "Home" ? i = 0 : e.key === "End" && (i = t - 1), i !== null && (e.preventDefault(), this.tabElement(i)?.focus(), this.tabs[i]?.href || this.choose(i));
|
|
71
|
-
}
|
|
72
|
-
measureEdges() {
|
|
73
|
-
let e = this.list;
|
|
74
|
-
if (!e) return;
|
|
75
|
-
let t = u(e.scrollLeft, e.clientWidth, e.scrollWidth);
|
|
76
|
-
(t.start !== this.edges.start || t.end !== this.edges.end) && (this.edges = t);
|
|
77
|
-
}
|
|
78
|
-
firstUpdated() {
|
|
79
|
-
let e = this.list;
|
|
80
|
-
e && typeof ResizeObserver < "u" && (this.#e = new ResizeObserver(() => this.measureEdges()), this.#e.observe(e));
|
|
81
|
-
}
|
|
82
|
-
updated(e) {
|
|
83
|
-
if (super.updated(e), !e.has("value") && !e.has("tabs")) return;
|
|
84
|
-
let t = this.list, n = this.tabElement(this.selectedIndex);
|
|
85
|
-
t && n && t.scrollWidth > t.clientWidth && (t.scrollLeft = d(n.offsetLeft, n.offsetWidth, t.scrollLeft, t.clientWidth)), this.measureEdges();
|
|
86
|
-
}
|
|
87
|
-
renderTab(e, t, n) {
|
|
88
|
-
let r = s({
|
|
89
|
-
"lintje-tabs__tab": !0,
|
|
90
|
-
"focus-inset": !0,
|
|
91
|
-
"is-active": n,
|
|
92
|
-
"is-disabled": !!e.disabled
|
|
93
|
-
}), a = o`<span class="lintje-tabs__label">${e.label}</span>${typeof e.count == "number" ? o`<lintje-badge variant="count">${e.count}</lintje-badge>` : i}${e.badge ? o`<lintje-badge tone="info">${e.badge}</lintje-badge>` : i}`, l = this.variant === "panel" ? o`${e.icon ? c(e.icon, {
|
|
94
|
-
size: 24,
|
|
95
|
-
className: "lintje-tabs__icon"
|
|
96
|
-
}) : i}<span
|
|
1
|
+
import{U as e,cn as t,en as n,gt as r,ht as i,on as a,pt as o,rn as s,tn as c}from"../chunks/base-BsZyWDre.js";var l=`:host{min-width:0;display:block}:host([hidden]){display:none}.lintje-tabs__list{border-bottom:1px solid var(--color-border-heavy);flex-wrap:wrap;display:flex;position:relative}.lintje-tabs__tab{align-items:center;gap:var(--space-2);height:var(--h-touch);padding:0 var(--space-4);color:var(--color-text-primary);font:var(--text-ui);white-space:nowrap;transition:background var(--dur-hover) var(--ease-in-motion), border-color var(--dur-hover) var(--ease-in-motion);background:0 0;border-bottom:3px solid #0000;text-decoration:none;display:inline-flex}.lintje-tabs__tab:hover:not(.is-active):not(.is-disabled){background:var(--color-bg-subtle);border-bottom-color:var(--color-border-heavy)}.lintje-tabs__tab.is-active{border-bottom-color:var(--color-accent-line);color:var(--color-accent-text);font-weight:700}.lintje-tabs__tab.is-disabled{color:var(--color-text-disabled);cursor:not-allowed}.lintje-tabs__panel{padding-top:var(--space-4)}.lintje-tabs__panel.is-pressed:focus-visible{outline:none}@media screen and (width<=767px){.lintje-tabs__list{scrollbar-width:none;flex-wrap:nowrap;overflow-x:auto}.lintje-tabs__list::-webkit-scrollbar{display:none}.lintje-tabs__tab{flex:none}.lintje-tabs__list.is-scroll-start{box-shadow:var(--shadow-scroll-start)}.lintje-tabs__list.is-scroll-end{box-shadow:var(--shadow-scroll-end)}.lintje-tabs__list.is-scroll-start.is-scroll-end{box-shadow:var(--shadow-scroll-start), var(--shadow-scroll-end)}}@media (forced-colors:active){.lintje-tabs__tab.is-active{border-bottom-color:highlight}.lintje-tabs__tab.is-disabled{color:graytext}}.lintje-tabs--panel{background:var(--color-bg-surface);border:1px solid var(--color-border-default)}.lintje-tabs--panel .lintje-tabs__list{background:var(--color-bg-subtle);border-bottom-color:var(--color-border-default);flex-wrap:nowrap}.lintje-tabs--panel .lintje-tabs__tab{min-width:0;height:auto;min-height:var(--h-touch);align-items:flex-start;gap:var(--space-3);padding:var(--space-4) var(--space-5);border-right:1px solid var(--color-border-default);border-bottom:1px solid var(--color-border-default);white-space:normal;text-align:left;flex:1 1 0;margin-bottom:-1px}.lintje-tabs--panel .lintje-tabs__tab:last-child{border-right:0}.lintje-tabs--panel .lintje-tabs__tab:hover:not(.is-active):not(.is-disabled){background:var(--color-bg-subtle);border-bottom-color:var(--color-border-default)}.lintje-tabs--panel .lintje-tabs__tab:hover:not(.is-active):not(.is-disabled) .lintje-tabs__label{text-decoration:underline}.lintje-tabs--panel .lintje-tabs__tab.is-active{background:var(--color-bg-surface);border-bottom-color:var(--color-bg-surface);color:var(--color-accent-text)}.lintje-tabs__icon{flex:none}.lintje-tabs__text{flex-direction:column;gap:2px;min-width:0;display:flex}.lintje-tabs__head{align-items:center;gap:var(--space-1) var(--space-2);flex-wrap:wrap;display:flex}.lintje-tabs__hint{font:var(--text-small);color:var(--color-text-muted)}.lintje-tabs--panel .lintje-tabs__panel{padding:var(--space-6)}@media screen and (width<=767px){.lintje-tabs--panel .lintje-tabs__tab{align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-2);text-align:center;flex-direction:column}.lintje-tabs--panel .lintje-tabs__text{align-items:center}.lintje-tabs--panel .lintje-tabs__head{justify-content:center}.lintje-tabs--panel .lintje-tabs__hint{display:none}.lintje-tabs--panel .lintje-tabs__panel{padding:var(--space-4)}}@media (forced-colors:active){.lintje-tabs--panel .lintje-tabs__tab.is-active .lintje-tabs__label{text-decoration:underline}}`;function u(e,t,n){return{start:e>1,end:e+t<n-1}}function d(e,t,n,r){return e<n?e:e+t>n+r?e+t-r:n}var f=class extends n{constructor(...e){super(...e),this.tabs=[],this.label=``,this.variant=`line`,this.#e=null,this.#t=!1}static{this.styles=[i,s(l)]}static{this.properties={tabs:{attribute:!1},value:{type:String},label:{type:String},variant:{type:String,reflect:!0}}}#e;#t;onPanelFocus(e){e.currentTarget.classList.toggle(`is-pressed`,this.#t),this.#t=!1}get selectedIndex(){let e=this.tabs.findIndex(e=>e.value===this.value);return e<0?0:e}get isNav(){return this.tabs.length>0&&this.tabs.every(e=>!!e.href)}get list(){return this.renderRoot.querySelector(`.lintje-tabs__list`)}tabElement(e){return this.renderRoot.querySelector(`#tab-${e}`)}disconnectedCallback(){this.#e?.disconnect(),this.#e=null,super.disconnectedCallback()}choose(e,t){let n=this.tabs[e];n&&!n.disabled&&(this.emit(`lintje-tab-change`,n.value),n.href&&this.followLink(n.href,t))}onClick(t,n){let r=this.tabs[n];r&&(!r.href||r.disabled||e(t))&&this.choose(n,t)}onKeydown(e){let t=this.tabs.length;if(!t)return;let n=this.shadowRoot?.activeElement,r=Math.max(0,this.tabs.findIndex((e,t)=>this.tabElement(t)===n)),i=null;e.key===`ArrowRight`?i=(r+1)%t:e.key===`ArrowLeft`?i=(r-1+t)%t:e.key===`Home`?i=0:e.key===`End`&&(i=t-1),i!==null&&(e.preventDefault(),this.tabElement(i)?.focus(),this.tabs[i]?.href||this.choose(i))}measureEdges(){let e=this.list;if(!e)return;let t=u(e.scrollLeft,e.clientWidth,e.scrollWidth);e.classList.toggle(`is-scroll-start`,t.start),e.classList.toggle(`is-scroll-end`,t.end)}firstUpdated(){let e=this.list;e&&typeof ResizeObserver<`u`&&(this.#e=new ResizeObserver(()=>this.measureEdges()),this.#e.observe(e))}updated(e){super.updated(e);let t=this.list,n=this.tabElement(this.selectedIndex);(e.has(`value`)||e.has(`tabs`))&&t&&n&&t.scrollWidth>t.clientWidth&&(t.scrollLeft=d(n.offsetLeft,n.offsetWidth,t.scrollLeft,t.clientWidth)),this.measureEdges()}renderTab(e,n,i){let s=o({"lintje-tabs__tab":!0,"focus-inset":!0,"is-active":i,"is-disabled":!!e.disabled}),c=t`<span class="lintje-tabs__label">${e.label}</span>${typeof e.count==`number`?t`<lintje-badge variant="count">${e.count}</lintje-badge>`:a}${e.badge?t`<lintje-badge tone="info">${e.badge}</lintje-badge>`:a}`,l=this.variant===`panel`?t`${e.icon?r(e.icon,{size:24,className:`lintje-tabs__icon`}):a}<span
|
|
97
2
|
class="lintje-tabs__text"
|
|
98
|
-
><span class="lintje-tabs__head">${
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
class=${r}
|
|
3
|
+
><span class="lintje-tabs__head">${c}</span>${e.hint?t`<span class="lintje-tabs__hint">${e.hint}</span>`:a}</span
|
|
4
|
+
>`:c;return this.isNav?e.disabled?t`<a id="tab-${n}" class=${s} role="link" aria-disabled="true">${l}</a>`:t`<a
|
|
5
|
+
id="tab-${n}"
|
|
6
|
+
class=${s}
|
|
103
7
|
href=${e.href}
|
|
104
|
-
aria-current=${
|
|
105
|
-
@click=${
|
|
8
|
+
aria-current=${i?`page`:a}
|
|
9
|
+
@click=${e=>this.onClick(e,n)}
|
|
106
10
|
>${l}</a
|
|
107
|
-
|
|
108
|
-
id="tab-${
|
|
109
|
-
class=${
|
|
11
|
+
>`:e.href&&!e.disabled?t`<a
|
|
12
|
+
id="tab-${n}"
|
|
13
|
+
class=${s}
|
|
110
14
|
role="tab"
|
|
111
15
|
href=${e.href}
|
|
112
|
-
aria-selected=${String(
|
|
113
|
-
aria-controls="panel-${
|
|
114
|
-
tabindex=${
|
|
115
|
-
@click=${
|
|
16
|
+
aria-selected=${String(i)}
|
|
17
|
+
aria-controls="panel-${n}"
|
|
18
|
+
tabindex=${i?0:-1}
|
|
19
|
+
@click=${e=>this.onClick(e,n)}
|
|
116
20
|
>${l}</a
|
|
117
|
-
|
|
118
|
-
id="tab-${
|
|
21
|
+
>`:t`<button
|
|
22
|
+
id="tab-${n}"
|
|
119
23
|
type="button"
|
|
120
|
-
class=${
|
|
24
|
+
class=${s}
|
|
121
25
|
role="tab"
|
|
122
|
-
aria-selected=${String(
|
|
123
|
-
aria-controls="panel-${
|
|
124
|
-
aria-disabled=${e.disabled
|
|
125
|
-
tabindex=${
|
|
126
|
-
@click=${
|
|
26
|
+
aria-selected=${String(i)}
|
|
27
|
+
aria-controls="panel-${n}"
|
|
28
|
+
aria-disabled=${e.disabled?`true`:a}
|
|
29
|
+
tabindex=${i?0:-1}
|
|
30
|
+
@click=${e=>this.onClick(e,n)}
|
|
127
31
|
>
|
|
128
32
|
${l}
|
|
129
|
-
</button
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
"lintje-tabs__list": !0,
|
|
135
|
-
"is-scroll-start": this.edges.start,
|
|
136
|
-
"is-scroll-end": this.edges.end
|
|
137
|
-
})}
|
|
138
|
-
role=${t ? i : "tablist"}
|
|
139
|
-
aria-label=${t ? i : this.label || i}
|
|
140
|
-
@keydown=${t ? i : this.onKeydown}
|
|
33
|
+
</button>`}render(){let e=this.selectedIndex,n=this.isNav,r=t`<div
|
|
34
|
+
class="lintje-tabs__list"
|
|
35
|
+
role=${n?a:`tablist`}
|
|
36
|
+
aria-label=${n?a:this.label||a}
|
|
37
|
+
@keydown=${n?a:this.onKeydown}
|
|
141
38
|
@scroll=${this.measureEdges}
|
|
142
39
|
>
|
|
143
|
-
${this.tabs.map((t,
|
|
144
|
-
</div>`,
|
|
145
|
-
|
|
146
|
-
"lintje-tabs--panel": this.variant === "panel"
|
|
147
|
-
});
|
|
148
|
-
return t ? o`<div class=${r}>
|
|
149
|
-
<nav aria-label=${this.label || i}>${n}</nav>
|
|
40
|
+
${this.tabs.map((t,n)=>this.renderTab(t,n,n===e))}
|
|
41
|
+
</div>`,i=o({"lintje-tabs":!0,"lintje-tabs--panel":this.variant===`panel`});return n?t`<div class=${i}>
|
|
42
|
+
<nav aria-label=${this.label||a}>${r}</nav>
|
|
150
43
|
<div class="lintje-tabs__panel"><slot name=${this.tabs[e].value}></slot></div>
|
|
151
|
-
</div
|
|
152
|
-
${
|
|
153
|
-
${this.tabs.map((
|
|
154
|
-
id="panel-${
|
|
44
|
+
</div>`:t`<div class=${i}>
|
|
45
|
+
${r}
|
|
46
|
+
${this.tabs.map((n,r)=>t`<div
|
|
47
|
+
id="panel-${r}"
|
|
155
48
|
class="lintje-tabs__panel"
|
|
156
49
|
role="tabpanel"
|
|
157
|
-
aria-labelledby="tab-${
|
|
50
|
+
aria-labelledby="tab-${r}"
|
|
158
51
|
tabindex="0"
|
|
159
|
-
?hidden=${
|
|
160
|
-
@pointerdown=${()
|
|
161
|
-
@pointerup=${()
|
|
52
|
+
?hidden=${r!==e}
|
|
53
|
+
@pointerdown=${()=>this.#t=!0}
|
|
54
|
+
@pointerup=${()=>this.#t=!1}
|
|
162
55
|
@focus=${this.onPanelFocus}
|
|
163
|
-
@blur=${
|
|
56
|
+
@blur=${e=>e.currentTarget.classList.remove(`is-pressed`)}
|
|
164
57
|
>
|
|
165
|
-
<slot name=${
|
|
58
|
+
<slot name=${n.value}></slot>
|
|
166
59
|
</div>`)}
|
|
167
|
-
</div
|
|
168
|
-
}
|
|
169
|
-
};
|
|
170
|
-
n("lintje-tabs", f);
|
|
171
|
-
//#endregion
|
|
172
|
-
export { f as LintjeTabs, u as scrollEdges, d as scrollToShow };
|
|
60
|
+
</div>`}};c(`lintje-tabs`,f);export{f as LintjeTabs,u as scrollEdges,d as scrollToShow};
|
|
@@ -1,239 +1,61 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { filterOptions as u, splitMatch as d } from "./combobox.js";
|
|
5
|
-
//#region src/components/inputs/tag-input/tag-input.css?inline
|
|
6
|
-
var f = "/* The keyword field: chips and the typing part in one box that grows in height. */\n:host { display: block; min-width: 0; }\n:host([hidden]) { display: none; }\n/* Below 768 px: the touch height and the full width, as `stacked`. */\n@media screen and (max-width: 767px) {\n :host {\n width: 100%;\n --h-control: var(--h-touch);\n }\n}\n\n/* --- */\n\n/* The padding centres a chip in the control height; wrapped chips grow the box. */\n.lintje-tag-input {\n display: flex; flex-wrap: wrap; align-items: center;\n gap: var(--space-2);\n min-height: var(--h-control);\n padding: calc((var(--h-control) - var(--h-chip-field)) / 2 - 1px) var(--space-2);\n border: 1px solid var(--color-border-field);\n border-radius: var(--radius);\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n}\n/* The ring is around the whole field; a chip draws it around itself when its cross has the focus. */\n.lintje-tag-input:has(.lintje-tag-input__input:focus-visible),\n.lintje-tag-input__chip:has(.lintje-tag-input__remove:focus-visible) {\n outline: var(--focus-width) solid var(--color-focus);\n outline-offset: var(--focus-offset);\n}\n.lintje-tag-input__input:focus-visible,\n.lintje-tag-input__remove:focus-visible { outline: none; }\n/* The padding gives back the pixel the 2 px error border takes. */\n.lintje-tag-input.is-error {\n border: 2px solid var(--color-error);\n padding: calc((var(--h-control) - var(--h-chip-field)) / 2 - 2px) calc(var(--space-2) - 1px);\n}\n/* Disabled wins over error: placed after it. */\n.lintje-tag-input.is-disabled {\n border: 1px solid var(--color-border-strong);\n padding: calc((var(--h-control) - var(--h-chip-field)) / 2 - 1px) var(--space-2);\n background: var(--color-bg-subtle);\n cursor: not-allowed;\n}\n\n.lintje-tag-input__chips { display: contents; }\n.lintje-tag-input__item { display: flex; min-width: 0; }\n.lintje-tag-input__chip {\n display: inline-flex; align-items: center;\n min-width: 0;\n height: var(--h-chip-field);\n padding: 0 0 0 var(--space-2);\n background: var(--color-bg-subtle);\n border: 1px solid var(--color-border-default);\n font-size: 0.875rem; white-space: nowrap;\n}\n.lintje-tag-input.is-disabled .lintje-tag-input__chip { padding-right: var(--space-2); }\n/* A word typed twice flashes its chip. */\n.lintje-tag-input__chip.is-flash { border-color: var(--color-accent-line); }\n.lintje-tag-input.is-disabled .lintje-tag-input__chip { color: var(--color-text-disabled); }\n/* A transparent hit area, above and below only, reaches the target height. */\n.lintje-tag-input__remove {\n position: relative;\n flex: none;\n width: var(--space-6); align-self: stretch;\n display: inline-flex; align-items: center; justify-content: center;\n color: var(--color-text-muted);\n}\n.lintje-tag-input__remove:hover { color: var(--color-text-primary); }\n.lintje-tag-input__remove::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((var(--h-chip-field) - var(--h-target)) / 2)) 0;\n}\n\n.lintje-tag-input__input {\n flex: 1 1 60px; min-width: 0;\n height: var(--h-chip-field);\n padding: 0 var(--space-1);\n border: 0;\n background: none;\n color: inherit;\n font-size: 1rem;\n}\n.lintje-tag-input__input::placeholder { color: var(--color-text-placeholder); opacity: 1; }\n.lintje-tag-input__input:disabled { cursor: not-allowed; }\n\n.lintje-tag-input__list {\n max-height: calc(7 * var(--h-option) + var(--space-2));\n overflow-y: auto;\n padding: var(--space-1) 0;\n font: var(--text-ui);\n}\n.lintje-tag-input__option {\n display: flex; align-items: center;\n min-height: var(--h-option);\n padding: 0 14px;\n cursor: pointer;\n}\n.lintje-tag-input__option:hover,\n.lintje-tag-input__option.is-active { background: var(--color-bg-subtle); }\n/* The option the keys stand on: the fill alone is about 1.1:1, so the focus ring inside the row. */\n.lintje-tag-input__option.is-active {\n outline: var(--focus-width) solid var(--color-focus);\n outline-offset: calc(var(--focus-width) * -1);\n}\n\n/* Forced colours drop the fill: the row takes an edge inside, keeping its size. */\n@media (forced-colors: active) {\n .lintje-tag-input__option.is-active { outline: 1px solid CanvasText; outline-offset: -1px; }\n}\n";
|
|
7
|
-
//#endregion
|
|
8
|
-
//#region src/components/inputs/tag-input/tag-input.ts
|
|
9
|
-
function p(e) {
|
|
10
|
-
return e.split(/[,\n]/).map((e) => e.trim()).filter(Boolean);
|
|
11
|
-
}
|
|
12
|
-
function m(e, t) {
|
|
13
|
-
let n = [...e], r = [], i = null;
|
|
14
|
-
for (let e of t) {
|
|
15
|
-
let t = n.find((t) => t.toLowerCase() === e.toLowerCase());
|
|
16
|
-
t === void 0 ? (n.push(e), r.push(e)) : i = t;
|
|
17
|
-
}
|
|
18
|
-
return {
|
|
19
|
-
next: n,
|
|
20
|
-
added: r,
|
|
21
|
-
duplicate: i
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
var h = 1e3, g = "lintje-tag-input-list", _ = "lintje-tag-input-keys", v = (e) => `lintje-tag-input-option-${e}`, y = class extends c {
|
|
25
|
-
constructor(...e) {
|
|
26
|
-
super(...e), this.value = [], this.placeholder = "", this.stacked = !1, this.text = "", this.flash = null, this.news = "", this.active = -1, this.suggesting = !1, this.#e = null;
|
|
27
|
-
}
|
|
28
|
-
static {
|
|
29
|
-
this.styles = [
|
|
30
|
-
r,
|
|
31
|
-
t(l),
|
|
32
|
-
t(f)
|
|
33
|
-
];
|
|
34
|
-
}
|
|
35
|
-
static {
|
|
36
|
-
this.properties = {
|
|
37
|
-
value: { attribute: !1 },
|
|
38
|
-
options: { attribute: !1 },
|
|
39
|
-
placeholder: { type: String },
|
|
40
|
-
stacked: {
|
|
41
|
-
type: Boolean,
|
|
42
|
-
reflect: !0
|
|
43
|
-
},
|
|
44
|
-
text: { state: !0 },
|
|
45
|
-
flash: { state: !0 },
|
|
46
|
-
news: { state: !0 },
|
|
47
|
-
active: { state: !0 },
|
|
48
|
-
suggesting: { state: !0 }
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
#e;
|
|
52
|
-
disconnectedCallback() {
|
|
53
|
-
this.#e !== null && clearTimeout(this.#e), this.#e = null, super.disconnectedCallback();
|
|
54
|
-
}
|
|
55
|
-
get input() {
|
|
56
|
-
return this.renderRoot.querySelector(".lintje-tag-input__input");
|
|
57
|
-
}
|
|
58
|
-
labelOf(e) {
|
|
59
|
-
return this.options?.find((t) => t.value === e)?.label ?? e;
|
|
60
|
-
}
|
|
61
|
-
get suggestions() {
|
|
62
|
-
return !this.options || !this.text.trim() ? [] : u(this.options, this.text).filter((e) => !this.value.includes(e.value));
|
|
63
|
-
}
|
|
64
|
-
get listOpen() {
|
|
65
|
-
return this.suggesting && !this.disabled && this.suggestions.length > 0;
|
|
66
|
-
}
|
|
67
|
-
willUpdate(e) {
|
|
68
|
-
super.willUpdate(e), this.active >= this.suggestions.length && (this.active = this.suggestions.length - 1);
|
|
69
|
-
}
|
|
70
|
-
resolve(e) {
|
|
71
|
-
return this.options?.find((t) => t.label.toLowerCase() === e.toLowerCase())?.value ?? e;
|
|
72
|
-
}
|
|
73
|
-
add(e) {
|
|
74
|
-
let { next: t, added: n, duplicate: r } = m(this.value, e.map((e) => this.resolve(e)));
|
|
75
|
-
this.text = "", this.active = -1;
|
|
76
|
-
let i = [];
|
|
77
|
-
n.length && i.push(`${n.map((e) => this.labelOf(e)).join(", ")} toegevoegd`), r !== null && (this.light(r), i.push(`${this.labelOf(r)} staat er al`)), i.length && (this.news = i.join(". ")), n.length && (this.value = t, this.announce(t));
|
|
78
|
-
}
|
|
79
|
-
light(e) {
|
|
80
|
-
this.#e !== null && clearTimeout(this.#e), this.flash = e, this.#e = setTimeout(() => {
|
|
81
|
-
this.flash = null, this.#e = null;
|
|
82
|
-
}, h);
|
|
83
|
-
}
|
|
84
|
-
async removeChip(e, t) {
|
|
85
|
-
if (this.disabled) return;
|
|
86
|
-
let n = this.value[e], r = this.value.filter((t, n) => n !== e);
|
|
87
|
-
this.value = r, this.news = `${this.labelOf(n)} verwijderd`, this.announce(r), await this.updateComplete, t === "input" || t < 0 || t >= r.length ? this.input?.focus() : this.focusChip(t);
|
|
88
|
-
}
|
|
89
|
-
focusChip(e) {
|
|
90
|
-
this.renderRoot.querySelector(`[data-index="${e}"]`)?.focus();
|
|
91
|
-
}
|
|
92
|
-
onInput(e) {
|
|
93
|
-
this.text = e.target.value, this.suggesting = !0, this.active = this.suggestions.length ? 0 : -1;
|
|
94
|
-
}
|
|
95
|
-
onPaste(e) {
|
|
96
|
-
let t = e.clipboardData?.getData("text") ?? "";
|
|
97
|
-
if (!/[,\n]/.test(t)) return;
|
|
98
|
-
e.preventDefault();
|
|
99
|
-
let n = e.target;
|
|
100
|
-
this.add(p(n.value + t));
|
|
101
|
-
}
|
|
102
|
-
onKeydown(e) {
|
|
103
|
-
let t = e.target, n = t.selectionStart === 0 && t.selectionEnd === 0, r = this.listOpen;
|
|
104
|
-
switch (e.key) {
|
|
105
|
-
case "Enter":
|
|
106
|
-
case ",": {
|
|
107
|
-
let n = r && this.active >= 0 ? this.suggestions[this.active] : null;
|
|
108
|
-
if (n && e.key === "Enter") {
|
|
109
|
-
e.preventDefault(), this.add([n.label]);
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
(e.key === "," || t.value.trim()) && e.preventDefault(), this.add(p(t.value));
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
case "Backspace":
|
|
116
|
-
t.value === "" && this.value.length && (e.preventDefault(), this.focusChip(this.value.length - 1));
|
|
117
|
-
return;
|
|
118
|
-
case "ArrowLeft":
|
|
119
|
-
(t.value === "" || n) && this.value.length && (e.preventDefault(), this.focusChip(this.value.length - 1));
|
|
120
|
-
return;
|
|
121
|
-
case "ArrowDown":
|
|
122
|
-
if (!r) return;
|
|
123
|
-
e.preventDefault(), this.active = Math.min(this.active + 1, this.suggestions.length - 1);
|
|
124
|
-
return;
|
|
125
|
-
case "ArrowUp":
|
|
126
|
-
if (!r) return;
|
|
127
|
-
e.preventDefault(), this.active = Math.max(this.active - 1, 0);
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
onChipKeydown(e, t) {
|
|
132
|
-
switch (e.key) {
|
|
133
|
-
case "ArrowLeft":
|
|
134
|
-
e.preventDefault(), this.focusChip(Math.max(0, t - 1));
|
|
135
|
-
return;
|
|
136
|
-
case "ArrowRight":
|
|
137
|
-
e.preventDefault(), t + 1 < this.value.length ? this.focusChip(t + 1) : this.input?.focus();
|
|
138
|
-
return;
|
|
139
|
-
case "Backspace":
|
|
140
|
-
e.preventDefault(), this.removeChip(t, "input");
|
|
141
|
-
return;
|
|
142
|
-
case "Delete":
|
|
143
|
-
e.preventDefault(), this.removeChip(t, t);
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
onBlur(e) {
|
|
148
|
-
this.suggesting = !1;
|
|
149
|
-
let t = e.relatedTarget;
|
|
150
|
-
if (t && this.renderRoot.contains(t)) return;
|
|
151
|
-
let n = p(e.target.value);
|
|
152
|
-
n.length && this.add(n);
|
|
153
|
-
}
|
|
154
|
-
onPopoverClose(e) {
|
|
155
|
-
e.stopPropagation(), this.suggesting = !1, this.active = -1;
|
|
156
|
-
}
|
|
157
|
-
renderChip(e, t) {
|
|
158
|
-
let r = this.labelOf(e);
|
|
159
|
-
return i`<li class="lintje-tag-input__item">
|
|
160
|
-
<span class=${o({
|
|
161
|
-
"lintje-tag-input__chip": !0,
|
|
162
|
-
"is-flash": this.flash === e
|
|
163
|
-
})}
|
|
164
|
-
>${r}${this.disabled ? n : i`<button
|
|
1
|
+
import{cn as e,gt as t,ht as n,on as r,pt as i,rn as a,s as o,tn as s}from"../chunks/base-BsZyWDre.js";import{t as c}from"../chunks/live-message-CYZ-Ch7D.js";import{r as l}from"../chunks/input-C7qx0e4p.js";import{t as u}from"../chunks/input-CazTpGUd.js";import{filterOptions as d,splitMatch as f}from"./combobox.js";var p=`:host{min-width:0;display:block}:host([hidden]){display:none}@media screen and (width<=767px){:host{--h-control:var(--h-touch);width:100%}}.lintje-tag-input{align-items:center;gap:var(--space-2);min-height:var(--h-control);padding:calc((var(--h-control) - var(--h-chip-field)) / 2 - 1px) var(--space-2);border:1px solid var(--color-border-field);border-radius:var(--radius);background:var(--color-bg-surface);color:var(--color-text-primary);flex-wrap:wrap;display:flex}.lintje-tag-input:has(.lintje-tag-input__input:focus-visible),.lintje-tag-input__chip:has(.lintje-tag-input__remove:focus-visible){outline:var(--focus-width) solid var(--color-focus);outline-offset:var(--focus-offset)}.lintje-tag-input__input:focus-visible,.lintje-tag-input__remove:focus-visible{outline:none}.lintje-tag-input.is-error{border:2px solid var(--color-error);padding:calc((var(--h-control) - var(--h-chip-field)) / 2 - 2px) calc(var(--space-2) - 1px)}.lintje-tag-input.is-disabled{border:1px solid var(--color-border-strong);padding:calc((var(--h-control) - var(--h-chip-field)) / 2 - 1px) var(--space-2);background:var(--color-bg-subtle);cursor:not-allowed}.lintje-tag-input__chips{display:contents}.lintje-tag-input__item{min-width:0;display:flex}.lintje-tag-input__chip{min-width:0;height:var(--h-chip-field);padding:0 0 0 var(--space-2);background:var(--color-bg-subtle);border:1px solid var(--color-border-default);white-space:nowrap;align-items:center;font-size:.875rem;display:inline-flex}.lintje-tag-input.is-disabled .lintje-tag-input__chip{padding-right:var(--space-2)}.lintje-tag-input__chip.is-flash{border-color:var(--color-accent-line)}.lintje-tag-input.is-disabled .lintje-tag-input__chip{color:var(--color-text-disabled)}.lintje-tag-input__remove{width:var(--space-6);color:var(--color-text-muted);flex:none;justify-content:center;align-self:stretch;align-items:center;display:inline-flex;position:relative}.lintje-tag-input__remove:hover{color:var(--color-text-primary)}.lintje-tag-input__remove:after{content:"";inset:min(0px, calc((var(--h-chip-field) - var(--h-target)) / 2)) 0;position:absolute}.lintje-tag-input__input{min-width:0;height:var(--h-chip-field);padding:0 var(--space-1);color:inherit;background:0 0;border:0;flex:60px;font-size:1rem}.lintje-tag-input__input::placeholder{color:var(--color-text-placeholder);opacity:1}.lintje-tag-input__input:disabled::placeholder{color:var(--color-text-disabled)}.lintje-tag-input__input:disabled{cursor:not-allowed}.lintje-tag-input__list{max-height:calc(7 * var(--h-option) + var(--space-2));padding:var(--space-1) 0;font:var(--text-ui);overflow-y:auto}.lintje-tag-input__option{min-height:var(--h-option);cursor:pointer;align-items:center;padding:0 14px;display:flex}.lintje-tag-input__option:hover,.lintje-tag-input__option.is-active{background:var(--color-bg-subtle)}.lintje-tag-input__option.is-active{outline:var(--focus-width) solid var(--color-focus);outline-offset:calc(var(--focus-width) * -1)}@media (forced-colors:active){.lintje-tag-input__option.is-active{outline-offset:-1px;outline:1px solid canvastext}}`;function m(e){return e.split(/[,\n]/).map(e=>e.trim()).filter(Boolean)}function h(e,t){let n=[...e],r=[],i=null;for(let e of t){let t=n.find(t=>t.toLowerCase()===e.toLowerCase());t===void 0?(n.push(e),r.push(e)):i=t}return{next:n,added:r,duplicate:i}}var g=1e3,_=`lintje-tag-input-list`,v=`lintje-tag-input-keys`,y=e=>`lintje-tag-input-option-${e}`,b=class extends l{constructor(...e){super(...e),this.value=[],this.placeholder=``,this.stacked=!1,this.text=``,this.flash=null,this.active=-1,this.suggesting=!1,this.#e=null,this.#t=new c(this)}static{this.styles=[n,a(u),a(p)]}static{this.properties={value:{attribute:!1},options:{attribute:!1},placeholder:{type:String},stacked:{type:Boolean,reflect:!0},text:{state:!0},flash:{state:!0},active:{state:!0},suggesting:{state:!0}}}#e;#t;disconnectedCallback(){this.#e!==null&&clearTimeout(this.#e),this.#e=null,super.disconnectedCallback()}get input(){return this.renderRoot.querySelector(`.lintje-tag-input__input`)}labelOf(e){return this.options?.find(t=>t.value===e)?.label??e}get suggestions(){return!this.options||!this.text.trim()?[]:d(this.options,this.text).filter(e=>!this.value.includes(e.value))}get listOpen(){return this.suggesting&&!this.isDisabled&&this.suggestions.length>0}willUpdate(e){super.willUpdate(e),this.active>=this.suggestions.length&&(this.active=this.suggestions.length-1)}resolve(e){return this.options?.find(t=>t.label.toLowerCase()===e.toLowerCase())?.value??e}add(e){let{next:t,added:n,duplicate:r}=h(this.value,e.map(e=>this.resolve(e)));this.text=``,this.active=-1;let i=[];n.length&&i.push(`${n.map(e=>this.labelOf(e)).join(`, `)} toegevoegd`),r!==null&&(this.light(r),i.push(`${this.labelOf(r)} staat er al`)),i.length&&this.#t.say(i.join(`. `)),n.length&&(this.value=t,this.announce(t))}light(e){this.#e!==null&&clearTimeout(this.#e),this.flash=e,this.#e=setTimeout(()=>{this.flash=null,this.#e=null},g)}async removeChip(e,t){if(this.isDisabled)return;let n=this.value[e],r=this.value.filter((t,n)=>n!==e);this.value=r,this.#t.say(`${this.labelOf(n)} verwijderd`),this.announce(r),await this.updateComplete,t===`input`||t<0||t>=r.length?this.input?.focus():this.focusChip(t)}focusChip(e){this.renderRoot.querySelector(`[data-index="${e}"]`)?.focus()}onInput(e){this.text=e.target.value,this.suggesting=!0,this.active=this.suggestions.length?0:-1}onPaste(e){let t=e.clipboardData?.getData(`text`)??``;if(!/[,\n]/.test(t))return;e.preventDefault();let n=e.target;this.add(m(n.value+t))}onKeydown(e){let t=e.target,n=t.selectionStart===0&&t.selectionEnd===0,r=this.listOpen;switch(e.key){case`Enter`:case`,`:{let n=r&&this.active>=0?this.suggestions[this.active]:null;if(n&&e.key===`Enter`){e.preventDefault(),this.add([n.label]);return}(e.key===`,`||t.value.trim())&&e.preventDefault(),this.add(m(t.value));return}case`Backspace`:t.value===``&&this.value.length&&(e.preventDefault(),this.focusChip(this.value.length-1));return;case`ArrowLeft`:(t.value===``||n)&&this.value.length&&(e.preventDefault(),this.focusChip(this.value.length-1));return;case`ArrowDown`:if(!r)return;e.preventDefault(),this.active=Math.min(this.active+1,this.suggestions.length-1);return;case`ArrowUp`:if(!r)return;e.preventDefault(),this.active=Math.max(this.active-1,0);return}}onChipKeydown(e,t){switch(e.key){case`ArrowLeft`:e.preventDefault(),this.focusChip(Math.max(0,t-1));return;case`ArrowRight`:e.preventDefault(),t+1<this.value.length?this.focusChip(t+1):this.input?.focus();return;case`Backspace`:e.preventDefault(),this.removeChip(t,`input`);return;case`Delete`:e.preventDefault(),this.removeChip(t,t);return}}onBlur(e){this.suggesting=!1;let t=e.relatedTarget;if(t&&this.renderRoot.contains(t))return;let n=m(e.target.value);n.length&&this.add(n)}onPopoverClose(e){e.stopPropagation(),this.suggesting=!1,this.active=-1}renderChip(n,a){let o=this.labelOf(n);return e`<li class="lintje-tag-input__item">
|
|
2
|
+
<span class=${i({"lintje-tag-input__chip":!0,"is-flash":this.flash===n})}
|
|
3
|
+
>${o}${this.isDisabled?r:e`<button
|
|
165
4
|
type="button"
|
|
166
5
|
class="lintje-tag-input__remove"
|
|
167
6
|
tabindex="-1"
|
|
168
|
-
data-index=${
|
|
169
|
-
aria-label=${`${
|
|
170
|
-
@keydown=${
|
|
171
|
-
@click=${()
|
|
7
|
+
data-index=${a}
|
|
8
|
+
aria-label=${`${o} verwijderen`}
|
|
9
|
+
@keydown=${e=>this.onChipKeydown(e,a)}
|
|
10
|
+
@click=${()=>this.removeChip(a,`input`)}
|
|
172
11
|
>
|
|
173
|
-
${
|
|
12
|
+
${t(`functioneel-kruis`,{size:12})}
|
|
174
13
|
</button>`}</span
|
|
175
14
|
>
|
|
176
|
-
</li
|
|
177
|
-
|
|
178
|
-
renderSuggestions() {
|
|
179
|
-
return this.listOpen ? i`<ul
|
|
180
|
-
id=${g}
|
|
15
|
+
</li>`}renderSuggestions(){return this.listOpen?e`<ul
|
|
16
|
+
id=${_}
|
|
181
17
|
class="lintje-tag-input__list"
|
|
182
18
|
role="listbox"
|
|
183
19
|
tabindex="-1"
|
|
184
20
|
aria-labelledby=${this.labelId}
|
|
185
21
|
>
|
|
186
|
-
${this.suggestions.map((
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
id=${v(t)}
|
|
190
|
-
class=${o({
|
|
191
|
-
"lintje-tag-input__option": !0,
|
|
192
|
-
"is-active": t === this.active
|
|
193
|
-
})}
|
|
22
|
+
${this.suggestions.map((t,n)=>{let[a,o,s]=f(t.label,this.text);return e`<li
|
|
23
|
+
id=${y(n)}
|
|
24
|
+
class=${i({"lintje-tag-input__option":!0,"is-active":n===this.active})}
|
|
194
25
|
role="option"
|
|
195
26
|
aria-selected="false"
|
|
196
|
-
@click=${()
|
|
27
|
+
@click=${()=>this.add([t.label])}
|
|
197
28
|
>
|
|
198
|
-
${
|
|
199
|
-
</li
|
|
200
|
-
|
|
201
|
-
</ul>` : n;
|
|
202
|
-
}
|
|
203
|
-
render() {
|
|
204
|
-
let e = this.listOpen, t = !!this.options;
|
|
205
|
-
return i`<div class="lintje-field">
|
|
29
|
+
${a}${o?e`<strong>${o}</strong>`:r}${s}
|
|
30
|
+
</li>`})}
|
|
31
|
+
</ul>`:r}render(){let t=this.listOpen,n=!!this.options;return e`<div class="lintje-field">
|
|
206
32
|
${this.renderLabel(this.controlId)}
|
|
207
33
|
<div
|
|
208
|
-
class=${
|
|
209
|
-
"lintje-tag-input": !0,
|
|
210
|
-
"is-error": !!this.error,
|
|
211
|
-
"is-disabled": this.disabled
|
|
212
|
-
})}
|
|
34
|
+
class=${i({"lintje-tag-input":!0,"is-error":!!this.error,"is-disabled":this.isDisabled})}
|
|
213
35
|
role="group"
|
|
214
36
|
aria-labelledby=${this.labelId}
|
|
215
37
|
>
|
|
216
38
|
<ul class="lintje-tag-input__chips">
|
|
217
|
-
${this.value.map((e,
|
|
39
|
+
${this.value.map((e,t)=>this.renderChip(e,t))}
|
|
218
40
|
</ul>
|
|
219
41
|
<input
|
|
220
42
|
type="text"
|
|
221
43
|
id=${this.controlId}
|
|
222
44
|
class="lintje-tag-input__input"
|
|
223
|
-
.value=${
|
|
224
|
-
placeholder=${this.value.length
|
|
45
|
+
.value=${o(this.text)}
|
|
46
|
+
placeholder=${this.value.length?r:this.placeholder||r}
|
|
225
47
|
autocomplete="off"
|
|
226
48
|
enterkeyhint="enter"
|
|
227
|
-
role=${
|
|
228
|
-
aria-expanded=${t
|
|
229
|
-
aria-controls=${
|
|
230
|
-
aria-autocomplete=${
|
|
231
|
-
aria-activedescendant=${
|
|
49
|
+
role=${n?`combobox`:r}
|
|
50
|
+
aria-expanded=${n?t?`true`:`false`:r}
|
|
51
|
+
aria-controls=${t?_:r}
|
|
52
|
+
aria-autocomplete=${n?`list`:r}
|
|
53
|
+
aria-activedescendant=${t&&this.active>=0?y(this.active):r}
|
|
232
54
|
aria-labelledby=${this.labelId}
|
|
233
|
-
aria-describedby=${this.describedBy
|
|
234
|
-
aria-invalid=${this.error
|
|
235
|
-
aria-required=${this.required
|
|
236
|
-
?disabled=${this.
|
|
55
|
+
aria-describedby=${this.describedBy===r?v:`${this.describedBy} ${v}`}
|
|
56
|
+
aria-invalid=${this.error?`true`:r}
|
|
57
|
+
aria-required=${this.required?`true`:r}
|
|
58
|
+
?disabled=${this.isDisabled}
|
|
237
59
|
@input=${this.onInput}
|
|
238
60
|
@keydown=${this.onKeydown}
|
|
239
61
|
@paste=${this.onPaste}
|
|
@@ -243,21 +65,16 @@ var h = 1e3, g = "lintje-tag-input-list", _ = "lintje-tag-input-keys", v = (e) =
|
|
|
243
65
|
<!-- A press in the list, on an option or beside one, keeps the focus in the field. -->
|
|
244
66
|
<lintje-popover
|
|
245
67
|
match-width
|
|
246
|
-
?open=${
|
|
68
|
+
?open=${t}
|
|
247
69
|
@lintje-close=${this.onPopoverClose}
|
|
248
|
-
@mousedown=${
|
|
70
|
+
@mousedown=${e=>e.preventDefault()}
|
|
249
71
|
>
|
|
250
72
|
${this.renderSuggestions()}
|
|
251
73
|
</lintje-popover>
|
|
252
|
-
<span class="visually-hidden" role="status">${this.
|
|
253
|
-
<span id=${
|
|
74
|
+
<span class="visually-hidden" role="status">${this.#t.text}</span>
|
|
75
|
+
<span id=${v} hidden
|
|
254
76
|
>Enter of een komma voegt een woord toe. Pijl links of Backspace gaat naar de woorden;
|
|
255
77
|
daar verwijdert Backspace of Delete een woord.</span
|
|
256
78
|
>
|
|
257
79
|
${this.renderFoot()}
|
|
258
|
-
</div
|
|
259
|
-
}
|
|
260
|
-
};
|
|
261
|
-
e("lintje-tag-input", y);
|
|
262
|
-
//#endregion
|
|
263
|
-
export { y as LintjeTagInput, m as addWords, p as splitWords };
|
|
80
|
+
</div>`}};s(`lintje-tag-input`,b);export{b as LintjeTagInput,h as addWords,m as splitWords};
|