solid-ui 3.1.3-6 → 3.1.3-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 (552) hide show
  1. package/dist/_virtual/~icons/app/solid-emblem.cjs.js +3 -0
  2. package/dist/_virtual/~icons/app/solid-emblem.cjs.js.map +1 -0
  3. package/dist/_virtual/~icons/app/solid-emblem.esm.js +11 -0
  4. package/dist/_virtual/~icons/app/solid-emblem.esm.js.map +1 -0
  5. package/dist/_virtual/~icons/lucide/chevron-down.cjs.js +1 -1
  6. package/dist/_virtual/~icons/lucide/chevron-down.esm.js +1 -0
  7. package/dist/_virtual/~icons/lucide/circle-user.cjs.js +1 -1
  8. package/dist/_virtual/~icons/lucide/circle-user.esm.js +1 -0
  9. package/dist/_virtual/~icons/lucide/log-in.cjs.js +1 -1
  10. package/dist/_virtual/~icons/lucide/log-in.esm.js +1 -0
  11. package/dist/_virtual/~icons/lucide/log-out.cjs.js +1 -1
  12. package/dist/_virtual/~icons/lucide/log-out.esm.js +1 -0
  13. package/dist/_virtual/~icons/lucide/user.cjs.js +1 -1
  14. package/dist/_virtual/~icons/lucide/user.esm.js +1 -0
  15. package/dist/_virtual/~icons/lucide/x.cjs.js +1 -1
  16. package/dist/_virtual/~icons/lucide/x.esm.js +1 -0
  17. package/dist/_virtual/~icons/svg-spinners/180-ring.cjs.js +1 -1
  18. package/dist/_virtual/~icons/svg-spinners/180-ring.esm.js +1 -0
  19. package/dist/acl/access-controller.cjs.js +1 -1
  20. package/dist/acl/access-controller.cjs.js.map +1 -1
  21. package/dist/acl/access-controller.esm.js.map +1 -1
  22. package/dist/acl/access-groups.cjs.js.map +1 -1
  23. package/dist/acl/access-groups.esm.js.map +1 -1
  24. package/dist/acl/acl-control.cjs.js +1 -1
  25. package/dist/acl/acl-control.cjs.js.map +1 -1
  26. package/dist/acl/acl-control.esm.js +1 -1
  27. package/dist/acl/acl-control.esm.js.map +1 -1
  28. package/dist/acl/acl.cjs.js.map +1 -1
  29. package/dist/acl/acl.esm.js.map +1 -1
  30. package/dist/acl/add-agent-buttons.cjs.js.map +1 -1
  31. package/dist/acl/add-agent-buttons.esm.js.map +1 -1
  32. package/dist/breakpoints.css +1 -0
  33. package/dist/breakpoints.css.d.ts +1 -0
  34. package/dist/chat/bookmarks.cjs.js +1 -1
  35. package/dist/chat/bookmarks.cjs.js.map +1 -1
  36. package/dist/chat/bookmarks.esm.js +1 -1
  37. package/dist/chat/bookmarks.esm.js.map +1 -1
  38. package/dist/chat/chatLogic.cjs.js.map +1 -1
  39. package/dist/chat/chatLogic.esm.js.map +1 -1
  40. package/dist/chat/dateFolder.cjs.js +1 -1
  41. package/dist/chat/dateFolder.cjs.js.map +1 -1
  42. package/dist/chat/dateFolder.esm.js +1 -1
  43. package/dist/chat/dateFolder.esm.js.map +1 -1
  44. package/dist/chat/infinite.cjs.js +1 -1
  45. package/dist/chat/infinite.cjs.js.map +1 -1
  46. package/dist/chat/infinite.esm.js +1 -1
  47. package/dist/chat/infinite.esm.js.map +1 -1
  48. package/dist/chat/keys.cjs.js +1 -1
  49. package/dist/chat/keys.cjs.js.map +1 -1
  50. package/dist/chat/keys.esm.js +1 -1
  51. package/dist/chat/keys.esm.js.map +1 -1
  52. package/dist/chat/message.cjs.js +1 -1
  53. package/dist/chat/message.cjs.js.map +1 -1
  54. package/dist/chat/message.esm.js +24 -24
  55. package/dist/chat/message.esm.js.map +1 -1
  56. package/dist/chat/messageTools.cjs.js.map +1 -1
  57. package/dist/chat/messageTools.esm.js.map +1 -1
  58. package/dist/chat/signature.cjs.js +1 -1
  59. package/dist/chat/signature.cjs.js.map +1 -1
  60. package/dist/chat/signature.esm.js +1 -1
  61. package/dist/chunks/{DialogProvider-DphduSXG.js → DialogProvider-Bt65G0Tk.js} +4 -4
  62. package/dist/chunks/DialogProvider-Bt65G0Tk.js.map +1 -0
  63. package/dist/chunks/{account-CFhrB0LO.js → account-jSZP2tZ5.js} +76 -60
  64. package/dist/chunks/account-jSZP2tZ5.js.map +1 -0
  65. package/dist/chunks/{auth-Cpf3HYqF.js → auth-CZOEEeJ8.js} +23 -23
  66. package/dist/chunks/{auth-Cpf3HYqF.js.map → auth-CZOEEeJ8.js.map} +1 -1
  67. package/dist/chunks/{avatar-D281qln0.js → avatar-BugsRJZg.js} +5 -5
  68. package/dist/chunks/avatar-BugsRJZg.js.map +1 -0
  69. package/dist/chunks/{button-DbKYu6-r.js → button-0s0lZdxm.js} +2 -2
  70. package/dist/chunks/{button-DbKYu6-r.js.map → button-0s0lZdxm.js.map} +1 -1
  71. package/dist/chunks/chunk.K442ELDU-TtQSV9g1.js +1516 -0
  72. package/dist/chunks/chunk.K442ELDU-TtQSV9g1.js.map +1 -0
  73. package/dist/chunks/combobox-Cxi8xUMn.js +473 -0
  74. package/dist/chunks/combobox-Cxi8xUMn.js.map +1 -0
  75. package/dist/chunks/{combobox-option-Ck0mu4Gc.js → combobox-option-DiR3VpyT.js} +2 -2
  76. package/dist/chunks/{combobox-option-Ck0mu4Gc.js.map → combobox-option-DiR3VpyT.js.map} +1 -1
  77. package/dist/chunks/{components-BlEGdx4i.js → components-C1LEhsaK.js} +5 -9
  78. package/dist/chunks/components-C1LEhsaK.js.map +1 -0
  79. package/dist/chunks/{context-DJ_8r7Oc.js → context-uE5jJlS0.js} +2 -2
  80. package/dist/chunks/{context-DJ_8r7Oc.js.map → context-uE5jJlS0.js.map} +1 -1
  81. package/dist/chunks/decorators-BiCkPd_3.js.map +1 -1
  82. package/dist/chunks/{dialog-DlBtmOm6.js → dialog-BAzrHJ8w.js} +6 -6
  83. package/dist/chunks/dialog-BAzrHJ8w.js.map +1 -0
  84. package/dist/chunks/{dialog-content-CMeH_BD7.js → dialog-content-fdJrkCyB.js} +2 -2
  85. package/dist/chunks/{dialog-content-CMeH_BD7.js.map → dialog-content-fdJrkCyB.js.map} +1 -1
  86. package/dist/chunks/{dialog-footer-D0zzIMlx.js → dialog-footer-Bs_p2Nn9.js} +2 -2
  87. package/dist/chunks/{dialog-footer-D0zzIMlx.js.map → dialog-footer-Bs_p2Nn9.js.map} +1 -1
  88. package/dist/chunks/{dialog-header-DeC1iiLD.js → dialog-header-CWIAAoDo.js} +2 -2
  89. package/dist/chunks/{dialog-header-DeC1iiLD.js.map → dialog-header-CWIAAoDo.js.map} +1 -1
  90. package/dist/chunks/{dialogs-root-BcUcRuAt.js → dialogs-root-Cv932Aqm.js} +3 -3
  91. package/dist/chunks/{dialogs-root-BcUcRuAt.js.map → dialogs-root-Cv932Aqm.js.map} +1 -1
  92. package/dist/chunks/{footer-Bxe4WPgl.js → footer-kVa_uMeQ.js} +3 -3
  93. package/dist/chunks/{footer-Bxe4WPgl.js.map → footer-kVa_uMeQ.js.map} +1 -1
  94. package/dist/chunks/{guard-Da3znlJI.js → guard-Cml6dHTv.js} +4 -4
  95. package/dist/chunks/{guard-Da3znlJI.js.map → guard-Cml6dHTv.js.map} +1 -1
  96. package/dist/chunks/{headerFooterHelpers-5LYv-0Rt.js → headerFooterHelpers-BiZ6X10e.js} +15 -15
  97. package/dist/chunks/{headerFooterHelpers-5LYv-0Rt.js.map → headerFooterHelpers-BiZ6X10e.js.map} +1 -1
  98. package/dist/chunks/{input-Bkzi4zSV.js → input-BF224Jid.js} +2 -2
  99. package/dist/chunks/{input-Bkzi4zSV.js.map → input-BF224Jid.js.map} +1 -1
  100. package/dist/chunks/{jsonld-DZG2v1pE.js → jsonld-Cd-ZhJmZ.js} +54 -54
  101. package/dist/chunks/{jsonld-DZG2v1pE.js.map → jsonld-Cd-ZhJmZ.js.map} +1 -1
  102. package/dist/chunks/lit-C4H1jI4q.js.map +1 -1
  103. package/dist/chunks/{login-button-C603hM0G.js → login-button-pe1-DVNZ.js} +5 -5
  104. package/dist/chunks/{login-button-C603hM0G.js.map → login-button-pe1-DVNZ.js.map} +1 -1
  105. package/dist/chunks/{logout-button-Cxzpq-C3.js → logout-button-C5dtQiBB.js} +5 -5
  106. package/dist/chunks/{logout-button-Cxzpq-C3.js.map → logout-button-C5dtQiBB.js.map} +1 -1
  107. package/dist/chunks/{menu-aQiqq1ET.js → menu-DNcuV-1J.js} +183 -1693
  108. package/dist/chunks/menu-DNcuV-1J.js.map +1 -0
  109. package/dist/chunks/{menu-item-DBy4o-M4.js → menu-item-CWg-eS4V.js} +8 -6
  110. package/dist/chunks/menu-item-CWg-eS4V.js.map +1 -0
  111. package/dist/chunks/photo-capture-tiBsdSbA.js.map +1 -1
  112. package/dist/chunks/{provider-DZmdgerD.js → provider-DRxSExO6.js} +5 -5
  113. package/dist/chunks/{provider-DZmdgerD.js.map → provider-DRxSExO6.js.map} +1 -1
  114. package/dist/chunks/{select-wczAzbZF.js → select-D8dW53pr.js} +2 -2
  115. package/dist/chunks/{select-wczAzbZF.js.map → select-D8dW53pr.js.map} +1 -1
  116. package/dist/chunks/{select-option-hd_d1RNj.js → select-option-B-6ULCpQ.js} +2 -2
  117. package/dist/chunks/{select-option-hd_d1RNj.js.map → select-option-B-6ULCpQ.js.map} +1 -1
  118. package/dist/chunks/{signup-button-CsRaOUI4.js → signup-button-QvYELqb6.js} +5 -5
  119. package/dist/chunks/{signup-button-CsRaOUI4.js.map → signup-button-QvYELqb6.js.map} +1 -1
  120. package/dist/chunks/solid-emblem-BDzhMTjL.js +185 -0
  121. package/dist/chunks/solid-emblem-BDzhMTjL.js.map +1 -0
  122. package/dist/chunks/{solid-logic.esm-7q6hmfIF.js → solid-logic.esm-BhVcNu8u.js} +2517 -2521
  123. package/dist/chunks/solid-logic.esm-BhVcNu8u.js.map +1 -0
  124. package/dist/chunks/{src-BOU-JwWx.js → src-DYvSns7X.js} +2378 -2354
  125. package/dist/chunks/src-DYvSns7X.js.map +1 -0
  126. package/dist/components/account/Account.cjs.js +7 -2
  127. package/dist/components/account/Account.cjs.js.map +1 -1
  128. package/dist/components/account/Account.d.ts +8 -1
  129. package/dist/components/account/Account.d.ts.map +1 -1
  130. package/dist/components/account/Account.esm.js +64 -48
  131. package/dist/components/account/Account.esm.js.map +1 -1
  132. package/dist/components/account/Account.stories.d.ts +3 -8
  133. package/dist/components/account/Account.stories.d.ts.map +1 -1
  134. package/dist/components/account/Account.styles.cjs.js +1 -1
  135. package/dist/components/account/Account.styles.cjs.js.map +1 -1
  136. package/dist/components/account/Account.styles.esm.js +1 -1
  137. package/dist/components/account/Account.styles.esm.js.map +1 -1
  138. package/dist/components/account/index.cjs.js +1 -1
  139. package/dist/components/account/index.cjs.js.map +1 -1
  140. package/dist/components/account/index.d.ts +2 -2
  141. package/dist/components/account/index.d.ts.map +1 -1
  142. package/dist/components/account/index.esm.js +1 -1
  143. package/dist/components/account/index.esm.js.map +1 -1
  144. package/dist/components/account.js +1 -1
  145. package/dist/components/avatar/Avatar.cjs.js +1 -1
  146. package/dist/components/avatar/Avatar.cjs.js.map +1 -1
  147. package/dist/components/avatar/Avatar.esm.js +1 -1
  148. package/dist/components/avatar/Avatar.styles.cjs.js +1 -1
  149. package/dist/components/avatar/Avatar.styles.cjs.js.map +1 -1
  150. package/dist/components/avatar/Avatar.styles.esm.js +1 -1
  151. package/dist/components/avatar/Avatar.styles.esm.js.map +1 -1
  152. package/dist/components/avatar/index.cjs.js +1 -1
  153. package/dist/components/avatar/index.esm.js +1 -1
  154. package/dist/components/avatar.js +1 -1
  155. package/dist/components/button/Button.cjs.js +1 -1
  156. package/dist/components/button/Button.cjs.js.map +1 -1
  157. package/dist/components/button/Button.esm.js +1 -1
  158. package/dist/components/button/Button.esm.js.map +1 -1
  159. package/dist/components/button/index.cjs.js +1 -1
  160. package/dist/components/button/index.esm.js +3 -3
  161. package/dist/components/button.js +1 -1
  162. package/dist/components/combobox/Combobox.cjs.js +57 -25
  163. package/dist/components/combobox/Combobox.cjs.js.map +1 -1
  164. package/dist/components/combobox/Combobox.d.ts +22 -3
  165. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  166. package/dist/components/combobox/Combobox.esm.js +220 -101
  167. package/dist/components/combobox/Combobox.esm.js.map +1 -1
  168. package/dist/components/combobox/Combobox.styles.cjs.js +1 -1
  169. package/dist/components/combobox/Combobox.styles.cjs.js.map +1 -1
  170. package/dist/components/combobox/Combobox.styles.esm.js +1 -1
  171. package/dist/components/combobox/Combobox.styles.esm.js.map +1 -1
  172. package/dist/components/combobox/index.cjs.js +1 -1
  173. package/dist/components/combobox/index.esm.js +1 -1
  174. package/dist/components/combobox-option/ComboboxOption.cjs.js +1 -1
  175. package/dist/components/combobox-option/ComboboxOption.cjs.js.map +1 -1
  176. package/dist/components/combobox-option/ComboboxOption.esm.js +1 -1
  177. package/dist/components/combobox-option/index.cjs.js +1 -1
  178. package/dist/components/combobox-option/index.esm.js +1 -1
  179. package/dist/components/combobox-option.js +1 -1
  180. package/dist/components/combobox.js +1 -1
  181. package/dist/components/dialog/Dialog.cjs.js +2 -2
  182. package/dist/components/dialog/Dialog.cjs.js.map +1 -1
  183. package/dist/components/dialog/Dialog.d.ts.map +1 -1
  184. package/dist/components/dialog/Dialog.esm.js +2 -2
  185. package/dist/components/dialog/Dialog.esm.js.map +1 -1
  186. package/dist/components/dialog/index.cjs.js +1 -1
  187. package/dist/components/dialog/index.esm.js +1 -1
  188. package/dist/components/dialog-content/DialogContent.cjs.js +1 -1
  189. package/dist/components/dialog-content/DialogContent.cjs.js.map +1 -1
  190. package/dist/components/dialog-content/DialogContent.esm.js +1 -1
  191. package/dist/components/dialog-content/DialogContent.esm.js.map +1 -1
  192. package/dist/components/dialog-content/index.cjs.js +1 -1
  193. package/dist/components/dialog-content/index.esm.js +1 -1
  194. package/dist/components/dialog-content.js +1 -1
  195. package/dist/components/dialog-footer/DialogFooter.cjs.js +1 -1
  196. package/dist/components/dialog-footer/DialogFooter.cjs.js.map +1 -1
  197. package/dist/components/dialog-footer/DialogFooter.esm.js +1 -1
  198. package/dist/components/dialog-footer/DialogFooter.esm.js.map +1 -1
  199. package/dist/components/dialog-footer/index.cjs.js +1 -1
  200. package/dist/components/dialog-footer/index.esm.js +1 -1
  201. package/dist/components/dialog-footer.js +1 -1
  202. package/dist/components/dialog-header/DialogHeader.cjs.js +1 -1
  203. package/dist/components/dialog-header/DialogHeader.cjs.js.map +1 -1
  204. package/dist/components/dialog-header/DialogHeader.esm.js +1 -1
  205. package/dist/components/dialog-header/DialogHeader.esm.js.map +1 -1
  206. package/dist/components/dialog-header/index.cjs.js +1 -1
  207. package/dist/components/dialog-header/index.esm.js +1 -1
  208. package/dist/components/dialog-header.js +1 -1
  209. package/dist/components/dialog-provider/DialogProvider.cjs.js +1 -1
  210. package/dist/components/dialog-provider/DialogProvider.cjs.js.map +1 -1
  211. package/dist/components/dialog-provider/DialogProvider.esm.js +2 -2
  212. package/dist/components/dialog-provider/DialogProvider.esm.js.map +1 -1
  213. package/dist/components/dialog-provider/index.cjs.js +1 -1
  214. package/dist/components/dialog-provider/index.esm.js +1 -1
  215. package/dist/components/dialog-provider.js +1 -1
  216. package/dist/components/dialog.js +1 -1
  217. package/dist/components/dialogs-root/DialogsRoot.cjs.js +1 -1
  218. package/dist/components/dialogs-root/DialogsRoot.cjs.js.map +1 -1
  219. package/dist/components/dialogs-root/DialogsRoot.esm.js +1 -1
  220. package/dist/components/dialogs-root/index.cjs.js +1 -1
  221. package/dist/components/dialogs-root/index.esm.js +1 -1
  222. package/dist/components/dialogs-root.js +1 -1
  223. package/dist/components/footer.js +1 -1
  224. package/dist/components/guard/Guard.cjs.js +1 -1
  225. package/dist/components/guard/Guard.cjs.js.map +1 -1
  226. package/dist/components/guard/Guard.esm.js +1 -1
  227. package/dist/components/guard/index.cjs.js +1 -1
  228. package/dist/components/guard/index.esm.js +1 -1
  229. package/dist/components/guard.js +1 -1
  230. package/dist/components/index.cjs.js +1 -1
  231. package/dist/components/index.esm.js +2 -2
  232. package/dist/components/input/Input.cjs.js +1 -1
  233. package/dist/components/input/Input.cjs.js.map +1 -1
  234. package/dist/components/input/Input.esm.js +1 -1
  235. package/dist/components/input/index.cjs.js +1 -1
  236. package/dist/components/input/index.esm.js +1 -1
  237. package/dist/components/input.js +1 -1
  238. package/dist/components/login-button/LoginButton.cjs.js +1 -1
  239. package/dist/components/login-button/LoginButton.cjs.js.map +1 -1
  240. package/dist/components/login-button/LoginButton.esm.js +1 -1
  241. package/dist/components/login-button/index.cjs.js +1 -1
  242. package/dist/components/login-button/index.esm.js +1 -1
  243. package/dist/components/login-button.js +1 -1
  244. package/dist/components/login-modal/LoginModal.cjs.js +1 -1
  245. package/dist/components/login-modal/LoginModal.cjs.js.map +1 -1
  246. package/dist/components/login-modal/LoginModal.esm.js +1 -1
  247. package/dist/components/login-modal/index.cjs.js +1 -1
  248. package/dist/components/login-modal/index.esm.js +1 -1
  249. package/dist/components/login-modal.js +1 -1
  250. package/dist/components/logout-button/LogoutButton.cjs.js +1 -1
  251. package/dist/components/logout-button/LogoutButton.cjs.js.map +1 -1
  252. package/dist/components/logout-button/LogoutButton.esm.js +1 -1
  253. package/dist/components/logout-button/index.cjs.js +1 -1
  254. package/dist/components/logout-button/index.esm.js +1 -1
  255. package/dist/components/logout-button.js +1 -1
  256. package/dist/components/menu/Menu.cjs.js +1 -1
  257. package/dist/components/menu/Menu.cjs.js.map +1 -1
  258. package/dist/components/menu/Menu.esm.js +1 -1
  259. package/dist/components/menu/Menu.esm.js.map +1 -1
  260. package/dist/components/menu/index.cjs.js +1 -1
  261. package/dist/components/menu/index.esm.js +1 -1
  262. package/dist/components/menu-item/MenuItem.cjs.js +6 -4
  263. package/dist/components/menu-item/MenuItem.cjs.js.map +1 -1
  264. package/dist/components/menu-item/MenuItem.d.ts.map +1 -1
  265. package/dist/components/menu-item/MenuItem.esm.js +6 -4
  266. package/dist/components/menu-item/MenuItem.esm.js.map +1 -1
  267. package/dist/components/menu-item/MenuItem.styles.cjs.js +1 -1
  268. package/dist/components/menu-item/MenuItem.styles.cjs.js.map +1 -1
  269. package/dist/components/menu-item/MenuItem.styles.esm.js +1 -1
  270. package/dist/components/menu-item/MenuItem.styles.esm.js.map +1 -1
  271. package/dist/components/menu-item/index.cjs.js +1 -1
  272. package/dist/components/menu-item/index.esm.js +1 -1
  273. package/dist/components/menu-item.js +1 -1
  274. package/dist/components/menu.js +1 -1
  275. package/dist/components/provider/Provider.cjs.js +1 -1
  276. package/dist/components/provider/Provider.cjs.js.map +1 -1
  277. package/dist/components/provider/Provider.esm.js +1 -1
  278. package/dist/components/provider/index.cjs.js +1 -1
  279. package/dist/components/provider/index.esm.js +1 -1
  280. package/dist/components/provider.js +1 -1
  281. package/dist/components/select/Select.cjs.js +1 -1
  282. package/dist/components/select/Select.cjs.js.map +1 -1
  283. package/dist/components/select/Select.esm.js +1 -1
  284. package/dist/components/select/Select.esm.js.map +1 -1
  285. package/dist/components/select/index.cjs.js +1 -1
  286. package/dist/components/select/index.esm.js +1 -1
  287. package/dist/components/select-option/SelectOption.cjs.js +1 -1
  288. package/dist/components/select-option/SelectOption.cjs.js.map +1 -1
  289. package/dist/components/select-option/SelectOption.esm.js +1 -1
  290. package/dist/components/select-option/index.cjs.js +1 -1
  291. package/dist/components/select-option/index.esm.js +1 -1
  292. package/dist/components/select-option.js +1 -1
  293. package/dist/components/select.js +1 -1
  294. package/dist/components/signup-button/SignupButton.cjs.js +1 -1
  295. package/dist/components/signup-button/SignupButton.cjs.js.map +1 -1
  296. package/dist/components/signup-button/SignupButton.esm.js +1 -1
  297. package/dist/components/signup-button/index.cjs.js +1 -1
  298. package/dist/components/signup-button/index.esm.js +1 -1
  299. package/dist/components/signup-button.js +1 -1
  300. package/dist/components/solid-emblem/SolidEmblem.cjs.js +2 -0
  301. package/dist/components/solid-emblem/SolidEmblem.cjs.js.map +1 -0
  302. package/dist/components/solid-emblem/SolidEmblem.d.ts +6 -0
  303. package/dist/components/solid-emblem/SolidEmblem.d.ts.map +1 -0
  304. package/dist/components/solid-emblem/SolidEmblem.esm.js +178 -0
  305. package/dist/components/solid-emblem/SolidEmblem.esm.js.map +1 -0
  306. package/dist/components/solid-emblem/SolidEmblem.styles.cjs.js +2 -0
  307. package/dist/components/solid-emblem/SolidEmblem.styles.cjs.js.map +1 -0
  308. package/dist/components/solid-emblem/SolidEmblem.styles.esm.js +7 -0
  309. package/dist/components/solid-emblem/SolidEmblem.styles.esm.js.map +1 -0
  310. package/dist/components/solid-emblem/index.cjs.js +2 -0
  311. package/dist/components/solid-emblem/index.cjs.js.map +1 -0
  312. package/dist/components/solid-emblem/index.d.ts +4 -0
  313. package/dist/components/solid-emblem/index.d.ts.map +1 -0
  314. package/dist/components/solid-emblem/index.esm.js +7 -0
  315. package/dist/components/solid-emblem/index.esm.js.map +1 -0
  316. package/dist/components/solid-emblem.js +2 -0
  317. package/dist/components.js +23 -23
  318. package/dist/create/create.cjs.js.map +1 -1
  319. package/dist/create/create.esm.js.map +1 -1
  320. package/dist/create/index.cjs.js.map +1 -1
  321. package/dist/footer/index.cjs.js +1 -1
  322. package/dist/footer/index.esm.js +1 -1
  323. package/dist/header/index.cjs.js +1 -1
  324. package/dist/header/index.cjs.js.map +1 -1
  325. package/dist/header/index.esm.js +1 -1
  326. package/dist/header/index.esm.js.map +1 -1
  327. package/dist/index.js +6 -7
  328. package/dist/lib/auth/SolidAuth.cjs.js.map +1 -1
  329. package/dist/lib/auth/SolidAuth.esm.js.map +1 -1
  330. package/dist/lib/auth/context.cjs.js.map +1 -1
  331. package/dist/lib/auth/index.cjs.js +1 -1
  332. package/dist/lib/auth/index.esm.js +5 -4
  333. package/dist/lib/components/ids.cjs.js.map +1 -1
  334. package/dist/lib/components/ids.esm.js.map +1 -1
  335. package/dist/lib/components/index.cjs.js +1 -1
  336. package/dist/lib/components/index.esm.js +6 -5
  337. package/dist/lib/components/traits/DialogTrait.cjs.js.map +1 -1
  338. package/dist/lib/components/traits/DialogTrait.esm.js.map +1 -1
  339. package/dist/lib/components/traits/InputTrait.cjs.js +1 -1
  340. package/dist/lib/components/traits/InputTrait.cjs.js.map +1 -1
  341. package/dist/lib/components/traits/InputTrait.d.ts +1 -0
  342. package/dist/lib/components/traits/InputTrait.d.ts.map +1 -1
  343. package/dist/lib/components/traits/InputTrait.esm.js +3 -2
  344. package/dist/lib/components/traits/InputTrait.esm.js.map +1 -1
  345. package/dist/lib/components/traits/index.cjs.js +1 -1
  346. package/dist/lib/components/traits/index.esm.js +3 -2
  347. package/dist/lib/components/web-component/WebComponent.cjs.js +1 -1
  348. package/dist/lib/components/web-component/WebComponent.cjs.js.map +1 -1
  349. package/dist/lib/components/web-component/WebComponent.d.ts.map +1 -1
  350. package/dist/lib/components/web-component/WebComponent.esm.js +1 -6
  351. package/dist/lib/components/web-component/WebComponent.esm.js.map +1 -1
  352. package/dist/lib/components/web-component/WebComponent.styles.cjs.js.map +1 -1
  353. package/dist/lib/components/web-component/WebComponent.styles.esm.js.map +1 -1
  354. package/dist/lib/components/web-component/index.cjs.js +1 -1
  355. package/dist/lib/components/web-component/index.esm.js +2 -1
  356. package/dist/lib/dialogs/context.cjs.js.map +1 -1
  357. package/dist/lib/dialogs/index.cjs.js +1 -1
  358. package/dist/lib/dialogs/index.esm.js +6 -5
  359. package/dist/lib/forms/rdfHelper.d.ts +4 -0
  360. package/dist/lib/forms/rdfHelper.d.ts.map +1 -0
  361. package/dist/lib/log.cjs.js +1 -1
  362. package/dist/lib/log.cjs.js.map +1 -1
  363. package/dist/lib/log.esm.js +1 -1
  364. package/dist/lib/log.esm.js.map +1 -1
  365. package/dist/lib/messageArea.cjs.js.map +1 -1
  366. package/dist/lib/messageArea.esm.js.map +1 -1
  367. package/dist/lib/ns.cjs.js.map +1 -1
  368. package/dist/lib/pad.cjs.js +1 -1
  369. package/dist/lib/pad.cjs.js.map +1 -1
  370. package/dist/lib/pad.esm.js +1 -1
  371. package/dist/lib/pad.esm.js.map +1 -1
  372. package/dist/lib/participation.cjs.js.map +1 -1
  373. package/dist/lib/participation.esm.js.map +1 -1
  374. package/dist/lib/preferences.cjs.js +1 -1
  375. package/dist/lib/preferences.cjs.js.map +1 -1
  376. package/dist/lib/preferences.esm.js +1 -1
  377. package/dist/lib/preferences.esm.js.map +1 -1
  378. package/dist/lib/table.cjs.js.map +1 -1
  379. package/dist/lib/table.esm.js.map +1 -1
  380. package/dist/lib/tabs.cjs.js +1 -1
  381. package/dist/lib/tabs.cjs.js.map +1 -1
  382. package/dist/lib/tabs.esm.js +1 -1
  383. package/dist/lib/tabs.esm.js.map +1 -1
  384. package/dist/loader.js +6 -7
  385. package/dist/login/login.cjs.js +1 -1
  386. package/dist/login/login.cjs.js.map +1 -1
  387. package/dist/login/login.esm.js +1 -1
  388. package/dist/login/login.esm.js.map +1 -1
  389. package/dist/matrix/index.cjs.js.map +1 -1
  390. package/dist/matrix/matrix.cjs.js.map +1 -1
  391. package/dist/matrix/matrix.esm.js.map +1 -1
  392. package/dist/media/media-capture.cjs.js.map +1 -1
  393. package/dist/media/media-capture.esm.js.map +1 -1
  394. package/dist/signup/signup.cjs.js.map +1 -1
  395. package/dist/signup/signup.esm.js.map +1 -1
  396. package/dist/solid-ui.js +321 -1380
  397. package/dist/solid-ui.min.js +321 -1380
  398. package/dist/solid-ui.min.js.map +1 -1
  399. package/dist/theme.css +1 -1
  400. package/dist/utils/headerFooterHelpers.cjs.js.map +1 -1
  401. package/dist/utils/headerFooterHelpers.esm.js.map +1 -1
  402. package/dist/utils/index.cjs.js +2 -2
  403. package/dist/utils/index.cjs.js.map +1 -1
  404. package/dist/utils/index.esm.js +1 -1
  405. package/dist/utils/index.esm.js.map +1 -1
  406. package/dist/utils/keyHelpers/accessData.cjs.js +1 -1
  407. package/dist/utils/keyHelpers/accessData.cjs.js.map +1 -1
  408. package/dist/utils/keyHelpers/accessData.esm.js +1 -1
  409. package/dist/utils/keyHelpers/accessData.esm.js.map +1 -1
  410. package/dist/utils/keyHelpers/acl.cjs.js.map +1 -1
  411. package/dist/utils/keyHelpers/acl.esm.js.map +1 -1
  412. package/dist/utils/keyHelpers/otherHelpers.cjs.js.map +1 -1
  413. package/dist/utils/keyHelpers/otherHelpers.esm.js.map +1 -1
  414. package/dist/utils/label.cjs.js.map +1 -1
  415. package/dist/utils/label.esm.js.map +1 -1
  416. package/dist/v2/components/layout/footer/index.cjs.js +1 -1
  417. package/dist/v2/components/layout/footer/index.esm.js +1 -0
  418. package/dist/v2/components/media/photoCapture/PhotoCapture.cjs.js.map +1 -1
  419. package/dist/v2/components/media/photoCapture/PhotoCapture.esm.js.map +1 -1
  420. package/dist/v2/components/media/photoCapture/index.cjs.js +1 -1
  421. package/dist/v2/components/media/photoCapture/index.esm.js +1 -0
  422. package/dist/widgets/buttons/iconLinks.cjs.js.map +1 -1
  423. package/dist/widgets/buttons/iconLinks.esm.js.map +1 -1
  424. package/dist/widgets/buttons.cjs.js.map +1 -1
  425. package/dist/widgets/buttons.esm.js.map +1 -1
  426. package/dist/widgets/dragAndDrop.cjs.js.map +1 -1
  427. package/dist/widgets/dragAndDrop.esm.js.map +1 -1
  428. package/dist/widgets/error.cjs.js.map +1 -1
  429. package/dist/widgets/error.esm.js.map +1 -1
  430. package/dist/widgets/forms/autocomplete/autocompleteField.cjs.js.map +1 -1
  431. package/dist/widgets/forms/autocomplete/autocompleteField.esm.js.map +1 -1
  432. package/dist/widgets/forms/autocomplete/autocompletePicker.cjs.js.map +1 -1
  433. package/dist/widgets/forms/autocomplete/autocompletePicker.esm.js.map +1 -1
  434. package/dist/widgets/forms/autocomplete/language.cjs.js +1 -1
  435. package/dist/widgets/forms/autocomplete/language.cjs.js.map +1 -1
  436. package/dist/widgets/forms/autocomplete/language.esm.js +1 -1
  437. package/dist/widgets/forms/autocomplete/language.esm.js.map +1 -1
  438. package/dist/widgets/forms/autocomplete/publicData.cjs.js +1 -1
  439. package/dist/widgets/forms/autocomplete/publicData.cjs.js.map +1 -1
  440. package/dist/widgets/forms/autocomplete/publicData.esm.js +1 -1
  441. package/dist/widgets/forms/autocomplete/publicData.esm.js.map +1 -1
  442. package/dist/widgets/forms/basic.cjs.js.map +1 -1
  443. package/dist/widgets/forms/basic.esm.js.map +1 -1
  444. package/dist/widgets/forms/fieldFunction.cjs.js.map +1 -1
  445. package/dist/widgets/forms/fieldParams.cjs.js.map +1 -1
  446. package/dist/widgets/forms/fieldParams.esm.js.map +1 -1
  447. package/dist/widgets/forms/formStyle.cjs.js.map +1 -1
  448. package/dist/widgets/forms/formStyle.esm.js.map +1 -1
  449. package/dist/widgets/forms.cjs.js +1 -1
  450. package/dist/widgets/forms.cjs.js.map +1 -1
  451. package/dist/widgets/forms.esm.js +1 -1
  452. package/dist/widgets/forms.esm.js.map +1 -1
  453. package/dist/widgets/index.cjs.js +1 -1
  454. package/dist/widgets/index.esm.js +65 -65
  455. package/dist/widgets/multiSelect.cjs.js.map +1 -1
  456. package/dist/widgets/multiSelect.esm.js.map +1 -1
  457. package/dist/widgets/peoplePicker.cjs.js.map +1 -1
  458. package/dist/widgets/peoplePicker.esm.js.map +1 -1
  459. package/dist/widgets/widgetHelpers.cjs.js.map +1 -1
  460. package/dist/widgets/widgetHelpers.esm.js.map +1 -1
  461. package/package.json +14 -11
  462. package/dist/chunks/DialogProvider-DphduSXG.js.map +0 -1
  463. package/dist/chunks/account-CFhrB0LO.js.map +0 -1
  464. package/dist/chunks/avatar-D281qln0.js.map +0 -1
  465. package/dist/chunks/combobox-Dtgc8qqO.js +0 -354
  466. package/dist/chunks/combobox-Dtgc8qqO.js.map +0 -1
  467. package/dist/chunks/components-BlEGdx4i.js.map +0 -1
  468. package/dist/chunks/dialog-DlBtmOm6.js.map +0 -1
  469. package/dist/chunks/header-Bqd2CEK3.js +0 -1486
  470. package/dist/chunks/header-Bqd2CEK3.js.map +0 -1
  471. package/dist/chunks/iconBase-DJ0zbNSL.js +0 -31
  472. package/dist/chunks/iconBase-DJ0zbNSL.js.map +0 -1
  473. package/dist/chunks/menu-aQiqq1ET.js.map +0 -1
  474. package/dist/chunks/menu-item-DBy4o-M4.js.map +0 -1
  475. package/dist/chunks/solid-logic.esm-7q6hmfIF.js.map +0 -1
  476. package/dist/chunks/src-BOU-JwWx.js.map +0 -1
  477. package/dist/components/header/index.cjs.js +0 -1
  478. package/dist/components/header/index.d.ts +0 -2
  479. package/dist/components/header/index.d.ts.map +0 -1
  480. package/dist/components/header/index.esm.js +0 -3
  481. package/dist/components/header.js +0 -2
  482. package/dist/lib/features.cjs.js +0 -2
  483. package/dist/lib/features.cjs.js.map +0 -1
  484. package/dist/lib/features.d.ts +0 -8
  485. package/dist/lib/features.d.ts.map +0 -1
  486. package/dist/lib/features.esm.js +0 -6
  487. package/dist/lib/features.esm.js.map +0 -1
  488. package/dist/solid-ui.js.map +0 -1
  489. package/dist/v2/components/actions/button/Button.d.ts +0 -97
  490. package/dist/v2/components/actions/button/Button.d.ts.map +0 -1
  491. package/dist/v2/components/actions/button/Button.test.d.ts +0 -1
  492. package/dist/v2/components/actions/button/Button.test.d.ts.map +0 -1
  493. package/dist/v2/components/actions/button/index.d.ts +0 -8
  494. package/dist/v2/components/actions/button/index.d.ts.map +0 -1
  495. package/dist/v2/components/auth/loginButton/LoginButton.cjs.js +0 -414
  496. package/dist/v2/components/auth/loginButton/LoginButton.cjs.js.map +0 -1
  497. package/dist/v2/components/auth/loginButton/LoginButton.esm.js +0 -519
  498. package/dist/v2/components/auth/loginButton/LoginButton.esm.js.map +0 -1
  499. package/dist/v2/components/auth/loginButton/downArrow.cjs.js +0 -9
  500. package/dist/v2/components/auth/loginButton/downArrow.cjs.js.map +0 -1
  501. package/dist/v2/components/auth/loginButton/downArrow.esm.js +0 -14
  502. package/dist/v2/components/auth/loginButton/downArrow.esm.js.map +0 -1
  503. package/dist/v2/components/auth/loginButton/index.cjs.js +0 -2
  504. package/dist/v2/components/auth/loginButton/index.cjs.js.map +0 -1
  505. package/dist/v2/components/auth/loginButton/index.esm.js +0 -7
  506. package/dist/v2/components/auth/loginButton/index.esm.js.map +0 -1
  507. package/dist/v2/components/auth/signupButton/SignupButton.cjs.js +0 -59
  508. package/dist/v2/components/auth/signupButton/SignupButton.cjs.js.map +0 -1
  509. package/dist/v2/components/auth/signupButton/SignupButton.esm.js +0 -98
  510. package/dist/v2/components/auth/signupButton/SignupButton.esm.js.map +0 -1
  511. package/dist/v2/components/auth/signupButton/index.cjs.js +0 -2
  512. package/dist/v2/components/auth/signupButton/index.cjs.js.map +0 -1
  513. package/dist/v2/components/auth/signupButton/index.esm.js +0 -7
  514. package/dist/v2/components/auth/signupButton/index.esm.js.map +0 -1
  515. package/dist/v2/components/forms/combobox/Combobox.d.ts +0 -82
  516. package/dist/v2/components/forms/combobox/Combobox.d.ts.map +0 -1
  517. package/dist/v2/components/forms/combobox/Combobox.test.d.ts +0 -1
  518. package/dist/v2/components/forms/combobox/Combobox.test.d.ts.map +0 -1
  519. package/dist/v2/components/forms/combobox/comboboxTypes.d.ts +0 -6
  520. package/dist/v2/components/forms/combobox/comboboxTypes.d.ts.map +0 -1
  521. package/dist/v2/components/forms/combobox/index.d.ts +0 -3
  522. package/dist/v2/components/forms/combobox/index.d.ts.map +0 -1
  523. package/dist/v2/components/forms/select/Select.d.ts +0 -68
  524. package/dist/v2/components/forms/select/Select.d.ts.map +0 -1
  525. package/dist/v2/components/forms/select/Select.test.d.ts +0 -1
  526. package/dist/v2/components/forms/select/Select.test.d.ts.map +0 -1
  527. package/dist/v2/components/forms/select/index.d.ts +0 -3
  528. package/dist/v2/components/forms/select/index.d.ts.map +0 -1
  529. package/dist/v2/components/forms/shared/downArrow.d.ts +0 -2
  530. package/dist/v2/components/forms/shared/downArrow.d.ts.map +0 -1
  531. package/dist/v2/components/forms/shared/keyboard.d.ts +0 -7
  532. package/dist/v2/components/forms/shared/keyboard.d.ts.map +0 -1
  533. package/dist/v2/components/forms/shared/listboxStyles.d.ts +0 -2
  534. package/dist/v2/components/forms/shared/listboxStyles.d.ts.map +0 -1
  535. package/dist/v2/components/forms/shared/listboxTemplate.d.ts +0 -11
  536. package/dist/v2/components/forms/shared/listboxTemplate.d.ts.map +0 -1
  537. package/dist/v2/components/forms/shared/optionTypes.d.ts +0 -6
  538. package/dist/v2/components/forms/shared/optionTypes.d.ts.map +0 -1
  539. package/dist/v2/components/layout/header/Header.cjs.js +0 -625
  540. package/dist/v2/components/layout/header/Header.cjs.js.map +0 -1
  541. package/dist/v2/components/layout/header/Header.d.ts +0 -160
  542. package/dist/v2/components/layout/header/Header.d.ts.map +0 -1
  543. package/dist/v2/components/layout/header/Header.esm.js +0 -873
  544. package/dist/v2/components/layout/header/Header.esm.js.map +0 -1
  545. package/dist/v2/components/layout/header/header.test.d.ts +0 -1
  546. package/dist/v2/components/layout/header/header.test.d.ts.map +0 -1
  547. package/dist/v2/components/layout/header/index.cjs.js +0 -2
  548. package/dist/v2/components/layout/header/index.cjs.js.map +0 -1
  549. package/dist/v2/components/layout/header/index.d.ts +0 -4
  550. package/dist/v2/components/layout/header/index.d.ts.map +0 -1
  551. package/dist/v2/components/layout/header/index.esm.js +0 -7
  552. package/dist/v2/components/layout/header/index.esm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"PhotoCapture.cjs.js","names":[],"sources":["../../../../../src/v2/components/media/photoCapture/PhotoCapture.ts"],"sourcesContent":["import { LitElement, css, html, nothing, type PropertyValues } from 'lit'\n/* The original code was written by Sir Tim Berners-Lee. It was made into a\nweb component by AI Model GPT-5.4\nPrompt: Take the code from src/media/media-capture.ts and make it a\nweb component. Make it work in forms as well as not. Make it\nconfigurable and follow LoginButton. */\nexport interface PhotoCapturedDetail {\n file: File\n blob: Blob\n objectUrl: string\n contentType: string\n}\n\nexport interface PhotoCaptureErrorDetail {\n error: unknown\n message: string\n}\n\nexport interface PhotoCaptureOpenChangeDetail {\n open: boolean\n}\n\nexport interface PhotoCaptureValueDetail {\n value: File | null\n}\n\ntype PresentationMode = 'inline' | 'dialog'\ntype ThemeMode = 'light' | 'dark'\n\nconst DEFAULT_CAPTURE_FORMAT = 'image/png'\n\nexport class PhotoCapture extends LitElement {\n static formAssociated = true\n\n static properties = {\n label: { type: String, reflect: true },\n heading: { type: String, reflect: true },\n captureLabel: { type: String, attribute: 'capture-label', reflect: true },\n confirmLabel: { type: String, attribute: 'confirm-label', reflect: true },\n retakeLabel: { type: String, attribute: 'retake-label', reflect: true },\n cancelLabel: { type: String, attribute: 'cancel-label', reflect: true },\n presentation: { type: String, reflect: true },\n theme: { type: String, reflect: true },\n facingMode: { type: String, attribute: 'facing-mode', reflect: true },\n constraints: { type: String, reflect: true },\n captureFormat: { type: String, attribute: 'capture-format', reflect: true },\n captureQuality: { type: Number, attribute: 'capture-quality' },\n open: { type: Boolean, reflect: true },\n disabled: { type: Boolean, reflect: true },\n name: { type: String, reflect: true },\n required: { type: Boolean, reflect: true },\n showTrigger: { type: Boolean, attribute: 'show-trigger', reflect: true },\n showCancelButton: { type: Boolean, attribute: 'show-cancel-button', reflect: true },\n autoCloseOnCapture: { type: Boolean, attribute: 'auto-close-on-capture' },\n fileNamePrefix: { type: String, attribute: 'file-name-prefix', reflect: true },\n value: { attribute: false },\n mediaConstraints: { attribute: false },\n _errorMessage: { state: true },\n _previewUrl: { state: true },\n _startingPreview: { state: true }\n }\n\n static styles = css`\n :host {\n display: block;\n --photo-capture-trigger-background: var(--lavender-900, #7c4cff);\n --photo-capture-trigger-text: var(--color-header-text, #ffffff);\n --photo-capture-surface: var(--color-background, #ffffff);\n --photo-capture-text: var(--gray-900, #101828);\n --photo-capture-muted-text: var(--gray-600, #4a5565);\n --photo-capture-border: var(--gray-200, #e5e7eb);\n --photo-capture-hover: var(--gray-100, #f3f4f6);\n --photo-capture-shadow: var(--box-shadow-sm, 0 1px 4px rgba(0, 0, 0, 0.12));\n --photo-capture-overlay: rgba(0, 0, 0, 0.6);\n --photo-capture-frame-max-width: 260px;\n --photo-capture-radius: 8px;\n --photo-capture-button-radius: var(--border-radius-base, 0.3125rem);\n --photo-capture-gap: var(--spacing-2xs, 0.625rem);\n color: var(--photo-capture-text);\n box-sizing: border-box;\n }\n\n :host([theme='dark']) {\n --photo-capture-surface: var(--gray-900, #111827);\n --photo-capture-text: var(--white, #ffffff);\n --photo-capture-muted-text: var(--gray-300, #d1d5dc);\n --photo-capture-border: var(--gray-700, #364153);\n --photo-capture-hover: rgba(255, 255, 255, 0.08);\n --photo-capture-shadow: 0 10px 30px rgba(0, 0, 0, 0.35);\n }\n\n *, *::before, *::after {\n box-sizing: border-box;\n }\n\n .trigger-button,\n .action-button,\n .cancel-button,\n .close-button {\n font: inherit;\n cursor: pointer;\n }\n\n .trigger-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 35px;\n padding: 0.5rem 0.9rem;\n border: none;\n border-radius: var(--photo-capture-button-radius);\n background: var(--photo-capture-trigger-background);\n color: var(--photo-capture-trigger-text);\n transition: transform 0.2s ease;\n }\n\n .trigger-button:active {\n transform: translateY(1px);\n }\n\n .trigger-button:disabled,\n .action-button:disabled,\n .cancel-button:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n }\n\n .inline-root[hidden] {\n display: none;\n }\n\n .dialog {\n border: none;\n padding: 0;\n background: transparent;\n outline: none;\n overflow: visible;\n max-width: none;\n max-height: none;\n }\n\n .dialog::backdrop {\n background: var(--photo-capture-overlay);\n }\n\n .panel {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--photo-capture-gap);\n width: min(100%, 340px);\n padding: 1rem;\n border: 1px solid var(--photo-capture-border);\n border-radius: var(--photo-capture-radius);\n background: var(--photo-capture-surface);\n color: var(--photo-capture-text);\n box-shadow: var(--photo-capture-shadow);\n }\n\n .panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.5rem;\n width: 100%;\n }\n\n .panel-heading {\n margin: 0;\n font-size: 1rem;\n font-weight: 700;\n line-height: 1.4;\n }\n\n .close-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n padding: 0;\n border: none;\n border-radius: 999px;\n background: transparent;\n color: var(--photo-capture-muted-text);\n font-size: 1.125rem;\n line-height: 1;\n }\n\n .close-button:hover,\n .close-button:focus-visible,\n .action-button:hover,\n .action-button:focus-visible,\n .cancel-button:hover,\n .cancel-button:focus-visible {\n background: var(--photo-capture-hover);\n }\n\n .viewport {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n min-height: 200px;\n border-radius: 0.5rem;\n overflow: hidden;\n background: color-mix(in srgb, var(--photo-capture-surface) 92%, #000 8%);\n }\n\n .viewport video,\n .viewport img {\n display: block;\n width: 100%;\n max-width: var(--photo-capture-frame-max-width);\n height: auto;\n border-radius: 0.5rem;\n margin: 0 auto;\n object-fit: cover;\n }\n\n .status {\n width: 100%;\n text-align: center;\n color: var(--photo-capture-muted-text);\n font-size: 0.875rem;\n }\n\n .status.error {\n color: var(--color-error, #b00020);\n }\n\n .actions {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-wrap: wrap;\n gap: var(--photo-capture-gap);\n width: 100%;\n }\n\n .action-button,\n .cancel-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 2.25rem;\n padding: 0.45rem 0.85rem;\n border-radius: var(--photo-capture-button-radius);\n border: 1px solid var(--photo-capture-border);\n background: var(--photo-capture-surface);\n color: var(--photo-capture-text);\n font-size: var(--font-size-xxs, 0.75rem);\n font-weight: var(--font-weight-xbold, 700);\n line-height: 1.5;\n }\n\n .action-button--primary {\n background: var(--photo-capture-trigger-background);\n color: var(--photo-capture-trigger-text);\n border-color: transparent;\n }\n `\n\n declare label: string\n declare heading: string\n declare captureLabel: string\n declare confirmLabel: string\n declare retakeLabel: string\n declare cancelLabel: string\n declare presentation: PresentationMode\n declare theme: ThemeMode\n declare facingMode: string\n declare constraints: string\n declare captureFormat: string\n declare captureQuality?: number\n declare open: boolean\n declare disabled: boolean\n declare name: string\n declare required: boolean\n declare showTrigger: boolean\n declare showCancelButton: boolean\n declare autoCloseOnCapture: boolean\n declare fileNamePrefix: string\n declare mediaConstraints?: MediaStreamConstraints\n declare _errorMessage: string\n declare _previewUrl: string\n declare _startingPreview: boolean\n\n private _value: File | null = null\n private _stream: MediaStream | null = null\n private readonly _internals: ElementInternals | null\n private _associatedForm: HTMLFormElement | null = null\n private readonly _handleFormData = (event: Event) => {\n const formData = (event as Event & { formData?: FormData }).formData\n if (!formData || !this.name || !this.value || this.disabled) return\n formData.append(this.name, this.value, this.value.name)\n }\n\n private readonly _handleFormReset = () => {\n this._clearValue({ emitEvents: false })\n if (this.open) {\n this._queuePreviewStart()\n }\n }\n\n private get _supportsFormInternals (): boolean {\n return !!this._internals && typeof this._internals.setFormValue === 'function'\n }\n\n constructor () {\n super()\n this.label = 'Take Photo'\n this.heading = 'Take a photo'\n this.captureLabel = 'Take Photo'\n this.confirmLabel = 'Use Photo'\n this.retakeLabel = 'Retake'\n this.cancelLabel = 'Cancel'\n this.presentation = 'inline'\n this.theme = 'light'\n this.facingMode = 'user'\n this.constraints = ''\n this.captureFormat = DEFAULT_CAPTURE_FORMAT\n this.captureQuality = undefined\n this.open = false\n this.disabled = false\n this.name = ''\n this.required = false\n this.showTrigger = false\n this.showCancelButton = true\n this.autoCloseOnCapture = false\n this.fileNamePrefix = ''\n this.mediaConstraints = undefined\n this._errorMessage = ''\n this._previewUrl = ''\n this._startingPreview = false\n this._internals = typeof this.attachInternals === 'function' ? this.attachInternals() : null\n }\n\n get value (): File | null {\n return this._value\n }\n\n set value (nextValue: File | null) {\n const normalizedValue = nextValue instanceof File ? nextValue : null\n const previousValue = this._value\n if (previousValue === normalizedValue) return\n\n this._value = normalizedValue\n this._syncPreviewFromValue(normalizedValue)\n this._syncFormValue()\n this._syncValidity()\n this.requestUpdate('value', previousValue)\n }\n\n get form (): HTMLFormElement | null {\n return (this._supportsFormInternals ? this._internals?.form : null) ?? this._associatedForm\n }\n\n get validationMessage (): string {\n return (typeof this._internals?.validationMessage === 'string' ? this._internals.validationMessage : '') || (this.required && !this.value ? 'Please capture a photo.' : '')\n }\n\n get willValidate (): boolean {\n return typeof this._internals?.willValidate === 'boolean' ? this._internals.willValidate : !this.disabled\n }\n\n checkValidity (): boolean {\n if (this._internals && typeof this._internals.checkValidity === 'function') {\n return this._internals.checkValidity()\n }\n return !(this.required && !this.value)\n }\n\n reportValidity (): boolean {\n if (this._internals && typeof this._internals.reportValidity === 'function') {\n return this._internals.reportValidity()\n }\n return this.checkValidity()\n }\n\n connectedCallback () {\n super.connectedCallback()\n this._syncAssociatedForm()\n this._syncFormValue()\n this._syncValidity()\n }\n\n disconnectedCallback () {\n this._syncAssociatedForm(null)\n this._stopStream()\n this._revokePreviewUrl()\n super.disconnectedCallback()\n }\n\n formResetCallback () {\n this._handleFormReset()\n }\n\n formDisabledCallback (disabled: boolean) {\n this.disabled = disabled\n }\n\n protected updated (changed: PropertyValues<this>) {\n this._syncAssociatedForm()\n\n if (this.presentation === 'dialog') {\n const dialog = this.shadowRoot?.querySelector('dialog') as HTMLDialogElement | null\n if (dialog) {\n if (this.open && !dialog.open) {\n dialog.showModal()\n } else if (!this.open && dialog.open) {\n dialog.close()\n }\n }\n }\n\n if (changed.has('open') && !this.open) {\n this._stopStream()\n }\n\n if (\n this.open &&\n !this.value &&\n !this._stream &&\n !this._startingPreview &&\n (changed.has('open') || changed.has('presentation') || changed.has('_previewUrl') || changed.has('value'))\n ) {\n this._queuePreviewStart()\n }\n\n if (changed.has('name') || changed.has('disabled') || changed.has('value')) {\n this._syncFormValue()\n }\n\n if (changed.has('required') || changed.has('disabled') || changed.has('value')) {\n this._syncValidity()\n }\n\n if (this._stream) {\n const video = this.shadowRoot?.querySelector('video.capture-preview') as HTMLVideoElement | null\n if (video && video.srcObject !== this._stream) {\n video.srcObject = this._stream\n }\n }\n }\n\n private _setOpen (open: boolean) {\n if (this.open === open) return\n this.open = open\n this.dispatchEvent(new CustomEvent<PhotoCaptureOpenChangeDetail>('open-change', {\n detail: { open },\n bubbles: true,\n composed: true\n }))\n }\n\n private _emitError (error: unknown, message = 'Unable to access the camera') {\n this._errorMessage = message\n this.dispatchEvent(new CustomEvent<PhotoCaptureErrorDetail>('error', {\n detail: { error, message },\n bubbles: true,\n composed: true\n }))\n }\n\n private _syncAssociatedForm (nextForm = this.closest('form') as HTMLFormElement | null) {\n if (this._associatedForm === nextForm) return\n\n if (this._associatedForm) {\n this._associatedForm.removeEventListener('formdata', this._handleFormData)\n this._associatedForm.removeEventListener('reset', this._handleFormReset)\n }\n\n this._associatedForm = nextForm\n\n if (this._associatedForm && !this._supportsFormInternals) {\n this._associatedForm.addEventListener('formdata', this._handleFormData)\n this._associatedForm.addEventListener('reset', this._handleFormReset)\n }\n }\n\n private _syncFormValue () {\n if (!this._supportsFormInternals) return\n const internals = this._internals\n if (!internals) return\n if (this.disabled || !this.name || !this.value) {\n internals.setFormValue(null)\n return\n }\n internals.setFormValue(this.value)\n }\n\n private _syncValidity () {\n if (!this._internals || !this._supportsFormInternals || typeof this._internals.setValidity !== 'function') return\n if (this.disabled || !this.required || this.value) {\n this._internals.setValidity({})\n return\n }\n this._internals.setValidity({ valueMissing: true }, 'Please capture a photo.')\n }\n\n private _syncPreviewFromValue (file: File | null) {\n this._revokePreviewUrl()\n if (!file) return\n this._stopStream()\n this._previewUrl = URL.createObjectURL(file)\n }\n\n private _clearValue (options: { emitEvents: boolean }) {\n this.value = null\n this._errorMessage = ''\n if (options.emitEvents) {\n this._dispatchValueEvents()\n }\n }\n\n private _dispatchValueEvents () {\n const detail = { value: this.value }\n this.dispatchEvent(new CustomEvent<PhotoCaptureValueDetail>('input', {\n detail,\n bubbles: true,\n composed: true\n }))\n this.dispatchEvent(new CustomEvent<PhotoCaptureValueDetail>('change', {\n detail,\n bubbles: true,\n composed: true\n }))\n }\n\n private _fileExtensionForMimeType (mimeType: string): string {\n switch (mimeType) {\n case 'image/jpeg':\n return 'jpg'\n case 'image/webp':\n return 'webp'\n case 'image/gif':\n return 'gif'\n default:\n return 'png'\n }\n }\n\n private _createFileFromBlob (blob: Blob): File {\n const contentType = blob.type || this.captureFormat || DEFAULT_CAPTURE_FORMAT\n const extension = this._fileExtensionForMimeType(contentType)\n const safePrefix = (this.fileNamePrefix || this.name || 'photo').trim() || 'photo'\n return new File([blob], `${safePrefix}-${Date.now()}.${extension}`, { type: contentType })\n }\n\n private _queuePreviewStart () {\n this._startPreview().catch(() => undefined)\n }\n\n private _resolveMediaConstraints (): MediaStreamConstraints {\n if (this.mediaConstraints) {\n return this.mediaConstraints\n }\n if (this.constraints) {\n try {\n return JSON.parse(this.constraints) as MediaStreamConstraints\n } catch (error) {\n throw new Error(`Invalid constraints JSON: ${(error as Error).message}`)\n }\n }\n\n return {\n video: this.facingMode\n ? { facingMode: { ideal: this.facingMode } }\n : true\n }\n }\n\n private async _startPreview () {\n if (!this.open || this.value || this._startingPreview) return\n if (!navigator.mediaDevices?.getUserMedia) {\n this._emitError(new Error('navigator.mediaDevices.getUserMedia not available'), 'Camera access is not available in this browser')\n return\n }\n\n this._startingPreview = true\n this._errorMessage = ''\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia(this._resolveMediaConstraints())\n if (!this.open) {\n stream.getTracks().forEach(track => track.stop())\n return\n }\n this._stream = stream\n this.requestUpdate()\n await this.updateComplete\n const video = this.shadowRoot?.querySelector('video.capture-preview') as HTMLVideoElement | null\n if (video) {\n video.srcObject = stream\n await video.play?.().catch(() => undefined)\n }\n } catch (error) {\n this._emitError(error, (error as Error)?.message || 'Unable to start the camera preview')\n } finally {\n this._startingPreview = false\n }\n }\n\n private _stopStream () {\n if (!this._stream) return\n this._stream.getTracks().forEach(track => track.stop())\n this._stream = null\n const video = this.shadowRoot?.querySelector('video.capture-preview') as HTMLVideoElement | null\n if (video) {\n video.srcObject = null\n }\n }\n\n private _revokePreviewUrl () {\n if (this._previewUrl) {\n URL.revokeObjectURL(this._previewUrl)\n }\n this._previewUrl = ''\n }\n\n private async _captureSnapshot () {\n const video = this.shadowRoot?.querySelector('video.capture-preview') as HTMLVideoElement | null\n if (!video) return\n\n const width = video.videoWidth || video.clientWidth || 640\n const height = video.videoHeight || video.clientHeight || 480\n const canvas = document.createElement('canvas')\n canvas.width = width\n canvas.height = height\n\n const context = canvas.getContext('2d')\n if (!context) {\n this._emitError(new Error('Canvas 2D context unavailable'), 'Unable to capture a photo in this browser')\n return\n }\n\n context.drawImage(video, 0, 0, width, height)\n\n const blob = await new Promise<Blob | null>(resolve => {\n canvas.toBlob(resolve, this.captureFormat || DEFAULT_CAPTURE_FORMAT, this.captureQuality)\n })\n\n if (!blob) {\n this._emitError(new Error('Camera snapshot failed'), 'Unable to create an image from the current camera frame')\n return\n }\n\n this.value = this._createFileFromBlob(blob)\n this._errorMessage = ''\n }\n\n private async _retakePhoto () {\n this._clearValue({ emitEvents: true })\n await this._startPreview()\n }\n\n private _confirmPhoto () {\n if (!this.value || !this._previewUrl) return\n\n this._dispatchValueEvents()\n\n this.dispatchEvent(new CustomEvent<PhotoCapturedDetail>('photo-captured', {\n detail: {\n file: this.value,\n blob: this.value,\n objectUrl: this._previewUrl,\n contentType: this.value.type || this.captureFormat || DEFAULT_CAPTURE_FORMAT\n },\n bubbles: true,\n composed: true\n }))\n\n if (this.autoCloseOnCapture) {\n this._setOpen(false)\n }\n }\n\n private _handleCancel () {\n this._stopStream()\n this._clearValue({ emitEvents: false })\n this._setOpen(false)\n this.dispatchEvent(new CustomEvent('cancel', {\n bubbles: true,\n composed: true\n }))\n }\n\n private _openCapture () {\n if (this.disabled) return\n this._setOpen(true)\n }\n\n private _renderViewport () {\n if (this._previewUrl) {\n return html`<img class=\"capture-preview\" part=\"preview-image\" src=\"${this._previewUrl}\" alt=\"Captured photo preview\" />`\n }\n\n return html`<video class=\"capture-preview\" part=\"preview-video\" autoplay playsinline muted></video>`\n }\n\n private _renderStatus () {\n if (this._errorMessage) {\n return html`<div class=\"status error\" part=\"error-message\">${this._errorMessage}</div>`\n }\n\n if (this._startingPreview) {\n return html`<div class=\"status\" part=\"status-message\">Opening camera…</div>`\n }\n\n if (!this.value) {\n return html`<div class=\"status\" part=\"status-message\">Preview the camera and take a photo when ready.</div>`\n }\n\n return html`<div class=\"status\" part=\"status-message\">Review the photo before confirming it.</div>`\n }\n\n private _renderActions () {\n return html`\n <div class=\"actions\" part=\"actions\">\n ${this.showCancelButton\n ? html`\n <button\n class=\"cancel-button\"\n part=\"cancel-button\"\n type=\"button\"\n @click=\"${this._handleCancel}\"\n >${this.cancelLabel}</button>\n `\n : nothing}\n\n ${this.value\n ? html`\n <button\n class=\"action-button\"\n part=\"retake-button\"\n type=\"button\"\n @click=\"${this._retakePhoto}\"\n >${this.retakeLabel}</button>\n <button\n class=\"action-button action-button--primary\"\n part=\"confirm-button\"\n type=\"button\"\n @click=\"${this._confirmPhoto}\"\n >${this.confirmLabel}</button>\n `\n : html`\n <button\n class=\"action-button action-button--primary\"\n part=\"capture-button\"\n type=\"button\"\n ?disabled=\"${this._startingPreview || !this._stream}\"\n @click=\"${this._captureSnapshot}\"\n >${this.captureLabel}</button>\n `}\n </div>\n `\n }\n\n private _renderPanel () {\n return html`\n <div class=\"panel\" part=\"panel\">\n <div class=\"panel-header\" part=\"header\">\n <h2 class=\"panel-heading\" part=\"heading\"><slot name=\"heading\">${this.heading}</slot></h2>\n ${this.showCancelButton\n ? html`\n <button\n class=\"close-button\"\n part=\"close-button\"\n type=\"button\"\n aria-label=\"${this.cancelLabel}\"\n @click=\"${this._handleCancel}\"\n >&times;</button>\n `\n : nothing}\n </div>\n <div class=\"viewport\" part=\"viewport\">${this._renderViewport()}</div>\n ${this._renderStatus()}\n ${this._renderActions()}\n </div>\n `\n }\n\n render () {\n const trigger = this.showTrigger || this.presentation === 'dialog'\n\n return html`\n ${trigger\n ? html`\n <button\n class=\"trigger-button\"\n part=\"trigger-button\"\n type=\"button\"\n ?disabled=\"${this.disabled}\"\n @click=\"${this._openCapture}\"\n ><slot>${this.label}</slot></button>\n `\n : nothing}\n\n ${this.presentation === 'dialog'\n ? html`\n <dialog\n class=\"dialog\"\n part=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"${this.heading}\"\n @cancel=\"${(event: Event) => { event.preventDefault(); this._handleCancel() }}\"\n @click=\"${(event: MouseEvent) => {\n if (event.target === event.currentTarget) {\n this._handleCancel()\n }\n }}\"\n >\n ${this.open ? this._renderPanel() : nothing}\n </dialog>\n `\n : html`\n <div class=\"inline-root\" part=\"inline-root\" ?hidden=\"${!this.open}\">\n ${this.open ? this._renderPanel() : nothing}\n </div>\n `}\n `\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"PhotoCapture.cjs.js","names":[],"sources":["../../../../../src/v2/components/media/photoCapture/PhotoCapture.ts"],"sourcesContent":["import { LitElement, css, html, nothing, type PropertyValues } from 'lit'\n/* The original code was written by Sir Tim Berners-Lee. It was made into a\nweb component by AI Model GPT-5.4\nPrompt: Take the code from src/media/media-capture.ts and make it a\nweb component. Make it work in forms as well as not. Make it\nconfigurable and follow LoginButton. */\nexport interface PhotoCapturedDetail {\n file: File\n blob: Blob\n objectUrl: string\n contentType: string\n}\n\nexport interface PhotoCaptureErrorDetail {\n error: unknown\n message: string\n}\n\nexport interface PhotoCaptureOpenChangeDetail {\n open: boolean\n}\n\nexport interface PhotoCaptureValueDetail {\n value: File | null\n}\n\ntype PresentationMode = 'inline' | 'dialog'\ntype ThemeMode = 'light' | 'dark'\n\nconst DEFAULT_CAPTURE_FORMAT = 'image/png'\n\nexport class PhotoCapture extends LitElement {\n static formAssociated = true\n\n static properties = {\n label: { type: String, reflect: true },\n heading: { type: String, reflect: true },\n captureLabel: { type: String, attribute: 'capture-label', reflect: true },\n confirmLabel: { type: String, attribute: 'confirm-label', reflect: true },\n retakeLabel: { type: String, attribute: 'retake-label', reflect: true },\n cancelLabel: { type: String, attribute: 'cancel-label', reflect: true },\n presentation: { type: String, reflect: true },\n theme: { type: String, reflect: true },\n facingMode: { type: String, attribute: 'facing-mode', reflect: true },\n constraints: { type: String, reflect: true },\n captureFormat: { type: String, attribute: 'capture-format', reflect: true },\n captureQuality: { type: Number, attribute: 'capture-quality' },\n open: { type: Boolean, reflect: true },\n disabled: { type: Boolean, reflect: true },\n name: { type: String, reflect: true },\n required: { type: Boolean, reflect: true },\n showTrigger: { type: Boolean, attribute: 'show-trigger', reflect: true },\n showCancelButton: { type: Boolean, attribute: 'show-cancel-button', reflect: true },\n autoCloseOnCapture: { type: Boolean, attribute: 'auto-close-on-capture' },\n fileNamePrefix: { type: String, attribute: 'file-name-prefix', reflect: true },\n value: { attribute: false },\n mediaConstraints: { attribute: false },\n _errorMessage: { state: true },\n _previewUrl: { state: true },\n _startingPreview: { state: true }\n }\n\n static styles = css`\n :host {\n display: block;\n --photo-capture-trigger-background: var(--lavender-900, #7c4cff);\n --photo-capture-trigger-text: var(--color-header-text, #ffffff);\n --photo-capture-surface: var(--color-background, #ffffff);\n --photo-capture-text: var(--gray-900, #101828);\n --photo-capture-muted-text: var(--gray-600, #4a5565);\n --photo-capture-border: var(--gray-200, #e5e7eb);\n --photo-capture-hover: var(--gray-100, #f3f4f6);\n --photo-capture-shadow: var(--box-shadow-sm, 0 1px 4px rgba(0, 0, 0, 0.12));\n --photo-capture-overlay: rgba(0, 0, 0, 0.6);\n --photo-capture-frame-max-width: 260px;\n --photo-capture-radius: 8px;\n --photo-capture-button-radius: var(--border-radius-base, 0.3125rem);\n --photo-capture-gap: var(--spacing-2xs, 0.625rem);\n color: var(--photo-capture-text);\n box-sizing: border-box;\n }\n\n :host([theme='dark']) {\n --photo-capture-surface: var(--gray-900, #111827);\n --photo-capture-text: var(--white, #ffffff);\n --photo-capture-muted-text: var(--gray-300, #d1d5dc);\n --photo-capture-border: var(--gray-700, #364153);\n --photo-capture-hover: rgba(255, 255, 255, 0.08);\n --photo-capture-shadow: 0 10px 30px rgba(0, 0, 0, 0.35);\n }\n\n *, *::before, *::after {\n box-sizing: border-box;\n }\n\n .trigger-button,\n .action-button,\n .cancel-button,\n .close-button {\n font: inherit;\n cursor: pointer;\n }\n\n .trigger-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 35px;\n padding: 0.5rem 0.9rem;\n border: none;\n border-radius: var(--photo-capture-button-radius);\n background: var(--photo-capture-trigger-background);\n color: var(--photo-capture-trigger-text);\n transition: transform 0.2s ease;\n }\n\n .trigger-button:active {\n transform: translateY(1px);\n }\n\n .trigger-button:disabled,\n .action-button:disabled,\n .cancel-button:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n }\n\n .inline-root[hidden] {\n display: none;\n }\n\n .dialog {\n border: none;\n padding: 0;\n background: transparent;\n outline: none;\n overflow: visible;\n max-width: none;\n max-height: none;\n }\n\n .dialog::backdrop {\n background: var(--photo-capture-overlay);\n }\n\n .panel {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--photo-capture-gap);\n width: min(100%, 340px);\n padding: 1rem;\n border: 1px solid var(--photo-capture-border);\n border-radius: var(--photo-capture-radius);\n background: var(--photo-capture-surface);\n color: var(--photo-capture-text);\n box-shadow: var(--photo-capture-shadow);\n }\n\n .panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.5rem;\n width: 100%;\n }\n\n .panel-heading {\n margin: 0;\n font-size: 1rem;\n font-weight: 700;\n line-height: 1.4;\n }\n\n .close-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n padding: 0;\n border: none;\n border-radius: 999px;\n background: transparent;\n color: var(--photo-capture-muted-text);\n font-size: 1.125rem;\n line-height: 1;\n }\n\n .close-button:hover,\n .close-button:focus-visible,\n .action-button:hover,\n .action-button:focus-visible,\n .cancel-button:hover,\n .cancel-button:focus-visible {\n background: var(--photo-capture-hover);\n }\n\n .viewport {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n min-height: 200px;\n border-radius: 0.5rem;\n overflow: hidden;\n background: color-mix(in srgb, var(--photo-capture-surface) 92%, #000 8%);\n }\n\n .viewport video,\n .viewport img {\n display: block;\n width: 100%;\n max-width: var(--photo-capture-frame-max-width);\n height: auto;\n border-radius: 0.5rem;\n margin: 0 auto;\n object-fit: cover;\n }\n\n .status {\n width: 100%;\n text-align: center;\n color: var(--photo-capture-muted-text);\n font-size: 0.875rem;\n }\n\n .status.error {\n color: var(--color-error, #b00020);\n }\n\n .actions {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-wrap: wrap;\n gap: var(--photo-capture-gap);\n width: 100%;\n }\n\n .action-button,\n .cancel-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 2.25rem;\n padding: 0.45rem 0.85rem;\n border-radius: var(--photo-capture-button-radius);\n border: 1px solid var(--photo-capture-border);\n background: var(--photo-capture-surface);\n color: var(--photo-capture-text);\n font-size: var(--font-size-xxs, 0.75rem);\n font-weight: var(--font-weight-xbold, 700);\n line-height: 1.5;\n }\n\n .action-button--primary {\n background: var(--photo-capture-trigger-background);\n color: var(--photo-capture-trigger-text);\n border-color: transparent;\n }\n `\n\n declare label: string\n declare heading: string\n declare captureLabel: string\n declare confirmLabel: string\n declare retakeLabel: string\n declare cancelLabel: string\n declare presentation: PresentationMode\n declare theme: ThemeMode\n declare facingMode: string\n declare constraints: string\n declare captureFormat: string\n declare captureQuality?: number\n declare open: boolean\n declare disabled: boolean\n declare name: string\n declare required: boolean\n declare showTrigger: boolean\n declare showCancelButton: boolean\n declare autoCloseOnCapture: boolean\n declare fileNamePrefix: string\n declare mediaConstraints?: MediaStreamConstraints\n declare _errorMessage: string\n declare _previewUrl: string\n declare _startingPreview: boolean\n\n private _value: File | null = null\n private _stream: MediaStream | null = null\n private readonly _internals: ElementInternals | null\n private _associatedForm: HTMLFormElement | null = null\n private readonly _handleFormData = (event: Event) => {\n const formData = (event as Event & { formData?: FormData }).formData\n if (!formData || !this.name || !this.value || this.disabled) return\n formData.append(this.name, this.value, this.value.name)\n }\n\n private readonly _handleFormReset = () => {\n this._clearValue({ emitEvents: false })\n if (this.open) {\n this._queuePreviewStart()\n }\n }\n\n private get _supportsFormInternals (): boolean {\n return !!this._internals && typeof this._internals.setFormValue === 'function'\n }\n\n constructor () {\n super()\n this.label = 'Take Photo'\n this.heading = 'Take a photo'\n this.captureLabel = 'Take Photo'\n this.confirmLabel = 'Use Photo'\n this.retakeLabel = 'Retake'\n this.cancelLabel = 'Cancel'\n this.presentation = 'inline'\n this.theme = 'light'\n this.facingMode = 'user'\n this.constraints = ''\n this.captureFormat = DEFAULT_CAPTURE_FORMAT\n this.captureQuality = undefined\n this.open = false\n this.disabled = false\n this.name = ''\n this.required = false\n this.showTrigger = false\n this.showCancelButton = true\n this.autoCloseOnCapture = false\n this.fileNamePrefix = ''\n this.mediaConstraints = undefined\n this._errorMessage = ''\n this._previewUrl = ''\n this._startingPreview = false\n this._internals = typeof this.attachInternals === 'function' ? this.attachInternals() : null\n }\n\n get value (): File | null {\n return this._value\n }\n\n set value (nextValue: File | null) {\n const normalizedValue = nextValue instanceof File ? nextValue : null\n const previousValue = this._value\n if (previousValue === normalizedValue) return\n\n this._value = normalizedValue\n this._syncPreviewFromValue(normalizedValue)\n this._syncFormValue()\n this._syncValidity()\n this.requestUpdate('value', previousValue)\n }\n\n get form (): HTMLFormElement | null {\n return (this._supportsFormInternals ? this._internals?.form : null) ?? this._associatedForm\n }\n\n get validationMessage (): string {\n return (typeof this._internals?.validationMessage === 'string' ? this._internals.validationMessage : '') || (this.required && !this.value ? 'Please capture a photo.' : '')\n }\n\n get willValidate (): boolean {\n return typeof this._internals?.willValidate === 'boolean' ? this._internals.willValidate : !this.disabled\n }\n\n checkValidity (): boolean {\n if (this._internals && typeof this._internals.checkValidity === 'function') {\n return this._internals.checkValidity()\n }\n return !(this.required && !this.value)\n }\n\n reportValidity (): boolean {\n if (this._internals && typeof this._internals.reportValidity === 'function') {\n return this._internals.reportValidity()\n }\n return this.checkValidity()\n }\n\n connectedCallback () {\n super.connectedCallback()\n this._syncAssociatedForm()\n this._syncFormValue()\n this._syncValidity()\n }\n\n disconnectedCallback () {\n this._syncAssociatedForm(null)\n this._stopStream()\n this._revokePreviewUrl()\n super.disconnectedCallback()\n }\n\n formResetCallback () {\n this._handleFormReset()\n }\n\n formDisabledCallback (disabled: boolean) {\n this.disabled = disabled\n }\n\n protected updated (changed: PropertyValues<this>) {\n this._syncAssociatedForm()\n\n if (this.presentation === 'dialog') {\n const dialog = this.shadowRoot?.querySelector('dialog') as HTMLDialogElement | null\n if (dialog) {\n if (this.open && !dialog.open) {\n dialog.showModal()\n } else if (!this.open && dialog.open) {\n dialog.close()\n }\n }\n }\n\n if (changed.has('open') && !this.open) {\n this._stopStream()\n }\n\n if (\n this.open &&\n !this.value &&\n !this._stream &&\n !this._startingPreview &&\n (changed.has('open') || changed.has('presentation') || changed.has('_previewUrl') || changed.has('value'))\n ) {\n this._queuePreviewStart()\n }\n\n if (changed.has('name') || changed.has('disabled') || changed.has('value')) {\n this._syncFormValue()\n }\n\n if (changed.has('required') || changed.has('disabled') || changed.has('value')) {\n this._syncValidity()\n }\n\n if (this._stream) {\n const video = this.shadowRoot?.querySelector('video.capture-preview') as HTMLVideoElement | null\n if (video && video.srcObject !== this._stream) {\n video.srcObject = this._stream\n }\n }\n }\n\n private _setOpen (open: boolean) {\n if (this.open === open) return\n this.open = open\n this.dispatchEvent(new CustomEvent<PhotoCaptureOpenChangeDetail>('open-change', {\n detail: { open },\n bubbles: true,\n composed: true\n }))\n }\n\n private _emitError (error: unknown, message = 'Unable to access the camera') {\n this._errorMessage = message\n this.dispatchEvent(new CustomEvent<PhotoCaptureErrorDetail>('error', {\n detail: { error, message },\n bubbles: true,\n composed: true\n }))\n }\n\n private _syncAssociatedForm (nextForm = this.closest('form') as HTMLFormElement | null) {\n if (this._associatedForm === nextForm) return\n\n if (this._associatedForm) {\n this._associatedForm.removeEventListener('formdata', this._handleFormData)\n this._associatedForm.removeEventListener('reset', this._handleFormReset)\n }\n\n this._associatedForm = nextForm\n\n if (this._associatedForm && !this._supportsFormInternals) {\n this._associatedForm.addEventListener('formdata', this._handleFormData)\n this._associatedForm.addEventListener('reset', this._handleFormReset)\n }\n }\n\n private _syncFormValue () {\n if (!this._supportsFormInternals) return\n const internals = this._internals\n if (!internals) return\n if (this.disabled || !this.name || !this.value) {\n internals.setFormValue(null)\n return\n }\n internals.setFormValue(this.value)\n }\n\n private _syncValidity () {\n if (!this._internals || !this._supportsFormInternals || typeof this._internals.setValidity !== 'function') return\n if (this.disabled || !this.required || this.value) {\n this._internals.setValidity({})\n return\n }\n this._internals.setValidity({ valueMissing: true }, 'Please capture a photo.')\n }\n\n private _syncPreviewFromValue (file: File | null) {\n this._revokePreviewUrl()\n if (!file) return\n this._stopStream()\n this._previewUrl = URL.createObjectURL(file)\n }\n\n private _clearValue (options: { emitEvents: boolean }) {\n this.value = null\n this._errorMessage = ''\n if (options.emitEvents) {\n this._dispatchValueEvents()\n }\n }\n\n private _dispatchValueEvents () {\n const detail = { value: this.value }\n this.dispatchEvent(new CustomEvent<PhotoCaptureValueDetail>('input', {\n detail,\n bubbles: true,\n composed: true\n }))\n this.dispatchEvent(new CustomEvent<PhotoCaptureValueDetail>('change', {\n detail,\n bubbles: true,\n composed: true\n }))\n }\n\n private _fileExtensionForMimeType (mimeType: string): string {\n switch (mimeType) {\n case 'image/jpeg':\n return 'jpg'\n case 'image/webp':\n return 'webp'\n case 'image/gif':\n return 'gif'\n default:\n return 'png'\n }\n }\n\n private _createFileFromBlob (blob: Blob): File {\n const contentType = blob.type || this.captureFormat || DEFAULT_CAPTURE_FORMAT\n const extension = this._fileExtensionForMimeType(contentType)\n const safePrefix = (this.fileNamePrefix || this.name || 'photo').trim() || 'photo'\n return new File([blob], `${safePrefix}-${Date.now()}.${extension}`, { type: contentType })\n }\n\n private _queuePreviewStart () {\n this._startPreview().catch(() => undefined)\n }\n\n private _resolveMediaConstraints (): MediaStreamConstraints {\n if (this.mediaConstraints) {\n return this.mediaConstraints\n }\n if (this.constraints) {\n try {\n return JSON.parse(this.constraints) as MediaStreamConstraints\n } catch (error) {\n throw new Error(`Invalid constraints JSON: ${(error as Error).message}`)\n }\n }\n\n return {\n video: this.facingMode\n ? { facingMode: { ideal: this.facingMode } }\n : true\n }\n }\n\n private async _startPreview () {\n if (!this.open || this.value || this._startingPreview) return\n if (!navigator.mediaDevices?.getUserMedia) {\n this._emitError(new Error('navigator.mediaDevices.getUserMedia not available'), 'Camera access is not available in this browser')\n return\n }\n\n this._startingPreview = true\n this._errorMessage = ''\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia(this._resolveMediaConstraints())\n if (!this.open) {\n stream.getTracks().forEach(track => track.stop())\n return\n }\n this._stream = stream\n this.requestUpdate()\n await this.updateComplete\n const video = this.shadowRoot?.querySelector('video.capture-preview') as HTMLVideoElement | null\n if (video) {\n video.srcObject = stream\n await video.play?.().catch(() => undefined)\n }\n } catch (error) {\n this._emitError(error, (error as Error)?.message || 'Unable to start the camera preview')\n } finally {\n this._startingPreview = false\n }\n }\n\n private _stopStream () {\n if (!this._stream) return\n this._stream.getTracks().forEach(track => track.stop())\n this._stream = null\n const video = this.shadowRoot?.querySelector('video.capture-preview') as HTMLVideoElement | null\n if (video) {\n video.srcObject = null\n }\n }\n\n private _revokePreviewUrl () {\n if (this._previewUrl) {\n URL.revokeObjectURL(this._previewUrl)\n }\n this._previewUrl = ''\n }\n\n private async _captureSnapshot () {\n const video = this.shadowRoot?.querySelector('video.capture-preview') as HTMLVideoElement | null\n if (!video) return\n\n const width = video.videoWidth || video.clientWidth || 640\n const height = video.videoHeight || video.clientHeight || 480\n const canvas = document.createElement('canvas')\n canvas.width = width\n canvas.height = height\n\n const context = canvas.getContext('2d')\n if (!context) {\n this._emitError(new Error('Canvas 2D context unavailable'), 'Unable to capture a photo in this browser')\n return\n }\n\n context.drawImage(video, 0, 0, width, height)\n\n const blob = await new Promise<Blob | null>(resolve => {\n canvas.toBlob(resolve, this.captureFormat || DEFAULT_CAPTURE_FORMAT, this.captureQuality)\n })\n\n if (!blob) {\n this._emitError(new Error('Camera snapshot failed'), 'Unable to create an image from the current camera frame')\n return\n }\n\n this.value = this._createFileFromBlob(blob)\n this._errorMessage = ''\n }\n\n private async _retakePhoto () {\n this._clearValue({ emitEvents: true })\n await this._startPreview()\n }\n\n private _confirmPhoto () {\n if (!this.value || !this._previewUrl) return\n\n this._dispatchValueEvents()\n\n this.dispatchEvent(new CustomEvent<PhotoCapturedDetail>('photo-captured', {\n detail: {\n file: this.value,\n blob: this.value,\n objectUrl: this._previewUrl,\n contentType: this.value.type || this.captureFormat || DEFAULT_CAPTURE_FORMAT\n },\n bubbles: true,\n composed: true\n }))\n\n if (this.autoCloseOnCapture) {\n this._setOpen(false)\n }\n }\n\n private _handleCancel () {\n this._stopStream()\n this._clearValue({ emitEvents: false })\n this._setOpen(false)\n this.dispatchEvent(new CustomEvent('cancel', {\n bubbles: true,\n composed: true\n }))\n }\n\n private _openCapture () {\n if (this.disabled) return\n this._setOpen(true)\n }\n\n private _renderViewport () {\n if (this._previewUrl) {\n return html`<img class=\"capture-preview\" part=\"preview-image\" src=\"${this._previewUrl}\" alt=\"Captured photo preview\" />`\n }\n\n return html`<video class=\"capture-preview\" part=\"preview-video\" autoplay playsinline muted></video>`\n }\n\n private _renderStatus () {\n if (this._errorMessage) {\n return html`<div class=\"status error\" part=\"error-message\">${this._errorMessage}</div>`\n }\n\n if (this._startingPreview) {\n return html`<div class=\"status\" part=\"status-message\">Opening camera…</div>`\n }\n\n if (!this.value) {\n return html`<div class=\"status\" part=\"status-message\">Preview the camera and take a photo when ready.</div>`\n }\n\n return html`<div class=\"status\" part=\"status-message\">Review the photo before confirming it.</div>`\n }\n\n private _renderActions () {\n return html`\n <div class=\"actions\" part=\"actions\">\n ${this.showCancelButton\n ? html`\n <button\n class=\"cancel-button\"\n part=\"cancel-button\"\n type=\"button\"\n @click=\"${this._handleCancel}\"\n >${this.cancelLabel}</button>\n `\n : nothing}\n\n ${this.value\n ? html`\n <button\n class=\"action-button\"\n part=\"retake-button\"\n type=\"button\"\n @click=\"${this._retakePhoto}\"\n >${this.retakeLabel}</button>\n <button\n class=\"action-button action-button--primary\"\n part=\"confirm-button\"\n type=\"button\"\n @click=\"${this._confirmPhoto}\"\n >${this.confirmLabel}</button>\n `\n : html`\n <button\n class=\"action-button action-button--primary\"\n part=\"capture-button\"\n type=\"button\"\n ?disabled=\"${this._startingPreview || !this._stream}\"\n @click=\"${this._captureSnapshot}\"\n >${this.captureLabel}</button>\n `}\n </div>\n `\n }\n\n private _renderPanel () {\n return html`\n <div class=\"panel\" part=\"panel\">\n <div class=\"panel-header\" part=\"header\">\n <h2 class=\"panel-heading\" part=\"heading\"><slot name=\"heading\">${this.heading}</slot></h2>\n ${this.showCancelButton\n ? html`\n <button\n class=\"close-button\"\n part=\"close-button\"\n type=\"button\"\n aria-label=\"${this.cancelLabel}\"\n @click=\"${this._handleCancel}\"\n >&times;</button>\n `\n : nothing}\n </div>\n <div class=\"viewport\" part=\"viewport\">${this._renderViewport()}</div>\n ${this._renderStatus()}\n ${this._renderActions()}\n </div>\n `\n }\n\n render () {\n const trigger = this.showTrigger || this.presentation === 'dialog'\n\n return html`\n ${trigger\n ? html`\n <button\n class=\"trigger-button\"\n part=\"trigger-button\"\n type=\"button\"\n ?disabled=\"${this.disabled}\"\n @click=\"${this._openCapture}\"\n ><slot>${this.label}</slot></button>\n `\n : nothing}\n\n ${this.presentation === 'dialog'\n ? html`\n <dialog\n class=\"dialog\"\n part=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"${this.heading}\"\n @cancel=\"${(event: Event) => { event.preventDefault(); this._handleCancel() }}\"\n @click=\"${(event: MouseEvent) => {\n if (event.target === event.currentTarget) {\n this._handleCancel()\n }\n }}\"\n >\n ${this.open ? this._renderPanel() : nothing}\n </dialog>\n `\n : html`\n <div class=\"inline-root\" part=\"inline-root\" ?hidden=\"${!this.open}\">\n ${this.open ? this._renderPanel() : nothing}\n </div>\n `}\n `\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PhotoCapture.esm.js","names":[],"sources":["../../../../../src/v2/components/media/photoCapture/PhotoCapture.ts"],"sourcesContent":["import { LitElement, css, html, nothing, type PropertyValues } from 'lit'\n/* The original code was written by Sir Tim Berners-Lee. It was made into a\nweb component by AI Model GPT-5.4\nPrompt: Take the code from src/media/media-capture.ts and make it a\nweb component. Make it work in forms as well as not. Make it\nconfigurable and follow LoginButton. */\nexport interface PhotoCapturedDetail {\n file: File\n blob: Blob\n objectUrl: string\n contentType: string\n}\n\nexport interface PhotoCaptureErrorDetail {\n error: unknown\n message: string\n}\n\nexport interface PhotoCaptureOpenChangeDetail {\n open: boolean\n}\n\nexport interface PhotoCaptureValueDetail {\n value: File | null\n}\n\ntype PresentationMode = 'inline' | 'dialog'\ntype ThemeMode = 'light' | 'dark'\n\nconst DEFAULT_CAPTURE_FORMAT = 'image/png'\n\nexport class PhotoCapture extends LitElement {\n static formAssociated = true\n\n static properties = {\n label: { type: String, reflect: true },\n heading: { type: String, reflect: true },\n captureLabel: { type: String, attribute: 'capture-label', reflect: true },\n confirmLabel: { type: String, attribute: 'confirm-label', reflect: true },\n retakeLabel: { type: String, attribute: 'retake-label', reflect: true },\n cancelLabel: { type: String, attribute: 'cancel-label', reflect: true },\n presentation: { type: String, reflect: true },\n theme: { type: String, reflect: true },\n facingMode: { type: String, attribute: 'facing-mode', reflect: true },\n constraints: { type: String, reflect: true },\n captureFormat: { type: String, attribute: 'capture-format', reflect: true },\n captureQuality: { type: Number, attribute: 'capture-quality' },\n open: { type: Boolean, reflect: true },\n disabled: { type: Boolean, reflect: true },\n name: { type: String, reflect: true },\n required: { type: Boolean, reflect: true },\n showTrigger: { type: Boolean, attribute: 'show-trigger', reflect: true },\n showCancelButton: { type: Boolean, attribute: 'show-cancel-button', reflect: true },\n autoCloseOnCapture: { type: Boolean, attribute: 'auto-close-on-capture' },\n fileNamePrefix: { type: String, attribute: 'file-name-prefix', reflect: true },\n value: { attribute: false },\n mediaConstraints: { attribute: false },\n _errorMessage: { state: true },\n _previewUrl: { state: true },\n _startingPreview: { state: true }\n }\n\n static styles = css`\n :host {\n display: block;\n --photo-capture-trigger-background: var(--lavender-900, #7c4cff);\n --photo-capture-trigger-text: var(--color-header-text, #ffffff);\n --photo-capture-surface: var(--color-background, #ffffff);\n --photo-capture-text: var(--gray-900, #101828);\n --photo-capture-muted-text: var(--gray-600, #4a5565);\n --photo-capture-border: var(--gray-200, #e5e7eb);\n --photo-capture-hover: var(--gray-100, #f3f4f6);\n --photo-capture-shadow: var(--box-shadow-sm, 0 1px 4px rgba(0, 0, 0, 0.12));\n --photo-capture-overlay: rgba(0, 0, 0, 0.6);\n --photo-capture-frame-max-width: 260px;\n --photo-capture-radius: 8px;\n --photo-capture-button-radius: var(--border-radius-base, 0.3125rem);\n --photo-capture-gap: var(--spacing-2xs, 0.625rem);\n color: var(--photo-capture-text);\n box-sizing: border-box;\n }\n\n :host([theme='dark']) {\n --photo-capture-surface: var(--gray-900, #111827);\n --photo-capture-text: var(--white, #ffffff);\n --photo-capture-muted-text: var(--gray-300, #d1d5dc);\n --photo-capture-border: var(--gray-700, #364153);\n --photo-capture-hover: rgba(255, 255, 255, 0.08);\n --photo-capture-shadow: 0 10px 30px rgba(0, 0, 0, 0.35);\n }\n\n *, *::before, *::after {\n box-sizing: border-box;\n }\n\n .trigger-button,\n .action-button,\n .cancel-button,\n .close-button {\n font: inherit;\n cursor: pointer;\n }\n\n .trigger-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 35px;\n padding: 0.5rem 0.9rem;\n border: none;\n border-radius: var(--photo-capture-button-radius);\n background: var(--photo-capture-trigger-background);\n color: var(--photo-capture-trigger-text);\n transition: transform 0.2s ease;\n }\n\n .trigger-button:active {\n transform: translateY(1px);\n }\n\n .trigger-button:disabled,\n .action-button:disabled,\n .cancel-button:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n }\n\n .inline-root[hidden] {\n display: none;\n }\n\n .dialog {\n border: none;\n padding: 0;\n background: transparent;\n outline: none;\n overflow: visible;\n max-width: none;\n max-height: none;\n }\n\n .dialog::backdrop {\n background: var(--photo-capture-overlay);\n }\n\n .panel {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--photo-capture-gap);\n width: min(100%, 340px);\n padding: 1rem;\n border: 1px solid var(--photo-capture-border);\n border-radius: var(--photo-capture-radius);\n background: var(--photo-capture-surface);\n color: var(--photo-capture-text);\n box-shadow: var(--photo-capture-shadow);\n }\n\n .panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.5rem;\n width: 100%;\n }\n\n .panel-heading {\n margin: 0;\n font-size: 1rem;\n font-weight: 700;\n line-height: 1.4;\n }\n\n .close-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n padding: 0;\n border: none;\n border-radius: 999px;\n background: transparent;\n color: var(--photo-capture-muted-text);\n font-size: 1.125rem;\n line-height: 1;\n }\n\n .close-button:hover,\n .close-button:focus-visible,\n .action-button:hover,\n .action-button:focus-visible,\n .cancel-button:hover,\n .cancel-button:focus-visible {\n background: var(--photo-capture-hover);\n }\n\n .viewport {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n min-height: 200px;\n border-radius: 0.5rem;\n overflow: hidden;\n background: color-mix(in srgb, var(--photo-capture-surface) 92%, #000 8%);\n }\n\n .viewport video,\n .viewport img {\n display: block;\n width: 100%;\n max-width: var(--photo-capture-frame-max-width);\n height: auto;\n border-radius: 0.5rem;\n margin: 0 auto;\n object-fit: cover;\n }\n\n .status {\n width: 100%;\n text-align: center;\n color: var(--photo-capture-muted-text);\n font-size: 0.875rem;\n }\n\n .status.error {\n color: var(--color-error, #b00020);\n }\n\n .actions {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-wrap: wrap;\n gap: var(--photo-capture-gap);\n width: 100%;\n }\n\n .action-button,\n .cancel-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 2.25rem;\n padding: 0.45rem 0.85rem;\n border-radius: var(--photo-capture-button-radius);\n border: 1px solid var(--photo-capture-border);\n background: var(--photo-capture-surface);\n color: var(--photo-capture-text);\n font-size: var(--font-size-xxs, 0.75rem);\n font-weight: var(--font-weight-xbold, 700);\n line-height: 1.5;\n }\n\n .action-button--primary {\n background: var(--photo-capture-trigger-background);\n color: var(--photo-capture-trigger-text);\n border-color: transparent;\n }\n `\n\n declare label: string\n declare heading: string\n declare captureLabel: string\n declare confirmLabel: string\n declare retakeLabel: string\n declare cancelLabel: string\n declare presentation: PresentationMode\n declare theme: ThemeMode\n declare facingMode: string\n declare constraints: string\n declare captureFormat: string\n declare captureQuality?: number\n declare open: boolean\n declare disabled: boolean\n declare name: string\n declare required: boolean\n declare showTrigger: boolean\n declare showCancelButton: boolean\n declare autoCloseOnCapture: boolean\n declare fileNamePrefix: string\n declare mediaConstraints?: MediaStreamConstraints\n declare _errorMessage: string\n declare _previewUrl: string\n declare _startingPreview: boolean\n\n private _value: File | null = null\n private _stream: MediaStream | null = null\n private readonly _internals: ElementInternals | null\n private _associatedForm: HTMLFormElement | null = null\n private readonly _handleFormData = (event: Event) => {\n const formData = (event as Event & { formData?: FormData }).formData\n if (!formData || !this.name || !this.value || this.disabled) return\n formData.append(this.name, this.value, this.value.name)\n }\n\n private readonly _handleFormReset = () => {\n this._clearValue({ emitEvents: false })\n if (this.open) {\n this._queuePreviewStart()\n }\n }\n\n private get _supportsFormInternals (): boolean {\n return !!this._internals && typeof this._internals.setFormValue === 'function'\n }\n\n constructor () {\n super()\n this.label = 'Take Photo'\n this.heading = 'Take a photo'\n this.captureLabel = 'Take Photo'\n this.confirmLabel = 'Use Photo'\n this.retakeLabel = 'Retake'\n this.cancelLabel = 'Cancel'\n this.presentation = 'inline'\n this.theme = 'light'\n this.facingMode = 'user'\n this.constraints = ''\n this.captureFormat = DEFAULT_CAPTURE_FORMAT\n this.captureQuality = undefined\n this.open = false\n this.disabled = false\n this.name = ''\n this.required = false\n this.showTrigger = false\n this.showCancelButton = true\n this.autoCloseOnCapture = false\n this.fileNamePrefix = ''\n this.mediaConstraints = undefined\n this._errorMessage = ''\n this._previewUrl = ''\n this._startingPreview = false\n this._internals = typeof this.attachInternals === 'function' ? this.attachInternals() : null\n }\n\n get value (): File | null {\n return this._value\n }\n\n set value (nextValue: File | null) {\n const normalizedValue = nextValue instanceof File ? nextValue : null\n const previousValue = this._value\n if (previousValue === normalizedValue) return\n\n this._value = normalizedValue\n this._syncPreviewFromValue(normalizedValue)\n this._syncFormValue()\n this._syncValidity()\n this.requestUpdate('value', previousValue)\n }\n\n get form (): HTMLFormElement | null {\n return (this._supportsFormInternals ? this._internals?.form : null) ?? this._associatedForm\n }\n\n get validationMessage (): string {\n return (typeof this._internals?.validationMessage === 'string' ? this._internals.validationMessage : '') || (this.required && !this.value ? 'Please capture a photo.' : '')\n }\n\n get willValidate (): boolean {\n return typeof this._internals?.willValidate === 'boolean' ? this._internals.willValidate : !this.disabled\n }\n\n checkValidity (): boolean {\n if (this._internals && typeof this._internals.checkValidity === 'function') {\n return this._internals.checkValidity()\n }\n return !(this.required && !this.value)\n }\n\n reportValidity (): boolean {\n if (this._internals && typeof this._internals.reportValidity === 'function') {\n return this._internals.reportValidity()\n }\n return this.checkValidity()\n }\n\n connectedCallback () {\n super.connectedCallback()\n this._syncAssociatedForm()\n this._syncFormValue()\n this._syncValidity()\n }\n\n disconnectedCallback () {\n this._syncAssociatedForm(null)\n this._stopStream()\n this._revokePreviewUrl()\n super.disconnectedCallback()\n }\n\n formResetCallback () {\n this._handleFormReset()\n }\n\n formDisabledCallback (disabled: boolean) {\n this.disabled = disabled\n }\n\n protected updated (changed: PropertyValues<this>) {\n this._syncAssociatedForm()\n\n if (this.presentation === 'dialog') {\n const dialog = this.shadowRoot?.querySelector('dialog') as HTMLDialogElement | null\n if (dialog) {\n if (this.open && !dialog.open) {\n dialog.showModal()\n } else if (!this.open && dialog.open) {\n dialog.close()\n }\n }\n }\n\n if (changed.has('open') && !this.open) {\n this._stopStream()\n }\n\n if (\n this.open &&\n !this.value &&\n !this._stream &&\n !this._startingPreview &&\n (changed.has('open') || changed.has('presentation') || changed.has('_previewUrl') || changed.has('value'))\n ) {\n this._queuePreviewStart()\n }\n\n if (changed.has('name') || changed.has('disabled') || changed.has('value')) {\n this._syncFormValue()\n }\n\n if (changed.has('required') || changed.has('disabled') || changed.has('value')) {\n this._syncValidity()\n }\n\n if (this._stream) {\n const video = this.shadowRoot?.querySelector('video.capture-preview') as HTMLVideoElement | null\n if (video && video.srcObject !== this._stream) {\n video.srcObject = this._stream\n }\n }\n }\n\n private _setOpen (open: boolean) {\n if (this.open === open) return\n this.open = open\n this.dispatchEvent(new CustomEvent<PhotoCaptureOpenChangeDetail>('open-change', {\n detail: { open },\n bubbles: true,\n composed: true\n }))\n }\n\n private _emitError (error: unknown, message = 'Unable to access the camera') {\n this._errorMessage = message\n this.dispatchEvent(new CustomEvent<PhotoCaptureErrorDetail>('error', {\n detail: { error, message },\n bubbles: true,\n composed: true\n }))\n }\n\n private _syncAssociatedForm (nextForm = this.closest('form') as HTMLFormElement | null) {\n if (this._associatedForm === nextForm) return\n\n if (this._associatedForm) {\n this._associatedForm.removeEventListener('formdata', this._handleFormData)\n this._associatedForm.removeEventListener('reset', this._handleFormReset)\n }\n\n this._associatedForm = nextForm\n\n if (this._associatedForm && !this._supportsFormInternals) {\n this._associatedForm.addEventListener('formdata', this._handleFormData)\n this._associatedForm.addEventListener('reset', this._handleFormReset)\n }\n }\n\n private _syncFormValue () {\n if (!this._supportsFormInternals) return\n const internals = this._internals\n if (!internals) return\n if (this.disabled || !this.name || !this.value) {\n internals.setFormValue(null)\n return\n }\n internals.setFormValue(this.value)\n }\n\n private _syncValidity () {\n if (!this._internals || !this._supportsFormInternals || typeof this._internals.setValidity !== 'function') return\n if (this.disabled || !this.required || this.value) {\n this._internals.setValidity({})\n return\n }\n this._internals.setValidity({ valueMissing: true }, 'Please capture a photo.')\n }\n\n private _syncPreviewFromValue (file: File | null) {\n this._revokePreviewUrl()\n if (!file) return\n this._stopStream()\n this._previewUrl = URL.createObjectURL(file)\n }\n\n private _clearValue (options: { emitEvents: boolean }) {\n this.value = null\n this._errorMessage = ''\n if (options.emitEvents) {\n this._dispatchValueEvents()\n }\n }\n\n private _dispatchValueEvents () {\n const detail = { value: this.value }\n this.dispatchEvent(new CustomEvent<PhotoCaptureValueDetail>('input', {\n detail,\n bubbles: true,\n composed: true\n }))\n this.dispatchEvent(new CustomEvent<PhotoCaptureValueDetail>('change', {\n detail,\n bubbles: true,\n composed: true\n }))\n }\n\n private _fileExtensionForMimeType (mimeType: string): string {\n switch (mimeType) {\n case 'image/jpeg':\n return 'jpg'\n case 'image/webp':\n return 'webp'\n case 'image/gif':\n return 'gif'\n default:\n return 'png'\n }\n }\n\n private _createFileFromBlob (blob: Blob): File {\n const contentType = blob.type || this.captureFormat || DEFAULT_CAPTURE_FORMAT\n const extension = this._fileExtensionForMimeType(contentType)\n const safePrefix = (this.fileNamePrefix || this.name || 'photo').trim() || 'photo'\n return new File([blob], `${safePrefix}-${Date.now()}.${extension}`, { type: contentType })\n }\n\n private _queuePreviewStart () {\n this._startPreview().catch(() => undefined)\n }\n\n private _resolveMediaConstraints (): MediaStreamConstraints {\n if (this.mediaConstraints) {\n return this.mediaConstraints\n }\n if (this.constraints) {\n try {\n return JSON.parse(this.constraints) as MediaStreamConstraints\n } catch (error) {\n throw new Error(`Invalid constraints JSON: ${(error as Error).message}`)\n }\n }\n\n return {\n video: this.facingMode\n ? { facingMode: { ideal: this.facingMode } }\n : true\n }\n }\n\n private async _startPreview () {\n if (!this.open || this.value || this._startingPreview) return\n if (!navigator.mediaDevices?.getUserMedia) {\n this._emitError(new Error('navigator.mediaDevices.getUserMedia not available'), 'Camera access is not available in this browser')\n return\n }\n\n this._startingPreview = true\n this._errorMessage = ''\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia(this._resolveMediaConstraints())\n if (!this.open) {\n stream.getTracks().forEach(track => track.stop())\n return\n }\n this._stream = stream\n this.requestUpdate()\n await this.updateComplete\n const video = this.shadowRoot?.querySelector('video.capture-preview') as HTMLVideoElement | null\n if (video) {\n video.srcObject = stream\n await video.play?.().catch(() => undefined)\n }\n } catch (error) {\n this._emitError(error, (error as Error)?.message || 'Unable to start the camera preview')\n } finally {\n this._startingPreview = false\n }\n }\n\n private _stopStream () {\n if (!this._stream) return\n this._stream.getTracks().forEach(track => track.stop())\n this._stream = null\n const video = this.shadowRoot?.querySelector('video.capture-preview') as HTMLVideoElement | null\n if (video) {\n video.srcObject = null\n }\n }\n\n private _revokePreviewUrl () {\n if (this._previewUrl) {\n URL.revokeObjectURL(this._previewUrl)\n }\n this._previewUrl = ''\n }\n\n private async _captureSnapshot () {\n const video = this.shadowRoot?.querySelector('video.capture-preview') as HTMLVideoElement | null\n if (!video) return\n\n const width = video.videoWidth || video.clientWidth || 640\n const height = video.videoHeight || video.clientHeight || 480\n const canvas = document.createElement('canvas')\n canvas.width = width\n canvas.height = height\n\n const context = canvas.getContext('2d')\n if (!context) {\n this._emitError(new Error('Canvas 2D context unavailable'), 'Unable to capture a photo in this browser')\n return\n }\n\n context.drawImage(video, 0, 0, width, height)\n\n const blob = await new Promise<Blob | null>(resolve => {\n canvas.toBlob(resolve, this.captureFormat || DEFAULT_CAPTURE_FORMAT, this.captureQuality)\n })\n\n if (!blob) {\n this._emitError(new Error('Camera snapshot failed'), 'Unable to create an image from the current camera frame')\n return\n }\n\n this.value = this._createFileFromBlob(blob)\n this._errorMessage = ''\n }\n\n private async _retakePhoto () {\n this._clearValue({ emitEvents: true })\n await this._startPreview()\n }\n\n private _confirmPhoto () {\n if (!this.value || !this._previewUrl) return\n\n this._dispatchValueEvents()\n\n this.dispatchEvent(new CustomEvent<PhotoCapturedDetail>('photo-captured', {\n detail: {\n file: this.value,\n blob: this.value,\n objectUrl: this._previewUrl,\n contentType: this.value.type || this.captureFormat || DEFAULT_CAPTURE_FORMAT\n },\n bubbles: true,\n composed: true\n }))\n\n if (this.autoCloseOnCapture) {\n this._setOpen(false)\n }\n }\n\n private _handleCancel () {\n this._stopStream()\n this._clearValue({ emitEvents: false })\n this._setOpen(false)\n this.dispatchEvent(new CustomEvent('cancel', {\n bubbles: true,\n composed: true\n }))\n }\n\n private _openCapture () {\n if (this.disabled) return\n this._setOpen(true)\n }\n\n private _renderViewport () {\n if (this._previewUrl) {\n return html`<img class=\"capture-preview\" part=\"preview-image\" src=\"${this._previewUrl}\" alt=\"Captured photo preview\" />`\n }\n\n return html`<video class=\"capture-preview\" part=\"preview-video\" autoplay playsinline muted></video>`\n }\n\n private _renderStatus () {\n if (this._errorMessage) {\n return html`<div class=\"status error\" part=\"error-message\">${this._errorMessage}</div>`\n }\n\n if (this._startingPreview) {\n return html`<div class=\"status\" part=\"status-message\">Opening camera…</div>`\n }\n\n if (!this.value) {\n return html`<div class=\"status\" part=\"status-message\">Preview the camera and take a photo when ready.</div>`\n }\n\n return html`<div class=\"status\" part=\"status-message\">Review the photo before confirming it.</div>`\n }\n\n private _renderActions () {\n return html`\n <div class=\"actions\" part=\"actions\">\n ${this.showCancelButton\n ? html`\n <button\n class=\"cancel-button\"\n part=\"cancel-button\"\n type=\"button\"\n @click=\"${this._handleCancel}\"\n >${this.cancelLabel}</button>\n `\n : nothing}\n\n ${this.value\n ? html`\n <button\n class=\"action-button\"\n part=\"retake-button\"\n type=\"button\"\n @click=\"${this._retakePhoto}\"\n >${this.retakeLabel}</button>\n <button\n class=\"action-button action-button--primary\"\n part=\"confirm-button\"\n type=\"button\"\n @click=\"${this._confirmPhoto}\"\n >${this.confirmLabel}</button>\n `\n : html`\n <button\n class=\"action-button action-button--primary\"\n part=\"capture-button\"\n type=\"button\"\n ?disabled=\"${this._startingPreview || !this._stream}\"\n @click=\"${this._captureSnapshot}\"\n >${this.captureLabel}</button>\n `}\n </div>\n `\n }\n\n private _renderPanel () {\n return html`\n <div class=\"panel\" part=\"panel\">\n <div class=\"panel-header\" part=\"header\">\n <h2 class=\"panel-heading\" part=\"heading\"><slot name=\"heading\">${this.heading}</slot></h2>\n ${this.showCancelButton\n ? html`\n <button\n class=\"close-button\"\n part=\"close-button\"\n type=\"button\"\n aria-label=\"${this.cancelLabel}\"\n @click=\"${this._handleCancel}\"\n >&times;</button>\n `\n : nothing}\n </div>\n <div class=\"viewport\" part=\"viewport\">${this._renderViewport()}</div>\n ${this._renderStatus()}\n ${this._renderActions()}\n </div>\n `\n }\n\n render () {\n const trigger = this.showTrigger || this.presentation === 'dialog'\n\n return html`\n ${trigger\n ? html`\n <button\n class=\"trigger-button\"\n part=\"trigger-button\"\n type=\"button\"\n ?disabled=\"${this.disabled}\"\n @click=\"${this._openCapture}\"\n ><slot>${this.label}</slot></button>\n `\n : nothing}\n\n ${this.presentation === 'dialog'\n ? html`\n <dialog\n class=\"dialog\"\n part=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"${this.heading}\"\n @cancel=\"${(event: Event) => { event.preventDefault(); this._handleCancel() }}\"\n @click=\"${(event: MouseEvent) => {\n if (event.target === event.currentTarget) {\n this._handleCancel()\n }\n }}\"\n >\n ${this.open ? this._renderPanel() : nothing}\n </dialog>\n `\n : html`\n <div class=\"inline-root\" part=\"inline-root\" ?hidden=\"${!this.open}\">\n ${this.open ? this._renderPanel() : nothing}\n </div>\n `}\n `\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"PhotoCapture.esm.js","names":[],"sources":["../../../../../src/v2/components/media/photoCapture/PhotoCapture.ts"],"sourcesContent":["import { LitElement, css, html, nothing, type PropertyValues } from 'lit'\n/* The original code was written by Sir Tim Berners-Lee. It was made into a\nweb component by AI Model GPT-5.4\nPrompt: Take the code from src/media/media-capture.ts and make it a\nweb component. Make it work in forms as well as not. Make it\nconfigurable and follow LoginButton. */\nexport interface PhotoCapturedDetail {\n file: File\n blob: Blob\n objectUrl: string\n contentType: string\n}\n\nexport interface PhotoCaptureErrorDetail {\n error: unknown\n message: string\n}\n\nexport interface PhotoCaptureOpenChangeDetail {\n open: boolean\n}\n\nexport interface PhotoCaptureValueDetail {\n value: File | null\n}\n\ntype PresentationMode = 'inline' | 'dialog'\ntype ThemeMode = 'light' | 'dark'\n\nconst DEFAULT_CAPTURE_FORMAT = 'image/png'\n\nexport class PhotoCapture extends LitElement {\n static formAssociated = true\n\n static properties = {\n label: { type: String, reflect: true },\n heading: { type: String, reflect: true },\n captureLabel: { type: String, attribute: 'capture-label', reflect: true },\n confirmLabel: { type: String, attribute: 'confirm-label', reflect: true },\n retakeLabel: { type: String, attribute: 'retake-label', reflect: true },\n cancelLabel: { type: String, attribute: 'cancel-label', reflect: true },\n presentation: { type: String, reflect: true },\n theme: { type: String, reflect: true },\n facingMode: { type: String, attribute: 'facing-mode', reflect: true },\n constraints: { type: String, reflect: true },\n captureFormat: { type: String, attribute: 'capture-format', reflect: true },\n captureQuality: { type: Number, attribute: 'capture-quality' },\n open: { type: Boolean, reflect: true },\n disabled: { type: Boolean, reflect: true },\n name: { type: String, reflect: true },\n required: { type: Boolean, reflect: true },\n showTrigger: { type: Boolean, attribute: 'show-trigger', reflect: true },\n showCancelButton: { type: Boolean, attribute: 'show-cancel-button', reflect: true },\n autoCloseOnCapture: { type: Boolean, attribute: 'auto-close-on-capture' },\n fileNamePrefix: { type: String, attribute: 'file-name-prefix', reflect: true },\n value: { attribute: false },\n mediaConstraints: { attribute: false },\n _errorMessage: { state: true },\n _previewUrl: { state: true },\n _startingPreview: { state: true }\n }\n\n static styles = css`\n :host {\n display: block;\n --photo-capture-trigger-background: var(--lavender-900, #7c4cff);\n --photo-capture-trigger-text: var(--color-header-text, #ffffff);\n --photo-capture-surface: var(--color-background, #ffffff);\n --photo-capture-text: var(--gray-900, #101828);\n --photo-capture-muted-text: var(--gray-600, #4a5565);\n --photo-capture-border: var(--gray-200, #e5e7eb);\n --photo-capture-hover: var(--gray-100, #f3f4f6);\n --photo-capture-shadow: var(--box-shadow-sm, 0 1px 4px rgba(0, 0, 0, 0.12));\n --photo-capture-overlay: rgba(0, 0, 0, 0.6);\n --photo-capture-frame-max-width: 260px;\n --photo-capture-radius: 8px;\n --photo-capture-button-radius: var(--border-radius-base, 0.3125rem);\n --photo-capture-gap: var(--spacing-2xs, 0.625rem);\n color: var(--photo-capture-text);\n box-sizing: border-box;\n }\n\n :host([theme='dark']) {\n --photo-capture-surface: var(--gray-900, #111827);\n --photo-capture-text: var(--white, #ffffff);\n --photo-capture-muted-text: var(--gray-300, #d1d5dc);\n --photo-capture-border: var(--gray-700, #364153);\n --photo-capture-hover: rgba(255, 255, 255, 0.08);\n --photo-capture-shadow: 0 10px 30px rgba(0, 0, 0, 0.35);\n }\n\n *, *::before, *::after {\n box-sizing: border-box;\n }\n\n .trigger-button,\n .action-button,\n .cancel-button,\n .close-button {\n font: inherit;\n cursor: pointer;\n }\n\n .trigger-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 35px;\n padding: 0.5rem 0.9rem;\n border: none;\n border-radius: var(--photo-capture-button-radius);\n background: var(--photo-capture-trigger-background);\n color: var(--photo-capture-trigger-text);\n transition: transform 0.2s ease;\n }\n\n .trigger-button:active {\n transform: translateY(1px);\n }\n\n .trigger-button:disabled,\n .action-button:disabled,\n .cancel-button:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n }\n\n .inline-root[hidden] {\n display: none;\n }\n\n .dialog {\n border: none;\n padding: 0;\n background: transparent;\n outline: none;\n overflow: visible;\n max-width: none;\n max-height: none;\n }\n\n .dialog::backdrop {\n background: var(--photo-capture-overlay);\n }\n\n .panel {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--photo-capture-gap);\n width: min(100%, 340px);\n padding: 1rem;\n border: 1px solid var(--photo-capture-border);\n border-radius: var(--photo-capture-radius);\n background: var(--photo-capture-surface);\n color: var(--photo-capture-text);\n box-shadow: var(--photo-capture-shadow);\n }\n\n .panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.5rem;\n width: 100%;\n }\n\n .panel-heading {\n margin: 0;\n font-size: 1rem;\n font-weight: 700;\n line-height: 1.4;\n }\n\n .close-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n padding: 0;\n border: none;\n border-radius: 999px;\n background: transparent;\n color: var(--photo-capture-muted-text);\n font-size: 1.125rem;\n line-height: 1;\n }\n\n .close-button:hover,\n .close-button:focus-visible,\n .action-button:hover,\n .action-button:focus-visible,\n .cancel-button:hover,\n .cancel-button:focus-visible {\n background: var(--photo-capture-hover);\n }\n\n .viewport {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n min-height: 200px;\n border-radius: 0.5rem;\n overflow: hidden;\n background: color-mix(in srgb, var(--photo-capture-surface) 92%, #000 8%);\n }\n\n .viewport video,\n .viewport img {\n display: block;\n width: 100%;\n max-width: var(--photo-capture-frame-max-width);\n height: auto;\n border-radius: 0.5rem;\n margin: 0 auto;\n object-fit: cover;\n }\n\n .status {\n width: 100%;\n text-align: center;\n color: var(--photo-capture-muted-text);\n font-size: 0.875rem;\n }\n\n .status.error {\n color: var(--color-error, #b00020);\n }\n\n .actions {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-wrap: wrap;\n gap: var(--photo-capture-gap);\n width: 100%;\n }\n\n .action-button,\n .cancel-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 2.25rem;\n padding: 0.45rem 0.85rem;\n border-radius: var(--photo-capture-button-radius);\n border: 1px solid var(--photo-capture-border);\n background: var(--photo-capture-surface);\n color: var(--photo-capture-text);\n font-size: var(--font-size-xxs, 0.75rem);\n font-weight: var(--font-weight-xbold, 700);\n line-height: 1.5;\n }\n\n .action-button--primary {\n background: var(--photo-capture-trigger-background);\n color: var(--photo-capture-trigger-text);\n border-color: transparent;\n }\n `\n\n declare label: string\n declare heading: string\n declare captureLabel: string\n declare confirmLabel: string\n declare retakeLabel: string\n declare cancelLabel: string\n declare presentation: PresentationMode\n declare theme: ThemeMode\n declare facingMode: string\n declare constraints: string\n declare captureFormat: string\n declare captureQuality?: number\n declare open: boolean\n declare disabled: boolean\n declare name: string\n declare required: boolean\n declare showTrigger: boolean\n declare showCancelButton: boolean\n declare autoCloseOnCapture: boolean\n declare fileNamePrefix: string\n declare mediaConstraints?: MediaStreamConstraints\n declare _errorMessage: string\n declare _previewUrl: string\n declare _startingPreview: boolean\n\n private _value: File | null = null\n private _stream: MediaStream | null = null\n private readonly _internals: ElementInternals | null\n private _associatedForm: HTMLFormElement | null = null\n private readonly _handleFormData = (event: Event) => {\n const formData = (event as Event & { formData?: FormData }).formData\n if (!formData || !this.name || !this.value || this.disabled) return\n formData.append(this.name, this.value, this.value.name)\n }\n\n private readonly _handleFormReset = () => {\n this._clearValue({ emitEvents: false })\n if (this.open) {\n this._queuePreviewStart()\n }\n }\n\n private get _supportsFormInternals (): boolean {\n return !!this._internals && typeof this._internals.setFormValue === 'function'\n }\n\n constructor () {\n super()\n this.label = 'Take Photo'\n this.heading = 'Take a photo'\n this.captureLabel = 'Take Photo'\n this.confirmLabel = 'Use Photo'\n this.retakeLabel = 'Retake'\n this.cancelLabel = 'Cancel'\n this.presentation = 'inline'\n this.theme = 'light'\n this.facingMode = 'user'\n this.constraints = ''\n this.captureFormat = DEFAULT_CAPTURE_FORMAT\n this.captureQuality = undefined\n this.open = false\n this.disabled = false\n this.name = ''\n this.required = false\n this.showTrigger = false\n this.showCancelButton = true\n this.autoCloseOnCapture = false\n this.fileNamePrefix = ''\n this.mediaConstraints = undefined\n this._errorMessage = ''\n this._previewUrl = ''\n this._startingPreview = false\n this._internals = typeof this.attachInternals === 'function' ? this.attachInternals() : null\n }\n\n get value (): File | null {\n return this._value\n }\n\n set value (nextValue: File | null) {\n const normalizedValue = nextValue instanceof File ? nextValue : null\n const previousValue = this._value\n if (previousValue === normalizedValue) return\n\n this._value = normalizedValue\n this._syncPreviewFromValue(normalizedValue)\n this._syncFormValue()\n this._syncValidity()\n this.requestUpdate('value', previousValue)\n }\n\n get form (): HTMLFormElement | null {\n return (this._supportsFormInternals ? this._internals?.form : null) ?? this._associatedForm\n }\n\n get validationMessage (): string {\n return (typeof this._internals?.validationMessage === 'string' ? this._internals.validationMessage : '') || (this.required && !this.value ? 'Please capture a photo.' : '')\n }\n\n get willValidate (): boolean {\n return typeof this._internals?.willValidate === 'boolean' ? this._internals.willValidate : !this.disabled\n }\n\n checkValidity (): boolean {\n if (this._internals && typeof this._internals.checkValidity === 'function') {\n return this._internals.checkValidity()\n }\n return !(this.required && !this.value)\n }\n\n reportValidity (): boolean {\n if (this._internals && typeof this._internals.reportValidity === 'function') {\n return this._internals.reportValidity()\n }\n return this.checkValidity()\n }\n\n connectedCallback () {\n super.connectedCallback()\n this._syncAssociatedForm()\n this._syncFormValue()\n this._syncValidity()\n }\n\n disconnectedCallback () {\n this._syncAssociatedForm(null)\n this._stopStream()\n this._revokePreviewUrl()\n super.disconnectedCallback()\n }\n\n formResetCallback () {\n this._handleFormReset()\n }\n\n formDisabledCallback (disabled: boolean) {\n this.disabled = disabled\n }\n\n protected updated (changed: PropertyValues<this>) {\n this._syncAssociatedForm()\n\n if (this.presentation === 'dialog') {\n const dialog = this.shadowRoot?.querySelector('dialog') as HTMLDialogElement | null\n if (dialog) {\n if (this.open && !dialog.open) {\n dialog.showModal()\n } else if (!this.open && dialog.open) {\n dialog.close()\n }\n }\n }\n\n if (changed.has('open') && !this.open) {\n this._stopStream()\n }\n\n if (\n this.open &&\n !this.value &&\n !this._stream &&\n !this._startingPreview &&\n (changed.has('open') || changed.has('presentation') || changed.has('_previewUrl') || changed.has('value'))\n ) {\n this._queuePreviewStart()\n }\n\n if (changed.has('name') || changed.has('disabled') || changed.has('value')) {\n this._syncFormValue()\n }\n\n if (changed.has('required') || changed.has('disabled') || changed.has('value')) {\n this._syncValidity()\n }\n\n if (this._stream) {\n const video = this.shadowRoot?.querySelector('video.capture-preview') as HTMLVideoElement | null\n if (video && video.srcObject !== this._stream) {\n video.srcObject = this._stream\n }\n }\n }\n\n private _setOpen (open: boolean) {\n if (this.open === open) return\n this.open = open\n this.dispatchEvent(new CustomEvent<PhotoCaptureOpenChangeDetail>('open-change', {\n detail: { open },\n bubbles: true,\n composed: true\n }))\n }\n\n private _emitError (error: unknown, message = 'Unable to access the camera') {\n this._errorMessage = message\n this.dispatchEvent(new CustomEvent<PhotoCaptureErrorDetail>('error', {\n detail: { error, message },\n bubbles: true,\n composed: true\n }))\n }\n\n private _syncAssociatedForm (nextForm = this.closest('form') as HTMLFormElement | null) {\n if (this._associatedForm === nextForm) return\n\n if (this._associatedForm) {\n this._associatedForm.removeEventListener('formdata', this._handleFormData)\n this._associatedForm.removeEventListener('reset', this._handleFormReset)\n }\n\n this._associatedForm = nextForm\n\n if (this._associatedForm && !this._supportsFormInternals) {\n this._associatedForm.addEventListener('formdata', this._handleFormData)\n this._associatedForm.addEventListener('reset', this._handleFormReset)\n }\n }\n\n private _syncFormValue () {\n if (!this._supportsFormInternals) return\n const internals = this._internals\n if (!internals) return\n if (this.disabled || !this.name || !this.value) {\n internals.setFormValue(null)\n return\n }\n internals.setFormValue(this.value)\n }\n\n private _syncValidity () {\n if (!this._internals || !this._supportsFormInternals || typeof this._internals.setValidity !== 'function') return\n if (this.disabled || !this.required || this.value) {\n this._internals.setValidity({})\n return\n }\n this._internals.setValidity({ valueMissing: true }, 'Please capture a photo.')\n }\n\n private _syncPreviewFromValue (file: File | null) {\n this._revokePreviewUrl()\n if (!file) return\n this._stopStream()\n this._previewUrl = URL.createObjectURL(file)\n }\n\n private _clearValue (options: { emitEvents: boolean }) {\n this.value = null\n this._errorMessage = ''\n if (options.emitEvents) {\n this._dispatchValueEvents()\n }\n }\n\n private _dispatchValueEvents () {\n const detail = { value: this.value }\n this.dispatchEvent(new CustomEvent<PhotoCaptureValueDetail>('input', {\n detail,\n bubbles: true,\n composed: true\n }))\n this.dispatchEvent(new CustomEvent<PhotoCaptureValueDetail>('change', {\n detail,\n bubbles: true,\n composed: true\n }))\n }\n\n private _fileExtensionForMimeType (mimeType: string): string {\n switch (mimeType) {\n case 'image/jpeg':\n return 'jpg'\n case 'image/webp':\n return 'webp'\n case 'image/gif':\n return 'gif'\n default:\n return 'png'\n }\n }\n\n private _createFileFromBlob (blob: Blob): File {\n const contentType = blob.type || this.captureFormat || DEFAULT_CAPTURE_FORMAT\n const extension = this._fileExtensionForMimeType(contentType)\n const safePrefix = (this.fileNamePrefix || this.name || 'photo').trim() || 'photo'\n return new File([blob], `${safePrefix}-${Date.now()}.${extension}`, { type: contentType })\n }\n\n private _queuePreviewStart () {\n this._startPreview().catch(() => undefined)\n }\n\n private _resolveMediaConstraints (): MediaStreamConstraints {\n if (this.mediaConstraints) {\n return this.mediaConstraints\n }\n if (this.constraints) {\n try {\n return JSON.parse(this.constraints) as MediaStreamConstraints\n } catch (error) {\n throw new Error(`Invalid constraints JSON: ${(error as Error).message}`)\n }\n }\n\n return {\n video: this.facingMode\n ? { facingMode: { ideal: this.facingMode } }\n : true\n }\n }\n\n private async _startPreview () {\n if (!this.open || this.value || this._startingPreview) return\n if (!navigator.mediaDevices?.getUserMedia) {\n this._emitError(new Error('navigator.mediaDevices.getUserMedia not available'), 'Camera access is not available in this browser')\n return\n }\n\n this._startingPreview = true\n this._errorMessage = ''\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia(this._resolveMediaConstraints())\n if (!this.open) {\n stream.getTracks().forEach(track => track.stop())\n return\n }\n this._stream = stream\n this.requestUpdate()\n await this.updateComplete\n const video = this.shadowRoot?.querySelector('video.capture-preview') as HTMLVideoElement | null\n if (video) {\n video.srcObject = stream\n await video.play?.().catch(() => undefined)\n }\n } catch (error) {\n this._emitError(error, (error as Error)?.message || 'Unable to start the camera preview')\n } finally {\n this._startingPreview = false\n }\n }\n\n private _stopStream () {\n if (!this._stream) return\n this._stream.getTracks().forEach(track => track.stop())\n this._stream = null\n const video = this.shadowRoot?.querySelector('video.capture-preview') as HTMLVideoElement | null\n if (video) {\n video.srcObject = null\n }\n }\n\n private _revokePreviewUrl () {\n if (this._previewUrl) {\n URL.revokeObjectURL(this._previewUrl)\n }\n this._previewUrl = ''\n }\n\n private async _captureSnapshot () {\n const video = this.shadowRoot?.querySelector('video.capture-preview') as HTMLVideoElement | null\n if (!video) return\n\n const width = video.videoWidth || video.clientWidth || 640\n const height = video.videoHeight || video.clientHeight || 480\n const canvas = document.createElement('canvas')\n canvas.width = width\n canvas.height = height\n\n const context = canvas.getContext('2d')\n if (!context) {\n this._emitError(new Error('Canvas 2D context unavailable'), 'Unable to capture a photo in this browser')\n return\n }\n\n context.drawImage(video, 0, 0, width, height)\n\n const blob = await new Promise<Blob | null>(resolve => {\n canvas.toBlob(resolve, this.captureFormat || DEFAULT_CAPTURE_FORMAT, this.captureQuality)\n })\n\n if (!blob) {\n this._emitError(new Error('Camera snapshot failed'), 'Unable to create an image from the current camera frame')\n return\n }\n\n this.value = this._createFileFromBlob(blob)\n this._errorMessage = ''\n }\n\n private async _retakePhoto () {\n this._clearValue({ emitEvents: true })\n await this._startPreview()\n }\n\n private _confirmPhoto () {\n if (!this.value || !this._previewUrl) return\n\n this._dispatchValueEvents()\n\n this.dispatchEvent(new CustomEvent<PhotoCapturedDetail>('photo-captured', {\n detail: {\n file: this.value,\n blob: this.value,\n objectUrl: this._previewUrl,\n contentType: this.value.type || this.captureFormat || DEFAULT_CAPTURE_FORMAT\n },\n bubbles: true,\n composed: true\n }))\n\n if (this.autoCloseOnCapture) {\n this._setOpen(false)\n }\n }\n\n private _handleCancel () {\n this._stopStream()\n this._clearValue({ emitEvents: false })\n this._setOpen(false)\n this.dispatchEvent(new CustomEvent('cancel', {\n bubbles: true,\n composed: true\n }))\n }\n\n private _openCapture () {\n if (this.disabled) return\n this._setOpen(true)\n }\n\n private _renderViewport () {\n if (this._previewUrl) {\n return html`<img class=\"capture-preview\" part=\"preview-image\" src=\"${this._previewUrl}\" alt=\"Captured photo preview\" />`\n }\n\n return html`<video class=\"capture-preview\" part=\"preview-video\" autoplay playsinline muted></video>`\n }\n\n private _renderStatus () {\n if (this._errorMessage) {\n return html`<div class=\"status error\" part=\"error-message\">${this._errorMessage}</div>`\n }\n\n if (this._startingPreview) {\n return html`<div class=\"status\" part=\"status-message\">Opening camera…</div>`\n }\n\n if (!this.value) {\n return html`<div class=\"status\" part=\"status-message\">Preview the camera and take a photo when ready.</div>`\n }\n\n return html`<div class=\"status\" part=\"status-message\">Review the photo before confirming it.</div>`\n }\n\n private _renderActions () {\n return html`\n <div class=\"actions\" part=\"actions\">\n ${this.showCancelButton\n ? html`\n <button\n class=\"cancel-button\"\n part=\"cancel-button\"\n type=\"button\"\n @click=\"${this._handleCancel}\"\n >${this.cancelLabel}</button>\n `\n : nothing}\n\n ${this.value\n ? html`\n <button\n class=\"action-button\"\n part=\"retake-button\"\n type=\"button\"\n @click=\"${this._retakePhoto}\"\n >${this.retakeLabel}</button>\n <button\n class=\"action-button action-button--primary\"\n part=\"confirm-button\"\n type=\"button\"\n @click=\"${this._confirmPhoto}\"\n >${this.confirmLabel}</button>\n `\n : html`\n <button\n class=\"action-button action-button--primary\"\n part=\"capture-button\"\n type=\"button\"\n ?disabled=\"${this._startingPreview || !this._stream}\"\n @click=\"${this._captureSnapshot}\"\n >${this.captureLabel}</button>\n `}\n </div>\n `\n }\n\n private _renderPanel () {\n return html`\n <div class=\"panel\" part=\"panel\">\n <div class=\"panel-header\" part=\"header\">\n <h2 class=\"panel-heading\" part=\"heading\"><slot name=\"heading\">${this.heading}</slot></h2>\n ${this.showCancelButton\n ? html`\n <button\n class=\"close-button\"\n part=\"close-button\"\n type=\"button\"\n aria-label=\"${this.cancelLabel}\"\n @click=\"${this._handleCancel}\"\n >&times;</button>\n `\n : nothing}\n </div>\n <div class=\"viewport\" part=\"viewport\">${this._renderViewport()}</div>\n ${this._renderStatus()}\n ${this._renderActions()}\n </div>\n `\n }\n\n render () {\n const trigger = this.showTrigger || this.presentation === 'dialog'\n\n return html`\n ${trigger\n ? html`\n <button\n class=\"trigger-button\"\n part=\"trigger-button\"\n type=\"button\"\n ?disabled=\"${this.disabled}\"\n @click=\"${this._openCapture}\"\n ><slot>${this.label}</slot></button>\n `\n : nothing}\n\n ${this.presentation === 'dialog'\n ? html`\n <dialog\n class=\"dialog\"\n part=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"${this.heading}\"\n @cancel=\"${(event: Event) => { event.preventDefault(); this._handleCancel() }}\"\n @click=\"${(event: MouseEvent) => {\n if (event.target === event.currentTarget) {\n this._handleCancel()\n }\n }}\"\n >\n ${this.open ? this._renderPanel() : nothing}\n </dialog>\n `\n : html`\n <div class=\"inline-root\" part=\"inline-root\" ?hidden=\"${!this.open}\">\n ${this.open ? this._renderPanel() : nothing}\n </div>\n `}\n `\n }\n}\n"],"mappings":";;AA6BA,IAAM,IAAyB,aAElB,IAAb,cAAkC,EAAW;CAC3C,OAAO,iBAAiB;CAExB,OAAO,aAAa;EAClB,OAAO;GAAE,MAAM;GAAQ,SAAS;EAAK;EACrC,SAAS;GAAE,MAAM;GAAQ,SAAS;EAAK;EACvC,cAAc;GAAE,MAAM;GAAQ,WAAW;GAAiB,SAAS;EAAK;EACxE,cAAc;GAAE,MAAM;GAAQ,WAAW;GAAiB,SAAS;EAAK;EACxE,aAAa;GAAE,MAAM;GAAQ,WAAW;GAAgB,SAAS;EAAK;EACtE,aAAa;GAAE,MAAM;GAAQ,WAAW;GAAgB,SAAS;EAAK;EACtE,cAAc;GAAE,MAAM;GAAQ,SAAS;EAAK;EAC5C,OAAO;GAAE,MAAM;GAAQ,SAAS;EAAK;EACrC,YAAY;GAAE,MAAM;GAAQ,WAAW;GAAe,SAAS;EAAK;EACpE,aAAa;GAAE,MAAM;GAAQ,SAAS;EAAK;EAC3C,eAAe;GAAE,MAAM;GAAQ,WAAW;GAAkB,SAAS;EAAK;EAC1E,gBAAgB;GAAE,MAAM;GAAQ,WAAW;EAAkB;EAC7D,MAAM;GAAE,MAAM;GAAS,SAAS;EAAK;EACrC,UAAU;GAAE,MAAM;GAAS,SAAS;EAAK;EACzC,MAAM;GAAE,MAAM;GAAQ,SAAS;EAAK;EACpC,UAAU;GAAE,MAAM;GAAS,SAAS;EAAK;EACzC,aAAa;GAAE,MAAM;GAAS,WAAW;GAAgB,SAAS;EAAK;EACvE,kBAAkB;GAAE,MAAM;GAAS,WAAW;GAAsB,SAAS;EAAK;EAClF,oBAAoB;GAAE,MAAM;GAAS,WAAW;EAAwB;EACxE,gBAAgB;GAAE,MAAM;GAAQ,WAAW;GAAoB,SAAS;EAAK;EAC7E,OAAO,EAAE,WAAW,GAAM;EAC1B,kBAAkB,EAAE,WAAW,GAAM;EACrC,eAAe,EAAE,OAAO,GAAK;EAC7B,aAAa,EAAE,OAAO,GAAK;EAC3B,kBAAkB,EAAE,OAAO,GAAK;CAClC;CAEA,OAAO,SAAS,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmOnB,SAA8B;CAC9B,UAAsC;CACtC;CACA,kBAAkD;CAClD,mBAAoC,MAAiB;EACnD,IAAM,IAAY,EAA0C;EACxD,CAAC,KAAY,CAAC,KAAK,QAAQ,CAAC,KAAK,SAAS,KAAK,YACnD,EAAS,OAAO,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,IAAI;CACxD;CAEA,yBAA0C;EAExC,AADA,KAAK,YAAY,EAAE,YAAY,GAAM,CAAC,GAClC,KAAK,QACP,KAAK,mBAAmB;CAE5B;CAEA,IAAY,yBAAmC;EAC7C,OAAO,CAAC,CAAC,KAAK,cAAc,OAAO,KAAK,WAAW,gBAAiB;CACtE;CAEA,cAAe;EA0Bb,AAzBA,MAAM,GACN,KAAK,QAAQ,cACb,KAAK,UAAU,gBACf,KAAK,eAAe,cACpB,KAAK,eAAe,aACpB,KAAK,cAAc,UACnB,KAAK,cAAc,UACnB,KAAK,eAAe,UACpB,KAAK,QAAQ,SACb,KAAK,aAAa,QAClB,KAAK,cAAc,IACnB,KAAK,gBAAgB,GACrB,KAAK,iBAAiB,KAAA,GACtB,KAAK,OAAO,IACZ,KAAK,WAAW,IAChB,KAAK,OAAO,IACZ,KAAK,WAAW,IAChB,KAAK,cAAc,IACnB,KAAK,mBAAmB,IACxB,KAAK,qBAAqB,IAC1B,KAAK,iBAAiB,IACtB,KAAK,mBAAmB,KAAA,GACxB,KAAK,gBAAgB,IACrB,KAAK,cAAc,IACnB,KAAK,mBAAmB,IACxB,KAAK,aAAa,OAAO,KAAK,mBAAoB,aAAa,KAAK,gBAAgB,IAAI;CAC1F;CAEA,IAAI,QAAsB;EACxB,OAAO,KAAK;CACd;CAEA,IAAI,MAAO,GAAwB;EACjC,IAAM,IAAkB,aAAqB,OAAO,IAAY,MAC1D,IAAgB,KAAK;EACvB,MAAkB,MAEtB,KAAK,SAAS,GACd,KAAK,sBAAsB,CAAe,GAC1C,KAAK,eAAe,GACpB,KAAK,cAAc,GACnB,KAAK,cAAc,SAAS,CAAa;CAC3C;CAEA,IAAI,OAAgC;EAClC,QAAQ,KAAK,yBAAyB,KAAK,YAAY,OAAO,SAAS,KAAK;CAC9E;CAEA,IAAI,oBAA6B;EAC/B,QAAQ,OAAO,KAAK,YAAY,qBAAsB,WAAW,KAAK,WAAW,oBAAoB,QAAQ,KAAK,YAAY,CAAC,KAAK,QAAQ,4BAA4B;CAC1K;CAEA,IAAI,eAAyB;EAC3B,OAAO,OAAO,KAAK,YAAY,gBAAiB,YAAY,KAAK,WAAW,eAAe,CAAC,KAAK;CACnG;CAEA,gBAA0B;EAIxB,OAHI,KAAK,cAAc,OAAO,KAAK,WAAW,iBAAkB,aACvD,KAAK,WAAW,cAAc,IAEhC,EAAE,KAAK,YAAY,CAAC,KAAK;CAClC;CAEA,iBAA2B;EAIzB,OAHI,KAAK,cAAc,OAAO,KAAK,WAAW,kBAAmB,aACxD,KAAK,WAAW,eAAe,IAEjC,KAAK,cAAc;CAC5B;CAEA,oBAAqB;EAInB,AAHA,MAAM,kBAAkB,GACxB,KAAK,oBAAoB,GACzB,KAAK,eAAe,GACpB,KAAK,cAAc;CACrB;CAEA,uBAAwB;EAItB,AAHA,KAAK,oBAAoB,IAAI,GAC7B,KAAK,YAAY,GACjB,KAAK,kBAAkB,GACvB,MAAM,qBAAqB;CAC7B;CAEA,oBAAqB;EACnB,KAAK,iBAAiB;CACxB;CAEA,qBAAsB,GAAmB;EACvC,KAAK,WAAW;CAClB;CAEA,QAAmB,GAA+B;EAGhD,IAFA,KAAK,oBAAoB,GAErB,KAAK,iBAAiB,UAAU;GAClC,IAAM,IAAS,KAAK,YAAY,cAAc,QAAQ;GACtD,AAAI,MACE,KAAK,QAAQ,CAAC,EAAO,OACvB,EAAO,UAAU,IACR,CAAC,KAAK,QAAQ,EAAO,QAC9B,EAAO,MAAM;EAGnB;EAwBA,IAtBI,EAAQ,IAAI,MAAM,KAAK,CAAC,KAAK,QAC/B,KAAK,YAAY,GAIjB,KAAK,QACL,CAAC,KAAK,SACN,CAAC,KAAK,WACN,CAAC,KAAK,qBACL,EAAQ,IAAI,MAAM,KAAK,EAAQ,IAAI,cAAc,KAAK,EAAQ,IAAI,aAAa,KAAK,EAAQ,IAAI,OAAO,MAExG,KAAK,mBAAmB,IAGtB,EAAQ,IAAI,MAAM,KAAK,EAAQ,IAAI,UAAU,KAAK,EAAQ,IAAI,OAAO,MACvE,KAAK,eAAe,IAGlB,EAAQ,IAAI,UAAU,KAAK,EAAQ,IAAI,UAAU,KAAK,EAAQ,IAAI,OAAO,MAC3E,KAAK,cAAc,GAGjB,KAAK,SAAS;GAChB,IAAM,IAAQ,KAAK,YAAY,cAAc,uBAAuB;GACpE,AAAI,KAAS,EAAM,cAAc,KAAK,YACpC,EAAM,YAAY,KAAK;EAE3B;CACF;CAEA,SAAkB,GAAe;EAC3B,KAAK,SAAS,MAClB,KAAK,OAAO,GACZ,KAAK,cAAc,IAAI,YAA0C,eAAe;GAC9E,QAAQ,EAAE,QAAK;GACf,SAAS;GACT,UAAU;EACZ,CAAC,CAAC;CACJ;CAEA,WAAoB,GAAgB,IAAU,+BAA+B;EAE3E,AADA,KAAK,gBAAgB,GACrB,KAAK,cAAc,IAAI,YAAqC,SAAS;GACnE,QAAQ;IAAE;IAAO;GAAQ;GACzB,SAAS;GACT,UAAU;EACZ,CAAC,CAAC;CACJ;CAEA,oBAA6B,IAAW,KAAK,QAAQ,MAAM,GAA6B;EAClF,KAAK,oBAAoB,MAEzB,KAAK,oBACP,KAAK,gBAAgB,oBAAoB,YAAY,KAAK,eAAe,GACzE,KAAK,gBAAgB,oBAAoB,SAAS,KAAK,gBAAgB,IAGzE,KAAK,kBAAkB,GAEnB,KAAK,mBAAmB,CAAC,KAAK,2BAChC,KAAK,gBAAgB,iBAAiB,YAAY,KAAK,eAAe,GACtE,KAAK,gBAAgB,iBAAiB,SAAS,KAAK,gBAAgB;CAExE;CAEA,iBAA0B;EACxB,IAAI,CAAC,KAAK,wBAAwB;EAClC,IAAM,IAAY,KAAK;EAClB,OACL;OAAI,KAAK,YAAY,CAAC,KAAK,QAAQ,CAAC,KAAK,OAAO;IAC9C,EAAU,aAAa,IAAI;IAC3B;GACF;GACA,EAAU,aAAa,KAAK,KAAK;EADjC;CAEF;CAEA,gBAAyB;EACnB,OAAC,KAAK,cAAc,CAAC,KAAK,0BAA0B,OAAO,KAAK,WAAW,eAAgB,aAC/F;OAAI,KAAK,YAAY,CAAC,KAAK,YAAY,KAAK,OAAO;IACjD,KAAK,WAAW,YAAY,CAAC,CAAC;IAC9B;GACF;GACA,KAAK,WAAW,YAAY,EAAE,cAAc,GAAK,GAAG,yBAAyB;EAD7E;CAEF;CAEA,sBAA+B,GAAmB;EAChD,KAAK,kBAAkB,GAClB,MACL,KAAK,YAAY,GACjB,KAAK,cAAc,IAAI,gBAAgB,CAAI;CAC7C;CAEA,YAAqB,GAAkC;EAGrD,AAFA,KAAK,QAAQ,MACb,KAAK,gBAAgB,IACjB,EAAQ,cACV,KAAK,qBAAqB;CAE9B;CAEA,uBAAgC;EAC9B,IAAM,IAAS,EAAE,OAAO,KAAK,MAAM;EAMnC,AALA,KAAK,cAAc,IAAI,YAAqC,SAAS;GACnE;GACA,SAAS;GACT,UAAU;EACZ,CAAC,CAAC,GACF,KAAK,cAAc,IAAI,YAAqC,UAAU;GACpE;GACA,SAAS;GACT,UAAU;EACZ,CAAC,CAAC;CACJ;CAEA,0BAAmC,GAA0B;EAC3D,QAAQ,GAAR;GACE,KAAK,cACH,OAAO;GACT,KAAK,cACH,OAAO;GACT,KAAK,aACH,OAAO;GACT,SACE,OAAO;EACX;CACF;CAEA,oBAA6B,GAAkB;EAC7C,IAAM,IAAc,EAAK,QAAQ,KAAK,iBAAiB,GACjD,IAAY,KAAK,0BAA0B,CAAW,GACtD,KAAc,KAAK,kBAAkB,KAAK,QAAQ,QAAA,CAAS,KAAK,KAAK;EAC3E,OAAO,IAAI,KAAK,CAAC,CAAI,GAAG,GAAG,EAAW,GAAG,KAAK,IAAI,EAAE,GAAG,KAAa,EAAE,MAAM,EAAY,CAAC;CAC3F;CAEA,qBAA8B;EAC5B,KAAK,cAAc,CAAC,CAAC,YAAY,KAAA,CAAS;CAC5C;CAEA,2BAA4D;EAC1D,IAAI,KAAK,kBACP,OAAO,KAAK;EAEd,IAAI,KAAK,aACP,IAAI;GACF,OAAO,KAAK,MAAM,KAAK,WAAW;EACpC,SAAS,GAAO;GACd,MAAU,MAAM,6BAA8B,EAAgB,SAAS;EACzE;EAGF,OAAO,EACL,OAAO,KAAK,aACR,EAAE,YAAY,EAAE,OAAO,KAAK,WAAW,EAAE,IACzC,GACN;CACF;CAEA,MAAc,gBAAiB;EACzB,OAAC,KAAK,QAAQ,KAAK,SAAS,KAAK,mBACrC;OAAI,CAAC,UAAU,cAAc,cAAc;IACzC,KAAK,WAAW,gBAAI,MAAM,mDAAmD,GAAG,gDAAgD;IAChI;GACF;GAGA,AADA,KAAK,mBAAmB,IACxB,KAAK,gBAAgB;GAErB,IAAI;IACF,IAAM,IAAS,MAAM,UAAU,aAAa,aAAa,KAAK,yBAAyB,CAAC;IACxF,IAAI,CAAC,KAAK,MAAM;KACd,EAAO,UAAU,CAAC,CAAC,SAAQ,MAAS,EAAM,KAAK,CAAC;KAChD;IACF;IAGA,AAFA,KAAK,UAAU,GACf,KAAK,cAAc,GACnB,MAAM,KAAK;IACX,IAAM,IAAQ,KAAK,YAAY,cAAc,uBAAuB;IACpE,AAAI,MACF,EAAM,YAAY,GAClB,MAAM,EAAM,OAAO,CAAC,CAAC,YAAY,KAAA,CAAS;GAE9C,SAAS,GAAO;IACd,KAAK,WAAW,GAAQ,GAAiB,WAAW,oCAAoC;GAC1F,UAAU;IACR,KAAK,mBAAmB;GAC1B;EAvBA;CAwBF;CAEA,cAAuB;EACrB,IAAI,CAAC,KAAK,SAAS;EAEnB,AADA,KAAK,QAAQ,UAAU,CAAC,CAAC,SAAQ,MAAS,EAAM,KAAK,CAAC,GACtD,KAAK,UAAU;EACf,IAAM,IAAQ,KAAK,YAAY,cAAc,uBAAuB;EACpE,AAAI,MACF,EAAM,YAAY;CAEtB;CAEA,oBAA6B;EAI3B,AAHI,KAAK,eACP,IAAI,gBAAgB,KAAK,WAAW,GAEtC,KAAK,cAAc;CACrB;CAEA,MAAc,mBAAoB;EAChC,IAAM,IAAQ,KAAK,YAAY,cAAc,uBAAuB;EACpE,IAAI,CAAC,GAAO;EAEZ,IAAM,IAAQ,EAAM,cAAc,EAAM,eAAe,KACjD,IAAS,EAAM,eAAe,EAAM,gBAAgB,KACpD,IAAS,SAAS,cAAc,QAAQ;EAE9C,AADA,EAAO,QAAQ,GACf,EAAO,SAAS;EAEhB,IAAM,IAAU,EAAO,WAAW,IAAI;EACtC,IAAI,CAAC,GAAS;GACZ,KAAK,WAAW,gBAAI,MAAM,+BAA+B,GAAG,2CAA2C;GACvG;EACF;EAEA,EAAQ,UAAU,GAAO,GAAG,GAAG,GAAO,CAAM;EAE5C,IAAM,IAAO,MAAM,IAAI,SAAqB,MAAW;GACrD,EAAO,OAAO,GAAS,KAAK,iBAAiB,GAAwB,KAAK,cAAc;EAC1F,CAAC;EAED,IAAI,CAAC,GAAM;GACT,KAAK,WAAW,gBAAI,MAAM,wBAAwB,GAAG,yDAAyD;GAC9G;EACF;EAGA,AADA,KAAK,QAAQ,KAAK,oBAAoB,CAAI,GAC1C,KAAK,gBAAgB;CACvB;CAEA,MAAc,eAAgB;EAE5B,AADA,KAAK,YAAY,EAAE,YAAY,GAAK,CAAC,GACrC,MAAM,KAAK,cAAc;CAC3B;CAEA,gBAAyB;EACnB,CAAC,KAAK,SAAS,CAAC,KAAK,gBAEzB,KAAK,qBAAqB,GAE1B,KAAK,cAAc,IAAI,YAAiC,kBAAkB;GACxE,QAAQ;IACN,MAAM,KAAK;IACX,MAAM,KAAK;IACX,WAAW,KAAK;IAChB,aAAa,KAAK,MAAM,QAAQ,KAAK,iBAAiB;GACxD;GACA,SAAS;GACT,UAAU;EACZ,CAAC,CAAC,GAEE,KAAK,sBACP,KAAK,SAAS,EAAK;CAEvB;CAEA,gBAAyB;EAIvB,AAHA,KAAK,YAAY,GACjB,KAAK,YAAY,EAAE,YAAY,GAAM,CAAC,GACtC,KAAK,SAAS,EAAK,GACnB,KAAK,cAAc,IAAI,YAAY,UAAU;GAC3C,SAAS;GACT,UAAU;EACZ,CAAC,CAAC;CACJ;CAEA,eAAwB;EAClB,KAAK,YACT,KAAK,SAAS,EAAI;CACpB;CAEA,kBAA2B;EAKzB,OAJI,KAAK,cACA,CAAI,0DAA0D,KAAK,YAAY,qCAGjF,CAAI;CACb;CAEA,gBAAyB;EAavB,OAZI,KAAK,gBACA,CAAI,kDAAkD,KAAK,cAAc,UAG9E,KAAK,mBACA,CAAI,oEAGR,KAAK,QAIH,CAAI,2FAHF,CAAI;CAIf;CAEA,iBAA0B;EACxB,OAAO,CAAI;;UAEL,KAAK,mBACH,CAAI;;;;;wBAKQ,KAAK,cAAc;eAC5B,KAAK,YAAY;cAEpB,EAAQ;;UAEV,KAAK,QACH,CAAI;;;;;wBAKQ,KAAK,aAAa;eAC3B,KAAK,YAAY;;;;;wBAKR,KAAK,cAAc;eAC5B,KAAK,aAAa;cAErB,CAAI;;;;;2BAKW,KAAK,oBAAoB,CAAC,KAAK,QAAQ;wBAC1C,KAAK,iBAAiB;eAC/B,KAAK,aAAa;YACrB;;;CAGV;CAEA,eAAwB;EACtB,OAAO,CAAI;;;0EAG2D,KAAK,QAAQ;YAC3E,KAAK,mBACH,CAAI;;;;;8BAKY,KAAK,YAAY;0BACrB,KAAK,cAAc;;gBAG/B,EAAQ;;gDAE0B,KAAK,gBAAgB,EAAE;UAC7D,KAAK,cAAc,EAAE;UACrB,KAAK,eAAe,EAAE;;;CAG9B;CAEA,SAAU;EAGR,OAAO,CAAI;QAFK,KAAK,eAAe,KAAK,iBAAiB,WAIpD,CAAI;;;;;yBAKW,KAAK,SAAS;sBACjB,KAAK,aAAa;mBACrB,KAAK,MAAM;YAEpB,EAAQ;;QAEV,KAAK,iBAAiB,WACpB,CAAI;;;;;0BAKY,KAAK,QAAQ;wBACf,MAAiB;GAA0B,AAAxB,EAAM,eAAe,GAAG,KAAK,cAAc;EAAE,EAAE;uBACnE,MAAsB;GAC/B,AAAI,EAAM,WAAW,EAAM,iBACzB,KAAK,cAAc;EAEvB,EAAE;;cAEA,KAAK,OAAO,KAAK,aAAa,IAAI,EAAQ;;YAG9C,CAAI;iEACmD,CAAC,KAAK,KAAK;cAC9D,KAAK,OAAO,KAAK,aAAa,IAAI,EAAQ;;UAE9C;;CAER;AACF"}
@@ -1,2 +1,2 @@
1
- const e=require("./PhotoCapture.cjs.js");var t=`solid-ui-photo-capture`;customElements.get(t)||customElements.define(t,e.PhotoCapture);
1
+ const e=require("./PhotoCapture.cjs.js");var t=`solid-ui-photo-capture`;customElements.get(t)||customElements.define(t,e.PhotoCapture),exports.PhotoCapture=e.PhotoCapture;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -3,5 +3,6 @@ import { PhotoCapture as e } from "./PhotoCapture.esm.js";
3
3
  var t = "solid-ui-photo-capture";
4
4
  customElements.get(t) || customElements.define(t, e);
5
5
  //#endregion
6
+ export { e as PhotoCapture };
6
7
 
7
8
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"iconLinks.cjs.js","names":[],"sources":["../../../src/widgets/buttons/iconLinks.ts"],"sourcesContent":["import { NamedNode } from 'rdflib'\nimport { originalIconBase } from '../../lib/iconBase'\n\n/**\n * Creates an anchor tag for a NamedNode\n *\n * Takes a NamedNode and creates an anchor tag for it\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param subject NamedNode the anchor tag is created for\n * @param iconURI? Optional if you have your own icon link\n *\n * @returns The anchor tag for the subject\n *\n */\n\nexport function linkIcon (dom: HTMLDocument, subject: NamedNode, iconURI?: string): HTMLElement {\n const anchor = dom.createElement('a')\n anchor.setAttribute('href', subject.uri)\n if (subject.uri.startsWith('http')) {\n // If diff web page\n anchor.setAttribute('target', '_blank') // open in a new tab or window\n } // as mailboxes and mail messages do not need new browser window\n const img = anchor.appendChild(dom.createElement('img'))\n img.setAttribute(\n 'src',\n iconURI || originalIconBase + 'go-to-this.png'\n )\n img.setAttribute('style', 'margin: 0.3em;')\n return anchor\n}\n/**\n * Creates a Link for a URI\n *\n * Takes a div element for a link and attaches the provided linkIcon\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param linkDiv the created link will be appended to this\n * @param obj NamedNode the link needs to be created for\n *\n * @returns The HTML widget created\n *\n */\n\nexport const createLinkForURI = (dom: HTMLDocument, linkDiv: HTMLDivElement, obj: NamedNode) => {\n const iconLink = linkIcon(dom, obj)\n const anchor = linkDiv.appendChild(iconLink)\n anchor.classList.add('HoverControlHide')\n linkDiv.appendChild(dom.createElement('br'))\n}\n"],"mappings":"6CAgBA,SAAgB,EAAU,EAAmB,EAAoB,EAA+B,CAC9F,IAAM,EAAS,EAAI,cAAc,GAAG,EACpC,EAAO,aAAa,OAAQ,EAAQ,GAAG,EACnC,EAAQ,IAAI,WAAW,MAAM,GAE/B,EAAO,aAAa,SAAU,QAAQ,EAExC,IAAM,EAAM,EAAO,YAAY,EAAI,cAAc,KAAK,CAAC,EAMvD,OALA,EAAI,aACF,MACA,GAAW,EAAA,iBAAmB,gBAChC,EACA,EAAI,aAAa,QAAS,gBAAgB,EACnC,CACT,CAcA,IAAa,GAAoB,EAAmB,EAAyB,IAAmB,CAC9F,IAAM,EAAW,EAAS,EAAK,CAAG,EAElC,EADuB,YAAY,CACnC,EAAO,UAAU,IAAI,kBAAkB,EACvC,EAAQ,YAAY,EAAI,cAAc,IAAI,CAAC,CAC7C"}
1
+ {"version":3,"file":"iconLinks.cjs.js","names":[],"sources":["../../../src/widgets/buttons/iconLinks.ts"],"sourcesContent":["import { NamedNode } from 'rdflib'\nimport { originalIconBase } from '../../lib/iconBase'\n\n/**\n * Creates an anchor tag for a NamedNode\n *\n * Takes a NamedNode and creates an anchor tag for it\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param subject NamedNode the anchor tag is created for\n * @param iconURI? Optional if you have your own icon link\n *\n * @returns The anchor tag for the subject\n *\n */\n\nexport function linkIcon (dom: HTMLDocument, subject: NamedNode, iconURI?: string): HTMLElement {\n const anchor = dom.createElement('a')\n anchor.setAttribute('href', subject.uri)\n if (subject.uri.startsWith('http')) {\n // If diff web page\n anchor.setAttribute('target', '_blank') // open in a new tab or window\n } // as mailboxes and mail messages do not need new browser window\n const img = anchor.appendChild(dom.createElement('img'))\n img.setAttribute(\n 'src',\n iconURI || originalIconBase + 'go-to-this.png'\n )\n img.setAttribute('style', 'margin: 0.3em;')\n return anchor\n}\n/**\n * Creates a Link for a URI\n *\n * Takes a div element for a link and attaches the provided linkIcon\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param linkDiv the created link will be appended to this\n * @param obj NamedNode the link needs to be created for\n *\n * @returns The HTML widget created\n *\n */\n\nexport const createLinkForURI = (dom: HTMLDocument, linkDiv: HTMLDivElement, obj: NamedNode) => {\n const iconLink = linkIcon(dom, obj)\n const anchor = linkDiv.appendChild(iconLink)\n anchor.classList.add('HoverControlHide')\n linkDiv.appendChild(dom.createElement('br'))\n}\n"],"mappings":"6CAgBA,SAAgB,EAAU,EAAmB,EAAoB,EAA+B,CAC9F,IAAM,EAAS,EAAI,cAAc,GAAG,EACpC,EAAO,aAAa,OAAQ,EAAQ,GAAG,EACnC,EAAQ,IAAI,WAAW,MAAM,GAE/B,EAAO,aAAa,SAAU,QAAQ,EAExC,IAAM,EAAM,EAAO,YAAY,EAAI,cAAc,KAAK,CAAC,EAMvD,OALA,EAAI,aACF,MACA,GAAW,EAAA,iBAAmB,gBAChC,EACA,EAAI,aAAa,QAAS,gBAAgB,EACnC,CACT,CAcA,IAAa,GAAoB,EAAmB,EAAyB,IAAmB,CAC9F,IAAM,EAAW,EAAS,EAAK,CAAG,EAElC,EADuB,YAAY,CACnC,CAAA,CAAO,UAAU,IAAI,kBAAkB,EACvC,EAAQ,YAAY,EAAI,cAAc,IAAI,CAAC,CAC7C"}
@@ -1 +1 @@
1
- {"version":3,"file":"iconLinks.esm.js","names":[],"sources":["../../../src/widgets/buttons/iconLinks.ts"],"sourcesContent":["import { NamedNode } from 'rdflib'\nimport { originalIconBase } from '../../lib/iconBase'\n\n/**\n * Creates an anchor tag for a NamedNode\n *\n * Takes a NamedNode and creates an anchor tag for it\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param subject NamedNode the anchor tag is created for\n * @param iconURI? Optional if you have your own icon link\n *\n * @returns The anchor tag for the subject\n *\n */\n\nexport function linkIcon (dom: HTMLDocument, subject: NamedNode, iconURI?: string): HTMLElement {\n const anchor = dom.createElement('a')\n anchor.setAttribute('href', subject.uri)\n if (subject.uri.startsWith('http')) {\n // If diff web page\n anchor.setAttribute('target', '_blank') // open in a new tab or window\n } // as mailboxes and mail messages do not need new browser window\n const img = anchor.appendChild(dom.createElement('img'))\n img.setAttribute(\n 'src',\n iconURI || originalIconBase + 'go-to-this.png'\n )\n img.setAttribute('style', 'margin: 0.3em;')\n return anchor\n}\n/**\n * Creates a Link for a URI\n *\n * Takes a div element for a link and attaches the provided linkIcon\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param linkDiv the created link will be appended to this\n * @param obj NamedNode the link needs to be created for\n *\n * @returns The HTML widget created\n *\n */\n\nexport const createLinkForURI = (dom: HTMLDocument, linkDiv: HTMLDivElement, obj: NamedNode) => {\n const iconLink = linkIcon(dom, obj)\n const anchor = linkDiv.appendChild(iconLink)\n anchor.classList.add('HoverControlHide')\n linkDiv.appendChild(dom.createElement('br'))\n}\n"],"mappings":";;AAgBA,SAAgB,EAAU,GAAmB,GAAoB,GAA+B;CAC9F,IAAM,IAAS,EAAI,cAAc,GAAG;CAEpC,AADA,EAAO,aAAa,QAAQ,EAAQ,GAAG,GACnC,EAAQ,IAAI,WAAW,MAAM,KAE/B,EAAO,aAAa,UAAU,QAAQ;CAExC,IAAM,IAAM,EAAO,YAAY,EAAI,cAAc,KAAK,CAAC;CAMvD,OALA,EAAI,aACF,OACA,KAAW,IAAmB,gBAChC,GACA,EAAI,aAAa,SAAS,gBAAgB,GACnC;AACT;AAcA,IAAa,KAAoB,GAAmB,GAAyB,MAAmB;CAC9F,IAAM,IAAW,EAAS,GAAK,CAAG;CAGlC,AADA,EADuB,YAAY,CACnC,EAAO,UAAU,IAAI,kBAAkB,GACvC,EAAQ,YAAY,EAAI,cAAc,IAAI,CAAC;AAC7C"}
1
+ {"version":3,"file":"iconLinks.esm.js","names":[],"sources":["../../../src/widgets/buttons/iconLinks.ts"],"sourcesContent":["import { NamedNode } from 'rdflib'\nimport { originalIconBase } from '../../lib/iconBase'\n\n/**\n * Creates an anchor tag for a NamedNode\n *\n * Takes a NamedNode and creates an anchor tag for it\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param subject NamedNode the anchor tag is created for\n * @param iconURI? Optional if you have your own icon link\n *\n * @returns The anchor tag for the subject\n *\n */\n\nexport function linkIcon (dom: HTMLDocument, subject: NamedNode, iconURI?: string): HTMLElement {\n const anchor = dom.createElement('a')\n anchor.setAttribute('href', subject.uri)\n if (subject.uri.startsWith('http')) {\n // If diff web page\n anchor.setAttribute('target', '_blank') // open in a new tab or window\n } // as mailboxes and mail messages do not need new browser window\n const img = anchor.appendChild(dom.createElement('img'))\n img.setAttribute(\n 'src',\n iconURI || originalIconBase + 'go-to-this.png'\n )\n img.setAttribute('style', 'margin: 0.3em;')\n return anchor\n}\n/**\n * Creates a Link for a URI\n *\n * Takes a div element for a link and attaches the provided linkIcon\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param linkDiv the created link will be appended to this\n * @param obj NamedNode the link needs to be created for\n *\n * @returns The HTML widget created\n *\n */\n\nexport const createLinkForURI = (dom: HTMLDocument, linkDiv: HTMLDivElement, obj: NamedNode) => {\n const iconLink = linkIcon(dom, obj)\n const anchor = linkDiv.appendChild(iconLink)\n anchor.classList.add('HoverControlHide')\n linkDiv.appendChild(dom.createElement('br'))\n}\n"],"mappings":";;AAgBA,SAAgB,EAAU,GAAmB,GAAoB,GAA+B;CAC9F,IAAM,IAAS,EAAI,cAAc,GAAG;CAEpC,AADA,EAAO,aAAa,QAAQ,EAAQ,GAAG,GACnC,EAAQ,IAAI,WAAW,MAAM,KAE/B,EAAO,aAAa,UAAU,QAAQ;CAExC,IAAM,IAAM,EAAO,YAAY,EAAI,cAAc,KAAK,CAAC;CAMvD,OALA,EAAI,aACF,OACA,KAAW,IAAmB,gBAChC,GACA,EAAI,aAAa,SAAS,gBAAgB,GACnC;AACT;AAcA,IAAa,KAAoB,GAAmB,GAAyB,MAAmB;CAC9F,IAAM,IAAW,EAAS,GAAK,CAAG;CAGlC,AADA,EADuB,YAAY,CACnC,CAAA,CAAO,UAAU,IAAI,kBAAkB,GACvC,EAAQ,YAAY,EAAI,cAAc,IAAI,CAAC;AAC7C"}