bitboss-ui 3.0.0-beta.63 → 3.0.0-beta.65

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 (396) hide show
  1. package/README.md +25 -20
  2. package/bin/bitboss-ui.mjs +73 -7
  3. package/dist/ai/BbAlert.md +10 -1
  4. package/dist/ai/BbBadge.md +35 -3
  5. package/dist/ai/BbBadgeButton.md +4 -2
  6. package/dist/ai/BbBaseButton.md +9 -3
  7. package/dist/ai/BbBreadcrumbs.md +2 -2
  8. package/dist/ai/BbButton.md +113 -8
  9. package/dist/ai/BbCheckbox.md +1 -1
  10. package/dist/ai/BbCheckboxGroup.md +94 -6
  11. package/dist/ai/BbColorInput.md +4 -1
  12. package/dist/ai/BbColorPalette.md +2 -1
  13. package/dist/ai/BbConfirm.md +7 -3
  14. package/dist/ai/BbDatePicker.md +2 -1
  15. package/dist/ai/BbDatePickerInput.md +4 -1
  16. package/dist/ai/BbDialog.md +12 -11
  17. package/dist/ai/BbDropdown.md +189 -38
  18. package/dist/ai/BbDropdownButton.md +27 -7
  19. package/dist/ai/BbForm.md +55 -22
  20. package/dist/ai/BbHost.md +2 -2
  21. package/dist/ai/BbHoverCard.md +7 -3
  22. package/dist/ai/BbIcon.md +12 -6
  23. package/dist/ai/BbIndicator.md +11 -1
  24. package/dist/ai/BbNumberInput.md +4 -1
  25. package/dist/ai/BbOffCanvas.md +37 -3
  26. package/dist/ai/BbPopover.md +2 -1
  27. package/dist/ai/BbRadio.md +1 -1
  28. package/dist/ai/BbRadioGroup.md +102 -10
  29. package/dist/ai/BbSelect.md +52 -17
  30. package/dist/ai/BbSelectPopover.md +93 -26
  31. package/dist/ai/BbSwitch.md +1 -1
  32. package/dist/ai/BbSwitchGroup.md +30 -3
  33. package/dist/ai/BbTable.md +17 -10
  34. package/dist/ai/BbTabs.md +8 -3
  35. package/dist/ai/BbTabsList.md +4 -1
  36. package/dist/ai/BbTag.md +5 -2
  37. package/dist/ai/BbTextInput.md +4 -1
  38. package/dist/ai/BbTextarea.md +4 -1
  39. package/dist/ai/BbTimePicker.md +2 -1
  40. package/dist/ai/BbTimePickerInput.md +4 -1
  41. package/dist/ai/BbToast.md +9 -3
  42. package/dist/ai/BbTooltip.md +71 -9
  43. package/dist/ai/ChipsBox.md +1 -1
  44. package/dist/ai/CommonField.md +1 -1
  45. package/dist/ai/OptionsContainer.md +42 -0
  46. package/dist/ai/changelog.json +494 -6
  47. package/dist/ai/components.json +50 -48
  48. package/dist/ai/composables/useBbConfig.md +8 -1
  49. package/dist/ai/composables/useConfirm.md +39 -1
  50. package/dist/ai/design-tokens.json +6 -6
  51. package/dist/ai/guides/agent-contract.md +2 -2
  52. package/dist/ai/guides/ai-router.md +24 -23
  53. package/dist/ai/guides/app-layout.md +5 -0
  54. package/dist/ai/guides/component-picker.md +9 -2
  55. package/dist/ai/guides/design-language.md +24 -24
  56. package/dist/ai/guides/design-tokens.md +15 -8
  57. package/dist/ai/guides/icons-policy.md +9 -2
  58. package/dist/ai/guides/inertia-helpers.md +1183 -301
  59. package/dist/ai/guides/installation-and-plugin-setup.md +12 -2
  60. package/dist/ai/guides/migration/adoption-checklist.md +235 -0
  61. package/dist/ai/guides/migration/components/bb-checkbox-group.md +16 -15
  62. package/dist/ai/guides/migration/components/bb-dialog.md +9 -9
  63. package/dist/ai/guides/migration/components/bb-dropdown.md +7 -2
  64. package/dist/ai/guides/migration/components/bb-popover.md +4 -2
  65. package/dist/ai/guides/migration/components/bb-select.md +19 -0
  66. package/dist/ai/guides/migration/components/bb-table.md +1 -0
  67. package/dist/ai/guides/migration/components/bb-toast.md +4 -0
  68. package/dist/ai/guides/migration/components/bb-tooltip.md +15 -12
  69. package/dist/ai/guides/migration/components/use-confirm.md +25 -2
  70. package/dist/ai/guides/migration/v2-to-v3.md +211 -9
  71. package/dist/ai/guides/migration/v3-beta-css-classes.md +7 -3
  72. package/dist/ai/guides/options-items-playbook.md +2 -1
  73. package/dist/ai/guides/passthrough.md +149 -85
  74. package/dist/ai/guides/preset-components.md +140 -15
  75. package/dist/ai/helpers/definePreset.json +7 -0
  76. package/dist/ai/helpers/definePreset.ts +123 -11
  77. package/dist/ai/helpers/inertia/manifest.json +151 -62
  78. package/dist/ai/helpers/inertia/messages.ts +33 -0
  79. package/dist/ai/helpers/inertia/useConfirmOnRouteLeave.ts +120 -20
  80. package/dist/ai/helpers/inertia/useHasChanged.ts +34 -16
  81. package/dist/ai/helpers/inertia/useLazyProp.ts +102 -36
  82. package/dist/ai/helpers/inertia/useLazyPropGetter.ts +3 -1
  83. package/dist/ai/helpers/inertia/usePaginatedResponseContext.ts +154 -34
  84. package/dist/ai/helpers/inertia/usePromiseForm.ts +121 -14
  85. package/dist/ai/helpers/inertia/useQuery.ts +133 -11
  86. package/dist/ai/helpers/inertia/useQueryObject.ts +74 -67
  87. package/dist/ai/helpers/inertia/useResourceContext.ts +60 -14
  88. package/dist/ai/helpers/inertia/useRouteQuery.ts +38 -27
  89. package/dist/ai/helpers/inertia/useScreenSizes.ts +9 -7
  90. package/dist/ai/helpers/inertia/useTableContext.ts +5 -2
  91. package/dist/ai/helpers/inertia/utils.ts +14 -0
  92. package/dist/ai/index.md +1 -0
  93. package/dist/ai/manifest/common.json +0 -1
  94. package/dist/ai/manifest/components/BbAlert.json +7 -2
  95. package/dist/ai/manifest/components/BbBadge.json +13 -4
  96. package/dist/ai/manifest/components/BbBadge.tree.json +2 -0
  97. package/dist/ai/manifest/components/BbBadgeButton.json +4 -2
  98. package/dist/ai/manifest/components/BbBaseButton.json +4 -2
  99. package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +1 -1
  100. package/dist/ai/manifest/components/BbButton.json +14 -3
  101. package/dist/ai/manifest/components/BbButton.tree.json +5 -1
  102. package/dist/ai/manifest/components/BbCheckboxGroup.json +13 -8
  103. package/dist/ai/manifest/components/BbCheckboxGroup.tree.json +11 -1
  104. package/dist/ai/manifest/components/BbColorInput.json +18 -15
  105. package/dist/ai/manifest/components/BbColorPalette.json +1 -1
  106. package/dist/ai/manifest/components/BbConfirm.json +4 -2
  107. package/dist/ai/manifest/components/BbConfirm.tree.json +1 -1
  108. package/dist/ai/manifest/components/BbDatePicker.json +1 -1
  109. package/dist/ai/manifest/components/BbDatePickerInput.json +17 -14
  110. package/dist/ai/manifest/components/BbDialog.tree.json +2 -1
  111. package/dist/ai/manifest/components/BbDropdown.json +24 -19
  112. package/dist/ai/manifest/components/BbDropdown.tree.json +9 -2
  113. package/dist/ai/manifest/components/BbDropdownButton.json +33 -20
  114. package/dist/ai/manifest/components/BbDropdownButton.tree.json +2 -2
  115. package/dist/ai/manifest/components/BbForm.json +2 -2
  116. package/dist/ai/manifest/components/BbHost.tree.json +1 -1
  117. package/dist/ai/manifest/components/BbHoverCard.json +1 -1
  118. package/dist/ai/manifest/components/BbIndicator.json +8 -2
  119. package/dist/ai/manifest/components/BbNumberInput.json +5 -2
  120. package/dist/ai/manifest/components/BbOffCanvas.json +2 -2
  121. package/dist/ai/manifest/components/BbOffCanvas.tree.json +1 -1
  122. package/dist/ai/manifest/components/BbPopover.json +1 -1
  123. package/dist/ai/manifest/components/BbRadioGroup.json +17 -12
  124. package/dist/ai/manifest/components/BbRadioGroup.tree.json +8 -1
  125. package/dist/ai/manifest/components/BbSelect.json +21 -18
  126. package/dist/ai/manifest/components/BbSelect.tree.json +2 -2
  127. package/dist/ai/manifest/components/BbSelectPopover.json +10 -10
  128. package/dist/ai/manifest/components/BbSelectPopover.tree.json +3 -2
  129. package/dist/ai/manifest/components/BbSwitchGroup.json +1 -1
  130. package/dist/ai/manifest/components/BbSwitchGroup.tree.json +3 -1
  131. package/dist/ai/manifest/components/BbTable.tree.json +14 -1
  132. package/dist/ai/manifest/components/BbTabs.json +9 -6
  133. package/dist/ai/manifest/components/BbTabs.tree.json +1 -1
  134. package/dist/ai/manifest/components/BbTabsList.json +6 -3
  135. package/dist/ai/manifest/components/BbTag.json +19 -16
  136. package/dist/ai/manifest/components/BbTag.tree.json +1 -1
  137. package/dist/ai/manifest/components/BbTextInput.json +6 -3
  138. package/dist/ai/manifest/components/BbTextarea.json +6 -3
  139. package/dist/ai/manifest/components/BbTimePicker.json +1 -1
  140. package/dist/ai/manifest/components/BbTimePickerInput.json +10 -7
  141. package/dist/ai/manifest/components/BbToast.json +7 -2
  142. package/dist/ai/manifest/components/BbToast.tree.json +4 -2
  143. package/dist/ai/manifest/components/BbTooltip.json +6 -5
  144. package/dist/ai/manifest/components/ChipsBox.tree.json +1 -1
  145. package/dist/ai/manifest/components/CommonField.json +1 -1
  146. package/dist/ai/manifest/components/OptionsContainer.json +3 -1
  147. package/dist/ai/manifest/components/OptionsContainer.tree.json +38 -0
  148. package/dist/ai/manifest/index.json +3 -3
  149. package/dist/ai/manifest/meta.json +5 -3
  150. package/dist/ai/manifest/types.advanced.json +5 -2
  151. package/dist/ai/manifest/types.api.json +9 -7
  152. package/dist/ai/recipes/inertia/approvals-inbox.md +1 -1
  153. package/dist/ai/recipes/inertia/inline-edit-workspace.md +1 -1
  154. package/dist/ai/recipes/inertia/layout-scaffold.md +19 -6
  155. package/dist/ai/recipes/inertia/ownership-atlas.md +1 -1
  156. package/dist/ai/recipes/inertia/records-workspace.md +50 -14
  157. package/dist/ai/recipes/inertia/upload-center.md +1 -1
  158. package/dist/ai/recipes/nuxt/layout-scaffold.md +19 -6
  159. package/dist/ai/recipes/nuxt/records-workspace.md +42 -12
  160. package/dist/ai/recipes/vue/layout-scaffold.md +19 -6
  161. package/dist/ai/recipes/vue/records-workspace.md +42 -12
  162. package/dist/ai/source/BbAlert.md +94 -76
  163. package/dist/ai/source/BbBadge.md +174 -72
  164. package/dist/ai/source/BbBadgeButton.md +130 -65
  165. package/dist/ai/source/BbBaseButton.md +46 -124
  166. package/dist/ai/source/BbBaseCheckboxIcon.md +38 -0
  167. package/dist/ai/source/BbBaseRadioIcon.md +18 -0
  168. package/dist/ai/source/BbBaseSwitchIcon.md +51 -0
  169. package/dist/ai/source/BbButton.md +153 -36
  170. package/dist/ai/source/BbCheckboxGroup.md +142 -18
  171. package/dist/ai/source/BbColorInput.md +240 -204
  172. package/dist/ai/source/BbColorPalette.md +7 -4
  173. package/dist/ai/source/BbConfirm.md +34 -11
  174. package/dist/ai/source/BbConfirmPortal.md +24 -9
  175. package/dist/ai/source/BbDatePicker.md +11 -7
  176. package/dist/ai/source/BbDatePickerInput.md +306 -269
  177. package/dist/ai/source/BbDialog.md +49 -14
  178. package/dist/ai/source/BbDropdown.md +314 -197
  179. package/dist/ai/source/BbDropdownButton.md +197 -31
  180. package/dist/ai/source/BbDropdownGroup.md +274 -176
  181. package/dist/ai/source/BbForm.md +50 -6
  182. package/dist/ai/source/BbHoverCard.md +12 -5
  183. package/dist/ai/source/BbIcon.md +4 -3
  184. package/dist/ai/source/BbIndicator.md +73 -52
  185. package/dist/ai/source/BbNumberInput.md +293 -257
  186. package/dist/ai/source/BbOffCanvas.md +55 -29
  187. package/dist/ai/source/BbPopover.md +14 -10
  188. package/dist/ai/source/BbRadioGroup.md +413 -297
  189. package/dist/ai/source/BbSelect.md +549 -435
  190. package/dist/ai/source/BbSelectPopover.md +153 -34
  191. package/dist/ai/source/BbSwitchGroup.md +70 -10
  192. package/dist/ai/source/BbTable.md +369 -37
  193. package/dist/ai/source/BbTabs.md +115 -39
  194. package/dist/ai/source/BbTabsList.md +106 -38
  195. package/dist/ai/source/BbTabsPanels.md +96 -36
  196. package/dist/ai/source/BbTabsRoot.md +96 -36
  197. package/dist/ai/source/BbTag.md +267 -233
  198. package/dist/ai/source/BbTextInput.md +261 -225
  199. package/dist/ai/source/BbTextarea.md +251 -215
  200. package/dist/ai/source/BbTimePicker.md +11 -7
  201. package/dist/ai/source/BbTimePickerInput.md +257 -220
  202. package/dist/ai/source/BbToast.md +73 -32
  203. package/dist/ai/source/BbToastPortal.md +65 -30
  204. package/dist/ai/source/BbTooltip.md +148 -113
  205. package/dist/ai/source/CommonPopover.md +6 -1
  206. package/dist/ai/source/FlatListBox.md +19 -9
  207. package/dist/ai/source/GroupedListBox.md +19 -9
  208. package/dist/ai/source/OptionsContainer.md +25 -9
  209. package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +61 -36
  210. package/dist/components/BbAlert/types.d.ts +9 -5
  211. package/dist/components/BbAlert/types.js +8 -3
  212. package/dist/components/BbBadge/BadgeBodyContent.vue.d.ts +3 -3
  213. package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +26 -17
  214. package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +103 -50
  215. package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +20 -15
  216. package/dist/components/BbBadge/badgeButtonContext.d.ts +12 -1
  217. package/dist/components/BbBadge/types.d.ts +45 -15
  218. package/dist/components/BbBadge/types.js +12 -3
  219. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +89 -126
  220. package/dist/components/BbBaseButton/types.d.ts +23 -4
  221. package/dist/components/BbBaseButton/types.js +7 -1
  222. package/dist/components/BbBaseButton/useLinkState.d.ts +41 -0
  223. package/dist/components/BbBaseButton/useLinkState.js +70 -0
  224. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +130 -74
  225. package/dist/components/BbButton/types.d.ts +50 -13
  226. package/dist/components/BbButton/types.js +10 -3
  227. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +148 -95
  228. package/dist/components/BbCheckboxGroup/types.d.ts +34 -11
  229. package/dist/components/BbCheckboxGroup/types.js +9 -4
  230. package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +1 -1
  231. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +134 -93
  232. package/dist/components/BbColorInput/types.d.ts +11 -4
  233. package/dist/components/BbColorInput/types.js +9 -3
  234. package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +82 -59
  235. package/dist/components/BbConfirm/types.d.ts +9 -4
  236. package/dist/components/BbConfirm/types.js +8 -3
  237. package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +1 -1
  238. package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +68 -67
  239. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +1 -1
  240. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +259 -215
  241. package/dist/components/BbDatePickerInput/types.d.ts +12 -5
  242. package/dist/components/BbDatePickerInput/types.js +9 -3
  243. package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +223 -219
  244. package/dist/components/BbDialog/useDialogStack.d.ts +1 -1
  245. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +104 -89
  246. package/dist/components/BbDropdown/BbDropdown.vue.d.ts +1 -0
  247. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +323 -285
  248. package/dist/components/BbDropdown/BbDropdownList.vue.d.ts +1 -0
  249. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +411 -319
  250. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +100 -98
  251. package/dist/components/BbDropdown/DropdownRow.vue.d.ts +4 -3
  252. package/dist/components/BbDropdown/DropdownRow.vue_vue_type_script_setup_true_lang.js +49 -28
  253. package/dist/components/BbDropdown/normalizeGroups.d.ts +6 -0
  254. package/dist/components/BbDropdown/normalizeGroups.js +21 -15
  255. package/dist/components/BbDropdown/types.d.ts +59 -12
  256. package/dist/components/BbDropdown/types.js +16 -3
  257. package/dist/components/BbDropdown/useDropdownContext.d.ts +6 -0
  258. package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +2 -1
  259. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +179 -68
  260. package/dist/components/BbDropdownButton/types.d.ts +44 -16
  261. package/dist/components/BbDropdownButton/types.js +28 -3
  262. package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +111 -89
  263. package/dist/components/BbForm/formSchema.d.ts +13 -0
  264. package/dist/components/BbHoverCard/BbHoverCard.vue_vue_type_script_setup_true_lang.js +100 -100
  265. package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +40 -25
  266. package/dist/components/BbIndicator/types.d.ts +9 -5
  267. package/dist/components/BbIndicator/types.js +8 -3
  268. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +243 -202
  269. package/dist/components/BbNumberInput/types.d.ts +12 -5
  270. package/dist/components/BbNumberInput/types.js +9 -3
  271. package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +1 -1
  272. package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +401 -399
  273. package/dist/components/BbOffCanvas/types.d.ts +6 -2
  274. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +81 -80
  275. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +158 -105
  276. package/dist/components/BbRadioGroup/types.d.ts +21 -7
  277. package/dist/components/BbRadioGroup/types.js +9 -4
  278. package/dist/components/BbSelect/BbSelect.vue.d.ts +4 -3
  279. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +181 -137
  280. package/dist/components/BbSelect/types.d.ts +36 -22
  281. package/dist/components/BbSelect/types.js +22 -3
  282. package/dist/components/BbSelectPopover/BbSelectPopover.vue.d.ts +4 -4
  283. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +600 -577
  284. package/dist/components/BbSelectPopover/knownItems.d.ts +5 -0
  285. package/dist/components/BbSelectPopover/types.d.ts +46 -12
  286. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +1 -1
  287. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +2 -2
  288. package/dist/components/BbSwitchGroup/types.d.ts +14 -4
  289. package/dist/components/BbSwitchGroup/types.js +8 -3
  290. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +1102 -995
  291. package/dist/components/BbTable/estimatedFloors.golden.d.ts +25 -0
  292. package/dist/components/BbTable/measuredFloors.d.ts +46 -0
  293. package/dist/components/BbTable/measuredFloors.js +322 -0
  294. package/dist/components/BbTable/measuredFloorsTestKit.d.ts +27 -0
  295. package/dist/components/BbTable/textRuler.d.ts +71 -0
  296. package/dist/components/BbTable/textRuler.js +121 -0
  297. package/dist/components/BbTable/utils.d.ts +113 -6
  298. package/dist/components/BbTable/utils.js +118 -65
  299. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +53 -35
  300. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +62 -45
  301. package/dist/components/BbTabs/types.d.ts +26 -11
  302. package/dist/components/BbTabs/types.js +23 -8
  303. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +205 -164
  304. package/dist/components/BbTag/types.d.ts +11 -4
  305. package/dist/components/BbTag/types.js +9 -3
  306. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +98 -57
  307. package/dist/components/BbTextInput/types.d.ts +12 -5
  308. package/dist/components/BbTextInput/types.js +9 -3
  309. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +137 -96
  310. package/dist/components/BbTextarea/types.d.ts +12 -5
  311. package/dist/components/BbTextarea/types.js +9 -3
  312. package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +105 -104
  313. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +241 -197
  314. package/dist/components/BbTimePickerInput/types.d.ts +12 -5
  315. package/dist/components/BbTimePickerInput/types.js +9 -3
  316. package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +74 -32
  317. package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +47 -47
  318. package/dist/components/BbToast/types.d.ts +10 -5
  319. package/dist/components/BbToast/types.js +18 -3
  320. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +85 -71
  321. package/dist/components/BbTooltip/types.d.ts +13 -8
  322. package/dist/components/BbTooltip/types.js +8 -3
  323. package/dist/components/CommonField/CommonField.vue.d.ts +1 -1
  324. package/dist/components/CommonPopover/CommonPopover.vue.d.ts +1 -1
  325. package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +69 -69
  326. package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +53 -50
  327. package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +146 -143
  328. package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +7 -2
  329. package/dist/components/OptionsContainer/types.d.ts +14 -3
  330. package/dist/composables/useBbConfig.d.ts +1 -0
  331. package/dist/composables/useBbConfig.js +11 -7
  332. package/dist/composables/useBbFormContext.d.ts +4 -3
  333. package/dist/composables/useBbTabsContext.js +99 -85
  334. package/dist/composables/useChoiceIndicator.d.ts +58 -0
  335. package/dist/composables/useChoiceIndicator.js +197 -0
  336. package/dist/composables/useConfirm.d.ts +4 -4
  337. package/dist/composables/usePassthrough.d.ts +54 -1
  338. package/dist/composables/usePassthrough.js +100 -71
  339. package/dist/directives/bbTooltip.d.ts +12 -6
  340. package/dist/directives/createPopoverDirective.js +1 -1
  341. package/dist/index.d.ts +3 -1
  342. package/dist/llms-full.txt +3467 -801
  343. package/dist/llms-medium.txt +71 -53
  344. package/dist/llms.txt +2 -1
  345. package/dist/passthrough-deduper.js +6 -3
  346. package/dist/project-dts.d.ts +24 -0
  347. package/dist/project-dts.js +43 -17
  348. package/dist/styles.css +2 -2
  349. package/dist/types/AlertVariant.d.ts +14 -0
  350. package/dist/types/AlertVariant.js +9 -0
  351. package/dist/types/BadgeVariant.d.ts +14 -0
  352. package/dist/types/BadgeVariant.js +9 -0
  353. package/dist/types/ButtonVariant.d.ts +16 -0
  354. package/dist/types/ButtonVariant.js +11 -0
  355. package/dist/types/CheckboxVariant.d.ts +38 -0
  356. package/dist/types/CheckboxVariant.js +4 -0
  357. package/dist/types/CommonProps.d.ts +4 -3
  358. package/dist/types/Config.d.ts +7 -0
  359. package/dist/types/ConfirmVariant.d.ts +12 -0
  360. package/dist/types/ConfirmVariant.js +4 -0
  361. package/dist/types/DropdownItemVariant.d.ts +12 -0
  362. package/dist/types/DropdownItemVariant.js +4 -0
  363. package/dist/types/IndicatorVariant.d.ts +15 -0
  364. package/dist/types/IndicatorVariant.js +10 -0
  365. package/dist/types/InputVariant.d.ts +13 -0
  366. package/dist/types/InputVariant.js +8 -0
  367. package/dist/types/RadioVariant.d.ts +38 -0
  368. package/dist/types/RadioVariant.js +4 -0
  369. package/dist/types/TabsVariant.d.ts +13 -0
  370. package/dist/types/TabsVariant.js +8 -0
  371. package/dist/types/ToastVariant.d.ts +15 -0
  372. package/dist/types/ToastVariant.js +10 -0
  373. package/dist/types/TooltipVariant.d.ts +12 -0
  374. package/dist/types/TooltipVariant.js +4 -0
  375. package/dist/types/passthrough.d.ts +83 -15
  376. package/dist/types/passthrough.js +2 -2
  377. package/dist/types/ptComponentMap.d.ts +35 -23
  378. package/dist/utilities/functions/extractDomContainer.d.ts +20 -1
  379. package/dist/utilities/functions/extractDomContainer.js +8 -3
  380. package/dist/utils/focusVisibility.d.ts +6 -0
  381. package/dist/utils/focusVisibility.js +4 -1
  382. package/dist/utils/passthroughDeduper.d.ts +14 -0
  383. package/dist/utils/versionCheck.js +1 -1
  384. package/dist/vite-plugin.d.ts +64 -7
  385. package/dist/vite.js +385 -259
  386. package/llms.txt +2 -1
  387. package/package.json +5 -4
  388. package/scripts/lib/adoption-checklist.json +312 -0
  389. package/scripts/lib/eslint-plugin.d.ts +13 -0
  390. package/scripts/lib/eslint-plugin.mjs +75 -11
  391. package/scripts/lib/helpers-add.mjs +26 -2
  392. package/scripts/lib/idiom-scan.mjs +65 -0
  393. package/scripts/lib/mcp-config.mjs +203 -9
  394. package/scripts/lib/migrate-fix.mjs +42 -1
  395. package/scripts/lib/project-variant-dts.mjs +18 -0
  396. package/scripts/lib/validate-bb-markup.mjs +99 -2
