snice 7.0.2 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/.agents/skills/snice/SKILL.md +4 -0
  2. package/.agents/skills/snice/references/core-kitchen-sink.ts +39 -1
  3. package/README.md +59 -14
  4. package/adapters/react/SniceProvider.js +2 -2
  5. package/adapters/react/SniceRouter.js +2 -2
  6. package/adapters/react/matchRoute.js +2 -2
  7. package/adapters/react/useRequestHandler.js +2 -2
  8. package/bin/analyzer-contracts.js +6 -1
  9. package/bin/postinstall.js +59 -0
  10. package/bin/project-analyzer.js +466 -5
  11. package/bin/snice.js +3 -0
  12. package/dist/app-context.d.ts +11 -0
  13. package/dist/cdn/accordion/snice-accordion.js +2 -2
  14. package/dist/cdn/action-bar/snice-action-bar.js +2 -2
  15. package/dist/cdn/activity-feed/snice-activity-feed.js +2 -2
  16. package/dist/cdn/alert/snice-alert.js +2 -2
  17. package/dist/cdn/app-tiles/snice-app-tiles.js +2 -2
  18. package/dist/cdn/approval-flow/snice-approval-flow.js +2 -2
  19. package/dist/cdn/audio-recorder/snice-audio-recorder.js +2 -2
  20. package/dist/cdn/availability/snice-availability.js +2 -2
  21. package/dist/cdn/avatar/snice-avatar.js +2 -2
  22. package/dist/cdn/avatar-group/snice-avatar-group.js +2 -2
  23. package/dist/cdn/badge/snice-badge.js +2 -2
  24. package/dist/cdn/banner/snice-banner.js +2 -2
  25. package/dist/cdn/binpack/snice-binpack.js +2 -2
  26. package/dist/cdn/book/snice-book.js +2 -2
  27. package/dist/cdn/booking/snice-booking.js +2 -2
  28. package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +2 -2
  29. package/dist/cdn/button/snice-button.js +2 -2
  30. package/dist/cdn/calendar/snice-calendar.js +2 -2
  31. package/dist/cdn/camera/snice-camera.js +2 -2
  32. package/dist/cdn/camera-annotate/snice-camera-annotate.js +2 -2
  33. package/dist/cdn/candlestick/snice-candlestick.js +2 -2
  34. package/dist/cdn/card/snice-card.js +2 -2
  35. package/dist/cdn/carousel/snice-carousel.js +2 -2
  36. package/dist/cdn/cart/snice-cart.js +2 -2
  37. package/dist/cdn/chart/snice-chart.js +2 -2
  38. package/dist/cdn/chat/snice-chat.js +2 -2
  39. package/dist/cdn/checkbox/snice-checkbox.js +2 -2
  40. package/dist/cdn/chip/snice-chip.js +2 -2
  41. package/dist/cdn/code-block/snice-code-block.js +2 -2
  42. package/dist/cdn/color-display/snice-color-display.js +2 -2
  43. package/dist/cdn/color-picker/snice-color-picker.js +2 -2
  44. package/dist/cdn/command-palette/snice-command-palette.js +2 -2
  45. package/dist/cdn/comments/snice-comments.js +2 -2
  46. package/dist/cdn/countdown/snice-countdown.js +2 -2
  47. package/dist/cdn/cropper/snice-cropper.js +2 -2
  48. package/dist/cdn/data-card/snice-data-card.js +2 -2
  49. package/dist/cdn/date-picker/snice-date-picker.js +2 -2
  50. package/dist/cdn/date-range-picker/snice-date-range-picker.js +2 -2
  51. package/dist/cdn/date-time-picker/snice-date-time-picker.js +2 -2
  52. package/dist/cdn/diff/snice-diff.js +2 -2
  53. package/dist/cdn/divider/snice-divider.js +2 -2
  54. package/dist/cdn/doc/snice-doc.js +2 -2
  55. package/dist/cdn/draw/snice-draw.js +2 -2
  56. package/dist/cdn/drawer/snice-drawer.js +2 -2
  57. package/dist/cdn/empty-state/snice-empty-state.js +2 -2
  58. package/dist/cdn/estimate/snice-estimate.js +2 -2
  59. package/dist/cdn/file-gallery/snice-file-gallery.js +2 -2
  60. package/dist/cdn/file-upload/snice-file-upload.js +2 -2
  61. package/dist/cdn/flip-card/snice-flip-card.js +2 -2
  62. package/dist/cdn/flow/snice-flow.js +2 -2
  63. package/dist/cdn/form-layout/snice-form-layout.js +2 -2
  64. package/dist/cdn/funnel/snice-funnel.js +2 -2
  65. package/dist/cdn/gantt/snice-gantt.js +2 -2
  66. package/dist/cdn/gauge/snice-gauge.js +2 -2
  67. package/dist/cdn/grid/snice-grid.js +2 -2
  68. package/dist/cdn/heatmap/snice-heatmap.js +2 -2
  69. package/dist/cdn/image/snice-image.js +2 -2
  70. package/dist/cdn/input/snice-input.js +2 -2
  71. package/dist/cdn/invoice/snice-invoice.js +2 -2
  72. package/dist/cdn/kanban/snice-kanban.js +2 -2
  73. package/dist/cdn/key-value/snice-key-value.js +2 -2
  74. package/dist/cdn/kpi/snice-kpi.js +2 -2
  75. package/dist/cdn/layout/README.md +17 -2
  76. package/dist/cdn/layout/snice-layout.js +1656 -11
  77. package/dist/cdn/layout/snice-layout.js.map +1 -1
  78. package/dist/cdn/layout/snice-layout.min.js +379 -2
  79. package/dist/cdn/layout/snice-layout.min.js.map +1 -1
  80. package/dist/cdn/leaderboard/snice-leaderboard.js +2 -2
  81. package/dist/cdn/link/snice-link.js +2 -2
  82. package/dist/cdn/link-preview/snice-link-preview.js +2 -2
  83. package/dist/cdn/list/snice-list.js +2 -2
  84. package/dist/cdn/location/snice-location.js +2 -2
  85. package/dist/cdn/login/snice-login.js +2 -2
  86. package/dist/cdn/map/snice-map.js +2 -2
  87. package/dist/cdn/markdown/snice-markdown.js +2 -2
  88. package/dist/cdn/masonry/snice-masonry.js +2 -2
  89. package/dist/cdn/menu/snice-menu.js +2 -2
  90. package/dist/cdn/message-strip/snice-message-strip.js +2 -2
  91. package/dist/cdn/modal/snice-modal.js +2 -2
  92. package/dist/cdn/music-player/snice-music-player.js +2 -2
  93. package/dist/cdn/nav/snice-nav.js +2 -2
  94. package/dist/cdn/network-graph/snice-network-graph.js +2 -2
  95. package/dist/cdn/notification-center/snice-notification-center.js +2 -2
  96. package/dist/cdn/order-tracker/snice-order-tracker.js +2 -2
  97. package/dist/cdn/org-chart/snice-org-chart.js +2 -2
  98. package/dist/cdn/pagination/snice-pagination.js +2 -2
  99. package/dist/cdn/paint/snice-paint.js +2 -2
  100. package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +2 -2
  101. package/dist/cdn/permission-matrix/snice-permission-matrix.js +2 -2
  102. package/dist/cdn/podcast-player/snice-podcast-player.js +2 -2
  103. package/dist/cdn/popover/snice-popover.js +2 -2
  104. package/dist/cdn/pricing-table/snice-pricing-table.js +2 -2
  105. package/dist/cdn/product-card/snice-product-card.js +2 -2
  106. package/dist/cdn/progress/snice-progress.js +2 -2
  107. package/dist/cdn/progress-ring/snice-progress-ring.js +2 -2
  108. package/dist/cdn/qr-code/snice-qr-code.js +2 -2
  109. package/dist/cdn/qr-reader/snice-qr-reader.js +2 -2
  110. package/dist/cdn/radio/snice-radio.js +2 -2
  111. package/dist/cdn/range-slider/snice-range-slider.js +2 -2
  112. package/dist/cdn/rating/snice-rating.js +2 -2
  113. package/dist/cdn/receipt/snice-receipt.js +2 -2
  114. package/dist/cdn/recipe/snice-recipe.js +3 -3
  115. package/dist/cdn/recipe/snice-recipe.js.map +1 -1
  116. package/dist/cdn/recipe/snice-recipe.min.js +1 -1
  117. package/dist/cdn/recipe/snice-recipe.min.js.map +1 -1
  118. package/dist/cdn/runtime/README.md +2 -2
  119. package/dist/cdn/runtime/snice-runtime.esm.js +3725 -3336
  120. package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
  121. package/dist/cdn/runtime/snice-runtime.esm.min.js +1 -1
  122. package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
  123. package/dist/cdn/runtime/snice-runtime.js +3727 -3335
  124. package/dist/cdn/runtime/snice-runtime.js.map +1 -1
  125. package/dist/cdn/runtime/snice-runtime.min.js +1 -1
  126. package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
  127. package/dist/cdn/sankey/snice-sankey.js +2 -2
  128. package/dist/cdn/segmented-control/snice-segmented-control.js +2 -2
  129. package/dist/cdn/select/snice-select.js +2 -2
  130. package/dist/cdn/skeleton/snice-skeleton.js +2 -2
  131. package/dist/cdn/slider/snice-slider.js +2 -2
  132. package/dist/cdn/sortable/snice-sortable.js +2 -2
  133. package/dist/cdn/sparkline/snice-sparkline.js +2 -2
  134. package/dist/cdn/spinner/snice-spinner.js +2 -2
  135. package/dist/cdn/split-button/snice-split-button.js +2 -2
  136. package/dist/cdn/split-pane/snice-split-pane.js +2 -2
  137. package/dist/cdn/spotlight/snice-spotlight.js +2 -2
  138. package/dist/cdn/stat-group/snice-stat-group.js +2 -2
  139. package/dist/cdn/step-input/snice-step-input.js +2 -2
  140. package/dist/cdn/stepper/snice-stepper.js +2 -2
  141. package/dist/cdn/switch/snice-switch.js +2 -2
  142. package/dist/cdn/table/README.md +6 -2
  143. package/dist/cdn/table/snice-table.esm.js +366 -56
  144. package/dist/cdn/table/snice-table.esm.js.map +1 -1
  145. package/dist/cdn/table/snice-table.esm.min.js +107 -46
  146. package/dist/cdn/table/snice-table.esm.min.js.map +1 -1
  147. package/dist/cdn/table/snice-table.js +367 -59
  148. package/dist/cdn/table/snice-table.js.map +1 -1
  149. package/dist/cdn/table/snice-table.min.js +155 -94
  150. package/dist/cdn/table/snice-table.min.js.map +1 -1
  151. package/dist/cdn/tabs/snice-tabs.js +2 -2
  152. package/dist/cdn/tag/snice-tag.js +2 -2
  153. package/dist/cdn/tag-input/snice-tag-input.js +2 -2
  154. package/dist/cdn/terminal/snice-terminal.js +3 -2
  155. package/dist/cdn/terminal/snice-terminal.js.map +1 -1
  156. package/dist/cdn/terminal/snice-terminal.min.js +1 -0
  157. package/dist/cdn/terminal/snice-terminal.min.js.map +1 -1
  158. package/dist/cdn/testimonial/snice-testimonial.js +2 -2
  159. package/dist/cdn/textarea/snice-textarea.js +2 -2
  160. package/dist/cdn/time-picker/snice-time-picker.js +2 -2
  161. package/dist/cdn/time-range-picker/snice-time-range-picker.js +2 -2
  162. package/dist/cdn/timeline/snice-timeline.js +2 -2
  163. package/dist/cdn/timer/snice-timer.js +2 -2
  164. package/dist/cdn/toast/snice-toast.js +2 -2
  165. package/dist/cdn/tooltip/snice-tooltip.js +2 -2
  166. package/dist/cdn/tree/snice-tree.js +2 -2
  167. package/dist/cdn/treemap/snice-treemap.js +2 -2
  168. package/dist/cdn/user-card/snice-user-card.js +2 -2
  169. package/dist/cdn/video-player/README.md +1 -1
  170. package/dist/cdn/video-player/snice-video-player.js +3 -2
  171. package/dist/cdn/video-player/snice-video-player.js.map +1 -1
  172. package/dist/cdn/video-player/snice-video-player.min.js +1 -0
  173. package/dist/cdn/video-player/snice-video-player.min.js.map +1 -1
  174. package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +2 -2
  175. package/dist/cdn/waterfall/snice-waterfall.js +2 -2
  176. package/dist/cdn/weather/snice-weather.js +2 -2
  177. package/dist/cdn/work-order/snice-work-order.js +2 -2
  178. package/dist/components/recipe/snice-recipe.js +1 -1
  179. package/dist/components/recipe/snice-recipe.js.map +1 -1
  180. package/dist/components/table/snice-table.d.ts +1 -0
  181. package/dist/components/table/snice-table.js +18 -2
  182. package/dist/components/table/snice-table.js.map +1 -1
  183. package/dist/components/table/table-tree-data.js +1 -0
  184. package/dist/components/table/table-tree-data.js.map +1 -1
  185. package/dist/components/terminal/snice-terminal.js +1 -0
  186. package/dist/components/terminal/snice-terminal.js.map +1 -1
  187. package/dist/components/video-player/snice-video-player.js +1 -0
  188. package/dist/components/video-player/snice-video-player.js.map +1 -1
  189. package/dist/context-provider.d.ts +16 -0
  190. package/dist/daemon-target.d.ts +10 -0
  191. package/dist/daemon.d.ts +10 -0
  192. package/dist/index.cjs +3721 -3329
  193. package/dist/index.cjs.map +1 -1
  194. package/dist/index.d.ts +3 -0
  195. package/dist/index.esm.js +3719 -3330
  196. package/dist/index.esm.js.map +1 -1
  197. package/dist/index.iife.js +3721 -3329
  198. package/dist/index.iife.js.map +1 -1
  199. package/dist/keyboard-filter.d.ts +25 -0
  200. package/dist/on.d.ts +1 -1
  201. package/dist/parts.d.ts +0 -17
  202. package/dist/react/SniceProvider.js +2 -2
  203. package/dist/react/SniceRouter.js +2 -2
  204. package/dist/react/index.js +2 -2
  205. package/dist/react/matchRoute.js +2 -2
  206. package/dist/react/useRequestHandler.js +2 -2
  207. package/dist/request-response.d.ts +9 -1
  208. package/dist/symbols.cjs +11 -2
  209. package/dist/symbols.cjs.map +1 -1
  210. package/dist/symbols.d.ts +3 -0
  211. package/dist/symbols.esm.js +9 -3
  212. package/dist/symbols.esm.js.map +1 -1
  213. package/dist/testing.d.ts +1 -1
  214. package/dist/transitions.cjs +2 -2
  215. package/dist/transitions.esm.js +2 -2
  216. package/dist/types/app-context.d.ts +9 -58
  217. package/dist/types/daemon.d.ts +8 -0
  218. package/dist/types/dispatch-options.d.ts +2 -0
  219. package/dist/types/index.d.ts +1 -0
  220. package/dist/types/on-options.d.ts +5 -0
  221. package/dist/types/request-options.d.ts +2 -0
  222. package/dist/types/respond-options.d.ts +2 -0
  223. package/docs/ai/DEVELOPMENT.md +15 -1
  224. package/docs/ai/README.md +5 -1
  225. package/docs/ai/api.md +13 -4
  226. package/docs/ai/architecture.md +50 -1
  227. package/docs/ai/cli.md +9 -0
  228. package/docs/ai/components/avatar.md +8 -8
  229. package/docs/ai/components/breadcrumbs.md +2 -1
  230. package/docs/ai/components/button.md +2 -7
  231. package/docs/ai/components/calendar.md +1 -1
  232. package/docs/ai/components/camera.md +1 -1
  233. package/docs/ai/components/chart.md +3 -1
  234. package/docs/ai/components/code-block.md +2 -2
  235. package/docs/ai/components/date-picker.md +5 -19
  236. package/docs/ai/components/date-range-picker.md +4 -12
  237. package/docs/ai/components/draw.md +5 -5
  238. package/docs/ai/components/drawer.md +4 -4
  239. package/docs/ai/components/form-layout.md +2 -0
  240. package/docs/ai/components/icons.md +7 -16
  241. package/docs/ai/components/key-value.md +3 -22
  242. package/docs/ai/components/layout.md +8 -12
  243. package/docs/ai/components/leaderboard.md +2 -2
  244. package/docs/ai/components/link-preview.md +4 -3
  245. package/docs/ai/components/login.md +11 -0
  246. package/docs/ai/components/markdown.md +7 -0
  247. package/docs/ai/components/masonry.md +6 -0
  248. package/docs/ai/components/menu.md +1 -1
  249. package/docs/ai/components/modal.md +7 -0
  250. package/docs/ai/components/notification-center.md +5 -4
  251. package/docs/ai/components/radio.md +7 -0
  252. package/docs/ai/components/rating.md +3 -3
  253. package/docs/ai/components/select.md +4 -13
  254. package/docs/ai/components/spotlight.md +2 -0
  255. package/docs/ai/components/table.md +1 -4
  256. package/docs/ai/components/tag-input.md +6 -0
  257. package/docs/ai/components/terminal.md +6 -0
  258. package/docs/ai/components/tooltip.md +10 -16
  259. package/docs/ai/components/tree.md +2 -2
  260. package/docs/ai/components/video-player.md +5 -0
  261. package/docs/ai/components/waterfall.md +7 -0
  262. package/docs/ai/daemons.md +80 -0
  263. package/docs/ai/decorators.md +6 -4
  264. package/docs/ai/events.md +35 -0
  265. package/docs/ai/patterns.md +45 -1
  266. package/docs/ai/request-response.md +26 -9
  267. package/docs/ai/routing.md +16 -1
  268. package/docs/cli.md +7 -0
  269. package/docs/components/breadcrumbs.md +2 -1
  270. package/docs/components/calendar.md +1 -1
  271. package/docs/components/camera.md +1 -1
  272. package/docs/components/chart.md +1 -1
  273. package/docs/components/code-block.md +13 -4
  274. package/docs/components/color-picker.md +6 -5
  275. package/docs/components/date-time-picker.md +14 -0
  276. package/docs/components/diff.md +2 -1
  277. package/docs/components/draw.md +5 -5
  278. package/docs/components/drawer.md +4 -4
  279. package/docs/components/input.md +1 -0
  280. package/docs/components/layout.md +20 -22
  281. package/docs/components/leaderboard.md +10 -3
  282. package/docs/components/link-preview.md +11 -9
  283. package/docs/components/login.md +4 -0
  284. package/docs/components/menu.md +1 -1
  285. package/docs/components/modal.md +1 -0
  286. package/docs/components/nav.md +1 -0
  287. package/docs/components/network-graph.md +1 -0
  288. package/docs/components/notification-center.md +2 -1
  289. package/docs/components/product-card.md +1 -0
  290. package/docs/components/qr-reader.md +1 -0
  291. package/docs/components/rating.md +4 -4
  292. package/docs/components/select.md +1 -0
  293. package/docs/components/spotlight.md +2 -0
  294. package/docs/components/tabs.md +1 -0
  295. package/docs/components/terminal.md +3 -0
  296. package/docs/components/textarea.md +1 -1
  297. package/docs/components/time-picker.md +14 -0
  298. package/docs/components/tooltip.md +2 -0
  299. package/docs/components/tree.md +2 -2
  300. package/docs/daemons.md +200 -0
  301. package/docs/events.md +92 -2
  302. package/docs/request-response.md +20 -13
  303. package/docs/routing.md +25 -1
  304. package/package.json +6 -4
