bitboss-ui 3.0.0-beta.21 → 3.0.0-beta.23

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 (252) hide show
  1. package/README.md +55 -3
  2. package/bin/bitboss-ui-mcp.mjs +419 -9
  3. package/bin/bitboss-ui.mjs +293 -22
  4. package/dist/ai/BbAccordion.md +21 -23
  5. package/dist/ai/BbAlert.md +6 -12
  6. package/dist/ai/BbAvatar.md +60 -24
  7. package/dist/ai/BbBadge.md +12 -20
  8. package/dist/ai/BbBaseButton.md +14 -16
  9. package/dist/ai/BbBaseCheckboxIcon.md +6 -10
  10. package/dist/ai/BbBaseColorInput.md +1 -0
  11. package/dist/ai/BbBaseDatePickerInput.md +1 -0
  12. package/dist/ai/BbBaseNumberInput.md +1 -0
  13. package/dist/ai/BbBaseRadioIcon.md +6 -10
  14. package/dist/ai/BbBaseSelect.md +1 -0
  15. package/dist/ai/BbBaseSwitchIcon.md +5 -9
  16. package/dist/ai/BbBaseTag.md +1 -0
  17. package/dist/ai/BbBaseTextInput.md +2 -1
  18. package/dist/ai/BbBaseTextarea.md +1 -0
  19. package/dist/ai/BbBaseTimePickerInput.md +1 -0
  20. package/dist/ai/BbBreadcrumbs.md +23 -34
  21. package/dist/ai/BbButton.md +35 -47
  22. package/dist/ai/BbCheckbox.md +21 -37
  23. package/dist/ai/BbCheckboxGroup.md +13 -13
  24. package/dist/ai/BbCollapsible.md +14 -26
  25. package/dist/ai/BbColorInput.md +27 -23
  26. package/dist/ai/BbColorPalette.md +23 -35
  27. package/dist/ai/BbConfirm.md +17 -32
  28. package/dist/ai/BbDatePickerInput.md +29 -21
  29. package/dist/ai/BbDialog.md +159 -62
  30. package/dist/ai/BbDropdown.md +21 -25
  31. package/dist/ai/BbDropdownButton.md +13 -30
  32. package/dist/ai/BbDropzone.md +9 -11
  33. package/dist/ai/BbIcon.md +44 -33
  34. package/dist/ai/BbIndicator.md +2 -2
  35. package/dist/ai/BbNumberInput.md +32 -20
  36. package/dist/ai/BbOffCanvas.md +42 -42
  37. package/dist/ai/BbPagination.md +21 -23
  38. package/dist/ai/BbPopover.md +15 -17
  39. package/dist/ai/BbProgress.md +40 -51
  40. package/dist/ai/BbRadio.md +9 -9
  41. package/dist/ai/BbRadioGroup.md +7 -11
  42. package/dist/ai/BbRating.md +8 -12
  43. package/dist/ai/BbSelect.md +46 -36
  44. package/dist/ai/BbSelectPopover.md +19 -31
  45. package/dist/ai/BbSlider.md +15 -19
  46. package/dist/ai/BbSmoothHeight.md +16 -31
  47. package/dist/ai/BbSpinner.md +118 -74
  48. package/dist/ai/BbSwitch.md +25 -18
  49. package/dist/ai/BbSwitchGroup.md +9 -14
  50. package/dist/ai/BbTable.md +102 -55
  51. package/dist/ai/BbTabs.md +59 -82
  52. package/dist/ai/BbTag.md +26 -23
  53. package/dist/ai/BbTextInput.md +63 -27
  54. package/dist/ai/BbTextarea.md +42 -34
  55. package/dist/ai/BbTimePickerInput.md +14 -0
  56. package/dist/ai/BbToast.md +14 -34
  57. package/dist/ai/BbTooltip.md +22 -20
  58. package/dist/ai/BbTree.md +46 -72
  59. package/dist/ai/CommonInputWrapper.md +1 -0
  60. package/dist/ai/changelog.json +170 -62
  61. package/dist/ai/components.json +1678 -11
  62. package/dist/ai/composables/useConfirm.md +5 -2
  63. package/dist/ai/composables/useToast.md +4 -2
  64. package/dist/ai/guides/agent-contract.md +7 -4
  65. package/dist/ai/guides/ai-router.md +37 -22
  66. package/dist/ai/guides/component-picker.md +23 -18
  67. package/dist/ai/guides/design-language.md +151 -21
  68. package/dist/ai/guides/design-tokens.md +29 -4
  69. package/dist/ai/guides/icons-policy.md +46 -21
  70. package/dist/ai/guides/installation-and-plugin-setup.md +286 -17
  71. package/dist/ai/guides/migration/components/bb-rating.md +26 -1
  72. package/dist/ai/guides/migration/components/bb-tooltip.md +18 -0
  73. package/dist/ai/guides/migration/v2-to-v3.md +50 -23
  74. package/dist/ai/index.md +1 -1
  75. package/dist/ai/recipes/inertia/approvals-inbox.md +3 -3
  76. package/dist/ai/recipes/inertia/inline-edit-workspace.md +2 -2
  77. package/dist/ai/recipes/inertia/onboarding.md +2 -2
  78. package/dist/ai/recipes/inertia/ownership-atlas.md +6 -6
  79. package/dist/ai/recipes/inertia/record-form.md +5 -5
  80. package/dist/ai/recipes/inertia/records-workspace.md +4 -4
  81. package/dist/ai/recipes/inertia/upload-center.md +6 -6
  82. package/dist/ai/recipes/inertia/wizard-form.md +5 -5
  83. package/dist/ai/recipes/nuxt/approvals-inbox.md +3 -3
  84. package/dist/ai/recipes/nuxt/inline-edit-workspace.md +2 -2
  85. package/dist/ai/recipes/nuxt/onboarding.md +2 -2
  86. package/dist/ai/recipes/nuxt/record-form.md +5 -5
  87. package/dist/ai/recipes/nuxt/records-workspace.md +4 -4
  88. package/dist/ai/recipes/nuxt/upload-center.md +6 -6
  89. package/dist/ai/recipes/nuxt/wizard-form.md +5 -5
  90. package/dist/ai/recipes/vue/approvals-inbox.md +3 -3
  91. package/dist/ai/recipes/vue/inline-edit-workspace.md +2 -2
  92. package/dist/ai/recipes/vue/onboarding.md +2 -2
  93. package/dist/ai/recipes/vue/record-form.md +10 -10
  94. package/dist/ai/recipes/vue/records-workspace.md +4 -4
  95. package/dist/ai/recipes/vue/upload-center.md +6 -6
  96. package/dist/ai/recipes/vue/wizard-form.md +5 -5
  97. package/dist/ai/source/BbBadge.md +1 -1
  98. package/dist/ai/source/BbBaseCheckbox.md +1 -1
  99. package/dist/ai/source/BbBaseColorInput.md +7 -0
  100. package/dist/ai/source/BbBaseDatePicker.md +5 -5
  101. package/dist/ai/source/BbBaseDatePickerInput.md +9 -2
  102. package/dist/ai/source/BbBaseNumberInput.md +7 -0
  103. package/dist/ai/source/BbBaseRadio.md +1 -1
  104. package/dist/ai/source/BbBaseRating.md +5 -5
  105. package/dist/ai/source/BbBaseSelect.md +8 -1
  106. package/dist/ai/source/BbBaseSlider.md +5 -5
  107. package/dist/ai/source/BbBaseSwitch.md +1 -1
  108. package/dist/ai/source/BbBaseTag.md +7 -0
  109. package/dist/ai/source/BbBaseTextInput.md +7 -0
  110. package/dist/ai/source/BbBaseTextarea.md +7 -0
  111. package/dist/ai/source/BbBaseTimePickerInput.md +8 -1
  112. package/dist/ai/source/BbBreadcrumbs.md +20 -1
  113. package/dist/ai/source/BbButton.md +2 -2
  114. package/dist/ai/source/BbColorInput.md +14 -0
  115. package/dist/ai/source/BbDatePickerInput.md +14 -0
  116. package/dist/ai/source/BbDialog.md +39 -8
  117. package/dist/ai/source/BbDropdown.md +1 -1
  118. package/dist/ai/source/BbDropzone.md +5 -5
  119. package/dist/ai/source/BbIcon.md +23 -10
  120. package/dist/ai/source/BbNumberInput.md +14 -0
  121. package/dist/ai/source/BbOffCanvas.md +50 -28
  122. package/dist/ai/source/BbPagination.md +2 -2
  123. package/dist/ai/source/BbPopover.md +12 -1
  124. package/dist/ai/source/BbSelect.md +14 -0
  125. package/dist/ai/source/BbSelectPopover.md +45 -7
  126. package/dist/ai/source/BbSpinner.md +2 -2
  127. package/dist/ai/source/BbTable.md +11 -11
  128. package/dist/ai/source/BbTag.md +14 -0
  129. package/dist/ai/source/BbTextInput.md +14 -0
  130. package/dist/ai/source/BbTextarea.md +14 -0
  131. package/dist/ai/source/BbTimePickerInput.md +14 -0
  132. package/dist/ai/source/BbTooltip.md +57 -10
  133. package/dist/ai/source/ChipsBox.md +1 -1
  134. package/dist/ai/source/CommaBox.md +1 -1
  135. package/dist/ai/source/CommonInputWrapper.md +128 -33
  136. package/dist/ai/source/GuidesComponent.md +14 -7
  137. package/dist/ai/source/OptionsContainer.md +1 -1
  138. package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +1 -1
  139. package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +1 -1
  140. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue_vue_type_script_setup_true_lang.js +1 -1
  141. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue_vue_type_script_setup_true_lang.js +4 -1
  142. package/dist/components/BbBaseColorInput/types.d.ts +5 -0
  143. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +4 -4
  144. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +1 -1
  145. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +5 -2
  146. package/dist/components/BbBaseDatePickerInput/types.d.ts +5 -0
  147. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.d.ts +1 -1
  148. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue_vue_type_script_setup_true_lang.js +4 -1
  149. package/dist/components/BbBaseNumberInput/types.d.ts +5 -0
  150. package/dist/components/BbBaseRadio/BbBaseRadio.vue_vue_type_script_setup_true_lang.js +1 -1
  151. package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +3 -3
  152. package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +4 -1
  153. package/dist/components/BbBaseSelect/types.d.ts +5 -0
  154. package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +3 -3
  155. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue_vue_type_script_setup_true_lang.js +1 -1
  156. package/dist/components/BbBaseTag/BbBaseTag.vue_vue_type_script_setup_true_lang.js +4 -1
  157. package/dist/components/BbBaseTag/types.d.ts +5 -0
  158. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue_vue_type_script_setup_true_lang.js +4 -1
  159. package/dist/components/BbBaseTextInput/types.d.ts +5 -0
  160. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue_vue_type_script_setup_true_lang.js +4 -1
  161. package/dist/components/BbBaseTextarea/types.d.ts +5 -0
  162. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +5 -2
  163. package/dist/components/BbBaseTimePickerInput/types.d.ts +5 -0
  164. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +71 -71
  165. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +2 -2
  166. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +5 -2
  167. package/dist/components/BbColorInput/types.d.ts +12 -0
  168. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +4 -2
  169. package/dist/components/BbDatePickerInput/types.d.ts +12 -0
  170. package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +102 -97
  171. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +1 -1
  172. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +58 -58
  173. package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +2 -2
  174. package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +33 -35
  175. package/dist/components/BbIcon/iconCache.d.ts +30 -0
  176. package/dist/components/BbIcon/iconCache.js +21 -3
  177. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +5 -2
  178. package/dist/components/BbNumberInput/types.d.ts +12 -0
  179. package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +57 -56
  180. package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +2 -2
  181. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +138 -138
  182. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +4 -2
  183. package/dist/components/BbSelect/types.d.ts +12 -0
  184. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +43 -43
  185. package/dist/components/BbSpinner/BbSpinner.vue_vue_type_script_setup_true_lang.js +1 -1
  186. package/dist/components/BbSpinner/types.d.ts +1 -1
  187. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +8 -8
  188. package/dist/components/BbTable/BbTableDataRow.js +2 -2
  189. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +5 -2
  190. package/dist/components/BbTag/types.d.ts +12 -0
  191. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +5 -2
  192. package/dist/components/BbTextInput/types.d.ts +12 -0
  193. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +5 -2
  194. package/dist/components/BbTextarea/types.d.ts +12 -0
  195. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +4 -2
  196. package/dist/components/BbTimePickerInput/types.d.ts +12 -0
  197. package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +62 -62
  198. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +81 -78
  199. package/dist/components/BbTooltip/types.d.ts +8 -1
  200. package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +1 -1
  201. package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +1 -1
  202. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.d.ts +1 -0
  203. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue_vue_type_script_setup_true_lang.js +4 -2
  204. package/dist/components/CommonInputWrapper/types.d.ts +10 -0
  205. package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +1 -1
  206. package/dist/composables/useConfirm.d.ts +22 -0
  207. package/dist/composables/useConfirm.js +43 -40
  208. package/dist/composables/useSafeAreaInternal.js +1 -1
  209. package/dist/composables/useToast.d.ts +16 -0
  210. package/dist/composables/useToast.js +20 -16
  211. package/dist/composables/useViewportWidth.d.ts +20 -6
  212. package/dist/composables/useViewportWidth.js +8 -7
  213. package/dist/icon-scan.d.ts +276 -0
  214. package/dist/icon-scan.js +485 -0
  215. package/dist/icons-whitelist.d.ts +5 -4
  216. package/dist/index.d.ts +2 -0
  217. package/dist/input-variants.d.ts +18 -0
  218. package/dist/llms-full.txt +2173 -1537
  219. package/dist/llms-medium.txt +504 -82
  220. package/dist/llms.txt +1 -1
  221. package/dist/nuxt-module.d.ts +1 -0
  222. package/dist/nuxt.js +10 -7
  223. package/dist/plugin.js +1 -0
  224. package/dist/runtime/nuxt-plugin.js +2 -1
  225. package/dist/styles.css +1 -1
  226. package/dist/types/Config.d.ts +18 -0
  227. package/dist/types/InputVariant.d.ts +22 -0
  228. package/dist/utils/cssLayers.d.ts +91 -0
  229. package/dist/utils/cssLayers.js +43 -0
  230. package/dist/utils/injectLibraryStyles.d.ts +3 -1
  231. package/dist/utils/injectLibraryStyles.js +24 -23
  232. package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +1 -0
  233. package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +1 -0
  234. package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +1 -0
  235. package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +1 -0
  236. package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +1 -0
  237. package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +1 -0
  238. package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +1 -0
  239. package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +1 -0
  240. package/dist/validated/index.d.ts +1 -0
  241. package/dist/vite-plugin.d.ts +89 -12
  242. package/dist/vite.js +331 -281
  243. package/llms.txt +1 -1
  244. package/package.json +7 -5
  245. package/scripts/lib/ensure-manifest.mjs +28 -5
  246. package/scripts/lib/eslint-plugin.d.ts +35 -0
  247. package/scripts/lib/eslint-plugin.mjs +299 -3
  248. package/scripts/lib/hand-roll-hints.mjs +50 -6
  249. package/scripts/lib/html-attributes.mjs +42 -0
  250. package/scripts/lib/mcp-config.mjs +38 -34
  251. package/scripts/lib/public-type-exports.mjs +246 -0
  252. package/scripts/lib/validate-bb-markup.mjs +205 -12
