snice 7.1.0 → 7.1.1

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 (177) hide show
  1. package/README.md +5 -0
  2. package/adapters/react/SniceProvider.js +1 -1
  3. package/adapters/react/SniceRouter.js +1 -1
  4. package/adapters/react/matchRoute.js +1 -1
  5. package/adapters/react/useRequestHandler.js +1 -1
  6. package/dist/cdn/accordion/snice-accordion.js +1 -1
  7. package/dist/cdn/action-bar/snice-action-bar.js +1 -1
  8. package/dist/cdn/activity-feed/snice-activity-feed.js +1 -1
  9. package/dist/cdn/alert/snice-alert.js +1 -1
  10. package/dist/cdn/app-tiles/snice-app-tiles.js +1 -1
  11. package/dist/cdn/approval-flow/snice-approval-flow.js +1 -1
  12. package/dist/cdn/audio-recorder/snice-audio-recorder.js +1 -1
  13. package/dist/cdn/availability/snice-availability.js +1 -1
  14. package/dist/cdn/avatar/snice-avatar.js +1 -1
  15. package/dist/cdn/avatar-group/snice-avatar-group.js +1 -1
  16. package/dist/cdn/badge/snice-badge.js +1 -1
  17. package/dist/cdn/banner/snice-banner.js +1 -1
  18. package/dist/cdn/binpack/snice-binpack.js +1 -1
  19. package/dist/cdn/book/snice-book.js +1 -1
  20. package/dist/cdn/booking/snice-booking.js +1 -1
  21. package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +1 -1
  22. package/dist/cdn/button/snice-button.js +1 -1
  23. package/dist/cdn/calendar/snice-calendar.js +1 -1
  24. package/dist/cdn/camera/snice-camera.js +1 -1
  25. package/dist/cdn/camera-annotate/snice-camera-annotate.js +1 -1
  26. package/dist/cdn/candlestick/snice-candlestick.js +1 -1
  27. package/dist/cdn/card/snice-card.js +1 -1
  28. package/dist/cdn/carousel/snice-carousel.js +1 -1
  29. package/dist/cdn/cart/snice-cart.js +1 -1
  30. package/dist/cdn/chart/snice-chart.js +1 -1
  31. package/dist/cdn/chat/snice-chat.js +1 -1
  32. package/dist/cdn/checkbox/snice-checkbox.js +1 -1
  33. package/dist/cdn/chip/snice-chip.js +1 -1
  34. package/dist/cdn/code-block/snice-code-block.js +1 -1
  35. package/dist/cdn/color-display/snice-color-display.js +1 -1
  36. package/dist/cdn/color-picker/snice-color-picker.js +1 -1
  37. package/dist/cdn/command-palette/snice-command-palette.js +1 -1
  38. package/dist/cdn/comments/snice-comments.js +1 -1
  39. package/dist/cdn/countdown/snice-countdown.js +1 -1
  40. package/dist/cdn/cropper/snice-cropper.js +1 -1
  41. package/dist/cdn/data-card/snice-data-card.js +1 -1
  42. package/dist/cdn/date-picker/snice-date-picker.js +1 -1
  43. package/dist/cdn/date-range-picker/snice-date-range-picker.js +1 -1
  44. package/dist/cdn/date-time-picker/snice-date-time-picker.js +1 -1
  45. package/dist/cdn/diff/snice-diff.js +1 -1
  46. package/dist/cdn/divider/snice-divider.js +1 -1
  47. package/dist/cdn/doc/snice-doc.js +1 -1
  48. package/dist/cdn/draw/snice-draw.js +1 -1
  49. package/dist/cdn/drawer/snice-drawer.js +1 -1
  50. package/dist/cdn/empty-state/snice-empty-state.js +1 -1
  51. package/dist/cdn/estimate/snice-estimate.js +1 -1
  52. package/dist/cdn/file-gallery/snice-file-gallery.js +1 -1
  53. package/dist/cdn/file-upload/snice-file-upload.js +1 -1
  54. package/dist/cdn/flip-card/snice-flip-card.js +1 -1
  55. package/dist/cdn/flow/snice-flow.js +1 -1
  56. package/dist/cdn/form-layout/snice-form-layout.js +1 -1
  57. package/dist/cdn/funnel/snice-funnel.js +1 -1
  58. package/dist/cdn/gantt/snice-gantt.js +1 -1
  59. package/dist/cdn/gauge/snice-gauge.js +1 -1
  60. package/dist/cdn/grid/snice-grid.js +1 -1
  61. package/dist/cdn/heatmap/snice-heatmap.js +1 -1
  62. package/dist/cdn/image/snice-image.js +1 -1
  63. package/dist/cdn/input/snice-input.js +1 -1
  64. package/dist/cdn/invoice/snice-invoice.js +1 -1
  65. package/dist/cdn/kanban/snice-kanban.js +1 -1
  66. package/dist/cdn/key-value/snice-key-value.js +1 -1
  67. package/dist/cdn/kpi/snice-kpi.js +1 -1
  68. package/dist/cdn/layout/snice-layout.js +1 -1
  69. package/dist/cdn/leaderboard/snice-leaderboard.js +1 -1
  70. package/dist/cdn/link/snice-link.js +1 -1
  71. package/dist/cdn/link-preview/snice-link-preview.js +1 -1
  72. package/dist/cdn/list/snice-list.js +1 -1
  73. package/dist/cdn/location/snice-location.js +1 -1
  74. package/dist/cdn/login/snice-login.js +1 -1
  75. package/dist/cdn/map/snice-map.js +1 -1
  76. package/dist/cdn/markdown/snice-markdown.js +1 -1
  77. package/dist/cdn/masonry/snice-masonry.js +1 -1
  78. package/dist/cdn/menu/snice-menu.js +1 -1
  79. package/dist/cdn/message-strip/snice-message-strip.js +1 -1
  80. package/dist/cdn/modal/snice-modal.js +1 -1
  81. package/dist/cdn/music-player/snice-music-player.js +1 -1
  82. package/dist/cdn/nav/snice-nav.js +1 -1
  83. package/dist/cdn/network-graph/snice-network-graph.js +1 -1
  84. package/dist/cdn/notification-center/snice-notification-center.js +1 -1
  85. package/dist/cdn/order-tracker/snice-order-tracker.js +1 -1
  86. package/dist/cdn/org-chart/snice-org-chart.js +1 -1
  87. package/dist/cdn/pagination/snice-pagination.js +1 -1
  88. package/dist/cdn/paint/snice-paint.js +1 -1
  89. package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +1 -1
  90. package/dist/cdn/permission-matrix/snice-permission-matrix.js +1 -1
  91. package/dist/cdn/podcast-player/snice-podcast-player.js +1 -1
  92. package/dist/cdn/popover/snice-popover.js +1 -1
  93. package/dist/cdn/pricing-table/snice-pricing-table.js +1 -1
  94. package/dist/cdn/product-card/snice-product-card.js +1 -1
  95. package/dist/cdn/progress/snice-progress.js +1 -1
  96. package/dist/cdn/progress-ring/snice-progress-ring.js +1 -1
  97. package/dist/cdn/qr-code/snice-qr-code.js +1 -1
  98. package/dist/cdn/qr-reader/snice-qr-reader.js +1 -1
  99. package/dist/cdn/radio/snice-radio.js +1 -1
  100. package/dist/cdn/range-slider/snice-range-slider.js +1 -1
  101. package/dist/cdn/rating/snice-rating.js +1 -1
  102. package/dist/cdn/receipt/snice-receipt.js +1 -1
  103. package/dist/cdn/recipe/snice-recipe.js +1 -1
  104. package/dist/cdn/runtime/README.md +2 -2
  105. package/dist/cdn/runtime/snice-runtime.esm.js +114 -15
  106. package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
  107. package/dist/cdn/runtime/snice-runtime.esm.min.js +1 -1
  108. package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
  109. package/dist/cdn/runtime/snice-runtime.js +114 -15
  110. package/dist/cdn/runtime/snice-runtime.js.map +1 -1
  111. package/dist/cdn/runtime/snice-runtime.min.js +1 -1
  112. package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
  113. package/dist/cdn/sankey/snice-sankey.js +1 -1
  114. package/dist/cdn/segmented-control/snice-segmented-control.js +1 -1
  115. package/dist/cdn/select/snice-select.js +1 -1
  116. package/dist/cdn/skeleton/snice-skeleton.js +1 -1
  117. package/dist/cdn/slider/snice-slider.js +1 -1
  118. package/dist/cdn/sortable/snice-sortable.js +1 -1
  119. package/dist/cdn/sparkline/snice-sparkline.js +1 -1
  120. package/dist/cdn/spinner/snice-spinner.js +1 -1
  121. package/dist/cdn/split-button/snice-split-button.js +1 -1
  122. package/dist/cdn/split-pane/snice-split-pane.js +1 -1
  123. package/dist/cdn/spotlight/snice-spotlight.js +1 -1
  124. package/dist/cdn/stat-group/snice-stat-group.js +1 -1
  125. package/dist/cdn/step-input/snice-step-input.js +1 -1
  126. package/dist/cdn/stepper/snice-stepper.js +1 -1
  127. package/dist/cdn/switch/snice-switch.js +1 -1
  128. package/dist/cdn/table/snice-table.esm.js +1 -1
  129. package/dist/cdn/table/snice-table.js +1 -1
  130. package/dist/cdn/tabs/snice-tabs.js +1 -1
  131. package/dist/cdn/tag/snice-tag.js +1 -1
  132. package/dist/cdn/tag-input/snice-tag-input.js +1 -1
  133. package/dist/cdn/terminal/snice-terminal.js +1 -1
  134. package/dist/cdn/testimonial/snice-testimonial.js +1 -1
  135. package/dist/cdn/textarea/snice-textarea.js +1 -1
  136. package/dist/cdn/time-picker/snice-time-picker.js +1 -1
  137. package/dist/cdn/time-range-picker/snice-time-range-picker.js +1 -1
  138. package/dist/cdn/timeline/snice-timeline.js +1 -1
  139. package/dist/cdn/timer/snice-timer.js +1 -1
  140. package/dist/cdn/toast/snice-toast.js +1 -1
  141. package/dist/cdn/tooltip/snice-tooltip.js +1 -1
  142. package/dist/cdn/tree/snice-tree.js +1 -1
  143. package/dist/cdn/treemap/snice-treemap.js +1 -1
  144. package/dist/cdn/user-card/snice-user-card.js +1 -1
  145. package/dist/cdn/video-player/snice-video-player.js +1 -1
  146. package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +1 -1
  147. package/dist/cdn/waterfall/snice-waterfall.js +1 -1
  148. package/dist/cdn/weather/snice-weather.js +1 -1
  149. package/dist/cdn/work-order/snice-work-order.js +1 -1
  150. package/dist/controller.d.ts +5 -0
  151. package/dist/index.cjs +111 -12
  152. package/dist/index.cjs.map +1 -1
  153. package/dist/index.esm.js +111 -12
  154. package/dist/index.esm.js.map +1 -1
  155. package/dist/index.iife.js +111 -12
  156. package/dist/index.iife.js.map +1 -1
  157. package/dist/parts.d.ts +2 -2
  158. package/dist/react/SniceProvider.js +1 -1
  159. package/dist/react/SniceRouter.js +1 -1
  160. package/dist/react/index.js +1 -1
  161. package/dist/react/matchRoute.js +1 -1
  162. package/dist/react/useRequestHandler.js +1 -1
  163. package/dist/symbols.cjs +9 -1
  164. package/dist/symbols.cjs.map +1 -1
  165. package/dist/symbols.d.ts +2 -0
  166. package/dist/symbols.esm.js +8 -2
  167. package/dist/symbols.esm.js.map +1 -1
  168. package/dist/transitions.cjs +1 -1
  169. package/dist/transitions.esm.js +1 -1
  170. package/docs/ai/architecture.md +1 -1
  171. package/docs/ai/bindings.md +1 -1
  172. package/docs/ai/controllers.md +1 -1
  173. package/docs/ai/decorators.md +1 -1
  174. package/docs/ai/patterns.md +4 -3
  175. package/docs/bindings.md +1 -1
  176. package/docs/controllers.md +8 -2
  177. package/package.json +1 -1
