sh-ui-cli 0.15.0 → 0.21.1

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.
Files changed (163) hide show
  1. package/bin/sh-ui.mjs +6 -0
  2. package/data/changelog/versions.json +366 -0
  3. package/data/registry/flutter/foundation/sh_ui_tokens.dart +385 -0
  4. package/data/registry/flutter/registry.json +336 -0
  5. package/data/registry/flutter/widgets/sh_ui_accordion.dart +255 -0
  6. package/data/registry/flutter/widgets/sh_ui_app_shell.dart +267 -0
  7. package/data/registry/flutter/widgets/sh_ui_avatar.dart +95 -0
  8. package/data/registry/flutter/widgets/sh_ui_badge.dart +82 -0
  9. package/data/registry/flutter/widgets/sh_ui_breadcrumb.dart +107 -0
  10. package/data/registry/flutter/widgets/sh_ui_button.dart +201 -0
  11. package/data/registry/flutter/widgets/sh_ui_card.dart +159 -0
  12. package/data/registry/flutter/widgets/sh_ui_carousel.dart +204 -0
  13. package/data/registry/flutter/widgets/sh_ui_checkbox.dart +154 -0
  14. package/data/registry/flutter/widgets/sh_ui_color_picker.dart +264 -0
  15. package/data/registry/flutter/widgets/sh_ui_combobox.dart +614 -0
  16. package/data/registry/flutter/widgets/sh_ui_context_menu.dart +71 -0
  17. package/data/registry/flutter/widgets/sh_ui_date_picker.dart +648 -0
  18. package/data/registry/flutter/widgets/sh_ui_dialog.dart +567 -0
  19. package/data/registry/flutter/widgets/sh_ui_dropdown_menu.dart +251 -0
  20. package/data/registry/flutter/widgets/sh_ui_file_upload.dart +200 -0
  21. package/data/registry/flutter/widgets/sh_ui_header.dart +488 -0
  22. package/data/registry/flutter/widgets/sh_ui_input.dart +664 -0
  23. package/data/registry/flutter/widgets/sh_ui_label.dart +145 -0
  24. package/data/registry/flutter/widgets/sh_ui_menubar.dart +98 -0
  25. package/data/registry/flutter/widgets/sh_ui_pagination.dart +276 -0
  26. package/data/registry/flutter/widgets/sh_ui_popover.dart +248 -0
  27. package/data/registry/flutter/widgets/sh_ui_progress.dart +47 -0
  28. package/data/registry/flutter/widgets/sh_ui_radio.dart +108 -0
  29. package/data/registry/flutter/widgets/sh_ui_select.dart +904 -0
  30. package/data/registry/flutter/widgets/sh_ui_separator.dart +42 -0
  31. package/data/registry/flutter/widgets/sh_ui_sidebar.dart +1116 -0
  32. package/data/registry/flutter/widgets/sh_ui_skeleton.dart +129 -0
  33. package/data/registry/flutter/widgets/sh_ui_slider.dart +147 -0
  34. package/data/registry/flutter/widgets/sh_ui_spinner.dart +56 -0
  35. package/data/registry/flutter/widgets/sh_ui_switch.dart +109 -0
  36. package/data/registry/flutter/widgets/sh_ui_tabs.dart +329 -0
  37. package/data/registry/flutter/widgets/sh_ui_textarea.dart +126 -0
  38. package/data/registry/flutter/widgets/sh_ui_toast.dart +362 -0
  39. package/data/registry/flutter/widgets/sh_ui_toggle.dart +229 -0
  40. package/data/registry/flutter/widgets/sh_ui_tooltip.dart +62 -0
  41. package/data/registry/react/components/accordion/index.tsx +85 -0
  42. package/data/registry/react/components/accordion/styles.css +94 -0
  43. package/data/registry/react/components/animations/animations.css +51 -0
  44. package/data/registry/react/components/avatar/index.tsx +75 -0
  45. package/data/registry/react/components/avatar/styles.css +36 -0
  46. package/data/registry/react/components/badge/index.tsx +42 -0
  47. package/data/registry/react/components/badge/styles.css +57 -0
  48. package/data/registry/react/components/base/base.css +102 -0
  49. package/data/registry/react/components/breadcrumb/index.tsx +154 -0
  50. package/data/registry/react/components/breadcrumb/styles.css +82 -0
  51. package/data/registry/react/components/breakpoints/breakpoints.css +17 -0
  52. package/data/registry/react/components/button/index.tsx +47 -0
  53. package/data/registry/react/components/button/styles.css +93 -0
  54. package/data/registry/react/components/card/index.tsx +86 -0
  55. package/data/registry/react/components/card/styles.css +73 -0
  56. package/data/registry/react/components/carousel/index.tsx +432 -0
  57. package/data/registry/react/components/carousel/styles.css +155 -0
  58. package/data/registry/react/components/checkbox/index.tsx +98 -0
  59. package/data/registry/react/components/checkbox/styles.css +75 -0
  60. package/data/registry/react/components/code-panel/copy.tsx +56 -0
  61. package/data/registry/react/components/code-panel/index.tsx +193 -0
  62. package/data/registry/react/components/code-panel/styles.css +124 -0
  63. package/data/registry/react/components/color-picker/index.tsx +466 -0
  64. package/data/registry/react/components/color-picker/styles.css +166 -0
  65. package/data/registry/react/components/combobox/index.tsx +167 -0
  66. package/data/registry/react/components/combobox/styles.css +151 -0
  67. package/data/registry/react/components/context-menu/index.tsx +253 -0
  68. package/data/registry/react/components/context-menu/styles.css +140 -0
  69. package/data/registry/react/components/date-picker/index.tsx +757 -0
  70. package/data/registry/react/components/date-picker/styles.css +279 -0
  71. package/data/registry/react/components/dialog/index.tsx +97 -0
  72. package/data/registry/react/components/dialog/styles.css +127 -0
  73. package/data/registry/react/components/dropdown-menu/index.tsx +257 -0
  74. package/data/registry/react/components/dropdown-menu/styles.css +150 -0
  75. package/data/registry/react/components/file-upload/index.tsx +489 -0
  76. package/data/registry/react/components/file-upload/styles.css +170 -0
  77. package/data/registry/react/components/focus-ring/focus-ring.css +23 -0
  78. package/data/registry/react/components/form/context.ts +92 -0
  79. package/data/registry/react/components/form/field.test.tsx +230 -0
  80. package/data/registry/react/components/form/field.tsx +236 -0
  81. package/data/registry/react/components/form/focus-first-error.ts +54 -0
  82. package/data/registry/react/components/form/form.section.test.tsx +58 -0
  83. package/data/registry/react/components/form/form.test.tsx +146 -0
  84. package/data/registry/react/components/form/form.tsx +180 -0
  85. package/data/registry/react/components/form/index.tsx +61 -0
  86. package/data/registry/react/components/form/steps.test.tsx +106 -0
  87. package/data/registry/react/components/form/steps.tsx +193 -0
  88. package/data/registry/react/components/form/store.test.ts +206 -0
  89. package/data/registry/react/components/form/store.ts +318 -0
  90. package/data/registry/react/components/form/styles.css +47 -0
  91. package/data/registry/react/components/form/types.ts +104 -0
  92. package/data/registry/react/components/form/use-sh-ui-form.ts +15 -0
  93. package/data/registry/react/components/form/utils.test.ts +44 -0
  94. package/data/registry/react/components/form/utils.ts +49 -0
  95. package/data/registry/react/components/form/validation.test.ts +67 -0
  96. package/data/registry/react/components/form/validation.ts +64 -0
  97. package/data/registry/react/components/form-rhf/README.md +27 -0
  98. package/data/registry/react/components/form-rhf/index.tsx +289 -0
  99. package/data/registry/react/components/form-rhf/rhf.test.tsx +42 -0
  100. package/data/registry/react/components/form-tanstack/README.md +27 -0
  101. package/data/registry/react/components/form-tanstack/index.tsx +352 -0
  102. package/data/registry/react/components/form-tanstack/tanstack.test.tsx +45 -0
  103. package/data/registry/react/components/form-yup/README.md +22 -0
  104. package/data/registry/react/components/form-yup/index.tsx +50 -0
  105. package/data/registry/react/components/form-yup/yup.test.ts +27 -0
  106. package/data/registry/react/components/header/index.tsx +257 -0
  107. package/data/registry/react/components/header/styles.css +190 -0
  108. package/data/registry/react/components/input/index.tsx +517 -0
  109. package/data/registry/react/components/input/styles.css +203 -0
  110. package/data/registry/react/components/label/index.tsx +54 -0
  111. package/data/registry/react/components/label/styles.css +90 -0
  112. package/data/registry/react/components/menubar/index.tsx +34 -0
  113. package/data/registry/react/components/menubar/styles.css +45 -0
  114. package/data/registry/react/components/pagination/index.tsx +271 -0
  115. package/data/registry/react/components/pagination/styles.css +105 -0
  116. package/data/registry/react/components/popover/index.tsx +115 -0
  117. package/data/registry/react/components/popover/styles.css +65 -0
  118. package/data/registry/react/components/progress/index.tsx +56 -0
  119. package/data/registry/react/components/progress/styles.css +41 -0
  120. package/data/registry/react/components/radio/index.tsx +67 -0
  121. package/data/registry/react/components/radio/styles.css +80 -0
  122. package/data/registry/react/components/select/index.tsx +236 -0
  123. package/data/registry/react/components/select/styles.css +193 -0
  124. package/data/registry/react/components/separator/index.tsx +48 -0
  125. package/data/registry/react/components/separator/styles.css +15 -0
  126. package/data/registry/react/components/sidebar/index.tsx +1084 -0
  127. package/data/registry/react/components/sidebar/styles.css +502 -0
  128. package/data/registry/react/components/skeleton/index.tsx +24 -0
  129. package/data/registry/react/components/skeleton/styles.css +24 -0
  130. package/data/registry/react/components/slider/index.tsx +300 -0
  131. package/data/registry/react/components/slider/styles.css +64 -0
  132. package/data/registry/react/components/spinner/index.tsx +40 -0
  133. package/data/registry/react/components/spinner/styles.css +37 -0
  134. package/data/registry/react/components/switch/index.tsx +41 -0
  135. package/data/registry/react/components/switch/styles.css +83 -0
  136. package/data/registry/react/components/tabs/index.tsx +93 -0
  137. package/data/registry/react/components/tabs/styles.css +148 -0
  138. package/data/registry/react/components/textarea/index.tsx +25 -0
  139. package/data/registry/react/components/textarea/styles.css +54 -0
  140. package/data/registry/react/components/theme/index.tsx +91 -0
  141. package/data/registry/react/components/toast/index.tsx +257 -0
  142. package/data/registry/react/components/toast/styles.css +290 -0
  143. package/data/registry/react/components/toggle/index.tsx +133 -0
  144. package/data/registry/react/components/toggle/styles.css +85 -0
  145. package/data/registry/react/components/tooltip/index.tsx +85 -0
  146. package/data/registry/react/components/tooltip/styles.css +44 -0
  147. package/data/registry/react/components/z-index/z-index.css +16 -0
  148. package/data/registry/react/hooks/use-active-section.ts +104 -0
  149. package/data/registry/react/hooks/use-media-query.ts +27 -0
  150. package/data/registry/react/lib/cn.ts +39 -0
  151. package/data/registry/react/peer-versions.json +10 -0
  152. package/data/registry/react/registry.json +835 -0
  153. package/data/summaries/flutter.json +42 -0
  154. package/data/summaries/react.json +50 -0
  155. package/data/tokens/build.mjs +553 -0
  156. package/data/tokens/src/primitives.json +146 -0
  157. package/data/tokens/src/semantic.json +146 -0
  158. package/package.json +9 -2
  159. package/src/add.mjs +41 -15
  160. package/src/list.mjs +3 -11
  161. package/src/mcp.mjs +308 -0
  162. package/src/paths.mjs +59 -0
  163. package/src/remove.mjs +4 -11
