snice 5.0.0 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/bin/templates/default/package.json +1 -1
- package/bin/templates/react/package.json +1 -1
- package/dist/cdn/accordion/snice-accordion.js +1 -1
- package/dist/cdn/accordion/snice-accordion.min.js +1 -1
- package/dist/cdn/action-bar/snice-action-bar.js +1 -1
- package/dist/cdn/action-bar/snice-action-bar.min.js +1 -1
- package/dist/cdn/activity-feed/snice-activity-feed.js +1 -1
- package/dist/cdn/activity-feed/snice-activity-feed.min.js +1 -1
- package/dist/cdn/alert/snice-alert.js +1 -1
- package/dist/cdn/alert/snice-alert.min.js +1 -1
- package/dist/cdn/app-tiles/snice-app-tiles.js +1 -1
- package/dist/cdn/app-tiles/snice-app-tiles.min.js +1 -1
- package/dist/cdn/approval-flow/snice-approval-flow.js +1 -1
- package/dist/cdn/approval-flow/snice-approval-flow.min.js +1 -1
- package/dist/cdn/audio-recorder/snice-audio-recorder.js +1 -1
- package/dist/cdn/audio-recorder/snice-audio-recorder.min.js +1 -1
- package/dist/cdn/availability/snice-availability.js +1 -1
- package/dist/cdn/availability/snice-availability.min.js +1 -1
- package/dist/cdn/avatar/snice-avatar.js +1 -1
- package/dist/cdn/avatar/snice-avatar.min.js +1 -1
- package/dist/cdn/avatar-group/snice-avatar-group.js +1 -1
- package/dist/cdn/avatar-group/snice-avatar-group.min.js +1 -1
- package/dist/cdn/badge/snice-badge.js +1 -1
- package/dist/cdn/badge/snice-badge.min.js +1 -1
- package/dist/cdn/banner/snice-banner.js +1 -1
- package/dist/cdn/banner/snice-banner.min.js +1 -1
- package/dist/cdn/binpack/snice-binpack.js +1 -1
- package/dist/cdn/binpack/snice-binpack.min.js +1 -1
- package/dist/cdn/book/snice-book.js +1 -1
- package/dist/cdn/book/snice-book.min.js +1 -1
- package/dist/cdn/booking/snice-booking.js +1 -1
- package/dist/cdn/booking/snice-booking.min.js +1 -1
- package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +1 -1
- package/dist/cdn/breadcrumbs/snice-breadcrumbs.min.js +1 -1
- package/dist/cdn/button/snice-button.js +1 -1
- package/dist/cdn/button/snice-button.min.js +1 -1
- package/dist/cdn/calendar/snice-calendar.js +1 -1
- package/dist/cdn/calendar/snice-calendar.min.js +1 -1
- package/dist/cdn/camera/snice-camera.js +1 -1
- package/dist/cdn/camera/snice-camera.min.js +1 -1
- package/dist/cdn/camera-annotate/snice-camera-annotate.js +1 -1
- package/dist/cdn/camera-annotate/snice-camera-annotate.min.js +1 -1
- package/dist/cdn/candlestick/snice-candlestick.js +1 -1
- package/dist/cdn/candlestick/snice-candlestick.min.js +1 -1
- package/dist/cdn/card/snice-card.js +1 -1
- package/dist/cdn/card/snice-card.min.js +1 -1
- package/dist/cdn/carousel/snice-carousel.js +1 -1
- package/dist/cdn/carousel/snice-carousel.min.js +1 -1
- package/dist/cdn/cart/snice-cart.js +1 -1
- package/dist/cdn/cart/snice-cart.min.js +1 -1
- package/dist/cdn/chart/snice-chart.js +1 -1
- package/dist/cdn/chart/snice-chart.min.js +1 -1
- package/dist/cdn/chat/snice-chat.js +1 -1
- package/dist/cdn/chat/snice-chat.min.js +1 -1
- package/dist/cdn/checkbox/snice-checkbox.js +1 -1
- package/dist/cdn/checkbox/snice-checkbox.min.js +1 -1
- package/dist/cdn/chip/snice-chip.js +1 -1
- package/dist/cdn/chip/snice-chip.min.js +1 -1
- package/dist/cdn/code-block/snice-code-block.js +1 -1
- package/dist/cdn/code-block/snice-code-block.min.js +1 -1
- package/dist/cdn/color-display/snice-color-display.js +1 -1
- package/dist/cdn/color-display/snice-color-display.min.js +1 -1
- package/dist/cdn/color-picker/snice-color-picker.js +1 -1
- package/dist/cdn/color-picker/snice-color-picker.min.js +1 -1
- package/dist/cdn/command-palette/snice-command-palette.js +1 -1
- package/dist/cdn/command-palette/snice-command-palette.min.js +1 -1
- package/dist/cdn/comments/snice-comments.js +1 -1
- package/dist/cdn/comments/snice-comments.min.js +1 -1
- package/dist/cdn/countdown/snice-countdown.js +1 -1
- package/dist/cdn/countdown/snice-countdown.min.js +1 -1
- package/dist/cdn/cropper/snice-cropper.js +1 -1
- package/dist/cdn/cropper/snice-cropper.min.js +1 -1
- package/dist/cdn/data-card/snice-data-card.js +1 -1
- package/dist/cdn/data-card/snice-data-card.min.js +1 -1
- package/dist/cdn/date-picker/snice-date-picker.js +1 -1
- package/dist/cdn/date-picker/snice-date-picker.min.js +1 -1
- package/dist/cdn/date-range-picker/snice-date-range-picker.js +1 -1
- package/dist/cdn/date-range-picker/snice-date-range-picker.min.js +1 -1
- package/dist/cdn/date-time-picker/snice-date-time-picker.js +1 -1
- package/dist/cdn/date-time-picker/snice-date-time-picker.min.js +1 -1
- package/dist/cdn/diff/snice-diff.js +1 -1
- package/dist/cdn/diff/snice-diff.min.js +1 -1
- package/dist/cdn/divider/snice-divider.js +1 -1
- package/dist/cdn/divider/snice-divider.min.js +1 -1
- package/dist/cdn/doc/snice-doc.js +1 -1
- package/dist/cdn/doc/snice-doc.min.js +1 -1
- package/dist/cdn/draw/snice-draw.js +1 -1
- package/dist/cdn/draw/snice-draw.min.js +1 -1
- package/dist/cdn/drawer/snice-drawer.js +1 -1
- package/dist/cdn/drawer/snice-drawer.min.js +1 -1
- package/dist/cdn/empty-state/snice-empty-state.js +1 -1
- package/dist/cdn/empty-state/snice-empty-state.min.js +1 -1
- package/dist/cdn/estimate/snice-estimate.js +1 -1
- package/dist/cdn/estimate/snice-estimate.min.js +1 -1
- package/dist/cdn/file-gallery/snice-file-gallery.js +1 -1
- package/dist/cdn/file-gallery/snice-file-gallery.min.js +1 -1
- package/dist/cdn/file-upload/snice-file-upload.js +1 -1
- package/dist/cdn/file-upload/snice-file-upload.min.js +1 -1
- package/dist/cdn/flip-card/snice-flip-card.js +1 -1
- package/dist/cdn/flip-card/snice-flip-card.min.js +1 -1
- package/dist/cdn/flow/snice-flow.js +1 -1
- package/dist/cdn/flow/snice-flow.min.js +1 -1
- package/dist/cdn/form-layout/snice-form-layout.js +1 -1
- package/dist/cdn/form-layout/snice-form-layout.min.js +1 -1
- package/dist/cdn/funnel/snice-funnel.js +1 -1
- package/dist/cdn/funnel/snice-funnel.min.js +1 -1
- package/dist/cdn/gantt/snice-gantt.js +1 -1
- package/dist/cdn/gantt/snice-gantt.min.js +1 -1
- package/dist/cdn/gauge/snice-gauge.js +1 -1
- package/dist/cdn/gauge/snice-gauge.min.js +1 -1
- package/dist/cdn/grid/snice-grid.js +1 -1
- package/dist/cdn/grid/snice-grid.min.js +1 -1
- package/dist/cdn/heatmap/snice-heatmap.js +1 -1
- package/dist/cdn/heatmap/snice-heatmap.min.js +1 -1
- package/dist/cdn/image/snice-image.js +1 -1
- package/dist/cdn/image/snice-image.min.js +1 -1
- package/dist/cdn/input/snice-input.js +1 -1
- package/dist/cdn/input/snice-input.min.js +1 -1
- package/dist/cdn/invoice/snice-invoice.js +1 -1
- package/dist/cdn/invoice/snice-invoice.min.js +1 -1
- package/dist/cdn/kanban/snice-kanban.js +1 -1
- package/dist/cdn/kanban/snice-kanban.min.js +1 -1
- package/dist/cdn/key-value/snice-key-value.js +1 -1
- package/dist/cdn/key-value/snice-key-value.min.js +1 -1
- package/dist/cdn/kpi/snice-kpi.js +1 -1
- package/dist/cdn/kpi/snice-kpi.min.js +1 -1
- package/dist/cdn/layout/snice-layout.js +1 -1
- package/dist/cdn/layout/snice-layout.min.js +1 -1
- package/dist/cdn/leaderboard/snice-leaderboard.js +1 -1
- package/dist/cdn/leaderboard/snice-leaderboard.min.js +1 -1
- package/dist/cdn/link/snice-link.js +1 -1
- package/dist/cdn/link/snice-link.min.js +1 -1
- package/dist/cdn/link-preview/snice-link-preview.js +1 -1
- package/dist/cdn/link-preview/snice-link-preview.min.js +1 -1
- package/dist/cdn/list/snice-list.js +1 -1
- package/dist/cdn/list/snice-list.min.js +1 -1
- package/dist/cdn/location/snice-location.js +1 -1
- package/dist/cdn/location/snice-location.min.js +1 -1
- package/dist/cdn/login/snice-login.js +1 -1
- package/dist/cdn/login/snice-login.min.js +1 -1
- package/dist/cdn/map/snice-map.js +1 -1
- package/dist/cdn/map/snice-map.min.js +1 -1
- package/dist/cdn/markdown/snice-markdown.js +1 -1
- package/dist/cdn/markdown/snice-markdown.min.js +1 -1
- package/dist/cdn/masonry/snice-masonry.js +1 -1
- package/dist/cdn/masonry/snice-masonry.min.js +1 -1
- package/dist/cdn/menu/snice-menu.js +1 -1
- package/dist/cdn/menu/snice-menu.min.js +1 -1
- package/dist/cdn/message-strip/snice-message-strip.js +1 -1
- package/dist/cdn/message-strip/snice-message-strip.min.js +1 -1
- package/dist/cdn/metric-table/snice-metric-table.js +1 -1
- package/dist/cdn/metric-table/snice-metric-table.min.js +1 -1
- package/dist/cdn/modal/snice-modal.js +1 -1
- package/dist/cdn/modal/snice-modal.min.js +1 -1
- package/dist/cdn/music-player/snice-music-player.js +1 -1
- package/dist/cdn/music-player/snice-music-player.min.js +1 -1
- package/dist/cdn/nav/snice-nav.js +1 -1
- package/dist/cdn/nav/snice-nav.min.js +1 -1
- package/dist/cdn/network-graph/snice-network-graph.js +1 -1
- package/dist/cdn/network-graph/snice-network-graph.min.js +1 -1
- package/dist/cdn/notification-center/snice-notification-center.js +1 -1
- package/dist/cdn/notification-center/snice-notification-center.min.js +1 -1
- package/dist/cdn/order-tracker/snice-order-tracker.js +1 -1
- package/dist/cdn/order-tracker/snice-order-tracker.min.js +1 -1
- package/dist/cdn/org-chart/snice-org-chart.js +1 -1
- package/dist/cdn/org-chart/snice-org-chart.min.js +1 -1
- package/dist/cdn/pagination/snice-pagination.js +1 -1
- package/dist/cdn/pagination/snice-pagination.min.js +1 -1
- package/dist/cdn/paint/snice-paint.js +1 -1
- package/dist/cdn/paint/snice-paint.min.js +1 -1
- package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +1 -1
- package/dist/cdn/pdf-viewer/snice-pdf-viewer.min.js +1 -1
- package/dist/cdn/permission-matrix/snice-permission-matrix.js +1 -1
- package/dist/cdn/permission-matrix/snice-permission-matrix.min.js +1 -1
- package/dist/cdn/podcast-player/snice-podcast-player.js +1 -1
- package/dist/cdn/podcast-player/snice-podcast-player.min.js +1 -1
- package/dist/cdn/popover/snice-popover.js +1 -1
- package/dist/cdn/popover/snice-popover.min.js +1 -1
- package/dist/cdn/pricing-table/snice-pricing-table.js +1 -1
- package/dist/cdn/pricing-table/snice-pricing-table.min.js +1 -1
- package/dist/cdn/product-card/snice-product-card.js +1 -1
- package/dist/cdn/product-card/snice-product-card.min.js +1 -1
- package/dist/cdn/progress/snice-progress.js +1 -1
- package/dist/cdn/progress/snice-progress.min.js +1 -1
- package/dist/cdn/progress-ring/snice-progress-ring.js +1 -1
- package/dist/cdn/progress-ring/snice-progress-ring.min.js +1 -1
- package/dist/cdn/qr-code/snice-qr-code.js +1 -1
- package/dist/cdn/qr-code/snice-qr-code.min.js +1 -1
- package/dist/cdn/qr-reader/snice-qr-reader.js +1 -1
- package/dist/cdn/qr-reader/snice-qr-reader.min.js +1 -1
- package/dist/cdn/radio/snice-radio.js +1 -1
- package/dist/cdn/radio/snice-radio.min.js +1 -1
- package/dist/cdn/range-slider/snice-range-slider.js +1 -1
- package/dist/cdn/range-slider/snice-range-slider.min.js +1 -1
- package/dist/cdn/rating/snice-rating.js +1 -1
- package/dist/cdn/rating/snice-rating.min.js +1 -1
- package/dist/cdn/receipt/snice-receipt.js +1 -1
- package/dist/cdn/receipt/snice-receipt.min.js +1 -1
- package/dist/cdn/recipe/snice-recipe.js +1 -1
- package/dist/cdn/recipe/snice-recipe.min.js +1 -1
- package/dist/cdn/runtime/README.md +2 -2
- package/dist/cdn/runtime/snice-runtime.esm.js +104 -44
- package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.esm.min.js +8 -8
- package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.js +104 -44
- package/dist/cdn/runtime/snice-runtime.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js +8 -8
- package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
- package/dist/cdn/sankey/snice-sankey.js +1 -1
- package/dist/cdn/sankey/snice-sankey.min.js +1 -1
- package/dist/cdn/segmented-control/snice-segmented-control.js +1 -1
- package/dist/cdn/segmented-control/snice-segmented-control.min.js +1 -1
- package/dist/cdn/select/snice-select.js +1 -1
- package/dist/cdn/select/snice-select.min.js +1 -1
- package/dist/cdn/skeleton/snice-skeleton.js +1 -1
- package/dist/cdn/skeleton/snice-skeleton.min.js +1 -1
- package/dist/cdn/slider/snice-slider.js +1 -1
- package/dist/cdn/slider/snice-slider.min.js +1 -1
- package/dist/cdn/sortable/snice-sortable.js +1 -1
- package/dist/cdn/sortable/snice-sortable.min.js +1 -1
- package/dist/cdn/sparkline/snice-sparkline.js +1 -1
- package/dist/cdn/sparkline/snice-sparkline.min.js +1 -1
- package/dist/cdn/spinner/snice-spinner.js +1 -1
- package/dist/cdn/spinner/snice-spinner.min.js +1 -1
- package/dist/cdn/split-button/snice-split-button.js +1 -1
- package/dist/cdn/split-button/snice-split-button.min.js +1 -1
- package/dist/cdn/split-pane/snice-split-pane.js +1 -1
- package/dist/cdn/split-pane/snice-split-pane.min.js +1 -1
- package/dist/cdn/spotlight/snice-spotlight.js +1 -1
- package/dist/cdn/spotlight/snice-spotlight.min.js +1 -1
- package/dist/cdn/stat-group/snice-stat-group.js +1 -1
- package/dist/cdn/stat-group/snice-stat-group.min.js +1 -1
- package/dist/cdn/step-input/snice-step-input.js +1 -1
- package/dist/cdn/step-input/snice-step-input.min.js +1 -1
- package/dist/cdn/stepper/snice-stepper.js +1 -1
- package/dist/cdn/stepper/snice-stepper.min.js +1 -1
- package/dist/cdn/switch/snice-switch.js +1 -1
- package/dist/cdn/switch/snice-switch.min.js +1 -1
- package/dist/cdn/table/snice-table.js +1 -1
- package/dist/cdn/table/snice-table.min.js +1 -1
- package/dist/cdn/tabs/snice-tabs.js +1 -1
- package/dist/cdn/tabs/snice-tabs.min.js +1 -1
- package/dist/cdn/tag/snice-tag.js +1 -1
- package/dist/cdn/tag/snice-tag.min.js +1 -1
- package/dist/cdn/tag-input/snice-tag-input.js +1 -1
- package/dist/cdn/tag-input/snice-tag-input.min.js +1 -1
- package/dist/cdn/terminal/snice-terminal.js +1 -1
- package/dist/cdn/terminal/snice-terminal.min.js +1 -1
- package/dist/cdn/testimonial/snice-testimonial.js +1 -1
- package/dist/cdn/testimonial/snice-testimonial.min.js +1 -1
- package/dist/cdn/textarea/snice-textarea.js +1 -1
- package/dist/cdn/textarea/snice-textarea.min.js +1 -1
- package/dist/cdn/time-picker/snice-time-picker.js +1 -1
- package/dist/cdn/time-picker/snice-time-picker.min.js +1 -1
- package/dist/cdn/time-range-picker/snice-time-range-picker.js +1 -1
- package/dist/cdn/time-range-picker/snice-time-range-picker.min.js +1 -1
- package/dist/cdn/timeline/snice-timeline.js +1 -1
- package/dist/cdn/timeline/snice-timeline.min.js +1 -1
- package/dist/cdn/timer/snice-timer.js +1 -1
- package/dist/cdn/timer/snice-timer.min.js +1 -1
- package/dist/cdn/toast/snice-toast.js +1 -1
- package/dist/cdn/toast/snice-toast.min.js +1 -1
- package/dist/cdn/tooltip/snice-tooltip.js +1 -1
- package/dist/cdn/tooltip/snice-tooltip.min.js +1 -1
- package/dist/cdn/tree/snice-tree.js +1 -1
- package/dist/cdn/tree/snice-tree.min.js +1 -1
- package/dist/cdn/treemap/snice-treemap.js +1 -1
- package/dist/cdn/treemap/snice-treemap.min.js +1 -1
- package/dist/cdn/user-card/snice-user-card.js +1 -1
- package/dist/cdn/user-card/snice-user-card.min.js +1 -1
- package/dist/cdn/video-player/snice-video-player.js +1 -1
- package/dist/cdn/video-player/snice-video-player.min.js +1 -1
- package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +1 -1
- package/dist/cdn/virtual-scroller/snice-virtual-scroller.min.js +1 -1
- package/dist/cdn/waterfall/snice-waterfall.js +1 -1
- package/dist/cdn/waterfall/snice-waterfall.min.js +1 -1
- package/dist/cdn/weather/snice-weather.js +1 -1
- package/dist/cdn/weather/snice-weather.min.js +1 -1
- package/dist/cdn/work-order/snice-work-order.js +1 -1
- package/dist/cdn/work-order/snice-work-order.min.js +1 -1
- package/dist/context.d.ts +17 -7
- package/dist/index.cjs +101 -41
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +101 -41
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +101 -41
- package/dist/index.iife.js.map +1 -1
- 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 +3 -1
- package/dist/symbols.cjs.map +1 -1
- package/dist/symbols.d.ts +1 -0
- package/dist/symbols.esm.js +3 -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/api.md +11 -5
- package/docs/ai/architecture.md +3 -5
- package/docs/ai/decorators.md +6 -1
- package/docs/ai/patterns.md +7 -13
- package/docs/elements.md +28 -21
- package/docs/routing.md +19 -10
- package/package.json +1 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* snice v5.
|
|
2
|
+
* snice v5.1.0
|
|
3
3
|
* A decorator-driven web component library with differential rendering, routing, controllers, and 130+ ready-made UI components. Use as much or as little as you want. Zero dependencies, works anywhere.
|
|
4
4
|
* (c) 2024
|
|
5
5
|
* Released under the MIT License.
|
|
6
6
|
*/
|
|
7
7
|
/*!
|
|
8
|
-
* snice
|
|
8
|
+
* snice v5.0.0
|
|
9
9
|
* A decorator-driven web component library with differential rendering, routing, controllers, and 130+ ready-made UI components. Use as much or as little as you want. Zero dependencies, works anywhere.
|
|
10
10
|
* (c) 2024
|
|
11
11
|
* Released under the MIT License.
|
|
@@ -95,6 +95,7 @@ const CONTEXT_NOTIFY_ELEMENT = getSymbol('context-notify-element');
|
|
|
95
95
|
const CONTEXT_TIMER = getSymbol('context-timer');
|
|
96
96
|
const CONTEXT_CALLED = getSymbol('context-called');
|
|
97
97
|
const CONTEXT_UPDATE = getSymbol('context-update');
|
|
98
|
+
const WRAPPED_CONTEXT_HANDLERS = getSymbol('wrapped-context-handlers');
|
|
98
99
|
// Registration de-dup sets on the constructor — replace previous `__*Methods`
|
|
99
100
|
// expando strings that violated the no-double-underscore rule.
|
|
100
101
|
const CONTEXT_METHODS = getSymbol('context-methods');
|
|
@@ -270,13 +271,17 @@ class Context {
|
|
|
270
271
|
const names = elementsMap.get(element);
|
|
271
272
|
if (!names)
|
|
272
273
|
continue;
|
|
273
|
-
|
|
274
|
-
|
|
274
|
+
const wrapped = element[WRAPPED_CONTEXT_HANDLERS];
|
|
275
|
+
if (!wrapped)
|
|
276
|
+
continue;
|
|
277
|
+
for (const handlerName of names) {
|
|
278
|
+
const fn = wrapped.get(handlerName);
|
|
279
|
+
if (typeof fn === 'function') {
|
|
275
280
|
try {
|
|
276
|
-
|
|
281
|
+
fn(this);
|
|
277
282
|
}
|
|
278
283
|
catch (error) {
|
|
279
|
-
console.error(`Error calling @context
|
|
284
|
+
console.error(`Error calling @context handler ${handlerName}:`, error);
|
|
280
285
|
}
|
|
281
286
|
}
|
|
282
287
|
}
|
|
@@ -291,10 +296,13 @@ class Context {
|
|
|
291
296
|
const names = this[REGISTERED_ELEMENTS].get(element);
|
|
292
297
|
if (!names)
|
|
293
298
|
return;
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
299
|
+
const wrapped = element[WRAPPED_CONTEXT_HANDLERS];
|
|
300
|
+
if (!wrapped)
|
|
301
|
+
return;
|
|
302
|
+
for (const handlerName of names) {
|
|
303
|
+
const fn = wrapped.get(handlerName);
|
|
304
|
+
if (typeof fn === 'function')
|
|
305
|
+
fn(this);
|
|
298
306
|
}
|
|
299
307
|
}
|
|
300
308
|
}
|
|
@@ -2963,46 +2971,78 @@ const CONTEXT_HANDLERS = getSymbol('context-handlers');
|
|
|
2963
2971
|
/**
|
|
2964
2972
|
* @context decorator for receiving router context updates
|
|
2965
2973
|
*
|
|
2974
|
+
* Works on both methods and fields:
|
|
2975
|
+
*
|
|
2976
|
+
* - **Method form**: the method is invoked with the current Context on every
|
|
2977
|
+
* update (and once at register time so the first render sees the context).
|
|
2978
|
+
* - **Field form**: the field is overwritten with the current Context on
|
|
2979
|
+
* every update (and once at register time). Pair with `@property` if you
|
|
2980
|
+
* want assignment to also schedule a re-render.
|
|
2981
|
+
*
|
|
2966
2982
|
* @example
|
|
2967
2983
|
* ```typescript
|
|
2968
2984
|
* @element('my-layout')
|
|
2969
2985
|
* class MyLayout extends HTMLElement {
|
|
2970
|
-
*
|
|
2986
|
+
* // Method form
|
|
2987
|
+
* @context()
|
|
2971
2988
|
* handleContext(ctx: Context) {
|
|
2972
|
-
* this.renderNav(ctx.placards, ctx.
|
|
2989
|
+
* this.renderNav(ctx.navigation.placards, ctx.navigation.route);
|
|
2973
2990
|
* }
|
|
2974
2991
|
*
|
|
2975
|
-
*
|
|
2976
|
-
*
|
|
2977
|
-
*
|
|
2978
|
-
*
|
|
2992
|
+
* // Field form — the field is populated before first render
|
|
2993
|
+
* @context() ctx!: Context;
|
|
2994
|
+
*
|
|
2995
|
+
* // Field + @property — assignment also triggers re-render
|
|
2996
|
+
* @property({ attribute: false }) @context() reactiveCtx!: Context;
|
|
2979
2997
|
* }
|
|
2980
2998
|
* ```
|
|
2981
2999
|
*/
|
|
2982
3000
|
function context$1(options = {}) {
|
|
2983
|
-
return function (
|
|
2984
|
-
const
|
|
2985
|
-
|
|
3001
|
+
return function (value, decoratorContext) {
|
|
3002
|
+
const name = decoratorContext.name;
|
|
3003
|
+
const kind = decoratorContext.kind;
|
|
3004
|
+
const registerHandler = function () {
|
|
2986
3005
|
const constructor = this.constructor;
|
|
2987
|
-
//
|
|
2988
|
-
// the prototype chain.
|
|
3006
|
+
// De-dupe: methods identify by reference, fields identify by name.
|
|
2989
3007
|
if (!Object.prototype.hasOwnProperty.call(constructor, CONTEXT_METHODS)) {
|
|
2990
3008
|
constructor[CONTEXT_METHODS] = new Set();
|
|
2991
3009
|
}
|
|
2992
|
-
|
|
3010
|
+
const dedupeKey = kind === 'method' ? value : `field:${name}`;
|
|
3011
|
+
if (constructor[CONTEXT_METHODS].has(dedupeKey))
|
|
2993
3012
|
return;
|
|
2994
|
-
constructor[CONTEXT_METHODS].add(
|
|
3013
|
+
constructor[CONTEXT_METHODS].add(dedupeKey);
|
|
2995
3014
|
if (!Object.prototype.hasOwnProperty.call(constructor, CONTEXT_HANDLERS)) {
|
|
2996
3015
|
const inherited = constructor[CONTEXT_HANDLERS];
|
|
2997
3016
|
constructor[CONTEXT_HANDLERS] = inherited ? [...inherited] : [];
|
|
2998
3017
|
}
|
|
2999
|
-
|
|
3000
|
-
|
|
3001
|
-
|
|
3002
|
-
|
|
3003
|
-
|
|
3004
|
-
|
|
3005
|
-
|
|
3018
|
+
if (kind === 'method') {
|
|
3019
|
+
constructor[CONTEXT_HANDLERS].push({
|
|
3020
|
+
kind: 'method',
|
|
3021
|
+
methodName: name,
|
|
3022
|
+
method: value,
|
|
3023
|
+
options,
|
|
3024
|
+
});
|
|
3025
|
+
}
|
|
3026
|
+
else if (kind === 'field' || kind === 'accessor') {
|
|
3027
|
+
constructor[CONTEXT_HANDLERS].push({
|
|
3028
|
+
kind: 'field',
|
|
3029
|
+
fieldName: name,
|
|
3030
|
+
options,
|
|
3031
|
+
});
|
|
3032
|
+
}
|
|
3033
|
+
};
|
|
3034
|
+
if (kind === 'method') {
|
|
3035
|
+
decoratorContext.addInitializer(registerHandler);
|
|
3036
|
+
return value;
|
|
3037
|
+
}
|
|
3038
|
+
// Field decorators: do registration via the init function (fires per
|
|
3039
|
+
// instance during construction, with `this` bound). Returning the init
|
|
3040
|
+
// function is the canonical Stage 3 way for field decorators —
|
|
3041
|
+
// `addInitializer` for fields can be late or unreliable across runtimes.
|
|
3042
|
+
return function (initialValue) {
|
|
3043
|
+
registerHandler.call(this);
|
|
3044
|
+
return initialValue;
|
|
3045
|
+
};
|
|
3006
3046
|
};
|
|
3007
3047
|
}
|
|
3008
3048
|
/**
|
|
@@ -3021,18 +3061,30 @@ function setupContextHandler(element) {
|
|
|
3021
3061
|
}
|
|
3022
3062
|
// Store the Context instance for cleanup
|
|
3023
3063
|
element[NAVIGATION_CONTEXT_INSTANCE] = ctx;
|
|
3064
|
+
// Per-element Map of handler-name → wrapped function. Symbol-keyed so it
|
|
3065
|
+
// doesn't pollute the element's public surface.
|
|
3066
|
+
let wrapped = element[WRAPPED_CONTEXT_HANDLERS];
|
|
3067
|
+
if (!wrapped) {
|
|
3068
|
+
wrapped = new Map();
|
|
3069
|
+
element[WRAPPED_CONTEXT_HANDLERS] = wrapped;
|
|
3070
|
+
}
|
|
3024
3071
|
// Register each handler with the Context
|
|
3025
3072
|
for (const handler of handlers) {
|
|
3026
|
-
const {
|
|
3027
|
-
const
|
|
3073
|
+
const { kind, options } = handler;
|
|
3074
|
+
const handlerName = kind === 'field' ? handler.fieldName : handler.methodName;
|
|
3028
3075
|
// Create wrapped method with timing controls
|
|
3029
|
-
|
|
3076
|
+
const wrappedFn = function (context) {
|
|
3030
3077
|
// Skip if already called once
|
|
3031
3078
|
if (options.once && element[CONTEXT_CALLED]) {
|
|
3032
3079
|
return;
|
|
3033
3080
|
}
|
|
3034
3081
|
const callMethod = () => {
|
|
3035
|
-
|
|
3082
|
+
if (kind === 'field') {
|
|
3083
|
+
element[handler.fieldName] = context;
|
|
3084
|
+
}
|
|
3085
|
+
else {
|
|
3086
|
+
handler.method.call(element, context);
|
|
3087
|
+
}
|
|
3036
3088
|
// Handle once option
|
|
3037
3089
|
if (options.once) {
|
|
3038
3090
|
element[CONTEXT_CALLED] = true;
|
|
@@ -3047,7 +3099,7 @@ function setupContextHandler(element) {
|
|
|
3047
3099
|
// element overwriting each other's state.
|
|
3048
3100
|
const timerSlot = element[CONTEXT_TIMER] ||
|
|
3049
3101
|
(element[CONTEXT_TIMER] = {});
|
|
3050
|
-
const timerKey =
|
|
3102
|
+
const timerKey = handlerName;
|
|
3051
3103
|
if (options.debounce) {
|
|
3052
3104
|
clearTimeout(timerSlot[timerKey]?.timeout);
|
|
3053
3105
|
timerSlot[timerKey] = {
|
|
@@ -3066,9 +3118,20 @@ function setupContextHandler(element) {
|
|
|
3066
3118
|
}
|
|
3067
3119
|
callMethod();
|
|
3068
3120
|
};
|
|
3069
|
-
|
|
3121
|
+
wrapped.set(handlerName, wrappedFn);
|
|
3122
|
+
// Register with the Context using the handler name (lookup goes through
|
|
3123
|
+
// the WRAPPED_CONTEXT_HANDLERS Map on the element).
|
|
3070
3124
|
if (typeof ctx[CONTEXT_REGISTER] === 'function') {
|
|
3071
|
-
ctx[CONTEXT_REGISTER](element,
|
|
3125
|
+
ctx[CONTEXT_REGISTER](element, handlerName);
|
|
3126
|
+
}
|
|
3127
|
+
// Synchronously emit current context to the just-registered handler so
|
|
3128
|
+
// field/method values are populated BEFORE the first render microtask
|
|
3129
|
+
// flushes — eliminates the cold-render flicker where ctx is undefined.
|
|
3130
|
+
try {
|
|
3131
|
+
wrappedFn(ctx);
|
|
3132
|
+
}
|
|
3133
|
+
catch (error) {
|
|
3134
|
+
console.error(`Error invoking @context handler at registration:`, error);
|
|
3072
3135
|
}
|
|
3073
3136
|
}
|
|
3074
3137
|
}
|
|
@@ -3090,11 +3153,8 @@ function cleanupContextHandler(element) {
|
|
|
3090
3153
|
}
|
|
3091
3154
|
delete element[CONTEXT_TIMER];
|
|
3092
3155
|
}
|
|
3093
|
-
|
|
3094
|
-
|
|
3095
|
-
const wrappedMethodName = `__wrapped_${handler.methodName}`;
|
|
3096
|
-
delete element[wrappedMethodName];
|
|
3097
|
-
}
|
|
3156
|
+
// Drop the per-element wrapped-handlers Map.
|
|
3157
|
+
delete element[WRAPPED_CONTEXT_HANDLERS];
|
|
3098
3158
|
// Unregister from Context if available
|
|
3099
3159
|
const ctx = element[NAVIGATION_CONTEXT_INSTANCE];
|
|
3100
3160
|
if (ctx && typeof ctx[CONTEXT_UNREGISTER] === 'function') {
|
|
@@ -6101,7 +6161,7 @@ if (typeof document !== 'undefined') {
|
|
|
6101
6161
|
}
|
|
6102
6162
|
|
|
6103
6163
|
/*!
|
|
6104
|
-
* snice
|
|
6164
|
+
* snice v5.0.0
|
|
6105
6165
|
* A decorator-driven web component library with differential rendering, routing, controllers, and 130+ ready-made UI components. Use as much or as little as you want. Zero dependencies, works anywhere.
|
|
6106
6166
|
* (c) 2024
|
|
6107
6167
|
* Released under the MIT License.
|
|
@@ -6120,7 +6180,7 @@ if (!globalThis.snice) {
|
|
|
6120
6180
|
}
|
|
6121
6181
|
|
|
6122
6182
|
/*!
|
|
6123
|
-
* snice
|
|
6183
|
+
* snice v5.0.0
|
|
6124
6184
|
* A decorator-driven web component library with differential rendering, routing, controllers, and 130+ ready-made UI components. Use as much or as little as you want. Zero dependencies, works anywhere.
|
|
6125
6185
|
* (c) 2024
|
|
6126
6186
|
* Released under the MIT License.
|