@pine-ds/core 3.4.0 → 3.4.2

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 (562) hide show
  1. package/components/mock-pds-modal.js +1 -1
  2. package/components/mock-pds-modal.js.map +1 -1
  3. package/components/pds-box2.js +8 -4
  4. package/components/pds-box2.js.map +1 -1
  5. package/components/pds-button2.js +1 -1
  6. package/components/pds-button2.js.map +1 -1
  7. package/components/pds-checkbox2.js +45 -7
  8. package/components/pds-checkbox2.js.map +1 -1
  9. package/components/pds-input.js +56 -3
  10. package/components/pds-input.js.map +1 -1
  11. package/components/pds-modal.js +1 -1
  12. package/components/pds-modal.js.map +1 -1
  13. package/components/pds-radio.js +1 -1
  14. package/components/pds-radio.js.map +1 -1
  15. package/components/pds-select.js +77 -3
  16. package/components/pds-select.js.map +1 -1
  17. package/components/pds-switch.js +47 -4
  18. package/components/pds-switch.js.map +1 -1
  19. package/components/pds-textarea.js +56 -6
  20. package/components/pds-textarea.js.map +1 -1
  21. package/components/utils.js +38 -5
  22. package/components/utils.js.map +1 -1
  23. package/dist/cjs/{index-CxX7ua5d.js → index-g-uSeICs.js} +30 -2
  24. package/dist/cjs/index-g-uSeICs.js.map +1 -0
  25. package/dist/cjs/index.cjs.js +1 -1
  26. package/dist/cjs/loader.cjs.js +2 -2
  27. package/dist/cjs/mock-pds-modal.cjs.entry.js +2 -2
  28. package/dist/cjs/mock-pds-modal.cjs.entry.js.map +1 -1
  29. package/dist/cjs/mock-pds-modal.entry.cjs.js.map +1 -1
  30. package/dist/cjs/pds-accordion.cjs.entry.js +1 -1
  31. package/dist/cjs/pds-alert.cjs.entry.js +1 -1
  32. package/dist/cjs/pds-avatar.cjs.entry.js +1 -1
  33. package/dist/cjs/pds-box.cjs.entry.js +9 -5
  34. package/dist/cjs/pds-box.cjs.entry.js.map +1 -1
  35. package/dist/cjs/pds-box.entry.cjs.js.map +1 -1
  36. package/dist/cjs/pds-button.cjs.entry.js +3 -3
  37. package/dist/cjs/pds-button.cjs.entry.js.map +1 -1
  38. package/dist/cjs/pds-button.entry.cjs.js.map +1 -1
  39. package/dist/cjs/pds-checkbox.cjs.entry.js +44 -6
  40. package/dist/cjs/pds-checkbox.cjs.entry.js.map +1 -1
  41. package/dist/cjs/pds-checkbox.entry.cjs.js.map +1 -1
  42. package/dist/cjs/pds-chip.cjs.entry.js +1 -1
  43. package/dist/cjs/pds-combobox.cjs.entry.js +1 -1
  44. package/dist/cjs/pds-copytext.cjs.entry.js +1 -1
  45. package/dist/cjs/pds-divider.cjs.entry.js +1 -1
  46. package/dist/cjs/pds-dropdown-menu-item.cjs.entry.js +1 -1
  47. package/dist/cjs/pds-dropdown-menu-separator.cjs.entry.js +1 -1
  48. package/dist/cjs/pds-dropdown-menu.cjs.entry.js +1 -1
  49. package/dist/cjs/pds-icon.cjs.entry.js +1 -1
  50. package/dist/cjs/pds-image.cjs.entry.js +1 -1
  51. package/dist/cjs/pds-input.cjs.entry.js +56 -4
  52. package/dist/cjs/pds-input.cjs.entry.js.map +1 -1
  53. package/dist/cjs/pds-input.entry.cjs.js.map +1 -1
  54. package/dist/cjs/pds-link.cjs.entry.js +2 -2
  55. package/dist/cjs/pds-loader.cjs.entry.js +1 -1
  56. package/dist/cjs/pds-modal-content.cjs.entry.js +1 -1
  57. package/dist/cjs/pds-modal-footer.cjs.entry.js +1 -1
  58. package/dist/cjs/pds-modal-header.cjs.entry.js +1 -1
  59. package/dist/cjs/pds-modal.cjs.entry.js +2 -2
  60. package/dist/cjs/pds-modal.cjs.entry.js.map +1 -1
  61. package/dist/cjs/pds-modal.entry.cjs.js.map +1 -1
  62. package/dist/cjs/pds-popover.cjs.entry.js +1 -1
  63. package/dist/cjs/pds-progress.cjs.entry.js +1 -1
  64. package/dist/cjs/pds-property.cjs.entry.js +1 -1
  65. package/dist/cjs/pds-radio.cjs.entry.js +2 -2
  66. package/dist/cjs/pds-radio.cjs.entry.js.map +1 -1
  67. package/dist/cjs/pds-radio.entry.cjs.js.map +1 -1
  68. package/dist/cjs/pds-row.cjs.entry.js +1 -1
  69. package/dist/cjs/pds-select.cjs.entry.js +77 -3
  70. package/dist/cjs/pds-select.cjs.entry.js.map +1 -1
  71. package/dist/cjs/pds-select.entry.cjs.js.map +1 -1
  72. package/dist/cjs/pds-sortable-item.cjs.entry.js +1 -1
  73. package/dist/cjs/pds-sortable.cjs.entry.js +1 -1
  74. package/dist/cjs/pds-switch.cjs.entry.js +45 -4
  75. package/dist/cjs/pds-switch.cjs.entry.js.map +1 -1
  76. package/dist/cjs/pds-switch.entry.cjs.js.map +1 -1
  77. package/dist/cjs/pds-tab.cjs.entry.js +1 -1
  78. package/dist/cjs/pds-table-body.cjs.entry.js +1 -1
  79. package/dist/cjs/pds-table-cell.cjs.entry.js +1 -1
  80. package/dist/cjs/pds-table-head-cell.cjs.entry.js +1 -1
  81. package/dist/cjs/pds-table-head.cjs.entry.js +1 -1
  82. package/dist/cjs/pds-table-row.cjs.entry.js +1 -1
  83. package/dist/cjs/pds-table.cjs.entry.js +1 -1
  84. package/dist/cjs/pds-tabpanel.cjs.entry.js +1 -1
  85. package/dist/cjs/pds-tabs.cjs.entry.js +1 -1
  86. package/dist/cjs/pds-text.cjs.entry.js +2 -2
  87. package/dist/cjs/pds-textarea.cjs.entry.js +57 -7
  88. package/dist/cjs/pds-textarea.cjs.entry.js.map +1 -1
  89. package/dist/cjs/pds-textarea.entry.cjs.js.map +1 -1
  90. package/dist/cjs/pds-toast.cjs.entry.js +1 -1
  91. package/dist/cjs/pds-tooltip.cjs.entry.js +1 -1
  92. package/dist/cjs/pine-core.cjs.js +2 -2
  93. package/dist/cjs/utils-7jx8T2mW.js +79 -0
  94. package/dist/cjs/utils-7jx8T2mW.js.map +1 -0
  95. package/dist/collection/components/pds-box/pds-box.css +1 -1
  96. package/dist/collection/components/pds-box/pds-box.js +10 -6
  97. package/dist/collection/components/pds-box/pds-box.js.map +1 -1
  98. package/dist/collection/components/pds-button/pds-button.css +3 -2
  99. package/dist/collection/components/pds-checkbox/pds-checkbox.css +1 -0
  100. package/dist/collection/components/pds-checkbox/pds-checkbox.js +44 -3
  101. package/dist/collection/components/pds-checkbox/pds-checkbox.js.map +1 -1
  102. package/dist/collection/components/pds-input/pds-input.css +10 -6
  103. package/dist/collection/components/pds-input/pds-input.js +72 -1
  104. package/dist/collection/components/pds-input/pds-input.js.map +1 -1
  105. package/dist/collection/components/pds-input/stories/pds-input.stories.js +11 -0
  106. package/dist/collection/components/pds-modal/pds-modal.css +1 -1
  107. package/dist/collection/components/pds-radio/pds-radio.css +1 -0
  108. package/dist/collection/components/pds-select/pds-select.css +2 -1
  109. package/dist/collection/components/pds-select/pds-select.js +75 -1
  110. package/dist/collection/components/pds-select/pds-select.js.map +1 -1
  111. package/dist/collection/components/pds-switch/pds-switch.js +47 -3
  112. package/dist/collection/components/pds-switch/pds-switch.js.map +1 -1
  113. package/dist/collection/components/pds-textarea/pds-textarea.css +1 -1
  114. package/dist/collection/components/pds-textarea/pds-textarea.js +54 -4
  115. package/dist/collection/components/pds-textarea/pds-textarea.js.map +1 -1
  116. package/dist/collection/utils/utils.js +37 -4
  117. package/dist/collection/utils/utils.js.map +1 -1
  118. package/dist/docs.json +28 -14
  119. package/dist/esm/{index-Uh5ntVcq.js → index-BVCWKPy3.js} +30 -2
  120. package/dist/esm/index-BVCWKPy3.js.map +1 -0
  121. package/dist/esm/index.js +1 -1
  122. package/dist/esm/loader.js +3 -3
  123. package/dist/esm/mock-pds-modal.entry.js +2 -2
  124. package/dist/esm/mock-pds-modal.entry.js.map +1 -1
  125. package/dist/esm/pds-accordion.entry.js +1 -1
  126. package/dist/esm/pds-alert.entry.js +1 -1
  127. package/dist/esm/pds-avatar.entry.js +1 -1
  128. package/dist/esm/pds-box.entry.js +9 -5
  129. package/dist/esm/pds-box.entry.js.map +1 -1
  130. package/dist/esm/pds-button.entry.js +3 -3
  131. package/dist/esm/pds-button.entry.js.map +1 -1
  132. package/dist/esm/pds-checkbox.entry.js +44 -6
  133. package/dist/esm/pds-checkbox.entry.js.map +1 -1
  134. package/dist/esm/pds-chip.entry.js +1 -1
  135. package/dist/esm/pds-combobox.entry.js +1 -1
  136. package/dist/esm/pds-copytext.entry.js +1 -1
  137. package/dist/esm/pds-divider.entry.js +1 -1
  138. package/dist/esm/pds-dropdown-menu-item.entry.js +1 -1
  139. package/dist/esm/pds-dropdown-menu-separator.entry.js +1 -1
  140. package/dist/esm/pds-dropdown-menu.entry.js +1 -1
  141. package/dist/esm/pds-icon.entry.js +1 -1
  142. package/dist/esm/pds-image.entry.js +1 -1
  143. package/dist/esm/pds-input.entry.js +56 -4
  144. package/dist/esm/pds-input.entry.js.map +1 -1
  145. package/dist/esm/pds-link.entry.js +2 -2
  146. package/dist/esm/pds-loader.entry.js +1 -1
  147. package/dist/esm/pds-modal-content.entry.js +1 -1
  148. package/dist/esm/pds-modal-footer.entry.js +1 -1
  149. package/dist/esm/pds-modal-header.entry.js +1 -1
  150. package/dist/esm/pds-modal.entry.js +2 -2
  151. package/dist/esm/pds-modal.entry.js.map +1 -1
  152. package/dist/esm/pds-popover.entry.js +1 -1
  153. package/dist/esm/pds-progress.entry.js +1 -1
  154. package/dist/esm/pds-property.entry.js +1 -1
  155. package/dist/esm/pds-radio.entry.js +2 -2
  156. package/dist/esm/pds-radio.entry.js.map +1 -1
  157. package/dist/esm/pds-row.entry.js +1 -1
  158. package/dist/esm/pds-select.entry.js +77 -3
  159. package/dist/esm/pds-select.entry.js.map +1 -1
  160. package/dist/esm/pds-sortable-item.entry.js +1 -1
  161. package/dist/esm/pds-sortable.entry.js +1 -1
  162. package/dist/esm/pds-switch.entry.js +45 -4
  163. package/dist/esm/pds-switch.entry.js.map +1 -1
  164. package/dist/esm/pds-tab.entry.js +1 -1
  165. package/dist/esm/pds-table-body.entry.js +1 -1
  166. package/dist/esm/pds-table-cell.entry.js +1 -1
  167. package/dist/esm/pds-table-head-cell.entry.js +1 -1
  168. package/dist/esm/pds-table-head.entry.js +1 -1
  169. package/dist/esm/pds-table-row.entry.js +1 -1
  170. package/dist/esm/pds-table.entry.js +1 -1
  171. package/dist/esm/pds-tabpanel.entry.js +1 -1
  172. package/dist/esm/pds-tabs.entry.js +1 -1
  173. package/dist/esm/pds-text.entry.js +2 -2
  174. package/dist/esm/pds-textarea.entry.js +57 -7
  175. package/dist/esm/pds-textarea.entry.js.map +1 -1
  176. package/dist/esm/pds-toast.entry.js +1 -1
  177. package/dist/esm/pds-tooltip.entry.js +1 -1
  178. package/dist/esm/pine-core.js +3 -3
  179. package/dist/esm/utils-tJa4KYNO.js +74 -0
  180. package/dist/esm/utils-tJa4KYNO.js.map +1 -0
  181. package/dist/esm-es5/index-BVCWKPy3.js +3 -0
  182. package/dist/esm-es5/index-BVCWKPy3.js.map +1 -0
  183. package/dist/esm-es5/index.js +1 -1
  184. package/dist/esm-es5/loader.js +1 -1
  185. package/dist/esm-es5/mock-pds-modal.entry.js +1 -1
  186. package/dist/esm-es5/mock-pds-modal.entry.js.map +1 -1
  187. package/dist/esm-es5/pds-accordion.entry.js +1 -1
  188. package/dist/esm-es5/pds-alert.entry.js +1 -1
  189. package/dist/esm-es5/pds-avatar.entry.js +1 -1
  190. package/dist/esm-es5/pds-box.entry.js +1 -1
  191. package/dist/esm-es5/pds-box.entry.js.map +1 -1
  192. package/dist/esm-es5/pds-button.entry.js +1 -1
  193. package/dist/esm-es5/pds-button.entry.js.map +1 -1
  194. package/dist/esm-es5/pds-checkbox.entry.js +1 -1
  195. package/dist/esm-es5/pds-checkbox.entry.js.map +1 -1
  196. package/dist/esm-es5/pds-chip.entry.js +1 -1
  197. package/dist/esm-es5/pds-combobox.entry.js +1 -1
  198. package/dist/esm-es5/pds-copytext.entry.js +1 -1
  199. package/dist/esm-es5/pds-divider.entry.js +1 -1
  200. package/dist/esm-es5/pds-dropdown-menu-item.entry.js +1 -1
  201. package/dist/esm-es5/pds-dropdown-menu-separator.entry.js +1 -1
  202. package/dist/esm-es5/pds-dropdown-menu.entry.js +1 -1
  203. package/dist/esm-es5/pds-icon.entry.js +1 -1
  204. package/dist/esm-es5/pds-image.entry.js +1 -1
  205. package/dist/esm-es5/pds-input.entry.js +1 -1
  206. package/dist/esm-es5/pds-input.entry.js.map +1 -1
  207. package/dist/esm-es5/pds-link.entry.js +1 -1
  208. package/dist/esm-es5/pds-loader.entry.js +1 -1
  209. package/dist/esm-es5/pds-modal-content.entry.js +1 -1
  210. package/dist/esm-es5/pds-modal-footer.entry.js +1 -1
  211. package/dist/esm-es5/pds-modal-header.entry.js +1 -1
  212. package/dist/esm-es5/pds-modal.entry.js +1 -1
  213. package/dist/esm-es5/pds-modal.entry.js.map +1 -1
  214. package/dist/esm-es5/pds-popover.entry.js +1 -1
  215. package/dist/esm-es5/pds-progress.entry.js +1 -1
  216. package/dist/esm-es5/pds-property.entry.js +1 -1
  217. package/dist/esm-es5/pds-radio.entry.js +1 -1
  218. package/dist/esm-es5/pds-radio.entry.js.map +1 -1
  219. package/dist/esm-es5/pds-row.entry.js +1 -1
  220. package/dist/esm-es5/pds-select.entry.js +1 -1
  221. package/dist/esm-es5/pds-select.entry.js.map +1 -1
  222. package/dist/esm-es5/pds-sortable-item.entry.js +1 -1
  223. package/dist/esm-es5/pds-sortable.entry.js +1 -1
  224. package/dist/esm-es5/pds-switch.entry.js +1 -1
  225. package/dist/esm-es5/pds-switch.entry.js.map +1 -1
  226. package/dist/esm-es5/pds-tab.entry.js +1 -1
  227. package/dist/esm-es5/pds-table-body.entry.js +1 -1
  228. package/dist/esm-es5/pds-table-cell.entry.js +1 -1
  229. package/dist/esm-es5/pds-table-head-cell.entry.js +1 -1
  230. package/dist/esm-es5/pds-table-head.entry.js +1 -1
  231. package/dist/esm-es5/pds-table-row.entry.js +1 -1
  232. package/dist/esm-es5/pds-table.entry.js +1 -1
  233. package/dist/esm-es5/pds-tabpanel.entry.js +1 -1
  234. package/dist/esm-es5/pds-tabs.entry.js +1 -1
  235. package/dist/esm-es5/pds-text.entry.js +1 -1
  236. package/dist/esm-es5/pds-textarea.entry.js +1 -1
  237. package/dist/esm-es5/pds-textarea.entry.js.map +1 -1
  238. package/dist/esm-es5/pds-toast.entry.js +1 -1
  239. package/dist/esm-es5/pds-tooltip.entry.js +1 -1
  240. package/dist/esm-es5/pine-core.js +1 -1
  241. package/dist/esm-es5/utils-tJa4KYNO.js +2 -0
  242. package/dist/esm-es5/utils-tJa4KYNO.js.map +1 -0
  243. package/dist/pine-core/index.esm.js +1 -1
  244. package/dist/pine-core/mock-pds-modal.entry.esm.js.map +1 -1
  245. package/dist/pine-core/{p-fd3b7077.entry.js → p-0066d249.entry.js} +2 -2
  246. package/dist/pine-core/{p-c5da4a97.system.entry.js → p-0199e3e9.system.entry.js} +2 -2
  247. package/dist/pine-core/{p-982edcaf.system.entry.js → p-03d17841.system.entry.js} +2 -2
  248. package/dist/pine-core/p-03d17841.system.entry.js.map +1 -0
  249. package/dist/pine-core/p-042ee55c.entry.js +2 -0
  250. package/dist/pine-core/p-042ee55c.entry.js.map +1 -0
  251. package/dist/pine-core/{p-9d8bb7f7.system.entry.js → p-051ff780.system.entry.js} +2 -2
  252. package/dist/pine-core/{p-2a2cd90d.entry.js → p-064e3d73.entry.js} +2 -2
  253. package/dist/pine-core/{p-90a8d1bd.entry.js → p-075eecf9.entry.js} +2 -2
  254. package/dist/pine-core/{p-3df372d1.entry.js → p-0a4fc9c7.entry.js} +3 -3
  255. package/dist/pine-core/{p-30449e82.entry.js → p-0dbb2ae9.entry.js} +2 -2
  256. package/dist/pine-core/{p-667eb50e.entry.js → p-11d4036e.entry.js} +2 -2
  257. package/dist/pine-core/{p-f29baa16.entry.js → p-126197e5.entry.js} +2 -2
  258. package/dist/pine-core/{p-b6d18604.entry.js → p-13ac0852.entry.js} +2 -2
  259. package/dist/pine-core/{p-d64527b2.system.entry.js → p-14b424ab.system.entry.js} +2 -2
  260. package/dist/pine-core/{p-eef645bd.system.entry.js → p-1858ad6d.system.entry.js} +2 -2
  261. package/dist/pine-core/p-19d08886.system.entry.js +2 -0
  262. package/dist/pine-core/p-19d08886.system.entry.js.map +1 -0
  263. package/dist/pine-core/{p-f7c02b89.entry.js → p-1a5e79af.entry.js} +2 -2
  264. package/dist/pine-core/p-209b1d69.entry.js +2 -0
  265. package/dist/pine-core/p-209b1d69.entry.js.map +1 -0
  266. package/dist/pine-core/p-2436cb86.system.entry.js +2 -0
  267. package/dist/pine-core/p-2436cb86.system.entry.js.map +1 -0
  268. package/dist/pine-core/{p-383af1d4.system.entry.js → p-276a6a8b.system.entry.js} +2 -2
  269. package/dist/pine-core/{p-e7322ff9.system.entry.js → p-280a0ec1.system.entry.js} +2 -2
  270. package/dist/pine-core/{p-160c6806.system.entry.js → p-2aad0209.system.entry.js} +2 -2
  271. package/dist/pine-core/{p-357b6dd6.system.entry.js → p-2fb60757.system.entry.js} +2 -2
  272. package/dist/pine-core/{p-ClrDO1lY.system.js.map → p-2kXtbFXu.system.js.map} +1 -1
  273. package/dist/pine-core/{p-5a1af174.entry.js → p-33016dd0.entry.js} +2 -2
  274. package/dist/pine-core/p-380d1056.entry.js +2 -0
  275. package/dist/pine-core/p-380d1056.entry.js.map +1 -0
  276. package/dist/pine-core/{p-d451c7b5.system.entry.js → p-39488f2c.system.entry.js} +2 -2
  277. package/dist/pine-core/p-3EWr6ZgL.system.js.map +1 -0
  278. package/dist/pine-core/{p-000ed179.entry.js → p-3e6229cc.entry.js} +3 -3
  279. package/dist/pine-core/{p-e0a6ba6f.system.entry.js → p-3f83d4c4.system.entry.js} +2 -2
  280. package/dist/pine-core/{p-e8a4eafa.system.entry.js → p-4066a9c0.system.entry.js} +2 -2
  281. package/dist/pine-core/{p-e8a4eafa.system.entry.js.map → p-4066a9c0.system.entry.js.map} +1 -1
  282. package/dist/pine-core/{p-2fbc5f8c.system.entry.js → p-41bf807f.system.entry.js} +2 -2
  283. package/dist/pine-core/{p-91520803.system.entry.js → p-487552a9.system.entry.js} +2 -2
  284. package/dist/pine-core/{p-b214c043.entry.js → p-4e5b9d19.entry.js} +2 -2
  285. package/dist/pine-core/{p-62bc2080.system.entry.js → p-51d83489.system.entry.js} +2 -2
  286. package/dist/pine-core/{p-a4d19fb1.entry.js → p-51e463bf.entry.js} +2 -2
  287. package/dist/pine-core/{p-a4d19fb1.entry.js.map → p-51e463bf.entry.js.map} +1 -1
  288. package/dist/pine-core/{p-f4fff209.system.entry.js → p-52af1890.system.entry.js} +2 -2
  289. package/dist/pine-core/{p-256d15bc.system.entry.js → p-55bf6be2.system.entry.js} +2 -2
  290. package/dist/pine-core/{p-47a7a65b.entry.js → p-5a709348.entry.js} +2 -2
  291. package/dist/pine-core/{p-fe73a67f.entry.js → p-63ef55dd.entry.js} +2 -2
  292. package/dist/pine-core/{p-fe73a67f.entry.js.map → p-63ef55dd.entry.js.map} +1 -1
  293. package/dist/pine-core/{p-d6b1f60d.system.entry.js → p-6438a29d.system.entry.js} +2 -2
  294. package/dist/pine-core/p-65275835.system.entry.js +2 -0
  295. package/dist/pine-core/p-65275835.system.entry.js.map +1 -0
  296. package/dist/pine-core/{p-6ef51211.entry.js → p-66b10d29.entry.js} +2 -2
  297. package/dist/pine-core/p-6bd5811c.system.entry.js +2 -0
  298. package/dist/pine-core/p-6bd5811c.system.entry.js.map +1 -0
  299. package/dist/pine-core/{p-b93825c4.system.entry.js → p-6d601fc2.system.entry.js} +2 -2
  300. package/dist/pine-core/{p-5fdbbab9.entry.js → p-6fd385ec.entry.js} +2 -2
  301. package/dist/pine-core/{p-7da6180d.system.entry.js → p-7a95a90f.system.entry.js} +2 -2
  302. package/dist/pine-core/{p-d989287d.entry.js → p-7c867f1b.entry.js} +2 -2
  303. package/dist/pine-core/{p-e416f7a8.system.entry.js → p-7eb4ac7c.system.entry.js} +2 -2
  304. package/dist/pine-core/{p-61b7ff04.system.entry.js → p-8096b988.system.entry.js} +2 -2
  305. package/dist/pine-core/p-8096b988.system.entry.js.map +1 -0
  306. package/dist/pine-core/{p-e53547e2.system.entry.js → p-81a28f54.system.entry.js} +2 -2
  307. package/dist/pine-core/{p-faaa1caa.system.entry.js → p-89d9f273.system.entry.js} +3 -3
  308. package/dist/pine-core/{p-36d3352a.entry.js → p-8cb99f2f.entry.js} +2 -2
  309. package/dist/pine-core/{p-82388e60.entry.js → p-91c6bd68.entry.js} +2 -2
  310. package/dist/pine-core/{p-64c897bb.entry.js → p-94982c57.entry.js} +2 -2
  311. package/dist/pine-core/{p-ef08f005.entry.js → p-978e722a.entry.js} +2 -2
  312. package/dist/pine-core/{p-cc15bf6c.system.entry.js → p-9860d0a8.system.entry.js} +2 -2
  313. package/dist/pine-core/p-987a7e4f.entry.js +2 -0
  314. package/dist/pine-core/p-987a7e4f.entry.js.map +1 -0
  315. package/dist/pine-core/{p-Bgszb25I.system.js.map → p-ACQU83St.system.js.map} +1 -1
  316. package/dist/pine-core/p-B0PUl1_1.system.js.map +1 -0
  317. package/dist/pine-core/{p-Cly-fzRE.system.js.map → p-B4ww2WM0.system.js.map} +1 -1
  318. package/dist/pine-core/{p-ydqm5FGv.system.js.map → p-B6IFMveo.system.js.map} +1 -1
  319. package/dist/pine-core/{p-B2gfQpwn.system.js.map → p-B7S-9dbT.system.js.map} +1 -1
  320. package/dist/pine-core/{p-DKGUedTE.system.js.map → p-BCZ4LK15.system.js.map} +1 -1
  321. package/dist/pine-core/{p-CLscfXhT.system.js.map → p-BEky6idI.system.js.map} +1 -1
  322. package/dist/pine-core/p-BG6uGRQj.system.js +2 -0
  323. package/dist/pine-core/p-BG6uGRQj.system.js.map +1 -0
  324. package/dist/pine-core/p-BGbUqsWH.system.js +2 -0
  325. package/dist/pine-core/p-BGbUqsWH.system.js.map +1 -0
  326. package/dist/pine-core/p-BVCWKPy3.js +3 -0
  327. package/dist/pine-core/p-BVCWKPy3.js.map +1 -0
  328. package/dist/pine-core/{p-B-xQ7Q5Y.system.js.map → p-BY7O1nGC.system.js.map} +1 -1
  329. package/dist/pine-core/p-B_C-mRjx.system.js +3 -0
  330. package/dist/pine-core/p-B_C-mRjx.system.js.map +1 -0
  331. package/dist/pine-core/{p-PwBWYqtO.system.js.map → p-B_c-HOvq.system.js.map} +1 -1
  332. package/dist/pine-core/p-BdBU6s5P.system.js.map +1 -0
  333. package/dist/pine-core/p-BmoX08WO.system.js.map +1 -0
  334. package/dist/pine-core/{p-Ci1ZzxGS.system.js.map → p-Bw9e5h_G.system.js.map} +1 -1
  335. package/dist/pine-core/{p-b6lYO9O3.system.js.map → p-C36pvE-A.system.js.map} +1 -1
  336. package/dist/pine-core/{p-CaJHqbdu.system.js.map → p-C3lnYhcV.system.js.map} +1 -1
  337. package/dist/pine-core/{p-CtuIf6LK.system.js.map → p-C5Wo1bN2.system.js.map} +1 -1
  338. package/dist/pine-core/{p-CTJnwc4I.system.js.map → p-C5Y492i0.system.js.map} +1 -1
  339. package/dist/pine-core/{p-lWwPttyv.system.js.map → p-CG_aggl0.system.js.map} +1 -1
  340. package/dist/pine-core/{p-zZHye4hT.system.js.map → p-CMLxdmO2.system.js.map} +1 -1
  341. package/dist/pine-core/{p-C47kwjaJ.system.js.map → p-CNOeJ6ra.system.js.map} +1 -1
  342. package/dist/pine-core/p-CXLBzkzl.system.js.map +1 -0
  343. package/dist/pine-core/{p-DQCWs_Ih.system.js.map → p-CbDQeXQ4.system.js.map} +1 -1
  344. package/dist/pine-core/{p-Bdnq3aMi.system.js.map → p-ChslVme6.system.js.map} +1 -1
  345. package/dist/pine-core/p-CmJBNVRO.system.js.map +1 -0
  346. package/dist/pine-core/{p-BPlIGHM4.system.js.map → p-CoHBlcHu.system.js.map} +1 -1
  347. package/dist/pine-core/{p-DX9uSGoE.system.js.map → p-CqzGa2j0.system.js.map} +1 -1
  348. package/dist/pine-core/{p-y1DacLeb.system.js.map → p-DCdSlcTO.system.js.map} +1 -1
  349. package/dist/pine-core/{p-mWJg54bF.system.js.map → p-DKuFjXiD.system.js.map} +1 -1
  350. package/dist/pine-core/{p-PuPjQNmU.system.js.map → p-DMNp4slx.system.js.map} +1 -1
  351. package/dist/pine-core/{p-CD40xhZg.system.js.map → p-DQ-QGnGf.system.js.map} +1 -1
  352. package/dist/pine-core/{p-DwwM3-D4.system.js.map → p-DQnK6lQ2.system.js.map} +1 -1
  353. package/dist/pine-core/{p-Gn2xhxDz.system.js.map → p-DRqkTTfb.system.js.map} +1 -1
  354. package/dist/pine-core/{p-CuHZffVk.system.js.map → p-DXuK7cEc.system.js.map} +1 -1
  355. package/dist/pine-core/{p-B-hSZadO.system.js.map → p-DYb5Y47j.system.js.map} +1 -1
  356. package/dist/pine-core/{p-D1LdgjO0.system.js.map → p-DdEbUZw3.system.js.map} +1 -1
  357. package/dist/pine-core/p-De9tROL-.system.js +2 -0
  358. package/dist/pine-core/{p-BsL2GDnH.system.js.map → p-De9tROL-.system.js.map} +1 -1
  359. package/dist/pine-core/p-DgMvQlxU.system.js.map +1 -0
  360. package/dist/pine-core/{p-BJRnZhwF.system.js.map → p-DvZWnvRb.system.js.map} +1 -1
  361. package/dist/pine-core/{p-ipxZYSGJ.system.js.map → p-EytFbMH4.system.js.map} +1 -1
  362. package/dist/pine-core/{p-Bpn2QYa2.system.js.map → p-KkT5zjJU.system.js.map} +1 -1
  363. package/dist/pine-core/{p-Bok_Wwo5.system.js.map → p-PgQPKVDh.system.js.map} +1 -1
  364. package/dist/pine-core/{p-BSg_Clcf.system.js.map → p-REBgf8JA.system.js.map} +1 -1
  365. package/dist/pine-core/{p-6tdMlyau.system.js.map → p-XHvXi3U6.system.js.map} +1 -1
  366. package/dist/pine-core/{p-2f0aedfa.entry.js → p-a2d16624.entry.js} +2 -2
  367. package/dist/pine-core/{p-3b43a1ea.entry.js → p-a54f1d9e.entry.js} +2 -2
  368. package/dist/pine-core/p-a7204f01.entry.js +2 -0
  369. package/dist/pine-core/p-a7cb24c3.system.entry.js +2 -0
  370. package/dist/pine-core/p-a7cb24c3.system.entry.js.map +1 -0
  371. package/dist/pine-core/p-aafb6e06.system.entry.js +2 -0
  372. package/dist/pine-core/p-aafb6e06.system.entry.js.map +1 -0
  373. package/dist/pine-core/{p-9df7ba40.system.entry.js → p-adf2449e.system.entry.js} +2 -2
  374. package/dist/pine-core/{p-e0a35811.system.entry.js → p-b2b405ca.system.entry.js} +3 -3
  375. package/dist/pine-core/p-b649d711.entry.js +2 -0
  376. package/dist/pine-core/p-b649d711.entry.js.map +1 -0
  377. package/dist/pine-core/{p-d21156cf.entry.js → p-b956922a.entry.js} +2 -2
  378. package/dist/pine-core/{p-5706c81b.system.entry.js → p-b9fe17b8.system.entry.js} +2 -2
  379. package/dist/pine-core/{p-af5c9fbd.system.entry.js → p-c1099665.system.entry.js} +2 -2
  380. package/dist/pine-core/{p-0c6e9ba0.system.entry.js → p-c1115d78.system.entry.js} +2 -2
  381. package/dist/pine-core/{p-6d36fae0.entry.js → p-c16d01cc.entry.js} +2 -2
  382. package/dist/pine-core/{p-b5dc7a18.entry.js → p-c1a1475e.entry.js} +2 -2
  383. package/dist/pine-core/{p-27b52fc5.entry.js → p-c1f5148f.entry.js} +2 -2
  384. package/dist/pine-core/p-c1f5148f.entry.js.map +1 -0
  385. package/dist/pine-core/{p-9e22eab5.system.entry.js → p-c3f32f26.system.entry.js} +2 -2
  386. package/dist/pine-core/{p-9e22eab5.system.entry.js.map → p-c3f32f26.system.entry.js.map} +1 -1
  387. package/dist/pine-core/{p-5033d9e8.entry.js → p-c652847a.entry.js} +2 -2
  388. package/dist/pine-core/{p-31fe86a6.entry.js → p-c7075f11.entry.js} +2 -2
  389. package/dist/pine-core/p-c7075f11.entry.js.map +1 -0
  390. package/dist/pine-core/p-c721e8cf.entry.js +2 -0
  391. package/dist/pine-core/p-c721e8cf.entry.js.map +1 -0
  392. package/dist/pine-core/{p-4d22ca40.entry.js → p-c82c277f.entry.js} +2 -2
  393. package/dist/pine-core/{p-f9005ac9.entry.js → p-c82d0a99.entry.js} +2 -2
  394. package/dist/pine-core/{p-c93786f1.system.entry.js → p-ce0d9f05.system.entry.js} +2 -2
  395. package/dist/pine-core/{p-9b8a3659.system.entry.js → p-cf5506db.system.entry.js} +2 -2
  396. package/dist/pine-core/{p-c5a7c8e9.system.entry.js → p-d08ecd18.system.entry.js} +2 -2
  397. package/dist/pine-core/{p-4a69106a.system.entry.js → p-d6d87fbc.system.entry.js} +2 -2
  398. package/dist/pine-core/{p-80246c79.entry.js → p-df15e16a.entry.js} +2 -2
  399. package/dist/pine-core/{p-d0ec666b.entry.js → p-e05135c5.entry.js} +2 -2
  400. package/dist/pine-core/{p-39fbd912.entry.js → p-e30601a6.entry.js} +2 -2
  401. package/dist/pine-core/{p-1e056ca3.system.entry.js → p-e3fb0bc2.system.entry.js} +2 -2
  402. package/dist/pine-core/{p-3bbb6fc1.entry.js → p-e8d76117.entry.js} +2 -2
  403. package/dist/pine-core/{p-f30b1479.entry.js → p-ed94947b.entry.js} +2 -2
  404. package/dist/pine-core/{p-822e90ee.entry.js → p-f35a5afa.entry.js} +2 -2
  405. package/dist/pine-core/{p-9cc1844a.system.entry.js → p-f647c1af.system.entry.js} +2 -2
  406. package/dist/pine-core/{p-1ef5f46b.system.entry.js → p-f9bd0bc2.system.entry.js} +2 -2
  407. package/dist/pine-core/{p-7a431264.system.entry.js → p-ffe867ef.system.entry.js} +2 -2
  408. package/dist/pine-core/{p-U_efBpHV.system.js.map → p-lMetQ5Q0.system.js.map} +1 -1
  409. package/dist/pine-core/{p-Bq1H4MPi.system.js.map → p-pm8ElBzm.system.js.map} +1 -1
  410. package/dist/pine-core/p-qjvXmIGJ.system.js.map +1 -0
  411. package/dist/pine-core/p-tJa4KYNO.js +2 -0
  412. package/dist/pine-core/p-tJa4KYNO.js.map +1 -0
  413. package/dist/pine-core/pds-box.entry.esm.js.map +1 -1
  414. package/dist/pine-core/pds-button.entry.esm.js.map +1 -1
  415. package/dist/pine-core/pds-checkbox.entry.esm.js.map +1 -1
  416. package/dist/pine-core/pds-input.entry.esm.js.map +1 -1
  417. package/dist/pine-core/pds-modal.entry.esm.js.map +1 -1
  418. package/dist/pine-core/pds-radio.entry.esm.js.map +1 -1
  419. package/dist/pine-core/pds-select.entry.esm.js.map +1 -1
  420. package/dist/pine-core/pds-switch.entry.esm.js.map +1 -1
  421. package/dist/pine-core/pds-textarea.entry.esm.js.map +1 -1
  422. package/dist/pine-core/pine-core.esm.js +1 -1
  423. package/dist/pine-core/pine-core.js +1 -1
  424. package/dist/types/components/pds-box/pds-box.d.ts +2 -1
  425. package/dist/types/components/pds-checkbox/pds-checkbox.d.ts +6 -0
  426. package/dist/types/components/pds-input/pds-input.d.ts +22 -0
  427. package/dist/types/components/pds-select/pds-select.d.ts +19 -0
  428. package/dist/types/components/pds-switch/pds-switch.d.ts +6 -0
  429. package/dist/types/components/pds-textarea/pds-textarea.d.ts +17 -0
  430. package/dist/types/components.d.ts +12 -4
  431. package/dist/types/utils/utils.d.ts +10 -3
  432. package/hydrate/index.js +359 -67
  433. package/hydrate/index.mjs +359 -67
  434. package/package.json +2 -2
  435. package/dist/cjs/index-CxX7ua5d.js.map +0 -1
  436. package/dist/cjs/utils-jWx-Mf12.js +0 -45
  437. package/dist/cjs/utils-jWx-Mf12.js.map +0 -1
  438. package/dist/esm/index-Uh5ntVcq.js.map +0 -1
  439. package/dist/esm/utils-DkabwBZT.js +0 -41
  440. package/dist/esm/utils-DkabwBZT.js.map +0 -1
  441. package/dist/esm-es5/index-Uh5ntVcq.js +0 -3
  442. package/dist/esm-es5/index-Uh5ntVcq.js.map +0 -1
  443. package/dist/esm-es5/utils-DkabwBZT.js +0 -2
  444. package/dist/esm-es5/utils-DkabwBZT.js.map +0 -1
  445. package/dist/pine-core/p-27b52fc5.entry.js.map +0 -1
  446. package/dist/pine-core/p-307b456a.entry.js +0 -2
  447. package/dist/pine-core/p-307b456a.entry.js.map +0 -1
  448. package/dist/pine-core/p-31fe86a6.entry.js.map +0 -1
  449. package/dist/pine-core/p-38248640.entry.js +0 -2
  450. package/dist/pine-core/p-38248640.entry.js.map +0 -1
  451. package/dist/pine-core/p-3fd658ad.system.entry.js +0 -2
  452. package/dist/pine-core/p-3fd658ad.system.entry.js.map +0 -1
  453. package/dist/pine-core/p-447fa824.system.entry.js +0 -2
  454. package/dist/pine-core/p-447fa824.system.entry.js.map +0 -1
  455. package/dist/pine-core/p-495a206d.entry.js +0 -2
  456. package/dist/pine-core/p-495a206d.entry.js.map +0 -1
  457. package/dist/pine-core/p-61b7ff04.system.entry.js.map +0 -1
  458. package/dist/pine-core/p-708c66c2.entry.js +0 -2
  459. package/dist/pine-core/p-708c66c2.entry.js.map +0 -1
  460. package/dist/pine-core/p-73412ca9.system.entry.js +0 -2
  461. package/dist/pine-core/p-73412ca9.system.entry.js.map +0 -1
  462. package/dist/pine-core/p-982edcaf.system.entry.js.map +0 -1
  463. package/dist/pine-core/p-BHZ6CSg4.system.js.map +0 -1
  464. package/dist/pine-core/p-BhPuKJbQ.system.js +0 -2
  465. package/dist/pine-core/p-BhPuKJbQ.system.js.map +0 -1
  466. package/dist/pine-core/p-BlpTiOHo.system.js.map +0 -1
  467. package/dist/pine-core/p-BsL2GDnH.system.js +0 -2
  468. package/dist/pine-core/p-CLsVcJCa.system.js.map +0 -1
  469. package/dist/pine-core/p-CUHK9C55.system.js.map +0 -1
  470. package/dist/pine-core/p-C_8VmA8d.system.js +0 -3
  471. package/dist/pine-core/p-C_8VmA8d.system.js.map +0 -1
  472. package/dist/pine-core/p-Ctwx2R4g.system.js.map +0 -1
  473. package/dist/pine-core/p-CuIq_L5Z.system.js +0 -2
  474. package/dist/pine-core/p-CuIq_L5Z.system.js.map +0 -1
  475. package/dist/pine-core/p-DJPo1iGw.system.js.map +0 -1
  476. package/dist/pine-core/p-DNqc41uY.system.js.map +0 -1
  477. package/dist/pine-core/p-DkabwBZT.js +0 -2
  478. package/dist/pine-core/p-DkabwBZT.js.map +0 -1
  479. package/dist/pine-core/p-DxydR7R6.system.js.map +0 -1
  480. package/dist/pine-core/p-Uh5ntVcq.js +0 -3
  481. package/dist/pine-core/p-Uh5ntVcq.js.map +0 -1
  482. package/dist/pine-core/p-d2d6b3a6.system.entry.js +0 -2
  483. package/dist/pine-core/p-d2d6b3a6.system.entry.js.map +0 -1
  484. package/dist/pine-core/p-e68dd704.system.entry.js +0 -2
  485. package/dist/pine-core/p-e68dd704.system.entry.js.map +0 -1
  486. package/dist/pine-core/p-ec1c3452.system.entry.js +0 -2
  487. package/dist/pine-core/p-ec1c3452.system.entry.js.map +0 -1
  488. package/dist/pine-core/p-ee0117a2.entry.js +0 -2
  489. package/dist/pine-core/p-ee0117a2.entry.js.map +0 -1
  490. package/dist/pine-core/p-f256dd8a.entry.js +0 -2
  491. package/dist/pine-core/p-f256dd8a.entry.js.map +0 -1
  492. package/dist/pine-core/p-f455deb5.entry.js +0 -2
  493. /package/dist/pine-core/{p-fd3b7077.entry.js.map → p-0066d249.entry.js.map} +0 -0
  494. /package/dist/pine-core/{p-c5da4a97.system.entry.js.map → p-0199e3e9.system.entry.js.map} +0 -0
  495. /package/dist/pine-core/{p-9d8bb7f7.system.entry.js.map → p-051ff780.system.entry.js.map} +0 -0
  496. /package/dist/pine-core/{p-2a2cd90d.entry.js.map → p-064e3d73.entry.js.map} +0 -0
  497. /package/dist/pine-core/{p-90a8d1bd.entry.js.map → p-075eecf9.entry.js.map} +0 -0
  498. /package/dist/pine-core/{p-3df372d1.entry.js.map → p-0a4fc9c7.entry.js.map} +0 -0
  499. /package/dist/pine-core/{p-30449e82.entry.js.map → p-0dbb2ae9.entry.js.map} +0 -0
  500. /package/dist/pine-core/{p-667eb50e.entry.js.map → p-11d4036e.entry.js.map} +0 -0
  501. /package/dist/pine-core/{p-f29baa16.entry.js.map → p-126197e5.entry.js.map} +0 -0
  502. /package/dist/pine-core/{p-b6d18604.entry.js.map → p-13ac0852.entry.js.map} +0 -0
  503. /package/dist/pine-core/{p-d64527b2.system.entry.js.map → p-14b424ab.system.entry.js.map} +0 -0
  504. /package/dist/pine-core/{p-eef645bd.system.entry.js.map → p-1858ad6d.system.entry.js.map} +0 -0
  505. /package/dist/pine-core/{p-f7c02b89.entry.js.map → p-1a5e79af.entry.js.map} +0 -0
  506. /package/dist/pine-core/{p-383af1d4.system.entry.js.map → p-276a6a8b.system.entry.js.map} +0 -0
  507. /package/dist/pine-core/{p-e7322ff9.system.entry.js.map → p-280a0ec1.system.entry.js.map} +0 -0
  508. /package/dist/pine-core/{p-160c6806.system.entry.js.map → p-2aad0209.system.entry.js.map} +0 -0
  509. /package/dist/pine-core/{p-357b6dd6.system.entry.js.map → p-2fb60757.system.entry.js.map} +0 -0
  510. /package/dist/pine-core/{p-5a1af174.entry.js.map → p-33016dd0.entry.js.map} +0 -0
  511. /package/dist/pine-core/{p-d451c7b5.system.entry.js.map → p-39488f2c.system.entry.js.map} +0 -0
  512. /package/dist/pine-core/{p-000ed179.entry.js.map → p-3e6229cc.entry.js.map} +0 -0
  513. /package/dist/pine-core/{p-e0a6ba6f.system.entry.js.map → p-3f83d4c4.system.entry.js.map} +0 -0
  514. /package/dist/pine-core/{p-2fbc5f8c.system.entry.js.map → p-41bf807f.system.entry.js.map} +0 -0
  515. /package/dist/pine-core/{p-91520803.system.entry.js.map → p-487552a9.system.entry.js.map} +0 -0
  516. /package/dist/pine-core/{p-b214c043.entry.js.map → p-4e5b9d19.entry.js.map} +0 -0
  517. /package/dist/pine-core/{p-62bc2080.system.entry.js.map → p-51d83489.system.entry.js.map} +0 -0
  518. /package/dist/pine-core/{p-f4fff209.system.entry.js.map → p-52af1890.system.entry.js.map} +0 -0
  519. /package/dist/pine-core/{p-256d15bc.system.entry.js.map → p-55bf6be2.system.entry.js.map} +0 -0
  520. /package/dist/pine-core/{p-47a7a65b.entry.js.map → p-5a709348.entry.js.map} +0 -0
  521. /package/dist/pine-core/{p-d6b1f60d.system.entry.js.map → p-6438a29d.system.entry.js.map} +0 -0
  522. /package/dist/pine-core/{p-6ef51211.entry.js.map → p-66b10d29.entry.js.map} +0 -0
  523. /package/dist/pine-core/{p-b93825c4.system.entry.js.map → p-6d601fc2.system.entry.js.map} +0 -0
  524. /package/dist/pine-core/{p-5fdbbab9.entry.js.map → p-6fd385ec.entry.js.map} +0 -0
  525. /package/dist/pine-core/{p-7da6180d.system.entry.js.map → p-7a95a90f.system.entry.js.map} +0 -0
  526. /package/dist/pine-core/{p-d989287d.entry.js.map → p-7c867f1b.entry.js.map} +0 -0
  527. /package/dist/pine-core/{p-e416f7a8.system.entry.js.map → p-7eb4ac7c.system.entry.js.map} +0 -0
  528. /package/dist/pine-core/{p-e53547e2.system.entry.js.map → p-81a28f54.system.entry.js.map} +0 -0
  529. /package/dist/pine-core/{p-faaa1caa.system.entry.js.map → p-89d9f273.system.entry.js.map} +0 -0
  530. /package/dist/pine-core/{p-36d3352a.entry.js.map → p-8cb99f2f.entry.js.map} +0 -0
  531. /package/dist/pine-core/{p-82388e60.entry.js.map → p-91c6bd68.entry.js.map} +0 -0
  532. /package/dist/pine-core/{p-64c897bb.entry.js.map → p-94982c57.entry.js.map} +0 -0
  533. /package/dist/pine-core/{p-ef08f005.entry.js.map → p-978e722a.entry.js.map} +0 -0
  534. /package/dist/pine-core/{p-cc15bf6c.system.entry.js.map → p-9860d0a8.system.entry.js.map} +0 -0
  535. /package/dist/pine-core/{p-2f0aedfa.entry.js.map → p-a2d16624.entry.js.map} +0 -0
  536. /package/dist/pine-core/{p-3b43a1ea.entry.js.map → p-a54f1d9e.entry.js.map} +0 -0
  537. /package/dist/pine-core/{p-f455deb5.entry.js.map → p-a7204f01.entry.js.map} +0 -0
  538. /package/dist/pine-core/{p-9df7ba40.system.entry.js.map → p-adf2449e.system.entry.js.map} +0 -0
  539. /package/dist/pine-core/{p-e0a35811.system.entry.js.map → p-b2b405ca.system.entry.js.map} +0 -0
  540. /package/dist/pine-core/{p-d21156cf.entry.js.map → p-b956922a.entry.js.map} +0 -0
  541. /package/dist/pine-core/{p-5706c81b.system.entry.js.map → p-b9fe17b8.system.entry.js.map} +0 -0
  542. /package/dist/pine-core/{p-af5c9fbd.system.entry.js.map → p-c1099665.system.entry.js.map} +0 -0
  543. /package/dist/pine-core/{p-0c6e9ba0.system.entry.js.map → p-c1115d78.system.entry.js.map} +0 -0
  544. /package/dist/pine-core/{p-6d36fae0.entry.js.map → p-c16d01cc.entry.js.map} +0 -0
  545. /package/dist/pine-core/{p-b5dc7a18.entry.js.map → p-c1a1475e.entry.js.map} +0 -0
  546. /package/dist/pine-core/{p-5033d9e8.entry.js.map → p-c652847a.entry.js.map} +0 -0
  547. /package/dist/pine-core/{p-4d22ca40.entry.js.map → p-c82c277f.entry.js.map} +0 -0
  548. /package/dist/pine-core/{p-f9005ac9.entry.js.map → p-c82d0a99.entry.js.map} +0 -0
  549. /package/dist/pine-core/{p-c93786f1.system.entry.js.map → p-ce0d9f05.system.entry.js.map} +0 -0
  550. /package/dist/pine-core/{p-9b8a3659.system.entry.js.map → p-cf5506db.system.entry.js.map} +0 -0
  551. /package/dist/pine-core/{p-c5a7c8e9.system.entry.js.map → p-d08ecd18.system.entry.js.map} +0 -0
  552. /package/dist/pine-core/{p-4a69106a.system.entry.js.map → p-d6d87fbc.system.entry.js.map} +0 -0
  553. /package/dist/pine-core/{p-80246c79.entry.js.map → p-df15e16a.entry.js.map} +0 -0
  554. /package/dist/pine-core/{p-d0ec666b.entry.js.map → p-e05135c5.entry.js.map} +0 -0
  555. /package/dist/pine-core/{p-39fbd912.entry.js.map → p-e30601a6.entry.js.map} +0 -0
  556. /package/dist/pine-core/{p-1e056ca3.system.entry.js.map → p-e3fb0bc2.system.entry.js.map} +0 -0
  557. /package/dist/pine-core/{p-3bbb6fc1.entry.js.map → p-e8d76117.entry.js.map} +0 -0
  558. /package/dist/pine-core/{p-f30b1479.entry.js.map → p-ed94947b.entry.js.map} +0 -0
  559. /package/dist/pine-core/{p-822e90ee.entry.js.map → p-f35a5afa.entry.js.map} +0 -0
  560. /package/dist/pine-core/{p-9cc1844a.system.entry.js.map → p-f647c1af.system.entry.js.map} +0 -0
  561. /package/dist/pine-core/{p-1ef5f46b.system.entry.js.map → p-f9bd0bc2.system.entry.js.map} +0 -0
  562. /package/dist/pine-core/{p-7a431264.system.entry.js.map → p-ffe867ef.system.entry.js.map} +0 -0