@@ -156,6 +156,7 @@ class TableTreeData {
156
156
  btn.className = `tree-toggle${treeRow.expanded ? ' tree-toggle--expanded' : ''}`;
157
157
  btn.innerHTML = `<svg class="tree-toggle-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M6 9l6 6 6-6"/></svg>`;
158
158
  btn.setAttribute('aria-expanded', String(treeRow.expanded));
159
+ btn.setAttribute('aria-label', `${treeRow.expanded ? 'Collapse' : 'Expand'} row`);
159
160
  btn.addEventListener('click', (e) => {
160
161
  e.stopPropagation();
161
162
  this.toggle(treeRow.key);
@@ -1 +1 @@
1
- {"version":3,"file":"table-tree-data.js","sources":["../../../../components/table/table-tree-data.ts"],"sourcesContent":["/**\n * Tree data engine for snice-table.\n * Hierarchical rows with indent levels, expand/collapse nodes.\n */\n\nexport interface TreeRow {\n /** Path array defining hierarchy. e.g. ['US', 'CA', 'LA'] */\n path: string[];\n /** The original row data */\n data: any;\n /** Depth level (0-based) */\n depth: number;\n /** Whether this node has children */\n hasChildren: boolean;\n /** Whether this node is expanded */\n expanded: boolean;\n /** Unique key derived from path */\n key: string;\n /** Whether this is a gap node (auto-generated for missing parents) */\n isGap: boolean;\n}\n\nexport interface TreeDataOptions {\n /** Function to get the path array from a row */\n getPath: (row: any) => string[];\n /** Default expansion depth. -1 = all collapsed, Infinity = all expanded */\n defaultExpansionDepth?: number;\n /** Group column key (where expand/collapse controls appear) */\n groupColumn?: string;\n}\n\nexport class TableTreeData {\n private options: TreeDataOptions | null = null;\n private expandedKeys: Set<string> = new Set();\n private flatRows: TreeRow[] = [];\n private enabled = false;\n\n attach(options: TreeDataOptions) {\n this.options = options;\n this.enabled = true;\n\n // Pre-expand to default depth\n if (options.defaultExpansionDepth !== undefined && options.defaultExpansionDepth >= 0) {\n this.defaultDepth = options.defaultExpansionDepth;\n }\n }\n\n private defaultDepth = 0;\n\n isEnabled(): boolean {\n return this.enabled;\n }\n\n /**\n * Process raw data into a flat tree structure.\n * Returns only visible rows (respecting expand/collapse state).\n */\n processData(data: any[]): TreeRow[] {\n if (!this.options) return [];\n\n // Build tree from path arrays\n const nodeMap = new Map<string, { data: any; children: Set<string>; depth: number; isGap: boolean }>();\n\n for (const row of data) {\n const path = this.options.getPath(row);\n const key = path.join('/');\n\n nodeMap.set(key, {\n data: row,\n children: new Set(),\n depth: path.length - 1,\n isGap: false,\n });\n\n // Ensure all ancestors exist (gap nodes)\n for (let i = 1; i < path.length; i++) {\n const ancestorPath = path.slice(0, i);\n const ancestorKey = ancestorPath.join('/');\n if (!nodeMap.has(ancestorKey)) {\n nodeMap.set(ancestorKey, {\n data: { [this.options.groupColumn || 'name']: ancestorPath[ancestorPath.length - 1] },\n children: new Set(),\n depth: i - 1,\n isGap: true,\n });\n }\n }\n\n // Register as child of parent\n if (path.length > 1) {\n const parentKey = path.slice(0, -1).join('/');\n const parent = nodeMap.get(parentKey);\n if (parent) parent.children.add(key);\n }\n }\n\n // Find root nodes (depth 0)\n const rootKeys: string[] = [];\n for (const [key, node] of nodeMap) {\n if (node.depth === 0) rootKeys.push(key);\n }\n rootKeys.sort();\n\n // Auto-expand to default depth on first process\n if (this.expandedKeys.size === 0 && this.defaultDepth > 0) {\n for (const [key, node] of nodeMap) {\n if (node.depth < this.defaultDepth && node.children.size > 0) {\n this.expandedKeys.add(key);\n }\n }\n }\n\n // Flatten tree respecting expand/collapse\n this.flatRows = [];\n const flatten = (key: string) => {\n const node = nodeMap.get(key);\n if (!node) return;\n\n const hasChildren = node.children.size > 0;\n const expanded = this.expandedKeys.has(key);\n\n this.flatRows.push({\n path: key.split('/'),\n data: node.data,\n depth: node.depth,\n hasChildren,\n expanded,\n key,\n isGap: node.isGap,\n });\n\n if (expanded) {\n const childKeys = Array.from(node.children).sort();\n for (const childKey of childKeys) {\n flatten(childKey);\n }\n }\n };\n\n for (const rootKey of rootKeys) {\n flatten(rootKey);\n }\n\n return this.flatRows;\n }\n\n /** Get the current flat rows */\n getFlatRows(): TreeRow[] {\n return this.flatRows;\n }\n\n /** Toggle node expansion */\n toggle(key: string) {\n if (this.expandedKeys.has(key)) {\n this.expandedKeys.delete(key);\n } else {\n this.expandedKeys.add(key);\n }\n }\n\n /** Expand a node */\n expand(key: string) {\n this.expandedKeys.add(key);\n }\n\n /** Collapse a node */\n collapse(key: string) {\n this.expandedKeys.delete(key);\n }\n\n /** Expand all nodes */\n expandAll(data: any[]) {\n if (!this.options) return;\n for (const row of data) {\n const path = this.options.getPath(row);\n // Expand all ancestor paths\n for (let i = 1; i <= path.length; i++) {\n this.expandedKeys.add(path.slice(0, i).join('/'));\n }\n }\n }\n\n /** Collapse all nodes */\n collapseAll() {\n this.expandedKeys.clear();\n }\n\n /** Check if a node is expanded */\n isExpanded(key: string): boolean {\n return this.expandedKeys.has(key);\n }\n\n /** Create the expand/collapse toggle for a tree node */\n createToggle(treeRow: TreeRow): HTMLElement {\n const container = document.createElement('span');\n container.className = 'tree-indent';\n container.style.paddingLeft = `${treeRow.depth * 1.5}rem`;\n\n if (treeRow.hasChildren) {\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.className = `tree-toggle${treeRow.expanded ? ' tree-toggle--expanded' : ''}`;\n btn.innerHTML = `<svg class=\"tree-toggle-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"/></svg>`;\n btn.setAttribute('aria-expanded', String(treeRow.expanded));\n btn.addEventListener('click', (e) => {\n e.stopPropagation();\n this.toggle(treeRow.key);\n // Dispatch on the button — composed:true crosses shadow DOM boundary\n btn.dispatchEvent(new CustomEvent('tree-toggle', {\n detail: { key: treeRow.key, expanded: this.isExpanded(treeRow.key) },\n bubbles: true,\n composed: true,\n }));\n });\n container.appendChild(btn);\n } else {\n // Spacer for leaf nodes (align with siblings)\n const spacer = document.createElement('span');\n spacer.className = 'tree-spacer';\n container.appendChild(spacer);\n }\n\n return container;\n }\n\n getGroupColumn(): string {\n return this.options?.groupColumn || '';\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table-tree-data.js","sources":["../../../../components/table/table-tree-data.ts"],"sourcesContent":["/**\n * Tree data engine for snice-table.\n * Hierarchical rows with indent levels, expand/collapse nodes.\n */\n\nexport interface TreeRow {\n /** Path array defining hierarchy. e.g. ['US', 'CA', 'LA'] */\n path: string[];\n /** The original row data */\n data: any;\n /** Depth level (0-based) */\n depth: number;\n /** Whether this node has children */\n hasChildren: boolean;\n /** Whether this node is expanded */\n expanded: boolean;\n /** Unique key derived from path */\n key: string;\n /** Whether this is a gap node (auto-generated for missing parents) */\n isGap: boolean;\n}\n\nexport interface TreeDataOptions {\n /** Function to get the path array from a row */\n getPath: (row: any) => string[];\n /** Default expansion depth. -1 = all collapsed, Infinity = all expanded */\n defaultExpansionDepth?: number;\n /** Group column key (where expand/collapse controls appear) */\n groupColumn?: string;\n}\n\nexport class TableTreeData {\n private options: TreeDataOptions | null = null;\n private expandedKeys: Set<string> = new Set();\n private flatRows: TreeRow[] = [];\n private enabled = false;\n\n attach(options: TreeDataOptions) {\n this.options = options;\n this.enabled = true;\n\n // Pre-expand to default depth\n if (options.defaultExpansionDepth !== undefined && options.defaultExpansionDepth >= 0) {\n this.defaultDepth = options.defaultExpansionDepth;\n }\n }\n\n private defaultDepth = 0;\n\n isEnabled(): boolean {\n return this.enabled;\n }\n\n /**\n * Process raw data into a flat tree structure.\n * Returns only visible rows (respecting expand/collapse state).\n */\n processData(data: any[]): TreeRow[] {\n if (!this.options) return [];\n\n // Build tree from path arrays\n const nodeMap = new Map<string, { data: any; children: Set<string>; depth: number; isGap: boolean }>();\n\n for (const row of data) {\n const path = this.options.getPath(row);\n const key = path.join('/');\n\n nodeMap.set(key, {\n data: row,\n children: new Set(),\n depth: path.length - 1,\n isGap: false,\n });\n\n // Ensure all ancestors exist (gap nodes)\n for (let i = 1; i < path.length; i++) {\n const ancestorPath = path.slice(0, i);\n const ancestorKey = ancestorPath.join('/');\n if (!nodeMap.has(ancestorKey)) {\n nodeMap.set(ancestorKey, {\n data: { [this.options.groupColumn || 'name']: ancestorPath[ancestorPath.length - 1] },\n children: new Set(),\n depth: i - 1,\n isGap: true,\n });\n }\n }\n\n // Register as child of parent\n if (path.length > 1) {\n const parentKey = path.slice(0, -1).join('/');\n const parent = nodeMap.get(parentKey);\n if (parent) parent.children.add(key);\n }\n }\n\n // Find root nodes (depth 0)\n const rootKeys: string[] = [];\n for (const [key, node] of nodeMap) {\n if (node.depth === 0) rootKeys.push(key);\n }\n rootKeys.sort();\n\n // Auto-expand to default depth on first process\n if (this.expandedKeys.size === 0 && this.defaultDepth > 0) {\n for (const [key, node] of nodeMap) {\n if (node.depth < this.defaultDepth && node.children.size > 0) {\n this.expandedKeys.add(key);\n }\n }\n }\n\n // Flatten tree respecting expand/collapse\n this.flatRows = [];\n const flatten = (key: string) => {\n const node = nodeMap.get(key);\n if (!node) return;\n\n const hasChildren = node.children.size > 0;\n const expanded = this.expandedKeys.has(key);\n\n this.flatRows.push({\n path: key.split('/'),\n data: node.data,\n depth: node.depth,\n hasChildren,\n expanded,\n key,\n isGap: node.isGap,\n });\n\n if (expanded) {\n const childKeys = Array.from(node.children).sort();\n for (const childKey of childKeys) {\n flatten(childKey);\n }\n }\n };\n\n for (const rootKey of rootKeys) {\n flatten(rootKey);\n }\n\n return this.flatRows;\n }\n\n /** Get the current flat rows */\n getFlatRows(): TreeRow[] {\n return this.flatRows;\n }\n\n /** Toggle node expansion */\n toggle(key: string) {\n if (this.expandedKeys.has(key)) {\n this.expandedKeys.delete(key);\n } else {\n this.expandedKeys.add(key);\n }\n }\n\n /** Expand a node */\n expand(key: string) {\n this.expandedKeys.add(key);\n }\n\n /** Collapse a node */\n collapse(key: string) {\n this.expandedKeys.delete(key);\n }\n\n /** Expand all nodes */\n expandAll(data: any[]) {\n if (!this.options) return;\n for (const row of data) {\n const path = this.options.getPath(row);\n // Expand all ancestor paths\n for (let i = 1; i <= path.length; i++) {\n this.expandedKeys.add(path.slice(0, i).join('/'));\n }\n }\n }\n\n /** Collapse all nodes */\n collapseAll() {\n this.expandedKeys.clear();\n }\n\n /** Check if a node is expanded */\n isExpanded(key: string): boolean {\n return this.expandedKeys.has(key);\n }\n\n /** Create the expand/collapse toggle for a tree node */\n createToggle(treeRow: TreeRow): HTMLElement {\n const container = document.createElement('span');\n container.className = 'tree-indent';\n container.style.paddingLeft = `${treeRow.depth * 1.5}rem`;\n\n if (treeRow.hasChildren) {\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.className = `tree-toggle${treeRow.expanded ? ' tree-toggle--expanded' : ''}`;\n btn.innerHTML = `<svg class=\"tree-toggle-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"/></svg>`;\n btn.setAttribute('aria-expanded', String(treeRow.expanded));\n btn.setAttribute('aria-label', `${treeRow.expanded ? 'Collapse' : 'Expand'} row`);\n btn.addEventListener('click', (e) => {\n e.stopPropagation();\n this.toggle(treeRow.key);\n // Dispatch on the button — composed:true crosses shadow DOM boundary\n btn.dispatchEvent(new CustomEvent('tree-toggle', {\n detail: { key: treeRow.key, expanded: this.isExpanded(treeRow.key) },\n bubbles: true,\n composed: true,\n }));\n });\n container.appendChild(btn);\n } else {\n // Spacer for leaf nodes (align with siblings)\n const spacer = document.createElement('span');\n spacer.className = 'tree-spacer';\n container.appendChild(spacer);\n }\n\n return container;\n }\n\n getGroupColumn(): string {\n return this.options?.groupColumn || '';\n }\n}\n"],"names":[],"mappings":"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"}
@@ -169,6 +169,7 @@ let SniceTerminal = (() => {
169
169
  type="text"
170
170
  class="terminal-input"
171
171
  part="input"
172
+ aria-label="Terminal command"
172
173
  @keydown="${(e) => this.handleKeyDown(e)}"
173
174
  autocomplete="off"
174
175
  spellcheck="false"
@@ -1 +1 @@
1
- {"version":3,"file":"snice-terminal.js","sources":["../../../components/terminal/snice-terminal.css?inline","../../../../components/terminal/snice-terminal.ts"],"sourcesContent":["export default \":host{display:block;width:100%;height:var(--snice-terminal-height,400px);font-family:Monaco,Menlo,'Ubuntu Mono',Consolas,source-code-pro,monospace;font-size:var(--snice-terminal-font-size, .875rem);line-height:var(--snice-terminal-line-height, 1.2);background:var(--snice-terminal-background,#1e1e1e);color:var(--snice-terminal-foreground,#d4d4d4);border-radius:var(--snice-terminal-border-radius,var(--snice-border-radius-md,.25rem));overflow:hidden;box-sizing:border-box}.terminal-container{display:flex;flex-direction:column;height:100%;padding:var(--snice-spacing-md,1rem);overflow:hidden;box-sizing:border-box}.terminal-output{flex:1;overflow-y:auto;overflow-x:hidden;margin-bottom:var(--snice-spacing-xs,.5rem)}.terminal-output::-webkit-scrollbar{width:var(--snice-spacing-xs,.5rem)}.terminal-output::-webkit-scrollbar-track{background:0 0}.terminal-output::-webkit-scrollbar-thumb{background:var(--snice-terminal-scrollbar-color,var(--snice-color-border,rgb(226 226 226)));border-radius:var(--snice-border-radius-sm,.125rem)}.terminal-output::-webkit-scrollbar-thumb:hover{background:var(--snice-terminal-scrollbar-hover-color,var(--snice-color-border-hover,rgb(209 213 219)))}.terminal-line{display:flex;align-items:flex-start;gap:var(--snice-spacing-xs,.5rem);margin:0}.terminal-line.input{color:var(--snice-terminal-input-color,#d4d4d4)}.terminal-line.output{color:var(--snice-terminal-output-color,#d4d4d4)}.terminal-line.error{color:var(--snice-terminal-error-color,#f48771)}.terminal-line.info{color:var(--snice-terminal-info-color,#75beff)}.terminal-line.success{color:var(--snice-terminal-success-color,#89d185)}.terminal-line.warning{color:var(--snice-terminal-warning-color,#dcdcaa)}.line-timestamp{color:var(--snice-terminal-timestamp-color,hsl(0 0% 40%));font-size:var(--snice-font-size-xs, .75rem);flex-shrink:0;min-width:3.75rem}.line-content{flex:1;white-space:pre}.terminal-input-line{display:flex;align-items:center;gap:var(--snice-spacing-xs,.5rem);padding:var(--snice-spacing-sm,.75rem) 0}.terminal-prompt{color:var(--snice-terminal-prompt-color,#89d185);flex-shrink:0;user-select:none}.terminal-input{flex:1;background:0 0;border:none;outline:0;color:var(--snice-terminal-foreground,#d4d4d4);font-family:inherit;font-size:inherit;line-height:inherit;caret-color:var(--snice-terminal-cursor-color,#d4d4d4);padding:0}.terminal-input::selection{background:var(--snice-terminal-selection-color,hsl(210 52% 31% / .6))}@keyframes blink{0%,50%{opacity:1}100%,51%{opacity:0}}.terminal-input:focus-visible{animation:none}.terminal-cursor{display:inline-block;width:8px;height:1.2em;background:var(--snice-terminal-cursor-color,#d4d4d4);animation:1s step-end infinite blink;vertical-align:text-bottom}:host([readonly]) .terminal-input-line{display:none}.ansi-black{color:var(--snice-terminal-ansi-black,#000)}.ansi-red{color:var(--snice-terminal-ansi-red,#cd3131)}.ansi-green{color:var(--snice-terminal-ansi-green,#0dbc79)}.ansi-yellow{color:var(--snice-terminal-ansi-yellow,#e5e510)}.ansi-blue{color:var(--snice-terminal-ansi-blue,#2472c8)}.ansi-magenta{color:var(--snice-terminal-ansi-magenta,#bc3fbc)}.ansi-cyan{color:var(--snice-terminal-ansi-cyan,#11a8cd)}.ansi-white{color:var(--snice-terminal-ansi-white,#e5e5e5)}.ansi-bright-black{color:var(--snice-terminal-ansi-bright-black,#666)}.ansi-bright-red{color:var(--snice-terminal-ansi-bright-red,#f14c4c)}.ansi-bright-green{color:var(--snice-terminal-ansi-bright-green,#23d18b)}.ansi-bright-yellow{color:var(--snice-terminal-ansi-bright-yellow,#f5f543)}.ansi-bright-blue{color:var(--snice-terminal-ansi-bright-blue,#3b8eea)}.ansi-bright-magenta{color:var(--snice-terminal-ansi-bright-magenta,#d670d6)}.ansi-bright-cyan{color:var(--snice-terminal-ansi-bright-cyan,#29b8db)}.ansi-bright-white{color:var(--snice-terminal-ansi-bright-white,#fff)}.ansi-bold{font-weight:var(--snice-font-weight-bold,700)}.ansi-dim{opacity:.7}.ansi-italic{font-style:italic}.ansi-underline{text-decoration:underline}.empty-hint{color:var(--snice-terminal-hint-color,hsl(0 0% 40%));font-style:italic;margin-bottom:8px}@media (prefers-reduced-motion:reduce){*{transition-duration:0s!important;animation-duration:0s!important}}\";","import { element, property, dispatch, request, render, styles, html, css, query, unsafeHTML, ready } from 'snice';\nimport cssContent from './snice-terminal.css?inline';\nimport type {\n SniceTerminalElement,\n TerminalLine,\n TerminalLineType,\n TerminalCommandRequest,\n TerminalCommandResponse,\n SniceTerminalEventMap\n} from './snice-terminal.types';\n\n@element('snice-terminal')\nexport class SniceTerminal extends HTMLElement implements SniceTerminalElement {\n private lines: TerminalLine[] = [];\n\n @property({ type: Number })\n private renderTrigger = 0;\n\n @property()\n prompt = '$ ';\n\n @property()\n cwd = '~';\n\n @property({ type: Boolean })\n readonly = false;\n\n @property({ type: Number, attribute: 'max-lines' })\n maxLines = 1000;\n\n @property({ type: Boolean, attribute: 'show-timestamps' })\n showTimestamps = false;\n\n @query('.terminal-input')\n private inputElement?: HTMLInputElement;\n\n @query('.terminal-output')\n private outputElement?: HTMLDivElement;\n\n private commandHistory: string[] = [];\n private historyIndex = -1;\n private currentInput = '';\n\n @dispatch('terminal-command', { bubbles: true, composed: true })\n private dispatchCommandEvent(command: string, args: string[]) {\n return { command, args };\n }\n\n @dispatch('terminal-clear', { bubbles: true, composed: true })\n private dispatchClearEvent() {\n return {};\n }\n\n @dispatch('terminal-ready', { bubbles: true, composed: true })\n private dispatchReadyEvent() {\n return {};\n }\n\n @ready()\n onReady() {\n this.dispatchReadyEvent();\n }\n\n @request('terminal-command')\n async *executeCommand(commandLine: string): any {\n const parts = commandLine.trim().split(/\\s+/);\n const command = parts[0];\n const args = parts.slice(1);\n\n const payload: TerminalCommandRequest = {\n command,\n args,\n cwd: this.cwd,\n history: [...this.commandHistory]\n };\n\n try {\n const response: TerminalCommandResponse = await (yield payload);\n return response;\n } catch (error) {\n // No handler found or error occurred\n console.error('[Terminal] Command execution error:', error);\n return {\n error: error instanceof Error ? error.message : `Command not found: ${command}`,\n exitCode: 127\n };\n }\n }\n\n private updateLines() {\n // Limit lines if needed — splice in place rather than slice()/reassign so\n // we don't allocate a fresh array per write under high-frequency streaming.\n const overflow = this.lines.length - this.maxLines;\n if (overflow > 0) {\n this.lines.splice(0, overflow);\n }\n\n // Trigger re-render by updating a tracked property\n this.renderTrigger++;\n\n // Scroll to bottom\n requestAnimationFrame(() => {\n if (this.outputElement) {\n this.outputElement.scrollTop = this.outputElement.scrollHeight;\n }\n });\n }\n\n @render()\n render() {\n return html/*html*/`\n <div class=\"terminal-container\" part=\"container\" @click=\"${() => this.handleContainerClick()}\">\n <div class=\"terminal-output\" part=\"output\" role=\"log\" aria-live=\"polite\" aria-atomic=\"false\">\n ${this.lines.map(line => this.renderLine(line))}\n </div>\n\n <if ${!this.readonly}>\n <div class=\"terminal-input-line\" part=\"input-line\">\n <span class=\"terminal-prompt\" part=\"prompt\">${this.prompt}</span>\n <input\n type=\"text\"\n class=\"terminal-input\"\n part=\"input\"\n @keydown=\"${(e: KeyboardEvent) => this.handleKeyDown(e)}\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n </div>\n </if>\n </div>\n `;\n }\n\n private handleContainerClick() {\n if (!this.readonly) {\n this.focus();\n }\n }\n\n private renderLine(line: TerminalLine) {\n const timestamp = this.showTimestamps\n ? line.timestamp.toLocaleTimeString('en-US', { hour12: false })\n : '';\n\n return html/*html*/`\n <div class=\"terminal-line ${line.type}\" part=\"line\" data-type=\"${line.type}\">\n <if ${this.showTimestamps}>\n <span class=\"line-timestamp\" part=\"timestamp\">${timestamp}</span>\n </if>\n <span class=\"line-content\" part=\"line-content\">${unsafeHTML(line.content)}</span>\n </div>\n `;\n }\n\n @styles()\n styles() {\n return css/*css*/`${cssContent}`;\n }\n\n // Event handlers\n private handleKeyDown(e: KeyboardEvent) {\n const input = e.target as HTMLInputElement;\n\n switch (e.key) {\n case 'Enter':\n e.preventDefault();\n this.handleCommand(input.value);\n input.value = '';\n this.historyIndex = -1;\n this.currentInput = '';\n break;\n\n case 'ArrowUp':\n e.preventDefault();\n this.navigateHistory('up', input);\n break;\n\n case 'ArrowDown':\n e.preventDefault();\n this.navigateHistory('down', input);\n break;\n\n case 'Tab':\n e.preventDefault();\n // TODO: Add command completion\n break;\n\n case 'c':\n if (e.ctrlKey) {\n e.preventDefault();\n input.value = '';\n this.writeln('^C', 'info');\n }\n break;\n\n case 'l':\n if (e.ctrlKey) {\n e.preventDefault();\n this.clear();\n }\n break;\n }\n }\n\n private navigateHistory(direction: 'up' | 'down', input: HTMLInputElement) {\n if (this.commandHistory.length === 0) return;\n\n if (direction === 'up') {\n if (this.historyIndex === -1) {\n this.currentInput = input.value;\n this.historyIndex = this.commandHistory.length - 1;\n } else if (this.historyIndex > 0) {\n this.historyIndex--;\n }\n input.value = this.commandHistory[this.historyIndex];\n } else {\n if (this.historyIndex === -1) return;\n\n if (this.historyIndex < this.commandHistory.length - 1) {\n this.historyIndex++;\n input.value = this.commandHistory[this.historyIndex];\n } else {\n this.historyIndex = -1;\n input.value = this.currentInput;\n }\n }\n }\n\n private async handleCommand(commandLine: string) {\n commandLine = commandLine.trim();\n if (!commandLine) return;\n\n // Add to history\n this.commandHistory.push(commandLine);\n\n // Write input line\n this.writeln(`${this.prompt}${commandLine}`, 'input');\n\n // Parse command for event\n const parts = commandLine.split(/\\s+/);\n const command = parts[0];\n const args = parts.slice(1);\n\n // Dispatch event\n this.dispatchCommandEvent(command, args);\n\n // Execute command via @request\n const result = await this.executeCommand(commandLine);\n\n // Handle response\n if (result.output) {\n // Check for special clear marker\n if (result.output === '\\x1B[CLEAR]') {\n this.clear();\n } else {\n this.writeln(result.output, 'output');\n }\n }\n\n if (result.error) {\n this.writeError(result.error);\n }\n }\n\n\n // ANSI color parsing. Escapes HTML first so untrusted input cannot inject\n // markup; only the ANSI escape sequences produce real <span> tags.\n private parseAnsiColors(text: string): string {\n const ansiColorMap: Record<number, string> = {\n 30: '#000000', // Black\n 31: '#ff5555', // Red\n 32: '#50fa7b', // Green\n 33: '#f1fa8c', // Yellow\n 34: '#bd93f9', // Blue\n 35: '#ff79c6', // Magenta\n 36: '#8be9fd', // Cyan\n 37: '#f8f8f2', // White\n 90: '#6272a4', // Bright Black (Gray)\n 91: '#ff6e6e', // Bright Red\n 92: '#69ff94', // Bright Green\n 93: '#ffffa5', // Bright Yellow\n 94: '#d6acff', // Bright Blue\n 95: '#ff92df', // Bright Magenta\n 96: '#a4ffff', // Bright Cyan\n 97: '#ffffff' // Bright White\n };\n\n const escape = (s: string) => s\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n\n // Split on ANSI escape sequences, escape text segments, pass through\n // recognized color/reset codes as <span> tags.\n const parts: string[] = [];\n const re = /\\x1b\\[([0-9;]+)m/g;\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = re.exec(text)) !== null) {\n parts.push(escape(text.slice(lastIndex, match.index)));\n const codeList = match[1].split(';').map(Number);\n if (codeList.includes(0)) {\n parts.push('</span>');\n } else {\n for (const code of codeList) {\n if (ansiColorMap[code]) {\n parts.push(`<span style=\"color: ${ansiColorMap[code]}\">`);\n break;\n }\n }\n }\n lastIndex = match.index + match[0].length;\n }\n parts.push(escape(text.slice(lastIndex)));\n return parts.join('');\n }\n\n // Public API\n write(content: string, type: TerminalLineType = 'output') {\n if (!content) return;\n\n // Parse ANSI colors\n const parsedContent = this.parseAnsiColors(content);\n\n const lines = parsedContent.split('\\n');\n for (const line of lines) {\n this.lines.push({\n id: crypto.randomUUID(),\n type,\n content: line,\n timestamp: new Date(),\n });\n }\n this.updateLines();\n }\n\n writeln(content: string, type: TerminalLineType = 'output') {\n this.write(content, type);\n }\n\n writeError(content: string) {\n this.write(content, 'error');\n }\n\n clear() {\n this.lines.length = 0;\n this.liveLineBuffer = '';\n this.liveLine = null;\n this.updateLines();\n this.dispatchClearEvent();\n }\n\n focus() {\n this.inputElement?.focus();\n }\n\n writeLines(lines: Array<{ content: string; type?: TerminalLineType }>) {\n for (const line of lines) {\n this.lines.push({\n id: crypto.randomUUID(),\n type: line.type || 'output',\n // Route through parseAnsiColors so content is HTML-escaped first\n // (same safety path as write()); bypassing this was a stored XSS vector.\n content: this.parseAnsiColors(line.content),\n timestamp: new Date(),\n });\n }\n this.updateLines();\n }\n\n // ─── Streaming API ─────────────────────────────────────────────────────────\n // appendChunk + pipeFrom let callers feed raw chunks (e.g. from a child\n // process stdout, a WebSocket, or an LLM token stream) without splitting on\n // newlines themselves. A trailing partial line stays \"live\" — a single\n // TerminalLine whose content grows as more chunks arrive — until a newline\n // commits it.\n\n private liveLineBuffer = '';\n private liveLine: TerminalLine | null = null;\n private liveLineType: TerminalLineType = 'output';\n\n appendChunk(chunk: string, type: TerminalLineType = 'output') {\n if (!chunk) return;\n\n // If the type changed mid-stream, commit the existing live line first.\n if (this.liveLine && type !== this.liveLineType) {\n this.commitLiveLine();\n }\n this.liveLineType = type;\n\n // Combine pending tail with new chunk, then split on \\n.\n const combined = this.liveLineBuffer + chunk;\n const parts = combined.split('\\n');\n // Last element is whatever follows the final \\n (or all of it, if no \\n).\n const tail = parts.pop() ?? '';\n\n // Each complete part becomes its own committed line.\n for (const raw of parts) {\n const escaped = this.parseAnsiColors(raw);\n // Reuse the live line for the first complete part if present, otherwise push.\n if (this.liveLine) {\n this.liveLine.content = escaped;\n this.liveLine = null;\n } else {\n this.lines.push({\n id: crypto.randomUUID(),\n type,\n content: escaped,\n timestamp: new Date(),\n });\n }\n }\n\n // Tail (no trailing newline) keeps growing as a live line.\n this.liveLineBuffer = tail;\n if (tail) {\n const escaped = this.parseAnsiColors(tail);\n if (this.liveLine) {\n this.liveLine.content = escaped;\n } else {\n this.liveLine = {\n id: crypto.randomUUID(),\n type,\n content: escaped,\n timestamp: new Date(),\n };\n this.lines.push(this.liveLine);\n }\n }\n\n this.updateLines();\n }\n\n /** Force the current live (un-newlined) buffer to be treated as a finished line. */\n commitLiveLine() {\n this.liveLine = null;\n this.liveLineBuffer = '';\n }\n\n /**\n * Consume an AsyncIterable<string> or a ReadableStream<string|Uint8Array> until\n * exhaustion, calling appendChunk on each chunk. Cancellation: throw / return\n * from the source, or call `terminal.clear()` to stop displaying — the pipe\n * itself just runs to completion.\n */\n async pipeFrom(source: AsyncIterable<string> | ReadableStream<string | Uint8Array>, type: TerminalLineType = 'output'): Promise<void> {\n const iter = (source as ReadableStream).getReader\n ? readableStreamToAsyncIterable(source as ReadableStream<string | Uint8Array>)\n : (source as AsyncIterable<string>);\n\n const decoder = new TextDecoder();\n for await (const chunk of iter) {\n const text = typeof chunk === 'string' ? chunk : decoder.decode(chunk, { stream: true });\n if (text) this.appendChunk(text, type);\n }\n // Flush any pending decoder state (no-op for string sources).\n const flush = decoder.decode();\n if (flush) this.appendChunk(flush, type);\n }\n\n getHistory(): string[] {\n return [...this.commandHistory];\n }\n\n clearHistory() {\n this.commandHistory = [];\n this.historyIndex = -1;\n }\n}\n\n/** Adapt a ReadableStream to an async iterable (Safari < 14.1 lacks the\n * built-in `Symbol.asyncIterator` on streams). */\nasync function* readableStreamToAsyncIterable<T>(stream: ReadableStream<T>): AsyncIterable<T> {\n const reader = stream.getReader();\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) return;\n yield value as T;\n }\n } finally {\n reader.releaseLock();\n }\n}\n"],"names":[],"mappings":";;;AAAA,iBAAe,8kIAA8kI;;ICYhlI,aAAa,GAAA,CAAA,MAAA;4BADzB,OAAO,CAAC,gBAAgB,CAAC,CAAA;;;;sBACS,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAnB,KAAA,cAAQ,WAAW,CAAA;;;;AACpC,YAAA,IAAA,CAAA,KAAK,IADF,iBAAA,CAAA,IAAA,EAAA,0BAAA,CAAa,EACQ,EAAE,CAAA;YAG1B,IAAA,CAAA,aAAa,GAAA,iBAAA,CAAA,IAAA,EAAA,2BAAA,EAAG,CAAC,CAAA;YAGzB,IAAA,CAAA,MAAM,IAAA,iBAAA,CAAA,IAAA,EAAA,gCAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,oBAAA,EAAG,IAAI,CAAA,CAAA;YAGb,IAAA,CAAA,GAAG,IAAA,iBAAA,CAAA,IAAA,EAAA,yBAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,iBAAA,EAAG,GAAG,CAAA,CAAA;YAGT,IAAA,CAAA,QAAQ,IAAA,iBAAA,CAAA,IAAA,EAAA,sBAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,sBAAA,EAAG,KAAK,CAAA,CAAA;YAGhB,IAAA,CAAA,QAAQ,IAAA,iBAAA,CAAA,IAAA,EAAA,2BAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,sBAAA,EAAG,IAAI,CAAA,CAAA;YAGf,IAAA,CAAA,cAAc,IAAA,iBAAA,CAAA,IAAA,EAAA,2BAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,4BAAA,EAAG,KAAK,CAAA,CAAA;AAGd,YAAA,IAAA,CAAA,YAAY,IAAA,iBAAA,CAAA,IAAA,EAAA,iCAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,0BAAA,EAAA,MAAA,CAAA,CAAA;AAGZ,YAAA,IAAA,CAAA,aAAa,IAAA,iBAAA,CAAA,IAAA,EAAA,+BAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,2BAAA,EAAA,MAAA,CAAA,CAAA;YAEb,IAAA,CAAA,cAAc,IAAA,iBAAA,CAAA,IAAA,EAAA,gCAAA,CAAA,EAAa,EAAE,CAAA;YAC7B,IAAA,CAAA,YAAY,GAAG,EAAE;YACjB,IAAA,CAAA,YAAY,GAAG,EAAE;;;;;;;YAkVjB,IAAA,CAAA,cAAc,GAAG,EAAE;YACnB,IAAA,CAAA,QAAQ,GAAwB,IAAI;YACpC,IAAA,CAAA,YAAY,GAAqB,QAAQ;QAyFnD;;;AAvcG,YAAA,yBAAA,GAAA,CAAA,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;AAG1B,YAAA,kBAAA,GAAA,CAAA,QAAQ,EAAE,CAAA;AAGV,YAAA,eAAA,GAAA,CAAA,QAAQ,EAAE,CAAA;AAGV,YAAA,oBAAA,GAAA,CAAA,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;oCAG3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAA;0CAGlD,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAA;wCAGzD,KAAK,CAAC,iBAAiB,CAAC,CAAA;yCAGxB,KAAK,CAAC,kBAAkB,CAAC,CAAA;AAOzB,YAAA,gCAAA,GAAA,CAAA,QAAQ,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAK/D,YAAA,8BAAA,GAAA,CAAA,QAAQ,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAK7D,YAAA,8BAAA,GAAA,CAAA,QAAQ,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAK7D,YAAA,mBAAA,GAAA,CAAA,KAAK,EAAE,CAAA;0CAKP,OAAO,CAAC,kBAAkB,CAAC,CAAA;AA6C3B,YAAA,kBAAA,GAAA,CAAA,MAAM,EAAE,CAAA;AA8CR,YAAA,kBAAA,GAAA,CAAA,MAAM,EAAE,CAAA;AA9GT,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,gCAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,sBAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,oBAAoB,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAK5B,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,8BAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,oBAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,kBAAkB,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAK1B,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,8BAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,oBAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,kBAAkB,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAK1B,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,mBAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,SAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,OAAO,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAKP,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,0BAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,gBAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAO,cAAc,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AA6CrB,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,QAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,MAAM,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AA8CN,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,QAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,MAAM,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;YA3IN,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,yBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,eAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,eAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,aAAa,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAb,aAAa,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,2BAAA,EAAA,gCAAA,CAAA;YAGrB,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,QAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,QAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,MAAM,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAN,MAAM,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,oBAAA,EAAA,yBAAA,CAAA;YAGN,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,KAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,GAAG,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAH,GAAG,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA;YAGH,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,UAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,QAAQ,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAR,QAAQ,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,sBAAA,EAAA,2BAAA,CAAA;YAGR,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,UAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,QAAQ,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAR,QAAQ,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,sBAAA,EAAA,2BAAA,CAAA;YAGR,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,0BAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,gBAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,cAAc,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAd,cAAc,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,4BAAA,EAAA,iCAAA,CAAA;YAGd,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,wBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,cAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,cAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,YAAY,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAZ,YAAY,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,0BAAA,EAAA,+BAAA,CAAA;YAGpB,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,yBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,eAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,eAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,aAAa,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAb,aAAa,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,2BAAA,EAAA,gCAAA,CAAA;YAzBvB,YAAA,CAAA,IAAA,EAAA,gBAAA,GAAA,EAAA,KAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,uBAAA,CAAA;;;YAAa,iBAAA,CAAA,UAAA,EAAA,uBAAA,CAAA;;QAgCH,oBAAoB,CAAC,OAAe,EAAE,IAAc,EAAA;AAC1D,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;QAC1B;QAGQ,kBAAkB,GAAA;AACxB,YAAA,OAAO,EAAE;QACX;QAGQ,kBAAkB,GAAA;AACxB,YAAA,OAAO,EAAE;QACX;QAGA,OAAO,GAAA;YACL,IAAI,CAAC,kBAAkB,EAAE;QAC3B;AAGA,QAAA,OAAO,cAAc,CAAC,WAAmB,EAAA;YACvC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;AAC7C,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;YACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAE3B,YAAA,MAAM,OAAO,GAA2B;gBACtC,OAAO;gBACP,IAAI;gBACJ,GAAG,EAAE,IAAI,CAAC,GAAG;AACb,gBAAA,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc;aACjC;AAED,YAAA,IAAI;AACF,gBAAA,MAAM,QAAQ,GAA4B,OAAO,MAAM,OAAO,CAAC;AAC/D,gBAAA,OAAO,QAAQ;YACjB;YAAE,OAAO,KAAK,EAAE;;AAEd,gBAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC;gBAC3D,OAAO;AACL,oBAAA,KAAK,EAAE,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,CAAA,mBAAA,EAAsB,OAAO,CAAA,CAAE;AAC/E,oBAAA,QAAQ,EAAE;iBACX;YACH;QACF;QAEQ,WAAW,GAAA;;;YAGjB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ;AAClD,YAAA,IAAI,QAAQ,GAAG,CAAC,EAAE;gBAChB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC;YAChC;;YAGA,IAAI,CAAC,aAAa,EAAE;;YAGpB,qBAAqB,CAAC,MAAK;AACzB,gBAAA,IAAI,IAAI,CAAC,aAAa,EAAE;oBACtB,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY;gBAChE;AACF,YAAA,CAAC,CAAC;QACJ;QAGA,MAAM,GAAA;YACJ,OAAO,IAAI,UAAQ;AAC0C,+DAAA,EAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAA;;AAEtF,UAAA,EAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;;;cAG3C,CAAC,IAAI,CAAC,QAAQ,CAAA;;AAE8B,wDAAA,EAAA,IAAI,CAAC,MAAM,CAAA;;;;;0BAK3C,CAAC,CAAgB,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;;;;;;;KAOhE;QACH;QAEQ,oBAAoB,GAAA;AAC1B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAClB,IAAI,CAAC,KAAK,EAAE;YACd;QACF;AAEQ,QAAA,UAAU,CAAC,IAAkB,EAAA;AACnC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC;AACrB,kBAAE,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;kBAC5D,EAAE;YAEN,OAAO,IAAI,UAAQ;AACW,gCAAA,EAAA,IAAI,CAAC,IAAI,CAAA,yBAAA,EAA4B,IAAI,CAAC,IAAI,CAAA;AAClE,YAAA,EAAA,IAAI,CAAC,cAAc,CAAA;0DACyB,SAAS,CAAA;;AAEV,uDAAA,EAAA,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;;KAE5E;QACH;QAGA,MAAM,GAAA;AACJ,YAAA,OAAO,GAAG,SAAO,CAAA,EAAG,UAAU,EAAE;QAClC;;AAGQ,QAAA,aAAa,CAAC,CAAgB,EAAA;AACpC,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,MAA0B;AAE1C,YAAA,QAAQ,CAAC,CAAC,GAAG;AACX,gBAAA,KAAK,OAAO;oBACV,CAAC,CAAC,cAAc,EAAE;AAClB,oBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;AAC/B,oBAAA,KAAK,CAAC,KAAK,GAAG,EAAE;AAChB,oBAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,oBAAA,IAAI,CAAC,YAAY,GAAG,EAAE;oBACtB;AAEF,gBAAA,KAAK,SAAS;oBACZ,CAAC,CAAC,cAAc,EAAE;AAClB,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC;oBACjC;AAEF,gBAAA,KAAK,WAAW;oBACd,CAAC,CAAC,cAAc,EAAE;AAClB,oBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;oBACnC;AAEF,gBAAA,KAAK,KAAK;oBACR,CAAC,CAAC,cAAc,EAAE;;oBAElB;AAEF,gBAAA,KAAK,GAAG;AACN,oBAAA,IAAI,CAAC,CAAC,OAAO,EAAE;wBACb,CAAC,CAAC,cAAc,EAAE;AAClB,wBAAA,KAAK,CAAC,KAAK,GAAG,EAAE;AAChB,wBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;oBAC5B;oBACA;AAEF,gBAAA,KAAK,GAAG;AACN,oBAAA,IAAI,CAAC,CAAC,OAAO,EAAE;wBACb,CAAC,CAAC,cAAc,EAAE;wBAClB,IAAI,CAAC,KAAK,EAAE;oBACd;oBACA;;QAEN;QAEQ,eAAe,CAAC,SAAwB,EAAE,KAAuB,EAAA;AACvE,YAAA,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC;gBAAE;AAEtC,YAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE,EAAE;AAC5B,oBAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK;oBAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;gBACpD;AAAO,qBAAA,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;oBAChC,IAAI,CAAC,YAAY,EAAE;gBACrB;gBACA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;YACtD;iBAAO;AACL,gBAAA,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE;oBAAE;AAE9B,gBAAA,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;oBACtD,IAAI,CAAC,YAAY,EAAE;oBACnB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;gBACtD;qBAAO;AACL,oBAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,oBAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY;gBACjC;YACF;QACF;QAEQ,MAAM,aAAa,CAAC,WAAmB,EAAA;AAC7C,YAAA,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE;AAChC,YAAA,IAAI,CAAC,WAAW;gBAAE;;AAGlB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;;AAGrC,YAAA,IAAI,CAAC,OAAO,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,EAAG,WAAW,CAAA,CAAE,EAAE,OAAO,CAAC;;YAGrD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;AACtC,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;YACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;;AAG3B,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC;;YAGxC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;;AAGrD,YAAA,IAAI,MAAM,CAAC,MAAM,EAAE;;AAEjB,gBAAA,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,EAAE;oBACnC,IAAI,CAAC,KAAK,EAAE;gBACd;qBAAO;oBACL,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;gBACvC;YACF;AAEA,YAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/B;QACF;;;AAKQ,QAAA,eAAe,CAAC,IAAY,EAAA;AAClC,YAAA,MAAM,YAAY,GAA2B;gBAC3C,EAAE,EAAE,SAAS;gBACb,EAAE,EAAE,SAAS;gBACb,EAAE,EAAE,SAAS;gBACb,EAAE,EAAE,SAAS;gBACb,EAAE,EAAE,SAAS;gBACb,EAAE,EAAE,SAAS;gBACb,EAAE,EAAE,SAAS;gBACb,EAAE,EAAE,SAAS;gBACb,EAAE,EAAE,SAAS;gBACb,EAAE,EAAE,SAAS;gBACb,EAAE,EAAE,SAAS;gBACb,EAAE,EAAE,SAAS;gBACb,EAAE,EAAE,SAAS;gBACb,EAAE,EAAE,SAAS;gBACb,EAAE,EAAE,SAAS;gBACb,EAAE,EAAE,SAAS;aACd;AAED,YAAA,MAAM,MAAM,GAAG,CAAC,CAAS,KAAK;AAC3B,iBAAA,OAAO,CAAC,IAAI,EAAE,OAAO;AACrB,iBAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,iBAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,iBAAA,OAAO,CAAC,IAAI,EAAE,QAAQ;AACtB,iBAAA,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;;;YAIzB,MAAM,KAAK,GAAa,EAAE;YAC1B,MAAM,EAAE,GAAG,mBAAmB;YAC9B,IAAI,SAAS,GAAG,CAAC;AACjB,YAAA,IAAI,KAA6B;AACjC,YAAA,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;AACvC,gBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACtD,gBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AAChD,gBAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AACxB,oBAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;gBACvB;qBAAO;AACL,oBAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AAC3B,wBAAA,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE;4BACtB,KAAK,CAAC,IAAI,CAAC,CAAA,oBAAA,EAAuB,YAAY,CAAC,IAAI,CAAC,CAAA,EAAA,CAAI,CAAC;4BACzD;wBACF;oBACF;gBACF;gBACA,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;YAC3C;AACA,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AACzC,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB;;AAGA,QAAA,KAAK,CAAC,OAAe,EAAE,IAAA,GAAyB,QAAQ,EAAA;AACtD,YAAA,IAAI,CAAC,OAAO;gBAAE;;YAGd,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;YAEnD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;AACvC,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACd,oBAAA,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;oBACvB,IAAI;AACJ,oBAAA,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,IAAI,IAAI,EAAE;AACtB,iBAAA,CAAC;YACJ;YACA,IAAI,CAAC,WAAW,EAAE;QACpB;AAEA,QAAA,OAAO,CAAC,OAAe,EAAE,IAAA,GAAyB,QAAQ,EAAA;AACxD,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;QAC3B;AAEA,QAAA,UAAU,CAAC,OAAe,EAAA;AACxB,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;QAC9B;QAEA,KAAK,GAAA;AACH,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AACrB,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACpB,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,kBAAkB,EAAE;QAC3B;QAEA,KAAK,GAAA;AACH,YAAA,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE;QAC5B;AAEA,QAAA,UAAU,CAAC,KAA0D,EAAA;AACnE,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACd,oBAAA,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;AACvB,oBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ;;;oBAG3B,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;oBAC3C,SAAS,EAAE,IAAI,IAAI,EAAE;AACtB,iBAAA,CAAC;YACJ;YACA,IAAI,CAAC,WAAW,EAAE;QACpB;AAaA,QAAA,WAAW,CAAC,KAAa,EAAE,IAAA,GAAyB,QAAQ,EAAA;AAC1D,YAAA,IAAI,CAAC,KAAK;gBAAE;;YAGZ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,YAAY,EAAE;gBAC/C,IAAI,CAAC,cAAc,EAAE;YACvB;AACA,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;;AAGxB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,GAAG,KAAK;YAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;;YAElC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;;AAG9B,YAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;gBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;;AAEzC,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO;AAC/B,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;gBACtB;qBAAO;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACd,wBAAA,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;wBACvB,IAAI;AACJ,wBAAA,OAAO,EAAE,OAAO;wBAChB,SAAS,EAAE,IAAI,IAAI,EAAE;AACtB,qBAAA,CAAC;gBACJ;YACF;;AAGA,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;YAC1B,IAAI,IAAI,EAAE;gBACR,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC1C,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO;gBACjC;qBAAO;oBACL,IAAI,CAAC,QAAQ,GAAG;AACd,wBAAA,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;wBACvB,IAAI;AACJ,wBAAA,OAAO,EAAE,OAAO;wBAChB,SAAS,EAAE,IAAI,IAAI,EAAE;qBACtB;oBACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAChC;YACF;YAEA,IAAI,CAAC,WAAW,EAAE;QACpB;;QAGA,cAAc,GAAA;AACZ,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;QAC1B;AAEA;;;;;AAKG;AACH,QAAA,MAAM,QAAQ,CAAC,MAAmE,EAAE,OAAyB,QAAQ,EAAA;AACnH,YAAA,MAAM,IAAI,GAAI,MAAyB,CAAC;AACtC,kBAAE,6BAA6B,CAAC,MAA6C;kBAC1E,MAAgC;AAErC,YAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE;AACjC,YAAA,WAAW,MAAM,KAAK,IAAI,IAAI,EAAE;gBAC9B,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACxF,gBAAA,IAAI,IAAI;AAAE,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;YACxC;;AAEA,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE;AAC9B,YAAA,IAAI,KAAK;AAAE,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;QAC1C;QAEA,UAAU,GAAA;AACR,YAAA,OAAO,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;QACjC;QAEA,YAAY,GAAA;AACV,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE;QACxB;;;;AAGF;AACmD;AACnD,gBAAgB,6BAA6B,CAAI,MAAyB,EAAA;AACxE,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE;AACjC,IAAA,IAAI;QACF,OAAO,IAAI,EAAE;YACX,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE;AAC3C,YAAA,IAAI,IAAI;gBAAE;AACV,YAAA,MAAM,KAAU;QAClB;IACF;YAAU;QACR,MAAM,CAAC,WAAW,EAAE;IACtB;AACF;;;;"}
1
+ {"version":3,"file":"snice-terminal.js","sources":["../../../components/terminal/snice-terminal.css?inline","../../../../components/terminal/snice-terminal.ts"],"sourcesContent":["export default \":host{display:block;width:100%;height:var(--snice-terminal-height,400px);font-family:Monaco,Menlo,'Ubuntu Mono',Consolas,source-code-pro,monospace;font-size:var(--snice-terminal-font-size, .875rem);line-height:var(--snice-terminal-line-height, 1.2);background:var(--snice-terminal-background,#1e1e1e);color:var(--snice-terminal-foreground,#d4d4d4);border-radius:var(--snice-terminal-border-radius,var(--snice-border-radius-md,.25rem));overflow:hidden;box-sizing:border-box}.terminal-container{display:flex;flex-direction:column;height:100%;padding:var(--snice-spacing-md,1rem);overflow:hidden;box-sizing:border-box}.terminal-output{flex:1;overflow-y:auto;overflow-x:hidden;margin-bottom:var(--snice-spacing-xs,.5rem)}.terminal-output::-webkit-scrollbar{width:var(--snice-spacing-xs,.5rem)}.terminal-output::-webkit-scrollbar-track{background:0 0}.terminal-output::-webkit-scrollbar-thumb{background:var(--snice-terminal-scrollbar-color,var(--snice-color-border,rgb(226 226 226)));border-radius:var(--snice-border-radius-sm,.125rem)}.terminal-output::-webkit-scrollbar-thumb:hover{background:var(--snice-terminal-scrollbar-hover-color,var(--snice-color-border-hover,rgb(209 213 219)))}.terminal-line{display:flex;align-items:flex-start;gap:var(--snice-spacing-xs,.5rem);margin:0}.terminal-line.input{color:var(--snice-terminal-input-color,#d4d4d4)}.terminal-line.output{color:var(--snice-terminal-output-color,#d4d4d4)}.terminal-line.error{color:var(--snice-terminal-error-color,#f48771)}.terminal-line.info{color:var(--snice-terminal-info-color,#75beff)}.terminal-line.success{color:var(--snice-terminal-success-color,#89d185)}.terminal-line.warning{color:var(--snice-terminal-warning-color,#dcdcaa)}.line-timestamp{color:var(--snice-terminal-timestamp-color,hsl(0 0% 40%));font-size:var(--snice-font-size-xs, .75rem);flex-shrink:0;min-width:3.75rem}.line-content{flex:1;white-space:pre}.terminal-input-line{display:flex;align-items:center;gap:var(--snice-spacing-xs,.5rem);padding:var(--snice-spacing-sm,.75rem) 0}.terminal-prompt{color:var(--snice-terminal-prompt-color,#89d185);flex-shrink:0;user-select:none}.terminal-input{flex:1;background:0 0;border:none;outline:0;color:var(--snice-terminal-foreground,#d4d4d4);font-family:inherit;font-size:inherit;line-height:inherit;caret-color:var(--snice-terminal-cursor-color,#d4d4d4);padding:0}.terminal-input::selection{background:var(--snice-terminal-selection-color,hsl(210 52% 31% / .6))}@keyframes blink{0%,50%{opacity:1}100%,51%{opacity:0}}.terminal-input:focus-visible{animation:none}.terminal-cursor{display:inline-block;width:8px;height:1.2em;background:var(--snice-terminal-cursor-color,#d4d4d4);animation:1s step-end infinite blink;vertical-align:text-bottom}:host([readonly]) .terminal-input-line{display:none}.ansi-black{color:var(--snice-terminal-ansi-black,#000)}.ansi-red{color:var(--snice-terminal-ansi-red,#cd3131)}.ansi-green{color:var(--snice-terminal-ansi-green,#0dbc79)}.ansi-yellow{color:var(--snice-terminal-ansi-yellow,#e5e510)}.ansi-blue{color:var(--snice-terminal-ansi-blue,#2472c8)}.ansi-magenta{color:var(--snice-terminal-ansi-magenta,#bc3fbc)}.ansi-cyan{color:var(--snice-terminal-ansi-cyan,#11a8cd)}.ansi-white{color:var(--snice-terminal-ansi-white,#e5e5e5)}.ansi-bright-black{color:var(--snice-terminal-ansi-bright-black,#666)}.ansi-bright-red{color:var(--snice-terminal-ansi-bright-red,#f14c4c)}.ansi-bright-green{color:var(--snice-terminal-ansi-bright-green,#23d18b)}.ansi-bright-yellow{color:var(--snice-terminal-ansi-bright-yellow,#f5f543)}.ansi-bright-blue{color:var(--snice-terminal-ansi-bright-blue,#3b8eea)}.ansi-bright-magenta{color:var(--snice-terminal-ansi-bright-magenta,#d670d6)}.ansi-bright-cyan{color:var(--snice-terminal-ansi-bright-cyan,#29b8db)}.ansi-bright-white{color:var(--snice-terminal-ansi-bright-white,#fff)}.ansi-bold{font-weight:var(--snice-font-weight-bold,700)}.ansi-dim{opacity:.7}.ansi-italic{font-style:italic}.ansi-underline{text-decoration:underline}.empty-hint{color:var(--snice-terminal-hint-color,hsl(0 0% 40%));font-style:italic;margin-bottom:8px}@media (prefers-reduced-motion:reduce){*{transition-duration:0s!important;animation-duration:0s!important}}\";","import { element, property, dispatch, request, render, styles, html, css, query, unsafeHTML, ready } from 'snice';\nimport cssContent from './snice-terminal.css?inline';\nimport type {\n SniceTerminalElement,\n TerminalLine,\n TerminalLineType,\n TerminalCommandRequest,\n TerminalCommandResponse,\n SniceTerminalEventMap\n} from './snice-terminal.types';\n\n@element('snice-terminal')\nexport class SniceTerminal extends HTMLElement implements SniceTerminalElement {\n private lines: TerminalLine[] = [];\n\n @property({ type: Number })\n private renderTrigger = 0;\n\n @property()\n prompt = '$ ';\n\n @property()\n cwd = '~';\n\n @property({ type: Boolean })\n readonly = false;\n\n @property({ type: Number, attribute: 'max-lines' })\n maxLines = 1000;\n\n @property({ type: Boolean, attribute: 'show-timestamps' })\n showTimestamps = false;\n\n @query('.terminal-input')\n private inputElement?: HTMLInputElement;\n\n @query('.terminal-output')\n private outputElement?: HTMLDivElement;\n\n private commandHistory: string[] = [];\n private historyIndex = -1;\n private currentInput = '';\n\n @dispatch('terminal-command', { bubbles: true, composed: true })\n private dispatchCommandEvent(command: string, args: string[]) {\n return { command, args };\n }\n\n @dispatch('terminal-clear', { bubbles: true, composed: true })\n private dispatchClearEvent() {\n return {};\n }\n\n @dispatch('terminal-ready', { bubbles: true, composed: true })\n private dispatchReadyEvent() {\n return {};\n }\n\n @ready()\n onReady() {\n this.dispatchReadyEvent();\n }\n\n @request('terminal-command')\n async *executeCommand(commandLine: string): any {\n const parts = commandLine.trim().split(/\\s+/);\n const command = parts[0];\n const args = parts.slice(1);\n\n const payload: TerminalCommandRequest = {\n command,\n args,\n cwd: this.cwd,\n history: [...this.commandHistory]\n };\n\n try {\n const response: TerminalCommandResponse = await (yield payload);\n return response;\n } catch (error) {\n // No handler found or error occurred\n console.error('[Terminal] Command execution error:', error);\n return {\n error: error instanceof Error ? error.message : `Command not found: ${command}`,\n exitCode: 127\n };\n }\n }\n\n private updateLines() {\n // Limit lines if needed — splice in place rather than slice()/reassign so\n // we don't allocate a fresh array per write under high-frequency streaming.\n const overflow = this.lines.length - this.maxLines;\n if (overflow > 0) {\n this.lines.splice(0, overflow);\n }\n\n // Trigger re-render by updating a tracked property\n this.renderTrigger++;\n\n // Scroll to bottom\n requestAnimationFrame(() => {\n if (this.outputElement) {\n this.outputElement.scrollTop = this.outputElement.scrollHeight;\n }\n });\n }\n\n @render()\n render() {\n return html/*html*/`\n <div class=\"terminal-container\" part=\"container\" @click=\"${() => this.handleContainerClick()}\">\n <div class=\"terminal-output\" part=\"output\" role=\"log\" aria-live=\"polite\" aria-atomic=\"false\">\n ${this.lines.map(line => this.renderLine(line))}\n </div>\n\n <if ${!this.readonly}>\n <div class=\"terminal-input-line\" part=\"input-line\">\n <span class=\"terminal-prompt\" part=\"prompt\">${this.prompt}</span>\n <input\n type=\"text\"\n class=\"terminal-input\"\n part=\"input\"\n aria-label=\"Terminal command\"\n @keydown=\"${(e: KeyboardEvent) => this.handleKeyDown(e)}\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n </div>\n </if>\n </div>\n `;\n }\n\n private handleContainerClick() {\n if (!this.readonly) {\n this.focus();\n }\n }\n\n private renderLine(line: TerminalLine) {\n const timestamp = this.showTimestamps\n ? line.timestamp.toLocaleTimeString('en-US', { hour12: false })\n : '';\n\n return html/*html*/`\n <div class=\"terminal-line ${line.type}\" part=\"line\" data-type=\"${line.type}\">\n <if ${this.showTimestamps}>\n <span class=\"line-timestamp\" part=\"timestamp\">${timestamp}</span>\n </if>\n <span class=\"line-content\" part=\"line-content\">${unsafeHTML(line.content)}</span>\n </div>\n `;\n }\n\n @styles()\n styles() {\n return css/*css*/`${cssContent}`;\n }\n\n // Event handlers\n private handleKeyDown(e: KeyboardEvent) {\n const input = e.target as HTMLInputElement;\n\n switch (e.key) {\n case 'Enter':\n e.preventDefault();\n this.handleCommand(input.value);\n input.value = '';\n this.historyIndex = -1;\n this.currentInput = '';\n break;\n\n case 'ArrowUp':\n e.preventDefault();\n this.navigateHistory('up', input);\n break;\n\n case 'ArrowDown':\n e.preventDefault();\n this.navigateHistory('down', input);\n break;\n\n case 'Tab':\n e.preventDefault();\n // TODO: Add command completion\n break;\n\n case 'c':\n if (e.ctrlKey) {\n e.preventDefault();\n input.value = '';\n this.writeln('^C', 'info');\n }\n break;\n\n case 'l':\n if (e.ctrlKey) {\n e.preventDefault();\n this.clear();\n }\n break;\n }\n }\n\n private navigateHistory(direction: 'up' | 'down', input: HTMLInputElement) {\n if (this.commandHistory.length === 0) return;\n\n if (direction === 'up') {\n if (this.historyIndex === -1) {\n this.currentInput = input.value;\n this.historyIndex = this.commandHistory.length - 1;\n } else if (this.historyIndex > 0) {\n this.historyIndex--;\n }\n input.value = this.commandHistory[this.historyIndex];\n } else {\n if (this.historyIndex === -1) return;\n\n if (this.historyIndex < this.commandHistory.length - 1) {\n this.historyIndex++;\n input.value = this.commandHistory[this.historyIndex];\n } else {\n this.historyIndex = -1;\n input.value = this.currentInput;\n }\n }\n }\n\n private async handleCommand(commandLine: string) {\n commandLine = commandLine.trim();\n if (!commandLine) return;\n\n // Add to history\n this.commandHistory.push(commandLine);\n\n // Write input line\n this.writeln(`${this.prompt}${commandLine}`, 'input');\n\n // Parse command for event\n const parts = commandLine.split(/\\s+/);\n const command = parts[0];\n const args = parts.slice(1);\n\n // Dispatch event\n this.dispatchCommandEvent(command, args);\n\n // Execute command via @request\n const result = await this.executeCommand(commandLine);\n\n // Handle response\n if (result.output) {\n // Check for special clear marker\n if (result.output === '\\x1B[CLEAR]') {\n this.clear();\n } else {\n this.writeln(result.output, 'output');\n }\n }\n\n if (result.error) {\n this.writeError(result.error);\n }\n }\n\n\n // ANSI color parsing. Escapes HTML first so untrusted input cannot inject\n // markup; only the ANSI escape sequences produce real <span> tags.\n private parseAnsiColors(text: string): string {\n const ansiColorMap: Record<number, string> = {\n 30: '#000000', // Black\n 31: '#ff5555', // Red\n 32: '#50fa7b', // Green\n 33: '#f1fa8c', // Yellow\n 34: '#bd93f9', // Blue\n 35: '#ff79c6', // Magenta\n 36: '#8be9fd', // Cyan\n 37: '#f8f8f2', // White\n 90: '#6272a4', // Bright Black (Gray)\n 91: '#ff6e6e', // Bright Red\n 92: '#69ff94', // Bright Green\n 93: '#ffffa5', // Bright Yellow\n 94: '#d6acff', // Bright Blue\n 95: '#ff92df', // Bright Magenta\n 96: '#a4ffff', // Bright Cyan\n 97: '#ffffff' // Bright White\n };\n\n const escape = (s: string) => s\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n\n // Split on ANSI escape sequences, escape text segments, pass through\n // recognized color/reset codes as <span> tags.\n const parts: string[] = [];\n const re = /\\x1b\\[([0-9;]+)m/g;\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = re.exec(text)) !== null) {\n parts.push(escape(text.slice(lastIndex, match.index)));\n const codeList = match[1].split(';').map(Number);\n if (codeList.includes(0)) {\n parts.push('</span>');\n } else {\n for (const code of codeList) {\n if (ansiColorMap[code]) {\n parts.push(`<span style=\"color: ${ansiColorMap[code]}\">`);\n break;\n }\n }\n }\n lastIndex = match.index + match[0].length;\n }\n parts.push(escape(text.slice(lastIndex)));\n return parts.join('');\n }\n\n // Public API\n write(content: string, type: TerminalLineType = 'output') {\n if (!content) return;\n\n // Parse ANSI colors\n const parsedContent = this.parseAnsiColors(content);\n\n const lines = parsedContent.split('\\n');\n for (const line of lines) {\n this.lines.push({\n id: crypto.randomUUID(),\n type,\n content: line,\n timestamp: new Date(),\n });\n }\n this.updateLines();\n }\n\n writeln(content: string, type: TerminalLineType = 'output') {\n this.write(content, type);\n }\n\n writeError(content: string) {\n this.write(content, 'error');\n }\n\n clear() {\n this.lines.length = 0;\n this.liveLineBuffer = '';\n this.liveLine = null;\n this.updateLines();\n this.dispatchClearEvent();\n }\n\n focus() {\n this.inputElement?.focus();\n }\n\n writeLines(lines: Array<{ content: string; type?: TerminalLineType }>) {\n for (const line of lines) {\n this.lines.push({\n id: crypto.randomUUID(),\n type: line.type || 'output',\n // Route through parseAnsiColors so content is HTML-escaped first\n // (same safety path as write()); bypassing this was a stored XSS vector.\n content: this.parseAnsiColors(line.content),\n timestamp: new Date(),\n });\n }\n this.updateLines();\n }\n\n // ─── Streaming API ─────────────────────────────────────────────────────────\n // appendChunk + pipeFrom let callers feed raw chunks (e.g. from a child\n // process stdout, a WebSocket, or an LLM token stream) without splitting on\n // newlines themselves. A trailing partial line stays \"live\" — a single\n // TerminalLine whose content grows as more chunks arrive — until a newline\n // commits it.\n\n private liveLineBuffer = '';\n private liveLine: TerminalLine | null = null;\n private liveLineType: TerminalLineType = 'output';\n\n appendChunk(chunk: string, type: TerminalLineType = 'output') {\n if (!chunk) return;\n\n // If the type changed mid-stream, commit the existing live line first.\n if (this.liveLine && type !== this.liveLineType) {\n this.commitLiveLine();\n }\n this.liveLineType = type;\n\n // Combine pending tail with new chunk, then split on \\n.\n const combined = this.liveLineBuffer + chunk;\n const parts = combined.split('\\n');\n // Last element is whatever follows the final \\n (or all of it, if no \\n).\n const tail = parts.pop() ?? '';\n\n // Each complete part becomes its own committed line.\n for (const raw of parts) {\n const escaped = this.parseAnsiColors(raw);\n // Reuse the live line for the first complete part if present, otherwise push.\n if (this.liveLine) {\n this.liveLine.content = escaped;\n this.liveLine = null;\n } else {\n this.lines.push({\n id: crypto.randomUUID(),\n type,\n content: escaped,\n timestamp: new Date(),\n });\n }\n }\n\n // Tail (no trailing newline) keeps growing as a live line.\n this.liveLineBuffer = tail;\n if (tail) {\n const escaped = this.parseAnsiColors(tail);\n if (this.liveLine) {\n this.liveLine.content = escaped;\n } else {\n this.liveLine = {\n id: crypto.randomUUID(),\n type,\n content: escaped,\n timestamp: new Date(),\n };\n this.lines.push(this.liveLine);\n }\n }\n\n this.updateLines();\n }\n\n /** Force the current live (un-newlined) buffer to be treated as a finished line. */\n commitLiveLine() {\n this.liveLine = null;\n this.liveLineBuffer = '';\n }\n\n /**\n * Consume an AsyncIterable<string> or a ReadableStream<string|Uint8Array> until\n * exhaustion, calling appendChunk on each chunk. Cancellation: throw / return\n * from the source, or call `terminal.clear()` to stop displaying — the pipe\n * itself just runs to completion.\n */\n async pipeFrom(source: AsyncIterable<string> | ReadableStream<string | Uint8Array>, type: TerminalLineType = 'output'): Promise<void> {\n const iter = (source as ReadableStream).getReader\n ? readableStreamToAsyncIterable(source as ReadableStream<string | Uint8Array>)\n : (source as AsyncIterable<string>);\n\n const decoder = new TextDecoder();\n for await (const chunk of iter) {\n const text = typeof chunk === 'string' ? chunk : decoder.decode(chunk, { stream: true });\n if (text) this.appendChunk(text, type);\n }\n // Flush any pending decoder state (no-op for string sources).\n const flush = decoder.decode();\n if (flush) this.appendChunk(flush, type);\n }\n\n getHistory(): string[] {\n return [...this.commandHistory];\n }\n\n clearHistory() {\n this.commandHistory = [];\n this.historyIndex = -1;\n }\n}\n\n/** Adapt a ReadableStream to an async iterable (Safari < 14.1 lacks the\n * built-in `Symbol.asyncIterator` on streams). */\nasync function* readableStreamToAsyncIterable<T>(stream: ReadableStream<T>): AsyncIterable<T> {\n const reader = stream.getReader();\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) return;\n yield value as T;\n }\n } finally {\n reader.releaseLock();\n }\n}\n"],"names":[],"mappings":"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"}
@@ -632,6 +632,7 @@ let SniceVideoPlayer = (() => {
632
632
  <input
633
633
  class="video-volume-slider"
634
634
  type="range"
635
+ aria-label="Volume"
635
636
  min="0"
636
637
  max="1"
637
638
  step="0.01"
@@ -1 +1 @@
1
- {"version":3,"file":"snice-video-player.js","sources":["../../../components/video-player/snice-video-player.css?inline","../../../../components/video-player/snice-video-player.ts"],"sourcesContent":["export default \":host{display:block;font-family:var(--snice-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);contain:layout style paint;width:100%;--video-overlay-bg:var(--snice-video-overlay-bg, rgb(0 0 0));--video-overlay-alpha:var(--snice-video-overlay-alpha, rgb(0 0 0 / 0.5));--video-controls-color:var(--snice-video-controls-color, rgb(255 255 255));--video-controls-hover-bg:var(--snice-video-controls-hover-bg, rgb(255 255 255 / 0.15));--video-controls-active-bg:var(--snice-video-controls-active-bg, rgb(255 255 255 / 0.25));--video-progress-track:var(--snice-video-progress-track, rgb(255 255 255 / 0.3));--video-progress-buffered:var(--snice-video-progress-buffered, rgb(255 255 255 / 0.4))}.video-container{position:relative;background:var(--video-overlay-bg);border-radius:var(--snice-border-radius-lg,.5rem);overflow:hidden;width:100%}.video-container:-webkit-full-screen,.video-container:fullscreen{border-radius:0}video{display:block;width:100%;height:auto;cursor:pointer}.video-poster{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background-size:cover;background-position:center;background-color:var(--video-overlay-bg);cursor:pointer;z-index:1}.video-poster-play{width:4.5rem;height:4.5rem;background:var(--snice-video-poster-play-bg,rgb(0 0 0 / .6));border-radius:50%;display:flex;align-items:center;justify-content:center;transition:transform var(--snice-transition-fast, 150ms) ease,background var(--snice-transition-fast, 150ms) ease}.video-poster-play:hover{transform:scale(1.1);background:var(--snice-video-poster-play-hover-bg,rgb(0 0 0 / .8))}.video-poster-play svg{color:var(--video-controls-color);margin-left:.25rem}.video-controls{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,var(--snice-video-controls-gradient,rgb(0 0 0 / .7)));padding:var(--snice-spacing-lg,1.5rem) var(--snice-spacing-md,1rem) var(--snice-spacing-sm,.75rem);opacity:0;transition:opacity var(--snice-transition-medium, 250ms) ease;z-index:2;display:flex;flex-direction:column;gap:var(--snice-spacing-xs,.5rem)}.video-container.controls-visible .video-controls,.video-container.paused .video-controls,.video-container:hover .video-controls{opacity:1}.video-progress-container{width:100%;height:.25rem;cursor:pointer;position:relative;padding:.25rem 0}.video-progress-container:hover{height:.375rem}.video-progress-track{width:100%;height:100%;background:var(--video-progress-track);border-radius:9999px;position:relative;overflow:hidden}.video-progress-buffered{position:absolute;top:0;left:0;height:100%;background:var(--video-progress-buffered);border-radius:9999px}.video-progress-bar{position:absolute;top:0;left:0;height:100%;background:var(--snice-color-primary,rgb(37 99 235));border-radius:9999px;transition:width var(--snice-transition-fast, 150ms) linear}.video-progress-container:hover .video-progress-bar::after{content:'';position:absolute;right:-.375rem;top:50%;transform:translateY(-50%);width:.75rem;height:.75rem;background:var(--snice-color-primary,rgb(37 99 235));border-radius:50%}.video-controls-left,.video-controls-row{display:flex;align-items:center;gap:var(--snice-spacing-xs,.5rem)}.video-controls-right{display:flex;align-items:center;gap:var(--snice-spacing-xs,.5rem);margin-left:auto}.video-btn{background:0 0;border:none;cursor:pointer;padding:var(--snice-spacing-2xs,.25rem);border-radius:var(--snice-border-radius-md,.25rem);color:var(--video-controls-color);display:inline-flex;align-items:center;justify-content:center;transition:background-color var(--snice-transition-fast, 150ms) ease;line-height:0}.video-btn:hover{background:var(--video-controls-hover-bg)}.video-btn:active{background:var(--video-controls-active-bg)}.video-btn:focus-visible{outline:var(--snice-focus-ring-width,2px) solid var(--snice-focus-ring-color,rgb(59 130 246 / .5));outline-offset:var(--snice-focus-ring-offset,2px)}.video-btn svg{width:1.25rem;height:1.25rem}.video-btn-play svg{width:1.5rem;height:1.5rem}.video-time{font-size:var(--snice-font-size-xs, .75rem);color:var(--video-controls-color);font-variant-numeric:tabular-nums;user-select:none;white-space:nowrap}.video-volume{display:flex;align-items:center;gap:var(--snice-spacing-2xs,.25rem)}.video-volume-slider{-webkit-appearance:none;appearance:none;width:0;height:.25rem;background:var(--video-progress-track);border-radius:9999px;outline:0;cursor:pointer;transition:width var(--snice-transition-fast, 150ms) ease;overflow:hidden}.video-volume-slider:focus-visible,.video-volume:hover .video-volume-slider{width:4rem}.video-volume-slider::-webkit-slider-runnable-track{width:100%;height:.25rem;background:0 0;border-radius:9999px}.video-volume-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:.75rem;height:.75rem;background:var(--video-controls-color);border-radius:50%;cursor:pointer;margin-top:-.25rem}.video-volume-slider::-moz-range-track{width:100%;height:.25rem;background:var(--video-progress-track);border-radius:9999px}.video-volume-slider::-moz-range-progress{height:.25rem;background:var(--video-controls-color);border-radius:9999px}.video-volume-slider::-moz-range-thumb{width:.75rem;height:.75rem;background:var(--video-controls-color);border:none;border-radius:50%;cursor:pointer}.video-rate-btn{font-size:var(--snice-font-size-xs, .75rem);font-weight:var(--snice-font-weight-medium,500);min-width:2rem;text-align:center}.video-center-play{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:4rem;height:4rem;background:var(--video-overlay-alpha);border-radius:50%;display:flex;align-items:center;justify-content:center;pointer-events:none;opacity:0;transition:opacity var(--snice-transition-fast, 150ms) ease;z-index:1}.video-container.paused .video-center-play{opacity:1}.video-center-play svg{color:var(--video-controls-color);width:2rem;height:2rem;margin-left:.25rem}:host([variant=minimal]) .video-controls{background:var(--video-overlay-alpha);padding:var(--snice-spacing-xs,.5rem)}:host([variant=minimal]) .video-center-play{display:none}:host([variant=minimal]) .video-btn-pip,:host([variant=minimal]) .video-rate-btn{display:none}:host([variant=cinema]) .video-container{border-radius:0;box-shadow:var(--snice-shadow-lg,0 10px 15px -3px rgb(0 0 0 / .1),0 4px 6px -4px rgb(0 0 0 / .1))}:host([variant=cinema]) .video-controls{padding:var(--snice-spacing-xl,2rem) var(--snice-spacing-lg,1.5rem) var(--snice-spacing-md,1rem)}:host([variant=cinema]) .video-btn svg{width:1.5rem;height:1.5rem}:host([variant=cinema]) .video-btn-play svg{width:2rem;height:2rem}:host([variant=cinema]) .video-time{font-size:var(--snice-font-size-sm, .875rem)}.video-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:1}.video-loading-spinner{width:2.5rem;height:2.5rem;border:3px solid var(--snice-video-spinner-track,rgb(255 255 255 / .3));border-top-color:var(--video-controls-color);border-radius:50%;animation:.8s linear infinite video-spin}@keyframes video-spin{to{transform:rotate(360deg)}}@container (max-width:400px){.video-controls-row{gap:var(--snice-spacing-3xs,.125rem)}.video-btn{padding:var(--snice-spacing-3xs,.125rem)}.video-btn svg{width:1rem;height:1rem}.video-btn-play svg{width:1.25rem;height:1.25rem}.video-rate-btn{display:none}.video-time{font-size:.625rem}}@media (prefers-reduced-motion:reduce){*{transition-duration:0s!important;animation-duration:0s!important}}\";","import { element, property, render, styles, dispatch, ready, dispose, watch, query, on, html, css } from 'snice';\nimport type { VideoVariant, SniceVideoPlayerElement } from './snice-video-player.types';\nimport playerStyles from './snice-video-player.css?inline';\n\nconst PLAYBACK_RATES = [0.5, 0.75, 1, 1.25, 1.5, 2];\n\n// Encode user-supplied URLs for use inside a CSS `url('...')` context.\n// Escapes single quotes, backslashes, and newlines so the attacker cannot\n// break out of the url() literal and inject additional CSS declarations.\nfunction encodePosterUrl(src: string): string {\n return String(src ?? '')\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\n/g, ' ')\n .replace(/\\r/g, ' ');\n}\nconst SEEK_STEP = 5;\nconst VOLUME_STEP = 0.1;\nconst CONTROLS_HIDE_DELAY = 3000;\n\n@element('snice-video-player')\nexport class SniceVideoPlayer extends HTMLElement implements SniceVideoPlayerElement {\n @property() src: string = '';\n @property() poster: string = '';\n @property({ type: Boolean }) autoplay: boolean = false;\n @property({ type: Boolean }) muted: boolean = false;\n @property({ type: Boolean }) loop: boolean = false;\n @property({ type: Boolean }) controls: boolean = true;\n @property({ type: Number, attribute: 'playback-rate' }) playbackRate: number = 1;\n @property({ type: Number, attribute: 'current-time' }) currentTime: number = 0;\n @property({ type: Number }) volume: number = 1;\n @property() variant: VideoVariant = 'default';\n\n @property({ type: Number, attribute: false }) duration: number = 0;\n\n @property({ type: Boolean, attribute: false }) private playing: boolean = false;\n @property({ type: Boolean, attribute: false }) private loading: boolean = false;\n @property({ type: Boolean, attribute: false }) private showPoster: boolean = true;\n @property({ type: Boolean, attribute: false }) private controlsVisible: boolean = false;\n private controlsTimer: number | null = null;\n @property({ type: Number, attribute: false }) private bufferedPercent: number = 0;\n private previousVolume: number = 1;\n @property({ type: Boolean, attribute: false }) private isSeeking: boolean = false;\n\n @query('.video-container') private container?: HTMLElement;\n @query('video') private videoEl?: HTMLVideoElement;\n @query('.video-progress-container') private progressContainer?: HTMLElement;\n\n @styles()\n componentStyles() {\n return css/*css*/`${playerStyles}`;\n }\n\n @ready()\n init() {\n this.showPoster = !!this.poster && !this.autoplay;\n }\n\n @dispose()\n cleanup() {\n this.clearControlsTimer();\n if (this.videoEl) {\n this.videoEl.pause();\n }\n }\n\n @watch('src')\n handleSrcChange() {\n this.showPoster = !!this.poster;\n this.playing = false;\n this.currentTime = 0;\n this.duration = 0;\n this.loading = false;\n this.bufferedPercent = 0;\n }\n\n @watch('volume')\n handleVolumeChange(_oldVal: number, newVal: number) {\n if (this.videoEl && newVal >= 0 && newVal <= 1) {\n this.videoEl.volume = newVal;\n }\n }\n\n @watch('muted')\n handleMutedChange(_oldVal: boolean, newVal: boolean) {\n if (this.videoEl) {\n this.videoEl.muted = newVal;\n }\n }\n\n @watch('playbackRate')\n handlePlaybackRateChange(_oldVal: number, newVal: number) {\n if (this.videoEl) {\n this.videoEl.playbackRate = newVal;\n }\n }\n\n @watch('loop')\n handleLoopChange(_oldVal: boolean, newVal: boolean) {\n if (this.videoEl) {\n this.videoEl.loop = newVal;\n }\n }\n\n // --- Video event handlers via template bindings ---\n\n private handleVideoLoadedMetadata() {\n if (!this.videoEl) return;\n this.duration = this.videoEl.duration;\n this.loading = false;\n }\n\n private handleVideoPlay() {\n this.playing = true;\n this.loading = false;\n this.showPoster = false;\n this.emitPlay();\n this.startControlsTimer();\n }\n\n private handleVideoPause() {\n if (!this.videoEl?.ended) {\n this.playing = false;\n this.emitPause();\n }\n this.clearControlsTimer();\n this.controlsVisible = true;\n }\n\n private handleVideoEnded() {\n this.playing = false;\n this.controlsVisible = true;\n this.emitEnded();\n }\n\n private handleVideoTimeUpdate() {\n if (!this.videoEl || this.isSeeking) return;\n this.currentTime = this.videoEl.currentTime;\n this.emitTimeUpdate();\n }\n\n private handleVideoProgress() {\n if (!this.videoEl || this.videoEl.buffered.length === 0) return;\n const end = this.videoEl.buffered.end(this.videoEl.buffered.length - 1);\n this.bufferedPercent = this.duration > 0 ? (end / this.duration) * 100 : 0;\n }\n\n private handleVideoWaiting() {\n this.loading = true;\n }\n\n private handleVideoCanPlay() {\n this.loading = false;\n }\n\n private handleVideoVolumeChange() {\n if (!this.videoEl) return;\n this.volume = this.videoEl.volume;\n this.muted = this.videoEl.muted;\n this.emitVolumeChange();\n }\n\n // --- User interaction handlers ---\n\n private handleVideoClick() {\n this.toggle();\n }\n\n private handleVideoDblClick() {\n this.toggleFullscreen();\n }\n\n private handlePosterClick() {\n this.showPoster = false;\n this.play();\n }\n\n private handleProgressClick(e: MouseEvent) {\n if (!this.progressContainer || this.duration === 0) return;\n const rect = this.progressContainer.getBoundingClientRect();\n const percent = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width));\n this.seekTo(percent * this.duration);\n }\n\n private handleProgressMouseDown(e: MouseEvent) {\n this.isSeeking = true;\n this.handleProgressClick(e);\n\n const handleMove = (ev: MouseEvent) => {\n if (!this.progressContainer || this.duration === 0) return;\n const rect = this.progressContainer.getBoundingClientRect();\n const percent = Math.max(0, Math.min(1, (ev.clientX - rect.left) / rect.width));\n this.currentTime = percent * this.duration;\n };\n\n const handleUp = () => {\n this.isSeeking = false;\n if (this.videoEl) {\n this.videoEl.currentTime = this.currentTime;\n }\n document.removeEventListener('mousemove', handleMove);\n document.removeEventListener('mouseup', handleUp);\n };\n\n document.addEventListener('mousemove', handleMove);\n document.addEventListener('mouseup', handleUp);\n }\n\n private handleVolumeSlider(e: Event) {\n const input = e.target as HTMLInputElement;\n const vol = parseFloat(input.value);\n this.volume = vol;\n if (vol > 0 && this.muted) {\n this.muted = false;\n }\n this.emitVolumeChange();\n }\n\n private toggleMute() {\n if (this.muted) {\n this.muted = false;\n this.volume = this.previousVolume || 1;\n } else {\n this.previousVolume = this.volume;\n this.muted = true;\n }\n this.emitVolumeChange();\n }\n\n private cyclePlaybackRate() {\n const currentIdx = PLAYBACK_RATES.indexOf(this.playbackRate);\n const nextIdx = (currentIdx + 1) % PLAYBACK_RATES.length;\n this.setPlaybackRate(PLAYBACK_RATES[nextIdx]);\n }\n\n private handleContainerMouseMove() {\n this.controlsVisible = true;\n this.startControlsTimer();\n }\n\n private handleContainerMouseLeave() {\n if (this.playing) {\n this.controlsVisible = false;\n }\n }\n\n @on('keydown')\n handleKeydown(e: KeyboardEvent) {\n if (!this.controls) return;\n\n switch (e.key) {\n case ' ':\n case 'k':\n e.preventDefault();\n this.toggle();\n break;\n case 'f':\n e.preventDefault();\n this.toggleFullscreen();\n break;\n case 'm':\n e.preventDefault();\n this.toggleMute();\n break;\n case 'ArrowRight':\n e.preventDefault();\n this.seekTo(Math.min(this.duration, this.currentTime + SEEK_STEP));\n break;\n case 'ArrowLeft':\n e.preventDefault();\n this.seekTo(Math.max(0, this.currentTime - SEEK_STEP));\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.volume = Math.min(1, this.volume + VOLUME_STEP);\n break;\n case 'ArrowDown':\n e.preventDefault();\n this.volume = Math.max(0, this.volume - VOLUME_STEP);\n break;\n }\n }\n\n // --- Controls timer ---\n\n private startControlsTimer() {\n this.clearControlsTimer();\n if (this.playing) {\n this.controlsTimer = window.setTimeout(() => {\n this.controlsVisible = false;\n }, CONTROLS_HIDE_DELAY);\n }\n }\n\n private clearControlsTimer() {\n if (this.controlsTimer !== null) {\n clearTimeout(this.controlsTimer);\n this.controlsTimer = null;\n }\n }\n\n // --- Public methods ---\n\n async play(): Promise<void> {\n if (!this.videoEl) return;\n this.showPoster = false;\n try {\n await this.videoEl.play();\n } catch {\n // Autoplay may be blocked\n }\n }\n\n pause(): void {\n if (!this.videoEl) return;\n this.videoEl.pause();\n }\n\n toggle(): void {\n if (this.playing) {\n this.pause();\n } else {\n this.play();\n }\n }\n\n seekTo(time: number): void {\n if (!this.videoEl) return;\n const clamped = Math.max(0, Math.min(this.duration || 0, time));\n this.videoEl.currentTime = clamped;\n this.currentTime = clamped;\n }\n\n async requestFullscreen(): Promise<void> {\n if (!this.container) return;\n try {\n await this.container.requestFullscreen();\n } catch {\n // Fullscreen may not be available\n }\n }\n\n async exitFullscreen(): Promise<void> {\n if (!document.fullscreenElement) return;\n try {\n await document.exitFullscreen();\n } catch {\n // May not be in fullscreen\n }\n }\n\n async requestPictureInPicture(): Promise<void> {\n if (!this.videoEl) return;\n try {\n if (document.pictureInPictureElement) {\n await document.exitPictureInPicture();\n } else {\n await this.videoEl.requestPictureInPicture();\n }\n } catch {\n // PiP may not be available\n }\n }\n\n setPlaybackRate(rate: number): void {\n this.playbackRate = rate;\n }\n\n private async toggleFullscreen(): Promise<void> {\n if (document.fullscreenElement) {\n await this.exitFullscreen();\n } else {\n await this.requestFullscreen();\n }\n }\n\n private handleFullscreenChange() {\n this.emitFullscreenChange();\n }\n\n // --- Helpers ---\n\n private formatTime(seconds: number): string {\n if (isNaN(seconds) || !isFinite(seconds)) return '0:00';\n const h = Math.floor(seconds / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n const s = Math.floor(seconds % 60);\n if (h > 0) {\n return `${h}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\n }\n return `${m}:${s.toString().padStart(2, '0')}`;\n }\n\n // --- Dispatch events ---\n\n @dispatch('video-play', { bubbles: true, composed: true })\n private emitPlay() {\n return { player: this };\n }\n\n @dispatch('video-pause', { bubbles: true, composed: true })\n private emitPause() {\n return { player: this };\n }\n\n @dispatch('video-ended', { bubbles: true, composed: true })\n private emitEnded() {\n return { player: this };\n }\n\n @dispatch('video-time-update', { bubbles: true, composed: true })\n private emitTimeUpdate() {\n return { player: this, currentTime: this.currentTime, duration: this.duration };\n }\n\n @dispatch('video-fullscreen-change', { bubbles: true, composed: true })\n private emitFullscreenChange() {\n return { player: this, fullscreen: !!document.fullscreenElement };\n }\n\n @dispatch('video-volume-change', { bubbles: true, composed: true })\n private emitVolumeChange() {\n return { player: this, volume: this.volume, muted: this.muted };\n }\n\n // --- Render ---\n\n @render()\n renderPlayer() {\n const progress = this.duration > 0 ? (this.currentTime / this.duration) * 100 : 0;\n const isPlaying = this.playing;\n const containerClass = [\n 'video-container',\n !isPlaying ? 'paused' : '',\n this.controlsVisible ? 'controls-visible' : '',\n ].filter(Boolean).join(' ');\n\n const isMutedOrZero = this.muted || this.volume === 0;\n\n return html`\n <div\n part=\"base\"\n class=\"${containerClass}\"\n tabindex=\"0\"\n @mousemove=${() => this.handleContainerMouseMove()}\n @mouseleave=${() => this.handleContainerMouseLeave()}\n @fullscreenchange=${() => this.handleFullscreenChange()}\n >\n <video\n part=\"video\"\n .src=${this.src}\n ?autoplay=${this.autoplay}\n ?muted=${this.muted}\n ?loop=${this.loop}\n playsinline\n preload=\"metadata\"\n @loadedmetadata=${() => this.handleVideoLoadedMetadata()}\n @play=${() => this.handleVideoPlay()}\n @pause=${() => this.handleVideoPause()}\n @ended=${() => this.handleVideoEnded()}\n @timeupdate=${() => this.handleVideoTimeUpdate()}\n @progress=${() => this.handleVideoProgress()}\n @waiting=${() => this.handleVideoWaiting()}\n @canplay=${() => this.handleVideoCanPlay()}\n @volumechange=${() => this.handleVideoVolumeChange()}\n @click=${() => this.handleVideoClick()}\n @dblclick=${() => this.handleVideoDblClick()}\n >\n <slot></slot>\n </video>\n\n <if ${this.showPoster && this.poster}>\n <div\n class=\"video-poster\"\n style=\"background-image: url('${encodePosterUrl(this.poster)}')\"\n @click=${() => this.handlePosterClick()}\n >\n <div class=\"video-poster-play\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M8 5v14l11-7z\"/>\n </svg>\n </div>\n </div>\n </if>\n\n <if ${this.loading}>\n <div class=\"video-loading\">\n <div class=\"video-loading-spinner\"></div>\n </div>\n </if>\n\n <if ${!isPlaying && !this.showPoster && this.src}>\n <div class=\"video-center-play\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M8 5v14l11-7z\"/>\n </svg>\n </div>\n </if>\n\n <if ${this.controls && this.src}>\n <div part=\"controls\" class=\"video-controls\">\n <div\n class=\"video-progress-container\"\n @click=${(e: MouseEvent) => this.handleProgressClick(e)}\n @mousedown=${(e: MouseEvent) => this.handleProgressMouseDown(e)}\n >\n <div part=\"progress\" class=\"video-progress-track\">\n <div class=\"video-progress-buffered\" style=\"width: ${this.bufferedPercent}%\"></div>\n <div class=\"video-progress-bar\" style=\"width: ${progress}%\"></div>\n </div>\n </div>\n\n <div class=\"video-controls-row\">\n <div class=\"video-controls-left\">\n <button class=\"video-btn video-btn-play\" @click=${() => this.toggle()} aria-label=\"${isPlaying ? \"Pause\" : \"Play\"}\" title=\"${isPlaying ? \"Pause\" : \"Play\"}\">\n <if ${isPlaying}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"></rect>\n <rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"></rect>\n </svg>\n </if>\n <if ${!isPlaying}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M8 5v14l11-7z\"/>\n </svg>\n </if>\n </button>\n\n <div class=\"video-volume\">\n <button class=\"video-btn video-btn-volume\" @click=${() => this.toggleMute()} aria-label=\"${isMutedOrZero ? 'Unmute' : 'Mute'}\" title=\"${isMutedOrZero ? 'Unmute' : 'Mute'}\">\n <if ${isMutedOrZero}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M11 5L6 9H2v6h4l5 4V5z\"/>\n <line x1=\"23\" y1=\"9\" x2=\"17\" y2=\"15\"/>\n <line x1=\"17\" y1=\"9\" x2=\"23\" y2=\"15\"/>\n </svg>\n </if>\n <if ${!isMutedOrZero && this.volume > 0.5}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M11 5L6 9H2v6h4l5 4V5z\"/>\n <path d=\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\"/>\n </svg>\n </if>\n <if ${!isMutedOrZero && this.volume > 0 && this.volume <= 0.5}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M11 5L6 9H2v6h4l5 4V5z\"/>\n <path d=\"M15.54 8.46a5 5 0 0 1 0 7.07\"/>\n </svg>\n </if>\n </button>\n <input\n class=\"video-volume-slider\"\n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.01\"\n .value=${this.muted ? '0' : this.volume.toString()}\n @input=${(e: Event) => this.handleVolumeSlider(e)}\n />\n </div>\n\n <span class=\"video-time\">${this.formatTime(this.currentTime)} / ${this.formatTime(this.duration)}</span>\n </div>\n\n <div class=\"video-controls-right\">\n <button class=\"video-btn video-rate-btn\" @click=${() => this.cyclePlaybackRate()} aria-label=\"Playback speed\" title=\"Playback speed\">\n ${this.playbackRate}x\n </button>\n\n <button class=\"video-btn video-btn-pip\" @click=${() => this.requestPictureInPicture()} aria-label=\"Picture-in-Picture\" title=\"Picture-in-Picture\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"/>\n <rect x=\"11\" y=\"9\" width=\"9\" height=\"7\" rx=\"1\" fill=\"currentColor\" opacity=\"0.5\"/>\n </svg>\n </button>\n\n <button class=\"video-btn video-btn-fullscreen\" @click=${() => this.toggleFullscreen()} aria-label=\"Fullscreen\" title=\"Fullscreen\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"/>\n </svg>\n </button>\n </div>\n </div>\n </div>\n </if>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'snice-video-player': SniceVideoPlayer;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snice-video-player.js","sources":["../../../components/video-player/snice-video-player.css?inline","../../../../components/video-player/snice-video-player.ts"],"sourcesContent":["export default \":host{display:block;font-family:var(--snice-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);contain:layout style paint;width:100%;--video-overlay-bg:var(--snice-video-overlay-bg, rgb(0 0 0));--video-overlay-alpha:var(--snice-video-overlay-alpha, rgb(0 0 0 / 0.5));--video-controls-color:var(--snice-video-controls-color, rgb(255 255 255));--video-controls-hover-bg:var(--snice-video-controls-hover-bg, rgb(255 255 255 / 0.15));--video-controls-active-bg:var(--snice-video-controls-active-bg, rgb(255 255 255 / 0.25));--video-progress-track:var(--snice-video-progress-track, rgb(255 255 255 / 0.3));--video-progress-buffered:var(--snice-video-progress-buffered, rgb(255 255 255 / 0.4))}.video-container{position:relative;background:var(--video-overlay-bg);border-radius:var(--snice-border-radius-lg,.5rem);overflow:hidden;width:100%}.video-container:-webkit-full-screen,.video-container:fullscreen{border-radius:0}video{display:block;width:100%;height:auto;cursor:pointer}.video-poster{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background-size:cover;background-position:center;background-color:var(--video-overlay-bg);cursor:pointer;z-index:1}.video-poster-play{width:4.5rem;height:4.5rem;background:var(--snice-video-poster-play-bg,rgb(0 0 0 / .6));border-radius:50%;display:flex;align-items:center;justify-content:center;transition:transform var(--snice-transition-fast, 150ms) ease,background var(--snice-transition-fast, 150ms) ease}.video-poster-play:hover{transform:scale(1.1);background:var(--snice-video-poster-play-hover-bg,rgb(0 0 0 / .8))}.video-poster-play svg{color:var(--video-controls-color);margin-left:.25rem}.video-controls{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,var(--snice-video-controls-gradient,rgb(0 0 0 / .7)));padding:var(--snice-spacing-lg,1.5rem) var(--snice-spacing-md,1rem) var(--snice-spacing-sm,.75rem);opacity:0;transition:opacity var(--snice-transition-medium, 250ms) ease;z-index:2;display:flex;flex-direction:column;gap:var(--snice-spacing-xs,.5rem)}.video-container.controls-visible .video-controls,.video-container.paused .video-controls,.video-container:hover .video-controls{opacity:1}.video-progress-container{width:100%;height:.25rem;cursor:pointer;position:relative;padding:.25rem 0}.video-progress-container:hover{height:.375rem}.video-progress-track{width:100%;height:100%;background:var(--video-progress-track);border-radius:9999px;position:relative;overflow:hidden}.video-progress-buffered{position:absolute;top:0;left:0;height:100%;background:var(--video-progress-buffered);border-radius:9999px}.video-progress-bar{position:absolute;top:0;left:0;height:100%;background:var(--snice-color-primary,rgb(37 99 235));border-radius:9999px;transition:width var(--snice-transition-fast, 150ms) linear}.video-progress-container:hover .video-progress-bar::after{content:'';position:absolute;right:-.375rem;top:50%;transform:translateY(-50%);width:.75rem;height:.75rem;background:var(--snice-color-primary,rgb(37 99 235));border-radius:50%}.video-controls-left,.video-controls-row{display:flex;align-items:center;gap:var(--snice-spacing-xs,.5rem)}.video-controls-right{display:flex;align-items:center;gap:var(--snice-spacing-xs,.5rem);margin-left:auto}.video-btn{background:0 0;border:none;cursor:pointer;padding:var(--snice-spacing-2xs,.25rem);border-radius:var(--snice-border-radius-md,.25rem);color:var(--video-controls-color);display:inline-flex;align-items:center;justify-content:center;transition:background-color var(--snice-transition-fast, 150ms) ease;line-height:0}.video-btn:hover{background:var(--video-controls-hover-bg)}.video-btn:active{background:var(--video-controls-active-bg)}.video-btn:focus-visible{outline:var(--snice-focus-ring-width,2px) solid var(--snice-focus-ring-color,rgb(59 130 246 / .5));outline-offset:var(--snice-focus-ring-offset,2px)}.video-btn svg{width:1.25rem;height:1.25rem}.video-btn-play svg{width:1.5rem;height:1.5rem}.video-time{font-size:var(--snice-font-size-xs, .75rem);color:var(--video-controls-color);font-variant-numeric:tabular-nums;user-select:none;white-space:nowrap}.video-volume{display:flex;align-items:center;gap:var(--snice-spacing-2xs,.25rem)}.video-volume-slider{-webkit-appearance:none;appearance:none;width:0;height:.25rem;background:var(--video-progress-track);border-radius:9999px;outline:0;cursor:pointer;transition:width var(--snice-transition-fast, 150ms) ease;overflow:hidden}.video-volume-slider:focus-visible,.video-volume:hover .video-volume-slider{width:4rem}.video-volume-slider::-webkit-slider-runnable-track{width:100%;height:.25rem;background:0 0;border-radius:9999px}.video-volume-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:.75rem;height:.75rem;background:var(--video-controls-color);border-radius:50%;cursor:pointer;margin-top:-.25rem}.video-volume-slider::-moz-range-track{width:100%;height:.25rem;background:var(--video-progress-track);border-radius:9999px}.video-volume-slider::-moz-range-progress{height:.25rem;background:var(--video-controls-color);border-radius:9999px}.video-volume-slider::-moz-range-thumb{width:.75rem;height:.75rem;background:var(--video-controls-color);border:none;border-radius:50%;cursor:pointer}.video-rate-btn{font-size:var(--snice-font-size-xs, .75rem);font-weight:var(--snice-font-weight-medium,500);min-width:2rem;text-align:center}.video-center-play{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:4rem;height:4rem;background:var(--video-overlay-alpha);border-radius:50%;display:flex;align-items:center;justify-content:center;pointer-events:none;opacity:0;transition:opacity var(--snice-transition-fast, 150ms) ease;z-index:1}.video-container.paused .video-center-play{opacity:1}.video-center-play svg{color:var(--video-controls-color);width:2rem;height:2rem;margin-left:.25rem}:host([variant=minimal]) .video-controls{background:var(--video-overlay-alpha);padding:var(--snice-spacing-xs,.5rem)}:host([variant=minimal]) .video-center-play{display:none}:host([variant=minimal]) .video-btn-pip,:host([variant=minimal]) .video-rate-btn{display:none}:host([variant=cinema]) .video-container{border-radius:0;box-shadow:var(--snice-shadow-lg,0 10px 15px -3px rgb(0 0 0 / .1),0 4px 6px -4px rgb(0 0 0 / .1))}:host([variant=cinema]) .video-controls{padding:var(--snice-spacing-xl,2rem) var(--snice-spacing-lg,1.5rem) var(--snice-spacing-md,1rem)}:host([variant=cinema]) .video-btn svg{width:1.5rem;height:1.5rem}:host([variant=cinema]) .video-btn-play svg{width:2rem;height:2rem}:host([variant=cinema]) .video-time{font-size:var(--snice-font-size-sm, .875rem)}.video-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:1}.video-loading-spinner{width:2.5rem;height:2.5rem;border:3px solid var(--snice-video-spinner-track,rgb(255 255 255 / .3));border-top-color:var(--video-controls-color);border-radius:50%;animation:.8s linear infinite video-spin}@keyframes video-spin{to{transform:rotate(360deg)}}@container (max-width:400px){.video-controls-row{gap:var(--snice-spacing-3xs,.125rem)}.video-btn{padding:var(--snice-spacing-3xs,.125rem)}.video-btn svg{width:1rem;height:1rem}.video-btn-play svg{width:1.25rem;height:1.25rem}.video-rate-btn{display:none}.video-time{font-size:.625rem}}@media (prefers-reduced-motion:reduce){*{transition-duration:0s!important;animation-duration:0s!important}}\";","import { element, property, render, styles, dispatch, ready, dispose, watch, query, on, html, css } from 'snice';\nimport type { VideoVariant, SniceVideoPlayerElement } from './snice-video-player.types';\nimport playerStyles from './snice-video-player.css?inline';\n\nconst PLAYBACK_RATES = [0.5, 0.75, 1, 1.25, 1.5, 2];\n\n// Encode user-supplied URLs for use inside a CSS `url('...')` context.\n// Escapes single quotes, backslashes, and newlines so the attacker cannot\n// break out of the url() literal and inject additional CSS declarations.\nfunction encodePosterUrl(src: string): string {\n return String(src ?? '')\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\n/g, ' ')\n .replace(/\\r/g, ' ');\n}\nconst SEEK_STEP = 5;\nconst VOLUME_STEP = 0.1;\nconst CONTROLS_HIDE_DELAY = 3000;\n\n@element('snice-video-player')\nexport class SniceVideoPlayer extends HTMLElement implements SniceVideoPlayerElement {\n @property() src: string = '';\n @property() poster: string = '';\n @property({ type: Boolean }) autoplay: boolean = false;\n @property({ type: Boolean }) muted: boolean = false;\n @property({ type: Boolean }) loop: boolean = false;\n @property({ type: Boolean }) controls: boolean = true;\n @property({ type: Number, attribute: 'playback-rate' }) playbackRate: number = 1;\n @property({ type: Number, attribute: 'current-time' }) currentTime: number = 0;\n @property({ type: Number }) volume: number = 1;\n @property() variant: VideoVariant = 'default';\n\n @property({ type: Number, attribute: false }) duration: number = 0;\n\n @property({ type: Boolean, attribute: false }) private playing: boolean = false;\n @property({ type: Boolean, attribute: false }) private loading: boolean = false;\n @property({ type: Boolean, attribute: false }) private showPoster: boolean = true;\n @property({ type: Boolean, attribute: false }) private controlsVisible: boolean = false;\n private controlsTimer: number | null = null;\n @property({ type: Number, attribute: false }) private bufferedPercent: number = 0;\n private previousVolume: number = 1;\n @property({ type: Boolean, attribute: false }) private isSeeking: boolean = false;\n\n @query('.video-container') private container?: HTMLElement;\n @query('video') private videoEl?: HTMLVideoElement;\n @query('.video-progress-container') private progressContainer?: HTMLElement;\n\n @styles()\n componentStyles() {\n return css/*css*/`${playerStyles}`;\n }\n\n @ready()\n init() {\n this.showPoster = !!this.poster && !this.autoplay;\n }\n\n @dispose()\n cleanup() {\n this.clearControlsTimer();\n if (this.videoEl) {\n this.videoEl.pause();\n }\n }\n\n @watch('src')\n handleSrcChange() {\n this.showPoster = !!this.poster;\n this.playing = false;\n this.currentTime = 0;\n this.duration = 0;\n this.loading = false;\n this.bufferedPercent = 0;\n }\n\n @watch('volume')\n handleVolumeChange(_oldVal: number, newVal: number) {\n if (this.videoEl && newVal >= 0 && newVal <= 1) {\n this.videoEl.volume = newVal;\n }\n }\n\n @watch('muted')\n handleMutedChange(_oldVal: boolean, newVal: boolean) {\n if (this.videoEl) {\n this.videoEl.muted = newVal;\n }\n }\n\n @watch('playbackRate')\n handlePlaybackRateChange(_oldVal: number, newVal: number) {\n if (this.videoEl) {\n this.videoEl.playbackRate = newVal;\n }\n }\n\n @watch('loop')\n handleLoopChange(_oldVal: boolean, newVal: boolean) {\n if (this.videoEl) {\n this.videoEl.loop = newVal;\n }\n }\n\n // --- Video event handlers via template bindings ---\n\n private handleVideoLoadedMetadata() {\n if (!this.videoEl) return;\n this.duration = this.videoEl.duration;\n this.loading = false;\n }\n\n private handleVideoPlay() {\n this.playing = true;\n this.loading = false;\n this.showPoster = false;\n this.emitPlay();\n this.startControlsTimer();\n }\n\n private handleVideoPause() {\n if (!this.videoEl?.ended) {\n this.playing = false;\n this.emitPause();\n }\n this.clearControlsTimer();\n this.controlsVisible = true;\n }\n\n private handleVideoEnded() {\n this.playing = false;\n this.controlsVisible = true;\n this.emitEnded();\n }\n\n private handleVideoTimeUpdate() {\n if (!this.videoEl || this.isSeeking) return;\n this.currentTime = this.videoEl.currentTime;\n this.emitTimeUpdate();\n }\n\n private handleVideoProgress() {\n if (!this.videoEl || this.videoEl.buffered.length === 0) return;\n const end = this.videoEl.buffered.end(this.videoEl.buffered.length - 1);\n this.bufferedPercent = this.duration > 0 ? (end / this.duration) * 100 : 0;\n }\n\n private handleVideoWaiting() {\n this.loading = true;\n }\n\n private handleVideoCanPlay() {\n this.loading = false;\n }\n\n private handleVideoVolumeChange() {\n if (!this.videoEl) return;\n this.volume = this.videoEl.volume;\n this.muted = this.videoEl.muted;\n this.emitVolumeChange();\n }\n\n // --- User interaction handlers ---\n\n private handleVideoClick() {\n this.toggle();\n }\n\n private handleVideoDblClick() {\n this.toggleFullscreen();\n }\n\n private handlePosterClick() {\n this.showPoster = false;\n this.play();\n }\n\n private handleProgressClick(e: MouseEvent) {\n if (!this.progressContainer || this.duration === 0) return;\n const rect = this.progressContainer.getBoundingClientRect();\n const percent = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width));\n this.seekTo(percent * this.duration);\n }\n\n private handleProgressMouseDown(e: MouseEvent) {\n this.isSeeking = true;\n this.handleProgressClick(e);\n\n const handleMove = (ev: MouseEvent) => {\n if (!this.progressContainer || this.duration === 0) return;\n const rect = this.progressContainer.getBoundingClientRect();\n const percent = Math.max(0, Math.min(1, (ev.clientX - rect.left) / rect.width));\n this.currentTime = percent * this.duration;\n };\n\n const handleUp = () => {\n this.isSeeking = false;\n if (this.videoEl) {\n this.videoEl.currentTime = this.currentTime;\n }\n document.removeEventListener('mousemove', handleMove);\n document.removeEventListener('mouseup', handleUp);\n };\n\n document.addEventListener('mousemove', handleMove);\n document.addEventListener('mouseup', handleUp);\n }\n\n private handleVolumeSlider(e: Event) {\n const input = e.target as HTMLInputElement;\n const vol = parseFloat(input.value);\n this.volume = vol;\n if (vol > 0 && this.muted) {\n this.muted = false;\n }\n this.emitVolumeChange();\n }\n\n private toggleMute() {\n if (this.muted) {\n this.muted = false;\n this.volume = this.previousVolume || 1;\n } else {\n this.previousVolume = this.volume;\n this.muted = true;\n }\n this.emitVolumeChange();\n }\n\n private cyclePlaybackRate() {\n const currentIdx = PLAYBACK_RATES.indexOf(this.playbackRate);\n const nextIdx = (currentIdx + 1) % PLAYBACK_RATES.length;\n this.setPlaybackRate(PLAYBACK_RATES[nextIdx]);\n }\n\n private handleContainerMouseMove() {\n this.controlsVisible = true;\n this.startControlsTimer();\n }\n\n private handleContainerMouseLeave() {\n if (this.playing) {\n this.controlsVisible = false;\n }\n }\n\n @on('keydown')\n handleKeydown(e: KeyboardEvent) {\n if (!this.controls) return;\n\n switch (e.key) {\n case ' ':\n case 'k':\n e.preventDefault();\n this.toggle();\n break;\n case 'f':\n e.preventDefault();\n this.toggleFullscreen();\n break;\n case 'm':\n e.preventDefault();\n this.toggleMute();\n break;\n case 'ArrowRight':\n e.preventDefault();\n this.seekTo(Math.min(this.duration, this.currentTime + SEEK_STEP));\n break;\n case 'ArrowLeft':\n e.preventDefault();\n this.seekTo(Math.max(0, this.currentTime - SEEK_STEP));\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.volume = Math.min(1, this.volume + VOLUME_STEP);\n break;\n case 'ArrowDown':\n e.preventDefault();\n this.volume = Math.max(0, this.volume - VOLUME_STEP);\n break;\n }\n }\n\n // --- Controls timer ---\n\n private startControlsTimer() {\n this.clearControlsTimer();\n if (this.playing) {\n this.controlsTimer = window.setTimeout(() => {\n this.controlsVisible = false;\n }, CONTROLS_HIDE_DELAY);\n }\n }\n\n private clearControlsTimer() {\n if (this.controlsTimer !== null) {\n clearTimeout(this.controlsTimer);\n this.controlsTimer = null;\n }\n }\n\n // --- Public methods ---\n\n async play(): Promise<void> {\n if (!this.videoEl) return;\n this.showPoster = false;\n try {\n await this.videoEl.play();\n } catch {\n // Autoplay may be blocked\n }\n }\n\n pause(): void {\n if (!this.videoEl) return;\n this.videoEl.pause();\n }\n\n toggle(): void {\n if (this.playing) {\n this.pause();\n } else {\n this.play();\n }\n }\n\n seekTo(time: number): void {\n if (!this.videoEl) return;\n const clamped = Math.max(0, Math.min(this.duration || 0, time));\n this.videoEl.currentTime = clamped;\n this.currentTime = clamped;\n }\n\n async requestFullscreen(): Promise<void> {\n if (!this.container) return;\n try {\n await this.container.requestFullscreen();\n } catch {\n // Fullscreen may not be available\n }\n }\n\n async exitFullscreen(): Promise<void> {\n if (!document.fullscreenElement) return;\n try {\n await document.exitFullscreen();\n } catch {\n // May not be in fullscreen\n }\n }\n\n async requestPictureInPicture(): Promise<void> {\n if (!this.videoEl) return;\n try {\n if (document.pictureInPictureElement) {\n await document.exitPictureInPicture();\n } else {\n await this.videoEl.requestPictureInPicture();\n }\n } catch {\n // PiP may not be available\n }\n }\n\n setPlaybackRate(rate: number): void {\n this.playbackRate = rate;\n }\n\n private async toggleFullscreen(): Promise<void> {\n if (document.fullscreenElement) {\n await this.exitFullscreen();\n } else {\n await this.requestFullscreen();\n }\n }\n\n private handleFullscreenChange() {\n this.emitFullscreenChange();\n }\n\n // --- Helpers ---\n\n private formatTime(seconds: number): string {\n if (isNaN(seconds) || !isFinite(seconds)) return '0:00';\n const h = Math.floor(seconds / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n const s = Math.floor(seconds % 60);\n if (h > 0) {\n return `${h}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\n }\n return `${m}:${s.toString().padStart(2, '0')}`;\n }\n\n // --- Dispatch events ---\n\n @dispatch('video-play', { bubbles: true, composed: true })\n private emitPlay() {\n return { player: this };\n }\n\n @dispatch('video-pause', { bubbles: true, composed: true })\n private emitPause() {\n return { player: this };\n }\n\n @dispatch('video-ended', { bubbles: true, composed: true })\n private emitEnded() {\n return { player: this };\n }\n\n @dispatch('video-time-update', { bubbles: true, composed: true })\n private emitTimeUpdate() {\n return { player: this, currentTime: this.currentTime, duration: this.duration };\n }\n\n @dispatch('video-fullscreen-change', { bubbles: true, composed: true })\n private emitFullscreenChange() {\n return { player: this, fullscreen: !!document.fullscreenElement };\n }\n\n @dispatch('video-volume-change', { bubbles: true, composed: true })\n private emitVolumeChange() {\n return { player: this, volume: this.volume, muted: this.muted };\n }\n\n // --- Render ---\n\n @render()\n renderPlayer() {\n const progress = this.duration > 0 ? (this.currentTime / this.duration) * 100 : 0;\n const isPlaying = this.playing;\n const containerClass = [\n 'video-container',\n !isPlaying ? 'paused' : '',\n this.controlsVisible ? 'controls-visible' : '',\n ].filter(Boolean).join(' ');\n\n const isMutedOrZero = this.muted || this.volume === 0;\n\n return html`\n <div\n part=\"base\"\n class=\"${containerClass}\"\n tabindex=\"0\"\n @mousemove=${() => this.handleContainerMouseMove()}\n @mouseleave=${() => this.handleContainerMouseLeave()}\n @fullscreenchange=${() => this.handleFullscreenChange()}\n >\n <video\n part=\"video\"\n .src=${this.src}\n ?autoplay=${this.autoplay}\n ?muted=${this.muted}\n ?loop=${this.loop}\n playsinline\n preload=\"metadata\"\n @loadedmetadata=${() => this.handleVideoLoadedMetadata()}\n @play=${() => this.handleVideoPlay()}\n @pause=${() => this.handleVideoPause()}\n @ended=${() => this.handleVideoEnded()}\n @timeupdate=${() => this.handleVideoTimeUpdate()}\n @progress=${() => this.handleVideoProgress()}\n @waiting=${() => this.handleVideoWaiting()}\n @canplay=${() => this.handleVideoCanPlay()}\n @volumechange=${() => this.handleVideoVolumeChange()}\n @click=${() => this.handleVideoClick()}\n @dblclick=${() => this.handleVideoDblClick()}\n >\n <slot></slot>\n </video>\n\n <if ${this.showPoster && this.poster}>\n <div\n class=\"video-poster\"\n style=\"background-image: url('${encodePosterUrl(this.poster)}')\"\n @click=${() => this.handlePosterClick()}\n >\n <div class=\"video-poster-play\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M8 5v14l11-7z\"/>\n </svg>\n </div>\n </div>\n </if>\n\n <if ${this.loading}>\n <div class=\"video-loading\">\n <div class=\"video-loading-spinner\"></div>\n </div>\n </if>\n\n <if ${!isPlaying && !this.showPoster && this.src}>\n <div class=\"video-center-play\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M8 5v14l11-7z\"/>\n </svg>\n </div>\n </if>\n\n <if ${this.controls && this.src}>\n <div part=\"controls\" class=\"video-controls\">\n <div\n class=\"video-progress-container\"\n @click=${(e: MouseEvent) => this.handleProgressClick(e)}\n @mousedown=${(e: MouseEvent) => this.handleProgressMouseDown(e)}\n >\n <div part=\"progress\" class=\"video-progress-track\">\n <div class=\"video-progress-buffered\" style=\"width: ${this.bufferedPercent}%\"></div>\n <div class=\"video-progress-bar\" style=\"width: ${progress}%\"></div>\n </div>\n </div>\n\n <div class=\"video-controls-row\">\n <div class=\"video-controls-left\">\n <button class=\"video-btn video-btn-play\" @click=${() => this.toggle()} aria-label=\"${isPlaying ? \"Pause\" : \"Play\"}\" title=\"${isPlaying ? \"Pause\" : \"Play\"}\">\n <if ${isPlaying}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"></rect>\n <rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"></rect>\n </svg>\n </if>\n <if ${!isPlaying}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M8 5v14l11-7z\"/>\n </svg>\n </if>\n </button>\n\n <div class=\"video-volume\">\n <button class=\"video-btn video-btn-volume\" @click=${() => this.toggleMute()} aria-label=\"${isMutedOrZero ? 'Unmute' : 'Mute'}\" title=\"${isMutedOrZero ? 'Unmute' : 'Mute'}\">\n <if ${isMutedOrZero}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M11 5L6 9H2v6h4l5 4V5z\"/>\n <line x1=\"23\" y1=\"9\" x2=\"17\" y2=\"15\"/>\n <line x1=\"17\" y1=\"9\" x2=\"23\" y2=\"15\"/>\n </svg>\n </if>\n <if ${!isMutedOrZero && this.volume > 0.5}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M11 5L6 9H2v6h4l5 4V5z\"/>\n <path d=\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\"/>\n </svg>\n </if>\n <if ${!isMutedOrZero && this.volume > 0 && this.volume <= 0.5}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M11 5L6 9H2v6h4l5 4V5z\"/>\n <path d=\"M15.54 8.46a5 5 0 0 1 0 7.07\"/>\n </svg>\n </if>\n </button>\n <input\n class=\"video-volume-slider\"\n type=\"range\"\n aria-label=\"Volume\"\n min=\"0\"\n max=\"1\"\n step=\"0.01\"\n .value=${this.muted ? '0' : this.volume.toString()}\n @input=${(e: Event) => this.handleVolumeSlider(e)}\n />\n </div>\n\n <span class=\"video-time\">${this.formatTime(this.currentTime)} / ${this.formatTime(this.duration)}</span>\n </div>\n\n <div class=\"video-controls-right\">\n <button class=\"video-btn video-rate-btn\" @click=${() => this.cyclePlaybackRate()} aria-label=\"Playback speed\" title=\"Playback speed\">\n ${this.playbackRate}x\n </button>\n\n <button class=\"video-btn video-btn-pip\" @click=${() => this.requestPictureInPicture()} aria-label=\"Picture-in-Picture\" title=\"Picture-in-Picture\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"/>\n <rect x=\"11\" y=\"9\" width=\"9\" height=\"7\" rx=\"1\" fill=\"currentColor\" opacity=\"0.5\"/>\n </svg>\n </button>\n\n <button class=\"video-btn video-btn-fullscreen\" @click=${() => this.toggleFullscreen()} aria-label=\"Fullscreen\" title=\"Fullscreen\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"/>\n </svg>\n </button>\n </div>\n </div>\n </div>\n </if>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'snice-video-player': SniceVideoPlayer;\n }\n}\n"],"names":[],"mappings":";;;AAAA,mBAAe,wxOAAwxO;;ACIvyO,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;AAEnD;AACA;AACA;AACA,SAAS,eAAe,CAAC,GAAW,EAAA;AAClC,IAAA,OAAO,MAAM,CAAC,GAAG,IAAI,EAAE;AACpB,SAAA,OAAO,CAAC,KAAK,EAAE,MAAM;AACrB,SAAA,OAAO,CAAC,IAAI,EAAE,KAAK;AACnB,SAAA,OAAO,CAAC,KAAK,EAAE,GAAG;AAClB,SAAA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AACxB;AACA,MAAM,SAAS,GAAG,CAAC;AACnB,MAAM,WAAW,GAAG,GAAG;AACvB,MAAM,mBAAmB,GAAG,IAAI;IAGnB,gBAAgB,GAAA,CAAA,MAAA;4BAD5B,OAAO,CAAC,oBAAoB,CAAC,CAAA;;;;sBACQ,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAnB,KAAA,cAAQ,WAAW,CAAA;;;;AAC9C,YAAA,eAAA,GAAA,CAAA,QAAQ,EAAE,CAAA;AACV,YAAA,kBAAA,GAAA,CAAA,QAAQ,EAAE,CAAA;AACV,YAAA,oBAAA,GAAA,CAAA,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;AAC3B,YAAA,iBAAA,GAAA,CAAA,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;AAC3B,YAAA,gBAAA,GAAA,CAAA,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;AAC3B,YAAA,oBAAA,GAAA,CAAA,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;wCAC3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAA;uCACtD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAA;AACrD,YAAA,kBAAA,GAAA,CAAA,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;AAC1B,YAAA,mBAAA,GAAA,CAAA,QAAQ,EAAE,CAAA;oCAEV,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;mCAE5C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;mCAC7C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;sCAC7C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;2CAC7C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;2CAE7C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;qCAE5C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;qCAE7C,KAAK,CAAC,kBAAkB,CAAC,CAAA;mCACzB,KAAK,CAAC,OAAO,CAAC,CAAA;6CACd,KAAK,CAAC,2BAA2B,CAAC,CAAA;AAElC,YAAA,2BAAA,GAAA,CAAA,MAAM,EAAE,CAAA;AAKR,YAAA,gBAAA,GAAA,CAAA,KAAK,EAAE,CAAA;AAKP,YAAA,mBAAA,GAAA,CAAA,OAAO,EAAE,CAAA;2CAQT,KAAK,CAAC,KAAK,CAAC,CAAA;8CAUZ,KAAK,CAAC,QAAQ,CAAC,CAAA;6CAOf,KAAK,CAAC,OAAO,CAAC,CAAA;oDAOd,KAAK,CAAC,cAAc,CAAC,CAAA;4CAOrB,KAAK,CAAC,MAAM,CAAC,CAAA;yCAqJb,EAAE,CAAC,SAAS,CAAC,CAAA;AAqJb,YAAA,oBAAA,GAAA,CAAA,QAAQ,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAKzD,YAAA,qBAAA,GAAA,CAAA,QAAQ,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAK1D,YAAA,qBAAA,GAAA,CAAA,QAAQ,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAK1D,YAAA,0BAAA,GAAA,CAAA,QAAQ,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAKhE,YAAA,gCAAA,GAAA,CAAA,QAAQ,CAAC,yBAAyB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAKtE,YAAA,4BAAA,GAAA,CAAA,QAAQ,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAOlE,YAAA,wBAAA,GAAA,CAAA,MAAM,EAAE,CAAA;AA1XT,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,2BAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,iBAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,eAAe,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAKf,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,MAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,IAAI,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAKJ,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,mBAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,SAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,OAAO,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAQP,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,2BAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,iBAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,eAAe,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAUf,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,8BAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,oBAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,kBAAkB,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAOlB,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,6BAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,mBAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,iBAAiB,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAOjB,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,oCAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,0BAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,wBAAwB,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAOxB,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,4BAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,kBAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,gBAAgB,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAqJhB,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,yBAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,eAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,aAAa,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAqJb,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,UAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,QAAQ,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAKhB,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,WAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,SAAS,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAKjB,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,WAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,SAAS,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAKjB,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,0BAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,gBAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,cAAc,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAKtB,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,gCAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,sBAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,oBAAoB,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAK5B,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,4BAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,kBAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,gBAAgB,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;AAOxB,YAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,wBAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,cAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,YAAY,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,0BAAA,CAAA;YAtZA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,KAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,GAAG,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAH,GAAG,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA;YACH,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,QAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,QAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,MAAM,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAN,MAAM,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,oBAAA,EAAA,yBAAA,CAAA;YACW,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,UAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,QAAQ,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAR,QAAQ,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,sBAAA,EAAA,2BAAA,CAAA;YACR,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,OAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,KAAK,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAL,KAAK,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,mBAAA,EAAA,wBAAA,CAAA;YACL,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,MAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,IAAI,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAJ,IAAI,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,kBAAA,EAAA,uBAAA,CAAA;YACJ,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,UAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,QAAQ,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAR,QAAQ,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,sBAAA,EAAA,2BAAA,CAAA;YACmB,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,wBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,cAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,cAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,YAAY,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAZ,YAAY,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,0BAAA,EAAA,+BAAA,CAAA;YACb,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,uBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,aAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,WAAW,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAX,WAAW,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,yBAAA,EAAA,8BAAA,CAAA;YACtC,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,QAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,QAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,MAAM,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAN,MAAM,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,oBAAA,EAAA,yBAAA,CAAA;YACtB,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,mBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,SAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,OAAO,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAP,OAAO,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,qBAAA,EAAA,0BAAA,CAAA;YAE2B,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,UAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAA,QAAQ,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAR,QAAQ,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,sBAAA,EAAA,2BAAA,CAAA;YAEP,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,mBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,SAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,OAAO,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAP,OAAO,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,qBAAA,EAAA,0BAAA,CAAA;YACf,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,mBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,SAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,OAAO,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAP,OAAO,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,qBAAA,EAAA,0BAAA,CAAA;YACf,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,YAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,UAAU,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAV,UAAU,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,wBAAA,EAAA,6BAAA,CAAA;YAClB,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,2BAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,iBAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,eAAe,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAf,eAAe,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,6BAAA,EAAA,kCAAA,CAAA;YAExB,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,2BAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,iBAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,eAAe,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAf,eAAe,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,6BAAA,EAAA,kCAAA,CAAA;YAEtB,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,WAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,WAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,SAAS,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAT,SAAS,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,uBAAA,EAAA,4BAAA,CAAA;YAErC,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,WAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,WAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,SAAS,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAT,SAAS,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,uBAAA,EAAA,4BAAA,CAAA;YAC5B,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,mBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,SAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,OAAO,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAP,OAAO,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,qBAAA,EAAA,0BAAA,CAAA;YACK,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,6BAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,IAAA,mBAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAA,IAAA,GAAA,CAAQ,iBAAiB,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,KAAA,KAAA,EAAA,GAAA,CAAjB,iBAAiB,GAAA,KAAA,CAAA,CAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,+BAAA,EAAA,oCAAA,CAAA;YAzB/D,YAAA,CAAA,IAAA,EAAA,gBAAA,GAAA,EAAA,KAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,uBAAA,CAAA;;;YAAa,iBAAA,CAAA,UAAA,EAAA,uBAAA,CAAA;;QA4BX,eAAe,GAAA;AACb,YAAA,OAAO,GAAG,SAAO,CAAA,EAAG,YAAY,EAAE;QACpC;QAGA,IAAI,GAAA;AACF,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ;QACnD;QAGA,OAAO,GAAA;YACL,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACtB;QACF;QAGA,eAAe,GAAA;YACb,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM;AAC/B,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC;QAC1B;QAGA,kBAAkB,CAAC,OAAe,EAAE,MAAc,EAAA;AAChD,YAAA,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;AAC9C,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM;YAC9B;QACF;QAGA,iBAAiB,CAAC,OAAgB,EAAE,MAAe,EAAA;AACjD,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM;YAC7B;QACF;QAGA,wBAAwB,CAAC,OAAe,EAAE,MAAc,EAAA;AACtD,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,MAAM;YACpC;QACF;QAGA,gBAAgB,CAAC,OAAgB,EAAE,MAAe,EAAA;AAChD,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM;YAC5B;QACF;;QAIQ,yBAAyB,GAAA;YAC/B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ;AACrC,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACtB;QAEQ,eAAe,GAAA;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YACvB,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,kBAAkB,EAAE;QAC3B;QAEQ,gBAAgB,GAAA;AACtB,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE;AACxB,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;gBACpB,IAAI,CAAC,SAAS,EAAE;YAClB;YACA,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC7B;QAEQ,gBAAgB,GAAA;AACtB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC3B,IAAI,CAAC,SAAS,EAAE;QAClB;QAEQ,qBAAqB,GAAA;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS;gBAAE;YACrC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW;YAC3C,IAAI,CAAC,cAAc,EAAE;QACvB;QAEQ,mBAAmB,GAAA;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE;YACzD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACvE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,GAAG,GAAG,CAAC;QAC5E;QAEQ,kBAAkB,GAAA;AACxB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;QAEQ,kBAAkB,GAAA;AACxB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACtB;QAEQ,uBAAuB,GAAA;YAC7B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE;YACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;YACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK;YAC/B,IAAI,CAAC,gBAAgB,EAAE;QACzB;;QAIQ,gBAAgB,GAAA;YACtB,IAAI,CAAC,MAAM,EAAE;QACf;QAEQ,mBAAmB,GAAA;YACzB,IAAI,CAAC,gBAAgB,EAAE;QACzB;QAEQ,iBAAiB,GAAA;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YACvB,IAAI,CAAC,IAAI,EAAE;QACb;AAEQ,QAAA,mBAAmB,CAAC,CAAa,EAAA;YACvC,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC;gBAAE;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,EAAE;AAC3D,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9E,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QACtC;AAEQ,QAAA,uBAAuB,CAAC,CAAa,EAAA;AAC3C,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAE3B,YAAA,MAAM,UAAU,GAAG,CAAC,EAAc,KAAI;gBACpC,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC;oBAAE;gBACpD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,EAAE;AAC3D,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/E,IAAI,CAAC,WAAW,GAAG,OAAO,GAAG,IAAI,CAAC,QAAQ;AAC5C,YAAA,CAAC;YAED,MAAM,QAAQ,GAAG,MAAK;AACpB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;oBAChB,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;gBAC7C;AACA,gBAAA,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,UAAU,CAAC;AACrD,gBAAA,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC;AACnD,YAAA,CAAC;AAED,YAAA,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAU,CAAC;AAClD,YAAA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC;QAChD;AAEQ,QAAA,kBAAkB,CAAC,CAAQ,EAAA;AACjC,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,MAA0B;YAC1C,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;AACnC,YAAA,IAAI,CAAC,MAAM,GAAG,GAAG;YACjB,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;AACzB,gBAAA,IAAI,CAAC,KAAK,GAAG,KAAK;YACpB;YACA,IAAI,CAAC,gBAAgB,EAAE;QACzB;QAEQ,UAAU,GAAA;AAChB,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,KAAK,GAAG,KAAK;gBAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,IAAI,CAAC;YACxC;iBAAO;AACL,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM;AACjC,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI;YACnB;YACA,IAAI,CAAC,gBAAgB,EAAE;QACzB;QAEQ,iBAAiB,GAAA;YACvB,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;YAC5D,MAAM,OAAO,GAAG,CAAC,UAAU,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM;YACxD,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC/C;QAEQ,wBAAwB,GAAA;AAC9B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC3B,IAAI,CAAC,kBAAkB,EAAE;QAC3B;QAEQ,yBAAyB,GAAA;AAC/B,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC9B;QACF;AAGA,QAAA,aAAa,CAAC,CAAgB,EAAA;YAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE;AAEpB,YAAA,QAAQ,CAAC,CAAC,GAAG;AACX,gBAAA,KAAK,GAAG;AACR,gBAAA,KAAK,GAAG;oBACN,CAAC,CAAC,cAAc,EAAE;oBAClB,IAAI,CAAC,MAAM,EAAE;oBACb;AACF,gBAAA,KAAK,GAAG;oBACN,CAAC,CAAC,cAAc,EAAE;oBAClB,IAAI,CAAC,gBAAgB,EAAE;oBACvB;AACF,gBAAA,KAAK,GAAG;oBACN,CAAC,CAAC,cAAc,EAAE;oBAClB,IAAI,CAAC,UAAU,EAAE;oBACjB;AACF,gBAAA,KAAK,YAAY;oBACf,CAAC,CAAC,cAAc,EAAE;AAClB,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;oBAClE;AACF,gBAAA,KAAK,WAAW;oBACd,CAAC,CAAC,cAAc,EAAE;AAClB,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;oBACtD;AACF,gBAAA,KAAK,SAAS;oBACZ,CAAC,CAAC,cAAc,EAAE;AAClB,oBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;oBACpD;AACF,gBAAA,KAAK,WAAW;oBACd,CAAC,CAAC,cAAc,EAAE;AAClB,oBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;oBACpD;;QAEN;;QAIQ,kBAAkB,GAAA;YACxB,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,MAAK;AAC1C,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;gBAC9B,CAAC,EAAE,mBAAmB,CAAC;YACzB;QACF;QAEQ,kBAAkB,GAAA;AACxB,YAAA,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;AAC/B,gBAAA,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AAChC,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;YAC3B;QACF;;AAIA,QAAA,MAAM,IAAI,GAAA;YACR,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE;AACnB,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,YAAA,IAAI;AACF,gBAAA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAC3B;AAAE,YAAA,MAAM;;YAER;QACF;QAEA,KAAK,GAAA;YACH,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE;AACnB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;QACtB;QAEA,MAAM,GAAA;AACJ,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,KAAK,EAAE;YACd;iBAAO;gBACL,IAAI,CAAC,IAAI,EAAE;YACb;QACF;AAEA,QAAA,MAAM,CAAC,IAAY,EAAA;YACjB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO;AAClC,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO;QAC5B;AAEA,QAAA,MAAM,iBAAiB,GAAA;YACrB,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE;AACrB,YAAA,IAAI;AACF,gBAAA,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE;YAC1C;AAAE,YAAA,MAAM;;YAER;QACF;AAEA,QAAA,MAAM,cAAc,GAAA;YAClB,IAAI,CAAC,QAAQ,CAAC,iBAAiB;gBAAE;AACjC,YAAA,IAAI;AACF,gBAAA,MAAM,QAAQ,CAAC,cAAc,EAAE;YACjC;AAAE,YAAA,MAAM;;YAER;QACF;AAEA,QAAA,MAAM,uBAAuB,GAAA;YAC3B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE;AACnB,YAAA,IAAI;AACF,gBAAA,IAAI,QAAQ,CAAC,uBAAuB,EAAE;AACpC,oBAAA,MAAM,QAAQ,CAAC,oBAAoB,EAAE;gBACvC;qBAAO;AACL,oBAAA,MAAM,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE;gBAC9C;YACF;AAAE,YAAA,MAAM;;YAER;QACF;AAEA,QAAA,eAAe,CAAC,IAAY,EAAA;AAC1B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC1B;AAEQ,QAAA,MAAM,gBAAgB,GAAA;AAC5B,YAAA,IAAI,QAAQ,CAAC,iBAAiB,EAAE;AAC9B,gBAAA,MAAM,IAAI,CAAC,cAAc,EAAE;YAC7B;iBAAO;AACL,gBAAA,MAAM,IAAI,CAAC,iBAAiB,EAAE;YAChC;QACF;QAEQ,sBAAsB,GAAA;YAC5B,IAAI,CAAC,oBAAoB,EAAE;QAC7B;;AAIQ,QAAA,UAAU,CAAC,OAAe,EAAA;YAChC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAAE,gBAAA,OAAO,MAAM;YACvD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;AACpC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;AAClC,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;gBACT,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAE;YACjF;AACA,YAAA,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QAChD;;QAKQ,QAAQ,GAAA;AACd,YAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;QACzB;QAGQ,SAAS,GAAA;AACf,YAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;QACzB;QAGQ,SAAS,GAAA;AACf,YAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;QACzB;QAGQ,cAAc,GAAA;AACpB,YAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;QACjF;QAGQ,oBAAoB,GAAA;AAC1B,YAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,iBAAiB,EAAE;QACnE;QAGQ,gBAAgB,GAAA;AACtB,YAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;QACjE;;QAKA,YAAY,GAAA;YACV,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,IAAI,GAAG,GAAG,CAAC;AACjF,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO;AAC9B,YAAA,MAAM,cAAc,GAAG;gBACrB,iBAAiB;gBACjB,CAAC,SAAS,GAAG,QAAQ,GAAG,EAAE;gBAC1B,IAAI,CAAC,eAAe,GAAG,kBAAkB,GAAG,EAAE;aAC/C,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAE3B,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAErD,YAAA,OAAO,IAAI,CAAA;;;iBAGE,cAAc,CAAA;;AAEV,mBAAA,EAAA,MAAM,IAAI,CAAC,wBAAwB,EAAE;AACpC,oBAAA,EAAA,MAAM,IAAI,CAAC,yBAAyB,EAAE;AAChC,0BAAA,EAAA,MAAM,IAAI,CAAC,sBAAsB,EAAE;;;;AAI9C,eAAA,EAAA,IAAI,CAAC,GAAG;AACH,oBAAA,EAAA,IAAI,CAAC,QAAQ;AAChB,iBAAA,EAAA,IAAI,CAAC,KAAK;AACX,gBAAA,EAAA,IAAI,CAAC,IAAI;;;AAGC,0BAAA,EAAA,MAAM,IAAI,CAAC,yBAAyB,EAAE;AAChD,gBAAA,EAAA,MAAM,IAAI,CAAC,eAAe,EAAE;AAC3B,iBAAA,EAAA,MAAM,IAAI,CAAC,gBAAgB,EAAE;AAC7B,iBAAA,EAAA,MAAM,IAAI,CAAC,gBAAgB,EAAE;AACxB,sBAAA,EAAA,MAAM,IAAI,CAAC,qBAAqB,EAAE;AACpC,oBAAA,EAAA,MAAM,IAAI,CAAC,mBAAmB,EAAE;AACjC,mBAAA,EAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE;AAC/B,mBAAA,EAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE;AAC1B,wBAAA,EAAA,MAAM,IAAI,CAAC,uBAAuB,EAAE;AAC3C,iBAAA,EAAA,MAAM,IAAI,CAAC,gBAAgB,EAAE;AAC1B,oBAAA,EAAA,MAAM,IAAI,CAAC,mBAAmB,EAAE;;;;;AAKxC,YAAA,EAAA,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAA;;;AAGA,0CAAA,EAAA,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACnD,mBAAA,EAAA,MAAM,IAAI,CAAC,iBAAiB,EAAE;;;;;;;;;;AAUrC,YAAA,EAAA,IAAI,CAAC,OAAO,CAAA;;;;;;cAMZ,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,CAAA;;;;;;;;AAQ1C,YAAA,EAAA,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAA;;;;uBAIhB,CAAC,CAAa,KAAK,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;2BAC1C,CAAC,CAAa,KAAK,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;;;AAGR,mEAAA,EAAA,IAAI,CAAC,eAAe,CAAA;gEACzB,QAAQ,CAAA;;;;;;kEAMN,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA,aAAA,EAAgB,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA,SAAA,EAAY,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;wBACjJ,SAAS,CAAA;;;;;;AAMT,sBAAA,EAAA,CAAC,SAAS,CAAA;;;;;;;;sEAQoC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA,aAAA,EAAgB,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAA,SAAA,EAAY,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAA;0BACjK,aAAa,CAAA;;;;;;;AAOb,wBAAA,EAAA,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAA;;;;;;AAMnC,wBAAA,EAAA,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,CAAA;;;;;;;;;;;;;;AAcpD,2BAAA,EAAA,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;6BACzC,CAAC,CAAQ,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;;;;AAI1B,yCAAA,EAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;;;;AAI9C,gEAAA,EAAA,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAA;AAC5E,kBAAA,EAAA,IAAI,CAAC,YAAY,CAAA;;;AAG4B,+DAAA,EAAA,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAA;;;;;;;AAO7B,sEAAA,EAAA,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAA;;;;;;;;;;KAUhG;QACH;;;AAtjBY,YAAA,IAAA,CAAA,GAAG,IADJ,iBAAA,CAAA,IAAA,EAAA,0BAAA,CAAgB,EAAA,iBAAA,CAAA,IAAA,EAAA,iBAAA,EACD,EAAE,CAAA,CAAA;YAChB,IAAA,CAAA,MAAM,IAAA,iBAAA,CAAA,IAAA,EAAA,sBAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,oBAAA,EAAW,EAAE,CAAA,CAAA;YACF,IAAA,CAAA,QAAQ,IAAA,iBAAA,CAAA,IAAA,EAAA,yBAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,sBAAA,EAAY,KAAK,CAAA,CAAA;YACzB,IAAA,CAAA,KAAK,IAAA,iBAAA,CAAA,IAAA,EAAA,2BAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,mBAAA,EAAY,KAAK,CAAA,CAAA;YACtB,IAAA,CAAA,IAAI,IAAA,iBAAA,CAAA,IAAA,EAAA,wBAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,kBAAA,EAAY,KAAK,CAAA,CAAA;YACrB,IAAA,CAAA,QAAQ,IAAA,iBAAA,CAAA,IAAA,EAAA,uBAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,sBAAA,EAAY,IAAI,CAAA,CAAA;YACG,IAAA,CAAA,YAAY,IAAA,iBAAA,CAAA,IAAA,EAAA,2BAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,0BAAA,EAAW,CAAC,CAAA,CAAA;YACzB,IAAA,CAAA,WAAW,IAAA,iBAAA,CAAA,IAAA,EAAA,+BAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,yBAAA,EAAW,CAAC,CAAA,CAAA;YAClD,IAAA,CAAA,MAAM,IAAA,iBAAA,CAAA,IAAA,EAAA,8BAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,oBAAA,EAAW,CAAC,CAAA,CAAA;YAClC,IAAA,CAAA,OAAO,IAAA,iBAAA,CAAA,IAAA,EAAA,yBAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,qBAAA,EAAiB,SAAS,CAAA,CAAA;YAEC,IAAA,CAAA,QAAQ,IAAA,iBAAA,CAAA,IAAA,EAAA,0BAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,sBAAA,EAAW,CAAC,CAAA,CAAA;YAEX,IAAA,CAAA,OAAO,IAAA,iBAAA,CAAA,IAAA,EAAA,2BAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,qBAAA,EAAY,KAAK,CAAA,CAAA;YACxB,IAAA,CAAA,OAAO,IAAA,iBAAA,CAAA,IAAA,EAAA,0BAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,qBAAA,EAAY,KAAK,CAAA,CAAA;YACxB,IAAA,CAAA,UAAU,IAAA,iBAAA,CAAA,IAAA,EAAA,0BAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,wBAAA,EAAY,IAAI,CAAA,CAAA;YAC1B,IAAA,CAAA,eAAe,IAAA,iBAAA,CAAA,IAAA,EAAA,6BAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,6BAAA,EAAY,KAAK,CAAA,CAAA;YAC/E,IAAA,CAAA,aAAa,IAAA,iBAAA,CAAA,IAAA,EAAA,kCAAA,CAAA,EAAkB,IAAI,CAAA;YACW,IAAA,CAAA,eAAe,GAAA,iBAAA,CAAA,IAAA,EAAA,6BAAA,EAAW,CAAC,CAAA;YACzE,IAAA,CAAA,cAAc,IAAA,iBAAA,CAAA,IAAA,EAAA,kCAAA,CAAA,EAAW,CAAC,CAAA;YACqB,IAAA,CAAA,SAAS,GAAA,iBAAA,CAAA,IAAA,EAAA,uBAAA,EAAY,KAAK,CAAA;AAE9C,YAAA,IAAA,CAAA,SAAS,IAAA,iBAAA,CAAA,IAAA,EAAA,4BAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,uBAAA,EAAA,MAAA,CAAA,CAAA;AACpB,YAAA,IAAA,CAAA,OAAO,IAAA,iBAAA,CAAA,IAAA,EAAA,4BAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,qBAAA,EAAA,MAAA,CAAA,CAAA;AACa,YAAA,IAAA,CAAA,iBAAiB,IAAA,iBAAA,CAAA,IAAA,EAAA,0BAAA,CAAA,EAAA,iBAAA,CAAA,IAAA,EAAA,+BAAA,EAAA,MAAA,CAAA,CAAA;;;;;;;;;"}
@@ -0,0 +1,16 @@
1
+ import type { AppContext } from './types/app-context';
2
+ /** @internal */
3
+ export declare function hasContextProvider(root: EventTarget): boolean;
4
+ /**
5
+ * Installs the low-level application-context provider on a concrete event
6
+ * boundary. Public callers use provideContext(), which also activates the
7
+ * daemon instances declared by the context.
8
+ */
9
+ export declare function installContextProvider(root: EventTarget, context: AppContext): () => void;
10
+ /**
11
+ * Resolves the raw application context visible to an element or controller.
12
+ * A single composed, bubbling request is answered by the nearest
13
+ * provideContext() root. Router-injected context remains a fallback for a
14
+ * detached page or controller that cannot currently reach its provider.
15
+ */
16
+ export declare function getContext<T extends AppContext = AppContext>(source: unknown): T | undefined;
@@ -0,0 +1,10 @@
1
+ export interface DaemonCommunicationState {
2
+ target: EventTarget;
3
+ bindings: number;
4
+ active: boolean;
5
+ }
6
+ export declare function isDaemonInstance(value: unknown): value is object;
7
+ export declare function daemonState(instance: object): DaemonCommunicationState;
8
+ export declare function getDaemonTarget(instance: object): EventTarget;
9
+ export declare function requireDaemonTarget(source: unknown, name: string): EventTarget;
10
+ export declare function defaultCommunicationTarget(instance: any): EventTarget | null;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Marks an ordinary class as a Snice daemon.
3
+ *
4
+ * The decorator never constructs or globally registers the class. Application
5
+ * code owns every instance and exposes selected instances through an explicit
6
+ * app context.
7
+ */
8
+ export declare function daemon<T extends abstract new (...args: any[]) => object>(constructor: T, _context: ClassDecoratorContext<T>): void;
9
+ /** @internal Activates framework-managed communication for a provided daemon. */
10
+ export declare function bindDaemon(instance: object): () => void;