@stacksjs/stx 0.2.94 → 0.2.96

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 (614) hide show
  1. package/dist/a11y.js +598 -2
  2. package/dist/analytics.js +159 -2
  3. package/dist/analyzer.js +240 -2
  4. package/dist/animation.js +688 -2
  5. package/dist/app-shell.js +220 -2
  6. package/dist/app.js +79 -2
  7. package/dist/assets.js +155 -2
  8. package/dist/ast.js +630 -2
  9. package/dist/async-components.js +428 -2
  10. package/dist/auth.js +12 -2
  11. package/dist/broadcasting.js +102 -2
  12. package/dist/browser-composables.js +565 -2
  13. package/dist/build-assets.js +29 -2
  14. package/dist/build-mode-detector.js +50 -2
  15. package/dist/build-optimizer.js +433 -2
  16. package/dist/build-views.js +180 -2
  17. package/dist/build.js +33 -2
  18. package/dist/builtins/drawer.js +37 -2
  19. package/dist/builtins/escape.js +3 -2
  20. package/dist/builtins/icon.js +83 -2
  21. package/dist/builtins/index.js +34 -2
  22. package/dist/builtins/modal.js +38 -2
  23. package/dist/builtins/safe-image.js +51 -2
  24. package/dist/builtins/stx-image.js +200 -2
  25. package/dist/builtins/stx-link.js +41 -2
  26. package/dist/builtins/stx-loading-indicator.js +35 -2
  27. package/dist/builtins/suspense.js +24 -2
  28. package/dist/builtins/toast.js +42 -2
  29. package/dist/builtins/tooltip.js +106 -2
  30. package/dist/builtins/transition-group.js +22 -2
  31. package/dist/bundle-analyzer/collector.js +233 -2
  32. package/dist/bundle-analyzer/index.js +82 -2
  33. package/dist/bundle-analyzer/report.js +318 -2
  34. package/dist/bundle-analyzer/treemap.js +594 -2
  35. package/dist/caching.js +131 -2
  36. package/dist/cli.js +11317 -10982
  37. package/dist/client/directive.js +14 -2
  38. package/dist/client/index.js +2 -2
  39. package/dist/client-helpers.js +312 -2
  40. package/dist/client-script-bundler.js +216 -6
  41. package/dist/client-script.js +754 -2
  42. package/dist/client.js +73 -4
  43. package/dist/component-hmr.js +585 -2
  44. package/dist/component-library.d.ts +6 -0
  45. package/dist/component-library.js +683 -0
  46. package/dist/component-processing.js +613 -2
  47. package/dist/component-registry.js +90 -2
  48. package/dist/component-renderer.js +660 -2
  49. package/dist/components.js +213 -2
  50. package/dist/composables/index.js +220 -2
  51. package/dist/composables/use-battery.js +101 -2
  52. package/dist/composables/use-broadcast-channel.js +80 -2
  53. package/dist/composables/use-channel.js +124 -2
  54. package/dist/composables/use-clipboard.js +79 -2
  55. package/dist/composables/use-color-mode.js +131 -2
  56. package/dist/composables/use-cookie.js +86 -2
  57. package/dist/composables/use-device-orientation.js +181 -2
  58. package/dist/composables/use-event-listener.js +27 -2
  59. package/dist/composables/use-event-source.js +166 -2
  60. package/dist/composables/use-eye-dropper.js +142 -2
  61. package/dist/composables/use-fetch.js +223 -2
  62. package/dist/composables/use-fullscreen.js +110 -2
  63. package/dist/composables/use-geolocation.js +101 -2
  64. package/dist/composables/use-idle.js +182 -2
  65. package/dist/composables/use-intersection-observer.js +168 -2
  66. package/dist/composables/use-keyboard.js +224 -2
  67. package/dist/composables/use-media-query.js +62 -2
  68. package/dist/composables/use-meta.js +48 -2
  69. package/dist/composables/use-mouse.js +286 -2
  70. package/dist/composables/use-mutation-observer.js +129 -2
  71. package/dist/composables/use-network.js +85 -2
  72. package/dist/composables/use-notification.js +94 -2
  73. package/dist/composables/use-permissions.js +132 -2
  74. package/dist/composables/use-query.js +0 -1
  75. package/dist/composables/use-resize-observer.js +157 -2
  76. package/dist/composables/use-router.js +51 -2
  77. package/dist/composables/use-share.js +104 -2
  78. package/dist/composables/use-speech.js +294 -2
  79. package/dist/composables/use-storage.js +130 -2
  80. package/dist/composables/use-text-selection.js +205 -4
  81. package/dist/composables/use-timer.js +183 -2
  82. package/dist/composables/use-utilities.js +176 -2
  83. package/dist/composables/use-wake-lock.js +122 -2
  84. package/dist/composables/use-websocket.js +165 -2
  85. package/dist/composables/use-window.js +163 -2
  86. package/dist/composables.js +552 -2
  87. package/dist/composition-api.js +190 -2
  88. package/dist/computed.js +376 -8
  89. package/dist/conditionals.js +599 -2
  90. package/dist/config.js +751 -2
  91. package/dist/craft-bridge.js +432 -2
  92. package/dist/craft-compiler.js +810 -2
  93. package/dist/craft-components.js +945 -2
  94. package/dist/craft-entry.js +5 -2
  95. package/dist/craft-ssr.js +559 -2
  96. package/dist/csp.js +220 -2
  97. package/dist/csrf.js +38 -2
  98. package/dist/custom-directives.js +136 -2
  99. package/dist/defer.js +156 -2
  100. package/dist/deploy/config-generators.js +214 -2
  101. package/dist/deploy/index.js +203 -2
  102. package/dist/deploy/netlify.js +167 -2
  103. package/dist/dev-server/crosswind.js +379 -2
  104. package/dist/dev-server/index.js +7 -2
  105. package/dist/dev-server/keyboard-shortcuts.js +81 -2
  106. package/dist/dev-server/native-window.js +91 -2
  107. package/dist/dev-server/port-utils.js +40 -2
  108. package/dist/dev-server/serve-app.js +682 -7
  109. package/dist/dev-server/serve-file.js +439 -7
  110. package/dist/dev-server/serve-markdown.js +281 -2
  111. package/dist/dev-server/serve-multi.js +424 -17
  112. package/dist/dev-server/terminal-colors.js +45 -2
  113. package/dist/dev-server/theme-selector.js +111 -2
  114. package/dist/dev-server/types.js +43 -2
  115. package/dist/dev-server.js +4 -2
  116. package/dist/devtools.js +462 -18
  117. package/dist/directive-api.js +355 -2
  118. package/dist/docs.js +567 -2
  119. package/dist/doctor.js +123 -2
  120. package/dist/document-shell.js +105 -2
  121. package/dist/dynamic-components.js +78 -2
  122. package/dist/edge-runtime.js +539 -2
  123. package/dist/env.js +9 -2
  124. package/dist/error-boundaries.js +62 -12
  125. package/dist/error-handling.js +1 -2
  126. package/dist/errors/codes.js +97 -2
  127. package/dist/errors/formatter.js +196 -2
  128. package/dist/errors/index.js +44 -2
  129. package/dist/errors/logger.js +250 -2
  130. package/dist/errors/sanitizer.js +181 -2
  131. package/dist/errors/types.js +86 -2
  132. package/dist/events.js +382 -2
  133. package/dist/expressions.js +650 -2
  134. package/dist/formatter.js +265 -2
  135. package/dist/forms-validation.js +510 -4
  136. package/dist/forms.js +709 -2
  137. package/dist/head.js +224 -2
  138. package/dist/heatmap.js +566 -2
  139. package/dist/hot-reload.js +367 -2
  140. package/dist/html-masking.js +73 -2
  141. package/dist/hydration-runtime.js +195 -2
  142. package/dist/hydration.js +654 -2
  143. package/dist/i18n.js +633 -2
  144. package/dist/image-optimization/auto-sibling.js +88 -2
  145. package/dist/image-optimization/build-plugin.js +241 -2
  146. package/dist/image-optimization/component.js +244 -2
  147. package/dist/image-optimization/directive.js +203 -2
  148. package/dist/image-optimization/index.js +54 -2
  149. package/dist/image-optimization/processor.js +262 -2
  150. package/dist/image-optimization/serve.js +102 -2
  151. package/dist/includes.js +733 -2
  152. package/dist/index.d.ts +1 -0
  153. package/dist/index.js +134 -2
  154. package/dist/init.js +505 -2
  155. package/dist/inline-assets.js +82 -2
  156. package/dist/interactive.js +383 -2
  157. package/dist/internal-markdown.js +141 -2
  158. package/dist/island-chunking.js +52 -2
  159. package/dist/js-ts.js +57 -2
  160. package/dist/jsx-runtime.js +289 -2
  161. package/dist/keep-alive.js +421 -2
  162. package/dist/lazy-loader.js +245 -2
  163. package/dist/loading-indicator.js +322 -2
  164. package/dist/loops.js +643 -2
  165. package/dist/manifest.js +31 -2
  166. package/dist/markdown.js +68 -2
  167. package/dist/media/client/blur-up.js +217 -2
  168. package/dist/media/client/index.js +53 -2
  169. package/dist/media/client/lazy-load.js +283 -2
  170. package/dist/media/client/upload-handler.js +354 -2
  171. package/dist/media/image/component.js +574 -2
  172. package/dist/media/image/directive.js +160 -2
  173. package/dist/media/image/editing.js +193 -2
  174. package/dist/media/image/index.js +80 -2
  175. package/dist/media/image/placeholder.js +188 -2
  176. package/dist/media/image/processor/cache.js +51 -2
  177. package/dist/media/image/processor/index.js +3 -2
  178. package/dist/media/image/processor/optimizer.js +202 -2
  179. package/dist/media/image/processor/responsive.js +162 -2
  180. package/dist/media/image/srcset.js +194 -2
  181. package/dist/media/index.js +198 -2
  182. package/dist/media/manager/embed.js +253 -2
  183. package/dist/media/protected/component.js +235 -2
  184. package/dist/media/protected/index.js +20 -2
  185. package/dist/media/protected/signature.js +205 -2
  186. package/dist/media/shared/cache.js +132 -2
  187. package/dist/media/shared/hash.js +35 -2
  188. package/dist/media/shared/index.js +2 -2
  189. package/dist/media/types.js +0 -1
  190. package/dist/media/upload/component.js +320 -2
  191. package/dist/media/upload/index.js +1 -2
  192. package/dist/media/video/directive.js +142 -2
  193. package/dist/media/video/index.js +583 -2
  194. package/dist/media/video/processor/cache.js +52 -2
  195. package/dist/media/video/processor/index.js +4 -2
  196. package/dist/media/video/processor/streaming.js +197 -2
  197. package/dist/media/video/processor/thumbnail.js +134 -2
  198. package/dist/media/video/processor/transcoder.js +283 -2
  199. package/dist/method-spoofing.js +17 -2
  200. package/dist/middleware.js +40 -2
  201. package/dist/misc-directives.js +222 -2
  202. package/dist/native-build.js +511 -2
  203. package/dist/parser/directive-parser.js +239 -2
  204. package/dist/parser/expression-parser.js +358 -2
  205. package/dist/parser/index.js +23 -2
  206. package/dist/parser/tokenizer.js +534 -2
  207. package/dist/partial-hydration.js +427 -2
  208. package/dist/performance-utils.js +430 -2
  209. package/dist/placeholder.js +35 -2
  210. package/dist/plugin-system.js +214 -2
  211. package/dist/plugin.js +173 -2
  212. package/dist/precompiler.js +660 -81
  213. package/dist/process.js +711 -2
  214. package/dist/production-build.js +596 -2
  215. package/dist/production-builder.js +132 -2
  216. package/dist/production-server.js +188 -2
  217. package/dist/props.js +224 -2
  218. package/dist/public-env.js +19 -2
  219. package/dist/pwa/audit.js +255 -2
  220. package/dist/pwa/directives.js +332 -2
  221. package/dist/pwa/icons.js +109 -2
  222. package/dist/pwa/index.js +47 -2
  223. package/dist/pwa/inject.js +102 -2
  224. package/dist/pwa/manifest.js +186 -2
  225. package/dist/pwa/offline.js +259 -2
  226. package/dist/pwa/precache.js +116 -2
  227. package/dist/pwa/service-worker.js +860 -2
  228. package/dist/pwa/workbox-strategies.js +167 -2
  229. package/dist/pwa/workbox.js +382 -2
  230. package/dist/pwa.js +427 -427
  231. package/dist/reactive-bindings.js +266 -2
  232. package/dist/reactive.js +569 -2
  233. package/dist/reactivity.js +559 -2
  234. package/dist/release.js +1 -2
  235. package/dist/render.js +165 -2
  236. package/dist/route-middleware.js +17 -2
  237. package/dist/router.js +9 -2
  238. package/dist/routes.js +14 -2
  239. package/dist/runtime-injection.js +120 -2
  240. package/dist/runtime.js +94 -2
  241. package/dist/safe-evaluator.js +444 -2
  242. package/dist/scaffolding.js +897 -2
  243. package/dist/screenshot.js +87 -2
  244. package/dist/script-classifier.js +32 -2
  245. package/dist/script-validation.js +158 -2
  246. package/dist/seo.js +457 -2
  247. package/dist/serve.js +237 -2
  248. package/dist/server-bindings.js +108 -2
  249. package/dist/server-components.js +338 -11
  250. package/dist/signal-processing.js +946 -2
  251. package/dist/signals-api.js +154 -2
  252. package/dist/signals.js +5287 -2
  253. package/dist/site-builder/build.js +224 -2
  254. package/dist/site-builder/i18n.js +140 -2
  255. package/dist/site-builder/index.js +15 -2
  256. package/dist/site-builder/robots.js +26 -2
  257. package/dist/site-builder/router.js +27 -2
  258. package/dist/site-builder/seo.js +36 -2
  259. package/dist/site-builder/sitemap.js +26 -2
  260. package/dist/site-builder/theme.js +33 -2
  261. package/dist/site-builder/types.js +0 -1
  262. package/dist/slots.js +201 -2
  263. package/dist/source-maps.js +350 -2
  264. package/dist/spa-shell.js +34 -2
  265. package/dist/ssg.js +389 -389
  266. package/dist/ssr.js +355 -2
  267. package/dist/state-management.js +533 -2
  268. package/dist/store-imports.js +13 -2
  269. package/dist/store-loader.js +72 -5
  270. package/dist/stores-client.js +132 -2
  271. package/dist/story/addons.js +261 -2
  272. package/dist/story/analytics.js +235 -2
  273. package/dist/story/auto-stories.js +158 -2
  274. package/dist/story/bookmarks.js +277 -2
  275. package/dist/story/bun-test.js +102 -2
  276. package/dist/story/cli.js +155 -2
  277. package/dist/story/collect/analyzer.js +305 -2
  278. package/dist/story/collect/index.js +27 -2
  279. package/dist/story/collect/parser.js +129 -2
  280. package/dist/story/collect/scanner.js +101 -2
  281. package/dist/story/collect/tree.js +110 -2
  282. package/dist/story/commands/build.js +172 -2
  283. package/dist/story/commands/dev.js +78 -2
  284. package/dist/story/commands/index.js +3 -2
  285. package/dist/story/commands/preview.js +56 -2
  286. package/dist/story/compiled-output.js +151 -2
  287. package/dist/story/composition.js +261 -2
  288. package/dist/story/config-watcher.js +67 -2
  289. package/dist/story/config.js +64 -2
  290. package/dist/story/context.js +27 -2
  291. package/dist/story/controls/index.js +320 -2
  292. package/dist/story/crosswind.js +189 -2
  293. package/dist/story/desktop-preview.js +105 -2
  294. package/dist/story/docs-generator.js +186 -2
  295. package/dist/story/errors.js +239 -2
  296. package/dist/story/figma-export.js +224 -2
  297. package/dist/story/generator.js +165 -2
  298. package/dist/story/hmr.js +131 -2
  299. package/dist/story/hot-swap.js +207 -2
  300. package/dist/story/index.js +49 -2
  301. package/dist/story/interactions.js +225 -2
  302. package/dist/story/keyboard-shortcuts.js +345 -2
  303. package/dist/story/output.js +153 -2
  304. package/dist/story/performance.js +252 -2
  305. package/dist/story/presets.js +289 -2
  306. package/dist/story/props-validation.js +215 -2
  307. package/dist/story/renderer.js +209 -2
  308. package/dist/story/search-index.js +106 -2
  309. package/dist/story/search.js +140 -2
  310. package/dist/story/server.js +965 -2
  311. package/dist/story/setup.js +78 -2
  312. package/dist/story/snapshots.js +170 -2
  313. package/dist/story/testing.js +163 -2
  314. package/dist/story/theme.js +170 -2
  315. package/dist/story/types.js +0 -2
  316. package/dist/story/ui/code-panel.js +175 -2
  317. package/dist/story/ui/controls-panel.js +168 -2
  318. package/dist/story/ui/index.js +4 -2
  319. package/dist/story/ui/navigation.js +250 -2
  320. package/dist/story/ui/preview.js +251 -2
  321. package/dist/story/visual-testing.js +247 -2
  322. package/dist/streaming.js +537 -2
  323. package/dist/strict-lint.js +288 -2
  324. package/dist/style-scoping.js +50 -2
  325. package/dist/suspense.js +398 -2
  326. package/dist/teleport.js +109 -2
  327. package/dist/template-compiler.js +63 -2
  328. package/dist/template-hydrator.js +82 -2
  329. package/dist/template-tag-balance.js +93 -2
  330. package/dist/testing.js +581 -2
  331. package/dist/transitions.js +443 -2
  332. package/dist/type-checker.js +581 -2
  333. package/dist/types/component-types.d.ts +54 -0
  334. package/dist/types/component-types.js +0 -1
  335. package/dist/types/config-types.js +0 -1
  336. package/dist/types/context-types.js +0 -1
  337. package/dist/types/csp-types.js +0 -1
  338. package/dist/types/directive-types.js +3 -2
  339. package/dist/types/index.d.ts +5 -0
  340. package/dist/types/index.js +1 -2
  341. package/dist/types/pwa-types.js +0 -1
  342. package/dist/types.js +1 -2
  343. package/dist/typescript-templates.js +386 -4
  344. package/dist/utils.js +942 -2
  345. package/dist/validator.js +171 -2
  346. package/dist/variable-extractor.js +1094 -2
  347. package/dist/view-composers.js +29 -2
  348. package/dist/virtual-scrolling.js +454 -2
  349. package/dist/visual-editor.js +688 -28
  350. package/dist/vue-template.js +475 -2
  351. package/dist/web-components/css-scoping.js +177 -2
  352. package/dist/web-components/index.js +13 -2
  353. package/dist/web-components/reactive-generator.js +121 -56
  354. package/dist/web-components.js +1447 -2
  355. package/dist/x-element.js +17 -5
  356. package/package.json +6 -7
  357. package/dist/chunk-03c26pjz.js +0 -3
  358. package/dist/chunk-04mvcmcr.js +0 -106
  359. package/dist/chunk-05hgyyqc.js +0 -4
  360. package/dist/chunk-095s3972.js +0 -99
  361. package/dist/chunk-0b9w2w1y.js +0 -1
  362. package/dist/chunk-0dz85jrp.js +0 -3
  363. package/dist/chunk-0g4gece6.js +0 -4
  364. package/dist/chunk-0jd0pndq.js +0 -3
  365. package/dist/chunk-0jkwrcwj.js +0 -3
  366. package/dist/chunk-0m9tdm7t.js +0 -71
  367. package/dist/chunk-0qakwen3.js +0 -1
  368. package/dist/chunk-0qnz93q2.js +0 -3
  369. package/dist/chunk-0tatqxj2.js +0 -57
  370. package/dist/chunk-0wdar532.js +0 -102
  371. package/dist/chunk-13yz561y.js +0 -3
  372. package/dist/chunk-174z0cd0.js +0 -3
  373. package/dist/chunk-1mmykse5.js +0 -81
  374. package/dist/chunk-1z2yq9em.js +0 -3
  375. package/dist/chunk-1z5nhbjt.js +0 -90
  376. package/dist/chunk-1zgsgk4b.js +0 -1
  377. package/dist/chunk-25s7bckb.js +0 -171
  378. package/dist/chunk-268adc7r.js +0 -2230
  379. package/dist/chunk-26r6zh3t.js +0 -194
  380. package/dist/chunk-2w3302dh.js +0 -3
  381. package/dist/chunk-2xen423s.js +0 -3
  382. package/dist/chunk-39gm08bn.js +0 -39
  383. package/dist/chunk-3bjtemm6.js +0 -128
  384. package/dist/chunk-3jm3snz8.js +0 -3
  385. package/dist/chunk-3ngm57nt.js +0 -12
  386. package/dist/chunk-3rh7va1z.js +0 -3
  387. package/dist/chunk-3yg9hbmb.js +0 -4
  388. package/dist/chunk-44hd3kab.js +0 -1
  389. package/dist/chunk-46mkpbkk.js +0 -12
  390. package/dist/chunk-48cw2nde.js +0 -2
  391. package/dist/chunk-48r3qe0k.js +0 -3
  392. package/dist/chunk-4aj7ftqb.js +0 -1
  393. package/dist/chunk-4bt81cg3.js +0 -61
  394. package/dist/chunk-4j188175.js +0 -3
  395. package/dist/chunk-4k7d8p8d.js +0 -188
  396. package/dist/chunk-4qq8ffke.js +0 -28
  397. package/dist/chunk-50vqeesm.js +0 -142
  398. package/dist/chunk-52agge4n.js +0 -38
  399. package/dist/chunk-55yp0q8t.js +0 -201
  400. package/dist/chunk-57p201gb.js +0 -83
  401. package/dist/chunk-5ggw1dyv.js +0 -3
  402. package/dist/chunk-5kt3ay7x.js +0 -10
  403. package/dist/chunk-5p568px4.js +0 -1166
  404. package/dist/chunk-5ppkfyn2.js +0 -3
  405. package/dist/chunk-5q87fgkk.js +0 -3
  406. package/dist/chunk-5qb761h2.js +0 -3
  407. package/dist/chunk-5xvbq2gs.js +0 -30
  408. package/dist/chunk-647849kf.js +0 -34
  409. package/dist/chunk-6b5k6w2q.js +0 -7
  410. package/dist/chunk-6cr3eeh4.js +0 -23
  411. package/dist/chunk-6djgb0hr.js +0 -3
  412. package/dist/chunk-6dqzky7x.js +0 -35
  413. package/dist/chunk-6e4c6g46.js +0 -3
  414. package/dist/chunk-6w03t7h6.js +0 -3
  415. package/dist/chunk-6wn85hn6.js +0 -4
  416. package/dist/chunk-6y4gqs1q.js +0 -169
  417. package/dist/chunk-75rndzbd.js +0 -6
  418. package/dist/chunk-77tga15w.js +0 -3
  419. package/dist/chunk-7a51hkpf.js +0 -3
  420. package/dist/chunk-7b0xdy5h.js +0 -386
  421. package/dist/chunk-7cgmq685.js +0 -33
  422. package/dist/chunk-7dy588as.js +0 -6
  423. package/dist/chunk-7rvh2wwv.js +0 -721
  424. package/dist/chunk-7sm05m0j.js +0 -351
  425. package/dist/chunk-7sqdeqsw.js +0 -1
  426. package/dist/chunk-7xcfy2fn.js +0 -4
  427. package/dist/chunk-82t27pvd.js +0 -5
  428. package/dist/chunk-87kx8byz.js +0 -1115
  429. package/dist/chunk-8fgwhhb8.js +0 -6
  430. package/dist/chunk-8qbax8xn.js +0 -347
  431. package/dist/chunk-91s2hres.js +0 -8
  432. package/dist/chunk-94g3cahw.js +0 -11
  433. package/dist/chunk-957amb71.js +0 -8
  434. package/dist/chunk-95w08s8v.js +0 -3
  435. package/dist/chunk-9agvhp1x.js +0 -93
  436. package/dist/chunk-9tmbrwwx.js +0 -219
  437. package/dist/chunk-9yz5d003.js +0 -51
  438. package/dist/chunk-a3hyn4we.js +0 -79
  439. package/dist/chunk-a69tvya5.js +0 -53
  440. package/dist/chunk-adjcg6wa.js +0 -498
  441. package/dist/chunk-adqh2m9z.js +0 -45
  442. package/dist/chunk-asarebzq.js +0 -292
  443. package/dist/chunk-aw3rp9ac.js +0 -24
  444. package/dist/chunk-b0cyc09a.js +0 -109
  445. package/dist/chunk-b3kkjcdh.js +0 -3
  446. package/dist/chunk-b3prs7y0.js +0 -5
  447. package/dist/chunk-b5zc9y0y.js +0 -90
  448. package/dist/chunk-baa7h4yz.js +0 -3
  449. package/dist/chunk-bgec9r1v.js +0 -5224
  450. package/dist/chunk-bjnjpsgn.js +0 -3
  451. package/dist/chunk-bk8ew8ze.js +0 -24
  452. package/dist/chunk-bn08k7yy.js +0 -3
  453. package/dist/chunk-bpgg59wa.js +0 -3
  454. package/dist/chunk-bwxda6n1.js +0 -3
  455. package/dist/chunk-bykjk6vj.js +0 -4
  456. package/dist/chunk-c53hyw5c.js +0 -477
  457. package/dist/chunk-c7jg8w13.js +0 -3
  458. package/dist/chunk-ca6qd1dx.js +0 -3
  459. package/dist/chunk-cdbwprfv.js +0 -6
  460. package/dist/chunk-ceg2c2q2.js +0 -11
  461. package/dist/chunk-cn409b69.js +0 -3
  462. package/dist/chunk-cn8az1b4.js +0 -1
  463. package/dist/chunk-cp3kwv17.js +0 -8
  464. package/dist/chunk-cpcc11vp.js +0 -5
  465. package/dist/chunk-cr3wbrcr.js +0 -10
  466. package/dist/chunk-cygfdk1n.js +0 -3
  467. package/dist/chunk-cyp4m0vh.js +0 -16
  468. package/dist/chunk-cz25azze.js +0 -4
  469. package/dist/chunk-d77yxcds.js +0 -3
  470. package/dist/chunk-dvfs1h3c.js +0 -117
  471. package/dist/chunk-dyjnn5k8.js +0 -262
  472. package/dist/chunk-dzw95th7.js +0 -3
  473. package/dist/chunk-e0zytzdh.js +0 -179
  474. package/dist/chunk-e53h9qhd.js +0 -84
  475. package/dist/chunk-eds0f8f1.js +0 -3
  476. package/dist/chunk-eh8hact1.js +0 -5
  477. package/dist/chunk-epj957jf.js +0 -4
  478. package/dist/chunk-eqeyaq6g.js +0 -77
  479. package/dist/chunk-fbxt2mrx.js +0 -5
  480. package/dist/chunk-fch9tk1k.js +0 -3
  481. package/dist/chunk-fe7r1mq1.js +0 -9
  482. package/dist/chunk-fhawx87n.js +0 -8
  483. package/dist/chunk-fk51yyrw.js +0 -3
  484. package/dist/chunk-fms20x0n.js +0 -21
  485. package/dist/chunk-fs0qezn5.js +0 -341
  486. package/dist/chunk-fzm3y0r3.js +0 -267
  487. package/dist/chunk-g2hekckm.js +0 -161
  488. package/dist/chunk-g4ps1dj8.js +0 -140
  489. package/dist/chunk-g8b81pzc.js +0 -3
  490. package/dist/chunk-ganag9dm.js +0 -3
  491. package/dist/chunk-gc84b1d2.js +0 -58
  492. package/dist/chunk-gcf5v18y.js +0 -60
  493. package/dist/chunk-ghrx0hn1.js +0 -4
  494. package/dist/chunk-gqpkp459.js +0 -3
  495. package/dist/chunk-h45py5w5.js +0 -2
  496. package/dist/chunk-h5wa62ek.js +0 -145
  497. package/dist/chunk-h82kjdr4.js +0 -83
  498. package/dist/chunk-haecq01c.js +0 -3
  499. package/dist/chunk-hepg894w.js +0 -3
  500. package/dist/chunk-hjdc99kb.js +0 -3
  501. package/dist/chunk-hje9v2zh.js +0 -3
  502. package/dist/chunk-hjv76kcw.js +0 -1
  503. package/dist/chunk-hke99a0v.js +0 -3
  504. package/dist/chunk-hpqr9e3x.js +0 -3
  505. package/dist/chunk-hq5cem49.js +0 -236
  506. package/dist/chunk-hrampcrj.js +0 -3
  507. package/dist/chunk-ht4j68cs.js +0 -3
  508. package/dist/chunk-hxx3za24.js +0 -62
  509. package/dist/chunk-j4s5qwd7.js +0 -4
  510. package/dist/chunk-jbejwejg.js +0 -8
  511. package/dist/chunk-jc0fc4ht.js +0 -11
  512. package/dist/chunk-jcs0ymw7.js +0 -3
  513. package/dist/chunk-jfm69keq.js +0 -231
  514. package/dist/chunk-jfrn43vh.js +0 -2
  515. package/dist/chunk-jjamhxpm.js +0 -139
  516. package/dist/chunk-jjvp4t5w.js +0 -27
  517. package/dist/chunk-jt44av4j.js +0 -3
  518. package/dist/chunk-jt98jhpt.js +0 -10
  519. package/dist/chunk-k8440jxh.js +0 -6
  520. package/dist/chunk-kdxa9epn.js +0 -21
  521. package/dist/chunk-kfd2hf6f.js +0 -3
  522. package/dist/chunk-kgym7ch9.js +0 -8
  523. package/dist/chunk-kh6rfz2v.js +0 -4
  524. package/dist/chunk-kkp6rs2n.js +0 -36
  525. package/dist/chunk-ktkmvaa8.js +0 -1
  526. package/dist/chunk-m59y310j.js +0 -3
  527. package/dist/chunk-mgmyr1b9.js +0 -6
  528. package/dist/chunk-mqwbpamc.js +0 -3
  529. package/dist/chunk-mrehzhxv.js +0 -5
  530. package/dist/chunk-mv03qb75.js +0 -3
  531. package/dist/chunk-mv4fb50w.js +0 -1
  532. package/dist/chunk-mwbng54r.js +0 -2
  533. package/dist/chunk-n46a5g1g.js +0 -3
  534. package/dist/chunk-n944baxp.js +0 -3
  535. package/dist/chunk-nanw7yhz.js +0 -14
  536. package/dist/chunk-nap11ntr.js +0 -21
  537. package/dist/chunk-ncnfa8ae.js +0 -29
  538. package/dist/chunk-ngxfwzq3.js +0 -3
  539. package/dist/chunk-nvwb4x04.js +0 -3
  540. package/dist/chunk-nw34xajc.js +0 -8
  541. package/dist/chunk-payfb24w.js +0 -207
  542. package/dist/chunk-pc31m5x5.js +0 -398
  543. package/dist/chunk-pg1fvqb9.js +0 -167
  544. package/dist/chunk-q60knhjf.js +0 -3
  545. package/dist/chunk-q6h6yvzb.js +0 -10
  546. package/dist/chunk-qd5461tt.js +0 -3
  547. package/dist/chunk-qdc3aav1.js +0 -3
  548. package/dist/chunk-qfwzdffx.js +0 -3
  549. package/dist/chunk-qgxwmagw.js +0 -134
  550. package/dist/chunk-qhdtssn1.js +0 -19
  551. package/dist/chunk-qk584whs.js +0 -3
  552. package/dist/chunk-qm4yppj5.js +0 -57
  553. package/dist/chunk-qwyd9a1d.js +0 -2
  554. package/dist/chunk-qxs6et76.js +0 -196
  555. package/dist/chunk-rb1e4cnb.js +0 -3
  556. package/dist/chunk-rh80q1nd.js +0 -1
  557. package/dist/chunk-rkffm9sy.js +0 -128
  558. package/dist/chunk-rv002yn0.js +0 -14
  559. package/dist/chunk-s6ja2bdg.js +0 -66
  560. package/dist/chunk-sjagg9qz.js +0 -66
  561. package/dist/chunk-sn07azv3.js +0 -3
  562. package/dist/chunk-svahbw0w.js +0 -12
  563. package/dist/chunk-svhtdb0s.js +0 -6
  564. package/dist/chunk-t37dp99j.js +0 -3
  565. package/dist/chunk-tj6zfxeb.js +0 -64
  566. package/dist/chunk-tmgz5t2g.js +0 -3
  567. package/dist/chunk-tr0z0e1g.js +0 -3
  568. package/dist/chunk-tx6br9r4.js +0 -274
  569. package/dist/chunk-v97390pe.js +0 -1
  570. package/dist/chunk-vcr5pzpx.js +0 -233
  571. package/dist/chunk-vdfwv0fp.js +0 -6
  572. package/dist/chunk-vp2395eb.js +0 -3
  573. package/dist/chunk-vpe6napb.js +0 -28
  574. package/dist/chunk-vv9wfz1c.js +0 -12
  575. package/dist/chunk-vw6ejgmy.js +0 -21
  576. package/dist/chunk-vx22he47.js +0 -1
  577. package/dist/chunk-w01y57f5.js +0 -1539
  578. package/dist/chunk-w21mwxdd.js +0 -4
  579. package/dist/chunk-w4n8fqp7.js +0 -216
  580. package/dist/chunk-w959hm8j.js +0 -358
  581. package/dist/chunk-wf7zrjsw.js +0 -138
  582. package/dist/chunk-wk07pwtd.js +0 -321
  583. package/dist/chunk-wvef3ngh.js +0 -127
  584. package/dist/chunk-wxvyj65q.js +0 -2
  585. package/dist/chunk-x1hjv24z.js +0 -11
  586. package/dist/chunk-x39sfpvm.js +0 -302
  587. package/dist/chunk-x4fze3q2.js +0 -314
  588. package/dist/chunk-x64kb787.js +0 -15
  589. package/dist/chunk-xcb0pbr6.js +0 -4
  590. package/dist/chunk-xhkjhxsp.js +0 -3
  591. package/dist/chunk-xhnpsngj.js +0 -5
  592. package/dist/chunk-xsqbk4yk.js +0 -3
  593. package/dist/chunk-xygc53vr.js +0 -68
  594. package/dist/chunk-y0qg6rrv.js +0 -3
  595. package/dist/chunk-y25pr13j.js +0 -19
  596. package/dist/chunk-y4c744dk.js +0 -3
  597. package/dist/chunk-y4md9hp0.js +0 -3
  598. package/dist/chunk-y5wazw6j.js +0 -7
  599. package/dist/chunk-y5xz0jc4.js +0 -141
  600. package/dist/chunk-y86m1wr4.js +0 -4
  601. package/dist/chunk-yaan98dd.js +0 -3
  602. package/dist/chunk-yach037f.js +0 -32
  603. package/dist/chunk-yexjrg9d.js +0 -7
  604. package/dist/chunk-ygvyc6wv.js +0 -90
  605. package/dist/chunk-yj560gp8.js +0 -8
  606. package/dist/chunk-yn38c15w.js +0 -4
  607. package/dist/chunk-yr1gdceh.js +0 -3
  608. package/dist/chunk-yw2fzq86.js +0 -3
  609. package/dist/chunk-ywkrxp2h.js +0 -147
  610. package/dist/chunk-z37xq5rx.js +0 -3
  611. package/dist/chunk-z4djtgt0.js +0 -71
  612. package/dist/chunk-z8cjr9n9.js +0 -7
  613. package/dist/chunk-znxp3zha.js +0 -71
  614. package/dist/chunk-zt2yag10.js +0 -429
