├── .changeset ├── README.md └── config.json ├── .gitignore ├── README.md ├── eslint.config.mjs ├── init-app.sh ├── locale.mjs ├── package.json ├── packages ├── _tpl │ ├── _package.json │ ├── demo │ │ ├── demo-location.ts │ │ ├── index.html │ │ ├── lit-hmr.ts │ │ └── redefine-custom-elements.ts │ ├── locale.mjs │ ├── public │ │ ├── README.md │ │ ├── docs │ │ │ ├── custom-elements.json │ │ │ └── custom-elements.md │ │ ├── index.css │ │ ├── logo.svg │ │ ├── robots.txt │ │ ├── theme.css │ │ └── variables.css │ ├── tsconfig.json │ ├── types.ts │ ├── vite-plugin-lit-hmr.ts │ └── vite.config.js ├── access │ ├── add-role.ts │ ├── entity.ts │ ├── index.ts │ ├── internal │ │ ├── add-role.ts │ │ ├── context-user-access-mixin.ts │ │ ├── entity.ts │ │ ├── hasUserRole.ts │ │ ├── set-role.ts │ │ └── usersFromData.ts │ ├── package.json │ ├── set-role.ts │ ├── tsconfig.json │ └── vite.config.js ├── actor │ ├── README.md │ ├── actor-actions.ts │ ├── actor.ts │ ├── context-actor.ts │ ├── package.json │ ├── registry.ts │ ├── src │ │ ├── actor-actions.ts │ │ ├── actor.ts │ │ ├── context-actor.ts │ │ ├── registry.ts │ │ └── types.ts │ ├── tsconfig.json │ └── valueToKey.ts ├── cmp │ ├── accordion │ │ └── accordion.ts │ ├── advanced-switch │ │ └── advanced-switch.ts │ ├── audio │ │ ├── audio.ts │ │ ├── internal │ │ │ ├── audio-controller.ts │ │ │ ├── player-controller.ts │ │ │ ├── speech-controller.ts │ │ │ └── types.ts │ │ └── player-controller.ts │ ├── avatar │ │ ├── avatar.test.ts │ │ ├── avatar.ts │ │ └── distributeUniformly.ts │ ├── breadcrumb │ │ └── breadcrumb.ts │ ├── button │ │ ├── button-override.ts │ │ ├── button.ts │ │ ├── small-outlined-button.ts │ │ └── small-text-button.ts │ ├── card │ │ └── card.ts │ ├── chip │ │ └── status.ts │ ├── container │ │ ├── expansion-panel.ts │ │ └── widget-container.ts │ ├── copy │ │ ├── copy.ts │ │ └── internal │ │ │ └── copy.ts │ ├── counter │ │ └── animated-counter.ts │ ├── datetime │ │ └── format.ts │ ├── dialog │ │ ├── dialog-download.ts │ │ ├── downloadCSV.ts │ │ ├── downloadJSON.ts │ │ ├── event.ts │ │ └── internal │ │ │ └── dialog-download.ts │ ├── dom │ │ ├── README.md │ │ ├── internal │ │ │ ├── observer.test.ts │ │ │ └── observer.ts │ │ └── observer.ts │ ├── email │ │ ├── email-dialog.ts │ │ ├── email-display.ts │ │ ├── emailRenderer.ts │ │ ├── promise-email-dialog-mixin.ts │ │ └── types.ts │ ├── fab │ │ ├── fab.ts │ │ ├── filled-fab.ts │ │ ├── internal │ │ │ ├── fab.ts │ │ │ ├── filled-styles.ts │ │ │ ├── outlined-styles.ts │ │ │ └── styles.ts │ │ └── outlined-fab.ts │ ├── feedback │ │ ├── README.md │ │ ├── event.ts │ │ ├── feedback-mixin.ts │ │ ├── feedback.ts │ │ ├── locale.mjs │ │ └── src │ │ │ ├── button.ts │ │ │ ├── dialog.ts │ │ │ ├── feedback-locale.mjs │ │ │ ├── feedback-mixin.ts │ │ │ ├── feedback.ts │ │ │ └── feedbackState.ts │ ├── fetch │ │ └── button-fetch.ts │ ├── field │ │ ├── checkbox-field.ts │ │ ├── checkbox │ │ │ ├── filled-checkbox.ts │ │ │ ├── filledStyles.ts │ │ │ ├── input-checkbox.ts │ │ │ ├── internal │ │ │ │ ├── checkbox.test.ts │ │ │ │ ├── checkbox.ts │ │ │ │ ├── filled-checkbox.ts │ │ │ │ ├── input-checkbox.ts │ │ │ │ └── outlined-checkbox.ts │ │ │ ├── outlined-checkbox.ts │ │ │ ├── outlinedStyles.ts │ │ │ └── sharedStyles.ts │ │ ├── choice-checkbox.ts │ │ ├── choice-order.ts │ │ ├── choice-radio.ts │ │ ├── choice-star.ts │ │ ├── choice │ │ │ ├── checkbox │ │ │ │ ├── filled-checkbox.ts │ │ │ │ ├── filledStyles.ts │ │ │ │ ├── internal │ │ │ │ │ ├── checkbox.test.ts │ │ │ │ │ ├── checkbox.ts │ │ │ │ │ ├── filled-checkbox.ts │ │ │ │ │ ├── outlined-checkbox.ts │ │ │ │ │ └── shared-styles.ts │ │ │ │ ├── outlined-checkbox.ts │ │ │ │ └── outlinedStyles.ts │ │ │ ├── choice.ts │ │ │ ├── illustrationMixin.ts │ │ │ ├── list-item.ts │ │ │ ├── list.ts │ │ │ ├── multiMixin.ts │ │ │ ├── multiValidator.ts │ │ │ ├── order │ │ │ │ ├── filled-order.ts │ │ │ │ ├── filledStyles.ts │ │ │ │ ├── internal │ │ │ │ │ ├── filled-order.ts │ │ │ │ │ ├── locale.mjs │ │ │ │ │ ├── order.test.ts │ │ │ │ │ ├── order.ts │ │ │ │ │ ├── orderStyles.ts │ │ │ │ │ └── outlined-order.ts │ │ │ │ ├── outlined-order.ts │ │ │ │ └── outlinedStyles.ts │ │ │ ├── radio │ │ │ │ ├── filled-radio.ts │ │ │ │ ├── filledStyles.ts │ │ │ │ ├── internal │ │ │ │ │ ├── filled-radio.ts │ │ │ │ │ ├── outlined-radio.ts │ │ │ │ │ ├── radio.test.ts │ │ │ │ │ ├── radio.ts │ │ │ │ │ └── shared-styles.ts │ │ │ │ ├── outlined-radio.ts │ │ │ │ └── outlinedStyles.ts │ │ │ ├── readaloud-locale.mjs │ │ │ ├── singleMixin.ts │ │ │ ├── singleValidator.ts │ │ │ ├── specifyChangedDetail.ts │ │ │ ├── star │ │ │ │ ├── filled-star.ts │ │ │ │ ├── filledStyles.ts │ │ │ │ ├── internal │ │ │ │ │ ├── filled-star.ts │ │ │ │ │ ├── outlined-star.ts │ │ │ │ │ ├── star.test.ts │ │ │ │ │ ├── star.ts │ │ │ │ │ └── starStyles.ts │ │ │ │ ├── outlined-star.ts │ │ │ │ └── outlinedStyles.ts │ │ │ ├── styles.ts │ │ │ └── types.ts │ │ ├── compat │ │ │ └── compat-mixin.ts │ │ ├── field-override.ts │ │ ├── field │ │ │ ├── filled-field.ts │ │ │ ├── internal │ │ │ │ ├── a11y-field-mixin.ts │ │ │ │ ├── filled-field.ts │ │ │ │ ├── outlined-field.ts │ │ │ │ └── supporting-text-styles.ts │ │ │ └── outlined-field.ts │ │ ├── generic │ │ │ ├── generic.test.ts │ │ │ ├── generic.ts │ │ │ └── styles.ts │ │ ├── locale.mjs │ │ ├── md-droppable-editor.ts │ │ ├── md-editor.ts │ │ ├── md-lif.ts │ │ ├── md.ts │ │ ├── md │ │ │ ├── droppable-styles.ts │ │ │ ├── md-droppable-editor.ts │ │ │ ├── md-editor.ts │ │ │ ├── md-lif.ts │ │ │ ├── md.ts │ │ │ └── types.ts │ │ ├── mixin │ │ │ └── noAutoValidateMixin.ts │ │ ├── radio │ │ │ └── radio.ts │ │ ├── record-field.ts │ │ ├── record │ │ │ ├── RecordEvent.ts │ │ │ ├── filled-record-field.ts │ │ │ ├── filledStyles.ts │ │ │ ├── input-record.ts │ │ │ ├── internal │ │ │ │ ├── filled-record-field.ts │ │ │ │ ├── input-record.ts │ │ │ │ ├── outlined-record-field.ts │ │ │ │ ├── record-field.test.ts │ │ │ │ ├── record-field.ts │ │ │ │ ├── record-locale.mjs │ │ │ │ ├── record.test.ts │ │ │ │ ├── record.ts │ │ │ │ └── recordValidator.ts │ │ │ ├── outlined-record-field.ts │ │ │ ├── outlinedStyles.ts │ │ │ ├── record-styles.ts │ │ │ ├── record.ts │ │ │ ├── releaseNotes │ │ │ │ ├── assets │ │ │ │ │ ├── voice-a11y-menu.png │ │ │ │ │ ├── voice-activate.png │ │ │ │ │ ├── voice-distribute.png │ │ │ │ │ ├── voice-edit-mode.png │ │ │ │ │ ├── voice-listen.png │ │ │ │ │ ├── voice-narrow.png │ │ │ │ │ ├── voice-pause.png │ │ │ │ │ ├── voice-record.png │ │ │ │ │ ├── voice-start-again.png │ │ │ │ │ └── voice-test.png │ │ │ │ └── launch.md │ │ │ └── stream.ts │ │ ├── select-input.ts │ │ ├── select.ts │ │ ├── select │ │ │ ├── filled-select-input.ts │ │ │ ├── filled-select.ts │ │ │ ├── filledStyles.ts │ │ │ ├── internal │ │ │ │ ├── filled-select-input.ts │ │ │ │ ├── filled-select.ts │ │ │ │ ├── outlined-select-input.ts │ │ │ │ ├── outlined-select.ts │ │ │ │ ├── select-input.ts │ │ │ │ ├── select.test.ts │ │ │ │ ├── select.ts │ │ │ │ └── selectInputStyles.ts │ │ │ ├── outlined-select-input.ts │ │ │ ├── outlined-select.ts │ │ │ └── outlinedStyles.ts │ │ ├── slider-field.ts │ │ ├── slider-range-field.ts │ │ ├── slider │ │ │ ├── filled-slider.ts │ │ │ ├── filledStyles.ts │ │ │ ├── input-slider.ts │ │ │ ├── internal │ │ │ │ ├── filled-slider.ts │ │ │ │ ├── input-slider.ts │ │ │ │ ├── outlined-slider.ts │ │ │ │ ├── slider.test.ts │ │ │ │ ├── slider.ts │ │ │ │ └── sliderValidator.ts │ │ │ ├── outlined-slider.ts │ │ │ ├── outlinedStyles.ts │ │ │ ├── releaseNotes │ │ │ │ ├── assets │ │ │ │ │ ├── slider-edit.png │ │ │ │ │ ├── slider-range.png │ │ │ │ │ ├── slider-select-range.png │ │ │ │ │ └── slider-simple.png │ │ │ │ └── launch.md │ │ │ └── sharedStyles.ts │ │ ├── switch-field.ts │ │ ├── switch │ │ │ ├── filled-switch.ts │ │ │ ├── filledStyles.ts │ │ │ ├── input-switch.ts │ │ │ ├── internal │ │ │ │ ├── filled-switch.ts │ │ │ │ ├── input-switch.ts │ │ │ │ ├── outline-switch.ts │ │ │ │ ├── switch.test.ts │ │ │ │ └── switch.ts │ │ │ ├── outlined-checkbox.ts │ │ │ ├── outlinedStyles.ts │ │ │ └── sharedStyles.ts │ │ ├── text-field.ts │ │ ├── textfield │ │ │ ├── filled-text-field.ts │ │ │ ├── filledStyles.ts │ │ │ ├── internal │ │ │ │ ├── filled-text-field.ts │ │ │ │ ├── outlined-text-field.ts │ │ │ │ └── text-field.ts │ │ │ ├── outlined-text-field.ts │ │ │ └── outlinedStyles.ts │ │ ├── upload.ts │ │ └── upload │ │ │ ├── filled-upload.ts │ │ │ ├── filledStyles.ts │ │ │ ├── internal │ │ │ ├── filled-upload.ts │ │ │ ├── outlined-upload.ts │ │ │ ├── upload.ts │ │ │ └── uploadValidator.ts │ │ │ ├── outlined-upload.ts │ │ │ ├── outlinedStyles.ts │ │ │ └── sharedStyles.ts │ ├── icon-button │ │ └── star.ts │ ├── icon │ │ ├── icon.ts │ │ └── internal │ │ │ ├── icon-styles.ts │ │ │ └── icon.ts │ ├── index.html │ ├── list │ │ ├── internal │ │ │ └── illustrationVariantStyles.ts │ │ ├── list-item.ts │ │ └── list.ts │ ├── lit-hmr.ts │ ├── locale.mjs │ ├── media │ │ ├── gallery.ts │ │ ├── image.ts │ │ ├── lazy-image.ts │ │ ├── select-base.ts │ │ ├── select-firebase.ts │ │ └── select.ts │ ├── mixin │ │ ├── context-accessibility-mixin.ts │ │ ├── local-storage-persist-mixin.ts │ │ └── resize-controller-mixin.ts │ ├── package.json │ ├── process │ │ ├── internal │ │ │ ├── process._test.ts │ │ │ └── process.ts │ │ ├── process.ts │ │ └── styles.ts │ ├── public │ │ ├── README.md │ │ ├── docs │ │ │ ├── custom-elements.json │ │ │ └── custom-elements.md │ │ ├── index.css │ │ ├── logo.svg │ │ ├── robots.txt │ │ ├── theme.css │ │ └── variables.css │ ├── redefine-custom-elements.ts │ ├── renderer │ │ └── date.ts │ ├── role │ │ └── internal │ │ │ └── README.md │ ├── slot │ │ └── transition.ts │ ├── snackbar │ │ └── snackbar.ts │ ├── tabs │ │ ├── internal │ │ │ ├── closable-tab-mixin.ts │ │ │ └── styles.ts │ │ ├── primary-tab-closable.ts │ │ └── secondary-tab-closable.ts │ ├── toolbar │ │ ├── README.md │ │ └── toolbar.ts │ ├── tooltip │ │ ├── README.md │ │ └── tooltip.ts │ ├── tsconfig.json │ ├── types.ts │ ├── upload │ │ ├── document-firebase.ts │ │ ├── document.ts │ │ ├── image-firebase.ts │ │ ├── image.ts │ │ ├── internals │ │ │ ├── database-mixin.ts │ │ │ ├── firestore-mixin.ts │ │ │ ├── image-mixin.ts │ │ │ ├── json-database-mixin.ts │ │ │ ├── json-firestore-mixin.ts │ │ │ ├── json-mixin.ts │ │ │ ├── normalizeFile.ts │ │ │ └── storage-mixin.ts │ │ ├── json-firebase.ts │ │ └── json.ts │ ├── user │ │ ├── README.md │ │ ├── card.ts │ │ ├── img-list.ts │ │ ├── img.ts │ │ ├── internal │ │ │ ├── card.ts │ │ │ ├── img-list.ts │ │ │ ├── img.ts │ │ │ ├── invite-list.ts │ │ │ ├── list.ts │ │ │ ├── name.ts │ │ │ ├── quote.ts │ │ │ ├── search.ts │ │ │ ├── select-item.ts │ │ │ ├── spotlight.ts │ │ │ ├── thread.ts │ │ │ ├── types.ts │ │ │ ├── user-item-mixin.ts │ │ │ └── user-mixin.ts │ │ ├── invite-list.ts │ │ ├── list.ts │ │ ├── name.ts │ │ ├── quote.ts │ │ ├── search.ts │ │ ├── select-item.ts │ │ ├── spotlight.ts │ │ └── thread.ts │ ├── vite-plugin-lit-hmr.ts │ ├── vite.config.js │ ├── wrapper │ │ └── print-wrapper.ts │ └── youtube │ │ ├── youtube-id.ts │ │ └── youtube.ts ├── entity │ ├── LabelE.ts │ ├── LabelM.ts │ ├── README.md │ ├── demo │ │ ├── demo-location.ts │ │ ├── index.html │ │ ├── lit-hmr.ts │ │ └── redefine-custom-elements.ts │ ├── locale.mjs │ ├── package.json │ ├── public │ │ ├── README.md │ │ ├── docs │ │ │ ├── custom-elements.json │ │ │ └── custom-elements.md │ │ ├── index.css │ │ ├── logo.svg │ │ ├── robots.txt │ │ ├── theme.css │ │ └── variables.css │ ├── tsconfig.json │ ├── types.ts │ ├── vite-plugin-lit-hmr.ts │ └── vite.config.js ├── form │ ├── context-form.ts │ ├── demo │ │ ├── demo-form.ts │ │ ├── index.html │ │ ├── lit-hmr.ts │ │ └── redefine-custom-elements.ts │ ├── form.ts │ ├── index.ts │ ├── locale.mjs │ ├── package.json │ ├── public │ │ ├── NOTES.md │ │ ├── README.md │ │ ├── docs │ │ │ ├── custom-elements.json │ │ │ └── custom-elements.md │ │ ├── index.css │ │ ├── logo.svg │ │ ├── robots.txt │ │ ├── theme.css │ │ └── variables.css │ ├── src │ │ ├── context-form.ts │ │ ├── form.test.ts │ │ ├── form.ts │ │ ├── types.ts │ │ └── virtual-field.ts │ ├── tsconfig.json │ ├── vite-plugin-lit-hmr.ts │ └── vite.config.js ├── location │ ├── continent-country.ts │ ├── continent.ts │ ├── country.ts │ ├── demo │ │ ├── demo-location.ts │ │ ├── index.html │ │ ├── lit-hmr.ts │ │ └── redefine-custom-elements.ts │ ├── locale.mjs │ ├── package.json │ ├── public │ │ ├── README.md │ │ ├── docs │ │ │ ├── custom-elements.json │ │ │ └── custom-elements.md │ │ ├── flags │ │ │ ├── 1x1 │ │ │ │ ├── abw.svg │ │ │ │ ├── afg.svg │ │ │ │ ├── ago.svg │ │ │ │ ├── aia.svg │ │ │ │ ├── ala.svg │ │ │ │ ├── alb.svg │ │ │ │ ├── and.svg │ │ │ │ ├── are.svg │ │ │ │ ├── arg.svg │ │ │ │ ├── arm.svg │ │ │ │ ├── asm.svg │ │ │ │ ├── ata.svg │ │ │ │ ├── atf.svg │ │ │ │ ├── atg.svg │ │ │ │ ├── aus.svg │ │ │ │ ├── aut.svg │ │ │ │ ├── aze.svg │ │ │ │ ├── bdi.svg │ │ │ │ ├── bel.svg │ │ │ │ ├── ben.svg │ │ │ │ ├── bes.svg │ │ │ │ ├── bfa.svg │ │ │ │ ├── bgd.svg │ │ │ │ ├── bgr.svg │ │ │ │ ├── bhr.svg │ │ │ │ ├── bhs.svg │ │ │ │ ├── bih.svg │ │ │ │ ├── blm.svg │ │ │ │ ├── blr.svg │ │ │ │ ├── blz.svg │ │ │ │ ├── bmu.svg │ │ │ │ ├── bol.svg │ │ │ │ ├── bra.svg │ │ │ │ ├── brb.svg │ │ │ │ ├── brn.svg │ │ │ │ ├── btn.svg │ │ │ │ ├── bvt.svg │ │ │ │ ├── bwa.svg │ │ │ │ ├── caf.svg │ │ │ │ ├── can.svg │ │ │ │ ├── cat.svg │ │ │ │ ├── cck.svg │ │ │ │ ├── che.svg │ │ │ │ ├── chl.svg │ │ │ │ ├── chn.svg │ │ │ │ ├── civ.svg │ │ │ │ ├── cmr.svg │ │ │ │ ├── cod.svg │ │ │ │ ├── cog.svg │ │ │ │ ├── cok.svg │ │ │ │ ├── col.svg │ │ │ │ ├── com.svg │ │ │ │ ├── cpv.svg │ │ │ │ ├── cri.svg │ │ │ │ ├── cub.svg │ │ │ │ ├── cuw.svg │ │ │ │ ├── cxr.svg │ │ │ │ ├── cym.svg │ │ │ │ ├── cyp.svg │ │ │ │ ├── cze.svg │ │ │ │ ├── deu.svg │ │ │ │ ├── dji.svg │ │ │ │ ├── dma.svg │ │ │ │ ├── dnk.svg │ │ │ │ ├── dom.svg │ │ │ │ ├── dza.svg │ │ │ │ ├── ecu.svg │ │ │ │ ├── egy.svg │ │ │ │ ├── eng.svg │ │ │ │ ├── eri.svg │ │ │ │ ├── esh.svg │ │ │ │ ├── esp.svg │ │ │ │ ├── est.svg │ │ │ │ ├── eth.svg │ │ │ │ ├── eun.svg │ │ │ │ ├── fin.svg │ │ │ │ ├── fji.svg │ │ │ │ ├── flk.svg │ │ │ │ ├── fra.svg │ │ │ │ ├── fro.svg │ │ │ │ ├── fsm.svg │ │ │ │ ├── gab.svg │ │ │ │ ├── gbr.svg │ │ │ │ ├── geo.svg │ │ │ │ ├── ggy.svg │ │ │ │ ├── gha.svg │ │ │ │ ├── gib.svg │ │ │ │ ├── gin.svg │ │ │ │ ├── glp.svg │ │ │ │ ├── gmb.svg │ │ │ │ ├── gnb.svg │ │ │ │ ├── gnq.svg │ │ │ │ ├── grc.svg │ │ │ │ ├── grd.svg │ │ │ │ ├── grl.svg │ │ │ │ ├── gtm.svg │ │ │ │ ├── guf.svg │ │ │ │ ├── gum.svg │ │ │ │ ├── guy.svg │ │ │ │ ├── hkg.svg │ │ │ │ ├── hmd.svg │ │ │ │ ├── hnd.svg │ │ │ │ ├── hrv.svg │ │ │ │ ├── hti.svg │ │ │ │ ├── hun.svg │ │ │ │ ├── idn.svg │ │ │ │ ├── imn.svg │ │ │ │ ├── ind.svg │ │ │ │ ├── iot.svg │ │ │ │ ├── irl.svg │ │ │ │ ├── irn.svg │ │ │ │ ├── irq.svg │ │ │ │ ├── isl.svg │ │ │ │ ├── isr.svg │ │ │ │ ├── ita.svg │ │ │ │ ├── jam.svg │ │ │ │ ├── jey.svg │ │ │ │ ├── jor.svg │ │ │ │ ├── jpn.svg │ │ │ │ ├── kaz.svg │ │ │ │ ├── ken.svg │ │ │ │ ├── kgz.svg │ │ │ │ ├── khm.svg │ │ │ │ ├── kir.svg │ │ │ │ ├── kna.svg │ │ │ │ ├── kor.svg │ │ │ │ ├── kos.svg │ │ │ │ ├── kwt.svg │ │ │ │ ├── lao.svg │ │ │ │ ├── lbn.svg │ │ │ │ ├── lbr.svg │ │ │ │ ├── lby.svg │ │ │ │ ├── lca.svg │ │ │ │ ├── lie.svg │ │ │ │ ├── lka.svg │ │ │ │ ├── lso.svg │ │ │ │ ├── ltu.svg │ │ │ │ ├── lux.svg │ │ │ │ ├── lva.svg │ │ │ │ ├── mac.svg │ │ │ │ ├── maf.svg │ │ │ │ ├── mar.svg │ │ │ │ ├── mco.svg │ │ │ │ ├── mda.svg │ │ │ │ ├── mdg.svg │ │ │ │ ├── mdv.svg │ │ │ │ ├── mex.svg │ │ │ │ ├── mhl.svg │ │ │ │ ├── mkd.svg │ │ │ │ ├── mli.svg │ │ │ │ ├── mlt.svg │ │ │ │ ├── mmr.svg │ │ │ │ ├── mne.svg │ │ │ │ ├── mng.svg │ │ │ │ ├── mnp.svg │ │ │ │ ├── moz.svg │ │ │ │ ├── mrt.svg │ │ │ │ ├── msr.svg │ │ │ │ ├── mtq.svg │ │ │ │ ├── mus.svg │ │ │ │ ├── mwi.svg │ │ │ │ ├── mys.svg │ │ │ │ ├── myt.svg │ │ │ │ ├── nam.svg │ │ │ │ ├── ncl.svg │ │ │ │ ├── ner.svg │ │ │ │ ├── nfk.svg │ │ │ │ ├── nga.svg │ │ │ │ ├── nic.svg │ │ │ │ ├── nir.svg │ │ │ │ ├── niu.svg │ │ │ │ ├── nld.svg │ │ │ │ ├── nor.svg │ │ │ │ ├── npl.svg │ │ │ │ ├── nru.svg │ │ │ │ ├── nzl.svg │ │ │ │ ├── omn.svg │ │ │ │ ├── pak.svg │ │ │ │ ├── pan.svg │ │ │ │ ├── pcn.svg │ │ │ │ ├── per.svg │ │ │ │ ├── phl.svg │ │ │ │ ├── plw.svg │ │ │ │ ├── png.svg │ │ │ │ ├── pol.svg │ │ │ │ ├── pri.svg │ │ │ │ ├── prk.svg │ │ │ │ ├── prt.svg │ │ │ │ ├── pry.svg │ │ │ │ ├── pse.svg │ │ │ │ ├── pyf.svg │ │ │ │ ├── qat.svg │ │ │ │ ├── reu.svg │ │ │ │ ├── rou.svg │ │ │ │ ├── rus.svg │ │ │ │ ├── rwa.svg │ │ │ │ ├── sau.svg │ │ │ │ ├── sco.svg │ │ │ │ ├── sdn.svg │ │ │ │ ├── sen.svg │ │ │ │ ├── sgp.svg │ │ │ │ ├── sgs.svg │ │ │ │ ├── shn.svg │ │ │ │ ├── sjm.svg │ │ │ │ ├── slb.svg │ │ │ │ ├── sle.svg │ │ │ │ ├── slv.svg │ │ │ │ ├── smr.svg │ │ │ │ ├── som.svg │ │ │ │ ├── spm.svg │ │ │ │ ├── srb.svg │ │ │ │ ├── ssd.svg │ │ │ │ ├── stp.svg │ │ │ │ ├── sun.svg │ │ │ │ ├── sur.svg │ │ │ │ ├── svk.svg │ │ │ │ ├── svn.svg │ │ │ │ ├── swe.svg │ │ │ │ ├── swz.svg │ │ │ │ ├── sxm.svg │ │ │ │ ├── syc.svg │ │ │ │ ├── syr.svg │ │ │ │ ├── tca.svg │ │ │ │ ├── tcd.svg │ │ │ │ ├── tgo.svg │ │ │ │ ├── tha.svg │ │ │ │ ├── tjk.svg │ │ │ │ ├── tkl.svg │ │ │ │ ├── tkm.svg │ │ │ │ ├── tls.svg │ │ │ │ ├── ton.svg │ │ │ │ ├── tto.svg │ │ │ │ ├── tun.svg │ │ │ │ ├── tur.svg │ │ │ │ ├── tuv.svg │ │ │ │ ├── twn.svg │ │ │ │ ├── tza.svg │ │ │ │ ├── uga.svg │ │ │ │ ├── ukr.svg │ │ │ │ ├── umi.svg │ │ │ │ ├── ury.svg │ │ │ │ ├── usa.svg │ │ │ │ ├── uzb.svg │ │ │ │ ├── vat.svg │ │ │ │ ├── vct.svg │ │ │ │ ├── ven.svg │ │ │ │ ├── vgb.svg │ │ │ │ ├── vir.svg │ │ │ │ ├── vnm.svg │ │ │ │ ├── vut.svg │ │ │ │ ├── wal.svg │ │ │ │ ├── wlf.svg │ │ │ │ ├── wsm.svg │ │ │ │ ├── yem.svg │ │ │ │ ├── zaf.svg │ │ │ │ ├── zmb.svg │ │ │ │ └── zwe.svg │ │ │ └── 4x3 │ │ │ │ ├── abw.svg │ │ │ │ ├── afg.svg │ │ │ │ ├── ago.svg │ │ │ │ ├── aia.svg │ │ │ │ ├── ala.svg │ │ │ │ ├── alb.svg │ │ │ │ ├── and.svg │ │ │ │ ├── are.svg │ │ │ │ ├── arg.svg │ │ │ │ ├── arm.svg │ │ │ │ ├── asm.svg │ │ │ │ ├── ata.svg │ │ │ │ ├── atf.svg │ │ │ │ ├── atg.svg │ │ │ │ ├── aus.svg │ │ │ │ ├── aut.svg │ │ │ │ ├── aze.svg │ │ │ │ ├── bdi.svg │ │ │ │ ├── bel.svg │ │ │ │ ├── ben.svg │ │ │ │ ├── bes.svg │ │ │ │ ├── bfa.svg │ │ │ │ ├── bgd.svg │ │ │ │ ├── bgr.svg │ │ │ │ ├── bhr.svg │ │ │ │ ├── bhs.svg │ │ │ │ ├── bih.svg │ │ │ │ ├── blm.svg │ │ │ │ ├── blr.svg │ │ │ │ ├── blz.svg │ │ │ │ ├── bmu.svg │ │ │ │ ├── bol.svg │ │ │ │ ├── bra.svg │ │ │ │ ├── brb.svg │ │ │ │ ├── brn.svg │ │ │ │ ├── btn.svg │ │ │ │ ├── bvt.svg │ │ │ │ ├── bwa.svg │ │ │ │ ├── caf.svg │ │ │ │ ├── can.svg │ │ │ │ ├── cat.svg │ │ │ │ ├── cck.svg │ │ │ │ ├── che.svg │ │ │ │ ├── chl.svg │ │ │ │ ├── chn.svg │ │ │ │ ├── civ.svg │ │ │ │ ├── cmr.svg │ │ │ │ ├── cod.svg │ │ │ │ ├── cog.svg │ │ │ │ ├── cok.svg │ │ │ │ ├── col.svg │ │ │ │ ├── com.svg │ │ │ │ ├── cpv.svg │ │ │ │ ├── cri.svg │ │ │ │ ├── cub.svg │ │ │ │ ├── cuw.svg │ │ │ │ ├── cxr.svg │ │ │ │ ├── cym.svg │ │ │ │ ├── cyp.svg │ │ │ │ ├── cze.svg │ │ │ │ ├── deu.svg │ │ │ │ ├── dji.svg │ │ │ │ ├── dma.svg │ │ │ │ ├── dnk.svg │ │ │ │ ├── dom.svg │ │ │ │ ├── dza.svg │ │ │ │ ├── ecu.svg │ │ │ │ ├── egy.svg │ │ │ │ ├── eng.svg │ │ │ │ ├── eri.svg │ │ │ │ ├── esh.svg │ │ │ │ ├── esp.svg │ │ │ │ ├── est.svg │ │ │ │ ├── eth.svg │ │ │ │ ├── eun.svg │ │ │ │ ├── fin.svg │ │ │ │ ├── fji.svg │ │ │ │ ├── flk.svg │ │ │ │ ├── fra.svg │ │ │ │ ├── fro.svg │ │ │ │ ├── fsm.svg │ │ │ │ ├── gab.svg │ │ │ │ ├── gbr.svg │ │ │ │ ├── geo.svg │ │ │ │ ├── ggy.svg │ │ │ │ ├── gha.svg │ │ │ │ ├── gib.svg │ │ │ │ ├── gin.svg │ │ │ │ ├── glp.svg │ │ │ │ ├── gmb.svg │ │ │ │ ├── gnb.svg │ │ │ │ ├── gnq.svg │ │ │ │ ├── grc.svg │ │ │ │ ├── grd.svg │ │ │ │ ├── grl.svg │ │ │ │ ├── gtm.svg │ │ │ │ ├── guf.svg │ │ │ │ ├── gum.svg │ │ │ │ ├── guy.svg │ │ │ │ ├── hkg.svg │ │ │ │ ├── hmd.svg │ │ │ │ ├── hnd.svg │ │ │ │ ├── hrv.svg │ │ │ │ ├── hti.svg │ │ │ │ ├── hun.svg │ │ │ │ ├── idn.svg │ │ │ │ ├── imn.svg │ │ │ │ ├── ind.svg │ │ │ │ ├── iot.svg │ │ │ │ ├── irl.svg │ │ │ │ ├── irn.svg │ │ │ │ ├── irq.svg │ │ │ │ ├── isl.svg │ │ │ │ ├── isr.svg │ │ │ │ ├── ita.svg │ │ │ │ ├── jam.svg │ │ │ │ ├── jey.svg │ │ │ │ ├── jor.svg │ │ │ │ ├── jpn.svg │ │ │ │ ├── kaz.svg │ │ │ │ ├── ken.svg │ │ │ │ ├── kgz.svg │ │ │ │ ├── khm.svg │ │ │ │ ├── kir.svg │ │ │ │ ├── kna.svg │ │ │ │ ├── kor.svg │ │ │ │ ├── kos.svg │ │ │ │ ├── kwt.svg │ │ │ │ ├── lao.svg │ │ │ │ ├── lbn.svg │ │ │ │ ├── lbr.svg │ │ │ │ ├── lby.svg │ │ │ │ ├── lca.svg │ │ │ │ ├── lie.svg │ │ │ │ ├── lka.svg │ │ │ │ ├── lso.svg │ │ │ │ ├── ltu.svg │ │ │ │ ├── lux.svg │ │ │ │ ├── lva.svg │ │ │ │ ├── mac.svg │ │ │ │ ├── maf.svg │ │ │ │ ├── mar.svg │ │ │ │ ├── mco.svg │ │ │ │ ├── mda.svg │ │ │ │ ├── mdg.svg │ │ │ │ ├── mdv.svg │ │ │ │ ├── mex.svg │ │ │ │ ├── mhl.svg │ │ │ │ ├── mkd.svg │ │ │ │ ├── mli.svg │ │ │ │ ├── mlt.svg │ │ │ │ ├── mmr.svg │ │ │ │ ├── mne.svg │ │ │ │ ├── mng.svg │ │ │ │ ├── mnp.svg │ │ │ │ ├── moz.svg │ │ │ │ ├── mrt.svg │ │ │ │ ├── msr.svg │ │ │ │ ├── mtq.svg │ │ │ │ ├── mus.svg │ │ │ │ ├── mwi.svg │ │ │ │ ├── mys.svg │ │ │ │ ├── myt.svg │ │ │ │ ├── nam.svg │ │ │ │ ├── ncl.svg │ │ │ │ ├── ner.svg │ │ │ │ ├── nfk.svg │ │ │ │ ├── nga.svg │ │ │ │ ├── nic.svg │ │ │ │ ├── nir.svg │ │ │ │ ├── niu.svg │ │ │ │ ├── nld.svg │ │ │ │ ├── nor.svg │ │ │ │ ├── npl.svg │ │ │ │ ├── nru.svg │ │ │ │ ├── nzl.svg │ │ │ │ ├── omn.svg │ │ │ │ ├── pak.svg │ │ │ │ ├── pan.svg │ │ │ │ ├── pcn.svg │ │ │ │ ├── per.svg │ │ │ │ ├── phl.svg │ │ │ │ ├── plw.svg │ │ │ │ ├── png.svg │ │ │ │ ├── pol.svg │ │ │ │ ├── pri.svg │ │ │ │ ├── prk.svg │ │ │ │ ├── prt.svg │ │ │ │ ├── pry.svg │ │ │ │ ├── pse.svg │ │ │ │ ├── pyf.svg │ │ │ │ ├── qat.svg │ │ │ │ ├── reu.svg │ │ │ │ ├── rou.svg │ │ │ │ ├── rus.svg │ │ │ │ ├── rwa.svg │ │ │ │ ├── sau.svg │ │ │ │ ├── sco.svg │ │ │ │ ├── sdn.svg │ │ │ │ ├── sen.svg │ │ │ │ ├── sgp.svg │ │ │ │ ├── sgs.svg │ │ │ │ ├── shn.svg │ │ │ │ ├── sjm.svg │ │ │ │ ├── slb.svg │ │ │ │ ├── sle.svg │ │ │ │ ├── slv.svg │ │ │ │ ├── smr.svg │ │ │ │ ├── som.svg │ │ │ │ ├── spm.svg │ │ │ │ ├── srb.svg │ │ │ │ ├── ssd.svg │ │ │ │ ├── stp.svg │ │ │ │ ├── sun.svg │ │ │ │ ├── sur.svg │ │ │ │ ├── svk.svg │ │ │ │ ├── svn.svg │ │ │ │ ├── swe.svg │ │ │ │ ├── swz.svg │ │ │ │ ├── sxm.svg │ │ │ │ ├── syc.svg │ │ │ │ ├── syr.svg │ │ │ │ ├── tca.svg │ │ │ │ ├── tcd.svg │ │ │ │ ├── tgo.svg │ │ │ │ ├── tha.svg │ │ │ │ ├── tjk.svg │ │ │ │ ├── tkl.svg │ │ │ │ ├── tkm.svg │ │ │ │ ├── tls.svg │ │ │ │ ├── ton.svg │ │ │ │ ├── tto.svg │ │ │ │ ├── tun.svg │ │ │ │ ├── tur.svg │ │ │ │ ├── tuv.svg │ │ │ │ ├── twn.svg │ │ │ │ ├── tza.svg │ │ │ │ ├── uga.svg │ │ │ │ ├── ukr.svg │ │ │ │ ├── umi.svg │ │ │ │ ├── ury.svg │ │ │ │ ├── usa.svg │ │ │ │ ├── uzb.svg │ │ │ │ ├── vat.svg │ │ │ │ ├── vct.svg │ │ │ │ ├── ven.svg │ │ │ │ ├── vgb.svg │ │ │ │ ├── vir.svg │ │ │ │ ├── vnm.svg │ │ │ │ ├── vut.svg │ │ │ │ ├── wal.svg │ │ │ │ ├── wlf.svg │ │ │ │ ├── wsm.svg │ │ │ │ ├── yem.svg │ │ │ │ ├── zaf.svg │ │ │ │ ├── zmb.svg │ │ │ │ └── zwe.svg │ │ ├── fonts │ │ ├── i18n │ │ │ ├── continent │ │ │ │ └── en.json │ │ │ └── country │ │ │ │ └── en.json │ │ ├── index.css │ │ ├── logo.svg │ │ ├── robots.txt │ │ ├── theme.css │ │ └── variables.css │ ├── script │ │ ├── alpha3.json │ │ ├── country.json │ │ ├── countryContinent.json │ │ ├── en.json │ │ ├── extract.mjs │ │ └── tmp.json │ ├── src │ │ ├── alpha3.json │ │ ├── base.ts │ │ ├── continent.json │ │ └── countryContinent.json │ ├── tsconfig.json │ ├── types.ts │ ├── vite-plugin-lit-hmr.ts │ └── vite.config.js ├── model │ ├── .gitignore │ ├── CHANGELOG.md │ ├── Documentation.md │ ├── README.md │ ├── entity-create-dialog.ts │ ├── entity-creator.ts │ ├── entity-danger-zone.ts │ ├── entity-grid-provider.ts │ ├── entity-holder.ts │ ├── entity-offline.ts │ ├── entity-print.ts │ ├── field-translate.ts │ ├── index.ts │ ├── package.json │ ├── src │ │ ├── AbstractEntity.ts │ │ ├── cmp │ │ │ ├── abstract-entity-element.ts │ │ │ ├── base-metadata.ts │ │ │ ├── entity-create-dialog.ts │ │ │ ├── entity-creator.ts │ │ │ ├── entity-danger-zone.ts │ │ │ ├── entity-grid-provider.ts │ │ │ ├── entity-holder.ts │ │ │ └── field-translate.ts │ │ ├── defaultActions.ts │ │ ├── entityFact.ts │ │ ├── events.ts │ │ ├── mergeStatic.ts │ │ ├── mixin │ │ │ ├── context-access-mixin.ts │ │ │ ├── context-app-id-mixin.ts │ │ │ ├── context-data-mixin.ts │ │ │ ├── context-doc-id-mixin.ts │ │ │ ├── context-entity-mixin.ts │ │ │ ├── context-entity-status-mixin.ts │ │ │ ├── context-locale-data-mixin.ts │ │ │ ├── context-uid-mixin.ts │ │ │ ├── extend-helper-mixin.ts │ │ │ ├── reactive-list-mixin.ts │ │ │ ├── render-confirm-dialog-mixin.ts │ │ │ ├── render-field-mixin.ts │ │ │ └── render-header-mixin.ts │ │ ├── renderActionMixin.ts │ │ ├── renderEntityCreateMixin.ts │ │ ├── renderEntityFieldMixin.ts │ │ ├── renderEntityMixin.ts │ │ ├── renderField.ts │ │ ├── types.ts │ │ └── types │ │ │ ├── access.ts │ │ │ ├── actionTypes.ts │ │ │ ├── communication.ts │ │ │ ├── dataI.ts │ │ │ ├── entity.ts │ │ │ ├── entityResource.ts │ │ │ ├── modelComponent.ts │ │ │ ├── renderActionI.ts │ │ │ ├── renderEntityCreateI.ts │ │ │ ├── renderEntityFieldI.ts │ │ │ ├── renderEntityI.ts │ │ │ └── resource.ts │ ├── test │ │ └── model.test.ts │ ├── tsconfig.json │ └── vite.config.js ├── plot │ ├── README.md │ ├── demo │ │ ├── data │ │ │ └── time.json │ │ ├── index.html │ │ ├── lit-hmr.ts │ │ ├── redefine-custom-elements.ts │ │ ├── root.ts │ │ └── vite-plugin-lit-hmr.ts │ ├── package.json │ ├── public │ │ ├── README.md │ │ ├── docs │ │ │ ├── custom-elements.json │ │ │ └── custom-elements.md │ │ ├── fonts │ │ ├── images │ │ │ └── material-symbols │ │ ├── index.css │ │ ├── logo.svg │ │ ├── robots.txt │ │ ├── theme.css │ │ └── variables.css │ ├── src │ │ ├── base.ts │ │ ├── context-data-mixin.ts │ │ ├── index.ts │ │ └── myScheme.ts │ ├── time-series.ts │ ├── tsconfig.json │ ├── types.ts │ └── vite.config.js ├── shared │ ├── a11y │ │ ├── announce.ts │ │ └── index.ts │ ├── browser │ │ ├── README.md │ │ ├── hasTouchscreen.ts │ │ ├── index.ts │ │ ├── isChrome.ts │ │ ├── isEdge.ts │ │ ├── isFirefox.ts │ │ ├── isOpera.ts │ │ └── isSafari.ts │ ├── callFunctionOrValue.ts │ ├── context │ │ ├── advanced-mode-mixin.ts │ │ ├── context-mixin-factory.ts │ │ └── index.ts │ ├── controller │ │ ├── hasScrollbar.ts │ │ ├── index.ts │ │ ├── isEndPage.ts │ │ ├── isNarrow.ts │ │ └── resizeController.ts │ ├── dataUtils │ │ ├── README.md │ │ ├── cast.ts │ │ ├── compare.ts │ │ ├── deep.ts │ │ ├── filter.ts │ │ ├── index.ts │ │ └── normalizeEmptyValue.ts │ ├── dd │ │ ├── drag-mixin.ts │ │ ├── drag-store.ts │ │ └── index.ts │ ├── debounce.ts │ ├── decorator │ │ ├── index.ts │ │ ├── watch.test.ts │ │ └── watch.ts │ ├── deep.ts │ ├── directive │ │ ├── index.ts │ │ └── spreadDirective.ts │ ├── directiveRenderer │ │ ├── bodyBoolean.ts │ │ ├── bodyDate.ts │ │ ├── bodyDisplayName.ts │ │ ├── bodyFirestoreRealtime.ts │ │ ├── bodyRealtime.ts │ │ ├── headerFilterCheck.ts │ │ ├── headerFilterSelect.ts │ │ ├── headerFilterText.ts │ │ ├── headerSort.ts │ │ └── index.ts │ ├── domUtils │ │ ├── closest.ts │ │ ├── closestWithFilter.ts │ │ ├── index.ts │ │ ├── scrollInto.ts │ │ └── slot-switch.ts │ ├── ellipsis.ts │ ├── error │ │ ├── errors.ts │ │ └── index.ts │ ├── event │ │ ├── README.md │ │ ├── app-auth.ts │ │ ├── app-back.ts │ │ ├── app-confirm-language.ts │ │ ├── app-connected.ts │ │ ├── app-dialog-ok.ts │ │ ├── app-error.ts │ │ ├── app-hoist.ts │ │ ├── app-need-refresh.ts │ │ ├── data-has-changed.ts │ │ ├── docs │ │ │ ├── custom-elements.json │ │ │ └── custom-elements.md │ │ ├── index.ts │ │ ├── toast-event.ts │ │ ├── ui-event.ts │ │ └── value-changed.ts │ ├── getInnerText.ts │ ├── grid │ │ ├── activeItemChanged.ts │ │ └── index.ts │ ├── historyBackIfSameDomain.ts │ ├── index.ts │ ├── locale │ │ ├── currency-native.ts │ │ └── language-native.ts │ ├── md │ │ ├── README.md │ │ ├── index.ts │ │ ├── marked.ts │ │ ├── parse.ts │ │ ├── parseConfig.ts │ │ └── parseInline.ts │ ├── mixin │ │ ├── get-set.ts │ │ ├── index.ts │ │ ├── opened-mixin.ts │ │ ├── promise-event-dialog-mixin.ts │ │ └── types.ts │ ├── network │ │ ├── fetchWithTimeout.ts │ │ └── index.ts │ ├── package.json │ ├── string │ │ ├── camelToDash.ts │ │ ├── dashToCamel.ts │ │ ├── index.ts │ │ └── template.ts │ ├── styles │ │ ├── class │ │ │ ├── accessible-links.ts │ │ │ ├── action-bar.ts │ │ │ ├── alignIcon.ts │ │ │ ├── badge.ts │ │ │ ├── bottom-nav-bar.ts │ │ │ ├── card.ts │ │ │ ├── form-control.ts │ │ │ ├── form.ts │ │ │ ├── gap.ts │ │ │ ├── github-highlight-css.ts │ │ │ ├── github-md-css.ts │ │ │ ├── grid.ts │ │ │ ├── header.ts │ │ │ ├── icon.ts │ │ │ ├── label.ts │ │ │ ├── layout-grid.ts │ │ │ ├── lite-youtube.ts │ │ │ ├── margin.ts │ │ │ ├── outlined.ts │ │ │ ├── padding.ts │ │ │ ├── print.ts │ │ │ ├── responsive-media.ts │ │ │ ├── semantic-layout.ts │ │ │ ├── show-hover.ts │ │ │ ├── show-when-accessibility.ts │ │ │ ├── skip-nav.ts │ │ │ ├── slot-list.ts │ │ │ ├── sr-only.ts │ │ │ ├── sticky.ts │ │ │ ├── tab-variant.ts │ │ │ ├── toc.ts │ │ │ ├── tooltip.ts │ │ │ ├── top-card.ts │ │ │ └── typography.ts │ │ ├── flex │ │ │ ├── Classes │ │ │ │ └── index.ts │ │ │ ├── Literals │ │ │ │ └── index.ts │ │ │ ├── README.md │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── locale.mjs │ │ ├── md.ts │ │ ├── mixin │ │ │ └── modulo-selector.ts │ │ ├── page.ts │ │ ├── patch │ │ │ └── alignMwc.ts │ │ ├── themes │ │ │ ├── a14y.js │ │ │ ├── a14y.ts │ │ │ ├── a14y_dark.js │ │ │ ├── a14y_dark.ts │ │ │ ├── a14y_variant.js │ │ │ ├── a14y_variant.ts │ │ │ ├── a14y_variant_dark.js │ │ │ ├── a14y_variant_dark.ts │ │ │ ├── dark-mode-white.js │ │ │ ├── dark-mode-white.ts │ │ │ ├── dark-mode-yellow.js │ │ │ ├── dark-mode-yellow.ts │ │ │ ├── default.js │ │ │ ├── default.ts │ │ │ ├── default_dark.js │ │ │ ├── default_dark.ts │ │ │ ├── grayscale.js │ │ │ ├── grayscale.ts │ │ │ ├── high-contrast.js │ │ │ ├── high-contrast.ts │ │ │ ├── index.ts │ │ │ ├── locale.mjs │ │ │ ├── locale.ts │ │ │ ├── preignition.js │ │ │ ├── preignition.ts │ │ │ ├── preignition_dark.js │ │ │ ├── preignition_dark.ts │ │ │ ├── teal-yellow.js │ │ │ ├── teal-yellow.ts │ │ │ ├── teal-yellow_dark.js │ │ │ ├── teal-yellow_dark.ts │ │ │ ├── theme-viewer.ts │ │ │ └── types.ts │ │ ├── utils │ │ │ ├── getAdjustedColor.ts │ │ │ ├── index.ts │ │ │ ├── rtl.ts │ │ │ └── themeReset.ts │ │ └── vaadin │ │ │ ├── README.md │ │ │ ├── card.ts │ │ │ ├── context-menu-overlay.ts │ │ │ ├── grid.ts │ │ │ ├── index.ts │ │ │ └── init-vaadin.ts │ ├── support │ │ ├── README.md │ │ ├── method-interception.ts │ │ └── resize-observers-errors.ts │ ├── throttle.ts │ ├── tsconfig.json │ ├── types.ts │ ├── types │ │ ├── index.ts │ │ └── material-symbols.ts │ ├── vite.config.js │ └── wait.ts ├── state │ ├── .gitignore │ ├── CHANGELOG.md │ ├── Documentation.md │ ├── README.md │ ├── package.json │ ├── src │ │ ├── decorators │ │ │ ├── hook.ts │ │ │ ├── parse.ts │ │ │ ├── property.ts │ │ │ ├── query.ts │ │ │ └── storage.ts │ │ ├── env.d.ts │ │ ├── functionValue.ts │ │ ├── hook.ts │ │ ├── index.ts │ │ ├── state-controller.ts │ │ ├── state-event.ts │ │ ├── state.ts │ │ └── types.ts │ ├── test │ │ ├── decorator.test.ts │ │ ├── hook-firebase.test.ts │ │ ├── hook-firebase.ts │ │ ├── hook.test.ts │ │ └── state.test.ts │ ├── tsconfig.json │ └── vite.config.js ├── testing │ ├── fixture.ts │ ├── index.ts │ └── package.json └── xstate-route │ ├── .firebaserc │ ├── README.md │ ├── demo │ ├── app.ts │ ├── dialog │ │ ├── dialog.ts │ │ ├── step-one │ │ │ └── step-one.ts │ │ └── step-two │ │ │ └── step-two.ts │ ├── index.html │ └── pages │ │ ├── home │ │ ├── fsm │ │ │ └── fsm.ts │ │ ├── home.ts │ │ ├── secret │ │ │ ├── code │ │ │ │ └── code.ts │ │ │ ├── data.ts │ │ │ ├── password │ │ │ │ └── password.ts │ │ │ └── secret.ts │ │ └── user │ │ │ ├── edit │ │ │ └── edit.ts │ │ │ └── user.ts │ │ ├── login │ │ └── login.ts │ │ └── styles.ts │ ├── firebase.json │ ├── package.json │ ├── src │ ├── types.ts │ ├── xstate-route-controller.test.ts │ └── xstate-route-controller.ts │ ├── tsconfig.json │ └── vite.config.mjs ├── pnpm-workspace.yaml ├── tsconfig.json ├── vite.config.mjs └── vitetestSetup.js /.changeset/README.md: -------------------------------------------------------------------------------- 1 | # Changesets 2 | 3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works 4 | with multi-package repos, or single-package repos to help you version and publish your code. You can 5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets) 6 | 7 | We have a quick list of common questions to get you started engaging with this project in 8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) 9 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@2.0.0/schema.json", 3 | "changelog": "@changesets/cli/changelog", 4 | "commit": false, 5 | "fixed": [], 6 | "linked": [], 7 | "access": "public", 8 | "baseBranch": "main", 9 | "updateInternalDependencies": "patch", 10 | "ignore": [] 11 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | pnpm-debug.log* 6 | firebase-debug.log* 7 | firebase-debug.*.log* 8 | initializeFirebase.js 9 | 10 | # Firebase cache 11 | .firebase/ 12 | 13 | .wireit 14 | node_modules 15 | dist 16 | *.local 17 | guides.md 18 | 19 | __* 20 | 21 | tmp 22 | # Editor directories and files 23 | .vscode/* 24 | !.vscode/extensions.json 25 | .idea 26 | .DS_Store 27 | *.suo 28 | *.ntvs* 29 | *.njsproj 30 | *.sln 31 | *.sw? 32 | -------------------------------------------------------------------------------- /locale.mjs: -------------------------------------------------------------------------------- 1 | export * from './packages/cmp/locale.mjs'; -------------------------------------------------------------------------------- /packages/_tpl/demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | router-slot 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /packages/_tpl/locale.mjs: -------------------------------------------------------------------------------- 1 | // export * from './field/locale.mjs'; -------------------------------------------------------------------------------- /packages/_tpl/public/README.md: -------------------------------------------------------------------------------- 1 | [![Netlify Status](https://api.netlify.com/api/v1/badges/def2b202-3a80-469d-9dbc-fc259cc1e712/deploy-status)](https://app.netlify.com/sites/vite-lit-starter/deploys) 2 | 3 | # My-Element title 4 | 5 | This project includes a sample component using LitElement with JavaScript. 6 | 7 | ## Demo 8 | 9 | 10 | ## API 11 | 12 | 13 | ## DOCs 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /packages/_tpl/public/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #fafafa; 3 | margin: 0; 4 | } 5 | 6 | body, 7 | html { 8 | font-family: 'Roboto', 'Noto', sans-serif; 9 | } 10 | 11 | :root {} -------------------------------------------------------------------------------- /packages/_tpl/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /packages/_tpl/public/theme.css: -------------------------------------------------------------------------------- 1 | /home/christophe/Programming/preignition/a14y/public/theme.css -------------------------------------------------------------------------------- /packages/_tpl/public/variables.css: -------------------------------------------------------------------------------- 1 | /home/christophe/Programming/preignition/a14y/public/variables.css -------------------------------------------------------------------------------- /packages/_tpl/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | 5 | }, 6 | "include": ["./**/*.ts"], 7 | "exclude": [] 8 | } 9 | -------------------------------------------------------------------------------- /packages/_tpl/types.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/_tpl/types.ts -------------------------------------------------------------------------------- /packages/access/add-role.ts: -------------------------------------------------------------------------------- 1 | // import { css } from 'lit'; 2 | import {customElement} from 'lit/decorators.js'; 3 | 4 | import {AddRole} from './internal/add-role'; 5 | 6 | declare global { 7 | interface HTMLElementTagNameMap { 8 | 'lapp-add-role': LappAddRole; 9 | } 10 | } 11 | 12 | /** 13 | * @final 14 | * @suppress {visibility} 15 | */ 16 | @customElement('lapp-access-add-role') 17 | export default class LappAddRole extends AddRole { 18 | 19 | 20 | } 21 | -------------------------------------------------------------------------------- /packages/access/index.ts: -------------------------------------------------------------------------------- 1 | import hasUserRole from './internal/hasUserRole' 2 | 3 | export { 4 | hasUserRole 5 | } -------------------------------------------------------------------------------- /packages/access/internal/hasUserRole.ts: -------------------------------------------------------------------------------- 1 | import type { AccessT } from '@lit-app/model'; 2 | 3 | /** 4 | * return true when a user has access against a resource 5 | * @param role the role to test (owner, editor, viewer, ...) 6 | * @param access the access object or the groupID 7 | * @param uid the user id to test 8 | */ 9 | function hasUserRole(role: keyof A['user'], access: A, uid: string): boolean { 10 | const userRole = access.user?.[role as keyof typeof access.user]; 11 | return uid && userRole === uid || 12 | (Array.isArray(userRole) && (userRole.indexOf(uid) >= 0)) 13 | } 14 | 15 | export default hasUserRole -------------------------------------------------------------------------------- /packages/access/set-role.ts: -------------------------------------------------------------------------------- 1 | // import { css } from 'lit'; 2 | import {customElement} from 'lit/decorators.js'; 3 | 4 | import {SetRole} from './internal/set-role'; 5 | 6 | declare global { 7 | interface HTMLElementTagNameMap { 8 | 'lapp-set-role': LappSetRole; 9 | } 10 | } 11 | 12 | /** 13 | * @final 14 | * @suppress {visibility} 15 | */ 16 | @customElement('lapp-access-set-role') 17 | export default class LappSetRole extends SetRole { 18 | 19 | 20 | } 21 | -------------------------------------------------------------------------------- /packages/access/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": { 4 | "lit": [ 5 | "./node_modules/lit" 6 | ] 7 | } 8 | }, 9 | "extends": "../../tsconfig.json", 10 | "include": ["internal/**/*.ts", "*.ts"], 11 | "exclude": [] 12 | } 13 | -------------------------------------------------------------------------------- /packages/actor/actor.ts: -------------------------------------------------------------------------------- 1 | import Actor from "./src/actor"; 2 | export { Actor } 3 | export default Actor; 4 | -------------------------------------------------------------------------------- /packages/actor/context-actor.ts: -------------------------------------------------------------------------------- 1 | import { ConsumeActorMixin, ProvideActorMixin, ActorContext } from "./src/context-actor"; 2 | export { ConsumeActorMixin, ProvideActorMixin, ActorContext }; 3 | -------------------------------------------------------------------------------- /packages/actor/registry.ts: -------------------------------------------------------------------------------- 1 | import Registry from "./src/registry"; 2 | export { Registry } 3 | export default Registry; 4 | -------------------------------------------------------------------------------- /packages/actor/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "paths": { 5 | "lit": [ 6 | "./node_modules/lit" 7 | ] 8 | } 9 | }, 10 | "include": ["src/**/*.ts", "demo/**/*.ts"], 11 | "exclude": [] 12 | } 13 | -------------------------------------------------------------------------------- /packages/cmp/audio/internal/types.ts: -------------------------------------------------------------------------------- 1 | export interface PlayerI { 2 | get paused(): boolean; 3 | get speaking(): boolean; 4 | get ready(): boolean; 5 | get error(): string | undefined; 6 | play: () => void; 7 | pause: () => void; 8 | restart: () => void; 9 | dispose: () => void; 10 | } 11 | 12 | export interface SpeechConfigI { 13 | pitch: number; 14 | rate: number; 15 | language: string; 16 | } 17 | -------------------------------------------------------------------------------- /packages/cmp/audio/player-controller.ts: -------------------------------------------------------------------------------- 1 | import {PlayerController} from './internal/player-controller.js'; 2 | import { cancelSynth } from './internal/speech-controller.js'; 3 | import { cancelAudio } from './internal/audio-controller.js'; 4 | export { 5 | PlayerController, 6 | cancelSynth, 7 | cancelAudio 8 | }; -------------------------------------------------------------------------------- /packages/cmp/copy/copy.ts: -------------------------------------------------------------------------------- 1 | import { Copy } from './internal/copy'; 2 | import { customElement } from 'lit/decorators.js'; 3 | 4 | @customElement('lapp-copy') 5 | export class LappCopy extends Copy { 6 | static override styles = [...Copy.styles]; 7 | } 8 | 9 | declare global { 10 | interface HTMLElementTagNameMap { 11 | 'lapp-copy': LappCopy; 12 | } 13 | } -------------------------------------------------------------------------------- /packages/cmp/dialog/dialog-download.ts: -------------------------------------------------------------------------------- 1 | import { DialogDownload } from './internal/dialog-download'; 2 | import { customElement } from 'lit/decorators.js'; 3 | export { default as DownloadEvent } from './event'; 4 | @customElement('lapp-dialog-download') 5 | export class LappDialogDownload extends DialogDownload { 6 | static override styles = DialogDownload.styles; 7 | } 8 | 9 | declare global { 10 | interface HTMLElementTagNameMap { 11 | 'lapp-dialog-download': LappDialogDownload; 12 | } 13 | } -------------------------------------------------------------------------------- /packages/cmp/dialog/downloadCSV.ts: -------------------------------------------------------------------------------- 1 | 2 | export default function downloadCSV(csvData: string, filename: string) { 3 | const blob = new Blob([csvData], { type: 'text/csv' }); 4 | const url = window.URL.createObjectURL(blob); 5 | const a = document.createElement('a'); 6 | a.setAttribute('hidden', ''); 7 | a.setAttribute('href', url); 8 | a.setAttribute('download', filename); 9 | document.body.appendChild(a); 10 | a.click(); 11 | document.body.removeChild(a); 12 | } -------------------------------------------------------------------------------- /packages/cmp/dialog/downloadJSON.ts: -------------------------------------------------------------------------------- 1 | export default function downloadJSON(data: any[], filename: string) { 2 | const jsonData = JSON.stringify(data, null, 2); 3 | const blob = new Blob([jsonData], { type: 'application/json' }); 4 | const url = window.URL.createObjectURL(blob); 5 | const a = document.createElement('a'); 6 | a.setAttribute('hidden', ''); 7 | a.setAttribute('href', url); 8 | a.setAttribute('download', filename); 9 | document.body.appendChild(a); 10 | a.click(); 11 | document.body.removeChild(a); 12 | } -------------------------------------------------------------------------------- /packages/cmp/dom/README.md: -------------------------------------------------------------------------------- 1 | # DOM 2 | 3 | A series of component relative to DOM manipulation. 4 | 5 | - ``: observe dom changes and notify -------------------------------------------------------------------------------- /packages/cmp/dom/observer.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import { DomObserver } from './internal/observer.js'; 4 | 5 | declare global { 6 | interface HTMLElementTagNameMap { 7 | 'lapp-dom-observer': LappDomObserver; 8 | } 9 | } 10 | 11 | /** 12 | * Listen to dom changes and dispatch content-changed event when content changes 13 | * @fires content-changed 14 | */ 15 | @customElement('lapp-dom-observer') 16 | export class LappDomObserver extends DomObserver { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /packages/cmp/fab/filled-fab.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | import {MdFab} from '@material/web/fab/fab.js'; 3 | import { Fab } from './internal/fab'; 4 | import styles from './internal/styles'; 5 | import filledStyles from './internal/filled-styles'; 6 | 7 | declare global { 8 | interface HTMLElementTagNameMap { 9 | 'lapp-filled-fab': LappFilledFab; 10 | } 11 | } 12 | 13 | @customElement('lapp-filled-fab') 14 | export class LappFilledFab extends Fab { 15 | static override styles = [...MdFab.styles, styles, filledStyles]; 16 | } 17 | -------------------------------------------------------------------------------- /packages/cmp/fab/internal/fab.ts: -------------------------------------------------------------------------------- 1 | import { Fab as WebFab } from "@material/web/fab/internal/fab"; 2 | import { property } from "lit/decorators.js"; 3 | 4 | export class Fab extends WebFab { 5 | 6 | @property({ type: Boolean, reflect: true }) fab = true; 7 | 8 | protected override getRenderClasses() { 9 | const isExtended = !!this.label; 10 | // this allows large to be used with extended 11 | return { 12 | ...super.getRenderClasses(), 13 | 'lowered': this.lowered, 14 | 'small': this.size === 'small' && !isExtended, 15 | 'large': this.size === 'large', 16 | 'extended': isExtended, 17 | }; 18 | } 19 | } -------------------------------------------------------------------------------- /packages/cmp/fab/internal/styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | .fab.extended { 4 | width: inherit; 5 | } 6 | .large.extended .label { 7 | font-size: var(--font-size-large, 1.25rem); 8 | font-weight: var(--font-weight-semi-bold, 500); 9 | margin-inline-end: 12px; 10 | } 11 | 12 | `; 13 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/fab/outlined-fab.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | import {MdFab} from '@material/web/fab/fab.js'; 3 | import { Fab } from './internal/fab'; 4 | import styles from './internal/styles'; 5 | import outlinedStyles from './internal/outlined-styles'; 6 | 7 | declare global { 8 | interface HTMLElementTagNameMap { 9 | 'lapp-outlined-fab': LappOutlinedFab; 10 | } 11 | } 12 | 13 | @customElement('lapp-outlined-fab') 14 | export class LappOutlinedFab extends Fab { 15 | static override styles = [...MdFab.styles, styles, outlinedStyles]; 16 | } 17 | -------------------------------------------------------------------------------- /packages/cmp/feedback/README.md: -------------------------------------------------------------------------------- 1 | # Feedback 2 | 3 | A component to collect feedback from users. 4 | 5 | -------------------------------------------------------------------------------- /packages/cmp/feedback/feedback-mixin.ts: -------------------------------------------------------------------------------- 1 | export * from './src/feedback-mixin.js'; -------------------------------------------------------------------------------- /packages/cmp/feedback/feedback.ts: -------------------------------------------------------------------------------- 1 | import { customElement } from 'lit/decorators.js'; 2 | import Feedback from './src/feedback.js'; 3 | 4 | /** 5 | * 6 | */ 7 | 8 | @customElement('lapp-feedback') 9 | export default class lappFeedback extends Feedback { 10 | 11 | } 12 | 13 | declare global { 14 | interface HTMLElementTagNameMap { 15 | 'lapp-feedback': lappFeedback; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /packages/cmp/feedback/locale.mjs: -------------------------------------------------------------------------------- 1 | 2 | import PfeFeedback from './src/feedback-locale.mjs'; 3 | export { 4 | PfeFeedback 5 | }; 6 | -------------------------------------------------------------------------------- /packages/cmp/field/checkbox-field.ts: -------------------------------------------------------------------------------- 1 | 2 | import { customElement } from 'lit/decorators.js'; 3 | 4 | import { LappFilledCheckbox } from './checkbox/filled-checkbox'; 5 | 6 | declare global { 7 | interface HTMLElementTagNameMap { 8 | 'lapp-checkbox-field': LappCheckboxField; 9 | } 10 | } 11 | 12 | /** 13 | * # Checkbox 14 | * 15 | * @summary 16 | * Checkbox is a component that display allow to register a Checkbox and store it locally. 17 | 18 | * @final 19 | */ 20 | @customElement('lapp-checkbox-field') 21 | export class LappCheckboxField extends LappFilledCheckbox { 22 | 23 | } 24 | 25 | -------------------------------------------------------------------------------- /packages/cmp/field/checkbox/filledStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/checkbox/internal/filled-checkbox.ts: -------------------------------------------------------------------------------- 1 | import '../../field/filled-field.js'; 2 | import {literal} from 'lit/static-html.js'; 3 | 4 | import {Checkbox} from './checkbox'; 5 | 6 | /** 7 | * An filled text field component 8 | */ 9 | export class FilledCheckbox extends Checkbox { 10 | protected readonly fieldTag = literal`lapp-filled-field`; 11 | } 12 | -------------------------------------------------------------------------------- /packages/cmp/field/checkbox/internal/outlined-checkbox.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | import '../../field/outlined-field.js'; 4 | import {literal} from 'lit/static-html.js'; 5 | 6 | import {Checkbox} from './checkbox'; 7 | 8 | /** 9 | * An outlined text field component 10 | */ 11 | export class OutlinedCheckbox extends Checkbox { 12 | protected readonly fieldTag = literal`lapp-outlined-field`; 13 | } 14 | -------------------------------------------------------------------------------- /packages/cmp/field/checkbox/outlinedStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/checkbox/sharedStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | label { 4 | // padding-top: var(--_with-label-top-space); 5 | display: flex; 6 | align-items: center; 7 | } 8 | `; 9 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/choice-checkbox.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import {LappFilledCheckbox} from './choice/checkbox/filled-checkbox'; 4 | 5 | declare global { 6 | interface HTMLElementTagNameMap { 7 | 'lapp-choice-checkbox': LappChoiceCheckbox; 8 | } 9 | } 10 | 11 | /** 12 | * @final 13 | * @suppress {visibility} 14 | */ 15 | @customElement('lapp-choice-checkbox') 16 | export class LappChoiceCheckbox extends LappFilledCheckbox { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /packages/cmp/field/choice-order.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import {LappFilledOrder} from './choice/order/filled-order'; 4 | 5 | declare global { 6 | interface HTMLElementTagNameMap { 7 | 'lapp-choice-order': LappChoiceOrder; 8 | } 9 | } 10 | 11 | /** 12 | * @final 13 | * @suppress {visibility} 14 | */ 15 | @customElement('lapp-choice-order') 16 | export class LappChoiceOrder extends LappFilledOrder { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /packages/cmp/field/choice-radio.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import {LappFilledRadio} from './choice/radio/filled-radio'; 4 | 5 | declare global { 6 | interface HTMLElementTagNameMap { 7 | 'lapp-choice-radio': LappChoiceRadio; 8 | } 9 | } 10 | 11 | /** 12 | * @final 13 | * @suppress {visibility} 14 | */ 15 | @customElement('lapp-choice-radio') 16 | export class LappChoiceRadio extends LappFilledRadio { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /packages/cmp/field/choice-star.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import {LappFilledStar} from './choice/star/filled-star'; 4 | 5 | declare global { 6 | interface HTMLElementTagNameMap { 7 | 'lapp-choice-star': LappChoiceStar; 8 | } 9 | } 10 | 11 | /** 12 | * @final 13 | * @suppress {visibility} 14 | */ 15 | @customElement('lapp-choice-star') 16 | export class LappChoiceStar extends LappFilledStar { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /packages/cmp/field/choice/checkbox/filledStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | :host { } 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/choice/checkbox/internal/filled-checkbox.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2021 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import '../../../field/filled-field.js'; 8 | 9 | import {literal} from 'lit/static-html.js'; 10 | 11 | import {Checkbox} from './checkbox'; 12 | 13 | /** 14 | * An filled text field component 15 | */ 16 | export class FilledCheckbox extends Checkbox { 17 | protected override readonly fieldTag = literal`lapp-filled-field`; 18 | } 19 | -------------------------------------------------------------------------------- /packages/cmp/field/choice/checkbox/internal/outlined-checkbox.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | /** 4 | * @license 5 | * Copyright 2021 Google LLC 6 | * SPDX-License-Identifier: Apache-2.0 7 | */ 8 | 9 | import '@lit-app/field/outlined-field.js'; 10 | 11 | import {literal} from 'lit/static-html.js'; 12 | 13 | import {Checkbox} from './checkbox'; 14 | 15 | /** 16 | * An outlined text field component 17 | */ 18 | export class OutlinedCheckbox extends Checkbox { 19 | protected readonly fieldTag = literal`lapp-outlined-field`; 20 | } 21 | -------------------------------------------------------------------------------- /packages/cmp/field/choice/checkbox/internal/shared-styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | 5 | *[data-role="checkbox"] { 6 | margin-inline-start: 4px; 7 | } 8 | 9 | /** checkbox are not printed without this */ 10 | md-checkbox { 11 | -webkit-print-color-adjust:exact !important; 12 | print-color-adjust:exact !important; 13 | } 14 | 15 | /** we want some denser layout for print */ 16 | @media print { 17 | *[data-role="checkbox"] { 18 | margin-top: 2px; 19 | margin-bottom: 2px; 20 | } 21 | 22 | } 23 | `; 24 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/choice/checkbox/outlinedStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | :host { 4 | 5 | } 6 | `; 7 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/choice/list.ts: -------------------------------------------------------------------------------- 1 | import { LitElement } from "lit"; 2 | import { customElement } from 'lit/decorators.js'; 3 | 4 | /** 5 | * A proxy list to use with choice 6 | * It is responsible for the validation and the rendering of the list 7 | * We render in the light dom so 8 | */ 9 | 10 | @customElement('ul-choice') 11 | export default class ulChoice extends LitElement { 12 | 13 | override createRenderRoot() { 14 | return this; 15 | } 16 | } 17 | 18 | declare global { 19 | interface HTMLElementTagNameMap { 20 | 'ul-choice': ulChoice; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /packages/cmp/field/choice/order/filledStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | // :host { 4 | // display: block; 5 | // border: solid 1px gray; 6 | // padding: 16px; 7 | // max-width: 800px; 8 | // } 9 | `; 10 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/choice/order/internal/filled-order.ts: -------------------------------------------------------------------------------- 1 | import '../../../field/filled-field.js'; 2 | 3 | import { literal } from 'lit/static-html.js'; 4 | 5 | import { Order } from './order'; 6 | 7 | /** 8 | * An filled text field component 9 | */ 10 | export class FilledOrder extends Order { 11 | protected override readonly fieldTag = literal`lapp-filled-field`; 12 | } 13 | -------------------------------------------------------------------------------- /packages/cmp/field/choice/order/internal/locale.mjs: -------------------------------------------------------------------------------- 1 | export default { 2 | moveDown: 'move item {{label}} down', 3 | moveUp: 'move item {{label}} up' 4 | } -------------------------------------------------------------------------------- /packages/cmp/field/choice/order/internal/outlined-order.ts: -------------------------------------------------------------------------------- 1 | import '../../../field/outlined-field.js'; 2 | 3 | import {literal} from 'lit/static-html.js'; 4 | 5 | import {Order} from './order'; 6 | 7 | /** 8 | * An outlined text field component 9 | */ 10 | export class OutlinedOrder extends Order { 11 | protected readonly fieldTag = literal`lapp-outlined-field`; 12 | } 13 | -------------------------------------------------------------------------------- /packages/cmp/field/choice/order/outlinedStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/choice/radio/filledStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/choice/radio/internal/filled-radio.ts: -------------------------------------------------------------------------------- 1 | import '../../../field/filled-field.js'; 2 | 3 | import {literal} from 'lit/static-html.js'; 4 | 5 | import {Radio} from './radio'; 6 | 7 | /** 8 | * An filled text field component 9 | */ 10 | export class FilledRadio extends Radio { 11 | protected override readonly fieldTag = literal`lapp-filled-field`; 12 | } 13 | -------------------------------------------------------------------------------- /packages/cmp/field/choice/radio/internal/outlined-radio.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | import '../../../field/outlined-field.js'; 4 | 5 | import {literal} from 'lit/static-html.js'; 6 | 7 | import {Radio} from './radio'; 8 | 9 | /** 10 | * An outlined text field component 11 | */ 12 | export class OutlinedRadio extends Radio { 13 | protected readonly fieldTag = literal`lapp-outlined-field`; 14 | } 15 | -------------------------------------------------------------------------------- /packages/cmp/field/choice/radio/internal/shared-styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | *[data-role="radio"] { 4 | margin-inline-end: 16px; 5 | margin-inline-start: 4px; 6 | } 7 | `; 8 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/choice/radio/outlinedStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/choice/star/filledStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/choice/star/internal/filled-star.ts: -------------------------------------------------------------------------------- 1 | import '../../../field/filled-field.js'; 2 | 3 | import {literal} from 'lit/static-html.js'; 4 | 5 | import {Star} from './star'; 6 | 7 | /** 8 | * An filled text field component 9 | */ 10 | export class FilledStar extends Star { 11 | protected override readonly fieldTag = literal`lapp-filled-field`; 12 | } 13 | -------------------------------------------------------------------------------- /packages/cmp/field/choice/star/internal/outlined-star.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | import '../../../field/outlined-field.js'; 4 | 5 | import {literal} from 'lit/static-html.js'; 6 | 7 | import {Star} from './star'; 8 | 9 | /** 10 | * An outlined text field component 11 | */ 12 | export class OutlinedStar extends Star { 13 | protected readonly fieldTag = literal`lapp-outlined-field`; 14 | } 15 | -------------------------------------------------------------------------------- /packages/cmp/field/choice/star/outlinedStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/field/internal/filled-field.ts: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * A filled field component. 4 | */ 5 | import {FilledField as F} from '@material/web/field/internal/filled-field'; 6 | import A11yFieldMixin from './a11y-field-mixin'; 7 | export class FilledField extends A11yFieldMixin(F) { 8 | } 9 | 10 | -------------------------------------------------------------------------------- /packages/cmp/field/field/internal/outlined-field.ts: -------------------------------------------------------------------------------- 1 | import {OutlinedField as F} from '@material/web/field/internal/outlined-field'; 2 | import A11yFieldMixin from './a11y-field-mixin'; 3 | export class OutlinedField extends A11yFieldMixin(F) { 4 | } 5 | -------------------------------------------------------------------------------- /packages/cmp/field/field/internal/supporting-text-styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | 3 | const styles = css` 4 | .supporting-text > span:first-child { 5 | opacity: 1; 6 | transition: opacity var(--transition-quickly); 7 | } 8 | 9 | /** only display supporting-text on focus */ 10 | :host(.textfield:not([focused]):not([persistSupportingText])) .supporting-text:not([role="alert"]) > span:not(.counter) { 11 | opacity: 0; 12 | } 13 | .supporting-text:not([role="alert"]) > span:not(.counter) { 14 | opacity: 1; 15 | } 16 | ` 17 | 18 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/generic/styles.ts: -------------------------------------------------------------------------------- 1 | import {css, CSSResult} from 'lit'; 2 | const styles: CSSResult = css` 3 | :host > span, 4 | :host > div { 5 | display: inline-flex; 6 | flex: 1; 7 | align-items: flex-start; 8 | } 9 | input[type="color"] { 10 | min-height: 24px; 11 | } 12 | 13 | ` 14 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/locale.mjs: -------------------------------------------------------------------------------- 1 | import Readaloud from './choice/readaloud-locale.mjs'; 2 | import lappInputRecord from './record/internal/record-locale.mjs'; 3 | export { 4 | Readaloud, 5 | lappInputRecord 6 | }; 7 | -------------------------------------------------------------------------------- /packages/cmp/field/md-droppable-editor.ts: -------------------------------------------------------------------------------- 1 | // TODO: import from lapp-textfield and remove lapp-textfield 2 | import { customElement } from 'lit/decorators.js'; 3 | 4 | import MdDroppableEditor from './md/md-droppable-editor.js'; 5 | 6 | declare global { 7 | interface HTMLElementTagNameMap { 8 | 'lapp-md-droppable-editor': LappMdDroppableEditor; 9 | } 10 | } 11 | 12 | /** 13 | * A markdown editor that support translation and preview. 14 | */ 15 | @customElement('lapp-md-droppable-editor') 16 | export class LappMdDroppableEditor extends MdDroppableEditor { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /packages/cmp/field/md-editor.ts: -------------------------------------------------------------------------------- 1 | // TODO: import from lapp-textfield and remove lapp-textfield 2 | import { customElement } from 'lit/decorators.js'; 3 | 4 | import MdEditor from './md/md-editor.js'; 5 | 6 | declare global { 7 | interface HTMLElementTagNameMap { 8 | 'lapp-md-editor': LappMdEditor; 9 | } 10 | } 11 | 12 | /** 13 | * A markdown editor that support translation and preview. 14 | */ 15 | @customElement('lapp-md-editor') 16 | export class LappMdEditor extends MdEditor { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /packages/cmp/field/md/types.ts: -------------------------------------------------------------------------------- 1 | export type MdConfigT = { 2 | ADD_ATTR: string[]; 3 | ADD_TAGS: string[]; 4 | } -------------------------------------------------------------------------------- /packages/cmp/field/record-field.ts: -------------------------------------------------------------------------------- 1 | 2 | import { customElement } from 'lit/decorators.js'; 3 | 4 | import { LappFilledRecordField } from './record/filled-record-field'; 5 | 6 | declare global { 7 | interface HTMLElementTagNameMap { 8 | 'lapp-record-field': LappRecordField; 9 | } 10 | } 11 | 12 | /** 13 | * # record 14 | * 15 | * @summary 16 | * Record is a component that display allow to register a record and store it locally. 17 | 18 | * @final 19 | */ 20 | @customElement('lapp-record-field') 21 | export class LappRecordField extends LappFilledRecordField { 22 | 23 | } 24 | 25 | -------------------------------------------------------------------------------- /packages/cmp/field/record/filledStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/record/internal/filled-record-field.ts: -------------------------------------------------------------------------------- 1 | import '../../field/filled-field.js'; 2 | 3 | import {literal} from 'lit/static-html.js'; 4 | 5 | import {RecordField} from './record-field'; 6 | 7 | /** 8 | * An filled text field component 9 | */ 10 | export class FilledRecordField extends RecordField { 11 | protected readonly fieldTag = literal`lapp-filled-field`; 12 | } -------------------------------------------------------------------------------- /packages/cmp/field/record/internal/input-record.ts: -------------------------------------------------------------------------------- 1 | import { Record } from './record'; 2 | import { property } from 'lit/decorators.js'; 3 | 4 | /** 5 | * A record Component to be used within RecordField 6 | * 7 | */ 8 | 9 | export class InputRecord extends Record { 10 | 11 | 12 | @property() 13 | get value() { 14 | return this.src; 15 | } 16 | set value(value) { 17 | this.src = value 18 | } 19 | 20 | 21 | } 22 | 23 | -------------------------------------------------------------------------------- /packages/cmp/field/record/internal/outlined-record-field.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | import '../../field/outlined-field.js'; 4 | 5 | import {literal} from 'lit/static-html.js'; 6 | 7 | import {RecordField} from './record-field'; 8 | 9 | /** 10 | * An outlined text field component 11 | */ 12 | export class OutlinedRecordField extends RecordField { 13 | protected readonly fieldTag = literal`lapp-outlined-field`; 14 | } -------------------------------------------------------------------------------- /packages/cmp/field/record/outlinedStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/record/record.ts: -------------------------------------------------------------------------------- 1 | 2 | import { customElement } from 'lit/decorators.js'; 3 | 4 | import styles from './record-styles'; 5 | import { Record } from './internal/record'; 6 | 7 | declare global { 8 | interface HTMLElementTagNameMap { 9 | 'lapp-record': LappRecord; 10 | } 11 | } 12 | 13 | /** 14 | * # record 15 | * 16 | * @summary 17 | * Record is a component that display allow to register a record and store it locally. 18 | 19 | * @final 20 | */ 21 | @customElement('lapp-record') 22 | export class LappRecord extends Record { 23 | static override styles = [ 24 | styles, 25 | ]; 26 | } 27 | -------------------------------------------------------------------------------- /packages/cmp/field/record/releaseNotes/assets/voice-a11y-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/cmp/field/record/releaseNotes/assets/voice-a11y-menu.png -------------------------------------------------------------------------------- /packages/cmp/field/record/releaseNotes/assets/voice-activate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/cmp/field/record/releaseNotes/assets/voice-activate.png -------------------------------------------------------------------------------- /packages/cmp/field/record/releaseNotes/assets/voice-distribute.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/cmp/field/record/releaseNotes/assets/voice-distribute.png -------------------------------------------------------------------------------- /packages/cmp/field/record/releaseNotes/assets/voice-edit-mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/cmp/field/record/releaseNotes/assets/voice-edit-mode.png -------------------------------------------------------------------------------- /packages/cmp/field/record/releaseNotes/assets/voice-listen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/cmp/field/record/releaseNotes/assets/voice-listen.png -------------------------------------------------------------------------------- /packages/cmp/field/record/releaseNotes/assets/voice-narrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/cmp/field/record/releaseNotes/assets/voice-narrow.png -------------------------------------------------------------------------------- /packages/cmp/field/record/releaseNotes/assets/voice-pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/cmp/field/record/releaseNotes/assets/voice-pause.png -------------------------------------------------------------------------------- /packages/cmp/field/record/releaseNotes/assets/voice-record.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/cmp/field/record/releaseNotes/assets/voice-record.png -------------------------------------------------------------------------------- /packages/cmp/field/record/releaseNotes/assets/voice-start-again.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/cmp/field/record/releaseNotes/assets/voice-start-again.png -------------------------------------------------------------------------------- /packages/cmp/field/record/releaseNotes/assets/voice-test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/cmp/field/record/releaseNotes/assets/voice-test.png -------------------------------------------------------------------------------- /packages/cmp/field/record/stream.ts: -------------------------------------------------------------------------------- 1 | let stream: MediaStream | null = null; 2 | 3 | /** 4 | * @param config configuration for the stream 5 | * @returns a promise with the stream 6 | */ 7 | export const getStream = async (config: MediaStreamConstraints = {audio: true}): Promise => { 8 | if (!stream) { 9 | stream = await navigator.mediaDevices.getUserMedia(config); 10 | } 11 | return stream; 12 | }; 13 | /** 14 | * Stop all streams 15 | */ 16 | export const stopAllStreams = () => { 17 | if (stream) { 18 | stream.getTracks().forEach((track) => { 19 | track.stop(); 20 | }); 21 | stream = null; 22 | } 23 | }; -------------------------------------------------------------------------------- /packages/cmp/field/select-input.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import {LappFilledSelectInput} from './select/filled-select-input.js'; 4 | import '@material/web/select/select-option.js' 5 | 6 | declare global { 7 | interface HTMLElementTagNameMap { 8 | 'lapp-select-input': LappSelectInput; 9 | } 10 | } 11 | 12 | /** 13 | * @final 14 | * @suppress {visibility} 15 | */ 16 | @customElement('lapp-select-input') 17 | export class LappSelectInput extends LappFilledSelectInput { 18 | 19 | } 20 | -------------------------------------------------------------------------------- /packages/cmp/field/select.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import {LappFilledSelect} from './select/filled-select'; 4 | import '@material/web/select/select-option.js' 5 | 6 | 7 | declare global { 8 | interface HTMLElementTagNameMap { 9 | 'lapp-select': LappSelect; 10 | } 11 | } 12 | 13 | /** 14 | * @final 15 | * @suppress {visibility} 16 | */ 17 | @customElement('lapp-select') 18 | export class LappSelect extends LappFilledSelect { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /packages/cmp/field/select/filledStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | :host([variant='a11y']) { 4 | --md-filled-field-label-text-populated-line-height: 0.2rem; 5 | } 6 | 7 | `; 8 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/select/internal/filled-select-input.ts: -------------------------------------------------------------------------------- 1 | import '../../field/filled-field.js'; 2 | 3 | import {literal} from 'lit/static-html.js'; 4 | 5 | import {SelectInput} from './select-input.js'; 6 | 7 | export abstract class FilledSelectInput extends SelectInput { 8 | protected readonly fieldTag = literal`lapp-filled-field`; 9 | } 10 | -------------------------------------------------------------------------------- /packages/cmp/field/select/internal/filled-select.ts: -------------------------------------------------------------------------------- 1 | import '../../field/filled-field.js'; 2 | 3 | import {literal} from 'lit/static-html.js'; 4 | 5 | import {Select} from './select.js'; 6 | 7 | export abstract class FilledSelect extends Select { 8 | protected override readonly fieldTag = literal`lapp-filled-field`; 9 | } 10 | -------------------------------------------------------------------------------- /packages/cmp/field/select/internal/outlined-select-input.ts: -------------------------------------------------------------------------------- 1 | import '../../field/filled-field.js'; 2 | 3 | import {literal} from 'lit/static-html.js'; 4 | 5 | import {SelectInput} from './select-input.js'; 6 | 7 | export abstract class OutlinedSelectInput extends SelectInput { 8 | protected readonly fieldTag = literal`lapp-outlined-field`; 9 | } 10 | -------------------------------------------------------------------------------- /packages/cmp/field/select/internal/outlined-select.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2023 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import '../../field/outlined-field.js'; 8 | import {literal} from 'lit/static-html.js'; 9 | 10 | import {Select} from './select.js'; 11 | 12 | // tslint:disable-next-line:enforce-comments-on-exported-symbols 13 | export abstract class OutlinedSelect extends Select { 14 | protected readonly fieldTag = literal`lapp-outlined-field`; 15 | } 16 | -------------------------------------------------------------------------------- /packages/cmp/field/select/internal/selectInputStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | #label { 5 | line-height: 0px; 6 | display: flex; 7 | align-items: center; 8 | } 9 | 10 | #label input { 11 | all: inherit; 12 | flex: 1; 13 | padding: 0px; 14 | padding-block: 0px; 15 | padding-inline: 0px; 16 | line-height: 1.5rem; 17 | cursor: text; 18 | } 19 | 20 | md-chip-set { 21 | flex: 0; 22 | } 23 | 24 | md-input-chip:last-of-type { 25 | margin-inline-end: 6px; 26 | } 27 | 28 | md-menu { 29 | min-width: 0; 30 | width: 0; 31 | } 32 | 33 | 34 | 35 | `; 36 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/select/outlinedStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/slider-field.ts: -------------------------------------------------------------------------------- 1 | 2 | import { customElement } from 'lit/decorators.js'; 3 | 4 | import { LappFilledSlider } from './slider/filled-slider'; 5 | 6 | declare global { 7 | interface HTMLElementTagNameMap { 8 | 'lapp-slider-field': LappSliderField; 9 | } 10 | } 11 | 12 | /** 13 | * # Slider 14 | * 15 | * @summary 16 | * slider is a component that display allow to register a slider and store it locally. 17 | 18 | * @final 19 | */ 20 | @customElement('lapp-slider-field') 21 | export class LappSliderField extends LappFilledSlider { 22 | 23 | } 24 | 25 | -------------------------------------------------------------------------------- /packages/cmp/field/slider-range-field.ts: -------------------------------------------------------------------------------- 1 | 2 | import { customElement, property } from 'lit/decorators.js'; 3 | 4 | import { LappSliderField } from './slider-field'; 5 | 6 | declare global { 7 | interface HTMLElementTagNameMap { 8 | 'lapp-slider-range-field': LappSliderRangeField; 9 | } 10 | } 11 | 12 | /** 13 | * # Slider 14 | * 15 | * @summary 16 | * slider is a component that display allow to register a slider and store it locally. 17 | 18 | * @final 19 | */ 20 | @customElement('lapp-slider-range-field') 21 | export class LappSliderRangeField extends LappSliderField { 22 | @property({type: Boolean}) range = true; 23 | } 24 | 25 | -------------------------------------------------------------------------------- /packages/cmp/field/slider/filledStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/slider/internal/filled-slider.ts: -------------------------------------------------------------------------------- 1 | import '../../field/filled-field.js'; 2 | import {literal} from 'lit/static-html.js'; 3 | 4 | import {Slider} from './slider'; 5 | 6 | /** 7 | * An filled text field component 8 | */ 9 | export class FilledSlider extends Slider { 10 | protected override readonly fieldTag = literal`lapp-filled-field`; 11 | } 12 | -------------------------------------------------------------------------------- /packages/cmp/field/slider/internal/outlined-slider.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | import '../../field/outlined-field.js'; 4 | import {literal} from 'lit/static-html.js'; 5 | 6 | import {Slider} from './slider'; 7 | 8 | /** 9 | * An outlined text field component 10 | */ 11 | export class OutlinedSlider extends Slider { 12 | protected override readonly fieldTag = literal`lapp-outlined-field`; 13 | } 14 | -------------------------------------------------------------------------------- /packages/cmp/field/slider/outlinedStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/slider/releaseNotes/assets/slider-edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/cmp/field/slider/releaseNotes/assets/slider-edit.png -------------------------------------------------------------------------------- /packages/cmp/field/slider/releaseNotes/assets/slider-range.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/cmp/field/slider/releaseNotes/assets/slider-range.png -------------------------------------------------------------------------------- /packages/cmp/field/slider/releaseNotes/assets/slider-select-range.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/cmp/field/slider/releaseNotes/assets/slider-select-range.png -------------------------------------------------------------------------------- /packages/cmp/field/slider/releaseNotes/assets/slider-simple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/cmp/field/slider/releaseNotes/assets/slider-simple.png -------------------------------------------------------------------------------- /packages/cmp/field/slider/sharedStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | lapp-slider { 5 | flex: 1; 6 | margin-block-start: 10px; 7 | } 8 | 9 | label { 10 | line-height: 0px; 11 | display: flex; 12 | align-items: center; 13 | } 14 | 15 | 16 | 17 | `; 18 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/switch-field.ts: -------------------------------------------------------------------------------- 1 | 2 | import { customElement } from 'lit/decorators.js'; 3 | import { LappFilledSwitch } from './switch/filled-switch'; 4 | 5 | declare global { 6 | interface HTMLElementTagNameMap { 7 | 'lapp-switch-field': LappSwitchField; 8 | } 9 | } 10 | 11 | /** 12 | * # Switch 13 | * 14 | * @summary 15 | * Switch is a component that display allow to register a Switch and store it locally. 16 | 17 | * @final 18 | */ 19 | @customElement('lapp-switch-field') 20 | export class LappSwitchField extends LappFilledSwitch { 21 | 22 | } 23 | 24 | -------------------------------------------------------------------------------- /packages/cmp/field/switch/filledStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/switch/internal/filled-switch.ts: -------------------------------------------------------------------------------- 1 | import { literal } from 'lit/static-html.js'; 2 | import '../../field/filled-field.js'; 3 | 4 | import { Switch } from './switch.js'; 5 | 6 | /** 7 | * An filled text field component 8 | */ 9 | export class FilledSwitch extends Switch { 10 | protected override readonly fieldTag = literal`lapp-filled-field`; 11 | } 12 | -------------------------------------------------------------------------------- /packages/cmp/field/switch/internal/outline-switch.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | import { literal } from 'lit/static-html.js'; 4 | import '../../field/outlined-field.js'; 5 | 6 | import { Switch } from './switch.js'; 7 | 8 | /** 9 | * An outlined text field component 10 | */ 11 | export class OutlinedSwitch extends Switch { 12 | protected override readonly fieldTag = literal`lapp-outlined-field`; 13 | } 14 | -------------------------------------------------------------------------------- /packages/cmp/field/switch/outlinedStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/switch/sharedStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | label { 4 | // padding-top: var(--_with-label-top-space); 5 | display: flex; 6 | align-items: center; 7 | } 8 | `; 9 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/text-field.ts: -------------------------------------------------------------------------------- 1 | // TODO: import from lapp-textfield and remove lapp-textfield 2 | import {customElement} from 'lit/decorators.js'; 3 | 4 | import { LappFilledTextField } from './textfield/filled-text-field.js'; 5 | 6 | declare global { 7 | interface HTMLElementTagNameMap { 8 | 'lapp-text-field': LappTextfield; 9 | } 10 | } 11 | 12 | /** 13 | * @final 14 | * @suppress {visibility} 15 | */ 16 | @customElement('lapp-text-field') 17 | export class LappTextfield extends LappFilledTextField { 18 | 19 | } 20 | -------------------------------------------------------------------------------- /packages/cmp/field/textfield/filledStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/textfield/internal/filled-text-field.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2023 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import '../../field/filled-field.js'; 8 | 9 | import {literal} from 'lit/static-html.js'; 10 | 11 | import {TextField} from './text-field.js'; 12 | 13 | 14 | // tslint:disable-next-line:enforce-comments-on-exported-symbols 15 | export abstract class FilledTextField extends TextField { 16 | protected override readonly fieldTag = literal`lapp-filled-field`; 17 | } 18 | -------------------------------------------------------------------------------- /packages/cmp/field/textfield/internal/outlined-text-field.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2023 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import '../../field/outlined-field.js'; 8 | import {literal} from 'lit/static-html.js'; 9 | 10 | import {TextField} from './text-field.js'; 11 | 12 | // tslint:disable-next-line:enforce-comments-on-exported-symbols 13 | export abstract class OutlinedTextField extends TextField { 14 | protected readonly fieldTag = literal`lapp-outlined-field`; 15 | } 16 | -------------------------------------------------------------------------------- /packages/cmp/field/textfield/outlinedStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/upload.ts: -------------------------------------------------------------------------------- 1 | 2 | import { customElement } from 'lit/decorators.js'; 3 | 4 | import { LappFilledUpload } from './upload/filled-upload'; 5 | 6 | declare global { 7 | interface HTMLElementTagNameMap { 8 | 'lapp-upload': LappUpload; 9 | } 10 | } 11 | 12 | /** 13 | * # Slider 14 | * 15 | * @summary 16 | * slider is a component that display allow to register a slider and store it locally. 17 | 18 | * @final 19 | */ 20 | @customElement('lapp-upload') 21 | export class LappUpload extends LappFilledUpload { 22 | 23 | } 24 | 25 | -------------------------------------------------------------------------------- /packages/cmp/field/upload/filledStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/field/upload/internal/filled-upload.ts: -------------------------------------------------------------------------------- 1 | import '../../field/filled-field.js'; 2 | import {literal} from 'lit/static-html.js'; 3 | 4 | import {Upload} from './upload'; 5 | 6 | /** 7 | * An filled text field component 8 | */ 9 | export class FilledUpload extends Upload { 10 | protected override readonly fieldTag = literal`lapp-filled-field`; 11 | } 12 | -------------------------------------------------------------------------------- /packages/cmp/field/upload/internal/outlined-upload.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | import '../../field/outlined-field.js'; 4 | import {literal} from 'lit/static-html.js'; 5 | 6 | import {Upload} from './upload'; 7 | 8 | /** 9 | * An outlined text field component 10 | */ 11 | export class OutlinedUpload extends Upload { 12 | protected override readonly fieldTag = literal`lapp-outlined-field`; 13 | } 14 | -------------------------------------------------------------------------------- /packages/cmp/field/upload/outlinedStyles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/icon/icon.ts: -------------------------------------------------------------------------------- 1 | import { customElement } from 'lit/decorators.js'; 2 | 3 | import { Icon } from './internal/icon.js'; 4 | import { MdIcon } from '@material/web/icon/icon.js' 5 | import styles from './internal/icon-styles.js'; 6 | 7 | declare global { 8 | interface HTMLElementTagNameMap { 9 | 'lapp-icon': LappIcon; 10 | } 11 | } 12 | 13 | /** 14 | * @final 15 | * @suppress {visibility} 16 | */ 17 | @customElement('lapp-icon') 18 | export class LappIcon extends Icon { 19 | static override styles = [ 20 | MdIcon.styles, 21 | styles 22 | ]; 23 | } -------------------------------------------------------------------------------- /packages/cmp/icon/internal/icon-styles.ts: -------------------------------------------------------------------------------- 1 | import { css, CSSResult } from 'lit'; 2 | const styles: CSSResult = css` 3 | :host { 4 | --_lapp-icon-margin: var(--lapp-icon-margin, 0px); 5 | } 6 | 7 | svg { 8 | all: unset; 9 | height: calc(100% - 2 * var(--_lapp-icon-margin)); 10 | width: calc(100% - 2 * var(--_lapp-icon-margin)); 11 | fill: currentColor; 12 | margin: var(--_lapp-icon-margin); 13 | } 14 | 15 | path { 16 | fill: currentColor; 17 | } 18 | slot { 19 | display: none; 20 | } 21 | ` 22 | 23 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/locale.mjs: -------------------------------------------------------------------------------- 1 | export * from './field/locale.mjs'; 2 | export * from './feedback/locale.mjs'; -------------------------------------------------------------------------------- /packages/cmp/process/process.ts: -------------------------------------------------------------------------------- 1 | 2 | import { customElement } from 'lit/decorators.js'; 3 | 4 | import styles from './styles'; 5 | import { Process } from './internal/process'; 6 | 7 | declare global { 8 | interface HTMLElementTagNameMap { 9 | 'lapp-process': LappProcess; 10 | } 11 | } 12 | 13 | /** 14 | * Process 15 | * 16 | * An element that display a process reflecting 17 | * the progress of a task. 18 | * @final 19 | */ 20 | @customElement('lapp-process') 21 | export class LappProcess extends Process { 22 | static override styles = [ 23 | styles, 24 | ]; 25 | } 26 | -------------------------------------------------------------------------------- /packages/cmp/process/styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from 'lit'; 2 | const styles = css` 3 | 4 | `; 5 | export default styles; -------------------------------------------------------------------------------- /packages/cmp/public/README.md: -------------------------------------------------------------------------------- 1 | [![Netlify Status](https://api.netlify.com/api/v1/badges/def2b202-3a80-469d-9dbc-fc259cc1e712/deploy-status)](https://app.netlify.com/sites/vite-lit-starter/deploys) 2 | 3 | # My-Element title 4 | 5 | This project includes a sample component using LitElement with JavaScript. 6 | 7 | ## Demo 8 | 9 | 10 | ## API 11 | 12 | 13 | ## DOCs 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /packages/cmp/public/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #fafafa; 3 | margin: 0; 4 | } 5 | 6 | body, 7 | html { 8 | font-family: 'Roboto', 'Noto', sans-serif; 9 | } 10 | 11 | :root {} -------------------------------------------------------------------------------- /packages/cmp/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /packages/cmp/public/theme.css: -------------------------------------------------------------------------------- 1 | /home/christophe/Programming/preignition/a14y/public/theme.css -------------------------------------------------------------------------------- /packages/cmp/public/variables.css: -------------------------------------------------------------------------------- 1 | /home/christophe/Programming/preignition/a14y/public/variables.css -------------------------------------------------------------------------------- /packages/cmp/renderer/date.ts: -------------------------------------------------------------------------------- 1 | import { html } from 'lit'; 2 | 3 | /** 4 | * Renders a date value as a formatted string. 5 | * 6 | * @param timestamp - The timestamp to render. 7 | * @returns The HTML element representing the formatted date. 8 | */ 9 | export default (timestamp: number | undefined | null) => { 10 | if (!timestamp) 11 | return html`-`; 12 | return html`${(new Date(timestamp)).toLocaleDateString(undefined, { dateStyle: 'medium' })}`; 13 | }; 14 | -------------------------------------------------------------------------------- /packages/cmp/role/internal/README.md: -------------------------------------------------------------------------------- 1 | # ROLE 2 | 3 | A series of components to set user roles and permissions: 4 | - ``: set user role 5 | - ``: set user permission 6 | - ``: a list of users with their roles and permissions -------------------------------------------------------------------------------- /packages/cmp/tabs/internal/styles.ts: -------------------------------------------------------------------------------- 1 | import { css, CSSResult } from 'lit'; 2 | 3 | export const styles: CSSResult = css` 4 | .content:not(.show-close-icon) ::slotted(md-icon-button) { 5 | display: none; 6 | } 7 | .content.show-close-icon ::slotted(lapp-icon) { 8 | display: none; 9 | } 10 | `; 11 | -------------------------------------------------------------------------------- /packages/cmp/tabs/primary-tab-closable.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | import Closable from './internal/closable-tab-mixin.js'; 3 | import {MdPrimaryTab} from '@material/web/tabs/primary-tab.js'; 4 | import { styles } from './internal/styles'; 5 | 6 | declare global { 7 | interface HTMLElementTagNameMap { 8 | 'lapp-primary-tab-closable': LappClosableTab; 9 | } 10 | } 11 | 12 | @customElement('lapp-primary-tab-closable') 13 | export class LappClosableTab extends Closable(MdPrimaryTab) { 14 | static override styles = [...MdPrimaryTab.styles, styles]; 15 | } 16 | -------------------------------------------------------------------------------- /packages/cmp/tabs/secondary-tab-closable.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | import Closable from './internal/closable-tab-mixin.js'; 3 | import {MdSecondaryTab} from '@material/web/tabs/secondary-tab.js'; 4 | import { styles } from './internal/styles'; 5 | 6 | declare global { 7 | interface HTMLElementTagNameMap { 8 | 'lapp-secondary-tab-closable': LappClosableTab; 9 | } 10 | } 11 | 12 | @customElement('lapp-secondary-tab-closable') 13 | export class LappClosableTab extends Closable(MdSecondaryTab) { 14 | static override styles = [...MdSecondaryTab.styles, styles]; 15 | } 16 | -------------------------------------------------------------------------------- /packages/cmp/toolbar/README.md: -------------------------------------------------------------------------------- 1 | # Toolbar Component 2 | 3 | A toolbar component that properly manages focus and accessibility. 4 | 5 | It follow the pattern of the [WAI-ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/patterns/toolbar/) for a toolbar. 6 | 7 | It uses @material/list-controller to manage the focus and the selection of the items. 8 | 9 | -------------------------------------------------------------------------------- /packages/cmp/tooltip/README.md: -------------------------------------------------------------------------------- 1 | # Tooltip 2 | 3 | Tooltip implementation. For the time being, it just a re-import of pwi-tooltip under a different name. 4 | 5 | ## TODO 6 | 7 | - [ ] improve accessibility of the tooltip - see `vaadin-tooltip` and use of `aria-describedby` 8 | - [ ] avoid slotting the tooltip content, an id / for relationship would be better 9 | - [ ] replace all pwi-tooltip elements with lapp-tooltip 10 | - [ ] replace all pwi-form-tooltip with lapp-tooltip in the code 11 | - [ ] replace all pwi-firebase tooltip with lapp-tooltip in the code 12 | - [ ] remove pwi-tooltip from package 13 | 14 | -------------------------------------------------------------------------------- /packages/cmp/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "paths": { 5 | "lit": [ 6 | "./node_modules/lit" 7 | ] 8 | } 9 | }, 10 | "include": ["./**/*.ts"], 11 | "exclude": [] 12 | } 13 | -------------------------------------------------------------------------------- /packages/cmp/types.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/cmp/types.ts -------------------------------------------------------------------------------- /packages/cmp/upload/internals/normalizeFile.ts: -------------------------------------------------------------------------------- 1 | import { UploadFile } from "@vaadin/upload/vaadin-lit-upload.js"; 2 | 3 | export function normalizeFile(file: UploadFile): UploadFile & { timestamp: string } { 4 | return { 5 | ...file, 6 | lastModified: file.lastModified || 0, 7 | name: file.name || '', 8 | size: file.size || 0, 9 | type: file.type || '', 10 | timestamp: new Date().toISOString() 11 | } as UploadFile & { timestamp: string } 12 | } -------------------------------------------------------------------------------- /packages/cmp/user/README.md: -------------------------------------------------------------------------------- 1 | # User 2 | 3 | Components for user display: 4 | 5 | - ``: display user image 6 | - ``: display user name 7 | - ``: display a user card with image and name 8 | - ``: select / search a user from a list 9 | - ``: display a list of users 10 | 11 | ## TODO 12 | 13 | - [ ] adapt user-select and base it from search component 14 | - [ ] make this a standalone package: 15 | - [ ] remove firebase dependency 16 | -------------------------------------------------------------------------------- /packages/cmp/user/card.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import { UserCard } from './internal/card.js'; 4 | 5 | declare global { 6 | interface HTMLElementTagNameMap { 7 | 'lapp-user-card': LappUserCard; 8 | } 9 | } 10 | 11 | /** 12 | * An element to display user card when provided with uid 13 | */ 14 | @customElement('lapp-user-card') 15 | export class LappUserCard extends UserCard { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /packages/cmp/user/img-list.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import { UserImgList } from './internal/img-list.js'; 4 | 5 | declare global { 6 | interface HTMLElementTagNameMap { 7 | 'lapp-user-img-list': LappUserImg; 8 | } 9 | } 10 | 11 | /** 12 | * An element to display users with a list of images 13 | */ 14 | @customElement('lapp-user-img-list') 15 | export class LappUserImg extends UserImgList { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /packages/cmp/user/img.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import { UserImg } from './internal/img.js'; 4 | 5 | declare global { 6 | interface HTMLElementTagNameMap { 7 | 'lapp-user-img': LappUserImg; 8 | } 9 | } 10 | 11 | /** 12 | * An element to display user image when provided with uid 13 | */ 14 | @customElement('lapp-user-img') 15 | export class LappUserImg extends UserImg { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /packages/cmp/user/internal/card.ts: -------------------------------------------------------------------------------- 1 | import userItemMixin from './user-item-mixin.js'; 2 | import { MdListItem } from '@material/web/list/list-item.js'; 3 | import('@material/web/list/list-item.js'); 4 | 5 | /** 6 | * A card widget to display user information 7 | */ 8 | 9 | export class UserCard extends userItemMixin(MdListItem) { 10 | 11 | 12 | } 13 | -------------------------------------------------------------------------------- /packages/cmp/user/internal/select-item.ts: -------------------------------------------------------------------------------- 1 | import userItemMixin from './user-item-mixin.js'; 2 | import { MdSelectOption } from '@material/web/select/select-option.js'; 3 | import('@material/web/select/select-option.js'); 4 | 5 | /** 6 | * A card widget to display user information 7 | */ 8 | 9 | export class UserSelectItem extends userItemMixin(MdSelectOption ) { 10 | 11 | 12 | 13 | 14 | } 15 | -------------------------------------------------------------------------------- /packages/cmp/user/invite-list.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import { InviteList } from './internal/invite-list.js'; 4 | 5 | declare global { 6 | interface HTMLElementTagNameMap { 7 | 'lapp-invite-list': LappInviteList; 8 | } 9 | } 10 | 11 | /** 12 | * An element to display user list when provided with uid 13 | */ 14 | @customElement('lapp-invite-list') 15 | export class LappInviteList extends InviteList { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /packages/cmp/user/list.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import { UserList } from './internal/list.js'; 4 | 5 | declare global { 6 | interface HTMLElementTagNameMap { 7 | 'lapp-user-list': LappUserList; 8 | } 9 | } 10 | 11 | /** 12 | * An element to display user list when provided with uid 13 | */ 14 | @customElement('lapp-user-list') 15 | export class LappUserList extends UserList { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /packages/cmp/user/name.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import { UserName } from './internal/name.js'; 4 | 5 | declare global { 6 | interface HTMLElementTagNameMap { 7 | 'lapp-user-name': LappUserName; 8 | } 9 | } 10 | 11 | /** 12 | * An element to display user name when provided with uid 13 | */ 14 | @customElement('lapp-user-name') 15 | export class LappUserName extends UserName { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /packages/cmp/user/quote.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import { UserQuote } from './internal/quote.js'; 4 | 5 | declare global { 6 | interface HTMLElementTagNameMap { 7 | 'lapp-user-quote': LappUserQuote; 8 | } 9 | } 10 | 11 | /** 12 | * An element to display user image when provided with uid 13 | */ 14 | @customElement('lapp-user-quote') 15 | export class LappUserQuote extends UserQuote { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /packages/cmp/user/search.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import { UserSearch } from './internal/search.js'; 4 | 5 | declare global { 6 | interface HTMLElementTagNameMap { 7 | 'lapp-user-search': LappUserSearch; 8 | } 9 | } 10 | 11 | /** 12 | * An element to display user select when provided with uid 13 | */ 14 | @customElement('lapp-user-search') 15 | export class LappUserSearch extends UserSearch { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /packages/cmp/user/select-item.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import { UserSelectItem } from './internal/select-item.js'; 4 | 5 | declare global { 6 | interface HTMLElementTagNameMap { 7 | 'lapp-user-select-item': LappUserSelectItem; 8 | } 9 | } 10 | 11 | /** 12 | * An element to display user card when provided with uid 13 | */ 14 | @customElement('lapp-user-select-item') 15 | export class LappUserSelectItem extends UserSelectItem { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /packages/cmp/user/spotlight.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import { UserSpotlight } from './internal/spotlight'; 4 | 5 | declare global { 6 | interface HTMLElementTagNameMap { 7 | 'lapp-user-spotlight': LappUserSpotlight; 8 | } 9 | } 10 | 11 | /** 12 | * An element to display user spotlight when provided with uid 13 | */ 14 | @customElement('lapp-user-spotlight') 15 | export class LappUserSpotlight extends UserSpotlight { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /packages/cmp/user/thread.ts: -------------------------------------------------------------------------------- 1 | import {customElement} from 'lit/decorators.js'; 2 | 3 | import { UserThread } from './internal/thread'; 4 | 5 | declare global { 6 | interface HTMLElementTagNameMap { 7 | 'lapp-user-thread': LappUserThread; 8 | } 9 | } 10 | 11 | /** 12 | * A card like container with an avatar on the left 13 | */ 14 | @customElement('lapp-user-thread') 15 | export class LappUserThread extends UserThread { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /packages/entity/LabelM.ts: -------------------------------------------------------------------------------- 1 | export interface LabelUI { 2 | /** 3 | * The title of the label 4 | */ 5 | title: string 6 | description?: StringConstructor 7 | /** 8 | * starred labels have priority 9 | */ 10 | starred?: boolean 11 | /** 12 | * background color of the label 13 | */ 14 | color?: string 15 | } 16 | 17 | export interface LabelI extends LabelUI { 18 | } 19 | 20 | 21 | -------------------------------------------------------------------------------- /packages/entity/README.md: -------------------------------------------------------------------------------- 1 | # Entity 2 | 3 | A package that provides a base class for entities to be shared across different applications. 4 | -------------------------------------------------------------------------------- /packages/entity/demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | router-slot 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /packages/entity/locale.mjs: -------------------------------------------------------------------------------- 1 | // export * from './field/locale.mjs'; -------------------------------------------------------------------------------- /packages/entity/public/README.md: -------------------------------------------------------------------------------- 1 | [![Netlify Status](https://api.netlify.com/api/v1/badges/def2b202-3a80-469d-9dbc-fc259cc1e712/deploy-status)](https://app.netlify.com/sites/vite-lit-starter/deploys) 2 | 3 | # My-Element title 4 | 5 | This project includes a sample component using LitElement with JavaScript. 6 | 7 | ## Demo 8 | 9 | 10 | ## API 11 | 12 | 13 | ## DOCs 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /packages/entity/public/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #fafafa; 3 | margin: 0; 4 | } 5 | 6 | body, 7 | html { 8 | font-family: 'Roboto', 'Noto', sans-serif; 9 | } 10 | 11 | :root {} -------------------------------------------------------------------------------- /packages/entity/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /packages/entity/public/theme.css: -------------------------------------------------------------------------------- 1 | /home/christophe/Programming/preignition/a14y/public/theme.css -------------------------------------------------------------------------------- /packages/entity/public/variables.css: -------------------------------------------------------------------------------- 1 | /home/christophe/Programming/preignition/a14y/public/variables.css -------------------------------------------------------------------------------- /packages/entity/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "paths": { 5 | "lit": [ 6 | "./node_modules/lit" 7 | ] 8 | 9 | } 10 | }, 11 | "include": ["./**/*.ts"], 12 | "exclude": [] 13 | } 14 | -------------------------------------------------------------------------------- /packages/entity/types.ts: -------------------------------------------------------------------------------- 1 | 2 | export interface UserPreferenceI { 3 | theme?: string 4 | language?: string 5 | shortcut: { 6 | team: string[] 7 | } 8 | } -------------------------------------------------------------------------------- /packages/form/context-form.ts: -------------------------------------------------------------------------------- 1 | export * from './src/context-form'; -------------------------------------------------------------------------------- /packages/form/demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | FORM 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /packages/form/form.ts: -------------------------------------------------------------------------------- 1 | export * from './src/form'; -------------------------------------------------------------------------------- /packages/form/index.ts: -------------------------------------------------------------------------------- 1 | export { ConsumeFormMixin, } from './src/context-form'; 2 | export { BindFieldEvent, UnbindFieldEvent } from './src/form'; 3 | import './src/form'; 4 | -------------------------------------------------------------------------------- /packages/form/locale.mjs: -------------------------------------------------------------------------------- 1 | // export * from './field/locale.mjs'; -------------------------------------------------------------------------------- /packages/form/public/README.md: -------------------------------------------------------------------------------- 1 | [![Netlify Status](https://api.netlify.com/api/v1/badges/def2b202-3a80-469d-9dbc-fc259cc1e712/deploy-status)](https://app.netlify.com/sites/vite-lit-starter/deploys) 2 | 3 | # My-Element title 4 | 5 | This project includes a sample component using LitElement with JavaScript. 6 | 7 | ## Demo 8 | 9 | 10 | ## API 11 | 12 | 13 | ## DOCs 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /packages/form/public/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #fafafa; 3 | margin: 0; 4 | } 5 | 6 | body, 7 | html { 8 | font-family: 'Roboto', 'Noto', sans-serif; 9 | } 10 | 11 | :root {} -------------------------------------------------------------------------------- /packages/form/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /packages/form/public/theme.css: -------------------------------------------------------------------------------- 1 | /home/christophe/Programming/preignition/a14y/public/theme.css -------------------------------------------------------------------------------- /packages/form/public/variables.css: -------------------------------------------------------------------------------- 1 | /home/christophe/Programming/preignition/a14y/public/variables.css -------------------------------------------------------------------------------- /packages/form/src/types.ts: -------------------------------------------------------------------------------- 1 | import { ConstraintValidation } from "@material/web/labs/behaviors/constraint-validation.js"; 2 | 3 | export type MimeTypesT = "application/x-www-form-urlencoded" | "multipart/form-data" | "text/plain"; 4 | // export type FormMethodT = 'get' | 'post'; 5 | 6 | export interface FormFieldI extends ConstraintValidation { 7 | focus(options?: FocusOptions): void; 8 | blur(): void; 9 | } 10 | -------------------------------------------------------------------------------- /packages/form/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | 5 | }, 6 | "include": ["./**/*.ts"], 7 | "exclude": [] 8 | } 9 | -------------------------------------------------------------------------------- /packages/location/locale.mjs: -------------------------------------------------------------------------------- 1 | // export * from './field/locale.mjs'; -------------------------------------------------------------------------------- /packages/location/public/README.md: -------------------------------------------------------------------------------- 1 | # Documentation for the location package 2 | 3 | Flags have been downloaded from https://alexsobolenko.github.io/flag-icons/ 4 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/are.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/arm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/aut.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/aze.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/bel.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/ben.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/bes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/bfa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/bgd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/bgr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/bhr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/bwa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/cat.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/che.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/civ.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/cod.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/cog.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/col.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/cri.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/cze.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/deu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/dnk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/dza.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/eng.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/est.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/fin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/fra.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/fro.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/gab.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/gha.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/gin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/gmb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/grl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/guf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/guy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/hun.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/idn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/irl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/isl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/ita.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/jam.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/jpn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/kwt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/lao.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/lby.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/lca.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/ltu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/lux.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/lva.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/mar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/mco.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/mdg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/mdv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/mkd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/mli.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/mrt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/mus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/ner.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/nga.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/nld.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/nor.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/plw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/pol.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/pse.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/qat.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/reu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/rou.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/rus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/sco.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/sdn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/sen.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/sjm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/sle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/som.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/ssd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/sur.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/syr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/tcd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/tha.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/ton.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/tto.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/tur.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/ukr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/vct.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/vnm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/wlf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/1x1/yem.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/are.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/arm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/aut.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/aze.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/bel.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/ben.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/bes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/bfa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/bgd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/bgr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/bhr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/bhs.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/bwa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/cat.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/che.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/chl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/civ.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/cod.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/cog.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/col.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/cri.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/cze.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/deu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/dnk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/dza.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/eng.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/est.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/fin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/fra.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/fro.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/gab.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/gha.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/gin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/gmb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/grl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/guf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/guy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/hun.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/idn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/irl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/isl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/ita.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/jam.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/jpn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/kwt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/lao.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/lby.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/lca.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/ltu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/lux.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/lva.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/mar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/mco.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/mdg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/mdv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/mkd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/mli.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/mrt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/mus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/ner.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/nga.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/nld.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/nor.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/plw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/pol.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/qat.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/reu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/rou.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/rus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/sco.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/sdn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/sen.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/sjm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/sle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/som.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/ssd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/sur.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/syr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/tcd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/tha.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/ton.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/tto.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/tur.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/tza.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/ukr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/vct.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/vnm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/wlf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/flags/4x3/yem.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/location/public/fonts: -------------------------------------------------------------------------------- 1 | /home/christophe/Programming/preignition/a14y/public/fonts -------------------------------------------------------------------------------- /packages/location/public/i18n/continent/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "AFR": "Africa", 3 | "ANT": "Antarctica", 4 | "ASI": "Asia", 5 | "EUR": "Europe", 6 | "NOA": "North America", 7 | "OCE": "Oceania", 8 | "LAC": "Latin America and the Caribbean" 9 | } -------------------------------------------------------------------------------- /packages/location/public/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #fafafa; 3 | margin: 0; 4 | } 5 | 6 | body, 7 | html { 8 | font-family: 'Roboto', 'Noto', sans-serif; 9 | } 10 | 11 | :root {} -------------------------------------------------------------------------------- /packages/location/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /packages/location/public/theme.css: -------------------------------------------------------------------------------- 1 | /home/christophe/Programming/preignition/a14y/public/theme.css -------------------------------------------------------------------------------- /packages/location/public/variables.css: -------------------------------------------------------------------------------- 1 | /home/christophe/Programming/preignition/a14y/public/variables.css -------------------------------------------------------------------------------- /packages/location/src/continent.json: -------------------------------------------------------------------------------- 1 | [ 2 | "AFR", 3 | "ANT", 4 | "ASI", 5 | "EUR", 6 | "NOA", 7 | "OCE", 8 | "LAC" 9 | ] -------------------------------------------------------------------------------- /packages/location/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "resolveJsonModule": true, 5 | "paths": { 6 | "lit": [ 7 | "./node_modules/lit" 8 | ] 9 | } 10 | }, 11 | "include": ["./**/*.ts", "*.ts"], 12 | "exclude": [] 13 | } 14 | -------------------------------------------------------------------------------- /packages/location/types.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/location/types.ts -------------------------------------------------------------------------------- /packages/model/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | src/**/*.js 16 | src/**/*.d.ts 17 | src/**/*.map 18 | 19 | public/docs/* 20 | public/README.md 21 | public/package.json 22 | 23 | # Editor directories and files 24 | .vscode/* 25 | !.vscode/extensions.json 26 | .idea 27 | .DS_Store 28 | *.suo 29 | *.ntvs* 30 | *.njsproj 31 | *.sln 32 | *.sw? 33 | -------------------------------------------------------------------------------- /packages/model/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # @lit-app/model Changelog 2 | 3 | ## [0.1.0] (14/11/2022) - unpublished 4 | 5 | Initial version 6 | 7 | Features: 8 | -------------------------------------------------------------------------------- /packages/model/entity-grid-provider.ts: -------------------------------------------------------------------------------- 1 | import './src/cmp/entity-grid-provider.js'; 2 | -------------------------------------------------------------------------------- /packages/model/src/mixin/context-app-id-mixin.ts: -------------------------------------------------------------------------------- 1 | import { createContext } from '@lit/context'; 2 | import { ContextMixinFactory } from '@lit-app/shared/context/context-mixin-factory.js'; 3 | 4 | export const appIdContext = createContext('app-id-context'); 5 | export const { 6 | ConsumeMixin: ConsumeAppIdMixin, 7 | ProvideMixin: ProvideAppIdMixin 8 | } = ContextMixinFactory<{appID: string}>(appIdContext, 'appID'); 9 | -------------------------------------------------------------------------------- /packages/model/src/mixin/context-doc-id-mixin.ts: -------------------------------------------------------------------------------- 1 | import { ContextMixinFactory } from '@lit-app/shared/context/context-mixin-factory.js'; 2 | import { createContext } from '@lit/context'; 3 | 4 | type DocIdT = string | undefined; 5 | export const docIdContext = createContext('doc-id-context'); 6 | export const { 7 | ConsumeMixin: ConsumeDocIdMixin, 8 | ProvideMixin: ProvideDocIdMixin 9 | } = ContextMixinFactory<{ docId: DocIdT }>(docIdContext, 'docId'); 10 | -------------------------------------------------------------------------------- /packages/model/src/types/communication.ts: -------------------------------------------------------------------------------- 1 | // PresentationI extends TeamUI because of the way data inherits prototype from parent data 2 | 3 | export interface CommunicationI { 4 | email: string 5 | replyTo: string 6 | signature: string 7 | footer: string 8 | } -------------------------------------------------------------------------------- /packages/model/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": { 4 | "lit": [ 5 | "./node_modules/lit" 6 | ], 7 | "@lit-app/cmp": [ 8 | "./node_modules/@lit-app/cmp" 9 | ], 10 | } 11 | }, 12 | "extends": "../../tsconfig.json", 13 | "include": [ 14 | "src/**/*.ts", 15 | "index.ts" 16 | ], 17 | "exclude": [] 18 | } -------------------------------------------------------------------------------- /packages/model/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | 3 | // https://vitejs.dev/config/ 4 | export default defineConfig({ 5 | build: { 6 | lib: { 7 | entry: 'src/index', 8 | name: 'state', 9 | formats: ['es'], 10 | fileName: 'index' 11 | }, 12 | rollupOptions: { 13 | external: /^lit/, 14 | output: { 15 | globals: { 16 | lit: 'lit' 17 | } 18 | } 19 | } 20 | }, 21 | test: { 22 | globals: true, 23 | environment: 'happy-dom', 24 | }, 25 | resolve: { 26 | dedupe: [ 27 | "lit" 28 | ] 29 | }, 30 | }); 31 | -------------------------------------------------------------------------------- /packages/plot/README.md: -------------------------------------------------------------------------------- 1 | # PLOT 2 | 3 | This is a package for a series of plot web-components that can be used in any web application. 4 | 5 | It is based on [Observable Plot](https://observablehq.com/@observablehq/plot) and [D3](https://d3js.org/). 6 | 7 | -------------------------------------------------------------------------------- /packages/plot/public/README.md: -------------------------------------------------------------------------------- 1 | [![Netlify Status](https://api.netlify.com/api/v1/badges/def2b202-3a80-469d-9dbc-fc259cc1e712/deploy-status)](https://app.netlify.com/sites/vite-lit-starter/deploys) 2 | 3 | # My-Element title 4 | 5 | This project includes a sample component using LitElement with JavaScript. 6 | 7 | ## Demo 8 | 9 | 10 | ## API 11 | 12 | 13 | ## DOCs 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /packages/plot/public/fonts: -------------------------------------------------------------------------------- 1 | /home/christophe/Programming/preignition/a14y/public/fonts -------------------------------------------------------------------------------- /packages/plot/public/images/material-symbols: -------------------------------------------------------------------------------- 1 | /home/christophe/Programming/preignition/app-dependencies/material-design-icons/symbols/web -------------------------------------------------------------------------------- /packages/plot/public/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #fafafa; 3 | margin: 0; 4 | } 5 | 6 | body, 7 | html { 8 | font-family: 'Roboto', 'Noto', sans-serif; 9 | } 10 | 11 | :root {} -------------------------------------------------------------------------------- /packages/plot/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /packages/plot/public/theme.css: -------------------------------------------------------------------------------- 1 | /home/christophe/Programming/preignition/a14y/public/theme.css -------------------------------------------------------------------------------- /packages/plot/public/variables.css: -------------------------------------------------------------------------------- 1 | /home/christophe/Programming/preignition/a14y/public/variables.css -------------------------------------------------------------------------------- /packages/plot/src/index.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/plot/src/index.ts -------------------------------------------------------------------------------- /packages/plot/src/myScheme.ts: -------------------------------------------------------------------------------- 1 | export default [ 2 | 'var(--plot-color-0)', 3 | 'var(--plot-color-1)', 4 | 'var(--plot-color-2)', 5 | 'var(--plot-color-3)', 6 | 'var(--plot-color-4)', 7 | 'var(--plot-color-5)', 8 | 'var(--plot-color-6)', 9 | 'var(--plot-color-7)', 10 | 'var(--plot-color-8)', 11 | 'var(--plot-color-9)', 12 | ] -------------------------------------------------------------------------------- /packages/plot/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | 5 | }, 6 | "include": ["./**/*.ts", "*.ts"], 7 | "exclude": [] 8 | } 9 | -------------------------------------------------------------------------------- /packages/plot/types.ts: -------------------------------------------------------------------------------- 1 | export type SeriesT = { 2 | label: string 3 | key: string 4 | } 5 | /** 6 | * Options for the plot 7 | */ 8 | export type OptionT = { 9 | height?: number 10 | title?: string 11 | subtitle?: string 12 | caption?: string 13 | items: SeriesT[] 14 | } 15 | -------------------------------------------------------------------------------- /packages/shared/a11y/index.ts: -------------------------------------------------------------------------------- 1 | export { announce } from './announce.js'; 2 | -------------------------------------------------------------------------------- /packages/shared/browser/README.md: -------------------------------------------------------------------------------- 1 | # Browser 2 | 3 | A collection of utilities for working with the browser. 4 | -------------------------------------------------------------------------------- /packages/shared/browser/index.ts: -------------------------------------------------------------------------------- 1 | export { hasTouchscreen } from './hasTouchscreen'; 2 | export { version as chromeVersion, is as isChrome } from './isChrome'; 3 | export { version as edgeVersion, is as isEdge } from './isEdge'; 4 | export { version as firefoxVersion, is as isFirefox } from './isFirefox'; 5 | export { is as isOpera, version as operaVersion } from './isOpera'; 6 | export { is as isSafari, version as safariVersion } from './isSafari'; 7 | -------------------------------------------------------------------------------- /packages/shared/browser/isChrome.ts: -------------------------------------------------------------------------------- 1 | function isChrome(): boolean { 2 | return !!navigator.userAgent.match(/Chrome/u) && !!navigator.vendor.match(/Google Inc/u); 3 | } 4 | 5 | function getVersion(): number | undefined { 6 | const version = navigator.userAgent.match(/Chrome\/([\d\.]+)/)?.[1]; 7 | return version ? parseFloat(version) : undefined; 8 | } 9 | 10 | const is = isChrome(); 11 | const version = getVersion(); 12 | export default is; 13 | export { is, version }; -------------------------------------------------------------------------------- /packages/shared/browser/isEdge.ts: -------------------------------------------------------------------------------- 1 | function isEdge(): boolean { 2 | return !!navigator.userAgent.match(/Edge/u) 3 | } 4 | function getVersion(): number | undefined { 5 | const version = navigator.userAgent.match(/Edge\/([\d\.]+)/)?.[1]; 6 | return version ? parseFloat(version) : undefined; 7 | } 8 | 9 | const is = isEdge(); 10 | const version = getVersion(); 11 | export default is; 12 | export { is, version }; -------------------------------------------------------------------------------- /packages/shared/browser/isFirefox.ts: -------------------------------------------------------------------------------- 1 | function isFirefox(): boolean { 2 | return !!navigator.userAgent.match(/Firefox/u) 3 | } 4 | function getVersion(): number | undefined { 5 | const version = navigator.userAgent.match(/Firefox\/([\d\.]+)/)?.[1]; 6 | return version ? parseFloat(version) : undefined; 7 | } 8 | 9 | const is = isFirefox(); 10 | const version = getVersion(); 11 | export default is; 12 | export { is, version }; -------------------------------------------------------------------------------- /packages/shared/browser/isOpera.ts: -------------------------------------------------------------------------------- 1 | function isOpera(): boolean { 2 | return !!navigator.userAgent.match(/Opera|OPR/u); 3 | } 4 | function getVersion(): number | undefined { 5 | const version = navigator.userAgent.match(/Opera|OPR\/([\d\.]+)/)?.[1]; 6 | return version ? parseFloat(version) : undefined; 7 | } 8 | 9 | const is = isOpera(); 10 | const version = getVersion(); 11 | export default is; 12 | export { is, version }; -------------------------------------------------------------------------------- /packages/shared/browser/isSafari.ts: -------------------------------------------------------------------------------- 1 | function isSafari(): boolean { 2 | return !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/) 3 | } 4 | function getVersion(): number | undefined { 5 | const version = navigator.userAgent.match(/Version\/([\d\.]+)/)?.[1]; 6 | return version ? parseFloat(version) : undefined; 7 | } 8 | 9 | const is = isSafari(); 10 | const version = getVersion(); 11 | export default is; 12 | export { is, version }; -------------------------------------------------------------------------------- /packages/shared/context/index.ts: -------------------------------------------------------------------------------- 1 | export {ContextMixinFactory} from './context-mixin-factory'; -------------------------------------------------------------------------------- /packages/shared/controller/index.ts: -------------------------------------------------------------------------------- 1 | export { HasScrollbar } from './hasScrollbar.js'; 2 | export { IsEndPage } from './isEndPage.js'; 3 | export { IsNarrow } from './isNarrow.js'; 4 | export { ResizeController } from './resizeController.js'; 5 | 6 | -------------------------------------------------------------------------------- /packages/shared/dataUtils/README.md: -------------------------------------------------------------------------------- 1 | # Data utils 2 | 3 | A couple of utility functions to help with data processing. 4 | 5 | function in this module are taken out from Vaadin Grid multi dataProvider -------------------------------------------------------------------------------- /packages/shared/dataUtils/index.ts: -------------------------------------------------------------------------------- 1 | export { cast } from './cast'; 2 | export { compare } from './compare'; 3 | export { deep, get, set } from './deep'; 4 | export { filter } from './filter'; 5 | 6 | -------------------------------------------------------------------------------- /packages/shared/dataUtils/normalizeEmptyValue.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Normalizes an empty value by converting undefined or null to an empty string. 3 | * If the value is NaN, it is converted to a string representation. 4 | * @param value - The value to be normalized. 5 | * @returns The normalized value. 6 | */ 7 | export default function normalizeEmptyValue(value : any): string { 8 | if ([undefined, null].indexOf(value) >= 0) { 9 | return ''; 10 | } else if (isNaN(value)) { 11 | return value.toString(); 12 | } else { 13 | return value; 14 | } 15 | } -------------------------------------------------------------------------------- /packages/shared/dd/index.ts: -------------------------------------------------------------------------------- 1 | export { DragMixin } from './drag-mixin.js'; 2 | export { DragStore } from './drag-store.js'; 3 | 4 | -------------------------------------------------------------------------------- /packages/shared/decorator/index.ts: -------------------------------------------------------------------------------- 1 | export { default as watch } from './watch.js'; 2 | -------------------------------------------------------------------------------- /packages/shared/directive/index.ts: -------------------------------------------------------------------------------- 1 | export { spread } from './spreadDirective'; 2 | -------------------------------------------------------------------------------- /packages/shared/domUtils/index.ts: -------------------------------------------------------------------------------- 1 | 2 | export { default as closest } from './closest.js'; 3 | export { default as closestWithFilter } from './closestWithFilter.js'; 4 | export { scrollInto } from './scrollInto.js'; 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/shared/ellipsis.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Truncates a string and adds an ellipsis ('...') if it exceeds the specified maximum length. 3 | * 4 | * @param str - The string to be truncated. 5 | * @param maxLength - The maximum length of the string including the ellipsis. Defaults to 40. 6 | * @returns The truncated string with an ellipsis if it exceeds the maximum length. 7 | */ 8 | export function ellipsis(str: string, maxLength: number = 40): string { 9 | if (!str) { 10 | return ''; 11 | } 12 | if (str.length <= maxLength) { 13 | return str; 14 | } 15 | return str.slice(0, maxLength - 3) + '...'; 16 | } -------------------------------------------------------------------------------- /packages/shared/error/index.ts: -------------------------------------------------------------------------------- 1 | export * from './errors.js'; 2 | -------------------------------------------------------------------------------- /packages/shared/event/README.md: -------------------------------------------------------------------------------- 1 | [![Netlify Status](https://api.netlify.com/api/v1/badges/def2b202-3a80-469d-9dbc-fc259cc1e712/deploy-status)](https://app.netlify.com/sites/vite-lit-starter/deploys) 2 | 3 | # My-Element title 4 | 5 | This project includes a sample component using LitElement with JavaScript. 6 | 7 | ## Demo 8 | 9 | 10 | ## API 11 | 12 | 13 | ## DOCs 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /packages/shared/event/app-back.ts: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * This event is fired when the application need to go back to a previous page. 4 | */ 5 | export default class AppBackEvent extends Event { 6 | static readonly eventName = 'app-back'; 7 | constructor() { 8 | super(AppBackEvent.eventName, { 9 | bubbles: true, 10 | composed: true, 11 | }); 12 | } 13 | } 14 | 15 | declare global { 16 | interface HTMLElementEventMap { 17 | 'app-back': AppBackEvent, 18 | } 19 | } -------------------------------------------------------------------------------- /packages/shared/event/app-connected.ts: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * This event is fired when a new app is connected to the DOM 4 | * so that it can be tracked by the main app 5 | */ 6 | export default class AppConnectedEvent extends Event { 7 | static readonly eventName = 'app-connected'; 8 | constructor() { 9 | super(AppConnectedEvent.eventName, { 10 | bubbles: true, 11 | composed: true, 12 | }); 13 | } 14 | } 15 | 16 | declare global { 17 | interface HTMLElementEventMap { 18 | 'app-connected': AppConnectedEvent, 19 | } 20 | } -------------------------------------------------------------------------------- /packages/shared/event/docs/custom-elements.json: -------------------------------------------------------------------------------- 1 | { 2 | "schemaVersion": "1.0.0", 3 | "readme": "", 4 | "modules": [] 5 | } 6 | -------------------------------------------------------------------------------- /packages/shared/event/docs/custom-elements.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/shared/event/docs/custom-elements.md -------------------------------------------------------------------------------- /packages/shared/event/index.ts: -------------------------------------------------------------------------------- 1 | import AppErrorEvent from './app-error'; 2 | import ToastEvent from './toast-event'; 3 | import UICloseEvent from './ui-event'; 4 | import ValueChangedEvent from './value-changed'; 5 | export { 6 | AppErrorEvent, ToastEvent, UICloseEvent, ValueChangedEvent 7 | }; 8 | -------------------------------------------------------------------------------- /packages/shared/grid/index.ts: -------------------------------------------------------------------------------- 1 | export { activeItemChanged } from './activeItemChanged.js'; 2 | -------------------------------------------------------------------------------- /packages/shared/index.ts: -------------------------------------------------------------------------------- 1 | export { debounce } from './debounce'; 2 | export { deep, get, set } from './deep'; 3 | export { scrollInto } from './domUtils/scrollInto.js'; 4 | export { ellipsis } from './ellipsis'; 5 | export { interceptMethod } from './support/method-interception'; 6 | export { throttle } from './throttle'; 7 | export { wait } from './wait'; 8 | 9 | -------------------------------------------------------------------------------- /packages/shared/locale/currency-native.ts: -------------------------------------------------------------------------------- 1 | // sourcehttps://en.wikipedia.org/wiki/List_of_language_names 2 | 3 | type Native = {[key: string]: string}; 4 | 5 | export const native: Native = { 6 | eur: 'Euro (€)', 7 | usd: 'United States Dollar ($)', 8 | gbp: 'British Pound Sterling (£)', 9 | }; 10 | 11 | export default native; 12 | -------------------------------------------------------------------------------- /packages/shared/md/README.md: -------------------------------------------------------------------------------- 1 | # MD 2 | 3 | This is a shared package for parsing markdown. 4 | -------------------------------------------------------------------------------- /packages/shared/md/index.ts: -------------------------------------------------------------------------------- 1 | import parse, { replacePlaceholders, sanitizeHTML } from './parse' 2 | import parseInline from './parseInline' 3 | 4 | export { 5 | parse, parseInline, replacePlaceholders, 6 | sanitizeHTML 7 | } 8 | 9 | -------------------------------------------------------------------------------- /packages/shared/md/marked.ts: -------------------------------------------------------------------------------- 1 | import {marked} from 'marked'; 2 | import { gfmHeadingId } from 'marked-gfm-heading-id'; 3 | 4 | marked.use({ 5 | ...gfmHeadingId({prefix: 'md-'}) 6 | }); 7 | 8 | export {marked} -------------------------------------------------------------------------------- /packages/shared/mixin/index.ts: -------------------------------------------------------------------------------- 1 | export { PromiseEventDialogEvent, default as PromiseEventDialogMixin } from './promise-event-dialog-mixin.js'; 2 | -------------------------------------------------------------------------------- /packages/shared/network/index.ts: -------------------------------------------------------------------------------- 1 | export { default as fetchWithTimeout } from './fetchWithTimeout.js'; 2 | -------------------------------------------------------------------------------- /packages/shared/string/camelToDash.ts: -------------------------------------------------------------------------------- 1 | const map: { [key: string]: string } = {}; 2 | const CAMEL_TO_DASH = /([A-Z])/g; 3 | 4 | /** 5 | * Converts a camelCase string to a dash-case string. 6 | * 7 | * @param camel - The camelCase string to be converted. 8 | * @returns The converted dash-case string. If the input is an empty string, returns an empty string. 9 | */ 10 | export const camelToDash = (camel: string): string => { 11 | if (!camel) { 12 | return ''; 13 | } 14 | return map[camel] || ( 15 | map[camel] = camel.replace(CAMEL_TO_DASH, '-$1').toLowerCase() 16 | ); 17 | }; 18 | -------------------------------------------------------------------------------- /packages/shared/string/index.ts: -------------------------------------------------------------------------------- 1 | // TODO: add other string functions here (ellipsis, etc.) 2 | export { camelToDash } from './camelToDash.js'; 3 | export { dashToCamel } from './dashToCamel.js'; 4 | export { template } from './template.js'; 5 | -------------------------------------------------------------------------------- /packages/shared/styles/class/icon.ts: -------------------------------------------------------------------------------- 1 | import { CSSResult, css } from 'lit'; 2 | 3 | /** 4 | * Global style for all components that user 5 | * See https://github.com/material-components/material-web/issues/4679 6 | */ 7 | const styles: CSSResult = css` 8 | md-icon { 9 | font-variation-settings: 'FILL' 1; 10 | } 11 | `; 12 | 13 | // @deprecated 14 | export default styles; -------------------------------------------------------------------------------- /packages/shared/styles/class/label.ts: -------------------------------------------------------------------------------- 1 | import { CSSResult, css } from 'lit'; 2 | 3 | 4 | /** 5 | * CSS styles for label elements, typically used for checkbox, radio, switch, etc. 6 | * 7 | * - The `label` element is styled to be a flex container with centered alignment and a small font size. 8 | * - The `md-switch` element inside a `label` has small margins on both the start and end of the inline axis. 9 | */ 10 | const style: CSSResult = css` 11 | label { 12 | display: flex; 13 | align-items: center; 14 | font-size: var(--font-size-small); 15 | gap: var(--space-small); 16 | } 17 | 18 | ` 19 | 20 | export default style -------------------------------------------------------------------------------- /packages/shared/styles/class/sr-only.ts: -------------------------------------------------------------------------------- 1 | import { CSSResult, css } from 'lit'; 2 | 3 | /** 4 | * A helper css for handling screen reader only elements 5 | * 6 | * it exposes 1 classes: 7 | * - .sr-only : only visible to screen reader 8 | * 9 | */ 10 | const style: CSSResult = css` 11 | .sr-only { 12 | position: absolute; 13 | width: 1px; 14 | height: 1px; 15 | padding: 0; 16 | margin: -1px; 17 | overflow: hidden; 18 | clip: rect(0, 0, 0, 0); 19 | border: 0; 20 | } 21 | 22 | ` 23 | 24 | export default style; -------------------------------------------------------------------------------- /packages/shared/styles/class/top-card.ts: -------------------------------------------------------------------------------- 1 | import { css } from "lit"; 2 | 3 | /** 4 | * CSS styles for the top card component. 5 | * 6 | * exposes a class .top-card to style a card that is centered in the page 7 | * with a max-width of 900px and a box shadow. 8 | */ 9 | const styles = css` 10 | .top-card { 11 | max-width: min(900px, calc(100% - 150px)); 12 | margin: 10vh auto; 13 | min-height: 300px; 14 | padding: 50px; 15 | box-shadow: var(--shadow-material); 16 | } 17 | ` 18 | 19 | export default styles; -------------------------------------------------------------------------------- /packages/shared/styles/locale.mjs: -------------------------------------------------------------------------------- 1 | import locale from './themes/locale.mjs'; 2 | 3 | export { locale } 4 | 5 | -------------------------------------------------------------------------------- /packages/shared/styles/patch/alignMwc.ts: -------------------------------------------------------------------------------- 1 | import { css, CSSResult } from 'lit'; 2 | 3 | /** 4 | * style to patch with previous version of MD2 5 | */ 6 | const style: CSSResult = css` 7 | 8 | md-primary-tab[disabled], md-secondary-tab[disabled] { 9 | pointer-events: none; 10 | } 11 | `; 12 | 13 | export default style; 14 | -------------------------------------------------------------------------------- /packages/shared/styles/themes/types.ts: -------------------------------------------------------------------------------- 1 | export type ThemeT = { 2 | label?: string, 3 | name: string, 4 | index: number, 5 | desc: string, 6 | longDesc: string, 7 | lightTheme?: string, 8 | darkTheme?: string, 9 | theme: { 10 | [key: string]: string | boolean 11 | } 12 | } 13 | 14 | export type ThemeMapT = {[key: string]: ThemeT} -------------------------------------------------------------------------------- /packages/shared/styles/utils/index.ts: -------------------------------------------------------------------------------- 1 | export { getAdjustedColor } from './getAdjustedColor.js'; 2 | export { themeResetColors } from './themeReset.js'; 3 | -------------------------------------------------------------------------------- /packages/shared/styles/vaadin/README.md: -------------------------------------------------------------------------------- 1 | # Vaadin Themes 2 | 3 | This directory contains the Vaadin themes used in the Vaadin components. 4 | -------------------------------------------------------------------------------- /packages/shared/styles/vaadin/card.ts: -------------------------------------------------------------------------------- 1 | import { registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js'; 2 | import { css, CSSResult } from "lit"; 3 | 4 | 5 | /** 6 | * User theme for vaadin-card 7 | */ 8 | const user: CSSResult = css` 9 | :host([theme~='user']) [part~='media'] { 10 | max-height: 350px; 11 | filter: grayscale(80%); 12 | } 13 | /* :host([theme~='user']) [part~='tile'] { 14 | font-size: var(--font-size-large); 15 | } */ 16 | ` 17 | registerStyles( 18 | 'vaadin-card', 19 | user 20 | ) 21 | export { user }; 22 | -------------------------------------------------------------------------------- /packages/shared/styles/vaadin/context-menu-overlay.ts: -------------------------------------------------------------------------------- 1 | import { registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js'; 2 | import { css, CSSResult } from "lit"; 3 | 4 | const style: CSSResult = css` 5 | /** 6 | * Add hover style for lumo; 7 | */ 8 | :host([theme~='dense']) [part~='content'] { 9 | padding: 0; 10 | } 11 | ` 12 | 13 | export default style; 14 | 15 | registerStyles( 16 | 'vaadin-context-menu-overlay', 17 | style 18 | ) -------------------------------------------------------------------------------- /packages/shared/styles/vaadin/index.ts: -------------------------------------------------------------------------------- 1 | import './card.js'; 2 | import './context-menu-overlay.js'; 3 | import './grid.js'; 4 | import './init-vaadin.js'; 5 | 6 | -------------------------------------------------------------------------------- /packages/shared/styles/vaadin/init-vaadin.ts: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | window.Vaadin ||= {}; 3 | window.Vaadin.featureFlags ||= {}; 4 | window.Vaadin.featureFlags.cardComponent = true; -------------------------------------------------------------------------------- /packages/shared/support/README.md: -------------------------------------------------------------------------------- 1 | # Support 2 | 3 | This directory contains shared support code that is used by multiple packages. 4 | 5 | Those functions are copied from [@lit-labs/virtualizer/](https://github.com/lit/lit/tree/main/packages/labs/virtualizer/src/support). 6 | 7 | - method-interceptor.ts: A method interceptor that can be used to intercept method calls on a class. 8 | - resize-observers-errors.ts: A set of errors that removes the ResizeObservers errors. 9 | -------------------------------------------------------------------------------- /packages/shared/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "paths": { 5 | "firebase": [ 6 | "./node_modules/firebase" 7 | ], 8 | "lit": [ 9 | "./node_modules/lit" 10 | ], 11 | } 12 | }, 13 | "include": [ 14 | "./**/*.ts" 15 | ], 16 | "exclude": [] 17 | } -------------------------------------------------------------------------------- /packages/shared/types/index.ts: -------------------------------------------------------------------------------- 1 | export type { MaterialSymbolsT } from './material-symbols.js'; 2 | -------------------------------------------------------------------------------- /packages/shared/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | 3 | // https://vitejs.dev/config/ 4 | export default defineConfig({ 5 | 6 | test: { 7 | onConsoleLog(log) { 8 | if (log.includes('Download the Vue Devtools extension')) return false 9 | if (log.includes('Lit is in dev mode.')) return false 10 | }, 11 | // include: ['./src/**/*.test.ts'], 12 | browser: { 13 | enabled: true, 14 | name: 'chrome', 15 | }, 16 | }, 17 | 18 | }); 19 | -------------------------------------------------------------------------------- /packages/shared/wait.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Returns a promise that resolves after a specified number of milliseconds. 3 | * 4 | * @param ms - The number of milliseconds to wait before the promise resolves. 5 | * @returns A promise that resolves after the specified delay. 6 | */ 7 | const wait = (ms: number) => { 8 | return new Promise(resolve => { 9 | setTimeout(() => { resolve(null) }, ms); 10 | }) 11 | } 12 | 13 | export { wait }; 14 | -------------------------------------------------------------------------------- /packages/state/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | src/**/*.js 16 | src/**/*.d.ts 17 | src/**/*.map 18 | 19 | public/docs/* 20 | public/README.md 21 | public/package.json 22 | 23 | # Editor directories and files 24 | .vscode/* 25 | !.vscode/extensions.json 26 | .idea 27 | .DS_Store 28 | *.suo 29 | *.ntvs* 30 | *.njsproj 31 | *.sln 32 | *.sw? 33 | -------------------------------------------------------------------------------- /packages/state/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # @lit-app/state Changelog 2 | 3 | ## [1.0.0] (17/12/2023) 4 | 5 | Features: 6 | - support for @lit/reactive-element@^2 7 | 8 | ## [0.8.4] (22/03/2023) 9 | 10 | Last version supporting @lit/reactive-element < v2 11 | 12 | ## [0.2.0] (18/07/2022) 13 | 14 | First feature complete published version 15 | 16 | ## [0.1.0] (06/07/2022) - unpublished 17 | 18 | Initial version 19 | 20 | Features: 21 | - New state management tool for lit 22 | - decorators for integrating the state with localStorage, URL parameters, or hook with third parties 23 | -------------------------------------------------------------------------------- /packages/state/src/decorators/parse.ts: -------------------------------------------------------------------------------- 1 | import { PropertyTypes } from './property.js'; 2 | 3 | export function parse(value: string | null, type: PropertyTypes| undefined): any { 4 | if (value !== null && ( 5 | type === Boolean || 6 | type === Number || 7 | type === Array || 8 | type === Object)) { 9 | try { 10 | value = JSON.parse(value); 11 | } catch (e) { 12 | console.warn('cannot parse value', value); 13 | } 14 | } 15 | return value; 16 | } 17 | -------------------------------------------------------------------------------- /packages/state/src/env.d.ts: -------------------------------------------------------------------------------- 1 | interface ImportMetaEnv extends Readonly> { 2 | readonly VITE_LOCALSTORAGE_PREFIX: string 3 | } 4 | 5 | interface ImportMeta { 6 | readonly env: ImportMetaEnv 7 | } -------------------------------------------------------------------------------- /packages/state/src/functionValue.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Returns a value if it is a value, 3 | * or the result of the function if is is a function 4 | * @param value a value or a function 5 | * @returns a value 6 | */ 7 | export function functionValue(value: unknown): unknown { 8 | return typeof value === 'function' ? value() : value; 9 | } 10 | -------------------------------------------------------------------------------- /packages/state/src/index.ts: -------------------------------------------------------------------------------- 1 | export { State } from './state.js' 2 | export type { Unsubscribe } from './state.js' 3 | export { Hook } from './hook.js' 4 | export { StateEvent } from './state-event.js' 5 | export { StateController } from './state-controller.js' 6 | export { property } from './decorators/property.js' 7 | export { query } from './decorators/query.js' 8 | export { storage } from './decorators/storage.js' 9 | export { hook } from './decorators/hook.js' 10 | -------------------------------------------------------------------------------- /packages/state/src/types.ts: -------------------------------------------------------------------------------- 1 | import { State } from './state'; 2 | 3 | export interface AccessibilityStateI extends State { 4 | signlanguage: boolean; 5 | voice: boolean; 6 | readaloud: boolean; 7 | readaloudConfig: { 8 | rate: number 9 | }; 10 | easyread: boolean; 11 | easyreadEmulate: boolean; 12 | accessibleDevice: boolean; 13 | } -------------------------------------------------------------------------------- /packages/state/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | 5 | }, 6 | "include": ["src/**/*.ts"], 7 | "exclude": [] 8 | } 9 | -------------------------------------------------------------------------------- /packages/testing/index.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lit-apps/lit-app/4e5b80a3771381621048606a0d2090d5e6c4b1fc/packages/testing/index.ts -------------------------------------------------------------------------------- /packages/testing/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@lit-app/testing", 3 | "version": "1.0.0", 4 | "description": "testing utils for lit-app", 5 | "type": "module", 6 | "main": "index", 7 | "scripts": { 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "keywords": [ 11 | "lit", 12 | "vitejs", 13 | "web-components" 14 | ], 15 | "authors": [ 16 | "christophe.geiser " 17 | ], 18 | "license": "ISC", 19 | "dependencies": { 20 | "lit": "^3.3.0" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /packages/xstate-route/.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "xstate-route" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /packages/xstate-route/demo/dialog/step-one/step-one.ts: -------------------------------------------------------------------------------- 1 | import { html, LitElement, TemplateResult } from "lit"; 2 | import { sharedStyles } from "../../pages/styles"; 3 | 4 | export default class StepOneComponent extends LitElement { 5 | static styles = [sharedStyles]; 6 | render (): TemplateResult { 7 | return html` 8 |

