@threadlabs/looma 0.22.12 → 0.22.14
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/components/shared/icons.js +4 -0
- package/components/ui-card/ui-card.html +21 -2
- package/components/ui-icon/ui-icon.html +4 -0
- package/components/ui-input/ui-input.html +1 -0
- package/components/ui-input-group/ui-input-group.html +11 -0
- package/components/ui-popover/ui-popover.html +15 -0
- package/components/ui-scroll-area/ui-scroll-area.html +12 -0
- package/components/ui-search-result-row/ui-search-result-row.html +11 -0
- package/components/ui-stack/ui-stack.html +6 -3
- package/components/ui-text/ui-text.html +12 -0
- package/dist/index.js +1 -1
- package/editor/chunks/extensions.js +75 -6
- package/editor/extensions/index.d.ts +1 -0
- package/editor/extensions/index.js +2 -2
- package/editor/extensions/preset.d.ts +2 -0
- package/editor/extensions/relative-links.d.ts +8 -0
- package/editor/extensions/slash-command.d.ts +5 -3
- package/editor/icons.d.ts +4 -0
- package/editor/index.js +7 -3
- package/package.json +1 -1
- package/styles/ui-card.css +17 -0
- package/styles/ui-input-group.css +9 -0
- package/styles/ui-input.css +1 -0
- package/styles/ui-popover.css +13 -0
- package/styles/ui-scroll-area.css +10 -0
- package/styles/ui-search-result-row.css +9 -0
- package/styles/ui-stack.css +3 -0
- package/styles/ui-text.css +8 -0
- package/vanilla/UiCard.d.ts +2 -1
- package/vanilla/UiCard.js +1 -1
- package/vanilla/UiIcon.js +1 -1
- package/vanilla/UiInputGroup.d.ts +1 -0
- package/vanilla/UiInputGroup.js +1 -1
- package/vanilla/UiPopover.d.ts +1 -0
- package/vanilla/UiPopover.js +1 -1
- package/vanilla/UiScrollArea.d.ts +1 -0
- package/vanilla/UiScrollArea.js +1 -1
- package/vanilla/UiSearchResultRow.d.ts +1 -0
- package/vanilla/UiSearchResultRow.js +1 -1
- package/vanilla/UiStack.d.ts +1 -1
- package/vanilla/UiStack.js +1 -1
- package/vanilla/UiText.d.ts +2 -0
- package/vanilla/UiText.js +1 -1
- package/vue/UiCard.d.ts +12 -3
- package/vue/UiCard.vue +49 -5
- package/vue/UiIcon.vue +23 -0
- package/vue/UiInput.vue +1 -0
- package/vue/UiInputGroup.d.ts +9 -0
- package/vue/UiInputGroup.vue +33 -2
- package/vue/UiPopover.d.ts +9 -0
- package/vue/UiPopover.vue +43 -2
- package/vue/UiScrollArea.d.ts +9 -0
- package/vue/UiScrollArea.vue +35 -2
- package/vue/UiSearchResultRow.d.ts +9 -0
- package/vue/UiSearchResultRow.vue +38 -1
- package/vue/UiStack.d.ts +3 -3
- package/vue/UiStack.vue +10 -4
- package/vue/UiText.d.ts +18 -0
- package/vue/UiText.vue +70 -0
- package/vue/chunks/UiCard.js +39 -3
- package/vue/chunks/UiIcon.js +69 -1
- package/vue/chunks/UiInput.js +1 -1
- package/vue/chunks/UiInputGroup.js +59 -22
- package/vue/chunks/UiPopover.js +37 -5
- package/vue/chunks/UiScrollArea.js +66 -23
- package/vue/chunks/UiSearchResultRow.js +28 -2
- package/vue/chunks/UiStack.js +3 -2
- package/vue/chunks/UiText.js +92 -4
- package/vue/components.css +174 -297
- package/vue/editor/LoomaEditor.d.ts +11 -0
- package/vue/editor/index.js +262 -145
package/vanilla/UiPopover.js
CHANGED
|
@@ -3,7 +3,7 @@ import { manageComponentLifecycle } from "@nextwebwg/html-next/runtime";
|
|
|
3
3
|
import * as controller from "../components/ui-popover/ui-popover.js";
|
|
4
4
|
import "../styles/ui-popover.css";
|
|
5
5
|
|
|
6
|
-
const definition = {...{"contract":{"tag":"ui-popover","props":{"for":{"type":"string","required":false,"target":{"attribute":"for"},"default":""},"open":{"type":"boolean","required":false,"target":{"attribute":"open"},"default":false},"placement":{"type":{"kind":"terminal","name":"keyword"},"values":["top","top-start","top-end","bottom","bottom-start","bottom-end","left","left-start","left-end","right","right-start","right-end"],"required":false,"target":{"attribute":"placement"},"default":"bottom-start"}}},"template":{"kind":"element","name":"span","attributes":[],"children":[{"kind":"element","name":"div","attributes":[{"kind":"literal","name":"class","value":"surface"}],"children":[{"kind":"slot"}]}]},"declarations":[{"kind":"state","name":"internalOpen","type":"boolean","value":"false","expression":{"source":"false","ast":{"kind":"literal","value":false},"dependencies":[]}},{"kind":"event","name":"open","type":"object","shape":{"kind":"object","fields":[{"name":"open","type":{"kind":"terminal","name":"boolean"},"optional":false},{"name":"reason","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["action","programmatic","light-dismiss","escape"]},"optional":false},{"name":"trigger","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["keyboard","pointer","programmatic"]},"optional":false}],"open":false},"bubbles":true,"composed":true,"cancelable":false},{"kind":"event","name":"close","type":"object","shape":{"kind":"object","fields":[{"name":"open","type":{"kind":"terminal","name":"boolean"},"optional":false},{"name":"reason","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["action","programmatic","light-dismiss","escape"]},"optional":false},{"name":"trigger","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["keyboard","pointer","programmatic"]},"optional":false}],"open":false},"bubbles":true,"composed":true,"cancelable":false}],"root":{"kind":"native","element":"span","choices":["span"]}},source:{file:import.meta.url},css:""};
|
|
6
|
+
const definition = {...{"contract":{"tag":"ui-popover","props":{"for":{"type":"string","required":false,"target":{"attribute":"for"},"default":""},"open":{"type":"boolean","required":false,"target":{"attribute":"open"},"default":false},"placement":{"type":{"kind":"terminal","name":"keyword"},"values":["top","top-start","top-end","bottom","bottom-start","bottom-end","left","left-start","left-end","right","right-start","right-end"],"required":false,"target":{"attribute":"placement"},"default":"bottom-start"},"size":{"type":{"kind":"terminal","name":"keyword"},"values":["content","sm","md","lg"],"required":false,"target":{"attribute":"size"},"default":"content"}}},"template":{"kind":"element","name":"span","attributes":[],"children":[{"kind":"element","name":"div","attributes":[{"kind":"literal","name":"class","value":"surface"}],"children":[{"kind":"slot"}]}]},"declarations":[{"kind":"state","name":"internalOpen","type":"boolean","value":"false","expression":{"source":"false","ast":{"kind":"literal","value":false},"dependencies":[]}},{"kind":"event","name":"open","type":"object","shape":{"kind":"object","fields":[{"name":"open","type":{"kind":"terminal","name":"boolean"},"optional":false},{"name":"reason","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["action","programmatic","light-dismiss","escape"]},"optional":false},{"name":"trigger","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["keyboard","pointer","programmatic"]},"optional":false}],"open":false},"bubbles":true,"composed":true,"cancelable":false},{"kind":"event","name":"close","type":"object","shape":{"kind":"object","fields":[{"name":"open","type":{"kind":"terminal","name":"boolean"},"optional":false},{"name":"reason","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["action","programmatic","light-dismiss","escape"]},"optional":false},{"name":"trigger","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["keyboard","pointer","programmatic"]},"optional":false}],"open":false},"bubbles":true,"composed":true,"cancelable":false}],"root":{"kind":"native","element":"span","choices":["span"]}},source:{file:import.meta.url},css:""};
|
|
7
7
|
|
|
8
8
|
export function createUiPopover(options = {}) {
|
|
9
9
|
const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
|
|
@@ -7,6 +7,7 @@ export interface UiScrollAreaElement extends HTMLDivElement {
|
|
|
7
7
|
}
|
|
8
8
|
export interface UiScrollAreaProps {
|
|
9
9
|
orientation?: "vertical" | "horizontal" | null;
|
|
10
|
+
size?: "content" | "sm" | "md" | "lg" | null;
|
|
10
11
|
attributes?: Readonly<Record<string, string | number | boolean | null | undefined>>;
|
|
11
12
|
children?: readonly (string | Node)[];
|
|
12
13
|
slots?: Readonly<Record<string, readonly (string | Node)[]>>;
|
package/vanilla/UiScrollArea.js
CHANGED
|
@@ -3,7 +3,7 @@ import { manageComponentLifecycle } from "@nextwebwg/html-next/runtime";
|
|
|
3
3
|
import * as controller from "../components/ui-scroll-area/ui-scroll-area.js";
|
|
4
4
|
import "../styles/ui-scroll-area.css";
|
|
5
5
|
|
|
6
|
-
const definition = {...{"contract":{"tag":"ui-scroll-area","props":{"orientation":{"type":{"kind":"terminal","name":"keyword"},"values":["vertical","horizontal"],"required":false,"target":{"attribute":"orientation"},"default":"vertical"}}},"template":{"kind":"element","name":"div","attributes":[],"children":[{"kind":"element","name":"div","attributes":[{"kind":"literal","name":"class","value":"content"}],"children":[{"kind":"slot"}],"ref":"content"}]},"declarations":[],"root":{"kind":"native","element":"div","choices":["div"]}},source:{file:import.meta.url},css:""};
|
|
6
|
+
const definition = {...{"contract":{"tag":"ui-scroll-area","props":{"orientation":{"type":{"kind":"terminal","name":"keyword"},"values":["vertical","horizontal"],"required":false,"target":{"attribute":"orientation"},"default":"vertical"},"size":{"type":{"kind":"terminal","name":"keyword"},"values":["content","sm","md","lg"],"required":false,"target":{"attribute":"size"},"default":"content"}}},"template":{"kind":"element","name":"div","attributes":[],"children":[{"kind":"element","name":"div","attributes":[{"kind":"literal","name":"class","value":"content"}],"children":[{"kind":"slot"}],"ref":"content"}]},"declarations":[],"root":{"kind":"native","element":"div","choices":["div"]}},source:{file:import.meta.url},css:""};
|
|
7
7
|
|
|
8
8
|
export function createUiScrollArea(options = {}) {
|
|
9
9
|
const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
|
|
@@ -6,6 +6,7 @@ export interface UiSearchResultRowElement extends HTMLButtonElement {
|
|
|
6
6
|
removeEventListener<K extends keyof UiSearchResultRowEventMap>(type: K, listener: (this: UiSearchResultRowElement, event: UiSearchResultRowEventMap[K]) => unknown, options?: boolean | EventListenerOptions): void;
|
|
7
7
|
}
|
|
8
8
|
export interface UiSearchResultRowProps {
|
|
9
|
+
density?: "comfortable" | "compact" | null;
|
|
9
10
|
disabled?: boolean | null;
|
|
10
11
|
selected?: boolean | null;
|
|
11
12
|
attributes?: Readonly<Record<string, string | number | boolean | null | undefined>>;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { manageComponentLifecycle } from "@nextwebwg/html-next/runtime";
|
|
3
3
|
import "../styles/ui-search-result-row.css";
|
|
4
4
|
|
|
5
|
-
const definition = {...{"contract":{"tag":"ui-search-result-row","props":{"disabled":{"type":"boolean","required":false,"target":{"attribute":"disabled"},"default":false},"selected":{"type":"boolean","required":false,"target":{"attribute":"aria-current"},"default":false}}},"template":{"kind":"element","name":"button","attributes":[{"kind":"literal","name":"type","value":"button"},{"kind":"attribute","name":"disabled","expression":"disabled","expressionPlan":{"source":"disabled","ast":{"kind":"id","name":"disabled"},"dependencies":["disabled"]}},{"kind":"attribute","name":"aria-current","expression":"selected","expressionPlan":{"source":"selected","ast":{"kind":"id","name":"selected"},"dependencies":["selected"]}}],"children":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"leading"}],"children":[{"kind":"slot","fallback":[],"name":"leading"}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"content"}],"children":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"title"}],"children":[{"kind":"slot","fallback":[],"name":"title"}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"meta"}],"children":[{"kind":"slot","fallback":[],"name":"meta"}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"excerpt"}],"children":[{"kind":"slot","fallback":[],"name":"excerpt"}]}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"trailing"}],"children":[{"kind":"slot","fallback":[],"name":"trailing"}]}]},"declarations":[],"root":{"kind":"native","element":"button","choices":["button"]}},source:{file:import.meta.url},css:""};
|
|
5
|
+
const definition = {...{"contract":{"tag":"ui-search-result-row","props":{"density":{"type":{"kind":"terminal","name":"keyword"},"values":["comfortable","compact"],"required":false,"target":{"attribute":"density"},"default":"comfortable"},"disabled":{"type":"boolean","required":false,"target":{"attribute":"disabled"},"default":false},"selected":{"type":"boolean","required":false,"target":{"attribute":"aria-current"},"default":false}}},"template":{"kind":"element","name":"button","attributes":[{"kind":"literal","name":"type","value":"button"},{"kind":"attribute","name":"disabled","expression":"disabled","expressionPlan":{"source":"disabled","ast":{"kind":"id","name":"disabled"},"dependencies":["disabled"]}},{"kind":"attribute","name":"aria-current","expression":"selected","expressionPlan":{"source":"selected","ast":{"kind":"id","name":"selected"},"dependencies":["selected"]}}],"children":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"leading"}],"children":[{"kind":"slot","fallback":[],"name":"leading"}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"content"}],"children":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"title"}],"children":[{"kind":"slot","fallback":[],"name":"title"}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"meta"}],"children":[{"kind":"slot","fallback":[],"name":"meta"}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"excerpt"}],"children":[{"kind":"slot","fallback":[],"name":"excerpt"}]}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"trailing"}],"children":[{"kind":"slot","fallback":[],"name":"trailing"}]}]},"declarations":[],"root":{"kind":"native","element":"button","choices":["button"]}},source:{file:import.meta.url},css:""};
|
|
6
6
|
|
|
7
7
|
export function createUiSearchResultRow(options = {}) {
|
|
8
8
|
const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
|
package/vanilla/UiStack.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export interface UiStackElement extends HTMLDivElement {
|
|
|
7
7
|
}
|
|
8
8
|
export interface UiStackProps {
|
|
9
9
|
align?: "start" | "center" | "end" | "stretch" | null;
|
|
10
|
-
gap?: "xs" | "s" | "m" | "l" | "xl" | null;
|
|
10
|
+
gap?: "none" | "xs" | "s" | "m" | "l" | "xl" | null;
|
|
11
11
|
justify?: "start" | "center" | "end" | "between" | null;
|
|
12
12
|
attributes?: Readonly<Record<string, string | number | boolean | null | undefined>>;
|
|
13
13
|
children?: readonly (string | Node)[];
|
package/vanilla/UiStack.js
CHANGED
|
@@ -25,7 +25,7 @@ export function createUiStack(options = {}) {
|
|
|
25
25
|
}
|
|
26
26
|
manageGeneratedProps(element, [
|
|
27
27
|
{ name: "align", attribute: "data-align", value: componentProps["align"], type: ["start","center","end","stretch"], required: false },
|
|
28
|
-
{ name: "gap", attribute: "data-gap", value: componentProps["gap"], type: ["xs","s","m","l","xl"], required: false },
|
|
28
|
+
{ name: "gap", attribute: "data-gap", value: componentProps["gap"], type: ["none","xs","s","m","l","xl"], required: false },
|
|
29
29
|
{ name: "justify", attribute: "data-justify", value: componentProps["justify"], type: ["start","center","end","between"], required: false },
|
|
30
30
|
]);
|
|
31
31
|
return element;
|
package/vanilla/UiText.d.ts
CHANGED
|
@@ -8,11 +8,13 @@ export interface UiTextElement extends HTMLElement {
|
|
|
8
8
|
export interface UiTextProps {
|
|
9
9
|
align?: "start" | "center" | null;
|
|
10
10
|
as?: "p" | "span" | "div" | "small" | "strong" | "label" | "h2" | "h3" | "h4" | "h5" | "h6" | null;
|
|
11
|
+
font?: "inherit" | "sans" | null;
|
|
11
12
|
size?: "inherit" | "xs" | "sm" | "md" | "lg" | null;
|
|
12
13
|
tone?: "default" | "secondary" | "muted" | "accent" | "danger" | "success" | "info" | "warning" | null;
|
|
13
14
|
truncate?: boolean | null;
|
|
14
15
|
variant?: "body" | "eyebrow" | "code" | null;
|
|
15
16
|
weight?: "inherit" | "normal" | "medium" | "semibold" | null;
|
|
17
|
+
wrap?: "normal" | "anywhere" | null;
|
|
16
18
|
attributes?: Readonly<Record<string, string | number | boolean | null | undefined>>;
|
|
17
19
|
children?: readonly (string | Node)[];
|
|
18
20
|
slots?: Readonly<Record<string, readonly (string | Node)[]>>;
|
package/vanilla/UiText.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { componentRootIndex, manageComponentLifecycle } from "@nextwebwg/html-next/runtime";
|
|
3
3
|
import "../styles/ui-text.css";
|
|
4
4
|
|
|
5
|
-
const definition = {...{"contract":{"tag":"ui-text","props":{"align":{"type":{"kind":"terminal","name":"keyword"},"values":["start","center"],"required":false,"target":{"attribute":"align"},"default":"start"},"as":{"type":{"kind":"terminal","name":"keyword"},"values":["p","span","div","small","strong","label","h2","h3","h4","h5","h6"],"required":false,"target":{"attribute":"as"},"default":"p"},"size":{"type":{"kind":"terminal","name":"keyword"},"values":["inherit","xs","sm","md","lg"],"required":false,"target":{"attribute":"size"},"default":"inherit"},"tone":{"type":{"kind":"terminal","name":"keyword"},"values":["default","secondary","muted","accent","danger","success","info","warning"],"required":false,"target":{"attribute":"tone"},"default":"default"},"truncate":{"type":"boolean","required":false,"target":{"attribute":"truncate"},"default":false},"variant":{"type":{"kind":"terminal","name":"keyword"},"values":["body","eyebrow","code"],"required":false,"target":{"attribute":"variant"},"default":"body"},"weight":{"type":{"kind":"terminal","name":"keyword"},"values":["inherit","normal","medium","semibold"],"required":false,"target":{"attribute":"weight"},"default":"inherit"}}},"template":{"kind":"element","name":"template","attributes":[],"children":[{"kind":"element","name":"span","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'span'","testPlan":{"source":"as = 'span'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"span"}},"dependencies":["as"]}}},{"kind":"element","name":"div","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'div'","testPlan":{"source":"as = 'div'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"div"}},"dependencies":["as"]}}},{"kind":"element","name":"small","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'small'","testPlan":{"source":"as = 'small'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"small"}},"dependencies":["as"]}}},{"kind":"element","name":"strong","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'strong'","testPlan":{"source":"as = 'strong'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"strong"}},"dependencies":["as"]}}},{"kind":"element","name":"label","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'label'","testPlan":{"source":"as = 'label'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"label"}},"dependencies":["as"]}}},{"kind":"element","name":"h2","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'h2'","testPlan":{"source":"as = 'h2'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"h2"}},"dependencies":["as"]}}},{"kind":"element","name":"h3","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'h3'","testPlan":{"source":"as = 'h3'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"h3"}},"dependencies":["as"]}}},{"kind":"element","name":"h4","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'h4'","testPlan":{"source":"as = 'h4'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"h4"}},"dependencies":["as"]}}},{"kind":"element","name":"h5","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'h5'","testPlan":{"source":"as = 'h5'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"h5"}},"dependencies":["as"]}}},{"kind":"element","name":"h6","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'h6'","testPlan":{"source":"as = 'h6'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"h6"}},"dependencies":["as"]}}},{"kind":"element","name":"p","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"else"}}],"flow":{"kind":"match"}},"declarations":[],"root":{"kind":"native","element":"p","choices":["span","div","small","strong","label","h2","h3","h4","h5","h6","p"]}},source:{file:import.meta.url},css:""};
|
|
5
|
+
const definition = {...{"contract":{"tag":"ui-text","props":{"align":{"type":{"kind":"terminal","name":"keyword"},"values":["start","center"],"required":false,"target":{"attribute":"align"},"default":"start"},"as":{"type":{"kind":"terminal","name":"keyword"},"values":["p","span","div","small","strong","label","h2","h3","h4","h5","h6"],"required":false,"target":{"attribute":"as"},"default":"p"},"font":{"type":{"kind":"terminal","name":"keyword"},"values":["inherit","sans"],"required":false,"target":{"attribute":"font"},"default":"inherit"},"size":{"type":{"kind":"terminal","name":"keyword"},"values":["inherit","xs","sm","md","lg"],"required":false,"target":{"attribute":"size"},"default":"inherit"},"tone":{"type":{"kind":"terminal","name":"keyword"},"values":["default","secondary","muted","accent","danger","success","info","warning"],"required":false,"target":{"attribute":"tone"},"default":"default"},"truncate":{"type":"boolean","required":false,"target":{"attribute":"truncate"},"default":false},"variant":{"type":{"kind":"terminal","name":"keyword"},"values":["body","eyebrow","code"],"required":false,"target":{"attribute":"variant"},"default":"body"},"weight":{"type":{"kind":"terminal","name":"keyword"},"values":["inherit","normal","medium","semibold"],"required":false,"target":{"attribute":"weight"},"default":"inherit"},"wrap":{"type":{"kind":"terminal","name":"keyword"},"values":["normal","anywhere"],"required":false,"target":{"attribute":"wrap"},"default":"normal"}}},"template":{"kind":"element","name":"template","attributes":[],"children":[{"kind":"element","name":"span","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'span'","testPlan":{"source":"as = 'span'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"span"}},"dependencies":["as"]}}},{"kind":"element","name":"div","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'div'","testPlan":{"source":"as = 'div'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"div"}},"dependencies":["as"]}}},{"kind":"element","name":"small","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'small'","testPlan":{"source":"as = 'small'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"small"}},"dependencies":["as"]}}},{"kind":"element","name":"strong","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'strong'","testPlan":{"source":"as = 'strong'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"strong"}},"dependencies":["as"]}}},{"kind":"element","name":"label","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'label'","testPlan":{"source":"as = 'label'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"label"}},"dependencies":["as"]}}},{"kind":"element","name":"h2","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'h2'","testPlan":{"source":"as = 'h2'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"h2"}},"dependencies":["as"]}}},{"kind":"element","name":"h3","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'h3'","testPlan":{"source":"as = 'h3'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"h3"}},"dependencies":["as"]}}},{"kind":"element","name":"h4","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'h4'","testPlan":{"source":"as = 'h4'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"h4"}},"dependencies":["as"]}}},{"kind":"element","name":"h5","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'h5'","testPlan":{"source":"as = 'h5'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"h5"}},"dependencies":["as"]}}},{"kind":"element","name":"h6","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"when","test":"as = 'h6'","testPlan":{"source":"as = 'h6'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"h6"}},"dependencies":["as"]}}},{"kind":"element","name":"p","attributes":[],"children":[{"kind":"slot"}],"flow":{"kind":"else"}}],"flow":{"kind":"match"}},"declarations":[],"root":{"kind":"native","element":"p","choices":["span","div","small","strong","label","h2","h3","h4","h5","h6","p"]}},source:{file:import.meta.url},css:""};
|
|
6
6
|
|
|
7
7
|
export function createUiText(options = {}) {
|
|
8
8
|
const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
|
package/vue/UiCard.d.ts
CHANGED
|
@@ -15,7 +15,11 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
15
15
|
default: string;
|
|
16
16
|
};
|
|
17
17
|
padding: {
|
|
18
|
-
type: PropType<"sm" | "md" | "lg" | null>;
|
|
18
|
+
type: PropType<"xs" | "sm" | "md" | "lg" | null>;
|
|
19
|
+
default: string;
|
|
20
|
+
};
|
|
21
|
+
size: {
|
|
22
|
+
type: PropType<"content" | "sm" | "md" | "lg" | null>;
|
|
19
23
|
default: string;
|
|
20
24
|
};
|
|
21
25
|
tone: {
|
|
@@ -32,7 +36,11 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
32
36
|
default: string;
|
|
33
37
|
};
|
|
34
38
|
padding: {
|
|
35
|
-
type: PropType<"sm" | "md" | "lg" | null>;
|
|
39
|
+
type: PropType<"xs" | "sm" | "md" | "lg" | null>;
|
|
40
|
+
default: string;
|
|
41
|
+
};
|
|
42
|
+
size: {
|
|
43
|
+
type: PropType<"content" | "sm" | "md" | "lg" | null>;
|
|
36
44
|
default: string;
|
|
37
45
|
};
|
|
38
46
|
tone: {
|
|
@@ -44,10 +52,11 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
44
52
|
default: string;
|
|
45
53
|
};
|
|
46
54
|
}>> & Readonly<{}>, {
|
|
55
|
+
size: "sm" | "md" | "content" | "lg" | null;
|
|
47
56
|
tone: "neutral" | "danger" | null;
|
|
48
57
|
variant: "subtle" | "outlined" | "elevated" | null;
|
|
49
58
|
as: "div" | "article" | "aside" | "section" | null;
|
|
50
|
-
padding: "sm" | "md" | "lg" | null;
|
|
59
|
+
padding: "xs" | "sm" | "md" | "lg" | null;
|
|
51
60
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
52
61
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
53
62
|
declare const _default: typeof __VLS_export;
|
package/vue/UiCard.vue
CHANGED
|
@@ -23,10 +23,19 @@ const propValidityContract = {
|
|
|
23
23
|
required: false,
|
|
24
24
|
target: { attribute: 'padding' },
|
|
25
25
|
description:
|
|
26
|
-
'The space inside the card: sm is snug (0.75rem), md is the default (1.5rem), and lg is roomy (2rem).',
|
|
27
|
-
values: ['sm', 'md', 'lg'],
|
|
26
|
+
'The space inside the card: xs is compact (0.5rem), sm is snug (0.75rem), md is the default (1.5rem), and lg is roomy (2rem).',
|
|
27
|
+
values: ['xs', 'sm', 'md', 'lg'],
|
|
28
28
|
default: 'md',
|
|
29
29
|
},
|
|
30
|
+
size: {
|
|
31
|
+
type: { kind: 'terminal', name: 'keyword' },
|
|
32
|
+
required: false,
|
|
33
|
+
target: { attribute: 'size' },
|
|
34
|
+
description:
|
|
35
|
+
'Optional size preset. content keeps the existing intrinsic sizing; the other sizes constrain the surface for compact, medium, or large content.',
|
|
36
|
+
values: ['content', 'sm', 'md', 'lg'],
|
|
37
|
+
default: 'content',
|
|
38
|
+
},
|
|
30
39
|
tone: {
|
|
31
40
|
type: { kind: 'terminal', name: 'keyword' },
|
|
32
41
|
required: false,
|
|
@@ -52,7 +61,11 @@ const props = defineProps({
|
|
|
52
61
|
type: null as unknown as PropType<'div' | 'section' | 'article' | 'aside' | null>,
|
|
53
62
|
default: 'div',
|
|
54
63
|
},
|
|
55
|
-
padding: { type: null as unknown as PropType<'sm' | 'md' | 'lg' | null>, default: 'md' },
|
|
64
|
+
padding: { type: null as unknown as PropType<'xs' | 'sm' | 'md' | 'lg' | null>, default: 'md' },
|
|
65
|
+
size: {
|
|
66
|
+
type: null as unknown as PropType<'content' | 'sm' | 'md' | 'lg' | null>,
|
|
67
|
+
default: 'content',
|
|
68
|
+
},
|
|
56
69
|
tone: { type: null as unknown as PropType<'neutral' | 'danger' | null>, default: 'neutral' },
|
|
57
70
|
variant: {
|
|
58
71
|
type: null as unknown as PropType<'outlined' | 'subtle' | 'elevated' | null>,
|
|
@@ -62,6 +75,7 @@ const props = defineProps({
|
|
|
62
75
|
const acceptedProps: Record<string, unknown> = {
|
|
63
76
|
as: 'div',
|
|
64
77
|
padding: 'md',
|
|
78
|
+
size: 'content',
|
|
65
79
|
tone: 'neutral',
|
|
66
80
|
variant: 'outlined',
|
|
67
81
|
}
|
|
@@ -73,13 +87,20 @@ const checkedProps = computed(() => ({
|
|
|
73
87
|
'as',
|
|
74
88
|
acceptedProps,
|
|
75
89
|
) as 'div' | 'section' | 'article' | 'aside',
|
|
76
|
-
padding: checkedProp<'sm' | 'md' | 'lg'>(
|
|
90
|
+
padding: checkedProp<'xs' | 'sm' | 'md' | 'lg'>(
|
|
77
91
|
props['padding'],
|
|
78
92
|
{ kind: 'terminal', name: 'keyword' },
|
|
79
93
|
false,
|
|
80
94
|
'padding',
|
|
81
95
|
acceptedProps,
|
|
82
|
-
) as 'sm' | 'md' | 'lg',
|
|
96
|
+
) as 'xs' | 'sm' | 'md' | 'lg',
|
|
97
|
+
size: checkedProp<'content' | 'sm' | 'md' | 'lg'>(
|
|
98
|
+
props['size'],
|
|
99
|
+
{ kind: 'terminal', name: 'keyword' },
|
|
100
|
+
false,
|
|
101
|
+
'size',
|
|
102
|
+
acceptedProps,
|
|
103
|
+
) as 'content' | 'sm' | 'md' | 'lg',
|
|
83
104
|
tone: checkedProp<'neutral' | 'danger'>(
|
|
84
105
|
props['tone'],
|
|
85
106
|
{ kind: 'terminal', name: 'keyword' },
|
|
@@ -166,6 +187,8 @@ const hostState = computed(() =>
|
|
|
166
187
|
&& `variant=${encodeURIComponent(checkedProps.value.variant)}`,
|
|
167
188
|
checkedProps.value.tone && 'tone',
|
|
168
189
|
checkedProps.value.tone != null && `tone=${encodeURIComponent(checkedProps.value.tone)}`,
|
|
190
|
+
checkedProps.value.size && 'size',
|
|
191
|
+
checkedProps.value.size != null && `size=${encodeURIComponent(checkedProps.value.size)}`,
|
|
169
192
|
].filter(Boolean).join(' ')
|
|
170
193
|
)
|
|
171
194
|
</script>
|
|
@@ -178,6 +201,7 @@ const hostState = computed(() =>
|
|
|
178
201
|
v-prop-validity="{ contract: propValidityContract, values: { ...props } }"
|
|
179
202
|
:data-as="reflectedProp('as', 'as', checkedProps.as, undefined, false)"
|
|
180
203
|
:data-padding="reflectedProp('padding', 'padding', checkedProps.padding, undefined, false)"
|
|
204
|
+
:data-size="reflectedProp('size', 'size', checkedProps.size, undefined, false)"
|
|
181
205
|
:data-tone="reflectedProp('tone', 'tone', checkedProps.tone, undefined, false)"
|
|
182
206
|
:data-variant="reflectedProp('variant', 'variant', checkedProps.variant, undefined, false)"
|
|
183
207
|
:data-ui-card-state="hostState || undefined"
|
|
@@ -192,6 +216,7 @@ const hostState = computed(() =>
|
|
|
192
216
|
v-prop-validity="{ contract: propValidityContract, values: { ...props } }"
|
|
193
217
|
:data-as="reflectedProp('as', 'as', checkedProps.as, undefined, false)"
|
|
194
218
|
:data-padding="reflectedProp('padding', 'padding', checkedProps.padding, undefined, false)"
|
|
219
|
+
:data-size="reflectedProp('size', 'size', checkedProps.size, undefined, false)"
|
|
195
220
|
:data-tone="reflectedProp('tone', 'tone', checkedProps.tone, undefined, false)"
|
|
196
221
|
:data-variant="reflectedProp('variant', 'variant', checkedProps.variant, undefined, false)"
|
|
197
222
|
:data-ui-card-state="hostState || undefined"
|
|
@@ -206,6 +231,7 @@ const hostState = computed(() =>
|
|
|
206
231
|
v-prop-validity="{ contract: propValidityContract, values: { ...props } }"
|
|
207
232
|
:data-as="reflectedProp('as', 'as', checkedProps.as, undefined, false)"
|
|
208
233
|
:data-padding="reflectedProp('padding', 'padding', checkedProps.padding, undefined, false)"
|
|
234
|
+
:data-size="reflectedProp('size', 'size', checkedProps.size, undefined, false)"
|
|
209
235
|
:data-tone="reflectedProp('tone', 'tone', checkedProps.tone, undefined, false)"
|
|
210
236
|
:data-variant="reflectedProp('variant', 'variant', checkedProps.variant, undefined, false)"
|
|
211
237
|
:data-ui-card-state="hostState || undefined"
|
|
@@ -220,6 +246,7 @@ const hostState = computed(() =>
|
|
|
220
246
|
v-prop-validity="{ contract: propValidityContract, values: { ...props } }"
|
|
221
247
|
:data-as="reflectedProp('as', 'as', checkedProps.as, undefined, false)"
|
|
222
248
|
:data-padding="reflectedProp('padding', 'padding', checkedProps.padding, undefined, false)"
|
|
249
|
+
:data-size="reflectedProp('size', 'size', checkedProps.size, undefined, false)"
|
|
223
250
|
:data-tone="reflectedProp('tone', 'tone', checkedProps.tone, undefined, false)"
|
|
224
251
|
:data-variant="reflectedProp('variant', 'variant', checkedProps.variant, undefined, false)"
|
|
225
252
|
:data-ui-card-state="hostState || undefined"
|
|
@@ -245,6 +272,10 @@ const hostState = computed(() =>
|
|
|
245
272
|
color: var(--ui-text-primary);
|
|
246
273
|
}
|
|
247
274
|
|
|
275
|
+
[data-component~="ui-card"][data-ui-card-state~="padding=xs"] {
|
|
276
|
+
gap: var(--ui-space-1);
|
|
277
|
+
padding: var(--ui-space-2);
|
|
278
|
+
}
|
|
248
279
|
[data-component~="ui-card"][data-ui-card-state~="padding=sm"] {
|
|
249
280
|
gap: var(--ui-space-2);
|
|
250
281
|
padding: var(--ui-space-3);
|
|
@@ -270,6 +301,19 @@ const hostState = computed(() =>
|
|
|
270
301
|
background: var(--ui-danger-soft);
|
|
271
302
|
}
|
|
272
303
|
|
|
304
|
+
[data-component~="ui-card"][data-ui-card-state~="size=sm"] {
|
|
305
|
+
inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
|
|
306
|
+
max-inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
|
|
307
|
+
}
|
|
308
|
+
[data-component~="ui-card"][data-ui-card-state~="size=md"] {
|
|
309
|
+
inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
|
|
310
|
+
max-inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
|
|
311
|
+
}
|
|
312
|
+
[data-component~="ui-card"][data-ui-card-state~="size=lg"] {
|
|
313
|
+
inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
|
|
314
|
+
max-inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
|
|
315
|
+
}
|
|
316
|
+
|
|
273
317
|
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
274
318
|
[data-component~="ui-card"][hidden] {
|
|
275
319
|
display: none;
|
package/vue/UiIcon.vue
CHANGED
|
@@ -177,6 +177,10 @@ const shapes = cycleCheckedComputed(() =>
|
|
|
177
177
|
tag: 'path',
|
|
178
178
|
d: 'M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21',
|
|
179
179
|
}, { tag: 'path', d: 'm5.082 11.09 8.828 8.828' }],
|
|
180
|
+
'external-link': [{ tag: 'path', d: 'M15 3h6v6' }, { tag: 'path', d: 'M10 14 21 3' }, {
|
|
181
|
+
tag: 'path',
|
|
182
|
+
d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6',
|
|
183
|
+
}],
|
|
180
184
|
'file-text': [
|
|
181
185
|
{
|
|
182
186
|
tag: 'path',
|
|
@@ -319,6 +323,10 @@ const shapes = cycleCheckedComputed(() =>
|
|
|
319
323
|
tag: 'path',
|
|
320
324
|
d: 'M3 9h18',
|
|
321
325
|
}],
|
|
326
|
+
pencil: [{
|
|
327
|
+
tag: 'path',
|
|
328
|
+
d: 'M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z',
|
|
329
|
+
}, { tag: 'path', d: 'm15 5 4 4' }],
|
|
322
330
|
pilcrow: [{ tag: 'path', d: 'M13 4v16' }, { tag: 'path', d: 'M17 4v16' }, {
|
|
323
331
|
tag: 'path',
|
|
324
332
|
d: 'M19 4H9.5a4.5 4.5 0 0 0 0 9H13',
|
|
@@ -344,6 +352,7 @@ const shapes = cycleCheckedComputed(() =>
|
|
|
344
352
|
tag: 'path',
|
|
345
353
|
d: 'M21 9H3',
|
|
346
354
|
}, { tag: 'path', d: 'M21 15H3' }],
|
|
355
|
+
search: [{ tag: 'path', d: 'm21 21-4.34-4.34' }, { tag: 'circle', cx: '11', cy: '11', r: '8' }],
|
|
347
356
|
settings: [{
|
|
348
357
|
tag: 'path',
|
|
349
358
|
d: 'M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915',
|
|
@@ -400,6 +409,20 @@ const shapes = cycleCheckedComputed(() =>
|
|
|
400
409
|
tag: 'path',
|
|
401
410
|
d: 'M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11',
|
|
402
411
|
}],
|
|
412
|
+
unlink: [
|
|
413
|
+
{
|
|
414
|
+
tag: 'path',
|
|
415
|
+
d: 'm18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71',
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
tag: 'path',
|
|
419
|
+
d: 'm5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71',
|
|
420
|
+
},
|
|
421
|
+
{ tag: 'line', x1: '8', x2: '8', y1: '2', y2: '5' },
|
|
422
|
+
{ tag: 'line', x1: '2', x2: '5', y1: '8', y2: '8' },
|
|
423
|
+
{ tag: 'line', x1: '16', x2: '16', y1: '19', y2: '22' },
|
|
424
|
+
{ tag: 'line', x1: '19', x2: '22', y1: '16', y2: '16' },
|
|
425
|
+
],
|
|
403
426
|
'user-round': [{ tag: 'circle', cx: '12', cy: '8', r: '5' }, {
|
|
404
427
|
tag: 'path',
|
|
405
428
|
d: 'M20 21a8 8 0 0 0-16 0',
|
package/vue/UiInput.vue
CHANGED
|
@@ -553,6 +553,7 @@ useComponentHost(() => import('../components/ui-input/ui-input.js'), {
|
|
|
553
553
|
margin: 0;
|
|
554
554
|
padding: var(--ui-space-2) var(--ui-space-3);
|
|
555
555
|
appearance: none;
|
|
556
|
+
padding-inline-start: var(--_ui-default-input-padding-inline-start, var(--ui-space-3));
|
|
556
557
|
border: var(--ui-input-border-width, var(--_ui-default-input-border-width, 1px)) solid
|
|
557
558
|
var(
|
|
558
559
|
--ui-input-border,
|
package/vue/UiInputGroup.d.ts
CHANGED
|
@@ -14,13 +14,22 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
14
14
|
type: PropType<boolean | null>;
|
|
15
15
|
default: boolean;
|
|
16
16
|
};
|
|
17
|
+
prefixKind: {
|
|
18
|
+
type: PropType<"text" | "icon" | null>;
|
|
19
|
+
default: string;
|
|
20
|
+
};
|
|
17
21
|
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
18
22
|
disabled: {
|
|
19
23
|
type: PropType<boolean | null>;
|
|
20
24
|
default: boolean;
|
|
21
25
|
};
|
|
26
|
+
prefixKind: {
|
|
27
|
+
type: PropType<"text" | "icon" | null>;
|
|
28
|
+
default: string;
|
|
29
|
+
};
|
|
22
30
|
}>> & Readonly<{}>, {
|
|
23
31
|
disabled: boolean | null;
|
|
32
|
+
prefixKind: "text" | "icon" | null;
|
|
24
33
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
25
34
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
26
35
|
declare const _default: typeof __VLS_export;
|
package/vue/UiInputGroup.vue
CHANGED
|
@@ -17,12 +17,22 @@ const propValidityContract = {
|
|
|
17
17
|
'Fades the group\'s framing to match a disabled input inside it. Disable the input itself too.',
|
|
18
18
|
default: false,
|
|
19
19
|
},
|
|
20
|
+
prefixKind: {
|
|
21
|
+
type: { kind: 'terminal', name: 'keyword' },
|
|
22
|
+
required: false,
|
|
23
|
+
target: { attribute: 'prefixkind' },
|
|
24
|
+
description:
|
|
25
|
+
'Text affixes have their own framing. An icon prefix shares the field surface and uses one compact icon-to-value gap.',
|
|
26
|
+
values: ['text', 'icon'],
|
|
27
|
+
default: 'text',
|
|
28
|
+
},
|
|
20
29
|
},
|
|
21
30
|
} as const
|
|
22
31
|
const props = defineProps({
|
|
23
32
|
disabled: { type: null as unknown as PropType<boolean | null>, default: false },
|
|
33
|
+
prefixKind: { type: null as unknown as PropType<'text' | 'icon' | null>, default: 'text' },
|
|
24
34
|
})
|
|
25
|
-
const acceptedProps: Record<string, unknown> = { disabled: false }
|
|
35
|
+
const acceptedProps: Record<string, unknown> = { disabled: false, prefixKind: 'text' }
|
|
26
36
|
const checkedProps = computed(() => ({
|
|
27
37
|
disabled: checkedProp<boolean>(
|
|
28
38
|
props['disabled'],
|
|
@@ -31,6 +41,13 @@ const checkedProps = computed(() => ({
|
|
|
31
41
|
'disabled',
|
|
32
42
|
acceptedProps,
|
|
33
43
|
) as boolean,
|
|
44
|
+
prefixKind: checkedProp<'text' | 'icon'>(
|
|
45
|
+
props['prefixKind'],
|
|
46
|
+
{ kind: 'terminal', name: 'keyword' },
|
|
47
|
+
false,
|
|
48
|
+
'prefixKind',
|
|
49
|
+
acceptedProps,
|
|
50
|
+
) as 'text' | 'icon',
|
|
34
51
|
}))
|
|
35
52
|
void checkedProps.value
|
|
36
53
|
watchSyncEffect(() => {
|
|
@@ -92,6 +109,9 @@ if (
|
|
|
92
109
|
const hostState = computed(() =>
|
|
93
110
|
[
|
|
94
111
|
checkedProps.value.disabled && 'disabled',
|
|
112
|
+
checkedProps.value.prefixKind && 'prefixKind',
|
|
113
|
+
checkedProps.value.prefixKind != null
|
|
114
|
+
&& `prefixKind=${encodeURIComponent(checkedProps.value.prefixKind)}`,
|
|
95
115
|
].filter(Boolean).join(' ')
|
|
96
116
|
)
|
|
97
117
|
|
|
@@ -112,7 +132,7 @@ useComponentHost(() => import('../components/ui-input-group/ui-input-group.js'),
|
|
|
112
132
|
? (incoming[name] ?? incoming[kebab] ?? null)
|
|
113
133
|
: null
|
|
114
134
|
},
|
|
115
|
-
propNames: ['disabled'],
|
|
135
|
+
propNames: ['disabled', 'prefixKind'],
|
|
116
136
|
propValidity: (name: string) =>
|
|
117
137
|
propValidityState({ contract: propValidityContract, values: { ...props } }, name),
|
|
118
138
|
})
|
|
@@ -124,6 +144,7 @@ useComponentHost(() => import('../components/ui-input-group/ui-input-group.js'),
|
|
|
124
144
|
v-bind="nativeAttrs($attrs)"
|
|
125
145
|
v-prop-validity="{ contract: propValidityContract, values: { ...props } }"
|
|
126
146
|
:data-disabled="reflectedProp('disabled', 'disabled', checkedProps.disabled, undefined, false)"
|
|
147
|
+
:data-prefix-kind="reflectedProp('prefixKind', 'prefix-kind', checkedProps.prefixKind, undefined, false)"
|
|
127
148
|
:data-ui-input-group-state="hostState || undefined"
|
|
128
149
|
ref="root"
|
|
129
150
|
>
|
|
@@ -283,6 +304,16 @@ useComponentHost(() => import('../components/ui-input-group/ui-input-group.js'),
|
|
|
283
304
|
border-inline-start: 1px solid var(--ui-border-divider);
|
|
284
305
|
}
|
|
285
306
|
|
|
307
|
+
[data-component~="ui-input-group"][data-ui-input-group-state~="prefixKind=icon"] {
|
|
308
|
+
--_ui-default-input-padding-inline-start: var(--ui-space-2);
|
|
309
|
+
}
|
|
310
|
+
[data-component~="ui-input-group"][data-ui-input-group-state~="prefixKind=icon"]
|
|
311
|
+
.affix:first-child {
|
|
312
|
+
padding-inline-end: 0;
|
|
313
|
+
border-inline-end: 0;
|
|
314
|
+
background: transparent;
|
|
315
|
+
}
|
|
316
|
+
|
|
286
317
|
/* Centred rather than padded above and below: the group is exactly a lone Input's height, so a
|
|
287
318
|
small button sits inside it with the difference split evenly, and the field keeps its height. */
|
|
288
319
|
.action {
|
package/vue/UiPopover.d.ts
CHANGED
|
@@ -16,6 +16,10 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
16
16
|
type: PropType<"top" | "top-start" | "top-end" | "bottom" | "bottom-start" | "bottom-end" | "left" | "left-start" | "left-end" | "right" | "right-start" | "right-end" | null>;
|
|
17
17
|
default: string;
|
|
18
18
|
};
|
|
19
|
+
size: {
|
|
20
|
+
type: PropType<"content" | "sm" | "md" | "lg" | null>;
|
|
21
|
+
default: string;
|
|
22
|
+
};
|
|
19
23
|
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
20
24
|
open: (event: CustomEvent<{
|
|
21
25
|
readonly open: boolean;
|
|
@@ -41,6 +45,10 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
41
45
|
type: PropType<"top" | "top-start" | "top-end" | "bottom" | "bottom-start" | "bottom-end" | "left" | "left-start" | "left-end" | "right" | "right-start" | "right-end" | null>;
|
|
42
46
|
default: string;
|
|
43
47
|
};
|
|
48
|
+
size: {
|
|
49
|
+
type: PropType<"content" | "sm" | "md" | "lg" | null>;
|
|
50
|
+
default: string;
|
|
51
|
+
};
|
|
44
52
|
}>> & Readonly<{
|
|
45
53
|
onOpen?: ((event: CustomEvent<{
|
|
46
54
|
readonly open: boolean;
|
|
@@ -55,6 +63,7 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
55
63
|
}>) => any) | undefined;
|
|
56
64
|
}>, {
|
|
57
65
|
open: boolean | null;
|
|
66
|
+
size: "sm" | "md" | "content" | "lg" | null;
|
|
58
67
|
for: string | null;
|
|
59
68
|
placement: "left" | "right" | "top" | "top-start" | "top-end" | "bottom" | "bottom-start" | "bottom-end" | "left-start" | "left-end" | "right-start" | "right-end" | null;
|
|
60
69
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
package/vue/UiPopover.vue
CHANGED
|
@@ -45,6 +45,15 @@ const propValidityContract = {
|
|
|
45
45
|
],
|
|
46
46
|
default: 'bottom-start',
|
|
47
47
|
},
|
|
48
|
+
size: {
|
|
49
|
+
type: { kind: 'terminal', name: 'keyword' },
|
|
50
|
+
required: false,
|
|
51
|
+
target: { attribute: 'size' },
|
|
52
|
+
description:
|
|
53
|
+
'Optional size preset. content keeps the existing intrinsic sizing; the other sizes constrain the surface for compact, medium, or large content.',
|
|
54
|
+
values: ['content', 'sm', 'md', 'lg'],
|
|
55
|
+
default: 'content',
|
|
56
|
+
},
|
|
48
57
|
},
|
|
49
58
|
} as const
|
|
50
59
|
const props = defineProps({
|
|
@@ -68,8 +77,17 @@ const props = defineProps({
|
|
|
68
77
|
>,
|
|
69
78
|
default: 'bottom-start',
|
|
70
79
|
},
|
|
80
|
+
size: {
|
|
81
|
+
type: null as unknown as PropType<'content' | 'sm' | 'md' | 'lg' | null>,
|
|
82
|
+
default: 'content',
|
|
83
|
+
},
|
|
71
84
|
})
|
|
72
|
-
const acceptedProps: Record<string, unknown> = {
|
|
85
|
+
const acceptedProps: Record<string, unknown> = {
|
|
86
|
+
for: '',
|
|
87
|
+
open: false,
|
|
88
|
+
placement: 'bottom-start',
|
|
89
|
+
size: 'content',
|
|
90
|
+
}
|
|
73
91
|
const checkedProps = computed(() => ({
|
|
74
92
|
for: checkedProp<string>(
|
|
75
93
|
props['for'],
|
|
@@ -111,6 +129,13 @@ const checkedProps = computed(() => ({
|
|
|
111
129
|
| 'right'
|
|
112
130
|
| 'right-start'
|
|
113
131
|
| 'right-end',
|
|
132
|
+
size: checkedProp<'content' | 'sm' | 'md' | 'lg'>(
|
|
133
|
+
props['size'],
|
|
134
|
+
{ kind: 'terminal', name: 'keyword' },
|
|
135
|
+
false,
|
|
136
|
+
'size',
|
|
137
|
+
acceptedProps,
|
|
138
|
+
) as 'content' | 'sm' | 'md' | 'lg',
|
|
114
139
|
}))
|
|
115
140
|
void checkedProps.value
|
|
116
141
|
watchSyncEffect(() => {
|
|
@@ -195,6 +220,8 @@ if (
|
|
|
195
220
|
const hostState = computed(() =>
|
|
196
221
|
[
|
|
197
222
|
internalOpen.value && 'internalOpen',
|
|
223
|
+
checkedProps.value.size && 'size',
|
|
224
|
+
checkedProps.value.size != null && `size=${encodeURIComponent(checkedProps.value.size)}`,
|
|
198
225
|
].filter(Boolean).join(' ')
|
|
199
226
|
)
|
|
200
227
|
|
|
@@ -232,7 +259,7 @@ useComponentHost(() => import('../components/ui-popover/ui-popover.js'), {
|
|
|
232
259
|
? (incoming[name] ?? incoming[kebab] ?? null)
|
|
233
260
|
: null
|
|
234
261
|
},
|
|
235
|
-
propNames: ['for', 'open', 'placement'],
|
|
262
|
+
propNames: ['for', 'open', 'placement', 'size'],
|
|
236
263
|
propValidity: (name: string) =>
|
|
237
264
|
propValidityState({ contract: propValidityContract, values: { ...props } }, name),
|
|
238
265
|
state: { internalOpen },
|
|
@@ -247,6 +274,7 @@ useComponentHost(() => import('../components/ui-popover/ui-popover.js'), {
|
|
|
247
274
|
:data-for="reflectedProp('for', 'for', checkedProps.for, undefined, false)"
|
|
248
275
|
:data-open="reflectedProp('open', 'open', checkedProps.open, undefined, false)"
|
|
249
276
|
:data-placement="reflectedProp('placement', 'placement', checkedProps.placement, undefined, false)"
|
|
277
|
+
:data-size="reflectedProp('size', 'size', checkedProps.size, undefined, false)"
|
|
250
278
|
:data-ui-popover-state="hostState || undefined"
|
|
251
279
|
ref="root"
|
|
252
280
|
><div class="surface"><slot /></div></span>
|
|
@@ -348,6 +376,19 @@ useComponentHost(() => import('../components/ui-popover/ui-popover.js'), {
|
|
|
348
376
|
}
|
|
349
377
|
}
|
|
350
378
|
|
|
379
|
+
[data-component~="ui-popover"][data-ui-popover-state~="size=sm"] {
|
|
380
|
+
inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
|
|
381
|
+
max-inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
|
|
382
|
+
}
|
|
383
|
+
[data-component~="ui-popover"][data-ui-popover-state~="size=md"] {
|
|
384
|
+
inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
|
|
385
|
+
max-inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
|
|
386
|
+
}
|
|
387
|
+
[data-component~="ui-popover"][data-ui-popover-state~="size=lg"] {
|
|
388
|
+
inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
|
|
389
|
+
max-inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
|
|
390
|
+
}
|
|
391
|
+
|
|
351
392
|
[data-component~="ui-popover"][hidden] {
|
|
352
393
|
display: none;
|
|
353
394
|
}
|