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.
- package/README.md +5 -0
- package/adapters/react/SniceProvider.js +1 -1
- package/adapters/react/SniceRouter.js +1 -1
- package/adapters/react/matchRoute.js +1 -1
- package/adapters/react/useRequestHandler.js +1 -1
- package/dist/cdn/accordion/snice-accordion.js +1 -1
- package/dist/cdn/action-bar/snice-action-bar.js +1 -1
- package/dist/cdn/activity-feed/snice-activity-feed.js +1 -1
- package/dist/cdn/alert/snice-alert.js +1 -1
- package/dist/cdn/app-tiles/snice-app-tiles.js +1 -1
- package/dist/cdn/approval-flow/snice-approval-flow.js +1 -1
- package/dist/cdn/audio-recorder/snice-audio-recorder.js +1 -1
- package/dist/cdn/availability/snice-availability.js +1 -1
- package/dist/cdn/avatar/snice-avatar.js +1 -1
- package/dist/cdn/avatar-group/snice-avatar-group.js +1 -1
- package/dist/cdn/badge/snice-badge.js +1 -1
- package/dist/cdn/banner/snice-banner.js +1 -1
- package/dist/cdn/binpack/snice-binpack.js +1 -1
- package/dist/cdn/book/snice-book.js +1 -1
- package/dist/cdn/booking/snice-booking.js +1 -1
- package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +1 -1
- package/dist/cdn/button/snice-button.js +1 -1
- package/dist/cdn/calendar/snice-calendar.js +1 -1
- package/dist/cdn/camera/snice-camera.js +1 -1
- package/dist/cdn/camera-annotate/snice-camera-annotate.js +1 -1
- package/dist/cdn/candlestick/snice-candlestick.js +1 -1
- package/dist/cdn/card/snice-card.js +1 -1
- package/dist/cdn/carousel/snice-carousel.js +1 -1
- package/dist/cdn/cart/snice-cart.js +1 -1
- package/dist/cdn/chart/snice-chart.js +1 -1
- package/dist/cdn/chat/snice-chat.js +1 -1
- package/dist/cdn/checkbox/snice-checkbox.js +1 -1
- package/dist/cdn/chip/snice-chip.js +1 -1
- package/dist/cdn/code-block/snice-code-block.js +1 -1
- package/dist/cdn/color-display/snice-color-display.js +1 -1
- package/dist/cdn/color-picker/snice-color-picker.js +1 -1
- package/dist/cdn/command-palette/snice-command-palette.js +1 -1
- package/dist/cdn/comments/snice-comments.js +1 -1
- package/dist/cdn/countdown/snice-countdown.js +1 -1
- package/dist/cdn/cropper/snice-cropper.js +1 -1
- package/dist/cdn/data-card/snice-data-card.js +1 -1
- package/dist/cdn/date-picker/snice-date-picker.js +1 -1
- package/dist/cdn/date-range-picker/snice-date-range-picker.js +1 -1
- package/dist/cdn/date-time-picker/snice-date-time-picker.js +1 -1
- package/dist/cdn/diff/snice-diff.js +1 -1
- package/dist/cdn/divider/snice-divider.js +1 -1
- package/dist/cdn/doc/snice-doc.js +1 -1
- package/dist/cdn/draw/snice-draw.js +1 -1
- package/dist/cdn/drawer/snice-drawer.js +1 -1
- package/dist/cdn/empty-state/snice-empty-state.js +1 -1
- package/dist/cdn/estimate/snice-estimate.js +1 -1
- package/dist/cdn/file-gallery/snice-file-gallery.js +1 -1
- package/dist/cdn/file-upload/snice-file-upload.js +1 -1
- package/dist/cdn/flip-card/snice-flip-card.js +1 -1
- package/dist/cdn/flow/snice-flow.js +1 -1
- package/dist/cdn/form-layout/snice-form-layout.js +1 -1
- package/dist/cdn/funnel/snice-funnel.js +1 -1
- package/dist/cdn/gantt/snice-gantt.js +1 -1
- package/dist/cdn/gauge/snice-gauge.js +1 -1
- package/dist/cdn/grid/snice-grid.js +1 -1
- package/dist/cdn/heatmap/snice-heatmap.js +1 -1
- package/dist/cdn/image/snice-image.js +1 -1
- package/dist/cdn/input/snice-input.js +1 -1
- package/dist/cdn/invoice/snice-invoice.js +1 -1
- package/dist/cdn/kanban/snice-kanban.js +1 -1
- package/dist/cdn/key-value/snice-key-value.js +1 -1
- package/dist/cdn/kpi/snice-kpi.js +1 -1
- package/dist/cdn/layout/snice-layout.js +1 -1
- package/dist/cdn/leaderboard/snice-leaderboard.js +1 -1
- package/dist/cdn/link/snice-link.js +1 -1
- package/dist/cdn/link-preview/snice-link-preview.js +1 -1
- package/dist/cdn/list/snice-list.js +1 -1
- package/dist/cdn/location/snice-location.js +1 -1
- package/dist/cdn/login/snice-login.js +1 -1
- package/dist/cdn/map/snice-map.js +1 -1
- package/dist/cdn/markdown/snice-markdown.js +1 -1
- package/dist/cdn/masonry/snice-masonry.js +1 -1
- package/dist/cdn/menu/snice-menu.js +1 -1
- package/dist/cdn/message-strip/snice-message-strip.js +1 -1
- package/dist/cdn/modal/snice-modal.js +1 -1
- package/dist/cdn/music-player/snice-music-player.js +1 -1
- package/dist/cdn/nav/snice-nav.js +1 -1
- package/dist/cdn/network-graph/snice-network-graph.js +1 -1
- package/dist/cdn/notification-center/snice-notification-center.js +1 -1
- package/dist/cdn/order-tracker/snice-order-tracker.js +1 -1
- package/dist/cdn/org-chart/snice-org-chart.js +1 -1
- package/dist/cdn/pagination/snice-pagination.js +1 -1
- package/dist/cdn/paint/snice-paint.js +1 -1
- package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +1 -1
- package/dist/cdn/permission-matrix/snice-permission-matrix.js +1 -1
- package/dist/cdn/podcast-player/snice-podcast-player.js +1 -1
- package/dist/cdn/popover/snice-popover.js +1 -1
- package/dist/cdn/pricing-table/snice-pricing-table.js +1 -1
- package/dist/cdn/product-card/snice-product-card.js +1 -1
- package/dist/cdn/progress/snice-progress.js +1 -1
- package/dist/cdn/progress-ring/snice-progress-ring.js +1 -1
- package/dist/cdn/qr-code/snice-qr-code.js +1 -1
- package/dist/cdn/qr-reader/snice-qr-reader.js +1 -1
- package/dist/cdn/radio/snice-radio.js +1 -1
- package/dist/cdn/range-slider/snice-range-slider.js +1 -1
- package/dist/cdn/rating/snice-rating.js +1 -1
- package/dist/cdn/receipt/snice-receipt.js +1 -1
- package/dist/cdn/recipe/snice-recipe.js +1 -1
- package/dist/cdn/runtime/README.md +2 -2
- package/dist/cdn/runtime/snice-runtime.esm.js +114 -15
- package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.esm.min.js +1 -1
- package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.js +114 -15
- package/dist/cdn/runtime/snice-runtime.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
- package/dist/cdn/sankey/snice-sankey.js +1 -1
- package/dist/cdn/segmented-control/snice-segmented-control.js +1 -1
- package/dist/cdn/select/snice-select.js +1 -1
- package/dist/cdn/skeleton/snice-skeleton.js +1 -1
- package/dist/cdn/slider/snice-slider.js +1 -1
- package/dist/cdn/sortable/snice-sortable.js +1 -1
- package/dist/cdn/sparkline/snice-sparkline.js +1 -1
- package/dist/cdn/spinner/snice-spinner.js +1 -1
- package/dist/cdn/split-button/snice-split-button.js +1 -1
- package/dist/cdn/split-pane/snice-split-pane.js +1 -1
- package/dist/cdn/spotlight/snice-spotlight.js +1 -1
- package/dist/cdn/stat-group/snice-stat-group.js +1 -1
- package/dist/cdn/step-input/snice-step-input.js +1 -1
- package/dist/cdn/stepper/snice-stepper.js +1 -1
- package/dist/cdn/switch/snice-switch.js +1 -1
- package/dist/cdn/table/snice-table.esm.js +1 -1
- package/dist/cdn/table/snice-table.js +1 -1
- package/dist/cdn/tabs/snice-tabs.js +1 -1
- package/dist/cdn/tag/snice-tag.js +1 -1
- package/dist/cdn/tag-input/snice-tag-input.js +1 -1
- package/dist/cdn/terminal/snice-terminal.js +1 -1
- package/dist/cdn/testimonial/snice-testimonial.js +1 -1
- package/dist/cdn/textarea/snice-textarea.js +1 -1
- package/dist/cdn/time-picker/snice-time-picker.js +1 -1
- package/dist/cdn/time-range-picker/snice-time-range-picker.js +1 -1
- package/dist/cdn/timeline/snice-timeline.js +1 -1
- package/dist/cdn/timer/snice-timer.js +1 -1
- package/dist/cdn/toast/snice-toast.js +1 -1
- package/dist/cdn/tooltip/snice-tooltip.js +1 -1
- package/dist/cdn/tree/snice-tree.js +1 -1
- package/dist/cdn/treemap/snice-treemap.js +1 -1
- package/dist/cdn/user-card/snice-user-card.js +1 -1
- package/dist/cdn/video-player/snice-video-player.js +1 -1
- package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +1 -1
- package/dist/cdn/waterfall/snice-waterfall.js +1 -1
- package/dist/cdn/weather/snice-weather.js +1 -1
- package/dist/cdn/work-order/snice-work-order.js +1 -1
- package/dist/controller.d.ts +5 -0
- package/dist/index.cjs +111 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +111 -12
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +111 -12
- package/dist/index.iife.js.map +1 -1
- package/dist/parts.d.ts +2 -2
- package/dist/react/SniceProvider.js +1 -1
- package/dist/react/SniceRouter.js +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/matchRoute.js +1 -1
- package/dist/react/useRequestHandler.js +1 -1
- package/dist/symbols.cjs +9 -1
- package/dist/symbols.cjs.map +1 -1
- package/dist/symbols.d.ts +2 -0
- package/dist/symbols.esm.js +8 -2
- package/dist/symbols.esm.js.map +1 -1
- package/dist/transitions.cjs +1 -1
- package/dist/transitions.esm.js +1 -1
- package/docs/ai/architecture.md +1 -1
- package/docs/ai/bindings.md +1 -1
- package/docs/ai/controllers.md +1 -1
- package/docs/ai/decorators.md +1 -1
- package/docs/ai/patterns.md +4 -3
- package/docs/bindings.md +1 -1
- package/docs/controllers.md +8 -2
- 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
|
|
249
|
-
*
|
|
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
|
package/dist/react/index.js
CHANGED
package/dist/react/matchRoute.js
CHANGED
package/dist/symbols.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* snice v7.0
|
|
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;
|
package/dist/symbols.cjs.map
CHANGED
|
@@ -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;
|
package/dist/symbols.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* snice v7.0
|
|
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
|
package/dist/symbols.esm.js.map
CHANGED
|
@@ -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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"}
|
package/dist/transitions.cjs
CHANGED
package/dist/transitions.esm.js
CHANGED
package/docs/ai/architecture.md
CHANGED
|
@@ -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
|
|
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:**
|
package/docs/ai/bindings.md
CHANGED
|
@@ -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.
|
|
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.
|
package/docs/ai/controllers.md
CHANGED
|
@@ -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,
|
|
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
|
|
package/docs/ai/decorators.md
CHANGED
|
@@ -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
|
|
package/docs/ai/patterns.md
CHANGED
|
@@ -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)
|
|
84
|
-
|
|
85
|
-
supported and behave exactly like the static
|
|
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
|
|
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
|
|
package/docs/controllers.md
CHANGED
|
@@ -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
|
|
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.
|
|
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",
|