@plastic-js/tsumiki 0.1.48 → 0.1.50
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/README.md +7 -0
- package/dist/components/Button.js +11 -4
- package/dist/components/ConfirmDialog.js +8 -8
- package/dist/components/Dialog.js +5 -7
- package/dist/components/Input.js +24 -11
- package/docs/api.md +5 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -487,6 +487,11 @@ const intentClasses = {
|
|
|
487
487
|
'--_btn-solid-active': 'var(--tsu-accent-8)',
|
|
488
488
|
'--_btn-border': 'var(--tsu-accent-9)',
|
|
489
489
|
}),
|
|
490
|
+
neutral: css({
|
|
491
|
+
'--_btn-solid': 'var(--tsu-neutral-9)',
|
|
492
|
+
'--_btn-solid-active': 'var(--tsu-neutral-8)',
|
|
493
|
+
'--_btn-border': 'var(--tsu-neutral-9)',
|
|
494
|
+
}),
|
|
490
495
|
danger: css({
|
|
491
496
|
'--_btn-solid': 'var(--tsu-danger-9)',
|
|
492
497
|
'--_btn-solid-active': 'var(--tsu-danger-8)',
|
|
@@ -495,6 +500,8 @@ const intentClasses = {
|
|
|
495
500
|
}
|
|
496
501
|
```
|
|
497
502
|
|
|
503
|
+
`intent` takes one of `'default' | 'neutral' | 'danger'` (selected via a single prop, not booleans). `neutral` is only valid on the outline variant — when combined with `solid` it is ignored and falls back to `default`.
|
|
504
|
+
|
|
498
505
|
### 5.5 Class Name Composition (Reactive)
|
|
499
506
|
|
|
500
507
|
```js
|
|
@@ -89,6 +89,13 @@ var intentClasses = {
|
|
|
89
89
|
"--_btn-border-active": "var(--tsu-accent-10)",
|
|
90
90
|
"--_btn-tint-bg": "var(--tsu-accent-3)"
|
|
91
91
|
}),
|
|
92
|
+
neutral: css({
|
|
93
|
+
"--_btn-solid": "var(--tsu-neutral-9)",
|
|
94
|
+
"--_btn-solid-active": "var(--tsu-neutral-8)",
|
|
95
|
+
"--_btn-border": "var(--tsu-neutral-6)",
|
|
96
|
+
"--_btn-border-active": "var(--tsu-neutral-7)",
|
|
97
|
+
"--_btn-tint-bg": "var(--tsu-neutral-3)"
|
|
98
|
+
}),
|
|
92
99
|
danger: css({
|
|
93
100
|
"--_btn-solid": "var(--tsu-danger-9)",
|
|
94
101
|
"--_btn-solid-active": "var(--tsu-danger-8)",
|
|
@@ -124,14 +131,14 @@ var loadingClass = css({ pointerEvents: "none" });
|
|
|
124
131
|
var read = (v) => typeof v === "function" ? v() : v;
|
|
125
132
|
var Button = (props = {}) => {
|
|
126
133
|
const [local, rest] = splitProps(mergeProps$1({
|
|
134
|
+
intent: "default",
|
|
127
135
|
solid: false,
|
|
128
|
-
danger: false,
|
|
129
136
|
size: "md",
|
|
130
137
|
disabled: false,
|
|
131
138
|
loading: false
|
|
132
139
|
}, props), [
|
|
140
|
+
"intent",
|
|
133
141
|
"solid",
|
|
134
|
-
"danger",
|
|
135
142
|
"size",
|
|
136
143
|
"loading",
|
|
137
144
|
"disabled",
|
|
@@ -148,10 +155,10 @@ var Button = (props = {}) => {
|
|
|
148
155
|
className: () => {
|
|
149
156
|
const size = read(local.size);
|
|
150
157
|
const solid = read(local.solid);
|
|
151
|
-
const danger = read(local.danger);
|
|
152
158
|
const loading = read(local.loading);
|
|
153
159
|
const variant = solid ? "solid" : "outline";
|
|
154
|
-
|
|
160
|
+
let intent = read(local.intent);
|
|
161
|
+
if (intent === "neutral" && solid) intent = "default";
|
|
155
162
|
return [
|
|
156
163
|
baseClass,
|
|
157
164
|
sizeClasses[size],
|
|
@@ -14,7 +14,7 @@ var messageBodyClass = css({
|
|
|
14
14
|
var DEFAULT_PROPS = {
|
|
15
15
|
confirmText: "Confirm",
|
|
16
16
|
cancelText: "Cancel",
|
|
17
|
-
|
|
17
|
+
intent: "default",
|
|
18
18
|
loading: false,
|
|
19
19
|
title: "Confirm"
|
|
20
20
|
};
|
|
@@ -30,7 +30,7 @@ function ConfirmDialog(props) {
|
|
|
30
30
|
"message",
|
|
31
31
|
"confirmText",
|
|
32
32
|
"cancelText",
|
|
33
|
-
"
|
|
33
|
+
"intent"
|
|
34
34
|
]);
|
|
35
35
|
const handleConfirm = () => {
|
|
36
36
|
local.onConfirm?.();
|
|
@@ -42,8 +42,8 @@ function ConfirmDialog(props) {
|
|
|
42
42
|
get confirmText() {
|
|
43
43
|
return local.confirmText;
|
|
44
44
|
},
|
|
45
|
-
get
|
|
46
|
-
return local.
|
|
45
|
+
get intent() {
|
|
46
|
+
return local.intent;
|
|
47
47
|
},
|
|
48
48
|
get loading() {
|
|
49
49
|
return local.loading;
|
|
@@ -124,8 +124,8 @@ function ensureInit() {
|
|
|
124
124
|
get cancelText() {
|
|
125
125
|
return s.cancelText || "Cancel";
|
|
126
126
|
},
|
|
127
|
-
get
|
|
128
|
-
return s.
|
|
127
|
+
get intent() {
|
|
128
|
+
return s.intent || "default";
|
|
129
129
|
},
|
|
130
130
|
get title() {
|
|
131
131
|
return s.title || "Confirm";
|
|
@@ -152,7 +152,7 @@ function ensureInit() {
|
|
|
152
152
|
* title: 'Delete Item',
|
|
153
153
|
* message: 'This action cannot be undone.',
|
|
154
154
|
* confirmText: 'Delete',
|
|
155
|
-
*
|
|
155
|
+
* intent: 'danger',
|
|
156
156
|
* })
|
|
157
157
|
* } catch (err) {
|
|
158
158
|
* if (err.code === 'CANCEL') { ... }
|
|
@@ -164,7 +164,7 @@ function ensureInit() {
|
|
|
164
164
|
* message?: string,
|
|
165
165
|
* confirmText?: string,
|
|
166
166
|
* cancelText?: string,
|
|
167
|
-
*
|
|
167
|
+
* intent?: 'default' | 'neutral' | 'danger',
|
|
168
168
|
* noCancel?: boolean
|
|
169
169
|
* }} options
|
|
170
170
|
* @returns {Promise<void>}
|
|
@@ -140,9 +140,6 @@ var footerBtnClass = css({
|
|
|
140
140
|
var negativeBtnClass = css({
|
|
141
141
|
flex: 1,
|
|
142
142
|
borderRadius: "var(--tsu-radius-l1-lg)",
|
|
143
|
-
border: "1px solid var(--tsu-neutral-7)",
|
|
144
|
-
background: "transparent",
|
|
145
|
-
color: "var(--tsu-fg)",
|
|
146
143
|
fontSize: "var(--tsu-comp-font-size-lg)",
|
|
147
144
|
fontWeight: "var(--tsu-font-weight-semibold)",
|
|
148
145
|
fontFamily: "inherit"
|
|
@@ -172,7 +169,7 @@ var Dialog$1 = (props) => {
|
|
|
172
169
|
cancelText: "Cancel",
|
|
173
170
|
confirmText: "Confirm",
|
|
174
171
|
loading: false,
|
|
175
|
-
|
|
172
|
+
intent: "default",
|
|
176
173
|
closeable: true,
|
|
177
174
|
lazyMount: true,
|
|
178
175
|
unmountOnExit: true,
|
|
@@ -192,7 +189,7 @@ var Dialog$1 = (props) => {
|
|
|
192
189
|
"onCancel",
|
|
193
190
|
"onConfirm",
|
|
194
191
|
"loading",
|
|
195
|
-
"
|
|
192
|
+
"intent",
|
|
196
193
|
"closeable",
|
|
197
194
|
"lazyMount",
|
|
198
195
|
"unmountOnExit",
|
|
@@ -233,6 +230,7 @@ var Dialog$1 = (props) => {
|
|
|
233
230
|
get disabled() {
|
|
234
231
|
return read(local.loading);
|
|
235
232
|
},
|
|
233
|
+
intent: "neutral",
|
|
236
234
|
onClick: handleCancel,
|
|
237
235
|
size: "xl",
|
|
238
236
|
type: "button",
|
|
@@ -241,8 +239,8 @@ var Dialog$1 = (props) => {
|
|
|
241
239
|
insert(_el0, () => local.showConfirm && jsx(Button, mergeProps({
|
|
242
240
|
className: positiveBtnClass,
|
|
243
241
|
"data-part": "positive-trigger",
|
|
244
|
-
get
|
|
245
|
-
return local.
|
|
242
|
+
get intent() {
|
|
243
|
+
return local.intent;
|
|
246
244
|
},
|
|
247
245
|
get loading() {
|
|
248
246
|
return read(local.loading);
|
package/dist/components/Input.js
CHANGED
|
@@ -65,7 +65,7 @@ var variantClasses = {
|
|
|
65
65
|
}
|
|
66
66
|
}),
|
|
67
67
|
outline: css({
|
|
68
|
-
border: "1px solid var(--tsu-accent-8)",
|
|
68
|
+
border: "1px solid var(--_input-border, var(--tsu-accent-8))",
|
|
69
69
|
color: "var(--tsu-fg)",
|
|
70
70
|
"&:focus-within": {
|
|
71
71
|
backgroundColor: "var(--tsu-focus-bg)",
|
|
@@ -73,6 +73,11 @@ var variantClasses = {
|
|
|
73
73
|
}
|
|
74
74
|
})
|
|
75
75
|
};
|
|
76
|
+
var intentClasses = {
|
|
77
|
+
default: css({ "--_input-border": "var(--tsu-accent-8)" }),
|
|
78
|
+
neutral: css({ "--_input-border": "var(--tsu-neutral-6)" }),
|
|
79
|
+
danger: css({ "--_input-border": "var(--tsu-danger-9)" })
|
|
80
|
+
};
|
|
76
81
|
var errorClass = css({
|
|
77
82
|
borderColor: "var(--tsu-danger-9) !important",
|
|
78
83
|
"&:focus-within": { borderColor: "var(--tsu-danger-9) !important" }
|
|
@@ -136,11 +141,13 @@ var eyeButtonClass = css({
|
|
|
136
141
|
var read = (v) => typeof v === "function" ? v() : v;
|
|
137
142
|
var Input = (props = {}) => {
|
|
138
143
|
const [local, rest] = splitProps(mergeProps$2({
|
|
144
|
+
intent: "default",
|
|
139
145
|
solid: false,
|
|
140
146
|
size: "md",
|
|
141
147
|
disabled: false,
|
|
142
148
|
invalid: false
|
|
143
149
|
}, props), [
|
|
150
|
+
"intent",
|
|
144
151
|
"solid",
|
|
145
152
|
"size",
|
|
146
153
|
"disabled",
|
|
@@ -161,16 +168,22 @@ var Input = (props = {}) => {
|
|
|
161
168
|
const fieldDisabled = () => field?.disabled?.() ?? false;
|
|
162
169
|
const effectiveInvalid = () => read(local.invalid) || fieldInvalid();
|
|
163
170
|
const effectiveDisabled = () => read(local.disabled) || fieldDisabled();
|
|
164
|
-
const wrapperClassName = () =>
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
171
|
+
const wrapperClassName = () => {
|
|
172
|
+
const solid = read(local.solid);
|
|
173
|
+
let intent = read(local.intent);
|
|
174
|
+
if (intent === "neutral" && solid) intent = "default";
|
|
175
|
+
return [
|
|
176
|
+
wrapperClass,
|
|
177
|
+
sizeClasses[read(local.size)],
|
|
178
|
+
solid ? variantClasses.solid : variantClasses.outline,
|
|
179
|
+
intentClasses[intent],
|
|
180
|
+
effectiveInvalid() && errorClass,
|
|
181
|
+
effectiveDisabled() && disabledClass,
|
|
182
|
+
hasPrefix() && hasPrefixClass,
|
|
183
|
+
hasSuffix() && hasSuffixClass,
|
|
184
|
+
read(local.className)
|
|
185
|
+
].filter(Boolean).join(" ");
|
|
186
|
+
};
|
|
174
187
|
const inputType = () => {
|
|
175
188
|
if (!isPassword) return read(local.type);
|
|
176
189
|
return showPassword() ? "text" : "password";
|
package/docs/api.md
CHANGED
|
@@ -91,6 +91,7 @@ Passthrough: Ark `Fieldset.Root` props (`disabled`, `invalid`, …).
|
|
|
91
91
|
| Prop | Type | Default | Description |
|
|
92
92
|
|---|---|---|---|
|
|
93
93
|
| `solid` | `boolean` | `false` | Filled background instead of outlined. |
|
|
94
|
+
| `intent` | `string` | `'default'` | Border intent (`'default'`, `'neutral'`, `'danger'`). `neutral` applies only to the outline variant (ignored when `solid`). |
|
|
94
95
|
| `size` | `string` | `md` | See size values. |
|
|
95
96
|
| `disabled` | `boolean` | `false` | Disables the input. |
|
|
96
97
|
| `invalid` | `boolean` | `false` | Renders the error/invalid style. |
|
|
@@ -219,7 +220,7 @@ Passthrough: Ark `Root` props (`value`, `onValueChange`, …).
|
|
|
219
220
|
| Prop | Type | Default | Description |
|
|
220
221
|
|---|---|---|---|
|
|
221
222
|
| `solid` | `boolean` | `false` | Filled (solid) variant instead of outline. |
|
|
222
|
-
| `
|
|
223
|
+
| `intent` | `string` | `'default'` | `'default'`, `'neutral'`, or `'danger'`. `neutral` applies only to the outline variant (ignored when `solid`). |
|
|
223
224
|
| `size` | `string` | `md` | See size values. |
|
|
224
225
|
| `disabled` | `boolean` | `false` | Disabled. |
|
|
225
226
|
| `loading` | `boolean` | `false` | Shows a spinner and blocks interaction. |
|
|
@@ -664,7 +665,7 @@ Passthrough: Ark `Root` props (`value`, `min`, `max`, …).
|
|
|
664
665
|
| `onCancel` | `() => void` | — | Cancel callback. |
|
|
665
666
|
| `onConfirm` | `() => void` | — | Confirm callback. |
|
|
666
667
|
| `loading` | `boolean` | `false` | Confirm button shows a spinner. |
|
|
667
|
-
| `
|
|
668
|
+
| `intent` | `string` | `'default'` | Confirm button intent (`'default'`, `'neutral'`, `'danger'`). |
|
|
668
669
|
| `closeable` | `boolean` | `true` | Show the close (✕) trigger. |
|
|
669
670
|
| `lazyMount` | `boolean` | `true` | Mount content lazily. |
|
|
670
671
|
| `unmountOnExit` | `boolean` | `true` | Unmount content when closed. |
|
|
@@ -704,12 +705,12 @@ Imperative + declarative confirm dialog built on `Dialog`.
|
|
|
704
705
|
| `message` | `string` | — | Body message. |
|
|
705
706
|
| `confirmText` | `string` | — | Confirm button label. |
|
|
706
707
|
| `cancelText` | `string` | — | Cancel button label. |
|
|
707
|
-
| `
|
|
708
|
+
| `intent` | `string` | `'default'` | Confirm button intent (`'default'`, `'neutral'`, `'danger'`). |
|
|
708
709
|
|
|
709
710
|
Imperative API:
|
|
710
711
|
|
|
711
712
|
```js
|
|
712
|
-
await confirm({ title, message,
|
|
713
|
+
await confirm({ title, message, intent, confirmText })
|
|
713
714
|
// resolves true/false
|
|
714
715
|
```
|
|
715
716
|
|