package/dist/vite.js CHANGED
@@ -1,21 +1,21 @@
1
1
  import { validatePtGlobalMap as e, validatePtScopes as t } from "./utils/passthrough.js";
2
2
  import { BB_LAYERS as n, TAILWIND_V3_LAYERS as r, TAILWIND_V4_LAYERS as i, validateCssLayers as a } from "./utils/cssLayers.js";
3
3
  import { BUILTIN_LOCALE_KEYS as o, DICTIONARY_HOME as s, LOCALE_TABLE as c, aliasesOf as l, localeKeyOf as u, nearestLocaleKey as d } from "./i18n/regions.js";
4
- import { DEFAULT_MAX_FILE_SIZE as f, IconScanner as p, extractIconCandidates as m, globToRegExp as h, hasGlobMagic as g, iconLiteralRegExp as _, iconScanCacheFile as ee } from "./icon-scan.js";
5
- import { regionHints as v } from "./i18n/regionHints.js";
6
- import { DEFAULT_VARIANT_REGISTRIES as te, emptyStringControls as ne, isInTypeScriptProgram as re, projectVariantRegistries as ie, resolveProjectDtsPath as ae, variantIconsOf as oe, writeProjectDts as se } from "./project-dts.js";
4
+ import { DEFAULT_MAX_FILE_SIZE as f, IconScanner as p, extractIconCandidates as ee, globToRegExp as te, hasGlobMagic as ne, iconLiteralRegExp as m, iconScanCacheFile as re } from "./icon-scan.js";
5
+ import { regionHints as h } from "./i18n/regionHints.js";
6
+ import { DEFAULT_VARIANT_REGISTRIES as g, VARIANT_PT_COMPONENTS as _, VARIANT_REGISTRY_OPTIONS as v, customVariants as ie, emptyStringControls as ae, isInTypeScriptProgram as oe, projectVariantRegistries as se, resolveProjectDtsPath as ce, variantIconsOf as le, writeProjectDts as ue } from "./project-dts.js";
7
7
  import { existsSync as y, mkdirSync as b, readFileSync as x, readdirSync as S, writeFileSync as C } from "node:fs";
8
- import { basename as ce, dirname as w, isAbsolute as T, join as E, relative as le, resolve as D } from "node:path";
9
- import { fileURLToPath as ue } from "node:url";
8
+ import { basename as de, dirname as w, isAbsolute as T, join as E, relative as fe, resolve as D } from "node:path";
9
+ import { fileURLToPath as pe } from "node:url";
10
10
  import { createRequire as O } from "node:module";
11
- import { convertParsedSVG as k, getIconData as A, iconToHTML as de, iconToSVG as fe, parseSVGContent as j, stringToIcon as pe } from "@iconify/utils";
11
+ import { convertParsedSVG as k, getIconData as A, iconToHTML as j, iconToSVG as me, parseSVGContent as he, stringToIcon as ge } from "@iconify/utils";
12
12
  //#region src/vite-plugin.ts