package/dist/vite.js CHANGED
@@ -1,167 +1,148 @@
1
- import { BUILTIN_LOCALE_KEYS as e } from "./i18n/index.js";
2
- import { existsSync as t, mkdirSync as n, readFileSync as r, readdirSync as i, writeFileSync as a } from "node:fs";
3
- import { readFile as o, stat as s } from "node:fs/promises";
4
- import { basename as c, dirname as l, join as u, relative as d, resolve as f } from "node:path";
5
- import { fileURLToPath as p } from "node:url";
6
- import { createRequire as m } from "node:module";
7
- import { convertParsedSVG as h, getIconData as g, iconToHTML as _, iconToSVG as v, parseSVGContent as y, stringToIcon as b } from "@iconify/utils";
1
+ import { BB_LAYERS as e, TAILWIND_V4_LAYERS as t, validateCssLayers as n } from "./utils/cssLayers.js";
2
+ import { DEFAULT_MAX_FILE_SIZE as r, IconScanner as i, extractIconCandidates as a, globToRegExp as o, hasGlobMagic as s, iconLiteralRegExp as c, iconScanCacheFile as l } from "./icon-scan.js";
3
+ import { BUILTIN_LOCALE_KEYS as u } from "./i18n/index.js";
4
+ import { existsSync as d, mkdirSync as f, readFileSync as p, readdirSync as m, writeFileSync as h } from "node:fs";
5
+ import { basename as g, dirname as _, join as v, relative as ee, resolve as y } from "node:path";
6
+ import { fileURLToPath as b } from "node:url";
7
+ import { createRequire as x } from "node:module";
8
+ import { convertParsedSVG as S, getIconData as C, iconToHTML as te, iconToSVG as w, parseSVGContent as T, stringToIcon as ne } from "@iconify/utils";
8
9
  //#region src/vite-plugin.ts
