snice 4.35.1 → 4.36.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/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/accordion/snice-accordion.min.js +1 -1
- package/dist/cdn/action-bar/README.md +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/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 +103 -33
- 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 +103 -33
- 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/spreadsheet/snice-spreadsheet.js +1 -1
- package/dist/cdn/spreadsheet/snice-spreadsheet.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/index.cjs +100 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +100 -30
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +100 -30
- 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/patterns.md +28 -0
- package/docs/elements.md +79 -0
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* snice v4.
|
|
2
|
+
* snice v4.36.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.
|
|
@@ -74,6 +74,7 @@ const RENDER_TIMERS = getSymbol('render-timers');
|
|
|
74
74
|
const RENDER_CALLBACKS = getSymbol('render-callbacks');
|
|
75
75
|
const STYLES_METHOD = getSymbol('styles-method');
|
|
76
76
|
const STYLES_APPLIED = getSymbol('styles-applied');
|
|
77
|
+
const PARENT_STYLES_METHODS = getSymbol('parent-styles-methods');
|
|
77
78
|
// Navigation context symbols
|
|
78
79
|
const CONTEXT_HANDLER = getSymbol('context-handler');
|
|
79
80
|
const NAVIGATION_CONTEXT_INSTANCE = getSymbol('navigation-context-instance');
|
|
@@ -484,12 +485,13 @@ function observe(observeTarget, selectorOrOptions, options) {
|
|
|
484
485
|
}
|
|
485
486
|
return function (target, context) {
|
|
486
487
|
const propertyKey = context.name;
|
|
487
|
-
const initKey = `__observe_init_${propertyKey}`;
|
|
488
488
|
context.addInitializer(function () {
|
|
489
489
|
const constructor = this.constructor;
|
|
490
|
-
if (constructor
|
|
490
|
+
if (!constructor.__observeMethods)
|
|
491
|
+
constructor.__observeMethods = new Set();
|
|
492
|
+
if (constructor.__observeMethods.has(target))
|
|
491
493
|
return;
|
|
492
|
-
constructor
|
|
494
|
+
constructor.__observeMethods.add(target);
|
|
493
495
|
if (!constructor[OBSERVERS]) {
|
|
494
496
|
constructor[OBSERVERS] = [];
|
|
495
497
|
}
|
|
@@ -900,12 +902,13 @@ function request(requestName, options) {
|
|
|
900
902
|
function respond(requestName, options) {
|
|
901
903
|
return function (target, context) {
|
|
902
904
|
const propertyKey = context.name;
|
|
903
|
-
const initKey = `__respond_init_${requestName}_${propertyKey}`;
|
|
904
905
|
context.addInitializer(function () {
|
|
905
906
|
const constructor = this.constructor;
|
|
906
|
-
if (constructor
|
|
907
|
+
if (!constructor.__respondMethods)
|
|
908
|
+
constructor.__respondMethods = new Set();
|
|
909
|
+
if (constructor.__respondMethods.has(target))
|
|
907
910
|
return;
|
|
908
|
-
constructor
|
|
911
|
+
constructor.__respondMethods.add(target);
|
|
909
912
|
if (!constructor[CHANNEL_HANDLERS]) {
|
|
910
913
|
constructor[CHANNEL_HANDLERS] = [];
|
|
911
914
|
}
|
|
@@ -2248,14 +2251,14 @@ function on(eventName, selectorOrOptions, options) {
|
|
|
2248
2251
|
}
|
|
2249
2252
|
return function (originalMethod, context) {
|
|
2250
2253
|
const methodName = context.name;
|
|
2251
|
-
const initKey = `__on_init_${methodName}_${selector || ''}_${JSON.stringify(eventName)}`;
|
|
2252
2254
|
context.addInitializer(function () {
|
|
2253
2255
|
const constructor = this.constructor;
|
|
2254
|
-
//
|
|
2255
|
-
if (constructor
|
|
2256
|
+
// Dedup by method reference — allows child to register same-named methods
|
|
2257
|
+
if (!constructor.__onMethods)
|
|
2258
|
+
constructor.__onMethods = new Set();
|
|
2259
|
+
if (constructor.__onMethods.has(originalMethod))
|
|
2256
2260
|
return;
|
|
2257
|
-
|
|
2258
|
-
constructor[initKey] = true;
|
|
2261
|
+
constructor.__onMethods.add(originalMethod);
|
|
2259
2262
|
if (!constructor[ON_HANDLERS]) {
|
|
2260
2263
|
constructor[ON_HANDLERS] = [];
|
|
2261
2264
|
}
|
|
@@ -2749,12 +2752,13 @@ const CONTEXT_HANDLERS = getSymbol('context-handlers');
|
|
|
2749
2752
|
function context$1(options = {}) {
|
|
2750
2753
|
return function (originalMethod, context) {
|
|
2751
2754
|
const methodName = context.name;
|
|
2752
|
-
const initKey = `__context_init_${methodName}`;
|
|
2753
2755
|
context.addInitializer(function () {
|
|
2754
2756
|
const constructor = this.constructor;
|
|
2755
|
-
if (constructor
|
|
2757
|
+
if (!constructor.__contextMethods)
|
|
2758
|
+
constructor.__contextMethods = new Set();
|
|
2759
|
+
if (constructor.__contextMethods.has(originalMethod))
|
|
2756
2760
|
return;
|
|
2757
|
-
constructor
|
|
2761
|
+
constructor.__contextMethods.add(originalMethod);
|
|
2758
2762
|
if (!constructor[CONTEXT_HANDLERS]) {
|
|
2759
2763
|
constructor[CONTEXT_HANDLERS] = [];
|
|
2760
2764
|
}
|
|
@@ -3078,7 +3082,13 @@ function render(options = {}) {
|
|
|
3078
3082
|
function styles() {
|
|
3079
3083
|
return function (originalMethod, context) {
|
|
3080
3084
|
context.addInitializer(function () {
|
|
3081
|
-
//
|
|
3085
|
+
// Collect parent styles methods before overwriting with child's
|
|
3086
|
+
if (this[STYLES_METHOD] && !this[PARENT_STYLES_METHODS]) {
|
|
3087
|
+
this[PARENT_STYLES_METHODS] = [this[STYLES_METHOD]];
|
|
3088
|
+
}
|
|
3089
|
+
else if (this[STYLES_METHOD] && this[PARENT_STYLES_METHODS]) {
|
|
3090
|
+
this[PARENT_STYLES_METHODS].push(this[STYLES_METHOD]);
|
|
3091
|
+
}
|
|
3082
3092
|
this[STYLES_METHOD] = originalMethod;
|
|
3083
3093
|
});
|
|
3084
3094
|
return originalMethod;
|
|
@@ -3097,11 +3107,22 @@ function applyStyles(element) {
|
|
|
3097
3107
|
return;
|
|
3098
3108
|
element[STYLES_APPLIED] = true;
|
|
3099
3109
|
try {
|
|
3110
|
+
// Collect all CSS results: parent styles first, then child styles
|
|
3111
|
+
const allResults = [];
|
|
3112
|
+
const parentMethods = element[PARENT_STYLES_METHODS];
|
|
3113
|
+
if (parentMethods) {
|
|
3114
|
+
for (const method of parentMethods) {
|
|
3115
|
+
const r = method.call(element);
|
|
3116
|
+
if (isCSSResult(r))
|
|
3117
|
+
allResults.push(r);
|
|
3118
|
+
}
|
|
3119
|
+
}
|
|
3100
3120
|
const result = stylesMethod.call(element);
|
|
3101
3121
|
if (!isCSSResult(result)) {
|
|
3102
3122
|
console.warn('Styles method must return css`` template result');
|
|
3103
3123
|
return;
|
|
3104
3124
|
}
|
|
3125
|
+
allResults.push(result);
|
|
3105
3126
|
// Ensure shadow root exists
|
|
3106
3127
|
if (!element.shadowRoot) {
|
|
3107
3128
|
element.attachShadow({ mode: 'open' });
|
|
@@ -3109,14 +3130,16 @@ function applyStyles(element) {
|
|
|
3109
3130
|
if (!element.shadowRoot)
|
|
3110
3131
|
return;
|
|
3111
3132
|
// Prefer constructable stylesheets
|
|
3112
|
-
if (
|
|
3113
|
-
element.shadowRoot.adoptedStyleSheets =
|
|
3133
|
+
if (allResults.every(r => !!r.styleSheet) && 'adoptedStyleSheets' in element.shadowRoot) {
|
|
3134
|
+
element.shadowRoot.adoptedStyleSheets = allResults.map(r => r.styleSheet);
|
|
3114
3135
|
return;
|
|
3115
3136
|
}
|
|
3116
|
-
// Fallback
|
|
3117
|
-
const
|
|
3118
|
-
|
|
3119
|
-
|
|
3137
|
+
// Fallback — one <style> tag per stylesheet, preserving cascade order
|
|
3138
|
+
for (const r of allResults) {
|
|
3139
|
+
const style = document.createElement('style');
|
|
3140
|
+
style.textContent = r.cssText;
|
|
3141
|
+
element.shadowRoot.appendChild(style);
|
|
3142
|
+
}
|
|
3120
3143
|
}
|
|
3121
3144
|
catch (error) {
|
|
3122
3145
|
console.error('Error applying styles:', error);
|
|
@@ -3389,7 +3412,45 @@ function applyElementFunctionality(constructor) {
|
|
|
3389
3412
|
}
|
|
3390
3413
|
};
|
|
3391
3414
|
}
|
|
3415
|
+
/**
|
|
3416
|
+
* Walk the prototype chain and merge parent element metadata into the child.
|
|
3417
|
+
* Called once at class definition time — zero per-instance cost.
|
|
3418
|
+
* Skips plain HTMLElement (no metadata to merge).
|
|
3419
|
+
*
|
|
3420
|
+
* Only merges PROPERTIES (stored via context.metadata at decoration time)
|
|
3421
|
+
* and formAssociated. Other handler registrations (@watch, @on, @ready, etc.)
|
|
3422
|
+
* inherit automatically via TC39 addInitializer — parent initializers run
|
|
3423
|
+
* during child instance construction.
|
|
3424
|
+
*/
|
|
3425
|
+
function mergeParentMetadata(constructor) {
|
|
3426
|
+
let parent = Object.getPrototypeOf(constructor);
|
|
3427
|
+
// Collect ancestors bottom-up, then merge top-down so the deepest parent goes first
|
|
3428
|
+
const ancestors = [];
|
|
3429
|
+
while (parent && parent !== HTMLElement && parent !== Function.prototype) {
|
|
3430
|
+
ancestors.push(parent);
|
|
3431
|
+
parent = Object.getPrototypeOf(parent);
|
|
3432
|
+
}
|
|
3433
|
+
ancestors.reverse();
|
|
3434
|
+
for (const ancestor of ancestors) {
|
|
3435
|
+
// Properties (Map) — parent first, child overrides
|
|
3436
|
+
if (ancestor[PROPERTIES]) {
|
|
3437
|
+
if (!constructor[PROPERTIES])
|
|
3438
|
+
constructor[PROPERTIES] = new Map();
|
|
3439
|
+
for (const [key, value] of ancestor[PROPERTIES]) {
|
|
3440
|
+
if (!constructor[PROPERTIES].has(key)) {
|
|
3441
|
+
constructor[PROPERTIES].set(key, value);
|
|
3442
|
+
}
|
|
3443
|
+
}
|
|
3444
|
+
}
|
|
3445
|
+
// formAssociated — inherit if parent is form-associated
|
|
3446
|
+
if (ancestor.formAssociated && !constructor.formAssociated) {
|
|
3447
|
+
constructor.formAssociated = true;
|
|
3448
|
+
}
|
|
3449
|
+
}
|
|
3450
|
+
}
|
|
3392
3451
|
function defineElement(tagName, constructor, context, options) {
|
|
3452
|
+
// Merge metadata from parent @element classes (inheritance support)
|
|
3453
|
+
mergeParentMetadata(constructor);
|
|
3393
3454
|
if (context.metadata && context.metadata[PROPERTIES]) {
|
|
3394
3455
|
if (!constructor[PROPERTIES])
|
|
3395
3456
|
constructor[PROPERTIES] = new Map();
|
|
@@ -3443,8 +3504,12 @@ function property(options) {
|
|
|
3443
3504
|
}
|
|
3444
3505
|
// Always store property options on constructor for runtime access
|
|
3445
3506
|
constructor[PROPERTIES].set(propertyKey, finalOptions);
|
|
3446
|
-
// Set up the property descriptor
|
|
3447
|
-
|
|
3507
|
+
// Set up the property descriptor — re-define if a subclass overrides
|
|
3508
|
+
// the property with different options (different closure captures)
|
|
3509
|
+
const definerKey = `__propDef_${propertyKey}`;
|
|
3510
|
+
const existingDefiner = this.constructor.prototype[definerKey];
|
|
3511
|
+
if (!existingDefiner || existingDefiner !== options) {
|
|
3512
|
+
this.constructor.prototype[definerKey] = options;
|
|
3448
3513
|
const descriptor = {
|
|
3449
3514
|
get() {
|
|
3450
3515
|
// attribute: false — use internal storage only, no DOM sync
|
|
@@ -3580,12 +3645,15 @@ function queryAll(selector, options = {}) {
|
|
|
3580
3645
|
function watch(...propertyNames) {
|
|
3581
3646
|
return function (target, context) {
|
|
3582
3647
|
const methodName = context.name;
|
|
3583
|
-
const initKey = `__watch_init_${methodName}`;
|
|
3584
3648
|
context.addInitializer(function () {
|
|
3585
3649
|
const constructor = this.constructor;
|
|
3586
|
-
|
|
3650
|
+
// Dedup by method reference — allows child classes to register
|
|
3651
|
+
// their own method with the same name as a parent's
|
|
3652
|
+
if (!constructor.__watchMethods)
|
|
3653
|
+
constructor.__watchMethods = new Set();
|
|
3654
|
+
if (constructor.__watchMethods.has(target))
|
|
3587
3655
|
return;
|
|
3588
|
-
constructor
|
|
3656
|
+
constructor.__watchMethods.add(target);
|
|
3589
3657
|
if (!constructor[PROPERTY_WATCHERS]) {
|
|
3590
3658
|
constructor[PROPERTY_WATCHERS] = new Map();
|
|
3591
3659
|
}
|
|
@@ -3656,12 +3724,14 @@ function context() {
|
|
|
3656
3724
|
}
|
|
3657
3725
|
function registerHandler(symbol, prefix, target, context, extra) {
|
|
3658
3726
|
const methodName = context.name;
|
|
3659
|
-
const initKey = `__${prefix}_init_${methodName}`;
|
|
3660
3727
|
context.addInitializer(function () {
|
|
3661
3728
|
const constructor = this.constructor;
|
|
3662
|
-
|
|
3729
|
+
const setKey = `__${prefix}Methods`;
|
|
3730
|
+
if (!constructor[setKey])
|
|
3731
|
+
constructor[setKey] = new Set();
|
|
3732
|
+
if (constructor[setKey].has(target))
|
|
3663
3733
|
return;
|
|
3664
|
-
constructor[
|
|
3734
|
+
constructor[setKey].add(target);
|
|
3665
3735
|
if (!constructor[symbol])
|
|
3666
3736
|
constructor[symbol] = [];
|
|
3667
3737
|
constructor[symbol].push({ methodName, method: target, ...extra });
|