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.
- package/dist/_virtual/_rolldown/runtime.esm.js +1 -2
- package/dist/_virtual/~icons/app/solid-emblem.esm.js +1 -2
- package/dist/_virtual/~icons/lucide/book-user.esm.js +1 -2
- package/dist/_virtual/~icons/lucide/chevron-down.esm.js +1 -2
- package/dist/_virtual/~icons/lucide/circle-user.esm.js +1 -2
- package/dist/_virtual/~icons/lucide/circle-x.esm.js +1 -2
- package/dist/_virtual/~icons/lucide/folder-open.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/folder-open.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/folder-open.esm.js +10 -0
- package/dist/_virtual/~icons/lucide/folder-open.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/folder.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/folder.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/folder.esm.js +10 -0
- package/dist/_virtual/~icons/lucide/folder.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/globe.esm.js +1 -2
- package/dist/_virtual/~icons/lucide/link.esm.js +1 -2
- package/dist/_virtual/~icons/lucide/log-in.esm.js +1 -2
- package/dist/_virtual/~icons/lucide/log-out.esm.js +1 -2
- package/dist/_virtual/~icons/lucide/square-arrow-out-up-right.esm.js +1 -2
- package/dist/_virtual/~icons/lucide/triangle-alert.esm.js +1 -2
- package/dist/_virtual/~icons/lucide/user-round.esm.js +1 -2
- package/dist/_virtual/~icons/lucide/user.esm.js +1 -2
- package/dist/_virtual/~icons/lucide/users.esm.js +1 -2
- package/dist/_virtual/~icons/lucide/x.esm.js +1 -2
- package/dist/_virtual/~icons/svg-spinners/180-ring.esm.js +1 -2
- package/dist/_virtual/~icons/svg-spinners/3-dots-fade.esm.js +1 -2
- package/dist/acl/access-controller.esm.js +1 -2
- package/dist/acl/access-groups.esm.js +1 -2
- package/dist/acl/acl-control.esm.js +1 -2
- package/dist/acl/acl.esm.js +1 -2
- package/dist/acl/add-agent-buttons.esm.js +1 -2
- package/dist/acl/index.esm.js +1 -2
- package/dist/chat/bookmarks.esm.js +1 -2
- package/dist/chat/chatLogic.esm.js +1 -2
- package/dist/chat/dateFolder.esm.js +1 -2
- package/dist/chat/infinite.cjs.js +1 -1
- package/dist/chat/infinite.cjs.js.map +1 -1
- package/dist/chat/infinite.esm.js +2 -3
- package/dist/chat/infinite.esm.js.map +1 -1
- package/dist/chat/keys.esm.js +1 -2
- package/dist/chat/message.esm.js +1 -2
- package/dist/chat/messageTools.esm.js +1 -2
- package/dist/chat/signature.esm.js +0 -1
- package/dist/chunks/{DialogProvider-B7oVYKJO.js → DialogProvider-C89v7x0r.js} +5 -8
- package/dist/chunks/{DialogProvider-B7oVYKJO.js.map → DialogProvider-C89v7x0r.js.map} +1 -1
- package/dist/chunks/{access-control-modal-eOv2-U27.js → access-control-modal-Dcg6-f4V.js} +924 -540
- package/dist/chunks/access-control-modal-Dcg6-f4V.js.map +1 -0
- package/dist/chunks/{account-DpmYJEd-.js → account-D6JK-n7u.js} +16 -21
- package/dist/chunks/{account-DpmYJEd-.js.map → account-D6JK-n7u.js.map} +1 -1
- package/dist/chunks/{auth-Hp8M6TQf.js → auth-B_abPDvH.js} +28 -31
- package/dist/chunks/auth-B_abPDvH.js.map +1 -0
- package/dist/chunks/{avatar-D5rcw6gN.js → avatar-BR3COVSQ.js} +6 -9
- package/dist/chunks/{avatar-D5rcw6gN.js.map → avatar-BR3COVSQ.js.map} +1 -1
- package/dist/chunks/{button-lol95DqR.js → button-D6qO2idW.js} +5 -8
- package/dist/chunks/{button-lol95DqR.js.map → button-D6qO2idW.js.map} +1 -1
- package/dist/chunks/{chevron-down-ujxRg3MD.js → chevron-down-CqUEolao.js} +2 -3
- package/dist/chunks/chevron-down-CqUEolao.js.map +1 -0
- package/dist/chunks/{chunk.UEBQI7VV-OBPERnuy.js → chunk.UEBQI7VV-lcP-fpUk.js} +14 -23
- package/dist/chunks/{chunk.UEBQI7VV-OBPERnuy.js.map → chunk.UEBQI7VV-lcP-fpUk.js.map} +1 -1
- package/dist/chunks/{combobox-Dmv-TZtI.js → combobox-fSTp9qoT.js} +11 -15
- package/dist/chunks/combobox-fSTp9qoT.js.map +1 -0
- package/dist/chunks/{combobox-option-B-Hksiq2.js → combobox-option-DOtGuKel.js} +4 -6
- package/dist/chunks/{combobox-option-B-Hksiq2.js.map → combobox-option-DOtGuKel.js.map} +1 -1
- package/dist/chunks/{components-Bdqizu8x.js → components-C8c2Ucm5.js} +17 -33
- package/dist/chunks/{components-Bdqizu8x.js.map → components-C8c2Ucm5.js.map} +1 -1
- package/dist/chunks/{dialog-DYgcCurb.js → dialog-CgYK767T.js} +8 -10
- package/dist/chunks/{dialog-DYgcCurb.js.map → dialog-CgYK767T.js.map} +1 -1
- package/dist/chunks/{dialog-content-jx08y2Oa.js → dialog-content-DjwRH1ci.js} +4 -6
- package/dist/chunks/{dialog-content-jx08y2Oa.js.map → dialog-content-DjwRH1ci.js.map} +1 -1
- package/dist/chunks/{dialog-footer-Bhl8k1PX.js → dialog-footer-GQWi8lfB.js} +4 -6
- package/dist/chunks/{dialog-footer-Bhl8k1PX.js.map → dialog-footer-GQWi8lfB.js.map} +1 -1
- package/dist/chunks/{dialog-header-Dn6PQzFB.js → dialog-header-c3qOMQfb.js} +4 -6
- package/dist/chunks/{dialog-header-Dn6PQzFB.js.map → dialog-header-c3qOMQfb.js.map} +1 -1
- package/dist/chunks/{dialogs-B6TfxrPt.js → dialogs-BmtLjMzg.js} +5 -7
- package/dist/chunks/{dialogs-B6TfxrPt.js.map → dialogs-BmtLjMzg.js.map} +1 -1
- package/dist/chunks/{dialogs-root-Qiucjj9u.js → dialogs-root-BcQo2XMF.js} +6 -8
- package/dist/chunks/{dialogs-root-Qiucjj9u.js.map → dialogs-root-BcQo2XMF.js.map} +1 -1
- package/dist/chunks/{error-state-DK1x-kNd.js → error-state-BD4_Wrkz.js} +6 -8
- package/dist/chunks/{error-state-DK1x-kNd.js.map → error-state-BD4_Wrkz.js.map} +1 -1
- package/dist/chunks/{guard-FbhNrJGh.js → guard-bTeM7wd7.js} +5 -7
- package/dist/chunks/{guard-FbhNrJGh.js.map → guard-bTeM7wd7.js.map} +1 -1
- package/dist/chunks/{index.esm-N8NHgFUj.js → index.esm-CECfD0e9.js} +3256 -3083
- package/dist/chunks/index.esm-CECfD0e9.js.map +1 -0
- package/dist/chunks/{input-lpqx_k53.js → input-Bz3l514j.js} +5 -7
- package/dist/chunks/{input-lpqx_k53.js.map → input-Bz3l514j.js.map} +1 -1
- package/dist/chunks/{jsonld-Djw57WRt.js → jsonld-CnfzCyCn.js} +4 -5
- package/dist/chunks/{jsonld-Djw57WRt.js.map → jsonld-CnfzCyCn.js.map} +1 -1
- package/dist/chunks/{login-button-DCq4Gi3_.js → login-button-Div4ZT4J.js} +6 -8
- package/dist/chunks/{login-button-DCq4Gi3_.js.map → login-button-Div4ZT4J.js.map} +1 -1
- package/dist/chunks/{logout-button-D3dJrsV4.js → logout-button-D3lqlnCX.js} +6 -8
- package/dist/chunks/{logout-button-D3dJrsV4.js.map → logout-button-D3lqlnCX.js.map} +1 -1
- package/dist/chunks/{menu-RJklqKQE.js → menu-D0k2fkiE.js} +22 -39
- package/dist/chunks/{menu-RJklqKQE.js.map → menu-D0k2fkiE.js.map} +1 -1
- package/dist/chunks/{menu-item-C2e0qj-v.js → menu-item-nfPpH4dN.js} +5 -7
- package/dist/chunks/{menu-item-C2e0qj-v.js.map → menu-item-nfPpH4dN.js.map} +1 -1
- package/dist/chunks/{photo-capture-DEMQNmzb.js → photo-capture-hJaJm4TM.js} +6 -8
- package/dist/chunks/{photo-capture-DEMQNmzb.js.map → photo-capture-hJaJm4TM.js.map} +1 -1
- package/dist/chunks/{photo-capture-modal-C7oESDQq.js → photo-capture-modal-BsHv6wmh.js} +9 -11
- package/dist/chunks/{photo-capture-modal-C7oESDQq.js.map → photo-capture-modal-BsHv6wmh.js.map} +1 -1
- package/dist/chunks/{provider-D9UgRI4G.js → provider-Dcd1NPYx.js} +7 -9
- package/dist/chunks/{provider-D9UgRI4G.js.map → provider-Dcd1NPYx.js.map} +1 -1
- package/dist/chunks/{query-BYu9q8lA.js → query-DjAOg-tk.js} +3 -5
- package/dist/chunks/{query-BYu9q8lA.js.map → query-DjAOg-tk.js.map} +1 -1
- package/dist/chunks/{rdf-form-BLgKdXP2.js → rdf-form-CmPnHKR-.js} +23 -25
- package/dist/chunks/{rdf-form-BLgKdXP2.js.map → rdf-form-CmPnHKR-.js.map} +1 -1
- package/dist/chunks/{rdf-input-DWnDpkXy.js → rdf-input-3AgoeCkJ.js} +48 -51
- package/dist/chunks/{rdf-input-DWnDpkXy.js.map → rdf-input-3AgoeCkJ.js.map} +1 -1
- package/dist/chunks/{select-CnkJMo_K.js → select-ClPkDkGl.js} +7 -10
- package/dist/chunks/{select-CnkJMo_K.js.map → select-ClPkDkGl.js.map} +1 -1
- package/dist/chunks/{select-option-B9HSZiTp.js → select-option-DQan7rcB.js} +4 -6
- package/dist/chunks/{select-option-B9HSZiTp.js.map → select-option-DQan7rcB.js.map} +1 -1
- package/dist/chunks/{show-dialog-eEW5yRBv.js → show-dialog-DAmFslrf.js} +2 -3
- package/dist/chunks/{show-dialog-eEW5yRBv.js.map → show-dialog-DAmFslrf.js.map} +1 -1
- package/dist/chunks/{signup-button-BQ4AWem2.js → signup-button-2fAoS0Nv.js} +6 -8
- package/dist/chunks/{signup-button-BQ4AWem2.js.map → signup-button-2fAoS0Nv.js.map} +1 -1
- package/dist/chunks/{solid-emblem-DNjQSX1z.js → solid-emblem-DwLdkGuO.js} +5 -8
- package/dist/chunks/{solid-emblem-DNjQSX1z.js.map → solid-emblem-DwLdkGuO.js.map} +1 -1
- package/dist/chunks/{src-DQMZZG1B.js → src-Dx7k_VIe.js} +2732 -2782
- package/dist/chunks/src-Dx7k_VIe.js.map +1 -0
- package/dist/chunks/{style-ChFDDB1c.js → style-w0Fl0xnd.js} +25 -29
- package/dist/chunks/{style-ChFDDB1c.js.map → style-w0Fl0xnd.js.map} +1 -1
- package/dist/chunks/{widgets-CVLwnfkU.js → widgets-BWpm5CPx.js} +694 -715
- package/dist/chunks/widgets-BWpm5CPx.js.map +1 -0
- package/dist/chunks/{x-BRRkraZN.js → x-D1JUUSOS.js} +2 -3
- package/dist/chunks/x-D1JUUSOS.js.map +1 -0
- package/dist/components/access-control-modal/AccessControlAddAccess.cjs.js +11 -5
- package/dist/components/access-control-modal/AccessControlAddAccess.cjs.js.map +1 -1
- package/dist/components/access-control-modal/AccessControlAddAccess.d.ts +1 -0
- package/dist/components/access-control-modal/AccessControlAddAccess.d.ts.map +1 -1
- package/dist/components/access-control-modal/AccessControlAddAccess.esm.js +75 -57
- package/dist/components/access-control-modal/AccessControlAddAccess.esm.js.map +1 -1
- package/dist/components/access-control-modal/AccessControlAddAccess.styles.cjs.js +1 -1
- package/dist/components/access-control-modal/AccessControlAddAccess.styles.cjs.js.map +1 -1
- package/dist/components/access-control-modal/AccessControlAddAccess.styles.esm.js +2 -3
- package/dist/components/access-control-modal/AccessControlAddAccess.styles.esm.js.map +1 -1
- package/dist/components/access-control-modal/AccessControlErrors.cjs.js +3 -2
- package/dist/components/access-control-modal/AccessControlErrors.cjs.js.map +1 -1
- package/dist/components/access-control-modal/AccessControlErrors.d.ts +1 -0
- package/dist/components/access-control-modal/AccessControlErrors.d.ts.map +1 -1
- package/dist/components/access-control-modal/AccessControlErrors.esm.js +6 -3
- package/dist/components/access-control-modal/AccessControlErrors.esm.js.map +1 -1
- package/dist/components/access-control-modal/AccessControlErrors.styles.esm.js +1 -2
- package/dist/components/access-control-modal/AccessControlGeneralAccess.cjs.js +5 -3
- package/dist/components/access-control-modal/AccessControlGeneralAccess.cjs.js.map +1 -1
- package/dist/components/access-control-modal/AccessControlGeneralAccess.d.ts +1 -0
- package/dist/components/access-control-modal/AccessControlGeneralAccess.d.ts.map +1 -1
- package/dist/components/access-control-modal/AccessControlGeneralAccess.esm.js +57 -45
- package/dist/components/access-control-modal/AccessControlGeneralAccess.esm.js.map +1 -1
- package/dist/components/access-control-modal/AccessControlGeneralAccess.styles.esm.js +1 -2
- package/dist/components/access-control-modal/AccessControlModal.cjs.js +112 -6
- package/dist/components/access-control-modal/AccessControlModal.cjs.js.map +1 -1
- package/dist/components/access-control-modal/AccessControlModal.d.ts +27 -0
- package/dist/components/access-control-modal/AccessControlModal.d.ts.map +1 -1
- package/dist/components/access-control-modal/AccessControlModal.esm.js +411 -127
- package/dist/components/access-control-modal/AccessControlModal.esm.js.map +1 -1
- package/dist/components/access-control-modal/AccessControlModal.styles.cjs.js +1 -1
- package/dist/components/access-control-modal/AccessControlModal.styles.cjs.js.map +1 -1
- package/dist/components/access-control-modal/AccessControlModal.styles.esm.js +2 -3
- package/dist/components/access-control-modal/AccessControlModal.styles.esm.js.map +1 -1
- package/dist/components/access-control-modal/AccessControlSharedAccess.cjs.js +6 -5
- package/dist/components/access-control-modal/AccessControlSharedAccess.cjs.js.map +1 -1
- package/dist/components/access-control-modal/AccessControlSharedAccess.d.ts +1 -0
- package/dist/components/access-control-modal/AccessControlSharedAccess.d.ts.map +1 -1
- package/dist/components/access-control-modal/AccessControlSharedAccess.esm.js +71 -55
- package/dist/components/access-control-modal/AccessControlSharedAccess.esm.js.map +1 -1
- package/dist/components/access-control-modal/AccessControlSharedAccess.styles.esm.js +1 -2
- package/dist/components/access-control-modal/accessGrantDrafts.cjs.js +1 -1
- package/dist/components/access-control-modal/accessGrantDrafts.cjs.js.map +1 -1
- package/dist/components/access-control-modal/accessGrantDrafts.d.ts.map +1 -1
- package/dist/components/access-control-modal/accessGrantDrafts.esm.js +6 -7
- package/dist/components/access-control-modal/accessGrantDrafts.esm.js.map +1 -1
- package/dist/components/access-control-modal/accessTargetResolver.cjs.js +1 -1
- package/dist/components/access-control-modal/accessTargetResolver.cjs.js.map +1 -1
- package/dist/components/access-control-modal/accessTargetResolver.d.ts +1 -0
- package/dist/components/access-control-modal/accessTargetResolver.d.ts.map +1 -1
- package/dist/components/access-control-modal/accessTargetResolver.esm.js +92 -46
- package/dist/components/access-control-modal/accessTargetResolver.esm.js.map +1 -1
- package/dist/components/access-control-modal/applyAccessChanges.cjs.js +1 -1
- package/dist/components/access-control-modal/applyAccessChanges.cjs.js.map +1 -1
- package/dist/components/access-control-modal/applyAccessChanges.d.ts +4 -2
- package/dist/components/access-control-modal/applyAccessChanges.d.ts.map +1 -1
- package/dist/components/access-control-modal/applyAccessChanges.esm.js +23 -15
- package/dist/components/access-control-modal/applyAccessChanges.esm.js.map +1 -1
- package/dist/components/access-control-modal/buildAccessChanges.esm.js +1 -2
- package/dist/components/access-control-modal/helpers.esm.js +1 -2
- package/dist/components/access-control-modal/index.esm.js +1 -2
- package/dist/components/access-control-modal/types.d.ts +6 -1
- package/dist/components/access-control-modal/types.d.ts.map +1 -1
- package/dist/components/access-control-modal.js +1 -1
- package/dist/components/account/Account.esm.js +1 -2
- package/dist/components/account/Account.styles.esm.js +1 -2
- package/dist/components/account/index.esm.js +1 -2
- package/dist/components/account.js +1 -1
- package/dist/components/avatar/Avatar.esm.js +1 -2
- package/dist/components/avatar/Avatar.styles.esm.js +1 -2
- package/dist/components/avatar/index.esm.js +1 -2
- package/dist/components/avatar.js +1 -1
- package/dist/components/button/Button.esm.js +1 -2
- package/dist/components/button/Button.styles.esm.js +1 -2
- package/dist/components/button/index.esm.js +1 -2
- package/dist/components/button.js +1 -1
- package/dist/components/combobox/Combobox.cjs.js +1 -0
- package/dist/components/combobox/Combobox.cjs.js.map +1 -1
- package/dist/components/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/combobox/Combobox.esm.js +2 -2
- package/dist/components/combobox/Combobox.esm.js.map +1 -1
- package/dist/components/combobox/Combobox.styles.esm.js +1 -2
- package/dist/components/combobox/index.esm.js +1 -2
- package/dist/components/combobox-option/ComboboxOption.esm.js +1 -2
- package/dist/components/combobox-option/index.esm.js +1 -2
- package/dist/components/combobox-option.js +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/dialog/Dialog.esm.js +1 -2
- package/dist/components/dialog/Dialog.styles.esm.js +1 -2
- package/dist/components/dialog/index.esm.js +1 -2
- package/dist/components/dialog-content/DialogContent.esm.js +1 -2
- package/dist/components/dialog-content/DialogContent.styles.esm.js +1 -2
- package/dist/components/dialog-content/index.esm.js +1 -2
- package/dist/components/dialog-content.js +1 -1
- package/dist/components/dialog-footer/DialogFooter.esm.js +1 -2
- package/dist/components/dialog-footer/DialogFooter.styles.esm.js +1 -2
- package/dist/components/dialog-footer/index.esm.js +1 -2
- package/dist/components/dialog-footer.js +1 -1
- package/dist/components/dialog-header/DialogHeader.esm.js +1 -2
- package/dist/components/dialog-header/DialogHeader.styles.esm.js +1 -2
- package/dist/components/dialog-header/index.esm.js +1 -2
- package/dist/components/dialog-header.js +1 -1
- package/dist/components/dialog-provider/DialogProvider.esm.js +1 -2
- package/dist/components/dialog-provider/index.esm.js +1 -2
- package/dist/components/dialog-provider.js +2 -3
- package/dist/components/dialog.js +1 -1
- package/dist/components/dialogs-root/DialogsRoot.esm.js +1 -2
- package/dist/components/dialogs-root/index.esm.js +1 -2
- package/dist/components/dialogs-root.js +1 -1
- package/dist/components/error-state/ErrorState.esm.js +1 -2
- package/dist/components/error-state/ErrorState.styles.esm.js +1 -2
- package/dist/components/error-state.js +1 -1
- package/dist/components/guard/Guard.esm.js +1 -2
- package/dist/components/guard/index.esm.js +1 -2
- package/dist/components/guard.js +1 -1
- package/dist/components/input/Input.esm.js +1 -2
- package/dist/components/input/Input.styles.esm.js +1 -2
- package/dist/components/input/index.esm.js +1 -2
- package/dist/components/input.js +1 -1
- package/dist/components/login-button/LoginButton.esm.js +1 -2
- package/dist/components/login-button/index.esm.js +1 -2
- package/dist/components/login-button.js +1 -1
- package/dist/components/login-modal/LoginModal.esm.js +1 -2
- package/dist/components/login-modal/LoginModal.styles.esm.js +1 -2
- package/dist/components/login-modal/index.esm.js +1 -2
- package/dist/components/login-modal.js +1 -1
- package/dist/components/logout-button/LogoutButton.esm.js +1 -2
- package/dist/components/logout-button/index.esm.js +1 -2
- package/dist/components/logout-button.js +1 -1
- package/dist/components/menu/Menu.esm.js +1 -2
- package/dist/components/menu/Menu.styles.esm.js +1 -2
- package/dist/components/menu/index.esm.js +1 -2
- package/dist/components/menu-item/MenuItem.esm.js +1 -2
- package/dist/components/menu-item/MenuItem.styles.esm.js +1 -2
- package/dist/components/menu-item/index.esm.js +1 -2
- package/dist/components/menu-item.js +1 -1
- package/dist/components/menu.js +1 -1
- package/dist/components/photo-capture/PhotoCapture.esm.js +1 -2
- package/dist/components/photo-capture/index.esm.js +1 -2
- package/dist/components/photo-capture-modal/PhotoCaptureModal.cjs.js +1 -1
- package/dist/components/photo-capture-modal/PhotoCaptureModal.cjs.js.map +1 -1
- package/dist/components/photo-capture-modal/PhotoCaptureModal.esm.js +2 -3
- package/dist/components/photo-capture-modal/PhotoCaptureModal.esm.js.map +1 -1
- package/dist/components/photo-capture-modal/PhotoCaptureModal.styles.esm.js +1 -2
- package/dist/components/photo-capture-modal/index.esm.js +1 -2
- package/dist/components/photo-capture-modal.js +1 -1
- package/dist/components/photo-capture.js +1 -1
- package/dist/components/provider/Provider.esm.js +1 -2
- package/dist/components/provider/index.esm.js +1 -2
- package/dist/components/provider.js +1 -1
- package/dist/components/rdf-form/RDFForm.esm.js +1 -2
- package/dist/components/rdf-form/index.esm.js +1 -2
- package/dist/components/rdf-form.js +1 -1
- package/dist/components/rdf-input/RDFInput.esm.js +1 -2
- package/dist/components/rdf-input/index.esm.js +1 -2
- package/dist/components/rdf-input.js +1 -1
- package/dist/components/select/Select.esm.js +1 -2
- package/dist/components/select/Select.styles.esm.js +1 -2
- package/dist/components/select/index.esm.js +1 -2
- package/dist/components/select-option/SelectOption.esm.js +1 -2
- package/dist/components/select-option/index.esm.js +1 -2
- package/dist/components/select-option.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/signup-button/SignupButton.esm.js +1 -2
- package/dist/components/signup-button/index.esm.js +1 -2
- package/dist/components/signup-button.js +1 -1
- package/dist/components/solid-emblem/SolidEmblem.esm.js +1 -2
- package/dist/components/solid-emblem/SolidEmblem.styles.esm.js +1 -2
- package/dist/components/solid-emblem/index.esm.js +1 -2
- package/dist/components/solid-emblem.js +1 -1
- package/dist/components.js +28 -28
- package/dist/create/create.esm.js +1 -2
- package/dist/create/index.esm.js +1 -2
- package/dist/create/types.esm.js +1 -2
- package/dist/footer/index.esm.js +1 -2
- package/dist/header/empty-profile.esm.js +1 -2
- package/dist/header/index.esm.js +1 -2
- package/dist/index.esm.js +1 -2
- package/dist/index.js +8 -8
- package/dist/lib/auth/Account.esm.js +1 -2
- package/dist/lib/auth/NoopAuth.esm.js +1 -2
- package/dist/lib/auth/SolidAuth.esm.js +1 -2
- package/dist/lib/auth/context.esm.js +1 -2
- package/dist/lib/code-editor/CodeEditor.esm.js +1 -2
- package/dist/lib/components/decorators.esm.js +1 -2
- package/dist/lib/components/dialog-component/DialogComponent.esm.js +1 -2
- package/dist/lib/components/form-control-component/FormControlComponent.esm.js +1 -2
- package/dist/lib/components/ids.esm.js +1 -2
- package/dist/lib/components/traits/DialogTrait.esm.js +1 -2
- package/dist/lib/components/traits/FormControlTrait.esm.js +1 -2
- package/dist/lib/components/web-component/WebComponent.esm.js +1 -2
- package/dist/lib/components/web-component/WebComponent.styles.esm.js +1 -2
- package/dist/lib/debug.esm.js +1 -2
- package/dist/lib/dialogs/Dialog.esm.js +1 -2
- package/dist/lib/dialogs/context.esm.js +1 -2
- package/dist/lib/dialogs/events/close-dialog.esm.js +1 -2
- package/dist/lib/dialogs/events/show-dialog.esm.js +1 -2
- package/dist/lib/dialogs/helpers.esm.js +1 -2
- package/dist/lib/file-explorer/context.esm.js +1 -2
- package/dist/lib/forms/fieldParams.esm.js +1 -2
- package/dist/lib/forms/rdfFormsHelper.esm.js +1 -2
- package/dist/lib/forms/store/NoopStore.esm.js +1 -2
- package/dist/lib/forms/store/StoreContext.esm.js +1 -2
- package/dist/lib/iconBase.esm.js +1 -2
- package/dist/lib/log.esm.js +1 -2
- package/dist/lib/messageArea.esm.js +1 -2
- package/dist/lib/newperson.esm.js +1 -2
- package/dist/lib/ns.esm.js +1 -2
- package/dist/lib/pad.esm.js +1 -2
- package/dist/lib/participation.esm.js +1 -2
- package/dist/lib/preferences.esm.js +1 -2
- package/dist/lib/style.esm.js +1 -2
- package/dist/lib/styleConstants.esm.js +1 -2
- package/dist/lib/style_multiSelect.esm.js +1 -2
- package/dist/lib/table.esm.js +1 -2
- package/dist/lib/tabs.esm.js +1 -2
- package/dist/lib/timing.esm.js +1 -2
- package/dist/lib/values.esm.js +1 -2
- package/dist/loader.js +8 -8
- package/dist/login/login.esm.js +1 -2
- package/dist/matrix/index.esm.js +1 -2
- package/dist/matrix/matrix.esm.js +1 -2
- package/dist/media/index.esm.js +1 -2
- package/dist/media/media-capture.esm.js +1 -2
- package/dist/signup/config-default.esm.js +1 -2
- package/dist/signup/signup.esm.js +1 -2
- package/dist/solid-ui.js +243 -126
- package/dist/solid-ui.min.js +243 -126
- package/dist/solid-ui.min.js.map +1 -1
- package/dist/utils/headerFooterHelpers.esm.js +1 -2
- package/dist/utils/index.esm.js +1 -2
- package/dist/utils/keyHelpers/accessData.esm.js +1 -2
- package/dist/utils/keyHelpers/acl.esm.js +1 -2
- package/dist/utils/keyHelpers/otherHelpers.esm.js +1 -2
- package/dist/utils/label.esm.js +1 -2
- package/dist/widgets/buttons/iconLinks.esm.js +1 -2
- package/dist/widgets/buttons.esm.js +1 -2
- package/dist/widgets/dragAndDrop.esm.js +1 -2
- package/dist/widgets/error.esm.js +1 -2
- package/dist/widgets/forms/autocomplete/autocompleteBar.esm.js +1 -2
- package/dist/widgets/forms/autocomplete/autocompleteField.esm.js +1 -2
- package/dist/widgets/forms/autocomplete/autocompletePicker.cjs.js +1 -1
- package/dist/widgets/forms/autocomplete/autocompletePicker.cjs.js.map +1 -1
- package/dist/widgets/forms/autocomplete/autocompletePicker.esm.js +2 -3
- package/dist/widgets/forms/autocomplete/autocompletePicker.esm.js.map +1 -1
- package/dist/widgets/forms/autocomplete/language.esm.js +1 -2
- package/dist/widgets/forms/autocomplete/publicData.esm.js +1 -2
- package/dist/widgets/forms/basic.esm.js +1 -2
- package/dist/widgets/forms/fieldFunction.esm.js +1 -2
- package/dist/widgets/forms/fieldParams.esm.js +1 -2
- package/dist/widgets/forms/formStyle.esm.js +1 -2
- package/dist/widgets/forms.esm.js +1 -2
- package/dist/widgets/index.esm.js +1 -2
- package/dist/widgets/multiSelect.esm.js +1 -2
- package/dist/widgets/peoplePicker.esm.js +1 -2
- package/dist/widgets/widgetHelpers.esm.js +1 -2
- package/package.json +2 -2
- package/dist/chunks/access-control-modal-eOv2-U27.js.map +0 -1
- package/dist/chunks/auth-Hp8M6TQf.js.map +0 -1
- package/dist/chunks/chevron-down-ujxRg3MD.js.map +0 -1
- package/dist/chunks/combobox-Dmv-TZtI.js.map +0 -1
- package/dist/chunks/index.esm-N8NHgFUj.js.map +0 -1
- package/dist/chunks/src-DQMZZG1B.js.map +0 -1
- package/dist/chunks/widgets-CVLwnfkU.js.map +0 -1
- 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
|
-
|
|
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
|
package/dist/utils/index.esm.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
package/dist/utils/label.esm.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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{
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|