9
- function x(e, i) {
10
- t(e) && r(e, "utf-8") === i || (n(l(e), { recursive: !0 }), a(e, i, "utf-8"));
10
+ function E(e, t) {
11
+ d(e) && p(e, "utf-8") === t || (f(_(e), { recursive: !0 }), h(e, t, "utf-8"));
11
12
  }
12
- function ee(e) {
13
- let t = v(e, {
13
+ function re(e) {
14
+ let t = w(e, {
14
15
  width: "unset",
15
16
  height: "unset"
16
17
  });
17
- return _(t.body, t.attributes);
18
+ return te(t.body, t.attributes);
18
19
  }
19
- function S(e, t) {
20
+ function D(e, t) {
20
21
  try {
21
- let n = m(u(e, "package.json"));
22
- return JSON.parse(r(n.resolve(`${t}/icons.json`), "utf-8"));
22
+ let n = x(v(e, "package.json"));
23
+ return JSON.parse(p(n.resolve(`${t}/icons.json`), "utf-8"));
23
24
  } catch {
24
25
  return null;
25
26
  }
26
27
  }
27
- function te(e, t) {
28
+ function ie(e, t) {
28
29
  return e !== "heroicons" || !/-(?:20|16)-/.test(t);
29
30
  }
30
- function ne(e) {
31
- let n = f(e);
31
+ function O(e) {
32
+ let t = y(e);
32
33
  for (;;) {
33
- let e = u(n, "node_modules", "@iconify-json");
34
- if (t(e)) return e;
35
- let r = l(n);
36
- if (r === n) return null;
37
- n = r;
34
+ let e = v(t, "node_modules", "@iconify-json");
35
+ if (d(e)) return e;
36
+ let n = _(t);
37
+ if (n === t) return null;
38
+ t = n;
38
39
  }
39
40
  }
40
- function re(e) {
41
+ function ae(e) {
41
42
  try {
42
- let t = ne(e);
43
+ let t = O(e);
43
44
  if (!t) return [];
44
- let n = l(l(t));
45
- return i(t, { encoding: "utf-8" }).flatMap((t) => {
46
- let r = S(n, `@iconify-json/${t}`) ?? S(e, `@iconify-json/${t}`);
45
+ let n = _(_(t));
46
+ return m(t, { encoding: "utf-8" }).flatMap((t) => {
47
+ let r = D(n, `@iconify-json/${t}`) ?? D(e, `@iconify-json/${t}`);
47
48
  return r ? [r] : [];
48
49
  });
49
50
  } catch {
50
51
  return [];
51
52
  }
52
53
  }
53
- function ie(e) {
54
+ function oe(e) {
54
55
  try {
55
- let t = m(u(e, "package.json")), n = JSON.parse(r(t.resolve("@iconify/collections/collections.json"), "utf-8"));
56
+ let t = x(v(e, "package.json")), n = JSON.parse(p(t.resolve("@iconify/collections/collections.json"), "utf-8"));
56
57
  return new Set(Object.keys(n));
57
58
  } catch {
58
59
  return /* @__PURE__ */ new Set();
59
60
  }
60
61
  }
61
- var C = 3, ae = /\.(vue|tsx?|jsx?)$/, oe = /\.(test|spec|stories|story)\./, se = /* @__PURE__ */ new Set([
62
- "node_modules",
63
- "dist",
64
- "public",
65
- "coverage",
66
- "vendor",
67
- "storage"
68
- ]);
69
- function w(e) {
70
- let t = [], n = (e, r) => {
71
- let a;
72
- try {
73
- a = i(e, { withFileTypes: !0 });
74
- } catch {
75
- return;
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}", k = Function(`return ${se};`)();
63
+ function A(e, t) {
64
+ return [...Object.keys(e.icons), ...Object.keys(e.aliases ?? {})].filter((n) => (!t || t(n)) && C(e, n) !== null);
65
+ }
66
+ function j(e, t, n, r) {
67
+ let i = /* @__PURE__ */ new Set(), a = [], c = new Set(t.keys()), l = /* @__PURE__ */ new Map(), u = (e) => {
68
+ let r = l.get(e);
69
+ if (!r) {
70
+ let i = t.get(e);
71
+ r = i ? A(i, n.get(e)) : [], l.set(e, r);
72
+ }
73
+ return r;
74
+ };
75
+ for (let l of e) {
76
+ let e = l.trim(), d = e.indexOf(":"), f = d === -1 ? "" : e.slice(0, d), p = e.slice(d + 1);
77
+ if (d === -1 || !f || !p) {
78
+ a.push(`[bitboss-ui] iconWhitelist entry "${l}" is not a \`prefix:name\` icon name`);
79
+ continue;
76
80
  }
77
- for (let i of a) {
78
- let a = r ? `${r}/${i.name}` : i.name;
79
- if (!i.name.startsWith(".")) {
80
- if (i.isDirectory()) {
81
- if (se.has(i.name)) continue;
82
- n(u(e, i.name), a);
83
- continue;
84
- }
85
- ae.test(i.name) && (i.name.endsWith(".d.ts") || oe.test(i.name) || t.push(a));
81
+ if (f === "local") {
82
+ a.push(`[bitboss-ui] iconWhitelist entry "${l}" — every \`local:\` icon in iconDir is always bundled; the whitelist is for provider icons only`);
83
+ continue;
84
+ }
85
+ if (!c.has(f)) {
86
+ a.push(k(e, c, u, (e) => c.has(e) ? u(e) : null, new Set(r)) ?? `[bitboss-ui] iconWhitelist entry "${l}" does not resolve`);
87
+ continue;
88
+ }
89
+ if (s(p)) {
90
+ let t = o(p), n = u(f).filter((e) => t.test(e));
91
+ if (n.length === 0) {
92
+ a.push(`[bitboss-ui] iconWhitelist glob "${e}" matches no icon in the ${f} icon set`);
93
+ continue;
86
94
  }
95
+ for (let e of n) i.add(`${f}:${e}`);
96
+ continue;
97
+ }
98
+ let m = t.get(f), h = n.get(f);
99
+ if (C(m, p) && (!h || h(p))) {
100
+ i.add(e);
101
+ continue;
87
102
  }
103
+ a.push(k(e, c, u, u, new Set(r)) ?? `[bitboss-ui] iconWhitelist entry "${l}" does not resolve`);
104
+ }
105
+ return {
106
+ icons: [...i],
107
+ errors: a
88
108
  };
89
- return n(e, ""), t;
90
109
  }
91
- async function ce(e, t, i, c) {
92
- let d = Array.from(i.keys());
93
- if (d.length === 0) return /* @__PURE__ */ new Set();
94
- let f = d.map((e) => `${e}:[a-z0-9][a-z0-9-]*`).join("|"), p = RegExp(`['"\`](${f})['"\`]`, "g"), m;
110
+ function ce(e) {
95
111
  try {
96
- m = w(e);
112
+ return JSON.parse(p(v(e, "..", "package.json"), "utf-8")).version ?? "0";
97
113
  } catch {
98
- return /* @__PURE__ */ new Set();
114
+ return "0";
99
115
  }
100
- let h = u(e, "node_modules/.cache/bitboss-ui/icon-scan.json"), _ = {
101
- version: C,
102
- configKey: t,
103
- entries: {}
104
- };
105
- try {
106
- let e = JSON.parse(r(h, "utf-8"));
107
- e.version === C && e.configKey === t && (_ = e);
108
- } catch {}
109
- let v = await Promise.all(m.map(async (t) => {
110
- try {
111
- let { mtimeMs: n } = await s(u(e, t)), r = _.entries[t];
112
- if (r?.mtime === n) return r.icons;
113
- let a = await o(u(e, t), "utf-8"), l = [];
114
- for (let e of a.matchAll(p)) {
115
- let t = e[1], n = b(t);
116
- if (!n) continue;
117
- let { prefix: r, name: a } = n, o = c.get(r), s = i.get(r);
118
- s && g(s, a) && (!o || o(a)) && l.push(t);
119
- }
120
- return _.entries[t] = {
121
- mtime: n,
122
- icons: l
123
- }, l;
124
- } catch {
125
- return [];
126
- }
127
- })), y = new Set(m);
128
- for (let e of Object.keys(_.entries)) y.has(e) || delete _.entries[e];
129
- try {
130
- n(l(h), { recursive: !0 }), a(h, JSON.stringify(_), "utf-8");
131
- } catch {}
132
- let x = /* @__PURE__ */ new Set();
133
- for (let e of v) for (let t of e) x.add(t);
134
- return x;
135
116
  }
136
- var T = l(p(import.meta.url)), E = T.includes("node_modules"), le = u(T, "button-variants.d.ts"), ue = u(T, "alert-variants.d.ts"), de = u(T, "badge-variants.d.ts"), fe = u(T, "confirm-variants.d.ts"), pe = u(T, "dropdown-item-variants.d.ts"), me = u(T, "tooltip-variants.d.ts"), he = u(T, "toast-variants.d.ts"), ge = u(T, "indicator-variants.d.ts"), _e = u(T, "locale-registry.d.ts"), ve = E ? "bitboss-ui" : "./types/ButtonVariant", ye = E ? "bitboss-ui" : "./types/AlertVariant", be = E ? "bitboss-ui" : "./types/BadgeVariant", xe = E ? "bitboss-ui" : "./types/ConfirmVariant", Se = E ? "bitboss-ui" : "./types/DropdownItemVariant", Ce = E ? "bitboss-ui" : "./types/TooltipVariant", we = E ? "bitboss-ui" : "./types/ToastVariant", Te = E ? "bitboss-ui" : "./types/IndicatorVariant", Ee = E ? "bitboss-ui" : "./i18n", De = u(T, "i18n", "locales"), D = {
117
+ var M = _(b(import.meta.url)), N = M.includes("node_modules"), le = v(M, "button-variants.d.ts"), ue = v(M, "alert-variants.d.ts"), de = v(M, "badge-variants.d.ts"), fe = v(M, "confirm-variants.d.ts"), pe = v(M, "dropdown-item-variants.d.ts"), me = v(M, "tooltip-variants.d.ts"), he = v(M, "toast-variants.d.ts"), ge = v(M, "indicator-variants.d.ts"), _e = v(M, "input-variants.d.ts"), ve = v(M, "locale-registry.d.ts"), ye = N ? "bitboss-ui" : "./types/ButtonVariant", be = N ? "bitboss-ui" : "./types/AlertVariant", xe = N ? "bitboss-ui" : "./types/BadgeVariant", Se = N ? "bitboss-ui" : "./types/ConfirmVariant", Ce = N ? "bitboss-ui" : "./types/DropdownItemVariant", we = N ? "bitboss-ui" : "./types/TooltipVariant", Te = N ? "bitboss-ui" : "./types/ToastVariant", Ee = N ? "bitboss-ui" : "./types/IndicatorVariant", De = N ? "bitboss-ui" : "./types/InputVariant", Oe = N ? "bitboss-ui" : "./i18n", ke = v(M, "i18n", "locales"), P = {
137
118
  pt: "pt-br",
138
119
  en: null
139
120
  };
140
- function O(t) {
141
- let n = e, r = t.customLocaleKeys ?? [], i = t.locale && n.includes(t.locale) ? t.locale : t.locale && r.includes(t.locale) ? "en" : "it", a = [], o = /* @__PURE__ */ new Set([i, "en"]);
142
- for (let e of t.enabledLocales ?? []) n.includes(e) ? o.add(e) : r.includes(e) || a.push(`[bitboss-ui] \`enabledLocales\` entry '${e}' is not a built-in locale — ignored.`);
121
+ function F(e) {
122
+ let t = u, n = e.customLocaleKeys ?? [], r = e.locale && t.includes(e.locale) ? e.locale : e.locale && n.includes(e.locale) ? "en" : "it", i = [], a = /* @__PURE__ */ new Set([r, "en"]);
123
+ for (let r of e.enabledLocales ?? []) t.includes(r) ? a.add(r) : n.includes(r) || i.push(`[bitboss-ui] \`enabledLocales\` entry '${r}' is not a built-in locale — ignored.`);
143
124
  return {
144
- enabled: [...o].sort(),
145
- defaultLocale: i,
146
- warnings: a
125
+ enabled: [...a].sort(),
126
+ defaultLocale: r,
127
+ warnings: i
147
128
  };
148
129
  }
149
- function k(e) {
130
+ function I(e) {
150
131
  let t = [];
151
132
  for (let n of e) {
152
- let e = r(u(De, `${n}.json`), "utf-8");
133
+ let e = p(v(ke, `${n}.json`), "utf-8");
153
134
  t.push(`\t${JSON.stringify(n)}: ${e.trim()},`);
154
135
  }
155
136
  return `export const locales = {\n${t.join("\n")}\n};\n`;
156
137
  }
157
- function A(e, t) {
138
+ function L(e, t) {
158
139
  let n = e.map((e) => `\t\t${JSON.stringify(e)}: true;`).join("\n");
159
- return Ve + `\nimport ${JSON.stringify(t)};\n\ndeclare module ${JSON.stringify(t)} {\n\tinterface LocaleRegistry {\n` + (n ? `${n}\n` : "") + " }\n}\n";
140
+ return We + `\nimport ${JSON.stringify(t)};\n\ndeclare module ${JSON.stringify(t)} {\n\tinterface LocaleRegistry {\n` + (n ? `${n}\n` : "") + " }\n}\n";
160
141
  }
161
- function j(e) {
162
- let t = m(import.meta.url), n = [], r = [];
142
+ function R(e) {
143
+ let t = x(import.meta.url), n = [], r = [];
163
144
  for (let i of e) {
164
- let e = i in D ? D[i] : i;
145
+ let e = i in P ? P[i] : i;
165
146
  if (e !== null) try {
166
147
  t.resolve(`dayjs/locale/${e}.js`), n.push({
167
148
  key: i,
@@ -176,87 +157,91 @@ function j(e) {
176
157
  missing: r
177
158
  };
178
159
  }
179
- function M(e) {
160
+ function z(e) {
180
161
  return `${e.map(({ pack: e }, t) => `import l${t} from ${JSON.stringify(`dayjs/locale/${e}`)};`).join("\n")}\nexport const dayjsLocales = {\n${e.map(({ key: e }, t) => `\t${JSON.stringify(e)}: l${t},`).join("\n")}\n};\n`;
181
162
  }
182
- var N = "@inertiajs/vue3", Oe = [
163
+ var B = "@inertiajs/vue3", Ae = [
183
164
  "dependencies",
184
165
  "devDependencies",
185
166
  "peerDependencies",
186
167
  "optionalDependencies"
187
168
  ];
188
- function ke(e) {
189
- let n = f(e);
169
+ function je(e) {
170
+ let t = y(e);
190
171
  for (;;) {
191
- let e = u(n, "package.json");
192
- if (t(e)) try {
193
- return JSON.parse(r(e, "utf-8"));
172
+ let e = v(t, "package.json");
173
+ if (d(e)) try {
174
+ return JSON.parse(p(e, "utf-8"));
194
175
  } catch {
195
176
  return null;
196
177
  }
197
- let i = l(n);
198
- if (i === n) return null;
199
- n = i;
178
+ let n = _(t);
179
+ if (n === t) return null;
180
+ t = n;
200
181
  }
201
182
  }
202
- function Ae(e, t) {
203
- return Oe.some((n) => {
183
+ function Me(e, t) {
184
+ return Ae.some((n) => {
204
185
  let r = e[n];
205
186
  return typeof r == "object" && !!r && t in r;
206
187
  });
207
188
  }
208
- function je(e, n) {
209
- let r = n.split("/"), i = f(e);
189
+ function Ne(e, t) {
190
+ let n = t.split("/"), r = y(e);
210
191
  for (;;) {
211
- if (t(u(i, "node_modules", ...r))) return !0;
212
- let e = l(i);
213
- if (e === i) return !1;
214
- i = e;
192
+ if (d(v(r, "node_modules", ...n))) return !0;
193
+ let e = _(r);
194
+ if (e === r) return !1;
195
+ r = e;
215
196
  }
216
197
  }
217
- function P(e) {
218
- let t = ke(e);
219
- return !t || !Ae(t, N) ? !1 : je(e, N);
198
+ function V(e) {
199
+ let t = je(e);
200
+ return !t || !Me(t, B) ? !1 : Ne(e, B);
220
201
  }
221
- function F(e) {
202
+ function H(e) {
222
203
  return e ? "export { Link as InertiaLink } from '@inertiajs/vue3';\n" : "export const InertiaLink = null;\n";
223
204
  }
224
- var Me = [
205
+ var Pe = [
225
206
  "primary",
226
207
  "outline",
227
208
  "secondary",
228
209
  "ghost",
229
210
  "destructive",
230
211
  "link"
231
- ], Ne = [
212
+ ], Fe = [
232
213
  "outline",
233
214
  "primary",
234
215
  "destructive",
235
216
  "warning"
236
- ], Pe = [
217
+ ], Ie = [
237
218
  "primary",
238
219
  "secondary",
239
220
  "destructive",
240
221
  "outline"
241
- ], Fe = ["default", "destructive"], Ie = ["default", "destructive"], Le = ["default", "destructive"], Re = [
222
+ ], Le = ["default", "destructive"], Re = ["default", "destructive"], ze = ["default", "destructive"], Be = [
242
223
  "default",
243
224
  "success",
244
225
  "info",
245
226
  "warning",
246
227
  "destructive"
247
- ], ze = [
228
+ ], Ve = [
248
229
  "default",
249
230
  "success",
250
231
  "info",
251
232
  "warning",
252
233
  "destructive"
234
+ ], He = [
235
+ "outline",
236
+ "secondary",
237
+ "ghost"
253
238
  ];
254
- function Be(e, t) {
239
+ function Ue(e, t) {
255
240
  let n = (t ?? []).map((e) => e.trim()).filter((e) => e.length > 0);
256
241
  return [.../* @__PURE__ */ new Set([...e, ...n])];
257
242
  }
258
- var Ve = "// Auto-generated by bitboss-ui — do not edit manually.\n//\n// SCOPE: this file mirrors the plugin config of the project that LAST ran\n// the bitboss-ui plugin in this folder — it is regenerated by every build,\n// dev server, or test process that loads the plugin. It is authoritative\n// for THAT project only. Another project's registry is whatever its own\n// plugin config declares (e.g. bitbossUi({ badgeVariants: [...] })) — do\n// not read names out of a different checkout's copy of this file.\n";
259
- function I(e, t, n) {
243
+ var We = "// Auto-generated by bitboss-ui — do not edit manually.\n//\n// SCOPE: this file mirrors the plugin config of the project that LAST ran\n// the bitboss-ui plugin in this folder — it is regenerated by every build,\n// dev server, or test process that loads the plugin. It is authoritative\n// for THAT project only. Another project's registry is whatever its own\n// plugin config declares (e.g. bitbossUi({ badgeVariants: [...] })) — do\n// not read names out of a different checkout's copy of this file.\n";
244
+ function U(e, t, n) {
260
245
  let r = e.map((e) => `\t\t${JSON.stringify(e)}: never;`).join("\n");
261
246
  return `// Auto-generated by bitboss-ui — do not edit manually.
262
247
  //
@@ -269,7 +254,7 @@ function I(e, t, n) {
269
254
 
270
255
  import ${JSON.stringify(t)};\n\ndeclare module ${JSON.stringify(t)} {\n\tinterface ${n} {\n` + (r ? `${r}\n` : "") + " }\n}\n";
271
256
  }
272
- var L = [
257
+ var W = [
273
258
  "@floating-ui/vue",
274
259
  "@tanstack/vue-virtual",
275
260
  "@vueuse/core",
@@ -284,32 +269,32 @@ var L = [
284
269
  "maska/vue",
285
270
  "mime",
286
271
  "object-code"
287
- ], R = ["bitboss-ui"], He = N, Ue = "virtual:bitboss-ui/icons", z = "\0virtual:bitboss-ui/icons", We = "virtual:bitboss-ui/config", B = "\0virtual:bitboss-ui/config", Ge = "virtual:bitboss-ui/dayjs-locales", V = "\0virtual:bitboss-ui/dayjs-locales", Ke = "virtual:bitboss-ui/locales", H = "\0virtual:bitboss-ui/locales", qe = "virtual:bitboss-ui/styles", U = "\0virtual:bitboss-ui/styles", Je = "virtual:bitboss-ui/link", W = "\0virtual:bitboss-ui/link";
288
- function Ye() {
289
- let e = u(T, "styles.css");
290
- return t(e) ? r(e, "utf-8") : ["main.css", "variables.css"].map((e) => {
291
- let n = u(T, "assets/css", e);
292
- return t(n) ? r(n, "utf-8") : "";
272
+ ], G = ["bitboss-ui"], Ge = B, Ke = "virtual:bitboss-ui/icons", K = "\0virtual:bitboss-ui/icons", qe = "virtual:bitboss-ui/config", q = "\0virtual:bitboss-ui/config", Je = "virtual:bitboss-ui/dayjs-locales", J = "\0virtual:bitboss-ui/dayjs-locales", Ye = "virtual:bitboss-ui/locales", Y = "\0virtual:bitboss-ui/locales", Xe = "virtual:bitboss-ui/styles", Ze = "\0virtual:bitboss-ui/styles", Qe = "virtual:bitboss-ui/link", $e = "\0virtual:bitboss-ui/link";
273
+ function et() {
274
+ let e = v(M, "styles.css");
275
+ return d(e) ? p(e, "utf-8") : ["main.css", "variables.css"].map((e) => {
276
+ let t = v(M, "assets/css", e);
277
+ return d(t) ? p(t, "utf-8") : "";
293
278
  }).join("\n");
294
279
  }
295
- var Xe = "local";
296
- function Ze(e) {
280
+ var tt = "local";
281
+ function nt(e) {
297
282
  let t = {};
298
283
  try {
299
- let n = i(e, {
284
+ let n = m(e, {
300
285
  recursive: !0,
301
286
  encoding: "utf-8"
302
287
  }).filter((e) => e.endsWith(".svg"));
303
- for (let i of n) {
304
- let n = c(i, ".svg");
288
+ for (let r of n) {
289
+ let n = g(r, ".svg");
305
290
  try {
306
- let a = y(r(u(e, i), "utf-8")), o = a && h(a);
307
- o && (t[n] = o);
291
+ let i = T(p(v(e, r), "utf-8")), a = i && S(i);
292
+ a && (t[n] = a);
308
293
  } catch {}
309
294
  }
310
295
  } catch {}
311
296
  return {
312
- prefix: Xe,
297
+ prefix: tt,
313
298
  info: {
314
299
  name: "Local",
315
300
  author: { name: "Icons automatically inferred from the icons installed locally" },
@@ -318,12 +303,12 @@ function Ze(e) {
318
303
  icons: t
319
304
  };
320
305
  }
321
- var G = "./node_modules/.bitboss-ui/local-icons.json", K = "iconify.customCollectionJsonPaths";
322
- function q(e, t) {
323
- let r = u(t, "node_modules", ".bitboss-ui");
324
- n(r, { recursive: !0 }), a(u(r, "local-icons.json"), JSON.stringify(Ze(e)), "utf-8");
306
+ var X = "./node_modules/.bitboss-ui/local-icons.json", Z = "iconify.customCollectionJsonPaths";
307
+ function Q(e, t) {
308
+ let n = v(t, "node_modules", ".bitboss-ui");
309
+ f(n, { recursive: !0 }), h(v(n, "local-icons.json"), JSON.stringify(nt(e)), "utf-8");
325
310
  }
326
- function J(e) {
311
+ function rt(e) {
327
312
  let t = "", n = !1, r = !1, i = !1;
328
313
  for (let a = 0; a < e.length; a++) {
329
314
  let o = e[a], s = e[a + 1];
@@ -355,8 +340,8 @@ function J(e) {
355
340
  }
356
341
  return t;
357
342
  }
358
- var Y = (e) => e === " " || e === " " || e === "\n" || e === "\r";
359
- function X(e, t) {
343
+ var $ = (e) => e === " " || e === " " || e === "\n" || e === "\r";
344
+ function it(e, t) {
360
345
  let n = !1, r = !1;
361
346
  for (let i = t; i < e.length; i++) {
362
347
  let t = e[i], a = e[i + 1];
@@ -376,11 +361,11 @@ function X(e, t) {
376
361
  r = !0, i++;
377
362
  continue;
378
363
  }
379
- if (!Y(t)) return i;
364
+ if (!$(t)) return i;
380
365
  }
381
366
  return -1;
382
367
  }
383
- function Qe(e, t) {
368
+ function at(e, t) {
384
369
  let n = !1, r = !1, i = !1, a = -1, o = 0, s = null;
385
370
  for (let c = 0; c < e.length; c++) {
386
371
  let l = e[c], u = e[c + 1];
@@ -412,19 +397,19 @@ function Qe(e, t) {
412
397
  i = !0, a = c;
413
398
  continue;
414
399
  }
415
- if (!Y(l)) {
400
+ if (!$(l)) {
416
401
  if (l === ":" && s !== null) {
417
402
  let n = s === t;
418
403
  if (s = null, !n) continue;
419
- let r = X(e, c + 1);
420
- return r === -1 || e[r] !== "[" ? null : $e(e, r);
404
+ let r = it(e, c + 1);
405
+ return r === -1 || e[r] !== "[" ? null : ot(e, r);
421
406
  }
422
407
  s = null, l === "{" || l === "[" ? o++ : (l === "}" || l === "]") && o--;
423
408
  }
424
409
  }
425
410
  return null;
426
411
  }
427
- function $e(e, t) {
412
+ function ot(e, t) {
428
413
  let n = !1, r = !1, i = !1, a = 0, o = -1;
429
414
  for (let s = t; s < e.length; s++) {
430
415
  let c = e[s], l = e[s + 1];
@@ -456,7 +441,7 @@ function $e(e, t) {
456
441
  i = !0, o = s + 1;
457
442
  continue;
458
443
  }
459
- if (!Y(c)) {
444
+ if (!$(c)) {
460
445
  if (c === "[" || c === "{") {
461
446
  a++, s > t && (o = s + 1);
462
447
  continue;
@@ -475,57 +460,57 @@ function $e(e, t) {
475
460
  }
476
461
  return null;
477
462
  }
478
- function Z(e, t) {
479
- let i = u(e, ".vscode"), o = u(i, "settings.json"), s = "";
463
+ function st(e, t) {
464
+ let n = v(e, ".vscode"), r = v(n, "settings.json"), i = "";
480
465
  try {
481
- s = r(o, "utf-8");
466
+ i = p(r, "utf-8");
482
467
  } catch {}
483
- if (s.includes(G)) return;
484
- let c = `add "${K}": ["${G}"] manually to enable Iconify previews for local icons`, l = `[bitboss-ui] .vscode/settings.json: added "${G}" to "${K}" (Iconify previews for local icons). Set \`vscodeSettings: false\` in the plugin options to disable this write.`;
485
- if (!s.trim()) {
486
- n(i, { recursive: !0 }), a(o, JSON.stringify({ [K]: [G] }, null, " "), "utf-8"), t.info(l);
468
+ if (i.includes(X)) return;
469
+ let a = `add "${Z}": ["${X}"] manually to enable Iconify previews for local icons`, o = `[bitboss-ui] .vscode/settings.json: added "${X}" to "${Z}" (Iconify previews for local icons). Set \`vscodeSettings: false\` in the plugin options to disable this write.`;
470
+ if (!i.trim()) {
471
+ f(n, { recursive: !0 }), h(r, JSON.stringify({ [Z]: [X] }, null, " "), "utf-8"), t.info(o);
487
472
  return;
488
473
  }
489
- let d;
474
+ let s;
490
475
  try {
491
- d = JSON.parse(J(s));
476
+ s = JSON.parse(rt(i));
492
477
  } catch {
493
- t.warn(`[bitboss-ui] Could not parse .vscode/settings.json — ${c}.`);
478
+ t.warn(`[bitboss-ui] Could not parse .vscode/settings.json — ${a}.`);
494
479
  return;
495
480
  }
496
- let f = JSON.stringify(G), p;
497
- if (K in d) {
498
- if (!Array.isArray(d[K])) {
499
- t.warn(`[bitboss-ui] .vscode/settings.json has a non-array "${K}" — ${c}.`);
481
+ let c = JSON.stringify(X), l;
482
+ if (Z in s) {
483
+ if (!Array.isArray(s[Z])) {
484
+ t.warn(`[bitboss-ui] .vscode/settings.json has a non-array "${Z}" — ${a}.`);
500
485
  return;
501
486
  }
502
- let e = Qe(s, K);
487
+ let e = at(i, Z);
503
488
  if (!e) {
504
- t.warn(`[bitboss-ui] Could not locate "${K}" in .vscode/settings.json — ${c}.`);
489
+ t.warn(`[bitboss-ui] Could not locate "${Z}" in .vscode/settings.json — ${a}.`);
505
490
  return;
506
491
  }
507
- if (e.lastSignificantEnd === -1) p = s.slice(0, e.close) + f + s.slice(e.close);
508
- else if (s.slice(e.open + 1, e.close).includes("\n")) {
509
- let t = s.lastIndexOf("\n", e.lastSignificantEnd - 1) + 1, n = /^[\t ]*/.exec(s.slice(t))?.[0] ?? " ";
510
- p = s.slice(0, e.lastSignificantEnd) + `,\n${n}${f}` + s.slice(e.lastSignificantEnd);
511
- } else p = s.slice(0, e.lastSignificantEnd) + `, ${f}` + s.slice(e.lastSignificantEnd);
492
+ if (e.lastSignificantEnd === -1) l = i.slice(0, e.close) + c + i.slice(e.close);
493
+ else if (i.slice(e.open + 1, e.close).includes("\n")) {
494
+ let t = i.lastIndexOf("\n", e.lastSignificantEnd - 1) + 1, n = /^[\t ]*/.exec(i.slice(t))?.[0] ?? " ";
495
+ l = i.slice(0, e.lastSignificantEnd) + `,\n${n}${c}` + i.slice(e.lastSignificantEnd);
496
+ } else l = i.slice(0, e.lastSignificantEnd) + `, ${c}` + i.slice(e.lastSignificantEnd);
512
497
  } else {
513
- let e = X(s, 0);
514
- if (e === -1 || s[e] !== "{") {
515
- t.warn(`[bitboss-ui] .vscode/settings.json is not a JSON object — ${c}.`);
498
+ let e = it(i, 0);
499
+ if (e === -1 || i[e] !== "{") {
500
+ t.warn(`[bitboss-ui] .vscode/settings.json is not a JSON object — ${a}.`);
516
501
  return;
517
502
  }
518
- let n = Object.keys(d).length > 0;
519
- p = s.slice(0, e + 1) + `\n\t${JSON.stringify(K)}: [${f}]${n ? "," : "\n"}` + s.slice(e + 1);
503
+ let n = Object.keys(s).length > 0;
504
+ l = i.slice(0, e + 1) + `\n\t${JSON.stringify(Z)}: [${c}]${n ? "," : "\n"}` + i.slice(e + 1);
520
505
  }
521
- a(o, p, "utf-8"), t.info(l);
506
+ h(r, l, "utf-8"), t.info(o);
522
507
  }
523
- var Q = "virtual:bb-icon/", $ = "\0virtual:bb-icon/";
524
- async function et(e, t) {
508
+ var ct = "virtual:bb-icon/", lt = "\0virtual:bb-icon/";
509
+ async function ut(e, t) {
525
510
  try {
526
511
  let { ensureMcpConfigs: n, missingMcpPeers: r } = await import(
527
512
  /* @vite-ignore */
528
- new URL("data:text/javascript;base64,LyoqCiAqIFNoYXJlZCB3cml0ZXJzIHRoYXQgcmVnaXN0ZXIgdGhlIGJpdGJvc3MtdWkgTUNQIHNlcnZlciBpbiBlYWNoIGFnZW50CiAqIGhhcm5lc3MncyBjb25maWcgZmlsZS4gVXNlZCBieSBgYml0Ym9zcy11aSBhaS1pbml0IC0tbWNwYCAoYmluKSBhbmQsIG9wdC1pbiwKICogYnkgdGhlIGRldiBzZXJ2ZXIgKHZpdGUvbnV4dCBwbHVnaW4gYG1jcDogdHJ1ZWApLgogKgogKiBFdmVyeSB3cml0ZXIgaXMgbWVyZ2Utc2FmZSAobmV2ZXIgZGlzdHVyYnMgb3RoZXIgc2VydmVycyksIGlkZW1wb3RlbnQKICogKHJldHVybnMgYHVuY2hhbmdlZGAgd2hlbiB0aGUgZW50cnkgYWxyZWFkeSBtYXRjaGVzKSwgYW5kIHJlcG9ydHMgd2hhdCBpdAogKiBkaWQgc28gY2FsbGVycyBjYW4gbG9nIGl0LiBIYXJuZXNzIGNvbmZpZyBzaGFwZXMgZGlmZmVyOgogKiAgIC0gQ2xhdWRlIENvZGUgLyBDdXJzb3IgLyBXaW5kc3VyZiDihpIgYHsgbWNwU2VydmVyczogeyBuYW1lOiB7IGNvbW1hbmQsIGFyZ3MgfSB9IH1gCiAqICAgLSBWUyBDb2RlIC8gQ29waWxvdCAgICAgICAgICAgICAgIOKGkiBgeyBzZXJ2ZXJzOiB7IG5hbWU6IHsgdHlwZTogJ3N0ZGlvJywg4oCmIH0gfSB9YAogKiAoVlMgQ29kZSBrZXlzIHRoZSBjb250YWluZXIgYHNlcnZlcnNgIGFuZCByZXF1aXJlcyBhbiBleHBsaWNpdCBgdHlwZWAuKQogKi8KCmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7CmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJzsKaW1wb3J0IHsgZGlybmFtZSwgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7CmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7CgpleHBvcnQgY29uc3QgTUNQX1NFUlZFUl9OQU1FID0gJ2JpdGJvc3MtdWknOwpjb25zdCBDT01NQU5EID0gJ25weCc7CgovKioKICogVGhlIE1DUCBzZXJ2ZXIncyBvd24gcnVudGltZSBuZWVkcywgZGVjbGFyZWQgYXMgT1BUSU9OQUwgcGVlcnMgcmF0aGVyIHRoYW4KICogZGVwZW5kZW5jaWVzOiB0b2dldGhlciB0aGV5IGFyZSB+MTIgTUIg4oCUIG1vcmUgdGhhbiBldmVyeSBydW50aW1lIGRlcGVuZGVuY3kKICogb2YgdGhlIGNvbXBvbmVudCBsaWJyYXJ5IGNvbWJpbmVkIOKAlCBhbmQgbm90aGluZyBidXQgYGJpdGJvc3MtdWkgbWNwYCBsb2FkcwogKiB0aGVtLgogKi8KZXhwb3J0IGNvbnN0IE1DUF9QRUVSUyA9IFsnQG1vZGVsY29udGV4dHByb3RvY29sL3NkaycsICd6b2QnXTsKCi8qKgogKiBEaXJlY3RvcnkgcHJvYmUsIHdhbGtpbmcgdXAgZnJvbSBgZGlyYC4gRGVsaWJlcmF0ZWx5IE5PVCBgcmVxdWlyZS5yZXNvbHZlYDoKICogYW4gRVNNLW9ubHkgcGFja2FnZSB3aG9zZSBgZXhwb3J0c2AgbWFwIGRlY2xhcmVzIG5vIGByZXF1aXJlYCBjb25kaXRpb24KICogdGhyb3dzIEVSUl9QQUNLQUdFX1BBVEhfTk9UX0VYUE9SVEVEIG9uIGEgcGVyZmVjdGx5IGdvb2QgaW5zdGFsbCDigJQgdGhlIHNhbWUKICogdHJhcCBkb2N1bWVudGVkIG9uIGBoYXNJbmVydGlhYCBpbiB0aGUgVml0ZSBwbHVnaW4uIEEgZGlyZWN0b3J5IGNoZWNrIGlzCiAqIGV4cG9ydHMtbWFwLWFnbm9zdGljLgogKi8KZnVuY3Rpb24gaXNJbnN0YWxsZWRGcm9tKGRpciwgbmFtZSkgewoJY29uc3Qgc2VnbWVudHMgPSBuYW1lLnNwbGl0KCcvJyk7CglsZXQgY3VycmVudCA9IHJlc29sdmUoZGlyKTsKCWZvciAoOzspIHsKCQlpZiAoZXhpc3RzU3luYyhqb2luKGN1cnJlbnQsICdub2RlX21vZHVsZXMnLCAuLi5zZWdtZW50cykpKSByZXR1cm4gdHJ1ZTsKCQljb25zdCBwYXJlbnQgPSBkaXJuYW1lKGN1cnJlbnQpOwoJCWlmIChwYXJlbnQgPT09IGN1cnJlbnQpIHJldHVybiBmYWxzZTsKCQljdXJyZW50ID0gcGFyZW50OwoJfQp9CgovKioKICogV2hpY2ggTUNQIHBlZXJzIHRoZSBwcm9qZWN0IGlzIG1pc3NpbmcsIHNvIGEgY2FsbGVyIHJlZ2lzdGVyaW5nIHRoZSBzZXJ2ZXIKICogY2FuIHNheSBzbyBOT1cgcmF0aGVyIHRoYW4gbGV0IHRoZSBoYXJuZXNzIGRpc2NvdmVyIGl0IG9uIGZpcnN0IGxhdW5jaCDigJQgdGhlCiAqIGNvbmZpZyBpcyB3cml0dGVuIGJ5IGBhaS1pbml0IC0tbWNwYCAvIHRoZSBkZXYgc2VydmVyLCBidXQgdGhlIGZhaWx1cmUgd291bGQKICogc3VyZmFjZSBtdWNoIGxhdGVyLCBpbnNpZGUgYW4gYWdlbnQsIGFzIGEgc2VydmVyIHRoYXQgd291bGQgbm90IHN0YXJ0LgogKgogKiBSZXR1cm5zIGBbXWAgd2hlbiBldmVyeXRoaW5nIG5lZWRlZCBpcyBwcmVzZW50LgogKi8KZXhwb3J0IGZ1bmN0aW9uIG1pc3NpbmdNY3BQZWVycyhyb290KSB7CglyZXR1cm4gTUNQX1BFRVJTLmZpbHRlcigobmFtZSkgPT4gIWlzSW5zdGFsbGVkRnJvbShyb290LCBuYW1lKSk7Cn0KCi8qKgogKiBUaGUgbnB4IHNwZWMgTVVTVCBiZSBwaW5uZWQgdG8gdGhpcyBwYWNrYWdlJ3Mgb3duIHZlcnNpb24gKDIwMjYtMDgtMDYKICogcmV2aWV3KTogTUNQIGhvc3RzIHNwYXduIHRoZSBlbnRyeSB3aXRoIG5vbi1UVFkgc3RkaW8sIHdoZXJlIGBucHhgIGluc3RhbGxzCiAqIHdpdGhvdXQgcHJvbXB0aW5nIOKAlCBhbiB1bnBpbm5lZCBgbnB4IGJpdGJvc3MtdWkgbWNwYCBpbiBhIHByb2plY3Qgd2hvc2UKICogZGVwZW5kZW5jeSBpcyBhYnNlbnQgb3Igbm90IHlldCBpbnN0YWxsZWQgc2lsZW50bHkgZG93bmxvYWRzIGFuZCBleGVjdXRlcwogKiB3aGF0ZXZlciBgYml0Ym9zcy11aUBsYXRlc3RgIHJlc29sdmVzIHRvIG9uIHRoZSBwdWJsaWMgcmVnaXN0cnkgKGFuZCBldmVuCiAqIHdpdGggYSBsb2NhbCBpbnN0YWxsLCBhbnN3ZXJzIGZyb20gYSBkaWZmZXJlbnQgdmVyc2lvbidzIGtub3dsZWRnZSBiYXNlCiAqIHRoYW4gdGhlIG9uZSB0aGUgcHJvamVjdCB1c2VzKS4gVGhpcyBmaWxlIHNoaXBzIGFzIGBzY3JpcHRzL2xpYi8qYCBpbiB0aGUKICogcHVibGlzaGVkIHBhY2thZ2UsIHNvIGl0cyBvd24gYHBhY2thZ2UuanNvbmAg4oCUIHR3byBsZXZlbHMgdXAg4oCUIElTIHRoZQogKiBpbnN0YWxsZWQgdmVyc2lvbi4KICovCmZ1bmN0aW9uIHJlc29sdmVOcHhTcGVjKCkgewoJdHJ5IHsKCQljb25zdCBwa2cgPSBKU09OLnBhcnNlKAoJCQlyZWFkRmlsZVN5bmMoCgkJCQlqb2luKAoJCQkJCWRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKSwKCQkJCQknLi4nLAoJCQkJCScuLicsCgkJCQkJJ3BhY2thZ2UuanNvbicKCQkJCSksCgkJCQkndXRmLTgnCgkJCSkKCQkpOwoJCWlmIChwa2cubmFtZSA9PT0gTUNQX1NFUlZFUl9OQU1FICYmIHR5cGVvZiBwa2cudmVyc2lvbiA9PT0gJ3N0cmluZycpIHsKCQkJcmV0dXJuIGAke01DUF9TRVJWRVJfTkFNRX1AJHtwa2cudmVyc2lvbn1gOwoJCX0KCX0gY2F0Y2ggewoJCS8qIGZhbGwgdGhyb3VnaCB0byB0aGUgdW5waW5uZWQgc3BlYyAqLwoJfQoJcmV0dXJuIE1DUF9TRVJWRVJfTkFNRTsKfQoKY29uc3QgQVJHUyA9IFtyZXNvbHZlTnB4U3BlYygpLCAnbWNwJ107Cgpjb25zdCBzdGRpb0VudHJ5ID0gKCkgPT4gKHsgY29tbWFuZDogQ09NTUFORCwgYXJnczogWy4uLkFSR1NdIH0pOwpjb25zdCB2c2NvZGVFbnRyeSA9ICgpID0+ICh7Cgl0eXBlOiAnc3RkaW8nLAoJY29tbWFuZDogQ09NTUFORCwKCWFyZ3M6IFsuLi5BUkdTXSwKfSk7CgpmdW5jdGlvbiB3cml0ZUpzb24ocGF0aCwgZGF0YSkgewoJbWtkaXJTeW5jKGRpcm5hbWUocGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pOwoJd3JpdGVGaWxlU3luYyhwYXRoLCBgJHtKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAnXHQnKX1cbmAsICd1dGYtOCcpOwp9CgovKioKICogTWVyZ2UgdGhlIHNlcnZlciBlbnRyeSBpbnRvIGBwYXRoYCdzIGA8Y29udGFpbmVyS2V5PmAgbWFwLiBSZXR1cm5zCiAqIGB7IHBhdGgsIGxhYmVsLCBhY3Rpb24gfWAgd2l0aCBhY3Rpb24g4oiIIGNyZWF0ZWR8dXBkYXRlZHx1bmNoYW5nZWR8c2tpcHBlZC4KICovCmZ1bmN0aW9uIGVuc3VyZUVudHJ5KHBhdGgsIGNvbnRhaW5lcktleSwgZW50cnksIGxhYmVsKSB7CglsZXQgY29uZmlnID0ge307Cgljb25zdCBleGlzdGVkID0gZXhpc3RzU3luYyhwYXRoKTsKCWlmIChleGlzdGVkKSB7CgkJdHJ5IHsKCQkJY29uZmlnID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04JykpOwoJCX0gY2F0Y2ggKGVycm9yKSB7CgkJCWNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7CgkJCXJldHVybiB7CgkJCQlwYXRoLAoJCQkJbGFiZWwsCgkJCQlhY3Rpb246ICdza2lwcGVkJywKCQkJCXJlYXNvbjogYGludmFsaWQgSlNPTiAoJHttZXNzYWdlfSlgLAoJCQl9OwoJCX0KCX0KCWlmICghY29uZmlnW2NvbnRhaW5lcktleV0gfHwgdHlwZW9mIGNvbmZpZ1tjb250YWluZXJLZXldICE9PSAnb2JqZWN0JykgewoJCWNvbmZpZ1tjb250YWluZXJLZXldID0ge307Cgl9CgoJY29uc3QgcHJldmlvdXMgPSBjb25maWdbY29udGFpbmVyS2V5XVtNQ1BfU0VSVkVSX05BTUVdOwoJaWYgKHByZXZpb3VzICYmIEpTT04uc3RyaW5naWZ5KHByZXZpb3VzKSA9PT0gSlNPTi5zdHJpbmdpZnkoZW50cnkpKSB7CgkJcmV0dXJuIHsgcGF0aCwgbGFiZWwsIGFjdGlvbjogJ3VuY2hhbmdlZCcgfTsKCX0KCgljb25maWdbY29udGFpbmVyS2V5XVtNQ1BfU0VSVkVSX05BTUVdID0gZW50cnk7Cgl0cnkgewoJCXdyaXRlSnNvbihwYXRoLCBjb25maWcpOwoJfSBjYXRjaCAoZXJyb3IpIHsKCQljb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpOwoJCXJldHVybiB7IHBhdGgsIGxhYmVsLCBhY3Rpb246ICdza2lwcGVkJywgcmVhc29uOiBtZXNzYWdlIH07Cgl9CglyZXR1cm4geyBwYXRoLCBsYWJlbCwgYWN0aW9uOiBleGlzdGVkID8gJ3VwZGF0ZWQnIDogJ2NyZWF0ZWQnIH07Cn0KCi8qKiBDbGF1ZGUgQ29kZSDigJQgcHJvamVjdC1yb290IGAubWNwLmpzb25gLiAqLwpleHBvcnQgY29uc3Qgd3JpdGVDbGF1ZGVDb2RlQ29uZmlnID0gKHJvb3QpID0+CgllbnN1cmVFbnRyeSgKCQlqb2luKHJvb3QsICcubWNwLmpzb24nKSwKCQknbWNwU2VydmVycycsCgkJc3RkaW9FbnRyeSgpLAoJCSdDbGF1ZGUgQ29kZScKCSk7CgovKiogQ3Vyc29yIOKAlCBwcm9qZWN0IGAuY3Vyc29yL21jcC5qc29uYC4gKi8KZXhwb3J0IGNvbnN0IHdyaXRlQ3Vyc29yQ29uZmlnID0gKHJvb3QpID0+CgllbnN1cmVFbnRyeSgKCQlqb2luKHJvb3QsICcuY3Vyc29yJywgJ21jcC5qc29uJyksCgkJJ21jcFNlcnZlcnMnLAoJCXN0ZGlvRW50cnkoKSwKCQknQ3Vyc29yJwoJKTsKCi8qKiBWUyBDb2RlIC8gR2l0SHViIENvcGlsb3Qg4oCUIHByb2plY3QgYC52c2NvZGUvbWNwLmpzb25gIChgc2VydmVyc2AgKyBgdHlwZWApLiAqLwpleHBvcnQgY29uc3Qgd3JpdGVWc2NvZGVDb25maWcgPSAocm9vdCkgPT4KCWVuc3VyZUVudHJ5KAoJCWpvaW4ocm9vdCwgJy52c2NvZGUnLCAnbWNwLmpzb24nKSwKCQknc2VydmVycycsCgkJdnNjb2RlRW50cnkoKSwKCQknVlMgQ29kZSAvIENvcGlsb3QnCgkpOwoKLyoqCiAqIFdpbmRzdXJmIOKAlCBDYXNjYWRlIG9ubHkgcmVhZHMgYSBHTE9CQUwgY29uZmlnOyB0aGVyZSBpcyBubyBwcm9qZWN0IHNjb3BlLCBzbwogKiB0aGlzIHdyaXRlcyB0byB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IGFuZCBhZmZlY3RzIGFsbCB0aGVpciBwcm9qZWN0cy4KICovCmV4cG9ydCBjb25zdCB3cml0ZVdpbmRzdXJmQ29uZmlnID0gKCkgPT4KCWVuc3VyZUVudHJ5KAoJCWpvaW4oaG9tZWRpcigpLCAnLmNvZGVpdW0nLCAnd2luZHN1cmYnLCAnbWNwX2NvbmZpZy5qc29uJyksCgkJJ21jcFNlcnZlcnMnLAoJCXN0ZGlvRW50cnkoKSwKCQknV2luZHN1cmYgKGdsb2JhbCknCgkpOwoKLyoqCiAqIFJlZ2lzdGVyIHRoZSBzZXJ2ZXIgYWNyb3NzIGhhcm5lc3Nlcy4gUHJvamVjdC1zY29wZWQgaGFybmVzc2VzIGFsd2F5cyBydW47CiAqIFdpbmRzdXJmIChnbG9iYWwsIGhvbWUtZGlyKSBpcyBvcHQtaW4gdmlhIGBpbmNsdWRlV2luZHN1cmZgIGJlY2F1c2Ugd3JpdGluZwogKiBpdCBhZmZlY3RzIGV2ZXJ5IHByb2plY3Qgb24gdGhlIG1hY2hpbmUg4oCUIGFwcHJvcHJpYXRlIGZvciB0aGUgZXhwbGljaXQKICogYGFpLWluaXQgLS1tY3BgIGNvbW1hbmQsIGJ1dCBub3QgZm9yIGEgc2lsZW50IGRldi1zZXJ2ZXIgYm9vdC4KICovCmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVNY3BDb25maWdzKHJvb3QsIHsgaW5jbHVkZVdpbmRzdXJmID0gZmFsc2UgfSA9IHt9KSB7Cgljb25zdCByZXN1bHRzID0gWwoJCXdyaXRlQ2xhdWRlQ29kZUNvbmZpZyhyb290KSwKCQl3cml0ZUN1cnNvckNvbmZpZyhyb290KSwKCQl3cml0ZVZzY29kZUNvbmZpZyhyb290KSwKCV07CglpZiAoaW5jbHVkZVdpbmRzdXJmKSByZXN1bHRzLnB1c2god3JpdGVXaW5kc3VyZkNvbmZpZygpKTsKCXJldHVybiByZXN1bHRzOwp9Cg==", "" + import.meta.url).href
513
+ new URL("data:text/javascript;base64,LyoqCiAqIFNoYXJlZCB3cml0ZXJzIHRoYXQgcmVnaXN0ZXIgdGhlIGJpdGJvc3MtdWkgTUNQIHNlcnZlciBpbiBlYWNoIGFnZW50CiAqIGhhcm5lc3MncyBjb25maWcgZmlsZS4gVXNlZCBieSBgYml0Ym9zcy11aSBhaS1pbml0IC0tbWNwYCAoYmluKSBhbmQsIG9wdC1pbiwKICogYnkgdGhlIGRldiBzZXJ2ZXIgKHZpdGUvbnV4dCBwbHVnaW4gYG1jcDogdHJ1ZWApLgogKgogKiBFdmVyeSB3cml0ZXIgaXMgbWVyZ2Utc2FmZSAobmV2ZXIgZGlzdHVyYnMgb3RoZXIgc2VydmVycyksIGlkZW1wb3RlbnQKICogKHJldHVybnMgYHVuY2hhbmdlZGAgd2hlbiB0aGUgZW50cnkgYWxyZWFkeSBtYXRjaGVzKSwgYW5kIHJlcG9ydHMgd2hhdCBpdAogKiBkaWQgc28gY2FsbGVycyBjYW4gbG9nIGl0LiBIYXJuZXNzIGNvbmZpZyBzaGFwZXMgZGlmZmVyOgogKiAgIC0gQ2xhdWRlIENvZGUgLyBDdXJzb3IgLyBXaW5kc3VyZiDihpIgYHsgbWNwU2VydmVyczogeyBuYW1lOiB7IGNvbW1hbmQsIGFyZ3MgfSB9IH1gCiAqICAgLSBWUyBDb2RlIC8gQ29waWxvdCAgICAgICAgICAgICAgIOKGkiBgeyBzZXJ2ZXJzOiB7IG5hbWU6IHsgdHlwZTogJ3N0ZGlvJywg4oCmIH0gfSB9YAogKiAoVlMgQ29kZSBrZXlzIHRoZSBjb250YWluZXIgYHNlcnZlcnNgIGFuZCByZXF1aXJlcyBhbiBleHBsaWNpdCBgdHlwZWAuKQogKi8KCmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7CmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJzsKaW1wb3J0IHsgZGlybmFtZSwgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7CgpleHBvcnQgY29uc3QgTUNQX1NFUlZFUl9OQU1FID0gJ2JpdGJvc3MtdWknOwpjb25zdCBDT01NQU5EID0gJ25vZGUnOwoKLyoqCiAqIFBhdGggdG8gdGhlIGluc3RhbGxlZCBDTEksIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHJvb3QuCiAqCiAqIFJlbGF0aXZlIG9uIHB1cnBvc2U6IGhhcm5lc3NlcyBzcGF3biBhIHN0ZGlvIHNlcnZlciB3aXRoIHRoZSBwcm9qZWN0IHJvb3QgYXMKICogaXRzIHdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgYSByZWxhdGl2ZSBwYXRoIGlzIHdoYXQgbGV0cyBhIGNvbW1pdHRlZAogKiBgLm1jcC5qc29uYCB3b3JrIG9uIGEgdGVhbW1hdGUncyBtYWNoaW5lLiBBbiBhYnNvbHV0ZSBwYXRoIHdvdWxkIHBpbiB0aGUKICogY29uZmlnIHRvIHdob2V2ZXIgcmFuIGBhaS1pbml0YC4KICoKICogRm9yd2FyZCBzbGFzaGVzIGV2ZW4gb24gV2luZG93cyDigJQgTm9kZSBhY2NlcHRzIHRoZW0sIGFuZCBKU09OIGNvbmZpZ3MgYXJlCiAqIHNoYXJlZCBhY3Jvc3MgcGxhdGZvcm1zLgogKi8KZXhwb3J0IGNvbnN0IE1DUF9CSU5fUEFUSCA9ICdub2RlX21vZHVsZXMvYml0Ym9zcy11aS9iaW4vYml0Ym9zcy11aS5tanMnOwoKLyoqCiAqIFRoZSBNQ1Agc2VydmVyJ3Mgb3duIHJ1bnRpbWUgbmVlZHMsIGRlY2xhcmVkIGFzIE9QVElPTkFMIHBlZXJzIHJhdGhlciB0aGFuCiAqIGRlcGVuZGVuY2llczogdG9nZXRoZXIgdGhleSBhcmUgfjEyIE1CIOKAlCBtb3JlIHRoYW4gZXZlcnkgcnVudGltZSBkZXBlbmRlbmN5CiAqIG9mIHRoZSBjb21wb25lbnQgbGlicmFyeSBjb21iaW5lZCDigJQgYW5kIG5vdGhpbmcgYnV0IGBiaXRib3NzLXVpIG1jcGAgbG9hZHMKICogdGhlbS4KICovCmV4cG9ydCBjb25zdCBNQ1BfUEVFUlMgPSBbJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsnLCAnem9kJ107CgovKioKICogRGlyZWN0b3J5IHByb2JlLCB3YWxraW5nIHVwIGZyb20gYGRpcmAuIERlbGliZXJhdGVseSBOT1QgYHJlcXVpcmUucmVzb2x2ZWA6CiAqIGFuIEVTTS1vbmx5IHBhY2thZ2Ugd2hvc2UgYGV4cG9ydHNgIG1hcCBkZWNsYXJlcyBubyBgcmVxdWlyZWAgY29uZGl0aW9uCiAqIHRocm93cyBFUlJfUEFDS0FHRV9QQVRIX05PVF9FWFBPUlRFRCBvbiBhIHBlcmZlY3RseSBnb29kIGluc3RhbGwg4oCUIHRoZSBzYW1lCiAqIHRyYXAgZG9jdW1lbnRlZCBvbiBgaGFzSW5lcnRpYWAgaW4gdGhlIFZpdGUgcGx1Z2luLiBBIGRpcmVjdG9yeSBjaGVjayBpcwogKiBleHBvcnRzLW1hcC1hZ25vc3RpYy4KICovCmZ1bmN0aW9uIGlzSW5zdGFsbGVkRnJvbShkaXIsIG5hbWUpIHsKCWNvbnN0IHNlZ21lbnRzID0gbmFtZS5zcGxpdCgnLycpOwoJbGV0IGN1cnJlbnQgPSByZXNvbHZlKGRpcik7Cglmb3IgKDs7KSB7CgkJaWYgKGV4aXN0c1N5bmMoam9pbihjdXJyZW50LCAnbm9kZV9tb2R1bGVzJywgLi4uc2VnbWVudHMpKSkgcmV0dXJuIHRydWU7CgkJY29uc3QgcGFyZW50ID0gZGlybmFtZShjdXJyZW50KTsKCQlpZiAocGFyZW50ID09PSBjdXJyZW50KSByZXR1cm4gZmFsc2U7CgkJY3VycmVudCA9IHBhcmVudDsKCX0KfQoKLyoqCiAqIFdoaWNoIE1DUCBwZWVycyB0aGUgcHJvamVjdCBpcyBtaXNzaW5nLCBzbyBhIGNhbGxlciByZWdpc3RlcmluZyB0aGUgc2VydmVyCiAqIGNhbiBzYXkgc28gTk9XIHJhdGhlciB0aGFuIGxldCB0aGUgaGFybmVzcyBkaXNjb3ZlciBpdCBvbiBmaXJzdCBsYXVuY2gg4oCUIHRoZQogKiBjb25maWcgaXMgd3JpdHRlbiBieSBgYWktaW5pdCAtLW1jcGAgLyB0aGUgZGV2IHNlcnZlciwgYnV0IHRoZSBmYWlsdXJlIHdvdWxkCiAqIHN1cmZhY2UgbXVjaCBsYXRlciwgaW5zaWRlIGFuIGFnZW50LCBhcyBhIHNlcnZlciB0aGF0IHdvdWxkIG5vdCBzdGFydC4KICoKICogUmV0dXJucyBgW11gIHdoZW4gZXZlcnl0aGluZyBuZWVkZWQgaXMgcHJlc2VudC4KICovCmV4cG9ydCBmdW5jdGlvbiBtaXNzaW5nTWNwUGVlcnMocm9vdCkgewoJcmV0dXJuIE1DUF9QRUVSUy5maWx0ZXIoKG5hbWUpID0+ICFpc0luc3RhbGxlZEZyb20ocm9vdCwgbmFtZSkpOwp9CgovKioKICogSW52b2tlIHRoZSBJTlNUQUxMRUQgYmluYXJ5IGRpcmVjdGx5LCBuZXZlciBgbnB4YCAoMjAyNi0wOS0wOSwgc3VwZXJzZWRpbmcKICogdGhlIDIwMjYtMDgtMDYgcGlubmVkLW5weCBydWxpbmcg4oCUIHNlZSBiZWxvdykuCiAqCiAqIFRoZSAyMDI2LTA4LTA2IHJldmlldyBwaW5uZWQgdGhlIHNwZWMgdG8gdGhpcyBwYWNrYWdlJ3Mgb3duIHZlcnNpb24gYmVjYXVzZQogKiBNQ1AgaG9zdHMgc3Bhd24gdGhlIGVudHJ5IHdpdGggbm9uLVRUWSBzdGRpbywgd2hlcmUgYG5weGAgaW5zdGFsbHMgd2l0aG91dAogKiBwcm9tcHRpbmc6IGFuIHVucGlubmVkIGBucHggYml0Ym9zcy11aSBtY3BgIHdvdWxkIHNpbGVudGx5IGRvd25sb2FkIGFuZAogKiBleGVjdXRlIHdoYXRldmVyIGBiaXRib3NzLXVpQGxhdGVzdGAgcmVzb2x2ZWQgdG8sIGFuZCBhbnN3ZXIgZnJvbSBhCiAqIGRpZmZlcmVudCB2ZXJzaW9uJ3Mga25vd2xlZGdlIGJhc2UgdGhhbiB0aGUgcHJvamVjdCB1c2VzLgogKgogKiBUaGUgcGluIGZpeGVkIHRoYXQgYW5kIGJyb2tlIHRoZSBzZXJ2ZXIgb3V0cmlnaHQuIGBucHggYml0Ym9zcy11aUB4LnkueiBtY3BgCiAqIHJ1bnMgdGhlIHBhY2thZ2UgT1VUIE9GIFRIRSBOUFggQ0FDSEUsIGFuZCB0aGUgTUNQIGVudHJ5IHJlc29sdmVzIGl0cwogKiBvcHRpb25hbCBwZWVycyAoYEBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGtgLCBgem9kYCkgcmVsYXRpdmUgdG8gdGhlIHBhY2thZ2UKICogaXQgaXMgcnVubmluZyBmcm9tLiBUaGUgY2FjaGUgZGlyZWN0b3J5IG5ldmVyIGhhcyB0aGVtLCBzbyB0aGUgc2VydmVyIGNhbm5vdAogKiBzdGFydCBubyBtYXR0ZXIgd2hhdCB0aGUgcHJvamVjdCBoYXMgaW5zdGFsbGVkIOKAlCByZXBvcnRlZCBmcm9tIGEgY29uc3VtZXIKICogcHJvamVjdCB3aXRoIGJvdGggcGVlcnMgcHJlc2VudC4KICoKICogQSBwYXRoIHRvIHRoZSBsb2NhbCBiaW5hcnkgc2F0aXNmaWVzIHRoZSBvcmlnaW5hbCBydWxpbmcgTU9SRSBjb21wbGV0ZWx5CiAqIHRoYW4gdGhlIHBpbiBkaWQ6IGl0IGNhbm5vdCByZWFjaCB0aGUgcmVnaXN0cnkgYXQgYWxsLCBzbyB0aGVyZSBpcyBub3RoaW5nCiAqIHRvIGRvd25sb2FkIGFuZCBubyBgbGF0ZXN0YCB0byBkcmlmdCB0by4gSXQgYWxzbyByZXRpcmVzIHRoZSBwaW4ncyBvd24KICogbWFpbnRlbmFuY2UgcHJvYmxlbSwgd2hlcmUgYSBjb25maWcgd3JpdHRlbiBhdCBvbmUgdmVyc2lvbiBrZXB0IG5hbWluZyB0aGF0CiAqIHZlcnNpb24gYWZ0ZXIgYW4gdXBncmFkZSwgbGV0dGluZyBhbiBhZ2VudCBxdWVyeSBhIG1hbmlmZXN0IHRoYXQgZGlzYWdyZWVkCiAqIHdpdGggdGhlIGNvZGUgaXQgd2FzIHdyaXRpbmcgYWdhaW5zdC4gVGhlIGJpbmFyeSBvbiBkaXNrIElTIHRoZSBpbnN0YWxsZWQKICogdmVyc2lvbiwgYnkgY29uc3RydWN0aW9uLgogKi8KY29uc3QgQVJHUyA9IFtNQ1BfQklOX1BBVEgsICdtY3AnXTsKCmNvbnN0IHN0ZGlvRW50cnkgPSAoKSA9PiAoeyBjb21tYW5kOiBDT01NQU5ELCBhcmdzOiBbLi4uQVJHU10gfSk7CmNvbnN0IHZzY29kZUVudHJ5ID0gKCkgPT4gKHsKCXR5cGU6ICdzdGRpbycsCgljb21tYW5kOiBDT01NQU5ELAoJYXJnczogWy4uLkFSR1NdLAp9KTsKCmZ1bmN0aW9uIHdyaXRlSnNvbihwYXRoLCBkYXRhKSB7Cglta2RpclN5bmMoZGlybmFtZShwYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7Cgl3cml0ZUZpbGVTeW5jKHBhdGgsIGAke0pTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsICdcdCcpfVxuYCwgJ3V0Zi04Jyk7Cn0KCi8qKgogKiBNZXJnZSB0aGUgc2VydmVyIGVudHJ5IGludG8gYHBhdGhgJ3MgYDxjb250YWluZXJLZXk+YCBtYXAuIFJldHVybnMKICogYHsgcGF0aCwgbGFiZWwsIGFjdGlvbiB9YCB3aXRoIGFjdGlvbiDiiIggY3JlYXRlZHx1cGRhdGVkfHVuY2hhbmdlZHxza2lwcGVkLgogKi8KZnVuY3Rpb24gZW5zdXJlRW50cnkocGF0aCwgY29udGFpbmVyS2V5LCBlbnRyeSwgbGFiZWwpIHsKCWxldCBjb25maWcgPSB7fTsKCWNvbnN0IGV4aXN0ZWQgPSBleGlzdHNTeW5jKHBhdGgpOwoJaWYgKGV4aXN0ZWQpIHsKCQl0cnkgewoJCQljb25maWcgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhwYXRoLCAndXRmLTgnKSk7CgkJfSBjYXRjaCAoZXJyb3IpIHsKCQkJY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTsKCQkJcmV0dXJuIHsKCQkJCXBhdGgsCgkJCQlsYWJlbCwKCQkJCWFjdGlvbjogJ3NraXBwZWQnLAoJCQkJcmVhc29uOiBgaW52YWxpZCBKU09OICgke21lc3NhZ2V9KWAsCgkJCX07CgkJfQoJfQoJaWYgKCFjb25maWdbY29udGFpbmVyS2V5XSB8fCB0eXBlb2YgY29uZmlnW2NvbnRhaW5lcktleV0gIT09ICdvYmplY3QnKSB7CgkJY29uZmlnW2NvbnRhaW5lcktleV0gPSB7fTsKCX0KCgljb25zdCBwcmV2aW91cyA9IGNvbmZpZ1tjb250YWluZXJLZXldW01DUF9TRVJWRVJfTkFNRV07CglpZiAocHJldmlvdXMgJiYgSlNPTi5zdHJpbmdpZnkocHJldmlvdXMpID09PSBKU09OLnN0cmluZ2lmeShlbnRyeSkpIHsKCQlyZXR1cm4geyBwYXRoLCBsYWJlbCwgYWN0aW9uOiAndW5jaGFuZ2VkJyB9OwoJfQoKCWNvbmZpZ1tjb250YWluZXJLZXldW01DUF9TRVJWRVJfTkFNRV0gPSBlbnRyeTsKCXRyeSB7CgkJd3JpdGVKc29uKHBhdGgsIGNvbmZpZyk7Cgl9IGNhdGNoIChlcnJvcikgewoJCWNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7CgkJcmV0dXJuIHsgcGF0aCwgbGFiZWwsIGFjdGlvbjogJ3NraXBwZWQnLCByZWFzb246IG1lc3NhZ2UgfTsKCX0KCXJldHVybiB7IHBhdGgsIGxhYmVsLCBhY3Rpb246IGV4aXN0ZWQgPyAndXBkYXRlZCcgOiAnY3JlYXRlZCcgfTsKfQoKLyoqIENsYXVkZSBDb2RlIOKAlCBwcm9qZWN0LXJvb3QgYC5tY3AuanNvbmAuICovCmV4cG9ydCBjb25zdCB3cml0ZUNsYXVkZUNvZGVDb25maWcgPSAocm9vdCkgPT4KCWVuc3VyZUVudHJ5KAoJCWpvaW4ocm9vdCwgJy5tY3AuanNvbicpLAoJCSdtY3BTZXJ2ZXJzJywKCQlzdGRpb0VudHJ5KCksCgkJJ0NsYXVkZSBDb2RlJwoJKTsKCi8qKiBDdXJzb3Ig4oCUIHByb2plY3QgYC5jdXJzb3IvbWNwLmpzb25gLiAqLwpleHBvcnQgY29uc3Qgd3JpdGVDdXJzb3JDb25maWcgPSAocm9vdCkgPT4KCWVuc3VyZUVudHJ5KAoJCWpvaW4ocm9vdCwgJy5jdXJzb3InLCAnbWNwLmpzb24nKSwKCQknbWNwU2VydmVycycsCgkJc3RkaW9FbnRyeSgpLAoJCSdDdXJzb3InCgkpOwoKLyoqIFZTIENvZGUgLyBHaXRIdWIgQ29waWxvdCDigJQgcHJvamVjdCBgLnZzY29kZS9tY3AuanNvbmAgKGBzZXJ2ZXJzYCArIGB0eXBlYCkuICovCmV4cG9ydCBjb25zdCB3cml0ZVZzY29kZUNvbmZpZyA9IChyb290KSA9PgoJZW5zdXJlRW50cnkoCgkJam9pbihyb290LCAnLnZzY29kZScsICdtY3AuanNvbicpLAoJCSdzZXJ2ZXJzJywKCQl2c2NvZGVFbnRyeSgpLAoJCSdWUyBDb2RlIC8gQ29waWxvdCcKCSk7CgovKioKICogV2luZHN1cmYg4oCUIENhc2NhZGUgb25seSByZWFkcyBhIEdMT0JBTCBjb25maWc7IHRoZXJlIGlzIG5vIHByb2plY3Qgc2NvcGUsIHNvCiAqIHRoaXMgd3JpdGVzIHRvIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgYW5kIGFmZmVjdHMgYWxsIHRoZWlyIHByb2plY3RzLgogKi8KZXhwb3J0IGNvbnN0IHdyaXRlV2luZHN1cmZDb25maWcgPSAoKSA9PgoJZW5zdXJlRW50cnkoCgkJam9pbihob21lZGlyKCksICcuY29kZWl1bScsICd3aW5kc3VyZicsICdtY3BfY29uZmlnLmpzb24nKSwKCQknbWNwU2VydmVycycsCgkJc3RkaW9FbnRyeSgpLAoJCSdXaW5kc3VyZiAoZ2xvYmFsKScKCSk7CgovKioKICogUmVnaXN0ZXIgdGhlIHNlcnZlciBhY3Jvc3MgaGFybmVzc2VzLiBQcm9qZWN0LXNjb3BlZCBoYXJuZXNzZXMgYWx3YXlzIHJ1bjsKICogV2luZHN1cmYgKGdsb2JhbCwgaG9tZS1kaXIpIGlzIG9wdC1pbiB2aWEgYGluY2x1ZGVXaW5kc3VyZmAgYmVjYXVzZSB3cml0aW5nCiAqIGl0IGFmZmVjdHMgZXZlcnkgcHJvamVjdCBvbiB0aGUgbWFjaGluZSDigJQgYXBwcm9wcmlhdGUgZm9yIHRoZSBleHBsaWNpdAogKiBgYWktaW5pdCAtLW1jcGAgY29tbWFuZCwgYnV0IG5vdCBmb3IgYSBzaWxlbnQgZGV2LXNlcnZlciBib290LgogKi8KZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU1jcENvbmZpZ3Mocm9vdCwgeyBpbmNsdWRlV2luZHN1cmYgPSBmYWxzZSB9ID0ge30pIHsKCWNvbnN0IHJlc3VsdHMgPSBbCgkJd3JpdGVDbGF1ZGVDb2RlQ29uZmlnKHJvb3QpLAoJCXdyaXRlQ3Vyc29yQ29uZmlnKHJvb3QpLAoJCXdyaXRlVnNjb2RlQ29uZmlnKHJvb3QpLAoJXTsKCWlmIChpbmNsdWRlV2luZHN1cmYpIHJlc3VsdHMucHVzaCh3cml0ZVdpbmRzdXJmQ29uZmlnKCkpOwoJcmV0dXJuIHJlc3VsdHM7Cn0K", "" + import.meta.url).href
529
514
  ), i = n(e, { includeWindsurf: !1 }), a = i.filter((e) => e.action === "created" || e.action === "updated");
530
515
  for (let e of a) t.info(`[bitboss-ui] MCP: ${e.action} config for ${e.label}`);
531
516
  for (let e of i.filter((e) => e.action === "skipped")) t.warn(`[bitboss-ui] MCP: skipped ${e.label}${e.reason ? ` (${e.reason})` : ""}`);
@@ -537,29 +522,60 @@ async function et(e, t) {
537
522
  t.warn(`[bitboss-ui] MCP: could not register dev server (${n})`);
538
523
  }
539
524
  }
540
- function tt(t) {
541
- let n = {
525
+ function dt(e) {
526
+ let t = {
542
527
  iconDir: "./assets/icons",
543
- ...t
544
- }, r, i = !1, a = [], o = [], s = [], { enabled: c, defaultLocale: l, warnings: u } = O({
545
- locale: n.locale,
546
- enabledLocales: n.enabledLocales,
547
- customLocaleKeys: a
548
- }), p = j([...c, ...a]), m = /* @__PURE__ */ new Map(), h = /* @__PURE__ */ new Map(), _ = /* @__PURE__ */ new Set(), v = () => {
549
- m.clear(), h.clear(), _ = ie(r);
550
- for (let e of re(r)) m.set(e.prefix, e), h.set(e.prefix, (t) => te(e.prefix, t));
528
+ ...e
551
529
  };
530
+ if ("cssLayers" in t && t.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.");
531
+ let r = n(t.cssLayers, { resetCss: t.resetCss ?? !1 });
532
+ if (r) throw Error(r);
533
+ let a, o = !1, s, c = {
534
+ info: (e) => console.warn(e),
535
+ warn: (e) => console.warn(e)
536
+ }, d = [], f = [], p = [], { enabled: m, defaultLocale: h, warnings: _ } = F({
537
+ locale: t.locale,
538
+ enabledLocales: t.enabledLocales,
539
+ customLocaleKeys: d
540
+ }), v = R([...m, ...d]), b = /* @__PURE__ */ new Map(), x = /* @__PURE__ */ new Map(), S = /* @__PURE__ */ new Set(), te = () => {
541
+ b.clear(), x.clear(), S = oe(a);
542
+ for (let e of ae(a)) b.set(e.prefix, e), x.set(e.prefix, (t) => ie(e.prefix, t));
543
+ T = null, D = null;
544
+ }, w = (e, t) => {
545
+ let n = b.get(e);
546
+ if (!n) return !1;
547
+ let r = x.get(e);
548
+ return C(n, t) !== null && (!r || r(t));
549
+ }, T = null, D = null, O = null, k = () => D || (D = (async () => {
550
+ let e = t.iconsScanner ?? {}, n = JSON.stringify({
551
+ version: ce(M),
552
+ sets: Array.from(b.entries()).map(([e, t]) => [e, t.lastModified ?? 0]).sort(([e], [t]) => e < t ? -1 : +(e > t)),
553
+ include: e.include ?? [],
554
+ exclude: e.exclude ?? [],
555
+ maxFileSize: e.maxFileSize ?? null
556
+ }), r = new i({
557
+ root: a,
558
+ outDir: s ?? y(a, "dist"),
559
+ scanner: e,
560
+ prefixes: Array.from(b.keys()),
561
+ resolves: w,
562
+ cacheFile: l(a),
563
+ cacheKey: n
564
+ }), o = await r.scan();
565
+ if (o.cold && c.info(`[bitboss-ui] icon scan: ${o.files} files in ${o.elapsed}ms${o.workers ? ` on ${o.workers} threads` : ""} (${r.icons.size} provider icons referenced)`), T = r, O) for (let e of r.includeDirs) O.add(e);
566
+ return r;
567
+ })(), D);
552
568
  return {
553
569
  name: "bitboss-ui:icon-registry",
554
570
  config(e) {
555
- let t = e.optimizeDeps?.include ?? [], n = e.optimizeDeps?.exclude ?? [], r = P(e.root ?? process.cwd()) ? [...L, He] : L, i = p.found.map(({ pack: e }) => `dayjs/locale/${e}`), a = (e.build?.assetsDir ?? "assets").replace(/\/+$/, ""), o = e.build?.rollupOptions?.output, s = (Array.isArray(o) ? o[0] : o)?.chunkFileNames;
571
+ let t = e.optimizeDeps?.include ?? [], n = e.optimizeDeps?.exclude ?? [], r = V(e.root ?? process.cwd()) ? [...W, Ge] : W, i = v.found.map(({ pack: e }) => `dayjs/locale/${e}`), a = (e.build?.assetsDir ?? "assets").replace(/\/+$/, ""), o = e.build?.rollupOptions?.output, s = (Array.isArray(o) ? o[0] : o)?.chunkFileNames;
556
572
  return {
557
573
  optimizeDeps: {
558
574
  include: [...r, ...i].filter((e) => !t.includes(e)),
559
- exclude: R.filter((e) => !n.includes(e))
575
+ exclude: G.filter((e) => !n.includes(e))
560
576
  },
561
577
  build: { rollupOptions: { output: { chunkFileNames(e) {
562
- if (e.facadeModuleId?.startsWith($)) {
578
+ if (e.facadeModuleId?.startsWith(lt)) {
563
579
  let t = e.facadeModuleId.slice(17);
564
580
  return `${a}/icons/${t.replace("/", "_")}-[hash].js`;
565
581
  }
@@ -568,20 +584,20 @@ function tt(t) {
568
584
  };
569
585
  },
570
586
  configResolved(e) {
571
- r = e.root, i = e.command === "build";
587
+ a = e.root, o = e.command === "build", s = y(a, e.build?.outDir ?? "dist"), e.logger && (c = e.logger);
572
588
  },
573
589
  resolveId(e) {
574
- if (e === Ue) return z;
575
- if (e === We) return B;
576
- if (e === Ge) return V;
577
- if (e === Ke) return H;
578
- if (e === qe) return U;
579
- if (e === Je) return W;
580
- if (e.startsWith(Q)) return "\0" + e;
590
+ if (e === Ke) return K;
591
+ if (e === qe) return q;
592
+ if (e === Je) return J;
593
+ if (e === Ye) return Y;
594
+ if (e === Xe) return Ze;
595
+ if (e === Qe) return $e;
596
+ if (e.startsWith(ct)) return "\0" + e;
581
597
  },
582
598
  async load(e) {
583
- if (e === B) {
584
- let { iconDir: e, enabledLocales: t, ...r } = n, i = {
599
+ if (e === q) {
600
+ let { iconDir: e, enabledLocales: n, ...r } = t, i = {
585
601
  inertiaLinkName: "Link",
586
602
  nuxtLinkName: "NuxtLink",
587
603
  linkActiveClass: "router-link-active",
@@ -593,11 +609,12 @@ function tt(t) {
593
609
  locale: "it",
594
610
  injectStyles: !0,
595
611
  resetCss: !1,
612
+ cssLayers: void 0,
596
613
  injectDirectives: !0,
597
614
  requiredAsterisk: !1,
598
615
  toastPosition: "bottom-right",
599
616
  ...r,
600
- defaultLocale: l,
617
+ defaultLocale: h,
601
618
  iconDefaultSizes: {
602
619
  xs: 12,
603
620
  sm: 16,
@@ -628,100 +645,107 @@ function tt(t) {
628
645
  };
629
646
  return `import { reactive } from 'vue';\nexport const config = reactive(${JSON.stringify(i)});\n`;
630
647
  }
631
- if (e === H) return k(c);
632
- if (e === V) return M(p.found);
633
- if (e === U) return `export default ${JSON.stringify(Ye())};`;
634
- if (e === W) return F(P(r));
635
- if (e.startsWith($)) {
636
- let t = e.slice(17), n = t.indexOf("/"), r = t.slice(0, n), i = t.slice(n + 1), a = m.get(r);
648
+ if (e === Y) return I(m);
649
+ if (e === J) return z(v.found);
650
+ if (e === Ze) return `export default ${JSON.stringify(et())};`;
651
+ if (e === $e) return H(V(a));
652
+ if (e.startsWith(lt)) {
653
+ let t = e.slice(17), n = t.indexOf("/"), r = t.slice(0, n), i = t.slice(n + 1), a = b.get(r);
637
654
  a || this.error(`[bitboss-ui] cannot load "${r}:${i}" — @iconify-json/${r} is not installed.\n Run: npm install -D @iconify-json/${r}`);
638
- let o = g(a, i);
639
- return o || this.error(`[bitboss-ui] icon "${i}" does not exist in the ${r} icon set`), `export default ${JSON.stringify(ee(o))};`;
655
+ let o = C(a, i);
656
+ return o || this.error(`[bitboss-ui] icon "${i}" does not exist in the ${r} icon set`), `export default ${JSON.stringify(re(o))};`;
640
657
  }
641
- if (e !== z) return;
642
- let t = f(r, n.iconDir), a = "/" + d(r, t).replace(/\\/g, "/") + "/**/*.svg", o = JSON.stringify(Array.from(m.entries()).map(([e, t]) => [e, t.lastModified ?? 0]).sort(([e], [t]) => e < t ? -1 : +(e > t))), s = i ? await ce(r, o, m, h) : Array.from(m.entries()).flatMap(([e, t]) => {
643
- let n = h.get(e) ?? (() => !0);
644
- return [...Object.keys(t.icons), ...Object.keys(t.aliases ?? {})].filter((e) => n(e) && g(t, e) !== null).map((t) => `${e}:${t}`);
645
- }), u = Array.from(s).flatMap((e) => {
646
- let t = b(e);
647
- return t ? [`\t${JSON.stringify(e)}: () => import(${JSON.stringify(Q + t.prefix + "/" + t.name)}).then(m => m.default),`] : [];
648
- }).join("\n");
649
- return `const _local = import.meta.glob(${JSON.stringify(a)}, { 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` + (u ? u + "\n" : "") + `\t..._localIcons,\n};\nconst _ip = new Set(${JSON.stringify(Array.from(_))});\nconst _loaded = new Set(${JSON.stringify(Array.from(m.keys()))});\nconst _installed = _loaded.size ? \`installed sets: \${[..._loaded].join(', ')}\` : 'no @iconify-json/* set is installed';\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 = import.meta.env.DEV\n\t? new Proxy(_icons, {\n\t\tget(t, k) {\n\t\t\tif (k in t || typeof k !== 'string' || !k.includes(':')) return t[k];\n\t\t\tconst _c = k.indexOf(':'); const _p = k.slice(0, _c); const _n = k.slice(_c + 1);\n\t\t\tif (_p === 'local' || !/^[a-z][a-z0-9-]*$/.test(_p) || !/^[a-z][a-z0-9-]*$/.test(_n)) return undefined;\n\t\t\tif (_loaded.has(_p)) { const _names = Object.keys(t).filter(x => x.startsWith(_p + ':')).map(x => x.slice(_c + 1)); const _sq = _n.replace(/-/g, ''); 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); return _fail(\`[bitboss-ui] icon "\${k}" does not exist in the \${_p} icon set\` + (_sug ? \` — did you mean "\${_p}:\${_sug}"?\` : '')); }\n\t\t\tconst _pkg = \`@iconify-json/\${_p}\`; const _cmd = \`run: npm install -D \${_pkg}\`;\n\t\t\tif (_ip.has(_p)) return _fail(\`[bitboss-ui] "\${k}" requires "\${_pkg}" — \${_cmd} (\${_installed})\`);\n\t\t\tif (_ip.size) return _fail(\`[bitboss-ui] "\${k}" — "\${_p}" is neither an installed icon set nor a known Iconify prefix (\${_installed})\`);\n\t\t\treturn _fail(\`[bitboss-ui] "\${k}" — no installed icon set has the prefix "\${_p}" (\${_installed}). If "\${_p}" is an Iconify set, \${_cmd}\`);\n\t\t},\n\t})\n\t: _icons;\n`;
658
+ if (e !== K) return;
659
+ let n = y(a, t.iconDir), r = "/" + ee(a, n).replace(/\\/g, "/") + "/**/*.svg", i = await k(), s = j(t.iconWhitelist ?? [], b, x, S);
660
+ s.errors.length > 0 && this.error(s.errors.length === 1 ? s.errors[0] : `[bitboss-ui] iconWhitelist has ${s.errors.length} entries that do not resolve:\n - ${s.errors.map((e) => e.replace(/^\[bitboss-ui\] /, "")).join("\n - ")}`);
661
+ let c = /* @__PURE__ */ new Set([...i.icons, ...s.icons]), l = Array.from(c).sort().flatMap((e) => {
662
+ let t = ne(e);
663
+ return t ? [`\t${JSON.stringify(e)}: () => import(${JSON.stringify(ct + t.prefix + "/" + t.name)}).then(m => m.default),`] : [];
664
+ }).join("\n"), u = o ? null : Object.fromEntries(Array.from(b.entries()).map(([e, t]) => [e, A(t, x.get(e))]));
665
+ return `const _local = import.meta.glob(${JSON.stringify(r)}, { 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` + (l ? l + "\n" : "") + `\t..._localIcons,\n};\nconst _ip = new Set(${JSON.stringify(Array.from(S))});\nconst _loaded = new Set(${JSON.stringify(Array.from(b.keys()))});\nconst _all = ${u ? JSON.stringify(u) : "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`;
650
666
  },
651
667
  buildStart() {
652
- v(), q(f(r, n.iconDir), r), !i && n.vscodeSettings !== !1 && Z(r, {
668
+ te(), Q(y(a, t.iconDir), a), !o && t.vscodeSettings !== !1 && st(a, {
653
669
  info: (e) => this.info(e),
654
670
  warn: (e) => this.warn(e)
655
671
  });
656
- for (let e of o) this.warn(e);
657
- for (let e of u) this.warn(e);
658
- for (let e of s) this.warn(e);
659
- for (let e of p.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`);
660
- n.locale && !e.includes(n.locale) && !a.includes(n.locale) && this.warn(`[bitboss-ui] \`locale: '${n.locale}'\` is not a built-in locale — the library ships ${e.length} dictionaries. Strings fall back to the default locale.`), x(_e, A([...c, ...a], Ee));
661
- let t = [
672
+ for (let e of f) this.warn(e);
673
+ for (let e of _) this.warn(e);
674
+ for (let e of p) this.warn(e);
675
+ for (let e of v.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`);
676
+ t.locale && !u.includes(t.locale) && !d.includes(t.locale) && this.warn(`[bitboss-ui] \`locale: '${t.locale}'\` is not a built-in locale — the library ships ${u.length} dictionaries. Strings fall back to the default locale.`), E(ve, L([...m, ...d], Oe));
677
+ let e = [
662
678
  {
663
- defaults: Me,
664
- custom: n.buttonVariants,
679
+ defaults: Pe,
680
+ custom: t.buttonVariants,
665
681
  outputPath: le,
666
- module: ve,
682
+ module: ye,
667
683
  registryName: "ButtonVariantRegistry"
668
684
  },
669
685
  {
670
- defaults: Ne,
671
- custom: n.alertVariants,
686
+ defaults: Fe,
687
+ custom: t.alertVariants,
672
688
  outputPath: ue,
673
- module: ye,
689
+ module: be,
674
690
  registryName: "AlertVariantRegistry"
675
691
  },
676
692
  {
677
- defaults: Pe,
678
- custom: n.badgeVariants,
693
+ defaults: Ie,
694
+ custom: t.badgeVariants,
679
695
  outputPath: de,
680
- module: be,
696
+ module: xe,
681
697
  registryName: "BadgeVariantRegistry"
682
698
  },
683
699
  {
684
- defaults: Fe,
685
- custom: n.confirmVariants,
700
+ defaults: Le,
701
+ custom: t.confirmVariants,
686
702
  outputPath: fe,
687
- module: xe,
703
+ module: Se,
688
704
  registryName: "ConfirmVariantRegistry"
689
705
  },
690
706
  {
691
- defaults: Ie,
692
- custom: n.dropdownItemVariants,
707
+ defaults: Re,
708
+ custom: t.dropdownItemVariants,
693
709
  outputPath: pe,
694
- module: Se,
710
+ module: Ce,
695
711
  registryName: "DropdownItemVariantRegistry"
696
712
  },
697
713
  {
698
- defaults: Le,
699
- custom: n.tooltipVariants,
714
+ defaults: ze,
715
+ custom: t.tooltipVariants,
700
716
  outputPath: me,
701
- module: Ce,
717
+ module: we,
702
718
  registryName: "TooltipVariantRegistry"
703
719
  },
704
720
  {
705
- defaults: Re,
706
- custom: n.toastVariants,
721
+ defaults: Be,
722
+ custom: t.toastVariants,
707
723
  outputPath: he,
708
- module: we,
724
+ module: Te,
709
725
  registryName: "ToastVariantRegistry"
710
726
  },
711
727
  {
712
- defaults: ze,
713
- custom: n.indicatorVariants,
728
+ defaults: Ve,
729
+ custom: t.indicatorVariants,
714
730
  outputPath: ge,
715
- module: Te,
731
+ module: Ee,
716
732
  registryName: "IndicatorVariantRegistry"
733
+ },
734
+ {
735
+ defaults: He,
736
+ custom: t.inputVariants,
737
+ outputPath: _e,
738
+ module: De,
739
+ registryName: "InputVariantRegistry"
717
740
  }
718
741
  ];
719
- for (let e of t) x(e.outputPath, I(Be(e.defaults, e.custom), e.module, e.registryName));
742
+ for (let t of e) E(t.outputPath, U(Ue(t.defaults, t.custom), t.module, t.registryName));
720
743
  },
721
744
  configureServer(e) {
722
- n.mcp && et(e.config.root, e.config.logger);
723
- let t = f(e.config.root, n.iconDir), r = (e) => e.startsWith(t) && e.endsWith(".svg");
745
+ t.mcp && ut(e.config.root, e.config.logger);
746
+ let n = y(e.config.root, t.iconDir), r = (e) => e.startsWith(n) && e.endsWith(".svg");
724
747
  e.ws.on("bitboss-ui:icon-missing", (t) => {
748
+ if (process.env.VITEST || e.config.mode === "test") return;
725
749
  let n = t.stack ? t.stack.replace(/^Error/, `Error: ${t.msg}`) : `Error: ${t.msg}`;
726
750
  e.ws.send({
727
751
  type: "error",
@@ -731,15 +755,41 @@ function tt(t) {
731
755
  plugin: "bitboss-ui"
732
756
  }
733
757
  });
734
- }), e.watcher.on("add", (n) => {
735
- r(n) && q(t, e.config.root);
736
- }), e.watcher.on("unlink", (n) => {
737
- r(n) && q(t, e.config.root);
738
- }), e.watcher.on("change", (n) => {
739
- r(n) && q(t, e.config.root);
758
+ });
759
+ let i = async () => {
760
+ let t = e.moduleGraph.getModuleById(K);
761
+ t && await e.reloadModule(t);
762
+ }, a, o = () => {
763
+ clearTimeout(a), a = setTimeout(() => void T?.persist(), 500);
764
+ }, s = Promise.resolve(), l = (e, t) => {
765
+ s = s.then(async () => {
766
+ if (!T) return;
767
+ let n;
768
+ if (g(t) === ".gitignore") {
769
+ let e = T.icons;
770
+ T.resetGitignores(), await T.scan();
771
+ let t = T.icons;
772
+ n = e.size !== t.size || [...e].some((e) => !t.has(e));
773
+ } else n = e === "unlink" ? T.removeFile(t) : await T.updateFile(t);
774
+ o(), n && await i();
775
+ }).catch((e) => {
776
+ c.warn(`[bitboss-ui] icon scan: could not update ${t} (${e instanceof Error ? e.message : String(e)})`);
777
+ });
778
+ };
779
+ if (O = e.watcher, T) for (let e of T.includeDirs) O.add(e);
780
+ for (let t of [
781
+ "add",
782
+ "change",
783
+ "unlink"
784
+ ]) e.watcher.on(t, (i) => {
785
+ if (r(i)) {
786
+ Q(n, e.config.root);
787
+ return;
788
+ }
789
+ l(t, i);
740
790
  });
741
791
  }
742
792
  };
743
793
  }
744
794
  //#endregion
745
- export { e as BUILTIN_LOCALE_KEYS, R as REQUIRED_OPTIMIZE_DEPS_EXCLUDE, L as REQUIRED_OPTIMIZE_DEPS_INCLUDE, tt as bitbossUi, w as collectSourceFiles, M as generateDayjsLocalesModule, F as generateLinkModule, A as generateLocaleRegistryDts, k as generateLocalesModule, I as generateVariantsDts, P as hasInertia, j as resolveDayjsLocales, O as resolveEnabledLocales, J as stripJsonComments, Z as updateVscodeSettings };
795
+ export { e as BB_LAYERS, u as BUILTIN_LOCALE_KEYS, r as DEFAULT_MAX_FILE_SIZE, i as IconScanner, G as REQUIRED_OPTIMIZE_DEPS_EXCLUDE, W as REQUIRED_OPTIMIZE_DEPS_INCLUDE, t as TAILWIND_V4_LAYERS, dt as bitbossUi, k as diagnoseMissingIcon, j as expandIconWhitelist, a as extractIconCandidates, z as generateDayjsLocalesModule, H as generateLinkModule, L as generateLocaleRegistryDts, I as generateLocalesModule, U as generateVariantsDts, V as hasInertia, c as iconLiteralRegExp, l as iconScanCacheFile, R as resolveDayjsLocales, F as resolveEnabledLocales, rt as stripJsonComments, st as updateVscodeSettings };