Step 1

9 | `; 10 | } 11 | } 12 | 13 | window.customElements.define("step-one-component", StepOneComponent); 14 | -------------------------------------------------------------------------------- /packages/xstate-route/demo/dialog/step-two/step-two.ts: -------------------------------------------------------------------------------- 1 | import { html, LitElement, TemplateResult } from "lit"; 2 | import { sharedStyles } from "../../pages/styles"; 3 | 4 | export default class StepTwoComponent extends LitElement { 5 | static styles = [sharedStyles]; 6 | render (): TemplateResult { 7 | return html` 8 |

Step 2

9 | `; 10 | } 11 | } 12 | 13 | window.customElements.define("step-two-component", StepTwoComponent); 14 | -------------------------------------------------------------------------------- /packages/xstate-route/demo/pages/home/secret/code/code.ts: -------------------------------------------------------------------------------- 1 | import { html, LitElement, TemplateResult } from "lit"; 2 | import { sharedStyles } from "../../../styles"; 3 | 4 | export default class CodeComponent extends LitElement { 5 | static styles = [sharedStyles]; 6 | render (): TemplateResult { 7 | return html` 8 |

CodeComponent

9 | `; 10 | } 11 | } 12 | 13 | window.customElements.define("code-component", CodeComponent); 14 | -------------------------------------------------------------------------------- /packages/xstate-route/demo/pages/home/secret/data.ts: -------------------------------------------------------------------------------- 1 | export let data: {secretPassword: string | undefined} = { 2 | secretPassword: undefined 3 | }; 4 | -------------------------------------------------------------------------------- /packages/xstate-route/firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "hosting": { 3 | "public": "demo/dist", 4 | "ignore": [ 5 | "firebase.json", 6 | "**/.*", 7 | "**/node_modules/**" 8 | ], 9 | "rewrites": [ 10 | { 11 | "source": "**", 12 | "destination": "/index.html" 13 | } 14 | ] 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/xstate-route/src/types.ts: -------------------------------------------------------------------------------- 1 | export type XstateDataT = { 2 | xstate?: string 3 | } -------------------------------------------------------------------------------- /packages/xstate-route/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | 5 | }, 6 | "include": ["src/**/*.ts", "demo/**/*.ts", "test/**/*.ts"], 7 | "exclude": [] 8 | } 9 | -------------------------------------------------------------------------------- /packages/xstate-route/vite.config.mjs: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | 3 | export default defineConfig({ 4 | test: { 5 | browser: { 6 | enabled: true, 7 | name: 'chrome', 8 | }, 9 | root: ".", 10 | }, 11 | root: "demo", 12 | resolve: { 13 | dedupe: [ 14 | "router-slot", 15 | "xstate", 16 | "lit", 17 | "api-viewer-element", 18 | "@material/web" 19 | ]} 20 | }); -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - 'packages/*' -------------------------------------------------------------------------------- /vitetestSetup.js: -------------------------------------------------------------------------------- 1 | // we mock canvas template o avoid warnings 2 | // https://github.com/jsdom/jsdom/issues/1782 3 | window.HTMLCanvasElement.prototype.getContext = () => { 4 | return {}; 5 | }; 6 | 7 | --------------------------------------------------------------------------------