@masmarino/gabarit 2.0.0 → 2.1.1

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 (333) hide show
  1. package/README.md +131 -85
  2. package/accordion/README.md +56 -0
  3. package/alert/README.md +87 -0
  4. package/app-shell/README.md +133 -0
  5. package/auth/README.md +155 -0
  6. package/auth-activate/README.md +119 -0
  7. package/auth-login/README.md +113 -0
  8. package/auth-register/README.md +104 -0
  9. package/auth-reset-password/README.md +120 -0
  10. package/autocomplete/README.md +77 -0
  11. package/avatar/README.md +34 -0
  12. package/avatar-group/README.md +47 -0
  13. package/badge/README.md +177 -0
  14. package/bar-chart/README.md +44 -0
  15. package/breadcrumb/README.md +38 -0
  16. package/button/README.md +175 -0
  17. package/card/README.md +179 -0
  18. package/checkbox/README.md +50 -0
  19. package/checkbox-group/README.md +78 -0
  20. package/confirm-danger-modal/README.md +77 -0
  21. package/copy-button/README.md +90 -0
  22. package/copy-field/README.md +54 -0
  23. package/date-picker/README.md +84 -0
  24. package/description-list/README.md +63 -0
  25. package/dimension-card/README.md +39 -0
  26. package/disclosure/README.md +48 -0
  27. package/divider/README.md +31 -0
  28. package/drawer/README.md +49 -0
  29. package/empty-state/README.md +84 -0
  30. package/fesm2022/masmarino-gabarit-accordion.mjs +243 -0
  31. package/fesm2022/masmarino-gabarit-accordion.mjs.map +1 -0
  32. package/fesm2022/masmarino-gabarit-alert.mjs +208 -0
  33. package/fesm2022/masmarino-gabarit-alert.mjs.map +1 -0
  34. package/fesm2022/masmarino-gabarit-app-shell.mjs +378 -0
  35. package/fesm2022/masmarino-gabarit-app-shell.mjs.map +1 -0
  36. package/fesm2022/masmarino-gabarit-auth-activate.mjs +415 -0
  37. package/fesm2022/masmarino-gabarit-auth-activate.mjs.map +1 -0
  38. package/fesm2022/masmarino-gabarit-auth-login.mjs +467 -0
  39. package/fesm2022/masmarino-gabarit-auth-login.mjs.map +1 -0
  40. package/fesm2022/masmarino-gabarit-auth-register.mjs +457 -0
  41. package/fesm2022/masmarino-gabarit-auth-register.mjs.map +1 -0
  42. package/fesm2022/masmarino-gabarit-auth-reset-password.mjs +364 -0
  43. package/fesm2022/masmarino-gabarit-auth-reset-password.mjs.map +1 -0
  44. package/fesm2022/masmarino-gabarit-auth.mjs +844 -0
  45. package/fesm2022/masmarino-gabarit-auth.mjs.map +1 -0
  46. package/fesm2022/masmarino-gabarit-autocomplete.mjs +475 -0
  47. package/fesm2022/masmarino-gabarit-autocomplete.mjs.map +1 -0
  48. package/fesm2022/masmarino-gabarit-avatar-group.mjs +202 -0
  49. package/fesm2022/masmarino-gabarit-avatar-group.mjs.map +1 -0
  50. package/fesm2022/masmarino-gabarit-avatar.mjs +107 -0
  51. package/fesm2022/masmarino-gabarit-avatar.mjs.map +1 -0
  52. package/fesm2022/masmarino-gabarit-badge.mjs +449 -0
  53. package/fesm2022/masmarino-gabarit-badge.mjs.map +1 -0
  54. package/fesm2022/masmarino-gabarit-bar-chart.mjs +408 -0
  55. package/fesm2022/masmarino-gabarit-bar-chart.mjs.map +1 -0
  56. package/fesm2022/masmarino-gabarit-breadcrumb.mjs +59 -0
  57. package/fesm2022/masmarino-gabarit-breadcrumb.mjs.map +1 -0
  58. package/fesm2022/masmarino-gabarit-button.mjs +374 -0
  59. package/fesm2022/masmarino-gabarit-button.mjs.map +1 -0
  60. package/fesm2022/masmarino-gabarit-card.mjs +400 -0
  61. package/fesm2022/masmarino-gabarit-card.mjs.map +1 -0
  62. package/fesm2022/masmarino-gabarit-chart.mjs +1289 -0
  63. package/fesm2022/masmarino-gabarit-chart.mjs.map +1 -0
  64. package/fesm2022/masmarino-gabarit-checkbox-group.mjs +335 -0
  65. package/fesm2022/masmarino-gabarit-checkbox-group.mjs.map +1 -0
  66. package/fesm2022/masmarino-gabarit-checkbox.mjs +170 -0
  67. package/fesm2022/masmarino-gabarit-checkbox.mjs.map +1 -0
  68. package/fesm2022/masmarino-gabarit-confirm-danger-modal.mjs +387 -0
  69. package/fesm2022/masmarino-gabarit-confirm-danger-modal.mjs.map +1 -0
  70. package/fesm2022/masmarino-gabarit-copy-button.mjs +407 -0
  71. package/fesm2022/masmarino-gabarit-copy-button.mjs.map +1 -0
  72. package/fesm2022/masmarino-gabarit-copy-field.mjs +229 -0
  73. package/fesm2022/masmarino-gabarit-copy-field.mjs.map +1 -0
  74. package/fesm2022/masmarino-gabarit-date-picker.mjs +1242 -0
  75. package/fesm2022/masmarino-gabarit-date-picker.mjs.map +1 -0
  76. package/fesm2022/masmarino-gabarit-description-list.mjs +127 -0
  77. package/fesm2022/masmarino-gabarit-description-list.mjs.map +1 -0
  78. package/fesm2022/masmarino-gabarit-dimension-card.mjs +162 -0
  79. package/fesm2022/masmarino-gabarit-dimension-card.mjs.map +1 -0
  80. package/fesm2022/masmarino-gabarit-disclosure.mjs +154 -0
  81. package/fesm2022/masmarino-gabarit-disclosure.mjs.map +1 -0
  82. package/fesm2022/masmarino-gabarit-divider.mjs +90 -0
  83. package/fesm2022/masmarino-gabarit-divider.mjs.map +1 -0
  84. package/fesm2022/masmarino-gabarit-docs.mjs +16 -2
  85. package/fesm2022/masmarino-gabarit-docs.mjs.map +1 -1
  86. package/fesm2022/masmarino-gabarit-drawer.mjs +209 -0
  87. package/fesm2022/masmarino-gabarit-drawer.mjs.map +1 -0
  88. package/fesm2022/masmarino-gabarit-empty-state.mjs +226 -0
  89. package/fesm2022/masmarino-gabarit-empty-state.mjs.map +1 -0
  90. package/fesm2022/masmarino-gabarit-file-upload.mjs +335 -0
  91. package/fesm2022/masmarino-gabarit-file-upload.mjs.map +1 -0
  92. package/fesm2022/masmarino-gabarit-floating-panel.mjs +24 -0
  93. package/fesm2022/masmarino-gabarit-floating-panel.mjs.map +1 -0
  94. package/fesm2022/masmarino-gabarit-format.mjs +345 -0
  95. package/fesm2022/masmarino-gabarit-format.mjs.map +1 -0
  96. package/fesm2022/masmarino-gabarit-funnel-chart.mjs +247 -0
  97. package/fesm2022/masmarino-gabarit-funnel-chart.mjs.map +1 -0
  98. package/fesm2022/masmarino-gabarit-gauge-bar.mjs +180 -0
  99. package/fesm2022/masmarino-gabarit-gauge-bar.mjs.map +1 -0
  100. package/fesm2022/masmarino-gabarit-git-field.mjs +127 -0
  101. package/fesm2022/masmarino-gabarit-git-field.mjs.map +1 -0
  102. package/fesm2022/masmarino-gabarit-icon-marker.mjs +150 -0
  103. package/fesm2022/masmarino-gabarit-icon-marker.mjs.map +1 -0
  104. package/fesm2022/masmarino-gabarit-icon.mjs +308 -0
  105. package/fesm2022/masmarino-gabarit-icon.mjs.map +1 -0
  106. package/fesm2022/masmarino-gabarit-input.mjs +493 -0
  107. package/fesm2022/masmarino-gabarit-input.mjs.map +1 -0
  108. package/fesm2022/masmarino-gabarit-job-graph.mjs +216 -0
  109. package/fesm2022/masmarino-gabarit-job-graph.mjs.map +1 -0
  110. package/fesm2022/masmarino-gabarit-job-status.mjs +104 -0
  111. package/fesm2022/masmarino-gabarit-job-status.mjs.map +1 -0
  112. package/fesm2022/masmarino-gabarit-line-chart.mjs +574 -0
  113. package/fesm2022/masmarino-gabarit-line-chart.mjs.map +1 -0
  114. package/fesm2022/masmarino-gabarit-list-card.mjs +320 -0
  115. package/fesm2022/masmarino-gabarit-list-card.mjs.map +1 -0
  116. package/fesm2022/masmarino-gabarit-list-row.mjs +58 -0
  117. package/fesm2022/masmarino-gabarit-list-row.mjs.map +1 -0
  118. package/fesm2022/masmarino-gabarit-list-toolbar.mjs +369 -0
  119. package/fesm2022/masmarino-gabarit-list-toolbar.mjs.map +1 -0
  120. package/fesm2022/masmarino-gabarit-menu.mjs +464 -0
  121. package/fesm2022/masmarino-gabarit-menu.mjs.map +1 -0
  122. package/fesm2022/masmarino-gabarit-mfa-enrollment.mjs +897 -0
  123. package/fesm2022/masmarino-gabarit-mfa-enrollment.mjs.map +1 -0
  124. package/fesm2022/masmarino-gabarit-mfa-settings.mjs +629 -0
  125. package/fesm2022/masmarino-gabarit-mfa-settings.mjs.map +1 -0
  126. package/fesm2022/masmarino-gabarit-modal.mjs +260 -0
  127. package/fesm2022/masmarino-gabarit-modal.mjs.map +1 -0
  128. package/fesm2022/masmarino-gabarit-nav-tabs.mjs +332 -0
  129. package/fesm2022/masmarino-gabarit-nav-tabs.mjs.map +1 -0
  130. package/fesm2022/masmarino-gabarit-notification-dot.mjs +119 -0
  131. package/fesm2022/masmarino-gabarit-notification-dot.mjs.map +1 -0
  132. package/fesm2022/masmarino-gabarit-page-header.mjs +78 -0
  133. package/fesm2022/masmarino-gabarit-page-header.mjs.map +1 -0
  134. package/fesm2022/masmarino-gabarit-page-layout.mjs +157 -0
  135. package/fesm2022/masmarino-gabarit-page-layout.mjs.map +1 -0
  136. package/fesm2022/masmarino-gabarit-pagination.mjs +415 -0
  137. package/fesm2022/masmarino-gabarit-pagination.mjs.map +1 -0
  138. package/fesm2022/masmarino-gabarit-panel.mjs +80 -0
  139. package/fesm2022/masmarino-gabarit-panel.mjs.map +1 -0
  140. package/fesm2022/masmarino-gabarit-passkey-settings.mjs +606 -0
  141. package/fesm2022/masmarino-gabarit-passkey-settings.mjs.map +1 -0
  142. package/fesm2022/masmarino-gabarit-pie-chart.mjs +317 -0
  143. package/fesm2022/masmarino-gabarit-pie-chart.mjs.map +1 -0
  144. package/fesm2022/masmarino-gabarit-popover.mjs +142 -0
  145. package/fesm2022/masmarino-gabarit-popover.mjs.map +1 -0
  146. package/fesm2022/masmarino-gabarit-radio-group.mjs +202 -0
  147. package/fesm2022/masmarino-gabarit-radio-group.mjs.map +1 -0
  148. package/fesm2022/masmarino-gabarit-save-status.mjs +142 -0
  149. package/fesm2022/masmarino-gabarit-save-status.mjs.map +1 -0
  150. package/fesm2022/masmarino-gabarit-search-bar.mjs +576 -0
  151. package/fesm2022/masmarino-gabarit-search-bar.mjs.map +1 -0
  152. package/fesm2022/masmarino-gabarit-secret-reveal.mjs +348 -0
  153. package/fesm2022/masmarino-gabarit-secret-reveal.mjs.map +1 -0
  154. package/fesm2022/masmarino-gabarit-segmented-control.mjs +272 -0
  155. package/fesm2022/masmarino-gabarit-segmented-control.mjs.map +1 -0
  156. package/fesm2022/masmarino-gabarit-select.mjs +512 -0
  157. package/fesm2022/masmarino-gabarit-select.mjs.map +1 -0
  158. package/fesm2022/masmarino-gabarit-skeleton-list.mjs +189 -0
  159. package/fesm2022/masmarino-gabarit-skeleton-list.mjs.map +1 -0
  160. package/fesm2022/masmarino-gabarit-skeleton.mjs +109 -0
  161. package/fesm2022/masmarino-gabarit-skeleton.mjs.map +1 -0
  162. package/fesm2022/masmarino-gabarit-slider.mjs +239 -0
  163. package/fesm2022/masmarino-gabarit-slider.mjs.map +1 -0
  164. package/fesm2022/masmarino-gabarit-sparkline.mjs +276 -0
  165. package/fesm2022/masmarino-gabarit-sparkline.mjs.map +1 -0
  166. package/fesm2022/masmarino-gabarit-spinner.mjs +86 -0
  167. package/fesm2022/masmarino-gabarit-spinner.mjs.map +1 -0
  168. package/fesm2022/masmarino-gabarit-stat-grid.mjs +139 -0
  169. package/fesm2022/masmarino-gabarit-stat-grid.mjs.map +1 -0
  170. package/fesm2022/masmarino-gabarit-stat-tile.mjs +312 -0
  171. package/fesm2022/masmarino-gabarit-stat-tile.mjs.map +1 -0
  172. package/fesm2022/masmarino-gabarit-stepper.mjs +219 -0
  173. package/fesm2022/masmarino-gabarit-stepper.mjs.map +1 -0
  174. package/fesm2022/masmarino-gabarit-switch.mjs +151 -0
  175. package/fesm2022/masmarino-gabarit-switch.mjs.map +1 -0
  176. package/fesm2022/masmarino-gabarit-table.mjs +206 -0
  177. package/fesm2022/masmarino-gabarit-table.mjs.map +1 -0
  178. package/fesm2022/masmarino-gabarit-tabs.mjs +210 -0
  179. package/fesm2022/masmarino-gabarit-tabs.mjs.map +1 -0
  180. package/fesm2022/masmarino-gabarit-tag-input.mjs +288 -0
  181. package/fesm2022/masmarino-gabarit-tag-input.mjs.map +1 -0
  182. package/fesm2022/masmarino-gabarit-tag.mjs +155 -0
  183. package/fesm2022/masmarino-gabarit-tag.mjs.map +1 -0
  184. package/fesm2022/masmarino-gabarit-textarea.mjs +369 -0
  185. package/fesm2022/masmarino-gabarit-textarea.mjs.map +1 -0
  186. package/fesm2022/masmarino-gabarit-timeline-chart.mjs +521 -0
  187. package/fesm2022/masmarino-gabarit-timeline-chart.mjs.map +1 -0
  188. package/fesm2022/masmarino-gabarit-toaster.mjs +220 -0
  189. package/fesm2022/masmarino-gabarit-toaster.mjs.map +1 -0
  190. package/fesm2022/masmarino-gabarit-tooltip.mjs +185 -0
  191. package/fesm2022/masmarino-gabarit-tooltip.mjs.map +1 -0
  192. package/fesm2022/masmarino-gabarit-tree.mjs +258 -0
  193. package/fesm2022/masmarino-gabarit-tree.mjs.map +1 -0
  194. package/fesm2022/masmarino-gabarit-user-chip.mjs +106 -0
  195. package/fesm2022/masmarino-gabarit-user-chip.mjs.map +1 -0
  196. package/fesm2022/masmarino-gabarit.mjs +83 -24785
  197. package/fesm2022/masmarino-gabarit.mjs.map +1 -1
  198. package/file-upload/README.md +47 -0
  199. package/funnel-chart/README.md +39 -0
  200. package/gauge-bar/README.md +35 -0
  201. package/git-field/README.md +34 -0
  202. package/icon/README.md +52 -0
  203. package/icon-marker/README.md +37 -0
  204. package/input/README.md +120 -0
  205. package/job-graph/README.md +76 -0
  206. package/job-status/README.md +34 -0
  207. package/line-chart/README.md +52 -0
  208. package/list-card/README.md +144 -0
  209. package/list-row/README.md +72 -0
  210. package/list-toolbar/README.md +52 -0
  211. package/menu/README.md +90 -0
  212. package/mfa-enrollment/README.md +189 -0
  213. package/mfa-settings/README.md +154 -0
  214. package/modal/README.md +72 -0
  215. package/nav-tabs/README.md +106 -0
  216. package/notification-dot/README.md +43 -0
  217. package/package.json +329 -1
  218. package/page-header/README.md +56 -0
  219. package/page-layout/README.md +76 -0
  220. package/pagination/README.md +73 -0
  221. package/panel/README.md +56 -0
  222. package/passkey-settings/README.md +120 -0
  223. package/pie-chart/README.md +85 -0
  224. package/popover/README.md +62 -0
  225. package/radio-group/README.md +47 -0
  226. package/save-status/README.md +44 -0
  227. package/search-bar/README.md +84 -0
  228. package/secret-reveal/README.md +60 -0
  229. package/segmented-control/README.md +79 -0
  230. package/select/README.md +61 -0
  231. package/skeleton/README.md +49 -0
  232. package/skeleton-list/README.md +40 -0
  233. package/slider/README.md +44 -0
  234. package/sparkline/README.md +37 -0
  235. package/spinner/README.md +41 -0
  236. package/stat-grid/README.md +47 -0
  237. package/stat-tile/README.md +75 -0
  238. package/stepper/README.md +67 -0
  239. package/switch/README.md +51 -0
  240. package/table/README.md +75 -0
  241. package/tabs/README.md +34 -0
  242. package/tag/README.md +34 -0
  243. package/tag-input/README.md +45 -0
  244. package/textarea/README.md +76 -0
  245. package/timeline-chart/README.md +49 -0
  246. package/toaster/README.md +92 -0
  247. package/tooltip/README.md +50 -0
  248. package/tree/README.md +79 -0
  249. package/types/masmarino-gabarit-accordion.d.ts +54 -0
  250. package/types/masmarino-gabarit-alert.d.ts +65 -0
  251. package/types/masmarino-gabarit-app-shell.d.ts +102 -0
  252. package/types/masmarino-gabarit-auth-activate.d.ts +70 -0
  253. package/types/masmarino-gabarit-auth-login.d.ts +63 -0
  254. package/types/masmarino-gabarit-auth-register.d.ts +66 -0
  255. package/types/masmarino-gabarit-auth-reset-password.d.ts +53 -0
  256. package/types/masmarino-gabarit-auth.d.ts +543 -0
  257. package/types/masmarino-gabarit-autocomplete.d.ts +140 -0
  258. package/types/masmarino-gabarit-avatar-group.d.ts +60 -0
  259. package/types/masmarino-gabarit-avatar.d.ts +31 -0
  260. package/types/masmarino-gabarit-badge.d.ts +139 -0
  261. package/types/masmarino-gabarit-bar-chart.d.ts +111 -0
  262. package/types/masmarino-gabarit-breadcrumb.d.ts +12 -0
  263. package/types/masmarino-gabarit-button.d.ts +108 -0
  264. package/types/masmarino-gabarit-card.d.ts +102 -0
  265. package/types/masmarino-gabarit-chart.d.ts +361 -0
  266. package/types/masmarino-gabarit-checkbox-group.d.ts +113 -0
  267. package/types/masmarino-gabarit-checkbox.d.ts +49 -0
  268. package/types/masmarino-gabarit-confirm-danger-modal.d.ts +94 -0
  269. package/types/masmarino-gabarit-copy-button.d.ts +111 -0
  270. package/types/masmarino-gabarit-copy-field.d.ts +64 -0
  271. package/types/masmarino-gabarit-date-picker.d.ts +399 -0
  272. package/types/masmarino-gabarit-description-list.d.ts +40 -0
  273. package/types/masmarino-gabarit-dimension-card.d.ts +55 -0
  274. package/types/masmarino-gabarit-disclosure.d.ts +44 -0
  275. package/types/masmarino-gabarit-divider.d.ts +20 -0
  276. package/types/masmarino-gabarit-docs.d.ts +2 -1
  277. package/types/masmarino-gabarit-drawer.d.ts +51 -0
  278. package/types/masmarino-gabarit-empty-state.d.ts +67 -0
  279. package/types/masmarino-gabarit-file-upload.d.ts +95 -0
  280. package/types/masmarino-gabarit-floating-panel.d.ts +14 -0
  281. package/types/masmarino-gabarit-format.d.ts +54 -0
  282. package/types/masmarino-gabarit-funnel-chart.d.ts +78 -0
  283. package/types/masmarino-gabarit-gauge-bar.d.ts +54 -0
  284. package/types/masmarino-gabarit-git-field.d.ts +39 -0
  285. package/types/masmarino-gabarit-icon-marker.d.ts +47 -0
  286. package/types/masmarino-gabarit-icon.d.ts +23 -0
  287. package/types/masmarino-gabarit-input.d.ts +181 -0
  288. package/types/masmarino-gabarit-job-graph.d.ts +63 -0
  289. package/types/masmarino-gabarit-job-status.d.ts +20 -0
  290. package/types/masmarino-gabarit-line-chart.d.ts +153 -0
  291. package/types/masmarino-gabarit-list-card.d.ts +87 -0
  292. package/types/masmarino-gabarit-list-row.d.ts +14 -0
  293. package/types/masmarino-gabarit-list-toolbar.d.ts +100 -0
  294. package/types/masmarino-gabarit-menu.d.ts +93 -0
  295. package/types/masmarino-gabarit-mfa-enrollment.d.ts +142 -0
  296. package/types/masmarino-gabarit-mfa-settings.d.ts +89 -0
  297. package/types/masmarino-gabarit-modal.d.ts +60 -0
  298. package/types/masmarino-gabarit-nav-tabs.d.ts +65 -0
  299. package/types/masmarino-gabarit-notification-dot.d.ts +34 -0
  300. package/types/masmarino-gabarit-page-header.d.ts +20 -0
  301. package/types/masmarino-gabarit-page-layout.d.ts +46 -0
  302. package/types/masmarino-gabarit-pagination.d.ts +109 -0
  303. package/types/masmarino-gabarit-panel.d.ts +21 -0
  304. package/types/masmarino-gabarit-passkey-settings.d.ts +94 -0
  305. package/types/masmarino-gabarit-pie-chart.d.ts +94 -0
  306. package/types/masmarino-gabarit-popover.d.ts +33 -0
  307. package/types/masmarino-gabarit-radio-group.d.ts +66 -0
  308. package/types/masmarino-gabarit-save-status.d.ts +39 -0
  309. package/types/masmarino-gabarit-search-bar.d.ts +183 -0
  310. package/types/masmarino-gabarit-secret-reveal.d.ts +95 -0
  311. package/types/masmarino-gabarit-segmented-control.d.ts +76 -0
  312. package/types/masmarino-gabarit-select.d.ts +146 -0
  313. package/types/masmarino-gabarit-skeleton-list.d.ts +54 -0
  314. package/types/masmarino-gabarit-skeleton.d.ts +26 -0
  315. package/types/masmarino-gabarit-slider.d.ts +73 -0
  316. package/types/masmarino-gabarit-sparkline.d.ts +70 -0
  317. package/types/masmarino-gabarit-spinner.d.ts +20 -0
  318. package/types/masmarino-gabarit-stat-grid.d.ts +39 -0
  319. package/types/masmarino-gabarit-stat-tile.d.ts +79 -0
  320. package/types/masmarino-gabarit-stepper.d.ts +67 -0
  321. package/types/masmarino-gabarit-switch.d.ts +42 -0
  322. package/types/masmarino-gabarit-table.d.ts +60 -0
  323. package/types/masmarino-gabarit-tabs.d.ts +40 -0
  324. package/types/masmarino-gabarit-tag-input.d.ts +78 -0
  325. package/types/masmarino-gabarit-tag.d.ts +35 -0
  326. package/types/masmarino-gabarit-textarea.d.ts +109 -0
  327. package/types/masmarino-gabarit-timeline-chart.d.ts +145 -0
  328. package/types/masmarino-gabarit-toaster.d.ts +62 -0
  329. package/types/masmarino-gabarit-tooltip.d.ts +39 -0
  330. package/types/masmarino-gabarit-tree.d.ts +71 -0
  331. package/types/masmarino-gabarit-user-chip.d.ts +26 -0
  332. package/types/masmarino-gabarit.d.ts +83 -6599
  333. package/user-chip/README.md +42 -0
