@godxjp/ui 18.5.0 → 18.7.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/dist/components/charts/compact-bar-trend.d.ts +2 -1
- package/dist/components/charts/index.d.ts +4 -1
- package/dist/components/data-display/data-table.d.ts +25 -4
- package/dist/components/data-display/data-table.js +13 -2
- package/dist/components/data-display/empty-state.js +1 -1
- package/dist/components/data-display/index.d.ts +1 -1
- package/dist/components/data-display/list-row.d.ts +19 -0
- package/dist/components/data-display/list-row.js +2 -0
- package/dist/components/data-display/qr-code.d.ts +1 -1
- package/dist/components/data-display/table.d.ts +47 -2
- package/dist/components/data-display/table.js +29 -4
- package/dist/components/data-entry/command.d.ts +10 -10
- package/dist/components/data-entry/index.d.ts +1 -0
- package/dist/components/data-entry/input-otp.d.ts +1 -0
- package/dist/components/feedback/alert.d.ts +20 -2
- package/dist/components/feedback/alert.js +11 -1
- package/dist/components/feedback/dialog.d.ts +14 -1
- package/dist/components/feedback/dialog.js +4 -0
- package/dist/components/feedback/index.d.ts +3 -3
- package/dist/components/feedback/index.js +5 -1
- package/dist/components/general/logo.d.ts +7 -1
- package/dist/components/general/logo.js +1 -1
- package/dist/components/layout/app-shell.d.ts +1 -1
- package/dist/components/layout/app-shell.js +55 -46
- package/dist/components/layout/auth-account-summary.d.ts +5 -0
- package/dist/components/layout/auth-account-summary.js +31 -0
- package/dist/components/layout/auth-shell.d.ts +5 -2
- package/dist/components/layout/centered-shell.d.ts +1 -1
- package/dist/components/layout/centered-shell.js +28 -19
- package/dist/components/layout/error-surface.d.ts +35 -0
- package/dist/components/layout/error-surface.js +155 -0
- package/dist/components/layout/flex.d.ts +1 -1
- package/dist/components/layout/flex.js +4 -0
- package/dist/components/layout/index.d.ts +7 -0
- package/dist/components/layout/index.js +6 -0
- package/dist/components/layout/page-container.d.ts +1 -1
- package/dist/components/layout/page-container.js +23 -41
- package/dist/components/layout/page-header.d.ts +22 -0
- package/dist/components/layout/page-header.js +89 -0
- package/dist/components/navigation/filter-bar.d.ts +2 -2
- package/dist/components/navigation/filter-bar.js +44 -1
- package/dist/components/navigation/index.d.ts +1 -1
- package/dist/components/navigation/steps.js +38 -19
- package/dist/components/navigation/tabs.js +12 -3
- package/dist/components/ui/avatar.d.ts +2 -1
- package/dist/components/ui/avatar.js +2 -1
- package/dist/components/ui/input-otp.d.ts +4 -1
- package/dist/components/ui/input-otp.js +2 -1
- package/dist/components/ui/toggle-group.d.ts +7 -4
- package/dist/components/ui/toggle-group.js +32 -21
- package/dist/email/brand-mark.d.ts +21 -5
- package/dist/email/brand-mark.js +5 -0
- package/dist/email/color.d.ts +2 -1
- package/dist/email/geometry.d.ts +9 -1
- package/dist/email/geometry.js +1 -0
- package/dist/email/index.d.ts +6 -1
- package/dist/email/index.js +6 -0
- package/dist/email/inline-style.d.ts +7 -5
- package/dist/email/inline-style.js +5 -0
- package/dist/email/tokens.generated.d.ts +40 -20
- package/dist/email/tokens.generated.js +40 -20
- package/dist/email/urgency.d.ts +22 -0
- package/dist/email/urgency.js +14 -0
- package/dist/i18n/messages/en.json +26 -1
- package/dist/i18n/messages/ja.json +23 -1
- package/dist/i18n/messages/vi.json +23 -1
- package/dist/props/components/data-display.prop.d.ts +63 -1
- package/dist/props/components/data-entry.prop.d.ts +6 -0
- package/dist/props/components/feedback.prop.d.ts +6 -0
- package/dist/props/components/index.d.ts +1 -1
- package/dist/props/components/layout.prop.d.ts +244 -4
- package/dist/props/components/navigation.prop.d.ts +57 -1
- package/dist/props/registry.d.ts +205 -5
- package/dist/props/registry.js +270 -6
- package/dist/props/vocabulary/data.prop.d.ts +27 -0
- package/dist/props/vocabulary/index.d.ts +3 -3
- package/dist/props/vocabulary/interaction.prop.d.ts +19 -2
- package/dist/props/vocabulary/layout.prop.d.ts +41 -7
- package/dist/styles/alert-layout.css +36 -0
- package/dist/styles/control.css +28 -0
- package/dist/styles/data-display-layout.css +26 -0
- package/dist/styles/layout.css +212 -0
- package/dist/styles/logo-layout.css +42 -9
- package/dist/styles/navigation-layout.css +109 -0
- package/dist/styles/shell-layout.css +336 -0
- package/dist/styles/table-layout.css +164 -1
- package/dist/theme/dxs.canonical.css +5 -4
- package/dist/tokens/axes.css +4 -3
- package/dist/tokens/base.css +1 -0
- package/dist/tokens/components/data-display.css +13 -0
- package/dist/tokens/components/email.css +43 -16
- package/dist/tokens/components/error-surface.css +36 -0
- package/dist/tokens/components/feedback.css +20 -0
- package/dist/tokens/components/list-row.css +20 -0
- package/dist/tokens/components/logo.css +52 -10
- package/dist/tokens/components/navigation.css +41 -0
- package/dist/tokens/components/shell.css +109 -0
- package/dist/tokens/components/table.css +45 -0
- package/dist/tokens/foundation.css +26 -0
- package/dist/tokens/semantic/layout.css +38 -0
- package/package.json +8 -2
package/dist/email/index.js
CHANGED
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
roundedRectPath
|
|
23
23
|
} from "./brand-mark.js";
|
|
24
24
|
import { emailInlineStyle } from "./inline-style.js";
|
|
25
|
+
import { EMAIL_URGENCY, EMAIL_URGENCY_DARK } from "./urgency.js";
|
|
25
26
|
import {
|
|
26
27
|
EMAIL_COLOR_SOURCE,
|
|
27
28
|
EMAIL_COLOR_SOURCE_DARK,
|
|
@@ -37,9 +38,12 @@ import {
|
|
|
37
38
|
EMAIL_MOBILE as EMAIL_MOBILE2
|
|
38
39
|
} from "./geometry.js";
|
|
39
40
|
import { EMAIL_BRAND_MARK as EMAIL_BRAND_MARK2 } from "./brand-mark.js";
|
|
41
|
+
import { EMAIL_URGENCY as EMAIL_URGENCY2, EMAIL_URGENCY_DARK as EMAIL_URGENCY_DARK2 } from "./urgency.js";
|
|
40
42
|
const EMAIL_TOKENS = Object.freeze({
|
|
41
43
|
colors: EMAIL_COLORS2,
|
|
42
44
|
colorsDark: EMAIL_COLORS_DARK2,
|
|
45
|
+
urgency: EMAIL_URGENCY2,
|
|
46
|
+
urgencyDark: EMAIL_URGENCY_DARK2,
|
|
43
47
|
shell: EMAIL_SHELL2,
|
|
44
48
|
typography: EMAIL_TYPOGRAPHY2,
|
|
45
49
|
cta: EMAIL_CTA2,
|
|
@@ -67,6 +71,8 @@ export {
|
|
|
67
71
|
EMAIL_TOKENS,
|
|
68
72
|
EMAIL_TOKENS_JSON,
|
|
69
73
|
EMAIL_TYPOGRAPHY,
|
|
74
|
+
EMAIL_URGENCY,
|
|
75
|
+
EMAIL_URGENCY_DARK,
|
|
70
76
|
emailBrandMarkDataUri,
|
|
71
77
|
emailBrandMarkSvg,
|
|
72
78
|
emailBrandMarkTableHtml,
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Email clients do not run the cascade: Gmail strips `<style>`, Outlook resolves no custom
|
|
5
5
|
* property, and only the `style=""` attribute on the painting element is universally honoured.
|
|
6
|
-
* `emailInlineStyle` turns a declaration map into that attribute value AND enforces the
|
|
7
|
-
* that silently break templates — no `var()` (nothing resolves it)
|
|
8
|
-
* renderer drops the whole declaration)
|
|
9
|
-
*
|
|
6
|
+
* `emailInlineStyle` turns a declaration map into that attribute value AND enforces the three rules
|
|
7
|
+
* that silently break templates — no `var()` (nothing resolves it), no `calc()` (Outlook's Word
|
|
8
|
+
* renderer drops the whole declaration) and no `"` (it closes the `style="…"` attribute mid-value,
|
|
9
|
+
* which is how a double-quoted font family corrupts a whole tag). Failing loudly at template-build
|
|
10
|
+
* time beats a broken layout discovered in Mailpit.
|
|
10
11
|
*/
|
|
11
12
|
/** A declaration map. Numbers are emitted verbatim (already-unitless values like `font-weight`). */
|
|
12
13
|
export type EmailStyleDeclarations = Record<string, string | number | null | undefined>;
|
|
@@ -20,6 +21,7 @@ export type EmailStyleDeclarations = Record<string, string | number | null | und
|
|
|
20
21
|
*
|
|
21
22
|
* `null` / `undefined` values are dropped, so a conditional declaration needs no branch.
|
|
22
23
|
*
|
|
23
|
-
* @throws if a value contains `var()` or `calc()`
|
|
24
|
+
* @throws if a value contains `var()` or `calc()` (neither survives an email client) or a double
|
|
25
|
+
* quote (it terminates the `style="…"` attribute).
|
|
24
26
|
*/
|
|
25
27
|
export declare function emailInlineStyle(declarations: EmailStyleDeclarations): string;
|
|
@@ -9,6 +9,11 @@ function emailInlineStyle(declarations) {
|
|
|
9
9
|
`emailInlineStyle: "${property}: ${serialised}" uses var()/calc(), which no email client resolves. Pass the literal value from the @godxjp/ui/email token export instead.`
|
|
10
10
|
);
|
|
11
11
|
}
|
|
12
|
+
if (serialised.includes('"')) {
|
|
13
|
+
throw new TypeError(
|
|
14
|
+
`emailInlineStyle: "${property}: ${serialised}" contains a double quote, which terminates the style="\u2026" attribute it is written into. Use single quotes \u2014 a quoted font family from EMAIL_TYPOGRAPHY already ships that way.`
|
|
15
|
+
);
|
|
16
|
+
}
|
|
12
17
|
parts.push(`${kebab(property)}:${serialised}`);
|
|
13
18
|
}
|
|
14
19
|
return parts.join(";");
|
|
@@ -48,11 +48,19 @@ export declare const EMAIL_COLOR_SOURCE: {
|
|
|
48
48
|
readonly hsl: "204 100% 39%";
|
|
49
49
|
};
|
|
50
50
|
readonly brand: {
|
|
51
|
-
readonly cssVar: "--
|
|
52
|
-
readonly hsl: "
|
|
51
|
+
readonly cssVar: "--brand";
|
|
52
|
+
readonly hsl: "160.5 100% 29.6%";
|
|
53
53
|
};
|
|
54
54
|
readonly brandForeground: {
|
|
55
|
-
readonly cssVar: "--
|
|
55
|
+
readonly cssVar: "--brand-foreground";
|
|
56
|
+
readonly hsl: "60 33% 99%";
|
|
57
|
+
};
|
|
58
|
+
readonly urgency: {
|
|
59
|
+
readonly cssVar: "--attention";
|
|
60
|
+
readonly hsl: "25 99% 46%";
|
|
61
|
+
};
|
|
62
|
+
readonly urgencyForeground: {
|
|
63
|
+
readonly cssVar: "--attention-foreground";
|
|
56
64
|
readonly hsl: "60 33% 99%";
|
|
57
65
|
};
|
|
58
66
|
};
|
|
@@ -99,11 +107,19 @@ export declare const EMAIL_COLOR_SOURCE_DARK: {
|
|
|
99
107
|
readonly hsl: "204 90% 60%";
|
|
100
108
|
};
|
|
101
109
|
readonly brand: {
|
|
102
|
-
readonly cssVar: "--
|
|
103
|
-
readonly hsl: "
|
|
110
|
+
readonly cssVar: "--brand";
|
|
111
|
+
readonly hsl: "160.5 100% 36%";
|
|
104
112
|
};
|
|
105
113
|
readonly brandForeground: {
|
|
106
|
-
readonly cssVar: "--
|
|
114
|
+
readonly cssVar: "--brand-foreground";
|
|
115
|
+
readonly hsl: "48 9% 9%";
|
|
116
|
+
};
|
|
117
|
+
readonly urgency: {
|
|
118
|
+
readonly cssVar: "--attention";
|
|
119
|
+
readonly hsl: "25 95% 56%";
|
|
120
|
+
};
|
|
121
|
+
readonly urgencyForeground: {
|
|
122
|
+
readonly cssVar: "--attention-foreground";
|
|
107
123
|
readonly hsl: "48 9% 9%";
|
|
108
124
|
};
|
|
109
125
|
};
|
|
@@ -117,23 +133,27 @@ export declare const EMAIL_GEOMETRY_SOURCE: {
|
|
|
117
133
|
readonly "--email-card-reference-height": "407px";
|
|
118
134
|
readonly "--email-stack-gap": "24px";
|
|
119
135
|
readonly "--email-stack-gap-sm": "12px";
|
|
120
|
-
readonly "--email-mark-width": "
|
|
121
|
-
readonly "--email-mark-height": "
|
|
122
|
-
readonly "--email-
|
|
136
|
+
readonly "--email-mark-width": "22px";
|
|
137
|
+
readonly "--email-mark-height": "22px";
|
|
138
|
+
readonly "--email-mark-gap": "8px";
|
|
139
|
+
readonly "--email-wordmark-font-size": "13px";
|
|
140
|
+
readonly "--email-wordmark-font-weight": "700";
|
|
141
|
+
readonly "--email-font-family-sans": "'M PLUS 2', 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Yu Gothic Medium', YuGothic, 'Noto Sans JP', Meiryo, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, system-ui, Arial, sans-serif";
|
|
142
|
+
readonly "--email-font-family-mono": "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
|
|
123
143
|
readonly "--email-body-font-size": "14px";
|
|
124
|
-
readonly "--email-body-line-height": "1.
|
|
144
|
+
readonly "--email-body-line-height": "1.9";
|
|
125
145
|
readonly "--email-body-font-weight": "400";
|
|
126
|
-
readonly "--email-heading-font-size": "
|
|
127
|
-
readonly "--email-heading-line-height": "1.
|
|
128
|
-
readonly "--email-heading-font-weight": "
|
|
129
|
-
readonly "--email-cta-height": "
|
|
130
|
-
readonly "--email-cta-line-height": "
|
|
131
|
-
readonly "--email-cta-padding-x": "
|
|
146
|
+
readonly "--email-heading-font-size": "17px";
|
|
147
|
+
readonly "--email-heading-line-height": "1.7";
|
|
148
|
+
readonly "--email-heading-font-weight": "500";
|
|
149
|
+
readonly "--email-cta-height": "36px";
|
|
150
|
+
readonly "--email-cta-line-height": "36px";
|
|
151
|
+
readonly "--email-cta-padding-x": "16px";
|
|
132
152
|
readonly "--email-cta-radius": "6px";
|
|
133
153
|
readonly "--email-cta-font-size": "14px";
|
|
134
|
-
readonly "--email-cta-font-weight": "
|
|
135
|
-
readonly "--email-footer-font-size": "
|
|
136
|
-
readonly "--email-footer-line-height": "1.
|
|
154
|
+
readonly "--email-cta-font-weight": "500";
|
|
155
|
+
readonly "--email-footer-font-size": "11px";
|
|
156
|
+
readonly "--email-footer-line-height": "1.8";
|
|
137
157
|
readonly "--email-footer-link-gap": "12px";
|
|
138
158
|
readonly "--email-footer-padding-top": "20px";
|
|
139
159
|
readonly "--email-footer-border-width": "1px";
|
|
@@ -142,6 +162,6 @@ export declare const EMAIL_GEOMETRY_SOURCE: {
|
|
|
142
162
|
readonly "--email-mobile-width": "100%";
|
|
143
163
|
readonly "--email-mobile-padding": "20px";
|
|
144
164
|
readonly "--email-mobile-page-padding": "12px";
|
|
145
|
-
readonly "--email-mobile-heading-font-size": "
|
|
165
|
+
readonly "--email-mobile-heading-font-size": "16px";
|
|
146
166
|
readonly "--email-mobile-cta-width": "100%";
|
|
147
167
|
};
|
|
@@ -40,11 +40,19 @@ const EMAIL_COLOR_SOURCE = {
|
|
|
40
40
|
"hsl": "204 100% 39%"
|
|
41
41
|
},
|
|
42
42
|
"brand": {
|
|
43
|
-
"cssVar": "--
|
|
44
|
-
"hsl": "
|
|
43
|
+
"cssVar": "--brand",
|
|
44
|
+
"hsl": "160.5 100% 29.6%"
|
|
45
45
|
},
|
|
46
46
|
"brandForeground": {
|
|
47
|
-
"cssVar": "--
|
|
47
|
+
"cssVar": "--brand-foreground",
|
|
48
|
+
"hsl": "60 33% 99%"
|
|
49
|
+
},
|
|
50
|
+
"urgency": {
|
|
51
|
+
"cssVar": "--attention",
|
|
52
|
+
"hsl": "25 99% 46%"
|
|
53
|
+
},
|
|
54
|
+
"urgencyForeground": {
|
|
55
|
+
"cssVar": "--attention-foreground",
|
|
48
56
|
"hsl": "60 33% 99%"
|
|
49
57
|
}
|
|
50
58
|
};
|
|
@@ -90,11 +98,19 @@ const EMAIL_COLOR_SOURCE_DARK = {
|
|
|
90
98
|
"hsl": "204 90% 60%"
|
|
91
99
|
},
|
|
92
100
|
"brand": {
|
|
93
|
-
"cssVar": "--
|
|
94
|
-
"hsl": "
|
|
101
|
+
"cssVar": "--brand",
|
|
102
|
+
"hsl": "160.5 100% 36%"
|
|
95
103
|
},
|
|
96
104
|
"brandForeground": {
|
|
97
|
-
"cssVar": "--
|
|
105
|
+
"cssVar": "--brand-foreground",
|
|
106
|
+
"hsl": "48 9% 9%"
|
|
107
|
+
},
|
|
108
|
+
"urgency": {
|
|
109
|
+
"cssVar": "--attention",
|
|
110
|
+
"hsl": "25 95% 56%"
|
|
111
|
+
},
|
|
112
|
+
"urgencyForeground": {
|
|
113
|
+
"cssVar": "--attention-foreground",
|
|
98
114
|
"hsl": "48 9% 9%"
|
|
99
115
|
}
|
|
100
116
|
};
|
|
@@ -107,23 +123,27 @@ const EMAIL_GEOMETRY_SOURCE = {
|
|
|
107
123
|
"--email-card-reference-height": "407px",
|
|
108
124
|
"--email-stack-gap": "24px",
|
|
109
125
|
"--email-stack-gap-sm": "12px",
|
|
110
|
-
"--email-mark-width": "
|
|
111
|
-
"--email-mark-height": "
|
|
112
|
-
"--email-
|
|
126
|
+
"--email-mark-width": "22px",
|
|
127
|
+
"--email-mark-height": "22px",
|
|
128
|
+
"--email-mark-gap": "8px",
|
|
129
|
+
"--email-wordmark-font-size": "13px",
|
|
130
|
+
"--email-wordmark-font-weight": "700",
|
|
131
|
+
"--email-font-family-sans": "'M PLUS 2', 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Yu Gothic Medium', YuGothic, 'Noto Sans JP', Meiryo, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, system-ui, Arial, sans-serif",
|
|
132
|
+
"--email-font-family-mono": "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace",
|
|
113
133
|
"--email-body-font-size": "14px",
|
|
114
|
-
"--email-body-line-height": "1.
|
|
134
|
+
"--email-body-line-height": "1.9",
|
|
115
135
|
"--email-body-font-weight": "400",
|
|
116
|
-
"--email-heading-font-size": "
|
|
117
|
-
"--email-heading-line-height": "1.
|
|
118
|
-
"--email-heading-font-weight": "
|
|
119
|
-
"--email-cta-height": "
|
|
120
|
-
"--email-cta-line-height": "
|
|
121
|
-
"--email-cta-padding-x": "
|
|
136
|
+
"--email-heading-font-size": "17px",
|
|
137
|
+
"--email-heading-line-height": "1.7",
|
|
138
|
+
"--email-heading-font-weight": "500",
|
|
139
|
+
"--email-cta-height": "36px",
|
|
140
|
+
"--email-cta-line-height": "36px",
|
|
141
|
+
"--email-cta-padding-x": "16px",
|
|
122
142
|
"--email-cta-radius": "6px",
|
|
123
143
|
"--email-cta-font-size": "14px",
|
|
124
|
-
"--email-cta-font-weight": "
|
|
125
|
-
"--email-footer-font-size": "
|
|
126
|
-
"--email-footer-line-height": "1.
|
|
144
|
+
"--email-cta-font-weight": "500",
|
|
145
|
+
"--email-footer-font-size": "11px",
|
|
146
|
+
"--email-footer-line-height": "1.8",
|
|
127
147
|
"--email-footer-link-gap": "12px",
|
|
128
148
|
"--email-footer-padding-top": "20px",
|
|
129
149
|
"--email-footer-border-width": "1px",
|
|
@@ -132,7 +152,7 @@ const EMAIL_GEOMETRY_SOURCE = {
|
|
|
132
152
|
"--email-mobile-width": "100%",
|
|
133
153
|
"--email-mobile-padding": "20px",
|
|
134
154
|
"--email-mobile-page-padding": "12px",
|
|
135
|
-
"--email-mobile-heading-font-size": "
|
|
155
|
+
"--email-mobile-heading-font-size": "16px",
|
|
136
156
|
"--email-mobile-cta-width": "100%"
|
|
137
157
|
};
|
|
138
158
|
export {
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type EmailHex } from "./color.js";
|
|
2
|
+
/**
|
|
3
|
+
* Semantic action-required styling for transactional email.
|
|
4
|
+
*
|
|
5
|
+
* `accent` is the non-text rail/border color painted on the normal email surface. The solid pair
|
|
6
|
+
* is safe for icons and large or bold labels that satisfy the 3:1 contrast floor; it is not a
|
|
7
|
+
* replacement for normal body copy, which remains `EMAIL_COLORS.foreground` on
|
|
8
|
+
* `EMAIL_COLORS.surface`. This deliberately narrow contract prevents urgency from becoming an
|
|
9
|
+
* undocumented second CTA or a component-local palette.
|
|
10
|
+
*/
|
|
11
|
+
export interface EmailUrgencyTokens {
|
|
12
|
+
/** Non-text action-required rail or border on the standard email surface. */
|
|
13
|
+
readonly accent: EmailHex;
|
|
14
|
+
/** Solid action-required fill for an icon or large/bold label. */
|
|
15
|
+
readonly solidBackground: EmailHex;
|
|
16
|
+
/** Foreground paired only with `solidBackground` under the usage restriction above. */
|
|
17
|
+
readonly solidForeground: EmailHex;
|
|
18
|
+
}
|
|
19
|
+
/** Light-scheme action-required email contract. */
|
|
20
|
+
export declare const EMAIL_URGENCY: Readonly<EmailUrgencyTokens>;
|
|
21
|
+
/** Dark-scheme action-required email contract for clients that honor dark-mode overrides. */
|
|
22
|
+
export declare const EMAIL_URGENCY_DARK: Readonly<EmailUrgencyTokens>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { EMAIL_COLORS, EMAIL_COLORS_DARK } from "./color.js";
|
|
2
|
+
function resolveUrgency(colors) {
|
|
3
|
+
return Object.freeze({
|
|
4
|
+
accent: colors.urgency,
|
|
5
|
+
solidBackground: colors.urgency,
|
|
6
|
+
solidForeground: colors.urgencyForeground
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
const EMAIL_URGENCY = resolveUrgency(EMAIL_COLORS);
|
|
10
|
+
const EMAIL_URGENCY_DARK = resolveUrgency(EMAIL_COLORS_DARK);
|
|
11
|
+
export {
|
|
12
|
+
EMAIL_URGENCY,
|
|
13
|
+
EMAIL_URGENCY_DARK
|
|
14
|
+
};
|
|
@@ -135,6 +135,9 @@
|
|
|
135
135
|
"openNav": "Open navigation menu",
|
|
136
136
|
"navLabel": "Menu"
|
|
137
137
|
},
|
|
138
|
+
"pageHeader": {
|
|
139
|
+
"loading": "Loading page…"
|
|
140
|
+
},
|
|
138
141
|
"authShell": {
|
|
139
142
|
"brandLabel": "Brand",
|
|
140
143
|
"mainLabel": "Main content",
|
|
@@ -150,6 +153,14 @@
|
|
|
150
153
|
"version": "Version {version}",
|
|
151
154
|
"effectiveDate": "Effective {date}"
|
|
152
155
|
},
|
|
156
|
+
"errorSurface": {
|
|
157
|
+
"statusLabel": "HTTP status {status}",
|
|
158
|
+
"requestId": "Request ID",
|
|
159
|
+
"permission": "Required permission",
|
|
160
|
+
"organization": "Organization",
|
|
161
|
+
"maintenanceWindow": "Scheduled maintenance",
|
|
162
|
+
"maintenanceProgress": "Maintenance progress {percent}"
|
|
163
|
+
},
|
|
153
164
|
"topbar": {
|
|
154
165
|
"toggleSidebar": "Toggle sidebar",
|
|
155
166
|
"search": "Search",
|
|
@@ -205,7 +216,13 @@
|
|
|
205
216
|
},
|
|
206
217
|
"navigation": {
|
|
207
218
|
"steps": {
|
|
208
|
-
"ariaLabel": "Progress"
|
|
219
|
+
"ariaLabel": "Progress",
|
|
220
|
+
"status": {
|
|
221
|
+
"wait": "Waiting",
|
|
222
|
+
"process": "Current step",
|
|
223
|
+
"finish": "Completed",
|
|
224
|
+
"error": "Error"
|
|
225
|
+
}
|
|
209
226
|
},
|
|
210
227
|
"breadcrumb": {
|
|
211
228
|
"ariaLabel": "Breadcrumb"
|
|
@@ -213,6 +230,14 @@
|
|
|
213
230
|
"toolbar": {
|
|
214
231
|
"ariaLabel": "Filters"
|
|
215
232
|
},
|
|
233
|
+
"filterBar": {
|
|
234
|
+
"appliedFilters": "Applied filters",
|
|
235
|
+
"removeFilter": "Remove filter {label}",
|
|
236
|
+
"resultCount": {
|
|
237
|
+
"one": "{count} result",
|
|
238
|
+
"other": "{count} results"
|
|
239
|
+
}
|
|
240
|
+
},
|
|
216
241
|
"localePicker": {
|
|
217
242
|
"ariaLabel": "Language"
|
|
218
243
|
},
|
|
@@ -135,6 +135,9 @@
|
|
|
135
135
|
"openNav": "ナビゲーションメニューを開く",
|
|
136
136
|
"navLabel": "メニュー"
|
|
137
137
|
},
|
|
138
|
+
"pageHeader": {
|
|
139
|
+
"loading": "ページを読み込んでいます…"
|
|
140
|
+
},
|
|
138
141
|
"authShell": {
|
|
139
142
|
"brandLabel": "ブランド",
|
|
140
143
|
"mainLabel": "メインコンテンツ",
|
|
@@ -150,6 +153,14 @@
|
|
|
150
153
|
"version": "バージョン {version}",
|
|
151
154
|
"effectiveDate": "施行日 {date}"
|
|
152
155
|
},
|
|
156
|
+
"errorSurface": {
|
|
157
|
+
"statusLabel": "HTTP ステータス {status}",
|
|
158
|
+
"requestId": "リクエスト ID",
|
|
159
|
+
"permission": "必要な権限",
|
|
160
|
+
"organization": "組織",
|
|
161
|
+
"maintenanceWindow": "計画メンテナンス",
|
|
162
|
+
"maintenanceProgress": "メンテナンス進捗 {percent}"
|
|
163
|
+
},
|
|
153
164
|
"topbar": {
|
|
154
165
|
"toggleSidebar": "サイドバーの切り替え",
|
|
155
166
|
"search": "検索",
|
|
@@ -205,7 +216,13 @@
|
|
|
205
216
|
},
|
|
206
217
|
"navigation": {
|
|
207
218
|
"steps": {
|
|
208
|
-
"ariaLabel": "進行状況"
|
|
219
|
+
"ariaLabel": "進行状況",
|
|
220
|
+
"status": {
|
|
221
|
+
"wait": "未完了",
|
|
222
|
+
"process": "現在のステップ",
|
|
223
|
+
"finish": "完了",
|
|
224
|
+
"error": "エラー"
|
|
225
|
+
}
|
|
209
226
|
},
|
|
210
227
|
"breadcrumb": {
|
|
211
228
|
"ariaLabel": "パンくずリスト"
|
|
@@ -213,6 +230,11 @@
|
|
|
213
230
|
"toolbar": {
|
|
214
231
|
"ariaLabel": "フィルター"
|
|
215
232
|
},
|
|
233
|
+
"filterBar": {
|
|
234
|
+
"appliedFilters": "適用中のフィルター",
|
|
235
|
+
"removeFilter": "フィルター「{label}」を解除",
|
|
236
|
+
"resultCount": "{count} 件"
|
|
237
|
+
},
|
|
216
238
|
"localePicker": {
|
|
217
239
|
"ariaLabel": "言語"
|
|
218
240
|
},
|
|
@@ -135,6 +135,9 @@
|
|
|
135
135
|
"openNav": "Mở menu điều hướng",
|
|
136
136
|
"navLabel": "Menu"
|
|
137
137
|
},
|
|
138
|
+
"pageHeader": {
|
|
139
|
+
"loading": "Đang tải trang…"
|
|
140
|
+
},
|
|
138
141
|
"authShell": {
|
|
139
142
|
"brandLabel": "Thương hiệu",
|
|
140
143
|
"mainLabel": "Nội dung chính",
|
|
@@ -150,6 +153,14 @@
|
|
|
150
153
|
"version": "Phiên bản {version}",
|
|
151
154
|
"effectiveDate": "Hiệu lực từ {date}"
|
|
152
155
|
},
|
|
156
|
+
"errorSurface": {
|
|
157
|
+
"statusLabel": "Trạng thái HTTP {status}",
|
|
158
|
+
"requestId": "Mã yêu cầu",
|
|
159
|
+
"permission": "Quyền yêu cầu",
|
|
160
|
+
"organization": "Tổ chức",
|
|
161
|
+
"maintenanceWindow": "Bảo trì theo lịch",
|
|
162
|
+
"maintenanceProgress": "Tiến độ bảo trì {percent}"
|
|
163
|
+
},
|
|
153
164
|
"topbar": {
|
|
154
165
|
"toggleSidebar": "Bật/tắt thanh bên",
|
|
155
166
|
"search": "Tìm kiếm",
|
|
@@ -205,7 +216,13 @@
|
|
|
205
216
|
},
|
|
206
217
|
"navigation": {
|
|
207
218
|
"steps": {
|
|
208
|
-
"ariaLabel": "Tiến trình"
|
|
219
|
+
"ariaLabel": "Tiến trình",
|
|
220
|
+
"status": {
|
|
221
|
+
"wait": "Đang chờ",
|
|
222
|
+
"process": "Bước hiện tại",
|
|
223
|
+
"finish": "Đã hoàn tất",
|
|
224
|
+
"error": "Lỗi"
|
|
225
|
+
}
|
|
209
226
|
},
|
|
210
227
|
"breadcrumb": {
|
|
211
228
|
"ariaLabel": "Đường dẫn"
|
|
@@ -213,6 +230,11 @@
|
|
|
213
230
|
"toolbar": {
|
|
214
231
|
"ariaLabel": "Bộ lọc"
|
|
215
232
|
},
|
|
233
|
+
"filterBar": {
|
|
234
|
+
"appliedFilters": "Bộ lọc đang áp dụng",
|
|
235
|
+
"removeFilter": "Bỏ bộ lọc {label}",
|
|
236
|
+
"resultCount": "{count} kết quả"
|
|
237
|
+
},
|
|
216
238
|
"localePicker": {
|
|
217
239
|
"ariaLabel": "Ngôn ngữ"
|
|
218
240
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** Data Display component prop types — @see docs/COMPONENTS.md#data-display */
|
|
2
2
|
import type * as React from "react";
|
|
3
|
-
import type { ActionProp, ClassNameProp, DescriptionProp, IconProp, TitleProp, ColumnDefProp, GetRowIdProp, OnRowClickProp, OnSelectChangeProp, OnSortChangeProp, OnTableDensityChangeProp, SelectedIdsProp, SortStateProp, TableDensityProp, ChildrenProp, ToneProp, HeadingLevelProp, HandlerProp, SizeProp, LabelProp, IdProp } from "../vocabulary/index.js";
|
|
3
|
+
import type { ActionProp, ClassNameProp, DescriptionProp, IconProp, TitleProp, ColumnDefProp, GetRowIdProp, OnRowClickProp, OnSelectChangeProp, OnSortChangeProp, OnTableDensityChangeProp, SelectedIdsProp, SortStateProp, TableDensityProp, TablePresetProp, BreakpointProp, DensityProp, ChildrenProp, ToneProp, AvatarShapeProp, HeadingLevelProp, HandlerProp, SizeProp, LabelProp, IdProp } from "../vocabulary/index.js";
|
|
4
4
|
/** @see EmptyState */
|
|
5
5
|
/**
|
|
6
6
|
* Semantic intent of the EmptyState icon medallion — a subset of the shared `ToneProp` vocabulary
|
|
@@ -50,6 +50,21 @@ export type DescriptionsItemProp = {
|
|
|
50
50
|
value: React.ReactNode;
|
|
51
51
|
mono?: boolean;
|
|
52
52
|
};
|
|
53
|
+
/**
|
|
54
|
+
* @see Avatar
|
|
55
|
+
*
|
|
56
|
+
* Identity mark. `shape` is the ONLY appearance knob: the default `circle` is the person avatar
|
|
57
|
+
* (unchanged — an existing `<Avatar>` renders identically), `square` is the entity-header
|
|
58
|
+
* organization / service mark (compact rounded square on the brand surface). Every value it
|
|
59
|
+
* paints — radius, box size, fill, glyph colour — comes from the `--avatar-square-*` component
|
|
60
|
+
* tokens (cardinal rule #45), so a service retunes the entity mark once in its theme instead of
|
|
61
|
+
* overriding `className` per call site.
|
|
62
|
+
*/
|
|
63
|
+
export type AvatarProp = React.ComponentPropsWithoutRef<"span"> & {
|
|
64
|
+
shape?: AvatarShapeProp;
|
|
65
|
+
className?: ClassNameProp;
|
|
66
|
+
children?: ChildrenProp;
|
|
67
|
+
};
|
|
53
68
|
/** @see Badge */
|
|
54
69
|
export type BadgeProp = {
|
|
55
70
|
variant?: "default" | "secondary" | "outline";
|
|
@@ -148,6 +163,53 @@ export type DataTableProp<T> = {
|
|
|
148
163
|
denied?: React.ReactNode;
|
|
149
164
|
/** Retry handler surfaced by the built-in `error` state. */
|
|
150
165
|
onRetry?: HandlerProp;
|
|
166
|
+
/**
|
|
167
|
+
* Named collection contract (gh#253) — the SAME preset the `Table` primitive owns, forwarded to
|
|
168
|
+
* the table DataTable renders. `"default"` (the default) emits no attribute and matches no
|
|
169
|
+
* selector. `"action-collection"` is the canonical dense approval / action queue: below
|
|
170
|
+
* `collapseBelow` the desktop intrinsic column widths give way to the token-owned column-PRIORITY
|
|
171
|
+
* measures (`--table-action-collection-*`) under `table-layout: fixed`, cells wrap, and the
|
|
172
|
+
* surface drops its `--table-surface-min-inline-size` floor — so every column, row actions
|
|
173
|
+
* included, stays inside a 390px frame with no horizontal scroll. Mark each column with
|
|
174
|
+
* `priority` on its `ColumnDef`.
|
|
175
|
+
*/
|
|
176
|
+
preset?: TablePresetProp;
|
|
177
|
+
/**
|
|
178
|
+
* Container step at which `preset="action-collection"` switches to the compact priority measures.
|
|
179
|
+
* Measured against the TABLE's own container (a container query), not the viewport, so a table in
|
|
180
|
+
* a master rail collapses before the page does. Default `"sm"`. Ignored while `preset` is
|
|
181
|
+
* `"default"`.
|
|
182
|
+
*/
|
|
183
|
+
collapseBelow?: BreakpointProp;
|
|
151
184
|
className?: ClassNameProp;
|
|
152
185
|
children?: ChildrenProp;
|
|
153
186
|
};
|
|
187
|
+
/**
|
|
188
|
+
* ListRow geometry — `default` (the roomy entity row) or `compact` (#246: the inline-actions row —
|
|
189
|
+
* Avatar + title/description + one or two small trailing Buttons on ONE line inside a narrow card).
|
|
190
|
+
* A ListRow-LOCAL subset of the shared density vocabulary: the row has no `comfortable` step, so it
|
|
191
|
+
* is deliberately narrower than `DensityProp` (and unrelated to `PageDensityProp`/`TableDensityProp`).
|
|
192
|
+
*/
|
|
193
|
+
export type ListRowDensityProp = Exclude<DensityProp, "comfortable">;
|
|
194
|
+
/** @see ListRow */
|
|
195
|
+
export type ListRowProp = {
|
|
196
|
+
/** Render element — `div` (default) or `li` when the parent is a `<ul>`/`<ol>`. */
|
|
197
|
+
as?: "div" | "li";
|
|
198
|
+
/** Leading slot — a decorative icon or an Avatar. Mark a purely decorative icon `aria-hidden`. */
|
|
199
|
+
leading?: React.ReactNode;
|
|
200
|
+
/** Primary line — rendered in medium weight. */
|
|
201
|
+
title: TitleProp | React.ReactNode;
|
|
202
|
+
/** Secondary line under the title (muted, xs). */
|
|
203
|
+
description?: DescriptionProp | React.ReactNode;
|
|
204
|
+
/** Trailing slot — the row action(s): a Button / DropdownMenu trigger, a Badge, or a Switch. */
|
|
205
|
+
trailing?: React.ReactNode;
|
|
206
|
+
/** Cross-axis alignment of the columns — `center` (default) or `start` for multi-line content. */
|
|
207
|
+
align?: "center" | "start";
|
|
208
|
+
/** How over-long title/description resolve — `truncate` (default) or `wrap` (#224). */
|
|
209
|
+
overflow?: "truncate" | "wrap";
|
|
210
|
+
/** Row geometry — `default` or the compact inline-actions preset (#246). */
|
|
211
|
+
density?: ListRowDensityProp;
|
|
212
|
+
/** Read/unread state — indicator dot + localized `sr-only` text, never colour alone (#225). */
|
|
213
|
+
unread?: boolean;
|
|
214
|
+
className?: ClassNameProp;
|
|
215
|
+
};
|
|
@@ -10,6 +10,12 @@ import type { UploadFileItem } from "../../components/data-entry/upload-types.js
|
|
|
10
10
|
import type { FieldA11yProps } from "../../lib/field-a11y.js";
|
|
11
11
|
import type { ClassNameProp, DisabledProp, EmptyMessageProp, ErrorProp, HelperProp, IdProp, LabelProp, NameProp, OnChangeProp, OnValueChangeProp, OnSearchChangeProp, OpenProp, OnOpenChangeProp, PlaceholderProp, RequiredProp, ValueProp, DefaultValueProp, FormLayoutProp, WidthProp, BreakpointProp, DensityProp, SizeProp } from "../vocabulary/index.js";
|
|
12
12
|
import type { ResponsiveGridColumnsProp } from "./layout.prop.js";
|
|
13
|
+
/** One-outline-per-group appearance for the compound InputOTP control. */
|
|
14
|
+
export type InputOTPGroupAppearanceProp = "slots" | "grouped";
|
|
15
|
+
/** @see InputOTPGroup */
|
|
16
|
+
export type InputOTPGroupProp = React.HTMLAttributes<HTMLDivElement> & {
|
|
17
|
+
appearance?: InputOTPGroupAppearanceProp;
|
|
18
|
+
};
|
|
13
19
|
/** @see Input */
|
|
14
20
|
export type InputProp = React.InputHTMLAttributes<HTMLInputElement> & {
|
|
15
21
|
/** Show an inline ✕ that clears the field while it holds text (default false). */
|
|
@@ -42,6 +42,12 @@ export type AlertProp = React.HTMLAttributes<HTMLDivElement> & {
|
|
|
42
42
|
className?: ClassNameProp;
|
|
43
43
|
children?: ChildrenProp;
|
|
44
44
|
};
|
|
45
|
+
/**
|
|
46
|
+
* @see Banner — page-level Alert. `variant` is fixed to `"banner"` by the alias, so it is the one
|
|
47
|
+
* prop a Banner does not take; everything else (tone, icon, onDismiss, children) is Alert's
|
|
48
|
+
* contract verbatim. gh#255.
|
|
49
|
+
*/
|
|
50
|
+
export type BannerProp = Omit<AlertProp, "variant">;
|
|
45
51
|
/** @see AlertTitle */
|
|
46
52
|
export type AlertTitleProp = React.HTMLAttributes<HTMLParagraphElement> & {
|
|
47
53
|
className?: ClassNameProp;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export type { AppShellProp, AuthFooterProp, AuthIdentityProp, OrgSwitcherLabels, OrgSwitcherOrganization, OrgSwitcherProp, PageContainerProp, PageInsetProp, SidebarItemProp, SidebarProductProp, SidebarProp, SidebarSectionProp, TopbarProp, } from "./layout.prop.js";
|
|
2
2
|
export type { ButtonProp } from "./general.prop.js";
|
|
3
3
|
export type { InputProp, TextareaProp, FormFieldProp, SearchInputProp, CheckboxProp, CheckboxGroupProp, ChoiceOptionProp, RadioProp, RadioGroupProp, SwitchProp, SliderProp, CalendarProp, DatePickerProp, DateRangePickerProp, TimePickerProp, ColorPickerProp, UploadProp, UploadFileItemProp, UploadVariantProp, TreeOptionProp, TreeFieldNamesProp, CascaderProp, TreeSelectProp, ShowCheckedStrategyProp, TransferProp, TransferItemProp, } from "./data-entry.prop.js";
|
|
4
|
-
export type { EmptyStateProp, DescriptionsProp, DescriptionsItemProp, BadgeProp, DataTableProp, QrCodeProp, } from "./data-display.prop.js";
|
|
4
|
+
export type { AvatarProp, EmptyStateProp, DescriptionsProp, DescriptionsItemProp, BadgeProp, DataTableProp, QrCodeProp, } from "./data-display.prop.js";
|
|
5
5
|
export type { ChartDatum, ChartSeriesProp, LineChartProp, BarChartProp, AreaChartProp, PieChartProp, } from "./charts.prop.js";
|
|
6
6
|
export type { AlertQueryErrorProp, AlertProp, AlertTitleProp, AlertContentProp, AlertDescriptionProp, AlertActionsProp, SheetResponsiveProp, SkeletonRowsProp, } from "./feedback.prop.js";
|
|
7
7
|
export type { DataStateProp, InfiniteQueryStateProp, InfiniteQueryHelpers, PrefetchLinkProp, } from "./query.prop.js";
|