@k2b/ui 0.33.0 → 0.35.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/base.css +14 -1
- package/dist/browser/actions/ContextMenu.js +13 -0
- package/dist/browser/actions/ContextMenu.js.map +1 -1
- package/dist/browser/actions/Dropdown.js +16 -4
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/SelectionToolbar.js +129 -0
- package/dist/browser/actions/SelectionToolbar.js.map +1 -0
- package/dist/browser/actions/index.js +1 -0
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/charts.js +6 -0
- package/dist/browser/charts.js.map +1 -0
- package/dist/browser/chat/ChatComposer.js +525 -407
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/chat-messages.js +4 -0
- package/dist/browser/chat/chat-messages.js.map +1 -1
- package/dist/browser/chat/composer-document.js +19 -0
- package/dist/browser/chat/composer-document.js.map +1 -1
- package/dist/browser/chat/index.js.map +1 -1
- package/dist/browser/content/Chart.js +8 -0
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/FileGrid.js +231 -9
- package/dist/browser/content/FileGrid.js.map +1 -1
- package/dist/browser/content/FileTypeIcon.js +15 -0
- package/dist/browser/content/FileTypeIcon.js.map +1 -1
- package/dist/browser/content/FileView.js +11 -4
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/MatchText.js +61 -0
- package/dist/browser/content/MatchText.js.map +1 -0
- package/dist/browser/content/MessageRow.js +73 -53
- package/dist/browser/content/MessageRow.js.map +1 -1
- package/dist/browser/content/ReactionBar.js +3 -1
- package/dist/browser/content/ReactionBar.js.map +1 -1
- package/dist/browser/content/calendar-day-scroll.js +4 -3
- package/dist/browser/content/calendar-day-scroll.js.map +1 -1
- package/dist/browser/content/chart-bar.js +476 -0
- package/dist/browser/content/chart-bar.js.map +1 -0
- package/dist/browser/content/file-list-messages.js +52 -0
- package/dist/browser/content/file-list-messages.js.map +1 -0
- package/dist/browser/content/index.js +2 -1
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/feedback/Tooltip.js +31 -14
- package/dist/browser/feedback/Tooltip.js.map +1 -1
- package/dist/browser/inputs/ChoiceList.js +178 -0
- package/dist/browser/inputs/ChoiceList.js.map +1 -0
- package/dist/browser/inputs/ChoiceSlider.js +314 -0
- package/dist/browser/inputs/ChoiceSlider.js.map +1 -0
- package/dist/browser/inputs/ChoiceTiles.js +135 -0
- package/dist/browser/inputs/ChoiceTiles.js.map +1 -0
- package/dist/browser/inputs/ColorChoices.js +120 -0
- package/dist/browser/inputs/ColorChoices.js.map +1 -0
- package/dist/browser/inputs/QrScanner.js +95 -13
- package/dist/browser/inputs/QrScanner.js.map +1 -1
- package/dist/browser/inputs/TextInput.js +15 -13
- package/dist/browser/inputs/TextInput.js.map +1 -1
- package/dist/browser/inputs/index.js +4 -0
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/inputs/qr-messages.js +2 -0
- package/dist/browser/inputs/qr-messages.js.map +1 -1
- package/dist/browser/internal/radio-keys.js +13 -0
- package/dist/browser/internal/radio-keys.js.map +1 -0
- package/dist/browser/layout/AnchoredPopover.js +180 -0
- package/dist/browser/layout/AnchoredPopover.js.map +1 -0
- package/dist/browser/layout/AppWorkspace.js +155 -20
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/DetailPanel.js +443 -333
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/MobileShell.js +21 -7
- package/dist/browser/layout/MobileShell.js.map +1 -1
- package/dist/browser/layout/Settings.js +283 -175
- package/dist/browser/layout/Settings.js.map +1 -1
- package/dist/browser/layout/SidebarRailHint.js +79 -0
- package/dist/browser/layout/SidebarRailHint.js.map +1 -0
- package/dist/browser/layout/SidebarSwitcher.js +79 -66
- package/dist/browser/layout/SidebarSwitcher.js.map +1 -1
- package/dist/browser/layout/TabBar.js +18 -4
- package/dist/browser/layout/TabBar.js.map +1 -1
- package/dist/browser/layout/app-workspace-controller.js +11 -4
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/detail-panel-messages.js +4 -2
- package/dist/browser/layout/detail-panel-messages.js.map +1 -1
- package/dist/browser/layout/index.js +2 -1
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/settings-messages.js +26 -2
- package/dist/browser/layout/settings-messages.js.map +1 -1
- package/dist/browser/surfaces/Avatar.js +2 -14
- package/dist/browser/surfaces/Avatar.js.map +1 -1
- package/dist/browser/surfaces/DotStrip.js +70 -0
- package/dist/browser/surfaces/DotStrip.js.map +1 -0
- package/dist/browser/surfaces/ProgressRing.js +3 -0
- package/dist/browser/surfaces/ProgressRing.js.map +1 -1
- package/dist/browser/surfaces/ResourceCard.js +125 -68
- package/dist/browser/surfaces/ResourceCard.js.map +1 -1
- package/dist/browser/surfaces/index.js +2 -0
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/browser/surfaces/person-color.js +18 -0
- package/dist/browser/surfaces/person-color.js.map +1 -0
- package/dist/browser/surfaces/resource-messages.js +6 -2
- package/dist/browser/surfaces/resource-messages.js.map +1 -1
- package/dist/browser/text-editor/TextEditor.js +1358 -0
- package/dist/browser/text-editor/TextEditor.js.map +1 -0
- package/dist/browser/text-editor/clipboard-html.js +152 -0
- package/dist/browser/text-editor/clipboard-html.js.map +1 -0
- package/dist/browser/text-editor/clipboard-loading.js +68 -0
- package/dist/browser/text-editor/clipboard-loading.js.map +1 -0
- package/dist/browser/text-editor/clipboard.js +51 -0
- package/dist/browser/text-editor/clipboard.js.map +1 -0
- package/dist/browser/text-editor/engine.js +125 -0
- package/dist/browser/text-editor/engine.js.map +1 -0
- package/dist/browser/text-editor/format.js +218 -0
- package/dist/browser/text-editor/format.js.map +1 -0
- package/dist/browser/text-editor/formatted.js +164 -0
- package/dist/browser/text-editor/formatted.js.map +1 -0
- package/dist/browser/text-editor/language.js +19 -0
- package/dist/browser/text-editor/language.js.map +1 -0
- package/dist/browser/text-editor/markdown-table.js +563 -0
- package/dist/browser/text-editor/markdown-table.js.map +1 -0
- package/dist/browser/text-editor/messages.js +233 -0
- package/dist/browser/text-editor/messages.js.map +1 -0
- package/dist/browser/text-editor/paste.js +115 -0
- package/dist/browser/text-editor/paste.js.map +1 -0
- package/dist/browser/text-editor/table.js +1760 -0
- package/dist/browser/text-editor/table.js.map +1 -0
- package/dist/browser/text-editor.js +5 -0
- package/dist/browser/text-editor.js.map +1 -0
- package/dist/browser/widgets/Widget.js +3 -2
- package/dist/browser/widgets/Widget.js.map +1 -1
- package/dist/ssr/actions/ContextMenu.js +9 -0
- package/dist/ssr/actions/ContextMenu.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +15 -4
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/SelectionToolbar.js +104 -0
- package/dist/ssr/actions/SelectionToolbar.js.map +1 -0
- package/dist/ssr/actions/index.js +1 -0
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/charts.js +6 -0
- package/dist/ssr/charts.js.map +1 -0
- package/dist/ssr/chat/ChatComposer.js +132 -53
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/chat-messages.js +4 -0
- package/dist/ssr/chat/chat-messages.js.map +1 -1
- package/dist/ssr/chat/composer-document.js +19 -0
- package/dist/ssr/chat/composer-document.js.map +1 -1
- package/dist/ssr/chat/index.js.map +1 -1
- package/dist/ssr/content/Chart.js +8 -0
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/FileGrid.js +132 -5
- package/dist/ssr/content/FileGrid.js.map +1 -1
- package/dist/ssr/content/FileTypeIcon.js +15 -0
- package/dist/ssr/content/FileTypeIcon.js.map +1 -1
- package/dist/ssr/content/FileView.js +11 -4
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/MatchText.js +56 -0
- package/dist/ssr/content/MatchText.js.map +1 -0
- package/dist/ssr/content/MessageRow.js +16 -6
- package/dist/ssr/content/MessageRow.js.map +1 -1
- package/dist/ssr/content/ReactionBar.js +3 -1
- package/dist/ssr/content/ReactionBar.js.map +1 -1
- package/dist/ssr/content/calendar-day-scroll.js +4 -3
- package/dist/ssr/content/calendar-day-scroll.js.map +1 -1
- package/dist/ssr/content/chart-bar.js +476 -0
- package/dist/ssr/content/chart-bar.js.map +1 -0
- package/dist/ssr/content/file-list-messages.js +52 -0
- package/dist/ssr/content/file-list-messages.js.map +1 -0
- package/dist/ssr/content/index.js +2 -1
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/feedback/Tooltip.js +31 -14
- package/dist/ssr/feedback/Tooltip.js.map +1 -1
- package/dist/ssr/inputs/ChoiceList.js +95 -0
- package/dist/ssr/inputs/ChoiceList.js.map +1 -0
- package/dist/ssr/inputs/ChoiceSlider.js +191 -0
- package/dist/ssr/inputs/ChoiceSlider.js.map +1 -0
- package/dist/ssr/inputs/ChoiceTiles.js +61 -0
- package/dist/ssr/inputs/ChoiceTiles.js.map +1 -0
- package/dist/ssr/inputs/ColorChoices.js +60 -0
- package/dist/ssr/inputs/ColorChoices.js.map +1 -0
- package/dist/ssr/inputs/QrScanner.js +89 -10
- package/dist/ssr/inputs/QrScanner.js.map +1 -1
- package/dist/ssr/inputs/TextInput.js +13 -1
- package/dist/ssr/inputs/TextInput.js.map +1 -1
- package/dist/ssr/inputs/index.js +4 -0
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/inputs/qr-messages.js +2 -0
- package/dist/ssr/inputs/qr-messages.js.map +1 -1
- package/dist/ssr/internal/radio-keys.js +13 -0
- package/dist/ssr/internal/radio-keys.js.map +1 -0
- package/dist/ssr/layout/AnchoredPopover.js +142 -0
- package/dist/ssr/layout/AnchoredPopover.js.map +1 -0
- package/dist/ssr/layout/AppWorkspace.js +154 -20
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/DetailPanel.js +181 -108
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/MobileShell.js +20 -6
- package/dist/ssr/layout/MobileShell.js.map +1 -1
- package/dist/ssr/layout/Settings.js +122 -45
- package/dist/ssr/layout/Settings.js.map +1 -1
- package/dist/ssr/layout/SidebarRailHint.js +79 -0
- package/dist/ssr/layout/SidebarRailHint.js.map +1 -0
- package/dist/ssr/layout/SidebarSwitcher.js +13 -3
- package/dist/ssr/layout/SidebarSwitcher.js.map +1 -1
- package/dist/ssr/layout/TabBar.js +11 -3
- package/dist/ssr/layout/TabBar.js.map +1 -1
- package/dist/ssr/layout/app-workspace-controller.js +11 -4
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/detail-panel-messages.js +4 -2
- package/dist/ssr/layout/detail-panel-messages.js.map +1 -1
- package/dist/ssr/layout/index.js +2 -1
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/settings-messages.js +26 -2
- package/dist/ssr/layout/settings-messages.js.map +1 -1
- package/dist/ssr/surfaces/Avatar.js +2 -14
- package/dist/ssr/surfaces/Avatar.js.map +1 -1
- package/dist/ssr/surfaces/DotStrip.js +31 -0
- package/dist/ssr/surfaces/DotStrip.js.map +1 -0
- package/dist/ssr/surfaces/ProgressRing.js +3 -0
- package/dist/ssr/surfaces/ProgressRing.js.map +1 -1
- package/dist/ssr/surfaces/ResourceCard.js +40 -15
- package/dist/ssr/surfaces/ResourceCard.js.map +1 -1
- package/dist/ssr/surfaces/index.js +2 -0
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/ssr/surfaces/person-color.js +18 -0
- package/dist/ssr/surfaces/person-color.js.map +1 -0
- package/dist/ssr/surfaces/resource-messages.js +6 -2
- package/dist/ssr/surfaces/resource-messages.js.map +1 -1
- package/dist/ssr/text-editor/TextEditor.js +1155 -0
- package/dist/ssr/text-editor/TextEditor.js.map +1 -0
- package/dist/ssr/text-editor/clipboard-html.js +152 -0
- package/dist/ssr/text-editor/clipboard-html.js.map +1 -0
- package/dist/ssr/text-editor/clipboard-loading.js +68 -0
- package/dist/ssr/text-editor/clipboard-loading.js.map +1 -0
- package/dist/ssr/text-editor/clipboard.js +51 -0
- package/dist/ssr/text-editor/clipboard.js.map +1 -0
- package/dist/ssr/text-editor/engine.js +125 -0
- package/dist/ssr/text-editor/engine.js.map +1 -0
- package/dist/ssr/text-editor/format.js +218 -0
- package/dist/ssr/text-editor/format.js.map +1 -0
- package/dist/ssr/text-editor/formatted.js +164 -0
- package/dist/ssr/text-editor/formatted.js.map +1 -0
- package/dist/ssr/text-editor/language.js +19 -0
- package/dist/ssr/text-editor/language.js.map +1 -0
- package/dist/ssr/text-editor/markdown-table.js +563 -0
- package/dist/ssr/text-editor/markdown-table.js.map +1 -0
- package/dist/ssr/text-editor/messages.js +233 -0
- package/dist/ssr/text-editor/messages.js.map +1 -0
- package/dist/ssr/text-editor/paste.js +115 -0
- package/dist/ssr/text-editor/paste.js.map +1 -0
- package/dist/ssr/text-editor/table.js +1760 -0
- package/dist/ssr/text-editor/table.js.map +1 -0
- package/dist/ssr/text-editor.js +5 -0
- package/dist/ssr/text-editor.js.map +1 -0
- package/dist/ssr/widgets/Widget.js +3 -2
- package/dist/ssr/widgets/Widget.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/ContextMenu.d.ts +5 -0
- package/dist/types/actions/Dropdown.d.ts +7 -0
- package/dist/types/actions/SelectionToolbar.d.ts +38 -0
- package/dist/types/actions/index.d.ts +2 -0
- package/dist/types/charts.d.ts +5 -0
- package/dist/types/chat/ChatComposer.d.ts +15 -0
- package/dist/types/chat/chat-messages.d.ts +2 -0
- package/dist/types/chat/composer-document.d.ts +5 -0
- package/dist/types/chat/index.d.ts +1 -1
- package/dist/types/content/Chart.d.ts +2 -1
- package/dist/types/content/FileGrid.d.ts +43 -3
- package/dist/types/content/FileTypeIcon.d.ts +10 -0
- package/dist/types/content/FileView.d.ts +5 -1
- package/dist/types/content/MatchText.d.ts +21 -0
- package/dist/types/content/MessageRow.d.ts +2 -0
- package/dist/types/content/calendar-day-scroll.d.ts +2 -1
- package/dist/types/content/chart-bar.d.ts +60 -0
- package/dist/types/content/file-list-messages.d.ts +24 -0
- package/dist/types/content/index.d.ts +3 -2
- package/dist/types/feedback/Tooltip.d.ts +8 -2
- package/dist/types/inputs/ChoiceList.d.ts +28 -0
- package/dist/types/inputs/ChoiceSlider.d.ts +36 -0
- package/dist/types/inputs/ChoiceTiles.d.ts +25 -0
- package/dist/types/inputs/ColorChoices.d.ts +19 -0
- package/dist/types/inputs/index.d.ts +8 -0
- package/dist/types/inputs/qr-messages.d.ts +1 -0
- package/dist/types/internal/radio-keys.d.ts +5 -0
- package/dist/types/layout/AnchoredPopover.d.ts +31 -0
- package/dist/types/layout/AppWorkspace.d.ts +10 -0
- package/dist/types/layout/DetailPanel.d.ts +17 -0
- package/dist/types/layout/MobileShell.d.ts +5 -2
- package/dist/types/layout/Settings.d.ts +22 -0
- package/dist/types/layout/SidebarRailHint.d.ts +26 -0
- package/dist/types/layout/TabBar.d.ts +5 -0
- package/dist/types/layout/detail-panel-messages.d.ts +1 -0
- package/dist/types/layout/index.d.ts +3 -2
- package/dist/types/layout/settings-messages.d.ts +12 -0
- package/dist/types/surfaces/DotStrip.d.ts +22 -0
- package/dist/types/surfaces/ProgressRing.d.ts +2 -1
- package/dist/types/surfaces/ResourceCard.d.ts +9 -0
- package/dist/types/surfaces/index.d.ts +4 -1
- package/dist/types/surfaces/person-color.d.ts +10 -0
- package/dist/types/surfaces/resource-messages.d.ts +2 -0
- package/dist/types/text-editor/TextEditor.d.ts +69 -0
- package/dist/types/text-editor/clipboard-html.d.ts +9 -0
- package/dist/types/text-editor/clipboard-loading.d.ts +8 -0
- package/dist/types/text-editor/clipboard.d.ts +20 -0
- package/dist/types/text-editor/engine.d.ts +34 -0
- package/dist/types/text-editor/format.d.ts +34 -0
- package/dist/types/text-editor/formatted.d.ts +1 -0
- package/dist/types/text-editor/language.d.ts +8 -0
- package/dist/types/text-editor/markdown-table.d.ts +105 -0
- package/dist/types/text-editor/messages.d.ts +113 -0
- package/dist/types/text-editor/paste.d.ts +6 -0
- package/dist/types/text-editor/table.d.ts +81 -0
- package/dist/types/text-editor.d.ts +4 -0
- package/dist/types/widgets/Widget.d.ts +3 -2
- package/package.json +28 -3
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { template as _$template } from "solid-js/web";
|
|
2
|
+
import { delegateEvents as _$delegateEvents } from "solid-js/web";
|
|
3
|
+
import { className as _$className } from "solid-js/web";
|
|
4
|
+
import { setStyleProperty as _$setStyleProperty } from "solid-js/web";
|
|
5
|
+
import { setProperty as _$setProperty } from "solid-js/web";
|
|
6
|
+
import { setAttribute as _$setAttribute } from "solid-js/web";
|
|
7
|
+
import { effect as _$effect } from "solid-js/web";
|
|
8
|
+
import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
|
|
9
|
+
import { use as _$use } from "solid-js/web";
|
|
10
|
+
import { getNextMarker as _$getNextMarker } from "solid-js/web";
|
|
11
|
+
import { insert as _$insert } from "solid-js/web";
|
|
12
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
13
|
+
import { getNextElement as _$getNextElement } from "solid-js/web";
|
|
14
|
+
var _tmpl$ = /*#__PURE__*/_$template(`<i class="ti ti-alert-triangle"aria-hidden=true>`),
|
|
15
|
+
_tmpl$2 = /*#__PURE__*/_$template(`<div class=k2b-choice-slider__track role=slider aria-valuemin=1><!$><!/><!$><!/><span class=k2b-choice-slider__thumb>`),
|
|
16
|
+
_tmpl$3 = /*#__PURE__*/_$template(`<div><p class=k2b-choice-slider__line aria-live=polite><!$><!/><span></span></p><!$><!/>`),
|
|
17
|
+
_tmpl$4 = /*#__PURE__*/_$template(`<span class=k2b-choice-slider__segment>`),
|
|
18
|
+
_tmpl$5 = /*#__PURE__*/_$template(`<span class=k2b-choice-slider__stop>`);
|
|
19
|
+
import { createEffect, createMemo, createSignal, For, on, Show } from "solid-js";
|
|
20
|
+
import { resolveMaybeAccessor } from "./field-contract";
|
|
21
|
+
const position = (index, count) => count < 2 ? 0 : index / (count - 1) * 100;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* A slider over a few named stops. The fixed line above the track always shows
|
|
25
|
+
* the active stop's description, or why a stop cannot be chosen; its height
|
|
26
|
+
* never changes. Unavailable stops stay visible and are skipped.
|
|
27
|
+
*/
|
|
28
|
+
export function ChoiceSlider(props) {
|
|
29
|
+
// The previewed stop by value, so a change of the options can never leave it pointing at another stop.
|
|
30
|
+
const [previewValue, setPreviewValue] = createSignal(null);
|
|
31
|
+
const [notice, setNotice] = createSignal(null);
|
|
32
|
+
let track;
|
|
33
|
+
let drag = null;
|
|
34
|
+
const count = () => props.options.length;
|
|
35
|
+
const chosen = createMemo(() => {
|
|
36
|
+
const value = resolveMaybeAccessor(props.value);
|
|
37
|
+
return value === null ? -1 : props.options.findIndex(option => option.value === value);
|
|
38
|
+
});
|
|
39
|
+
const preview = createMemo(() => {
|
|
40
|
+
const value = previewValue();
|
|
41
|
+
const index = value === null ? -1 : props.options.findIndex(option => option.value === value);
|
|
42
|
+
return index < 0 ? null : index;
|
|
43
|
+
});
|
|
44
|
+
const setPreview = index => setPreviewValue(index === null ? null : props.options[index]?.value ?? null);
|
|
45
|
+
const shown = () => preview() ?? chosen();
|
|
46
|
+
const option = () => props.options[shown()];
|
|
47
|
+
const available = index => props.options[index] !== undefined && !props.options[index]?.disabledReason;
|
|
48
|
+
const warning = () => notice() ?? (preview() === null ? option()?.disabledReason ?? null : null);
|
|
49
|
+
const line = () => warning() ?? option()?.description ?? (shown() < 0 ? props.description : undefined) ?? "";
|
|
50
|
+
createEffect(on(chosen, () => {
|
|
51
|
+
setPreview(null);
|
|
52
|
+
setNotice(null);
|
|
53
|
+
}));
|
|
54
|
+
// A drag ends without a choice when its stop disappears, becomes unavailable, or the slider is disabled.
|
|
55
|
+
createEffect(() => {
|
|
56
|
+
const index = preview();
|
|
57
|
+
if (previewValue() !== null && (index === null || !available(index) || props.disabled)) {
|
|
58
|
+
drag = null;
|
|
59
|
+
setPreviewValue(null);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
createEffect(on(preview, index => props.onActiveChange?.(index === null ? null : props.options[index]?.value ?? null), {
|
|
63
|
+
defer: true
|
|
64
|
+
}));
|
|
65
|
+
const valueText = () => {
|
|
66
|
+
const current = option();
|
|
67
|
+
if (!current) return props.description ?? "";
|
|
68
|
+
return current.valueText ?? [current.label, warning() ?? current.description].filter(Boolean).join(", ");
|
|
69
|
+
};
|
|
70
|
+
const nearestAvailable = at => {
|
|
71
|
+
let best = null;
|
|
72
|
+
for (let index = 0; index < count(); index += 1) {
|
|
73
|
+
if (available(index) && (best === null || Math.abs(index - at) < Math.abs(best - at))) best = index;
|
|
74
|
+
}
|
|
75
|
+
return best;
|
|
76
|
+
};
|
|
77
|
+
const commit = index => {
|
|
78
|
+
const next = props.options[index];
|
|
79
|
+
setPreview(null);
|
|
80
|
+
if (next && !props.disabled && available(index) && index !== chosen()) props.onValueChange?.(next.value);
|
|
81
|
+
};
|
|
82
|
+
const step = direction => {
|
|
83
|
+
const from = shown() < 0 ? direction > 0 ? -1 : count() : shown();
|
|
84
|
+
for (let index = from + direction; index >= 0 && index < count(); index += direction) {
|
|
85
|
+
if (available(index)) {
|
|
86
|
+
setNotice(null);
|
|
87
|
+
commit(index);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const neighbour = props.options[from + direction];
|
|
92
|
+
if (neighbour?.disabledReason) setNotice(neighbour.disabledReason);
|
|
93
|
+
};
|
|
94
|
+
const edge = end => {
|
|
95
|
+
const indexes = props.options.map((_, index) => index).filter(available);
|
|
96
|
+
const target = end ? indexes.at(-1) : indexes[0];
|
|
97
|
+
if (target !== undefined) {
|
|
98
|
+
setNotice(null);
|
|
99
|
+
commit(target);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
const onKeyDown = event => {
|
|
103
|
+
if (props.disabled) return;
|
|
104
|
+
const keys = {
|
|
105
|
+
ArrowRight: () => step(1),
|
|
106
|
+
ArrowUp: () => step(1),
|
|
107
|
+
PageUp: () => step(1),
|
|
108
|
+
ArrowLeft: () => step(-1),
|
|
109
|
+
ArrowDown: () => step(-1),
|
|
110
|
+
PageDown: () => step(-1),
|
|
111
|
+
Home: () => edge(false),
|
|
112
|
+
End: () => edge(true)
|
|
113
|
+
};
|
|
114
|
+
const action = keys[event.key];
|
|
115
|
+
if (!action) return;
|
|
116
|
+
event.preventDefault();
|
|
117
|
+
action();
|
|
118
|
+
};
|
|
119
|
+
const at = clientX => {
|
|
120
|
+
const rect = track?.getBoundingClientRect();
|
|
121
|
+
if (!rect || rect.width === 0) return 0;
|
|
122
|
+
return Math.max(0, Math.min(1, (clientX - rect.left) / rect.width)) * (count() - 1);
|
|
123
|
+
};
|
|
124
|
+
const onPointerDown = event => {
|
|
125
|
+
// One pointer owns a drag; a second finger waits until it ends.
|
|
126
|
+
if (props.disabled || count() < 2 || event.button !== 0 || drag) return;
|
|
127
|
+
event.preventDefault();
|
|
128
|
+
track?.focus({
|
|
129
|
+
preventScroll: true
|
|
130
|
+
});
|
|
131
|
+
track?.setPointerCapture?.(event.pointerId);
|
|
132
|
+
const near = Math.round(at(event.clientX));
|
|
133
|
+
const pressed = props.options[near];
|
|
134
|
+
if (pressed?.disabledReason) {
|
|
135
|
+
drag = {
|
|
136
|
+
pointerId: event.pointerId,
|
|
137
|
+
blocked: near,
|
|
138
|
+
startX: event.clientX
|
|
139
|
+
};
|
|
140
|
+
setNotice(pressed.disabledReason);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
drag = {
|
|
144
|
+
pointerId: event.pointerId,
|
|
145
|
+
blocked: null,
|
|
146
|
+
startX: event.clientX
|
|
147
|
+
};
|
|
148
|
+
setNotice(null);
|
|
149
|
+
setPreview(nearestAvailable(at(event.clientX)));
|
|
150
|
+
};
|
|
151
|
+
const onPointerMove = event => {
|
|
152
|
+
if (!drag || drag.pointerId !== event.pointerId) return;
|
|
153
|
+
if (drag.blocked !== null && Math.abs(event.clientX - drag.startX) <= 2) return;
|
|
154
|
+
drag.blocked = null;
|
|
155
|
+
const next = nearestAvailable(at(event.clientX));
|
|
156
|
+
if (next !== null) {
|
|
157
|
+
setNotice(null);
|
|
158
|
+
setPreview(next);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
/** Only a release chooses; a cancel or a lost capture puts the slider back on its value. */
|
|
163
|
+
const onPointerEnd = event => {
|
|
164
|
+
if (!drag || drag.pointerId !== event.pointerId) return;
|
|
165
|
+
drag = null;
|
|
166
|
+
const index = preview();
|
|
167
|
+
if (event.type !== "pointerup" || index === null) {
|
|
168
|
+
setPreview(null);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
commit(index);
|
|
172
|
+
};
|
|
173
|
+
return (() => {
|
|
174
|
+
var _el$ = _$getNextElement(_tmpl$3),
|
|
175
|
+
_el$2 = _el$.firstChild,
|
|
176
|
+
_el$5 = _el$2.firstChild,
|
|
177
|
+
[_el$6, _co$] = _$getNextMarker(_el$5.nextSibling),
|
|
178
|
+
_el$4 = _el$6.nextSibling,
|
|
179
|
+
_el$11 = _el$2.nextSibling,
|
|
180
|
+
[_el$12, _co$4] = _$getNextMarker(_el$11.nextSibling);
|
|
181
|
+
_$insert(_el$2, _$createComponent(Show, {
|
|
182
|
+
get when() {
|
|
183
|
+
return warning();
|
|
184
|
+
},
|
|
185
|
+
get children() {
|
|
186
|
+
return _$getNextElement(_tmpl$);
|
|
187
|
+
}
|
|
188
|
+
}), _el$6, _co$);
|
|
189
|
+
_$insert(_el$4, line);
|
|
190
|
+
_$insert(_el$, _$createComponent(Show, {
|
|
191
|
+
get when() {
|
|
192
|
+
return count() >= 2;
|
|
193
|
+
},
|
|
194
|
+
get children() {
|
|
195
|
+
var _el$7 = _$getNextElement(_tmpl$2),
|
|
196
|
+
_el$9 = _el$7.firstChild,
|
|
197
|
+
[_el$0, _co$2] = _$getNextMarker(_el$9.nextSibling),
|
|
198
|
+
_el$1 = _el$0.nextSibling,
|
|
199
|
+
[_el$10, _co$3] = _$getNextMarker(_el$1.nextSibling),
|
|
200
|
+
_el$8 = _el$10.nextSibling;
|
|
201
|
+
_el$7.addEventListener("lostpointercapture", onPointerEnd);
|
|
202
|
+
_el$7.addEventListener("pointercancel", onPointerEnd);
|
|
203
|
+
_el$7.$$pointerup = onPointerEnd;
|
|
204
|
+
_el$7.$$pointermove = onPointerMove;
|
|
205
|
+
_el$7.$$pointerdown = onPointerDown;
|
|
206
|
+
_el$7.$$keydown = onKeyDown;
|
|
207
|
+
var _ref$ = track;
|
|
208
|
+
typeof _ref$ === "function" ? _$use(_ref$, _el$7) : track = _el$7;
|
|
209
|
+
_$insert(_el$7, _$createComponent(For, {
|
|
210
|
+
get each() {
|
|
211
|
+
return props.options.slice(1);
|
|
212
|
+
},
|
|
213
|
+
children: (_, index) => (() => {
|
|
214
|
+
var _el$13 = _$getNextElement(_tmpl$4);
|
|
215
|
+
_$effect(_p$ => {
|
|
216
|
+
var _v$13 = shown() > index() ? "" : undefined,
|
|
217
|
+
_v$14 = `calc(${position(index(), count())}% + 8px)`,
|
|
218
|
+
_v$15 = `calc(${position(index() + 1, count()) - position(index(), count())}% - 16px)`;
|
|
219
|
+
_v$13 !== _p$.e && _$setAttribute(_el$13, "data-on", _p$.e = _v$13);
|
|
220
|
+
_v$14 !== _p$.t && _$setStyleProperty(_el$13, "left", _p$.t = _v$14);
|
|
221
|
+
_v$15 !== _p$.a && _$setStyleProperty(_el$13, "width", _p$.a = _v$15);
|
|
222
|
+
return _p$;
|
|
223
|
+
}, {
|
|
224
|
+
e: undefined,
|
|
225
|
+
t: undefined,
|
|
226
|
+
a: undefined
|
|
227
|
+
});
|
|
228
|
+
return _el$13;
|
|
229
|
+
})()
|
|
230
|
+
}), _el$0, _co$2);
|
|
231
|
+
_$insert(_el$7, _$createComponent(For, {
|
|
232
|
+
get each() {
|
|
233
|
+
return props.options;
|
|
234
|
+
},
|
|
235
|
+
children: (stop, index) => (() => {
|
|
236
|
+
var _el$14 = _$getNextElement(_tmpl$5);
|
|
237
|
+
_$effect(_p$ => {
|
|
238
|
+
var _v$16 = shown() > index() ? "" : undefined,
|
|
239
|
+
_v$17 = stop.disabledReason ? "" : undefined,
|
|
240
|
+
_v$18 = index() === shown() ? "" : undefined,
|
|
241
|
+
_v$19 = `${position(index(), count())}%`;
|
|
242
|
+
_v$16 !== _p$.e && _$setAttribute(_el$14, "data-on", _p$.e = _v$16);
|
|
243
|
+
_v$17 !== _p$.t && _$setAttribute(_el$14, "data-unavailable", _p$.t = _v$17);
|
|
244
|
+
_v$18 !== _p$.a && _$setAttribute(_el$14, "data-current", _p$.a = _v$18);
|
|
245
|
+
_v$19 !== _p$.o && _$setStyleProperty(_el$14, "left", _p$.o = _v$19);
|
|
246
|
+
return _p$;
|
|
247
|
+
}, {
|
|
248
|
+
e: undefined,
|
|
249
|
+
t: undefined,
|
|
250
|
+
a: undefined,
|
|
251
|
+
o: undefined
|
|
252
|
+
});
|
|
253
|
+
return _el$14;
|
|
254
|
+
})()
|
|
255
|
+
}), _el$10, _co$3);
|
|
256
|
+
_$effect(_p$ => {
|
|
257
|
+
var _v$ = props.id,
|
|
258
|
+
_v$2 = props.disabled ? -1 : 0,
|
|
259
|
+
_v$3 = props["aria-label"],
|
|
260
|
+
_v$4 = props["aria-labelledby"],
|
|
261
|
+
_v$5 = count(),
|
|
262
|
+
_v$6 = Math.max(0, shown()) + 1,
|
|
263
|
+
_v$7 = valueText(),
|
|
264
|
+
_v$8 = props.disabled ? "true" : undefined,
|
|
265
|
+
_v$9 = warning() && preview() === null && option()?.disabledReason ? "warning" : undefined,
|
|
266
|
+
_v$0 = shown() < 0,
|
|
267
|
+
_v$1 = `${position(Math.max(0, shown()), count())}%`;
|
|
268
|
+
_v$ !== _p$.e && _$setAttribute(_el$7, "id", _p$.e = _v$);
|
|
269
|
+
_v$2 !== _p$.t && _$setAttribute(_el$7, "tabindex", _p$.t = _v$2);
|
|
270
|
+
_v$3 !== _p$.a && _$setAttribute(_el$7, "aria-label", _p$.a = _v$3);
|
|
271
|
+
_v$4 !== _p$.o && _$setAttribute(_el$7, "aria-labelledby", _p$.o = _v$4);
|
|
272
|
+
_v$5 !== _p$.i && _$setAttribute(_el$7, "aria-valuemax", _p$.i = _v$5);
|
|
273
|
+
_v$6 !== _p$.n && _$setAttribute(_el$7, "aria-valuenow", _p$.n = _v$6);
|
|
274
|
+
_v$7 !== _p$.s && _$setAttribute(_el$7, "aria-valuetext", _p$.s = _v$7);
|
|
275
|
+
_v$8 !== _p$.h && _$setAttribute(_el$7, "aria-disabled", _p$.h = _v$8);
|
|
276
|
+
_v$9 !== _p$.r && _$setAttribute(_el$8, "data-tone", _p$.r = _v$9);
|
|
277
|
+
_v$0 !== _p$.d && _$setProperty(_el$8, "hidden", _p$.d = _v$0);
|
|
278
|
+
_v$1 !== _p$.l && _$setStyleProperty(_el$8, "left", _p$.l = _v$1);
|
|
279
|
+
return _p$;
|
|
280
|
+
}, {
|
|
281
|
+
e: undefined,
|
|
282
|
+
t: undefined,
|
|
283
|
+
a: undefined,
|
|
284
|
+
o: undefined,
|
|
285
|
+
i: undefined,
|
|
286
|
+
n: undefined,
|
|
287
|
+
s: undefined,
|
|
288
|
+
h: undefined,
|
|
289
|
+
r: undefined,
|
|
290
|
+
d: undefined,
|
|
291
|
+
l: undefined
|
|
292
|
+
});
|
|
293
|
+
_$runHydrationEvents();
|
|
294
|
+
return _el$7;
|
|
295
|
+
}
|
|
296
|
+
}), _el$12, _co$4);
|
|
297
|
+
_$effect(_p$ => {
|
|
298
|
+
var _v$10 = ["k2b-choice-slider", props.class].filter(Boolean).join(" "),
|
|
299
|
+
_v$11 = props.size ?? "md",
|
|
300
|
+
_v$12 = warning() ? "warning" : undefined;
|
|
301
|
+
_v$10 !== _p$.e && _$className(_el$, _p$.e = _v$10);
|
|
302
|
+
_v$11 !== _p$.t && _$setAttribute(_el$, "data-size", _p$.t = _v$11);
|
|
303
|
+
_v$12 !== _p$.a && _$setAttribute(_el$2, "data-tone", _p$.a = _v$12);
|
|
304
|
+
return _p$;
|
|
305
|
+
}, {
|
|
306
|
+
e: undefined,
|
|
307
|
+
t: undefined,
|
|
308
|
+
a: undefined
|
|
309
|
+
});
|
|
310
|
+
return _el$;
|
|
311
|
+
})();
|
|
312
|
+
}
|
|
313
|
+
_$delegateEvents(["keydown", "pointerdown", "pointermove", "pointerup"]);
|
|
314
|
+
//# sourceMappingURL=ChoiceSlider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/ChoiceSlider.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, For, type JSX, on, Show } from \"solid-js\";\nimport { type MaybeAccessor, resolveMaybeAccessor } from \"./field-contract\";\n\nexport type ChoiceSliderOption = {\n value: string;\n label: string;\n /** One short line shown below the label line while this stop is active. */\n description?: string;\n /** Makes the stop unavailable. The text replaces the description when someone reaches the stop. */\n disabledReason?: string;\n /** Spoken value; defaults to the label and the description or reason. */\n valueText?: string;\n};\n\nexport type ChoiceSliderProps = {\n options: readonly ChoiceSliderOption[];\n /** The chosen stop. `null` shows no thumb, for a choice that is none of the stops. */\n value: MaybeAccessor<string | null>;\n /** A person released the thumb on a stop or moved to one with the keyboard. */\n onValueChange?: (value: string) => void;\n /** The stop the slider shows while someone drags or arrows through it; `null` when it shows `value` again. */\n onActiveChange?: (value: string | null) => void;\n /** Line text while no stop is chosen. */\n description?: string;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n id?: string;\n class?: string;\n disabled?: boolean;\n /** `lg` gives a 44 px track and a 28 px thumb for touch sheets. */\n size?: \"md\" | \"lg\";\n};\n\nconst position = (index: number, count: number) => (count < 2 ? 0 : (index / (count - 1)) * 100);\n\n/**\n * A slider over a few named stops. The fixed line above the track always shows\n * the active stop's description, or why a stop cannot be chosen; its height\n * never changes. Unavailable stops stay visible and are skipped.\n */\nexport function ChoiceSlider(props: ChoiceSliderProps): JSX.Element {\n // The previewed stop by value, so a change of the options can never leave it pointing at another stop.\n const [previewValue, setPreviewValue] = createSignal<string | null>(null);\n const [notice, setNotice] = createSignal<string | null>(null);\n let track: HTMLDivElement | undefined;\n let drag: { pointerId: number; blocked: number | null; startX: number } | null = null;\n\n const count = () => props.options.length;\n const chosen = createMemo(() => {\n const value = resolveMaybeAccessor(props.value);\n return value === null ? -1 : props.options.findIndex((option) => option.value === value);\n });\n const preview = createMemo(() => {\n const value = previewValue();\n const index = value === null ? -1 : props.options.findIndex((option) => option.value === value);\n return index < 0 ? null : index;\n });\n const setPreview = (index: number | null) => setPreviewValue(index === null ? null : (props.options[index]?.value ?? null));\n const shown = () => preview() ?? chosen();\n const option = () => props.options[shown()];\n const available = (index: number) => props.options[index] !== undefined && !props.options[index]?.disabledReason;\n const warning = () => notice() ?? (preview() === null ? (option()?.disabledReason ?? null) : null);\n const line = () => warning() ?? option()?.description ?? (shown() < 0 ? props.description : undefined) ?? \"\";\n\n createEffect(\n on(chosen, () => {\n setPreview(null);\n setNotice(null);\n }),\n );\n // A drag ends without a choice when its stop disappears, becomes unavailable, or the slider is disabled.\n createEffect(() => {\n const index = preview();\n if (previewValue() !== null && (index === null || !available(index) || props.disabled)) {\n drag = null;\n setPreviewValue(null);\n }\n });\n createEffect(\n on(preview, (index) => props.onActiveChange?.(index === null ? null : (props.options[index]?.value ?? null)), { defer: true }),\n );\n\n const valueText = () => {\n const current = option();\n if (!current) return props.description ?? \"\";\n return current.valueText ?? [current.label, warning() ?? current.description].filter(Boolean).join(\", \");\n };\n\n const nearestAvailable = (at: number) => {\n let best: number | null = null;\n for (let index = 0; index < count(); index += 1) {\n if (available(index) && (best === null || Math.abs(index - at) < Math.abs(best - at))) best = index;\n }\n return best;\n };\n\n const commit = (index: number) => {\n const next = props.options[index];\n setPreview(null);\n if (next && !props.disabled && available(index) && index !== chosen()) props.onValueChange?.(next.value);\n };\n\n const step = (direction: 1 | -1) => {\n const from = shown() < 0 ? (direction > 0 ? -1 : count()) : shown();\n for (let index = from + direction; index >= 0 && index < count(); index += direction) {\n if (available(index)) {\n setNotice(null);\n commit(index);\n return;\n }\n }\n const neighbour = props.options[from + direction];\n if (neighbour?.disabledReason) setNotice(neighbour.disabledReason);\n };\n\n const edge = (end: boolean) => {\n const indexes = props.options.map((_, index) => index).filter(available);\n const target = end ? indexes.at(-1) : indexes[0];\n if (target !== undefined) {\n setNotice(null);\n commit(target);\n }\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n const keys: Record<string, () => void> = {\n ArrowRight: () => step(1),\n ArrowUp: () => step(1),\n PageUp: () => step(1),\n ArrowLeft: () => step(-1),\n ArrowDown: () => step(-1),\n PageDown: () => step(-1),\n Home: () => edge(false),\n End: () => edge(true),\n };\n const action = keys[event.key];\n if (!action) return;\n event.preventDefault();\n action();\n };\n\n const at = (clientX: number) => {\n const rect = track?.getBoundingClientRect();\n if (!rect || rect.width === 0) return 0;\n return Math.max(0, Math.min(1, (clientX - rect.left) / rect.width)) * (count() - 1);\n };\n\n const onPointerDown = (event: PointerEvent) => {\n // One pointer owns a drag; a second finger waits until it ends.\n if (props.disabled || count() < 2 || event.button !== 0 || drag) return;\n event.preventDefault();\n track?.focus({ preventScroll: true });\n track?.setPointerCapture?.(event.pointerId);\n const near = Math.round(at(event.clientX));\n const pressed = props.options[near];\n if (pressed?.disabledReason) {\n drag = { pointerId: event.pointerId, blocked: near, startX: event.clientX };\n setNotice(pressed.disabledReason);\n return;\n }\n drag = { pointerId: event.pointerId, blocked: null, startX: event.clientX };\n setNotice(null);\n setPreview(nearestAvailable(at(event.clientX)));\n };\n\n const onPointerMove = (event: PointerEvent) => {\n if (!drag || drag.pointerId !== event.pointerId) return;\n if (drag.blocked !== null && Math.abs(event.clientX - drag.startX) <= 2) return;\n drag.blocked = null;\n const next = nearestAvailable(at(event.clientX));\n if (next !== null) {\n setNotice(null);\n setPreview(next);\n }\n };\n\n /** Only a release chooses; a cancel or a lost capture puts the slider back on its value. */\n const onPointerEnd = (event: PointerEvent) => {\n if (!drag || drag.pointerId !== event.pointerId) return;\n drag = null;\n const index = preview();\n if (event.type !== \"pointerup\" || index === null) {\n setPreview(null);\n return;\n }\n commit(index);\n };\n\n return (\n <div class={[\"k2b-choice-slider\", props.class].filter(Boolean).join(\" \")} data-size={props.size ?? \"md\"}>\n <p class=\"k2b-choice-slider__line\" data-tone={warning() ? \"warning\" : undefined} aria-live=\"polite\">\n <Show when={warning()}>\n <i class=\"ti ti-alert-triangle\" aria-hidden=\"true\" />\n </Show>\n <span>{line()}</span>\n </p>\n <Show when={count() >= 2}>\n <div\n ref={track}\n id={props.id}\n class=\"k2b-choice-slider__track\"\n role=\"slider\"\n tabIndex={props.disabled ? -1 : 0}\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n aria-valuemin={1}\n aria-valuemax={count()}\n aria-valuenow={Math.max(0, shown()) + 1}\n aria-valuetext={valueText()}\n aria-disabled={props.disabled ? \"true\" : undefined}\n onKeyDown={onKeyDown}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerEnd}\n onPointerCancel={onPointerEnd}\n onLostPointerCapture={onPointerEnd}\n >\n <For each={props.options.slice(1)}>\n {(_, index) => (\n <span\n class=\"k2b-choice-slider__segment\"\n data-on={shown() > index() ? \"\" : undefined}\n style={{\n left: `calc(${position(index(), count())}% + 8px)`,\n width: `calc(${position(index() + 1, count()) - position(index(), count())}% - 16px)`,\n }}\n />\n )}\n </For>\n <For each={props.options}>\n {(stop, index) => (\n <span\n class=\"k2b-choice-slider__stop\"\n data-on={shown() > index() ? \"\" : undefined}\n data-unavailable={stop.disabledReason ? \"\" : undefined}\n data-current={index() === shown() ? \"\" : undefined}\n style={{ left: `${position(index(), count())}%` }}\n />\n )}\n </For>\n <span\n class=\"k2b-choice-slider__thumb\"\n data-tone={warning() && preview() === null && option()?.disabledReason ? \"warning\" : undefined}\n hidden={shown() < 0}\n style={{ left: `${position(Math.max(0, shown()), count())}%` }}\n />\n </div>\n </Show>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { template as _$template } from "solid-js/web";
|
|
2
|
+
import { delegateEvents as _$delegateEvents } from "solid-js/web";
|
|
3
|
+
import { setProperty as _$setProperty } from "solid-js/web";
|
|
4
|
+
import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
|
|
5
|
+
import { getNextMarker as _$getNextMarker } from "solid-js/web";
|
|
6
|
+
import { memo as _$memo } from "solid-js/web";
|
|
7
|
+
import { setAttribute as _$setAttribute } from "solid-js/web";
|
|
8
|
+
import { effect as _$effect } from "solid-js/web";
|
|
9
|
+
import { getNextElement as _$getNextElement } from "solid-js/web";
|
|
10
|
+
import { insert as _$insert } from "solid-js/web";
|
|
11
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
12
|
+
import { use as _$use } from "solid-js/web";
|
|
13
|
+
var _tmpl$ = /*#__PURE__*/_$template(`<div class=k2b-choice-tiles__group role=radiogroup>`),
|
|
14
|
+
_tmpl$2 = /*#__PURE__*/_$template(`<button type=button role=radio class=k2b-choice-tiles__tile><span class=k2b-choice-tiles__visual aria-hidden=true></span><span class=k2b-choice-tiles__text><span class=k2b-choice-tiles__label></span><!$><!/>`),
|
|
15
|
+
_tmpl$3 = /*#__PURE__*/_$template(`<span class=k2b-choice-tiles__status>`);
|
|
16
|
+
import { For } from "solid-js";
|
|
17
|
+
import { createFieldMeta, Field, fieldDescribedBy } from "../internal/field";
|
|
18
|
+
import { radioKeyTarget } from "../internal/radio-keys";
|
|
19
|
+
import { resolveMaybeAccessor } from "./field-contract";
|
|
20
|
+
/**
|
|
21
|
+
* A labeled single choice shown as tiles with a preview, for picking how something looks: a face shape, a frame, a
|
|
22
|
+
* kind of picture. Every tile keeps its size when chosen, so nothing moves. Use `ChoiceChips` for text choices and
|
|
23
|
+
* `ColorChoices` for named colours.
|
|
24
|
+
*/
|
|
25
|
+
export function ChoiceTiles(props) {
|
|
26
|
+
const meta = createFieldMeta(props.id);
|
|
27
|
+
let group;
|
|
28
|
+
const value = () => resolveMaybeAccessor(props.value) ?? null;
|
|
29
|
+
const tabStop = (option, index) => value() === option.value || index === 0 && !props.options.some(candidate => candidate.value === value());
|
|
30
|
+
const choose = (index, focus = false) => {
|
|
31
|
+
const option = props.options[index];
|
|
32
|
+
if (!option || props.disabled) return;
|
|
33
|
+
props.onValueChange?.(option.value);
|
|
34
|
+
props.onValueCommit?.(option.value);
|
|
35
|
+
// The radios in their current DOM order: options may have been reordered since they rendered.
|
|
36
|
+
if (focus) queueMicrotask(() => group?.querySelectorAll('[role="radio"]')[index]?.focus());
|
|
37
|
+
};
|
|
38
|
+
return _$createComponent(Field, {
|
|
39
|
+
meta: meta,
|
|
40
|
+
labelFor: false,
|
|
41
|
+
get ["class"]() {
|
|
42
|
+
return props.class;
|
|
43
|
+
},
|
|
44
|
+
get label() {
|
|
45
|
+
return props.label;
|
|
46
|
+
},
|
|
47
|
+
get description() {
|
|
48
|
+
return props.description;
|
|
49
|
+
},
|
|
50
|
+
get error() {
|
|
51
|
+
return props.error;
|
|
52
|
+
},
|
|
53
|
+
get required() {
|
|
54
|
+
return props.required;
|
|
55
|
+
},
|
|
56
|
+
get disabled() {
|
|
57
|
+
return props.disabled;
|
|
58
|
+
},
|
|
59
|
+
get children() {
|
|
60
|
+
var _el$ = _$getNextElement(_tmpl$);
|
|
61
|
+
var _ref$ = group;
|
|
62
|
+
typeof _ref$ === "function" ? _$use(_ref$, _el$) : group = _el$;
|
|
63
|
+
_$insert(_el$, _$createComponent(For, {
|
|
64
|
+
get each() {
|
|
65
|
+
return props.options;
|
|
66
|
+
},
|
|
67
|
+
children: (option, index) => (() => {
|
|
68
|
+
var _el$2 = _$getNextElement(_tmpl$2),
|
|
69
|
+
_el$3 = _el$2.firstChild,
|
|
70
|
+
_el$4 = _el$3.nextSibling,
|
|
71
|
+
_el$5 = _el$4.firstChild,
|
|
72
|
+
_el$6 = _el$5.nextSibling,
|
|
73
|
+
[_el$7, _co$] = _$getNextMarker(_el$6.nextSibling);
|
|
74
|
+
_el$2.$$keydown = event => {
|
|
75
|
+
const target = radioKeyTarget(event.key, index(), props.options.length);
|
|
76
|
+
if (target === undefined) return;
|
|
77
|
+
event.preventDefault();
|
|
78
|
+
choose(target, true);
|
|
79
|
+
};
|
|
80
|
+
_el$2.$$click = () => choose(index());
|
|
81
|
+
_$insert(_el$3, () => option.visual);
|
|
82
|
+
_$insert(_el$5, () => option.label);
|
|
83
|
+
_$insert(_el$4, (() => {
|
|
84
|
+
var _c$ = _$memo(() => props.layout === "row");
|
|
85
|
+
return () => _c$() && (() => {
|
|
86
|
+
var _el$8 = _$getNextElement(_tmpl$3);
|
|
87
|
+
_$insert(_el$8, () => option.status ?? "");
|
|
88
|
+
return _el$8;
|
|
89
|
+
})();
|
|
90
|
+
})(), _el$7, _co$);
|
|
91
|
+
_$effect(_p$ => {
|
|
92
|
+
var _v$7 = value() === option.value,
|
|
93
|
+
_v$8 = props.disabled,
|
|
94
|
+
_v$9 = tabStop(option, index()) ? 0 : -1;
|
|
95
|
+
_v$7 !== _p$.e && _$setAttribute(_el$2, "aria-checked", _p$.e = _v$7);
|
|
96
|
+
_v$8 !== _p$.t && _$setProperty(_el$2, "disabled", _p$.t = _v$8);
|
|
97
|
+
_v$9 !== _p$.a && _$setAttribute(_el$2, "tabindex", _p$.a = _v$9);
|
|
98
|
+
return _p$;
|
|
99
|
+
}, {
|
|
100
|
+
e: undefined,
|
|
101
|
+
t: undefined,
|
|
102
|
+
a: undefined
|
|
103
|
+
});
|
|
104
|
+
_$runHydrationEvents();
|
|
105
|
+
return _el$2;
|
|
106
|
+
})()
|
|
107
|
+
}));
|
|
108
|
+
_$effect(_p$ => {
|
|
109
|
+
var _v$ = props.layout ?? "grid",
|
|
110
|
+
_v$2 = props.dimmed ? "true" : undefined,
|
|
111
|
+
_v$3 = props.label ? undefined : props["aria-label"],
|
|
112
|
+
_v$4 = props.label ? meta.labelId : undefined,
|
|
113
|
+
_v$5 = fieldDescribedBy(meta, props),
|
|
114
|
+
_v$6 = props.disabled ? "true" : undefined;
|
|
115
|
+
_v$ !== _p$.e && _$setAttribute(_el$, "data-layout", _p$.e = _v$);
|
|
116
|
+
_v$2 !== _p$.t && _$setAttribute(_el$, "data-dimmed", _p$.t = _v$2);
|
|
117
|
+
_v$3 !== _p$.a && _$setAttribute(_el$, "aria-label", _p$.a = _v$3);
|
|
118
|
+
_v$4 !== _p$.o && _$setAttribute(_el$, "aria-labelledby", _p$.o = _v$4);
|
|
119
|
+
_v$5 !== _p$.i && _$setAttribute(_el$, "aria-describedby", _p$.i = _v$5);
|
|
120
|
+
_v$6 !== _p$.n && _$setAttribute(_el$, "aria-disabled", _p$.n = _v$6);
|
|
121
|
+
return _p$;
|
|
122
|
+
}, {
|
|
123
|
+
e: undefined,
|
|
124
|
+
t: undefined,
|
|
125
|
+
a: undefined,
|
|
126
|
+
o: undefined,
|
|
127
|
+
i: undefined,
|
|
128
|
+
n: undefined
|
|
129
|
+
});
|
|
130
|
+
return _el$;
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
_$delegateEvents(["click", "keydown"]);
|
|
135
|
+
//# sourceMappingURL=ChoiceTiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/ChoiceTiles.tsx"],"sourcesContent":["import { For, type JSX } from \"solid-js\";\nimport { createFieldMeta, Field, fieldDescribedBy } from \"../internal/field\";\nimport { radioKeyTarget } from \"../internal/radio-keys\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { resolveMaybeAccessor } from \"./field-contract\";\n\nexport type ChoiceTileOption<T extends string = string> = {\n value: T;\n label: string;\n /** What the choice looks like, such as a preview image; decorative, the label names the choice. */\n visual: JSX.Element;\n /** A short state under the label, such as \"Active\"; keeps its line, so tiles never change height. */\n status?: string;\n};\n\nexport type ChoiceTilesProps<T extends string = string> = Omit<ValueFieldProps<T | null>, \"onValueChange\" | \"onValueCommit\"> & {\n options: readonly ChoiceTileOption<T>[];\n /** `grid`: preview over label in as many columns as fit. `row`: preview beside label in one row, stacked on phones. */\n layout?: \"grid\" | \"row\";\n /** The choice is kept but has no visible effect right now; previews are dimmed, choosing still works. */\n dimmed?: boolean;\n onValueChange?: (value: T) => void;\n onValueCommit?: (value: T) => void;\n};\n\n/**\n * A labeled single choice shown as tiles with a preview, for picking how something looks: a face shape, a frame, a\n * kind of picture. Every tile keeps its size when chosen, so nothing moves. Use `ChoiceChips` for text choices and\n * `ColorChoices` for named colours.\n */\nexport function ChoiceTiles<T extends string = string>(props: ChoiceTilesProps<T>): JSX.Element {\n const meta = createFieldMeta(props.id);\n let group: HTMLDivElement | undefined;\n const value = () => resolveMaybeAccessor(props.value) ?? null;\n const tabStop = (option: ChoiceTileOption<T>, index: number) =>\n value() === option.value || (index === 0 && !props.options.some((candidate) => candidate.value === value()));\n const choose = (index: number, focus = false) => {\n const option = props.options[index];\n if (!option || props.disabled) return;\n props.onValueChange?.(option.value);\n props.onValueCommit?.(option.value);\n // The radios in their current DOM order: options may have been reordered since they rendered.\n if (focus) queueMicrotask(() => group?.querySelectorAll<HTMLButtonElement>('[role=\"radio\"]')[index]?.focus());\n };\n return (\n <Field\n meta={meta}\n labelFor={false}\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n required={props.required}\n disabled={props.disabled}\n >\n <div\n class=\"k2b-choice-tiles__group\"\n ref={group}\n role=\"radiogroup\"\n data-layout={props.layout ?? \"grid\"}\n data-dimmed={props.dimmed ? \"true\" : undefined}\n aria-label={props.label ? undefined : props[\"aria-label\"]}\n aria-labelledby={props.label ? meta.labelId : undefined}\n aria-describedby={fieldDescribedBy(meta, props)}\n aria-disabled={props.disabled ? \"true\" : undefined}\n >\n <For each={props.options}>\n {(option, index) => (\n <button\n type=\"button\"\n role=\"radio\"\n class=\"k2b-choice-tiles__tile\"\n aria-checked={value() === option.value}\n disabled={props.disabled}\n tabIndex={tabStop(option, index()) ? 0 : -1}\n onClick={() => choose(index())}\n onKeyDown={(event) => {\n const target = radioKeyTarget(event.key, index(), props.options.length);\n if (target === undefined) return;\n event.preventDefault();\n choose(target, true);\n }}\n >\n <span class=\"k2b-choice-tiles__visual\" aria-hidden=\"true\">\n {option.visual}\n </span>\n <span class=\"k2b-choice-tiles__text\">\n <span class=\"k2b-choice-tiles__label\">{option.label}</span>\n {props.layout === \"row\" && <span class=\"k2b-choice-tiles__status\">{option.status ?? \"\"}</span>}\n </span>\n </button>\n )}\n </For>\n </div>\n </Field>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { template as _$template } from "solid-js/web";
|
|
2
|
+
import { delegateEvents as _$delegateEvents } from "solid-js/web";
|
|
3
|
+
import { setProperty as _$setProperty } from "solid-js/web";
|
|
4
|
+
import { setStyleProperty as _$setStyleProperty } from "solid-js/web";
|
|
5
|
+
import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
|
|
6
|
+
import { setAttribute as _$setAttribute } from "solid-js/web";
|
|
7
|
+
import { effect as _$effect } from "solid-js/web";
|
|
8
|
+
import { getNextElement as _$getNextElement } from "solid-js/web";
|
|
9
|
+
import { insert as _$insert } from "solid-js/web";
|
|
10
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
11
|
+
import { use as _$use } from "solid-js/web";
|
|
12
|
+
var _tmpl$ = /*#__PURE__*/_$template(`<div class=k2b-color-choices__group role=radiogroup>`),
|
|
13
|
+
_tmpl$2 = /*#__PURE__*/_$template(`<button type=button role=radio class=k2b-color-choices__swatch><i class="ti ti-check"aria-hidden=true>`);
|
|
14
|
+
import { For } from "solid-js";
|
|
15
|
+
import { createFieldMeta, Field, fieldDescribedBy } from "../internal/field";
|
|
16
|
+
import { radioKeyTarget } from "../internal/radio-keys";
|
|
17
|
+
import { resolveMaybeAccessor } from "./field-contract";
|
|
18
|
+
/**
|
|
19
|
+
* A labeled single choice from a fixed palette of named colours, shown as round swatches. Use `ColorInput` when any
|
|
20
|
+
* colour is allowed.
|
|
21
|
+
*/
|
|
22
|
+
export function ColorChoices(props) {
|
|
23
|
+
const meta = createFieldMeta(props.id);
|
|
24
|
+
let group;
|
|
25
|
+
const value = () => resolveMaybeAccessor(props.value) ?? null;
|
|
26
|
+
const tabStop = (option, index) => value() === option.value || index === 0 && !props.options.some(candidate => candidate.value === value());
|
|
27
|
+
const choose = (index, focus = false) => {
|
|
28
|
+
const option = props.options[index];
|
|
29
|
+
if (!option || props.disabled) return;
|
|
30
|
+
props.onValueChange?.(option.value);
|
|
31
|
+
props.onValueCommit?.(option.value);
|
|
32
|
+
// The radios in their current DOM order: options may have been reordered since they rendered.
|
|
33
|
+
if (focus) queueMicrotask(() => group?.querySelectorAll('[role="radio"]')[index]?.focus());
|
|
34
|
+
};
|
|
35
|
+
return _$createComponent(Field, {
|
|
36
|
+
meta: meta,
|
|
37
|
+
labelFor: false,
|
|
38
|
+
get ["class"]() {
|
|
39
|
+
return props.class;
|
|
40
|
+
},
|
|
41
|
+
get label() {
|
|
42
|
+
return props.label;
|
|
43
|
+
},
|
|
44
|
+
get description() {
|
|
45
|
+
return props.description;
|
|
46
|
+
},
|
|
47
|
+
get error() {
|
|
48
|
+
return props.error;
|
|
49
|
+
},
|
|
50
|
+
get required() {
|
|
51
|
+
return props.required;
|
|
52
|
+
},
|
|
53
|
+
get disabled() {
|
|
54
|
+
return props.disabled;
|
|
55
|
+
},
|
|
56
|
+
get children() {
|
|
57
|
+
var _el$ = _$getNextElement(_tmpl$);
|
|
58
|
+
var _ref$ = group;
|
|
59
|
+
typeof _ref$ === "function" ? _$use(_ref$, _el$) : group = _el$;
|
|
60
|
+
_$insert(_el$, _$createComponent(For, {
|
|
61
|
+
get each() {
|
|
62
|
+
return props.options;
|
|
63
|
+
},
|
|
64
|
+
children: (option, index) => (() => {
|
|
65
|
+
var _el$2 = _$getNextElement(_tmpl$2);
|
|
66
|
+
_el$2.$$keydown = event => {
|
|
67
|
+
const target = radioKeyTarget(event.key, index(), props.options.length);
|
|
68
|
+
if (target === undefined) return;
|
|
69
|
+
event.preventDefault();
|
|
70
|
+
choose(target, true);
|
|
71
|
+
};
|
|
72
|
+
_el$2.$$click = () => choose(index());
|
|
73
|
+
_$effect(_p$ => {
|
|
74
|
+
var _v$5 = option.color,
|
|
75
|
+
_v$6 = value() === option.value,
|
|
76
|
+
_v$7 = option.label,
|
|
77
|
+
_v$8 = option.label,
|
|
78
|
+
_v$9 = props.disabled,
|
|
79
|
+
_v$0 = tabStop(option, index()) ? 0 : -1;
|
|
80
|
+
_v$5 !== _p$.e && _$setStyleProperty(_el$2, "--k2b-color-choice", _p$.e = _v$5);
|
|
81
|
+
_v$6 !== _p$.t && _$setAttribute(_el$2, "aria-checked", _p$.t = _v$6);
|
|
82
|
+
_v$7 !== _p$.a && _$setAttribute(_el$2, "aria-label", _p$.a = _v$7);
|
|
83
|
+
_v$8 !== _p$.o && _$setAttribute(_el$2, "title", _p$.o = _v$8);
|
|
84
|
+
_v$9 !== _p$.i && _$setProperty(_el$2, "disabled", _p$.i = _v$9);
|
|
85
|
+
_v$0 !== _p$.n && _$setAttribute(_el$2, "tabindex", _p$.n = _v$0);
|
|
86
|
+
return _p$;
|
|
87
|
+
}, {
|
|
88
|
+
e: undefined,
|
|
89
|
+
t: undefined,
|
|
90
|
+
a: undefined,
|
|
91
|
+
o: undefined,
|
|
92
|
+
i: undefined,
|
|
93
|
+
n: undefined
|
|
94
|
+
});
|
|
95
|
+
_$runHydrationEvents();
|
|
96
|
+
return _el$2;
|
|
97
|
+
})()
|
|
98
|
+
}));
|
|
99
|
+
_$effect(_p$ => {
|
|
100
|
+
var _v$ = props.label ? undefined : props["aria-label"],
|
|
101
|
+
_v$2 = props.label ? meta.labelId : undefined,
|
|
102
|
+
_v$3 = fieldDescribedBy(meta, props),
|
|
103
|
+
_v$4 = props.disabled ? "true" : undefined;
|
|
104
|
+
_v$ !== _p$.e && _$setAttribute(_el$, "aria-label", _p$.e = _v$);
|
|
105
|
+
_v$2 !== _p$.t && _$setAttribute(_el$, "aria-labelledby", _p$.t = _v$2);
|
|
106
|
+
_v$3 !== _p$.a && _$setAttribute(_el$, "aria-describedby", _p$.a = _v$3);
|
|
107
|
+
_v$4 !== _p$.o && _$setAttribute(_el$, "aria-disabled", _p$.o = _v$4);
|
|
108
|
+
return _p$;
|
|
109
|
+
}, {
|
|
110
|
+
e: undefined,
|
|
111
|
+
t: undefined,
|
|
112
|
+
a: undefined,
|
|
113
|
+
o: undefined
|
|
114
|
+
});
|
|
115
|
+
return _el$;
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
_$delegateEvents(["click", "keydown"]);
|
|
120
|
+
//# sourceMappingURL=ColorChoices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/ColorChoices.tsx"],"sourcesContent":["import { For, type JSX } from \"solid-js\";\nimport { createFieldMeta, Field, fieldDescribedBy } from \"../internal/field\";\nimport { radioKeyTarget } from \"../internal/radio-keys\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { resolveMaybeAccessor } from \"./field-contract\";\n\nexport type ColorChoiceOption<T extends string = string> = {\n value: T;\n /** The colour's name; screen readers and the tooltip use it, so colour is never the only signal. */\n label: string;\n /** Any CSS colour. */\n color: string;\n};\n\nexport type ColorChoicesProps<T extends string = string> = Omit<ValueFieldProps<T | null>, \"onValueChange\" | \"onValueCommit\"> & {\n options: readonly ColorChoiceOption<T>[];\n onValueChange?: (value: T) => void;\n onValueCommit?: (value: T) => void;\n};\n\n/**\n * A labeled single choice from a fixed palette of named colours, shown as round swatches. Use `ColorInput` when any\n * colour is allowed.\n */\nexport function ColorChoices<T extends string = string>(props: ColorChoicesProps<T>): JSX.Element {\n const meta = createFieldMeta(props.id);\n let group: HTMLDivElement | undefined;\n const value = () => resolveMaybeAccessor(props.value) ?? null;\n const tabStop = (option: ColorChoiceOption<T>, index: number) =>\n value() === option.value || (index === 0 && !props.options.some((candidate) => candidate.value === value()));\n const choose = (index: number, focus = false) => {\n const option = props.options[index];\n if (!option || props.disabled) return;\n props.onValueChange?.(option.value);\n props.onValueCommit?.(option.value);\n // The radios in their current DOM order: options may have been reordered since they rendered.\n if (focus) queueMicrotask(() => group?.querySelectorAll<HTMLButtonElement>('[role=\"radio\"]')[index]?.focus());\n };\n return (\n <Field\n meta={meta}\n labelFor={false}\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n required={props.required}\n disabled={props.disabled}\n >\n <div\n class=\"k2b-color-choices__group\"\n ref={group}\n role=\"radiogroup\"\n aria-label={props.label ? undefined : props[\"aria-label\"]}\n aria-labelledby={props.label ? meta.labelId : undefined}\n aria-describedby={fieldDescribedBy(meta, props)}\n aria-disabled={props.disabled ? \"true\" : undefined}\n >\n <For each={props.options}>\n {(option, index) => (\n <button\n type=\"button\"\n role=\"radio\"\n class=\"k2b-color-choices__swatch\"\n style={{ \"--k2b-color-choice\": option.color }}\n aria-checked={value() === option.value}\n aria-label={option.label}\n title={option.label}\n disabled={props.disabled}\n tabIndex={tabStop(option, index()) ? 0 : -1}\n onClick={() => choose(index())}\n onKeyDown={(event) => {\n const target = radioKeyTarget(event.key, index(), props.options.length);\n if (target === undefined) return;\n event.preventDefault();\n choose(target, true);\n }}\n >\n <i class=\"ti ti-check\" aria-hidden=\"true\" />\n </button>\n )}\n </For>\n </div>\n </Field>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|