solid-ui 3.1.0 → 3.1.1-test.0

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 (242) hide show
  1. package/README.md +22 -4
  2. package/dist/components/button/index.d.ts +1 -0
  3. package/dist/components/button/index.esm.js +546 -0
  4. package/dist/components/button/index.esm.js.map +1 -0
  5. package/dist/components/button/index.esm.min.js +268 -0
  6. package/dist/components/button/index.esm.min.js.map +1 -0
  7. package/dist/components/button/index.js +428 -0
  8. package/dist/components/button/index.js.map +1 -0
  9. package/dist/components/button/index.min.js +257 -0
  10. package/dist/components/button/index.min.js.map +1 -0
  11. package/dist/components/combobox/index.d.ts +1 -0
  12. package/dist/components/combobox/index.esm.js +953 -0
  13. package/dist/components/combobox/index.esm.js.map +1 -0
  14. package/dist/components/combobox/index.esm.min.js +339 -0
  15. package/dist/components/combobox/index.esm.min.js.map +1 -0
  16. package/dist/components/combobox/index.js +782 -0
  17. package/dist/components/combobox/index.js.map +1 -0
  18. package/dist/components/combobox/index.min.js +328 -0
  19. package/dist/components/combobox/index.min.js.map +1 -0
  20. package/dist/components/footer/index.d.ts +1 -1
  21. package/dist/components/footer/index.esm.js +105 -63
  22. package/dist/components/footer/index.esm.js.map +1 -1
  23. package/dist/components/footer/index.esm.min.js +4 -4
  24. package/dist/components/footer/index.esm.min.js.map +1 -1
  25. package/dist/components/footer/index.js +103 -52
  26. package/dist/components/footer/index.js.map +1 -1
  27. package/dist/components/footer/index.min.js +8 -8
  28. package/dist/components/footer/index.min.js.map +1 -1
  29. package/dist/components/header/index.d.ts +1 -1
  30. package/dist/components/header/index.esm.js +1405 -1363
  31. package/dist/components/header/index.esm.js.map +1 -1
  32. package/dist/components/header/index.esm.min.js +857 -815
  33. package/dist/components/header/index.esm.min.js.map +1 -1
  34. package/dist/components/header/index.js +61 -19
  35. package/dist/components/header/index.js.map +1 -1
  36. package/dist/components/header/index.min.js +53 -11
  37. package/dist/components/header/index.min.js.map +1 -1
  38. package/dist/components/loginButton/index.d.ts +1 -1
  39. package/dist/components/loginButton/index.esm.js +50 -8
  40. package/dist/components/loginButton/index.esm.js.map +1 -1
  41. package/dist/components/loginButton/index.esm.min.js +60 -18
  42. package/dist/components/loginButton/index.esm.min.js.map +1 -1
  43. package/dist/components/loginButton/index.js +49 -7
  44. package/dist/components/loginButton/index.js.map +1 -1
  45. package/dist/components/loginButton/index.min.js +58 -16
  46. package/dist/components/loginButton/index.min.js.map +1 -1
  47. package/dist/components/photoCapture/index.d.ts +1 -0
  48. package/dist/components/photoCapture/index.esm.js +966 -0
  49. package/dist/components/photoCapture/index.esm.js.map +1 -0
  50. package/dist/components/photoCapture/index.esm.min.js +304 -0
  51. package/dist/components/photoCapture/index.esm.min.js.map +1 -0
  52. package/dist/components/photoCapture/index.js +848 -0
  53. package/dist/components/photoCapture/index.js.map +1 -0
  54. package/dist/components/photoCapture/index.min.js +293 -0
  55. package/dist/components/photoCapture/index.min.js.map +1 -0
  56. package/dist/components/select/index.d.ts +1 -0
  57. package/dist/components/select/index.esm.js +939 -0
  58. package/dist/components/select/index.esm.js.map +1 -0
  59. package/dist/components/select/index.esm.min.js +370 -0
  60. package/dist/components/select/index.esm.min.js.map +1 -0
  61. package/dist/components/select/index.js +771 -0
  62. package/dist/components/select/index.js.map +1 -0
  63. package/dist/components/select/index.min.js +359 -0
  64. package/dist/components/select/index.min.js.map +1 -0
  65. package/dist/components/signupButton/index.d.ts +1 -1
  66. package/dist/components/signupButton/index.esm.js +2 -2
  67. package/dist/components/signupButton/index.esm.js.map +1 -1
  68. package/dist/components/signupButton/index.esm.min.js +2 -2
  69. package/dist/components/signupButton/index.esm.min.js.map +1 -1
  70. package/dist/components/signupButton/index.js +2 -2
  71. package/dist/components/signupButton/index.js.map +1 -1
  72. package/dist/components/signupButton/index.min.js.map +1 -1
  73. package/dist/login/login.d.ts.map +1 -1
  74. package/dist/login/login.js +12 -2
  75. package/dist/login/login.js.map +1 -1
  76. package/dist/matrix/matrix.js.map +1 -1
  77. package/dist/solid-ui.esm.js +103 -61
  78. package/dist/solid-ui.esm.js.map +1 -1
  79. package/dist/solid-ui.esm.min.js +6 -6
  80. package/dist/solid-ui.esm.min.js.map +1 -1
  81. package/dist/solid-ui.js +102 -51
  82. package/dist/solid-ui.js.map +1 -1
  83. package/dist/solid-ui.min.js +9 -9
  84. package/dist/solid-ui.min.js.map +1 -1
  85. package/dist/tabs.js +2 -2
  86. package/dist/tabs.js.map +1 -1
  87. package/dist/v2/components/actions/button/Button.d.ts +97 -0
  88. package/dist/v2/components/actions/button/Button.d.ts.map +1 -0
  89. package/dist/v2/components/actions/button/Button.js +325 -0
  90. package/dist/v2/components/actions/button/Button.js.map +1 -0
  91. package/dist/v2/components/actions/button/Button.test.d.ts +2 -0
  92. package/dist/v2/components/actions/button/Button.test.d.ts.map +1 -0
  93. package/dist/v2/components/actions/button/Button.test.js +117 -0
  94. package/dist/v2/components/actions/button/Button.test.js.map +1 -0
  95. package/dist/v2/components/actions/button/index.d.ts +8 -0
  96. package/dist/v2/components/actions/button/index.d.ts.map +1 -0
  97. package/dist/v2/components/actions/button/index.js +7 -0
  98. package/dist/v2/components/actions/button/index.js.map +1 -0
  99. package/dist/v2/components/auth/loginButton/LoginButton.d.ts.map +1 -0
  100. package/dist/v2/components/{loginButton → auth/loginButton}/LoginButton.js +46 -4
  101. package/dist/v2/components/auth/loginButton/LoginButton.js.map +1 -0
  102. package/dist/v2/components/auth/loginButton/LoginButton.test.d.ts.map +1 -0
  103. package/dist/v2/components/auth/loginButton/LoginButton.test.js.map +1 -0
  104. package/dist/v2/components/auth/loginButton/downArrow.d.ts.map +1 -0
  105. package/dist/v2/components/auth/loginButton/downArrow.js.map +1 -0
  106. package/dist/v2/components/auth/loginButton/index.d.ts.map +1 -0
  107. package/dist/v2/components/auth/loginButton/index.js.map +1 -0
  108. package/dist/v2/components/auth/signupButton/SignupButton.d.ts.map +1 -0
  109. package/dist/v2/components/auth/signupButton/SignupButton.js.map +1 -0
  110. package/dist/v2/components/auth/signupButton/SignupButton.test.d.ts.map +1 -0
  111. package/dist/v2/components/auth/signupButton/SignupButton.test.js.map +1 -0
  112. package/dist/v2/components/auth/signupButton/index.d.ts.map +1 -0
  113. package/dist/v2/components/auth/signupButton/index.js.map +1 -0
  114. package/dist/v2/components/forms/combobox/Combobox.d.ts +82 -0
  115. package/dist/v2/components/forms/combobox/Combobox.d.ts.map +1 -0
  116. package/dist/v2/components/forms/combobox/Combobox.js +506 -0
  117. package/dist/v2/components/forms/combobox/Combobox.js.map +1 -0
  118. package/dist/v2/components/forms/combobox/Combobox.test.d.ts +2 -0
  119. package/dist/v2/components/forms/combobox/Combobox.test.d.ts.map +1 -0
  120. package/dist/v2/components/forms/combobox/Combobox.test.js +201 -0
  121. package/dist/v2/components/forms/combobox/Combobox.test.js.map +1 -0
  122. package/dist/v2/components/forms/combobox/comboboxTypes.d.ts +6 -0
  123. package/dist/v2/components/forms/combobox/comboboxTypes.d.ts.map +1 -0
  124. package/dist/v2/components/forms/combobox/comboboxTypes.js +2 -0
  125. package/dist/v2/components/forms/combobox/comboboxTypes.js.map +1 -0
  126. package/dist/v2/components/forms/combobox/index.d.ts +3 -0
  127. package/dist/v2/components/forms/combobox/index.d.ts.map +1 -0
  128. package/dist/v2/components/forms/combobox/index.js +7 -0
  129. package/dist/v2/components/forms/combobox/index.js.map +1 -0
  130. package/dist/v2/components/forms/select/Select.d.ts +68 -0
  131. package/dist/v2/components/forms/select/Select.d.ts.map +1 -0
  132. package/dist/v2/components/forms/select/Select.js +499 -0
  133. package/dist/v2/components/forms/select/Select.js.map +1 -0
  134. package/dist/v2/components/forms/select/Select.test.d.ts +2 -0
  135. package/dist/v2/components/forms/select/Select.test.d.ts.map +1 -0
  136. package/dist/v2/components/forms/select/Select.test.js +168 -0
  137. package/dist/v2/components/forms/select/Select.test.js.map +1 -0
  138. package/dist/v2/components/forms/select/index.d.ts +3 -0
  139. package/dist/v2/components/forms/select/index.d.ts.map +1 -0
  140. package/dist/v2/components/forms/select/index.js +7 -0
  141. package/dist/v2/components/forms/select/index.js.map +1 -0
  142. package/dist/v2/components/forms/shared/downArrow.d.ts +2 -0
  143. package/dist/v2/components/forms/shared/downArrow.d.ts.map +1 -0
  144. package/dist/v2/components/forms/shared/downArrow.js +10 -0
  145. package/dist/v2/components/forms/shared/downArrow.js.map +1 -0
  146. package/dist/v2/components/forms/shared/keyboard.d.ts +7 -0
  147. package/dist/v2/components/forms/shared/keyboard.d.ts.map +1 -0
  148. package/dist/v2/components/forms/shared/keyboard.js +56 -0
  149. package/dist/v2/components/forms/shared/keyboard.js.map +1 -0
  150. package/dist/v2/components/forms/shared/listboxStyles.d.ts +2 -0
  151. package/dist/v2/components/forms/shared/listboxStyles.d.ts.map +1 -0
  152. package/dist/v2/components/forms/shared/listboxStyles.js +96 -0
  153. package/dist/v2/components/forms/shared/listboxStyles.js.map +1 -0
  154. package/dist/v2/components/forms/shared/listboxTemplate.d.ts +11 -0
  155. package/dist/v2/components/forms/shared/listboxTemplate.d.ts.map +1 -0
  156. package/dist/v2/components/forms/shared/listboxTemplate.js +37 -0
  157. package/dist/v2/components/forms/shared/listboxTemplate.js.map +1 -0
  158. package/dist/v2/components/forms/shared/optionTypes.d.ts +6 -0
  159. package/dist/v2/components/forms/shared/optionTypes.d.ts.map +1 -0
  160. package/dist/v2/components/forms/shared/optionTypes.js +2 -0
  161. package/dist/v2/components/forms/shared/optionTypes.js.map +1 -0
  162. package/dist/v2/components/layout/footer/Footer.d.ts.map +1 -0
  163. package/dist/v2/components/{footer → layout/footer}/Footer.js +1 -1
  164. package/dist/v2/components/layout/footer/Footer.js.map +1 -0
  165. package/dist/v2/components/layout/footer/Footer.test.d.ts.map +1 -0
  166. package/dist/v2/components/layout/footer/Footer.test.js.map +1 -0
  167. package/dist/v2/components/layout/footer/index.d.ts.map +1 -0
  168. package/dist/v2/components/layout/footer/index.js.map +1 -0
  169. package/dist/v2/components/{header → layout/header}/Header.d.ts +2 -2
  170. package/dist/v2/components/layout/header/Header.d.ts.map +1 -0
  171. package/dist/v2/components/{header → layout/header}/Header.js +5 -5
  172. package/dist/v2/components/layout/header/Header.js.map +1 -0
  173. package/dist/v2/components/layout/header/header.test.d.ts.map +1 -0
  174. package/dist/v2/components/layout/header/header.test.js.map +1 -0
  175. package/dist/v2/components/layout/header/index.d.ts.map +1 -0
  176. package/dist/v2/components/layout/header/index.js.map +1 -0
  177. package/dist/v2/components/media/photoCapture/PhotoCapture.d.ts +200 -0
  178. package/dist/v2/components/media/photoCapture/PhotoCapture.d.ts.map +1 -0
  179. package/dist/v2/components/media/photoCapture/PhotoCapture.js +723 -0
  180. package/dist/v2/components/media/photoCapture/PhotoCapture.js.map +1 -0
  181. package/dist/v2/components/media/photoCapture/PhotoCapture.test.d.ts +2 -0
  182. package/dist/v2/components/media/photoCapture/PhotoCapture.test.d.ts.map +1 -0
  183. package/dist/v2/components/media/photoCapture/PhotoCapture.test.js +157 -0
  184. package/dist/v2/components/media/photoCapture/PhotoCapture.test.js.map +1 -0
  185. package/dist/v2/components/media/photoCapture/index.d.ts +3 -0
  186. package/dist/v2/components/media/photoCapture/index.d.ts.map +1 -0
  187. package/dist/v2/components/media/photoCapture/index.js +7 -0
  188. package/dist/v2/components/media/photoCapture/index.js.map +1 -0
  189. package/dist/versionInfo.js +13 -13
  190. package/dist/widgets/buttons.d.ts +1 -0
  191. package/dist/widgets/buttons.d.ts.map +1 -1
  192. package/dist/widgets/buttons.js +15 -2
  193. package/dist/widgets/buttons.js.map +1 -1
  194. package/package.json +111 -45
  195. package/dist/v2/components/footer/Footer.d.ts.map +0 -1
  196. package/dist/v2/components/footer/Footer.js.map +0 -1
  197. package/dist/v2/components/footer/Footer.test.d.ts.map +0 -1
  198. package/dist/v2/components/footer/Footer.test.js.map +0 -1
  199. package/dist/v2/components/footer/index.d.ts.map +0 -1
  200. package/dist/v2/components/footer/index.js.map +0 -1
  201. package/dist/v2/components/header/Header.d.ts.map +0 -1
  202. package/dist/v2/components/header/Header.js.map +0 -1
  203. package/dist/v2/components/header/header.test.d.ts.map +0 -1
  204. package/dist/v2/components/header/header.test.js.map +0 -1
  205. package/dist/v2/components/header/index.d.ts.map +0 -1
  206. package/dist/v2/components/header/index.js.map +0 -1
  207. package/dist/v2/components/loginButton/LoginButton.d.ts.map +0 -1
  208. package/dist/v2/components/loginButton/LoginButton.js.map +0 -1
  209. package/dist/v2/components/loginButton/LoginButton.test.d.ts.map +0 -1
  210. package/dist/v2/components/loginButton/LoginButton.test.js.map +0 -1
  211. package/dist/v2/components/loginButton/downArrow.d.ts.map +0 -1
  212. package/dist/v2/components/loginButton/downArrow.js.map +0 -1
  213. package/dist/v2/components/loginButton/index.d.ts.map +0 -1
  214. package/dist/v2/components/loginButton/index.js.map +0 -1
  215. package/dist/v2/components/signupButton/SignupButton.d.ts.map +0 -1
  216. package/dist/v2/components/signupButton/SignupButton.js.map +0 -1
  217. package/dist/v2/components/signupButton/SignupButton.test.d.ts.map +0 -1
  218. package/dist/v2/components/signupButton/SignupButton.test.js.map +0 -1
  219. package/dist/v2/components/signupButton/index.d.ts.map +0 -1
  220. package/dist/v2/components/signupButton/index.js.map +0 -1
  221. /package/dist/v2/components/{loginButton → auth/loginButton}/LoginButton.d.ts +0 -0
  222. /package/dist/v2/components/{loginButton → auth/loginButton}/LoginButton.test.d.ts +0 -0
  223. /package/dist/v2/components/{loginButton → auth/loginButton}/LoginButton.test.js +0 -0
  224. /package/dist/v2/components/{loginButton → auth/loginButton}/downArrow.d.ts +0 -0
  225. /package/dist/v2/components/{loginButton → auth/loginButton}/downArrow.js +0 -0
  226. /package/dist/v2/components/{loginButton → auth/loginButton}/index.d.ts +0 -0
  227. /package/dist/v2/components/{loginButton → auth/loginButton}/index.js +0 -0
  228. /package/dist/v2/components/{signupButton → auth/signupButton}/SignupButton.d.ts +0 -0
  229. /package/dist/v2/components/{signupButton → auth/signupButton}/SignupButton.js +0 -0
  230. /package/dist/v2/components/{signupButton → auth/signupButton}/SignupButton.test.d.ts +0 -0
  231. /package/dist/v2/components/{signupButton → auth/signupButton}/SignupButton.test.js +0 -0
  232. /package/dist/v2/components/{signupButton → auth/signupButton}/index.d.ts +0 -0
  233. /package/dist/v2/components/{signupButton → auth/signupButton}/index.js +0 -0
  234. /package/dist/v2/components/{footer → layout/footer}/Footer.d.ts +0 -0
  235. /package/dist/v2/components/{footer → layout/footer}/Footer.test.d.ts +0 -0
  236. /package/dist/v2/components/{footer → layout/footer}/Footer.test.js +0 -0
  237. /package/dist/v2/components/{footer → layout/footer}/index.d.ts +0 -0
  238. /package/dist/v2/components/{footer → layout/footer}/index.js +0 -0
  239. /package/dist/v2/components/{header → layout/header}/header.test.d.ts +0 -0
  240. /package/dist/v2/components/{header → layout/header}/header.test.js +0 -0
  241. /package/dist/v2/components/{header → layout/header}/index.d.ts +0 -0
  242. /package/dist/v2/components/{header → layout/header}/index.js +0 -0
