solid-ui 5.0.2-0 → 5.0.2-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (390) hide show
  1. package/dist/_virtual/_rolldown/runtime.esm.js +1 -2
  2. package/dist/_virtual/~icons/app/solid-emblem.esm.js +1 -2
  3. package/dist/_virtual/~icons/lucide/book-user.esm.js +1 -2
  4. package/dist/_virtual/~icons/lucide/chevron-down.esm.js +1 -2
  5. package/dist/_virtual/~icons/lucide/circle-user.esm.js +1 -2
  6. package/dist/_virtual/~icons/lucide/circle-x.esm.js +1 -2
  7. package/dist/_virtual/~icons/lucide/folder-open.cjs.js +2 -0
  8. package/dist/_virtual/~icons/lucide/folder-open.cjs.js.map +1 -0
  9. package/dist/_virtual/~icons/lucide/folder-open.esm.js +10 -0
  10. package/dist/_virtual/~icons/lucide/folder-open.esm.js.map +1 -0
  11. package/dist/_virtual/~icons/lucide/folder.cjs.js +2 -0
  12. package/dist/_virtual/~icons/lucide/folder.cjs.js.map +1 -0
  13. package/dist/_virtual/~icons/lucide/folder.esm.js +10 -0
  14. package/dist/_virtual/~icons/lucide/folder.esm.js.map +1 -0
  15. package/dist/_virtual/~icons/lucide/globe.esm.js +1 -2
  16. package/dist/_virtual/~icons/lucide/link.esm.js +1 -2
  17. package/dist/_virtual/~icons/lucide/log-in.esm.js +1 -2
  18. package/dist/_virtual/~icons/lucide/log-out.esm.js +1 -2
  19. package/dist/_virtual/~icons/lucide/square-arrow-out-up-right.esm.js +1 -2
  20. package/dist/_virtual/~icons/lucide/triangle-alert.esm.js +1 -2
  21. package/dist/_virtual/~icons/lucide/user-round.esm.js +1 -2
  22. package/dist/_virtual/~icons/lucide/user.esm.js +1 -2
  23. package/dist/_virtual/~icons/lucide/users.esm.js +1 -2
  24. package/dist/_virtual/~icons/lucide/x.esm.js +1 -2
  25. package/dist/_virtual/~icons/svg-spinners/180-ring.esm.js +1 -2
  26. package/dist/_virtual/~icons/svg-spinners/3-dots-fade.esm.js +1 -2
  27. package/dist/acl/access-controller.esm.js +1 -2
  28. package/dist/acl/access-groups.esm.js +1 -2
  29. package/dist/acl/acl-control.esm.js +1 -2
  30. package/dist/acl/acl.esm.js +1 -2
  31. package/dist/acl/add-agent-buttons.esm.js +1 -2
  32. package/dist/acl/index.esm.js +1 -2
  33. package/dist/chat/bookmarks.esm.js +1 -2
  34. package/dist/chat/chatLogic.esm.js +1 -2
  35. package/dist/chat/dateFolder.esm.js +1 -2
  36. package/dist/chat/infinite.cjs.js +1 -1
  37. package/dist/chat/infinite.cjs.js.map +1 -1
  38. package/dist/chat/infinite.esm.js +2 -3
  39. package/dist/chat/infinite.esm.js.map +1 -1
  40. package/dist/chat/keys.esm.js +1 -2
  41. package/dist/chat/message.esm.js +1 -2
  42. package/dist/chat/messageTools.esm.js +1 -2
  43. package/dist/chat/signature.esm.js +0 -1
  44. package/dist/chunks/{DialogProvider-B7oVYKJO.js → DialogProvider-C89v7x0r.js} +5 -8
  45. package/dist/chunks/{DialogProvider-B7oVYKJO.js.map → DialogProvider-C89v7x0r.js.map} +1 -1
  46. package/dist/chunks/{access-control-modal-eOv2-U27.js → access-control-modal-Dcg6-f4V.js} +924 -540
  47. package/dist/chunks/access-control-modal-Dcg6-f4V.js.map +1 -0
  48. package/dist/chunks/{account-DpmYJEd-.js → account-D6JK-n7u.js} +16 -21
  49. package/dist/chunks/{account-DpmYJEd-.js.map → account-D6JK-n7u.js.map} +1 -1
  50. package/dist/chunks/{auth-Hp8M6TQf.js → auth-B_abPDvH.js} +28 -31
  51. package/dist/chunks/auth-B_abPDvH.js.map +1 -0
  52. package/dist/chunks/{avatar-D5rcw6gN.js → avatar-BR3COVSQ.js} +6 -9
  53. package/dist/chunks/{avatar-D5rcw6gN.js.map → avatar-BR3COVSQ.js.map} +1 -1
  54. package/dist/chunks/{button-lol95DqR.js → button-D6qO2idW.js} +5 -8
  55. package/dist/chunks/{button-lol95DqR.js.map → button-D6qO2idW.js.map} +1 -1
  56. package/dist/chunks/{chevron-down-ujxRg3MD.js → chevron-down-CqUEolao.js} +2 -3
  57. package/dist/chunks/chevron-down-CqUEolao.js.map +1 -0
  58. package/dist/chunks/{chunk.UEBQI7VV-OBPERnuy.js → chunk.UEBQI7VV-lcP-fpUk.js} +14 -23
  59. package/dist/chunks/{chunk.UEBQI7VV-OBPERnuy.js.map → chunk.UEBQI7VV-lcP-fpUk.js.map} +1 -1
  60. package/dist/chunks/{combobox-Dmv-TZtI.js → combobox-fSTp9qoT.js} +11 -15
  61. package/dist/chunks/combobox-fSTp9qoT.js.map +1 -0
  62. package/dist/chunks/{combobox-option-B-Hksiq2.js → combobox-option-DOtGuKel.js} +4 -6
  63. package/dist/chunks/{combobox-option-B-Hksiq2.js.map → combobox-option-DOtGuKel.js.map} +1 -1
  64. package/dist/chunks/{components-Bdqizu8x.js → components-C8c2Ucm5.js} +17 -33
  65. package/dist/chunks/{components-Bdqizu8x.js.map → components-C8c2Ucm5.js.map} +1 -1
  66. package/dist/chunks/{dialog-DYgcCurb.js → dialog-CgYK767T.js} +8 -10
  67. package/dist/chunks/{dialog-DYgcCurb.js.map → dialog-CgYK767T.js.map} +1 -1
  68. package/dist/chunks/{dialog-content-jx08y2Oa.js → dialog-content-DjwRH1ci.js} +4 -6
  69. package/dist/chunks/{dialog-content-jx08y2Oa.js.map → dialog-content-DjwRH1ci.js.map} +1 -1
  70. package/dist/chunks/{dialog-footer-Bhl8k1PX.js → dialog-footer-GQWi8lfB.js} +4 -6
  71. package/dist/chunks/{dialog-footer-Bhl8k1PX.js.map → dialog-footer-GQWi8lfB.js.map} +1 -1
  72. package/dist/chunks/{dialog-header-Dn6PQzFB.js → dialog-header-c3qOMQfb.js} +4 -6
  73. package/dist/chunks/{dialog-header-Dn6PQzFB.js.map → dialog-header-c3qOMQfb.js.map} +1 -1
  74. package/dist/chunks/{dialogs-B6TfxrPt.js → dialogs-BmtLjMzg.js} +5 -7
  75. package/dist/chunks/{dialogs-B6TfxrPt.js.map → dialogs-BmtLjMzg.js.map} +1 -1
  76. package/dist/chunks/{dialogs-root-Qiucjj9u.js → dialogs-root-BcQo2XMF.js} +6 -8
  77. package/dist/chunks/{dialogs-root-Qiucjj9u.js.map → dialogs-root-BcQo2XMF.js.map} +1 -1
  78. package/dist/chunks/{error-state-DK1x-kNd.js → error-state-BD4_Wrkz.js} +6 -8
  79. package/dist/chunks/{error-state-DK1x-kNd.js.map → error-state-BD4_Wrkz.js.map} +1 -1
  80. package/dist/chunks/{guard-FbhNrJGh.js → guard-bTeM7wd7.js} +5 -7
  81. package/dist/chunks/{guard-FbhNrJGh.js.map → guard-bTeM7wd7.js.map} +1 -1
  82. package/dist/chunks/{index.esm-N8NHgFUj.js → index.esm-CECfD0e9.js} +3256 -3083
  83. package/dist/chunks/index.esm-CECfD0e9.js.map +1 -0
  84. package/dist/chunks/{input-lpqx_k53.js → input-Bz3l514j.js} +5 -7
  85. package/dist/chunks/{input-lpqx_k53.js.map → input-Bz3l514j.js.map} +1 -1
  86. package/dist/chunks/{jsonld-Djw57WRt.js → jsonld-CnfzCyCn.js} +4 -5
  87. package/dist/chunks/{jsonld-Djw57WRt.js.map → jsonld-CnfzCyCn.js.map} +1 -1
  88. package/dist/chunks/{login-button-DCq4Gi3_.js → login-button-Div4ZT4J.js} +6 -8
  89. package/dist/chunks/{login-button-DCq4Gi3_.js.map → login-button-Div4ZT4J.js.map} +1 -1
  90. package/dist/chunks/{logout-button-D3dJrsV4.js → logout-button-D3lqlnCX.js} +6 -8
  91. package/dist/chunks/{logout-button-D3dJrsV4.js.map → logout-button-D3lqlnCX.js.map} +1 -1
  92. package/dist/chunks/{menu-RJklqKQE.js → menu-D0k2fkiE.js} +22 -39
  93. package/dist/chunks/{menu-RJklqKQE.js.map → menu-D0k2fkiE.js.map} +1 -1
  94. package/dist/chunks/{menu-item-C2e0qj-v.js → menu-item-nfPpH4dN.js} +5 -7
  95. package/dist/chunks/{menu-item-C2e0qj-v.js.map → menu-item-nfPpH4dN.js.map} +1 -1
  96. package/dist/chunks/{photo-capture-DEMQNmzb.js → photo-capture-hJaJm4TM.js} +6 -8
  97. package/dist/chunks/{photo-capture-DEMQNmzb.js.map → photo-capture-hJaJm4TM.js.map} +1 -1
  98. package/dist/chunks/{photo-capture-modal-C7oESDQq.js → photo-capture-modal-BsHv6wmh.js} +9 -11
  99. package/dist/chunks/{photo-capture-modal-C7oESDQq.js.map → photo-capture-modal-BsHv6wmh.js.map} +1 -1
  100. package/dist/chunks/{provider-D9UgRI4G.js → provider-Dcd1NPYx.js} +7 -9
  101. package/dist/chunks/{provider-D9UgRI4G.js.map → provider-Dcd1NPYx.js.map} +1 -1
  102. package/dist/chunks/{query-BYu9q8lA.js → query-DjAOg-tk.js} +3 -5
  103. package/dist/chunks/{query-BYu9q8lA.js.map → query-DjAOg-tk.js.map} +1 -1
  104. package/dist/chunks/{rdf-form-BLgKdXP2.js → rdf-form-CmPnHKR-.js} +23 -25
  105. package/dist/chunks/{rdf-form-BLgKdXP2.js.map → rdf-form-CmPnHKR-.js.map} +1 -1
  106. package/dist/chunks/{rdf-input-DWnDpkXy.js → rdf-input-3AgoeCkJ.js} +48 -51
  107. package/dist/chunks/{rdf-input-DWnDpkXy.js.map → rdf-input-3AgoeCkJ.js.map} +1 -1
  108. package/dist/chunks/{select-CnkJMo_K.js → select-ClPkDkGl.js} +7 -10
  109. package/dist/chunks/{select-CnkJMo_K.js.map → select-ClPkDkGl.js.map} +1 -1
  110. package/dist/chunks/{select-option-B9HSZiTp.js → select-option-DQan7rcB.js} +4 -6
  111. package/dist/chunks/{select-option-B9HSZiTp.js.map → select-option-DQan7rcB.js.map} +1 -1
  112. package/dist/chunks/{show-dialog-eEW5yRBv.js → show-dialog-DAmFslrf.js} +2 -3
  113. package/dist/chunks/{show-dialog-eEW5yRBv.js.map → show-dialog-DAmFslrf.js.map} +1 -1
  114. package/dist/chunks/{signup-button-BQ4AWem2.js → signup-button-2fAoS0Nv.js} +6 -8
  115. package/dist/chunks/{signup-button-BQ4AWem2.js.map → signup-button-2fAoS0Nv.js.map} +1 -1
  116. package/dist/chunks/{solid-emblem-DNjQSX1z.js → solid-emblem-DwLdkGuO.js} +5 -8
  117. package/dist/chunks/{solid-emblem-DNjQSX1z.js.map → solid-emblem-DwLdkGuO.js.map} +1 -1
  118. package/dist/chunks/{src-DQMZZG1B.js → src-Dx7k_VIe.js} +2732 -2782
  119. package/dist/chunks/src-Dx7k_VIe.js.map +1 -0
  120. package/dist/chunks/{style-ChFDDB1c.js → style-w0Fl0xnd.js} +25 -29
  121. package/dist/chunks/{style-ChFDDB1c.js.map → style-w0Fl0xnd.js.map} +1 -1
  122. package/dist/chunks/{widgets-CVLwnfkU.js → widgets-BWpm5CPx.js} +694 -715
  123. package/dist/chunks/widgets-BWpm5CPx.js.map +1 -0
  124. package/dist/chunks/{x-BRRkraZN.js → x-D1JUUSOS.js} +2 -3
  125. package/dist/chunks/x-D1JUUSOS.js.map +1 -0
  126. package/dist/components/access-control-modal/AccessControlAddAccess.cjs.js +11 -5
  127. package/dist/components/access-control-modal/AccessControlAddAccess.cjs.js.map +1 -1
  128. package/dist/components/access-control-modal/AccessControlAddAccess.d.ts +1 -0
  129. package/dist/components/access-control-modal/AccessControlAddAccess.d.ts.map +1 -1
  130. package/dist/components/access-control-modal/AccessControlAddAccess.esm.js +75 -57
  131. package/dist/components/access-control-modal/AccessControlAddAccess.esm.js.map +1 -1
  132. package/dist/components/access-control-modal/AccessControlAddAccess.styles.cjs.js +1 -1
  133. package/dist/components/access-control-modal/AccessControlAddAccess.styles.cjs.js.map +1 -1
  134. package/dist/components/access-control-modal/AccessControlAddAccess.styles.esm.js +2 -3
  135. package/dist/components/access-control-modal/AccessControlAddAccess.styles.esm.js.map +1 -1
  136. package/dist/components/access-control-modal/AccessControlErrors.cjs.js +3 -2
  137. package/dist/components/access-control-modal/AccessControlErrors.cjs.js.map +1 -1
  138. package/dist/components/access-control-modal/AccessControlErrors.d.ts +1 -0
  139. package/dist/components/access-control-modal/AccessControlErrors.d.ts.map +1 -1
  140. package/dist/components/access-control-modal/AccessControlErrors.esm.js +6 -3
  141. package/dist/components/access-control-modal/AccessControlErrors.esm.js.map +1 -1
  142. package/dist/components/access-control-modal/AccessControlErrors.styles.esm.js +1 -2
  143. package/dist/components/access-control-modal/AccessControlGeneralAccess.cjs.js +5 -3
  144. package/dist/components/access-control-modal/AccessControlGeneralAccess.cjs.js.map +1 -1
  145. package/dist/components/access-control-modal/AccessControlGeneralAccess.d.ts +1 -0
  146. package/dist/components/access-control-modal/AccessControlGeneralAccess.d.ts.map +1 -1
  147. package/dist/components/access-control-modal/AccessControlGeneralAccess.esm.js +57 -45
  148. package/dist/components/access-control-modal/AccessControlGeneralAccess.esm.js.map +1 -1
  149. package/dist/components/access-control-modal/AccessControlGeneralAccess.styles.esm.js +1 -2
  150. package/dist/components/access-control-modal/AccessControlModal.cjs.js +112 -6
  151. package/dist/components/access-control-modal/AccessControlModal.cjs.js.map +1 -1
  152. package/dist/components/access-control-modal/AccessControlModal.d.ts +27 -0
  153. package/dist/components/access-control-modal/AccessControlModal.d.ts.map +1 -1
  154. package/dist/components/access-control-modal/AccessControlModal.esm.js +411 -127
  155. package/dist/components/access-control-modal/AccessControlModal.esm.js.map +1 -1
  156. package/dist/components/access-control-modal/AccessControlModal.styles.cjs.js +1 -1
  157. package/dist/components/access-control-modal/AccessControlModal.styles.cjs.js.map +1 -1
  158. package/dist/components/access-control-modal/AccessControlModal.styles.esm.js +2 -3
  159. package/dist/components/access-control-modal/AccessControlModal.styles.esm.js.map +1 -1
  160. package/dist/components/access-control-modal/AccessControlSharedAccess.cjs.js +6 -5
  161. package/dist/components/access-control-modal/AccessControlSharedAccess.cjs.js.map +1 -1
  162. package/dist/components/access-control-modal/AccessControlSharedAccess.d.ts +1 -0
  163. package/dist/components/access-control-modal/AccessControlSharedAccess.d.ts.map +1 -1
  164. package/dist/components/access-control-modal/AccessControlSharedAccess.esm.js +71 -55
  165. package/dist/components/access-control-modal/AccessControlSharedAccess.esm.js.map +1 -1
  166. package/dist/components/access-control-modal/AccessControlSharedAccess.styles.esm.js +1 -2
  167. package/dist/components/access-control-modal/accessGrantDrafts.cjs.js +1 -1
  168. package/dist/components/access-control-modal/accessGrantDrafts.cjs.js.map +1 -1
  169. package/dist/components/access-control-modal/accessGrantDrafts.d.ts.map +1 -1
  170. package/dist/components/access-control-modal/accessGrantDrafts.esm.js +6 -7
  171. package/dist/components/access-control-modal/accessGrantDrafts.esm.js.map +1 -1
  172. package/dist/components/access-control-modal/accessTargetResolver.cjs.js +1 -1
  173. package/dist/components/access-control-modal/accessTargetResolver.cjs.js.map +1 -1
  174. package/dist/components/access-control-modal/accessTargetResolver.d.ts +1 -0
  175. package/dist/components/access-control-modal/accessTargetResolver.d.ts.map +1 -1
  176. package/dist/components/access-control-modal/accessTargetResolver.esm.js +92 -46
  177. package/dist/components/access-control-modal/accessTargetResolver.esm.js.map +1 -1
  178. package/dist/components/access-control-modal/applyAccessChanges.cjs.js +1 -1
  179. package/dist/components/access-control-modal/applyAccessChanges.cjs.js.map +1 -1
  180. package/dist/components/access-control-modal/applyAccessChanges.d.ts +4 -2
  181. package/dist/components/access-control-modal/applyAccessChanges.d.ts.map +1 -1
  182. package/dist/components/access-control-modal/applyAccessChanges.esm.js +23 -15
  183. package/dist/components/access-control-modal/applyAccessChanges.esm.js.map +1 -1
  184. package/dist/components/access-control-modal/buildAccessChanges.esm.js +1 -2
  185. package/dist/components/access-control-modal/helpers.esm.js +1 -2
  186. package/dist/components/access-control-modal/index.esm.js +1 -2
  187. package/dist/components/access-control-modal/types.d.ts +6 -1
  188. package/dist/components/access-control-modal/types.d.ts.map +1 -1
  189. package/dist/components/access-control-modal.js +1 -1
  190. package/dist/components/account/Account.esm.js +1 -2
  191. package/dist/components/account/Account.styles.esm.js +1 -2
  192. package/dist/components/account/index.esm.js +1 -2
  193. package/dist/components/account.js +1 -1
  194. package/dist/components/avatar/Avatar.esm.js +1 -2
  195. package/dist/components/avatar/Avatar.styles.esm.js +1 -2
  196. package/dist/components/avatar/index.esm.js +1 -2
  197. package/dist/components/avatar.js +1 -1
  198. package/dist/components/button/Button.esm.js +1 -2
  199. package/dist/components/button/Button.styles.esm.js +1 -2
  200. package/dist/components/button/index.esm.js +1 -2
  201. package/dist/components/button.js +1 -1
  202. package/dist/components/combobox/Combobox.cjs.js +1 -0
  203. package/dist/components/combobox/Combobox.cjs.js.map +1 -1
  204. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  205. package/dist/components/combobox/Combobox.esm.js +2 -2
  206. package/dist/components/combobox/Combobox.esm.js.map +1 -1
  207. package/dist/components/combobox/Combobox.styles.esm.js +1 -2
  208. package/dist/components/combobox/index.esm.js +1 -2
  209. package/dist/components/combobox-option/ComboboxOption.esm.js +1 -2
  210. package/dist/components/combobox-option/index.esm.js +1 -2
  211. package/dist/components/combobox-option.js +1 -1
  212. package/dist/components/combobox.js +1 -1
  213. package/dist/components/dialog/Dialog.esm.js +1 -2
  214. package/dist/components/dialog/Dialog.styles.esm.js +1 -2
  215. package/dist/components/dialog/index.esm.js +1 -2
  216. package/dist/components/dialog-content/DialogContent.esm.js +1 -2
  217. package/dist/components/dialog-content/DialogContent.styles.esm.js +1 -2
  218. package/dist/components/dialog-content/index.esm.js +1 -2
  219. package/dist/components/dialog-content.js +1 -1
  220. package/dist/components/dialog-footer/DialogFooter.esm.js +1 -2
  221. package/dist/components/dialog-footer/DialogFooter.styles.esm.js +1 -2
  222. package/dist/components/dialog-footer/index.esm.js +1 -2
  223. package/dist/components/dialog-footer.js +1 -1
  224. package/dist/components/dialog-header/DialogHeader.esm.js +1 -2
  225. package/dist/components/dialog-header/DialogHeader.styles.esm.js +1 -2
  226. package/dist/components/dialog-header/index.esm.js +1 -2
  227. package/dist/components/dialog-header.js +1 -1
  228. package/dist/components/dialog-provider/DialogProvider.esm.js +1 -2
  229. package/dist/components/dialog-provider/index.esm.js +1 -2
  230. package/dist/components/dialog-provider.js +2 -3
  231. package/dist/components/dialog.js +1 -1
  232. package/dist/components/dialogs-root/DialogsRoot.esm.js +1 -2
  233. package/dist/components/dialogs-root/index.esm.js +1 -2
  234. package/dist/components/dialogs-root.js +1 -1
  235. package/dist/components/error-state/ErrorState.esm.js +1 -2
  236. package/dist/components/error-state/ErrorState.styles.esm.js +1 -2
  237. package/dist/components/error-state.js +1 -1
  238. package/dist/components/guard/Guard.esm.js +1 -2
  239. package/dist/components/guard/index.esm.js +1 -2
  240. package/dist/components/guard.js +1 -1
  241. package/dist/components/input/Input.esm.js +1 -2
  242. package/dist/components/input/Input.styles.esm.js +1 -2
  243. package/dist/components/input/index.esm.js +1 -2
  244. package/dist/components/input.js +1 -1
  245. package/dist/components/login-button/LoginButton.esm.js +1 -2
  246. package/dist/components/login-button/index.esm.js +1 -2
  247. package/dist/components/login-button.js +1 -1
  248. package/dist/components/login-modal/LoginModal.esm.js +1 -2
  249. package/dist/components/login-modal/LoginModal.styles.esm.js +1 -2
  250. package/dist/components/login-modal/index.esm.js +1 -2
  251. package/dist/components/login-modal.js +1 -1
  252. package/dist/components/logout-button/LogoutButton.esm.js +1 -2
  253. package/dist/components/logout-button/index.esm.js +1 -2
  254. package/dist/components/logout-button.js +1 -1
  255. package/dist/components/menu/Menu.esm.js +1 -2
  256. package/dist/components/menu/Menu.styles.esm.js +1 -2
  257. package/dist/components/menu/index.esm.js +1 -2
  258. package/dist/components/menu-item/MenuItem.esm.js +1 -2
  259. package/dist/components/menu-item/MenuItem.styles.esm.js +1 -2
  260. package/dist/components/menu-item/index.esm.js +1 -2
  261. package/dist/components/menu-item.js +1 -1
  262. package/dist/components/menu.js +1 -1
  263. package/dist/components/photo-capture/PhotoCapture.esm.js +1 -2
  264. package/dist/components/photo-capture/index.esm.js +1 -2
  265. package/dist/components/photo-capture-modal/PhotoCaptureModal.cjs.js +1 -1
  266. package/dist/components/photo-capture-modal/PhotoCaptureModal.cjs.js.map +1 -1
  267. package/dist/components/photo-capture-modal/PhotoCaptureModal.esm.js +2 -3
  268. package/dist/components/photo-capture-modal/PhotoCaptureModal.esm.js.map +1 -1
  269. package/dist/components/photo-capture-modal/PhotoCaptureModal.styles.esm.js +1 -2
  270. package/dist/components/photo-capture-modal/index.esm.js +1 -2
  271. package/dist/components/photo-capture-modal.js +1 -1
  272. package/dist/components/photo-capture.js +1 -1
  273. package/dist/components/provider/Provider.esm.js +1 -2
  274. package/dist/components/provider/index.esm.js +1 -2
  275. package/dist/components/provider.js +1 -1
  276. package/dist/components/rdf-form/RDFForm.esm.js +1 -2
  277. package/dist/components/rdf-form/index.esm.js +1 -2
  278. package/dist/components/rdf-form.js +1 -1
  279. package/dist/components/rdf-input/RDFInput.esm.js +1 -2
  280. package/dist/components/rdf-input/index.esm.js +1 -2
  281. package/dist/components/rdf-input.js +1 -1
  282. package/dist/components/select/Select.esm.js +1 -2
  283. package/dist/components/select/Select.styles.esm.js +1 -2
  284. package/dist/components/select/index.esm.js +1 -2
  285. package/dist/components/select-option/SelectOption.esm.js +1 -2
  286. package/dist/components/select-option/index.esm.js +1 -2
  287. package/dist/components/select-option.js +1 -1
  288. package/dist/components/select.js +1 -1
  289. package/dist/components/signup-button/SignupButton.esm.js +1 -2
  290. package/dist/components/signup-button/index.esm.js +1 -2
  291. package/dist/components/signup-button.js +1 -1
  292. package/dist/components/solid-emblem/SolidEmblem.esm.js +1 -2
  293. package/dist/components/solid-emblem/SolidEmblem.styles.esm.js +1 -2
  294. package/dist/components/solid-emblem/index.esm.js +1 -2
  295. package/dist/components/solid-emblem.js +1 -1
  296. package/dist/components.js +28 -28
  297. package/dist/create/create.esm.js +1 -2
  298. package/dist/create/index.esm.js +1 -2
  299. package/dist/create/types.esm.js +1 -2
  300. package/dist/footer/index.esm.js +1 -2
  301. package/dist/header/empty-profile.esm.js +1 -2
  302. package/dist/header/index.esm.js +1 -2
  303. package/dist/index.esm.js +1 -2
  304. package/dist/index.js +8 -8
  305. package/dist/lib/auth/Account.esm.js +1 -2
  306. package/dist/lib/auth/NoopAuth.esm.js +1 -2
  307. package/dist/lib/auth/SolidAuth.esm.js +1 -2
  308. package/dist/lib/auth/context.esm.js +1 -2
  309. package/dist/lib/code-editor/CodeEditor.esm.js +1 -2
  310. package/dist/lib/components/decorators.esm.js +1 -2
  311. package/dist/lib/components/dialog-component/DialogComponent.esm.js +1 -2
  312. package/dist/lib/components/form-control-component/FormControlComponent.esm.js +1 -2
  313. package/dist/lib/components/ids.esm.js +1 -2
  314. package/dist/lib/components/traits/DialogTrait.esm.js +1 -2
  315. package/dist/lib/components/traits/FormControlTrait.esm.js +1 -2
  316. package/dist/lib/components/web-component/WebComponent.esm.js +1 -2
  317. package/dist/lib/components/web-component/WebComponent.styles.esm.js +1 -2
  318. package/dist/lib/debug.esm.js +1 -2
  319. package/dist/lib/dialogs/Dialog.esm.js +1 -2
  320. package/dist/lib/dialogs/context.esm.js +1 -2
  321. package/dist/lib/dialogs/events/close-dialog.esm.js +1 -2
  322. package/dist/lib/dialogs/events/show-dialog.esm.js +1 -2
  323. package/dist/lib/dialogs/helpers.esm.js +1 -2
  324. package/dist/lib/file-explorer/context.esm.js +1 -2
  325. package/dist/lib/forms/fieldParams.esm.js +1 -2
  326. package/dist/lib/forms/rdfFormsHelper.esm.js +1 -2
  327. package/dist/lib/forms/store/NoopStore.esm.js +1 -2
  328. package/dist/lib/forms/store/StoreContext.esm.js +1 -2
  329. package/dist/lib/iconBase.esm.js +1 -2
  330. package/dist/lib/log.esm.js +1 -2
  331. package/dist/lib/messageArea.esm.js +1 -2
  332. package/dist/lib/newperson.esm.js +1 -2
  333. package/dist/lib/ns.esm.js +1 -2
  334. package/dist/lib/pad.esm.js +1 -2
  335. package/dist/lib/participation.esm.js +1 -2
  336. package/dist/lib/preferences.esm.js +1 -2
  337. package/dist/lib/style.esm.js +1 -2
  338. package/dist/lib/styleConstants.esm.js +1 -2
  339. package/dist/lib/style_multiSelect.esm.js +1 -2
  340. package/dist/lib/table.esm.js +1 -2
  341. package/dist/lib/tabs.esm.js +1 -2
  342. package/dist/lib/timing.esm.js +1 -2
  343. package/dist/lib/values.esm.js +1 -2
  344. package/dist/loader.js +8 -8
  345. package/dist/login/login.esm.js +1 -2
  346. package/dist/matrix/index.esm.js +1 -2
  347. package/dist/matrix/matrix.esm.js +1 -2
  348. package/dist/media/index.esm.js +1 -2
  349. package/dist/media/media-capture.esm.js +1 -2
  350. package/dist/signup/config-default.esm.js +1 -2
  351. package/dist/signup/signup.esm.js +1 -2
  352. package/dist/solid-ui.js +243 -126
  353. package/dist/solid-ui.min.js +243 -126
  354. package/dist/solid-ui.min.js.map +1 -1
  355. package/dist/utils/headerFooterHelpers.esm.js +1 -2
  356. package/dist/utils/index.esm.js +1 -2
  357. package/dist/utils/keyHelpers/accessData.esm.js +1 -2
  358. package/dist/utils/keyHelpers/acl.esm.js +1 -2
  359. package/dist/utils/keyHelpers/otherHelpers.esm.js +1 -2
  360. package/dist/utils/label.esm.js +1 -2
  361. package/dist/widgets/buttons/iconLinks.esm.js +1 -2
  362. package/dist/widgets/buttons.esm.js +1 -2
  363. package/dist/widgets/dragAndDrop.esm.js +1 -2
  364. package/dist/widgets/error.esm.js +1 -2
  365. package/dist/widgets/forms/autocomplete/autocompleteBar.esm.js +1 -2
  366. package/dist/widgets/forms/autocomplete/autocompleteField.esm.js +1 -2
  367. package/dist/widgets/forms/autocomplete/autocompletePicker.cjs.js +1 -1
  368. package/dist/widgets/forms/autocomplete/autocompletePicker.cjs.js.map +1 -1
  369. package/dist/widgets/forms/autocomplete/autocompletePicker.esm.js +2 -3
  370. package/dist/widgets/forms/autocomplete/autocompletePicker.esm.js.map +1 -1
  371. package/dist/widgets/forms/autocomplete/language.esm.js +1 -2
  372. package/dist/widgets/forms/autocomplete/publicData.esm.js +1 -2
  373. package/dist/widgets/forms/basic.esm.js +1 -2
  374. package/dist/widgets/forms/fieldFunction.esm.js +1 -2
  375. package/dist/widgets/forms/fieldParams.esm.js +1 -2
  376. package/dist/widgets/forms/formStyle.esm.js +1 -2
  377. package/dist/widgets/forms.esm.js +1 -2
  378. package/dist/widgets/index.esm.js +1 -2
  379. package/dist/widgets/multiSelect.esm.js +1 -2
  380. package/dist/widgets/peoplePicker.esm.js +1 -2
  381. package/dist/widgets/widgetHelpers.esm.js +1 -2
  382. package/package.json +2 -2
  383. package/dist/chunks/access-control-modal-eOv2-U27.js.map +0 -1
  384. package/dist/chunks/auth-Hp8M6TQf.js.map +0 -1
  385. package/dist/chunks/chevron-down-ujxRg3MD.js.map +0 -1
  386. package/dist/chunks/combobox-Dmv-TZtI.js.map +0 -1
  387. package/dist/chunks/index.esm-N8NHgFUj.js.map +0 -1
  388. package/dist/chunks/src-DQMZZG1B.js.map +0 -1
  389. package/dist/chunks/widgets-CVLwnfkU.js.map +0 -1
  390. package/dist/chunks/x-BRRkraZN.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import e from "../lib/ns.esm.js";
