@rcarls/rc-theme-substrate 0.6.0 → 0.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.
Files changed (43) hide show
  1. package/CHANGELOG.md +394 -0
  2. package/README.md +23 -0
  3. package/bridge.css +38 -17
  4. package/components/accordion.css +10 -113
  5. package/components/adaptive-menu.css +98 -0
  6. package/components/app-bar.css +1 -1
  7. package/components/bottom-sheet.css +1 -1
  8. package/components/carousel.css +31 -0
  9. package/components/chip-group.css +21 -0
  10. package/components/dialog.css +15 -11
  11. package/components/disclosure.css +62 -68
  12. package/components/fab-menu.css +3 -3
  13. package/components/field.css +155 -0
  14. package/components/list-item.css +4 -6
  15. package/components/listbox.css +4 -2
  16. package/components/markdown-editor.css +45 -32
  17. package/components/menu.css +11 -6
  18. package/components/modes.css +36 -0
  19. package/components/popover.css +13 -0
  20. package/components/progress.css +5 -0
  21. package/components/scroller.css +19 -0
  22. package/components/segmented-button.css +2 -27
  23. package/components/select.css +21 -0
  24. package/components/splitter.css +35 -2
  25. package/components/textarea.css +3 -2
  26. package/components/toolbar.css +8 -1
  27. package/components/tooltip.css +15 -0
  28. package/components/transfer-list.css +3 -3
  29. package/components/virtual-canvas.css +10 -0
  30. package/components/virtual-scroller.css +7 -0
  31. package/components.css +10 -1
  32. package/css-components/button.css +66 -0
  33. package/css-components/card.css +14 -0
  34. package/css-components/chip-group.css +9 -0
  35. package/css-components/chip.css +80 -0
  36. package/css-components/disclosure.css +25 -0
  37. package/css-components/list.css +34 -0
  38. package/css-components/select.css +20 -0
  39. package/css-components/textarea.css +22 -0
  40. package/css-components.css +31 -0
  41. package/defaults.css +30 -1
  42. package/native.css +249 -0
  43. package/package.json +5 -1
