@threadlabs/looma 0.10.12 → 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.
- package/components/shared/editor.js +2 -26
- package/components/shared/icons.js +53 -0
- package/components/ui-avatar-group/ui-avatar-group.html +6 -6
- package/components/ui-avatar-group/ui-avatar-group.js +1 -1
- package/components/ui-breadcrumb-item/ui-breadcrumb-item.html +60 -0
- package/components/ui-breadcrumbs/ui-breadcrumbs.html +31 -0
- package/components/ui-card/ui-card.html +55 -0
- package/components/ui-combobox/ui-combobox.js +2 -2
- package/components/ui-context-menu/ui-context-menu.js +4 -4
- package/components/ui-cover/ui-cover.html +36 -0
- package/components/ui-description-item/ui-description-item.html +46 -0
- package/components/ui-description-list/ui-description-list.html +37 -0
- package/components/ui-icon/ui-icon.js +1 -1
- package/components/ui-menu/ui-menu.js +3 -3
- package/components/ui-page-header/ui-page-header.html +97 -0
- package/components/ui-radio/ui-radio.js +1 -1
- package/components/ui-radio-group/ui-radio-group.js +1 -1
- package/components/ui-section/ui-section.html +108 -0
- package/components/ui-spinner/ui-spinner.html +48 -0
- package/components/ui-status-message/ui-status-message.html +84 -0
- package/components/ui-text/ui-text.html +96 -0
- package/components/ui-tree/ui-tree.js +2 -2
- package/components/ui-tree-item/ui-tree-item.js +3 -3
- package/dist/index.js +1 -1
- package/editor/icons.d.ts +5 -0
- package/editor/index.js +6 -1
- package/package.json +1 -1
- package/styles/ui-avatar-group.css +6 -6
- package/styles/ui-breadcrumb-item.css +57 -0
- package/styles/ui-breadcrumbs.css +32 -0
- package/styles/ui-card.css +51 -0
- package/styles/ui-cover.css +35 -0
- package/styles/ui-description-item.css +43 -0
- package/styles/ui-description-list.css +38 -0
- package/styles/ui-page-header.css +89 -0
- package/styles/ui-section.css +94 -0
- package/styles/ui-spinner.css +42 -0
- package/styles/ui-status-message.css +72 -0
- package/styles/ui-text.css +85 -0
- package/vanilla/UiBreadcrumbItem.d.ts +14 -0
- package/vanilla/UiBreadcrumbItem.js +38 -0
- package/vanilla/UiBreadcrumbs.d.ts +14 -0
- package/vanilla/UiBreadcrumbs.js +39 -0
- package/vanilla/UiCard.d.ts +17 -0
- package/vanilla/UiCard.js +32 -0
- package/vanilla/UiCover.d.ts +14 -0
- package/vanilla/UiCover.js +28 -0
- package/vanilla/UiDescriptionItem.d.ts +14 -0
- package/vanilla/UiDescriptionItem.js +39 -0
- package/vanilla/UiDescriptionList.d.ts +14 -0
- package/vanilla/UiDescriptionList.js +28 -0
- package/vanilla/UiPageHeader.d.ts +14 -0
- package/vanilla/UiPageHeader.js +78 -0
- package/vanilla/UiSection.d.ts +16 -0
- package/vanilla/UiSection.js +64 -0
- package/vanilla/UiSpinner.d.ts +15 -0
- package/vanilla/UiSpinner.js +23 -0
- package/vanilla/UiStatusMessage.d.ts +16 -0
- package/vanilla/UiStatusMessage.js +53 -0
- package/vanilla/UiText.d.ts +20 -0
- package/vanilla/UiText.js +38 -0
- package/vanilla/index.js +11 -0
- package/vue/UiAvatarGroup.vue +6 -6
- package/vue/UiBreadcrumbItem.d.ts +18 -0
- package/vue/UiBreadcrumbItem.js +2 -0
- package/vue/UiBreadcrumbItem.vue +101 -0
- package/vue/UiBreadcrumbs.d.ts +18 -0
- package/vue/UiBreadcrumbs.js +2 -0
- package/vue/UiBreadcrumbs.vue +45 -0
- package/vue/UiCard.d.ts +24 -0
- package/vue/UiCard.js +2 -0
- package/vue/UiCard.vue +82 -0
- package/vue/UiCover.d.ts +18 -0
- package/vue/UiCover.js +2 -0
- package/vue/UiCover.vue +57 -0
- package/vue/UiDescriptionItem.d.ts +18 -0
- package/vue/UiDescriptionItem.js +2 -0
- package/vue/UiDescriptionItem.vue +58 -0
- package/vue/UiDescriptionList.d.ts +18 -0
- package/vue/UiDescriptionList.js +2 -0
- package/vue/UiDescriptionList.vue +62 -0
- package/vue/UiIconButton.d.ts +1 -1
- package/vue/UiPageHeader.d.ts +26 -0
- package/vue/UiPageHeader.js +2 -0
- package/vue/UiPageHeader.vue +118 -0
- package/vue/UiSection.d.ts +26 -0
- package/vue/UiSection.js +2 -0
- package/vue/UiSection.vue +128 -0
- package/vue/UiSpinner.d.ts +10 -0
- package/vue/UiSpinner.js +2 -0
- package/vue/UiSpinner.vue +87 -0
- package/vue/UiStatusMessage.d.ts +24 -0
- package/vue/UiStatusMessage.js +2 -0
- package/vue/UiStatusMessage.vue +121 -0
- package/vue/UiText.d.ts +30 -0
- package/vue/UiText.js +2 -0
- package/vue/UiText.vue +125 -0
- package/vue/chunks/UiAvatarGroup.js +1 -1
- package/vue/chunks/UiBreadcrumbItem.js +50 -0
- package/vue/chunks/UiBreadcrumbs.js +19 -0
- package/vue/chunks/UiCard.js +31 -0
- package/vue/chunks/UiCover.js +21 -0
- package/vue/chunks/UiDescriptionItem.js +16 -0
- package/vue/chunks/UiDescriptionList.js +21 -0
- package/vue/chunks/UiPageHeader.js +35 -0
- package/vue/chunks/UiSection.js +34 -0
- package/vue/chunks/UiSpinner.js +64 -0
- package/vue/chunks/UiStatusMessage.js +54 -0
- package/vue/chunks/UiText.js +40 -0
- package/vue/components.css +521 -29
- package/vue/index.d.ts +11 -0
- package/vue/index.js +13 -2
package/editor/icons.d.ts
CHANGED
|
@@ -4,16 +4,20 @@ export declare const LOOMA_ICONS: {
|
|
|
4
4
|
'align-center': IconNode;
|
|
5
5
|
'align-left': IconNode;
|
|
6
6
|
'align-right': IconNode;
|
|
7
|
+
'arrow-left': IconNode;
|
|
7
8
|
bold: IconNode;
|
|
8
9
|
braces: IconNode;
|
|
9
10
|
'circle-check': IconNode;
|
|
10
11
|
'circle-x': IconNode;
|
|
11
12
|
'chevron-down': IconNode;
|
|
12
13
|
'chevron-left': IconNode;
|
|
14
|
+
'chevron-right': IconNode;
|
|
13
15
|
'code-xml': IconNode;
|
|
14
16
|
columns: IconNode;
|
|
15
17
|
ellipsis: IconNode;
|
|
16
18
|
eraser: IconNode;
|
|
19
|
+
'file-text': IconNode;
|
|
20
|
+
folder: IconNode;
|
|
17
21
|
'grip-horizontal': IconNode;
|
|
18
22
|
'grip-vertical': IconNode;
|
|
19
23
|
'heading-1': IconNode;
|
|
@@ -26,6 +30,7 @@ export declare const LOOMA_ICONS: {
|
|
|
26
30
|
list: IconNode;
|
|
27
31
|
'list-ordered': IconNode;
|
|
28
32
|
'list-todo': IconNode;
|
|
33
|
+
loader: IconNode;
|
|
29
34
|
merge: IconNode;
|
|
30
35
|
'notebook-pen': IconNode;
|
|
31
36
|
minus: IconNode;
|
package/editor/index.js
CHANGED
|
@@ -1,23 +1,27 @@
|
|
|
1
1
|
import { n as TABLE_CELL_BACKGROUND_PRESETS, t as TABLE_CELL_BACKGROUND_OPTIONS } from "./chunks/table-backgrounds.js";
|
|
2
2
|
import { n as resolveTableCellAt, t as measureTableOverlayGeometry } from "./chunks/ui.js";
|
|
3
3
|
import { A as LOOMA_ACTIVE_BLOCK_CLASS, C as DEFAULT_MENTION_RESULT_LIMIT, D as LOOMA_CALLOUT_TONES, E as normalizeMentionResultLimit, M as LoomaActiveBlock, N as LoomaActiveBlockPluginKey, O as LoomaCallout, S as createLoomaMentionExtension, T as filterLoomaMentionItems, _ as getActiveTableCellBackground, a as handleTableAction, b as LoomaSmartPaste, c as normalizeActiveTableColumnWidths, d as getDefaultEditorExtensions, f as getLoomaTableExtensions, g as getActiveTableCellAlignment, h as LoomaTableHeader, i as getActiveTableUiState, j as LOOMA_ACTIVE_BLOCK_TYPING_IDLE_MS, k as LOOMA_ACTIVE_BLOCK_BLUR_GRACE_MS, l as shouldShowTextFormattingToolbar, m as LoomaTableCell, n as createLoomaSlashCommandExtension, o as handleTableOverlayAction, p as LoomaTable, r as getDefaultSlashCommands, s as insertTableAtRange, t as LoomaSlashCommand, u as LoomaTableKit, v as setActiveTableCellAlignment, w as MAX_MENTION_RESULT_LIMIT, x as LoomaMentionSuggestionPluginKey, y as setActiveTableCellBackground } from "./chunks/extensions.js";
|
|
4
|
-
import { AlignCenter, AlignLeft, AlignRight, Bold, Braces, ChevronDown, ChevronLeft, CircleCheck, CircleX, CodeXml, Columns3, Ellipsis, Eraser, GripHorizontal, GripVertical, Heading1, Heading2, Heading3, Highlighter, Image, Info, Italic, List, ListOrdered, ListTodo, Merge, Minus, NotebookPen, PaintBucket, PanelBottom, PanelLeft, PanelRight, PanelTop, Pilcrow, Plus, Quote, Redo2, Rows3, Split, Strikethrough, Table2, Trash2, TriangleAlert, Underline, Undo2 } from "lucide";
|
|
4
|
+
import { AlignCenter, AlignLeft, AlignRight, ArrowLeft, Bold, Braces, ChevronDown, ChevronLeft, ChevronRight, CircleCheck, CircleX, CodeXml, Columns3, Ellipsis, Eraser, FileText, Folder, GripHorizontal, GripVertical, Heading1, Heading2, Heading3, Highlighter, Image, Info, Italic, List, ListOrdered, ListTodo, LoaderCircle, Merge, Minus, NotebookPen, PaintBucket, PanelBottom, PanelLeft, PanelRight, PanelTop, Pilcrow, Plus, Quote, Redo2, Rows3, Split, Strikethrough, Table2, Trash2, TriangleAlert, Underline, Undo2 } from "lucide";
|
|
5
5
|
//#region src/editor/icons.ts
|
|
6
6
|
/** The opinionated Lucide set used by Looma's shipped interaction surfaces. */
|
|
7
7
|
var LOOMA_ICONS = {
|
|
8
8
|
"align-center": AlignCenter,
|
|
9
9
|
"align-left": AlignLeft,
|
|
10
10
|
"align-right": AlignRight,
|
|
11
|
+
"arrow-left": ArrowLeft,
|
|
11
12
|
bold: Bold,
|
|
12
13
|
braces: Braces,
|
|
13
14
|
"circle-check": CircleCheck,
|
|
14
15
|
"circle-x": CircleX,
|
|
15
16
|
"chevron-down": ChevronDown,
|
|
16
17
|
"chevron-left": ChevronLeft,
|
|
18
|
+
"chevron-right": ChevronRight,
|
|
17
19
|
"code-xml": CodeXml,
|
|
18
20
|
columns: Columns3,
|
|
19
21
|
ellipsis: Ellipsis,
|
|
20
22
|
eraser: Eraser,
|
|
23
|
+
"file-text": FileText,
|
|
24
|
+
folder: Folder,
|
|
21
25
|
"grip-horizontal": GripHorizontal,
|
|
22
26
|
"grip-vertical": GripVertical,
|
|
23
27
|
"heading-1": Heading1,
|
|
@@ -30,6 +34,7 @@ var LOOMA_ICONS = {
|
|
|
30
34
|
list: List,
|
|
31
35
|
"list-ordered": ListOrdered,
|
|
32
36
|
"list-todo": ListTodo,
|
|
37
|
+
loader: LoaderCircle,
|
|
33
38
|
merge: Merge,
|
|
34
39
|
"notebook-pen": NotebookPen,
|
|
35
40
|
minus: Minus,
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
|
|
2
2
|
@scope ([data-component~="ui-avatar-group"]) to ([data-component], [data-slotted]) {
|
|
3
3
|
:scope {
|
|
4
|
-
/*
|
|
5
|
-
*
|
|
6
|
-
--_overlap-shadow:
|
|
7
|
-
--_edge-ring: 0 0 0
|
|
4
|
+
/* Each avatar is ringed in the surface colour, so where one overlaps the next it reads as a
|
|
5
|
+
* whole circle set on top, not a shape cut into the one beneath. */
|
|
6
|
+
--_overlap-shadow: 0 0 0 0 transparent;
|
|
7
|
+
--_edge-ring: 0 0 0 2px var(--ui-surface);
|
|
8
8
|
|
|
9
9
|
display: flex;
|
|
10
10
|
align-items: center;
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* component roots outside this style scope. */
|
|
17
17
|
|
|
18
18
|
.overflow {
|
|
19
|
-
margin-inline-start: -0.
|
|
19
|
+
margin-inline-start: -0.5rem;
|
|
20
20
|
display: inline-flex;
|
|
21
21
|
align-items: center;
|
|
22
22
|
justify-content: center;
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
/* Overlap and the separating shadow are applied by the controller: slotted avatars are nested
|
|
49
49
|
* component roots outside this style scope. */
|
|
50
50
|
:where([data-slotted], [data-slotted] *):is(*) {
|
|
51
|
-
margin-inline-start: -0.
|
|
51
|
+
margin-inline-start: -0.5rem;
|
|
52
52
|
flex-shrink: 0;
|
|
53
53
|
border-radius: 999px;
|
|
54
54
|
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
|
|
2
|
+
@scope ([data-component~="ui-breadcrumb-item"]) to ([data-component], [data-slotted]) {
|
|
3
|
+
/* One step in a ui-breadcrumbs trail: a link up to that place, or the current view. A chevron leads
|
|
4
|
+
every step but the first. An icon slotted before the name sits with it. */
|
|
5
|
+
:scope {
|
|
6
|
+
display: inline-flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
gap: var(--ui-space-2);
|
|
9
|
+
min-inline-size: 0;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.separator {
|
|
13
|
+
display: inline-flex;
|
|
14
|
+
color: var(--ui-text-muted);
|
|
15
|
+
font-size: var(--ui-font-size-xs);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
:scope:first-child .separator {
|
|
19
|
+
display: none;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.content {
|
|
23
|
+
display: inline-flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
gap: var(--ui-space-1);
|
|
26
|
+
min-inline-size: 0;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
:scope[data-ui-breadcrumb-item-state~="current"] .content {
|
|
30
|
+
color: var(--ui-text-primary);
|
|
31
|
+
font-weight: var(--ui-font-medium);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
35
|
+
:scope[hidden] {
|
|
36
|
+
display: none;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
@scope ([data-component~="ui-breadcrumb-item"]) to ([data-component]) {
|
|
40
|
+
/* One step in a ui-breadcrumbs trail: a link up to that place, or the current view. A chevron leads
|
|
41
|
+
every step but the first. An icon slotted before the name sits with it. */
|
|
42
|
+
|
|
43
|
+
.content > :where([data-slotted], [data-slotted] *):is(a) {
|
|
44
|
+
display: inline-flex;
|
|
45
|
+
align-items: center;
|
|
46
|
+
gap: var(--ui-space-1);
|
|
47
|
+
color: var(--ui-text-secondary);
|
|
48
|
+
text-decoration: none;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.content > :where([data-slotted], [data-slotted] *):is(a:hover) {
|
|
52
|
+
color: var(--ui-text-primary);
|
|
53
|
+
text-decoration: underline;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
57
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
|
|
2
|
+
@scope ([data-component~="ui-breadcrumbs"]) to ([data-component], [data-slotted]) {
|
|
3
|
+
/* Where a view sits: a trail of ui-breadcrumb-item, from the top down to the current view. It wraps
|
|
4
|
+
rather than scrolls, so every step stays reachable. */
|
|
5
|
+
:scope {
|
|
6
|
+
display: block;
|
|
7
|
+
min-inline-size: 0;
|
|
8
|
+
color: var(--ui-text-muted);
|
|
9
|
+
font-size: var(--ui-font-size-sm);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
ol {
|
|
13
|
+
display: flex;
|
|
14
|
+
flex-wrap: wrap;
|
|
15
|
+
align-items: center;
|
|
16
|
+
gap: var(--ui-space-1) var(--ui-space-2);
|
|
17
|
+
margin: 0;
|
|
18
|
+
padding: 0;
|
|
19
|
+
list-style: none;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
23
|
+
:scope[hidden] {
|
|
24
|
+
display: none;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
@scope ([data-component~="ui-breadcrumbs"]) to ([data-component]) {
|
|
28
|
+
/* Where a view sits: a trail of ui-breadcrumb-item, from the top down to the current view. It wraps
|
|
29
|
+
rather than scrolls, so every step stays reachable. */
|
|
30
|
+
|
|
31
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
32
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
|
|
2
|
+
@scope ([data-component~="ui-card"]) to ([data-component], [data-slotted]) {
|
|
3
|
+
/* A surface that groups content. Its children stack with even space between them, so a card
|
|
4
|
+
needs no layout of its own. */
|
|
5
|
+
:scope {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
gap: var(--ui-space-4);
|
|
9
|
+
box-sizing: border-box;
|
|
10
|
+
min-inline-size: 0;
|
|
11
|
+
padding: var(--ui-space-5);
|
|
12
|
+
border: 1px solid var(--ui-border-default);
|
|
13
|
+
border-radius: var(--ui-radius-lg);
|
|
14
|
+
background: var(--ui-surface-raised);
|
|
15
|
+
color: var(--ui-text-primary);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
:scope[data-ui-card-state~="padding=sm"] {
|
|
19
|
+
gap: var(--ui-space-2);
|
|
20
|
+
padding: var(--ui-space-3);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
:scope[data-ui-card-state~="padding=lg"] {
|
|
24
|
+
padding: var(--ui-space-6);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
:scope[data-ui-card-state~="variant=subtle"] {
|
|
28
|
+
border-color: transparent;
|
|
29
|
+
background: var(--ui-surface-muted);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
:scope[data-ui-card-state~="variant=elevated"] {
|
|
33
|
+
border-color: var(--ui-border-subtle);
|
|
34
|
+
box-shadow: var(--ui-shadow-lg);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
:scope[data-ui-card-state~="tone=danger"] {
|
|
38
|
+
border-color: var(--ui-danger);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
42
|
+
:scope[hidden] {
|
|
43
|
+
display: none;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
@scope ([data-component~="ui-card"]) to ([data-component]) {
|
|
47
|
+
/* A surface that groups content. Its children stack with even space between them, so a card
|
|
48
|
+
needs no layout of its own. */
|
|
49
|
+
|
|
50
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
51
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
|
|
2
|
+
@scope ([data-component~="ui-cover"]) to ([data-component], [data-slotted]) {
|
|
3
|
+
/* A layout primitive that centres its content in the space, both ways, with room around it: the
|
|
4
|
+
frame for a view that is one card or one message. */
|
|
5
|
+
:scope {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
align-items: center;
|
|
9
|
+
justify-content: center;
|
|
10
|
+
gap: var(--ui-space-6);
|
|
11
|
+
box-sizing: border-box;
|
|
12
|
+
min-block-size: 100dvh;
|
|
13
|
+
padding: var(--ui-space-6) var(--ui-space-4);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
:scope[data-ui-cover-state~="size=fill"] {
|
|
17
|
+
flex: 1;
|
|
18
|
+
min-block-size: 100%;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
22
|
+
:scope[hidden] {
|
|
23
|
+
display: none;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
@scope ([data-component~="ui-cover"]) to ([data-component]) {
|
|
27
|
+
/* A layout primitive that centres its content in the space, both ways, with room around it: the
|
|
28
|
+
frame for a view that is one card or one message. */
|
|
29
|
+
|
|
30
|
+
:scope > :where([data-slotted], [data-slotted] *):is(*) {
|
|
31
|
+
max-inline-size: 100%;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
35
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
|
|
2
|
+
@scope ([data-component~="ui-description-item"]) to ([data-component], [data-slotted]) {
|
|
3
|
+
/* One term and its value in a ui-description-list, laid out by the list's layout. */
|
|
4
|
+
:scope {
|
|
5
|
+
display: var(--_ui-description-display, grid);
|
|
6
|
+
grid-column: var(--_ui-description-column, 1 / -1);
|
|
7
|
+
grid-template-columns: subgrid;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
align-items: var(--_ui-description-align, baseline);
|
|
10
|
+
gap: var(--ui-space-1) var(--ui-space-6);
|
|
11
|
+
min-inline-size: 0;
|
|
12
|
+
padding: var(--_ui-description-padding, 0);
|
|
13
|
+
border-width: var(--_ui-description-border-width, 0);
|
|
14
|
+
border-style: solid;
|
|
15
|
+
border-color: var(--ui-border-default);
|
|
16
|
+
border-radius: var(--ui-radius-md);
|
|
17
|
+
font-size: var(--ui-font-size-sm);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
dt {
|
|
21
|
+
color: var(--ui-text-muted);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
dd {
|
|
25
|
+
margin: 0;
|
|
26
|
+
min-inline-size: 0;
|
|
27
|
+
color: var(--ui-text-primary);
|
|
28
|
+
font-weight: var(--ui-font-medium);
|
|
29
|
+
font-size: var(--_ui-description-value-size, inherit);
|
|
30
|
+
text-align: start;
|
|
31
|
+
overflow-wrap: anywhere;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
35
|
+
:scope[hidden] {
|
|
36
|
+
display: none;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
@scope ([data-component~="ui-description-item"]) to ([data-component]) {
|
|
40
|
+
/* One term and its value in a ui-description-list, laid out by the list's layout. */
|
|
41
|
+
|
|
42
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
43
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
|
|
2
|
+
@scope ([data-component~="ui-description-list"]) to ([data-component], [data-slotted]) {
|
|
3
|
+
/* Named values: a term and what it is, for each item (ui-description-item). */
|
|
4
|
+
/* Rows line every term up in one column and every value in the next, through subgrid. */
|
|
5
|
+
:scope {
|
|
6
|
+
display: grid;
|
|
7
|
+
grid-template-columns: minmax(6rem, max-content) minmax(0, 1fr);
|
|
8
|
+
gap: var(--ui-space-2) var(--ui-space-6);
|
|
9
|
+
min-inline-size: 0;
|
|
10
|
+
margin: 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/* Tiles pass their shape to the items through private properties, which cross into each item. */
|
|
14
|
+
:scope[data-ui-description-list-state~="layout=tiles"] {
|
|
15
|
+
--_ui-description-display: flex;
|
|
16
|
+
--_ui-description-column: auto;
|
|
17
|
+
--_ui-description-align: flex-start;
|
|
18
|
+
--_ui-description-value-size: var(--ui-font-size-lg);
|
|
19
|
+
--_ui-description-padding: var(--ui-space-3);
|
|
20
|
+
--_ui-description-border-width: 1px;
|
|
21
|
+
display: grid;
|
|
22
|
+
grid-template-columns: repeat(auto-fill, minmax(min(100%, 10rem), 1fr));
|
|
23
|
+
gap: var(--ui-space-3);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
27
|
+
:scope[hidden] {
|
|
28
|
+
display: none;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
@scope ([data-component~="ui-description-list"]) to ([data-component]) {
|
|
32
|
+
/* Named values: a term and what it is, for each item (ui-description-item). */
|
|
33
|
+
/* Rows line every term up in one column and every value in the next, through subgrid. */
|
|
34
|
+
|
|
35
|
+
/* Tiles pass their shape to the items through private properties, which cross into each item. */
|
|
36
|
+
|
|
37
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
38
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
|
|
2
|
+
@scope ([data-component~="ui-page-header"]) to ([data-component], [data-slotted]) {
|
|
3
|
+
/* The top of a view: its title (the page's one h1), with an optional icon or mark before it, a
|
|
4
|
+
short eyebrow above it, a line or two of description under it, and the view's own actions at
|
|
5
|
+
the end. Every view titles itself the same way, at the same size. */
|
|
6
|
+
:scope {
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-wrap: wrap;
|
|
9
|
+
align-items: center;
|
|
10
|
+
gap: var(--ui-space-3) var(--ui-space-4);
|
|
11
|
+
min-inline-size: 0;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.leading {
|
|
15
|
+
display: inline-flex;
|
|
16
|
+
flex: none;
|
|
17
|
+
align-self: center;
|
|
18
|
+
color: var(--ui-text-muted);
|
|
19
|
+
font-size: var(--ui-font-size-2xl);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.copy {
|
|
23
|
+
display: flex;
|
|
24
|
+
flex: 1 1 16rem;
|
|
25
|
+
flex-direction: column;
|
|
26
|
+
gap: var(--ui-space-1);
|
|
27
|
+
min-inline-size: 0;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.eyebrow {
|
|
31
|
+
color: var(--ui-text-muted);
|
|
32
|
+
font-size: var(--ui-font-size-xs);
|
|
33
|
+
font-weight: var(--ui-font-semibold);
|
|
34
|
+
letter-spacing: 0.06em;
|
|
35
|
+
text-transform: uppercase;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.title {
|
|
39
|
+
margin: 0;
|
|
40
|
+
color: var(--ui-text-primary);
|
|
41
|
+
font-size: var(--ui-font-size-2xl);
|
|
42
|
+
font-weight: var(--ui-font-bold, 700);
|
|
43
|
+
line-height: var(--ui-line-height-tight);
|
|
44
|
+
overflow-wrap: anywhere;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.description {
|
|
48
|
+
color: var(--ui-text-secondary);
|
|
49
|
+
font-size: var(--ui-font-size-md);
|
|
50
|
+
line-height: var(--ui-line-height);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.actions {
|
|
54
|
+
display: inline-flex;
|
|
55
|
+
flex: none;
|
|
56
|
+
flex-wrap: wrap;
|
|
57
|
+
align-items: center;
|
|
58
|
+
gap: var(--ui-space-2);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
:scope[data-ui-page-header-state~="align=center"] {
|
|
62
|
+
flex-direction: column;
|
|
63
|
+
text-align: center;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
:scope[data-ui-page-header-state~="align=center"] .copy {
|
|
67
|
+
align-items: center;
|
|
68
|
+
flex-basis: auto;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.leading:empty,
|
|
72
|
+
.eyebrow:empty,
|
|
73
|
+
.description:empty,
|
|
74
|
+
.actions:empty {
|
|
75
|
+
display: none;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
79
|
+
:scope[hidden] {
|
|
80
|
+
display: none;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
@scope ([data-component~="ui-page-header"]) to ([data-component]) {
|
|
84
|
+
/* The top of a view: its title (the page's one h1), with an optional icon or mark before it, a
|
|
85
|
+
short eyebrow above it, a line or two of description under it, and the view's own actions at
|
|
86
|
+
the end. Every view titles itself the same way, at the same size. */
|
|
87
|
+
|
|
88
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
89
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
|
|
2
|
+
@scope ([data-component~="ui-section"]) to ([data-component], [data-slotted]) {
|
|
3
|
+
/* A part of a view: a heading, an optional line under it, actions for the whole section at its
|
|
4
|
+
end, and the content. Sections space themselves out through the Stack around them. */
|
|
5
|
+
:scope {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
gap: var(--ui-space-4);
|
|
9
|
+
min-inline-size: 0;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
:scope[data-ui-section-state~="variant=card"] {
|
|
13
|
+
padding: var(--ui-space-5);
|
|
14
|
+
border: 1px solid var(--ui-border-default);
|
|
15
|
+
border-radius: var(--ui-radius-lg);
|
|
16
|
+
background: var(--ui-surface-raised);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
:scope[data-ui-section-state~="variant=divided"] {
|
|
20
|
+
padding-block-start: var(--ui-space-6);
|
|
21
|
+
border-block-start: 1px solid var(--ui-border-default);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
:scope[data-ui-section-state~="variant=card"][data-ui-section-state~="tone=danger"] {
|
|
25
|
+
border-color: var(--ui-danger);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.head {
|
|
29
|
+
display: flex;
|
|
30
|
+
flex-wrap: wrap;
|
|
31
|
+
align-items: flex-start;
|
|
32
|
+
justify-content: space-between;
|
|
33
|
+
gap: var(--ui-space-2) var(--ui-space-4);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.copy {
|
|
37
|
+
display: flex;
|
|
38
|
+
flex: 1 1 16rem;
|
|
39
|
+
flex-direction: column;
|
|
40
|
+
gap: var(--ui-space-1);
|
|
41
|
+
min-inline-size: 0;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.heading {
|
|
45
|
+
margin: 0;
|
|
46
|
+
color: var(--ui-text-primary);
|
|
47
|
+
font-size: var(--ui-font-size-lg);
|
|
48
|
+
font-weight: var(--ui-font-semibold);
|
|
49
|
+
line-height: var(--ui-line-height-tight);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
:scope[data-ui-section-state~="tone=danger"] .heading {
|
|
53
|
+
color: var(--ui-danger);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.description {
|
|
57
|
+
color: var(--ui-text-secondary);
|
|
58
|
+
font-size: var(--ui-font-size-sm);
|
|
59
|
+
line-height: var(--ui-line-height);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.actions {
|
|
63
|
+
display: inline-flex;
|
|
64
|
+
flex-wrap: wrap;
|
|
65
|
+
gap: var(--ui-space-2);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.body {
|
|
69
|
+
display: flex;
|
|
70
|
+
flex-direction: column;
|
|
71
|
+
gap: var(--ui-space-4);
|
|
72
|
+
min-inline-size: 0;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.description:empty,
|
|
76
|
+
.actions:empty {
|
|
77
|
+
display: none;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.head:has(.heading[hidden]):has(.description:empty):has(.actions:empty) {
|
|
81
|
+
display: none;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
85
|
+
:scope[hidden] {
|
|
86
|
+
display: none;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
@scope ([data-component~="ui-section"]) to ([data-component]) {
|
|
90
|
+
/* A part of a view: a heading, an optional line under it, actions for the whole section at its
|
|
91
|
+
end, and the content. Sections space themselves out through the Stack around them. */
|
|
92
|
+
|
|
93
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
94
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
|
|
2
|
+
@keyframes ui-spinner-turn {
|
|
3
|
+
to {
|
|
4
|
+
transform: rotate(1turn);
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
@scope ([data-component~="ui-spinner"]) to ([data-component], [data-slotted]) {
|
|
8
|
+
/* Something is on its way. It turns in the current text colour; with reduced motion it holds still,
|
|
9
|
+
and the label (or the text beside it) still says what is happening. */
|
|
10
|
+
:scope {
|
|
11
|
+
display: inline-flex;
|
|
12
|
+
flex: none;
|
|
13
|
+
color: currentColor;
|
|
14
|
+
font-size: var(--ui-font-size-lg);
|
|
15
|
+
line-height: 1;
|
|
16
|
+
animation: ui-spinner-turn 0.8s linear infinite;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
:scope[data-ui-spinner-state~="size=sm"] {
|
|
20
|
+
font-size: var(--ui-font-size-md);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@media (prefers-reduced-motion: reduce) {
|
|
24
|
+
:scope {
|
|
25
|
+
animation: none;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
30
|
+
:scope[hidden] {
|
|
31
|
+
display: none;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
@scope ([data-component~="ui-spinner"]) to ([data-component]) {
|
|
35
|
+
/* Something is on its way. It turns in the current text colour; with reduced motion it holds still,
|
|
36
|
+
and the label (or the text beside it) still says what is happening. */
|
|
37
|
+
|
|
38
|
+
@media (prefers-reduced-motion: reduce) {
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
42
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/* Generated by HTML Next 1.0.0-alpha.5. Do not edit. */
|
|
2
|
+
@scope ([data-component~="ui-status-message"]) to ([data-component], [data-slotted]) {
|
|
3
|
+
/* The one way a view says it is loading, has nothing yet, or failed, with an optional next step.
|
|
4
|
+
Every view says it the same way, in the same place, at the same size. */
|
|
5
|
+
:scope {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-wrap: wrap;
|
|
8
|
+
align-items: center;
|
|
9
|
+
gap: var(--ui-space-2) var(--ui-space-4);
|
|
10
|
+
padding-block: var(--ui-space-4);
|
|
11
|
+
color: var(--ui-text-muted);
|
|
12
|
+
font-size: var(--ui-font-size-md);
|
|
13
|
+
line-height: var(--ui-line-height);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
:scope[data-ui-status-message-state~="kind=error"] {
|
|
17
|
+
color: var(--ui-danger);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
:scope[data-ui-status-message-state~="layout=panel"] {
|
|
21
|
+
padding: var(--ui-space-6);
|
|
22
|
+
border: 1px dashed var(--ui-border-default);
|
|
23
|
+
border-radius: var(--ui-radius-lg);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
:scope[data-ui-status-message-state~="layout=fill"] {
|
|
27
|
+
flex: 1;
|
|
28
|
+
flex-direction: column;
|
|
29
|
+
justify-content: center;
|
|
30
|
+
min-block-size: 50vh;
|
|
31
|
+
text-align: center;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.copy {
|
|
35
|
+
display: flex;
|
|
36
|
+
flex: 1 1 12rem;
|
|
37
|
+
flex-direction: column;
|
|
38
|
+
gap: var(--ui-space-1);
|
|
39
|
+
min-inline-size: 0;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
:scope[data-ui-status-message-state~="layout=fill"] .copy {
|
|
43
|
+
flex: none;
|
|
44
|
+
align-items: center;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.heading {
|
|
48
|
+
color: var(--ui-text-primary);
|
|
49
|
+
font-weight: var(--ui-font-semibold);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.action {
|
|
53
|
+
display: inline-flex;
|
|
54
|
+
flex-wrap: wrap;
|
|
55
|
+
gap: var(--ui-space-2);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.action:empty {
|
|
59
|
+
display: none;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
63
|
+
:scope[hidden] {
|
|
64
|
+
display: none;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
@scope ([data-component~="ui-status-message"]) to ([data-component]) {
|
|
68
|
+
/* The one way a view says it is loading, has nothing yet, or failed, with an optional next step.
|
|
69
|
+
Every view says it the same way, in the same place, at the same size. */
|
|
70
|
+
|
|
71
|
+
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
72
|
+
}
|