2
2
  import { parse as t, sym as n } from "rdflib";
3
- //#region src/utils/headerFooterHelpers.ts
3
+ // src/utils/headerFooterHelpers.ts
4
4
  function r() {
5
5
  let { origin: e, pathname: t } = document.location, r = document.body?.dataset?.appShell === "databrowser", i = t.split("/").filter(Boolean), a = i[i.length - 1] || "", o = /\.[^/]+$/.test(a);
6
6
  return r && i.length > 0 && !o ? n(`${e}/${i[0]}/`) : n(e).site();
@@ -48,7 +48,6 @@ function o(e, t, n = {}) {
48
48
  return r = this, i = arguments, u <= 0 || u > t ? (o &&= (clearTimeout(o), null), s = l, a = e.apply(r, i), o || (r = i = null)) : !o && n.trailing !== !1 && (o = setTimeout(c, u)), a;
49
49
  };
50
50
  }
51
- //#endregion
52
51
  export { a as getName, r as getPod, i as getPodOwner, o as throttle };
53
52
 
54
53
  //# sourceMappingURL=headerFooterHelpers.esm.js.map
@@ -4,7 +4,7 @@ import { log_exports as n } from "../lib/log.esm.js";
4
4
  import { label as r } from "./label.esm.js";
5
5
  import * as i from "rdflib";
