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.cjs
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.
|
|
@@ -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,14 +3132,16 @@ 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
|
|
3119
|
-
const
|
|
3120
|
-
|
|
3121
|
-
|
|
3139
|
+
// Fallback — one <style> tag per stylesheet, preserving cascade order
|
|
3140
|
+
for (const r of allResults) {
|
|
3141
|
+
const style = document.createElement('style');
|
|
3142
|
+
style.textContent = r.cssText;
|
|
3143
|
+
element.shadowRoot.appendChild(style);
|
|
3144
|
+
}
|
|
3122
3145
|
}
|
|
3123
3146
|
catch (error) {
|
|
3124
3147
|
console.error('Error applying styles:', error);
|
|
@@ -3391,7 +3414,45 @@ function applyElementFunctionality(constructor) {
|
|
|
3391
3414
|
}
|
|
3392
3415
|
};
|
|
3393
3416
|
}
|
|
3417
|
+
/**
|
|
3418
|
+
* Walk the prototype chain and merge parent element metadata into the child.
|
|
3419
|
+
* Called once at class definition time — zero per-instance cost.
|
|
3420
|
+
* Skips plain HTMLElement (no metadata to merge).
|
|
3421
|
+
*
|
|
3422
|
+
* Only merges PROPERTIES (stored via context.metadata at decoration time)
|
|
3423
|
+
* and formAssociated. Other handler registrations (@watch, @on, @ready, etc.)
|
|
3424
|
+
* inherit automatically via TC39 addInitializer — parent initializers run
|
|
3425
|
+
* during child instance construction.
|
|
3426
|
+
*/
|
|
3427
|
+
function mergeParentMetadata(constructor) {
|
|
3428
|
+
let parent = Object.getPrototypeOf(constructor);
|
|
3429
|
+
// Collect ancestors bottom-up, then merge top-down so the deepest parent goes first
|
|
3430
|
+
const ancestors = [];
|
|
3431
|
+
while (parent && parent !== HTMLElement && parent !== Function.prototype) {
|
|
3432
|
+
ancestors.push(parent);
|
|
3433
|
+
parent = Object.getPrototypeOf(parent);
|
|
3434
|
+
}
|
|
3435
|
+
ancestors.reverse();
|
|
3436
|
+
for (const ancestor of ancestors) {
|
|
3437
|
+
// Properties (Map) — parent first, child overrides
|
|
3438
|
+
if (ancestor[PROPERTIES]) {
|
|
3439
|
+
if (!constructor[PROPERTIES])
|
|
3440
|
+
constructor[PROPERTIES] = new Map();
|
|
3441
|
+
for (const [key, value] of ancestor[PROPERTIES]) {
|
|
3442
|
+
if (!constructor[PROPERTIES].has(key)) {
|
|
3443
|
+
constructor[PROPERTIES].set(key, value);
|
|
3444
|
+
}
|
|
3445
|
+
}
|
|
3446
|
+
}
|
|
3447
|
+
// formAssociated — inherit if parent is form-associated
|
|
3448
|
+
if (ancestor.formAssociated && !constructor.formAssociated) {
|
|
3449
|
+
constructor.formAssociated = true;
|
|
3450
|
+
}
|
|
3451
|
+
}
|
|
3452
|
+
}
|
|
3394
3453
|
function defineElement(tagName, constructor, context, options) {
|
|
3454
|
+
// Merge metadata from parent @element classes (inheritance support)
|
|
3455
|
+
mergeParentMetadata(constructor);
|
|
3395
3456
|
if (context.metadata && context.metadata[PROPERTIES]) {
|
|
3396
3457
|
if (!constructor[PROPERTIES])
|
|
3397
3458
|
constructor[PROPERTIES] = new Map();
|
|
@@ -3445,8 +3506,12 @@ function property(options) {
|
|
|
3445
3506
|
}
|
|
3446
3507
|
// Always store property options on constructor for runtime access
|
|
3447
3508
|
constructor[PROPERTIES].set(propertyKey, finalOptions);
|
|
3448
|
-
// Set up the property descriptor
|
|
3449
|
-
|
|
3509
|
+
// Set up the property descriptor — re-define if a subclass overrides
|
|
3510
|
+
// the property with different options (different closure captures)
|
|
3511
|
+
const definerKey = `__propDef_${propertyKey}`;
|
|
3512
|
+
const existingDefiner = this.constructor.prototype[definerKey];
|
|
3513
|
+
if (!existingDefiner || existingDefiner !== options) {
|
|
3514
|
+
this.constructor.prototype[definerKey] = options;
|
|
3450
3515
|
const descriptor = {
|
|
3451
3516
|
get() {
|
|
3452
3517
|
// attribute: false — use internal storage only, no DOM sync
|
|
@@ -3582,12 +3647,15 @@ function queryAll(selector, options = {}) {
|
|
|
3582
3647
|
function watch(...propertyNames) {
|
|
3583
3648
|
return function (target, context) {
|
|
3584
3649
|
const methodName = context.name;
|
|
3585
|
-
const initKey = `__watch_init_${methodName}`;
|
|
3586
3650
|
context.addInitializer(function () {
|
|
3587
3651
|
const constructor = this.constructor;
|
|
3588
|
-
|
|
3652
|
+
// Dedup by method reference — allows child classes to register
|
|
3653
|
+
// their own method with the same name as a parent's
|
|
3654
|
+
if (!constructor.__watchMethods)
|
|
3655
|
+
constructor.__watchMethods = new Set();
|
|
3656
|
+
if (constructor.__watchMethods.has(target))
|
|
3589
3657
|
return;
|
|
3590
|
-
constructor
|
|
3658
|
+
constructor.__watchMethods.add(target);
|
|
3591
3659
|
if (!constructor[PROPERTY_WATCHERS]) {
|
|
3592
3660
|
constructor[PROPERTY_WATCHERS] = new Map();
|
|
3593
3661
|
}
|
|
@@ -3658,12 +3726,14 @@ function context() {
|
|
|
3658
3726
|
}
|
|
3659
3727
|
function registerHandler(symbol, prefix, target, context, extra) {
|
|
3660
3728
|
const methodName = context.name;
|
|
3661
|
-
const initKey = `__${prefix}_init_${methodName}`;
|
|
3662
3729
|
context.addInitializer(function () {
|
|
3663
3730
|
const constructor = this.constructor;
|
|
3664
|
-
|
|
3731
|
+
const setKey = `__${prefix}Methods`;
|
|
3732
|
+
if (!constructor[setKey])
|
|
3733
|
+
constructor[setKey] = new Set();
|
|
3734
|
+
if (constructor[setKey].has(target))
|
|
3665
3735
|
return;
|
|
3666
|
-
constructor[
|
|
3736
|
+
constructor[setKey].add(target);
|
|
3667
3737
|
if (!constructor[symbol])
|
|
3668
3738
|
constructor[symbol] = [];
|
|
3669
3739
|
constructor[symbol].push({ methodName, method: target, ...extra });
|