@orz/ui 0.0.0-stage → 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +541 -2
  3. package/dist/components/avatar.d.ts +14 -0
  4. package/dist/components/avatar.d.ts.map +1 -0
  5. package/dist/components/avatar.js +23 -0
  6. package/dist/components/avatar.js.map +1 -0
  7. package/dist/components/badge.d.ts +10 -0
  8. package/dist/components/badge.d.ts.map +1 -0
  9. package/dist/components/badge.js +26 -0
  10. package/dist/components/badge.js.map +1 -0
  11. package/dist/components/button.d.ts +11 -0
  12. package/dist/components/button.d.ts.map +1 -0
  13. package/dist/components/button.js +40 -0
  14. package/dist/components/button.js.map +1 -0
  15. package/dist/components/card.d.ts +12 -0
  16. package/dist/components/card.d.ts.map +1 -0
  17. package/dist/components/card.js +25 -0
  18. package/dist/components/card.js.map +1 -0
  19. package/dist/components/color-picker.d.ts +58 -0
  20. package/dist/components/color-picker.d.ts.map +1 -0
  21. package/dist/components/color-picker.js +950 -0
  22. package/dist/components/color-picker.js.map +1 -0
  23. package/dist/components/confirm-dialog.d.ts +26 -0
  24. package/dist/components/confirm-dialog.d.ts.map +1 -0
  25. package/dist/components/confirm-dialog.js +18 -0
  26. package/dist/components/confirm-dialog.js.map +1 -0
  27. package/dist/components/dialog.d.ts +26 -0
  28. package/dist/components/dialog.d.ts.map +1 -0
  29. package/dist/components/dialog.js +149 -0
  30. package/dist/components/dialog.js.map +1 -0
  31. package/dist/components/dropdown-menu.d.ts +30 -0
  32. package/dist/components/dropdown-menu.d.ts.map +1 -0
  33. package/dist/components/dropdown-menu.js +100 -0
  34. package/dist/components/dropdown-menu.js.map +1 -0
  35. package/dist/components/filter-menu.d.ts +98 -0
  36. package/dist/components/filter-menu.d.ts.map +1 -0
  37. package/dist/components/filter-menu.js +745 -0
  38. package/dist/components/filter-menu.js.map +1 -0
  39. package/dist/components/highlighted-input.d.ts +40 -0
  40. package/dist/components/highlighted-input.d.ts.map +1 -0
  41. package/dist/components/highlighted-input.js +95 -0
  42. package/dist/components/highlighted-input.js.map +1 -0
  43. package/dist/components/hover-card.d.ts +7 -0
  44. package/dist/components/hover-card.d.ts.map +1 -0
  45. package/dist/components/hover-card.js +22 -0
  46. package/dist/components/hover-card.js.map +1 -0
  47. package/dist/components/input.d.ts +4 -0
  48. package/dist/components/input.d.ts.map +1 -0
  49. package/dist/components/input.js +7 -0
  50. package/dist/components/input.js.map +1 -0
  51. package/dist/components/label.d.ts +5 -0
  52. package/dist/components/label.d.ts.map +1 -0
  53. package/dist/components/label.js +8 -0
  54. package/dist/components/label.js.map +1 -0
  55. package/dist/components/link-chip.d.ts +67 -0
  56. package/dist/components/link-chip.d.ts.map +1 -0
  57. package/dist/components/link-chip.js +71 -0
  58. package/dist/components/link-chip.js.map +1 -0
  59. package/dist/components/load-failure.d.ts +24 -0
  60. package/dist/components/load-failure.d.ts.map +1 -0
  61. package/dist/components/load-failure.js +27 -0
  62. package/dist/components/load-failure.js.map +1 -0
  63. package/dist/components/load-more.d.ts +15 -0
  64. package/dist/components/load-more.d.ts.map +1 -0
  65. package/dist/components/load-more.js +25 -0
  66. package/dist/components/load-more.js.map +1 -0
  67. package/dist/components/media-controls.d.ts +50 -0
  68. package/dist/components/media-controls.d.ts.map +1 -0
  69. package/dist/components/media-controls.js +71 -0
  70. package/dist/components/media-controls.js.map +1 -0
  71. package/dist/components/popover.d.ts +9 -0
  72. package/dist/components/popover.d.ts.map +1 -0
  73. package/dist/components/popover.js +82 -0
  74. package/dist/components/popover.js.map +1 -0
  75. package/dist/components/query-box.d.ts +78 -0
  76. package/dist/components/query-box.d.ts.map +1 -0
  77. package/dist/components/query-box.js +332 -0
  78. package/dist/components/query-box.js.map +1 -0
  79. package/dist/components/query-highlight.d.ts +14 -0
  80. package/dist/components/query-highlight.d.ts.map +1 -0
  81. package/dist/components/query-highlight.js +132 -0
  82. package/dist/components/query-highlight.js.map +1 -0
  83. package/dist/components/select.d.ts +19 -0
  84. package/dist/components/select.d.ts.map +1 -0
  85. package/dist/components/select.js +38 -0
  86. package/dist/components/select.js.map +1 -0
  87. package/dist/components/separator.d.ts +5 -0
  88. package/dist/components/separator.d.ts.map +1 -0
  89. package/dist/components/separator.js +9 -0
  90. package/dist/components/separator.js.map +1 -0
  91. package/dist/components/sheet.d.ts +16 -0
  92. package/dist/components/sheet.d.ts.map +1 -0
  93. package/dist/components/sheet.js +41 -0
  94. package/dist/components/sheet.js.map +1 -0
  95. package/dist/components/skeleton.d.ts +3 -0
  96. package/dist/components/skeleton.d.ts.map +1 -0
  97. package/dist/components/skeleton.js +7 -0
  98. package/dist/components/skeleton.js.map +1 -0
  99. package/dist/components/slider.d.ts +8 -0
  100. package/dist/components/slider.d.ts.map +1 -0
  101. package/dist/components/slider.js +14 -0
  102. package/dist/components/slider.js.map +1 -0
  103. package/dist/components/sonner.d.ts +4 -0
  104. package/dist/components/sonner.d.ts.map +1 -0
  105. package/dist/components/sonner.js +26 -0
  106. package/dist/components/sonner.js.map +1 -0
  107. package/dist/components/switch.d.ts +5 -0
  108. package/dist/components/switch.d.ts.map +1 -0
  109. package/dist/components/switch.js +8 -0
  110. package/dist/components/switch.js.map +1 -0
  111. package/dist/components/table.d.ts +11 -0
  112. package/dist/components/table.d.ts.map +1 -0
  113. package/dist/components/table.js +28 -0
  114. package/dist/components/table.js.map +1 -0
  115. package/dist/components/tabs.d.ts +8 -0
  116. package/dist/components/tabs.d.ts.map +1 -0
  117. package/dist/components/tabs.js +18 -0
  118. package/dist/components/tabs.js.map +1 -0
  119. package/dist/components/textarea.d.ts +4 -0
  120. package/dist/components/textarea.d.ts.map +1 -0
  121. package/dist/components/textarea.js +7 -0
  122. package/dist/components/textarea.js.map +1 -0
  123. package/dist/components/theme-editor/draft.d.ts +235 -0
  124. package/dist/components/theme-editor/draft.d.ts.map +1 -0
  125. package/dist/components/theme-editor/draft.js +638 -0
  126. package/dist/components/theme-editor/draft.js.map +1 -0
  127. package/dist/components/theme-editor/export-panel.d.ts +14 -0
  128. package/dist/components/theme-editor/export-panel.d.ts.map +1 -0
  129. package/dist/components/theme-editor/export-panel.js +39 -0
  130. package/dist/components/theme-editor/export-panel.js.map +1 -0
  131. package/dist/components/theme-editor/form.d.ts +69 -0
  132. package/dist/components/theme-editor/form.d.ts.map +1 -0
  133. package/dist/components/theme-editor/form.js +350 -0
  134. package/dist/components/theme-editor/form.js.map +1 -0
  135. package/dist/components/theme-editor/import-panel.d.ts +21 -0
  136. package/dist/components/theme-editor/import-panel.d.ts.map +1 -0
  137. package/dist/components/theme-editor/import-panel.js +117 -0
  138. package/dist/components/theme-editor/import-panel.js.map +1 -0
  139. package/dist/components/theme-editor/theme-list.d.ts +23 -0
  140. package/dist/components/theme-editor/theme-list.d.ts.map +1 -0
  141. package/dist/components/theme-editor/theme-list.js +42 -0
  142. package/dist/components/theme-editor/theme-list.js.map +1 -0
  143. package/dist/components/theme-editor/token-list.d.ts +30 -0
  144. package/dist/components/theme-editor/token-list.d.ts.map +1 -0
  145. package/dist/components/theme-editor/token-list.js +124 -0
  146. package/dist/components/theme-editor/token-list.js.map +1 -0
  147. package/dist/components/theme-editor/tokens.d.ts +37 -0
  148. package/dist/components/theme-editor/tokens.d.ts.map +1 -0
  149. package/dist/components/theme-editor/tokens.js +155 -0
  150. package/dist/components/theme-editor/tokens.js.map +1 -0
  151. package/dist/components/theme-editor.d.ts +26 -0
  152. package/dist/components/theme-editor.d.ts.map +1 -0
  153. package/dist/components/theme-editor.js +467 -0
  154. package/dist/components/theme-editor.js.map +1 -0
  155. package/dist/components/theme-menu.d.ts +28 -0
  156. package/dist/components/theme-menu.d.ts.map +1 -0
  157. package/dist/components/theme-menu.js +308 -0
  158. package/dist/components/theme-menu.js.map +1 -0
  159. package/dist/components/tooltip.d.ts +11 -0
  160. package/dist/components/tooltip.d.ts.map +1 -0
  161. package/dist/components/tooltip.js +18 -0
  162. package/dist/components/tooltip.js.map +1 -0
  163. package/dist/components/unsaved-changes-dialog.d.ts +39 -0
  164. package/dist/components/unsaved-changes-dialog.d.ts.map +1 -0
  165. package/dist/components/unsaved-changes-dialog.js +46 -0
  166. package/dist/components/unsaved-changes-dialog.js.map +1 -0
  167. package/dist/hooks/scroll-insets.d.ts +89 -0
  168. package/dist/hooks/scroll-insets.d.ts.map +1 -0
  169. package/dist/hooks/scroll-insets.js +265 -0
  170. package/dist/hooks/scroll-insets.js.map +1 -0
  171. package/dist/hooks/use-element-height.d.ts +11 -0
  172. package/dist/hooks/use-element-height.d.ts.map +1 -0
  173. package/dist/hooks/use-element-height.js +33 -0
  174. package/dist/hooks/use-element-height.js.map +1 -0
  175. package/dist/hooks/use-media-query.d.ts +22 -0
  176. package/dist/hooks/use-media-query.d.ts.map +1 -0
  177. package/dist/hooks/use-media-query.js +38 -0
  178. package/dist/hooks/use-media-query.js.map +1 -0
  179. package/dist/hooks/use-overlay-scrollbars.d.ts +31 -0
  180. package/dist/hooks/use-overlay-scrollbars.d.ts.map +1 -0
  181. package/dist/hooks/use-overlay-scrollbars.js +80 -0
  182. package/dist/hooks/use-overlay-scrollbars.js.map +1 -0
  183. package/dist/hooks/use-paged-append.d.ts +7 -0
  184. package/dist/hooks/use-paged-append.d.ts.map +1 -0
  185. package/dist/hooks/use-paged-append.js +53 -0
  186. package/dist/hooks/use-paged-append.js.map +1 -0
  187. package/dist/hooks/use-query-completion.d.ts +27 -0
  188. package/dist/hooks/use-query-completion.d.ts.map +1 -0
  189. package/dist/hooks/use-query-completion.js +100 -0
  190. package/dist/hooks/use-query-completion.js.map +1 -0
  191. package/dist/hooks/use-slash-shortcut.d.ts +9 -0
  192. package/dist/hooks/use-slash-shortcut.d.ts.map +1 -0
  193. package/dist/hooks/use-slash-shortcut.js +38 -0
  194. package/dist/hooks/use-slash-shortcut.js.map +1 -0
  195. package/dist/hooks/viewport-chrome.d.ts +50 -0
  196. package/dist/hooks/viewport-chrome.d.ts.map +1 -0
  197. package/dist/hooks/viewport-chrome.js +170 -0
  198. package/dist/hooks/viewport-chrome.js.map +1 -0
  199. package/dist/index.d.ts +2 -0
  200. package/dist/index.d.ts.map +1 -0
  201. package/dist/index.js +2 -0
  202. package/dist/index.js.map +1 -0
  203. package/dist/lib/cell-width-table.d.ts +3 -0
  204. package/dist/lib/cell-width-table.d.ts.map +1 -0
  205. package/dist/lib/cell-width-table.js +6 -0
  206. package/dist/lib/cell-width-table.js.map +1 -0
  207. package/dist/lib/cell-width.d.ts +7 -0
  208. package/dist/lib/cell-width.d.ts.map +1 -0
  209. package/dist/lib/cell-width.js +50 -0
  210. package/dist/lib/cell-width.js.map +1 -0
  211. package/dist/lib/clipboard.d.ts +8 -0
  212. package/dist/lib/clipboard.d.ts.map +1 -0
  213. package/dist/lib/clipboard.js +19 -0
  214. package/dist/lib/clipboard.js.map +1 -0
  215. package/dist/lib/color.d.ts +40 -0
  216. package/dist/lib/color.d.ts.map +1 -0
  217. package/dist/lib/color.js +177 -0
  218. package/dist/lib/color.js.map +1 -0
  219. package/dist/lib/scroll-map.d.ts +20 -0
  220. package/dist/lib/scroll-map.d.ts.map +1 -0
  221. package/dist/lib/scroll-map.js +46 -0
  222. package/dist/lib/scroll-map.js.map +1 -0
  223. package/dist/lib/text-metrics.d.ts +33 -0
  224. package/dist/lib/text-metrics.d.ts.map +1 -0
  225. package/dist/lib/text-metrics.js +89 -0
  226. package/dist/lib/text-metrics.js.map +1 -0
  227. package/dist/lib/theme-file.d.ts +51 -0
  228. package/dist/lib/theme-file.d.ts.map +1 -0
  229. package/dist/lib/theme-file.js +511 -0
  230. package/dist/lib/theme-file.js.map +1 -0
  231. package/dist/lib/unsaved-guard.d.ts +33 -0
  232. package/dist/lib/unsaved-guard.d.ts.map +1 -0
  233. package/dist/lib/unsaved-guard.js +37 -0
  234. package/dist/lib/unsaved-guard.js.map +1 -0
  235. package/dist/lib/utils.d.ts +3 -0
  236. package/dist/lib/utils.d.ts.map +1 -0
  237. package/dist/lib/utils.js +6 -0
  238. package/dist/lib/utils.js.map +1 -0
  239. package/dist/theme/custom.d.ts +8 -0
  240. package/dist/theme/custom.d.ts.map +1 -0
  241. package/dist/theme/custom.js +56 -0
  242. package/dist/theme/custom.js.map +1 -0
  243. package/dist/theme/index.d.ts +6 -0
  244. package/dist/theme/index.d.ts.map +1 -0
  245. package/dist/theme/index.js +5 -0
  246. package/dist/theme/index.js.map +1 -0
  247. package/dist/theme/paint-guard.d.ts +20 -0
  248. package/dist/theme/paint-guard.d.ts.map +1 -0
  249. package/dist/theme/paint-guard.js +120 -0
  250. package/dist/theme/paint-guard.js.map +1 -0
  251. package/dist/theme/picks.d.ts +22 -0
  252. package/dist/theme/picks.d.ts.map +1 -0
  253. package/dist/theme/picks.js +43 -0
  254. package/dist/theme/picks.js.map +1 -0
  255. package/dist/theme/pref.d.ts +39 -0
  256. package/dist/theme/pref.d.ts.map +1 -0
  257. package/dist/theme/pref.js +129 -0
  258. package/dist/theme/pref.js.map +1 -0
  259. package/dist/theme/provider.d.ts +41 -0
  260. package/dist/theme/provider.d.ts.map +1 -0
  261. package/dist/theme/provider.js +103 -0
  262. package/dist/theme/provider.js.map +1 -0
  263. package/dist/theme/store.d.ts +104 -0
  264. package/dist/theme/store.d.ts.map +1 -0
  265. package/dist/theme/store.js +509 -0
  266. package/dist/theme/store.js.map +1 -0
  267. package/package.json +94 -3
  268. package/styles.css +79 -0
  269. package/theme.css +186 -0
  270. package/vendor/shadcn-tailwind.css +664 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/theme/provider.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EACL,aAAa,EAEb,UAAU,EACV,OAAO,EACP,oBAAoB,GACrB,MAAM,OAAO,CAAC;AASf,MAAM,YAAY,GAAG,aAAa,CAAoB,IAAI,CAAC,CAAC;AAE5D,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,GAIT;IACC,OAAO,KAAC,YAAY,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAgB,CAAC;AAC/D,CAAC;AAED,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AACtB,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;AAEpC,2EAA2E;AAC3E,2DAA2D;AAC3D,MAAM,aAAa,GAAc,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC;AAC9E,MAAM,eAAe,GAAqB,CAAC,YAAY,CAAC,CAAC;AACzD,MAAM,iBAAiB,GAAkB;IACvC,KAAK,EAAE,YAAY;IACnB,WAAW,EAAE,OAAO;IACpB,OAAO,EAAE,SAAS;CACnB,CAAC;AACF,MAAM,iBAAiB,GAA0B;IAC/C,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,YAAY;IACnB,WAAW,EAAE,OAAO;IACpB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAG,YAAY,CAAC,KAAsC,CAAC,QAAQ;CACtE,CAAC;AACF,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC;AACzC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC;AACjD,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC;AACjD,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC;AAC7C,MAAM,gBAAgB,GAA8B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACtE,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,gBAAgB,CAAC;AAQpD,kFAAkF;AAClF,SAAS,sBAAsB,CAC7B,KAAwB,EACxB,SAAkC;IAElC,MAAM,eAAe,GAAG,KAAK,EAAE,eAAe,IAAI,oBAAoB,CAAC;IACvE,MAAM,YAAY,GAAG,oBAAoB,CACvC,SAAS,EACT,eAAe,EACf,eAAe,CAChB,CAAC;IACF,OAAO;QACL,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,IAAI;QAC/B,YAAY;QACZ,eAAe,EAAE,KAAK,EAAE,eAAe,IAAI,IAAI;KAChD,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ;IAQtB,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,KAAK,EAAE,SAAS,IAAI,gBAAgB,CAAC;IACvD,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,YAAY,CAAC;IAC/C,oEAAoE;IACpE,yDAAyD;IACzD,MAAM,WAAW,GAAG,KAAK;QACvB,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,iBAAiB;QAChD,CAAC,CAAC,gBAAgB,CAAC;IACrB,MAAM,SAAS,GACb,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC;IAC3E,MAAM,IAAI,GAAG,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC1D,OAAO;QACL,GAAG,QAAQ;QACX,IAAI;QACJ,MAAM;QACN,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,IAAI;KAChC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB;IAG9B,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,KAAK,EAAE,SAAS,IAAI,gBAAgB,CAAC;IACvD,MAAM,WAAW,GAAG,KAAK,EAAE,WAAW,IAAI,gBAAgB,CAAC;IAC3D,sEAAsE;IACtE,MAAM,SAAS,GAAG,CAAC,KAAK;QACtB,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,MAAM,GAAG,CAAC;YACpC,CAAC,CAAC,KAAK,CAAC,iBAAiB;YACzB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;IACtB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACrE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,sBAAsB,CACvE,KAAK,EACL,SAAS,CACV,CAAC;IACF,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC,EACvE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,eAAe,CAAC,CAC3D,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAEpD;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACvC,gDAAgD;IAChD,OAAO,OAAO,CACZ,GAAG,EAAE,CACH,KAAK;QACH,CAAC,CAAC;YACE,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC;YAChC,QAAQ,EAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC,MAAM,GAAG,CAAC;SAC/C;QACH,CAAC,CAAC,aAAa,EACnB,CAAC,KAAK,CAAC,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,104 @@
