@kerfjs/ui 5.0.0-beta.60 → 5.0.0-beta.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/ai/component-catalog.json +141 -24
- package/ai/component-composition-rules.json +8 -0
- package/ai/component-composition.d.ts +10 -0
- package/ai/component-composition.json +117 -8
- package/ai/component-composition.schema.json +21 -0
- package/ai/components/README.md +5 -4
- package/ai/components/chip.md +72 -0
- package/ai/components/grid.md +10 -7
- package/ai/components/list-item.md +10 -7
- package/ai/components/pane.md +3 -2
- package/ai/components/select.md +6 -2
- package/ai/components/tabs.md +8 -4
- package/ai/components/toolbar-text.md +2 -1
- package/ai/components/toolbar.md +3 -2
- package/ai/public-api-signatures-v1.md +116 -24
- package/ai/skill.md +24 -4
- package/ai/webawesome-jsx-signatures-v1.md +1 -1
- package/dist/app-tab.d.ts +12 -2
- package/dist/app-tab.js +1 -1
- package/dist/browser/chip.js +3 -0
- package/dist/catalog.js +8 -8
- package/dist/chip.d.ts +29 -0
- package/dist/chip.js +3 -0
- package/dist/chip.js.map +1 -0
- package/dist/{chunk-WPLIO5WJ.js → chunk-4MG3KXJM.js} +40 -5
- package/dist/chunk-4MG3KXJM.js.map +1 -0
- package/dist/{chunk-F7F7KRO2.js → chunk-4SQK27MR.js} +33 -18
- package/dist/chunk-4SQK27MR.js.map +1 -0
- package/dist/chunk-EAC4CDY7.js +57 -0
- package/dist/chunk-EAC4CDY7.js.map +1 -0
- package/dist/{chunk-T57AXDFM.js → chunk-ENGVYQPG.js} +4 -3
- package/dist/chunk-ENGVYQPG.js.map +1 -0
- package/dist/{chunk-5PESG2VP.js → chunk-KYDDCJXU.js} +4 -3
- package/dist/chunk-KYDDCJXU.js.map +1 -0
- package/dist/{chunk-MERWRTBG.js → chunk-N2DRU35S.js} +1 -1
- package/dist/chunk-N2DRU35S.js.map +1 -0
- package/dist/{chunk-EZVNC4J6.js → chunk-OD2VXAPL.js} +4 -1
- package/dist/chunk-OD2VXAPL.js.map +1 -0
- package/dist/{chunk-T66UNBXL.js → chunk-Q6YU3BT7.js} +11 -2
- package/dist/chunk-Q6YU3BT7.js.map +1 -0
- package/dist/{chunk-N3GKMPDW.js → chunk-RKTTF3L4.js} +3 -1
- package/dist/chunk-RKTTF3L4.js.map +1 -0
- package/dist/chunk-SWVW56CV.js +188 -0
- package/dist/chunk-SWVW56CV.js.map +1 -0
- package/dist/{chunk-46263QLK.js → chunk-UA6JW52D.js} +53 -7
- package/dist/chunk-UA6JW52D.js.map +1 -0
- package/dist/{chunk-AGXQQFKZ.js → chunk-UCKKT6KO.js} +13 -4
- package/dist/chunk-UCKKT6KO.js.map +1 -0
- package/dist/{chunk-3SXMEK3B.js → chunk-V3DX3K65.js} +1 -1
- package/dist/chunk-V3DX3K65.js.map +1 -0
- package/dist/{chunk-UWONG4QE.js → chunk-VCBTX62E.js} +11 -3
- package/dist/chunk-VCBTX62E.js.map +1 -0
- package/dist/{chunk-2OXQHM7I.js → chunk-X6ADHJNI.js} +45 -20
- package/dist/chunk-X6ADHJNI.js.map +1 -0
- package/dist/collapsible-panel.js +2 -2
- package/dist/grid.d.ts +13 -5
- package/dist/grid.js +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.js +17 -16
- package/dist/list-item.d.ts +11 -1
- package/dist/list-item.js +1 -1
- package/dist/nav-stack.d.ts +3 -1
- package/dist/nav-stack.js +1 -1
- package/dist/pane.d.ts +8 -3
- package/dist/pane.js +1 -1
- package/dist/popup-menu.d.ts +2 -2
- package/dist/popup-menu.js +1 -1
- package/dist/select-register.js +46 -0
- package/dist/select-register.js.map +1 -1
- package/dist/select.d.ts +16 -0
- package/dist/select.js +1 -1
- package/dist/split-view.d.ts +1 -1
- package/dist/split-view.js +1 -1
- package/dist/styles/app-tab.css +119 -0
- package/dist/styles/chip.css +118 -0
- package/dist/styles/grid.css +7 -0
- package/dist/styles/list-item.css +14 -9
- package/dist/styles/nav-stack.css +13 -0
- package/dist/styles/pane.css +33 -0
- package/dist/styles/popup-menu.css +2 -1
- package/dist/styles/resizable-region.css +9 -0
- package/dist/styles/segmented-control.css +2 -1
- package/dist/styles/select.css +45 -0
- package/dist/styles/split-view.css +6 -0
- package/dist/styles/styles.css +1 -0
- package/dist/styles/tab-bar.css +3 -0
- package/dist/styles/tab-scaffold.css +13 -0
- package/dist/styles/toolbar-text.css +15 -6
- package/dist/styles/toolbar.css +15 -5
- package/dist/styles/workbench.css +117 -93
- package/dist/tab-bar.d.ts +6 -2
- package/dist/tab-bar.js +1 -1
- package/dist/tab-scaffold.d.ts +3 -0
- package/dist/tab-scaffold.js +1 -0
- package/dist/tab-scaffold.js.map +1 -1
- package/dist/{token-search-field-CCke1yvQ.d.ts → token-search-field-DvgFLhLL.d.ts} +6 -2
- package/dist/token-search-field.d.ts +1 -1
- package/dist/token-search-model.d.ts +1 -1
- package/dist/token-search-model.js +1 -1
- package/dist/toolbar-text.d.ts +1 -1
- package/dist/toolbar-text.js +1 -1
- package/dist/toolbar.d.ts +2 -2
- package/dist/toolbar.js +1 -1
- package/dist/wire-catalog.js +1 -1
- package/dist/wire-tab-bars.js +1 -1
- package/dist/wire-token-search-fields.d.ts +1 -1
- package/dist/workbench.js +1 -1
- package/docs/accessibility.md +29 -3
- package/docs/collapsible-panel.md +4 -3
- package/docs/component-contract.md +5 -0
- package/docs/component-selection.md +92 -11
- package/docs/design/templates/segmented-control/equal-dark.svg +1 -1
- package/docs/design/templates/segmented-control/equal.svg +1 -1
- package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -1
- package/docs/design/templates/segmented-control/pill-small.svg +1 -1
- package/docs/design/templates/segmented-control-dark.svg +1 -1
- package/docs/design/templates/segmented-control.svg +1 -1
- package/docs/layout.md +51 -9
- package/docs/nav-stack.md +5 -0
- package/docs/split-view.md +5 -0
- package/docs/sunken-panel.md +12 -0
- package/docs/tab-scaffold.md +5 -0
- package/docs/webawesome-theme.md +62 -0
- package/docs/workbench.md +22 -10
- package/llms.txt +40 -8
- package/package.json +7 -1
- package/dist/chunk-2OXQHM7I.js.map +0 -1
- package/dist/chunk-3SXMEK3B.js.map +0 -1
- package/dist/chunk-46263QLK.js.map +0 -1
- package/dist/chunk-5I7OHCIP.js +0 -96
- package/dist/chunk-5I7OHCIP.js.map +0 -1
- package/dist/chunk-5PESG2VP.js.map +0 -1
- package/dist/chunk-AGXQQFKZ.js.map +0 -1
- package/dist/chunk-EZVNC4J6.js.map +0 -1
- package/dist/chunk-F7F7KRO2.js.map +0 -1
- package/dist/chunk-MERWRTBG.js.map +0 -1
- package/dist/chunk-N3GKMPDW.js.map +0 -1
- package/dist/chunk-T57AXDFM.js.map +0 -1
- package/dist/chunk-T66UNBXL.js.map +0 -1
- package/dist/chunk-UWONG4QE.js.map +0 -1
- package/dist/chunk-WPLIO5WJ.js.map +0 -1
package/dist/select-register.js
CHANGED
|
@@ -11,6 +11,51 @@ import { WaAfterShowEvent } from '@awesome.me/webawesome/dist/events/after-show.
|
|
|
11
11
|
import { WaHideEvent } from '@awesome.me/webawesome/dist/events/hide.js';
|
|
12
12
|
import { WaShowEvent } from '@awesome.me/webawesome/dist/events/show.js';
|
|
13
13
|
|
|
14
|
+
// src/install-select-actions.ts
|
|
15
|
+
function runSelectAction(host, action) {
|
|
16
|
+
if (host.disabled || !host.multiple) return false;
|
|
17
|
+
const enabled = host.getAllOptions().filter((option) => !option.disabled);
|
|
18
|
+
const next = action === "all" ? enabled : [];
|
|
19
|
+
const current = host.selectedOptions;
|
|
20
|
+
if (current.length === next.length && current.every((option) => next.includes(option)))
|
|
21
|
+
return false;
|
|
22
|
+
host.hasInteracted = true;
|
|
23
|
+
host.valueHasChanged = true;
|
|
24
|
+
host.setSelectedOptions(next);
|
|
25
|
+
void host.updateComplete.then(() => {
|
|
26
|
+
host.dispatchEvent(
|
|
27
|
+
new InputEvent("input", { bubbles: true, composed: true })
|
|
28
|
+
);
|
|
29
|
+
host.dispatchEvent(new Event("change", { bubbles: true, composed: true }));
|
|
30
|
+
});
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
var installedDocuments = /* @__PURE__ */ new WeakSet();
|
|
34
|
+
function installSelectActions(doc = document) {
|
|
35
|
+
if (installedDocuments.has(doc)) return;
|
|
36
|
+
installedDocuments.add(doc);
|
|
37
|
+
doc.addEventListener("keydown", (event) => {
|
|
38
|
+
if (event.key === "Escape" || event.key === "Tab") return;
|
|
39
|
+
if (!(event.target instanceof Element)) return;
|
|
40
|
+
const button = event.target.closest("button[data-select-action]");
|
|
41
|
+
if (button?.closest('wa-select[data-component="select"]'))
|
|
42
|
+
event.stopImmediatePropagation();
|
|
43
|
+
});
|
|
44
|
+
doc.addEventListener("click", (event) => {
|
|
45
|
+
if (!(event.target instanceof Element)) return;
|
|
46
|
+
const button = event.target.closest(
|
|
47
|
+
"button[data-select-action]"
|
|
48
|
+
);
|
|
49
|
+
if (!button || button.hasAttribute("disabled")) return;
|
|
50
|
+
const host = button.closest(
|
|
51
|
+
'wa-select[data-component="select"]'
|
|
52
|
+
);
|
|
53
|
+
if (!host) return;
|
|
54
|
+
const action = button.dataset.selectAction;
|
|
55
|
+
if (action === "all" || action === "clear") runSelectAction(host, action);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
14
59
|
// src/animate-select-popup.ts
|
|
15
60
|
function animateSelectPopup(popup, phase, signal) {
|
|
16
61
|
return new Promise((resolve) => {
|
|
@@ -197,6 +242,7 @@ function installSelectMultiple(selectPrototype, optionPrototype) {
|
|
|
197
242
|
// src/select-register.ts
|
|
198
243
|
installSelectLifecycle(WaSelect.prototype);
|
|
199
244
|
installSelectMultiple(WaSelect.prototype, WaOption.prototype);
|
|
245
|
+
installSelectActions();
|
|
200
246
|
installHelpTags();
|
|
201
247
|
var selectElementsRegistered = true;
|
|
202
248
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/animate-select-popup.ts","../src/install-select-lifecycle.ts","../src/install-select-multiple.ts","../src/select-register.ts"],"names":["option"],"mappings":"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","file":"select-register.js","sourcesContent":["/** Run one native Select CSS animation; a reversal owns cancellation and cleanup. */\nexport function animateSelectPopup(\n popup: HTMLElement,\n phase: 'show' | 'hide',\n signal: AbortSignal,\n): Promise<void> {\n return new Promise((resolve) => {\n let settled = false;\n let frame = 0;\n const finish = () => {\n if (settled) return;\n settled = true;\n window.cancelAnimationFrame(frame);\n signal.removeEventListener('abort', finish);\n popup.classList.remove(phase);\n resolve();\n };\n signal.addEventListener('abort', finish, { once: true });\n popup.classList.add(phase);\n // Activation renders asynchronously. Check for reduced/absent motion only\n // after the native popup has had its normal render opportunity.\n frame = window.requestAnimationFrame(() => {\n // Observe these exact animations. An old CSS animationcancel event can\n // arrive after the next phase starts and must not finish that new phase.\n void Promise.all(\n popup\n .getAnimations()\n .map((animation) => animation.finished.catch(() => undefined)),\n ).then(finish);\n });\n if (signal.aborted) finish();\n });\n}\n","import type WaSelect from '@awesome.me/webawesome/dist/components/select/select.js';\nimport { WaAfterHideEvent } from '@awesome.me/webawesome/dist/events/after-hide.js';\nimport { WaAfterShowEvent } from '@awesome.me/webawesome/dist/events/after-show.js';\nimport { WaHideEvent } from '@awesome.me/webawesome/dist/events/hide.js';\nimport { WaShowEvent } from '@awesome.me/webawesome/dist/events/show.js';\n\nimport { animateSelectPopup } from './animate-select-popup.js';\n\n// Web Awesome 3.12/3.13 expose the lifecycle method but not these helper types.\n// Keep this integration boundary local: native option selection, dismissal\n// listeners, popup positioning and rendering remain owned by Web Awesome.\ninterface SelectHost extends Pick<\n WaSelect,\n | 'open'\n | 'disabled'\n | 'isConnected'\n | 'dataset'\n | 'popup'\n | 'listbox'\n | 'currentOption'\n | 'selectedOptions'\n | 'dispatchEvent'\n | 'handleOpenChange'\n | 'updateComplete'\n> {\n getFirstOption(): WaSelect['currentOption'];\n setCurrentOption(option: WaSelect['currentOption']): void;\n addOpenListeners(): void;\n removeOpenListeners(): void;\n}\n\n/** Install once at the explicit registration boundary, only for Kerf Selects. */\nexport function installSelectLifecycle(\n prototype: Pick<WaSelect, 'handleOpenChange' | 'handleDisabledChange'>,\n): void {\n const installed = Symbol.for('@kerfjs/ui/select-lifecycle');\n if (Object.prototype.hasOwnProperty.call(prototype, installed)) return;\n Object.defineProperty(prototype, installed, { value: true });\n const original = prototype.handleOpenChange;\n const originalDisabled = prototype.handleDisabledChange;\n prototype.handleDisabledChange = function () {\n const host = this as unknown as SelectHost;\n const wasOpen = host.open;\n originalDisabled.call(this);\n // WA's disabled watcher runs after its open watcher in the same Lit update.\n // Its open=false mutation otherwise misses the open lifecycle altogether.\n if (host.dataset.component === 'select' && wasOpen && !host.open) {\n void host.handleOpenChange();\n }\n };\n const transitions = new WeakMap<SelectHost, AbortController>();\n const restorations = new WeakMap<SelectHost, { open: boolean }>();\n prototype.handleOpenChange = async function () {\n const host = this as unknown as SelectHost;\n if (host.dataset.component !== 'select') return original.call(this);\n const restoring = restorations.get(host)?.open === host.open;\n restorations.delete(host);\n if (restoring) return;\n const transition = new AbortController();\n const opening = host.open && !host.disabled;\n const current = () =>\n !transition.signal.aborted &&\n host.isConnected &&\n (host.open && !host.disabled) === opening;\n try {\n if (!host.isConnected) return;\n if (opening) {\n host.setCurrentOption(host.selectedOptions[0] || host.getFirstOption());\n }\n const event = opening ? new WaShowEvent() : new WaHideEvent();\n host.dispatchEvent(event);\n if (event.defaultPrevented) {\n // Restore the accepted state without emitting the opposite transition.\n // Clear at the update checkpoint too: Lit can coalesce a restoration.\n host.open = !opening;\n const restoration = { open: host.open };\n restorations.set(host, restoration);\n void host.updateComplete.then(() => {\n if (restorations.get(host) === restoration) restorations.delete(host);\n });\n return;\n }\n // A consumer can reverse the request synchronously in a lifecycle event.\n if (!current()) return;\n // A rejected reversal must not cancel the previously accepted animation.\n transitions.get(host)?.abort();\n transitions.set(host, transition);\n if (opening) {\n host.addOpenListeners();\n host.listbox.hidden = false;\n host.popup.active = true;\n window.requestAnimationFrame(() => {\n if (current()) host.setCurrentOption(host.currentOption);\n });\n } else {\n host.removeOpenListeners();\n }\n await animateSelectPopup(\n host.popup.popup,\n opening ? 'show' : 'hide',\n transition.signal,\n );\n if (!transition.signal.aborted && !host.isConnected) {\n host.removeOpenListeners();\n host.listbox.hidden = true;\n host.popup.active = false;\n }\n if (!current()) return;\n if (opening) {\n // Match native vertical, immediate option reveal without scrolling an\n // ancestor page or moving focus after animation completion.\n const option = host.currentOption;\n if (option) {\n const list = host.listbox;\n const offset = Math.round(\n option.getBoundingClientRect().top -\n list.getBoundingClientRect().top,\n );\n if (offset < 0)\n list.scrollTo({ top: list.scrollTop + offset, behavior: 'auto' });\n else if (offset + option.clientHeight > list.offsetHeight) {\n list.scrollTo({\n top:\n list.scrollTop +\n offset -\n list.offsetHeight +\n option.clientHeight,\n behavior: 'auto',\n });\n }\n }\n host.dispatchEvent(new WaAfterShowEvent());\n } else {\n host.listbox.hidden = true;\n host.popup.active = false;\n host.dispatchEvent(new WaAfterHideEvent());\n }\n } finally {\n if (transitions.get(host) === transition) transitions.delete(host);\n }\n };\n}\n","// Web Awesome's multiple select keeps its popup open while choices toggle and\n// closes on an outside press, Escape, or focus leaving; Kerf keeps that\n// behavior. This boundary adapts the rest to Kerf's rendering model, only for\n// Kerf Selects (`data-component=\"select\"`):\n// - the closed control summarizes the chosen labels instead of drawing a\n// removable tag per choice or a \"N options selected\" count; an icon-only\n// trigger (whose value text is hidden) ends its accessible name with that\n// summary instead;\n// - the rendered `selected` attributes are the controlled value, so a\n// re-render that changes them updates the selection (Web Awesome otherwise\n// reads them only until the first interaction).\n\ninterface MultipleOption extends HTMLElement {\n value: string;\n label: string;\n selected: boolean;\n defaultSelected: boolean;\n}\n\ninterface MultipleSelectHost extends HTMLElement {\n multiple: boolean;\n hasUpdated: boolean;\n displayLabel: string;\n value: string | string[] | null;\n selectedOptions: MultipleOption[];\n getAllOptions(): MultipleOption[];\n selectionChanged(): void;\n}\n\ninterface SelectPrototype {\n selectionChanged(this: MultipleSelectHost): void;\n}\n\ninterface OptionPrototype {\n syncDefaultSelected(this: MultipleOption): void;\n}\n\nfunction kerfMultiple(host: Element | null): host is MultipleSelectHost {\n return (\n host instanceof HTMLElement &&\n host.dataset.component === 'select' &&\n (host as MultipleSelectHost).multiple\n );\n}\n\nfunction listLocale(host: HTMLElement): string | undefined {\n const lang = host.closest<HTMLElement>('[lang]')?.lang;\n return lang || undefined;\n}\n\n/** The closed-control text: chosen labels in choice order, as a short list. */\nfunction summarizeSelection(\n labels: readonly string[],\n locale?: string,\n): string {\n if (labels.length === 0) return '';\n try {\n return new Intl.ListFormat(locale, {\n type: 'unit',\n style: 'short',\n }).format(labels);\n } catch {\n return labels.join(', ');\n }\n}\n\n/** Install once at the explicit registration boundary, only for Kerf Selects. */\nexport function installSelectMultiple(\n selectPrototype: object,\n optionPrototype: object,\n): void {\n const installed = Symbol.for('@kerfjs/ui/select-multiple');\n if (Object.prototype.hasOwnProperty.call(selectPrototype, installed)) return;\n Object.defineProperty(selectPrototype, installed, { value: true });\n\n const select = selectPrototype as SelectPrototype;\n const selectionChanged = select.selectionChanged;\n select.selectionChanged = function () {\n selectionChanged.call(this);\n if (!kerfMultiple(this)) return;\n const chosen = new Set(this.selectedOptions);\n const summary = summarizeSelection(\n this.getAllOptions()\n .filter((option) => chosen.has(option))\n .map((option) => option.label),\n listLocale(this),\n );\n const nameSummary = this.querySelector(\n ':scope > [slot=\"label\"] > .kui-select__name-summary',\n );\n if (this.dataset.selectedPresentation === 'icon-only' && nameSummary) {\n // An icon-only trigger carries the summary in its accessible name, so\n // the (visually hidden) value stays empty rather than repeating it.\n nameSummary.textContent = summary ? `: ${summary}` : '';\n this.displayLabel = '';\n return;\n }\n this.displayLabel = summary;\n };\n\n // The summary replaces Web Awesome's per-choice tags.\n const tags = Object.getOwnPropertyDescriptor(selectPrototype, 'tags');\n if (tags?.get) {\n const getTags = tags.get;\n Object.defineProperty(selectPrototype, 'tags', {\n configurable: true,\n get(this: MultipleSelectHost) {\n return kerfMultiple(this) ? [] : getTags.call(this);\n },\n });\n }\n\n const option = optionPrototype as OptionPrototype;\n const syncDefaultSelected = option.syncDefaultSelected;\n option.syncDefaultSelected = function () {\n const host: Element | null = this.closest('[data-component=\"select\"]');\n if (!kerfMultiple(host) || !host.hasUpdated) {\n syncDefaultSelected.call(this);\n return;\n }\n // A re-render changed which options carry `selected`: that is the new\n // controlled value, whether or not the person has interacted.\n host.value = host\n .getAllOptions()\n .filter((candidate) => candidate.hasAttribute('selected'))\n .map((candidate) => candidate.value);\n };\n}\n","import '@awesome.me/webawesome/dist/components/button/button.js';\nimport '@awesome.me/webawesome/dist/components/divider/divider.js';\nimport '@awesome.me/webawesome/dist/components/dropdown/dropdown.js';\nimport '@awesome.me/webawesome/dist/components/dropdown-item/dropdown-item.js';\nimport '@awesome.me/webawesome/dist/components/tooltip/tooltip.js';\n\nimport WaOption from '@awesome.me/webawesome/dist/components/option/option.js';\nimport WaSelect from '@awesome.me/webawesome/dist/components/select/select.js';\n\nimport { installHelpTags } from './install-help-tag.js';\nimport { installSelectLifecycle } from './install-select-lifecycle.js';\nimport { installSelectMultiple } from './install-select-multiple.js';\n\ninstallSelectLifecycle(WaSelect.prototype);\ninstallSelectMultiple(WaSelect.prototype, WaOption.prototype);\ninstallHelpTags();\n\n/**\n * Marker export for tests and tooling; importing this module performs registration.\n * Registers both the `Select` elements and the `Catalog` related-entries popup-menu\n * elements (`wa-dropdown` / `wa-dropdown-item` / `wa-button`).\n */\nexport const selectElementsRegistered = true;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/install-select-actions.ts","../src/animate-select-popup.ts","../src/install-select-lifecycle.ts","../src/install-select-multiple.ts","../src/select-register.ts"],"names":["option"],"mappings":"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","file":"select-register.js","sourcesContent":["type SelectAction = 'all' | 'clear';\n\ninterface SelectActionOption extends HTMLElement {\n disabled: boolean;\n}\n\ninterface SelectActionHost extends HTMLElement {\n multiple: boolean;\n disabled: boolean;\n hasInteracted: boolean;\n valueHasChanged: boolean;\n selectedOptions: SelectActionOption[];\n updateComplete: Promise<unknown>;\n getAllOptions(): SelectActionOption[];\n setSelectedOptions(options: SelectActionOption[]): void;\n}\n\n/** Apply one footer action through Web Awesome's ordinary selection path. */\nexport function runSelectAction(\n host: SelectActionHost,\n action: SelectAction,\n): boolean {\n if (host.disabled || !host.multiple) return false;\n const enabled = host.getAllOptions().filter((option) => !option.disabled);\n const next = action === 'all' ? enabled : [];\n const current = host.selectedOptions;\n if (\n current.length === next.length &&\n current.every((option) => next.includes(option))\n )\n return false;\n host.hasInteracted = true;\n host.valueHasChanged = true;\n host.setSelectedOptions(next);\n void host.updateComplete.then(() => {\n host.dispatchEvent(\n new InputEvent('input', { bubbles: true, composed: true }),\n );\n host.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\n });\n return true;\n}\n\nconst installedDocuments = new WeakSet<Document>();\n\n/** Wire opt-in multiple-select footer buttons at the registration boundary. */\nexport function installSelectActions(doc: Document = document): void {\n if (installedDocuments.has(doc)) return;\n installedDocuments.add(doc);\n // Web Awesome listens for keydown on document while the popup is open. Its\n // option shortcuts would otherwise consume Enter/Space from these native\n // footer buttons before the browser can activate them.\n doc.addEventListener('keydown', (event) => {\n if (event.key === 'Escape' || event.key === 'Tab') return;\n if (!(event.target instanceof Element)) return;\n const button = event.target.closest('button[data-select-action]');\n if (button?.closest('wa-select[data-component=\"select\"]'))\n event.stopImmediatePropagation();\n });\n doc.addEventListener('click', (event) => {\n if (!(event.target instanceof Element)) return;\n const button = event.target.closest<HTMLElement>(\n 'button[data-select-action]',\n );\n if (!button || button.hasAttribute('disabled')) return;\n const host = button.closest<SelectActionHost>(\n 'wa-select[data-component=\"select\"]',\n );\n if (!host) return;\n const action = button.dataset.selectAction;\n if (action === 'all' || action === 'clear') runSelectAction(host, action);\n });\n}\n","/** Run one native Select CSS animation; a reversal owns cancellation and cleanup. */\nexport function animateSelectPopup(\n popup: HTMLElement,\n phase: 'show' | 'hide',\n signal: AbortSignal,\n): Promise<void> {\n return new Promise((resolve) => {\n let settled = false;\n let frame = 0;\n const finish = () => {\n if (settled) return;\n settled = true;\n window.cancelAnimationFrame(frame);\n signal.removeEventListener('abort', finish);\n popup.classList.remove(phase);\n resolve();\n };\n signal.addEventListener('abort', finish, { once: true });\n popup.classList.add(phase);\n // Activation renders asynchronously. Check for reduced/absent motion only\n // after the native popup has had its normal render opportunity.\n frame = window.requestAnimationFrame(() => {\n // Observe these exact animations. An old CSS animationcancel event can\n // arrive after the next phase starts and must not finish that new phase.\n void Promise.all(\n popup\n .getAnimations()\n .map((animation) => animation.finished.catch(() => undefined)),\n ).then(finish);\n });\n if (signal.aborted) finish();\n });\n}\n","import type WaSelect from '@awesome.me/webawesome/dist/components/select/select.js';\nimport { WaAfterHideEvent } from '@awesome.me/webawesome/dist/events/after-hide.js';\nimport { WaAfterShowEvent } from '@awesome.me/webawesome/dist/events/after-show.js';\nimport { WaHideEvent } from '@awesome.me/webawesome/dist/events/hide.js';\nimport { WaShowEvent } from '@awesome.me/webawesome/dist/events/show.js';\n\nimport { animateSelectPopup } from './animate-select-popup.js';\n\n// Web Awesome 3.12/3.13 expose the lifecycle method but not these helper types.\n// Keep this integration boundary local: native option selection, dismissal\n// listeners, popup positioning and rendering remain owned by Web Awesome.\ninterface SelectHost extends Pick<\n WaSelect,\n | 'open'\n | 'disabled'\n | 'isConnected'\n | 'dataset'\n | 'popup'\n | 'listbox'\n | 'currentOption'\n | 'selectedOptions'\n | 'dispatchEvent'\n | 'handleOpenChange'\n | 'updateComplete'\n> {\n getFirstOption(): WaSelect['currentOption'];\n setCurrentOption(option: WaSelect['currentOption']): void;\n addOpenListeners(): void;\n removeOpenListeners(): void;\n}\n\n/** Install once at the explicit registration boundary, only for Kerf Selects. */\nexport function installSelectLifecycle(\n prototype: Pick<WaSelect, 'handleOpenChange' | 'handleDisabledChange'>,\n): void {\n const installed = Symbol.for('@kerfjs/ui/select-lifecycle');\n if (Object.prototype.hasOwnProperty.call(prototype, installed)) return;\n Object.defineProperty(prototype, installed, { value: true });\n const original = prototype.handleOpenChange;\n const originalDisabled = prototype.handleDisabledChange;\n prototype.handleDisabledChange = function () {\n const host = this as unknown as SelectHost;\n const wasOpen = host.open;\n originalDisabled.call(this);\n // WA's disabled watcher runs after its open watcher in the same Lit update.\n // Its open=false mutation otherwise misses the open lifecycle altogether.\n if (host.dataset.component === 'select' && wasOpen && !host.open) {\n void host.handleOpenChange();\n }\n };\n const transitions = new WeakMap<SelectHost, AbortController>();\n const restorations = new WeakMap<SelectHost, { open: boolean }>();\n prototype.handleOpenChange = async function () {\n const host = this as unknown as SelectHost;\n if (host.dataset.component !== 'select') return original.call(this);\n const restoring = restorations.get(host)?.open === host.open;\n restorations.delete(host);\n if (restoring) return;\n const transition = new AbortController();\n const opening = host.open && !host.disabled;\n const current = () =>\n !transition.signal.aborted &&\n host.isConnected &&\n (host.open && !host.disabled) === opening;\n try {\n if (!host.isConnected) return;\n if (opening) {\n host.setCurrentOption(host.selectedOptions[0] || host.getFirstOption());\n }\n const event = opening ? new WaShowEvent() : new WaHideEvent();\n host.dispatchEvent(event);\n if (event.defaultPrevented) {\n // Restore the accepted state without emitting the opposite transition.\n // Clear at the update checkpoint too: Lit can coalesce a restoration.\n host.open = !opening;\n const restoration = { open: host.open };\n restorations.set(host, restoration);\n void host.updateComplete.then(() => {\n if (restorations.get(host) === restoration) restorations.delete(host);\n });\n return;\n }\n // A consumer can reverse the request synchronously in a lifecycle event.\n if (!current()) return;\n // A rejected reversal must not cancel the previously accepted animation.\n transitions.get(host)?.abort();\n transitions.set(host, transition);\n if (opening) {\n host.addOpenListeners();\n host.listbox.hidden = false;\n host.popup.active = true;\n window.requestAnimationFrame(() => {\n if (current()) host.setCurrentOption(host.currentOption);\n });\n } else {\n host.removeOpenListeners();\n }\n await animateSelectPopup(\n host.popup.popup,\n opening ? 'show' : 'hide',\n transition.signal,\n );\n if (!transition.signal.aborted && !host.isConnected) {\n host.removeOpenListeners();\n host.listbox.hidden = true;\n host.popup.active = false;\n }\n if (!current()) return;\n if (opening) {\n // Match native vertical, immediate option reveal without scrolling an\n // ancestor page or moving focus after animation completion.\n const option = host.currentOption;\n if (option) {\n const list = host.listbox;\n const offset = Math.round(\n option.getBoundingClientRect().top -\n list.getBoundingClientRect().top,\n );\n if (offset < 0)\n list.scrollTo({ top: list.scrollTop + offset, behavior: 'auto' });\n else if (offset + option.clientHeight > list.offsetHeight) {\n list.scrollTo({\n top:\n list.scrollTop +\n offset -\n list.offsetHeight +\n option.clientHeight,\n behavior: 'auto',\n });\n }\n }\n host.dispatchEvent(new WaAfterShowEvent());\n } else {\n host.listbox.hidden = true;\n host.popup.active = false;\n host.dispatchEvent(new WaAfterHideEvent());\n }\n } finally {\n if (transitions.get(host) === transition) transitions.delete(host);\n }\n };\n}\n","// Web Awesome's multiple select keeps its popup open while choices toggle and\n// closes on an outside press, Escape, or focus leaving; Kerf keeps that\n// behavior. This boundary adapts the rest to Kerf's rendering model, only for\n// Kerf Selects (`data-component=\"select\"`):\n// - the closed control summarizes the chosen labels instead of drawing a\n// removable tag per choice or a \"N options selected\" count; an icon-only\n// trigger (whose value text is hidden) ends its accessible name with that\n// summary instead;\n// - the rendered `selected` attributes are the controlled value, so a\n// re-render that changes them updates the selection (Web Awesome otherwise\n// reads them only until the first interaction).\n\ninterface MultipleOption extends HTMLElement {\n value: string;\n label: string;\n selected: boolean;\n defaultSelected: boolean;\n}\n\ninterface MultipleSelectHost extends HTMLElement {\n multiple: boolean;\n hasUpdated: boolean;\n displayLabel: string;\n value: string | string[] | null;\n selectedOptions: MultipleOption[];\n getAllOptions(): MultipleOption[];\n selectionChanged(): void;\n}\n\ninterface SelectPrototype {\n selectionChanged(this: MultipleSelectHost): void;\n}\n\ninterface OptionPrototype {\n syncDefaultSelected(this: MultipleOption): void;\n}\n\nfunction kerfMultiple(host: Element | null): host is MultipleSelectHost {\n return (\n host instanceof HTMLElement &&\n host.dataset.component === 'select' &&\n (host as MultipleSelectHost).multiple\n );\n}\n\nfunction listLocale(host: HTMLElement): string | undefined {\n const lang = host.closest<HTMLElement>('[lang]')?.lang;\n return lang || undefined;\n}\n\n/** The closed-control text: chosen labels in choice order, as a short list. */\nfunction summarizeSelection(\n labels: readonly string[],\n locale?: string,\n): string {\n if (labels.length === 0) return '';\n try {\n return new Intl.ListFormat(locale, {\n type: 'unit',\n style: 'short',\n }).format(labels);\n } catch {\n return labels.join(', ');\n }\n}\n\n/** Install once at the explicit registration boundary, only for Kerf Selects. */\nexport function installSelectMultiple(\n selectPrototype: object,\n optionPrototype: object,\n): void {\n const installed = Symbol.for('@kerfjs/ui/select-multiple');\n if (Object.prototype.hasOwnProperty.call(selectPrototype, installed)) return;\n Object.defineProperty(selectPrototype, installed, { value: true });\n\n const select = selectPrototype as SelectPrototype;\n const selectionChanged = select.selectionChanged;\n select.selectionChanged = function () {\n selectionChanged.call(this);\n if (!kerfMultiple(this)) return;\n const chosen = new Set(this.selectedOptions);\n const summary = summarizeSelection(\n this.getAllOptions()\n .filter((option) => chosen.has(option))\n .map((option) => option.label),\n listLocale(this),\n );\n const nameSummary = this.querySelector(\n ':scope > [slot=\"label\"] > .kui-select__name-summary',\n );\n if (this.dataset.selectedPresentation === 'icon-only' && nameSummary) {\n // An icon-only trigger carries the summary in its accessible name, so\n // the (visually hidden) value stays empty rather than repeating it.\n nameSummary.textContent = summary ? `: ${summary}` : '';\n this.displayLabel = '';\n return;\n }\n this.displayLabel = summary;\n };\n\n // The summary replaces Web Awesome's per-choice tags.\n const tags = Object.getOwnPropertyDescriptor(selectPrototype, 'tags');\n if (tags?.get) {\n const getTags = tags.get;\n Object.defineProperty(selectPrototype, 'tags', {\n configurable: true,\n get(this: MultipleSelectHost) {\n return kerfMultiple(this) ? [] : getTags.call(this);\n },\n });\n }\n\n const option = optionPrototype as OptionPrototype;\n const syncDefaultSelected = option.syncDefaultSelected;\n option.syncDefaultSelected = function () {\n const host: Element | null = this.closest('[data-component=\"select\"]');\n if (!kerfMultiple(host) || !host.hasUpdated) {\n syncDefaultSelected.call(this);\n return;\n }\n // A re-render changed which options carry `selected`: that is the new\n // controlled value, whether or not the person has interacted.\n host.value = host\n .getAllOptions()\n .filter((candidate) => candidate.hasAttribute('selected'))\n .map((candidate) => candidate.value);\n };\n}\n","import '@awesome.me/webawesome/dist/components/button/button.js';\nimport '@awesome.me/webawesome/dist/components/divider/divider.js';\nimport '@awesome.me/webawesome/dist/components/dropdown/dropdown.js';\nimport '@awesome.me/webawesome/dist/components/dropdown-item/dropdown-item.js';\nimport '@awesome.me/webawesome/dist/components/tooltip/tooltip.js';\n\nimport WaOption from '@awesome.me/webawesome/dist/components/option/option.js';\nimport WaSelect from '@awesome.me/webawesome/dist/components/select/select.js';\n\nimport { installHelpTags } from './install-help-tag.js';\nimport { installSelectActions } from './install-select-actions.js';\nimport { installSelectLifecycle } from './install-select-lifecycle.js';\nimport { installSelectMultiple } from './install-select-multiple.js';\n\ninstallSelectLifecycle(WaSelect.prototype);\ninstallSelectMultiple(WaSelect.prototype, WaOption.prototype);\ninstallSelectActions();\ninstallHelpTags();\n\n/**\n * Marker export for tests and tooling; importing this module performs registration.\n * Registers both the `Select` elements and the `Catalog` related-entries popup-menu\n * elements (`wa-dropdown` / `wa-dropdown-item` / `wa-button`).\n */\nexport const selectElementsRegistered = true;\n"]}
|
package/dist/select.d.ts
CHANGED
|
@@ -18,6 +18,10 @@ interface SelectChoice<Value extends string = string> {
|
|
|
18
18
|
*/
|
|
19
19
|
color?: CssForegroundColor;
|
|
20
20
|
group?: string;
|
|
21
|
+
/** Keep an unavailable choice visible but prevent selection. */
|
|
22
|
+
disabled?: boolean;
|
|
23
|
+
/** Optional explanation exposed as the disabled option's native tooltip. */
|
|
24
|
+
disabledReason?: string;
|
|
21
25
|
/**
|
|
22
26
|
* Draw a divider between this choice and the previous choice in the same
|
|
23
27
|
* list. A group boundary is already a separator, so the first choice of a
|
|
@@ -54,6 +58,8 @@ interface SelectBaseProps<Value extends string = string> {
|
|
|
54
58
|
size?: SelectSize;
|
|
55
59
|
/** Closed trigger width; omit to keep the presentation's default. */
|
|
56
60
|
triggerWidth?: SelectTriggerWidth;
|
|
61
|
+
/** Show the disclosure caret (default); omit it for a compact icon-only trigger. */
|
|
62
|
+
caret?: boolean;
|
|
57
63
|
/** Let an enclosing ToolbarControlGroup paint the composed focus ring. */
|
|
58
64
|
focusRingOwner?: SelectFocusRingOwner;
|
|
59
65
|
/** Maximum closed-control label width in CSS pixels before ellipsis. */
|
|
@@ -69,6 +75,8 @@ interface SelectSingleValueProps<Value extends string = string> {
|
|
|
69
75
|
/** Show only the selected choice icon while retaining the Select's accessible name. */
|
|
70
76
|
selectedPresentation?: SelectSelectedPresentation;
|
|
71
77
|
triggerIcon?: never;
|
|
78
|
+
selectAllLabel?: never;
|
|
79
|
+
clearLabel?: never;
|
|
72
80
|
}
|
|
73
81
|
/**
|
|
74
82
|
* Any number of chosen values. The popup stays open while the person toggles
|
|
@@ -81,6 +89,10 @@ interface SelectMultipleLabelProps<Value extends string = string> {
|
|
|
81
89
|
renderSelected?: never;
|
|
82
90
|
selectedPresentation?: 'label';
|
|
83
91
|
triggerIcon?: never;
|
|
92
|
+
/** Opt in to a footer action that selects every enabled choice. */
|
|
93
|
+
selectAllLabel?: string;
|
|
94
|
+
/** Opt in to a footer action that clears the current selection. */
|
|
95
|
+
clearLabel?: string;
|
|
84
96
|
}
|
|
85
97
|
/**
|
|
86
98
|
* A multiple Select drawn as an icon-only toolbar trigger, such as a
|
|
@@ -99,6 +111,10 @@ interface SelectMultipleIconProps<Value extends string = string> {
|
|
|
99
111
|
* purpose (a funnel for a filter), independent of the selection.
|
|
100
112
|
*/
|
|
101
113
|
triggerIcon: KerfUiContent;
|
|
114
|
+
/** Opt in to a footer action that selects every enabled choice. */
|
|
115
|
+
selectAllLabel?: string;
|
|
116
|
+
/** Opt in to a footer action that clears the current selection. */
|
|
117
|
+
clearLabel?: string;
|
|
102
118
|
}
|
|
103
119
|
type SelectMultipleValueProps<Value extends string = string> = SelectMultipleLabelProps<Value> | SelectMultipleIconProps<Value>;
|
|
104
120
|
type SelectProps<Value extends string = string> = SelectBaseProps<Value> & SelectAccessibleName & (SelectSingleValueProps<Value> | SelectMultipleValueProps<Value>);
|
package/dist/select.js
CHANGED
package/dist/split-view.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ import * as kerfjs from 'kerfjs';
|
|
|
2
2
|
import { NavStackProps, NavStackView } from './nav-stack.js';
|
|
3
3
|
import { ResizableRegionProps } from './resizable-region.js';
|
|
4
4
|
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
5
|
-
import './toolbar.js';
|
|
6
5
|
import './pane.js';
|
|
6
|
+
import './toolbar.js';
|
|
7
7
|
import './sides-BPSWde0A.js';
|
|
8
8
|
import './toolbar-text.js';
|
|
9
9
|
import './css-values.js';
|
package/dist/split-view.js
CHANGED
package/dist/styles/app-tab.css
CHANGED
|
@@ -13,6 +13,9 @@
|
|
|
13
13
|
transparent
|
|
14
14
|
);
|
|
15
15
|
--kui-app-tab-drop-indicator: var(--kui-color-brand-border-normal);
|
|
16
|
+
--kui-app-tab-drop-target-background: var(--kui-color-brand-fill-quiet);
|
|
17
|
+
--kui-app-tab-drop-target-ring: var(--kui-color-brand-border-normal);
|
|
18
|
+
--kui-app-tab-drop-target-color: var(--kui-color-brand-on-quiet);
|
|
16
19
|
position: relative;
|
|
17
20
|
display: flex;
|
|
18
21
|
width: max-content;
|
|
@@ -26,6 +29,28 @@
|
|
|
26
29
|
align-items: center;
|
|
27
30
|
flex: none;
|
|
28
31
|
}
|
|
32
|
+
.kui-app-tab[data-pinned="true"] {
|
|
33
|
+
position: sticky;
|
|
34
|
+
z-index: 1;
|
|
35
|
+
inset-inline-start: 0;
|
|
36
|
+
background: var(
|
|
37
|
+
--kui-app-tab-pinned-background,
|
|
38
|
+
var(--_kui-app-tab-pinned-default-background, var(--kui-color-surface))
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
.kui-tab-bar[data-presentation="segmented"] .kui-app-tab[data-pinned="true"],
|
|
42
|
+
.kui-tab-bar[data-presentation="inspector"] .kui-app-tab[data-pinned="true"] {
|
|
43
|
+
--_kui-app-tab-pinned-default-background: var(
|
|
44
|
+
--kui-tab-bar-strip-background,
|
|
45
|
+
var(--kui-color-neutral-fill-quiet)
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
.kui-app-tab[data-pinned="true"]:not([data-selected="true"]):hover {
|
|
49
|
+
background: var(
|
|
50
|
+
--kui-app-tab-pinned-hover-background,
|
|
51
|
+
var(--kui-color-neutral-fill-quiet)
|
|
52
|
+
);
|
|
53
|
+
}
|
|
29
54
|
.kui-app-tab[data-size="compact"] {
|
|
30
55
|
height: 2rem;
|
|
31
56
|
}
|
|
@@ -43,6 +68,11 @@
|
|
|
43
68
|
background: var(--kui-app-tab-selected-background);
|
|
44
69
|
box-shadow: var(--kui-shadow-s);
|
|
45
70
|
}
|
|
71
|
+
.kui-app-tab[data-drop-target="true"] {
|
|
72
|
+
color: var(--kui-app-tab-drop-target-color);
|
|
73
|
+
background: var(--kui-app-tab-drop-target-background);
|
|
74
|
+
box-shadow: inset 0 0 0 2px var(--kui-app-tab-drop-target-ring);
|
|
75
|
+
}
|
|
46
76
|
.kui-app-tab[data-tab-dragging="true"] {
|
|
47
77
|
opacity: 0.55;
|
|
48
78
|
}
|
|
@@ -106,6 +136,11 @@
|
|
|
106
136
|
text-overflow: ellipsis;
|
|
107
137
|
white-space: nowrap;
|
|
108
138
|
}
|
|
139
|
+
.kui-app-tab[data-name-overflow="visible"] .kui-app-tab__name {
|
|
140
|
+
max-width: none;
|
|
141
|
+
overflow: visible;
|
|
142
|
+
text-overflow: clip;
|
|
143
|
+
}
|
|
109
144
|
.kui-app-tab[data-attention="true"] .kui-app-tab__name {
|
|
110
145
|
color: var(--kui-app-tab-attention-color, var(--kui-color-warning-on-quiet));
|
|
111
146
|
}
|
|
@@ -127,6 +162,90 @@
|
|
|
127
162
|
width: 2rem;
|
|
128
163
|
min-width: 2rem;
|
|
129
164
|
}
|
|
165
|
+
/* TabBar owns the tablist width query; AppTab owns its own responsive
|
|
166
|
+
geometry and visually hidden name. The name remains in the accessibility
|
|
167
|
+
tree, so the tab keeps its accessible name without a rerender. */
|
|
168
|
+
@container kui-tab-bar-tabs (max-width: 52rem) {
|
|
169
|
+
.kui-tab-bar[data-icon-only-at="wide"]
|
|
170
|
+
.kui-tab-bar__tabs
|
|
171
|
+
> .kui-app-tab[data-presentation="segmented"] {
|
|
172
|
+
width: 2rem;
|
|
173
|
+
min-width: 2rem;
|
|
174
|
+
flex: none;
|
|
175
|
+
}
|
|
176
|
+
.kui-tab-bar[data-icon-only-at="wide"]
|
|
177
|
+
.kui-app-tab[data-presentation="segmented"]
|
|
178
|
+
.kui-app-tab__select {
|
|
179
|
+
width: 100%;
|
|
180
|
+
justify-content: center;
|
|
181
|
+
}
|
|
182
|
+
.kui-tab-bar[data-icon-only-at="wide"]
|
|
183
|
+
.kui-app-tab[data-presentation="segmented"]
|
|
184
|
+
.kui-app-tab__name {
|
|
185
|
+
position: absolute;
|
|
186
|
+
width: 1px;
|
|
187
|
+
height: 1px;
|
|
188
|
+
padding: 0;
|
|
189
|
+
overflow: hidden;
|
|
190
|
+
clip: rect(0, 0, 0, 0);
|
|
191
|
+
white-space: nowrap;
|
|
192
|
+
clip-path: inset(50%);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
@container kui-tab-bar-tabs (max-width: 44rem) {
|
|
196
|
+
.kui-tab-bar[data-icon-only-at="narrow"]
|
|
197
|
+
.kui-tab-bar__tabs
|
|
198
|
+
> .kui-app-tab[data-presentation="segmented"] {
|
|
199
|
+
width: 2rem;
|
|
200
|
+
min-width: 2rem;
|
|
201
|
+
flex: none;
|
|
202
|
+
}
|
|
203
|
+
.kui-tab-bar[data-icon-only-at="narrow"]
|
|
204
|
+
.kui-app-tab[data-presentation="segmented"]
|
|
205
|
+
.kui-app-tab__select {
|
|
206
|
+
width: 100%;
|
|
207
|
+
justify-content: center;
|
|
208
|
+
}
|
|
209
|
+
.kui-tab-bar[data-icon-only-at="narrow"]
|
|
210
|
+
.kui-app-tab[data-presentation="segmented"]
|
|
211
|
+
.kui-app-tab__name {
|
|
212
|
+
position: absolute;
|
|
213
|
+
width: 1px;
|
|
214
|
+
height: 1px;
|
|
215
|
+
padding: 0;
|
|
216
|
+
overflow: hidden;
|
|
217
|
+
clip: rect(0, 0, 0, 0);
|
|
218
|
+
white-space: nowrap;
|
|
219
|
+
clip-path: inset(50%);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
@container kui-tab-bar-tabs (max-width: 28rem) {
|
|
223
|
+
.kui-tab-bar[data-icon-only-at="compact"]
|
|
224
|
+
.kui-tab-bar__tabs
|
|
225
|
+
> .kui-app-tab[data-presentation="segmented"] {
|
|
226
|
+
width: 2rem;
|
|
227
|
+
min-width: 2rem;
|
|
228
|
+
flex: none;
|
|
229
|
+
}
|
|
230
|
+
.kui-tab-bar[data-icon-only-at="compact"]
|
|
231
|
+
.kui-app-tab[data-presentation="segmented"]
|
|
232
|
+
.kui-app-tab__select {
|
|
233
|
+
width: 100%;
|
|
234
|
+
justify-content: center;
|
|
235
|
+
}
|
|
236
|
+
.kui-tab-bar[data-icon-only-at="compact"]
|
|
237
|
+
.kui-app-tab[data-presentation="segmented"]
|
|
238
|
+
.kui-app-tab__name {
|
|
239
|
+
position: absolute;
|
|
240
|
+
width: 1px;
|
|
241
|
+
height: 1px;
|
|
242
|
+
padding: 0;
|
|
243
|
+
overflow: hidden;
|
|
244
|
+
clip: rect(0, 0, 0, 0);
|
|
245
|
+
white-space: nowrap;
|
|
246
|
+
clip-path: inset(50%);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
130
249
|
/* In a TabBar, the tab styles itself in the context of its parent strip. A
|
|
131
250
|
segmented strip's outer ends follow the pill track: the first tab's leading
|
|
132
251
|
corners, and a filled strip's last tab's trailing corners, are pill-rounded
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
.kui-chip {
|
|
2
|
+
--_kui-chip-fill-quiet: var(--kui-color-neutral-fill-quiet);
|
|
3
|
+
--_kui-chip-fill-solid: var(--kui-color-neutral-on-normal);
|
|
4
|
+
--_kui-chip-border: var(--kui-color-neutral-border-normal);
|
|
5
|
+
--_kui-chip-on-quiet: var(--kui-color-neutral-on-quiet);
|
|
6
|
+
--_kui-chip-on-solid: var(--kui-color-surface);
|
|
7
|
+
|
|
8
|
+
display: inline-flex;
|
|
9
|
+
min-width: 0;
|
|
10
|
+
min-height: 1.75rem;
|
|
11
|
+
padding-inline: 0.5rem;
|
|
12
|
+
box-sizing: border-box;
|
|
13
|
+
border: 1px solid transparent;
|
|
14
|
+
border-radius: var(--kui-layout-pill-radius, calc(1px + 1.3125rem));
|
|
15
|
+
color: var(--_kui-chip-on-quiet);
|
|
16
|
+
background: var(--_kui-chip-fill-quiet);
|
|
17
|
+
align-items: center;
|
|
18
|
+
gap: 0.25rem;
|
|
19
|
+
font-size: var(--kui-font-xs);
|
|
20
|
+
font-weight: 650;
|
|
21
|
+
line-height: 1;
|
|
22
|
+
white-space: nowrap;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.kui-chip[data-tone="brand"] {
|
|
26
|
+
--_kui-chip-fill-quiet: var(--kui-color-brand-fill-quiet);
|
|
27
|
+
--_kui-chip-fill-solid: var(--kui-color-brand-on-fill);
|
|
28
|
+
--_kui-chip-border: var(--kui-color-brand-border-normal);
|
|
29
|
+
--_kui-chip-on-quiet: var(--kui-color-brand-on-fill);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.kui-chip[data-tone="pop"] {
|
|
33
|
+
--_kui-chip-fill-quiet: var(--kui-color-pop-fill-quiet);
|
|
34
|
+
--_kui-chip-fill-solid: var(--kui-color-pop-on-fill);
|
|
35
|
+
--_kui-chip-border: var(--kui-color-pop-border-normal);
|
|
36
|
+
--_kui-chip-on-quiet: var(--kui-color-pop-on-fill);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.kui-chip[data-tone="success"] {
|
|
40
|
+
--_kui-chip-fill-quiet: var(--kui-color-success-fill-quiet);
|
|
41
|
+
--_kui-chip-fill-solid: var(--kui-color-success-on-fill);
|
|
42
|
+
--_kui-chip-border: var(--kui-color-success-border-normal);
|
|
43
|
+
--_kui-chip-on-quiet: var(--kui-color-success-on-fill);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.kui-chip[data-tone="warning"] {
|
|
47
|
+
--_kui-chip-fill-quiet: var(--kui-color-warning-fill-quiet);
|
|
48
|
+
--_kui-chip-fill-solid: var(--kui-color-warning-on-fill);
|
|
49
|
+
--_kui-chip-border: var(--kui-color-warning-border-normal);
|
|
50
|
+
--_kui-chip-on-quiet: var(--kui-color-warning-on-fill);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.kui-chip[data-tone="danger"] {
|
|
54
|
+
--_kui-chip-fill-quiet: var(--kui-color-danger-fill-quiet);
|
|
55
|
+
--_kui-chip-fill-solid: var(--kui-color-danger-on-fill);
|
|
56
|
+
--_kui-chip-border: var(--kui-color-danger-border-normal);
|
|
57
|
+
--_kui-chip-on-quiet: var(--kui-color-danger-on-fill);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.kui-chip[data-appearance="solid"] {
|
|
61
|
+
color: var(--_kui-chip-on-solid);
|
|
62
|
+
background: var(--_kui-chip-fill-solid);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.kui-chip[data-appearance="outline"] {
|
|
66
|
+
border-color: var(--_kui-chip-border);
|
|
67
|
+
background: transparent;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.kui-chip[data-shape="rounded"] {
|
|
71
|
+
border-radius: var(--kui-radius-s);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.kui-chip[data-size="compact"] {
|
|
75
|
+
min-height: 1.25rem;
|
|
76
|
+
padding-inline: 0.3125rem;
|
|
77
|
+
font-size: var(--kui-font-2xs);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.kui-chip[data-disabled] {
|
|
81
|
+
opacity: 0.5;
|
|
82
|
+
pointer-events: none;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.kui-chip__label {
|
|
86
|
+
min-width: 0;
|
|
87
|
+
overflow: hidden;
|
|
88
|
+
text-overflow: ellipsis;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.kui-chip__remove {
|
|
92
|
+
display: inline-grid;
|
|
93
|
+
width: 1.25rem;
|
|
94
|
+
height: 1.25rem;
|
|
95
|
+
padding: 0;
|
|
96
|
+
border: 0;
|
|
97
|
+
border-radius: 50%;
|
|
98
|
+
color: inherit;
|
|
99
|
+
background: transparent;
|
|
100
|
+
align-items: center;
|
|
101
|
+
justify-items: center;
|
|
102
|
+
cursor: pointer;
|
|
103
|
+
flex: none;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.kui-chip[data-size="compact"] .kui-chip__remove {
|
|
107
|
+
width: 1rem;
|
|
108
|
+
height: 1rem;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.kui-chip__remove:hover {
|
|
112
|
+
background: color-mix(in srgb, currentColor 12%, transparent);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.kui-chip__remove:focus-visible {
|
|
116
|
+
outline: var(--kui-focus-ring);
|
|
117
|
+
outline-offset: 1px;
|
|
118
|
+
}
|
package/dist/styles/grid.css
CHANGED
|
@@ -14,6 +14,13 @@
|
|
|
14
14
|
gap: var(--_kui-grid-gap, var(--kui-grid-gap));
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
.kui-grid[data-min-column-width="true"] {
|
|
18
|
+
grid-template-columns: repeat(
|
|
19
|
+
auto-fit,
|
|
20
|
+
minmax(min(100%, var(--_kui-grid-min-column-width)), 1fr)
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
17
24
|
/* `fill`: the layout root of a definite-height parent (an app root or a
|
|
18
25
|
fixed-height frame) takes its full height. Inside a flex layout use `flex`. */
|
|
19
26
|
.kui-grid[data-fill="true"] {
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
.kui-list-item {
|
|
2
2
|
--kui-list-group-divider-color: var(--kui-color-neutral-border-quiet);
|
|
3
3
|
--kui-list-item-color: var(--kui-color-neutral-on-normal);
|
|
4
|
-
--kui-list-item-border: transparent;
|
|
5
|
-
--kui-list-item-background: transparent;
|
|
6
|
-
--kui-list-item-hover-border: var(--kui-color-neutral-border-normal);
|
|
7
4
|
--kui-list-item-hover-background: var(--kui-color-neutral-fill-quiet);
|
|
8
5
|
--kui-list-item-selected-color: var(--kui-color-neutral-on-normal);
|
|
9
|
-
--kui-list-item-selected-border: var(--kui-color-brand-border-quiet);
|
|
10
6
|
--kui-list-item-selected-background: var(--kui-color-brand-fill-normal);
|
|
11
7
|
display: grid;
|
|
12
8
|
width: calc(100% - (2 * var(--kui-layout-inline-margin, 0.5rem)));
|
|
@@ -23,19 +19,20 @@
|
|
|
23
19
|
);
|
|
24
20
|
box-sizing: border-box;
|
|
25
21
|
border: var(--kui-list-item-border-width, 1px) solid
|
|
26
|
-
var(--kui-list-item-border);
|
|
22
|
+
var(--kui-list-item-border, transparent);
|
|
27
23
|
border-radius: var(
|
|
28
24
|
--kui-list-item-radius,
|
|
29
25
|
var(--kui-layout-rounded-radius, calc(1px + 0.6875rem))
|
|
30
26
|
);
|
|
31
27
|
color: var(--kui-list-item-color);
|
|
32
|
-
background: var(--kui-list-item-background);
|
|
28
|
+
background: var(--kui-list-item-background, transparent);
|
|
33
29
|
cursor: pointer;
|
|
34
30
|
grid-template-columns: var(--kui-list-item-columns, minmax(0, 1fr) auto);
|
|
35
31
|
align-items: var(--kui-list-item-align-items, center);
|
|
36
32
|
column-gap: var(--kui-list-item-gap, var(--kui-layout-item-gap, 0.5rem));
|
|
37
33
|
font: inherit;
|
|
38
34
|
text-align: start;
|
|
35
|
+
text-decoration: none;
|
|
39
36
|
}
|
|
40
37
|
|
|
41
38
|
.kui-list-item[data-density="compact"] {
|
|
@@ -98,7 +95,10 @@
|
|
|
98
95
|
}
|
|
99
96
|
|
|
100
97
|
.kui-list-item:hover:not([data-placeholder="true"]) {
|
|
101
|
-
border-color: var(
|
|
98
|
+
border-color: var(
|
|
99
|
+
--kui-list-item-hover-border,
|
|
100
|
+
var(--kui-color-neutral-border-normal)
|
|
101
|
+
);
|
|
102
102
|
background: var(--kui-list-item-hover-background);
|
|
103
103
|
}
|
|
104
104
|
|
|
@@ -112,13 +112,18 @@
|
|
|
112
112
|
opacity: 0.58;
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
.kui-list-item:disabled
|
|
115
|
+
.kui-list-item:is(:disabled, [aria-disabled="true"]):not(
|
|
116
|
+
[data-placeholder="true"]
|
|
117
|
+
) {
|
|
116
118
|
cursor: not-allowed;
|
|
117
119
|
}
|
|
118
120
|
|
|
119
121
|
.kui-list-item[aria-current="page"],
|
|
120
122
|
.kui-list-item[aria-pressed="true"] {
|
|
121
|
-
border-color: var(
|
|
123
|
+
border-color: var(
|
|
124
|
+
--kui-list-item-selected-border,
|
|
125
|
+
var(--kui-color-brand-border-quiet)
|
|
126
|
+
);
|
|
122
127
|
color: var(--kui-list-item-selected-color);
|
|
123
128
|
background: var(--kui-list-item-selected-background);
|
|
124
129
|
font-weight: 650;
|
|
@@ -100,6 +100,13 @@
|
|
|
100
100
|
inset: 0;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
+
.kui-nav-stack__view[data-appearance="sunken"] {
|
|
104
|
+
background: var(
|
|
105
|
+
--kui-sunken-panel-background,
|
|
106
|
+
var(--kui-color-surface-lowered)
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
|
|
103
110
|
/* Each view is its region's scroll owner: block insets become padding inside
|
|
104
111
|
the scroller so content scrolls under an unsafe edge but can always be
|
|
105
112
|
scrolled clear. A view whose only child is a Pane or layout lets that child
|
|
@@ -217,4 +224,10 @@
|
|
|
217
224
|
:is([data-workbench-main], [data-workbench-panel-content])
|
|
218
225
|
> [data-component="nav-stack"]:only-child {
|
|
219
226
|
height: 100%;
|
|
227
|
+
--kui-edge-inset-block-start: var(--_kui-workbench-content-edge-block-start);
|
|
228
|
+
--kui-edge-inset-block-end: var(--_kui-workbench-content-edge-block-end);
|
|
229
|
+
--kui-edge-inset-inline-start: var(
|
|
230
|
+
--_kui-workbench-content-edge-inline-start
|
|
231
|
+
);
|
|
232
|
+
--kui-edge-inset-inline-end: var(--_kui-workbench-content-edge-inline-end);
|
|
220
233
|
}
|
package/dist/styles/pane.css
CHANGED
|
@@ -22,6 +22,33 @@
|
|
|
22
22
|
grid-template-rows: auto minmax(0, 1fr) auto;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
/* Paint the active scroll owner once, so alpha lowered colors do not stack.
|
|
26
|
+
Fixed chrome leaves the content slot scrolling; auto chrome lets the Pane
|
|
27
|
+
root scroll in its short mode, while its content remains transparent. */
|
|
28
|
+
.kui-pane[data-appearance="sunken"] > .kui-pane__content {
|
|
29
|
+
background: var(
|
|
30
|
+
--kui-sunken-panel-background,
|
|
31
|
+
var(--kui-color-surface-lowered)
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.kui-pane[data-appearance="sunken"][data-chrome-placement="auto"] {
|
|
36
|
+
background: var(
|
|
37
|
+
--kui-sunken-panel-background,
|
|
38
|
+
var(--kui-color-surface-lowered)
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.kui-pane[data-appearance="sunken"][data-chrome-placement="auto"]
|
|
43
|
+
> .kui-pane__content {
|
|
44
|
+
background: transparent;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.kui-pane[data-appearance="sunken"][data-chrome-placement="auto"]
|
|
48
|
+
> :is(.kui-pane__header, .kui-pane__footer) {
|
|
49
|
+
background: var(--kui-pane-chrome-background, var(--kui-color-surface));
|
|
50
|
+
}
|
|
51
|
+
|
|
25
52
|
/* Safe areas. The pane root never pads, so its background and separators paint
|
|
26
53
|
through an unsafe area; its slots compensate on the edges the pane still
|
|
27
54
|
touches. The inherited `--kui-edge-inset-*` context says how far each edge
|
|
@@ -217,6 +244,12 @@
|
|
|
217
244
|
:is([data-workbench-main], [data-workbench-panel-content])
|
|
218
245
|
> [data-component="pane"]:only-child {
|
|
219
246
|
height: 100%;
|
|
247
|
+
--kui-edge-inset-block-start: var(--_kui-workbench-content-edge-block-start);
|
|
248
|
+
--kui-edge-inset-block-end: var(--_kui-workbench-content-edge-block-end);
|
|
249
|
+
--kui-edge-inset-inline-start: var(
|
|
250
|
+
--_kui-workbench-content-edge-inline-start
|
|
251
|
+
);
|
|
252
|
+
--kui-edge-inset-inline-end: var(--_kui-workbench-content-edge-inline-end);
|
|
220
253
|
}
|
|
221
254
|
|
|
222
255
|
/* As the only child of a NavStack view or a TabScaffold scene, a Pane fills
|