@govtechsg/sgds-web-component 3.30.1-rc.0 → 3.30.1-rc.10

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 (234) hide show
  1. package/components/Appnav/appnav.js +1 -1
  2. package/components/Appnav/appnav.js.map +1 -1
  3. package/components/Appnav/index.umd.min.js +4 -2
  4. package/components/Appnav/index.umd.min.js.map +1 -1
  5. package/components/Appnav/sgds-appnav.js +3 -1
  6. package/components/Appnav/sgds-appnav.js.map +1 -1
  7. package/components/Breadcrumb/index.umd.min.js +1 -1
  8. package/components/Breadcrumb/index.umd.min.js.map +1 -1
  9. package/components/Checkbox/index.umd.min.js +2 -2
  10. package/components/Checkbox/index.umd.min.js.map +1 -1
  11. package/components/Checkbox/sgds-checkbox.d.ts +7 -1
  12. package/components/Checkbox/sgds-checkbox.js +14 -0
  13. package/components/Checkbox/sgds-checkbox.js.map +1 -1
  14. package/components/ComboBox/index.umd.min.js +266 -266
  15. package/components/ComboBox/index.umd.min.js.map +1 -1
  16. package/components/DataTable/index.umd.min.js +301 -301
  17. package/components/DataTable/index.umd.min.js.map +1 -1
  18. package/components/Datepicker/index.umd.min.js +3 -3
  19. package/components/Datepicker/index.umd.min.js.map +1 -1
  20. package/components/Datepicker/sgds-datepicker.d.ts +1 -1
  21. package/components/Datepicker/sgds-datepicker.js +5 -1
  22. package/components/Datepicker/sgds-datepicker.js.map +1 -1
  23. package/components/Divider/divider.js +1 -1
  24. package/components/Divider/divider.js.map +1 -1
  25. package/components/Divider/index.umd.min.js +8 -7
  26. package/components/Divider/index.umd.min.js.map +1 -1
  27. package/components/Divider/sgds-divider.d.ts +1 -0
  28. package/components/Divider/sgds-divider.js +4 -0
  29. package/components/Divider/sgds-divider.js.map +1 -1
  30. package/components/Dropdown/dropdown-item.js +1 -1
  31. package/components/Dropdown/dropdown-item.js.map +1 -1
  32. package/components/Dropdown/index.umd.min.js +1 -1
  33. package/components/Dropdown/index.umd.min.js.map +1 -1
  34. package/components/FileUpload/index.umd.min.js +1 -1
  35. package/components/FileUpload/index.umd.min.js.map +1 -1
  36. package/components/Input/index.umd.min.js +3 -3
  37. package/components/Input/index.umd.min.js.map +1 -1
  38. package/components/Input/sgds-input.d.ts +1 -0
  39. package/components/Input/sgds-input.js +7 -0
  40. package/components/Input/sgds-input.js.map +1 -1
  41. package/components/Mainnav/index.umd.min.js +9 -7
  42. package/components/Mainnav/index.umd.min.js.map +1 -1
  43. package/components/Mainnav/mainnav-dropdown.js +1 -1
  44. package/components/Mainnav/mainnav-dropdown.js.map +1 -1
  45. package/components/Mainnav/mainnav-item.js +1 -1
  46. package/components/Mainnav/mainnav-item.js.map +1 -1
  47. package/components/Mainnav/mainnav.js +1 -1
  48. package/components/Mainnav/mainnav.js.map +1 -1
  49. package/components/Mainnav/sgds-mainnav-dropdown.js +2 -2
  50. package/components/Mainnav/sgds-mainnav-dropdown.js.map +1 -1
  51. package/components/Mainnav/sgds-mainnav-item.js +1 -1
  52. package/components/Mainnav/sgds-mainnav-item.js.map +1 -1
  53. package/components/Mainnav/sgds-mainnav.js +3 -1
  54. package/components/Mainnav/sgds-mainnav.js.map +1 -1
  55. package/components/OverflowMenu/index.umd.min.js +1 -1
  56. package/components/OverflowMenu/index.umd.min.js.map +1 -1
  57. package/components/QuantityToggle/index.umd.min.js +230 -230
  58. package/components/QuantityToggle/index.umd.min.js.map +1 -1
  59. package/components/QuantityToggle/sgds-quantity-toggle.d.ts +1 -0
  60. package/components/QuantityToggle/sgds-quantity-toggle.js +9 -0
  61. package/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
  62. package/components/Radio/index.umd.min.js +1 -1
  63. package/components/Radio/index.umd.min.js.map +1 -1
  64. package/components/Radio/sgds-radio-group.d.ts +1 -1
  65. package/components/Radio/sgds-radio-group.js +5 -1
  66. package/components/Radio/sgds-radio-group.js.map +1 -1
  67. package/components/Select/index.umd.min.js +1 -1
  68. package/components/Select/index.umd.min.js.map +1 -1
  69. package/components/Sidebar/index.umd.min.js +1 -1
  70. package/components/Sidebar/index.umd.min.js.map +1 -1
  71. package/components/Sidenav/index.umd.min.js +5 -3
  72. package/components/Sidenav/index.umd.min.js.map +1 -1
  73. package/components/Sidenav/sgds-sidenav-item.js +3 -1
  74. package/components/Sidenav/sgds-sidenav-item.js.map +1 -1
  75. package/components/Sidenav/sgds-sidenav-link.js +1 -1
  76. package/components/Sidenav/sgds-sidenav-link.js.map +1 -1
  77. package/components/Sidenav/sidenav-item.js +1 -1
  78. package/components/Sidenav/sidenav-item.js.map +1 -1
  79. package/components/Sidenav/sidenav-link.js +1 -1
  80. package/components/Sidenav/sidenav-link.js.map +1 -1
  81. package/components/Subnav/index.umd.min.js +3 -3
  82. package/components/Subnav/index.umd.min.js.map +1 -1
  83. package/components/Subnav/sgds-subnav-item.js +1 -1
  84. package/components/Subnav/sgds-subnav-item.js.map +1 -1
  85. package/components/Subnav/sgds-subnav.js +1 -1
  86. package/components/Subnav/sgds-subnav.js.map +1 -1
  87. package/components/Subnav/subnav-item.js +1 -1
  88. package/components/Subnav/subnav-item.js.map +1 -1
  89. package/components/Subnav/subnav.js +1 -1
  90. package/components/Subnav/subnav.js.map +1 -1
  91. package/components/Table/index.umd.min.js +1 -1
  92. package/components/Table/index.umd.min.js.map +1 -1
  93. package/components/Table/table-cell.js +1 -1
  94. package/components/Table/table-cell.js.map +1 -1
  95. package/components/Table/table-row.js +1 -1
  96. package/components/Table/table-row.js.map +1 -1
  97. package/components/Textarea/index.umd.min.js +1 -1
  98. package/components/Textarea/index.umd.min.js.map +1 -1
  99. package/components/Textarea/sgds-textarea.d.ts +1 -1
  100. package/components/Textarea/sgds-textarea.js +6 -2
  101. package/components/Textarea/sgds-textarea.js.map +1 -1
  102. package/components/index.umd.min.js +33 -27
  103. package/components/index.umd.min.js.map +1 -1
  104. package/custom-elements.json +20 -3
  105. package/index.umd.min.js +731 -725
  106. package/index.umd.min.js.map +1 -1
  107. package/package.json +1 -1
  108. package/react/_ssr/index.d.ts +1 -1
  109. package/react/_ssr/index.js +2 -2
  110. package/react/_ssr/utils/ssr-nonce.js +4 -41
  111. package/react/_ssr/utils/ssr-nonce.js.map +1 -1
  112. package/react/components/Appnav/appnav.cjs.js +1 -1
  113. package/react/components/Appnav/appnav.cjs.js.map +1 -1
  114. package/react/components/Appnav/appnav.js +1 -1
  115. package/react/components/Appnav/appnav.js.map +1 -1
  116. package/react/components/Appnav/sgds-appnav.cjs.js +3 -1
  117. package/react/components/Appnav/sgds-appnav.cjs.js.map +1 -1
  118. package/react/components/Appnav/sgds-appnav.js +3 -1
  119. package/react/components/Appnav/sgds-appnav.js.map +1 -1
  120. package/react/components/Checkbox/sgds-checkbox.cjs.js +14 -0
  121. package/react/components/Checkbox/sgds-checkbox.cjs.js.map +1 -1
  122. package/react/components/Checkbox/sgds-checkbox.js +14 -0
  123. package/react/components/Checkbox/sgds-checkbox.js.map +1 -1
  124. package/react/components/Datepicker/sgds-datepicker.cjs.js +5 -1
  125. package/react/components/Datepicker/sgds-datepicker.cjs.js.map +1 -1
  126. package/react/components/Datepicker/sgds-datepicker.js +5 -1
  127. package/react/components/Datepicker/sgds-datepicker.js.map +1 -1
  128. package/react/components/Divider/divider.cjs.js +1 -1
  129. package/react/components/Divider/divider.cjs.js.map +1 -1
  130. package/react/components/Divider/divider.js +1 -1
  131. package/react/components/Divider/divider.js.map +1 -1
  132. package/react/components/Divider/sgds-divider.cjs.js +4 -0
  133. package/react/components/Divider/sgds-divider.cjs.js.map +1 -1
  134. package/react/components/Divider/sgds-divider.js +4 -0
  135. package/react/components/Divider/sgds-divider.js.map +1 -1
  136. package/react/components/Dropdown/dropdown-item.cjs.js +1 -1
  137. package/react/components/Dropdown/dropdown-item.cjs.js.map +1 -1
  138. package/react/components/Dropdown/dropdown-item.js +1 -1
  139. package/react/components/Dropdown/dropdown-item.js.map +1 -1
  140. package/react/components/Input/sgds-input.cjs.js +7 -0
  141. package/react/components/Input/sgds-input.cjs.js.map +1 -1
  142. package/react/components/Input/sgds-input.js +7 -0
  143. package/react/components/Input/sgds-input.js.map +1 -1
  144. package/react/components/Mainnav/mainnav-dropdown.cjs.js +1 -1
  145. package/react/components/Mainnav/mainnav-dropdown.cjs.js.map +1 -1
  146. package/react/components/Mainnav/mainnav-dropdown.js +1 -1
  147. package/react/components/Mainnav/mainnav-dropdown.js.map +1 -1
  148. package/react/components/Mainnav/mainnav-item.cjs.js +1 -1
  149. package/react/components/Mainnav/mainnav-item.cjs.js.map +1 -1
  150. package/react/components/Mainnav/mainnav-item.js +1 -1
  151. package/react/components/Mainnav/mainnav-item.js.map +1 -1
  152. package/react/components/Mainnav/mainnav.cjs.js +1 -1
  153. package/react/components/Mainnav/mainnav.cjs.js.map +1 -1
  154. package/react/components/Mainnav/mainnav.js +1 -1
  155. package/react/components/Mainnav/mainnav.js.map +1 -1
  156. package/react/components/Mainnav/sgds-mainnav-dropdown.cjs.js +2 -2
  157. package/react/components/Mainnav/sgds-mainnav-dropdown.cjs.js.map +1 -1
  158. package/react/components/Mainnav/sgds-mainnav-dropdown.js +2 -2
  159. package/react/components/Mainnav/sgds-mainnav-dropdown.js.map +1 -1
  160. package/react/components/Mainnav/sgds-mainnav-item.cjs.js +1 -1
  161. package/react/components/Mainnav/sgds-mainnav-item.cjs.js.map +1 -1
  162. package/react/components/Mainnav/sgds-mainnav-item.js +1 -1
  163. package/react/components/Mainnav/sgds-mainnav-item.js.map +1 -1
  164. package/react/components/Mainnav/sgds-mainnav.cjs.js +3 -1
  165. package/react/components/Mainnav/sgds-mainnav.cjs.js.map +1 -1
  166. package/react/components/Mainnav/sgds-mainnav.js +3 -1
  167. package/react/components/Mainnav/sgds-mainnav.js.map +1 -1
  168. package/react/components/QuantityToggle/sgds-quantity-toggle.cjs.js +9 -0
  169. package/react/components/QuantityToggle/sgds-quantity-toggle.cjs.js.map +1 -1
  170. package/react/components/QuantityToggle/sgds-quantity-toggle.js +9 -0
  171. package/react/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
  172. package/react/components/Radio/sgds-radio-group.cjs.js +5 -1
  173. package/react/components/Radio/sgds-radio-group.cjs.js.map +1 -1
  174. package/react/components/Radio/sgds-radio-group.js +5 -1
  175. package/react/components/Radio/sgds-radio-group.js.map +1 -1
  176. package/react/components/Sidenav/sgds-sidenav-item.cjs.js +3 -1
  177. package/react/components/Sidenav/sgds-sidenav-item.cjs.js.map +1 -1
  178. package/react/components/Sidenav/sgds-sidenav-item.js +3 -1
  179. package/react/components/Sidenav/sgds-sidenav-item.js.map +1 -1
  180. package/react/components/Sidenav/sgds-sidenav-link.cjs.js +1 -1
  181. package/react/components/Sidenav/sgds-sidenav-link.cjs.js.map +1 -1
  182. package/react/components/Sidenav/sgds-sidenav-link.js +1 -1
  183. package/react/components/Sidenav/sgds-sidenav-link.js.map +1 -1
  184. package/react/components/Sidenav/sidenav-item.cjs.js +1 -1
  185. package/react/components/Sidenav/sidenav-item.cjs.js.map +1 -1
  186. package/react/components/Sidenav/sidenav-item.js +1 -1
  187. package/react/components/Sidenav/sidenav-item.js.map +1 -1
  188. package/react/components/Sidenav/sidenav-link.cjs.js +1 -1
  189. package/react/components/Sidenav/sidenav-link.cjs.js.map +1 -1
  190. package/react/components/Sidenav/sidenav-link.js +1 -1
  191. package/react/components/Sidenav/sidenav-link.js.map +1 -1
  192. package/react/components/Subnav/sgds-subnav-item.cjs.js +1 -1
  193. package/react/components/Subnav/sgds-subnav-item.cjs.js.map +1 -1
  194. package/react/components/Subnav/sgds-subnav-item.js +1 -1
  195. package/react/components/Subnav/sgds-subnav-item.js.map +1 -1
  196. package/react/components/Subnav/sgds-subnav.cjs.js +1 -1
  197. package/react/components/Subnav/sgds-subnav.cjs.js.map +1 -1
  198. package/react/components/Subnav/sgds-subnav.js +1 -1
  199. package/react/components/Subnav/sgds-subnav.js.map +1 -1
  200. package/react/components/Subnav/subnav-item.cjs.js +1 -1
  201. package/react/components/Subnav/subnav-item.cjs.js.map +1 -1
  202. package/react/components/Subnav/subnav-item.js +1 -1
  203. package/react/components/Subnav/subnav-item.js.map +1 -1
  204. package/react/components/Subnav/subnav.cjs.js +1 -1
  205. package/react/components/Subnav/subnav.cjs.js.map +1 -1
  206. package/react/components/Subnav/subnav.js +1 -1
  207. package/react/components/Subnav/subnav.js.map +1 -1
  208. package/react/components/Table/table-cell.cjs.js +1 -1
  209. package/react/components/Table/table-cell.cjs.js.map +1 -1
  210. package/react/components/Table/table-cell.js +1 -1
  211. package/react/components/Table/table-cell.js.map +1 -1
  212. package/react/components/Table/table-row.cjs.js +1 -1
  213. package/react/components/Table/table-row.cjs.js.map +1 -1
  214. package/react/components/Table/table-row.js +1 -1
  215. package/react/components/Table/table-row.js.map +1 -1
  216. package/react/components/Textarea/sgds-textarea.cjs.js +6 -2
  217. package/react/components/Textarea/sgds-textarea.cjs.js.map +1 -1
  218. package/react/components/Textarea/sgds-textarea.js +6 -2
  219. package/react/components/Textarea/sgds-textarea.js.map +1 -1
  220. package/react/utils/ssr-nonce-patch.cjs.js +0 -30
  221. package/react/utils/ssr-nonce-patch.js +36 -30
  222. package/react/utils/validatorMixin.cjs.js +2 -3
  223. package/react/utils/validatorMixin.cjs.js.map +1 -1
  224. package/react/utils/validatorMixin.js +2 -3
  225. package/react/utils/validatorMixin.js.map +1 -1
  226. package/types/react.d.ts +1 -1
  227. package/utils/ssr-nonce-patch.d.ts +6 -5
  228. package/utils/ssr-nonce.d.ts +3 -22
  229. package/utils/validatorMixin.d.ts +1 -1
  230. package/utils/validatorMixin.js +2 -3
  231. package/utils/validatorMixin.js.map +1 -1
  232. package/react/_virtual/_rolldown/runtime.js +0 -8
  233. package/react/utils/ssr-nonce-patch.cjs.js.map +0 -1
  234. package/react/utils/ssr-nonce-patch.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  //#region src/components/Subnav/subnav.css
