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.
Files changed (305) hide show
  1. package/adapters/react/SniceProvider.js +1 -1
  2. package/adapters/react/SniceRouter.js +1 -1
  3. package/adapters/react/matchRoute.js +1 -1
  4. package/adapters/react/useRequestHandler.js +1 -1
  5. package/dist/cdn/accordion/snice-accordion.js +1 -1
  6. package/dist/cdn/accordion/snice-accordion.min.js +1 -1
  7. package/dist/cdn/action-bar/README.md +1 -1
  8. package/dist/cdn/action-bar/snice-action-bar.js +1 -1
  9. package/dist/cdn/action-bar/snice-action-bar.min.js +1 -1
  10. package/dist/cdn/activity-feed/snice-activity-feed.js +1 -1
  11. package/dist/cdn/activity-feed/snice-activity-feed.min.js +1 -1
  12. package/dist/cdn/alert/snice-alert.js +1 -1
  13. package/dist/cdn/alert/snice-alert.min.js +1 -1
  14. package/dist/cdn/app-tiles/snice-app-tiles.js +1 -1
  15. package/dist/cdn/app-tiles/snice-app-tiles.min.js +1 -1
  16. package/dist/cdn/approval-flow/snice-approval-flow.js +1 -1
  17. package/dist/cdn/approval-flow/snice-approval-flow.min.js +1 -1
  18. package/dist/cdn/audio-recorder/snice-audio-recorder.js +1 -1
  19. package/dist/cdn/audio-recorder/snice-audio-recorder.min.js +1 -1
  20. package/dist/cdn/availability/snice-availability.js +1 -1
  21. package/dist/cdn/availability/snice-availability.min.js +1 -1
  22. package/dist/cdn/avatar/snice-avatar.js +1 -1
  23. package/dist/cdn/avatar/snice-avatar.min.js +1 -1
  24. package/dist/cdn/avatar-group/snice-avatar-group.js +1 -1
  25. package/dist/cdn/avatar-group/snice-avatar-group.min.js +1 -1
  26. package/dist/cdn/badge/snice-badge.js +1 -1
  27. package/dist/cdn/badge/snice-badge.min.js +1 -1
  28. package/dist/cdn/banner/snice-banner.js +1 -1
  29. package/dist/cdn/banner/snice-banner.min.js +1 -1
  30. package/dist/cdn/binpack/snice-binpack.js +1 -1
  31. package/dist/cdn/binpack/snice-binpack.min.js +1 -1
  32. package/dist/cdn/book/snice-book.js +1 -1
  33. package/dist/cdn/book/snice-book.min.js +1 -1
  34. package/dist/cdn/booking/snice-booking.js +1 -1
  35. package/dist/cdn/booking/snice-booking.min.js +1 -1
  36. package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +1 -1
  37. package/dist/cdn/breadcrumbs/snice-breadcrumbs.min.js +1 -1
  38. package/dist/cdn/button/snice-button.js +1 -1
  39. package/dist/cdn/button/snice-button.min.js +1 -1
  40. package/dist/cdn/calendar/snice-calendar.js +1 -1
  41. package/dist/cdn/calendar/snice-calendar.min.js +1 -1
  42. package/dist/cdn/camera/snice-camera.js +1 -1
  43. package/dist/cdn/camera/snice-camera.min.js +1 -1
  44. package/dist/cdn/camera-annotate/snice-camera-annotate.js +1 -1
  45. package/dist/cdn/camera-annotate/snice-camera-annotate.min.js +1 -1
  46. package/dist/cdn/candlestick/snice-candlestick.js +1 -1
  47. package/dist/cdn/candlestick/snice-candlestick.min.js +1 -1
  48. package/dist/cdn/card/snice-card.js +1 -1
  49. package/dist/cdn/card/snice-card.min.js +1 -1
  50. package/dist/cdn/carousel/snice-carousel.js +1 -1
  51. package/dist/cdn/carousel/snice-carousel.min.js +1 -1
  52. package/dist/cdn/cart/snice-cart.js +1 -1
  53. package/dist/cdn/cart/snice-cart.min.js +1 -1
  54. package/dist/cdn/chart/snice-chart.js +1 -1
  55. package/dist/cdn/chart/snice-chart.min.js +1 -1
  56. package/dist/cdn/chat/snice-chat.js +1 -1
  57. package/dist/cdn/chat/snice-chat.min.js +1 -1
  58. package/dist/cdn/checkbox/snice-checkbox.js +1 -1
  59. package/dist/cdn/checkbox/snice-checkbox.min.js +1 -1
  60. package/dist/cdn/chip/snice-chip.js +1 -1
  61. package/dist/cdn/chip/snice-chip.min.js +1 -1
  62. package/dist/cdn/code-block/snice-code-block.js +1 -1
  63. package/dist/cdn/code-block/snice-code-block.min.js +1 -1
  64. package/dist/cdn/color-display/snice-color-display.js +1 -1
  65. package/dist/cdn/color-display/snice-color-display.min.js +1 -1
  66. package/dist/cdn/color-picker/snice-color-picker.js +1 -1
  67. package/dist/cdn/color-picker/snice-color-picker.min.js +1 -1
  68. package/dist/cdn/command-palette/snice-command-palette.js +1 -1
  69. package/dist/cdn/command-palette/snice-command-palette.min.js +1 -1
  70. package/dist/cdn/comments/snice-comments.js +1 -1
  71. package/dist/cdn/comments/snice-comments.min.js +1 -1
  72. package/dist/cdn/countdown/snice-countdown.js +1 -1
  73. package/dist/cdn/countdown/snice-countdown.min.js +1 -1
  74. package/dist/cdn/cropper/snice-cropper.js +1 -1
  75. package/dist/cdn/cropper/snice-cropper.min.js +1 -1
  76. package/dist/cdn/data-card/snice-data-card.js +1 -1
  77. package/dist/cdn/data-card/snice-data-card.min.js +1 -1
  78. package/dist/cdn/date-picker/snice-date-picker.js +1 -1
  79. package/dist/cdn/date-picker/snice-date-picker.min.js +1 -1
  80. package/dist/cdn/date-range-picker/snice-date-range-picker.js +1 -1
  81. package/dist/cdn/date-range-picker/snice-date-range-picker.min.js +1 -1
  82. package/dist/cdn/date-time-picker/snice-date-time-picker.js +1 -1
  83. package/dist/cdn/date-time-picker/snice-date-time-picker.min.js +1 -1
  84. package/dist/cdn/diff/snice-diff.js +1 -1
  85. package/dist/cdn/diff/snice-diff.min.js +1 -1
  86. package/dist/cdn/divider/snice-divider.js +1 -1
  87. package/dist/cdn/divider/snice-divider.min.js +1 -1
  88. package/dist/cdn/doc/snice-doc.js +1 -1
  89. package/dist/cdn/doc/snice-doc.min.js +1 -1
  90. package/dist/cdn/draw/snice-draw.js +1 -1
  91. package/dist/cdn/draw/snice-draw.min.js +1 -1
  92. package/dist/cdn/drawer/snice-drawer.js +1 -1
  93. package/dist/cdn/drawer/snice-drawer.min.js +1 -1
  94. package/dist/cdn/empty-state/snice-empty-state.js +1 -1
  95. package/dist/cdn/empty-state/snice-empty-state.min.js +1 -1
  96. package/dist/cdn/estimate/snice-estimate.js +1 -1
  97. package/dist/cdn/estimate/snice-estimate.min.js +1 -1
  98. package/dist/cdn/file-gallery/snice-file-gallery.js +1 -1
  99. package/dist/cdn/file-gallery/snice-file-gallery.min.js +1 -1
  100. package/dist/cdn/file-upload/snice-file-upload.js +1 -1
  101. package/dist/cdn/file-upload/snice-file-upload.min.js +1 -1
  102. package/dist/cdn/flip-card/snice-flip-card.js +1 -1
  103. package/dist/cdn/flip-card/snice-flip-card.min.js +1 -1
  104. package/dist/cdn/flow/snice-flow.js +1 -1
  105. package/dist/cdn/flow/snice-flow.min.js +1 -1
  106. package/dist/cdn/form-layout/snice-form-layout.js +1 -1
  107. package/dist/cdn/form-layout/snice-form-layout.min.js +1 -1
  108. package/dist/cdn/funnel/snice-funnel.js +1 -1
  109. package/dist/cdn/funnel/snice-funnel.min.js +1 -1
  110. package/dist/cdn/gantt/snice-gantt.js +1 -1
  111. package/dist/cdn/gantt/snice-gantt.min.js +1 -1
  112. package/dist/cdn/gauge/snice-gauge.js +1 -1
  113. package/dist/cdn/gauge/snice-gauge.min.js +1 -1
  114. package/dist/cdn/grid/snice-grid.js +1 -1
  115. package/dist/cdn/grid/snice-grid.min.js +1 -1
  116. package/dist/cdn/heatmap/snice-heatmap.js +1 -1
  117. package/dist/cdn/heatmap/snice-heatmap.min.js +1 -1
  118. package/dist/cdn/image/snice-image.js +1 -1
  119. package/dist/cdn/image/snice-image.min.js +1 -1
  120. package/dist/cdn/input/snice-input.js +1 -1
  121. package/dist/cdn/input/snice-input.min.js +1 -1
  122. package/dist/cdn/invoice/snice-invoice.js +1 -1
  123. package/dist/cdn/invoice/snice-invoice.min.js +1 -1
  124. package/dist/cdn/kanban/snice-kanban.js +1 -1
  125. package/dist/cdn/kanban/snice-kanban.min.js +1 -1
  126. package/dist/cdn/key-value/snice-key-value.js +1 -1
  127. package/dist/cdn/key-value/snice-key-value.min.js +1 -1
  128. package/dist/cdn/kpi/snice-kpi.js +1 -1
  129. package/dist/cdn/kpi/snice-kpi.min.js +1 -1
  130. package/dist/cdn/layout/snice-layout.js +1 -1
  131. package/dist/cdn/layout/snice-layout.min.js +1 -1
  132. package/dist/cdn/leaderboard/snice-leaderboard.js +1 -1
  133. package/dist/cdn/leaderboard/snice-leaderboard.min.js +1 -1
  134. package/dist/cdn/link/snice-link.js +1 -1
  135. package/dist/cdn/link/snice-link.min.js +1 -1
  136. package/dist/cdn/link-preview/snice-link-preview.js +1 -1
  137. package/dist/cdn/link-preview/snice-link-preview.min.js +1 -1
  138. package/dist/cdn/list/snice-list.js +1 -1
  139. package/dist/cdn/list/snice-list.min.js +1 -1
  140. package/dist/cdn/location/snice-location.js +1 -1
  141. package/dist/cdn/location/snice-location.min.js +1 -1
  142. package/dist/cdn/login/snice-login.js +1 -1
  143. package/dist/cdn/login/snice-login.min.js +1 -1
  144. package/dist/cdn/map/snice-map.js +1 -1
  145. package/dist/cdn/map/snice-map.min.js +1 -1
  146. package/dist/cdn/markdown/snice-markdown.js +1 -1
  147. package/dist/cdn/markdown/snice-markdown.min.js +1 -1
  148. package/dist/cdn/masonry/snice-masonry.js +1 -1
  149. package/dist/cdn/masonry/snice-masonry.min.js +1 -1
  150. package/dist/cdn/menu/snice-menu.js +1 -1
  151. package/dist/cdn/menu/snice-menu.min.js +1 -1
  152. package/dist/cdn/message-strip/snice-message-strip.js +1 -1
  153. package/dist/cdn/message-strip/snice-message-strip.min.js +1 -1
  154. package/dist/cdn/metric-table/snice-metric-table.js +1 -1
  155. package/dist/cdn/metric-table/snice-metric-table.min.js +1 -1
  156. package/dist/cdn/modal/snice-modal.js +1 -1
  157. package/dist/cdn/modal/snice-modal.min.js +1 -1
  158. package/dist/cdn/music-player/snice-music-player.js +1 -1
  159. package/dist/cdn/music-player/snice-music-player.min.js +1 -1
  160. package/dist/cdn/nav/snice-nav.js +1 -1
  161. package/dist/cdn/nav/snice-nav.min.js +1 -1
  162. package/dist/cdn/network-graph/snice-network-graph.js +1 -1
  163. package/dist/cdn/network-graph/snice-network-graph.min.js +1 -1
  164. package/dist/cdn/notification-center/snice-notification-center.js +1 -1
  165. package/dist/cdn/notification-center/snice-notification-center.min.js +1 -1
  166. package/dist/cdn/order-tracker/snice-order-tracker.js +1 -1
  167. package/dist/cdn/order-tracker/snice-order-tracker.min.js +1 -1
  168. package/dist/cdn/org-chart/snice-org-chart.js +1 -1
  169. package/dist/cdn/org-chart/snice-org-chart.min.js +1 -1
  170. package/dist/cdn/pagination/snice-pagination.js +1 -1
  171. package/dist/cdn/pagination/snice-pagination.min.js +1 -1
  172. package/dist/cdn/paint/snice-paint.js +1 -1
  173. package/dist/cdn/paint/snice-paint.min.js +1 -1
  174. package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +1 -1
  175. package/dist/cdn/pdf-viewer/snice-pdf-viewer.min.js +1 -1
  176. package/dist/cdn/permission-matrix/snice-permission-matrix.js +1 -1
  177. package/dist/cdn/permission-matrix/snice-permission-matrix.min.js +1 -1
  178. package/dist/cdn/podcast-player/snice-podcast-player.js +1 -1
  179. package/dist/cdn/podcast-player/snice-podcast-player.min.js +1 -1
  180. package/dist/cdn/pricing-table/snice-pricing-table.js +1 -1
  181. package/dist/cdn/pricing-table/snice-pricing-table.min.js +1 -1
  182. package/dist/cdn/product-card/snice-product-card.js +1 -1
  183. package/dist/cdn/product-card/snice-product-card.min.js +1 -1
  184. package/dist/cdn/progress/snice-progress.js +1 -1
  185. package/dist/cdn/progress/snice-progress.min.js +1 -1
  186. package/dist/cdn/progress-ring/snice-progress-ring.js +1 -1
  187. package/dist/cdn/progress-ring/snice-progress-ring.min.js +1 -1
  188. package/dist/cdn/qr-code/snice-qr-code.js +1 -1
  189. package/dist/cdn/qr-code/snice-qr-code.min.js +1 -1
  190. package/dist/cdn/qr-reader/snice-qr-reader.js +1 -1
  191. package/dist/cdn/qr-reader/snice-qr-reader.min.js +1 -1
  192. package/dist/cdn/radio/snice-radio.js +1 -1
  193. package/dist/cdn/radio/snice-radio.min.js +1 -1
  194. package/dist/cdn/range-slider/snice-range-slider.js +1 -1
  195. package/dist/cdn/range-slider/snice-range-slider.min.js +1 -1
  196. package/dist/cdn/rating/snice-rating.js +1 -1
  197. package/dist/cdn/rating/snice-rating.min.js +1 -1
  198. package/dist/cdn/receipt/snice-receipt.js +1 -1
  199. package/dist/cdn/receipt/snice-receipt.min.js +1 -1
  200. package/dist/cdn/recipe/snice-recipe.js +1 -1
  201. package/dist/cdn/recipe/snice-recipe.min.js +1 -1
  202. package/dist/cdn/runtime/README.md +2 -2
  203. package/dist/cdn/runtime/snice-runtime.esm.js +99 -31
  204. package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
  205. package/dist/cdn/runtime/snice-runtime.esm.min.js +8 -8
  206. package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
  207. package/dist/cdn/runtime/snice-runtime.js +99 -31
  208. package/dist/cdn/runtime/snice-runtime.js.map +1 -1
  209. package/dist/cdn/runtime/snice-runtime.min.js +8 -8
  210. package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
  211. package/dist/cdn/sankey/snice-sankey.js +1 -1
  212. package/dist/cdn/sankey/snice-sankey.min.js +1 -1
  213. package/dist/cdn/segmented-control/snice-segmented-control.js +1 -1
  214. package/dist/cdn/segmented-control/snice-segmented-control.min.js +1 -1
  215. package/dist/cdn/select/snice-select.js +1 -1
  216. package/dist/cdn/select/snice-select.min.js +1 -1
  217. package/dist/cdn/skeleton/snice-skeleton.js +1 -1
  218. package/dist/cdn/skeleton/snice-skeleton.min.js +1 -1
  219. package/dist/cdn/slider/snice-slider.js +1 -1
  220. package/dist/cdn/slider/snice-slider.min.js +1 -1
  221. package/dist/cdn/sortable/snice-sortable.js +1 -1
  222. package/dist/cdn/sortable/snice-sortable.min.js +1 -1
  223. package/dist/cdn/sparkline/snice-sparkline.js +1 -1
  224. package/dist/cdn/sparkline/snice-sparkline.min.js +1 -1
  225. package/dist/cdn/spinner/snice-spinner.js +1 -1
  226. package/dist/cdn/spinner/snice-spinner.min.js +1 -1
  227. package/dist/cdn/split-button/snice-split-button.js +1 -1
  228. package/dist/cdn/split-button/snice-split-button.min.js +1 -1
  229. package/dist/cdn/split-pane/snice-split-pane.js +1 -1
  230. package/dist/cdn/split-pane/snice-split-pane.min.js +1 -1
  231. package/dist/cdn/spotlight/snice-spotlight.js +1 -1
  232. package/dist/cdn/spotlight/snice-spotlight.min.js +1 -1
  233. package/dist/cdn/spreadsheet/snice-spreadsheet.js +1 -1
  234. package/dist/cdn/spreadsheet/snice-spreadsheet.min.js +1 -1
  235. package/dist/cdn/stat-group/snice-stat-group.js +1 -1
  236. package/dist/cdn/stat-group/snice-stat-group.min.js +1 -1
  237. package/dist/cdn/step-input/snice-step-input.js +1 -1
  238. package/dist/cdn/step-input/snice-step-input.min.js +1 -1
  239. package/dist/cdn/stepper/snice-stepper.js +1 -1
  240. package/dist/cdn/stepper/snice-stepper.min.js +1 -1
  241. package/dist/cdn/switch/snice-switch.js +1 -1
  242. package/dist/cdn/switch/snice-switch.min.js +1 -1
  243. package/dist/cdn/table/snice-table.js +1 -1
  244. package/dist/cdn/table/snice-table.min.js +1 -1
  245. package/dist/cdn/tabs/snice-tabs.js +1 -1
  246. package/dist/cdn/tabs/snice-tabs.min.js +1 -1
  247. package/dist/cdn/tag/snice-tag.js +1 -1
  248. package/dist/cdn/tag/snice-tag.min.js +1 -1
  249. package/dist/cdn/tag-input/snice-tag-input.js +1 -1
  250. package/dist/cdn/tag-input/snice-tag-input.min.js +1 -1
  251. package/dist/cdn/terminal/snice-terminal.js +1 -1
  252. package/dist/cdn/terminal/snice-terminal.min.js +1 -1
  253. package/dist/cdn/testimonial/snice-testimonial.js +1 -1
  254. package/dist/cdn/testimonial/snice-testimonial.min.js +1 -1
  255. package/dist/cdn/textarea/snice-textarea.js +1 -1
  256. package/dist/cdn/textarea/snice-textarea.min.js +1 -1
  257. package/dist/cdn/time-picker/snice-time-picker.js +1 -1
  258. package/dist/cdn/time-picker/snice-time-picker.min.js +1 -1
  259. package/dist/cdn/time-range-picker/snice-time-range-picker.js +1 -1
  260. package/dist/cdn/time-range-picker/snice-time-range-picker.min.js +1 -1
  261. package/dist/cdn/timeline/snice-timeline.js +1 -1
  262. package/dist/cdn/timeline/snice-timeline.min.js +1 -1
  263. package/dist/cdn/timer/snice-timer.js +1 -1
  264. package/dist/cdn/timer/snice-timer.min.js +1 -1
  265. package/dist/cdn/toast/snice-toast.js +1 -1
  266. package/dist/cdn/toast/snice-toast.min.js +1 -1
  267. package/dist/cdn/tooltip/snice-tooltip.js +1 -1
  268. package/dist/cdn/tooltip/snice-tooltip.min.js +1 -1
  269. package/dist/cdn/tree/snice-tree.js +1 -1
  270. package/dist/cdn/tree/snice-tree.min.js +1 -1
  271. package/dist/cdn/treemap/snice-treemap.js +1 -1
  272. package/dist/cdn/treemap/snice-treemap.min.js +1 -1
  273. package/dist/cdn/user-card/snice-user-card.js +1 -1
  274. package/dist/cdn/user-card/snice-user-card.min.js +1 -1
  275. package/dist/cdn/video-player/snice-video-player.js +1 -1
  276. package/dist/cdn/video-player/snice-video-player.min.js +1 -1
  277. package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +1 -1
  278. package/dist/cdn/virtual-scroller/snice-virtual-scroller.min.js +1 -1
  279. package/dist/cdn/waterfall/snice-waterfall.js +1 -1
  280. package/dist/cdn/waterfall/snice-waterfall.min.js +1 -1
  281. package/dist/cdn/weather/snice-weather.js +1 -1
  282. package/dist/cdn/weather/snice-weather.min.js +1 -1
  283. package/dist/cdn/work-order/snice-work-order.js +1 -1
  284. package/dist/cdn/work-order/snice-work-order.min.js +1 -1
  285. package/dist/index.cjs +96 -28
  286. package/dist/index.cjs.map +1 -1
  287. package/dist/index.esm.js +96 -28
  288. package/dist/index.esm.js.map +1 -1
  289. package/dist/index.iife.js +96 -28
  290. package/dist/index.iife.js.map +1 -1
  291. package/dist/react/SniceProvider.js +1 -1
  292. package/dist/react/SniceRouter.js +1 -1
  293. package/dist/react/index.js +1 -1
  294. package/dist/react/matchRoute.js +1 -1
  295. package/dist/react/useRequestHandler.js +1 -1
  296. package/dist/symbols.cjs +3 -1
  297. package/dist/symbols.cjs.map +1 -1
  298. package/dist/symbols.d.ts +1 -0
  299. package/dist/symbols.esm.js +3 -2
  300. package/dist/symbols.esm.js.map +1 -1
  301. package/dist/transitions.cjs +1 -1
  302. package/dist/transitions.esm.js +1 -1
  303. package/docs/ai/patterns.md +28 -0
  304. package/docs/elements.md +79 -0
  305. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * snice v4.35.0
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[initKey])
492
+ if (!constructor.__observeMethods)
493
+ constructor.__observeMethods = new Set();
494
+ if (constructor.__observeMethods.has(target))
493
495
  return;
494
- constructor[initKey] = true;
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[initKey])
909
+ if (!constructor.__respondMethods)
910
+ constructor.__respondMethods = new Set();
911
+ if (constructor.__respondMethods.has(target))
909
912
  return;
910
- constructor[initKey] = true;
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
- // Only initialize once per class, not per instance
2257
- if (constructor[initKey]) {
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[initKey])
2759
+ if (!constructor.__contextMethods)
2760
+ constructor.__contextMethods = new Set();
2761
+ if (constructor.__contextMethods.has(originalMethod))
2758
2762
  return;
2759
- constructor[initKey] = true;
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
- // Store the styles method
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 (result.styleSheet && 'adoptedStyleSheets' in element.shadowRoot) {
3115
- element.shadowRoot.adoptedStyleSheets = [result.styleSheet];
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 = result.cssText;
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 on first access
3449
- if (!Object.hasOwn(this.constructor.prototype, propertyKey)) {
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
- if (constructor[initKey])
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[initKey] = true;
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
- if (constructor[initKey])
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[initKey] = true;
3734
+ constructor[setKey].add(target);
3667
3735
  if (!constructor[symbol])
3668
3736
  constructor[symbol] = [];
3669
3737
  constructor[symbol].push({ methodName, method: target, ...extra });