@@ -1,2 +1,945 @@
1
- // @bun
2
- import{Go as a,Ho as b,Io as c,Jo as d,Ko as e,Lo as f,Mo as g}from"./chunk-268adc7r.js";import"./chunk-3jm3snz8.js";export{e as registerCraftComponent,d as processCraftComponents,f as getCraftComponents,g as default,b as CRAFT_COMPONENT_STYLES,c as CRAFT_COMPONENT_RUNTIME,a as CRAFT_COMPONENTS};
1
+ export const CRAFT_COMPONENTS = {
2
+ button: {
3
+ nativeType: "craft-button",
4
+ fallbackTag: "button",
5
+ fallbackClasses: "craft-button",
6
+ nativeProps: ["variant", "size", "disabled", "loading"]
7
+ },
8
+ "text-input": {
9
+ nativeType: "craft-text-input",
10
+ fallbackTag: "input",
11
+ fallbackClasses: "craft-text-input",
12
+ nativeProps: ["placeholder", "value", "type", "disabled", "readonly"]
13
+ },
14
+ textarea: {
15
+ nativeType: "craft-textarea",
16
+ fallbackTag: "textarea",
17
+ fallbackClasses: "craft-textarea",
18
+ nativeProps: ["placeholder", "value", "rows", "disabled", "readonly"]
19
+ },
20
+ checkbox: {
21
+ nativeType: "craft-checkbox",
22
+ fallbackTag: "input",
23
+ fallbackClasses: "craft-checkbox",
24
+ nativeProps: ["checked", "disabled", "label"],
25
+ render: (props, children) => {
26
+ const checked = props.checked ? "checked" : "", disabled = props.disabled ? "disabled" : "";
27
+ return `<label class="craft-checkbox-wrapper">
28
+ <input type="checkbox" class="craft-checkbox" ${checked} ${disabled}>
29
+ <span class="craft-checkbox-label">${children || props.label || ""}</span>
30
+ </label>`;
31
+ }
32
+ },
33
+ radio: {
34
+ nativeType: "craft-radio",
35
+ fallbackTag: "input",
36
+ fallbackClasses: "craft-radio",
37
+ nativeProps: ["checked", "disabled", "name", "value", "label"]
38
+ },
39
+ select: {
40
+ nativeType: "craft-select",
41
+ fallbackTag: "select",
42
+ fallbackClasses: "craft-select",
43
+ nativeProps: ["value", "disabled", "options", "placeholder"]
44
+ },
45
+ slider: {
46
+ nativeType: "craft-slider",
47
+ fallbackTag: "input",
48
+ fallbackClasses: "craft-slider",
49
+ nativeProps: ["value", "min", "max", "step", "disabled"],
50
+ render: (props, _children) => {
51
+ const min = props.min ?? 0, max = props.max ?? 100, step = props.step ?? 1, value = props.value ?? 50, disabled = props.disabled ? "disabled" : "";
52
+ return `<input type="range" class="craft-slider" min="${min}" max="${max}" step="${step}" value="${value}" ${disabled}>`;
53
+ }
54
+ },
55
+ label: {
56
+ nativeType: "craft-label",
57
+ fallbackTag: "span",
58
+ fallbackClasses: "craft-label",
59
+ nativeProps: ["text", "for"]
60
+ },
61
+ badge: {
62
+ nativeType: "craft-badge",
63
+ fallbackTag: "span",
64
+ fallbackClasses: "craft-badge",
65
+ nativeProps: ["variant", "size"]
66
+ },
67
+ avatar: {
68
+ nativeType: "craft-avatar",
69
+ fallbackTag: "div",
70
+ fallbackClasses: "craft-avatar",
71
+ nativeProps: ["src", "alt", "size", "fallback"],
72
+ render: (props, _children) => {
73
+ const size = props.size || 40, src = props.src, alt = String(props.alt || ""), fallback = props.fallback || (alt ? alt.charAt(0).toUpperCase() : "?");
74
+ if (src)
75
+ return `<img class="craft-avatar" src="${src}" alt="${alt}" style="width:${size}px;height:${size}px;border-radius:50%">`;
76
+ return `<div class="craft-avatar craft-avatar-fallback" style="width:${size}px;height:${size}px;border-radius:50%;display:flex;align-items:center;justify-content:center">${fallback}</div>`;
77
+ }
78
+ },
79
+ progress: {
80
+ nativeType: "craft-progress",
81
+ fallbackTag: "div",
82
+ fallbackClasses: "craft-progress",
83
+ nativeProps: ["value", "max", "variant"],
84
+ render: (props, _children) => {
85
+ const value = Number(props.value) || 0, max = Number(props.max) || 100;
86
+ return `<div class="craft-progress"><div class="craft-progress-bar" style="width:${Math.min(100, Math.max(0, value / max * 100))}%"></div></div>`;
87
+ }
88
+ },
89
+ spinner: {
90
+ nativeType: "craft-spinner",
91
+ fallbackTag: "div",
92
+ fallbackClasses: "craft-spinner",
93
+ nativeProps: ["size"],
94
+ render: (props, _children) => {
95
+ const size = props.size || 24;
96
+ return `<div class="craft-spinner" style="width:${size}px;height:${size}px"></div>`;
97
+ }
98
+ },
99
+ card: {
100
+ nativeType: "craft-card",
101
+ fallbackTag: "div",
102
+ fallbackClasses: "craft-card",
103
+ nativeProps: ["title", "subtitle", "variant"]
104
+ },
105
+ modal: {
106
+ nativeType: "craft-modal",
107
+ fallbackTag: "dialog",
108
+ fallbackClasses: "craft-modal",
109
+ nativeProps: ["open", "title", "closable", "size"],
110
+ render: (props, children) => {
111
+ const open = props.open ? "open" : "", title = props.title || "";
112
+ return `<dialog class="craft-modal" ${open}>
113
+ <div class="craft-modal-content">
114
+ ${title ? `<div class="craft-modal-header"><h2>${title}</h2></div>` : ""}
115
+ <div class="craft-modal-body">${children}</div>
116
+ </div>
117
+ </dialog>`;
118
+ }
119
+ },
120
+ tabs: {
121
+ nativeType: "craft-tabs",
122
+ fallbackTag: "div",
123
+ fallbackClasses: "craft-tabs",
124
+ nativeProps: ["activeTab", "tabs"]
125
+ },
126
+ accordion: {
127
+ nativeType: "craft-accordion",
128
+ fallbackTag: "details",
129
+ fallbackClasses: "craft-accordion",
130
+ nativeProps: ["open", "title"],
131
+ render: (props, children) => {
132
+ const open = props.open ? "open" : "", title = props.title || "Details";
133
+ return `<details class="craft-accordion" ${open}>
134
+ <summary class="craft-accordion-header">${title}</summary>
135
+ <div class="craft-accordion-content">${children}</div>
136
+ </details>`;
137
+ }
138
+ },
139
+ divider: {
140
+ nativeType: "craft-divider",
141
+ fallbackTag: "hr",
142
+ fallbackClasses: "craft-divider",
143
+ nativeProps: ["orientation", "variant"]
144
+ },
145
+ table: {
146
+ nativeType: "craft-table",
147
+ fallbackTag: "table",
148
+ fallbackClasses: "craft-table",
149
+ nativeProps: ["columns", "rows", "sortable", "selectable"]
150
+ },
151
+ list: {
152
+ nativeType: "craft-list",
153
+ fallbackTag: "ul",
154
+ fallbackClasses: "craft-list",
155
+ nativeProps: ["items", "selectable"]
156
+ },
157
+ tree: {
158
+ nativeType: "craft-tree",
159
+ fallbackTag: "div",
160
+ fallbackClasses: "craft-tree",
161
+ nativeProps: ["nodes", "expandable", "selectable"]
162
+ },
163
+ alert: {
164
+ nativeType: "craft-alert",
165
+ fallbackTag: "div",
166
+ fallbackClasses: "craft-alert",
167
+ nativeProps: ["variant", "title", "dismissible"],
168
+ render: (props, children) => {
169
+ const variant = props.variant || "info", title = props.title || "";
170
+ return `<div class="craft-alert craft-alert-${variant}" role="alert">
171
+ ${title ? `<div class="craft-alert-title">${title}</div>` : ""}
172
+ <div class="craft-alert-content">${children}</div>
173
+ </div>`;
174
+ }
175
+ },
176
+ toast: {
177
+ nativeType: "craft-toast",
178
+ fallbackTag: "div",
179
+ fallbackClasses: "craft-toast",
180
+ nativeProps: ["variant", "duration", "position"]
181
+ },
182
+ tooltip: {
183
+ nativeType: "craft-tooltip",
184
+ fallbackTag: "span",
185
+ fallbackClasses: "craft-tooltip",
186
+ nativeProps: ["content", "position"],
187
+ render: (props, children) => {
188
+ const content = props.content || "", position = props.position || "top";
189
+ return `<span class="craft-tooltip" data-tooltip="${content}" data-position="${position}">${children}</span>`;
190
+ }
191
+ },
192
+ menu: {
193
+ nativeType: "craft-menu",
194
+ fallbackTag: "nav",
195
+ fallbackClasses: "craft-menu",
196
+ nativeProps: ["items", "orientation"]
197
+ },
198
+ breadcrumb: {
199
+ nativeType: "craft-breadcrumb",
200
+ fallbackTag: "nav",
201
+ fallbackClasses: "craft-breadcrumb",
202
+ nativeProps: ["items", "separator"]
203
+ },
204
+ sidebar: {
205
+ nativeType: "craft-sidebar",
206
+ fallbackTag: "aside",
207
+ fallbackClasses: "craft-sidebar craft-sidebar-tahoe",
208
+ nativeProps: [
209
+ "id",
210
+ "variant",
211
+ "material",
212
+ "backgroundEffect",
213
+ "allowsVibrancy",
214
+ "materialOpacity",
215
+ "materialDarkOpacity",
216
+ "minWidth",
217
+ "maxWidth",
218
+ "canCollapse",
219
+ "searchPlaceholder",
220
+ "selectedItem",
221
+ "sections"
222
+ ],
223
+ render: renderCraftSidebar
224
+ },
225
+ "sidebar-section": {
226
+ nativeType: "craft-sidebar-section",
227
+ fallbackTag: "section",
228
+ fallbackClasses: "craft-sidebar-section",
229
+ nativeProps: ["id", "title", "header"],
230
+ render: renderCraftSidebarSection
231
+ },
232
+ "sidebar-item": {
233
+ nativeType: "craft-sidebar-item",
234
+ fallbackTag: "button",
235
+ fallbackClasses: "craft-sidebar-item",
236
+ nativeProps: ["id", "label", "icon", "badge", "tintColor"],
237
+ render: renderCraftSidebarItem
238
+ },
239
+ pagination: {
240
+ nativeType: "craft-pagination",
241
+ fallbackTag: "nav",
242
+ fallbackClasses: "craft-pagination",
243
+ nativeProps: ["total", "page", "pageSize"]
244
+ },
245
+ "code-editor": {
246
+ nativeType: "craft-code-editor",
247
+ fallbackTag: "textarea",
248
+ fallbackClasses: "craft-code-editor",
249
+ nativeProps: ["value", "language", "theme", "readonly", "lineNumbers"]
250
+ },
251
+ "file-browser": {
252
+ nativeType: "craft-file-browser",
253
+ fallbackTag: "div",
254
+ fallbackClasses: "craft-file-browser",
255
+ nativeProps: ["path", "showHidden", "selectable"]
256
+ },
257
+ "color-picker": {
258
+ nativeType: "craft-color-picker",
259
+ fallbackTag: "input",
260
+ fallbackClasses: "craft-color-picker",
261
+ nativeProps: ["value", "format"],
262
+ render: (props, _children) => {
263
+ return `<input type="color" class="craft-color-picker" value="${props.value || "#000000"}">`;
264
+ }
265
+ },
266
+ "date-picker": {
267
+ nativeType: "craft-date-picker",
268
+ fallbackTag: "input",
269
+ fallbackClasses: "craft-date-picker",
270
+ nativeProps: ["value", "min", "max", "format"],
271
+ render: (props, _children) => {
272
+ const value = props.value || "", min = props.min || "", max = props.max || "";
273
+ return `<input type="date" class="craft-date-picker" value="${value}" min="${min}" max="${max}">`;
274
+ }
275
+ },
276
+ "time-picker": {
277
+ nativeType: "craft-time-picker",
278
+ fallbackTag: "input",
279
+ fallbackClasses: "craft-time-picker",
280
+ nativeProps: ["value", "min", "max", "step"],
281
+ render: (props, _children) => {
282
+ return `<input type="time" class="craft-time-picker" value="${props.value || ""}">`;
283
+ }
284
+ }
285
+ }, CRAFT_COMPONENT_STYLES = `
286
+ <style id="craft-component-styles">
287
+ /* Craft Component Base Styles */
288
+ .craft-button {
289
+ display: inline-flex;
290
+ align-items: center;
291
+ justify-content: center;
292
+ padding: 8px 16px;
293
+ border: none;
294
+ border-radius: 6px;
295
+ font-family: inherit;
296
+ font-size: 14px;
297
+ font-weight: 500;
298
+ cursor: pointer;
299
+ transition: all 0.2s ease;
300
+ background: var(--craft-primary, #3b82f6);
301
+ color: white;
302
+ }
303
+ .craft-button:hover { opacity: 0.9; }
304
+ .craft-button:disabled { opacity: 0.5; cursor: not-allowed; }
305
+ .craft-button-secondary { background: var(--craft-secondary, #6b7280); }
306
+ .craft-button-outline { background: transparent; border: 1px solid currentColor; color: var(--craft-primary, #3b82f6); }
307
+
308
+ .craft-text-input, .craft-textarea, .craft-select {
309
+ padding: 8px 12px;
310
+ border: 1px solid var(--craft-border, #d1d5db);
311
+ border-radius: 6px;
312
+ font-family: inherit;
313
+ font-size: 14px;
314
+ background: var(--craft-bg, #fff);
315
+ color: var(--craft-text, #1f2937);
316
+ transition: border-color 0.2s ease;
317
+ }
318
+ .craft-text-input:focus, .craft-textarea:focus, .craft-select:focus {
319
+ outline: none;
320
+ border-color: var(--craft-primary, #3b82f6);
321
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
322
+ }
323
+
324
+ .craft-checkbox-wrapper {
325
+ display: inline-flex;
326
+ align-items: center;
327
+ gap: 8px;
328
+ cursor: pointer;
329
+ }
330
+ .craft-checkbox {
331
+ width: 18px;
332
+ height: 18px;
333
+ cursor: pointer;
334
+ }
335
+
336
+ .craft-slider {
337
+ width: 100%;
338
+ height: 6px;
339
+ border-radius: 3px;
340
+ cursor: pointer;
341
+ }
342
+
343
+ .craft-badge {
344
+ display: inline-flex;
345
+ align-items: center;
346
+ padding: 2px 8px;
347
+ border-radius: 9999px;
348
+ font-size: 12px;
349
+ font-weight: 500;
350
+ background: var(--craft-primary, #3b82f6);
351
+ color: white;
352
+ }
353
+
354
+ .craft-avatar {
355
+ display: inline-flex;
356
+ align-items: center;
357
+ justify-content: center;
358
+ background: var(--craft-secondary, #6b7280);
359
+ color: white;
360
+ font-weight: 600;
361
+ overflow: hidden;
362
+ }
363
+ .craft-avatar img { width: 100%; height: 100%; object-fit: cover; }
364
+
365
+ .craft-progress {
366
+ width: 100%;
367
+ height: 8px;
368
+ background: var(--craft-border, #e5e7eb);
369
+ border-radius: 4px;
370
+ overflow: hidden;
371
+ }
372
+ .craft-progress-bar {
373
+ height: 100%;
374
+ background: var(--craft-primary, #3b82f6);
375
+ transition: width 0.3s ease;
376
+ }
377
+
378
+ .craft-spinner {
379
+ border: 2px solid var(--craft-border, #e5e7eb);
380
+ border-top-color: var(--craft-primary, #3b82f6);
381
+ border-radius: 50%;
382
+ animation: craft-spin 0.8s linear infinite;
383
+ }
384
+ @keyframes craft-spin { to { transform: rotate(360deg); } }
385
+
386
+ .craft-card {
387
+ background: var(--craft-bg, #fff);
388
+ border: 1px solid var(--craft-border, #e5e7eb);
389
+ border-radius: 8px;
390
+ padding: 16px;
391
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
392
+ }
393
+
394
+ .craft-modal {
395
+ border: none;
396
+ border-radius: 12px;
397
+ padding: 0;
398
+ max-width: 90vw;
399
+ max-height: 90vh;
400
+ box-shadow: 0 25px 50px -12px rgba(0,0,0,0.25);
401
+ }
402
+ .craft-modal::backdrop { background: rgba(0,0,0,0.5); }
403
+ .craft-modal-header {
404
+ padding: 16px 20px;
405
+ border-bottom: 1px solid var(--craft-border, #e5e7eb);
406
+ }
407
+ .craft-modal-header h2 { margin: 0; font-size: 18px; }
408
+ .craft-modal-body { padding: 20px; }
409
+
410
+ .craft-accordion {
411
+ border: 1px solid var(--craft-border, #e5e7eb);
412
+ border-radius: 6px;
413
+ overflow: hidden;
414
+ }
415
+ .craft-accordion-header {
416
+ padding: 12px 16px;
417
+ cursor: pointer;
418
+ font-weight: 500;
419
+ background: var(--craft-bg-secondary, #f9fafb);
420
+ }
421
+ .craft-accordion-content { padding: 16px; }
422
+
423
+ .craft-divider {
424
+ border: none;
425
+ border-top: 1px solid var(--craft-border, #e5e7eb);
426
+ margin: 16px 0;
427
+ }
428
+
429
+ .craft-alert {
430
+ padding: 12px 16px;
431
+ border-radius: 6px;
432
+ border-left: 4px solid;
433
+ }
434
+ .craft-alert-info { background: #eff6ff; border-color: #3b82f6; color: #1e40af; }
435
+ .craft-alert-success { background: #f0fdf4; border-color: #22c55e; color: #166534; }
436
+ .craft-alert-warning { background: #fffbeb; border-color: #f59e0b; color: #92400e; }
437
+ .craft-alert-error { background: #fef2f2; border-color: #ef4444; color: #991b1b; }
438
+ .craft-alert-title { font-weight: 600; margin-bottom: 4px; }
439
+
440
+ .craft-tooltip {
441
+ position: relative;
442
+ cursor: help;
443
+ }
444
+ .craft-tooltip::after {
445
+ content: attr(data-tooltip);
446
+ position: absolute;
447
+ bottom: 100%;
448
+ left: 50%;
449
+ transform: translateX(-50%);
450
+ padding: 4px 8px;
451
+ background: #1f2937;
452
+ color: white;
453
+ font-size: 12px;
454
+ border-radius: 4px;
455
+ white-space: nowrap;
456
+ opacity: 0;
457
+ pointer-events: none;
458
+ transition: opacity 0.2s;
459
+ }
460
+ .craft-tooltip:hover::after { opacity: 1; }
461
+
462
+ .craft-table {
463
+ width: 100%;
464
+ border-collapse: collapse;
465
+ }
466
+ .craft-table th, .craft-table td {
467
+ padding: 12px;
468
+ text-align: left;
469
+ border-bottom: 1px solid var(--craft-border, #e5e7eb);
470
+ }
471
+ .craft-table th { font-weight: 600; background: var(--craft-bg-secondary, #f9fafb); }
472
+
473
+ .craft-list {
474
+ list-style: none;
475
+ padding: 0;
476
+ margin: 0;
477
+ }
478
+ .craft-list li {
479
+ padding: 12px;
480
+ border-bottom: 1px solid var(--craft-border, #e5e7eb);
481
+ }
482
+ .craft-list li:last-child { border-bottom: none; }
483
+
484
+ .craft-sidebar {
485
+ --craft-sidebar-width: 286px;
486
+ --craft-sidebar-bg: rgba(255, 255, 255, 0.68);
487
+ --craft-sidebar-border: rgba(255, 255, 255, 0.62);
488
+ --craft-sidebar-shadow: 0 24px 70px rgba(15, 23, 42, 0.22), 0 1px 0 rgba(255, 255, 255, 0.72) inset;
489
+ --craft-sidebar-text: rgba(24, 24, 27, 0.86);
490
+ --craft-sidebar-muted: rgba(63, 63, 70, 0.62);
491
+ --craft-sidebar-hover: rgba(255, 255, 255, 0.42);
492
+ --craft-sidebar-selected: rgba(10, 132, 255, 0.86);
493
+ position: relative;
494
+ display: flex;
495
+ flex-direction: column;
496
+ width: var(--craft-sidebar-width);
497
+ min-width: var(--craft-sidebar-width);
498
+ height: 100vh;
499
+ padding: 58px 10px 12px;
500
+ color: var(--craft-sidebar-text);
501
+ background:
502
+ linear-gradient(135deg, rgba(255,255,255,0.28), rgba(255,255,255,0.08)),
503
+ var(--craft-sidebar-bg);
504
+ border: 1px solid var(--craft-sidebar-border);
505
+ border-radius: 18px;
506
+ box-shadow: var(--craft-sidebar-shadow);
507
+ backdrop-filter: blur(34px) saturate(180%);
508
+ -webkit-backdrop-filter: blur(34px) saturate(180%);
509
+ overflow: hidden;
510
+ user-select: none;
511
+ }
512
+ .craft-sidebar::before {
513
+ content: "";
514
+ position: absolute;
515
+ inset: 0;
516
+ pointer-events: none;
517
+ background:
518
+ radial-gradient(circle at 18% 0%, rgba(255,255,255,0.68), transparent 32%),
519
+ linear-gradient(100deg, transparent 0%, rgba(255,255,255,0.30) 42%, transparent 58%);
520
+ mix-blend-mode: screen;
521
+ opacity: 0.72;
522
+ }
523
+ .craft-sidebar[data-native-active="true"] { display: none; }
524
+ .craft-sidebar-search {
525
+ position: relative;
526
+ z-index: 1;
527
+ margin: 0 0 12px;
528
+ }
529
+ .craft-sidebar-search input {
530
+ width: 100%;
531
+ min-height: 28px;
532
+ padding: 5px 10px;
533
+ border: 1px solid rgba(0, 0, 0, 0.05);
534
+ border-radius: 8px;
535
+ background: rgba(255, 255, 255, 0.34);
536
+ color: inherit;
537
+ font: inherit;
538
+ font-size: 13px;
539
+ outline: none;
540
+ }
541
+ .craft-sidebar-section {
542
+ position: relative;
543
+ z-index: 1;
544
+ margin: 0 0 14px;
545
+ }
546
+ .craft-sidebar-section-title {
547
+ padding: 0 8px 5px;
548
+ color: var(--craft-sidebar-muted);
549
+ font-size: 11px;
550
+ font-weight: 700;
551
+ letter-spacing: 0;
552
+ text-transform: uppercase;
553
+ }
554
+ .craft-sidebar-item {
555
+ width: calc(100% - 4px);
556
+ min-height: 28px;
557
+ margin: 1px 2px;
558
+ padding: 5px 8px;
559
+ display: flex;
560
+ align-items: center;
561
+ gap: 8px;
562
+ border: 0;
563
+ border-radius: 8px;
564
+ background: transparent;
565
+ color: inherit;
566
+ font: inherit;
567
+ font-size: 13px;
568
+ text-align: left;
569
+ cursor: default;
570
+ }
571
+ .craft-sidebar-item:hover { background: var(--craft-sidebar-hover); }
572
+ .craft-sidebar-item[data-selected="true"] {
573
+ color: white;
574
+ background: var(--craft-sidebar-selected);
575
+ box-shadow: 0 1px 0 rgba(255,255,255,0.22) inset, 0 8px 18px rgba(10, 132, 255, 0.22);
576
+ }
577
+ .craft-sidebar-item-icon {
578
+ position: relative;
579
+ display: inline-block;
580
+ width: 16px;
581
+ height: 16px;
582
+ min-width: 16px;
583
+ opacity: 0.82;
584
+ overflow: hidden;
585
+ color: transparent;
586
+ }
587
+ .craft-sidebar-item-icon::before {
588
+ content: "";
589
+ position: absolute;
590
+ inset: 2px;
591
+ border-radius: 4px;
592
+ background: var(--craft-sidebar-icon-color, rgba(63, 63, 70, 0.62));
593
+ box-shadow: 0 1px 0 rgba(255,255,255,0.24) inset;
594
+ }
595
+ .craft-sidebar-item-icon[data-icon*="circle"]::before {
596
+ inset: 4px;
597
+ border-radius: 999px;
598
+ }
599
+ .craft-sidebar-item[data-selected="true"] .craft-sidebar-item-icon::before {
600
+ background: rgba(255, 255, 255, 0.9);
601
+ }
602
+ .craft-sidebar-item-label {
603
+ flex: 1;
604
+ overflow: hidden;
605
+ white-space: nowrap;
606
+ text-overflow: ellipsis;
607
+ }
608
+ .craft-sidebar-item-badge {
609
+ min-width: 18px;
610
+ padding: 1px 6px;
611
+ border-radius: 999px;
612
+ background: rgba(0, 0, 0, 0.08);
613
+ color: var(--craft-sidebar-muted);
614
+ font-size: 10px;
615
+ font-weight: 700;
616
+ text-align: center;
617
+ }
618
+ .craft-sidebar-item[data-selected="true"] .craft-sidebar-item-badge {
619
+ color: white;
620
+ background: rgba(255, 255, 255, 0.24);
621
+ }
622
+
623
+ .craft-code-editor {
624
+ font-family: 'SF Mono', 'Fira Code', monospace;
625
+ font-size: 13px;
626
+ line-height: 1.5;
627
+ padding: 12px;
628
+ background: #1e1e1e;
629
+ color: #d4d4d4;
630
+ border-radius: 6px;
631
+ resize: vertical;
632
+ }
633
+
634
+ /* Dark mode support */
635
+ @media (prefers-color-scheme: dark) {
636
+ .craft-text-input, .craft-textarea, .craft-select, .craft-card {
637
+ background: #1f2937;
638
+ color: #f3f4f6;
639
+ border-color: #374151;
640
+ }
641
+ .craft-modal {
642
+ background: #1f2937;
643
+ color: #f3f4f6;
644
+ }
645
+ .craft-accordion-header { background: #374151; }
646
+ .craft-table th { background: #374151; }
647
+ .craft-sidebar {
648
+ --craft-sidebar-bg: rgba(24, 24, 27, 0.58);
649
+ --craft-sidebar-border: rgba(255, 255, 255, 0.12);
650
+ --craft-sidebar-shadow: 0 26px 74px rgba(0, 0, 0, 0.44), 0 1px 0 rgba(255, 255, 255, 0.11) inset;
651
+ --craft-sidebar-text: rgba(244, 244, 245, 0.92);
652
+ --craft-sidebar-muted: rgba(212, 212, 216, 0.58);
653
+ --craft-sidebar-hover: rgba(255, 255, 255, 0.10);
654
+ }
655
+ .craft-sidebar-search input {
656
+ border-color: rgba(255,255,255,0.08);
657
+ background: rgba(255,255,255,0.08);
658
+ }
659
+ }
660
+ </style>
661
+ `, CRAFT_COMPONENT_RUNTIME = `
662
+ <script id="craft-component-runtime">
663
+ (function() {
664
+ if (window.__stxCraftComponentRuntime) return;
665
+ window.__stxCraftComponentRuntime = true;
666
+
667
+ function parseConfig(sidebar) {
668
+ var id = sidebar.getAttribute('data-craft-sidebar-id');
669
+ var script = id && document.querySelector('script[data-craft-sidebar-config="' + id + '"]');
670
+ if (!script) return null;
671
+ try {
672
+ return JSON.parse(script.textContent || '{}');
673
+ } catch (error) {
674
+ console.warn('[stx] Invalid Craft sidebar config', error);
675
+ return null;
676
+ }
677
+ }
678
+
679
+ function getNativeUI() {
680
+ if (!window.craft) return null;
681
+ var hasNativeHost = window.craft.isCraft?.() ||
682
+ !!(window.webkit?.messageHandlers?.craft || window.CraftBridge || window.craftIPC);
683
+ if (!hasNativeHost) return null;
684
+ return window.craft.nativeUI || window.craft.components;
685
+ }
686
+
687
+ function initializeSidebar(sidebar) {
688
+ if (sidebar.dataset.craftInitialized === 'true') return;
689
+ if (sidebar.dataset.native === 'false') return;
690
+
691
+ var nativeUI = getNativeUI();
692
+ if (!nativeUI || typeof nativeUI.createSidebar !== 'function') return;
693
+
694
+ var config = parseConfig(sidebar);
695
+ if (!config) return;
696
+
697
+ try {
698
+ var nativeConfig = Object.assign({}, config);
699
+ delete nativeConfig.sections;
700
+ var nativeSidebar = nativeUI.createSidebar(nativeConfig);
701
+ if (nativeSidebar && config.sections) {
702
+ config.sections.forEach(function(section) {
703
+ if (nativeSidebar.addSection) nativeSidebar.addSection(section);
704
+ });
705
+ }
706
+ if (nativeSidebar && config.selectedItem && nativeSidebar.setSelectedItem) {
707
+ nativeSidebar.setSelectedItem(config.selectedItem);
708
+ }
709
+ if (nativeSidebar && nativeSidebar.onSelect) {
710
+ nativeSidebar.onSelect(function(itemId) {
711
+ sidebar.dispatchEvent(new CustomEvent('craft-sidebar:select', {
712
+ bubbles: true,
713
+ detail: { itemId: itemId, sidebarId: config.id }
714
+ }));
715
+ });
716
+ }
717
+ sidebar.dataset.craftInitialized = 'true';
718
+ sidebar.dataset.nativeActive = 'true';
719
+ window.__stxCraftNativeSidebars = window.__stxCraftNativeSidebars || {};
720
+ window.__stxCraftNativeSidebars[config.id] = nativeSidebar;
721
+ } catch (error) {
722
+ sidebar.dataset.nativeError = error.message || 'unknown';
723
+ console.warn('[stx] Failed to create native Craft sidebar', error);
724
+ }
725
+ }
726
+
727
+ function initializeCraftComponents() {
728
+ document.querySelectorAll('[data-craft-native-sidebar]').forEach(initializeSidebar);
729
+ }
730
+
731
+ if (document.readyState === 'loading') {
732
+ document.addEventListener('DOMContentLoaded', initializeCraftComponents);
733
+ } else {
734
+ initializeCraftComponents();
735
+ }
736
+ window.addEventListener('craft:ready', initializeCraftComponents);
737
+ document.addEventListener('craft:nativeui:ready', initializeCraftComponents);
738
+ })();
739
+ </script>
740
+ `;
741
+ export function processCraftComponents(content, config = {}) {
742
+ const { classPrefix = "craft" } = config;
743
+ if (!content.includes("craft-component-styles"))
744
+ if (content.includes("</head>"))
745
+ content = content.replace("</head>", `${CRAFT_COMPONENT_STYLES}
746
+ </head>`);
747
+ else if (content.includes("<style>"))
748
+ content = content.replace("<style>", `${CRAFT_COMPONENT_STYLES}
749
+ <style>`);
750
+ else
751
+ content = CRAFT_COMPONENT_STYLES + content;
752
+ if (!content.includes("craft-component-runtime"))
753
+ if (content.includes("</body>"))
754
+ content = content.replace("</body>", `${CRAFT_COMPONENT_RUNTIME}
755
+ </body>`);
756
+ else
757
+ content += CRAFT_COMPONENT_RUNTIME;
758
+ content = content.replace(/<@craft-sidebar\s*([^>]*)>([\s\S]*?)<\/@craft-sidebar>/g, (match, propsStr, children) => {
759
+ return renderCraftComponent("sidebar", propsStr, children.trim(), config, classPrefix);
760
+ });
761
+ content = content.replace(/<@craft-sidebar\s*([^>]*?)\/>/g, (match, propsStr) => {
762
+ return renderCraftComponent("sidebar", propsStr, "", config, classPrefix);
763
+ });
764
+ content = content.replace(/<@craft-(\w+[-\w]*)\s*([^>]*?)\/>/g, (match, componentName, propsStr) => {
765
+ return renderCraftComponent(componentName, propsStr, "", config, classPrefix);
766
+ });
767
+ content = content.replace(/<@craft-(\w+[-\w]*)\s*([^>]*)>([\s\S]*?)<\/@craft-\1>/g, (match, componentName, propsStr, children) => {
768
+ return renderCraftComponent(componentName, propsStr, children.trim(), config, classPrefix);
769
+ });
770
+ return content;
771
+ }
772
+ function renderCraftComponent(componentName, propsStr, children, config, classPrefix) {
773
+ const componentDef = config.components?.[componentName] || CRAFT_COMPONENTS[componentName];
774
+ if (!componentDef) {
775
+ console.warn(`[stx] Unknown Craft component: @craft-${componentName}`);
776
+ return `<div class="${classPrefix}-unknown" data-component="${componentName}">${children}</div>`;
777
+ }
778
+ const props = parseProps(propsStr), classes = [componentDef.fallbackClasses || `${classPrefix}-${componentName}`];
779
+ if (props.class) {
780
+ classes.push(props.class);
781
+ delete props.class;
782
+ }
783
+ if (componentDef.render) {
784
+ props.__fallbackClasses = classes.join(" ");
785
+ return componentDef.render(props, children);
786
+ }
787
+ const attrs = buildAttributes(props, componentDef, classes);
788
+ if (["input", "hr", "br", "img"].includes(componentDef.fallbackTag))
789
+ return `<${componentDef.fallbackTag} ${attrs}>`;
790
+ return `<${componentDef.fallbackTag} ${attrs}>${children}</${componentDef.fallbackTag}>`;
791
+ }
792
+ function parseProps(propsStr) {
793
+ const props = {}, attrPattern = /(?::|@)?(\w+[-\w]*)(?:=(?:"([^"]*)"|'([^']*)'))?/g;
794
+ let match;
795
+ while ((match = attrPattern.exec(propsStr)) !== null) {
796
+ const [full, name, doubleQuoted, singleQuoted] = match, value = doubleQuoted ?? singleQuoted;
797
+ if (full.startsWith(":"))
798
+ props[name] = value;
799
+ else if (full.startsWith("@"))
800
+ props[`on${name.charAt(0).toUpperCase()}${name.slice(1)}`] = value;
801
+ else if (value === void 0)
802
+ props[name] = !0;
803
+ else
804
+ props[name] = value;
805
+ }
806
+ return props;
807
+ }
808
+ function renderCraftSidebar(props, children) {
809
+ const id = normalizeId(String(props.id || `craft-sidebar-${hashString(children || JSON.stringify(props))}`)), sections = normalizeSidebarSections(props.sections) || extractSidebarSections(children), selectedItem = String(props.selectedItem || props.selected || sections[0]?.items[0]?.id || ""), config = {
810
+ id,
811
+ variant: String(props.variant || "desktop"),
812
+ material: String(props.material || "sidebar"),
813
+ backgroundEffect: String(props.backgroundEffect || "shimmer"),
814
+ allowsVibrancy: props.allowsVibrancy !== !1 && props.allowsVibrancy !== "false",
815
+ materialOpacity: Number(props.materialOpacity ?? 0.68),
816
+ materialDarkOpacity: props.materialDarkOpacity === void 0 ? void 0 : Number(props.materialDarkOpacity),
817
+ minWidth: props.minWidth === void 0 ? 240 : Number(props.minWidth),
818
+ maxWidth: props.maxWidth === void 0 ? 340 : Number(props.maxWidth),
819
+ canCollapse: props.canCollapse !== !1 && props.canCollapse !== "false",
820
+ searchPlaceholder: props.searchPlaceholder ? String(props.searchPlaceholder) : void 0,
821
+ selectedItem,
822
+ sections
823
+ }, fallbackClasses = String(props.__fallbackClasses || "craft-sidebar craft-sidebar-tahoe"), width = Number(props.width || props.sidebarWidth || 286), native = props.native === !1 || props.native === "false" ? "false" : "true", search = config.searchPlaceholder ? `<div class="craft-sidebar-search"><input type="search" placeholder="${escapeHtml(config.searchPlaceholder)}"></div>` : "", sectionHtml = sections.length ? sections.map((section) => renderSidebarSectionFallback(section, selectedItem)).join("") : children;
824
+ return `<aside class="${escapeAttribute(fallbackClasses)}" data-craft="craft-sidebar" data-craft-native-sidebar data-craft-sidebar-id="${escapeAttribute(id)}" data-native="${native}" style="--craft-sidebar-width:${width}px">
825
+ ${search}
826
+ ${sectionHtml}
827
+ </aside>
828
+ <script type="application/json" data-craft-sidebar-config="${escapeAttribute(id)}">${escapeScriptJson(config)}</script>`;
829
+ }
830
+ function renderCraftSidebarSection(props, children) {
831
+ const title = String(props.header || props.title || "");
832
+ return `<section class="craft-sidebar-section" data-craft="craft-sidebar-section" data-section-id="${escapeAttribute(String(props.id || "section"))}">
833
+ ${title ? `<div class="craft-sidebar-section-title">${escapeHtml(title)}</div>` : ""}
834
+ ${children}
835
+ </section>`;
836
+ }
837
+ function renderCraftSidebarItem(props, children) {
838
+ const item = {
839
+ id: String(props.id || normalizeId(String(props.label || children || "item"))),
840
+ label: String(props.label || children || ""),
841
+ icon: props.icon ? String(props.icon) : void 0,
842
+ badge: props.badge ? String(props.badge) : void 0,
843
+ tintColor: props.tintColor ? String(props.tintColor) : void 0
844
+ };
845
+ return renderSidebarItemFallback(item, String(props.selected || "") === "true");
846
+ }
847
+ function extractSidebarSections(children) {
848
+ const sections = [], sectionPattern = /<@craft-sidebar-section\s*([^>]*?)(?:\/>|>([\s\S]*?)<\/@craft-sidebar-section>)/g;
849
+ let sectionMatch;
850
+ while ((sectionMatch = sectionPattern.exec(children)) !== null) {
851
+ const props = parseProps(sectionMatch[1] || ""), body = sectionMatch[2] || "", id = String(props.id || normalizeId(String(props.header || props.title || `section-${sections.length + 1}`))), header = String(props.header || props.title || id), items = extractSidebarItems(body);
852
+ sections.push({ id, header, title: header, items });
853
+ }
854
+ return sections;
855
+ }
856
+ function extractSidebarItems(content) {
857
+ const items = [], itemPattern = /<@craft-sidebar-item\s*([^>]*?)(?:\/>|>([\s\S]*?)<\/@craft-sidebar-item>)/g;
858
+ let itemMatch;
859
+ while ((itemMatch = itemPattern.exec(content)) !== null) {
860
+ const props = parseProps(itemMatch[1] || ""), label = String(props.label || (itemMatch[2] || "").replace(/<[^>]*>/g, "").trim()), id = String(props.id || normalizeId(label || `item-${items.length + 1}`));
861
+ items.push({
862
+ id,
863
+ label,
864
+ icon: props.icon ? String(props.icon) : void 0,
865
+ badge: props.badge ? String(props.badge) : void 0,
866
+ tintColor: props.tintColor ? String(props.tintColor) : void 0
867
+ });
868
+ }
869
+ return items;
870
+ }
871
+ function normalizeSidebarSections(value) {
872
+ if (!value)
873
+ return;
874
+ if (Array.isArray(value))
875
+ return value;
876
+ if (typeof value !== "string")
877
+ return;
878
+ try {
879
+ const parsed = JSON.parse(value);
880
+ return Array.isArray(parsed) ? parsed : void 0;
881
+ } catch {
882
+ return;
883
+ }
884
+ }
885
+ function renderSidebarSectionFallback(section, selectedItem) {
886
+ const title = section.header || section.title || section.id;
887
+ return `<section class="craft-sidebar-section" data-section-id="${escapeAttribute(section.id)}">
888
+ <div class="craft-sidebar-section-title">${escapeHtml(title)}</div>
889
+ ${section.items.map((item) => renderSidebarItemFallback(item, item.id === selectedItem)).join("")}
890
+ </section>`;
891
+ }
892
+ function renderSidebarItemFallback(item, selected) {
893
+ const iconStyle = item.tintColor ? ` style="--craft-sidebar-icon-color:${escapeAttribute(item.tintColor)}"` : "";
894
+ return `<button class="craft-sidebar-item" type="button" data-item-id="${escapeAttribute(item.id)}" data-selected="${selected ? "true" : "false"}">
895
+ ${item.icon ? `<span class="craft-sidebar-item-icon" data-icon="${escapeAttribute(item.icon)}"${iconStyle}></span>` : ""}
896
+ <span class="craft-sidebar-item-label">${escapeHtml(item.label)}</span>
897
+ ${item.badge ? `<span class="craft-sidebar-item-badge">${escapeHtml(item.badge)}</span>` : ""}
898
+ </button>`;
899
+ }
900
+ function normalizeId(value) {
901
+ return value.trim().toLowerCase().replace(/[^a-z0-9_-]+/g, "-").replace(/^-|-$/g, "") || "craft-sidebar";
902
+ }
903
+ function hashString(value) {
904
+ let hash = 5381;
905
+ for (let i = 0;i < value.length; i++)
906
+ hash = hash * 33 ^ value.charCodeAt(i);
907
+ return (hash >>> 0).toString(36);
908
+ }
909
+ function escapeHtml(value) {
910
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
911
+ }
912
+ function escapeAttribute(value) {
913
+ return escapeHtml(value).replace(/`/g, "&#96;");
914
+ }
915
+ function escapeScriptJson(value) {
916
+ return JSON.stringify(value).replace(/</g, "\\u003c").replace(/>/g, "\\u003e").replace(/&/g, "\\u0026");
917
+ }
918
+ function buildAttributes(props, componentDef, classes) {
919
+ const attrs = [];
920
+ attrs.push(`class="${classes.join(" ")}"`);
921
+ attrs.push(`data-craft="${componentDef.nativeType}"`);
922
+ for (const [key, value] of Object.entries(props))
923
+ if (value === !0)
924
+ attrs.push(key);
925
+ else if (value !== !1 && value !== void 0 && value !== null) {
926
+ const escaped = String(value).replace(/"/g, "&quot;");
927
+ attrs.push(`${key}="${escaped}"`);
928
+ }
929
+ return attrs.join(" ");
930
+ }
931
+ export function registerCraftComponent(name, definition) {
932
+ CRAFT_COMPONENTS[name] = definition;
933
+ }
934
+ export function getCraftComponents() {
935
+ return { ...CRAFT_COMPONENTS };
936
+ }
937
+ const craftComponents = {
938
+ CRAFT_COMPONENTS,
939
+ CRAFT_COMPONENT_STYLES,
940
+ CRAFT_COMPONENT_RUNTIME,
941
+ processCraftComponents,
942
+ registerCraftComponent,
943
+ getCraftComponents
944
+ };
945
+ export default craftComponents;