3
- var css_248z = require("lit").css`:host{display:block;position:relative;z-index:var(--sgds-z-index-sticky)}nav{background-color:var(--sgds-surface-raised);border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);position:relative;width:100%}.subnav{flex-direction:column;flex-wrap:nowrap}.header-container,.subnav{align-items:flex-start;display:flex}.header-container{gap:var(--sgds-gap-md);padding:var(--sgds-padding-md) var(--sgds-padding-lg);width:100%}slot[name=header]::slotted(*){--sgds-margin-xs:var(--sgds-margin-none);flex:1 1 auto;margin-bottom:var(--sgds-margin-xs,--sgds-margin-none);padding-top:var(--sgds-padding-none)}.subnav-toggler{cursor:pointer;transition:transform .2s ease-in-out}.subnav-toggler:focus-visible{outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}.subnav:not(.collapsed) .subnav-toggler{transform:rotate(-180deg)}.subnav-nav-group{display:flex;flex:1 1 0}.subnav-nav,.subnav-nav-group{align-items:flex-start;flex-direction:column;width:100%}.subnav-nav{display:none;overflow-y:auto;transition:transform .2s ease-in-out}.subnav-nav ::slotted(*){width:100%}.subnav-actions{bottom:0;display:flex;flex-direction:column;gap:var(--sgds-gap-md);padding:var(--sgds-padding-md) var(--sgds-padding-lg);position:sticky;width:100%}.no-actions{display:none}slot[name=actions]::slotted(*){width:100%}@media screen and (max-width:1023px){.subnav.sgds-container{max-width:inherit}}@media screen and (min-width:512px){.subnav-actions{flex-direction:row}}@media screen and (min-width:768px){nav{border-bottom:var(--sgds-border-width-0)}.subnav{flex-direction:row}.subnav.collapsed{border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted)}.header-container{padding:var(--sgds-padding-lg) var(--sgds-padding-2-xl)}.subnav-nav{background-color:var(--sgds-surface-raised);border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);left:0;position:absolute;top:100%}.subnav-actions{align-items:center;flex-direction:row;padding:var(--sgds-padding-sm) var(--sgds-padding-2-xl) var(--sgds-padding-sm) var(--sgds-padding-none);position:inherit}}@media screen and (min-width:1024px){nav{border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);position:inherit}.subnav{flex-wrap:wrap;gap:var(--sgds-gap-xl);row-gap:var(--sgds-gap-none)}.subnav.collapsed{border-bottom:var(--sgds-border-width-0)}.header-container{flex:1;padding:var(--sgds-padding-none);width:auto}slot[name=header]::slotted(*){padding-top:var(--sgds-padding-lg);white-space:nowrap}.subnav-nav-group{align-items:center;flex:inherit;flex-direction:row;flex-wrap:wrap;gap:var(--sgds-gap-xl);justify-content:space-between;row-gap:var(--sgds-gap-none);width:auto}.subnav-nav{align-items:center;background-color:inherit;border-bottom:var(--sgds-border-width-0);display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--sgds-gap-lg);overflow-y:inherit;position:inherit;row-gap:0;transition:none;width:auto}.subnav-nav ::slotted(*){width:inherit}.subnav-toggler{display:none}.subnav-actions{padding:var(--sgds-padding-sm) var(--sgds-padding-none);width:auto}slot[name=actions]::slotted(*){width:inherit}}`;
3
+ var css_248z = require("lit").css`:host{display:block;position:relative;z-index:var(--sgds-z-index-sticky)}nav{background-color:var(--sgds-surface-raised);border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);position:relative;width:100%}.subnav{flex-direction:column;flex-wrap:nowrap}.header-container,.subnav{align-items:flex-start;display:flex}.header-container{gap:var(--sgds-gap-md);padding:var(--sgds-padding-md) var(--sgds-padding-lg);width:100%}.header-content{flex:1 1 auto}.subnav-toggler{cursor:pointer;transition:transform .2s ease-in-out}.subnav-toggler:focus-visible{outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}.subnav:not(.collapsed) .subnav-toggler{transform:rotate(-180deg)}.subnav-nav-group{display:flex;flex:1 1 0}.subnav-nav,.subnav-nav-group{align-items:flex-start;flex-direction:column;width:100%}.subnav-nav{display:none;overflow-y:auto;transition:transform .2s ease-in-out}.subnav-nav ::slotted(*){width:100%}.subnav-actions{bottom:0;display:flex;flex-direction:column;gap:var(--sgds-gap-md);padding:var(--sgds-padding-md) var(--sgds-padding-lg);position:sticky;width:100%}.no-actions{display:none}slot[name=actions]::slotted(*){width:100%}@media screen and (max-width:1023px){.subnav.sgds-container{max-width:inherit}}@media screen and (min-width:512px){.subnav-actions{flex-direction:row}}@media screen and (min-width:768px){nav{border-bottom:var(--sgds-border-width-0)}.subnav{flex-direction:row}.subnav.collapsed{border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted)}.header-container{padding:var(--sgds-padding-lg) var(--sgds-padding-2-xl)}.subnav-nav{background-color:var(--sgds-surface-raised);border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);left:0;position:absolute;top:100%}.subnav-actions{align-items:center;flex-direction:row;padding:var(--sgds-padding-sm) var(--sgds-padding-2-xl) var(--sgds-padding-sm) var(--sgds-padding-none);position:inherit}}@media screen and (min-width:1024px){nav{border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);position:inherit}.subnav{flex-wrap:wrap;gap:var(--sgds-gap-xl);row-gap:var(--sgds-gap-none)}.subnav.collapsed{border-bottom:var(--sgds-border-width-0)}.header-container{flex:1;padding:var(--sgds-padding-none);width:auto}.header-content{padding-top:var(--sgds-padding-lg);white-space:nowrap}.subnav-nav-group{align-items:center;flex:inherit;flex-direction:row;flex-wrap:wrap;gap:var(--sgds-gap-xl);justify-content:space-between;row-gap:var(--sgds-gap-none);width:auto}.subnav-nav{align-items:center;background-color:inherit;border-bottom:var(--sgds-border-width-0);display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--sgds-gap-lg);overflow-y:inherit;position:inherit;row-gap:0;transition:none;width:auto}.subnav-nav ::slotted(*){width:inherit}.subnav-toggler{display:none}.subnav-actions{padding:var(--sgds-padding-sm) var(--sgds-padding-none);width:auto}slot[name=actions]::slotted(*){width:inherit}}`;
4
4
  //#endregion
