solid-ui 5.0.0-2 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/~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-C4JpDQFa.js → account-BawgTPEQ.js} +7 -7
- package/dist/chunks/account-BawgTPEQ.js.map +1 -0
- package/dist/chunks/{auth-DfCfMOuM.js → auth-DrN7Ex4E.js} +2 -2
- package/dist/chunks/auth-DrN7Ex4E.js.map +1 -0
- package/dist/chunks/{avatar-C677VD9J.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.KB3IOPVF-Ckx3HIiR.js → chunk.UEBQI7VV-1WRlPl6u.js} +12 -2
- package/dist/chunks/chunk.UEBQI7VV-1WRlPl6u.js.map +1 -0
- package/dist/chunks/{combobox-BZ9n8wQw.js → combobox-B0TqOl9L.js} +2 -2
- 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-DcrczXhs.js → guard-BtHmPAJt.js} +2 -2
- package/dist/chunks/guard-BtHmPAJt.js.map +1 -0
- package/dist/chunks/index.esm-AZPmKqjU.js.map +1 -1
- package/dist/chunks/input-BIhn_8nf.js.map +1 -1
- package/dist/chunks/jsonld-CDR2WyN_.js.map +1 -1
- package/dist/chunks/{login-button-CRQbpCob.js → login-button-DAzbhvKk.js} +2 -2
- package/dist/chunks/login-button-DAzbhvKk.js.map +1 -0
- package/dist/chunks/{logout-button-H-ckaICm.js → logout-button-lGJtt7lq.js} +2 -2
- package/dist/chunks/logout-button-lGJtt7lq.js.map +1 -0
- package/dist/chunks/{menu-DhnJDuBz.js → menu-BLZREG4_.js} +5 -4
- 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-v6Wz9BOu.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-B2zTR8Qv.js.map +1 -1
- package/dist/chunks/rdf-input-DeDhyQ3p.js.map +1 -1
- 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-Cy6FwVhE.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-Ca8thhHS.js → src-BWY65mD0.js} +915 -891
- package/dist/chunks/src-BWY65mD0.js.map +1 -0
- package/dist/chunks/style-Dpwrc8CC.js.map +1 -1
- 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.map +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.map +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.map +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.map +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-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/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 +10 -10
- 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 +2 -2
- 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.map +1 -1
- package/dist/lib/auth/SolidAuth.esm.js.map +1 -1
- package/dist/lib/auth/context.cjs.js.map +1 -1
- package/dist/lib/auth/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.map +1 -1
- package/dist/lib/table.esm.js.map +1 -1
- package/dist/lib/tabs.cjs.js.map +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 +2 -2
- package/dist/login/login.cjs.js.map +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 +20 -20
- package/dist/solid-ui.min.js +20 -20
- 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.map +1 -1
- 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/widgets/buttons/iconLinks.cjs.js.map +1 -1
- package/dist/widgets/buttons/iconLinks.esm.js.map +1 -1
- package/dist/widgets/buttons.cjs.js.map +1 -1
- package/dist/widgets/buttons.esm.js.map +1 -1
- package/dist/widgets/dragAndDrop.cjs.js.map +1 -1
- package/dist/widgets/dragAndDrop.esm.js.map +1 -1
- package/dist/widgets/error.cjs.js.map +1 -1
- package/dist/widgets/error.esm.js.map +1 -1
- package/dist/widgets/forms/autocomplete/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.map +1 -1
- 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 +3 -3
- package/dist/chunks/account-C4JpDQFa.js.map +0 -1
- package/dist/chunks/auth-DfCfMOuM.js.map +0 -1
- package/dist/chunks/avatar-C677VD9J.js.map +0 -1
- package/dist/chunks/chunk.KB3IOPVF-Ckx3HIiR.js.map +0 -1
- package/dist/chunks/combobox-BZ9n8wQw.js.map +0 -1
- package/dist/chunks/guard-DcrczXhs.js.map +0 -1
- package/dist/chunks/login-button-CRQbpCob.js.map +0 -1
- package/dist/chunks/logout-button-H-ckaICm.js.map +0 -1
- package/dist/chunks/menu-DhnJDuBz.js.map +0 -1
- package/dist/chunks/provider-v6Wz9BOu.js.map +0 -1
- package/dist/chunks/signup-button-Cy6FwVhE.js.map +0 -1
- package/dist/chunks/src-Ca8thhHS.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","names":[],"sources":["../../src/matrix/index.ts"],"sourcesContent":["import {\n matrixForQuery\n} from './matrix'\n\nexport const matrix = {\n matrixForQuery\n}\n"],"mappings":"AAIA,
|
|
1
|
+
{"version":3,"file":"index.cjs.js","names":["matrix"],"sources":["../../src/matrix/index.ts"],"sourcesContent":["import {\n matrixForQuery\n} from './matrix'\n\nexport const matrix = {\n matrixForQuery\n}\n"],"mappings":"AAIA,IAAaA,EAAS,CACpB,wCAAA,CAAA,CAAA,cACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","names":[],"sources":["../../src/matrix/index.ts"],"sourcesContent":["import {\n matrixForQuery\n} from './matrix'\n\nexport const matrix = {\n matrixForQuery\n}\n"],"mappings":";;AAIA,
|
|
1
|
+
{"version":3,"file":"index.esm.js","names":["matrix"],"sources":["../../src/matrix/index.ts"],"sourcesContent":["import {\n matrixForQuery\n} from './matrix'\n\nexport const matrix = {\n matrixForQuery\n}\n"],"mappings":";;AAIA,IAAaA,IAAS,EACpB,kBACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matrix.cjs.js","names":[],"sources":["../../src/matrix/matrix.ts"],"sourcesContent":["// Build a 2D matrix of values\n//\n// dom AKA document\n// query a Query object of rdflib.js with a valid pattern\n// vx A variable object, the one to be used for the X variable (horiz)\n// vy A variable object, the one to be used for the Y variable (vertical)\n// vvalue A variable object, the one to be used for the cell value\n// returns A DOM element with the matrix in it, which has a .refresh() function.\n//\n// Options:\n// cellFunction(td, x, y, value) fill the TD element of a single cell\n// xDecreasing set true for x axis to be in decreasing order.\n// yDecreasing set true for y axis to be in decreasing order.\n// set_x array of X values to be define initial rows (order irrelevant)\n// set_y array of Y values to be define initial columns\n//\n// Features:\n// Header row at top (x axis) and left (y-axis) generated automatically.\n// Extra rows and columns are inserted as needed to hold new data points\n// matrix.refresh() will re-run the query and adjust the display\n\nimport * as utils from '../utils'\nimport * as $rdf from 'rdflib'\nimport { MatrixOptions } from './types'\nimport { solidLogicSingleton } from 'solid-logic'\n\nconst kb = solidLogicSingleton.store\n\nexport function matrixForQuery (\n dom: HTMLDocument,\n query: $rdf.Query,\n vx: $rdf.Variable,\n vy: $rdf.Variable,\n vvalue: $rdf.Variable,\n options: MatrixOptions,\n whenDone: () => void\n) {\n // @@ TODO Remove need to cast to any\n const matrix: any = dom.createElement('table')\n const header = dom.createElement('tr')\n const corner = header.appendChild(dom.createElement('td'))\n corner.setAttribute('class', 'MatrixCorner')\n matrix.appendChild(header) // just one for now\n matrix.lastHeader = header // Element before data\n let columns: any[] = [] // Vector\n const rows: any[] = [] // Associative array\n\n const setCell = function (cell, x, y, value) {\n while (cell.firstChild) {\n // Empty any previous\n cell.removeChild(cell.firstChild)\n }\n cell.setAttribute('style', '')\n cell.style.textAlign = 'center'\n\n if (options.cellFunction) {\n options.cellFunction(cell, x, y, value)\n } else {\n cell.textContent = utils.label(value)\n cell.setAttribute('style', 'padding: 0.3em')\n }\n delete cell.old\n }\n\n const rowFor = function (y1) {\n const y = y1.toNT()\n if (rows[y]) return rows[y]\n // @@ TODO Remove need for casting to any\n const tr: any = dom.createElement('tr')\n const header = tr.appendChild(dom.createElement('td'))\n header.setAttribute('style', 'padding: 0.3em;')\n header.textContent = utils.label(y1) // first approximation\n if (y1.termType === 'NamedNode') {\n kb.fetcher!.nowOrWhenFetched(y1.uri.split('#')[0], undefined, function (\n ok,\n _body,\n _response\n ) {\n if (ok) header.textContent = utils.label(y1)\n })\n }\n for (let i = 0; i < columns.length; i++) {\n setCell(\n tr.appendChild(dom.createElement('td')),\n $rdf.fromNT(columns[i]),\n y1,\n null\n )\n }\n tr.dataValueNT = y\n rows[y] = tr\n for (let ele = matrix.lastHeader.nextSibling; ele; ele = ele.nextSibling) {\n // skip header\n if (\n (y > ele.dataValueNT && options && options.yDecreasing) ||\n (y < ele.dataValueNT && !(options && options.yDecreasing))\n ) {\n return matrix.insertBefore(tr, ele) // return the tr\n }\n }\n return matrix.appendChild(tr) // return the tr\n }\n\n const columnNumberFor = function (x1): number {\n const xNT: any = x1.toNT() // xNT is a NT string\n let col: any = null\n // These are data columns (not headings)\n for (let i = 0; i < columns.length; i++) {\n if (columns[i] === xNT) {\n return i\n }\n\n if (\n (xNT > columns[i] && options.xDecreasing) ||\n (xNT < columns[i] && !options.xDecreasing)\n ) {\n columns = columns\n .slice(0, i)\n .concat([xNT])\n .concat(columns.slice(i))\n col = i\n break\n }\n }\n\n if (col === null) {\n col = columns.length\n columns.push(xNT)\n }\n\n // col is the number of the new column, starting from 0\n for (let row = matrix.firstChild; row; row = row.nextSibling) {\n // For every row header or not\n const y = row.dataValueNT\n const td = dom.createElement('td') // Add a new cell\n td.style.textAlign = 'center'\n if (row === matrix.firstChild) {\n td.textContent = utils.label(x1)\n } else {\n setCell(td, x1, $rdf.fromNT(y), null)\n }\n if (col === columns.length - 1) {\n row.appendChild(td)\n } else {\n let t = row.firstChild\n for (let j = 0; j < col + 1; j++) {\n // Skip header col too\n t = t.nextSibling\n }\n row.insertBefore(td, t)\n }\n }\n return col\n }\n\n const markOldCells = function () {\n for (let i = 1; i < matrix.children.length; i++) {\n const row = matrix.children[i]\n for (let j = 1; j < row.children.length; j++) {\n row.children[j].old = true\n }\n }\n }\n\n const clearOldCells = function () {\n let row, cell\n const colsUsed: any[] = []\n const rowsUsed: any[] = []\n\n if (options.set_y) {\n // Knows y values create rows\n for (let k = 0; k < options.set_y.length; k++) {\n rowsUsed[options.set_y[k]] = true\n }\n }\n if (options.set_x) {\n for (let k = 0; k < options.set_x.length; k++) {\n colsUsed[columnNumberFor(options.set_x[k]) + 1] = true\n }\n }\n\n for (let i = 1; i < matrix.children.length; i++) {\n row = matrix.children[i]\n for (let j = 1; j < row.children.length; j++) {\n cell = row.children[j]\n if (cell.old) {\n const y = $rdf.fromNT(row.dataValueNT)\n const x = $rdf.fromNT(columns[j - 1])\n setCell(cell, x, y, null)\n } else {\n rowsUsed[row.dataValueNT] = true\n colsUsed[j] = true\n }\n }\n }\n\n for (let i = 0; i < matrix.children.length; i++) {\n row = matrix.children[i]\n if (i > 0 && !rowsUsed[row.dataValueNT]) {\n delete rows[row.dataValueNT]\n matrix.removeChild(row)\n } else {\n for (let j = row.children.length - 1; j > 0; j--) {\n // backwards\n const cell = row.children[j]\n if (!colsUsed[j]) {\n row.removeChild(cell)\n }\n }\n }\n }\n const newcolumns: any[] = []\n for (let j = 0; j < columns.length; j++) {\n if (colsUsed[j + 1]) {\n newcolumns.push(columns[j])\n }\n }\n columns = newcolumns\n }\n\n matrix.refresh = function () {\n markOldCells()\n kb.query(query as any, addCellFromBindings, undefined, clearOldCells)\n }\n\n const addCellFromBindings = function (bindings) {\n const x = bindings[vx.toString()]\n const y = bindings[vy.toString()]\n const value = bindings[(vvalue.toString())]\n const row = rowFor(y)\n const colNo = columnNumberFor(x)\n const cell = row.children[colNo + 1] // number of Y axis headings\n setCell(cell, x, y, value)\n }\n\n if (options.set_y) {\n // Knows y values create rows\n for (let k = 0; k < options.set_y.length; k++) {\n rowFor(options.set_y[k])\n }\n }\n if (options.set_x) {\n for (let k = 0; k < options.set_x.length; k++) {\n columnNumberFor(options.set_x[k])\n }\n }\n\n kb.query(query as any, addCellFromBindings, undefined, whenDone) // Populate the matrix\n return matrix\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"matrix.cjs.js","names":["solidLogicSingleton","$rdf","require_runtime","require_label","rdflib","kb","matrixForQuery","matrix","dom","header","columns","rows","setCell","cell","options","x","y","value","rowFor","y1","tr","ok","i","ele","columnNumberFor","xNT","x1","col","row","td","t","j","markOldCells","clearOldCells","colsUsed","rowsUsed","k","newcolumns","query","addCellFromBindings","bindings","vx","vy","vvalue","colNo","whenDone"],"sources":["../../src/matrix/matrix.ts"],"sourcesContent":["// Build a 2D matrix of values\n//\n// dom AKA document\n// query a Query object of rdflib.js with a valid pattern\n// vx A variable object, the one to be used for the X variable (horiz)\n// vy A variable object, the one to be used for the Y variable (vertical)\n// vvalue A variable object, the one to be used for the cell value\n// returns A DOM element with the matrix in it, which has a .refresh() function.\n//\n// Options:\n// cellFunction(td, x, y, value) fill the TD element of a single cell\n// xDecreasing set true for x axis to be in decreasing order.\n// yDecreasing set true for y axis to be in decreasing order.\n// set_x array of X values to be define initial rows (order irrelevant)\n// set_y array of Y values to be define initial columns\n//\n// Features:\n// Header row at top (x axis) and left (y-axis) generated automatically.\n// Extra rows and columns are inserted as needed to hold new data points\n// matrix.refresh() will re-run the query and adjust the display\n\nimport * as utils from '../utils'\nimport * as $rdf from 'rdflib'\nimport { MatrixOptions } from './types'\nimport { solidLogicSingleton } from 'solid-logic'\n\nconst kb = solidLogicSingleton.store\n\nexport function matrixForQuery (\n dom: HTMLDocument,\n query: $rdf.Query,\n vx: $rdf.Variable,\n vy: $rdf.Variable,\n vvalue: $rdf.Variable,\n options: MatrixOptions,\n whenDone: () => void\n) {\n // @@ TODO Remove need to cast to any\n const matrix: any = dom.createElement('table')\n const header = dom.createElement('tr')\n const corner = header.appendChild(dom.createElement('td'))\n corner.setAttribute('class', 'MatrixCorner')\n matrix.appendChild(header) // just one for now\n matrix.lastHeader = header // Element before data\n let columns: any[] = [] // Vector\n const rows: any[] = [] // Associative array\n\n const setCell = function (cell, x, y, value) {\n while (cell.firstChild) {\n // Empty any previous\n cell.removeChild(cell.firstChild)\n }\n cell.setAttribute('style', '')\n cell.style.textAlign = 'center'\n\n if (options.cellFunction) {\n options.cellFunction(cell, x, y, value)\n } else {\n cell.textContent = utils.label(value)\n cell.setAttribute('style', 'padding: 0.3em')\n }\n delete cell.old\n }\n\n const rowFor = function (y1) {\n const y = y1.toNT()\n if (rows[y]) return rows[y]\n // @@ TODO Remove need for casting to any\n const tr: any = dom.createElement('tr')\n const header = tr.appendChild(dom.createElement('td'))\n header.setAttribute('style', 'padding: 0.3em;')\n header.textContent = utils.label(y1) // first approximation\n if (y1.termType === 'NamedNode') {\n kb.fetcher!.nowOrWhenFetched(y1.uri.split('#')[0], undefined, function (\n ok,\n _body,\n _response\n ) {\n if (ok) header.textContent = utils.label(y1)\n })\n }\n for (let i = 0; i < columns.length; i++) {\n setCell(\n tr.appendChild(dom.createElement('td')),\n $rdf.fromNT(columns[i]),\n y1,\n null\n )\n }\n tr.dataValueNT = y\n rows[y] = tr\n for (let ele = matrix.lastHeader.nextSibling; ele; ele = ele.nextSibling) {\n // skip header\n if (\n (y > ele.dataValueNT && options && options.yDecreasing) ||\n (y < ele.dataValueNT && !(options && options.yDecreasing))\n ) {\n return matrix.insertBefore(tr, ele) // return the tr\n }\n }\n return matrix.appendChild(tr) // return the tr\n }\n\n const columnNumberFor = function (x1): number {\n const xNT: any = x1.toNT() // xNT is a NT string\n let col: any = null\n // These are data columns (not headings)\n for (let i = 0; i < columns.length; i++) {\n if (columns[i] === xNT) {\n return i\n }\n\n if (\n (xNT > columns[i] && options.xDecreasing) ||\n (xNT < columns[i] && !options.xDecreasing)\n ) {\n columns = columns\n .slice(0, i)\n .concat([xNT])\n .concat(columns.slice(i))\n col = i\n break\n }\n }\n\n if (col === null) {\n col = columns.length\n columns.push(xNT)\n }\n\n // col is the number of the new column, starting from 0\n for (let row = matrix.firstChild; row; row = row.nextSibling) {\n // For every row header or not\n const y = row.dataValueNT\n const td = dom.createElement('td') // Add a new cell\n td.style.textAlign = 'center'\n if (row === matrix.firstChild) {\n td.textContent = utils.label(x1)\n } else {\n setCell(td, x1, $rdf.fromNT(y), null)\n }\n if (col === columns.length - 1) {\n row.appendChild(td)\n } else {\n let t = row.firstChild\n for (let j = 0; j < col + 1; j++) {\n // Skip header col too\n t = t.nextSibling\n }\n row.insertBefore(td, t)\n }\n }\n return col\n }\n\n const markOldCells = function () {\n for (let i = 1; i < matrix.children.length; i++) {\n const row = matrix.children[i]\n for (let j = 1; j < row.children.length; j++) {\n row.children[j].old = true\n }\n }\n }\n\n const clearOldCells = function () {\n let row, cell\n const colsUsed: any[] = []\n const rowsUsed: any[] = []\n\n if (options.set_y) {\n // Knows y values create rows\n for (let k = 0; k < options.set_y.length; k++) {\n rowsUsed[options.set_y[k]] = true\n }\n }\n if (options.set_x) {\n for (let k = 0; k < options.set_x.length; k++) {\n colsUsed[columnNumberFor(options.set_x[k]) + 1] = true\n }\n }\n\n for (let i = 1; i < matrix.children.length; i++) {\n row = matrix.children[i]\n for (let j = 1; j < row.children.length; j++) {\n cell = row.children[j]\n if (cell.old) {\n const y = $rdf.fromNT(row.dataValueNT)\n const x = $rdf.fromNT(columns[j - 1])\n setCell(cell, x, y, null)\n } else {\n rowsUsed[row.dataValueNT] = true\n colsUsed[j] = true\n }\n }\n }\n\n for (let i = 0; i < matrix.children.length; i++) {\n row = matrix.children[i]\n if (i > 0 && !rowsUsed[row.dataValueNT]) {\n delete rows[row.dataValueNT]\n matrix.removeChild(row)\n } else {\n for (let j = row.children.length - 1; j > 0; j--) {\n // backwards\n const cell = row.children[j]\n if (!colsUsed[j]) {\n row.removeChild(cell)\n }\n }\n }\n }\n const newcolumns: any[] = []\n for (let j = 0; j < columns.length; j++) {\n if (colsUsed[j + 1]) {\n newcolumns.push(columns[j])\n }\n }\n columns = newcolumns\n }\n\n matrix.refresh = function () {\n markOldCells()\n kb.query(query as any, addCellFromBindings, undefined, clearOldCells)\n }\n\n const addCellFromBindings = function (bindings) {\n const x = bindings[vx.toString()]\n const y = bindings[vy.toString()]\n const value = bindings[(vvalue.toString())]\n const row = rowFor(y)\n const colNo = columnNumberFor(x)\n const cell = row.children[colNo + 1] // number of Y axis headings\n setCell(cell, x, y, value)\n }\n\n if (options.set_y) {\n // Knows y values create rows\n for (let k = 0; k < options.set_y.length; k++) {\n rowFor(options.set_y[k])\n }\n }\n if (options.set_x) {\n for (let k = 0; k < options.set_x.length; k++) {\n columnNumberFor(options.set_x[k])\n }\n }\n\n kb.query(query as any, addCellFromBindings, undefined, whenDone) // Populate the matrix\n return matrix\n}\n"],"mappings":"mKA0BA,IAAMK,uBAAKL,CAAAA,CAAAA,oBAAoB,MAE/B,SAAgBM,EACd,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CAEA,IAAMC,EAAcC,EAAI,cAAc,OAAO,EACvCC,EAASD,EAAI,cAAc,IAAI,EAErCC,EADsB,YAAYD,EAAI,cAAc,IAAI,CACxD,CAAA,CAAO,aAAa,QAAS,cAAc,EAC3CD,EAAO,YAAYE,CAAM,EACzB,EAAO,WAAaA,EACpB,IAAIC,EAAiB,CAAC,EAChBC,EAAc,CAAC,EAEfC,EAAU,SAAU,EAAM,EAAG,EAAG,EAAO,CAC3C,KAAOC,EAAK,YAEVA,EAAK,YAAYA,EAAK,UAAU,EAElCA,EAAK,aAAa,QAAS,EAAE,EAC7B,EAAK,MAAM,UAAY,SAEnBC,EAAQ,aACVA,EAAQ,aAAaD,EAAME,EAAGC,EAAGC,CAAK,GAEtC,EAAK,YAAAd,EAAA,MAA0Bc,CAAK,EACpCJ,EAAK,aAAa,QAAS,gBAAgB,GAE7C,OAAOA,EAAK,GACd,EAEMK,EAAS,SAAU,EAAI,CAC3B,IAAMF,EAAIG,EAAG,KAAK,EAClB,GAAIR,EAAKK,GAAI,OAAOL,EAAKK,GAEzB,IAAMI,EAAUZ,EAAI,cAAc,IAAI,EAChCC,EAASW,EAAG,YAAYZ,EAAI,cAAc,IAAI,CAAC,EACrDC,EAAO,aAAa,QAAS,iBAAiB,EAC9C,EAAO,YAAAN,EAAA,MAA0BgB,CAAE,EAC/BA,EAAG,WAAa,aAClBd,EAAG,QAAS,iBAAiBc,EAAG,IAAI,MAAM,GAAG,CAAC,CAAC,GAAI,IAAA,GAAW,SAC5D,EACA,EACA,EACA,CACIE,IAAI,EAAO,YAAAlB,EAAA,MAA0BgB,CAAE,EAC7C,CAAC,EAEH,IAAK,IAAIG,EAAI,EAAGA,EAAIZ,EAAQ,OAAQ,IAClCE,EACEQ,EAAG,YAAYZ,EAAI,cAAc,IAAI,CAAC,EACtCP,EAAK,OAAOS,EAAQY,EAAE,EACtBH,EACA,IACF,EAEF,EAAG,YAAcH,EACjB,EAAKA,GAAKI,EACV,IAAK,IAAIG,EAAMhB,EAAO,WAAW,YAAagB,EAAK,EAAMA,EAAI,YAE3D,GACGP,EAAIO,EAAI,aAAeT,GAAWA,EAAQ,aAC1CE,EAAIO,EAAI,aAAe,EAAET,GAAWA,EAAQ,aAE7C,OAAOP,EAAO,aAAaa,EAAIG,CAAG,EAGtC,OAAOhB,EAAO,YAAYa,CAAE,CAC9B,EAEMI,EAAkB,SAAU,EAAY,CAC5C,IAAMC,EAAWC,EAAG,KAAK,EACrBC,EAAW,KAEf,IAAK,IAAIL,EAAI,EAAGA,EAAIZ,EAAQ,OAAQ,IAAK,CACvC,GAAIA,EAAQY,KAAOG,EACjB,OAAOH,EAGT,GACGG,EAAMf,EAAQY,IAAMR,EAAQ,aAC5BW,EAAMf,EAAQY,IAAM,CAACR,EAAQ,YAC9B,CACA,EAAUJ,EACP,MAAM,EAAGY,CAAC,CAAC,CACX,OAAO,CAACG,CAAG,CAAC,CAAC,CACb,OAAOf,EAAQ,MAAMY,CAAC,CAAC,EAC1B,EAAMA,EACN,KACF,CACF,CAEIK,IAAQ,OACV,EAAMjB,EAAQ,OACdA,EAAQ,KAAKe,CAAG,GAIlB,IAAK,IAAIG,EAAMrB,EAAO,WAAYqB,EAAK,EAAMA,EAAI,YAAa,CAE5D,IAAMZ,EAAIY,EAAI,YACRC,EAAKrB,EAAI,cAAc,IAAI,EAOjC,GANA,EAAG,MAAM,UAAY,SACjBoB,IAAQrB,EAAO,WACjB,EAAG,YAAAJ,EAAA,MAA0BuB,CAAE,EAE/Bd,EAAQiB,EAAIH,EAAIzB,EAAK,OAAOe,CAAC,EAAG,IAAI,EAElCW,IAAQjB,EAAQ,OAAS,EAC3BkB,EAAI,YAAYC,CAAE,MACb,CACL,IAAIC,EAAIF,EAAI,WACZ,IAAK,IAAIG,EAAI,EAAGA,EAAIJ,EAAM,EAAG,IAE3B,EAAIG,EAAE,YAERF,EAAI,aAAaC,EAAIC,CAAC,CACxB,CACF,CACA,OAAOH,CACT,EAEMK,EAAe,UAAY,CAC/B,IAAK,IAAIV,EAAI,EAAGA,EAAIf,EAAO,SAAS,OAAQ,IAAK,CAC/C,IAAMqB,EAAMrB,EAAO,SAASe,GAC5B,IAAK,IAAIS,EAAI,EAAGA,EAAIH,EAAI,SAAS,OAAQ,IACvC,EAAI,SAASG,EAAE,CAAC,IAAM,EAE1B,CACF,EAEME,EAAgB,UAAY,CAChC,IAAIL,EAAKf,EACHqB,EAAkB,CAAC,EACnBC,EAAkB,CAAC,EAEzB,GAAIrB,EAAQ,MAEV,IAAK,IAAIsB,EAAI,EAAGA,EAAItB,EAAQ,MAAM,OAAQ,IACxC,EAASA,EAAQ,MAAMsB,IAAM,GAGjC,GAAItB,EAAQ,MACV,IAAK,IAAIsB,EAAI,EAAGA,EAAItB,EAAQ,MAAM,OAAQ,IACxC,EAASU,EAAgBV,EAAQ,MAAMsB,EAAE,EAAI,GAAK,GAItD,IAAK,IAAId,EAAI,EAAGA,EAAIf,EAAO,SAAS,OAAQ,IAAK,CAC/C,EAAMA,EAAO,SAASe,GACtB,IAAK,IAAIS,EAAI,EAAGA,EAAIH,EAAI,SAAS,OAAQ,IAEvC,GADA,EAAOA,EAAI,SAASG,GAChBlB,EAAK,IAAK,CACZ,IAAMG,EAAIf,EAAK,OAAO2B,EAAI,WAAW,EAC/Bb,EAAId,EAAK,OAAOS,EAAQqB,EAAI,EAAE,EACpCnB,EAAQC,EAAME,EAAGC,EAAG,IAAI,CAC1B,KACE,GAASY,EAAI,aAAe,GAC5B,EAASG,GAAK,EAGpB,CAEA,IAAK,IAAIT,EAAI,EAAGA,EAAIf,EAAO,SAAS,OAAQ,IAE1C,GADA,EAAMA,EAAO,SAASe,GAClBA,EAAI,GAAK,CAACa,EAASP,EAAI,aACzB,OAAOjB,EAAKiB,EAAI,aAChBrB,EAAO,YAAYqB,CAAG,OAEtB,IAAK,IAAIG,EAAIH,EAAI,SAAS,OAAS,EAAGG,EAAI,EAAG,IAAK,CAEhD,IAAMlB,EAAOe,EAAI,SAASG,GACrBG,EAASH,IACZH,EAAI,YAAYf,CAAI,CAExB,CAGJ,IAAMwB,EAAoB,CAAC,EAC3B,IAAK,IAAIN,EAAI,EAAGA,EAAIrB,EAAQ,OAAQ,IAC9BwB,EAASH,EAAI,IACfM,EAAW,KAAK3B,EAAQqB,EAAE,EAG9B,EAAUM,CACZ,EAEA,EAAO,QAAU,UAAY,CAC3BL,EAAa,EACb3B,EAAG,MAAMiC,EAAcC,EAAqB,IAAA,GAAWN,CAAa,CACtE,EAEA,IAAMM,EAAsB,SAAU,EAAU,CAC9C,IAAMxB,EAAIyB,EAASC,EAAG,SAAS,GACzBzB,EAAIwB,EAASE,EAAG,SAAS,GACzBzB,EAAQuB,EAAUG,EAAO,SAAS,GAClCf,EAAMV,EAAOF,CAAC,EACd4B,EAAQpB,EAAgBT,CAAC,EACzBF,EAAOe,EAAI,SAASgB,EAAQ,GAClChC,EAAQC,EAAME,EAAGC,EAAGC,CAAK,CAC3B,EAEA,GAAIH,EAAQ,MAEV,IAAK,IAAIsB,EAAI,EAAGA,EAAItB,EAAQ,MAAM,OAAQ,IACxCI,EAAOJ,EAAQ,MAAMsB,EAAE,EAG3B,GAAItB,EAAQ,MACV,IAAK,IAAIsB,EAAI,EAAGA,EAAItB,EAAQ,MAAM,OAAQ,IACxCU,EAAgBV,EAAQ,MAAMsB,EAAE,EAKpC,OADA/B,EAAG,MAAMiC,EAAcC,EAAqB,IAAA,GAAWM,CAAQ,EACxDtC,CACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matrix.esm.js","names":[],"sources":["../../src/matrix/matrix.ts"],"sourcesContent":["// Build a 2D matrix of values\n//\n// dom AKA document\n// query a Query object of rdflib.js with a valid pattern\n// vx A variable object, the one to be used for the X variable (horiz)\n// vy A variable object, the one to be used for the Y variable (vertical)\n// vvalue A variable object, the one to be used for the cell value\n// returns A DOM element with the matrix in it, which has a .refresh() function.\n//\n// Options:\n// cellFunction(td, x, y, value) fill the TD element of a single cell\n// xDecreasing set true for x axis to be in decreasing order.\n// yDecreasing set true for y axis to be in decreasing order.\n// set_x array of X values to be define initial rows (order irrelevant)\n// set_y array of Y values to be define initial columns\n//\n// Features:\n// Header row at top (x axis) and left (y-axis) generated automatically.\n// Extra rows and columns are inserted as needed to hold new data points\n// matrix.refresh() will re-run the query and adjust the display\n\nimport * as utils from '../utils'\nimport * as $rdf from 'rdflib'\nimport { MatrixOptions } from './types'\nimport { solidLogicSingleton } from 'solid-logic'\n\nconst kb = solidLogicSingleton.store\n\nexport function matrixForQuery (\n dom: HTMLDocument,\n query: $rdf.Query,\n vx: $rdf.Variable,\n vy: $rdf.Variable,\n vvalue: $rdf.Variable,\n options: MatrixOptions,\n whenDone: () => void\n) {\n // @@ TODO Remove need to cast to any\n const matrix: any = dom.createElement('table')\n const header = dom.createElement('tr')\n const corner = header.appendChild(dom.createElement('td'))\n corner.setAttribute('class', 'MatrixCorner')\n matrix.appendChild(header) // just one for now\n matrix.lastHeader = header // Element before data\n let columns: any[] = [] // Vector\n const rows: any[] = [] // Associative array\n\n const setCell = function (cell, x, y, value) {\n while (cell.firstChild) {\n // Empty any previous\n cell.removeChild(cell.firstChild)\n }\n cell.setAttribute('style', '')\n cell.style.textAlign = 'center'\n\n if (options.cellFunction) {\n options.cellFunction(cell, x, y, value)\n } else {\n cell.textContent = utils.label(value)\n cell.setAttribute('style', 'padding: 0.3em')\n }\n delete cell.old\n }\n\n const rowFor = function (y1) {\n const y = y1.toNT()\n if (rows[y]) return rows[y]\n // @@ TODO Remove need for casting to any\n const tr: any = dom.createElement('tr')\n const header = tr.appendChild(dom.createElement('td'))\n header.setAttribute('style', 'padding: 0.3em;')\n header.textContent = utils.label(y1) // first approximation\n if (y1.termType === 'NamedNode') {\n kb.fetcher!.nowOrWhenFetched(y1.uri.split('#')[0], undefined, function (\n ok,\n _body,\n _response\n ) {\n if (ok) header.textContent = utils.label(y1)\n })\n }\n for (let i = 0; i < columns.length; i++) {\n setCell(\n tr.appendChild(dom.createElement('td')),\n $rdf.fromNT(columns[i]),\n y1,\n null\n )\n }\n tr.dataValueNT = y\n rows[y] = tr\n for (let ele = matrix.lastHeader.nextSibling; ele; ele = ele.nextSibling) {\n // skip header\n if (\n (y > ele.dataValueNT && options && options.yDecreasing) ||\n (y < ele.dataValueNT && !(options && options.yDecreasing))\n ) {\n return matrix.insertBefore(tr, ele) // return the tr\n }\n }\n return matrix.appendChild(tr) // return the tr\n }\n\n const columnNumberFor = function (x1): number {\n const xNT: any = x1.toNT() // xNT is a NT string\n let col: any = null\n // These are data columns (not headings)\n for (let i = 0; i < columns.length; i++) {\n if (columns[i] === xNT) {\n return i\n }\n\n if (\n (xNT > columns[i] && options.xDecreasing) ||\n (xNT < columns[i] && !options.xDecreasing)\n ) {\n columns = columns\n .slice(0, i)\n .concat([xNT])\n .concat(columns.slice(i))\n col = i\n break\n }\n }\n\n if (col === null) {\n col = columns.length\n columns.push(xNT)\n }\n\n // col is the number of the new column, starting from 0\n for (let row = matrix.firstChild; row; row = row.nextSibling) {\n // For every row header or not\n const y = row.dataValueNT\n const td = dom.createElement('td') // Add a new cell\n td.style.textAlign = 'center'\n if (row === matrix.firstChild) {\n td.textContent = utils.label(x1)\n } else {\n setCell(td, x1, $rdf.fromNT(y), null)\n }\n if (col === columns.length - 1) {\n row.appendChild(td)\n } else {\n let t = row.firstChild\n for (let j = 0; j < col + 1; j++) {\n // Skip header col too\n t = t.nextSibling\n }\n row.insertBefore(td, t)\n }\n }\n return col\n }\n\n const markOldCells = function () {\n for (let i = 1; i < matrix.children.length; i++) {\n const row = matrix.children[i]\n for (let j = 1; j < row.children.length; j++) {\n row.children[j].old = true\n }\n }\n }\n\n const clearOldCells = function () {\n let row, cell\n const colsUsed: any[] = []\n const rowsUsed: any[] = []\n\n if (options.set_y) {\n // Knows y values create rows\n for (let k = 0; k < options.set_y.length; k++) {\n rowsUsed[options.set_y[k]] = true\n }\n }\n if (options.set_x) {\n for (let k = 0; k < options.set_x.length; k++) {\n colsUsed[columnNumberFor(options.set_x[k]) + 1] = true\n }\n }\n\n for (let i = 1; i < matrix.children.length; i++) {\n row = matrix.children[i]\n for (let j = 1; j < row.children.length; j++) {\n cell = row.children[j]\n if (cell.old) {\n const y = $rdf.fromNT(row.dataValueNT)\n const x = $rdf.fromNT(columns[j - 1])\n setCell(cell, x, y, null)\n } else {\n rowsUsed[row.dataValueNT] = true\n colsUsed[j] = true\n }\n }\n }\n\n for (let i = 0; i < matrix.children.length; i++) {\n row = matrix.children[i]\n if (i > 0 && !rowsUsed[row.dataValueNT]) {\n delete rows[row.dataValueNT]\n matrix.removeChild(row)\n } else {\n for (let j = row.children.length - 1; j > 0; j--) {\n // backwards\n const cell = row.children[j]\n if (!colsUsed[j]) {\n row.removeChild(cell)\n }\n }\n }\n }\n const newcolumns: any[] = []\n for (let j = 0; j < columns.length; j++) {\n if (colsUsed[j + 1]) {\n newcolumns.push(columns[j])\n }\n }\n columns = newcolumns\n }\n\n matrix.refresh = function () {\n markOldCells()\n kb.query(query as any, addCellFromBindings, undefined, clearOldCells)\n }\n\n const addCellFromBindings = function (bindings) {\n const x = bindings[vx.toString()]\n const y = bindings[vy.toString()]\n const value = bindings[(vvalue.toString())]\n const row = rowFor(y)\n const colNo = columnNumberFor(x)\n const cell = row.children[colNo + 1] // number of Y axis headings\n setCell(cell, x, y, value)\n }\n\n if (options.set_y) {\n // Knows y values create rows\n for (let k = 0; k < options.set_y.length; k++) {\n rowFor(options.set_y[k])\n }\n }\n if (options.set_x) {\n for (let k = 0; k < options.set_x.length; k++) {\n columnNumberFor(options.set_x[k])\n }\n }\n\n kb.query(query as any, addCellFromBindings, undefined, whenDone) // Populate the matrix\n return matrix\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"matrix.esm.js","names":["utils.label","$rdf","kb","solidLogicSingleton","matrixForQuery","matrix","dom","header","columns","rows","setCell","cell","options","x","y","value","label","rowFor","y1","tr","ok","i","ele","columnNumberFor","xNT","x1","col","row","td","t","j","markOldCells","clearOldCells","colsUsed","rowsUsed","k","newcolumns","query","addCellFromBindings","bindings","vx","vy","vvalue","colNo","whenDone"],"sources":["../../src/matrix/matrix.ts"],"sourcesContent":["// Build a 2D matrix of values\n//\n// dom AKA document\n// query a Query object of rdflib.js with a valid pattern\n// vx A variable object, the one to be used for the X variable (horiz)\n// vy A variable object, the one to be used for the Y variable (vertical)\n// vvalue A variable object, the one to be used for the cell value\n// returns A DOM element with the matrix in it, which has a .refresh() function.\n//\n// Options:\n// cellFunction(td, x, y, value) fill the TD element of a single cell\n// xDecreasing set true for x axis to be in decreasing order.\n// yDecreasing set true for y axis to be in decreasing order.\n// set_x array of X values to be define initial rows (order irrelevant)\n// set_y array of Y values to be define initial columns\n//\n// Features:\n// Header row at top (x axis) and left (y-axis) generated automatically.\n// Extra rows and columns are inserted as needed to hold new data points\n// matrix.refresh() will re-run the query and adjust the display\n\nimport * as utils from '../utils'\nimport * as $rdf from 'rdflib'\nimport { MatrixOptions } from './types'\nimport { solidLogicSingleton } from 'solid-logic'\n\nconst kb = solidLogicSingleton.store\n\nexport function matrixForQuery (\n dom: HTMLDocument,\n query: $rdf.Query,\n vx: $rdf.Variable,\n vy: $rdf.Variable,\n vvalue: $rdf.Variable,\n options: MatrixOptions,\n whenDone: () => void\n) {\n // @@ TODO Remove need to cast to any\n const matrix: any = dom.createElement('table')\n const header = dom.createElement('tr')\n const corner = header.appendChild(dom.createElement('td'))\n corner.setAttribute('class', 'MatrixCorner')\n matrix.appendChild(header) // just one for now\n matrix.lastHeader = header // Element before data\n let columns: any[] = [] // Vector\n const rows: any[] = [] // Associative array\n\n const setCell = function (cell, x, y, value) {\n while (cell.firstChild) {\n // Empty any previous\n cell.removeChild(cell.firstChild)\n }\n cell.setAttribute('style', '')\n cell.style.textAlign = 'center'\n\n if (options.cellFunction) {\n options.cellFunction(cell, x, y, value)\n } else {\n cell.textContent = utils.label(value)\n cell.setAttribute('style', 'padding: 0.3em')\n }\n delete cell.old\n }\n\n const rowFor = function (y1) {\n const y = y1.toNT()\n if (rows[y]) return rows[y]\n // @@ TODO Remove need for casting to any\n const tr: any = dom.createElement('tr')\n const header = tr.appendChild(dom.createElement('td'))\n header.setAttribute('style', 'padding: 0.3em;')\n header.textContent = utils.label(y1) // first approximation\n if (y1.termType === 'NamedNode') {\n kb.fetcher!.nowOrWhenFetched(y1.uri.split('#')[0], undefined, function (\n ok,\n _body,\n _response\n ) {\n if (ok) header.textContent = utils.label(y1)\n })\n }\n for (let i = 0; i < columns.length; i++) {\n setCell(\n tr.appendChild(dom.createElement('td')),\n $rdf.fromNT(columns[i]),\n y1,\n null\n )\n }\n tr.dataValueNT = y\n rows[y] = tr\n for (let ele = matrix.lastHeader.nextSibling; ele; ele = ele.nextSibling) {\n // skip header\n if (\n (y > ele.dataValueNT && options && options.yDecreasing) ||\n (y < ele.dataValueNT && !(options && options.yDecreasing))\n ) {\n return matrix.insertBefore(tr, ele) // return the tr\n }\n }\n return matrix.appendChild(tr) // return the tr\n }\n\n const columnNumberFor = function (x1): number {\n const xNT: any = x1.toNT() // xNT is a NT string\n let col: any = null\n // These are data columns (not headings)\n for (let i = 0; i < columns.length; i++) {\n if (columns[i] === xNT) {\n return i\n }\n\n if (\n (xNT > columns[i] && options.xDecreasing) ||\n (xNT < columns[i] && !options.xDecreasing)\n ) {\n columns = columns\n .slice(0, i)\n .concat([xNT])\n .concat(columns.slice(i))\n col = i\n break\n }\n }\n\n if (col === null) {\n col = columns.length\n columns.push(xNT)\n }\n\n // col is the number of the new column, starting from 0\n for (let row = matrix.firstChild; row; row = row.nextSibling) {\n // For every row header or not\n const y = row.dataValueNT\n const td = dom.createElement('td') // Add a new cell\n td.style.textAlign = 'center'\n if (row === matrix.firstChild) {\n td.textContent = utils.label(x1)\n } else {\n setCell(td, x1, $rdf.fromNT(y), null)\n }\n if (col === columns.length - 1) {\n row.appendChild(td)\n } else {\n let t = row.firstChild\n for (let j = 0; j < col + 1; j++) {\n // Skip header col too\n t = t.nextSibling\n }\n row.insertBefore(td, t)\n }\n }\n return col\n }\n\n const markOldCells = function () {\n for (let i = 1; i < matrix.children.length; i++) {\n const row = matrix.children[i]\n for (let j = 1; j < row.children.length; j++) {\n row.children[j].old = true\n }\n }\n }\n\n const clearOldCells = function () {\n let row, cell\n const colsUsed: any[] = []\n const rowsUsed: any[] = []\n\n if (options.set_y) {\n // Knows y values create rows\n for (let k = 0; k < options.set_y.length; k++) {\n rowsUsed[options.set_y[k]] = true\n }\n }\n if (options.set_x) {\n for (let k = 0; k < options.set_x.length; k++) {\n colsUsed[columnNumberFor(options.set_x[k]) + 1] = true\n }\n }\n\n for (let i = 1; i < matrix.children.length; i++) {\n row = matrix.children[i]\n for (let j = 1; j < row.children.length; j++) {\n cell = row.children[j]\n if (cell.old) {\n const y = $rdf.fromNT(row.dataValueNT)\n const x = $rdf.fromNT(columns[j - 1])\n setCell(cell, x, y, null)\n } else {\n rowsUsed[row.dataValueNT] = true\n colsUsed[j] = true\n }\n }\n }\n\n for (let i = 0; i < matrix.children.length; i++) {\n row = matrix.children[i]\n if (i > 0 && !rowsUsed[row.dataValueNT]) {\n delete rows[row.dataValueNT]\n matrix.removeChild(row)\n } else {\n for (let j = row.children.length - 1; j > 0; j--) {\n // backwards\n const cell = row.children[j]\n if (!colsUsed[j]) {\n row.removeChild(cell)\n }\n }\n }\n }\n const newcolumns: any[] = []\n for (let j = 0; j < columns.length; j++) {\n if (colsUsed[j + 1]) {\n newcolumns.push(columns[j])\n }\n }\n columns = newcolumns\n }\n\n matrix.refresh = function () {\n markOldCells()\n kb.query(query as any, addCellFromBindings, undefined, clearOldCells)\n }\n\n const addCellFromBindings = function (bindings) {\n const x = bindings[vx.toString()]\n const y = bindings[vy.toString()]\n const value = bindings[(vvalue.toString())]\n const row = rowFor(y)\n const colNo = columnNumberFor(x)\n const cell = row.children[colNo + 1] // number of Y axis headings\n setCell(cell, x, y, value)\n }\n\n if (options.set_y) {\n // Knows y values create rows\n for (let k = 0; k < options.set_y.length; k++) {\n rowFor(options.set_y[k])\n }\n }\n if (options.set_x) {\n for (let k = 0; k < options.set_x.length; k++) {\n columnNumberFor(options.set_x[k])\n }\n }\n\n kb.query(query as any, addCellFromBindings, undefined, whenDone) // Populate the matrix\n return matrix\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","names":[],"sources":["../../src/media/index.ts"],"sourcesContent":["import {\n cameraCaptureControl,\n cameraButton\n} from './media-capture'\n\nexport const media = {\n cameraCaptureControl,\n cameraButton\n}\n"],"mappings":"0CAKA,
|
|
1
|
+
{"version":3,"file":"index.cjs.js","names":["require_media_capture","media"],"sources":["../../src/media/index.ts"],"sourcesContent":["import {\n cameraCaptureControl,\n cameraButton\n} from './media-capture'\n\nexport const media = {\n cameraCaptureControl,\n cameraButton\n}\n"],"mappings":"0CAKA,IAAaC,EAAQ,CACnB,qBAAAD,EAAA,qBACA,aAAAA,EAAA,YACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","names":[],"sources":["../../src/media/index.ts"],"sourcesContent":["import {\n cameraCaptureControl,\n cameraButton\n} from './media-capture'\n\nexport const media = {\n cameraCaptureControl,\n cameraButton\n}\n"],"mappings":";;AAKA,
|
|
1
|
+
{"version":3,"file":"index.esm.js","names":["media"],"sources":["../../src/media/index.ts"],"sourcesContent":["import {\n cameraCaptureControl,\n cameraButton\n} from './media-capture'\n\nexport const media = {\n cameraCaptureControl,\n cameraButton\n}\n"],"mappings":";;AAKA,IAAaA,IAAQ;CACnB;CACA;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-capture.cjs.js","names":[],"sources":["../../src/media/media-capture.ts"],"sourcesContent":["//\n// Media input widget\n//\n//\n// Workflow:\n// The HTML5 functionality (on mobile) is to prompt for either\n// a realtime camera capture, OR a selection from images already on the device\n// (eg camera roll).\n//\n// The solid alternative is to either take a photo\n// or access camera roll (etc) OR to access solid cloud storage of favorite photo albums.\n// (Especially latest taken ones)\n//\nimport * as debug from '../lib/debug'\n\n/** @module mediaCapture */\n\nimport { icons } from '../lib/iconBase'\nimport { style } from '../lib/style'\nimport * as widgets from '../widgets'\nimport { IndexedFormula, NamedNode } from 'rdflib'\n\nconst cameraIcon = icons.iconBase + 'noun_Camera_1618446_000000.svg' // Get it from github\nconst retakeIcon = icons.iconBase + 'noun_479395.svg' // Get it from github\n\nconst contentType = 'image/png'\n\n/** A control to capture a picture using camera\n * @param {Docuemnt} dom - The Document object\n * @param {IndexedForumla} store - The quadstore to store data in\n * @param {NamedNode} getImageDoc() - NN of the image file to be created\n * @param {function} doneCallback - Called when a picture has been taken\n */\nexport function cameraCaptureControl (\n dom: HTMLDocument,\n store: IndexedFormula,\n getImageDoc: () => NamedNode,\n doneCallback: (imageDoc) => Promise<void>\n) {\n const div = dom.createElement('div')\n let destination, imageBlob, player, canvas\n\n const table = div.appendChild(dom.createElement('table'))\n const mainTR = table.appendChild(dom.createElement('tr'))\n const main = mainTR.appendChild(dom.createElement('td'))\n main.setAttribute('colspan', '4')\n\n const buttons = table.appendChild(dom.createElement('tr'))\n\n buttons\n .appendChild(dom.createElement('td')) // Cancel button\n .appendChild(widgets.cancelButton(dom))\n .addEventListener('click', _event => {\n stopVideo()\n doneCallback(null)\n })\n\n const retakeButton = buttons\n .appendChild(dom.createElement('td')) // Retake button\n .appendChild(widgets.button(dom, retakeIcon, 'Retake'))\n retakeButton.addEventListener('click', _event => {\n retake()\n })\n retakeButton.style.visibility = 'collapse' // Hide for now\n\n const shutterButton = buttons\n .appendChild(dom.createElement('td')) // Trigger capture button\n .appendChild(\n widgets.button(dom, icons.iconBase + 'noun_10636.svg', 'Snap')\n )\n shutterButton.addEventListener('click', grabCanvas)\n shutterButton.style.visibility = 'collapse' // Hide for now\n\n const sendButton = buttons\n .appendChild(dom.createElement('td')) // Confirm and save button\n .appendChild(widgets.continueButton(dom)) // @@ or send icon??\n sendButton.addEventListener('click', _event => {\n saveBlob(imageBlob, destination)\n })\n sendButton.style.visibility = 'collapse' // Hide for now\n\n function displayPlayer () {\n player = main.appendChild(dom.createElement('video'))\n player.setAttribute('controls', '1')\n player.setAttribute('autoplay', '1')\n player.setAttribute('style', style.controlStyle)\n if (!navigator.mediaDevices) {\n throw new Error('navigator.mediaDevices not available')\n }\n navigator.mediaDevices.getUserMedia(constraints).then(stream => {\n player.srcObject = stream\n shutterButton.style.visibility = 'visible' // Enable\n sendButton.style.visibility = 'collapse'\n retakeButton.style.visibility = 'collapse'\n })\n }\n\n const constraints = {\n video: true\n }\n\n function retake () {\n main.removeChild(canvas)\n displayPlayer() // Make new one as old one is stuck black\n }\n\n function grabCanvas () {\n // Draw the video frame to the canvas.\n canvas = dom.createElement('canvas')\n canvas.setAttribute('width', style.canvasWidth)\n canvas.setAttribute('height', style.canvasHeight)\n canvas.setAttribute('style', style.controlStyle)\n main.appendChild(canvas)\n\n const context = canvas.getContext('2d')\n context.drawImage(player, 0, 0, canvas.width, canvas.height)\n\n player.parentNode.removeChild(player)\n\n canvas.toBlob(blob => {\n const msg = `got blob type ${blob.type} size ${blob.size}`\n debug.log(msg)\n destination = getImageDoc()\n imageBlob = blob // save for review\n reviewImage()\n // alert(msg)\n }, contentType) // toBlob\n }\n\n function reviewImage () {\n sendButton.style.visibility = 'visible'\n retakeButton.style.visibility = 'visible'\n shutterButton.style.visibility = 'collapse' // Hide for now\n }\n\n function stopVideo () {\n if (player && player.srcObject) {\n player.srcObject.getVideoTracks().forEach(track => track.stop())\n }\n }\n function saveBlob (blob, destination) {\n const contentType = blob.type\n // if (!confirm('Save picture to ' + destination + ' ?')) return\n debug.log(\n 'Putting ' + blob.size + ' bytes of ' + contentType + ' to ' + destination\n )\n // @@ TODO Remove casting\n ;(store as any).fetcher\n .webOperation('PUT', destination.uri, {\n data: blob,\n contentType\n })\n .then(\n _resp => {\n debug.log('ok saved ' + destination)\n stopVideo()\n doneCallback(destination)\n },\n err => {\n stopVideo()\n alert(err)\n }\n )\n }\n\n // Attach the video stream to the video element and autoplay.\n displayPlayer()\n return div\n}\n\n/** A button to capture a picture using camera\n * @param {Docuemnt} dom - The Document object\n * @param {IndexedForumla} store - The quadstore to store data in\n * @param {fuunction} getImageDoc - returns NN of the image file to be created\n * @param {function<Node>} doneCallback - called with the image taken\n * @returns {DomElement} - A div element with the button in it\n *\n * This expands the button to a large control when it is pressed\n */\n\nexport function cameraButton (\n dom: HTMLDocument,\n store: IndexedFormula,\n getImageDoc: () => NamedNode,\n doneCallback: (imageDoc) => Promise<void>\n): HTMLElement {\n const div = dom.createElement('div')\n const but = widgets.button(dom, cameraIcon, 'Take picture')\n let control\n async function restoreButton (imageDoc) {\n div.removeChild(control)\n div.appendChild(but)\n doneCallback(imageDoc)\n }\n div.appendChild(but)\n but.addEventListener('click', _event => {\n div.removeChild(but)\n control = cameraCaptureControl(\n dom,\n store,\n getImageDoc,\n restoreButton\n )\n div.appendChild(control)\n })\n return div\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"media-capture.cjs.js","names":["icons","style","require_debug","require_style","require_iconBase","require_buttons","cameraIcon","retakeIcon","contentType","cameraCaptureControl","div","dom","destination","imageBlob","player","canvas","table","main","buttons","stopVideo","doneCallback","retakeButton","retake","shutterButton","grabCanvas","sendButton","saveBlob","displayPlayer","constraints","stream","msg","blob","getImageDoc","reviewImage","track","store","err","cameraButton","but","control","restoreButton","imageDoc"],"sources":["../../src/media/media-capture.ts"],"sourcesContent":["//\n// Media input widget\n//\n//\n// Workflow:\n// The HTML5 functionality (on mobile) is to prompt for either\n// a realtime camera capture, OR a selection from images already on the device\n// (eg camera roll).\n//\n// The solid alternative is to either take a photo\n// or access camera roll (etc) OR to access solid cloud storage of favorite photo albums.\n// (Especially latest taken ones)\n//\nimport * as debug from '../lib/debug'\n\n/** @module mediaCapture */\n\nimport { icons } from '../lib/iconBase'\nimport { style } from '../lib/style'\nimport * as widgets from '../widgets'\nimport { IndexedFormula, NamedNode } from 'rdflib'\n\nconst cameraIcon = icons.iconBase + 'noun_Camera_1618446_000000.svg' // Get it from github\nconst retakeIcon = icons.iconBase + 'noun_479395.svg' // Get it from github\n\nconst contentType = 'image/png'\n\n/** A control to capture a picture using camera\n * @param {Docuemnt} dom - The Document object\n * @param {IndexedForumla} store - The quadstore to store data in\n * @param {NamedNode} getImageDoc() - NN of the image file to be created\n * @param {function} doneCallback - Called when a picture has been taken\n */\nexport function cameraCaptureControl (\n dom: HTMLDocument,\n store: IndexedFormula,\n getImageDoc: () => NamedNode,\n doneCallback: (imageDoc) => Promise<void>\n) {\n const div = dom.createElement('div')\n let destination, imageBlob, player, canvas\n\n const table = div.appendChild(dom.createElement('table'))\n const mainTR = table.appendChild(dom.createElement('tr'))\n const main = mainTR.appendChild(dom.createElement('td'))\n main.setAttribute('colspan', '4')\n\n const buttons = table.appendChild(dom.createElement('tr'))\n\n buttons\n .appendChild(dom.createElement('td')) // Cancel button\n .appendChild(widgets.cancelButton(dom))\n .addEventListener('click', _event => {\n stopVideo()\n doneCallback(null)\n })\n\n const retakeButton = buttons\n .appendChild(dom.createElement('td')) // Retake button\n .appendChild(widgets.button(dom, retakeIcon, 'Retake'))\n retakeButton.addEventListener('click', _event => {\n retake()\n })\n retakeButton.style.visibility = 'collapse' // Hide for now\n\n const shutterButton = buttons\n .appendChild(dom.createElement('td')) // Trigger capture button\n .appendChild(\n widgets.button(dom, icons.iconBase + 'noun_10636.svg', 'Snap')\n )\n shutterButton.addEventListener('click', grabCanvas)\n shutterButton.style.visibility = 'collapse' // Hide for now\n\n const sendButton = buttons\n .appendChild(dom.createElement('td')) // Confirm and save button\n .appendChild(widgets.continueButton(dom)) // @@ or send icon??\n sendButton.addEventListener('click', _event => {\n saveBlob(imageBlob, destination)\n })\n sendButton.style.visibility = 'collapse' // Hide for now\n\n function displayPlayer () {\n player = main.appendChild(dom.createElement('video'))\n player.setAttribute('controls', '1')\n player.setAttribute('autoplay', '1')\n player.setAttribute('style', style.controlStyle)\n if (!navigator.mediaDevices) {\n throw new Error('navigator.mediaDevices not available')\n }\n navigator.mediaDevices.getUserMedia(constraints).then(stream => {\n player.srcObject = stream\n shutterButton.style.visibility = 'visible' // Enable\n sendButton.style.visibility = 'collapse'\n retakeButton.style.visibility = 'collapse'\n })\n }\n\n const constraints = {\n video: true\n }\n\n function retake () {\n main.removeChild(canvas)\n displayPlayer() // Make new one as old one is stuck black\n }\n\n function grabCanvas () {\n // Draw the video frame to the canvas.\n canvas = dom.createElement('canvas')\n canvas.setAttribute('width', style.canvasWidth)\n canvas.setAttribute('height', style.canvasHeight)\n canvas.setAttribute('style', style.controlStyle)\n main.appendChild(canvas)\n\n const context = canvas.getContext('2d')\n context.drawImage(player, 0, 0, canvas.width, canvas.height)\n\n player.parentNode.removeChild(player)\n\n canvas.toBlob(blob => {\n const msg = `got blob type ${blob.type} size ${blob.size}`\n debug.log(msg)\n destination = getImageDoc()\n imageBlob = blob // save for review\n reviewImage()\n // alert(msg)\n }, contentType) // toBlob\n }\n\n function reviewImage () {\n sendButton.style.visibility = 'visible'\n retakeButton.style.visibility = 'visible'\n shutterButton.style.visibility = 'collapse' // Hide for now\n }\n\n function stopVideo () {\n if (player && player.srcObject) {\n player.srcObject.getVideoTracks().forEach(track => track.stop())\n }\n }\n function saveBlob (blob, destination) {\n const contentType = blob.type\n // if (!confirm('Save picture to ' + destination + ' ?')) return\n debug.log(\n 'Putting ' + blob.size + ' bytes of ' + contentType + ' to ' + destination\n )\n // @@ TODO Remove casting\n ;(store as any).fetcher\n .webOperation('PUT', destination.uri, {\n data: blob,\n contentType\n })\n .then(\n _resp => {\n debug.log('ok saved ' + destination)\n stopVideo()\n doneCallback(destination)\n },\n err => {\n stopVideo()\n alert(err)\n }\n )\n }\n\n // Attach the video stream to the video element and autoplay.\n displayPlayer()\n return div\n}\n\n/** A button to capture a picture using camera\n * @param {Docuemnt} dom - The Document object\n * @param {IndexedForumla} store - The quadstore to store data in\n * @param {fuunction} getImageDoc - returns NN of the image file to be created\n * @param {function<Node>} doneCallback - called with the image taken\n * @returns {DomElement} - A div element with the button in it\n *\n * This expands the button to a large control when it is pressed\n */\n\nexport function cameraButton (\n dom: HTMLDocument,\n store: IndexedFormula,\n getImageDoc: () => NamedNode,\n doneCallback: (imageDoc) => Promise<void>\n): HTMLElement {\n const div = dom.createElement('div')\n const but = widgets.button(dom, cameraIcon, 'Take picture')\n let control\n async function restoreButton (imageDoc) {\n div.removeChild(control)\n div.appendChild(but)\n doneCallback(imageDoc)\n }\n div.appendChild(but)\n but.addEventListener('click', _event => {\n div.removeChild(but)\n control = cameraCaptureControl(\n dom,\n store,\n getImageDoc,\n restoreButton\n )\n div.appendChild(control)\n })\n return div\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-capture.esm.js","names":[],"sources":["../../src/media/media-capture.ts"],"sourcesContent":["//\n// Media input widget\n//\n//\n// Workflow:\n// The HTML5 functionality (on mobile) is to prompt for either\n// a realtime camera capture, OR a selection from images already on the device\n// (eg camera roll).\n//\n// The solid alternative is to either take a photo\n// or access camera roll (etc) OR to access solid cloud storage of favorite photo albums.\n// (Especially latest taken ones)\n//\nimport * as debug from '../lib/debug'\n\n/** @module mediaCapture */\n\nimport { icons } from '../lib/iconBase'\nimport { style } from '../lib/style'\nimport * as widgets from '../widgets'\nimport { IndexedFormula, NamedNode } from 'rdflib'\n\nconst cameraIcon = icons.iconBase + 'noun_Camera_1618446_000000.svg' // Get it from github\nconst retakeIcon = icons.iconBase + 'noun_479395.svg' // Get it from github\n\nconst contentType = 'image/png'\n\n/** A control to capture a picture using camera\n * @param {Docuemnt} dom - The Document object\n * @param {IndexedForumla} store - The quadstore to store data in\n * @param {NamedNode} getImageDoc() - NN of the image file to be created\n * @param {function} doneCallback - Called when a picture has been taken\n */\nexport function cameraCaptureControl (\n dom: HTMLDocument,\n store: IndexedFormula,\n getImageDoc: () => NamedNode,\n doneCallback: (imageDoc) => Promise<void>\n) {\n const div = dom.createElement('div')\n let destination, imageBlob, player, canvas\n\n const table = div.appendChild(dom.createElement('table'))\n const mainTR = table.appendChild(dom.createElement('tr'))\n const main = mainTR.appendChild(dom.createElement('td'))\n main.setAttribute('colspan', '4')\n\n const buttons = table.appendChild(dom.createElement('tr'))\n\n buttons\n .appendChild(dom.createElement('td')) // Cancel button\n .appendChild(widgets.cancelButton(dom))\n .addEventListener('click', _event => {\n stopVideo()\n doneCallback(null)\n })\n\n const retakeButton = buttons\n .appendChild(dom.createElement('td')) // Retake button\n .appendChild(widgets.button(dom, retakeIcon, 'Retake'))\n retakeButton.addEventListener('click', _event => {\n retake()\n })\n retakeButton.style.visibility = 'collapse' // Hide for now\n\n const shutterButton = buttons\n .appendChild(dom.createElement('td')) // Trigger capture button\n .appendChild(\n widgets.button(dom, icons.iconBase + 'noun_10636.svg', 'Snap')\n )\n shutterButton.addEventListener('click', grabCanvas)\n shutterButton.style.visibility = 'collapse' // Hide for now\n\n const sendButton = buttons\n .appendChild(dom.createElement('td')) // Confirm and save button\n .appendChild(widgets.continueButton(dom)) // @@ or send icon??\n sendButton.addEventListener('click', _event => {\n saveBlob(imageBlob, destination)\n })\n sendButton.style.visibility = 'collapse' // Hide for now\n\n function displayPlayer () {\n player = main.appendChild(dom.createElement('video'))\n player.setAttribute('controls', '1')\n player.setAttribute('autoplay', '1')\n player.setAttribute('style', style.controlStyle)\n if (!navigator.mediaDevices) {\n throw new Error('navigator.mediaDevices not available')\n }\n navigator.mediaDevices.getUserMedia(constraints).then(stream => {\n player.srcObject = stream\n shutterButton.style.visibility = 'visible' // Enable\n sendButton.style.visibility = 'collapse'\n retakeButton.style.visibility = 'collapse'\n })\n }\n\n const constraints = {\n video: true\n }\n\n function retake () {\n main.removeChild(canvas)\n displayPlayer() // Make new one as old one is stuck black\n }\n\n function grabCanvas () {\n // Draw the video frame to the canvas.\n canvas = dom.createElement('canvas')\n canvas.setAttribute('width', style.canvasWidth)\n canvas.setAttribute('height', style.canvasHeight)\n canvas.setAttribute('style', style.controlStyle)\n main.appendChild(canvas)\n\n const context = canvas.getContext('2d')\n context.drawImage(player, 0, 0, canvas.width, canvas.height)\n\n player.parentNode.removeChild(player)\n\n canvas.toBlob(blob => {\n const msg = `got blob type ${blob.type} size ${blob.size}`\n debug.log(msg)\n destination = getImageDoc()\n imageBlob = blob // save for review\n reviewImage()\n // alert(msg)\n }, contentType) // toBlob\n }\n\n function reviewImage () {\n sendButton.style.visibility = 'visible'\n retakeButton.style.visibility = 'visible'\n shutterButton.style.visibility = 'collapse' // Hide for now\n }\n\n function stopVideo () {\n if (player && player.srcObject) {\n player.srcObject.getVideoTracks().forEach(track => track.stop())\n }\n }\n function saveBlob (blob, destination) {\n const contentType = blob.type\n // if (!confirm('Save picture to ' + destination + ' ?')) return\n debug.log(\n 'Putting ' + blob.size + ' bytes of ' + contentType + ' to ' + destination\n )\n // @@ TODO Remove casting\n ;(store as any).fetcher\n .webOperation('PUT', destination.uri, {\n data: blob,\n contentType\n })\n .then(\n _resp => {\n debug.log('ok saved ' + destination)\n stopVideo()\n doneCallback(destination)\n },\n err => {\n stopVideo()\n alert(err)\n }\n )\n }\n\n // Attach the video stream to the video element and autoplay.\n displayPlayer()\n return div\n}\n\n/** A button to capture a picture using camera\n * @param {Docuemnt} dom - The Document object\n * @param {IndexedForumla} store - The quadstore to store data in\n * @param {fuunction} getImageDoc - returns NN of the image file to be created\n * @param {function<Node>} doneCallback - called with the image taken\n * @returns {DomElement} - A div element with the button in it\n *\n * This expands the button to a large control when it is pressed\n */\n\nexport function cameraButton (\n dom: HTMLDocument,\n store: IndexedFormula,\n getImageDoc: () => NamedNode,\n doneCallback: (imageDoc) => Promise<void>\n): HTMLElement {\n const div = dom.createElement('div')\n const but = widgets.button(dom, cameraIcon, 'Take picture')\n let control\n async function restoreButton (imageDoc) {\n div.removeChild(control)\n div.appendChild(but)\n doneCallback(imageDoc)\n }\n div.appendChild(but)\n but.addEventListener('click', _event => {\n div.removeChild(but)\n control = cameraCaptureControl(\n dom,\n store,\n getImageDoc,\n restoreButton\n )\n div.appendChild(control)\n })\n return div\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"media-capture.esm.js","names":["widgets.cancelButton","widgets.button","widgets.continueButton","cameraIcon","icons","retakeIcon","contentType","cameraCaptureControl","div","dom","destination","imageBlob","player","canvas","table","main","buttons","cancelButton","stopVideo","doneCallback","retakeButton","button","shutterButton","grabCanvas","sendButton","continueButton","displayPlayer","style","constraints","stream","retake","msg","blob","log","getImageDoc","reviewImage","track","saveBlob","store","err","cameraButton","but","control","restoreButton","imageDoc"],"sources":["../../src/media/media-capture.ts"],"sourcesContent":["//\n// Media input widget\n//\n//\n// Workflow:\n// The HTML5 functionality (on mobile) is to prompt for either\n// a realtime camera capture, OR a selection from images already on the device\n// (eg camera roll).\n//\n// The solid alternative is to either take a photo\n// or access camera roll (etc) OR to access solid cloud storage of favorite photo albums.\n// (Especially latest taken ones)\n//\nimport * as debug from '../lib/debug'\n\n/** @module mediaCapture */\n\nimport { icons } from '../lib/iconBase'\nimport { style } from '../lib/style'\nimport * as widgets from '../widgets'\nimport { IndexedFormula, NamedNode } from 'rdflib'\n\nconst cameraIcon = icons.iconBase + 'noun_Camera_1618446_000000.svg' // Get it from github\nconst retakeIcon = icons.iconBase + 'noun_479395.svg' // Get it from github\n\nconst contentType = 'image/png'\n\n/** A control to capture a picture using camera\n * @param {Docuemnt} dom - The Document object\n * @param {IndexedForumla} store - The quadstore to store data in\n * @param {NamedNode} getImageDoc() - NN of the image file to be created\n * @param {function} doneCallback - Called when a picture has been taken\n */\nexport function cameraCaptureControl (\n dom: HTMLDocument,\n store: IndexedFormula,\n getImageDoc: () => NamedNode,\n doneCallback: (imageDoc) => Promise<void>\n) {\n const div = dom.createElement('div')\n let destination, imageBlob, player, canvas\n\n const table = div.appendChild(dom.createElement('table'))\n const mainTR = table.appendChild(dom.createElement('tr'))\n const main = mainTR.appendChild(dom.createElement('td'))\n main.setAttribute('colspan', '4')\n\n const buttons = table.appendChild(dom.createElement('tr'))\n\n buttons\n .appendChild(dom.createElement('td')) // Cancel button\n .appendChild(widgets.cancelButton(dom))\n .addEventListener('click', _event => {\n stopVideo()\n doneCallback(null)\n })\n\n const retakeButton = buttons\n .appendChild(dom.createElement('td')) // Retake button\n .appendChild(widgets.button(dom, retakeIcon, 'Retake'))\n retakeButton.addEventListener('click', _event => {\n retake()\n })\n retakeButton.style.visibility = 'collapse' // Hide for now\n\n const shutterButton = buttons\n .appendChild(dom.createElement('td')) // Trigger capture button\n .appendChild(\n widgets.button(dom, icons.iconBase + 'noun_10636.svg', 'Snap')\n )\n shutterButton.addEventListener('click', grabCanvas)\n shutterButton.style.visibility = 'collapse' // Hide for now\n\n const sendButton = buttons\n .appendChild(dom.createElement('td')) // Confirm and save button\n .appendChild(widgets.continueButton(dom)) // @@ or send icon??\n sendButton.addEventListener('click', _event => {\n saveBlob(imageBlob, destination)\n })\n sendButton.style.visibility = 'collapse' // Hide for now\n\n function displayPlayer () {\n player = main.appendChild(dom.createElement('video'))\n player.setAttribute('controls', '1')\n player.setAttribute('autoplay', '1')\n player.setAttribute('style', style.controlStyle)\n if (!navigator.mediaDevices) {\n throw new Error('navigator.mediaDevices not available')\n }\n navigator.mediaDevices.getUserMedia(constraints).then(stream => {\n player.srcObject = stream\n shutterButton.style.visibility = 'visible' // Enable\n sendButton.style.visibility = 'collapse'\n retakeButton.style.visibility = 'collapse'\n })\n }\n\n const constraints = {\n video: true\n }\n\n function retake () {\n main.removeChild(canvas)\n displayPlayer() // Make new one as old one is stuck black\n }\n\n function grabCanvas () {\n // Draw the video frame to the canvas.\n canvas = dom.createElement('canvas')\n canvas.setAttribute('width', style.canvasWidth)\n canvas.setAttribute('height', style.canvasHeight)\n canvas.setAttribute('style', style.controlStyle)\n main.appendChild(canvas)\n\n const context = canvas.getContext('2d')\n context.drawImage(player, 0, 0, canvas.width, canvas.height)\n\n player.parentNode.removeChild(player)\n\n canvas.toBlob(blob => {\n const msg = `got blob type ${blob.type} size ${blob.size}`\n debug.log(msg)\n destination = getImageDoc()\n imageBlob = blob // save for review\n reviewImage()\n // alert(msg)\n }, contentType) // toBlob\n }\n\n function reviewImage () {\n sendButton.style.visibility = 'visible'\n retakeButton.style.visibility = 'visible'\n shutterButton.style.visibility = 'collapse' // Hide for now\n }\n\n function stopVideo () {\n if (player && player.srcObject) {\n player.srcObject.getVideoTracks().forEach(track => track.stop())\n }\n }\n function saveBlob (blob, destination) {\n const contentType = blob.type\n // if (!confirm('Save picture to ' + destination + ' ?')) return\n debug.log(\n 'Putting ' + blob.size + ' bytes of ' + contentType + ' to ' + destination\n )\n // @@ TODO Remove casting\n ;(store as any).fetcher\n .webOperation('PUT', destination.uri, {\n data: blob,\n contentType\n })\n .then(\n _resp => {\n debug.log('ok saved ' + destination)\n stopVideo()\n doneCallback(destination)\n },\n err => {\n stopVideo()\n alert(err)\n }\n )\n }\n\n // Attach the video stream to the video element and autoplay.\n displayPlayer()\n return div\n}\n\n/** A button to capture a picture using camera\n * @param {Docuemnt} dom - The Document object\n * @param {IndexedForumla} store - The quadstore to store data in\n * @param {fuunction} getImageDoc - returns NN of the image file to be created\n * @param {function<Node>} doneCallback - called with the image taken\n * @returns {DomElement} - A div element with the button in it\n *\n * This expands the button to a large control when it is pressed\n */\n\nexport function cameraButton (\n dom: HTMLDocument,\n store: IndexedFormula,\n getImageDoc: () => NamedNode,\n doneCallback: (imageDoc) => Promise<void>\n): HTMLElement {\n const div = dom.createElement('div')\n const but = widgets.button(dom, cameraIcon, 'Take picture')\n let control\n async function restoreButton (imageDoc) {\n div.removeChild(control)\n div.appendChild(but)\n doneCallback(imageDoc)\n }\n div.appendChild(but)\n but.addEventListener('click', _event => {\n div.removeChild(but)\n control = cameraCaptureControl(\n dom,\n store,\n getImageDoc,\n restoreButton\n )\n div.appendChild(control)\n })\n return div\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-default.cjs.js","names":[],"sources":["../../src/signup/config-default.js"],"sourcesContent":["/**\n * Provides a simple configuration object for Solid web client and other\n * modules.\n * @module config-default\n */\nexport default { // @@ should not use export default\n /**\n * Primary authentication endpoint\n */\n authEndpoint: '',\n\n /**\n * Fallback authentication endpoint\n */\n fallbackAuthEndpoint: 'https://databox.me/',\n\n /**\n * Default signup endpoints (list of identity providers)\n */\n signupEndpoint: 'https://solidproject.org/get_a_pod',\n\n /**\n * Default height of the Signup popup window, in pixels\n */\n signupWindowHeight: 600,\n\n /**\n * Default width of the Signup popup window, in pixels\n */\n signupWindowWidth: 1024,\n\n /**\n * Path to the client private key (only needed when running within node)\n */\n key: '',\n\n /**\n * Path to the client certificate (only needed when running within node)\n */\n cert: ''\n}\n"],"mappings":"AAKA,
|
|
1
|
+
{"version":3,"file":"config-default.cjs.js","names":["config_default_default"],"sources":["../../src/signup/config-default.js"],"sourcesContent":["/**\n * Provides a simple configuration object for Solid web client and other\n * modules.\n * @module config-default\n */\nexport default { // @@ should not use export default\n /**\n * Primary authentication endpoint\n */\n authEndpoint: '',\n\n /**\n * Fallback authentication endpoint\n */\n fallbackAuthEndpoint: 'https://databox.me/',\n\n /**\n * Default signup endpoints (list of identity providers)\n */\n signupEndpoint: 'https://solidproject.org/get_a_pod',\n\n /**\n * Default height of the Signup popup window, in pixels\n */\n signupWindowHeight: 600,\n\n /**\n * Default width of the Signup popup window, in pixels\n */\n signupWindowWidth: 1024,\n\n /**\n * Path to the client private key (only needed when running within node)\n */\n key: '',\n\n /**\n * Path to the client certificate (only needed when running within node)\n */\n cert: ''\n}\n"],"mappings":"AAKA,IAAAA,EAAe,CAIb,aAAc,GAKd,qBAAsB,sBAKtB,eAAgB,qCAKhB,mBAAoB,IAKpB,kBAAmB,KAKnB,IAAK,GAKL,KAAM,EACR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-default.esm.js","names":[],"sources":["../../src/signup/config-default.js"],"sourcesContent":["/**\n * Provides a simple configuration object for Solid web client and other\n * modules.\n * @module config-default\n */\nexport default { // @@ should not use export default\n /**\n * Primary authentication endpoint\n */\n authEndpoint: '',\n\n /**\n * Fallback authentication endpoint\n */\n fallbackAuthEndpoint: 'https://databox.me/',\n\n /**\n * Default signup endpoints (list of identity providers)\n */\n signupEndpoint: 'https://solidproject.org/get_a_pod',\n\n /**\n * Default height of the Signup popup window, in pixels\n */\n signupWindowHeight: 600,\n\n /**\n * Default width of the Signup popup window, in pixels\n */\n signupWindowWidth: 1024,\n\n /**\n * Path to the client private key (only needed when running within node)\n */\n key: '',\n\n /**\n * Path to the client certificate (only needed when running within node)\n */\n cert: ''\n}\n"],"mappings":";AAKA,
|
|
1
|
+
{"version":3,"file":"config-default.esm.js","names":["config_default_default"],"sources":["../../src/signup/config-default.js"],"sourcesContent":["/**\n * Provides a simple configuration object for Solid web client and other\n * modules.\n * @module config-default\n */\nexport default { // @@ should not use export default\n /**\n * Primary authentication endpoint\n */\n authEndpoint: '',\n\n /**\n * Fallback authentication endpoint\n */\n fallbackAuthEndpoint: 'https://databox.me/',\n\n /**\n * Default signup endpoints (list of identity providers)\n */\n signupEndpoint: 'https://solidproject.org/get_a_pod',\n\n /**\n * Default height of the Signup popup window, in pixels\n */\n signupWindowHeight: 600,\n\n /**\n * Default width of the Signup popup window, in pixels\n */\n signupWindowWidth: 1024,\n\n /**\n * Path to the client private key (only needed when running within node)\n */\n key: '',\n\n /**\n * Path to the client certificate (only needed when running within node)\n */\n cert: ''\n}\n"],"mappings":";AAKA,IAAAA,IAAe;CAIb,cAAc;CAKd,sBAAsB;CAKtB,gBAAgB;CAKhB,oBAAoB;CAKpB,mBAAmB;CAKnB,KAAK;CAKL,MAAM;AACR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signup.cjs.js","names":["defaultConfig"],"sources":["../../src/signup/signup.js"],"sourcesContent":["import defaultConfig from './config-default'\n\n/**\n * Provides functionality for signing up with a Solid provider\n * @module signup\n */\n\n/**\n * Creates a Signup UI manager\n * @class\n */\nexport function Signup (config) {\n this.config = config || defaultConfig\n}\n\n/**\n * Sets up an event listener to monitor login messages from child window/iframe\n * @method listen\n * @return {Promise<String>} Event listener promise, resolves to user's WebID\n */\nSignup.prototype.listen = function listen () {\n const promise = new Promise(function (resolve, reject) {\n const eventMethod = window.addEventListener\n ? 'addEventListener'\n : 'attachEvent'\n const eventListener = window[eventMethod]\n const messageEvent = eventMethod === 'attachEvent'\n ? 'onmessage'\n : 'message'\n eventListener(messageEvent, function (e) {\n const u = e.data\n if (u.slice(0, 5) === 'User:') {\n const user = u.slice(5, u.length)\n if (user && user.length > 0 && user.slice(0, 4) === 'http') {\n return resolve(user)\n } else {\n return reject(user)\n }\n }\n }, true)\n })\n return promise\n}\n\n/**\n * Opens a signup popup window, sets up `listen()`.\n * @method signup\n * @static\n * @param signupUrl {String} Location of a Solid server for user signup.\n * @return {Promise<String>} Returns a listener promise, resolves with signed\n * up user's WebID.\n */\nSignup.prototype.signup = function signup (signupUrl) {\n signupUrl = signupUrl || this.config.signupEndpoint\n const width = this.config.signupWindowWidth\n const height = this.config.signupWindowHeight\n // set borders\n const leftPosition = (window.screen.width / 2) - ((width / 2) + 10)\n // set title and status bars\n const topPosition = (window.screen.height / 2) - ((height / 2) + 50)\n const windowTitle = 'Solid signup'\n const windowUrl = signupUrl + '?origin=' +\n encodeURIComponent(window.location.origin)\n const windowSpecs = 'resizable,scrollbars,status,width=' + width + ',height=' +\n height + ',left=' + leftPosition + ',top=' + topPosition\n window.open(windowUrl, windowTitle, windowSpecs)\n const self = this\n return new Promise(function (resolve) {\n self.listen()\n .then(function (webid) {\n return resolve(webid)\n })\n })\n}\n"],"mappings":"2CAWA,
|
|
1
|
+
{"version":3,"file":"signup.cjs.js","names":["defaultConfig","require_config_default","Signup","config","eventMethod","eventListener","u","e","user","resolve","reject","width","height","leftPosition","topPosition","windowUrl","signupUrl","windowSpecs","self","webid"],"sources":["../../src/signup/signup.js"],"sourcesContent":["import defaultConfig from './config-default'\n\n/**\n * Provides functionality for signing up with a Solid provider\n * @module signup\n */\n\n/**\n * Creates a Signup UI manager\n * @class\n */\nexport function Signup (config) {\n this.config = config || defaultConfig\n}\n\n/**\n * Sets up an event listener to monitor login messages from child window/iframe\n * @method listen\n * @return {Promise<String>} Event listener promise, resolves to user's WebID\n */\nSignup.prototype.listen = function listen () {\n const promise = new Promise(function (resolve, reject) {\n const eventMethod = window.addEventListener\n ? 'addEventListener'\n : 'attachEvent'\n const eventListener = window[eventMethod]\n const messageEvent = eventMethod === 'attachEvent'\n ? 'onmessage'\n : 'message'\n eventListener(messageEvent, function (e) {\n const u = e.data\n if (u.slice(0, 5) === 'User:') {\n const user = u.slice(5, u.length)\n if (user && user.length > 0 && user.slice(0, 4) === 'http') {\n return resolve(user)\n } else {\n return reject(user)\n }\n }\n }, true)\n })\n return promise\n}\n\n/**\n * Opens a signup popup window, sets up `listen()`.\n * @method signup\n * @static\n * @param signupUrl {String} Location of a Solid server for user signup.\n * @return {Promise<String>} Returns a listener promise, resolves with signed\n * up user's WebID.\n */\nSignup.prototype.signup = function signup (signupUrl) {\n signupUrl = signupUrl || this.config.signupEndpoint\n const width = this.config.signupWindowWidth\n const height = this.config.signupWindowHeight\n // set borders\n const leftPosition = (window.screen.width / 2) - ((width / 2) + 10)\n // set title and status bars\n const topPosition = (window.screen.height / 2) - ((height / 2) + 50)\n const windowTitle = 'Solid signup'\n const windowUrl = signupUrl + '?origin=' +\n encodeURIComponent(window.location.origin)\n const windowSpecs = 'resizable,scrollbars,status,width=' + width + ',height=' +\n height + ',left=' + leftPosition + ',top=' + topPosition\n window.open(windowUrl, windowTitle, windowSpecs)\n const self = this\n return new Promise(function (resolve) {\n self.listen()\n .then(function (webid) {\n return resolve(webid)\n })\n })\n}\n"],"mappings":"2CAWA,SAAgBE,EAAQ,EAAQ,CAC9B,KAAK,OAASC,GAAUH,EAAAA,OAC1B,CAOA,EAAO,UAAU,OAAS,UAAmB,CAqB3C,OAAO,IApBa,QAAQ,SAAU,EAAS,EAAQ,CACrD,IAAMI,EAAc,OAAO,iBACvB,mBACA,cACEC,EAAgB,OAAOD,GAI7BC,EAHqBD,IAAgB,cACjC,YACA,UACwB,SAAU,EAAG,CACvC,IAAME,EAAIC,EAAE,KACZ,GAAID,EAAE,MAAM,EAAG,CAAC,IAAM,QAAS,CAC7B,IAAME,EAAOF,EAAE,MAAM,EAAGA,EAAE,MAAM,EAI9B,OAHEE,GAAQA,EAAK,OAAS,GAAKA,EAAK,MAAM,EAAG,CAAC,IAAM,OAC3CC,EAAQD,CAAI,EAEZE,EAAOF,CAAI,CAEtB,CACF,EAAG,EAAI,CACT,CACa,CACf,EAUA,EAAO,UAAU,OAAS,SAAiB,EAAW,CACpD,IAAyB,KAAK,OAAO,eACrC,IAAMG,EAAQ,KAAK,OAAO,kBACpBC,EAAS,KAAK,OAAO,mBAErBC,EAAgB,OAAO,OAAO,MAAQ,GAAOF,EAAQ,EAAK,IAE1DG,EAAe,OAAO,OAAO,OAAS,GAAOF,EAAS,EAAK,IAE3DG,EAAYC,EAAY,WAC5B,mBAAmB,OAAO,SAAS,MAAM,EACrCC,EAAc,qCAAuCN,EAAQ,WACjEC,EAAS,SAAWC,EAAe,QAAUC,EAC/C,OAAO,KAAKC,EAAW,eAAaE,CAAW,EAC/C,IAAMC,EAAO,KACb,OAAO,IAAI,QAAQ,SAAU,EAAS,CACpCA,EAAK,OAAO,CAAC,CACV,KAAK,SAAU,EAAO,CACrB,OAAOT,EAAQU,CAAK,CACtB,CAAC,CACL,CAAC,CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signup.esm.js","names":["defaultConfig"],"sources":["../../src/signup/signup.js"],"sourcesContent":["import defaultConfig from './config-default'\n\n/**\n * Provides functionality for signing up with a Solid provider\n * @module signup\n */\n\n/**\n * Creates a Signup UI manager\n * @class\n */\nexport function Signup (config) {\n this.config = config || defaultConfig\n}\n\n/**\n * Sets up an event listener to monitor login messages from child window/iframe\n * @method listen\n * @return {Promise<String>} Event listener promise, resolves to user's WebID\n */\nSignup.prototype.listen = function listen () {\n const promise = new Promise(function (resolve, reject) {\n const eventMethod = window.addEventListener\n ? 'addEventListener'\n : 'attachEvent'\n const eventListener = window[eventMethod]\n const messageEvent = eventMethod === 'attachEvent'\n ? 'onmessage'\n : 'message'\n eventListener(messageEvent, function (e) {\n const u = e.data\n if (u.slice(0, 5) === 'User:') {\n const user = u.slice(5, u.length)\n if (user && user.length > 0 && user.slice(0, 4) === 'http') {\n return resolve(user)\n } else {\n return reject(user)\n }\n }\n }, true)\n })\n return promise\n}\n\n/**\n * Opens a signup popup window, sets up `listen()`.\n * @method signup\n * @static\n * @param signupUrl {String} Location of a Solid server for user signup.\n * @return {Promise<String>} Returns a listener promise, resolves with signed\n * up user's WebID.\n */\nSignup.prototype.signup = function signup (signupUrl) {\n signupUrl = signupUrl || this.config.signupEndpoint\n const width = this.config.signupWindowWidth\n const height = this.config.signupWindowHeight\n // set borders\n const leftPosition = (window.screen.width / 2) - ((width / 2) + 10)\n // set title and status bars\n const topPosition = (window.screen.height / 2) - ((height / 2) + 50)\n const windowTitle = 'Solid signup'\n const windowUrl = signupUrl + '?origin=' +\n encodeURIComponent(window.location.origin)\n const windowSpecs = 'resizable,scrollbars,status,width=' + width + ',height=' +\n height + ',left=' + leftPosition + ',top=' + topPosition\n window.open(windowUrl, windowTitle, windowSpecs)\n const self = this\n return new Promise(function (resolve) {\n self.listen()\n .then(function (webid) {\n return resolve(webid)\n })\n })\n}\n"],"mappings":";;AAWA,
|
|
1
|
+
{"version":3,"file":"signup.esm.js","names":["defaultConfig","config_default_default","Signup","config","eventMethod","eventListener","u","e","user","resolve","reject","width","height","leftPosition","topPosition","windowUrl","signupUrl","windowSpecs","self","webid"],"sources":["../../src/signup/signup.js"],"sourcesContent":["import defaultConfig from './config-default'\n\n/**\n * Provides functionality for signing up with a Solid provider\n * @module signup\n */\n\n/**\n * Creates a Signup UI manager\n * @class\n */\nexport function Signup (config) {\n this.config = config || defaultConfig\n}\n\n/**\n * Sets up an event listener to monitor login messages from child window/iframe\n * @method listen\n * @return {Promise<String>} Event listener promise, resolves to user's WebID\n */\nSignup.prototype.listen = function listen () {\n const promise = new Promise(function (resolve, reject) {\n const eventMethod = window.addEventListener\n ? 'addEventListener'\n : 'attachEvent'\n const eventListener = window[eventMethod]\n const messageEvent = eventMethod === 'attachEvent'\n ? 'onmessage'\n : 'message'\n eventListener(messageEvent, function (e) {\n const u = e.data\n if (u.slice(0, 5) === 'User:') {\n const user = u.slice(5, u.length)\n if (user && user.length > 0 && user.slice(0, 4) === 'http') {\n return resolve(user)\n } else {\n return reject(user)\n }\n }\n }, true)\n })\n return promise\n}\n\n/**\n * Opens a signup popup window, sets up `listen()`.\n * @method signup\n * @static\n * @param signupUrl {String} Location of a Solid server for user signup.\n * @return {Promise<String>} Returns a listener promise, resolves with signed\n * up user's WebID.\n */\nSignup.prototype.signup = function signup (signupUrl) {\n signupUrl = signupUrl || this.config.signupEndpoint\n const width = this.config.signupWindowWidth\n const height = this.config.signupWindowHeight\n // set borders\n const leftPosition = (window.screen.width / 2) - ((width / 2) + 10)\n // set title and status bars\n const topPosition = (window.screen.height / 2) - ((height / 2) + 50)\n const windowTitle = 'Solid signup'\n const windowUrl = signupUrl + '?origin=' +\n encodeURIComponent(window.location.origin)\n const windowSpecs = 'resizable,scrollbars,status,width=' + width + ',height=' +\n height + ',left=' + leftPosition + ',top=' + topPosition\n window.open(windowUrl, windowTitle, windowSpecs)\n const self = this\n return new Promise(function (resolve) {\n self.listen()\n .then(function (webid) {\n return resolve(webid)\n })\n })\n}\n"],"mappings":";;AAWA,SAAgBE,EAAQ,GAAQ;CAC9B,KAAK,SAASC,KAAUH;AAC1B;AAOA,EAAO,UAAU,SAAS,WAAmB;CAqB3C,OAAO,IApBa,QAAQ,SAAU,GAAS,GAAQ;EACrD,IAAMI,IAAc,OAAO,mBACvB,qBACA,eACEC,IAAgB,OAAOD;EAI7B,EAHqBA,MAAgB,gBACjC,cACA,WACwB,SAAU,GAAG;GACvC,IAAME,IAAIC,EAAE;GACZ,IAAID,EAAE,MAAM,GAAG,CAAC,MAAM,SAAS;IAC7B,IAAME,IAAOF,EAAE,MAAM,GAAGA,EAAE,MAAM;IAI9B,OAHEE,KAAQA,EAAK,SAAS,KAAKA,EAAK,MAAM,GAAG,CAAC,MAAM,SAC3CC,EAAQD,CAAI,IAEZE,EAAOF,CAAI;GAEtB;EACF,GAAG,EAAI;CACT,CACa;AACf,GAUA,EAAO,UAAU,SAAS,SAAiB,GAAW;CACpD,MAAyB,KAAK,OAAO;CACrC,IAAMG,IAAQ,KAAK,OAAO,mBACpBC,IAAS,KAAK,OAAO,oBAErBC,IAAgB,OAAO,OAAO,QAAQ,KAAOF,IAAQ,IAAK,KAE1DG,IAAe,OAAO,OAAO,SAAS,KAAOF,IAAS,IAAK,KAE3DG,IAAYC,IAAY,aAC5B,mBAAmB,OAAO,SAAS,MAAM,GACrCC,IAAc,uCAAuCN,IAAQ,aACjEC,IAAS,WAAWC,IAAe,UAAUC;CAC/C,OAAO,KAAKC,GAAW,gBAAaE,CAAW;CAC/C,IAAMC,IAAO;CACb,OAAO,IAAI,QAAQ,SAAU,GAAS;EACpC,EAAK,OAAO,CAAC,CACV,KAAK,SAAU,GAAO;GACrB,OAAOT,EAAQU,CAAK;EACtB,CAAC;CACL,CAAC;AACH"}
|