@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.
- package/dist/css/components/collapsible.css +32 -0
- package/dist/css/index.css +32 -0
- package/dist/lynx/components/file-upload.css +2 -0
- package/dist/lynx/components/table.css +1 -0
- package/dist/lynx/components/tree-view.css +2 -2
- package/dist/lynx/index.css +5 -2
- package/dist/lynx/manifest.json +1 -1
- package/dist/manifest.json +1 -1
- package/dist/recipes.d.ts.map +1 -1
- package/dist/recipes.js +130 -4
- package/dist/recipes.js.map +1 -1
- package/package.json +4 -4
- package/src/recipes.ts +132 -4
|
@@ -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 {
|
package/dist/css/index.css
CHANGED
|
@@ -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 {
|
|
@@ -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)
|
|
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)
|
|
85
|
+
transition: background var(--duration-fast) var(--ease-standard);
|
|
86
86
|
user-select: none;
|
|
87
87
|
}
|
|
88
88
|
|
package/dist/lynx/index.css
CHANGED
|
@@ -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)
|
|
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)
|
|
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 {
|
package/dist/lynx/manifest.json
CHANGED
package/dist/manifest.json
CHANGED
package/dist/recipes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../src/recipes.ts"],"names":[],"mappings":"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"}
|
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': {
|