5
5
  exports.default = css_248z;
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"subnav.cjs.js","names":[],"sources":["../../../../src/components/Subnav/subnav.css"],"sourcesContent":[":host {\n display: block;\n position: relative;\n z-index: var(--sgds-z-index-sticky);\n}\n\nnav {\n background-color: var(--sgds-surface-raised);\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n width: 100%;\n position: relative;\n}\n\n.subnav {\n display: flex;\n flex-wrap: nowrap;\n flex-direction: column;\n align-items: flex-start;\n}\n\n.header-container {\n display: flex;\n align-items: flex-start;\n gap: var(--sgds-gap-md);\n width: 100%;\n padding: var(--sgds-padding-md) var(--sgds-padding-lg);\n}\n\nslot[name=\"header\"]::slotted(*) {\n --sgds-margin-xs: var(--sgds-margin-none);\n flex: 1 1 auto;\n margin-bottom: var(--sgds-margin-xs, --sgds-margin-none);\n padding-top: var(--sgds-padding-none);\n}\n\n.subnav-toggler {\n cursor: pointer;\n transition: transform 0.2s ease-in-out;\n}\n\n.subnav-toggler:focus-visible {\n outline: var(--sgds-outline-focus);\n outline-offset: var(--sgds-outline-offset-focus);\n}\n\n.subnav:not(.collapsed) .subnav-toggler {\n transform: rotate(-180deg);\n}\n\n.subnav-nav-group {\n display: flex;\n flex: 1 1 0;\n flex-direction: column;\n width: 100%;\n align-items: flex-start;\n}\n\n.subnav-nav {\n display: none;\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n transition: transform 0.2s ease-in-out;\n overflow-y: auto;\n}\n\n.subnav-nav ::slotted(*) {\n width: 100%;\n}\n\n.subnav-actions {\n display: flex;\n flex-direction: column;\n gap: var(--sgds-gap-md);\n padding: var(--sgds-padding-md) var(--sgds-padding-lg);\n position: sticky;\n bottom: 0;\n width: 100%;\n}\n\n.no-actions {\n display: none;\n}\n\nslot[name=\"actions\"]::slotted(*) {\n width: 100%;\n}\n\n@media screen and (max-width: 1023px) {\n .subnav.sgds-container {\n max-width: inherit;\n }\n}\n\n@media screen and (min-width: 512px) {\n .subnav-actions {\n flex-direction: row;\n }\n}\n\n@media screen and (min-width: 768px) {\n nav {\n border-bottom: var(--sgds-border-width-0);\n }\n\n .subnav {\n flex-direction: row;\n }\n\n .subnav.collapsed {\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n }\n\n .header-container {\n padding: var(--sgds-padding-lg) var(--sgds-padding-2-xl);\n }\n\n .subnav-nav {\n position: absolute;\n top: 100%;\n left: 0px;\n background-color: var(--sgds-surface-raised);\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n }\n\n .subnav-actions {\n flex-direction: row;\n align-items: center;\n padding: var(--sgds-padding-sm) var(--sgds-padding-2-xl) var(--sgds-padding-sm) var(--sgds-padding-none);\n position: inherit;\n }\n}\n\n@media screen and (min-width: 1024px) {\n nav {\n position: inherit;\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n }\n\n .subnav {\n flex-wrap: wrap;\n gap: var(--sgds-gap-xl);\n row-gap: var(--sgds-gap-none);\n }\n\n .subnav.collapsed {\n border-bottom: var(--sgds-border-width-0);\n }\n\n .header-container {\n padding: var(--sgds-padding-none);\n width: auto;\n flex: 1;\n }\n\n slot[name=\"header\"]::slotted(*) {\n padding-top: var(--sgds-padding-lg);\n white-space: nowrap;\n }\n\n .subnav-nav-group {\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n gap: var(--sgds-gap-xl);\n row-gap: var(--sgds-gap-none);\n flex: inherit;\n width: auto;\n }\n\n .subnav-nav {\n display: flex;\n flex-wrap: wrap;\n gap: var(--sgds-gap-lg);\n row-gap: 0;\n align-items: center;\n flex-direction: row;\n overflow-y: inherit;\n transition: none;\n position: inherit;\n background-color: inherit;\n border-bottom: var(--sgds-border-width-0);\n width: auto;\n }\n\n .subnav-nav ::slotted(*) {\n width: inherit;\n }\n\n .subnav-toggler {\n display: none;\n }\n\n .subnav-actions {\n padding: var(--sgds-padding-sm) var(--sgds-padding-none);\n width: auto;\n }\n\n slot[name=\"actions\"]::slotted(*) {\n width: inherit;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"subnav.cjs.js","names":[],"sources":["../../../../src/components/Subnav/subnav.css"],"sourcesContent":[":host {\n display: block;\n position: relative;\n z-index: var(--sgds-z-index-sticky);\n}\n\nnav {\n background-color: var(--sgds-surface-raised);\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n width: 100%;\n position: relative;\n}\n\n.subnav {\n display: flex;\n flex-wrap: nowrap;\n flex-direction: column;\n align-items: flex-start;\n}\n\n.header-container {\n display: flex;\n align-items: flex-start;\n gap: var(--sgds-gap-md);\n width: 100%;\n padding: var(--sgds-padding-md) var(--sgds-padding-lg);\n}\n\n.header-content {\n flex: 1 1 auto;\n}\n\n.subnav-toggler {\n cursor: pointer;\n transition: transform 0.2s ease-in-out;\n}\n\n.subnav-toggler:focus-visible {\n outline: var(--sgds-outline-focus);\n outline-offset: var(--sgds-outline-offset-focus);\n}\n\n.subnav:not(.collapsed) .subnav-toggler {\n transform: rotate(-180deg);\n}\n\n.subnav-nav-group {\n display: flex;\n flex: 1 1 0;\n flex-direction: column;\n width: 100%;\n align-items: flex-start;\n}\n\n.subnav-nav {\n display: none;\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n transition: transform 0.2s ease-in-out;\n overflow-y: auto;\n}\n\n.subnav-nav ::slotted(*) {\n width: 100%;\n}\n\n.subnav-actions {\n display: flex;\n flex-direction: column;\n gap: var(--sgds-gap-md);\n padding: var(--sgds-padding-md) var(--sgds-padding-lg);\n position: sticky;\n bottom: 0;\n width: 100%;\n}\n\n.no-actions {\n display: none;\n}\n\nslot[name=\"actions\"]::slotted(*) {\n width: 100%;\n}\n\n@media screen and (max-width: 1023px) {\n .subnav.sgds-container {\n max-width: inherit;\n }\n}\n\n@media screen and (min-width: 512px) {\n .subnav-actions {\n flex-direction: row;\n }\n}\n\n@media screen and (min-width: 768px) {\n nav {\n border-bottom: var(--sgds-border-width-0);\n }\n\n .subnav {\n flex-direction: row;\n }\n\n .subnav.collapsed {\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n }\n\n .header-container {\n padding: var(--sgds-padding-lg) var(--sgds-padding-2-xl);\n }\n\n .subnav-nav {\n position: absolute;\n top: 100%;\n left: 0px;\n background-color: var(--sgds-surface-raised);\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n }\n\n .subnav-actions {\n flex-direction: row;\n align-items: center;\n padding: var(--sgds-padding-sm) var(--sgds-padding-2-xl) var(--sgds-padding-sm) var(--sgds-padding-none);\n position: inherit;\n }\n}\n\n@media screen and (min-width: 1024px) {\n nav {\n position: inherit;\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n }\n\n .subnav {\n flex-wrap: wrap;\n gap: var(--sgds-gap-xl);\n row-gap: var(--sgds-gap-none);\n }\n\n .subnav.collapsed {\n border-bottom: var(--sgds-border-width-0);\n }\n\n .header-container {\n padding: var(--sgds-padding-none);\n width: auto;\n flex: 1;\n }\n\n .header-content {\n padding-top: var(--sgds-padding-lg);\n white-space: nowrap;\n }\n\n .subnav-nav-group {\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n gap: var(--sgds-gap-xl);\n row-gap: var(--sgds-gap-none);\n flex: inherit;\n width: auto;\n }\n\n .subnav-nav {\n display: flex;\n flex-wrap: wrap;\n gap: var(--sgds-gap-lg);\n row-gap: 0;\n align-items: center;\n flex-direction: row;\n overflow-y: inherit;\n transition: none;\n position: inherit;\n background-color: inherit;\n border-bottom: var(--sgds-border-width-0);\n width: auto;\n }\n\n .subnav-nav ::slotted(*) {\n width: inherit;\n }\n\n .subnav-toggler {\n display: none;\n }\n\n .subnav-actions {\n padding: var(--sgds-padding-sm) var(--sgds-padding-none);\n width: auto;\n }\n\n slot[name=\"actions\"]::slotted(*) {\n width: inherit;\n }\n}\n"],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { css } from "lit";
3
3
  //#region src/components/Subnav/subnav.css
4
- var css_248z = css`:host{display:block;position:relative;z-index:var(--sgds-z-index-sticky)}nav{background-color:var(--sgds-surface-raised);border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);position:relative;width:100%}.subnav{flex-direction:column;flex-wrap:nowrap}.header-container,.subnav{align-items:flex-start;display:flex}.header-container{gap:var(--sgds-gap-md);padding:var(--sgds-padding-md) var(--sgds-padding-lg);width:100%}slot[name=header]::slotted(*){--sgds-margin-xs:var(--sgds-margin-none);flex:1 1 auto;margin-bottom:var(--sgds-margin-xs,--sgds-margin-none);padding-top:var(--sgds-padding-none)}.subnav-toggler{cursor:pointer;transition:transform .2s ease-in-out}.subnav-toggler:focus-visible{outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}.subnav:not(.collapsed) .subnav-toggler{transform:rotate(-180deg)}.subnav-nav-group{display:flex;flex:1 1 0}.subnav-nav,.subnav-nav-group{align-items:flex-start;flex-direction:column;width:100%}.subnav-nav{display:none;overflow-y:auto;transition:transform .2s ease-in-out}.subnav-nav ::slotted(*){width:100%}.subnav-actions{bottom:0;display:flex;flex-direction:column;gap:var(--sgds-gap-md);padding:var(--sgds-padding-md) var(--sgds-padding-lg);position:sticky;width:100%}.no-actions{display:none}slot[name=actions]::slotted(*){width:100%}@media screen and (max-width:1023px){.subnav.sgds-container{max-width:inherit}}@media screen and (min-width:512px){.subnav-actions{flex-direction:row}}@media screen and (min-width:768px){nav{border-bottom:var(--sgds-border-width-0)}.subnav{flex-direction:row}.subnav.collapsed{border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted)}.header-container{padding:var(--sgds-padding-lg) var(--sgds-padding-2-xl)}.subnav-nav{background-color:var(--sgds-surface-raised);border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);left:0;position:absolute;top:100%}.subnav-actions{align-items:center;flex-direction:row;padding:var(--sgds-padding-sm) var(--sgds-padding-2-xl) var(--sgds-padding-sm) var(--sgds-padding-none);position:inherit}}@media screen and (min-width:1024px){nav{border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);position:inherit}.subnav{flex-wrap:wrap;gap:var(--sgds-gap-xl);row-gap:var(--sgds-gap-none)}.subnav.collapsed{border-bottom:var(--sgds-border-width-0)}.header-container{flex:1;padding:var(--sgds-padding-none);width:auto}slot[name=header]::slotted(*){padding-top:var(--sgds-padding-lg);white-space:nowrap}.subnav-nav-group{align-items:center;flex:inherit;flex-direction:row;flex-wrap:wrap;gap:var(--sgds-gap-xl);justify-content:space-between;row-gap:var(--sgds-gap-none);width:auto}.subnav-nav{align-items:center;background-color:inherit;border-bottom:var(--sgds-border-width-0);display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--sgds-gap-lg);overflow-y:inherit;position:inherit;row-gap:0;transition:none;width:auto}.subnav-nav ::slotted(*){width:inherit}.subnav-toggler{display:none}.subnav-actions{padding:var(--sgds-padding-sm) var(--sgds-padding-none);width:auto}slot[name=actions]::slotted(*){width:inherit}}`;
4
+ var css_248z = css`:host{display:block;position:relative;z-index:var(--sgds-z-index-sticky)}nav{background-color:var(--sgds-surface-raised);border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);position:relative;width:100%}.subnav{flex-direction:column;flex-wrap:nowrap}.header-container,.subnav{align-items:flex-start;display:flex}.header-container{gap:var(--sgds-gap-md);padding:var(--sgds-padding-md) var(--sgds-padding-lg);width:100%}.header-content{flex:1 1 auto}.subnav-toggler{cursor:pointer;transition:transform .2s ease-in-out}.subnav-toggler:focus-visible{outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}.subnav:not(.collapsed) .subnav-toggler{transform:rotate(-180deg)}.subnav-nav-group{display:flex;flex:1 1 0}.subnav-nav,.subnav-nav-group{align-items:flex-start;flex-direction:column;width:100%}.subnav-nav{display:none;overflow-y:auto;transition:transform .2s ease-in-out}.subnav-nav ::slotted(*){width:100%}.subnav-actions{bottom:0;display:flex;flex-direction:column;gap:var(--sgds-gap-md);padding:var(--sgds-padding-md) var(--sgds-padding-lg);position:sticky;width:100%}.no-actions{display:none}slot[name=actions]::slotted(*){width:100%}@media screen and (max-width:1023px){.subnav.sgds-container{max-width:inherit}}@media screen and (min-width:512px){.subnav-actions{flex-direction:row}}@media screen and (min-width:768px){nav{border-bottom:var(--sgds-border-width-0)}.subnav{flex-direction:row}.subnav.collapsed{border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted)}.header-container{padding:var(--sgds-padding-lg) var(--sgds-padding-2-xl)}.subnav-nav{background-color:var(--sgds-surface-raised);border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);left:0;position:absolute;top:100%}.subnav-actions{align-items:center;flex-direction:row;padding:var(--sgds-padding-sm) var(--sgds-padding-2-xl) var(--sgds-padding-sm) var(--sgds-padding-none);position:inherit}}@media screen and (min-width:1024px){nav{border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);position:inherit}.subnav{flex-wrap:wrap;gap:var(--sgds-gap-xl);row-gap:var(--sgds-gap-none)}.subnav.collapsed{border-bottom:var(--sgds-border-width-0)}.header-container{flex:1;padding:var(--sgds-padding-none);width:auto}.header-content{padding-top:var(--sgds-padding-lg);white-space:nowrap}.subnav-nav-group{align-items:center;flex:inherit;flex-direction:row;flex-wrap:wrap;gap:var(--sgds-gap-xl);justify-content:space-between;row-gap:var(--sgds-gap-none);width:auto}.subnav-nav{align-items:center;background-color:inherit;border-bottom:var(--sgds-border-width-0);display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--sgds-gap-lg);overflow-y:inherit;position:inherit;row-gap:0;transition:none;width:auto}.subnav-nav ::slotted(*){width:inherit}.subnav-toggler{display:none}.subnav-actions{padding:var(--sgds-padding-sm) var(--sgds-padding-none);width:auto}slot[name=actions]::slotted(*){width:inherit}}`;
5
5
  //#endregion
6
6
  export { css_248z as default };
7
7
 
@@ -1 +1 @@
1
- {"version":3,"file":"subnav.js","names":[],"sources":["../../../../src/components/Subnav/subnav.css"],"sourcesContent":[":host {\n display: block;\n position: relative;\n z-index: var(--sgds-z-index-sticky);\n}\n\nnav {\n background-color: var(--sgds-surface-raised);\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n width: 100%;\n position: relative;\n}\n\n.subnav {\n display: flex;\n flex-wrap: nowrap;\n flex-direction: column;\n align-items: flex-start;\n}\n\n.header-container {\n display: flex;\n align-items: flex-start;\n gap: var(--sgds-gap-md);\n width: 100%;\n padding: var(--sgds-padding-md) var(--sgds-padding-lg);\n}\n\nslot[name=\"header\"]::slotted(*) {\n --sgds-margin-xs: var(--sgds-margin-none);\n flex: 1 1 auto;\n margin-bottom: var(--sgds-margin-xs, --sgds-margin-none);\n padding-top: var(--sgds-padding-none);\n}\n\n.subnav-toggler {\n cursor: pointer;\n transition: transform 0.2s ease-in-out;\n}\n\n.subnav-toggler:focus-visible {\n outline: var(--sgds-outline-focus);\n outline-offset: var(--sgds-outline-offset-focus);\n}\n\n.subnav:not(.collapsed) .subnav-toggler {\n transform: rotate(-180deg);\n}\n\n.subnav-nav-group {\n display: flex;\n flex: 1 1 0;\n flex-direction: column;\n width: 100%;\n align-items: flex-start;\n}\n\n.subnav-nav {\n display: none;\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n transition: transform 0.2s ease-in-out;\n overflow-y: auto;\n}\n\n.subnav-nav ::slotted(*) {\n width: 100%;\n}\n\n.subnav-actions {\n display: flex;\n flex-direction: column;\n gap: var(--sgds-gap-md);\n padding: var(--sgds-padding-md) var(--sgds-padding-lg);\n position: sticky;\n bottom: 0;\n width: 100%;\n}\n\n.no-actions {\n display: none;\n}\n\nslot[name=\"actions\"]::slotted(*) {\n width: 100%;\n}\n\n@media screen and (max-width: 1023px) {\n .subnav.sgds-container {\n max-width: inherit;\n }\n}\n\n@media screen and (min-width: 512px) {\n .subnav-actions {\n flex-direction: row;\n }\n}\n\n@media screen and (min-width: 768px) {\n nav {\n border-bottom: var(--sgds-border-width-0);\n }\n\n .subnav {\n flex-direction: row;\n }\n\n .subnav.collapsed {\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n }\n\n .header-container {\n padding: var(--sgds-padding-lg) var(--sgds-padding-2-xl);\n }\n\n .subnav-nav {\n position: absolute;\n top: 100%;\n left: 0px;\n background-color: var(--sgds-surface-raised);\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n }\n\n .subnav-actions {\n flex-direction: row;\n align-items: center;\n padding: var(--sgds-padding-sm) var(--sgds-padding-2-xl) var(--sgds-padding-sm) var(--sgds-padding-none);\n position: inherit;\n }\n}\n\n@media screen and (min-width: 1024px) {\n nav {\n position: inherit;\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n }\n\n .subnav {\n flex-wrap: wrap;\n gap: var(--sgds-gap-xl);\n row-gap: var(--sgds-gap-none);\n }\n\n .subnav.collapsed {\n border-bottom: var(--sgds-border-width-0);\n }\n\n .header-container {\n padding: var(--sgds-padding-none);\n width: auto;\n flex: 1;\n }\n\n slot[name=\"header\"]::slotted(*) {\n padding-top: var(--sgds-padding-lg);\n white-space: nowrap;\n }\n\n .subnav-nav-group {\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n gap: var(--sgds-gap-xl);\n row-gap: var(--sgds-gap-none);\n flex: inherit;\n width: auto;\n }\n\n .subnav-nav {\n display: flex;\n flex-wrap: wrap;\n gap: var(--sgds-gap-lg);\n row-gap: 0;\n align-items: center;\n flex-direction: row;\n overflow-y: inherit;\n transition: none;\n position: inherit;\n background-color: inherit;\n border-bottom: var(--sgds-border-width-0);\n width: auto;\n }\n\n .subnav-nav ::slotted(*) {\n width: inherit;\n }\n\n .subnav-toggler {\n display: none;\n }\n\n .subnav-actions {\n padding: var(--sgds-padding-sm) var(--sgds-padding-none);\n width: auto;\n }\n\n slot[name=\"actions\"]::slotted(*) {\n width: inherit;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"subnav.js","names":[],"sources":["../../../../src/components/Subnav/subnav.css"],"sourcesContent":[":host {\n display: block;\n position: relative;\n z-index: var(--sgds-z-index-sticky);\n}\n\nnav {\n background-color: var(--sgds-surface-raised);\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n width: 100%;\n position: relative;\n}\n\n.subnav {\n display: flex;\n flex-wrap: nowrap;\n flex-direction: column;\n align-items: flex-start;\n}\n\n.header-container {\n display: flex;\n align-items: flex-start;\n gap: var(--sgds-gap-md);\n width: 100%;\n padding: var(--sgds-padding-md) var(--sgds-padding-lg);\n}\n\n.header-content {\n flex: 1 1 auto;\n}\n\n.subnav-toggler {\n cursor: pointer;\n transition: transform 0.2s ease-in-out;\n}\n\n.subnav-toggler:focus-visible {\n outline: var(--sgds-outline-focus);\n outline-offset: var(--sgds-outline-offset-focus);\n}\n\n.subnav:not(.collapsed) .subnav-toggler {\n transform: rotate(-180deg);\n}\n\n.subnav-nav-group {\n display: flex;\n flex: 1 1 0;\n flex-direction: column;\n width: 100%;\n align-items: flex-start;\n}\n\n.subnav-nav {\n display: none;\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n transition: transform 0.2s ease-in-out;\n overflow-y: auto;\n}\n\n.subnav-nav ::slotted(*) {\n width: 100%;\n}\n\n.subnav-actions {\n display: flex;\n flex-direction: column;\n gap: var(--sgds-gap-md);\n padding: var(--sgds-padding-md) var(--sgds-padding-lg);\n position: sticky;\n bottom: 0;\n width: 100%;\n}\n\n.no-actions {\n display: none;\n}\n\nslot[name=\"actions\"]::slotted(*) {\n width: 100%;\n}\n\n@media screen and (max-width: 1023px) {\n .subnav.sgds-container {\n max-width: inherit;\n }\n}\n\n@media screen and (min-width: 512px) {\n .subnav-actions {\n flex-direction: row;\n }\n}\n\n@media screen and (min-width: 768px) {\n nav {\n border-bottom: var(--sgds-border-width-0);\n }\n\n .subnav {\n flex-direction: row;\n }\n\n .subnav.collapsed {\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n }\n\n .header-container {\n padding: var(--sgds-padding-lg) var(--sgds-padding-2-xl);\n }\n\n .subnav-nav {\n position: absolute;\n top: 100%;\n left: 0px;\n background-color: var(--sgds-surface-raised);\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n }\n\n .subnav-actions {\n flex-direction: row;\n align-items: center;\n padding: var(--sgds-padding-sm) var(--sgds-padding-2-xl) var(--sgds-padding-sm) var(--sgds-padding-none);\n position: inherit;\n }\n}\n\n@media screen and (min-width: 1024px) {\n nav {\n position: inherit;\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n }\n\n .subnav {\n flex-wrap: wrap;\n gap: var(--sgds-gap-xl);\n row-gap: var(--sgds-gap-none);\n }\n\n .subnav.collapsed {\n border-bottom: var(--sgds-border-width-0);\n }\n\n .header-container {\n padding: var(--sgds-padding-none);\n width: auto;\n flex: 1;\n }\n\n .header-content {\n padding-top: var(--sgds-padding-lg);\n white-space: nowrap;\n }\n\n .subnav-nav-group {\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n gap: var(--sgds-gap-xl);\n row-gap: var(--sgds-gap-none);\n flex: inherit;\n width: auto;\n }\n\n .subnav-nav {\n display: flex;\n flex-wrap: wrap;\n gap: var(--sgds-gap-lg);\n row-gap: 0;\n align-items: center;\n flex-direction: row;\n overflow-y: inherit;\n transition: none;\n position: inherit;\n background-color: inherit;\n border-bottom: var(--sgds-border-width-0);\n width: auto;\n }\n\n .subnav-nav ::slotted(*) {\n width: inherit;\n }\n\n .subnav-toggler {\n display: none;\n }\n\n .subnav-actions {\n padding: var(--sgds-padding-sm) var(--sgds-padding-none);\n width: auto;\n }\n\n slot[name=\"actions\"]::slotted(*) {\n width: inherit;\n }\n}\n"],"mappings":""}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  //#region src/components/Table/table-cell.css
3
- var css_248z = require("lit").css`:host{border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);display:table-cell;vertical-align:middle}.table-cell{align-items:center;display:flex;min-height:var(--sgds-dimension-56);padding:var(--sgds-padding-sm) var(--sgds-padding-md)}`;
3
+ var css_248z = require("lit").css`:host{display:table-cell}.table-cell{align-items:center;border-bottom:var(--table-cell-border-bottom,var(--sgds-border-width-1) solid var(--sgds-border-color-muted));display:flex;min-height:var(--sgds-dimension-56);padding:var(--sgds-padding-sm) var(--sgds-padding-md);vertical-align:middle}`;
4
4
  //#endregion
5
5
  exports.default = css_248z;
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"table-cell.cjs.js","names":[],"sources":["../../../../src/components/Table/table-cell.css"],"sourcesContent":[":host {\n display: table-cell;\n vertical-align: middle;\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n}\n\n.table-cell {\n display: flex;\n align-items: center;\n min-height: var(--sgds-dimension-56);\n padding: var(--sgds-padding-sm) var(--sgds-padding-md);\n}\n"],"mappings":""}
1
+ {"version":3,"file":"table-cell.cjs.js","names":[],"sources":["../../../../src/components/Table/table-cell.css"],"sourcesContent":[":host {\n display: table-cell;\n}\n\n.table-cell {\n display: flex;\n align-items: center;\n vertical-align: middle;\n min-height: var(--sgds-dimension-56);\n padding: var(--sgds-padding-sm) var(--sgds-padding-md);\n border-bottom: var(--table-cell-border-bottom, var(--sgds-border-width-1) solid var(--sgds-border-color-muted));\n}\n"],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { css } from "lit";
3
3
  //#region src/components/Table/table-cell.css
4
- var css_248z = css`:host{border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);display:table-cell;vertical-align:middle}.table-cell{align-items:center;display:flex;min-height:var(--sgds-dimension-56);padding:var(--sgds-padding-sm) var(--sgds-padding-md)}`;
4
+ var css_248z = css`:host{display:table-cell}.table-cell{align-items:center;border-bottom:var(--table-cell-border-bottom,var(--sgds-border-width-1) solid var(--sgds-border-color-muted));display:flex;min-height:var(--sgds-dimension-56);padding:var(--sgds-padding-sm) var(--sgds-padding-md);vertical-align:middle}`;
5
5
  //#endregion
6
6
  export { css_248z as default };
7
7
 
@@ -1 +1 @@
1
- {"version":3,"file":"table-cell.js","names":[],"sources":["../../../../src/components/Table/table-cell.css"],"sourcesContent":[":host {\n display: table-cell;\n vertical-align: middle;\n border-bottom: var(--sgds-border-width-1) solid var(--sgds-border-color-muted);\n}\n\n.table-cell {\n display: flex;\n align-items: center;\n min-height: var(--sgds-dimension-56);\n padding: var(--sgds-padding-sm) var(--sgds-padding-md);\n}\n"],"mappings":""}
1
+ {"version":3,"file":"table-cell.js","names":[],"sources":["../../../../src/components/Table/table-cell.css"],"sourcesContent":[":host {\n display: table-cell;\n}\n\n.table-cell {\n display: flex;\n align-items: center;\n vertical-align: middle;\n min-height: var(--sgds-dimension-56);\n padding: var(--sgds-padding-sm) var(--sgds-padding-md);\n border-bottom: var(--table-cell-border-bottom, var(--sgds-border-width-1) solid var(--sgds-border-color-muted));\n}\n"],"mappings":""}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  //#region src/components/Table/table-row.css
3
- var css_248z = require("lit").css`:host{display:table-row;width:100%}:host([tableBorder]:last-of-type) .table-row::slotted(*){border-bottom:0}`;
3
+ var css_248z = require("lit").css`:host{display:table-row;width:100%}:host([tableBorder]:last-of-type) .table-row::slotted(*){--table-cell-border-bottom:0}`;
4
4
  //#endregion
5
5
  exports.default = css_248z;
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"table-row.cjs.js","names":[],"sources":["../../../../src/components/Table/table-row.css"],"sourcesContent":[":host {\n display: table-row;\n width: 100%;\n}\n\n:host([tableBorder]:last-of-type) .table-row::slotted(*) {\n border-bottom: 0;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"table-row.cjs.js","names":[],"sources":["../../../../src/components/Table/table-row.css"],"sourcesContent":[":host {\n display: table-row;\n width: 100%;\n}\n\n:host([tableBorder]:last-of-type) .table-row::slotted(*) {\n --table-cell-border-bottom: 0;\n}\n"],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { css } from "lit";
3
3
  //#region src/components/Table/table-row.css
4
- var css_248z = css`:host{display:table-row;width:100%}:host([tableBorder]:last-of-type) .table-row::slotted(*){border-bottom:0}`;
4
+ var css_248z = css`:host{display:table-row;width:100%}:host([tableBorder]:last-of-type) .table-row::slotted(*){--table-cell-border-bottom:0}`;
5
5
  //#endregion
6
6
  export { css_248z as default };
7
7
 
@@ -1 +1 @@
1
- {"version":3,"file":"table-row.js","names":[],"sources":["../../../../src/components/Table/table-row.css"],"sourcesContent":[":host {\n display: table-row;\n width: 100%;\n}\n\n:host([tableBorder]:last-of-type) .table-row::slotted(*) {\n border-bottom: 0;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"table-row.js","names":[],"sources":["../../../../src/components/Table/table-row.css"],"sourcesContent":[":host {\n display: table-row;\n width: 100%;\n}\n\n:host([tableBorder]:last-of-type) .table-row::slotted(*) {\n --table-cell-border-bottom: 0;\n}\n"],"mappings":""}
@@ -131,8 +131,12 @@ var SgdsTextarea = class extends require_validatorMixin.SgdsFormValidatorMixin(r
131
131
  this.setInvalid(false);
132
132
  }
133
133
  /** @internal */
134
- _handleValueChange() {
135
- this.updateComplete.then(() => this._setTextareaHeight());
134
+ async _handleValueChange() {
135
+ this._mixinSetFormValue();
136
+ await this.updateComplete;
137
+ this._setTextareaHeight();
138
+ if (this._mixinShouldSkipSgdsValidation()) return;
139
+ this._mixinValidate(this.input);
136
140
  }
137
141
  _renderHintText() {
138
142
  const hintTextTemplate = lit_static_html_js.html` <div id="${this._controlId}Help" class="form-text">${this.hintText}</div> `;
@@ -1 +1 @@
1
- {"version":3,"file":"sgds-textarea.cjs.js","names":["SgdsFormValidatorMixin","FormControlElement","formTextControlStyles","textareaStyle","classMap","ifDefined","live","nothing","query","property","defaultValue","state","watch"],"sources":["../../../../src/components/Textarea/sgds-textarea.ts"],"sourcesContent":["import { nothing } from \"lit\";\nimport { property, query, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { live } from \"lit/directives/live.js\";\nimport { html } from \"lit/static-html.js\";\nimport FormControlElement from \"../../base/form-control-element\";\nimport { defaultValue } from \"../../utils/defaultvalue\";\nimport { SgdsFormControl } from \"../../utils/formSubmitController\";\nimport { SgdsFormValidatorMixin } from \"../../utils/validatorMixin\";\nimport { watch } from \"../../utils/watch\";\nimport textareaStyle from \"./textarea.css\";\nimport formTextControlStyles from \"../../styles/form-text-control.css\";\n\n/**\n * @summary Text areas allow for the collection of input longer than a single line.\n *\n * @slot invalidIcon - The slot for invalid icon\n *\n * @event sgds-change - Emitted when an alteration to the control's value is committed by the user.\n * @event sgds-input - Emitted when the control receives input and its value changes.\n * @event sgds-focus - Emitted when textarea is in focus.\n * @event sgds-blur - Emitted when textarea loses focus.\n * @event sgds-invalid - Emitted when the textarea's invalid state is set to true.\n * @event sgds-valid - Emitted when the textarea's invalid state is set to false.\n */\nexport class SgdsTextarea extends SgdsFormValidatorMixin(FormControlElement) implements SgdsFormControl {\n static styles = [...FormControlElement.styles, formTextControlStyles, textareaStyle];\n /**@internal */\n @query(\"textarea.form-control-group\") textarea: HTMLTextAreaElement;\n /**@internal */\n private resizeObserver: ResizeObserver;\n /**The textarea's name attribute */\n @property({ type: String, reflect: true }) name: string;\n /**The textarea's value attribute. */\n @property({ type: String, reflect: true }) value = \"\";\n /**Sets the minimum length of the textarea */\n @property({ type: Number, reflect: true }) minlength: number;\n /**Sets the maximum length of the textarea. When maxlength is defined, a word count appears on bottom right of the input*/\n @property({ type: Number, reflect: true }) maxlength: number;\n /**Enables spell checking on the textarea */\n @property({ type: Boolean, reflect: true }) spellcheck = false;\n /** The number of rows to display by default. */\n @property({ type: Number }) rows = 4;\n /**The textarea's placeholder text. */\n @property({ type: String, reflect: true }) placeholder = \"Placeholder\";\n /** Custom feedback text for error state when validated */\n @property({ type: String, reflect: true }) invalidFeedback = \"\";\n /**Autofocus the textarea */\n @property({ type: Boolean, reflect: true }) autofocus = false;\n /** Makes the textarea readonly. */\n @property({ type: Boolean, reflect: true }) readonly = false;\n /** Controls how the textarea can be resized. */\n @property({ type: String, reflect: true }) resize: \"none\" | \"vertical\" | \"auto\" = \"vertical\";\n /** The native textarea's inputmode attribute. It hints at the type of data that might be entered by the user while editing the element or its contents. This allows a browser to display an appropriate virtual keyboard. */\n @property({ type: String, reflect: true }) inputmode:\n | \"none\"\n | \"text\"\n | \"decimal\"\n | \"numeric\"\n | \"tel\"\n | \"search\"\n | \"email\"\n | \"url\";\n /** The native textarea's autocorrect attribute. */\n @property({ type: Boolean, reflect: true }) autocorrect: boolean;\n /** @internal Gets or sets the default value used to reset this element. The initial value corresponds to the one originally specified in the HTML that created this element. */\n @defaultValue()\n defaultValue = \"\";\n /** Allows invalidFeedback, invalid and valid styles to be visible with the input */\n @property({ type: Boolean, reflect: true }) hasFeedback = false;\n\n /** Makes the textarea as a required field. */\n @property({ type: Boolean, reflect: true }) required = false;\n\n /** Disables native and sgds validation for the textarea. */\n @property({ type: Boolean, reflect: true }) noValidate = false;\n\n /** The textarea's hint text */\n @property({ reflect: true }) hintText = \"\";\n\n @state() private _isTouched = false;\n\n /** Sets focus on the textarea. */\n public focus(options?: FocusOptions) {\n this.textarea.focus(options);\n }\n /** Sets blur on the textarea. */\n public blur() {\n this.textarea.blur();\n }\n\n /**\n * Checks for validity. Under the hood, HTMLFormElement's reportValidity method calls this method to check for component's validity state\n * Note that the native error popup is prevented for SGDS form components by default. Instead the validation message shows up in the feedback container of SgdsInput\n */\n public reportValidity(): boolean {\n return this._mixinReportValidity();\n }\n /**\n * Checks for validity without any native error popup message\n */\n public checkValidity(): boolean {\n return this._mixinCheckValidity();\n }\n /**\n * Returns the ValidityState object\n */\n public get validity(): ValidityState {\n return this._mixinGetValidity();\n }\n /**\n * Returns the validation message based on the ValidityState\n */\n public get validationMessage() {\n return this._mixinGetValidationMessage();\n }\n\n /** Selects all the text in the textarea. */\n public select() {\n this.textarea.select();\n }\n private _handleInvalid(e: Event) {\n e.preventDefault();\n this.invalid = true;\n }\n\n protected _handleChange(e: Event) {\n this.value = this.input.value;\n this.emit(\"sgds-change\");\n super._mixinHandleChange(e);\n }\n private _handleInputChange(e: Event) {\n this.value = this.input.value;\n this.emit(\"sgds-input\");\n super._mixinHandleInputChange(e);\n }\n\n private _handleFocus() {\n this.emit(\"sgds-focus\");\n }\n\n private _handleBlur() {\n const sgdsBlur = this.emit(\"sgds-blur\", { cancelable: true });\n if (this._mixinShouldSkipSgdsValidation()) return;\n if (sgdsBlur.defaultPrevented) return;\n\n this.setInvalid(!this._mixinCheckValidity());\n this._isTouched = true;\n }\n\n /** @internal */\n @watch(\"rows\", { waitUntilFirstUpdate: true })\n _handleRowsChange() {\n this._setTextareaHeight();\n }\n\n private _setTextareaHeight() {\n if (this.resize === \"auto\") {\n this.textarea.style.height = \"auto\";\n this.textarea.style.height = `${this.textarea.scrollHeight}px`;\n } else {\n (this.textarea.style.height as string | undefined) = undefined;\n }\n }\n /** @internal */\n @watch(\"_isTouched\", { waitUntilFirstUpdate: true })\n _handleIsTouched() {\n if (this._mixinShouldSkipSgdsValidation()) return;\n if (this._isTouched) {\n this.setInvalid(!this._mixinCheckValidity());\n }\n }\n\n /** @internal */\n @watch(\"disabled\", { waitUntilFirstUpdate: true })\n _handleDisabledChange() {\n // Disabled form controls are always valid, so we need to recheck validity when the state changes\n this.setInvalid(false);\n }\n\n /** @internal */\n @watch(\"value\", { waitUntilFirstUpdate: true })\n _handleValueChange() {\n this.updateComplete.then(() => this._setTextareaHeight());\n }\n\n protected _renderHintText() {\n const hintTextTemplate = html` <div id=\"${this._controlId}Help\" class=\"form-text\">${this.hintText}</div> `;\n return this.hintText && hintTextTemplate;\n }\n\n private _wordCount() {\n return html`\n <div\n class=\"form-text word-count ${classMap({\n \"invalid-feedback\": this.invalid && this.hasFeedback\n })}\"\n >\n ${this.value.length}/${this.maxlength}\n </div>\n `;\n }\n render() {\n return html`\n <div\n class=\"form-control-container m-width-256 ${classMap({\n disabled: this.disabled\n })}\"\n >\n <label for=${this._controlId} class=\"form-label\">${this.label}</label>\n <textarea\n class=${classMap({\n \"form-control-group\": true,\n // \"form-control\": true,\n \"is-invalid\": this.hasFeedback && this.invalid,\n \"textarea-resize-none\": this.resize === \"none\",\n \"textarea-resize-vertical\": this.resize === \"vertical\",\n \"textarea-resize-auto\": this.resize === \"auto\",\n readonly: this.readonly,\n disabled: this.disabled\n })}\n id=${this._controlId}\n name=${ifDefined(this.name)}\n rows=${ifDefined(this.rows)}\n placeholder=${ifDefined(this.placeholder)}\n minlength=${ifDefined(this.minlength)}\n maxlength=${ifDefined(this.maxlength)}\n .value=${live(this.value)}\n aria-invalid=${this.invalid ? \"true\" : \"false\"}\n spellcheck=${ifDefined(this.spellcheck)}\n ?disabled=${this.disabled}\n ?readonly=${this.readonly}\n ?required=${this.required}\n ?autofocus=${this.autofocus}\n autocorrect=${ifDefined(this.autocorrect)}\n inputmode=${ifDefined(this.inputmode)}\n @input=${(e: Event) => this._handleInputChange(e)}\n @change=${(e: Event) => this._handleChange(e)}\n @invalid=${(e: Event) => this._handleInvalid(e)}\n @focus=${this._handleFocus}\n @blur=${this._handleBlur}\n ></textarea>\n <div class=\"textarea-info-container\">\n ${this.invalid && this.hasFeedback\n ? html`\n <div class=\"invalid-feedback-container\">\n <sgds-icon name=\"exclamation-circle-fill\" size=\"md\"></sgds-icon>\n <div id=\"${this._controlId}-invalid\" class=\"invalid-feedback\">\n ${this.invalidFeedback ? this.invalidFeedback : this.input.validationMessage}\n </div>\n </div>\n `\n : html`${this._renderHintText()}`}\n ${this.maxlength > 0 ? this._wordCount() : nothing}\n </div>\n </div>\n `;\n }\n}\n\nexport default SgdsTextarea;\n"],"mappings":"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"}
1
+ {"version":3,"file":"sgds-textarea.cjs.js","names":["SgdsFormValidatorMixin","FormControlElement","formTextControlStyles","textareaStyle","classMap","ifDefined","live","nothing","query","property","defaultValue","state","watch"],"sources":["../../../../src/components/Textarea/sgds-textarea.ts"],"sourcesContent":["import { nothing } from \"lit\";\nimport { property, query, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { live } from \"lit/directives/live.js\";\nimport { html } from \"lit/static-html.js\";\nimport FormControlElement from \"../../base/form-control-element\";\nimport { defaultValue } from \"../../utils/defaultvalue\";\nimport { SgdsFormControl } from \"../../utils/formSubmitController\";\nimport { SgdsFormValidatorMixin } from \"../../utils/validatorMixin\";\nimport { watch } from \"../../utils/watch\";\nimport textareaStyle from \"./textarea.css\";\nimport formTextControlStyles from \"../../styles/form-text-control.css\";\n\n/**\n * @summary Text areas allow for the collection of input longer than a single line.\n *\n * @slot invalidIcon - The slot for invalid icon\n *\n * @event sgds-change - Emitted when an alteration to the control's value is committed by the user.\n * @event sgds-input - Emitted when the control receives input and its value changes.\n * @event sgds-focus - Emitted when textarea is in focus.\n * @event sgds-blur - Emitted when textarea loses focus.\n * @event sgds-invalid - Emitted when the textarea's invalid state is set to true.\n * @event sgds-valid - Emitted when the textarea's invalid state is set to false.\n */\nexport class SgdsTextarea extends SgdsFormValidatorMixin(FormControlElement) implements SgdsFormControl {\n static styles = [...FormControlElement.styles, formTextControlStyles, textareaStyle];\n /**@internal */\n @query(\"textarea.form-control-group\") textarea: HTMLTextAreaElement;\n /**@internal */\n private resizeObserver: ResizeObserver;\n /**The textarea's name attribute */\n @property({ type: String, reflect: true }) name: string;\n /**The textarea's value attribute. */\n @property({ type: String, reflect: true }) value = \"\";\n /**Sets the minimum length of the textarea */\n @property({ type: Number, reflect: true }) minlength: number;\n /**Sets the maximum length of the textarea. When maxlength is defined, a word count appears on bottom right of the input*/\n @property({ type: Number, reflect: true }) maxlength: number;\n /**Enables spell checking on the textarea */\n @property({ type: Boolean, reflect: true }) spellcheck = false;\n /** The number of rows to display by default. */\n @property({ type: Number }) rows = 4;\n /**The textarea's placeholder text. */\n @property({ type: String, reflect: true }) placeholder = \"Placeholder\";\n /** Custom feedback text for error state when validated */\n @property({ type: String, reflect: true }) invalidFeedback = \"\";\n /**Autofocus the textarea */\n @property({ type: Boolean, reflect: true }) autofocus = false;\n /** Makes the textarea readonly. */\n @property({ type: Boolean, reflect: true }) readonly = false;\n /** Controls how the textarea can be resized. */\n @property({ type: String, reflect: true }) resize: \"none\" | \"vertical\" | \"auto\" = \"vertical\";\n /** The native textarea's inputmode attribute. It hints at the type of data that might be entered by the user while editing the element or its contents. This allows a browser to display an appropriate virtual keyboard. */\n @property({ type: String, reflect: true }) inputmode:\n | \"none\"\n | \"text\"\n | \"decimal\"\n | \"numeric\"\n | \"tel\"\n | \"search\"\n | \"email\"\n | \"url\";\n /** The native textarea's autocorrect attribute. */\n @property({ type: Boolean, reflect: true }) autocorrect: boolean;\n /** @internal Gets or sets the default value used to reset this element. The initial value corresponds to the one originally specified in the HTML that created this element. */\n @defaultValue()\n defaultValue = \"\";\n /** Allows invalidFeedback, invalid and valid styles to be visible with the input */\n @property({ type: Boolean, reflect: true }) hasFeedback = false;\n\n /** Makes the textarea as a required field. */\n @property({ type: Boolean, reflect: true }) required = false;\n\n /** Disables native and sgds validation for the textarea. */\n @property({ type: Boolean, reflect: true }) noValidate = false;\n\n /** The textarea's hint text */\n @property({ reflect: true }) hintText = \"\";\n\n @state() private _isTouched = false;\n\n /** Sets focus on the textarea. */\n public focus(options?: FocusOptions) {\n this.textarea.focus(options);\n }\n /** Sets blur on the textarea. */\n public blur() {\n this.textarea.blur();\n }\n\n /**\n * Checks for validity. Under the hood, HTMLFormElement's reportValidity method calls this method to check for component's validity state\n * Note that the native error popup is prevented for SGDS form components by default. Instead the validation message shows up in the feedback container of SgdsInput\n */\n public reportValidity(): boolean {\n return this._mixinReportValidity();\n }\n /**\n * Checks for validity without any native error popup message\n */\n public checkValidity(): boolean {\n return this._mixinCheckValidity();\n }\n /**\n * Returns the ValidityState object\n */\n public get validity(): ValidityState {\n return this._mixinGetValidity();\n }\n /**\n * Returns the validation message based on the ValidityState\n */\n public get validationMessage() {\n return this._mixinGetValidationMessage();\n }\n\n /** Selects all the text in the textarea. */\n public select() {\n this.textarea.select();\n }\n private _handleInvalid(e: Event) {\n e.preventDefault();\n this.invalid = true;\n }\n\n protected _handleChange(e: Event) {\n this.value = this.input.value;\n this.emit(\"sgds-change\");\n super._mixinHandleChange(e);\n }\n private _handleInputChange(e: Event) {\n this.value = this.input.value;\n this.emit(\"sgds-input\");\n super._mixinHandleInputChange(e);\n }\n\n private _handleFocus() {\n this.emit(\"sgds-focus\");\n }\n\n private _handleBlur() {\n const sgdsBlur = this.emit(\"sgds-blur\", { cancelable: true });\n if (this._mixinShouldSkipSgdsValidation()) return;\n if (sgdsBlur.defaultPrevented) return;\n\n this.setInvalid(!this._mixinCheckValidity());\n this._isTouched = true;\n }\n\n /** @internal */\n @watch(\"rows\", { waitUntilFirstUpdate: true })\n _handleRowsChange() {\n this._setTextareaHeight();\n }\n\n private _setTextareaHeight() {\n if (this.resize === \"auto\") {\n this.textarea.style.height = \"auto\";\n this.textarea.style.height = `${this.textarea.scrollHeight}px`;\n } else {\n (this.textarea.style.height as string | undefined) = undefined;\n }\n }\n /** @internal */\n @watch(\"_isTouched\", { waitUntilFirstUpdate: true })\n _handleIsTouched() {\n if (this._mixinShouldSkipSgdsValidation()) return;\n if (this._isTouched) {\n this.setInvalid(!this._mixinCheckValidity());\n }\n }\n\n /** @internal */\n @watch(\"disabled\", { waitUntilFirstUpdate: true })\n _handleDisabledChange() {\n // Disabled form controls are always valid, so we need to recheck validity when the state changes\n this.setInvalid(false);\n }\n\n /** @internal */\n @watch(\"value\", { waitUntilFirstUpdate: true })\n async _handleValueChange() {\n this._mixinSetFormValue();\n await this.updateComplete;\n this._setTextareaHeight();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this._mixinValidate(this.input);\n }\n\n protected _renderHintText() {\n const hintTextTemplate = html` <div id=\"${this._controlId}Help\" class=\"form-text\">${this.hintText}</div> `;\n return this.hintText && hintTextTemplate;\n }\n\n private _wordCount() {\n return html`\n <div\n class=\"form-text word-count ${classMap({\n \"invalid-feedback\": this.invalid && this.hasFeedback\n })}\"\n >\n ${this.value.length}/${this.maxlength}\n </div>\n `;\n }\n render() {\n return html`\n <div\n class=\"form-control-container m-width-256 ${classMap({\n disabled: this.disabled\n })}\"\n >\n <label for=${this._controlId} class=\"form-label\">${this.label}</label>\n <textarea\n class=${classMap({\n \"form-control-group\": true,\n // \"form-control\": true,\n \"is-invalid\": this.hasFeedback && this.invalid,\n \"textarea-resize-none\": this.resize === \"none\",\n \"textarea-resize-vertical\": this.resize === \"vertical\",\n \"textarea-resize-auto\": this.resize === \"auto\",\n readonly: this.readonly,\n disabled: this.disabled\n })}\n id=${this._controlId}\n name=${ifDefined(this.name)}\n rows=${ifDefined(this.rows)}\n placeholder=${ifDefined(this.placeholder)}\n minlength=${ifDefined(this.minlength)}\n maxlength=${ifDefined(this.maxlength)}\n .value=${live(this.value)}\n aria-invalid=${this.invalid ? \"true\" : \"false\"}\n spellcheck=${ifDefined(this.spellcheck)}\n ?disabled=${this.disabled}\n ?readonly=${this.readonly}\n ?required=${this.required}\n ?autofocus=${this.autofocus}\n autocorrect=${ifDefined(this.autocorrect)}\n inputmode=${ifDefined(this.inputmode)}\n @input=${(e: Event) => this._handleInputChange(e)}\n @change=${(e: Event) => this._handleChange(e)}\n @invalid=${(e: Event) => this._handleInvalid(e)}\n @focus=${this._handleFocus}\n @blur=${this._handleBlur}\n ></textarea>\n <div class=\"textarea-info-container\">\n ${this.invalid && this.hasFeedback\n ? html`\n <div class=\"invalid-feedback-container\">\n <sgds-icon name=\"exclamation-circle-fill\" size=\"md\"></sgds-icon>\n <div id=\"${this._controlId}-invalid\" class=\"invalid-feedback\">\n ${this.invalidFeedback ? this.invalidFeedback : this.input.validationMessage}\n </div>\n </div>\n `\n : html`${this._renderHintText()}`}\n ${this.maxlength > 0 ? this._wordCount() : nothing}\n </div>\n </div>\n `;\n }\n}\n\nexport default SgdsTextarea;\n"],"mappings":"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"}
@@ -131,8 +131,12 @@ var SgdsTextarea = class extends SgdsFormValidatorMixin(FormControlElement) {
131
131
  this.setInvalid(false);
132
132
  }
133
133
  /** @internal */
134
- _handleValueChange() {
135
- this.updateComplete.then(() => this._setTextareaHeight());
134
+ async _handleValueChange() {
135
+ this._mixinSetFormValue();
136
+ await this.updateComplete;
137
+ this._setTextareaHeight();
138
+ if (this._mixinShouldSkipSgdsValidation()) return;
139
+ this._mixinValidate(this.input);
136
140
  }
137
141
  _renderHintText() {
138
142
  const hintTextTemplate = html$1` <div id="${this._controlId}Help" class="form-text">${this.hintText}</div> `;
@@ -1 +1 @@
1
- {"version":3,"file":"sgds-textarea.js","names":["formTextControlStyles","textareaStyle"],"sources":["../../../../src/components/Textarea/sgds-textarea.ts"],"sourcesContent":["import { nothing } from \"lit\";\nimport { property, query, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { live } from \"lit/directives/live.js\";\nimport { html } from \"lit/static-html.js\";\nimport FormControlElement from \"../../base/form-control-element\";\nimport { defaultValue } from \"../../utils/defaultvalue\";\nimport { SgdsFormControl } from \"../../utils/formSubmitController\";\nimport { SgdsFormValidatorMixin } from \"../../utils/validatorMixin\";\nimport { watch } from \"../../utils/watch\";\nimport textareaStyle from \"./textarea.css\";\nimport formTextControlStyles from \"../../styles/form-text-control.css\";\n\n/**\n * @summary Text areas allow for the collection of input longer than a single line.\n *\n * @slot invalidIcon - The slot for invalid icon\n *\n * @event sgds-change - Emitted when an alteration to the control's value is committed by the user.\n * @event sgds-input - Emitted when the control receives input and its value changes.\n * @event sgds-focus - Emitted when textarea is in focus.\n * @event sgds-blur - Emitted when textarea loses focus.\n * @event sgds-invalid - Emitted when the textarea's invalid state is set to true.\n * @event sgds-valid - Emitted when the textarea's invalid state is set to false.\n */\nexport class SgdsTextarea extends SgdsFormValidatorMixin(FormControlElement) implements SgdsFormControl {\n static styles = [...FormControlElement.styles, formTextControlStyles, textareaStyle];\n /**@internal */\n @query(\"textarea.form-control-group\") textarea: HTMLTextAreaElement;\n /**@internal */\n private resizeObserver: ResizeObserver;\n /**The textarea's name attribute */\n @property({ type: String, reflect: true }) name: string;\n /**The textarea's value attribute. */\n @property({ type: String, reflect: true }) value = \"\";\n /**Sets the minimum length of the textarea */\n @property({ type: Number, reflect: true }) minlength: number;\n /**Sets the maximum length of the textarea. When maxlength is defined, a word count appears on bottom right of the input*/\n @property({ type: Number, reflect: true }) maxlength: number;\n /**Enables spell checking on the textarea */\n @property({ type: Boolean, reflect: true }) spellcheck = false;\n /** The number of rows to display by default. */\n @property({ type: Number }) rows = 4;\n /**The textarea's placeholder text. */\n @property({ type: String, reflect: true }) placeholder = \"Placeholder\";\n /** Custom feedback text for error state when validated */\n @property({ type: String, reflect: true }) invalidFeedback = \"\";\n /**Autofocus the textarea */\n @property({ type: Boolean, reflect: true }) autofocus = false;\n /** Makes the textarea readonly. */\n @property({ type: Boolean, reflect: true }) readonly = false;\n /** Controls how the textarea can be resized. */\n @property({ type: String, reflect: true }) resize: \"none\" | \"vertical\" | \"auto\" = \"vertical\";\n /** The native textarea's inputmode attribute. It hints at the type of data that might be entered by the user while editing the element or its contents. This allows a browser to display an appropriate virtual keyboard. */\n @property({ type: String, reflect: true }) inputmode:\n | \"none\"\n | \"text\"\n | \"decimal\"\n | \"numeric\"\n | \"tel\"\n | \"search\"\n | \"email\"\n | \"url\";\n /** The native textarea's autocorrect attribute. */\n @property({ type: Boolean, reflect: true }) autocorrect: boolean;\n /** @internal Gets or sets the default value used to reset this element. The initial value corresponds to the one originally specified in the HTML that created this element. */\n @defaultValue()\n defaultValue = \"\";\n /** Allows invalidFeedback, invalid and valid styles to be visible with the input */\n @property({ type: Boolean, reflect: true }) hasFeedback = false;\n\n /** Makes the textarea as a required field. */\n @property({ type: Boolean, reflect: true }) required = false;\n\n /** Disables native and sgds validation for the textarea. */\n @property({ type: Boolean, reflect: true }) noValidate = false;\n\n /** The textarea's hint text */\n @property({ reflect: true }) hintText = \"\";\n\n @state() private _isTouched = false;\n\n /** Sets focus on the textarea. */\n public focus(options?: FocusOptions) {\n this.textarea.focus(options);\n }\n /** Sets blur on the textarea. */\n public blur() {\n this.textarea.blur();\n }\n\n /**\n * Checks for validity. Under the hood, HTMLFormElement's reportValidity method calls this method to check for component's validity state\n * Note that the native error popup is prevented for SGDS form components by default. Instead the validation message shows up in the feedback container of SgdsInput\n */\n public reportValidity(): boolean {\n return this._mixinReportValidity();\n }\n /**\n * Checks for validity without any native error popup message\n */\n public checkValidity(): boolean {\n return this._mixinCheckValidity();\n }\n /**\n * Returns the ValidityState object\n */\n public get validity(): ValidityState {\n return this._mixinGetValidity();\n }\n /**\n * Returns the validation message based on the ValidityState\n */\n public get validationMessage() {\n return this._mixinGetValidationMessage();\n }\n\n /** Selects all the text in the textarea. */\n public select() {\n this.textarea.select();\n }\n private _handleInvalid(e: Event) {\n e.preventDefault();\n this.invalid = true;\n }\n\n protected _handleChange(e: Event) {\n this.value = this.input.value;\n this.emit(\"sgds-change\");\n super._mixinHandleChange(e);\n }\n private _handleInputChange(e: Event) {\n this.value = this.input.value;\n this.emit(\"sgds-input\");\n super._mixinHandleInputChange(e);\n }\n\n private _handleFocus() {\n this.emit(\"sgds-focus\");\n }\n\n private _handleBlur() {\n const sgdsBlur = this.emit(\"sgds-blur\", { cancelable: true });\n if (this._mixinShouldSkipSgdsValidation()) return;\n if (sgdsBlur.defaultPrevented) return;\n\n this.setInvalid(!this._mixinCheckValidity());\n this._isTouched = true;\n }\n\n /** @internal */\n @watch(\"rows\", { waitUntilFirstUpdate: true })\n _handleRowsChange() {\n this._setTextareaHeight();\n }\n\n private _setTextareaHeight() {\n if (this.resize === \"auto\") {\n this.textarea.style.height = \"auto\";\n this.textarea.style.height = `${this.textarea.scrollHeight}px`;\n } else {\n (this.textarea.style.height as string | undefined) = undefined;\n }\n }\n /** @internal */\n @watch(\"_isTouched\", { waitUntilFirstUpdate: true })\n _handleIsTouched() {\n if (this._mixinShouldSkipSgdsValidation()) return;\n if (this._isTouched) {\n this.setInvalid(!this._mixinCheckValidity());\n }\n }\n\n /** @internal */\n @watch(\"disabled\", { waitUntilFirstUpdate: true })\n _handleDisabledChange() {\n // Disabled form controls are always valid, so we need to recheck validity when the state changes\n this.setInvalid(false);\n }\n\n /** @internal */\n @watch(\"value\", { waitUntilFirstUpdate: true })\n _handleValueChange() {\n this.updateComplete.then(() => this._setTextareaHeight());\n }\n\n protected _renderHintText() {\n const hintTextTemplate = html` <div id=\"${this._controlId}Help\" class=\"form-text\">${this.hintText}</div> `;\n return this.hintText && hintTextTemplate;\n }\n\n private _wordCount() {\n return html`\n <div\n class=\"form-text word-count ${classMap({\n \"invalid-feedback\": this.invalid && this.hasFeedback\n })}\"\n >\n ${this.value.length}/${this.maxlength}\n </div>\n `;\n }\n render() {\n return html`\n <div\n class=\"form-control-container m-width-256 ${classMap({\n disabled: this.disabled\n })}\"\n >\n <label for=${this._controlId} class=\"form-label\">${this.label}</label>\n <textarea\n class=${classMap({\n \"form-control-group\": true,\n // \"form-control\": true,\n \"is-invalid\": this.hasFeedback && this.invalid,\n \"textarea-resize-none\": this.resize === \"none\",\n \"textarea-resize-vertical\": this.resize === \"vertical\",\n \"textarea-resize-auto\": this.resize === \"auto\",\n readonly: this.readonly,\n disabled: this.disabled\n })}\n id=${this._controlId}\n name=${ifDefined(this.name)}\n rows=${ifDefined(this.rows)}\n placeholder=${ifDefined(this.placeholder)}\n minlength=${ifDefined(this.minlength)}\n maxlength=${ifDefined(this.maxlength)}\n .value=${live(this.value)}\n aria-invalid=${this.invalid ? \"true\" : \"false\"}\n spellcheck=${ifDefined(this.spellcheck)}\n ?disabled=${this.disabled}\n ?readonly=${this.readonly}\n ?required=${this.required}\n ?autofocus=${this.autofocus}\n autocorrect=${ifDefined(this.autocorrect)}\n inputmode=${ifDefined(this.inputmode)}\n @input=${(e: Event) => this._handleInputChange(e)}\n @change=${(e: Event) => this._handleChange(e)}\n @invalid=${(e: Event) => this._handleInvalid(e)}\n @focus=${this._handleFocus}\n @blur=${this._handleBlur}\n ></textarea>\n <div class=\"textarea-info-container\">\n ${this.invalid && this.hasFeedback\n ? html`\n <div class=\"invalid-feedback-container\">\n <sgds-icon name=\"exclamation-circle-fill\" size=\"md\"></sgds-icon>\n <div id=\"${this._controlId}-invalid\" class=\"invalid-feedback\">\n ${this.invalidFeedback ? this.invalidFeedback : this.input.validationMessage}\n </div>\n </div>\n `\n : html`${this._renderHintText()}`}\n ${this.maxlength > 0 ? this._wordCount() : nothing}\n </div>\n </div>\n `;\n }\n}\n\nexport default SgdsTextarea;\n"],"mappings":"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"}
1
+ {"version":3,"file":"sgds-textarea.js","names":["formTextControlStyles","textareaStyle"],"sources":["../../../../src/components/Textarea/sgds-textarea.ts"],"sourcesContent":["import { nothing } from \"lit\";\nimport { property, query, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { live } from \"lit/directives/live.js\";\nimport { html } from \"lit/static-html.js\";\nimport FormControlElement from \"../../base/form-control-element\";\nimport { defaultValue } from \"../../utils/defaultvalue\";\nimport { SgdsFormControl } from \"../../utils/formSubmitController\";\nimport { SgdsFormValidatorMixin } from \"../../utils/validatorMixin\";\nimport { watch } from \"../../utils/watch\";\nimport textareaStyle from \"./textarea.css\";\nimport formTextControlStyles from \"../../styles/form-text-control.css\";\n\n/**\n * @summary Text areas allow for the collection of input longer than a single line.\n *\n * @slot invalidIcon - The slot for invalid icon\n *\n * @event sgds-change - Emitted when an alteration to the control's value is committed by the user.\n * @event sgds-input - Emitted when the control receives input and its value changes.\n * @event sgds-focus - Emitted when textarea is in focus.\n * @event sgds-blur - Emitted when textarea loses focus.\n * @event sgds-invalid - Emitted when the textarea's invalid state is set to true.\n * @event sgds-valid - Emitted when the textarea's invalid state is set to false.\n */\nexport class SgdsTextarea extends SgdsFormValidatorMixin(FormControlElement) implements SgdsFormControl {\n static styles = [...FormControlElement.styles, formTextControlStyles, textareaStyle];\n /**@internal */\n @query(\"textarea.form-control-group\") textarea: HTMLTextAreaElement;\n /**@internal */\n private resizeObserver: ResizeObserver;\n /**The textarea's name attribute */\n @property({ type: String, reflect: true }) name: string;\n /**The textarea's value attribute. */\n @property({ type: String, reflect: true }) value = \"\";\n /**Sets the minimum length of the textarea */\n @property({ type: Number, reflect: true }) minlength: number;\n /**Sets the maximum length of the textarea. When maxlength is defined, a word count appears on bottom right of the input*/\n @property({ type: Number, reflect: true }) maxlength: number;\n /**Enables spell checking on the textarea */\n @property({ type: Boolean, reflect: true }) spellcheck = false;\n /** The number of rows to display by default. */\n @property({ type: Number }) rows = 4;\n /**The textarea's placeholder text. */\n @property({ type: String, reflect: true }) placeholder = \"Placeholder\";\n /** Custom feedback text for error state when validated */\n @property({ type: String, reflect: true }) invalidFeedback = \"\";\n /**Autofocus the textarea */\n @property({ type: Boolean, reflect: true }) autofocus = false;\n /** Makes the textarea readonly. */\n @property({ type: Boolean, reflect: true }) readonly = false;\n /** Controls how the textarea can be resized. */\n @property({ type: String, reflect: true }) resize: \"none\" | \"vertical\" | \"auto\" = \"vertical\";\n /** The native textarea's inputmode attribute. It hints at the type of data that might be entered by the user while editing the element or its contents. This allows a browser to display an appropriate virtual keyboard. */\n @property({ type: String, reflect: true }) inputmode:\n | \"none\"\n | \"text\"\n | \"decimal\"\n | \"numeric\"\n | \"tel\"\n | \"search\"\n | \"email\"\n | \"url\";\n /** The native textarea's autocorrect attribute. */\n @property({ type: Boolean, reflect: true }) autocorrect: boolean;\n /** @internal Gets or sets the default value used to reset this element. The initial value corresponds to the one originally specified in the HTML that created this element. */\n @defaultValue()\n defaultValue = \"\";\n /** Allows invalidFeedback, invalid and valid styles to be visible with the input */\n @property({ type: Boolean, reflect: true }) hasFeedback = false;\n\n /** Makes the textarea as a required field. */\n @property({ type: Boolean, reflect: true }) required = false;\n\n /** Disables native and sgds validation for the textarea. */\n @property({ type: Boolean, reflect: true }) noValidate = false;\n\n /** The textarea's hint text */\n @property({ reflect: true }) hintText = \"\";\n\n @state() private _isTouched = false;\n\n /** Sets focus on the textarea. */\n public focus(options?: FocusOptions) {\n this.textarea.focus(options);\n }\n /** Sets blur on the textarea. */\n public blur() {\n this.textarea.blur();\n }\n\n /**\n * Checks for validity. Under the hood, HTMLFormElement's reportValidity method calls this method to check for component's validity state\n * Note that the native error popup is prevented for SGDS form components by default. Instead the validation message shows up in the feedback container of SgdsInput\n */\n public reportValidity(): boolean {\n return this._mixinReportValidity();\n }\n /**\n * Checks for validity without any native error popup message\n */\n public checkValidity(): boolean {\n return this._mixinCheckValidity();\n }\n /**\n * Returns the ValidityState object\n */\n public get validity(): ValidityState {\n return this._mixinGetValidity();\n }\n /**\n * Returns the validation message based on the ValidityState\n */\n public get validationMessage() {\n return this._mixinGetValidationMessage();\n }\n\n /** Selects all the text in the textarea. */\n public select() {\n this.textarea.select();\n }\n private _handleInvalid(e: Event) {\n e.preventDefault();\n this.invalid = true;\n }\n\n protected _handleChange(e: Event) {\n this.value = this.input.value;\n this.emit(\"sgds-change\");\n super._mixinHandleChange(e);\n }\n private _handleInputChange(e: Event) {\n this.value = this.input.value;\n this.emit(\"sgds-input\");\n super._mixinHandleInputChange(e);\n }\n\n private _handleFocus() {\n this.emit(\"sgds-focus\");\n }\n\n private _handleBlur() {\n const sgdsBlur = this.emit(\"sgds-blur\", { cancelable: true });\n if (this._mixinShouldSkipSgdsValidation()) return;\n if (sgdsBlur.defaultPrevented) return;\n\n this.setInvalid(!this._mixinCheckValidity());\n this._isTouched = true;\n }\n\n /** @internal */\n @watch(\"rows\", { waitUntilFirstUpdate: true })\n _handleRowsChange() {\n this._setTextareaHeight();\n }\n\n private _setTextareaHeight() {\n if (this.resize === \"auto\") {\n this.textarea.style.height = \"auto\";\n this.textarea.style.height = `${this.textarea.scrollHeight}px`;\n } else {\n (this.textarea.style.height as string | undefined) = undefined;\n }\n }\n /** @internal */\n @watch(\"_isTouched\", { waitUntilFirstUpdate: true })\n _handleIsTouched() {\n if (this._mixinShouldSkipSgdsValidation()) return;\n if (this._isTouched) {\n this.setInvalid(!this._mixinCheckValidity());\n }\n }\n\n /** @internal */\n @watch(\"disabled\", { waitUntilFirstUpdate: true })\n _handleDisabledChange() {\n // Disabled form controls are always valid, so we need to recheck validity when the state changes\n this.setInvalid(false);\n }\n\n /** @internal */\n @watch(\"value\", { waitUntilFirstUpdate: true })\n async _handleValueChange() {\n this._mixinSetFormValue();\n await this.updateComplete;\n this._setTextareaHeight();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this._mixinValidate(this.input);\n }\n\n protected _renderHintText() {\n const hintTextTemplate = html` <div id=\"${this._controlId}Help\" class=\"form-text\">${this.hintText}</div> `;\n return this.hintText && hintTextTemplate;\n }\n\n private _wordCount() {\n return html`\n <div\n class=\"form-text word-count ${classMap({\n \"invalid-feedback\": this.invalid && this.hasFeedback\n })}\"\n >\n ${this.value.length}/${this.maxlength}\n </div>\n `;\n }\n render() {\n return html`\n <div\n class=\"form-control-container m-width-256 ${classMap({\n disabled: this.disabled\n })}\"\n >\n <label for=${this._controlId} class=\"form-label\">${this.label}</label>\n <textarea\n class=${classMap({\n \"form-control-group\": true,\n // \"form-control\": true,\n \"is-invalid\": this.hasFeedback && this.invalid,\n \"textarea-resize-none\": this.resize === \"none\",\n \"textarea-resize-vertical\": this.resize === \"vertical\",\n \"textarea-resize-auto\": this.resize === \"auto\",\n readonly: this.readonly,\n disabled: this.disabled\n })}\n id=${this._controlId}\n name=${ifDefined(this.name)}\n rows=${ifDefined(this.rows)}\n placeholder=${ifDefined(this.placeholder)}\n minlength=${ifDefined(this.minlength)}\n maxlength=${ifDefined(this.maxlength)}\n .value=${live(this.value)}\n aria-invalid=${this.invalid ? \"true\" : \"false\"}\n spellcheck=${ifDefined(this.spellcheck)}\n ?disabled=${this.disabled}\n ?readonly=${this.readonly}\n ?required=${this.required}\n ?autofocus=${this.autofocus}\n autocorrect=${ifDefined(this.autocorrect)}\n inputmode=${ifDefined(this.inputmode)}\n @input=${(e: Event) => this._handleInputChange(e)}\n @change=${(e: Event) => this._handleChange(e)}\n @invalid=${(e: Event) => this._handleInvalid(e)}\n @focus=${this._handleFocus}\n @blur=${this._handleBlur}\n ></textarea>\n <div class=\"textarea-info-container\">\n ${this.invalid && this.hasFeedback\n ? html`\n <div class=\"invalid-feedback-container\">\n <sgds-icon name=\"exclamation-circle-fill\" size=\"md\"></sgds-icon>\n <div id=\"${this._controlId}-invalid\" class=\"invalid-feedback\">\n ${this.invalidFeedback ? this.invalidFeedback : this.input.validationMessage}\n </div>\n </div>\n `\n : html`${this._renderHintText()}`}\n ${this.maxlength > 0 ? this._wordCount() : nothing}\n </div>\n </div>\n `;\n }\n}\n\nexport default SgdsTextarea;\n"],"mappings":"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"}
@@ -1,31 +1 @@
1
1
  "use client";
2
- //#region src/utils/ssr-nonce-patch.ts
3
- /**
4
- * Patches @lit-labs/ssr's LitElementRenderer.renderShadow() to respect
5
- * globalThis.litNonce for CSP nonce injection.
6
- *
7
- * Uses globalThis.require (Node.js CJS require) for SYNCHRONOUS module
8
- * resolution. This ensures the patch is applied at module evaluation time —
9
- * before any SSR rendering starts, including on the first request.
10
- */
11
- if (typeof window === "undefined") try {
12
- const mod = (typeof require !== "undefined" ? require : new Function("id", "return import(id)"))("@lit-labs/ssr/lib/lit-element-renderer.js");
13
- const LitElementRenderer = mod.LitElementRenderer || mod.default?.LitElementRenderer;
14
- if (LitElementRenderer && !LitElementRenderer._sgdsNoncePatched) {
15
- LitElementRenderer._sgdsNoncePatched = true;
16
- const originalRenderShadow = LitElementRenderer.prototype.renderShadow;
17
- LitElementRenderer.prototype.renderShadow = function(renderInfo) {
18
- const result = originalRenderShadow.call(this, renderInfo);
19
- if (!result) return result;
20
- const nonce = globalThis["litNonce"];
21
- if (!nonce) return result;
22
- return result.map((item) => {
23
- if (typeof item === "string" && item === "<style>") return `<style nonce="${nonce}">`;
24
- return item;
25
- });
26
- };
27
- }
28
- } catch {}
29
- //#endregion
30
-
31
- //# sourceMappingURL=ssr-nonce-patch.cjs.js.map
@@ -1,32 +1,38 @@
1
- "use client";
2
- import { __require } from "../_virtual/_rolldown/runtime.js";
3
- //#region src/utils/ssr-nonce-patch.ts
4
1
  /**
5
- * Patches @lit-labs/ssr's LitElementRenderer.renderShadow() to respect
6
- * globalThis.litNonce for CSP nonce injection.
7
- *
8
- * Uses globalThis.require (Node.js CJS require) for SYNCHRONOUS module
9
- * resolution. This ensures the patch is applied at module evaluation time —
10
- * before any SSR rendering starts, including on the first request.
11
- */
12
- if (typeof window === "undefined") try {
13
- const mod = (typeof __require !== "undefined" ? __require : new Function("id", "return import(id)"))("@lit-labs/ssr/lib/lit-element-renderer.js");
14
- const LitElementRenderer = mod.LitElementRenderer || mod.default?.LitElementRenderer;
15
- if (LitElementRenderer && !LitElementRenderer._sgdsNoncePatched) {
16
- LitElementRenderer._sgdsNoncePatched = true;
17
- const originalRenderShadow = LitElementRenderer.prototype.renderShadow;
18
- LitElementRenderer.prototype.renderShadow = function(renderInfo) {
19
- const result = originalRenderShadow.call(this, renderInfo);
20
- if (!result) return result;
21
- const nonce = globalThis["litNonce"];
22
- if (!nonce) return result;
23
- return result.map((item) => {
24
- if (typeof item === "string" && item === "<style>") return `<style nonce="${nonce}">`;
25
- return item;
26
- });
27
- };
28
- }
29
- } catch {}
30
- //#endregion
2
+ * Patches @lit-labs/ssr's LitElementRenderer.renderShadow() to respect
3
+ * globalThis.litNonce for CSP nonce injection.
4
+ *
5
+ * This file is NOT processed by Rolldown — it's copied as-is to lib/.
6
+ * The bare require() is preserved so webpack resolves it within its own
7
+ * module system, ensuring we patch the SAME LitElementRenderer instance
8
+ * that @lit-labs/ssr-react uses during rendering.
9
+ */
10
+ if (typeof window === "undefined") {
11
+ try {
12
+ var mod = require("@lit-labs/ssr/lib/lit-element-renderer.js");
13
+ var LitElementRenderer = mod.LitElementRenderer || (mod.default && mod.default.LitElementRenderer);
31
14
 
32
- //# sourceMappingURL=ssr-nonce-patch.js.map
15
+ if (LitElementRenderer && !LitElementRenderer._sgdsNoncePatched) {
16
+ LitElementRenderer._sgdsNoncePatched = true;
17
+
18
+ var originalRenderShadow = LitElementRenderer.prototype.renderShadow;
19
+
20
+ LitElementRenderer.prototype.renderShadow = function (renderInfo) {
21
+ var result = originalRenderShadow.call(this, renderInfo);
22
+ if (!result) return result;
23
+
24
+ var nonce = globalThis.litNonce;
25
+ if (!nonce) return result;
26
+
27
+ return result.map(function (item) {
28
+ if (typeof item === "string" && item === "<style>") {
29
+ return '<style nonce="' + nonce + '">';
30
+ }
31
+ return item;
32
+ });
33
+ };
34
+ }
35
+ } catch (e) {
36
+ // @lit-labs/ssr not available — nonce injection disabled
37
+ }
38
+ }
@@ -84,9 +84,8 @@ const SgdsFormValidatorMixin = (superClass) => {
84
84
  if (this._mixinShouldSkipSgdsValidation()) return;
85
85
  this.inputValidationController.validateInput(input);
86
86
  }
87
- _mixinSetFormValue() {
88
- const value = this.value;
89
- this._internals.setFormValue(value);
87
+ _mixinSetFormValue(value) {
88
+ this._internals.setFormValue(value !== void 0 ? value : this.value);
90
89
  }
91
90
  _mixinCheckValidity() {
92
91
  if (this._mixinShouldSkipSgdsValidation()) return true;
@@ -1 +1 @@
1
- {"version":3,"file":"validatorMixin.cjs.js","names":["InputValidationController","queryAsync"],"sources":["../../../src/utils/validatorMixin.ts"],"sourcesContent":["import { LitElement, PropertyValueMap } from \"lit\";\nimport { queryAsync } from \"lit/decorators.js\";\nimport { SgdsInput } from \"../components\";\nimport { InputValidationController } from \"./inputValidationController\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T> = new (...args: any[]) => T;\n\n/**\n * @summary The FormValidationMixin used by the form components\n * @param superClass\n * @returns\n */\nexport const SgdsFormValidatorMixin = <T extends Constructor<LitElement>>(superClass: T) => {\n class ToBeValidatedElement extends superClass {\n static formAssociated = true;\n inputValidationController: InputValidationController;\n input: HTMLInputElement | SgdsInput | HTMLTextAreaElement;\n private _isTouched = false;\n private _internals: ElementInternals;\n @queryAsync(\"sgds-input\") sgdsInput: Promise<SgdsInput>;\n @queryAsync(\"sgds-datepicker-input\") sgdsDatepickerInput: Promise<SgdsInput>;\n\n // TypeScript requires mixin constructors to have rest parameter of type any[]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n this._internals = this.attachInternals();\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n /** Idempotency guarantee — always create so reset can clear validity even with noValidate */\n this.inputValidationController ??= new InputValidationController(this);\n }\n async firstUpdated(changedProperties: PropertyValueMap<this>) {\n super.firstUpdated(changedProperties);\n\n /* Either input or sgds-input. For example, quantity-toggle uses sgds-input */\n this.input =\n this.shadowRoot.querySelector(\"input\") ||\n (await this.sgdsInput) ||\n this.shadowRoot.querySelector(\"textarea\") ||\n (await this.sgdsDatepickerInput);\n\n this._mixinSetFormValue();\n\n if (this._mixinShouldSkipSgdsValidation()) return;\n\n this._mixinValidate(this.input);\n }\n\n /**\n * Native lifecycle of Form-Associated Custom Element Callbacks\n */\n formResetCallback() {\n if (this._mixinResetFormControl) {\n this._mixinResetFormControl();\n } else {\n this.value = this.defaultValue;\n this._mixinResetValidity(this.input);\n }\n this._mixinSetFormValue();\n }\n /**\n *\n * Methods use by classes using this mixin\n */\n\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run change handler\n */\n _mixinHandleChange(e: Event): void {\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.handleChange(e);\n }\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run input handler\n */\n _mixinHandleInputChange(e: Event): void {\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.handleInput(e);\n }\n /**\n * During form resetting,\n * 1. ValidityState is reset (always, regardless of noValidate)\n * 2. invalid reactive prop is updated after the reset (always)\n * 3. Reset touched state to false for a pristine form (always)\n * 4. Revalidates the ValidityState (but do not update invalid prop)\n * to prepare for the next validity check (skipped when noValidate)\n */\n _mixinResetValidity(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n this.inputValidationController.resetValidity();\n this.inputValidationController.updateInvalidState();\n this._isTouched ? (this._isTouched = false) : null;\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.validateInput(input);\n }\n\n _mixinValidate(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.validateInput(input);\n }\n _mixinSetFormValue() {\n const value = this.value as string | FormData | File;\n this._internals.setFormValue(value);\n }\n _mixinCheckValidity(): boolean {\n if (this._mixinShouldSkipSgdsValidation()) return true;\n return this.inputValidationController.checkValidity();\n }\n _mixinReportValidity(): boolean {\n if (this._mixinShouldSkipSgdsValidation()) return true;\n return this.inputValidationController.reportValidity();\n }\n _mixinGetValidity(): ValidityState {\n return this._internals.validity;\n }\n _mixinGetValidationMessage(): string {\n return this._internals.validationMessage;\n }\n _mixinSetValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void {\n if (this._mixinShouldSkipSgdsValidation()) return;\n return this.inputValidationController.setValidity(flags, message, anchor);\n }\n // Only check for noValidate prop\n _mixinShouldSkipSgdsValidation() {\n const form = this.closest(\"form\");\n\n return form?.noValidate || this.noValidate;\n }\n\n /** DECLARED INSTANCE METHODS AND PROPERTIES*/\n\n /**\n * Resets a form control to its initial state\n */\n declare _mixinResetFormControl: () => void;\n declare value: string;\n declare defaultValue: string;\n declare defaultChecked: boolean;\n declare noValidate: boolean;\n }\n\n return ToBeValidatedElement as Constructor<ToBeValidatedElementInterface> & T;\n};\n\nexport declare class ToBeValidatedElementInterface {\n inputValidationController: InputValidationController;\n input: HTMLInputElement;\n _mixinHandleChange(e: Event): void;\n _mixinHandleInputChange(e: Event): void;\n _mixinResetValidity(input: HTMLInputElement | SgdsInput): void;\n _mixinValidate(input: HTMLInputElement | SgdsInput): void;\n _mixinSetFormValue(): void;\n _mixinCheckValidity(): boolean;\n _mixinReportValidity(): boolean;\n _mixinSetValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void;\n _mixinGetValidity(): ValidityState;\n _mixinGetValidationMessage(): string;\n _mixinShouldSkipSgdsValidation(): boolean;\n}\n"],"mappings":";;;;;;;;;;AAaA,MAAa,0BAA6D,eAAkB;CAC1F,MAAM,6BAA6B,WAAW;;GACpB,KAAA,iBAAA;;EAUxB,YAAY,GAAG,MAAa;GAC1B,MAAM,GAAG,IAAI;GARM,KAAA,aAAA;GASnB,KAAK,aAAa,KAAK,gBAAgB;EACzC;EAEA,oBAA0B;GACxB,MAAM,kBAAkB;;GAGxB,KAAK,8BAA8B,IAAIA,kCAAAA,0BAA0B,IAAI;EACvE;EACA,MAAM,aAAa,mBAA2C;GAC5D,MAAM,aAAa,iBAAiB;GAGpC,KAAK,QACH,KAAK,WAAW,cAAc,OAAO,KACpC,MAAM,KAAK,aACZ,KAAK,WAAW,cAAc,UAAU,KACvC,MAAM,KAAK;GAEd,KAAK,mBAAmB;GAExB,IAAI,KAAK,+BAA+B,GAAG;GAE3C,KAAK,eAAe,KAAK,KAAK;EAChC;;;;EAKA,oBAAoB;GAClB,IAAI,KAAK,wBACP,KAAK,uBAAuB;QACvB;IACL,KAAK,QAAQ,KAAK;IAClB,KAAK,oBAAoB,KAAK,KAAK;GACrC;GACA,KAAK,mBAAmB;EAC1B;;;;;;;;;;EAWA,mBAAmB,GAAgB;GACjC,KAAK,mBAAmB;GACxB,IAAI,KAAK,+BAA+B,GAAG;GAC3C,KAAK,0BAA0B,aAAa,CAAC;EAC/C;;;;;;EAMA,wBAAwB,GAAgB;GACtC,KAAK,mBAAmB;GACxB,IAAI,KAAK,+BAA+B,GAAG;GAC3C,KAAK,0BAA0B,YAAY,CAAC;EAC9C;;;;;;;;;EASA,oBAAoB,OAA2D;GAC7E,KAAK,0BAA0B,cAAc;GAC7C,KAAK,0BAA0B,mBAAmB;GAClD,KAAwB,eAAa;GACrC,IAAI,KAAK,+BAA+B,GAAG;GAC3C,KAAK,0BAA0B,cAAc,KAAK;EACpD;EAEA,eAAe,OAA2D;GACxE,IAAI,KAAK,+BAA+B,GAAG;GAC3C,KAAK,0BAA0B,cAAc,KAAK;EACpD;EACA,qBAAqB;GACnB,MAAM,QAAQ,KAAK;GACnB,KAAK,WAAW,aAAa,KAAK;EACpC;EACA,sBAA+B;GAC7B,IAAI,KAAK,+BAA+B,GAAG,OAAO;GAClD,OAAO,KAAK,0BAA0B,cAAc;EACtD;EACA,uBAAgC;GAC9B,IAAI,KAAK,+BAA+B,GAAG,OAAO;GAClD,OAAO,KAAK,0BAA0B,eAAe;EACvD;EACA,oBAAmC;GACjC,OAAO,KAAK,WAAW;EACzB;EACA,6BAAqC;GACnC,OAAO,KAAK,WAAW;EACzB;EACA,kBAAkB,OAA4B,SAAkB,QAA4B;GAC1F,IAAI,KAAK,+BAA+B,GAAG;GAC3C,OAAO,KAAK,0BAA0B,YAAY,OAAO,SAAS,MAAM;EAC1E;EAEA,iCAAiC;GAG/B,OAFa,KAAK,QAAQ,MAEhB,CAAC,EAAE,cAAc,KAAK;EAClC;CAYF;CAjIGC,iBAAAA,QAAAA,EAAAA,GAAAA,kBAAAA,WAAAA,CAAW,YAAY,CAAA,GAAA,qBAAA,WAAA,aAAA,KAAA,CAAA;CACvBA,iBAAAA,QAAAA,EAAAA,GAAAA,kBAAAA,WAAAA,CAAW,uBAAuB,CAAA,GAAA,qBAAA,WAAA,uBAAA,KAAA,CAAA;CAkIrC,OAAO;AACT"}
1
+ {"version":3,"file":"validatorMixin.cjs.js","names":["InputValidationController","queryAsync"],"sources":["../../../src/utils/validatorMixin.ts"],"sourcesContent":["import { LitElement, PropertyValueMap } from \"lit\";\nimport { queryAsync } from \"lit/decorators.js\";\nimport { SgdsInput } from \"../components\";\nimport { InputValidationController } from \"./inputValidationController\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T> = new (...args: any[]) => T;\n\n/**\n * @summary The FormValidationMixin used by the form components\n * @param superClass\n * @returns\n */\nexport const SgdsFormValidatorMixin = <T extends Constructor<LitElement>>(superClass: T) => {\n class ToBeValidatedElement extends superClass {\n static formAssociated = true;\n inputValidationController: InputValidationController;\n input: HTMLInputElement | SgdsInput | HTMLTextAreaElement;\n private _isTouched = false;\n private _internals: ElementInternals;\n @queryAsync(\"sgds-input\") sgdsInput: Promise<SgdsInput>;\n @queryAsync(\"sgds-datepicker-input\") sgdsDatepickerInput: Promise<SgdsInput>;\n\n // TypeScript requires mixin constructors to have rest parameter of type any[]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n this._internals = this.attachInternals();\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n /** Idempotency guarantee — always create so reset can clear validity even with noValidate */\n this.inputValidationController ??= new InputValidationController(this);\n }\n async firstUpdated(changedProperties: PropertyValueMap<this>) {\n super.firstUpdated(changedProperties);\n\n /* Either input or sgds-input. For example, quantity-toggle uses sgds-input */\n this.input =\n this.shadowRoot.querySelector(\"input\") ||\n (await this.sgdsInput) ||\n this.shadowRoot.querySelector(\"textarea\") ||\n (await this.sgdsDatepickerInput);\n\n this._mixinSetFormValue();\n\n if (this._mixinShouldSkipSgdsValidation()) return;\n\n this._mixinValidate(this.input);\n }\n\n /**\n * Native lifecycle of Form-Associated Custom Element Callbacks\n */\n formResetCallback() {\n if (this._mixinResetFormControl) {\n this._mixinResetFormControl();\n } else {\n this.value = this.defaultValue;\n this._mixinResetValidity(this.input);\n }\n this._mixinSetFormValue();\n }\n /**\n *\n * Methods use by classes using this mixin\n */\n\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run change handler\n */\n _mixinHandleChange(e: Event): void {\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.handleChange(e);\n }\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run input handler\n */\n _mixinHandleInputChange(e: Event): void {\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.handleInput(e);\n }\n /**\n * During form resetting,\n * 1. ValidityState is reset (always, regardless of noValidate)\n * 2. invalid reactive prop is updated after the reset (always)\n * 3. Reset touched state to false for a pristine form (always)\n * 4. Revalidates the ValidityState (but do not update invalid prop)\n * to prepare for the next validity check (skipped when noValidate)\n */\n _mixinResetValidity(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n this.inputValidationController.resetValidity();\n this.inputValidationController.updateInvalidState();\n this._isTouched ? (this._isTouched = false) : null;\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.validateInput(input);\n }\n\n _mixinValidate(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.validateInput(input);\n }\n _mixinSetFormValue(value?: string | FormData | File | null) {\n this._internals.setFormValue(value !== undefined ? value : (this.value as string | FormData | File));\n }\n _mixinCheckValidity(): boolean {\n if (this._mixinShouldSkipSgdsValidation()) return true;\n return this.inputValidationController.checkValidity();\n }\n _mixinReportValidity(): boolean {\n if (this._mixinShouldSkipSgdsValidation()) return true;\n return this.inputValidationController.reportValidity();\n }\n _mixinGetValidity(): ValidityState {\n return this._internals.validity;\n }\n _mixinGetValidationMessage(): string {\n return this._internals.validationMessage;\n }\n _mixinSetValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void {\n if (this._mixinShouldSkipSgdsValidation()) return;\n return this.inputValidationController.setValidity(flags, message, anchor);\n }\n // Only check for noValidate prop\n _mixinShouldSkipSgdsValidation() {\n const form = this.closest(\"form\");\n\n return form?.noValidate || this.noValidate;\n }\n\n /** DECLARED INSTANCE METHODS AND PROPERTIES*/\n\n /**\n * Resets a form control to its initial state\n */\n declare _mixinResetFormControl: () => void;\n declare value: string;\n declare defaultValue: string;\n declare defaultChecked: boolean;\n declare noValidate: boolean;\n }\n\n return ToBeValidatedElement as Constructor<ToBeValidatedElementInterface> & T;\n};\n\nexport declare class ToBeValidatedElementInterface {\n inputValidationController: InputValidationController;\n input: HTMLInputElement;\n _mixinHandleChange(e: Event): void;\n _mixinHandleInputChange(e: Event): void;\n _mixinResetValidity(input: HTMLInputElement | SgdsInput): void;\n _mixinValidate(input: HTMLInputElement | SgdsInput): void;\n _mixinSetFormValue(value?: string | FormData | File | null): void;\n _mixinCheckValidity(): boolean;\n _mixinReportValidity(): boolean;\n _mixinSetValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void;\n _mixinGetValidity(): ValidityState;\n _mixinGetValidationMessage(): string;\n _mixinShouldSkipSgdsValidation(): boolean;\n}\n"],"mappings":";;;;;;;;;;AAaA,MAAa,0BAA6D,eAAkB;CAC1F,MAAM,6BAA6B,WAAW;;GACpB,KAAA,iBAAA;;EAUxB,YAAY,GAAG,MAAa;GAC1B,MAAM,GAAG,IAAI;GARM,KAAA,aAAA;GASnB,KAAK,aAAa,KAAK,gBAAgB;EACzC;EAEA,oBAA0B;GACxB,MAAM,kBAAkB;;GAGxB,KAAK,8BAA8B,IAAIA,kCAAAA,0BAA0B,IAAI;EACvE;EACA,MAAM,aAAa,mBAA2C;GAC5D,MAAM,aAAa,iBAAiB;GAGpC,KAAK,QACH,KAAK,WAAW,cAAc,OAAO,KACpC,MAAM,KAAK,aACZ,KAAK,WAAW,cAAc,UAAU,KACvC,MAAM,KAAK;GAEd,KAAK,mBAAmB;GAExB,IAAI,KAAK,+BAA+B,GAAG;GAE3C,KAAK,eAAe,KAAK,KAAK;EAChC;;;;EAKA,oBAAoB;GAClB,IAAI,KAAK,wBACP,KAAK,uBAAuB;QACvB;IACL,KAAK,QAAQ,KAAK;IAClB,KAAK,oBAAoB,KAAK,KAAK;GACrC;GACA,KAAK,mBAAmB;EAC1B;;;;;;;;;;EAWA,mBAAmB,GAAgB;GACjC,KAAK,mBAAmB;GACxB,IAAI,KAAK,+BAA+B,GAAG;GAC3C,KAAK,0BAA0B,aAAa,CAAC;EAC/C;;;;;;EAMA,wBAAwB,GAAgB;GACtC,KAAK,mBAAmB;GACxB,IAAI,KAAK,+BAA+B,GAAG;GAC3C,KAAK,0BAA0B,YAAY,CAAC;EAC9C;;;;;;;;;EASA,oBAAoB,OAA2D;GAC7E,KAAK,0BAA0B,cAAc;GAC7C,KAAK,0BAA0B,mBAAmB;GAClD,KAAwB,eAAa;GACrC,IAAI,KAAK,+BAA+B,GAAG;GAC3C,KAAK,0BAA0B,cAAc,KAAK;EACpD;EAEA,eAAe,OAA2D;GACxE,IAAI,KAAK,+BAA+B,GAAG;GAC3C,KAAK,0BAA0B,cAAc,KAAK;EACpD;EACA,mBAAmB,OAAyC;GAC1D,KAAK,WAAW,aAAa,UAAU,KAAA,IAAY,QAAS,KAAK,KAAkC;EACrG;EACA,sBAA+B;GAC7B,IAAI,KAAK,+BAA+B,GAAG,OAAO;GAClD,OAAO,KAAK,0BAA0B,cAAc;EACtD;EACA,uBAAgC;GAC9B,IAAI,KAAK,+BAA+B,GAAG,OAAO;GAClD,OAAO,KAAK,0BAA0B,eAAe;EACvD;EACA,oBAAmC;GACjC,OAAO,KAAK,WAAW;EACzB;EACA,6BAAqC;GACnC,OAAO,KAAK,WAAW;EACzB;EACA,kBAAkB,OAA4B,SAAkB,QAA4B;GAC1F,IAAI,KAAK,+BAA+B,GAAG;GAC3C,OAAO,KAAK,0BAA0B,YAAY,OAAO,SAAS,MAAM;EAC1E;EAEA,iCAAiC;GAG/B,OAFa,KAAK,QAAQ,MAEhB,CAAC,EAAE,cAAc,KAAK;EAClC;CAYF;CAhIGC,iBAAAA,QAAAA,EAAAA,GAAAA,kBAAAA,WAAAA,CAAW,YAAY,CAAA,GAAA,qBAAA,WAAA,aAAA,KAAA,CAAA;CACvBA,iBAAAA,QAAAA,EAAAA,GAAAA,kBAAAA,WAAAA,CAAW,uBAAuB,CAAA,GAAA,qBAAA,WAAA,uBAAA,KAAA,CAAA;CAiIrC,OAAO;AACT"}
@@ -84,9 +84,8 @@ const SgdsFormValidatorMixin = (superClass) => {
84
84
  if (this._mixinShouldSkipSgdsValidation()) return;
85
85
  this.inputValidationController.validateInput(input);
86
86
  }
87
- _mixinSetFormValue() {
88
- const value = this.value;
89
- this._internals.setFormValue(value);
87
+ _mixinSetFormValue(value) {
88
+ this._internals.setFormValue(value !== void 0 ? value : this.value);
90
89
  }
91
90
  _mixinCheckValidity() {
92
91
  if (this._mixinShouldSkipSgdsValidation()) return true;
@@ -1 +1 @@
1
- {"version":3,"file":"validatorMixin.js","names":[],"sources":["../../../src/utils/validatorMixin.ts"],"sourcesContent":["import { LitElement, PropertyValueMap } from \"lit\";\nimport { queryAsync } from \"lit/decorators.js\";\nimport { SgdsInput } from \"../components\";\nimport { InputValidationController } from \"./inputValidationController\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T> = new (...args: any[]) => T;\n\n/**\n * @summary The FormValidationMixin used by the form components\n * @param superClass\n * @returns\n */\nexport const SgdsFormValidatorMixin = <T extends Constructor<LitElement>>(superClass: T) => {\n class ToBeValidatedElement extends superClass {\n static formAssociated = true;\n inputValidationController: InputValidationController;\n input: HTMLInputElement | SgdsInput | HTMLTextAreaElement;\n private _isTouched = false;\n private _internals: ElementInternals;\n @queryAsync(\"sgds-input\") sgdsInput: Promise<SgdsInput>;\n @queryAsync(\"sgds-datepicker-input\") sgdsDatepickerInput: Promise<SgdsInput>;\n\n // TypeScript requires mixin constructors to have rest parameter of type any[]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n this._internals = this.attachInternals();\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n /** Idempotency guarantee — always create so reset can clear validity even with noValidate */\n this.inputValidationController ??= new InputValidationController(this);\n }\n async firstUpdated(changedProperties: PropertyValueMap<this>) {\n super.firstUpdated(changedProperties);\n\n /* Either input or sgds-input. For example, quantity-toggle uses sgds-input */\n this.input =\n this.shadowRoot.querySelector(\"input\") ||\n (await this.sgdsInput) ||\n this.shadowRoot.querySelector(\"textarea\") ||\n (await this.sgdsDatepickerInput);\n\n this._mixinSetFormValue();\n\n if (this._mixinShouldSkipSgdsValidation()) return;\n\n this._mixinValidate(this.input);\n }\n\n /**\n * Native lifecycle of Form-Associated Custom Element Callbacks\n */\n formResetCallback() {\n if (this._mixinResetFormControl) {\n this._mixinResetFormControl();\n } else {\n this.value = this.defaultValue;\n this._mixinResetValidity(this.input);\n }\n this._mixinSetFormValue();\n }\n /**\n *\n * Methods use by classes using this mixin\n */\n\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run change handler\n */\n _mixinHandleChange(e: Event): void {\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.handleChange(e);\n }\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run input handler\n */\n _mixinHandleInputChange(e: Event): void {\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.handleInput(e);\n }\n /**\n * During form resetting,\n * 1. ValidityState is reset (always, regardless of noValidate)\n * 2. invalid reactive prop is updated after the reset (always)\n * 3. Reset touched state to false for a pristine form (always)\n * 4. Revalidates the ValidityState (but do not update invalid prop)\n * to prepare for the next validity check (skipped when noValidate)\n */\n _mixinResetValidity(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n this.inputValidationController.resetValidity();\n this.inputValidationController.updateInvalidState();\n this._isTouched ? (this._isTouched = false) : null;\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.validateInput(input);\n }\n\n _mixinValidate(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.validateInput(input);\n }\n _mixinSetFormValue() {\n const value = this.value as string | FormData | File;\n this._internals.setFormValue(value);\n }\n _mixinCheckValidity(): boolean {\n if (this._mixinShouldSkipSgdsValidation()) return true;\n return this.inputValidationController.checkValidity();\n }\n _mixinReportValidity(): boolean {\n if (this._mixinShouldSkipSgdsValidation()) return true;\n return this.inputValidationController.reportValidity();\n }\n _mixinGetValidity(): ValidityState {\n return this._internals.validity;\n }\n _mixinGetValidationMessage(): string {\n return this._internals.validationMessage;\n }\n _mixinSetValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void {\n if (this._mixinShouldSkipSgdsValidation()) return;\n return this.inputValidationController.setValidity(flags, message, anchor);\n }\n // Only check for noValidate prop\n _mixinShouldSkipSgdsValidation() {\n const form = this.closest(\"form\");\n\n return form?.noValidate || this.noValidate;\n }\n\n /** DECLARED INSTANCE METHODS AND PROPERTIES*/\n\n /**\n * Resets a form control to its initial state\n */\n declare _mixinResetFormControl: () => void;\n declare value: string;\n declare defaultValue: string;\n declare defaultChecked: boolean;\n declare noValidate: boolean;\n }\n\n return ToBeValidatedElement as Constructor<ToBeValidatedElementInterface> & T;\n};\n\nexport declare class ToBeValidatedElementInterface {\n inputValidationController: InputValidationController;\n input: HTMLInputElement;\n _mixinHandleChange(e: Event): void;\n _mixinHandleInputChange(e: Event): void;\n _mixinResetValidity(input: HTMLInputElement | SgdsInput): void;\n _mixinValidate(input: HTMLInputElement | SgdsInput): void;\n _mixinSetFormValue(): void;\n _mixinCheckValidity(): boolean;\n _mixinReportValidity(): boolean;\n _mixinSetValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void;\n _mixinGetValidity(): ValidityState;\n _mixinGetValidationMessage(): string;\n _mixinShouldSkipSgdsValidation(): boolean;\n}\n"],"mappings":";;;;;;;;;;AAaA,MAAa,0BAA6D,eAAkB;CAC1F,MAAM,6BAA6B,WAAW;;GACpB,KAAA,iBAAA;;EAUxB,YAAY,GAAG,MAAa;GAC1B,MAAM,GAAG,IAAI;GARM,KAAA,aAAA;GASnB,KAAK,aAAa,KAAK,gBAAgB;EACzC;EAEA,oBAA0B;GACxB,MAAM,kBAAkB;;GAGxB,KAAK,8BAA8B,IAAI,0BAA0B,IAAI;EACvE;EACA,MAAM,aAAa,mBAA2C;GAC5D,MAAM,aAAa,iBAAiB;GAGpC,KAAK,QACH,KAAK,WAAW,cAAc,OAAO,KACpC,MAAM,KAAK,aACZ,KAAK,WAAW,cAAc,UAAU,KACvC,MAAM,KAAK;GAEd,KAAK,mBAAmB;GAExB,IAAI,KAAK,+BAA+B,GAAG;GAE3C,KAAK,eAAe,KAAK,KAAK;EAChC;;;;EAKA,oBAAoB;GAClB,IAAI,KAAK,wBACP,KAAK,uBAAuB;QACvB;IACL,KAAK,QAAQ,KAAK;IAClB,KAAK,oBAAoB,KAAK,KAAK;GACrC;GACA,KAAK,mBAAmB;EAC1B;;;;;;;;;;EAWA,mBAAmB,GAAgB;GACjC,KAAK,mBAAmB;GACxB,IAAI,KAAK,+BAA+B,GAAG;GAC3C,KAAK,0BAA0B,aAAa,CAAC;EAC/C;;;;;;EAMA,wBAAwB,GAAgB;GACtC,KAAK,mBAAmB;GACxB,IAAI,KAAK,+BAA+B,GAAG;GAC3C,KAAK,0BAA0B,YAAY,CAAC;EAC9C;;;;;;;;;EASA,oBAAoB,OAA2D;GAC7E,KAAK,0BAA0B,cAAc;GAC7C,KAAK,0BAA0B,mBAAmB;GAClD,KAAwB,eAAa;GACrC,IAAI,KAAK,+BAA+B,GAAG;GAC3C,KAAK,0BAA0B,cAAc,KAAK;EACpD;EAEA,eAAe,OAA2D;GACxE,IAAI,KAAK,+BAA+B,GAAG;GAC3C,KAAK,0BAA0B,cAAc,KAAK;EACpD;EACA,qBAAqB;GACnB,MAAM,QAAQ,KAAK;GACnB,KAAK,WAAW,aAAa,KAAK;EACpC;EACA,sBAA+B;GAC7B,IAAI,KAAK,+BAA+B,GAAG,OAAO;GAClD,OAAO,KAAK,0BAA0B,cAAc;EACtD;EACA,uBAAgC;GAC9B,IAAI,KAAK,+BAA+B,GAAG,OAAO;GAClD,OAAO,KAAK,0BAA0B,eAAe;EACvD;EACA,oBAAmC;GACjC,OAAO,KAAK,WAAW;EACzB;EACA,6BAAqC;GACnC,OAAO,KAAK,WAAW;EACzB;EACA,kBAAkB,OAA4B,SAAkB,QAA4B;GAC1F,IAAI,KAAK,+BAA+B,GAAG;GAC3C,OAAO,KAAK,0BAA0B,YAAY,OAAO,SAAS,MAAM;EAC1E;EAEA,iCAAiC;GAG/B,OAFa,KAAK,QAAQ,MAEhB,CAAC,EAAE,cAAc,KAAK;EAClC;CAYF;CAjIG,WAAA,CAAA,WAAW,YAAY,CAAA,GAAA,qBAAA,WAAA,aAAA,KAAA,CAAA;CACvB,WAAA,CAAA,WAAW,uBAAuB,CAAA,GAAA,qBAAA,WAAA,uBAAA,KAAA,CAAA;CAkIrC,OAAO;AACT"}
1
+ {"version":3,"file":"validatorMixin.js","names":[],"sources":["../../../src/utils/validatorMixin.ts"],"sourcesContent":["import { LitElement, PropertyValueMap } from \"lit\";\nimport { queryAsync } from \"lit/decorators.js\";\nimport { SgdsInput } from \"../components\";\nimport { InputValidationController } from \"./inputValidationController\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T> = new (...args: any[]) => T;\n\n/**\n * @summary The FormValidationMixin used by the form components\n * @param superClass\n * @returns\n */\nexport const SgdsFormValidatorMixin = <T extends Constructor<LitElement>>(superClass: T) => {\n class ToBeValidatedElement extends superClass {\n static formAssociated = true;\n inputValidationController: InputValidationController;\n input: HTMLInputElement | SgdsInput | HTMLTextAreaElement;\n private _isTouched = false;\n private _internals: ElementInternals;\n @queryAsync(\"sgds-input\") sgdsInput: Promise<SgdsInput>;\n @queryAsync(\"sgds-datepicker-input\") sgdsDatepickerInput: Promise<SgdsInput>;\n\n // TypeScript requires mixin constructors to have rest parameter of type any[]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n this._internals = this.attachInternals();\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n /** Idempotency guarantee — always create so reset can clear validity even with noValidate */\n this.inputValidationController ??= new InputValidationController(this);\n }\n async firstUpdated(changedProperties: PropertyValueMap<this>) {\n super.firstUpdated(changedProperties);\n\n /* Either input or sgds-input. For example, quantity-toggle uses sgds-input */\n this.input =\n this.shadowRoot.querySelector(\"input\") ||\n (await this.sgdsInput) ||\n this.shadowRoot.querySelector(\"textarea\") ||\n (await this.sgdsDatepickerInput);\n\n this._mixinSetFormValue();\n\n if (this._mixinShouldSkipSgdsValidation()) return;\n\n this._mixinValidate(this.input);\n }\n\n /**\n * Native lifecycle of Form-Associated Custom Element Callbacks\n */\n formResetCallback() {\n if (this._mixinResetFormControl) {\n this._mixinResetFormControl();\n } else {\n this.value = this.defaultValue;\n this._mixinResetValidity(this.input);\n }\n this._mixinSetFormValue();\n }\n /**\n *\n * Methods use by classes using this mixin\n */\n\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run change handler\n */\n _mixinHandleChange(e: Event): void {\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.handleChange(e);\n }\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run input handler\n */\n _mixinHandleInputChange(e: Event): void {\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.handleInput(e);\n }\n /**\n * During form resetting,\n * 1. ValidityState is reset (always, regardless of noValidate)\n * 2. invalid reactive prop is updated after the reset (always)\n * 3. Reset touched state to false for a pristine form (always)\n * 4. Revalidates the ValidityState (but do not update invalid prop)\n * to prepare for the next validity check (skipped when noValidate)\n */\n _mixinResetValidity(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n this.inputValidationController.resetValidity();\n this.inputValidationController.updateInvalidState();\n this._isTouched ? (this._isTouched = false) : null;\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.validateInput(input);\n }\n\n _mixinValidate(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.validateInput(input);\n }\n _mixinSetFormValue(value?: string | FormData | File | null) {\n this._internals.setFormValue(value !== undefined ? value : (this.value as string | FormData | File));\n }\n _mixinCheckValidity(): boolean {\n if (this._mixinShouldSkipSgdsValidation()) return true;\n return this.inputValidationController.checkValidity();\n }\n _mixinReportValidity(): boolean {\n if (this._mixinShouldSkipSgdsValidation()) return true;\n return this.inputValidationController.reportValidity();\n }\n _mixinGetValidity(): ValidityState {\n return this._internals.validity;\n }\n _mixinGetValidationMessage(): string {\n return this._internals.validationMessage;\n }\n _mixinSetValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void {\n if (this._mixinShouldSkipSgdsValidation()) return;\n return this.inputValidationController.setValidity(flags, message, anchor);\n }\n // Only check for noValidate prop\n _mixinShouldSkipSgdsValidation() {\n const form = this.closest(\"form\");\n\n return form?.noValidate || this.noValidate;\n }\n\n /** DECLARED INSTANCE METHODS AND PROPERTIES*/\n\n /**\n * Resets a form control to its initial state\n */\n declare _mixinResetFormControl: () => void;\n declare value: string;\n declare defaultValue: string;\n declare defaultChecked: boolean;\n declare noValidate: boolean;\n }\n\n return ToBeValidatedElement as Constructor<ToBeValidatedElementInterface> & T;\n};\n\nexport declare class ToBeValidatedElementInterface {\n inputValidationController: InputValidationController;\n input: HTMLInputElement;\n _mixinHandleChange(e: Event): void;\n _mixinHandleInputChange(e: Event): void;\n _mixinResetValidity(input: HTMLInputElement | SgdsInput): void;\n _mixinValidate(input: HTMLInputElement | SgdsInput): void;\n _mixinSetFormValue(value?: string | FormData | File | null): void;\n _mixinCheckValidity(): boolean;\n _mixinReportValidity(): boolean;\n _mixinSetValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void;\n _mixinGetValidity(): ValidityState;\n _mixinGetValidationMessage(): string;\n _mixinShouldSkipSgdsValidation(): boolean;\n}\n"],"mappings":";;;;;;;;;;AAaA,MAAa,0BAA6D,eAAkB;CAC1F,MAAM,6BAA6B,WAAW;;GACpB,KAAA,iBAAA;;EAUxB,YAAY,GAAG,MAAa;GAC1B,MAAM,GAAG,IAAI;GARM,KAAA,aAAA;GASnB,KAAK,aAAa,KAAK,gBAAgB;EACzC;EAEA,oBAA0B;GACxB,MAAM,kBAAkB;;GAGxB,KAAK,8BAA8B,IAAI,0BAA0B,IAAI;EACvE;EACA,MAAM,aAAa,mBAA2C;GAC5D,MAAM,aAAa,iBAAiB;GAGpC,KAAK,QACH,KAAK,WAAW,cAAc,OAAO,KACpC,MAAM,KAAK,aACZ,KAAK,WAAW,cAAc,UAAU,KACvC,MAAM,KAAK;GAEd,KAAK,mBAAmB;GAExB,IAAI,KAAK,+BAA+B,GAAG;GAE3C,KAAK,eAAe,KAAK,KAAK;EAChC;;;;EAKA,oBAAoB;GAClB,IAAI,KAAK,wBACP,KAAK,uBAAuB;QACvB;IACL,KAAK,QAAQ,KAAK;IAClB,KAAK,oBAAoB,KAAK,KAAK;GACrC;GACA,KAAK,mBAAmB;EAC1B;;;;;;;;;;EAWA,mBAAmB,GAAgB;GACjC,KAAK,mBAAmB;GACxB,IAAI,KAAK,+BAA+B,GAAG;GAC3C,KAAK,0BAA0B,aAAa,CAAC;EAC/C;;;;;;EAMA,wBAAwB,GAAgB;GACtC,KAAK,mBAAmB;GACxB,IAAI,KAAK,+BAA+B,GAAG;GAC3C,KAAK,0BAA0B,YAAY,CAAC;EAC9C;;;;;;;;;EASA,oBAAoB,OAA2D;GAC7E,KAAK,0BAA0B,cAAc;GAC7C,KAAK,0BAA0B,mBAAmB;GAClD,KAAwB,eAAa;GACrC,IAAI,KAAK,+BAA+B,GAAG;GAC3C,KAAK,0BAA0B,cAAc,KAAK;EACpD;EAEA,eAAe,OAA2D;GACxE,IAAI,KAAK,+BAA+B,GAAG;GAC3C,KAAK,0BAA0B,cAAc,KAAK;EACpD;EACA,mBAAmB,OAAyC;GAC1D,KAAK,WAAW,aAAa,UAAU,KAAA,IAAY,QAAS,KAAK,KAAkC;EACrG;EACA,sBAA+B;GAC7B,IAAI,KAAK,+BAA+B,GAAG,OAAO;GAClD,OAAO,KAAK,0BAA0B,cAAc;EACtD;EACA,uBAAgC;GAC9B,IAAI,KAAK,+BAA+B,GAAG,OAAO;GAClD,OAAO,KAAK,0BAA0B,eAAe;EACvD;EACA,oBAAmC;GACjC,OAAO,KAAK,WAAW;EACzB;EACA,6BAAqC;GACnC,OAAO,KAAK,WAAW;EACzB;EACA,kBAAkB,OAA4B,SAAkB,QAA4B;GAC1F,IAAI,KAAK,+BAA+B,GAAG;GAC3C,OAAO,KAAK,0BAA0B,YAAY,OAAO,SAAS,MAAM;EAC1E;EAEA,iCAAiC;GAG/B,OAFa,KAAK,QAAQ,MAEhB,CAAC,EAAE,cAAc,KAAK;EAClC;CAYF;CAhIG,WAAA,CAAA,WAAW,YAAY,CAAA,GAAA,qBAAA,WAAA,aAAA,KAAA,CAAA;CACvB,WAAA,CAAA,WAAW,uBAAuB,CAAA,GAAA,qBAAA,WAAA,uBAAA,KAAA,CAAA;CAiIrC,OAAO;AACT"}
package/types/react.d.ts CHANGED
@@ -375,7 +375,7 @@ export interface SgdsCheckboxGroupProps extends SgdsBaseProps {
375
375
  // ── Checkbox ─────────────────────────────────────────────────────────────
376
376
 
377
377
  export interface SgdsCheckboxProps extends SgdsBaseProps {
378
- /** Value of the HTML form control. Primarily used to differentiate a list of related checkboxes that have the same name. */
378
+ /** Value submitted in FormData when the checkbox is checked. Defaults to `"on"` when not set, matching native checkbox behaviour. When unchecked, the key is absent from FormData. */
379
379
  value?: string;
380
380
  /** Draws the checkbox in a checked state. */
381
381
  checked?: boolean;
@@ -1,8 +1,9 @@
1
1
  /**
2
- * Patches @lit-labs/ssr's LitElementRenderer.renderShadow() to respect
3
- * globalThis.litNonce for CSP nonce injection.
2
+ * Placeholder — the actual ssr-nonce-patch is in ssr-nonce-patch.raw.js
3
+ * which is copied to lib/ by frankBuild.js, bypassing Rolldown.
4
+ * This preserves bare require() for webpack's module system.
4
5
  *
5
- * Uses globalThis.require (Node.js CJS require) for SYNCHRONOUS module
6
- * resolution. This ensures the patch is applied at module evaluation time —
7
- * before any SSR rendering starts, including on the first request.
6
+ * The export below prevents Rolldown from tree-shaking this module
7
+ * when imported from _ssr-init.ts.
8
8
  */
9
+ export declare const _ssrNoncePatchLoaded = true;