@@ -9,6 +9,7 @@ export default {
9
9
  debounce: null,
10
10
  disabled: false,
11
11
  errorMessage: null,
12
+ fullWidth: false,
12
13
  helperMessage: null,
13
14
  invalid: false,
14
15
  max: null,
@@ -43,6 +44,7 @@ const BaseTemplate = (args) => html`<pds-input
43
44
  debounce="${args.debounce}"
44
45
  disabled="${args.disabled}"
45
46
  error-message="${args.errorMessage}"
47
+ full-width="${args.fullWidth}"
46
48
  helper-message="${args.helperMessage}"
47
49
  invalid="${args.invalid}"
48
50
  label="${args.label}"
@@ -136,6 +138,15 @@ Autocomplete.args = {
136
138
  autocomplete: 'given-name',
137
139
  };
138
140
 
141
+ export const FullWidth = BaseTemplate.bind({});
142
+ FullWidth.args = {
143
+ componentId: 'pds-input-full-width-example',
144
+ label: 'Full Width Input',
145
+ type: 'text',
146
+ fullWidth: true,
147
+ placeholder: 'This input takes full width of its container',
148
+ };
149
+
139
150
  export const withPrefixIcon = (args) => html`<pds-input
140
151
  autocomplete="${args.autocomplete}"
141
152
  component-id="pds-input-prefix-icon"
@@ -40,7 +40,7 @@ pds-modal .pds-modal__backdrop {
40
40
  display: flex;
41
41
  flex-direction: column;
42
42
  margin: var(--pine-dimension-md);
43
- max-height: calc(100vh - (6vh + 96px));
43
+ max-height: calc(100vh - (5vh + 96px));
44
44
  width: 100%;
45
45
  }
46
46
  @media (min-width: 992px) {
@@ -103,6 +103,7 @@ label {
103
103
 
104
104
  .pds-radio__message {
105
105
  color: var(--pine-color-text-message);
106
+ font: var(--pine-typography-body-sm-medium);
106
107
  margin-block-start: var(--sizing-margin-block-start);
107
108
  margin-inline-start: var(--pine-dimension-md);
108
109
  width: 100%;
@@ -61,7 +61,7 @@ select {
61
61
  grid-area: field;
62
62
  letter-spacing: var(--pine-letter-spacing);
63
63
  min-height: var(--pds-select-min-height);
64
- padding: var(--pine-dimension-xs) var(--pine-dimension-150);
64
+ padding: calc(var(--pine-dimension-xs) - var(--pine-border-width)) var(--pine-dimension-150);
65
65
  padding-inline-end: var(--pine-dimension-450);
66
66
  position: relative;
67
67
  }
@@ -98,6 +98,7 @@ select:has(~ .pds-select__message .pds-select__error-message):focus-visible {
98
98
 
99
99
  .pds-select__error-message,
100
100
  .pds-select__helper-message {
101
+ color: var(--pine-color-text-message);
101
102
  font: var(--pine-typography-body-sm-medium);
102
103
  margin-block-end: 0;
103
104
  margin-block-start: var(--pine-dimension-2xs);
@@ -66,10 +66,21 @@ export class PdsSelect {
66
66
  */
67
67
  valueChanged() {
68
68
  this.updateSelectedOption();
69
+ this.updateFormValue();
70
+ }
71
+ connectedCallback() {
72
+ // Initialize ElementInternals for form association
73
+ if (this.el.attachInternals) {
74
+ this.internals = this.el.attachInternals();
75
+ }
69
76
  }
70
77
  componentWillLoad() {
71
78
  this.updateSelectedOption();
72
79
  }
80
+ componentDidLoad() {
81
+ // Set initial form value
82
+ this.updateFormValue();
83
+ }
73
84
  /**
74
85
  * Updates the selected option in the select element based on the current value.
75
86
  *
@@ -123,12 +134,75 @@ export class PdsSelect {
123
134
  }
124
135
  return null;
125
136
  }
137
+ /**
138
+ * Updates the form value using ElementInternals API
139
+ */
140
+ updateFormValue() {
141
+ if (this.internals && this.internals.setFormValue) {
142
+ const value = this.value;
143
+ // Handle multi-select arrays by converting to FormData or comma-separated string
144
+ if (Array.isArray(value)) {
145
+ if (value.length > 1) {
146
+ // For multiple values, create FormData with multiple entries
147
+ const formData = new FormData();
148
+ value.forEach(val => formData.append(this.name || '', val));
149
+ this.internals.setFormValue(formData);
150
+ }
151
+ else {
152
+ // Single value in array, use the string value
153
+ this.internals.setFormValue(value[0] || null);
154
+ }
155
+ }
156
+ else {
157
+ // Single string value
158
+ this.internals.setFormValue(value || null);
159
+ }
160
+ // Set validity based on native select validation
161
+ if (this.selectEl && this.internals && this.internals.setValidity) {
162
+ this.internals.setValidity(this.selectEl.validity, this.selectEl.validationMessage, this.selectEl);
163
+ }
164
+ }
165
+ }
166
+ /**
167
+ * Form Associated Custom Elements API: Called when the form is reset
168
+ */
169
+ formResetCallback() {
170
+ this.value = '';
171
+ this.updateFormValue();
172
+ }
173
+ /**
174
+ * Form Associated Custom Elements API: Called when the form is disabled
175
+ */
176
+ formDisabledCallback(disabled) {
177
+ this.disabled = disabled;
178
+ }
179
+ /**
180
+ * Form Associated Custom Elements API: Called to restore form state
181
+ */
182
+ formStateRestoreCallback(state) {
183
+ if (typeof state === 'string') {
184
+ this.value = state;
185
+ }
186
+ else if (state instanceof FormData && this.name) {
187
+ // Extract value(s) from FormData using the select's name
188
+ const values = state.getAll(this.name);
189
+ if (values.length > 1) {
190
+ // Multi-select: convert to string array
191
+ this.value = values.filter(v => typeof v === 'string');
192
+ }
193
+ else if (values.length === 1 && typeof values[0] === 'string') {
194
+ // Single select: use string value
195
+ this.value = values[0];
196
+ }
197
+ }
198
+ }
126
199
  render() {
127
200
  const hasAction = this.el.querySelector('[slot="action"]') !== null;
128
- return (h(Host, { key: '7bbdad147f68a6b000d738c991c4f77e7ba6d934', "aria-disabled": this.disabled ? 'true' : null, class: this.classNames(), "has-action": hasAction && !this.hideLabel ? 'true' : null }, h("div", { key: 'd8b3ba6fcaa63435c919083760573d4a94394f56', class: "pds-select" }, !this.hideLabel && (h("div", { key: '01edc2b7f833d71da9c440ee9e35327210b233d1', class: "pds-select__label-wrapper" }, h("label", { key: '5a7743e84be49edf04deed503a27929d15fa8515', htmlFor: this.componentId }, h("span", { key: 'df5e57ac95def4069ff07f081226d70ca5a15cc8', class: this.hideLabel ? 'visually-hidden' : '' }, this.label)), hasAction && this.renderAction())), h("select", { key: '3e9faea02fe9449fdda224bf4f3ee157217640ff', "aria-label": this.hideLabel ? this.label : undefined, autocomplete: this.autocomplete || undefined, class: "pds-select__field", disabled: this.disabled, id: this.componentId, multiple: this.multiple, name: this.name, onChange: this.onSelectUpdate, part: "select", required: this.required, ref: (el) => (this.selectEl = el) }), h("div", { key: '1a75cbfdca145e1d303c8c07de9cb8df5afa267e', "aria-hidden": "true", class: "hidden", ref: (el) => (this.slotContainer = el) }, h("slot", { key: '2656e9edc098798b4a118c2a8b8a0f6283fc6f9a', onSlotchange: this.handleSlotChange })), this.renderMessages(), !this.multiple && h("pds-icon", { key: 'ca5831acc4a4f72221a2d26be14e076daabd35b1', class: "pds-select__select-icon", icon: enlarge }))));
201
+ return (h(Host, { key: 'fea78ba16795a1eae88028f4ff13caeab17ad74f', "aria-disabled": this.disabled ? 'true' : null, class: this.classNames(), "has-action": hasAction && !this.hideLabel ? 'true' : null }, h("div", { key: '532a1537af1cdc9928cdb42f33530d8141941f56', class: "pds-select" }, !this.hideLabel && (h("div", { key: '6284c433266ba8991a7d32e16927147287fcf009', class: "pds-select__label-wrapper" }, h("label", { key: '66979f8fc19801a7a8494dd254e32bca72a23e17', htmlFor: this.componentId }, h("span", { key: '8aa8805e24b9fb085377510513f68a308e2bc78b', class: this.hideLabel ? 'visually-hidden' : '' }, this.label)), hasAction && this.renderAction())), h("select", { key: 'c007dc0a49f1607745664a0527a67ad4721316c5', "aria-label": this.hideLabel ? this.label : undefined, autocomplete: this.autocomplete || undefined, class: "pds-select__field", disabled: this.disabled, id: this.componentId, multiple: this.multiple, name: this.name, onChange: this.onSelectUpdate, part: "select", required: this.required, ref: (el) => (this.selectEl = el) }), h("div", { key: 'a96e7e5ef5ef4a20654956d27c4e58eb0aaad1ea', "aria-hidden": "true", class: "hidden", ref: (el) => (this.slotContainer = el) }, h("slot", { key: '1910bf5bfdea7356f435e74dfe2427669b64d3d8', onSlotchange: this.handleSlotChange })), this.renderMessages(), !this.multiple && h("pds-icon", { key: 'e9fa98965996e1a873360fa999149d5e0ab821ee', class: "pds-select__select-icon", icon: enlarge }))));
129
202
  }
130
203
  static get is() { return "pds-select"; }
131
204
  static get encapsulation() { return "shadow"; }
205
+ static get formAssociated() { return true; }
132
206
  static get originalStyleUrls() {
133
207
  return {
134
208
  "$": ["pds-select.tokens.scss", "../../global/styles/utils/label.scss", "pds-select.scss"]
@@ -1 +1 @@
1
- {"version":3,"file":"pds-select.js","sourceRoot":"","sources":["../../../src/components/pds-select/pds-select.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, Host, h, Prop, Watch } from '@stencil/core';\nimport { messageId } from '../../utils/form';\nimport { danger, enlarge } from '@pine-ds/icons/icons';\n\n/**\n * @slot action - Content to be displayed in the label area, typically for help icons or links\n */\n@Component({\n tag: 'pds-select',\n styleUrls: ['pds-select.tokens.scss', '../../global/styles/utils/label.scss', 'pds-select.scss'],\n shadow: true,\n})\nexport class PdsSelect {\n\n private selectEl!: HTMLSelectElement;\n private slotContainer!: HTMLDivElement;\n\n @Element() el: HTMLPdsSelectElement;\n\n /**\n * Specifies if and how the browser provides `autocomplete` assistance for the field.\n */\n @Prop() autocomplete: string;\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId!: string;\n\n /**\n * Indicates whether or not the select field is disabled.\n * @defaultValue false\n */\n @Prop() disabled = false\n\n /**\n * Displays error message text describing an invalid state.\n */\n @Prop() errorMessage: string;\n\n /**\n * Visually hides the label text for instances where only the checkbox should be displayed. Label remains accessible to assistive technology such as screen readers.\n */\n @Prop() hideLabel: boolean;\n\n /**\n * Displays helper message text below select.\n */\n @Prop() helperMessage: string;\n\n /**\n * Determines whether or not the select is invalid.\n */\n @Prop() invalid?: boolean;\n\n /**\n * Text to be displayed as the select label.\n */\n @Prop() label?: string;\n\n /**\n * Indicates whether multiple options can be selected.\n * @defaultValue false\n */\n @Prop() multiple = false;\n\n /**\n * Specifies the name. Submitted with the form name/value pair.\n */\n @Prop() name!: string;\n\n /**\n * Indicates whether or not the select field is required.\n * @defaultValue false\n */\n @Prop() required = false;\n\n /**\n * The value(s) of the selected option(s).\n *\n */\n @Prop({ mutable: true }) value?: string | string[];\n\n /**\n * Emitted when a keyboard input occurs.\n */\n @Event() pdsSelectChange: EventEmitter<InputEvent>;\n\n @Watch('value')\n /**\n * Handles the change in the value of the select component.\n * This method is called whenever the value of the select component changes.\n * It updates the selected option accordingly.\n */\n valueChanged() {\n this.updateSelectedOption();\n }\n\n componentWillLoad() {\n this.updateSelectedOption();\n }\n\n /**\n * Updates the selected option in the select element based on the current value.\n *\n * This method iterates through all the options of the select element and sets the\n * 'selected' attribute on the option that matches the current value. If an option\n * does not match the current value, the 'selected' attribute is removed.\n *\n * @private\n * @returns {void}\n */\n private updateSelectedOption() {\n if (this.selectEl) {\n const options = this.selectEl.options;\n\n // Update the selected attribute for all options.\n Array.from(options).map((option: HTMLOptionElement) => {\n if (Array.isArray(this.value)) {\n option.selected = this.value.includes(option.value);\n } else {\n option.selected = this.value === option.value;\n }\n });\n };\n }\n\n /**\n * Emits an event on input change.\n */\n private onSelectUpdate = (e: Event) => {\n const target = e.target as HTMLSelectElement\n\n const values = Array.from(target.options)\n .filter((option) => ( option.selected))\n .map((option) => ( option.value));\n\n if (values.length === 1 && !this.multiple) {\n this.value = values[0];\n } else {\n this.value = values;\n }\n\n this.pdsSelectChange.emit(e as InputEvent);\n };\n\n /**\n * Handles the change event for the slot element.\n * This method is triggered when the slot content changes.\n * It updates the inner HTML of the select element by cloning and appending\n * the assigned <option> elements from the slot.\n */\n private handleSlotChange = () => {\n const slot = this.slotContainer.querySelector('slot') as HTMLSlotElement;\n\n this.selectEl.innerHTML = '';\n const assignedElements = slot.assignedElements({ flatten: true }) as (HTMLOptionElement | HTMLOptGroupElement)[];\n\n assignedElements.forEach((item) => {\n if ( ['OPTION', 'OPTGROUP'].includes(item.tagName)) {\n const clonedItem = item.cloneNode(true) as HTMLOptionElement | HTMLOptGroupElement;\n if (clonedItem.tagName === 'OPTION' && (clonedItem as HTMLOptionElement).value === this.value) {\n (clonedItem as HTMLOptionElement).selected = true;\n }\n this.selectEl.appendChild(clonedItem);\n }\n });\n\n this.updateSelectedOption();\n };\n\n private getHelperMessage() {\n return this.helperMessage && (\n <p class=\"pds-select__helper-message\" id={messageId(this.componentId, 'helper')}>\n {this.helperMessage}\n </p>\n );\n }\n\n private getErrorMessage() {\n return this.errorMessage && (\n <p class=\"pds-select__error-message\" id={messageId(this.componentId, 'error')} aria-live=\"assertive\">\n <pds-icon icon={danger} size=\"small\"></pds-icon>\n {this.errorMessage}\n </p>\n );\n }\n\n private renderMessages() {\n if (!this.helperMessage && !this.errorMessage) return null;\n\n return (\n <div class=\"pds-select__message\">\n {this.getHelperMessage()}\n {this.getErrorMessage()}\n </div>\n );\n }\n\n private classNames() {\n const classNames = [];\n\n if (this.invalid) { classNames.push('is-invalid'); }\n if (this.disabled) { classNames.push('is-disabled'); }\n\n return classNames.join(' ');\n }\n\n private renderAction() {\n const hasAction = this.el.querySelector('[slot=\"action\"]') !== null;\n if (hasAction) {\n return (\n <div class=\"pds-select__action\" part=\"action\">\n <slot name=\"action\"></slot>\n </div>\n );\n }\n return null;\n }\n\n render() {\n const hasAction = this.el.querySelector('[slot=\"action\"]') !== null;\n\n return (\n <Host aria-disabled={this.disabled ? 'true' : null} class={this.classNames()} has-action={hasAction && !this.hideLabel ? 'true' : null}>\n <div class=\"pds-select\">\n {!this.hideLabel && (\n <div class=\"pds-select__label-wrapper\">\n <label htmlFor={this.componentId}>\n <span class={this.hideLabel ? 'visually-hidden' : ''}>\n {this.label}\n </span>\n </label>\n {hasAction && this.renderAction()}\n </div>\n )}\n <select\n aria-label={this.hideLabel ? this.label : undefined}\n autocomplete={this.autocomplete || undefined}\n class=\"pds-select__field\"\n disabled={this.disabled}\n id={this.componentId}\n multiple={this.multiple}\n name={this.name}\n onChange={this.onSelectUpdate}\n part=\"select\"\n required={this.required}\n ref={(el) => (this.selectEl = el as HTMLSelectElement)}\n ></select>\n <div aria-hidden=\"true\" class=\"hidden\" ref={(el) => (this.slotContainer = el)}>\n <slot onSlotchange={this.handleSlotChange}></slot>\n </div>\n {this.renderMessages()}\n {!this.multiple && <pds-icon class=\"pds-select__select-icon\" icon={enlarge} />}\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"pds-select.js","sourceRoot":"","sources":["../../../src/components/pds-select/pds-select.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, Host, h, Prop, Watch } from '@stencil/core';\nimport { messageId } from '../../utils/form';\nimport { danger, enlarge } from '@pine-ds/icons/icons';\n\n/**\n * @slot action - Content to be displayed in the label area, typically for help icons or links\n */\n@Component({\n tag: 'pds-select',\n styleUrls: ['pds-select.tokens.scss', '../../global/styles/utils/label.scss', 'pds-select.scss'],\n shadow: true,\n formAssociated: true,\n})\nexport class PdsSelect {\n\n private selectEl!: HTMLSelectElement;\n private slotContainer!: HTMLDivElement;\n private internals?: ElementInternals;\n\n @Element() el: HTMLPdsSelectElement;\n\n /**\n * Specifies if and how the browser provides `autocomplete` assistance for the field.\n */\n @Prop() autocomplete: string;\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId!: string;\n\n /**\n * Indicates whether or not the select field is disabled.\n * @defaultValue false\n */\n @Prop() disabled = false\n\n /**\n * Displays error message text describing an invalid state.\n */\n @Prop() errorMessage: string;\n\n /**\n * Visually hides the label text for instances where only the checkbox should be displayed. Label remains accessible to assistive technology such as screen readers.\n */\n @Prop() hideLabel: boolean;\n\n /**\n * Displays helper message text below select.\n */\n @Prop() helperMessage: string;\n\n /**\n * Determines whether or not the select is invalid.\n */\n @Prop() invalid?: boolean;\n\n /**\n * Text to be displayed as the select label.\n */\n @Prop() label?: string;\n\n /**\n * Indicates whether multiple options can be selected.\n * @defaultValue false\n */\n @Prop() multiple = false;\n\n /**\n * Specifies the name. Submitted with the form name/value pair.\n */\n @Prop() name!: string;\n\n /**\n * Indicates whether or not the select field is required.\n * @defaultValue false\n */\n @Prop() required = false;\n\n /**\n * The value(s) of the selected option(s).\n *\n */\n @Prop({ mutable: true }) value?: string | string[];\n\n /**\n * Emitted when a keyboard input occurs.\n */\n @Event() pdsSelectChange: EventEmitter<InputEvent>;\n\n @Watch('value')\n /**\n * Handles the change in the value of the select component.\n * This method is called whenever the value of the select component changes.\n * It updates the selected option accordingly.\n */\n valueChanged() {\n this.updateSelectedOption();\n this.updateFormValue();\n }\n\n connectedCallback() {\n // Initialize ElementInternals for form association\n if (this.el.attachInternals) {\n this.internals = this.el.attachInternals();\n }\n }\n\n componentWillLoad() {\n this.updateSelectedOption();\n }\n\n componentDidLoad() {\n // Set initial form value\n this.updateFormValue();\n }\n\n /**\n * Updates the selected option in the select element based on the current value.\n *\n * This method iterates through all the options of the select element and sets the\n * 'selected' attribute on the option that matches the current value. If an option\n * does not match the current value, the 'selected' attribute is removed.\n *\n * @private\n * @returns {void}\n */\n private updateSelectedOption() {\n if (this.selectEl) {\n const options = this.selectEl.options;\n\n // Update the selected attribute for all options.\n Array.from(options).map((option: HTMLOptionElement) => {\n if (Array.isArray(this.value)) {\n option.selected = this.value.includes(option.value);\n } else {\n option.selected = this.value === option.value;\n }\n });\n };\n }\n\n /**\n * Emits an event on input change.\n */\n private onSelectUpdate = (e: Event) => {\n const target = e.target as HTMLSelectElement\n\n const values = Array.from(target.options)\n .filter((option) => ( option.selected))\n .map((option) => ( option.value));\n\n if (values.length === 1 && !this.multiple) {\n this.value = values[0];\n } else {\n this.value = values;\n }\n\n this.pdsSelectChange.emit(e as InputEvent);\n };\n\n /**\n * Handles the change event for the slot element.\n * This method is triggered when the slot content changes.\n * It updates the inner HTML of the select element by cloning and appending\n * the assigned <option> elements from the slot.\n */\n private handleSlotChange = () => {\n const slot = this.slotContainer.querySelector('slot') as HTMLSlotElement;\n\n this.selectEl.innerHTML = '';\n const assignedElements = slot.assignedElements({ flatten: true }) as (HTMLOptionElement | HTMLOptGroupElement)[];\n\n assignedElements.forEach((item) => {\n if ( ['OPTION', 'OPTGROUP'].includes(item.tagName)) {\n const clonedItem = item.cloneNode(true) as HTMLOptionElement | HTMLOptGroupElement;\n if (clonedItem.tagName === 'OPTION' && (clonedItem as HTMLOptionElement).value === this.value) {\n (clonedItem as HTMLOptionElement).selected = true;\n }\n this.selectEl.appendChild(clonedItem);\n }\n });\n\n this.updateSelectedOption();\n };\n\n private getHelperMessage() {\n return this.helperMessage && (\n <p class=\"pds-select__helper-message\" id={messageId(this.componentId, 'helper')}>\n {this.helperMessage}\n </p>\n );\n }\n\n private getErrorMessage() {\n return this.errorMessage && (\n <p class=\"pds-select__error-message\" id={messageId(this.componentId, 'error')} aria-live=\"assertive\">\n <pds-icon icon={danger} size=\"small\"></pds-icon>\n {this.errorMessage}\n </p>\n );\n }\n\n private renderMessages() {\n if (!this.helperMessage && !this.errorMessage) return null;\n\n return (\n <div class=\"pds-select__message\">\n {this.getHelperMessage()}\n {this.getErrorMessage()}\n </div>\n );\n }\n\n private classNames() {\n const classNames = [];\n\n if (this.invalid) { classNames.push('is-invalid'); }\n if (this.disabled) { classNames.push('is-disabled'); }\n\n return classNames.join(' ');\n }\n\n private renderAction() {\n const hasAction = this.el.querySelector('[slot=\"action\"]') !== null;\n if (hasAction) {\n return (\n <div class=\"pds-select__action\" part=\"action\">\n <slot name=\"action\"></slot>\n </div>\n );\n }\n return null;\n }\n\n /**\n * Updates the form value using ElementInternals API\n */\n private updateFormValue() {\n if (this.internals && this.internals.setFormValue) {\n const value = this.value;\n\n // Handle multi-select arrays by converting to FormData or comma-separated string\n if (Array.isArray(value)) {\n if (value.length > 1) {\n // For multiple values, create FormData with multiple entries\n const formData = new FormData();\n value.forEach(val => formData.append(this.name || '', val));\n this.internals.setFormValue(formData);\n } else {\n // Single value in array, use the string value\n this.internals.setFormValue(value[0] || null);\n }\n } else {\n // Single string value\n this.internals.setFormValue(value || null);\n }\n\n // Set validity based on native select validation\n if (this.selectEl && this.internals && this.internals.setValidity) {\n this.internals.setValidity(\n this.selectEl.validity,\n this.selectEl.validationMessage,\n this.selectEl\n );\n }\n }\n }\n\n /**\n * Form Associated Custom Elements API: Called when the form is reset\n */\n formResetCallback() {\n this.value = '';\n this.updateFormValue();\n }\n\n /**\n * Form Associated Custom Elements API: Called when the form is disabled\n */\n formDisabledCallback(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Form Associated Custom Elements API: Called to restore form state\n */\n formStateRestoreCallback(state: string | FormData | null) {\n if (typeof state === 'string') {\n this.value = state;\n } else if (state instanceof FormData && this.name) {\n // Extract value(s) from FormData using the select's name\n const values = state.getAll(this.name);\n if (values.length > 1) {\n // Multi-select: convert to string array\n this.value = values.filter(v => typeof v === 'string') as string[];\n } else if (values.length === 1 && typeof values[0] === 'string') {\n // Single select: use string value\n this.value = values[0];\n }\n }\n }\n\n render() {\n const hasAction = this.el.querySelector('[slot=\"action\"]') !== null;\n\n return (\n <Host aria-disabled={this.disabled ? 'true' : null} class={this.classNames()} has-action={hasAction && !this.hideLabel ? 'true' : null}>\n <div class=\"pds-select\">\n {!this.hideLabel && (\n <div class=\"pds-select__label-wrapper\">\n <label htmlFor={this.componentId}>\n <span class={this.hideLabel ? 'visually-hidden' : ''}>\n {this.label}\n </span>\n </label>\n {hasAction && this.renderAction()}\n </div>\n )}\n <select\n aria-label={this.hideLabel ? this.label : undefined}\n autocomplete={this.autocomplete || undefined}\n class=\"pds-select__field\"\n disabled={this.disabled}\n id={this.componentId}\n multiple={this.multiple}\n name={this.name}\n onChange={this.onSelectUpdate}\n part=\"select\"\n required={this.required}\n ref={(el) => (this.selectEl = el as HTMLSelectElement)}\n ></select>\n <div aria-hidden=\"true\" class=\"hidden\" ref={(el) => (this.slotContainer = el)}>\n <slot onSlotchange={this.handleSlotChange}></slot>\n </div>\n {this.renderMessages()}\n {!this.multiple && <pds-icon class=\"pds-select__select-icon\" icon={enlarge} />}\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -26,6 +26,7 @@ export class PdsSwitch {
26
26
  return;
27
27
  const input = e.target;
28
28
  this.checked = input.checked;
29
+ this.updateFormValue();
29
30
  this.pdsSwitchChange.emit(e);
30
31
  };
31
32
  this.switchClassNames = () => {
@@ -39,16 +40,53 @@ export class PdsSwitch {
39
40
  return switchClasses;
40
41
  };
41
42
  }
43
+ connectedCallback() {
44
+ if (this.el.attachInternals) {
45
+ this.internals = this.el.attachInternals();
46
+ }
47
+ }
48
+ componentDidLoad() {
49
+ this.updateFormValue();
50
+ }
51
+ checkedChanged() {
52
+ this.updateFormValue();
53
+ }
54
+ updateFormValue() {
55
+ var _a;
56
+ if (typeof jest !== 'undefined' || typeof process !== 'undefined' && ((_a = process.env) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === 'test') {
57
+ return;
58
+ }
59
+ if (this.internals && this.internals.setFormValue) {
60
+ // For switches, only send the value when checked, otherwise send null
61
+ const formValue = this.checked ? (this.value || 'on') : null;
62
+ this.internals.setFormValue(formValue);
63
+ }
64
+ if (this.internals && this.internals.setValidity) {
65
+ this.internals.setValidity({});
66
+ }
67
+ }
68
+ formStateRestoreCallback(state) {
69
+ if (state instanceof FormData) {
70
+ // For switches, restore if the value exists in FormData
71
+ const value = this.value || 'on';
72
+ this.checked = state.get(this.name || this.componentId) === value;
73
+ }
74
+ else if (typeof state === 'string') {
75
+ // Restore from string state
76
+ this.checked = state === (this.value || 'on');
77
+ }
78
+ }
42
79
  componentWillLoad() {
43
80
  this.inheritedAttributes = Object.assign({}, inheritAriaAttributes(this.el));
44
81
  }
45
82
  render() {
46
- return (h(Host, { key: '128ed012fe386dea88e6da282084589b22453588', class: this.switchClassNames(), "aria-disabled": this.disabled ? 'true' : null }, h("label", { key: '3407eeffca9a0f0c047e5d7c761526b488aafb62', htmlFor: this.componentId }, h("input", Object.assign({ key: '3f16f928b2b96aa212923ba09ee80a3559b8103c', "aria-describedby": assignDescription(this.componentId, this.invalid, this.errorMessage || this.helperMessage), "aria-invalid": this.invalid ? "true" : undefined, checked: this.checked, class: "pds-switch__input", disabled: this.disabled, id: this.componentId, name: this.name ? this.name : this.componentId, onChange: this.onSwitchUpdate, required: this.required, type: "checkbox", value: this.value }, this.inheritedAttributes)), h("span", { key: '09c43ffbabce6a2fe133875ca15e0910d34064fa', class: this.hideLabel ? 'visually-hidden' : '' }, this.label)), this.helperMessage &&
47
- h("div", { key: '90c9df8b2efef83cf238d540076bad04bf9aa2eb', class: `pds-switch__message`, id: messageId(this.componentId, 'helper') }, this.helperMessage), this.errorMessage &&
48
- h("div", { key: 'e812446a907dc0ad822b0c5974fca5913117f051', class: `pds-switch__message pds-switch__message--error`, id: messageId(this.componentId, 'error'), "aria-live": "assertive" }, h("pds-icon", { key: 'e1c93c8ac145e54a205f8bfecf465ba8e484313b', icon: danger, size: "small" }), this.errorMessage)));
83
+ return (h(Host, { key: 'bd2a7a9740c0d466fbedff0e06e532ab8deb567d', class: this.switchClassNames(), "aria-disabled": this.disabled ? 'true' : null }, h("label", { key: '0fb2cfa31a424bce3aa7f8310718f004a034fdae', htmlFor: this.componentId }, h("input", Object.assign({ key: '85b836e04db6648dd8981b51cdbd9ee90bfcea6a', "aria-describedby": assignDescription(this.componentId, this.invalid, this.errorMessage || this.helperMessage), "aria-invalid": this.invalid ? "true" : undefined, checked: this.checked, class: "pds-switch__input", disabled: this.disabled, id: this.componentId, name: this.name ? this.name : this.componentId, onChange: this.onSwitchUpdate, required: this.required, type: "checkbox", value: this.value }, this.inheritedAttributes)), h("span", { key: '29674a12e61459a11aa8a791eeb46c829c468317', class: this.hideLabel ? 'visually-hidden' : '' }, this.label)), this.helperMessage &&
84
+ h("div", { key: '135a4bec88f9fe938737b61f361bb76908c39bc7', class: `pds-switch__message`, id: messageId(this.componentId, 'helper') }, this.helperMessage), this.errorMessage &&
85
+ h("div", { key: '18cc1bd12df56b0621820cc0e96a150463373ce2', class: `pds-switch__message pds-switch__message--error`, id: messageId(this.componentId, 'error'), "aria-live": "assertive" }, h("pds-icon", { key: '455fd05665e9bbd8d5a9096544116bb646e4c66a', icon: danger, size: "small" }), this.errorMessage)));
49
86
  }
50
87
  static get is() { return "pds-switch"; }
51
88
  static get encapsulation() { return "shadow"; }
89
+ static get formAssociated() { return true; }
52
90
  static get originalStyleUrls() {
53
91
  return {
54
92
  "$": ["../../global/styles/utils/label.scss", "pds-switch.scss"]
@@ -300,5 +338,11 @@ export class PdsSwitch {
300
338
  }];
301
339
  }
302
340
  static get elementRef() { return "el"; }
341
+ static get watchers() {
342
+ return [{
343
+ "propName": "checked",
344
+ "methodName": "checkedChanged"
345
+ }];
346
+ }
303
347
  }
304
348
  //# sourceMappingURL=pds-switch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pds-switch.js","sourceRoot":"","sources":["../../../src/components/pds-switch/pds-switch.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, Host, h, Prop } from '@stencil/core';\nimport { assignDescription, messageId } from '../../utils/form';\nimport { danger } from '@pine-ds/icons/icons';\n\nimport { inheritAriaAttributes } from '@utils/attributes';\nimport type { Attributes } from '@utils/attributes';\n\n@Component({\n tag: 'pds-switch',\n styleUrls: ['../../global/styles/utils/label.scss', 'pds-switch.scss'],\n shadow: true,\n})\nexport class PdsSwitch {\n private inheritedAttributes: Attributes = {};\n\n @Element() el: HTMLPdsSwitchElement;\n\n /**\n * A unique identifier used for the underlying component `id` attribute and the label `for` attribute.\n */\n @Prop() componentId!: string;\n\n /**\n * Determines the input 'checked' state.\n */\n @Prop({ mutable: true }) checked = false;\n\n /**\n * Determines the input 'disabled' state, preventing user interaction.\n */\n @Prop() disabled? = false;\n\n /**\n * Displays message text describing an invalid state.\n */\n @Prop() errorMessage?: string;\n\n /**\n * Visually hides the label text for instances where only the switch should be displayed. Label remains accessible to assistive technology such as screen readers.\n */\n @Prop() hideLabel: boolean;\n\n /**\n * Displays help text for additional description of an input.\n */\n @Prop() helperMessage: string;\n\n /**\n * Determines the input 'invalid' state, signifying an error is present.\n */\n @Prop() invalid? = false;\n\n /**\n * Displays text to describe the input.\n */\n @Prop() label!: string;\n\n /**\n * Identifies form data and unifies a group of radio inputs for toggling a single property/value.\n */\n @Prop() name: string;\n\n /**\n * Determines the 'required' state of the input.\n */\n @Prop() required? = false;\n\n /**\n * Provides input with a string submitted in form data.\n */\n @Prop() value: string;\n\n /**\n * Emits an event on input change.\n */\n @Event() pdsSwitchChange: EventEmitter<InputEvent>;\n\n private onSwitchUpdate = (e: Event) => {\n if (this.disabled) return;\n\n const input = e.target as HTMLInputElement;\n this.checked = input.checked;\n this.pdsSwitchChange.emit(e as InputEvent);\n };\n\n private switchClassNames = () => {\n let switchClasses = `pds-switch`;\n\n if (this.invalid === true) {\n switchClasses += \" pds-switch--error\";\n }\n if (this.helperMessage !== undefined) {\n switchClasses += \" pds-switch--message\";\n }\n return switchClasses;\n };\n\n componentWillLoad() {\n this.inheritedAttributes = {\n ...inheritAriaAttributes(this.el)\n }\n }\n\n render() {\n return (\n <Host class={this.switchClassNames()} aria-disabled={this.disabled ? 'true' : null}>\n <label htmlFor={this.componentId}>\n <input\n aria-describedby={assignDescription(this.componentId, this.invalid, this.errorMessage || this.helperMessage)}\n aria-invalid={this.invalid ? \"true\" : undefined}\n checked={this.checked}\n class=\"pds-switch__input\"\n disabled={this.disabled}\n id={this.componentId}\n name={this.name ? this.name : this.componentId}\n onChange={this.onSwitchUpdate}\n required={this.required}\n type=\"checkbox\"\n value={this.value}\n {...this.inheritedAttributes}\n />\n <span class={this.hideLabel ? 'visually-hidden' : ''}>\n {this.label}\n </span>\n </label>\n {this.helperMessage &&\n <div\n class={`pds-switch__message`}\n id={messageId(this.componentId, 'helper')}\n >\n {this.helperMessage}\n </div>\n }\n {this.errorMessage &&\n <div\n class={`pds-switch__message pds-switch__message--error`}\n id={messageId(this.componentId, 'error')}\n aria-live=\"assertive\"\n >\n <pds-icon icon={danger} size=\"small\" />\n {this.errorMessage}\n </div>\n }\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"pds-switch.js","sourceRoot":"","sources":["../../../src/components/pds-switch/pds-switch.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, Host, h, Prop, Watch } from '@stencil/core';\nimport { assignDescription, messageId } from '../../utils/form';\nimport { danger } from '@pine-ds/icons/icons';\n\nimport { inheritAriaAttributes } from '@utils/attributes';\nimport type { Attributes } from '@utils/attributes';\n\n@Component({\n tag: 'pds-switch',\n styleUrls: ['../../global/styles/utils/label.scss', 'pds-switch.scss'],\n shadow: true,\n formAssociated: true,\n})\nexport class PdsSwitch {\n private inheritedAttributes: Attributes = {};\n private internals?: ElementInternals;\n\n @Element() el: HTMLPdsSwitchElement;\n\n /**\n * A unique identifier used for the underlying component `id` attribute and the label `for` attribute.\n */\n @Prop() componentId!: string;\n\n /**\n * Determines the input 'checked' state.\n */\n @Prop({ mutable: true }) checked = false;\n\n /**\n * Determines the input 'disabled' state, preventing user interaction.\n */\n @Prop() disabled? = false;\n\n /**\n * Displays message text describing an invalid state.\n */\n @Prop() errorMessage?: string;\n\n /**\n * Visually hides the label text for instances where only the switch should be displayed. Label remains accessible to assistive technology such as screen readers.\n */\n @Prop() hideLabel: boolean;\n\n /**\n * Displays help text for additional description of an input.\n */\n @Prop() helperMessage: string;\n\n /**\n * Determines the input 'invalid' state, signifying an error is present.\n */\n @Prop() invalid? = false;\n\n /**\n * Displays text to describe the input.\n */\n @Prop() label!: string;\n\n /**\n * Identifies form data and unifies a group of radio inputs for toggling a single property/value.\n */\n @Prop() name: string;\n\n /**\n * Determines the 'required' state of the input.\n */\n @Prop() required? = false;\n\n /**\n * Provides input with a string submitted in form data.\n */\n @Prop() value: string;\n\n /**\n * Emits an event on input change.\n */\n @Event() pdsSwitchChange: EventEmitter<InputEvent>;\n\n private onSwitchUpdate = (e: Event) => {\n if (this.disabled) return;\n\n const input = e.target as HTMLInputElement;\n this.checked = input.checked;\n\n this.updateFormValue();\n\n this.pdsSwitchChange.emit(e as InputEvent);\n };\n\n private switchClassNames = () => {\n let switchClasses = `pds-switch`;\n\n if (this.invalid === true) {\n switchClasses += \" pds-switch--error\";\n }\n if (this.helperMessage !== undefined) {\n switchClasses += \" pds-switch--message\";\n }\n return switchClasses;\n };\n\n connectedCallback() {\n if (this.el.attachInternals) {\n this.internals = this.el.attachInternals();\n }\n }\n\n componentDidLoad() {\n this.updateFormValue();\n }\n\n @Watch('checked')\n checkedChanged() {\n this.updateFormValue();\n }\n\n private updateFormValue() {\n if (typeof jest !== 'undefined' || typeof process !== 'undefined' && process.env?.NODE_ENV === 'test') {\n return;\n }\n\n if (this.internals && this.internals.setFormValue) {\n // For switches, only send the value when checked, otherwise send null\n const formValue = this.checked ? (this.value || 'on') : null;\n this.internals.setFormValue(formValue);\n }\n\n if (this.internals && this.internals.setValidity) {\n this.internals.setValidity({});\n }\n }\n\n formStateRestoreCallback(state: string | FormData | null) {\n if (state instanceof FormData) {\n // For switches, restore if the value exists in FormData\n const value = this.value || 'on';\n this.checked = state.get(this.name || this.componentId) === value;\n } else if (typeof state === 'string') {\n // Restore from string state\n this.checked = state === (this.value || 'on');\n }\n }\n\n componentWillLoad() {\n this.inheritedAttributes = {\n ...inheritAriaAttributes(this.el)\n }\n }\n\n render() {\n return (\n <Host class={this.switchClassNames()} aria-disabled={this.disabled ? 'true' : null}>\n <label htmlFor={this.componentId}>\n <input\n aria-describedby={assignDescription(this.componentId, this.invalid, this.errorMessage || this.helperMessage)}\n aria-invalid={this.invalid ? \"true\" : undefined}\n checked={this.checked}\n class=\"pds-switch__input\"\n disabled={this.disabled}\n id={this.componentId}\n name={this.name ? this.name : this.componentId}\n onChange={this.onSwitchUpdate}\n required={this.required}\n type=\"checkbox\"\n value={this.value}\n {...this.inheritedAttributes}\n />\n <span class={this.hideLabel ? 'visually-hidden' : ''}>\n {this.label}\n </span>\n </label>\n {this.helperMessage &&\n <div\n class={`pds-switch__message`}\n id={messageId(this.componentId, 'helper')}\n >\n {this.helperMessage}\n </div>\n }\n {this.errorMessage &&\n <div\n class={`pds-switch__message pds-switch__message--error`}\n id={messageId(this.componentId, 'error')}\n aria-live=\"assertive\"\n >\n <pds-icon icon={danger} size=\"small\" />\n {this.errorMessage}\n </div>\n }\n </Host>\n );\n }\n}\n"]}
@@ -16,7 +16,6 @@
16
16
  align-items: center;
17
17
  display: flex;
18
18
  justify-content: space-between;
19
- margin-block-end: var(--pine-dimension-xs);
20
19
  }
21
20
 
22
21
  .pds-textarea__action {
@@ -68,6 +67,7 @@ label {
68
67
 
69
68
  .pds-textarea__error-message,
70
69
  .pds-textarea__helper-message {
70
+ color: var(--pine-color-text-message);
71
71
  font: var(--pine-typography-body-sm-medium);
72
72
  margin-block-start: var(--pine-dimension-xs);
73
73
  }
@@ -87,6 +87,8 @@ export class PdsTextarea {
87
87
  if (nativeTextarea && nativeTextarea.value !== value) {
88
88
  nativeTextarea.value = value;
89
89
  }
90
+ // Update form value for Form Associated Custom Elements API
91
+ this.updateFormValue();
90
92
  }
91
93
  /**
92
94
  * Emits an `pdsInput` event.
@@ -119,6 +121,10 @@ export class PdsTextarea {
119
121
  }
120
122
  connectedCallback() {
121
123
  this.debounceChanged();
124
+ // Initialize ElementInternals for form association
125
+ if (this.el.attachInternals) {
126
+ this.internals = this.el.attachInternals();
127
+ }
122
128
  }
123
129
  componentWillLoad() {
124
130
  this.inheritedAttributes = Object.assign(Object.assign({}, inheritAriaAttributes(this.el)), inheritAttributes(this.el));
@@ -126,6 +132,8 @@ export class PdsTextarea {
126
132
  }
127
133
  componentDidLoad() {
128
134
  this.originalPdsInput = this.pdsInput;
135
+ // Set initial form value
136
+ this.updateFormValue();
129
137
  }
130
138
  renderAction() {
131
139
  const hasAction = this.el.querySelector('[slot="action"]') !== null;
@@ -134,15 +142,57 @@ export class PdsTextarea {
134
142
  }
135
143
  return null;
136
144
  }
145
+ /**
146
+ * Updates the form value using ElementInternals API
147
+ */
148
+ updateFormValue() {
149
+ if (this.internals && this.internals.setFormValue) {
150
+ const value = this.getValue();
151
+ this.internals.setFormValue(value || null);
152
+ // Set validity based on native textarea validation
153
+ if (this.nativeTextarea && this.internals && this.internals.setValidity) {
154
+ this.internals.setValidity(this.nativeTextarea.validity, this.nativeTextarea.validationMessage, this.nativeTextarea);
155
+ }
156
+ }
157
+ }
158
+ /**
159
+ * Form Associated Custom Elements API: Called when the form is reset
160
+ */
161
+ formResetCallback() {
162
+ this.value = '';
163
+ this.updateFormValue();
164
+ }
165
+ /**
166
+ * Form Associated Custom Elements API: Called when the form is disabled
167
+ */
168
+ formDisabledCallback(disabled) {
169
+ this.disabled = disabled;
170
+ }
171
+ /**
172
+ * Form Associated Custom Elements API: Called to restore form state
173
+ */
174
+ formStateRestoreCallback(state) {
175
+ if (typeof state === 'string') {
176
+ this.value = state;
177
+ }
178
+ else if (state instanceof FormData && this.name) {
179
+ // Extract value from FormData using the textarea's name
180
+ const value = state.get(this.name);
181
+ if (typeof value === 'string') {
182
+ this.value = value;
183
+ }
184
+ }
185
+ }
137
186
  render() {
138
187
  const value = this.getValue();
139
- return (h(Host, { key: 'fa16663adc15f59b07b1d9b6f0ce4ae7d4664967', "aria-disabled": this.disabled ? 'true' : null, "aria-readonly": this.readonly ? 'true' : null, "has-action": this.hasAction ? 'true' : null }, h("div", { key: '5f3406c079111f605a38da627db564ab8f1d2dbb', class: "pds-textarea" }, this.label &&
140
- h("div", { key: '00cea607a59cdf31adb21c3b7d92b8dc21560fe8', class: "pds-textarea__label-wrapper" }, h("label", { key: 'e94c947240141495b83329ae9bbc38aefe77cee1', htmlFor: this.componentId }, this.label), this.renderAction()), h("textarea", Object.assign({ key: 'd29a1cc338533a20808060f37af1f784f4556a02', ref: (el) => this.nativeTextarea = el, "aria-describedby": assignDescription(this.componentId, this.invalid, this.helperMessage), "aria-invalid": this.invalid ? "true" : undefined, autocomplete: this.autocomplete, class: this.textareaClassNames(), disabled: this.disabled, id: this.componentId, name: this.name, placeholder: this.placeholder, readOnly: this.readonly, required: this.required, rows: this.rows, onBlur: this.onBlur, onChange: this.onTextareaChange, onFocus: this.onFocus, onInput: this.onInput }, this.inheritedAttributes), value), this.helperMessage &&
141
- h("p", { key: 'be35def46c67b7b333be13e0d0ccbf47b4db3e15', class: "pds-textarea__helper-message", id: messageId(this.componentId, 'helper') }, this.helperMessage), this.invalid &&
142
- h("p", { key: 'e4636cb54fea2071896a03e17c965039f58ec790', "aria-live": "assertive", class: "pds-textarea__error-message", id: messageId(this.componentId, 'error') }, h("pds-icon", { key: 'dec05eb0d1b7713c96148725a9278f0f62361ba5', icon: danger, size: "small" }), this.errorMessage))));
188
+ return (h(Host, { key: 'c16e4a612ae46f9ab893294f513e1564e941ddec', "aria-disabled": this.disabled ? 'true' : null, "aria-readonly": this.readonly ? 'true' : null, "has-action": this.hasAction ? 'true' : null }, h("div", { key: 'd5acca80be2960ac20a3602c3e887e8d714062d7', class: "pds-textarea" }, this.label &&
189
+ h("div", { key: '49f3c081172f3d81f38e7ad49e4461b9d31772e7', class: "pds-textarea__label-wrapper" }, h("label", { key: '105f191fb2db52c63d165fbda0e78e507f327c49', htmlFor: this.componentId }, this.label), this.renderAction()), h("textarea", Object.assign({ key: '5cbfbee17d058767f6d9d530dbee936ee8638f99', ref: (el) => this.nativeTextarea = el, "aria-describedby": assignDescription(this.componentId, this.invalid, this.helperMessage), "aria-invalid": this.invalid ? "true" : undefined, autocomplete: this.autocomplete, class: this.textareaClassNames(), disabled: this.disabled, id: this.componentId, name: this.name, placeholder: this.placeholder, readOnly: this.readonly, required: this.required, rows: this.rows, onBlur: this.onBlur, onChange: this.onTextareaChange, onFocus: this.onFocus, onInput: this.onInput }, this.inheritedAttributes), value), this.helperMessage &&
190
+ h("p", { key: '0cef5379519c3a1d26a86bb2142a58583d5619ad', class: "pds-textarea__helper-message", id: messageId(this.componentId, 'helper') }, this.helperMessage), this.invalid &&
191
+ h("p", { key: '30a5fc1c6469dfa755db9a9bbb7b858b082700ac', "aria-live": "assertive", class: "pds-textarea__error-message", id: messageId(this.componentId, 'error') }, h("pds-icon", { key: '51a725db0e4e522a584b673df174c7c97c8fe8e3', icon: danger, size: "small" }), this.errorMessage))));
143
192
  }
144
193
  static get is() { return "pds-textarea"; }
145
194
  static get encapsulation() { return "shadow"; }
195
+ static get formAssociated() { return true; }
146
196
  static get originalStyleUrls() {
147
197
  return {
148
198
  "$": ["../../global/styles/utils/label.scss", "../pds-input/pds-input.tokens.scss", "pds-textarea.scss"]
@@ -1 +1 @@
1
- {"version":3,"file":"pds-textarea.js","sourceRoot":"","sources":["../../../src/components/pds-textarea/pds-textarea.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, Host, h, Method, Prop, State, Watch } from '@stencil/core';\nimport { assignDescription, isRequired, messageId } from '../../utils/form';\nimport { TextareaChangeEventDetail, TextareaInputEventDetail } from './textarea-interface';\nimport { debounceEvent } from '@utils/utils';\nimport type { Attributes } from '@utils/attributes';\nimport { inheritAttributes, inheritAriaAttributes } from '@utils/attributes';\nimport { danger } from '@pine-ds/icons/icons';\n\n/**\n * @slot action - Content to be displayed in the label area, typically for help icons or links\n */\n@Component({\n tag: 'pds-textarea',\n styleUrls: [\n '../../global/styles/utils/label.scss',\n '../pds-input/pds-input.tokens.scss',\n 'pds-textarea.scss'\n ],\n shadow: true,\n})\nexport class PdsTextarea {\n private nativeTextarea?: HTMLTextAreaElement\n private focusedValue?: string | null;\n private inheritedAttributes: Attributes = {};\n private originalPdsInput?: EventEmitter<TextareaInputEventDetail>;\n\n @Element() el: HTMLPdsTextareaElement;\n\n /**\n * Emitted when the input loses focus.\n */\n @Event() pdsBlur!: EventEmitter<FocusEvent>;\n\n /**\n * Emitted when the input has focus.\n */\n @Event() pdsFocus!: EventEmitter<FocusEvent>;\n\n /**\n * Emitted when a keyboard input occurs.\n *\n * For elements that accept text input (`type=text`, `type=tel`, etc.), the interface\n * is [`InputEvent`](https://developer.mozilla.org/en-US/docs/Web/API/InputEvent); for others,\n * the interface is [`Event`](https://developer.mozilla.org/en-US/docs/Web/API/Event). If\n * the input is cleared on edit, the type is `null`.\n */\n @Event() pdsInput: EventEmitter<TextareaInputEventDetail>;\n\n /**\n * Event emitted whenever the value of the textarea changes.\n *\n * This event will not emit when programmatically setting the `value` property.\n */\n @Event() pdsTextareaChange: EventEmitter<TextareaChangeEventDetail>;\n\n /**\n * Sets focus on the native `textarea` in the `pds-texarea`. Use this method instead of the global\n * `textarea.focus()`.\n */\n @Method()\n async setFocus() {\n if (this.nativeTextarea) {\n this.nativeTextarea.focus();\n }\n }\n\n /**\n * Specifies if and how the browser provides `autocomplete` assistance for the field.\n */\n @Prop() autocomplete: string;\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId!: string;\n\n /**\n * Determines whether or not the textarea is disabled.\n * @defaultValue false\n */\n @Prop() disabled = false;\n\n /**\n * The amount of time, in milliseconds, to wait to trigger the event after each keystroke.\n */\n @Prop() debounce?: number;\n\n /**\n * Displays an error message below the textarea field.\n */\n @Prop() errorMessage?: string;\n\n /**\n * Displays a message or hint below the textarea field.\n */\n @Prop() helperMessage?: string;\n\n /**\n * Determines whether or not the textarea is invalid or throws an error.\n * @defaultValue false\n */\n @Prop({mutable: true}) invalid = false; // eslint-disable-line @stencil-community/strict-mutable\n\n /**\n * Text to be displayed as the textarea label.\n */\n @Prop() label?: string;\n\n /**\n * Specifies the name. Submitted with the form name/value pair. This value will mirror the componentId.\n */\n @Prop() name: string = this.componentId;\n\n /**\n * Specifies a short hint that describes the expected value of the textarea.\n */\n @Prop() placeholder?: string;\n\n /**\n * Determines whether or not the textarea is readonly.\n * @defaultValue false\n */\n @Prop() readonly = false;\n\n /**\n * Determines whether or not the textarea is required.\n * @defaultValue false\n */\n @Prop() required = false;\n\n /**\n * Sets number of rows of text visible without needing to scroll in the textarea.\n */\n @Prop() rows?: number;\n\n /**\n * The value of the textarea.\n */\n @Prop({mutable: true}) value?: string | null = '';\n\n @State() hasFocus = false;\n\n /**\n * If true, the textarea has action content in the label area\n */\n @State() hasAction = false;\n\n @Watch('debounce')\n protected debounceChanged() {\n const { pdsInput, debounce, originalPdsInput } = this;\n\n this.pdsInput = debounce === undefined ? originalPdsInput ?? pdsInput : debounceEvent(pdsInput, debounce);\n }\n\n /**\n * Update the native input element when the value changes\n */\n @Watch('value')\n protected valueChanged() {\n const nativeTextarea = this.nativeTextarea;\n const value = this.getValue();\n\n if (nativeTextarea && nativeTextarea.value !== value) {\n nativeTextarea.value = value;\n }\n }\n\n /**\n * Emits an `pdsInput` event.\n */\n private emitInputChange(event?: Event) {\n const { value } = this;\n this.pdsInput.emit({ value, event });\n }\n\n /**\n * Emits an `pdsTextareaChange` event.\n */\n private emitValueChange(event?: Event) {\n const textarea = event.target as HTMLTextAreaElement;\n isRequired(textarea, this);\n\n const { value } = textarea;\n\n // Checks for both null and undefined values\n const newValue = value == null ? value : value.toString();\n this.focusedValue = newValue;\n this.pdsTextareaChange.emit({ value: newValue, event });\n }\n\n private getValue(): string {\n return this.value || '';\n }\n\n private onBlur = (ev: FocusEvent) => {\n this.hasFocus = false;\n\n if (this.focusedValue !== this.value) {\n this.emitValueChange(ev);\n }\n\n this.pdsBlur.emit(ev);\n };\n\n private onFocus = (ev: FocusEvent) => {\n this.hasFocus = true;\n this.focusedValue = this.value;\n\n this.pdsFocus.emit(ev);\n };\n\n private onInput = (ev: Event) => {\n const input = ev.target as HTMLTextAreaElement | null;\n if (input) {\n this.value = input.value || '';\n }\n this.emitInputChange(ev);\n };\n\n private onTextareaChange = (ev: Event) => {\n this.emitValueChange(ev);\n };\n\n private textareaClassNames() {\n const classNames = ['pds-textarea__field'];\n\n if (this.invalid && this.invalid === true) {\n classNames.push('is-invalid');\n }\n\n return classNames.join(' ');\n }\n\n connectedCallback() {\n this.debounceChanged();\n }\n\n componentWillLoad() {\n this.inheritedAttributes = {\n ...inheritAriaAttributes(this.el),\n ...inheritAttributes(this.el),\n };\n this.hasAction = this.el.querySelector('[slot=\"action\"]') !== null;\n }\n\n componentDidLoad() {\n this.originalPdsInput = this.pdsInput;\n }\n\n private renderAction() {\n const hasAction = this.el.querySelector('[slot=\"action\"]') !== null;\n if (hasAction) {\n return (\n <div class=\"pds-textarea__action\" part=\"action\">\n <slot name=\"action\"></slot>\n </div>\n );\n }\n return null;\n }\n\n render() {\n const value = this.getValue();\n\n return (\n <Host\n aria-disabled={this.disabled ? 'true' : null}\n aria-readonly={this.readonly ? 'true' : null}\n has-action={this.hasAction ? 'true' : null}\n >\n <div class=\"pds-textarea\">\n {this.label &&\n <div class=\"pds-textarea__label-wrapper\">\n <label htmlFor={this.componentId}>{this.label}</label>\n {this.renderAction()}\n </div>\n }\n <textarea\n ref={(el) => this.nativeTextarea = el }\n aria-describedby={assignDescription(this.componentId, this.invalid, this.helperMessage)}\n aria-invalid={this.invalid ? \"true\" : undefined}\n autocomplete={this.autocomplete}\n class={this.textareaClassNames()}\n disabled={this.disabled}\n id={this.componentId}\n name={this.name}\n placeholder={this.placeholder}\n readOnly={this.readonly}\n required={this.required}\n rows={this.rows}\n onBlur={this.onBlur}\n onChange={this.onTextareaChange}\n onFocus={this.onFocus}\n onInput={this.onInput}\n {...this.inheritedAttributes}\n >\n {value}\n </textarea>\n {this.helperMessage &&\n <p\n class=\"pds-textarea__helper-message\"\n id={messageId(this.componentId, 'helper')}\n >\n {this.helperMessage}\n </p>\n }\n {this.invalid &&\n <p\n aria-live=\"assertive\"\n class=\"pds-textarea__error-message\"\n id={messageId(this.componentId, 'error')}\n >\n <pds-icon icon={danger} size=\"small\" />\n {this.errorMessage}\n </p>\n }\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"pds-textarea.js","sourceRoot":"","sources":["../../../src/components/pds-textarea/pds-textarea.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, Host, h, Method, Prop, State, Watch } from '@stencil/core';\nimport { assignDescription, isRequired, messageId } from '../../utils/form';\nimport { TextareaChangeEventDetail, TextareaInputEventDetail } from './textarea-interface';\nimport { debounceEvent } from '@utils/utils';\nimport type { Attributes } from '@utils/attributes';\nimport { inheritAttributes, inheritAriaAttributes } from '@utils/attributes';\nimport { danger } from '@pine-ds/icons/icons';\n\n/**\n * @slot action - Content to be displayed in the label area, typically for help icons or links\n */\n@Component({\n tag: 'pds-textarea',\n styleUrls: [\n '../../global/styles/utils/label.scss',\n '../pds-input/pds-input.tokens.scss',\n 'pds-textarea.scss'\n ],\n shadow: true,\n formAssociated: true,\n})\nexport class PdsTextarea {\n\n private nativeTextarea?: HTMLTextAreaElement\n private focusedValue?: string | null;\n private inheritedAttributes: Attributes = {};\n private originalPdsInput?: EventEmitter<TextareaInputEventDetail>;\n private internals?: ElementInternals;\n\n @Element() el: HTMLPdsTextareaElement;\n\n /**\n * Emitted when the input loses focus.\n */\n @Event() pdsBlur!: EventEmitter<FocusEvent>;\n\n /**\n * Emitted when the input has focus.\n */\n @Event() pdsFocus!: EventEmitter<FocusEvent>;\n\n /**\n * Emitted when a keyboard input occurs.\n *\n * For elements that accept text input (`type=text`, `type=tel`, etc.), the interface\n * is [`InputEvent`](https://developer.mozilla.org/en-US/docs/Web/API/InputEvent); for others,\n * the interface is [`Event`](https://developer.mozilla.org/en-US/docs/Web/API/Event). If\n * the input is cleared on edit, the type is `null`.\n */\n @Event() pdsInput: EventEmitter<TextareaInputEventDetail>;\n\n /**\n * Event emitted whenever the value of the textarea changes.\n *\n * This event will not emit when programmatically setting the `value` property.\n */\n @Event() pdsTextareaChange: EventEmitter<TextareaChangeEventDetail>;\n\n /**\n * Sets focus on the native `textarea` in the `pds-texarea`. Use this method instead of the global\n * `textarea.focus()`.\n */\n @Method()\n async setFocus() {\n if (this.nativeTextarea) {\n this.nativeTextarea.focus();\n }\n }\n\n /**\n * Specifies if and how the browser provides `autocomplete` assistance for the field.\n */\n @Prop() autocomplete: string;\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId!: string;\n\n /**\n * Determines whether or not the textarea is disabled.\n * @defaultValue false\n */\n @Prop() disabled = false;\n\n /**\n * The amount of time, in milliseconds, to wait to trigger the event after each keystroke.\n */\n @Prop() debounce?: number;\n\n /**\n * Displays an error message below the textarea field.\n */\n @Prop() errorMessage?: string;\n\n /**\n * Displays a message or hint below the textarea field.\n */\n @Prop() helperMessage?: string;\n\n /**\n * Determines whether or not the textarea is invalid or throws an error.\n * @defaultValue false\n */\n @Prop({mutable: true}) invalid = false; // eslint-disable-line @stencil-community/strict-mutable\n\n /**\n * Text to be displayed as the textarea label.\n */\n @Prop() label?: string;\n\n /**\n * Specifies the name. Submitted with the form name/value pair. This value will mirror the componentId.\n */\n @Prop() name: string = this.componentId;\n\n /**\n * Specifies a short hint that describes the expected value of the textarea.\n */\n @Prop() placeholder?: string;\n\n /**\n * Determines whether or not the textarea is readonly.\n * @defaultValue false\n */\n @Prop() readonly = false;\n\n /**\n * Determines whether or not the textarea is required.\n * @defaultValue false\n */\n @Prop() required = false;\n\n /**\n * Sets number of rows of text visible without needing to scroll in the textarea.\n */\n @Prop() rows?: number;\n\n /**\n * The value of the textarea.\n */\n @Prop({mutable: true}) value?: string | null = '';\n\n @State() hasFocus = false;\n\n /**\n * If true, the textarea has action content in the label area\n */\n @State() hasAction = false;\n\n @Watch('debounce')\n protected debounceChanged() {\n const { pdsInput, debounce, originalPdsInput } = this;\n\n this.pdsInput = debounce === undefined ? originalPdsInput ?? pdsInput : debounceEvent(pdsInput, debounce);\n }\n\n /**\n * Update the native input element when the value changes\n */\n @Watch('value')\n protected valueChanged() {\n const nativeTextarea = this.nativeTextarea;\n const value = this.getValue();\n\n if (nativeTextarea && nativeTextarea.value !== value) {\n nativeTextarea.value = value;\n }\n\n // Update form value for Form Associated Custom Elements API\n this.updateFormValue();\n }\n\n /**\n * Emits an `pdsInput` event.\n */\n private emitInputChange(event?: Event) {\n const { value } = this;\n this.pdsInput.emit({ value, event });\n }\n\n /**\n * Emits an `pdsTextareaChange` event.\n */\n private emitValueChange(event?: Event) {\n const textarea = event.target as HTMLTextAreaElement;\n isRequired(textarea, this);\n\n const { value } = textarea;\n\n // Checks for both null and undefined values\n const newValue = value == null ? value : value.toString();\n this.focusedValue = newValue;\n this.pdsTextareaChange.emit({ value: newValue, event });\n }\n\n private getValue(): string {\n return this.value || '';\n }\n\n private onBlur = (ev: FocusEvent) => {\n this.hasFocus = false;\n\n if (this.focusedValue !== this.value) {\n this.emitValueChange(ev);\n }\n\n this.pdsBlur.emit(ev);\n };\n\n private onFocus = (ev: FocusEvent) => {\n this.hasFocus = true;\n this.focusedValue = this.value;\n\n this.pdsFocus.emit(ev);\n };\n\n private onInput = (ev: Event) => {\n const input = ev.target as HTMLTextAreaElement | null;\n if (input) {\n this.value = input.value || '';\n }\n this.emitInputChange(ev);\n };\n\n private onTextareaChange = (ev: Event) => {\n this.emitValueChange(ev);\n };\n\n private textareaClassNames() {\n const classNames = ['pds-textarea__field'];\n\n if (this.invalid && this.invalid === true) {\n classNames.push('is-invalid');\n }\n\n return classNames.join(' ');\n }\n\n connectedCallback() {\n this.debounceChanged();\n // Initialize ElementInternals for form association\n if (this.el.attachInternals) {\n this.internals = this.el.attachInternals();\n }\n }\n\n componentWillLoad() {\n this.inheritedAttributes = {\n ...inheritAriaAttributes(this.el),\n ...inheritAttributes(this.el),\n };\n this.hasAction = this.el.querySelector('[slot=\"action\"]') !== null;\n }\n\n componentDidLoad() {\n this.originalPdsInput = this.pdsInput;\n // Set initial form value\n this.updateFormValue();\n }\n\n private renderAction() {\n const hasAction = this.el.querySelector('[slot=\"action\"]') !== null;\n if (hasAction) {\n return (\n <div class=\"pds-textarea__action\" part=\"action\">\n <slot name=\"action\"></slot>\n </div>\n );\n }\n return null;\n }\n\n /**\n * Updates the form value using ElementInternals API\n */\n private updateFormValue() {\n if (this.internals && this.internals.setFormValue) {\n const value = this.getValue();\n this.internals.setFormValue(value || null);\n\n // Set validity based on native textarea validation\n if (this.nativeTextarea && this.internals && this.internals.setValidity) {\n this.internals.setValidity(\n this.nativeTextarea.validity,\n this.nativeTextarea.validationMessage,\n this.nativeTextarea\n );\n }\n }\n }\n\n /**\n * Form Associated Custom Elements API: Called when the form is reset\n */\n formResetCallback() {\n this.value = '';\n this.updateFormValue();\n }\n\n /**\n * Form Associated Custom Elements API: Called when the form is disabled\n */\n formDisabledCallback(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Form Associated Custom Elements API: Called to restore form state\n */\n formStateRestoreCallback(state: string | FormData | null) {\n if (typeof state === 'string') {\n this.value = state;\n } else if (state instanceof FormData && this.name) {\n // Extract value from FormData using the textarea's name\n const value = state.get(this.name);\n if (typeof value === 'string') {\n this.value = value;\n }\n }\n }\n\n render() {\n const value = this.getValue();\n\n return (\n <Host\n aria-disabled={this.disabled ? 'true' : null}\n aria-readonly={this.readonly ? 'true' : null}\n has-action={this.hasAction ? 'true' : null}\n >\n <div class=\"pds-textarea\">\n {this.label &&\n <div class=\"pds-textarea__label-wrapper\">\n <label htmlFor={this.componentId}>{this.label}</label>\n {this.renderAction()}\n </div>\n }\n <textarea\n ref={(el) => this.nativeTextarea = el }\n aria-describedby={assignDescription(this.componentId, this.invalid, this.helperMessage)}\n aria-invalid={this.invalid ? \"true\" : undefined}\n autocomplete={this.autocomplete}\n class={this.textareaClassNames()}\n disabled={this.disabled}\n id={this.componentId}\n name={this.name}\n placeholder={this.placeholder}\n readOnly={this.readonly}\n required={this.required}\n rows={this.rows}\n onBlur={this.onBlur}\n onChange={this.onTextareaChange}\n onFocus={this.onFocus}\n onInput={this.onInput}\n {...this.inheritedAttributes}\n >\n {value}\n </textarea>\n {this.helperMessage &&\n <p\n class=\"pds-textarea__helper-message\"\n id={messageId(this.componentId, 'helper')}\n >\n {this.helperMessage}\n </p>\n }\n {this.invalid &&\n <p\n aria-live=\"assertive\"\n class=\"pds-textarea__error-message\"\n id={messageId(this.componentId, 'error')}\n >\n <pds-icon icon={danger} size=\"small\" />\n {this.errorMessage}\n </p>\n }\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -15,10 +15,37 @@ export const debounce = (func, wait = 0) => {
15
15
  timer = setTimeout(func, wait, ...args);
16
16
  };
17
17
  };
18
+ // Add shared color normalization utility to unify token handling across components
19
+ /**
20
+ * Normalizes color values to ensure consistent CSS variable usage
21
+ * @param value - Raw token (--token), CSS variable (var(--token)), semantic name, or literal color
22
+ * @param options.semanticMap - Optional mapping of semantic names to CSS variables
23
+ * @returns Normalized color value or undefined for invalid inputs
24
+ */
25
+ export const normalizeColorValue = (value, options) => {
26
+ if (!value)
27
+ return undefined;
28
+ const trimmed = value.trim();
29
+ // Treat whitespace-only as undefined to avoid invalid CSS values
30
+ if (trimmed === '')
31
+ return undefined;
32
+ // If a semantic map is provided and the value matches a key, return mapped CSS var
33
+ if ((options === null || options === void 0 ? void 0 : options.semanticMap) && options.semanticMap[trimmed]) {
34
+ return options.semanticMap[trimmed];
35
+ }
36
+ // If already a CSS var, pass through
37
+ if (trimmed.startsWith('var('))
38
+ return trimmed;
39
+ // If raw token is provided (e.g., --pine-color-foo), wrap in var(...)
40
+ if (trimmed.startsWith('--'))
41
+ return `var(${trimmed})`;
42
+ // Otherwise treat as literal CSS color value
43
+ return trimmed;
44
+ };
18
45
  export const setColor = (color, customColors) => {
19
- var _a;
46
+ // Return an empty object for empty/whitespace/undefined inputs to avoid invalid CSS styles
20
47
  if (!color)
21
- return;
48
+ return {};
22
49
  const defaultColors = {
23
50
  primary: 'var(--pine-color-text-primary)',
24
51
  secondary: 'var(--pine-color-text-secondary)',
@@ -29,9 +56,15 @@ export const setColor = (color, customColors) => {
29
56
  success: 'var(--pine-color-text-success)',
30
57
  warning: 'var(--pine-color-text-warning)',
31
58
  };
32
- const colors = customColors || defaultColors;
59
+ // Merge defaults with any custom overrides so defaults are preserved
60
+ const semanticMap = Object.assign(Object.assign({}, defaultColors), (customColors || {}));
61
+ // Use the shared normalizer so components accept semantic names, raw tokens, var(...), or literals
62
+ const resolved = normalizeColorValue(color, { semanticMap });
63
+ // Ensure we never return an undefined style value; if unresolved, omit the property
64
+ if (!resolved)
65
+ return {};
33
66
  return {
34
- '--color': (_a = colors[color]) !== null && _a !== void 0 ? _a : (color.startsWith('--') ? `var(${color})` : color)
67
+ '--color': resolved
35
68
  };
36
69
  };
37
70
  //# sourceMappingURL=utils.js.map