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
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Keyboard filter for matching specific keys and modifiers
3
+ */
4
+ export interface KeyboardFilter {
5
+ key: string;
6
+ ctrl?: boolean;
7
+ alt?: boolean;
8
+ shift?: boolean;
9
+ meta?: boolean;
10
+ anyModifiers?: boolean;
11
+ }
12
+ export declare function warnIfModifierMisuse(eventName: string): void;
13
+ /**
14
+ * Parse keyboard shortcut specification
15
+ * Examples:
16
+ * "enter" -> { key: "Enter" }
17
+ * "ctrl+s" -> { key: "s", ctrl: true }
18
+ * "ctrl+shift+s" -> { key: "s", ctrl: true, shift: true }
19
+ * "~enter" -> { key: "Enter", anyModifiers: true }
20
+ */
21
+ export declare function parseKeyboardFilter(spec: string): KeyboardFilter;
22
+ /**
23
+ * Check if keyboard event matches the filter
24
+ */
25
+ export declare function matchesKeyboardFilter(event: KeyboardEvent, filter: KeyboardFilter): boolean;
package/dist/on.d.ts CHANGED
@@ -51,7 +51,7 @@ export declare function on(eventName: string | string[], selectorOrOptions?: str
51
51
  * Setup event listeners for an element or controller instance
52
52
  * Called automatically during element connection or controller attachment
53
53
  */
54
- export declare function setupEventHandlers(instance: any, targetElement: HTMLElement): void;
54
+ export declare function setupEventHandlers(instance: any, targetElement: EventTarget): void;
55
55
  /**
56
56
  * Cleanup event listeners for a controller instance
57
57
  * Called automatically by the controller system during detach
package/dist/parts.d.ts CHANGED
@@ -301,23 +301,6 @@ export declare class EventPart extends Part {
301
301
  disconnected(preserveEventListeners?: boolean): void;
302
302
  reconnected(): void;
303
303
  }
304
- /**
305
- * Keyboard filter for matching specific keys and modifiers
306
- */
307
- export interface KeyboardFilter {
308
- key: string;
309
- ctrl?: boolean;
310
- alt?: boolean;
311
- shift?: boolean;
312
- meta?: boolean;
313
- anyModifiers?: boolean;
314
- }
315
- export declare function warnIfModifierMisuse(eventName: string): void;
316
- export declare function parseKeyboardFilter(spec: string): KeyboardFilter;
317
- /**
318
- * Check if keyboard event matches the filter
319
- */
320
- export declare function matchesKeyboardFilter(event: KeyboardEvent, filter: KeyboardFilter): boolean;
321
304
  export declare class ConditionalIfPart extends Part {
322
305
  readonly type: "node";
323
306
  private startNode;
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * snice v7.0.1
3
- * A decorator-driven web component library with differential rendering, routing, controllers, and 130+ ready-made UI components. Use as much or as little as you want. Zero dependencies, works anywhere.
2
+ * snice v7.0.3
3
+ * A decorator-driven web component library with routing, controllers, daemons, and 130+ UI components. For better coding-agent results, run npx snice init-ai.
4
4
  * (c) 2024
5
5
  * Released under the MIT License.
6
6
  *
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * snice v7.0.1
3
- * A decorator-driven web component library with differential rendering, routing, controllers, and 130+ ready-made UI components. Use as much or as little as you want. Zero dependencies, works anywhere.
2
+ * snice v7.0.3
3
+ * A decorator-driven web component library with routing, controllers, daemons, and 130+ UI components. For better coding-agent results, run npx snice init-ai.
4
4
  * (c) 2024
5
5
  * Released under the MIT License.
6
6
  *
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * snice v7.0.1
3
- * A decorator-driven web component library with differential rendering, routing, controllers, and 130+ ready-made UI components. Use as much or as little as you want. Zero dependencies, works anywhere.
2
+ * snice v7.0.3
3
+ * A decorator-driven web component library with routing, controllers, daemons, and 130+ UI components. For better coding-agent results, run npx snice init-ai.
4
4
  * (c) 2024
5
5
  * Released under the MIT License.
6
6
  *
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * snice v7.0.1
3
- * A decorator-driven web component library with differential rendering, routing, controllers, and 130+ ready-made UI components. Use as much or as little as you want. Zero dependencies, works anywhere.
2
+ * snice v7.0.3
3
+ * A decorator-driven web component library with routing, controllers, daemons, and 130+ UI components. For better coding-agent results, run npx snice init-ai.
4
4
  * (c) 2024
5
5
  * Released under the MIT License.
6
6
  *
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * snice v7.0.1
3
- * A decorator-driven web component library with differential rendering, routing, controllers, and 130+ ready-made UI components. Use as much or as little as you want. Zero dependencies, works anywhere.
2
+ * snice v7.0.3
3
+ * A decorator-driven web component library with routing, controllers, daemons, and 130+ UI components. For better coding-agent results, run npx snice init-ai.
4
4
  * (c) 2024
5
5
  * Released under the MIT License.
6
6
  *
@@ -1,5 +1,13 @@
1
1
  import { RequestOptions } from './types/request-options';
2
2
  import { RespondOptions } from './types/respond-options';
3
+ /**
4
+ * Return type for methods decorated with `@request`.
5
+ *
6
+ * TypeScript cannot express a method decorator changing an async generator
7
+ * into a promise-returning method. This pragmatic helper suppresses that
8
+ * mismatch while documenting the response value for readers and tooling.
9
+ */
10
+ export type Response<T = any> = T | any;
3
11
  /**
4
12
  * Decorator for making requests from elements or controllers.
5
13
  * Uses async generator pattern for bidirectional communication.
@@ -15,5 +23,5 @@ export declare function request<T = any>(requestName: string, options?: RequestO
15
23
  * @param options Optional configuration
16
24
  */
17
25
  export declare function respond(requestName: string, options?: RespondOptions): (target: any, context: ClassMethodDecoratorContext) => void;
18
- export declare function setupResponseHandlers(instance: any, element: HTMLElement): void;
26
+ export declare function setupResponseHandlers(instance: any, element: EventTarget): void;
19
27
  export declare function cleanupResponseHandlers(instance: any): void;
package/dist/symbols.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * snice v7.0.1
3
- * A decorator-driven web component library with differential rendering, routing, controllers, and 130+ ready-made UI components. Use as much or as little as you want. Zero dependencies, works anywhere.
2
+ * snice v7.0.3
3
+ * A decorator-driven web component library with routing, controllers, daemons, and 130+ UI components. For better coding-agent results, run npx snice init-ai.
4
4
  * (c) 2024
5
5
  * Released under the MIT License.
6
6
  *
@@ -31,8 +31,14 @@ function getSymbol(name) {
31
31
  // All symbols are stored globally to ensure consistency across modules
32
32
  const IS_CONTROLLER_CLASS = getSymbol('is-controller-class');
33
33
  const IS_CONTROLLER_INSTANCE = getSymbol('is-controller-instance');
34
+ const IS_DAEMON_CLASS = getSymbol('is-daemon-class');
35
+ const IS_DAEMON_INSTANCE = getSymbol('is-daemon-instance');
34
36
  const IS_ELEMENT_CLASS = getSymbol('is-element-class');
35
37
  const CHANNEL_HANDLERS = getSymbol('channel-handlers');
38
+ // Per-instance daemon communication state. Daemon instances are constructed by
39
+ // application code; Snice only creates and manages their private EventTarget
40
+ // when an app context explicitly provides them.
41
+ const DAEMON_STATE = getSymbol('daemon-state');
36
42
  // Internal element state symbols
37
43
  const READY_PROMISE = getSymbol('ready-promise');
38
44
  const READY_RESOLVE = getSymbol('ready-resolve');
@@ -167,6 +173,7 @@ exports.CONTROLLER_NAME_KEY = CONTROLLER_NAME_KEY;
167
173
  exports.CONTROLLER_OPERATIONS = CONTROLLER_OPERATIONS;
168
174
  exports.CREATED_AT = CREATED_AT;
169
175
  exports.CURRENT_PAGE_MARKER = CURRENT_PAGE_MARKER;
176
+ exports.DAEMON_STATE = DAEMON_STATE;
170
177
  exports.DIRECT_CONTROLLER = DIRECT_CONTROLLER;
171
178
  exports.DISPATCH_TIMERS = DISPATCH_TIMERS;
172
179
  exports.DISPOSE_HANDLERS = DISPOSE_HANDLERS;
@@ -176,6 +183,8 @@ exports.EXPLICITLY_SET_PROPERTIES = EXPLICITLY_SET_PROPERTIES;
176
183
  exports.INITIALIZED = INITIALIZED;
177
184
  exports.IS_CONTROLLER_CLASS = IS_CONTROLLER_CLASS;
178
185
  exports.IS_CONTROLLER_INSTANCE = IS_CONTROLLER_INSTANCE;
186
+ exports.IS_DAEMON_CLASS = IS_DAEMON_CLASS;
187
+ exports.IS_DAEMON_INSTANCE = IS_DAEMON_INSTANCE;
179
188
  exports.IS_ELEMENT_CLASS = IS_ELEMENT_CLASS;
180
189
  exports.IS_UPDATING = IS_UPDATING;
181
190
  exports.MOVED_HANDLERS = MOVED_HANDLERS;
@@ -1 +1 @@
1
- {"version":3,"file":"symbols.cjs","sources":["../src/global.ts","../src/symbols.ts"],"sourcesContent":["// Global namespace for Snice framework\n// Ensures all registries and symbols are shared across different JS files/modules\n\nimport { SniceGlobal } from './types/snice-global';\n\n\n// Initialize the global Snice namespace on globalThis\n// This ensures all module instances share the same registry\nif (!(globalThis as any).snice) {\n (globalThis as any).snice = {\n controllerRegistry: new Map(),\n pendingControllerAttachments: new Map(),\n controllerIdCounter: 0\n };\n}\n\n// Multiple copies of Snice can share a global created by an older build.\n(globalThis as any).snice.pendingControllerAttachments ??= new Map();\n\n// Export direct reference to globalThis.snice\nexport const snice: SniceGlobal = (globalThis as any).snice;\n\n// Helper function to get or create a global symbol\n// Symbol.for() already guarantees global uniqueness, no need for a Map cache\nexport function getSymbol(name: string): symbol {\n return Symbol.for(`snice:${name}`);\n}\n","// Central file for all symbols used in the framework\n// All symbols are stored globally to ensure consistency across modules\n\nimport { getSymbol } from './global';\n\nexport { getSymbol };\n\nexport const IS_CONTROLLER_CLASS = getSymbol('is-controller-class');\nexport const IS_CONTROLLER_INSTANCE = getSymbol('is-controller-instance');\nexport const IS_ELEMENT_CLASS = getSymbol('is-element-class');\nexport const CHANNEL_HANDLERS = getSymbol('channel-handlers');\n\n// Internal element state symbols\nexport const READY_PROMISE = getSymbol('ready-promise');\nexport const READY_RESOLVE = getSymbol('ready-resolve');\nexport const RENDERED_PROMISE = getSymbol('rendered-promise');\nexport const RENDERED_RESOLVE = getSymbol('rendered-resolve');\n// Set when a render is requested but dropped because the element was\n// disconnected; consumed on reconnect to replay exactly the missed render.\nexport const PENDING_RECONNECT_RENDER = getSymbol('pending-reconnect-render');\n// Per-element synchronous render-nesting depth, used to cap runaway re-entry\n// without a shared global counter that one element could exhaust for others.\nexport const RENDER_DEPTH = getSymbol('render-depth');\nexport const RENDER_ROOT = getSymbol('render-root');\nexport const ELEMENT_OPTIONS = getSymbol('element-options');\nexport const CONTROLLER = getSymbol('controller');\nexport const INITIALIZED = getSymbol('initialized');\n\n// Event handler symbols\nexport const ON_HANDLERS = getSymbol('on-handlers');\n\n// Controller symbols\nexport const CONTROLLER_KEY = getSymbol('controller-key');\nexport const CONTROLLER_NAME_KEY = getSymbol('controller-name');\nexport const CONTROLLER_ID = getSymbol('controller-id');\nexport const CONTROLLER_OPERATIONS = getSymbol('controller-operations');\nexport const NATIVE_CONTROLLER = getSymbol('native-controller');\n// Set while a controller CLASS (not a registry name) is attached — the\n// attribute/MutationObserver channel must not attach over or detach it.\nexport const DIRECT_CONTROLLER = getSymbol('direct-controller');\n// A controller class bound by a template before the custom element was\n// defined/upgraded. Picked up by connectedCallback on first initialization.\nexport const PENDING_CONTROLLER_BINDING = getSymbol('pending-controller-binding');\n\n// Cleanup symbol - holds an object with all cleanup arrays\nexport const CLEANUP = getSymbol('cleanup');\n\n// Property symbols\nexport const PROPERTIES = getSymbol('properties');\nexport const PROPERTY_VALUES = getSymbol('property-values');\nexport const PROPERTY_DEFAULTS = getSymbol('property-defaults');\nexport const PROPERTY_WRAPPERS = getSymbol('property-wrappers');\nexport const PRE_INIT_PROPERTY_VALUES = getSymbol('pre-init-property-values');\nexport const PRE_UPGRADE_PROPERTY_BINDINGS = getSymbol('pre-upgrade-property-bindings');\nexport const PROPERTIES_INITIALIZED = getSymbol('properties-initialized');\nexport const PROPERTY_WATCHERS = getSymbol('property-watchers');\nexport const EXPLICITLY_SET_PROPERTIES = getSymbol('explicitly-set-properties');\n\n// Router context symbol\nexport const ROUTER_CONTEXT = getSymbol('router-context');\nexport const CURRENT_PAGE_MARKER = getSymbol('current-page-marker');\nexport const CONTEXT_REQUEST_HANDLER = getSymbol('context-request-handler');\nexport const PAGE_TRANSITION = getSymbol('page-transition');\nexport const CREATED_AT = getSymbol('created-at');\n\n// Lifecycle symbols\nexport const READY_HANDLERS = getSymbol('ready-handlers');\nexport const DISPOSE_HANDLERS = getSymbol('dispose-handlers');\nexport const RECONNECT_HANDLERS = getSymbol('reconnect-handlers');\nexport const MOVED_HANDLERS = getSymbol('moved-handlers');\nexport const ADOPTED_HANDLERS = getSymbol('adopted-handlers');\n\n// Observer symbols\nexport const OBSERVERS = getSymbol('observers');\n\n// Part symbols\nexport const PARTS = getSymbol('parts');\nexport const PART_TIMERS = getSymbol('part-timers');\n\n// Property setter flag (prevents attributeChangedCallback re-triggering watchers)\nexport const SETTING_FROM_PROPERTY = getSymbol('setting-from-property');\n\n// Lifecycle callback timers\nexport const MOVED_TIMERS = getSymbol('moved-timers');\nexport const ADOPTED_TIMERS = getSymbol('adopted-timers');\n\n// Dispatch timing symbols\nexport const DISPATCH_TIMERS = getSymbol('dispatch-timers');\n\n// Render symbols (v3.0.0)\nexport const RENDER_METHOD = getSymbol('render-method');\nexport const RENDER_OPTIONS = getSymbol('render-options');\nexport const RENDER_INSTANCE = getSymbol('render-instance');\nexport const RENDER_TIMERS = getSymbol('render-timers');\nexport const RENDER_CALLBACKS = getSymbol('render-callbacks');\nexport const STYLES_METHOD = getSymbol('styles-method');\nexport const STYLES_APPLIED = getSymbol('styles-applied');\nexport const PARENT_STYLES_METHODS = getSymbol('parent-styles-methods');\nexport const SNICE_ELEMENT_BASE = getSymbol('snice-element-base');\n\n// Navigation context symbols\nexport const CONTEXT_HANDLER = getSymbol('context-handler');\nexport const CONTEXT_METHOD_NAME = getSymbol('context-method-name');\nexport const NAVIGATION_CONTEXT_INSTANCE = getSymbol('navigation-context-instance');\nexport const REGISTERED_ELEMENTS = getSymbol('registered-elements');\nexport const IS_UPDATING = getSymbol('is-updating');\nexport const CONTEXT_REGISTER = getSymbol('context-register');\nexport const CONTEXT_UNREGISTER = getSymbol('context-unregister');\nexport const CONTEXT_NOTIFY_ELEMENT = getSymbol('context-notify-element');\nexport const CONTEXT_OPTIONS = getSymbol('context-options');\nexport const CONTEXT_TIMER = getSymbol('context-timer');\nexport const CONTEXT_CALLED = getSymbol('context-called');\nexport const CONTEXT_UPDATE = getSymbol('context-update');\n\n// Registration de-dup sets on the constructor — replace previous `__*Methods`\n// expando strings that violated the no-double-underscore rule.\nexport const CONTEXT_METHODS = getSymbol('context-methods');\nexport const WATCH_METHODS = getSymbol('watch-methods');\nexport const OBSERVE_METHODS = getSymbol('observe-methods');\nexport const ON_METHODS = getSymbol('on-methods');\nexport const RESPOND_METHODS = getSymbol('respond-methods');\nexport const READY_METHODS = getSymbol('ready-methods');\nexport const DISPOSE_METHODS = getSymbol('dispose-methods');\nexport const RECONNECT_METHODS = getSymbol('reconnect-methods');\nexport const MOVED_METHODS = getSymbol('moved-methods');\nexport const ADOPTED_METHODS = getSymbol('adopted-methods');\n\n// Controller attach-abort — set to an AbortController while attachController\n// is awaiting element.ready, so detachController can short-circuit the wait.\nexport const CONTROLLER_ABORT = getSymbol('controller-abort');\n// Set on a controller instance once it has gotten past element.ready and is\n// being attached, so detachController knows not to run detach() on a controller\n// whose attach() was aborted before it ever ran.\nexport const CONTROLLER_ATTACHED = getSymbol('controller-attached');\nexport const PROPERTY_DEFINERS = getSymbol('property-definers');\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"symbols.cjs","sources":["../src/global.ts","../src/symbols.ts"],"sourcesContent":["// Global namespace for Snice framework\n// Ensures all registries and symbols are shared across different JS files/modules\n\nimport { SniceGlobal } from './types/snice-global';\n\n\n// Initialize the global Snice namespace on globalThis\n// This ensures all module instances share the same registry\nif (!(globalThis as any).snice) {\n (globalThis as any).snice = {\n controllerRegistry: new Map(),\n pendingControllerAttachments: new Map(),\n controllerIdCounter: 0\n };\n}\n\n// Multiple copies of Snice can share a global created by an older build.\n(globalThis as any).snice.pendingControllerAttachments ??= new Map();\n\n// Export direct reference to globalThis.snice\nexport const snice: SniceGlobal = (globalThis as any).snice;\n\n// Helper function to get or create a global symbol\n// Symbol.for() already guarantees global uniqueness, no need for a Map cache\nexport function getSymbol(name: string): symbol {\n return Symbol.for(`snice:${name}`);\n}\n","// Central file for all symbols used in the framework\n// All symbols are stored globally to ensure consistency across modules\n\nimport { getSymbol } from './global';\n\nexport { getSymbol };\n\nexport const IS_CONTROLLER_CLASS = getSymbol('is-controller-class');\nexport const IS_CONTROLLER_INSTANCE = getSymbol('is-controller-instance');\nexport const IS_DAEMON_CLASS = getSymbol('is-daemon-class');\nexport const IS_DAEMON_INSTANCE = getSymbol('is-daemon-instance');\nexport const IS_ELEMENT_CLASS = getSymbol('is-element-class');\nexport const CHANNEL_HANDLERS = getSymbol('channel-handlers');\n\n// Per-instance daemon communication state. Daemon instances are constructed by\n// application code; Snice only creates and manages their private EventTarget\n// when an app context explicitly provides them.\nexport const DAEMON_STATE = getSymbol('daemon-state');\n\n// Internal element state symbols\nexport const READY_PROMISE = getSymbol('ready-promise');\nexport const READY_RESOLVE = getSymbol('ready-resolve');\nexport const RENDERED_PROMISE = getSymbol('rendered-promise');\nexport const RENDERED_RESOLVE = getSymbol('rendered-resolve');\n// Set when a render is requested but dropped because the element was\n// disconnected; consumed on reconnect to replay exactly the missed render.\nexport const PENDING_RECONNECT_RENDER = getSymbol('pending-reconnect-render');\n// Per-element synchronous render-nesting depth, used to cap runaway re-entry\n// without a shared global counter that one element could exhaust for others.\nexport const RENDER_DEPTH = getSymbol('render-depth');\nexport const RENDER_ROOT = getSymbol('render-root');\nexport const ELEMENT_OPTIONS = getSymbol('element-options');\nexport const CONTROLLER = getSymbol('controller');\nexport const INITIALIZED = getSymbol('initialized');\n\n// Event handler symbols\nexport const ON_HANDLERS = getSymbol('on-handlers');\n\n// Controller symbols\nexport const CONTROLLER_KEY = getSymbol('controller-key');\nexport const CONTROLLER_NAME_KEY = getSymbol('controller-name');\nexport const CONTROLLER_ID = getSymbol('controller-id');\nexport const CONTROLLER_OPERATIONS = getSymbol('controller-operations');\nexport const NATIVE_CONTROLLER = getSymbol('native-controller');\n// Set while a controller CLASS (not a registry name) is attached — the\n// attribute/MutationObserver channel must not attach over or detach it.\nexport const DIRECT_CONTROLLER = getSymbol('direct-controller');\n// A controller class bound by a template before the custom element was\n// defined/upgraded. Picked up by connectedCallback on first initialization.\nexport const PENDING_CONTROLLER_BINDING = getSymbol('pending-controller-binding');\n\n// Cleanup symbol - holds an object with all cleanup arrays\nexport const CLEANUP = getSymbol('cleanup');\n\n// Property symbols\nexport const PROPERTIES = getSymbol('properties');\nexport const PROPERTY_VALUES = getSymbol('property-values');\nexport const PROPERTY_DEFAULTS = getSymbol('property-defaults');\nexport const PROPERTY_WRAPPERS = getSymbol('property-wrappers');\nexport const PRE_INIT_PROPERTY_VALUES = getSymbol('pre-init-property-values');\nexport const PRE_UPGRADE_PROPERTY_BINDINGS = getSymbol('pre-upgrade-property-bindings');\nexport const PROPERTIES_INITIALIZED = getSymbol('properties-initialized');\nexport const PROPERTY_WATCHERS = getSymbol('property-watchers');\nexport const EXPLICITLY_SET_PROPERTIES = getSymbol('explicitly-set-properties');\n\n// Router context symbol\nexport const ROUTER_CONTEXT = getSymbol('router-context');\nexport const CURRENT_PAGE_MARKER = getSymbol('current-page-marker');\nexport const CONTEXT_REQUEST_HANDLER = getSymbol('context-request-handler');\nexport const PAGE_TRANSITION = getSymbol('page-transition');\nexport const CREATED_AT = getSymbol('created-at');\n\n// Lifecycle symbols\nexport const READY_HANDLERS = getSymbol('ready-handlers');\nexport const DISPOSE_HANDLERS = getSymbol('dispose-handlers');\nexport const RECONNECT_HANDLERS = getSymbol('reconnect-handlers');\nexport const MOVED_HANDLERS = getSymbol('moved-handlers');\nexport const ADOPTED_HANDLERS = getSymbol('adopted-handlers');\n\n// Observer symbols\nexport const OBSERVERS = getSymbol('observers');\n\n// Part symbols\nexport const PARTS = getSymbol('parts');\nexport const PART_TIMERS = getSymbol('part-timers');\n\n// Property setter flag (prevents attributeChangedCallback re-triggering watchers)\nexport const SETTING_FROM_PROPERTY = getSymbol('setting-from-property');\n\n// Lifecycle callback timers\nexport const MOVED_TIMERS = getSymbol('moved-timers');\nexport const ADOPTED_TIMERS = getSymbol('adopted-timers');\n\n// Dispatch timing symbols\nexport const DISPATCH_TIMERS = getSymbol('dispatch-timers');\n\n// Render symbols (v3.0.0)\nexport const RENDER_METHOD = getSymbol('render-method');\nexport const RENDER_OPTIONS = getSymbol('render-options');\nexport const RENDER_INSTANCE = getSymbol('render-instance');\nexport const RENDER_TIMERS = getSymbol('render-timers');\nexport const RENDER_CALLBACKS = getSymbol('render-callbacks');\nexport const STYLES_METHOD = getSymbol('styles-method');\nexport const STYLES_APPLIED = getSymbol('styles-applied');\nexport const PARENT_STYLES_METHODS = getSymbol('parent-styles-methods');\nexport const SNICE_ELEMENT_BASE = getSymbol('snice-element-base');\n\n// Navigation context symbols\nexport const CONTEXT_HANDLER = getSymbol('context-handler');\nexport const CONTEXT_METHOD_NAME = getSymbol('context-method-name');\nexport const NAVIGATION_CONTEXT_INSTANCE = getSymbol('navigation-context-instance');\nexport const REGISTERED_ELEMENTS = getSymbol('registered-elements');\nexport const IS_UPDATING = getSymbol('is-updating');\nexport const CONTEXT_REGISTER = getSymbol('context-register');\nexport const CONTEXT_UNREGISTER = getSymbol('context-unregister');\nexport const CONTEXT_NOTIFY_ELEMENT = getSymbol('context-notify-element');\nexport const CONTEXT_OPTIONS = getSymbol('context-options');\nexport const CONTEXT_TIMER = getSymbol('context-timer');\nexport const CONTEXT_CALLED = getSymbol('context-called');\nexport const CONTEXT_UPDATE = getSymbol('context-update');\n\n// Registration de-dup sets on the constructor — replace previous `__*Methods`\n// expando strings that violated the no-double-underscore rule.\nexport const CONTEXT_METHODS = getSymbol('context-methods');\nexport const WATCH_METHODS = getSymbol('watch-methods');\nexport const OBSERVE_METHODS = getSymbol('observe-methods');\nexport const ON_METHODS = getSymbol('on-methods');\nexport const RESPOND_METHODS = getSymbol('respond-methods');\nexport const READY_METHODS = getSymbol('ready-methods');\nexport const DISPOSE_METHODS = getSymbol('dispose-methods');\nexport const RECONNECT_METHODS = getSymbol('reconnect-methods');\nexport const MOVED_METHODS = getSymbol('moved-methods');\nexport const ADOPTED_METHODS = getSymbol('adopted-methods');\n\n// Controller attach-abort — set to an AbortController while attachController\n// is awaiting element.ready, so detachController can short-circuit the wait.\nexport const CONTROLLER_ABORT = getSymbol('controller-abort');\n// Set on a controller instance once it has gotten past element.ready and is\n// being attached, so detachController knows not to run detach() on a controller\n// whose attach() was aborted before it ever ran.\nexport const CONTROLLER_ATTACHED = getSymbol('controller-attached');\nexport const PROPERTY_DEFINERS = getSymbol('property-definers');\n"],"names":[],"mappings":"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"}
package/dist/symbols.d.ts CHANGED
@@ -2,8 +2,11 @@ import { getSymbol } from './global';
2
2
  export { getSymbol };
3
3
  export declare const IS_CONTROLLER_CLASS: symbol;
4
4
  export declare const IS_CONTROLLER_INSTANCE: symbol;
5
+ export declare const IS_DAEMON_CLASS: symbol;
6
+ export declare const IS_DAEMON_INSTANCE: symbol;
5
7
  export declare const IS_ELEMENT_CLASS: symbol;
6
8
  export declare const CHANNEL_HANDLERS: symbol;
9
+ export declare const DAEMON_STATE: symbol;
7
10
  export declare const READY_PROMISE: symbol;
8
11
  export declare const READY_RESOLVE: symbol;
9
12
  export declare const RENDERED_PROMISE: symbol;
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * snice v7.0.1
3
- * A decorator-driven web component library with differential rendering, routing, controllers, and 130+ ready-made UI components. Use as much or as little as you want. Zero dependencies, works anywhere.
2
+ * snice v7.0.3
3
+ * A decorator-driven web component library with routing, controllers, daemons, and 130+ UI components. For better coding-agent results, run npx snice init-ai.
4
4
  * (c) 2024
5
5
  * Released under the MIT License.
6
6
  *
@@ -29,8 +29,14 @@ function getSymbol(name) {
29
29
  // All symbols are stored globally to ensure consistency across modules
30
30
  const IS_CONTROLLER_CLASS = getSymbol('is-controller-class');
31
31
  const IS_CONTROLLER_INSTANCE = getSymbol('is-controller-instance');
32
+ const IS_DAEMON_CLASS = getSymbol('is-daemon-class');
33
+ const IS_DAEMON_INSTANCE = getSymbol('is-daemon-instance');
32
34
  const IS_ELEMENT_CLASS = getSymbol('is-element-class');
33
35
  const CHANNEL_HANDLERS = getSymbol('channel-handlers');
36
+ // Per-instance daemon communication state. Daemon instances are constructed by
37
+ // application code; Snice only creates and manages their private EventTarget
38
+ // when an app context explicitly provides them.
39
+ const DAEMON_STATE = getSymbol('daemon-state');
34
40
  // Internal element state symbols
35
41
  const READY_PROMISE = getSymbol('ready-promise');
36
42
  const READY_RESOLVE = getSymbol('ready-resolve');
@@ -140,5 +146,5 @@ const CONTROLLER_ABORT = getSymbol('controller-abort');
140
146
  const CONTROLLER_ATTACHED = getSymbol('controller-attached');
141
147
  const PROPERTY_DEFINERS = getSymbol('property-definers');
142
148
 
143
- export { ADOPTED_HANDLERS, ADOPTED_METHODS, ADOPTED_TIMERS, CHANNEL_HANDLERS, CLEANUP, CONTEXT_CALLED, CONTEXT_HANDLER, CONTEXT_METHODS, CONTEXT_METHOD_NAME, CONTEXT_NOTIFY_ELEMENT, CONTEXT_OPTIONS, CONTEXT_REGISTER, CONTEXT_REQUEST_HANDLER, CONTEXT_TIMER, CONTEXT_UNREGISTER, CONTEXT_UPDATE, CONTROLLER, CONTROLLER_ABORT, CONTROLLER_ATTACHED, CONTROLLER_ID, CONTROLLER_KEY, CONTROLLER_NAME_KEY, CONTROLLER_OPERATIONS, CREATED_AT, CURRENT_PAGE_MARKER, DIRECT_CONTROLLER, DISPATCH_TIMERS, DISPOSE_HANDLERS, DISPOSE_METHODS, ELEMENT_OPTIONS, EXPLICITLY_SET_PROPERTIES, INITIALIZED, IS_CONTROLLER_CLASS, IS_CONTROLLER_INSTANCE, IS_ELEMENT_CLASS, IS_UPDATING, MOVED_HANDLERS, MOVED_METHODS, MOVED_TIMERS, NATIVE_CONTROLLER, NAVIGATION_CONTEXT_INSTANCE, OBSERVERS, OBSERVE_METHODS, ON_HANDLERS, ON_METHODS, PAGE_TRANSITION, PARENT_STYLES_METHODS, PARTS, PART_TIMERS, PENDING_CONTROLLER_BINDING, PENDING_RECONNECT_RENDER, PRE_INIT_PROPERTY_VALUES, PRE_UPGRADE_PROPERTY_BINDINGS, PROPERTIES, PROPERTIES_INITIALIZED, PROPERTY_DEFAULTS, PROPERTY_DEFINERS, PROPERTY_VALUES, PROPERTY_WATCHERS, PROPERTY_WRAPPERS, READY_HANDLERS, READY_METHODS, READY_PROMISE, READY_RESOLVE, RECONNECT_HANDLERS, RECONNECT_METHODS, REGISTERED_ELEMENTS, RENDERED_PROMISE, RENDERED_RESOLVE, RENDER_CALLBACKS, RENDER_DEPTH, RENDER_INSTANCE, RENDER_METHOD, RENDER_OPTIONS, RENDER_ROOT, RENDER_TIMERS, RESPOND_METHODS, ROUTER_CONTEXT, SETTING_FROM_PROPERTY, SNICE_ELEMENT_BASE, STYLES_APPLIED, STYLES_METHOD, WATCH_METHODS, getSymbol };
149
+ export { ADOPTED_HANDLERS, ADOPTED_METHODS, ADOPTED_TIMERS, CHANNEL_HANDLERS, CLEANUP, CONTEXT_CALLED, CONTEXT_HANDLER, CONTEXT_METHODS, CONTEXT_METHOD_NAME, CONTEXT_NOTIFY_ELEMENT, CONTEXT_OPTIONS, CONTEXT_REGISTER, CONTEXT_REQUEST_HANDLER, CONTEXT_TIMER, CONTEXT_UNREGISTER, CONTEXT_UPDATE, CONTROLLER, CONTROLLER_ABORT, CONTROLLER_ATTACHED, CONTROLLER_ID, CONTROLLER_KEY, CONTROLLER_NAME_KEY, CONTROLLER_OPERATIONS, CREATED_AT, CURRENT_PAGE_MARKER, DAEMON_STATE, DIRECT_CONTROLLER, DISPATCH_TIMERS, DISPOSE_HANDLERS, DISPOSE_METHODS, ELEMENT_OPTIONS, EXPLICITLY_SET_PROPERTIES, INITIALIZED, IS_CONTROLLER_CLASS, IS_CONTROLLER_INSTANCE, IS_DAEMON_CLASS, IS_DAEMON_INSTANCE, IS_ELEMENT_CLASS, IS_UPDATING, MOVED_HANDLERS, MOVED_METHODS, MOVED_TIMERS, NATIVE_CONTROLLER, NAVIGATION_CONTEXT_INSTANCE, OBSERVERS, OBSERVE_METHODS, ON_HANDLERS, ON_METHODS, PAGE_TRANSITION, PARENT_STYLES_METHODS, PARTS, PART_TIMERS, PENDING_CONTROLLER_BINDING, PENDING_RECONNECT_RENDER, PRE_INIT_PROPERTY_VALUES, PRE_UPGRADE_PROPERTY_BINDINGS, PROPERTIES, PROPERTIES_INITIALIZED, PROPERTY_DEFAULTS, PROPERTY_DEFINERS, PROPERTY_VALUES, PROPERTY_WATCHERS, PROPERTY_WRAPPERS, READY_HANDLERS, READY_METHODS, READY_PROMISE, READY_RESOLVE, RECONNECT_HANDLERS, RECONNECT_METHODS, REGISTERED_ELEMENTS, RENDERED_PROMISE, RENDERED_RESOLVE, RENDER_CALLBACKS, RENDER_DEPTH, RENDER_INSTANCE, RENDER_METHOD, RENDER_OPTIONS, RENDER_ROOT, RENDER_TIMERS, RESPOND_METHODS, ROUTER_CONTEXT, SETTING_FROM_PROPERTY, SNICE_ELEMENT_BASE, STYLES_APPLIED, STYLES_METHOD, WATCH_METHODS, getSymbol };
144
150
  //# sourceMappingURL=symbols.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"symbols.esm.js","sources":["../src/global.ts","../src/symbols.ts"],"sourcesContent":["// Global namespace for Snice framework\n// Ensures all registries and symbols are shared across different JS files/modules\n\nimport { SniceGlobal } from './types/snice-global';\n\n\n// Initialize the global Snice namespace on globalThis\n// This ensures all module instances share the same registry\nif (!(globalThis as any).snice) {\n (globalThis as any).snice = {\n controllerRegistry: new Map(),\n pendingControllerAttachments: new Map(),\n controllerIdCounter: 0\n };\n}\n\n// Multiple copies of Snice can share a global created by an older build.\n(globalThis as any).snice.pendingControllerAttachments ??= new Map();\n\n// Export direct reference to globalThis.snice\nexport const snice: SniceGlobal = (globalThis as any).snice;\n\n// Helper function to get or create a global symbol\n// Symbol.for() already guarantees global uniqueness, no need for a Map cache\nexport function getSymbol(name: string): symbol {\n return Symbol.for(`snice:${name}`);\n}\n","// Central file for all symbols used in the framework\n// All symbols are stored globally to ensure consistency across modules\n\nimport { getSymbol } from './global';\n\nexport { getSymbol };\n\nexport const IS_CONTROLLER_CLASS = getSymbol('is-controller-class');\nexport const IS_CONTROLLER_INSTANCE = getSymbol('is-controller-instance');\nexport const IS_ELEMENT_CLASS = getSymbol('is-element-class');\nexport const CHANNEL_HANDLERS = getSymbol('channel-handlers');\n\n// Internal element state symbols\nexport const READY_PROMISE = getSymbol('ready-promise');\nexport const READY_RESOLVE = getSymbol('ready-resolve');\nexport const RENDERED_PROMISE = getSymbol('rendered-promise');\nexport const RENDERED_RESOLVE = getSymbol('rendered-resolve');\n// Set when a render is requested but dropped because the element was\n// disconnected; consumed on reconnect to replay exactly the missed render.\nexport const PENDING_RECONNECT_RENDER = getSymbol('pending-reconnect-render');\n// Per-element synchronous render-nesting depth, used to cap runaway re-entry\n// without a shared global counter that one element could exhaust for others.\nexport const RENDER_DEPTH = getSymbol('render-depth');\nexport const RENDER_ROOT = getSymbol('render-root');\nexport const ELEMENT_OPTIONS = getSymbol('element-options');\nexport const CONTROLLER = getSymbol('controller');\nexport const INITIALIZED = getSymbol('initialized');\n\n// Event handler symbols\nexport const ON_HANDLERS = getSymbol('on-handlers');\n\n// Controller symbols\nexport const CONTROLLER_KEY = getSymbol('controller-key');\nexport const CONTROLLER_NAME_KEY = getSymbol('controller-name');\nexport const CONTROLLER_ID = getSymbol('controller-id');\nexport const CONTROLLER_OPERATIONS = getSymbol('controller-operations');\nexport const NATIVE_CONTROLLER = getSymbol('native-controller');\n// Set while a controller CLASS (not a registry name) is attached — the\n// attribute/MutationObserver channel must not attach over or detach it.\nexport const DIRECT_CONTROLLER = getSymbol('direct-controller');\n// A controller class bound by a template before the custom element was\n// defined/upgraded. Picked up by connectedCallback on first initialization.\nexport const PENDING_CONTROLLER_BINDING = getSymbol('pending-controller-binding');\n\n// Cleanup symbol - holds an object with all cleanup arrays\nexport const CLEANUP = getSymbol('cleanup');\n\n// Property symbols\nexport const PROPERTIES = getSymbol('properties');\nexport const PROPERTY_VALUES = getSymbol('property-values');\nexport const PROPERTY_DEFAULTS = getSymbol('property-defaults');\nexport const PROPERTY_WRAPPERS = getSymbol('property-wrappers');\nexport const PRE_INIT_PROPERTY_VALUES = getSymbol('pre-init-property-values');\nexport const PRE_UPGRADE_PROPERTY_BINDINGS = getSymbol('pre-upgrade-property-bindings');\nexport const PROPERTIES_INITIALIZED = getSymbol('properties-initialized');\nexport const PROPERTY_WATCHERS = getSymbol('property-watchers');\nexport const EXPLICITLY_SET_PROPERTIES = getSymbol('explicitly-set-properties');\n\n// Router context symbol\nexport const ROUTER_CONTEXT = getSymbol('router-context');\nexport const CURRENT_PAGE_MARKER = getSymbol('current-page-marker');\nexport const CONTEXT_REQUEST_HANDLER = getSymbol('context-request-handler');\nexport const PAGE_TRANSITION = getSymbol('page-transition');\nexport const CREATED_AT = getSymbol('created-at');\n\n// Lifecycle symbols\nexport const READY_HANDLERS = getSymbol('ready-handlers');\nexport const DISPOSE_HANDLERS = getSymbol('dispose-handlers');\nexport const RECONNECT_HANDLERS = getSymbol('reconnect-handlers');\nexport const MOVED_HANDLERS = getSymbol('moved-handlers');\nexport const ADOPTED_HANDLERS = getSymbol('adopted-handlers');\n\n// Observer symbols\nexport const OBSERVERS = getSymbol('observers');\n\n// Part symbols\nexport const PARTS = getSymbol('parts');\nexport const PART_TIMERS = getSymbol('part-timers');\n\n// Property setter flag (prevents attributeChangedCallback re-triggering watchers)\nexport const SETTING_FROM_PROPERTY = getSymbol('setting-from-property');\n\n// Lifecycle callback timers\nexport const MOVED_TIMERS = getSymbol('moved-timers');\nexport const ADOPTED_TIMERS = getSymbol('adopted-timers');\n\n// Dispatch timing symbols\nexport const DISPATCH_TIMERS = getSymbol('dispatch-timers');\n\n// Render symbols (v3.0.0)\nexport const RENDER_METHOD = getSymbol('render-method');\nexport const RENDER_OPTIONS = getSymbol('render-options');\nexport const RENDER_INSTANCE = getSymbol('render-instance');\nexport const RENDER_TIMERS = getSymbol('render-timers');\nexport const RENDER_CALLBACKS = getSymbol('render-callbacks');\nexport const STYLES_METHOD = getSymbol('styles-method');\nexport const STYLES_APPLIED = getSymbol('styles-applied');\nexport const PARENT_STYLES_METHODS = getSymbol('parent-styles-methods');\nexport const SNICE_ELEMENT_BASE = getSymbol('snice-element-base');\n\n// Navigation context symbols\nexport const CONTEXT_HANDLER = getSymbol('context-handler');\nexport const CONTEXT_METHOD_NAME = getSymbol('context-method-name');\nexport const NAVIGATION_CONTEXT_INSTANCE = getSymbol('navigation-context-instance');\nexport const REGISTERED_ELEMENTS = getSymbol('registered-elements');\nexport const IS_UPDATING = getSymbol('is-updating');\nexport const CONTEXT_REGISTER = getSymbol('context-register');\nexport const CONTEXT_UNREGISTER = getSymbol('context-unregister');\nexport const CONTEXT_NOTIFY_ELEMENT = getSymbol('context-notify-element');\nexport const CONTEXT_OPTIONS = getSymbol('context-options');\nexport const CONTEXT_TIMER = getSymbol('context-timer');\nexport const CONTEXT_CALLED = getSymbol('context-called');\nexport const CONTEXT_UPDATE = getSymbol('context-update');\n\n// Registration de-dup sets on the constructor — replace previous `__*Methods`\n// expando strings that violated the no-double-underscore rule.\nexport const CONTEXT_METHODS = getSymbol('context-methods');\nexport const WATCH_METHODS = getSymbol('watch-methods');\nexport const OBSERVE_METHODS = getSymbol('observe-methods');\nexport const ON_METHODS = getSymbol('on-methods');\nexport const RESPOND_METHODS = getSymbol('respond-methods');\nexport const READY_METHODS = getSymbol('ready-methods');\nexport const DISPOSE_METHODS = getSymbol('dispose-methods');\nexport const RECONNECT_METHODS = getSymbol('reconnect-methods');\nexport const MOVED_METHODS = getSymbol('moved-methods');\nexport const ADOPTED_METHODS = getSymbol('adopted-methods');\n\n// Controller attach-abort — set to an AbortController while attachController\n// is awaiting element.ready, so detachController can short-circuit the wait.\nexport const CONTROLLER_ABORT = getSymbol('controller-abort');\n// Set on a controller instance once it has gotten past element.ready and is\n// being attached, so detachController knows not to run detach() on a controller\n// whose attach() was aborted before it ever ran.\nexport const CONTROLLER_ATTACHED = getSymbol('controller-attached');\nexport const PROPERTY_DEFINERS = getSymbol('property-definers');\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"symbols.esm.js","sources":["../src/global.ts","../src/symbols.ts"],"sourcesContent":["// Global namespace for Snice framework\n// Ensures all registries and symbols are shared across different JS files/modules\n\nimport { SniceGlobal } from './types/snice-global';\n\n\n// Initialize the global Snice namespace on globalThis\n// This ensures all module instances share the same registry\nif (!(globalThis as any).snice) {\n (globalThis as any).snice = {\n controllerRegistry: new Map(),\n pendingControllerAttachments: new Map(),\n controllerIdCounter: 0\n };\n}\n\n// Multiple copies of Snice can share a global created by an older build.\n(globalThis as any).snice.pendingControllerAttachments ??= new Map();\n\n// Export direct reference to globalThis.snice\nexport const snice: SniceGlobal = (globalThis as any).snice;\n\n// Helper function to get or create a global symbol\n// Symbol.for() already guarantees global uniqueness, no need for a Map cache\nexport function getSymbol(name: string): symbol {\n return Symbol.for(`snice:${name}`);\n}\n","// Central file for all symbols used in the framework\n// All symbols are stored globally to ensure consistency across modules\n\nimport { getSymbol } from './global';\n\nexport { getSymbol };\n\nexport const IS_CONTROLLER_CLASS = getSymbol('is-controller-class');\nexport const IS_CONTROLLER_INSTANCE = getSymbol('is-controller-instance');\nexport const IS_DAEMON_CLASS = getSymbol('is-daemon-class');\nexport const IS_DAEMON_INSTANCE = getSymbol('is-daemon-instance');\nexport const IS_ELEMENT_CLASS = getSymbol('is-element-class');\nexport const CHANNEL_HANDLERS = getSymbol('channel-handlers');\n\n// Per-instance daemon communication state. Daemon instances are constructed by\n// application code; Snice only creates and manages their private EventTarget\n// when an app context explicitly provides them.\nexport const DAEMON_STATE = getSymbol('daemon-state');\n\n// Internal element state symbols\nexport const READY_PROMISE = getSymbol('ready-promise');\nexport const READY_RESOLVE = getSymbol('ready-resolve');\nexport const RENDERED_PROMISE = getSymbol('rendered-promise');\nexport const RENDERED_RESOLVE = getSymbol('rendered-resolve');\n// Set when a render is requested but dropped because the element was\n// disconnected; consumed on reconnect to replay exactly the missed render.\nexport const PENDING_RECONNECT_RENDER = getSymbol('pending-reconnect-render');\n// Per-element synchronous render-nesting depth, used to cap runaway re-entry\n// without a shared global counter that one element could exhaust for others.\nexport const RENDER_DEPTH = getSymbol('render-depth');\nexport const RENDER_ROOT = getSymbol('render-root');\nexport const ELEMENT_OPTIONS = getSymbol('element-options');\nexport const CONTROLLER = getSymbol('controller');\nexport const INITIALIZED = getSymbol('initialized');\n\n// Event handler symbols\nexport const ON_HANDLERS = getSymbol('on-handlers');\n\n// Controller symbols\nexport const CONTROLLER_KEY = getSymbol('controller-key');\nexport const CONTROLLER_NAME_KEY = getSymbol('controller-name');\nexport const CONTROLLER_ID = getSymbol('controller-id');\nexport const CONTROLLER_OPERATIONS = getSymbol('controller-operations');\nexport const NATIVE_CONTROLLER = getSymbol('native-controller');\n// Set while a controller CLASS (not a registry name) is attached — the\n// attribute/MutationObserver channel must not attach over or detach it.\nexport const DIRECT_CONTROLLER = getSymbol('direct-controller');\n// A controller class bound by a template before the custom element was\n// defined/upgraded. Picked up by connectedCallback on first initialization.\nexport const PENDING_CONTROLLER_BINDING = getSymbol('pending-controller-binding');\n\n// Cleanup symbol - holds an object with all cleanup arrays\nexport const CLEANUP = getSymbol('cleanup');\n\n// Property symbols\nexport const PROPERTIES = getSymbol('properties');\nexport const PROPERTY_VALUES = getSymbol('property-values');\nexport const PROPERTY_DEFAULTS = getSymbol('property-defaults');\nexport const PROPERTY_WRAPPERS = getSymbol('property-wrappers');\nexport const PRE_INIT_PROPERTY_VALUES = getSymbol('pre-init-property-values');\nexport const PRE_UPGRADE_PROPERTY_BINDINGS = getSymbol('pre-upgrade-property-bindings');\nexport const PROPERTIES_INITIALIZED = getSymbol('properties-initialized');\nexport const PROPERTY_WATCHERS = getSymbol('property-watchers');\nexport const EXPLICITLY_SET_PROPERTIES = getSymbol('explicitly-set-properties');\n\n// Router context symbol\nexport const ROUTER_CONTEXT = getSymbol('router-context');\nexport const CURRENT_PAGE_MARKER = getSymbol('current-page-marker');\nexport const CONTEXT_REQUEST_HANDLER = getSymbol('context-request-handler');\nexport const PAGE_TRANSITION = getSymbol('page-transition');\nexport const CREATED_AT = getSymbol('created-at');\n\n// Lifecycle symbols\nexport const READY_HANDLERS = getSymbol('ready-handlers');\nexport const DISPOSE_HANDLERS = getSymbol('dispose-handlers');\nexport const RECONNECT_HANDLERS = getSymbol('reconnect-handlers');\nexport const MOVED_HANDLERS = getSymbol('moved-handlers');\nexport const ADOPTED_HANDLERS = getSymbol('adopted-handlers');\n\n// Observer symbols\nexport const OBSERVERS = getSymbol('observers');\n\n// Part symbols\nexport const PARTS = getSymbol('parts');\nexport const PART_TIMERS = getSymbol('part-timers');\n\n// Property setter flag (prevents attributeChangedCallback re-triggering watchers)\nexport const SETTING_FROM_PROPERTY = getSymbol('setting-from-property');\n\n// Lifecycle callback timers\nexport const MOVED_TIMERS = getSymbol('moved-timers');\nexport const ADOPTED_TIMERS = getSymbol('adopted-timers');\n\n// Dispatch timing symbols\nexport const DISPATCH_TIMERS = getSymbol('dispatch-timers');\n\n// Render symbols (v3.0.0)\nexport const RENDER_METHOD = getSymbol('render-method');\nexport const RENDER_OPTIONS = getSymbol('render-options');\nexport const RENDER_INSTANCE = getSymbol('render-instance');\nexport const RENDER_TIMERS = getSymbol('render-timers');\nexport const RENDER_CALLBACKS = getSymbol('render-callbacks');\nexport const STYLES_METHOD = getSymbol('styles-method');\nexport const STYLES_APPLIED = getSymbol('styles-applied');\nexport const PARENT_STYLES_METHODS = getSymbol('parent-styles-methods');\nexport const SNICE_ELEMENT_BASE = getSymbol('snice-element-base');\n\n// Navigation context symbols\nexport const CONTEXT_HANDLER = getSymbol('context-handler');\nexport const CONTEXT_METHOD_NAME = getSymbol('context-method-name');\nexport const NAVIGATION_CONTEXT_INSTANCE = getSymbol('navigation-context-instance');\nexport const REGISTERED_ELEMENTS = getSymbol('registered-elements');\nexport const IS_UPDATING = getSymbol('is-updating');\nexport const CONTEXT_REGISTER = getSymbol('context-register');\nexport const CONTEXT_UNREGISTER = getSymbol('context-unregister');\nexport const CONTEXT_NOTIFY_ELEMENT = getSymbol('context-notify-element');\nexport const CONTEXT_OPTIONS = getSymbol('context-options');\nexport const CONTEXT_TIMER = getSymbol('context-timer');\nexport const CONTEXT_CALLED = getSymbol('context-called');\nexport const CONTEXT_UPDATE = getSymbol('context-update');\n\n// Registration de-dup sets on the constructor — replace previous `__*Methods`\n// expando strings that violated the no-double-underscore rule.\nexport const CONTEXT_METHODS = getSymbol('context-methods');\nexport const WATCH_METHODS = getSymbol('watch-methods');\nexport const OBSERVE_METHODS = getSymbol('observe-methods');\nexport const ON_METHODS = getSymbol('on-methods');\nexport const RESPOND_METHODS = getSymbol('respond-methods');\nexport const READY_METHODS = getSymbol('ready-methods');\nexport const DISPOSE_METHODS = getSymbol('dispose-methods');\nexport const RECONNECT_METHODS = getSymbol('reconnect-methods');\nexport const MOVED_METHODS = getSymbol('moved-methods');\nexport const ADOPTED_METHODS = getSymbol('adopted-methods');\n\n// Controller attach-abort — set to an AbortController while attachController\n// is awaiting element.ready, so detachController can short-circuit the wait.\nexport const CONTROLLER_ABORT = getSymbol('controller-abort');\n// Set on a controller instance once it has gotten past element.ready and is\n// being attached, so detachController knows not to run detach() on a controller\n// whose attach() was aborted before it ever ran.\nexport const CONTROLLER_ATTACHED = getSymbol('controller-attached');\nexport const PROPERTY_DEFINERS = getSymbol('property-definers');\n"],"names":[],"mappings":"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"}
package/dist/testing.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export * from './index';
2
2
  export { registerControllerCleanup, getControllerScope, attachController, detachController, getController, cleanupNativeElementControllers } from './controller';
3
- export { CONTROLLER_KEY, CONTROLLER_OPERATIONS, CONTROLLER_NAME_KEY, CONTROLLER_ID, PROPERTIES_INITIALIZED, PROPERTY_VALUES, PROPERTY_WATCHERS, EXPLICITLY_SET_PROPERTIES, READY_PROMISE, READY_RESOLVE, READY_HANDLERS, DISPOSE_HANDLERS, PARTS, PART_TIMERS, ROUTER_CONTEXT, CONTEXT_REQUEST_HANDLER, PAGE_TRANSITION, CREATED_AT, IS_ELEMENT_CLASS, IS_CONTROLLER_CLASS, IS_CONTROLLER_INSTANCE, NATIVE_CONTROLLER, DIRECT_CONTROLLER, PENDING_CONTROLLER_BINDING, CLEANUP, ON_HANDLERS, DISPATCH_TIMERS, CHANNEL_HANDLERS, OBSERVERS } from './symbols';
3
+ export { CONTROLLER_KEY, CONTROLLER_OPERATIONS, CONTROLLER_NAME_KEY, CONTROLLER_ID, PROPERTIES_INITIALIZED, PROPERTY_VALUES, PROPERTY_WATCHERS, EXPLICITLY_SET_PROPERTIES, READY_PROMISE, READY_RESOLVE, READY_HANDLERS, DISPOSE_HANDLERS, PARTS, PART_TIMERS, ROUTER_CONTEXT, CONTEXT_REQUEST_HANDLER, PAGE_TRANSITION, CREATED_AT, IS_ELEMENT_CLASS, IS_CONTROLLER_CLASS, IS_CONTROLLER_INSTANCE, IS_DAEMON_CLASS, IS_DAEMON_INSTANCE, DAEMON_STATE, NATIVE_CONTROLLER, DIRECT_CONTROLLER, PENDING_CONTROLLER_BINDING, CLEANUP, ON_HANDLERS, DISPATCH_TIMERS, CHANNEL_HANDLERS, OBSERVERS } from './symbols';
4
4
  export { parseAttributeValue, detectType } from './utils';
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * snice v7.0.1
3
- * A decorator-driven web component library with differential rendering, routing, controllers, and 130+ ready-made UI components. Use as much or as little as you want. Zero dependencies, works anywhere.
2
+ * snice v7.0.3
3
+ * A decorator-driven web component library with routing, controllers, daemons, and 130+ UI components. For better coding-agent results, run npx snice init-ai.
4
4
  * (c) 2024
5
5
  * Released under the MIT License.
6
6
  *
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * snice v7.0.1
3
- * A decorator-driven web component library with differential rendering, routing, controllers, and 130+ ready-made UI components. Use as much or as little as you want. Zero dependencies, works anywhere.
2
+ * snice v7.0.3
3
+ * A decorator-driven web component library with routing, controllers, daemons, and 130+ UI components. For better coding-agent results, run npx snice init-ai.
4
4
  * (c) 2024
5
5
  * Released under the MIT License.
6
6
  *
@@ -1,9 +1,10 @@
1
+ import type { DaemonMap } from './daemon';
1
2
  /**
2
- * Application context interface for cross-cutting concerns.
3
+ * Application context visible to the framework.
3
4
  *
4
- * This interface defines common application-wide state and services
5
- * that components, pages, and guards may need to access. All properties
6
- * are optional, allowing applications to implement only what they need.
5
+ * Snice only assigns meaning to `daemons`. Other application state remains
6
+ * deliberately unknown until an application extends this interface or narrows
7
+ * it to its own context type.
7
8
  *
8
9
  * Applications can extend this interface to add their own context properties:
9
10
  *
@@ -23,59 +24,9 @@
23
24
  */
24
25
  export interface AppContext {
25
26
  /**
26
- * Theme management and styling context.
27
- * Typically handles dark/light mode, custom themes, and design tokens.
28
- *
29
- * @example
30
- * ```typescript
31
- * theme: {
32
- * current: 'dark',
33
- * setTheme: (theme: string) => void,
34
- * isDarkMode: () => boolean
35
- * }
36
- * ```
27
+ * Explicitly constructed daemon instances addressable by elements and
28
+ * controllers through the communication decorators.
37
29
  */
38
- theme?: any;
39
- /**
40
- * Internationalization and localization context.
41
- * Handles language switching, translations, and regional formatting.
42
- *
43
- * @example
44
- * ```typescript
45
- * locale: {
46
- * current: 'en-US',
47
- * setLocale: (locale: string) => void,
48
- * t: (key: string) => string
49
- * }
50
- * ```
51
- */
52
- locale?: any;
53
- /**
54
- * Authentication and authorization context.
55
- * Contains user information, roles, permissions, and auth state.
56
- *
57
- * @example
58
- * ```typescript
59
- * principal: {
60
- * user: { id: 1, name: 'John', role: 'admin' },
61
- * isAuthenticated: () => boolean,
62
- * hasRole: (role: string) => boolean
63
- * }
64
- * ```
65
- */
66
- principal?: any;
67
- /**
68
- * Application configuration and settings.
69
- * Runtime configuration, feature flags, API endpoints, etc.
70
- *
71
- * @example
72
- * ```typescript
73
- * config: {
74
- * apiUrl: 'https://api.example.com',
75
- * featureFlags: { newUI: true },
76
- * get: (key: string) => any
77
- * }
78
- * ```
79
- */
80
- config?: any;
30
+ readonly daemons?: DaemonMap;
31
+ [key: string]: unknown;
81
32
  }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Named daemon instances exposed by an application context.
3
+ *
4
+ * The values remain structurally typed as objects because TypeScript cannot
5
+ * express "an instance of a class carrying the @daemon decorator". Snice
6
+ * validates the decorator marker when the context is provided.
7
+ */
8
+ export type DaemonMap = Readonly<Record<string, object>>;
@@ -14,4 +14,6 @@ export interface DispatchOptions extends EventInit {
14
14
  * (via `closest()`), a direct EventTarget, or a resolver function.
15
15
  */
16
16
  scope?: OnScope;
17
+ /** Named daemon from the nearest application context. Mutually exclusive with `scope`. */
18
+ daemon?: string;
17
19
  }
@@ -19,6 +19,7 @@ export * from './observe-options';
19
19
  export * from './request-options';
20
20
  export * from './respond-options';
21
21
  export * from './snice-global';
22
+ export * from './daemon';
22
23
  export * from './placard';
23
24
  export * from './guard';
24
25
  export * from './route-params';
@@ -29,4 +29,9 @@ export interface OnOptions {
29
29
  * (via `closest()`), a direct EventTarget, or a resolver function.
30
30
  */
31
31
  scope?: OnScope;
32
+ /**
33
+ * Named daemon from the nearest application context. Mutually exclusive
34
+ * with `scope`; daemon listeners do not support DOM selector delegation.
35
+ */
36
+ daemon?: string;
32
37
  }
@@ -1,4 +1,6 @@
1
1
  export interface RequestOptions extends EventInit {
2
+ /** Named daemon from the nearest application context. */
3
+ daemon?: string;
2
4
  /**
3
5
  * Timeout for waiting for responses (in ms) - defaults to 120000ms (2 minutes)
4
6
  */
@@ -1,4 +1,6 @@
1
1
  export interface RespondOptions {
2
+ /** Named daemon from the nearest application context. */
3
+ daemon?: string;
2
4
  /**
3
5
  * Debounce the response by specified milliseconds
4
6
  */
@@ -44,6 +44,7 @@ npm run test:browsers:install # Install Chromium + Firefox + WebKit
44
44
  npm run test:browser:framework # Required framework/table E2E in all 3 engines
45
45
  npm run test:browser:website # Generated deployment E2E in all 3 engines
46
46
  npm run test:browser # Both browser gates
47
+ npm run gauntlet # Blind local-model checker gauntlet
47
48
  ```
48
49
 
49
50
  `npm test` is intentionally comprehensive. Core coverage is measured across
@@ -51,6 +52,19 @@ npm run test:browser # Both browser gates
51
52
  `repeat.ts`, `snice-element.ts`, and `template.ts`; every aggregate metric must
52
53
  be strictly greater than 90%. Browser commands manage their own local servers.
53
54
 
55
+ ## Dumb-Agent Gauntlet
56
+
57
+ Internal checker hardening: `npm run gauntlet` uses the comprehensive multi-file
58
+ application sample. Focused probes remain available with
59
+ `--sample daemon|events|request-response|router`.
60
+
61
+ - Inline prompt: `--prompt "..."`; file prompt: `--prompt-file path`.
62
+ - Subset: `--models qwen3-0.6b,lfm2.5-350m`; default: all.
63
+ - Auto-downloads pinned llama.cpp + size/SHA-256-pinned GGUFs into `.local/`.
64
+ - Produces blind raw output plus checker, TypeScript, and Vite logs per model.
65
+ - No token/time cap; exact-output repetition is preserved and classified.
66
+ - Full workflow/classification rules: `.ai/gauntlet.md`.
67
+
54
68
  ## File Structure
55
69
 
56
70
  ```
@@ -126,7 +140,7 @@ All CDN builds use the shared runtime (external `snice` imports). Load `snice-ru
126
140
  - IIFE: `.js` + `.min.js`
127
141
  - Sourcemaps + README
128
142
 
129
- **Size:** Runtime ~29KB gzip, components ~1-107KB each
143
+ **Size:** Runtime ~31KB gzip, components ~1-110KB each
130
144
 
131
145
  **Features:**
132
146
  - Shared runtime (external snice imports)
package/docs/ai/README.md CHANGED
@@ -41,6 +41,7 @@ for depth; read the aggregates when you want the whole surface at once.
41
41
  - `bindings.md` - Exact node, attribute, property, event, class, style, spread, controller, sentinel, and form semantics
42
42
  - `events.md` - Template event syntax, `@on`, `@dispatch`, delegation, keyboard filters
43
43
  - `controllers.md` - Attaching by class or registry name, lifecycle, cleanup
44
+ - `daemons.md` - Explicit app-context daemon instances and communication
44
45
  - `routing.md` - Router setup, pages, params, navigation
45
46
  - `guards-and-layouts.md` - Route guards, layouts, page transitions
46
47
 
@@ -104,6 +105,9 @@ Runtime first, then one bundle per component (any order after runtime):
104
105
  - Elements receive data via properties, emit events for actions
105
106
  - **Pages orchestrate** - handle routing, call APIs, coordinate elements
106
107
  - **Controllers add behavior** - attach to elements for reusable non-visual logic; bind by class in templates (`controller=${MyController}`, preferred) or by name in raw HTML (`controller="name"`)
108
+ - **Daemons hold app-owned state/lifecycle** - construct explicitly, provide through `context.daemons`, communicate by address without importing implementations
109
+ - Conventional folders: `src/pages`, `src/components`, `src/controllers`, `src/daemons`; construct the Router in `src/router.ts` and initialize it from `src/main.ts`
110
+ - Several server/storage/timer operations in one page, or substantial logic copied across pages, belongs in a controller; `snice check` suggests the extraction conservatively
107
111
  - Put API calls in pages/controllers/services, not in elements
108
112
 
109
113
  **Properties:**
@@ -198,7 +202,7 @@ class MyCounter extends HTMLElement {
198
202
  - Factory: `const hasRole = (role) => (ctx, params) => ctx.user?.role === role`
199
203
 
200
204
  **Custom AppContext Types:**
201
- - Snice's `AppContext` interface has: `theme?`, `locale?`, `principal?`, `config?`
205
+ - Snice assigns meaning only to `AppContext.daemons?`; other keys are `unknown`
202
206
  - For custom fields (like `user`), extend snice's AppContext:
203
207
  ```typescript
204
208
  import type { AppContext as SniceAppContext } from 'snice';