6
6
  import { store as a } from "solid-logic";
7
- //#region src/utils/index.js
7
+ // src/utils/index.js
8
8
  var o = /* @__PURE__ */ e({
9
9
  AJARImage: () => D,
10
10
  RDFComparePredicateObject: () => F,
@@ -269,7 +269,6 @@ function L(e) {
269
269
  else if (t.previousSibling && t.previousSibling.nodeName === "TR") t = t.previousSibling;
270
270
  else return s.log.error("Could not find predParent"), e;
271
271
  }
272
- //#endregion
273
272
  export { D as AJARImage, F as RDFComparePredicateObject, I as RDFComparePredicateSubject, w as addLoadEvent, b as ancestor, f as beep, u as clearVariableNames, v as emptyNode, j as escapeForXML, T as findPos, m as genUuid, x as getAbout, E as getEyeFocus, y as getTarget, S as getTerm, p as hashColor, C as include, r as label, M as labelForXML, A as labelWithOntology, l as newVariableName, k as ontologyLabel, L as predParentOf, P as predicateLabel, N as predicateLabelForXML, O as shortName, _ as stackString, h as syncTableToArray, g as syncTableToArrayReOrdered, o as utils_exports };
274
273
 
275
274
  //# sourceMappingURL=index.esm.js.map
@@ -2,7 +2,7 @@ import e from "../../lib/ns.esm.js";
2
2
  import { error as t, log as n } from "../../lib/debug.esm.js";
3
3
  import { getRootIfPreferencesExist as r } from "./otherHelpers.esm.js";
4
4
  import { store as i } from "solid-logic";
5
- //#region src/utils/keyHelpers/accessData.ts
5
+ // src/utils/keyHelpers/accessData.ts
6
6
  var a = (e) => {
7
7
  let n;
8
8
  try {
@@ -46,7 +46,6 @@ async function l(t, r, a) {
46
46
  throw n("createIfNotExists doc FAILED: " + r + ": " + e), e;
47
47
  }
48
48
  }
49
- //#endregion
50
49
  export { c as getExistingPrivateKey, s as getExistingPublicKey, l as getKeyIfExists, o as privKeyUrl, a as pubKeyUrl };
51
50
 
52
51
  //# sourceMappingURL=accessData.esm.js.map
@@ -1,6 +1,6 @@
1
1
  import { log as e } from "../../lib/debug.esm.js";
2
2
  import { store as t } from "solid-logic";
3
- //#region src/utils/keyHelpers/acl.ts
3
+ // src/utils/keyHelpers/acl.ts
4
4
  async function n(n, r) {
5
5
  await t.fetcher.load(n);
6
6
  let i = t.any(t.sym(n), t.sym("http://www.iana.org/assignments/link-relations/acl"));
@@ -39,7 +39,6 @@ var r = (e) => `
39
39
  acl:mode acl:Read.
40
40
  `;
41
41
  };
42
- //#endregion
43
42
  export { i as keyAclBody, r as keyContainerAclBody, n as setAcl };
44
43
 
45
44
  //# sourceMappingURL=acl.esm.js.map
@@ -1,12 +1,11 @@
1
1
  import e from "../../lib/ns.esm.js";
2
2
  import { store as t } from "solid-logic";
3
- //#region src/utils/keyHelpers/otherHelpers.ts
3
+ // src/utils/keyHelpers/otherHelpers.ts
4
4
  var n = (n) => {
5
5
  let r = t.any(n, e.space("preferencesFile"), null, n.doc())?.value;
6
6
  if (r = r?.split("/").slice(0, -2).join("/"), !r) throw Error(`prefererencesFile is expected to exist in ${n}`);
7
7
  return r;
8
8
  };
9
- //#endregion
10
9
  export { n as getRootIfPreferencesExist };
11
10
 
12
11
  //# sourceMappingURL=otherHelpers.esm.js.map
@@ -2,7 +2,7 @@ import e from "../lib/ns.esm.js";
2
2
  import { log_exports as t } from "../lib/log.esm.js";
3
3
  import * as n from "rdflib";
4
4
  import { store as r } from "solid-logic";
5
- //#region src/utils/label.ts
5
+ // src/utils/label.ts
6
6
  var i = {
7
7
  log: t,
8
8
  ns: e,
@@ -45,7 +45,6 @@ function o(e, t) {
45
45
  function s(e) {
46
46
  return r.any(e, i.ns.ui("label")) || r.any(e, i.ns.link("message")) || r.any(e, i.ns.vcard("fn")) || r.any(e, i.ns.foaf("name")) || r.any(e, i.ns.dct("title")) || r.any(e, i.ns.dc("title")) || r.any(e, i.ns.rss("title")) || r.any(e, i.ns.contact("fullName")) || r.any(e, r.sym("http://www.w3.org/2001/04/roadmap/org#name")) || r.any(e, i.ns.cal("summary")) || r.any(e, i.ns.foaf("nick")) || r.any(e, i.ns.as("name")) || r.any(e, i.ns.schema("name")) || r.any(e, i.ns.rdfs("label")) || r.any(e, r.sym("http://www.w3.org/2004/02/skos/core#prefLabel"));
47
47
  }
48
- //#endregion
49
48
  export { a as label };
50
49
 
51
50
  //# sourceMappingURL=label.esm.js.map
@@ -1,5 +1,5 @@
1
1
  import "../../_virtual/~icons/lucide/square-arrow-out-up-right.esm.js";
2
- //#region src/widgets/buttons/iconLinks.ts
2
+ // src/widgets/buttons/iconLinks.ts
3
3
  function e(e, t, n) {
4
4
  let r = e.createElement("a");
5
5
  if (r.setAttribute("href", t.uri), t.uri.startsWith("http") && r.setAttribute("target", "_blank"), n) {
@@ -16,7 +16,6 @@ var t = (t, n, r) => {
16
16
  let i = e(t, r);
17
17
  n.appendChild(i).classList.add("HoverControlHide"), n.appendChild(t.createElement("br"));
18
18
  };
19
- //#endregion
20
19
  export { t as createLinkForURI, e as linkIcon };
21
20
 
22
21
  //# sourceMappingURL=iconLinks.esm.js.map
@@ -12,7 +12,7 @@ import { addClickListenerToElement as m, createImageDiv as h, wrapDivInATR as g
12
12
  import { createLinkForURI as _, linkIcon as v } from "./buttons/iconLinks.esm.js";
13
13
  import { Util as y, st as b, sym as x, uri as S } from "rdflib";
14
14
  import { store as C } from "solid-logic";
15
- //#region src/widgets/buttons.ts
15
+ // src/widgets/buttons.ts
16
16
  var { iconBase: w } = f, T = w + "noun_1180156.svg", E = w + "noun_1180158.svg";
17
17
  function D(e) {
18
18
  let t = e && e.statusArea || e && e.div || null;
@@ -543,7 +543,6 @@ Z = {
543
543
  widgetForClass: he
544
544
  }
545
545
  };
546
- //#endregion
547
546
  export { ve as addStyleSheet, le as allClassURIs, ie as askName, oe as attachmentList, H as button, U as cancelButton, k as clearElement, O as complain, W as continueButton, J as createLinkDiv, q as createNameDiv, ce as defaultAnnotationStore, V as deleteButtonWithCheck, A as extractLogURI, B as faviconOrDefault, $ as fileUploadButtonDiv, L as findImage, I as findImageFromURI, M as formatDateTime, P as iconForClass, ne as imagesOf, Z as index, ye as isAudio, Q as isImage, be as isVideo, de as linkButton, se as openHrefInOutlineMode, G as personTR, ue as propertyTriage, Y as refreshTree, fe as removeButton, ae as renderAsDiv, K as renderAsRow, pe as selectorPanel, X as selectorPanelRefresh, z as setImage, N as setName, j as shortDate, te as shortTime, ee as timestamp };
548
547
 
549
548
  //# sourceMappingURL=buttons.esm.js.map
@@ -1,7 +1,7 @@
1
1
  import { log as e } from "../lib/debug.esm.js";
2
2
  import { style as t } from "../lib/style.esm.js";
3
3
  import * as n from "mime-types";
4
- //#region src/widgets/dragAndDrop.js
4
+ // src/widgets/dragAndDrop.js
5
5
  function r(n, r, i) {
6
6
  let a = function(e) {
7
7
  return e.split("\n").map((e) => e.trim()).filter((e) => e && e[0] !== "#");
@@ -83,7 +83,6 @@ function a(t, r, i, a, o) {
83
83
  })(l), u.readAsArrayBuffer(l);
84
84
  }
85
85
  }
86
- //#endregion
87
86
  export { i as makeDraggable, r as makeDropTarget, a as uploadFiles };
88
87
 
89
88
  //# sourceMappingURL=dragAndDrop.esm.js.map
@@ -2,14 +2,13 @@ import e from "../lib/styleConstants.esm.js";
2
2
  import { style as t } from "../lib/style.esm.js";
3
3
  import { cancelButton as n } from "./buttons.esm.js";
4
4
  import "./index.esm.js";
5
- //#region src/widgets/error.ts
5
+ // src/widgets/error.ts
6
6
  function r(r, i, a, o) {
7
7
  let s = r.createElement("div"), c = o || i instanceof Error ? i : null;
8
8
  return c ? (console.error(`errorMessageBlock: ${c} at: ${c.stack || "??"}`, c), s.textContent = c.message) : s.textContent = i, s.appendChild(n(r, () => {
9
9
  s.parentNode && s.parentNode.removeChild(s);
10
10
  })).style = t.errorCancelButton, s.setAttribute("style", t.errorMessageBlockStyle), s.style.backgroundColor = a || e.defaultErrorBackgroundColor, s;
11
11
  }
12
- //#endregion
13
12
  export { r as errorMessageBlock };
14
13
 
15
14
  //# sourceMappingURL=error.esm.js.map
@@ -7,7 +7,7 @@ import { askName as i, button as a, cancelButton as o, continueButton as s, dele
7
7
  import { renderAutoComplete as l, setVisible as u } from "./autocompletePicker.esm.js";
8
8
  import "../../index.esm.js";
9
9
  import { store as d } from "solid-logic";
10
- //#region src/widgets/forms/autocomplete/autocompleteBar.ts
10
+ // src/widgets/forms/autocomplete/autocompleteBar.ts
11
11
  var f = "Solid ID", p = r.iconBase + "noun_34653_green.svg", m = r.iconBase + "noun_Search_875351.svg", h = r.iconBase + "noun_253504.svg";
12
12
  async function g(r, g, _, v, y, b) {
13
13
  async function x(e, t) {
@@ -58,7 +58,6 @@ async function g(r, g, _, v, y, b) {
58
58
  }
59
59
  return P(), L;
60
60
  }
61
- //#endregion
62
61
  export { g as renderAutocompleteControl };
63
62
 
64
63
  //# sourceMappingURL=autocompleteBar.esm.js.map
@@ -6,7 +6,7 @@ import { renderAutocompleteControl as i } from "./autocompleteBar.esm.js";
6
6
  import "../../index.esm.js";
7
7
  import { st as a } from "rdflib";
8
8
  import { store as o } from "solid-logic";
9
- //#region src/widgets/forms/autocomplete/autocompleteField.ts
9
+ // src/widgets/forms/autocomplete/autocompleteField.ts
10
10
  function s(s, c, l, u, d, f, p) {
11
11
  async function m(e, t) {
12
12
  if (!t) throw Error("autocompleteField: No name set.");
@@ -84,7 +84,6 @@ function s(s, c, l, u, d, f, p) {
84
84
  b.appendChild(n(s, `Error rendering autocomplete ${d}: ${e}`, "#fee", e));
85
85
  }), v;
86
86
  }
87
- //#endregion
88
87
  export { s as autocompleteField };
89
88
 
90
89
  //# sourceMappingURL=autocompleteField.esm.js.map
@@ -1,2 +1,2 @@
1
- const e=require("../../../lib/debug.cjs.js"),t=require("../../../lib/styleConstants.cjs.js"),n=require("../../../lib/style.cjs.js"),r=require("../../error.cjs.js"),i=require("./language.cjs.js"),a=require("./publicData.cjs.js");require("../../index.cjs.js");let o=require("solid-logic");var s=4,c=20,l=40;function u(e,t){e.style.display=t?``:`none`}async function d(d,f,p,m){function h(t){let i=L.appendChild(d.createElement(`tr`));e.log(t);let a=Error(t);i.appendChild(r.errorMessageBlock(d,a,`pink`)),n.style.setStyle(i,`autocompleteRowStyle`),i.style.padding=`1em`}function g(t,n){e.log(`Auto complete: finish! `+t),t.termType===`Literal`&&f.queryParams.objectURIBase&&(t=o.store.sym(f.queryParams.objectURIBase.value+t.value)),x(),m(t,n)}async function _(t,n){p.acceptButton?(p.acceptButton.disbaled=!1,u(p.acceptButton,!0),z.value=n.value,F=n,I=t,e.log(`Auto complete: name: `+n),e.log(`Auto complete: waiting for accept `+t),x()):(u(p.cancelButton,!0),g(t,n))}async function v(e){F&&z.value===F.value&&g(I,F)}async function y(t){e.log(`Auto complete: Canceled by user! `),f.permanent?E():P.parentNode&&P.parentNode.removeChild(P)}function b(e,t){let n=e.split(` `);for(let e=0;e<n.length;e++){let r=n[e];if(t.toLowerCase().indexOf(r)<0)return!1}return!0}function x(){for(;L.children.length>1;)L.removeChild(L.lastChild)}async function S(e){u(p.cancelButton,!0),T()}async function C(e,t){let n;try{n=await a.queryPublicDataByName(e,D,t||i.defaultPreferredLanguages,f.queryParams)}catch(e){h(`Error querying db of organizations: `+e),A=!1;return}return k=n.length<200,M=k?e:void 0,x(),i.filterByLanguage(n,t)||[]}function w(e,t){return(t||[]).filter(t=>b(e,t.name.value))}async function T(){function t(t){let r=d.createElement(`tr`);n.style.setStyle(r,`autocompleteRowStyle`),r.setAttribute(`style`,`padding: 0.3em;`),r.style.color=j?`#080`:`#088`,r.textContent=t.name.value;let i=a.bindingToTerm(t.subject),o=a.bindingToTerm(t.name);return r.addEventListener(`click`,async t=>{e.log(` click row textContent: `+r.textContent),e.log(` click name: `+o.value),i&&o&&_(i,o)}),r}function r(e,t){return t.name.value>e.name.value?1:t.name.name<e.name.value?-1:0}if(A){e.log(`Ignoring "${z.value}" because of lock `);return}e.log(`Setting lock at "${z.value}"`),A=!0;let o=await i.getPreferredLanguages(),u=z.value.trim().toLowerCase();if(u.length<s)x(),N=c;else{(!j||!M||!u.startsWith(M))&&(e.log(` Querying database at "${u}" cf last "${M}".`),O=await C(u,o)||[]);let n=w(u,O);k&&n.length<=l&&(N=n.length),j=k&&n.length<=N,e.log(` Filter:"${u}" lastBindings: ${O.length}, slimmed to ${n.length}; rows: ${N}, Enough? ${k}, All displayed? ${j}`);let i=n.slice(0,N);i.sort(r),x();for(let e of i)L.appendChild(t(e));n.length===1&&_(a.bindingToTerm(n[0].subject),a.bindingToTerm(n[0].name))}A=!1}function E(){f.currentObject?(z.value=f.currentName?f.currentName.value:`??? wot no name for `+f.currentObject,F=f.currentName,M=f.currentName?f.currentName.value:void 0,I=f.currentObject):(z.value=``,M=void 0,I=void 0),p.deleteButton&&u(p.deleteButton,!!f.currentObject),p.acceptButton&&u(p.acceptButton,!1),p.editButton&&u(p.editButton,!0),p.cancelButton&&u(p.cancelButton,!1),A=!1,x()}let D=f.targetClass;if(!D)throw Error(`renderAutoComplete: missing targetClass`);p.acceptButton&&p.acceptButton.addEventListener(`click`,v,!1),p.cancelButton&&p.cancelButton.addEventListener(`click`,y,!1);let O,k=!1,A=!1,j=!1,M,N=c,P=d.createElement(`div`),F,I,L=P.appendChild(d.createElement(`table`));L.setAttribute(`data-testid`,`autocomplete-table`),L.setAttribute(`style`,`max-width: 30em; margin: 0.5em;`);let R=L.appendChild(d.createElement(`tr`));n.style.setStyle(R,`autocompleteRowStyle`);let z=R.appendChild(d.createElement(`td`)).appendChild(d.createElement(`input`));z.setAttribute(`type`,`text`),E();let B=f.size||t.default.textInputSize||20;z.setAttribute(`size`,B),z.setAttribute(`data-testid`,`autocomplete-input`);let V=n.style.textInputStyle||`border: 0.1em solid #444; border-radius: 0.5em; width: 100%; font-size: 100%; padding: 0.1em 0.6em`;return z.setAttribute(`style`,V),z.addEventListener(`keyup`,function(e){e.keyCode===13&&v(e)},!1),z.addEventListener(`input`,S),P}exports.renderAutoComplete=d,exports.setVisible=u;
1
+ const e=require("../../../lib/debug.cjs.js"),t=require("../../../lib/styleConstants.cjs.js"),n=require("../../../lib/style.cjs.js"),r=require("../../error.cjs.js"),i=require("./language.cjs.js"),a=require("./publicData.cjs.js");require("../../index.cjs.js");let o=require("solid-logic");var s=4,c=20,l=40;function u(e,t){e.style.display=t?``:`none`}async function d(d,f,p,m){function h(t){let i=L.appendChild(d.createElement(`tr`));e.log(t);let a=Error(t);i.appendChild(r.errorMessageBlock(d,a,`pink`)),n.style.setStyle(i,`autocompleteRowStyle`),i.style.padding=`1em`}function g(t,n){e.log(`Auto complete: finish! `+t),t.termType===`Literal`&&f.queryParams.objectURIBase&&(t=o.store.sym(f.queryParams.objectURIBase.value+t.value)),x(),m(t,n)}async function _(t,n){p.acceptButton?(p.acceptButton.disbaled=!1,u(p.acceptButton,!0),z.value=n.value,F=n,I=t,e.log(`Auto complete: name: `+n),e.log(`Auto complete: waiting for accept `+t),x()):(u(p.cancelButton,!0),g(t,n))}async function v(e){F&&z.value===F.value&&g(I,F)}async function y(t){e.log(`Auto complete: Canceled by user! `),f.permanent?E():P.parentNode&&P.parentNode.removeChild(P)}function b(e,t){let n=e.split(` `);for(let e=0;e<n.length;e++){let r=n[e];if(t.toLowerCase().indexOf(r)<0)return!1}return!0}function x(){for(;L.children.length>1;)L.removeChild(L.lastChild)}async function S(e){u(p.cancelButton,!0),T()}async function C(e,t){let n;try{n=await a.queryPublicDataByName(e,D,t||i.defaultPreferredLanguages,f.queryParams)}catch(e){h(`Error querying db of organizations: `+e),A=!1;return}return k=n.length<200,M=k?e:void 0,x(),i.filterByLanguage(n,t)||[]}function w(e,t){return(t||[]).filter(t=>b(e,t.name.value))}async function T(){function t(t){let r=d.createElement(`tr`);n.style.setStyle(r,`autocompleteRowStyle`),r.setAttribute(`style`,`padding: 0.3em;`),r.style.color=j?`#080`:`#088`,r.textContent=t.name.value;let i=a.bindingToTerm(t.subject),o=a.bindingToTerm(t.name);return r.addEventListener(`click`,async t=>{e.log(` click row textContent: `+r.textContent),e.log(` click name: `+o.value),i&&o&&_(i,o)}),r}function r(e,t){return t.name.value>e.name.value?1:t.name.name<e.name.value?-1:0}if(A){e.log(`Ignoring "${z.value}" because of lock `);return}e.log(`Setting lock at "${z.value}"`),A=!0;let o=await i.getPreferredLanguages(),u=z.value.trim().toLowerCase();if(u.length<s)x(),N=c;else{j&&M&&u.startsWith(M)||(e.log(` Querying database at "${u}" cf last "${M}".`),O=await C(u,o)||[]);let n=w(u,O);k&&n.length<=l&&(N=n.length),j=k&&n.length<=N,e.log(` Filter:"${u}" lastBindings: ${O.length}, slimmed to ${n.length}; rows: ${N}, Enough? ${k}, All displayed? ${j}`);let i=n.slice(0,N);i.sort(r),x();for(let e of i)L.appendChild(t(e));n.length===1&&_(a.bindingToTerm(n[0].subject),a.bindingToTerm(n[0].name))}A=!1}function E(){f.currentObject?(z.value=f.currentName?f.currentName.value:`??? wot no name for `+f.currentObject,F=f.currentName,M=f.currentName?f.currentName.value:void 0,I=f.currentObject):(z.value=``,M=void 0,I=void 0),p.deleteButton&&u(p.deleteButton,!!f.currentObject),p.acceptButton&&u(p.acceptButton,!1),p.editButton&&u(p.editButton,!0),p.cancelButton&&u(p.cancelButton,!1),A=!1,x()}let D=f.targetClass;if(!D)throw Error(`renderAutoComplete: missing targetClass`);p.acceptButton&&p.acceptButton.addEventListener(`click`,v,!1),p.cancelButton&&p.cancelButton.addEventListener(`click`,y,!1);let O,k=!1,A=!1,j=!1,M,N=c,P=d.createElement(`div`),F,I,L=P.appendChild(d.createElement(`table`));L.setAttribute(`data-testid`,`autocomplete-table`),L.setAttribute(`style`,`max-width: 30em; margin: 0.5em;`);let R=L.appendChild(d.createElement(`tr`));n.style.setStyle(R,`autocompleteRowStyle`);let z=R.appendChild(d.createElement(`td`)).appendChild(d.createElement(`input`));z.setAttribute(`type`,`text`),E();let B=f.size||t.default.textInputSize||20;z.setAttribute(`size`,B),z.setAttribute(`data-testid`,`autocomplete-input`);let V=n.style.textInputStyle||`border: 0.1em solid #444; border-radius: 0.5em; width: 100%; font-size: 100%; padding: 0.1em 0.6em`;return z.setAttribute(`style`,V),z.addEventListener(`keyup`,function(e){e.keyCode===13&&v(e)},!1),z.addEventListener(`input`,S),P}exports.renderAutoComplete=d,exports.setVisible=u;
2
2
  //# sourceMappingURL=autocompletePicker.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"autocompletePicker.cjs.js","names":["store","queryPublicDataByName","defaultPreferredLanguages","filterByLanguage","bindingToTerm","getPreferredLanguages","styleConstants","style","require_debug","require_styleConstants","require_style","require_error","require_language","require_publicData","solid_logic","AUTOCOMPLETE_THRESHOLD","AUTOCOMPLETE_ROWS","AUTOCOMPLETE_ROWS_STRETCH","setVisible","visible","renderAutoComplete","complain","errorRow","table","dom","message","err","finish","object","acOptions","clearList","callback","name","gotIt","decoration","acceptButtonHandler","foundName","searchInput","foundObject","cancelButtonHandler","initialize","div","nameMatch","parts","filter","j","word","candidate","inputEventHHandler","refreshList","loadBindingsAndFilterByLanguage","bindings","targetClass","languagePrefs","lastFilter","loadedEnough","filterByName","binding","rowForBinding","row","allDisplayed","nameTerm","compareBindingsByName","other","self","inputEventHandlerLock","slimmed","lastBindings","numberOfRows","displayable","head","size","searchInputStyle","event"],"sources":["../../../../src/widgets/forms/autocomplete/autocompletePicker.ts"],"sourcesContent":["/* Autocomplete Picker: Create and edit data using public data\n**\n** As the data source is passed as a parameter, all kinds of APIa and query services can be used\n**\n*/\nimport * as debug from '../../../lib/debug'\nimport { style } from '../../../lib/style'\nimport styleConstants from '../../../lib/styleConstants'\nimport * as widgets from '../../../widgets'\nimport { store } from 'solid-logic'\nimport { NamedNode, Literal } from 'rdflib'\nimport { queryPublicDataByName, bindingToTerm, AUTOCOMPLETE_LIMIT, QueryParameters } from './publicData'\nimport { filterByLanguage, getPreferredLanguages, defaultPreferredLanguages } from './language'\n\nconst AUTOCOMPLETE_THRESHOLD = 4 // don't check until this many characters typed\nconst AUTOCOMPLETE_ROWS = 20 // 20?\nconst AUTOCOMPLETE_ROWS_STRETCH = 40\n\n/*\nAutocomplete happens in 6 phases:\n 1. The search string is too small to bother\n 2. The search string is big enough, and we have not loaded the array\n 3. The search string is big enough, and we have loaded array up to the limit\n Display them and wait for more user input\n 4. The search string is big enough, and we have loaded array NOT to the limit\n but including all matches. No more fetches.\n If user gets more precise, wait for them to select one - or reduce to a single\n 5. Single one selected. Optionally waiting for accept button to be pressed, OR can change string and go to 5 or 2\n 6. Locked with a value. Press 'edit' button to return to 5\n*/\n\nexport type AutocompleteDecoration = {\n acceptButton?: HTMLElement,\n cancelButton: HTMLElement, // Must have cancel button\n editButton?: HTMLElement,\n deleteButton?: HTMLElement\n}\nexport type AutocompleteOptions = {\n targetClass?: NamedNode,\n currentObject?: NamedNode,\n currentName?: Literal,\n queryParams: QueryParameters,\n size?: number,\n permanent?: boolean\n}\n\ninterface Callback1 {\n (_subject: NamedNode, _name: Literal): any;\n}\n\nexport function setVisible (element:HTMLElement, visible:boolean) {\n element.style.display = visible ? '' : 'none' // Do not use visibility, it holds the real estate\n}\n\n// The core of the autocomplete UI\nexport async function renderAutoComplete (dom: HTMLDocument,\n acOptions:AutocompleteOptions,\n decoration: AutocompleteDecoration,\n callback: Callback1) {\n function complain (message) {\n const errorRow = table.appendChild(dom.createElement('tr'))\n debug.log(message)\n const err = new Error(message)\n errorRow.appendChild(widgets.errorMessageBlock(dom, err, 'pink'))\n // errorMessageBlock will log the stack to the console\n style.setStyle(errorRow, 'autocompleteRowStyle')\n errorRow.style.padding = '1em'\n }\n\n function finish (object, name) {\n debug.log('Auto complete: finish! ' + object)\n if (object.termType === 'Literal' && acOptions.queryParams.objectURIBase) {\n object = store.sym(acOptions.queryParams.objectURIBase.value + object.value)\n }\n // remove(decoration.cancelButton)\n // remove(decoration.acceptButton)\n // remove(div)\n clearList()\n callback(object, name)\n }\n async function gotIt (object:NamedNode | Literal, name: Literal) {\n if (decoration.acceptButton) {\n (decoration.acceptButton as any).disbaled = false\n setVisible(decoration.acceptButton, true) // now wait for confirmation\n searchInput.value = name.value // complete it\n foundName = name\n foundObject = object\n debug.log('Auto complete: name: ' + name)\n debug.log('Auto complete: waiting for accept ' + object)\n clearList() // This may be an option - nice and clean but does not allow change of mind\n return\n }\n setVisible(decoration.cancelButton, true)\n finish(object, name)\n }\n\n async function acceptButtonHandler (_event) {\n if (foundName && searchInput.value === foundName.value) { // still\n finish(foundObject, foundName)\n }\n }\n\n async function cancelButtonHandler (_event) {\n debug.log('Auto complete: Canceled by user! ')\n if (acOptions.permanent) {\n initialize()\n } else {\n if (div.parentNode) {\n div.parentNode.removeChild(div)\n }\n }\n }\n\n function nameMatch (filter:string, candidate: string):boolean {\n const parts = filter.split(' ') // Each name part must be somewhere\n for (let j = 0; j < parts.length; j++) {\n const word = parts[j]\n if (candidate.toLowerCase().indexOf(word) < 0) return false\n }\n return true\n }\n\n function clearList () {\n while (table.children.length > 1) {\n table.removeChild(table.lastChild as Node)\n }\n }\n\n async function inputEventHHandler (_event) {\n // console.log('@@ AC inputEventHHandler called')\n setVisible(decoration.cancelButton, true) // only allow cancel when there is something to cancel\n refreshList() /// @@ debounqce does not work with jest\n /*\n if (runningTimeout) {\n clearTimeout(runningTimeout)\n }\n runningTimeout = setTimeout(refreshList, AUTOCOMPLETE_DEBOUNCE_MS)\n */\n }\n\n async function loadBindingsAndFilterByLanguage (filter, languagePrefs) {\n // console.log('@@ loadBindingsAndFilterByLanguage ' + filter)\n let bindings\n try {\n bindings = await queryPublicDataByName(filter, targetClass as any,\n languagePrefs || defaultPreferredLanguages, acOptions.queryParams)\n } catch (err) {\n complain('Error querying db of organizations: ' + err)\n inputEventHandlerLock = false\n return\n }\n loadedEnough = bindings.length < AUTOCOMPLETE_LIMIT\n if (loadedEnough) {\n lastFilter = filter\n } else {\n lastFilter = undefined\n }\n clearList()\n const slimmed = filterByLanguage(bindings, languagePrefs)\n return slimmed || []\n }\n\n function filterByName (filter, bindings) {\n return (bindings || []).filter(binding => nameMatch(filter, binding.name.value))\n }\n\n async function refreshList () {\n // console.log('@@ refreshList called')\n function rowForBinding (binding) {\n const row = dom.createElement('tr')\n style.setStyle(row, 'autocompleteRowStyle')\n row.setAttribute('style', 'padding: 0.3em;')\n row.style.color = allDisplayed ? '#080' : '#088' // green means 'you should find it here'\n row.textContent = binding.name.value\n const object = bindingToTerm(binding.subject)\n const nameTerm = bindingToTerm(binding.name)\n row.addEventListener('click', async _event => {\n debug.log(' click row textContent: ' + row.textContent)\n debug.log(' click name: ' + nameTerm.value)\n if (object && nameTerm) {\n gotIt(object, nameTerm as Literal)\n }\n })\n return row\n } // rowForBinding\n function compareBindingsByName (self, other) {\n return other.name.value > self.name.value\n ? 1\n : other.name.name < self.name.value ? -1 : 0\n }\n\n if (inputEventHandlerLock) {\n debug.log(`Ignoring \"${searchInput.value}\" because of lock `)\n return\n }\n debug.log(`Setting lock at \"${searchInput.value}\"`)\n\n inputEventHandlerLock = true\n const languagePrefs = await getPreferredLanguages()\n const filter = searchInput.value.trim().toLowerCase()\n if (filter.length < AUTOCOMPLETE_THRESHOLD) { // too small\n clearList()\n // candidatesLoaded = false\n numberOfRows = AUTOCOMPLETE_ROWS\n } else {\n if (!allDisplayed || !lastFilter || !filter.startsWith(lastFilter)) {\n debug.log(` Querying database at \"${filter}\" cf last \"${lastFilter}\".`)\n lastBindings = await loadBindingsAndFilterByLanguage(filter, languagePrefs) || [] // freesh query\n }\n // Trim table as search gets tighter:\n const slimmed = filterByName(filter, lastBindings)\n if (loadedEnough && slimmed.length <= AUTOCOMPLETE_ROWS_STRETCH) {\n numberOfRows = slimmed.length // stretch if it means we get all items\n }\n allDisplayed = loadedEnough && slimmed.length <= numberOfRows\n debug.log(` Filter:\"${filter}\" lastBindings: ${lastBindings.length}, slimmed to ${slimmed.length}; rows: ${numberOfRows}, Enough? ${loadedEnough}, All displayed? ${allDisplayed}`)\n\n const displayable = slimmed.slice(0, numberOfRows)\n\n displayable.sort(compareBindingsByName)\n clearList()\n for (const binding of displayable) {\n table.appendChild(rowForBinding(binding))\n }\n if (slimmed.length === 1) {\n gotIt(bindingToTerm(slimmed[0].subject), bindingToTerm(slimmed[0].name) as Literal)\n }\n } // else\n inputEventHandlerLock = false\n } // refreshList\n\n function initialize () {\n if (acOptions.currentObject) { // If have existing value then jump into the endgame of the autocomplete\n searchInput.value = acOptions.currentName ? acOptions.currentName.value : '??? wot no name for ' + acOptions.currentObject\n foundName = acOptions.currentName\n lastFilter = acOptions.currentName ? acOptions.currentName.value : undefined\n foundObject = acOptions.currentObject\n } else {\n searchInput.value = ''\n lastFilter = undefined\n foundObject = undefined\n }\n if (decoration.deleteButton) {\n setVisible(decoration.deleteButton, !!acOptions.currentObject)\n }\n\n if (decoration.acceptButton) {\n setVisible(decoration.acceptButton, false) // hide until input complete\n }\n if (decoration.editButton) {\n setVisible(decoration.editButton, true)\n }\n if (decoration.cancelButton) {\n setVisible(decoration.cancelButton, false) // only allow cancel when there is something to cancel\n }\n inputEventHandlerLock = false\n clearList()\n } // initialiize\n\n // const queryParams: QueryParameters = acOptions.queryParams\n const targetClass = acOptions.targetClass\n if (!targetClass) throw new Error('renderAutoComplete: missing targetClass')\n // console.log(`renderAutoComplete: targetClass=${targetClass}` )\n if (decoration.acceptButton) {\n decoration.acceptButton.addEventListener('click', acceptButtonHandler, false)\n }\n if (decoration.cancelButton) {\n decoration.cancelButton.addEventListener('click', cancelButtonHandler, false)\n }\n\n // var candidatesLoaded = false\n let lastBindings\n let loadedEnough = false\n let inputEventHandlerLock = false\n let allDisplayed = false\n let lastFilter = undefined as (string | undefined)\n let numberOfRows = AUTOCOMPLETE_ROWS // this gets slimmed down\n const div = dom.createElement('div')\n let foundName = undefined as (Literal | undefined)// once found accepted string must match this\n let foundObject = undefined as (NamedNode | Literal | undefined)\n const table = div.appendChild(dom.createElement('table'))\n table.setAttribute('data-testid', 'autocomplete-table')\n table.setAttribute('style', 'max-width: 30em; margin: 0.5em;')\n const head = table.appendChild(dom.createElement('tr'))\n style.setStyle(head, 'autocompleteRowStyle') // textInputStyle or\n const cell = head.appendChild(dom.createElement('td'))\n const searchInput = cell.appendChild(dom.createElement('input'))\n searchInput.setAttribute('type', 'text')\n\n initialize()\n\n const size = acOptions.size || styleConstants.textInputSize || 20\n searchInput.setAttribute('size', size)\n searchInput.setAttribute('data-testid', 'autocomplete-input')\n\n const searchInputStyle = style.textInputStyle || // searchInputStyle ?\n 'border: 0.1em solid #444; border-radius: 0.5em; width: 100%; font-size: 100%; padding: 0.1em 0.6em' // @\n searchInput.setAttribute('style', searchInputStyle)\n searchInput.addEventListener('keyup', function (event) {\n if (event.keyCode === 13) {\n acceptButtonHandler(event)\n }\n }, false)\n\n searchInput.addEventListener('input', inputEventHHandler)\n // console.log('@@ renderAutoComplete returns ' + div.innerHTML)\n return div\n} // renderAutoComplete\n\n// ENDS\n"],"mappings":"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"}
1
+ {"version":3,"file":"autocompletePicker.cjs.js","names":["store","queryPublicDataByName","defaultPreferredLanguages","filterByLanguage","bindingToTerm","getPreferredLanguages","styleConstants","style","require_debug","require_styleConstants","require_style","require_error","require_language","require_publicData","solid_logic","AUTOCOMPLETE_THRESHOLD","AUTOCOMPLETE_ROWS","AUTOCOMPLETE_ROWS_STRETCH","setVisible","visible","renderAutoComplete","complain","errorRow","table","dom","message","err","finish","object","acOptions","clearList","callback","name","gotIt","decoration","acceptButtonHandler","foundName","searchInput","foundObject","cancelButtonHandler","initialize","div","nameMatch","parts","filter","j","word","candidate","inputEventHHandler","refreshList","loadBindingsAndFilterByLanguage","bindings","targetClass","languagePrefs","lastFilter","loadedEnough","filterByName","binding","rowForBinding","row","allDisplayed","nameTerm","compareBindingsByName","other","self","inputEventHandlerLock","slimmed","lastBindings","numberOfRows","displayable","head","size","searchInputStyle","event"],"sources":["../../../../src/widgets/forms/autocomplete/autocompletePicker.ts"],"sourcesContent":["/* Autocomplete Picker: Create and edit data using public data\n**\n** As the data source is passed as a parameter, all kinds of APIa and query services can be used\n**\n*/\nimport * as debug from '../../../lib/debug'\nimport { style } from '../../../lib/style'\nimport styleConstants from '../../../lib/styleConstants'\nimport * as widgets from '../../../widgets'\nimport { store } from 'solid-logic'\nimport { NamedNode, Literal } from 'rdflib'\nimport { queryPublicDataByName, bindingToTerm, AUTOCOMPLETE_LIMIT, QueryParameters } from './publicData'\nimport { filterByLanguage, getPreferredLanguages, defaultPreferredLanguages } from './language'\n\nconst AUTOCOMPLETE_THRESHOLD = 4 // don't check until this many characters typed\nconst AUTOCOMPLETE_ROWS = 20 // 20?\nconst AUTOCOMPLETE_ROWS_STRETCH = 40\n\n/*\nAutocomplete happens in 6 phases:\n 1. The search string is too small to bother\n 2. The search string is big enough, and we have not loaded the array\n 3. The search string is big enough, and we have loaded array up to the limit\n Display them and wait for more user input\n 4. The search string is big enough, and we have loaded array NOT to the limit\n but including all matches. No more fetches.\n If user gets more precise, wait for them to select one - or reduce to a single\n 5. Single one selected. Optionally waiting for accept button to be pressed, OR can change string and go to 5 or 2\n 6. Locked with a value. Press 'edit' button to return to 5\n*/\n\nexport type AutocompleteDecoration = {\n acceptButton?: HTMLElement,\n cancelButton: HTMLElement, // Must have cancel button\n editButton?: HTMLElement,\n deleteButton?: HTMLElement\n}\nexport type AutocompleteOptions = {\n targetClass?: NamedNode,\n currentObject?: NamedNode,\n currentName?: Literal,\n queryParams: QueryParameters,\n size?: number,\n permanent?: boolean\n}\n\ninterface Callback1 {\n (_subject: NamedNode, _name: Literal): any;\n}\n\nexport function setVisible (element:HTMLElement, visible:boolean) {\n element.style.display = visible ? '' : 'none' // Do not use visibility, it holds the real estate\n}\n\n// The core of the autocomplete UI\nexport async function renderAutoComplete (dom: HTMLDocument,\n acOptions:AutocompleteOptions,\n decoration: AutocompleteDecoration,\n callback: Callback1) {\n function complain (message) {\n const errorRow = table.appendChild(dom.createElement('tr'))\n debug.log(message)\n const err = new Error(message)\n errorRow.appendChild(widgets.errorMessageBlock(dom, err, 'pink'))\n // errorMessageBlock will log the stack to the console\n style.setStyle(errorRow, 'autocompleteRowStyle')\n errorRow.style.padding = '1em'\n }\n\n function finish (object, name) {\n debug.log('Auto complete: finish! ' + object)\n if (object.termType === 'Literal' && acOptions.queryParams.objectURIBase) {\n object = store.sym(acOptions.queryParams.objectURIBase.value + object.value)\n }\n // remove(decoration.cancelButton)\n // remove(decoration.acceptButton)\n // remove(div)\n clearList()\n callback(object, name)\n }\n async function gotIt (object:NamedNode | Literal, name: Literal) {\n if (decoration.acceptButton) {\n (decoration.acceptButton as any).disbaled = false\n setVisible(decoration.acceptButton, true) // now wait for confirmation\n searchInput.value = name.value // complete it\n foundName = name\n foundObject = object\n debug.log('Auto complete: name: ' + name)\n debug.log('Auto complete: waiting for accept ' + object)\n clearList() // This may be an option - nice and clean but does not allow change of mind\n return\n }\n setVisible(decoration.cancelButton, true)\n finish(object, name)\n }\n\n async function acceptButtonHandler (_event) {\n if (foundName && searchInput.value === foundName.value) { // still\n finish(foundObject, foundName)\n }\n }\n\n async function cancelButtonHandler (_event) {\n debug.log('Auto complete: Canceled by user! ')\n if (acOptions.permanent) {\n initialize()\n } else {\n if (div.parentNode) {\n div.parentNode.removeChild(div)\n }\n }\n }\n\n function nameMatch (filter:string, candidate: string):boolean {\n const parts = filter.split(' ') // Each name part must be somewhere\n for (let j = 0; j < parts.length; j++) {\n const word = parts[j]\n if (candidate.toLowerCase().indexOf(word) < 0) return false\n }\n return true\n }\n\n function clearList () {\n while (table.children.length > 1) {\n table.removeChild(table.lastChild as Node)\n }\n }\n\n async function inputEventHHandler (_event) {\n // console.log('@@ AC inputEventHHandler called')\n setVisible(decoration.cancelButton, true) // only allow cancel when there is something to cancel\n refreshList() /// @@ debounqce does not work with jest\n /*\n if (runningTimeout) {\n clearTimeout(runningTimeout)\n }\n runningTimeout = setTimeout(refreshList, AUTOCOMPLETE_DEBOUNCE_MS)\n */\n }\n\n async function loadBindingsAndFilterByLanguage (filter, languagePrefs) {\n // console.log('@@ loadBindingsAndFilterByLanguage ' + filter)\n let bindings\n try {\n bindings = await queryPublicDataByName(filter, targetClass as any,\n languagePrefs || defaultPreferredLanguages, acOptions.queryParams)\n } catch (err) {\n complain('Error querying db of organizations: ' + err)\n inputEventHandlerLock = false\n return\n }\n loadedEnough = bindings.length < AUTOCOMPLETE_LIMIT\n if (loadedEnough) {\n lastFilter = filter\n } else {\n lastFilter = undefined\n }\n clearList()\n const slimmed = filterByLanguage(bindings, languagePrefs)\n return slimmed || []\n }\n\n function filterByName (filter, bindings) {\n return (bindings || []).filter(binding => nameMatch(filter, binding.name.value))\n }\n\n async function refreshList () {\n // console.log('@@ refreshList called')\n function rowForBinding (binding) {\n const row = dom.createElement('tr')\n style.setStyle(row, 'autocompleteRowStyle')\n row.setAttribute('style', 'padding: 0.3em;')\n row.style.color = allDisplayed ? '#080' : '#088' // green means 'you should find it here'\n row.textContent = binding.name.value\n const object = bindingToTerm(binding.subject)\n const nameTerm = bindingToTerm(binding.name)\n row.addEventListener('click', async _event => {\n debug.log(' click row textContent: ' + row.textContent)\n debug.log(' click name: ' + nameTerm.value)\n if (object && nameTerm) {\n gotIt(object, nameTerm as Literal)\n }\n })\n return row\n } // rowForBinding\n function compareBindingsByName (self, other) {\n return other.name.value > self.name.value\n ? 1\n : other.name.name < self.name.value ? -1 : 0\n }\n\n if (inputEventHandlerLock) {\n debug.log(`Ignoring \"${searchInput.value}\" because of lock `)\n return\n }\n debug.log(`Setting lock at \"${searchInput.value}\"`)\n\n inputEventHandlerLock = true\n const languagePrefs = await getPreferredLanguages()\n const filter = searchInput.value.trim().toLowerCase()\n if (filter.length < AUTOCOMPLETE_THRESHOLD) { // too small\n clearList()\n // candidatesLoaded = false\n numberOfRows = AUTOCOMPLETE_ROWS\n } else {\n if (!allDisplayed || !lastFilter || !filter.startsWith(lastFilter)) {\n debug.log(` Querying database at \"${filter}\" cf last \"${lastFilter}\".`)\n lastBindings = await loadBindingsAndFilterByLanguage(filter, languagePrefs) || [] // freesh query\n }\n // Trim table as search gets tighter:\n const slimmed = filterByName(filter, lastBindings)\n if (loadedEnough && slimmed.length <= AUTOCOMPLETE_ROWS_STRETCH) {\n numberOfRows = slimmed.length // stretch if it means we get all items\n }\n allDisplayed = loadedEnough && slimmed.length <= numberOfRows\n debug.log(` Filter:\"${filter}\" lastBindings: ${lastBindings.length}, slimmed to ${slimmed.length}; rows: ${numberOfRows}, Enough? ${loadedEnough}, All displayed? ${allDisplayed}`)\n\n const displayable = slimmed.slice(0, numberOfRows)\n\n displayable.sort(compareBindingsByName)\n clearList()\n for (const binding of displayable) {\n table.appendChild(rowForBinding(binding))\n }\n if (slimmed.length === 1) {\n gotIt(bindingToTerm(slimmed[0].subject), bindingToTerm(slimmed[0].name) as Literal)\n }\n } // else\n inputEventHandlerLock = false\n } // refreshList\n\n function initialize () {\n if (acOptions.currentObject) { // If have existing value then jump into the endgame of the autocomplete\n searchInput.value = acOptions.currentName ? acOptions.currentName.value : '??? wot no name for ' + acOptions.currentObject\n foundName = acOptions.currentName\n lastFilter = acOptions.currentName ? acOptions.currentName.value : undefined\n foundObject = acOptions.currentObject\n } else {\n searchInput.value = ''\n lastFilter = undefined\n foundObject = undefined\n }\n if (decoration.deleteButton) {\n setVisible(decoration.deleteButton, !!acOptions.currentObject)\n }\n\n if (decoration.acceptButton) {\n setVisible(decoration.acceptButton, false) // hide until input complete\n }\n if (decoration.editButton) {\n setVisible(decoration.editButton, true)\n }\n if (decoration.cancelButton) {\n setVisible(decoration.cancelButton, false) // only allow cancel when there is something to cancel\n }\n inputEventHandlerLock = false\n clearList()\n } // initialiize\n\n // const queryParams: QueryParameters = acOptions.queryParams\n const targetClass = acOptions.targetClass\n if (!targetClass) throw new Error('renderAutoComplete: missing targetClass')\n // console.log(`renderAutoComplete: targetClass=${targetClass}` )\n if (decoration.acceptButton) {\n decoration.acceptButton.addEventListener('click', acceptButtonHandler, false)\n }\n if (decoration.cancelButton) {\n decoration.cancelButton.addEventListener('click', cancelButtonHandler, false)\n }\n\n // var candidatesLoaded = false\n let lastBindings\n let loadedEnough = false\n let inputEventHandlerLock = false\n let allDisplayed = false\n let lastFilter = undefined as (string | undefined)\n let numberOfRows = AUTOCOMPLETE_ROWS // this gets slimmed down\n const div = dom.createElement('div')\n let foundName = undefined as (Literal | undefined)// once found accepted string must match this\n let foundObject = undefined as (NamedNode | Literal | undefined)\n const table = div.appendChild(dom.createElement('table'))\n table.setAttribute('data-testid', 'autocomplete-table')\n table.setAttribute('style', 'max-width: 30em; margin: 0.5em;')\n const head = table.appendChild(dom.createElement('tr'))\n style.setStyle(head, 'autocompleteRowStyle') // textInputStyle or\n const cell = head.appendChild(dom.createElement('td'))\n const searchInput = cell.appendChild(dom.createElement('input'))\n searchInput.setAttribute('type', 'text')\n\n initialize()\n\n const size = acOptions.size || styleConstants.textInputSize || 20\n searchInput.setAttribute('size', size)\n searchInput.setAttribute('data-testid', 'autocomplete-input')\n\n const searchInputStyle = style.textInputStyle || // searchInputStyle ?\n 'border: 0.1em solid #444; border-radius: 0.5em; width: 100%; font-size: 100%; padding: 0.1em 0.6em' // @\n searchInput.setAttribute('style', searchInputStyle)\n searchInput.addEventListener('keyup', function (event) {\n if (event.keyCode === 13) {\n acceptButtonHandler(event)\n }\n }, false)\n\n searchInput.addEventListener('input', inputEventHHandler)\n // console.log('@@ renderAutoComplete returns ' + div.innerHTML)\n return div\n} // renderAutoComplete\n\n// ENDS\n"],"mappings":"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"}
@@ -6,7 +6,7 @@ import { defaultPreferredLanguages as i, filterByLanguage as a, getPreferredLang
6
6
  import { bindingToTerm as s, queryPublicDataByName as c } from "./publicData.esm.js";
7
7
  import "../../index.esm.js";
8
8
  import { store as l } from "solid-logic";
9
- //#region src/widgets/forms/autocomplete/autocompletePicker.ts
9
+ // src/widgets/forms/autocomplete/autocompletePicker.ts
10
10
  var u = 4, d = 20, f = 40;
11
11
  function p(e, t) {
12
12
  e.style.display = t ? "" : "none";
@@ -77,7 +77,7 @@ async function m(m, h, g, _) {
77
77
  let i = await o(), a = H.value.trim().toLowerCase();
78
78
  if (a.length < u) w(), I = d;
79
79
  else {
80
- (!P || !F || !a.startsWith(F)) && (e(` Querying database at "${a}" cf last "${F}".`), j = await E(a, i) || []);
80
+ P && F && a.startsWith(F) || (e(` Querying database at "${a}" cf last "${F}".`), j = await E(a, i) || []);
81
81
  let n = D(a, j);
82
82
  M && n.length <= f && (I = n.length), P = M && n.length <= I, e(` Filter:"${a}" lastBindings: ${j.length}, slimmed to ${n.length}; rows: ${I}, Enough? ${M}, All displayed? ${P}`);
83
83
  let o = n.slice(0, I);
@@ -106,7 +106,6 @@ async function m(m, h, g, _) {
106
106
  e.keyCode === 13 && x(e);
107
107
  }, !1), H.addEventListener("input", T), L;
108
108
  }
109
- //#endregion
110
109
  export { m as renderAutoComplete, p as setVisible };
111
110
 
112
111
  //# sourceMappingURL=autocompletePicker.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"autocompletePicker.esm.js","names":["widgets.errorMessageBlock","styleConstants","styleConstants_default","AUTOCOMPLETE_THRESHOLD","AUTOCOMPLETE_ROWS","AUTOCOMPLETE_ROWS_STRETCH","setVisible","visible","renderAutoComplete","complain","errorRow","table","dom","message","err","errorMessageBlock","style","finish","log","object","acOptions","store","clearList","callback","name","gotIt","decoration","acceptButtonHandler","foundName","searchInput","foundObject","cancelButtonHandler","initialize","div","nameMatch","parts","filter","j","word","candidate","inputEventHHandler","refreshList","loadBindingsAndFilterByLanguage","bindings","queryPublicDataByName","targetClass","languagePrefs","defaultPreferredLanguages","lastFilter","loadedEnough","filterByLanguage","filterByName","binding","rowForBinding","row","allDisplayed","bindingToTerm","nameTerm","compareBindingsByName","other","self","inputEventHandlerLock","getPreferredLanguages","slimmed","lastBindings","numberOfRows","displayable","head","size","searchInputStyle","event"],"sources":["../../../../src/widgets/forms/autocomplete/autocompletePicker.ts"],"sourcesContent":["/* Autocomplete Picker: Create and edit data using public data\n**\n** As the data source is passed as a parameter, all kinds of APIa and query services can be used\n**\n*/\nimport * as debug from '../../../lib/debug'\nimport { style } from '../../../lib/style'\nimport styleConstants from '../../../lib/styleConstants'\nimport * as widgets from '../../../widgets'\nimport { store } from 'solid-logic'\nimport { NamedNode, Literal } from 'rdflib'\nimport { queryPublicDataByName, bindingToTerm, AUTOCOMPLETE_LIMIT, QueryParameters } from './publicData'\nimport { filterByLanguage, getPreferredLanguages, defaultPreferredLanguages } from './language'\n\nconst AUTOCOMPLETE_THRESHOLD = 4 // don't check until this many characters typed\nconst AUTOCOMPLETE_ROWS = 20 // 20?\nconst AUTOCOMPLETE_ROWS_STRETCH = 40\n\n/*\nAutocomplete happens in 6 phases:\n 1. The search string is too small to bother\n 2. The search string is big enough, and we have not loaded the array\n 3. The search string is big enough, and we have loaded array up to the limit\n Display them and wait for more user input\n 4. The search string is big enough, and we have loaded array NOT to the limit\n but including all matches. No more fetches.\n If user gets more precise, wait for them to select one - or reduce to a single\n 5. Single one selected. Optionally waiting for accept button to be pressed, OR can change string and go to 5 or 2\n 6. Locked with a value. Press 'edit' button to return to 5\n*/\n\nexport type AutocompleteDecoration = {\n acceptButton?: HTMLElement,\n cancelButton: HTMLElement, // Must have cancel button\n editButton?: HTMLElement,\n deleteButton?: HTMLElement\n}\nexport type AutocompleteOptions = {\n targetClass?: NamedNode,\n currentObject?: NamedNode,\n currentName?: Literal,\n queryParams: QueryParameters,\n size?: number,\n permanent?: boolean\n}\n\ninterface Callback1 {\n (_subject: NamedNode, _name: Literal): any;\n}\n\nexport function setVisible (element:HTMLElement, visible:boolean) {\n element.style.display = visible ? '' : 'none' // Do not use visibility, it holds the real estate\n}\n\n// The core of the autocomplete UI\nexport async function renderAutoComplete (dom: HTMLDocument,\n acOptions:AutocompleteOptions,\n decoration: AutocompleteDecoration,\n callback: Callback1) {\n function complain (message) {\n const errorRow = table.appendChild(dom.createElement('tr'))\n debug.log(message)\n const err = new Error(message)\n errorRow.appendChild(widgets.errorMessageBlock(dom, err, 'pink'))\n // errorMessageBlock will log the stack to the console\n style.setStyle(errorRow, 'autocompleteRowStyle')\n errorRow.style.padding = '1em'\n }\n\n function finish (object, name) {\n debug.log('Auto complete: finish! ' + object)\n if (object.termType === 'Literal' && acOptions.queryParams.objectURIBase) {\n object = store.sym(acOptions.queryParams.objectURIBase.value + object.value)\n }\n // remove(decoration.cancelButton)\n // remove(decoration.acceptButton)\n // remove(div)\n clearList()\n callback(object, name)\n }\n async function gotIt (object:NamedNode | Literal, name: Literal) {\n if (decoration.acceptButton) {\n (decoration.acceptButton as any).disbaled = false\n setVisible(decoration.acceptButton, true) // now wait for confirmation\n searchInput.value = name.value // complete it\n foundName = name\n foundObject = object\n debug.log('Auto complete: name: ' + name)\n debug.log('Auto complete: waiting for accept ' + object)\n clearList() // This may be an option - nice and clean but does not allow change of mind\n return\n }\n setVisible(decoration.cancelButton, true)\n finish(object, name)\n }\n\n async function acceptButtonHandler (_event) {\n if (foundName && searchInput.value === foundName.value) { // still\n finish(foundObject, foundName)\n }\n }\n\n async function cancelButtonHandler (_event) {\n debug.log('Auto complete: Canceled by user! ')\n if (acOptions.permanent) {\n initialize()\n } else {\n if (div.parentNode) {\n div.parentNode.removeChild(div)\n }\n }\n }\n\n function nameMatch (filter:string, candidate: string):boolean {\n const parts = filter.split(' ') // Each name part must be somewhere\n for (let j = 0; j < parts.length; j++) {\n const word = parts[j]\n if (candidate.toLowerCase().indexOf(word) < 0) return false\n }\n return true\n }\n\n function clearList () {\n while (table.children.length > 1) {\n table.removeChild(table.lastChild as Node)\n }\n }\n\n async function inputEventHHandler (_event) {\n // console.log('@@ AC inputEventHHandler called')\n setVisible(decoration.cancelButton, true) // only allow cancel when there is something to cancel\n refreshList() /// @@ debounqce does not work with jest\n /*\n if (runningTimeout) {\n clearTimeout(runningTimeout)\n }\n runningTimeout = setTimeout(refreshList, AUTOCOMPLETE_DEBOUNCE_MS)\n */\n }\n\n async function loadBindingsAndFilterByLanguage (filter, languagePrefs) {\n // console.log('@@ loadBindingsAndFilterByLanguage ' + filter)\n let bindings\n try {\n bindings = await queryPublicDataByName(filter, targetClass as any,\n languagePrefs || defaultPreferredLanguages, acOptions.queryParams)\n } catch (err) {\n complain('Error querying db of organizations: ' + err)\n inputEventHandlerLock = false\n return\n }\n loadedEnough = bindings.length < AUTOCOMPLETE_LIMIT\n if (loadedEnough) {\n lastFilter = filter\n } else {\n lastFilter = undefined\n }\n clearList()\n const slimmed = filterByLanguage(bindings, languagePrefs)\n return slimmed || []\n }\n\n function filterByName (filter, bindings) {\n return (bindings || []).filter(binding => nameMatch(filter, binding.name.value))\n }\n\n async function refreshList () {\n // console.log('@@ refreshList called')\n function rowForBinding (binding) {\n const row = dom.createElement('tr')\n style.setStyle(row, 'autocompleteRowStyle')\n row.setAttribute('style', 'padding: 0.3em;')\n row.style.color = allDisplayed ? '#080' : '#088' // green means 'you should find it here'\n row.textContent = binding.name.value\n const object = bindingToTerm(binding.subject)\n const nameTerm = bindingToTerm(binding.name)\n row.addEventListener('click', async _event => {\n debug.log(' click row textContent: ' + row.textContent)\n debug.log(' click name: ' + nameTerm.value)\n if (object && nameTerm) {\n gotIt(object, nameTerm as Literal)\n }\n })\n return row\n } // rowForBinding\n function compareBindingsByName (self, other) {\n return other.name.value > self.name.value\n ? 1\n : other.name.name < self.name.value ? -1 : 0\n }\n\n if (inputEventHandlerLock) {\n debug.log(`Ignoring \"${searchInput.value}\" because of lock `)\n return\n }\n debug.log(`Setting lock at \"${searchInput.value}\"`)\n\n inputEventHandlerLock = true\n const languagePrefs = await getPreferredLanguages()\n const filter = searchInput.value.trim().toLowerCase()\n if (filter.length < AUTOCOMPLETE_THRESHOLD) { // too small\n clearList()\n // candidatesLoaded = false\n numberOfRows = AUTOCOMPLETE_ROWS\n } else {\n if (!allDisplayed || !lastFilter || !filter.startsWith(lastFilter)) {\n debug.log(` Querying database at \"${filter}\" cf last \"${lastFilter}\".`)\n lastBindings = await loadBindingsAndFilterByLanguage(filter, languagePrefs) || [] // freesh query\n }\n // Trim table as search gets tighter:\n const slimmed = filterByName(filter, lastBindings)\n if (loadedEnough && slimmed.length <= AUTOCOMPLETE_ROWS_STRETCH) {\n numberOfRows = slimmed.length // stretch if it means we get all items\n }\n allDisplayed = loadedEnough && slimmed.length <= numberOfRows\n debug.log(` Filter:\"${filter}\" lastBindings: ${lastBindings.length}, slimmed to ${slimmed.length}; rows: ${numberOfRows}, Enough? ${loadedEnough}, All displayed? ${allDisplayed}`)\n\n const displayable = slimmed.slice(0, numberOfRows)\n\n displayable.sort(compareBindingsByName)\n clearList()\n for (const binding of displayable) {\n table.appendChild(rowForBinding(binding))\n }\n if (slimmed.length === 1) {\n gotIt(bindingToTerm(slimmed[0].subject), bindingToTerm(slimmed[0].name) as Literal)\n }\n } // else\n inputEventHandlerLock = false\n } // refreshList\n\n function initialize () {\n if (acOptions.currentObject) { // If have existing value then jump into the endgame of the autocomplete\n searchInput.value = acOptions.currentName ? acOptions.currentName.value : '??? wot no name for ' + acOptions.currentObject\n foundName = acOptions.currentName\n lastFilter = acOptions.currentName ? acOptions.currentName.value : undefined\n foundObject = acOptions.currentObject\n } else {\n searchInput.value = ''\n lastFilter = undefined\n foundObject = undefined\n }\n if (decoration.deleteButton) {\n setVisible(decoration.deleteButton, !!acOptions.currentObject)\n }\n\n if (decoration.acceptButton) {\n setVisible(decoration.acceptButton, false) // hide until input complete\n }\n if (decoration.editButton) {\n setVisible(decoration.editButton, true)\n }\n if (decoration.cancelButton) {\n setVisible(decoration.cancelButton, false) // only allow cancel when there is something to cancel\n }\n inputEventHandlerLock = false\n clearList()\n } // initialiize\n\n // const queryParams: QueryParameters = acOptions.queryParams\n const targetClass = acOptions.targetClass\n if (!targetClass) throw new Error('renderAutoComplete: missing targetClass')\n // console.log(`renderAutoComplete: targetClass=${targetClass}` )\n if (decoration.acceptButton) {\n decoration.acceptButton.addEventListener('click', acceptButtonHandler, false)\n }\n if (decoration.cancelButton) {\n decoration.cancelButton.addEventListener('click', cancelButtonHandler, false)\n }\n\n // var candidatesLoaded = false\n let lastBindings\n let loadedEnough = false\n let inputEventHandlerLock = false\n let allDisplayed = false\n let lastFilter = undefined as (string | undefined)\n let numberOfRows = AUTOCOMPLETE_ROWS // this gets slimmed down\n const div = dom.createElement('div')\n let foundName = undefined as (Literal | undefined)// once found accepted string must match this\n let foundObject = undefined as (NamedNode | Literal | undefined)\n const table = div.appendChild(dom.createElement('table'))\n table.setAttribute('data-testid', 'autocomplete-table')\n table.setAttribute('style', 'max-width: 30em; margin: 0.5em;')\n const head = table.appendChild(dom.createElement('tr'))\n style.setStyle(head, 'autocompleteRowStyle') // textInputStyle or\n const cell = head.appendChild(dom.createElement('td'))\n const searchInput = cell.appendChild(dom.createElement('input'))\n searchInput.setAttribute('type', 'text')\n\n initialize()\n\n const size = acOptions.size || styleConstants.textInputSize || 20\n searchInput.setAttribute('size', size)\n searchInput.setAttribute('data-testid', 'autocomplete-input')\n\n const searchInputStyle = style.textInputStyle || // searchInputStyle ?\n 'border: 0.1em solid #444; border-radius: 0.5em; width: 100%; font-size: 100%; padding: 0.1em 0.6em' // @\n searchInput.setAttribute('style', searchInputStyle)\n searchInput.addEventListener('keyup', function (event) {\n if (event.keyCode === 13) {\n acceptButtonHandler(event)\n }\n }, false)\n\n searchInput.addEventListener('input', inputEventHHandler)\n // console.log('@@ renderAutoComplete returns ' + div.innerHTML)\n return div\n} // renderAutoComplete\n\n// ENDS\n"],"mappings":"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"}
1
+ {"version":3,"file":"autocompletePicker.esm.js","names":["widgets.errorMessageBlock","styleConstants","styleConstants_default","AUTOCOMPLETE_THRESHOLD","AUTOCOMPLETE_ROWS","AUTOCOMPLETE_ROWS_STRETCH","setVisible","visible","renderAutoComplete","complain","errorRow","table","dom","message","err","errorMessageBlock","style","finish","log","object","acOptions","store","clearList","callback","name","gotIt","decoration","acceptButtonHandler","foundName","searchInput","foundObject","cancelButtonHandler","initialize","div","nameMatch","parts","filter","j","word","candidate","inputEventHHandler","refreshList","loadBindingsAndFilterByLanguage","bindings","queryPublicDataByName","targetClass","languagePrefs","defaultPreferredLanguages","lastFilter","loadedEnough","filterByLanguage","filterByName","binding","rowForBinding","row","allDisplayed","bindingToTerm","nameTerm","compareBindingsByName","other","self","inputEventHandlerLock","getPreferredLanguages","slimmed","lastBindings","numberOfRows","displayable","head","size","searchInputStyle","event"],"sources":["../../../../src/widgets/forms/autocomplete/autocompletePicker.ts"],"sourcesContent":["/* Autocomplete Picker: Create and edit data using public data\n**\n** As the data source is passed as a parameter, all kinds of APIa and query services can be used\n**\n*/\nimport * as debug from '../../../lib/debug'\nimport { style } from '../../../lib/style'\nimport styleConstants from '../../../lib/styleConstants'\nimport * as widgets from '../../../widgets'\nimport { store } from 'solid-logic'\nimport { NamedNode, Literal } from 'rdflib'\nimport { queryPublicDataByName, bindingToTerm, AUTOCOMPLETE_LIMIT, QueryParameters } from './publicData'\nimport { filterByLanguage, getPreferredLanguages, defaultPreferredLanguages } from './language'\n\nconst AUTOCOMPLETE_THRESHOLD = 4 // don't check until this many characters typed\nconst AUTOCOMPLETE_ROWS = 20 // 20?\nconst AUTOCOMPLETE_ROWS_STRETCH = 40\n\n/*\nAutocomplete happens in 6 phases:\n 1. The search string is too small to bother\n 2. The search string is big enough, and we have not loaded the array\n 3. The search string is big enough, and we have loaded array up to the limit\n Display them and wait for more user input\n 4. The search string is big enough, and we have loaded array NOT to the limit\n but including all matches. No more fetches.\n If user gets more precise, wait for them to select one - or reduce to a single\n 5. Single one selected. Optionally waiting for accept button to be pressed, OR can change string and go to 5 or 2\n 6. Locked with a value. Press 'edit' button to return to 5\n*/\n\nexport type AutocompleteDecoration = {\n acceptButton?: HTMLElement,\n cancelButton: HTMLElement, // Must have cancel button\n editButton?: HTMLElement,\n deleteButton?: HTMLElement\n}\nexport type AutocompleteOptions = {\n targetClass?: NamedNode,\n currentObject?: NamedNode,\n currentName?: Literal,\n queryParams: QueryParameters,\n size?: number,\n permanent?: boolean\n}\n\ninterface Callback1 {\n (_subject: NamedNode, _name: Literal): any;\n}\n\nexport function setVisible (element:HTMLElement, visible:boolean) {\n element.style.display = visible ? '' : 'none' // Do not use visibility, it holds the real estate\n}\n\n// The core of the autocomplete UI\nexport async function renderAutoComplete (dom: HTMLDocument,\n acOptions:AutocompleteOptions,\n decoration: AutocompleteDecoration,\n callback: Callback1) {\n function complain (message) {\n const errorRow = table.appendChild(dom.createElement('tr'))\n debug.log(message)\n const err = new Error(message)\n errorRow.appendChild(widgets.errorMessageBlock(dom, err, 'pink'))\n // errorMessageBlock will log the stack to the console\n style.setStyle(errorRow, 'autocompleteRowStyle')\n errorRow.style.padding = '1em'\n }\n\n function finish (object, name) {\n debug.log('Auto complete: finish! ' + object)\n if (object.termType === 'Literal' && acOptions.queryParams.objectURIBase) {\n object = store.sym(acOptions.queryParams.objectURIBase.value + object.value)\n }\n // remove(decoration.cancelButton)\n // remove(decoration.acceptButton)\n // remove(div)\n clearList()\n callback(object, name)\n }\n async function gotIt (object:NamedNode | Literal, name: Literal) {\n if (decoration.acceptButton) {\n (decoration.acceptButton as any).disbaled = false\n setVisible(decoration.acceptButton, true) // now wait for confirmation\n searchInput.value = name.value // complete it\n foundName = name\n foundObject = object\n debug.log('Auto complete: name: ' + name)\n debug.log('Auto complete: waiting for accept ' + object)\n clearList() // This may be an option - nice and clean but does not allow change of mind\n return\n }\n setVisible(decoration.cancelButton, true)\n finish(object, name)\n }\n\n async function acceptButtonHandler (_event) {\n if (foundName && searchInput.value === foundName.value) { // still\n finish(foundObject, foundName)\n }\n }\n\n async function cancelButtonHandler (_event) {\n debug.log('Auto complete: Canceled by user! ')\n if (acOptions.permanent) {\n initialize()\n } else {\n if (div.parentNode) {\n div.parentNode.removeChild(div)\n }\n }\n }\n\n function nameMatch (filter:string, candidate: string):boolean {\n const parts = filter.split(' ') // Each name part must be somewhere\n for (let j = 0; j < parts.length; j++) {\n const word = parts[j]\n if (candidate.toLowerCase().indexOf(word) < 0) return false\n }\n return true\n }\n\n function clearList () {\n while (table.children.length > 1) {\n table.removeChild(table.lastChild as Node)\n }\n }\n\n async function inputEventHHandler (_event) {\n // console.log('@@ AC inputEventHHandler called')\n setVisible(decoration.cancelButton, true) // only allow cancel when there is something to cancel\n refreshList() /// @@ debounqce does not work with jest\n /*\n if (runningTimeout) {\n clearTimeout(runningTimeout)\n }\n runningTimeout = setTimeout(refreshList, AUTOCOMPLETE_DEBOUNCE_MS)\n */\n }\n\n async function loadBindingsAndFilterByLanguage (filter, languagePrefs) {\n // console.log('@@ loadBindingsAndFilterByLanguage ' + filter)\n let bindings\n try {\n bindings = await queryPublicDataByName(filter, targetClass as any,\n languagePrefs || defaultPreferredLanguages, acOptions.queryParams)\n } catch (err) {\n complain('Error querying db of organizations: ' + err)\n inputEventHandlerLock = false\n return\n }\n loadedEnough = bindings.length < AUTOCOMPLETE_LIMIT\n if (loadedEnough) {\n lastFilter = filter\n } else {\n lastFilter = undefined\n }\n clearList()\n const slimmed = filterByLanguage(bindings, languagePrefs)\n return slimmed || []\n }\n\n function filterByName (filter, bindings) {\n return (bindings || []).filter(binding => nameMatch(filter, binding.name.value))\n }\n\n async function refreshList () {\n // console.log('@@ refreshList called')\n function rowForBinding (binding) {\n const row = dom.createElement('tr')\n style.setStyle(row, 'autocompleteRowStyle')\n row.setAttribute('style', 'padding: 0.3em;')\n row.style.color = allDisplayed ? '#080' : '#088' // green means 'you should find it here'\n row.textContent = binding.name.value\n const object = bindingToTerm(binding.subject)\n const nameTerm = bindingToTerm(binding.name)\n row.addEventListener('click', async _event => {\n debug.log(' click row textContent: ' + row.textContent)\n debug.log(' click name: ' + nameTerm.value)\n if (object && nameTerm) {\n gotIt(object, nameTerm as Literal)\n }\n })\n return row\n } // rowForBinding\n function compareBindingsByName (self, other) {\n return other.name.value > self.name.value\n ? 1\n : other.name.name < self.name.value ? -1 : 0\n }\n\n if (inputEventHandlerLock) {\n debug.log(`Ignoring \"${searchInput.value}\" because of lock `)\n return\n }\n debug.log(`Setting lock at \"${searchInput.value}\"`)\n\n inputEventHandlerLock = true\n const languagePrefs = await getPreferredLanguages()\n const filter = searchInput.value.trim().toLowerCase()\n if (filter.length < AUTOCOMPLETE_THRESHOLD) { // too small\n clearList()\n // candidatesLoaded = false\n numberOfRows = AUTOCOMPLETE_ROWS\n } else {\n if (!allDisplayed || !lastFilter || !filter.startsWith(lastFilter)) {\n debug.log(` Querying database at \"${filter}\" cf last \"${lastFilter}\".`)\n lastBindings = await loadBindingsAndFilterByLanguage(filter, languagePrefs) || [] // freesh query\n }\n // Trim table as search gets tighter:\n const slimmed = filterByName(filter, lastBindings)\n if (loadedEnough && slimmed.length <= AUTOCOMPLETE_ROWS_STRETCH) {\n numberOfRows = slimmed.length // stretch if it means we get all items\n }\n allDisplayed = loadedEnough && slimmed.length <= numberOfRows\n debug.log(` Filter:\"${filter}\" lastBindings: ${lastBindings.length}, slimmed to ${slimmed.length}; rows: ${numberOfRows}, Enough? ${loadedEnough}, All displayed? ${allDisplayed}`)\n\n const displayable = slimmed.slice(0, numberOfRows)\n\n displayable.sort(compareBindingsByName)\n clearList()\n for (const binding of displayable) {\n table.appendChild(rowForBinding(binding))\n }\n if (slimmed.length === 1) {\n gotIt(bindingToTerm(slimmed[0].subject), bindingToTerm(slimmed[0].name) as Literal)\n }\n } // else\n inputEventHandlerLock = false\n } // refreshList\n\n function initialize () {\n if (acOptions.currentObject) { // If have existing value then jump into the endgame of the autocomplete\n searchInput.value = acOptions.currentName ? acOptions.currentName.value : '??? wot no name for ' + acOptions.currentObject\n foundName = acOptions.currentName\n lastFilter = acOptions.currentName ? acOptions.currentName.value : undefined\n foundObject = acOptions.currentObject\n } else {\n searchInput.value = ''\n lastFilter = undefined\n foundObject = undefined\n }\n if (decoration.deleteButton) {\n setVisible(decoration.deleteButton, !!acOptions.currentObject)\n }\n\n if (decoration.acceptButton) {\n setVisible(decoration.acceptButton, false) // hide until input complete\n }\n if (decoration.editButton) {\n setVisible(decoration.editButton, true)\n }\n if (decoration.cancelButton) {\n setVisible(decoration.cancelButton, false) // only allow cancel when there is something to cancel\n }\n inputEventHandlerLock = false\n clearList()\n } // initialiize\n\n // const queryParams: QueryParameters = acOptions.queryParams\n const targetClass = acOptions.targetClass\n if (!targetClass) throw new Error('renderAutoComplete: missing targetClass')\n // console.log(`renderAutoComplete: targetClass=${targetClass}` )\n if (decoration.acceptButton) {\n decoration.acceptButton.addEventListener('click', acceptButtonHandler, false)\n }\n if (decoration.cancelButton) {\n decoration.cancelButton.addEventListener('click', cancelButtonHandler, false)\n }\n\n // var candidatesLoaded = false\n let lastBindings\n let loadedEnough = false\n let inputEventHandlerLock = false\n let allDisplayed = false\n let lastFilter = undefined as (string | undefined)\n let numberOfRows = AUTOCOMPLETE_ROWS // this gets slimmed down\n const div = dom.createElement('div')\n let foundName = undefined as (Literal | undefined)// once found accepted string must match this\n let foundObject = undefined as (NamedNode | Literal | undefined)\n const table = div.appendChild(dom.createElement('table'))\n table.setAttribute('data-testid', 'autocomplete-table')\n table.setAttribute('style', 'max-width: 30em; margin: 0.5em;')\n const head = table.appendChild(dom.createElement('tr'))\n style.setStyle(head, 'autocompleteRowStyle') // textInputStyle or\n const cell = head.appendChild(dom.createElement('td'))\n const searchInput = cell.appendChild(dom.createElement('input'))\n searchInput.setAttribute('type', 'text')\n\n initialize()\n\n const size = acOptions.size || styleConstants.textInputSize || 20\n searchInput.setAttribute('size', size)\n searchInput.setAttribute('data-testid', 'autocomplete-input')\n\n const searchInputStyle = style.textInputStyle || // searchInputStyle ?\n 'border: 0.1em solid #444; border-radius: 0.5em; width: 100%; font-size: 100%; padding: 0.1em 0.6em' // @\n searchInput.setAttribute('style', searchInputStyle)\n searchInput.addEventListener('keyup', function (event) {\n if (event.keyCode === 13) {\n acceptButtonHandler(event)\n }\n }, false)\n\n searchInput.addEventListener('input', inputEventHHandler)\n // console.log('@@ renderAutoComplete returns ' + div.innerHTML)\n return div\n} // renderAutoComplete\n\n// ENDS\n"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { __exportAll as e } from "../../../_virtual/_rolldown/runtime.esm.js";
2
2
  import t from "../../../lib/ns.esm.js";
3
3
  import { log as n } from "../../../lib/debug.esm.js";
4
4
  import { authn as r, store as i } from "solid-logic";
5
- //#region src/widgets/forms/autocomplete/language.ts
5
+ // src/widgets/forms/autocomplete/language.ts
6
6
  var a = /* @__PURE__ */ e({
7
7
  addDefaults: () => c,
8
8
  defaultPreferredLanguages: () => s,
@@ -70,7 +70,6 @@ function d(e, t) {
70
70
  }
71
71
  return n(` Filter by language: ${e.length} -> ${a.length}`), a;
72
72
  }
73
- //#endregion
74
73
  export { c as addDefaults, s as defaultPreferredLanguages, d as filterByLanguage, u as getPreferredLanguages, l as getPreferredLanguagesFor, o as languageCodeURIBase, a as language_exports };
75
74
 
76
75
  //# sourceMappingURL=language.esm.js.map
@@ -4,7 +4,7 @@ import { log as n, warn as r } from "../../../lib/debug.esm.js";
4
4
  import { defaultPreferredLanguages as i, getPreferredLanguages as a } from "./language.esm.js";
5
5
  import { Literal as o, parse as s } from "rdflib";
6
6
  import { store as c } from "solid-logic";
7
- //#region src/widgets/forms/autocomplete/publicData.ts
7
+ // src/widgets/forms/autocomplete/publicData.ts
8
8
  var l = /* @__PURE__ */ e({
9
9
  AUTOCOMPLETE_LIMIT: () => 200,
10
10
  ESCOResultToBindings: () => C,
@@ -245,7 +245,6 @@ async function N(e, t, r) {
245
245
  OPTIONAL { ${r} <http://dbpedia.org/ontology/country> ?country }
246
246
  }`, h), r.doc()), n("Finished getDbpediaDetails.");
247
247
  }
248
- //#endregion
249
248
  export { C as ESCOResultToBindings, x as bindingToTerm, g as dbPediaTypeMap, h as dbpediaParameters, m as escoParameters, p as fetcherOptionsJsonPublicData, N as getDbpediaDetails, A as getWikidataDetails, j as getWikidataDetailsOld, M as getWikidataLocation, f as instituteDetailsWikidataQuery, S as loadFromBindings, k as loadPublicDataThing, l as publicData_exports, w as queryESCODataByName, E as queryPublicDataByName, O as queryPublicDataConstruct, D as queryPublicDataSelect, b as variableNameToPredicateMap, d as wikidataClasses, y as wikidataIncomingClassMap, _ as wikidataOutgoingClassMap, v as wikidataParameters };
250
249
 
251
250
  //# sourceMappingURL=publicData.esm.js.map
@@ -8,7 +8,7 @@ import { fieldParams as a } from "./fieldParams.esm.js";
8
8
  import { mostSpecificClassURI as o } from "./fieldFunction.esm.js";
9
9
  import { Literal as s, st as c } from "rdflib";
10
10
  import { solidLogicSingleton as l } from "solid-logic";
11
- //#region src/widgets/forms/basic.ts
11
+ // src/widgets/forms/basic.ts
12
12
  var u = l.store;
13
13
  function d(t, a, o, s, c) {
14
14
  o.style.display = "flex", o.style.flexDirection = "row";
@@ -85,7 +85,6 @@ function m(t, l, f, m, h, g, _) {
85
85
  }
86
86
  }, !0), b) : (O.readOnly = !0, O.style = r.textInputStyleUneditable + E, C && O.value === "" && (b.style.display = "none"), b);
87
87
  }
88
- //#endregion
89
88
  export { m as basicField, f as fieldLabel, p as fieldStore, d as renderNameValuePair };
90
89
 
91
90
  //# sourceMappingURL=basic.esm.js.map
@@ -1,7 +1,7 @@
1
1
  import { debug as e } from "../../lib/log.esm.js";
2
2
  import { errorMessageBlock as t } from "../error.esm.js";
3
3
  import { solidLogicSingleton as n } from "solid-logic";
4
- //#region src/widgets/forms/fieldFunction.ts
4
+ // src/widgets/forms/fieldFunction.ts
5
5
  var r = n.store, i = {};
6
6
  function a(e) {
7
7
  let t = r, n = t.findTypeURIs(e), i = t.bottomTypeURIs(n), a = [];
@@ -15,7 +15,6 @@ function o(n, r) {
15
15
  return n && n.appendChild(i), i;
16
16
  };
17
17
  }
18
- //#endregion
19
18
  export { i as field, o as fieldFunction, a as mostSpecificClassURI };
20
19
 
21
20
  //# sourceMappingURL=fieldFunction.esm.js.map
@@ -1,6 +1,6 @@
1
1
  import e from "../../lib/ns.esm.js";
2
2
  import { style as t } from "../../lib/style.esm.js";
3
- //#region src/widgets/forms/fieldParams.ts
3
+ // src/widgets/forms/fieldParams.ts
4
4
  var n = {
5
5
  [e.ui("ColorField").uri]: {
6
6
  size: 9,
@@ -68,7 +68,6 @@ var n = {
68
68
  style: t.formHeadingStyle
69
69
  }
70
70
  };
71
- //#endregion
72
71
  export { n as fieldParams };
73
72
 
74
73
  //# sourceMappingURL=fieldParams.esm.js.map
@@ -2,7 +2,7 @@ import e from "../../lib/ns.esm.js";
2
2
  import { fieldParams as t } from "./fieldParams.esm.js";
3
3
  import { mostSpecificClassURI as n } from "./fieldFunction.esm.js";
4
4
  import { store as r } from "solid-logic";
5
- //#region src/widgets/forms/formStyle.ts
5
+ // src/widgets/forms/formStyle.ts
6
6
  var i = "https://www.w3.org/ns/css#";
7
7
  function a(a, o) {
8
8
  let s = n(o), c = t[s] || {}, l = r.any(o, e.ui("style"));
@@ -17,7 +17,6 @@ function a(a, o) {
17
17
  }
18
18
  }) : c.style && a.setAttribute("style", c.style);
19
19
  }
20
- //#endregion
21
20
  export { a as setFieldStyle };
22
21
 
23
22
  //# sourceMappingURL=formStyle.esm.js.map
@@ -17,7 +17,7 @@ import { IconicMultiSelect as A } from "./multiSelect.esm.js";
17
17
  import "./index.esm.js";
18
18
  import * as j from "rdflib";
19
19
  import { store as M } from "solid-logic";
20
- //#region src/widgets/forms.js
20
+ // src/widgets/forms.js
21
21
  var N = "✓", P = "✕", F = "-", I = M;
22
22
  x[e.ui("AutocompleteField").uri] = k;
23
23
  function L(t, n, r, i, a, o, c) {
@@ -761,7 +761,6 @@ function ie(e, t, n) {
761
761
  }
762
762
  return h;
763
763
  }
764
- //#endregion
765
764
  export { V as appendForm, T as basicField, Z as buildCheckboxForm, B as editFormButton, x as field, S as fieldFunction, E as fieldLabel, b as fieldParams, D as fieldStore, U as findClosest, ee as formsFor, q as makeDescription, Y as makeSelectForCategory, re as makeSelectForChoice, J as makeSelectForClassifierOptions, X as makeSelectForNestedCategory, ne as makeSelectForOptions, C as mostSpecificClassURI, te as newButton, Q as newThing, K as promptForNew, H as propertiesForClass, O as renderNameValuePair, G as sortByLabel, W as sortBySequence };
766
765
 
767
766
  //# sourceMappingURL=forms.esm.js.map
@@ -11,7 +11,7 @@ import { publicData_exports as oe } from "./forms/autocomplete/publicData.esm.js
11
11
  import { renderAutoComplete as se, setVisible as ce } from "./forms/autocomplete/autocompletePicker.esm.js";
12
12
  import { renderAutocompleteControl as le } from "./forms/autocomplete/autocompleteBar.esm.js";
13
13
  import { appendForm as ue, buildCheckboxForm as de, editFormButton as fe, findClosest as pe, formsFor as me, makeDescription as he, makeSelectForCategory as ge, makeSelectForChoice as _e, makeSelectForClassifierOptions as ve, makeSelectForNestedCategory as ye, makeSelectForOptions as be, newButton as xe, newThing as Se, promptForNew as Ce, propertiesForClass as we, sortByLabel as Te, sortBySequence as Ee } from "./forms.esm.js";
14
- //#region src/widgets/index.js
14
+ // src/widgets/index.js
15
15
  var De = /* @__PURE__ */ ee({
16
16
  Group: () => i,
17
17
  GroupBuilder: () => a,
@@ -94,7 +94,6 @@ var De = /* @__PURE__ */ ee({
94
94
  timestamp: () => Y,
95
95
  uploadFiles: () => n
96
96
  });
97
- //#endregion
98
97
  export { i as Group, a as GroupBuilder, o as GroupPicker, s as PeoplePicker, c as Person, d as addStyleSheet, f as allClassURIs, ue as appendForm, p as askName, m as attachmentList, ne as basicField, de as buildCheckboxForm, h as button, g as cancelButton, _ as clearElement, v as complain, y as continueButton, b as createLinkDiv, l as createLinkForURI, x as createNameDiv, S as defaultAnnotationStore, C as deleteButtonWithCheck, fe as editFormButton, r as errorMessageBlock, w as extractLogURI, T as faviconOrDefault, Z as field, Q as fieldFunction, re as fieldLabel, X as fieldParams, ie as fieldStore, E as fileUploadButtonDiv, pe as findClosest, D as findImage, O as findImageFromURI, k as formatDateTime, me as formsFor, A as iconForClass, j as imagesOf, M as index, N as isAudio, P as isImage, F as isVideo, I as linkButton, u as linkIcon, he as makeDescription, e as makeDraggable, t as makeDropTarget, ge as makeSelectForCategory, _e as makeSelectForChoice, ve as makeSelectForClassifierOptions, ye as makeSelectForNestedCategory, be as makeSelectForOptions, $ as mostSpecificClassURI, xe as newButton, Se as newThing, L as openHrefInOutlineMode, R as personTR, Ce as promptForNew, we as propertiesForClass, z as propertyTriage, oe as publicData, B as refreshTree, V as removeButton, H as renderAsDiv, U as renderAsRow, se as renderAutoComplete, le as renderAutocompleteControl, ae as renderNameValuePair, te as selectorPanel, W as selectorPanelRefresh, G as setImage, K as setName, ce as setVisible, q as shortDate, J as shortTime, Te as sortByLabel, Ee as sortBySequence, Y as timestamp, n as uploadFiles, De as widgets_exports };
99
98
 
100
99
  //# sourceMappingURL=index.esm.js.map
@@ -1,5 +1,5 @@
1
1
  import { style as e } from "../lib/style_multiSelect.esm.js";
2
- //#region src/widgets/multiSelect.js
2
+ // src/widgets/multiSelect.js
3
3
  var t = class {
4
4
  _data;
5
5
  _domElements;
@@ -270,7 +270,6 @@ var t = class {
270
270
  } else n && n.parentNode && n.parentNode.removeChild(n);
271
271
  }
272
272
  };
273
- //#endregion
274
273
  export { t as IconicMultiSelect };
275
274
 
276
275
  //# sourceMappingURL=multiSelect.esm.js.map