@mono-lit/helper 0.0.0-stage → 0.0.2

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 (539) hide show
  1. package/LICENSE.md +55 -0
  2. package/README.md +35 -3
  3. package/dist/breakpoints-CAbhDUht.js +84 -0
  4. package/dist/checkbox-Cqpie9Ap.js +4 -0
  5. package/dist/chip-DBUUa2eB.js +4 -0
  6. package/dist/chip-limits-BMoO31JM.js +213 -0
  7. package/dist/chip-strip-Cw3gyz0q.js +213 -0
  8. package/dist/color-DHYrfXsX.js +253 -0
  9. package/dist/css-class-BRKRzHx-.js +60 -0
  10. package/dist/css-size-DhHSVZJK.js +37 -0
  11. package/dist/data/theme/presets.json.d.ts +140 -0
  12. package/dist/data-source-controller-B_rgHCjw.js +241 -0
  13. package/dist/data-source-controller-Dbb4fd8I.js +241 -0
  14. package/dist/data-source-options-CP-X62Pa.js +535 -0
  15. package/dist/data-source-options-Jqj7LU3Z.js +537 -0
  16. package/dist/data-source-read-B4DGp6UQ.js +216 -0
  17. package/dist/data-source-read-DL88aH8t.js +217 -0
  18. package/dist/decorate-DEXtNagw.js +141 -0
  19. package/dist/element-props-CLB6yvbm.js +114 -0
  20. package/dist/esm-Ptok4SQZ.js +2026 -0
  21. package/dist/excel-CY6zGkcx.js +608 -0
  22. package/dist/excel-DopRbEMK.js +608 -0
  23. package/dist/export-BiGVyxt6.js +2302 -0
  24. package/dist/export.d.ts +1 -0
  25. package/dist/export.js +2302 -0
  26. package/dist/field-icons-DELrSdqJ.js +86 -0
  27. package/dist/field-path-C92eGLg3.js +251 -0
  28. package/dist/filter-builder-Bke3qOgJ.js +205 -0
  29. package/dist/filter-builder-CE4zE0V5.js +205 -0
  30. package/dist/filter-eval-DIfU2EAn.js +173 -0
  31. package/dist/filter-odata-C1vSGZaY.js +591 -0
  32. package/dist/form-control-core-B8d7k6vk.js +223 -0
  33. package/dist/form-control-core-eeRr0zLU.js +223 -0
  34. package/dist/hydration-flush-RB5Tz5nl.js +1001 -0
  35. package/dist/icon-CJkTlmTb.js +55 -0
  36. package/dist/icon-dVhYJUIH.js +17 -0
  37. package/dist/import-BgJdkwBI.js +606 -0
  38. package/dist/import.d.ts +1 -0
  39. package/dist/import.js +606 -0
  40. package/dist/index.d.ts +1 -0
  41. package/dist/index.js +16 -0
  42. package/dist/index.node-BIqEGehH.js +396 -0
  43. package/dist/index.node.d.ts +1 -0
  44. package/dist/index.node.js +16 -0
  45. package/dist/input-zGOULADt.js +4 -0
  46. package/dist/layout-var-CZnzMC0s.js +73 -0
  47. package/dist/light-slots-BVJwyg_2.js +244 -0
  48. package/dist/light-slots-DW1WgfgT.js +254 -0
  49. package/dist/markdown-DfqrfOJN.js +20146 -0
  50. package/dist/mono-button-simcTQdW.js +873 -0
  51. package/dist/mono-button.shadow-B_rKOY9N.js +784 -0
  52. package/dist/mono-data-chart-CEv29_NS.js +779 -0
  53. package/dist/mono-data-dropdown-Wnoke6zO.js +357 -0
  54. package/dist/mono-data-grid-CjkEqxgE.js +3913 -0
  55. package/dist/mono-data-grid-YjR3n9Ar.js +3915 -0
  56. package/dist/mono-element-B0kP_96P.js +232 -0
  57. package/dist/mono-event-Bi1qP9uN.js +129 -0
  58. package/dist/mono-form-controller-5PfsU4qa.js +409 -0
  59. package/dist/mono-modal-controller-BMO3n3rP.js +223 -0
  60. package/dist/mono-ui-CPV7rrdo.js +358 -0
  61. package/dist/normalize-error-Gcgmgh5i.js +871 -0
  62. package/dist/notifier-CE4yxMUQ.js +88 -0
  63. package/dist/nuxt.d.ts +1 -0
  64. package/dist/nuxt.js +130 -0
  65. package/dist/popup-portal-BziRX1yG.js +465 -0
  66. package/dist/popup-stack-CEEMib__.js +189 -0
  67. package/dist/rate-limit-BBa2PO79.js +521 -0
  68. package/dist/reactive-D3EERqgO.js +47 -0
  69. package/dist/reactive-Di3mTMnV.js +1087 -0
  70. package/dist/search.d.ts +1 -0
  71. package/dist/search.js +97 -0
  72. package/dist/src/components/accordion/accordion-core.d.ts +62 -0
  73. package/dist/src/components/accordion/accordion-types.d.ts +62 -0
  74. package/dist/src/components/accordion/index.d.ts +3 -0
  75. package/dist/src/components/accordion/index.shadow.d.ts +5 -0
  76. package/dist/src/components/accordion/mono-accordion.d.ts +55 -0
  77. package/dist/src/components/accordion/mono-accordion.shadow.d.ts +56 -0
  78. package/dist/src/components/alert/alert-core.d.ts +46 -0
  79. package/dist/src/components/alert/alert-types.d.ts +44 -0
  80. package/dist/src/components/alert/index.d.ts +3 -0
  81. package/dist/src/components/alert/index.shadow.d.ts +5 -0
  82. package/dist/src/components/alert/mono-alert.d.ts +44 -0
  83. package/dist/src/components/alert/mono-alert.shadow.d.ts +34 -0
  84. package/dist/src/components/breadcrumb/breadcrumb-core.d.ts +61 -0
  85. package/dist/src/components/breadcrumb/breadcrumb-list-core.d.ts +49 -0
  86. package/dist/src/components/breadcrumb/breadcrumb-render.d.ts +31 -0
  87. package/dist/src/components/breadcrumb/breadcrumb-types.d.ts +117 -0
  88. package/dist/src/components/breadcrumb/breadcrumb-utils.d.ts +43 -0
  89. package/dist/src/components/breadcrumb/index.d.ts +6 -0
  90. package/dist/src/components/breadcrumb/index.shadow.d.ts +8 -0
  91. package/dist/src/components/breadcrumb/mono-breadcrumb-list.d.ts +29 -0
  92. package/dist/src/components/breadcrumb/mono-breadcrumb-list.shadow.d.ts +48 -0
  93. package/dist/src/components/breadcrumb/mono-breadcrumb.d.ts +38 -0
  94. package/dist/src/components/breadcrumb/mono-breadcrumb.shadow.d.ts +73 -0
  95. package/dist/src/components/button/button-core.d.ts +90 -0
  96. package/dist/src/components/button/button-dropdown-core.d.ts +57 -0
  97. package/dist/src/components/button/button-dropdown-types.d.ts +129 -0
  98. package/dist/src/components/button/button-types.d.ts +219 -0
  99. package/dist/src/components/button/button-utils.d.ts +18 -0
  100. package/dist/src/components/button/index.button-dropdown.d.ts +4 -0
  101. package/dist/src/components/button/index.button-dropdown.shadow.d.ts +4 -0
  102. package/dist/src/components/button/index.d.ts +8 -0
  103. package/dist/src/components/button/index.shadow.d.ts +5 -0
  104. package/dist/src/components/button/mono-button-dropdown.d.ts +35 -0
  105. package/dist/src/components/button/mono-button-dropdown.shadow.d.ts +45 -0
  106. package/dist/src/components/button/mono-button.d.ts +123 -0
  107. package/dist/src/components/button/mono-button.shadow.d.ts +56 -0
  108. package/dist/src/components/card/card-core.d.ts +75 -0
  109. package/dist/src/components/card/card-types.d.ts +137 -0
  110. package/dist/src/components/card/card-utils.d.ts +23 -0
  111. package/dist/src/components/card/index.d.ts +4 -0
  112. package/dist/src/components/card/index.shadow.d.ts +6 -0
  113. package/dist/src/components/card/mono-card.d.ts +56 -0
  114. package/dist/src/components/card/mono-card.shadow.d.ts +52 -0
  115. package/dist/src/components/chart/chart-core.d.ts +43 -0
  116. package/dist/src/components/chart/chart-odata.d.ts +52 -0
  117. package/dist/src/components/chart/chart-types.d.ts +356 -0
  118. package/dist/src/components/chart/index.d.ts +8 -0
  119. package/dist/src/components/chart/index.shadow.d.ts +7 -0
  120. package/dist/src/components/chart/mono-chart-presets.d.ts +43 -0
  121. package/dist/src/components/chart/mono-chart-presets.shadow.d.ts +43 -0
  122. package/dist/src/components/chart/mono-chart.d.ts +30 -0
  123. package/dist/src/components/chart/mono-chart.shadow.d.ts +22 -0
  124. package/dist/src/components/chart/mono-data-chart.d.ts +27 -0
  125. package/dist/src/components/checkbox/checkbox-core.d.ts +53 -0
  126. package/dist/src/components/checkbox/checkbox-types.d.ts +69 -0
  127. package/dist/src/components/checkbox/checkbox-utils.d.ts +35 -0
  128. package/dist/src/components/checkbox/index.d.ts +4 -0
  129. package/dist/src/components/checkbox/index.shadow.d.ts +5 -0
  130. package/dist/src/components/checkbox/mono-checkbox.d.ts +34 -0
  131. package/dist/src/components/checkbox/mono-checkbox.shadow.d.ts +45 -0
  132. package/dist/src/components/chip/chip-core.d.ts +58 -0
  133. package/dist/src/components/chip/chip-types.d.ts +142 -0
  134. package/dist/src/components/chip/chip-utils.d.ts +24 -0
  135. package/dist/src/components/chip/index.d.ts +8 -0
  136. package/dist/src/components/chip/index.shadow.d.ts +6 -0
  137. package/dist/src/components/chip/mono-chip.d.ts +48 -0
  138. package/dist/src/components/chip/mono-chip.shadow.d.ts +33 -0
  139. package/dist/src/components/chip/mono-status-dot.d.ts +34 -0
  140. package/dist/src/components/date/date-core.d.ts +80 -0
  141. package/dist/src/components/date/date-types.d.ts +163 -0
  142. package/dist/src/components/date/index.d.ts +3 -0
  143. package/dist/src/components/date/index.shadow.d.ts +4 -0
  144. package/dist/src/components/date/mono-date.d.ts +22 -0
  145. package/dist/src/components/date/mono-date.shadow.d.ts +31 -0
  146. package/dist/src/components/drawer/drawer-core.d.ts +99 -0
  147. package/dist/src/components/drawer/drawer-types.d.ts +153 -0
  148. package/dist/src/components/drawer/index.d.ts +3 -0
  149. package/dist/src/components/drawer/index.shadow.d.ts +4 -0
  150. package/dist/src/components/drawer/mono-drawer.d.ts +45 -0
  151. package/dist/src/components/drawer/mono-drawer.shadow.d.ts +46 -0
  152. package/dist/src/components/dropdown/dropdown-core.d.ts +33 -0
  153. package/dist/src/components/dropdown/dropdown-types.d.ts +88 -0
  154. package/dist/src/components/dropdown/index.d.ts +3 -0
  155. package/dist/src/components/dropdown/index.shadow.d.ts +4 -0
  156. package/dist/src/components/dropdown/mono-dropdown.d.ts +34 -0
  157. package/dist/src/components/dropdown/mono-dropdown.shadow.d.ts +28 -0
  158. package/dist/src/components/dropdown-table/dropdown-table-core.d.ts +65 -0
  159. package/dist/src/components/dropdown-table/dropdown-table-types.d.ts +278 -0
  160. package/dist/src/components/dropdown-table/index.d.ts +5 -0
  161. package/dist/src/components/dropdown-table/index.shadow.d.ts +6 -0
  162. package/dist/src/components/dropdown-table/mono-data-dropdown.d.ts +152 -0
  163. package/dist/src/components/dropdown-table/mono-dropdown-table.d.ts +46 -0
  164. package/dist/src/components/dropdown-table/mono-dropdown-table.shadow.d.ts +22 -0
  165. package/dist/src/components/file-upload/file-upload-core.d.ts +60 -0
  166. package/dist/src/components/file-upload/file-upload-types.d.ts +145 -0
  167. package/dist/src/components/file-upload/file-upload-utils.d.ts +16 -0
  168. package/dist/src/components/file-upload/index.d.ts +4 -0
  169. package/dist/src/components/file-upload/index.shadow.d.ts +5 -0
  170. package/dist/src/components/file-upload/mono-file-upload.d.ts +33 -0
  171. package/dist/src/components/file-upload/mono-file-upload.shadow.d.ts +50 -0
  172. package/dist/src/components/filter/filter-builder-core.d.ts +36 -0
  173. package/dist/src/components/filter/filter-builder.d.ts +23 -0
  174. package/dist/src/components/filter/filter-odata.d.ts +27 -0
  175. package/dist/src/components/filter/filter-operators.d.ts +13 -0
  176. package/dist/src/components/filter/filter-types.d.ts +253 -0
  177. package/dist/src/components/filter/index.d.ts +6 -0
  178. package/dist/src/components/filter/index.shadow.d.ts +7 -0
  179. package/dist/src/components/filter/mono-filter-builder.d.ts +21 -0
  180. package/dist/src/components/filter/mono-filter-builder.shadow.d.ts +17 -0
  181. package/dist/src/components/form/form-control-core.d.ts +37 -0
  182. package/dist/src/components/form/form-rules.d.ts +25 -0
  183. package/dist/src/components/form/form-types.d.ts +307 -0
  184. package/dist/src/components/form/index.d.ts +6 -0
  185. package/dist/src/components/form/mono-form-controller.d.ts +16 -0
  186. package/dist/src/components/input/index.d.ts +6 -0
  187. package/dist/src/components/input/index.shadow.d.ts +8 -0
  188. package/dist/src/components/input/input-core.d.ts +91 -0
  189. package/dist/src/components/input/input-format.d.ts +118 -0
  190. package/dist/src/components/input/input-types.d.ts +179 -0
  191. package/dist/src/components/input/input-utils.d.ts +10 -0
  192. package/dist/src/components/input/mono-input.d.ts +46 -0
  193. package/dist/src/components/input/mono-input.shadow.d.ts +34 -0
  194. package/dist/src/components/menu/index.d.ts +6 -0
  195. package/dist/src/components/menu/index.shadow.d.ts +7 -0
  196. package/dist/src/components/menu/menu-core.d.ts +65 -0
  197. package/dist/src/components/menu/menu-render.d.ts +55 -0
  198. package/dist/src/components/menu/menu-types.d.ts +195 -0
  199. package/dist/src/components/menu/menu-utils.d.ts +53 -0
  200. package/dist/src/components/menu/mono-menu-list.d.ts +118 -0
  201. package/dist/src/components/menu/mono-menu.d.ts +39 -0
  202. package/dist/src/components/menu/mono-menu.shadow.d.ts +40 -0
  203. package/dist/src/components/modal/index.d.ts +4 -0
  204. package/dist/src/components/modal/index.shadow.d.ts +5 -0
  205. package/dist/src/components/modal/modal-core.d.ts +110 -0
  206. package/dist/src/components/modal/modal-types.d.ts +304 -0
  207. package/dist/src/components/modal/mono-modal-controller.d.ts +4 -0
  208. package/dist/src/components/modal/mono-modal.d.ts +45 -0
  209. package/dist/src/components/modal/mono-modal.shadow.d.ts +50 -0
  210. package/dist/src/components/nav/index.d.ts +4 -0
  211. package/dist/src/components/nav/index.shadow.d.ts +6 -0
  212. package/dist/src/components/nav/mono-nav.d.ts +41 -0
  213. package/dist/src/components/nav/mono-nav.shadow.d.ts +21 -0
  214. package/dist/src/components/nav/nav-core.d.ts +34 -0
  215. package/dist/src/components/nav/nav-types.d.ts +48 -0
  216. package/dist/src/components/nav/nav-utils.d.ts +12 -0
  217. package/dist/src/components/radio/index.d.ts +4 -0
  218. package/dist/src/components/radio/index.shadow.d.ts +5 -0
  219. package/dist/src/components/radio/mono-radio.d.ts +31 -0
  220. package/dist/src/components/radio/mono-radio.shadow.d.ts +35 -0
  221. package/dist/src/components/radio/radio-core.d.ts +45 -0
  222. package/dist/src/components/radio/radio-types.d.ts +58 -0
  223. package/dist/src/components/radio/radio-utils.d.ts +12 -0
  224. package/dist/src/components/rich-text-editor/index.d.ts +5 -0
  225. package/dist/src/components/rich-text-editor/index.shadow.d.ts +6 -0
  226. package/dist/src/components/rich-text-editor/mono-rich-text-editor.d.ts +31 -0
  227. package/dist/src/components/rich-text-editor/mono-rich-text-editor.shadow.d.ts +34 -0
  228. package/dist/src/components/rich-text-editor/rich-text-editor-core.d.ts +100 -0
  229. package/dist/src/components/rich-text-editor/rich-text-editor-loader.d.ts +17 -0
  230. package/dist/src/components/rich-text-editor/rich-text-editor-toolbar.d.ts +65 -0
  231. package/dist/src/components/rich-text-editor/rich-text-editor-types.d.ts +231 -0
  232. package/dist/src/components/select/index.d.ts +4 -0
  233. package/dist/src/components/select/index.shadow.d.ts +5 -0
  234. package/dist/src/components/select/mono-select.d.ts +69 -0
  235. package/dist/src/components/select/mono-select.shadow.d.ts +48 -0
  236. package/dist/src/components/select/select-core.d.ts +98 -0
  237. package/dist/src/components/select/select-types.d.ts +284 -0
  238. package/dist/src/components/select/select-utils.d.ts +7 -0
  239. package/dist/src/components/sidebar/index.d.ts +4 -0
  240. package/dist/src/components/sidebar/index.shadow.d.ts +6 -0
  241. package/dist/src/components/sidebar/mono-sidebar.d.ts +34 -0
  242. package/dist/src/components/sidebar/mono-sidebar.shadow.d.ts +27 -0
  243. package/dist/src/components/sidebar/sidebar-core.d.ts +51 -0
  244. package/dist/src/components/sidebar/sidebar-types.d.ts +119 -0
  245. package/dist/src/components/sidebar/sidebar-utils.d.ts +55 -0
  246. package/dist/src/components/switch/index.d.ts +4 -0
  247. package/dist/src/components/switch/index.shadow.d.ts +5 -0
  248. package/dist/src/components/switch/mono-switch.d.ts +31 -0
  249. package/dist/src/components/switch/mono-switch.shadow.d.ts +36 -0
  250. package/dist/src/components/switch/switch-core.d.ts +49 -0
  251. package/dist/src/components/switch/switch-types.d.ts +64 -0
  252. package/dist/src/components/switch/switch-utils.d.ts +12 -0
  253. package/dist/src/components/table/array-source.d.ts +44 -0
  254. package/dist/src/components/table/date-filter-tree.d.ts +93 -0
  255. package/dist/src/components/table/grouping.d.ts +55 -0
  256. package/dist/src/components/table/index.d.ts +33 -0
  257. package/dist/src/components/table/index.shadow.d.ts +47 -0
  258. package/dist/src/components/table/mono-data-grid.d.ts +1756 -0
  259. package/dist/src/components/table/mono-table-checkbox-core.d.ts +76 -0
  260. package/dist/src/components/table/mono-table-checkbox.d.ts +34 -0
  261. package/dist/src/components/table/mono-table-checkbox.shadow.d.ts +26 -0
  262. package/dist/src/components/table/mono-table-detail-core.d.ts +87 -0
  263. package/dist/src/components/table/mono-table-detail.d.ts +32 -0
  264. package/dist/src/components/table/mono-table-detail.shadow.d.ts +31 -0
  265. package/dist/src/components/table/mono-table-empty-core.d.ts +60 -0
  266. package/dist/src/components/table/mono-table-empty.d.ts +35 -0
  267. package/dist/src/components/table/mono-table-empty.shadow.d.ts +40 -0
  268. package/dist/src/components/table/mono-table-error-core.d.ts +84 -0
  269. package/dist/src/components/table/mono-table-error.d.ts +28 -0
  270. package/dist/src/components/table/mono-table-error.shadow.d.ts +21 -0
  271. package/dist/src/components/table/mono-table-info-core.d.ts +13 -0
  272. package/dist/src/components/table/mono-table-info.d.ts +19 -0
  273. package/dist/src/components/table/mono-table-info.shadow.d.ts +14 -0
  274. package/dist/src/components/table/mono-table-loading-core.d.ts +41 -0
  275. package/dist/src/components/table/mono-table-loading.d.ts +50 -0
  276. package/dist/src/components/table/mono-table-loading.shadow.d.ts +14 -0
  277. package/dist/src/components/table/mono-table-page-size-core.d.ts +14 -0
  278. package/dist/src/components/table/mono-table-page-size.d.ts +16 -0
  279. package/dist/src/components/table/mono-table-page-size.shadow.d.ts +11 -0
  280. package/dist/src/components/table/mono-table-paging-core.d.ts +22 -0
  281. package/dist/src/components/table/mono-table-paging-group-core.d.ts +18 -0
  282. package/dist/src/components/table/mono-table-paging-group.d.ts +20 -0
  283. package/dist/src/components/table/mono-table-paging-group.shadow.d.ts +13 -0
  284. package/dist/src/components/table/mono-table-paging.d.ts +16 -0
  285. package/dist/src/components/table/mono-table-paging.shadow.d.ts +11 -0
  286. package/dist/src/components/table/mono-table-search-core.d.ts +74 -0
  287. package/dist/src/components/table/mono-table-search.d.ts +34 -0
  288. package/dist/src/components/table/mono-table-search.shadow.d.ts +21 -0
  289. package/dist/src/components/table/mono-table-sort-core.d.ts +35 -0
  290. package/dist/src/components/table/mono-table-sort.d.ts +38 -0
  291. package/dist/src/components/table/mono-table-sort.shadow.d.ts +20 -0
  292. package/dist/src/components/table/mono-table-summary-core.d.ts +26 -0
  293. package/dist/src/components/table/mono-table-summary.d.ts +24 -0
  294. package/dist/src/components/table/mono-table-summary.shadow.d.ts +14 -0
  295. package/dist/src/components/table/mono-table-th-core.d.ts +56 -0
  296. package/dist/src/components/table/mono-table-th.d.ts +41 -0
  297. package/dist/src/components/table/mono-table-th.shadow.d.ts +19 -0
  298. package/dist/src/components/table/store-group-source.d.ts +24 -0
  299. package/dist/src/components/table/table-controller-core.d.ts +40 -0
  300. package/dist/src/components/table/table-filter-icons.d.ts +3 -0
  301. package/dist/src/components/table/table-menu-core.d.ts +65 -0
  302. package/dist/src/components/table/table-overlay.d.ts +165 -0
  303. package/dist/src/components/table/table-sort-icons.d.ts +4 -0
  304. package/dist/src/components/table/table-sort-utils.d.ts +20 -0
  305. package/dist/src/components/table/table-types.d.ts +475 -0
  306. package/dist/src/components/tabs/index.d.ts +3 -0
  307. package/dist/src/components/tabs/index.shadow.d.ts +4 -0
  308. package/dist/src/components/tabs/mono-tabs.d.ts +33 -0
  309. package/dist/src/components/tabs/mono-tabs.shadow.d.ts +37 -0
  310. package/dist/src/components/tabs/tabs-core.d.ts +57 -0
  311. package/dist/src/components/tabs/tabs-types.d.ts +65 -0
  312. package/dist/src/components/tag-input/index.d.ts +4 -0
  313. package/dist/src/components/tag-input/index.shadow.d.ts +5 -0
  314. package/dist/src/components/tag-input/mono-tag-input.d.ts +66 -0
  315. package/dist/src/components/tag-input/mono-tag-input.shadow.d.ts +40 -0
  316. package/dist/src/components/tag-input/tag-input-core.d.ts +108 -0
  317. package/dist/src/components/tag-input/tag-input-types.d.ts +420 -0
  318. package/dist/src/components/tag-input/tag-input-utils.d.ts +8 -0
  319. package/dist/src/components/textarea/index.d.ts +4 -0
  320. package/dist/src/components/textarea/index.shadow.d.ts +5 -0
  321. package/dist/src/components/textarea/mono-textarea.d.ts +29 -0
  322. package/dist/src/components/textarea/mono-textarea.shadow.d.ts +31 -0
  323. package/dist/src/components/textarea/textarea-core.d.ts +60 -0
  324. package/dist/src/components/textarea/textarea-types.d.ts +131 -0
  325. package/dist/src/components/textarea/textarea-utils.d.ts +7 -0
  326. package/dist/src/components/tooltip/control-tooltip.d.ts +36 -0
  327. package/dist/src/components/tooltip/index.d.ts +6 -0
  328. package/dist/src/components/tooltip/tooltip-config.d.ts +27 -0
  329. package/dist/src/components/tooltip/tooltip-declarative.d.ts +41 -0
  330. package/dist/src/components/tooltip/tooltip-loader.d.ts +1 -0
  331. package/dist/src/components/tooltip/tooltip-types.d.ts +110 -0
  332. package/dist/src/composables/breakpoints.d.ts +59 -0
  333. package/dist/src/composables/chip-limits.d.ts +48 -0
  334. package/dist/src/composables/chip-strip.d.ts +93 -0
  335. package/dist/src/composables/color.d.ts +103 -0
  336. package/dist/src/composables/css-class.d.ts +27 -0
  337. package/dist/src/composables/css-size.d.ts +40 -0
  338. package/dist/src/composables/data-source-controller.d.ts +113 -0
  339. package/dist/src/composables/element-props.d.ts +46 -0
  340. package/dist/src/composables/field-icons.d.ts +15 -0
  341. package/dist/src/composables/hybird-prop.d.ts +79 -0
  342. package/dist/src/composables/hydration-flush.d.ts +34 -0
  343. package/dist/src/composables/icon.d.ts +17 -0
  344. package/dist/src/composables/layout-var.d.ts +34 -0
  345. package/dist/src/composables/light-slots.d.ts +133 -0
  346. package/dist/src/composables/mdi-glyphs.d.ts +4 -0
  347. package/dist/src/composables/mono-element.d.ts +9 -0
  348. package/dist/src/composables/mono-event.d.ts +55 -0
  349. package/dist/src/composables/mono-pending.d.ts +8 -0
  350. package/dist/src/composables/mono-skeleton.d.ts +193 -0
  351. package/dist/src/composables/mono-ui.d.ts +58 -0
  352. package/dist/src/composables/notifier.d.ts +46 -0
  353. package/dist/src/composables/popup-portal.d.ts +226 -0
  354. package/dist/src/composables/popup-stack.d.ts +70 -0
  355. package/dist/src/composables/rate-limit.d.ts +108 -0
  356. package/dist/src/composables/reactive.d.ts +53 -0
  357. package/dist/src/composables/shadow-css.d.ts +42 -0
  358. package/dist/src/composables/visibility.d.ts +36 -0
  359. package/dist/src/data/theme/index.d.ts +30 -0
  360. package/dist/src/data/theme/presets.d.ts +94 -0
  361. package/dist/src/entries/index.d.ts +2 -0
  362. package/dist/src/entries/index.node.d.ts +42 -0
  363. package/dist/src/entries/search.d.ts +3 -0
  364. package/dist/src/export/detail.d.ts +29 -0
  365. package/dist/src/export/download.d.ts +9 -0
  366. package/dist/src/export/excel/index.d.ts +27 -0
  367. package/dist/src/export/excel/nodes.d.ts +123 -0
  368. package/dist/src/export/expression.d.ts +36 -0
  369. package/dist/src/export/helpers.d.ts +6 -0
  370. package/dist/src/export/index.d.ts +13 -0
  371. package/dist/src/export/markdown.d.ts +52 -0
  372. package/dist/src/export/resolve-data.d.ts +31 -0
  373. package/dist/src/export/sentinel.d.ts +97 -0
  374. package/dist/src/export/sheet-name.d.ts +45 -0
  375. package/dist/src/export/styles.d.ts +33 -0
  376. package/dist/src/export/template.d.ts +10 -0
  377. package/dist/src/export/types.d.ts +259 -0
  378. package/dist/src/import/coerce.d.ts +38 -0
  379. package/dist/src/import/index.d.ts +16 -0
  380. package/dist/src/import/match.d.ts +54 -0
  381. package/dist/src/import/parse.d.ts +15 -0
  382. package/dist/src/import/types.d.ts +153 -0
  383. package/dist/src/nuxt/index.d.ts +94 -0
  384. package/dist/src/search/data-search.d.ts +207 -0
  385. package/dist/src/search/field-path.d.ts +107 -0
  386. package/dist/src/search/filter-eval.d.ts +30 -0
  387. package/dist/src/search/index.d.ts +22 -0
  388. package/dist/src/search/odata-search.d.ts +18 -0
  389. package/dist/src/search/search-expr.d.ts +160 -0
  390. package/dist/src/utils/data-source-apply.d.ts +97 -0
  391. package/dist/src/utils/data-source-options.d.ts +116 -0
  392. package/dist/src/utils/data-source-read.d.ts +85 -0
  393. package/dist/src/utils/data-source-summary.d.ts +55 -0
  394. package/dist/src/utils/normalize-error.d.ts +90 -0
  395. package/dist/src/vite/index.d.ts +48 -0
  396. package/dist/src/vite/mono-client-only.d.ts +35 -0
  397. package/dist/src/vite/mono-ssr-stub.d.ts +20 -0
  398. package/dist/src/vite/shadow-manifest.d.ts +8 -0
  399. package/dist/styles-BIJ31TM4.js +20146 -0
  400. package/dist/tooltip-DQqNpqk2.js +795 -0
  401. package/dist/tooltip.d.ts +1 -0
  402. package/dist/tooltip.js +2 -0
  403. package/dist/ui/accordion.d.ts +1 -0
  404. package/dist/ui/accordion.js +466 -0
  405. package/dist/ui/alert.d.ts +1 -0
  406. package/dist/ui/alert.js +221 -0
  407. package/dist/ui/breadcrumb.d.ts +1 -0
  408. package/dist/ui/breadcrumb.js +902 -0
  409. package/dist/ui/button-dropdown.d.ts +1 -0
  410. package/dist/ui/button-dropdown.js +679 -0
  411. package/dist/ui/button.d.ts +1 -0
  412. package/dist/ui/button.js +63 -0
  413. package/dist/ui/card.d.ts +1 -0
  414. package/dist/ui/card.js +524 -0
  415. package/dist/ui/chart.d.ts +1 -0
  416. package/dist/ui/chart.js +885 -0
  417. package/dist/ui/checkbox.d.ts +1 -0
  418. package/dist/ui/checkbox.js +413 -0
  419. package/dist/ui/chip.d.ts +1 -0
  420. package/dist/ui/chip.js +558 -0
  421. package/dist/ui/date.d.ts +1 -0
  422. package/dist/ui/date.js +686 -0
  423. package/dist/ui/drawer.d.ts +1 -0
  424. package/dist/ui/drawer.js +901 -0
  425. package/dist/ui/dropdown-table.d.ts +1 -0
  426. package/dist/ui/dropdown-table.js +1291 -0
  427. package/dist/ui/dropdown.d.ts +1 -0
  428. package/dist/ui/dropdown.js +586 -0
  429. package/dist/ui/file-upload.d.ts +1 -0
  430. package/dist/ui/file-upload.js +688 -0
  431. package/dist/ui/filter.d.ts +1 -0
  432. package/dist/ui/filter.js +400 -0
  433. package/dist/ui/font/files/geist-47c091c9.woff2 +0 -0
  434. package/dist/ui/font/files/geist-8dd77544.woff2 +0 -0
  435. package/dist/ui/font/files/geist-b9248b1e.woff2 +0 -0
  436. package/dist/ui/font/files/geist-d40d74b4.woff2 +0 -0
  437. package/dist/ui/font/files/geist-f493429a.woff2 +0 -0
  438. package/dist/ui/font/files/geistmono-03737868.woff2 +0 -0
  439. package/dist/ui/font/files/geistmono-421a7e38.woff2 +0 -0
  440. package/dist/ui/font/files/geistmono-48ef518d.woff2 +0 -0
  441. package/dist/ui/font/files/geistmono-5df35d39.woff2 +0 -0
  442. package/dist/ui/font/files/geistmono-7de289a4.woff2 +0 -0
  443. package/dist/ui/font/files/geistmono-e976128f.woff2 +0 -0
  444. package/dist/ui/font/files/inter-05cf802c.woff2 +0 -0
  445. package/dist/ui/font/files/inter-2b2f25a4.woff2 +0 -0
  446. package/dist/ui/font/files/inter-467acc7a.woff2 +0 -0
  447. package/dist/ui/font/files/inter-6e85163c.woff2 +0 -0
  448. package/dist/ui/font/files/inter-7048add3.woff2 +0 -0
  449. package/dist/ui/font/files/inter-9be0371e.woff2 +0 -0
  450. package/dist/ui/font/files/inter-a28b7e31.woff2 +0 -0
  451. package/dist/ui/font/files/poppins-054df55a.woff2 +0 -0
  452. package/dist/ui/font/files/poppins-0ee5dc9a.woff2 +0 -0
  453. package/dist/ui/font/files/poppins-0f44cb18.woff2 +0 -0
  454. package/dist/ui/font/files/poppins-0ff0d30c.woff2 +0 -0
  455. package/dist/ui/font/files/poppins-13045147.woff2 +0 -0
  456. package/dist/ui/font/files/poppins-1db57cd9.woff2 +0 -0
  457. package/dist/ui/font/files/poppins-2cf2a902.woff2 +0 -0
  458. package/dist/ui/font/files/poppins-39e7f079.woff2 +0 -0
  459. package/dist/ui/font/files/poppins-9607042d.woff2 +0 -0
  460. package/dist/ui/font/files/poppins-9a88fc1f.woff2 +0 -0
  461. package/dist/ui/font/files/poppins-b8f4f752.woff2 +0 -0
  462. package/dist/ui/font/files/poppins-f5e57db4.woff2 +0 -0
  463. package/dist/ui/font/geist-mono.css +104 -0
  464. package/dist/ui/font/geist.css +168 -0
  465. package/dist/ui/font/inter.css +232 -0
  466. package/dist/ui/font/poppins.css +104 -0
  467. package/dist/ui/form.d.ts +1 -0
  468. package/dist/ui/form.js +3 -0
  469. package/dist/ui/index.css +21989 -0
  470. package/dist/ui/input.d.ts +1 -0
  471. package/dist/ui/input.js +1176 -0
  472. package/dist/ui/menu.d.ts +1 -0
  473. package/dist/ui/menu.js +1289 -0
  474. package/dist/ui/modal.d.ts +1 -0
  475. package/dist/ui/modal.js +996 -0
  476. package/dist/ui/nav.d.ts +1 -0
  477. package/dist/ui/nav.js +295 -0
  478. package/dist/ui/radio.d.ts +1 -0
  479. package/dist/ui/radio.js +379 -0
  480. package/dist/ui/rich-text-editor.d.ts +1 -0
  481. package/dist/ui/rich-text-editor.js +1338 -0
  482. package/dist/ui/select.d.ts +1 -0
  483. package/dist/ui/select.js +2200 -0
  484. package/dist/ui/shadow/accordion.js +442 -0
  485. package/dist/ui/shadow/alert.js +218 -0
  486. package/dist/ui/shadow/breadcrumb.js +919 -0
  487. package/dist/ui/shadow/button-dropdown.js +696 -0
  488. package/dist/ui/shadow/button.js +63 -0
  489. package/dist/ui/shadow/card.js +538 -0
  490. package/dist/ui/shadow/chart.js +1685 -0
  491. package/dist/ui/shadow/checkbox.js +457 -0
  492. package/dist/ui/shadow/chip.js +559 -0
  493. package/dist/ui/shadow/date.js +712 -0
  494. package/dist/ui/shadow/drawer.js +869 -0
  495. package/dist/ui/shadow/dropdown-table.js +1620 -0
  496. package/dist/ui/shadow/dropdown.js +547 -0
  497. package/dist/ui/shadow/file-upload.js +731 -0
  498. package/dist/ui/shadow/filter.js +402 -0
  499. package/dist/ui/shadow/input.js +1150 -0
  500. package/dist/ui/shadow/menu.js +899 -0
  501. package/dist/ui/shadow/modal.js +1194 -0
  502. package/dist/ui/shadow/nav.js +240 -0
  503. package/dist/ui/shadow/radio.js +408 -0
  504. package/dist/ui/shadow/rich-text-editor.js +1344 -0
  505. package/dist/ui/shadow/select.js +2167 -0
  506. package/dist/ui/shadow/sidebar.js +606 -0
  507. package/dist/ui/shadow/switch.js +428 -0
  508. package/dist/ui/shadow/table.js +4755 -0
  509. package/dist/ui/shadow/tabs.js +372 -0
  510. package/dist/ui/shadow/tag-input.js +2974 -0
  511. package/dist/ui/shadow/textarea.js +816 -0
  512. package/dist/ui/sidebar.d.ts +1 -0
  513. package/dist/ui/sidebar.js +659 -0
  514. package/dist/ui/switch.d.ts +1 -0
  515. package/dist/ui/switch.js +398 -0
  516. package/dist/ui/table.d.ts +1 -0
  517. package/dist/ui/table.js +4654 -0
  518. package/dist/ui/tabs.d.ts +1 -0
  519. package/dist/ui/tabs.js +379 -0
  520. package/dist/ui/tag-input.d.ts +1 -0
  521. package/dist/ui/tag-input.js +2947 -0
  522. package/dist/ui/textarea.d.ts +1 -0
  523. package/dist/ui/textarea.js +819 -0
  524. package/dist/ui/theme/legacy.css +293 -0
  525. package/dist/ui/theme/luma.css +743 -0
  526. package/dist/ui/theme/lyra.css +754 -0
  527. package/dist/ui/theme/maia.css +673 -0
  528. package/dist/ui/theme/mira.css +802 -0
  529. package/dist/ui/theme/nova.css +662 -0
  530. package/dist/ui/theme/one.css +699 -0
  531. package/dist/ui/theme/rhea.css +742 -0
  532. package/dist/ui/theme/sera.css +845 -0
  533. package/dist/ui/theme/tokens.css +261 -0
  534. package/dist/ui/theme/vega.css +467 -0
  535. package/dist/vite-C5iUK7so.js +329 -0
  536. package/dist/vite.d.ts +1 -0
  537. package/dist/vite.js +2 -0
  538. package/dist/vue.d.ts +282 -0
  539. package/package.json +411 -3
