@sigx/zero-daisyui 0.16.0 → 0.17.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.
@@ -66,9 +66,30 @@
66
66
  transform: rotate(225deg);
67
67
  }
68
68
 
69
+ [data-scope="collapsible"][data-part="trigger"]:where(button) {
70
+ appearance: none;
71
+ margin: 0;
72
+ border: 0;
73
+ background: none;
74
+ color: inherit;
75
+ font-family: inherit;
76
+ font-style: inherit;
77
+ line-height: inherit;
78
+ letter-spacing: inherit;
79
+ text-transform: inherit;
80
+ text-align: start;
81
+ inline-size: 100%;
82
+ box-sizing: border-box;
83
+ }
84
+
69
85
  [data-scope="collapsible"][data-part="panel"] {
70
86
  padding: 0 var(--space-2xl) var(--space-xl);
71
87
  font-size: var(--text-md);
88
+ overflow: clip;
89
+ }
90
+
91
+ [data-scope="collapsible"][data-part="panel"][data-state="open"] {
92
+ transition: block-size var(--duration-normal) var(--ease-standard), padding-block var(--duration-normal) var(--ease-standard);
72
93
  }
73
94
 
74
95
  [data-scope="collapsible"][data-part="panel"][data-state="closed"] {
@@ -76,6 +97,13 @@
76
97
  animation: collapsible-panel-exit var(--duration-normal) var(--ease-standard);
77
98
  }
78
99
 
100
+ [data-scope="collapsible"][data-part="panel"][data-state="closed"][hidden] {
101
+ block-size: 0;
102
+ padding-block: 0;
103
+ border-block-width: 0;
104
+ animation: none;
105
+ }
106
+
79
107
  [data-scope="collapsible"][data-part="root"][data-color="primary"] {
80
108
  --collapsible-accent: color-mix(in oklab, var(--color-primary) 95%, var(--color-base-content));
81
109
  }
@@ -164,6 +192,10 @@
164
192
  [data-scope="collapsible"][data-part="panel"][data-state="closed"] {
165
193
  animation: none;
166
194
  }
195
+
196
+ [data-scope="collapsible"][data-part="panel"][data-state="open"] {
197
+ transition: none;
198
+ }
167
199
  }
168
200
  }
169
201
  @keyframes collapsible-panel-exit {
@@ -845,9 +845,30 @@
845
845
  transform: rotate(225deg);
846
846
  }
847
847
 
848
+ [data-scope="collapsible"][data-part="trigger"]:where(button) {
849
+ appearance: none;
850
+ margin: 0;
851
+ border: 0;
852
+ background: none;
853
+ color: inherit;
854
+ font-family: inherit;
855
+ font-style: inherit;
856
+ line-height: inherit;
857
+ letter-spacing: inherit;
858
+ text-transform: inherit;
859
+ text-align: start;
860
+ inline-size: 100%;
861
+ box-sizing: border-box;
862
+ }
863
+
848
864
  [data-scope="collapsible"][data-part="panel"] {
849
865
  padding: 0 var(--space-2xl) var(--space-xl);
850
866
  font-size: var(--text-md);
867
+ overflow: clip;
868
+ }
869
+
870
+ [data-scope="collapsible"][data-part="panel"][data-state="open"] {
871
+ transition: block-size var(--duration-normal) var(--ease-standard), padding-block var(--duration-normal) var(--ease-standard);
851
872
  }
852
873
 
853
874
  [data-scope="collapsible"][data-part="panel"][data-state="closed"] {
@@ -855,6 +876,13 @@
855
876
  animation: collapsible-panel-exit var(--duration-normal) var(--ease-standard);
856
877
  }
857
878
 
879
+ [data-scope="collapsible"][data-part="panel"][data-state="closed"][hidden] {
880
+ block-size: 0;
881
+ padding-block: 0;
882
+ border-block-width: 0;
883
+ animation: none;
884
+ }
885
+
858
886
  [data-scope="collapsible"][data-part="root"][data-color="primary"] {
859
887
  --collapsible-accent: color-mix(in oklab, var(--color-primary) 95%, var(--color-base-content));
860
888
  }
@@ -943,6 +971,10 @@
943
971
  [data-scope="collapsible"][data-part="panel"][data-state="closed"] {
944
972
  animation: none;
945
973
  }
974
+
975
+ [data-scope="collapsible"][data-part="panel"][data-state="open"] {
976
+ transition: none;
977
+ }
946
978
  }
