solid-ui 5.0.0-1 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/~icons/app/solid-emblem.cjs.js.map +1 -1
- package/dist/_virtual/~icons/app/solid-emblem.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/chevron-down.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/chevron-down.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/circle-user.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/circle-user.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/log-in.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/log-in.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/log-out.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/log-out.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/user.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/user.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/x.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/x.esm.js.map +1 -1
- package/dist/_virtual/~icons/svg-spinners/180-ring.cjs.js.map +1 -1
- package/dist/_virtual/~icons/svg-spinners/180-ring.esm.js.map +1 -1
- package/dist/_virtual/~icons/svg-spinners/3-dots-fade.cjs.js.map +1 -1
- package/dist/_virtual/~icons/svg-spinners/3-dots-fade.esm.js.map +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.map +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/acl/index.cjs.js.map +1 -1
- package/dist/acl/index.esm.js.map +1 -1
- package/dist/chat/bookmarks.cjs.js.map +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.map +1 -1
- package/dist/chat/dateFolder.esm.js.map +1 -1
- package/dist/chat/infinite.cjs.js.map +1 -1
- package/dist/chat/infinite.esm.js.map +1 -1
- package/dist/chat/keys.cjs.js.map +1 -1
- package/dist/chat/keys.esm.js.map +1 -1
- package/dist/chat/message.cjs.js.map +1 -1
- 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.map +1 -1
- package/dist/chat/signature.esm.js.map +1 -1
- package/dist/chunks/DialogProvider-BFllJFfq.js.map +1 -1
- package/dist/chunks/{account-CSKDoS_I.js → account-BawgTPEQ.js} +7 -7
- package/dist/chunks/account-BawgTPEQ.js.map +1 -0
- package/dist/chunks/{auth-YsyyEh_c.js → auth-DrN7Ex4E.js} +85 -81
- package/dist/chunks/auth-DrN7Ex4E.js.map +1 -0
- package/dist/chunks/{avatar-BXaBs_3q.js → avatar-CoxEa3ul.js} +2 -2
- package/dist/chunks/avatar-CoxEa3ul.js.map +1 -0
- package/dist/chunks/button-CnmrOsEf.js.map +1 -1
- package/dist/chunks/chevron-down-ujxRg3MD.js.map +1 -1
- package/dist/chunks/{chunk.64OG2H45-BFgXEuP7.js → chunk.UEBQI7VV-1WRlPl6u.js} +20 -3
- package/dist/chunks/chunk.UEBQI7VV-1WRlPl6u.js.map +1 -0
- package/dist/chunks/{combobox-D3eGdicW.js → combobox-B0TqOl9L.js} +3 -3
- package/dist/chunks/combobox-B0TqOl9L.js.map +1 -0
- package/dist/chunks/combobox-option-BcXpUnWu.js.map +1 -1
- package/dist/chunks/components-BHoVP7zE.js.map +1 -1
- package/dist/chunks/dialog-D9Ellvjx.js.map +1 -1
- package/dist/chunks/dialog-content-B2FmmQvH.js.map +1 -1
- package/dist/chunks/dialog-footer-CxjoqQJF.js.map +1 -1
- package/dist/chunks/dialog-header-0dobhr5C.js.map +1 -1
- package/dist/chunks/dialogs-D2n-R0lI.js.map +1 -1
- package/dist/chunks/dialogs-root-ngPW2Q6K.js.map +1 -1
- package/dist/chunks/{guard-BTbfcRR6.js → guard-BtHmPAJt.js} +2 -2
- package/dist/chunks/guard-BtHmPAJt.js.map +1 -0
- package/dist/chunks/{index.esm-C63HBmfn.js → index.esm-AZPmKqjU.js} +1535 -1188
- package/dist/chunks/index.esm-AZPmKqjU.js.map +1 -0
- package/dist/chunks/input-BIhn_8nf.js.map +1 -1
- package/dist/chunks/{jsonld-DrQpMD8o.js → jsonld-CDR2WyN_.js} +4 -4
- package/dist/chunks/jsonld-CDR2WyN_.js.map +1 -0
- package/dist/chunks/{login-button-DZb_CXCo.js → login-button-DAzbhvKk.js} +2 -2
- package/dist/chunks/login-button-DAzbhvKk.js.map +1 -0
- package/dist/chunks/{logout-button-CaD4ESfx.js → logout-button-lGJtt7lq.js} +2 -2
- package/dist/chunks/logout-button-lGJtt7lq.js.map +1 -0
- package/dist/chunks/{menu-BiqIAf-j.js → menu-BLZREG4_.js} +21 -13
- package/dist/chunks/menu-BLZREG4_.js.map +1 -0
- package/dist/chunks/menu-item-BdCkmJol.js.map +1 -1
- package/dist/chunks/photo-capture-Bvixtxsq.js.map +1 -1
- package/dist/chunks/photo-capture-modal-BhmL3kYD.js.map +1 -1
- package/dist/chunks/{provider-BZsO0FFR.js → provider-D5r57fK1.js} +2 -2
- package/dist/chunks/provider-D5r57fK1.js.map +1 -0
- package/dist/chunks/query-BYu9q8lA.js.map +1 -1
- package/dist/chunks/{rdf-form-C2zcf1F0.js → rdf-form-B2zTR8Qv.js} +21 -21
- package/dist/chunks/rdf-form-B2zTR8Qv.js.map +1 -0
- package/dist/chunks/{rdf-input-CiQNdkKK.js → rdf-input-DeDhyQ3p.js} +38 -38
- package/dist/chunks/rdf-input-DeDhyQ3p.js.map +1 -0
- package/dist/chunks/select-BcC-ICqO.js.map +1 -1
- package/dist/chunks/select-option-B0uXcj2O.js.map +1 -1
- package/dist/chunks/show-dialog-eEW5yRBv.js.map +1 -1
- package/dist/chunks/{signup-button-DufShSEV.js → signup-button-DnPnUTTm.js} +2 -2
- package/dist/chunks/signup-button-DnPnUTTm.js.map +1 -0
- package/dist/chunks/solid-emblem-CcQOqRX0.js.map +1 -1
- package/dist/chunks/{src-CbkVtLGQ.js → src-BWY65mD0.js} +5757 -5686
- package/dist/chunks/src-BWY65mD0.js.map +1 -0
- package/dist/chunks/{style-DI3buiHt.js → style-Dpwrc8CC.js} +4 -4
- package/dist/chunks/style-Dpwrc8CC.js.map +1 -0
- package/dist/components/account/Account.cjs.js.map +1 -1
- package/dist/components/account/Account.esm.js.map +1 -1
- package/dist/components/account/Account.styles.cjs.js.map +1 -1
- package/dist/components/account/Account.styles.esm.js.map +1 -1
- package/dist/components/account/index.cjs.js.map +1 -1
- package/dist/components/account/index.esm.js.map +1 -1
- package/dist/components/account.js +1 -1
- package/dist/components/avatar/Avatar.cjs.js.map +1 -1
- package/dist/components/avatar/Avatar.esm.js.map +1 -1
- package/dist/components/avatar/Avatar.styles.cjs.js.map +1 -1
- package/dist/components/avatar/Avatar.styles.esm.js.map +1 -1
- package/dist/components/avatar/index.cjs.js.map +1 -1
- package/dist/components/avatar/index.esm.js.map +1 -1
- package/dist/components/avatar.js +1 -1
- package/dist/components/button/Button.cjs.js.map +1 -1
- package/dist/components/button/Button.esm.js.map +1 -1
- package/dist/components/button/Button.styles.cjs.js.map +1 -1
- package/dist/components/button/Button.styles.esm.js.map +1 -1
- package/dist/components/button/index.cjs.js.map +1 -1
- package/dist/components/button/index.esm.js.map +1 -1
- package/dist/components/combobox/Combobox.cjs.js.map +1 -1
- 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.map +1 -1
- package/dist/components/combobox/index.esm.js.map +1 -1
- package/dist/components/combobox-option/ComboboxOption.cjs.js.map +1 -1
- package/dist/components/combobox-option/ComboboxOption.esm.js.map +1 -1
- package/dist/components/combobox-option/index.cjs.js.map +1 -1
- package/dist/components/combobox-option/index.esm.js.map +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/dialog/Dialog.cjs.js.map +1 -1
- package/dist/components/dialog/Dialog.esm.js.map +1 -1
- package/dist/components/dialog/Dialog.styles.cjs.js.map +1 -1
- package/dist/components/dialog/Dialog.styles.esm.js.map +1 -1
- package/dist/components/dialog/index.cjs.js.map +1 -1
- package/dist/components/dialog/index.esm.js.map +1 -1
- package/dist/components/dialog-content/DialogContent.cjs.js.map +1 -1
- package/dist/components/dialog-content/DialogContent.esm.js.map +1 -1
- package/dist/components/dialog-content/DialogContent.styles.cjs.js.map +1 -1
- package/dist/components/dialog-content/DialogContent.styles.esm.js.map +1 -1
- package/dist/components/dialog-content/index.cjs.js.map +1 -1
- package/dist/components/dialog-content/index.esm.js.map +1 -1
- package/dist/components/dialog-footer/DialogFooter.cjs.js.map +1 -1
- package/dist/components/dialog-footer/DialogFooter.esm.js.map +1 -1
- package/dist/components/dialog-footer/DialogFooter.styles.cjs.js.map +1 -1
- package/dist/components/dialog-footer/DialogFooter.styles.esm.js.map +1 -1
- package/dist/components/dialog-footer/index.cjs.js.map +1 -1
- package/dist/components/dialog-footer/index.esm.js.map +1 -1
- package/dist/components/dialog-header/DialogHeader.cjs.js.map +1 -1
- package/dist/components/dialog-header/DialogHeader.esm.js.map +1 -1
- package/dist/components/dialog-header/DialogHeader.styles.cjs.js.map +1 -1
- package/dist/components/dialog-header/DialogHeader.styles.esm.js.map +1 -1
- package/dist/components/dialog-header/index.cjs.js.map +1 -1
- package/dist/components/dialog-header/index.esm.js.map +1 -1
- package/dist/components/dialog-provider/DialogProvider.cjs.js.map +1 -1
- package/dist/components/dialog-provider/DialogProvider.esm.js.map +1 -1
- package/dist/components/dialog-provider/index.cjs.js.map +1 -1
- package/dist/components/dialog-provider/index.esm.js.map +1 -1
- package/dist/components/dialog-provider.js.map +1 -1
- package/dist/components/dialogs-root/DialogsRoot.cjs.js.map +1 -1
- package/dist/components/dialogs-root/DialogsRoot.esm.js.map +1 -1
- package/dist/components/dialogs-root/index.cjs.js.map +1 -1
- package/dist/components/dialogs-root/index.esm.js.map +1 -1
- package/dist/components/guard/Guard.cjs.js.map +1 -1
- package/dist/components/guard/Guard.esm.js.map +1 -1
- package/dist/components/guard/index.cjs.js.map +1 -1
- package/dist/components/guard/index.esm.js.map +1 -1
- package/dist/components/guard.js +1 -1
- package/dist/components/input/Input.cjs.js.map +1 -1
- package/dist/components/input/Input.esm.js.map +1 -1
- package/dist/components/input/Input.styles.cjs.js.map +1 -1
- package/dist/components/input/Input.styles.esm.js.map +1 -1
- package/dist/components/input/index.cjs.js.map +1 -1
- package/dist/components/input/index.esm.js.map +1 -1
- package/dist/components/login-button/LoginButton.cjs.js.map +1 -1
- package/dist/components/login-button/LoginButton.esm.js.map +1 -1
- package/dist/components/login-button/index.cjs.js.map +1 -1
- package/dist/components/login-button/index.esm.js.map +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.d.ts.map +1 -1
- package/dist/components/login-modal/LoginModal.esm.js +1 -1
- package/dist/components/login-modal/LoginModal.esm.js.map +1 -1
- package/dist/components/login-modal/LoginModal.styles.cjs.js.map +1 -1
- package/dist/components/login-modal/LoginModal.styles.esm.js.map +1 -1
- package/dist/components/login-modal/index.cjs.js.map +1 -1
- package/dist/components/login-modal/index.esm.js.map +1 -1
- package/dist/components/login-modal.js +1 -1
- package/dist/components/logout-button/LogoutButton.cjs.js.map +1 -1
- package/dist/components/logout-button/LogoutButton.esm.js.map +1 -1
- package/dist/components/logout-button/index.cjs.js.map +1 -1
- package/dist/components/logout-button/index.esm.js.map +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/Menu.styles.cjs.js.map +1 -1
- package/dist/components/menu/Menu.styles.esm.js.map +1 -1
- package/dist/components/menu/index.cjs.js.map +1 -1
- package/dist/components/menu/index.esm.js.map +1 -1
- package/dist/components/menu-item/MenuItem.cjs.js.map +1 -1
- package/dist/components/menu-item/MenuItem.esm.js.map +1 -1
- package/dist/components/menu-item/MenuItem.styles.cjs.js.map +1 -1
- package/dist/components/menu-item/MenuItem.styles.esm.js.map +1 -1
- package/dist/components/menu-item/index.cjs.js.map +1 -1
- package/dist/components/menu-item/index.esm.js.map +1 -1
- package/dist/components/menu.js +1 -1
- package/dist/components/photo-capture/PhotoCapture.cjs.js.map +1 -1
- package/dist/components/photo-capture/PhotoCapture.esm.js.map +1 -1
- package/dist/components/photo-capture/index.cjs.js.map +1 -1
- package/dist/components/photo-capture/index.esm.js.map +1 -1
- package/dist/components/photo-capture-modal/PhotoCaptureModal.cjs.js.map +1 -1
- package/dist/components/photo-capture-modal/PhotoCaptureModal.esm.js.map +1 -1
- package/dist/components/photo-capture-modal/PhotoCaptureModal.styles.cjs.js.map +1 -1
- package/dist/components/photo-capture-modal/PhotoCaptureModal.styles.esm.js.map +1 -1
- package/dist/components/photo-capture-modal/index.cjs.js.map +1 -1
- package/dist/components/photo-capture-modal/index.esm.js.map +1 -1
- package/dist/components/provider/Provider.cjs.js.map +1 -1
- package/dist/components/provider/Provider.esm.js.map +1 -1
- package/dist/components/provider/index.cjs.js.map +1 -1
- package/dist/components/provider/index.esm.js.map +1 -1
- package/dist/components/provider.js +1 -1
- package/dist/components/rdf-form/RDFForm.cjs.js +1 -1
- package/dist/components/rdf-form/RDFForm.cjs.js.map +1 -1
- package/dist/components/rdf-form/RDFForm.esm.js +1 -1
- package/dist/components/rdf-form/RDFForm.esm.js.map +1 -1
- package/dist/components/rdf-form/index.cjs.js.map +1 -1
- package/dist/components/rdf-form/index.esm.js.map +1 -1
- package/dist/components/rdf-form.js +1 -1
- package/dist/components/rdf-input/RDFInput.cjs.js.map +1 -1
- package/dist/components/rdf-input/RDFInput.esm.js.map +1 -1
- package/dist/components/rdf-input/index.cjs.js.map +1 -1
- package/dist/components/rdf-input/index.esm.js.map +1 -1
- package/dist/components/rdf-input.js +1 -1
- package/dist/components/select/Select.cjs.js.map +1 -1
- package/dist/components/select/Select.esm.js.map +1 -1
- package/dist/components/select/Select.styles.cjs.js.map +1 -1
- package/dist/components/select/Select.styles.esm.js.map +1 -1
- package/dist/components/select/index.cjs.js.map +1 -1
- package/dist/components/select/index.esm.js.map +1 -1
- package/dist/components/select-option/SelectOption.cjs.js.map +1 -1
- package/dist/components/select-option/SelectOption.esm.js.map +1 -1
- package/dist/components/select-option/index.cjs.js.map +1 -1
- package/dist/components/select-option/index.esm.js.map +1 -1
- package/dist/components/signup-button/SignupButton.cjs.js.map +1 -1
- package/dist/components/signup-button/SignupButton.esm.js.map +1 -1
- package/dist/components/signup-button/index.cjs.js.map +1 -1
- package/dist/components/signup-button/index.esm.js.map +1 -1
- package/dist/components/signup-button.js +1 -1
- package/dist/components/solid-emblem/SolidEmblem.cjs.js.map +1 -1
- package/dist/components/solid-emblem/SolidEmblem.esm.js.map +1 -1
- package/dist/components/solid-emblem/SolidEmblem.styles.cjs.js.map +1 -1
- package/dist/components/solid-emblem/SolidEmblem.styles.esm.js.map +1 -1
- package/dist/components/solid-emblem/index.cjs.js.map +1 -1
- package/dist/components/solid-emblem/index.esm.js.map +1 -1
- package/dist/components.js +12 -12
- 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/create/index.esm.js.map +1 -1
- package/dist/create/types.cjs.js.map +1 -1
- package/dist/create/types.esm.js.map +1 -1
- package/dist/footer/index.cjs.js.map +1 -1
- package/dist/footer/index.esm.js.map +1 -1
- package/dist/header/empty-profile.cjs.js.map +1 -1
- package/dist/header/empty-profile.esm.js.map +1 -1
- package/dist/header/index.cjs.js.map +1 -1
- package/dist/header/index.esm.js.map +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +4 -4
- package/dist/lib/auth/Account.cjs.js.map +1 -1
- package/dist/lib/auth/Account.esm.js.map +1 -1
- package/dist/lib/auth/NoopAuth.cjs.js.map +1 -1
- package/dist/lib/auth/NoopAuth.esm.js.map +1 -1
- package/dist/lib/auth/SolidAuth.cjs.js +1 -1
- package/dist/lib/auth/SolidAuth.cjs.js.map +1 -1
- package/dist/lib/auth/SolidAuth.d.ts.map +1 -1
- package/dist/lib/auth/SolidAuth.esm.js +15 -11
- package/dist/lib/auth/SolidAuth.esm.js.map +1 -1
- package/dist/lib/auth/context.cjs.js.map +1 -1
- package/dist/lib/auth/context.esm.js.map +1 -1
- package/dist/lib/code-editor/CodeEditor.cjs.js.map +1 -1
- package/dist/lib/code-editor/CodeEditor.esm.js.map +1 -1
- package/dist/lib/components/decorators.cjs.js.map +1 -1
- package/dist/lib/components/decorators.esm.js.map +1 -1
- package/dist/lib/components/dialog-component/DialogComponent.cjs.js.map +1 -1
- package/dist/lib/components/dialog-component/DialogComponent.esm.js.map +1 -1
- package/dist/lib/components/form-control-component/FormControlComponent.cjs.js.map +1 -1
- package/dist/lib/components/form-control-component/FormControlComponent.esm.js.map +1 -1
- package/dist/lib/components/ids.cjs.js.map +1 -1
- package/dist/lib/components/ids.esm.js.map +1 -1
- 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/FormControlTrait.cjs.js.map +1 -1
- package/dist/lib/components/traits/FormControlTrait.esm.js.map +1 -1
- package/dist/lib/components/web-component/WebComponent.cjs.js.map +1 -1
- 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/debug.cjs.js.map +1 -1
- package/dist/lib/debug.esm.js.map +1 -1
- package/dist/lib/dialogs/Dialog.cjs.js.map +1 -1
- package/dist/lib/dialogs/Dialog.esm.js.map +1 -1
- package/dist/lib/dialogs/context.cjs.js.map +1 -1
- package/dist/lib/dialogs/context.esm.js.map +1 -1
- package/dist/lib/dialogs/events/close-dialog.cjs.js.map +1 -1
- package/dist/lib/dialogs/events/close-dialog.esm.js.map +1 -1
- package/dist/lib/dialogs/events/show-dialog.cjs.js.map +1 -1
- package/dist/lib/dialogs/events/show-dialog.esm.js.map +1 -1
- package/dist/lib/dialogs/helpers.cjs.js.map +1 -1
- package/dist/lib/dialogs/helpers.esm.js.map +1 -1
- package/dist/lib/file-explorer/context.cjs.js.map +1 -1
- package/dist/lib/file-explorer/context.esm.js.map +1 -1
- package/dist/lib/forms/fieldParams.cjs.js.map +1 -1
- package/dist/lib/forms/fieldParams.esm.js.map +1 -1
- package/dist/lib/forms/rdfFormsHelper.cjs.js.map +1 -1
- package/dist/lib/forms/rdfFormsHelper.esm.js.map +1 -1
- package/dist/lib/forms/store/NoopStore.cjs.js.map +1 -1
- package/dist/lib/forms/store/NoopStore.esm.js.map +1 -1
- package/dist/lib/forms/store/StoreContext.cjs.js.map +1 -1
- package/dist/lib/forms/store/StoreContext.esm.js.map +1 -1
- package/dist/lib/iconBase.cjs.js.map +1 -1
- package/dist/lib/iconBase.esm.js.map +1 -1
- package/dist/lib/log.cjs.js.map +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/newperson.cjs.js.map +1 -1
- package/dist/lib/newperson.esm.js.map +1 -1
- package/dist/lib/ns.cjs.js.map +1 -1
- package/dist/lib/ns.esm.js.map +1 -1
- package/dist/lib/pad.cjs.js.map +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.map +1 -1
- package/dist/lib/preferences.esm.js.map +1 -1
- package/dist/lib/style.cjs.js.map +1 -1
- package/dist/lib/style.esm.js.map +1 -1
- package/dist/lib/styleConstants.cjs.js.map +1 -1
- package/dist/lib/styleConstants.esm.js.map +1 -1
- package/dist/lib/style_multiSelect.cjs.js.map +1 -1
- package/dist/lib/style_multiSelect.esm.js.map +1 -1
- package/dist/lib/table.cjs.js +1 -1
- package/dist/lib/table.cjs.js.map +1 -1
- package/dist/lib/table.esm.js +2 -2
- 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/lib/timing.cjs.js.map +1 -1
- package/dist/lib/timing.esm.js.map +1 -1
- package/dist/lib/values.cjs.js.map +1 -1
- package/dist/lib/values.esm.js.map +1 -1
- package/dist/loader.js +4 -4
- 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/index.esm.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/index.cjs.js.map +1 -1
- package/dist/media/index.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/config-default.cjs.js.map +1 -1
- package/dist/signup/config-default.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 +50 -50
- package/dist/solid-ui.min.js +50 -50
- 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 +1 -1
- package/dist/utils/index.cjs.js.map +1 -1
- package/dist/utils/index.esm.js +2 -2
- package/dist/utils/index.esm.js.map +1 -1
- package/dist/utils/keyHelpers/accessData.cjs.js.map +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.d.ts.map +1 -1
- 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 +1 -1
- package/dist/widgets/dragAndDrop.cjs.js.map +1 -1
- package/dist/widgets/dragAndDrop.esm.js +22 -18
- 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/autocompleteBar.cjs.js.map +1 -1
- package/dist/widgets/forms/autocomplete/autocompleteBar.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.map +1 -1
- package/dist/widgets/forms/autocomplete/language.esm.js.map +1 -1
- package/dist/widgets/forms/autocomplete/publicData.cjs.js.map +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/fieldFunction.esm.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 +2 -2
- package/dist/widgets/forms.cjs.js.map +1 -1
- package/dist/widgets/forms.esm.js +4 -4
- package/dist/widgets/forms.esm.js.map +1 -1
- package/dist/widgets/index.cjs.js.map +1 -1
- package/dist/widgets/index.esm.js.map +1 -1
- 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 +4 -4
- package/dist/chunks/account-CSKDoS_I.js.map +0 -1
- package/dist/chunks/auth-YsyyEh_c.js.map +0 -1
- package/dist/chunks/avatar-BXaBs_3q.js.map +0 -1
- package/dist/chunks/chunk.64OG2H45-BFgXEuP7.js.map +0 -1
- package/dist/chunks/combobox-D3eGdicW.js.map +0 -1
- package/dist/chunks/guard-BTbfcRR6.js.map +0 -1
- package/dist/chunks/index.esm-C63HBmfn.js.map +0 -1
- package/dist/chunks/jsonld-DrQpMD8o.js.map +0 -1
- package/dist/chunks/login-button-DZb_CXCo.js.map +0 -1
- package/dist/chunks/logout-button-CaD4ESfx.js.map +0 -1
- package/dist/chunks/menu-BiqIAf-j.js.map +0 -1
- package/dist/chunks/provider-BZsO0FFR.js.map +0 -1
- package/dist/chunks/rdf-form-C2zcf1F0.js.map +0 -1
- package/dist/chunks/rdf-input-CiQNdkKK.js.map +0 -1
- package/dist/chunks/signup-button-DufShSEV.js.map +0 -1
- package/dist/chunks/src-CbkVtLGQ.js.map +0 -1
- package/dist/chunks/style-DI3buiHt.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multiSelect.cjs.js","names":["style"],"sources":["../../src/widgets/multiSelect.js"],"sourcesContent":["/*\n * IconicMultiSelect v0.7.0\n * Licence: MIT\n * (c) 2021 Sidney Wimart.\n * repo & configuration: https://github.com/sidneywm/iconic-multiselect\n */\n\n/**\n * @version IconicMultiSelect v0.7.0\n * @licence MIT\n */\nimport { style } from '../lib/style_multiSelect'\n\nexport class IconicMultiSelect {\n _data\n _domElements\n _event = () => {}\n _itemTemplate\n _multiselect\n _noData\n _noResults\n _options = []\n _placeholder\n _select\n _selectContainer\n _selectedOptions = []\n _tagTemplate\n _textField\n _valueField\n _cross = `\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.2253 4.81108C5.83477 4.42056 5.20161 4.42056 4.81108 4.81108C4.42056 5.20161 4.42056 5.83477 4.81108 6.2253L10.5858 12L4.81114 17.7747C4.42062 18.1652 4.42062 18.7984 4.81114 19.1889C5.20167 19.5794 5.83483 19.5794 6.22535 19.1889L12 13.4142L17.7747 19.1889C18.1652 19.5794 18.7984 19.5794 19.1889 19.1889C19.5794 18.7984 19.5794 18.1652 19.1889 17.7747L13.4142 12L19.189 6.2253C19.5795 5.83477 19.5795 5.20161 19.189 4.81108C18.7985 4.42056 18.1653 4.42056 17.7748 4.81108L12 10.5858L6.2253 4.81108Z\"\n fill=\"currentColor\"\n />\n </svg>\n `\n\n /**\n * Iconic Multiselect constructor.\n * @param { Object[] } data - Array of objects.\n * @param { string } noData - Defines the message when there is no data input.\n * @param { string } noResults - Defines the message when there is no result if options are filtered.\n * @param { string } placeholder - Defines the placeholder's text.\n * @param { string } select - DOM element to be selected. It must be a HTML Select tag - https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select\n * @param { string } textField - Field to select in the object for the text.\n * @param { string } valueField - Field to select in the object for the value.\n */\n constructor ({ data, itemTemplate, noData, noResults, placeholder, select, container, tagTemplate, textField, valueField }) {\n this._data = data ?? []\n this._itemTemplate = itemTemplate ?? null\n this._noData = noData ?? 'No data found.'\n this._noResults = noResults ?? 'No results found.'\n this._placeholder = placeholder ?? 'Select...'\n this._select = select\n // Timea added a container here\n this._selectContainer = container\n this._tagTemplate = tagTemplate ?? null\n this._textField = textField ?? null\n this._valueField = valueField ?? null\n }\n\n /**\n * Initialize the Iconic Multiselect component.\n * @public\n */\n init () {\n // Timea change to use this._select instead of this._selectContainer\n if (this._select && this._select.nodeName === 'SELECT') {\n if (this._itemTemplate && this._data.length === 0) { throw new Error('itemTemplate must be initialized with data from the component settings') }\n if (this._tagTemplate && this._data.length === 0) { throw new Error('tagTemplate must be initialized with data from the component settings') }\n\n this._options = this._data.length > 0 ? this._getDataFromSettings() : this._getDataFromSelectTag()\n\n this._renderMultiselect()\n this._renderOptionsList()\n\n this._domElements = {\n clear: this._multiselect.querySelector('.multiselect__clear-btn'),\n input: this._multiselect.querySelector('.multiselect__input'),\n optionsContainer: this._multiselect.querySelector('.multiselect__options'),\n optionsContainerList: this._multiselect.querySelector('.multiselect__options > ul'),\n options: {\n list: this._multiselect.querySelectorAll('.multiselect__options > ul > li'),\n find: function (callbackFn) {\n for (let i = 0; i < this.list.length; i++) {\n const node = this.list[i]\n if (callbackFn(node)) return node\n }\n return undefined\n },\n some: function (callbackFn) {\n for (let i = 0; i < this.list.length; i++) {\n const node = this.list[i]\n if (callbackFn(node, i)) return true\n }\n return false\n }\n }\n }\n\n this._enableEventListenners()\n this._initSelectedList()\n } else {\n throw new Error(`The selector '${this._select}' did not select any valid select tag.`)\n }\n }\n\n /**\n * Subscribes to the emitted events.\n * @param { Function } callback - Callback function which emits a custom event object.\n * @public\n */\n subscribe (callback) {\n if (typeof callback === 'function') {\n this._event = callback\n } else {\n throw new Error('parameter in the subscribe method is not a function')\n }\n }\n\n /**\n * Add an option to the selection list.\n * @param { Object: { text: string; value: string; }} option\n * @private\n */\n _addOptionToList (option, index) {\n const html = `<span class=\"multiselect__selected\" style=\"${style.multiselect__selected}\" data-value=\"${option.value}\">${\n this._tagTemplate ? this._processTemplate(this._tagTemplate, index) : option.text\n }<span class=\"multiselect__remove-btn\" style=\"${style.multiselect__remove_btn}\">${this._cross}</span></span>`\n\n this._domElements.input.insertAdjacentHTML('beforebegin', html)\n\n const { lastElementChild: removeBtn } = this._multiselect.querySelector(`span[data-value=\"${option.value}\"]`)\n removeBtn.addEventListener('click', () => {\n const target = this._domElements.options.find((el) => el.dataset.value === option.value)\n this._handleOption(target)\n })\n }\n\n /**\n * Clears all selected options.\n * @private\n */\n _clearSelection () {\n for (let i = 0; i < this._selectedOptions.length; i++) {\n const option = this._selectedOptions[i]\n const target = this._domElements.options.find((el) => el.dataset.value === option.value)\n target.classList.remove('multiselect__options--selected')\n target.setAttribute('style', style.multiselect__options)\n this._removeOptionFromList(target.dataset.value)\n }\n this._selectedOptions = []\n this._handleClearSelectionBtn()\n this._handlePlaceholder()\n this._dispatchEvent({\n action: 'CLEAR_ALL_OPTIONS',\n selection: this._selectedOptions\n })\n }\n\n /**\n * Close the options container.\n * @private\n */\n _closeList () {\n this._domElements.input.value = ''\n this._domElements.optionsContainer.classList.remove('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options)\n this._filterOptions('')\n this._removeAllArrowSelected()\n }\n\n /**\n * Dispatches new events.\n * @param { object : { action: string; selection: { option: string; text: string; }[]; value?: string; } } event\n * @private\n */\n _dispatchEvent (event) {\n this._event(event)\n }\n\n /**\n * Enables all main event listenners.\n * @private\n */\n _enableEventListenners () {\n document.addEventListener('mouseup', ({ target }) => {\n if (!this._multiselect.contains(target)) {\n this._filterOptions('')\n this._closeList()\n this._handlePlaceholder()\n }\n })\n\n this._domElements.clear.addEventListener('click', () => {\n this._clearSelection()\n })\n\n for (let i = 0; i < this._domElements.options.list.length; i++) {\n const option = this._domElements.options.list[i]\n option.addEventListener('click', ({ target }) => {\n this._handleOption(target)\n this._closeList()\n })\n }\n\n this._domElements.input.addEventListener('focus', () => {\n this._domElements.optionsContainer.classList.add('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options_visible)\n })\n\n this._domElements.input.addEventListener('input', ({ target: { value } }) => {\n if (this._domElements.options.list.length > 0) {\n this._filterOptions(value)\n }\n })\n\n this._domElements.input.addEventListener('keydown', (e) => {\n this._handleArrows(e)\n this._handleBackspace(e)\n this._handleEnter(e)\n })\n }\n\n /**\n * Filters user input.\n * @param { string } value\n * @private\n */\n _filterOptions (value) {\n const isOpen = this._domElements.optionsContainer.classList.contains('visible')\n const valueLowerCase = value.toLowerCase()\n\n if (!isOpen && value.length > 0) {\n this._domElements.optionsContainer.classList.add('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options_visible)\n }\n\n if (this._domElements.options.list.length > 0) {\n for (let i = 0; i < this._domElements.options.list.length; i++) {\n const el = this._domElements.options.list[i]\n const text = this._itemTemplate ? this._data[i][this._textField] : el.textContent\n\n if (text.toLowerCase().substring(0, valueLowerCase.length) === valueLowerCase) {\n this._domElements.optionsContainerList.appendChild(el)\n } else {\n el.parentNode && el.parentNode.removeChild(el)\n }\n }\n\n const hasResults = this._domElements.options.some(\n (el, index) =>\n (this._itemTemplate ? this._data[index][this._textField] : el.textContent)\n .toLowerCase()\n .substring(0, valueLowerCase.length) === valueLowerCase\n )\n this._showNoResults(!hasResults)\n }\n }\n\n _generateId (length) {\n let result = ''\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n const charactersLength = characters.length\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength))\n }\n return result\n }\n\n /**\n * Gets data from select tag.\n * @private\n */\n _getDataFromSelectTag () {\n const arr = []\n const { options } = this._select\n for (let i = 0; i < options.length; i++) {\n const item = options[i]\n arr.push({\n text: item.text,\n value: item.value,\n selected: item.hasAttribute('selected')\n })\n }\n return arr\n }\n\n /**\n * Gets data from settings.\n * @private\n */\n _getDataFromSettings () {\n if (this._data.length > 0 && this._valueField && this._textField) {\n const isValueFieldValid = typeof this._valueField === 'string'\n const isTextFieldValid = typeof this._textField === 'string'\n const arr = []\n\n if (!isValueFieldValid || !isTextFieldValid) {\n throw new Error('textField and valueField must be of type string')\n }\n\n for (let i = 0; i < this._data.length; i++) {\n const item = this._data[i]\n arr.push({\n value: item[this._valueField],\n text: item[this._textField],\n selected: typeof item.selected === 'boolean' ? item.selected : false\n })\n }\n return arr\n } else {\n return null\n }\n }\n\n /**\n * Handles Arrow up & Down. Selection of an option is also possible with these keys.\n * @param { Event } event\n * @private\n */\n _handleArrows (event) {\n if (event.keyCode === 40 || event.keyCode === 38) {\n event.preventDefault()\n const isOpen = this._domElements.optionsContainer.classList.contains('visible')\n // An updated view of the container is needed because of the filtering option\n const optionsContainerList = this._multiselect.querySelector('.multiselect__options > ul')\n\n if (!isOpen) {\n this._domElements.optionsContainer.classList.add('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options_visible)\n optionsContainerList.firstElementChild.classList.add('arrow-selected')\n optionsContainerList.firstElementChild.setAttribute('style', style.multiselect__options_ul_li_arrow_selected)\n optionsContainerList.firstElementChild.scrollIntoView(false)\n } else {\n let selected = this._multiselect.querySelector('.multiselect__options ul li.arrow-selected')\n const action = {\n ArrowUp: 'previous',\n Up: 'previous',\n ArrowDown: 'next',\n Down: 'next'\n }\n\n if (!selected) {\n optionsContainerList.firstElementChild.classList.add('arrow-selected')\n optionsContainerList.firstElementChild.setAttribute('style', style.multiselect__options_ul_li_arrow_selected)\n optionsContainerList.firstElementChild.scrollIntoView(false)\n return\n }\n\n selected.classList.remove('arrow-selected')\n selected.setAttribute('style', style.multiselect__options_ul_li)\n\n selected = selected[action[event.key] + 'ElementSibling']\n\n // Go to start or end of the popup list\n if (!selected) {\n selected =\n optionsContainerList.children[action[event.key] === 'next' ? 0 : optionsContainerList.children.length - 1]\n selected.classList.add('arrow-selected')\n selected.setAttribute('style', style.multiselect__options_ul_li_arrow_selected)\n this._scrollIntoView(optionsContainerList, selected)\n return\n }\n\n selected.classList.add('arrow-selected')\n selected.setAttribute('style', style.multiselect__options_ul_li_arrow_selected)\n this._scrollIntoView(optionsContainerList, selected)\n }\n }\n }\n\n /**\n * Handles the backspace key event - Deletes the preceding option in the selection list.\n * @param { Event } e\n * @private\n */\n _handleBackspace (e) {\n if (e.keyCode === 8 && e.target.value === '') {\n const lastSelectedOption =\n this._selectedOptions.length > 0 ? this._selectedOptions[this._selectedOptions.length - 1] : null\n\n if (lastSelectedOption) {\n const targetLastSelectedOption = this._multiselect.querySelector(\n `li[data-value=\"${lastSelectedOption.value}\"]`\n )\n this._handleOption(targetLastSelectedOption)\n\n if (this._selectedOptions.length === 0) {\n this._domElements.optionsContainer.classList.remove('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options)\n }\n }\n }\n }\n\n /**\n * Shows clear selection button if some options are selected.\n * @private\n */\n _handleClearSelectionBtn () {\n if (this._selectedOptions.length > 0) {\n this._domElements.clear.style.display = 'flex'\n } else {\n this._domElements.clear.style.display = 'none'\n }\n }\n\n /**\n * Handles the enter key event.\n * @param { Event } event\n * @private\n */\n _handleEnter (event) {\n if (event.keyCode === 13) {\n const selected = this._multiselect.querySelector('.multiselect__options ul li.arrow-selected')\n if (selected) {\n this._handleOption(selected)\n this._closeList()\n }\n }\n }\n\n _handleOption (target, dispatchEvent = true) {\n // Remove\n for (let i = 0; i < this._selectedOptions.length; i++) {\n const el = this._selectedOptions[i]\n if (el.value === target.dataset.value) {\n target.classList.remove('multiselect__options--selected')\n target.setAttribute('style', style.multiselect__options)\n this._selectedOptions.splice(i, 1)\n this._removeOptionFromList(target.dataset.value)\n this._handleClearSelectionBtn()\n this._handlePlaceholder()\n\n return (\n dispatchEvent &&\n this._dispatchEvent({\n action: 'REMOVE_OPTION',\n value: target.dataset.value,\n selection: this._selectedOptions\n })\n )\n }\n }\n\n // Add\n for (let i = 0; i < this._options.length; i++) {\n const option = this._options[i]\n if (option.value === target.dataset.value) {\n target.classList.add('multiselect__options--selected')\n target.setAttribute('style', style.multiselect__options_selected)\n this._selectedOptions = [...this._selectedOptions, option]\n this._addOptionToList(option, i)\n this._handleClearSelectionBtn()\n this._handlePlaceholder()\n\n return (\n dispatchEvent &&\n this._dispatchEvent({\n action: 'ADD_OPTION',\n value: target.dataset.value,\n selection: this._selectedOptions\n })\n )\n }\n }\n }\n\n /**\n * Shows the placeholder if no options are selected.\n * @private\n */\n _handlePlaceholder () {\n this._domElements.input.placeholder = this._placeholder\n }\n\n _initSelectedList () {\n let hasItemsSelected = false\n\n for (let i = 0; i < this._options.length; i++) {\n const option = this._options[i]\n if (option.selected) {\n hasItemsSelected = true\n const target = this._domElements.options.find((el) => el.dataset.value === option.value)\n target.classList.add('multiselect__options--selected')\n target.setAttribute('style', style.multiselect__options_selected)\n this._selectedOptions = [...this._selectedOptions, option]\n this._addOptionToList(option, i)\n }\n }\n\n if (hasItemsSelected) { this._handleClearSelectionBtn() }\n this._handlePlaceholder()\n }\n\n /**\n * Process the custom template.\n * @param { string } template\n * @private\n */\n _processTemplate (template, index) {\n let processedTemplate = template\n const objAttr = template.match(/\\$\\{(\\w+)\\}/g).map((e) => e.replace(/\\$\\{|\\}/g, ''))\n\n for (let i = 0; i < objAttr.length; i++) {\n const attr = objAttr[i]\n // eslint-disable-next-line no-useless-escape\n processedTemplate = processedTemplate.replace(`\\$\\{${attr}\\}`, this._data[index][attr] ?? '')\n }\n\n return processedTemplate\n }\n\n _removeAllArrowSelected () {\n const className = 'arrow-selected'\n const target = this._domElements.options.find((el) => el.classList.contains(className))\n target && target.classList.remove(className) && target.setAttribute('style', style.multiselect__options_ul_li)\n }\n\n /**\n * Removes an option from the list.\n * @param { string } value\n * @private\n */\n _removeOptionFromList (value) {\n const optionDom = this._multiselect.querySelector(`span[data-value=\"${value}\"]`)\n optionDom && optionDom.parentNode && optionDom.parentNode.removeChild(optionDom)\n }\n\n /**\n * Renders the multiselect options list view.\n * @private\n */\n _renderOptionsList () {\n const html = `\n <div class=\"multiselect__options\" style=\"${style.multiselect__options}\">\n <ul style=\"${style.multiselect__options_ul}\">\n ${\n this._options.length > 0 && !this._itemTemplate\n ? this._options\n .map((option) => {\n return `\n <li data-value=\"${option.value}\" style=\"${style.multiselect__options_ul_li}\">${option.text}</li>\n `\n })\n .join('')\n : ''\n }\n\n ${\n this._options.length > 0 && this._itemTemplate\n ? this._options\n .map((option, index) => {\n return `\n <li data-value=\"${option.value}\" style=\"${style.multiselect__options_ul_li}\">${this._processTemplate(this._itemTemplate, index)}</li>\n `\n })\n .join('')\n : ''\n }\n ${this._showNoData(this._options.length === 0)}\n </ul>\n </div>\n `\n\n this._multiselect.insertAdjacentHTML('beforeend', html)\n }\n\n /**\n * Renders the multiselect view.\n * @private\n */\n _renderMultiselect () {\n this._select.style.display = 'none'\n const id = 'iconic-' + this._generateId(20)\n // Timea created dedicated div element because previous code was not rendering\n this._multiselect = document.createElement('div')\n this._multiselect.setAttribute('id', id)\n this._multiselect.setAttribute('class', 'multiselect__container')\n this._multiselect.setAttribute('style', style.multiselect__container)\n const html = `\n <div class=\"multiselect__wrapper\" style=\"${style.multiselect__wrapper}\">\n <input class=\"multiselect__input\" style=\"${style.multiselect__input}\" placeholder=\"${this._placeholder}\" />\n </div>\n <span style=\"display: none;\" class=\"multiselect__clear-btn\" style=\"${style.multiselect__clear_btn}\">${this._cross}</span>\n `\n this._multiselect.innerHTML = html\n this._selectContainer.appendChild(this._multiselect)\n }\n\n /**\n * ScrollIntoView - This small utility reproduces the behavior of .scrollIntoView({ block: \"nearest\", inline: \"nearest\" })\n * This is for IE compatibility without a need of a polyfill\n * @private\n */\n _scrollIntoView (parent, child) {\n const rectParent = parent.getBoundingClientRect()\n const rectChild = child.getBoundingClientRect()\n\n // Detect if not visible at top and then scroll to the top\n if (!(rectParent.top < rectChild.bottom - child.offsetHeight)) {\n parent.scrollTop = child.clientHeight + (child.offsetTop - child.offsetHeight)\n }\n\n // Detect if not visible at bottom and then scroll to the bottom\n if (!(rectParent.bottom > rectChild.top + child.offsetHeight)) {\n parent.scrollTop =\n child.clientHeight +\n (child.offsetTop - child.offsetHeight) -\n (parent.offsetHeight - (child.offsetHeight + (child.offsetHeight - child.clientHeight)))\n }\n }\n\n /**\n * Shows a no data message.\n * @param { boolean } condition\n * @private\n */\n _showNoData (condition) {\n return condition ? `<p class=\"multiselect__options--no-data\" style=\"${style.multiselect__options_ul_p_multiselect__options_no_data}\">${this._noData}</p>` : ''\n }\n\n /**\n * Shows a no results message.\n * @param { boolean } condition\n * @private\n */\n _showNoResults (condition) {\n const dom = this._multiselect.querySelector('.multiselect__options--no-results')\n if (condition) {\n const html = `<p class=\"multiselect__options--no-results\" style=\"${style.multiselect__options_ul_p_multiselect__options_no_results}\">${this._noResults}</p>`\n !dom && this._domElements.optionsContainerList.insertAdjacentHTML('beforeend', html)\n } else {\n dom && dom.parentNode && dom.parentNode.removeChild(dom)\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"multiSelect.cjs.js","names":["style","require_style_multiSelect","IconicMultiSelect","data","itemTemplate","noData","noResults","placeholder","select","container","tagTemplate","textField","valueField","i","node","callbackFn","callback","html","option","index","removeBtn","target","el","event","value","isOpen","valueLowerCase","hasResults","result","length","arr","options","item","isValueFieldValid","isTextFieldValid","optionsContainerList","selected","action","e","lastSelectedOption","targetLastSelectedOption","dispatchEvent","hasItemsSelected","processedTemplate","template","objAttr","attr","className","optionDom","id","rectParent","parent","rectChild","child","condition","dom"],"sources":["../../src/widgets/multiSelect.js"],"sourcesContent":["/*\n * IconicMultiSelect v0.7.0\n * Licence: MIT\n * (c) 2021 Sidney Wimart.\n * repo & configuration: https://github.com/sidneywm/iconic-multiselect\n */\n\n/**\n * @version IconicMultiSelect v0.7.0\n * @licence MIT\n */\nimport { style } from '../lib/style_multiSelect'\n\nexport class IconicMultiSelect {\n _data\n _domElements\n _event = () => {}\n _itemTemplate\n _multiselect\n _noData\n _noResults\n _options = []\n _placeholder\n _select\n _selectContainer\n _selectedOptions = []\n _tagTemplate\n _textField\n _valueField\n _cross = `\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.2253 4.81108C5.83477 4.42056 5.20161 4.42056 4.81108 4.81108C4.42056 5.20161 4.42056 5.83477 4.81108 6.2253L10.5858 12L4.81114 17.7747C4.42062 18.1652 4.42062 18.7984 4.81114 19.1889C5.20167 19.5794 5.83483 19.5794 6.22535 19.1889L12 13.4142L17.7747 19.1889C18.1652 19.5794 18.7984 19.5794 19.1889 19.1889C19.5794 18.7984 19.5794 18.1652 19.1889 17.7747L13.4142 12L19.189 6.2253C19.5795 5.83477 19.5795 5.20161 19.189 4.81108C18.7985 4.42056 18.1653 4.42056 17.7748 4.81108L12 10.5858L6.2253 4.81108Z\"\n fill=\"currentColor\"\n />\n </svg>\n `\n\n /**\n * Iconic Multiselect constructor.\n * @param { Object[] } data - Array of objects.\n * @param { string } noData - Defines the message when there is no data input.\n * @param { string } noResults - Defines the message when there is no result if options are filtered.\n * @param { string } placeholder - Defines the placeholder's text.\n * @param { string } select - DOM element to be selected. It must be a HTML Select tag - https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select\n * @param { string } textField - Field to select in the object for the text.\n * @param { string } valueField - Field to select in the object for the value.\n */\n constructor ({ data, itemTemplate, noData, noResults, placeholder, select, container, tagTemplate, textField, valueField }) {\n this._data = data ?? []\n this._itemTemplate = itemTemplate ?? null\n this._noData = noData ?? 'No data found.'\n this._noResults = noResults ?? 'No results found.'\n this._placeholder = placeholder ?? 'Select...'\n this._select = select\n // Timea added a container here\n this._selectContainer = container\n this._tagTemplate = tagTemplate ?? null\n this._textField = textField ?? null\n this._valueField = valueField ?? null\n }\n\n /**\n * Initialize the Iconic Multiselect component.\n * @public\n */\n init () {\n // Timea change to use this._select instead of this._selectContainer\n if (this._select && this._select.nodeName === 'SELECT') {\n if (this._itemTemplate && this._data.length === 0) { throw new Error('itemTemplate must be initialized with data from the component settings') }\n if (this._tagTemplate && this._data.length === 0) { throw new Error('tagTemplate must be initialized with data from the component settings') }\n\n this._options = this._data.length > 0 ? this._getDataFromSettings() : this._getDataFromSelectTag()\n\n this._renderMultiselect()\n this._renderOptionsList()\n\n this._domElements = {\n clear: this._multiselect.querySelector('.multiselect__clear-btn'),\n input: this._multiselect.querySelector('.multiselect__input'),\n optionsContainer: this._multiselect.querySelector('.multiselect__options'),\n optionsContainerList: this._multiselect.querySelector('.multiselect__options > ul'),\n options: {\n list: this._multiselect.querySelectorAll('.multiselect__options > ul > li'),\n find: function (callbackFn) {\n for (let i = 0; i < this.list.length; i++) {\n const node = this.list[i]\n if (callbackFn(node)) return node\n }\n return undefined\n },\n some: function (callbackFn) {\n for (let i = 0; i < this.list.length; i++) {\n const node = this.list[i]\n if (callbackFn(node, i)) return true\n }\n return false\n }\n }\n }\n\n this._enableEventListenners()\n this._initSelectedList()\n } else {\n throw new Error(`The selector '${this._select}' did not select any valid select tag.`)\n }\n }\n\n /**\n * Subscribes to the emitted events.\n * @param { Function } callback - Callback function which emits a custom event object.\n * @public\n */\n subscribe (callback) {\n if (typeof callback === 'function') {\n this._event = callback\n } else {\n throw new Error('parameter in the subscribe method is not a function')\n }\n }\n\n /**\n * Add an option to the selection list.\n * @param { Object: { text: string; value: string; }} option\n * @private\n */\n _addOptionToList (option, index) {\n const html = `<span class=\"multiselect__selected\" style=\"${style.multiselect__selected}\" data-value=\"${option.value}\">${\n this._tagTemplate ? this._processTemplate(this._tagTemplate, index) : option.text\n }<span class=\"multiselect__remove-btn\" style=\"${style.multiselect__remove_btn}\">${this._cross}</span></span>`\n\n this._domElements.input.insertAdjacentHTML('beforebegin', html)\n\n const { lastElementChild: removeBtn } = this._multiselect.querySelector(`span[data-value=\"${option.value}\"]`)\n removeBtn.addEventListener('click', () => {\n const target = this._domElements.options.find((el) => el.dataset.value === option.value)\n this._handleOption(target)\n })\n }\n\n /**\n * Clears all selected options.\n * @private\n */\n _clearSelection () {\n for (let i = 0; i < this._selectedOptions.length; i++) {\n const option = this._selectedOptions[i]\n const target = this._domElements.options.find((el) => el.dataset.value === option.value)\n target.classList.remove('multiselect__options--selected')\n target.setAttribute('style', style.multiselect__options)\n this._removeOptionFromList(target.dataset.value)\n }\n this._selectedOptions = []\n this._handleClearSelectionBtn()\n this._handlePlaceholder()\n this._dispatchEvent({\n action: 'CLEAR_ALL_OPTIONS',\n selection: this._selectedOptions\n })\n }\n\n /**\n * Close the options container.\n * @private\n */\n _closeList () {\n this._domElements.input.value = ''\n this._domElements.optionsContainer.classList.remove('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options)\n this._filterOptions('')\n this._removeAllArrowSelected()\n }\n\n /**\n * Dispatches new events.\n * @param { object : { action: string; selection: { option: string; text: string; }[]; value?: string; } } event\n * @private\n */\n _dispatchEvent (event) {\n this._event(event)\n }\n\n /**\n * Enables all main event listenners.\n * @private\n */\n _enableEventListenners () {\n document.addEventListener('mouseup', ({ target }) => {\n if (!this._multiselect.contains(target)) {\n this._filterOptions('')\n this._closeList()\n this._handlePlaceholder()\n }\n })\n\n this._domElements.clear.addEventListener('click', () => {\n this._clearSelection()\n })\n\n for (let i = 0; i < this._domElements.options.list.length; i++) {\n const option = this._domElements.options.list[i]\n option.addEventListener('click', ({ target }) => {\n this._handleOption(target)\n this._closeList()\n })\n }\n\n this._domElements.input.addEventListener('focus', () => {\n this._domElements.optionsContainer.classList.add('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options_visible)\n })\n\n this._domElements.input.addEventListener('input', ({ target: { value } }) => {\n if (this._domElements.options.list.length > 0) {\n this._filterOptions(value)\n }\n })\n\n this._domElements.input.addEventListener('keydown', (e) => {\n this._handleArrows(e)\n this._handleBackspace(e)\n this._handleEnter(e)\n })\n }\n\n /**\n * Filters user input.\n * @param { string } value\n * @private\n */\n _filterOptions (value) {\n const isOpen = this._domElements.optionsContainer.classList.contains('visible')\n const valueLowerCase = value.toLowerCase()\n\n if (!isOpen && value.length > 0) {\n this._domElements.optionsContainer.classList.add('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options_visible)\n }\n\n if (this._domElements.options.list.length > 0) {\n for (let i = 0; i < this._domElements.options.list.length; i++) {\n const el = this._domElements.options.list[i]\n const text = this._itemTemplate ? this._data[i][this._textField] : el.textContent\n\n if (text.toLowerCase().substring(0, valueLowerCase.length) === valueLowerCase) {\n this._domElements.optionsContainerList.appendChild(el)\n } else {\n el.parentNode && el.parentNode.removeChild(el)\n }\n }\n\n const hasResults = this._domElements.options.some(\n (el, index) =>\n (this._itemTemplate ? this._data[index][this._textField] : el.textContent)\n .toLowerCase()\n .substring(0, valueLowerCase.length) === valueLowerCase\n )\n this._showNoResults(!hasResults)\n }\n }\n\n _generateId (length) {\n let result = ''\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n const charactersLength = characters.length\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength))\n }\n return result\n }\n\n /**\n * Gets data from select tag.\n * @private\n */\n _getDataFromSelectTag () {\n const arr = []\n const { options } = this._select\n for (let i = 0; i < options.length; i++) {\n const item = options[i]\n arr.push({\n text: item.text,\n value: item.value,\n selected: item.hasAttribute('selected')\n })\n }\n return arr\n }\n\n /**\n * Gets data from settings.\n * @private\n */\n _getDataFromSettings () {\n if (this._data.length > 0 && this._valueField && this._textField) {\n const isValueFieldValid = typeof this._valueField === 'string'\n const isTextFieldValid = typeof this._textField === 'string'\n const arr = []\n\n if (!isValueFieldValid || !isTextFieldValid) {\n throw new Error('textField and valueField must be of type string')\n }\n\n for (let i = 0; i < this._data.length; i++) {\n const item = this._data[i]\n arr.push({\n value: item[this._valueField],\n text: item[this._textField],\n selected: typeof item.selected === 'boolean' ? item.selected : false\n })\n }\n return arr\n } else {\n return null\n }\n }\n\n /**\n * Handles Arrow up & Down. Selection of an option is also possible with these keys.\n * @param { Event } event\n * @private\n */\n _handleArrows (event) {\n if (event.keyCode === 40 || event.keyCode === 38) {\n event.preventDefault()\n const isOpen = this._domElements.optionsContainer.classList.contains('visible')\n // An updated view of the container is needed because of the filtering option\n const optionsContainerList = this._multiselect.querySelector('.multiselect__options > ul')\n\n if (!isOpen) {\n this._domElements.optionsContainer.classList.add('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options_visible)\n optionsContainerList.firstElementChild.classList.add('arrow-selected')\n optionsContainerList.firstElementChild.setAttribute('style', style.multiselect__options_ul_li_arrow_selected)\n optionsContainerList.firstElementChild.scrollIntoView(false)\n } else {\n let selected = this._multiselect.querySelector('.multiselect__options ul li.arrow-selected')\n const action = {\n ArrowUp: 'previous',\n Up: 'previous',\n ArrowDown: 'next',\n Down: 'next'\n }\n\n if (!selected) {\n optionsContainerList.firstElementChild.classList.add('arrow-selected')\n optionsContainerList.firstElementChild.setAttribute('style', style.multiselect__options_ul_li_arrow_selected)\n optionsContainerList.firstElementChild.scrollIntoView(false)\n return\n }\n\n selected.classList.remove('arrow-selected')\n selected.setAttribute('style', style.multiselect__options_ul_li)\n\n selected = selected[action[event.key] + 'ElementSibling']\n\n // Go to start or end of the popup list\n if (!selected) {\n selected =\n optionsContainerList.children[action[event.key] === 'next' ? 0 : optionsContainerList.children.length - 1]\n selected.classList.add('arrow-selected')\n selected.setAttribute('style', style.multiselect__options_ul_li_arrow_selected)\n this._scrollIntoView(optionsContainerList, selected)\n return\n }\n\n selected.classList.add('arrow-selected')\n selected.setAttribute('style', style.multiselect__options_ul_li_arrow_selected)\n this._scrollIntoView(optionsContainerList, selected)\n }\n }\n }\n\n /**\n * Handles the backspace key event - Deletes the preceding option in the selection list.\n * @param { Event } e\n * @private\n */\n _handleBackspace (e) {\n if (e.keyCode === 8 && e.target.value === '') {\n const lastSelectedOption =\n this._selectedOptions.length > 0 ? this._selectedOptions[this._selectedOptions.length - 1] : null\n\n if (lastSelectedOption) {\n const targetLastSelectedOption = this._multiselect.querySelector(\n `li[data-value=\"${lastSelectedOption.value}\"]`\n )\n this._handleOption(targetLastSelectedOption)\n\n if (this._selectedOptions.length === 0) {\n this._domElements.optionsContainer.classList.remove('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options)\n }\n }\n }\n }\n\n /**\n * Shows clear selection button if some options are selected.\n * @private\n */\n _handleClearSelectionBtn () {\n if (this._selectedOptions.length > 0) {\n this._domElements.clear.style.display = 'flex'\n } else {\n this._domElements.clear.style.display = 'none'\n }\n }\n\n /**\n * Handles the enter key event.\n * @param { Event } event\n * @private\n */\n _handleEnter (event) {\n if (event.keyCode === 13) {\n const selected = this._multiselect.querySelector('.multiselect__options ul li.arrow-selected')\n if (selected) {\n this._handleOption(selected)\n this._closeList()\n }\n }\n }\n\n _handleOption (target, dispatchEvent = true) {\n // Remove\n for (let i = 0; i < this._selectedOptions.length; i++) {\n const el = this._selectedOptions[i]\n if (el.value === target.dataset.value) {\n target.classList.remove('multiselect__options--selected')\n target.setAttribute('style', style.multiselect__options)\n this._selectedOptions.splice(i, 1)\n this._removeOptionFromList(target.dataset.value)\n this._handleClearSelectionBtn()\n this._handlePlaceholder()\n\n return (\n dispatchEvent &&\n this._dispatchEvent({\n action: 'REMOVE_OPTION',\n value: target.dataset.value,\n selection: this._selectedOptions\n })\n )\n }\n }\n\n // Add\n for (let i = 0; i < this._options.length; i++) {\n const option = this._options[i]\n if (option.value === target.dataset.value) {\n target.classList.add('multiselect__options--selected')\n target.setAttribute('style', style.multiselect__options_selected)\n this._selectedOptions = [...this._selectedOptions, option]\n this._addOptionToList(option, i)\n this._handleClearSelectionBtn()\n this._handlePlaceholder()\n\n return (\n dispatchEvent &&\n this._dispatchEvent({\n action: 'ADD_OPTION',\n value: target.dataset.value,\n selection: this._selectedOptions\n })\n )\n }\n }\n }\n\n /**\n * Shows the placeholder if no options are selected.\n * @private\n */\n _handlePlaceholder () {\n this._domElements.input.placeholder = this._placeholder\n }\n\n _initSelectedList () {\n let hasItemsSelected = false\n\n for (let i = 0; i < this._options.length; i++) {\n const option = this._options[i]\n if (option.selected) {\n hasItemsSelected = true\n const target = this._domElements.options.find((el) => el.dataset.value === option.value)\n target.classList.add('multiselect__options--selected')\n target.setAttribute('style', style.multiselect__options_selected)\n this._selectedOptions = [...this._selectedOptions, option]\n this._addOptionToList(option, i)\n }\n }\n\n if (hasItemsSelected) { this._handleClearSelectionBtn() }\n this._handlePlaceholder()\n }\n\n /**\n * Process the custom template.\n * @param { string } template\n * @private\n */\n _processTemplate (template, index) {\n let processedTemplate = template\n const objAttr = template.match(/\\$\\{(\\w+)\\}/g).map((e) => e.replace(/\\$\\{|\\}/g, ''))\n\n for (let i = 0; i < objAttr.length; i++) {\n const attr = objAttr[i]\n // eslint-disable-next-line no-useless-escape\n processedTemplate = processedTemplate.replace(`\\$\\{${attr}\\}`, this._data[index][attr] ?? '')\n }\n\n return processedTemplate\n }\n\n _removeAllArrowSelected () {\n const className = 'arrow-selected'\n const target = this._domElements.options.find((el) => el.classList.contains(className))\n target && target.classList.remove(className) && target.setAttribute('style', style.multiselect__options_ul_li)\n }\n\n /**\n * Removes an option from the list.\n * @param { string } value\n * @private\n */\n _removeOptionFromList (value) {\n const optionDom = this._multiselect.querySelector(`span[data-value=\"${value}\"]`)\n optionDom && optionDom.parentNode && optionDom.parentNode.removeChild(optionDom)\n }\n\n /**\n * Renders the multiselect options list view.\n * @private\n */\n _renderOptionsList () {\n const html = `\n <div class=\"multiselect__options\" style=\"${style.multiselect__options}\">\n <ul style=\"${style.multiselect__options_ul}\">\n ${\n this._options.length > 0 && !this._itemTemplate\n ? this._options\n .map((option) => {\n return `\n <li data-value=\"${option.value}\" style=\"${style.multiselect__options_ul_li}\">${option.text}</li>\n `\n })\n .join('')\n : ''\n }\n\n ${\n this._options.length > 0 && this._itemTemplate\n ? this._options\n .map((option, index) => {\n return `\n <li data-value=\"${option.value}\" style=\"${style.multiselect__options_ul_li}\">${this._processTemplate(this._itemTemplate, index)}</li>\n `\n })\n .join('')\n : ''\n }\n ${this._showNoData(this._options.length === 0)}\n </ul>\n </div>\n `\n\n this._multiselect.insertAdjacentHTML('beforeend', html)\n }\n\n /**\n * Renders the multiselect view.\n * @private\n */\n _renderMultiselect () {\n this._select.style.display = 'none'\n const id = 'iconic-' + this._generateId(20)\n // Timea created dedicated div element because previous code was not rendering\n this._multiselect = document.createElement('div')\n this._multiselect.setAttribute('id', id)\n this._multiselect.setAttribute('class', 'multiselect__container')\n this._multiselect.setAttribute('style', style.multiselect__container)\n const html = `\n <div class=\"multiselect__wrapper\" style=\"${style.multiselect__wrapper}\">\n <input class=\"multiselect__input\" style=\"${style.multiselect__input}\" placeholder=\"${this._placeholder}\" />\n </div>\n <span style=\"display: none;\" class=\"multiselect__clear-btn\" style=\"${style.multiselect__clear_btn}\">${this._cross}</span>\n `\n this._multiselect.innerHTML = html\n this._selectContainer.appendChild(this._multiselect)\n }\n\n /**\n * ScrollIntoView - This small utility reproduces the behavior of .scrollIntoView({ block: \"nearest\", inline: \"nearest\" })\n * This is for IE compatibility without a need of a polyfill\n * @private\n */\n _scrollIntoView (parent, child) {\n const rectParent = parent.getBoundingClientRect()\n const rectChild = child.getBoundingClientRect()\n\n // Detect if not visible at top and then scroll to the top\n if (!(rectParent.top < rectChild.bottom - child.offsetHeight)) {\n parent.scrollTop = child.clientHeight + (child.offsetTop - child.offsetHeight)\n }\n\n // Detect if not visible at bottom and then scroll to the bottom\n if (!(rectParent.bottom > rectChild.top + child.offsetHeight)) {\n parent.scrollTop =\n child.clientHeight +\n (child.offsetTop - child.offsetHeight) -\n (parent.offsetHeight - (child.offsetHeight + (child.offsetHeight - child.clientHeight)))\n }\n }\n\n /**\n * Shows a no data message.\n * @param { boolean } condition\n * @private\n */\n _showNoData (condition) {\n return condition ? `<p class=\"multiselect__options--no-data\" style=\"${style.multiselect__options_ul_p_multiselect__options_no_data}\">${this._noData}</p>` : ''\n }\n\n /**\n * Shows a no results message.\n * @param { boolean } condition\n * @private\n */\n _showNoResults (condition) {\n const dom = this._multiselect.querySelector('.multiselect__options--no-results')\n if (condition) {\n const html = `<p class=\"multiselect__options--no-results\" style=\"${style.multiselect__options_ul_p_multiselect__options_no_results}\">${this._noResults}</p>`\n !dom && this._domElements.optionsContainerList.insertAdjacentHTML('beforeend', html)\n } else {\n dom && dom.parentNode && dom.parentNode.removeChild(dom)\n }\n }\n}\n"],"mappings":"mDAaA,IAAaE,EAAb,KAA+B,CAC7B,MACA,aACA,WAAe,CAAC,EAChB,cACA,aACA,QACA,WACA,SAAW,CAAC,EACZ,aACA,QACA,iBACA,iBAAmB,CAAC,EACpB,aACA,WACA,YACA,OAAS;;;;;;;;;;;;;MAyBT,YAAa,CAAE,OAAM,eAAc,SAAQ,YAAW,cAAa,SAAQ,YAAW,cAAa,YAAW,cAAc,CAC1H,KAAK,MAAQC,GAAQ,CAAC,EACtB,KAAK,cAAgBC,GAAgB,KACrC,KAAK,QAAUC,GAAU,iBACzB,KAAK,WAAaC,GAAa,oBAC/B,KAAK,aAAeC,GAAe,YACnC,KAAK,QAAUC,EAEf,KAAK,iBAAmBC,EACxB,KAAK,aAAeC,GAAe,KACnC,KAAK,WAAaC,GAAa,KAC/B,KAAK,YAAcC,GAAc,IACnC,CAMA,MAAQ,CAEN,GAAI,KAAK,SAAW,KAAK,QAAQ,WAAa,SAAU,CACtD,GAAI,KAAK,eAAiB,KAAK,MAAM,SAAW,EAAK,MAAU,MAAM,wEAAwE,EAC7I,GAAI,KAAK,cAAgB,KAAK,MAAM,SAAW,EAAK,MAAU,MAAM,uEAAuE,EAE3I,KAAK,SAAW,KAAK,MAAM,OAAS,EAAI,KAAK,qBAAqB,EAAI,KAAK,sBAAsB,EAEjG,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EAExB,KAAK,aAAe,CAClB,MAAO,KAAK,aAAa,cAAc,yBAAyB,EAChE,MAAO,KAAK,aAAa,cAAc,qBAAqB,EAC5D,iBAAkB,KAAK,aAAa,cAAc,uBAAuB,EACzE,qBAAsB,KAAK,aAAa,cAAc,4BAA4B,EAClF,QAAS,CACP,KAAM,KAAK,aAAa,iBAAiB,iCAAiC,EAC1E,KAAM,SAAU,EAAY,CAC1B,IAAK,IAAIC,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQ,IAAK,CACzC,IAAMC,EAAO,KAAK,KAAKD,GACvB,GAAIE,EAAWD,CAAI,EAAG,OAAOA,CAC/B,CAEF,EACA,KAAM,SAAU,EAAY,CAC1B,IAAK,IAAID,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQ,IAAK,CACzC,IAAMC,EAAO,KAAK,KAAKD,GACvB,GAAIE,EAAWD,EAAMD,CAAC,EAAG,MAAO,EAClC,CACA,MAAO,EACT,CACF,CACF,EAEA,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,CACzB,MACE,MAAU,MAAM,iBAAiB,KAAK,QAAQ,uCAAuC,CAEzF,CAOA,UAAW,EAAU,CACnB,GAAI,OAAOG,GAAa,WACtB,KAAK,OAASA,OAEd,MAAU,MAAM,qDAAqD,CAEzE,CAOA,iBAAkB,EAAQ,EAAO,CAC/B,IAAMC,EAAO,8CAA8CjB,EAAAA,MAAM,sBAAsB,gBAAgBkB,EAAO,MAAM,IAClH,KAAK,aAAe,KAAK,iBAAiB,KAAK,aAAcC,CAAK,EAAID,EAAO,KAC9E,+CAA+ClB,EAAAA,MAAM,wBAAwB,IAAI,KAAK,OAAO,gBAE9F,KAAK,aAAa,MAAM,mBAAmB,cAAeiB,CAAI,EAE9D,GAAM,CAAE,iBAAkBG,GAAc,KAAK,aAAa,cAAc,oBAAoBF,EAAO,MAAM,GAAG,EAC5GE,EAAU,iBAAiB,YAAe,CACxC,IAAMC,EAAS,KAAK,aAAa,QAAQ,KAAM,GAAOC,EAAG,QAAQ,QAAUJ,EAAO,KAAK,EACvF,KAAK,cAAcG,CAAM,CAC3B,CAAC,CACH,CAMA,iBAAmB,CACjB,IAAK,IAAIR,EAAI,EAAGA,EAAI,KAAK,iBAAiB,OAAQ,IAAK,CACrD,IAAMK,EAAS,KAAK,iBAAiBL,GAC/BQ,EAAS,KAAK,aAAa,QAAQ,KAAM,GAAOC,EAAG,QAAQ,QAAUJ,EAAO,KAAK,EACvFG,EAAO,UAAU,OAAO,gCAAgC,EACxDA,EAAO,aAAa,QAASrB,EAAAA,MAAM,oBAAoB,EACvD,KAAK,sBAAsBqB,EAAO,QAAQ,KAAK,CACjD,CACA,KAAK,iBAAmB,CAAC,EACzB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,eAAe,CAClB,OAAQ,oBACR,UAAW,KAAK,gBAClB,CAAC,CACH,CAMA,YAAc,CACZ,KAAK,aAAa,MAAM,MAAQ,GAChC,KAAK,aAAa,iBAAiB,UAAU,OAAO,SAAS,EAC7D,KAAK,aAAa,iBAAiB,aAAa,QAASrB,EAAAA,MAAM,oBAAoB,EACnF,KAAK,eAAe,EAAE,EACtB,KAAK,wBAAwB,CAC/B,CAOA,eAAgB,EAAO,CACrB,KAAK,OAAOuB,CAAK,CACnB,CAMA,wBAA0B,CACxB,SAAS,iBAAiB,WAAY,CAAE,YAAa,CAC9C,KAAK,aAAa,SAASF,CAAM,IACpC,KAAK,eAAe,EAAE,EACtB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EAE5B,CAAC,EAED,KAAK,aAAa,MAAM,iBAAiB,YAAe,CACtD,KAAK,gBAAgB,CACvB,CAAC,EAED,IAAK,IAAIR,EAAI,EAAGA,EAAI,KAAK,aAAa,QAAQ,KAAK,OAAQ,IAEzD,KADoB,aAAa,QAAQ,KAAKA,EACxC,CAAC,iBAAiB,SAAU,CAAE,YAAa,CAC/C,KAAK,cAAcQ,CAAM,EACzB,KAAK,WAAW,CAClB,CAAC,EAGH,KAAK,aAAa,MAAM,iBAAiB,YAAe,CACtD,KAAK,aAAa,iBAAiB,UAAU,IAAI,SAAS,EAC1D,KAAK,aAAa,iBAAiB,aAAa,QAASrB,EAAAA,MAAM,4BAA4B,CAC7F,CAAC,EAED,KAAK,aAAa,MAAM,iBAAiB,SAAU,CAAE,OAAQ,CAAE,YAAc,CACvE,KAAK,aAAa,QAAQ,KAAK,OAAS,GAC1C,KAAK,eAAewB,CAAK,CAE7B,CAAC,EAED,KAAK,aAAa,MAAM,iBAAiB,UAAY,GAAM,CACzD,KAAK,cAAc,CAAC,EACpB,KAAK,iBAAiB,CAAC,EACvB,KAAK,aAAa,CAAC,CACrB,CAAC,CACH,CAOA,eAAgB,EAAO,CACrB,IAAMC,EAAS,KAAK,aAAa,iBAAiB,UAAU,SAAS,SAAS,EACxEC,EAAiBF,EAAM,YAAY,EAOzC,GALI,CAACC,GAAUD,EAAM,OAAS,IAC5B,KAAK,aAAa,iBAAiB,UAAU,IAAI,SAAS,EAC1D,KAAK,aAAa,iBAAiB,aAAa,QAASxB,EAAAA,MAAM,4BAA4B,GAGzF,KAAK,aAAa,QAAQ,KAAK,OAAS,EAAG,CAC7C,IAAK,IAAIa,EAAI,EAAGA,EAAI,KAAK,aAAa,QAAQ,KAAK,OAAQ,IAAK,CAC9D,IAAMS,EAAK,KAAK,aAAa,QAAQ,KAAKT,IAC7B,KAAK,cAAgB,KAAK,MAAMA,EAAE,CAAC,KAAK,YAAcS,EAAG,YAAA,CAE7D,YAAY,CAAC,CAAC,UAAU,EAAGI,EAAe,MAAM,IAAMA,EAC7D,KAAK,aAAa,qBAAqB,YAAYJ,CAAE,EAErDA,EAAG,YAAcA,EAAG,WAAW,YAAYA,CAAE,CAEjD,CAEA,IAAMK,EAAa,KAAK,aAAa,QAAQ,MAC1C,EAAI,KACF,KAAK,cAAgB,KAAK,MAAMR,EAAM,CAAC,KAAK,YAAcG,EAAG,YAAA,CAC3D,YAAY,CAAC,CACb,UAAU,EAAGI,EAAe,MAAM,IAAMA,CAC/C,EACA,KAAK,eAAe,CAACC,CAAU,CACjC,CACF,CAEA,YAAa,EAAQ,CACnB,IAAIC,EAAS,GAGb,IAAK,IAAIf,EAAI,EAAGA,EAAIgB,EAAQ,IAC1B,GAAU,iEAAW,OAAO,KAAK,MAAM,KAAK,OAAO,EAAI,EAAgB,CAAC,EAE1E,OAAOD,CACT,CAMA,uBAAyB,CACvB,IAAME,EAAM,CAAC,EACP,CAAE,WAAY,KAAK,QACzB,IAAK,IAAIjB,EAAI,EAAGA,EAAIkB,EAAQ,OAAQ,IAAK,CACvC,IAAMC,EAAOD,EAAQlB,GACrBiB,EAAI,KAAK,CACP,KAAME,EAAK,KACX,MAAOA,EAAK,MACZ,SAAUA,EAAK,aAAa,UAAU,CACxC,CAAC,CACH,CACA,OAAOF,CACT,CAMA,sBAAwB,CACtB,GAAI,KAAK,MAAM,OAAS,GAAK,KAAK,aAAe,KAAK,WAAY,CAChE,IAAMG,EAAoB,OAAO,KAAK,aAAgB,SAChDC,EAAmB,OAAO,KAAK,YAAe,SAC9CJ,EAAM,CAAC,EAEb,GAAI,CAACG,GAAqB,CAACC,EACzB,MAAU,MAAM,iDAAiD,EAGnE,IAAK,IAAIrB,EAAI,EAAGA,EAAI,KAAK,MAAM,OAAQ,IAAK,CAC1C,IAAMmB,EAAO,KAAK,MAAMnB,GACxBiB,EAAI,KAAK,CACP,MAAOE,EAAK,KAAK,aACjB,KAAMA,EAAK,KAAK,YAChB,SAAU,OAAOA,EAAK,UAAa,WAAYA,EAAK,QACtD,CAAC,CACH,CACA,OAAOF,CACT,CACE,OAAO,IAEX,CAOA,cAAe,EAAO,CACpB,GAAIP,EAAM,UAAY,IAAMA,EAAM,UAAY,GAAI,CAChDA,EAAM,eAAe,EACrB,IAAME,EAAS,KAAK,aAAa,iBAAiB,UAAU,SAAS,SAAS,EAExEU,EAAuB,KAAK,aAAa,cAAc,4BAA4B,EAEzF,GAAI,CAACV,EACH,KAAK,aAAa,iBAAiB,UAAU,IAAI,SAAS,EAC1D,KAAK,aAAa,iBAAiB,aAAa,QAASzB,EAAAA,MAAM,4BAA4B,EAC3FmC,EAAqB,kBAAkB,UAAU,IAAI,gBAAgB,EACrEA,EAAqB,kBAAkB,aAAa,QAASnC,EAAAA,MAAM,yCAAyC,EAC5GmC,EAAqB,kBAAkB,eAAe,EAAK,MACtD,CACL,IAAIC,EAAW,KAAK,aAAa,cAAc,4CAA4C,EACrFC,EAAS,CACb,QAAS,WACT,GAAI,WACJ,UAAW,OACX,KAAM,MACR,EAEA,GAAI,CAACD,EAAU,CACbD,EAAqB,kBAAkB,UAAU,IAAI,gBAAgB,EACrEA,EAAqB,kBAAkB,aAAa,QAASnC,EAAAA,MAAM,yCAAyC,EAC5GmC,EAAqB,kBAAkB,eAAe,EAAK,EAC3D,MACF,CAQA,GANAC,EAAS,UAAU,OAAO,gBAAgB,EAC1CA,EAAS,aAAa,QAASpC,EAAAA,MAAM,0BAA0B,EAE/D,EAAWoC,EAASC,EAAOd,EAAM,KAAO,kBAGpC,CAACa,EAAU,CACb,EACAD,EAAqB,SAASE,EAAOd,EAAM,OAAS,OAAS,EAAIY,EAAqB,SAAS,OAAS,GACxGC,EAAS,UAAU,IAAI,gBAAgB,EACvCA,EAAS,aAAa,QAASpC,EAAAA,MAAM,yCAAyC,EAC9E,KAAK,gBAAgBmC,EAAsBC,CAAQ,EACnD,MACF,CAEAA,EAAS,UAAU,IAAI,gBAAgB,EACvCA,EAAS,aAAa,QAASpC,EAAAA,MAAM,yCAAyC,EAC9E,KAAK,gBAAgBmC,EAAsBC,CAAQ,CACrD,CACF,CACF,CAOA,iBAAkB,EAAG,CACnB,GAAIE,EAAE,UAAY,GAAKA,EAAE,OAAO,QAAU,GAAI,CAC5C,IAAMC,EACJ,KAAK,iBAAiB,OAAS,EAAI,KAAK,iBAAiB,KAAK,iBAAiB,OAAS,GAAK,KAE/F,GAAIA,EAAoB,CACtB,IAAMC,EAA2B,KAAK,aAAa,cACjD,kBAAkBD,EAAmB,MAAM,GAC7C,EACA,KAAK,cAAcC,CAAwB,EAEvC,KAAK,iBAAiB,SAAW,IACnC,KAAK,aAAa,iBAAiB,UAAU,OAAO,SAAS,EAC7D,KAAK,aAAa,iBAAiB,aAAa,QAASxC,EAAAA,MAAM,oBAAoB,EAEvF,CACF,CACF,CAMA,0BAA4B,CACtB,KAAK,iBAAiB,OAAS,EACjC,KAAK,aAAa,MAAM,MAAM,QAAU,OAExC,KAAK,aAAa,MAAM,MAAM,QAAU,MAE5C,CAOA,aAAc,EAAO,CACnB,GAAIuB,EAAM,UAAY,GAAI,CACxB,IAAMa,EAAW,KAAK,aAAa,cAAc,4CAA4C,EACzFA,IACF,KAAK,cAAcA,CAAQ,EAC3B,KAAK,WAAW,EAEpB,CACF,CAEA,cAAe,EAAQ,EAAgB,GAAM,CAE3C,IAAK,IAAIvB,EAAI,EAAGA,EAAI,KAAK,iBAAiB,OAAQ,IAEhD,GADW,KAAK,iBAAiBA,EAC3B,CAAC,QAAUQ,EAAO,QAAQ,MAQ9B,OAPAA,EAAO,UAAU,OAAO,gCAAgC,EACxDA,EAAO,aAAa,QAASrB,EAAAA,MAAM,oBAAoB,EACvD,KAAK,iBAAiB,OAAOa,EAAG,CAAC,EACjC,KAAK,sBAAsBQ,EAAO,QAAQ,KAAK,EAC/C,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EAGtBoB,GACA,KAAK,eAAe,CAClB,OAAQ,gBACR,MAAOpB,EAAO,QAAQ,MACtB,UAAW,KAAK,gBAClB,CAAC,EAMP,IAAK,IAAIR,EAAI,EAAGA,EAAI,KAAK,SAAS,OAAQ,IAAK,CAC7C,IAAMK,EAAS,KAAK,SAASL,GAC7B,GAAIK,EAAO,QAAUG,EAAO,QAAQ,MAQlC,OAPAA,EAAO,UAAU,IAAI,gCAAgC,EACrDA,EAAO,aAAa,QAASrB,EAAAA,MAAM,6BAA6B,EAChE,KAAK,iBAAmB,CAAC,GAAG,KAAK,iBAAkBkB,CAAM,EACzD,KAAK,iBAAiBA,EAAQL,CAAC,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EAGtB4B,GACA,KAAK,eAAe,CAClB,OAAQ,aACR,MAAOpB,EAAO,QAAQ,MACtB,UAAW,KAAK,gBAClB,CAAC,CAGP,CACF,CAMA,oBAAsB,CACpB,KAAK,aAAa,MAAM,YAAc,KAAK,YAC7C,CAEA,mBAAqB,CACnB,IAAIqB,EAAmB,GAEvB,IAAK,IAAI7B,EAAI,EAAGA,EAAI,KAAK,SAAS,OAAQ,IAAK,CAC7C,IAAMK,EAAS,KAAK,SAASL,GAC7B,GAAIK,EAAO,SAAU,CACnB,EAAmB,GACnB,IAAMG,EAAS,KAAK,aAAa,QAAQ,KAAM,GAAOC,EAAG,QAAQ,QAAUJ,EAAO,KAAK,EACvFG,EAAO,UAAU,IAAI,gCAAgC,EACrDA,EAAO,aAAa,QAASrB,EAAAA,MAAM,6BAA6B,EAChE,KAAK,iBAAmB,CAAC,GAAG,KAAK,iBAAkBkB,CAAM,EACzD,KAAK,iBAAiBA,EAAQL,CAAC,CACjC,CACF,CAEI6B,GAAoB,KAAK,yBAAyB,EACtD,KAAK,mBAAmB,CAC1B,CAOA,iBAAkB,EAAU,EAAO,CACjC,IAAIC,EAAoBC,EAClBC,EAAUD,EAAS,MAAM,cAAc,CAAC,CAAC,IAAK,GAAM,EAAE,QAAQ,WAAY,EAAE,CAAC,EAEnF,IAAK,IAAI/B,EAAI,EAAGA,EAAIgC,EAAQ,OAAQ,IAAK,CACvC,IAAMC,EAAOD,EAAQhC,GAErB,EAAoB8B,EAAkB,QAAQ,OAAOG,EAAK,IAAK,KAAK,MAAM3B,EAAM,CAAC2B,IAAS,EAAE,CAC9F,CAEA,OAAOH,CACT,CAEA,yBAA2B,CACzB,IAAMI,EAAY,iBACZ1B,EAAS,KAAK,aAAa,QAAQ,KAAM,GAAOC,EAAG,UAAU,SAASyB,CAAS,CAAC,EACtF1B,GAAUA,EAAO,UAAU,OAAO0B,CAAS,GAAK1B,EAAO,aAAa,QAASrB,EAAAA,MAAM,0BAA0B,CAC/G,CAOA,sBAAuB,EAAO,CAC5B,IAAMgD,EAAY,KAAK,aAAa,cAAc,oBAAoBxB,EAAM,GAAG,EAC/EwB,GAAaA,EAAU,YAAcA,EAAU,WAAW,YAAYA,CAAS,CACjF,CAMA,oBAAsB,CACpB,IAAM/B,EAAO;mDACkCjB,EAAAA,MAAM,qBAAqB;uBACvDA,EAAAA,MAAM,wBAAwB;YAEzC,KAAK,SAAS,OAAS,GAAK,CAAC,KAAK,cAC9B,KAAK,SACF,IAAK,GACG;gCACKkB,EAAO,MAAM,WAAWlB,EAAAA,MAAM,2BAA2B,IAAIkB,EAAO,KAAK;aAEtF,CAAC,CACD,KAAK,EAAE,EACV,GACL;;YAGC,KAAK,SAAS,OAAS,GAAK,KAAK,cAC7B,KAAK,SACF,KAAK,EAAQ,IACL;gCACKA,EAAO,MAAM,WAAWlB,EAAAA,MAAM,2BAA2B,IAAI,KAAK,iBAAiB,KAAK,cAAemB,CAAK,EAAE;aAE3H,CAAC,CACD,KAAK,EAAE,EACV,GACL;YACC,KAAK,YAAY,KAAK,SAAS,SAAW,CAAC,EAAE;;;QAKrD,KAAK,aAAa,mBAAmB,YAAaF,CAAI,CACxD,CAMA,oBAAsB,CACpB,KAAK,QAAQ,MAAM,QAAU,OAC7B,IAAMgC,EAAK,UAAY,KAAK,YAAY,EAAE,EAE1C,KAAK,aAAe,SAAS,cAAc,KAAK,EAChD,KAAK,aAAa,aAAa,KAAMA,CAAE,EACvC,KAAK,aAAa,aAAa,QAAS,wBAAwB,EAChE,KAAK,aAAa,aAAa,QAASjD,EAAAA,MAAM,sBAAsB,EACpE,IAAMiB,EAAO;mDACkCjB,EAAAA,MAAM,qBAAqB;qDACzBA,EAAAA,MAAM,mBAAmB,iBAAiB,KAAK,aAAa;;6EAEpCA,EAAAA,MAAM,uBAAuB,IAAI,KAAK,OAAO;MAEtH,KAAK,aAAa,UAAYiB,EAC9B,KAAK,iBAAiB,YAAY,KAAK,YAAY,CACrD,CAOA,gBAAiB,EAAQ,EAAO,CAC9B,IAAMiC,EAAaC,EAAO,sBAAsB,EAC1CC,EAAYC,EAAM,sBAAsB,EAGxCH,EAAW,IAAME,EAAU,OAASC,EAAM,eAC9C,EAAO,UAAYA,EAAM,cAAgBA,EAAM,UAAYA,EAAM,eAI7DH,EAAW,OAASE,EAAU,IAAMC,EAAM,eAC9C,EAAO,UACLA,EAAM,cACLA,EAAM,UAAYA,EAAM,eACxBF,EAAO,cAAgBE,EAAM,cAAgBA,EAAM,aAAeA,EAAM,gBAE/E,CAOA,YAAa,EAAW,CACtB,OAAOC,EAAY,mDAAmDtD,EAAAA,MAAM,uDAAuD,IAAI,KAAK,QAAQ,MAAQ,EAC9J,CAOA,eAAgB,EAAW,CACzB,IAAMuD,EAAM,KAAK,aAAa,cAAc,mCAAmC,EAC/E,GAAID,EAAW,CACb,IAAMrC,EAAO,sDAAsDjB,EAAAA,MAAM,0DAA0D,IAAI,KAAK,WAAW,MACvJ,CAACuD,GAAO,KAAK,aAAa,qBAAqB,mBAAmB,YAAatC,CAAI,CACrF,MACEsC,GAAOA,EAAI,YAAcA,EAAI,WAAW,YAAYA,CAAG,CAE3D,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multiSelect.esm.js","names":[],"sources":["../../src/widgets/multiSelect.js"],"sourcesContent":["/*\n * IconicMultiSelect v0.7.0\n * Licence: MIT\n * (c) 2021 Sidney Wimart.\n * repo & configuration: https://github.com/sidneywm/iconic-multiselect\n */\n\n/**\n * @version IconicMultiSelect v0.7.0\n * @licence MIT\n */\nimport { style } from '../lib/style_multiSelect'\n\nexport class IconicMultiSelect {\n _data\n _domElements\n _event = () => {}\n _itemTemplate\n _multiselect\n _noData\n _noResults\n _options = []\n _placeholder\n _select\n _selectContainer\n _selectedOptions = []\n _tagTemplate\n _textField\n _valueField\n _cross = `\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.2253 4.81108C5.83477 4.42056 5.20161 4.42056 4.81108 4.81108C4.42056 5.20161 4.42056 5.83477 4.81108 6.2253L10.5858 12L4.81114 17.7747C4.42062 18.1652 4.42062 18.7984 4.81114 19.1889C5.20167 19.5794 5.83483 19.5794 6.22535 19.1889L12 13.4142L17.7747 19.1889C18.1652 19.5794 18.7984 19.5794 19.1889 19.1889C19.5794 18.7984 19.5794 18.1652 19.1889 17.7747L13.4142 12L19.189 6.2253C19.5795 5.83477 19.5795 5.20161 19.189 4.81108C18.7985 4.42056 18.1653 4.42056 17.7748 4.81108L12 10.5858L6.2253 4.81108Z\"\n fill=\"currentColor\"\n />\n </svg>\n `\n\n /**\n * Iconic Multiselect constructor.\n * @param { Object[] } data - Array of objects.\n * @param { string } noData - Defines the message when there is no data input.\n * @param { string } noResults - Defines the message when there is no result if options are filtered.\n * @param { string } placeholder - Defines the placeholder's text.\n * @param { string } select - DOM element to be selected. It must be a HTML Select tag - https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select\n * @param { string } textField - Field to select in the object for the text.\n * @param { string } valueField - Field to select in the object for the value.\n */\n constructor ({ data, itemTemplate, noData, noResults, placeholder, select, container, tagTemplate, textField, valueField }) {\n this._data = data ?? []\n this._itemTemplate = itemTemplate ?? null\n this._noData = noData ?? 'No data found.'\n this._noResults = noResults ?? 'No results found.'\n this._placeholder = placeholder ?? 'Select...'\n this._select = select\n // Timea added a container here\n this._selectContainer = container\n this._tagTemplate = tagTemplate ?? null\n this._textField = textField ?? null\n this._valueField = valueField ?? null\n }\n\n /**\n * Initialize the Iconic Multiselect component.\n * @public\n */\n init () {\n // Timea change to use this._select instead of this._selectContainer\n if (this._select && this._select.nodeName === 'SELECT') {\n if (this._itemTemplate && this._data.length === 0) { throw new Error('itemTemplate must be initialized with data from the component settings') }\n if (this._tagTemplate && this._data.length === 0) { throw new Error('tagTemplate must be initialized with data from the component settings') }\n\n this._options = this._data.length > 0 ? this._getDataFromSettings() : this._getDataFromSelectTag()\n\n this._renderMultiselect()\n this._renderOptionsList()\n\n this._domElements = {\n clear: this._multiselect.querySelector('.multiselect__clear-btn'),\n input: this._multiselect.querySelector('.multiselect__input'),\n optionsContainer: this._multiselect.querySelector('.multiselect__options'),\n optionsContainerList: this._multiselect.querySelector('.multiselect__options > ul'),\n options: {\n list: this._multiselect.querySelectorAll('.multiselect__options > ul > li'),\n find: function (callbackFn) {\n for (let i = 0; i < this.list.length; i++) {\n const node = this.list[i]\n if (callbackFn(node)) return node\n }\n return undefined\n },\n some: function (callbackFn) {\n for (let i = 0; i < this.list.length; i++) {\n const node = this.list[i]\n if (callbackFn(node, i)) return true\n }\n return false\n }\n }\n }\n\n this._enableEventListenners()\n this._initSelectedList()\n } else {\n throw new Error(`The selector '${this._select}' did not select any valid select tag.`)\n }\n }\n\n /**\n * Subscribes to the emitted events.\n * @param { Function } callback - Callback function which emits a custom event object.\n * @public\n */\n subscribe (callback) {\n if (typeof callback === 'function') {\n this._event = callback\n } else {\n throw new Error('parameter in the subscribe method is not a function')\n }\n }\n\n /**\n * Add an option to the selection list.\n * @param { Object: { text: string; value: string; }} option\n * @private\n */\n _addOptionToList (option, index) {\n const html = `<span class=\"multiselect__selected\" style=\"${style.multiselect__selected}\" data-value=\"${option.value}\">${\n this._tagTemplate ? this._processTemplate(this._tagTemplate, index) : option.text\n }<span class=\"multiselect__remove-btn\" style=\"${style.multiselect__remove_btn}\">${this._cross}</span></span>`\n\n this._domElements.input.insertAdjacentHTML('beforebegin', html)\n\n const { lastElementChild: removeBtn } = this._multiselect.querySelector(`span[data-value=\"${option.value}\"]`)\n removeBtn.addEventListener('click', () => {\n const target = this._domElements.options.find((el) => el.dataset.value === option.value)\n this._handleOption(target)\n })\n }\n\n /**\n * Clears all selected options.\n * @private\n */\n _clearSelection () {\n for (let i = 0; i < this._selectedOptions.length; i++) {\n const option = this._selectedOptions[i]\n const target = this._domElements.options.find((el) => el.dataset.value === option.value)\n target.classList.remove('multiselect__options--selected')\n target.setAttribute('style', style.multiselect__options)\n this._removeOptionFromList(target.dataset.value)\n }\n this._selectedOptions = []\n this._handleClearSelectionBtn()\n this._handlePlaceholder()\n this._dispatchEvent({\n action: 'CLEAR_ALL_OPTIONS',\n selection: this._selectedOptions\n })\n }\n\n /**\n * Close the options container.\n * @private\n */\n _closeList () {\n this._domElements.input.value = ''\n this._domElements.optionsContainer.classList.remove('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options)\n this._filterOptions('')\n this._removeAllArrowSelected()\n }\n\n /**\n * Dispatches new events.\n * @param { object : { action: string; selection: { option: string; text: string; }[]; value?: string; } } event\n * @private\n */\n _dispatchEvent (event) {\n this._event(event)\n }\n\n /**\n * Enables all main event listenners.\n * @private\n */\n _enableEventListenners () {\n document.addEventListener('mouseup', ({ target }) => {\n if (!this._multiselect.contains(target)) {\n this._filterOptions('')\n this._closeList()\n this._handlePlaceholder()\n }\n })\n\n this._domElements.clear.addEventListener('click', () => {\n this._clearSelection()\n })\n\n for (let i = 0; i < this._domElements.options.list.length; i++) {\n const option = this._domElements.options.list[i]\n option.addEventListener('click', ({ target }) => {\n this._handleOption(target)\n this._closeList()\n })\n }\n\n this._domElements.input.addEventListener('focus', () => {\n this._domElements.optionsContainer.classList.add('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options_visible)\n })\n\n this._domElements.input.addEventListener('input', ({ target: { value } }) => {\n if (this._domElements.options.list.length > 0) {\n this._filterOptions(value)\n }\n })\n\n this._domElements.input.addEventListener('keydown', (e) => {\n this._handleArrows(e)\n this._handleBackspace(e)\n this._handleEnter(e)\n })\n }\n\n /**\n * Filters user input.\n * @param { string } value\n * @private\n */\n _filterOptions (value) {\n const isOpen = this._domElements.optionsContainer.classList.contains('visible')\n const valueLowerCase = value.toLowerCase()\n\n if (!isOpen && value.length > 0) {\n this._domElements.optionsContainer.classList.add('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options_visible)\n }\n\n if (this._domElements.options.list.length > 0) {\n for (let i = 0; i < this._domElements.options.list.length; i++) {\n const el = this._domElements.options.list[i]\n const text = this._itemTemplate ? this._data[i][this._textField] : el.textContent\n\n if (text.toLowerCase().substring(0, valueLowerCase.length) === valueLowerCase) {\n this._domElements.optionsContainerList.appendChild(el)\n } else {\n el.parentNode && el.parentNode.removeChild(el)\n }\n }\n\n const hasResults = this._domElements.options.some(\n (el, index) =>\n (this._itemTemplate ? this._data[index][this._textField] : el.textContent)\n .toLowerCase()\n .substring(0, valueLowerCase.length) === valueLowerCase\n )\n this._showNoResults(!hasResults)\n }\n }\n\n _generateId (length) {\n let result = ''\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n const charactersLength = characters.length\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength))\n }\n return result\n }\n\n /**\n * Gets data from select tag.\n * @private\n */\n _getDataFromSelectTag () {\n const arr = []\n const { options } = this._select\n for (let i = 0; i < options.length; i++) {\n const item = options[i]\n arr.push({\n text: item.text,\n value: item.value,\n selected: item.hasAttribute('selected')\n })\n }\n return arr\n }\n\n /**\n * Gets data from settings.\n * @private\n */\n _getDataFromSettings () {\n if (this._data.length > 0 && this._valueField && this._textField) {\n const isValueFieldValid = typeof this._valueField === 'string'\n const isTextFieldValid = typeof this._textField === 'string'\n const arr = []\n\n if (!isValueFieldValid || !isTextFieldValid) {\n throw new Error('textField and valueField must be of type string')\n }\n\n for (let i = 0; i < this._data.length; i++) {\n const item = this._data[i]\n arr.push({\n value: item[this._valueField],\n text: item[this._textField],\n selected: typeof item.selected === 'boolean' ? item.selected : false\n })\n }\n return arr\n } else {\n return null\n }\n }\n\n /**\n * Handles Arrow up & Down. Selection of an option is also possible with these keys.\n * @param { Event } event\n * @private\n */\n _handleArrows (event) {\n if (event.keyCode === 40 || event.keyCode === 38) {\n event.preventDefault()\n const isOpen = this._domElements.optionsContainer.classList.contains('visible')\n // An updated view of the container is needed because of the filtering option\n const optionsContainerList = this._multiselect.querySelector('.multiselect__options > ul')\n\n if (!isOpen) {\n this._domElements.optionsContainer.classList.add('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options_visible)\n optionsContainerList.firstElementChild.classList.add('arrow-selected')\n optionsContainerList.firstElementChild.setAttribute('style', style.multiselect__options_ul_li_arrow_selected)\n optionsContainerList.firstElementChild.scrollIntoView(false)\n } else {\n let selected = this._multiselect.querySelector('.multiselect__options ul li.arrow-selected')\n const action = {\n ArrowUp: 'previous',\n Up: 'previous',\n ArrowDown: 'next',\n Down: 'next'\n }\n\n if (!selected) {\n optionsContainerList.firstElementChild.classList.add('arrow-selected')\n optionsContainerList.firstElementChild.setAttribute('style', style.multiselect__options_ul_li_arrow_selected)\n optionsContainerList.firstElementChild.scrollIntoView(false)\n return\n }\n\n selected.classList.remove('arrow-selected')\n selected.setAttribute('style', style.multiselect__options_ul_li)\n\n selected = selected[action[event.key] + 'ElementSibling']\n\n // Go to start or end of the popup list\n if (!selected) {\n selected =\n optionsContainerList.children[action[event.key] === 'next' ? 0 : optionsContainerList.children.length - 1]\n selected.classList.add('arrow-selected')\n selected.setAttribute('style', style.multiselect__options_ul_li_arrow_selected)\n this._scrollIntoView(optionsContainerList, selected)\n return\n }\n\n selected.classList.add('arrow-selected')\n selected.setAttribute('style', style.multiselect__options_ul_li_arrow_selected)\n this._scrollIntoView(optionsContainerList, selected)\n }\n }\n }\n\n /**\n * Handles the backspace key event - Deletes the preceding option in the selection list.\n * @param { Event } e\n * @private\n */\n _handleBackspace (e) {\n if (e.keyCode === 8 && e.target.value === '') {\n const lastSelectedOption =\n this._selectedOptions.length > 0 ? this._selectedOptions[this._selectedOptions.length - 1] : null\n\n if (lastSelectedOption) {\n const targetLastSelectedOption = this._multiselect.querySelector(\n `li[data-value=\"${lastSelectedOption.value}\"]`\n )\n this._handleOption(targetLastSelectedOption)\n\n if (this._selectedOptions.length === 0) {\n this._domElements.optionsContainer.classList.remove('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options)\n }\n }\n }\n }\n\n /**\n * Shows clear selection button if some options are selected.\n * @private\n */\n _handleClearSelectionBtn () {\n if (this._selectedOptions.length > 0) {\n this._domElements.clear.style.display = 'flex'\n } else {\n this._domElements.clear.style.display = 'none'\n }\n }\n\n /**\n * Handles the enter key event.\n * @param { Event } event\n * @private\n */\n _handleEnter (event) {\n if (event.keyCode === 13) {\n const selected = this._multiselect.querySelector('.multiselect__options ul li.arrow-selected')\n if (selected) {\n this._handleOption(selected)\n this._closeList()\n }\n }\n }\n\n _handleOption (target, dispatchEvent = true) {\n // Remove\n for (let i = 0; i < this._selectedOptions.length; i++) {\n const el = this._selectedOptions[i]\n if (el.value === target.dataset.value) {\n target.classList.remove('multiselect__options--selected')\n target.setAttribute('style', style.multiselect__options)\n this._selectedOptions.splice(i, 1)\n this._removeOptionFromList(target.dataset.value)\n this._handleClearSelectionBtn()\n this._handlePlaceholder()\n\n return (\n dispatchEvent &&\n this._dispatchEvent({\n action: 'REMOVE_OPTION',\n value: target.dataset.value,\n selection: this._selectedOptions\n })\n )\n }\n }\n\n // Add\n for (let i = 0; i < this._options.length; i++) {\n const option = this._options[i]\n if (option.value === target.dataset.value) {\n target.classList.add('multiselect__options--selected')\n target.setAttribute('style', style.multiselect__options_selected)\n this._selectedOptions = [...this._selectedOptions, option]\n this._addOptionToList(option, i)\n this._handleClearSelectionBtn()\n this._handlePlaceholder()\n\n return (\n dispatchEvent &&\n this._dispatchEvent({\n action: 'ADD_OPTION',\n value: target.dataset.value,\n selection: this._selectedOptions\n })\n )\n }\n }\n }\n\n /**\n * Shows the placeholder if no options are selected.\n * @private\n */\n _handlePlaceholder () {\n this._domElements.input.placeholder = this._placeholder\n }\n\n _initSelectedList () {\n let hasItemsSelected = false\n\n for (let i = 0; i < this._options.length; i++) {\n const option = this._options[i]\n if (option.selected) {\n hasItemsSelected = true\n const target = this._domElements.options.find((el) => el.dataset.value === option.value)\n target.classList.add('multiselect__options--selected')\n target.setAttribute('style', style.multiselect__options_selected)\n this._selectedOptions = [...this._selectedOptions, option]\n this._addOptionToList(option, i)\n }\n }\n\n if (hasItemsSelected) { this._handleClearSelectionBtn() }\n this._handlePlaceholder()\n }\n\n /**\n * Process the custom template.\n * @param { string } template\n * @private\n */\n _processTemplate (template, index) {\n let processedTemplate = template\n const objAttr = template.match(/\\$\\{(\\w+)\\}/g).map((e) => e.replace(/\\$\\{|\\}/g, ''))\n\n for (let i = 0; i < objAttr.length; i++) {\n const attr = objAttr[i]\n // eslint-disable-next-line no-useless-escape\n processedTemplate = processedTemplate.replace(`\\$\\{${attr}\\}`, this._data[index][attr] ?? '')\n }\n\n return processedTemplate\n }\n\n _removeAllArrowSelected () {\n const className = 'arrow-selected'\n const target = this._domElements.options.find((el) => el.classList.contains(className))\n target && target.classList.remove(className) && target.setAttribute('style', style.multiselect__options_ul_li)\n }\n\n /**\n * Removes an option from the list.\n * @param { string } value\n * @private\n */\n _removeOptionFromList (value) {\n const optionDom = this._multiselect.querySelector(`span[data-value=\"${value}\"]`)\n optionDom && optionDom.parentNode && optionDom.parentNode.removeChild(optionDom)\n }\n\n /**\n * Renders the multiselect options list view.\n * @private\n */\n _renderOptionsList () {\n const html = `\n <div class=\"multiselect__options\" style=\"${style.multiselect__options}\">\n <ul style=\"${style.multiselect__options_ul}\">\n ${\n this._options.length > 0 && !this._itemTemplate\n ? this._options\n .map((option) => {\n return `\n <li data-value=\"${option.value}\" style=\"${style.multiselect__options_ul_li}\">${option.text}</li>\n `\n })\n .join('')\n : ''\n }\n\n ${\n this._options.length > 0 && this._itemTemplate\n ? this._options\n .map((option, index) => {\n return `\n <li data-value=\"${option.value}\" style=\"${style.multiselect__options_ul_li}\">${this._processTemplate(this._itemTemplate, index)}</li>\n `\n })\n .join('')\n : ''\n }\n ${this._showNoData(this._options.length === 0)}\n </ul>\n </div>\n `\n\n this._multiselect.insertAdjacentHTML('beforeend', html)\n }\n\n /**\n * Renders the multiselect view.\n * @private\n */\n _renderMultiselect () {\n this._select.style.display = 'none'\n const id = 'iconic-' + this._generateId(20)\n // Timea created dedicated div element because previous code was not rendering\n this._multiselect = document.createElement('div')\n this._multiselect.setAttribute('id', id)\n this._multiselect.setAttribute('class', 'multiselect__container')\n this._multiselect.setAttribute('style', style.multiselect__container)\n const html = `\n <div class=\"multiselect__wrapper\" style=\"${style.multiselect__wrapper}\">\n <input class=\"multiselect__input\" style=\"${style.multiselect__input}\" placeholder=\"${this._placeholder}\" />\n </div>\n <span style=\"display: none;\" class=\"multiselect__clear-btn\" style=\"${style.multiselect__clear_btn}\">${this._cross}</span>\n `\n this._multiselect.innerHTML = html\n this._selectContainer.appendChild(this._multiselect)\n }\n\n /**\n * ScrollIntoView - This small utility reproduces the behavior of .scrollIntoView({ block: \"nearest\", inline: \"nearest\" })\n * This is for IE compatibility without a need of a polyfill\n * @private\n */\n _scrollIntoView (parent, child) {\n const rectParent = parent.getBoundingClientRect()\n const rectChild = child.getBoundingClientRect()\n\n // Detect if not visible at top and then scroll to the top\n if (!(rectParent.top < rectChild.bottom - child.offsetHeight)) {\n parent.scrollTop = child.clientHeight + (child.offsetTop - child.offsetHeight)\n }\n\n // Detect if not visible at bottom and then scroll to the bottom\n if (!(rectParent.bottom > rectChild.top + child.offsetHeight)) {\n parent.scrollTop =\n child.clientHeight +\n (child.offsetTop - child.offsetHeight) -\n (parent.offsetHeight - (child.offsetHeight + (child.offsetHeight - child.clientHeight)))\n }\n }\n\n /**\n * Shows a no data message.\n * @param { boolean } condition\n * @private\n */\n _showNoData (condition) {\n return condition ? `<p class=\"multiselect__options--no-data\" style=\"${style.multiselect__options_ul_p_multiselect__options_no_data}\">${this._noData}</p>` : ''\n }\n\n /**\n * Shows a no results message.\n * @param { boolean } condition\n * @private\n */\n _showNoResults (condition) {\n const dom = this._multiselect.querySelector('.multiselect__options--no-results')\n if (condition) {\n const html = `<p class=\"multiselect__options--no-results\" style=\"${style.multiselect__options_ul_p_multiselect__options_no_results}\">${this._noResults}</p>`\n !dom && this._domElements.optionsContainerList.insertAdjacentHTML('beforeend', html)\n } else {\n dom && dom.parentNode && dom.parentNode.removeChild(dom)\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"multiSelect.esm.js","names":["IconicMultiSelect","data","itemTemplate","noData","noResults","placeholder","select","container","tagTemplate","textField","valueField","i","node","callbackFn","callback","html","style","option","index","removeBtn","target","el","event","value","isOpen","valueLowerCase","hasResults","result","length","arr","options","item","isValueFieldValid","isTextFieldValid","optionsContainerList","selected","action","e","lastSelectedOption","targetLastSelectedOption","dispatchEvent","hasItemsSelected","processedTemplate","template","objAttr","attr","className","optionDom","id","rectParent","parent","rectChild","child","condition","dom"],"sources":["../../src/widgets/multiSelect.js"],"sourcesContent":["/*\n * IconicMultiSelect v0.7.0\n * Licence: MIT\n * (c) 2021 Sidney Wimart.\n * repo & configuration: https://github.com/sidneywm/iconic-multiselect\n */\n\n/**\n * @version IconicMultiSelect v0.7.0\n * @licence MIT\n */\nimport { style } from '../lib/style_multiSelect'\n\nexport class IconicMultiSelect {\n _data\n _domElements\n _event = () => {}\n _itemTemplate\n _multiselect\n _noData\n _noResults\n _options = []\n _placeholder\n _select\n _selectContainer\n _selectedOptions = []\n _tagTemplate\n _textField\n _valueField\n _cross = `\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.2253 4.81108C5.83477 4.42056 5.20161 4.42056 4.81108 4.81108C4.42056 5.20161 4.42056 5.83477 4.81108 6.2253L10.5858 12L4.81114 17.7747C4.42062 18.1652 4.42062 18.7984 4.81114 19.1889C5.20167 19.5794 5.83483 19.5794 6.22535 19.1889L12 13.4142L17.7747 19.1889C18.1652 19.5794 18.7984 19.5794 19.1889 19.1889C19.5794 18.7984 19.5794 18.1652 19.1889 17.7747L13.4142 12L19.189 6.2253C19.5795 5.83477 19.5795 5.20161 19.189 4.81108C18.7985 4.42056 18.1653 4.42056 17.7748 4.81108L12 10.5858L6.2253 4.81108Z\"\n fill=\"currentColor\"\n />\n </svg>\n `\n\n /**\n * Iconic Multiselect constructor.\n * @param { Object[] } data - Array of objects.\n * @param { string } noData - Defines the message when there is no data input.\n * @param { string } noResults - Defines the message when there is no result if options are filtered.\n * @param { string } placeholder - Defines the placeholder's text.\n * @param { string } select - DOM element to be selected. It must be a HTML Select tag - https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select\n * @param { string } textField - Field to select in the object for the text.\n * @param { string } valueField - Field to select in the object for the value.\n */\n constructor ({ data, itemTemplate, noData, noResults, placeholder, select, container, tagTemplate, textField, valueField }) {\n this._data = data ?? []\n this._itemTemplate = itemTemplate ?? null\n this._noData = noData ?? 'No data found.'\n this._noResults = noResults ?? 'No results found.'\n this._placeholder = placeholder ?? 'Select...'\n this._select = select\n // Timea added a container here\n this._selectContainer = container\n this._tagTemplate = tagTemplate ?? null\n this._textField = textField ?? null\n this._valueField = valueField ?? null\n }\n\n /**\n * Initialize the Iconic Multiselect component.\n * @public\n */\n init () {\n // Timea change to use this._select instead of this._selectContainer\n if (this._select && this._select.nodeName === 'SELECT') {\n if (this._itemTemplate && this._data.length === 0) { throw new Error('itemTemplate must be initialized with data from the component settings') }\n if (this._tagTemplate && this._data.length === 0) { throw new Error('tagTemplate must be initialized with data from the component settings') }\n\n this._options = this._data.length > 0 ? this._getDataFromSettings() : this._getDataFromSelectTag()\n\n this._renderMultiselect()\n this._renderOptionsList()\n\n this._domElements = {\n clear: this._multiselect.querySelector('.multiselect__clear-btn'),\n input: this._multiselect.querySelector('.multiselect__input'),\n optionsContainer: this._multiselect.querySelector('.multiselect__options'),\n optionsContainerList: this._multiselect.querySelector('.multiselect__options > ul'),\n options: {\n list: this._multiselect.querySelectorAll('.multiselect__options > ul > li'),\n find: function (callbackFn) {\n for (let i = 0; i < this.list.length; i++) {\n const node = this.list[i]\n if (callbackFn(node)) return node\n }\n return undefined\n },\n some: function (callbackFn) {\n for (let i = 0; i < this.list.length; i++) {\n const node = this.list[i]\n if (callbackFn(node, i)) return true\n }\n return false\n }\n }\n }\n\n this._enableEventListenners()\n this._initSelectedList()\n } else {\n throw new Error(`The selector '${this._select}' did not select any valid select tag.`)\n }\n }\n\n /**\n * Subscribes to the emitted events.\n * @param { Function } callback - Callback function which emits a custom event object.\n * @public\n */\n subscribe (callback) {\n if (typeof callback === 'function') {\n this._event = callback\n } else {\n throw new Error('parameter in the subscribe method is not a function')\n }\n }\n\n /**\n * Add an option to the selection list.\n * @param { Object: { text: string; value: string; }} option\n * @private\n */\n _addOptionToList (option, index) {\n const html = `<span class=\"multiselect__selected\" style=\"${style.multiselect__selected}\" data-value=\"${option.value}\">${\n this._tagTemplate ? this._processTemplate(this._tagTemplate, index) : option.text\n }<span class=\"multiselect__remove-btn\" style=\"${style.multiselect__remove_btn}\">${this._cross}</span></span>`\n\n this._domElements.input.insertAdjacentHTML('beforebegin', html)\n\n const { lastElementChild: removeBtn } = this._multiselect.querySelector(`span[data-value=\"${option.value}\"]`)\n removeBtn.addEventListener('click', () => {\n const target = this._domElements.options.find((el) => el.dataset.value === option.value)\n this._handleOption(target)\n })\n }\n\n /**\n * Clears all selected options.\n * @private\n */\n _clearSelection () {\n for (let i = 0; i < this._selectedOptions.length; i++) {\n const option = this._selectedOptions[i]\n const target = this._domElements.options.find((el) => el.dataset.value === option.value)\n target.classList.remove('multiselect__options--selected')\n target.setAttribute('style', style.multiselect__options)\n this._removeOptionFromList(target.dataset.value)\n }\n this._selectedOptions = []\n this._handleClearSelectionBtn()\n this._handlePlaceholder()\n this._dispatchEvent({\n action: 'CLEAR_ALL_OPTIONS',\n selection: this._selectedOptions\n })\n }\n\n /**\n * Close the options container.\n * @private\n */\n _closeList () {\n this._domElements.input.value = ''\n this._domElements.optionsContainer.classList.remove('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options)\n this._filterOptions('')\n this._removeAllArrowSelected()\n }\n\n /**\n * Dispatches new events.\n * @param { object : { action: string; selection: { option: string; text: string; }[]; value?: string; } } event\n * @private\n */\n _dispatchEvent (event) {\n this._event(event)\n }\n\n /**\n * Enables all main event listenners.\n * @private\n */\n _enableEventListenners () {\n document.addEventListener('mouseup', ({ target }) => {\n if (!this._multiselect.contains(target)) {\n this._filterOptions('')\n this._closeList()\n this._handlePlaceholder()\n }\n })\n\n this._domElements.clear.addEventListener('click', () => {\n this._clearSelection()\n })\n\n for (let i = 0; i < this._domElements.options.list.length; i++) {\n const option = this._domElements.options.list[i]\n option.addEventListener('click', ({ target }) => {\n this._handleOption(target)\n this._closeList()\n })\n }\n\n this._domElements.input.addEventListener('focus', () => {\n this._domElements.optionsContainer.classList.add('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options_visible)\n })\n\n this._domElements.input.addEventListener('input', ({ target: { value } }) => {\n if (this._domElements.options.list.length > 0) {\n this._filterOptions(value)\n }\n })\n\n this._domElements.input.addEventListener('keydown', (e) => {\n this._handleArrows(e)\n this._handleBackspace(e)\n this._handleEnter(e)\n })\n }\n\n /**\n * Filters user input.\n * @param { string } value\n * @private\n */\n _filterOptions (value) {\n const isOpen = this._domElements.optionsContainer.classList.contains('visible')\n const valueLowerCase = value.toLowerCase()\n\n if (!isOpen && value.length > 0) {\n this._domElements.optionsContainer.classList.add('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options_visible)\n }\n\n if (this._domElements.options.list.length > 0) {\n for (let i = 0; i < this._domElements.options.list.length; i++) {\n const el = this._domElements.options.list[i]\n const text = this._itemTemplate ? this._data[i][this._textField] : el.textContent\n\n if (text.toLowerCase().substring(0, valueLowerCase.length) === valueLowerCase) {\n this._domElements.optionsContainerList.appendChild(el)\n } else {\n el.parentNode && el.parentNode.removeChild(el)\n }\n }\n\n const hasResults = this._domElements.options.some(\n (el, index) =>\n (this._itemTemplate ? this._data[index][this._textField] : el.textContent)\n .toLowerCase()\n .substring(0, valueLowerCase.length) === valueLowerCase\n )\n this._showNoResults(!hasResults)\n }\n }\n\n _generateId (length) {\n let result = ''\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n const charactersLength = characters.length\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength))\n }\n return result\n }\n\n /**\n * Gets data from select tag.\n * @private\n */\n _getDataFromSelectTag () {\n const arr = []\n const { options } = this._select\n for (let i = 0; i < options.length; i++) {\n const item = options[i]\n arr.push({\n text: item.text,\n value: item.value,\n selected: item.hasAttribute('selected')\n })\n }\n return arr\n }\n\n /**\n * Gets data from settings.\n * @private\n */\n _getDataFromSettings () {\n if (this._data.length > 0 && this._valueField && this._textField) {\n const isValueFieldValid = typeof this._valueField === 'string'\n const isTextFieldValid = typeof this._textField === 'string'\n const arr = []\n\n if (!isValueFieldValid || !isTextFieldValid) {\n throw new Error('textField and valueField must be of type string')\n }\n\n for (let i = 0; i < this._data.length; i++) {\n const item = this._data[i]\n arr.push({\n value: item[this._valueField],\n text: item[this._textField],\n selected: typeof item.selected === 'boolean' ? item.selected : false\n })\n }\n return arr\n } else {\n return null\n }\n }\n\n /**\n * Handles Arrow up & Down. Selection of an option is also possible with these keys.\n * @param { Event } event\n * @private\n */\n _handleArrows (event) {\n if (event.keyCode === 40 || event.keyCode === 38) {\n event.preventDefault()\n const isOpen = this._domElements.optionsContainer.classList.contains('visible')\n // An updated view of the container is needed because of the filtering option\n const optionsContainerList = this._multiselect.querySelector('.multiselect__options > ul')\n\n if (!isOpen) {\n this._domElements.optionsContainer.classList.add('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options_visible)\n optionsContainerList.firstElementChild.classList.add('arrow-selected')\n optionsContainerList.firstElementChild.setAttribute('style', style.multiselect__options_ul_li_arrow_selected)\n optionsContainerList.firstElementChild.scrollIntoView(false)\n } else {\n let selected = this._multiselect.querySelector('.multiselect__options ul li.arrow-selected')\n const action = {\n ArrowUp: 'previous',\n Up: 'previous',\n ArrowDown: 'next',\n Down: 'next'\n }\n\n if (!selected) {\n optionsContainerList.firstElementChild.classList.add('arrow-selected')\n optionsContainerList.firstElementChild.setAttribute('style', style.multiselect__options_ul_li_arrow_selected)\n optionsContainerList.firstElementChild.scrollIntoView(false)\n return\n }\n\n selected.classList.remove('arrow-selected')\n selected.setAttribute('style', style.multiselect__options_ul_li)\n\n selected = selected[action[event.key] + 'ElementSibling']\n\n // Go to start or end of the popup list\n if (!selected) {\n selected =\n optionsContainerList.children[action[event.key] === 'next' ? 0 : optionsContainerList.children.length - 1]\n selected.classList.add('arrow-selected')\n selected.setAttribute('style', style.multiselect__options_ul_li_arrow_selected)\n this._scrollIntoView(optionsContainerList, selected)\n return\n }\n\n selected.classList.add('arrow-selected')\n selected.setAttribute('style', style.multiselect__options_ul_li_arrow_selected)\n this._scrollIntoView(optionsContainerList, selected)\n }\n }\n }\n\n /**\n * Handles the backspace key event - Deletes the preceding option in the selection list.\n * @param { Event } e\n * @private\n */\n _handleBackspace (e) {\n if (e.keyCode === 8 && e.target.value === '') {\n const lastSelectedOption =\n this._selectedOptions.length > 0 ? this._selectedOptions[this._selectedOptions.length - 1] : null\n\n if (lastSelectedOption) {\n const targetLastSelectedOption = this._multiselect.querySelector(\n `li[data-value=\"${lastSelectedOption.value}\"]`\n )\n this._handleOption(targetLastSelectedOption)\n\n if (this._selectedOptions.length === 0) {\n this._domElements.optionsContainer.classList.remove('visible')\n this._domElements.optionsContainer.setAttribute('style', style.multiselect__options)\n }\n }\n }\n }\n\n /**\n * Shows clear selection button if some options are selected.\n * @private\n */\n _handleClearSelectionBtn () {\n if (this._selectedOptions.length > 0) {\n this._domElements.clear.style.display = 'flex'\n } else {\n this._domElements.clear.style.display = 'none'\n }\n }\n\n /**\n * Handles the enter key event.\n * @param { Event } event\n * @private\n */\n _handleEnter (event) {\n if (event.keyCode === 13) {\n const selected = this._multiselect.querySelector('.multiselect__options ul li.arrow-selected')\n if (selected) {\n this._handleOption(selected)\n this._closeList()\n }\n }\n }\n\n _handleOption (target, dispatchEvent = true) {\n // Remove\n for (let i = 0; i < this._selectedOptions.length; i++) {\n const el = this._selectedOptions[i]\n if (el.value === target.dataset.value) {\n target.classList.remove('multiselect__options--selected')\n target.setAttribute('style', style.multiselect__options)\n this._selectedOptions.splice(i, 1)\n this._removeOptionFromList(target.dataset.value)\n this._handleClearSelectionBtn()\n this._handlePlaceholder()\n\n return (\n dispatchEvent &&\n this._dispatchEvent({\n action: 'REMOVE_OPTION',\n value: target.dataset.value,\n selection: this._selectedOptions\n })\n )\n }\n }\n\n // Add\n for (let i = 0; i < this._options.length; i++) {\n const option = this._options[i]\n if (option.value === target.dataset.value) {\n target.classList.add('multiselect__options--selected')\n target.setAttribute('style', style.multiselect__options_selected)\n this._selectedOptions = [...this._selectedOptions, option]\n this._addOptionToList(option, i)\n this._handleClearSelectionBtn()\n this._handlePlaceholder()\n\n return (\n dispatchEvent &&\n this._dispatchEvent({\n action: 'ADD_OPTION',\n value: target.dataset.value,\n selection: this._selectedOptions\n })\n )\n }\n }\n }\n\n /**\n * Shows the placeholder if no options are selected.\n * @private\n */\n _handlePlaceholder () {\n this._domElements.input.placeholder = this._placeholder\n }\n\n _initSelectedList () {\n let hasItemsSelected = false\n\n for (let i = 0; i < this._options.length; i++) {\n const option = this._options[i]\n if (option.selected) {\n hasItemsSelected = true\n const target = this._domElements.options.find((el) => el.dataset.value === option.value)\n target.classList.add('multiselect__options--selected')\n target.setAttribute('style', style.multiselect__options_selected)\n this._selectedOptions = [...this._selectedOptions, option]\n this._addOptionToList(option, i)\n }\n }\n\n if (hasItemsSelected) { this._handleClearSelectionBtn() }\n this._handlePlaceholder()\n }\n\n /**\n * Process the custom template.\n * @param { string } template\n * @private\n */\n _processTemplate (template, index) {\n let processedTemplate = template\n const objAttr = template.match(/\\$\\{(\\w+)\\}/g).map((e) => e.replace(/\\$\\{|\\}/g, ''))\n\n for (let i = 0; i < objAttr.length; i++) {\n const attr = objAttr[i]\n // eslint-disable-next-line no-useless-escape\n processedTemplate = processedTemplate.replace(`\\$\\{${attr}\\}`, this._data[index][attr] ?? '')\n }\n\n return processedTemplate\n }\n\n _removeAllArrowSelected () {\n const className = 'arrow-selected'\n const target = this._domElements.options.find((el) => el.classList.contains(className))\n target && target.classList.remove(className) && target.setAttribute('style', style.multiselect__options_ul_li)\n }\n\n /**\n * Removes an option from the list.\n * @param { string } value\n * @private\n */\n _removeOptionFromList (value) {\n const optionDom = this._multiselect.querySelector(`span[data-value=\"${value}\"]`)\n optionDom && optionDom.parentNode && optionDom.parentNode.removeChild(optionDom)\n }\n\n /**\n * Renders the multiselect options list view.\n * @private\n */\n _renderOptionsList () {\n const html = `\n <div class=\"multiselect__options\" style=\"${style.multiselect__options}\">\n <ul style=\"${style.multiselect__options_ul}\">\n ${\n this._options.length > 0 && !this._itemTemplate\n ? this._options\n .map((option) => {\n return `\n <li data-value=\"${option.value}\" style=\"${style.multiselect__options_ul_li}\">${option.text}</li>\n `\n })\n .join('')\n : ''\n }\n\n ${\n this._options.length > 0 && this._itemTemplate\n ? this._options\n .map((option, index) => {\n return `\n <li data-value=\"${option.value}\" style=\"${style.multiselect__options_ul_li}\">${this._processTemplate(this._itemTemplate, index)}</li>\n `\n })\n .join('')\n : ''\n }\n ${this._showNoData(this._options.length === 0)}\n </ul>\n </div>\n `\n\n this._multiselect.insertAdjacentHTML('beforeend', html)\n }\n\n /**\n * Renders the multiselect view.\n * @private\n */\n _renderMultiselect () {\n this._select.style.display = 'none'\n const id = 'iconic-' + this._generateId(20)\n // Timea created dedicated div element because previous code was not rendering\n this._multiselect = document.createElement('div')\n this._multiselect.setAttribute('id', id)\n this._multiselect.setAttribute('class', 'multiselect__container')\n this._multiselect.setAttribute('style', style.multiselect__container)\n const html = `\n <div class=\"multiselect__wrapper\" style=\"${style.multiselect__wrapper}\">\n <input class=\"multiselect__input\" style=\"${style.multiselect__input}\" placeholder=\"${this._placeholder}\" />\n </div>\n <span style=\"display: none;\" class=\"multiselect__clear-btn\" style=\"${style.multiselect__clear_btn}\">${this._cross}</span>\n `\n this._multiselect.innerHTML = html\n this._selectContainer.appendChild(this._multiselect)\n }\n\n /**\n * ScrollIntoView - This small utility reproduces the behavior of .scrollIntoView({ block: \"nearest\", inline: \"nearest\" })\n * This is for IE compatibility without a need of a polyfill\n * @private\n */\n _scrollIntoView (parent, child) {\n const rectParent = parent.getBoundingClientRect()\n const rectChild = child.getBoundingClientRect()\n\n // Detect if not visible at top and then scroll to the top\n if (!(rectParent.top < rectChild.bottom - child.offsetHeight)) {\n parent.scrollTop = child.clientHeight + (child.offsetTop - child.offsetHeight)\n }\n\n // Detect if not visible at bottom and then scroll to the bottom\n if (!(rectParent.bottom > rectChild.top + child.offsetHeight)) {\n parent.scrollTop =\n child.clientHeight +\n (child.offsetTop - child.offsetHeight) -\n (parent.offsetHeight - (child.offsetHeight + (child.offsetHeight - child.clientHeight)))\n }\n }\n\n /**\n * Shows a no data message.\n * @param { boolean } condition\n * @private\n */\n _showNoData (condition) {\n return condition ? `<p class=\"multiselect__options--no-data\" style=\"${style.multiselect__options_ul_p_multiselect__options_no_data}\">${this._noData}</p>` : ''\n }\n\n /**\n * Shows a no results message.\n * @param { boolean } condition\n * @private\n */\n _showNoResults (condition) {\n const dom = this._multiselect.querySelector('.multiselect__options--no-results')\n if (condition) {\n const html = `<p class=\"multiselect__options--no-results\" style=\"${style.multiselect__options_ul_p_multiselect__options_no_results}\">${this._noResults}</p>`\n !dom && this._domElements.optionsContainerList.insertAdjacentHTML('beforeend', html)\n } else {\n dom && dom.parentNode && dom.parentNode.removeChild(dom)\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peoplePicker.cjs.js","names":["solidLogicSingleton","escape","errorMessageBlock","ns","rdf","uuidv4","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","escape","errorMessageBlock","ns","rdf","uuidv4","iconBase","require_runtime","require_ns","require_debug","require_dragAndDrop","require_error","require_iconBase","rdflib","solid_logic","escape_html","uuid","kb","PeoplePicker","options","element","typeIndex","groupPickedCb","container","selectedGroup","Group","changeGroupButton","chooseExistingGroupButton","GroupPicker","book","createNewGroupButton","GroupBuilder","group","errorBody","err","ok","reject","bookRegistration","resolve","errr","indexes","groupContainer","name","defaultNewGroupName","patchPromises","groupIndex","typeStatement","doc","nameStatement","includesGroupStatement","toIns","patch","st","onSelectGroup","groups","groupButton","getWithDefault","groupChangedCb","changeType","agent","doneBuildingCb","dropContainer","uris","uri","groupNameInput","event","groupNameLabel","webIdNode","statement","personDiv","Person","copy","doneBuildingButton","webId","rdfClass","errorMessage","updatePromises","oldNameStatements","namedGraph","newNameStatement","handleRemove","imgSrc","profileImg","nameSpan","removeButton","object","subject","predicate","defaultValue","toDel","success"],"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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"}
|