@@ -0,0 +1,407 @@
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, DestroyRef, booleanAttribute, computed, effect, inject, input, output, signal, untracked } from "@angular/core";
3
+ import { Button } from "@masmarino/gabarit/button";
4
+ async function copyToClipboard(text) {
5
+ try {
6
+ if (typeof navigator !== "undefined" && typeof navigator.clipboard?.writeText === "function") {
7
+ await navigator.clipboard.writeText(text);
8
+ return true;
9
+ }
10
+ } catch {}
11
+ return legacyCopy(text);
12
+ }
13
+ function legacyCopy(text) {
14
+ if (typeof document === "undefined" || typeof document.execCommand !== "function") return false;
15
+ const active = document.activeElement instanceof HTMLElement ? document.activeElement : null;
16
+ const selection = document.getSelection();
17
+ const savedRange = selection && selection.rangeCount > 0 ? selection.getRangeAt(0).cloneRange() : null;
18
+ const area = document.createElement("textarea");
19
+ area.value = text;
20
+ area.readOnly = true;
21
+ area.tabIndex = -1;
22
+ area.setAttribute("aria-hidden", "true");
23
+ area.style.cssText = "position:fixed;top:0;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none;";
24
+ (active?.closest("dialog, [role=\"dialog\"]") ?? document.body).appendChild(area);
25
+ let copied;
26
+ try {
27
+ area.focus({ preventScroll: true });
28
+ area.select();
29
+ area.setSelectionRange(0, text.length);
30
+ copied = document.execCommand("copy");
31
+ } catch {
32
+ copied = false;
33
+ } finally {
34
+ area.remove();
35
+ active?.focus({ preventScroll: true });
36
+ if (selection && savedRange) {
37
+ selection.removeAllRanges();
38
+ selection.addRange(savedRange);
39
+ }
40
+ }
41
+ return copied;
42
+ }
43
+ function selectContents(element) {
44
+ const selection = typeof window === "undefined" ? null : window.getSelection();
45
+ if (!element || !selection) return;
46
+ const range = document.createRange();
47
+ range.selectNodeContents(element);
48
+ selection.removeAllRanges();
49
+ selection.addRange(range);
50
+ }
51
+ var ClipboardFeedback = class {
52
+ status = signal("idle", ...ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []);
53
+ timer = null;
54
+ destroyed = false;
55
+ constructor() {
56
+ inject(DestroyRef).onDestroy(() => {
57
+ this.destroyed = true;
58
+ this.clearTimer();
59
+ });
60
+ }
61
+ async copy(value, feedbackMs, selectTarget) {
62
+ let text = "";
63
+ let copied;
64
+ try {
65
+ text = typeof value === "function" ? value() : value;
66
+ copied = await copyToClipboard(text);
67
+ } catch {
68
+ copied = false;
69
+ }
70
+ if (this.destroyed) return null;
71
+ if (!copied) selectContents(selectTarget);
72
+ this.show(copied ? "copied" : "failed", copied ? feedbackMs : feedbackMs * 2);
73
+ return {
74
+ copied,
75
+ text
76
+ };
77
+ }
78
+ reset() {
79
+ this.clearTimer();
80
+ this.status.set("idle");
81
+ }
82
+ show(status, durationMs) {
83
+ this.clearTimer();
84
+ this.status.set(status);
85
+ this.timer = setTimeout(() => {
86
+ this.timer = null;
87
+ this.status.set("idle");
88
+ }, durationMs);
89
+ }
90
+ clearTimer() {
91
+ if (this.timer !== null) {
92
+ clearTimeout(this.timer);
93
+ this.timer = null;
94
+ }
95
+ }
96
+ };
97
+ var CopyButton = class CopyButton {
98
+ value = input("", ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
99
+ text = input("", ...ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []);
100
+ ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
101
+ copiedText = input("Copied", ...ngDevMode ? [{ debugName: "copiedText" }] : /* istanbul ignore next */ []);
102
+ failedText = input("Copy failed", ...ngDevMode ? [{ debugName: "failedText" }] : /* istanbul ignore next */ []);
103
+ feedbackMs = input(2e3, ...ngDevMode ? [{ debugName: "feedbackMs" }] : /* istanbul ignore next */ []);
104
+ variant = input("secondary", ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
105
+ size = input("small", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
106
+ icon = input("copy", ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
107
+ disabled = input(false, {
108
+ ...ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {},
109
+ transform: booleanAttribute
110
+ });
111
+ feedback = input("bubble", ...ngDevMode ? [{ debugName: "feedback" }] : /* istanbul ignore next */ []);
112
+ selectTarget = input(null, ...ngDevMode ? [{ debugName: "selectTarget" }] : /* istanbul ignore next */ []);
113
+ copied = output();
114
+ copyFailed = output();
115
+ clipboard = new ClipboardFeedback();
116
+ constructor() {
117
+ effect(() => {
118
+ if (typeof this.value() === "string") untracked(() => this.clipboard.reset());
119
+ });
120
+ }
121
+ reset() {
122
+ this.clipboard.reset();
123
+ }
124
+ glyph = computed(() => {
125
+ switch (this.clipboard.status()) {
126
+ case "copied": return "check";
127
+ case "failed": return "alert-circle";
128
+ default: return this.icon();
129
+ }
130
+ }, ...ngDevMode ? [{ debugName: "glyph" }] : /* istanbul ignore next */ []);
131
+ statusText = computed(() => {
132
+ switch (this.clipboard.status()) {
133
+ case "copied": return this.copiedText();
134
+ case "failed": return this.failedText();
135
+ default: return "";
136
+ }
137
+ }, ...ngDevMode ? [{ debugName: "statusText" }] : /* istanbul ignore next */ []);
138
+ name = computed(() => this.ariaLabel() ?? (this.text() ? null : "Copy"), ...ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []);
139
+ async copy() {
140
+ if (this.disabled()) return;
141
+ const outcome = await this.clipboard.copy(this.value(), this.feedbackMs(), this.selectTarget());
142
+ if (!outcome) return;
143
+ if (outcome.copied) this.copied.emit(outcome.text);
144
+ else this.copyFailed.emit();
145
+ }
146
+ static ɵfac = i0.ɵɵngDeclareFactory({
147
+ minVersion: "12.0.0",
148
+ version: "22.2.0",
149
+ ngImport: i0,
150
+ type: CopyButton,
151
+ deps: [],
152
+ target: i0.ɵɵFactoryTarget.Component
153
+ });
154
+ static ɵcmp = i0.ɵɵngDeclareComponent({
155
+ minVersion: "17.1.0",
156
+ version: "22.2.0",
157
+ type: CopyButton,
158
+ isStandalone: true,
159
+ selector: "gbt-copy-button",
160
+ inputs: {
161
+ value: {
162
+ classPropertyName: "value",
163
+ publicName: "value",
164
+ isSignal: true,
165
+ isRequired: false,
166
+ transformFunction: null
167
+ },
168
+ text: {
169
+ classPropertyName: "text",
170
+ publicName: "text",
171
+ isSignal: true,
172
+ isRequired: false,
173
+ transformFunction: null
174
+ },
175
+ ariaLabel: {
176
+ classPropertyName: "ariaLabel",
177
+ publicName: "ariaLabel",
178
+ isSignal: true,
179
+ isRequired: false,
180
+ transformFunction: null
181
+ },
182
+ copiedText: {
183
+ classPropertyName: "copiedText",
184
+ publicName: "copiedText",
185
+ isSignal: true,
186
+ isRequired: false,
187
+ transformFunction: null
188
+ },
189
+ failedText: {
190
+ classPropertyName: "failedText",
191
+ publicName: "failedText",
192
+ isSignal: true,
193
+ isRequired: false,
194
+ transformFunction: null
195
+ },
196
+ feedbackMs: {
197
+ classPropertyName: "feedbackMs",
198
+ publicName: "feedbackMs",
199
+ isSignal: true,
200
+ isRequired: false,
201
+ transformFunction: null
202
+ },
203
+ variant: {
204
+ classPropertyName: "variant",
205
+ publicName: "variant",
206
+ isSignal: true,
207
+ isRequired: false,
208
+ transformFunction: null
209
+ },
210
+ size: {
211
+ classPropertyName: "size",
212
+ publicName: "size",
213
+ isSignal: true,
214
+ isRequired: false,
215
+ transformFunction: null
216
+ },
217
+ icon: {
218
+ classPropertyName: "icon",
219
+ publicName: "icon",
220
+ isSignal: true,
221
+ isRequired: false,
222
+ transformFunction: null
223
+ },
224
+ disabled: {
225
+ classPropertyName: "disabled",
226
+ publicName: "disabled",
227
+ isSignal: true,
228
+ isRequired: false,
229
+ transformFunction: null
230
+ },
231
+ feedback: {
232
+ classPropertyName: "feedback",
233
+ publicName: "feedback",
234
+ isSignal: true,
235
+ isRequired: false,
236
+ transformFunction: null
237
+ },
238
+ selectTarget: {
239
+ classPropertyName: "selectTarget",
240
+ publicName: "selectTarget",
241
+ isSignal: true,
242
+ isRequired: false,
243
+ transformFunction: null
244
+ }
245
+ },
246
+ outputs: {
247
+ copied: "copied",
248
+ copyFailed: "copyFailed"
249
+ },
250
+ host: { properties: { "attr.data-status": "clipboard.status()" } },
251
+ ngImport: i0,
252
+ template: "<gbt-button\n class=\"gbt-copy-button__button\"\n [variant]=\"variant()\"\n [size]=\"size()\"\n [iconName]=\"glyph()\"\n [iconOnly]=\"!text()\"\n [text]=\"text()\"\n [ariaLabel]=\"name()\"\n [disabled]=\"disabled()\"\n (clicked)=\"copy()\"\n/>\n<span\n class=\"gbt-copy-button__status\"\n role=\"status\"\n aria-live=\"polite\"\n [attr.data-status]=\"clipboard.status()\"\n [attr.data-feedback]=\"feedback()\"\n >{{ statusText() }}</span\n>\n",
253
+ styles: [":host{position:relative;display:inline-flex;align-items:center;vertical-align:middle}.gbt-copy-button__status{padding:.125rem .5rem;border:1px solid color-mix(in srgb,var(--color-success-text) 45%,transparent);border-radius:999px;background:var(--color-success-bg);color:var(--color-success-bg-text);font-size:.75rem;font-weight:600;line-height:1.125rem;white-space:nowrap}.gbt-copy-button__status[data-status=failed]{border-color:color-mix(in srgb,var(--color-error-text) 45%,transparent);background:var(--color-error-bg);color:var(--color-error-bg-text)}.gbt-copy-button__status[data-status=idle]{padding:0;border:0;box-shadow:none}.gbt-copy-button__status[data-feedback=bubble]{position:absolute;right:0;bottom:calc(100% + 6px);z-index:1;box-shadow:var(--site-shadow-sm);pointer-events:none}.gbt-copy-button__status[data-feedback=inline]{margin-inline-start:.5rem;white-space:normal}.gbt-copy-button__status[data-feedback=inline][data-status=idle]{margin:0}.gbt-copy-button__status[data-feedback=hidden]{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}@media(prefers-reduced-motion:no-preference){.gbt-copy-button__status[data-feedback=bubble]:not([data-status=idle]){animation:gbt-copy-button-in .15s ease-out}}@keyframes gbt-copy-button-in{0%{opacity:0;transform:translateY(2px)}}\n"],
254
+ dependencies: [{
255
+ kind: "component",
256
+ type: Button,
257
+ selector: "gbt-button, a[gbtButton]",
258
+ inputs: [
259
+ "variant",
260
+ "size",
261
+ "type",
262
+ "text",
263
+ "iconName",
264
+ "ariaLabel",
265
+ "loading",
266
+ "loadingLabel",
267
+ "disabled",
268
+ "pressed",
269
+ "ariaExpanded",
270
+ "ariaControls",
271
+ "ariaHaspopup",
272
+ "block",
273
+ "iconOnly"
274
+ ],
275
+ outputs: ["clicked"]
276
+ }],
277
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
278
+ });
279
+ };
280
+ i0.ɵɵngDeclareClassMetadata({
281
+ minVersion: "12.0.0",
282
+ version: "22.2.0",
283
+ ngImport: i0,
284
+ type: CopyButton,
285
+ decorators: [{
286
+ type: Component,
287
+ args: [{
288
+ selector: "gbt-copy-button",
289
+ standalone: true,
290
+ imports: [Button],
291
+ changeDetection: ChangeDetectionStrategy.OnPush,
292
+ host: { "[attr.data-status]": "clipboard.status()" },
293
+ template: "<gbt-button\n class=\"gbt-copy-button__button\"\n [variant]=\"variant()\"\n [size]=\"size()\"\n [iconName]=\"glyph()\"\n [iconOnly]=\"!text()\"\n [text]=\"text()\"\n [ariaLabel]=\"name()\"\n [disabled]=\"disabled()\"\n (clicked)=\"copy()\"\n/>\n<span\n class=\"gbt-copy-button__status\"\n role=\"status\"\n aria-live=\"polite\"\n [attr.data-status]=\"clipboard.status()\"\n [attr.data-feedback]=\"feedback()\"\n >{{ statusText() }}</span\n>\n",
294
+ styles: [":host{position:relative;display:inline-flex;align-items:center;vertical-align:middle}.gbt-copy-button__status{padding:.125rem .5rem;border:1px solid color-mix(in srgb,var(--color-success-text) 45%,transparent);border-radius:999px;background:var(--color-success-bg);color:var(--color-success-bg-text);font-size:.75rem;font-weight:600;line-height:1.125rem;white-space:nowrap}.gbt-copy-button__status[data-status=failed]{border-color:color-mix(in srgb,var(--color-error-text) 45%,transparent);background:var(--color-error-bg);color:var(--color-error-bg-text)}.gbt-copy-button__status[data-status=idle]{padding:0;border:0;box-shadow:none}.gbt-copy-button__status[data-feedback=bubble]{position:absolute;right:0;bottom:calc(100% + 6px);z-index:1;box-shadow:var(--site-shadow-sm);pointer-events:none}.gbt-copy-button__status[data-feedback=inline]{margin-inline-start:.5rem;white-space:normal}.gbt-copy-button__status[data-feedback=inline][data-status=idle]{margin:0}.gbt-copy-button__status[data-feedback=hidden]{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}@media(prefers-reduced-motion:no-preference){.gbt-copy-button__status[data-feedback=bubble]:not([data-status=idle]){animation:gbt-copy-button-in .15s ease-out}}@keyframes gbt-copy-button-in{0%{opacity:0;transform:translateY(2px)}}\n"]
295
+ }]
296
+ }],
297
+ ctorParameters: () => [],
298
+ propDecorators: {
299
+ value: [{
300
+ type: i0.Input,
301
+ args: [{
302
+ isSignal: true,
303
+ alias: "value",
304
+ required: false
305
+ }]
306
+ }],
307
+ text: [{
308
+ type: i0.Input,
309
+ args: [{
310
+ isSignal: true,
311
+ alias: "text",
312
+ required: false
313
+ }]
314
+ }],
315
+ ariaLabel: [{
316
+ type: i0.Input,
317
+ args: [{
318
+ isSignal: true,
319
+ alias: "ariaLabel",
320
+ required: false
321
+ }]
322
+ }],
323
+ copiedText: [{
324
+ type: i0.Input,
325
+ args: [{
326
+ isSignal: true,
327
+ alias: "copiedText",
328
+ required: false
329
+ }]
330
+ }],
331
+ failedText: [{
332
+ type: i0.Input,
333
+ args: [{
334
+ isSignal: true,
335
+ alias: "failedText",
336
+ required: false
337
+ }]
338
+ }],
339
+ feedbackMs: [{
340
+ type: i0.Input,
341
+ args: [{
342
+ isSignal: true,
343
+ alias: "feedbackMs",
344
+ required: false
345
+ }]
346
+ }],
347
+ variant: [{
348
+ type: i0.Input,
349
+ args: [{
350
+ isSignal: true,
351
+ alias: "variant",
352
+ required: false
353
+ }]
354
+ }],
355
+ size: [{
356
+ type: i0.Input,
357
+ args: [{
358
+ isSignal: true,
359
+ alias: "size",
360
+ required: false
361
+ }]
362
+ }],
363
+ icon: [{
364
+ type: i0.Input,
365
+ args: [{
366
+ isSignal: true,
367
+ alias: "icon",
368
+ required: false
369
+ }]
370
+ }],
371
+ disabled: [{
372
+ type: i0.Input,
373
+ args: [{
374
+ isSignal: true,
375
+ alias: "disabled",
376
+ required: false
377
+ }]
378
+ }],
379
+ feedback: [{
380
+ type: i0.Input,
381
+ args: [{
382
+ isSignal: true,
383
+ alias: "feedback",
384
+ required: false
385
+ }]
386
+ }],
387
+ selectTarget: [{
388
+ type: i0.Input,
389
+ args: [{
390
+ isSignal: true,
391
+ alias: "selectTarget",
392
+ required: false
393
+ }]
394
+ }],
395
+ copied: [{
396
+ type: i0.Output,
397
+ args: ["copied"]
398
+ }],
399
+ copyFailed: [{
400
+ type: i0.Output,
401
+ args: ["copyFailed"]
402
+ }]
403
+ }
404
+ });
405
+ export { ClipboardFeedback, CopyButton, copyToClipboard, selectContents };
406
+
407
+ //# sourceMappingURL=masmarino-gabarit-copy-button.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masmarino-gabarit-copy-button.mjs","names":[],"sources":["../../../projects/gabarit/copy-button/clipboard.ts","../../../projects/gabarit/copy-button/copy-button.ts","../../../projects/gabarit/copy-button/copy-button.html"],"sourcesContent":["import { DestroyRef, inject, signal } from '@angular/core'\n\nexport type CopyStatus = 'idle' | 'copied' | 'failed'\n\nexport type CopyValue = string | (() => string)\n\nexport async function copyToClipboard(text: string): Promise<boolean> {\n try {\n if (typeof navigator !== 'undefined' && typeof navigator.clipboard?.writeText === 'function') {\n await navigator.clipboard.writeText(text)\n return true\n }\n } catch {\n // Refused (permissions, focus, insecure context): try the legacy path below.\n }\n return legacyCopy(text)\n}\n\nfunction legacyCopy(text: string): boolean {\n if (typeof document === 'undefined' || typeof document.execCommand !== 'function') {\n return false\n }\n const active = document.activeElement instanceof HTMLElement ? document.activeElement : null\n const selection = document.getSelection()\n const savedRange =\n selection && selection.rangeCount > 0 ? selection.getRangeAt(0).cloneRange() : null\n\n const area = document.createElement('textarea')\n area.value = text\n area.readOnly = true\n area.tabIndex = -1\n area.setAttribute('aria-hidden', 'true')\n area.style.cssText =\n 'position:fixed;top:0;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none;'\n const host = active?.closest('dialog, [role=\"dialog\"]') ?? document.body\n host.appendChild(area)\n\n let copied: boolean\n try {\n area.focus({ preventScroll: true })\n area.select()\n area.setSelectionRange(0, text.length)\n copied = document.execCommand('copy')\n } catch {\n copied = false\n } finally {\n area.remove()\n active?.focus({ preventScroll: true })\n if (selection && savedRange) {\n selection.removeAllRanges()\n selection.addRange(savedRange)\n }\n }\n return copied\n}\n\nexport function selectContents(element: HTMLElement | null | undefined): void {\n const selection = typeof window === 'undefined' ? null : window.getSelection()\n if (!element || !selection) {\n return\n }\n const range = document.createRange()\n range.selectNodeContents(element)\n selection.removeAllRanges()\n selection.addRange(range)\n}\n\nexport interface CopyOutcome {\n copied: boolean\n text: string\n}\n\nexport class ClipboardFeedback {\n readonly status = signal<CopyStatus>('idle')\n\n private timer: ReturnType<typeof setTimeout> | null = null\n private destroyed = false\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n this.destroyed = true\n this.clearTimer()\n })\n }\n\n async copy(\n value: CopyValue,\n feedbackMs: number,\n selectTarget?: HTMLElement | null,\n ): Promise<CopyOutcome | null> {\n let text = ''\n let copied: boolean\n try {\n text = typeof value === 'function' ? value() : value\n copied = await copyToClipboard(text)\n } catch {\n copied = false\n }\n if (this.destroyed) {\n return null\n }\n if (!copied) {\n selectContents(selectTarget)\n }\n this.show(copied ? 'copied' : 'failed', copied ? feedbackMs : feedbackMs * 2)\n return { copied, text }\n }\n\n reset(): void {\n this.clearTimer()\n this.status.set('idle')\n }\n\n private show(status: CopyStatus, durationMs: number): void {\n this.clearTimer()\n this.status.set(status)\n this.timer = setTimeout(() => {\n this.timer = null\n this.status.set('idle')\n }, durationMs)\n }\n\n private clearTimer(): void {\n if (this.timer !== null) {\n clearTimeout(this.timer)\n this.timer = null\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n effect,\n input,\n output,\n untracked,\n} from '@angular/core'\nimport { Button, ButtonSize, ButtonVariant } from '@masmarino/gabarit/button'\nimport { ClipboardFeedback, CopyValue } from './clipboard'\n\nexport type CopyButtonFeedback = 'bubble' | 'inline' | 'hidden'\n\nexport type { CopyValue } from './clipboard'\n\n@Component({\n selector: 'gbt-copy-button',\n standalone: true,\n imports: [Button],\n templateUrl: './copy-button.html',\n styleUrl: './copy-button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.data-status]': 'clipboard.status()',\n },\n})\nexport class CopyButton {\n value = input<CopyValue>('')\n text = input('')\n ariaLabel = input<string | null>(null)\n copiedText = input('Copied')\n failedText = input('Copy failed')\n feedbackMs = input(2000)\n variant = input<ButtonVariant>('secondary')\n size = input<ButtonSize>('small')\n icon = input('copy')\n disabled = input(false, { transform: booleanAttribute })\n feedback = input<CopyButtonFeedback>('bubble')\n selectTarget = input<HTMLElement | null>(null)\n\n copied = output<string>()\n copyFailed = output<void>()\n\n protected readonly clipboard = new ClipboardFeedback()\n\n constructor() {\n effect(() => {\n const value = this.value()\n if (typeof value === 'string') {\n untracked(() => this.clipboard.reset())\n }\n })\n }\n\n reset(): void {\n this.clipboard.reset()\n }\n\n protected readonly glyph = computed(() => {\n switch (this.clipboard.status()) {\n case 'copied':\n return 'check'\n case 'failed':\n return 'alert-circle'\n default:\n return this.icon()\n }\n })\n\n protected readonly statusText = computed(() => {\n switch (this.clipboard.status()) {\n case 'copied':\n return this.copiedText()\n case 'failed':\n return this.failedText()\n default:\n return ''\n }\n })\n\n protected readonly name = computed(() => this.ariaLabel() ?? (this.text() ? null : 'Copy'))\n\n protected async copy(): Promise<void> {\n if (this.disabled()) {\n return\n }\n const outcome = await this.clipboard.copy(this.value(), this.feedbackMs(), this.selectTarget())\n if (!outcome) {\n return\n }\n if (outcome.copied) {\n this.copied.emit(outcome.text)\n } else {\n this.copyFailed.emit()\n }\n }\n}\n","<gbt-button\n class=\"gbt-copy-button__button\"\n [variant]=\"variant()\"\n [size]=\"size()\"\n [iconName]=\"glyph()\"\n [iconOnly]=\"!text()\"\n [text]=\"text()\"\n [ariaLabel]=\"name()\"\n [disabled]=\"disabled()\"\n (clicked)=\"copy()\"\n/>\n<span\n class=\"gbt-copy-button__status\"\n role=\"status\"\n aria-live=\"polite\"\n [attr.data-status]=\"clipboard.status()\"\n [attr.data-feedback]=\"feedback()\"\n >{{ statusText() }}</span\n>\n"],"mappings":"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"}
@@ -0,0 +1,229 @@
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, computed, input, output } from "@angular/core";
3
+ import { CopyButton } from "@masmarino/gabarit/copy-button";
4
+ const COPY_FIELD_WRAP_AT = /(?<=[^/:]\/)/;
5
+ let nextCopyFieldId = 0;
6
+ var CopyField = class CopyField {
7
+ value = input.required(...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
8
+ label = input(null, ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
9
+ copyLabel = input("Copy", ...ngDevMode ? [{ debugName: "copyLabel" }] : /* istanbul ignore next */ []);
10
+ copiedText = input("Copied", ...ngDevMode ? [{ debugName: "copiedText" }] : /* istanbul ignore next */ []);
11
+ failedText = input("Copy failed, value selected", ...ngDevMode ? [{ debugName: "failedText" }] : /* istanbul ignore next */ []);
12
+ feedbackMs = input(2e3, ...ngDevMode ? [{ debugName: "feedbackMs" }] : /* istanbul ignore next */ []);
13
+ feedback = input("bubble", ...ngDevMode ? [{ debugName: "feedback" }] : /* istanbul ignore next */ []);
14
+ wrapAt = input(COPY_FIELD_WRAP_AT, ...ngDevMode ? [{ debugName: "wrapAt" }] : /* istanbul ignore next */ []);
15
+ copied = output();
16
+ copyFailed = output();
17
+ labelId = `gbt-copy-field-label-${++nextCopyFieldId}`;
18
+ segments = computed(() => this.cut(this.value(), this.wrapAt()), ...ngDevMode ? [{ debugName: "segments" }] : /* istanbul ignore next */ []);
19
+ cut(value, pattern) {
20
+ if (!pattern) return [value];
21
+ const flags = pattern.flags.includes("g") ? pattern.flags : `${pattern.flags}g`;
22
+ const segments = [];
23
+ let start = 0;
24
+ for (const match of value.matchAll(new RegExp(pattern.source, flags))) {
25
+ const end = match.index + match[0].length;
26
+ if (end > start && end < value.length) {
27
+ segments.push(value.slice(start, end));
28
+ start = end;
29
+ }
30
+ }
31
+ segments.push(value.slice(start));
32
+ return segments;
33
+ }
34
+ static ɵfac = i0.ɵɵngDeclareFactory({
35
+ minVersion: "12.0.0",
36
+ version: "22.2.0",
37
+ ngImport: i0,
38
+ type: CopyField,
39
+ deps: [],
40
+ target: i0.ɵɵFactoryTarget.Component
41
+ });
42
+ static ɵcmp = i0.ɵɵngDeclareComponent({
43
+ minVersion: "17.0.0",
44
+ version: "22.2.0",
45
+ type: CopyField,
46
+ isStandalone: true,
47
+ selector: "gbt-copy-field",
48
+ inputs: {
49
+ value: {
50
+ classPropertyName: "value",
51
+ publicName: "value",
52
+ isSignal: true,
53
+ isRequired: true,
54
+ transformFunction: null
55
+ },
56
+ label: {
57
+ classPropertyName: "label",
58
+ publicName: "label",
59
+ isSignal: true,
60
+ isRequired: false,
61
+ transformFunction: null
62
+ },
63
+ copyLabel: {
64
+ classPropertyName: "copyLabel",
65
+ publicName: "copyLabel",
66
+ isSignal: true,
67
+ isRequired: false,
68
+ transformFunction: null
69
+ },
70
+ copiedText: {
71
+ classPropertyName: "copiedText",
72
+ publicName: "copiedText",
73
+ isSignal: true,
74
+ isRequired: false,
75
+ transformFunction: null
76
+ },
77
+ failedText: {
78
+ classPropertyName: "failedText",
79
+ publicName: "failedText",
80
+ isSignal: true,
81
+ isRequired: false,
82
+ transformFunction: null
83
+ },
84
+ feedbackMs: {
85
+ classPropertyName: "feedbackMs",
86
+ publicName: "feedbackMs",
87
+ isSignal: true,
88
+ isRequired: false,
89
+ transformFunction: null
90
+ },
91
+ feedback: {
92
+ classPropertyName: "feedback",
93
+ publicName: "feedback",
94
+ isSignal: true,
95
+ isRequired: false,
96
+ transformFunction: null
97
+ },
98
+ wrapAt: {
99
+ classPropertyName: "wrapAt",
100
+ publicName: "wrapAt",
101
+ isSignal: true,
102
+ isRequired: false,
103
+ transformFunction: null
104
+ }
105
+ },
106
+ outputs: {
107
+ copied: "copied",
108
+ copyFailed: "copyFailed"
109
+ },
110
+ ngImport: i0,
111
+ template: "@if (label(); as text) {\n <span class=\"gbt-copy-field__label\" [id]=\"labelId\">{{ text }}</span>\n}\n<div\n class=\"gbt-copy-field__box\"\n [attr.role]=\"label() ? 'group' : null\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n>\n <!-- prettier-ignore -->\n <code #code class=\"gbt-copy-field__value\">@for (segment of segments(); track $index) {{{ segment }}<wbr />}</code>\n <gbt-copy-button\n class=\"gbt-copy-field__copy\"\n [value]=\"value()\"\n [ariaLabel]=\"copyLabel()\"\n [copiedText]=\"copiedText()\"\n [failedText]=\"failedText()\"\n [feedbackMs]=\"feedbackMs()\"\n [feedback]=\"feedback()\"\n [selectTarget]=\"code\"\n (copied)=\"copied.emit($event)\"\n (copyFailed)=\"copyFailed.emit()\"\n />\n</div>\n",
112
+ styles: [":host{display:block}.gbt-copy-field__label{display:block;margin-bottom:.25rem;color:var(--text-secondary);font-size:.8125rem;font-weight:600;line-height:1.25rem}.gbt-copy-field__box{display:flex;align-items:flex-start;gap:.375rem}.gbt-copy-field__value{flex:1 1 auto;min-width:0;box-sizing:border-box;min-height:var(--gbt-control-height-sm);padding:.375rem .625rem;border:1px solid var(--gbt-card-border);border-radius:var(--site-border-radius-sm);background:var(--bg-principal);color:var(--text-primary);font-family:var(--gbt-font-mono);font-size:.75rem;line-height:1.125rem;overflow-wrap:anywhere;-webkit-user-select:all;user-select:all}.gbt-copy-field__copy{flex:none}\n"],
113
+ dependencies: [{
114
+ kind: "component",
115
+ type: CopyButton,
116
+ selector: "gbt-copy-button",
117
+ inputs: [
118
+ "value",
119
+ "text",
120
+ "ariaLabel",
121
+ "copiedText",
122
+ "failedText",
123
+ "feedbackMs",
124
+ "variant",
125
+ "size",
126
+ "icon",
127
+ "disabled",
128
+ "feedback",
129
+ "selectTarget"
130
+ ],
131
+ outputs: ["copied", "copyFailed"]
132
+ }],
133
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
134
+ });
135
+ };
136
+ i0.ɵɵngDeclareClassMetadata({
137
+ minVersion: "12.0.0",
138
+ version: "22.2.0",
139
+ ngImport: i0,
140
+ type: CopyField,
141
+ decorators: [{
142
+ type: Component,
143
+ args: [{
144
+ selector: "gbt-copy-field",
145
+ standalone: true,
146
+ imports: [CopyButton],
147
+ changeDetection: ChangeDetectionStrategy.OnPush,
148
+ template: "@if (label(); as text) {\n <span class=\"gbt-copy-field__label\" [id]=\"labelId\">{{ text }}</span>\n}\n<div\n class=\"gbt-copy-field__box\"\n [attr.role]=\"label() ? 'group' : null\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n>\n <!-- prettier-ignore -->\n <code #code class=\"gbt-copy-field__value\">@for (segment of segments(); track $index) {{{ segment }}<wbr />}</code>\n <gbt-copy-button\n class=\"gbt-copy-field__copy\"\n [value]=\"value()\"\n [ariaLabel]=\"copyLabel()\"\n [copiedText]=\"copiedText()\"\n [failedText]=\"failedText()\"\n [feedbackMs]=\"feedbackMs()\"\n [feedback]=\"feedback()\"\n [selectTarget]=\"code\"\n (copied)=\"copied.emit($event)\"\n (copyFailed)=\"copyFailed.emit()\"\n />\n</div>\n",
149
+ styles: [":host{display:block}.gbt-copy-field__label{display:block;margin-bottom:.25rem;color:var(--text-secondary);font-size:.8125rem;font-weight:600;line-height:1.25rem}.gbt-copy-field__box{display:flex;align-items:flex-start;gap:.375rem}.gbt-copy-field__value{flex:1 1 auto;min-width:0;box-sizing:border-box;min-height:var(--gbt-control-height-sm);padding:.375rem .625rem;border:1px solid var(--gbt-card-border);border-radius:var(--site-border-radius-sm);background:var(--bg-principal);color:var(--text-primary);font-family:var(--gbt-font-mono);font-size:.75rem;line-height:1.125rem;overflow-wrap:anywhere;-webkit-user-select:all;user-select:all}.gbt-copy-field__copy{flex:none}\n"]
150
+ }]
151
+ }],
152
+ propDecorators: {
153
+ value: [{
154
+ type: i0.Input,
155
+ args: [{
156
+ isSignal: true,
157
+ alias: "value",
158
+ required: true
159
+ }]
160
+ }],
161
+ label: [{
162
+ type: i0.Input,
163
+ args: [{
164
+ isSignal: true,
165
+ alias: "label",
166
+ required: false
167
+ }]
168
+ }],
169
+ copyLabel: [{
170
+ type: i0.Input,
171
+ args: [{
172
+ isSignal: true,
173
+ alias: "copyLabel",
174
+ required: false
175
+ }]
176
+ }],
177
+ copiedText: [{
178
+ type: i0.Input,
179
+ args: [{
180
+ isSignal: true,
181
+ alias: "copiedText",
182
+ required: false
183
+ }]
184
+ }],
185
+ failedText: [{
186
+ type: i0.Input,
187
+ args: [{
188
+ isSignal: true,
189
+ alias: "failedText",
190
+ required: false
191
+ }]
192
+ }],
193
+ feedbackMs: [{
194
+ type: i0.Input,
195
+ args: [{
196
+ isSignal: true,
197
+ alias: "feedbackMs",
198
+ required: false
199
+ }]
200
+ }],
201
+ feedback: [{
202
+ type: i0.Input,
203
+ args: [{
204
+ isSignal: true,
205
+ alias: "feedback",
206
+ required: false
207
+ }]
208
+ }],
209
+ wrapAt: [{
210
+ type: i0.Input,
211
+ args: [{
212
+ isSignal: true,
213
+ alias: "wrapAt",
214
+ required: false
215
+ }]
216
+ }],
217
+ copied: [{
218
+ type: i0.Output,
219
+ args: ["copied"]
220
+ }],
221
+ copyFailed: [{
222
+ type: i0.Output,
223
+ args: ["copyFailed"]
224
+ }]
225
+ }
226
+ });
227
+ export { COPY_FIELD_WRAP_AT, CopyField };
228
+
229
+ //# sourceMappingURL=masmarino-gabarit-copy-field.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masmarino-gabarit-copy-field.mjs","names":[],"sources":["../../../projects/gabarit/copy-field/copy-field.ts","../../../projects/gabarit/copy-field/copy-field.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core'\nimport { CopyButton, CopyButtonFeedback } from '@masmarino/gabarit/copy-button'\n\nexport const COPY_FIELD_WRAP_AT = /(?<=[^/:]\\/)/\n\nlet nextCopyFieldId = 0\n\n@Component({\n selector: 'gbt-copy-field',\n standalone: true,\n imports: [CopyButton],\n templateUrl: './copy-field.html',\n styleUrl: './copy-field.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CopyField {\n value = input.required<string>()\n label = input<string | null>(null)\n copyLabel = input('Copy')\n copiedText = input('Copied')\n failedText = input('Copy failed, value selected')\n feedbackMs = input(2000)\n feedback = input<CopyButtonFeedback>('bubble')\n wrapAt = input<RegExp | null>(COPY_FIELD_WRAP_AT)\n\n copied = output<string>()\n copyFailed = output<void>()\n\n protected readonly labelId = `gbt-copy-field-label-${++nextCopyFieldId}`\n\n protected readonly segments = computed(() => this.cut(this.value(), this.wrapAt()))\n\n private cut(value: string, pattern: RegExp | null): string[] {\n if (!pattern) {\n return [value]\n }\n const flags = pattern.flags.includes('g') ? pattern.flags : `${pattern.flags}g`\n const segments: string[] = []\n let start = 0\n for (const match of value.matchAll(new RegExp(pattern.source, flags))) {\n const end = match.index + match[0].length\n if (end > start && end < value.length) {\n segments.push(value.slice(start, end))\n start = end\n }\n }\n segments.push(value.slice(start))\n return segments\n }\n}\n","@if (label(); as text) {\n <span class=\"gbt-copy-field__label\" [id]=\"labelId\">{{ text }}</span>\n}\n<div\n class=\"gbt-copy-field__box\"\n [attr.role]=\"label() ? 'group' : null\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n>\n <!-- prettier-ignore -->\n <code #code class=\"gbt-copy-field__value\">@for (segment of segments(); track $index) {{{ segment }}<wbr />}</code>\n <gbt-copy-button\n class=\"gbt-copy-field__copy\"\n [value]=\"value()\"\n [ariaLabel]=\"copyLabel()\"\n [copiedText]=\"copiedText()\"\n [failedText]=\"failedText()\"\n [feedbackMs]=\"feedbackMs()\"\n [feedback]=\"feedback()\"\n [selectTarget]=\"code\"\n (copied)=\"copied.emit($event)\"\n (copyFailed)=\"copyFailed.emit()\"\n />\n</div>\n"],"mappings":"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"}