solid-ui 3.1.3-6 → 3.1.3-7
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/~icons/lucide/chevron-down.cjs.js +1 -1
- package/dist/_virtual/~icons/lucide/chevron-down.esm.js +1 -0
- package/dist/_virtual/~icons/lucide/circle-user.cjs.js +1 -1
- package/dist/_virtual/~icons/lucide/circle-user.esm.js +1 -0
- package/dist/_virtual/~icons/lucide/log-in.cjs.js +1 -1
- package/dist/_virtual/~icons/lucide/log-in.esm.js +1 -0
- package/dist/_virtual/~icons/lucide/log-out.cjs.js +1 -1
- package/dist/_virtual/~icons/lucide/log-out.esm.js +1 -0
- package/dist/_virtual/~icons/lucide/user.cjs.js +1 -1
- package/dist/_virtual/~icons/lucide/user.esm.js +1 -0
- package/dist/_virtual/~icons/lucide/x.cjs.js +1 -1
- package/dist/_virtual/~icons/lucide/x.esm.js +1 -0
- package/dist/_virtual/~icons/svg-spinners/180-ring.cjs.js +1 -1
- package/dist/_virtual/~icons/svg-spinners/180-ring.esm.js +1 -0
- package/dist/acl/access-controller.cjs.js +1 -1
- package/dist/acl/access-controller.cjs.js.map +1 -1
- package/dist/acl/access-controller.esm.js.map +1 -1
- package/dist/acl/access-groups.cjs.js.map +1 -1
- package/dist/acl/access-groups.esm.js.map +1 -1
- package/dist/acl/acl-control.cjs.js +1 -1
- package/dist/acl/acl-control.cjs.js.map +1 -1
- package/dist/acl/acl-control.esm.js +1 -1
- package/dist/acl/acl-control.esm.js.map +1 -1
- package/dist/acl/acl.cjs.js.map +1 -1
- package/dist/acl/acl.esm.js.map +1 -1
- package/dist/acl/add-agent-buttons.cjs.js.map +1 -1
- package/dist/acl/add-agent-buttons.esm.js.map +1 -1
- package/dist/chat/bookmarks.cjs.js +1 -1
- package/dist/chat/bookmarks.cjs.js.map +1 -1
- package/dist/chat/bookmarks.esm.js +1 -1
- package/dist/chat/bookmarks.esm.js.map +1 -1
- package/dist/chat/chatLogic.cjs.js.map +1 -1
- package/dist/chat/chatLogic.esm.js.map +1 -1
- package/dist/chat/dateFolder.cjs.js +1 -1
- package/dist/chat/dateFolder.cjs.js.map +1 -1
- package/dist/chat/dateFolder.esm.js +1 -1
- package/dist/chat/dateFolder.esm.js.map +1 -1
- package/dist/chat/infinite.cjs.js +1 -1
- package/dist/chat/infinite.cjs.js.map +1 -1
- package/dist/chat/infinite.esm.js +1 -1
- package/dist/chat/infinite.esm.js.map +1 -1
- package/dist/chat/keys.cjs.js +1 -1
- package/dist/chat/keys.cjs.js.map +1 -1
- package/dist/chat/keys.esm.js +1 -1
- package/dist/chat/keys.esm.js.map +1 -1
- package/dist/chat/message.cjs.js +1 -1
- package/dist/chat/message.cjs.js.map +1 -1
- package/dist/chat/message.esm.js +24 -24
- package/dist/chat/message.esm.js.map +1 -1
- package/dist/chat/messageTools.cjs.js.map +1 -1
- package/dist/chat/messageTools.esm.js.map +1 -1
- package/dist/chat/signature.cjs.js +1 -1
- package/dist/chat/signature.cjs.js.map +1 -1
- package/dist/chat/signature.esm.js +1 -1
- package/dist/chunks/{DialogProvider-DphduSXG.js → DialogProvider-Bt65G0Tk.js} +4 -4
- package/dist/chunks/DialogProvider-Bt65G0Tk.js.map +1 -0
- package/dist/chunks/{account-CFhrB0LO.js → account-BZ2rYQhV.js} +12 -12
- package/dist/chunks/account-BZ2rYQhV.js.map +1 -0
- package/dist/chunks/{auth-Cpf3HYqF.js → auth-RHyQ2iIl.js} +10 -10
- package/dist/chunks/{auth-Cpf3HYqF.js.map → auth-RHyQ2iIl.js.map} +1 -1
- package/dist/chunks/{avatar-D281qln0.js → avatar-Jx8xm2Op.js} +5 -5
- package/dist/chunks/avatar-Jx8xm2Op.js.map +1 -0
- package/dist/chunks/{button-DbKYu6-r.js → button-0s0lZdxm.js} +2 -2
- package/dist/chunks/{button-DbKYu6-r.js.map → button-0s0lZdxm.js.map} +1 -1
- package/dist/chunks/chunk.K442ELDU-TtQSV9g1.js +1516 -0
- package/dist/chunks/chunk.K442ELDU-TtQSV9g1.js.map +1 -0
- package/dist/chunks/combobox-Cxi8xUMn.js +473 -0
- package/dist/chunks/combobox-Cxi8xUMn.js.map +1 -0
- package/dist/chunks/{combobox-option-Ck0mu4Gc.js → combobox-option-DiR3VpyT.js} +2 -2
- package/dist/chunks/{combobox-option-Ck0mu4Gc.js.map → combobox-option-DiR3VpyT.js.map} +1 -1
- package/dist/chunks/{components-BlEGdx4i.js → components-C1LEhsaK.js} +5 -9
- package/dist/chunks/components-C1LEhsaK.js.map +1 -0
- package/dist/chunks/{context-DJ_8r7Oc.js → context-uE5jJlS0.js} +2 -2
- package/dist/chunks/{context-DJ_8r7Oc.js.map → context-uE5jJlS0.js.map} +1 -1
- package/dist/chunks/decorators-BiCkPd_3.js.map +1 -1
- package/dist/chunks/{dialog-DlBtmOm6.js → dialog-BAzrHJ8w.js} +6 -6
- package/dist/chunks/dialog-BAzrHJ8w.js.map +1 -0
- package/dist/chunks/{dialog-content-CMeH_BD7.js → dialog-content-fdJrkCyB.js} +2 -2
- package/dist/chunks/{dialog-content-CMeH_BD7.js.map → dialog-content-fdJrkCyB.js.map} +1 -1
- package/dist/chunks/{dialog-footer-D0zzIMlx.js → dialog-footer-Bs_p2Nn9.js} +2 -2
- package/dist/chunks/{dialog-footer-D0zzIMlx.js.map → dialog-footer-Bs_p2Nn9.js.map} +1 -1
- package/dist/chunks/{dialog-header-DeC1iiLD.js → dialog-header-CWIAAoDo.js} +2 -2
- package/dist/chunks/{dialog-header-DeC1iiLD.js.map → dialog-header-CWIAAoDo.js.map} +1 -1
- package/dist/chunks/{dialogs-root-BcUcRuAt.js → dialogs-root-Cv932Aqm.js} +3 -3
- package/dist/chunks/{dialogs-root-BcUcRuAt.js.map → dialogs-root-Cv932Aqm.js.map} +1 -1
- package/dist/chunks/{footer-Bxe4WPgl.js → footer-D64T6XLO.js} +3 -3
- package/dist/chunks/{footer-Bxe4WPgl.js.map → footer-D64T6XLO.js.map} +1 -1
- package/dist/chunks/{guard-Da3znlJI.js → guard-CjUBGVDk.js} +4 -4
- package/dist/chunks/{guard-Da3znlJI.js.map → guard-CjUBGVDk.js.map} +1 -1
- package/dist/chunks/{header-Bqd2CEK3.js → header-COBaJDdB.js} +4 -4
- package/dist/chunks/{header-Bqd2CEK3.js.map → header-COBaJDdB.js.map} +1 -1
- package/dist/chunks/{headerFooterHelpers-5LYv-0Rt.js → headerFooterHelpers-7O_ln1QD.js} +2 -2
- package/dist/chunks/{headerFooterHelpers-5LYv-0Rt.js.map → headerFooterHelpers-7O_ln1QD.js.map} +1 -1
- package/dist/chunks/{input-Bkzi4zSV.js → input-BF224Jid.js} +2 -2
- package/dist/chunks/{input-Bkzi4zSV.js.map → input-BF224Jid.js.map} +1 -1
- package/dist/chunks/{jsonld-DZG2v1pE.js → jsonld-DRZuoyoU.js} +54 -54
- package/dist/chunks/{jsonld-DZG2v1pE.js.map → jsonld-DRZuoyoU.js.map} +1 -1
- package/dist/chunks/lit-C4H1jI4q.js.map +1 -1
- package/dist/chunks/{login-button-C603hM0G.js → login-button-DPeMi00d.js} +5 -5
- package/dist/chunks/{login-button-C603hM0G.js.map → login-button-DPeMi00d.js.map} +1 -1
- package/dist/chunks/{logout-button-Cxzpq-C3.js → logout-button-CbiLE7jO.js} +5 -5
- package/dist/chunks/{logout-button-Cxzpq-C3.js.map → logout-button-CbiLE7jO.js.map} +1 -1
- package/dist/chunks/{menu-aQiqq1ET.js → menu-DNcuV-1J.js} +183 -1693
- package/dist/chunks/menu-DNcuV-1J.js.map +1 -0
- package/dist/chunks/{menu-item-DBy4o-M4.js → menu-item-Ck0l-uEI.js} +2 -2
- package/dist/chunks/{menu-item-DBy4o-M4.js.map → menu-item-Ck0l-uEI.js.map} +1 -1
- package/dist/chunks/photo-capture-tiBsdSbA.js.map +1 -1
- package/dist/chunks/{provider-DZmdgerD.js → provider-C4eSzopG.js} +5 -5
- package/dist/chunks/{provider-DZmdgerD.js.map → provider-C4eSzopG.js.map} +1 -1
- package/dist/chunks/{select-wczAzbZF.js → select-D8dW53pr.js} +2 -2
- package/dist/chunks/{select-wczAzbZF.js.map → select-D8dW53pr.js.map} +1 -1
- package/dist/chunks/{select-option-hd_d1RNj.js → select-option-B-6ULCpQ.js} +2 -2
- package/dist/chunks/{select-option-hd_d1RNj.js.map → select-option-B-6ULCpQ.js.map} +1 -1
- package/dist/chunks/{signup-button-CsRaOUI4.js → signup-button-BfIxbpwa.js} +5 -5
- package/dist/chunks/{signup-button-CsRaOUI4.js.map → signup-button-BfIxbpwa.js.map} +1 -1
- package/dist/chunks/{solid-logic.esm-7q6hmfIF.js → solid-logic.esm-T70qfHAr.js} +2521 -2504
- package/dist/chunks/solid-logic.esm-T70qfHAr.js.map +1 -0
- package/dist/chunks/{src-BOU-JwWx.js → src-Bx4GAnWq.js} +16 -16
- package/dist/chunks/{src-BOU-JwWx.js.map → src-Bx4GAnWq.js.map} +1 -1
- package/dist/components/account/Account.cjs.js +1 -1
- package/dist/components/account/Account.cjs.js.map +1 -1
- package/dist/components/account/Account.esm.js +1 -1
- package/dist/components/account/Account.styles.cjs.js +1 -1
- package/dist/components/account/Account.styles.cjs.js.map +1 -1
- package/dist/components/account/Account.styles.esm.js +1 -1
- package/dist/components/account/Account.styles.esm.js.map +1 -1
- package/dist/components/account/index.cjs.js +1 -1
- package/dist/components/account/index.esm.js +1 -1
- package/dist/components/account.js +1 -1
- package/dist/components/avatar/Avatar.cjs.js +1 -1
- package/dist/components/avatar/Avatar.cjs.js.map +1 -1
- package/dist/components/avatar/Avatar.esm.js +1 -1
- package/dist/components/avatar/Avatar.styles.cjs.js +1 -1
- package/dist/components/avatar/Avatar.styles.cjs.js.map +1 -1
- package/dist/components/avatar/Avatar.styles.esm.js +1 -1
- package/dist/components/avatar/Avatar.styles.esm.js.map +1 -1
- package/dist/components/avatar/index.cjs.js +1 -1
- package/dist/components/avatar/index.esm.js +1 -1
- package/dist/components/avatar.js +1 -1
- package/dist/components/button/Button.cjs.js +1 -1
- package/dist/components/button/Button.cjs.js.map +1 -1
- package/dist/components/button/Button.esm.js +1 -1
- package/dist/components/button/Button.esm.js.map +1 -1
- package/dist/components/button/index.cjs.js +1 -1
- package/dist/components/button/index.esm.js +3 -3
- package/dist/components/button.js +1 -1
- package/dist/components/combobox/Combobox.cjs.js +57 -25
- package/dist/components/combobox/Combobox.cjs.js.map +1 -1
- package/dist/components/combobox/Combobox.d.ts +22 -3
- package/dist/components/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/combobox/Combobox.esm.js +220 -101
- package/dist/components/combobox/Combobox.esm.js.map +1 -1
- package/dist/components/combobox/Combobox.styles.cjs.js +1 -1
- package/dist/components/combobox/Combobox.styles.cjs.js.map +1 -1
- package/dist/components/combobox/Combobox.styles.esm.js +1 -1
- package/dist/components/combobox/Combobox.styles.esm.js.map +1 -1
- package/dist/components/combobox/index.cjs.js +1 -1
- package/dist/components/combobox/index.esm.js +1 -1
- package/dist/components/combobox-option/ComboboxOption.cjs.js +1 -1
- package/dist/components/combobox-option/ComboboxOption.cjs.js.map +1 -1
- package/dist/components/combobox-option/ComboboxOption.esm.js +1 -1
- package/dist/components/combobox-option/index.cjs.js +1 -1
- package/dist/components/combobox-option/index.esm.js +1 -1
- package/dist/components/combobox-option.js +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/dialog/Dialog.cjs.js +2 -2
- package/dist/components/dialog/Dialog.cjs.js.map +1 -1
- package/dist/components/dialog/Dialog.d.ts.map +1 -1
- package/dist/components/dialog/Dialog.esm.js +2 -2
- package/dist/components/dialog/Dialog.esm.js.map +1 -1
- package/dist/components/dialog/index.cjs.js +1 -1
- package/dist/components/dialog/index.esm.js +1 -1
- package/dist/components/dialog-content/DialogContent.cjs.js +1 -1
- package/dist/components/dialog-content/DialogContent.cjs.js.map +1 -1
- package/dist/components/dialog-content/DialogContent.esm.js +1 -1
- package/dist/components/dialog-content/DialogContent.esm.js.map +1 -1
- package/dist/components/dialog-content/index.cjs.js +1 -1
- package/dist/components/dialog-content/index.esm.js +1 -1
- package/dist/components/dialog-content.js +1 -1
- package/dist/components/dialog-footer/DialogFooter.cjs.js +1 -1
- package/dist/components/dialog-footer/DialogFooter.cjs.js.map +1 -1
- package/dist/components/dialog-footer/DialogFooter.esm.js +1 -1
- package/dist/components/dialog-footer/DialogFooter.esm.js.map +1 -1
- package/dist/components/dialog-footer/index.cjs.js +1 -1
- package/dist/components/dialog-footer/index.esm.js +1 -1
- package/dist/components/dialog-footer.js +1 -1
- package/dist/components/dialog-header/DialogHeader.cjs.js +1 -1
- package/dist/components/dialog-header/DialogHeader.cjs.js.map +1 -1
- package/dist/components/dialog-header/DialogHeader.esm.js +1 -1
- package/dist/components/dialog-header/DialogHeader.esm.js.map +1 -1
- package/dist/components/dialog-header/index.cjs.js +1 -1
- package/dist/components/dialog-header/index.esm.js +1 -1
- package/dist/components/dialog-header.js +1 -1
- package/dist/components/dialog-provider/DialogProvider.cjs.js +1 -1
- package/dist/components/dialog-provider/DialogProvider.cjs.js.map +1 -1
- package/dist/components/dialog-provider/DialogProvider.esm.js +2 -2
- package/dist/components/dialog-provider/DialogProvider.esm.js.map +1 -1
- package/dist/components/dialog-provider/index.cjs.js +1 -1
- package/dist/components/dialog-provider/index.esm.js +1 -1
- package/dist/components/dialog-provider.js +1 -1
- package/dist/components/dialog.js +1 -1
- package/dist/components/dialogs-root/DialogsRoot.cjs.js +1 -1
- package/dist/components/dialogs-root/DialogsRoot.cjs.js.map +1 -1
- package/dist/components/dialogs-root/DialogsRoot.esm.js +1 -1
- package/dist/components/dialogs-root/index.cjs.js +1 -1
- package/dist/components/dialogs-root/index.esm.js +1 -1
- package/dist/components/dialogs-root.js +1 -1
- package/dist/components/footer.js +1 -1
- package/dist/components/guard/Guard.cjs.js +1 -1
- package/dist/components/guard/Guard.cjs.js.map +1 -1
- package/dist/components/guard/Guard.esm.js +1 -1
- package/dist/components/guard/index.cjs.js +1 -1
- package/dist/components/guard/index.esm.js +1 -1
- package/dist/components/guard.js +1 -1
- package/dist/components/header.js +1 -1
- package/dist/components/input/Input.cjs.js +1 -1
- package/dist/components/input/Input.cjs.js.map +1 -1
- package/dist/components/input/Input.esm.js +1 -1
- package/dist/components/input/index.cjs.js +1 -1
- package/dist/components/input/index.esm.js +1 -1
- package/dist/components/input.js +1 -1
- package/dist/components/login-button/LoginButton.cjs.js +1 -1
- package/dist/components/login-button/LoginButton.cjs.js.map +1 -1
- package/dist/components/login-button/LoginButton.esm.js +1 -1
- package/dist/components/login-button/index.cjs.js +1 -1
- package/dist/components/login-button/index.esm.js +1 -1
- package/dist/components/login-button.js +1 -1
- package/dist/components/login-modal/LoginModal.cjs.js +1 -1
- package/dist/components/login-modal/LoginModal.cjs.js.map +1 -1
- package/dist/components/login-modal/LoginModal.esm.js +1 -1
- package/dist/components/login-modal/index.cjs.js +1 -1
- package/dist/components/login-modal/index.esm.js +1 -1
- package/dist/components/login-modal.js +1 -1
- package/dist/components/logout-button/LogoutButton.cjs.js +1 -1
- package/dist/components/logout-button/LogoutButton.cjs.js.map +1 -1
- package/dist/components/logout-button/LogoutButton.esm.js +1 -1
- package/dist/components/logout-button/index.cjs.js +1 -1
- package/dist/components/logout-button/index.esm.js +1 -1
- package/dist/components/logout-button.js +1 -1
- package/dist/components/menu/Menu.cjs.js +1 -1
- package/dist/components/menu/Menu.cjs.js.map +1 -1
- package/dist/components/menu/Menu.esm.js +1 -1
- package/dist/components/menu/Menu.esm.js.map +1 -1
- package/dist/components/menu/index.cjs.js +1 -1
- package/dist/components/menu/index.esm.js +1 -1
- package/dist/components/menu-item/MenuItem.cjs.js +1 -1
- package/dist/components/menu-item/MenuItem.cjs.js.map +1 -1
- package/dist/components/menu-item/MenuItem.esm.js +1 -1
- package/dist/components/menu-item/index.cjs.js +1 -1
- package/dist/components/menu-item/index.esm.js +1 -1
- package/dist/components/menu-item.js +1 -1
- package/dist/components/menu.js +1 -1
- package/dist/components/provider/Provider.cjs.js +1 -1
- package/dist/components/provider/Provider.cjs.js.map +1 -1
- package/dist/components/provider/Provider.esm.js +1 -1
- package/dist/components/provider/index.cjs.js +1 -1
- package/dist/components/provider/index.esm.js +1 -1
- package/dist/components/provider.js +1 -1
- package/dist/components/select/Select.cjs.js +1 -1
- package/dist/components/select/Select.cjs.js.map +1 -1
- package/dist/components/select/Select.esm.js +1 -1
- package/dist/components/select/Select.esm.js.map +1 -1
- package/dist/components/select/index.cjs.js +1 -1
- package/dist/components/select/index.esm.js +1 -1
- package/dist/components/select-option/SelectOption.cjs.js +1 -1
- package/dist/components/select-option/SelectOption.cjs.js.map +1 -1
- package/dist/components/select-option/SelectOption.esm.js +1 -1
- package/dist/components/select-option/index.cjs.js +1 -1
- package/dist/components/select-option/index.esm.js +1 -1
- package/dist/components/select-option.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/signup-button/SignupButton.cjs.js +1 -1
- package/dist/components/signup-button/SignupButton.cjs.js.map +1 -1
- package/dist/components/signup-button/SignupButton.esm.js +1 -1
- package/dist/components/signup-button/index.cjs.js +1 -1
- package/dist/components/signup-button/index.esm.js +1 -1
- package/dist/components/signup-button.js +1 -1
- package/dist/components.js +23 -23
- package/dist/create/create.cjs.js.map +1 -1
- package/dist/create/create.esm.js.map +1 -1
- package/dist/create/index.cjs.js.map +1 -1
- package/dist/footer/index.cjs.js +1 -1
- package/dist/footer/index.esm.js +1 -1
- package/dist/header/index.cjs.js +1 -1
- package/dist/header/index.cjs.js.map +1 -1
- package/dist/header/index.esm.js +1 -1
- package/dist/header/index.esm.js.map +1 -1
- package/dist/index.js +5 -5
- package/dist/lib/auth/SolidAuth.cjs.js.map +1 -1
- package/dist/lib/auth/SolidAuth.esm.js.map +1 -1
- package/dist/lib/auth/context.cjs.js.map +1 -1
- package/dist/lib/auth/index.cjs.js +1 -1
- package/dist/lib/auth/index.esm.js +5 -4
- package/dist/lib/components/ids.cjs.js.map +1 -1
- package/dist/lib/components/ids.esm.js.map +1 -1
- package/dist/lib/components/index.cjs.js +1 -1
- package/dist/lib/components/index.esm.js +6 -5
- package/dist/lib/components/traits/DialogTrait.cjs.js.map +1 -1
- package/dist/lib/components/traits/DialogTrait.esm.js.map +1 -1
- package/dist/lib/components/traits/InputTrait.cjs.js +1 -1
- package/dist/lib/components/traits/InputTrait.cjs.js.map +1 -1
- package/dist/lib/components/traits/InputTrait.d.ts +1 -0
- package/dist/lib/components/traits/InputTrait.d.ts.map +1 -1
- package/dist/lib/components/traits/InputTrait.esm.js +3 -2
- package/dist/lib/components/traits/InputTrait.esm.js.map +1 -1
- package/dist/lib/components/traits/index.cjs.js +1 -1
- package/dist/lib/components/traits/index.esm.js +3 -2
- package/dist/lib/components/web-component/WebComponent.cjs.js +1 -1
- package/dist/lib/components/web-component/WebComponent.cjs.js.map +1 -1
- package/dist/lib/components/web-component/WebComponent.d.ts.map +1 -1
- package/dist/lib/components/web-component/WebComponent.esm.js +1 -6
- package/dist/lib/components/web-component/WebComponent.esm.js.map +1 -1
- package/dist/lib/components/web-component/WebComponent.styles.cjs.js.map +1 -1
- package/dist/lib/components/web-component/WebComponent.styles.esm.js.map +1 -1
- package/dist/lib/components/web-component/index.cjs.js +1 -1
- package/dist/lib/components/web-component/index.esm.js +2 -1
- package/dist/lib/dialogs/context.cjs.js.map +1 -1
- package/dist/lib/dialogs/index.cjs.js +1 -1
- package/dist/lib/dialogs/index.esm.js +6 -5
- package/dist/lib/log.cjs.js +1 -1
- package/dist/lib/log.cjs.js.map +1 -1
- package/dist/lib/log.esm.js +1 -1
- package/dist/lib/log.esm.js.map +1 -1
- package/dist/lib/messageArea.cjs.js.map +1 -1
- package/dist/lib/messageArea.esm.js.map +1 -1
- package/dist/lib/ns.cjs.js.map +1 -1
- package/dist/lib/pad.cjs.js +1 -1
- package/dist/lib/pad.cjs.js.map +1 -1
- package/dist/lib/pad.esm.js +1 -1
- package/dist/lib/pad.esm.js.map +1 -1
- package/dist/lib/participation.cjs.js.map +1 -1
- package/dist/lib/participation.esm.js.map +1 -1
- package/dist/lib/preferences.cjs.js +1 -1
- package/dist/lib/preferences.cjs.js.map +1 -1
- package/dist/lib/preferences.esm.js +1 -1
- package/dist/lib/preferences.esm.js.map +1 -1
- package/dist/lib/table.cjs.js.map +1 -1
- package/dist/lib/table.esm.js.map +1 -1
- package/dist/lib/tabs.cjs.js +1 -1
- package/dist/lib/tabs.cjs.js.map +1 -1
- package/dist/lib/tabs.esm.js +1 -1
- package/dist/lib/tabs.esm.js.map +1 -1
- package/dist/loader.js +5 -5
- package/dist/login/login.cjs.js +1 -1
- package/dist/login/login.cjs.js.map +1 -1
- package/dist/login/login.esm.js +1 -1
- package/dist/login/login.esm.js.map +1 -1
- package/dist/matrix/index.cjs.js.map +1 -1
- package/dist/matrix/matrix.cjs.js.map +1 -1
- package/dist/matrix/matrix.esm.js.map +1 -1
- package/dist/media/media-capture.cjs.js.map +1 -1
- package/dist/media/media-capture.esm.js.map +1 -1
- package/dist/signup/signup.cjs.js.map +1 -1
- package/dist/signup/signup.esm.js.map +1 -1
- package/dist/solid-ui.js +307 -275
- package/dist/solid-ui.min.js +307 -275
- package/dist/solid-ui.min.js.map +1 -1
- package/dist/utils/headerFooterHelpers.cjs.js.map +1 -1
- package/dist/utils/headerFooterHelpers.esm.js.map +1 -1
- package/dist/utils/index.cjs.js +2 -2
- package/dist/utils/index.cjs.js.map +1 -1
- package/dist/utils/index.esm.js +1 -1
- package/dist/utils/index.esm.js.map +1 -1
- package/dist/utils/keyHelpers/accessData.cjs.js +1 -1
- package/dist/utils/keyHelpers/accessData.cjs.js.map +1 -1
- package/dist/utils/keyHelpers/accessData.esm.js +1 -1
- package/dist/utils/keyHelpers/accessData.esm.js.map +1 -1
- package/dist/utils/keyHelpers/acl.cjs.js.map +1 -1
- package/dist/utils/keyHelpers/acl.esm.js.map +1 -1
- package/dist/utils/keyHelpers/otherHelpers.cjs.js.map +1 -1
- package/dist/utils/keyHelpers/otherHelpers.esm.js.map +1 -1
- package/dist/utils/label.cjs.js.map +1 -1
- package/dist/utils/label.esm.js.map +1 -1
- package/dist/v2/components/auth/loginButton/LoginButton.cjs.js.map +1 -1
- package/dist/v2/components/auth/loginButton/LoginButton.esm.js.map +1 -1
- package/dist/v2/components/auth/loginButton/downArrow.cjs.js.map +1 -1
- package/dist/v2/components/auth/loginButton/index.cjs.js +1 -1
- package/dist/v2/components/auth/loginButton/index.esm.js +1 -0
- package/dist/v2/components/auth/signupButton/index.cjs.js +1 -1
- package/dist/v2/components/auth/signupButton/index.esm.js +1 -0
- package/dist/v2/components/layout/footer/index.cjs.js +1 -1
- package/dist/v2/components/layout/footer/index.esm.js +1 -0
- package/dist/v2/components/layout/header/Header.cjs.js.map +1 -1
- package/dist/v2/components/layout/header/Header.esm.js.map +1 -1
- package/dist/v2/components/layout/header/index.cjs.js +1 -1
- package/dist/v2/components/layout/header/index.esm.js +1 -0
- package/dist/v2/components/media/photoCapture/PhotoCapture.cjs.js.map +1 -1
- package/dist/v2/components/media/photoCapture/PhotoCapture.esm.js.map +1 -1
- package/dist/v2/components/media/photoCapture/index.cjs.js +1 -1
- package/dist/v2/components/media/photoCapture/index.esm.js +1 -0
- package/dist/widgets/buttons/iconLinks.cjs.js.map +1 -1
- package/dist/widgets/buttons/iconLinks.esm.js.map +1 -1
- package/dist/widgets/buttons.cjs.js.map +1 -1
- package/dist/widgets/buttons.esm.js.map +1 -1
- package/dist/widgets/dragAndDrop.cjs.js.map +1 -1
- package/dist/widgets/dragAndDrop.esm.js.map +1 -1
- package/dist/widgets/error.cjs.js.map +1 -1
- package/dist/widgets/error.esm.js.map +1 -1
- package/dist/widgets/forms/autocomplete/autocompleteField.cjs.js.map +1 -1
- package/dist/widgets/forms/autocomplete/autocompleteField.esm.js.map +1 -1
- package/dist/widgets/forms/autocomplete/autocompletePicker.cjs.js.map +1 -1
- package/dist/widgets/forms/autocomplete/autocompletePicker.esm.js.map +1 -1
- package/dist/widgets/forms/autocomplete/language.cjs.js +1 -1
- package/dist/widgets/forms/autocomplete/language.cjs.js.map +1 -1
- package/dist/widgets/forms/autocomplete/language.esm.js +1 -1
- package/dist/widgets/forms/autocomplete/language.esm.js.map +1 -1
- package/dist/widgets/forms/autocomplete/publicData.cjs.js +1 -1
- package/dist/widgets/forms/autocomplete/publicData.cjs.js.map +1 -1
- package/dist/widgets/forms/autocomplete/publicData.esm.js +1 -1
- package/dist/widgets/forms/autocomplete/publicData.esm.js.map +1 -1
- package/dist/widgets/forms/basic.cjs.js.map +1 -1
- package/dist/widgets/forms/basic.esm.js.map +1 -1
- package/dist/widgets/forms/fieldFunction.cjs.js.map +1 -1
- package/dist/widgets/forms/fieldParams.cjs.js.map +1 -1
- package/dist/widgets/forms/fieldParams.esm.js.map +1 -1
- package/dist/widgets/forms/formStyle.cjs.js.map +1 -1
- package/dist/widgets/forms/formStyle.esm.js.map +1 -1
- package/dist/widgets/forms.cjs.js +1 -1
- package/dist/widgets/forms.cjs.js.map +1 -1
- package/dist/widgets/forms.esm.js +1 -1
- package/dist/widgets/forms.esm.js.map +1 -1
- package/dist/widgets/index.cjs.js +1 -1
- package/dist/widgets/index.esm.js +65 -65
- package/dist/widgets/multiSelect.cjs.js.map +1 -1
- package/dist/widgets/multiSelect.esm.js.map +1 -1
- package/dist/widgets/peoplePicker.cjs.js.map +1 -1
- package/dist/widgets/peoplePicker.esm.js.map +1 -1
- package/dist/widgets/widgetHelpers.cjs.js.map +1 -1
- package/dist/widgets/widgetHelpers.esm.js.map +1 -1
- package/package.json +8 -10
- package/dist/chunks/DialogProvider-DphduSXG.js.map +0 -1
- package/dist/chunks/account-CFhrB0LO.js.map +0 -1
- package/dist/chunks/avatar-D281qln0.js.map +0 -1
- package/dist/chunks/combobox-Dtgc8qqO.js +0 -354
- package/dist/chunks/combobox-Dtgc8qqO.js.map +0 -1
- package/dist/chunks/components-BlEGdx4i.js.map +0 -1
- package/dist/chunks/dialog-DlBtmOm6.js.map +0 -1
- package/dist/chunks/menu-aQiqq1ET.js.map +0 -1
- package/dist/chunks/solid-logic.esm-7q6hmfIF.js.map +0 -1
- package/dist/solid-ui.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peoplePicker.cjs.js","names":["solidLogicSingleton","errorMessageBlock","ns","rdf","iconBase"],"sources":["../../src/widgets/peoplePicker.js"],"sourcesContent":["/**\n *\n * People Picker Pane\n *\n * This pane offers a mechanism for selecting a set of individuals, groups, or\n * organizations to take some action on.\n *\n * Assumptions\n * - Assumes that the user has a type index entry for vcard:AddressBook. @@ bad assuption\n *\n */\nimport escape from 'escape-html'\nimport { v4 as uuidv4 } from 'uuid'\nimport * as rdf from 'rdflib'\nimport * as debug from '../lib/debug'\n\nimport { makeDropTarget } from './dragAndDrop'\nimport { errorMessageBlock } from './error'\nimport { iconBase } from '../lib/iconBase'\nimport ns from '../lib/ns'\nimport { solidLogicSingleton } from 'solid-logic'\n\nconst kb = solidLogicSingleton.store\n\nexport class PeoplePicker {\n constructor (element, typeIndex, groupPickedCb, options) { // @@ can't expect typeindex to be passed\n this.options = options || {}\n this.element = element\n this.typeIndex = typeIndex\n this.groupPickedCb = groupPickedCb\n this.selectedgroup = this.options.selectedgroup // current selected group if any\n this.onSelectGroup = this.onSelectGroup.bind(this)\n }\n\n render () {\n const container = document.createElement('div')\n container.style.maxWidth = '350px'\n container.style.minHeight = '200px'\n container.style.outline = '1px solid black'\n container.style.display = 'flex'\n\n if (this.selectedgroup) {\n container.style.flexDirection = 'column'\n const selectedGroup = document.createElement('div')\n new Group(selectedGroup, this.selectedgroup).render()\n const changeGroupButton = document.createElement('button')\n changeGroupButton.textContent = escape('Change group')\n changeGroupButton.addEventListener('click', _event => {\n this.selectedgroup = null\n this.render()\n })\n container.appendChild(selectedGroup)\n container.appendChild(changeGroupButton)\n } else {\n this.findAddressBook(this.typeIndex)\n .then(({ book }) => {\n const chooseExistingGroupButton = document.createElement('button')\n chooseExistingGroupButton.textContent = escape(\n 'Pick an existing group'\n )\n chooseExistingGroupButton.style.margin = 'auto'\n chooseExistingGroupButton.addEventListener('click', _event => {\n new GroupPicker(container, book, this.onSelectGroup).render()\n })\n\n const createNewGroupButton = document.createElement('button')\n createNewGroupButton.textContent = escape('Create a new group')\n createNewGroupButton.style.margin = 'auto'\n createNewGroupButton.addEventListener('click', _event => {\n this.createNewGroup(book, this.options.defaultNewGroupName)\n .then(({ group }) => {\n new GroupBuilder(\n this.element,\n book,\n group,\n this.onSelectGroup\n ).render()\n })\n .catch(errorBody => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Error creating a new group. (${errorBody})`)\n )\n )\n })\n })\n\n container.appendChild(chooseExistingGroupButton)\n container.appendChild(createNewGroupButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n })\n .catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Could find your groups. (${err})`)\n )\n )\n })\n }\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n\n findAddressBook (typeIndex) {\n return new Promise((resolve, reject) => {\n kb.fetcher.nowOrWhenFetched(typeIndex, (ok, err) => {\n if (!ok) {\n return reject(err)\n }\n const bookRegistration = kb.any(\n null,\n ns.solid('forClass'),\n ns.vcard('AddressBook')\n )\n if (!bookRegistration) {\n return reject(\n new Error(\n 'no address book registered in the solid type index ' + typeIndex\n )\n )\n }\n const book = kb.any(bookRegistration, ns.solid('instance'))\n if (!book) {\n return reject(new Error('incomplete address book registration'))\n }\n kb.fetcher\n .load(book)\n .then(function (_xhr) {\n return resolve({ book })\n })\n .catch(function (errr) {\n return reject(new Error('Could not load address book ' + errr))\n })\n })\n })\n }\n\n createNewGroup (book, defaultNewGroupName) {\n const { groupIndex, groupContainer } = indexes(book)\n const group = rdf.sym(\n `${groupContainer.uri}${uuidv4().slice(0, 8)}.ttl#this`\n )\n const name = defaultNewGroupName || 'Untitled Group'\n\n // NOTE that order matters here. Unfortunately this type of update is\n // non-atomic in that solid requires us to send two PATCHes, either of which\n // might fail.\n const patchPromises = [group.doc(), groupIndex].map(doc => {\n const typeStatement = rdf.st(group, ns.rdf('type'), ns.vcard('Group'), doc)\n const nameStatement = rdf.st(group, ns.vcard('fn'), name, group.doc(), doc)\n const includesGroupStatement = rdf.st(\n book,\n ns.vcard('includesGroup'),\n group,\n doc\n )\n const toIns = doc.equals(groupIndex)\n ? [typeStatement, nameStatement, includesGroupStatement]\n : [typeStatement, nameStatement]\n return patch(doc.uri, { toIns }).then(() => {\n toIns.forEach(st => {\n kb.add(st)\n })\n })\n })\n return Promise.all(patchPromises)\n .then(() => ({ group }))\n .catch(err => {\n debug.log('Could not create new group. PATCH failed ' + err)\n throw new Error(\n `Couldn't create new group. PATCH failed for (${\n err.xhr ? err.xhr.responseURL : ''\n } )`\n )\n })\n }\n\n onSelectGroup (group) {\n this.selectedgroup = group\n this.groupPickedCb(group)\n this.render()\n }\n}\n\nexport class GroupPicker {\n constructor (element, book, onSelectGroup) {\n this.element = element\n this.book = book\n this.onSelectGroup = onSelectGroup\n }\n\n render () {\n this.loadGroups()\n .then(groups => {\n // render the groups\n const container = document.createElement('div')\n container.style.display = 'flex'\n container.style.flexDirection = 'column'\n groups.forEach(group => {\n const groupButton = document.createElement('button')\n groupButton.addEventListener('click', this.handleClickGroup(group))\n new Group(groupButton, group).render()\n container.appendChild(groupButton)\n })\n this.element.innerHTML = ''\n this.element.appendChild(container)\n })\n .catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`There was an error loading your groups. (${err})`)\n )\n )\n })\n return this\n }\n\n loadGroups () {\n return new Promise((resolve, reject) => {\n const { groupIndex } = indexes(this.book)\n kb.fetcher.nowOrWhenFetched(groupIndex, (ok, err) => {\n if (!ok) {\n return reject(err)\n }\n const groups = kb.each(this.book, ns.vcard('includesGroup'))\n return resolve(groups)\n })\n })\n }\n\n handleClickGroup (group) {\n return _event => {\n this.onSelectGroup(group)\n }\n }\n}\n\nexport class Group {\n constructor (element, group) {\n this.element = element\n this.group = group\n }\n\n render () {\n const container = document.createElement('div')\n container.textContent = escape(\n // @@@@@ need to escape??\n getWithDefault(this.group, ns.vcard('fn'), `[${this.group.value}]`)\n )\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n}\n\nexport class GroupBuilder {\n constructor (element, book, group, doneBuildingCb, groupChangedCb) {\n this.element = element\n this.book = book\n this.group = group\n this.onGroupChanged = (err, changeType, agent) => {\n if (groupChangedCb) {\n groupChangedCb(err, changeType, agent)\n }\n }\n this.groupChangedCb = groupChangedCb\n this.doneBuildingCb = doneBuildingCb\n }\n\n refresh () {\n // TODO: implement\n }\n\n render () {\n const dropContainer = document.createElement('div')\n dropContainer.style.maxWidth = '350px'\n dropContainer.style.minHeight = '200px'\n dropContainer.style.outline = '1px solid black'\n dropContainer.style.display = 'flex'\n dropContainer.style.flexDirection = 'column'\n\n makeDropTarget(dropContainer, uris => {\n uris.forEach(uri => {\n this.add(uri).catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Could not add the given WebId. (${err})`)\n )\n )\n })\n })\n })\n\n const groupNameInput = document.createElement('input')\n groupNameInput.type = 'text'\n groupNameInput.value = getWithDefault(\n this.group,\n ns.vcard('fn'),\n 'Untitled Group'\n )\n groupNameInput.addEventListener('change', event => {\n this.setGroupName(event.target.value).catch(err => {\n this.element.appendChild(\n errorMessageBlock(document, `Error changing group name. (${err})`)\n )\n })\n })\n const groupNameLabel = document.createElement('label')\n groupNameLabel.textContent = escape('Group Name:')\n groupNameLabel.appendChild(groupNameInput)\n dropContainer.appendChild(groupNameLabel)\n\n if (kb.any(this.group, ns.vcard('hasMember'))) {\n kb.match(this.group, ns.vcard('hasMember')).forEach(statement => {\n const webIdNode = statement.object\n const personDiv = document.createElement('div')\n new Person(personDiv, webIdNode, this.handleRemove(webIdNode)).render()\n dropContainer.appendChild(personDiv)\n })\n } else {\n const copy = document.createElement('p')\n copy.textContent = escape`\n To add someone to this group, drag and drop their WebID URL onto the box.\n `\n dropContainer.appendChild(copy)\n }\n\n const doneBuildingButton = document.createElement('button')\n doneBuildingButton.textContent = escape('Done')\n doneBuildingButton.addEventListener('click', _event => {\n this.doneBuildingCb(this.group)\n })\n dropContainer.appendChild(doneBuildingButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(dropContainer)\n return this\n }\n\n add (webId) {\n return new Promise((resolve, reject) => {\n kb.fetcher.nowOrWhenFetched(webId, (ok, err) => {\n if (!ok) {\n this.onGroupChanged(err)\n return reject(err)\n }\n // make sure it's a valid person, group, or entity (for now just handle\n // webId)\n const webIdNode = rdf.namedNode(webId)\n const rdfClass = kb.any(webIdNode, ns.rdf('type'))\n if (!rdfClass || !rdfClass.equals(ns.foaf('Person'))) {\n return reject(\n new Error(\n `Only people supported right now. (tried to add something of type ${rdfClass.value})`\n )\n )\n }\n return resolve(webIdNode)\n })\n }).then(webIdNode => {\n const statement = rdf.st(this.group, ns.vcard('hasMember'), webIdNode)\n if (kb.holdsStatement(statement)) {\n return webIdNode\n }\n return patch(this.group.doc().uri, { toIns: [statement] }).then(() => {\n statement.why = this.group.doc()\n kb.add(statement)\n this.onGroupChanged(null, 'added', webIdNode)\n this.render()\n })\n })\n }\n\n handleRemove (webIdNode) {\n return _event => {\n const statement = rdf.st(this.group, ns.vcard('hasMember'), webIdNode)\n return patch(this.group.doc().uri, { toDel: [statement] })\n .then(() => {\n kb.remove(statement)\n this.onGroupChanged(null, 'removed', webIdNode)\n this.render()\n return true\n })\n .catch(err => {\n const name = kb.any(webIdNode, ns.foaf('name'))\n const errorMessage =\n name && name.value\n ? `Could not remove ${name.value}. (${err})`\n : `Could not remove ${webIdNode.value}. (${err})`\n throw new Error(errorMessage)\n })\n }\n }\n\n setGroupName (name) {\n const { groupIndex } = indexes(this.book)\n const updatePromises = [this.group.doc(), groupIndex].map(namedGraph => {\n const oldNameStatements = kb.match(\n this.group,\n ns.vcard('fn'),\n null,\n namedGraph\n )\n const newNameStatement = rdf.st(\n this.group,\n ns.vcard('fn'),\n rdf.literal(name)\n )\n return patch(namedGraph.value, {\n toDel: oldNameStatements,\n toIns: [newNameStatement]\n }).then(_solidResponse => {\n kb.removeStatements(oldNameStatements)\n newNameStatement.why = namedGraph\n kb.add(newNameStatement)\n })\n })\n return Promise.all(updatePromises)\n }\n}\n// @ignore exporting this only for the unit test\n// @@ TODO maybe I should move this down at end, but for\n// now I will leave it where it was\nexport class Person {\n constructor (element, webIdNode, handleRemove) {\n this.webIdNode = webIdNode\n this.element = element\n this.handleRemove = handleRemove\n }\n\n render () {\n const container = document.createElement('div')\n container.style.display = 'flex'\n\n // TODO: take a look at UI.widgets.setName\n const imgSrc = getWithDefault(\n this.webIdNode,\n ns.foaf('img'),\n iconBase + 'noun_15059.svg'\n )\n const profileImg = document.createElement('img')\n profileImg.src = escape(imgSrc)\n profileImg.width = '50'\n profileImg.height = '50'\n profileImg.style.margin = '5px'\n\n // TODO: take a look at UI.widgets.setImage\n const name = getWithDefault(\n this.webIdNode,\n ns.foaf('name'),\n `[${this.webIdNode}]`\n )\n const nameSpan = document.createElement('span')\n nameSpan.innerHTML = escape(name)\n nameSpan.style.flexGrow = '1'\n nameSpan.style.margin = 'auto 0'\n\n const removeButton = document.createElement('button')\n removeButton.textContent = 'Remove'\n removeButton.addEventListener('click', _event =>\n this.handleRemove().catch(err => {\n this.element.appendChild(errorMessageBlock(document, escape(`${err}`)))\n })\n )\n removeButton.style.margin = '5px'\n\n container.appendChild(profileImg)\n container.appendChild(nameSpan)\n container.appendChild(removeButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n}\n\nfunction getWithDefault (subject, predicate, defaultValue) {\n const object = kb.any(subject, predicate)\n return object ? object.value : defaultValue\n}\n\nfunction patch (url, { toDel, toIns }) {\n return new Promise((resolve, reject) => {\n kb.updater.update(toDel, toIns, (uri, success, errorMessage) => {\n if (!success) {\n return reject(\n new Error(`PATCH failed for resource <${uri}>: ${errorMessage}`)\n )\n }\n resolve()\n })\n })\n // return webClient.patch(url, toDel, toIns)\n // .then(solidResponse => {\n // const status = solidResponse.xhr.status\n // if (status < 200 || status >= 400) {\n // const err = new Error(`PATCH failed for resource <${solidResponse.url}>`)\n // err.solidResponse = solidResponse\n // throw err\n // }\n // })\n}\n\nfunction indexes (book) {\n return {\n // bookIndex: book,\n groupIndex: kb.any(book, ns.vcard('groupIndex')),\n groupContainer: kb.sym(book.dir().uri + 'Group/')\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"peoplePicker.cjs.js","names":["solidLogicSingleton","errorMessageBlock","ns","rdf","iconBase"],"sources":["../../src/widgets/peoplePicker.js"],"sourcesContent":["/**\n *\n * People Picker Pane\n *\n * This pane offers a mechanism for selecting a set of individuals, groups, or\n * organizations to take some action on.\n *\n * Assumptions\n * - Assumes that the user has a type index entry for vcard:AddressBook. @@ bad assuption\n *\n */\nimport escape from 'escape-html'\nimport { v4 as uuidv4 } from 'uuid'\nimport * as rdf from 'rdflib'\nimport * as debug from '../lib/debug'\n\nimport { makeDropTarget } from './dragAndDrop'\nimport { errorMessageBlock } from './error'\nimport { iconBase } from '../lib/iconBase'\nimport ns from '../lib/ns'\nimport { solidLogicSingleton } from 'solid-logic'\n\nconst kb = solidLogicSingleton.store\n\nexport class PeoplePicker {\n constructor (element, typeIndex, groupPickedCb, options) { // @@ can't expect typeindex to be passed\n this.options = options || {}\n this.element = element\n this.typeIndex = typeIndex\n this.groupPickedCb = groupPickedCb\n this.selectedgroup = this.options.selectedgroup // current selected group if any\n this.onSelectGroup = this.onSelectGroup.bind(this)\n }\n\n render () {\n const container = document.createElement('div')\n container.style.maxWidth = '350px'\n container.style.minHeight = '200px'\n container.style.outline = '1px solid black'\n container.style.display = 'flex'\n\n if (this.selectedgroup) {\n container.style.flexDirection = 'column'\n const selectedGroup = document.createElement('div')\n new Group(selectedGroup, this.selectedgroup).render()\n const changeGroupButton = document.createElement('button')\n changeGroupButton.textContent = escape('Change group')\n changeGroupButton.addEventListener('click', _event => {\n this.selectedgroup = null\n this.render()\n })\n container.appendChild(selectedGroup)\n container.appendChild(changeGroupButton)\n } else {\n this.findAddressBook(this.typeIndex)\n .then(({ book }) => {\n const chooseExistingGroupButton = document.createElement('button')\n chooseExistingGroupButton.textContent = escape(\n 'Pick an existing group'\n )\n chooseExistingGroupButton.style.margin = 'auto'\n chooseExistingGroupButton.addEventListener('click', _event => {\n new GroupPicker(container, book, this.onSelectGroup).render()\n })\n\n const createNewGroupButton = document.createElement('button')\n createNewGroupButton.textContent = escape('Create a new group')\n createNewGroupButton.style.margin = 'auto'\n createNewGroupButton.addEventListener('click', _event => {\n this.createNewGroup(book, this.options.defaultNewGroupName)\n .then(({ group }) => {\n new GroupBuilder(\n this.element,\n book,\n group,\n this.onSelectGroup\n ).render()\n })\n .catch(errorBody => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Error creating a new group. (${errorBody})`)\n )\n )\n })\n })\n\n container.appendChild(chooseExistingGroupButton)\n container.appendChild(createNewGroupButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n })\n .catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Could find your groups. (${err})`)\n )\n )\n })\n }\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n\n findAddressBook (typeIndex) {\n return new Promise((resolve, reject) => {\n kb.fetcher.nowOrWhenFetched(typeIndex, (ok, err) => {\n if (!ok) {\n return reject(err)\n }\n const bookRegistration = kb.any(\n null,\n ns.solid('forClass'),\n ns.vcard('AddressBook')\n )\n if (!bookRegistration) {\n return reject(\n new Error(\n 'no address book registered in the solid type index ' + typeIndex\n )\n )\n }\n const book = kb.any(bookRegistration, ns.solid('instance'))\n if (!book) {\n return reject(new Error('incomplete address book registration'))\n }\n kb.fetcher\n .load(book)\n .then(function (_xhr) {\n return resolve({ book })\n })\n .catch(function (errr) {\n return reject(new Error('Could not load address book ' + errr))\n })\n })\n })\n }\n\n createNewGroup (book, defaultNewGroupName) {\n const { groupIndex, groupContainer } = indexes(book)\n const group = rdf.sym(\n `${groupContainer.uri}${uuidv4().slice(0, 8)}.ttl#this`\n )\n const name = defaultNewGroupName || 'Untitled Group'\n\n // NOTE that order matters here. Unfortunately this type of update is\n // non-atomic in that solid requires us to send two PATCHes, either of which\n // might fail.\n const patchPromises = [group.doc(), groupIndex].map(doc => {\n const typeStatement = rdf.st(group, ns.rdf('type'), ns.vcard('Group'), doc)\n const nameStatement = rdf.st(group, ns.vcard('fn'), name, group.doc(), doc)\n const includesGroupStatement = rdf.st(\n book,\n ns.vcard('includesGroup'),\n group,\n doc\n )\n const toIns = doc.equals(groupIndex)\n ? [typeStatement, nameStatement, includesGroupStatement]\n : [typeStatement, nameStatement]\n return patch(doc.uri, { toIns }).then(() => {\n toIns.forEach(st => {\n kb.add(st)\n })\n })\n })\n return Promise.all(patchPromises)\n .then(() => ({ group }))\n .catch(err => {\n debug.log('Could not create new group. PATCH failed ' + err)\n throw new Error(\n `Couldn't create new group. PATCH failed for (${\n err.xhr ? err.xhr.responseURL : ''\n } )`\n )\n })\n }\n\n onSelectGroup (group) {\n this.selectedgroup = group\n this.groupPickedCb(group)\n this.render()\n }\n}\n\nexport class GroupPicker {\n constructor (element, book, onSelectGroup) {\n this.element = element\n this.book = book\n this.onSelectGroup = onSelectGroup\n }\n\n render () {\n this.loadGroups()\n .then(groups => {\n // render the groups\n const container = document.createElement('div')\n container.style.display = 'flex'\n container.style.flexDirection = 'column'\n groups.forEach(group => {\n const groupButton = document.createElement('button')\n groupButton.addEventListener('click', this.handleClickGroup(group))\n new Group(groupButton, group).render()\n container.appendChild(groupButton)\n })\n this.element.innerHTML = ''\n this.element.appendChild(container)\n })\n .catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`There was an error loading your groups. (${err})`)\n )\n )\n })\n return this\n }\n\n loadGroups () {\n return new Promise((resolve, reject) => {\n const { groupIndex } = indexes(this.book)\n kb.fetcher.nowOrWhenFetched(groupIndex, (ok, err) => {\n if (!ok) {\n return reject(err)\n }\n const groups = kb.each(this.book, ns.vcard('includesGroup'))\n return resolve(groups)\n })\n })\n }\n\n handleClickGroup (group) {\n return _event => {\n this.onSelectGroup(group)\n }\n }\n}\n\nexport class Group {\n constructor (element, group) {\n this.element = element\n this.group = group\n }\n\n render () {\n const container = document.createElement('div')\n container.textContent = escape(\n // @@@@@ need to escape??\n getWithDefault(this.group, ns.vcard('fn'), `[${this.group.value}]`)\n )\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n}\n\nexport class GroupBuilder {\n constructor (element, book, group, doneBuildingCb, groupChangedCb) {\n this.element = element\n this.book = book\n this.group = group\n this.onGroupChanged = (err, changeType, agent) => {\n if (groupChangedCb) {\n groupChangedCb(err, changeType, agent)\n }\n }\n this.groupChangedCb = groupChangedCb\n this.doneBuildingCb = doneBuildingCb\n }\n\n refresh () {\n // TODO: implement\n }\n\n render () {\n const dropContainer = document.createElement('div')\n dropContainer.style.maxWidth = '350px'\n dropContainer.style.minHeight = '200px'\n dropContainer.style.outline = '1px solid black'\n dropContainer.style.display = 'flex'\n dropContainer.style.flexDirection = 'column'\n\n makeDropTarget(dropContainer, uris => {\n uris.forEach(uri => {\n this.add(uri).catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Could not add the given WebId. (${err})`)\n )\n )\n })\n })\n })\n\n const groupNameInput = document.createElement('input')\n groupNameInput.type = 'text'\n groupNameInput.value = getWithDefault(\n this.group,\n ns.vcard('fn'),\n 'Untitled Group'\n )\n groupNameInput.addEventListener('change', event => {\n this.setGroupName(event.target.value).catch(err => {\n this.element.appendChild(\n errorMessageBlock(document, `Error changing group name. (${err})`)\n )\n })\n })\n const groupNameLabel = document.createElement('label')\n groupNameLabel.textContent = escape('Group Name:')\n groupNameLabel.appendChild(groupNameInput)\n dropContainer.appendChild(groupNameLabel)\n\n if (kb.any(this.group, ns.vcard('hasMember'))) {\n kb.match(this.group, ns.vcard('hasMember')).forEach(statement => {\n const webIdNode = statement.object\n const personDiv = document.createElement('div')\n new Person(personDiv, webIdNode, this.handleRemove(webIdNode)).render()\n dropContainer.appendChild(personDiv)\n })\n } else {\n const copy = document.createElement('p')\n copy.textContent = escape`\n To add someone to this group, drag and drop their WebID URL onto the box.\n `\n dropContainer.appendChild(copy)\n }\n\n const doneBuildingButton = document.createElement('button')\n doneBuildingButton.textContent = escape('Done')\n doneBuildingButton.addEventListener('click', _event => {\n this.doneBuildingCb(this.group)\n })\n dropContainer.appendChild(doneBuildingButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(dropContainer)\n return this\n }\n\n add (webId) {\n return new Promise((resolve, reject) => {\n kb.fetcher.nowOrWhenFetched(webId, (ok, err) => {\n if (!ok) {\n this.onGroupChanged(err)\n return reject(err)\n }\n // make sure it's a valid person, group, or entity (for now just handle\n // webId)\n const webIdNode = rdf.namedNode(webId)\n const rdfClass = kb.any(webIdNode, ns.rdf('type'))\n if (!rdfClass || !rdfClass.equals(ns.foaf('Person'))) {\n return reject(\n new Error(\n `Only people supported right now. (tried to add something of type ${rdfClass.value})`\n )\n )\n }\n return resolve(webIdNode)\n })\n }).then(webIdNode => {\n const statement = rdf.st(this.group, ns.vcard('hasMember'), webIdNode)\n if (kb.holdsStatement(statement)) {\n return webIdNode\n }\n return patch(this.group.doc().uri, { toIns: [statement] }).then(() => {\n statement.why = this.group.doc()\n kb.add(statement)\n this.onGroupChanged(null, 'added', webIdNode)\n this.render()\n })\n })\n }\n\n handleRemove (webIdNode) {\n return _event => {\n const statement = rdf.st(this.group, ns.vcard('hasMember'), webIdNode)\n return patch(this.group.doc().uri, { toDel: [statement] })\n .then(() => {\n kb.remove(statement)\n this.onGroupChanged(null, 'removed', webIdNode)\n this.render()\n return true\n })\n .catch(err => {\n const name = kb.any(webIdNode, ns.foaf('name'))\n const errorMessage =\n name && name.value\n ? `Could not remove ${name.value}. (${err})`\n : `Could not remove ${webIdNode.value}. (${err})`\n throw new Error(errorMessage)\n })\n }\n }\n\n setGroupName (name) {\n const { groupIndex } = indexes(this.book)\n const updatePromises = [this.group.doc(), groupIndex].map(namedGraph => {\n const oldNameStatements = kb.match(\n this.group,\n ns.vcard('fn'),\n null,\n namedGraph\n )\n const newNameStatement = rdf.st(\n this.group,\n ns.vcard('fn'),\n rdf.literal(name)\n )\n return patch(namedGraph.value, {\n toDel: oldNameStatements,\n toIns: [newNameStatement]\n }).then(_solidResponse => {\n kb.removeStatements(oldNameStatements)\n newNameStatement.why = namedGraph\n kb.add(newNameStatement)\n })\n })\n return Promise.all(updatePromises)\n }\n}\n// @ignore exporting this only for the unit test\n// @@ TODO maybe I should move this down at end, but for\n// now I will leave it where it was\nexport class Person {\n constructor (element, webIdNode, handleRemove) {\n this.webIdNode = webIdNode\n this.element = element\n this.handleRemove = handleRemove\n }\n\n render () {\n const container = document.createElement('div')\n container.style.display = 'flex'\n\n // TODO: take a look at UI.widgets.setName\n const imgSrc = getWithDefault(\n this.webIdNode,\n ns.foaf('img'),\n iconBase + 'noun_15059.svg'\n )\n const profileImg = document.createElement('img')\n profileImg.src = escape(imgSrc)\n profileImg.width = '50'\n profileImg.height = '50'\n profileImg.style.margin = '5px'\n\n // TODO: take a look at UI.widgets.setImage\n const name = getWithDefault(\n this.webIdNode,\n ns.foaf('name'),\n `[${this.webIdNode}]`\n )\n const nameSpan = document.createElement('span')\n nameSpan.innerHTML = escape(name)\n nameSpan.style.flexGrow = '1'\n nameSpan.style.margin = 'auto 0'\n\n const removeButton = document.createElement('button')\n removeButton.textContent = 'Remove'\n removeButton.addEventListener('click', _event =>\n this.handleRemove().catch(err => {\n this.element.appendChild(errorMessageBlock(document, escape(`${err}`)))\n })\n )\n removeButton.style.margin = '5px'\n\n container.appendChild(profileImg)\n container.appendChild(nameSpan)\n container.appendChild(removeButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n}\n\nfunction getWithDefault (subject, predicate, defaultValue) {\n const object = kb.any(subject, predicate)\n return object ? object.value : defaultValue\n}\n\nfunction patch (url, { toDel, toIns }) {\n return new Promise((resolve, reject) => {\n kb.updater.update(toDel, toIns, (uri, success, errorMessage) => {\n if (!success) {\n return reject(\n new Error(`PATCH failed for resource <${uri}>: ${errorMessage}`)\n )\n }\n resolve()\n })\n })\n // return webClient.patch(url, toDel, toIns)\n // .then(solidResponse => {\n // const status = solidResponse.xhr.status\n // if (status < 200 || status >= 400) {\n // const err = new Error(`PATCH failed for resource <${solidResponse.url}>`)\n // err.solidResponse = solidResponse\n // throw err\n // }\n // })\n}\n\nfunction indexes (book) {\n return {\n // bookIndex: book,\n groupIndex: kb.any(book, ns.vcard('groupIndex')),\n groupContainer: kb.sym(book.dir().uri + 'Group/')\n }\n}\n"],"mappings":"2VAsBA,IAAM,EAAKA,EAAAA,oBAAoB,MAElB,EAAb,KAA0B,CACxB,YAAa,EAAS,EAAW,EAAe,EAAS,CACvD,KAAK,QAAU,GAAW,CAAC,EAC3B,KAAK,QAAU,EACf,KAAK,UAAY,EACjB,KAAK,cAAgB,EACrB,KAAK,cAAgB,KAAK,QAAQ,cAClC,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,CACnD,CAEA,QAAU,CACR,IAAM,EAAY,SAAS,cAAc,KAAK,EAM9C,GALA,EAAU,MAAM,SAAW,QAC3B,EAAU,MAAM,UAAY,QAC5B,EAAU,MAAM,QAAU,kBAC1B,EAAU,MAAM,QAAU,OAEtB,KAAK,cAAe,CACtB,EAAU,MAAM,cAAgB,SAChC,IAAM,EAAgB,SAAS,cAAc,KAAK,EAClD,IAAI,EAAM,EAAe,KAAK,aAAa,CAAC,CAAC,OAAO,EACpD,IAAM,EAAoB,SAAS,cAAc,QAAQ,EACzD,EAAkB,aAAA,EAAA,EAAA,QAAA,CAAqB,cAAc,EACrD,EAAkB,iBAAiB,QAAS,GAAU,CACpD,KAAK,cAAgB,KACrB,KAAK,OAAO,CACd,CAAC,EACD,EAAU,YAAY,CAAa,EACnC,EAAU,YAAY,CAAiB,CACzC,MACE,KAAK,gBAAgB,KAAK,SAAS,CAAC,CACjC,MAAM,CAAE,UAAW,CAClB,IAAM,EAA4B,SAAS,cAAc,QAAQ,EACjE,EAA0B,aAAA,EAAA,EAAA,QAAA,CACxB,wBACF,EACA,EAA0B,MAAM,OAAS,OACzC,EAA0B,iBAAiB,QAAS,GAAU,CAC5D,IAAI,EAAY,EAAW,EAAM,KAAK,aAAa,CAAC,CAAC,OAAO,CAC9D,CAAC,EAED,IAAM,EAAuB,SAAS,cAAc,QAAQ,EAC5D,EAAqB,aAAA,EAAA,EAAA,QAAA,CAAqB,oBAAoB,EAC9D,EAAqB,MAAM,OAAS,OACpC,EAAqB,iBAAiB,QAAS,GAAU,CACvD,KAAK,eAAe,EAAM,KAAK,QAAQ,mBAAmB,CAAC,CACxD,MAAM,CAAE,WAAY,CACnB,IAAI,EACF,KAAK,QACL,EACA,EACA,KAAK,aACP,CAAC,CAAC,OAAO,CACX,CAAC,CAAC,CACD,MAAM,GAAa,CAClB,KAAK,QAAQ,YACXC,EAAAA,kBACE,UAAA,EAAA,EAAA,QAAA,CACO,gCAAgC,EAAU,EAAE,CACrD,CACF,CACF,CAAC,CACL,CAAC,EAED,EAAU,YAAY,CAAyB,EAC/C,EAAU,YAAY,CAAoB,EAE1C,KAAK,QAAQ,UAAY,GACzB,KAAK,QAAQ,YAAY,CAAS,CACpC,CAAC,CAAC,CACD,MAAM,GAAO,CACZ,KAAK,QAAQ,YACXA,EAAAA,kBACE,UAAA,EAAA,EAAA,QAAA,CACO,4BAA4B,EAAI,EAAE,CAC3C,CACF,CACF,CAAC,EAKL,MAFA,MAAK,QAAQ,UAAY,GACzB,KAAK,QAAQ,YAAY,CAAS,EAC3B,IACT,CAEA,gBAAiB,EAAW,CAC1B,OAAO,IAAI,SAAS,EAAS,IAAW,CACtC,EAAG,QAAQ,iBAAiB,GAAY,EAAI,IAAQ,CAClD,GAAI,CAAC,EACH,OAAO,EAAO,CAAG,EAEnB,IAAM,EAAmB,EAAG,IAC1B,KACAC,EAAAA,QAAG,MAAM,UAAU,EACnBA,EAAAA,QAAG,MAAM,aAAa,CACxB,EACA,GAAI,CAAC,EACH,OAAO,EACD,MACF,sDAAwD,CAC1D,CACF,EAEF,IAAM,EAAO,EAAG,IAAI,EAAkBA,EAAAA,QAAG,MAAM,UAAU,CAAC,EAC1D,GAAI,CAAC,EACH,OAAO,EAAW,MAAM,sCAAsC,CAAC,EAEjE,EAAG,QACA,KAAK,CAAI,CAAC,CACV,KAAK,SAAU,EAAM,CACpB,OAAO,EAAQ,CAAE,MAAK,CAAC,CACzB,CAAC,CAAC,CACD,MAAM,SAAU,EAAM,CACrB,OAAO,EAAW,MAAM,+BAAiC,CAAI,CAAC,CAChE,CAAC,CACL,CAAC,CACH,CAAC,CACH,CAEA,eAAgB,EAAM,EAAqB,CACzC,GAAM,CAAE,aAAY,kBAAmB,EAAQ,CAAI,EAC7C,EAAQC,EAAI,IAChB,GAAG,EAAe,OAAA,EAAA,EAAA,GAAA,CAAa,CAAC,CAAC,MAAM,EAAG,CAAC,EAAE,UAC/C,EACM,EAAO,GAAuB,iBAK9B,EAAgB,CAAC,EAAM,IAAI,EAAG,CAAU,CAAC,CAAC,IAAI,GAAO,CACzD,IAAM,EAAgBA,EAAI,GAAG,EAAOD,EAAAA,QAAG,IAAI,MAAM,EAAGA,EAAAA,QAAG,MAAM,OAAO,EAAG,CAAG,EACpE,EAAgBC,EAAI,GAAG,EAAOD,EAAAA,QAAG,MAAM,IAAI,EAAG,EAAM,EAAM,IAAI,EAAG,CAAG,EACpE,EAAyBC,EAAI,GACjC,EACAD,EAAAA,QAAG,MAAM,eAAe,EACxB,EACA,CACF,EACM,EAAQ,EAAI,OAAO,CAAU,EAC/B,CAAC,EAAe,EAAe,CAAsB,EACrD,CAAC,EAAe,CAAa,EACjC,OAAO,EAAM,EAAI,IAAK,CAAE,OAAM,CAAC,CAAC,CAAC,SAAW,CAC1C,EAAM,QAAQ,GAAM,CAClB,EAAG,IAAI,CAAE,CACX,CAAC,CACH,CAAC,CACH,CAAC,EACD,OAAO,QAAQ,IAAI,CAAa,CAAC,CAC9B,UAAY,CAAE,OAAM,EAAE,CAAC,CACvB,MAAM,GAAO,CAEZ,MADA,EAAA,IAAU,6CAA+C,CAAG,EAClD,MACR,iDACA,EAAI,IAAM,EAAI,IAAI,YAAc,GAC/B,GACH,CACF,CAAC,CACL,CAEA,cAAe,EAAO,CACpB,KAAK,cAAgB,EACrB,KAAK,cAAc,CAAK,EACxB,KAAK,OAAO,CACd,CACF,EAEa,EAAb,KAAyB,CACvB,YAAa,EAAS,EAAM,EAAe,CACzC,KAAK,QAAU,EACf,KAAK,KAAO,EACZ,KAAK,cAAgB,CACvB,CAEA,QAAU,CAwBR,OAvBA,KAAK,WAAW,CAAC,CACd,KAAK,GAAU,CAEd,IAAM,EAAY,SAAS,cAAc,KAAK,EAC9C,EAAU,MAAM,QAAU,OAC1B,EAAU,MAAM,cAAgB,SAChC,EAAO,QAAQ,GAAS,CACtB,IAAM,EAAc,SAAS,cAAc,QAAQ,EACnD,EAAY,iBAAiB,QAAS,KAAK,iBAAiB,CAAK,CAAC,EAClE,IAAI,EAAM,EAAa,CAAK,CAAC,CAAC,OAAO,EACrC,EAAU,YAAY,CAAW,CACnC,CAAC,EACD,KAAK,QAAQ,UAAY,GACzB,KAAK,QAAQ,YAAY,CAAS,CACpC,CAAC,CAAC,CACD,MAAM,GAAO,CACZ,KAAK,QAAQ,YACXD,EAAAA,kBACE,UAAA,EAAA,EAAA,QAAA,CACO,4CAA4C,EAAI,EAAE,CAC3D,CACF,CACF,CAAC,EACI,IACT,CAEA,YAAc,CACZ,OAAO,IAAI,SAAS,EAAS,IAAW,CACtC,GAAM,CAAE,cAAe,EAAQ,KAAK,IAAI,EACxC,EAAG,QAAQ,iBAAiB,GAAa,EAAI,IACtC,EAIE,EADQ,EAAG,KAAK,KAAK,KAAMC,EAAAA,QAAG,MAAM,eAAe,CACtC,CAAC,EAHZ,EAAO,CAAG,CAIpB,CACH,CAAC,CACH,CAEA,iBAAkB,EAAO,CACvB,MAAO,IAAU,CACf,KAAK,cAAc,CAAK,CAC1B,CACF,CACF,EAEa,EAAb,KAAmB,CACjB,YAAa,EAAS,EAAO,CAC3B,KAAK,QAAU,EACf,KAAK,MAAQ,CACf,CAEA,QAAU,CACR,IAAM,EAAY,SAAS,cAAc,KAAK,EAO9C,MANA,GAAU,aAAA,EAAA,EAAA,QAAA,CAER,EAAe,KAAK,MAAOA,EAAAA,QAAG,MAAM,IAAI,EAAG,IAAI,KAAK,MAAM,MAAM,EAAE,CACpE,EACA,KAAK,QAAQ,UAAY,GACzB,KAAK,QAAQ,YAAY,CAAS,EAC3B,IACT,CACF,EAEa,EAAb,KAA0B,CACxB,YAAa,EAAS,EAAM,EAAO,EAAgB,EAAgB,CACjE,KAAK,QAAU,EACf,KAAK,KAAO,EACZ,KAAK,MAAQ,EACb,KAAK,gBAAkB,EAAK,EAAY,IAAU,CAC5C,GACF,EAAe,EAAK,EAAY,CAAK,CAEzC,EACA,KAAK,eAAiB,EACtB,KAAK,eAAiB,CACxB,CAEA,SAAW,CAEX,CAEA,QAAU,CACR,IAAM,EAAgB,SAAS,cAAc,KAAK,EAClD,EAAc,MAAM,SAAW,QAC/B,EAAc,MAAM,UAAY,QAChC,EAAc,MAAM,QAAU,kBAC9B,EAAc,MAAM,QAAU,OAC9B,EAAc,MAAM,cAAgB,SAEpC,EAAA,eAAe,EAAe,GAAQ,CACpC,EAAK,QAAQ,GAAO,CAClB,KAAK,IAAI,CAAG,CAAC,CAAC,MAAM,GAAO,CACzB,KAAK,QAAQ,YACXD,EAAAA,kBACE,UAAA,EAAA,EAAA,QAAA,CACO,mCAAmC,EAAI,EAAE,CAClD,CACF,CACF,CAAC,CACH,CAAC,CACH,CAAC,EAED,IAAM,EAAiB,SAAS,cAAc,OAAO,EACrD,EAAe,KAAO,OACtB,EAAe,MAAQ,EACrB,KAAK,MACLC,EAAAA,QAAG,MAAM,IAAI,EACb,gBACF,EACA,EAAe,iBAAiB,SAAU,GAAS,CACjD,KAAK,aAAa,EAAM,OAAO,KAAK,CAAC,CAAC,MAAM,GAAO,CACjD,KAAK,QAAQ,YACXD,EAAAA,kBAAkB,SAAU,+BAA+B,EAAI,EAAE,CACnE,CACF,CAAC,CACH,CAAC,EACD,IAAM,EAAiB,SAAS,cAAc,OAAO,EAKrD,GAJA,EAAe,aAAA,EAAA,EAAA,QAAA,CAAqB,aAAa,EACjD,EAAe,YAAY,CAAc,EACzC,EAAc,YAAY,CAAc,EAEpC,EAAG,IAAI,KAAK,MAAOC,EAAAA,QAAG,MAAM,WAAW,CAAC,EAC1C,EAAG,MAAM,KAAK,MAAOA,EAAAA,QAAG,MAAM,WAAW,CAAC,CAAC,CAAC,QAAQ,GAAa,CAC/D,IAAM,EAAY,EAAU,OACtB,EAAY,SAAS,cAAc,KAAK,EAC9C,IAAI,EAAO,EAAW,EAAW,KAAK,aAAa,CAAS,CAAC,CAAC,CAAC,OAAO,EACtE,EAAc,YAAY,CAAS,CACrC,CAAC,MACI,CACL,IAAM,EAAO,SAAS,cAAc,GAAG,EACvC,EAAK,YAAc,EAAA,OAAM;;QAGzB,EAAc,YAAY,CAAI,CAChC,CAEA,IAAM,EAAqB,SAAS,cAAc,QAAQ,EAS1D,MARA,GAAmB,aAAA,EAAA,EAAA,QAAA,CAAqB,MAAM,EAC9C,EAAmB,iBAAiB,QAAS,GAAU,CACrD,KAAK,eAAe,KAAK,KAAK,CAChC,CAAC,EACD,EAAc,YAAY,CAAkB,EAE5C,KAAK,QAAQ,UAAY,GACzB,KAAK,QAAQ,YAAY,CAAa,EAC/B,IACT,CAEA,IAAK,EAAO,CACV,OAAO,IAAI,SAAS,EAAS,IAAW,CACtC,EAAG,QAAQ,iBAAiB,GAAQ,EAAI,IAAQ,CAC9C,GAAI,CAAC,EAEH,OADA,KAAK,eAAe,CAAG,EAChB,EAAO,CAAG,EAInB,IAAM,EAAYC,EAAI,UAAU,CAAK,EAC/B,EAAW,EAAG,IAAI,EAAWD,EAAAA,QAAG,IAAI,MAAM,CAAC,EAQjD,MAPI,CAAC,GAAY,CAAC,EAAS,OAAOA,EAAAA,QAAG,KAAK,QAAQ,CAAC,EAC1C,EACD,MACF,oEAAoE,EAAS,MAAM,EACrF,CACF,EAEK,EAAQ,CAAS,CAC1B,CAAC,CACH,CAAC,CAAC,CAAC,KAAK,GAAa,CACnB,IAAM,EAAYC,EAAI,GAAG,KAAK,MAAOD,EAAAA,QAAG,MAAM,WAAW,EAAG,CAAS,EAIrE,OAHI,EAAG,eAAe,CAAS,EACtB,EAEF,EAAM,KAAK,MAAM,IAAI,CAAC,CAAC,IAAK,CAAE,MAAO,CAAC,CAAS,CAAE,CAAC,CAAC,CAAC,SAAW,CACpE,EAAU,IAAM,KAAK,MAAM,IAAI,EAC/B,EAAG,IAAI,CAAS,EAChB,KAAK,eAAe,KAAM,QAAS,CAAS,EAC5C,KAAK,OAAO,CACd,CAAC,CACH,CAAC,CACH,CAEA,aAAc,EAAW,CACvB,MAAO,IAAU,CACf,IAAM,EAAYC,EAAI,GAAG,KAAK,MAAOD,EAAAA,QAAG,MAAM,WAAW,EAAG,CAAS,EACrE,OAAO,EAAM,KAAK,MAAM,IAAI,CAAC,CAAC,IAAK,CAAE,MAAO,CAAC,CAAS,CAAE,CAAC,CAAC,CACvD,UACC,EAAG,OAAO,CAAS,EACnB,KAAK,eAAe,KAAM,UAAW,CAAS,EAC9C,KAAK,OAAO,EACL,GACR,CAAC,CACD,MAAM,GAAO,CACZ,IAAM,EAAO,EAAG,IAAI,EAAWA,EAAAA,QAAG,KAAK,MAAM,CAAC,EACxC,EACJ,GAAQ,EAAK,MACT,oBAAoB,EAAK,MAAM,KAAK,EAAI,GACxC,oBAAoB,EAAU,MAAM,KAAK,EAAI,GACnD,MAAU,MAAM,CAAY,CAC9B,CAAC,CACL,CACF,CAEA,aAAc,EAAM,CAClB,GAAM,CAAE,cAAe,EAAQ,KAAK,IAAI,EAClC,EAAiB,CAAC,KAAK,MAAM,IAAI,EAAG,CAAU,CAAC,CAAC,IAAI,GAAc,CACtE,IAAM,EAAoB,EAAG,MAC3B,KAAK,MACLA,EAAAA,QAAG,MAAM,IAAI,EACb,KACA,CACF,EACM,EAAmBC,EAAI,GAC3B,KAAK,MACLD,EAAAA,QAAG,MAAM,IAAI,EACbC,EAAI,QAAQ,CAAI,CAClB,EACA,OAAO,EAAM,EAAW,MAAO,CAC7B,MAAO,EACP,MAAO,CAAC,CAAgB,CAC1B,CAAC,CAAC,CAAC,KAAK,GAAkB,CACxB,EAAG,iBAAiB,CAAiB,EACrC,EAAiB,IAAM,EACvB,EAAG,IAAI,CAAgB,CACzB,CAAC,CACH,CAAC,EACD,OAAO,QAAQ,IAAI,CAAc,CACnC,CACF,EAIa,EAAb,KAAoB,CAClB,YAAa,EAAS,EAAW,EAAc,CAC7C,KAAK,UAAY,EACjB,KAAK,QAAU,EACf,KAAK,aAAe,CACtB,CAEA,QAAU,CACR,IAAM,EAAY,SAAS,cAAc,KAAK,EAC9C,EAAU,MAAM,QAAU,OAG1B,IAAM,EAAS,EACb,KAAK,UACLD,EAAAA,QAAG,KAAK,KAAK,EACbE,EAAAA,SAAW,gBACb,EACM,EAAa,SAAS,cAAc,KAAK,EAC/C,EAAW,KAAA,EAAA,EAAA,QAAA,CAAa,CAAM,EAC9B,EAAW,MAAQ,KACnB,EAAW,OAAS,KACpB,EAAW,MAAM,OAAS,MAG1B,IAAM,EAAO,EACX,KAAK,UACLF,EAAAA,QAAG,KAAK,MAAM,EACd,IAAI,KAAK,UAAU,EACrB,EACM,EAAW,SAAS,cAAc,MAAM,EAC9C,EAAS,WAAA,EAAA,EAAA,QAAA,CAAmB,CAAI,EAChC,EAAS,MAAM,SAAW,IAC1B,EAAS,MAAM,OAAS,SAExB,IAAM,EAAe,SAAS,cAAc,QAAQ,EAepD,MAdA,GAAa,YAAc,SAC3B,EAAa,iBAAiB,QAAS,GACrC,KAAK,aAAa,CAAC,CAAC,MAAM,GAAO,CAC/B,KAAK,QAAQ,YAAYD,EAAAA,kBAAkB,UAAA,EAAA,EAAA,QAAA,CAAiB,GAAG,GAAK,CAAC,CAAC,CACxE,CAAC,CACH,EACA,EAAa,MAAM,OAAS,MAE5B,EAAU,YAAY,CAAU,EAChC,EAAU,YAAY,CAAQ,EAC9B,EAAU,YAAY,CAAY,EAElC,KAAK,QAAQ,UAAY,GACzB,KAAK,QAAQ,YAAY,CAAS,EAC3B,IACT,CACF,EAEA,SAAS,EAAgB,EAAS,EAAW,EAAc,CACzD,IAAM,EAAS,EAAG,IAAI,EAAS,CAAS,EACxC,OAAO,EAAS,EAAO,MAAQ,CACjC,CAEA,SAAS,EAAO,EAAK,CAAE,QAAO,SAAS,CACrC,OAAO,IAAI,SAAS,EAAS,IAAW,CACtC,EAAG,QAAQ,OAAO,EAAO,GAAQ,EAAK,EAAS,IAAiB,CAC9D,GAAI,CAAC,EACH,OAAO,EACD,MAAM,8BAA8B,EAAI,KAAK,GAAc,CACjE,EAEF,EAAQ,CACV,CAAC,CACH,CAAC,CAUH,CAEA,SAAS,EAAS,EAAM,CACtB,MAAO,CAEL,WAAY,EAAG,IAAI,EAAMC,EAAAA,QAAG,MAAM,YAAY,CAAC,EAC/C,eAAgB,EAAG,IAAI,EAAK,IAAI,CAAC,CAAC,IAAM,QAAQ,CAClD,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peoplePicker.esm.js","names":["ns","uuidv4"],"sources":["../../src/widgets/peoplePicker.js"],"sourcesContent":["/**\n *\n * People Picker Pane\n *\n * This pane offers a mechanism for selecting a set of individuals, groups, or\n * organizations to take some action on.\n *\n * Assumptions\n * - Assumes that the user has a type index entry for vcard:AddressBook. @@ bad assuption\n *\n */\nimport escape from 'escape-html'\nimport { v4 as uuidv4 } from 'uuid'\nimport * as rdf from 'rdflib'\nimport * as debug from '../lib/debug'\n\nimport { makeDropTarget } from './dragAndDrop'\nimport { errorMessageBlock } from './error'\nimport { iconBase } from '../lib/iconBase'\nimport ns from '../lib/ns'\nimport { solidLogicSingleton } from 'solid-logic'\n\nconst kb = solidLogicSingleton.store\n\nexport class PeoplePicker {\n constructor (element, typeIndex, groupPickedCb, options) { // @@ can't expect typeindex to be passed\n this.options = options || {}\n this.element = element\n this.typeIndex = typeIndex\n this.groupPickedCb = groupPickedCb\n this.selectedgroup = this.options.selectedgroup // current selected group if any\n this.onSelectGroup = this.onSelectGroup.bind(this)\n }\n\n render () {\n const container = document.createElement('div')\n container.style.maxWidth = '350px'\n container.style.minHeight = '200px'\n container.style.outline = '1px solid black'\n container.style.display = 'flex'\n\n if (this.selectedgroup) {\n container.style.flexDirection = 'column'\n const selectedGroup = document.createElement('div')\n new Group(selectedGroup, this.selectedgroup).render()\n const changeGroupButton = document.createElement('button')\n changeGroupButton.textContent = escape('Change group')\n changeGroupButton.addEventListener('click', _event => {\n this.selectedgroup = null\n this.render()\n })\n container.appendChild(selectedGroup)\n container.appendChild(changeGroupButton)\n } else {\n this.findAddressBook(this.typeIndex)\n .then(({ book }) => {\n const chooseExistingGroupButton = document.createElement('button')\n chooseExistingGroupButton.textContent = escape(\n 'Pick an existing group'\n )\n chooseExistingGroupButton.style.margin = 'auto'\n chooseExistingGroupButton.addEventListener('click', _event => {\n new GroupPicker(container, book, this.onSelectGroup).render()\n })\n\n const createNewGroupButton = document.createElement('button')\n createNewGroupButton.textContent = escape('Create a new group')\n createNewGroupButton.style.margin = 'auto'\n createNewGroupButton.addEventListener('click', _event => {\n this.createNewGroup(book, this.options.defaultNewGroupName)\n .then(({ group }) => {\n new GroupBuilder(\n this.element,\n book,\n group,\n this.onSelectGroup\n ).render()\n })\n .catch(errorBody => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Error creating a new group. (${errorBody})`)\n )\n )\n })\n })\n\n container.appendChild(chooseExistingGroupButton)\n container.appendChild(createNewGroupButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n })\n .catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Could find your groups. (${err})`)\n )\n )\n })\n }\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n\n findAddressBook (typeIndex) {\n return new Promise((resolve, reject) => {\n kb.fetcher.nowOrWhenFetched(typeIndex, (ok, err) => {\n if (!ok) {\n return reject(err)\n }\n const bookRegistration = kb.any(\n null,\n ns.solid('forClass'),\n ns.vcard('AddressBook')\n )\n if (!bookRegistration) {\n return reject(\n new Error(\n 'no address book registered in the solid type index ' + typeIndex\n )\n )\n }\n const book = kb.any(bookRegistration, ns.solid('instance'))\n if (!book) {\n return reject(new Error('incomplete address book registration'))\n }\n kb.fetcher\n .load(book)\n .then(function (_xhr) {\n return resolve({ book })\n })\n .catch(function (errr) {\n return reject(new Error('Could not load address book ' + errr))\n })\n })\n })\n }\n\n createNewGroup (book, defaultNewGroupName) {\n const { groupIndex, groupContainer } = indexes(book)\n const group = rdf.sym(\n `${groupContainer.uri}${uuidv4().slice(0, 8)}.ttl#this`\n )\n const name = defaultNewGroupName || 'Untitled Group'\n\n // NOTE that order matters here. Unfortunately this type of update is\n // non-atomic in that solid requires us to send two PATCHes, either of which\n // might fail.\n const patchPromises = [group.doc(), groupIndex].map(doc => {\n const typeStatement = rdf.st(group, ns.rdf('type'), ns.vcard('Group'), doc)\n const nameStatement = rdf.st(group, ns.vcard('fn'), name, group.doc(), doc)\n const includesGroupStatement = rdf.st(\n book,\n ns.vcard('includesGroup'),\n group,\n doc\n )\n const toIns = doc.equals(groupIndex)\n ? [typeStatement, nameStatement, includesGroupStatement]\n : [typeStatement, nameStatement]\n return patch(doc.uri, { toIns }).then(() => {\n toIns.forEach(st => {\n kb.add(st)\n })\n })\n })\n return Promise.all(patchPromises)\n .then(() => ({ group }))\n .catch(err => {\n debug.log('Could not create new group. PATCH failed ' + err)\n throw new Error(\n `Couldn't create new group. PATCH failed for (${\n err.xhr ? err.xhr.responseURL : ''\n } )`\n )\n })\n }\n\n onSelectGroup (group) {\n this.selectedgroup = group\n this.groupPickedCb(group)\n this.render()\n }\n}\n\nexport class GroupPicker {\n constructor (element, book, onSelectGroup) {\n this.element = element\n this.book = book\n this.onSelectGroup = onSelectGroup\n }\n\n render () {\n this.loadGroups()\n .then(groups => {\n // render the groups\n const container = document.createElement('div')\n container.style.display = 'flex'\n container.style.flexDirection = 'column'\n groups.forEach(group => {\n const groupButton = document.createElement('button')\n groupButton.addEventListener('click', this.handleClickGroup(group))\n new Group(groupButton, group).render()\n container.appendChild(groupButton)\n })\n this.element.innerHTML = ''\n this.element.appendChild(container)\n })\n .catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`There was an error loading your groups. (${err})`)\n )\n )\n })\n return this\n }\n\n loadGroups () {\n return new Promise((resolve, reject) => {\n const { groupIndex } = indexes(this.book)\n kb.fetcher.nowOrWhenFetched(groupIndex, (ok, err) => {\n if (!ok) {\n return reject(err)\n }\n const groups = kb.each(this.book, ns.vcard('includesGroup'))\n return resolve(groups)\n })\n })\n }\n\n handleClickGroup (group) {\n return _event => {\n this.onSelectGroup(group)\n }\n }\n}\n\nexport class Group {\n constructor (element, group) {\n this.element = element\n this.group = group\n }\n\n render () {\n const container = document.createElement('div')\n container.textContent = escape(\n // @@@@@ need to escape??\n getWithDefault(this.group, ns.vcard('fn'), `[${this.group.value}]`)\n )\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n}\n\nexport class GroupBuilder {\n constructor (element, book, group, doneBuildingCb, groupChangedCb) {\n this.element = element\n this.book = book\n this.group = group\n this.onGroupChanged = (err, changeType, agent) => {\n if (groupChangedCb) {\n groupChangedCb(err, changeType, agent)\n }\n }\n this.groupChangedCb = groupChangedCb\n this.doneBuildingCb = doneBuildingCb\n }\n\n refresh () {\n // TODO: implement\n }\n\n render () {\n const dropContainer = document.createElement('div')\n dropContainer.style.maxWidth = '350px'\n dropContainer.style.minHeight = '200px'\n dropContainer.style.outline = '1px solid black'\n dropContainer.style.display = 'flex'\n dropContainer.style.flexDirection = 'column'\n\n makeDropTarget(dropContainer, uris => {\n uris.forEach(uri => {\n this.add(uri).catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Could not add the given WebId. (${err})`)\n )\n )\n })\n })\n })\n\n const groupNameInput = document.createElement('input')\n groupNameInput.type = 'text'\n groupNameInput.value = getWithDefault(\n this.group,\n ns.vcard('fn'),\n 'Untitled Group'\n )\n groupNameInput.addEventListener('change', event => {\n this.setGroupName(event.target.value).catch(err => {\n this.element.appendChild(\n errorMessageBlock(document, `Error changing group name. (${err})`)\n )\n })\n })\n const groupNameLabel = document.createElement('label')\n groupNameLabel.textContent = escape('Group Name:')\n groupNameLabel.appendChild(groupNameInput)\n dropContainer.appendChild(groupNameLabel)\n\n if (kb.any(this.group, ns.vcard('hasMember'))) {\n kb.match(this.group, ns.vcard('hasMember')).forEach(statement => {\n const webIdNode = statement.object\n const personDiv = document.createElement('div')\n new Person(personDiv, webIdNode, this.handleRemove(webIdNode)).render()\n dropContainer.appendChild(personDiv)\n })\n } else {\n const copy = document.createElement('p')\n copy.textContent = escape`\n To add someone to this group, drag and drop their WebID URL onto the box.\n `\n dropContainer.appendChild(copy)\n }\n\n const doneBuildingButton = document.createElement('button')\n doneBuildingButton.textContent = escape('Done')\n doneBuildingButton.addEventListener('click', _event => {\n this.doneBuildingCb(this.group)\n })\n dropContainer.appendChild(doneBuildingButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(dropContainer)\n return this\n }\n\n add (webId) {\n return new Promise((resolve, reject) => {\n kb.fetcher.nowOrWhenFetched(webId, (ok, err) => {\n if (!ok) {\n this.onGroupChanged(err)\n return reject(err)\n }\n // make sure it's a valid person, group, or entity (for now just handle\n // webId)\n const webIdNode = rdf.namedNode(webId)\n const rdfClass = kb.any(webIdNode, ns.rdf('type'))\n if (!rdfClass || !rdfClass.equals(ns.foaf('Person'))) {\n return reject(\n new Error(\n `Only people supported right now. (tried to add something of type ${rdfClass.value})`\n )\n )\n }\n return resolve(webIdNode)\n })\n }).then(webIdNode => {\n const statement = rdf.st(this.group, ns.vcard('hasMember'), webIdNode)\n if (kb.holdsStatement(statement)) {\n return webIdNode\n }\n return patch(this.group.doc().uri, { toIns: [statement] }).then(() => {\n statement.why = this.group.doc()\n kb.add(statement)\n this.onGroupChanged(null, 'added', webIdNode)\n this.render()\n })\n })\n }\n\n handleRemove (webIdNode) {\n return _event => {\n const statement = rdf.st(this.group, ns.vcard('hasMember'), webIdNode)\n return patch(this.group.doc().uri, { toDel: [statement] })\n .then(() => {\n kb.remove(statement)\n this.onGroupChanged(null, 'removed', webIdNode)\n this.render()\n return true\n })\n .catch(err => {\n const name = kb.any(webIdNode, ns.foaf('name'))\n const errorMessage =\n name && name.value\n ? `Could not remove ${name.value}. (${err})`\n : `Could not remove ${webIdNode.value}. (${err})`\n throw new Error(errorMessage)\n })\n }\n }\n\n setGroupName (name) {\n const { groupIndex } = indexes(this.book)\n const updatePromises = [this.group.doc(), groupIndex].map(namedGraph => {\n const oldNameStatements = kb.match(\n this.group,\n ns.vcard('fn'),\n null,\n namedGraph\n )\n const newNameStatement = rdf.st(\n this.group,\n ns.vcard('fn'),\n rdf.literal(name)\n )\n return patch(namedGraph.value, {\n toDel: oldNameStatements,\n toIns: [newNameStatement]\n }).then(_solidResponse => {\n kb.removeStatements(oldNameStatements)\n newNameStatement.why = namedGraph\n kb.add(newNameStatement)\n })\n })\n return Promise.all(updatePromises)\n }\n}\n// @ignore exporting this only for the unit test\n// @@ TODO maybe I should move this down at end, but for\n// now I will leave it where it was\nexport class Person {\n constructor (element, webIdNode, handleRemove) {\n this.webIdNode = webIdNode\n this.element = element\n this.handleRemove = handleRemove\n }\n\n render () {\n const container = document.createElement('div')\n container.style.display = 'flex'\n\n // TODO: take a look at UI.widgets.setName\n const imgSrc = getWithDefault(\n this.webIdNode,\n ns.foaf('img'),\n iconBase + 'noun_15059.svg'\n )\n const profileImg = document.createElement('img')\n profileImg.src = escape(imgSrc)\n profileImg.width = '50'\n profileImg.height = '50'\n profileImg.style.margin = '5px'\n\n // TODO: take a look at UI.widgets.setImage\n const name = getWithDefault(\n this.webIdNode,\n ns.foaf('name'),\n `[${this.webIdNode}]`\n )\n const nameSpan = document.createElement('span')\n nameSpan.innerHTML = escape(name)\n nameSpan.style.flexGrow = '1'\n nameSpan.style.margin = 'auto 0'\n\n const removeButton = document.createElement('button')\n removeButton.textContent = 'Remove'\n removeButton.addEventListener('click', _event =>\n this.handleRemove().catch(err => {\n this.element.appendChild(errorMessageBlock(document, escape(`${err}`)))\n })\n )\n removeButton.style.margin = '5px'\n\n container.appendChild(profileImg)\n container.appendChild(nameSpan)\n container.appendChild(removeButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n}\n\nfunction getWithDefault (subject, predicate, defaultValue) {\n const object = kb.any(subject, predicate)\n return object ? object.value : defaultValue\n}\n\nfunction patch (url, { toDel, toIns }) {\n return new Promise((resolve, reject) => {\n kb.updater.update(toDel, toIns, (uri, success, errorMessage) => {\n if (!success) {\n return reject(\n new Error(`PATCH failed for resource <${uri}>: ${errorMessage}`)\n )\n }\n resolve()\n })\n })\n // return webClient.patch(url, toDel, toIns)\n // .then(solidResponse => {\n // const status = solidResponse.xhr.status\n // if (status < 200 || status >= 400) {\n // const err = new Error(`PATCH failed for resource <${solidResponse.url}>`)\n // err.solidResponse = solidResponse\n // throw err\n // }\n // })\n}\n\nfunction indexes (book) {\n return {\n // bookIndex: book,\n groupIndex: kb.any(book, ns.vcard('groupIndex')),\n groupContainer: kb.sym(book.dir().uri + 'Group/')\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"peoplePicker.esm.js","names":["ns","uuidv4"],"sources":["../../src/widgets/peoplePicker.js"],"sourcesContent":["/**\n *\n * People Picker Pane\n *\n * This pane offers a mechanism for selecting a set of individuals, groups, or\n * organizations to take some action on.\n *\n * Assumptions\n * - Assumes that the user has a type index entry for vcard:AddressBook. @@ bad assuption\n *\n */\nimport escape from 'escape-html'\nimport { v4 as uuidv4 } from 'uuid'\nimport * as rdf from 'rdflib'\nimport * as debug from '../lib/debug'\n\nimport { makeDropTarget } from './dragAndDrop'\nimport { errorMessageBlock } from './error'\nimport { iconBase } from '../lib/iconBase'\nimport ns from '../lib/ns'\nimport { solidLogicSingleton } from 'solid-logic'\n\nconst kb = solidLogicSingleton.store\n\nexport class PeoplePicker {\n constructor (element, typeIndex, groupPickedCb, options) { // @@ can't expect typeindex to be passed\n this.options = options || {}\n this.element = element\n this.typeIndex = typeIndex\n this.groupPickedCb = groupPickedCb\n this.selectedgroup = this.options.selectedgroup // current selected group if any\n this.onSelectGroup = this.onSelectGroup.bind(this)\n }\n\n render () {\n const container = document.createElement('div')\n container.style.maxWidth = '350px'\n container.style.minHeight = '200px'\n container.style.outline = '1px solid black'\n container.style.display = 'flex'\n\n if (this.selectedgroup) {\n container.style.flexDirection = 'column'\n const selectedGroup = document.createElement('div')\n new Group(selectedGroup, this.selectedgroup).render()\n const changeGroupButton = document.createElement('button')\n changeGroupButton.textContent = escape('Change group')\n changeGroupButton.addEventListener('click', _event => {\n this.selectedgroup = null\n this.render()\n })\n container.appendChild(selectedGroup)\n container.appendChild(changeGroupButton)\n } else {\n this.findAddressBook(this.typeIndex)\n .then(({ book }) => {\n const chooseExistingGroupButton = document.createElement('button')\n chooseExistingGroupButton.textContent = escape(\n 'Pick an existing group'\n )\n chooseExistingGroupButton.style.margin = 'auto'\n chooseExistingGroupButton.addEventListener('click', _event => {\n new GroupPicker(container, book, this.onSelectGroup).render()\n })\n\n const createNewGroupButton = document.createElement('button')\n createNewGroupButton.textContent = escape('Create a new group')\n createNewGroupButton.style.margin = 'auto'\n createNewGroupButton.addEventListener('click', _event => {\n this.createNewGroup(book, this.options.defaultNewGroupName)\n .then(({ group }) => {\n new GroupBuilder(\n this.element,\n book,\n group,\n this.onSelectGroup\n ).render()\n })\n .catch(errorBody => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Error creating a new group. (${errorBody})`)\n )\n )\n })\n })\n\n container.appendChild(chooseExistingGroupButton)\n container.appendChild(createNewGroupButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n })\n .catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Could find your groups. (${err})`)\n )\n )\n })\n }\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n\n findAddressBook (typeIndex) {\n return new Promise((resolve, reject) => {\n kb.fetcher.nowOrWhenFetched(typeIndex, (ok, err) => {\n if (!ok) {\n return reject(err)\n }\n const bookRegistration = kb.any(\n null,\n ns.solid('forClass'),\n ns.vcard('AddressBook')\n )\n if (!bookRegistration) {\n return reject(\n new Error(\n 'no address book registered in the solid type index ' + typeIndex\n )\n )\n }\n const book = kb.any(bookRegistration, ns.solid('instance'))\n if (!book) {\n return reject(new Error('incomplete address book registration'))\n }\n kb.fetcher\n .load(book)\n .then(function (_xhr) {\n return resolve({ book })\n })\n .catch(function (errr) {\n return reject(new Error('Could not load address book ' + errr))\n })\n })\n })\n }\n\n createNewGroup (book, defaultNewGroupName) {\n const { groupIndex, groupContainer } = indexes(book)\n const group = rdf.sym(\n `${groupContainer.uri}${uuidv4().slice(0, 8)}.ttl#this`\n )\n const name = defaultNewGroupName || 'Untitled Group'\n\n // NOTE that order matters here. Unfortunately this type of update is\n // non-atomic in that solid requires us to send two PATCHes, either of which\n // might fail.\n const patchPromises = [group.doc(), groupIndex].map(doc => {\n const typeStatement = rdf.st(group, ns.rdf('type'), ns.vcard('Group'), doc)\n const nameStatement = rdf.st(group, ns.vcard('fn'), name, group.doc(), doc)\n const includesGroupStatement = rdf.st(\n book,\n ns.vcard('includesGroup'),\n group,\n doc\n )\n const toIns = doc.equals(groupIndex)\n ? [typeStatement, nameStatement, includesGroupStatement]\n : [typeStatement, nameStatement]\n return patch(doc.uri, { toIns }).then(() => {\n toIns.forEach(st => {\n kb.add(st)\n })\n })\n })\n return Promise.all(patchPromises)\n .then(() => ({ group }))\n .catch(err => {\n debug.log('Could not create new group. PATCH failed ' + err)\n throw new Error(\n `Couldn't create new group. PATCH failed for (${\n err.xhr ? err.xhr.responseURL : ''\n } )`\n )\n })\n }\n\n onSelectGroup (group) {\n this.selectedgroup = group\n this.groupPickedCb(group)\n this.render()\n }\n}\n\nexport class GroupPicker {\n constructor (element, book, onSelectGroup) {\n this.element = element\n this.book = book\n this.onSelectGroup = onSelectGroup\n }\n\n render () {\n this.loadGroups()\n .then(groups => {\n // render the groups\n const container = document.createElement('div')\n container.style.display = 'flex'\n container.style.flexDirection = 'column'\n groups.forEach(group => {\n const groupButton = document.createElement('button')\n groupButton.addEventListener('click', this.handleClickGroup(group))\n new Group(groupButton, group).render()\n container.appendChild(groupButton)\n })\n this.element.innerHTML = ''\n this.element.appendChild(container)\n })\n .catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`There was an error loading your groups. (${err})`)\n )\n )\n })\n return this\n }\n\n loadGroups () {\n return new Promise((resolve, reject) => {\n const { groupIndex } = indexes(this.book)\n kb.fetcher.nowOrWhenFetched(groupIndex, (ok, err) => {\n if (!ok) {\n return reject(err)\n }\n const groups = kb.each(this.book, ns.vcard('includesGroup'))\n return resolve(groups)\n })\n })\n }\n\n handleClickGroup (group) {\n return _event => {\n this.onSelectGroup(group)\n }\n }\n}\n\nexport class Group {\n constructor (element, group) {\n this.element = element\n this.group = group\n }\n\n render () {\n const container = document.createElement('div')\n container.textContent = escape(\n // @@@@@ need to escape??\n getWithDefault(this.group, ns.vcard('fn'), `[${this.group.value}]`)\n )\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n}\n\nexport class GroupBuilder {\n constructor (element, book, group, doneBuildingCb, groupChangedCb) {\n this.element = element\n this.book = book\n this.group = group\n this.onGroupChanged = (err, changeType, agent) => {\n if (groupChangedCb) {\n groupChangedCb(err, changeType, agent)\n }\n }\n this.groupChangedCb = groupChangedCb\n this.doneBuildingCb = doneBuildingCb\n }\n\n refresh () {\n // TODO: implement\n }\n\n render () {\n const dropContainer = document.createElement('div')\n dropContainer.style.maxWidth = '350px'\n dropContainer.style.minHeight = '200px'\n dropContainer.style.outline = '1px solid black'\n dropContainer.style.display = 'flex'\n dropContainer.style.flexDirection = 'column'\n\n makeDropTarget(dropContainer, uris => {\n uris.forEach(uri => {\n this.add(uri).catch(err => {\n this.element.appendChild(\n errorMessageBlock(\n document,\n escape(`Could not add the given WebId. (${err})`)\n )\n )\n })\n })\n })\n\n const groupNameInput = document.createElement('input')\n groupNameInput.type = 'text'\n groupNameInput.value = getWithDefault(\n this.group,\n ns.vcard('fn'),\n 'Untitled Group'\n )\n groupNameInput.addEventListener('change', event => {\n this.setGroupName(event.target.value).catch(err => {\n this.element.appendChild(\n errorMessageBlock(document, `Error changing group name. (${err})`)\n )\n })\n })\n const groupNameLabel = document.createElement('label')\n groupNameLabel.textContent = escape('Group Name:')\n groupNameLabel.appendChild(groupNameInput)\n dropContainer.appendChild(groupNameLabel)\n\n if (kb.any(this.group, ns.vcard('hasMember'))) {\n kb.match(this.group, ns.vcard('hasMember')).forEach(statement => {\n const webIdNode = statement.object\n const personDiv = document.createElement('div')\n new Person(personDiv, webIdNode, this.handleRemove(webIdNode)).render()\n dropContainer.appendChild(personDiv)\n })\n } else {\n const copy = document.createElement('p')\n copy.textContent = escape`\n To add someone to this group, drag and drop their WebID URL onto the box.\n `\n dropContainer.appendChild(copy)\n }\n\n const doneBuildingButton = document.createElement('button')\n doneBuildingButton.textContent = escape('Done')\n doneBuildingButton.addEventListener('click', _event => {\n this.doneBuildingCb(this.group)\n })\n dropContainer.appendChild(doneBuildingButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(dropContainer)\n return this\n }\n\n add (webId) {\n return new Promise((resolve, reject) => {\n kb.fetcher.nowOrWhenFetched(webId, (ok, err) => {\n if (!ok) {\n this.onGroupChanged(err)\n return reject(err)\n }\n // make sure it's a valid person, group, or entity (for now just handle\n // webId)\n const webIdNode = rdf.namedNode(webId)\n const rdfClass = kb.any(webIdNode, ns.rdf('type'))\n if (!rdfClass || !rdfClass.equals(ns.foaf('Person'))) {\n return reject(\n new Error(\n `Only people supported right now. (tried to add something of type ${rdfClass.value})`\n )\n )\n }\n return resolve(webIdNode)\n })\n }).then(webIdNode => {\n const statement = rdf.st(this.group, ns.vcard('hasMember'), webIdNode)\n if (kb.holdsStatement(statement)) {\n return webIdNode\n }\n return patch(this.group.doc().uri, { toIns: [statement] }).then(() => {\n statement.why = this.group.doc()\n kb.add(statement)\n this.onGroupChanged(null, 'added', webIdNode)\n this.render()\n })\n })\n }\n\n handleRemove (webIdNode) {\n return _event => {\n const statement = rdf.st(this.group, ns.vcard('hasMember'), webIdNode)\n return patch(this.group.doc().uri, { toDel: [statement] })\n .then(() => {\n kb.remove(statement)\n this.onGroupChanged(null, 'removed', webIdNode)\n this.render()\n return true\n })\n .catch(err => {\n const name = kb.any(webIdNode, ns.foaf('name'))\n const errorMessage =\n name && name.value\n ? `Could not remove ${name.value}. (${err})`\n : `Could not remove ${webIdNode.value}. (${err})`\n throw new Error(errorMessage)\n })\n }\n }\n\n setGroupName (name) {\n const { groupIndex } = indexes(this.book)\n const updatePromises = [this.group.doc(), groupIndex].map(namedGraph => {\n const oldNameStatements = kb.match(\n this.group,\n ns.vcard('fn'),\n null,\n namedGraph\n )\n const newNameStatement = rdf.st(\n this.group,\n ns.vcard('fn'),\n rdf.literal(name)\n )\n return patch(namedGraph.value, {\n toDel: oldNameStatements,\n toIns: [newNameStatement]\n }).then(_solidResponse => {\n kb.removeStatements(oldNameStatements)\n newNameStatement.why = namedGraph\n kb.add(newNameStatement)\n })\n })\n return Promise.all(updatePromises)\n }\n}\n// @ignore exporting this only for the unit test\n// @@ TODO maybe I should move this down at end, but for\n// now I will leave it where it was\nexport class Person {\n constructor (element, webIdNode, handleRemove) {\n this.webIdNode = webIdNode\n this.element = element\n this.handleRemove = handleRemove\n }\n\n render () {\n const container = document.createElement('div')\n container.style.display = 'flex'\n\n // TODO: take a look at UI.widgets.setName\n const imgSrc = getWithDefault(\n this.webIdNode,\n ns.foaf('img'),\n iconBase + 'noun_15059.svg'\n )\n const profileImg = document.createElement('img')\n profileImg.src = escape(imgSrc)\n profileImg.width = '50'\n profileImg.height = '50'\n profileImg.style.margin = '5px'\n\n // TODO: take a look at UI.widgets.setImage\n const name = getWithDefault(\n this.webIdNode,\n ns.foaf('name'),\n `[${this.webIdNode}]`\n )\n const nameSpan = document.createElement('span')\n nameSpan.innerHTML = escape(name)\n nameSpan.style.flexGrow = '1'\n nameSpan.style.margin = 'auto 0'\n\n const removeButton = document.createElement('button')\n removeButton.textContent = 'Remove'\n removeButton.addEventListener('click', _event =>\n this.handleRemove().catch(err => {\n this.element.appendChild(errorMessageBlock(document, escape(`${err}`)))\n })\n )\n removeButton.style.margin = '5px'\n\n container.appendChild(profileImg)\n container.appendChild(nameSpan)\n container.appendChild(removeButton)\n\n this.element.innerHTML = ''\n this.element.appendChild(container)\n return this\n }\n}\n\nfunction getWithDefault (subject, predicate, defaultValue) {\n const object = kb.any(subject, predicate)\n return object ? object.value : defaultValue\n}\n\nfunction patch (url, { toDel, toIns }) {\n return new Promise((resolve, reject) => {\n kb.updater.update(toDel, toIns, (uri, success, errorMessage) => {\n if (!success) {\n return reject(\n new Error(`PATCH failed for resource <${uri}>: ${errorMessage}`)\n )\n }\n resolve()\n })\n })\n // return webClient.patch(url, toDel, toIns)\n // .then(solidResponse => {\n // const status = solidResponse.xhr.status\n // if (status < 200 || status >= 400) {\n // const err = new Error(`PATCH failed for resource <${solidResponse.url}>`)\n // err.solidResponse = solidResponse\n // throw err\n // }\n // })\n}\n\nfunction indexes (book) {\n return {\n // bookIndex: book,\n groupIndex: kb.any(book, ns.vcard('groupIndex')),\n groupContainer: kb.sym(book.dir().uri + 'Group/')\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widgetHelpers.cjs.js","names":[],"sources":["../../src/widgets/widgetHelpers.ts"],"sourcesContent":["import { style } from '../lib/style'\n\n/**\n * Wraps a Div in a TR/RD\n *\n * Takes a div and wraps it in a TR/TD to be backwards compatible to the\n * table structure of mashlib\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param div the created widget will be appended to this\n * @param obj not sure what this is used for exactly\n *\n * @returns The HTML widget created\n *\n * @internal exporting this only for unit tests\n */\n\nexport const wrapDivInATR = (dom: HTMLDocument, div: HTMLDivElement, obj: any) => {\n const tr = dom.createElement('tr')\n const td = tr.appendChild(dom.createElement('td'))\n td.appendChild(div)\n ;(tr as any).subject = obj\n return tr\n}\n\n/**\n * Adds a click listener to a div\n *\n * Adds a given function as a click listener on the given div\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param onClickFunction the click function to add to the click listener\n *\n * @returns The HTML widget created\n *\n * @internal exporting this only for unit tests\n */\n\nexport const addClickListenerToElement = (div: HTMLDivElement, onClickFunction: () => void) => {\n div.addEventListener('click', onClickFunction)\n}\n\n/**\n * Wraps a Div in a TR/RD\n *\n * Takes a div and wraps it in a TR/TD to be backwards compatible to the\n * table structure of mashlib\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param div the created widget will be appended to this\n * @param obj not sure what this is used for exactly\n *\n * @returns The HTML widget created\n *\n * @internal exporting this only for unit tests\n */\n\nexport const createImageDiv = (dom: HTMLDocument, div: HTMLDivElement, image: HTMLImageElement | HTMLObjectElement) => {\n const imageDiv = div.appendChild(dom.createElement('div'))\n\n imageDiv.setAttribute('style', style.imageDivStyle)\n imageDiv.appendChild(image)\n image.setAttribute('draggable', 'false') // Stop the image being dragged instead - just the TR\n}\n"],"mappings":"uCAiBA,IAAa,GAAgB,EAAmB,EAAqB,IAAa,CAChF,IAAM,EAAK,EAAI,cAAc,IAAI,EAIjC,OAFA,EADc,YAAY,EAAI,cAAc,IAAI,CAChD,
|
|
1
|
+
{"version":3,"file":"widgetHelpers.cjs.js","names":[],"sources":["../../src/widgets/widgetHelpers.ts"],"sourcesContent":["import { style } from '../lib/style'\n\n/**\n * Wraps a Div in a TR/RD\n *\n * Takes a div and wraps it in a TR/TD to be backwards compatible to the\n * table structure of mashlib\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param div the created widget will be appended to this\n * @param obj not sure what this is used for exactly\n *\n * @returns The HTML widget created\n *\n * @internal exporting this only for unit tests\n */\n\nexport const wrapDivInATR = (dom: HTMLDocument, div: HTMLDivElement, obj: any) => {\n const tr = dom.createElement('tr')\n const td = tr.appendChild(dom.createElement('td'))\n td.appendChild(div)\n ;(tr as any).subject = obj\n return tr\n}\n\n/**\n * Adds a click listener to a div\n *\n * Adds a given function as a click listener on the given div\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param onClickFunction the click function to add to the click listener\n *\n * @returns The HTML widget created\n *\n * @internal exporting this only for unit tests\n */\n\nexport const addClickListenerToElement = (div: HTMLDivElement, onClickFunction: () => void) => {\n div.addEventListener('click', onClickFunction)\n}\n\n/**\n * Wraps a Div in a TR/RD\n *\n * Takes a div and wraps it in a TR/TD to be backwards compatible to the\n * table structure of mashlib\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param div the created widget will be appended to this\n * @param obj not sure what this is used for exactly\n *\n * @returns The HTML widget created\n *\n * @internal exporting this only for unit tests\n */\n\nexport const createImageDiv = (dom: HTMLDocument, div: HTMLDivElement, image: HTMLImageElement | HTMLObjectElement) => {\n const imageDiv = div.appendChild(dom.createElement('div'))\n\n imageDiv.setAttribute('style', style.imageDivStyle)\n imageDiv.appendChild(image)\n image.setAttribute('draggable', 'false') // Stop the image being dragged instead - just the TR\n}\n"],"mappings":"uCAiBA,IAAa,GAAgB,EAAmB,EAAqB,IAAa,CAChF,IAAM,EAAK,EAAI,cAAc,IAAI,EAIjC,OAFA,EADc,YAAY,EAAI,cAAc,IAAI,CAChD,CAAA,CAAG,YAAY,CAAG,EACjB,EAAY,QAAU,EAChB,CACT,EAea,GAA6B,EAAqB,IAAgC,CAC7F,EAAI,iBAAiB,QAAS,CAAe,CAC/C,EAiBa,GAAkB,EAAmB,EAAqB,IAAgD,CACrH,IAAM,EAAW,EAAI,YAAY,EAAI,cAAc,KAAK,CAAC,EAEzD,EAAS,aAAa,QAAS,EAAA,MAAM,aAAa,EAClD,EAAS,YAAY,CAAK,EAC1B,EAAM,aAAa,YAAa,OAAO,CACzC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widgetHelpers.esm.js","names":[],"sources":["../../src/widgets/widgetHelpers.ts"],"sourcesContent":["import { style } from '../lib/style'\n\n/**\n * Wraps a Div in a TR/RD\n *\n * Takes a div and wraps it in a TR/TD to be backwards compatible to the\n * table structure of mashlib\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param div the created widget will be appended to this\n * @param obj not sure what this is used for exactly\n *\n * @returns The HTML widget created\n *\n * @internal exporting this only for unit tests\n */\n\nexport const wrapDivInATR = (dom: HTMLDocument, div: HTMLDivElement, obj: any) => {\n const tr = dom.createElement('tr')\n const td = tr.appendChild(dom.createElement('td'))\n td.appendChild(div)\n ;(tr as any).subject = obj\n return tr\n}\n\n/**\n * Adds a click listener to a div\n *\n * Adds a given function as a click listener on the given div\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param onClickFunction the click function to add to the click listener\n *\n * @returns The HTML widget created\n *\n * @internal exporting this only for unit tests\n */\n\nexport const addClickListenerToElement = (div: HTMLDivElement, onClickFunction: () => void) => {\n div.addEventListener('click', onClickFunction)\n}\n\n/**\n * Wraps a Div in a TR/RD\n *\n * Takes a div and wraps it in a TR/TD to be backwards compatible to the\n * table structure of mashlib\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param div the created widget will be appended to this\n * @param obj not sure what this is used for exactly\n *\n * @returns The HTML widget created\n *\n * @internal exporting this only for unit tests\n */\n\nexport const createImageDiv = (dom: HTMLDocument, div: HTMLDivElement, image: HTMLImageElement | HTMLObjectElement) => {\n const imageDiv = div.appendChild(dom.createElement('div'))\n\n imageDiv.setAttribute('style', style.imageDivStyle)\n imageDiv.appendChild(image)\n image.setAttribute('draggable', 'false') // Stop the image being dragged instead - just the TR\n}\n"],"mappings":";;AAiBA,IAAa,KAAgB,GAAmB,GAAqB,MAAa;CAChF,IAAM,IAAK,EAAI,cAAc,IAAI;CAIjC,OAFA,EADc,YAAY,EAAI,cAAc,IAAI,CAChD,
|
|
1
|
+
{"version":3,"file":"widgetHelpers.esm.js","names":[],"sources":["../../src/widgets/widgetHelpers.ts"],"sourcesContent":["import { style } from '../lib/style'\n\n/**\n * Wraps a Div in a TR/RD\n *\n * Takes a div and wraps it in a TR/TD to be backwards compatible to the\n * table structure of mashlib\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param div the created widget will be appended to this\n * @param obj not sure what this is used for exactly\n *\n * @returns The HTML widget created\n *\n * @internal exporting this only for unit tests\n */\n\nexport const wrapDivInATR = (dom: HTMLDocument, div: HTMLDivElement, obj: any) => {\n const tr = dom.createElement('tr')\n const td = tr.appendChild(dom.createElement('td'))\n td.appendChild(div)\n ;(tr as any).subject = obj\n return tr\n}\n\n/**\n * Adds a click listener to a div\n *\n * Adds a given function as a click listener on the given div\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param onClickFunction the click function to add to the click listener\n *\n * @returns The HTML widget created\n *\n * @internal exporting this only for unit tests\n */\n\nexport const addClickListenerToElement = (div: HTMLDivElement, onClickFunction: () => void) => {\n div.addEventListener('click', onClickFunction)\n}\n\n/**\n * Wraps a Div in a TR/RD\n *\n * Takes a div and wraps it in a TR/TD to be backwards compatible to the\n * table structure of mashlib\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param div the created widget will be appended to this\n * @param obj not sure what this is used for exactly\n *\n * @returns The HTML widget created\n *\n * @internal exporting this only for unit tests\n */\n\nexport const createImageDiv = (dom: HTMLDocument, div: HTMLDivElement, image: HTMLImageElement | HTMLObjectElement) => {\n const imageDiv = div.appendChild(dom.createElement('div'))\n\n imageDiv.setAttribute('style', style.imageDivStyle)\n imageDiv.appendChild(image)\n image.setAttribute('draggable', 'false') // Stop the image being dragged instead - just the TR\n}\n"],"mappings":";;AAiBA,IAAa,KAAgB,GAAmB,GAAqB,MAAa;CAChF,IAAM,IAAK,EAAI,cAAc,IAAI;CAIjC,OAFA,EADc,YAAY,EAAI,cAAc,IAAI,CAChD,CAAA,CAAG,YAAY,CAAG,GACjB,EAAY,UAAU,GAChB;AACT,GAea,KAA6B,GAAqB,MAAgC;CAC7F,EAAI,iBAAiB,SAAS,CAAe;AAC/C,GAiBa,KAAkB,GAAmB,GAAqB,MAAgD;CACrH,IAAM,IAAW,EAAI,YAAY,EAAI,cAAc,KAAK,CAAC;CAIzD,AAFA,EAAS,aAAa,SAAS,EAAM,aAAa,GAClD,EAAS,YAAY,CAAK,GAC1B,EAAM,aAAa,aAAa,OAAO;AACzC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "solid-ui",
|
|
3
|
-
"version": "3.1.3-
|
|
3
|
+
"version": "3.1.3-7",
|
|
4
4
|
"description": "UI library for Solid applications",
|
|
5
5
|
"main": "dist/index.cjs.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -92,11 +92,10 @@
|
|
|
92
92
|
"escape-html": "^1.0.3",
|
|
93
93
|
"lit": "^3.3.3",
|
|
94
94
|
"mime-types": "^3.0.2",
|
|
95
|
-
"pane-registry": "3.1.2-
|
|
96
|
-
"rdflib": "2.
|
|
97
|
-
"solid-logic": "4.0.8-
|
|
95
|
+
"pane-registry": "3.1.2-1",
|
|
96
|
+
"rdflib": "2.4.0",
|
|
97
|
+
"solid-logic": "4.0.8-1",
|
|
98
98
|
"solid-namespace": "^0.5.4",
|
|
99
|
-
"tailwindcss": "4.3.0",
|
|
100
99
|
"uuid": "^14.0.0"
|
|
101
100
|
},
|
|
102
101
|
"devDependencies": {
|
|
@@ -112,7 +111,6 @@
|
|
|
112
111
|
"@babel/preset-typescript": "^7.28.5",
|
|
113
112
|
"@eslint/js": "^9.39.4",
|
|
114
113
|
"@iconify/json": "2.2.481",
|
|
115
|
-
"@mdx-js/react": "^3.1.1",
|
|
116
114
|
"@rolldown/plugin-babel": "^0.2.3",
|
|
117
115
|
"@storybook/addon-docs": "10.4.2",
|
|
118
116
|
"@storybook/addon-links": "10.4.2",
|
|
@@ -122,7 +120,7 @@
|
|
|
122
120
|
"@testing-library/dom": "^10.4.1",
|
|
123
121
|
"@testing-library/user-event": "^13.5.0",
|
|
124
122
|
"@types/jsdom": "^28.0.3",
|
|
125
|
-
"@types/node": "^
|
|
123
|
+
"@types/node": "^24.13.2",
|
|
126
124
|
"@typescript-eslint/parser": "^8.59.3",
|
|
127
125
|
"@vitest/coverage-v8": "^4.0.18",
|
|
128
126
|
"concurrently": "^10.0.3",
|
|
@@ -140,12 +138,12 @@
|
|
|
140
138
|
"patch-package": "^8.0.1",
|
|
141
139
|
"path-browserify": "^1.0.1",
|
|
142
140
|
"postcss": "^8.5.15",
|
|
143
|
-
"
|
|
144
|
-
"react-dom": "^17.0.2",
|
|
145
|
-
"react-is": "^17.0.2",
|
|
141
|
+
"solidos-toolkit": "dev",
|
|
146
142
|
"storybook": "10.4.2",
|
|
143
|
+
"tailwindcss": "4.3.0",
|
|
147
144
|
"typedoc": "^0.28.19",
|
|
148
145
|
"typescript": "^5.9.3",
|
|
146
|
+
"undici-types": "^7.18.2",
|
|
149
147
|
"unplugin-dts": "^1.0.2",
|
|
150
148
|
"unplugin-icons": "^23.0.1",
|
|
151
149
|
"vite": "^8.0.16",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DialogProvider-DphduSXG.js","names":["e","t","i","t","customElement","WebComponent","provide","property","dialogContext","_classDecs","_DialogProvider","_A","WeakMap","_B","_ref","_dialogIdDecs","type","String","reflect","_dialogDecs","context","DialogProvider","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_dialogId","_init_dialog","id","_classPrivateFieldGet","dialogId","v","_classPrivateFieldSet","dialog","willUpdate","changedProperties","has","firstUpdated","slot","shadowRoot","lastChild","dispatchEvent","CustomEvent","bubbles","composed","detail","assignedElements","_DialogProvider2","e","c","_initClass","_applyDecs","default"],"sources":["../../node_modules/@lit/context/lib/value-notifier.js","../../node_modules/@lit/context/lib/controllers/context-provider.js","../../node_modules/@lit/context/lib/decorators/provide.js","../../src/components/dialog-provider/DialogProvider.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nclass s{get value(){return this.o}set value(s){this.setValue(s)}setValue(s,t=!1){const i=t||!Object.is(s,this.o);this.o=s,i&&this.updateObservers()}constructor(s){this.subscriptions=new Map,this.updateObservers=()=>{for(const[s,{disposer:t}]of this.subscriptions)s(this.o,t)},void 0!==s&&(this.value=s)}addCallback(s,t,i){if(!i)return void s(this.value);this.subscriptions.has(s)||this.subscriptions.set(s,{disposer:()=>{this.subscriptions.delete(s)},consumerHost:t});const{disposer:h}=this.subscriptions.get(s);s(this.value,h)}clearCallbacks(){this.subscriptions.clear()}}export{s as ValueNotifier};\n//# sourceMappingURL=value-notifier.js.map\n","import{ContextRequestEvent as t}from\"../context-request-event.js\";import{ValueNotifier as s}from\"../value-notifier.js\";\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class e extends Event{constructor(t,s){super(\"context-provider\",{bubbles:!0,composed:!0}),this.context=t,this.contextTarget=s}}class i extends s{constructor(s,e,i){super(void 0!==e.context?e.initialValue:i),this.onContextRequest=t=>{if(t.context!==this.context)return;const s=t.contextTarget??t.composedPath()[0];s!==this.host&&(t.stopPropagation(),this.addCallback(t.callback,s,t.subscribe))},this.onProviderRequest=s=>{if(s.context!==this.context)return;if((s.contextTarget??s.composedPath()[0])===this.host)return;const e=new Set;for(const[s,{consumerHost:i}]of this.subscriptions)e.has(s)||(e.add(s),i.dispatchEvent(new t(this.context,i,s,!0)));s.stopPropagation()},this.host=s,void 0!==e.context?this.context=e.context:this.context=e,this.attachListeners(),this.host.addController?.(this)}attachListeners(){this.host.addEventListener(\"context-request\",this.onContextRequest),this.host.addEventListener(\"context-provider\",this.onProviderRequest)}hostConnected(){this.host.dispatchEvent(new e(this.context,this.host))}}export{i as ContextProvider,e as ContextProviderEvent};\n//# sourceMappingURL=context-provider.js.map\n","import{ContextProvider as t}from\"../controllers/context-provider.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e({context:e}){return(n,i)=>{const r=new WeakMap;if(\"object\"==typeof i)return{get(){return n.get.call(this)},set(t){return r.get(this).setValue(t),n.set.call(this,t)},init(n){return r.set(this,new t(this,{context:e,initialValue:n})),n}};{n.constructor.addInitializer((n=>{r.set(n,new t(n,{context:e}))}));const o=Object.getOwnPropertyDescriptor(n,i);let s;if(void 0===o){const t=new WeakMap;s={get(){return t.get(this)},set(e){r.get(this).setValue(e),t.set(this,e)},configurable:!0,enumerable:!0}}else{const t=o.set;s={...o,set(e){r.get(this).setValue(e),t?.call(this,e)}}}return void Object.defineProperty(n,i,s)}}}export{e as provide};\n//# sourceMappingURL=provide.js.map\n","import { customElement, WebComponent } from '@/lib/components'\nimport { provide } from '@lit/context'\nimport { property } from 'lit/decorators.js'\nimport { DialogContext, dialogContext } from '@/lib/dialogs/context'\n\n@customElement('solid-ui-dialog-provider')\nexport default class DialogProvider extends WebComponent {\n @property({ type: String, reflect: true })\n accessor dialogId: string | undefined\n\n @provide({ context: dialogContext })\n private accessor dialog: DialogContext = { id: '' }\n\n protected willUpdate (changedProperties: Map<string, any>) {\n super.willUpdate(changedProperties)\n\n if (changedProperties.has('dialogId') && this.dialogId) {\n this.dialog = { id: this.dialogId }\n }\n }\n\n protected firstUpdated () {\n const slot = this.shadowRoot?.lastChild as HTMLSlotElement | undefined\n\n this.dispatchEvent(new CustomEvent('mounted', { bubbles: true, composed: true, detail: slot?.assignedElements()[0] }))\n }\n}\n"],"x_google_ignoreList":[0,1,2],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"account-CFhrB0LO.js","names":["consume","html","customElement","WebComponent","authContext","DEFAULT_AUTH_CONTEXT","styles","_classDecs","_Account","_Account2","_A","WeakMap","_ref","_authDecs","context","subscribe","_Account3","Account","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_auth","_defineProperty","_classPrivateFieldGet","auth","v","_classPrivateFieldSet","connectedCallback","unsubscribeSessionUpdated","onSessionUpdated","requestUpdate","disconnectedCallback","render","account","e","c","_initClass","_applyDecs","_Class","_identity","loggedIn","component","default","Account"],"sources":["../../src/components/account/Account.styles.css","../../src/components/account/Account.ts","../../src/components/account/index.ts"],"sourcesContent":[":host {\n display: inline-flex;\n flex-direction: row;\n gap: 10px;\n}\n\n:host(:state(loggedIn)) {\n --padding: 4px;\n --border-width: 1px;\n --image-size: 1.875rem; /* 30px */\n\n button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 5px;\n background-color: var(--solid-ui-color-body-grey);\n padding: var(--padding);\n border-radius: calc((var(--image-size) + 2 * var(--padding) + 2 * var(--border-width)) / 2);\n color: var(--solid-ui-color-white);\n\n solid-ui-avatar {\n width: var(--image-size);\n height: var(--image-size);\n border: var(--border-width) solid var(--solid-ui-color-white);\n border-radius: 50%;\n }\n\n icon-lucide-chevron-down {\n width: 16px;\n height: 16px;\n }\n }\n}\n","import { consume } from '@lit/context'\nimport { html } from 'lit'\nimport { customElement, WebComponent } from '@/lib/components'\nimport { authContext, AuthContext, DEFAULT_AUTH_CONTEXT } from '@/lib/auth'\n\nimport '@/components/avatar'\nimport '@/components/button'\nimport '@/components/login-button'\nimport '@/components/logout-button'\nimport '@/components/menu-item'\nimport '@/components/menu'\nimport '@/components/signup-button'\nimport '~icons/lucide/chevron-down'\nimport '~icons/lucide/log-in'\nimport '~icons/lucide/log-out'\nimport '~icons/lucide/user'\n\nimport styles from './Account.styles.css'\n\n@customElement('solid-ui-account')\nexport default class Account extends WebComponent {\n static styles = styles\n static states = {\n loggedIn: (component: Account) => !!component.auth.account,\n }\n\n @consume({ context: authContext, subscribe: true })\n private accessor auth: AuthContext = DEFAULT_AUTH_CONTEXT\n\n private unsubscribeSessionUpdated?: () => void\n\n connectedCallback () {\n super.connectedCallback()\n\n this.unsubscribeSessionUpdated = this.auth.onSessionUpdated(() => this.requestUpdate())\n }\n\n disconnectedCallback () {\n super.disconnectedCallback()\n\n this.unsubscribeSessionUpdated?.()\n }\n\n protected render () {\n if (!this.auth.account) {\n return html`\n <solid-ui-login-button>\n <solid-ui-button slot=\"trigger\">\n <icon-lucide-user slot=\"left-icon\"></icon-lucide-user>\n Log In\n </solid-ui-button>\n </solid-ui-login-button>\n <solid-ui-signup-button>\n <solid-ui-button slot=\"trigger\" variant=\"outline\">\n <icon-lucide-log-in slot=\"left-icon\"></icon-lucide-log-in>\n Sign Up\n </solid-ui-button>\n </solid-ui-signup-button>\n `\n }\n\n return html`\n <solid-ui-menu placement=\"bottom-end\" distance=\"5\">\n <button type=\"button\" slot=\"trigger\">\n <solid-ui-avatar></solid-ui-avatar>\n <icon-lucide-chevron-down slot=\"right-icon\"></icon-lucide-chevron-down>\n </button>\n\n <solid-ui-logout-button>\n <solid-ui-menu-item slot=\"trigger\">\n <icon-lucide-log-out slot=\"left-icon\"></icon-lucide-log-out>\n Sign out\n </solid-ui-menu-item>\n </solid-ui-logout-button>\n </solid-ui-menu>\n `\n }\n}\n","import Account from './Account'\n\nexport { Account }\nexport default Account\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACiByCO,IAAA,CAExCL,EAAc,kBAAkB,CAAC;AAAA,IAAAM;AAAA,KAAAC,KAAAC,kBAAA,IAAAC,QAAA,GAAAC,KAAAC,IAO/Bb,EAAQ;CAAEc,SAASV;CAAaW,WAAW;AAAK,CAAC,GAAC,SAAAC,IAPrD,cACqCb,EAAa;CAAAe,YAAA,GAAAC,GAAA;EAOSI,AAPT,MAAA,GAAAJ,CAAA,GAAAC,EAAA,MAAAV,IAAAW,EAAA,IAAA,GAAAC,EAAA,MAOXjB,CAAoB,EAAA,GAAAkB,EAAA,MAAA,6BAAA,KAAA,CAAA;CAAA;CAAA,KAAAX,KAAA;EAAA,OAAAY,EAAAd,GAAA,IAAA;CAAA;CAAA,IAAxCe,KAAIC,GAAA;EAAAC,EAAAjB,GAAA,MAAAgB,CAAA;CAAA;CAIrBE,oBAAqB;EAGnB,AAFA,MAAMA,kBAAkB,GAExB,KAAKC,4BAA4B,KAAKJ,KAAKK,uBAAuB,KAAKC,cAAc,CAAC;CACxF;CAEAC,uBAAwB;EAGtB,AAFA,MAAMA,qBAAqB,GAE3B,KAAKH,4BAA4B;CACnC;CAEUI,SAAU;EAkBlB,OAjBK,KAAKR,KAAKS,UAiBRjC,CAAI;;;;;;;;;;;;;;QAhBFA,CAAI;;;;;;;;;;;;;;CA+Bf;AACF,GAAC,CAAAkC,GAAA,CAAAb,GAAAD,IAAAe,GAAA,CAAA5B,GAAA6B,MAAAC,EAAAtB,GAAA,CAAA;CAAAH;CAAA;CAAA;AAAA,CAAA,GAAAN,GAAA,GAAA,KAAA,GAzDoCJ,CAAY,GAAAa,IAAAuB,IAAA,cAAAC,EAAA;CAAAtB,cAAA;EAAA,MAAAV,CAAA,GAAAe,EAAA,MAAA,UAC/BjB,CAAM,GAAAiB,EAAA,MAAA,UACN,EACdkB,WAAWC,MAAuB,CAAC,CAACA,EAAUjB,KAAKS,QACrD,CAAC,GAAAG,EAAA;CAAA;AAAA,GAAAd,EAAAgB,GAAA9B,GAAA,KAAA,CAAA,GAAA8B,GAAA;;;ACrBH,IAAA,IAAeK"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"avatar-D281qln0.js","names":["customElement","WebComponent","consume","html","authContext","DEFAULT_AUTH_CONTEXT","styles","_classDecs","_Avatar","_Avatar2","_A","WeakMap","_ref","_authDecs","context","subscribe","_Avatar3","Avatar","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_auth","_classPrivateFieldGet","auth","v","_classPrivateFieldSet","render","account","avatarUrl","e","c","_initClass","_applyDecs","_Class","_identity","_defineProperty","fallback","component","default","Avatar"],"sources":["../../src/components/avatar/Avatar.styles.css","../../src/components/avatar/Avatar.ts","../../src/components/avatar/index.ts"],"sourcesContent":[":host {\n --size: 150px;\n\n display: inline-flex;\n overflow: hidden;\n width: var(--size);\n height: var(--size);\n\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n}\n\n:host(:state(fallback)) {\n background: var(--solid-ui-color-gray-100);\n justify-content: center;\n align-items: center;\n\n icon-lucide-circle-user {\n color: var(--solid-ui-color-gray-200);\n width: 50%;\n height: 50%;\n }\n}\n","import { customElement, WebComponent } from '@/lib/components'\nimport { consume } from '@lit/context'\nimport { html } from 'lit'\nimport { authContext, AuthContext, DEFAULT_AUTH_CONTEXT } from '@/lib/auth'\n\nimport '~icons/lucide/circle-user'\n\nimport styles from './Avatar.styles.css'\n\n@customElement('solid-ui-avatar')\nexport default class Avatar extends WebComponent {\n static styles = styles\n static states = {\n fallback: (component: Avatar) => !component.auth.account?.avatarUrl,\n }\n\n @consume({ context: authContext, subscribe: true })\n private accessor auth: AuthContext = DEFAULT_AUTH_CONTEXT\n\n protected render () {\n if (!this.auth.account?.avatarUrl) {\n return html`\n <icon-lucide-circle-user></icon-lucide-circle-user>\n `\n }\n\n return html`\n <img src=\"${this.auth.account?.avatarUrl}\" alt=\"\" />\n `\n }\n}\n","import Avatar from './Avatar'\n\nexport { Avatar }\nexport default Avatar\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACOwCO,IAAA,CAEvCP,EAAc,iBAAiB,CAAC;AAAA,IAAAQ;AAAA,KAAAC,KAAAC,kBAAA,IAAAC,QAAA,GAAAC,KAAAC,IAO9BX,EAAQ;CAAEY,SAASV;CAAaW,WAAW;AAAK,CAAC,GAAC,SAAAC,IAPrD,cACoCf,EAAa;CAAAiB,YAAA,GAAAC,GAAA;EAAAC,AAAA,MAAA,GAAAD,CAAA,GAAAC,EAAA,MAAAV,IAAAW,EAAA,IAAA,GAAAC,EAAA,MAOVjB,CAAoB,EAAA;CAAA;CAAA,KAAAO,KAAA;EAAA,OAAAW,EAAAb,GAAA,IAAA;CAAA;CAAA,IAAxCc,KAAIC,GAAA;EAAAC,EAAAhB,GAAA,MAAAe,CAAA;CAAA;CAEXE,SAAU;EAOlB,OANK,KAAKH,KAAKI,SAASC,YAMjB1B,CAAI;oBACK,KAAKqB,KAAKI,SAASC,UAAS;QANnC1B,CAAI;;;CAQf;AACF,GAAC,CAAA2B,GAAA,CAAAR,GAAAD,IAAAU,GAAA,CAAAvB,GAAAwB,MAAAC,EAAAjB,GAAA,CAAA;CAAAH;CAAA;CAAA;AAAA,CAAA,GAAAN,GAAA,GAAA,KAAA,GApBmCN,CAAY,GAAAe,IAAAkB,IAAA,cAAAC,EAAA;CAAAjB,cAAA;EAAA,MAAAV,CAAA,GAAA4B,EAAA,MAAA,UAC9B9B,CAAM,GAAA8B,EAAA,MAAA,UACN,EACdC,WAAWC,MAAsB,CAACA,EAAUd,KAAKI,SAASC,UAC5D,CAAC,GAAAG,EAAA;CAAA;AAAA,GAAAI,EAAAF,GAAAzB,GAAA,KAAA,CAAA,GAAAyB,GAAA;;;ACXH,IAAA,IAAeM"}
|