@@ -0,0 +1,385 @@
1
+ // Generated by @sh-ui/tokens — do not edit directly
2
+ // base=neutral radius=md mode=light-dark
3
+
4
+ import 'package:flutter/material.dart';
5
+
6
+ @immutable
7
+ class ShUiColorTokens {
8
+ final Color background;
9
+ final Color backgroundSubtle;
10
+ final Color backgroundMuted;
11
+ final Color backgroundInverse;
12
+ final Color foreground;
13
+ final Color foregroundMuted;
14
+ final Color foregroundSubtle;
15
+ final Color foregroundInverse;
16
+ final Color border;
17
+ final Color borderStrong;
18
+ final Color primary;
19
+ final Color primaryForeground;
20
+ final Color primaryHover;
21
+ final Color danger;
22
+ final Color dangerForeground;
23
+
24
+ const ShUiColorTokens({
25
+ required this.background,
26
+ required this.backgroundSubtle,
27
+ required this.backgroundMuted,
28
+ required this.backgroundInverse,
29
+ required this.foreground,
30
+ required this.foregroundMuted,
31
+ required this.foregroundSubtle,
32
+ required this.foregroundInverse,
33
+ required this.border,
34
+ required this.borderStrong,
35
+ required this.primary,
36
+ required this.primaryForeground,
37
+ required this.primaryHover,
38
+ required this.danger,
39
+ required this.dangerForeground,
40
+ });
41
+
42
+ static const light = ShUiColorTokens(
43
+ background: Color(0xFFFFFFFF),
44
+ backgroundSubtle: Color(0xFFFAFAFA),
45
+ backgroundMuted: Color(0xFFF5F5F5),
46
+ backgroundInverse: Color(0xFF0A0A0A),
47
+ foreground: Color(0xFF0A0A0A),
48
+ foregroundMuted: Color(0xFF525252),
49
+ foregroundSubtle: Color(0xFFA3A3A3),
50
+ foregroundInverse: Color(0xFFFFFFFF),
51
+ border: Color(0xFFE5E5E5),
52
+ borderStrong: Color(0xFFD4D4D4),
53
+ primary: Color(0xFF171717),
54
+ primaryForeground: Color(0xFFFAFAFA),
55
+ primaryHover: Color(0xFF262626),
56
+ danger: Color(0xFFDC2626),
57
+ dangerForeground: Color(0xFFFFFFFF),
58
+ );
59
+
60
+ static const dark = ShUiColorTokens(
61
+ background: Color(0xFF0A0A0A),
62
+ backgroundSubtle: Color(0xFF171717),
63
+ backgroundMuted: Color(0xFF262626),
64
+ backgroundInverse: Color(0xFFFFFFFF),
65
+ foreground: Color(0xFFFAFAFA),
66
+ foregroundMuted: Color(0xFFA3A3A3),
67
+ foregroundSubtle: Color(0xFF737373),
68
+ foregroundInverse: Color(0xFF0A0A0A),
69
+ border: Color(0xFF262626),
70
+ borderStrong: Color(0xFF404040),
71
+ primary: Color(0xFFFAFAFA),
72
+ primaryForeground: Color(0xFF171717),
73
+ primaryHover: Color(0xFFE5E5E5),
74
+ danger: Color(0xFFDC2626),
75
+ dangerForeground: Color(0xFFFFFFFF),
76
+ );
77
+ }
78
+
79
+ @immutable
80
+ class ShUiRadiusTokens {
81
+ final double defaultRadius;
82
+
83
+ const ShUiRadiusTokens({
84
+ required this.defaultRadius,
85
+ });
86
+
87
+ static const tokens = ShUiRadiusTokens(
88
+ defaultRadius: 8.0,
89
+ );
90
+ }
91
+
92
+ @immutable
93
+ class ShUiSpacingTokens {
94
+ final double s0;
95
+ final double s1;
96
+ final double s2;
97
+ final double s3;
98
+ final double s4;
99
+ final double s5;
100
+ final double s6;
101
+ final double s8;
102
+ final double s10;
103
+ final double s12;
104
+ final double s16;
105
+
106
+ const ShUiSpacingTokens({
107
+ required this.s0,
108
+ required this.s1,
109
+ required this.s2,
110
+ required this.s3,
111
+ required this.s4,
112
+ required this.s5,
113
+ required this.s6,
114
+ required this.s8,
115
+ required this.s10,
116
+ required this.s12,
117
+ required this.s16,
118
+ });
119
+
120
+ static const tokens = ShUiSpacingTokens(
121
+ s0: 0.0,
122
+ s1: 4.0,
123
+ s2: 8.0,
124
+ s3: 12.0,
125
+ s4: 16.0,
126
+ s5: 20.0,
127
+ s6: 24.0,
128
+ s8: 32.0,
129
+ s10: 40.0,
130
+ s12: 48.0,
131
+ s16: 64.0,
132
+ );
133
+ }
134
+
135
+ @immutable
136
+ class ShUiTextTokens {
137
+ final double xs;
138
+ final double sm;
139
+ final double base;
140
+ final double lg;
141
+ final double xl;
142
+ final double xl2;
143
+ final double xl3;
144
+ final double xl4;
145
+
146
+ const ShUiTextTokens({
147
+ required this.xs,
148
+ required this.sm,
149
+ required this.base,
150
+ required this.lg,
151
+ required this.xl,
152
+ required this.xl2,
153
+ required this.xl3,
154
+ required this.xl4,
155
+ });
156
+
157
+ static const tokens = ShUiTextTokens(
158
+ xs: 12.0,
159
+ sm: 14.0,
160
+ base: 16.0,
161
+ lg: 18.0,
162
+ xl: 20.0,
163
+ xl2: 24.0,
164
+ xl3: 30.0,
165
+ xl4: 36.0,
166
+ );
167
+ }
168
+
169
+ @immutable
170
+ class ShUiWeightTokens {
171
+ final FontWeight regular;
172
+ final FontWeight medium;
173
+ final FontWeight semibold;
174
+ final FontWeight bold;
175
+
176
+ const ShUiWeightTokens({
177
+ required this.regular,
178
+ required this.medium,
179
+ required this.semibold,
180
+ required this.bold,
181
+ });
182
+
183
+ static const tokens = ShUiWeightTokens(
184
+ regular: FontWeight.w400,
185
+ medium: FontWeight.w500,
186
+ semibold: FontWeight.w600,
187
+ bold: FontWeight.w700,
188
+ );
189
+ }
190
+
191
+ @immutable
192
+ class ShUiShadowTokens {
193
+ final List<BoxShadow> sm;
194
+ final List<BoxShadow> md;
195
+ final List<BoxShadow> lg;
196
+ final List<BoxShadow> xl;
197
+
198
+ const ShUiShadowTokens({
199
+ required this.sm,
200
+ required this.md,
201
+ required this.lg,
202
+ required this.xl,
203
+ });
204
+
205
+ static const tokens = ShUiShadowTokens(
206
+ sm: <BoxShadow>[BoxShadow(offset: Offset(0.0, 1.0), blurRadius: 2.0, spreadRadius: 0.0, color: Color(0x14000000))],
207
+ md: <BoxShadow>[BoxShadow(offset: Offset(0.0, 4.0), blurRadius: 12.0, spreadRadius: 0.0, color: Color(0x1F000000))],
208
+ lg: <BoxShadow>[BoxShadow(offset: Offset(0.0, 8.0), blurRadius: 24.0, spreadRadius: 0.0, color: Color(0x26000000))],
209
+ xl: <BoxShadow>[BoxShadow(offset: Offset(0.0, 16.0), blurRadius: 48.0, spreadRadius: 0.0, color: Color(0x2E000000))],
210
+ );
211
+ }
212
+
213
+ @immutable
214
+ class ShUiDurationTokens {
215
+ final Duration fast;
216
+ final Duration base;
217
+ final Duration slow;
218
+
219
+ const ShUiDurationTokens({
220
+ required this.fast,
221
+ required this.base,
222
+ required this.slow,
223
+ });
224
+
225
+ static const tokens = ShUiDurationTokens(
226
+ fast: Duration(milliseconds: 120),
227
+ base: Duration(milliseconds: 160),
228
+ slow: Duration(milliseconds: 200),
229
+ );
230
+ }
231
+
232
+ @immutable
233
+ class ShUiEaseTokens {
234
+ final Curve standard;
235
+ final Curve emphasized;
236
+
237
+ const ShUiEaseTokens({
238
+ required this.standard,
239
+ required this.emphasized,
240
+ });
241
+
242
+ static const tokens = ShUiEaseTokens(
243
+ standard: Cubic(0.4, 0, 0.2, 1),
244
+ emphasized: Cubic(0.2, 0, 0, 1),
245
+ );
246
+ }
247
+
248
+ @immutable
249
+ class ShUiControlTokens {
250
+ final double sm;
251
+ final double md;
252
+ final double lg;
253
+
254
+ const ShUiControlTokens({
255
+ required this.sm,
256
+ required this.md,
257
+ required this.lg,
258
+ });
259
+
260
+ static const tokens = ShUiControlTokens(
261
+ sm: 32.0,
262
+ md: 40.0,
263
+ lg: 48.0,
264
+ );
265
+ }
266
+
267
+ @immutable
268
+ class ShUiBorderWidthTokens {
269
+ final double normal;
270
+ final double strong;
271
+
272
+ const ShUiBorderWidthTokens({
273
+ required this.normal,
274
+ required this.strong,
275
+ });
276
+
277
+ static const tokens = ShUiBorderWidthTokens(
278
+ normal: 1.0,
279
+ strong: 2.0,
280
+ );
281
+ }
282
+
283
+ @immutable
284
+ class ShUiOpacityTokens {
285
+ final double disabled;
286
+
287
+ const ShUiOpacityTokens({
288
+ required this.disabled,
289
+ });
290
+
291
+ static const tokens = ShUiOpacityTokens(
292
+ disabled: 0.5,
293
+ );
294
+ }
295
+
296
+ @immutable
297
+ class ShUiBreakpointTokens {
298
+ final double sm;
299
+ final double md;
300
+ final double lg;
301
+ final double xl;
302
+
303
+ const ShUiBreakpointTokens({
304
+ required this.sm,
305
+ required this.md,
306
+ required this.lg,
307
+ required this.xl,
308
+ });
309
+
310
+ static const tokens = ShUiBreakpointTokens(
311
+ sm: 640.0,
312
+ md: 768.0,
313
+ lg: 1024.0,
314
+ xl: 1280.0,
315
+ );
316
+ }
317
+
318
+ class ShUiTheme extends ThemeExtension<ShUiTheme> {
319
+ final ShUiColorTokens colors;
320
+ final ShUiRadiusTokens radius;
321
+ final ShUiSpacingTokens spacing;
322
+ final ShUiTextTokens text;
323
+ final ShUiWeightTokens weight;
324
+ final ShUiShadowTokens shadow;
325
+ final ShUiDurationTokens duration;
326
+ final ShUiEaseTokens ease;
327
+ final ShUiControlTokens control;
328
+ final ShUiBorderWidthTokens borderWidth;
329
+ final ShUiOpacityTokens opacity;
330
+ final ShUiBreakpointTokens breakpoint;
331
+
332
+ const ShUiTheme({
333
+ required this.colors,
334
+ required this.radius,
335
+ required this.spacing,
336
+ required this.text,
337
+ required this.weight,
338
+ required this.shadow,
339
+ required this.duration,
340
+ required this.ease,
341
+ required this.control,
342
+ required this.borderWidth,
343
+ required this.opacity,
344
+ required this.breakpoint,
345
+ });
346
+
347
+ static const light = ShUiTheme(
348
+ colors: ShUiColorTokens.light,
349
+ radius: ShUiRadiusTokens.tokens,
350
+ spacing: ShUiSpacingTokens.tokens,
351
+ text: ShUiTextTokens.tokens,
352
+ weight: ShUiWeightTokens.tokens,
353
+ shadow: ShUiShadowTokens.tokens,
354
+ duration: ShUiDurationTokens.tokens,
355
+ ease: ShUiEaseTokens.tokens,
356
+ control: ShUiControlTokens.tokens,
357
+ borderWidth: ShUiBorderWidthTokens.tokens,
358
+ opacity: ShUiOpacityTokens.tokens,
359
+ breakpoint: ShUiBreakpointTokens.tokens,
360
+ );
361
+ static const dark = ShUiTheme(
362
+ colors: ShUiColorTokens.dark,
363
+ radius: ShUiRadiusTokens.tokens,
364
+ spacing: ShUiSpacingTokens.tokens,
365
+ text: ShUiTextTokens.tokens,
366
+ weight: ShUiWeightTokens.tokens,
367
+ shadow: ShUiShadowTokens.tokens,
368
+ duration: ShUiDurationTokens.tokens,
369
+ ease: ShUiEaseTokens.tokens,
370
+ control: ShUiControlTokens.tokens,
371
+ borderWidth: ShUiBorderWidthTokens.tokens,
372
+ opacity: ShUiOpacityTokens.tokens,
373
+ breakpoint: ShUiBreakpointTokens.tokens,
374
+ );
375
+
376
+ @override
377
+ ShUiTheme copyWith({ShUiColorTokens? colors, ShUiRadiusTokens? radius, ShUiSpacingTokens? spacing, ShUiTextTokens? text, ShUiWeightTokens? weight, ShUiShadowTokens? shadow, ShUiDurationTokens? duration, ShUiEaseTokens? ease, ShUiControlTokens? control, ShUiBorderWidthTokens? borderWidth, ShUiOpacityTokens? opacity, ShUiBreakpointTokens? breakpoint}) =>
378
+ ShUiTheme(colors: colors ?? this.colors, radius: radius ?? this.radius, spacing: spacing ?? this.spacing, text: text ?? this.text, weight: weight ?? this.weight, shadow: shadow ?? this.shadow, duration: duration ?? this.duration, ease: ease ?? this.ease, control: control ?? this.control, borderWidth: borderWidth ?? this.borderWidth, opacity: opacity ?? this.opacity, breakpoint: breakpoint ?? this.breakpoint);
379
+
380
+ @override
381
+ ShUiTheme lerp(ThemeExtension<ShUiTheme>? other, double t) {
382
+ if (other is! ShUiTheme) return this;
383
+ return t < 0.5 ? this : other;
384
+ }
385
+ }