@@ -0,0 +1,34 @@
1
+ @layer rc-theme-substrate.css-components {
2
+ :where(.rc-theme-substrate, :host(.rc-theme-substrate)) .rc-list {
3
+ display: grid;
4
+ gap: var(--rc-list-item-gap, 0.5rem);
5
+ margin-block: 0;
6
+ padding-inline-start: 0;
7
+ list-style: none;
8
+ }
9
+
10
+ :where(.rc-theme-substrate, :host(.rc-theme-substrate)) .rc-list > li {
11
+ display: flex;
12
+ align-items: center;
13
+ min-block-size: var(--rc-list-item-min-block-size, 3rem);
14
+ padding-block: var(--rc-list-item-padding-block, 0.5rem);
15
+ padding-inline: var(--rc-list-item-padding-inline, 1rem);
16
+ border-radius: var(--rc-control-radius, 0.5rem);
17
+ }
18
+
19
+ :where(.rc-theme-substrate, :host(.rc-theme-substrate)) .rc-list > li[aria-selected='true'],
20
+ :where(.rc-theme-substrate, :host(.rc-theme-substrate)) .rc-list > li:has(input:checked) {
21
+ background: var(--rc-list-item-selected-bg, Highlight);
22
+ color: var(--rc-list-item-selected-color, HighlightText);
23
+ }
24
+
25
+ @media (forced-colors: active) {
26
+ :where(.rc-theme-substrate, :host(.rc-theme-substrate))
27
+ .rc-list
28
+ > li:is([aria-selected='true'], :has(input:checked)) {
29
+ border-color: Highlight;
30
+ outline: 1px solid Highlight;
31
+ outline-offset: -1px;
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,20 @@
1
+ @layer rc-theme-substrate.css-components {
2
+ :where(.rc-theme-substrate, :host(.rc-theme-substrate))
3
+ select.rc-select:not(:where(rc-select > select)) {
4
+ box-sizing: border-box;
5
+ min-block-size: var(--rc-select-control-block-size, var(--rc-control-block-size, 2.5rem));
6
+ padding-block: var(--rc-select-padding-block, var(--rc-control-padding-block, 0.5rem));
7
+ padding-inline: var(--rc-select-padding-inline, var(--rc-control-padding-inline, 1rem));
8
+ border: var(--rc-select-border, var(--rc-border, 1px solid ButtonBorder));
9
+ border-radius: var(--rc-select-radius, var(--rc-control-radius, 0.5rem));
10
+ background: var(--rc-field, Field);
11
+ color: var(--rc-field-text, FieldText);
12
+ font: inherit;
13
+ }
14
+
15
+ :where(.rc-theme-substrate, :host(.rc-theme-substrate))
16
+ select.rc-select:not(:where(rc-select > select)):focus-visible {
17
+ outline: var(--rc-focus-ring, 2px solid Highlight);
18
+ outline-offset: var(--rc-focus-ring-offset, 2px);
19
+ }
20
+ }
@@ -0,0 +1,22 @@
1
+ @layer rc-theme-substrate.css-components {
2
+ :where(.rc-theme-substrate, :host(.rc-theme-substrate))
3
+ textarea.rc-textarea:not(:where(rc-textarea > textarea)) {
4
+ box-sizing: border-box;
5
+ min-block-size: var(--rc-control-block-size, 2.5rem);
6
+ padding-block: var(--rc-control-padding-block, 0.5rem);
7
+ padding-inline: var(--rc-control-padding-inline, 1rem);
8
+ border: var(--rc-textarea-border, var(--rc-border, 1px solid ButtonBorder));
9
+ border-radius: var(--rc-textarea-border-radius, var(--rc-control-radius, 0.5rem));
10
+ background: var(--rc-textarea-background, var(--rc-field, Field));
11
+ color: var(--rc-textarea-color, var(--rc-field-text, FieldText));
12
+ caret-color: var(--rc-textarea-caret-color, var(--rc-accent, AccentColor));
13
+ font: inherit;
14
+ resize: block;
15
+ }
16
+
17
+ :where(.rc-theme-substrate, :host(.rc-theme-substrate))
18
+ textarea.rc-textarea:not(:where(rc-textarea > textarea)):focus-visible {
19
+ outline: var(--rc-textarea-focus-outline, var(--rc-focus-ring, 2px solid Highlight));
20
+ outline-offset: var(--rc-focus-ring-offset, 2px);
21
+ }
22
+ }
@@ -0,0 +1,31 @@
1
+ @layer rc-base, rc-theme-substrate.defaults, rc-theme-substrate.bridge, rc-theme-substrate.native, rc-theme-substrate.components, rc-theme-substrate.css-components,
2
+ rc-theme-substrate.overrides;
3
+
4
+ @import './css-components/button.css';
5
+ @import './css-components/chip.css';
6
+ @import './css-components/chip-group.css';
7
+ @import './css-components/select.css';
8
+ @import './css-components/textarea.css';
9
+ @import './css-components/card.css';
10
+ @import './css-components/list.css';
11
+ @import './css-components/disclosure.css';
12
+
13
+ @layer rc-theme-substrate.css-components {
14
+ @media (forced-colors: active) {
15
+ :where(.rc-theme-substrate, :host(.rc-theme-substrate))
16
+ :where(
17
+ button.rc-button,
18
+ a.rc-button,
19
+ button.rc-chip,
20
+ a.rc-chip,
21
+ label.rc-chip,
22
+ select.rc-select,
23
+ textarea.rc-textarea,
24
+ .rc-card,
25
+ .rc-list,
26
+ details.rc-disclosure
27
+ ) {
28
+ forced-color-adjust: auto;
29
+ }
30
+ }
31
+ }
package/defaults.css CHANGED
@@ -1,4 +1,5 @@
1
- @layer rc-theme-substrate.defaults, rc-theme-substrate.bridge, rc-theme-substrate.components;
1
+ @layer rc-base, rc-theme-substrate.defaults, rc-theme-substrate.bridge, rc-theme-substrate.native, rc-theme-substrate.components, rc-theme-substrate.css-components,
2
+ rc-theme-substrate.overrides;
2
3
 
3
4
  @layer rc-theme-substrate.defaults {
4
5
  /*
@@ -24,6 +25,17 @@
24
25
  --substrate-border-color: light-dark(oklch(83% 0.018 75), oklch(39% 0.018 72));
25
26
  --substrate-shadow-color: light-dark(oklch(16% 0.03 60 / 18%), oklch(0% 0 0 / 42%));
26
27
 
28
+ /* Flipped against the surface pair, for the snackbar and anything else
29
+ * that has to read as a layer above the page rather than part of it. */
30
+ --substrate-inverse-surface: light-dark(oklch(27% 0.018 72), oklch(93% 0.01 80));
31
+ --substrate-inverse-on-surface: light-dark(oklch(96% 0.01 80), oklch(21% 0.018 72));
32
+
33
+ /*
34
+ * Held at hue 25 so it reads as red rather than as a darker shade of the
35
+ * primary, which sits at hue 48. Clears 7:1 against the field in both modes.
36
+ */
37
+ --substrate-error: light-dark(oklch(47% 0.19 25), oklch(74% 0.15 25));
38
+
27
39
  --substrate-font-family:
28
40
  system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Ubuntu, Cantarell,
29
41
  'Noto Sans', sans-serif;
@@ -35,6 +47,7 @@
35
47
  --substrate-radius-md: 0.5rem;
36
48
  --substrate-radius-lg: 0.75rem;
37
49
  --substrate-radius-xl: 1rem;
50
+ --substrate-radius-pill: 999px;
38
51
 
39
52
  --substrate-control-block-size: 2.5rem;
40
53
  --substrate-control-padding-block: 0.5rem;
@@ -57,6 +70,19 @@
57
70
  --substrate-motion-duration: 160ms;
58
71
  --substrate-motion-duration-slow: 240ms;
59
72
  --substrate-motion-easing: cubic-bezier(0.2, 0, 0, 1);
73
+ /*
74
+ * The shared spatial/effects scale (see the styling guide), kept as its
75
+ * own small set of primitives rather than derived from the two above:
76
+ * Substrate favors few named tokens over a layered primitive/semantic
77
+ * split, and the values only partly overlap (160/240ms already meant
78
+ * something as the flat scale; here they mean the spatial tier).
79
+ */
80
+ --substrate-motion-effects-duration-fast: 100ms;
81
+ --substrate-motion-effects-duration-default: 160ms;
82
+ --substrate-motion-effects-duration-slow: 240ms;
83
+ --substrate-motion-spatial-duration-fast: 160ms;
84
+ --substrate-motion-spatial-duration-default: 240ms;
85
+ --substrate-motion-spatial-duration-slow: 320ms;
60
86
  --substrate-disabled-opacity: 0.52;
61
87
  }
62
88
 
@@ -72,6 +98,9 @@
72
98
  --substrate-field: Field;
73
99
  --substrate-on-surface: CanvasText;
74
100
  --substrate-on-surface-muted: GrayText;
101
+ --substrate-inverse-surface: CanvasText;
102
+ --substrate-inverse-on-surface: Canvas;
103
+ --substrate-error: Mark;
75
104
  --substrate-border-color: ButtonBorder;
76
105
  --substrate-shadow-color: transparent;
77
106
  --substrate-focus-ring: 2px solid Highlight;
package/native.css ADDED
@@ -0,0 +1,249 @@
1
+ @layer rc-base, rc-theme-substrate.defaults, rc-theme-substrate.bridge, rc-theme-substrate.native, rc-theme-substrate.components, rc-theme-substrate.css-components,
2
+ rc-theme-substrate.overrides;
3
+
4
+ /* Import defaults.css and bridge.css first when theme tokens are desired. */
5
+ @layer rc-theme-substrate.native {
6
+ /*
7
+ * Native styles stop at native controls that are part of an RC-owned
8
+ * presentation, and at subtrees the consumer opts out with
9
+ * data-rc-native="off". These are element-level ownership contracts rather
10
+ * than host boundaries, so ordinary controls remain themed in layout
11
+ * components such as rc-toolbar, rc-card, rc-dialog, and rc-popover.
12
+ */
13
+ :where(.rc-theme-substrate:not([data-rc-native='off']))
14
+ :where(button, input, select, textarea, progress):not(
15
+ :where(
16
+ [data-rc-native='off'],
17
+ [data-rc-native='off'] *,
18
+ rc-button > :is(button, a[href]),
19
+ rc-chip > :is(button, a[href], label),
20
+ rc-chip > label > input:is([type='checkbox'], [type='radio']),
21
+ rc-combobox > select,
22
+ rc-fab > button,
23
+ rc-fab-menu > [slot='trigger'],
24
+ rc-field > :is(input, select, textarea),
25
+ rc-field > [data-rc-field-control] > :is(input, select, textarea),
26
+ rc-field > fieldset > :is(input, select, textarea),
27
+ rc-listbox > select,
28
+ rc-markdown-editor > textarea,
29
+ rc-navigation-rail > [slot='toggle'],
30
+ rc-menu-button > [slot='trigger'],
31
+ rc-progress > progress,
32
+ rc-range-slider > input[type='range'],
33
+ rc-search-bar > input[type='search'],
34
+ rc-segmented-button > fieldset input[type='radio'],
35
+ rc-select > select,
36
+ rc-slider > input[type='range'],
37
+ rc-switch > input[type='checkbox'],
38
+ rc-textarea > textarea,
39
+ rc-transfer-list > select
40
+ )
41
+ ),
42
+ :host(:not([data-rc-native='off']).rc-theme-substrate)
43
+ :where(button, input, select, textarea, progress):not(
44
+ :where(
45
+ [data-rc-native='off'],
46
+ [data-rc-native='off'] *,
47
+ rc-button > :is(button, a[href]),
48
+ rc-chip > :is(button, a[href], label),
49
+ rc-chip > label > input:is([type='checkbox'], [type='radio']),
50
+ rc-combobox > select,
51
+ rc-fab > button,
52
+ rc-fab-menu > [slot='trigger'],
53
+ rc-field > :is(input, select, textarea),
54
+ rc-field > [data-rc-field-control] > :is(input, select, textarea),
55
+ rc-field > fieldset > :is(input, select, textarea),
56
+ rc-listbox > select,
57
+ rc-markdown-editor > textarea,
58
+ rc-navigation-rail > [slot='toggle'],
59
+ rc-menu-button > [slot='trigger'],
60
+ rc-progress > progress,
61
+ rc-range-slider > input[type='range'],
62
+ rc-search-bar > input[type='search'],
63
+ rc-segmented-button > fieldset input[type='radio'],
64
+ rc-select > select,
65
+ rc-slider > input[type='range'],
66
+ rc-switch > input[type='checkbox'],
67
+ rc-textarea > textarea,
68
+ rc-transfer-list > select
69
+ )
70
+ ) {
71
+ &:where(button):not(:where(.rc-button, .rc-chip)) {
72
+ box-sizing: border-box;
73
+ display: inline-flex;
74
+ align-items: center;
75
+ justify-content: center;
76
+ gap: var(--rc-button-gap, var(--rc-control-gap, 0.5rem));
77
+ min-block-size: var(--rc-button-block-size, var(--rc-control-block-size, 2.5rem));
78
+ padding-block: var(--rc-button-padding-block, var(--rc-control-padding-block, 0.5rem));
79
+ padding-inline: var(--rc-button-padding-inline, var(--rc-control-padding-inline, 1rem));
80
+ border: var(--rc-button-border, var(--rc-border, 1px solid ButtonBorder));
81
+ border-radius: var(--rc-button-radius, var(--rc-control-radius, 999px));
82
+ background: var(--rc-button-bg, ButtonFace);
83
+ color: var(--rc-button-color, var(--rc-button-text, ButtonText));
84
+ font-family: var(--rc-font-family, sans-serif);
85
+ font-size: var(--rc-font-size, 1rem);
86
+ font-weight: var(--rc-font-weight, 400);
87
+ line-height: var(--rc-line-height, normal);
88
+ cursor: pointer;
89
+ }
90
+
91
+ &:where(
92
+ input:is(
93
+ [type='text'],
94
+ [type='search'],
95
+ [type='email'],
96
+ [type='url'],
97
+ [type='tel'],
98
+ [type='number'],
99
+ [type='password'],
100
+ :where(:not([type]))
101
+ ),
102
+ select,
103
+ textarea
104
+ ) {
105
+ box-sizing: border-box;
106
+ min-block-size: var(--rc-control-block-size, 2.5rem);
107
+ padding-block: var(--rc-control-padding-block, 0.5rem);
108
+ padding-inline: var(--rc-control-padding-inline, 1rem);
109
+ border: var(--rc-border, 1px solid ButtonBorder);
110
+ border-radius: var(--rc-control-radius, 0.5rem);
111
+ background: var(--rc-field, Field);
112
+ color: var(--rc-field-text, FieldText);
113
+ font-family: var(--rc-font-family, sans-serif);
114
+ font-size: var(--rc-font-size, 1rem);
115
+ font-weight: var(--rc-font-weight, 400);
116
+ line-height: var(--rc-line-height, normal);
117
+ }
118
+
119
+ &:where(select):not(:where(.rc-select)) {
120
+ cursor: pointer;
121
+ }
122
+
123
+ &:not(:where(.rc-button, .rc-chip, .rc-select, .rc-textarea)):focus-visible {
124
+ outline: var(--rc-focus-ring, 2px solid Highlight);
125
+ outline-offset: var(--rc-focus-ring-offset, 2px);
126
+ }
127
+
128
+ &:where(input[type='checkbox'], input[type='radio'], input[type='range']) {
129
+ min-block-size: auto;
130
+ padding: 0;
131
+ accent-color: var(--rc-accent, AccentColor);
132
+ }
133
+
134
+ &:where(input[type='range'], progress) {
135
+ inline-size: 100%;
136
+ }
137
+
138
+ &:where(progress) {
139
+ accent-color: var(--rc-accent, AccentColor);
140
+ }
141
+
142
+ &:not(:where(.rc-button, .rc-chip)):where(:disabled) {
143
+ color: var(--rc-text-disabled, GrayText);
144
+ cursor: not-allowed;
145
+ }
146
+ }
147
+ }
148
+
149
+ /* Reassert rc-base light-DOM row geometry after generic native presentation. */
150
+ @layer rc-theme-substrate.components {
151
+ :where(.rc-theme-substrate:not([data-rc-native='off']))
152
+ :where(rc-menu :is([role='menuitem'], [role='menuitemcheckbox'], [role='menuitemradio'])):not(
153
+ :where([data-rc-native='off'], [data-rc-native='off'] *)
154
+ ),
155
+ :host(:not([data-rc-native='off']).rc-theme-substrate)
156
+ :where(rc-menu :is([role='menuitem'], [role='menuitemcheckbox'], [role='menuitemradio'])):not(
157
+ :where([data-rc-native='off'], [data-rc-native='off'] *)
158
+ ) {
159
+ display: flex;
160
+ gap: var(--rc-menu-item-gap, var(--rc-item-gap, 0.5em));
161
+ min-block-size: var(--rc-menu-item-min-block-size, 0px);
162
+ justify-content: normal;
163
+ padding: var(--rc-menu-item-padding-block, var(--rc-item-padding-block, 0.3em))
164
+ var(--rc-menu-item-padding-inline, var(--rc-item-padding-inline, 0.75em));
165
+ border: none;
166
+ border-radius: 0;
167
+ background: transparent;
168
+ color: inherit;
169
+ font: inherit;
170
+ cursor: default;
171
+ outline: none;
172
+ }
173
+
174
+ :where(.rc-theme-substrate:not([data-rc-native='off']))
175
+ rc-menu
176
+ :is([role='menuitem'], [role='menuitemcheckbox'], [role='menuitemradio']):hover:not(
177
+ :where([data-rc-native='off'], [data-rc-native='off'] *)
178
+ ),
179
+ :host(:not([data-rc-native='off']).rc-theme-substrate)
180
+ rc-menu
181
+ :is([role='menuitem'], [role='menuitemcheckbox'], [role='menuitemradio']):hover:not(
182
+ :where([data-rc-native='off'], [data-rc-native='off'] *)
183
+ ) {
184
+ background: var(--rc-menu-hover-bg, color-mix(in srgb, Highlight 8%, transparent));
185
+ color: var(--rc-menu-hover-color, inherit);
186
+ }
187
+
188
+ :where(.rc-theme-substrate:not([data-rc-native='off']))
189
+ rc-menu
190
+ :is([role='menuitem'], [role='menuitemcheckbox'], [role='menuitemradio'])[data-active]:not(
191
+ :where([data-rc-native='off'], [data-rc-native='off'] *)
192
+ ),
193
+ :host(:not([data-rc-native='off']).rc-theme-substrate)
194
+ rc-menu
195
+ :is([role='menuitem'], [role='menuitemcheckbox'], [role='menuitemradio'])[data-active]:not(
196
+ :where([data-rc-native='off'], [data-rc-native='off'] *)
197
+ ) {
198
+ background: var(--rc-menu-active-bg, color-mix(in srgb, Highlight 8%, transparent));
199
+ color: var(--rc-menu-active-color, inherit);
200
+ }
201
+
202
+ :where(.rc-theme-substrate:not([data-rc-native='off']))
203
+ rc-menu
204
+ :is(
205
+ button:disabled,
206
+ [role='menuitem'][aria-disabled='true'],
207
+ [role='menuitemcheckbox'][aria-disabled='true'],
208
+ [role='menuitemradio'][aria-disabled='true']
209
+ ):not(:where([data-rc-native='off'], [data-rc-native='off'] *)),
210
+ :host(:not([data-rc-native='off']).rc-theme-substrate)
211
+ rc-menu
212
+ :is(
213
+ button:disabled,
214
+ [role='menuitem'][aria-disabled='true'],
215
+ [role='menuitemcheckbox'][aria-disabled='true'],
216
+ [role='menuitemradio'][aria-disabled='true']
217
+ ):not(:where([data-rc-native='off'], [data-rc-native='off'] *)) {
218
+ color: var(--rc-menu-disabled-color, var(--rc-text-disabled, GrayText));
219
+ opacity: var(--rc-menu-disabled-opacity, var(--rc-disabled-opacity, 0.55));
220
+ pointer-events: none;
221
+ }
222
+ }
223
+
224
+ @layer rc-theme-substrate.overrides {
225
+ :where(.rc-theme-substrate:not([data-rc-native='off']))
226
+ :where(
227
+ rc-adaptive-menu > [data-rc-action-overflowed] > :is(button, a[href]),
228
+ rc-adaptive-menu > :is(button, a[href])[data-rc-action-overflowed]
229
+ ):not(:where([data-rc-native='off'], [data-rc-native='off'] *)),
230
+ :host(:not([data-rc-native='off']).rc-theme-substrate)
231
+ :where(
232
+ rc-adaptive-menu > [data-rc-action-overflowed] > :is(button, a[href]),
233
+ rc-adaptive-menu > :is(button, a[href])[data-rc-action-overflowed]
234
+ ):not(:where([data-rc-native='off'], [data-rc-native='off'] *)) {
235
+ display: flex;
236
+ gap: var(--rc-adaptive-menu-item-gap, var(--rc-item-gap, 0.5em));
237
+ min-block-size: var(--rc-adaptive-menu-item-min-block-size, 2.5em);
238
+ padding: var(--rc-adaptive-menu-item-padding-block, var(--rc-item-padding-block, 0.3em))
239
+ var(--rc-adaptive-menu-item-padding-inline, var(--rc-item-padding-inline, 0.75em));
240
+ border: none;
241
+ border-radius: 0;
242
+ background: transparent;
243
+ color: inherit;
244
+ font: inherit;
245
+ text-align: start;
246
+ justify-content: normal;
247
+ text-decoration: none;
248
+ }
249
+ }
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.6.0",
6
+ "version": "0.7.0",
7
7
  "description": "Lightweight CSS reference theme for app-oriented rc-webcomponents layouts.",
8
8
  "repository": {
9
9
  "type": "git",
@@ -22,11 +22,15 @@
22
22
  "./defaults.css": "./defaults.css",
23
23
  "./components.css": "./components.css",
24
24
  "./components/*.css": "./components/*.css",
25
+ "./css-components.css": "./css-components.css",
26
+ "./css-components/*.css": "./css-components/*.css",
27
+ "./native.css": "./native.css",
25
28
  "./theme.css": "./theme.css"
26
29
  },
27
30
  "files": [
28
31
  "*.css",
29
32
  "components",
33
+ "css-components",
30
34
  "README.md"
31
35
  ],
32
36
  "scripts": {