package/dist/parts.d.ts CHANGED
@@ -245,8 +245,8 @@ export declare class PropertyPart extends Part {
245
245
  * Accepts a controller class decorated with @controller (attached directly,
246
246
  * no registry lookup) or a registry name string (delegated to the attribute
247
247
  * channel with the exact semantics of a static controller="name"). While a
248
- * class is bound it owns the element: the attribute/MutationObserver channel
249
- * is inert until the class is unbound.
248
+ * class is bound it owns the element: the decorator name is reflected for
249
+ * inspection, while the attribute/MutationObserver attach channel stays inert.
250
250
  *
251
251
  * Renders commit while the tree is detached and connect afterwards, so
252
252
  * attachment happens on reconnected()/connected commits; every hook is
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * snice v7.0.3
2
+ * snice v7.1.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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * snice v7.0.3
2
+ * snice v7.1.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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * snice v7.0.3
2
+ * snice v7.1.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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * snice v7.0.3
2
+ * snice v7.1.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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * snice v7.0.3
2
+ * snice v7.1.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.
package/dist/symbols.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * snice v7.0.3
2
+ * snice v7.1.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.
@@ -62,9 +62,15 @@ const CONTROLLER_NAME_KEY = getSymbol('controller-name');
62
62
  const CONTROLLER_ID = getSymbol('controller-id');
63
63
  const CONTROLLER_OPERATIONS = getSymbol('controller-operations');
64
64
  const NATIVE_CONTROLLER = getSymbol('native-controller');
65
+ // Decorator name stored on the class so direct class bindings can expose the
66
+ // same useful DOM label without resolving the controller through the registry.
67
+ const CONTROLLER_REGISTRY_NAME = getSymbol('controller-registry-name');
65
68
  // Set while a controller CLASS (not a registry name) is attached — the
66
69
  // attribute/MutationObserver channel must not attach over or detach it.
67
70
  const DIRECT_CONTROLLER = getSymbol('direct-controller');
71
+ // Guards framework-authored diagnostic controller attribute writes from the
72
+ // synchronous custom-element attributeChangedCallback path.
73
+ const CONTROLLER_ATTRIBUTE_SYNC = getSymbol('controller-attribute-sync');
68
74
  // A controller class bound by a template before the custom element was
69
75
  // defined/upgraded. Picked up by connectedCallback on first initialization.
70
76
  const PENDING_CONTROLLER_BINDING = getSymbol('pending-controller-binding');
@@ -167,10 +173,12 @@ exports.CONTEXT_UPDATE = CONTEXT_UPDATE;
167
173
  exports.CONTROLLER = CONTROLLER;
168
174
  exports.CONTROLLER_ABORT = CONTROLLER_ABORT;
169
175
  exports.CONTROLLER_ATTACHED = CONTROLLER_ATTACHED;
176
+ exports.CONTROLLER_ATTRIBUTE_SYNC = CONTROLLER_ATTRIBUTE_SYNC;
170
177
  exports.CONTROLLER_ID = CONTROLLER_ID;
171
178
  exports.CONTROLLER_KEY = CONTROLLER_KEY;
172
179
  exports.CONTROLLER_NAME_KEY = CONTROLLER_NAME_KEY;
173
180
  exports.CONTROLLER_OPERATIONS = CONTROLLER_OPERATIONS;
181
+ exports.CONTROLLER_REGISTRY_NAME = CONTROLLER_REGISTRY_NAME;
174
182
  exports.CREATED_AT = CREATED_AT;
175
183
  exports.CURRENT_PAGE_MARKER = CURRENT_PAGE_MARKER;
176
184
  exports.DAEMON_STATE = DAEMON_STATE;
@@ -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_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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"}
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// Decorator name stored on the class so direct class bindings can expose the\n// same useful DOM label without resolving the controller through the registry.\nexport const CONTROLLER_REGISTRY_NAME = getSymbol('controller-registry-name');\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// Guards framework-authored diagnostic controller attribute writes from the\n// synchronous custom-element attributeChangedCallback path.\nexport const CONTROLLER_ATTRIBUTE_SYNC = getSymbol('controller-attribute-sync');\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
@@ -23,7 +23,9 @@ export declare const CONTROLLER_NAME_KEY: symbol;
23
23
  export declare const CONTROLLER_ID: symbol;
24
24
  export declare const CONTROLLER_OPERATIONS: symbol;
25
25
  export declare const NATIVE_CONTROLLER: symbol;
26
+ export declare const CONTROLLER_REGISTRY_NAME: symbol;
26
27
  export declare const DIRECT_CONTROLLER: symbol;
28
+ export declare const CONTROLLER_ATTRIBUTE_SYNC: symbol;
27
29
  export declare const PENDING_CONTROLLER_BINDING: symbol;
28
30
  export declare const CLEANUP: symbol;
29
31
  export declare const PROPERTIES: symbol;
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * snice v7.0.3
2
+ * snice v7.1.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.
@@ -60,9 +60,15 @@ const CONTROLLER_NAME_KEY = getSymbol('controller-name');
60
60
  const CONTROLLER_ID = getSymbol('controller-id');
61
61
  const CONTROLLER_OPERATIONS = getSymbol('controller-operations');
62
62
  const NATIVE_CONTROLLER = getSymbol('native-controller');
63
+ // Decorator name stored on the class so direct class bindings can expose the
64
+ // same useful DOM label without resolving the controller through the registry.
65
+ const CONTROLLER_REGISTRY_NAME = getSymbol('controller-registry-name');
63
66
  // Set while a controller CLASS (not a registry name) is attached — the
64
67
  // attribute/MutationObserver channel must not attach over or detach it.
65
68
  const DIRECT_CONTROLLER = getSymbol('direct-controller');
69
+ // Guards framework-authored diagnostic controller attribute writes from the
70
+ // synchronous custom-element attributeChangedCallback path.
71
+ const CONTROLLER_ATTRIBUTE_SYNC = getSymbol('controller-attribute-sync');
66
72
  // A controller class bound by a template before the custom element was
67
73
  // defined/upgraded. Picked up by connectedCallback on first initialization.
68
74
  const PENDING_CONTROLLER_BINDING = getSymbol('pending-controller-binding');
@@ -146,5 +152,5 @@ const CONTROLLER_ABORT = getSymbol('controller-abort');
146
152
  const CONTROLLER_ATTACHED = getSymbol('controller-attached');
147
153
  const PROPERTY_DEFINERS = getSymbol('property-definers');
148
154
 
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 };
155
+ 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_ATTRIBUTE_SYNC, CONTROLLER_ID, CONTROLLER_KEY, CONTROLLER_NAME_KEY, CONTROLLER_OPERATIONS, CONTROLLER_REGISTRY_NAME, 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 };
150
156
  //# 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_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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"}
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// Decorator name stored on the class so direct class bindings can expose the\n// same useful DOM label without resolving the controller through the registry.\nexport const CONTROLLER_REGISTRY_NAME = getSymbol('controller-registry-name');\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// Guards framework-authored diagnostic controller attribute writes from the\n// synchronous custom-element attributeChangedCallback path.\nexport const CONTROLLER_ATTRIBUTE_SYNC = getSymbol('controller-attribute-sync');\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,5 +1,5 @@
1
1
  /*!
2
- * snice v7.0.3
2
+ * snice v7.1.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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * snice v7.0.3
2
+ * snice v7.1.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.
@@ -92,7 +92,7 @@ as architecture suggestions, not errors.
92
92
  4. Attach new controller (class refs skip the registry; reference-deduped)
93
93
  5. setupEventHandlers for controller
94
94
  6. On detach: cleanupEventHandlers
95
- - Class bindings own the element: attribute writes ignored while a class is bound
95
+ - Class bindings own the element; their decorator name is reflected as a diagnostic-only `controller="name"` marker
96
96
  - Native elements: class bindings attach via ControllerPart; string attrs via MutationObserver
97
97
 
98
98
  **Daemon lifecycle:**
@@ -59,7 +59,7 @@ Ordinary attributes/comments support multiple expressions. Property, boolean, ev
59
59
 
60
60
  ### Controller `controller=${value}`
61
61
 
62
- - Class decorated with `@controller` (decorator required): attaches directly, registry skipped. Reference-deduped — same class re-render is a no-op; different class or null detaches first. Removes the `controller` attribute; attribute writes ignored while a class is bound.
62
+ - Class decorated with `@controller` (decorator required): attaches directly, registry skipped. Reference-deduped — same class re-render is a no-op; different class or null detaches first. Reflects the decorator name as a read-only diagnostic `controller="name"` marker; the marker never creates a registry attachment.
63
63
  - Works on snice elements AND native elements in templates. Not-yet-upgraded custom elements park the class until connectedCallback.
64
64
  - String: delegates to `setAttribute` — identical to static `controller="name"`. Interpolated `controller="a-${x}"` is plain attribute interpolation, not this channel.
65
65
  - nothing/null/undefined/false/`''`: detach. `noChange`: keep current controller.
@@ -40,7 +40,7 @@ html`<div controller=${UserController}></div>` // native elements work too
40
40
  - `@controller('name')` decorator is still required: registers the class, marks it, flushes pending attachments.
41
41
  - Re-binding the same class reference is a no-op.
42
42
  - Binding a different class (or `null`) detaches the old controller first.
43
- - While a class is bound, the class binding owns the element — `controller` attribute writes are ignored until unbound.
43
+ - While a class is bound, its decorator name is reflected as `controller="name"` for DOM inspection. This is a read-only diagnostic marker, not a registry attachment; the class reference owns the element until unbound.
44
44
 
45
45
  Imperative equivalents:
46
46
 
@@ -3,7 +3,7 @@
3
3
  ## Class
4
4
  - `@element('tag-name', options?)` - Custom element. Options: `{ formAssociated?, renderRoot?: 'shadow'|'light', shadow?: 'open'|'closed'|false, delegatesFocus? }`
5
5
  - `@page({ tag, routes, guards?, placard? })` - Routable page
6
- - `@controller('name')` - Swappable behavior. Required on every controller class. Attach by class (preferred): `controller=${MyController}` in templates, `attachController(el, MyController)`, or `el.controller = MyController`; by string in raw HTML: `controller="name"`
6
+ - `@controller('name')` - Swappable behavior. Required on every controller class. Attach by class (preferred): `controller=${MyController}` in templates, `attachController(el, MyController)`, or `el.controller = MyController`; by string in raw HTML: `controller="name"`. A class attachment reflects this name in the DOM as a diagnostic marker without attaching through the registry.
7
7
  - `@daemon` - Marks an explicitly constructed app-context daemon. No name argument; context key is address. Never constructs/registers globally.
8
8
  - `@layout('tag-name')` - Page wrapper for routing system
9
9
 
@@ -80,9 +80,10 @@ class DataLoader implements IController {
80
80
  ```
81
81
 
82
82
  **Class vs string:** class binding is reference-deduped (re-render no-op, swap
83
- detaches old), removes the `controller` attribute, and owns the element —
84
- attribute writes are ignored while a class is bound. Strings stay fully
85
- supported and behave exactly like the static attribute.
83
+ detaches old) and owns the element. It reflects the decorator name as a
84
+ diagnostic `controller="name"` marker, but that marker does not attach through
85
+ the registry. Strings stay fully supported and behave exactly like the static
86
+ attribute.
86
87
 
87
88
  **Native element controllers** — attach controllers to any HTML element (div, form, table, etc.).
88
89
  Enabled automatically when Snice loads — no setup needed.
package/docs/bindings.md CHANGED
@@ -163,7 +163,7 @@ html`<user-list controller=${DataLoader}></user-list>`;
163
163
  html`<div controller=${DataLoader}></div>`; // native elements too
164
164
  ```
165
165
 
166
- Class values skip the registry and are deduped by reference: re-rendering with the same class is a no-op; a different class (or `null`) detaches the previous controller first. The `@controller('name')` decorator is still required on the class. While a class is bound it owns the element — `controller` attribute writes are ignored and no attribute is reflected. Custom elements that have not upgraded yet hold the class until their `connectedCallback` runs.
166
+ Class values skip the registry and are deduped by reference: re-rendering with the same class is a no-op; a different class (or `null`) detaches the previous controller first. The `@controller('name')` decorator is still required on the class. While a class is bound it owns the element. Snice reflects its decorator name as a diagnostic `controller="name"` attribute for DevTools, but that marker never resolves the registry or creates another attachment; treat it as read-only. Custom elements that have not upgraded yet hold the class until their `connectedCallback` runs.
167
167
 
168
168
  String values delegate to the attribute channel and behave exactly like a static `controller="name"` attribute. Interpolated forms (`controller="user-${kind}"`) are ordinary attribute interpolation, not this channel.
169
169
 
@@ -54,7 +54,14 @@ The `@controller('name')` decorator is still required — it registers the class
54
54
  marks it, and flushes pending attachments. Re-binding the same class reference
55
55
  is a no-op; binding a different class (or `null`) detaches the old controller
56
56
  first. While a class is bound, the class binding owns the element: `controller`
57
- attribute writes are ignored until the class is unbound.
57
+ attribute writes cannot switch it until the class is unbound.
58
+
59
+ For inspection in DevTools, Snice reflects the decorator name as a
60
+ `controller="name"` attribute while the class is attached. This marker is
61
+ diagnostic only: it does not resolve the registry or create a second
62
+ attachment. Treat it as read-only; the class reference remains authoritative.
63
+ Snice removes the marker when the class detaches or replaces it when another
64
+ controller is bound.
58
65
 
59
66
  Imperative equivalents:
60
67
 
@@ -467,4 +474,3 @@ element.addEventListener('controller-attached', (e: CustomEvent) => {
467
474
  ### Auto-Cleanup
468
475
 
469
476
  The framework automatically cleans up `@on` handlers, observers, and `@respond` handlers during detach. Manual cleanup in `detach()` is only needed for resources you manage yourself (WebSockets, intervals, manual event listeners).
470
-
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "snice",
3
- "version": "7.1.0",
3
+ "version": "7.1.1",
4
4
  "type": "module",
5
5
  "description": "A decorator-driven web component library with routing, controllers, daemons, and 130+ UI components. For better coding-agent results, run npx snice init-ai.",
6
6
  "main": "dist/index.cjs",