@plastic-js/tsumiki 0.1.48 → 0.1.49

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 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
- const intent = danger ? "danger" : "default";
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
- danger: false,
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
- "danger"
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 danger() {
46
- return local.danger;
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 danger() {
128
- return s.danger || false;
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
- * danger: true,
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
- * danger?: boolean,
167
+ * intent?: 'default' | 'neutral' | 'danger',
168
168
  * noCancel?: boolean
169
169
  * }} options
170
170
  * @returns {Promise<void>}
@@ -172,7 +172,7 @@ var Dialog$1 = (props) => {
172
172
  cancelText: "Cancel",
173
173
  confirmText: "Confirm",
174
174
  loading: false,
175
- danger: false,
175
+ intent: "default",
176
176
  closeable: true,
177
177
  lazyMount: true,
178
178
  unmountOnExit: true,
@@ -192,7 +192,7 @@ var Dialog$1 = (props) => {
192
192
  "onCancel",
193
193
  "onConfirm",
194
194
  "loading",
195
- "danger",
195
+ "intent",
196
196
  "closeable",
197
197
  "lazyMount",
198
198
  "unmountOnExit",
@@ -241,8 +241,8 @@ var Dialog$1 = (props) => {
241
241
  insert(_el0, () => local.showConfirm && jsx(Button, mergeProps({
242
242
  className: positiveBtnClass,
243
243
  "data-part": "positive-trigger",
244
- get danger() {
245
- return local.danger;
244
+ get intent() {
245
+ return local.intent;
246
246
  },
247
247
  get loading() {
248
248
  return read(local.loading);
@@ -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
- wrapperClass,
166
- sizeClasses[read(local.size)],
167
- read(local.solid) ? variantClasses.solid : variantClasses.outline,
168
- effectiveInvalid() && errorClass,
169
- effectiveDisabled() && disabledClass,
170
- hasPrefix() && hasPrefixClass,
171
- hasSuffix() && hasSuffixClass,
172
- read(local.className)
173
- ].filter(Boolean).join(" ");
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
- | `danger` | `boolean` | `false` | Destructive (red) variant. |
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
- | `danger` | `boolean` | `false` | Confirm button uses the danger style. |
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
- | `danger` | `boolean` | `false` | Danger-styled confirm button. |
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, danger, confirmText })
713
+ await confirm({ title, message, intent, confirmText })
713
714
  // resolves true/false
714
715
  ```
715
716
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plastic-js/tsumiki",
3
- "version": "0.1.48",
3
+ "version": "0.1.49",
4
4
  "description": "A UI component library for Plastic JS.",
5
5
  "license": "MIT",
6
6
  "author": "tigre",