947
979
  }
948
980
  @keyframes collapsible-panel-exit {
@@ -201,6 +201,7 @@
201
201
  .zx-file-upload__item-size {
202
202
  font-size: var(--text-xs);
203
203
  font-variant-numeric: tabular-nums;
204
+ flex-shrink: 0;
204
205
  }
205
206
 
206
207
  .zx-root .zx-file-upload__item-size {
@@ -232,6 +233,7 @@
232
233
  padding: var(--space-2xs) var(--space-xs);
233
234
  line-height: var(--leading-none);
234
235
  cursor: pointer;
236
+ flex-shrink: 0;
235
237
  }
236
238
 
237
239
  .zx-file-upload__item-remove.zx-f-disabled {
@@ -192,6 +192,7 @@
192
192
  font-size: 0.75em;
193
193
  line-height: 1;
194
194
  transition: transform var(--duration-fast) var(--ease-standard), opacity var(--duration-fast) var(--ease-standard);
195
+ flex-shrink: 0;
195
196
  }
196
197
 
197
198
  .zx-table__sort-indicator.zx-s-descending {
@@ -37,7 +37,7 @@
37
37
  border-radius: var(--radius-field);
38
38
  cursor: pointer;
39
39
  outline: none;
40
- transition: background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);
40
+ transition: background var(--duration-fast) var(--ease-standard);
41
41
  }
42
42
 
43
43
  .zx-tree-view__item.zx-f-selected {
@@ -82,7 +82,7 @@
82
82
  border-radius: var(--radius-field);
83
83
  cursor: pointer;
84
84
  outline: none;
85
- transition: background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);
85
+ transition: background var(--duration-fast) var(--ease-standard);
86
86
  user-select: none;
87
87
  }
88
88
 
@@ -8164,7 +8164,7 @@
8164
8164
  border-radius: var(--radius-field);
8165
8165
  cursor: pointer;
8166
8166
  outline: none;
8167
- transition: background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);
8167
+ transition: background var(--duration-fast) var(--ease-standard);
8168
8168
  }
8169
8169
 
8170
8170
  .zx-tree-view__item.zx-f-selected {
@@ -8209,7 +8209,7 @@
8209
8209
  border-radius: var(--radius-field);
8210
8210
  cursor: pointer;
8211
8211
  outline: none;
8212
- transition: background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);
8212
+ transition: background var(--duration-fast) var(--ease-standard);
8213
8213
  user-select: none;
8214
8214
  }
8215
8215
 
@@ -14456,6 +14456,7 @@
14456
14456
  font-size: 0.75em;
14457
14457
  line-height: 1;
14458
14458
  transition: transform var(--duration-fast) var(--ease-standard), opacity var(--duration-fast) var(--ease-standard);
14459
+ flex-shrink: 0;
14459
14460
  }
14460
14461
 
