@threadlabs/looma 0.10.11 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/components/shared/editor.js +2 -26
  2. package/components/shared/icons.js +53 -0
  3. package/components/ui-avatar-group/ui-avatar-group.html +6 -6
  4. package/components/ui-avatar-group/ui-avatar-group.js +1 -1
  5. package/components/ui-breadcrumb-item/ui-breadcrumb-item.html +60 -0
  6. package/components/ui-breadcrumbs/ui-breadcrumbs.html +31 -0
  7. package/components/ui-card/ui-card.html +55 -0
  8. package/components/ui-combobox/ui-combobox.js +2 -2
  9. package/components/ui-context-menu/ui-context-menu.js +4 -4
  10. package/components/ui-cover/ui-cover.html +36 -0
  11. package/components/ui-description-item/ui-description-item.html +46 -0
  12. package/components/ui-description-list/ui-description-list.html +37 -0
  13. package/components/ui-icon/ui-icon.js +1 -1
  14. package/components/ui-list/ui-list.html +33 -0
  15. package/components/ui-list-item/ui-list-item.html +146 -0
  16. package/components/ui-menu/ui-menu.js +3 -3
  17. package/components/ui-page-header/ui-page-header.html +97 -0
  18. package/components/ui-radio/ui-radio.js +1 -1
  19. package/components/ui-radio-group/ui-radio-group.js +1 -1
  20. package/components/ui-section/ui-section.html +108 -0
  21. package/components/ui-spinner/ui-spinner.html +48 -0
  22. package/components/ui-status-message/ui-status-message.html +84 -0
  23. package/components/ui-text/ui-text.html +96 -0
  24. package/components/ui-tree/ui-tree.js +2 -2
  25. package/components/ui-tree-item/ui-tree-item.js +3 -3
  26. package/dist/index.js +1 -1
  27. package/editor/icons.d.ts +5 -0
  28. package/editor/index.js +6 -1
  29. package/package.json +1 -1
  30. package/styles/ui-avatar-group.css +6 -6
  31. package/styles/ui-breadcrumb-item.css +57 -0
  32. package/styles/ui-breadcrumbs.css +32 -0
  33. package/styles/ui-card.css +51 -0
  34. package/styles/ui-cover.css +35 -0
  35. package/styles/ui-description-item.css +43 -0
  36. package/styles/ui-description-list.css +38 -0
  37. package/styles/ui-list-item.css +146 -0
  38. package/styles/ui-list.css +33 -0
  39. package/styles/ui-page-header.css +89 -0
  40. package/styles/ui-section.css +94 -0
  41. package/styles/ui-spinner.css +42 -0
  42. package/styles/ui-status-message.css +72 -0
  43. package/styles/ui-text.css +85 -0
  44. package/vanilla/UiBreadcrumbItem.d.ts +14 -0
  45. package/vanilla/UiBreadcrumbItem.js +38 -0
  46. package/vanilla/UiBreadcrumbs.d.ts +14 -0
  47. package/vanilla/UiBreadcrumbs.js +39 -0
  48. package/vanilla/UiCard.d.ts +17 -0
  49. package/vanilla/UiCard.js +32 -0
  50. package/vanilla/UiCover.d.ts +14 -0
  51. package/vanilla/UiCover.js +28 -0
  52. package/vanilla/UiDescriptionItem.d.ts +14 -0
  53. package/vanilla/UiDescriptionItem.js +39 -0
  54. package/vanilla/UiDescriptionList.d.ts +14 -0
  55. package/vanilla/UiDescriptionList.js +28 -0
  56. package/vanilla/UiList.d.ts +14 -0
  57. package/vanilla/UiList.js +29 -0
  58. package/vanilla/UiListItem.d.ts +15 -0
  59. package/vanilla/UiListItem.js +77 -0
  60. package/vanilla/UiPageHeader.d.ts +14 -0
  61. package/vanilla/UiPageHeader.js +78 -0
  62. package/vanilla/UiSection.d.ts +16 -0
  63. package/vanilla/UiSection.js +64 -0
  64. package/vanilla/UiSpinner.d.ts +15 -0
  65. package/vanilla/UiSpinner.js +23 -0
  66. package/vanilla/UiStatusMessage.d.ts +16 -0
  67. package/vanilla/UiStatusMessage.js +53 -0
  68. package/vanilla/UiText.d.ts +20 -0
  69. package/vanilla/UiText.js +38 -0
  70. package/vanilla/index.js +13 -0
  71. package/vue/UiAvatarGroup.vue +6 -6
  72. package/vue/UiBreadcrumbItem.d.ts +18 -0
  73. package/vue/UiBreadcrumbItem.js +2 -0
  74. package/vue/UiBreadcrumbItem.vue +101 -0
  75. package/vue/UiBreadcrumbs.d.ts +18 -0
  76. package/vue/UiBreadcrumbs.js +2 -0
  77. package/vue/UiBreadcrumbs.vue +45 -0
  78. package/vue/UiCard.d.ts +24 -0
  79. package/vue/UiCard.js +2 -0
  80. package/vue/UiCard.vue +82 -0
  81. package/vue/UiCover.d.ts +18 -0
  82. package/vue/UiCover.js +2 -0
  83. package/vue/UiCover.vue +57 -0
  84. package/vue/UiDescriptionItem.d.ts +18 -0
  85. package/vue/UiDescriptionItem.js +2 -0
  86. package/vue/UiDescriptionItem.vue +58 -0
  87. package/vue/UiDescriptionList.d.ts +18 -0
  88. package/vue/UiDescriptionList.js +2 -0
  89. package/vue/UiDescriptionList.vue +62 -0
  90. package/vue/UiIconButton.d.ts +1 -1
  91. package/vue/UiList.d.ts +18 -0
  92. package/vue/UiList.js +2 -0
  93. package/vue/UiList.vue +60 -0
  94. package/vue/UiListItem.d.ts +26 -0
  95. package/vue/UiListItem.js +2 -0
  96. package/vue/UiListItem.vue +171 -0
  97. package/vue/UiPageHeader.d.ts +26 -0
  98. package/vue/UiPageHeader.js +2 -0
  99. package/vue/UiPageHeader.vue +118 -0
  100. package/vue/UiSection.d.ts +26 -0
  101. package/vue/UiSection.js +2 -0
  102. package/vue/UiSection.vue +128 -0
  103. package/vue/UiSpinner.d.ts +10 -0
  104. package/vue/UiSpinner.js +2 -0
  105. package/vue/UiSpinner.vue +87 -0
  106. package/vue/UiStatusMessage.d.ts +24 -0
  107. package/vue/UiStatusMessage.js +2 -0
  108. package/vue/UiStatusMessage.vue +121 -0
  109. package/vue/UiText.d.ts +30 -0
  110. package/vue/UiText.js +2 -0
  111. package/vue/UiText.vue +125 -0
  112. package/vue/chunks/UiAvatarGroup.js +1 -1
  113. package/vue/chunks/UiBreadcrumbItem.js +50 -0
  114. package/vue/chunks/UiBreadcrumbs.js +19 -0
  115. package/vue/chunks/UiCard.js +31 -0
  116. package/vue/chunks/UiCover.js +21 -0
  117. package/vue/chunks/UiDescriptionItem.js +16 -0
  118. package/vue/chunks/UiDescriptionList.js +21 -0
  119. package/vue/chunks/UiList.js +24 -0
  120. package/vue/chunks/UiListItem.js +39 -0
  121. package/vue/chunks/UiPageHeader.js +35 -0
  122. package/vue/chunks/UiSection.js +34 -0
  123. package/vue/chunks/UiSpinner.js +64 -0
  124. package/vue/chunks/UiStatusMessage.js +54 -0
  125. package/vue/chunks/UiText.js +40 -0
  126. package/vue/components.css +661 -29
  127. package/vue/index.d.ts +13 -0
  128. package/vue/index.js +15 -2
