@mhmo91/schmancy 0.4.78 → 0.4.80

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 (326) hide show
  1. package/ai/area.md +223 -11
  2. package/ai/content-drawer.md +59 -26
  3. package/dist/ai/area.md +223 -11
  4. package/dist/ai/content-drawer.md +59 -26
  5. package/dist/{animated-text-g3SZFDmS.js → animated-text-DF5iHL66.js} +3 -3
  6. package/dist/{animated-text-g3SZFDmS.js.map → animated-text-DF5iHL66.js.map} +1 -1
  7. package/dist/{animated-text-DRQbkLfM.cjs → animated-text-Ra7G35tz.cjs} +2 -2
  8. package/dist/{animated-text-DRQbkLfM.cjs.map → animated-text-Ra7G35tz.cjs.map} +1 -1
  9. package/dist/animated-text.cjs +1 -1
  10. package/dist/animated-text.js +1 -1
  11. package/dist/area.cjs +1 -1
  12. package/dist/area.js +13 -12
  13. package/dist/{autocomplete-Ci--5JBi.cjs → autocomplete-0qgkJELR.cjs} +2 -2
  14. package/dist/{autocomplete-Ci--5JBi.cjs.map → autocomplete-0qgkJELR.cjs.map} +1 -1
  15. package/dist/{autocomplete-CC5cqaLd.js → autocomplete-DNTo7fHJ.js} +3 -3
  16. package/dist/{autocomplete-CC5cqaLd.js.map → autocomplete-DNTo7fHJ.js.map} +1 -1
  17. package/dist/autocomplete.cjs +1 -1
  18. package/dist/autocomplete.js +1 -1
  19. package/dist/{avatar-Bsjv5OuH.cjs → avatar-Bws6p1iq.cjs} +20 -20
  20. package/dist/avatar-Bws6p1iq.cjs.map +1 -0
  21. package/dist/{avatar-CE8waacF.js → avatar-kpFZmTl5.js} +190 -172
  22. package/dist/avatar-kpFZmTl5.js.map +1 -0
  23. package/dist/badge.cjs +1 -1
  24. package/dist/badge.js +1 -1
  25. package/dist/{boat-B2l1E5Rr.js → boat-BEjCaneK.js} +2 -2
  26. package/dist/{boat-B2l1E5Rr.js.map → boat-BEjCaneK.js.map} +1 -1
  27. package/dist/{boat-DcrOCO10.cjs → boat-CsmB4RXa.cjs} +2 -2
  28. package/dist/{boat-DcrOCO10.cjs.map → boat-CsmB4RXa.cjs.map} +1 -1
  29. package/dist/boat.cjs +1 -1
  30. package/dist/boat.js +1 -1
  31. package/dist/busy.cjs +1 -1
  32. package/dist/busy.js +1 -1
  33. package/dist/button.cjs +1 -1
  34. package/dist/button.js +1 -1
  35. package/dist/card.cjs +1 -1
  36. package/dist/card.js +1 -1
  37. package/dist/{checkbox-CJvEHu71.cjs → checkbox-D6bUTeG8.cjs} +2 -2
  38. package/dist/{checkbox-CJvEHu71.cjs.map → checkbox-D6bUTeG8.cjs.map} +1 -1
  39. package/dist/{checkbox-B9hlaRM7.js → checkbox-k9tWSA4E.js} +2 -2
  40. package/dist/{checkbox-B9hlaRM7.js.map → checkbox-k9tWSA4E.js.map} +1 -1
  41. package/dist/checkbox.cjs +1 -1
  42. package/dist/checkbox.js +1 -1
  43. package/dist/{chips-DSvkYUqs.cjs → chips-CtbapOaS.cjs} +2 -2
  44. package/dist/{chips-DSvkYUqs.cjs.map → chips-CtbapOaS.cjs.map} +1 -1
  45. package/dist/{chips-Bnjcoior.js → chips-DO6f95nV.js} +3 -3
  46. package/dist/{chips-Bnjcoior.js.map → chips-DO6f95nV.js.map} +1 -1
  47. package/dist/chips.cjs +1 -1
  48. package/dist/chips.js +1 -1
  49. package/dist/code-highlight.cjs +1 -1
  50. package/dist/code-highlight.js +1 -1
  51. package/dist/{code-preview-BevWoQxu.cjs → code-preview-DGkqHYdn.cjs} +2 -2
  52. package/dist/{code-preview-BevWoQxu.cjs.map → code-preview-DGkqHYdn.cjs.map} +1 -1
  53. package/dist/{code-preview-yJ3NA98_.js → code-preview-djAAzZxj.js} +2 -2
  54. package/dist/{code-preview-yJ3NA98_.js.map → code-preview-djAAzZxj.js.map} +1 -1
  55. package/dist/components.cjs +1 -1
  56. package/dist/components.js +1 -1
  57. package/dist/content-drawer.cjs +1 -1
  58. package/dist/content-drawer.js +1 -1
  59. package/dist/{date-range-KVvpeqYQ.js → date-range-CHJqdE9Y.js} +3 -3
  60. package/dist/{date-range-KVvpeqYQ.js.map → date-range-CHJqdE9Y.js.map} +1 -1
  61. package/dist/{date-range-CHGkfVeE.cjs → date-range-Dfw7LxKv.cjs} +2 -2
  62. package/dist/{date-range-CHGkfVeE.cjs.map → date-range-Dfw7LxKv.cjs.map} +1 -1
  63. package/dist/{date-range-inline-BagnhxPn.cjs → date-range-inline-CBOrdNiP.cjs} +2 -2
  64. package/dist/{date-range-inline-BagnhxPn.cjs.map → date-range-inline-CBOrdNiP.cjs.map} +1 -1
  65. package/dist/{date-range-inline-BRnyYe_e.js → date-range-inline-dlZb5tJg.js} +3 -3
  66. package/dist/{date-range-inline-BRnyYe_e.js.map → date-range-inline-dlZb5tJg.js.map} +1 -1
  67. package/dist/date-range-inline.cjs +1 -1
  68. package/dist/date-range-inline.js +1 -1
  69. package/dist/date-range.cjs +1 -1
  70. package/dist/date-range.js +1 -1
  71. package/dist/{delay-AjA5MI5M.js → delay-BP5SfQRo.js} +2 -2
  72. package/dist/{delay-AjA5MI5M.js.map → delay-BP5SfQRo.js.map} +1 -1
  73. package/dist/{delay-0Ffc_SU2.cjs → delay-DFB3_NEH.cjs} +2 -2
  74. package/dist/{delay-0Ffc_SU2.cjs.map → delay-DFB3_NEH.cjs.map} +1 -1
  75. package/dist/delay.cjs +1 -1
  76. package/dist/delay.js +1 -1
  77. package/dist/{details-sROeZea4.js → details-Bd0PJpSd.js} +15 -14
  78. package/dist/details-Bd0PJpSd.js.map +1 -0
  79. package/dist/{details-CVpg9-ww.cjs → details-Cv8AMues.cjs} +7 -7
  80. package/dist/details-Cv8AMues.cjs.map +1 -0
  81. package/dist/details.cjs +1 -1
  82. package/dist/details.js +1 -1
  83. package/dist/{dialog-content-gK9U1OJy.js → dialog-content-8smVbEth.js} +3 -3
  84. package/dist/{dialog-content-gK9U1OJy.js.map → dialog-content-8smVbEth.js.map} +1 -1
  85. package/dist/{dialog-content-B6gtCmhY.cjs → dialog-content-CURTuo8R.cjs} +2 -2
  86. package/dist/{dialog-content-B6gtCmhY.cjs.map → dialog-content-CURTuo8R.cjs.map} +1 -1
  87. package/dist/dialog.cjs +1 -1
  88. package/dist/dialog.js +1 -1
  89. package/dist/{divider-h24cqDki.cjs → divider-CVomKpEr.cjs} +2 -2
  90. package/dist/{divider-h24cqDki.cjs.map → divider-CVomKpEr.cjs.map} +1 -1
  91. package/dist/{divider-B64ylaDM.js → divider-DnyRwbTs.js} +3 -3
  92. package/dist/{divider-B64ylaDM.js.map → divider-DnyRwbTs.js.map} +1 -1
  93. package/dist/divider.cjs +1 -1
  94. package/dist/divider.js +1 -1
  95. package/dist/{dropdown-content-HfjqVeGY.js → dropdown-content-B1tXM7Vp.js} +3 -3
  96. package/dist/{dropdown-content-HfjqVeGY.js.map → dropdown-content-B1tXM7Vp.js.map} +1 -1
  97. package/dist/{dropdown-content-DhH9UtN_.cjs → dropdown-content-lZcMgCym.cjs} +2 -2
  98. package/dist/{dropdown-content-DhH9UtN_.cjs.map → dropdown-content-lZcMgCym.cjs.map} +1 -1
  99. package/dist/dropdown.cjs +1 -1
  100. package/dist/dropdown.js +1 -1
  101. package/dist/{email-recipients-CdGvSgPI.js → email-recipients-CQNYpvG7.js} +5 -5
  102. package/dist/{email-recipients-CdGvSgPI.js.map → email-recipients-CQNYpvG7.js.map} +1 -1
  103. package/dist/{email-recipients-DNLrlCJo.cjs → email-recipients-D2bcyJAi.cjs} +2 -2
  104. package/dist/{email-recipients-DNLrlCJo.cjs.map → email-recipients-D2bcyJAi.cjs.map} +1 -1
  105. package/dist/extra.cjs +1 -1
  106. package/dist/extra.js +1 -1
  107. package/dist/{flex-CDD6pPJp.js → flex-CQzrxgEP.js} +2 -2
  108. package/dist/{flex-CDD6pPJp.js.map → flex-CQzrxgEP.js.map} +1 -1
  109. package/dist/{flex-xzlCwqDU.cjs → flex-CbGwzfNX.cjs} +2 -2
  110. package/dist/{flex-xzlCwqDU.cjs.map → flex-CbGwzfNX.cjs.map} +1 -1
  111. package/dist/{form-Cmb3eiuu.cjs → form-Cid9N-2B.cjs} +2 -2
  112. package/dist/{form-Cmb3eiuu.cjs.map → form-Cid9N-2B.cjs.map} +1 -1
  113. package/dist/{form-DRDWGFYA.js → form-DcKKSUWi.js} +2 -2
  114. package/dist/{form-DRDWGFYA.js.map → form-DcKKSUWi.js.map} +1 -1
  115. package/dist/form.cjs +1 -1
  116. package/dist/form.js +1 -1
  117. package/dist/{formField.mixin-DO6xZKm5.js → formField.mixin-C5U1Rh5p.js} +2 -2
  118. package/dist/{formField.mixin-DO6xZKm5.js.map → formField.mixin-C5U1Rh5p.js.map} +1 -1
  119. package/dist/{formField.mixin-CAILHzv1.cjs → formField.mixin-DtuGCitn.cjs} +2 -2
  120. package/dist/{formField.mixin-CAILHzv1.cjs.map → formField.mixin-DtuGCitn.cjs.map} +1 -1
  121. package/dist/{icon-G21hWtIP.cjs → icon-7uflQBUI.cjs} +2 -2
  122. package/dist/{icon-G21hWtIP.cjs.map → icon-7uflQBUI.cjs.map} +1 -1
  123. package/dist/{icon-Covxs_tz.js → icon-DF5RpNTK.js} +2 -2
  124. package/dist/{icon-Covxs_tz.js.map → icon-DF5RpNTK.js.map} +1 -1
  125. package/dist/{icon-button-jmuc0Alp.js → icon-button-Bol0a-v7.js} +3 -3
  126. package/dist/{icon-button-jmuc0Alp.js.map → icon-button-Bol0a-v7.js.map} +1 -1
  127. package/dist/{icon-button-BJwbB-we.cjs → icon-button-D41ID2Fc.cjs} +2 -2
  128. package/dist/{icon-button-BJwbB-we.cjs.map → icon-button-D41ID2Fc.cjs.map} +1 -1
  129. package/dist/icons.cjs +1 -1
  130. package/dist/icons.js +1 -1
  131. package/dist/index.cjs +1 -1
  132. package/dist/index.js +207 -206
  133. package/dist/{input-BYUNvuUB.cjs → input-CcwnttG1.cjs} +2 -2
  134. package/dist/{input-BYUNvuUB.cjs.map → input-CcwnttG1.cjs.map} +1 -1
  135. package/dist/{input-D4SMX4Jy.js → input-ClFADkhf.js} +3 -3
  136. package/dist/{input-D4SMX4Jy.js.map → input-ClFADkhf.js.map} +1 -1
  137. package/dist/input.cjs +1 -1
  138. package/dist/input.js +1 -1
  139. package/dist/layout.cjs +1 -1
  140. package/dist/layout.js +1 -1
  141. package/dist/{utils-C9nzOWpR.cjs → lazy-DObpkuL6.cjs} +2 -2
  142. package/dist/lazy-DObpkuL6.cjs.map +1 -0
  143. package/dist/{utils-03Coa8AW.js → lazy-E2LCDm7n.js} +37 -23
  144. package/dist/lazy-E2LCDm7n.js.map +1 -0
  145. package/dist/{list-CjWyeyyf.cjs → list-BAjh6Ucg.cjs} +2 -2
  146. package/dist/{list-CjWyeyyf.cjs.map → list-BAjh6Ucg.cjs.map} +1 -1
  147. package/dist/{list-CFA9OIVl.js → list-CIFl0wDX.js} +2 -2
  148. package/dist/{list-CFA9OIVl.js.map → list-CIFl0wDX.js.map} +1 -1
  149. package/dist/list.cjs +1 -1
  150. package/dist/list.js +1 -1
  151. package/dist/{litElement.mixin-BAbHXkqK.js → litElement.mixin-Cs2vwcM4.js} +2 -2
  152. package/dist/{litElement.mixin-BAbHXkqK.js.map → litElement.mixin-Cs2vwcM4.js.map} +1 -1
  153. package/dist/{litElement.mixin-D-9tQapF.cjs → litElement.mixin-DiSo_YRo.cjs} +2 -2
  154. package/dist/{litElement.mixin-D-9tQapF.cjs.map → litElement.mixin-DiSo_YRo.cjs.map} +1 -1
  155. package/dist/mailbox.cjs +1 -1
  156. package/dist/mailbox.js +1 -1
  157. package/dist/{map-BP7Tl3AA.js → map-DRXTbpex.js} +2 -2
  158. package/dist/{map-BP7Tl3AA.js.map → map-DRXTbpex.js.map} +1 -1
  159. package/dist/{map-CouhaoPu.cjs → map-wFoHnuTE.cjs} +2 -2
  160. package/dist/{map-CouhaoPu.cjs.map → map-wFoHnuTE.cjs.map} +1 -1
  161. package/dist/map.cjs +1 -1
  162. package/dist/map.js +1 -1
  163. package/dist/{media-LO5ZS0G2.cjs → media-DMXDyK_t.cjs} +2 -2
  164. package/dist/{media-LO5ZS0G2.cjs.map → media-DMXDyK_t.cjs.map} +1 -1
  165. package/dist/{media-C2mcgImc.js → media-DdD4d518.js} +2 -2
  166. package/dist/{media-C2mcgImc.js.map → media-DdD4d518.js.map} +1 -1
  167. package/dist/{menu-8jVWArTo.cjs → menu-D6djF8D7.cjs} +2 -2
  168. package/dist/{menu-8jVWArTo.cjs.map → menu-D6djF8D7.cjs.map} +1 -1
  169. package/dist/{menu-B7aYu4B3.js → menu-vSrpyy8w.js} +3 -3
  170. package/dist/{menu-B7aYu4B3.js.map → menu-vSrpyy8w.js.map} +1 -1
  171. package/dist/menu.cjs +1 -1
  172. package/dist/menu.js +1 -1
  173. package/dist/nav-drawer.cjs +1 -1
  174. package/dist/nav-drawer.js +1 -1
  175. package/dist/{notification-service-DH-r8CX3.js → notification-service-C5f9YdPY.js} +4 -4
  176. package/dist/{notification-service-DH-r8CX3.js.map → notification-service-C5f9YdPY.js.map} +1 -1
  177. package/dist/{notification-service-CWE4m7yx.cjs → notification-service-CnVFGj74.cjs} +2 -2
  178. package/dist/{notification-service-CWE4m7yx.cjs.map → notification-service-CnVFGj74.cjs.map} +1 -1
  179. package/dist/notification.cjs +1 -1
  180. package/dist/notification.js +2 -2
  181. package/dist/{notify-Bf1XwAns.js → notify-CuQyUgsU.js} +2 -2
  182. package/dist/{notify-Bf1XwAns.js.map → notify-CuQyUgsU.js.map} +1 -1
  183. package/dist/{notify-DpoCJiWh.cjs → notify-DtUM_vBe.cjs} +2 -2
  184. package/dist/{notify-DpoCJiWh.cjs.map → notify-DtUM_vBe.cjs.map} +1 -1
  185. package/dist/{option-DSgxIixo.js → option-CMyac-XQ.js} +2 -2
  186. package/dist/{option-DSgxIixo.js.map → option-CMyac-XQ.js.map} +1 -1
  187. package/dist/{option-BXYy12E9.cjs → option-D22bslGV.cjs} +2 -2
  188. package/dist/{option-BXYy12E9.cjs.map → option-D22bslGV.cjs.map} +1 -1
  189. package/dist/option.cjs +1 -1
  190. package/dist/option.js +1 -1
  191. package/dist/{payment-card-form-CiQFlAd7.js → payment-card-form-C2rSfNUB.js} +3 -3
  192. package/dist/{payment-card-form-CiQFlAd7.js.map → payment-card-form-C2rSfNUB.js.map} +1 -1
  193. package/dist/{payment-card-form-hMvGeUlj.cjs → payment-card-form-CIo6Jvh4.cjs} +2 -2
  194. package/dist/{payment-card-form-hMvGeUlj.cjs.map → payment-card-form-CIo6Jvh4.cjs.map} +1 -1
  195. package/dist/{progress--X8m6TMu.cjs → progress-Cz6acdfO.cjs} +2 -2
  196. package/dist/{progress--X8m6TMu.cjs.map → progress-Cz6acdfO.cjs.map} +1 -1
  197. package/dist/{progress-C2uSNdat.js → progress-CzZkkBKS.js} +2 -2
  198. package/dist/{progress-C2uSNdat.js.map → progress-CzZkkBKS.js.map} +1 -1
  199. package/dist/progress.cjs +1 -1
  200. package/dist/progress.js +1 -1
  201. package/dist/{radio-button-DveKJXMv.js → radio-button-CvhN1gWj.js} +3 -3
  202. package/dist/{radio-button-DveKJXMv.js.map → radio-button-CvhN1gWj.js.map} +1 -1
  203. package/dist/{radio-button-CiVKoIT_.cjs → radio-button-XTjTthrJ.cjs} +2 -2
  204. package/dist/{radio-button-CiVKoIT_.cjs.map → radio-button-XTjTthrJ.cjs.map} +1 -1
  205. package/dist/radio-group.cjs +1 -1
  206. package/dist/radio-group.js +1 -1
  207. package/dist/route.component-5LuJ2r6W.js +311 -0
  208. package/dist/route.component-5LuJ2r6W.js.map +1 -0
  209. package/dist/route.component-DR82kcmu.cjs +12 -0
  210. package/dist/route.component-DR82kcmu.cjs.map +1 -0
  211. package/dist/{schmancy-steps-container-BqkjJuas.cjs → schmancy-steps-container-CDj0iFPm.cjs} +2 -2
  212. package/dist/{schmancy-steps-container-BqkjJuas.cjs.map → schmancy-steps-container-CDj0iFPm.cjs.map} +1 -1
  213. package/dist/{schmancy-steps-container-ESoWPRrj.js → schmancy-steps-container-DJdcHEVs.js} +2 -2
  214. package/dist/{schmancy-steps-container-ESoWPRrj.js.map → schmancy-steps-container-DJdcHEVs.js.map} +1 -1
  215. package/dist/{select-B5bog_rc.cjs → select-BZuUqcqv.cjs} +2 -2
  216. package/dist/{select-B5bog_rc.cjs.map → select-BZuUqcqv.cjs.map} +1 -1
  217. package/dist/{select-BuYzF_Iw.js → select-BnLSAqtO.js} +3 -3
  218. package/dist/{select-BuYzF_Iw.js.map → select-BnLSAqtO.js.map} +1 -1
  219. package/dist/select.cjs +1 -1
  220. package/dist/select.js +1 -1
  221. package/dist/{sheet-BABzrv-1.cjs → sheet-CSp5quAX.cjs} +2 -2
  222. package/dist/{sheet-BABzrv-1.cjs.map → sheet-CSp5quAX.cjs.map} +1 -1
  223. package/dist/{sheet-bz4c5b-T.js → sheet-CcKYre1L.js} +3 -3
  224. package/dist/{sheet-bz4c5b-T.js.map → sheet-CcKYre1L.js.map} +1 -1
  225. package/dist/sheet.cjs +1 -1
  226. package/dist/sheet.js +1 -1
  227. package/dist/{slider-BfUbDIgT.cjs → slider-CPJ-4yg4.cjs} +2 -2
  228. package/dist/{slider-BfUbDIgT.cjs.map → slider-CPJ-4yg4.cjs.map} +1 -1
  229. package/dist/{slider-DUslKIy9.js → slider-D36miB_e.js} +3 -3
  230. package/dist/{slider-DUslKIy9.js.map → slider-D36miB_e.js.map} +1 -1
  231. package/dist/slider.cjs +1 -1
  232. package/dist/slider.js +1 -1
  233. package/dist/{spinner-By_atmOD.js → spinner-1vMz2pLZ.js} +2 -2
  234. package/dist/{spinner-By_atmOD.js.map → spinner-1vMz2pLZ.js.map} +1 -1
  235. package/dist/{spinner-Cc7rjihp.cjs → spinner-uKeW1jVr.cjs} +2 -2
  236. package/dist/{spinner-Cc7rjihp.cjs.map → spinner-uKeW1jVr.cjs.map} +1 -1
  237. package/dist/steps.cjs +1 -1
  238. package/dist/steps.js +1 -1
  239. package/dist/{surface-VrM3qS7F.cjs → surface-DCAyIw6O.cjs} +2 -2
  240. package/dist/{surface-VrM3qS7F.cjs.map → surface-DCAyIw6O.cjs.map} +1 -1
  241. package/dist/{surface-BhZhEe42.js → surface-DWRvqMeW.js} +2 -2
  242. package/dist/{surface-BhZhEe42.js.map → surface-DWRvqMeW.js.map} +1 -1
  243. package/dist/surface.cjs +1 -1
  244. package/dist/surface.js +1 -1
  245. package/dist/{table-BFqqDT_a.js → table-BYOOIwQ3.js} +2 -2
  246. package/dist/{table-BFqqDT_a.js.map → table-BYOOIwQ3.js.map} +1 -1
  247. package/dist/{table-D8vVGDsm.cjs → table-N5w5txc8.cjs} +2 -2
  248. package/dist/{table-D8vVGDsm.cjs.map → table-N5w5txc8.cjs.map} +1 -1
  249. package/dist/table.cjs +1 -1
  250. package/dist/table.js +1 -1
  251. package/dist/{tabs-compatibility-CDJp1mVq.js → tabs-compatibility-BQZ_4rKO.js} +2 -2
  252. package/dist/{tabs-compatibility-CDJp1mVq.js.map → tabs-compatibility-BQZ_4rKO.js.map} +1 -1
  253. package/dist/{tabs-compatibility-Beep2dmJ.cjs → tabs-compatibility-B_0MOHRx.cjs} +2 -2
  254. package/dist/{tabs-compatibility-Beep2dmJ.cjs.map → tabs-compatibility-B_0MOHRx.cjs.map} +1 -1
  255. package/dist/tabs.cjs +1 -1
  256. package/dist/tabs.js +1 -1
  257. package/dist/{tailwind.mixin-C-CFqxyc.cjs → tailwind.mixin-BPLAZH0W.cjs} +2 -2
  258. package/dist/{tailwind.mixin-C-CFqxyc.cjs.map → tailwind.mixin-BPLAZH0W.cjs.map} +1 -1
  259. package/dist/{tailwind.mixin-DKEIPHTU.js → tailwind.mixin-NLG6hsRk.js} +13 -13
  260. package/dist/{tailwind.mixin-DKEIPHTU.js.map → tailwind.mixin-NLG6hsRk.js.map} +1 -1
  261. package/dist/teleport.cjs +1 -1
  262. package/dist/teleport.js +1 -1
  263. package/dist/{textarea-CKBc8MaP.js → textarea-B-BvDcvC.js} +2 -2
  264. package/dist/{textarea-CKBc8MaP.js.map → textarea-B-BvDcvC.js.map} +1 -1
  265. package/dist/{textarea-982Tz-HD.cjs → textarea-CfO-1Q7I.cjs} +2 -2
  266. package/dist/{textarea-982Tz-HD.cjs.map → textarea-CfO-1Q7I.cjs.map} +1 -1
  267. package/dist/textarea.cjs +1 -1
  268. package/dist/textarea.js +1 -1
  269. package/dist/{theme-button-CzZ4Fit6.js → theme-button-O8T2P7bp.js} +2 -2
  270. package/dist/{theme-button-CzZ4Fit6.js.map → theme-button-O8T2P7bp.js.map} +1 -1
  271. package/dist/{theme-button-DUfxeLbS.cjs → theme-button-QgQtIkNO.cjs} +2 -2
  272. package/dist/{theme-button-DUfxeLbS.cjs.map → theme-button-QgQtIkNO.cjs.map} +1 -1
  273. package/dist/theme-button.cjs +1 -1
  274. package/dist/theme-button.js +1 -1
  275. package/dist/theme.cjs +1 -1
  276. package/dist/{theme.component-C9v-CQ38.cjs → theme.component--fI9PP4Y.cjs} +2 -2
  277. package/dist/{theme.component-C9v-CQ38.cjs.map → theme.component--fI9PP4Y.cjs.map} +1 -1
  278. package/dist/{theme.component-CN4iX4D7.js → theme.component-z0OFbxq8.js} +2 -2
  279. package/dist/{theme.component-CN4iX4D7.js.map → theme.component-z0OFbxq8.js.map} +1 -1
  280. package/dist/theme.js +1 -1
  281. package/dist/{timezone-6nwGlMca.cjs → timezone-C8PYHpA5.cjs} +2 -2
  282. package/dist/{timezone-6nwGlMca.cjs.map → timezone-C8PYHpA5.cjs.map} +1 -1
  283. package/dist/{timezone-BkByuOmE.js → timezone-CeadXobB.js} +3 -3
  284. package/dist/{timezone-BkByuOmE.js.map → timezone-CeadXobB.js.map} +1 -1
  285. package/dist/{tooltip-D4-3EWiC.js → tooltip-DUuT16gi.js} +2 -2
  286. package/dist/{tooltip-D4-3EWiC.js.map → tooltip-DUuT16gi.js.map} +1 -1
  287. package/dist/{tooltip-Dr-qBoXc.cjs → tooltip-DxkXzv_5.cjs} +2 -2
  288. package/dist/{tooltip-Dr-qBoXc.cjs.map → tooltip-DxkXzv_5.cjs.map} +1 -1
  289. package/dist/tooltip.cjs +1 -1
  290. package/dist/tooltip.js +1 -1
  291. package/dist/{tree-NoODRr5i.cjs → tree-DD_zsKhj.cjs} +2 -2
  292. package/dist/{tree-NoODRr5i.cjs.map → tree-DD_zsKhj.cjs.map} +1 -1
  293. package/dist/{tree-CEY0Mytf.js → tree-YKMOXZkK.js} +2 -2
  294. package/dist/{tree-CEY0Mytf.js.map → tree-YKMOXZkK.js.map} +1 -1
  295. package/dist/tree.cjs +1 -1
  296. package/dist/tree.js +1 -1
  297. package/dist/{typewriter-QBeyDi83.cjs → typewriter-BZQFLCSO.cjs} +2 -2
  298. package/dist/{typewriter-QBeyDi83.cjs.map → typewriter-BZQFLCSO.cjs.map} +1 -1
  299. package/dist/{typewriter-CKhWZwT5.js → typewriter-D0ocrgfy.js} +4 -4
  300. package/dist/{typewriter-CKhWZwT5.js.map → typewriter-D0ocrgfy.js.map} +1 -1
  301. package/dist/typewriter.cjs +1 -1
  302. package/dist/typewriter.js +1 -1
  303. package/dist/{typography-GrWLTd_e.js → typography-B813cueV.js} +2 -2
  304. package/dist/{typography-GrWLTd_e.js.map → typography-B813cueV.js.map} +1 -1
  305. package/dist/{typography-Cku79h5G.cjs → typography-C6a_0J8h.cjs} +2 -2
  306. package/dist/{typography-Cku79h5G.cjs.map → typography-C6a_0J8h.cjs.map} +1 -1
  307. package/dist/typography.cjs +1 -1
  308. package/dist/typography.js +1 -1
  309. package/package.json +1 -1
  310. package/types/src/area/area.component.d.ts +6 -36
  311. package/types/src/area/index.d.ts +1 -0
  312. package/types/src/area/lazy.d.ts +44 -0
  313. package/types/src/area/router.types.d.ts +3 -1
  314. package/types/src/content-drawer/drawer.d.ts +1 -1
  315. package/types/src/content-drawer/drawer.service.d.ts +20 -0
  316. package/types/src/content-drawer/index.d.ts +1 -1
  317. package/dist/avatar-Bsjv5OuH.cjs.map +0 -1
  318. package/dist/avatar-CE8waacF.js.map +0 -1
  319. package/dist/details-CVpg9-ww.cjs.map +0 -1
  320. package/dist/details-sROeZea4.js.map +0 -1
  321. package/dist/route.component-ByBNH4-B.cjs +0 -12
  322. package/dist/route.component-ByBNH4-B.cjs.map +0 -1
  323. package/dist/route.component-Cq9Bor4J.js +0 -341
  324. package/dist/route.component-Cq9Bor4J.js.map +0 -1
  325. package/dist/utils-03Coa8AW.js.map +0 -1
  326. package/dist/utils-C9nzOWpR.cjs.map +0 -1
