@threadlabs/looma 0.17.0 → 0.17.2
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/ui-avatar-group/ui-avatar-group.html +8 -5
- package/components/ui-avatar-group/ui-avatar-group.js +3 -3
- package/components/ui-badge/ui-badge.html +10 -5
- package/components/ui-breadcrumb-item/ui-breadcrumb-item.html +2 -1
- package/components/ui-button/ui-button.html +33 -26
- package/components/ui-button/ui-button.js +2 -2
- package/components/ui-callout/ui-callout.html +3 -1
- package/components/ui-card/ui-card.html +5 -3
- package/components/ui-checkbox/ui-checkbox.html +36 -8
- package/components/ui-combobox/ui-combobox.html +72 -45
- package/components/ui-combobox/ui-combobox.js +7 -2
- package/components/ui-context-menu/ui-context-menu.html +2 -2
- package/components/ui-description-item/ui-description-item.html +1 -1
- package/components/ui-description-list/ui-description-list.html +2 -0
- package/components/ui-dialog/ui-dialog.html +3 -23
- package/components/ui-disclosure/ui-disclosure.html +2 -2
- package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +2 -2
- package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +3 -3
- package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +4 -4
- package/components/ui-editor-slash-menu-item/ui-editor-slash-menu-item.html +6 -1
- package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +2 -2
- package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +4 -4
- package/components/ui-editor-toolbar/ui-editor-toolbar.html +5 -5
- package/components/ui-floating-action-button/ui-floating-action-button.html +4 -2
- package/components/ui-icon-button/ui-icon-button.html +57 -17
- package/components/ui-icon-button/ui-icon-button.js +1 -1
- package/components/ui-list/ui-list.html +46 -6
- package/components/ui-list-item/ui-list-item.html +1 -1
- package/components/ui-menu/ui-menu.html +4 -3
- package/components/ui-menu/ui-menu.js +9 -3
- package/components/ui-menu-item/ui-menu-item.html +43 -6
- package/components/ui-meter/ui-meter.html +4 -1
- package/components/ui-nav-item/ui-nav-item.html +0 -1
- package/components/ui-page-header/ui-page-header.html +1 -0
- package/components/ui-popover/ui-popover.html +1 -1
- package/components/ui-radio/ui-radio.html +5 -2
- package/components/ui-scroll-area/ui-scroll-area.html +9 -14
- package/components/ui-scroll-area/ui-scroll-area.js +32 -0
- package/components/ui-search-result-row/ui-search-result-row.html +5 -3
- package/components/ui-search-shell/ui-search-shell.html +8 -8
- package/components/ui-section/ui-section.html +5 -3
- package/components/ui-separator/ui-separator.html +2 -2
- package/components/ui-sidebar/ui-sidebar.html +2 -2
- package/components/ui-spinner/ui-spinner.html +28 -8
- package/components/ui-status-message/ui-status-message.html +1 -1
- package/components/ui-switch/ui-switch.html +17 -8
- package/components/ui-table/ui-table.html +1 -1
- package/components/ui-tabs/ui-tabs.html +21 -12
- package/components/ui-toast/ui-toast.html +1 -1
- package/components/ui-toast-region/ui-toast-region.html +1 -1
- package/components/ui-tooltip/ui-tooltip.html +12 -12
- package/components/ui-tooltip/ui-tooltip.js +1 -1
- package/components/ui-top-bar/ui-top-bar.html +1 -1
- package/components/ui-tree/ui-tree.js +4 -1
- package/components/ui-tree-item/ui-tree-item.html +2 -1
- package/dist/index.js +15 -14
- package/editor/chunks/extensions.js +12 -2
- package/editor/extensions/preset.d.ts +6 -1
- package/package.json +1 -1
- package/styles/ui-avatar-group.css +8 -5
- package/styles/ui-badge.css +10 -5
- package/styles/ui-breadcrumb-item.css +2 -1
- package/styles/ui-button.css +19 -25
- package/styles/ui-callout.css +3 -1
- package/styles/ui-card.css +4 -2
- package/styles/ui-checkbox.css +38 -8
- package/styles/ui-combobox.css +27 -8
- package/styles/ui-context-menu.css +2 -2
- package/styles/ui-description-item.css +1 -1
- package/styles/ui-description-list.css +2 -0
- package/styles/ui-dialog.css +1 -22
- package/styles/ui-disclosure.css +2 -2
- package/styles/ui-editor-insert-table-grid.css +2 -2
- package/styles/ui-editor-mention-menu.css +3 -3
- package/styles/ui-editor-slash-menu-item.css +6 -1
- package/styles/ui-editor-slash-menu.css +4 -4
- package/styles/ui-editor-table-context-menu.css +2 -2
- package/styles/ui-editor-table-toolbar.css +4 -4
- package/styles/ui-editor-toolbar.css +5 -5
- package/styles/ui-floating-action-button.css +3 -1
- package/styles/ui-icon-button.css +53 -18
- package/styles/ui-list-item.css +1 -1
- package/styles/ui-list.css +41 -6
- package/styles/ui-menu-item.css +43 -5
- package/styles/ui-menu.css +3 -3
- package/styles/ui-meter.css +4 -1
- package/styles/ui-nav-item.css +0 -1
- package/styles/ui-page-header.css +1 -0
- package/styles/ui-popover.css +1 -1
- package/styles/ui-radio.css +5 -2
- package/styles/ui-scroll-area.css +10 -16
- package/styles/ui-search-result-row.css +3 -2
- package/styles/ui-search-shell.css +7 -7
- package/styles/ui-section.css +5 -3
- package/styles/ui-separator.css +2 -2
- package/styles/ui-sidebar.css +2 -2
- package/styles/ui-spinner.css +27 -6
- package/styles/ui-status-message.css +1 -1
- package/styles/ui-switch.css +17 -8
- package/styles/ui-table.css +1 -1
- package/styles/ui-tabs.css +60 -51
- package/styles/ui-toast-region.css +1 -1
- package/styles/ui-toast.css +1 -1
- package/styles/ui-tooltip.css +12 -12
- package/styles/ui-top-bar.css +1 -1
- package/styles/ui-tree-item.css +2 -1
- package/theme-dark.css +4 -4
- package/theme-light.css +3 -3
- package/tokens.css +9 -6
- package/vanilla/UiButton.d.ts +1 -0
- package/vanilla/UiButton.js +17 -19
- package/vanilla/UiCombobox.js +162 -159
- package/vanilla/UiDialog.js +2 -2
- package/vanilla/UiIconButton.d.ts +1 -0
- package/vanilla/UiIconButton.js +1 -4
- package/vanilla/UiList.d.ts +3 -1
- package/vanilla/UiList.js +36 -19
- package/vanilla/UiMenu.d.ts +1 -0
- package/vanilla/UiMenu.js +1 -1
- package/vanilla/UiMenuItem.js +10 -13
- package/vanilla/UiScrollArea.js +11 -6
- package/vanilla/UiSearchShell.js +2 -2
- package/vanilla/UiSpinner.js +2 -4
- package/vue/UiAvatarGroup.vue +8 -5
- package/vue/UiBadge.vue +10 -5
- package/vue/UiBreadcrumbItem.vue +2 -1
- package/vue/UiButton.d.ts +2 -0
- package/vue/UiButton.vue +31 -28
- package/vue/UiCallout.vue +3 -2
- package/vue/UiCard.vue +4 -2
- package/vue/UiCheckbox.vue +36 -8
- package/vue/UiCombobox.d.ts +1 -1
- package/vue/UiCombobox.vue +55 -35
- package/vue/UiContextMenu.vue +2 -2
- package/vue/UiDescriptionItem.vue +1 -1
- package/vue/UiDescriptionList.vue +2 -0
- package/vue/UiDialog.d.ts +3 -3
- package/vue/UiDialog.vue +3 -27
- package/vue/UiDisclosure.vue +2 -2
- package/vue/UiEditorInsertTableGrid.vue +2 -2
- package/vue/UiEditorMentionMenu.d.ts +1 -1
- package/vue/UiEditorMentionMenu.vue +4 -3
- package/vue/UiEditorSlashMenu.vue +6 -4
- package/vue/UiEditorSlashMenuItem.vue +6 -1
- package/vue/UiEditorTableContextMenu.vue +2 -2
- package/vue/UiEditorTableToolbar.vue +4 -4
- package/vue/UiEditorToolbar.vue +5 -5
- package/vue/UiFloatingActionButton.vue +3 -1
- package/vue/UiIconButton.d.ts +2 -0
- package/vue/UiIconButton.vue +61 -19
- package/vue/UiList.d.ts +7 -1
- package/vue/UiList.vue +57 -6
- package/vue/UiListItem.vue +1 -1
- package/vue/UiMenu.d.ts +2 -0
- package/vue/UiMenu.vue +6 -3
- package/vue/UiMenuItem.d.ts +3 -3
- package/vue/UiMenuItem.vue +47 -7
- package/vue/UiMeter.vue +4 -1
- package/vue/UiNavItem.vue +0 -1
- package/vue/UiPageHeader.vue +1 -0
- package/vue/UiPopover.vue +1 -1
- package/vue/UiRadio.vue +5 -2
- package/vue/UiScrollArea.vue +24 -18
- package/vue/UiSearchResultRow.vue +3 -2
- package/vue/UiSearchShell.vue +8 -8
- package/vue/UiSection.vue +5 -3
- package/vue/UiSeparator.vue +2 -2
- package/vue/UiSidebar.vue +2 -2
- package/vue/UiSpinner.vue +28 -7
- package/vue/UiStatusMessage.vue +1 -1
- package/vue/UiSwitch.vue +20 -9
- package/vue/UiTable.vue +1 -1
- package/vue/UiTabs.vue +25 -12
- package/vue/UiToast.vue +1 -1
- package/vue/UiToastRegion.vue +1 -1
- package/vue/UiTooltip.vue +12 -12
- package/vue/UiTopBar.vue +1 -1
- package/vue/UiTreeItem.vue +2 -1
- package/vue/chunks/UiAvatarGroup.js +1 -1
- package/vue/chunks/UiBadge.js +1 -1
- package/vue/chunks/UiBreadcrumbItem.js +1 -1
- package/vue/chunks/UiButton.js +28 -23
- package/vue/chunks/UiCallout.js +1 -1
- package/vue/chunks/UiCard.js +1 -1
- package/vue/chunks/UiCheckbox.js +1 -1
- package/vue/chunks/UiCombobox.js +80 -77
- package/vue/chunks/UiContextMenu.js +1 -1
- package/vue/chunks/UiDescriptionItem.js +1 -1
- package/vue/chunks/UiDescriptionList.js +1 -1
- package/vue/chunks/UiDialog.js +7 -4
- package/vue/chunks/UiDisclosure.js +1 -1
- package/vue/chunks/UiEditorInsertTableGrid.js +1 -1
- package/vue/chunks/UiEditorMentionMenu.js +1 -1
- package/vue/chunks/UiEditorSlashMenu.js +1 -1
- package/vue/chunks/UiEditorSlashMenuItem.js +1 -1
- package/vue/chunks/UiEditorTableContextMenu.js +1 -1
- package/vue/chunks/UiEditorTableToolbar.js +1 -1
- package/vue/chunks/UiEditorToolbar.js +1 -1
- package/vue/chunks/UiFloatingActionButton.js +1 -1
- package/vue/chunks/UiIconButton.js +13 -8
- package/vue/chunks/UiList.js +17 -5
- package/vue/chunks/UiListItem.js +1 -1
- package/vue/chunks/UiMenu.js +10 -2
- package/vue/chunks/UiMenuItem.js +1 -4
- package/vue/chunks/UiMeter.js +1 -1
- package/vue/chunks/UiNavItem.js +1 -1
- package/vue/chunks/UiPageHeader.js +1 -1
- package/vue/chunks/UiPopover.js +1 -1
- package/vue/chunks/UiRadio.js +1 -1
- package/vue/chunks/UiScrollArea.js +22 -3
- package/vue/chunks/UiSearchResultRow.js +1 -1
- package/vue/chunks/UiSearchShell.js +2 -2
- package/vue/chunks/UiSection.js +1 -1
- package/vue/chunks/UiSeparator.js +1 -1
- package/vue/chunks/UiSidebar.js +1 -1
- package/vue/chunks/UiSpinner.js +7 -5
- package/vue/chunks/UiStatusMessage.js +1 -1
- package/vue/chunks/UiSwitch.js +1 -1
- package/vue/chunks/UiTable.js +1 -1
- package/vue/chunks/UiTabs.js +1 -1
- package/vue/chunks/UiToast.js +1 -1
- package/vue/chunks/UiToastRegion.js +1 -1
- package/vue/chunks/UiTooltip.js +1 -1
- package/vue/chunks/UiTopBar.js +1 -1
- package/vue/chunks/UiTreeItem.js +1 -1
- package/vue/components.css +1231 -1032
- package/vue/editor/code-block-view.d.ts +29 -0
- package/vue/editor/index.js +70 -4
- package/vue/index.js +1 -1
|
@@ -9200,6 +9200,12 @@ function setActiveTableCellBackground(editor, backgroundColor) {
|
|
|
9200
9200
|
* Default Tiptap extension preset for Looma editor.
|
|
9201
9201
|
* Uses the Vanilla JS Tiptap API; apps provide @tiptap/core and Looma ships the preset extensions.
|
|
9202
9202
|
*/
|
|
9203
|
+
var LoomaCodeBlock = CodeBlockLowlight.extend({ addInputRules() {
|
|
9204
|
+
return [...this.parent?.() ?? [], textblockTypeInputRule({
|
|
9205
|
+
find: /^```$/,
|
|
9206
|
+
type: this.type
|
|
9207
|
+
})];
|
|
9208
|
+
} });
|
|
9203
9209
|
var StoredOnlyHighlight = Highlight.extend({
|
|
9204
9210
|
parseHTML: () => [],
|
|
9205
9211
|
addKeyboardShortcuts: () => ({}),
|
|
@@ -9243,9 +9249,13 @@ function getLoomaTableExtensions() {
|
|
|
9243
9249
|
* can be replaced without coupling UI chrome to an application directory.
|
|
9244
9250
|
* Use with `new Editor({ extensions: getDefaultEditorExtensions(), ... })` or a
|
|
9245
9251
|
* framework's Tiptap editor hook.
|
|
9252
|
+
* @contract Code blocks accept three backticks in an empty paragraph as an
|
|
9253
|
+
* immediate typing shortcut. An optional node view changes presentation only;
|
|
9254
|
+
* the code and explicit language stay in the document schema.
|
|
9246
9255
|
*/
|
|
9247
9256
|
function getDefaultEditorExtensions(options = {}) {
|
|
9248
|
-
const { placeholder = "Type “/” for commands, or start writing…", linkOpenOnClick = false, imageInline = false, mention = createLoomaMentionExtension(), disableHighlight = false, codeLanguages } = options;
|
|
9257
|
+
const { placeholder = "Type “/” for commands, or start writing…", linkOpenOnClick = false, imageInline = false, mention = createLoomaMentionExtension(), disableHighlight = false, codeLanguages, codeBlockNodeView } = options;
|
|
9258
|
+
const codeBlock = LoomaCodeBlock.configure({ lowlight: createLowlight(codeLanguages) });
|
|
9249
9259
|
return [
|
|
9250
9260
|
Document,
|
|
9251
9261
|
Paragraph,
|
|
@@ -9283,7 +9293,7 @@ function getDefaultEditorExtensions(options = {}) {
|
|
|
9283
9293
|
(disableHighlight ? StoredOnlyHighlight : Highlight).configure({ multicolor: false }),
|
|
9284
9294
|
Code,
|
|
9285
9295
|
LoomaSmartPaste,
|
|
9286
|
-
|
|
9296
|
+
codeBlockNodeView ? codeBlock.extend({ addNodeView: () => codeBlockNodeView }) : codeBlock,
|
|
9287
9297
|
Typography,
|
|
9288
9298
|
Placeholder.configure({
|
|
9289
9299
|
placeholder: ({ node }) => node.type.name === "paragraph" ? placeholder : "",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Default Tiptap extension preset for Looma editor.
|
|
3
3
|
* Uses the Vanilla JS Tiptap API; apps provide @tiptap/core and Looma ships the preset extensions.
|
|
4
4
|
*/
|
|
5
|
-
import { type AnyExtension } from "@tiptap/core";
|
|
5
|
+
import { type AnyExtension, type NodeViewRenderer } from "@tiptap/core";
|
|
6
6
|
import { createLowlight } from "lowlight";
|
|
7
7
|
/** Grammars supplied by the host; importing a language remains the host's choice. */
|
|
8
8
|
export type LoomaCodeLanguages = NonNullable<Parameters<typeof createLowlight>[0]>;
|
|
@@ -29,6 +29,8 @@ export interface DefaultEditorExtensionsOptions {
|
|
|
29
29
|
disableHighlight?: boolean;
|
|
30
30
|
/** Code block grammars to register. None are loaded by default. */
|
|
31
31
|
codeLanguages?: LoomaCodeLanguages;
|
|
32
|
+
/** Optional presentation for a code block; the Vue editor supplies its language control. */
|
|
33
|
+
codeBlockNodeView?: NodeViewRenderer;
|
|
32
34
|
}
|
|
33
35
|
/**
|
|
34
36
|
* Complete Looma table schema as one Tiptap extension.
|
|
@@ -50,5 +52,8 @@ export declare function getLoomaTableExtensions(): AnyExtension[];
|
|
|
50
52
|
* can be replaced without coupling UI chrome to an application directory.
|
|
51
53
|
* Use with `new Editor({ extensions: getDefaultEditorExtensions(), ... })` or a
|
|
52
54
|
* framework's Tiptap editor hook.
|
|
55
|
+
* @contract Code blocks accept three backticks in an empty paragraph as an
|
|
56
|
+
* immediate typing shortcut. An optional node view changes presentation only;
|
|
57
|
+
* the code and explicit language stay in the document schema.
|
|
53
58
|
*/
|
|
54
59
|
export declare function getDefaultEditorExtensions(options?: DefaultEditorExtensionsOptions): AnyExtension[];
|
package/package.json
CHANGED
|
@@ -15,10 +15,9 @@
|
|
|
15
15
|
--_ui-avatar-group-overlap-shadow: var(--ui-avatar-group-overlap-shadow);
|
|
16
16
|
--_ui-avatar-group-edge-ring: var(--ui-avatar-group-edge-ring);
|
|
17
17
|
|
|
18
|
-
/*
|
|
19
|
-
*
|
|
20
|
-
--_overlap-shadow: 0 0 0 0
|
|
21
|
-
--_edge-ring: 0 0 0 2px var(--ui-surface);
|
|
18
|
+
/* A one-pixel shadow on the leading edge separates overlapping circles without cutting
|
|
19
|
+
* a white gap out of the avatar underneath. */
|
|
20
|
+
--_overlap-shadow: -1px 0 0 0 rgb(0 0 0 / 0.22);
|
|
22
21
|
|
|
23
22
|
display: flex;
|
|
24
23
|
align-items: center;
|
|
@@ -29,6 +28,10 @@
|
|
|
29
28
|
/* Overlap and the separating shadow are applied by the controller: slotted avatars are nested
|
|
30
29
|
* component roots outside this style scope. */
|
|
31
30
|
|
|
31
|
+
:scope:dir(rtl) {
|
|
32
|
+
--_overlap-shadow: 1px 0 0 0 rgb(0 0 0 / 0.22);
|
|
33
|
+
}
|
|
34
|
+
|
|
32
35
|
.overflow {
|
|
33
36
|
margin-inline-start: -0.5rem;
|
|
34
37
|
display: inline-flex;
|
|
@@ -42,7 +45,7 @@
|
|
|
42
45
|
color: var(--ui-text-primary);
|
|
43
46
|
box-shadow:
|
|
44
47
|
var(--_ui-avatar-group-overlap-shadow, var(--_overlap-shadow)),
|
|
45
|
-
var(--_ui-avatar-group-edge-ring,
|
|
48
|
+
var(--_ui-avatar-group-edge-ring, 0 0 0 0 transparent);
|
|
46
49
|
font: inherit;
|
|
47
50
|
font-size: var(--ui-font-size-xs);
|
|
48
51
|
font-weight: 600;
|
package/styles/ui-badge.css
CHANGED
|
@@ -123,27 +123,32 @@
|
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
:scope[data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=accent"] {
|
|
126
|
-
--_badge-surface: var(--ui-accent-
|
|
126
|
+
--_badge-surface: color-mix(in srgb, var(--ui-accent-solid) 22%, var(--ui-surface-default));
|
|
127
|
+
--_badge-border: color-mix(in srgb, var(--ui-accent-solid) 28%, var(--ui-surface-default));
|
|
127
128
|
--_badge-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
|
|
128
129
|
}
|
|
129
130
|
|
|
130
131
|
:scope[data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=danger"] {
|
|
131
|
-
--_badge-surface: var(--ui-danger-
|
|
132
|
+
--_badge-surface: color-mix(in srgb, var(--ui-danger-solid) 22%, var(--ui-surface-default));
|
|
133
|
+
--_badge-border: color-mix(in srgb, var(--ui-danger-solid) 28%, var(--ui-surface-default));
|
|
132
134
|
--_badge-text: var(--ui-danger-subtle-text, var(--ui-danger-solid));
|
|
133
135
|
}
|
|
134
136
|
|
|
135
137
|
:scope[data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=success"] {
|
|
136
|
-
--_badge-surface: var(--ui-success-
|
|
138
|
+
--_badge-surface: color-mix(in srgb, var(--ui-success-solid) 22%, var(--ui-surface-default));
|
|
139
|
+
--_badge-border: color-mix(in srgb, var(--ui-success-solid) 28%, var(--ui-surface-default));
|
|
137
140
|
--_badge-text: var(--ui-success-subtle-text, var(--ui-success-solid));
|
|
138
141
|
}
|
|
139
142
|
|
|
140
143
|
:scope[data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=warning"] {
|
|
141
|
-
--_badge-surface: var(--ui-warning-
|
|
144
|
+
--_badge-surface: color-mix(in srgb, var(--ui-warning-solid) 22%, var(--ui-surface-default));
|
|
145
|
+
--_badge-border: color-mix(in srgb, var(--ui-warning-solid) 28%, var(--ui-surface-default));
|
|
142
146
|
--_badge-text: var(--ui-warning-subtle-text, var(--ui-warning-solid));
|
|
143
147
|
}
|
|
144
148
|
|
|
145
149
|
:scope[data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=info"] {
|
|
146
|
-
--_badge-surface: var(--ui-info-
|
|
150
|
+
--_badge-surface: color-mix(in srgb, var(--ui-info-solid) 22%, var(--ui-surface-default));
|
|
151
|
+
--_badge-border: color-mix(in srgb, var(--ui-info-solid) 28%, var(--ui-surface-default));
|
|
147
152
|
--_badge-text: var(--ui-info-subtle-text, var(--ui-info-solid));
|
|
148
153
|
}
|
|
149
154
|
|
|
@@ -7,12 +7,13 @@
|
|
|
7
7
|
align-items: center;
|
|
8
8
|
gap: var(--ui-space-2);
|
|
9
9
|
min-inline-size: 0;
|
|
10
|
+
margin: 0;
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
.separator {
|
|
13
14
|
display: inline-flex;
|
|
14
15
|
color: var(--ui-text-muted);
|
|
15
|
-
font-size: var(--ui-font-size-
|
|
16
|
+
font-size: var(--ui-font-size-sm);
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
:scope:first-child .separator {
|
package/styles/ui-button.css
CHANGED
|
@@ -127,12 +127,15 @@
|
|
|
127
127
|
background-color var(--ui-motion-fast) var(--ui-motion-ease),
|
|
128
128
|
border-color var(--ui-motion-fast) var(--ui-motion-ease),
|
|
129
129
|
color var(--ui-motion-fast) var(--ui-motion-ease),
|
|
130
|
-
box-shadow var(--ui-motion-
|
|
130
|
+
box-shadow var(--ui-motion-base) var(--ui-motion-ease);
|
|
131
131
|
margin: 0;
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
.
|
|
134
|
+
.spinner-wrap {
|
|
135
|
+
display: inline-flex;
|
|
136
|
+
flex: none;
|
|
135
137
|
margin-inline-end: var(--ui-space-2);
|
|
138
|
+
vertical-align: middle;
|
|
136
139
|
}
|
|
137
140
|
|
|
138
141
|
@supports (text-box-trim: trim-both) {
|
|
@@ -262,12 +265,12 @@
|
|
|
262
265
|
var(--ui-focus-halo);
|
|
263
266
|
}
|
|
264
267
|
|
|
265
|
-
/*
|
|
266
|
-
disabled
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
268
|
+
/* A loading action stays visually active; only an explicitly disabled action takes the
|
|
269
|
+
neutral disabled palette. Its flat surface and muted ink make the state unambiguous. */
|
|
270
|
+
:scope:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
|
|
271
|
+
border-color: var(--ui-disabled-border);
|
|
272
|
+
background-color: var(--ui-disabled-surface);
|
|
273
|
+
color: var(--ui-disabled-text);
|
|
271
274
|
filter: var(--ui-button-disabled-filter, var(--ui-disabled-filter));
|
|
272
275
|
opacity: var(--ui-button-disabled-opacity, 1);
|
|
273
276
|
cursor: not-allowed;
|
|
@@ -275,16 +278,13 @@
|
|
|
275
278
|
box-shadow: none;
|
|
276
279
|
}
|
|
277
280
|
|
|
278
|
-
:scope[data-ui-button-state~="pending"]:focus-visible {
|
|
281
|
+
:is(:scope[data-ui-button-state~="loading"], :scope[data-ui-button-state~="pending"]):focus-visible {
|
|
279
282
|
box-shadow: var(--ui-focus-halo);
|
|
280
283
|
}
|
|
281
284
|
|
|
282
|
-
/* Ghost
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
hue came out a mid-grey slab for neutral, whose hue is the ink: louder than the enabled button. */
|
|
286
|
-
:scope[data-ui-button-state~="variant=ghost"]:is(:disabled, [aria-disabled="true"]) {
|
|
287
|
-
background-color: oklch(from var(--_tone) l c h / 14%);
|
|
285
|
+
/* Ghost keeps no border, but gains the same neutral surface as other disabled buttons. */
|
|
286
|
+
:scope[data-ui-button-state~="variant=ghost"]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
|
|
287
|
+
background-color: var(--ui-disabled-surface);
|
|
288
288
|
border-color: transparent;
|
|
289
289
|
}
|
|
290
290
|
|
|
@@ -343,7 +343,7 @@
|
|
|
343
343
|
transform: none;
|
|
344
344
|
}
|
|
345
345
|
|
|
346
|
-
:scope[data-ui-button-state~="variant=link"]:is(:disabled, [aria-disabled="true"]) {
|
|
346
|
+
:scope[data-ui-button-state~="variant=link"]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
|
|
347
347
|
background: none;
|
|
348
348
|
border-color: transparent;
|
|
349
349
|
}
|
|
@@ -378,16 +378,10 @@
|
|
|
378
378
|
|
|
379
379
|
/* A soft halo that transitions in with the other box-shadow changes, layered on the raised shadow. */
|
|
380
380
|
|
|
381
|
-
/*
|
|
382
|
-
disabled
|
|
383
|
-
fill, border, and text together (--ui-disabled-filter), and the theme decides which way is
|
|
384
|
-
toward the page. The highlight and shadow go, because nothing that cannot be pressed should
|
|
385
|
-
look raised. */
|
|
381
|
+
/* A loading action stays visually active; only an explicitly disabled action takes the
|
|
382
|
+
neutral disabled palette. Its flat surface and muted ink make the state unambiguous. */
|
|
386
383
|
|
|
387
|
-
/* Ghost
|
|
388
|
-
it takes a surface rather than reading as plain text. The surface is a wash of the faded tone,
|
|
389
|
-
the way hover washes the live one, so it stays light in every tone. An opaque mix toward the
|
|
390
|
-
hue came out a mid-grey slab for neutral, whose hue is the ink: louder than the enabled button. */
|
|
384
|
+
/* Ghost keeps no border, but gains the same neutral surface as other disabled buttons. */
|
|
391
385
|
|
|
392
386
|
/* The size states outrank :host, so sm is named too, or a small button would stay small. */
|
|
393
387
|
@media (pointer: coarse) {
|
package/styles/ui-callout.css
CHANGED
|
@@ -61,7 +61,9 @@
|
|
|
61
61
|
gap: var(--ui-callout-gap, calc(var(--ui-space-2) * 0.75));
|
|
62
62
|
align-items: start;
|
|
63
63
|
max-width: 100%;
|
|
64
|
-
padding: var(--ui-callout-padding-block, var(--ui-space-2))
|
|
64
|
+
padding-block: var(--ui-callout-padding-block, var(--ui-space-2));
|
|
65
|
+
padding-inline-start: var(--ui-callout-padding-inline, var(--ui-space-2));
|
|
66
|
+
padding-inline-end: var(--ui-callout-padding-inline, var(--ui-space-3));
|
|
65
67
|
border: var(--ui-callout-border-width, 1px) solid color-mix(in srgb, var(--ui-callout-border, var(--_callout-border)) 35%, transparent);
|
|
66
68
|
border-inline-start: var(--ui-callout-leading-border-width, 4px) solid var(--ui-callout-border, var(--_callout-border));
|
|
67
69
|
border-radius: var(--ui-radius-md);
|
package/styles/ui-card.css
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
box-sizing: border-box;
|
|
10
10
|
min-inline-size: 0;
|
|
11
11
|
padding: var(--ui-space-5);
|
|
12
|
-
border: 1px solid var(--ui-border-
|
|
12
|
+
border: 1px solid var(--ui-border-strong);
|
|
13
13
|
border-radius: var(--ui-radius-lg);
|
|
14
14
|
background: var(--ui-surface-raised);
|
|
15
15
|
color: var(--ui-text-primary);
|
|
@@ -35,7 +35,9 @@
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
:scope[data-ui-card-state~="tone=danger"] {
|
|
38
|
-
border-color: var(--ui-danger);
|
|
38
|
+
border-color: color-mix(in srgb, var(--ui-danger) 45%, var(--ui-border-default));
|
|
39
|
+
border-inline-start: 4px solid var(--ui-danger);
|
|
40
|
+
background: var(--ui-danger-soft);
|
|
39
41
|
}
|
|
40
42
|
|
|
41
43
|
/* A component that sets its display still honours the hidden attribute on its root. */
|
package/styles/ui-checkbox.css
CHANGED
|
@@ -11,6 +11,20 @@
|
|
|
11
11
|
syntax: "*";
|
|
12
12
|
inherits: false;
|
|
13
13
|
}
|
|
14
|
+
@keyframes ui-checkbox-check {
|
|
15
|
+
from {
|
|
16
|
+
opacity: 0;
|
|
17
|
+
transform: translate(0.07rem, -0.09rem) rotate(45deg) scale(0.55);
|
|
18
|
+
}
|
|
19
|
+
65% {
|
|
20
|
+
opacity: 1;
|
|
21
|
+
transform: translate(0.07rem, -0.09rem) rotate(45deg) scale(1.12);
|
|
22
|
+
}
|
|
23
|
+
to {
|
|
24
|
+
opacity: 1;
|
|
25
|
+
transform: translate(0.07rem, -0.09rem) rotate(45deg) scale(1);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
14
28
|
@scope ([data-component~="ui-checkbox"]) to ([data-component], [data-slotted]) {
|
|
15
29
|
/* This component's hooks style the element they are set on, and never a nested one. */
|
|
16
30
|
|
|
@@ -58,10 +72,10 @@
|
|
|
58
72
|
inline-size: var(--_ui-checkbox-size, 1.125rem);
|
|
59
73
|
block-size: var(--_ui-checkbox-size, 1.125rem);
|
|
60
74
|
margin: 0.125em 0 0;
|
|
61
|
-
border: 1px solid var(--ui-control-border
|
|
75
|
+
border: 1px solid var(--ui-control-border, var(--ui-border-strong));
|
|
62
76
|
border-radius: var(--ui-radius-sm);
|
|
63
77
|
background: var(--ui-control-surface, var(--ui-surface-default));
|
|
64
|
-
box-shadow:
|
|
78
|
+
box-shadow: var(--ui-control-inset);
|
|
65
79
|
cursor: pointer;
|
|
66
80
|
transition:
|
|
67
81
|
background-color var(--ui-motion-fast) var(--ui-motion-ease),
|
|
@@ -73,28 +87,30 @@
|
|
|
73
87
|
content: "";
|
|
74
88
|
position: absolute;
|
|
75
89
|
opacity: 0;
|
|
90
|
+
transition: opacity 120ms var(--ui-motion-ease);
|
|
76
91
|
}
|
|
77
92
|
|
|
78
93
|
input:checked,
|
|
79
94
|
input:indeterminate {
|
|
80
95
|
border-color: var(--ui-accent-solid);
|
|
81
96
|
background: var(--ui-accent-solid);
|
|
82
|
-
box-shadow: inset
|
|
97
|
+
box-shadow: var(--ui-control-inset);
|
|
83
98
|
}
|
|
84
99
|
|
|
85
100
|
/* Centre the tick's box, then lift it: a rotated L's ink sits ~0.11rem below its box centre. */
|
|
86
101
|
input:checked::after {
|
|
87
102
|
inset: 0;
|
|
88
103
|
margin: auto;
|
|
89
|
-
inline-size: 0.
|
|
90
|
-
block-size: 0.
|
|
104
|
+
inline-size: 0.28rem;
|
|
105
|
+
block-size: 0.5rem;
|
|
91
106
|
/* Longhands, not `border: solid var(...)`: lowering drops a shorthand that omits a
|
|
92
107
|
component, which left the tick with no style and no colour. */
|
|
93
108
|
border-style: solid;
|
|
94
109
|
border-color: var(--ui-text-on-accent);
|
|
95
110
|
border-width: 0 0.125rem 0.125rem 0;
|
|
96
111
|
opacity: 1;
|
|
97
|
-
transform:
|
|
112
|
+
transform: translate(0.07rem, -0.09rem) rotate(45deg);
|
|
113
|
+
animation: ui-checkbox-check 180ms var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1)) both;
|
|
98
114
|
}
|
|
99
115
|
|
|
100
116
|
input:indeterminate::after {
|
|
@@ -106,6 +122,13 @@
|
|
|
106
122
|
transform: translateY(-50%);
|
|
107
123
|
}
|
|
108
124
|
|
|
125
|
+
@media (prefers-reduced-motion: reduce) {
|
|
126
|
+
input::after {
|
|
127
|
+
transition: none;
|
|
128
|
+
animation: none;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
109
132
|
input:hover:enabled {
|
|
110
133
|
border-color: var(--ui-accent-solid);
|
|
111
134
|
}
|
|
@@ -123,9 +146,13 @@
|
|
|
123
146
|
color: var(--ui-disabled-text);
|
|
124
147
|
cursor: not-allowed;
|
|
125
148
|
}
|
|
149
|
+
:scope[data-ui-checkbox-state~="disabled"] .description {
|
|
150
|
+
color: var(--ui-disabled-text);
|
|
151
|
+
}
|
|
126
152
|
:scope[data-ui-checkbox-state~="disabled"] input {
|
|
127
|
-
border-color: var(--ui-border
|
|
128
|
-
background: var(--ui-
|
|
153
|
+
border-color: var(--ui-disabled-border);
|
|
154
|
+
background: var(--ui-disabled-surface);
|
|
155
|
+
box-shadow: none;
|
|
129
156
|
cursor: not-allowed;
|
|
130
157
|
}
|
|
131
158
|
|
|
@@ -172,6 +199,9 @@
|
|
|
172
199
|
|
|
173
200
|
/* Centre the tick's box, then lift it: a rotated L's ink sits ~0.11rem below its box centre. */
|
|
174
201
|
|
|
202
|
+
@media (prefers-reduced-motion: reduce) {
|
|
203
|
+
}
|
|
204
|
+
|
|
175
205
|
/* A sized choice keeps its box and aligns instead: the label takes that size's field type size,
|
|
176
206
|
and the first line centres in that control height, so the label shares a row's baseline.
|
|
177
207
|
Multi-line labels and descriptions still grow downward from that first line. */
|
package/styles/ui-combobox.css
CHANGED
|
@@ -121,6 +121,11 @@
|
|
|
121
121
|
var(--ui-control-inset),
|
|
122
122
|
var(--ui-control-focus-halo-shadow);
|
|
123
123
|
}
|
|
124
|
+
.entry {
|
|
125
|
+
display: flex;
|
|
126
|
+
flex: 1 1 auto;
|
|
127
|
+
min-inline-size: 0;
|
|
128
|
+
}
|
|
124
129
|
/* A ghost icon button: the affordance is the mark, not a box around it. */
|
|
125
130
|
.help {
|
|
126
131
|
flex: none;
|
|
@@ -240,7 +245,7 @@
|
|
|
240
245
|
overflow: auto;
|
|
241
246
|
margin: 0;
|
|
242
247
|
padding: var(--ui-space-1);
|
|
243
|
-
border: 1px solid var(--_ui-combobox-popup-border, var(--ui-overlay-border, var(--ui-border-
|
|
248
|
+
border: 1px solid var(--_ui-combobox-popup-border, var(--ui-overlay-border, var(--ui-border-strong)));
|
|
244
249
|
border-radius: var(--_ui-combobox-popup-radius, var(--ui-overlay-radius, var(--ui-radius-md)));
|
|
245
250
|
background: var(--_ui-combobox-popup-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
|
|
246
251
|
color: var(--ui-text-primary);
|
|
@@ -264,6 +269,10 @@
|
|
|
264
269
|
color: var(--ui-disabled-text);
|
|
265
270
|
cursor: not-allowed;
|
|
266
271
|
}
|
|
272
|
+
.option[aria-disabled="true"] .primary,
|
|
273
|
+
.option[aria-disabled="true"] .secondary {
|
|
274
|
+
color: var(--ui-disabled-text);
|
|
275
|
+
}
|
|
267
276
|
.primary {
|
|
268
277
|
display: block;
|
|
269
278
|
color: var(--_ui-combobox-option-text, var(--ui-text-primary));
|
|
@@ -360,21 +369,29 @@
|
|
|
360
369
|
);
|
|
361
370
|
}
|
|
362
371
|
|
|
363
|
-
/* Multiple mode
|
|
372
|
+
/* Multiple mode keeps one control height. Chips and the input scroll within the entry,
|
|
373
|
+
while the clear and disclosure controls remain fixed at the end of the field. */
|
|
364
374
|
:scope[data-ui-combobox-state~="multiple"] .field {
|
|
365
|
-
flex-wrap: wrap;
|
|
366
375
|
align-items: center;
|
|
367
|
-
gap: var(--ui-space-1);
|
|
368
376
|
min-block-size: var(--_ui-combobox-item-min-block-size, 2.5rem);
|
|
369
377
|
padding: var(--ui-space-1);
|
|
370
378
|
}
|
|
379
|
+
:scope[data-ui-combobox-state~="multiple"] .entry {
|
|
380
|
+
align-items: center;
|
|
381
|
+
gap: var(--ui-space-1);
|
|
382
|
+
overflow-x: auto;
|
|
383
|
+
scrollbar-width: none;
|
|
384
|
+
}
|
|
385
|
+
:scope[data-ui-combobox-state~="multiple"] .entry::-webkit-scrollbar {
|
|
386
|
+
display: none;
|
|
387
|
+
}
|
|
371
388
|
:scope[data-ui-combobox-state~="multiple"] input {
|
|
372
389
|
flex: 1 0 var(--_ui-combobox-item-input-min-inline-size, 5rem);
|
|
373
390
|
width: auto;
|
|
374
391
|
min-block-size: 1.75rem;
|
|
375
392
|
padding: var(--ui-space-0-5) var(--ui-space-1);
|
|
376
393
|
}
|
|
377
|
-
/*
|
|
394
|
+
/* Size variants keep their control height as selections are added. */
|
|
378
395
|
:scope[data-ui-combobox-state~="multiple"]:scope[data-ui-combobox-state~="size=sm"] .field {
|
|
379
396
|
min-block-size: 0;
|
|
380
397
|
padding: var(--ui-space-0-5);
|
|
@@ -393,6 +410,7 @@
|
|
|
393
410
|
.item {
|
|
394
411
|
appearance: none;
|
|
395
412
|
display: inline-flex;
|
|
413
|
+
flex: none;
|
|
396
414
|
min-inline-size: 0;
|
|
397
415
|
max-inline-size: min(100%, var(--_ui-combobox-item-item-max-inline-size, 12rem));
|
|
398
416
|
overflow: hidden;
|
|
@@ -409,7 +427,7 @@
|
|
|
409
427
|
outline-offset: 1px;
|
|
410
428
|
}
|
|
411
429
|
.item:disabled {
|
|
412
|
-
|
|
430
|
+
color: var(--ui-disabled-text);
|
|
413
431
|
}
|
|
414
432
|
|
|
415
433
|
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
@@ -434,8 +452,9 @@
|
|
|
434
452
|
before anything is picked. aria-selected is the state; this draws it.
|
|
435
453
|
Longhands, not shorthands: lowering drops a shorthand that omits a component. */
|
|
436
454
|
|
|
437
|
-
/* Multiple mode
|
|
438
|
-
|
|
455
|
+
/* Multiple mode keeps one control height. Chips and the input scroll within the entry,
|
|
456
|
+
while the clear and disclosure controls remain fixed at the end of the field. */
|
|
457
|
+
/* Size variants keep their control height as selections are added. */
|
|
439
458
|
/* A large multiple field starts at the large control height, as sm starts at the small one. */
|
|
440
459
|
|
|
441
460
|
/* A component that sets its display still honours the hidden attribute on its root. */
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
box-sizing: border-box;
|
|
43
43
|
padding: var(--ui-space-1);
|
|
44
44
|
background: var(--_ui-context-menu-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
|
|
45
|
-
border: 1px solid var(--_ui-context-menu-border, var(--ui-overlay-border, var(--ui-border-
|
|
45
|
+
border: 1px solid var(--_ui-context-menu-border, var(--ui-overlay-border, var(--ui-border-strong)));
|
|
46
46
|
border-radius: var(--_ui-context-menu-radius, var(--ui-overlay-radius, var(--ui-radius-lg)));
|
|
47
47
|
box-shadow: var(--_ui-context-menu-shadow, var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg))));
|
|
48
48
|
outline: 0;
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
block-size: 0;
|
|
64
64
|
margin: var(--ui-space-1) 0;
|
|
65
65
|
border: 0;
|
|
66
|
-
border-block-start: 1px solid var(--ui-border-
|
|
66
|
+
border-block-start: 1px solid var(--ui-border-divider);
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
.menu:popover-open {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
padding: var(--_ui-description-padding, 0);
|
|
13
13
|
border-width: var(--_ui-description-border-width, 0);
|
|
14
14
|
border-style: solid;
|
|
15
|
-
border-color: var(--ui-border-default);
|
|
15
|
+
border-color: var(--_ui-description-border-color, var(--ui-border-default));
|
|
16
16
|
border-radius: var(--ui-radius-md);
|
|
17
17
|
font-size: var(--ui-font-size-sm);
|
|
18
18
|
}
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
than that many fit. */
|
|
34
34
|
:scope[data-ui-description-list-state~="layout=grid"],
|
|
35
35
|
:scope[data-ui-description-list-state~="layout=tiles"] {
|
|
36
|
+
inline-size: 100%;
|
|
36
37
|
grid-template-columns: repeat(auto-fill, minmax(min(100%, var(--_track)), 1fr));
|
|
37
38
|
}
|
|
38
39
|
|
|
@@ -41,6 +42,7 @@
|
|
|
41
42
|
--_ui-description-value-size: var(--ui-font-size-lg);
|
|
42
43
|
--_ui-description-padding: var(--_tile-padding);
|
|
43
44
|
--_ui-description-border-width: 1px;
|
|
45
|
+
--_ui-description-border-color: var(--ui-border-strong);
|
|
44
46
|
--_gap: var(--ui-space-3);
|
|
45
47
|
--_gap-compact: var(--ui-space-2);
|
|
46
48
|
--_column-gap: var(--_gap);
|
package/styles/ui-dialog.css
CHANGED
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
overflow: hidden;
|
|
60
60
|
flex-direction: column;
|
|
61
61
|
background: var(--ui-dialog-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
|
|
62
|
-
border: 1px solid var(--ui-dialog-border, var(--ui-overlay-border, var(--ui-border-
|
|
62
|
+
border: 1px solid var(--ui-dialog-border, var(--ui-overlay-border, var(--ui-border-strong)));
|
|
63
63
|
border-radius: var(--ui-dialog-radius, var(--ui-overlay-radius, var(--ui-radius-dialog)));
|
|
64
64
|
box-shadow: var(--ui-dialog-shadow, var(--ui-overlay-shadow, var(--ui-elevation-dialog, var(--ui-shadow-xl))));
|
|
65
65
|
visibility: hidden;
|
|
@@ -111,7 +111,6 @@
|
|
|
111
111
|
gap: var(--ui-space-3);
|
|
112
112
|
flex: none;
|
|
113
113
|
padding: var(--ui-space-3) var(--ui-space-3) var(--ui-space-3) var(--ui-space-5);
|
|
114
|
-
border-block-end: 1px solid var(--ui-border-default);
|
|
115
114
|
}
|
|
116
115
|
|
|
117
116
|
/* :host-qualified so page heading rules that reach in cannot outrank the dialog chrome. */
|
|
@@ -186,26 +185,7 @@
|
|
|
186
185
|
.body {
|
|
187
186
|
flex: 1 1 auto;
|
|
188
187
|
min-block-size: 0;
|
|
189
|
-
overflow: auto;
|
|
190
|
-
overscroll-behavior: contain;
|
|
191
188
|
padding: var(--ui-space-5);
|
|
192
|
-
/* Each edge that hides content fades: the scroll fade every Looma scroller uses (see ui-scroll-area). */
|
|
193
|
-
--_ui-scroll-fade-direction: to bottom;
|
|
194
|
-
--_ui-scroll-fade-size: var(--ui-scroll-fade-size, 24px);
|
|
195
|
-
mask-image: linear-gradient(
|
|
196
|
-
var(--_ui-scroll-fade-direction),
|
|
197
|
-
transparent,
|
|
198
|
-
#000 var(--_ui-scroll-fade-start),
|
|
199
|
-
#000 calc(100% - var(--_ui-scroll-fade-end)),
|
|
200
|
-
transparent
|
|
201
|
-
);
|
|
202
|
-
animation: ui-scroll-fade-start linear, ui-scroll-fade-start-hold linear, ui-scroll-fade-end-hold linear, ui-scroll-fade-end linear;
|
|
203
|
-
animation-timeline: scroll(self block);
|
|
204
|
-
animation-range:
|
|
205
|
-
0 var(--_ui-scroll-fade-size),
|
|
206
|
-
var(--_ui-scroll-fade-size) calc(100% + 1px),
|
|
207
|
-
-1px calc(100% - var(--_ui-scroll-fade-size)),
|
|
208
|
-
calc(100% - var(--_ui-scroll-fade-size)) 100%;
|
|
209
189
|
}
|
|
210
190
|
|
|
211
191
|
footer {
|
|
@@ -215,7 +195,6 @@
|
|
|
215
195
|
justify-content: flex-end;
|
|
216
196
|
gap: var(--ui-space-2);
|
|
217
197
|
padding: var(--ui-space-3) var(--ui-space-5);
|
|
218
|
-
border-block-start: 1px solid var(--ui-border-default);
|
|
219
198
|
}
|
|
220
199
|
|
|
221
200
|
footer:empty {
|
package/styles/ui-disclosure.css
CHANGED
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
display: block;
|
|
39
39
|
inline-size: 100%;
|
|
40
40
|
overflow: clip;
|
|
41
|
-
border-block-end: 1px solid var(--ui-border-
|
|
41
|
+
border-block-end: 1px solid var(--ui-border-divider);
|
|
42
42
|
color: var(--ui-text-primary);
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
.trigger:hover:not(:disabled) {
|
|
66
|
-
background:
|
|
66
|
+
background: color-mix(in srgb, currentColor 6%, transparent);
|
|
67
67
|
}
|
|
68
68
|
.trigger:focus-visible {
|
|
69
69
|
outline: none;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
:scope {
|
|
4
4
|
padding: var(--ui-space-3);
|
|
5
5
|
background: var(--ui-surface);
|
|
6
|
-
border: 1px solid var(--ui-border);
|
|
6
|
+
border: 1px solid var(--ui-border-strong);
|
|
7
7
|
border-radius: var(--ui-radius-md);
|
|
8
8
|
box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
|
|
9
9
|
}
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
width: 1.25rem;
|
|
49
49
|
height: 1.25rem;
|
|
50
50
|
padding: 0;
|
|
51
|
-
border: 1px solid var(--ui-border);
|
|
51
|
+
border: 1px solid var(--ui-control-border);
|
|
52
52
|
border-radius: 2px;
|
|
53
53
|
background: var(--ui-surface);
|
|
54
54
|
cursor: pointer;
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
overflow: hidden;
|
|
10
10
|
flex-direction: column;
|
|
11
11
|
background: var(--ui-surface);
|
|
12
|
-
border: 1px solid var(--ui-border);
|
|
12
|
+
border: 1px solid var(--ui-border-strong);
|
|
13
13
|
border-radius: var(--ui-radius-dialog);
|
|
14
14
|
box-shadow: var(--ui-shadow-lg, 0 8px 24px rgb(0 0 0 / 0.12));
|
|
15
15
|
}
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
gap: var(--ui-space-3);
|
|
22
22
|
padding: var(--ui-space-2) var(--ui-space-3);
|
|
23
23
|
color: var(--ui-text-secondary);
|
|
24
|
-
border-bottom: 1px solid var(--ui-border);
|
|
24
|
+
border-bottom: 1px solid var(--ui-border-divider);
|
|
25
25
|
font-size: var(--ui-font-size-xs);
|
|
26
26
|
font-weight: var(--ui-font-semibold);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
.header:
|
|
29
|
+
:scope > .header:empty, :scope > .empty:empty {
|
|
30
30
|
display: none;
|
|
31
31
|
}
|
|
32
32
|
|