snice 4.35.1 → 4.36.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/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 +99 -31
- 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 +99 -31
- 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 +96 -28
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +96 -28
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +96 -28
- 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.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* snice v4.35.
|
|
2
|
+
* snice v4.35.1
|
|
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.
|
|
@@ -76,6 +76,7 @@ const RENDER_TIMERS = getSymbol('render-timers');
|
|
|
76
76
|
const RENDER_CALLBACKS = getSymbol('render-callbacks');
|
|
77
77
|
const STYLES_METHOD = getSymbol('styles-method');
|
|
78
78
|
const STYLES_APPLIED = getSymbol('styles-applied');
|
|
79
|
+
const PARENT_STYLES_METHODS = getSymbol('parent-styles-methods');
|
|
79
80
|
// Navigation context symbols
|
|
80
81
|
const CONTEXT_HANDLER = getSymbol('context-handler');
|
|
81
82
|
const NAVIGATION_CONTEXT_INSTANCE = getSymbol('navigation-context-instance');
|
|
@@ -486,12 +487,13 @@ function observe(observeTarget, selectorOrOptions, options) {
|
|
|
486
487
|
}
|
|
487
488
|
return function (target, context) {
|
|
488
489
|
const propertyKey = context.name;
|
|
489
|
-
const initKey = `__observe_init_${propertyKey}`;
|
|
490
490
|
context.addInitializer(function () {
|
|
491
491
|
const constructor = this.constructor;
|
|
492
|
-
if (constructor
|
|
492
|
+
if (!constructor.__observeMethods)
|
|
493
|
+
constructor.__observeMethods = new Set();
|
|
494
|
+
if (constructor.__observeMethods.has(target))
|
|
493
495
|
return;
|
|
494
|
-
constructor
|
|
496
|
+
constructor.__observeMethods.add(target);
|
|
495
497
|
if (!constructor[OBSERVERS]) {
|
|
496
498
|
constructor[OBSERVERS] = [];
|
|
497
499
|
}
|
|
@@ -902,12 +904,13 @@ function request(requestName, options) {
|
|
|
902
904
|
function respond(requestName, options) {
|
|
903
905
|
return function (target, context) {
|
|
904
906
|
const propertyKey = context.name;
|
|
905
|
-
const initKey = `__respond_init_${requestName}_${propertyKey}`;
|
|
906
907
|
context.addInitializer(function () {
|
|
907
908
|
const constructor = this.constructor;
|
|
908
|
-
if (constructor
|
|
909
|
+
if (!constructor.__respondMethods)
|
|
910
|
+
constructor.__respondMethods = new Set();
|
|
911
|
+
if (constructor.__respondMethods.has(target))
|
|
909
912
|
return;
|
|
910
|
-
constructor
|
|
913
|
+
constructor.__respondMethods.add(target);
|
|
911
914
|
if (!constructor[CHANNEL_HANDLERS]) {
|
|
912
915
|
constructor[CHANNEL_HANDLERS] = [];
|
|
913
916
|
}
|
|
@@ -2250,14 +2253,14 @@ function on(eventName, selectorOrOptions, options) {
|
|
|
2250
2253
|
}
|
|
2251
2254
|
return function (originalMethod, context) {
|
|
2252
2255
|
const methodName = context.name;
|
|
2253
|
-
const initKey = `__on_init_${methodName}_${selector || ''}_${JSON.stringify(eventName)}`;
|
|
2254
2256
|
context.addInitializer(function () {
|
|
2255
2257
|
const constructor = this.constructor;
|
|
2256
|
-
//
|
|
2257
|
-
if (constructor
|
|
2258
|
+
// Dedup by method reference — allows child to register same-named methods
|
|
2259
|
+
if (!constructor.__onMethods)
|
|
2260
|
+
constructor.__onMethods = new Set();
|
|
2261
|
+
if (constructor.__onMethods.has(originalMethod))
|
|
2258
2262
|
return;
|
|
2259
|
-
|
|
2260
|
-
constructor[initKey] = true;
|
|
2263
|
+
constructor.__onMethods.add(originalMethod);
|
|
2261
2264
|
if (!constructor[ON_HANDLERS]) {
|
|
2262
2265
|
constructor[ON_HANDLERS] = [];
|
|
2263
2266
|
}
|
|
@@ -2751,12 +2754,13 @@ const CONTEXT_HANDLERS = getSymbol('context-handlers');
|
|
|
2751
2754
|
function context$1(options = {}) {
|
|
2752
2755
|
return function (originalMethod, context) {
|
|
2753
2756
|
const methodName = context.name;
|
|
2754
|
-
const initKey = `__context_init_${methodName}`;
|
|
2755
2757
|
context.addInitializer(function () {
|
|
2756
2758
|
const constructor = this.constructor;
|
|
2757
|
-
if (constructor
|
|
2759
|
+
if (!constructor.__contextMethods)
|
|
2760
|
+
constructor.__contextMethods = new Set();
|
|
2761
|
+
if (constructor.__contextMethods.has(originalMethod))
|
|
2758
2762
|
return;
|
|
2759
|
-
constructor
|
|
2763
|
+
constructor.__contextMethods.add(originalMethod);
|
|
2760
2764
|
if (!constructor[CONTEXT_HANDLERS]) {
|
|
2761
2765
|
constructor[CONTEXT_HANDLERS] = [];
|
|
2762
2766
|
}
|
|
@@ -3080,7 +3084,13 @@ function render(options = {}) {
|
|
|
3080
3084
|
function styles() {
|
|
3081
3085
|
return function (originalMethod, context) {
|
|
3082
3086
|
context.addInitializer(function () {
|
|
3083
|
-
//
|
|
3087
|
+
// Collect parent styles methods before overwriting with child's
|
|
3088
|
+
if (this[STYLES_METHOD] && !this[PARENT_STYLES_METHODS]) {
|
|
3089
|
+
this[PARENT_STYLES_METHODS] = [this[STYLES_METHOD]];
|
|
3090
|
+
}
|
|
3091
|
+
else if (this[STYLES_METHOD] && this[PARENT_STYLES_METHODS]) {
|
|
3092
|
+
this[PARENT_STYLES_METHODS].push(this[STYLES_METHOD]);
|
|
3093
|
+
}
|
|
3084
3094
|
this[STYLES_METHOD] = originalMethod;
|
|
3085
3095
|
});
|
|
3086
3096
|
return originalMethod;
|
|
@@ -3099,11 +3109,22 @@ function applyStyles(element) {
|
|
|
3099
3109
|
return;
|
|
3100
3110
|
element[STYLES_APPLIED] = true;
|
|
3101
3111
|
try {
|
|
3112
|
+
// Collect all CSS results: parent styles first, then child styles
|
|
3113
|
+
const allResults = [];
|
|
3114
|
+
const parentMethods = element[PARENT_STYLES_METHODS];
|
|
3115
|
+
if (parentMethods) {
|
|
3116
|
+
for (const method of parentMethods) {
|
|
3117
|
+
const r = method.call(element);
|
|
3118
|
+
if (isCSSResult(r))
|
|
3119
|
+
allResults.push(r);
|
|
3120
|
+
}
|
|
3121
|
+
}
|
|
3102
3122
|
const result = stylesMethod.call(element);
|
|
3103
3123
|
if (!isCSSResult(result)) {
|
|
3104
3124
|
console.warn('Styles method must return css`` template result');
|
|
3105
3125
|
return;
|
|
3106
3126
|
}
|
|
3127
|
+
allResults.push(result);
|
|
3107
3128
|
// Ensure shadow root exists
|
|
3108
3129
|
if (!element.shadowRoot) {
|
|
3109
3130
|
element.attachShadow({ mode: 'open' });
|
|
@@ -3111,13 +3132,13 @@ function applyStyles(element) {
|
|
|
3111
3132
|
if (!element.shadowRoot)
|
|
3112
3133
|
return;
|
|
3113
3134
|
// Prefer constructable stylesheets
|
|
3114
|
-
if (
|
|
3115
|
-
element.shadowRoot.adoptedStyleSheets =
|
|
3135
|
+
if (allResults.every(r => !!r.styleSheet) && 'adoptedStyleSheets' in element.shadowRoot) {
|
|
3136
|
+
element.shadowRoot.adoptedStyleSheets = allResults.map(r => r.styleSheet);
|
|
3116
3137
|
return;
|
|
3117
3138
|
}
|
|
3118
|
-
// Fallback to <style> tag
|
|
3139
|
+
// Fallback to <style> tag — concatenate all CSS
|
|
3119
3140
|
const style = document.createElement('style');
|
|
3120
|
-
style.textContent =
|
|
3141
|
+
style.textContent = allResults.map(r => r.cssText).join('\n');
|
|
3121
3142
|
element.shadowRoot.appendChild(style);
|
|
3122
3143
|
}
|
|
3123
3144
|
catch (error) {
|
|
@@ -3391,7 +3412,45 @@ function applyElementFunctionality(constructor) {
|
|
|
3391
3412
|
}
|
|
3392
3413
|
};
|
|
3393
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
|
+
}
|
|
3394
3451
|
function defineElement(tagName, constructor, context, options) {
|
|
3452
|
+
// Merge metadata from parent @element classes (inheritance support)
|
|
3453
|
+
mergeParentMetadata(constructor);
|
|
3395
3454
|
if (context.metadata && context.metadata[PROPERTIES]) {
|
|
3396
3455
|
if (!constructor[PROPERTIES])
|
|
3397
3456
|
constructor[PROPERTIES] = new Map();
|
|
@@ -3445,8 +3504,12 @@ function property(options) {
|
|
|
3445
3504
|
}
|
|
3446
3505
|
// Always store property options on constructor for runtime access
|
|
3447
3506
|
constructor[PROPERTIES].set(propertyKey, finalOptions);
|
|
3448
|
-
// Set up the property descriptor
|
|
3449
|
-
|
|
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;
|
|
3450
3513
|
const descriptor = {
|
|
3451
3514
|
get() {
|
|
3452
3515
|
// attribute: false — use internal storage only, no DOM sync
|
|
@@ -3582,12 +3645,15 @@ function queryAll(selector, options = {}) {
|
|
|
3582
3645
|
function watch(...propertyNames) {
|
|
3583
3646
|
return function (target, context) {
|
|
3584
3647
|
const methodName = context.name;
|
|
3585
|
-
const initKey = `__watch_init_${methodName}`;
|
|
3586
3648
|
context.addInitializer(function () {
|
|
3587
3649
|
const constructor = this.constructor;
|
|
3588
|
-
|
|
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))
|
|
3589
3655
|
return;
|
|
3590
|
-
constructor
|
|
3656
|
+
constructor.__watchMethods.add(target);
|
|
3591
3657
|
if (!constructor[PROPERTY_WATCHERS]) {
|
|
3592
3658
|
constructor[PROPERTY_WATCHERS] = new Map();
|
|
3593
3659
|
}
|
|
@@ -3658,12 +3724,14 @@ function context() {
|
|
|
3658
3724
|
}
|
|
3659
3725
|
function registerHandler(symbol, prefix, target, context, extra) {
|
|
3660
3726
|
const methodName = context.name;
|
|
3661
|
-
const initKey = `__${prefix}_init_${methodName}`;
|
|
3662
3727
|
context.addInitializer(function () {
|
|
3663
3728
|
const constructor = this.constructor;
|
|
3664
|
-
|
|
3729
|
+
const setKey = `__${prefix}Methods`;
|
|
3730
|
+
if (!constructor[setKey])
|
|
3731
|
+
constructor[setKey] = new Set();
|
|
3732
|
+
if (constructor[setKey].has(target))
|
|
3665
3733
|
return;
|
|
3666
|
-
constructor[
|
|
3734
|
+
constructor[setKey].add(target);
|
|
3667
3735
|
if (!constructor[symbol])
|
|
3668
3736
|
constructor[symbol] = [];
|
|
3669
3737
|
constructor[symbol].push({ methodName, method: target, ...extra });
|