package/ai/area.md CHANGED
@@ -429,10 +429,206 @@ class AppLayout extends LitElement {
429
429
  }
430
430
  ```
431
431
 
432
- ### 4. Dynamic Route Loading
432
+ ### 4. Dynamic Route Loading & Lazy Components
433
+
434
+ #### Using the `lazy()` helper function
435
+
436
+ Schmancy Area provides a powerful `lazy()` function similar to React.lazy() for optimal code splitting:
433
437
 
434
438
  ```typescript
435
- // Lazy load heavy components
439
+ import { lazy } from '@schmancy/area';
440
+
441
+ // Create lazy-loaded components
442
+ const LazyDashboard = lazy(() => import('./components/dashboard'));
443
+ const LazyAnalytics = lazy(() => import('./components/analytics'));
444
+ const LazyReports = lazy(() => import('./components/reports'));
445
+
446
+ // Use with area.push()
447
+ area.push({
448
+ component: LazyDashboard,
449
+ area: 'main'
450
+ });
451
+
452
+ // Use with declarative routes
453
+ <schmancy-route
454
+ when="/analytics"
455
+ .component=${LazyAnalytics}
456
+ .guard=${() => hasFeature('analytics') || '/upgrade'}>
457
+ </schmancy-route>
458
+
459
+ // Set as default for an area
460
+ <schmancy-area name="main" .default=${LazyDashboard}></schmancy-area>
461
+ ```
462
+
463
+ #### Preloading Components
464
+
465
+ Lazy components support preloading for better perceived performance:
466
+
467
+ ```typescript
468
+ const LazyProfile = lazy(() => import('./profile'));
469
+
470
+ // Preload on hover for instant navigation
471
+ button.addEventListener('mouseenter', () => {
472
+ LazyProfile.preload();
473
+ });
474
+
475
+ // Preload after initial page load
476
+ window.addEventListener('load', () => {
477
+ setTimeout(() => {
478
+ LazyProfile.preload();
479
+ LazySettings.preload();
480
+ }, 2000);
481
+ });
482
+ ```
483
+
484
+ #### Complete Example: Lazy-Loaded Navigation
485
+
486
+ ```typescript
487
+ import { $LitElement } from '@mixins/index';
488
+ import { area, lazy } from '@schmancy/area';
489
+ import { html } from 'lit';
490
+ import { customElement, state } from 'lit/decorators.js';
491
+
492
+ // Define lazy components with default exports
493
+ const routes = {
494
+ dashboard: lazy(() => import('./lazy-components/dashboard')),
495
+ users: lazy(() => import('./lazy-components/users')),
496
+ products: lazy(() => import('./lazy-components/products')),
497
+ reports: lazy(() => import('./lazy-components/reports')),
498
+ settings: lazy(() => import('./lazy-components/settings'))
499
+ };
500
+
501
+ @customElement('app-shell')
502
+ export class AppShell extends $LitElement() {
503
+ @state() private currentRoute = 'dashboard';
504
+
505
+ private navigate(route: string, component: any) {
506
+ this.currentRoute = route;
507
+ area.push({
508
+ area: 'main',
509
+ component: component
510
+ });
511
+ }
512
+
513
+ render() {
514
+ return html`
515
+ <div class="grid grid-cols-[auto_1fr]">
516
+ <!-- Sidebar Navigation -->
517
+ <schmancy-list>
518
+ <schmancy-list-item
519
+ ?selected=${this.currentRoute === 'dashboard'}
520
+ @click=${() => this.navigate('dashboard', routes.dashboard)}
521
+ @mouseenter=${() => routes.dashboard.preload()}>
522
+ <schmancy-icon slot="start">dashboard</schmancy-icon>
523
+ Dashboard
524
+ </schmancy-list-item>
525
+
526
+ <schmancy-list-item
527
+ ?selected=${this.currentRoute === 'users'}
528
+ @click=${() => this.navigate('users', routes.users)}
529
+ @mouseenter=${() => routes.users.preload()}>
530
+ <schmancy-icon slot="start">group</schmancy-icon>
531
+ Users
532
+ </schmancy-list-item>
533
+
534
+ <schmancy-list-item
535
+ ?selected=${this.currentRoute === 'products'}
536
+ @click=${() => this.navigate('products', routes.products)}
537
+ @mouseenter=${() => routes.products.preload()}>
538
+ <schmancy-icon slot="start">inventory_2</schmancy-icon>
539
+ Products
540
+ </schmancy-list-item>
541
+ </schmancy-list>
542
+
543
+ <!-- Main Content Area -->
544
+ <schmancy-area
545
+ name="main"
546
+ .default=${routes.dashboard}>
547
+ </schmancy-area>
548
+ </div>
549
+ `;
550
+ }
551
+ }
552
+ ```
553
+
554
+ #### Lazy Component Structure
555
+
556
+ Each lazy-loaded component should use default export:
557
+
558
+ ```typescript
559
+ // lazy-components/dashboard.ts
560
+ import { html, css } from 'lit';
561
+ import { customElement } from 'lit/decorators.js';
562
+ import { $LitElement } from '@mixins/index';
563
+
564
+ @customElement('lazy-dashboard')
565
+ export default class LazyDashboard extends $LitElement(css`
566
+ :host {
567
+ display: block;
568
+ padding: 24px;
569
+ }
570
+ `) {
571
+ render() {
572
+ return html`
573
+ <schmancy-surface type="container" rounded="all">
574
+ <schmancy-typography type="headline">Dashboard</schmancy-typography>
575
+ <!-- Dashboard content -->
576
+ </schmancy-surface>
577
+ `;
578
+ }
579
+ }
580
+ ```
581
+
582
+ #### Benefits of Lazy Loading
583
+
584
+ 1. **Reduced Initial Bundle Size**: Components are loaded only when needed
585
+ 2. **Faster Initial Page Load**: Critical path includes only essential code
586
+ 3. **Automatic Code Splitting**: Each lazy import creates a separate chunk
587
+ 4. **Memory Efficiency**: Components not in use aren't loaded in memory
588
+ 5. **Better Perceived Performance**: Preloading on hover makes navigation feel instant
589
+
590
+ #### Performance Best Practices
591
+
592
+ ```typescript
593
+ // 1. Group related components in the same chunk
594
+ const LazyAdminComponents = lazy(() => import('./admin/index'));
595
+
596
+ // 2. Preload critical routes after initial render
597
+ connectedCallback() {
598
+ super.connectedCallback();
599
+
600
+ // Preload common routes after a delay
601
+ setTimeout(() => {
602
+ routes.dashboard.preload();
603
+ routes.users.preload();
604
+ }, 3000);
605
+ }
606
+
607
+ // 3. Use intersection observer for preloading visible links
608
+ const observer = new IntersectionObserver((entries) => {
609
+ entries.forEach(entry => {
610
+ if (entry.isIntersecting) {
611
+ const route = entry.target.dataset.route;
612
+ routes[route]?.preload();
613
+ }
614
+ });
615
+ });
616
+
617
+ // 4. Handle loading errors gracefully
618
+ const LazyFeature = lazy(() =>
619
+ import('./feature').catch(() =>
620
+ // Fallback to simpler version on error
621
+ import('./feature-lite')
622
+ )
623
+ );
624
+ ```
625
+
626
+ #### Legacy Method (Still Supported)
627
+
628
+ The traditional dynamic import method is still supported:
629
+
630
+ ```typescript
631
+ // Direct dynamic import (without lazy helper)
436
632
  <schmancy-route
