@sigx/zero-daisyui 0.2.0-beta.5 → 0.2.0-beta.6
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/lynx/components/button.css +4 -2
- package/dist/lynx/components/carousel.css +4 -4
- package/dist/lynx/components/chat.css +2 -1
- package/dist/lynx/components/checkbox.css +3 -4
- package/dist/lynx/components/dialog.css +15 -8
- package/dist/lynx/components/diff.css +6 -4
- package/dist/lynx/components/drawer.css +12 -6
- package/dist/lynx/components/indicator.css +24 -24
- package/dist/lynx/components/menu.css +10 -5
- package/dist/lynx/components/native-select.css +6 -6
- package/dist/lynx/components/number-input.css +4 -2
- package/dist/lynx/components/pagination.css +2 -1
- package/dist/lynx/components/popover.css +12 -6
- package/dist/lynx/components/progress.css +1 -1
- package/dist/lynx/components/select.css +12 -6
- package/dist/lynx/components/slider.css +6 -5
- package/dist/lynx/components/steps.css +18 -18
- package/dist/lynx/components/toast.css +4 -4
- package/dist/lynx/components/tooltip.css +10 -5
- package/dist/lynx/components/tree-view.css +1 -1
- package/dist/lynx/index.css +156 -113
- package/dist/lynx/manifest.json +2 -2
- package/dist/manifest.json +1 -1
- package/dist/recipes.d.ts.map +1 -1
- package/dist/recipes.js +305 -1
- package/dist/recipes.js.map +1 -1
- package/dist/report.json +495 -0
- package/package.json +4 -4
- package/src/recipes.ts +307 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sigx/zero-daisyui",
|
|
3
|
-
"version": "0.2.0-beta.
|
|
3
|
+
"version": "0.2.0-beta.6",
|
|
4
4
|
"description": "DaisyUI-flavored design system for SignalX Zero — daisy's token values and component look as a pure tokens+recipes skin over @sigx/zero primitives. No Tailwind, no daisyUI plugin required.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -44,12 +44,12 @@
|
|
|
44
44
|
"url": "https://github.com/andtii/zero-wip/issues"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"@sigx/zero": "^0.2.0-beta.
|
|
47
|
+
"@sigx/zero": "^0.2.0-beta.6"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"typescript": "^6.0.3",
|
|
51
|
-
"@sigx/zero": "^0.2.0-beta.
|
|
52
|
-
"@sigx/zero-kit": "^0.2.0-beta.
|
|
51
|
+
"@sigx/zero": "^0.2.0-beta.6",
|
|
52
|
+
"@sigx/zero-kit": "^0.2.0-beta.6"
|
|
53
53
|
},
|
|
54
54
|
"publishConfig": {
|
|
55
55
|
"access": "public"
|
package/src/recipes.ts
CHANGED
|
@@ -919,6 +919,26 @@ const btnSizes: Record<string, Record<string, PartStyles>> = {
|
|
|
919
919
|
xl: { trigger: { base: { height: fieldHeight('xl'), paddingInline: 'calc(var(--size-field) * 6)', fontSize: 'var(--text-lg)' } } },
|
|
920
920
|
};
|
|
921
921
|
|
|
922
|
+
/**
|
|
923
|
+
* `btn`'s inline padding restated physically, for the `targets.lynx`
|
|
924
|
+
* sections of every btn-wearing recipe: logical spellings resolve on iOS but
|
|
925
|
+
* not on Android (measured, signalxjs/lynx#1084), so the lynx emitter
|
|
926
|
+
* refuses `padding-inline`. Physical is that target's norm — lynx has no
|
|
927
|
+
* RTL flow for the logical spelling to flip with.
|
|
928
|
+
*/
|
|
929
|
+
const lynxBtnPad = (mult: number): NonNullable<PartStyles['base']> => ({
|
|
930
|
+
paddingLeft: `calc(var(--size-field) * ${mult})`,
|
|
931
|
+
paddingRight: `calc(var(--size-field) * ${mult})`,
|
|
932
|
+
});
|
|
933
|
+
|
|
934
|
+
/** The btn size ramp's physical inline padding, for `targets.lynx.variants`. */
|
|
935
|
+
const lynxBtnSizes = (part: string): Record<string, Record<string, PartStyles>> => ({
|
|
936
|
+
xs: { [part]: { base: lynxBtnPad(2) } },
|
|
937
|
+
sm: { [part]: { base: lynxBtnPad(3) } },
|
|
938
|
+
lg: { [part]: { base: lynxBtnPad(5) } },
|
|
939
|
+
xl: { [part]: { base: lynxBtnPad(6) } },
|
|
940
|
+
});
|
|
941
|
+
|
|
922
942
|
export const dialog: RecipeInput = {
|
|
923
943
|
component: 'dialog',
|
|
924
944
|
keyframes: {
|
|
@@ -999,6 +1019,19 @@ export const dialog: RecipeInput = {
|
|
|
999
1019
|
// Trigger-carried axes — see `btnColors` for why the popup is out of
|
|
1000
1020
|
// reach and the trigger is the whole story here.
|
|
1001
1021
|
variants: { color: btnColors(), size: btnSizes },
|
|
1022
|
+
// The btn paddings and the footer's push-down, restated physically —
|
|
1023
|
+
// see `lynxBtnPad` for the #1084 verdict this answers.
|
|
1024
|
+
targets: {
|
|
1025
|
+
lynx: {
|
|
1026
|
+
parts: {
|
|
1027
|
+
trigger: { base: lynxBtnPad(4) },
|
|
1028
|
+
close: { base: lynxBtnPad(4) },
|
|
1029
|
+
cancel: { base: lynxBtnPad(4) },
|
|
1030
|
+
footer: { base: { marginTop: '1.5rem' } },
|
|
1031
|
+
},
|
|
1032
|
+
variants: { size: lynxBtnSizes('trigger') },
|
|
1033
|
+
},
|
|
1034
|
+
},
|
|
1002
1035
|
};
|
|
1003
1036
|
|
|
1004
1037
|
// daisy "dropdown-content"/card look for floating panels.
|
|
@@ -1041,6 +1074,16 @@ export const popover: RecipeInput = {
|
|
|
1041
1074
|
},
|
|
1042
1075
|
// Trigger-carried axes — same wiring as dialog, same reason.
|
|
1043
1076
|
variants: { color: btnColors(), size: btnSizes },
|
|
1077
|
+
// The btn paddings, restated physically — see `lynxBtnPad` (#1084).
|
|
1078
|
+
targets: {
|
|
1079
|
+
lynx: {
|
|
1080
|
+
parts: {
|
|
1081
|
+
trigger: { base: lynxBtnPad(4) },
|
|
1082
|
+
close: { base: lynxBtnPad(3) },
|
|
1083
|
+
},
|
|
1084
|
+
variants: { size: lynxBtnSizes('trigger') },
|
|
1085
|
+
},
|
|
1086
|
+
},
|
|
1044
1087
|
};
|
|
1045
1088
|
|
|
1046
1089
|
export const tooltip: RecipeInput = {
|
|
@@ -1077,6 +1120,13 @@ export const tooltip: RecipeInput = {
|
|
|
1077
1120
|
// Trigger-carried axes — same wiring as dialog, same reason. The bubble
|
|
1078
1121
|
// stays daisy's neutral tooltip whatever the trigger's colour.
|
|
1079
1122
|
variants: { color: btnColors(), size: btnSizes },
|
|
1123
|
+
// The btn paddings, restated physically — see `lynxBtnPad` (#1084).
|
|
1124
|
+
targets: {
|
|
1125
|
+
lynx: {
|
|
1126
|
+
parts: { trigger: { base: lynxBtnPad(4) } },
|
|
1127
|
+
variants: { size: lynxBtnSizes('trigger') },
|
|
1128
|
+
},
|
|
1129
|
+
},
|
|
1080
1130
|
};
|
|
1081
1131
|
|
|
1082
1132
|
// daisy "menu in a dropdown" look.
|
|
@@ -1223,6 +1273,13 @@ export const menu: RecipeInput = {
|
|
|
1223
1273
|
// Trigger-carried axes — same wiring as dialog, same reason. The dropdown
|
|
1224
1274
|
// and its items are top-layer siblings the donut cannot reach.
|
|
1225
1275
|
variants: { color: btnColors(), size: btnSizes },
|
|
1276
|
+
// The btn paddings, restated physically — see `lynxBtnPad` (#1084).
|
|
1277
|
+
targets: {
|
|
1278
|
+
lynx: {
|
|
1279
|
+
parts: { trigger: { base: lynxBtnPad(4) } },
|
|
1280
|
+
variants: { size: lynxBtnSizes('trigger') },
|
|
1281
|
+
},
|
|
1282
|
+
},
|
|
1226
1283
|
};
|
|
1227
1284
|
|
|
1228
1285
|
export const field: RecipeInput = {
|
|
@@ -1510,7 +1567,23 @@ export const checkbox: RecipeInput = {
|
|
|
1510
1567
|
// The tick's fill: the control's `color:` names
|
|
1511
1568
|
// `--checkbox-on-accent`, and `currentColor` was that
|
|
1512
1569
|
// ink by inheritance — spend it directly.
|
|
1513
|
-
|
|
1570
|
+
//
|
|
1571
|
+
// The tick's motion, restated as `transform`: the
|
|
1572
|
+
// standalone `rotate`/`translate` properties resolve on
|
|
1573
|
+
// iOS but not on Android (measured, signalxjs/lynx#1084),
|
|
1574
|
+
// so the emitter refuses them. `transform` functions are
|
|
1575
|
+
// proven on both platforms — and the transition follows
|
|
1576
|
+
// the property that now moves.
|
|
1577
|
+
base: {
|
|
1578
|
+
backgroundColor: 'var(--checkbox-on-accent)',
|
|
1579
|
+
transform: 'rotate(45deg)',
|
|
1580
|
+
transition: 'clip-path var(--duration-slow) var(--ease-standard) var(--duration-instant), '
|
|
1581
|
+
+ 'opacity var(--duration-instant) var(--ease-standard) var(--duration-instant), '
|
|
1582
|
+
+ 'transform var(--duration-slow) var(--ease-standard) var(--duration-instant)',
|
|
1583
|
+
},
|
|
1584
|
+
// The order matches the standalone properties' fixed
|
|
1585
|
+
// apply order (translate, then rotate).
|
|
1586
|
+
states: { indeterminate: { transform: 'translateY(-35%) rotate(0deg)' } },
|
|
1514
1587
|
},
|
|
1515
1588
|
},
|
|
1516
1589
|
},
|
|
@@ -1762,6 +1835,18 @@ export const progress: RecipeInput = {
|
|
|
1762
1835
|
// other way.
|
|
1763
1836
|
'zero-daisy-indeterminate': 'from { margin-inline-start: -40%; } to { margin-inline-start: 100%; }',
|
|
1764
1837
|
},
|
|
1838
|
+
// The same sweep with a physical margin: logical spellings resolve on
|
|
1839
|
+
// iOS but not on Android (measured, signalxjs/lynx#1084), so the emitter
|
|
1840
|
+
// refuses the shared keyframes. Physical is the lynx target's norm — no
|
|
1841
|
+
// RTL flow there for the sweep to mirror with. Keyframes merge per name,
|
|
1842
|
+
// so this REPLACES the shared animation on lynx.
|
|
1843
|
+
targets: {
|
|
1844
|
+
lynx: {
|
|
1845
|
+
keyframes: {
|
|
1846
|
+
'zero-daisy-indeterminate': 'from { margin-left: -40%; } to { margin-left: 100%; }',
|
|
1847
|
+
},
|
|
1848
|
+
},
|
|
1849
|
+
},
|
|
1765
1850
|
};
|
|
1766
1851
|
|
|
1767
1852
|
export const slider: RecipeInput = {
|
|
@@ -1887,6 +1972,22 @@ export const slider: RecipeInput = {
|
|
|
1887
1972
|
targets: {
|
|
1888
1973
|
lynx: {
|
|
1889
1974
|
parts: {
|
|
1975
|
+
track: {
|
|
1976
|
+
// The web track's `margin-block` breathing room,
|
|
1977
|
+
// restated physically: logical spellings resolve on iOS
|
|
1978
|
+
// but not on Android (measured, signalxjs/lynx#1084), so
|
|
1979
|
+
// the emitter refuses them. Physical is the lynx
|
|
1980
|
+
// target's norm — no RTL flow there.
|
|
1981
|
+
base: {
|
|
1982
|
+
marginTop: 'calc(var(--size-selector) * 1.5)',
|
|
1983
|
+
marginBottom: 'calc(var(--size-selector) * 1.5)',
|
|
1984
|
+
},
|
|
1985
|
+
},
|
|
1986
|
+
mark: {
|
|
1987
|
+
// Same #1084 verdict: the tick labels hang below the
|
|
1988
|
+
// track off a physical padding.
|
|
1989
|
+
base: { paddingTop: 'calc(var(--size-selector) * 2 + var(--space-2xs))' },
|
|
1990
|
+
},
|
|
1890
1991
|
range: {
|
|
1891
1992
|
// The web fill deepens the accent 90/10 toward
|
|
1892
1993
|
// base-content (`progressFill`'s recipe); the plain
|
|
@@ -1910,9 +2011,20 @@ export const slider: RecipeInput = {
|
|
|
1910
2011
|
// thumb — a native-input trick with no lynx equivalent;
|
|
1911
2012
|
// the composed `.zx-slider__range` box above IS that
|
|
1912
2013
|
// fill here, so the knob only needs its own two paints.
|
|
2014
|
+
//
|
|
2015
|
+
// The centering geometry is restated physically beside
|
|
2016
|
+
// the paint: `inset-block-start`/`translate`/
|
|
2017
|
+
// `margin-inline-start` resolve on iOS but not on
|
|
2018
|
+
// Android (measured, signalxjs/lynx#1084 — the knob sat
|
|
2019
|
+
// off-center there), so the emitter refuses them.
|
|
2020
|
+
// `top` + `transform: translateY()` + `margin-left` are
|
|
2021
|
+
// proven on both platforms.
|
|
1913
2022
|
base: {
|
|
1914
2023
|
background: 'var(--color-base-100)',
|
|
1915
2024
|
border: '0.25rem solid var(--slider-accent)',
|
|
2025
|
+
top: '50%',
|
|
2026
|
+
transform: 'translateY(-50%)',
|
|
2027
|
+
marginLeft: 'calc(var(--size-selector) * -2.5)',
|
|
1916
2028
|
},
|
|
1917
2029
|
},
|
|
1918
2030
|
},
|
|
@@ -2133,6 +2245,17 @@ export const select: RecipeInput = {
|
|
|
2133
2245
|
// Base equals the default (`tokens:` accent, `fieldControl`'s md height),
|
|
2134
2246
|
// so the twins restate it; declared for the manifest (signalxjs/lynx#1070).
|
|
2135
2247
|
defaultVariants: { color: 'primary', size: 'md' },
|
|
2248
|
+
// The btn paddings, restated physically — see `lynxBtnPad` (#1084).
|
|
2249
|
+
// The trigger ramp restates `md` too (unlike `btnSizes`), so its lynx
|
|
2250
|
+
// counterpart does as well.
|
|
2251
|
+
targets: {
|
|
2252
|
+
lynx: {
|
|
2253
|
+
parts: { trigger: { base: lynxBtnPad(4) } },
|
|
2254
|
+
variants: {
|
|
2255
|
+
size: { ...lynxBtnSizes('trigger'), md: { trigger: { base: lynxBtnPad(4) } } },
|
|
2256
|
+
},
|
|
2257
|
+
},
|
|
2258
|
+
},
|
|
2136
2259
|
};
|
|
2137
2260
|
|
|
2138
2261
|
|
|
@@ -2362,6 +2485,17 @@ export const button: RecipeInput = {
|
|
|
2362
2485
|
},
|
|
2363
2486
|
defaultVariants: { color: 'primary', variant: 'solid', size: 'md' },
|
|
2364
2487
|
keyframes: { 'zero-daisyui-btn-spin': 'to { transform: rotate(360deg) }' },
|
|
2488
|
+
// The icon chips' zeroed inline padding, restated physically: logical
|
|
2489
|
+
// spellings resolve on iOS but not on Android (measured,
|
|
2490
|
+
// signalxjs/lynx#1084), so the emitter refuses them.
|
|
2491
|
+
targets: {
|
|
2492
|
+
lynx: {
|
|
2493
|
+
modifiers: {
|
|
2494
|
+
square: { root: { base: { paddingLeft: '0', paddingRight: '0' } } },
|
|
2495
|
+
circle: { root: { base: { paddingLeft: '0', paddingRight: '0' } } },
|
|
2496
|
+
},
|
|
2497
|
+
},
|
|
2498
|
+
},
|
|
2365
2499
|
};
|
|
2366
2500
|
|
|
2367
2501
|
export const avatar: RecipeInput = {
|
|
@@ -2589,6 +2723,24 @@ export const toast: RecipeInput = {
|
|
|
2589
2723
|
// signalxjs/lynx#1070. No `color` default: the un-attributed toast is a
|
|
2590
2724
|
// neutral base-200 surface, outside the color vocabulary.
|
|
2591
2725
|
defaultVariants: { size: 'md' },
|
|
2726
|
+
// The corner placements' physical anchors: logical inset spellings
|
|
2727
|
+
// resolve on iOS but not on Android (measured, signalxjs/lynx#1084), so
|
|
2728
|
+
// the emitter refuses them. Physical is the lynx target's norm — no RTL
|
|
2729
|
+
// flow there, so `start` IS left and `end` IS right.
|
|
2730
|
+
targets: {
|
|
2731
|
+
lynx: {
|
|
2732
|
+
parts: {
|
|
2733
|
+
viewport: {
|
|
2734
|
+
selectors: {
|
|
2735
|
+
'&[data-placement="top-start"]': { left: '0' },
|
|
2736
|
+
'&[data-placement="top-end"]': { right: '0' },
|
|
2737
|
+
'&[data-placement="bottom-start"]': { left: '0' },
|
|
2738
|
+
'&[data-placement="bottom-end"]': { right: '0' },
|
|
2739
|
+
},
|
|
2740
|
+
},
|
|
2741
|
+
},
|
|
2742
|
+
},
|
|
2743
|
+
},
|
|
2592
2744
|
};
|
|
2593
2745
|
|
|
2594
2746
|
export const combobox: RecipeInput = {
|
|
@@ -3071,6 +3223,17 @@ export const numberInput: RecipeInput = {
|
|
|
3071
3223
|
xl: { control: { base: { height: fieldHeight('xl') } }, input: { base: { fontSize: 'var(--text-lg)', padding: 'var(--space-lg) var(--space-xl)' } } },
|
|
3072
3224
|
},
|
|
3073
3225
|
},
|
|
3226
|
+
// The steppers' inline padding, restated physically: logical spellings
|
|
3227
|
+
// resolve on iOS but not on Android (measured, signalxjs/lynx#1084), so
|
|
3228
|
+
// the emitter refuses them.
|
|
3229
|
+
targets: {
|
|
3230
|
+
lynx: {
|
|
3231
|
+
parts: {
|
|
3232
|
+
'increment-trigger': { base: { paddingLeft: 'var(--space-lg)', paddingRight: 'var(--space-lg)' } },
|
|
3233
|
+
'decrement-trigger': { base: { paddingLeft: 'var(--space-lg)', paddingRight: 'var(--space-lg)' } },
|
|
3234
|
+
},
|
|
3235
|
+
},
|
|
3236
|
+
},
|
|
3074
3237
|
};
|
|
3075
3238
|
|
|
3076
3239
|
/**
|
|
@@ -3368,6 +3531,16 @@ export const treeView: RecipeInput = {
|
|
|
3368
3531
|
xl: { root: { base: { '--tree-text': 'var(--text-lg)' } } },
|
|
3369
3532
|
},
|
|
3370
3533
|
},
|
|
3534
|
+
// The indent, restated physically: logical spellings resolve on iOS but
|
|
3535
|
+
// not on Android (measured, signalxjs/lynx#1084), so the emitter refuses
|
|
3536
|
+
// them. Physical is the lynx target's norm — no RTL flow there.
|
|
3537
|
+
targets: {
|
|
3538
|
+
lynx: {
|
|
3539
|
+
parts: {
|
|
3540
|
+
'branch-content': { base: { paddingLeft: 'var(--space-lg)' } },
|
|
3541
|
+
},
|
|
3542
|
+
},
|
|
3543
|
+
},
|
|
3371
3544
|
};
|
|
3372
3545
|
|
|
3373
3546
|
/**
|
|
@@ -3590,6 +3763,26 @@ export const nativeSelect: RecipeInput = {
|
|
|
3590
3763
|
xl: { control: { base: { height: fieldHeight('xl'), fontSize: 'var(--text-lg)', padding: 'var(--space-lg) var(--space-xl)', paddingInlineEnd: 'calc(var(--space-xl) + 1.25em)' } } },
|
|
3591
3764
|
},
|
|
3592
3765
|
},
|
|
3766
|
+
// The chevron gutter and the indicator anchor, restated physically:
|
|
3767
|
+
// logical spellings resolve on iOS but not on Android (measured,
|
|
3768
|
+
// signalxjs/lynx#1084), so the emitter refuses them. Physical is the
|
|
3769
|
+
// lynx target's norm — no RTL flow there, so `end` IS right.
|
|
3770
|
+
targets: {
|
|
3771
|
+
lynx: {
|
|
3772
|
+
parts: {
|
|
3773
|
+
control: { base: { paddingRight: 'calc(var(--space-md) + 1.25em)' } },
|
|
3774
|
+
indicator: { base: { right: 'var(--space-md)' } },
|
|
3775
|
+
},
|
|
3776
|
+
variants: {
|
|
3777
|
+
size: {
|
|
3778
|
+
xs: { control: { base: { paddingRight: 'calc(var(--space-xs) + 1.25em)' } } },
|
|
3779
|
+
sm: { control: { base: { paddingRight: 'calc(var(--space-sm) + 1.25em)' } } },
|
|
3780
|
+
lg: { control: { base: { paddingRight: 'calc(var(--space-lg) + 1.25em)' } } },
|
|
3781
|
+
xl: { control: { base: { paddingRight: 'calc(var(--space-xl) + 1.25em)' } } },
|
|
3782
|
+
},
|
|
3783
|
+
},
|
|
3784
|
+
},
|
|
3785
|
+
},
|
|
3593
3786
|
};
|
|
3594
3787
|
|
|
3595
3788
|
// ── Content tier (#311) ───────────────────────────────────────────────────
|
|
@@ -4063,6 +4256,30 @@ export const indicator: RecipeInput = {
|
|
|
4063
4256
|
xl: { item: { base: { fontSize: 'var(--text-lg)' } } },
|
|
4064
4257
|
},
|
|
4065
4258
|
},
|
|
4259
|
+
// The corner slots, restated physically: logical inset spellings and the
|
|
4260
|
+
// standalone `translate` property resolve on iOS but not on Android
|
|
4261
|
+
// (measured, signalxjs/lynx#1084), so the emitter refuses them. Physical
|
|
4262
|
+
// anchors plus `transform: translate()` are proven on both platforms,
|
|
4263
|
+
// and physical is the lynx target's norm — no RTL flow there, so the
|
|
4264
|
+
// hand-flipped RTL rules above have nothing to engage with either.
|
|
4265
|
+
targets: {
|
|
4266
|
+
lynx: {
|
|
4267
|
+
parts: {
|
|
4268
|
+
item: {
|
|
4269
|
+
selectors: {
|
|
4270
|
+
'&[data-placement="top-start"]': { top: '0', left: '0', transform: 'translate(-50%, -50%)' },
|
|
4271
|
+
'&[data-placement="top"]': { top: '0', left: '50%', transform: 'translate(-50%, -50%)' },
|
|
4272
|
+
'&[data-placement="top-end"]': { top: '0', right: '0', transform: 'translate(50%, -50%)' },
|
|
4273
|
+
'&[data-placement="start"]': { top: '50%', left: '0', transform: 'translate(-50%, -50%)' },
|
|
4274
|
+
'&[data-placement="end"]': { top: '50%', right: '0', transform: 'translate(50%, -50%)' },
|
|
4275
|
+
'&[data-placement="bottom-start"]': { bottom: '0', left: '0', transform: 'translate(-50%, 50%)' },
|
|
4276
|
+
'&[data-placement="bottom"]': { bottom: '0', left: '50%', transform: 'translate(-50%, 50%)' },
|
|
4277
|
+
'&[data-placement="bottom-end"]': { bottom: '0', right: '0', transform: 'translate(50%, 50%)' },
|
|
4278
|
+
},
|
|
4279
|
+
},
|
|
4280
|
+
},
|
|
4281
|
+
},
|
|
4282
|
+
},
|
|
4066
4283
|
};
|
|
4067
4284
|
|
|
4068
4285
|
/** daisy stats: the rounded base-100 panel with rule-thin item joins. */
|
|
@@ -4383,6 +4600,16 @@ export const chat: RecipeInput = {
|
|
|
4383
4600
|
xl: { bubble: { base: { fontSize: 'var(--text-lg)', padding: 'var(--space-md) var(--space-xl)' } } },
|
|
4384
4601
|
},
|
|
4385
4602
|
},
|
|
4603
|
+
// The row's vertical padding, restated physically: logical spellings
|
|
4604
|
+
// resolve on iOS but not on Android (measured, signalxjs/lynx#1084), so
|
|
4605
|
+
// the emitter refuses them.
|
|
4606
|
+
targets: {
|
|
4607
|
+
lynx: {
|
|
4608
|
+
parts: {
|
|
4609
|
+
root: { base: { paddingTop: 'var(--space-2xs)', paddingBottom: 'var(--space-2xs)' } },
|
|
4610
|
+
},
|
|
4611
|
+
},
|
|
4612
|
+
},
|
|
4386
4613
|
};
|
|
4387
4614
|
|
|
4388
4615
|
/** daisy radial-progress: --value became --progress-percent; same ring. */
|
|
@@ -4839,6 +5066,16 @@ export const pagination: RecipeInput = {
|
|
|
4839
5066
|
xl: { root: { base: { '--pg-size': 'calc(var(--size-field) * 14)', '--pg-font': 'var(--text-lg)' } } },
|
|
4840
5067
|
},
|
|
4841
5068
|
},
|
|
5069
|
+
// The cell's inline padding, restated physically: logical spellings
|
|
5070
|
+
// resolve on iOS but not on Android (measured, signalxjs/lynx#1084), so
|
|
5071
|
+
// the emitter refuses them.
|
|
5072
|
+
targets: {
|
|
5073
|
+
lynx: {
|
|
5074
|
+
parts: {
|
|
5075
|
+
item: { base: { paddingLeft: 'var(--space-2xs)', paddingRight: 'var(--space-2xs)' } },
|
|
5076
|
+
},
|
|
5077
|
+
},
|
|
5078
|
+
},
|
|
4842
5079
|
};
|
|
4843
5080
|
|
|
4844
5081
|
/**
|
|
@@ -4986,6 +5223,34 @@ export const steps: RecipeInput = {
|
|
|
4986
5223
|
xl: { root: { base: { '--steps-ind': 'calc(var(--size-selector) * 9)', '--steps-font': 'var(--text-md)' } } },
|
|
4987
5224
|
},
|
|
4988
5225
|
},
|
|
5226
|
+
// The bridge's anchors and the vertical item's tail padding, restated
|
|
5227
|
+
// physically: logical spellings resolve on iOS but not on Android
|
|
5228
|
+
// (measured, signalxjs/lynx#1084), so the emitter refuses them. Physical
|
|
5229
|
+
// is the lynx target's norm — no RTL flow there to mirror with.
|
|
5230
|
+
targets: {
|
|
5231
|
+
lynx: {
|
|
5232
|
+
parts: {
|
|
5233
|
+
item: {
|
|
5234
|
+
selectors: {
|
|
5235
|
+
'&[data-orientation="vertical"]': { paddingBottom: 'var(--space-lg)' },
|
|
5236
|
+
},
|
|
5237
|
+
},
|
|
5238
|
+
separator: {
|
|
5239
|
+
selectors: {
|
|
5240
|
+
'&[data-orientation="horizontal"]': {
|
|
5241
|
+
top: 'calc(var(--space-xs) + var(--steps-ind) / 2)',
|
|
5242
|
+
left: '50%',
|
|
5243
|
+
},
|
|
5244
|
+
'&[data-orientation="vertical"]': {
|
|
5245
|
+
left: 'calc(var(--space-xs) + (var(--steps-ind) - var(--border)) / 2)',
|
|
5246
|
+
top: 'calc(var(--space-xs) + var(--steps-ind))',
|
|
5247
|
+
bottom: 'calc(var(--space-xs) * -1)',
|
|
5248
|
+
},
|
|
5249
|
+
},
|
|
5250
|
+
},
|
|
5251
|
+
},
|
|
5252
|
+
},
|
|
5253
|
+
},
|
|
4989
5254
|
};
|
|
4990
5255
|
|
|
4991
5256
|
/**
|
|
@@ -5059,6 +5324,16 @@ export const drawer: RecipeInput = {
|
|
|
5059
5324
|
// Trigger-carried axes — see `btnColors` for why the panel is out of
|
|
5060
5325
|
// reach and the trigger is the whole story here.
|
|
5061
5326
|
variants: { color: btnColors(), size: btnSizes },
|
|
5327
|
+
// The btn paddings, restated physically — see `lynxBtnPad` (#1084).
|
|
5328
|
+
targets: {
|
|
5329
|
+
lynx: {
|
|
5330
|
+
parts: {
|
|
5331
|
+
trigger: { base: lynxBtnPad(4) },
|
|
5332
|
+
close: { base: lynxBtnPad(4) },
|
|
5333
|
+
},
|
|
5334
|
+
variants: { size: lynxBtnSizes('trigger') },
|
|
5335
|
+
},
|
|
5336
|
+
},
|
|
5062
5337
|
};
|
|
5063
5338
|
|
|
5064
5339
|
/**
|
|
@@ -5449,6 +5724,22 @@ export const carousel: RecipeInput = {
|
|
|
5449
5724
|
xl: { root: { base: { '--carousel-dot': '0.875rem', '--carousel-nav': '3rem' } } },
|
|
5450
5725
|
},
|
|
5451
5726
|
},
|
|
5727
|
+
// The nav buttons' anchors, restated physically: logical inset
|
|
5728
|
+
// spellings resolve on iOS but not on Android (measured,
|
|
5729
|
+
// signalxjs/lynx#1084), so the emitter refuses them. Physical is the
|
|
5730
|
+
// lynx target's norm — no RTL flow there, so `start` IS left.
|
|
5731
|
+
targets: {
|
|
5732
|
+
lynx: {
|
|
5733
|
+
parts: {
|
|
5734
|
+
'prev-trigger': {
|
|
5735
|
+
base: { top: 'calc(50% - var(--carousel-nav) / 2)', left: 'var(--space-sm)' },
|
|
5736
|
+
},
|
|
5737
|
+
'next-trigger': {
|
|
5738
|
+
base: { top: 'calc(50% - var(--carousel-nav) / 2)', right: 'var(--space-sm)' },
|
|
5739
|
+
},
|
|
5740
|
+
},
|
|
5741
|
+
},
|
|
5742
|
+
},
|
|
5452
5743
|
};
|
|
5453
5744
|
|
|
5454
5745
|
/**
|
|
@@ -5693,6 +5984,21 @@ export const diff: RecipeInput = {
|
|
|
5693
5984
|
},
|
|
5694
5985
|
},
|
|
5695
5986
|
},
|
|
5987
|
+
// The reveal pane's pin and the handle's centering margin, restated
|
|
5988
|
+
// physically: logical spellings resolve on iOS but not on Android
|
|
5989
|
+
// (measured, signalxjs/lynx#1084), so the emitter refuses them.
|
|
5990
|
+
// Physical is the lynx target's norm — no RTL flow there to mirror
|
|
5991
|
+
// with.
|
|
5992
|
+
lynx: {
|
|
5993
|
+
parts: {
|
|
5994
|
+
after: {
|
|
5995
|
+
base: { top: '0', bottom: '0', left: '0' },
|
|
5996
|
+
},
|
|
5997
|
+
handle: {
|
|
5998
|
+
base: { top: '0', bottom: '0', marginLeft: 'calc(var(--diff-hit) / -2)' },
|
|
5999
|
+
},
|
|
6000
|
+
},
|
|
6001
|
+
},
|
|
5696
6002
|
},
|
|
5697
6003
|
};
|
|
5698
6004
|
|