1
+ import { type AnyCustomTheme, type ColorScheme, type TerminalTheme, type TerminalTokens, type Theme } from "@orz/themes";
2
+ import { type ThemeMode, type ThemePick, type ThemePref } from "./pref.ts";
3
+ export interface ResolvedTheme {
4
+ theme: Theme;
5
+ colorScheme: ColorScheme;
6
+ /** The variant the active side shows ("default" when the picked one is not defined there). */
7
+ variant: string;
8
+ }
9
+ export interface ResolvedTerminalTheme {
10
+ /** True when no terminal pick exists and the terminal shows the UI palette's terminal tokens. */
11
+ following: boolean;
12
+ theme: TerminalTheme;
13
+ colorScheme: ColorScheme;
14
+ variant: string;
15
+ tokens: TerminalTokens;
16
+ }
17
+ /** A pick by id, or an unsaved theme carried as an object (the editor's draft). */
18
+ export type PreviewPick = ThemePick | {
19
+ theme: TerminalTheme;
20
+ mode: ThemeMode;
21
+ variant?: string;
22
+ };
23
+ export interface ThemePreview {
24
+ ui?: PreviewPick;
25
+ /** "follow" previews the terminal following the (shown) UI. */
26
+ terminal?: PreviewPick | "follow";
27
+ }
28
+ export interface ThemeStoreOptions {
29
+ /** localStorage key holding the pref as JSON. Name it after the app; there is no default. */
30
+ storageKey: string;
31
+ /** localStorage key holding the paint cache. Default `${storageKey}-paint`. */
32
+ paintKey?: string;
33
+ /** The UI slot. Non-empty when given; on a duplicate id the first entry wins. */
34
+ themes?: readonly Theme[];
35
+ /** The terminal slot. Same rules. */
36
+ terminalThemes?: readonly TerminalTheme[];
37
+ /** Where the attributes and `.dark` are written. Default `<html>`. */
38
+ root?: HTMLElement;
39
+ /** localStorage key holding the custom themes as JSON. Default `${storageKey}-custom`. */
40
+ customStorageKey?: string;
41
+ /** false: the store never reads or writes custom themes in localStorage; the app owns them. Default true. */
42
+ persistCustomThemes?: boolean;
43
+ /**
44
+ * false: the store never reads, writes or follows the pref in localStorage (`storageKey`); the
45
+ * app owns the committed pick, for example in a URL or on its server. Until the app's first
46
+ * `setPref`, the store shows the pick the paint cache last painted. The paint cache and custom
47
+ * themes are unaffected. Default true.
48
+ */
49
+ persistPref?: boolean;
50
+ /**
51
+ * A cookie name: the store also writes the committed UI pick's background and color scheme
52
+ * there, for a server to paint with `themePaintCookieStyle()` before any script runs. Default:
53
+ * no cookie.
54
+ */
55
+ paintCookie?: string;
56
+ }
57
+ export interface ThemeStore {
58
+ /** Normalized; the same object until it changes. */
59
+ getPref(): ThemePref;
60
+ /** What is shown, the preview included. null in a terminal-only store. The same object until it changes. */
61
+ getResolved(): ResolvedTheme | null;
62
+ /** What is shown, the preview included. The same object until it changes. */
63
+ getTerminal(): ResolvedTerminalTheme;
64
+ /** [] without a UI slot. The composed custom themes first, then the base list. */
65
+ getThemes(): readonly Theme[];
66
+ /** [] without a terminal slot. The composed custom themes first (UI ones only when there is a UI slot too), then the base list. */
67
+ getTerminalThemes(): readonly TerminalTheme[];
68
+ /** Normalizes, persists, applies, notifies. Clears the preview. */
69
+ setPref(next: ThemePref): void;
70
+ /**
71
+ * Shows `next` without persisting it; `null` shows the committed pick again.
72
+ * A slot absent from `next` shows its committed pick. Throws when `next.ui`
73
+ * carries an object that is not a UI theme (`isUiTheme`).
74
+ */
75
+ preview(next: ThemePreview | null): void;
76
+ /** The active preview, or null. The same object until it changes. */
77
+ getPreview(): ThemePreview | null;
78
+ /** Only on a store with a UI slot; non-empty. Replaces the base list. */
79
+ setThemes(next: readonly Theme[]): void;
80
+ /** Only on a store with a terminal slot; non-empty. Replaces the base list. */
81
+ setTerminalThemes(next: readonly TerminalTheme[]): void;
82
+ /** Every stored custom theme of both kinds, including those that compose to null. The same array until it changes. */
83
+ getCustomThemes(): readonly AnyCustomTheme[];
84
+ /**
85
+ * Replaces the list, persists it (unless `persistCustomThemes: false`),
86
+ * re-composes the theme lists, notifies. Throws on an id that repeats or
87
+ * equals a base theme's id.
88
+ */
89
+ setCustomThemes(next: readonly AnyCustomTheme[]): void;
90
+ subscribe(listener: () => void): () => void;
91
+ /** Detaches the media-query and cross-tab listeners, and clears the preview. */
92
+ dispose(): void;
93
+ }
94
+ /**
95
+ * The theme state for one app: the pref, its persistence, and the
96
+ * `<style data-orz-theme>` rule and root attributes that paint it. Applies
97
+ * the stored theme as soon as it is created, which is the one side effect
98
+ * importing this package never has.
99
+ *
100
+ * Outside a browser it only remembers the pref, so server rendering and
101
+ * tests can create one.
102
+ */
103
+ export declare function createThemeStore({ storageKey, paintKey, themes: initialThemes, terminalThemes: initialTerminalThemes, root, customStorageKey, persistCustomThemes, persistPref, paintCookie, }: ThemeStoreOptions): ThemeStore;
104
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/theme/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,509 @@
1
+ import { composeTerminalTheme, composeTheme, isCustomTerminalTheme, isUiTheme, renderDeclarations, renderTerminalDeclarations, resolvePalette, resolveTerminal, } from "@orz/themes";
2
+ import { parseCustomThemes } from "./custom.js";
3
+ import { fitPick, normalizePref, readStoredPref, } from "./pref.js";
4
+ const DARK_QUERY = "(prefers-color-scheme: dark)";
5
+ // The <html> rule's element carries an empty value, as the paint guard's
6
+ // does; a store on its own root marks its element with that root's id.
7
+ const STYLE_SELECTOR = 'style[data-orz-theme=""]';
8
+ // Shared, so a missing slot's getter is as stable a snapshot as the others.
9
+ const NO_THEMES = Object.freeze([]);
10
+ const NO_TERMINAL_THEMES = Object.freeze([]);
11
+ let nextRootId = 0;
12
+ function slot(list, name) {
13
+ if (list === undefined)
14
+ return undefined;
15
+ if (list.length === 0)
16
+ throw new Error(`createThemeStore: ${name} is empty`);
17
+ const seen = new Set();
18
+ return list.filter((t) => !seen.has(t.id) && seen.add(t.id) !== undefined);
19
+ }
20
+ /** The schemes a pick can show: both under system on a two-palette theme. */
21
+ function schemesFor(pick) {
22
+ return pick.mode === "system" ? ["light", "dark"] : [pick.mode];
23
+ }
24
+ function find(list, pick) {
25
+ const theme = typeof pick.theme === "string"
26
+ ? list.find((t) => t.id === pick.theme)
27
+ : pick.theme;
28
+ if (theme === undefined)
29
+ return null;
30
+ const fitted = { theme: theme.id, mode: pick.mode };
31
+ if (pick.variant !== undefined)
32
+ fitted.variant = pick.variant;
33
+ return { theme, pick: fitPick(fitted, theme) };
34
+ }
35
+ const same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
36
+ /**
37
+ * The theme state for one app: the pref, its persistence, and the
38
+ * `<style data-orz-theme>` rule and root attributes that paint it. Applies
39
+ * the stored theme as soon as it is created, which is the one side effect
40
+ * importing this package never has.
41
+ *
42
+ * Outside a browser it only remembers the pref, so server rendering and
43
+ * tests can create one.
44
+ */
45
+ export function createThemeStore({ storageKey, paintKey = `${storageKey}-paint`, themes: initialThemes, terminalThemes: initialTerminalThemes, root, customStorageKey = `${storageKey}-custom`, persistCustomThemes = true, persistPref = true, paintCookie, }) {
46
+ if (initialThemes === undefined && initialTerminalThemes === undefined) {
47
+ throw new Error("createThemeStore: pass themes, terminalThemes or both");
48
+ }
49
+ let baseThemes = slot(initialThemes, "themes");
50
+ let baseTerminalThemes = slot(initialTerminalThemes, "terminalThemes");
51
+ let customs = [];
52
+ // What the slots show: the composed custom themes, then the base list.
53
+ let themes = baseThemes;
54
+ let terminalThemes = baseTerminalThemes;
55
+ const browser = typeof window !== "undefined";
56
+ const media = browser && typeof window.matchMedia === "function"
57
+ ? window.matchMedia(DARK_QUERY)
58
+ : null;
59
+ const target = root ?? (browser ? document.documentElement : null);
60
+ const ownRoot = browser && root !== undefined && root !== document.documentElement;
61
+ // Each store on its own root scopes its rule to that root, so two such
62
+ // stores never repaint each other's.
63
+ const rootId = ownRoot ? `r${nextRootId++}` : "";
64
+ const listeners = new Set();
65
+ // What was asked for, kept apart from the normalized pref so a theme that
66
+ // arrives later through setThemes (a custom one) gets its pick back.
67
+ let requested = {};
68
+ let pref = {};
69
+ let resolved = null;
70
+ let terminal = null;
71
+ let uiTokens = null;
72
+ let shown = null;
73
+ // What resolve() last chose to show for each slot; a null terminal follows.
74
+ let shownUi = null;
75
+ let shownTerminal = null;
76
+ const slots = () => ({ themes, terminalThemes });
77
+ // A missing pick falls back to the first base theme: adding a custom theme
78
+ // must not change what a user who never picked sees.
79
+ const fallback = () => ({
80
+ themes: baseThemes,
81
+ terminalThemes: baseTerminalThemes,
82
+ });
83
+ const persistsCustom = browser && persistCustomThemes;
84
+ const persists = browser && persistPref;
85
+ const baseIds = () => new Set([...(baseThemes ?? []), ...(baseTerminalThemes ?? [])].map((t) => t.id));
86
+ function recompose() {
87
+ const base = [...(baseThemes ?? []), ...(baseTerminalThemes ?? [])];
88
+ const taken = baseIds();
89
+ const uiRun = [];
90
+ const terminalRun = [];
91
+ for (const custom of customs) {
92
+ // A stored list skips setCustomThemes' checks, and a base list may gain
93
+ // a custom's id later: the id stays with whichever theme had it first.
94
+ if (taken.has(custom.id))
95
+ continue;
96
+ if (isCustomTerminalTheme(custom)) {
97
+ const theme = composeTerminalTheme(custom, base);
98
+ if (theme === null)
99
+ continue;
100
+ taken.add(theme.id);
101
+ terminalRun.push(theme);
102
+ }
103
+ else {
104
+ const theme = composeTheme(custom, base);
105
+ if (theme === null)
106
+ continue;
107
+ taken.add(theme.id);
108
+ uiRun.push(theme);
109
+ // Without a UI slot a UI custom theme shows nowhere, as a terminal
110
+ // one does without a terminal: the editor there cannot open it.
111
+ if (baseThemes)
112
+ terminalRun.push(theme);
113
+ }
114
+ }
115
+ themes = baseThemes && [...uiRun, ...baseThemes];
116
+ terminalThemes = baseTerminalThemes && [
117
+ ...terminalRun,
118
+ ...baseTerminalThemes,
119
+ ];
120
+ }
121
+ function readCustom() {
122
+ try {
123
+ return parseCustomThemes(localStorage.getItem(customStorageKey));
124
+ }
125
+ catch {
126
+ return [];
127
+ }
128
+ }
129
+ function readStored() {
130
+ try {
131
+ return readStoredPref(localStorage.getItem(storageKey));
132
+ }
133
+ catch {
134
+ // storage may be unavailable (private mode)
135
+ return {};
136
+ }
137
+ }
138
+ /**
139
+ * The pick the paint cache records. A side cached under both schemes was
140
+ * under system; fitted to its theme, this is the pick that was painted.
141
+ */
142
+ function readPainted() {
143
+ const pickOf = (side) => {
144
+ if (typeof side?.theme !== "string")
145
+ return undefined;
146
+ const mode = side.light && side.dark ? "system" : side.light ? "light" : "dark";
147
+ const pick = { theme: side.theme, mode };
148
+ if (typeof side.variant === "string")
149
+ pick.variant = side.variant;
150
+ return pick;
151
+ };
152
+ try {
153
+ const cache = JSON.parse(localStorage.getItem(paintKey) ?? "null");
154
+ const out = {};
155
+ const ui = pickOf(cache?.ui);
156
+ const terminal = pickOf(cache?.terminal);
157
+ if (ui)
158
+ out.ui = ui;
159
+ if (terminal)
160
+ out.terminal = terminal;
161
+ return out;
162
+ }
163
+ catch {
164
+ return {};
165
+ }
166
+ }
167
+ function renormalize() {
168
+ const next = normalizePref(requested, slots(), fallback());
169
+ if (!same(next, pref))
170
+ pref = next;
171
+ }
172
+ function schemeOf(mode) {
173
+ if (mode !== "system")
174
+ return mode;
175
+ return media?.matches ? "dark" : "light";
176
+ }
177
+ /** The preview's pick for a slot where it names one that exists, else the committed one. */
178
+ function pickFor(list, previewed, committed) {
179
+ return ((previewed && find(list, previewed)) ??
180
+ (committed ? find(list, committed) : null));
181
+ }
182
+ function resolve() {
183
+ shownUi = themes ? pickFor(themes, shown?.ui, pref.ui) : null;
184
+ const terminalPreview = shown?.terminal;
185
+ // Following needs a UI to follow; a terminal-only store ignores it.
186
+ shownTerminal =
187
+ !terminalThemes || (terminalPreview === "follow" && themes)
188
+ ? null
189
+ : pickFor(terminalThemes, terminalPreview === "follow" ? undefined : terminalPreview, pref.terminal);
190
+ let nextResolved = null;
191
+ let nextTerminal;
192
+ let uiTerminal = null;
193
+ if (shownUi) {
194
+ const { theme, pick: ui } = shownUi;
195
+ const colorScheme = schemeOf(ui.mode);
196
+ const palette = resolvePalette(theme, colorScheme, ui.variant);
197
+ if (palette !== null) {
198
+ nextResolved = { theme, colorScheme, variant: palette.variant };
199
+ uiTerminal = palette.terminal;
200
+ uiTokens = palette.tokens;
201
+ }
202
+ }
203
+ if (shownTerminal) {
204
+ const { theme, pick } = shownTerminal;
205
+ const colorScheme = schemeOf(pick.mode);
206
+ const own = resolveTerminal(theme, colorScheme, pick.variant);
207
+ nextTerminal = {
208
+ following: false,
209
+ theme,
210
+ colorScheme,
211
+ variant: own?.variant ?? "default",
212
+ tokens: own?.terminal ?? uiTerminal,
213
+ };
214
+ }
215
+ else {
216
+ const ui = nextResolved;
217
+ nextTerminal = {
218
+ following: true,
219
+ theme: ui.theme,
220
+ colorScheme: ui.colorScheme,
221
+ variant: ui.variant,
222
+ tokens: uiTerminal,
223
+ };
224
+ }
225
+ // Keep the old objects when nothing moved, so useSyncExternalStore
226
+ // readers do not re-render on an OS switch that changes nothing.
227
+ if (!sameResolved(resolved, nextResolved))
228
+ resolved = nextResolved;
229
+ if (!sameTerminal(terminal, nextTerminal))
230
+ terminal = nextTerminal;
231
+ }
232
+ function paintCache() {
233
+ const cache = {};
234
+ if (pref.ui && themes) {
235
+ const ui = pref.ui;
236
+ const theme = themes.find((t) => t.id === ui.theme);
237
+ const side = { theme: ui.theme };
238
+ if (ui.variant)
239
+ side.variant = ui.variant;
240
+ for (const scheme of schemesFor(ui)) {
241
+ const palette = resolvePalette(theme, scheme, ui.variant);
242
+ if (palette === null)
243
+ continue;
244
+ side[scheme] =
245
+ `${renderDeclarations(palette.tokens, scheme)} ${renderTerminalDeclarations(palette.terminal)}`;
246
+ }
247
+ cache.ui = side;
248
+ }
249
+ if (pref.terminal && terminalThemes) {
250
+ const pick = pref.terminal;
251
+ const theme = terminalThemes.find((t) => t.id === pick.theme);
252
+ const side = { theme: pick.theme };
253
+ if (pick.variant)
254
+ side.variant = pick.variant;
255
+ for (const scheme of schemesFor(pick)) {
256
+ const own = resolveTerminal(theme, scheme, pick.variant);
257
+ if (own !== null)
258
+ side[scheme] = renderTerminalDeclarations(own.terminal);
259
+ }
260
+ cache.terminal = side;
261
+ }
262
+ return cache;
263
+ }
264
+ let style = null;
265
+ function styleElement() {
266
+ if (style?.isConnected)
267
+ return style;
268
+ // The paint guard's element is adopted rather than doubled; a store on
269
+ // its own root keeps an element of its own, so it never repaints <html>.
270
+ const found = ownRoot
271
+ ? null
272
+ : document.head.querySelector(STYLE_SELECTOR);
273
+ style = found ?? document.createElement("style");
274
+ style.setAttribute("data-orz-theme", rootId);
275
+ // Last in <head>, so the rule outranks the stylesheet's own :root/.dark
276
+ // baseline, which ties with it on specificity.
277
+ document.head.append(style);
278
+ return style;
279
+ }
280
+ function paint() {
281
+ if (target === null)
282
+ return;
283
+ const declarations = [];
284
+ if (resolved !== null && uiTokens !== null) {
285
+ declarations.push(renderDeclarations(uiTokens, resolved.colorScheme));
286
+ }
287
+ declarations.push(renderTerminalDeclarations(terminal.tokens));
288
+ const selector = ownRoot ? `[data-orz-theme-root="${rootId}"]` : ":root";
289
+ styleElement().textContent = `${selector} { ${declarations.join(" ")} }`;
290
+ if (ownRoot)
291
+ target.setAttribute("data-orz-theme-root", rootId);
292
+ // A terminal-only store leaves the page's own colours alone.
293
+ if (resolved !== null && shownUi) {
294
+ target.classList.toggle("dark", resolved.colorScheme === "dark");
295
+ target.dataset.theme = resolved.theme.id;
296
+ if (shownUi.pick.variant)
297
+ target.dataset.variant = shownUi.pick.variant;
298
+ else
299
+ delete target.dataset.variant;
300
+ }
301
+ if (shownTerminal)
302
+ target.dataset.terminalTheme = shownTerminal.theme.id;
303
+ else
304
+ delete target.dataset.terminalTheme;
305
+ }
306
+ /** True while a pick names a theme that has not arrived (a custom one the app loads later). */
307
+ function awaiting() {
308
+ const missing = (pick, list) => list !== undefined &&
309
+ typeof pick?.theme === "string" &&
310
+ !list.some((t) => t.id === pick.theme);
311
+ return (missing(requested.ui, themes) ||
312
+ missing(requested.terminal, terminalThemes));
313
+ }
314
+ function writePaintCache() {
315
+ // The cache still paints the pick from before the reload; the fallback
316
+ // shown meanwhile would overwrite it, and flash on the next load.
317
+ if (awaiting())
318
+ return;
319
+ try {
320
+ localStorage.setItem(paintKey, JSON.stringify(paintCache()));
321
+ }
322
+ catch {
323
+ // the next load just paints late
324
+ }
325
+ if (paintCookie !== undefined)
326
+ writePaintCookie(paintCookie);
327
+ }
328
+ function writePaintCookie(name) {
329
+ const ui = pref.ui;
330
+ const theme = ui && themes?.find((t) => t.id === ui.theme);
331
+ if (!ui || !theme)
332
+ return;
333
+ const backgrounds = {};
334
+ for (const scheme of schemesFor(ui)) {
335
+ const palette = resolvePalette(theme, scheme, ui.variant);
336
+ if (palette !== null)
337
+ backgrounds[scheme] = palette.tokens.background;
338
+ }
339
+ // biome-ignore lint/suspicious/noDocumentCookie: synchronous like the localStorage cache beside it, and the Cookie Store API is missing from older Firefox and Safari
340
+ document.cookie = `${encodeURIComponent(name)}=${encodeURIComponent(JSON.stringify(backgrounds))}; path=/; max-age=31536000; samesite=lax`;
341
+ }
342
+ /** `committed: false` for a preview, which the next load must not paint. */
343
+ function apply(committed = true) {
344
+ resolve();
345
+ if (!browser)
346
+ return;
347
+ paint();
348
+ if (committed)
349
+ writePaintCache();
350
+ }
351
+ function notify() {
352
+ for (const l of listeners)
353
+ l();
354
+ }
355
+ const onMediaChange = () => {
356
+ if (shownUi?.pick.mode === "system" ||
357
+ shownTerminal?.pick.mode === "system") {
358
+ apply();
359
+ notify();
360
+ }
361
+ };
362
+ // Keep multiple open tabs in step.
363
+ const onStorage = (e) => {
364
+ if (persists && e.key === storageKey) {
365
+ requested = readStored();
366
+ renormalize();
367
+ apply();
368
+ notify();
369
+ }
370
+ else if (persistsCustom && e.key === customStorageKey) {
371
+ customs = readCustom();
372
+ recompose();
373
+ renormalize();
374
+ apply();
375
+ notify();
376
+ }
377
+ };
378
+ // Read before the first normalization, so a stored pick naming a custom
379
+ // theme paints on creation. Never written back from here: a list this
380
+ // version cannot fully read may be a newer version's.
381
+ if (persistsCustom)
382
+ customs = readCustom();
383
+ recompose();
384
+ // Booting on the first theme instead would repaint over the guard until
385
+ // the app's pick arrives, and cache that fallback for the next load.
386
+ requested = persists ? readStored() : browser ? readPainted() : {};
387
+ pref = normalizePref(requested, slots(), fallback());
388
+ apply();
389
+ if (browser) {
390
+ media?.addEventListener("change", onMediaChange);
391
+ window.addEventListener("storage", onStorage);
392
+ }
393
+ return {
394
+ getPref: () => pref,
395
+ getResolved: () => resolved,
396
+ getTerminal: () => terminal,
397
+ getThemes: () => themes ?? NO_THEMES,
398
+ getTerminalThemes: () => terminalThemes ?? NO_TERMINAL_THEMES,
399
+ setPref(next) {
400
+ shown = null;
401
+ requested = next;
402
+ renormalize();
403
+ if (persists) {
404
+ try {
405
+ localStorage.setItem(storageKey, JSON.stringify(pref));
406
+ }
407
+ catch {
408
+ // preference just won't persist
409
+ }
410
+ }
411
+ apply();
412
+ notify();
413
+ },
414
+ setThemes(next) {
415
+ if (themes === undefined) {
416
+ throw new Error("setThemes: this store has no UI slot");
417
+ }
418
+ baseThemes = slot(next, "themes");
419
+ recompose();
420
+ renormalize();
421
+ apply();
422
+ notify();
423
+ },
424
+ setTerminalThemes(next) {
425
+ if (terminalThemes === undefined) {
426
+ throw new Error("setTerminalThemes: this store has no terminal slot");
427
+ }
428
+ baseTerminalThemes = slot(next, "terminalThemes");
429
+ recompose();
430
+ renormalize();
431
+ apply();
432
+ notify();
433
+ },
434
+ preview(next) {
435
+ if (next === shown)
436
+ return;
437
+ const ui = next?.ui;
438
+ if (ui && typeof ui.theme !== "string" && !isUiTheme(ui.theme)) {
439
+ throw new Error(`preview: ${ui.theme.id} is not a UI theme`);
440
+ }
441
+ shown = next;
442
+ apply(false);
443
+ notify();
444
+ },
445
+ getPreview: () => shown,
446
+ getCustomThemes: () => customs,
447
+ setCustomThemes(next) {
448
+ const taken = baseIds();
449
+ const ids = new Set();
450
+ for (const { id } of next) {
451
+ if (ids.has(id)) {
452
+ throw new Error(`setCustomThemes: id ${id} appears twice`);
453
+ }
454
+ if (taken.has(id)) {
455
+ throw new Error(`setCustomThemes: id ${id} is a base theme's`);
456
+ }
457
+ ids.add(id);
458
+ }
459
+ customs = [...next];
460
+ if (persistsCustom) {
461
+ try {
462
+ localStorage.setItem(customStorageKey, JSON.stringify(customs));
463
+ }
464
+ catch {
465
+ // the list just won't persist
466
+ }
467
+ }
468
+ recompose();
469
+ renormalize();
470
+ apply();
471
+ notify();
472
+ },
473
+ subscribe(listener) {
474
+ listeners.add(listener);
475
+ return () => listeners.delete(listener);
476
+ },
477
+ dispose() {
478
+ if (shown !== null) {
479
+ shown = null;
480
+ apply(false);
481
+ }
482
+ media?.removeEventListener("change", onMediaChange);
483
+ if (browser)
484
+ window.removeEventListener("storage", onStorage);
485
+ if (ownRoot) {
486
+ style?.remove();
487
+ target?.removeAttribute("data-orz-theme-root");
488
+ }
489
+ listeners.clear();
490
+ },
491
+ };
492
+ }
493
+ function sameResolved(a, b) {
494
+ return (a === b ||
495
+ (a !== null &&
496
+ b !== null &&
497
+ a.theme === b.theme &&
498
+ a.colorScheme === b.colorScheme &&
499
+ a.variant === b.variant));
500
+ }
501
+ function sameTerminal(a, b) {
502
+ return (a !== null &&
503
+ a.following === b.following &&
504
+ a.theme === b.theme &&
505
+ a.colorScheme === b.colorScheme &&
506
+ a.variant === b.variant &&
507
+ same(a.tokens, b.tokens));
508
+ }
509
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/theme/store.ts"],"names":[],"mappings":"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"}