zyzz 0.0.33 → 0.0.35
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/binding/compiler.wasm +0 -0
- package/binding/wasi/zyzz.wasm32-wasi.wasm +0 -0
- package/binding/zyzz.darwin-arm64.node +0 -0
- package/binding/zyzz.darwin-x64.node +0 -0
- package/binding/zyzz.linux-arm64-gnu.node +0 -0
- package/binding/zyzz.linux-arm64-musl.node +0 -0
- package/binding/zyzz.linux-x64-gnu.node +0 -0
- package/binding/zyzz.linux-x64-musl.node +0 -0
- package/binding/zyzz.win32-arm64-msvc.node +0 -0
- package/binding/zyzz.win32-x64-msvc.node +0 -0
- package/dist/Style.d.ts +1 -1
- package/dist/Style.d.ts.map +1 -1
- package/dist/Style.js.map +1 -1
- package/dist/Vars.d.ts +17 -11
- package/dist/Vars.d.ts.map +1 -1
- package/dist/Vars.js.map +1 -1
- package/dist/babel/index.d.ts.map +1 -1
- package/dist/babel/index.js +10 -1
- package/dist/babel/index.js.map +1 -1
- package/dist/base-ui/react/Config.d.ts +48 -0
- package/dist/base-ui/react/Config.d.ts.map +1 -0
- package/dist/base-ui/react/Config.js +30 -0
- package/dist/base-ui/react/Config.js.map +1 -0
- package/dist/base-ui/react/Style.d.ts +47 -0
- package/dist/base-ui/react/Style.d.ts.map +1 -0
- package/dist/base-ui/react/Style.js +12 -0
- package/dist/base-ui/react/Style.js.map +1 -0
- package/dist/base-ui/react/index.d.ts +13 -0
- package/dist/base-ui/react/index.d.ts.map +1 -0
- package/dist/base-ui/react/index.js +13 -0
- package/dist/base-ui/react/index.js.map +1 -0
- package/dist/base-ui/react/internal/Attributes.generated.d.ts +372 -0
- package/dist/base-ui/react/internal/Attributes.generated.d.ts.map +1 -0
- package/dist/base-ui/react/internal/Attributes.generated.js +403 -0
- package/dist/base-ui/react/internal/Attributes.generated.js.map +1 -0
- package/dist/base-ui/react/internal/Authoring.d.ts +9 -0
- package/dist/base-ui/react/internal/Authoring.d.ts.map +1 -0
- package/dist/base-ui/react/internal/Authoring.js +139 -0
- package/dist/base-ui/react/internal/Authoring.js.map +1 -0
- package/dist/base-ui/react/internal/Types.generated.d.ts +18933 -0
- package/dist/base-ui/react/internal/Types.generated.d.ts.map +1 -0
- package/dist/base-ui/react/internal/Types.generated.js +2 -0
- package/dist/base-ui/react/internal/Types.generated.js.map +1 -0
- package/dist/binding/compiler.wasm +0 -0
- package/dist/compiler/Graph.d.ts +1 -1
- package/dist/compiler/Graph.d.ts.map +1 -1
- package/dist/compiler/internal/Modules.d.ts +33 -0
- package/dist/compiler/internal/Modules.d.ts.map +1 -0
- package/dist/compiler/internal/Modules.js +56 -0
- package/dist/compiler/internal/Modules.js.map +1 -0
- package/dist/compiler/internal/Results.d.ts +2 -26
- package/dist/compiler/internal/Results.d.ts.map +1 -1
- package/dist/compiler/internal/Results.js +4 -57
- package/dist/compiler/internal/Results.js.map +1 -1
- package/dist/compiler/wasm/Graph.d.ts +70 -0
- package/dist/compiler/wasm/Graph.d.ts.map +1 -0
- package/dist/compiler/wasm/Graph.js +70 -0
- package/dist/compiler/wasm/Graph.js.map +1 -0
- package/dist/compiler/wasm/index.d.ts +8 -0
- package/dist/compiler/wasm/index.d.ts.map +1 -0
- package/dist/compiler/wasm/index.js +8 -0
- package/dist/compiler/wasm/index.js.map +1 -0
- package/dist/default.js.zyzz.json +1 -1
- package/dist/internal/Configuration.d.ts +2 -1
- package/dist/internal/Configuration.d.ts.map +1 -1
- package/dist/internal/Configuration.js.map +1 -1
- package/dist/internal/Value.d.ts +4 -0
- package/dist/internal/Value.d.ts.map +1 -1
- package/dist/internal/Value.js.map +1 -1
- package/dist/internal/VariableSets.d.ts.map +1 -1
- package/dist/internal/VariableSets.js +16 -0
- package/dist/internal/VariableSets.js.map +1 -1
- package/dist/internal/Wasm.d.ts +7 -5
- package/dist/internal/Wasm.d.ts.map +1 -1
- package/dist/internal/Wasm.js +19 -7
- package/dist/internal/Wasm.js.map +1 -1
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +9 -1
- package/dist/vite/index.js.map +1 -1
- package/dist/web/internal/Wasm.generated.d.ts.map +1 -1
- package/dist/web/internal/Wasm.generated.js +1 -1
- package/dist/web/internal/Wasm.generated.js.map +1 -1
- package/package.json +20 -1
- package/src/Style.ts +4 -1
- package/src/Vars.ts +41 -21
- package/src/babel/index.ts +13 -1
- package/src/base-ui/react/Config.ts +74 -0
- package/src/base-ui/react/Style.ts +109 -0
- package/src/base-ui/react/index.ts +12 -0
- package/src/base-ui/react/internal/Attributes.generated.ts +403 -0
- package/src/base-ui/react/internal/Authoring.ts +173 -0
- package/src/base-ui/react/internal/Catalog.generated.ts +8088 -0
- package/src/base-ui/react/internal/Types.generated.ts +19016 -0
- package/src/compiler/Graph.ts +1 -1
- package/src/compiler/internal/Modules.ts +94 -0
- package/src/compiler/internal/Results.ts +6 -91
- package/src/compiler/wasm/Graph.ts +178 -0
- package/src/compiler/wasm/index.ts +7 -0
- package/src/internal/Configuration.ts +4 -1
- package/src/internal/Value.ts +5 -0
- package/src/internal/VariableSets.ts +22 -0
- package/src/internal/Wasm.ts +22 -7
- package/src/vite/index.ts +12 -1
- package/src/web/internal/Wasm.generated.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Wasm.generated.js","sourceRoot":"","sources":["../../../src/web/internal/Wasm.generated.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,mDAAmD;AACnD,MAAM,CAAC,MAAM,MAAM,GAAW,
|
|
1
|
+
{"version":3,"file":"Wasm.generated.js","sourceRoot":"","sources":["../../../src/web/internal/Wasm.generated.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,mDAAmD;AACnD,MAAM,CAAC,MAAM,MAAM,GAAW,sx/5BAAsx/5B,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zyzz",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.35",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Modern, universal, simple styling library for the Web and React Native",
|
|
6
6
|
"homepage": "https://zyzz.style",
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"main": "./dist/index.js",
|
|
28
28
|
"files": [
|
|
29
29
|
"binding/*.node",
|
|
30
|
+
"binding/compiler.wasm",
|
|
30
31
|
"binding/wasi/wasi-worker.mjs",
|
|
31
32
|
"binding/wasi/zyzz.wasi.cjs",
|
|
32
33
|
"binding/wasi/zyzz.wasm32-wasi.wasm",
|
|
@@ -76,11 +77,25 @@
|
|
|
76
77
|
"types": "./dist/babel/index.d.ts",
|
|
77
78
|
"default": "./dist/babel/index.js"
|
|
78
79
|
},
|
|
80
|
+
"./base-ui/react": {
|
|
81
|
+
"src": "./src/base-ui/react/index.ts",
|
|
82
|
+
"types": "./dist/base-ui/react/index.d.ts",
|
|
83
|
+
"default": "./dist/base-ui/react/index.js"
|
|
84
|
+
},
|
|
79
85
|
"./compiler": {
|
|
80
86
|
"src": "./src/compiler/index.ts",
|
|
81
87
|
"types": "./dist/compiler/index.d.ts",
|
|
82
88
|
"default": "./dist/compiler/index.js"
|
|
83
89
|
},
|
|
90
|
+
"./compiler.wasm": {
|
|
91
|
+
"src": "./binding/compiler.wasm",
|
|
92
|
+
"default": "./dist/binding/compiler.wasm"
|
|
93
|
+
},
|
|
94
|
+
"./compiler/wasm": {
|
|
95
|
+
"src": "./src/compiler/wasm/index.ts",
|
|
96
|
+
"types": "./dist/compiler/wasm/index.d.ts",
|
|
97
|
+
"default": "./dist/compiler/wasm/index.js"
|
|
98
|
+
},
|
|
84
99
|
"./default": {
|
|
85
100
|
"src": "./src/default.ts",
|
|
86
101
|
"types": "./dist/default.d.ts",
|
|
@@ -205,6 +220,7 @@
|
|
|
205
220
|
},
|
|
206
221
|
"peerDependencies": {
|
|
207
222
|
"@babel/core": "^7.29.7",
|
|
223
|
+
"@base-ui/react": "1.8.0",
|
|
208
224
|
"next": "^16.3.5",
|
|
209
225
|
"react": "^19.0.0",
|
|
210
226
|
"react-native": ">=0.86.0 <1.0.0",
|
|
@@ -215,6 +231,9 @@
|
|
|
215
231
|
"@babel/core": {
|
|
216
232
|
"optional": true
|
|
217
233
|
},
|
|
234
|
+
"@base-ui/react": {
|
|
235
|
+
"optional": true
|
|
236
|
+
},
|
|
218
237
|
"next": {
|
|
219
238
|
"optional": true
|
|
220
239
|
},
|
package/src/Style.ts
CHANGED
|
@@ -67,7 +67,10 @@ export type Accepted<
|
|
|
67
67
|
: key extends 'typography'
|
|
68
68
|
? literal extends true
|
|
69
69
|
? never
|
|
70
|
-
: Value.Atom<Typography.Names<tokens>>
|
|
70
|
+
: style[key] extends Value.Atom<Typography.Names<tokens>>
|
|
71
|
+
? style[key]
|
|
72
|
+
: // A disjoint literal would reduce the whole object to `never`, so the brand keeps the error on this property.
|
|
73
|
+
Value.Unmatched<Typography.Names<tokens>>
|
|
71
74
|
: key extends keyof Literal.Properties
|
|
72
75
|
? (literal extends true
|
|
73
76
|
? LiteralDeclarations
|
package/src/Vars.ts
CHANGED
|
@@ -39,6 +39,11 @@ export type Values = {
|
|
|
39
39
|
readonly [key: string]: Value | Values | readonly string[]
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
/** Extension values: overrides, additions, and `null` removals of existing paths. */
|
|
43
|
+
export type Changes = {
|
|
44
|
+
readonly [key: string]: Value | Changes | readonly string[] | null
|
|
45
|
+
}
|
|
46
|
+
|
|
42
47
|
/** Immutable references retaining their shared set contract. */
|
|
43
48
|
export type Definition<values extends Values = Values> = (Values extends values
|
|
44
49
|
? {}
|
|
@@ -184,21 +189,25 @@ type Merge<base, derived> = {
|
|
|
184
189
|
}
|
|
185
190
|
|
|
186
191
|
/**
|
|
187
|
-
* Overrides existing leaves
|
|
188
|
-
* alternative set sharing the base's identity; with one,
|
|
189
|
-
* inherited leaves reference the base's variables. Restating a
|
|
190
|
-
* `base.spacing.md` at `spacing.md`, keeps it.
|
|
191
|
-
*
|
|
192
|
+
* Overrides existing leaves, adds new ones, and removes paths set to `null`. Without
|
|
193
|
+
* an id, the extension is an alternative set sharing the base's identity; with one,
|
|
194
|
+
* it is a new set whose inherited leaves reference the base's variables. Restating a
|
|
195
|
+
* base leaf, such as `base.spacing.md` at `spacing.md`, keeps it. A removed path
|
|
196
|
+
* leaves the extension's references and emitted variables, and `null` at a category
|
|
197
|
+
* removes every leaf below it.
|
|
198
|
+
* @throws {InvalidError} If an override changes a domain, an addition replaces a leaf with a category or the reverse, or a removal names a path the base lacks.
|
|
192
199
|
*/
|
|
193
|
-
export function extend<const base extends Values, const values extends
|
|
200
|
+
export function extend<const base extends Values, const values extends Changes>(
|
|
194
201
|
variables: Definition<base>,
|
|
195
202
|
values: values & NoInfer<Extension<base, values>>,
|
|
196
203
|
options?: style.DefinitionOptions,
|
|
197
|
-
):
|
|
204
|
+
): Extended<base, values> extends infer extended extends Values
|
|
205
|
+
? Definition<extended>
|
|
206
|
+
: never
|
|
198
207
|
/** Deeply merges derived leaves over the extended set, rejecting existing paths. */
|
|
199
208
|
export function extend<
|
|
200
209
|
const base extends Values,
|
|
201
|
-
const values extends
|
|
210
|
+
const values extends Changes,
|
|
202
211
|
const derived extends Values,
|
|
203
212
|
>(
|
|
204
213
|
variables: Definition<base>,
|
|
@@ -210,10 +219,13 @@ export function extend<
|
|
|
210
219
|
) => Validated<derived, false, true>
|
|
211
220
|
>,
|
|
212
221
|
options?: style.DefinitionOptions,
|
|
213
|
-
):
|
|
222
|
+
): Extended<Extended<base, values>, derived> extends infer extended extends
|
|
223
|
+
Values
|
|
224
|
+
? Definition<extended>
|
|
225
|
+
: never
|
|
214
226
|
export function extend(
|
|
215
227
|
variables: Definition,
|
|
216
|
-
values:
|
|
228
|
+
values: Changes,
|
|
217
229
|
derive: style.DefinitionOptions | ((vars: References<Values>) => Values) = {},
|
|
218
230
|
options: style.DefinitionOptions = {},
|
|
219
231
|
): Definition {
|
|
@@ -249,9 +261,13 @@ export function extend(
|
|
|
249
261
|
})
|
|
250
262
|
}
|
|
251
263
|
|
|
252
|
-
/** Base values grown by an extension; overridden leaves keep their base types. Unexported so declarations inline it. */
|
|
264
|
+
/** Base values grown by an extension; overridden leaves keep their base types and removed paths drop. Unexported so declarations inline it. */
|
|
253
265
|
type Extended<base, values> = {
|
|
254
|
-
readonly [key in keyof base | keyof values
|
|
266
|
+
readonly [key in keyof base | keyof values as key extends keyof values
|
|
267
|
+
? values[key] extends null
|
|
268
|
+
? never
|
|
269
|
+
: key
|
|
270
|
+
: key]: key extends keyof base
|
|
255
271
|
? key extends keyof values
|
|
256
272
|
? base[key] extends Value
|
|
257
273
|
? base[key]
|
|
@@ -264,20 +280,24 @@ type Extended<base, values> = {
|
|
|
264
280
|
: never
|
|
265
281
|
}
|
|
266
282
|
|
|
267
|
-
/** Compatible overrides at existing
|
|
283
|
+
/** Compatible overrides and `null` removals at existing paths, plus new leaves and categories. */
|
|
268
284
|
type Extension<base, values, typography extends boolean = false> = {
|
|
269
285
|
readonly [key in keyof values]: key extends keyof base
|
|
270
286
|
? base[key] extends Value
|
|
271
|
-
? Conditional<Compatible<Scalar<base[key]>>>
|
|
287
|
+
? Conditional<Compatible<Scalar<base[key]>>> | null
|
|
272
288
|
: base[key] extends readonly string[]
|
|
273
289
|
? readonly string[]
|
|
274
|
-
: values[key] extends
|
|
275
|
-
?
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
290
|
+
: values[key] extends null
|
|
291
|
+
? key extends 'breakpoint' | 'container'
|
|
292
|
+
? never
|
|
293
|
+
: null
|
|
294
|
+
: values[key] extends Value
|
|
295
|
+
? never
|
|
296
|
+
: Extension<
|
|
297
|
+
base[key],
|
|
298
|
+
values[key],
|
|
299
|
+
key extends 'typography' ? true : typography
|
|
300
|
+
>
|
|
281
301
|
: key extends 'containerNames'
|
|
282
302
|
? readonly string[]
|
|
283
303
|
: key extends
|
package/src/babel/index.ts
CHANGED
|
@@ -109,7 +109,8 @@ export function zyzz(
|
|
|
109
109
|
(node.type === 'ExportNamedDeclaration' ||
|
|
110
110
|
node.type === 'ExportAllDeclaration') &&
|
|
111
111
|
node.exportKind !== 'type' &&
|
|
112
|
-
node.source?.value === 'zyzz'
|
|
112
|
+
(node.source?.value === 'zyzz' ||
|
|
113
|
+
node.source?.value === 'zyzz/base-ui/react')
|
|
113
114
|
)
|
|
114
115
|
throw new Error(
|
|
115
116
|
'Zyzz Babel does not support re-exporting authoring helpers. Export compiled style definitions instead.',
|
|
@@ -118,6 +119,16 @@ export function zyzz(
|
|
|
118
119
|
continue
|
|
119
120
|
if (
|
|
120
121
|
node.source.value === 'zyzz/default' ||
|
|
122
|
+
(node.source.value === 'zyzz/base-ui/react' &&
|
|
123
|
+
node.specifiers.some(
|
|
124
|
+
(specifier) =>
|
|
125
|
+
specifier.type === 'ImportNamespaceSpecifier' ||
|
|
126
|
+
(specifier.type === 'ImportSpecifier' &&
|
|
127
|
+
specifier.importKind !== 'type' &&
|
|
128
|
+
(specifier.imported.type === 'Identifier'
|
|
129
|
+
? specifier.imported.name
|
|
130
|
+
: specifier.imported.value) === 'defineConfig'),
|
|
131
|
+
)) ||
|
|
121
132
|
(node.source.value === 'zyzz' &&
|
|
122
133
|
node.specifiers.some(
|
|
123
134
|
(specifier) =>
|
|
@@ -137,6 +148,7 @@ export function zyzz(
|
|
|
137
148
|
(node) =>
|
|
138
149
|
node.type === 'ImportDeclaration' &&
|
|
139
150
|
(node.source.value === 'zyzz' ||
|
|
151
|
+
node.source.value === 'zyzz/base-ui/react' ||
|
|
140
152
|
node.source.value === 'zyzz/default' ||
|
|
141
153
|
node.source.value === 'zyzz/web'),
|
|
142
154
|
)
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/** Binds Base UI state authoring to the ordinary variable configuration. @module */
|
|
2
|
+
import * as Authoring from './internal/Authoring.js'
|
|
3
|
+
import * as Config from '../../Config.js'
|
|
4
|
+
import type * as Shorthands from '../../internal/Shorthands.js'
|
|
5
|
+
import type * as Style from './Style.js'
|
|
6
|
+
import type * as Vars from '../../Vars.js'
|
|
7
|
+
|
|
8
|
+
type Values<options> = options extends { vars: infer values }
|
|
9
|
+
? options extends { defaultVars: infer name extends keyof values }
|
|
10
|
+
? Vars.Extract<values[name]>
|
|
11
|
+
: Vars.Extract<values>
|
|
12
|
+
: {}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Creates configured authoring with component-first Base UI styles.
|
|
16
|
+
* The ordinary variable sets, layers, mappings, shorthands, and recipes are retained.
|
|
17
|
+
* Output is React props. Component-first variants and callbacks are not supported.
|
|
18
|
+
* Pass `tokens` from `zyzz/default` as `vars` to retain default token strings,
|
|
19
|
+
* including inside component states. The unconfigured entrypoint stays token-free.
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* import { defineConfig } from 'zyzz/base-ui/react'
|
|
23
|
+
* import { tokens } from 'zyzz/default'
|
|
24
|
+
*
|
|
25
|
+
* // Share default tokens with ordinary and component-first styles.
|
|
26
|
+
* export const { style, variants, vars } = defineConfig({ id: 'default', vars: tokens })
|
|
27
|
+
* ```
|
|
28
|
+
* @param options - The ordinary defineConfig options, with React output.
|
|
29
|
+
* @returns Configured helpers whose style also accepts imported Base UI parts.
|
|
30
|
+
*/
|
|
31
|
+
export function create<const options extends create.Options = {}>(
|
|
32
|
+
options: Parameters<typeof Config.create<options>>[0] = {} as never,
|
|
33
|
+
): create.ReturnType<options> {
|
|
34
|
+
if ((options as Config.create.Options)?.output === 'html')
|
|
35
|
+
throw new Config.InvalidError(
|
|
36
|
+
'Base UI configuration requires React output.',
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
const config = Config.create<options>(options)
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
...config,
|
|
43
|
+
style: Authoring.bind(config.style as Authoring.bind.Factory),
|
|
44
|
+
} as create.ReturnType<options>
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Configured Base UI authoring contracts. */
|
|
48
|
+
export declare namespace create {
|
|
49
|
+
/** Ordinary configuration constrained to React props. */
|
|
50
|
+
type Options = Config.create.Options & {
|
|
51
|
+
/** Base UI components consume React className and style props. */
|
|
52
|
+
readonly output?: 'react' | undefined
|
|
53
|
+
}
|
|
54
|
+
/** Existing helpers with the component-first static style overload. */
|
|
55
|
+
type ReturnType<options extends Options = {}> = Omit<
|
|
56
|
+
Config.create.ReturnType<options>,
|
|
57
|
+
'style'
|
|
58
|
+
> & {
|
|
59
|
+
/** Authors ordinary styles and component-aware static Base UI declarations. */
|
|
60
|
+
readonly style: Config.create.ReturnType<options>['style'] &
|
|
61
|
+
Style.Factory<
|
|
62
|
+
Vars.Mapped<
|
|
63
|
+
Values<options>,
|
|
64
|
+
options extends { mappings: infer map } ? map : {}
|
|
65
|
+
>,
|
|
66
|
+
options extends { layers: readonly (infer layer extends string)[] }
|
|
67
|
+
? layer
|
|
68
|
+
: never,
|
|
69
|
+
options extends { shorthands: infer map extends Shorthands.Map }
|
|
70
|
+
? map
|
|
71
|
+
: {}
|
|
72
|
+
>
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/** Component-aware static declarations layered over ordinary style overloads. @module */
|
|
2
|
+
import type * as Completion from '../../internal/Completion.js'
|
|
3
|
+
import type * as Condition from '../../internal/Condition.js'
|
|
4
|
+
import type * as Configuration from '../../internal/Configuration.js'
|
|
5
|
+
import type * as Shorthands from '../../internal/Shorthands.js'
|
|
6
|
+
import type * as Theme from '../../internal/Theme.js'
|
|
7
|
+
import type * as Types from './internal/Types.generated.js'
|
|
8
|
+
import * as Authoring from './internal/Authoring.js'
|
|
9
|
+
import { style as rootStyle } from '../../styleFunction.js'
|
|
10
|
+
|
|
11
|
+
type MarkerKeys<marker> = {
|
|
12
|
+
[key in keyof marker]-?: true extends marker[key] ? key : never
|
|
13
|
+
}[keyof marker]
|
|
14
|
+
|
|
15
|
+
type Keys<input> = input extends { readonly [Types.part]?: infer marker }
|
|
16
|
+
? MarkerKeys<marker>
|
|
17
|
+
: never
|
|
18
|
+
|
|
19
|
+
type Identity<component> = component extends (props: infer props) => unknown
|
|
20
|
+
? Extract<Keys<component> | Keys<props>, keyof Types.Parts>
|
|
21
|
+
: never
|
|
22
|
+
|
|
23
|
+
type Hints<
|
|
24
|
+
part extends keyof Types.Parts,
|
|
25
|
+
tokens extends Theme.Tokens,
|
|
26
|
+
> = Completion.Properties<tokens> & {
|
|
27
|
+
readonly selectors?: {
|
|
28
|
+
readonly [selector in keyof Types.Selectors[part]]?: Hints<part, tokens>
|
|
29
|
+
} & Readonly<Record<string, Hints<part, tokens>>>
|
|
30
|
+
readonly states?: Types.States<Hints<part, tokens>>[part]
|
|
31
|
+
} & {
|
|
32
|
+
readonly [key in Condition.Keys<tokens> | Condition.Suggestions]?: Hints<
|
|
33
|
+
part,
|
|
34
|
+
tokens
|
|
35
|
+
>
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
type Body<
|
|
39
|
+
input,
|
|
40
|
+
part extends keyof Types.Parts,
|
|
41
|
+
tokens extends Theme.Tokens,
|
|
42
|
+
layers extends string,
|
|
43
|
+
mappings extends Shorthands.Map,
|
|
44
|
+
> = {
|
|
45
|
+
readonly [key in keyof input]: key extends 'states'
|
|
46
|
+
? {
|
|
47
|
+
readonly [name in keyof input[key]]: name extends keyof Types.States<true>[part]
|
|
48
|
+
? NonNullable<Types.States<true>[part][name]> extends true
|
|
49
|
+
? Body<input[key][name], part, tokens, layers, mappings>
|
|
50
|
+
: {
|
|
51
|
+
readonly [value in keyof input[key][name]]: value extends keyof NonNullable<
|
|
52
|
+
Types.States<true>[part][name]
|
|
53
|
+
>
|
|
54
|
+
? Body<
|
|
55
|
+
input[key][name][value],
|
|
56
|
+
part,
|
|
57
|
+
tokens,
|
|
58
|
+
layers,
|
|
59
|
+
mappings
|
|
60
|
+
>
|
|
61
|
+
: never
|
|
62
|
+
}
|
|
63
|
+
: never
|
|
64
|
+
}
|
|
65
|
+
: key extends 'selectors'
|
|
66
|
+
? {
|
|
67
|
+
readonly [selector in keyof input[key]]: Body<
|
|
68
|
+
input[key][selector],
|
|
69
|
+
part,
|
|
70
|
+
tokens,
|
|
71
|
+
layers,
|
|
72
|
+
mappings
|
|
73
|
+
>
|
|
74
|
+
}
|
|
75
|
+
: key extends
|
|
76
|
+
| Exclude<Condition.Keys<tokens, key>, `@layer${string}`>
|
|
77
|
+
| '@layer'
|
|
78
|
+
| `@layer ${layers}`
|
|
79
|
+
? Body<input[key], part, tokens, layers, mappings>
|
|
80
|
+
: Configuration.Body<Pick<input, key>, tokens, layers, mappings>[key]
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** Component-first static overload. Ordinary style overloads remain available. */
|
|
84
|
+
export type Factory<
|
|
85
|
+
tokens extends Theme.Tokens = {},
|
|
86
|
+
layers extends string = never,
|
|
87
|
+
mappings extends Shorthands.Map = {},
|
|
88
|
+
> = {
|
|
89
|
+
<const component, const input extends Record<string, unknown>>(
|
|
90
|
+
component: component &
|
|
91
|
+
([Identity<NoInfer<component>>] extends [never] ? never : unknown),
|
|
92
|
+
styles: input &
|
|
93
|
+
NoInfer<Body<input, Identity<component>, tokens, layers, mappings>> &
|
|
94
|
+
Hints<Identity<NoInfer<component>>, tokens>,
|
|
95
|
+
options?: rootStyle.DefinitionOptions,
|
|
96
|
+
): rootStyle.ReturnType
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Declares styles for an imported Base UI part, or ordinary token-free styles.
|
|
101
|
+
* Component-first calls accept static objects. `states` checks documented attributes,
|
|
102
|
+
* while `selectors` suggests those attributes and accepts arbitrary CSS selectors.
|
|
103
|
+
* Compilation resolves component imports and emits CSS ahead of time. No component
|
|
104
|
+
* wrapper, registration, or runtime CSS insertion is required.
|
|
105
|
+
* @see https://base-ui.com/react/handbook/styling
|
|
106
|
+
*/
|
|
107
|
+
export const style: typeof rootStyle & Factory = Authoring.bind(
|
|
108
|
+
rootStyle as Authoring.bind.Factory,
|
|
109
|
+
) as typeof rootStyle & Factory
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Opts into typed Base UI states and component-aware selector suggestions.
|
|
3
|
+
* `style` accepts static component-first declarations. `defineConfig` binds that
|
|
4
|
+
* overload to ordinary variable sets and shorthands. CSS is emitted ahead of time.
|
|
5
|
+
* Default token strings are opt-in through `defineConfig({ vars: tokens })`,
|
|
6
|
+
* with `tokens` imported from `zyzz/default`.
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
/** Configures variables and component-aware Base UI style authoring. */
|
|
10
|
+
export { create as defineConfig } from './Config.js'
|
|
11
|
+
/** Authors static states and selectors for an imported Base UI component part. */
|
|
12
|
+
export { style } from './Style.js'
|