13
- function me(e) {
14
- let t = fe(e, {
13
+ function _e(e) {
14
+ let t = me(e, {
15
15
  width: "unset",
16
16
  height: "unset"
17
17
  });
18
- return de(t.body, t.attributes);
18
+ return j(t.body, t.attributes);
19
19
  }
20
20
  function M(e, t) {
21
21
  try {
@@ -25,10 +25,10 @@ function M(e, t) {
25
25
  return null;
26
26
  }
27
27
  }
28
- function he(e, t) {
28
+ function ve(e, t) {
29
29
  return e !== "heroicons" || !/-(?:20|16)-/.test(t);
30
30
  }
31
- function N(e) {
31
+ function ye(e) {
32
32
  let t = D(e);
33
33
  for (;;) {
34
34
  let e = E(t, "node_modules", "@iconify-json");
@@ -38,9 +38,9 @@ function N(e) {
38
38
  t = n;
39
39
  }
40
40
  }
41
- function ge(e) {
41
+ function be(e) {
42
42
  try {
43
- let t = N(e);
43
+ let t = ye(e);
44
44
  if (!t) return [];
45
45
  let n = w(w(t));
46
46
  return S(t, { encoding: "utf-8" }).flatMap((t) => {
@@ -51,7 +51,7 @@ function ge(e) {
51
51
  return [];
52
52
  }
53
53
  }
54
- function _e(e) {
54
+ function xe(e) {
55
55
  try {
56
56
  let t = O(E(e, "package.json")), n = JSON.parse(x(t.resolve("@iconify/collections/collections.json"), "utf-8"));
57
57
  return new Set(Object.keys(n));
@@ -59,16 +59,16 @@ function _e(e) {
59
59
  return /* @__PURE__ */ new Set();
60
60
  }
61
61
  }
62
- var ve = "(key, loaded, known, all, ip) => {\n const c = key.indexOf(':'); const p = key.slice(0, c); const n = key.slice(c + 1);\n if (p === 'local' || !/^[a-z][a-z0-9-]*$/.test(p) || !/^[a-z0-9][a-z0-9-]*$/.test(n)) return null;\n const installed = loaded.size ? `installed sets: ${[...loaded].join(', ')}` : 'no @iconify-json/* set is installed';\n const fix = `If the name is composed at runtime or comes from a database, add it to the plugin's \\`iconWhitelist\\``;\n if (loaded.has(p)) {\n const set = all(p);\n if (set && set.includes(n)) return `[bitboss-ui] icon \"${key}\" exists in the ${p} icon set but is not bundled: no scanned source file contains the literal \"${key}\" and it is not in \\`iconWhitelist\\`. Write it as a literal, or — if the name is composed at runtime or comes from a database — add it to the plugin's \\`iconWhitelist\\`.`;\n const names = set ?? known(p);\n const sq = n.replace(/-/g, '');\n const sug = names.find((x) => x.replace(/-/g, '') === sq) ?? (n.length >= 3 ? names.find((x) => x.includes(n) || (x.length >= 3 && n.includes(x))) : undefined);\n const hint = sug ? ` — did you mean \"${p}:${sug}\"?` : '';\n if (set) return `[bitboss-ui] icon \"${key}\" does not exist in the ${p} icon set${hint}`;\n return `[bitboss-ui] icon \"${key}\" is not bundled: it is not among the ${p} names found as literals in scanned source, nor in \\`iconWhitelist\\`${hint}. ${fix}; if it is a typo, fix the name.`;\n }\n const pkg = `@iconify-json/${p}`; const cmd = `run: npm install -D ${pkg}`;\n if (ip.has(p)) return `[bitboss-ui] \"${key}\" requires \"${pkg}\" — ${cmd} (${installed})`;\n if (ip.size) return `[bitboss-ui] \"${key}\" — \"${p}\" is neither an installed icon set nor a known Iconify prefix (${installed})`;\n return `[bitboss-ui] \"${key}\" — no installed icon set has the prefix \"${p}\" (${installed}). If \"${p}\" is an Iconify set, ${cmd}`;\n}", P = Function(`return ${ve};`)();
63
- function ye(e, t) {
62
+ var Se = "(key, loaded, known, all, ip) => {\n const c = key.indexOf(':'); const p = key.slice(0, c); const n = key.slice(c + 1);\n if (p === 'local' || !/^[a-z][a-z0-9-]*$/.test(p) || !/^[a-z0-9][a-z0-9-]*$/.test(n)) return null;\n const installed = loaded.size ? `installed sets: ${[...loaded].join(', ')}` : 'no @iconify-json/* set is installed';\n const fix = `If the name is composed at runtime or comes from a database, add it to the plugin's \\`iconWhitelist\\``;\n if (loaded.has(p)) {\n const set = all(p);\n if (set && set.includes(n)) return `[bitboss-ui] icon \"${key}\" exists in the ${p} icon set but is not bundled: no scanned source file contains the literal \"${key}\" and it is not in \\`iconWhitelist\\`. Write it as a literal, or — if the name is composed at runtime or comes from a database — add it to the plugin's \\`iconWhitelist\\`.`;\n const names = set ?? known(p);\n const sq = n.replace(/-/g, '');\n const sug = names.find((x) => x.replace(/-/g, '') === sq) ?? (n.length >= 3 ? names.find((x) => x.includes(n) || (x.length >= 3 && n.includes(x))) : undefined);\n const hint = sug ? ` — did you mean \"${p}:${sug}\"?` : '';\n if (set) return `[bitboss-ui] icon \"${key}\" does not exist in the ${p} icon set${hint}`;\n return `[bitboss-ui] icon \"${key}\" is not bundled: it is not among the ${p} names found as literals in scanned source, nor in \\`iconWhitelist\\`${hint}. ${fix}; if it is a typo, fix the name.`;\n }\n const pkg = `@iconify-json/${p}`; const cmd = `run: npm install -D ${pkg}`;\n if (ip.has(p)) return `[bitboss-ui] \"${key}\" requires \"${pkg}\" — ${cmd} (${installed})`;\n if (ip.size) return `[bitboss-ui] \"${key}\" — \"${p}\" is neither an installed icon set nor a known Iconify prefix (${installed})`;\n return `[bitboss-ui] \"${key}\" — no installed icon set has the prefix \"${p}\" (${installed}). If \"${p}\" is an Iconify set, ${cmd}`;\n}", N = Function(`return ${Se};`)();
63
+ function Ce(e, t) {
64
64
  return [...Object.keys(e.icons), ...Object.keys(e.aliases ?? {})].filter((n) => (!t || t(n)) && A(e, n) !== null);
65
65
  }
66
- function be(e, t, n, r) {
66
+ function we(e, t, n, r) {
67
67
  let i = /* @__PURE__ */ new Set(), a = [], o = new Set(t.keys()), s = /* @__PURE__ */ new Map(), c = (e) => {
68
68
  let r = s.get(e);
69
69
  if (!r) {
70
70
  let i = t.get(e);
71
- r = i ? ye(i, n.get(e)) : [], s.set(e, r);
71
+ r = i ? Ce(i, n.get(e)) : [], s.set(e, r);
72
72
  }
73
73
  return r;
74
74
  };
@@ -83,11 +83,11 @@ function be(e, t, n, r) {
83
83
  continue;
84
84
  }
85
85
  if (!o.has(u)) {
86
- a.push(P(e, o, c, (e) => o.has(e) ? c(e) : null, new Set(r)) ?? `[bitboss-ui] iconWhitelist entry "${s}" does not resolve`);
86
+ a.push(N(e, o, c, (e) => o.has(e) ? c(e) : null, new Set(r)) ?? `[bitboss-ui] iconWhitelist entry "${s}" does not resolve`);
87
87
  continue;
88
88
  }
89
- if (g(d)) {
90
- let t = h(d), n = c(u).filter((e) => t.test(e));
89
+ if (ne(d)) {
90
+ let t = te(d), n = c(u).filter((e) => t.test(e));
91
91
  if (n.length === 0) {
92
92
  a.push(`[bitboss-ui] iconWhitelist glob "${e}" matches no icon in the ${u} icon set`);
93
93
  continue;
@@ -100,14 +100,14 @@ function be(e, t, n, r) {
100
100
  i.add(e);
101
101
  continue;
102
102
  }
103
- a.push(P(e, o, c, c, new Set(r)) ?? `[bitboss-ui] iconWhitelist entry "${s}" does not resolve`);
103
+ a.push(N(e, o, c, c, new Set(r)) ?? `[bitboss-ui] iconWhitelist entry "${s}" does not resolve`);
104
104
  }
105
105
  return {
106
106
  icons: [...i],
107
107
  errors: a
108
108
  };
109
109
  }
110
- function xe(e, t) {
110
+ function Te(e, t) {
111
111
  let n = E(e, "node_modules", ".cache", "bitboss-ui", "version"), r = null;
112
112
  try {
113
113
  r = x(n, "utf-8").trim() || null;
@@ -118,20 +118,20 @@ function xe(e, t) {
118
118
  } catch {}
119
119
  return !r || t === "0" ? null : `[bitboss-ui] upgraded ${r} → ${t}. What breaks between them: npx bitboss-ui changelog --since ${r}`;
120
120
  }
121
- function Se(e) {
122
- let t = le(process.cwd(), e);
121
+ function Ee(e) {
122
+ let t = fe(process.cwd(), e);
123
123
  return t && !t.startsWith("..") && !T(t) ? t : e;
124
124
  }
125
- var F = /* @__PURE__ */ new Set();
126
- function Ce(e) {
125
+ var P = /* @__PURE__ */ new Set();
126
+ function De(e) {
127
127
  try {
128
128
  return JSON.parse(x(E(e, "..", "package.json"), "utf-8")).version ?? "0";
129
129
  } catch {
130
130
  return "0";
131
131
  }
132
132
  }
133
- var I = w(ue(import.meta.url));
134
- function we(e, t) {
133
+ var F = w(pe(import.meta.url));
134
+ function I(e, t) {
135
135
  let n = Array.from({ length: t.length + 1 }, (e, t) => t);
136
136
  for (let r = 1; r <= e.length; r++) {
137
137
  let i = n[0];
@@ -143,53 +143,68 @@ function we(e, t) {
143
143
  }
144
144
  return n[t.length];
145
145
  }
146
- var Te = (e, t) => {
146
+ var L = (e, t) => {
147
147
  let n = null, r = Infinity;
148
148
  for (let i of t) {
149
- let t = we(e.toLowerCase(), i.toLowerCase());
149
+ let t = I(e.toLowerCase(), i.toLowerCase());
150
150
  t < r && (r = t, n = i);
151
151
  }
152
152
  return n && r <= Math.max(2, Math.floor(e.length / 3)) ? n : null;
153
- }, L = () => {
154
- for (let e of [E(I, "ai", "components.json"), E(I, "..", "dist", "ai", "components.json")]) if (y(e)) return e;
153
+ }, R = () => {
154
+ for (let e of [E(F, "ai", "components.json"), E(F, "..", "dist", "ai", "components.json")]) if (y(e)) return e;
155
155
  return null;
156
- };
157
- function R(e, t = L(), n = "pt") {
158
- if (!e || !t) return null;
159
- let r;
156
+ }, z = (e) => {
160
157
  try {
161
- r = JSON.parse(x(t, "utf-8")).components;
158
+ let { components: t } = JSON.parse(x(e, "utf-8"));
159
+ return Array.isArray(t) ? new Map(t.map((e) => [e.name, e])) : null;
162
160
  } catch {
163
161
  return null;
164
162
  }
165
- if (!Array.isArray(r)) return null;
166
- let i = new Map(r.map((e) => [e.name, e]));
167
- for (let [t, r] of Object.entries(e)) {
163
+ }, Oe = (e) => Object.keys(_).filter((t) => _[t].includes(e));
164
+ function ke(e, t = R()) {
165
+ let n = t ? z(t) : null;
166
+ if (!n) return null;
167
+ for (let t of Object.keys(_)) {
168
+ let r = v[t], i = ie(g[t], e[r]);
169
+ if (i.length) for (let e of _[t]) {
170
+ let t = n.get(e);
171
+ if (!t) continue;
172
+ let a = new Set(Oe(e).flatMap((e) => [...g[e]])), o = new Set(t.props.map((e) => e.name.split(":")).filter((e) => e[0] === "pt" && e[2] && !a.has(e[2])).map((e) => e[2])), s = i.find((e) => o.has(e));
173
+ if (s) return `[bitboss-ui] ${r}: "${s}" is a passthrough state of ${e}, so \`pt:<part>:${s}\` could not tell the state from the variant. Give the variant another name.`;
174
+ }
175
+ }
176
+ return null;
177
+ }
178
+ function Ae(e, t = R(), n = "pt", r = {}) {
179
+ if (!e || !t) return null;
180
+ let i = z(t);
181
+ if (!i) return null;
182
+ for (let [t, a] of Object.entries(e)) {
168
183
  let e = i.get(t);
169
184
  if (!e) {
170
- let e = Te(t, [...i.keys()]);
185
+ let e = L(t, [...i.keys()]);
171
186
  return `[bitboss-ui] ${n}.${t}: no component is called "${t}"${e ? ` — did you mean "${e}"?` : ""}. A pt map is keyed by component name (ai/guides/passthrough.md).`;
172
187
  }
173
- let a = e.props.map((e) => e.name).filter((e) => e.startsWith("pt:"));
174
- if (!a.length) return `[bitboss-ui] ${n}.${t}: ${t} declares no passthrough parts.`;
175
- let o = [...new Set(a.map((e) => e.split(":")[1]))], s = [...new Set(a.map((e) => e.split(":")[2]).filter(Boolean))];
176
- for (let e of Object.keys(r ?? {})) {
177
- if (a.includes(`pt:${e}`)) continue;
178
- let [r, i] = e.split(":");
179
- return `[bitboss-ui] ${n}.${t}["${e}"] matches nothing and would be ignored. ${o.includes(r) ? s.length === 0 ? `${t} has no states — use "${r}" alone.` : `"${i}" is not a state of ${t}. States: ${s.join(", ")}.` : `"${r}" is not a part of ${t}. Parts: ${o.join(", ")}.`}`;
188
+ let o = e.props.map((e) => e.name).filter((e) => e.startsWith("pt:"));
189
+ if (!o.length) return `[bitboss-ui] ${n}.${t}: ${t} declares no passthrough parts.`;
190
+ let s = [...new Set(o.map((e) => e.split(":")[1]))], c = [...new Set(o.map((e) => e.split(":")[2]).filter(Boolean))];
191
+ for (let e of Object.keys(a ?? {})) {
192
+ if (o.includes(`pt:${e}`)) continue;
193
+ let [i, a] = e.split(":");
194
+ if (!(a && e.split(":").length === 2 && Oe(t).some((e) => ie(g[e], r[v[e]]).includes(a) && g[e].some((e) => o.includes(`pt:${i}:${e}`))))) return `[bitboss-ui] ${n}.${t}["${e}"] matches nothing and would be ignored. ${s.includes(i) ? c.length === 0 ? `${t} has no states — use "${i}" alone.` : `"${a}" is not a state of ${t}. States: ${c.join(", ")}.` : `"${i}" is not a part of ${t}. Parts: ${s.join(", ")}.`}`;
180
195
  }
181
196
  }
182
197
  return null;
183
198
  }
184
- var z = E(I, "i18n", "locales"), Ee = (e) => {
199
+ var je = E(F, "i18n", "locales"), Me = (e) => {
185
200
  let t = d(e);
186
201
  return t ? ` — did you mean '${t}'?` : "";
187
202
  };
188
- function De(e) {
203
+ function Ne(e) {
189
204
  let t = e.customLocaleKeys ?? [], n = u(e.locale) ?? "en", r = [], i = /* @__PURE__ */ new Set([n, "en"]);
190
205
  for (let n of e.enabledLocales ?? []) {
191
206
  let e = u(n);
192
- e ? i.add(e) : t.includes(n) || r.push(`[bitboss-ui] \`enabledLocales\` entry '${n}' is not a built-in locale${Ee(n)} — ignored.`);
207
+ e ? i.add(e) : t.includes(n) || r.push(`[bitboss-ui] \`enabledLocales\` entry '${n}' is not a built-in locale${Me(n)} — ignored.`);
193
208
  }
194
209
  return {
195
210
  enabled: [...i].sort(),
@@ -197,22 +212,22 @@ function De(e) {
197
212
  warnings: r
198
213
  };
199
214
  }
200
- function Oe(e) {
215
+ function Pe(e) {
201
216
  let t = /* @__PURE__ */ new Map();
202
217
  for (let n of e) {
203
218
  let e = c[n].dictionary;
204
- t.has(e) || t.set(e, JSON.parse(x(E(z, `${e}.json`), "utf-8")));
219
+ t.has(e) || t.set(e, JSON.parse(x(E(je, `${e}.json`), "utf-8")));
205
220
  }
206
221
  let n = [...t].map(([e, t]) => `\t${JSON.stringify(e)}: ${JSON.stringify(t)},`), r = [];
207
222
  for (let n of e) {
208
223
  let { tag: e, dictionary: i } = c[n];
209
224
  if (s[i] === e) continue;
210
- let a = v(t.get(i).datePickerInput, e);
225
+ let a = h(t.get(i).datePickerInput, e);
211
226
  a && r.push(`\t${JSON.stringify(n)}: ${JSON.stringify({ datePickerInput: a })},`);
212
227
  }
213
228
  return `export const locales = {\n${n.join("\n")}\n};\nexport const regionFormats = {\n${r.join("\n")}\n};\n`;
214
229
  }
215
- function ke(e) {
230
+ function Fe(e) {
216
231
  let t = O(import.meta.url), n = [], r = [];
217
232
  for (let i of e) {
218
233
  let e = u(i), a = e ? c[e].dayjs : i;
@@ -230,32 +245,117 @@ function ke(e) {
230
245
  missing: r
231
246
  };
232
247
  }
233
- function Ae(e) {
248
+ function Ie(e) {
234
249
  let t = [...new Set(e.map(({ pack: e }) => e))];
235
250
  return `${t.map((e, t) => `import l${t} from ${JSON.stringify(`dayjs/locale/${e}`)};`).join("\n")}\nexport const dayjsLocales = {\n${e.map(({ key: e, pack: n }) => `\t${JSON.stringify(e)}: l${t.indexOf(n)},`).join("\n")}\n};\n`;
236
251
  }
237
- function je(e, t, n = I) {
252
+ function Le(e, t, n = F, r) {
238
253
  if (e === !1) return "export default null;\n";
239
- let r;
254
+ let i;
240
255
  if (e === void 0) {
241
256
  let e = E(n, "passthrough-deduper.js");
242
- r = y(e) ? e : E(n, "utils/passthroughDeduper.ts");
243
- } else r = e.startsWith(".") || T(e) ? D(t, e) : e;
244
- return `export { default } from ${JSON.stringify(r)};\n`;
257
+ i = y(e) ? e : E(n, "utils/passthroughDeduper.ts");
258
+ let a = r ?? Ve(t);
259
+ if (Object.keys(a).length) return `import { createPassthroughDeduper } from ${JSON.stringify(i)};\nexport default createPassthroughDeduper(${JSON.stringify(a)});\n`;
260
+ } else i = e.startsWith(".") || T(e) ? D(t, e) : e;
261
+ return `export { default } from ${JSON.stringify(i)};\n`;
262
+ }
263
+ var B = [
264
+ "inset-shadow",
265
+ "drop-shadow",
266
+ "text-shadow",
267
+ "font-weight",
268
+ "perspective",
269
+ "breakpoint",
270
+ "container",
271
+ "tracking",
272
+ "leading",
273
+ "animate",
274
+ "aspect",
275
+ "radius",
276
+ "shadow",
277
+ "color",
278
+ "blur",
279
+ "ease",
280
+ "font",
281
+ "text"
282
+ ], V = /* @__PURE__ */ new Set([
283
+ "node_modules",
284
+ "dist",
285
+ "build",
286
+ ".nuxt",
287
+ ".output",
288
+ ".git",
289
+ ".vite",
290
+ "vendor",
291
+ "storage",
292
+ "public",
293
+ "coverage"
294
+ ]);
295
+ function Re(e) {
296
+ let t = {};
297
+ for (let n of e.matchAll(/@theme\b[^{]*\{([^}]*)\}/g)) for (let [, e] of n[1].matchAll(/--([a-z0-9-]+)\s*:/g)) {
298
+ if (e.includes("--")) continue;
299
+ let n = B.find((t) => e.startsWith(`${t}-`));
300
+ n && (t[n] ??= /* @__PURE__ */ new Set()).add(e.slice(n.length + 1));
301
+ }
302
+ return Object.fromEntries(Object.entries(t).map(([e, t]) => [e, [...t]]));
303
+ }
304
+ function H(e) {
305
+ let t = {};
306
+ for (let n of e) for (let [e, r] of Object.entries(n)) for (let n of r) (t[e] ??= /* @__PURE__ */ new Set()).add(n);
307
+ return Object.fromEntries(Object.keys(t).sort().map((e) => [e, [...t[e]].sort()]));
245
308
  }
246
- function Me(e) {
309
+ function ze(e, t) {
310
+ if (!t.endsWith(".css")) return !1;
311
+ let n = fe(e, t);
312
+ if (!n || n.startsWith("..") || T(n)) return !1;
313
+ let r = n.split(/[\\/]/);
314
+ return r.length <= 7 && !r.some((e) => V.has(e));
315
+ }
316
+ function Be(e) {
317
+ let t = /* @__PURE__ */ new Map(), n = (e, r) => {
318
+ let i = (() => {
319
+ try {
320
+ return S(e, { withFileTypes: !0 });
321
+ } catch {
322
+ return [];
323
+ }
324
+ })();
325
+ for (let a of i) {
326
+ let i = E(e, a.name);
327
+ if (a.isDirectory()) r < 6 && !V.has(a.name) && n(i, r + 1);
328
+ else if (a.name.endsWith(".css")) {
329
+ let e = U(i);
330
+ Object.keys(e).length && t.set(i, e);
331
+ }
332
+ }
333
+ };
334
+ return e && n(e, 0), t;
335
+ }
336
+ var U = (e) => {
337
+ try {
338
+ return Re(x(e, "utf-8"));
339
+ } catch {
340
+ return {};
341
+ }
342
+ };
343
+ function Ve(e) {
344
+ return H(Be(e).values());
345
+ }
346
+ function He(e) {
247
347
  return e === void 0 || e === !1 || typeof e == "string" && e.trim() ? null : "[bitboss-ui] passthroughDeduper must be false or a module path whose default export is (className: string) => string, e.g. passthroughDeduper: './src/utils/cn.ts'. Remove the key to use the bundled tailwind-merge.";
248
348
  }
249
- function Ne(e) {
349
+ function Ue(e) {
250
350
  return e === void 0 || typeof e == "number" && Number.isInteger(e) && e >= 0 ? null : `[bitboss-ui] autoDisableWritingThreshold must be a non-negative integer (received ${JSON.stringify(e)}); 0 turns the 'auto' rule off. Remove the key for the default, 6.`;
251
351
  }
252
- var B = "@inertiajs/vue3", Pe = [
352
+ var We = "@inertiajs/vue3", Ge = [
253
353
  "dependencies",
254
354
  "devDependencies",
255
355
  "peerDependencies",
256
356
  "optionalDependencies"
257
357
  ];
258
- function Fe(e) {
358
+ function Ke(e) {
259
359
  let t = D(e);
260
360
  for (;;) {
261
361
  let e = E(t, "package.json");
@@ -269,13 +369,13 @@ function Fe(e) {
269
369
  t = n;
270
370
  }
271
371
  }
272
- function Ie(e, t) {
273
- return Pe.some((n) => {
372
+ function qe(e, t) {
373
+ return Ge.some((n) => {
274
374
  let r = e[n];
275
375
  return typeof r == "object" && !!r && t in r;
276
376
  });
277
377
  }
278
- function Le(e, t) {
378
+ function Je(e, t) {
279
379
  let n = t.split("/"), r = D(e);
280
380
  for (;;) {
281
381
  if (y(E(r, "node_modules", ...n))) return !0;
@@ -284,14 +384,14 @@ function Le(e, t) {
284
384
  r = e;
285
385
  }
286
386
  }
287
- function V(e) {
288
- let t = Fe(e);
289
- return !t || !Ie(t, B) ? !1 : Le(e, B);
387
+ function Ye(e) {
388
+ let t = Ke(e);
389
+ return !t || !qe(t, We) ? !1 : Je(e, We);
290
390
  }
291
- function Re(e) {
391
+ function Xe(e) {
292
392
  return e ? "export { Link as InertiaLink } from '@inertiajs/vue3';\n" : "export const InertiaLink = null;\n";
293
393
  }
294
- var H = [
394
+ var Ze = [
295
395
  "@floating-ui/vue",
296
396
  "@tanstack/vue-virtual",
297
397
  "@vueuse/core",
@@ -307,34 +407,34 @@ var H = [
307
407
  "mime",
308
408
  "object-code",
309
409
  "tailwind-merge"
310
- ], ze = ["bitboss-ui"], Be = B, U = "bitboss-ui";
311
- function Ve(e) {
312
- return typeof e == "string" ? e === U : (e.lastIndex = 0, e.test(U));
410
+ ], Qe = ["bitboss-ui"], $e = We, W = "bitboss-ui";
411
+ function et(e) {
412
+ return typeof e == "string" ? e === W : (e.lastIndex = 0, e.test(W));
313
413
  }
314
- function He(e) {
315
- return e === !0 ? [] : e == null || e === !1 ? [U] : (Array.isArray(e) ? e : [e]).some(Ve) ? [] : [U];
414
+ function tt(e) {
415
+ return e === !0 ? [] : e == null || e === !1 ? [W] : (Array.isArray(e) ? e : [e]).some(et) ? [] : [W];
316
416
  }
317
- var Ue = "virtual:bitboss-ui/icons", We = "\0virtual:bitboss-ui/icons", Ge = "virtual:bitboss-ui/config", Ke = "\0virtual:bitboss-ui/config", qe = "virtual:bitboss-ui/dayjs-locales", Je = "\0virtual:bitboss-ui/dayjs-locales", Ye = "virtual:bitboss-ui/locales", Xe = "\0virtual:bitboss-ui/locales", Ze = "virtual:bitboss-ui/styles", Qe = "\0virtual:bitboss-ui/styles", $e = "virtual:bitboss-ui/vee-validate-missing", et = "\0virtual:bitboss-ui/vee-validate-missing", tt = "bitboss-ui:vee-validate-missing", W = "[bitboss-ui] BbForm needs vee-validate, which is not installed: run `npm i vee-validate` (an optional peer, >=4.10.0 <5). An app without forms needs nothing.", nt = ["useForm", "useField"];
318
- function rt() {
417
+ var nt = "virtual:bitboss-ui/icons", rt = "\0virtual:bitboss-ui/icons", it = "virtual:bitboss-ui/config", at = "\0virtual:bitboss-ui/config", ot = "virtual:bitboss-ui/dayjs-locales", st = "\0virtual:bitboss-ui/dayjs-locales", ct = "virtual:bitboss-ui/locales", lt = "\0virtual:bitboss-ui/locales", ut = "virtual:bitboss-ui/styles", dt = "\0virtual:bitboss-ui/styles", ft = "virtual:bitboss-ui/vee-validate-missing", pt = "\0virtual:bitboss-ui/vee-validate-missing", mt = "bitboss-ui:vee-validate-missing", G = "[bitboss-ui] BbForm needs vee-validate, which is not installed: run `npm i vee-validate` (an optional peer, >=4.10.0 <5). An app without forms needs nothing.", ht = ["useForm", "useField"];
418
+ function gt() {
319
419
  return [
320
- `const fail = () => { throw new Error(${JSON.stringify(W)} + ' (${tt})'); };`,
321
- ...nt.map((e) => `export const ${e} = fail;`),
420
+ `const fail = () => { throw new Error(${JSON.stringify(G)} + ' (${mt})'); };`,
421
+ ...ht.map((e) => `export const ${e} = fail;`),
322
422
  ""
323
423
  ].join("\n");
324
424
  }
325
- function it(e) {
425
+ function _t(e) {
326
426
  return /import\s*\{[^}]*\bBbForm\b[^}]*\}\s*from\s*['"]bitboss-ui(?:\/validated)?['"]/.test(e) || /<(?:BbForm|bb-form)[\s>/]/.test(e) || /resolveComponent\(\s*['"](?:BbForm|bb-form)['"]/.test(e);
327
427
  }
328
- var at = "virtual:bitboss-ui/link", ot = "\0virtual:bitboss-ui/link", st = "virtual:bitboss-ui/passthrough-deduper", ct = "\0virtual:bitboss-ui/passthrough-deduper";
329
- function lt() {
330
- let e = E(I, "styles.css");
428
+ var vt = "virtual:bitboss-ui/link", yt = "\0virtual:bitboss-ui/link", bt = "virtual:bitboss-ui/passthrough-deduper", xt = "\0virtual:bitboss-ui/passthrough-deduper";
429
+ function St() {
430
+ let e = E(F, "styles.css");
331
431
  return y(e) ? x(e, "utf-8") : ["main.css", "variables.css"].map((e) => {
332
- let t = E(I, "assets/css", e);
432
+ let t = E(F, "assets/css", e);
333
433
  return y(t) ? x(t, "utf-8") : "";
334
434
  }).join("\n");
335
435
  }
336
- var ut = "local", dt = "./assets/icons";
337
- function ft(e) {
436
+ var Ct = "local", wt = "./assets/icons";
437
+ function Tt(e) {
338
438
  let t = {};
339
439
  try {
340
440
  let n = S(e, {
@@ -342,15 +442,15 @@ function ft(e) {
342
442
  encoding: "utf-8"
343
443
  }).filter((e) => e.endsWith(".svg"));
344
444
  for (let r of n) {
345
- let n = ce(r, ".svg");
445
+ let n = de(r, ".svg");
346
446
  try {
347
- let i = j(x(E(e, r), "utf-8")), a = i && k(i);
447
+ let i = he(x(E(e, r), "utf-8")), a = i && k(i);
348
448
  a && (t[n] = a);
349
449
  } catch {}
350
450
  }
351
451
  } catch {}
352
452
  return {
353
- prefix: ut,
453
+ prefix: Ct,
354
454
  info: {
355
455
  name: "Local",
356
456
  author: { name: "Icons automatically inferred from the icons installed locally" },
@@ -359,38 +459,38 @@ function ft(e) {
359
459
  icons: t
360
460
  };
361
461
  }
362
- var G = "./.vscode/bitboss-ui.local-icons.json", K = "iconify.customCollectionJsonPaths", q = "tailwindCSS.classAttributes", J = "tailwindCSS.experimental.classRegex", Y = "editor.quickSuggestions", X = "pt(?::[\\w-]+)*", pt = [
462
+ var K = "./.vscode/bitboss-ui.local-icons.json", q = "iconify.customCollectionJsonPaths", J = "tailwindCSS.classAttributes", Y = "tailwindCSS.experimental.classRegex", X = "editor.quickSuggestions", Z = "pt(?::[\\w-]+)*", Et = [
363
463
  "class",
364
464
  "className",
365
465
  "ngClass",
366
466
  "class:list"
367
- ], mt = "(?:^|[\\s:(])(?:v-bind:)?pt(?::[\\w-]+)*\\s*=\\s*", ht = [
467
+ ], Dt = "(?:^|[\\s:(])(?:v-bind:)?pt(?::[\\w-]+)*\\s*=\\s*", Ot = [
368
468
  "\\?\\s*'([^\\s':][^']*)'",
369
469
  "'([^\\s':][^']*)'(?!\\s*:)",
370
470
  "\\?\\s*\"([^\\s\":][^\"]*)\"",
371
471
  "\"([^\\s\":][^\"]*)\"(?!\\s*:)",
372
472
  "\\?\\s*`([^\\s`:][^`]*)`",
373
473
  "`([^\\s`:][^`]*)`(?!\\s*:)"
374
- ], Z = [
375
- `${mt}"([\\s\\S]*?)"`,
376
- `${mt}'([\\s\\S]*?)'`,
474
+ ], Q = [
475
+ `${Dt}"([\\s\\S]*?)"`,
476
+ `${Dt}'([\\s\\S]*?)'`,
377
477
  "\\bpt\\s*:\\s*\\{([\\s\\S]*?)\\}"
378
- ].flatMap((e) => ht.map((t) => [e, t])), gt = { strings: "on" }, _t = () => ({
379
- [K]: [G],
380
- [q]: [...pt, X],
381
- [J]: Z,
382
- [Y]: gt
478
+ ].flatMap((e) => Ot.map((t) => [e, t])), kt = { strings: "on" }, At = () => ({
479
+ [q]: [K],
480
+ [J]: [...Et, Z],
481
+ [Y]: Q,
482
+ [X]: kt
383
483
  });
384
- function vt(e, t) {
385
- let n = E(t, G);
484
+ function jt(e, t) {
485
+ let n = E(t, K);
386
486
  try {
387
- return b(w(n), { recursive: !0 }), C(n, JSON.stringify(ft(e)), "utf-8"), null;
487
+ return b(w(n), { recursive: !0 }), C(n, JSON.stringify(Tt(e)), "utf-8"), null;
388
488
  } catch (e) {
389
- return `[bitboss-ui] could not write ${G} (${e instanceof Error ? e.message : String(e)}) — the Iconify editor extension will not preview local icons. ${Q}`;
489
+ return `[bitboss-ui] could not write ${K} (${e instanceof Error ? e.message : String(e)}) — the Iconify editor extension will not preview local icons. ${Rt}`;
390
490
  }
391
491
  }
392
- function yt(e, t) {
393
- if (e === dt) return null;
492
+ function Mt(e, t) {
493
+ if (e === wt) return null;
394
494
  let n = 0;
395
495
  try {
396
496
  n = S(t, {
@@ -402,7 +502,7 @@ function yt(e, t) {
402
502
  }
403
503
  return n > 0 ? null : `[bitboss-ui] iconDir "${e}" resolves to ${t}, which contains no .svg files — no \`local:\` icon will render. A relative iconDir resolves from the Vite root (under Nuxt, \`app/\`).`;
404
504
  }
405
- function bt(e) {
505
+ function Nt(e) {
406
506
  let t = "", n = !1, r = !1, i = !1;
407
507
  for (let a = 0; a < e.length; a++) {
408
508
  let o = e[a], s = e[a + 1];
@@ -434,8 +534,8 @@ function bt(e) {
434
534
  }
435
535
  return t;
436
536
  }
437
- var xt = (e) => e === " " || e === " " || e === "\n" || e === "\r";
438
- function St(e, t) {
537
+ var Pt = (e) => e === " " || e === " " || e === "\n" || e === "\r";
538
+ function Ft(e, t) {
439
539
  let n = !1, r = !1;
440
540
  for (let i = t; i < e.length; i++) {
441
541
  let t = e[i], a = e[i + 1];
@@ -455,11 +555,11 @@ function St(e, t) {
455
555
  r = !0, i++;
456
556
  continue;
457
557
  }
458
- if (!xt(t)) return i;
558
+ if (!Pt(t)) return i;
459
559
  }
460
560
  return -1;
461
561
  }
462
- function Ct(e, t) {
562
+ function It(e, t) {
463
563
  let n = !1, r = !1, i = !1, a = -1, o = 0, s = null;
464
564
  for (let c = 0; c < e.length; c++) {
465
565
  let l = e[c], u = e[c + 1];
@@ -491,19 +591,19 @@ function Ct(e, t) {
491
591
  i = !0, a = c;
492
592
  continue;
493
593
  }
494
- if (!xt(l)) {
594
+ if (!Pt(l)) {
495
595
  if (l === ":" && s !== null) {
496
596
  let n = s === t;
497
597
  if (s = null, !n) continue;
498
- let r = St(e, c + 1);
499
- return r === -1 || e[r] !== "[" ? null : wt(e, r);
598
+ let r = Ft(e, c + 1);
599
+ return r === -1 || e[r] !== "[" ? null : Lt(e, r);
500
600
  }
501
601
  s = null, l === "{" || l === "[" ? o++ : (l === "}" || l === "]") && o--;
502
602
  }
503
603
  }
504
604
  return null;
505
605
  }
506
- function wt(e, t) {
606
+ function Lt(e, t) {
507
607
  let n = !1, r = !1, i = !1, a = 0, o = -1;
508
608
  for (let s = t; s < e.length; s++) {
509
609
  let c = e[s], l = e[s + 1];
@@ -535,7 +635,7 @@ function wt(e, t) {
535
635
  i = !0, o = s + 1;
536
636
  continue;
537
637
  }
538
- if (!xt(c)) {
638
+ if (!Pt(c)) {
539
639
  if (c === "[" || c === "{") {
540
640
  a++, s > t && (o = s + 1);
541
641
  continue;
@@ -554,10 +654,10 @@ function wt(e, t) {
554
654
  }
555
655
  return null;
556
656
  }
557
- var Q = "Set `vscodeSettings: false` in the plugin options to disable this write.", $ = `add "${K}": ["${G}"], "${q}" (include ${JSON.stringify(X)}), and "${J}" for passthrough IntelliSense`, Tt = (e) => Array.isArray(e) && e.some((e) => typeof e == "string" && (e === "pt(?::[\\w-]+)*" || e === "pt" || e.startsWith("pt:") || e.startsWith("pt("))), Et = (e) => Array.isArray(e) ? Z.filter((t) => !e.some((e) => JSON.stringify(e) === JSON.stringify(t))) : [...Z], Dt = (e) => JSON.stringify(e, null, " ").replace(/\n/g, "\n ");
558
- function Ot(e, t, n) {
657
+ var Rt = "Set `vscodeSettings: false` in the plugin options to disable this write.", $ = `add "${q}": ["${K}"], "${J}" (include ${JSON.stringify(Z)}), and "${Y}" for passthrough IntelliSense`, zt = (e) => Array.isArray(e) && e.some((e) => typeof e == "string" && (e === "pt(?::[\\w-]+)*" || e === "pt" || e.startsWith("pt:") || e.startsWith("pt("))), Bt = (e) => Array.isArray(e) ? Q.filter((t) => !e.some((e) => JSON.stringify(e) === JSON.stringify(t))) : [...Q], Vt = (e) => JSON.stringify(e, null, " ").replace(/\n/g, "\n ");
658
+ function Ht(e, t, n) {
559
659
  if (n.length === 0) return e;
560
- let r = Ct(e, t);
660
+ let r = It(e, t);
561
661
  if (!r) return null;
562
662
  if (r.lastSignificantEnd === -1) return e.slice(0, r.close) + n.join(", ") + e.slice(r.close);
563
663
  if (e.slice(r.open + 1, r.close).includes("\n")) {
@@ -566,17 +666,17 @@ function Ot(e, t, n) {
566
666
  }
567
667
  return e.slice(0, r.lastSignificantEnd) + `, ${n.join(", ")}` + e.slice(r.lastSignificantEnd);
568
668
  }
569
- function kt(e, t, n) {
669
+ function Ut(e, t, n) {
570
670
  if (t.length === 0) return e;
571
- let r = St(e, 0);
671
+ let r = Ft(e, 0);
572
672
  if (r === -1 || e[r] !== "{") return null;
573
673
  let i = t.map((e, r) => {
574
674
  let i = r === t.length - 1, a = n || !i ? "," : "", o = n || !i ? "" : "\n";
575
- return `\n\t${JSON.stringify(e.key)}: ${Dt(e.value)}${a}${o}`;
675
+ return `\n\t${JSON.stringify(e.key)}: ${Vt(e.value)}${a}${o}`;
576
676
  }).join("");
577
677
  return e.slice(0, r + 1) + i + e.slice(r + 1);
578
678
  }
579
- function At(e, t) {
679
+ function Wt(e, t) {
580
680
  let n = E(e, ".vscode"), r = E(n, "settings.json"), i = "";
581
681
  try {
582
682
  i = x(r, "utf-8");
@@ -587,62 +687,62 @@ function At(e, t) {
587
687
  try {
588
688
  return b(n, { recursive: !0 }), C(r, e, "utf-8"), !0;
589
689
  } catch (e) {
590
- return t.warn(`[bitboss-ui] could not write .vscode/settings.json (${e instanceof Error ? e.message : String(e)}) — ${$}. ${Q}`), !1;
690
+ return t.warn(`[bitboss-ui] could not write .vscode/settings.json (${e instanceof Error ? e.message : String(e)}) — ${$}. ${Rt}`), !1;
591
691
  }
592
692
  };
593
693
  if (!i.trim()) {
594
- if (!s(JSON.stringify(_t(), null, " ") + "\n")) return;
595
- t.info(`[bitboss-ui] .vscode/settings.json: wrote "${G}" on "${K}", Tailwind "${q}" / "${J}" for passthrough, and "${Y}". ${Q}`);
694
+ if (!s(JSON.stringify(At(), null, " ") + "\n")) return;
695
+ t.info(`[bitboss-ui] .vscode/settings.json: wrote "${K}" on "${q}", Tailwind "${J}" / "${Y}" for passthrough, and "${X}". ${Rt}`);
596
696
  return;
597
697
  }
598
698
  let c;
599
699
  try {
600
- c = JSON.parse(bt(i));
700
+ c = JSON.parse(Nt(i));
601
701
  } catch {
602
702
  t.warn(`[bitboss-ui] Could not parse .vscode/settings.json — ${$}.`);
603
703
  return;
604
704
  }
605
705
  let l = (e) => {
606
706
  try {
607
- return c = JSON.parse(bt(e)), i = e, !0;
707
+ return c = JSON.parse(Nt(e)), i = e, !0;
608
708
  } catch {
609
709
  return t.warn(`[bitboss-ui] Could not parse .vscode/settings.json after splice — ${$}.`), !1;
610
710
  }
611
711
  }, u = (e, n, r) => {
612
712
  if (!Array.isArray(c[e])) return t.warn(`[bitboss-ui] .vscode/settings.json has a non-array "${e}" — ${$}.`), !1;
613
- let a = Ot(i, e, n);
713
+ let a = Ht(i, e, n);
614
714
  return a ? l(a) ? (o(r), !0) : !1 : (t.warn(`[bitboss-ui] Could not locate "${e}" in .vscode/settings.json — ${$}.`), !1);
615
715
  };
616
- if (!i.includes("./.vscode/bitboss-ui.local-icons.json") && K in c && u(K, [JSON.stringify(G)], `added "${G}" to "${K}"`), q in c && !Tt(c[q]) && u(q, [JSON.stringify(X)], `added ${JSON.stringify(X)} to "${q}"`), J in c) {
617
- let e = Et(c[J]);
618
- e.length > 0 && u(J, e.map((e) => JSON.stringify(e)), `added ${e.length} "${J}" ${e.length === 1 ? "entry" : "entries"} for passthrough`);
716
+ if (!i.includes("./.vscode/bitboss-ui.local-icons.json") && q in c && u(q, [JSON.stringify(K)], `added "${K}" to "${q}"`), J in c && !zt(c[J]) && u(J, [JSON.stringify(Z)], `added ${JSON.stringify(Z)} to "${J}"`), Y in c) {
717
+ let e = Bt(c[Y]);
718
+ e.length > 0 && u(Y, e.map((e) => JSON.stringify(e)), `added ${e.length} "${Y}" ${e.length === 1 ? "entry" : "entries"} for passthrough`);
619
719
  }
620
720
  let d = [];
621
- if (!(K in c) && !i.includes("./.vscode/bitboss-ui.local-icons.json") && d.push({
622
- key: K,
623
- value: [G]
624
- }), q in c || d.push({
721
+ if (!(q in c) && !i.includes("./.vscode/bitboss-ui.local-icons.json") && d.push({
625
722
  key: q,
626
- value: [...pt, X]
723
+ value: [K]
627
724
  }), J in c || d.push({
628
725
  key: J,
629
- value: Z
726
+ value: [...Et, Z]
630
727
  }), Y in c || d.push({
631
728
  key: Y,
632
- value: gt
729
+ value: Q
730
+ }), X in c || d.push({
731
+ key: X,
732
+ value: kt
633
733
  }), d.length > 0) {
634
- let e = Object.keys(c).length > 0, n = kt(i, d, e);
734
+ let e = Object.keys(c).length > 0, n = Ut(i, d, e);
635
735
  if (!n) t.warn(`[bitboss-ui] .vscode/settings.json is not a JSON object — ${$}.`);
636
736
  else if (l(n)) for (let e of d) o(`added "${e.key}"`);
637
737
  }
638
- a.length !== 0 && s(i) && t.info(`[bitboss-ui] .vscode/settings.json: ${a.join("; ")}. ${Q}`);
738
+ a.length !== 0 && s(i) && t.info(`[bitboss-ui] .vscode/settings.json: ${a.join("; ")}. ${Rt}`);
639
739
  }
640
- var jt = "virtual:bb-icon/", Mt = "\0virtual:bb-icon/";
641
- async function Nt(e, t) {
740
+ var Gt = "virtual:bb-icon/", Kt = "\0virtual:bb-icon/";
741
+ async function qt(e, t) {
642
742
  try {
643
743
  let { ensureMcpConfigs: n, missingMcpPeers: r } = await import(
644
744
  /* @vite-ignore */
645
- new URL("data:text/javascript;base64,LyoqCiAqIFNoYXJlZCB3cml0ZXJzIHRoYXQgcmVnaXN0ZXIgdGhlIGJpdGJvc3MtdWkgTUNQIHNlcnZlciBpbiBlYWNoIGFnZW50CiAqIGhhcm5lc3MncyBjb25maWcgZmlsZS4gVXNlZCBieSBgYml0Ym9zcy11aSBhaS1pbml0YCAoYmluOyBvbiBieSBkZWZhdWx0LAogKiBgLS1uby1tY3BgIHNraXBzIGl0KSBhbmQsIG9wdC1pbiwKICogYnkgdGhlIGRldiBzZXJ2ZXIgKHZpdGUvbnV4dCBwbHVnaW4gYG1jcDogdHJ1ZWApLgogKgogKiBFdmVyeSB3cml0ZXIgaXMgbWVyZ2Utc2FmZSAobmV2ZXIgZGlzdHVyYnMgb3RoZXIgc2VydmVycyksIGlkZW1wb3RlbnQKICogKHJldHVybnMgYHVuY2hhbmdlZGAgd2hlbiB0aGUgZW50cnkgYWxyZWFkeSBtYXRjaGVzKSwgYW5kIHJlcG9ydHMgd2hhdCBpdAogKiBkaWQgc28gY2FsbGVycyBjYW4gbG9nIGl0LiBIYXJuZXNzIGNvbmZpZyBzaGFwZXMgZGlmZmVyOgogKiAgIC0gQ2xhdWRlIENvZGUgLyBDdXJzb3IgICAgICAgICAgICDihpIgYHsgbWNwU2VydmVyczogeyBuYW1lOiB7IGNvbW1hbmQsIGFyZ3MgfSB9IH1gCiAqICAgLSBWUyBDb2RlIC8gQ29waWxvdCAgICAgICAgICAgICAgIOKGkiBgeyBzZXJ2ZXJzOiB7IG5hbWU6IHsgdHlwZTogJ3N0ZGlvJywg4oCmIH0gfSB9YAogKiAoVlMgQ29kZSBrZXlzIHRoZSBjb250YWluZXIgYHNlcnZlcnNgIGFuZCByZXF1aXJlcyBhbiBleHBsaWNpdCBgdHlwZWAuKQogKi8KCmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7CmltcG9ydCB7IHJlZnVzZUxpbmtlZFRhcmdldCB9IGZyb20gJy4vbGlua2VkLXRhcmdldC5tanMnOwppbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJzsKCmV4cG9ydCBjb25zdCBNQ1BfU0VSVkVSX05BTUUgPSAnYml0Ym9zcy11aSc7CmNvbnN0IENPTU1BTkQgPSAnbm9kZSc7CgovKioKICogUGF0aCB0byB0aGUgaW5zdGFsbGVkIENMSSwgcmVsYXRpdmUgdG8gdGhlIHByb2plY3Qgcm9vdC4KICoKICogUmVsYXRpdmUgb24gcHVycG9zZTogaGFybmVzc2VzIHNwYXduIGEgc3RkaW8gc2VydmVyIHdpdGggdGhlIHByb2plY3Qgcm9vdCBhcwogKiBpdHMgd29ya2luZyBkaXJlY3RvcnksIGFuZCBhIHJlbGF0aXZlIHBhdGggaXMgd2hhdCBsZXRzIGEgY29tbWl0dGVkCiAqIGAubWNwLmpzb25gIHdvcmsgb24gYSB0ZWFtbWF0ZSdzIG1hY2hpbmUuIEFuIGFic29sdXRlIHBhdGggd291bGQgcGluIHRoZQogKiBjb25maWcgdG8gd2hvZXZlciByYW4gYGFpLWluaXRgLgogKgogKiBGb3J3YXJkIHNsYXNoZXMgZXZlbiBvbiBXaW5kb3dzIOKAlCBOb2RlIGFjY2VwdHMgdGhlbSwgYW5kIEpTT04gY29uZmlncyBhcmUKICogc2hhcmVkIGFjcm9zcyBwbGF0Zm9ybXMuCiAqLwpleHBvcnQgY29uc3QgTUNQX0JJTl9QQVRIID0gJ25vZGVfbW9kdWxlcy9iaXRib3NzLXVpL2Jpbi9iaXRib3NzLXVpLm1qcyc7CgovKioKICogVGhlIE1DUCBzZXJ2ZXIncyBvd24gcnVudGltZSBuZWVkcywgZGVjbGFyZWQgYXMgT1BUSU9OQUwgcGVlcnMgcmF0aGVyIHRoYW4KICogZGVwZW5kZW5jaWVzOiB0b2dldGhlciB0aGV5IGFyZSB+MTIgTUIg4oCUIG1vcmUgdGhhbiBldmVyeSBydW50aW1lIGRlcGVuZGVuY3kKICogb2YgdGhlIGNvbXBvbmVudCBsaWJyYXJ5IGNvbWJpbmVkIOKAlCBhbmQgbm90aGluZyBidXQgYGJpdGJvc3MtdWkgbWNwYCBsb2FkcwogKiB0aGVtLgogKi8KZXhwb3J0IGNvbnN0IE1DUF9QRUVSUyA9IFsnQG1vZGVsY29udGV4dHByb3RvY29sL3NkaycsICd6b2QnXTsKCi8qKgogKiBEaXJlY3RvcnkgcHJvYmUsIHdhbGtpbmcgdXAgZnJvbSBgZGlyYC4gRGVsaWJlcmF0ZWx5IE5PVCBgcmVxdWlyZS5yZXNvbHZlYDoKICogYW4gRVNNLW9ubHkgcGFja2FnZSB3aG9zZSBgZXhwb3J0c2AgbWFwIGRlY2xhcmVzIG5vIGByZXF1aXJlYCBjb25kaXRpb24KICogdGhyb3dzIEVSUl9QQUNLQUdFX1BBVEhfTk9UX0VYUE9SVEVEIG9uIGEgcGVyZmVjdGx5IGdvb2QgaW5zdGFsbCDigJQgdGhlIHNhbWUKICogdHJhcCBkb2N1bWVudGVkIG9uIGBoYXNJbmVydGlhYCBpbiB0aGUgVml0ZSBwbHVnaW4uIEEgZGlyZWN0b3J5IGNoZWNrIGlzCiAqIGV4cG9ydHMtbWFwLWFnbm9zdGljLgogKi8KZnVuY3Rpb24gaXNJbnN0YWxsZWRGcm9tKGRpciwgbmFtZSkgewoJY29uc3Qgc2VnbWVudHMgPSBuYW1lLnNwbGl0KCcvJyk7CglsZXQgY3VycmVudCA9IHJlc29sdmUoZGlyKTsKCWZvciAoOzspIHsKCQlpZiAoZXhpc3RzU3luYyhqb2luKGN1cnJlbnQsICdub2RlX21vZHVsZXMnLCAuLi5zZWdtZW50cykpKSByZXR1cm4gdHJ1ZTsKCQljb25zdCBwYXJlbnQgPSBkaXJuYW1lKGN1cnJlbnQpOwoJCWlmIChwYXJlbnQgPT09IGN1cnJlbnQpIHJldHVybiBmYWxzZTsKCQljdXJyZW50ID0gcGFyZW50OwoJfQp9CgovKioKICogV2hpY2ggTUNQIHBlZXJzIHRoZSBwcm9qZWN0IGlzIG1pc3NpbmcsIHNvIGEgY2FsbGVyIHJlZ2lzdGVyaW5nIHRoZSBzZXJ2ZXIKICogY2FuIHNheSBzbyBOT1cgcmF0aGVyIHRoYW4gbGV0IHRoZSBoYXJuZXNzIGRpc2NvdmVyIGl0IG9uIGZpcnN0IGxhdW5jaCDigJQgdGhlCiAqIGNvbmZpZyBpcyB3cml0dGVuIGJ5IGBhaS1pbml0YCAvIHRoZSBkZXYgc2VydmVyLCBidXQgdGhlIGZhaWx1cmUgd291bGQKICogc3VyZmFjZSBtdWNoIGxhdGVyLCBpbnNpZGUgYW4gYWdlbnQsIGFzIGEgc2VydmVyIHRoYXQgd291bGQgbm90IHN0YXJ0LgogKgogKiBSZXR1cm5zIGBbXWAgd2hlbiBldmVyeXRoaW5nIG5lZWRlZCBpcyBwcmVzZW50LgogKi8KZXhwb3J0IGZ1bmN0aW9uIG1pc3NpbmdNY3BQZWVycyhyb290KSB7CglyZXR1cm4gTUNQX1BFRVJTLmZpbHRlcigobmFtZSkgPT4gIWlzSW5zdGFsbGVkRnJvbShyb290LCBuYW1lKSk7Cn0KCi8qKgogKiBJbnZva2UgdGhlIElOU1RBTExFRCBiaW5hcnkgZGlyZWN0bHksIG5ldmVyIGBucHhgICgyMDI2LTA5LTA5LCBzdXBlcnNlZGluZwogKiB0aGUgMjAyNi0wOC0wNiBwaW5uZWQtbnB4IHJ1bGluZyDigJQgc2VlIGJlbG93KS4KICoKICogVGhlIDIwMjYtMDgtMDYgcmV2aWV3IHBpbm5lZCB0aGUgc3BlYyB0byB0aGlzIHBhY2thZ2UncyBvd24gdmVyc2lvbiBiZWNhdXNlCiAqIE1DUCBob3N0cyBzcGF3biB0aGUgZW50cnkgd2l0aCBub24tVFRZIHN0ZGlvLCB3aGVyZSBgbnB4YCBpbnN0YWxscyB3aXRob3V0CiAqIHByb21wdGluZzogYW4gdW5waW5uZWQgYG5weCBiaXRib3NzLXVpIG1jcGAgd291bGQgc2lsZW50bHkgZG93bmxvYWQgYW5kCiAqIGV4ZWN1dGUgd2hhdGV2ZXIgYGJpdGJvc3MtdWlAbGF0ZXN0YCByZXNvbHZlZCB0bywgYW5kIGFuc3dlciBmcm9tIGEKICogZGlmZmVyZW50IHZlcnNpb24ncyBrbm93bGVkZ2UgYmFzZSB0aGFuIHRoZSBwcm9qZWN0IHVzZXMuCiAqCiAqIFRoZSBwaW4gZml4ZWQgdGhhdCBhbmQgYnJva2UgdGhlIHNlcnZlciBvdXRyaWdodC4gYG5weCBiaXRib3NzLXVpQHgueS56IG1jcGAKICogcnVucyB0aGUgcGFja2FnZSBPVVQgT0YgVEhFIE5QWCBDQUNIRSwgYW5kIHRoZSBNQ1AgZW50cnkgcmVzb2x2ZXMgaXRzCiAqIG9wdGlvbmFsIHBlZXJzIChgQG1vZGVsY29udGV4dHByb3RvY29sL3Nka2AsIGB6b2RgKSByZWxhdGl2ZSB0byB0aGUgcGFja2FnZQogKiBpdCBpcyBydW5uaW5nIGZyb20uIFRoZSBjYWNoZSBkaXJlY3RvcnkgbmV2ZXIgaGFzIHRoZW0sIHNvIHRoZSBzZXJ2ZXIgY2Fubm90CiAqIHN0YXJ0IG5vIG1hdHRlciB3aGF0IHRoZSBwcm9qZWN0IGhhcyBpbnN0YWxsZWQg4oCUIHJlcG9ydGVkIGZyb20gYSBjb25zdW1lcgogKiBwcm9qZWN0IHdpdGggYm90aCBwZWVycyBwcmVzZW50LgogKgogKiBBIHBhdGggdG8gdGhlIGxvY2FsIGJpbmFyeSBzYXRpc2ZpZXMgdGhlIG9yaWdpbmFsIHJ1bGluZyBNT1JFIGNvbXBsZXRlbHkKICogdGhhbiB0aGUgcGluIGRpZDogaXQgY2Fubm90IHJlYWNoIHRoZSByZWdpc3RyeSBhdCBhbGwsIHNvIHRoZXJlIGlzIG5vdGhpbmcKICogdG8gZG93bmxvYWQgYW5kIG5vIGBsYXRlc3RgIHRvIGRyaWZ0IHRvLiBJdCBhbHNvIHJldGlyZXMgdGhlIHBpbidzIG93bgogKiBtYWludGVuYW5jZSBwcm9ibGVtLCB3aGVyZSBhIGNvbmZpZyB3cml0dGVuIGF0IG9uZSB2ZXJzaW9uIGtlcHQgbmFtaW5nIHRoYXQKICogdmVyc2lvbiBhZnRlciBhbiB1cGdyYWRlLCBsZXR0aW5nIGFuIGFnZW50IHF1ZXJ5IGEgbWFuaWZlc3QgdGhhdCBkaXNhZ3JlZWQKICogd2l0aCB0aGUgY29kZSBpdCB3YXMgd3JpdGluZyBhZ2FpbnN0LiBUaGUgYmluYXJ5IG9uIGRpc2sgSVMgdGhlIGluc3RhbGxlZAogKiB2ZXJzaW9uLCBieSBjb25zdHJ1Y3Rpb24uCiAqLwpjb25zdCBBUkdTID0gW01DUF9CSU5fUEFUSCwgJ21jcCddOwoKY29uc3Qgc3RkaW9FbnRyeSA9ICgpID0+ICh7IGNvbW1hbmQ6IENPTU1BTkQsIGFyZ3M6IFsuLi5BUkdTXSB9KTsKY29uc3QgdnNjb2RlRW50cnkgPSAoKSA9PiAoewoJdHlwZTogJ3N0ZGlvJywKCWNvbW1hbmQ6IENPTU1BTkQsCglhcmdzOiBbLi4uQVJHU10sCn0pOwoKZnVuY3Rpb24gd3JpdGVKc29uKHBhdGgsIGRhdGEpIHsKCW1rZGlyU3luYyhkaXJuYW1lKHBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTsKCXdyaXRlRmlsZVN5bmMocGF0aCwgYCR7SlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgJ1x0Jyl9XG5gLCAndXRmLTgnKTsKfQoKLyoqCiAqIE1lcmdlIHRoZSBzZXJ2ZXIgZW50cnkgaW50byBgcGF0aGAncyBgPGNvbnRhaW5lcktleT5gIG1hcC4gUmV0dXJucwogKiBgeyBwYXRoLCBsYWJlbCwgYWN0aW9uIH1gIHdpdGggYWN0aW9uIOKIiCBjcmVhdGVkfHVwZGF0ZWR8dW5jaGFuZ2VkfHNraXBwZWQuCiAqLwpmdW5jdGlvbiBlbnN1cmVFbnRyeShwYXRoLCBjb250YWluZXJLZXksIGVudHJ5LCBsYWJlbCkgewoJdHJ5IHsKCQlyZWZ1c2VMaW5rZWRUYXJnZXQocGF0aCk7Cgl9IGNhdGNoIChlcnJvcikgewoJCXJldHVybiB7IHBhdGgsIGxhYmVsLCBhY3Rpb246ICdza2lwcGVkJywgcmVhc29uOiBlcnJvci5tZXNzYWdlIH07Cgl9CglsZXQgY29uZmlnID0ge307Cgljb25zdCBleGlzdGVkID0gZXhpc3RzU3luYyhwYXRoKTsKCWlmIChleGlzdGVkKSB7CgkJdHJ5IHsKCQkJY29uZmlnID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04JykpOwoJCX0gY2F0Y2ggKGVycm9yKSB7CgkJCWNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7CgkJCXJldHVybiB7CgkJCQlwYXRoLAoJCQkJbGFiZWwsCgkJCQlhY3Rpb246ICdza2lwcGVkJywKCQkJCXJlYXNvbjogYGludmFsaWQgSlNPTiAoJHttZXNzYWdlfSlgLAoJCQl9OwoJCX0KCX0KCWlmICghY29uZmlnW2NvbnRhaW5lcktleV0gfHwgdHlwZW9mIGNvbmZpZ1tjb250YWluZXJLZXldICE9PSAnb2JqZWN0JykgewoJCWNvbmZpZ1tjb250YWluZXJLZXldID0ge307Cgl9CgoJY29uc3QgcHJldmlvdXMgPSBjb25maWdbY29udGFpbmVyS2V5XVtNQ1BfU0VSVkVSX05BTUVdOwoJaWYgKHByZXZpb3VzICYmIEpTT04uc3RyaW5naWZ5KHByZXZpb3VzKSA9PT0gSlNPTi5zdHJpbmdpZnkoZW50cnkpKSB7CgkJcmV0dXJuIHsgcGF0aCwgbGFiZWwsIGFjdGlvbjogJ3VuY2hhbmdlZCcgfTsKCX0KCgljb25maWdbY29udGFpbmVyS2V5XVtNQ1BfU0VSVkVSX05BTUVdID0gZW50cnk7Cgl0cnkgewoJCXdyaXRlSnNvbihwYXRoLCBjb25maWcpOwoJfSBjYXRjaCAoZXJyb3IpIHsKCQljb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpOwoJCXJldHVybiB7IHBhdGgsIGxhYmVsLCBhY3Rpb246ICdza2lwcGVkJywgcmVhc29uOiBtZXNzYWdlIH07Cgl9CglyZXR1cm4geyBwYXRoLCBsYWJlbCwgYWN0aW9uOiBleGlzdGVkID8gJ3VwZGF0ZWQnIDogJ2NyZWF0ZWQnIH07Cn0KCi8qKiBDbGF1ZGUgQ29kZSDigJQgcHJvamVjdC1yb290IGAubWNwLmpzb25gLiAqLwpleHBvcnQgY29uc3Qgd3JpdGVDbGF1ZGVDb2RlQ29uZmlnID0gKHJvb3QpID0+CgllbnN1cmVFbnRyeSgKCQlqb2luKHJvb3QsICcubWNwLmpzb24nKSwKCQknbWNwU2VydmVycycsCgkJc3RkaW9FbnRyeSgpLAoJCSdDbGF1ZGUgQ29kZScKCSk7CgovKiogQ3Vyc29yIOKAlCBwcm9qZWN0IGAuY3Vyc29yL21jcC5qc29uYC4gKi8KZXhwb3J0IGNvbnN0IHdyaXRlQ3Vyc29yQ29uZmlnID0gKHJvb3QpID0+CgllbnN1cmVFbnRyeSgKCQlqb2luKHJvb3QsICcuY3Vyc29yJywgJ21jcC5qc29uJyksCgkJJ21jcFNlcnZlcnMnLAoJCXN0ZGlvRW50cnkoKSwKCQknQ3Vyc29yJwoJKTsKCi8qKiBWUyBDb2RlIC8gR2l0SHViIENvcGlsb3Qg4oCUIHByb2plY3QgYC52c2NvZGUvbWNwLmpzb25gIChgc2VydmVyc2AgKyBgdHlwZWApLiAqLwpleHBvcnQgY29uc3Qgd3JpdGVWc2NvZGVDb25maWcgPSAocm9vdCkgPT4KCWVuc3VyZUVudHJ5KAoJCWpvaW4ocm9vdCwgJy52c2NvZGUnLCAnbWNwLmpzb24nKSwKCQknc2VydmVycycsCgkJdnNjb2RlRW50cnkoKSwKCQknVlMgQ29kZSAvIENvcGlsb3QnCgkpOwoKLyoqCiAqIFJlZ2lzdGVyIHRoZSBzZXJ2ZXIgaW4gZXZlcnkgcHJvamVjdC1zY29wZWQgaGFybmVzcy4gV2luZHN1cmYgaXMgbm90IGFtb25nCiAqIHRoZW06IGl0IHJlYWRzIG9ubHkgYSBHTE9CQUwgKGhvbWUtZGlyKSBjb25maWcsIGFuZCBkZXRlY3Rpbmcgd2hldGhlciBpdCBpcwogKiBpbnN0YWxsZWQgcHJvdmVkIHVucmVsaWFibGUgKGEgbGVmdG92ZXIgYH4vLmNvZGVpdW1gIGZyb20gYW4gdW5pbnN0YWxsZWQKICogV2luZHN1cmYpLCBzbyBhIGRlZmF1bHQgcnVuIG11c3Qgbm90IHdyaXRlIG91dHNpZGUgdGhlIHByb2plY3QuIEl0cwogKiBgLndpbmRzdXJmL3J1bGVzYCBwb2ludGVyIGZpbGUgaXMgc3RpbGwgd3JpdHRlbiBieSBgYWktaW5pdGAuCiAqLwpleHBvcnQgZnVuY3Rpb24gZW5zdXJlTWNwQ29uZmlncyhyb290KSB7CglyZXR1cm4gWwoJCXdyaXRlQ2xhdWRlQ29kZUNvbmZpZyhyb290KSwKCQl3cml0ZUN1cnNvckNvbmZpZyhyb290KSwKCQl3cml0ZVZzY29kZUNvbmZpZyhyb290KSwKCV07Cn0KCi8qKgogKiBUaGUgcGFja2FnZSBtYW5hZ2VyIGEgcHJvamVjdCB1c2VzLCBmcm9tIHRoZSBuZWFyZXN0IGxvY2tmaWxlIHdhbGtpbmcgdXAKICogKGEgd29ya3NwYWNlIHBhY2thZ2Ugc2l0cyBiZWxvdyB0aGUgbG9ja2ZpbGUpLiBgbnBtYCB3aGVuIG5vbmUgaXMgZm91bmQuCiAqLwpleHBvcnQgZnVuY3Rpb24gZGV0ZWN0UGFja2FnZU1hbmFnZXIocm9vdCkgewoJbGV0IGN1cnJlbnQgPSByZXNvbHZlKHJvb3QpOwoJZm9yICg7OykgewoJCWlmIChleGlzdHNTeW5jKGpvaW4oY3VycmVudCwgJ3BucG0tbG9jay55YW1sJykpKSByZXR1cm4gJ3BucG0nOwoJCWlmIChleGlzdHNTeW5jKGpvaW4oY3VycmVudCwgJ3lhcm4ubG9jaycpKSkgcmV0dXJuICd5YXJuJzsKCQlpZiAoCgkJCWV4aXN0c1N5bmMoam9pbihjdXJyZW50LCAnYnVuLmxvY2snKSkgfHwKCQkJZXhpc3RzU3luYyhqb2luKGN1cnJlbnQsICdidW4ubG9ja2InKSkKCQkpCgkJCXJldHVybiAnYnVuJzsKCQlpZiAoZXhpc3RzU3luYyhqb2luKGN1cnJlbnQsICdwYWNrYWdlLWxvY2suanNvbicpKSkgcmV0dXJuICducG0nOwoJCWNvbnN0IHBhcmVudCA9IGRpcm5hbWUoY3VycmVudCk7CgkJaWYgKHBhcmVudCA9PT0gY3VycmVudCkgcmV0dXJuICducG0nOwoJCWN1cnJlbnQgPSBwYXJlbnQ7Cgl9Cn0KCi8qKgogKiBUaGUgYXJndiB0aGF0IGFkZHMgYHBhY2thZ2VzYCBhcyBkZXYgZGVwZW5kZW5jaWVzIHdpdGggYG1hbmFnZXJgLiBCYXJlCiAqIG5hbWVzLCBubyB2ZXJzaW9uIHJhbmdlczogdGhlIHBlZXIgcmFuZ2VzIChgPj0xLjI5LjBgLCBgXjMuMjUgfHwgXjQuMGApIGFyZQogKiBvcGVuLWVuZGVkLCBzbyB0aGUgbGF0ZXN0IHJlbGVhc2UgYWx3YXlzIHNhdGlzZmllcyB0aGVtIOKAlCBhbmQgYSByYW5nZSB3aXRoCiAqIGB8fGAgb3Igc3BhY2VzIHdvdWxkIG5lZWQgc2hlbGwgcXVvdGluZyBvbiBXaW5kb3dzLCB3aGVyZSB0aGUgY29tbWFuZCBydW5zCiAqIHRocm91Z2ggYSBzaGVsbC4KICovCmV4cG9ydCBmdW5jdGlvbiBkZXZJbnN0YWxsQ29tbWFuZChtYW5hZ2VyLCBwYWNrYWdlcykgewoJY29uc3QgdmVyYiA9IHsKCQlucG06IFsnaW5zdGFsbCcsICctLXNhdmUtZGV2J10sCgkJcG5wbTogWydhZGQnLCAnLUQnXSwKCQl5YXJuOiBbJ2FkZCcsICctRCddLAoJCWJ1bjogWydhZGQnLCAnLWQnXSwKCX1bbWFuYWdlcl0gPz8gWydpbnN0YWxsJywgJy0tc2F2ZS1kZXYnXTsKCXJldHVybiBbbWFuYWdlciwgLi4udmVyYiwgLi4ucGFja2FnZXNdOwp9Cg==", "" + import.meta.url).href
745
+ new URL("data:text/javascript;base64,LyoqCiAqIFNoYXJlZCB3cml0ZXJzIHRoYXQgcmVnaXN0ZXIgdGhlIGJpdGJvc3MtdWkgTUNQIHNlcnZlciBpbiBlYWNoIGFnZW50CiAqIGhhcm5lc3MncyBjb25maWcgZmlsZS4gVXNlZCBieSBgYml0Ym9zcy11aSBhaS1pbml0YCAoYmluOyBvbiBieSBkZWZhdWx0LAogKiBgLS1uby1tY3BgIHNraXBzIGl0KSBhbmQsIG9wdC1pbiwKICogYnkgdGhlIGRldiBzZXJ2ZXIgKHZpdGUvbnV4dCBwbHVnaW4gYG1jcDogdHJ1ZWApLgogKgogKiBFdmVyeSB3cml0ZXIgaXMgbWVyZ2Utc2FmZSAobmV2ZXIgZGlzdHVyYnMgb3RoZXIgc2VydmVycyksIGlkZW1wb3RlbnQKICogKHJldHVybnMgYHVuY2hhbmdlZGAgd2hlbiB0aGUgZW50cnkgYWxyZWFkeSBtYXRjaGVzKSwgYW5kIHJlcG9ydHMgd2hhdCBpdAogKiBkaWQgc28gY2FsbGVycyBjYW4gbG9nIGl0LiBIYXJuZXNzIGNvbmZpZyBzaGFwZXMgZGlmZmVyOgogKiAgIC0gQ2xhdWRlIENvZGUgLyBDdXJzb3IgICAgICAgICAgICDihpIgYHsgbWNwU2VydmVyczogeyBuYW1lOiB7IGNvbW1hbmQsIGFyZ3MgfSB9IH1gCiAqICAgLSBWUyBDb2RlIC8gQ29waWxvdCAgICAgICAgICAgICAgIOKGkiBgeyBzZXJ2ZXJzOiB7IG5hbWU6IHsgdHlwZTogJ3N0ZGlvJywg4oCmIH0gfSB9YAogKiAgIC0gWmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICDihpIgYHsgY29udGV4dF9zZXJ2ZXJzOiB7IG5hbWU6IHsgY29tbWFuZCwgYXJncyB9IH0gfWAKICogKFZTIENvZGUga2V5cyB0aGUgY29udGFpbmVyIGBzZXJ2ZXJzYCBhbmQgcmVxdWlyZXMgYW4gZXhwbGljaXQgYHR5cGVgLikKICovCgppbXBvcnQgeyBleGlzdHNTeW5jLCBta2RpclN5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnOwppbXBvcnQgeyByZWZ1c2VMaW5rZWRUYXJnZXQgfSBmcm9tICcuL2xpbmtlZC10YXJnZXQubWpzJzsKaW1wb3J0IHsgZGlybmFtZSwgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7CgpleHBvcnQgY29uc3QgTUNQX1NFUlZFUl9OQU1FID0gJ2JpdGJvc3MtdWknOwpjb25zdCBDT01NQU5EID0gJ25vZGUnOwoKLyoqCiAqIFBhdGggdG8gdGhlIGluc3RhbGxlZCBDTEksIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHJvb3QuCiAqCiAqIFJlbGF0aXZlIG9uIHB1cnBvc2U6IGhhcm5lc3NlcyBzcGF3biBhIHN0ZGlvIHNlcnZlciB3aXRoIHRoZSBwcm9qZWN0IHJvb3QgYXMKICogaXRzIHdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgYSByZWxhdGl2ZSBwYXRoIGlzIHdoYXQgbGV0cyBhIGNvbW1pdHRlZAogKiBgLm1jcC5qc29uYCB3b3JrIG9uIGEgdGVhbW1hdGUncyBtYWNoaW5lLiBBbiBhYnNvbHV0ZSBwYXRoIHdvdWxkIHBpbiB0aGUKICogY29uZmlnIHRvIHdob2V2ZXIgcmFuIGBhaS1pbml0YC4KICoKICogRm9yd2FyZCBzbGFzaGVzIGV2ZW4gb24gV2luZG93cyDigJQgTm9kZSBhY2NlcHRzIHRoZW0sIGFuZCBKU09OIGNvbmZpZ3MgYXJlCiAqIHNoYXJlZCBhY3Jvc3MgcGxhdGZvcm1zLgogKi8KZXhwb3J0IGNvbnN0IE1DUF9CSU5fUEFUSCA9ICdub2RlX21vZHVsZXMvYml0Ym9zcy11aS9iaW4vYml0Ym9zcy11aS5tanMnOwoKLyoqCiAqIFRoZSBNQ1Agc2VydmVyJ3Mgb3duIHJ1bnRpbWUgbmVlZHMsIGRlY2xhcmVkIGFzIE9QVElPTkFMIHBlZXJzIHJhdGhlciB0aGFuCiAqIGRlcGVuZGVuY2llczogdG9nZXRoZXIgdGhleSBhcmUgfjEyIE1CIOKAlCBtb3JlIHRoYW4gZXZlcnkgcnVudGltZSBkZXBlbmRlbmN5CiAqIG9mIHRoZSBjb21wb25lbnQgbGlicmFyeSBjb21iaW5lZCDigJQgYW5kIG5vdGhpbmcgYnV0IGBiaXRib3NzLXVpIG1jcGAgbG9hZHMKICogdGhlbS4KICovCmV4cG9ydCBjb25zdCBNQ1BfUEVFUlMgPSBbJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsnLCAnem9kJ107CgovKioKICogRGlyZWN0b3J5IHByb2JlLCB3YWxraW5nIHVwIGZyb20gYGRpcmAuIERlbGliZXJhdGVseSBOT1QgYHJlcXVpcmUucmVzb2x2ZWA6CiAqIGFuIEVTTS1vbmx5IHBhY2thZ2Ugd2hvc2UgYGV4cG9ydHNgIG1hcCBkZWNsYXJlcyBubyBgcmVxdWlyZWAgY29uZGl0aW9uCiAqIHRocm93cyBFUlJfUEFDS0FHRV9QQVRIX05PVF9FWFBPUlRFRCBvbiBhIHBlcmZlY3RseSBnb29kIGluc3RhbGwg4oCUIHRoZSBzYW1lCiAqIHRyYXAgZG9jdW1lbnRlZCBvbiBgaGFzSW5lcnRpYWAgaW4gdGhlIFZpdGUgcGx1Z2luLiBBIGRpcmVjdG9yeSBjaGVjayBpcwogKiBleHBvcnRzLW1hcC1hZ25vc3RpYy4KICovCmZ1bmN0aW9uIGlzSW5zdGFsbGVkRnJvbShkaXIsIG5hbWUpIHsKCWNvbnN0IHNlZ21lbnRzID0gbmFtZS5zcGxpdCgnLycpOwoJbGV0IGN1cnJlbnQgPSByZXNvbHZlKGRpcik7Cglmb3IgKDs7KSB7CgkJaWYgKGV4aXN0c1N5bmMoam9pbihjdXJyZW50LCAnbm9kZV9tb2R1bGVzJywgLi4uc2VnbWVudHMpKSkgcmV0dXJuIHRydWU7CgkJY29uc3QgcGFyZW50ID0gZGlybmFtZShjdXJyZW50KTsKCQlpZiAocGFyZW50ID09PSBjdXJyZW50KSByZXR1cm4gZmFsc2U7CgkJY3VycmVudCA9IHBhcmVudDsKCX0KfQoKLyoqCiAqIFdoaWNoIE1DUCBwZWVycyB0aGUgcHJvamVjdCBpcyBtaXNzaW5nLCBzbyBhIGNhbGxlciByZWdpc3RlcmluZyB0aGUgc2VydmVyCiAqIGNhbiBzYXkgc28gTk9XIHJhdGhlciB0aGFuIGxldCB0aGUgaGFybmVzcyBkaXNjb3ZlciBpdCBvbiBmaXJzdCBsYXVuY2gg4oCUIHRoZQogKiBjb25maWcgaXMgd3JpdHRlbiBieSBgYWktaW5pdGAgLyB0aGUgZGV2IHNlcnZlciwgYnV0IHRoZSBmYWlsdXJlIHdvdWxkCiAqIHN1cmZhY2UgbXVjaCBsYXRlciwgaW5zaWRlIGFuIGFnZW50LCBhcyBhIHNlcnZlciB0aGF0IHdvdWxkIG5vdCBzdGFydC4KICoKICogUmV0dXJucyBgW11gIHdoZW4gZXZlcnl0aGluZyBuZWVkZWQgaXMgcHJlc2VudC4KICovCmV4cG9ydCBmdW5jdGlvbiBtaXNzaW5nTWNwUGVlcnMocm9vdCkgewoJcmV0dXJuIE1DUF9QRUVSUy5maWx0ZXIoKG5hbWUpID0+ICFpc0luc3RhbGxlZEZyb20ocm9vdCwgbmFtZSkpOwp9CgovKioKICogSW52b2tlIHRoZSBJTlNUQUxMRUQgYmluYXJ5IGRpcmVjdGx5LCBuZXZlciBgbnB4YCAoMjAyNi0wOS0wOSwgc3VwZXJzZWRpbmcKICogdGhlIDIwMjYtMDgtMDYgcGlubmVkLW5weCBydWxpbmcg4oCUIHNlZSBiZWxvdykuCiAqCiAqIFRoZSAyMDI2LTA4LTA2IHJldmlldyBwaW5uZWQgdGhlIHNwZWMgdG8gdGhpcyBwYWNrYWdlJ3Mgb3duIHZlcnNpb24gYmVjYXVzZQogKiBNQ1AgaG9zdHMgc3Bhd24gdGhlIGVudHJ5IHdpdGggbm9uLVRUWSBzdGRpbywgd2hlcmUgYG5weGAgaW5zdGFsbHMgd2l0aG91dAogKiBwcm9tcHRpbmc6IGFuIHVucGlubmVkIGBucHggYml0Ym9zcy11aSBtY3BgIHdvdWxkIHNpbGVudGx5IGRvd25sb2FkIGFuZAogKiBleGVjdXRlIHdoYXRldmVyIGBiaXRib3NzLXVpQGxhdGVzdGAgcmVzb2x2ZWQgdG8sIGFuZCBhbnN3ZXIgZnJvbSBhCiAqIGRpZmZlcmVudCB2ZXJzaW9uJ3Mga25vd2xlZGdlIGJhc2UgdGhhbiB0aGUgcHJvamVjdCB1c2VzLgogKgogKiBUaGUgcGluIGZpeGVkIHRoYXQgYW5kIGJyb2tlIHRoZSBzZXJ2ZXIgb3V0cmlnaHQuIGBucHggYml0Ym9zcy11aUB4LnkueiBtY3BgCiAqIHJ1bnMgdGhlIHBhY2thZ2UgT1VUIE9GIFRIRSBOUFggQ0FDSEUsIGFuZCB0aGUgTUNQIGVudHJ5IHJlc29sdmVzIGl0cwogKiBvcHRpb25hbCBwZWVycyAoYEBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGtgLCBgem9kYCkgcmVsYXRpdmUgdG8gdGhlIHBhY2thZ2UKICogaXQgaXMgcnVubmluZyBmcm9tLiBUaGUgY2FjaGUgZGlyZWN0b3J5IG5ldmVyIGhhcyB0aGVtLCBzbyB0aGUgc2VydmVyIGNhbm5vdAogKiBzdGFydCBubyBtYXR0ZXIgd2hhdCB0aGUgcHJvamVjdCBoYXMgaW5zdGFsbGVkIOKAlCByZXBvcnRlZCBmcm9tIGEgY29uc3VtZXIKICogcHJvamVjdCB3aXRoIGJvdGggcGVlcnMgcHJlc2VudC4KICoKICogQSBwYXRoIHRvIHRoZSBsb2NhbCBiaW5hcnkgc2F0aXNmaWVzIHRoZSBvcmlnaW5hbCBydWxpbmcgTU9SRSBjb21wbGV0ZWx5CiAqIHRoYW4gdGhlIHBpbiBkaWQ6IGl0IGNhbm5vdCByZWFjaCB0aGUgcmVnaXN0cnkgYXQgYWxsLCBzbyB0aGVyZSBpcyBub3RoaW5nCiAqIHRvIGRvd25sb2FkIGFuZCBubyBgbGF0ZXN0YCB0byBkcmlmdCB0by4gSXQgYWxzbyByZXRpcmVzIHRoZSBwaW4ncyBvd24KICogbWFpbnRlbmFuY2UgcHJvYmxlbSwgd2hlcmUgYSBjb25maWcgd3JpdHRlbiBhdCBvbmUgdmVyc2lvbiBrZXB0IG5hbWluZyB0aGF0CiAqIHZlcnNpb24gYWZ0ZXIgYW4gdXBncmFkZSwgbGV0dGluZyBhbiBhZ2VudCBxdWVyeSBhIG1hbmlmZXN0IHRoYXQgZGlzYWdyZWVkCiAqIHdpdGggdGhlIGNvZGUgaXQgd2FzIHdyaXRpbmcgYWdhaW5zdC4gVGhlIGJpbmFyeSBvbiBkaXNrIElTIHRoZSBpbnN0YWxsZWQKICogdmVyc2lvbiwgYnkgY29uc3RydWN0aW9uLgogKi8KY29uc3QgQVJHUyA9IFtNQ1BfQklOX1BBVEgsICdtY3AnXTsKCmNvbnN0IHN0ZGlvRW50cnkgPSAoKSA9PiAoeyBjb21tYW5kOiBDT01NQU5ELCBhcmdzOiBbLi4uQVJHU10gfSk7CmNvbnN0IHZzY29kZUVudHJ5ID0gKCkgPT4gKHsKCXR5cGU6ICdzdGRpbycsCgljb21tYW5kOiBDT01NQU5ELAoJYXJnczogWy4uLkFSR1NdLAp9KTsKCmZ1bmN0aW9uIHdyaXRlSnNvbihwYXRoLCBkYXRhKSB7Cglta2RpclN5bmMoZGlybmFtZShwYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7Cgl3cml0ZUZpbGVTeW5jKHBhdGgsIGAke0pTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsICdcdCcpfVxuYCwgJ3V0Zi04Jyk7Cn0KCi8qKgogKiBgdGV4dGAgd2l0aCBpdHMgSlNPTkMgZXh0cmFzIChsaW5lL2Jsb2NrIGNvbW1lbnRzLCB0cmFpbGluZyBjb21tYXMpIGJsYW5rZWQKICogdG8gc3BhY2VzLCBuZXdsaW5lcyBrZXB0LCBzbyBldmVyeSBvZmZzZXQgc3RpbGwgcG9pbnRzIGF0IHRoZSBzYW1lCiAqIGNoYXJhY3RlciBvZiBgdGV4dGAuIFRoYXQgbGV0cyBhIHNjYW4gb2YgdGhlIHJlc3VsdCBzcGxpY2UgaW50byB0aGUKICogb3JpZ2luYWwgd2l0aG91dCB0b3VjaGluZyB0aGUgY29tbWVudHMuIFN0cmluZy1saXRlcmFsIGF3YXJlOiBhbgogKiBgaHR0cHM6Ly9gIHZhbHVlIGlzIG5vdCBhIGNvbW1lbnQuCiAqLwpmdW5jdGlvbiBibGFua0pzb25jKHRleHQpIHsKCWNvbnN0IG91dCA9IHRleHQuc3BsaXQoJycpOwoJbGV0IGkgPSAwOwoJY29uc3QgYmxhbmsgPSAoZnJvbSwgdG8pID0+IHsKCQlmb3IgKGxldCBrID0gZnJvbTsgayA8IHRvOyBrKyspIGlmIChvdXRba10gIT09ICdcbicpIG91dFtrXSA9ICcgJzsKCX07Cgl3aGlsZSAoaSA8IHRleHQubGVuZ3RoKSB7CgkJY29uc3QgY2ggPSB0ZXh0W2ldOwoJCWlmIChjaCA9PT0gJyInKSB7CgkJCWkgPSBzdHJpbmdFbmQodGV4dCwgaSk7CgkJfSBlbHNlIGlmIChjaCA9PT0gJy8nICYmIHRleHRbaSArIDFdID09PSAnLycpIHsKCQkJY29uc3QgZW5kID0gdGV4dC5pbmRleE9mKCdcbicsIGkpOwoJCQljb25zdCB0byA9IGVuZCA9PT0gLTEgPyB0ZXh0Lmxlbmd0aCA6IGVuZDsKCQkJYmxhbmsoaSwgdG8pOwoJCQlpID0gdG87CgkJfSBlbHNlIGlmIChjaCA9PT0gJy8nICYmIHRleHRbaSArIDFdID09PSAnKicpIHsKCQkJY29uc3QgZW5kID0gdGV4dC5pbmRleE9mKCcqLycsIGkgKyAyKTsKCQkJY29uc3QgdG8gPSBlbmQgPT09IC0xID8gdGV4dC5sZW5ndGggOiBlbmQgKyAyOwoJCQlibGFuayhpLCB0byk7CgkJCWkgPSB0bzsKCQl9IGVsc2UgewoJCQlpKys7CgkJfQoJfQoJLy8gVHJhaWxpbmcgY29tbWFzLCBvbiB0aGUgY29tbWVudC1mcmVlIHRleHQ6IGAsYCB0aGVuIG9ubHkgYmxhbmtzIHRvIGB9YC9gXWAuCgljb25zdCBibGFua2VkID0gb3V0LmpvaW4oJycpOwoJcmV0dXJuIGJsYW5rZWQucmVwbGFjZSgvLChccypbfVxdXSkvZywgJyAkMScpOwp9CgovKiogSW5kZXgganVzdCBwYXN0IHRoZSBzdHJpbmcgbGl0ZXJhbCBvcGVuaW5nIGF0IGBpYC4gKi8KZnVuY3Rpb24gc3RyaW5nRW5kKHRleHQsIGkpIHsKCWZvciAobGV0IGsgPSBpICsgMTsgayA8IHRleHQubGVuZ3RoOyBrKyspIHsKCQlpZiAodGV4dFtrXSA9PT0gJ1xcJykgaysrOwoJCWVsc2UgaWYgKHRleHRba10gPT09ICciJykgcmV0dXJuIGsgKyAxOwoJfQoJcmV0dXJuIHRleHQubGVuZ3RoOwp9Cgpjb25zdCBza2lwQmxhbmtzID0gKHMsIGkpID0+IHsKCXdoaWxlIChpIDwgcy5sZW5ndGggJiYgL1xzLy50ZXN0KHNbaV0pKSBpKys7CglyZXR1cm4gaTsKfTsKCi8qKiBJbmRleCBqdXN0IHBhc3QgdGhlIEpTT04gdmFsdWUgc3RhcnRpbmcgYXQgYGlgIG9mIGNvbW1lbnQtZnJlZSBgc2AuICovCmZ1bmN0aW9uIHZhbHVlRW5kKHMsIGkpIHsKCWlmIChzW2ldID09PSAnIicpIHJldHVybiBzdHJpbmdFbmQocywgaSk7CglpZiAoc1tpXSAhPT0gJ3snICYmIHNbaV0gIT09ICdbJykgewoJCXdoaWxlIChpIDwgcy5sZW5ndGggJiYgIS9bXHMsfVxdXS8udGVzdChzW2ldKSkgaSsrOwoJCXJldHVybiBpOwoJfQoJbGV0IGRlcHRoID0gMDsKCWZvciAobGV0IGsgPSBpOyBrIDwgcy5sZW5ndGg7IGsrKykgewoJCWlmIChzW2tdID09PSAnIicpIGsgPSBzdHJpbmdFbmQocywgaykgLSAxOwoJCWVsc2UgaWYgKHNba10gPT09ICd7JyB8fCBzW2tdID09PSAnWycpIGRlcHRoKys7CgkJZWxzZSBpZiAoKHNba10gPT09ICd9JyB8fCBzW2tdID09PSAnXScpICYmIC0tZGVwdGggPT09IDApIHJldHVybiBrICsgMTsKCX0KCXJldHVybiBzLmxlbmd0aDsKfQoKLyoqIFRoZSBtZW1iZXJzIG9mIHRoZSBvYmplY3Qgd2hvc2UgYHtgIGlzIGF0IGBvcGVuYCBpbiBjb21tZW50LWZyZWUgYHNgLiAqLwpmdW5jdGlvbiBvYmplY3RNZW1iZXJzKHMsIG9wZW4pIHsKCWNvbnN0IG1lbWJlcnMgPSBbXTsKCWxldCBpID0gc2tpcEJsYW5rcyhzLCBvcGVuICsgMSk7Cgl3aGlsZSAoc1tpXSA9PT0gJyInKSB7CgkJY29uc3Qga2V5RW5kID0gc3RyaW5nRW5kKHMsIGkpOwoJCWNvbnN0IGtleSA9IEpTT04ucGFyc2Uocy5zbGljZShpLCBrZXlFbmQpKTsKCQljb25zdCB2YWx1ZVN0YXJ0ID0gc2tpcEJsYW5rcyhzLCBza2lwQmxhbmtzKHMsIGtleUVuZCkgKyAxKTsKCQljb25zdCBlbmQgPSB2YWx1ZUVuZChzLCB2YWx1ZVN0YXJ0KTsKCQltZW1iZXJzLnB1c2goeyBrZXksIHZhbHVlU3RhcnQsIHZhbHVlRW5kOiBlbmQgfSk7CgkJaSA9IHNraXBCbGFua3MocywgZW5kKTsKCQlpZiAoc1tpXSA9PT0gJywnKSBpID0gc2tpcEJsYW5rcyhzLCBpICsgMSk7Cgl9CglyZXR1cm4gbWVtYmVyczsKfQoKLyoqCiAqIGByYXdgIChKU09OQykgd2l0aCBgY29uZmlnW2NvbnRhaW5lcktleV1bTUNQX1NFUlZFUl9OQU1FXWAgc2V0IHRvIGBlbnRyeWAsCiAqIHNwbGljZWQgaW50byB0aGUgdGV4dCBzbyBpdHMgY29tbWVudHMgYW5kIGxheW91dCBzdXJ2aXZlLiBUaGUgbGFzdAogKiBkdXBsaWNhdGUga2V5IHdpbnMsIGFzIGluIGBKU09OLnBhcnNlYC4gTnVsbCB3aGVuIHRoZSByb290IGlzIG5vdCBhbiBvYmplY3QuCiAqLwpmdW5jdGlvbiBzcGxpY2VFbnRyeShyYXcsIGNvbnRhaW5lcktleSwgZW50cnkpIHsKCWNvbnN0IHMgPSBibGFua0pzb25jKHJhdyk7Cgljb25zdCByb290ID0gc2tpcEJsYW5rcyhzLCAwKTsKCWlmIChzW3Jvb3RdICE9PSAneycpIHJldHVybiBudWxsOwoJY29uc3QgdW5pdCA9IHJhdy5tYXRjaCgvXihbIFx0XSspXFMvbSk/LlsxXSA/PyAnXHQnOwoJY29uc3QgaW5kZW50QXQgPSAob2Zmc2V0KSA9PgoJCXJhdy5zbGljZShyYXcubGFzdEluZGV4T2YoJ1xuJywgb2Zmc2V0KSArIDEpLm1hdGNoKC9eWyBcdF0qLylbMF07Cgljb25zdCBmb3JtYXQgPSAodmFsdWUsIGluZGVudCkgPT4KCQlKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgdW5pdCkucmVwbGFjZSgvXG4vZywgYFxuJHtpbmRlbnR9YCk7Cgljb25zdCByZXBsYWNlID0gKG1lbWJlciwgdmFsdWUpID0+CgkJcmF3LnNsaWNlKDAsIG1lbWJlci52YWx1ZVN0YXJ0KSArCgkJZm9ybWF0KHZhbHVlLCBpbmRlbnRBdChtZW1iZXIudmFsdWVTdGFydCkpICsKCQlyYXcuc2xpY2UobWVtYmVyLnZhbHVlRW5kKTsKCS8vIEEgbmV3IGZpcnN0IG1lbWJlciwgcmlnaHQgYWZ0ZXIgdGhlIG9iamVjdCdzIGB7YC4KCWNvbnN0IGluc2VydCA9IChvcGVuLCBrZXksIHZhbHVlKSA9PiB7CgkJY29uc3QgaW5kZW50ID0gaW5kZW50QXQob3BlbikgKyB1bml0OwoJCWNvbnN0IGVtcHR5ID0gb2JqZWN0TWVtYmVycyhzLCBvcGVuKS5sZW5ndGggPT09IDA7CgkJY29uc3QgY2xvc2UgPSBlbXB0eSA/IHZhbHVlRW5kKHMsIG9wZW4pIC0gMSA6IC0xOwoJCWNvbnN0IHRhaWwgPSBlbXB0eQoJCQk/IHJhdy5zbGljZShvcGVuICsgMSwgY2xvc2UpLmluY2x1ZGVzKCdcbicpCgkJCQk/ICcnCgkJCQk6IGBcbiR7aW5kZW50QXQob3Blbil9YAoJCQk6ICcsJzsKCQlyZXR1cm4gKAoJCQlyYXcuc2xpY2UoMCwgb3BlbiArIDEpICsKCQkJYFxuJHtpbmRlbnR9JHtKU09OLnN0cmluZ2lmeShrZXkpfTogJHtmb3JtYXQodmFsdWUsIGluZGVudCl9JHt0YWlsfWAgKwoJCQlyYXcuc2xpY2Uob3BlbiArIDEpCgkJKTsKCX07CgoJY29uc3QgY29udGFpbmVyID0gb2JqZWN0TWVtYmVycyhzLCByb290KS5maW5kTGFzdCgKCQkobSkgPT4gbS5rZXkgPT09IGNvbnRhaW5lcktleQoJKTsKCWlmICghY29udGFpbmVyKQoJCXJldHVybiBpbnNlcnQocm9vdCwgY29udGFpbmVyS2V5LCB7IFtNQ1BfU0VSVkVSX05BTUVdOiBlbnRyeSB9KTsKCWlmIChzW2NvbnRhaW5lci52YWx1ZVN0YXJ0XSAhPT0gJ3snKQoJCXJldHVybiByZXBsYWNlKGNvbnRhaW5lciwgeyBbTUNQX1NFUlZFUl9OQU1FXTogZW50cnkgfSk7Cgljb25zdCBleGlzdGluZyA9IG9iamVjdE1lbWJlcnMocywgY29udGFpbmVyLnZhbHVlU3RhcnQpLmZpbmRMYXN0KAoJCShtKSA9PiBtLmtleSA9PT0gTUNQX1NFUlZFUl9OQU1FCgkpOwoJcmV0dXJuIGV4aXN0aW5nCgkJPyByZXBsYWNlKGV4aXN0aW5nLCBlbnRyeSkKCQk6IGluc2VydChjb250YWluZXIudmFsdWVTdGFydCwgTUNQX1NFUlZFUl9OQU1FLCBlbnRyeSk7Cn0KCi8qKiBKU09OIHdpdGggb2JqZWN0IGtleXMgc29ydGVkOiBhIHNwbGljZSBtYXkgcGxhY2UgYSBuZXcga2V5IGZpcnN0LiAqLwpjb25zdCBjYW5vbmljYWwgPSAodmFsdWUpID0+CglKU09OLnN0cmluZ2lmeSh2YWx1ZSwgKF8sIHYpID0+CgkJdiAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodikKCQkJPyBPYmplY3QuZnJvbUVudHJpZXMoCgkJCQkJT2JqZWN0LmVudHJpZXModikuc29ydCgoW2FdLCBbYl0pID0+IChhIDwgYiA/IC0xIDogMSkpCgkJCQkpCgkJCTogdgoJKTsKCi8qKgogKiBNZXJnZSB0aGUgc2VydmVyIGVudHJ5IGludG8gYHBhdGhgJ3MgYDxjb250YWluZXJLZXk+YCBtYXAuIFJldHVybnMKICogYHsgcGF0aCwgbGFiZWwsIGFjdGlvbiB9YCB3aXRoIGFjdGlvbiDiiIggY3JlYXRlZHx1cGRhdGVkfHVuY2hhbmdlZHxza2lwcGVkLgogKgogKiBTdHJpY3QgSlNPTiBpcyByZXdyaXR0ZW4gd2hvbGUuIEpTT05DIChjb21tZW50cywgdHJhaWxpbmcgY29tbWFzOiBWUyBDb2RlJ3MKICogYG1jcC5qc29uYCwgWmVkJ3MgYHNldHRpbmdzLmpzb25gLCB3aGljaCBaZWQgaXRzZWxmIGNyZWF0ZXMgd2l0aCBhIGNvbW1lbnQKICogaGVhZGVyKSBpcyBzcGxpY2VkIGluc3RlYWQsIHNvIHRoZSB1c2VyJ3MgY29tbWVudHMgc3Vydml2ZS4KICovCmZ1bmN0aW9uIGVuc3VyZUVudHJ5KHBhdGgsIGNvbnRhaW5lcktleSwgZW50cnksIGxhYmVsKSB7Cgl0cnkgewoJCXJlZnVzZUxpbmtlZFRhcmdldChwYXRoKTsKCX0gY2F0Y2ggKGVycm9yKSB7CgkJcmV0dXJuIHsgcGF0aCwgbGFiZWwsIGFjdGlvbjogJ3NraXBwZWQnLCByZWFzb246IGVycm9yLm1lc3NhZ2UgfTsKCX0KCWxldCBjb25maWcgPSB7fTsKCWxldCByYXcgPSBudWxsOwoJY29uc3QgZXhpc3RlZCA9IGV4aXN0c1N5bmMocGF0aCk7CglpZiAoZXhpc3RlZCkgewoJCWNvbnN0IHRleHQgPSByZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04Jyk7CgkJdHJ5IHsKCQkJY29uZmlnID0gSlNPTi5wYXJzZSh0ZXh0KTsKCQl9IGNhdGNoIChlcnJvcikgewoJCQl0cnkgewoJCQkJY29uZmlnID0gSlNPTi5wYXJzZShibGFua0pzb25jKHRleHQpKTsKCQkJCXJhdyA9IHRleHQ7CgkJCX0gY2F0Y2ggewoJCQkJY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTsKCQkJCXJldHVybiB7CgkJCQkJcGF0aCwKCQkJCQlsYWJlbCwKCQkJCQlhY3Rpb246ICdza2lwcGVkJywKCQkJCQlyZWFzb246IGBpbnZhbGlkIEpTT04gKCR7bWVzc2FnZX0pYCwKCQkJCX07CgkJCX0KCQl9Cgl9CglpZiAoIWNvbmZpZyB8fCB0eXBlb2YgY29uZmlnICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGNvbmZpZykpIHsKCQlyZXR1cm4gewoJCQlwYXRoLAoJCQlsYWJlbCwKCQkJYWN0aW9uOiAnc2tpcHBlZCcsCgkJCXJlYXNvbjogJ3RoZSB0b3AgbGV2ZWwgaXMgbm90IGFuIG9iamVjdCcsCgkJfTsKCX0KCWlmICghY29uZmlnW2NvbnRhaW5lcktleV0gfHwgdHlwZW9mIGNvbmZpZ1tjb250YWluZXJLZXldICE9PSAnb2JqZWN0JykgewoJCWNvbmZpZ1tjb250YWluZXJLZXldID0ge307Cgl9CgoJY29uc3QgcHJldmlvdXMgPSBjb25maWdbY29udGFpbmVyS2V5XVtNQ1BfU0VSVkVSX05BTUVdOwoJaWYgKHByZXZpb3VzICYmIEpTT04uc3RyaW5naWZ5KHByZXZpb3VzKSA9PT0gSlNPTi5zdHJpbmdpZnkoZW50cnkpKSB7CgkJcmV0dXJuIHsgcGF0aCwgbGFiZWwsIGFjdGlvbjogJ3VuY2hhbmdlZCcgfTsKCX0KCgljb25maWdbY29udGFpbmVyS2V5XVtNQ1BfU0VSVkVSX05BTUVdID0gZW50cnk7Cgl0cnkgewoJCWlmIChyYXcgPT09IG51bGwpIHsKCQkJd3JpdGVKc29uKHBhdGgsIGNvbmZpZyk7CgkJfSBlbHNlIHsKCQkJY29uc3QgbmV4dCA9IHNwbGljZUVudHJ5KHJhdywgY29udGFpbmVyS2V5LCBlbnRyeSk7CgkJCS8vIFRoZSBzcGxpY2UgbXVzdCByZWFkIGJhY2sgYXMgZXhhY3RseSB0aGUgbWVyZ2VkIGNvbmZpZywgb3IgdGhlCgkJCS8vIGZpbGUgaXMgbGVmdCBhcyBpdCB3YXMuCgkJCWlmICgKCQkJCW5leHQgPT09IG51bGwgfHwKCQkJCWNhbm9uaWNhbChKU09OLnBhcnNlKGJsYW5rSnNvbmMobmV4dCkpKSAhPT0gY2Fub25pY2FsKGNvbmZpZykKCQkJKSB7CgkJCQlyZXR1cm4gewoJCQkJCXBhdGgsCgkJCQkJbGFiZWwsCgkJCQkJYWN0aW9uOiAnc2tpcHBlZCcsCgkJCQkJcmVhc29uOiBgY291bGQgbm90IG1lcmdlIGludG8gaXRzIGNvbW1lbnRzIOKAlCBhZGQgIiR7TUNQX1NFUlZFUl9OQU1FfSIgdW5kZXIgIiR7Y29udGFpbmVyS2V5fSIgeW91cnNlbGZgLAoJCQkJfTsKCQkJfQoJCQl3cml0ZUZpbGVTeW5jKHBhdGgsIG5leHQsICd1dGYtOCcpOwoJCX0KCX0gY2F0Y2ggKGVycm9yKSB7CgkJY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTsKCQlyZXR1cm4geyBwYXRoLCBsYWJlbCwgYWN0aW9uOiAnc2tpcHBlZCcsIHJlYXNvbjogbWVzc2FnZSB9OwoJfQoJcmV0dXJuIHsgcGF0aCwgbGFiZWwsIGFjdGlvbjogZXhpc3RlZCA/ICd1cGRhdGVkJyA6ICdjcmVhdGVkJyB9Owp9CgovKiogQ2xhdWRlIENvZGUg4oCUIHByb2plY3Qtcm9vdCBgLm1jcC5qc29uYC4gKi8KZXhwb3J0IGNvbnN0IHdyaXRlQ2xhdWRlQ29kZUNvbmZpZyA9IChyb290KSA9PgoJZW5zdXJlRW50cnkoCgkJam9pbihyb290LCAnLm1jcC5qc29uJyksCgkJJ21jcFNlcnZlcnMnLAoJCXN0ZGlvRW50cnkoKSwKCQknQ2xhdWRlIENvZGUnCgkpOwoKLyoqIEN1cnNvciDigJQgcHJvamVjdCBgLmN1cnNvci9tY3AuanNvbmAuICovCmV4cG9ydCBjb25zdCB3cml0ZUN1cnNvckNvbmZpZyA9IChyb290KSA9PgoJZW5zdXJlRW50cnkoCgkJam9pbihyb290LCAnLmN1cnNvcicsICdtY3AuanNvbicpLAoJCSdtY3BTZXJ2ZXJzJywKCQlzdGRpb0VudHJ5KCksCgkJJ0N1cnNvcicKCSk7CgovKiogVlMgQ29kZSAvIEdpdEh1YiBDb3BpbG90IOKAlCBwcm9qZWN0IGAudnNjb2RlL21jcC5qc29uYCAoYHNlcnZlcnNgICsgYHR5cGVgKS4gKi8KZXhwb3J0IGNvbnN0IHdyaXRlVnNjb2RlQ29uZmlnID0gKHJvb3QpID0+CgllbnN1cmVFbnRyeSgKCQlqb2luKHJvb3QsICcudnNjb2RlJywgJ21jcC5qc29uJyksCgkJJ3NlcnZlcnMnLAoJCXZzY29kZUVudHJ5KCksCgkJJ1ZTIENvZGUgLyBDb3BpbG90JwoJKTsKCi8qKgogKiBaZWQg4oCUIHByb2plY3QgYC56ZWQvc2V0dGluZ3MuanNvbmAgKGBjb250ZXh0X3NlcnZlcnNgLCBhIGZsYXQKICogYHsgY29tbWFuZCwgYXJncyB9YCkuIFplZCBzdGFydHMgYSBwcm9qZWN0J3Mgc2VydmVycyBvbmNlIHRoZSBwcm9qZWN0IGlzCiAqIHRydXN0ZWQuCiAqLwpleHBvcnQgY29uc3Qgd3JpdGVaZWRDb25maWcgPSAocm9vdCkgPT4KCWVuc3VyZUVudHJ5KAoJCWpvaW4ocm9vdCwgJy56ZWQnLCAnc2V0dGluZ3MuanNvbicpLAoJCSdjb250ZXh0X3NlcnZlcnMnLAoJCXN0ZGlvRW50cnkoKSwKCQknWmVkJwoJKTsKCi8qKgogKiBSZWdpc3RlciB0aGUgc2VydmVyIGluIGV2ZXJ5IHByb2plY3Qtc2NvcGVkIGhhcm5lc3MuIFdpbmRzdXJmIGlzIG5vdCBhbW9uZwogKiB0aGVtOiBpdCByZWFkcyBvbmx5IGEgR0xPQkFMIChob21lLWRpcikgY29uZmlnLCBhbmQgZGV0ZWN0aW5nIHdoZXRoZXIgaXQgaXMKICogaW5zdGFsbGVkIHByb3ZlZCB1bnJlbGlhYmxlIChhIGxlZnRvdmVyIGB+Ly5jb2RlaXVtYCBmcm9tIGFuIHVuaW5zdGFsbGVkCiAqIFdpbmRzdXJmKSwgc28gYSBkZWZhdWx0IHJ1biBtdXN0IG5vdCB3cml0ZSBvdXRzaWRlIHRoZSBwcm9qZWN0LiBJdHMKICogYC53aW5kc3VyZi9ydWxlc2AgcG9pbnRlciBmaWxlIGlzIHN0aWxsIHdyaXR0ZW4gYnkgYGFpLWluaXRgLgogKi8KZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU1jcENvbmZpZ3Mocm9vdCkgewoJcmV0dXJuIFsKCQl3cml0ZUNsYXVkZUNvZGVDb25maWcocm9vdCksCgkJd3JpdGVDdXJzb3JDb25maWcocm9vdCksCgkJd3JpdGVWc2NvZGVDb25maWcocm9vdCksCgkJd3JpdGVaZWRDb25maWcocm9vdCksCgldOwp9CgovKioKICogVGhlIHBhY2thZ2UgbWFuYWdlciBhIHByb2plY3QgdXNlcywgZnJvbSB0aGUgbmVhcmVzdCBsb2NrZmlsZSB3YWxraW5nIHVwCiAqIChhIHdvcmtzcGFjZSBwYWNrYWdlIHNpdHMgYmVsb3cgdGhlIGxvY2tmaWxlKS4gYG5wbWAgd2hlbiBub25lIGlzIGZvdW5kLgogKi8KZXhwb3J0IGZ1bmN0aW9uIGRldGVjdFBhY2thZ2VNYW5hZ2VyKHJvb3QpIHsKCWxldCBjdXJyZW50ID0gcmVzb2x2ZShyb290KTsKCWZvciAoOzspIHsKCQlpZiAoZXhpc3RzU3luYyhqb2luKGN1cnJlbnQsICdwbnBtLWxvY2sueWFtbCcpKSkgcmV0dXJuICdwbnBtJzsKCQlpZiAoZXhpc3RzU3luYyhqb2luKGN1cnJlbnQsICd5YXJuLmxvY2snKSkpIHJldHVybiAneWFybic7CgkJaWYgKAoJCQlleGlzdHNTeW5jKGpvaW4oY3VycmVudCwgJ2J1bi5sb2NrJykpIHx8CgkJCWV4aXN0c1N5bmMoam9pbihjdXJyZW50LCAnYnVuLmxvY2tiJykpCgkJKQoJCQlyZXR1cm4gJ2J1bic7CgkJaWYgKGV4aXN0c1N5bmMoam9pbihjdXJyZW50LCAncGFja2FnZS1sb2NrLmpzb24nKSkpIHJldHVybiAnbnBtJzsKCQljb25zdCBwYXJlbnQgPSBkaXJuYW1lKGN1cnJlbnQpOwoJCWlmIChwYXJlbnQgPT09IGN1cnJlbnQpIHJldHVybiAnbnBtJzsKCQljdXJyZW50ID0gcGFyZW50OwoJfQp9CgovKioKICogVGhlIGFyZ3YgdGhhdCBhZGRzIGBwYWNrYWdlc2AgYXMgZGV2IGRlcGVuZGVuY2llcyB3aXRoIGBtYW5hZ2VyYC4gQmFyZQogKiBuYW1lcywgbm8gdmVyc2lvbiByYW5nZXM6IHRoZSBwZWVyIHJhbmdlcyAoYD49MS4yOS4wYCwgYF4zLjI1IHx8IF40LjBgKSBhcmUKICogb3Blbi1lbmRlZCwgc28gdGhlIGxhdGVzdCByZWxlYXNlIGFsd2F5cyBzYXRpc2ZpZXMgdGhlbSDigJQgYW5kIGEgcmFuZ2Ugd2l0aAogKiBgfHxgIG9yIHNwYWNlcyB3b3VsZCBuZWVkIHNoZWxsIHF1b3Rpbmcgb24gV2luZG93cywgd2hlcmUgdGhlIGNvbW1hbmQgcnVucwogKiB0aHJvdWdoIGEgc2hlbGwuCiAqLwpleHBvcnQgZnVuY3Rpb24gZGV2SW5zdGFsbENvbW1hbmQobWFuYWdlciwgcGFja2FnZXMpIHsKCWNvbnN0IHZlcmIgPSB7CgkJbnBtOiBbJ2luc3RhbGwnLCAnLS1zYXZlLWRldiddLAoJCXBucG06IFsnYWRkJywgJy1EJ10sCgkJeWFybjogWydhZGQnLCAnLUQnXSwKCQlidW46IFsnYWRkJywgJy1kJ10sCgl9W21hbmFnZXJdID8/IFsnaW5zdGFsbCcsICctLXNhdmUtZGV2J107CglyZXR1cm4gW21hbmFnZXIsIC4uLnZlcmIsIC4uLnBhY2thZ2VzXTsKfQo=", "" + import.meta.url).href
646
746
  ), i = n(e), a = i.filter((e) => e.action === "created" || e.action === "updated");
647
747
  for (let e of a) t.info(`[bitboss-ui] MCP: ${e.action} config for ${e.label}`);
648
748
  for (let e of i.filter((e) => e.action === "skipped")) t.warn(`[bitboss-ui] MCP: skipped ${e.label}${e.reason ? ` (${e.reason})` : ""}`);
@@ -654,94 +754,96 @@ async function Nt(e, t) {
654
754
  t.warn(`[bitboss-ui] MCP: could not register dev server (${n})`);
655
755
  }
656
756
  }
657
- var Pt = (e) => e, Ft = Symbol.for("bitboss-ui:editorRoot");
658
- function It(n = {}) {
757
+ var Jt = (e) => e, Yt = Symbol.for("bitboss-ui:editorRoot");
758
+ function Xt(n = {}) {
659
759
  let r = {
660
- iconDir: dt,
760
+ iconDir: wt,
661
761
  ...n
662
- }, i = n[Ft];
762
+ }, i = n[Yt];
663
763
  if ("cssLayers" in r && r.cssLayers === void 0) throw Error("[bitboss-ui] cssLayers is present but undefined. If you passed an imported constant such as TAILWIND_V4_LAYERS, the installed bitboss-ui does not export it (older dist?) — upgrade, or pass the array literal. Remove the key entirely for an unlayered sheet.");
664
764
  let s = a(r.cssLayers, { resetCss: r.resetCss ?? !1 });
665
765
  if (s) throw Error(s);
666
766
  let c = e(r.pt);
667
767
  if (c) throw Error(c);
668
- let d = R(r.pt);
768
+ let d = ke(r);
669
769
  if (d) throw Error(d);
670
- let f = t(r.ptScopes);
770
+ let f = Ae(r.pt, void 0, "pt", r);
671
771
  if (f) throw Error(f);
772
+ let ee = t(r.ptScopes);
773
+ if (ee) throw Error(ee);
672
774
  for (let [e, t] of Object.entries(r.ptScopes ?? {})) {
673
- let n = R(t, void 0, `ptScopes.${e}`);
775
+ let n = Ae(t, void 0, `ptScopes.${e}`, r);
674
776
  if (n) throw Error(n);
675
777
  }
676
- let m = Me(r.passthroughDeduper);
677
- if (m) throw Error(m);
678
- let h = Ne(r.autoDisableWritingThreshold);
679
- if (h) throw Error(h);
680
- let g, _, v = !0, te = [], b = !1, x, S, C = !1, w = (e, t, n) => {
681
- let r = vt(e, t);
682
- !r || C || (C = !0, n(r));
683
- }, T = {
778
+ let te = He(r.passthroughDeduper);
779
+ if (te) throw Error(te);
780
+ let ne = Ue(r.autoDisableWritingThreshold);
781
+ if (ne) throw Error(ne);
782
+ let m, h, _, b, S = !0, C = [], w = !1, T, E, pe = !1, O = (e, t, n) => {
783
+ let r = jt(e, t);
784
+ !r || pe || (pe = !0, n(r));
785
+ }, k = {
684
786
  info: (e) => console.warn(e),
685
787
  warn: (e) => console.warn(e)
686
- }, E = [], ue = [], O = [], { enabled: k, defaultLocale: de, warnings: fe } = De({
788
+ }, j = [], me = [], he = [], { enabled: M, defaultLocale: ye, warnings: N } = Ne({
687
789
  locale: r.locale,
688
790
  enabledLocales: r.enabledLocales,
689
- customLocaleKeys: E
690
- }), j = ke([...k, ...E]), M = /* @__PURE__ */ new Map(), N = /* @__PURE__ */ new Map(), P = /* @__PURE__ */ new Set(), we = () => {
691
- M.clear(), N.clear(), P = _e(g);
692
- for (let e of ge(g)) M.set(e.prefix, e), N.set(e.prefix, (t) => he(e.prefix, t));
693
- L = null, z = null;
694
- }, Te = (e, t) => {
695
- let n = M.get(e);
791
+ customLocaleKeys: j
792
+ }), I = Fe([...M, ...j]), L = /* @__PURE__ */ new Map(), R = /* @__PURE__ */ new Map(), z = /* @__PURE__ */ new Set(), Oe = () => {
793
+ L.clear(), R.clear(), z = xe(m);
794
+ for (let e of be(m)) L.set(e.prefix, e), R.set(e.prefix, (t) => ve(e.prefix, t));
795
+ B = null, V = null;
796
+ }, je = (e, t) => {
797
+ let n = L.get(e);
696
798
  if (!n) return !1;
697
- let r = N.get(e);
799
+ let r = R.get(e);
698
800
  return A(n, t) !== null && (!r || r(t));
699
- }, L = null, z = null, B = null, Pe = () => z || (z = (async () => {
801
+ }, B = null, V = null, U = null, Ve = () => V || (V = (async () => {
700
802
  let e = r.iconsScanner ?? {}, t = JSON.stringify({
701
- version: Ce(I),
702
- sets: Array.from(M.entries()).map(([e, t]) => [e, t.lastModified ?? 0]).sort(([e], [t]) => e < t ? -1 : +(e > t)),
803
+ version: De(F),
804
+ sets: Array.from(L.entries()).map(([e, t]) => [e, t.lastModified ?? 0]).sort(([e], [t]) => e < t ? -1 : +(e > t)),
703
805
  include: e.include ?? [],
704
806
  exclude: e.exclude ?? [],
705
807
  maxFileSize: e.maxFileSize ?? null
706
808
  }), n = new p({
707
- root: g,
708
- outDir: x ?? D(g, "dist"),
809
+ root: m,
810
+ outDir: T ?? D(m, "dist"),
709
811
  scanner: e,
710
- prefixes: Array.from(M.keys()),
711
- resolves: Te,
712
- cacheFile: ee(g),
812
+ prefixes: Array.from(L.keys()),
813
+ resolves: je,
814
+ cacheFile: re(m),
713
815
  cacheKey: t
714
816
  }), i = await n.scan();
715
- if (i.cold && T.info(`[bitboss-ui] icon scan: ${i.files} files in ${i.elapsed}ms${i.workers ? ` on ${i.workers} threads` : ""} (${n.icons.size} provider icons referenced)`), L = n, B) for (let e of n.includeDirs) B.add(e);
817
+ if (i.cold && k.info(`[bitboss-ui] icon scan: ${i.files} files in ${i.elapsed}ms${i.workers ? ` on ${i.workers} threads` : ""} (${n.icons.size} provider icons referenced)`), B = n, U) for (let e of n.includeDirs) U.add(e);
716
818
  return n;
717
- })(), z);
819
+ })(), V);
718
820
  return {
719
821
  name: "bitboss-ui:icon-registry",
720
822
  configEnvironment(e, t) {
721
823
  if (e !== "client") return;
722
- let n = t.optimizeDeps?.include ?? [], r = te.filter((e) => !n.includes(e));
824
+ let n = t.optimizeDeps?.include ?? [], r = C.filter((e) => !n.includes(e));
723
825
  if (r.length) return { optimizeDeps: { include: r } };
724
826
  },
725
827
  config(e) {
726
828
  let t = e.optimizeDeps?.include ?? [], n = e.optimizeDeps?.exclude ?? [], r = e.root ?? process.cwd();
727
- v = Le(r, "vee-validate");
728
- let i = V(r) ? [...H, Be] : H, a = j.found.map(({ pack: e }) => `dayjs/locale/${e}`);
729
- te = [...i, ...a];
829
+ S = Je(r, "vee-validate");
830
+ let i = Ye(r) ? [...Ze, $e] : Ze, a = I.found.map(({ pack: e }) => `dayjs/locale/${e}`);
831
+ C = [...i, ...a];
730
832
  let o = (e.build?.assetsDir ?? "assets").replace(/\/+$/, ""), s = e.build?.rollupOptions?.output, c = (Array.isArray(s) ? s[0] : s)?.chunkFileNames, l = e.ssr;
731
833
  l && l.noExternal === !1 && delete l.noExternal;
732
- let u = He(l?.noExternal);
834
+ let u = tt(l?.noExternal);
733
835
  return {
734
- ...v ? {} : { resolve: { alias: [{
836
+ ...S ? {} : { resolve: { alias: [{
735
837
  find: /^vee-validate$/,
736
- replacement: $e
838
+ replacement: ft
737
839
  }] } },
738
840
  optimizeDeps: {
739
841
  include: [...i, ...a].filter((e) => !t.includes(e)),
740
- exclude: ze.filter((e) => !n.includes(e))
842
+ exclude: Qe.filter((e) => !n.includes(e))
741
843
  },
742
844
  ...u.length ? { ssr: { noExternal: u } } : {},
743
845
  build: { rollupOptions: { output: { chunkFileNames(e) {
744
- if (e.facadeModuleId?.startsWith(Mt)) {
846
+ if (e.facadeModuleId?.startsWith(Kt)) {
745
847
  let t = e.facadeModuleId.slice(17);
746
848
  return `${o}/icons/${t.replace("/", "_")}-[hash].js`;
747
849
  }
@@ -750,27 +852,27 @@ function It(n = {}) {
750
852
  };
751
853
  },
752
854
  transform(e, t) {
753
- return v || t.includes("/node_modules/") || t.startsWith("\0") || !/\.(vue|[cm]?[jt]sx?)(\?|$)/.test(t) || it(e) && this.error(`${W}\n used in ${le(g || process.cwd(), t.split("?")[0])}`), null;
855
+ return S || t.includes("/node_modules/") || t.startsWith("\0") || !/\.(vue|[cm]?[jt]sx?)(\?|$)/.test(t) || _t(e) && this.error(`${G}\n used in ${fe(m || process.cwd(), t.split("?")[0])}`), null;
754
856
  },
755
857
  renderChunk(e) {
756
- return !v && e.includes(tt) && this.error(W), null;
858
+ return !S && e.includes(mt) && this.error(G), null;
757
859
  },
758
860
  configResolved(e) {
759
- g = e.root, _ = i ?? g, b = e.command === "build", x = D(g, e.build?.outDir ?? "dist"), S = e.build?.rollupOptions?.input, e.logger && (T = e.logger);
861
+ m = e.root, b = i ?? m, w = e.command === "build", T = D(m, e.build?.outDir ?? "dist"), E = e.build?.rollupOptions?.input, e.logger && (k = e.logger);
760
862
  },
761
863
  resolveId(e) {
762
- if (e === Ue) return We;
763
- if (e === Ge) return Ke;
764
- if (e === qe) return Je;
765
- if (e === Ye) return Xe;
766
- if (e === Ze) return Qe;
767
- if (e === at) return ot;
768
- if (e === $e) return et;
769
- if (e === st) return ct;
770
- if (e.startsWith(jt)) return "\0" + e;
864
+ if (e === nt) return rt;
865
+ if (e === it) return at;
866
+ if (e === ot) return st;
867
+ if (e === ct) return lt;
868
+ if (e === ut) return dt;
869
+ if (e === vt) return yt;
870
+ if (e === ft) return pt;
871
+ if (e === bt) return xt;
872
+ if (e.startsWith(Gt)) return "\0" + e;
771
873
  },
772
874
  async load(e) {
773
- if (e === Ke) {
875
+ if (e === at) {
774
876
  let { iconDir: e, enabledLocales: t, passthroughDeduper: n, ptScopes: i, ...a } = r, o = {
775
877
  inertiaLinkName: "Link",
776
878
  nuxtLinkName: "NuxtLink",
@@ -798,10 +900,11 @@ function It(n = {}) {
798
900
  confirm: { ...a.confirm },
799
901
  pt: a.pt ?? {},
800
902
  variantIcons: {
801
- toast: oe(r.toastVariants),
802
- alert: oe(r.alertVariants)
903
+ toast: le(r.toastVariants),
904
+ alert: le(r.alertVariants)
803
905
  },
804
- defaultLocale: de,
906
+ variantNames: Object.fromEntries(Object.keys(v).map((e) => [v[e], ie(g[e], r[v[e]])])),
907
+ defaultLocale: ye,
805
908
  iconDefaultSizes: {
806
909
  xs: 12,
807
910
  sm: 16,
@@ -832,60 +935,65 @@ function It(n = {}) {
832
935
  };
833
936
  return `import { reactive } from 'vue';\nexport const config = reactive(${JSON.stringify(o)});\nexport const ptScopes = ${JSON.stringify(i ?? {})};\n`;
834
937
  }
835
- if (e === Xe) return Oe(k);
836
- if (e === Je) return Ae(j.found);
837
- if (e === Qe) return `export default ${JSON.stringify(lt())};`;
838
- if (e === et) return rt();
839
- if (e === ot) return Re(V(g));
840
- if (e === ct) return je(r.passthroughDeduper, g);
841
- if (e.startsWith(Mt)) {
842
- let t = e.slice(17), n = t.indexOf("/"), r = t.slice(0, n), i = t.slice(n + 1), a = M.get(r);
938
+ if (e === lt) return Pe(M);
939
+ if (e === st) return Ie(I.found);
940
+ if (e === dt) return `export default ${JSON.stringify(St())};`;
941
+ if (e === pt) return gt();
942
+ if (e === yt) return Xe(Ye(m));
943
+ if (e === xt) {
944
+ if (r.passthroughDeduper !== void 0) return Le(r.passthroughDeduper, m);
945
+ h ??= Be(m);
946
+ let e = H(h.values());
947
+ return _ = JSON.stringify(e), Le(void 0, m, void 0, e);
948
+ }
949
+ if (e.startsWith(Kt)) {
950
+ let t = e.slice(17), n = t.indexOf("/"), r = t.slice(0, n), i = t.slice(n + 1), a = L.get(r);
843
951
  a || this.error(`[bitboss-ui] cannot load "${r}:${i}" — @iconify-json/${r} is not installed.\n Run: npm install -D @iconify-json/${r}`);
844
952
  let o = A(a, i);
845
- return o || this.error(`[bitboss-ui] icon "${i}" does not exist in the ${r} icon set`), `export default ${JSON.stringify(me(o))};`;
953
+ return o || this.error(`[bitboss-ui] icon "${i}" does not exist in the ${r} icon set`), `export default ${JSON.stringify(_e(o))};`;
846
954
  }
847
- if (e !== We) return;
848
- let t = D(g, r.iconDir), n = "/" + le(g, t).replace(/\\/g, "/") + "/**/*.svg", i = await Pe(), a = be(r.iconWhitelist ?? [], M, N, P);
955
+ if (e !== rt) return;
956
+ let t = D(m, r.iconDir), n = "/" + fe(m, t).replace(/\\/g, "/") + "/**/*.svg", i = await Ve(), a = we(r.iconWhitelist ?? [], L, R, z);
849
957
  a.errors.length > 0 && this.error(a.errors.length === 1 ? a.errors[0] : `[bitboss-ui] iconWhitelist has ${a.errors.length} entries that do not resolve:\n - ${a.errors.map((e) => e.replace(/^\[bitboss-ui\] /, "")).join("\n - ")}`);
850
958
  let o = /* @__PURE__ */ new Set([...i.icons, ...a.icons]), s = Array.from(o).sort().flatMap((e) => {
851
- let t = pe(e);
852
- return t ? [`\t${JSON.stringify(e)}: () => import(${JSON.stringify(jt + t.prefix + "/" + t.name)}).then(m => m.default),`] : [];
853
- }).join("\n"), c = b ? null : Object.fromEntries(Array.from(M.entries()).map(([e, t]) => [e, ye(t, N.get(e))]));
854
- return `const _local = import.meta.glob(${JSON.stringify(n)}, { query: '?raw', import: 'default' });\nconst _localIcons = Object.fromEntries(Object.entries(_local).map(([k, l]) => { const f = k.split(/[/\\\\]+/).pop(); return [\`local:\${f.replace(/\\.svg$/i, '')}\`, l]; }));\nconst _icons = {\n` + (s ? s + "\n" : "") + `\t..._localIcons,\n};\nconst _ip = new Set(${JSON.stringify(Array.from(P))});\nconst _loaded = new Set(${JSON.stringify(Array.from(M.keys()))});\nconst _all = ${c ? JSON.stringify(c) : "null"};\nconst _diag = ${ve};\nconst _fail = (msg) => () => { const _e = new Error(); import.meta.hot?.send('bitboss-ui:icon-missing', { msg, stack: _e.stack }); return Promise.reject(new Error(msg)); };\nexport const icons = new Proxy(_icons, {\n\tget(t, k) {\n\t\tif (k in t || typeof k !== 'string' || !k.includes(':')) return t[k];\n\t\tconst _msg = _diag(k, _loaded, (p) => Object.keys(t).filter((x) => x.startsWith(p + ':')).map((x) => x.slice(p.length + 1)), (p) => (_all && _all[p]) || null, _ip);\n\t\treturn _msg ? _fail(_msg) : undefined;\n\t},\n});\n`;
959
+ let t = ge(e);
960
+ return t ? [`\t${JSON.stringify(e)}: () => import(${JSON.stringify(Gt + t.prefix + "/" + t.name)}).then(m => m.default),`] : [];
961
+ }).join("\n"), c = w ? null : Object.fromEntries(Array.from(L.entries()).map(([e, t]) => [e, Ce(t, R.get(e))]));
962
+ return `const _local = import.meta.glob(${JSON.stringify(n)}, { query: '?raw', import: 'default' });\nconst _localIcons = Object.fromEntries(Object.entries(_local).map(([k, l]) => { const f = k.split(/[/\\\\]+/).pop(); return [\`local:\${f.replace(/\\.svg$/i, '')}\`, l]; }));\nconst _icons = {\n` + (s ? s + "\n" : "") + `\t..._localIcons,\n};\nconst _ip = new Set(${JSON.stringify(Array.from(z))});\nconst _loaded = new Set(${JSON.stringify(Array.from(L.keys()))});\nconst _all = ${c ? JSON.stringify(c) : "null"};\nconst _diag = ${Se};\nconst _fail = (msg) => () => { const _e = new Error(); import.meta.hot?.send('bitboss-ui:icon-missing', { msg, stack: _e.stack }); return Promise.reject(new Error(msg)); };\nexport const icons = new Proxy(_icons, {\n\tget(t, k) {\n\t\tif (k in t || typeof k !== 'string' || !k.includes(':')) return t[k];\n\t\tconst _msg = _diag(k, _loaded, (p) => Object.keys(t).filter((x) => x.startsWith(p + ':')).map((x) => x.slice(p.length + 1)), (p) => (_all && _all[p]) || null, _ip);\n\t\treturn _msg ? _fail(_msg) : undefined;\n\t},\n});\n`;
855
963
  },
856
964
  buildStart() {
857
- we();
858
- let e = D(g, r.iconDir), t = yt(r.iconDir, e);
859
- if (t && this.warn(t), !b) {
860
- let e = xe(_, Ce(I));
965
+ Oe();
966
+ let e = D(m, r.iconDir), t = Mt(r.iconDir, e);
967
+ if (t && this.warn(t), !w) {
968
+ let e = Te(b, De(F));
861
969
  e && this.warn(e);
862
970
  }
863
- !b && r.vscodeSettings !== !1 && (w(e, _, (e) => this.warn(e)), At(_, {
971
+ !w && r.vscodeSettings !== !1 && (O(e, b, (e) => this.warn(e)), Wt(b, {
864
972
  info: (e) => this.info(e),
865
973
  warn: (e) => this.warn(e)
866
974
  }));
867
- for (let e of ue) this.warn(e);
868
- for (let e of fe) this.warn(e);
869
- for (let e of O) this.warn(e);
870
- for (let e of j.missing) this.warn(`[bitboss-ui] locale '${e}' has no dayjs counterpart (dayjs/locale/${e}) — its calendars fall back to English. Dayjs locale names: https://github.com/iamkun/dayjs/tree/dev/src/locale`);
871
- r.locale && !u(r.locale) && !E.includes(r.locale) && this.warn(`[bitboss-ui] \`locale: '${r.locale}'\` is not a built-in locale${Ee(r.locale)} — the library ships ${o.length} locales. Strings fall back to the default locale.`);
872
- let n = ae({
873
- root: g,
874
- input: S,
975
+ for (let e of me) this.warn(e);
976
+ for (let e of N) this.warn(e);
977
+ for (let e of he) this.warn(e);
978
+ for (let e of I.missing) this.warn(`[bitboss-ui] locale '${e}' has no dayjs counterpart (dayjs/locale/${e}) — its calendars fall back to English. Dayjs locale names: https://github.com/iamkun/dayjs/tree/dev/src/locale`);
979
+ r.locale && !u(r.locale) && !j.includes(r.locale) && this.warn(`[bitboss-ui] \`locale: '${r.locale}'\` is not a built-in locale${Me(r.locale)} — the library ships ${o.length} locales. Strings fall back to the default locale.`);
980
+ let n = ce({
981
+ root: m,
982
+ input: E,
875
983
  dts: r.dts
876
984
  });
877
985
  if (n) {
878
- let e = se(n, {
879
- ...ie(r),
880
- LocaleRegistry: [...k.flatMap((e) => [e, ...l(e)]), ...E],
986
+ let e = ue(n, {
987
+ ...se(r),
988
+ LocaleRegistry: [...M.flatMap((e) => [e, ...l(e)]), ...j],
881
989
  PtScopeRegistry: Object.keys(r.ptScopes ?? {}),
882
- EmptyStringControlRegistry: ne(r.formControls)
883
- }), t = Se(n);
884
- e === "changed" ? this.info(`[bitboss-ui] Wrote ${t} — commit this file so CI and teammates get matching types.`) : typeof e == "object" && !F.has("write") && (F.add("write"), this.warn(`[bitboss-ui] could not write ${t} (${e.error}). The committed copy still types the app; regenerate it where the project is writable.`)), !F.has("program") && y(n) && (F.add("program"), re(g, n) === !1 && this.warn(`[bitboss-ui] ${t} is outside your TypeScript project — custom names will look like typos. Set \`dts\` to a path inside your app sources (for example resources/js/).`));
990
+ EmptyStringControlRegistry: ae(r.formControls)
991
+ }), t = Ee(n);
992
+ e === "changed" ? this.info(`[bitboss-ui] Wrote ${t} — commit this file so CI and teammates get matching types.`) : typeof e == "object" && !P.has("write") && (P.add("write"), this.warn(`[bitboss-ui] could not write ${t} (${e.error}). The committed copy still types the app; regenerate it where the project is writable.`)), !P.has("program") && y(n) && (P.add("program"), oe(m, n) === !1 && this.warn(`[bitboss-ui] ${t} is outside your TypeScript project — custom names will look like typos. Set \`dts\` to a path inside your app sources (for example resources/js/).`));
885
993
  }
886
994
  },
887
995
  configureServer(e) {
888
- r.mcp && Nt(i ?? e.config.root, e.config.logger);
996
+ r.mcp && qt(i ?? e.config.root, e.config.logger);
889
997
  let t = D(e.config.root, r.iconDir), n = (e) => e.startsWith(t) && e.endsWith(".svg");
890
998
  e.ws.on("bitboss-ui:icon-missing", (t) => {
891
999
  if (process.env.VITEST || e.config.mode === "test") return;
@@ -899,40 +1007,58 @@ function It(n = {}) {
899
1007
  }
900
1008
  });
901
1009
  });
902
- let a = async () => {
903
- let t = e.moduleGraph.getModuleById(We);
1010
+ let a = async (t, n) => {
1011
+ if (r.passthroughDeduper !== void 0 || !h || !ze(m, t)) return;
1012
+ let i = n ? {} : Re((() => {
1013
+ try {
1014
+ return x(t, "utf-8");
1015
+ } catch {
1016
+ return "";
1017
+ }
1018
+ })());
1019
+ if (Object.keys(i).length) h.set(t, i);
1020
+ else if (!h.delete(t)) return;
1021
+ let a = JSON.stringify(H(h.values()));
1022
+ if (a === _) return;
1023
+ _ = a;
1024
+ let o = e.moduleGraph.getModuleById(xt);
1025
+ o && await e.reloadModule(o);
1026
+ };
1027
+ e.watcher.on("change", (e) => void a(e, !1)), e.watcher.on("add", (e) => void a(e, !1)), e.watcher.on("unlink", (e) => void a(e, !0));
1028
+ let o = async () => {
1029
+ let t = e.moduleGraph.getModuleById(rt);
904
1030
  t && await e.reloadModule(t);
905
- }, o, s = () => {
906
- clearTimeout(o), o = setTimeout(() => void L?.persist(), 500);
907
- }, c = Promise.resolve(), l = (e, t) => {
908
- c = c.then(async () => {
909
- if (!L) return;
1031
+ }, s, c = () => {
1032
+ clearTimeout(s), s = setTimeout(() => void B?.persist(), 500);
1033
+ }, l = Promise.resolve(), u = (e, t) => {
1034
+ l = l.then(async () => {
1035
+ if (!B) return;
910
1036
  let n;
911
- if (ce(t) === ".gitignore") {
912
- let e = L.icons;
913
- L.resetGitignores(), await L.scan();
914
- let t = L.icons;
1037
+ if (de(t) === ".gitignore") {
1038
+ let e = B.icons;
1039
+ B.resetGitignores(), await B.scan();
1040
+ let t = B.icons;
915
1041
  n = e.size !== t.size || [...e].some((e) => !t.has(e));
916
- } else n = e === "unlink" ? L.removeFile(t) : await L.updateFile(t);
917
- s(), n && await a();
1042
+ } else n = e === "unlink" ? B.removeFile(t) : await B.updateFile(t);
1043
+ c(), n && await o();
918
1044
  }).catch((e) => {
919
- T.warn(`[bitboss-ui] icon scan: could not update ${t} (${e instanceof Error ? e.message : String(e)})`);
1045
+ k.warn(`[bitboss-ui] icon scan: could not update ${t} (${e instanceof Error ? e.message : String(e)})`);
920
1046
  });
921
1047
  };
922
- if (B = e.watcher, L) for (let e of L.includeDirs) B.add(e);
1048
+ if (U = e.watcher, B) for (let e of B.includeDirs) U.add(e);
923
1049
  for (let a of [
924
1050
  "add",
925
1051
  "change",
926
1052
  "unlink"
927
1053
  ]) e.watcher.on(a, (o) => {
928
1054
  if (n(o)) {
929
- r.vscodeSettings !== !1 && w(t, i ?? e.config.root, (e) => T.warn(e));
1055
+ r.vscodeSettings !== !1 && O(t, i ?? e.config.root, (e) => k.warn(e));
930
1056
  return;
931
1057
  }
932
- l(a, o);
1058
+ u(a, o);
933
1059
  });
934
1060
  }
935
1061
  };
936
1062
  }
937
1063
  //#endregion
938
- export { n as BB_LAYERS, o as BUILTIN_LOCALE_KEYS, f as DEFAULT_MAX_FILE_SIZE, te as DEFAULT_VARIANT_REGISTRIES, p as IconScanner, G as LOCAL_ICONS_JSON_PATH, ze as REQUIRED_OPTIMIZE_DEPS_EXCLUDE, H as REQUIRED_OPTIMIZE_DEPS_INCLUDE, U as SSR_NO_EXTERNAL, pt as TAILWIND_CLASS_ATTRIBUTES_DEFAULTS, X as TAILWIND_PT_CLASS_ATTRIBUTE, Z as TAILWIND_PT_CLASS_REGEX, r as TAILWIND_V3_LAYERS, i as TAILWIND_V4_LAYERS, W as VEE_MISSING_MESSAGE, It as bitbossUi, _t as defaultVscodeSettings, Pt as definePt, P as diagnoseMissingIcon, be as expandIconWhitelist, m as extractIconCandidates, Ae as generateDayjsLocalesModule, Re as generateLinkModule, Oe as generateLocalesModule, je as generatePassthroughDeduperModule, rt as generateVeeMissingModule, V as hasInertia, _ as iconLiteralRegExp, ee as iconScanCacheFile, yt as localIconDirWarning, ke as resolveDayjsLocales, De as resolveEnabledLocales, He as resolveSsrNoExternal, bt as stripJsonComments, At as updateVscodeSettings, xe as upgradeHint, it as usesBbForm, Ne as validateAutoDisableWritingThreshold, Me as validatePassthroughDeduper, R as validatePtGlobalMapNames, vt as writeLocalIconifyCollection };
1064
+ export { n as BB_LAYERS, o as BUILTIN_LOCALE_KEYS, f as DEFAULT_MAX_FILE_SIZE, g as DEFAULT_VARIANT_REGISTRIES, p as IconScanner, K as LOCAL_ICONS_JSON_PATH, Qe as REQUIRED_OPTIMIZE_DEPS_EXCLUDE, Ze as REQUIRED_OPTIMIZE_DEPS_INCLUDE, W as SSR_NO_EXTERNAL, Et as TAILWIND_CLASS_ATTRIBUTES_DEFAULTS, Z as TAILWIND_PT_CLASS_ATTRIBUTE, Q as TAILWIND_PT_CLASS_REGEX, r as TAILWIND_V3_LAYERS, i as TAILWIND_V4_LAYERS, G as VEE_MISSING_MESSAGE, Xt as bitbossUi, Ve as collectThemeNames, At as defaultVscodeSettings, Jt as definePt, N as diagnoseMissingIcon, we as expandIconWhitelist, ee as extractIconCandidates, Ie as generateDayjsLocalesModule, Xe as generateLinkModule, Pe as generateLocalesModule, Le as generatePassthroughDeduperModule, gt as generateVeeMissingModule, Ye as hasInertia, m as iconLiteralRegExp, re as iconScanCacheFile, ze as isAppThemeCss, Mt as localIconDirWarning, H as mergeThemeNames, Fe as resolveDayjsLocales, Ne as resolveEnabledLocales, tt as resolveSsrNoExternal, Be as scanThemeFiles, Nt as stripJsonComments, Re as themeNamesInCss, Wt as updateVscodeSettings, Te as upgradeHint, _t as usesBbForm, Ue as validateAutoDisableWritingThreshold, He as validatePassthroughDeduper, Ae as validatePtGlobalMapNames, ke as validateVariantNames, jt as writeLocalIconifyCollection };