@0001-labs/design-system-1 0.3.0-alpha.14 → 0.3.0-alpha.15
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/DS1/0-face/component-visibility.ts +1 -0
- package/DS1/0-face/toast-queue.ts +1 -1
- package/DS1/0-face/toaster.ts +2 -2
- package/DS1/1-root/cjk.css +1 -1
- package/DS1/1-root/controls.css +5 -1
- package/DS1/1-root/fonts.css +1 -1
- package/DS1/1-root/one.css +1 -1
- package/DS1/1-root/one.semantic.css +1 -1
- package/DS1/1-root/row.css +3 -0
- package/DS1/2-core/ds-cycle.ts +5 -5
- package/DS1/2-core/ds-message.ts +218 -0
- package/DS1/2-core/ds-notice.ts +7 -177
- package/DS1/2-core/ds-toast.ts +2 -2
- package/DS1/2-core/generated/ds-icon-map.ts +4 -0
- package/DS1/2-core/generated/icons-extra.ts +2 -0
- package/DS1/2-core/generated/icons-immediate.ts +1 -1
- package/DS1/2-core/styles/ds-cycle.css +0 -59
- package/DS1/2-core/styles/ds-notice.css +4 -2
- package/DS1/3-unit/ds-sidebar.ts +98 -12
- package/DS1/3-unit/styles/ds-sidebar.css +18 -1
- package/DS1/index.ts +1 -3
- package/DS1/react/message.ts +73 -0
- package/DS1/react/sidebar.ts +15 -4
- package/DS1/x-icon/chevron-down.svg +3 -0
- package/DS1/x-icon/chevron-up.svg +3 -0
- package/README.md +1 -1
- package/dist/0-face/component-visibility.d.ts.map +1 -1
- package/dist/0-face/component-visibility.js +1 -0
- package/dist/0-face/toast-queue.d.ts +1 -1
- package/dist/0-face/toast-queue.d.ts.map +1 -1
- package/dist/0-face/toast-queue.js +1 -1
- package/dist/0-face/toaster.d.ts +1 -1
- package/dist/0-face/toaster.d.ts.map +1 -1
- package/dist/0-face/toaster.js +1 -1
- package/dist/2-core/ds-cycle.d.ts +2 -2
- package/dist/2-core/ds-cycle.js +5 -5
- package/dist/2-core/ds-message.d.ts +154 -0
- package/dist/2-core/ds-message.d.ts.map +1 -0
- package/dist/2-core/ds-message.js +177 -0
- package/dist/2-core/ds-notice.d.ts +6 -96
- package/dist/2-core/ds-notice.d.ts.map +1 -1
- package/dist/2-core/ds-notice.js +6 -147
- package/dist/2-core/ds-toast.d.ts +1 -1
- package/dist/2-core/ds-toast.js +2 -2
- package/dist/2-core/generated/ds-icon-map.d.ts +3 -1
- package/dist/2-core/generated/ds-icon-map.d.ts.map +1 -1
- package/dist/2-core/generated/ds-icon-map.js +4 -0
- package/dist/2-core/generated/icons-extra.d.ts.map +1 -1
- package/dist/2-core/generated/icons-extra.js +2 -0
- package/dist/2-core/generated/icons-immediate.d.ts +1 -1
- package/dist/2-core/generated/icons-immediate.d.ts.map +1 -1
- package/dist/2-core/generated/icons-immediate.js +1 -1
- package/dist/3-unit/ds-sidebar.d.ts +41 -0
- package/dist/3-unit/ds-sidebar.d.ts.map +1 -1
- package/dist/3-unit/ds-sidebar.js +85 -11
- package/dist/design-system-1.bundle.js +1325 -1508
- package/dist/design-system-1.bundle.js.map +1 -1
- package/dist/design-system-1.bundle.min.js +2474 -2553
- package/dist/design-system-1.bundle.min.js.map +1 -1
- package/dist/feedback.js +8 -8
- package/dist/feedback.js.map +1 -1
- package/dist/{icons-extra-cfzoudMf.js → icons-extra-CiDDs7_-.js} +7 -1
- package/dist/{icons-extra-cfzoudMf.js.map → icons-extra-CiDDs7_-.js.map} +1 -1
- package/dist/{icons-extra-DSav6uTU.js → icons-extra-hauwCx07.js} +3 -1
- package/dist/{icons-extra-DSav6uTU.js.map → icons-extra-hauwCx07.js.map} +1 -1
- package/dist/index.d.ts +1 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/react/message.d.ts +66 -0
- package/dist/react/message.d.ts.map +1 -0
- package/dist/react/message.js +37 -0
- package/dist/react/sidebar.d.ts +12 -2
- package/dist/react/sidebar.d.ts.map +1 -1
- package/dist/react/sidebar.js +9 -2
- package/package.json +6 -4
- package/DS1/1-root/kbd.css +0 -46
- package/DS1/2-core/ds-kbd.ts +0 -78
- package/DS1/2-core/ds-loading.ts +0 -72
- package/DS1/2-core/ds-spacing-handle.ts +0 -22
- package/DS1/2-core/spacing-handle.ts +0 -95
- package/DS1/2-core/styles/ds-kbd.css +0 -12
- package/DS1/2-core/styles/ds-loading.css +0 -13
- package/DS1/2-core/styles/ds-spacing-handle.css +0 -8
- package/DS1/react/kbd.ts +0 -21
- package/DS1/react/loading.ts +0 -18
- package/DS1/react/spacing-handle.ts +0 -21
- package/dist/0-face/tree.d.ts +0 -69
- package/dist/0-face/tree.d.ts.map +0 -1
- package/dist/0-face/tree.js +0 -191
- package/dist/2-core/ds-banner.d.ts +0 -84
- package/dist/2-core/ds-banner.d.ts.map +0 -1
- package/dist/2-core/ds-banner.js +0 -134
- package/dist/2-core/ds-date.d.ts +0 -16
- package/dist/2-core/ds-date.d.ts.map +0 -1
- package/dist/2-core/ds-date.js +0 -15
- package/dist/2-core/ds-kbd.d.ts +0 -48
- package/dist/2-core/ds-kbd.d.ts.map +0 -1
- package/dist/2-core/ds-kbd.js +0 -65
- package/dist/2-core/ds-language.d.ts +0 -82
- package/dist/2-core/ds-language.d.ts.map +0 -1
- package/dist/2-core/ds-language.js +0 -74
- package/dist/2-core/ds-loading.d.ts +0 -40
- package/dist/2-core/ds-loading.d.ts.map +0 -1
- package/dist/2-core/ds-loading.js +0 -63
- package/dist/2-core/ds-meter.d.ts +0 -103
- package/dist/2-core/ds-meter.d.ts.map +0 -1
- package/dist/2-core/ds-meter.js +0 -124
- package/dist/2-core/ds-pagedots.d.ts +0 -89
- package/dist/2-core/ds-pagedots.d.ts.map +0 -1
- package/dist/2-core/ds-pagedots.js +0 -142
- package/dist/2-core/ds-spacing-handle.d.ts +0 -25
- package/dist/2-core/ds-spacing-handle.d.ts.map +0 -1
- package/dist/2-core/ds-spacing-handle.js +0 -25
- package/dist/2-core/ds-split.d.ts +0 -12
- package/dist/2-core/ds-split.d.ts.map +0 -1
- package/dist/2-core/ds-split.js +0 -7
- package/dist/2-core/ds-steps.d.ts +0 -72
- package/dist/2-core/ds-steps.d.ts.map +0 -1
- package/dist/2-core/ds-steps.js +0 -114
- package/dist/2-core/ds-textarea.d.ts +0 -46
- package/dist/2-core/ds-textarea.d.ts.map +0 -1
- package/dist/2-core/ds-textarea.js +0 -122
- package/dist/2-core/ds-toggle.d.ts +0 -11
- package/dist/2-core/ds-toggle.d.ts.map +0 -1
- package/dist/2-core/ds-toggle.js +0 -10
- package/dist/2-core/spacing-handle.d.ts +0 -28
- package/dist/2-core/spacing-handle.d.ts.map +0 -1
- package/dist/2-core/spacing-handle.js +0 -146
- package/dist/3-unit/ds-tree.d.ts +0 -69
- package/dist/3-unit/ds-tree.d.ts.map +0 -1
- package/dist/3-unit/ds-tree.js +0 -136
- package/dist/4-page/ds-layout.d.ts +0 -32
- package/dist/4-page/ds-layout.d.ts.map +0 -1
- package/dist/4-page/ds-layout.js +0 -930
- package/dist/icons-extra-B4Iotc7s.js +0 -298
- package/dist/icons-extra-B4Iotc7s.js.map +0 -1
- package/dist/icons-extra-BoAACA4X.js +0 -944
- package/dist/icons-extra-BoAACA4X.js.map +0 -1
- package/dist/icons-extra-C4sCgoUj.js +0 -185
- package/dist/icons-extra-C4sCgoUj.js.map +0 -1
- package/dist/icons-extra-Dc_yVWIz.js +0 -1024
- package/dist/icons-extra-Dc_yVWIz.js.map +0 -1
- package/dist/icons-extra-DlxTo_Y4.js +0 -247
- package/dist/icons-extra-DlxTo_Y4.js.map +0 -1
- package/dist/icons-extra-g_xpwZhZ.js +0 -631
- package/dist/icons-extra-g_xpwZhZ.js.map +0 -1
- package/dist/react/kbd.d.ts +0 -26
- package/dist/react/kbd.d.ts.map +0 -1
- package/dist/react/kbd.js +0 -8
- package/dist/react/loading.d.ts +0 -14
- package/dist/react/loading.d.ts.map +0 -1
- package/dist/react/loading.js +0 -14
- package/dist/react/meter.d.ts +0 -64
- package/dist/react/meter.d.ts.map +0 -1
- package/dist/react/meter.js +0 -15
- package/dist/react/spacing-handle.d.ts +0 -13
- package/dist/react/spacing-handle.d.ts.map +0 -1
- package/dist/react/spacing-handle.js +0 -18
- package/dist/react/split.d.ts +0 -7
- package/dist/react/split.d.ts.map +0 -1
- package/dist/react/split.js +0 -6
- package/dist/react/steps.d.ts +0 -36
- package/dist/react/steps.d.ts.map +0 -1
- package/dist/react/steps.js +0 -10
- package/dist/react/tree.d.ts +0 -31
- package/dist/react/tree.d.ts.map +0 -1
- package/dist/react/tree.js +0 -37
- package/dist/shared-words-BfnT24Fe.js +0 -1635
- package/dist/shared-words-BfnT24Fe.js.map +0 -1
- package/dist/shared-words-Cg6Phtx0.js +0 -915
- package/dist/shared-words-Cg6Phtx0.js.map +0 -1
- package/dist/shared-words-Ddz0yUEF.js +0 -933
- package/dist/shared-words-Ddz0yUEF.js.map +0 -1
- package/dist/shared-words-UCvnkctb.js +0 -1653
- package/dist/shared-words-UCvnkctb.js.map +0 -1
|
@@ -4,6 +4,7 @@ export type ComponentVisibility = "public" | "internal";
|
|
|
4
4
|
export const COMPONENT_VISIBILITY: Readonly<Record<string, ComponentVisibility>> = {
|
|
5
5
|
"spacing-handle": "internal",
|
|
6
6
|
"loading": "internal",
|
|
7
|
+
"kbd": "internal",
|
|
7
8
|
};
|
|
8
9
|
export function componentVisibility(name: string): ComponentVisibility {
|
|
9
10
|
return COMPONENT_VISIBILITY[name.replace(/^ds-/, "")] ?? "public";
|
|
@@ -62,7 +62,7 @@ export type ToastSignal = { toast: ToastData } | { dismiss: ToastId | undefined
|
|
|
62
62
|
type Listener = (signal: ToastSignal) => void;
|
|
63
63
|
|
|
64
64
|
/** Sonner's constants, shared by both toasters; its gap and offset are rounded to squares in the stylesheet. */
|
|
65
|
-
export const TOAST_DURATION =
|
|
65
|
+
export const TOAST_DURATION = Infinity;
|
|
66
66
|
export const VISIBLE_TOASTS = 3;
|
|
67
67
|
export const TIME_BEFORE_UNMOUNT = 200;
|
|
68
68
|
export const SWIPE_THRESHOLD = 45;
|
package/DS1/0-face/toaster.ts
CHANGED
|
@@ -47,7 +47,7 @@ export interface ToasterOptions {
|
|
|
47
47
|
expand?: boolean;
|
|
48
48
|
/** How many show at once; three by default. */
|
|
49
49
|
visibleToasts?: number;
|
|
50
|
-
/** Milliseconds each toast stays;
|
|
50
|
+
/** Milliseconds each toast stays; Infinity by default, until dismissed. */
|
|
51
51
|
duration?: number;
|
|
52
52
|
/** A close button on every toast. */
|
|
53
53
|
closeButton?: boolean;
|
|
@@ -234,7 +234,7 @@ class PageToaster {
|
|
|
234
234
|
private draw(item: Item) {
|
|
235
235
|
const { data } = item;
|
|
236
236
|
const dismissible = data.dismissible !== false;
|
|
237
|
-
const closeButton = (data.closeButton ?? settings.closeButton ??
|
|
237
|
+
const closeButton = (data.closeButton ?? settings.closeButton ?? true) && dismissible;
|
|
238
238
|
const closeLabel = settings.closeLabel ?? feedbackWord("Close");
|
|
239
239
|
const key = JSON.stringify([data.title, data.description, data.type, data.icon, data.action?.label, data.action?.href, data.cancel?.label, data.cancel?.href, closeButton, closeLabel]);
|
|
240
240
|
const previous = item.element?.querySelector<HTMLElement>(".body");
|
package/DS1/1-root/cjk.css
CHANGED
package/DS1/1-root/controls.css
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
@import "./text.css";
|
|
4
4
|
@import "./empty.css";
|
|
5
5
|
@import "./notice.css";
|
|
6
|
-
@import "./kbd.css";
|
|
7
6
|
@import "./dialog-placement.css";
|
|
8
7
|
@import "./header.css";
|
|
9
8
|
@import "./footer.css";
|
|
@@ -140,6 +139,11 @@ a.ds-button[aria-disabled="true"] {
|
|
|
140
139
|
text-decoration-color: var(--ds-link-hover-line-color, currentColor);
|
|
141
140
|
}
|
|
142
141
|
|
|
142
|
+
/* Quiet navigation and related-component lists: no underline in any state. */
|
|
143
|
+
.ds-link.ds-link--plain {
|
|
144
|
+
text-decoration: none;
|
|
145
|
+
}
|
|
146
|
+
|
|
143
147
|
.ds-link:focus-visible {
|
|
144
148
|
outline: 2px solid var(--ds-focus-ring);
|
|
145
149
|
outline-offset: 1px;
|
package/DS1/1-root/fonts.css
CHANGED
package/DS1/1-root/one.css
CHANGED
package/DS1/1-root/row.css
CHANGED
|
@@ -89,10 +89,13 @@ button.ds-row,
|
|
|
89
89
|
-webkit-tap-highlight-color: transparent;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
/* The font inherited above would bring the page's line into the row: the words go back on the
|
|
93
|
+
sixteen, as every row's (a stacked tile keeps its square lines below). */
|
|
92
94
|
a.ds-row,
|
|
93
95
|
button.ds-row {
|
|
94
96
|
position: relative;
|
|
95
97
|
width: 100%;
|
|
98
|
+
line-height: var(--ds-type-lineheight-default);
|
|
96
99
|
padding: 0 var(--ds-row-padding, calc(4px * var(--ds-sf)));
|
|
97
100
|
border-radius: var(--ds-row-radius, 0);
|
|
98
101
|
}
|
package/DS1/2-core/ds-cycle.ts
CHANGED
|
@@ -74,7 +74,7 @@ export class Cycle extends LitElement {
|
|
|
74
74
|
static get properties() {
|
|
75
75
|
return {
|
|
76
76
|
type: { type: String, reflect: true },
|
|
77
|
-
//
|
|
77
|
+
// Compatibility attribute; every language picker now uses the normal button.
|
|
78
78
|
chip: { type: Boolean, reflect: true },
|
|
79
79
|
values: { type: Array },
|
|
80
80
|
value: { type: String },
|
|
@@ -607,8 +607,8 @@ export class Cycle extends LitElement {
|
|
|
607
607
|
|
|
608
608
|
/**
|
|
609
609
|
* The language picker: a native button carrying the language's code as
|
|
610
|
-
* `lang`, so each name is set in its own typeface.
|
|
611
|
-
*
|
|
610
|
+
* `lang`, so each name is set in its own typeface. Always uses the normal
|
|
611
|
+
* label-sized button; legacy `chip` and `compact` attributes do not change its width.
|
|
612
612
|
*/
|
|
613
613
|
private renderLanguagePicker() {
|
|
614
614
|
const code = this.currentValue || currentLanguage.value;
|
|
@@ -621,9 +621,9 @@ export class Cycle extends LitElement {
|
|
|
621
621
|
>
|
|
622
622
|
${nativeLanguageName(code)}
|
|
623
623
|
</button>`;
|
|
624
|
-
return
|
|
624
|
+
return html`<ds-button fit control="slotted"
|
|
625
625
|
?primary=${this.primary && !this.secondary} ?secondary=${this.secondary}
|
|
626
|
-
?disabled=${this.disabled || this._fieldsetDisabled}>${button}</ds-button
|
|
626
|
+
?disabled=${this.disabled || this._fieldsetDisabled}>${button}</ds-button>`;
|
|
627
627
|
}
|
|
628
628
|
|
|
629
629
|
render() {
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
// ds-message.ts
|
|
2
|
+
// An inline notice in the flow of the page: a tone, a title and/or text,
|
|
3
|
+
// actions and an optional dismiss; with `banner`, a strip across the top of
|
|
4
|
+
// its positioning context instead. Drawn by 1-root/notice.css, the same
|
|
5
|
+
// classes a page without scripts writes.
|
|
6
|
+
|
|
7
|
+
import { LitElement, html, nothing, unsafeCSS, type PropertyValues } from "lit";
|
|
8
|
+
import { getText } from "../0-face/i18n";
|
|
9
|
+
import { define } from "../0-face/define";
|
|
10
|
+
import "./ds-icon";
|
|
11
|
+
import "./ds-toast";
|
|
12
|
+
import type { ToastPosition } from "../0-face/toast-queue";
|
|
13
|
+
export { toast as message } from "../0-face/toast-queue";
|
|
14
|
+
export type { ToastOptions as MessageOptions, ToastId as MessageId } from "../0-face/toast-queue";
|
|
15
|
+
export type MessageForm = "inline" | "banner" | "toast" | "assistant";
|
|
16
|
+
import metrics from "../1-root/component-metrics.css?inline";
|
|
17
|
+
import controls from "../1-root/controls.css?inline";
|
|
18
|
+
import styles from "./styles/ds-notice.css?inline";
|
|
19
|
+
|
|
20
|
+
export type MessageTone = "neutral" | "success" | "warning" | "danger";
|
|
21
|
+
const TONES: readonly MessageTone[] = ["neutral", "success", "warning", "danger"];
|
|
22
|
+
/** The icon each tone's mark carries unless `icon` names another. */
|
|
23
|
+
export const MESSAGE_ICONS: Readonly<Record<MessageTone, string>> = {
|
|
24
|
+
neutral: "info",
|
|
25
|
+
success: "check",
|
|
26
|
+
warning: "warning",
|
|
27
|
+
danger: "warning",
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/** Detail of `ds-message-dismiss`. Cancel the event to keep the notice and remove it yourself. */
|
|
31
|
+
export interface MessageDismissDetail { tone: MessageTone }
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @element ds-message
|
|
35
|
+
* @prop {"neutral" | "success" | "warning" | "danger"} tone - The mark's colour
|
|
36
|
+
* and icon; danger also turns the words into the danger colour. Neutral by default.
|
|
37
|
+
* @prop {string} heading - A title: a translation key, or literal words.
|
|
38
|
+
* @prop {string} text - The text: a translation key, or literal words.
|
|
39
|
+
* @prop {boolean} literal - Show `heading` and `text` as written, never looked up.
|
|
40
|
+
* @prop {string} icon - An icon from the library in place of the tone's own.
|
|
41
|
+
* @prop {boolean} dismissible - Show a close button at the end of the first line.
|
|
42
|
+
* @prop {boolean} banner - A strip one square high across the top of its
|
|
43
|
+
* positioning context, filled in the tone's colour, its words, actions and
|
|
44
|
+
* close button on one line; it reserves no room in the flow.
|
|
45
|
+
*
|
|
46
|
+
* @slot - The text, when it needs more than words: a link, a strong word.
|
|
47
|
+
* @slot heading - The title, as inline content.
|
|
48
|
+
* @slot icon - An icon of the page's own inside the mark.
|
|
49
|
+
* @slot actions - Buttons or links on the row under the words.
|
|
50
|
+
*
|
|
51
|
+
* @fires ds-message-dismiss - The close button was pressed. Cancelable: unless
|
|
52
|
+
* it is cancelled, the notice hides itself.
|
|
53
|
+
*
|
|
54
|
+
* The element is a live region: `role="status"`, or `role="alert"` for danger,
|
|
55
|
+
* unless the page gives it a role of its own.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* <ds-message tone="danger" heading="Couldn't save" dismissible>
|
|
59
|
+
* Your changes are kept on this device.
|
|
60
|
+
* <ds-button slot="actions" secondary>Try again</ds-button>
|
|
61
|
+
* </ds-message>
|
|
62
|
+
*/
|
|
63
|
+
export class Message extends LitElement {
|
|
64
|
+
static properties = {
|
|
65
|
+
expand: { type: Boolean },
|
|
66
|
+
visibleToasts: { type: Number, attribute: "visible-toasts" },
|
|
67
|
+
richColors: { type: Boolean, attribute: "rich-colors" },
|
|
68
|
+
contained: { type: Boolean },
|
|
69
|
+
label: { type: String },
|
|
70
|
+
closeLabel: { type: String, attribute: "close-label" },
|
|
71
|
+
form: { type: String, reflect: true },
|
|
72
|
+
position: { type: String },
|
|
73
|
+
duration: { type: Number },
|
|
74
|
+
closeButton: { type: Boolean, attribute: "close-button" },
|
|
75
|
+
tone: { type: String, reflect: true },
|
|
76
|
+
heading: { type: String },
|
|
77
|
+
text: { type: String },
|
|
78
|
+
literal: { type: Boolean, reflect: true },
|
|
79
|
+
icon: { type: String },
|
|
80
|
+
dismissible: { type: Boolean, reflect: true },
|
|
81
|
+
banner: { type: Boolean, reflect: true },
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
static styles = [unsafeCSS(metrics), unsafeCSS(controls), unsafeCSS(styles)];
|
|
85
|
+
|
|
86
|
+
declare expand: boolean;
|
|
87
|
+
declare visibleToasts: number;
|
|
88
|
+
declare richColors: boolean;
|
|
89
|
+
declare contained: boolean;
|
|
90
|
+
declare label: string;
|
|
91
|
+
declare closeLabel: string;
|
|
92
|
+
declare form: MessageForm;
|
|
93
|
+
declare position: ToastPosition;
|
|
94
|
+
declare duration: number;
|
|
95
|
+
declare closeButton: boolean;
|
|
96
|
+
protected dismissEvent = "ds-message-dismiss";
|
|
97
|
+
|
|
98
|
+
declare tone: MessageTone;
|
|
99
|
+
declare heading: string | undefined;
|
|
100
|
+
declare text: string | undefined;
|
|
101
|
+
declare literal: boolean;
|
|
102
|
+
declare icon: string | undefined;
|
|
103
|
+
declare dismissible: boolean;
|
|
104
|
+
declare banner: boolean;
|
|
105
|
+
|
|
106
|
+
/** The role this element last set, so a role the page wrote is left alone. */
|
|
107
|
+
private ownRole: string | null = null;
|
|
108
|
+
private readonly relabel = () => this.requestUpdate();
|
|
109
|
+
|
|
110
|
+
constructor() {
|
|
111
|
+
super();
|
|
112
|
+
this.expand = false;
|
|
113
|
+
this.visibleToasts = 3;
|
|
114
|
+
this.richColors = false;
|
|
115
|
+
this.contained = false;
|
|
116
|
+
this.label = "Messages";
|
|
117
|
+
this.closeLabel = "Close";
|
|
118
|
+
this.form = "inline";
|
|
119
|
+
this.position = "bottom-right";
|
|
120
|
+
this.duration = Infinity;
|
|
121
|
+
this.closeButton = true;
|
|
122
|
+
this.tone = "neutral";
|
|
123
|
+
this.literal = false;
|
|
124
|
+
this.dismissible = false;
|
|
125
|
+
this.banner = false;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/** The tone in effect: an unknown value reads as neutral. */
|
|
129
|
+
get resolvedTone(): MessageTone {
|
|
130
|
+
return TONES.includes(this.tone) ? this.tone : "neutral";
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
connectedCallback() {
|
|
134
|
+
super.connectedCallback();
|
|
135
|
+
window.addEventListener("language-changed", this.relabel);
|
|
136
|
+
window.addEventListener("translations-loaded", this.relabel);
|
|
137
|
+
this.syncRole();
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
disconnectedCallback() {
|
|
141
|
+
window.removeEventListener("language-changed", this.relabel);
|
|
142
|
+
window.removeEventListener("translations-loaded", this.relabel);
|
|
143
|
+
super.disconnectedCallback();
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
protected willUpdate(changed: PropertyValues<this>) {
|
|
147
|
+
super.willUpdate(changed);
|
|
148
|
+
if (changed.has("tone") || changed.has("form")) this.syncRole();
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
private syncRole() {
|
|
152
|
+
if (!this.isConnected) return;
|
|
153
|
+
const current = this.getAttribute("role");
|
|
154
|
+
if (current !== null && current !== this.ownRole) return;
|
|
155
|
+
this.ownRole = this.form === "toast" ? "presentation" : this.resolvedTone === "danger" ? "alert" : "status";
|
|
156
|
+
if (current !== this.ownRole) this.setAttribute("role", this.ownRole);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
private words(value: string | undefined): string {
|
|
160
|
+
if (!value) return "";
|
|
161
|
+
return this.literal ? value : getText(value) || value;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Whether light-DOM content fills a slot: elements, or text that is not
|
|
166
|
+
* blank. The blank text between slotted children still counts as assigned
|
|
167
|
+
* to the default slot and hides its fallback, so `text` is drawn beside the
|
|
168
|
+
* slot rather than inside it.
|
|
169
|
+
*/
|
|
170
|
+
private slotted(name: string): boolean {
|
|
171
|
+
return [...this.childNodes].some(node => name
|
|
172
|
+
? node instanceof Element && node.getAttribute("slot") === name
|
|
173
|
+
: node instanceof Element ? !node.hasAttribute("slot") : node.nodeType === Node.TEXT_NODE && Boolean(node.textContent?.trim()));
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/** Ask to close: hides the notice unless a listener cancels `ds-message-dismiss`. */
|
|
177
|
+
dismiss(): boolean {
|
|
178
|
+
const event = new CustomEvent<MessageDismissDetail>(this.dismissEvent, {
|
|
179
|
+
bubbles: true, composed: true, cancelable: true, detail: { tone: this.resolvedTone },
|
|
180
|
+
});
|
|
181
|
+
if (!this.dispatchEvent(event)) return false;
|
|
182
|
+
this.hidden = true;
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
render() {
|
|
187
|
+
if (this.form === "toast") return html`<ds-toast .expand=${this.expand} .visibleToasts=${this.visibleToasts} .richColors=${this.richColors} .contained=${this.contained} .label=${this.label} .closeLabel=${this.closeLabel} .position=${this.position} .duration=${this.duration} .closeButton=${this.closeButton}></ds-toast>`;
|
|
188
|
+
const tone = this.resolvedTone;
|
|
189
|
+
const heading = this.words(this.heading);
|
|
190
|
+
const text = this.words(this.text);
|
|
191
|
+
const hasHeading = Boolean(heading) || this.slotted("heading");
|
|
192
|
+
const slottedText = this.slotted("");
|
|
193
|
+
const hasText = Boolean(text) || slottedText;
|
|
194
|
+
const hasActions = this.slotted("actions");
|
|
195
|
+
const changed = () => this.requestUpdate();
|
|
196
|
+
return html`<div class="ds-notice${tone === "neutral" ? "" : ` ds-notice--${tone}`}${(this.banner || this.form === "banner") ? " ds-notice--banner" : ""}" part="message notice">
|
|
197
|
+
<span class="ds-notice__mark" part="mark" aria-hidden="true">
|
|
198
|
+
<slot name="icon" @slotchange=${changed}><ds-icon size="large" .type=${this.icon || MESSAGE_ICONS[tone]}></ds-icon></slot>
|
|
199
|
+
</span>
|
|
200
|
+
<div class="ds-notice__title" part="title" ?hidden=${!hasHeading}><slot name="heading" @slotchange=${changed}>${heading}</slot></div>
|
|
201
|
+
<div class="ds-notice__text" part="text" ?hidden=${!hasText}><slot @slotchange=${changed}></slot>${slottedText ? nothing : text}</div>
|
|
202
|
+
<div class="ds-notice__actions" part="actions" ?hidden=${!hasActions}><slot name="actions" @slotchange=${changed}></slot></div>
|
|
203
|
+
${this.dismissible
|
|
204
|
+
? html`<button class="ds-button ds-button--icon ds-notice__dismiss" part="dismiss" type="button" aria-label=${getText("Close") || "Close"} @click=${() => this.dismiss()}>
|
|
205
|
+
<ds-icon type="close" aria-hidden="true"></ds-icon>
|
|
206
|
+
</button>`
|
|
207
|
+
: nothing}
|
|
208
|
+
</div>`;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
define("ds-message", Message);
|
|
213
|
+
|
|
214
|
+
declare global {
|
|
215
|
+
interface HTMLElementTagNameMap {
|
|
216
|
+
"ds-message": Message;
|
|
217
|
+
}
|
|
218
|
+
}
|
package/DS1/2-core/ds-notice.ts
CHANGED
|
@@ -1,180 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// actions and an optional dismiss; with `banner`, a strip across the top of
|
|
4
|
-
// its positioning context instead. Drawn by 1-root/notice.css, the same
|
|
5
|
-
// classes a page without scripts writes.
|
|
6
|
-
|
|
7
|
-
import { LitElement, html, nothing, unsafeCSS, type PropertyValues } from "lit";
|
|
8
|
-
import { getText } from "../0-face/i18n";
|
|
1
|
+
/** Compatibility name. New surfaces use Message. */
|
|
2
|
+
import { Message, MESSAGE_ICONS } from "./ds-message";
|
|
9
3
|
import { define } from "../0-face/define";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
export type NoticeTone = "neutral" | "success" | "warning" | "danger";
|
|
16
|
-
const TONES: readonly NoticeTone[] = ["neutral", "success", "warning", "danger"];
|
|
17
|
-
/** The icon each tone's mark carries unless `icon` names another. */
|
|
18
|
-
export const NOTICE_ICONS: Readonly<Record<NoticeTone, string>> = {
|
|
19
|
-
neutral: "info",
|
|
20
|
-
success: "check",
|
|
21
|
-
warning: "warning",
|
|
22
|
-
danger: "warning",
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
/** Detail of `ds-notice-dismiss`. Cancel the event to keep the notice and remove it yourself. */
|
|
26
|
-
export interface NoticeDismissDetail { tone: NoticeTone }
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* @element ds-notice
|
|
30
|
-
* @prop {"neutral" | "success" | "warning" | "danger"} tone - The mark's colour
|
|
31
|
-
* and icon; danger also turns the words into the danger colour. Neutral by default.
|
|
32
|
-
* @prop {string} heading - A title: a translation key, or literal words.
|
|
33
|
-
* @prop {string} text - The text: a translation key, or literal words.
|
|
34
|
-
* @prop {boolean} literal - Show `heading` and `text` as written, never looked up.
|
|
35
|
-
* @prop {string} icon - An icon from the library in place of the tone's own.
|
|
36
|
-
* @prop {boolean} dismissible - Show a close button at the end of the first line.
|
|
37
|
-
* @prop {boolean} banner - A strip one square high across the top of its
|
|
38
|
-
* positioning context, filled in the tone's colour, its words, actions and
|
|
39
|
-
* close button on one line; it reserves no room in the flow.
|
|
40
|
-
*
|
|
41
|
-
* @slot - The text, when it needs more than words: a link, a strong word.
|
|
42
|
-
* @slot heading - The title, as inline content.
|
|
43
|
-
* @slot icon - An icon of the page's own inside the mark.
|
|
44
|
-
* @slot actions - Buttons or links on the row under the words.
|
|
45
|
-
*
|
|
46
|
-
* @fires ds-notice-dismiss - The close button was pressed. Cancelable: unless
|
|
47
|
-
* it is cancelled, the notice hides itself.
|
|
48
|
-
*
|
|
49
|
-
* The element is a live region: `role="status"`, or `role="alert"` for danger,
|
|
50
|
-
* unless the page gives it a role of its own.
|
|
51
|
-
*
|
|
52
|
-
* @example
|
|
53
|
-
* <ds-notice tone="danger" heading="Couldn't save" dismissible>
|
|
54
|
-
* Your changes are kept on this device.
|
|
55
|
-
* <ds-button slot="actions" secondary>Try again</ds-button>
|
|
56
|
-
* </ds-notice>
|
|
57
|
-
*/
|
|
58
|
-
export class Notice extends LitElement {
|
|
59
|
-
static properties = {
|
|
60
|
-
tone: { type: String, reflect: true },
|
|
61
|
-
heading: { type: String },
|
|
62
|
-
text: { type: String },
|
|
63
|
-
literal: { type: Boolean, reflect: true },
|
|
64
|
-
icon: { type: String },
|
|
65
|
-
dismissible: { type: Boolean, reflect: true },
|
|
66
|
-
banner: { type: Boolean, reflect: true },
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
static styles = [unsafeCSS(metrics), unsafeCSS(controls), unsafeCSS(styles)];
|
|
70
|
-
|
|
71
|
-
declare tone: NoticeTone;
|
|
72
|
-
declare heading: string | undefined;
|
|
73
|
-
declare text: string | undefined;
|
|
74
|
-
declare literal: boolean;
|
|
75
|
-
declare icon: string | undefined;
|
|
76
|
-
declare dismissible: boolean;
|
|
77
|
-
declare banner: boolean;
|
|
78
|
-
|
|
79
|
-
/** The role this element last set, so a role the page wrote is left alone. */
|
|
80
|
-
private ownRole: string | null = null;
|
|
81
|
-
private readonly relabel = () => this.requestUpdate();
|
|
82
|
-
|
|
83
|
-
constructor() {
|
|
84
|
-
super();
|
|
85
|
-
this.tone = "neutral";
|
|
86
|
-
this.literal = false;
|
|
87
|
-
this.dismissible = false;
|
|
88
|
-
this.banner = false;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/** The tone in effect: an unknown value reads as neutral. */
|
|
92
|
-
get resolvedTone(): NoticeTone {
|
|
93
|
-
return TONES.includes(this.tone) ? this.tone : "neutral";
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
connectedCallback() {
|
|
97
|
-
super.connectedCallback();
|
|
98
|
-
window.addEventListener("language-changed", this.relabel);
|
|
99
|
-
window.addEventListener("translations-loaded", this.relabel);
|
|
100
|
-
this.syncRole();
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
disconnectedCallback() {
|
|
104
|
-
window.removeEventListener("language-changed", this.relabel);
|
|
105
|
-
window.removeEventListener("translations-loaded", this.relabel);
|
|
106
|
-
super.disconnectedCallback();
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
protected willUpdate(changed: PropertyValues<this>) {
|
|
110
|
-
super.willUpdate(changed);
|
|
111
|
-
if (changed.has("tone")) this.syncRole();
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
private syncRole() {
|
|
115
|
-
if (!this.isConnected) return;
|
|
116
|
-
const current = this.getAttribute("role");
|
|
117
|
-
if (current !== null && current !== this.ownRole) return;
|
|
118
|
-
this.ownRole = this.resolvedTone === "danger" ? "alert" : "status";
|
|
119
|
-
if (current !== this.ownRole) this.setAttribute("role", this.ownRole);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
private words(value: string | undefined): string {
|
|
123
|
-
if (!value) return "";
|
|
124
|
-
return this.literal ? value : getText(value) || value;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Whether light-DOM content fills a slot: elements, or text that is not
|
|
129
|
-
* blank. The blank text between slotted children still counts as assigned
|
|
130
|
-
* to the default slot and hides its fallback, so `text` is drawn beside the
|
|
131
|
-
* slot rather than inside it.
|
|
132
|
-
*/
|
|
133
|
-
private slotted(name: string): boolean {
|
|
134
|
-
return [...this.childNodes].some(node => name
|
|
135
|
-
? node instanceof Element && node.getAttribute("slot") === name
|
|
136
|
-
: node instanceof Element ? !node.hasAttribute("slot") : node.nodeType === Node.TEXT_NODE && Boolean(node.textContent?.trim()));
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/** Ask to close: hides the notice unless a listener cancels `ds-notice-dismiss`. */
|
|
140
|
-
dismiss(): boolean {
|
|
141
|
-
const event = new CustomEvent<NoticeDismissDetail>("ds-notice-dismiss", {
|
|
142
|
-
bubbles: true, composed: true, cancelable: true, detail: { tone: this.resolvedTone },
|
|
143
|
-
});
|
|
144
|
-
if (!this.dispatchEvent(event)) return false;
|
|
145
|
-
this.hidden = true;
|
|
146
|
-
return true;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
render() {
|
|
150
|
-
const tone = this.resolvedTone;
|
|
151
|
-
const heading = this.words(this.heading);
|
|
152
|
-
const text = this.words(this.text);
|
|
153
|
-
const hasHeading = Boolean(heading) || this.slotted("heading");
|
|
154
|
-
const slottedText = this.slotted("");
|
|
155
|
-
const hasText = Boolean(text) || slottedText;
|
|
156
|
-
const hasActions = this.slotted("actions");
|
|
157
|
-
const changed = () => this.requestUpdate();
|
|
158
|
-
return html`<div class="ds-notice${tone === "neutral" ? "" : ` ds-notice--${tone}`}${this.banner ? " ds-notice--banner" : ""}" part="notice">
|
|
159
|
-
<span class="ds-notice__mark" part="mark" aria-hidden="true">
|
|
160
|
-
<slot name="icon" @slotchange=${changed}><ds-icon size="large" .type=${this.icon || NOTICE_ICONS[tone]}></ds-icon></slot>
|
|
161
|
-
</span>
|
|
162
|
-
<div class="ds-notice__title" part="title" ?hidden=${!hasHeading}><slot name="heading" @slotchange=${changed}>${heading}</slot></div>
|
|
163
|
-
<div class="ds-notice__text" part="text" ?hidden=${!hasText}><slot @slotchange=${changed}></slot>${slottedText ? nothing : text}</div>
|
|
164
|
-
<div class="ds-notice__actions" part="actions" ?hidden=${!hasActions}><slot name="actions" @slotchange=${changed}></slot></div>
|
|
165
|
-
${this.dismissible
|
|
166
|
-
? html`<button class="ds-button ds-button--icon ds-notice__dismiss" part="dismiss" type="button" aria-label=${getText("Close") || "Close"} @click=${() => this.dismiss()}>
|
|
167
|
-
<ds-icon type="close" aria-hidden="true"></ds-icon>
|
|
168
|
-
</button>`
|
|
169
|
-
: nothing}
|
|
170
|
-
</div>`;
|
|
171
|
-
}
|
|
4
|
+
export type { MessageTone as NoticeTone, MessageDismissDetail as NoticeDismissDetail } from "./ds-message";
|
|
5
|
+
export const NOTICE_ICONS = MESSAGE_ICONS;
|
|
6
|
+
export class Notice extends Message {
|
|
7
|
+
protected dismissEvent = "ds-notice-dismiss";
|
|
172
8
|
}
|
|
173
|
-
|
|
174
9
|
define("ds-notice", Notice);
|
|
175
|
-
|
|
176
|
-
declare global {
|
|
177
|
-
interface HTMLElementTagNameMap {
|
|
178
|
-
"ds-notice": Notice;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
10
|
+
declare global { interface HTMLElementTagNameMap { "ds-notice": Notice } }
|
package/DS1/2-core/ds-toast.ts
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* - `<ds-toast>` is Sonner's `<Toaster />`, with its `position`, `expand`,
|
|
14
14
|
* `visible-toasts`, `duration`, `close-button` and `rich-colors`;
|
|
15
15
|
* `contained` draws it inside its positioned parent instead of the window.
|
|
16
|
-
* - A toast stays
|
|
16
|
+
* - A toast stays until dismissed; an explicitly timed toast pauses while the stack is hovered,
|
|
17
17
|
* focused, held or the tab is hidden. Three show at once, stacked behind
|
|
18
18
|
* one another and spread out on hover. A swipe towards the edge dismisses one,
|
|
19
19
|
* Alt+T reaches them from the keyboard, and they come and go with Sonner's
|
|
@@ -101,7 +101,7 @@ export class Toaster extends LitElement {
|
|
|
101
101
|
this.expand = false;
|
|
102
102
|
this.visibleToasts = VISIBLE_TOASTS;
|
|
103
103
|
this.duration = DURATION;
|
|
104
|
-
this.closeButton =
|
|
104
|
+
this.closeButton = true;
|
|
105
105
|
this.richColors = false;
|
|
106
106
|
this.contained = false;
|
|
107
107
|
this.label = "Notifications";
|
|
@@ -108,8 +108,10 @@ export const iconNameToSvgMap = {
|
|
|
108
108
|
"categories": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g filter=\"url(#filter0_f_1265_1849)\">\n<circle cx=\"8\" cy=\"8\" r=\"3.00244\" fill=\"currentColor\"/>\n</g>\n<defs>\n<filter id=\"filter0_f_1265_1849\" x=\"3.99756\" y=\"3.99756\" width=\"8.00488\" height=\"8.00488\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/>\n<feGaussianBlur stdDeviation=\"0.5\" result=\"effect1_foregroundBlur_1265_1849\"/>\n</filter>\n</defs>\n</svg>",
|
|
109
109
|
"check": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M6.68649 11.884L12.443 6.13601L11.736 5.42715L6.68835 10.4827L4.26399 8.0501L3.55696 8.74525L6.68649 11.884Z\" fill=\"currentColor\"/>\n</svg>",
|
|
110
110
|
"check-alt": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M6.68647 11.884L12.443 6.13601L11.736 5.42715L6.68834 10.4827L4.26398 8.0501L3.55695 8.74525L6.68647 11.884Z\" fill=\"currentColor\"/>\n</svg>",
|
|
111
|
+
"chevron-down": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M4.25 6.25L8 10L11.75 6.25\" stroke=\"currentColor\"/>\n</svg>",
|
|
111
112
|
"chevron-left": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M9.75 4.25L6 8L9.75 11.75\" stroke=\"currentColor\"/>\n</svg>",
|
|
112
113
|
"chevron-right": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M6.25 4.25L10 8L6.25 11.75\" stroke=\"currentColor\"/>\n</svg>",
|
|
114
|
+
"chevron-up": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M4.25 9.75L8 6L11.75 9.75\" stroke=\"currentColor\"/>\n</svg>",
|
|
113
115
|
"close": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M12.1215 4.58087L8.70453 7.99397L12.1176 11.4169L11.4106 12.112L7.99847 8.69108L4.58636 12.112L3.87836 11.4031L7.29535 7.99005L3.88226 4.56716L4.58929 3.87201L8.0014 7.29294L11.4145 3.87201L12.1215 4.58087Z\" fill=\"currentColor\"/>\n</svg>",
|
|
114
116
|
"cloud": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g stroke=\"currentColor\" stroke-width=\"0.92\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4.75 12.25C3.09 12.25 1.75 10.91 1.75 9.25C1.75 7.75 2.85 6.5 4.29 6.29C4.86 4.36 6.65 3 8.75 3C11.35 3 13.25 5.06 13.25 7.5V7.6C13.84 8.1 14.25 8.8 14.25 9.75C14.25 11.13 13.13 12.25 11.75 12.25Z\"/></g>\n</svg>",
|
|
115
117
|
"code": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M6.5 4.5L3 8L6.5 11.5M9.5 4.5L13 8L9.5 11.5\" stroke=\"currentColor\" stroke-width=\"1.1\"/>\n</svg>",
|
|
@@ -451,8 +453,10 @@ export const iconNames = [
|
|
|
451
453
|
"categories",
|
|
452
454
|
"check",
|
|
453
455
|
"check-alt",
|
|
456
|
+
"chevron-down",
|
|
454
457
|
"chevron-left",
|
|
455
458
|
"chevron-right",
|
|
459
|
+
"chevron-up",
|
|
456
460
|
"close",
|
|
457
461
|
"cloud",
|
|
458
462
|
"code",
|
|
@@ -96,8 +96,10 @@ export const icons: Readonly<Record<string, string>> = {
|
|
|
96
96
|
"cart": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g stroke=\"currentColor\" stroke-width=\"0.92\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1.75 2.75H3.25L4.75 10.25H12.25L13.5 5H4\"/><circle cx=\"5.5\" cy=\"12.75\" r=\"0.75\"/><circle cx=\"11.25\" cy=\"12.75\" r=\"0.75\"/></g>\n</svg>",
|
|
97
97
|
"categories": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g filter=\"url(#filter0_f_1265_1849)\">\n<circle cx=\"8\" cy=\"8\" r=\"3.00244\" fill=\"currentColor\"/>\n</g>\n<defs>\n<filter id=\"filter0_f_1265_1849\" x=\"3.99756\" y=\"3.99756\" width=\"8.00488\" height=\"8.00488\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/>\n<feGaussianBlur stdDeviation=\"0.5\" result=\"effect1_foregroundBlur_1265_1849\"/>\n</filter>\n</defs>\n</svg>",
|
|
98
98
|
"check-alt": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M6.68647 11.884L12.443 6.13601L11.736 5.42715L6.68834 10.4827L4.26398 8.0501L3.55695 8.74525L6.68647 11.884Z\" fill=\"currentColor\"/>\n</svg>",
|
|
99
|
+
"chevron-down": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M4.25 6.25L8 10L11.75 6.25\" stroke=\"currentColor\"/>\n</svg>",
|
|
99
100
|
"chevron-left": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M9.75 4.25L6 8L9.75 11.75\" stroke=\"currentColor\"/>\n</svg>",
|
|
100
101
|
"chevron-right": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M6.25 4.25L10 8L6.25 11.75\" stroke=\"currentColor\"/>\n</svg>",
|
|
102
|
+
"chevron-up": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M4.25 9.75L8 6L11.75 9.75\" stroke=\"currentColor\"/>\n</svg>",
|
|
101
103
|
"cloud": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g stroke=\"currentColor\" stroke-width=\"0.92\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4.75 12.25C3.09 12.25 1.75 10.91 1.75 9.25C1.75 7.75 2.85 6.5 4.29 6.29C4.86 4.36 6.65 3 8.75 3C11.35 3 13.25 5.06 13.25 7.5V7.6C13.84 8.1 14.25 8.8 14.25 9.75C14.25 11.13 13.13 12.25 11.75 12.25Z\"/></g>\n</svg>",
|
|
102
104
|
"code": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M6.5 4.5L3 8L6.5 11.5M9.5 4.5L13 8L9.5 11.5\" stroke=\"currentColor\" stroke-width=\"1.1\"/>\n</svg>",
|
|
103
105
|
"code-block": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M2.5 3H13.5V13H2.5Z\" stroke=\"currentColor\" stroke-width=\"1.1\"/>\n<path d=\"M6.5 6L4.5 8L6.5 10M9.5 6L11.5 8L9.5 10\" stroke=\"currentColor\" stroke-width=\"1.1\"/>\n</svg>",
|
|
@@ -46,4 +46,4 @@ export const icons: Readonly<Record<string, string>> = {
|
|
|
46
46
|
"up": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M7.49645 3.48222V16H8.50702L8.50841 3.48259L11.4156 6.38982L12.1095 5.68299L8.00173 1.57524L3.8905 5.68647L4.59784 6.39381L7.49645 3.48222Z\" fill=\"currentColor\"/>\n</svg>",
|
|
47
47
|
"views": "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<circle cx=\"7\" cy=\"7\" r=\"4.5\" stroke=\"currentColor\" stroke-width=\"0.92\"/>\n<path d=\"M10.2 10.2L13.5 13.5\" stroke=\"currentColor\" stroke-width=\"0.92\"/>\n</svg>"
|
|
48
48
|
}
|
|
49
|
-
export const deferredIconNames = ["1x","1xdots","1xgrid","1xlines","2x","2xdots","2xgrid","2xgrid-alt","2xgrid-alt-2","2xgrid-alt-3","2xlines","4x4","airtable","archive-alt","arrange-archive","arrange-check","arrange-chevron","arrange-connect","arrange-draft","arrange-dropdown","arrange-home","arrange-link","arrange-menu","arrange-more","arrange-page","arrange-plus","arrange-site","attach","audio","avatar","badge-bands","badge-bands-3d","badge-blue-fan","badge-blue-fan-3d","badge-bricks","badge-bricks-3d","badge-broken-stripes","badge-broken-stripes-3d","badge-checker","badge-checker-3d","badge-diamond","badge-diamond-3d","badge-fan","badge-fan-3d","badge-fan-dark","badge-fan-dark-3d","badge-halves","badge-halves-3d","badge-halves-green","badge-halves-green-3d","badge-red","badge-red-3d","badge-red-blue-bricks","badge-red-blue-bricks-3d","badge-round-fan","badge-round-fan-3d","badge-shard","badge-shard-3d","badge-split-circle","badge-split-circle-3d","badge-tall-bricks","badge-tall-bricks-3d","badge-weave","badge-weave-3d","bag-alt","bank","banknote","block-accordion","block-banner","block-breadcrumbs","block-button","block-divider","block-forms","block-group","block-heading","block-image","block-logo-marquee","block-page-progress","block-section","block-table","block-tabs","block-text","bold","bolt","book","book-alt","box","briefcase","building","bullet","callout","car","card","cart","categories","check-alt","chevron-left","chevron-right","cloud","code","code-block","coffee","coins","color","column","comment","connect","content","cursor","curve","default","dictate","dislike","divider","dot-bank","dot-banknote","dot-banknotes","dot-card","dot-coin","dot-coins","dot-receipt","dot-safe","dot-transfer","dot-wallet","download","drive","drop","dropbox","dumbbell","equation","exercise","eye","eye-off","facebook","figma","flame","flip","food","form","fuel","gallery","game","gift","github","globe","group","group-alt","group-alt-2","h1","h2","h3","handle","head","heart","help","help-alt","history","home-alt","icon","image","in","income","indent","info","instagram","italic","item","jpbank","key","keyboard","life","like","link","linkedin","list-line","lock-filled","logo-marquee","loom","map","medical","mention","menu","minimize","minimize-alt","minus","money","moon","move","music","music-alt","navigation-check","note-alt","note-alt-2","note-lines","notifications","notion","numbered","offline","open-alt","open-source","outdent","page","page-18","page-alt","page-note","panel","password-see","password-unsee","pattern-call-to-action","pattern-card","pattern-feature","pattern-hero","pause","paw","pdf","people","percent","phone","pill","plane","play-alt","postal","present","quote","reaction","receipt","redo","refresh","refund","relationships","repeat","rewind","rewind-30","rewind-30-alt","rotate","row","safe","school","school-alt","search-30","see-30","settings","shield","shield-alt","shirt","shop","sign-in","sign-out","slack","slash","sparkle","star-alt","star-alt-2","start","status","status-alt","status-filled","stop","strike","sun","system","table","tag","templates","text","ticket","title","title-struck","titlestyle","todo","toggle","train","transfer","triangle","tv","underline","undo","ungroup","unhead","unicon","untitle","up-right","upload","video","vimeo","wallet","warning","wifi","window","work","wrench","x-brand","youtube"] as const
|
|
49
|
+
export const deferredIconNames = ["1x","1xdots","1xgrid","1xlines","2x","2xdots","2xgrid","2xgrid-alt","2xgrid-alt-2","2xgrid-alt-3","2xlines","4x4","airtable","archive-alt","arrange-archive","arrange-check","arrange-chevron","arrange-connect","arrange-draft","arrange-dropdown","arrange-home","arrange-link","arrange-menu","arrange-more","arrange-page","arrange-plus","arrange-site","attach","audio","avatar","badge-bands","badge-bands-3d","badge-blue-fan","badge-blue-fan-3d","badge-bricks","badge-bricks-3d","badge-broken-stripes","badge-broken-stripes-3d","badge-checker","badge-checker-3d","badge-diamond","badge-diamond-3d","badge-fan","badge-fan-3d","badge-fan-dark","badge-fan-dark-3d","badge-halves","badge-halves-3d","badge-halves-green","badge-halves-green-3d","badge-red","badge-red-3d","badge-red-blue-bricks","badge-red-blue-bricks-3d","badge-round-fan","badge-round-fan-3d","badge-shard","badge-shard-3d","badge-split-circle","badge-split-circle-3d","badge-tall-bricks","badge-tall-bricks-3d","badge-weave","badge-weave-3d","bag-alt","bank","banknote","block-accordion","block-banner","block-breadcrumbs","block-button","block-divider","block-forms","block-group","block-heading","block-image","block-logo-marquee","block-page-progress","block-section","block-table","block-tabs","block-text","bold","bolt","book","book-alt","box","briefcase","building","bullet","callout","car","card","cart","categories","check-alt","chevron-down","chevron-left","chevron-right","chevron-up","cloud","code","code-block","coffee","coins","color","column","comment","connect","content","cursor","curve","default","dictate","dislike","divider","dot-bank","dot-banknote","dot-banknotes","dot-card","dot-coin","dot-coins","dot-receipt","dot-safe","dot-transfer","dot-wallet","download","drive","drop","dropbox","dumbbell","equation","exercise","eye","eye-off","facebook","figma","flame","flip","food","form","fuel","gallery","game","gift","github","globe","group","group-alt","group-alt-2","h1","h2","h3","handle","head","heart","help","help-alt","history","home-alt","icon","image","in","income","indent","info","instagram","italic","item","jpbank","key","keyboard","life","like","link","linkedin","list-line","lock-filled","logo-marquee","loom","map","medical","mention","menu","minimize","minimize-alt","minus","money","moon","move","music","music-alt","navigation-check","note-alt","note-alt-2","note-lines","notifications","notion","numbered","offline","open-alt","open-source","outdent","page","page-18","page-alt","page-note","panel","password-see","password-unsee","pattern-call-to-action","pattern-card","pattern-feature","pattern-hero","pause","paw","pdf","people","percent","phone","pill","plane","play-alt","postal","present","quote","reaction","receipt","redo","refresh","refund","relationships","repeat","rewind","rewind-30","rewind-30-alt","rotate","row","safe","school","school-alt","search-30","see-30","settings","shield","shield-alt","shirt","shop","sign-in","sign-out","slack","slash","sparkle","star-alt","star-alt-2","start","status","status-alt","status-filled","stop","strike","sun","system","table","tag","templates","text","ticket","title","title-struck","titlestyle","todo","toggle","train","transfer","triangle","tv","underline","undo","ungroup","unhead","unicon","untitle","up-right","upload","video","vimeo","wallet","warning","wifi","window","work","wrench","x-brand","youtube"] as const
|