@@ -0,0 +1,15 @@
1
+ // Generated by HTML Next 1.0.0-alpha.5 for Vanilla DOM. Do not edit.
2
+ export interface UiListItemEventMap {
3
+ }
4
+ export interface UiListItemElement extends HTMLLIElement {
5
+ addEventListener<K extends keyof UiListItemEventMap>(type: K, listener: (this: UiListItemElement, event: UiListItemEventMap[K]) => unknown, options?: boolean | AddEventListenerOptions): void;
6
+ removeEventListener<K extends keyof UiListItemEventMap>(type: K, listener: (this: UiListItemElement, event: UiListItemEventMap[K]) => unknown, options?: boolean | EventListenerOptions): void;
7
+ }
8
+ export interface UiListItemProps {
9
+ current?: boolean | null;
10
+ variant?: "row" | "card" | null;
11
+ attributes?: Readonly<Record<string, string | number | boolean | null | undefined>>;
12
+ children?: readonly (string | Node)[];
13
+ slots?: Readonly<Record<string, readonly (string | Node)[]>>;
14
+ }
15
+ export declare function createUiListItem(props?: UiListItemProps): UiListItemElement;
@@ -0,0 +1,77 @@
1
+ // Generated by HTML Next 1.0.0-alpha.5 for Vanilla DOM. Do not edit.
2
+ import { manageGeneratedProps } from "@nextwebwg/html-next/generated-runtime";
3
+ import "../styles/ui-list-item.css";
4
+
5
+ export function createUiListItem(options = {}) {
6
+ const { attributes = {}, children = [], slots = {}, as, ...componentProps } = options;
7
+ const projected = [];
8
+ const prop0 = componentProps["current"] === undefined ? false : componentProps["current"];
9
+ const prop1 = componentProps["variant"] === undefined ? "row" : componentProps["variant"];
10
+ const element = document.createElement("li");
11
+ for (const [name, value] of Object.entries(attributes)) {
12
+ if (value === null || value === undefined || value === false) continue;
13
+ element.setAttribute(name, value === true ? "" : String(value));
14
+ }
15
+ const value0 = prop0;
16
+ if (typeof value0 === "boolean") element.setAttribute("aria-current", String(value0));
17
+ else element.removeAttribute("aria-current");
18
+ element.setAttribute("data-component", "ui-list-item");
19
+ const element0 = document.createElement("span");
20
+ element0.setAttribute("class", "leading");
21
+ if (slots["leading"] ?? [].length > 0) {
22
+ for (const child of slots["leading"] ?? []) {
23
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
24
+ projected.push([node, "leading"]);
25
+ element0.append(node);
26
+ }
27
+ } else {
28
+ }
29
+ element.append(element0);
30
+ const element1 = document.createElement("span");
31
+ element1.setAttribute("class", "content");
32
+ const element2 = document.createElement("span");
33
+ element2.setAttribute("class", "title");
34
+ if (children.length > 0) {
35
+ for (const child of children) {
36
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
37
+ projected.push([node, ""]);
38
+ element2.append(node);
39
+ }
40
+ } else {
41
+ }
42
+ element1.append(element2);
43
+ const element3 = document.createElement("span");
44
+ element3.setAttribute("class", "description");
45
+ if (slots["description"] ?? [].length > 0) {
46
+ for (const child of slots["description"] ?? []) {
47
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
48
+ projected.push([node, "description"]);
49
+ element3.append(node);
50
+ }
51
+ } else {
52
+ }
53
+ element1.append(element3);
54
+ element.append(element1);
55
+ const element4 = document.createElement("span");
56
+ element4.setAttribute("class", "trailing");
57
+ if (slots["trailing"] ?? [].length > 0) {
58
+ for (const child of slots["trailing"] ?? []) {
59
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
60
+ projected.push([node, "trailing"]);
61
+ element4.append(node);
62
+ }
63
+ } else {
64
+ }
65
+ element.append(element4);
66
+ manageGeneratedProps(element, [
67
+ { name: "current", attribute: "data-current", value: componentProps["current"], default: false, type: "boolean", required: false },
68
+ { name: "variant", attribute: "data-variant", value: componentProps["variant"], default: "row", type: ["row","card"], required: false },
69
+ ], (name, value) => {
70
+ if (name === "current") {
71
+ if (value === null || value === undefined) element.removeAttribute("aria-current");
72
+ else element.setAttribute("aria-current", String(value));
73
+ }
74
+ });
75
+ return element;
76
+ }
77
+
@@ -0,0 +1,14 @@
1
+ // Generated by HTML Next 1.0.0-alpha.5 for Vanilla DOM. Do not edit.
2
+ export interface UiPageHeaderEventMap {
3
+ }
4
+ export interface UiPageHeaderElement extends HTMLElement {
5
+ addEventListener<K extends keyof UiPageHeaderEventMap>(type: K, listener: (this: UiPageHeaderElement, event: UiPageHeaderEventMap[K]) => unknown, options?: boolean | AddEventListenerOptions): void;
6
+ removeEventListener<K extends keyof UiPageHeaderEventMap>(type: K, listener: (this: UiPageHeaderElement, event: UiPageHeaderEventMap[K]) => unknown, options?: boolean | EventListenerOptions): void;
7
+ }
8
+ export interface UiPageHeaderProps {
9
+ align?: "start" | "center" | null;
10
+ attributes?: Readonly<Record<string, string | number | boolean | null | undefined>>;
11
+ children?: readonly (string | Node)[];
12
+ slots?: Readonly<Record<string, readonly (string | Node)[]>>;
13
+ }
14
+ export declare function createUiPageHeader(props?: UiPageHeaderProps): UiPageHeaderElement;
@@ -0,0 +1,78 @@
1
+ // Generated by HTML Next 1.0.0-alpha.5 for Vanilla DOM. Do not edit.
2
+ import { manageGeneratedProps } from "@nextwebwg/html-next/generated-runtime";
3
+ import "../styles/ui-page-header.css";
4
+
5
+ export function createUiPageHeader(options = {}) {
6
+ const { attributes = {}, children = [], slots = {}, as, ...componentProps } = options;
7
+ const projected = [];
8
+ const prop0 = componentProps["align"] === undefined ? "start" : componentProps["align"];
9
+ const element = document.createElement("header");
10
+ for (const [name, value] of Object.entries(attributes)) {
11
+ if (value === null || value === undefined || value === false) continue;
12
+ element.setAttribute(name, value === true ? "" : String(value));
13
+ }
14
+ element.setAttribute("data-component", "ui-page-header");
15
+ const element0 = document.createElement("span");
16
+ element0.setAttribute("class", "leading");
17
+ if (slots["leading"] ?? [].length > 0) {
18
+ for (const child of slots["leading"] ?? []) {
19
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
20
+ projected.push([node, "leading"]);
21
+ element0.append(node);
22
+ }
23
+ } else {
24
+ }
25
+ element.append(element0);
26
+ const element1 = document.createElement("span");
27
+ element1.setAttribute("class", "copy");
28
+ const element2 = document.createElement("span");
29
+ element2.setAttribute("class", "eyebrow");
30
+ if (slots["eyebrow"] ?? [].length > 0) {
31
+ for (const child of slots["eyebrow"] ?? []) {
32
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
33
+ projected.push([node, "eyebrow"]);
34
+ element2.append(node);
35
+ }
36
+ } else {
37
+ }
38
+ element1.append(element2);
39
+ const element3 = document.createElement("h1");
40
+ element3.setAttribute("class", "title");
41
+ if (children.length > 0) {
42
+ for (const child of children) {
43
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
44
+ projected.push([node, ""]);
45
+ element3.append(node);
46
+ }
47
+ } else {
48
+ }
49
+ element1.append(element3);
50
+ const element4 = document.createElement("span");
51
+ element4.setAttribute("class", "description");
52
+ if (slots["description"] ?? [].length > 0) {
53
+ for (const child of slots["description"] ?? []) {
54
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
55
+ projected.push([node, "description"]);
56
+ element4.append(node);
57
+ }
58
+ } else {
59
+ }
60
+ element1.append(element4);
61
+ element.append(element1);
62
+ const element5 = document.createElement("span");
63
+ element5.setAttribute("class", "actions");
64
+ if (slots["actions"] ?? [].length > 0) {
65
+ for (const child of slots["actions"] ?? []) {
66
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
67
+ projected.push([node, "actions"]);
68
+ element5.append(node);
69
+ }
70
+ } else {
71
+ }
72
+ element.append(element5);
73
+ manageGeneratedProps(element, [
74
+ { name: "align", attribute: "data-align", value: componentProps["align"], default: "start", type: ["start","center"], required: false },
75
+ ]);
76
+ return element;
77
+ }
78
+
@@ -0,0 +1,16 @@
1
+ // Generated by HTML Next 1.0.0-alpha.5 for Vanilla DOM. Do not edit.
2
+ export interface UiSectionEventMap {
3
+ }
4
+ export interface UiSectionElement extends HTMLElement {
5
+ addEventListener<K extends keyof UiSectionEventMap>(type: K, listener: (this: UiSectionElement, event: UiSectionEventMap[K]) => unknown, options?: boolean | AddEventListenerOptions): void;
6
+ removeEventListener<K extends keyof UiSectionEventMap>(type: K, listener: (this: UiSectionElement, event: UiSectionEventMap[K]) => unknown, options?: boolean | EventListenerOptions): void;
7
+ }
8
+ export interface UiSectionProps {
9
+ heading?: string | null;
10
+ tone?: "neutral" | "danger" | null;
11
+ variant?: "plain" | "card" | "divided" | null;
12
+ attributes?: Readonly<Record<string, string | number | boolean | null | undefined>>;
13
+ children?: readonly (string | Node)[];
14
+ slots?: Readonly<Record<string, readonly (string | Node)[]>>;
15
+ }
16
+ export declare function createUiSection(props?: UiSectionProps): UiSectionElement;
@@ -0,0 +1,64 @@
1
+ // Generated by HTML Next 1.0.0-alpha.5 for Vanilla DOM. Do not edit.
2
+ import { manageComponentLifecycle } from "@nextwebwg/html-next/runtime";
3
+ import "../styles/ui-section.css";
4
+
5
+ const definition = {...{"contract":{"tag":"ui-section","props":{"heading":{"type":"string","required":false,"target":{"attribute":"heading"},"default":""},"tone":{"type":{"enum":["neutral","danger"]},"required":false,"target":{"attribute":"tone"},"default":"neutral"},"variant":{"type":{"enum":["plain","card","divided"]},"required":false,"target":{"attribute":"variant"},"default":"plain"}}},"template":{"kind":"element","name":"section","attributes":[],"children":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"head"}],"children":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"copy"}],"children":[{"kind":"element","name":"h2","attributes":[{"kind":"literal","name":"class","value":"heading"},{"kind":"attribute","name":"hidden","expression":"not heading","expressionPlan":{"source":"not heading","ast":{"kind":"unary","op":"not","operand":{"kind":"id","name":"heading"}},"dependencies":["heading"]}}],"children":[{"kind":"element","name":"template","attributes":[{"kind":"directive","name":"value","expression":"heading","expressionPlan":{"source":"heading","ast":{"kind":"id","name":"heading"},"dependencies":["heading"]}}],"children":[]}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"description"}],"children":[{"kind":"slot","fallback":[],"name":"description"}]}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"actions"}],"children":[{"kind":"slot","fallback":[],"name":"actions"}]}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"body"}],"children":[{"kind":"slot"}]}]},"declarations":[],"root":{"kind":"native","element":"section","choices":["section"]}},source:{file:import.meta.url},css:""};
6
+
7
+ export function createUiSection(options = {}) {
8
+ const { attributes = {}, children = [], slots = {}, as, ...componentProps } = options;
9
+ const projected = [];
10
+ const element = document.createElement("section");
11
+ for (const [name, value] of Object.entries(attributes)) {
12
+ if (value === null || value === undefined || value === false) continue;
13
+ element.setAttribute(name, value === true ? "" : String(value));
14
+ }
15
+ element.setAttribute("data-component", "ui-section");
16
+ const element0 = document.createElement("span");
17
+ element0.setAttribute("class", "head");
18
+ const element1 = document.createElement("span");
19
+ element1.setAttribute("class", "copy");
20
+ const element2 = document.createElement("h2");
21
+ element2.setAttribute("class", "heading");
22
+ const element3 = document.createElement("template");
23
+ element2.append(element3);
24
+ element1.append(element2);
25
+ const element4 = document.createElement("span");
26
+ element4.setAttribute("class", "description");
27
+ if (slots["description"] ?? [].length > 0) {
28
+ for (const child of slots["description"] ?? []) {
29
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
30
+ projected.push([node, "description"]);
31
+ element4.append(node);
32
+ }
33
+ } else {
34
+ }
35
+ element1.append(element4);
36
+ element0.append(element1);
37
+ const element5 = document.createElement("span");
38
+ element5.setAttribute("class", "actions");
39
+ if (slots["actions"] ?? [].length > 0) {
40
+ for (const child of slots["actions"] ?? []) {
41
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
42
+ projected.push([node, "actions"]);
43
+ element5.append(node);
44
+ }
45
+ } else {
46
+ }
47
+ element0.append(element5);
48
+ element.append(element0);
49
+ const element6 = document.createElement("span");
50
+ element6.setAttribute("class", "body");
51
+ if (children.length > 0) {
52
+ for (const child of children) {
53
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
54
+ projected.push([node, ""]);
55
+ element6.append(node);
56
+ }
57
+ } else {
58
+ }
59
+ element.append(element6);
60
+ manageComponentLifecycle(element, definition, { props: componentProps, projected,
61
+ });
62
+ return element;
63
+ }
64
+
@@ -0,0 +1,15 @@
1
+ // Generated by HTML Next 1.0.0-alpha.5 for Vanilla DOM. Do not edit.
2
+ export interface UiSpinnerEventMap {
3
+ }
4
+ export interface UiSpinnerElement extends HTMLSpanElement {
5
+ addEventListener<K extends keyof UiSpinnerEventMap>(type: K, listener: (this: UiSpinnerElement, event: UiSpinnerEventMap[K]) => unknown, options?: boolean | AddEventListenerOptions): void;
6
+ removeEventListener<K extends keyof UiSpinnerEventMap>(type: K, listener: (this: UiSpinnerElement, event: UiSpinnerEventMap[K]) => unknown, options?: boolean | EventListenerOptions): void;
7
+ }
8
+ export interface UiSpinnerProps {
9
+ label?: string | null;
10
+ size?: "sm" | "md" | null;
11
+ attributes?: Readonly<Record<string, string | number | boolean | null | undefined>>;
12
+ children?: readonly (string | Node)[];
13
+ slots?: Readonly<Record<string, readonly (string | Node)[]>>;
14
+ }
15
+ export declare function createUiSpinner(props?: UiSpinnerProps): UiSpinnerElement;
@@ -0,0 +1,23 @@
1
+ // Generated by HTML Next 1.0.0-alpha.5 for Vanilla DOM. Do not edit.
2
+ import { manageComponentLifecycle } from "@nextwebwg/html-next/runtime";
3
+ import "../styles/ui-spinner.css";
4
+
5
+ const definition = {...{"contract":{"tag":"ui-spinner","props":{"label":{"type":"string","required":false,"target":{"attribute":"label"},"default":""},"size":{"type":{"enum":["sm","md"]},"required":false,"target":{"attribute":"size"},"default":"md"}}},"template":{"kind":"element","name":"span","attributes":[{"kind":"attribute","name":"role","expression":"{ true: 'status', false: null }[format('%s', label != '')]","expressionPlan":{"source":"{ true: 'status', false: null }[format('%s', label != '')]","ast":{"kind":"index","object":{"kind":"object","pairs":[{"key":"true","value":{"kind":"literal","value":"status"}},{"key":"false","value":{"kind":"literal","value":null}}]},"index":{"kind":"call","fn":"format","args":[{"kind":"literal","value":"%s"},{"kind":"binary","op":"!=","left":{"kind":"id","name":"label"},"right":{"kind":"literal","value":""}}]}},"dependencies":["label"]}},{"kind":"attribute","name":"aria-label","expression":"{ true: label, false: null }[format('%s', label != '')]","expressionPlan":{"source":"{ true: label, false: null }[format('%s', label != '')]","ast":{"kind":"index","object":{"kind":"object","pairs":[{"key":"true","value":{"kind":"id","name":"label"}},{"key":"false","value":{"kind":"literal","value":null}}]},"index":{"kind":"call","fn":"format","args":[{"kind":"literal","value":"%s"},{"kind":"binary","op":"!=","left":{"kind":"id","name":"label"},"right":{"kind":"literal","value":""}}]}},"dependencies":["label"]}},{"kind":"attribute","name":"aria-hidden","expression":"{ true: null, false: 'true' }[format('%s', label != '')]","expressionPlan":{"source":"{ true: null, false: 'true' }[format('%s', label != '')]","ast":{"kind":"index","object":{"kind":"object","pairs":[{"key":"true","value":{"kind":"literal","value":null}},{"key":"false","value":{"kind":"literal","value":"true"}}]},"index":{"kind":"call","fn":"format","args":[{"kind":"literal","value":"%s"},{"kind":"binary","op":"!=","left":{"kind":"id","name":"label"},"right":{"kind":"literal","value":""}}]}},"dependencies":["label"]}}],"children":[{"kind":"element","name":"ui-icon","attributes":[{"kind":"literal","name":"name","value":"loader"}],"children":[]}]},"declarations":[],"root":{"kind":"native","element":"span","choices":["span"]}},source:{file:import.meta.url},css:""};
6
+
7
+ export function createUiSpinner(options = {}) {
8
+ const { attributes = {}, children = [], slots = {}, as, ...componentProps } = options;
9
+ const projected = [];
10
+ const element = document.createElement("span");
11
+ for (const [name, value] of Object.entries(attributes)) {
12
+ if (value === null || value === undefined || value === false) continue;
13
+ element.setAttribute(name, value === true ? "" : String(value));
14
+ }
15
+ element.setAttribute("data-component", "ui-spinner");
16
+ const element0 = document.createElement("ui-icon");
17
+ element0.setAttribute("name", "loader");
18
+ element.append(element0);
19
+ manageComponentLifecycle(element, definition, { props: componentProps, projected,
20
+ });
21
+ return element;
22
+ }
23
+
@@ -0,0 +1,16 @@
1
+ // Generated by HTML Next 1.0.0-alpha.5 for Vanilla DOM. Do not edit.
2
+ export interface UiStatusMessageEventMap {
3
+ }
4
+ export interface UiStatusMessageElement extends HTMLDivElement {
5
+ addEventListener<K extends keyof UiStatusMessageEventMap>(type: K, listener: (this: UiStatusMessageElement, event: UiStatusMessageEventMap[K]) => unknown, options?: boolean | AddEventListenerOptions): void;
6
+ removeEventListener<K extends keyof UiStatusMessageEventMap>(type: K, listener: (this: UiStatusMessageElement, event: UiStatusMessageEventMap[K]) => unknown, options?: boolean | EventListenerOptions): void;
7
+ }
8
+ export interface UiStatusMessageProps {
9
+ heading?: string | null;
10
+ kind?: "empty" | "loading" | "error" | null;
11
+ layout?: "inline" | "panel" | "fill" | null;
12
+ attributes?: Readonly<Record<string, string | number | boolean | null | undefined>>;
13
+ children?: readonly (string | Node)[];
14
+ slots?: Readonly<Record<string, readonly (string | Node)[]>>;
15
+ }
16
+ export declare function createUiStatusMessage(props?: UiStatusMessageProps): UiStatusMessageElement;
@@ -0,0 +1,53 @@
1
+ // Generated by HTML Next 1.0.0-alpha.5 for Vanilla DOM. Do not edit.
2
+ import { manageComponentLifecycle } from "@nextwebwg/html-next/runtime";
3
+ import "../styles/ui-status-message.css";
4
+
5
+ const definition = {...{"contract":{"tag":"ui-status-message","props":{"heading":{"type":"string","required":false,"target":{"attribute":"heading"},"default":""},"kind":{"type":{"enum":["empty","loading","error"]},"required":false,"target":{"attribute":"kind"},"default":"empty"},"layout":{"type":{"enum":["inline","panel","fill"]},"required":false,"target":{"attribute":"layout"},"default":"inline"}}},"template":{"kind":"element","name":"div","attributes":[{"kind":"attribute","name":"role","expression":"{ true: 'alert', false: 'status' }[format('%s', kind = 'error')]","expressionPlan":{"source":"{ true: 'alert', false: 'status' }[format('%s', kind = 'error')]","ast":{"kind":"index","object":{"kind":"object","pairs":[{"key":"true","value":{"kind":"literal","value":"alert"}},{"key":"false","value":{"kind":"literal","value":"status"}}]},"index":{"kind":"call","fn":"format","args":[{"kind":"literal","value":"%s"},{"kind":"binary","op":"=","left":{"kind":"id","name":"kind"},"right":{"kind":"literal","value":"error"}}]}},"dependencies":["kind"]}}],"children":[{"kind":"element","name":"ui-spinner","attributes":[{"kind":"literal","name":"size","value":"sm"},{"kind":"attribute","name":"hidden","expression":"kind != 'loading'","expressionPlan":{"source":"kind != 'loading'","ast":{"kind":"binary","op":"!=","left":{"kind":"id","name":"kind"},"right":{"kind":"literal","value":"loading"}},"dependencies":["kind"]}}],"children":[]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"copy"}],"children":[{"kind":"element","name":"strong","attributes":[{"kind":"literal","name":"class","value":"heading"},{"kind":"attribute","name":"hidden","expression":"not heading","expressionPlan":{"source":"not heading","ast":{"kind":"unary","op":"not","operand":{"kind":"id","name":"heading"}},"dependencies":["heading"]}}],"children":[{"kind":"element","name":"template","attributes":[{"kind":"directive","name":"value","expression":"heading","expressionPlan":{"source":"heading","ast":{"kind":"id","name":"heading"},"dependencies":["heading"]}}],"children":[]}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"message"}],"children":[{"kind":"slot"}]}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"action"}],"children":[{"kind":"slot","fallback":[],"name":"action"}]}]},"declarations":[],"root":{"kind":"native","element":"div","choices":["div"]}},source:{file:import.meta.url},css:""};
6
+
7
+ export function createUiStatusMessage(options = {}) {
8
+ const { attributes = {}, children = [], slots = {}, as, ...componentProps } = options;
9
+ const projected = [];
10
+ const element = document.createElement("div");
11
+ for (const [name, value] of Object.entries(attributes)) {
12
+ if (value === null || value === undefined || value === false) continue;
13
+ element.setAttribute(name, value === true ? "" : String(value));
14
+ }
15
+ element.setAttribute("data-component", "ui-status-message");
16
+ const element0 = document.createElement("ui-spinner");
17
+ element0.setAttribute("size", "sm");
18
+ element.append(element0);
19
+ const element1 = document.createElement("span");
20
+ element1.setAttribute("class", "copy");
21
+ const element2 = document.createElement("strong");
22
+ element2.setAttribute("class", "heading");
23
+ const element3 = document.createElement("template");
24
+ element2.append(element3);
25
+ element1.append(element2);
26
+ const element4 = document.createElement("span");
27
+ element4.setAttribute("class", "message");
28
+ if (children.length > 0) {
29
+ for (const child of children) {
30
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
31
+ projected.push([node, ""]);
32
+ element4.append(node);
33
+ }
34
+ } else {
35
+ }
36
+ element1.append(element4);
37
+ element.append(element1);
38
+ const element5 = document.createElement("span");
39
+ element5.setAttribute("class", "action");
40
+ if (slots["action"] ?? [].length > 0) {
41
+ for (const child of slots["action"] ?? []) {
42
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
43
+ projected.push([node, "action"]);
44
+ element5.append(node);
45
+ }
46
+ } else {
47
+ }
48
+ element.append(element5);
49
+ manageComponentLifecycle(element, definition, { props: componentProps, projected,
50
+ });
51
+ return element;
52
+ }
53
+
@@ -0,0 +1,20 @@
1
+ // Generated by HTML Next 1.0.0-alpha.5 for Vanilla DOM. Do not edit.
2
+ export interface UiTextEventMap {
3
+ }
4
+ export interface UiTextElement extends HTMLParagraphElement {
5
+ addEventListener<K extends keyof UiTextEventMap>(type: K, listener: (this: UiTextElement, event: UiTextEventMap[K]) => unknown, options?: boolean | AddEventListenerOptions): void;
6
+ removeEventListener<K extends keyof UiTextEventMap>(type: K, listener: (this: UiTextElement, event: UiTextEventMap[K]) => unknown, options?: boolean | EventListenerOptions): void;
7
+ }
8
+ export interface UiTextProps {
9
+ align?: "start" | "center" | null;
10
+ size?: "inherit" | "xs" | "sm" | "md" | "lg" | null;
11
+ tone?: "default" | "secondary" | "muted" | "accent" | "danger" | "success" | null;
12
+ truncate?: boolean | null;
13
+ variant?: "body" | "eyebrow" | "code" | null;
14
+ weight?: "inherit" | "normal" | "medium" | "semibold" | null;
15
+ attributes?: Readonly<Record<string, string | number | boolean | null | undefined>>;
16
+ children?: readonly (string | Node)[];
17
+ slots?: Readonly<Record<string, readonly (string | Node)[]>>;
18
+ as?: "p" | "span" | "div" | "small" | "strong" | "label";
19
+ }
20
+ export declare function createUiText(props?: UiTextProps): UiTextElement;
@@ -0,0 +1,38 @@
1
+ // Generated by HTML Next 1.0.0-alpha.5 for Vanilla DOM. Do not edit.
2
+ import { manageGeneratedProps } from "@nextwebwg/html-next/generated-runtime";
3
+ import "../styles/ui-text.css";
4
+
5
+ export function createUiText(options = {}) {
6
+ const { attributes = {}, children = [], slots = {}, as, ...componentProps } = options;
7
+ const projected = [];
8
+ const prop0 = componentProps["align"] === undefined ? "start" : componentProps["align"];
9
+ const prop1 = componentProps["size"] === undefined ? "inherit" : componentProps["size"];
10
+ const prop2 = componentProps["tone"] === undefined ? "default" : componentProps["tone"];
11
+ const prop3 = componentProps["truncate"] === undefined ? false : componentProps["truncate"];
12
+ const prop4 = componentProps["variant"] === undefined ? "body" : componentProps["variant"];
13
+ const prop5 = componentProps["weight"] === undefined ? "inherit" : componentProps["weight"];
14
+ const element = document.createElement(as ?? "p");
15
+ for (const [name, value] of Object.entries(attributes)) {
16
+ if (value === null || value === undefined || value === false) continue;
17
+ element.setAttribute(name, value === true ? "" : String(value));
18
+ }
19
+ element.setAttribute("data-component", "ui-text");
20
+ if (children.length > 0) {
21
+ for (const child of children) {
22
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
23
+ projected.push([node, ""]);
24
+ element.append(node);
25
+ }
26
+ } else {
27
+ }
28
+ manageGeneratedProps(element, [
29
+ { name: "align", attribute: "data-align", value: componentProps["align"], default: "start", type: ["start","center"], required: false },
30
+ { name: "size", attribute: "data-size", value: componentProps["size"], default: "inherit", type: ["inherit","xs","sm","md","lg"], required: false },
31
+ { name: "tone", attribute: "data-tone", value: componentProps["tone"], default: "default", type: ["default","secondary","muted","accent","danger","success"], required: false },
32
+ { name: "truncate", attribute: "data-truncate", value: componentProps["truncate"], default: false, type: "boolean", required: false },
33
+ { name: "variant", attribute: "data-variant", value: componentProps["variant"], default: "body", type: ["body","eyebrow","code"], required: false },
34
+ { name: "weight", attribute: "data-weight", value: componentProps["weight"], default: "inherit", type: ["inherit","normal","medium","semibold"], required: false },
35
+ ]);
36
+ return element;
37
+ }
38
+
package/vanilla/index.js CHANGED
@@ -2,13 +2,19 @@ export * from "./UiAffordanceScope.js";
2
2
  export * from "./UiAvatar.js";