14461
14462
  .zx-table__sort-indicator.zx-s-descending {
@@ -15245,6 +15246,7 @@
15245
15246
  .zx-file-upload__item-size {
15246
15247
  font-size: var(--text-xs);
15247
15248
  font-variant-numeric: tabular-nums;
15249
+ flex-shrink: 0;
15248
15250
  }
15249
15251
 
15250
15252
  .zx-root .zx-file-upload__item-size {
@@ -15276,6 +15278,7 @@
15276
15278
  padding: var(--space-2xs) var(--space-xs);
15277
15279
  line-height: var(--leading-none);
15278
15280
  cursor: pointer;
15281
+ flex-shrink: 0;
15279
15282
  }
15280
15283
 
15281
15284
  .zx-file-upload__item-remove.zx-f-disabled {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://signalxjs.github.io/zero/schemas/lynx-manifest.schema.json",
3
3
  "manifestVersion": 1,
4
- "zeroVersion": "0.16.0",
4
+ "zeroVersion": "0.17.0",
5
5
  "name": "daisyui",
6
6
  "themes": [
7
7
  {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://signalxjs.github.io/zero/schemas/ds-manifest.schema.json",
3
3
  "manifestVersion": 1,
4
- "zeroVersion": "0.16.0",
4
+ "zeroVersion": "0.17.0",
5
5
  "name": "daisyui",
6
6
  "themes": [
7
7
  {
@@ -1 +1 @@
1
- {"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../src/recipes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../src/recipes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAwB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AA+VxE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,IAAI,EAAE,WAqVlB,CAAC;AA4BF,eAAO,MAAM,WAAW,EAAE,WA+ExB,CAAC;AAGH,eAAO,MAAM,YAAY,EAAE,WA0R1B,CAAC;AAmJF,eAAO,MAAM,MAAM,EAAE,WA0GpB,CAAC;AA4CF,eAAO,MAAM,OAAO,EAAE,WAoDrB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,WAoDrB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,EAAE,WAyCvB,CAAC;AAGF,eAAO,MAAM,IAAI,EAAE,WA4LlB,CAAC;AAIF,eAAO,MAAM,OAAO,EAAE,WAmCrB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,WAoDnB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,EAAE,WAuEtB,CAAC;AAkEF,eAAO,MAAM,QAAQ,EAAE,WA6PtB,CAAC;AAMF,eAAO,MAAM,UAAU,EAAE,WAoJxB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,WAkC3B,CAAC;AAgCF,eAAO,MAAM,QAAQ,EAAE,WAiGtB,CAAC;AAMF,eAAO,MAAM,MAAM,EAAE,WAocpB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,WAkGvB,CAAC;AA+DF,eAAO,MAAM,MAAM,EAAE,WAmQpB,CAAC;AAqDF,eAAO,MAAM,MAAM,EAAE,WAoTpB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,WAoJpB,CAAC;AAmBF,eAAO,MAAM,WAAW,EAAE,WAsGzB,CAAC;AAoBF;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,WAmXnB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,WAsTtB,CAAC;AAIF,eAAO,MAAM,MAAM,EAAE,WAyHpB,CAAC;AASF,eAAO,MAAM,WAAW,EAAE,WA0MzB,CAAC;AAIF,eAAO,MAAM,WAAW,EAAE,WA0MzB,CAAC;AA4DF,eAAO,MAAM,WAAW,EAAE,WAoHzB,CAAC;AA2FF,eAAO,MAAM,QAAQ,EAAE,WAwLtB,CAAC;AAsCF;;;;;GAKG;AACH,eAAO,MAAM,KAAK,EAAE,WAsKnB,CAAC;AAMF;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,EAAE,WAgItB,CAAC;AAGF;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,WAyIlB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,KAAK,EAAE,WAiLnB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,WA6FxB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,KAAK,EAAE,WAsJnB,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,OAAO,EAAE,WAuJrB,CAAC;AAGF;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,EAAE,WAwDtB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,EAAE,WA6DrB,CAAC;AAGF,uEAAuE;AACvE,eAAO,MAAM,GAAG,EAAE,WAgFjB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,MAAM,EAAE,WAgEpB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,WA6EvB,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,KAAK,EAAE,WAsLnB,CAAC;AAWF,8DAA8D;AAC9D,eAAO,MAAM,QAAQ,EAAE,WAmQtB,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,IAAI,EAAE,WAuIlB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,EAAE,WAsIrB,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,cAAc,EAAE,WA+G5B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,WAmElB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,EAAE,WAyFpB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,OAAO,EAAE,WAgIrB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,WAoIzB,CAAC;AAmDF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,WA0HxB,CAAC;AAsCF;;;;;GAKG;AACH,eAAO,MAAM,KAAK,EAAE,WAqQnB,CAAC;AA0CF;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,EAAE,WAoMpB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,KAAK,EAAE,WAqRnB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,WAqNxB,CAAC;AAeF;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,WA4MtB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,WA8ElB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,WAqDvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,IAAI,EAAE,WAwHlB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,WAAW,EAahC,CAAC"}
package/dist/recipes.js CHANGED
@@ -216,6 +216,97 @@ const disclosureExit = (scope) => ({
216
216
  },
217
217
  },
218
218
  });
219
+ /**
220
+ * Collapsible's non-native mode (#453): a `<div>` root, a `<button>` trigger
221
+ * and a panel hidden with `hidden="until-found"`. Nothing lives on
222
+ * `::details-content` there, so the panel does that wrapper's work itself:
223
+ * collapsed while `hidden` (the UA's `content-visibility: hidden` keeps the
224
+ * box — padding and border included — on the page), clipped so its content
225
+ * never spills out of a box that is growing or shrinking, and grown
226
+ * from collapsed to `auto` on the open state (`interpolate-size` is the
227
+ * root's, and inherits); the close is `disclosureExit`'s, as in native mode.
228
+ * Inert in native mode: a native panel is never `hidden`, and its block size
229
+ * never moves.
230
+ *
231
+ * The trigger sheds the paint a UA `<button>` has and a `<summary>` never
232
+ * had — only where the recipe's own base leaves a property unset, since this
233
+ * rule (`:where(button)`, the base's specificity) is emitted after it.
234
+ * Web-only, like `hidden="until-found"` itself.
235
+ */
236
+ const BUTTON_RESET = {
237
+ appearance: 'none',
238
+ margin: '0',
239
+ padding: '0',
240
+ border: '0',
241
+ background: 'none',
242
+ color: 'inherit',
243
+ fontFamily: 'inherit',
244
+ fontSize: 'inherit',
245
+ fontWeight: 'inherit',
246
+ fontStyle: 'inherit',
247
+ lineHeight: 'inherit',
248
+ letterSpacing: 'inherit',
249
+ textTransform: 'inherit',
250
+ textAlign: 'start',
251
+ inlineSize: '100%',
252
+ boxSizing: 'border-box',
253
+ };
254
+ /** The reset minus what `base` states itself (a `borderRadius` is no border). */
255
+ const summaryLike = (base = {}) => {
256
+ const own = Object.keys(base).filter((key) => !key.endsWith('Radius'));
257
+ return Object.fromEntries(Object.entries(BUTTON_RESET)
258
+ .filter(([key]) => !own.some((k) => k === key || k.startsWith(key))));
259
+ };
260
+ const withNonNative = (recipe) => {
261
+ const web = recipe.targets?.web ?? {};
262
+ const trigger = web.parts?.trigger ?? {};
263
+ const panel = web.parts?.panel ?? {};
264
+ const reduced = panel.at?.['reduced-motion'] ?? {};
265
+ return {
266
+ ...recipe,
267
+ targets: {
268
+ ...recipe.targets,
269
+ web: {
270
+ ...web,
271
+ parts: {
272
+ ...web.parts,
273
+ trigger: {
274
+ ...trigger,
275
+ selectors: { ...trigger.selectors, '&:where(button)': summaryLike(recipe.parts.trigger?.base) },
276
+ },
277
+ panel: {
278
+ ...panel,
279
+ base: { ...panel.base, overflow: 'clip' },
280
+ selectors: {
281
+ ...panel.selectors,
282
+ '&[data-state="closed"][hidden]': {
283
+ blockSize: '0',
284
+ paddingBlock: '0',
285
+ borderBlockWidth: '0',
286
+ animation: 'none',
287
+ },
288
+ },
289
+ // The open half: from the collapsed box to `auto`.
290
+ states: {
291
+ ...panel.states,
292
+ open: {
293
+ ...panel.states?.open,
294
+ transition: 'block-size var(--duration-normal) var(--ease-standard), padding-block var(--duration-normal) var(--ease-standard)',
295
+ },
296
+ },
297
+ at: {
298
+ ...panel.at,
299
+ 'reduced-motion': {
300
+ ...reduced,
301
+ states: { ...reduced.states, open: { transition: 'none' } },
302
+ },
303
+ },
304
+ },
305
+ },
306
+ },
307
+ },
308
+ };
309
+ };
219
310
  /**
220
311
  * Merge presence into a part's own styles per KEY, not per block: a recipe
221
312
  * that already writes `states: { open: {} }` — the "deliberately unstyled"
@@ -621,7 +712,7 @@ const disclosureSizes = {
621
712
  },
622
713
  };
623
714
  // daisy "collapse collapse-arrow" flavor.
624
- export const collapsible = {
715
+ export const collapsible = withNonNative({
625
716
  component: 'collapsible',
626
717
  targets: disclosureExit('collapsible'),
627
718
  // Public to a design system derived from this one (#73).
@@ -700,7 +791,7 @@ export const collapsible = {
700
791
  // signalxjs/lynx#1070. No `color` default: the un-attributed accent is
701
792
  // base-content ink, outside the color vocabulary.
702
793
  defaultVariants: { size: 'md' },
703
- };
794
+ });
704
795
  // daisy "toggle" flavor.
705
796
  export const switchRecipe = {
706
797
  component: 'switch',
@@ -5367,6 +5458,14 @@ const lynxTreeRowStates = {
5367
5458
  },
5368
5459
  ...lynxFocus({ inset: true }),
5369
5460
  };
5461
+ /**
5462
+ * The tree rows' lynx base: the fill still eases, the ink snaps — a
5463
+ * transitioned `color` never reaches the row's inheriting label on lynx
5464
+ * (signalxjs/lynx#1292; see the tree-view recipe's `targets`).
5465
+ */
5466
+ const lynxTreeRowBase = {
5467
+ transition: 'background var(--duration-fast) var(--ease-standard)',
5468
+ };
5370
5469
  /** A held selected row keeps its accent fill (the web's `:not([data-selected])`). */
5371
5470
  const lynxTreeRowSelectors = {
5372
5471
  '&[data-selected][data-pressed]': { background: 'var(--tree-accent)' },
@@ -5525,11 +5624,23 @@ export const treeView = {
5525
5624
  // those carry is restated on the part the runtime stamps. The skin's
5526
5625
  // `:dir(rtl)` mirror and the `@media` stops have no lynx form (no RTL
5527
5626
  // flow, no conditions) and stay dropped.
5627
+ //
5628
+ // The rows transition `background` only (signalxjs/lynx#1292, zero#521).
5629
+ // A row's label is the author's `<text>`, inked by inheritance from the
5630
+ // row. Lynx's new animator (on by default) takes a transitioned `color`
5631
+ // change away from the element's own style pass and ticks it into the
5632
+ // row's paint alone, and the row's children inherit its computed colour
5633
+ // only in that pass, so they kept the OLD ink: a row selected live
5634
+ // painted base-content text on the accent fill, while a row selected at
5635
+ // mount (no transition runs) was right. Read in Lynx's
5636
+ // `fiber_element.cc` (`ConsumeStyleInternal`) and
5637
+ // `css_transition_manager.cc` (`ConsumeCSSProperty`). Without a `color`
5638
+ // transition the new ink is set in the style pass and reaches the label.
5528
5639
  targets: {
5529
5640
  lynx: {
5530
5641
  parts: {
5531
- item: { states: lynxTreeRowStates, selectors: lynxTreeRowSelectors },
5532
- 'branch-trigger': { states: lynxTreeRowStates, selectors: lynxTreeRowSelectors },
5642
+ item: { base: lynxTreeRowBase, states: lynxTreeRowStates, selectors: lynxTreeRowSelectors },
5643
+ 'branch-trigger': { base: lynxTreeRowBase, states: lynxTreeRowStates, selectors: lynxTreeRowSelectors },
5533
5644
  // `inline-block` is not a lynx display value. The glyph is a
5534
5645
  // `<text>` part: a 1em box centred on it, so the quarter turn
5535
5646
  // pivots on the chevron instead of swinging it sideways.
@@ -9229,6 +9340,13 @@ export const table = {
9229
9340
  base: { flexDirection: 'row' },
9230
9341
  states: { pressed: { color: 'var(--table-accent)' }, ...lynxFocus() },
9231
9342
  },
9343
+ // The mark never takes its width out of the header's word
9344
+ // (signalxjs/lynx#1299): lynx's flex has no automatic
9345
+ // minimum, so the ▲ (kept in layout while unsorted) squeezed
9346
+ // "Name" into "Nam / e" at xl. lynx-zero holds the label's
9347
+ // `<text>` at its content width; a header too narrow for
9348
+ // both overflows whole, as the web's column grows.
9349
+ 'sort-indicator': { base: { flexShrink: '0' } },
9232
9350
  },
9233
9351
  variants: {
9234
9352
  color: Object.fromEntries(ROLES.map((c) => {
@@ -9481,7 +9599,15 @@ export const fileUpload = {
9481
9599
  base: { alignSelf: 'stretch', display: 'flex', flexDirection: 'column' },
9482
9600
  },
9483
9601
  item: { base: { flexDirection: 'row' } },
9602
+ // Only the name gives way in a narrow row (signalxjs/lynx#1294).
9603
+ // Lynx's flex has no automatic minimum, so every item
9604
+ // shrank below its content: "1.5 kB" wrapped to two lines
9605
+ // and the × squeezed into an oval. The size and the × keep
9606
+ // their content width, as the web's do; the name
9607
+ // (`flex: 1 1 auto; min-width: 0`) ellipsizes.
9608
+ 'item-size': { base: { flexShrink: '0' } },
9484
9609
  'item-remove': {
9610
+ base: { flexShrink: '0' },
9485
9611
  states: { pressed: { background: 'var(--color-base-200)' }, ...lynxFocus() },
9486
9612
  },
9487
9613
  'clear-trigger': {