@weasel-js/theme 1.5.2 → 1.6.1
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/README.md +39 -1
- package/dist/{chunk-XFCWYN2L.js → chunk-4EIPTWJA.js} +914 -60
- package/dist/chunk-4EIPTWJA.js.map +1 -0
- package/dist/chunk-C3S4A65R.js +557 -0
- package/dist/chunk-C3S4A65R.js.map +1 -0
- package/dist/chunk-EINHFDWI.js +12 -0
- package/dist/chunk-EINHFDWI.js.map +1 -0
- package/dist/colorMode-CoklZomJ.d.ts +12 -0
- package/dist/{resolveTheme-CF8i5IHy.d.ts → definition-DLdTdFWs.d.ts} +584 -51
- package/dist/engine.d.ts +76 -8
- package/dist/engine.js +183 -427
- package/dist/engine.js.map +1 -1
- package/dist/faces.css +19 -0
- package/dist/fonts.css +4 -18
- package/dist/index.d.ts +49 -5
- package/dist/index.js +172 -20
- package/dist/index.js.map +1 -1
- package/dist/react.d.ts +50 -6
- package/dist/react.js +68 -6
- package/dist/react.js.map +1 -1
- package/dist/tokens.css +103 -1
- package/fonts/README.md +5 -6
- package/package.json +4 -3
- package/dist/chunk-LL2ERJPZ.js +0 -175
- package/dist/chunk-LL2ERJPZ.js.map +0 -1
- package/dist/chunk-PJMTWM34.js +0 -6
- package/dist/chunk-PJMTWM34.js.map +0 -1
- package/dist/chunk-XFCWYN2L.js.map +0 -1
- package/dist/theme-DAZcQi_L.d.ts +0 -191
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/generated/manifest.ts","../src/tokenPx.ts","../src/dtcg/flatten.ts","../src/loadDTCG.ts"],"names":[],"mappings":";;;;;;;AAqBO,IAAM,cAAA,GAAgD;AAAA,EAC3D,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC7G,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9G,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9G,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9G,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9G,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9G,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9G,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9G,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9G,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9G,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACnH,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,qGAAA,EAAuG,IAAA,EAAM,KAAA,EAAM;AAAA,EACtN,EAAE,IAAA,EAAM,qBAAA,EAAuB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACrH,EAAE,IAAA,EAAM,sBAAA,EAAwB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,wYAAA,EAA+X,IAAA,EAAM,KAAA,EAAM;AAAA,EACjf,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACpH,EAAE,IAAA,EAAM,kBAAA,EAAoB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAClH,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACpH,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACnH,EAAE,IAAA,EAAM,kBAAA,EAAoB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAClH,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACnH,EAAE,IAAA,EAAM,qBAAA,EAAuB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACrH,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACnH,EAAE,IAAA,EAAM,qBAAA,EAAuB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACrH,EAAE,IAAA,EAAM,qBAAA,EAAuB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,4DAAA,EAA8D,IAAA,EAAM,KAAA,EAAM;AAAA,EAC7K,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,mCAAA,EAAqC,IAAA,EAAM,KAAA,EAAM;AAAA,EACpJ,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,mDAAA,EAAqD,IAAA,EAAM,KAAA,EAAM;AAAA,EACpK,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,yBAAA,EAA2B,IAAA,EAAM,KAAA,EAAM;AAAA,EAC1I,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,0BAAA,EAA4B,IAAA,EAAM,KAAA,EAAM;AAAA,EAC3I,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,oDAAA,EAAiD,IAAA,EAAM,KAAA,EAAM;AAAA,EAChK,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9G,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9G,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9G,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9G,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC/G,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC/G,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC/G,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC/G,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,SAAA,EAAW,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAChH,EAAE,IAAA,EAAM,sBAAA,EAAwB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,SAAA,EAAW,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACvH,EAAE,IAAA,EAAM,sBAAA,EAAwB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,SAAA,EAAW,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACvH,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACtG,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC5G,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC7G,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9G,EAAE,IAAA,EAAM,qBAAA,EAAuB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,2IAAA,EAA6I,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9P,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,oKAAA,EAAiK,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9Q,EAAE,IAAA,EAAM,kBAAA,EAAoB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,iJAAA,EAAmJ,IAAA,EAAM,KAAA,EAAM;AAAA,EAC7P,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,oBAAA,EAAsB,WAAA,EAAa,sGAAA,EAAmG,IAAA,EAAM,KAAA,EAAM;AAAA,EACxN,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACnH,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACpH,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACpH,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAChH,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,0BAAA,EAA4B,WAAA,EAAa,uCAAA,EAAyC,IAAA,EAAM,KAAA,EAAM;AAAA,EACvK,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,0BAAA,EAA4B,WAAA,EAAa,uCAAA,EAAyC,IAAA,EAAM,KAAA,EAAM;AAAA,EAChK,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,0BAAA,EAA4B,WAAA,EAAa,+BAAA,EAAiC,IAAA,EAAM,KAAA,EAAM;AAAA,EAC/J,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,wGAAA,EAA0G,IAAA,EAAM,KAAA,EAAM;AAAA,EACxN,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9G,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACpH,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9G,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC/G,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAC/G,EAAE,IAAA,EAAM,kBAAA,EAAoB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACjH,EAAE,IAAA,EAAM,kBAAA,EAAoB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,SAAA,EAAW,WAAA,EAAa,0IAAA,EAA4I,IAAA,EAAM,KAAA,EAAM;AAAA,EACzP,EAAE,IAAA,EAAM,qBAAA,EAAuB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,SAAA,EAAW,YAAA,EAAc,0BAAA,EAA4B,WAAA,EAAa,2GAAA,EAAwG,IAAA,EAAM,KAAA,EAAM;AAAA,EAC3O,EAAE,IAAA,EAAM,uBAAA,EAAyB,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,SAAA,EAAW,YAAA,EAAc,2BAAA,EAA6B,WAAA,EAAa,qCAAA,EAAuC,IAAA,EAAM,KAAA,EAAM;AAAA,EAC7K,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACjH,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACjH,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAClH,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,OAAA,EAAS,WAAA,EAAa,gEAAA,EAA6D,IAAA,EAAM,KAAA,EAAM;AAAA,EAC9K,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAChH,EAAE,IAAA,EAAM,kBAAA,EAAoB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,oDAAA,EAAiD,IAAA,EAAM,KAAA,EAAM;AAAA,EAC7J,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,oFAAA,EAAsF,IAAA,EAAM,KAAA,EAAM;AAAA,EACpM,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,IAAA,EAAM,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,mKAAA,EAAqK,IAAA,EAAM,KAAA,EAAM;AAAA,EAC/Q,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,SAAA,EAAW,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,iIAAA,EAAmI,IAAA,EAAM,KAAA,EAAM;AAAA,EACrP,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,SAAA,EAAW,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,6IAAA,EAA+I,IAAA,EAAM,KAAA,EAAM;AAAA,EACjQ,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,SAAA,EAAW,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,yJAAA,EAAsJ,IAAA,EAAM,KAAA,EAAM;AAAA,EACrQ,EAAE,IAAA,EAAM,wBAAA,EAA0B,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,wLAAA,EAA0L,IAAA,EAAM,KAAA,EAAM;AAAA,EAC7S,EAAE,IAAA,EAAM,sBAAA,EAAwB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,2HAAA,EAA6H,IAAA,EAAM,KAAA,EAAM;AAAA,EAC/O,EAAE,IAAA,EAAM,yBAAA,EAA2B,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,mCAAA,EAAqC,IAAA,EAAM,KAAA,EAAM;AAAA,EAC1J,EAAE,IAAA,EAAM,wBAAA,EAA0B,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,mJAAA,EAAgJ,IAAA,EAAM,KAAA,EAAM;AAAA,EACpQ,EAAE,IAAA,EAAM,wBAAA,EAA0B,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,mFAAA,EAAgF,IAAA,EAAM,KAAA,EAAM;AAAA,EACpM,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,qLAAA,EAAkL,IAAA,EAAM,KAAA,EAAM;AAAA,EACjS,EAAE,IAAA,EAAM,sBAAA,EAAwB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,4HAAA,EAAyH,IAAA,EAAM,KAAA,EAAM;AAAA,EAC3O,EAAE,IAAA,EAAM,sBAAA,EAAwB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,0JAAA,EAAuJ,IAAA,EAAM,KAAA,EAAM;AAAA,EAC1Q,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,4HAAA,EAA8H,IAAA,EAAM,KAAA,EAAM;AAAA,EAC5O,EAAE,IAAA,EAAM,kBAAA,EAAoB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,mEAAA,EAAqE,IAAA,EAAM,KAAA,EAAM;AAAA,EAClL,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,yBAAA,EAA2B,IAAA,EAAM,KAAA,EAAM;AAAA,EACvI,EAAE,IAAA,EAAM,qBAAA,EAAuB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,GAAA,EAAK,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACrH,EAAE,IAAA,EAAM,qBAAA,EAAuB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,QAAA,EAAU,WAAA,EAAa,6BAAA,EAA+B,IAAA,EAAM,KAAA,EAAM;AAAA,EACrJ,EAAE,IAAA,EAAM,sBAAA,EAAwB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,QAAA,EAAU,WAAA,EAAa,8BAAA,EAAgC,IAAA,EAAM,KAAA,EAAM;AAAA,EACvJ,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,GAAA,EAAK,YAAA,EAAc,IAAA,EAAM,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACxG,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,GAAA,EAAK,YAAA,EAAc,IAAA,EAAM,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACxG,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,GAAA,EAAK,YAAA,EAAc,IAAA,EAAM,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACtG,EAAE,IAAA,EAAM,qBAAA,EAAuB,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,SAAA,EAAW,YAAA,EAAc,GAAA,EAAK,WAAA,EAAa,gDAAA,EAAkD,IAAA,EAAM,KAAA,EAAM;AAAA,EAC/J,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,SAAA,EAAW,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,+BAAA,EAAiC,IAAA,EAAM,KAAA,EAAM;AAAA,EAC/I,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,SAAA,EAAW,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,+BAAA,EAAiC,IAAA,EAAM,KAAA,EAAM;AAAA,EAC1I,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,yGAAA,EAA2G,IAAA,EAAM,KAAA,EAAM;AAAA,EACzN,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,OAAA,EAAS,WAAA,EAAa,kDAAA,EAA+C,IAAA,EAAM,KAAA,EAAM;AAAA,EAC/J,EAAE,IAAA,EAAM,qBAAA,EAAuB,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,OAAA,EAAS,WAAA,EAAa,sDAAA,EAAmD,IAAA,EAAM,KAAA,EAAM;AAAA,EACrK,EAAE,IAAA,EAAM,qBAAA,EAAuB,IAAA,EAAM,aAAA,EAAe,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,gCAAA,EAAkC,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EAChJ,EAAE,IAAA,EAAM,sBAAA,EAAwB,IAAA,EAAM,aAAA,EAAe,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,gCAAA,EAAkC,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACjJ,EAAE,IAAA,EAAM,yBAAA,EAA2B,IAAA,EAAM,aAAA,EAAe,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,gCAAA,EAAkC,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACpJ,EAAE,IAAA,EAAM,qBAAA,EAAuB,IAAA,EAAM,aAAA,EAAe,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,mCAAA,EAAqC,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACnJ,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,2EAAA,EAA6E,WAAA,EAAa,qHAAA,EAAuH,IAAA,EAAM,KAAA,EAAM;AAAA,EACvS,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,2EAAA,EAA6E,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACzL,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,yDAAA,EAA2D,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACpK,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,0DAAA,EAA4D,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACrK,EAAE,IAAA,EAAM,yBAAA,EAA2B,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACxH,EAAE,IAAA,EAAM,0BAAA,EAA4B,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACzH,EAAE,IAAA,EAAM,0BAAA,EAA4B,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACzH,EAAE,IAAA,EAAM,wBAAA,EAA0B,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAAA,EACvH,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,2EAAA,EAA6E,IAAA,EAAM,KAAA,EAAM;AAAA,EACxL,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,2EAAA,EAA6E,IAAA,EAAM,KAAA,EAAM;AAAA,EACxL,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,2EAAA,EAA6E,IAAA,EAAM,KAAA,EAAM;AAAA,EACzL,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,2EAAA,EAA6E,IAAA,EAAM,KAAA,EAAM;AAAA,EACzL,EAAE,IAAA,EAAM,sBAAA,EAAwB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,YAAA,EAAc,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,uDAAA,EAAoD,IAAA,EAAM,IAAA,EAAK;AAAA,EACzK,EAAE,IAAA,EAAM,yBAAA,EAA2B,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,YAAA,EAAc,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,iFAAA,EAA8E,IAAA,EAAM,IAAA,EAAK;AAAA,EACvM,EAAE,IAAA,EAAM,0BAAA,EAA4B,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,sCAAA,EAAmC,IAAA,EAAM,IAAA,EAAK;AAAA,EACxJ,EAAE,IAAA,EAAM,0BAAA,EAA4B,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,OAAA,EAAS,WAAA,EAAa,qCAAA,EAAuC,IAAA,EAAM,IAAA,EAAK;AAAA,EAC7J,EAAE,IAAA,EAAM,yBAAA,EAA2B,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,mDAAA,EAAqD,IAAA,EAAM,IAAA,EAAK;AAAA,EACvK,EAAE,IAAA,EAAM,kBAAA,EAAoB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,oKAAA,EAA4J,IAAA,EAAM,IAAA,EAAK;AAAA,EACxQ,EAAE,IAAA,EAAM,uBAAA,EAAyB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,gDAAA,EAAkD,IAAA,EAAM,IAAA,EAAK;AAAA,EACnK,EAAE,IAAA,EAAM,0BAAA,EAA4B,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,OAAA,EAAS,WAAA,EAAa,yDAAA,EAAsD,IAAA,EAAM,IAAA,EAAK;AAAA,EAC/K,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,qGAAA,EAAkG,IAAA,EAAM,IAAA,EAAK;AAAA,EACjN,EAAE,IAAA,EAAM,wBAAA,EAA0B,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,OAAA,EAAS,WAAA,EAAa,kDAAA,EAA+C,IAAA,EAAM,IAAA,EAAK;AAAA,EACtK,EAAE,IAAA,EAAM,6BAAA,EAA+B,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,UAAA,EAAY,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,oDAAA,EAAiD,IAAA,EAAM,IAAA;AACzK;;;AChJA,IAAM,QAAA,GAAW,IAAI,GAAA,CAAoB,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,YAAY,CAAC,CAAC,CAAA;AAYrF,SAAS,OAAA,CAAQ,MAAiB,QAAA,EAAkC;AACzE,EAAA,MAAM,MAAM,QAAA,GAAW,IAAI,CAAA,IAAK,QAAA,CAAS,IAAI,IAAI,CAAA;AACjD,EAAA,MAAM,IAAI,mBAAA,CAAoB,IAAA,CAAA,CAAM,GAAA,IAAO,EAAA,EAAI,MAAM,CAAA;AACrD,EAAA,IAAI,CAAC,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,YAAY,IAAI,CAAA,qBAAA,EAAwB,GAAA,IAAO,eAAe,CAAA,CAAA,CAAG,CAAA;AACzF,EAAA,OAAO,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA;AACpB;;;ACZA,IAAM,OAAA,GAAU,CAAC,CAAA,KACf,OAAO,MAAM,QAAA,IAAY,CAAA,KAAM,QAAQ,QAAA,IAAY,CAAA;AAU9C,SAAS,cAAc,GAAA,EAA0C;AACtE,EAAA,MAAM,MAAkB,EAAC;AAEzB,EAAA,KAAA,MAAW,CAAC,SAAA,EAAW,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACpD,IAAA,IAAI,SAAA,CAAU,UAAA,CAAW,GAAG,CAAA,EAAG;AAC/B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAEjD,IAAA,MAAM,CAAA,GAAI,KAAA;AACV,IAAA,MAAM,YAAY,CAAA,CAAE,KAAA;AAEpB,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,KAAK,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,EAAG;AAC5C,MAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AAC1B,MAAA,IAAI,CAAC,OAAA,CAAQ,IAAI,CAAA,EAAG;AAEpB,MAAA,MAAM,IAAA,GAAO,KAAK,KAAA,IAAS,SAAA;AAC3B,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,IAAI,CAAA,8BAAA,EAAiC,SAAS,CAAA,eAAA,CAAiB,CAAA;AAAA,MAC3F;AACA,MAAA,IAAI,QAAQ,GAAA,EAAK;AACf,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,IAAI,CAAA,oDAAA,CAAiD,CAAA;AAAA,MAChG;AAEA,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,GAAc,SAAS,CAAA;AAC7C,MAAA,MAAM,KAAA,GAAkB;AAAA,QACtB,IAAA;AAAA,QACA,OAAO,IAAA,CAAK,MAAA;AAAA,QACZ,KAAA,EAAO,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,GAAW,MAAA;AAAA,QACjD,aAAa,IAAA,CAAK;AAAA,OACpB;AACA,MAAA,GAAA,CAAI,IAAI,CAAA,GAAI,KAAA;AAAA,IACd;AAAA,EACF;AAEA,EAAA,OAAO,GAAA;AACT;;;ACnCO,SAAS,SAAS,GAAA,EAA0B;AACjD,EAAA,IAAI,OAAO,GAAA,CAAI,IAAA,KAAS,QAAA,IAAY,GAAA,CAAI,SAAS,EAAA,EAAI;AACnD,IAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,EACvD;AACA,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,OAAA,KAAY,MAAA,GAAY,cAAc,GAAA,CAAI,OAAA;AAC3D,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,GAAA,CAAI,UAAA,IAAc,EAAE,CAAA;AACrD,EAAA,MAAM,YAAY,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,KAAA,IAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,QAAQ,MAAA,CAAO,WAAA,CAAY,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,EAAG,aAAA,CAAc,IAAI,KAAA,CAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAExF,EAAA,MAAM,MAAA,GAA4C,EAAE,GAAG,UAAA,EAAW;AAClE,EAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,GAAA,CAAI,SAAA,CAAU,QAAQ,CAAC,CAAA,KAAM,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAC,CAAC,CAAA,EAAG;AAC3E,IAAA,MAAM,MAAA,GAAkC,EAAE,EAAA,EAAI,MAAA,EAAO;AACrD,IAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAC,EAAE,IAAI,CAAA,IAAK,WAAW,IAAI,CAAA;AAC3C,MAAA,IAAI,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,GAAI,CAAA;AAAA,IACrB;AACA,IAAA,MAAA,CAAO,IAAI,CAAA,GAAI,MAAA;AAAA,EACjB;AAEA,EAAA,MAAM,YAAY,IAAA,GAAO,SAAA,CAAU,IAAI,CAAA,CAAE,MAAM,OAAA,GAAU,MAAA;AACzD,EAAA,MAAM,cAAc,OAAO,GAAA,CAAI,gBAAgB,QAAA,GAAW,GAAA,CAAI,cAAe,SAAA,IAAa,MAAA;AAC1F,EAAA,MAAM,IAAA,GACJ,SAAA,CAAU,MAAA,GAAS,CAAA,GACf,EAAE,MAAM,EAAE,OAAA,EAAS,WAAA,EAAa,MAAA,EAAQ,MAAA,CAAO,WAAA,CAAY,UAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,EAAG,EAAE,CAAC,CAAC,CAAA,EAAE,EAAE,GAC5F,EAAC;AACP,EAAA,OAAO,EAAE,IAAA,EAAM,GAAA,CAAI,MAAM,OAAA,EAAS,IAAA,EAAM,MAAM,MAAA,EAAO;AACvD","file":"index.js","sourcesContent":["// GENERATED by packages/theme/scripts/build-tokens.ts — do not edit.\n\n/** One row of `TOKEN_MANIFEST`: a token, its DTCG type, the name-prefix\n * group it belongs to, its value in the default theme and selection, and\n * the description it was authored with (empty string if none). */\nexport interface TokenManifestEntry {\n readonly name: string;\n readonly type: string;\n readonly group: string;\n readonly defaultValue: string;\n readonly description: string;\n /** A consumer override hook rather than a theme token: no theme declares\n * it, kit CSS reads it with `defaultValue` as the fallback, and setting\n * it on any container is what changes it. */\n readonly hook: boolean;\n}\n\n/** Every token of the default theme at its default selection, plus every\n * consumer override hook, described. Meant for tooling that presents the\n * token set — docs pages, token browsers, forge's CSS-vars panel — not\n * for resolving values at runtime. */\nexport const TOKEN_MANIFEST: readonly TokenManifestEntry[] = [\n { name: '--wzl-gray-50', type: \"color\", group: \"gray\", defaultValue: \"#f5f5f6\", description: \"\", hook: false },\n { name: '--wzl-gray-100', type: \"color\", group: \"gray\", defaultValue: \"#e6e7e9\", description: \"\", hook: false },\n { name: '--wzl-gray-200', type: \"color\", group: \"gray\", defaultValue: \"#c9cbcf\", description: \"\", hook: false },\n { name: '--wzl-gray-300', type: \"color\", group: \"gray\", defaultValue: \"#9ea1a8\", description: \"\", hook: false },\n { name: '--wzl-gray-400', type: \"color\", group: \"gray\", defaultValue: \"#6f737b\", description: \"\", hook: false },\n { name: '--wzl-gray-500', type: \"color\", group: \"gray\", defaultValue: \"#4d5058\", description: \"\", hook: false },\n { name: '--wzl-gray-600', type: \"color\", group: \"gray\", defaultValue: \"#383b42\", description: \"\", hook: false },\n { name: '--wzl-gray-700', type: \"color\", group: \"gray\", defaultValue: \"#25272c\", description: \"\", hook: false },\n { name: '--wzl-gray-800', type: \"color\", group: \"gray\", defaultValue: \"#181a1e\", description: \"\", hook: false },\n { name: '--wzl-gray-900', type: \"color\", group: \"gray\", defaultValue: \"#0e0f12\", description: \"\", hook: false },\n { name: '--wzl-accent-soft', type: \"color\", group: \"accent\", defaultValue: \"#1d1454\", description: \"\", hook: false },\n { name: '--wzl-accent-base', type: \"color\", group: \"accent\", defaultValue: \"#2e1f7a\", description: \"Midnight blue-violet. Deep and saturated; anchors primary actions on light and dark surfaces alike.\", hook: false },\n { name: '--wzl-accent-strong', type: \"color\", group: \"accent\", defaultValue: \"#5841b8\", description: \"\", hook: false },\n { name: '--wzl-swatch-fuchsia', type: \"color\", group: \"swatch\", defaultValue: \"#f641f7\", description: \"First of ten categorical spot colors for plotting, status and data viz. Take them in sequence: the order is farthest-point over hue, so the first N are as separated as N colors can be (first three 87° apart, all ten 32°). Mode-invariant on purpose — a series keeps its color when the mode flips, which is why they are tuned for a dark surface and clear only 1.5:1 on a light one.\", hook: false },\n { name: '--wzl-swatch-green', type: \"color\", group: \"swatch\", defaultValue: \"#48e628\", description: \"\", hook: false },\n { name: '--wzl-swatch-sky', type: \"color\", group: \"swatch\", defaultValue: \"#36bff2\", description: \"\", hook: false },\n { name: '--wzl-swatch-amber', type: \"color\", group: \"swatch\", defaultValue: \"#e69628\", description: \"\", hook: false },\n { name: '--wzl-swatch-teal', type: \"color\", group: \"swatch\", defaultValue: \"#3ee1cb\", description: \"\", hook: false },\n { name: '--wzl-swatch-red', type: \"color\", group: \"swatch\", defaultValue: \"#f75034\", description: \"\", hook: false },\n { name: '--wzl-swatch-blue', type: \"color\", group: \"swatch\", defaultValue: \"#407ef7\", description: \"\", hook: false },\n { name: '--wzl-swatch-citron', type: \"color\", group: \"swatch\", defaultValue: \"#d5d23a\", description: \"\", hook: false },\n { name: '--wzl-swatch-rose', type: \"color\", group: \"swatch\", defaultValue: \"#fa4590\", description: \"\", hook: false },\n { name: '--wzl-swatch-violet', type: \"color\", group: \"swatch\", defaultValue: \"#955cf9\", description: \"\", hook: false },\n { name: '--wzl-font-size-2xs', type: \"dimension\", group: \"font\", defaultValue: \"9px\", description: \"Shortcut keys and index badges. The floor for chrome text.\", hook: false },\n { name: '--wzl-font-size-xs', type: \"dimension\", group: \"font\", defaultValue: \"10px\", description: \"Tool-button labels under an icon.\", hook: false },\n { name: '--wzl-font-size-sm', type: \"dimension\", group: \"font\", defaultValue: \"11px\", description: \"Chrome labels, status readouts, section headings.\", hook: false },\n { name: '--wzl-font-size-md', type: \"dimension\", group: \"font\", defaultValue: \"13px\", description: \"Controls and body text.\", hook: false },\n { name: '--wzl-font-size-lg', type: \"dimension\", group: \"font\", defaultValue: \"16px\", description: \"Panel and dialog titles.\", hook: false },\n { name: '--wzl-font-size-xl', type: \"dimension\", group: \"font\", defaultValue: \"20px\", description: \"The largest chrome text — a lab or app title.\", hook: false },\n { name: '--wzl-space-1', type: \"dimension\", group: \"space\", defaultValue: \"2px\", description: \"\", hook: false },\n { name: '--wzl-space-2', type: \"dimension\", group: \"space\", defaultValue: \"4px\", description: \"\", hook: false },\n { name: '--wzl-space-3', type: \"dimension\", group: \"space\", defaultValue: \"6px\", description: \"\", hook: false },\n { name: '--wzl-space-4', type: \"dimension\", group: \"space\", defaultValue: \"8px\", description: \"\", hook: false },\n { name: '--wzl-space-5', type: \"dimension\", group: \"space\", defaultValue: \"10px\", description: \"\", hook: false },\n { name: '--wzl-space-6', type: \"dimension\", group: \"space\", defaultValue: \"12px\", description: \"\", hook: false },\n { name: '--wzl-space-7', type: \"dimension\", group: \"space\", defaultValue: \"14px\", description: \"\", hook: false },\n { name: '--wzl-space-8', type: \"dimension\", group: \"space\", defaultValue: \"16px\", description: \"\", hook: false },\n { name: '--wzl-surface', type: \"color\", group: \"surface\", defaultValue: \"#181a1e\", description: \"\", hook: false },\n { name: '--wzl-surface-raised', type: \"color\", group: \"surface\", defaultValue: \"#25272c\", description: \"\", hook: false },\n { name: '--wzl-surface-sunken', type: \"color\", group: \"surface\", defaultValue: \"#0e0f12\", description: \"\", hook: false },\n { name: '--wzl-fg', type: \"color\", group: \"fg\", defaultValue: \"#e6e7e9\", description: \"\", hook: false },\n { name: '--wzl-fg-muted', type: \"color\", group: \"fg\", defaultValue: \"#9ea1a8\", description: \"\", hook: false },\n { name: '--wzl-fg-subtle', type: \"color\", group: \"fg\", defaultValue: \"#6f737b\", description: \"\", hook: false },\n { name: '--wzl-border', type: \"color\", group: \"border\", defaultValue: \"#25272c\", description: \"\", hook: false },\n { name: '--wzl-border-strong', type: \"color\", group: \"border\", defaultValue: \"#6f737b\", description: \"The line that has to be seen: a control's edge, a raised surface's outline. Clears WCAG 1.4.11's 3:1 against every surface in both modes.\", hook: false },\n { name: '--wzl-accent-fg', type: \"color\", group: \"accent\", defaultValue: \"#5841b8\", description: \"Accent for foreground use — text, icons, selected labels drawn on a surface. accent is a fill; the midnight base is too dim to read as text on dark surfaces.\", hook: false },\n { name: '--wzl-fg-inverse', type: \"color\", group: \"fg\", defaultValue: \"#0e0f12\", description: \"Text drawn on a filled foreground-colored element (e.g. a slider thumb). Flips with the mode, so it is a semantic, not an alias to a primitive.\", hook: false },\n { name: '--wzl-shadow', type: \"color\", group: \"shadow\", defaultValue: \"rgba(0, 0, 0, 0.6)\", description: \"Elevation. Always darker than any surface — never derived from fg, which is near-white on dark.\", hook: false },\n { name: '--wzl-danger-base', type: \"color\", group: \"status\", defaultValue: \"#d94a3f\", description: \"\", hook: false },\n { name: '--wzl-warning-base', type: \"color\", group: \"status\", defaultValue: \"#d99a3f\", description: \"\", hook: false },\n { name: '--wzl-success-base', type: \"color\", group: \"status\", defaultValue: \"#2ec27e\", description: \"\", hook: false },\n { name: '--wzl-fg-on-accent', type: \"color\", group: \"fg\", defaultValue: \"#f5f5f6\", description: \"\", hook: false },\n { name: '--wzl-line-subtle', type: \"color\", group: \"line\", defaultValue: \"rgba(230, 231, 233, 0.1)\", description: \"Barely-there separators (table rows).\", hook: false },\n { name: '--wzl-line', type: \"color\", group: \"line\", defaultValue: \"rgba(230, 231, 233, 0.2)\", description: \"Primary gridlines on sunken surfaces.\", hook: false },\n { name: '--wzl-line-strong', type: \"color\", group: \"line\", defaultValue: \"rgba(230, 231, 233, 0.4)\", description: \"Axes and emphasized dividers.\", hook: false },\n { name: '--wzl-curve-color', type: \"color\", group: \"curve\", defaultValue: \"#5841b8\", description: \"Drawn data curves. Routes through the bright accent because accent-base is too dim on sunken surfaces.\", hook: false },\n { name: '--wzl-accent', type: \"color\", group: \"accent\", defaultValue: \"#2e1f7a\", description: \"\", hook: false },\n { name: '--wzl-accent-hover', type: \"color\", group: \"accent\", defaultValue: \"#5841b8\", description: \"\", hook: false },\n { name: '--wzl-danger', type: \"color\", group: \"status\", defaultValue: \"#d94a3f\", description: \"\", hook: false },\n { name: '--wzl-warning', type: \"color\", group: \"status\", defaultValue: \"#d99a3f\", description: \"\", hook: false },\n { name: '--wzl-success', type: \"color\", group: \"status\", defaultValue: \"#2ec27e\", description: \"\", hook: false },\n { name: '--wzl-focus-ring', type: \"color\", group: \"focus\", defaultValue: \"#5841b8\", description: \"\", hook: false },\n { name: '--wzl-glass-tint', type: \"color\", group: \"glass\", defaultValue: \"#2e1f7a\", description: \"Frosted-glass tint. Components compose it as color-mix(in srgb, var(--wzl-glass-tint) 78%, transparent) with backdrop-filter: blur(3px).\", hook: false },\n { name: '--wzl-surface-hover', type: \"color\", group: \"surface\", defaultValue: \"rgba(230, 231, 233, 0.1)\", description: \"Hover wash over a raised surface. Same formula as line-subtle, different job — do not collapse them.\", hook: false },\n { name: '--wzl-surface-pressed', type: \"color\", group: \"surface\", defaultValue: \"rgba(230, 231, 233, 0.18)\", description: \"Pressed wash over a raised surface.\", hook: false },\n { name: '--wzl-radius-sm', type: \"dimension\", group: \"radius\", defaultValue: \"3px\", description: \"\", hook: false },\n { name: '--wzl-radius-md', type: \"dimension\", group: \"radius\", defaultValue: \"5px\", description: \"\", hook: false },\n { name: '--wzl-radius-lg', type: \"dimension\", group: \"radius\", defaultValue: \"14px\", description: \"\", hook: false },\n { name: '--wzl-radius-pill', type: \"dimension\", group: \"radius\", defaultValue: \"999px\", description: \"Fully rounded ends — segmented controls, progress tracks.\", hook: false },\n { name: '--wzl-border-w', type: \"dimension\", group: \"border\", defaultValue: \"1px\", description: \"\", hook: false },\n { name: '--wzl-line-width', type: \"dimension\", group: \"line\", defaultValue: \"2px\", description: \"Structural lines — gridlines, dividers, axes.\", hook: false },\n { name: '--wzl-curve-width', type: \"dimension\", group: \"curve\", defaultValue: \"3px\", description: \"Drawn data curves. Heavier than structural lines so data reads as primary content.\", hook: false },\n { name: '--wzl-tb-height', type: \"dimension\", group: \"tb\", defaultValue: \"28px\", description: \"Height of a horizontal toolbar strip (ActionsBar, OptionsBar, ToolOptionsBar). Taller than control-h so the controls inside a strip are not flush with its edges.\", hook: false },\n { name: '--wzl-control-h-xs', type: \"dimension\", group: \"control\", defaultValue: \"18px\", description: \"Height of the smallest interactive control -- a stepper, a keycap, a swatch button in a dense row. The rank below control-h-sm.\", hook: false },\n { name: '--wzl-control-h-sm', type: \"dimension\", group: \"control\", defaultValue: \"20px\", description: \"Height of a control in a dense inspector -- a Properties field, a small Button. The rank below control-h, which sizes a standalone control.\", hook: false },\n { name: '--wzl-control-h', type: \"dimension\", group: \"control\", defaultValue: \"24px\", description: \"Height of an interactive control — button, input, select, segmented control. Distinct from tb-height, which sizes the strip a row of them sits in.\", hook: false },\n { name: '--wzl-icon-button-size', type: \"dimension\", group: \"icon\", defaultValue: \"22px\", description: \"Side of a square icon button -- a dialog close, a row remove, a field clear. Smaller than control-h because it carries a glyph rather than a label, and square, so it sizes both axes.\", hook: false },\n { name: '--wzl-slider-track-h', type: \"dimension\", group: \"slider\", defaultValue: \"4px\", description: \"Height of a linear range track. The kit's single-thumb ranges all wear this; Slider's default 24px canvas track does not.\", hook: false },\n { name: '--wzl-slider-thumb-size', type: \"dimension\", group: \"slider\", defaultValue: \"8px\", description: \"Diameter of a linear range thumb.\", hook: false },\n { name: '--wzl-slider-track-mix', type: \"dimension\", group: \"slider\", defaultValue: \"18%\", description: \"Accent proportion in a range track, as a color-mix percentage — not a color. Mixed into a real property, never into another custom property.\", hook: false },\n { name: '--wzl-slider-thumb-mix', type: \"dimension\", group: \"slider\", defaultValue: \"70%\", description: \"Accent proportion in a range thumb, as a color-mix percentage — not a color.\", hook: false },\n { name: '--wzl-handle-size', type: \"dimension\", group: \"handle\", defaultValue: \"9px\", description: \"Edge of a draggable handle on a plot or timeline — a keyframe diamond, a timeline key, an event mark. The default rank; -sm and -lg are the two deliberate departures from it.\", hook: false },\n { name: '--wzl-handle-size-sm', type: \"dimension\", group: \"handle\", defaultValue: \"7px\", description: \"A handle that is drawn but not draggable — a locked or pinned point. Smaller so it reads as inert next to a live one.\", hook: false },\n { name: '--wzl-handle-size-lg', type: \"dimension\", group: \"handle\", defaultValue: \"10px\", description: \"A handle that is a category of its own rather than one of a row — a curve's endpoint. Larger so it separates from the handles it sits in line with.\", hook: false },\n { name: '--wzl-field-pad-x', type: \"dimension\", group: \"field\", defaultValue: \"8px\", description: \"Horizontal padding inside a boxed field. Pairs with --wzl-field-h, which is a container override and has no :root default.\", hook: false },\n { name: '--wzl-glass-blur', type: \"dimension\", group: \"glass\", defaultValue: \"3px\", description: \"Backdrop blur radius for frosted surfaces. Pairs with glass-tint.\", hook: false },\n { name: '--wzl-font-size', type: \"dimension\", group: \"font\", defaultValue: \"13px\", description: \"Controls and body text.\", hook: false },\n { name: '--wzl-tracking-none', type: \"dimension\", group: \"tracking\", defaultValue: \"0\", description: \"\", hook: false },\n { name: '--wzl-tracking-wide', type: \"dimension\", group: \"tracking\", defaultValue: \"0.06em\", description: \"Uppercase section headings.\", hook: false },\n { name: '--wzl-tracking-wider', type: \"dimension\", group: \"tracking\", defaultValue: \"0.08em\", description: \"Uppercase at 11px and below.\", hook: false },\n { name: '--wzl-z-toolbar', type: \"number\", group: \"z\", defaultValue: \"10\", description: \"\", hook: false },\n { name: '--wzl-z-overlay', type: \"number\", group: \"z\", defaultValue: \"20\", description: \"\", hook: false },\n { name: '--wzl-z-modal', type: \"number\", group: \"z\", defaultValue: \"30\", description: \"\", hook: false },\n { name: '--wzl-leading-tight', type: \"number\", group: \"leading\", defaultValue: \"1\", description: \"Single-line controls; the box sets the height.\", hook: false },\n { name: '--wzl-leading-snug', type: \"number\", group: \"leading\", defaultValue: \"1.2\", description: \"Headings and two-line labels.\", hook: false },\n { name: '--wzl-leading', type: \"number\", group: \"leading\", defaultValue: \"1.4\", description: \"Body and anything that wraps.\", hook: false },\n { name: '--wzl-backdrop', type: \"gradient\", group: \"backdrop\", defaultValue: \"none\", description: \"Layered backdrop fill for a page or lab root. `none` here; a theme with a signature background sets it.\", hook: false },\n { name: '--wzl-motion-fast', type: \"duration\", group: \"motion\", defaultValue: \"120ms\", description: \"Micro-interactions — hover, focus, pressed.\", hook: false },\n { name: '--wzl-motion-medium', type: \"duration\", group: \"motion\", defaultValue: \"240ms\", description: \"Entrances and exits — toasts, popovers, panels.\", hook: false },\n { name: '--wzl-ease-in-cubic', type: \"cubicBezier\", group: \"ease\", defaultValue: \"cubic-bezier(0.32, 0, 0.67, 0)\", description: \"\", hook: false },\n { name: '--wzl-ease-out-cubic', type: \"cubicBezier\", group: \"ease\", defaultValue: \"cubic-bezier(0.33, 1, 0.68, 1)\", description: \"\", hook: false },\n { name: '--wzl-ease-in-out-cubic', type: \"cubicBezier\", group: \"ease\", defaultValue: \"cubic-bezier(0.65, 0, 0.35, 1)\", description: \"\", hook: false },\n { name: '--wzl-ease-out-back', type: \"cubicBezier\", group: \"ease\", defaultValue: \"cubic-bezier(0.34, 1.56, 0.64, 1)\", description: \"\", hook: false },\n { name: '--wzl-font-ui', type: \"fontFamily\", group: \"font\", defaultValue: \"Oswald, 'Helvetica Neue Condensed', 'Arial Narrow', system-ui, sans-serif\", description: \"Condensed UI/display face. The heavier cuts get blocky at any size, so the weight tokens stay in the 200-400 range.\", hook: false },\n { name: '--wzl-font-display', type: \"fontFamily\", group: \"font\", defaultValue: \"Oswald, 'Helvetica Neue Condensed', 'Arial Narrow', system-ui, sans-serif\", description: \"\", hook: false },\n { name: '--wzl-font-body', type: \"fontFamily\", group: \"font\", defaultValue: \"Inter, system-ui, -apple-system, 'Segoe UI', sans-serif\", description: \"\", hook: false },\n { name: '--wzl-font-mono', type: \"fontFamily\", group: \"font\", defaultValue: \"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace\", description: \"\", hook: false },\n { name: '--wzl-font-weight-light', type: \"fontWeight\", group: \"font\", defaultValue: \"200\", description: \"\", hook: false },\n { name: '--wzl-font-weight-normal', type: \"fontWeight\", group: \"font\", defaultValue: \"300\", description: \"\", hook: false },\n { name: '--wzl-font-weight-medium', type: \"fontWeight\", group: \"font\", defaultValue: \"350\", description: \"\", hook: false },\n { name: '--wzl-font-weight-bold', type: \"fontWeight\", group: \"font\", defaultValue: \"400\", description: \"\", hook: false },\n { name: '--wzl-space-xs', type: \"dimension\", group: \"space\", defaultValue: \"4px\", description: \"Alias for space-2. The t-shirt names name every other rung of the ladder.\", hook: false },\n { name: '--wzl-space-sm', type: \"dimension\", group: \"space\", defaultValue: \"8px\", description: \"Alias for space-4. The t-shirt names name every other rung of the ladder.\", hook: false },\n { name: '--wzl-space-md', type: \"dimension\", group: \"space\", defaultValue: \"12px\", description: \"Alias for space-6. The t-shirt names name every other rung of the ladder.\", hook: false },\n { name: '--wzl-space-lg', type: \"dimension\", group: \"space\", defaultValue: \"16px\", description: \"Alias for space-8. The t-shirt names name every other rung of the ladder.\", hook: false },\n { name: '--wzl-disclosure-gap', type: \"dimension\", group: \"disclosure\", defaultValue: \"4px\", description: \"Gap between a Disclosure’s twisty and its label.\", hook: true },\n { name: '--wzl-disclosure-target', type: \"dimension\", group: \"disclosure\", defaultValue: \"20px\", description: \"Hit-target square of a Disclosure twisty, and of a labkit LayerList row’s.\", hook: true },\n { name: '--wzl-number-field-width', type: \"dimension\", group: \"number\", defaultValue: \"9ch\", description: \"Width of a NumberField’s input.\", hook: true },\n { name: '--wzl-prefs-column-width', type: \"dimension\", group: \"prefs\", defaultValue: \"300px\", description: \"Width of the Prefs category column.\", hook: true },\n { name: '--wzl-prop-number-width', type: \"dimension\", group: \"prop\", defaultValue: \"9ch\", description: \"Width of a numeric field in the Properties panel.\", hook: true },\n { name: '--wzl-prop-row-h', type: \"dimension\", group: \"prop\", defaultValue: \"20px\", description: \"Floor under every Properties row, whatever control it holds. Unset, it is the panel’s own field height, so it follows density — 20px at the default one.\", hook: true },\n { name: '--wzl-prop-text-width', type: \"dimension\", group: \"prop\", defaultValue: \"16ch\", description: \"Width of a text field in the Properties panel.\", hook: true },\n { name: '--wzl-property-readout-w', type: \"dimension\", group: \"property\", defaultValue: \"2.8em\", description: \"Minimum width of a Properties row’s value readout.\", hook: true },\n { name: '--wzl-swatch-size', type: \"dimension\", group: \"swatch\", defaultValue: \"28px\", description: \"Minimum cell of a swatch grid — PatternPicker, and any panel laying swatches out the same way.\", hook: true },\n { name: '--wzl-timeline-label-w', type: \"dimension\", group: \"timeline\", defaultValue: \"120px\", description: \"Width of the Timeline’s track-label gutter.\", hook: true },\n { name: '--wzl-timeline-value-axis-w', type: \"dimension\", group: \"timeline\", defaultValue: \"32px\", description: \"Width reserved for the Timeline’s value axis.\", hook: true },\n];\n","import { TOKEN_MANIFEST } from './generated/manifest';\nimport type { ResolvedTheme } from './resolveTheme';\nimport type { TokenName } from './generated/themes';\n\nconst DEFAULTS = new Map<string, string>(TOKEN_MANIFEST.map((t) => [t.name, t.defaultValue]));\n\n/**\n * A px-valued token as a number, for code that draws rather than styles —\n * SVG geometry attributes, canvas, WebGL. Pass `resolved` (from\n * `useTheme().resolved`) where a live theme override must reach the drawing;\n * without it the built-in theme's value is used, which is static and costs no\n * style resolution.\n *\n * Throws rather than guessing: a token that is not a plain px length has no\n * number, and silently returning 0 collapses whatever it sized.\n */\nexport function tokenPx(name: TokenName, resolved?: ResolvedTheme): number {\n const raw = resolved?.[name] ?? DEFAULTS.get(name);\n const m = /^(-?\\d*\\.?\\d+)px$/.exec((raw ?? '').trim());\n if (!m) throw new Error(`tokenPx: ${name} is not a px length (${raw ?? 'unknown token'})`);\n return Number(m[1]);\n}\n","import { ALPHA_EXT, type FlatTokens, type RawToken, type TokenValue } from './types';\n\ninterface DtcgToken {\n $value: TokenValue;\n $type?: string;\n $description?: string;\n $extensions?: Record<string, unknown>;\n}\n\nconst isToken = (v: unknown): v is DtcgToken =>\n typeof v === 'object' && v !== null && '$value' in v;\n\n/**\n * Collapse a DTCG document into flat token names.\n *\n * Groups exist only to carry `$type`; they contribute nothing to the name, so\n * `color.fg-muted` becomes `fg-muted` and in turn `--wzl-fg-muted`. This shape\n * is forced by the token set: `--wzl-accent` and `--wzl-accent-base` are both\n * real tokens, and DTCG forbids a token that is also a group.\n */\nexport function flattenTokens(doc: Record<string, unknown>): FlatTokens {\n const out: FlatTokens = {};\n\n for (const [groupName, group] of Object.entries(doc)) {\n if (groupName.startsWith('$')) continue;\n if (typeof group !== 'object' || group === null) continue;\n\n const g = group as Record<string, unknown> & { $type?: string };\n const groupType = g.$type;\n\n for (const [leaf, node] of Object.entries(g)) {\n if (leaf.startsWith('$')) continue;\n if (!isToken(node)) continue;\n\n const type = node.$type ?? groupType;\n if (!type) {\n throw new Error(`Token \"${leaf}\" has no $type and its group \"${groupName}\" declares none`);\n }\n if (leaf in out) {\n throw new Error(`Duplicate token name \"${leaf}\" — leaf keys must be unique across type groups`);\n }\n\n const alphaRaw = node.$extensions?.[ALPHA_EXT];\n const token: RawToken = {\n type,\n value: node.$value,\n alpha: typeof alphaRaw === 'number' ? alphaRaw : undefined,\n description: node.$description,\n };\n out[leaf] = token;\n }\n }\n\n return out;\n}\n","import type { AxisDefs, Varying } from './axes';\nimport { flattenTokens } from './dtcg/flatten';\nimport type { RawToken } from './dtcg/types';\nimport { themeAxes } from './resolveTheme';\nimport { weaselTheme, type Theme } from './theme';\n\ninterface DtcgDocument {\n name?: unknown;\n defaultMode?: unknown;\n extends?: Theme | null;\n primitives?: Record<string, unknown>;\n modes?: Record<string, Record<string, unknown>>;\n}\n\n/**\n * Build a `Theme` from a DTCG document — the interchange path, for tokens\n * exported by a design tool rather than authored in TS. A token a mode leaves\n * out takes the document's primitive of the same name, or else the base theme's.\n */\nexport function loadDTCG(doc: DtcgDocument): Theme {\n if (typeof doc.name !== 'string' || doc.name === '') {\n throw new Error('DTCG document needs a string \"name\"');\n }\n const base = doc.extends === undefined ? weaselTheme : doc.extends;\n const primitives = flattenTokens(doc.primitives ?? {});\n const modeNames = Object.keys(doc.modes ?? {});\n const modes = Object.fromEntries(modeNames.map((m) => [m, flattenTokens(doc.modes![m])]));\n\n const tokens: Record<string, Varying<RawToken>> = { ...primitives };\n for (const name of new Set(modeNames.flatMap((m) => Object.keys(modes[m])))) {\n const branch: Record<string, unknown> = { by: 'mode' };\n for (const m of modeNames) {\n const t = modes[m][name] ?? primitives[name];\n if (t) branch[m] = t;\n }\n tokens[name] = branch as Varying<RawToken>;\n }\n\n const inherited = base ? themeAxes(base).mode?.default : undefined;\n const defaultMode = typeof doc.defaultMode === 'string' ? doc.defaultMode : (inherited ?? 'dark');\n const axes: AxisDefs =\n modeNames.length > 0\n ? { mode: { default: defaultMode, values: Object.fromEntries(modeNames.map((m) => [m, {}])) } }\n : {};\n return { name: doc.name, extends: base, axes, tokens };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/generated/manifest.ts","../src/tokenPx.ts","../src/dtcg/flatten.ts","../src/loadDTCG.ts","../src/panel.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// GENERATED by packages/theme/scripts/build-tokens.ts — do not edit.\n\n/** One row of `TOKEN_MANIFEST`: a token, its DTCG type, the name-prefix\n * group it belongs to, its value in the default theme and selection, and\n * the description it was authored with (empty string if none). */\nexport interface TokenManifestEntry {\n readonly name: string;\n readonly type: string;\n readonly group: string;\n readonly defaultValue: string;\n readonly description: string;\n /** A consumer override hook rather than a theme token: no theme declares\n * it, kit CSS reads it with `defaultValue` as the fallback, and setting\n * it on any container is what changes it. */\n readonly hook: boolean;\n}\n\n/** Every token of the default theme at its default selection, plus every\n * consumer override hook, described. Meant for tooling that presents the\n * token set — docs pages, token browsers, forge's CSS-vars panel — not\n * for resolving values at runtime. */\nexport const TOKEN_MANIFEST: readonly TokenManifestEntry[] = [\n { name: '--wzl-gray-50', type: \"color\", group: \"gray\", defaultValue: \"#f5f5f6\", description: \"\", hook: false },\n { name: '--wzl-gray-100', type: \"color\", group: \"gray\", defaultValue: \"#e6e7e9\", description: \"\", hook: false },\n { name: '--wzl-gray-200', type: \"color\", group: \"gray\", defaultValue: \"#c9cbcf\", description: \"\", hook: false },\n { name: '--wzl-gray-300', type: \"color\", group: \"gray\", defaultValue: \"#9ea1a8\", description: \"\", hook: false },\n { name: '--wzl-gray-400', type: \"color\", group: \"gray\", defaultValue: \"#6f737b\", description: \"\", hook: false },\n { name: '--wzl-gray-500', type: \"color\", group: \"gray\", defaultValue: \"#4d5058\", description: \"\", hook: false },\n { name: '--wzl-gray-600', type: \"color\", group: \"gray\", defaultValue: \"#383b42\", description: \"\", hook: false },\n { name: '--wzl-gray-700', type: \"color\", group: \"gray\", defaultValue: \"#25272c\", description: \"\", hook: false },\n { name: '--wzl-gray-800', type: \"color\", group: \"gray\", defaultValue: \"#181a1e\", description: \"\", hook: false },\n { name: '--wzl-gray-900', type: \"color\", group: \"gray\", defaultValue: \"#0e0f12\", description: \"\", hook: false },\n { name: '--wzl-accent-soft', type: \"color\", group: \"accent\", defaultValue: \"#1d1454\", description: \"\", hook: false },\n { name: '--wzl-accent-base', type: \"color\", group: \"accent\", defaultValue: \"#2e1f7a\", description: \"Midnight blue-violet. Deep and saturated; anchors primary actions on light and dark surfaces alike.\", hook: false },\n { name: '--wzl-accent-strong', type: \"color\", group: \"accent\", defaultValue: \"#5841b8\", description: \"\", hook: false },\n { name: '--wzl-secondary-soft', type: \"color\", group: \"secondary\", defaultValue: \"#704e09\", description: \"\", hook: false },\n { name: '--wzl-secondary-base', type: \"color\", group: \"secondary\", defaultValue: \"#dc9d15\", description: \"\", hook: false },\n { name: '--wzl-secondary-strong', type: \"color\", group: \"secondary\", defaultValue: \"#f1cb8d\", description: \"\", hook: false },\n { name: '--wzl-swatch-fuchsia', type: \"color\", group: \"swatch\", defaultValue: \"#f641f7\", description: \"First of ten categorical spot colors for plotting, status and data viz. Take them in sequence: the order is farthest-point over hue, so the first N are as separated as N colors can be (first three 87° apart, all ten 32°). Mode-invariant on purpose — a series keeps its color when the mode flips, which is why they are tuned for a dark surface and clear only 1.5:1 on a light one.\", hook: false },\n { name: '--wzl-swatch-green', type: \"color\", group: \"swatch\", defaultValue: \"#48e628\", description: \"\", hook: false },\n { name: '--wzl-swatch-sky', type: \"color\", group: \"swatch\", defaultValue: \"#36bff2\", description: \"\", hook: false },\n { name: '--wzl-swatch-amber', type: \"color\", group: \"swatch\", defaultValue: \"#e69628\", description: \"\", hook: false },\n { name: '--wzl-swatch-teal', type: \"color\", group: \"swatch\", defaultValue: \"#3ee1cb\", description: \"\", hook: false },\n { name: '--wzl-swatch-red', type: \"color\", group: \"swatch\", defaultValue: \"#f75034\", description: \"\", hook: false },\n { name: '--wzl-swatch-blue', type: \"color\", group: \"swatch\", defaultValue: \"#407ef7\", description: \"\", hook: false },\n { name: '--wzl-swatch-citron', type: \"color\", group: \"swatch\", defaultValue: \"#d5d23a\", description: \"\", hook: false },\n { name: '--wzl-swatch-rose', type: \"color\", group: \"swatch\", defaultValue: \"#fa4590\", description: \"\", hook: false },\n { name: '--wzl-swatch-violet', type: \"color\", group: \"swatch\", defaultValue: \"#955cf9\", description: \"\", hook: false },\n { name: '--wzl-font-size-2xs', type: \"dimension\", group: \"font\", defaultValue: \"9px\", description: \"Shortcut keys and index badges. The floor for chrome text.\", hook: false },\n { name: '--wzl-font-size-xs', type: \"dimension\", group: \"font\", defaultValue: \"10px\", description: \"Tool-button labels under an icon.\", hook: false },\n { name: '--wzl-font-size-sm', type: \"dimension\", group: \"font\", defaultValue: \"11px\", description: \"Chrome labels, status readouts, section headings.\", hook: false },\n { name: '--wzl-font-size-md', type: \"dimension\", group: \"font\", defaultValue: \"13px\", description: \"Controls and body text.\", hook: false },\n { name: '--wzl-font-size-lg', type: \"dimension\", group: \"font\", defaultValue: \"16px\", description: \"Panel and dialog titles.\", hook: false },\n { name: '--wzl-font-size-xl', type: \"dimension\", group: \"font\", defaultValue: \"20px\", description: \"The largest chrome text — a lab or app title.\", hook: false },\n { name: '--wzl-space-1', type: \"dimension\", group: \"space\", defaultValue: \"2px\", description: \"\", hook: false },\n { name: '--wzl-space-2', type: \"dimension\", group: \"space\", defaultValue: \"4px\", description: \"\", hook: false },\n { name: '--wzl-space-3', type: \"dimension\", group: \"space\", defaultValue: \"6px\", description: \"\", hook: false },\n { name: '--wzl-space-4', type: \"dimension\", group: \"space\", defaultValue: \"8px\", description: \"\", hook: false },\n { name: '--wzl-space-5', type: \"dimension\", group: \"space\", defaultValue: \"10px\", description: \"\", hook: false },\n { name: '--wzl-space-6', type: \"dimension\", group: \"space\", defaultValue: \"12px\", description: \"\", hook: false },\n { name: '--wzl-space-7', type: \"dimension\", group: \"space\", defaultValue: \"14px\", description: \"\", hook: false },\n { name: '--wzl-space-8', type: \"dimension\", group: \"space\", defaultValue: \"16px\", description: \"\", hook: false },\n { name: '--wzl-surface', type: \"color\", group: \"surface\", defaultValue: \"#181a1e\", description: \"\", hook: false },\n { name: '--wzl-surface-raised', type: \"color\", group: \"surface\", defaultValue: \"#25272c\", description: \"\", hook: false },\n { name: '--wzl-surface-sunken', type: \"color\", group: \"surface\", defaultValue: \"#0e0f12\", description: \"\", hook: false },\n { name: '--wzl-fg', type: \"color\", group: \"fg\", defaultValue: \"#e6e7e9\", description: \"\", hook: false },\n { name: '--wzl-fg-muted', type: \"color\", group: \"fg\", defaultValue: \"#9ea1a8\", description: \"\", hook: false },\n { name: '--wzl-fg-subtle', type: \"color\", group: \"fg\", defaultValue: \"#6f737b\", description: \"\", hook: false },\n { name: '--wzl-border', type: \"color\", group: \"border\", defaultValue: \"#25272c\", description: \"\", hook: false },\n { name: '--wzl-border-strong', type: \"color\", group: \"border\", defaultValue: \"#6f737b\", description: \"The line that has to be seen: a control's edge, a raised surface's outline. Clears WCAG 1.4.11's 3:1 against every surface in both modes.\", hook: false },\n { name: '--wzl-accent-fg', type: \"color\", group: \"accent\", defaultValue: \"#5841b8\", description: \"Accent for foreground use — text, icons, selected labels drawn on a surface. accent is a fill; the midnight base is too dim to read as text on dark surfaces.\", hook: false },\n { name: '--wzl-secondary-fg', type: \"color\", group: \"secondary\", defaultValue: \"#dc9d15\", description: \"Secondary accent for foreground use: a second voice beside the accent, such as a value the panel derived rather than one the user set. Picked from the ramp so it clears 4.5:1 on the surface in both modes.\", hook: false },\n { name: '--wzl-fg-inverse', type: \"color\", group: \"fg\", defaultValue: \"#0e0f12\", description: \"Text drawn on a filled foreground-colored element (e.g. a slider thumb). Flips with the mode, so it is a semantic, not an alias to a primitive.\", hook: false },\n { name: '--wzl-shadow', type: \"color\", group: \"shadow\", defaultValue: \"rgba(0, 0, 0, 0.6)\", description: \"Elevation. Always darker than any surface — never derived from fg, which is near-white on dark.\", hook: false },\n { name: '--wzl-panel-surface', type: \"color\", group: \"panel\", defaultValue: \"#25272c\", description: \"Fill of a PropertyPanel.\", hook: false },\n { name: '--wzl-panel-border-color', type: \"color\", group: \"panel\", defaultValue: \"#25272c\", description: \"\", hook: false },\n { name: '--wzl-panel-border-style', type: \"string\", group: \"panel\", defaultValue: \"solid\", description: \"\", hook: false },\n { name: '--wzl-panel-border-width', type: \"dimension\", group: \"panel\", defaultValue: \"1px\", description: \"\", hook: false },\n { name: '--wzl-panel-radius', type: \"dimension\", group: \"panel\", defaultValue: \"14px\", description: \"\", hook: false },\n { name: '--wzl-panel-pad', type: \"dimension\", group: \"panel\", defaultValue: \"14px 16px\", description: \"A panel’s padding when no density sets one.\", hook: false },\n { name: '--wzl-panel-blur', type: \"dimension\", group: \"panel\", defaultValue: \"3px\", description: \"\", hook: false },\n { name: '--wzl-panel-tone-mix', type: \"number\", group: \"panel\", defaultValue: \"14%\", description: \"How much of a panel’s tone mixes into its surface.\", hook: false },\n { name: '--wzl-panel-title-font', type: \"fontFamily\", group: \"panel\", defaultValue: \"Oswald, 'Helvetica Neue Condensed', 'Arial Narrow', system-ui, sans-serif\", description: \"\", hook: false },\n { name: '--wzl-panel-title-weight', type: \"fontWeight\", group: \"panel\", defaultValue: \"200\", description: \"\", hook: false },\n { name: '--wzl-panel-title-size', type: \"dimension\", group: \"panel\", defaultValue: \"16px\", description: \"\", hook: false },\n { name: '--wzl-panel-title-case', type: \"string\", group: \"panel\", defaultValue: \"none\", description: \"\", hook: false },\n { name: '--wzl-panel-title-tracking', type: \"dimension\", group: \"panel\", defaultValue: \"0.01em\", description: \"\", hook: false },\n { name: '--wzl-panel-title-color', type: \"color\", group: \"panel\", defaultValue: \"#e6e7e9\", description: \"\", hook: false },\n { name: '--wzl-panel-title-inset', type: \"dimension\", group: \"panel\", defaultValue: \"0\", description: \"\", hook: false },\n { name: '--wzl-stance-scope-border-width', type: \"dimension\", group: \"stance\", defaultValue: \"0\", description: \"\", hook: false },\n { name: '--wzl-stance-scope-radius', type: \"dimension\", group: \"stance\", defaultValue: \"8px\", description: \"\", hook: false },\n { name: '--wzl-stance-scope-tone-mix', type: \"number\", group: \"stance\", defaultValue: \"22%\", description: \"\", hook: false },\n { name: '--wzl-stance-scope-nested-radius', type: \"dimension\", group: \"stance\", defaultValue: \"6px\", description: \"\", hook: false },\n { name: '--wzl-stance-scope-nested-surface', type: \"color\", group: \"stance\", defaultValue: \"#181a1e\", description: \"A scope panel inside another sits back into it.\", hook: false },\n { name: '--wzl-stance-aside-surface', type: \"color\", group: \"stance\", defaultValue: \"transparent\", description: \"\", hook: false },\n { name: '--wzl-stance-aside-border-color', type: \"color\", group: \"stance\", defaultValue: \"rgba(230, 231, 233, 0.1)\", description: \"\", hook: false },\n { name: '--wzl-stance-aside-blur', type: \"dimension\", group: \"stance\", defaultValue: \"0px\", description: \"\", hook: false },\n { name: '--wzl-stance-aside-title-color', type: \"color\", group: \"stance\", defaultValue: \"#6f737b\", description: \"\", hook: false },\n { name: '--wzl-stance-advanced-title-color', type: \"color\", group: \"stance\", defaultValue: \"#6f737b\", description: \"\", hook: false },\n { name: '--wzl-stance-debug-border-style', type: \"string\", group: \"stance\", defaultValue: \"dashed\", description: \"\", hook: false },\n { name: '--wzl-stance-debug-title-font', type: \"fontFamily\", group: \"stance\", defaultValue: \"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace\", description: \"\", hook: false },\n { name: '--wzl-stance-debug-title-case', type: \"string\", group: \"stance\", defaultValue: \"none\", description: \"\", hook: false },\n { name: '--wzl-stance-danger-tone', type: \"color\", group: \"stance\", defaultValue: \"#d94a3f\", description: \"\", hook: false },\n { name: '--wzl-stance-danger-border-color', type: \"color\", group: \"stance\", defaultValue: \"#d94a3f\", description: \"\", hook: false },\n { name: '--wzl-stance-danger-title-color', type: \"color\", group: \"stance\", defaultValue: \"#d94a3f\", description: \"\", hook: false },\n { name: '--wzl-stance-notice-tone', type: \"color\", group: \"stance\", defaultValue: \"#2e1f7a\", description: \"\", hook: false },\n { name: '--wzl-stance-notice-tone-mix', type: \"number\", group: \"stance\", defaultValue: \"8%\", description: \"\", hook: false },\n { name: '--wzl-stance-important-border-color', type: \"color\", group: \"stance\", defaultValue: \"#5841b8\", description: \"\", hook: false },\n { name: '--wzl-stance-important-title-color', type: \"color\", group: \"stance\", defaultValue: \"#5841b8\", description: \"\", hook: false },\n { name: '--wzl-stance-preview-pad', type: \"dimension\", group: \"stance\", defaultValue: \"0\", description: \"\", hook: false },\n { name: '--wzl-stance-preview-title-size', type: \"dimension\", group: \"stance\", defaultValue: \"10px\", description: \"\", hook: false },\n { name: '--wzl-stance-preview-title-case', type: \"string\", group: \"stance\", defaultValue: \"none\", description: \"\", hook: false },\n { name: '--wzl-stance-preview-title-inset', type: \"dimension\", group: \"stance\", defaultValue: \"6px 10px 0\", description: \"\", hook: false },\n { name: '--wzl-danger-base', type: \"color\", group: \"status\", defaultValue: \"#d94a3f\", description: \"\", hook: false },\n { name: '--wzl-warning-base', type: \"color\", group: \"status\", defaultValue: \"#d99a3f\", description: \"\", hook: false },\n { name: '--wzl-success-base', type: \"color\", group: \"status\", defaultValue: \"#2ec27e\", description: \"\", hook: false },\n { name: '--wzl-fg-on-accent', type: \"color\", group: \"fg\", defaultValue: \"#f5f5f6\", description: \"\", hook: false },\n { name: '--wzl-line-subtle', type: \"color\", group: \"line\", defaultValue: \"rgba(230, 231, 233, 0.1)\", description: \"Barely-there separators (table rows).\", hook: false },\n { name: '--wzl-line', type: \"color\", group: \"line\", defaultValue: \"rgba(230, 231, 233, 0.2)\", description: \"Primary gridlines on sunken surfaces.\", hook: false },\n { name: '--wzl-line-strong', type: \"color\", group: \"line\", defaultValue: \"rgba(230, 231, 233, 0.4)\", description: \"Axes and emphasized dividers.\", hook: false },\n { name: '--wzl-curve-color', type: \"color\", group: \"curve\", defaultValue: \"#5841b8\", description: \"Drawn data curves. Routes through the bright accent because accent-base is too dim on sunken surfaces.\", hook: false },\n { name: '--wzl-accent', type: \"color\", group: \"accent\", defaultValue: \"#2e1f7a\", description: \"\", hook: false },\n { name: '--wzl-accent-hover', type: \"color\", group: \"accent\", defaultValue: \"#5841b8\", description: \"\", hook: false },\n { name: '--wzl-secondary', type: \"color\", group: \"secondary\", defaultValue: \"#dc9d15\", description: \"Honey amber in dark mode and teal in light, where a darkened amber reads as brown. A fill; use secondary-fg for text.\", hook: false },\n { name: '--wzl-danger', type: \"color\", group: \"status\", defaultValue: \"#d94a3f\", description: \"\", hook: false },\n { name: '--wzl-warning', type: \"color\", group: \"status\", defaultValue: \"#d99a3f\", description: \"\", hook: false },\n { name: '--wzl-success', type: \"color\", group: \"status\", defaultValue: \"#2ec27e\", description: \"\", hook: false },\n { name: '--wzl-focus-ring', type: \"color\", group: \"focus\", defaultValue: \"#5841b8\", description: \"\", hook: false },\n { name: '--wzl-glass-tint', type: \"color\", group: \"glass\", defaultValue: \"#2e1f7a\", description: \"Frosted-glass tint. Components compose it as color-mix(in srgb, var(--wzl-glass-tint) 78%, transparent) with backdrop-filter: blur(3px).\", hook: false },\n { name: '--wzl-surface-hover', type: \"color\", group: \"surface\", defaultValue: \"rgba(230, 231, 233, 0.1)\", description: \"Hover wash over a raised surface. Same formula as line-subtle, different job — do not collapse them.\", hook: false },\n { name: '--wzl-surface-pressed', type: \"color\", group: \"surface\", defaultValue: \"rgba(230, 231, 233, 0.18)\", description: \"Pressed wash over a raised surface.\", hook: false },\n { name: '--wzl-radius-sm', type: \"dimension\", group: \"radius\", defaultValue: \"3px\", description: \"\", hook: false },\n { name: '--wzl-radius-md', type: \"dimension\", group: \"radius\", defaultValue: \"5px\", description: \"\", hook: false },\n { name: '--wzl-radius-lg', type: \"dimension\", group: \"radius\", defaultValue: \"14px\", description: \"\", hook: false },\n { name: '--wzl-radius-pill', type: \"dimension\", group: \"radius\", defaultValue: \"999px\", description: \"Fully rounded ends — segmented controls, progress tracks.\", hook: false },\n { name: '--wzl-border-w', type: \"dimension\", group: \"border\", defaultValue: \"1px\", description: \"\", hook: false },\n { name: '--wzl-line-width', type: \"dimension\", group: \"line\", defaultValue: \"2px\", description: \"Structural lines — gridlines, dividers, axes.\", hook: false },\n { name: '--wzl-curve-width', type: \"dimension\", group: \"curve\", defaultValue: \"3px\", description: \"Drawn data curves. Heavier than structural lines so data reads as primary content.\", hook: false },\n { name: '--wzl-tb-height', type: \"dimension\", group: \"tb\", defaultValue: \"28px\", description: \"Height of a horizontal toolbar strip (ButtonBar, OptionsBar, ToolOptionsBar). Taller than control-h so the controls inside a strip are not flush with its edges.\", hook: false },\n { name: '--wzl-control-h-xs', type: \"dimension\", group: \"control\", defaultValue: \"18px\", description: \"Height of the smallest interactive control -- a stepper, a keycap, a swatch button in a dense row. The rank below control-h-sm.\", hook: false },\n { name: '--wzl-control-h-sm', type: \"dimension\", group: \"control\", defaultValue: \"20px\", description: \"Height of a control in a dense inspector -- a Properties field, a small Button. The rank below control-h, which sizes a standalone control.\", hook: false },\n { name: '--wzl-control-h', type: \"dimension\", group: \"control\", defaultValue: \"24px\", description: \"Height of an interactive control — button, input, select, segmented control. Distinct from tb-height, which sizes the strip a row of them sits in.\", hook: false },\n { name: '--wzl-icon-button-size', type: \"dimension\", group: \"icon\", defaultValue: \"22px\", description: \"Side of a square icon button -- a dialog close, a row remove, a field clear. Smaller than control-h because it carries a glyph rather than a label, and square, so it sizes both axes.\", hook: false },\n { name: '--wzl-slider-track-h', type: \"dimension\", group: \"slider\", defaultValue: \"4px\", description: \"Height of a linear range track. The kit's single-thumb ranges all wear this; Slider's default 24px canvas track does not.\", hook: false },\n { name: '--wzl-slider-thumb-size', type: \"dimension\", group: \"slider\", defaultValue: \"8px\", description: \"Diameter of a linear range thumb.\", hook: false },\n { name: '--wzl-slider-track-mix', type: \"dimension\", group: \"slider\", defaultValue: \"18%\", description: \"Accent proportion in a range track, as a color-mix percentage — not a color. Mixed into a real property, never into another custom property.\", hook: false },\n { name: '--wzl-slider-thumb-mix', type: \"dimension\", group: \"slider\", defaultValue: \"70%\", description: \"Accent proportion in a range thumb, as a color-mix percentage — not a color.\", hook: false },\n { name: '--wzl-handle-size', type: \"dimension\", group: \"handle\", defaultValue: \"9px\", description: \"Edge of a draggable handle on a plot or timeline — a keyframe diamond, a timeline key, an event mark. The default rank; -sm and -lg are the two deliberate departures from it.\", hook: false },\n { name: '--wzl-handle-size-sm', type: \"dimension\", group: \"handle\", defaultValue: \"7px\", description: \"A handle that is drawn but not draggable — a locked or pinned point. Smaller so it reads as inert next to a live one.\", hook: false },\n { name: '--wzl-handle-size-lg', type: \"dimension\", group: \"handle\", defaultValue: \"10px\", description: \"A handle that is a category of its own rather than one of a row — a curve's endpoint. Larger so it separates from the handles it sits in line with.\", hook: false },\n { name: '--wzl-checker-a', type: \"color\", group: \"checker\", defaultValue: \"#25272c\", description: \"One square of the transparency checker drawn under a paint that is empty, mixed or translucent. Paint it as repeating-conic-gradient(var(--wzl-checker-a) 0% 25%, var(--wzl-checker-b) 0% 50%) 50% / var(--wzl-checker-size) var(--wzl-checker-size).\", hook: false },\n { name: '--wzl-checker-b', type: \"color\", group: \"checker\", defaultValue: \"#181a1e\", description: \"The other square of the transparency checker.\", hook: false },\n { name: '--wzl-checker-size', type: \"dimension\", group: \"checker\", defaultValue: \"8px\", description: \"Edge of one repeat of the transparency checker: two squares by two.\", hook: false },\n { name: '--wzl-workspace-surface', type: \"color\", group: \"workspace\", defaultValue: \"#0e0f12\", description: \"Ground of a canvas app's workspace — the area around the document page.\", hook: false },\n { name: '--wzl-workspace-line', type: \"color\", group: \"workspace\", defaultValue: \"rgba(230, 231, 233, 0.1)\", description: \"Marks drawn over workspace-surface, such as its diagonal stripes, so the page reads as the thing on top.\", hook: false },\n { name: '--wzl-field-pad-x', type: \"dimension\", group: \"field\", defaultValue: \"8px\", description: \"Horizontal padding inside a boxed field. Pairs with --wzl-field-h, which is a container override and has no :root default.\", hook: false },\n { name: '--wzl-glass-blur', type: \"dimension\", group: \"glass\", defaultValue: \"3px\", description: \"Backdrop blur radius for frosted surfaces. Pairs with glass-tint.\", hook: false },\n { name: '--wzl-font-size', type: \"dimension\", group: \"font\", defaultValue: \"13px\", description: \"Controls and body text.\", hook: false },\n { name: '--wzl-tracking-none', type: \"dimension\", group: \"tracking\", defaultValue: \"0\", description: \"\", hook: false },\n { name: '--wzl-tracking-wide', type: \"dimension\", group: \"tracking\", defaultValue: \"0.06em\", description: \"Uppercase section headings.\", hook: false },\n { name: '--wzl-tracking-wider', type: \"dimension\", group: \"tracking\", defaultValue: \"0.08em\", description: \"Uppercase at 11px and below.\", hook: false },\n { name: '--wzl-z-toolbar', type: \"number\", group: \"z\", defaultValue: \"10\", description: \"\", hook: false },\n { name: '--wzl-z-overlay', type: \"number\", group: \"z\", defaultValue: \"20\", description: \"\", hook: false },\n { name: '--wzl-z-modal', type: \"number\", group: \"z\", defaultValue: \"30\", description: \"\", hook: false },\n { name: '--wzl-leading-tight', type: \"number\", group: \"leading\", defaultValue: \"1\", description: \"Single-line controls; the box sets the height.\", hook: false },\n { name: '--wzl-leading-snug', type: \"number\", group: \"leading\", defaultValue: \"1.2\", description: \"Headings and two-line labels.\", hook: false },\n { name: '--wzl-leading', type: \"number\", group: \"leading\", defaultValue: \"1.4\", description: \"Body and anything that wraps.\", hook: false },\n { name: '--wzl-backdrop', type: \"gradient\", group: \"backdrop\", defaultValue: \"none\", description: \"Layered backdrop fill for a page or lab root. `none` here; a theme with a signature background sets it.\", hook: false },\n { name: '--wzl-motion-fast', type: \"duration\", group: \"motion\", defaultValue: \"120ms\", description: \"Micro-interactions — hover, focus, pressed.\", hook: false },\n { name: '--wzl-motion-medium', type: \"duration\", group: \"motion\", defaultValue: \"240ms\", description: \"Entrances and exits — toasts, popovers, panels.\", hook: false },\n { name: '--wzl-ease-in-cubic', type: \"cubicBezier\", group: \"ease\", defaultValue: \"cubic-bezier(0.32, 0, 0.67, 0)\", description: \"\", hook: false },\n { name: '--wzl-ease-out-cubic', type: \"cubicBezier\", group: \"ease\", defaultValue: \"cubic-bezier(0.33, 1, 0.68, 1)\", description: \"\", hook: false },\n { name: '--wzl-ease-in-out-cubic', type: \"cubicBezier\", group: \"ease\", defaultValue: \"cubic-bezier(0.65, 0, 0.35, 1)\", description: \"\", hook: false },\n { name: '--wzl-ease-out-back', type: \"cubicBezier\", group: \"ease\", defaultValue: \"cubic-bezier(0.34, 1.56, 0.64, 1)\", description: \"\", hook: false },\n { name: '--wzl-font-ui', type: \"fontFamily\", group: \"font\", defaultValue: \"Oswald, 'Helvetica Neue Condensed', 'Arial Narrow', system-ui, sans-serif\", description: \"Condensed UI/display face. The heavier cuts get blocky at any size, so the weight tokens stay in the 200-400 range.\", hook: false },\n { name: '--wzl-font-display', type: \"fontFamily\", group: \"font\", defaultValue: \"Oswald, 'Helvetica Neue Condensed', 'Arial Narrow', system-ui, sans-serif\", description: \"\", hook: false },\n { name: '--wzl-font-body', type: \"fontFamily\", group: \"font\", defaultValue: \"Inter, system-ui, -apple-system, 'Segoe UI', sans-serif\", description: \"\", hook: false },\n { name: '--wzl-font-mono', type: \"fontFamily\", group: \"font\", defaultValue: \"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace\", description: \"\", hook: false },\n { name: '--wzl-font-weight-light', type: \"fontWeight\", group: \"font\", defaultValue: \"200\", description: \"\", hook: false },\n { name: '--wzl-font-weight-normal', type: \"fontWeight\", group: \"font\", defaultValue: \"300\", description: \"\", hook: false },\n { name: '--wzl-font-weight-medium', type: \"fontWeight\", group: \"font\", defaultValue: \"350\", description: \"\", hook: false },\n { name: '--wzl-font-weight-bold', type: \"fontWeight\", group: \"font\", defaultValue: \"400\", description: \"\", hook: false },\n { name: '--wzl-space-xs', type: \"dimension\", group: \"space\", defaultValue: \"4px\", description: \"Alias for space-2. The t-shirt names name every other rung of the ladder.\", hook: false },\n { name: '--wzl-space-sm', type: \"dimension\", group: \"space\", defaultValue: \"8px\", description: \"Alias for space-4. The t-shirt names name every other rung of the ladder.\", hook: false },\n { name: '--wzl-space-md', type: \"dimension\", group: \"space\", defaultValue: \"12px\", description: \"Alias for space-6. The t-shirt names name every other rung of the ladder.\", hook: false },\n { name: '--wzl-space-lg', type: \"dimension\", group: \"space\", defaultValue: \"16px\", description: \"Alias for space-8. The t-shirt names name every other rung of the ladder.\", hook: false },\n { name: '--wzl-disclosure-fill', type: \"color\", group: \"disclosure\", defaultValue: \"var(--wzl-accent-fg)\", description: \"Fill of a Disclosure’s fold mark.\", hook: true },\n { name: '--wzl-disclosure-gap', type: \"dimension\", group: \"disclosure\", defaultValue: \"4px\", description: \"Gap between a Disclosure’s twisty and its label.\", hook: true },\n { name: '--wzl-disclosure-target', type: \"dimension\", group: \"disclosure\", defaultValue: \"20px\", description: \"Hit-target square of a Disclosure twisty, and the twisty column of a LayerList row.\", hook: true },\n { name: '--wzl-input-surface', type: \"color\", group: \"input\", defaultValue: \"var(--wzl-surface-sunken)\", description: \"Surface a text Input’s frame sits on. Set it on any container whose own background is the default — a sunken rail or panel — where an unset field is the same color as what is behind it.\", hook: true },\n { name: '--wzl-number-field-width', type: \"dimension\", group: \"number\", defaultValue: \"9ch\", description: \"Width of a NumberField’s input.\", hook: true },\n { name: '--wzl-params-label-align', type: \"string\", group: \"params\", defaultValue: \"start\", description: \"Text alignment of row labels in PropertyPanel, Prefs and labkit’s ControlPanel.\", hook: true },\n { name: '--wzl-params-label-case', type: \"string\", group: \"params\", defaultValue: \"uppercase\", description: \"text-transform of every label and title in PropertyPanel, Prefs and labkit’s ControlPanel.\", hook: true },\n { name: '--wzl-params-label-tracking', type: \"dimension\", group: \"params\", defaultValue: \"var(--wzl-tracking-wide)\", description: \"Letter spacing of every label and title in PropertyPanel, Prefs and labkit’s ControlPanel. Unset, rows take --wzl-tracking-wide and titles --wzl-tracking-wider.\", hook: true },\n { name: '--wzl-params-label-width', type: \"dimension\", group: \"params\", defaultValue: \"auto\", description: \"Inline size of row labels in PropertyPanel, Prefs and labkit’s ControlPanel.\", hook: true },\n { name: '--wzl-prefs-column-width', type: \"dimension\", group: \"prefs\", defaultValue: \"300px\", description: \"Width of the Prefs category column.\", hook: true },\n { name: '--wzl-prefs-rail-width', type: \"dimension\", group: \"prefs\", defaultValue: \"216px\", description: \"Width of the Prefs navigation rail.\", hook: true },\n { name: '--wzl-prop-number-width', type: \"dimension\", group: \"prop\", defaultValue: \"9ch\", description: \"Width of a numeric field in the Properties panel.\", hook: true },\n { name: '--wzl-prop-row-h', type: \"dimension\", group: \"prop\", defaultValue: \"20px\", description: \"Floor under every Properties row, whatever control it holds. Unset, it is the panel’s own field height, so it follows density — 20px at the default one.\", hook: true },\n { name: '--wzl-prop-text-width', type: \"dimension\", group: \"prop\", defaultValue: \"16ch\", description: \"Width of a text field in the Properties panel.\", hook: true },\n { name: '--wzl-property-readout-w', type: \"dimension\", group: \"property\", defaultValue: \"calc(4.5ch + 2px)\", description: \"Width of a Properties row’s value readout — four digits, so the controls beside a column of readouts end on one line. A range whose widest value needs more widens its own readout.\", hook: true },\n { name: '--wzl-select-border', type: \"border\", group: \"select\", defaultValue: \"1px solid var(--wzl-border)\", description: \"Border of a Select’s trigger. Unset, a boxed trigger draws --wzl-border and a bare one a transparent border of the same width.\", hook: true },\n { name: '--wzl-select-fg', type: \"color\", group: \"select\", defaultValue: \"var(--wzl-fg)\", description: \"Text color of a Select’s trigger.\", hook: true },\n { name: '--wzl-swatch-size', type: \"dimension\", group: \"swatch\", defaultValue: \"28px\", description: \"Minimum cell of a swatch grid — PatternPicker, and any panel laying swatches out the same way.\", hook: true },\n { name: '--wzl-timeline-label-w', type: \"dimension\", group: \"timeline\", defaultValue: \"120px\", description: \"Width of the Timeline’s track-label gutter.\", hook: true },\n { name: '--wzl-timeline-value-axis-w', type: \"dimension\", group: \"timeline\", defaultValue: \"32px\", description: \"Width reserved for the Timeline’s value axis.\", hook: true },\n { name: '--wzl-tree-indent', type: \"dimension\", group: \"tree\", defaultValue: \"calc(var(--wzl-control-h-xs) + var(--wzl-space-2))\", description: \"Indent of each Tree level. Unset, it is one twisty and one gap, so a child’s twisty sits under its parent’s label.\", hook: true },\n];\n","import { TOKEN_MANIFEST } from './generated/manifest';\nimport type { ResolvedTheme } from './resolveTheme';\nimport type { TokenName } from './generated/themes';\n\nconst DEFAULTS = new Map<string, string>(TOKEN_MANIFEST.map((t) => [t.name, t.defaultValue]));\n\n/**\n * A px-valued token as a number, for code that draws rather than styles —\n * SVG geometry attributes, canvas, WebGL. Pass `resolved` (from\n * `useTheme().resolved`) where a live theme override must reach the drawing;\n * without it the built-in theme's value is used, which is static and costs no\n * style resolution.\n *\n * Throws rather than guessing: a token that is not a plain px length has no\n * number, and silently returning 0 collapses whatever it sized.\n */\nexport function tokenPx(name: TokenName, resolved?: ResolvedTheme): number {\n const raw = resolved?.[name] ?? DEFAULTS.get(name);\n const m = /^(-?\\d*\\.?\\d+)px$/.exec((raw ?? '').trim());\n if (!m) throw new Error(`tokenPx: ${name} is not a px length (${raw ?? 'unknown token'})`);\n return Number(m[1]);\n}\n","import { ALPHA_EXT, type FlatTokens, type RawToken, type TokenValue } from './types';\n\ninterface DtcgToken {\n $value: TokenValue;\n $type?: string;\n $description?: string;\n $extensions?: Record<string, unknown>;\n}\n\nconst isToken = (v: unknown): v is DtcgToken =>\n typeof v === 'object' && v !== null && '$value' in v;\n\n/**\n * Collapse a DTCG document into flat token names.\n *\n * Groups exist only to carry `$type`; they contribute nothing to the name, so\n * `color.fg-muted` becomes `fg-muted` and in turn `--wzl-fg-muted`. This shape\n * is forced by the token set: `--wzl-accent` and `--wzl-accent-base` are both\n * real tokens, and DTCG forbids a token that is also a group.\n */\nexport function flattenTokens(doc: Record<string, unknown>): FlatTokens {\n const out: FlatTokens = {};\n\n for (const [groupName, group] of Object.entries(doc)) {\n if (groupName.startsWith('$')) continue;\n if (typeof group !== 'object' || group === null) continue;\n\n const g = group as Record<string, unknown> & { $type?: string };\n const groupType = g.$type;\n\n for (const [leaf, node] of Object.entries(g)) {\n if (leaf.startsWith('$')) continue;\n if (!isToken(node)) continue;\n\n const type = node.$type ?? groupType;\n if (!type) {\n throw new Error(`Token \"${leaf}\" has no $type and its group \"${groupName}\" declares none`);\n }\n if (leaf in out) {\n throw new Error(`Duplicate token name \"${leaf}\" — leaf keys must be unique across type groups`);\n }\n\n const alphaRaw = node.$extensions?.[ALPHA_EXT];\n const token: RawToken = {\n type,\n value: node.$value,\n alpha: typeof alphaRaw === 'number' ? alphaRaw : undefined,\n description: node.$description,\n };\n out[leaf] = token;\n }\n }\n\n return out;\n}\n","import { mergeAxes, type AxisDef, type AxisDefs, type Selection, type Varying } from './axes';\nimport { AXES_EXT, overrideKey, type DtcgAxesExtension } from './dtcg/axesExtension';\nimport { flattenTokens } from './dtcg/flatten';\nimport type { FlatTokens, RawToken } from './dtcg/types';\nimport { themeAxes } from './resolveTheme';\nimport { weaselTheme, type Theme } from './theme';\n\ninterface DtcgDocument {\n name?: unknown;\n defaultMode?: unknown;\n extends?: Theme | null;\n primitives?: Record<string, unknown>;\n modes?: Record<string, Record<string, unknown>>;\n $extensions?: Record<string, unknown>;\n}\n\ninterface Layer {\n readonly primitives: FlatTokens;\n readonly modes: Record<string, FlatTokens>;\n}\n\nconst isRecord = (v: unknown): v is Record<string, unknown> => typeof v === 'object' && v !== null && !Array.isArray(v);\n\nfunction readLayer(src: { primitives?: unknown; modes?: unknown }): Layer {\n const modes = isRecord(src.modes) ? src.modes : {};\n return {\n primitives: flattenTokens(isRecord(src.primitives) ? src.primitives : {}),\n modes: Object.fromEntries(Object.entries(modes).map(([m, g]) => [m, flattenTokens(isRecord(g) ? g : {})])),\n };\n}\n\nfunction readAxesExtension(raw: unknown): DtcgAxesExtension | undefined {\n if (raw === undefined) return undefined;\n if (!isRecord(raw) || !isRecord(raw.axes)) throw new Error(`DTCG \"$extensions.${AXES_EXT}\" needs an \"axes\" object`);\n return {\n axes: raw.axes as AxisDefs,\n varies: (isRecord(raw.varies) ? raw.varies : {}) as DtcgAxesExtension['varies'],\n overrides: (isRecord(raw.overrides) ? raw.overrides : {}) as DtcgAxesExtension['overrides'],\n };\n}\n\n/**\n * Build a `Theme` from a DTCG document — the interchange path, for tokens\n * exported by a design tool rather than authored in TS. A token a mode leaves\n * out takes the document's primitive of the same name, or else the base theme's.\n * Axes besides mode come from `$extensions[\"com.weasel.axes\"]`, the encoding\n * `toDTCG` writes; a document without it loads with mode as its only axis.\n */\nexport function loadDTCG(doc: DtcgDocument): Theme {\n if (typeof doc.name !== 'string' || doc.name === '') {\n throw new Error('DTCG document needs a string \"name\"');\n }\n const base = doc.extends === undefined ? weaselTheme : doc.extends;\n const ext = readAxesExtension(doc.$extensions?.[AXES_EXT]);\n const plain = readLayer(doc);\n const overrides = Object.fromEntries(Object.entries(ext?.overrides ?? {}).map(([k, l]) => [k, readLayer(l)]));\n const modeNames = [...new Set([plain, ...Object.values(overrides)].flatMap((l) => Object.keys(l.modes)))];\n\n /** A token's value within one layer: varying by mode if any mode names it. */\n const tokenIn = (layer: Layer, name: string): Varying<RawToken> | undefined => {\n if (!modeNames.some((m) => layer.modes[m]?.[name])) return layer.primitives[name];\n const branch: Record<string, unknown> = { by: 'mode' };\n for (const m of modeNames) {\n const t = layer.modes[m]?.[name] ?? layer.primitives[name];\n if (t) branch[m] = t;\n }\n return branch as Varying<RawToken>;\n };\n\n const inherited = base ? themeAxes(base).mode?.default : undefined;\n const defaultMode = typeof doc.defaultMode === 'string' ? doc.defaultMode : (ext?.axes.mode?.default ?? inherited ?? 'dark');\n const modeAxis: AxisDef = {\n default: defaultMode,\n values: Object.fromEntries(modeNames.map((m) => [m, ext?.axes.mode?.values[m] ?? {}])),\n };\n const axes: Record<string, AxisDef> = {};\n for (const [name, def] of Object.entries(ext?.axes ?? { mode: modeAxis })) {\n if (name !== 'mode') axes[name] = def;\n else if (modeNames.length > 0) axes.mode = modeAxis;\n }\n if (modeNames.length > 0) axes.mode ??= modeAxis;\n const all = mergeAxes(base ? themeAxes(base) : {}, axes);\n\n /** Rebuild a token's tree over the axes it varies by, one override layer per leaf. */\n const nest = (name: string, vary: readonly string[], combo: Selection): Varying<RawToken> | undefined => {\n if (vary.length === 0) {\n const key = overrideKey(all, combo);\n const layer = key === '' ? plain : overrides[key];\n return layer && tokenIn(layer, name);\n }\n const [axis, ...rest] = vary;\n const out: Record<string, unknown> = { by: axis };\n let any = false;\n for (const value of Object.keys(all[axis].values)) {\n const v = nest(name, rest, { ...combo, [axis]: value });\n if (v !== undefined) {\n out[value] = v;\n any = true;\n }\n }\n return any ? (out as Varying<RawToken>) : undefined;\n };\n\n const tokens: Record<string, Varying<RawToken>> = {};\n const names = new Set([...Object.keys(plain.primitives), ...modeNames.flatMap((m) => Object.keys(plain.modes[m] ?? {}))]);\n for (const name of Object.keys(ext?.varies ?? {})) names.add(name);\n for (const name of names) {\n const vary = (ext?.varies[name] ?? []).filter((a) => a in all);\n const v = vary.length > 0 ? nest(name, vary, {}) : tokenIn(plain, name);\n if (v !== undefined) tokens[name] = v;\n }\n\n return { name: doc.name, extends: base, axes, tokens };\n}\n","/**\n * The vocabulary of stances, and the slots a theme styles a stanced surface with.\n *\n * A stance looks the same on every surface that takes one. A surface reads\n * `--wzl-stance-<stance>-<slot>` first — a nested panel\n * `--wzl-stance-<stance>-nested-<slot>` before that — and falls back to its\n * own base look, so a theme declares only the slots where a stance differs and\n * every other name here is read, with its fallback, and declared by nothing.\n * A panel's base look is itself theme slots, `--wzl-panel-<slot>`.\n */\n\n/** What kind of content a surface holds — a class of content, never a position. */\nexport const STANCES = ['scope', 'aside', 'advanced', 'debug', 'danger', 'notice', 'important', 'preview'] as const;\n\nexport type Stance = (typeof STANCES)[number];\n\n/** One styleable property of a stanced surface. */\nexport interface StanceSlot {\n readonly name: string;\n /** What it drives, for tooling. */\n readonly drives: string;\n}\n\nexport const STANCE_SLOTS: readonly StanceSlot[] = [\n { name: 'surface', drives: 'background' },\n { name: 'border-color', drives: 'border-color' },\n { name: 'border-style', drives: 'border-style' },\n { name: 'border-width', drives: 'border-width' },\n { name: 'radius', drives: 'border-radius' },\n { name: 'pad', drives: 'padding' },\n { name: 'blur', drives: 'backdrop-filter' },\n { name: 'tone-mix', drives: 'how much of the tone mixes into the surface' },\n { name: 'tone', drives: 'the tone a surface takes when it names none' },\n // Only a surface that names its own tone recolors its controls.\n { name: 'accent', drives: 'the accent the controls inside a surface with a tone take; unset, the tone' },\n { name: 'title-font', drives: 'font-family' },\n { name: 'title-weight', drives: 'font-weight' },\n { name: 'title-size', drives: 'font-size' },\n { name: 'title-case', drives: 'text-transform' },\n { name: 'title-tracking', drives: 'letter-spacing' },\n { name: 'title-color', drives: 'color' },\n { name: 'title-inset', drives: 'the title’s padding' },\n];\n\n/** Every stance-slot name, `--wzl-`-prefixed, nested variants included. */\nexport function stanceSlotNames(): string[] {\n return STANCES.flatMap((stance) =>\n STANCE_SLOTS.flatMap((slot) => [`--wzl-stance-${stance}-${slot.name}`, `--wzl-stance-${stance}-nested-${slot.name}`]),\n );\n}\n\n/** What `resolveStanceSlots` resolves a surface against, besides its tokens. */\nexport interface StanceLookup<S extends string> {\n readonly stance?: Stance;\n /** The surface sits inside one of its own kind, and reads `-nested-<slot>` first. */\n readonly nested?: boolean;\n /** A stanced surface's fallback, where it differs from `base`. */\n readonly stanced?: Partial<Readonly<Record<S, string>>>;\n}\n\n/**\n * A stanced surface's look, for one drawn without the cascade — a canvas\n * surface reading a resolved theme. The same lookup the generated CSS makes:\n * `--wzl-stance-<stance>-<slot>`, then the stanced fallback, then `base`.\n * `base` holds final values, one per slot the surface draws.\n *\n * The tone is the caller's: a surface that names one mixes it into\n * `surface` at `tone-mix`; one that names none takes the `tone` slot, which\n * falls back to `surface` so mixing it changes nothing.\n */\nexport function resolveStanceSlots<S extends string>(\n tokens: Readonly<Record<string, string>>,\n base: Readonly<Record<S, string>>,\n { stance, nested, stanced }: StanceLookup<S> = {},\n): Record<S, string> {\n const out: Record<S, string> = { ...base };\n if (stance === undefined) return out;\n for (const slot of Object.keys(base) as S[]) {\n const own = tokens[`--wzl-stance-${stance}-${slot}`];\n const inner = nested ? tokens[`--wzl-stance-${stance}-nested-${slot}`] : undefined;\n // A stance's own tone falls back to the surface, never to the surface's base tone.\n const fallback = slot === 'tone' ? (base as Record<string, string>).surface ?? base[slot] : stanced?.[slot] ?? base[slot];\n out[slot] = inner ?? own ?? fallback;\n }\n return out;\n}\n"]}
|
package/dist/react.d.ts
CHANGED
|
@@ -1,19 +1,57 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { a as Theme, S as Selection, o as ResolvedTheme, v as ColorList } from './definition-DLdTdFWs.js';
|
|
3
|
+
import { a as ColorModePreference, C as ColorMode } from './colorMode-CoklZomJ.js';
|
|
4
|
+
export { i as isColorModePreference } from './colorMode-CoklZomJ.js';
|
|
4
5
|
|
|
5
|
-
/**
|
|
6
|
-
*
|
|
6
|
+
/**
|
|
7
|
+
* Resolves a preference to the mode a `ThemeProvider` selection takes.
|
|
8
|
+
* `'auto'` subscribes to the OS setting and follows it live; an explicit
|
|
9
|
+
* choice opts out of the subscription entirely.
|
|
10
|
+
*/
|
|
11
|
+
declare function useResolvedColorMode(preference: ColorModePreference): ColorMode;
|
|
12
|
+
/** The part of `Storage` {@link useColorModePreference} reads and writes. */
|
|
13
|
+
type ColorModeStorage = Pick<Storage, 'getItem' | 'setItem'>;
|
|
14
|
+
/** Options for {@link useColorModePreference}. */
|
|
15
|
+
interface ColorModePreferenceOptions {
|
|
16
|
+
/** Where the choice is remembered. Unset, it lasts as long as the component. */
|
|
17
|
+
readonly storageKey?: string;
|
|
18
|
+
/** The store `storageKey` names a slot in. Defaults to `localStorage`. */
|
|
19
|
+
readonly storage?: ColorModeStorage;
|
|
20
|
+
/** The preference before the user has chosen one. Defaults to `'auto'`. */
|
|
21
|
+
readonly defaultPreference?: ColorModePreference;
|
|
22
|
+
}
|
|
23
|
+
/** What {@link useColorModePreference} returns. */
|
|
24
|
+
interface ColorModePreferenceState {
|
|
25
|
+
readonly preference: ColorModePreference;
|
|
26
|
+
readonly setPreference: (next: ColorModePreference) => void;
|
|
27
|
+
/** `preference` resolved against the OS — what to put in the theme's `mode` axis. */
|
|
28
|
+
readonly mode: ColorMode;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A user's color-mode choice, optionally remembered across loads, and the mode
|
|
32
|
+
* it resolves to. Storage that is missing or throws (a private window, blocked
|
|
33
|
+
* site data) degrades to an unremembered choice rather than an error.
|
|
34
|
+
*/
|
|
35
|
+
declare function useColorModePreference(options?: ColorModePreferenceOptions): ColorModePreferenceState;
|
|
36
|
+
|
|
37
|
+
/** What `<ThemeProvider>` publishes: the theme, the full selection in force, the
|
|
38
|
+
* fully resolved token record for that pair, and the tone list in force. */
|
|
7
39
|
interface ThemeContextValue {
|
|
8
40
|
readonly theme: Theme;
|
|
9
41
|
readonly selection: Selection;
|
|
10
42
|
readonly resolved: ResolvedTheme;
|
|
43
|
+
readonly tones: ColorList;
|
|
11
44
|
}
|
|
45
|
+
/** What `<ThemeProvider>` publishes. Provide `null` to hide an outer theme from a subtree, as a
|
|
46
|
+
* boundary that renders its children the way a page with no provider would. */
|
|
47
|
+
declare const ThemeContext: React.Context<ThemeContextValue | null>;
|
|
12
48
|
/** Props for `<ThemeProvider>`. */
|
|
13
49
|
interface ThemeProviderProps {
|
|
14
50
|
readonly theme?: Theme;
|
|
15
51
|
/** Axis values, e.g. `{ mode: 'light' }`. A missing axis takes its default. */
|
|
16
52
|
readonly selection?: Selection;
|
|
53
|
+
/** The colors a `tone` index picks from in this subtree. Absent: the theme's own. */
|
|
54
|
+
readonly tones?: ColorList;
|
|
17
55
|
/** Applied to the wrapper element, so it can be the layout element too. */
|
|
18
56
|
readonly className?: string;
|
|
19
57
|
readonly style?: React.CSSProperties;
|
|
@@ -29,7 +67,7 @@ interface ThemeProviderProps {
|
|
|
29
67
|
* nesting your own div inside — an anonymous div between a flex parent and
|
|
30
68
|
* its child breaks percentage heights.
|
|
31
69
|
*/
|
|
32
|
-
declare function ThemeProvider({ theme, selection, className, style, children, }: ThemeProviderProps): React.ReactElement;
|
|
70
|
+
declare function ThemeProvider({ theme, selection, tones, className, style, children, }: ThemeProviderProps): React.ReactElement;
|
|
33
71
|
/** The theme in force. Throws outside a `<ThemeProvider>`; use
|
|
34
72
|
* `useThemeOptional` where the provider is not guaranteed. */
|
|
35
73
|
declare function useTheme(): ThemeContextValue;
|
|
@@ -41,5 +79,11 @@ declare function useTheme(): ThemeContextValue;
|
|
|
41
79
|
* motivating case.
|
|
42
80
|
*/
|
|
43
81
|
declare function useThemeOptional(): ThemeContextValue | null;
|
|
82
|
+
/**
|
|
83
|
+
* The tone list in force and what it resolves against — the nearest
|
|
84
|
+
* `<ThemeProvider>`'s, else the built-in theme's at its defaults. Pass the
|
|
85
|
+
* result as `colorAt`'s context.
|
|
86
|
+
*/
|
|
87
|
+
declare function useTones(): ThemeContextValue;
|
|
44
88
|
|
|
45
|
-
export { type ThemeContextValue, ThemeProvider, type ThemeProviderProps, useTheme, useThemeOptional };
|
|
89
|
+
export { ColorMode, ColorModePreference, type ColorModePreferenceOptions, type ColorModePreferenceState, type ColorModeStorage, ThemeContext, type ThemeContextValue, ThemeProvider, type ThemeProviderProps, useColorModePreference, useResolvedColorMode, useTheme, useThemeOptional, useTones };
|
package/dist/react.js
CHANGED
|
@@ -1,12 +1,63 @@
|
|
|
1
|
-
import { weaselTheme, applyTheme } from './chunk-
|
|
2
|
-
|
|
3
|
-
import {
|
|
1
|
+
import { isColorModePreference, weaselTheme, themeTones, applyTheme } from './chunk-4EIPTWJA.js';
|
|
2
|
+
export { isColorModePreference } from './chunk-4EIPTWJA.js';
|
|
3
|
+
import { themeAxes, fullSelection, selectionKey, resolveTheme } from './chunk-C3S4A65R.js';
|
|
4
|
+
import { createContext, useState, useEffect, useCallback, useRef, useMemo, useLayoutEffect, useContext } from 'react';
|
|
4
5
|
import { jsx } from 'react/jsx-runtime';
|
|
5
6
|
|
|
7
|
+
function systemQuery() {
|
|
8
|
+
if (typeof globalThis.matchMedia !== "function") return null;
|
|
9
|
+
return globalThis.matchMedia("(prefers-color-scheme: light)");
|
|
10
|
+
}
|
|
11
|
+
var systemMode = () => systemQuery()?.matches ? "light" : "dark";
|
|
12
|
+
function useResolvedColorMode(preference) {
|
|
13
|
+
const [system, setSystem] = useState(systemMode);
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
if (preference !== "auto") return;
|
|
16
|
+
const mq = systemQuery();
|
|
17
|
+
if (!mq) return;
|
|
18
|
+
setSystem(mq.matches ? "light" : "dark");
|
|
19
|
+
const onChange = (e) => setSystem(e.matches ? "light" : "dark");
|
|
20
|
+
mq.addEventListener("change", onChange);
|
|
21
|
+
return () => mq.removeEventListener("change", onChange);
|
|
22
|
+
}, [preference]);
|
|
23
|
+
return preference === "auto" ? system : preference;
|
|
24
|
+
}
|
|
25
|
+
function defaultStorage() {
|
|
26
|
+
try {
|
|
27
|
+
return globalThis.localStorage ?? void 0;
|
|
28
|
+
} catch {
|
|
29
|
+
return void 0;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function useColorModePreference(options = {}) {
|
|
33
|
+
const { storageKey, storage, defaultPreference = "auto" } = options;
|
|
34
|
+
const [preference, setState] = useState(() => {
|
|
35
|
+
if (storageKey === void 0) return defaultPreference;
|
|
36
|
+
try {
|
|
37
|
+
const stored = (storage ?? defaultStorage())?.getItem(storageKey);
|
|
38
|
+
return isColorModePreference(stored) ? stored : defaultPreference;
|
|
39
|
+
} catch {
|
|
40
|
+
return defaultPreference;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
const setPreference = useCallback(
|
|
44
|
+
(next) => {
|
|
45
|
+
setState(next);
|
|
46
|
+
if (storageKey === void 0) return;
|
|
47
|
+
try {
|
|
48
|
+
(storage ?? defaultStorage())?.setItem(storageKey, next);
|
|
49
|
+
} catch {
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
[storageKey, storage]
|
|
53
|
+
);
|
|
54
|
+
return { preference, setPreference, mode: useResolvedColorMode(preference) };
|
|
55
|
+
}
|
|
6
56
|
var ThemeContext = createContext(null);
|
|
7
57
|
function ThemeProvider({
|
|
8
58
|
theme = weaselTheme,
|
|
9
59
|
selection,
|
|
60
|
+
tones,
|
|
10
61
|
className,
|
|
11
62
|
style,
|
|
12
63
|
children
|
|
@@ -16,9 +67,9 @@ function ThemeProvider({
|
|
|
16
67
|
const full = fullSelection(axes, selection);
|
|
17
68
|
const key = selectionKey(axes, full);
|
|
18
69
|
const value = useMemo(
|
|
19
|
-
() => ({ theme, selection: full, resolved: resolveTheme(theme, full) }),
|
|
70
|
+
() => ({ theme, selection: full, resolved: resolveTheme(theme, full), tones: tones ?? themeTones(theme) }),
|
|
20
71
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
21
|
-
[theme, key]
|
|
72
|
+
[theme, key, tones]
|
|
22
73
|
);
|
|
23
74
|
useLayoutEffect(() => {
|
|
24
75
|
if (ref.current) applyTheme(ref.current, theme, value.selection);
|
|
@@ -34,7 +85,18 @@ function useTheme() {
|
|
|
34
85
|
function useThemeOptional() {
|
|
35
86
|
return useContext(ThemeContext);
|
|
36
87
|
}
|
|
88
|
+
var defaultTones;
|
|
89
|
+
function useTones() {
|
|
90
|
+
const ctx = useContext(ThemeContext);
|
|
91
|
+
if (ctx) return ctx;
|
|
92
|
+
return defaultTones ??= {
|
|
93
|
+
theme: weaselTheme,
|
|
94
|
+
selection: fullSelection(themeAxes(weaselTheme)),
|
|
95
|
+
resolved: resolveTheme(weaselTheme),
|
|
96
|
+
tones: themeTones(weaselTheme)
|
|
97
|
+
};
|
|
98
|
+
}
|
|
37
99
|
|
|
38
|
-
export { ThemeProvider, useTheme, useThemeOptional };
|
|
100
|
+
export { ThemeContext, ThemeProvider, useColorModePreference, useResolvedColorMode, useTheme, useThemeOptional, useTones };
|
|
39
101
|
//# sourceMappingURL=react.js.map
|
|
40
102
|
//# sourceMappingURL=react.js.map
|
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/react.tsx"],"names":[],"mappings":";;;;;AAcA,IAAM,YAAA,GAAe,cAAwC,IAAI,CAAA;AAuB1D,SAAS,aAAA,CAAc;AAAA,EAC5B,KAAA,GAAQ,WAAA;AAAA,EACR,SAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA2C;AACzC,EAAA,MAAM,GAAA,GAAM,OAAuB,IAAI,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,IAAA,EAAM,SAAS,CAAA;AAE1C,EAAA,MAAM,GAAA,GAAM,YAAA,CAAa,IAAA,EAAM,IAAI,CAAA;AAEnC,EAAA,MAAM,KAAA,GAAQ,OAAA;AAAA,IACZ,OAAO,EAAE,KAAA,EAAO,SAAA,EAAW,MAAM,QAAA,EAAU,YAAA,CAAa,KAAA,EAAO,IAAI,CAAA,EAAE,CAAA;AAAA;AAAA,IAErE,CAAC,OAAO,GAAG;AAAA,GACb;AAEA,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,IAAI,OAAA,EAAS,UAAA,CAAW,IAAI,OAAA,EAAS,KAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACjE,CAAA,EAAG,CAAC,KAAA,EAAO,KAAK,CAAC,CAAA;AAEjB,EAAA,MAAM,QAAQ,MAAA,CAAO,WAAA,CAAY,OAAO,IAAA,CAAK,IAAI,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,YAAY,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACzF,EAAA,2BACG,YAAA,CAAa,QAAA,EAAb,EAAsB,KAAA,EACrB,8BAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAsB,KAAA,EAAc,kBAAgB,KAAA,CAAM,IAAA,EAAO,GAAG,KAAA,EAChF,UACH,CAAA,EACF,CAAA;AAEJ;AAIO,SAAS,QAAA,GAA8B;AAC5C,EAAA,MAAM,GAAA,GAAM,WAAW,YAAY,CAAA;AACnC,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAC1E,EAAA,OAAO,GAAA;AACT;AASO,SAAS,gBAAA,GAA6C;AAC3D,EAAA,OAAO,WAAW,YAAY,CAAA;AAChC","file":"react.js","sourcesContent":["import React, { createContext, useContext, useMemo, useRef, useLayoutEffect } from 'react';\nimport { applyTheme } from './applyTheme';\nimport { fullSelection, selectionKey, type Selection } from './axes';\nimport { resolveTheme, themeAxes, type ResolvedTheme } from './resolveTheme';\nimport { weaselTheme, type Theme } from './theme';\n\n/** What `<ThemeProvider>` publishes: the theme, the full selection in force, and the\n * fully resolved token record for that pair. */\nexport interface ThemeContextValue {\n readonly theme: Theme;\n readonly selection: Selection;\n readonly resolved: ResolvedTheme;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\n\n/** Props for `<ThemeProvider>`. */\nexport interface ThemeProviderProps {\n readonly theme?: Theme;\n /** Axis values, e.g. `{ mode: 'light' }`. A missing axis takes its default. */\n readonly selection?: Selection;\n /** Applied to the wrapper element, so it can be the layout element too. */\n readonly className?: string;\n readonly style?: React.CSSProperties;\n readonly children: React.ReactNode;\n}\n\n/**\n * Applies a theme to a wrapper element and publishes the resolved record.\n *\n * Consumers that draw outside the DOM (the WebGL HUD) read `resolved` and\n * never touch `getComputedStyle`.\n *\n * The wrapper is a real element in the layout. Pass `className` rather than\n * nesting your own div inside — an anonymous div between a flex parent and\n * its child breaks percentage heights.\n */\nexport function ThemeProvider({\n theme = weaselTheme,\n selection,\n className,\n style,\n children,\n}: ThemeProviderProps): React.ReactElement {\n const ref = useRef<HTMLDivElement>(null);\n const axes = themeAxes(theme);\n const full = fullSelection(axes, selection);\n // Keyed on the selection's content: callers pass a fresh object every render.\n const key = selectionKey(axes, full);\n\n const value = useMemo<ThemeContextValue>(\n () => ({ theme, selection: full, resolved: resolveTheme(theme, full) }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [theme, key],\n );\n\n useLayoutEffect(() => {\n if (ref.current) applyTheme(ref.current, theme, value.selection);\n }, [theme, value]);\n\n const attrs = Object.fromEntries(Object.keys(axes).map((a) => [`data-wzl-${a}`, full[a]]));\n return (\n <ThemeContext.Provider value={value}>\n <div ref={ref} className={className} style={style} data-wzl-theme={theme.name} {...attrs}>\n {children}\n </div>\n </ThemeContext.Provider>\n );\n}\n\n/** The theme in force. Throws outside a `<ThemeProvider>`; use\n * `useThemeOptional` where the provider is not guaranteed. */\nexport function useTheme(): ThemeContextValue {\n const ctx = useContext(ThemeContext);\n if (!ctx) throw new Error('useTheme must be used inside a <ThemeProvider>');\n return ctx;\n}\n\n/**\n * The theme if one is provided, `null` otherwise.\n *\n * For kit internals that should follow a theme when the app supplies one but\n * must still work in an app that never mounted a provider — `useHud` is the\n * motivating case.\n */\nexport function useThemeOptional(): ThemeContextValue | null {\n return useContext(ThemeContext);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/useColorMode.ts","../src/react.tsx"],"names":[],"mappings":"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","file":"react.js","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { isColorModePreference, type ColorMode, type ColorModePreference } from './colorMode';\n\nfunction systemQuery(): MediaQueryList | null {\n if (typeof globalThis.matchMedia !== 'function') return null;\n return globalThis.matchMedia('(prefers-color-scheme: light)');\n}\n\nconst systemMode = (): ColorMode => (systemQuery()?.matches ? 'light' : 'dark');\n\n/**\n * Resolves a preference to the mode a `ThemeProvider` selection takes.\n * `'auto'` subscribes to the OS setting and follows it live; an explicit\n * choice opts out of the subscription entirely.\n */\nexport function useResolvedColorMode(preference: ColorModePreference): ColorMode {\n const [system, setSystem] = useState<ColorMode>(systemMode);\n\n useEffect(() => {\n if (preference !== 'auto') return;\n const mq = systemQuery();\n if (!mq) return;\n setSystem(mq.matches ? 'light' : 'dark');\n const onChange = (e: { matches: boolean }) => setSystem(e.matches ? 'light' : 'dark');\n mq.addEventListener('change', onChange);\n return () => mq.removeEventListener('change', onChange);\n }, [preference]);\n\n return preference === 'auto' ? system : preference;\n}\n\n/** The part of `Storage` {@link useColorModePreference} reads and writes. */\nexport type ColorModeStorage = Pick<Storage, 'getItem' | 'setItem'>;\n\n/** Options for {@link useColorModePreference}. */\nexport interface ColorModePreferenceOptions {\n /** Where the choice is remembered. Unset, it lasts as long as the component. */\n readonly storageKey?: string;\n /** The store `storageKey` names a slot in. Defaults to `localStorage`. */\n readonly storage?: ColorModeStorage;\n /** The preference before the user has chosen one. Defaults to `'auto'`. */\n readonly defaultPreference?: ColorModePreference;\n}\n\n/** What {@link useColorModePreference} returns. */\nexport interface ColorModePreferenceState {\n readonly preference: ColorModePreference;\n readonly setPreference: (next: ColorModePreference) => void;\n /** `preference` resolved against the OS — what to put in the theme's `mode` axis. */\n readonly mode: ColorMode;\n}\n\nfunction defaultStorage(): ColorModeStorage | undefined {\n try {\n return globalThis.localStorage ?? undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * A user's color-mode choice, optionally remembered across loads, and the mode\n * it resolves to. Storage that is missing or throws (a private window, blocked\n * site data) degrades to an unremembered choice rather than an error.\n */\nexport function useColorModePreference(\n options: ColorModePreferenceOptions = {},\n): ColorModePreferenceState {\n const { storageKey, storage, defaultPreference = 'auto' } = options;\n\n const [preference, setState] = useState<ColorModePreference>(() => {\n if (storageKey === undefined) return defaultPreference;\n try {\n const stored = (storage ?? defaultStorage())?.getItem(storageKey);\n return isColorModePreference(stored) ? stored : defaultPreference;\n } catch {\n return defaultPreference;\n }\n });\n\n const setPreference = useCallback(\n (next: ColorModePreference) => {\n setState(next);\n if (storageKey === undefined) return;\n try {\n (storage ?? defaultStorage())?.setItem(storageKey, next);\n } catch {\n // Unremembered, but still applied.\n }\n },\n [storageKey, storage],\n );\n\n return { preference, setPreference, mode: useResolvedColorMode(preference) };\n}\n","import React, { createContext, useContext, useMemo, useRef, useLayoutEffect } from 'react';\nimport { applyTheme } from './applyTheme';\nimport { themeTones, type ColorList } from './colorList';\nimport { fullSelection, selectionKey, type Selection } from './axes';\nimport { resolveTheme, themeAxes, type ResolvedTheme } from './resolveTheme';\nimport { weaselTheme, type Theme } from './theme';\n\nexport {\n useColorModePreference,\n useResolvedColorMode,\n type ColorModePreferenceOptions,\n type ColorModePreferenceState,\n type ColorModeStorage,\n} from './useColorMode';\nexport { isColorModePreference, type ColorMode, type ColorModePreference } from './colorMode';\n\n/** What `<ThemeProvider>` publishes: the theme, the full selection in force, the\n * fully resolved token record for that pair, and the tone list in force. */\nexport interface ThemeContextValue {\n readonly theme: Theme;\n readonly selection: Selection;\n readonly resolved: ResolvedTheme;\n readonly tones: ColorList;\n}\n\n/** What `<ThemeProvider>` publishes. Provide `null` to hide an outer theme from a subtree, as a\n * boundary that renders its children the way a page with no provider would. */\nexport const ThemeContext = createContext<ThemeContextValue | null>(null);\n\n/** Props for `<ThemeProvider>`. */\nexport interface ThemeProviderProps {\n readonly theme?: Theme;\n /** Axis values, e.g. `{ mode: 'light' }`. A missing axis takes its default. */\n readonly selection?: Selection;\n /** The colors a `tone` index picks from in this subtree. Absent: the theme's own. */\n readonly tones?: ColorList;\n /** Applied to the wrapper element, so it can be the layout element too. */\n readonly className?: string;\n readonly style?: React.CSSProperties;\n readonly children: React.ReactNode;\n}\n\n/**\n * Applies a theme to a wrapper element and publishes the resolved record.\n *\n * Consumers that draw outside the DOM (the WebGL HUD) read `resolved` and\n * never touch `getComputedStyle`.\n *\n * The wrapper is a real element in the layout. Pass `className` rather than\n * nesting your own div inside — an anonymous div between a flex parent and\n * its child breaks percentage heights.\n */\nexport function ThemeProvider({\n theme = weaselTheme,\n selection,\n tones,\n className,\n style,\n children,\n}: ThemeProviderProps): React.ReactElement {\n const ref = useRef<HTMLDivElement>(null);\n const axes = themeAxes(theme);\n const full = fullSelection(axes, selection);\n // Keyed on the selection's content: callers pass a fresh object every render.\n const key = selectionKey(axes, full);\n\n const value = useMemo<ThemeContextValue>(\n () => ({ theme, selection: full, resolved: resolveTheme(theme, full), tones: tones ?? themeTones(theme) }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [theme, key, tones],\n );\n\n useLayoutEffect(() => {\n if (ref.current) applyTheme(ref.current, theme, value.selection);\n }, [theme, value]);\n\n const attrs = Object.fromEntries(Object.keys(axes).map((a) => [`data-wzl-${a}`, full[a]]));\n return (\n <ThemeContext.Provider value={value}>\n <div ref={ref} className={className} style={style} data-wzl-theme={theme.name} {...attrs}>\n {children}\n </div>\n </ThemeContext.Provider>\n );\n}\n\n/** The theme in force. Throws outside a `<ThemeProvider>`; use\n * `useThemeOptional` where the provider is not guaranteed. */\nexport function useTheme(): ThemeContextValue {\n const ctx = useContext(ThemeContext);\n if (!ctx) throw new Error('useTheme must be used inside a <ThemeProvider>');\n return ctx;\n}\n\n/**\n * The theme if one is provided, `null` otherwise.\n *\n * For kit internals that should follow a theme when the app supplies one but\n * must still work in an app that never mounted a provider — `useHud` is the\n * motivating case.\n */\nexport function useThemeOptional(): ThemeContextValue | null {\n return useContext(ThemeContext);\n}\n\nlet defaultTones: ThemeContextValue | undefined;\n\n/**\n * The tone list in force and what it resolves against — the nearest\n * `<ThemeProvider>`'s, else the built-in theme's at its defaults. Pass the\n * result as `colorAt`'s context.\n */\nexport function useTones(): ThemeContextValue {\n const ctx = useContext(ThemeContext);\n if (ctx) return ctx;\n return (defaultTones ??= {\n theme: weaselTheme,\n selection: fullSelection(themeAxes(weaselTheme)),\n resolved: resolveTheme(weaselTheme),\n tones: themeTones(weaselTheme),\n });\n}\n"]}
|