zyzz 0.0.20 → 0.0.22

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 (298) hide show
  1. package/Zyzz.podspec +16 -0
  2. package/dist/Style.d.ts +10 -1
  3. package/dist/Style.d.ts.map +1 -1
  4. package/dist/Style.js +1 -5
  5. package/dist/Style.js.map +1 -1
  6. package/dist/babel/NativeJsx.d.ts.map +1 -1
  7. package/dist/babel/NativeJsx.js +204 -12
  8. package/dist/babel/NativeJsx.js.map +1 -1
  9. package/dist/babel/index.d.ts +6 -2
  10. package/dist/babel/index.d.ts.map +1 -1
  11. package/dist/babel/index.js +10 -1
  12. package/dist/babel/index.js.map +1 -1
  13. package/dist/compiler/Graph.d.ts +3 -0
  14. package/dist/compiler/Graph.d.ts.map +1 -1
  15. package/dist/compiler/Graph.js +108 -37
  16. package/dist/compiler/Graph.js.map +1 -1
  17. package/dist/compiler/Native.d.ts +6 -3
  18. package/dist/compiler/Native.d.ts.map +1 -1
  19. package/dist/compiler/Native.js +142 -24
  20. package/dist/compiler/Native.js.map +1 -1
  21. package/dist/compiler/Source.d.ts +6 -0
  22. package/dist/compiler/Source.d.ts.map +1 -1
  23. package/dist/compiler/Source.js +80 -11
  24. package/dist/compiler/Source.js.map +1 -1
  25. package/dist/compiler/Transform.d.ts +4 -1
  26. package/dist/compiler/Transform.d.ts.map +1 -1
  27. package/dist/compiler/Transform.js +32 -46
  28. package/dist/compiler/Transform.js.map +1 -1
  29. package/dist/compiler/internal/Catalogs.d.ts.map +1 -1
  30. package/dist/compiler/internal/Catalogs.js +6 -1
  31. package/dist/compiler/internal/Catalogs.js.map +1 -1
  32. package/dist/compiler/internal/Compositions.d.ts.map +1 -1
  33. package/dist/compiler/internal/Compositions.js +5 -0
  34. package/dist/compiler/internal/Compositions.js.map +1 -1
  35. package/dist/compiler/internal/Configurations.d.ts +2 -0
  36. package/dist/compiler/internal/Configurations.d.ts.map +1 -1
  37. package/dist/compiler/internal/Configurations.js +23 -4
  38. package/dist/compiler/internal/Configurations.js.map +1 -1
  39. package/dist/compiler/internal/Contract.d.ts +4 -1
  40. package/dist/compiler/internal/Contract.d.ts.map +1 -1
  41. package/dist/compiler/internal/Contract.js +97 -151
  42. package/dist/compiler/internal/Contract.js.map +1 -1
  43. package/dist/compiler/internal/Contributions.d.ts.map +1 -1
  44. package/dist/compiler/internal/Contributions.js +8 -4
  45. package/dist/compiler/internal/Contributions.js.map +1 -1
  46. package/dist/compiler/internal/Descriptors.d.ts.map +1 -1
  47. package/dist/compiler/internal/Descriptors.js +11 -2
  48. package/dist/compiler/internal/Descriptors.js.map +1 -1
  49. package/dist/compiler/internal/Dynamic.d.ts +1 -1
  50. package/dist/compiler/internal/Dynamic.d.ts.map +1 -1
  51. package/dist/compiler/internal/Dynamic.js +5 -5
  52. package/dist/compiler/internal/Dynamic.js.map +1 -1
  53. package/dist/compiler/internal/Names.d.ts +5 -0
  54. package/dist/compiler/internal/Names.d.ts.map +1 -0
  55. package/dist/compiler/internal/Names.js +37 -0
  56. package/dist/compiler/internal/Names.js.map +1 -0
  57. package/dist/compiler/internal/NativeBindings.d.ts +24 -26
  58. package/dist/compiler/internal/NativeBindings.d.ts.map +1 -1
  59. package/dist/compiler/internal/NativeBindings.js +61 -8
  60. package/dist/compiler/internal/NativeBindings.js.map +1 -1
  61. package/dist/compiler/internal/NativeMedia.d.ts +14 -0
  62. package/dist/compiler/internal/NativeMedia.d.ts.map +1 -0
  63. package/dist/compiler/internal/NativeMedia.js +287 -0
  64. package/dist/compiler/internal/NativeMedia.js.map +1 -0
  65. package/dist/compiler/internal/NativeVars.d.ts +28 -0
  66. package/dist/compiler/internal/NativeVars.d.ts.map +1 -0
  67. package/dist/compiler/internal/NativeVars.js +157 -0
  68. package/dist/compiler/internal/NativeVars.js.map +1 -0
  69. package/dist/compiler/internal/PackedStyles.d.ts +2 -0
  70. package/dist/compiler/internal/PackedStyles.d.ts.map +1 -1
  71. package/dist/compiler/internal/PackedStyles.js +2 -0
  72. package/dist/compiler/internal/PackedStyles.js.map +1 -1
  73. package/dist/compiler/internal/Selectors.d.ts +1 -1
  74. package/dist/compiler/internal/Selectors.d.ts.map +1 -1
  75. package/dist/compiler/internal/Selectors.js +5 -2
  76. package/dist/compiler/internal/Selectors.js.map +1 -1
  77. package/dist/compiler/internal/Stylesheets.js +2 -2
  78. package/dist/compiler/internal/Stylesheets.js.map +1 -1
  79. package/dist/compiler/internal/Themes.d.ts +22 -1
  80. package/dist/compiler/internal/Themes.d.ts.map +1 -1
  81. package/dist/compiler/internal/Themes.js +120 -4
  82. package/dist/compiler/internal/Themes.js.map +1 -1
  83. package/dist/compiler/internal/Vars.d.ts +3 -1
  84. package/dist/compiler/internal/Vars.d.ts.map +1 -1
  85. package/dist/compiler/internal/Vars.js +14 -3
  86. package/dist/compiler/internal/Vars.js.map +1 -1
  87. package/dist/default.d.ts +4 -4
  88. package/dist/default.d.ts.map +1 -1
  89. package/dist/default.js +9 -9
  90. package/dist/default.js.map +2 -2
  91. package/dist/default.js.zyzz.json +1 -1
  92. package/dist/internal/Authoring.d.ts.map +1 -1
  93. package/dist/internal/Authoring.js +8 -3
  94. package/dist/internal/Authoring.js.map +1 -1
  95. package/dist/internal/Binding.d.ts +4 -0
  96. package/dist/internal/Binding.d.ts.map +1 -1
  97. package/dist/internal/Binding.js +2 -0
  98. package/dist/internal/Binding.js.map +1 -1
  99. package/dist/internal/Completion.d.ts +1 -1
  100. package/dist/internal/Completion.d.ts.map +1 -1
  101. package/dist/internal/Configuration.d.ts +2 -2
  102. package/dist/internal/Configuration.d.ts.map +1 -1
  103. package/dist/internal/Configuration.js +4 -2
  104. package/dist/internal/Configuration.js.map +1 -1
  105. package/dist/internal/Identity.d.ts +3 -3
  106. package/dist/internal/Identity.d.ts.map +1 -1
  107. package/dist/internal/Identity.js +11 -9
  108. package/dist/internal/Identity.js.map +1 -1
  109. package/dist/internal/Targets.d.ts.map +1 -1
  110. package/dist/internal/Targets.js +2 -0
  111. package/dist/internal/Targets.js.map +1 -1
  112. package/dist/internal/Theme.js +2 -2
  113. package/dist/internal/Theme.js.map +1 -1
  114. package/dist/internal/Token.d.ts +3 -1
  115. package/dist/internal/Token.d.ts.map +1 -1
  116. package/dist/internal/Token.js +9 -2
  117. package/dist/internal/Token.js.map +1 -1
  118. package/dist/internal/Value.d.ts +7 -0
  119. package/dist/internal/Value.d.ts.map +1 -1
  120. package/dist/internal/Value.js.map +1 -1
  121. package/dist/internal/VariableSets.js +1 -1
  122. package/dist/internal/VariableSets.js.map +1 -1
  123. package/dist/metro/Graph.d.ts +22 -7
  124. package/dist/metro/Graph.d.ts.map +1 -1
  125. package/dist/metro/Graph.js +179 -42
  126. package/dist/metro/Graph.js.map +1 -1
  127. package/dist/metro/Watch.d.ts +28 -4
  128. package/dist/metro/Watch.d.ts.map +1 -1
  129. package/dist/metro/Watch.js +39 -7
  130. package/dist/metro/Watch.js.map +1 -1
  131. package/dist/metro/index.d.ts +15 -4
  132. package/dist/metro/index.d.ts.map +1 -1
  133. package/dist/metro/index.js +27 -0
  134. package/dist/metro/index.js.map +1 -1
  135. package/dist/metro/transformer.d.ts +5 -1
  136. package/dist/metro/transformer.d.ts.map +1 -1
  137. package/dist/metro/transformer.js +5 -3
  138. package/dist/metro/transformer.js.map +1 -1
  139. package/dist/node/Host.d.ts.map +1 -1
  140. package/dist/node/Host.js +2 -0
  141. package/dist/node/Host.js.map +1 -1
  142. package/dist/react-native/StyleSheet.d.ts +3 -2
  143. package/dist/react-native/StyleSheet.d.ts.map +1 -1
  144. package/dist/react-native/StyleSheet.js +17 -34
  145. package/dist/react-native/StyleSheet.js.map +1 -1
  146. package/dist/react-native/index.d.ts +1 -1
  147. package/dist/react-native/index.d.ts.map +1 -1
  148. package/dist/react-native/index.js +1 -1
  149. package/dist/react-native/index.js.map +1 -1
  150. package/dist/react-native/index.native.d.ts +5 -0
  151. package/dist/react-native/index.native.js +20 -0
  152. package/dist/react-native/index.native.js.map +7 -0
  153. package/dist/react-native/internal/Calculation.d.ts +7 -0
  154. package/dist/react-native/internal/Calculation.d.ts.map +1 -0
  155. package/dist/react-native/internal/Calculation.js +134 -0
  156. package/dist/react-native/internal/Calculation.js.map +1 -0
  157. package/dist/react-native/internal/Device.js +191 -0
  158. package/dist/react-native/internal/Device.js.map +7 -0
  159. package/dist/react-native/internal/NativeZyzz.js +7 -0
  160. package/dist/react-native/internal/NativeZyzz.js.map +7 -0
  161. package/dist/react-native/internal/Scalar.d.ts.map +1 -1
  162. package/dist/react-native/internal/Scalar.js +9 -2
  163. package/dist/react-native/internal/Scalar.js.map +1 -1
  164. package/dist/react-native/internal/Store.d.ts +32 -0
  165. package/dist/react-native/internal/Store.d.ts.map +1 -0
  166. package/dist/react-native/internal/Store.js +57 -0
  167. package/dist/react-native/internal/Store.js.map +1 -0
  168. package/dist/react-native/internal/Tokens.d.ts +21 -0
  169. package/dist/react-native/internal/Tokens.d.ts.map +1 -0
  170. package/dist/react-native/internal/Tokens.js +58 -0
  171. package/dist/react-native/internal/Tokens.js.map +1 -0
  172. package/dist/react-native/internal/Viewport.d.ts +6 -0
  173. package/dist/react-native/internal/Viewport.d.ts.map +1 -0
  174. package/dist/react-native/internal/Viewport.js +4 -0
  175. package/dist/react-native/internal/Viewport.js.map +1 -0
  176. package/dist/react-native/react.d.ts +74 -11
  177. package/dist/react-native/react.d.ts.map +1 -1
  178. package/dist/react-native/react.js +111 -12
  179. package/dist/react-native/react.js.map +1 -1
  180. package/dist/react-native/reanimated.d.ts +39 -0
  181. package/dist/react-native/reanimated.d.ts.map +1 -0
  182. package/dist/react-native/reanimated.js +76 -0
  183. package/dist/react-native/reanimated.js.map +1 -0
  184. package/dist/runtime/NativeContext.d.ts +10 -1
  185. package/dist/runtime/NativeContext.d.ts.map +1 -1
  186. package/dist/runtime/NativeContext.js +67 -14
  187. package/dist/runtime/NativeContext.js.map +1 -1
  188. package/dist/runtime/NativeDynamic.d.ts +3 -2
  189. package/dist/runtime/NativeDynamic.d.ts.map +1 -1
  190. package/dist/runtime/NativeDynamic.js +32 -7
  191. package/dist/runtime/NativeDynamic.js.map +1 -1
  192. package/dist/runtime/NativeStatic.d.ts +23 -0
  193. package/dist/runtime/NativeStatic.d.ts.map +1 -0
  194. package/dist/runtime/NativeStatic.js +106 -0
  195. package/dist/runtime/NativeStatic.js.map +1 -0
  196. package/dist/runtime/NativeVars.d.ts +53 -0
  197. package/dist/runtime/NativeVars.d.ts.map +1 -0
  198. package/dist/runtime/NativeVars.js +77 -0
  199. package/dist/runtime/NativeVars.js.map +1 -0
  200. package/dist/runtime/index.d.ts +4 -0
  201. package/dist/runtime/index.d.ts.map +1 -1
  202. package/dist/runtime/index.js +4 -0
  203. package/dist/runtime/index.js.map +1 -1
  204. package/dist/runtime/internal/NativeMedia.d.ts +25 -0
  205. package/dist/runtime/internal/NativeMedia.d.ts.map +1 -0
  206. package/dist/runtime/internal/NativeMedia.js +36 -0
  207. package/dist/runtime/internal/NativeMedia.js.map +1 -0
  208. package/dist/variable.js +1 -1
  209. package/dist/variable.js.map +1 -1
  210. package/dist/vite/index.d.ts.map +1 -1
  211. package/dist/vite/index.js +43 -47
  212. package/dist/vite/index.js.map +1 -1
  213. package/dist/web/Css.d.ts +7 -2
  214. package/dist/web/Css.d.ts.map +1 -1
  215. package/dist/web/Css.js +76 -57
  216. package/dist/web/Css.js.map +1 -1
  217. package/dist/web/internal/ClassName.d.ts +13 -2
  218. package/dist/web/internal/ClassName.d.ts.map +1 -1
  219. package/dist/web/internal/ClassName.js +17 -30
  220. package/dist/web/internal/ClassName.js.map +1 -1
  221. package/dist/web/internal/Themes.d.ts +3 -2
  222. package/dist/web/internal/Themes.d.ts.map +1 -1
  223. package/dist/web/internal/Themes.js +54 -28
  224. package/dist/web/internal/Themes.js.map +1 -1
  225. package/dist/web/page.d.ts +2 -0
  226. package/dist/web/page.d.ts.map +1 -1
  227. package/native/NativeZyzz.cpp +215 -0
  228. package/native/NativeZyzz.h +52 -0
  229. package/native/ZyzzSpecJSI.h +65 -0
  230. package/native/android/CMakeLists.txt +8 -0
  231. package/native/android/ZyzzSpec-generated.cpp +50 -0
  232. package/native/android/ZyzzSpec.h +31 -0
  233. package/native/ios/ZyzzModuleProvider.mm +13 -0
  234. package/package.json +39 -1
  235. package/react-native.config.ts +14 -0
  236. package/src/Style.ts +15 -9
  237. package/src/babel/NativeJsx.ts +305 -28
  238. package/src/babel/index.ts +21 -3
  239. package/src/compiler/Graph.ts +135 -46
  240. package/src/compiler/Native.ts +158 -26
  241. package/src/compiler/Source.ts +115 -10
  242. package/src/compiler/Transform.ts +42 -60
  243. package/src/compiler/internal/Catalogs.ts +9 -1
  244. package/src/compiler/internal/Compositions.ts +7 -0
  245. package/src/compiler/internal/Configurations.ts +27 -4
  246. package/src/compiler/internal/Contract.ts +130 -260
  247. package/src/compiler/internal/Contributions.ts +8 -6
  248. package/src/compiler/internal/Descriptors.ts +12 -8
  249. package/src/compiler/internal/Dynamic.ts +14 -9
  250. package/src/compiler/internal/Names.ts +48 -0
  251. package/src/compiler/internal/NativeBindings.ts +98 -15
  252. package/src/compiler/internal/NativeMedia.ts +342 -0
  253. package/src/compiler/internal/NativeVars.ts +228 -0
  254. package/src/compiler/internal/PackedStyles.ts +4 -0
  255. package/src/compiler/internal/Selectors.ts +6 -1
  256. package/src/compiler/internal/Stylesheets.ts +2 -2
  257. package/src/compiler/internal/Themes.ts +193 -3
  258. package/src/compiler/internal/Vars.ts +21 -2
  259. package/src/default.ts +9 -10
  260. package/src/internal/Authoring.ts +8 -2
  261. package/src/internal/Binding.ts +5 -0
  262. package/src/internal/Completion.ts +6 -3
  263. package/src/internal/Configuration.ts +7 -4
  264. package/src/internal/Identity.ts +14 -12
  265. package/src/internal/Targets.ts +2 -0
  266. package/src/internal/Theme.ts +2 -2
  267. package/src/internal/Token.ts +11 -1
  268. package/src/internal/Value.ts +20 -0
  269. package/src/internal/VariableSets.ts +1 -1
  270. package/src/metro/Graph.ts +235 -50
  271. package/src/metro/Watch.ts +95 -10
  272. package/src/metro/index.ts +62 -4
  273. package/src/metro/transformer.ts +21 -11
  274. package/src/node/Host.ts +3 -0
  275. package/src/react-native/StyleSheet.ts +28 -44
  276. package/src/react-native/index.native.ts +10 -0
  277. package/src/react-native/index.ts +1 -1
  278. package/src/react-native/internal/Calculation.ts +159 -0
  279. package/src/react-native/internal/Device.ts +231 -0
  280. package/src/react-native/internal/NativeZyzz.ts +20 -0
  281. package/src/react-native/internal/Scalar.ts +13 -2
  282. package/src/react-native/internal/Store.ts +78 -0
  283. package/src/react-native/internal/Tokens.ts +85 -0
  284. package/src/react-native/internal/Viewport.ts +8 -0
  285. package/src/react-native/react.ts +211 -19
  286. package/src/react-native/reanimated.ts +162 -0
  287. package/src/runtime/NativeContext.ts +88 -17
  288. package/src/runtime/NativeDynamic.ts +35 -10
  289. package/src/runtime/NativeStatic.ts +145 -0
  290. package/src/runtime/NativeVars.ts +189 -0
  291. package/src/runtime/index.ts +6 -0
  292. package/src/runtime/internal/NativeMedia.ts +63 -0
  293. package/src/variable.ts +1 -1
  294. package/src/vite/index.ts +52 -60
  295. package/src/web/Css.ts +123 -74
  296. package/src/web/internal/ClassName.ts +31 -36
  297. package/src/web/internal/Themes.ts +62 -39
  298. package/src/web/page.ts +2 -0