@@ -0,0 +1,1001 @@
1
+ import { html, isServer } from "lit";
2
+ //#region src/composables/mono-skeleton.ts
3
+ /**
4
+ * "Is there a DOM to render into?" — deliberately NOT lit's `isServer`. That flag is a
5
+ * build-time constant of lit's node entry, so it is `true` wherever Node's export
6
+ * conditions pick that build — including a jsdom test run, where this feature must work.
7
+ * On a real server (`@lit-labs/ssr` + its dom shim) there is a `customElements` but no
8
+ * `document`, which is exactly the distinction that matters here.
9
+ */
10
+ var hasDom$1 = typeof document !== "undefined" && typeof customElements !== "undefined";
11
+ /**
12
+ * ONE store per realm, on `globalThis` (same reasoning as `mono-ui.ts`): the light and
13
+ * shadow builds are separate bundles and a pnpm peer fork can install two copies of the
14
+ * package, yet all of them must agree on "active" and on the defaults.
15
+ */
16
+ var STATE_KEY$1 = Symbol.for("mono-helper.skeleton");
17
+ var state$2 = globalThis[STATE_KEY$1] ??= {
18
+ active: false,
19
+ disabled: false,
20
+ ssr: null,
21
+ ssrSniffed: null,
22
+ defaults: {},
23
+ watching: false,
24
+ createdBeforeActive: 0,
25
+ createdBeforeActiveTags: [],
26
+ warnedLate: false,
27
+ waiting: /* @__PURE__ */ new Set(),
28
+ holders: /* @__PURE__ */ new Set()
29
+ };
30
+ var PHANTOM_TAG$1 = "phantom-ui";
31
+ var DEFAULT_MAX_WAIT$1 = 15e3;
32
+ /** Per-element slots the Cores can read without depending on the mixin's class shape. */
33
+ var TAG_DEFAULT$1 = Symbol.for("mono-helper.skeleton.tagDefault");
34
+ var PENDING_ACTIVE$1 = Symbol.for("mono-helper.skeleton.active");
35
+ var PENDING_GRACE$1 = Symbol.for("mono-helper.skeleton.grace");
36
+ var PENDING_PHANTOM$1 = Symbol.for("mono-helper.skeleton.phantom");
37
+ /** Where `applyMonoUIDefaults` parks a tag's `pending` default (not assigned to the prop). */
38
+ var MONO_PENDING_TAG_DEFAULT = TAG_DEFAULT$1;
39
+ function isActive$1() {
40
+ return state$2.active && !state$2.disabled;
41
+ }
42
+ /**
43
+ * Start following the registry. Idempotent; a no-op on the server. Called by the mono
44
+ * `customElement` decorator, so the watcher exists before any element constructs.
45
+ */
46
+ function watchSkeletonActivation() {
47
+ if (!hasDom$1 || state$2.watching) return;
48
+ state$2.watching = true;
49
+ const activate = () => {
50
+ state$2.active = true;
51
+ if (state$2.createdBeforeActive > 0 && !state$2.warnedLate) {
52
+ state$2.warnedLate = true;
53
+ const tags = state$2.createdBeforeActiveTags.slice(0, 5).join(", ");
54
+ console.warn(`[mono-skeleton] phantom-ui was defined after ${state$2.createdBeforeActive} mono element(s) had rendered (${tags}); their first paint had no skeleton. Load "@aejkatappaja/phantom-ui" before the app mounts (main.ts import, or let @mono-lit/helper/nuxt do it).`);
55
+ }
56
+ };
57
+ if (customElements.get(PHANTOM_TAG$1)) {
58
+ activate();
59
+ return;
60
+ }
61
+ customElements.whenDefined(PHANTOM_TAG$1).then(activate, () => {});
62
+ }
63
+ /**
64
+ * Is this an SSR app? The explicit flag (`createMonoUI({ skeleton: { ssr } })`, which the
65
+ * Nuxt module sets from `nuxt.options.ssr`) wins; otherwise the Nuxt payload marker is
66
+ * sniffed once (`<script id="__NUXT_DATA__" data-ssr="true">`).
67
+ */
68
+ function isMonoSsrApp() {
69
+ if (state$2.ssr !== null) return state$2.ssr;
70
+ if (state$2.ssrSniffed === null) state$2.ssrSniffed = hasDom$1 && document.getElementById("__NUXT_DATA__")?.getAttribute("data-ssr") === "true";
71
+ return state$2.ssrSniffed;
72
+ }
73
+ var PHANTOM_KEYS = [
74
+ "animation",
75
+ "mode",
76
+ "shimmerDirection",
77
+ "shimmerColor",
78
+ "backgroundColor",
79
+ "duration",
80
+ "stagger",
81
+ "reveal",
82
+ "count",
83
+ "countGap",
84
+ "fallbackRadius",
85
+ "loadingLabel",
86
+ "pierceShadow",
87
+ "debug"
88
+ ];
89
+ var kebab = (name) => name.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);
90
+ function isPendingObject(value) {
91
+ return !!value && typeof value === "object";
92
+ }
93
+ /** The boolean a `pending` value carries (`undefined` = auto). */
94
+ function activeOf$1(value) {
95
+ if (typeof value === "boolean") return value;
96
+ if (isPendingObject(value)) return typeof value.active === "boolean" ? value.active : void 0;
97
+ }
98
+ /** Only the phantom options of a value (an object), as a plain record. */
99
+ function phantomOf$1(value) {
100
+ const out = {};
101
+ if (!isPendingObject(value)) return out;
102
+ for (const key of PHANTOM_KEYS) {
103
+ const v = value[key];
104
+ if (v !== void 0) out[key] = v;
105
+ }
106
+ return out;
107
+ }
108
+ function shallowEqual(a, b) {
109
+ const ka = Object.keys(a);
110
+ const kb = Object.keys(b);
111
+ if (ka.length !== kb.length) return false;
112
+ for (const k of ka) if (a[k] !== b[k]) return false;
113
+ return true;
114
+ }
115
+ /** `hasChanged` for the property: booleans by value, objects shallowly. */
116
+ function pendingChanged(next, prev) {
117
+ if (isPendingObject(next) && isPendingObject(prev)) return !shallowEqual(next, prev);
118
+ return next !== prev;
119
+ }
120
+ /**
121
+ * The attribute converter. The attribute form is boolean-only: `pending`,
122
+ * `pending="true"` → true; `pending="false"` → false; absent or `pending="auto"` → auto.
123
+ * A real boolean is accepted too (what a server renderer hands over).
124
+ */
125
+ var pendingConverter = {
126
+ fromAttribute(value) {
127
+ if (value === null || value === void 0) return void 0;
128
+ if (typeof value === "boolean") return value;
129
+ const s = String(value).trim().toLowerCase();
130
+ if (s === "auto") return void 0;
131
+ return s === "" || s === "true";
132
+ },
133
+ toAttribute() {
134
+ return null;
135
+ }
136
+ };
137
+ /**
138
+ * Register the `pending` property on a registered element class. Called by the mono
139
+ * `customElement` decorator BEFORE `customElements.define`, so the attribute lands in
140
+ * Lit's attribute map when `observedAttributes` is read.
141
+ */
142
+ function registerPendingProperty(cls) {
143
+ cls.createProperty("pending", {
144
+ attribute: "pending",
145
+ reflect: false,
146
+ converter: pendingConverter,
147
+ hasChanged: pendingChanged
148
+ });
149
+ }
150
+ /** Whether `pending` currently resolves to true for `el` (set before each render). */
151
+ function monoPendingActive(el) {
152
+ return !!el[PENDING_ACTIVE$1];
153
+ }
154
+ /**
155
+ * True once one macrotask has passed since the element first resolved pending — lets a
156
+ * `'data'` Core say "no controller / source after one tick → nothing to wait for" without
157
+ * releasing before a binding made in the consumer's `onMounted`.
158
+ */
159
+ function monoPendingGrace(el) {
160
+ return !!el[PENDING_GRACE$1];
161
+ }
162
+ /**
163
+ * The phantom options resolved for `el` while pending (element object over tag default
164
+ * over global default), camelCase keys. Empty while not pending. For `'custom'` Cores
165
+ * that render their own `<phantom-ui>` and want a value in the template (e.g. `count`).
166
+ */
167
+ function monoPhantomOptions(el) {
168
+ return el[PENDING_PHANTOM$1] ?? {};
169
+ }
170
+ /**
171
+ * Apply the resolved phantom options to a `<phantom-ui>` element as attributes (used by
172
+ * the mixin for its wrapper, and by `'custom'` Cores for the phantom they render).
173
+ * Diffed against what was last applied to that element, so unchanged values cost nothing.
174
+ */
175
+ function monoApplyPhantomOptions(el, target) {
176
+ if (!target) return;
177
+ const next = el[PENDING_PHANTOM$1] ?? {};
178
+ const store = target;
179
+ const prev = store[PENDING_PHANTOM$1] ?? {};
180
+ if (shallowEqual(next, prev)) return;
181
+ for (const key of new Set([...Object.keys(prev), ...Object.keys(next)])) {
182
+ const value = next[key];
183
+ const attr = kebab(key);
184
+ if (value === void 0 || value === null || value === false) target.removeAttribute(attr);
185
+ else if (value === true) target.setAttribute(attr, "");
186
+ else target.setAttribute(attr, String(value));
187
+ }
188
+ store[PENDING_PHANTOM$1] = { ...next };
189
+ }
190
+ /** @internal */
191
+ var monoSkeletonInternals = {
192
+ hasDom: hasDom$1,
193
+ isActive: isActive$1,
194
+ state: state$2,
195
+ slots: {
196
+ TAG_DEFAULT: TAG_DEFAULT$1,
197
+ PENDING_ACTIVE: PENDING_ACTIVE$1,
198
+ PENDING_GRACE: PENDING_GRACE$1,
199
+ PENDING_PHANTOM: PENDING_PHANTOM$1
200
+ },
201
+ activeOf: activeOf$1,
202
+ phantomOf: phantomOf$1,
203
+ PHANTOM_TAG: PHANTOM_TAG$1,
204
+ DEFAULT_MAX_WAIT: DEFAULT_MAX_WAIT$1
205
+ };
206
+ /** The `<phantom-ui>` wrapper the skeleton mixin renders around an element's content. */
207
+ function isMonoSkeletonWrapper(node) {
208
+ return !!node && node.nodeType === 1 && node.localName === PHANTOM_TAG$1 && node.hasAttribute("mono-skeleton");
209
+ }
210
+ /** `Array.from(host.childNodes)` minus the skeleton wrapper. */
211
+ function monoHostChildNodes(host) {
212
+ return Array.from(host.childNodes).filter((n) => !isMonoSkeletonWrapper(n));
213
+ }
214
+ /** `Array.from(host.children)` minus the skeleton wrapper. */
215
+ function monoHostChildren(host) {
216
+ return Array.from(host.children).filter((n) => !isMonoSkeletonWrapper(n));
217
+ }
218
+ //#endregion
219
+ //#region src/composables/mono-ui.ts
220
+ var STATE_KEY = Symbol.for("mono-helper.ui");
221
+ var state$1 = globalThis[STATE_KEY] ??= {
222
+ store: null,
223
+ createdTotal: 0,
224
+ createdTags: [],
225
+ createdBeforeConfig: 0,
226
+ createdBeforeConfigTags: [],
227
+ warned: /* @__PURE__ */ new Set()
228
+ };
229
+ var SHADOW_PREFIX = "mono-shadow-";
230
+ function warnOnce(key, message) {
231
+ if (state$1.warned.has(key)) return;
232
+ state$1.warned.add(key);
233
+ console.warn(`[mono-ui] ${message}`);
234
+ }
235
+ var camel = (name) => name.replace(/-([a-z0-9])/g, (_m, c) => c.toUpperCase());
236
+ /** Arrays and plain objects are copied per element, so one element cannot mutate the shared config. */
237
+ function fresh(value) {
238
+ if (Array.isArray(value)) return [...value];
239
+ if (value && typeof value === "object" && Object.getPrototypeOf(value) === Object.prototype) return { ...value };
240
+ return value;
241
+ }
242
+ /**
243
+ * Apply the configured defaults to a freshly constructed element. Called by the
244
+ * mono `customElement` decorator at the end of construction — not public API.
245
+ * @internal
246
+ */
247
+ function applyMonoUIDefaults(el, tag) {
248
+ state$1.createdTotal++;
249
+ if (!state$1.createdTags.includes(tag)) state$1.createdTags.push(tag);
250
+ if (!state$1.store) return;
251
+ const base = tag.startsWith(SHADOW_PREFIX) ? `mono-${tag.slice(12)}` : tag;
252
+ const props = {
253
+ ...state$1.store[base] ?? {},
254
+ ...base !== tag ? state$1.store[tag] ?? {} : {}
255
+ };
256
+ for (const [key, value] of Object.entries(props)) {
257
+ if (value === void 0) continue;
258
+ const prop = camel(key);
259
+ if (prop === "pending") {
260
+ el[MONO_PENDING_TAG_DEFAULT] = fresh(value);
261
+ continue;
262
+ }
263
+ if (!(prop in el)) {
264
+ warnOnce(`prop:${base}:${prop}`, `<${base}> has no prop "${key}". Ignored.`);
265
+ continue;
266
+ }
267
+ el[prop] = fresh(value);
268
+ }
269
+ }
270
+ //#endregion
271
+ //#region src/composables/mono-pending.ts
272
+ var { hasDom, isActive, state, activeOf, phantomOf, PHANTOM_TAG, DEFAULT_MAX_WAIT } = monoSkeletonInternals;
273
+ var { TAG_DEFAULT, PENDING_ACTIVE, PENDING_GRACE, PENDING_PHANTOM } = monoSkeletonInternals.slots;
274
+ /**
275
+ * Applied to every registered element class by the mono `customElement` decorator.
276
+ * The property itself is registered separately (`registerPendingProperty`) so it lands in
277
+ * Lit's attribute map before `customElements.define`.
278
+ */
279
+ function withMonoPending(superClass, tag) {
280
+ class WithMonoPending extends superClass {
281
+ constructor(...args) {
282
+ super(...args);
283
+ this._monoWrap = false;
284
+ this._monoCssOnly = false;
285
+ this._monoSeenInactive = false;
286
+ this._monoReleased = false;
287
+ this._monoHadShadowRoot = false;
288
+ this._monoPageChecked = false;
289
+ if (hasDom) this._monoHadShadowRoot = !!this.shadowRoot;
290
+ }
291
+ get _monoStatics() {
292
+ return this.constructor;
293
+ }
294
+ get _monoIsShadow() {
295
+ return this.renderRoot !== this;
296
+ }
297
+ willUpdate(changed) {
298
+ super.willUpdate?.(changed);
299
+ if (!hasDom) return;
300
+ this._monoResolve();
301
+ }
302
+ /** Resolve `pending` → the per-element slots the render / the Cores read. */
303
+ _monoResolve() {
304
+ const self = this;
305
+ const own = self.pending;
306
+ const tagDefault = self[TAG_DEFAULT];
307
+ const explicit = activeOf(own) ?? activeOf(tagDefault);
308
+ const statics = this._monoStatics;
309
+ this._monoCssOnly = statics.monoPendingDraw === "css";
310
+ let loading = false;
311
+ if (explicit !== void 0) loading = explicit;
312
+ else if (isActive()) loading = this._monoAuto(statics);
313
+ if (!isActive() && !this._monoSeenInactive && !this.hasUpdated) {
314
+ this._monoSeenInactive = true;
315
+ state.createdBeforeActive++;
316
+ if (!state.createdBeforeActiveTags.includes(tag)) state.createdBeforeActiveTags.push(tag);
317
+ }
318
+ this._monoWrap = loading && isActive() && !this._monoCssOnly && statics.monoPendingMode !== "custom" && (!this._monoIsShadow || this.hasUpdated || !this._monoHadShadowRoot);
319
+ self[PENDING_ACTIVE] = loading;
320
+ self[PENDING_PHANTOM] = loading ? {
321
+ ...phantomOf(state.defaults),
322
+ ...phantomOf(tagDefault),
323
+ ...phantomOf(own)
324
+ } : {};
325
+ }
326
+ /**
327
+ * Mirror the resolved state onto the HOST as the CSS-only attributes (`mono-pending`,
328
+ * `mono-pending-animation`, `mono-pending-mode` — skeleton.css): the element paints as a
329
+ * block the instant it exists, with no script involved. `mono-pending-covered` marks that
330
+ * phantom-ui is defined and will draw the measured blocks instead, so the CSS paint steps
331
+ * aside (both at once would hide phantom's wrapper under the block).
332
+ */
333
+ _monoReflect() {
334
+ const self = this;
335
+ const host = this;
336
+ if (!self[PENDING_ACTIVE]) {
337
+ for (const a of [
338
+ "mono-pending",
339
+ "mono-pending-animation",
340
+ "mono-pending-mode",
341
+ "mono-pending-covered"
342
+ ]) if (host.hasAttribute(a)) host.removeAttribute(a);
343
+ return;
344
+ }
345
+ const opts = self[PENDING_PHANTOM] ?? {};
346
+ if (!host.hasAttribute("mono-pending")) host.setAttribute("mono-pending", "");
347
+ for (const [attr, key] of [["mono-pending-animation", "animation"], ["mono-pending-mode", "mode"]]) {
348
+ const v = opts[key];
349
+ if (v == null || v === "") {
350
+ if (host.hasAttribute(attr)) host.removeAttribute(attr);
351
+ } else if (host.getAttribute(attr) !== String(v)) host.setAttribute(attr, String(v));
352
+ }
353
+ host.toggleAttribute("mono-pending-covered", this._monoWrap);
354
+ }
355
+ /** The automatic rule — see the header of ./mono-skeleton.ts. */
356
+ _monoAuto(statics) {
357
+ if (this._monoIsShadow) return false;
358
+ if (statics.monoPendingAuto === "never") return false;
359
+ if (!isMonoSsrApp()) return false;
360
+ if (this._monoReleased) return false;
361
+ const self = this;
362
+ if (statics.monoPendingAuto === "data") {
363
+ if (self._monoPendingReady?.() ?? true) {
364
+ this._monoRelease();
365
+ return false;
366
+ }
367
+ state.waiting.add(this);
368
+ this._monoStartTimers(true);
369
+ return true;
370
+ }
371
+ if (state.waiting.size === 0 && this._monoPageChecked) {
372
+ this._monoRelease();
373
+ return false;
374
+ }
375
+ if (!this._monoPageChecked) {
376
+ this._monoPageChecked = true;
377
+ queueMicrotask(() => {
378
+ if (state.waiting.size === 0) this._monoReleaseHeld();
379
+ });
380
+ }
381
+ state.holders.add(this);
382
+ this._monoStartTimers(false);
383
+ return true;
384
+ }
385
+ /** Done waiting (from inside an update): leave the page-wide sets, release the held. */
386
+ _monoRelease() {
387
+ this._monoReleased = true;
388
+ this._monoClearTimers();
389
+ state.holders.delete(this);
390
+ if (state.waiting.delete(this) && state.waiting.size === 0) for (const holder of Array.from(state.holders)) holder._monoReleaseHeld();
391
+ }
392
+ /**
393
+ * Release a page-held element from OUTSIDE an update, without scheduling one for the
394
+ * CSS-only draw (the attribute flip below is the whole release). A held element that
395
+ * DREW through phantom was wrapped, so its release is a normal re-render instead —
396
+ * `_monoWrap` decides, and both paths land on the same idle DOM.
397
+ */
398
+ _monoReleaseHeld() {
399
+ if (this._monoReleased) return;
400
+ this._monoReleased = true;
401
+ this._monoClearTimers();
402
+ state.holders.delete(this);
403
+ const self = this;
404
+ self[PENDING_ACTIVE] = false;
405
+ self[PENDING_PHANTOM] = {};
406
+ this._monoCssOnly = false;
407
+ if (this._monoWrap) this.requestUpdate();
408
+ else this._monoReflect();
409
+ }
410
+ /** `grace`: data-driven elements re-check once after a macrotask (see `monoPendingGrace`). */
411
+ _monoStartTimers(grace) {
412
+ const self = this;
413
+ if (grace && !self[PENDING_GRACE] && !this._monoGraceTimer) this._monoGraceTimer = setTimeout(() => {
414
+ this._monoGraceTimer = void 0;
415
+ self[PENDING_GRACE] = true;
416
+ this.requestUpdate();
417
+ }, 0);
418
+ const maxWait = state.defaults.maxWait ?? DEFAULT_MAX_WAIT;
419
+ if (maxWait > 0 && !this._monoMaxWaitTimer) this._monoMaxWaitTimer = setTimeout(() => {
420
+ this._monoMaxWaitTimer = void 0;
421
+ if (state.holders.has(this)) {
422
+ this._monoReleaseHeld();
423
+ return;
424
+ }
425
+ this._monoReleased = true;
426
+ this.requestUpdate();
427
+ }, maxWait);
428
+ }
429
+ _monoClearTimers() {
430
+ if (this._monoGraceTimer) clearTimeout(this._monoGraceTimer);
431
+ if (this._monoMaxWaitTimer) clearTimeout(this._monoMaxWaitTimer);
432
+ this._monoGraceTimer = void 0;
433
+ this._monoMaxWaitTimer = void 0;
434
+ }
435
+ disconnectedCallback() {
436
+ this._monoClearTimers();
437
+ const self = this;
438
+ self[PENDING_ACTIVE] = false;
439
+ this._monoReflect();
440
+ state.holders.delete(this);
441
+ if (state.waiting.delete(this) && state.waiting.size === 0) for (const holder of Array.from(state.holders)) holder._monoReleaseHeld();
442
+ super.disconnectedCallback();
443
+ }
444
+ render() {
445
+ const inner = super.render();
446
+ if (!this._monoWrap) return inner;
447
+ return html`<phantom-ui mono-skeleton ?loading=${monoPendingActive(this)}>${inner}</phantom-ui>`;
448
+ }
449
+ updated(changed) {
450
+ super.updated(changed);
451
+ if (!hasDom) return;
452
+ this._monoReflect();
453
+ if (this._monoWrap) monoApplyPhantomOptions(this, this._monoWrapper());
454
+ }
455
+ /** The wrapper this mixin rendered (a direct child of the render root). */
456
+ _monoWrapper() {
457
+ const root = this.renderRoot;
458
+ for (const child of Array.from(root.children)) if (child.localName === PHANTOM_TAG && child.hasAttribute("mono-skeleton")) return child;
459
+ return null;
460
+ }
461
+ }
462
+ return WithMonoPending;
463
+ }
464
+ //#endregion
465
+ //#region src/composables/mono-element.ts
466
+ /** Wrap `cls` so each instance gets the `createMonoUI` defaults at the end of construction, and `pending`. */
467
+ function withMonoUI(tag, cls) {
468
+ const Base = withMonoPending(cls, tag);
469
+ const Mono = class extends Base {
470
+ constructor(...args) {
471
+ super(...args);
472
+ applyMonoUIDefaults(this, tag);
473
+ }
474
+ };
475
+ Object.defineProperty(Mono, "name", { value: cls.name });
476
+ registerPendingProperty(Mono);
477
+ watchSkeletonActivation();
478
+ return Mono;
479
+ }
480
+ /** Register `cls` as `tag` with the app-wide defaults applied. Returns the registered class. */
481
+ function defineMonoElement(tag, cls) {
482
+ const existing = customElements.get(tag);
483
+ if (existing) return existing;
484
+ const Mono = withMonoUI(tag, cls);
485
+ customElements.define(tag, Mono);
486
+ return Mono;
487
+ }
488
+ /**
489
+ * Drop-in for Lit's `@customElement(tag)`: registers the class (wrapped so
490
+ * `createMonoUI` defaults apply and `pending` exists) and replaces the class binding with it.
491
+ */
492
+ function customElement(tag) {
493
+ return (cls) => {
494
+ const Mono = withMonoUI(tag, cls);
495
+ customElements.define(tag, Mono);
496
+ return Mono;
497
+ };
498
+ }
499
+ //#endregion
500
+ //#region src/composables/hybird-prop.ts
501
+ function toKebabCase(value) {
502
+ return value.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);
503
+ }
504
+ function toLowerCaseProp(value) {
505
+ return value.toLowerCase();
506
+ }
507
+ function defineHybridPropAliases(target, props) {
508
+ for (const prop of props) {
509
+ const kebabProp = toKebabCase(prop);
510
+ const lowerProp = toLowerCaseProp(prop);
511
+ defineAlias(target, kebabProp, prop);
512
+ if (lowerProp !== prop && lowerProp !== kebabProp) defineAlias(target, lowerProp, prop);
513
+ }
514
+ }
515
+ /**
516
+ * Register a cross-name alias for a controller-binding prop — e.g.
517
+ * `defineHybridPropAlias(el, 'controlTable', 'dataGrid')` makes `controlTable`,
518
+ * `control-table` and `controltable` all read/write the canonical reactive
519
+ * `dataGrid` property (so `.controlTable = …` still triggers Lit's update
520
+ * cycle). Used to rename the controller props without a breaking change: the
521
+ * new `control-*` spellings land here while the old `data-*` ones keep working.
522
+ */
523
+ function defineHybridPropAlias(target, aliasCamel, realProp) {
524
+ const kebab = toKebabCase(aliasCamel);
525
+ const lower = toLowerCaseProp(aliasCamel);
526
+ defineAlias(target, aliasCamel, realProp);
527
+ defineAlias(target, kebab, realProp);
528
+ if (lower !== aliasCamel && lower !== kebab) defineAlias(target, lower, realProp);
529
+ }
530
+ function defineAlias(target, alias, realProp) {
531
+ if (Object.prototype.hasOwnProperty.call(target, alias)) return;
532
+ Object.defineProperty(target, alias, {
533
+ get() {
534
+ return this[realProp];
535
+ },
536
+ set(value) {
537
+ this[realProp] = value;
538
+ },
539
+ configurable: true,
540
+ enumerable: false
541
+ });
542
+ }
543
+ /**
544
+ * Lit `hasChanged` for an array prop.
545
+ *
546
+ * **Load-bearing**, for exactly the reason `rateLimitHasChanged` is (see
547
+ * `composables/rate-limit.ts`): `:items="[...]"` in a template allocates a NEW array
548
+ * on every parent re-render. Under Lit's default `!==` the element sees a change
549
+ * each time, so anything gated on `changed.has('items')` — resetting an
550
+ * infinite-scroll page, invalidating a search memo, rebuilding a cache — runs on
551
+ * renders where nothing about the data actually moved.
552
+ *
553
+ * Element-wise identity rather than a deep compare: rows are normally stable objects
554
+ * owned by a store, so this catches the re-created-wrapper case cheaply. If the
555
+ * consumer also rebuilds each row object the arrays are reported as different, which
556
+ * is the safe direction.
557
+ *
558
+ * **Why this needs no "repair" step, unlike `mono-button-dropdown`.** That element
559
+ * compares entries by CONTENT and deliberately ignores function fields, so it reports
560
+ * "same" for entries that really were rebuilt — leaving cached listener state pointing
561
+ * at the previous array (hence `_retargetItemParts()`). `arrayHasChanged` says "same"
562
+ * only when the array holds literally the same objects in the same order, so nothing
563
+ * item-related can have moved and there is nothing to retarget. Reach for the deeper
564
+ * compare only where the callbacks are resolved late, and prove it.
565
+ *
566
+ * **Do NOT add this (or any `hasChanged`) to these — they hang real work off the
567
+ * update cycle, so suppressing an update silently drops it:**
568
+ * - `chart-core.ts` — `updated()` IS the chart pipeline; its last step `_applyData()`
569
+ * is the only place chart.js is redrawn. A skipped update freezes the canvas.
570
+ * - `date-core.ts` — `updated()` drives `_rebuild()` / `_applyModelValue()`, so
571
+ * flatpickr would be stranded on stale config.
572
+ * - every `mono-table-*` element — `table-controller-core.ts` overrides `update()` to
573
+ * pull each element's slice of `monoDataGrid({ props })`.
574
+ * - every `monoForm`-bound control and `filter-builder-core.ts` — same `update()` hook
575
+ * (`form-control-core.ts`), used for form binding and visibility.
576
+ *
577
+ * Surveyed 2026-08-17 across all 26 component directories; the guarded props are
578
+ * `select`/`tag-input` `items`, `tag-input` `modelValue`/`value`, `menu` +
579
+ * `mono-menu-list` `items`, `tabs` `items`, both `breadcrumb` `items`, and
580
+ * `file-upload` `modelValue`.
581
+ */
582
+ function arrayHasChanged(value, old) {
583
+ if (value === old) return false;
584
+ if (!Array.isArray(value) || !Array.isArray(old)) return true;
585
+ if (value.length !== old.length) return true;
586
+ for (let i = 0; i < value.length; i++) if (value[i] !== old[i]) return true;
587
+ return false;
588
+ }
589
+ var booleanStringConverter = {
590
+ fromAttribute(value) {
591
+ if (value === null || value === void 0) return false;
592
+ if (typeof value === "boolean") return value;
593
+ const normalized = String(value).toLowerCase().trim();
594
+ return normalized === "" || normalized === "true";
595
+ },
596
+ toAttribute(value) {
597
+ return value ? "" : null;
598
+ }
599
+ };
600
+ var numberStringConverter = {
601
+ fromAttribute(value) {
602
+ if (value === null || value === "") return 0;
603
+ const parsed = Number(value);
604
+ return Number.isFinite(parsed) ? parsed : 0;
605
+ },
606
+ toAttribute(value) {
607
+ if (value === void 0 || value === null) return null;
608
+ return String(value);
609
+ }
610
+ };
611
+ /**
612
+ * Like {@link numberStringConverter}, but an absent/blank attribute stays
613
+ * `undefined` instead of collapsing to `0`.
614
+ *
615
+ * Needed wherever 0 is a meaningful value AND "not set" has to mean "fall back to
616
+ * whatever the component computes" — e.g. `mono-modal` / `mono-drawer`'s `z-index`,
617
+ * where 0 is a legal stacking level and unset means "let the popup stack decide".
618
+ * Using the plain number converter there would pin every dialog to `z-index: 0`.
619
+ */
620
+ var optionalNumberConverter = {
621
+ fromAttribute(value) {
622
+ if (value === null || value === "") return void 0;
623
+ const parsed = Number(value);
624
+ return Number.isFinite(parsed) ? parsed : void 0;
625
+ },
626
+ toAttribute(value) {
627
+ if (value === void 0 || value === null) return null;
628
+ return String(value);
629
+ }
630
+ };
631
+ //#endregion
632
+ //#region \0@oxc-project+runtime@0.133.0/helpers/esm/decorate.js
633
+ function __decorate(decorators, target, key, desc) {
634
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
635
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
636
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
637
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
638
+ }
639
+ //#endregion
640
+ //#region src/data/theme/scrollbar.css?raw
641
+ var scrollbar_default = "/* ───────────────────────────────────────────────────────────────────────────\r\n The mono scrollbar — ONE design, defined once, used by every scroll surface.\r\n\r\n An 8px fully-rounded pill thumb on a transparent track. Before this file the\r\n five components that styled a scrollbar each hand-rolled their own: widths of\r\n 4 / 6 / 8px, radii of `99px` and `9999px`, and four different colour sources —\r\n while eleven other scroll containers (the main table scroller included) had no\r\n rule at all and fell back to the browser's own bar.\r\n\r\n ── Two engines, two lanes, and why they must NOT be mixed ─────────────────\r\n This is the trap that made the previous attempt a no-op: **Chrome ignores\r\n every `::-webkit-scrollbar` rule as soon as `scrollbar-width` or\r\n `scrollbar-color` is set on the same element.** Measured in Chrome 134 —\r\n a scroller with `::-webkit-scrollbar { width: 14px }` reserves 14px, and the\r\n same scroller with `scrollbar-width: thin` added reserves 11px, Chrome's own\r\n thin bar. So declaring both \"for cross-browser safety\" silently throws away\r\n the custom design and hands Chrome its default scrollbar back.\r\n\r\n Hence the split: the standard properties are fenced behind `@supports` tests\r\n that only a non-WebKit engine passes, so Chrome/Safari see the webkit lane\r\n alone and Firefox sees the standard lane alone. Two guards rather than one\r\n because each covers the other's uncertainty: `selector(::-webkit-scrollbar)`\r\n is the semantically correct test (verified false-in-Firefox by construction —\r\n Firefox implements no such pseudo-element), and `-moz-appearance` is a plain\r\n Firefox sniff. Both are verified INERT in Chrome (`CSS.supports` returns\r\n false for `-moz-appearance`, true for the selector test), so Chrome cannot\r\n accidentally enter the standard lane through either door.\r\n\r\n Firefox exposes no numeric width — `thin` is all it has — so the 8px rail and\r\n the pill radius are WebKit-only by nature, not by choice.\r\n\r\n ── Colour: `currentColor`, so every theme is right for free ───────────────\r\n The thumb is a low-alpha mix of the container's OWN text colour. A scroll\r\n container inherits `color` from the panel it sits in, so the thumb comes out\r\n dark on a white modal and pale on ONE's navy sidebar with no colour named\r\n anywhere and no per-component override. This replaces four bespoke sources,\r\n three of which mixed toward `white` (assuming a light panel) and one of which\r\n derived from the accent — which on a panel painted in that same accent\r\n dissolves into it. A new theme, flavor or `color` preset is correct for free.\r\n\r\n ── The token chain ───────────────────────────────────────────────────────\r\n Standard three-tier resolvers. Two rules govern where they may be written:\r\n\r\n 1. The resolvers are declared on the SCROLL CONTAINERS, never on `:root`. A\r\n `var()` substitutes on the element that declares it, so a resolver at\r\n `:root` could never see a `-preset` a flavor sets on `<body>` — the same\r\n trap `sidebar.css` documents for `.mono-sidebar-panel`. Declaring them on\r\n the container is also what puts `currentColor` in the right place.\r\n 2. The public `--mono-scrollbar-*` vars are NOT declared anywhere. Declaring\r\n one would mean it is always set, and a flavor's `-preset` could then never\r\n win. The defaults live only as the innermost fallback below.\r\n\r\n Order stays: default < flavor `-preset` < a consumer's public `--mono-*`.\r\n No flavor overrides these today — one scrollbar across every theme is the\r\n point — but the `-preset` slots exist for a flavor that wants its own rail.\r\n\r\n ── Adding a scroll container ─────────────────────────────────────────────\r\n Add its selector to the list below. `theme-parity.spec.mjs` fails the build\r\n for any `overflow: auto|scroll` in `src/components/**` that is missing here,\r\n and for any component CSS that styles a scrollbar itself.\r\n ─────────────────────────────────────────────────────────────────────────── */\r\n\r\n.mono-scrollbar,\r\n:where([mono-sidebar]) :where([mono-panel]) > [mono-body],\r\n.mono-drawer-body,\r\n:where([mono-drawer] > [mono-panel]) > [mono-body],\r\n.mono-modal-body,\r\n:where([mono-modal] > [mono-panel-wrap] > [mono-panel]) > [mono-body],\r\n.mono-select-dropdown-body,\r\n\r\n[mono-select] [mono-dropdown-body],\r\n.mono-tag-input-dropdown,\r\n[mono-tag-input] > [mono-dropdown],\r\n:where([mono-dropdown]) > [mono-panel],\r\n:where([mono-button-dropdown]) > [mono-panel],\r\n.mono-tag-input-more-panel,\r\n[mono-tag-input] > [mono-more-panel],\r\n.mono-textarea-field,\r\n[mono-table-scroll],\r\n[mono-search-more-panel],\r\n[mono-search-filter],\r\n[mono-search-panel],\r\n[mono-th-filter-list],\r\n[mono-dropdown-table] [mono-dd-more],\r\n[mono-dropdown-table] [mono-dd-region=\"body\"],\r\n[mono-filter-builder] > [mono-filter-group] {\r\n --_mono-scrollbar-size: var(--mono-scrollbar-size, var(--_mono-scrollbar-size-preset, 8px));\r\n --_mono-scrollbar-radius: var(--mono-scrollbar-radius, var(--_mono-scrollbar-radius-preset, 999px));\r\n --_mono-scrollbar-track: var(--mono-scrollbar-track, var(--_mono-scrollbar-track-preset, transparent));\r\n --_mono-scrollbar-thumb: var(\r\n --mono-scrollbar-thumb,\r\n var(--_mono-scrollbar-thumb-preset, color-mix(in srgb, currentColor 22%, transparent))\r\n );\r\n --_mono-scrollbar-thumb-hover: var(\r\n --mono-scrollbar-thumb-hover,\r\n var(--_mono-scrollbar-thumb-hover-preset, color-mix(in srgb, currentColor 38%, transparent))\r\n );\r\n}\r\n\r\n/* ── Firefox lane. Inert in Chrome/Safari — see the header: setting either of\r\n these there would disable the webkit lane below and restore Chrome's own\r\n scrollbar. Duplicated across two guards rather than comma-joined because\r\n `@supports` conditions cannot be combined with a selector list. ───────── */\r\n@supports not selector(::-webkit-scrollbar) {\r\n .mono-scrollbar,\r\n :where([mono-sidebar]) :where([mono-panel]) > [mono-body],\r\n .mono-drawer-body,\r\n :where([mono-drawer] > [mono-panel]) > [mono-body],\r\n .mono-modal-body,\r\n :where([mono-modal] > [mono-panel-wrap] > [mono-panel]) > [mono-body],\r\n .mono-select-dropdown-body,\r\n\r\n [mono-select] [mono-dropdown-body],\r\n .mono-tag-input-dropdown,\r\n [mono-tag-input] > [mono-dropdown],\r\n :where([mono-dropdown]) > [mono-panel],\r\n :where([mono-button-dropdown]) > [mono-panel],\r\n .mono-tag-input-more-panel,\r\n [mono-tag-input] > [mono-more-panel],\r\n .mono-textarea-field,\r\n [mono-table-scroll],\r\n [mono-search-more-panel],\r\n [mono-search-filter],\r\n [mono-search-panel],\r\n [mono-th-filter-list],\r\n [mono-dropdown-table] [mono-dd-more],\r\n [mono-dropdown-table] [mono-dd-region=\"body\"],\r\n [mono-filter-builder] > [mono-filter-group] {\r\n scrollbar-width: thin;\r\n scrollbar-color: var(--_mono-scrollbar-thumb) var(--_mono-scrollbar-track);\r\n }\r\n}\r\n\r\n@supports (-moz-appearance: none) {\r\n .mono-scrollbar,\r\n :where([mono-sidebar]) :where([mono-panel]) > [mono-body],\r\n .mono-drawer-body,\r\n :where([mono-drawer] > [mono-panel]) > [mono-body],\r\n .mono-modal-body,\r\n :where([mono-modal] > [mono-panel-wrap] > [mono-panel]) > [mono-body],\r\n .mono-select-dropdown-body,\r\n\r\n [mono-select] [mono-dropdown-body],\r\n .mono-tag-input-dropdown,\r\n [mono-tag-input] > [mono-dropdown],\r\n :where([mono-dropdown]) > [mono-panel],\r\n :where([mono-button-dropdown]) > [mono-panel],\r\n .mono-tag-input-more-panel,\r\n [mono-tag-input] > [mono-more-panel],\r\n .mono-textarea-field,\r\n [mono-table-scroll],\r\n [mono-search-more-panel],\r\n [mono-search-filter],\r\n [mono-search-panel],\r\n [mono-th-filter-list],\r\n [mono-dropdown-table] [mono-dd-more],\r\n [mono-dropdown-table] [mono-dd-region=\"body\"],\r\n [mono-filter-builder] > [mono-filter-group] {\r\n scrollbar-width: thin;\r\n scrollbar-color: var(--_mono-scrollbar-thumb) var(--_mono-scrollbar-track);\r\n }\r\n}\r\n\r\n/* ── WebKit / Blink lane: the actual design. ──────────────────────────────── */\r\n\r\n.mono-scrollbar::-webkit-scrollbar,\r\n:where([mono-sidebar]) :where([mono-panel]) > [mono-body]::-webkit-scrollbar,\r\n.mono-drawer-body::-webkit-scrollbar,\r\n:where([mono-drawer] > [mono-panel]) > [mono-body]::-webkit-scrollbar,\r\n.mono-modal-body::-webkit-scrollbar,\r\n:where([mono-modal] > [mono-panel-wrap] > [mono-panel]) > [mono-body]::-webkit-scrollbar,\r\n.mono-select-dropdown-body::-webkit-scrollbar,\r\n\r\n[mono-select] [mono-dropdown-body]::-webkit-scrollbar,\r\n.mono-tag-input-dropdown::-webkit-scrollbar,\r\n[mono-tag-input] > [mono-dropdown]::-webkit-scrollbar,\r\n:where([mono-dropdown]) > [mono-panel]::-webkit-scrollbar,\r\n:where([mono-button-dropdown]) > [mono-panel]::-webkit-scrollbar,\r\n.mono-tag-input-more-panel::-webkit-scrollbar,\r\n[mono-tag-input] > [mono-more-panel]::-webkit-scrollbar,\r\n.mono-textarea-field::-webkit-scrollbar,\r\n[mono-table-scroll]::-webkit-scrollbar,\r\n[mono-search-more-panel]::-webkit-scrollbar,\r\n[mono-search-filter]::-webkit-scrollbar,\r\n[mono-search-panel]::-webkit-scrollbar,\r\n[mono-th-filter-list]::-webkit-scrollbar,\r\n[mono-dropdown-table] [mono-dd-more]::-webkit-scrollbar,\r\n[mono-dropdown-table] [mono-dd-region=\"body\"]::-webkit-scrollbar,\r\n[mono-filter-builder] > [mono-filter-group]::-webkit-scrollbar {\r\n width: var(--_mono-scrollbar-size);\r\n height: var(--_mono-scrollbar-size);\r\n}\r\n\r\n.mono-scrollbar::-webkit-scrollbar-track,\r\n:where([mono-sidebar]) :where([mono-panel]) > [mono-body]::-webkit-scrollbar-track,\r\n.mono-drawer-body::-webkit-scrollbar-track,\r\n:where([mono-drawer] > [mono-panel]) > [mono-body]::-webkit-scrollbar-track,\r\n.mono-modal-body::-webkit-scrollbar-track,\r\n:where([mono-modal] > [mono-panel-wrap] > [mono-panel]) > [mono-body]::-webkit-scrollbar-track,\r\n.mono-select-dropdown-body::-webkit-scrollbar-track,\r\n\r\n[mono-select] [mono-dropdown-body]::-webkit-scrollbar-track,\r\n.mono-tag-input-dropdown::-webkit-scrollbar-track,\r\n[mono-tag-input] > [mono-dropdown]::-webkit-scrollbar-track,\r\n:where([mono-dropdown]) > [mono-panel]::-webkit-scrollbar-track,\r\n:where([mono-button-dropdown]) > [mono-panel]::-webkit-scrollbar-track,\r\n.mono-tag-input-more-panel::-webkit-scrollbar-track,\r\n[mono-tag-input] > [mono-more-panel]::-webkit-scrollbar-track,\r\n.mono-textarea-field::-webkit-scrollbar-track,\r\n[mono-table-scroll]::-webkit-scrollbar-track,\r\n[mono-search-more-panel]::-webkit-scrollbar-track,\r\n[mono-search-filter]::-webkit-scrollbar-track,\r\n[mono-search-panel]::-webkit-scrollbar-track,\r\n[mono-th-filter-list]::-webkit-scrollbar-track,\r\n[mono-dropdown-table] [mono-dd-more]::-webkit-scrollbar-track,\r\n[mono-dropdown-table] [mono-dd-region=\"body\"]::-webkit-scrollbar-track,\r\n[mono-filter-builder] > [mono-filter-group]::-webkit-scrollbar-track {\r\n background: var(--_mono-scrollbar-track);\r\n}\r\n\r\n.mono-scrollbar::-webkit-scrollbar-thumb,\r\n:where([mono-sidebar]) :where([mono-panel]) > [mono-body]::-webkit-scrollbar-thumb,\r\n.mono-drawer-body::-webkit-scrollbar-thumb,\r\n:where([mono-drawer] > [mono-panel]) > [mono-body]::-webkit-scrollbar-thumb,\r\n.mono-modal-body::-webkit-scrollbar-thumb,\r\n:where([mono-modal] > [mono-panel-wrap] > [mono-panel]) > [mono-body]::-webkit-scrollbar-thumb,\r\n.mono-select-dropdown-body::-webkit-scrollbar-thumb,\r\n\r\n[mono-select] [mono-dropdown-body]::-webkit-scrollbar-thumb,\r\n.mono-tag-input-dropdown::-webkit-scrollbar-thumb,\r\n[mono-tag-input] > [mono-dropdown]::-webkit-scrollbar-thumb,\r\n:where([mono-dropdown]) > [mono-panel]::-webkit-scrollbar-thumb,\r\n:where([mono-button-dropdown]) > [mono-panel]::-webkit-scrollbar-thumb,\r\n.mono-tag-input-more-panel::-webkit-scrollbar-thumb,\r\n[mono-tag-input] > [mono-more-panel]::-webkit-scrollbar-thumb,\r\n.mono-textarea-field::-webkit-scrollbar-thumb,\r\n[mono-table-scroll]::-webkit-scrollbar-thumb,\r\n[mono-search-more-panel]::-webkit-scrollbar-thumb,\r\n[mono-search-filter]::-webkit-scrollbar-thumb,\r\n[mono-search-panel]::-webkit-scrollbar-thumb,\r\n[mono-th-filter-list]::-webkit-scrollbar-thumb,\r\n[mono-dropdown-table] [mono-dd-more]::-webkit-scrollbar-thumb,\r\n[mono-dropdown-table] [mono-dd-region=\"body\"]::-webkit-scrollbar-thumb,\r\n[mono-filter-builder] > [mono-filter-group]::-webkit-scrollbar-thumb {\r\n background: var(--_mono-scrollbar-thumb);\r\n border-radius: var(--_mono-scrollbar-radius);\r\n}\r\n\r\n.mono-scrollbar::-webkit-scrollbar-thumb:hover,\r\n:where([mono-sidebar]) :where([mono-panel]) > [mono-body]::-webkit-scrollbar-thumb:hover,\r\n.mono-drawer-body::-webkit-scrollbar-thumb:hover,\r\n:where([mono-drawer] > [mono-panel]) > [mono-body]::-webkit-scrollbar-thumb:hover,\r\n.mono-modal-body::-webkit-scrollbar-thumb:hover,\r\n:where([mono-modal] > [mono-panel-wrap] > [mono-panel]) > [mono-body]::-webkit-scrollbar-thumb:hover,\r\n.mono-select-dropdown-body::-webkit-scrollbar-thumb:hover,\r\n\r\n[mono-select] [mono-dropdown-body]::-webkit-scrollbar-thumb:hover,\r\n.mono-tag-input-dropdown::-webkit-scrollbar-thumb:hover,\r\n[mono-tag-input] > [mono-dropdown]::-webkit-scrollbar-thumb:hover,\r\n:where([mono-dropdown]) > [mono-panel]::-webkit-scrollbar-thumb:hover,\r\n:where([mono-button-dropdown]) > [mono-panel]::-webkit-scrollbar-thumb:hover,\r\n.mono-tag-input-more-panel::-webkit-scrollbar-thumb:hover,\r\n[mono-tag-input] > [mono-more-panel]::-webkit-scrollbar-thumb:hover,\r\n.mono-textarea-field::-webkit-scrollbar-thumb:hover,\r\n[mono-table-scroll]::-webkit-scrollbar-thumb:hover,\r\n[mono-search-more-panel]::-webkit-scrollbar-thumb:hover,\r\n[mono-search-filter]::-webkit-scrollbar-thumb:hover,\r\n[mono-search-panel]::-webkit-scrollbar-thumb:hover,\r\n[mono-th-filter-list]::-webkit-scrollbar-thumb:hover,\r\n[mono-dropdown-table] [mono-dd-more]::-webkit-scrollbar-thumb:hover,\r\n[mono-dropdown-table] [mono-dd-region=\"body\"]::-webkit-scrollbar-thumb:hover,\r\n[mono-filter-builder] > [mono-filter-group]::-webkit-scrollbar-thumb:hover {\r\n background: var(--_mono-scrollbar-thumb-hover);\r\n}\r\n\r\n/* Chrome draws stepper arrows on a custom scrollbar in some configurations, and\r\n the corner square where two bars meet takes the UA's own grey. Both are part\r\n of \"do not look like the browser's scrollbar\". */\r\n.mono-scrollbar::-webkit-scrollbar-button,\r\n:where([mono-sidebar]) :where([mono-panel]) > [mono-body]::-webkit-scrollbar-button,\r\n.mono-drawer-body::-webkit-scrollbar-button,\r\n:where([mono-drawer] > [mono-panel]) > [mono-body]::-webkit-scrollbar-button,\r\n.mono-modal-body::-webkit-scrollbar-button,\r\n:where([mono-modal] > [mono-panel-wrap] > [mono-panel]) > [mono-body]::-webkit-scrollbar-button,\r\n.mono-select-dropdown-body::-webkit-scrollbar-button,\r\n\r\n[mono-select] [mono-dropdown-body]::-webkit-scrollbar-button,\r\n.mono-tag-input-dropdown::-webkit-scrollbar-button,\r\n[mono-tag-input] > [mono-dropdown]::-webkit-scrollbar-button,\r\n:where([mono-dropdown]) > [mono-panel]::-webkit-scrollbar-button,\r\n:where([mono-button-dropdown]) > [mono-panel]::-webkit-scrollbar-button,\r\n.mono-tag-input-more-panel::-webkit-scrollbar-button,\r\n[mono-tag-input] > [mono-more-panel]::-webkit-scrollbar-button,\r\n.mono-textarea-field::-webkit-scrollbar-button,\r\n[mono-table-scroll]::-webkit-scrollbar-button,\r\n[mono-search-more-panel]::-webkit-scrollbar-button,\r\n[mono-search-filter]::-webkit-scrollbar-button,\r\n[mono-search-panel]::-webkit-scrollbar-button,\r\n[mono-th-filter-list]::-webkit-scrollbar-button,\r\n[mono-dropdown-table] [mono-dd-more]::-webkit-scrollbar-button,\r\n[mono-dropdown-table] [mono-dd-region=\"body\"]::-webkit-scrollbar-button,\r\n[mono-filter-builder] > [mono-filter-group]::-webkit-scrollbar-button {\r\n display: none;\r\n}\r\n\r\n.mono-scrollbar::-webkit-scrollbar-corner,\r\n:where([mono-sidebar]) :where([mono-panel]) > [mono-body]::-webkit-scrollbar-corner,\r\n.mono-drawer-body::-webkit-scrollbar-corner,\r\n:where([mono-drawer] > [mono-panel]) > [mono-body]::-webkit-scrollbar-corner,\r\n.mono-modal-body::-webkit-scrollbar-corner,\r\n:where([mono-modal] > [mono-panel-wrap] > [mono-panel]) > [mono-body]::-webkit-scrollbar-corner,\r\n.mono-select-dropdown-body::-webkit-scrollbar-corner,\r\n\r\n[mono-select] [mono-dropdown-body]::-webkit-scrollbar-corner,\r\n.mono-tag-input-dropdown::-webkit-scrollbar-corner,\r\n[mono-tag-input] > [mono-dropdown]::-webkit-scrollbar-corner,\r\n:where([mono-dropdown]) > [mono-panel]::-webkit-scrollbar-corner,\r\n:where([mono-button-dropdown]) > [mono-panel]::-webkit-scrollbar-corner,\r\n.mono-tag-input-more-panel::-webkit-scrollbar-corner,\r\n[mono-tag-input] > [mono-more-panel]::-webkit-scrollbar-corner,\r\n.mono-textarea-field::-webkit-scrollbar-corner,\r\n[mono-table-scroll]::-webkit-scrollbar-corner,\r\n[mono-search-more-panel]::-webkit-scrollbar-corner,\r\n[mono-search-filter]::-webkit-scrollbar-corner,\r\n[mono-search-panel]::-webkit-scrollbar-corner,\r\n[mono-th-filter-list]::-webkit-scrollbar-corner,\r\n[mono-dropdown-table] [mono-dd-more]::-webkit-scrollbar-corner,\r\n[mono-dropdown-table] [mono-dd-region=\"body\"]::-webkit-scrollbar-corner,\r\n[mono-filter-builder] > [mono-filter-group]::-webkit-scrollbar-corner {\r\n background: var(--_mono-scrollbar-track);\r\n}\r\n";
642
+ //#endregion
643
+ //#region src/data/theme/selection.css?raw
644
+ var selection_default = "/* ───────────────────────────────────────────────────────────────────────────\r\n Text selection on mono's painted surfaces — ONE design, defined once.\r\n\r\n The browser's default selection swaps in its own background (a light blue in\r\n Chrome) and leaves the text `color` alone. That is fine wherever the page owns\r\n the ink. It is not fine on a surface mono has repainted: a navy sidebar puts\r\n white text on that pale blue and the label disappears.\r\n\r\n Before this file there was no `::selection` rule anywhere in the repository —\r\n source or built — so the UA default was unconditionally in play.\r\n\r\n ── Why `currentColor`, and NOT the `-contrast` token ──────────────────────\r\n The ink is not always light. sidebar.css:44 spells it out: it follows\r\n `--theme-<color>-contrast`, and `--theme-warning-contrast` is\r\n `rgba(0,0,0,.87)` — an amber sidebar has near-BLACK text. A rule that\r\n hardcoded a pale wash would be wrong there in precisely the way the UA default\r\n is wrong on navy, just in the other direction.\r\n\r\n So the wash is a low-alpha mix of the surface's OWN ink — the same device the\r\n shared scrollbar uses for its thumb, for the same reason. Two consequences:\r\n\r\n · `color` is deliberately NOT set. The text keeps whatever ink its surface\r\n gave it, so the pair can never disagree — which is the entire failure this\r\n file exists to fix.\r\n · the wash is a tint of that ink, so it comes out pale on navy and dark on\r\n amber with no colour named here, no per-component override, and no\r\n per-flavor rule. A new theme, flavor or `color` preset is right for free.\r\n\r\n ── Two traps ─────────────────────────────────────────────────────────────\r\n 1. `::selection` accepts only a handful of properties, and the `background`\r\n SHORTHAND is not one of them. It has to be `background-color`, or the rule\r\n parses and then silently does nothing.\r\n\r\n 2. `currentColor` inside a highlight pseudo-element resolves to that\r\n highlight's own colour which — because `color` is left unset above —\r\n inherits from the originating element. That is what makes it the surface's\r\n ink rather than the UA's highlight ink. The plain rgba that precedes it is\r\n a deliberate fallback: an engine that refuses the mix drops only the second\r\n declaration, so a neutral grey wash still lands and stays legible against a\r\n light AND a dark ink, instead of the whole rule falling out and restoring\r\n the bug.\r\n\r\n ── Scope ─────────────────────────────────────────────────────────────────\r\n Only the surfaces mono repaints. Cards, modals and table cells are left to the\r\n UA on purpose: mono has not touched their ink, so the default is already\r\n correct there, and a component library has no business restyling selection\r\n across a host page it does not own.\r\n\r\n Both the root class and the inner panel class are listed. The light build puts\r\n the root class on the host element; the shadow build's host is\r\n `<mono-shadow-…>` and `toShadowCss()` rewrites only the ELEMENT selector to\r\n `:host`, leaving `.mono-sidebar` unmatched inside the root — the inner classes\r\n are what carry the rule in that lane.\r\n ─────────────────────────────────────────────────────────────────────────── */\r\n\r\n.mono-sidebar::selection,\r\n.mono-sidebar ::selection,\r\n.mono-sidebar-panel::selection,\r\n.mono-sidebar-panel ::selection,\r\n.mono-nav::selection,\r\n.mono-nav ::selection,\r\n.mono-menu::selection,\r\n.mono-menu ::selection,\r\n.mono-button::selection,\r\n.mono-button ::selection {\r\n background-color: rgba(127, 127, 127, 0.42);\r\n background-color: color-mix(in srgb, currentColor 30%, transparent);\r\n}\r\n";
645
+ //#endregion
646
+ //#region src/components/skeleton/skeleton.css?raw
647
+ var skeleton_default = "/*\r\n * The automatic skeleton (`pending`, see src/composables/mono-skeleton.ts).\r\n *\r\n * Every mono element that renders wrapped draws `<phantom-ui mono-skeleton>` around its\r\n * content and only toggles `loading`. phantom-ui (the optional peer\r\n * `@aejkatappaja/phantom-ui`) measures the element's real DOM and overlays shimmer\r\n * blocks; these rules make that overlay FOLLOW THE MONO THEME and cost nothing while\r\n * idle.\r\n *\r\n * Shipped in `@mono-lit/helper/ui/index.css` (via src/entries/index.css) and appended to\r\n * every shadow sheet by `toShadowCss()` — a shadow root never sees the global sheet.\r\n *\r\n * Theming hooks (set anywhere above the element, or on it):\r\n * --mono-skeleton-bg block colour (default: the theme's muted surface)\r\n * --mono-skeleton-color sweep colour (default: a translucent foreground wash)\r\n * --mono-skeleton-duration cycle length (default 1.5s)\r\n * --mono-skeleton-radius the wrapper's frame (default: the theme radius)\r\n * All defaults resolve from the theme tokens, which already change per flavor and under\r\n * `.dark` — so there is no separate dark block here, and no colour is hard-coded.\r\n */\r\n\r\nphantom-ui[mono-skeleton] {\r\n /* phantom reads these three on its host; declaring them on the element (document\r\n level) beats its `:host` defaults, and they inherit into its shadow overlay. */\r\n --shimmer-bg: var(--mono-skeleton-bg, var(--mono-mode-surface-hover, var(--muted)));\r\n --shimmer-color: var(\r\n --mono-skeleton-color,\r\n color-mix(in oklab, var(--mono-mode-surface-strong, var(--foreground)) 22%, transparent)\r\n );\r\n --shimmer-duration: var(--mono-skeleton-duration, 1.5s);\r\n\r\n /* The wrapper only exists while loading (see mono-pending.ts); should one ever sit idle,\r\n it is not a box at all — phantom's own `:host { display: block; position: relative;\r\n overflow: hidden }` would otherwise turn an inline control into a block. */\r\n display: contents;\r\n}\r\n\r\n/* LOADING: become the box phantom measures against — the host's content size. */\r\nphantom-ui[mono-skeleton][loading] {\r\n display: block;\r\n position: relative;\r\n overflow: hidden;\r\n box-sizing: border-box;\r\n max-width: 100%;\r\n border-radius: var(--mono-skeleton-radius, var(--mono-radius-md, var(--radius)));\r\n}\r\n\r\n/* Inline hosts keep their inline flow while loading (button.css etc. set the host to\r\n inline-block / inline-flex; a block wrapper inside would break the line). */\r\n:is(mono-button, mono-chip, mono-checkbox, mono-radio, mono-switch, mono-dropdown, mono-status-dot)\r\n > phantom-ui[mono-skeleton][loading] {\r\n display: inline-block;\r\n vertical-align: middle;\r\n width: 100%;\r\n}\r\n\r\n:is(mono-button-dropdown, mono-table-detail, mono-table-checkbox)\r\n > phantom-ui[mono-skeleton][loading] {\r\n display: inline-flex;\r\n}\r\n\r\n/* NESTED pending (a card still loading around a table still loading): the OUTER\r\n skeleton is the one the user sees; the inner one goes transparent rather than\r\n shimmering through it. The vars inherit into phantom's shadow overlay. */\r\nphantom-ui[mono-skeleton][loading] phantom-ui[mono-skeleton][loading] {\r\n --shimmer-color: transparent;\r\n --shimmer-bg: transparent;\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n phantom-ui[mono-skeleton] {\r\n --shimmer-duration: 0s;\r\n }\r\n}\r\n\r\n/* ── CSS-only skeleton: the `mono-pending` attribute ──────────────────────────\r\n The JS-free half of the feature, for everything that has to look like a skeleton\r\n BEFORE any script runs or where phantom-ui has nothing to measure: server HTML,\r\n the hydration window, a plain `<div mono-pending>` bar. One vocabulary with the\r\n component prop / phantom options:\r\n\r\n <div mono-pending style=\"height:2rem\"></div>\r\n <div mono-pending mono-pending-animation=\"pulse\" mono-pending-mode=\"skeleton\">…</div>\r\n\r\n `mono-pending-animation` shimmer (default) | pulse | breathe | solid\r\n `mono-pending-mode` skeleton (default: the element becomes one block, its\r\n content hidden) | overlay (content stays, dimmed, swept)\r\n\r\n The mono elements set these on their HOST while `pending` resolves true, so an\r\n element paints as a block the instant it exists; once phantom-ui is defined the\r\n element also carries `mono-pending-covered` and this paint steps aside for\r\n phantom's measured blocks. Without phantom-ui this IS the skeleton. */\r\n\r\n/* Every rule below mirrors phantom-ui's own stylesheet for its `.shimmer-block` (1.6.x:\r\n `.shimmer-block { background: var(--shimmer-bg) }`, its `::after` sweep, the\r\n `animation=\"pulse|breathe|solid\"` variants, `mode=\"overlay\"` and the reduced-motion\r\n fallback) — one block per host instead of one per measured leaf, but the same look. */\r\n[mono-pending]:not([mono-pending=\"false\"]):not([mono-pending-covered]) {\r\n /* phantom-ui's three knobs, resolved from the SAME mono tokens the wrapper above\r\n hands to phantom — so this paint and phantom's measured blocks are literally the\r\n same colours, the same gradient and the same clock. */\r\n --shimmer-bg: var(--mono-skeleton-bg, var(--mono-mode-surface-hover, var(--muted)));\r\n --shimmer-color: var(\r\n --mono-skeleton-color,\r\n color-mix(in oklab, var(--mono-mode-surface-strong, var(--foreground)) 22%, transparent)\r\n );\r\n --shimmer-duration: var(--mono-skeleton-duration, 1.5s);\r\n position: relative;\r\n overflow: hidden;\r\n isolation: isolate;\r\n /* phantom's `fallbackRadius` (4px) — the radius a measured leaf gets when it has none */\r\n border-radius: var(--mono-skeleton-radius, 4px);\r\n pointer-events: none;\r\n user-select: none;\r\n /* phantom hides text with -webkit-text-fill-color (see its #phantom-ui-loading-styles) */\r\n -webkit-text-fill-color: transparent !important;\r\n color: transparent !important;\r\n caret-color: transparent;\r\n}\r\n\r\n/* skeleton mode (the default): the block — `.shimmer-block { background: var(--shimmer-bg) }` */\r\n[mono-pending]:not([mono-pending=\"false\"]):not([mono-pending-covered]):not([mono-pending-mode=\"overlay\"]) {\r\n background: var(--shimmer-bg);\r\n background-clip: padding-box;\r\n}\r\n\r\n[mono-pending]:not([mono-pending=\"false\"]):not([mono-pending-covered]):not([mono-pending-mode=\"overlay\"]) > * {\r\n visibility: hidden;\r\n}\r\n\r\n/* overlay mode — `:host([mode=\"overlay\"]) { --shimmer-bg: transparent }` + the content stays,\r\n dimmed: `::slotted(*) { opacity: var(--phantom-content-opacity, 0.5); transition: opacity 0.2s ease-out }` */\r\n[mono-pending][mono-pending-mode=\"overlay\"]:not([mono-pending=\"false\"]):not([mono-pending-covered]) {\r\n --shimmer-bg: transparent;\r\n -webkit-text-fill-color: initial !important;\r\n color: inherit !important;\r\n}\r\n\r\n[mono-pending][mono-pending-mode=\"overlay\"]:not([mono-pending=\"false\"]):not([mono-pending-covered]) > * {\r\n opacity: var(--phantom-content-opacity, 0.5);\r\n transition: opacity 0.2s ease-out;\r\n}\r\n\r\n/* the sweep — `.shimmer-block::after`, verbatim */\r\n[mono-pending]:not([mono-pending=\"false\"]):not([mono-pending-covered])::after {\r\n content: \"\";\r\n position: absolute;\r\n inset: 0;\r\n z-index: 1;\r\n pointer-events: none;\r\n background: linear-gradient(\r\n 90deg,\r\n var(--shimmer-bg) 30%,\r\n var(--shimmer-color) 50%,\r\n var(--shimmer-bg) 70%\r\n );\r\n background-size: 200% 100%;\r\n animation: mono-shimmer-horizontal var(--shimmer-duration) linear infinite;\r\n}\r\n\r\n@keyframes mono-shimmer-horizontal {\r\n 0% { background-position: 200% 0; }\r\n 100% { background-position: -200% 0; }\r\n}\r\n\r\n/* pulse / breathe animate the BLOCK itself and drop the sweep; solid only drops the sweep */\r\n[mono-pending][mono-pending-animation=\"pulse\"]:not([mono-pending=\"false\"]):not([mono-pending-covered]) {\r\n animation: mono-phantom-pulse var(--shimmer-duration) ease-in-out infinite;\r\n}\r\n\r\n[mono-pending][mono-pending-animation=\"breathe\"]:not([mono-pending=\"false\"]):not([mono-pending-covered]) {\r\n animation: mono-phantom-breathe var(--shimmer-duration) ease-in-out infinite;\r\n}\r\n\r\n[mono-pending][mono-pending-animation=\"pulse\"]:not([mono-pending=\"false\"]):not([mono-pending-covered])::after,\r\n[mono-pending][mono-pending-animation=\"breathe\"]:not([mono-pending=\"false\"]):not([mono-pending-covered])::after,\r\n[mono-pending][mono-pending-animation=\"solid\"]:not([mono-pending=\"false\"]):not([mono-pending-covered])::after {\r\n display: none;\r\n}\r\n\r\n@keyframes mono-phantom-pulse {\r\n 0%, 100% { opacity: 1; }\r\n 50% { opacity: 0.4; }\r\n}\r\n\r\n@keyframes mono-phantom-breathe {\r\n 0%, 100% { opacity: 0.6; transform: scale(1); }\r\n 50% { opacity: 1; transform: scale(1.02); }\r\n}\r\n\r\n/* overlay + pulse/breathe/solid: phantom keeps a flat veil (`background: var(--shimmer-color)`)\r\n so the refresh still shows; pulse/breathe animate that veil, not the content under it */\r\n[mono-pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"pulse\"]:not([mono-pending=\"false\"]):not([mono-pending-covered]),\r\n[mono-pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"breathe\"]:not([mono-pending=\"false\"]):not([mono-pending-covered]) {\r\n animation: none;\r\n}\r\n\r\n[mono-pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"pulse\"]:not([mono-pending=\"false\"]):not([mono-pending-covered])::after,\r\n[mono-pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"breathe\"]:not([mono-pending=\"false\"]):not([mono-pending-covered])::after,\r\n[mono-pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"solid\"]:not([mono-pending=\"false\"]):not([mono-pending-covered])::after {\r\n display: block;\r\n animation: none;\r\n background: var(--shimmer-color);\r\n}\r\n\r\n[mono-pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"pulse\"]:not([mono-pending=\"false\"]):not([mono-pending-covered])::after {\r\n animation: mono-phantom-pulse var(--shimmer-duration) ease-in-out infinite;\r\n}\r\n\r\n[mono-pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"breathe\"]:not([mono-pending=\"false\"]):not([mono-pending-covered])::after {\r\n animation: mono-phantom-breathe var(--shimmer-duration) ease-in-out infinite;\r\n}\r\n\r\n/* reduced motion — phantom degrades every mode to the static solid block; overlay keeps\r\n its veil, held still */\r\n@media (prefers-reduced-motion: reduce) {\r\n [mono-pending]:not([mono-pending=\"false\"]):not([mono-pending-covered]),\r\n [mono-pending]:not([mono-pending=\"false\"]):not([mono-pending-covered])::after {\r\n animation: none;\r\n }\r\n\r\n [mono-pending]:not([mono-pending=\"false\"]):not([mono-pending-covered]):not([mono-pending-mode=\"overlay\"])::after {\r\n display: none;\r\n }\r\n\r\n [mono-pending][mono-pending-mode=\"overlay\"]:not([mono-pending=\"false\"]):not([mono-pending-covered])::after {\r\n display: block;\r\n background: var(--shimmer-color);\r\n }\r\n}\r\n\r\n/* NESTED blocks (a held input inside a held card): the outer block already hides them\r\n (`visibility: hidden` on its children), so they must not each run their own animated\r\n `::after` — on a page with dozens of controls that is dozens of composited sweeps for\r\n nothing, and it is what made a page switch feel heavy. Inner ones go flat. */\r\n[mono-pending]:not([mono-pending=\"false\"]):not([mono-pending-covered]) [mono-pending]::after {\r\n display: none;\r\n}\r\n\r\n[mono-pending]:not([mono-pending=\"false\"]):not([mono-pending-covered]) [mono-pending] {\r\n animation: none;\r\n}\r\n";
648
+ //#endregion
649
+ //#region src/components/skeleton/skeleton-shadow.css?raw
650
+ var skeleton_shadow_default = "/*\r\n * Shadow-only companion of skeleton.css (appended by `toShadowCss()`, never in the\r\n * global sheet).\r\n *\r\n * phantom-ui hides the content it measures with ONE stylesheet it injects into\r\n * `document.head` (`#phantom-ui-loading-styles`: text made transparent, media and\r\n * buttons faded, pointer events off). A `<phantom-ui>` rendered INSIDE a shadow root\r\n * cannot be reached by that sheet, so a shadow element with a manual `pending` would\r\n * shimmer over still-visible text. These are the same rules (phantom ships them as its\r\n * `ssr.css` too), scoped to our wrapper, so the shadow build hides what the light build\r\n * hides.\r\n */\r\n\r\nphantom-ui[mono-skeleton][loading]:not([mode=\"overlay\"]) * {\r\n -webkit-text-fill-color: transparent !important;\r\n pointer-events: none;\r\n user-select: none;\r\n}\r\n\r\nphantom-ui[mono-skeleton][loading]:not([mode=\"overlay\"]) :is(img, svg, video, canvas, button, [role=\"button\"]) {\r\n opacity: 0 !important;\r\n}\r\n\r\nphantom-ui[mono-skeleton][loading]:not([mode=\"overlay\"]) [data-shimmer-ignore],\r\nphantom-ui[mono-skeleton][loading]:not([mode=\"overlay\"]) [data-shimmer-ignore] * {\r\n -webkit-text-fill-color: initial !important;\r\n pointer-events: auto;\r\n user-select: auto;\r\n}\r\n\r\nphantom-ui[mono-skeleton][loading]:not([mode=\"overlay\"]) [data-shimmer-ignore] :is(img, svg, video, canvas, button, [role=\"button\"]) {\r\n opacity: 1 !important;\r\n}\r\n\r\n/* The `mono-pending` attribute on a SHADOW host. The global sheet's `[mono-pending]` rules do\r\n not reach a host from inside its own root, so the same paint is restated as `:host(...)`.\r\n `[pending]` (the prop's own attribute, present in server HTML) counts too, so a\r\n server-rendered `<mono-shadow-x pending>` is a skeleton before hydration. */\r\n:host([mono-pending]:not([mono-pending=\"false\"]):not([mono-pending-covered])),\r\n:host([pending]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered])) {\r\n /* phantom-ui's three knobs, resolved from the SAME mono tokens the wrapper above\r\n hands to phantom — so this paint and phantom's measured blocks are literally the\r\n same colours, the same gradient and the same clock. */\r\n --shimmer-bg: var(--mono-skeleton-bg, var(--mono-mode-surface-hover, var(--muted)));\r\n --shimmer-color: var(\r\n --mono-skeleton-color,\r\n color-mix(in oklab, var(--mono-mode-surface-strong, var(--foreground)) 22%, transparent)\r\n );\r\n --shimmer-duration: var(--mono-skeleton-duration, 1.5s);\r\n position: relative;\r\n overflow: hidden;\r\n isolation: isolate;\r\n border-radius: var(--mono-skeleton-radius, 4px);\r\n pointer-events: none;\r\n user-select: none;\r\n -webkit-text-fill-color: transparent !important;\r\n color: transparent !important;\r\n caret-color: transparent;\r\n}\r\n\r\n:host([mono-pending]:not([mono-pending-mode=\"overlay\"]):not([mono-pending=\"false\"]):not([mono-pending-covered])),\r\n:host([pending]:not([mono-pending-mode=\"overlay\"]):not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered])) {\r\n background: var(--shimmer-bg);\r\n background-clip: padding-box;\r\n}\r\n\r\n:host([mono-pending]:not([mono-pending-mode=\"overlay\"]):not([mono-pending=\"false\"]):not([mono-pending-covered])) > *,\r\n:host([mono-pending]:not([mono-pending-mode=\"overlay\"]):not([mono-pending=\"false\"]):not([mono-pending-covered])) slot,\r\n:host([pending]:not([mono-pending-mode=\"overlay\"]):not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered])) > *,\r\n:host([pending]:not([mono-pending-mode=\"overlay\"]):not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered])) slot {\r\n visibility: hidden;\r\n}\r\n/* The `slot` selectors cover SLOTTED content (a sidebar's menu list, a modal's body):\r\n `:host(...) > *` reaches only the shadow root's own children, and `:host(...)::slotted(*)`\r\n — the obvious spelling — is INVALID in Chrome (the `:host()` + `::slotted()` combination\r\n matches nothing; verified against 1234). Hiding the SLOT itself works: visibility follows\r\n the FLAT tree, so everything the slot renders — slotted nodes and fallback alike — hides. */\r\n\r\n:host([mono-pending][mono-pending-mode=\"overlay\"]:not([mono-pending=\"false\"]):not([mono-pending-covered])),\r\n:host([pending][mono-pending-mode=\"overlay\"]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered])) {\r\n --shimmer-bg: transparent;\r\n -webkit-text-fill-color: initial !important;\r\n color: inherit !important;\r\n}\r\n\r\n:host([mono-pending][mono-pending-mode=\"overlay\"]:not([mono-pending=\"false\"]):not([mono-pending-covered])) > *,\r\n:host([mono-pending][mono-pending-mode=\"overlay\"]:not([mono-pending=\"false\"]):not([mono-pending-covered])) slot,\r\n:host([pending][mono-pending-mode=\"overlay\"]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered])) > *,\r\n:host([pending][mono-pending-mode=\"overlay\"]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered])) slot {\r\n opacity: var(--phantom-content-opacity, 0.5);\r\n transition: opacity 0.2s ease-out;\r\n}\r\n\r\n:host([mono-pending]:not([mono-pending=\"false\"]):not([mono-pending-covered]))::after,\r\n:host([pending]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered]))::after {\r\n content: \"\";\r\n position: absolute;\r\n inset: 0;\r\n z-index: 1;\r\n pointer-events: none;\r\n background: linear-gradient(\r\n 90deg,\r\n var(--shimmer-bg) 30%,\r\n var(--shimmer-color) 50%,\r\n var(--shimmer-bg) 70%\r\n );\r\n background-size: 200% 100%;\r\n animation: mono-shimmer-horizontal var(--shimmer-duration) linear infinite;\r\n}\r\n\r\n:host([mono-pending][mono-pending-animation=\"pulse\"]:not([mono-pending=\"false\"]):not([mono-pending-covered])),\r\n:host([pending][mono-pending-animation=\"pulse\"]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered])) {\r\n animation: mono-phantom-pulse var(--shimmer-duration) ease-in-out infinite;\r\n}\r\n\r\n:host([mono-pending][mono-pending-animation=\"breathe\"]:not([mono-pending=\"false\"]):not([mono-pending-covered])),\r\n:host([pending][mono-pending-animation=\"breathe\"]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered])) {\r\n animation: mono-phantom-breathe var(--shimmer-duration) ease-in-out infinite;\r\n}\r\n\r\n:host([mono-pending][mono-pending-animation=\"pulse\"]:not([mono-pending=\"false\"]):not([mono-pending-covered]))::after,\r\n:host([pending][mono-pending-animation=\"pulse\"]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered]))::after,\r\n:host([mono-pending][mono-pending-animation=\"breathe\"]:not([mono-pending=\"false\"]):not([mono-pending-covered]))::after,\r\n:host([pending][mono-pending-animation=\"breathe\"]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered]))::after,\r\n:host([mono-pending][mono-pending-animation=\"solid\"]:not([mono-pending=\"false\"]):not([mono-pending-covered]))::after,\r\n:host([pending][mono-pending-animation=\"solid\"]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered]))::after {\r\n display: none;\r\n}\r\n\r\n:host([mono-pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"pulse\"]:not([mono-pending=\"false\"]):not([mono-pending-covered])),\r\n:host([pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"pulse\"]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered])),\r\n:host([mono-pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"breathe\"]:not([mono-pending=\"false\"]):not([mono-pending-covered])),\r\n:host([pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"breathe\"]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered])) {\r\n animation: none;\r\n}\r\n\r\n:host([mono-pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"pulse\"]:not([mono-pending=\"false\"]):not([mono-pending-covered]))::after,\r\n:host([pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"pulse\"]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered]))::after,\r\n:host([mono-pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"breathe\"]:not([mono-pending=\"false\"]):not([mono-pending-covered]))::after,\r\n:host([pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"breathe\"]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered]))::after,\r\n:host([mono-pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"solid\"]:not([mono-pending=\"false\"]):not([mono-pending-covered]))::after,\r\n:host([pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"solid\"]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered]))::after {\r\n display: block;\r\n animation: none;\r\n background: var(--shimmer-color);\r\n}\r\n\r\n:host([mono-pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"pulse\"]:not([mono-pending=\"false\"]):not([mono-pending-covered]))::after,\r\n:host([pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"pulse\"]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered]))::after {\r\n animation: mono-phantom-pulse var(--shimmer-duration) ease-in-out infinite;\r\n}\r\n\r\n:host([mono-pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"breathe\"]:not([mono-pending=\"false\"]):not([mono-pending-covered]))::after,\r\n:host([pending][mono-pending-mode=\"overlay\"][mono-pending-animation=\"breathe\"]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered]))::after {\r\n animation: mono-phantom-breathe var(--shimmer-duration) ease-in-out infinite;\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n :host([mono-pending]:not([mono-pending=\"false\"]):not([mono-pending-covered])),\r\n :host([pending]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered])),\r\n :host([mono-pending]:not([mono-pending=\"false\"]):not([mono-pending-covered]))::after,\r\n :host([pending]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered]))::after {\r\n animation: none;\r\n }\r\n\r\n :host([mono-pending]:not([mono-pending-mode=\"overlay\"]):not([mono-pending=\"false\"]):not([mono-pending-covered]))::after,\r\n :host([pending]:not([mono-pending-mode=\"overlay\"]):not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered]))::after {\r\n display: none;\r\n }\r\n\r\n :host([mono-pending][mono-pending-mode=\"overlay\"]:not([mono-pending=\"false\"]):not([mono-pending-covered]))::after,\r\n :host([pending][mono-pending-mode=\"overlay\"]:not([pending=\"false\"]):not([pending=\"auto\"]):not([mono-pending-covered]))::after {\r\n display: block;\r\n background: var(--shimmer-color);\r\n }\r\n}\r\n\r\n/* The keyframes are per root: a shadow sheet cannot see the global sheet's. Same\r\n definitions as skeleton.css (phantom-ui's `shimmer-horizontal` / `phantom-pulse` /\r\n `phantom-breathe`). */\r\n@keyframes mono-shimmer-horizontal {\r\n 0% { background-position: 200% 0; }\r\n 100% { background-position: -200% 0; }\r\n}\r\n\r\n@keyframes mono-phantom-pulse {\r\n 0%, 100% { opacity: 1; }\r\n 50% { opacity: 0.4; }\r\n}\r\n\r\n@keyframes mono-phantom-breathe {\r\n 0%, 100% { opacity: 0.6; transform: scale(1); }\r\n 50% { opacity: 1; transform: scale(1.02); }\r\n}\r\n";
651
+ //#endregion
652
+ //#region src/composables/shadow-css.ts
653
+ function escapeRegExp(value) {
654
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
655
+ }
656
+ function toShadowCss(css, opts = {}) {
657
+ let out = css;
658
+ if (opts.host) {
659
+ const tag = escapeRegExp(opts.host);
660
+ out = out.replace(new RegExp(`(^|[\\s,{}])${tag}\\[([^\\]]*)\\]`, "g"), (_m, pre, attr) => `${pre}:host([${attr}])`);
661
+ out = out.replace(new RegExp(`(^|[\\s,{}])${tag}\\b(?![-[])`, "g"), (_m, pre) => `${pre}:host`);
662
+ }
663
+ const prepend = opts.hostDisplay ? `:host { display: ${opts.hostDisplay}; }\n` : "";
664
+ const append = opts.append ? `\n${opts.append}` : "";
665
+ return `${prepend}${out}${append}\n${scrollbar_default}\n${selection_default}\n${skeleton_default}\n${skeleton_shadow_default}`;
666
+ }
667
+ var _iconSheet = null;
668
+ /** True once we've captured at least one real `.i-…` ICON rule (not just helpers). */
669
+ var _iconSheetReady = false;
670
+ /** How many icon rules the last collection saw, so a later one can be detected. */
671
+ var _iconRuleCount = -1;
672
+ /** Selectors that target an icon utility class (`.i-…`) or the `.mono-icon` helper. */
673
+ var ICON_SELECTOR = /(^|[\s,>+~(])\.(i-[a-z0-9]|mono-icon)/i;
674
+ /** A real data-driven icon utility (`.i-mdi-…`) — what we actually wait for. */
675
+ var ICON_GLYPH_SELECTOR = /(^|[\s,>+~(])\.i-[a-z0-9]/i;
676
+ /**
677
+ * The mask a collected icon rule loses on the way in.
678
+ *
679
+ * UnoCSS emits `--un-icon: url(…)` together with `mask-image: var(--un-icon)`,
680
+ * but Chrome serialises that mask back out of `cssText` as an EMPTY value — so
681
+ * copying the rule text, which is the only way to move a rule into a
682
+ * constructable sheet, drops the one declaration that paints the glyph. The
683
+ * result is an element with the right size, the right `currentColor` fill and
684
+ * nothing to show for it.
685
+ *
686
+ * Restating it here costs one rule. An element without `--un-icon` resolves the
687
+ * var to nothing, which makes `mask-image` invalid at computed-value time and
688
+ * therefore `none` — so this cannot mask anything that is not an icon.
689
+ */
690
+ var ICON_MASK_RULE = `
691
+ [class^='i-'],
692
+ [class*=' i-'] {
693
+ mask-image: var(--un-icon);
694
+ -webkit-mask-image: var(--un-icon);
695
+ mask-size: 100% 100%;
696
+ -webkit-mask-size: 100% 100%;
697
+ mask-repeat: no-repeat;
698
+ -webkit-mask-repeat: no-repeat;
699
+ }`;
700
+ /**
701
+ * How many icon rules the document currently carries. Counting is far cheaper
702
+ * than collecting, and it is the only way to notice that UnoCSS has generated a
703
+ * class since the last collection.
704
+ */
705
+ function countIconRules() {
706
+ if (typeof document === "undefined") return -1;
707
+ let n = 0;
708
+ for (const styleSheet of Array.from(document.styleSheets)) {
709
+ let rules;
710
+ try {
711
+ rules = styleSheet.cssRules;
712
+ } catch {
713
+ continue;
714
+ }
715
+ for (const rule of Array.from(rules)) {
716
+ const selector = rule.selectorText;
717
+ if (selector && ICON_SELECTOR.test(selector)) n++;
718
+ }
719
+ }
720
+ return n;
721
+ }
722
+ function ensureIconSheet() {
723
+ if (isServer || typeof document === "undefined" || typeof CSSStyleSheet === "undefined") return null;
724
+ if (!_iconSheet) try {
725
+ _iconSheet = new CSSStyleSheet();
726
+ } catch {
727
+ return null;
728
+ }
729
+ if (_iconSheetReady && countIconRules() === _iconRuleCount) return _iconSheet;
730
+ const collected = [];
731
+ const seen = /* @__PURE__ */ new Set();
732
+ let glyphFound = false;
733
+ for (const styleSheet of Array.from(document.styleSheets)) {
734
+ let rules;
735
+ try {
736
+ rules = styleSheet.cssRules;
737
+ } catch {
738
+ continue;
739
+ }
740
+ for (const rule of Array.from(rules)) {
741
+ const selector = rule.selectorText;
742
+ if (!selector || !ICON_SELECTOR.test(selector)) continue;
743
+ if (ICON_GLYPH_SELECTOR.test(selector)) glyphFound = true;
744
+ const text = rule.cssText;
745
+ if (seen.has(text)) continue;
746
+ seen.add(text);
747
+ collected.push(text);
748
+ }
749
+ }
750
+ try {
751
+ _iconSheet.replaceSync(collected.join("\n") + ICON_MASK_RULE);
752
+ } catch {
753
+ for (const text of [...collected, ICON_MASK_RULE]) try {
754
+ _iconSheet.insertRule(text, _iconSheet.cssRules.length);
755
+ } catch {}
756
+ }
757
+ if (glyphFound) _iconSheetReady = true;
758
+ _iconRuleCount = collected.length;
759
+ return _iconSheet;
760
+ }
761
+ var _refreshScheduled = false;
762
+ /**
763
+ * The page's UnoCSS (`/_nuxt/__uno.css`) is a `<link>` that may finish loading
764
+ * AFTER the menu's last render — so `updated()` won't fire again to recapture
765
+ * the icon rules. Poll briefly (~1s of animation frames) to repopulate the live
766
+ * shared sheet; because adopters hold a reference to that same object, the
767
+ * glyphs appear as soon as the rules land — no component re-render required.
768
+ */
769
+ function scheduleIconRefresh() {
770
+ if (_refreshScheduled || _iconSheetReady || isServer) return;
771
+ const raf = typeof requestAnimationFrame !== "undefined" ? requestAnimationFrame : typeof setTimeout !== "undefined" ? (cb) => setTimeout(cb, 16) : null;
772
+ if (!raf) return;
773
+ _refreshScheduled = true;
774
+ let attempts = 0;
775
+ const tick = () => {
776
+ attempts++;
777
+ ensureIconSheet();
778
+ if (_iconSheetReady || attempts > 60) {
779
+ _refreshScheduled = false;
780
+ return;
781
+ }
782
+ raf(tick);
783
+ };
784
+ raf(tick);
785
+ }
786
+ /**
787
+ * Adopt the page's icon utility CSS into `root` so `i-…` / `.mono-icon` glyphs
788
+ * render inside the shadow tree. Idempotent and SSR-safe (no-op on the server).
789
+ * Call from `firstUpdated` AND `updated` — early calls adopt the (live) shared
790
+ * sheet; later calls / the scheduled refresh repopulate it once UnoCSS loads.
791
+ */
792
+ function adoptIconStyles(root) {
793
+ if (isServer || !root || !("adoptedStyleSheets" in root)) return;
794
+ const sheet = ensureIconSheet();
795
+ if (!sheet) return;
796
+ if (!root.adoptedStyleSheets.includes(sheet)) root.adoptedStyleSheets = [...root.adoptedStyleSheets, sheet];
797
+ if (!_iconSheetReady) scheduleIconRefresh();
798
+ }
799
+ var _utilitySheet = null;
800
+ /** True once the shared sheet has settled — after this we never re-scan on adopt. */
801
+ var _utilitySheetReady = false;
802
+ /** A rule we adopt: leading class selector, not an icon/theme rule. */
803
+ function isAdoptableUtilityRule(selector) {
804
+ if (!/^\s*\./.test(selector)) return false;
805
+ if (/^\s*\.vp-/.test(selector)) return false;
806
+ return !ICON_SELECTOR.test(selector);
807
+ }
808
+ /** Collect adoptable style rules, descending into `@media`/`@supports` groups. */
809
+ function collectUtilityRules(rules, collected, seen) {
810
+ for (const rule of Array.from(rules)) {
811
+ const selector = rule.selectorText;
812
+ if (selector) {
813
+ if (!isAdoptableUtilityRule(selector)) continue;
814
+ const text = rule.cssText;
815
+ if (seen.has(text)) continue;
816
+ seen.add(text);
817
+ collected.push(text);
818
+ continue;
819
+ }
820
+ if (rule.name === "mono-tokens") continue;
821
+ const group = rule;
822
+ if (group.cssRules?.length) {
823
+ if (Array.from(group.cssRules).some((inner) => {
824
+ const innerSel = inner.selectorText;
825
+ return Boolean(innerSel && isAdoptableUtilityRule(innerSel));
826
+ })) {
827
+ const text = rule.cssText;
828
+ if (seen.has(text)) continue;
829
+ seen.add(text);
830
+ collected.push(text);
831
+ }
832
+ }
833
+ }
834
+ }
835
+ /** (Re)scan the page's stylesheets into the shared sheet. Called only while the
836
+ * sheet is not yet "ready" (initial mount + the one-time settle poll). */
837
+ /**
838
+ * The slice of a utility framework's preflight that its own classes DEPEND ON.
839
+ *
840
+ * Tailwind / UnoCSS emit `border` as `border-width: 1px` alone, because their
841
+ * preflight has already set `border-style: solid` on every element. A shadow root
842
+ * gets no preflight, so that class painted nothing: a `cssClass` of
843
+ * `"border border-emerald-200"` gave the light build a 1px line and the shadow
844
+ * build none — the two drifted by 2px and the colour was the giveaway (it applied,
845
+ * the width did not).
846
+ *
847
+ * Kept to what is strictly needed to make the collected utilities behave; it is
848
+ * NOT a full reset, which would fight the component's own styles.
849
+ */
850
+ var UTILITY_PREFLIGHT = `
851
+ *, ::before, ::after { border-style: solid; border-width: 0; border-color: currentColor; }
852
+ `;
853
+ function buildUtilitySheet() {
854
+ if (!_utilitySheet) return;
855
+ const collected = [UTILITY_PREFLIGHT];
856
+ const seen = /* @__PURE__ */ new Set();
857
+ for (const styleSheet of Array.from(document.styleSheets)) {
858
+ let rules;
859
+ try {
860
+ rules = styleSheet.cssRules;
861
+ } catch {
862
+ continue;
863
+ }
864
+ collectUtilityRules(rules, collected, seen);
865
+ }
866
+ try {
867
+ _utilitySheet.replaceSync(collected.join("\n"));
868
+ } catch {
869
+ for (const text of collected) try {
870
+ _utilitySheet.insertRule(text, _utilitySheet.cssRules.length);
871
+ } catch {}
872
+ }
873
+ }
874
+ function ensureUtilitySheet() {
875
+ if (isServer || typeof document === "undefined" || typeof CSSStyleSheet === "undefined") return null;
876
+ if (!_utilitySheet) try {
877
+ _utilitySheet = new CSSStyleSheet();
878
+ } catch {
879
+ return null;
880
+ }
881
+ if (_utilitySheetReady) return _utilitySheet;
882
+ buildUtilitySheet();
883
+ return _utilitySheet;
884
+ }
885
+ var _utilityRefreshScheduled = false;
886
+ /**
887
+ * The page's UnoCSS may finish loading / grow AFTER a shadow component's last
888
+ * render. Poll briefly (~1s of animation frames), repopulating the live shared
889
+ * sheet each frame; adopters hold a reference to that same object, so utilities
890
+ * appear as soon as their rules land — no component re-render required.
891
+ */
892
+ function scheduleUtilityRefresh() {
893
+ if (_utilityRefreshScheduled || _utilitySheetReady || isServer) return;
894
+ const raf = typeof requestAnimationFrame !== "undefined" ? requestAnimationFrame : typeof setTimeout !== "undefined" ? (cb) => setTimeout(cb, 16) : null;
895
+ if (!raf) return;
896
+ _utilityRefreshScheduled = true;
897
+ let attempts = 0;
898
+ let lastCount = -1;
899
+ let stable = 0;
900
+ const tick = () => {
901
+ attempts++;
902
+ buildUtilitySheet();
903
+ const count = _utilitySheet?.cssRules.length ?? 0;
904
+ if (count === lastCount) stable++;
905
+ else {
906
+ stable = 0;
907
+ lastCount = count;
908
+ }
909
+ if (stable >= 3 || attempts > 60) {
910
+ _utilitySheetReady = true;
911
+ return;
912
+ }
913
+ raf(tick);
914
+ };
915
+ raf(tick);
916
+ }
917
+ /**
918
+ * Adopt the page's utility CSS into `root` so consumer `cssClass` utilities
919
+ * (UnoCSS etc.) render inside the shadow tree. Idempotent and SSR-safe (no-op on
920
+ * the server). Call from `firstUpdated` AND `updated` — early calls adopt the
921
+ * (live) shared sheet; the scheduled refresh repopulates it as UnoCSS loads.
922
+ */
923
+ function adoptUtilityStyles(root) {
924
+ if (isServer || !root || !("adoptedStyleSheets" in root)) return;
925
+ const sheet = ensureUtilitySheet();
926
+ if (!sheet) return;
927
+ if (!root.adoptedStyleSheets.includes(sheet)) root.adoptedStyleSheets = [...root.adoptedStyleSheets, sheet];
928
+ if (!_utilitySheetReady) scheduleUtilityRefresh();
929
+ }
930
+ /** Reactive controller that re-adopts the utility sheet after every render. */
931
+ var UtilityStylesController = class {
932
+ constructor(host) {
933
+ this.host = host;
934
+ host.addController(this);
935
+ }
936
+ hostUpdated() {
937
+ adoptUtilityStyles(this.host.renderRoot);
938
+ }
939
+ };
940
+ /**
941
+ * Mixin for `*.shadow.ts` builds: adopts the page's utility CSS into the shadow
942
+ * root so consumer `cssClass` utilities (UnoCSS etc.) paint inside the tree.
943
+ * Uses a reactive controller (its `hostUpdated` runs after EVERY render), so it
944
+ * works regardless of whether a subclass overrides `updated`/`firstUpdated`.
945
+ * Client-only — skipped entirely on the server (SSR renders unstyled, utilities
946
+ * snap in on hydration). Apply as `extends withShadowUtilityStyles(XCore(LitElement))`.
947
+ */
948
+ function withShadowUtilityStyles(superClass) {
949
+ class WithShadowUtilityStyles extends superClass {
950
+ constructor(...args) {
951
+ super(...args);
952
+ if (!isServer) new UtilityStylesController(this);
953
+ }
954
+ }
955
+ return WithShadowUtilityStyles;
956
+ }
957
+ //#endregion
958
+ //#region src/composables/hydration-flush.ts
959
+ /**
960
+ * Force an SSR'd element's first client update to flush.
961
+ *
962
+ * Under `nuxt-ssr-lit` the server-rendered element can stay `hasUpdated: false`
963
+ * with updates disabled even after `<LitWrapper>` removes `defer-hydration` —
964
+ * so `render()` never re-runs and its event handlers never bind. The element is
965
+ * then frozen at whatever the SERVER assumed, while its JS properties keep
966
+ * taking client values: a silent divergence between the rendered DOM and the
967
+ * live props.
968
+ *
969
+ * Poll `requestUpdate()` for a few ticks until the element reports `hasUpdated`.
970
+ * A no-op once the element has hydrated normally.
971
+ *
972
+ * Scheduling races `requestAnimationFrame` against a `setTimeout` backstop:
973
+ * rAF does NOT fire in a hidden, minimized, or fully occluded tab, and relying
974
+ * on it alone leaves the element frozen until the tab is next painted.
975
+ */
976
+ function flushSsrHydration(el, options = {}) {
977
+ if (typeof window === "undefined") return;
978
+ const { gate, maxTries = 30 } = options;
979
+ const schedule = (cb) => {
980
+ let fired = false;
981
+ const once = () => {
982
+ if (fired) return;
983
+ fired = true;
984
+ cb();
985
+ };
986
+ if (typeof requestAnimationFrame !== "undefined") requestAnimationFrame(once);
987
+ setTimeout(once, 32);
988
+ };
989
+ let tries = 0;
990
+ const tick = () => {
991
+ if (el.hasUpdated || tries++ > maxTries) return;
992
+ if (!gate || gate()) {
993
+ el.removeAttribute("defer-hydration");
994
+ el.requestUpdate();
995
+ }
996
+ schedule(tick);
997
+ };
998
+ schedule(tick);
999
+ }
1000
+ //#endregion
1001
+ export { monoPendingActive as _, __decorate as a, defineHybridPropAlias as c, optionalNumberConverter as d, customElement as f, monoHostChildren as g, monoHostChildNodes as h, withShadowUtilityStyles as i, defineHybridPropAliases as l, monoApplyPhantomOptions as m, adoptIconStyles as n, arrayHasChanged as o, defineMonoElement as p, toShadowCss as r, booleanStringConverter as s, flushSsrHydration as t, numberStringConverter as u, monoPendingGrace as v, monoPhantomOptions as y };