@ccrpc/webmapgl 0.18.6 → 0.18.8

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 (250) hide show
  1. package/dist/cjs/app-globals-62694daf.js.map +1 -1
  2. package/dist/cjs/gl-address-search_52.cjs.entry.js +31 -30
  3. package/dist/cjs/gl-address-search_52.cjs.entry.js.map +1 -1
  4. package/dist/cjs/gl-draw-toolbar.cjs.entry.js +3 -3
  5. package/dist/cjs/gl-draw-toolbar.cjs.entry.js.map +1 -1
  6. package/dist/cjs/gl-facet_5.cjs.entry.js +1 -1
  7. package/dist/cjs/gl-facet_5.cjs.entry.js.map +1 -1
  8. package/dist/cjs/gl-like-button.cjs.entry.js +5 -5
  9. package/dist/cjs/gl-like-button.cjs.entry.js.map +1 -1
  10. package/dist/cjs/index.cjs.js +11 -0
  11. package/dist/cjs/index.cjs.js.map +1 -1
  12. package/dist/collection/components/address-search/address-search.js +4 -4
  13. package/dist/collection/components/address-search/address-search.js.map +1 -1
  14. package/dist/collection/components/app/app.js +1 -1
  15. package/dist/collection/components/app/app.js.map +1 -1
  16. package/dist/collection/components/attribute-values/attribute-values.js +1 -1
  17. package/dist/collection/components/basemaps/basemaps.js +2 -2
  18. package/dist/collection/components/basemaps/basemaps.js.map +1 -1
  19. package/dist/collection/components/download-button/download-button.js +3 -3
  20. package/dist/collection/components/download-button/download-button.js.map +1 -1
  21. package/dist/collection/components/download-list/download-list.js +2 -1
  22. package/dist/collection/components/download-list/download-list.js.map +1 -1
  23. package/dist/collection/components/draw-toolbar/draw-toolbar.js +4 -4
  24. package/dist/collection/components/draw-toolbar/draw-toolbar.js.map +1 -1
  25. package/dist/collection/components/drawer/drawer.js +4 -4
  26. package/dist/collection/components/drawer/drawer.js.map +1 -1
  27. package/dist/collection/components/drawer-toggle/drawer-toggle.js +1 -1
  28. package/dist/collection/components/drawer-toggle/drawer-toggle.js.map +1 -1
  29. package/dist/collection/components/feature-list/feature-list.js +1 -1
  30. package/dist/collection/components/form-page/form-page.js +2 -2
  31. package/dist/collection/components/form-page/form-page.js.map +1 -1
  32. package/dist/collection/components/fullscreen/fullscreen.js +1 -1
  33. package/dist/collection/components/fullscreen/fullscreen.js.map +1 -1
  34. package/dist/collection/components/legend-item/legend-item.js +2 -2
  35. package/dist/collection/components/legend-item/legend-item.js.map +1 -1
  36. package/dist/collection/components/like-button/like-button.js +6 -6
  37. package/dist/collection/components/like-button/like-button.js.map +1 -1
  38. package/dist/collection/components/share/share.js +3 -3
  39. package/dist/collection/components/share/share.js.map +1 -1
  40. package/dist/collection/components/share-button/share-button.js +2 -2
  41. package/dist/collection/components/share-button/share-button.js.map +1 -1
  42. package/dist/collection/components/story-button/story-button.js +4 -4
  43. package/dist/collection/components/story-button/story-button.js.map +1 -1
  44. package/dist/collection/components/style/style.js +3 -3
  45. package/dist/collection/components/table-column-visibility/table-column-visibility.js +1 -1
  46. package/dist/collection/components/table-column-visibility/table-column-visibility.js.map +1 -1
  47. package/dist/collection/components/table-column-visibility-button/table-column-visibility-button.js +3 -3
  48. package/dist/collection/components/table-column-visibility-button/table-column-visibility-button.js.map +1 -1
  49. package/dist/collection/components/table-export-button/table-export-button.js +1 -1
  50. package/dist/collection/components/table-export-button/table-export-button.js.map +1 -1
  51. package/dist/collection/global/webmapgl.js +1 -0
  52. package/dist/collection/global/webmapgl.js.map +1 -1
  53. package/dist/collection/index.js +2 -0
  54. package/dist/collection/index.js.map +1 -0
  55. package/dist/esm/app-globals-755c21e9.js.map +1 -1
  56. package/dist/esm/gl-address-search_52.entry.js +32 -31
  57. package/dist/esm/gl-address-search_52.entry.js.map +1 -1
  58. package/dist/esm/gl-draw-controller.entry.js +1 -1
  59. package/dist/esm/gl-draw-toolbar.entry.js +3 -3
  60. package/dist/esm/gl-draw-toolbar.entry.js.map +1 -1
  61. package/dist/esm/gl-facet_5.entry.js +2 -2
  62. package/dist/esm/gl-facet_5.entry.js.map +1 -1
  63. package/dist/esm/gl-feature-list.entry.js +1 -1
  64. package/dist/esm/gl-like-button.entry.js +6 -6
  65. package/dist/esm/gl-like-button.entry.js.map +1 -1
  66. package/dist/esm/gl-table-export-controller.entry.js +1 -1
  67. package/dist/esm/index.js +2 -1
  68. package/dist/esm/index.js.map +1 -1
  69. package/dist/esm/polyfills/core-js.js +0 -0
  70. package/dist/esm/polyfills/dom.js +0 -0
  71. package/dist/esm/polyfills/es5-html-element.js +0 -0
  72. package/dist/esm/polyfills/index.js +0 -0
  73. package/dist/esm/polyfills/system.js +0 -0
  74. package/dist/esm/{utils-0af5fee1.js → utils-e86257fd.js} +2 -2
  75. package/dist/esm/{utils-0af5fee1.js.map → utils-e86257fd.js.map} +1 -1
  76. package/dist/node_modules/@ionic/core/dist/collection/components/accordion/accordion.ios.css +83 -0
  77. package/dist/node_modules/@ionic/core/dist/collection/components/accordion/accordion.md.css +80 -0
  78. package/dist/node_modules/@ionic/core/dist/collection/components/accordion-group/accordion-group.ios.css +17 -0
  79. package/dist/node_modules/@ionic/core/dist/collection/components/accordion-group/accordion-group.md.css +64 -0
  80. package/dist/node_modules/@ionic/core/dist/collection/components/action-sheet/action-sheet.ios.css +319 -0
  81. package/dist/node_modules/@ionic/core/dist/collection/components/action-sheet/action-sheet.md.css +259 -0
  82. package/dist/node_modules/@ionic/core/dist/collection/components/alert/alert.ios.css +503 -0
  83. package/dist/node_modules/@ionic/core/dist/collection/components/alert/alert.md.css +531 -0
  84. package/dist/node_modules/@ionic/core/dist/collection/components/app/app.css +17 -0
  85. package/dist/node_modules/@ionic/core/dist/collection/components/avatar/avatar.ios.css +22 -0
  86. package/dist/node_modules/@ionic/core/dist/collection/components/avatar/avatar.md.css +22 -0
  87. package/dist/node_modules/@ionic/core/dist/collection/components/back-button/back-button.ios.css +246 -0
  88. package/dist/node_modules/@ionic/core/dist/collection/components/back-button/back-button.md.css +269 -0
  89. package/dist/node_modules/@ionic/core/dist/collection/components/backdrop/backdrop.ios.css +26 -0
  90. package/dist/node_modules/@ionic/core/dist/collection/components/backdrop/backdrop.md.css +26 -0
  91. package/dist/node_modules/@ionic/core/dist/collection/components/badge/badge.ios.css +50 -0
  92. package/dist/node_modules/@ionic/core/dist/collection/components/badge/badge.md.css +54 -0
  93. package/dist/node_modules/@ionic/core/dist/collection/components/breadcrumb/breadcrumb.ios.css +205 -0
  94. package/dist/node_modules/@ionic/core/dist/collection/components/breadcrumb/breadcrumb.md.css +200 -0
  95. package/dist/node_modules/@ionic/core/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +26 -0
  96. package/dist/node_modules/@ionic/core/dist/collection/components/breadcrumbs/breadcrumbs.md.css +25 -0
  97. package/dist/node_modules/@ionic/core/dist/collection/components/button/button.ios.css +431 -0
  98. package/dist/node_modules/@ionic/core/dist/collection/components/button/button.md.css +408 -0
  99. package/dist/node_modules/@ionic/core/dist/collection/components/buttons/buttons.ios.css +114 -0
  100. package/dist/node_modules/@ionic/core/dist/collection/components/buttons/buttons.md.css +134 -0
  101. package/dist/node_modules/@ionic/core/dist/collection/components/card/card.ios.css +93 -0
  102. package/dist/node_modules/@ionic/core/dist/collection/components/card/card.md.css +88 -0
  103. package/dist/node_modules/@ionic/core/dist/collection/components/card-content/card-content.ios.css +53 -0
  104. package/dist/node_modules/@ionic/core/dist/collection/components/card-content/card-content.md.css +55 -0
  105. package/dist/node_modules/@ionic/core/dist/collection/components/card-header/card-header.ios.css +31 -0
  106. package/dist/node_modules/@ionic/core/dist/collection/components/card-header/card-header.md.css +28 -0
  107. package/dist/node_modules/@ionic/core/dist/collection/components/card-subtitle/card-subtitle.ios.css +28 -0
  108. package/dist/node_modules/@ionic/core/dist/collection/components/card-subtitle/card-subtitle.md.css +26 -0
  109. package/dist/node_modules/@ionic/core/dist/collection/components/card-title/card-title.ios.css +27 -0
  110. package/dist/node_modules/@ionic/core/dist/collection/components/card-title/card-title.md.css +27 -0
  111. package/dist/node_modules/@ionic/core/dist/collection/components/checkbox/checkbox.ios.css +310 -0
  112. package/dist/node_modules/@ionic/core/dist/collection/components/checkbox/checkbox.md.css +326 -0
  113. package/dist/node_modules/@ionic/core/dist/collection/components/chip/chip.css +149 -0
  114. package/dist/node_modules/@ionic/core/dist/collection/components/col/col.css +68 -0
  115. package/dist/node_modules/@ionic/core/dist/collection/components/content/content.css +227 -0
  116. package/dist/node_modules/@ionic/core/dist/collection/components/datetime/datetime.ios.css +589 -0
  117. package/dist/node_modules/@ionic/core/dist/collection/components/datetime/datetime.md.css +561 -0
  118. package/dist/node_modules/@ionic/core/dist/collection/components/datetime-button/datetime-button.css +44 -0
  119. package/dist/node_modules/@ionic/core/dist/collection/components/fab/fab.css +98 -0
  120. package/dist/node_modules/@ionic/core/dist/collection/components/fab-button/fab-button.ios.css +312 -0
  121. package/dist/node_modules/@ionic/core/dist/collection/components/fab-button/fab-button.md.css +283 -0
  122. package/dist/node_modules/@ionic/core/dist/collection/components/fab-list/fab-list.css +123 -0
  123. package/dist/node_modules/@ionic/core/dist/collection/components/footer/footer.ios.css +36 -0
  124. package/dist/node_modules/@ionic/core/dist/collection/components/footer/footer.md.css +19 -0
  125. package/dist/node_modules/@ionic/core/dist/collection/components/grid/grid.css +103 -0
  126. package/dist/node_modules/@ionic/core/dist/collection/components/header/header.ios.css +106 -0
  127. package/dist/node_modules/@ionic/core/dist/collection/components/header/header.md.css +23 -0
  128. package/dist/node_modules/@ionic/core/dist/collection/components/img/img.css +12 -0
  129. package/dist/node_modules/@ionic/core/dist/collection/components/infinite-scroll/infinite-scroll.css +8 -0
  130. package/dist/node_modules/@ionic/core/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +46 -0
  131. package/dist/node_modules/@ionic/core/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +46 -0
  132. package/dist/node_modules/@ionic/core/dist/collection/components/input/input.ios.css +635 -0
  133. package/dist/node_modules/@ionic/core/dist/collection/components/input/input.md.css +1077 -0
  134. package/dist/node_modules/@ionic/core/dist/collection/components/item/item.ios.css +646 -0
  135. package/dist/node_modules/@ionic/core/dist/collection/components/item/item.md.css +908 -0
  136. package/dist/node_modules/@ionic/core/dist/collection/components/item-divider/item-divider.ios.css +166 -0
  137. package/dist/node_modules/@ionic/core/dist/collection/components/item-divider/item-divider.md.css +232 -0
  138. package/dist/node_modules/@ionic/core/dist/collection/components/item-group/item-group.ios.css +3 -0
  139. package/dist/node_modules/@ionic/core/dist/collection/components/item-group/item-group.md.css +3 -0
  140. package/dist/node_modules/@ionic/core/dist/collection/components/item-option/item-option.ios.css +142 -0
  141. package/dist/node_modules/@ionic/core/dist/collection/components/item-option/item-option.md.css +136 -0
  142. package/dist/node_modules/@ionic/core/dist/collection/components/item-options/item-options.ios.css +121 -0
  143. package/dist/node_modules/@ionic/core/dist/collection/components/item-options/item-options.md.css +118 -0
  144. package/dist/node_modules/@ionic/core/dist/collection/components/item-sliding/item-sliding.css +66 -0
  145. package/dist/node_modules/@ionic/core/dist/collection/components/label/label.ios.css +164 -0
  146. package/dist/node_modules/@ionic/core/dist/collection/components/label/label.md.css +251 -0
  147. package/dist/node_modules/@ionic/core/dist/collection/components/list/list.ios.css +63 -0
  148. package/dist/node_modules/@ionic/core/dist/collection/components/list/list.md.css +104 -0
  149. package/dist/node_modules/@ionic/core/dist/collection/components/list-header/list-header.ios.css +107 -0
  150. package/dist/node_modules/@ionic/core/dist/collection/components/list-header/list-header.md.css +88 -0
  151. package/dist/node_modules/@ionic/core/dist/collection/components/loading/loading.ios.css +95 -0
  152. package/dist/node_modules/@ionic/core/dist/collection/components/loading/loading.md.css +86 -0
  153. package/dist/node_modules/@ionic/core/dist/collection/components/menu/menu.ios.css +167 -0
  154. package/dist/node_modules/@ionic/core/dist/collection/components/menu/menu.md.css +163 -0
  155. package/dist/node_modules/@ionic/core/dist/collection/components/menu-button/menu-button.ios.css +167 -0
  156. package/dist/node_modules/@ionic/core/dist/collection/components/menu-button/menu-button.md.css +170 -0
  157. package/dist/node_modules/@ionic/core/dist/collection/components/menu-toggle/menu-toggle.css +3 -0
  158. package/dist/node_modules/@ionic/core/dist/collection/components/modal/modal.ios.css +247 -0
  159. package/dist/node_modules/@ionic/core/dist/collection/components/modal/modal.md.css +162 -0
  160. package/dist/node_modules/@ionic/core/dist/collection/components/nav/nav.css +10 -0
  161. package/dist/node_modules/@ionic/core/dist/collection/components/note/note.ios.css +16 -0
  162. package/dist/node_modules/@ionic/core/dist/collection/components/note/note.md.css +17 -0
  163. package/dist/node_modules/@ionic/core/dist/collection/components/picker/picker.ios.css +257 -0
  164. package/dist/node_modules/@ionic/core/dist/collection/components/picker/picker.md.css +244 -0
  165. package/dist/node_modules/@ionic/core/dist/collection/components/picker-column/picker-column.ios.css +145 -0
  166. package/dist/node_modules/@ionic/core/dist/collection/components/picker-column/picker-column.md.css +136 -0
  167. package/dist/node_modules/@ionic/core/dist/collection/components/picker-column-internal/picker-column-internal.ios.css +75 -0
  168. package/dist/node_modules/@ionic/core/dist/collection/components/picker-column-internal/picker-column-internal.md.css +78 -0
  169. package/dist/node_modules/@ionic/core/dist/collection/components/picker-internal/picker-internal.ios.css +152 -0
  170. package/dist/node_modules/@ionic/core/dist/collection/components/picker-internal/picker-internal.md.css +148 -0
  171. package/dist/node_modules/@ionic/core/dist/collection/components/popover/popover.ios.css +250 -0
  172. package/dist/node_modules/@ionic/core/dist/collection/components/popover/popover.md.css +157 -0
  173. package/dist/node_modules/@ionic/core/dist/collection/components/progress-bar/progress-bar.ios.css +206 -0
  174. package/dist/node_modules/@ionic/core/dist/collection/components/progress-bar/progress-bar.md.css +206 -0
  175. package/dist/node_modules/@ionic/core/dist/collection/components/radio/radio.ios.css +331 -0
  176. package/dist/node_modules/@ionic/core/dist/collection/components/radio/radio.md.css +354 -0
  177. package/dist/node_modules/@ionic/core/dist/collection/components/range/range.ios.css +469 -0
  178. package/dist/node_modules/@ionic/core/dist/collection/components/range/range.md.css +614 -0
  179. package/dist/node_modules/@ionic/core/dist/collection/components/refresher/refresher.ios.css +211 -0
  180. package/dist/node_modules/@ionic/core/dist/collection/components/refresher/refresher.md.css +206 -0
  181. package/dist/node_modules/@ionic/core/dist/collection/components/reorder/reorder.ios.css +15 -0
  182. package/dist/node_modules/@ionic/core/dist/collection/components/reorder/reorder.md.css +15 -0
  183. package/dist/node_modules/@ionic/core/dist/collection/components/reorder-group/reorder-group.css +34 -0
  184. package/dist/node_modules/@ionic/core/dist/collection/components/ripple-effect/ripple-effect.css +58 -0
  185. package/dist/node_modules/@ionic/core/dist/collection/components/router-link/router-link.css +29 -0
  186. package/dist/node_modules/@ionic/core/dist/collection/components/router-outlet/route-outlet.css +10 -0
  187. package/dist/node_modules/@ionic/core/dist/collection/components/row/row.css +4 -0
  188. package/dist/node_modules/@ionic/core/dist/collection/components/searchbar/searchbar.ios.css +354 -0
  189. package/dist/node_modules/@ionic/core/dist/collection/components/searchbar/searchbar.md.css +339 -0
  190. package/dist/node_modules/@ionic/core/dist/collection/components/segment/segment.ios.css +59 -0
  191. package/dist/node_modules/@ionic/core/dist/collection/components/segment/segment.md.css +49 -0
  192. package/dist/node_modules/@ionic/core/dist/collection/components/segment-button/segment-button.ios.css +410 -0
  193. package/dist/node_modules/@ionic/core/dist/collection/components/segment-button/segment-button.md.css +396 -0
  194. package/dist/node_modules/@ionic/core/dist/collection/components/select/select.ios.css +552 -0
  195. package/dist/node_modules/@ionic/core/dist/collection/components/select/select.md.css +1025 -0
  196. package/dist/node_modules/@ionic/core/dist/collection/components/select-option/select-option.css +3 -0
  197. package/dist/node_modules/@ionic/core/dist/collection/components/select-popover/select-popover.ios.css +14 -0
  198. package/dist/node_modules/@ionic/core/dist/collection/components/select-popover/select-popover.md.css +37 -0
  199. package/dist/node_modules/@ionic/core/dist/collection/components/skeleton-text/skeleton-text.css +53 -0
  200. package/dist/node_modules/@ionic/core/dist/collection/components/spinner/spinner.css +177 -0
  201. package/dist/node_modules/@ionic/core/dist/collection/components/split-pane/split-pane.ios.css +92 -0
  202. package/dist/node_modules/@ionic/core/dist/collection/components/split-pane/split-pane.md.css +92 -0
  203. package/dist/node_modules/@ionic/core/dist/collection/components/tab/tab.css +4 -0
  204. package/dist/node_modules/@ionic/core/dist/collection/components/tab-bar/tab-bar.ios.css +87 -0
  205. package/dist/node_modules/@ionic/core/dist/collection/components/tab-bar/tab-bar.md.css +74 -0
  206. package/dist/node_modules/@ionic/core/dist/collection/components/tab-button/tab-button.ios.css +367 -0
  207. package/dist/node_modules/@ionic/core/dist/collection/components/tab-button/tab-button.md.css +391 -0
  208. package/dist/node_modules/@ionic/core/dist/collection/components/tabs/tabs.css +19 -0
  209. package/dist/node_modules/@ionic/core/dist/collection/components/text/text.css +3 -0
  210. package/dist/node_modules/@ionic/core/dist/collection/components/textarea/textarea.ios.css +693 -0
  211. package/dist/node_modules/@ionic/core/dist/collection/components/textarea/textarea.md.css +1142 -0
  212. package/dist/node_modules/@ionic/core/dist/collection/components/thumbnail/thumbnail.css +21 -0
  213. package/dist/node_modules/@ionic/core/dist/collection/components/title/title.ios.css +119 -0
  214. package/dist/node_modules/@ionic/core/dist/collection/components/title/title.md.css +47 -0
  215. package/dist/node_modules/@ionic/core/dist/collection/components/toast/toast.ios.css +284 -0
  216. package/dist/node_modules/@ionic/core/dist/collection/components/toast/toast.md.css +305 -0
  217. package/dist/node_modules/@ionic/core/dist/collection/components/toggle/toggle.ios.css +455 -0
  218. package/dist/node_modules/@ionic/core/dist/collection/components/toggle/toggle.md.css +400 -0
  219. package/dist/node_modules/@ionic/core/dist/collection/components/toolbar/toolbar.ios.css +161 -0
  220. package/dist/node_modules/@ionic/core/dist/collection/components/toolbar/toolbar.md.css +136 -0
  221. package/dist/node_modules/ionicons/dist/collection/components/icon/icon.css +101 -0
  222. package/dist/types/global/webmapgl.d.ts +1 -0
  223. package/dist/types/index.d.ts +1 -0
  224. package/dist/webmapgl/index.esm.js +1 -1
  225. package/dist/webmapgl/{p-29a0ba94.entry.js → p-10ecfbc1.entry.js} +3 -3
  226. package/dist/webmapgl/p-10ecfbc1.entry.js.map +1 -0
  227. package/dist/webmapgl/{p-d8674de4.js → p-1109414b.js} +2 -2
  228. package/dist/webmapgl/p-41aed25d.entry.js +8 -0
  229. package/dist/webmapgl/p-41aed25d.entry.js.map +1 -0
  230. package/dist/webmapgl/{p-9a52a393.entry.js → p-4bdbedef.entry.js} +2 -2
  231. package/dist/webmapgl/{p-43063806.entry.js → p-60c4d25c.entry.js} +2 -2
  232. package/dist/webmapgl/{p-47516d22.entry.js → p-725281ca.entry.js} +2 -2
  233. package/dist/webmapgl/{p-8d22e12f.entry.js → p-8e93527b.entry.js} +2 -2
  234. package/dist/webmapgl/p-8e93527b.entry.js.map +1 -0
  235. package/dist/webmapgl/p-b3dc2acc.js.map +1 -1
  236. package/dist/webmapgl/{p-96e77bf2.entry.js → p-c61eaf23.entry.js} +2 -2
  237. package/dist/webmapgl/p-c61eaf23.entry.js.map +1 -0
  238. package/dist/webmapgl/webmapgl.css +1 -1
  239. package/dist/webmapgl/webmapgl.esm.js +1 -1
  240. package/package.json +4 -3
  241. package/CHANGELOG.md +0 -234
  242. package/dist/webmapgl/p-29a0ba94.entry.js.map +0 -1
  243. package/dist/webmapgl/p-8d22e12f.entry.js.map +0 -1
  244. package/dist/webmapgl/p-96e77bf2.entry.js.map +0 -1
  245. package/dist/webmapgl/p-99a83939.entry.js +0 -8
  246. package/dist/webmapgl/p-99a83939.entry.js.map +0 -1
  247. /package/dist/webmapgl/{p-d8674de4.js.map → p-1109414b.js.map} +0 -0
  248. /package/dist/webmapgl/{p-9a52a393.entry.js.map → p-4bdbedef.entry.js.map} +0 -0
  249. /package/dist/webmapgl/{p-43063806.entry.js.map → p-60c4d25c.entry.js.map} +0 -0
  250. /package/dist/webmapgl/{p-47516d22.entry.js.map → p-725281ca.entry.js.map} +0 -0