@@ -5897,14 +5897,24 @@ function newAppInstance(dom, appDetails, callback) {
5897
5897
  * and/or a developer
5898
5898
  */
5899
5899
  async function getUserRoles() {
5900
+ const sessionInfo = solid_logic__WEBPACK_IMPORTED_MODULE_1__.authSession.info;
5901
+ if (!sessionInfo?.isLoggedIn || !sessionInfo?.webId) {
5902
+ return [];
5903
+ }
5904
+ const currentUser = solid_logic__WEBPACK_IMPORTED_MODULE_1__.authn.currentUser();
5905
+ if (!currentUser) {
5906
+ return [];
5907
+ }
5900
5908
  try {
5901
5909
  const {
5902
5910
  me,
5903
5911
  preferencesFile,
5904
5912
  preferencesFileError
5905
- } = await ensureLoadedPreferences({});
5913
+ } = await ensureLoadedPreferences({
5914
+ me: currentUser
5915
+ });
5906
5916
  if (!preferencesFile || preferencesFileError) {
5907
- throw new Error(preferencesFileError);
5917
+ throw new Error(preferencesFileError || 'Unable to load user preferences file.');
5908
5918
  }
5909
5919
  return solid_logic__WEBPACK_IMPORTED_MODULE_1__.solidLogicSingleton.store.each(me, _ns__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A.rdf('type'), null, preferencesFile.doc());
5910
5920
  } catch (error) {
@@ -10166,7 +10176,7 @@ function tabWidget(options) {
10166
10176
  rootElement.style.flexDirection = (vertical ? 'row' : 'column') + (flipped ? '-reverse' : '');
10167
10177
  const navElement = rootElement.appendChild(dom.createElement('nav'));
10168
10178
  navElement.setAttribute('style', _style__WEBPACK_IMPORTED_MODULE_2__/* .style */ .i.tabsNavElement);
10169
- const mainElement = rootElement.appendChild(dom.createElement('main'));
10179
+ const mainElement = rootElement.appendChild(dom.createElement('div'));
10170
10180
  mainElement.setAttribute('style', _style__WEBPACK_IMPORTED_MODULE_2__/* .style */ .i.tabsMainElement); // override tabbedtab.css
10171
10181
  const tabContainer = navElement.appendChild(dom.createElement('ul'));
10172
10182
  tabContainer.setAttribute('style', _style__WEBPACK_IMPORTED_MODULE_2__/* .style */ .i.tabContainer);
@@ -10288,7 +10298,7 @@ function tabWidget(options) {
10288
10298
  function getOrCreateContainerElement(ele) {
10289
10299
  const bodyMain = ele.bodyTR?.children[0];
10290
10300
  if (bodyMain) return bodyMain;
10291
- const newBodyMain = ele.bodyTR.appendChild(dom.createElement('main'));
10301
+ const newBodyMain = ele.bodyTR.appendChild(dom.createElement('div'));
10292
10302
  newBodyMain.setAttribute('style', bodyMainStyle);
10293
10303
  return newBodyMain;
10294
10304
  }
@@ -12197,6 +12207,11 @@ function attachmentList(dom, subject, div, options = {}) {
12197
12207
  // options = options || {}
12198
12208
  const docsWaitingForRowRefresh = new Set();
12199
12209
  const hasAsyncEnrichedRowOptions = !!(options.renderSupportingInfo || options.renderNameSuffix);
12210
+ // Keep the generic default on for simple consumers: if row decoration depends on
12211
+ // linked-profile data arriving later, attachmentList will rerender once that
12212
+ // target document finishes loading. Complex callers with their own streaming or
12213
+ // batched refresh pipeline can opt out to avoid duplicate whole-list refreshes.
12214
+ const refreshOnDocumentLoad = options.refreshOnDocumentLoad ?? true;
12200
12215
  const deleteAttachment = function (target) {
12201
12216
  if (!kb.updater) {
12202
12217
  throw new Error('kb has no updater');
@@ -12216,13 +12231,16 @@ function attachmentList(dom, subject, div, options = {}) {
12216
12231
  };
12217
12232
  opt.renderSupportingInfo = options.renderSupportingInfo;
12218
12233
  opt.renderNameSuffix = options.renderNameSuffix;
12219
- if (hasAsyncEnrichedRowOptions && target?.uri && kb.fetcher) {
12234
+ if (hasAsyncEnrichedRowOptions && refreshOnDocumentLoad && target?.uri && kb.fetcher) {
12220
12235
  const targetDoc = target.doc();
12221
12236
  const requestState = targetDoc?.uri ? kb.fetcher.requested?.[targetDoc.uri] : undefined;
12222
12237
  const shouldWaitForFetch = requestState !== 'done' && requestState !== 'failed';
12223
12238
  if (targetDoc?.uri && shouldWaitForFetch && !docsWaitingForRowRefresh.has(targetDoc.uri)) {
12224
12239
  docsWaitingForRowRefresh.add(targetDoc.uri);
12225
- // Root fix: these row options can depend on async profile data, so rerender once fetch completes.
12240
+ // The row renderer may need data from the target profile that is not loaded yet.
12241
+ // Register one follow-up refresh per target document so simple attachmentList
12242
+ // consumers eventually show the enriched row contents without building their own
12243
+ // async refresh orchestration.
12226
12244
  kb.fetcher.nowOrWhenFetched(targetDoc, undefined, () => {
12227
12245
  docsWaitingForRowRefresh.delete(targetDoc.uri);
12228
12246
  refresh();
@@ -12309,6 +12327,10 @@ function attachmentList(dom, subject, div, options = {}) {
12309
12327
  attachmentLeft.appendChild(paperclip);
12310
12328
  const fhandler = options.uploadFolder ? droppedFileHandler : null;
12311
12329
  (0,_dragAndDrop__WEBPACK_IMPORTED_MODULE_6__/* .makeDropTarget */ .DK)(paperclip, droppedURIHandler, fhandler); // beware missing the wire of the paparclip!
12330
+ const paperclipImage = paperclip.querySelector('img');
12331
+ if (paperclipImage) {
12332
+ (0,_dragAndDrop__WEBPACK_IMPORTED_MODULE_6__/* .makeDropTarget */ .DK)(paperclipImage, droppedURIHandler, fhandler);
12333
+ }
12312
12334
  (0,_dragAndDrop__WEBPACK_IMPORTED_MODULE_6__/* .makeDropTarget */ .DK)(attachmentLeft, droppedURIHandler, fhandler); // just the outer won't do it
12313
12335
 
12314
12336
  if (options.uploadFolder) {
@@ -12839,11 +12861,17 @@ const createLinkForURI = (dom, linkDiv, obj) => {
12839
12861
  /* global FileReader alert */
12840
12862
 
12841
12863
  function makeDropTarget(ele, droppedURIHandler, droppedFileHandler) {
12864
+ const normalizeDroppedUris = function (uriText) {
12865
+ return uriText.split('\n').map(uri => uri.trim()).filter(uri => uri && uri[0] !== '#');
12866
+ };
12842
12867
  const dragoverListener = function (e) {
12843
12868
  e.preventDefault(); // Need this; otherwise, drop does not work.
12869
+ e.stopPropagation();
12844
12870
  e.dataTransfer.dropEffect = 'copy';
12845
12871
  };
12846
12872
  const dragenterListener = function (e) {
12873
+ e.preventDefault();
12874
+ e.stopPropagation();
12847
12875
  _debug__WEBPACK_IMPORTED_MODULE_0__/* .log */ .Rm('dragenter event dropEffect: ' + e.dataTransfer.dropEffect);
12848
12876
  if (this.localStyle) {
12849
12877
  // necessary not sure when
@@ -12855,6 +12883,7 @@ function makeDropTarget(ele, droppedURIHandler, droppedFileHandler) {
12855
12883
  _debug__WEBPACK_IMPORTED_MODULE_0__/* .log */ .Rm('dragenter event dropEffect 2: ' + e.dataTransfer.dropEffect);
12856
12884
  };
12857
12885
  const dragleaveListener = function (e) {
12886
+ e.stopPropagation();
12858
12887
  _debug__WEBPACK_IMPORTED_MODULE_0__/* .log */ .Rm('dragleave event dropEffect: ' + e.dataTransfer.dropEffect);
12859
12888
  if (this.savedStyle) {
12860
12889
  this.localStyle = this.savedStyle;
@@ -12864,6 +12893,7 @@ function makeDropTarget(ele, droppedURIHandler, droppedFileHandler) {
12864
12893
  };
12865
12894
  const dropListener = function (e) {
12866
12895
  if (e.preventDefault) e.preventDefault(); // stops the browser from redirecting off to the text.
12896
+ if (e.stopPropagation) e.stopPropagation();
12867
12897
  _debug__WEBPACK_IMPORTED_MODULE_0__/* .log */ .Rm('Drop event. dropEffect: ' + e.dataTransfer.dropEffect);
12868
12898
  _debug__WEBPACK_IMPORTED_MODULE_0__/* .log */ .Rm('Drop event. types: ' + (e.dataTransfer.types ? e.dataTransfer.types.join(', ') : 'NOPE'));
12869
12899
  let uris = null;
@@ -12872,7 +12902,7 @@ function makeDropTarget(ele, droppedURIHandler, droppedFileHandler) {
12872
12902
  for (let t = 0; t < e.dataTransfer.types.length; t++) {
12873
12903
  const type = e.dataTransfer.types[t];
12874
12904
  if (type === 'text/uri-list') {
12875
- uris = e.dataTransfer.getData(type).split('\n'); // @ ignore those starting with #
12905
+ uris = normalizeDroppedUris(e.dataTransfer.getData(type));
12876
12906
  _debug__WEBPACK_IMPORTED_MODULE_0__/* .log */ .Rm('Dropped text/uri-list: ' + uris);
12877
12907
  } else if (type === 'text/plain') {
12878
12908
  text = e.dataTransfer.getData(type);
@@ -12885,13 +12915,14 @@ function makeDropTarget(ele, droppedURIHandler, droppedFileHandler) {
12885
12915
  droppedFileHandler(files);
12886
12916
  }
12887
12917
  }
12888
- if (uris === null && text && text.slice(0, 4) === 'http') {
12889
- uris = text;
12890
- _debug__WEBPACK_IMPORTED_MODULE_0__/* .log */ .Rm('Waring: Poor man\'s drop: using text for URI'); // chrome disables text/uri-list??
12918
+ const trimmedText = text ? text.trim() : '';
12919
+ if (uris === null && trimmedText && trimmedText.slice(0, 4) === 'http') {
12920
+ uris = [trimmedText];
12921
+ _debug__WEBPACK_IMPORTED_MODULE_0__/* .log */ .Rm('Warning: Poor man\'s drop: using text for URI'); // chrome disables text/uri-list??
12891
12922
  }
12892
12923
  } else {
12893
12924
  // ... however, if we're IE, we don't have the .types property, so we'll just get the Text value
12894
- uris = [e.dataTransfer.getData('Text')];
12925
+ uris = normalizeDroppedUris(e.dataTransfer.getData('Text'));
12895
12926
  _debug__WEBPACK_IMPORTED_MODULE_0__/* .log */ .Rm('WARNING non-standard drop event: ' + uris[0]);
12896
12927
  }
12897
12928
  _debug__WEBPACK_IMPORTED_MODULE_0__/* .log */ .Rm('Dropped URI list (2): ' + uris);
@@ -14571,34 +14602,66 @@ function buildCheckboxForm(dom, kb, lab, del, ins, form, dataDoc, tristate) {
14571
14602
  }
14572
14603
  refresh();
14573
14604
  if (!editable) return box;
14605
+ let isUpdating = false; // Prevent concurrent updates on double-click
14606
+
14574
14607
  const boxHandler = function (_e) {
14608
+ if (isUpdating) {
14609
+ return; // Ignore clicks while update is in progress
14610
+ }
14611
+ isUpdating = true;
14612
+ input.disabled = true; // Disable button to provide user feedback
14613
+ let didFinishUpdate = false;
14614
+ const finishUpdate = function () {
14615
+ if (didFinishUpdate) return false;
14616
+ didFinishUpdate = true;
14617
+ isUpdating = false;
14618
+ input.disabled = false;
14619
+ return true;
14620
+ };
14621
+ const showUpdateError = function (errorBody) {
14622
+ colorCarrier.style.color = '#000';
14623
+ colorCarrier.style.backgroundColor = '#fee';
14624
+ box.appendChild((0,_error__WEBPACK_IMPORTED_MODULE_5__/* .errorMessageBlock */ .F)(dom, `Checkbox: Error updating dataDoc from ${input.state} to ${input.newState}:\n\n${errorBody}`));
14625
+ };
14575
14626
  colorCarrier.style.color = '#bbb'; // grey -- not saved yet
14576
14627
  const toDelete = input.state === true ? ins : input.state === false ? del : [];
14577
14628
  input.newState = input.state === null ? true : input.state === true ? false : tristate ? null : true;
14578
14629
  const toInsert = input.newState === true ? ins : input.newState === false ? del : [];
14579
14630
  _debug__WEBPACK_IMPORTED_MODULE_4__/* .log */ .Rm(` Deleting ${toDelete}`);
14580
14631
  _debug__WEBPACK_IMPORTED_MODULE_4__/* .log */ .Rm(` Inserting ${toInsert}`);
14581
- kb.updater.update(toDelete, toInsert, function (uri, success, errorBody) {
14582
- if (!success) {
14583
- if (toDelete.why) {
14584
- const hmmm = kb.holds(toDelete.subject, toDelete.predicate, toDelete.object, toDelete.why);
14585
- if (hmmm) {
14586
- _debug__WEBPACK_IMPORTED_MODULE_4__/* .log */ .Rm(' @@@@@ weird if 409 - does hold statement');
14632
+ try {
14633
+ const updateResult = kb.updater.update(toDelete, toInsert, function (uri, success, errorBody) {
14634
+ if (!finishUpdate()) return;
14635
+ if (!success) {
14636
+ if (toDelete.why) {
14637
+ const hmmm = kb.holds(toDelete.subject, toDelete.predicate, toDelete.object, toDelete.why);
14638
+ if (hmmm) {
14639
+ _debug__WEBPACK_IMPORTED_MODULE_4__/* .log */ .Rm(' @@@@@ weird if 409 - does hold statement');
14640
+ }
14587
14641
  }
14642
+ showUpdateError(errorBody);
14643
+ } else {
14644
+ colorCarrier.style.color = '#000';
14645
+ input.state = input.newState;
14646
+ input.textContent = {
14647
+ true: checkMarkCharacter,
14648
+ false: cancelCharacter,
14649
+ null: dashCharacter
14650
+ }[input.state]; // @@
14588
14651
  }
14589
- colorCarrier.style.color = '#000';
14590
- colorCarrier.style.backgroundColor = '#fee';
14591
- box.appendChild((0,_error__WEBPACK_IMPORTED_MODULE_5__/* .errorMessageBlock */ .F)(dom, `Checkbox: Error updating dataDoc from ${input.state} to ${input.newState}:\n\n${errorBody}`));
14592
- } else {
14593
- colorCarrier.style.color = '#000';
14594
- input.state = input.newState;
14595
- input.textContent = {
14596
- true: checkMarkCharacter,
14597
- false: cancelCharacter,
14598
- null: dashCharacter
14599
- }[input.state]; // @@
14652
+ });
14653
+ if (updateResult && typeof updateResult.then === 'function') {
14654
+ updateResult.catch(function (error) {
14655
+ if (!finishUpdate()) return;
14656
+ showUpdateError(error instanceof Error ? error.message : error);
14657
+ }).finally(function () {
14658
+ finishUpdate();
14659
+ });
14600
14660
  }
14601
- });
14661
+ } catch (error) {
14662
+ finishUpdate();
14663
+ throw error;
14664
+ }
14602
14665
  };
14603
14666
  input.addEventListener('click', boxHandler, false);
14604
14667
  return box;
@@ -23872,18 +23935,6 @@ const oidNist = (suffix) => ({
23872
23935
  });
23873
23936
  //# sourceMappingURL=utils.js.map
23874
23937
 
23875
- /***/ },
23876
-
23877
- /***/ 7697
23878
- (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
23879
-
23880
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
23881
- /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
23882
- /* harmony export */ });
23883
- const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
23884
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ randomUUID });
23885
-
23886
-
23887
23938
  /***/ },
23888
23939
 
23889
23940
  /***/ 3689
@@ -23892,16 +23943,9 @@ const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.
23892
23943
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
23893
23944
  /* harmony export */ A: () => (/* binding */ rng)
23894
23945
  /* harmony export */ });
23895
- let getRandomValues;
23896
23946
  const rnds8 = new Uint8Array(16);
23897
23947
  function rng() {
23898
- if (!getRandomValues) {
23899
- if (typeof crypto === 'undefined' || !crypto.getRandomValues) {
23900
- throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
23901
- }
23902
- getRandomValues = crypto.getRandomValues.bind(crypto);
23903
- }
23904
- return getRandomValues(rnds8);
23948
+ return crypto.getRandomValues(rnds8);
23905
23949
  }
23906
23950
 
23907
23951
 
@@ -23959,15 +24003,19 @@ function stringify(arr, offset = 0) {
23959
24003
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
23960
24004
  /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
23961
24005
  /* harmony export */ });
23962
- /* harmony import */ var _native_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7697);
23963
- /* harmony import */ var _rng_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3689);
23964
- /* harmony import */ var _stringify_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8249);
23965
-
24006
+ /* harmony import */ var _rng_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3689);
24007
+ /* harmony import */ var _stringify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8249);
23966
24008
 
23967
24009
 
24010
+ function v4(options, buf, offset) {
24011
+ if (!buf && !options && crypto.randomUUID) {
24012
+ return crypto.randomUUID();
24013
+ }
24014
+ return _v4(options, buf, offset);
24015
+ }
23968
24016
  function _v4(options, buf, offset) {
23969
24017
  options = options || {};
23970
- const rnds = options.random ?? options.rng?.() ?? (0,_rng_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)();
24018
+ const rnds = options.random ?? options.rng?.() ?? (0,_rng_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)();
23971
24019
  if (rnds.length < 16) {
23972
24020
  throw new Error('Random bytes length must be >= 16');
23973
24021
  }
@@ -23983,13 +24031,7 @@ function _v4(options, buf, offset) {
23983
24031
  }
23984
24032
  return buf;
23985
24033
  }
23986
- return (0,_stringify_js__WEBPACK_IMPORTED_MODULE_2__/* .unsafeStringify */ .k)(rnds);
23987
- }
23988
- function v4(options, buf, offset) {
23989
- if (_native_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.randomUUID && !buf && !options) {
23990
- return _native_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.randomUUID();
23991
- }
23992
- return _v4(options, buf, offset);
24034
+ return (0,_stringify_js__WEBPACK_IMPORTED_MODULE_1__/* .unsafeStringify */ .k)(rnds);
23993
24035
  }
23994
24036
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (v4);
23995
24037