437
633
  when="/analytics"
438
634
  .component=${() => import('./analytics-dashboard.js').then(m => m.AnalyticsDashboard)}
@@ -613,7 +809,7 @@ area.on('protected-area').pipe(
613
809
  ```typescript
614
810
  // Route Action - used for navigation
615
811
  interface RouteAction {
616
- component: CustomElementConstructor | string | HTMLElement | Promise<NodeModule>;
812
+ component: CustomElementConstructor | string | HTMLElement | Promise<NodeModule> | LazyComponent;
617
813
  area: string;
618
814
  state?: Record<string, unknown>;
619
815
  params?: Record<string, unknown>; // Query parameters
@@ -638,10 +834,22 @@ type GuardFunction = () => GuardResult | Promise<GuardResult>;
638
834
  // Route component props
639
835
  interface RouteProps {
640
836
  when: string; // URL segment pattern
641
- component?: string | CustomElementConstructor | HTMLElement;
642
- default?: string | CustomElementConstructor | HTMLElement;
837
+ component?: string | CustomElementConstructor | HTMLElement | LazyComponent;
838
+ default?: string | CustomElementConstructor | HTMLElement | LazyComponent;
643
839
  guard?: GuardFunction;
644
840
  }
841
+
842
+ // Lazy Loading Types (from lazy.ts)
843
+ type CustomElementConstructor = typeof HTMLElement;
844
+
845
+ // LazyComponent interface with preload capability
846
+ interface LazyComponent<T extends CustomElementConstructor = CustomElementConstructor> {
847
+ (): Promise<{ default: T }>;
848
+ preload(): Promise<void>;
849
+ _promise?: Promise<{ default: T }>;
850
+ _module?: { default: T };
851
+ }
852
+
645
853
  ```
646
854
 
647
855
  ## Related Components
@@ -653,12 +861,16 @@ interface RouteProps {
653
861
 
654
862
  ## Performance Tips
655
863
 
656
- 1. **Use lazy loading** for heavy components
657
- 2. **Implement route-level code splitting** with dynamic imports
658
- 3. **Cache guard results** when checking expensive operations
659
- 4. **Use `historyStrategy: 'silent'`** for non-navigational updates
660
- 5. **Debounce rapid navigation** in user-triggered events
661
- 6. **Preload critical routes** during idle time
864
+ 1. **Use the `lazy()` function** for automatic code splitting and optimal loading
865
+ 2. **Implement preloading on hover** for instant perceived navigation
866
+ 3. **Handle loading errors** with catch blocks in import statements
867
+ 4. **Group related components** in the same lazy chunk when appropriate
868
+ 5. **Cache guard results** when checking expensive operations
869
+ 6. **Use `historyStrategy: 'silent'`** for non-navigational updates
870
+ 7. **Debounce rapid navigation** in user-triggered events
871
+ 8. **Preload critical routes** after initial render using `component.preload()`
872
+ 9. **Leverage default exports** in lazy-loaded components for cleaner imports
873
+ 10. **Monitor bundle sizes** to ensure effective code splitting
662
874
 
663
875
  ## Summary
664
876
 
@@ -27,38 +27,71 @@ Sliding panel system for navigation, overlays, and responsive layouts.
27
27
  </schmancy-content-drawer>
28
28
  ```
29
29
 
30
- ## Context API
30
+ ## Service API
31
31
 
32
32
  ```js
33
- import { contentDrawerContext } from '@schmancy/index'
34
- // Or specific import: import { contentDrawerContext } from '@schmancy/content-drawer'
35
-
36
- // Create drawer controller
37
- const drawer = contentDrawerContext.create('drawer-id')
38
-
39
- // Control methods
40
- drawer.open()
41
- drawer.close()
42
- drawer.toggle()
43
- drawer.lock() // Prevent closing
44
- drawer.unlock()
45
- drawer.setPersistent(boolean)
46
-
47
- // State access
48
- drawer.isOpen -> boolean
49
- drawer.state$ -> Observable<DrawerState>
50
-
51
- // Events
52
- @drawer-opened
53
- @drawer-closed
54
- @drawer-toggled -> { open: boolean }
55
- @before-open
56
- @before-close
33
+ import { schmancyContentDrawer } from '@schmancy/content-drawer'
34
+
35
+ // NEW: Push API - Renders component with automatic re-rendering support
36
+ schmancyContentDrawer.push(component)
37
+ // component can be:
38
+ // - string: 'demo-button' (tag name)
39
+ // - HTMLElement: new DemoButton()
40
+ // - Factory: () => new DemoButton()
41
+ // - Async: () => import('./button').then(m => new m.default())
42
+
43
+ // Legacy render API (backward compatible)
44
+ schmancyContentDrawer.render(ref, component, title?)
45
+
46
+ // Dismiss drawer
47
+ schmancyContentDrawer.dimiss(ref)
48
+ ```
49
+
50
+ ### Push API Features
51
+
52
+ The `push` API solves the re-rendering issue when the same component instance is pushed with updated properties:
53
+
54
+ ```js
55
+ // Create a component instance
56
+ const myComponent = new MyComponent()
57
+ myComponent.variant = 'filled'
58
+
59
+ // Push it to drawer
60
+ schmancyContentDrawer.push(myComponent)
61
+
62
+ // Later, update properties and push again
63
+ myComponent.variant = 'outlined'
64
+ schmancyContentDrawer.push(myComponent) // Automatically detects same instance and forces re-render
57
65
  ```
58
66
 
59
67
  ## Examples
60
68
 
61
- ### 1. Basic Navigation Drawer
69
+ ### 1. Using Push API for Dynamic Content
70
+
71
+ ```js
72
+ // Simple string component
73
+ schmancyContentDrawer.push('demo-typography')
74
+
75
+ // Component instance with properties
76
+ const button = new DemoButton()
77
+ button.variant = 'filled'
78
+ schmancyContentDrawer.push(button)
79
+
80
+ // Factory function for custom setup
81
+ schmancyContentDrawer.push(() => {
82
+ const comp = new MyComponent()
83
+ comp.setAttribute('theme', 'dark')
84
+ return comp
85
+ })
86
+
87
+ // Async module loading
88
+ schmancyContentDrawer.push(async () => {
89
+ const module = await import('./lazy-component')
90
+ return new module.default()
91
+ })
92
+ ```
93
+
94
+ ### 2. Basic Navigation Drawer
62
95
  ```html
63
96
  <schmancy-content-drawer ?open="${drawerOpen}">
64
97
  <schmancy-content-drawer-main>
package/dist/ai/area.md CHANGED
@@ -429,10 +429,206 @@ class AppLayout extends LitElement {
429
429
  }
430
430
  ```
431
431
 
432
- ### 4. Dynamic Route Loading
432
+ ### 4. Dynamic Route Loading & Lazy Components
433
+
434
+ #### Using the `lazy()` helper function
435
+
436
+ Schmancy Area provides a powerful `lazy()` function similar to React.lazy() for optimal code splitting:
433
437
 
434
438
  ```typescript
435
- // Lazy load heavy components
439
+ import { lazy } from '@schmancy/area';
440
+
441
+ // Create lazy-loaded components
442
+ const LazyDashboard = lazy(() => import('./components/dashboard'));
443
+ const LazyAnalytics = lazy(() => import('./components/analytics'));
444
+ const LazyReports = lazy(() => import('./components/reports'));
445
+
446
+ // Use with area.push()
447
+ area.push({
448
+ component: LazyDashboard,
449
+ area: 'main'
450
+ });
451
+
452
+ // Use with declarative routes
453
+ <schmancy-route
454
+ when="/analytics"
455
+ .component=${LazyAnalytics}
456
+ .guard=${() => hasFeature('analytics') || '/upgrade'}>
457
+ </schmancy-route>
458
+
459
+ // Set as default for an area
460
+ <schmancy-area name="main" .default=${LazyDashboard}></schmancy-area>
461
+ ```
462
+
463
+ #### Preloading Components
464
+
465
+ Lazy components support preloading for better perceived performance:
466
+
467
+ ```typescript
468
+ const LazyProfile = lazy(() => import('./profile'));
469
+
470
+ // Preload on hover for instant navigation
471
+ button.addEventListener('mouseenter', () => {
472
+ LazyProfile.preload();
473
+ });
474
+
475
+ // Preload after initial page load
476
+ window.addEventListener('load', () => {
477
+ setTimeout(() => {
478
+ LazyProfile.preload();
479
+ LazySettings.preload();
480
+ }, 2000);
481
+ });
482
+ ```
483
+
484
+ #### Complete Example: Lazy-Loaded Navigation
485
+
486
+ ```typescript
487
+ import { $LitElement } from '@mixins/index';
488
+ import { area, lazy } from '@schmancy/area';
489
+ import { html } from 'lit';
490
+ import { customElement, state } from 'lit/decorators.js';
491
+
492
+ // Define lazy components with default exports
493
+ const routes = {
494
+ dashboard: lazy(() => import('./lazy-components/dashboard')),
495
+ users: lazy(() => import('./lazy-components/users')),
496
+ products: lazy(() => import('./lazy-components/products')),
497
+ reports: lazy(() => import('./lazy-components/reports')),
498
+ settings: lazy(() => import('./lazy-components/settings'))
499
+ };
500
+
501
+ @customElement('app-shell')
502
+ export class AppShell extends $LitElement() {
503
+ @state() private currentRoute = 'dashboard';
504
+
505
+ private navigate(route: string, component: any) {
506
+ this.currentRoute = route;
507
+ area.push({
508
+ area: 'main',
509
+ component: component
510
+ });
511
+ }
512
+
513
+ render() {
514
+ return html`
515
+ <div class="grid grid-cols-[auto_1fr]">
516
+ <!-- Sidebar Navigation -->
517
+ <schmancy-list>
518
+ <schmancy-list-item
519
+ ?selected=${this.currentRoute === 'dashboard'}
520
+ @click=${() => this.navigate('dashboard', routes.dashboard)}
521
+ @mouseenter=${() => routes.dashboard.preload()}>
522
+ <schmancy-icon slot="start">dashboard</schmancy-icon>
523
+ Dashboard
524
+ </schmancy-list-item>
525
+
526
+ <schmancy-list-item
527
+ ?selected=${this.currentRoute === 'users'}
528
+ @click=${() => this.navigate('users', routes.users)}
529
+ @mouseenter=${() => routes.users.preload()}>
530
+ <schmancy-icon slot="start">group</schmancy-icon>
531
+ Users
532
+ </schmancy-list-item>
533
+
534
+ <schmancy-list-item
535
+ ?selected=${this.currentRoute === 'products'}
536
+ @click=${() => this.navigate('products', routes.products)}
537
+ @mouseenter=${() => routes.products.preload()}>
538
+ <schmancy-icon slot="start">inventory_2</schmancy-icon>
539
+ Products
540
+ </schmancy-list-item>
541
+ </schmancy-list>
542
+
543
+ <!-- Main Content Area -->
544
+ <schmancy-area
545
+ name="main"
546
+ .default=${routes.dashboard}>
547
+ </schmancy-area>
548
+ </div>
549
+ `;
550
+ }
551
+ }
552
+ ```
553
+
554
+ #### Lazy Component Structure
555
+
556
+ Each lazy-loaded component should use default export:
557
+
558
+ ```typescript
559
+ // lazy-components/dashboard.ts
560
+ import { html, css } from 'lit';
561
+ import { customElement } from 'lit/decorators.js';
562
+ import { $LitElement } from '@mixins/index';
563
+
564
+ @customElement('lazy-dashboard')
565
+ export default class LazyDashboard extends $LitElement(css`
566
+ :host {
567
+ display: block;
568
+ padding: 24px;
569
+ }
570
+ `) {
571
+ render() {
572
+ return html`
573
+ <schmancy-surface type="container" rounded="all">
574
+ <schmancy-typography type="headline">Dashboard</schmancy-typography>
575
+ <!-- Dashboard content -->
576
+ </schmancy-surface>
577
+ `;
578
+ }
579
+ }
580
+ ```
581
+
582
+ #### Benefits of Lazy Loading
583
+
584
+ 1. **Reduced Initial Bundle Size**: Components are loaded only when needed
585
+ 2. **Faster Initial Page Load**: Critical path includes only essential code
586
+ 3. **Automatic Code Splitting**: Each lazy import creates a separate chunk
587
+ 4. **Memory Efficiency**: Components not in use aren't loaded in memory
588
+ 5. **Better Perceived Performance**: Preloading on hover makes navigation feel instant
589
+
590
+ #### Performance Best Practices
591
+
592
+ ```typescript
593
+ // 1. Group related components in the same chunk
594
+ const LazyAdminComponents = lazy(() => import('./admin/index'));
595
+
596
+ // 2. Preload critical routes after initial render
597
+ connectedCallback() {
598
+ super.connectedCallback();
599
+
600
+ // Preload common routes after a delay
601
+ setTimeout(() => {
602
+ routes.dashboard.preload();
603
+ routes.users.preload();
604
+ }, 3000);
605
+ }
606
+
607
+ // 3. Use intersection observer for preloading visible links
608
+ const observer = new IntersectionObserver((entries) => {
609
+ entries.forEach(entry => {
610
+ if (entry.isIntersecting) {
611
+ const route = entry.target.dataset.route;
612
+ routes[route]?.preload();
613
+ }
614
+ });
615
+ });
616
+
617
+ // 4. Handle loading errors gracefully
618
+ const LazyFeature = lazy(() =>
619
+ import('./feature').catch(() =>
620
+ // Fallback to simpler version on error
621
+ import('./feature-lite')
622
+ )
623
+ );
624
+ ```
625
+
626
+ #### Legacy Method (Still Supported)
627
+
628
+ The traditional dynamic import method is still supported:
629
+
630
+ ```typescript
631
+ // Direct dynamic import (without lazy helper)
436
632
  <schmancy-route
437
633
  when="/analytics"
438
634
  .component=${() => import('./analytics-dashboard.js').then(m => m.AnalyticsDashboard)}
@@ -613,7 +809,7 @@ area.on('protected-area').pipe(
613
809
  ```typescript
614
810
  // Route Action - used for navigation
615
811
  interface RouteAction {
616
- component: CustomElementConstructor | string | HTMLElement | Promise<NodeModule>;
812
+ component: CustomElementConstructor | string | HTMLElement | Promise<NodeModule> | LazyComponent;
617
813
  area: string;
618
814
  state?: Record<string, unknown>;
619
815
  params?: Record<string, unknown>; // Query parameters
@@ -638,10 +834,22 @@ type GuardFunction = () => GuardResult | Promise<GuardResult>;
638
834
  // Route component props
639
835
  interface RouteProps {
640
836
  when: string; // URL segment pattern
641
- component?: string | CustomElementConstructor | HTMLElement;
642
- default?: string | CustomElementConstructor | HTMLElement;
837
+ component?: string | CustomElementConstructor | HTMLElement | LazyComponent;
838
+ default?: string | CustomElementConstructor | HTMLElement | LazyComponent;
643
839
  guard?: GuardFunction;
644
840
  }
841
+
842
+ // Lazy Loading Types (from lazy.ts)
843
+ type CustomElementConstructor = typeof HTMLElement;
844
+
845
+ // LazyComponent interface with preload capability
846
+ interface LazyComponent<T extends CustomElementConstructor = CustomElementConstructor> {
847
+ (): Promise<{ default: T }>;
848
+ preload(): Promise<void>;
849
+ _promise?: Promise<{ default: T }>;
850
+ _module?: { default: T };
851
+ }
852
+
645
853
  ```
646
854
 
647
855
  ## Related Components
@@ -653,12 +861,16 @@ interface RouteProps {
653
861
 
654
862
  ## Performance Tips
655
863
 
656
- 1. **Use lazy loading** for heavy components
657
- 2. **Implement route-level code splitting** with dynamic imports
658
- 3. **Cache guard results** when checking expensive operations
659
- 4. **Use `historyStrategy: 'silent'`** for non-navigational updates
660
- 5. **Debounce rapid navigation** in user-triggered events
661
- 6. **Preload critical routes** during idle time
864
+ 1. **Use the `lazy()` function** for automatic code splitting and optimal loading
865
+ 2. **Implement preloading on hover** for instant perceived navigation
866
+ 3. **Handle loading errors** with catch blocks in import statements
867
+ 4. **Group related components** in the same lazy chunk when appropriate
868
+ 5. **Cache guard results** when checking expensive operations
869
+ 6. **Use `historyStrategy: 'silent'`** for non-navigational updates
870
+ 7. **Debounce rapid navigation** in user-triggered events
871
+ 8. **Preload critical routes** after initial render using `component.preload()`
872
+ 9. **Leverage default exports** in lazy-loaded components for cleaner imports
873
+ 10. **Monitor bundle sizes** to ensure effective code splitting
662
874
 
663
875
  ## Summary
664
876