@@ -0,0 +1,1142 @@
1
+ :host {
2
+ /**
3
+ * @prop --background: Background of the textarea
4
+ *
5
+ * @prop --border-radius: Border radius of the textarea
6
+ * @prop --border-color: Color of the border below the textarea when using helper text, error text, or counter
7
+ * @prop --border-radius: Radius of the textarea border. A large radius may display unevenly when using fill="outline"; if needed, use shape="round" instead or increase --padding-start.
8
+ * @prop --border-style: Style of the border below the textarea when using helper text, error text, or counter
9
+ * @prop --border-width: Width of the border below the textarea when using helper text, error text, or counter
10
+ *
11
+ * @prop --color: Color of the text
12
+ *
13
+ * @prop --placeholder-color: Color of the placeholder text
14
+ * @prop --placeholder-font-style: Style of the placeholder text
15
+ * @prop --placeholder-font-weight: Weight of the placeholder text
16
+ * @prop --placeholder-opacity: Opacity of the placeholder text
17
+ *
18
+ * @prop --highlight-color-focused: The color of the highlight on the textarea when focused
19
+ * @prop --highlight-color-valid: The color of the highlight on the textarea when valid
20
+ * @prop --highlight-color-invalid: The color of the highlight on the textarea when invalid
21
+ *
22
+ * @prop --padding-top: Top padding of the textarea
23
+ * @prop --padding-end: Right padding if direction is left-to-right, and left padding if direction is right-to-left of the textarea
24
+ * @prop --padding-bottom: Bottom padding of the textarea
25
+ * @prop --padding-start: Left padding if direction is left-to-right, and right padding if direction is right-to-left of the textarea
26
+ */
27
+ --background: initial;
28
+ --color: initial;
29
+ --placeholder-color: initial;
30
+ --placeholder-font-style: initial;
31
+ --placeholder-font-weight: initial;
32
+ --placeholder-opacity: 0.6;
33
+ --padding-top: 0;
34
+ --padding-end: 0;
35
+ --padding-bottom: 0;
36
+ --padding-start: 0;
37
+ --border-radius: 0;
38
+ --border-style: solid;
39
+ --highlight-color-focused: var(--ion-color-primary, #3880ff);
40
+ --highlight-color-valid: var(--ion-color-success, #2dd36f);
41
+ --highlight-color-invalid: var(--ion-color-danger, #eb445a);
42
+ /**
43
+ * This is a private API that is used to switch
44
+ * out the highlight color based on the state
45
+ * of the component without having to write
46
+ * different selectors for different fill variants.
47
+ */
48
+ --highlight-color: var(--highlight-color-focused);
49
+ display: block;
50
+ position: relative;
51
+ width: 100%;
52
+ color: var(--color);
53
+ font-family: var(--ion-font-family, inherit);
54
+ z-index: 2;
55
+ box-sizing: border-box;
56
+ }
57
+
58
+ :host(.legacy-textarea) {
59
+ flex: 1;
60
+ background: var(--background);
61
+ white-space: pre-wrap;
62
+ }
63
+
64
+ :host(.legacy-textarea.ion-color) {
65
+ color: var(--ion-color-base);
66
+ }
67
+
68
+ :host(:not(.legacy-textarea)) {
69
+ --padding-bottom: 8px;
70
+ }
71
+
72
+ :host(.ion-color) {
73
+ --highlight-color-focused: var(--ion-color-base);
74
+ background: initial;
75
+ }
76
+
77
+ :host-context(ion-item) {
78
+ align-self: baseline;
79
+ }
80
+
81
+ :host-context(ion-item:not(.item-label)) {
82
+ --padding-start: 0;
83
+ }
84
+
85
+ :host-context(ion-item)[slot=start],
86
+ :host-context(ion-item)[slot=end] {
87
+ width: auto;
88
+ }
89
+
90
+ .native-textarea {
91
+ margin-left: 0;
92
+ margin-right: 0;
93
+ margin-top: 0;
94
+ margin-bottom: 0;
95
+ padding-left: 0;
96
+ padding-right: 0;
97
+ padding-top: 0;
98
+ padding-bottom: 0;
99
+ display: block;
100
+ position: relative;
101
+ flex: 1;
102
+ width: 100%;
103
+ max-width: 100%;
104
+ max-height: 100%;
105
+ border: 0;
106
+ outline: none;
107
+ background: transparent;
108
+ white-space: pre-wrap;
109
+ /**
110
+ * This ensures the textarea
111
+ * remains on top of any decoration
112
+ * that we render (particularly the
113
+ * outline border when fill="outline").
114
+ * If we did not do this then Axe would
115
+ * be unable to determine the color
116
+ * contrast of the textarea.
117
+ */
118
+ z-index: 1;
119
+ box-sizing: border-box;
120
+ resize: none;
121
+ appearance: none;
122
+ }
123
+ .native-textarea::placeholder {
124
+ padding-left: 0;
125
+ padding-right: 0;
126
+ padding-top: 0;
127
+ padding-bottom: 0;
128
+ color: var(--placeholder-color);
129
+ font-family: inherit;
130
+ font-style: var(--placeholder-font-style);
131
+ font-weight: var(--placeholder-font-weight);
132
+ opacity: var(--placeholder-opacity);
133
+ }
134
+
135
+ :host(.legacy-textarea) .native-textarea {
136
+ white-space: inherit;
137
+ }
138
+
139
+ :host(.legacy-textarea) .native-textarea,
140
+ :host(.legacy-textarea) .textarea-legacy-wrapper::after {
141
+ -webkit-padding-start: var(--padding-start);
142
+ padding-inline-start: var(--padding-start);
143
+ -webkit-padding-end: var(--padding-end);
144
+ padding-inline-end: var(--padding-end);
145
+ padding-top: var(--padding-top);
146
+ padding-bottom: var(--padding-bottom);
147
+ border-radius: var(--border-radius);
148
+ }
149
+
150
+ .native-textarea {
151
+ color: inherit;
152
+ font-family: inherit;
153
+ font-size: inherit;
154
+ font-style: inherit;
155
+ font-weight: inherit;
156
+ letter-spacing: inherit;
157
+ text-align: inherit;
158
+ text-decoration: inherit;
159
+ text-indent: inherit;
160
+ text-overflow: inherit;
161
+ text-transform: inherit;
162
+ grid-area: 1/1/2/2;
163
+ word-break: break-word;
164
+ }
165
+
166
+ :host(.legacy-textarea) .textarea-legacy-wrapper::after {
167
+ font-family: inherit;
168
+ font-size: inherit;
169
+ font-style: inherit;
170
+ font-weight: inherit;
171
+ letter-spacing: inherit;
172
+ text-decoration: inherit;
173
+ text-indent: inherit;
174
+ text-overflow: inherit;
175
+ text-transform: inherit;
176
+ text-align: inherit;
177
+ white-space: inherit;
178
+ color: inherit;
179
+ grid-area: 1/1/2/2;
180
+ word-break: break-word;
181
+ }
182
+
183
+ .cloned-input {
184
+ top: 0;
185
+ bottom: 0;
186
+ position: absolute;
187
+ pointer-events: none;
188
+ }
189
+ @supports (inset-inline-start: 0) {
190
+ .cloned-input {
191
+ inset-inline-start: 0;
192
+ }
193
+ }
194
+ @supports not (inset-inline-start: 0) {
195
+ .cloned-input {
196
+ left: 0;
197
+ }
198
+ :host-context([dir=rtl]) .cloned-input {
199
+ left: unset;
200
+ right: unset;
201
+ right: 0;
202
+ }
203
+ [dir=rtl] .cloned-input {
204
+ left: unset;
205
+ right: unset;
206
+ right: 0;
207
+ }
208
+ @supports selector(:dir(rtl)) {
209
+ .cloned-input:dir(rtl) {
210
+ left: unset;
211
+ right: unset;
212
+ right: 0;
213
+ }
214
+ }
215
+ }
216
+
217
+ /**
218
+ * The cloned input needs to be disabled on
219
+ * Android otherwise the viewport will still
220
+ * shift when running scroll assist.
221
+ */
222
+ .cloned-input:disabled {
223
+ opacity: 1;
224
+ }
225
+
226
+ :host(.legacy-textarea[auto-grow]) .cloned-input {
227
+ margin-left: 0;
228
+ margin-right: 0;
229
+ margin-top: 0;
230
+ margin-bottom: 0;
231
+ }
232
+
233
+ :host([auto-grow]) .cloned-input {
234
+ height: 100%;
235
+ }
236
+
237
+ :host([auto-grow]) .native-textarea {
238
+ overflow: hidden;
239
+ }
240
+
241
+ :host-context(.item-label-floating.item-has-placeholder:not(.item-has-value)) {
242
+ opacity: 0;
243
+ }
244
+
245
+ :host-context(.item-label-floating.item-has-placeholder:not(.item-has-value).item-has-focus) {
246
+ transition: opacity 0.15s cubic-bezier(0.4, 0, 0.2, 1);
247
+ opacity: 1;
248
+ }
249
+
250
+ .textarea-wrapper {
251
+ -webkit-padding-start: var(--padding-start);
252
+ padding-inline-start: var(--padding-start);
253
+ -webkit-padding-end: var(--padding-end);
254
+ padding-inline-end: var(--padding-end);
255
+ padding-top: 0px;
256
+ padding-bottom: 0px;
257
+ border-radius: var(--border-radius);
258
+ display: flex;
259
+ position: relative;
260
+ flex-grow: 1;
261
+ align-items: flex-start;
262
+ height: inherit;
263
+ min-height: inherit;
264
+ transition: background-color 15ms linear;
265
+ background: var(--background);
266
+ line-height: normal;
267
+ }
268
+
269
+ .native-wrapper {
270
+ display: flex;
271
+ position: relative;
272
+ flex-grow: 1;
273
+ width: 100%;
274
+ height: 100%;
275
+ }
276
+
277
+ :host(.has-focus) textarea {
278
+ caret-color: var(--highlight-color);
279
+ }
280
+
281
+ .native-wrapper textarea {
282
+ -webkit-padding-start: 0px;
283
+ padding-inline-start: 0px;
284
+ -webkit-padding-end: 0px;
285
+ padding-inline-end: 0px;
286
+ padding-top: var(--padding-top);
287
+ padding-bottom: var(--padding-bottom);
288
+ }
289
+
290
+ .native-wrapper,
291
+ .textarea-legacy-wrapper {
292
+ display: grid;
293
+ min-width: inherit;
294
+ max-width: inherit;
295
+ min-height: inherit;
296
+ max-height: inherit;
297
+ /**
298
+ * This avoids a WebKit bug where
299
+ * the height of the inner textarea
300
+ * is incorrect and flows outside the
301
+ * parent container: https://bugs.webkit.org/show_bug.cgi?id=256781
302
+ * TODO FW-4734
303
+ */
304
+ grid-auto-rows: 100%;
305
+ }
306
+ .native-wrapper::after,
307
+ .textarea-legacy-wrapper::after {
308
+ white-space: pre-wrap;
309
+ content: attr(data-replicated-value) " ";
310
+ visibility: hidden;
311
+ }
312
+
313
+ .native-wrapper::after {
314
+ padding-left: 0;
315
+ padding-right: 0;
316
+ padding-top: var(--padding-top);
317
+ padding-bottom: var(--padding-bottom);
318
+ margin-left: 0;
319
+ margin-right: 0;
320
+ margin-top: 0;
321
+ margin-bottom: 0;
322
+ border-radius: var(--border-radius);
323
+ /**
324
+ * Note: Do not use @include text-inherit()
325
+ * as that sets white-space: inherit
326
+ * Instead, we use white-space: pre-wrap above.
327
+ */
328
+ color: inherit;
329
+ font-family: inherit;
330
+ font-size: inherit;
331
+ font-style: inherit;
332
+ font-weight: inherit;
333
+ letter-spacing: inherit;
334
+ text-align: inherit;
335
+ text-decoration: inherit;
336
+ text-indent: inherit;
337
+ text-overflow: inherit;
338
+ text-transform: inherit;
339
+ grid-area: 1/1/2/2;
340
+ word-break: break-word;
341
+ }
342
+
343
+ :host(.ion-touched.ion-invalid) {
344
+ --highlight-color: var(--highlight-color-invalid);
345
+ }
346
+
347
+ /**
348
+ * The component highlight is only shown
349
+ * on focus, so we can safely set the valid
350
+ * color state when touched/valid. If we
351
+ * set it when .has-focus is present then
352
+ * the highlight color would change
353
+ * from the valid color to the component's
354
+ * color during the transition after the
355
+ * component loses focus.
356
+ */
357
+ :host(.ion-valid) {
358
+ --highlight-color: var(--highlight-color-valid);
359
+ }
360
+
361
+ .textarea-bottom {
362
+ /**
363
+ * The bottom content should take on the start and end
364
+ * padding so it is always aligned with either the label
365
+ * or the start of the textarea.
366
+ */
367
+ -webkit-padding-start: var(--padding-start);
368
+ padding-inline-start: var(--padding-start);
369
+ -webkit-padding-end: var(--padding-end);
370
+ padding-inline-end: var(--padding-end);
371
+ padding-top: 5px;
372
+ padding-bottom: 0;
373
+ display: flex;
374
+ justify-content: space-between;
375
+ border-top: var(--border-width) var(--border-style) var(--border-color);
376
+ font-size: 12px;
377
+ }
378
+
379
+ /**
380
+ * If the textarea has a validity state, the
381
+ * border and label should reflect that as a color.
382
+ */
383
+ :host(.has-focus.ion-valid),
384
+ :host(.ion-touched.ion-invalid) {
385
+ --border-color: var(--highlight-color);
386
+ }
387
+
388
+ /**
389
+ * Error text should only be shown when .ion-invalid is
390
+ * present on the textarea. Otherwise the helper text should
391
+ * be shown.
392
+ */
393
+ .textarea-bottom .error-text {
394
+ display: none;
395
+ color: var(--highlight-color-invalid);
396
+ }
397
+
398
+ .textarea-bottom .helper-text {
399
+ display: block;
400
+ color: var(--ion-color-step-550, #737373);
401
+ }
402
+
403
+ :host(.ion-touched.ion-invalid) .textarea-bottom .error-text {
404
+ display: block;
405
+ }
406
+
407
+ :host(.ion-touched.ion-invalid) .textarea-bottom .helper-text {
408
+ display: none;
409
+ }
410
+
411
+ .textarea-bottom .counter {
412
+ /**
413
+ * Counter should always be at
414
+ * the end of the container even
415
+ * when no helper/error texts are used.
416
+ */
417
+ -webkit-margin-start: auto;
418
+ margin-inline-start: auto;
419
+ color: var(--ion-color-step-550, #737373);
420
+ white-space: nowrap;
421
+ padding-inline-start: 16px;
422
+ }
423
+
424
+ .label-text-wrapper {
425
+ -webkit-padding-start: 0px;
426
+ padding-inline-start: 0px;
427
+ -webkit-padding-end: 0px;
428
+ padding-inline-end: 0px;
429
+ padding-top: var(--padding-top);
430
+ padding-bottom: var(--padding-bottom);
431
+ /**
432
+ * Label text should not extend
433
+ * beyond the bounds of the textarea.
434
+ * However, we do not set the max
435
+ * width to 100% because then
436
+ * only the label would show and users
437
+ * would not be able to see what they are typing.
438
+ */
439
+ max-width: 200px;
440
+ transition: color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1);
441
+ /**
442
+ * This ensures that double tapping this text
443
+ * clicks the <label> and focuses the textarea
444
+ * when a screen reader is enabled.
445
+ */
446
+ pointer-events: none;
447
+ }
448
+
449
+ /**
450
+ * We need to use two elements instead of
451
+ * one. The .label-text-wrapper is responsible
452
+ * for centering the label text vertically regardless
453
+ * of the textarea height using flexbox.
454
+ *
455
+ * The .label-text element is responsible for controlling
456
+ * overflow when label-placement="fixed".
457
+ * We want the ellipses to show up when the
458
+ * fixed label overflows, but text-overflow: ellipsis only
459
+ * works on block-level elements. A flex item is
460
+ * considered blockified (https://www.w3.org/TR/css-display-3/#blockify).
461
+ */
462
+ .label-text,
463
+ ::slotted([slot=label]) {
464
+ text-overflow: ellipsis;
465
+ white-space: nowrap;
466
+ overflow: hidden;
467
+ }
468
+
469
+ /**
470
+ * If no label text is placed into the slot
471
+ * then the element should be hidden otherwise
472
+ * there will be additional margins added.
473
+ */
474
+ .label-text-wrapper-hidden,
475
+ .textarea-outline-notch-hidden {
476
+ display: none;
477
+ }
478
+
479
+ .textarea-wrapper textarea {
480
+ /**
481
+ * When the floating label appears on top of the
482
+ * textarea, we need to fade the textarea out so that the
483
+ * label does not overlap with the placeholder.
484
+ */
485
+ transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
486
+ }
487
+
488
+ /**
489
+ * Label is on the left of the textarea in LTR and
490
+ * on the right in RTL.
491
+ */
492
+ :host(.textarea-label-placement-start) .textarea-wrapper {
493
+ flex-direction: row;
494
+ }
495
+
496
+ :host(.textarea-label-placement-start) .label-text-wrapper {
497
+ /**
498
+ * The margin between the label and
499
+ * the textarea should be on the end
500
+ * when the label sits at the start.
501
+ */
502
+ -webkit-margin-start: 0;
503
+ margin-inline-start: 0;
504
+ -webkit-margin-end: 16px;
505
+ margin-inline-end: 16px;
506
+ margin-top: 0;
507
+ margin-bottom: 0;
508
+ }
509
+
510
+ /**
511
+ * Label is on the right of the textarea in LTR and
512
+ * on the left in RTL.
513
+ */
514
+ :host(.textarea-label-placement-end) .textarea-wrapper {
515
+ flex-direction: row-reverse;
516
+ }
517
+
518
+ /**
519
+ * The margin between the label and
520
+ * the textarea should be on the start
521
+ * when the label sits at the end.
522
+ */
523
+ :host(.textarea-label-placement-end) .label-text-wrapper {
524
+ -webkit-margin-start: 16px;
525
+ margin-inline-start: 16px;
526
+ -webkit-margin-end: 0;
527
+ margin-inline-end: 0;
528
+ margin-top: 0;
529
+ margin-bottom: 0;
530
+ }
531
+
532
+ :host(.textarea-label-placement-fixed) .label-text-wrapper {
533
+ /**
534
+ * The margin between the label and
535
+ * the textarea should be on the end
536
+ * when the label sits at the start.
537
+ */
538
+ -webkit-margin-start: 0;
539
+ margin-inline-start: 0;
540
+ -webkit-margin-end: 16px;
541
+ margin-inline-end: 16px;
542
+ margin-top: 0;
543
+ margin-bottom: 0;
544
+ }
545
+
546
+ /**
547
+ * Label is on the left of the textarea in LTR and
548
+ * on the right in RTL. Label also has a fixed width.
549
+ */
550
+ :host(.textarea-label-placement-fixed) .label-text {
551
+ flex: 0 0 100px;
552
+ width: 100px;
553
+ min-width: 100px;
554
+ max-width: 200px;
555
+ }
556
+
557
+ /**
558
+ * Stacked: Label sits above the textarea and is scaled down.
559
+ * Floating: Label sits over the textarea when the textarea has no
560
+ * value and is blurred. Label sits above the textarea and is scaled
561
+ * down when the textarea is focused or has a value.
562
+ *
563
+ */
564
+ :host(.textarea-label-placement-stacked) .textarea-wrapper,
565
+ :host(.textarea-label-placement-floating) .textarea-wrapper {
566
+ flex-direction: column;
567
+ align-items: start;
568
+ }
569
+
570
+ /**
571
+ * Ensures that the label animates
572
+ * up and to the left in LTR or
573
+ * up and to the right in RTL.
574
+ */
575
+ :host(.textarea-label-placement-stacked) .label-text-wrapper,
576
+ :host(.textarea-label-placement-floating) .label-text-wrapper {
577
+ transform-origin: left top;
578
+ -webkit-padding-start: 0px;
579
+ padding-inline-start: 0px;
580
+ -webkit-padding-end: 0px;
581
+ padding-inline-end: 0px;
582
+ padding-top: 0px;
583
+ padding-bottom: 0px;
584
+ max-width: 100%;
585
+ }
586
+ :host-context([dir=rtl]):host(.textarea-label-placement-stacked) .label-text-wrapper, :host-context([dir=rtl]).textarea-label-placement-stacked .label-text-wrapper, :host-context([dir=rtl]):host(.textarea-label-placement-floating) .label-text-wrapper, :host-context([dir=rtl]).textarea-label-placement-floating .label-text-wrapper {
587
+ transform-origin: right top;
588
+ }
589
+
590
+ @supports selector(:dir(rtl)) {
591
+ :host(.textarea-label-placement-stacked) .label-text-wrapper:dir(rtl), :host(.textarea-label-placement-floating) .label-text-wrapper:dir(rtl) {
592
+ transform-origin: right top;
593
+ }
594
+ }
595
+
596
+ /**
597
+ * Ensures the textarea does not
598
+ * overlap the label.
599
+ */
600
+ :host(.textarea-label-placement-stacked) textarea,
601
+ :host(.textarea-label-placement-floating) textarea,
602
+ :host(.textarea-label-placement-stacked[auto-grow]) .native-wrapper::after,
603
+ :host(.textarea-label-placement-floating[auto-grow]) .native-wrapper::after {
604
+ -webkit-margin-start: 0px;
605
+ margin-inline-start: 0px;
606
+ -webkit-margin-end: 0px;
607
+ margin-inline-end: 0px;
608
+ margin-top: 8px;
609
+ margin-bottom: 0px;
610
+ }
611
+
612
+ /**
613
+ * This makes the label sit over the textarea
614
+ * when the textarea is blurred and has no value.
615
+ */
616
+ :host(.textarea-label-placement-floating) .label-text-wrapper {
617
+ transform: translateY(100%) scale(1);
618
+ }
619
+
620
+ /**
621
+ * The textarea should be hidden when the label
622
+ * is on top of the textarea. This prevents the label
623
+ * from overlapping any placeholder value.
624
+ */
625
+ :host(.textarea-label-placement-floating) textarea {
626
+ opacity: 0;
627
+ }
628
+
629
+ :host(.has-focus.textarea-label-placement-floating) textarea,
630
+ :host(.has-value.textarea-label-placement-floating) textarea {
631
+ opacity: 1;
632
+ }
633
+
634
+ /**
635
+ * This makes the label sit above the textarea.
636
+ */
637
+ :host(.textarea-label-placement-stacked) .label-text-wrapper,
638
+ :host(.has-focus.textarea-label-placement-floating) .label-text-wrapper,
639
+ :host(.has-value.textarea-label-placement-floating) .label-text-wrapper {
640
+ transform: translateY(50%) scale(0.75);
641
+ /**
642
+ * Label text should not extend
643
+ * beyond the bounds of the textarea.
644
+ */
645
+ max-width: calc(100% / 0.75);
646
+ }
647
+
648
+ :host(.textarea-fill-solid) {
649
+ --background: var(--ion-color-step-50, #f2f2f2);
650
+ --border-color: var(--ion-color-step-500, gray);
651
+ --border-radius: 4px;
652
+ --padding-start: 16px;
653
+ --padding-end: 16px;
654
+ }
655
+
656
+ /**
657
+ * The solid fill style has a border
658
+ * at the bottom of the textarea wrapper.
659
+ * As a result, the border on the "bottom
660
+ * content" is not needed.
661
+ */
662
+ :host(.textarea-fill-solid) .textarea-wrapper {
663
+ border-bottom: var(--border-width) var(--border-style) var(--border-color);
664
+ }
665
+
666
+ /**
667
+ * If the textarea has a validity state, the
668
+ * border should reflect that as a color.
669
+ */
670
+ :host(.has-focus.textarea-fill-solid.ion-valid),
671
+ :host(.textarea-fill-solid.ion-touched.ion-invalid) {
672
+ --border-color: var(--highlight-color);
673
+ }
674
+
675
+ :host(.textarea-fill-solid) .textarea-bottom {
676
+ border-top: none;
677
+ }
678
+
679
+ /**
680
+ * Background and border should be
681
+ * slightly darker on hover.
682
+ */
683
+ @media (any-hover: hover) {
684
+ :host(.textarea-fill-solid:hover) {
685
+ --background: var(--ion-color-step-100, #e6e6e6);
686
+ --border-color: var(--ion-color-step-750, #404040);
687
+ }
688
+ }
689
+ /**
690
+ * Background and border should be
691
+ * much darker on focus.
692
+ */
693
+ :host(.textarea-fill-solid.has-focus) {
694
+ --background: var(--ion-color-step-150, #d9d9d9);
695
+ --border-color: var(--ion-color-step-750, #404040);
696
+ }
697
+
698
+ :host(.textarea-fill-solid) .textarea-wrapper {
699
+ /**
700
+ * Only the top left and top right borders should.
701
+ * have a radius when using a solid fill.
702
+ */
703
+ border-top-left-radius: var(--border-radius);
704
+ border-top-right-radius: var(--border-radius);
705
+ border-bottom-right-radius: 0px;
706
+ border-bottom-left-radius: 0px;
707
+ }
708
+ :host-context([dir=rtl]):host(.textarea-fill-solid) .textarea-wrapper, :host-context([dir=rtl]).textarea-fill-solid .textarea-wrapper {
709
+ border-top-left-radius: var(--border-radius);
710
+ border-top-right-radius: var(--border-radius);
711
+ border-bottom-right-radius: 0px;
712
+ border-bottom-left-radius: 0px;
713
+ }
714
+
715
+ @supports selector(:dir(rtl)) {
716
+ :host(.textarea-fill-solid) .textarea-wrapper:dir(rtl) {
717
+ border-top-left-radius: var(--border-radius);
718
+ border-top-right-radius: var(--border-radius);
719
+ border-bottom-right-radius: 0px;
720
+ border-bottom-left-radius: 0px;
721
+ }
722
+ }
723
+
724
+ :host(.textarea-fill-solid.textarea-label-placement-stacked) .label-text-wrapper,
725
+ :host(.has-focus.textarea-fill-solid.textarea-label-placement-floating) .label-text-wrapper,
726
+ :host(.has-value.textarea-fill-solid.textarea-label-placement-floating) .label-text-wrapper {
727
+ /**
728
+ * Label text should not extend
729
+ * beyond the bounds of the textarea.
730
+ */
731
+ max-width: calc(100% / 0.75);
732
+ }
733
+
734
+ :host(.textarea-fill-outline) {
735
+ --border-color: var(--ion-color-step-300, #b3b3b3);
736
+ --border-radius: 4px;
737
+ --padding-start: 16px;
738
+ --padding-end: 16px;
739
+ }
740
+
741
+ :host(.textarea-fill-outline.textarea-shape-round) {
742
+ --border-radius: 28px;
743
+ --padding-start: 32px;
744
+ --padding-end: 32px;
745
+ }
746
+
747
+ /**
748
+ * If the textarea has a validity state, the
749
+ * border should reflect that as a color.
750
+ */
751
+ :host(.has-focus.textarea-fill-outline.ion-valid),
752
+ :host(.textarea-fill-outline.ion-touched.ion-invalid) {
753
+ --border-color: var(--highlight-color);
754
+ }
755
+
756
+ /**
757
+ * Border should be
758
+ * slightly darker on hover.
759
+ */
760
+ @media (any-hover: hover) {
761
+ :host(.textarea-fill-outline:hover) {
762
+ --border-color: var(--ion-color-step-750, #404040);
763
+ }
764
+ }
765
+ /**
766
+ * The border should get thicker
767
+ * and take on component color when
768
+ * the textarea is focused.
769
+ */
770
+ :host(.textarea-fill-outline.has-focus) {
771
+ --border-width: 2px;
772
+ --border-color: var(--highlight-color);
773
+ }
774
+
775
+ /**
776
+ * The bottom content should never have
777
+ * a border with the outline style.
778
+ */
779
+ :host(.textarea-fill-outline) .textarea-bottom {
780
+ border-top: none;
781
+ }
782
+
783
+ /**
784
+ * Outline textarea do not have a bottom border.
785
+ * Instead, they have a border that wraps the
786
+ * textarea + label.
787
+ */
788
+ :host(.textarea-fill-outline) .textarea-wrapper {
789
+ border-bottom: none;
790
+ }
791
+
792
+ :host(.textarea-fill-outline.textarea-label-placement-stacked) .label-text-wrapper,
793
+ :host(.textarea-fill-outline.textarea-label-placement-floating) .label-text-wrapper {
794
+ transform-origin: left top;
795
+ position: absolute;
796
+ /**
797
+ * Label text should not extend
798
+ * beyond the bounds of the textarea.
799
+ */
800
+ max-width: calc(100% - var(--padding-start) - var(--padding-end));
801
+ }
802
+ :host-context([dir=rtl]):host(.textarea-fill-outline.textarea-label-placement-stacked) .label-text-wrapper, :host-context([dir=rtl]).textarea-fill-outline.textarea-label-placement-stacked .label-text-wrapper, :host-context([dir=rtl]):host(.textarea-fill-outline.textarea-label-placement-floating) .label-text-wrapper, :host-context([dir=rtl]).textarea-fill-outline.textarea-label-placement-floating .label-text-wrapper {
803
+ transform-origin: right top;
804
+ }
805
+
806
+ @supports selector(:dir(rtl)) {
807
+ :host(.textarea-fill-outline.textarea-label-placement-stacked) .label-text-wrapper:dir(rtl), :host(.textarea-fill-outline.textarea-label-placement-floating) .label-text-wrapper:dir(rtl) {
808
+ transform-origin: right top;
809
+ }
810
+ }
811
+
812
+ /**
813
+ * The label should appear on top of an outline
814
+ * container that overlaps it so it is always clickable.
815
+ */
816
+ :host(.textarea-fill-outline) .label-text-wrapper,
817
+ :host(.textarea-fill-outline) .label-text-wrapper {
818
+ position: relative;
819
+ z-index: 1;
820
+ }
821
+
822
+ /**
823
+ * This makes the label sit above the textarea.
824
+ */
825
+ :host(.has-focus.textarea-fill-outline.textarea-label-placement-floating) .label-text-wrapper,
826
+ :host(.has-value.textarea-fill-outline.textarea-label-placement-floating) .label-text-wrapper,
827
+ :host(.textarea-fill-outline.textarea-label-placement-stacked) .label-text-wrapper {
828
+ transform: translateY(-32%) scale(0.75);
829
+ margin-left: 0;
830
+ margin-right: 0;
831
+ margin-top: 0;
832
+ margin-bottom: 0;
833
+ /**
834
+ * Label text should not extend
835
+ * beyond the bounds of the textarea.
836
+ */
837
+ max-width: calc(
838
+ (100% - var(--padding-start) - var(--padding-end) - 8px) / 0.75
839
+ );
840
+ }
841
+
842
+ /**
843
+ * This ensures that the textarea does not
844
+ * overlap the floating label while still
845
+ * remaining visually centered.
846
+ */
847
+ :host(.textarea-fill-outline.textarea-label-placement-stacked) textarea,
848
+ :host(.textarea-fill-outline.textarea-label-placement-floating) textarea,
849
+ :host(.textarea-fill-outline.textarea-label-placement-stacked[auto-grow]) .native-wrapper::after,
850
+ :host(.textarea-fill-outline.textarea-label-placement-floating[auto-grow]) .native-wrapper::after {
851
+ -webkit-margin-start: 0px;
852
+ margin-inline-start: 0px;
853
+ -webkit-margin-end: 0px;
854
+ margin-inline-end: 0px;
855
+ margin-top: 12px;
856
+ margin-bottom: 0px;
857
+ }
858
+
859
+ :host(.textarea-fill-outline) .textarea-outline-container {
860
+ left: 0;
861
+ right: 0;
862
+ top: 0;
863
+ bottom: 0;
864
+ display: flex;
865
+ position: absolute;
866
+ width: 100%;
867
+ height: 100%;
868
+ }
869
+
870
+ :host(.textarea-fill-outline) .textarea-outline-start,
871
+ :host(.textarea-fill-outline) .textarea-outline-end {
872
+ pointer-events: none;
873
+ }
874
+
875
+ /**
876
+ * By default, each piece of the container should have
877
+ * a top and bottom border. This gives the appearance
878
+ * of a unified container with a border.
879
+ */
880
+ :host(.textarea-fill-outline) .textarea-outline-start,
881
+ :host(.textarea-fill-outline) .textarea-outline-notch,
882
+ :host(.textarea-fill-outline) .textarea-outline-end {
883
+ border-top: var(--border-width) var(--border-style) var(--border-color);
884
+ border-bottom: var(--border-width) var(--border-style) var(--border-color);
885
+ }
886
+
887
+ /**
888
+ * Ensures long labels do not cause the notch to flow
889
+ * out of bounds.
890
+ */
891
+ :host(.textarea-fill-outline) .textarea-outline-notch {
892
+ max-width: calc(100% - var(--padding-start) - var(--padding-end));
893
+ }
894
+
895
+ /**
896
+ * This element ensures that the notch used
897
+ * the size of the scaled text so that the
898
+ * border cut out is the correct width.
899
+ * The text in this element should not
900
+ * be interactive.
901
+ */
902
+ :host(.textarea-fill-outline) .notch-spacer {
903
+ /**
904
+ * We need $textarea-md-floating-label-padding of padding on the right.
905
+ * However, we also subtracted $textarea-md-floating-label-padding from
906
+ * the width of .textarea-outline-start
907
+ * to create space, so we need to take
908
+ * that into consideration here.
909
+ */
910
+ -webkit-padding-end: 8px;
911
+ padding-inline-end: 8px;
912
+ font-size: calc(1em * 0.75);
913
+ opacity: 0;
914
+ pointer-events: none;
915
+ /**
916
+ * The spacer currently inherits
917
+ * border-box sizing from the Ionic reset styles.
918
+ * However, we do not want to include padding in
919
+ * the calculation of the element dimensions.
920
+ * This code can be removed if textarea is updated
921
+ * to use the Shadow DOM.
922
+ */
923
+ box-sizing: content-box;
924
+ }
925
+
926
+ :host(.textarea-fill-outline) .textarea-outline-start {
927
+ border-top-left-radius: var(--border-radius);
928
+ border-top-right-radius: 0px;
929
+ border-bottom-right-radius: 0px;
930
+ border-bottom-left-radius: var(--border-radius);
931
+ -webkit-border-start: var(--border-width) var(--border-style) var(--border-color);
932
+ border-inline-start: var(--border-width) var(--border-style) var(--border-color);
933
+ /**
934
+ * There should be spacing between the translated text
935
+ * and .textarea-outline-start. However, we can't add this
936
+ * spacing onto the notch because it would cause the
937
+ * label to look like it is not aligned with the
938
+ * text textarea. Instead, we subtract a few pixels from
939
+ * this element.
940
+ */
941
+ width: calc(var(--padding-start) - 4px);
942
+ }
943
+ :host-context([dir=rtl]):host(.textarea-fill-outline) .textarea-outline-start, :host-context([dir=rtl]).textarea-fill-outline .textarea-outline-start {
944
+ border-top-left-radius: 0px;
945
+ border-top-right-radius: var(--border-radius);
946
+ border-bottom-right-radius: var(--border-radius);
947
+ border-bottom-left-radius: 0px;
948
+ }
949
+
950
+ @supports selector(:dir(rtl)) {
951
+ :host(.textarea-fill-outline) .textarea-outline-start:dir(rtl) {
952
+ border-top-left-radius: 0px;
953
+ border-top-right-radius: var(--border-radius);
954
+ border-bottom-right-radius: var(--border-radius);
955
+ border-bottom-left-radius: 0px;
956
+ }
957
+ }
958
+
959
+ :host(.textarea-fill-outline) .textarea-outline-end {
960
+ -webkit-border-end: var(--border-width) var(--border-style) var(--border-color);
961
+ border-inline-end: var(--border-width) var(--border-style) var(--border-color);
962
+ border-top-left-radius: 0px;
963
+ border-top-right-radius: var(--border-radius);
964
+ border-bottom-right-radius: var(--border-radius);
965
+ border-bottom-left-radius: 0px;
966
+ /**
967
+ * The ending outline fragment
968
+ * should take up the remaining free space.
969
+ */
970
+ flex-grow: 1;
971
+ }
972
+ :host-context([dir=rtl]):host(.textarea-fill-outline) .textarea-outline-end, :host-context([dir=rtl]).textarea-fill-outline .textarea-outline-end {
973
+ border-top-left-radius: var(--border-radius);
974
+ border-top-right-radius: 0px;
975
+ border-bottom-right-radius: 0px;
976
+ border-bottom-left-radius: var(--border-radius);
977
+ }
978
+
979
+ @supports selector(:dir(rtl)) {
980
+ :host(.textarea-fill-outline) .textarea-outline-end:dir(rtl) {
981
+ border-top-left-radius: var(--border-radius);
982
+ border-top-right-radius: 0px;
983
+ border-bottom-right-radius: 0px;
984
+ border-bottom-left-radius: var(--border-radius);
985
+ }
986
+ }
987
+
988
+ /**
989
+ * When the textarea either has focus or a value,
990
+ * there should be a "cut out" at the top for
991
+ * the floating/stacked label. We simulate this "cut out"
992
+ * by removing the top border from the notch fragment.
993
+ */
994
+ :host(.has-focus.textarea-fill-outline.textarea-label-placement-floating) .textarea-outline-notch,
995
+ :host(.has-value.textarea-fill-outline.textarea-label-placement-floating) .textarea-outline-notch,
996
+ :host(.textarea-fill-outline.textarea-label-placement-stacked) .textarea-outline-notch {
997
+ border-top: none;
998
+ }
999
+
1000
+ :host {
1001
+ --border-width: 1px;
1002
+ --border-color: var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.13))));
1003
+ --padding-top: 18px;
1004
+ --padding-end: 0px;
1005
+ --padding-bottom: 8px;
1006
+ --padding-start: 0px;
1007
+ font-size: inherit;
1008
+ }
1009
+
1010
+ :host(.legacy-textarea) {
1011
+ --padding-top: 10px;
1012
+ --padding-end: 0;
1013
+ --padding-bottom: 11px;
1014
+ --padding-start: 8px;
1015
+ margin-left: 0;
1016
+ margin-right: 0;
1017
+ margin-top: 8px;
1018
+ margin-bottom: 0;
1019
+ }
1020
+
1021
+ :host-context(.item-label-stacked),
1022
+ :host-context(.item-label-floating) {
1023
+ --padding-top: 8px;
1024
+ --padding-bottom: 8px;
1025
+ --padding-start: 0;
1026
+ }
1027
+
1028
+ .textarea-bottom .counter {
1029
+ letter-spacing: 0.0333333333em;
1030
+ }
1031
+
1032
+ :host(:not(.legacy-textarea)) {
1033
+ min-height: 56px;
1034
+ }
1035
+
1036
+ /**
1037
+ * Floating and stacked labels should not
1038
+ * push the label down since it it
1039
+ * sits on top of the textarea.
1040
+ */
1041
+ :host(.textarea-label-placement-floating),
1042
+ :host(.textarea-label-placement-stacked) {
1043
+ --padding-top: 0px;
1044
+ }
1045
+
1046
+ /**
1047
+ * When the textarea is focused the label should
1048
+ * take on the highlight color. This should
1049
+ * only apply to floating or stacked labels.
1050
+ */
1051
+ :host(.textarea-label-placement-floating.has-focus) .label-text-wrapper,
1052
+ :host(.textarea-label-placement-stacked.has-focus) .label-text-wrapper {
1053
+ color: var(--highlight-color);
1054
+ }
1055
+
1056
+ :host(.has-focus.textarea-label-placement-floating.ion-valid) .label-text-wrapper,
1057
+ :host(.textarea-label-placement-floating.ion-touched.ion-invalid) .label-text-wrapper,
1058
+ :host(.has-focus.textarea-label-placement-stacked.ion-valid) .label-text-wrapper,
1059
+ :host(.textarea-label-placement-stacked.ion-touched.ion-invalid) .label-text-wrapper {
1060
+ color: var(--highlight-color);
1061
+ }
1062
+
1063
+ :host(.legacy-textarea) .native-textarea[disabled],
1064
+ :host(.textarea-disabled) {
1065
+ opacity: 0.38;
1066
+ }
1067
+
1068
+ .textarea-highlight {
1069
+ bottom: -1px;
1070
+ position: absolute;
1071
+ width: 100%;
1072
+ height: 2px;
1073
+ transform: scale(0);
1074
+ transition: transform 200ms;
1075
+ background: var(--highlight-color);
1076
+ }
1077
+ @supports (inset-inline-start: 0) {
1078
+ .textarea-highlight {
1079
+ inset-inline-start: 0;
1080
+ }
1081
+ }
1082
+ @supports not (inset-inline-start: 0) {
1083
+ .textarea-highlight {
1084
+ left: 0;
1085
+ }
1086
+ :host-context([dir=rtl]) .textarea-highlight {
1087
+ left: unset;
1088
+ right: unset;
1089
+ right: 0;
1090
+ }
1091
+ [dir=rtl] .textarea-highlight {
1092
+ left: unset;
1093
+ right: unset;
1094
+ right: 0;
1095
+ }
1096
+ @supports selector(:dir(rtl)) {
1097
+ .textarea-highlight:dir(rtl) {
1098
+ left: unset;
1099
+ right: unset;
1100
+ right: 0;
1101
+ }
1102
+ }
1103
+ }
1104
+
1105
+ :host(.has-focus) .textarea-highlight {
1106
+ transform: scale(1);
1107
+ }
1108
+
1109
+ /**
1110
+ * Adjust the highlight up by 1px
1111
+ * so it is not cut off by the
1112
+ * the item's line (if one is present).
1113
+ */
1114
+ :host(.in-item) .textarea-highlight {
1115
+ bottom: 0;
1116
+ }
1117
+ @supports (inset-inline-start: 0) {
1118
+ :host(.in-item) .textarea-highlight {
1119
+ inset-inline-start: 0;
1120
+ }
1121
+ }
1122
+ @supports not (inset-inline-start: 0) {
1123
+ :host(.in-item) .textarea-highlight {
1124
+ left: 0;
1125
+ }
1126
+ :host-context([dir=rtl]):host(.in-item) .textarea-highlight, :host-context([dir=rtl]).in-item .textarea-highlight {
1127
+ left: unset;
1128
+ right: unset;
1129
+ right: 0;
1130
+ }
1131
+ @supports selector(:dir(rtl)) {
1132
+ :host(.in-item) .textarea-highlight:dir(rtl) {
1133
+ left: unset;
1134
+ right: unset;
1135
+ right: 0;
1136
+ }
1137
+ }
1138
+ }
1139
+
1140
+ :host(.textarea-shape-round) {
1141
+ --border-radius: 16px;
1142
+ }