3
3
  export * from "./UiAvatarGroup.js";
4
4
  export * from "./UiBadge.js";
5
+ export * from "./UiBreadcrumbItem.js";
6
+ export * from "./UiBreadcrumbs.js";
5
7
  export * from "./UiButton.js";
6
8
  export * from "./UiCallout.js";
9
+ export * from "./UiCard.js";
7
10
  export * from "./UiCheckbox.js";
8
11
  export * from "./UiCluster.js";
9
12
  export * from "./UiCombobox.js";
10
13
  export * from "./UiContainer.js";
11
14
  export * from "./UiContextMenu.js";
15
+ export * from "./UiCover.js";
16
+ export * from "./UiDescriptionItem.js";
17
+ export * from "./UiDescriptionList.js";
12
18
  export * from "./UiDialog.js";
13
19
  export * from "./UiDisclosure.js";
14
20
  export * from "./UiEditable.js";
@@ -25,8 +31,11 @@ export * from "./UiGrid.js";
25
31
  export * from "./UiIcon.js";
26
32
  export * from "./UiIconButton.js";
27
33
  export * from "./UiInput.js";
34
+ export * from "./UiList.js";
35
+ export * from "./UiListItem.js";
28
36
  export * from "./UiMenu.js";
29
37
  export * from "./UiMenuItem.js";