@@ -10,13 +10,29 @@ import type * as Theme from '../../internal/Theme.js'
10
10
 
11
11
  /** Collects live token references within one in-memory compilation graph. */
12
12
  export function create() {
13
- let nextScope = 0
14
- let nextVariable = 0
15
13
  const contracts = new Map<
16
14
  Token.Contract,
17
15
  { identity: string | undefined; paths: Map<string, string> }
18
16
  >()
19
17
 
18
+ const anonymous = new Map<Token.Contract, Map<string, string>>()
19
+ let nextVariable = 0
20
+ function property(contract: Token.Contract, path: string): string {
21
+ const identity = contract[Token.identity]
22
+ if (identity) return variable(identity, path)
23
+ let paths = anonymous.get(contract)
24
+ if (!paths) {
25
+ paths = new Map()
26
+ anonymous.set(contract, paths)
27
+ }
28
+ let name = paths.get(path)
29
+ if (!name) {
30
+ name = `--z${(nextVariable++).toString(36)}`
31
+ paths.set(path, name)
32
+ }
33
+ return name
34
+ }
35
+
20
36
  const defaults = new Map<string, readonly Rule[]>()
21
37
  const defaultGroups = new Map<Token.Contract, Set<string>>()
22
38
 
@@ -35,14 +51,11 @@ export function create() {
35
51
  let name = contract.paths.get(token.path)
36
52
 
37
53
  if (!name) {
38
- name =
39
- contract.identity === undefined
40
- ? `--z${nextVariable++}`
41
- : variable(contract.identity, token.path)
54
+ name = property(token.contract, token.path)
42
55
  contract.paths.set(token.path, name)
43
56
  }
44
57
 
45
- const label = contract.identity?.startsWith('src-') ? token.path : undefined
58
+ const label = token.path
46
59
  return `var(${name},${literal(value, label, token.contract)})`
47
60
  }
48
61
 
@@ -52,6 +65,8 @@ export function create() {
52
65
  separate?: 'all' | 'defaults',
53
66
  ) {
54
67
  const classes: Record<string, string> = Object.create(null)
68
+ let nextScope = 0
69
+ const scopeBodies = new Map<string, string>()
55
70
  const completeDefaults = new Set<Token.Contract>()
56
71
  const empty: string[] = []
57
72
  const rules: Rule[] = []
@@ -69,9 +84,16 @@ export function create() {
69
84
  // Anonymous contracts are graph-local. Source-owned contracts retain stable
70
85
  // identities across separately compiled components and theme scopes.
71
86
  const className =
72
- data.contract[Token.identity] === undefined
73
- ? `t_${nextScope++}`
74
- : `z_theme-${encode(name)}`
87
+ data.contract[Token.identity] || data.cssName
88
+ ? scope(
89
+ data.cssName ??
90
+ (data.contract[Token.identity] &&
91
+ name.startsWith(`${data.contract[Token.identity]}-`)
92
+ ? name.slice(data.contract[Token.identity]!.length + 1)
93
+ : name),
94
+ data.contract[Token.identity],
95
+ )
96
+ : `z${(nextScope++).toString(36)}`
75
97
 
76
98
  classes[name] = className
77
99
 
@@ -87,27 +109,19 @@ export function create() {
87
109
  for (const path of Object.keys(data.values)) {
88
110
  if (contract.paths.has(path)) continue
89
111
 
90
- contract.paths.set(
91
- path,
92
- contract.identity === undefined
93
- ? `--z${nextVariable++}`
94
- : variable(contract.identity, path),
95
- )
112
+ contract.paths.set(path, property(data.contract, path))
96
113
  }
97
114
 
98
115
  contracts.set(data.contract, contract)
99
116
  }
100
117
 
101
118
  if (!contract) continue
119
+
102
120
  // Independently compiled consumers must import identical fallback contents.
103
121
  if (separate === 'all' && contract.identity) {
104
122
  completeDefaults.add(data.contract)
105
123
  for (const [path, value] of Object.entries(data.values))
106
- literal(
107
- value,
108
- contract.identity.startsWith('src-') ? path : undefined,
109
- data.contract,
110
- )
124
+ literal(value, path, data.contract)
111
125
  }
112
126
  if (!contract.paths.size) empty.push(`.${className}{}`)
113
127
 
@@ -119,7 +133,7 @@ export function create() {
119
133
  if (value === undefined)
120
134
  throw new Error('Theme scope is missing a live token.')
121
135
 
122
- const label = contract.identity?.startsWith('src-') ? path : undefined
136
+ const label = path
123
137
  declarations.push({
124
138
  conditions: [],
125
139
  property: name,
@@ -135,12 +149,26 @@ export function create() {
135
149
  name,
136
150
  `.${className}`,
137
151
  rules,
138
- contract.identity?.startsWith('src-') ? path : undefined,
152
+ path,
139
153
  [],
140
154
  data.contract,
141
155
  )
142
156
  }
143
157
 
158
+ for (const rule of rules) {
159
+ const key = JSON.stringify([
160
+ rule.selector,
161
+ rule.conditions,
162
+ rule.property,
163
+ ])
164
+ const previous = scopeBodies.get(key)
165
+ if (previous !== undefined && previous !== rule.value)
166
+ throw new Error(
167
+ `Generated scope ${rule.selector.slice(1)} conflicts. Supply distinct config ids.`,
168
+ )
169
+ scopeBodies.set(key, rule.value)
170
+ }
171
+
144
172
  const scopes = new Map<string, Rule[]>()
145
173
  for (const rule of rules) {
146
174
  const entries = scopes.get(rule.property) ?? []
@@ -188,6 +216,7 @@ export function create() {
188
216
  ]
189
217
  .filter(Boolean)
190
218
  .join('\n'),
219
+ rules,
191
220
  resources: separate
192
221
  ? [
193
222
  ...resources,
@@ -230,9 +259,7 @@ export function create() {
230
259
  const base = literal(value.default, label, owner)
231
260
  // Rule consolidation must not change existing variable identities.
232
261
  const css = `:where(*){--fallback:${base};}${conditionalCss(value, '--fallback', ':where(*)', label, owner)}`
233
- const name = label
234
- ? `--z-${Identity.label(label)}-fallback-${Identity.compact(css)}`
235
- : `--z-f${Identity.hash(css)}`
262
+ const name = `${owner ? property(owner, label ?? 'value') : variable(undefined, label ?? 'value')}-fallback-${Identity.name(css)}`
236
263
  const emitted: Rule[] = [
237
264
  { conditions: [], property: name, selector: ':where(*)', value: base },
238
265
  ]
@@ -307,14 +334,6 @@ export function create() {
307
334
  return { emit, serialize }
308
335
  }
309
336
 
310
- /** Escapes a scope key into the identifier segment of its compiled class. */
311
- export function encode(value: string): string {
312
- return value.replace(
313
- /[^a-zA-Z0-9-]/g,
314
- (character) => `_${character.charCodeAt(0).toString(16)}_`,
315
- )
316
- }
317
-
318
337
  /** Combines generated declarations without crossing competing declarations of the same property. */
319
338
  export function render(rules: readonly Rule[]): string {
320
339
  const groups: {
@@ -384,9 +403,13 @@ export type Rule = {
384
403
  /** Selects independently shareable defaults or all token rules. */
385
404
  export const shared = Symbol('shared token rules')
386
405
 
387
- function variable(index: number | string, path: string): string {
388
- // Packed declarations retain the spelling assigned by their compiler.
389
- if (typeof index === 'string' && index.startsWith('src-'))
390
- return `--z-${Identity.label(path)}-${Identity.compact(JSON.stringify([index, path]))}`
391
- return `--z-t${encode(String(index))}-${encode(path)}`
406
+ /** Names an authored scope without its private source identity. */
407
+ export function scope(value: string, identity?: string): string {
408
+ const namespace = identity?.startsWith('id-') ? `${identity.slice(3)}-` : ''
409
+ return `z-theme-${namespace}${Identity.name(value)}`
410
+ }
411
+
412
+ function variable(identity: string | undefined, path: string): string {
413
+ const namespace = identity?.startsWith('id-') ? `${identity.slice(3)}-` : ''
414
+ return `--z-${namespace}${path.split('.').map(Identity.name).join('-')}`
392
415
  }
package/src/web/page.ts CHANGED
@@ -35,6 +35,8 @@ export declare namespace page {
35
35
  | 'crop cross'
36
36
  | 'cross crop'
37
37
  | undefined
38
+ /** Handling of page margins that exceed the printer's printable area. */
39
+ readonly pageMarginSafety?: 'none' | 'clamp' | 'add' | undefined
38
40
  /** Rotation applied to a laid-out page. */
39
41
  readonly pageOrientation?:
40
42
  | 'upright'