38
+ export * from "./UiPageHeader.js";
30
39
  export * from "./UiPopover.js";
31
40
  export * from "./UiRadio.js";
32
41
  export * from "./UiRadioGroup.js";
@@ -34,13 +43,17 @@ export * from "./UiReel.js";
34
43
  export * from "./UiScrollArea.js";
35
44
  export * from "./UiSearchResultRow.js";
36
45
  export * from "./UiSearchShell.js";
46
+ export * from "./UiSection.js";
37
47
  export * from "./UiSelect.js";
38
48
  export * from "./UiSeparator.js";
39
49
  export * from "./UiSidebar.js";
50
+ export * from "./UiSpinner.js";
40
51
  export * from "./UiStack.js";
52
+ export * from "./UiStatusMessage.js";
41
53
  export * from "./UiSwitch.js";
42
54
  export * from "./UiSwitcher.js";
43
55
  export * from "./UiTabs.js";
56
+ export * from "./UiText.js";
44
57
  export * from "./UiTextarea.js";
45
58
  export * from "./UiToastRegion.js";
46
59
  export * from "./UiTooltip.js";
@@ -47,10 +47,10 @@ useComponentHost(controllerModule.default, {
47
47
 
48
48
  <style scoped>
49
49
  [data-component~="ui-avatar-group"] {
50
- /* Avatars separate with a tight, crisp edge, matching Looma's 1px borders rather than the
51
- * diffuse elevation overlays use. */
52
- --_overlap-shadow: -2px 0 2px -1px rgba(0, 0, 0, 0.22);
53
- --_edge-ring: 0 0 0 1px rgba(0, 0, 0, 0.08);
50
+ /* Each avatar is ringed in the surface colour, so where one overlaps the next it reads as a
51
+ * whole circle set on top, not a shape cut into the one beneath. */
52
+ --_overlap-shadow: 0 0 0 0 transparent;
53
+ --_edge-ring: 0 0 0 2px var(--ui-surface);
54
54
 
55
55
  display: flex;
56
56
  align-items: center;
@@ -61,7 +61,7 @@ useComponentHost(controllerModule.default, {
61
61
  /* Overlap and the separating shadow are applied by the controller: slotted avatars are nested
62
62
  * component roots outside this style scope. */
63
63
  :slotted(*) {
64
- margin-inline-start: -0.625rem;
64
+ margin-inline-start: -0.5rem;
65
65
  flex-shrink: 0;
66
66
  border-radius: 999px;
67
67
  }
@@ -71,7 +71,7 @@ useComponentHost(controllerModule.default, {
71
71
  }
72
72
 
73
73
  .overflow {
74
- margin-inline-start: -0.625rem;
74
+ margin-inline-start: -0.5rem;
75
75
  display: inline-flex;
76
76
  align-items: center;
77
77
  justify-content: center;
@@ -0,0 +1,18 @@
1
+ type __VLS_Props = {
2
+ current?: boolean;
3
+ };
4
+ declare var __VLS_6: {};
5
+ type __VLS_Slots = {} & {
6
+ default?: (props: typeof __VLS_6) => any;
7
+ };
8
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
9
+ current: boolean;
10
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
12
+ declare const _default: typeof __VLS_export;
13
+ export default _default;
14
+ type __VLS_WithSlots<T, S> = T & {
15
+ new (): {
16
+ $slots: S;
17
+ };
18
+ };
@@ -0,0 +1,2 @@
1
+ import { t as UiBreadcrumbItem_default } from "./chunks/UiBreadcrumbItem.js";
2
+ export { UiBreadcrumbItem_default as default };