From fe47ee948cbbee158b01104836189ff43c9b5786 Mon Sep 17 00:00:00 2001 From: Thomas Allmer Date: Fri, 11 Nov 2022 11:18:31 +0100 Subject: [PATCH] chore(ui): publish docs to npm --- .../ui/docs/components/accordion/index.md | 1 + .../ui/docs/components/accordion/overview.md | 1 + .../ui/docs/components/accordion/reference.md | 1 + .../ui/docs/components/accordion/use-cases.md | 1 + .../ui/docs/components/button/examples.md | 1 + packages/ui/docs/components/button/index.md | 1 + .../ui/docs/components/button/overview.md | 1 + .../ui/docs/components/button/src/icon.svg.js | 5 + .../ui/docs/components/button/use-cases.md | 1 + packages/ui/docs/components/calendar/index.md | 1 + .../ui/docs/components/calendar/overview.md | 1 + .../ui/docs/components/calendar/use-cases.md | 1 + .../docs/components/checkbox-group/index.md | 1 + .../components/checkbox-group/overview.md | 1 + .../components/checkbox-group/use-cases.md | 1 + .../collapsible/assets/CustomCollapsible.js | 113 ++ .../assets/applyDemoCollapsibleStyles.js | 37 + .../docs/components/collapsible/examples.md | 1 + .../ui/docs/components/collapsible/index.md | 1 + .../docs/components/collapsible/overview.md | 1 + .../docs/components/collapsible/use-cases.md | 1 + .../ui/docs/components/combobox/examples.md | 1 + packages/ui/docs/components/combobox/index.md | 1 + .../ui/docs/components/combobox/overview.md | 1 + .../docs/components/combobox/src/LinkMixin.js | 60 + .../combobox/src/demo-selection-display.js | 191 ++ .../combobox/src/gh-combobox/gh-button.js | 69 + .../combobox/src/gh-combobox/gh-combobox.js | 508 +++++ .../assets/google-clear-icon.js | 9 + .../assets/google-search-icon.js | 9 + .../assets/google-voice-search-icon.js | 19 + .../assets/googlelogo_color_272x92dp.png | Bin 0 -> 5969 bytes .../src/google-combobox/google-combobox.js | 460 +++++ .../components/combobox/src/lazyRender.js | 29 + .../components/combobox/src/levenshtein.js | 95 + .../combobox/src/md-combobox/MdFieldMixin.js | 341 ++++ .../combobox/src/md-combobox/md-combobox.js | 89 + .../combobox/src/md-combobox/md-input.js | 5 + .../src/md-combobox/style/load-roboto.js | 6 + .../src/md-combobox/style/md-ripple.js | 81 + .../combobox/src/wa-combobox/wa-combobox.js | 368 ++++ .../ui/docs/components/combobox/use-cases.md | 1 + packages/ui/docs/components/dialog/index.md | 1 + .../ui/docs/components/dialog/overview.md | 1 + .../dialog/src/demo-dialog-style.js | 3 + .../docs/components/dialog/src/demoStyle.js | 39 + .../dialog/src/slots-dialog-content.js | 32 + .../dialog/src/styled-dialog-content.js | 38 + .../ui/docs/components/dialog/use-cases.md | 1 + packages/ui/docs/components/drawer/index.md | 1 + .../ui/docs/components/drawer/overview.md | 1 + .../docs/components/drawer/src/demoStyle.js | 71 + .../ui/docs/components/drawer/use-cases.md | 1 + packages/ui/docs/components/fieldset/index.md | 1 + .../ui/docs/components/fieldset/overview.md | 1 + .../ui/docs/components/fieldset/use-cases.md | 1 + packages/ui/docs/components/form/index.md | 1 + packages/ui/docs/components/form/overview.md | 1 + packages/ui/docs/components/form/use-cases.md | 1 + .../components/icon/assets/bugs/bug01.svg.js | 2 + .../components/icon/assets/bugs/bug02.svg.js | 2 + .../components/icon/assets/bugs/bug05.svg.js | 2 + .../components/icon/assets/bugs/bug06.svg.js | 2 + .../components/icon/assets/bugs/bug08.svg.js | 2 + .../components/icon/assets/bugs/bug12.svg.js | 2 + .../components/icon/assets/bugs/bug19.svg.js | 2 + .../components/icon/assets/bugs/bug23.svg.js | 2 + .../components/icon/assets/bugs/bug24.svg.js | 2 + .../components/icon/assets/iconset-bugs.js | 11 + .../components/icon/assets/iconset-misc.js | 3 + .../components/icon/assets/iconset-space.js | 31 + .../icon/assets/misc/arrowLeft.svg.js | 6 + .../icon/assets/space/aliens-spaceship.svg.js | 2 + .../icon/assets/space/meteor.svg.js | 2 + .../icon/assets/space/moon-flag.svg.js | 2 + .../components/icon/assets/space/moon.svg.js | 2 + .../components/icon/assets/space/night.svg.js | 2 + .../components/icon/assets/space/orbit.svg.js | 2 + .../icon/assets/space/planet.svg.js | 2 + .../components/icon/assets/space/robot.svg.js | 2 + .../icon/assets/space/rocket.svg.js | 2 + .../icon/assets/space/satellite.svg.js | 2 + .../icon/assets/space/signal.svg.js | 2 + .../icon/assets/space/space-helmet.svg.js | 2 + .../components/icon/assets/space/sun.svg.js | 2 + .../icon/assets/space/telescope.svg.js | 2 + packages/ui/docs/components/icon/index.md | 1 + packages/ui/docs/components/icon/overview.md | 1 + packages/ui/docs/components/icon/use-cases.md | 1 + packages/ui/docs/components/index.md | 1 + .../ui/docs/components/input-amount/index.md | 1 + .../docs/components/input-amount/overview.md | 1 + .../docs/components/input-amount/use-cases.md | 1 + .../ui/docs/components/input-date/index.md | 1 + .../ui/docs/components/input-date/overview.md | 1 + .../docs/components/input-date/use-cases.md | 1 + .../docs/components/input-datepicker/index.md | 1 + .../components/input-datepicker/overview.md | 1 + .../components/input-datepicker/use-cases.md | 1 + .../ui/docs/components/input-email/index.md | 1 + .../docs/components/input-email/overview.md | 1 + .../docs/components/input-email/use-cases.md | 1 + .../ui/docs/components/input-iban/index.md | 1 + .../ui/docs/components/input-iban/overview.md | 1 + .../docs/components/input-iban/use-cases.md | 1 + .../ui/docs/components/input-range/index.md | 1 + .../docs/components/input-range/overview.md | 1 + .../docs/components/input-range/use-cases.md | 1 + .../ui/docs/components/input-stepper/index.md | 1 + .../docs/components/input-stepper/overview.md | 1 + .../components/input-stepper/use-cases.md | 1 + .../components/input-tel-dropdown/examples.md | 1 + .../components/input-tel-dropdown/index.md | 1 + .../components/input-tel-dropdown/overview.md | 1 + .../src/intl-input-tel-dropdown.js | 127 ++ .../input-tel-dropdown/use-cases.md | 1 + .../ui/docs/components/input-tel/index.md | 1 + .../ui/docs/components/input-tel/overview.md | 1 + .../input-tel/src/h-region-code-table.js | 109 ++ .../ui/docs/components/input-tel/use-cases.md | 1 + packages/ui/docs/components/input/index.md | 1 + packages/ui/docs/components/input/overview.md | 1 + .../ui/docs/components/input/use-cases.md | 1 + packages/ui/docs/components/listbox/index.md | 1 + .../ui/docs/components/listbox/overview.md | 1 + .../components/listbox/src/listboxData.js | 65 + .../ui/docs/components/listbox/use-cases.md | 1 + .../ui/docs/components/pagination/index.md | 1 + .../ui/docs/components/pagination/overview.md | 1 + .../docs/components/pagination/use-cases.md | 1 + .../assets/my-determinate-progress-bar.js | 30 + .../my-indeterminate-progress-spinner.js | 55 + .../components/progress-indicator/examples.md | 1 + .../components/progress-indicator/index.md | 1 + .../components/progress-indicator/overview.md | 1 + .../ui/docs/components/radio-group/index.md | 1 + .../docs/components/radio-group/overview.md | 1 + .../docs/components/radio-group/use-cases.md | 1 + .../docs/components/select-rich/examples.md | 1 + .../ui/docs/components/select-rich/index.md | 1 + .../docs/components/select-rich/overview.md | 1 + .../components/select-rich/src/flagStyles.js | 1250 ++++++++++++ .../docs/components/select-rich/src/flags.png | Bin 0 -> 70857 bytes .../components/select-rich/src/flags@2x.png | Bin 0 -> 174369 bytes .../select-rich/src/intl-select-rich.js | 194 ++ .../select-rich/src/regionMetaList.js | 1717 +++++++++++++++++ .../docs/components/select-rich/use-cases.md | 1 + packages/ui/docs/components/select/index.md | 1 + .../ui/docs/components/select/overview.md | 1 + .../ui/docs/components/select/use-cases.md | 1 + packages/ui/docs/components/steps/index.md | 1 + packages/ui/docs/components/steps/overview.md | 1 + .../ui/docs/components/steps/use-cases.md | 1 + packages/ui/docs/components/switch/index.md | 1 + .../ui/docs/components/switch/overview.md | 1 + .../ui/docs/components/switch/reference.md | 1 + .../ui/docs/components/switch/use-cases.md | 1 + packages/ui/docs/components/tabs/examples.md | 1 + packages/ui/docs/components/tabs/index.md | 1 + packages/ui/docs/components/tabs/overview.md | 1 + .../docs/components/tabs/src/lea-tab-panel.js | 24 + .../ui/docs/components/tabs/src/lea-tab.js | 45 + .../ui/docs/components/tabs/src/lea-tabs.js | 28 + packages/ui/docs/components/tabs/use-cases.md | 1 + packages/ui/docs/components/textarea/index.md | 1 + .../ui/docs/components/textarea/overview.md | 1 + .../ui/docs/components/textarea/use-cases.md | 1 + .../ui/docs/components/tooltip/examples.md | 1 + packages/ui/docs/components/tooltip/index.md | 1 + .../ui/docs/components/tooltip/overview.md | 1 + .../ui/docs/components/tooltip/use-cases.md | 1 + packages/ui/docs/fundamentals/index.md | 1 + .../babel-plugin-extend-docs/index.md | 1 + .../babel-plugin-extend-docs/overview.md | 1 + .../ui/docs/fundamentals/node-tools/index.md | 1 + .../LocalConfiguration.md | 1 + .../providence-analytics/QueryResult.md | 1 + .../providence-analytics/analyzer.md | 1 + .../assets/_mermaid.svg.js | 1202 ++++++++++++ .../providence-analytics/dashboard.md | 1 + .../node-tools/providence-analytics/index.md | 1 + .../providence-analytics/overview.md | 1 + .../node-tools/publish-docs/index.md | 1 + .../node-tools/publish-docs/overview.md | 1 + .../node-tools/remark-extend/index.md | 1 + .../node-tools/remark-extend/overview.md | 1 + .../rocket-preset-extend-lion-docs/index.md | 1 + .../overview.md | 1 + .../fundamentals/rationales/TypeScript.md | 1 + .../ui/docs/fundamentals/rationales/index.md | 1 + .../fundamentals/rationales/side-effects.md | 1 + .../fundamentals/rationales/versioning.md | 1 + .../docs/fundamentals/systems/core/index.md | 1 + .../fundamentals/systems/core/overview.md | 1 + .../form/assets/FormatMixinDiagram-1.svg | 1 + .../form/assets/FormatMixinDiagram-2.svg | 1 + .../form/assets/FormatMixinDiagram-3.svg | 84 + .../systems/form/assets/h-output.js | 155 ++ .../systems/form/formatting-and-parsing.md | 1 + .../docs/fundamentals/systems/form/index.md | 1 + .../systems/form/interaction-states.md | 1 + .../fundamentals/systems/form/model-value.md | 1 + .../fundamentals/systems/form/overview.md | 1 + .../docs/fundamentals/systems/form/styling.md | 1 + .../fundamentals/systems/form/use-cases.md | 1 + .../fundamentals/systems/form/validate.md | 1 + .../docs/fundamentals/systems/icon/index.md | 1 + .../fundamentals/systems/icon/overview.md | 1 + .../ui/docs/fundamentals/systems/index.md | 1 + .../systems/localize/assets/all-locales.js | 437 +++++ .../systems/localize/assets/en-AU.js | 6 + .../systems/localize/assets/en-GB.js | 6 + .../systems/localize/assets/en-US.js | 6 + .../systems/localize/assets/en.js | 4 + .../systems/localize/assets/nl-BE.js | 6 + .../systems/localize/assets/nl-NL.js | 6 + .../systems/localize/assets/nl.js | 4 + .../fundamentals/systems/localize/dates.md | 1 + .../fundamentals/systems/localize/index.md | 1 + .../fundamentals/systems/localize/numbers.md | 1 + .../fundamentals/systems/localize/overview.md | 1 + .../systems/localize/rationale.md | 1 + .../fundamentals/systems/localize/text.md | 1 + .../systems/localize/use-cases.md | 1 + .../overlays/assets/applyDemoOverlayStyles.js | 22 + .../overlays/assets/demo-overlay-backdrop.js | 48 + .../overlays/assets/demo-overlay-system.js | 42 + .../systems/overlays/assets/ref.js | 38 + .../systems/overlays/assets/umbrella-form.js | 133 ++ .../systems/overlays/configuration.md | 1 + .../systems/overlays/form-integration.md | 1 + .../fundamentals/systems/overlays/index.md | 1 + .../fundamentals/systems/overlays/overview.md | 1 + .../systems/overlays/rationale.md | 1 + .../fundamentals/systems/overlays/scope.md | 1 + .../systems/overlays/use-cases.md | 1 + .../fundamentals/tools/ajax/assets/naga.json | 9 + .../fundamentals/tools/ajax/assets/pabu.json | 9 + .../ui/docs/fundamentals/tools/ajax/index.md | 1 + .../docs/fundamentals/tools/ajax/overview.md | 1 + .../docs/fundamentals/tools/ajax/use-cases.md | 1 + .../tools/helpers/action-logger.md | 1 + .../docs/fundamentals/tools/helpers/index.md | 1 + .../fundamentals/tools/helpers/overview.md | 1 + packages/ui/docs/fundamentals/tools/index.md | 1 + .../tools/singleton-manager/.gitignore | 1 + .../example-complex/demo-app.js | 93 + .../example-complex/index.md | 1 + .../node_modules/overlays/index.js | 30 + .../node_modules/overlays/instance.js | 4 + .../node_modules/overlays/package.json | 4 + .../node_modules/page-a/package.json | 7 + .../node_modules/page-a/page-a.js | 35 + .../page-b/node_modules/overlays/index.js | 30 + .../page-b/node_modules/overlays/instance.js | 4 + .../page-b/node_modules/overlays/package.json | 4 + .../node_modules/page-b/package.json | 7 + .../node_modules/page-b/page-b.js | 49 + .../example-complex/overlayCompatibility.js | 70 + .../example-complex/package.json | 9 + .../example-fail/demo-app.js | 91 + .../singleton-manager/example-fail/index.md | 1 + .../node_modules/overlays/index.js | 30 + .../node_modules/overlays/instance.js | 3 + .../node_modules/overlays/package.json | 4 + .../node_modules/page-a/package.json | 7 + .../node_modules/page-a/page-a.js | 34 + .../page-b/node_modules/overlays/index.js | 30 + .../page-b/node_modules/overlays/instance.js | 3 + .../page-b/node_modules/overlays/package.json | 4 + .../node_modules/page-b/package.json | 7 + .../node_modules/page-b/page-b.js | 34 + .../example-fail/package.json | 9 + .../example-success/demo-app.js | 93 + .../example-success/index.md | 1 + .../node_modules/overlays/index.js | 30 + .../node_modules/overlays/instance.js | 4 + .../node_modules/overlays/package.json | 4 + .../node_modules/page-a/package.json | 7 + .../node_modules/page-a/page-a.js | 34 + .../page-b/node_modules/overlays/index.js | 30 + .../page-b/node_modules/overlays/instance.js | 4 + .../page-b/node_modules/overlays/package.json | 4 + .../node_modules/page-b/package.json | 7 + .../node_modules/page-b/page-b.js | 34 + .../example-success/overlayCompatibility.js | 23 + .../example-success/package.json | 9 + .../tools/singleton-manager/index.md | 1 + .../tools/singleton-manager/overview.md | 1 + .../guides/how-to/create-a-custom-field.md | 1 + .../guides/how-to/extend-a-native-input.md | 1 + packages/ui/docs/guides/how-to/get-started.md | 1 + packages/ui/docs/guides/how-to/index.md | 1 + packages/ui/docs/guides/index.md | 1 + .../principles/definitions-and-terms.md | 1 + packages/ui/docs/guides/principles/index.md | 1 + .../docs/guides/principles/scoped-elements.md | 1 + packages/ui/docs/guides/principles/styling.md | 1 + .../docs/guides/principles/subclasser-apis.md | 1 + packages/ui/docs/override.js | 15 + 300 files changed, 9713 insertions(+) create mode 100644 packages/ui/docs/components/accordion/index.md create mode 100644 packages/ui/docs/components/accordion/overview.md create mode 100644 packages/ui/docs/components/accordion/reference.md create mode 100644 packages/ui/docs/components/accordion/use-cases.md create mode 100644 packages/ui/docs/components/button/examples.md create mode 100644 packages/ui/docs/components/button/index.md create mode 100644 packages/ui/docs/components/button/overview.md create mode 100644 packages/ui/docs/components/button/src/icon.svg.js create mode 100644 packages/ui/docs/components/button/use-cases.md create mode 100644 packages/ui/docs/components/calendar/index.md create mode 100644 packages/ui/docs/components/calendar/overview.md create mode 100644 packages/ui/docs/components/calendar/use-cases.md create mode 100644 packages/ui/docs/components/checkbox-group/index.md create mode 100644 packages/ui/docs/components/checkbox-group/overview.md create mode 100644 packages/ui/docs/components/checkbox-group/use-cases.md create mode 100644 packages/ui/docs/components/collapsible/assets/CustomCollapsible.js create mode 100644 packages/ui/docs/components/collapsible/assets/applyDemoCollapsibleStyles.js create mode 100644 packages/ui/docs/components/collapsible/examples.md create mode 100644 packages/ui/docs/components/collapsible/index.md create mode 100644 packages/ui/docs/components/collapsible/overview.md create mode 100644 packages/ui/docs/components/collapsible/use-cases.md create mode 100644 packages/ui/docs/components/combobox/examples.md create mode 100644 packages/ui/docs/components/combobox/index.md create mode 100644 packages/ui/docs/components/combobox/overview.md create mode 100644 packages/ui/docs/components/combobox/src/LinkMixin.js create mode 100644 packages/ui/docs/components/combobox/src/demo-selection-display.js create mode 100644 packages/ui/docs/components/combobox/src/gh-combobox/gh-button.js create mode 100644 packages/ui/docs/components/combobox/src/gh-combobox/gh-combobox.js create mode 100644 packages/ui/docs/components/combobox/src/google-combobox/assets/google-clear-icon.js create mode 100644 packages/ui/docs/components/combobox/src/google-combobox/assets/google-search-icon.js create mode 100644 packages/ui/docs/components/combobox/src/google-combobox/assets/google-voice-search-icon.js create mode 100644 packages/ui/docs/components/combobox/src/google-combobox/assets/googlelogo_color_272x92dp.png create mode 100644 packages/ui/docs/components/combobox/src/google-combobox/google-combobox.js create mode 100644 packages/ui/docs/components/combobox/src/lazyRender.js create mode 100644 packages/ui/docs/components/combobox/src/levenshtein.js create mode 100644 packages/ui/docs/components/combobox/src/md-combobox/MdFieldMixin.js create mode 100644 packages/ui/docs/components/combobox/src/md-combobox/md-combobox.js create mode 100644 packages/ui/docs/components/combobox/src/md-combobox/md-input.js create mode 100644 packages/ui/docs/components/combobox/src/md-combobox/style/load-roboto.js create mode 100644 packages/ui/docs/components/combobox/src/md-combobox/style/md-ripple.js create mode 100644 packages/ui/docs/components/combobox/src/wa-combobox/wa-combobox.js create mode 100644 packages/ui/docs/components/combobox/use-cases.md create mode 100644 packages/ui/docs/components/dialog/index.md create mode 100644 packages/ui/docs/components/dialog/overview.md create mode 100644 packages/ui/docs/components/dialog/src/demo-dialog-style.js create mode 100644 packages/ui/docs/components/dialog/src/demoStyle.js create mode 100644 packages/ui/docs/components/dialog/src/slots-dialog-content.js create mode 100644 packages/ui/docs/components/dialog/src/styled-dialog-content.js create mode 100644 packages/ui/docs/components/dialog/use-cases.md create mode 100644 packages/ui/docs/components/drawer/index.md create mode 100644 packages/ui/docs/components/drawer/overview.md create mode 100644 packages/ui/docs/components/drawer/src/demoStyle.js create mode 100644 packages/ui/docs/components/drawer/use-cases.md create mode 100644 packages/ui/docs/components/fieldset/index.md create mode 100644 packages/ui/docs/components/fieldset/overview.md create mode 100644 packages/ui/docs/components/fieldset/use-cases.md create mode 100644 packages/ui/docs/components/form/index.md create mode 100644 packages/ui/docs/components/form/overview.md create mode 100644 packages/ui/docs/components/form/use-cases.md create mode 100644 packages/ui/docs/components/icon/assets/bugs/bug01.svg.js create mode 100644 packages/ui/docs/components/icon/assets/bugs/bug02.svg.js create mode 100644 packages/ui/docs/components/icon/assets/bugs/bug05.svg.js create mode 100644 packages/ui/docs/components/icon/assets/bugs/bug06.svg.js create mode 100644 packages/ui/docs/components/icon/assets/bugs/bug08.svg.js create mode 100644 packages/ui/docs/components/icon/assets/bugs/bug12.svg.js create mode 100644 packages/ui/docs/components/icon/assets/bugs/bug19.svg.js create mode 100644 packages/ui/docs/components/icon/assets/bugs/bug23.svg.js create mode 100644 packages/ui/docs/components/icon/assets/bugs/bug24.svg.js create mode 100755 packages/ui/docs/components/icon/assets/iconset-bugs.js create mode 100644 packages/ui/docs/components/icon/assets/iconset-misc.js create mode 100755 packages/ui/docs/components/icon/assets/iconset-space.js create mode 100644 packages/ui/docs/components/icon/assets/misc/arrowLeft.svg.js create mode 100644 packages/ui/docs/components/icon/assets/space/aliens-spaceship.svg.js create mode 100644 packages/ui/docs/components/icon/assets/space/meteor.svg.js create mode 100644 packages/ui/docs/components/icon/assets/space/moon-flag.svg.js create mode 100644 packages/ui/docs/components/icon/assets/space/moon.svg.js create mode 100644 packages/ui/docs/components/icon/assets/space/night.svg.js create mode 100644 packages/ui/docs/components/icon/assets/space/orbit.svg.js create mode 100644 packages/ui/docs/components/icon/assets/space/planet.svg.js create mode 100644 packages/ui/docs/components/icon/assets/space/robot.svg.js create mode 100644 packages/ui/docs/components/icon/assets/space/rocket.svg.js create mode 100644 packages/ui/docs/components/icon/assets/space/satellite.svg.js create mode 100644 packages/ui/docs/components/icon/assets/space/signal.svg.js create mode 100644 packages/ui/docs/components/icon/assets/space/space-helmet.svg.js create mode 100644 packages/ui/docs/components/icon/assets/space/sun.svg.js create mode 100644 packages/ui/docs/components/icon/assets/space/telescope.svg.js create mode 100644 packages/ui/docs/components/icon/index.md create mode 100644 packages/ui/docs/components/icon/overview.md create mode 100644 packages/ui/docs/components/icon/use-cases.md create mode 100644 packages/ui/docs/components/index.md create mode 100644 packages/ui/docs/components/input-amount/index.md create mode 100644 packages/ui/docs/components/input-amount/overview.md create mode 100644 packages/ui/docs/components/input-amount/use-cases.md create mode 100644 packages/ui/docs/components/input-date/index.md create mode 100644 packages/ui/docs/components/input-date/overview.md create mode 100644 packages/ui/docs/components/input-date/use-cases.md create mode 100644 packages/ui/docs/components/input-datepicker/index.md create mode 100644 packages/ui/docs/components/input-datepicker/overview.md create mode 100644 packages/ui/docs/components/input-datepicker/use-cases.md create mode 100644 packages/ui/docs/components/input-email/index.md create mode 100644 packages/ui/docs/components/input-email/overview.md create mode 100644 packages/ui/docs/components/input-email/use-cases.md create mode 100644 packages/ui/docs/components/input-iban/index.md create mode 100644 packages/ui/docs/components/input-iban/overview.md create mode 100644 packages/ui/docs/components/input-iban/use-cases.md create mode 100644 packages/ui/docs/components/input-range/index.md create mode 100644 packages/ui/docs/components/input-range/overview.md create mode 100644 packages/ui/docs/components/input-range/use-cases.md create mode 100644 packages/ui/docs/components/input-stepper/index.md create mode 100644 packages/ui/docs/components/input-stepper/overview.md create mode 100644 packages/ui/docs/components/input-stepper/use-cases.md create mode 100644 packages/ui/docs/components/input-tel-dropdown/examples.md create mode 100644 packages/ui/docs/components/input-tel-dropdown/index.md create mode 100644 packages/ui/docs/components/input-tel-dropdown/overview.md create mode 100644 packages/ui/docs/components/input-tel-dropdown/src/intl-input-tel-dropdown.js create mode 100644 packages/ui/docs/components/input-tel-dropdown/use-cases.md create mode 100644 packages/ui/docs/components/input-tel/index.md create mode 100644 packages/ui/docs/components/input-tel/overview.md create mode 100644 packages/ui/docs/components/input-tel/src/h-region-code-table.js create mode 100644 packages/ui/docs/components/input-tel/use-cases.md create mode 100644 packages/ui/docs/components/input/index.md create mode 100644 packages/ui/docs/components/input/overview.md create mode 100644 packages/ui/docs/components/input/use-cases.md create mode 100644 packages/ui/docs/components/listbox/index.md create mode 100644 packages/ui/docs/components/listbox/overview.md create mode 100644 packages/ui/docs/components/listbox/src/listboxData.js create mode 100644 packages/ui/docs/components/listbox/use-cases.md create mode 100644 packages/ui/docs/components/pagination/index.md create mode 100644 packages/ui/docs/components/pagination/overview.md create mode 100644 packages/ui/docs/components/pagination/use-cases.md create mode 100644 packages/ui/docs/components/progress-indicator/assets/my-determinate-progress-bar.js create mode 100644 packages/ui/docs/components/progress-indicator/assets/my-indeterminate-progress-spinner.js create mode 100644 packages/ui/docs/components/progress-indicator/examples.md create mode 100644 packages/ui/docs/components/progress-indicator/index.md create mode 100644 packages/ui/docs/components/progress-indicator/overview.md create mode 100644 packages/ui/docs/components/radio-group/index.md create mode 100644 packages/ui/docs/components/radio-group/overview.md create mode 100644 packages/ui/docs/components/radio-group/use-cases.md create mode 100644 packages/ui/docs/components/select-rich/examples.md create mode 100644 packages/ui/docs/components/select-rich/index.md create mode 100644 packages/ui/docs/components/select-rich/overview.md create mode 100644 packages/ui/docs/components/select-rich/src/flagStyles.js create mode 100644 packages/ui/docs/components/select-rich/src/flags.png create mode 100644 packages/ui/docs/components/select-rich/src/flags@2x.png create mode 100644 packages/ui/docs/components/select-rich/src/intl-select-rich.js create mode 100644 packages/ui/docs/components/select-rich/src/regionMetaList.js create mode 100644 packages/ui/docs/components/select-rich/use-cases.md create mode 100644 packages/ui/docs/components/select/index.md create mode 100644 packages/ui/docs/components/select/overview.md create mode 100644 packages/ui/docs/components/select/use-cases.md create mode 100644 packages/ui/docs/components/steps/index.md create mode 100644 packages/ui/docs/components/steps/overview.md create mode 100644 packages/ui/docs/components/steps/use-cases.md create mode 100644 packages/ui/docs/components/switch/index.md create mode 100644 packages/ui/docs/components/switch/overview.md create mode 100644 packages/ui/docs/components/switch/reference.md create mode 100644 packages/ui/docs/components/switch/use-cases.md create mode 100644 packages/ui/docs/components/tabs/examples.md create mode 100644 packages/ui/docs/components/tabs/index.md create mode 100644 packages/ui/docs/components/tabs/overview.md create mode 100644 packages/ui/docs/components/tabs/src/lea-tab-panel.js create mode 100644 packages/ui/docs/components/tabs/src/lea-tab.js create mode 100644 packages/ui/docs/components/tabs/src/lea-tabs.js create mode 100644 packages/ui/docs/components/tabs/use-cases.md create mode 100644 packages/ui/docs/components/textarea/index.md create mode 100644 packages/ui/docs/components/textarea/overview.md create mode 100644 packages/ui/docs/components/textarea/use-cases.md create mode 100644 packages/ui/docs/components/tooltip/examples.md create mode 100644 packages/ui/docs/components/tooltip/index.md create mode 100644 packages/ui/docs/components/tooltip/overview.md create mode 100644 packages/ui/docs/components/tooltip/use-cases.md create mode 100644 packages/ui/docs/fundamentals/index.md create mode 100644 packages/ui/docs/fundamentals/node-tools/babel-plugin-extend-docs/index.md create mode 100644 packages/ui/docs/fundamentals/node-tools/babel-plugin-extend-docs/overview.md create mode 100644 packages/ui/docs/fundamentals/node-tools/index.md create mode 100644 packages/ui/docs/fundamentals/node-tools/providence-analytics/LocalConfiguration.md create mode 100644 packages/ui/docs/fundamentals/node-tools/providence-analytics/QueryResult.md create mode 100644 packages/ui/docs/fundamentals/node-tools/providence-analytics/analyzer.md create mode 100644 packages/ui/docs/fundamentals/node-tools/providence-analytics/assets/_mermaid.svg.js create mode 100644 packages/ui/docs/fundamentals/node-tools/providence-analytics/dashboard.md create mode 100644 packages/ui/docs/fundamentals/node-tools/providence-analytics/index.md create mode 100644 packages/ui/docs/fundamentals/node-tools/providence-analytics/overview.md create mode 100644 packages/ui/docs/fundamentals/node-tools/publish-docs/index.md create mode 100644 packages/ui/docs/fundamentals/node-tools/publish-docs/overview.md create mode 100644 packages/ui/docs/fundamentals/node-tools/remark-extend/index.md create mode 100644 packages/ui/docs/fundamentals/node-tools/remark-extend/overview.md create mode 100644 packages/ui/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/index.md create mode 100644 packages/ui/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md create mode 100644 packages/ui/docs/fundamentals/rationales/TypeScript.md create mode 100644 packages/ui/docs/fundamentals/rationales/index.md create mode 100644 packages/ui/docs/fundamentals/rationales/side-effects.md create mode 100644 packages/ui/docs/fundamentals/rationales/versioning.md create mode 100644 packages/ui/docs/fundamentals/systems/core/index.md create mode 100644 packages/ui/docs/fundamentals/systems/core/overview.md create mode 100644 packages/ui/docs/fundamentals/systems/form/assets/FormatMixinDiagram-1.svg create mode 100644 packages/ui/docs/fundamentals/systems/form/assets/FormatMixinDiagram-2.svg create mode 100644 packages/ui/docs/fundamentals/systems/form/assets/FormatMixinDiagram-3.svg create mode 100644 packages/ui/docs/fundamentals/systems/form/assets/h-output.js create mode 100644 packages/ui/docs/fundamentals/systems/form/formatting-and-parsing.md create mode 100644 packages/ui/docs/fundamentals/systems/form/index.md create mode 100644 packages/ui/docs/fundamentals/systems/form/interaction-states.md create mode 100644 packages/ui/docs/fundamentals/systems/form/model-value.md create mode 100644 packages/ui/docs/fundamentals/systems/form/overview.md create mode 100644 packages/ui/docs/fundamentals/systems/form/styling.md create mode 100644 packages/ui/docs/fundamentals/systems/form/use-cases.md create mode 100644 packages/ui/docs/fundamentals/systems/form/validate.md create mode 100644 packages/ui/docs/fundamentals/systems/icon/index.md create mode 100644 packages/ui/docs/fundamentals/systems/icon/overview.md create mode 100644 packages/ui/docs/fundamentals/systems/index.md create mode 100755 packages/ui/docs/fundamentals/systems/localize/assets/all-locales.js create mode 100644 packages/ui/docs/fundamentals/systems/localize/assets/en-AU.js create mode 100644 packages/ui/docs/fundamentals/systems/localize/assets/en-GB.js create mode 100644 packages/ui/docs/fundamentals/systems/localize/assets/en-US.js create mode 100644 packages/ui/docs/fundamentals/systems/localize/assets/en.js create mode 100644 packages/ui/docs/fundamentals/systems/localize/assets/nl-BE.js create mode 100644 packages/ui/docs/fundamentals/systems/localize/assets/nl-NL.js create mode 100644 packages/ui/docs/fundamentals/systems/localize/assets/nl.js create mode 100644 packages/ui/docs/fundamentals/systems/localize/dates.md create mode 100644 packages/ui/docs/fundamentals/systems/localize/index.md create mode 100644 packages/ui/docs/fundamentals/systems/localize/numbers.md create mode 100644 packages/ui/docs/fundamentals/systems/localize/overview.md create mode 100644 packages/ui/docs/fundamentals/systems/localize/rationale.md create mode 100644 packages/ui/docs/fundamentals/systems/localize/text.md create mode 100644 packages/ui/docs/fundamentals/systems/localize/use-cases.md create mode 100644 packages/ui/docs/fundamentals/systems/overlays/assets/applyDemoOverlayStyles.js create mode 100644 packages/ui/docs/fundamentals/systems/overlays/assets/demo-overlay-backdrop.js create mode 100644 packages/ui/docs/fundamentals/systems/overlays/assets/demo-overlay-system.js create mode 100644 packages/ui/docs/fundamentals/systems/overlays/assets/ref.js create mode 100644 packages/ui/docs/fundamentals/systems/overlays/assets/umbrella-form.js create mode 100644 packages/ui/docs/fundamentals/systems/overlays/configuration.md create mode 100644 packages/ui/docs/fundamentals/systems/overlays/form-integration.md create mode 100644 packages/ui/docs/fundamentals/systems/overlays/index.md create mode 100644 packages/ui/docs/fundamentals/systems/overlays/overview.md create mode 100644 packages/ui/docs/fundamentals/systems/overlays/rationale.md create mode 100644 packages/ui/docs/fundamentals/systems/overlays/scope.md create mode 100644 packages/ui/docs/fundamentals/systems/overlays/use-cases.md create mode 100644 packages/ui/docs/fundamentals/tools/ajax/assets/naga.json create mode 100644 packages/ui/docs/fundamentals/tools/ajax/assets/pabu.json create mode 100644 packages/ui/docs/fundamentals/tools/ajax/index.md create mode 100644 packages/ui/docs/fundamentals/tools/ajax/overview.md create mode 100644 packages/ui/docs/fundamentals/tools/ajax/use-cases.md create mode 100644 packages/ui/docs/fundamentals/tools/helpers/action-logger.md create mode 100644 packages/ui/docs/fundamentals/tools/helpers/index.md create mode 100644 packages/ui/docs/fundamentals/tools/helpers/overview.md create mode 100644 packages/ui/docs/fundamentals/tools/index.md create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/.gitignore create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/demo-app.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/index.md create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/overlays/index.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/overlays/instance.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/overlays/package.json create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-a/package.json create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-a/page-a.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/node_modules/overlays/index.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/node_modules/overlays/instance.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/node_modules/overlays/package.json create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/package.json create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/page-b.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/overlayCompatibility.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/package.json create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/demo-app.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/index.md create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/overlays/index.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/overlays/instance.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/overlays/package.json create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-a/package.json create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-a/page-a.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/node_modules/overlays/index.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/node_modules/overlays/instance.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/node_modules/overlays/package.json create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/package.json create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/page-b.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/package.json create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-success/demo-app.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-success/index.md create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/overlays/index.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/overlays/instance.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/overlays/package.json create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-a/package.json create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-a/page-a.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/node_modules/overlays/index.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/node_modules/overlays/instance.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/node_modules/overlays/package.json create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/package.json create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/page-b.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-success/overlayCompatibility.js create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/example-success/package.json create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/index.md create mode 100644 packages/ui/docs/fundamentals/tools/singleton-manager/overview.md create mode 100644 packages/ui/docs/guides/how-to/create-a-custom-field.md create mode 100644 packages/ui/docs/guides/how-to/extend-a-native-input.md create mode 100644 packages/ui/docs/guides/how-to/get-started.md create mode 100644 packages/ui/docs/guides/how-to/index.md create mode 100644 packages/ui/docs/guides/index.md create mode 100644 packages/ui/docs/guides/principles/definitions-and-terms.md create mode 100644 packages/ui/docs/guides/principles/index.md create mode 100644 packages/ui/docs/guides/principles/scoped-elements.md create mode 100644 packages/ui/docs/guides/principles/styling.md create mode 100644 packages/ui/docs/guides/principles/subclasser-apis.md create mode 100644 packages/ui/docs/override.js diff --git a/packages/ui/docs/components/accordion/index.md b/packages/ui/docs/components/accordion/index.md new file mode 100644 index 000000000..e9080bd18 --- /dev/null +++ b/packages/ui/docs/components/accordion/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/accordion/index.md) diff --git a/packages/ui/docs/components/accordion/overview.md b/packages/ui/docs/components/accordion/overview.md new file mode 100644 index 000000000..ff8809ec9 --- /dev/null +++ b/packages/ui/docs/components/accordion/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/accordion/overview.md) diff --git a/packages/ui/docs/components/accordion/reference.md b/packages/ui/docs/components/accordion/reference.md new file mode 100644 index 000000000..fa366e73d --- /dev/null +++ b/packages/ui/docs/components/accordion/reference.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/accordion/reference.md) diff --git a/packages/ui/docs/components/accordion/use-cases.md b/packages/ui/docs/components/accordion/use-cases.md new file mode 100644 index 000000000..ab0a033cf --- /dev/null +++ b/packages/ui/docs/components/accordion/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/accordion/use-cases.md) diff --git a/packages/ui/docs/components/button/examples.md b/packages/ui/docs/components/button/examples.md new file mode 100644 index 000000000..4eec31317 --- /dev/null +++ b/packages/ui/docs/components/button/examples.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/button/examples.md) diff --git a/packages/ui/docs/components/button/index.md b/packages/ui/docs/components/button/index.md new file mode 100644 index 000000000..2f8c7aeba --- /dev/null +++ b/packages/ui/docs/components/button/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/button/index.md) diff --git a/packages/ui/docs/components/button/overview.md b/packages/ui/docs/components/button/overview.md new file mode 100644 index 000000000..c71a6311b --- /dev/null +++ b/packages/ui/docs/components/button/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/button/overview.md) diff --git a/packages/ui/docs/components/button/src/icon.svg.js b/packages/ui/docs/components/button/src/icon.svg.js new file mode 100644 index 000000000..fa20ca7d3 --- /dev/null +++ b/packages/ui/docs/components/button/src/icon.svg.js @@ -0,0 +1,5 @@ +/** + * @param {Function} tag + */ +export default tag => + tag``; diff --git a/packages/ui/docs/components/button/use-cases.md b/packages/ui/docs/components/button/use-cases.md new file mode 100644 index 000000000..77afee3ee --- /dev/null +++ b/packages/ui/docs/components/button/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/button/use-cases.md) diff --git a/packages/ui/docs/components/calendar/index.md b/packages/ui/docs/components/calendar/index.md new file mode 100644 index 000000000..5bcfe6303 --- /dev/null +++ b/packages/ui/docs/components/calendar/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/calendar/index.md) diff --git a/packages/ui/docs/components/calendar/overview.md b/packages/ui/docs/components/calendar/overview.md new file mode 100644 index 000000000..251d49395 --- /dev/null +++ b/packages/ui/docs/components/calendar/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/calendar/overview.md) diff --git a/packages/ui/docs/components/calendar/use-cases.md b/packages/ui/docs/components/calendar/use-cases.md new file mode 100644 index 000000000..4cb05f9e1 --- /dev/null +++ b/packages/ui/docs/components/calendar/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/calendar/use-cases.md) diff --git a/packages/ui/docs/components/checkbox-group/index.md b/packages/ui/docs/components/checkbox-group/index.md new file mode 100644 index 000000000..8b51abd31 --- /dev/null +++ b/packages/ui/docs/components/checkbox-group/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/checkbox-group/index.md) diff --git a/packages/ui/docs/components/checkbox-group/overview.md b/packages/ui/docs/components/checkbox-group/overview.md new file mode 100644 index 000000000..f40efd625 --- /dev/null +++ b/packages/ui/docs/components/checkbox-group/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/checkbox-group/overview.md) diff --git a/packages/ui/docs/components/checkbox-group/use-cases.md b/packages/ui/docs/components/checkbox-group/use-cases.md new file mode 100644 index 000000000..a655a2e51 --- /dev/null +++ b/packages/ui/docs/components/checkbox-group/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/checkbox-group/use-cases.md) diff --git a/packages/ui/docs/components/collapsible/assets/CustomCollapsible.js b/packages/ui/docs/components/collapsible/assets/CustomCollapsible.js new file mode 100644 index 000000000..1bed17454 --- /dev/null +++ b/packages/ui/docs/components/collapsible/assets/CustomCollapsible.js @@ -0,0 +1,113 @@ +import { LionCollapsible } from '@lion/ui/collapsible.js'; + +const EVENT = { + TRANSITION_END: 'transitionend', + TRANSITION_START: 'transitionstart', +}; +/** + * `CustomCollapsible` is a class for custom collapsible element (`` web component). + * @customElement custom-collapsible + */ +// @ts-expect-error false positive for incompatible static get properties. Lit-element merges super properties already for you. +export class CustomCollapsible extends LionCollapsible { + static get properties() { + return { + transitioning: { + type: Boolean, + reflect: true, + }, + }; + } + + constructor() { + super(); + this.transitioning = false; + } + + connectedCallback() { + super.connectedCallback(); + this._contentNode?.style.setProperty( + 'transition', + 'max-height 0.35s, padding 0.35s, opacity 0.35s', + ); + if (this.opened) { + this._contentNode?.style.setProperty('padding', '12px 0'); + } + } + + /** + * Wait until transition is finished. + * @override + */ + toggle() { + if (!this.transitioning) { + super.toggle(); + } + } + + /** + * Trigger show animation and wait for transition to be finished. + * @param {Object} options - element node and its options + * @param {HTMLElement} options.contentNode + * @override + */ + async _showAnimation({ contentNode }) { + const expectedHeight = await this.__calculateHeight(contentNode); + contentNode.style.setProperty('opacity', '1'); + contentNode.style.setProperty('padding', '12px 0'); + contentNode.style.setProperty('max-height', '0px'); + await new Promise(resolve => requestAnimationFrame(() => resolve())); + contentNode.style.setProperty('max-height', expectedHeight); + await this._waitForTransition({ contentNode }); + } + + /** + * Trigger hide animation and wait for transition to be finished. + * @param {Object} options - element node and its options + * @param {HTMLElement} options.contentNode + * @override + */ + async _hideAnimation({ contentNode }) { + if (this._contentHeight === '0px') { + return; + } + ['opacity', 'padding', 'max-height'].map(prop => contentNode.style.setProperty(prop, '0')); + await this._waitForTransition({ contentNode }); + } + + /** + * Wait until the transition event is finished. + * @param {Object} options - element node and its options + * @param {HTMLElement} options.contentNode + * @returns {Promise} transition event + */ + _waitForTransition({ contentNode }) { + return new Promise(resolve => { + const transitionStarted = () => { + contentNode.removeEventListener(EVENT.TRANSITION_START, transitionStarted); + this.transitioning = true; + }; + contentNode.addEventListener(EVENT.TRANSITION_START, transitionStarted); + + const transitionEnded = () => { + contentNode.removeEventListener(EVENT.TRANSITION_END, transitionEnded); + this.transitioning = false; + resolve(); + }; + contentNode.addEventListener(EVENT.TRANSITION_END, transitionEnded); + }); + } + + /** + * Calculate total content height after collapsible opens + * @param {HTMLElement} contentNode content node + * @private + */ + async __calculateHeight(contentNode) { + contentNode.style.setProperty('max-height', ''); + await new Promise(resolve => requestAnimationFrame(() => resolve())); + return this._contentHeight; // Expected height i.e. actual size once collapsed after animation + } +} + +customElements.define('custom-collapsible', CustomCollapsible); diff --git a/packages/ui/docs/components/collapsible/assets/applyDemoCollapsibleStyles.js b/packages/ui/docs/components/collapsible/assets/applyDemoCollapsibleStyles.js new file mode 100644 index 000000000..caba2de06 --- /dev/null +++ b/packages/ui/docs/components/collapsible/assets/applyDemoCollapsibleStyles.js @@ -0,0 +1,37 @@ +import { css } from 'lit'; + +const applyDemoCollapsibleStyles = () => { + const demoCollapsibleStyles = css` + .demo-custom-collapsible-container { + padding: 16px; + margin: 16px; + border-radius: 4px; + width: 400px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + } + + .demo-custom-collapsible-body { + padding: 12px 0px; + } + + .demo-custom-collapsible-invoker { + border-width: 0; + border-radius: 2px; + padding: 12px 24px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + font-weight: bold; + color: #3f51b5; + } + + .demo-custom-collapsible-state-container { + padding: 12px 0; + } + `; + + const styleTag = document.createElement('style'); + styleTag.setAttribute('data-demo-collapsible', ''); + styleTag.textContent = demoCollapsibleStyles.cssText; + document.head.appendChild(styleTag); +}; + +applyDemoCollapsibleStyles(); diff --git a/packages/ui/docs/components/collapsible/examples.md b/packages/ui/docs/components/collapsible/examples.md new file mode 100644 index 000000000..60d162d8a --- /dev/null +++ b/packages/ui/docs/components/collapsible/examples.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/collapsible/examples.md) diff --git a/packages/ui/docs/components/collapsible/index.md b/packages/ui/docs/components/collapsible/index.md new file mode 100644 index 000000000..b5823a2a7 --- /dev/null +++ b/packages/ui/docs/components/collapsible/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/collapsible/index.md) diff --git a/packages/ui/docs/components/collapsible/overview.md b/packages/ui/docs/components/collapsible/overview.md new file mode 100644 index 000000000..dd52cc5a1 --- /dev/null +++ b/packages/ui/docs/components/collapsible/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/collapsible/overview.md) diff --git a/packages/ui/docs/components/collapsible/use-cases.md b/packages/ui/docs/components/collapsible/use-cases.md new file mode 100644 index 000000000..73267fc0e --- /dev/null +++ b/packages/ui/docs/components/collapsible/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/collapsible/use-cases.md) diff --git a/packages/ui/docs/components/combobox/examples.md b/packages/ui/docs/components/combobox/examples.md new file mode 100644 index 000000000..32ba321a6 --- /dev/null +++ b/packages/ui/docs/components/combobox/examples.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/combobox/examples.md) diff --git a/packages/ui/docs/components/combobox/index.md b/packages/ui/docs/components/combobox/index.md new file mode 100644 index 000000000..af16f348b --- /dev/null +++ b/packages/ui/docs/components/combobox/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/combobox/index.md) diff --git a/packages/ui/docs/components/combobox/overview.md b/packages/ui/docs/components/combobox/overview.md new file mode 100644 index 000000000..583489872 --- /dev/null +++ b/packages/ui/docs/components/combobox/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/combobox/overview.md) diff --git a/packages/ui/docs/components/combobox/src/LinkMixin.js b/packages/ui/docs/components/combobox/src/LinkMixin.js new file mode 100644 index 000000000..99378104d --- /dev/null +++ b/packages/ui/docs/components/combobox/src/LinkMixin.js @@ -0,0 +1,60 @@ +import { dedupeMixin } from '@open-wc/dedupe-mixin'; + +/** + * @typedef {import('lit-element').PropertyValues } changedProperties + */ + +/** + * Designed for webcomponents that need to behave like a link. + * For instance, comboboxes that have search result options opening a webpage on click. + * Using an is not a viable alternative, because: + * - no shadow dom (and thus no style encapsulation possibilities) + * - we need to extend from LionOption (and we cannot put the anchor inside + * the focusable element (LionOption which has [role=option])) + */ +const LinkMixinImplementation = superclass => + class extends superclass { + static get properties() { + return { + href: String, + target: String, + }; + } + + constructor() { + super(); + this._nativeAnchor = document.createElement('a'); + } + + connectedCallback() { + super.connectedCallback(); + if (!this.hasAttribute('role')) { + this.setAttribute('role', 'link'); + } + } + + firstUpdated(changedProperties) { + super.firstUpdated(changedProperties); + this.addEventListener('click', this.__navigate); + this.addEventListener('keydown', ({ key }) => { + if (key === ' ' || key === 'Enter') { + this.__navigate(); + } + }); + } + + updated(changedProperties) { + super.updated(changedProperties); + if (changedProperties.has('href')) { + this._nativeAnchor.href = this.href; + } + if (changedProperties.has('target')) { + this._nativeAnchor.target = this.target; + } + } + + __navigate() { + this._nativeAnchor.click(); + } + }; +export const LinkMixin = dedupeMixin(LinkMixinImplementation); diff --git a/packages/ui/docs/components/combobox/src/demo-selection-display.js b/packages/ui/docs/components/combobox/src/demo-selection-display.js new file mode 100644 index 000000000..d5377353a --- /dev/null +++ b/packages/ui/docs/components/combobox/src/demo-selection-display.js @@ -0,0 +1,191 @@ +// eslint-disable-next-line max-classes-per-file +import { LitElement, html, css, nothing } from 'lit'; + +/** + * Disclaimer: this is just an example component demoing the selection display of LionCombobox + * It needs an 'a11y plan' and tests before it could be released + */ + +/** + * @typedef {import('./LionCombobox.js.js.js.js').LionCombobox} LionCombobox + */ + +/** + * Renders the wrapper containing the textbox that triggers the listbox with filtered options. + * Optionally, shows 'chips' that indicate the selection. + * Should be considered an internal/protected web component to be used in conjunction with + * LionCombobox + * + */ +export class DemoSelectionDisplay extends LitElement { + static get properties() { + return { + comboboxElement: Object, + /** + * Can be used to visually indicate the next + */ + removeChipOnNextBackspace: Boolean, + selectedElements: Array, + }; + } + + static get styles() { + return css` + :host { + display: flex; + } + + .combobox__selection { + flex: none; + } + + .combobox__input { + display: block; + } + + .selection-chip { + border-radius: 4px; + background-color: #eee; + padding: 4px; + font-size: 10px; + } + + .selection-chip--highlighted { + background-color: #ccc; + } + + * > ::slotted([slot='_textbox']) { + outline: none; + width: 100%; + height: 100%; + box-sizing: border-box; + border: none; + border-bottom: 1px solid; + } + `; + } + + /** + * @configure FocusMixin + */ + get _inputNode() { + return this.comboboxElement._inputNode; + } + + _computeSelectedElements() { + const { formElements, checkedIndex } = /** @type {LionCombobox} */ (this.comboboxElement); + const checkedIndexes = Array.isArray(checkedIndex) ? checkedIndex : [checkedIndex]; + return formElements.filter((_, i) => checkedIndexes.includes(i)); + } + + get multipleChoice() { + return this.comboboxElement?.multipleChoice; + } + + constructor() { + super(); + + this.selectedElements = []; + + /** @type {EventListener} */ + this.__textboxOnKeyup = this.__textboxOnKeyup.bind(this); + /** @type {EventListener} */ + this.__restoreBackspace = this.__restoreBackspace.bind(this); + } + + /** + * @param {import('lit-element').PropertyValues } changedProperties + */ + firstUpdated(changedProperties) { + super.firstUpdated(changedProperties); + + if (this.multipleChoice) { + this._inputNode.addEventListener('keyup', this.__textboxOnKeyup); + this._inputNode.addEventListener('focusout', this.__restoreBackspace); + } + } + + /** + * @param {import('lit-element').PropertyValues } changedProperties + */ + onComboboxElementUpdated(changedProperties) { + if (changedProperties.has('modelValue')) { + this.selectedElements = this._computeSelectedElements(); + } + } + + /** + * Whenever selectedElements are updated, makes sure that latest added elements + * are shown latest, and deleted elements respect existing order of chips. + */ + __reorderChips() { + const { selectedElements } = this; + if (this.__prevSelectedEls) { + const addedEls = selectedElements.filter(e => !this.__prevSelectedEls.includes(e)); + const deletedEls = this.__prevSelectedEls.filter(e => !selectedElements.includes(e)); + if (addedEls.length) { + this.selectedElements = [...this.__prevSelectedEls, ...addedEls]; + } else if (deletedEls.length) { + deletedEls.forEach(delEl => { + this.__prevSelectedEls.splice(this.__prevSelectedEls.indexOf(delEl), 1); + }); + this.selectedElements = this.__prevSelectedEls; + } + } + this.__prevSelectedEls = this.selectedElements; + } + + /** + * @param {import("@lion/listbox").LionOption} option + * @param {boolean} highlight + */ + // eslint-disable-next-line class-methods-use-this + _selectedElementTemplate(option, highlight) { + return html` + + ${option.value} + + `; + } + + _selectedElementsTemplate() { + if (!this.multipleChoice) { + return nothing; + } + return html` +
+ ${this.selectedElements.map((option, i) => { + const highlight = Boolean( + this.removeChipOnNextBackspace && i === this.selectedElements.length - 1, + ); + return this._selectedElementTemplate(option, highlight); + })} +
+ `; + } + + render() { + return html` ${this._selectedElementsTemplate()} `; + } + + /** + * @param {{ key: string; }} ev + */ + __textboxOnKeyup(ev) { + if (ev.key === 'Backspace') { + if (!this._inputNode.value) { + if (this.removeChipOnNextBackspace && this.selectedElements.length) { + this.selectedElements[this.selectedElements.length - 1].checked = false; + } + this.removeChipOnNextBackspace = true; + } + } else { + this.removeChipOnNextBackspace = false; + } + } + + __restoreBackspace() { + this.removeChipOnNextBackspace = false; + } +} +customElements.define('demo-selection-display', DemoSelectionDisplay); diff --git a/packages/ui/docs/components/combobox/src/gh-combobox/gh-button.js b/packages/ui/docs/components/combobox/src/gh-combobox/gh-button.js new file mode 100644 index 000000000..c24f2d33a --- /dev/null +++ b/packages/ui/docs/components/combobox/src/gh-combobox/gh-button.js @@ -0,0 +1,69 @@ +import { css, html } from 'lit'; +import { LionButton } from '@lion/ui/button.js'; + +export class GhButton extends LionButton { + static get properties() { + return { + value: String, + }; + } + + static get styles() { + return css` + :host { + outline: none; + position: relative; + display: inline-flex; + align-items: center; + padding: 5px 16px; + font-size: 14px; + font-weight: 500; + line-height: 20px; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border: 1px solid; + border-radius: 6px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + + color: #24292e; + background-color: #fafbfc; + border-color: rgba(27, 31, 35, 0.15); + box-shadow: 0 1px 0 rgba(27, 31, 35, 0.04), inset 0 1px 0 hsla(0, 0%, 100%, 0.25); + transition: background-color 0.2s cubic-bezier(0.3, 0, 0.5, 1); + } + + :host(:hover) { + background-color: #f3f4f6; + transition-duration: 0.1s; + } + + :host ::slotted([slot='before']) { + margin-right: 4px; + } + + /** + * TODO: this doesn't have to be light dom anymore in LionButton, + * just spawning a hidden native button on submit would be enough + */ + :host ::slotted(button) { + position: absolute; + opacity: 0; + } + `; + } + + render() { + return html` + ${this.value} + + `; + } +} +customElements.define('gh-button', GhButton); diff --git a/packages/ui/docs/components/combobox/src/gh-combobox/gh-combobox.js b/packages/ui/docs/components/combobox/src/gh-combobox/gh-combobox.js new file mode 100644 index 000000000..5b40a91f3 --- /dev/null +++ b/packages/ui/docs/components/combobox/src/gh-combobox/gh-combobox.js @@ -0,0 +1,508 @@ +import { css, html } from 'lit'; +import { LionOption } from '@lion/ui/listbox.js'; +import { renderLitAsNode } from '@lion/ui/helpers.js'; +// import { withModalDialogConfig } from '@lion/ui/overlays.js'; +import { LionCombobox } from '@lion/ui/combobox.js'; +import './gh-button.js'; + +export class GhOption extends LionOption { + static get properties() { + return { + category: String, + default: { type: Boolean, reflect: true }, + }; + } + + static get styles() { + return [ + ...super.styles, + css` + :host { + display: flex; + align-items: center; + width: 100%; + padding: 16px; + overflow: hidden; + color: #24292e; + text-align: left; + cursor: pointer; + background-color: #fff; + border: 0; + border-bottom: 1px solid #eaecef; + box-sizing: border-box; + display: flex; + align-items: center; + } + + @media (min-width: 544px) { + :host { + padding-top: 7px; + padding-bottom: 7px; + } + } + + :host([checked]) { + background-color: white; + } + + :host(:hover), + :host([active]), + :host([focused]) { + background-color: #f6f8fa; + } + + .gh-check-icon { + visibility: hidden; + margin-right: 4px; + } + + :host([checked]) .gh-check-icon { + visibility: visible; + } + + .gh-default-badge { + visibility: hidden; + + display: inline-block; + padding: 0 7px; + font-size: 12px; + font-weight: 500; + line-height: 18px; + border-radius: 2em; + background-color: initial !important; + border: 1px solid #e1e4e8; + color: #586069; + border-color: #e1e4e8; + } + + :host([default]) .gh-default-badge { + visibility: visible; + } + + .gh-content { + flex: 1; + } + `, + ]; + } + + render() { + return html` + + + default + `; + } +} +customElements.define('gh-option', GhOption); + +export class GhCombobox extends LionCombobox { + static get properties() { + return { + category: { type: String }, + isDesktop: { type: Boolean, reflect: true, attribute: 'is-desktop' }, + }; + } + + static get styles() { + return [ + ...super.styles, + css` + /** @configure LionCombobox */ + + :host { + font-family: apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, + Apple Color Emoji, Segoe UI Emoji; + font-size: 14px; + } + + .input-group__container { + display: flex; + border-bottom: none; + } + + * > ::slotted([role='listbox']) { + max-height: none; + } + + * > ::slotted([slot='input']) { + padding: 5px 12px; + font-size: 14px; + line-height: 20px; + color: #24292e; + vertical-align: middle; + background-color: #fff; + background-repeat: no-repeat; + background-position: right 8px center; + border: 1px solid #e1e4e8; + border-radius: 6px; + outline: none; + box-shadow: inset 0 1px 0 rgba(225, 228, 232, 0.2); + } + + :host([is-desktop]) { + font-size: 12px; + } + + :host([is-desktop]) ::slotted([slot='input']) { + font-size: 14px; + } + + :host([focused]) ::slotted([slot='input']) { + border-color: #0366d6; + outline: none; + box-shadow: 0 0 0 3px rgba(3, 102, 214, 0.3); + } + + .gh-combobox { + height: auto; + max-height: 480px; + margin-top: 8px; + + position: relative; + z-index: 99; + display: flex; + max-height: 66%; + margin: auto 0; + overflow: hidden; + pointer-events: auto; + flex-direction: column; + background-color: #fff; + border-radius: 12px; + box-shadow: 0 0 18px rgba(27, 31, 35, 0.4); + /* animation: SelectMenu-modal-animation 0.12s cubic-bezier(0, 0.1, 0.1, 1) backwards; */ + } + + :host([is-desktop]) .gh-combobox { + width: 300px; + height: auto; + max-height: 480px; + margin: 8px 0 16px; + font-size: 12px; + border: 1px solid #e1e4e8; + border-radius: 6px; + box-shadow: 0 8px 24px rgba(149, 157, 165, 0.2); + /* animation-name: SelectMenu-modal-animation--sm; */ + } + + .form-field__label { + font-weight: bold; + } + + /** @enhance LionCombobox */ + + .gh-categories { + display: flex; + flex-shrink: 0; + overflow-x: auto; + overflow-y: hidden; + box-shadow: inset 0 -1px 0 #eaecef; + -webkit-overflow-scrolling: touch; + } + + :host([is-desktop]) .gh-categories { + padding: 8px 8px 0; + } + + .gh-categories__btn { + flex: 1; + padding: 8px 16px; + font-size: 12px; + font-weight: 500; + color: #6a737d; + text-align: center; + background-color: initial; + border: 0; + box-shadow: inset 0 -1px 0 #eaecef; + + border-radius: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + outline: none; + + cursor: pointer; + } + + .gh-categories__btn:focus { + background-color: #dbedff; + } + + :host([is-desktop]) .gh-categories__btn { + flex: none; + padding: 4px 16px; + border: solid transparent; + border-width: 1px 1px 0; + border-top-left-radius: 6px; + border-top-right-radius: 6px; + } + + .gh-categories__btn[aria-pressed='true'] { + z-index: 1; + color: #24292e; + cursor: default; + box-shadow: 0 0 0 1px #eaecef; + cursor: default; + } + + :host([is-desktop]) .gh-categories__btn { + flex: none; + } + :host([is-desktop]) .gh-categories__btn[aria-pressed='true'] { + border-color: #eaecef; + box-shadow: none; + } + + .gh-section-wrapper { + padding: 16px; + margin: 0; + border-bottom: 1px solid #eaecef; + } + + :host([is-desktop]) .gh-section-wrapper { + padding: 8px; + } + `, + ]; + } + + /** + * @override LionCombobox put all content in an overlay + */ + // eslint-disable-next-line class-methods-use-this + render() { + return html` + + + + `; + } + + /** + * Wrapper with combobox role for the text input that the end user controls the listbox with. + * @type {HTMLElement} + */ + get _comboboxNode() { + if (this.__comboboxNode) { + return this.__comboboxNode; + } + const slot = this.querySelector('[slot="input"]'); + if (slot) { + this.__comboboxNode = slot; + return slot; + } + const slot2 = this._overlayCtrl?.contentWrapperNode.querySelector('[slot="input"]'); + if (slot2) { + this.__comboboxNode = slot2; + return slot2; + } + return null; + } + + /** + * @override LionCombobox: remove selection-display (place it higher up) + */ + // eslint-disable-next-line class-methods-use-this + _inputGroupInputTemplate() { + return html` +
+ +
+ `; + } + + /** + * @override LionCombobox: restore to values FormControlMixin + */ + // eslint-disable-next-line class-methods-use-this + _groupTwoTemplate() { + return html` ${this._inputGroupTemplate()} ${this._feedbackTemplate()} `; + } + + get slots() { + return { + ...super.slots, + 'selection-display': () => + renderLitAsNode(html` + + + + + + `), + }; + } + + get _overlayInvokerNode() { + return this.querySelector('[slot="selection-display"]'); + } + + get _overlayReferenceNode() { + return this._overlayInvokerNode; + } + + get _categoryButtons() { + return Array.from(this.shadowRoot.querySelectorAll('.gh-categories__btn[data-category]')); + } + + constructor() { + super(); + + this.showAllOnEmpty = true; + + /** @type {'branches'|'tags'} */ + this.category = 'branches'; + + this.selectionFollowsFocus = false; + + // Capture mobile OverlayConfig + this.__mobileDropdownComboConfig = this.config; + } + + firstUpdated(changedProperties) { + super.firstUpdated(changedProperties); + + const mql = window.matchMedia('(min-width: 544px)'); + this.isDesktop = mql.matches; + mql.addListener(({ matches }) => { + this.isDesktop = matches; + }); + } + + updated(changedProperties) { + super.updated(changedProperties); + + if (changedProperties.has('category')) { + const cat = this.category; + this._categoryButtons.forEach(btn => { + btn.setAttribute( + 'aria-pressed', + btn.getAttribute('data-category') === cat ? 'true' : 'false', + ); + }); + + this._inputNode.placeholder = + cat === 'branches' ? 'Find or create a branch...' : 'Find a tag'; + + this._handleAutocompletion(); + } + + if (changedProperties.has('opened')) { + // eslint-disable-next-line no-shadow + this._selectionDisplayNode.value = this.modelValue || 'Choose a value...'; + + if (this.opened) { + setTimeout(() => { + this._inputNode.focus(); + }); + } else { + setTimeout(() => { + this._selectionDisplayNode.focus(); + }, 100); + } + } + + if (changedProperties.has('isDesktop')) { + // this.config = this.isDesktop ? this.__mobileDropdownComboConfig : withModalDialogConfig(); + } + } + + // /** + // * @enhance LionCombobox + // * @param {*} option + // * @param {...any} args + // */ + // matchCondition(option, ...args) { + // return super.matchCondition(option, ...args) && option.category === this.category; + // } + + // _defineOverlayConfig() { + // // temp + // return { ...super._defineOverlayConfig(), hidesOnOutsideClick: false }; + // } + + __handleCategory(ev) { + this.category = ev.target.getAttribute('data-category'); + } + + // TODO: overrides below are not safe for override and should be made configurable in Combobox + // basically it should be possible te create a combobox without an overlay + + /** + * @override + */ + _textboxOnKeydown() { + // if (ev.key === 'Tab') { + // this.opened = false; + // } + this.__hasSelection = this._inputNode.value.length !== this._inputNode.selectionStart; + } + + /** + * @enhance OverlayMixin + */ + _setupOpenCloseListeners() { + super._setupOpenCloseListeners(); + this.__toggleOverlay = this.__toggleOverlay.bind(this); + this._overlayInvokerNode.addEventListener('click', this.__toggleOverlay); + } + + __toggleOverlay() { + this.opened = !this.opened; + } + + /** + * @enhance OverlayMixin + */ + _teardownOpenCloseListeners() { + super._teardownOpenCloseListeners(); + this._overlayInvokerNode.removeEventListener('click', this.__toggleOverlay); + } +} +customElements.define('gh-combobox', GhCombobox); diff --git a/packages/ui/docs/components/combobox/src/google-combobox/assets/google-clear-icon.js b/packages/ui/docs/components/combobox/src/google-combobox/assets/google-clear-icon.js new file mode 100644 index 000000000..af73cee2c --- /dev/null +++ b/packages/ui/docs/components/combobox/src/google-combobox/assets/google-clear-icon.js @@ -0,0 +1,9 @@ +import { html } from 'lit'; + +export default html` + + + +`; diff --git a/packages/ui/docs/components/combobox/src/google-combobox/assets/google-search-icon.js b/packages/ui/docs/components/combobox/src/google-combobox/assets/google-search-icon.js new file mode 100644 index 000000000..bd89b44dd --- /dev/null +++ b/packages/ui/docs/components/combobox/src/google-combobox/assets/google-search-icon.js @@ -0,0 +1,9 @@ +import { html } from 'lit'; + +export default html` + + + +`; diff --git a/packages/ui/docs/components/combobox/src/google-combobox/assets/google-voice-search-icon.js b/packages/ui/docs/components/combobox/src/google-combobox/assets/google-voice-search-icon.js new file mode 100644 index 000000000..72bf95009 --- /dev/null +++ b/packages/ui/docs/components/combobox/src/google-combobox/assets/google-voice-search-icon.js @@ -0,0 +1,19 @@ +import { html } from 'lit'; + +export default html` + + + + + + +`; diff --git a/packages/ui/docs/components/combobox/src/google-combobox/assets/googlelogo_color_272x92dp.png b/packages/ui/docs/components/combobox/src/google-combobox/assets/googlelogo_color_272x92dp.png new file mode 100644 index 0000000000000000000000000000000000000000..333bda93710d1668ca6452a507ab8a12c343996e GIT binary patch literal 5969 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�U0N z3m6JPKp0sW8@)7ef#2ByzNjH_8IB}mH>f&eAXG;q!hPy}p-9g4)~36>eW@M_@Y*0J zu()+zMC5S+-TB@6)yQVYsmCP7Eu0(m(S@+;dYRA#Wi`_Spy`oEjm1TS`wRsw9sEbOIWFBIc zOd}Gyb8#`kUPSRe7fBA8nmI}&FiV0!hA^gqg#-vodh*@Mwh^D8=m5uFB0s#G;JZlb zhac7*EK7i?GLFx##DnX_Mm%Ytb{3JxEyL+Z&?6&RD5xo?Io|6H%v%{m%Qfs1Q6*s^ zFuSWd4o4O4_&=!KOj66KoEM6j37#A^>vkl=q;2MG>xXjF)UDpp$O<<#Wa5%z9hN{r z8e-D_U6K>(R#HYs2vWFQ@>;L7^P4^_H*a_IN9Yl^dIEu=RmnEiNtAD2M{^yM1e)g% z#ZpKrbTpFg9+<#gZ%qWln+Bo1fcn#Rg0pjZZyJnzU>}Dg38EEy{>G2OVgT*j2w!bC z=%tVb;aGJU3yJa!;|N(BxSg|1FCXp6fNop3ONr=ZgCu!uq5805bb`n;Y?Yiu_m&`% zO9e5Ecoc;pGDK^Fq&7&t|5ki1MgVdlJRiI$m(=$*amQPP2jFN4cuXh2*C%hVly#ybtNS?fMsTH@Ft<4uUv_k~-QFBv8|nMP556&n<;Q8KqwAJD3CEs8Y-t zFNA#0=P)sVg$1PR-0^?XD#U@!VY@zUqY{oXuysqqaBa*v#pjXDPmolh>KDjkDLzjK zVb>RNUEfK=wbA&7Cb+ow9Fn#DogIfn(k5>^!90T1TdXVN1{*U@a1x6UkOvcdLX@ro zH-CntS6FWj_=LnfnSVLv&nWPCX<-5(~Bk~r}GnDnnkOjxmCE1_UNRbW&ERdtdG1bBJogx&BkK}AF@d6+j45~k4; z3Cg9m>%G>jhy&_Flzv&0Q8Ng65z4Aj+s>7;=9Q`&r9?hrFA*Iq!g$L_i39J4r~{M! z6#_G1Y}fx*R1dGeR2uzbm;i-9kf>KeAcQuH0=FKHnm7>Q6m!Nj7AK$tgz(FD{9Cvi zlp`jMZSW!CPH;|c!Fq+8Q@#nQ#I0^bB#lNK#jNSn%;HcE=sm=Z-`!|Lva^A%2l|j^ zcacNSQPVp^UKsy@u_X{KzO5gulXBEiMj(XBU^#1Kkdqr_2t3JC7piN#XX4C_5o#h= zVmrY-Fo1!iT%v}*#&*01ITB}1a3Vp?8Y_^e5a-4mawLVU_0(tsvhn|z?2nnFg`AaD z?eb2_kMy?XkRuUCoTo7QaRB>!ouGHXSrd;~fa(3-qC6$pWPC zf=ni&SE|U3)8JT#2%|qUX)>Z^#gT@Fh6WVO1Oi#bYN4T_p@Ad!Xas^hA8S2mXlNk6 z20^2$_l76y7@HTZp`kIOYv8@y_2**pAj+sJ%J}FACu&AcU>X`4$p<=eIjSqJw|Uo_ z*na>C(PmF4fc7N8iGB?Y4U}c!4Kv!LL3~YQKhvq0h-?V?kDoFP4UOaiz8yrp&}PU2 zSc8CNMJ6A-K%C3_&rCx@Be}@U-*^~Rc!;LXMyB;cqzDH*qR4T>tgh-FOhZE>*~qy5 zjZ&=+Av&@#-A=}F&vty5wFWdabkzkVRmnkTFJd?pqKc7vw&2T)F(l~dmgt)qz-MBu z0SyfeNYTUkdWakTQQPqs+pg~*azI4G9dCKK#yc#34r?uFXlQ@{;x?^9jszkz){4;3 z(8^P9XEwaA&)pjjXRQwn4IPOfm(fH5d5K`s-Ad5V z(7@OZIEkq}wgh)7bH3Bi(1_nKh&#b`Q9HCljS90XHuj;Rp#g_6?gUq(G~37|L!J-% z;95qQ@ITg|p`ih9Q`lk(BDsb;{^KJJX3ylkEl{7@u74XuXE0`F8X6iJZ=Ym`(reoF zkLFIL1OBMo^^W4M|9-9KXf$1`, + ); + // For Safari, we need to add a label to the element + this.setAttribute('aria-label', this.textContent); + this.innerHTML = newInnerHTML; + // Alternatively, an extension can add an animation here + this.style.display = ''; + } + + /** + * @configure LionCombobox + */ + onFilterUnmatch() { + this.removeAttribute('aria-label'); + if (this.__originalInnerHTML) { + this.innerHTML = this.__originalInnerHTML; + } + this.style.display = 'none'; + } + + render() { + return html` + ${!this.imageUrl + ? html`
${googleSearchIcon}
` + : html` `} + ${super.render()} + `; + } +} +customElements.define('google-option', GoogleOption); + +export class GoogleCombobox extends LionCombobox { + static get styles() { + return [ + ...super.styles, + css` + /** @configure FormControlMixin */ + + /* ======================= + block | .form-field + ======================= */ + + :host { + font-family: arial, sans-serif; + } + + .form-field__label { + margin-top: 36px; + margin-bottom: 24px; + display: flex; + justify-content: center; + } + + /* ============================== + element | .input-group + ============================== */ + + .input-group { + margin-bottom: 16px; + max-width: 582px; + margin: auto; + } + + .input-group__container { + position: relative; + background: #fff; + display: flex; + border: 1px solid #dfe1e5; + box-shadow: none; + border-radius: 24px; + height: 44px; + } + + .input-group__container:hover, + :host([opened]) .input-group__container { + border-color: rgba(223, 225, 229, 0); + box-shadow: 0 1px 6px rgba(32, 33, 36, 0.28); + } + + :host([opened]) .input-group__container { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + + :host([opened]) .input-group__container::before { + content: ''; + position: absolute; + background: white; + left: 0; + right: 0; + height: 10px; + bottom: -10px; + } + + :host([opened]) .input-group__container::after { + content: ''; + position: absolute; + background: #eee; + left: 16px; + right: 16px; + height: 1px; + bottom: 0; + z-index: 3; + } + + .input-group__prefix, + .input-group__suffix { + display: block; + fill: var(--icon-color); + display: flex; + place-items: center; + } + + .input-group__input { + flex: 1; + } + + .input-group__input ::slotted([slot='input']) { + border: transparent; + width: 100%; + } + + /** @configure LionCombobox */ + + /* ======================= + block | .form-field + ======================= */ + + #overlay-content-node-wrapper { + box-shadow: 0 4px 6px rgba(32, 33, 36, 0.28); + border-radius: 0 0 24px 24px; + margin-top: -2px; + padding-top: 6px; + background: white; + } + + * > ::slotted([slot='listbox']) { + margin-bottom: 8px; + background: none; + } + + :host { + --icon-color: #9aa0a6; + } + + /** @enhance LionCombobox */ + + /* =================================== + block | .google-search-clear-btn + =================================== */ + + .google-search-clear-btn { + position: relative; + height: 100%; + align-items: center; + display: none; + } + + .google-search-clear-btn::after { + border-left: 1px solid #dfe1e5; + height: 65%; + right: 0; + content: ''; + margin-right: 10px; + margin-left: 8px; + } + + :host([filled]) .google-search-clear-btn { + display: flex; + } + + * > ::slotted([slot='suffix']), + * > ::slotted([slot='clear-btn']) { + font: inherit; + margin: 0; + border: 0; + outline: 0; + padding: 0; + color: inherit; + background-color: transparent; + text-align: left; + white-space: normal; + overflow: visible; + + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + -webkit-tap-highlight-color: transparent; + + width: 25px; + height: 25px; + cursor: pointer; + } + + * > ::slotted([slot='suffix']) { + margin-right: 20px; + } + + * > ::slotted([slot='prefix']) { + height: 20px; + width: 20px; + margin-left: 12px; + margin-right: 16px; + } + + /* ============================= + block | .google-search-btns + ============================ */ + + .google-search-btns { + display: flex; + justify-content: center; + align-items: center; + } + + .google-search-btns__input-button { + background-image: -webkit-linear-gradient(top, #f8f9fa, #f8f9fa); + background-color: #f8f9fa; + border: 1px solid #f8f9fa; + border-radius: 4px; + color: #3c4043; + font-family: arial, sans-serif; + font-size: 14px; + margin: 11px 4px; + padding: 0 16px; + line-height: 27px; + height: 36px; + min-width: 54px; + text-align: center; + cursor: pointer; + user-select: none; + } + + .google-search-btns__input-button:hover { + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + background-image: -webkit-linear-gradient(top, #f8f8f8, #f1f1f1); + background-color: #f8f8f8; + border: 1px solid #c6c6c6; + color: #222; + } + + .google-search-btns__input-button:focus { + border: 1px solid #4d90fe; + outline: none; + } + + /* =============================== + block | .google-search-report + ============================== */ + + .google-search-report { + display: flex; + align-content: right; + color: #70757a; + font-style: italic; + font-size: 8pt; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + margin-bottom: 8px; + justify-content: flex-end; + margin-right: 20px; + } + + .google-search-report a { + color: inherit; + } + `, + ]; + } + + /** + * @enhance LionCombobox - add google search buttons + */ + _overlayListboxTemplate() { + return html` +
+ + `; + } + + /** + * @enhance FormControlMixin add clear-btn + */ + _inputGroupSuffixTemplate() { + return html` +
+
+ +
+ +
+ `; + } + + _googleSearchBtnsTemplate() { + return html`
+ + +
`; + } + + /** + * @enhance FormControlMixin - add google search buttons + */ + _groupTwoTemplate() { + return html`${super._groupTwoTemplate()} ${!this.opened ? this._googleSearchBtnsTemplate() : ''} `; + } + + get slots() { + return { + ...super.slots, + label: () => renderLitAsNode(html` Google Search`), + prefix: () => renderLitAsNode(html` ${googleSearchIcon} `), + suffix: () => + renderLitAsNode( + html` `, + ), + 'clear-btn': () => + renderLitAsNode( + html` + + `, + ), + }; + } + + /** + * @configure OverlayMixin + */ + get _overlayReferenceNode() { + return /** @type {ShadowRoot} */ (this.shadowRoot).querySelector('.input-group'); + } + + constructor() { + super(); + /** @configure LionCombobox */ + this.autocomplete = 'list'; + /** @configure LionCombobox */ + this.showAllOnEmpty = true; + + this.__resetFocus = this.__resetFocus.bind(this); + this.__clearText = this.__clearText.bind(this); + } + + firstUpdated(changedProperties) { + super.firstUpdated(changedProperties); + + this._overlayContentNode.addEventListener('mouseenter', this.__resetFocus); + } + + /** + * @override LionCombobox - always sync textbox when selected value changes + */ + // eslint-disable-next-line no-unused-vars + _syncToTextboxCondition() { + return true; + } + + _showOverlayCondition(options) { + return this.focused || super._showOverlayCondition(options); + } + + __resetFocus() { + this.activeIndex = -1; + this.checkedIndex = -1; + } + + __clearText() { + this._inputNode.value = ''; + } +} +customElements.define('google-combobox', GoogleCombobox); diff --git a/packages/ui/docs/components/combobox/src/lazyRender.js b/packages/ui/docs/components/combobox/src/lazyRender.js new file mode 100644 index 000000000..8404ab4f0 --- /dev/null +++ b/packages/ui/docs/components/combobox/src/lazyRender.js @@ -0,0 +1,29 @@ +import { directive } from 'lit/directive.js'; +import { AsyncDirective } from 'lit/async-directive.js'; + +/** + * In order to speed up the first meaningful paint, use this directive + * on content that is: + * - (visually) hidden + * - out of the page flow (having position: 'absolute|fixed') + * + * A good practice would be to use it in overlays, + * For hidden tab panels, collapsible content etc. it's also useful + * @example + * + * ${lazyRender( + * largeListOfData.map(entry => html` ${entry} `), + * )} + * + */ +export const lazyRender = directive( + class extends AsyncDirective { + render(tplResult) { + setTimeout(() => { + this.setValue(tplResult); + }); + } + }, +); + +// export const lazyRender = () => {}; diff --git a/packages/ui/docs/components/combobox/src/levenshtein.js b/packages/ui/docs/components/combobox/src/levenshtein.js new file mode 100644 index 000000000..faae33d28 --- /dev/null +++ b/packages/ui/docs/components/combobox/src/levenshtein.js @@ -0,0 +1,95 @@ +/* eslint-disable */ +// https://github.com/gustf/js-levenshtein/blob/master/index.js + +function _min(d0, d1, d2, bx, ay) { + return d0 < d1 || d2 < d1 ? (d0 > d2 ? d2 + 1 : d0 + 1) : bx === ay ? d1 : d1 + 1; +} + +export default function (a, b) { + if (a === b) { + return 0; + } + + if (a.length > b.length) { + var tmp = a; + a = b; + b = tmp; + } + + var la = a.length; + var lb = b.length; + + while (la > 0 && a.charCodeAt(la - 1) === b.charCodeAt(lb - 1)) { + la--; + lb--; + } + + var offset = 0; + + while (offset < la && a.charCodeAt(offset) === b.charCodeAt(offset)) { + offset++; + } + + la -= offset; + lb -= offset; + + if (la === 0 || lb < 3) { + return lb; + } + + var x = 0; + var y; + var d0; + var d1; + var d2; + var d3; + var dd; + var dy; + var ay; + var bx0; + var bx1; + var bx2; + var bx3; + + var vector = []; + + for (y = 0; y < la; y++) { + vector.push(y + 1); + vector.push(a.charCodeAt(offset + y)); + } + + var len = vector.length - 1; + + for (; x < lb - 3; ) { + bx0 = b.charCodeAt(offset + (d0 = x)); + bx1 = b.charCodeAt(offset + (d1 = x + 1)); + bx2 = b.charCodeAt(offset + (d2 = x + 2)); + bx3 = b.charCodeAt(offset + (d3 = x + 3)); + dd = x += 4; + for (y = 0; y < len; y += 2) { + dy = vector[y]; + ay = vector[y + 1]; + d0 = _min(dy, d0, d1, bx0, ay); + d1 = _min(d0, d1, d2, bx1, ay); + d2 = _min(d1, d2, d3, bx2, ay); + dd = _min(d2, d3, dd, bx3, ay); + vector[y] = dd; + d3 = d2; + d2 = d1; + d1 = d0; + d0 = dy; + } + } + + for (; x < lb; ) { + bx0 = b.charCodeAt(offset + (d0 = x)); + dd = ++x; + for (y = 0; y < len; y += 2) { + dy = vector[y]; + vector[y] = dd = _min(dy, d0, dd, bx0, vector[y + 1]); + d0 = dy; + } + } + + return dd; +} diff --git a/packages/ui/docs/components/combobox/src/md-combobox/MdFieldMixin.js b/packages/ui/docs/components/combobox/src/md-combobox/MdFieldMixin.js new file mode 100644 index 000000000..1c813f9c9 --- /dev/null +++ b/packages/ui/docs/components/combobox/src/md-combobox/MdFieldMixin.js @@ -0,0 +1,341 @@ +import { html, css } from 'lit'; +import { dedupeMixin } from '@open-wc/dedupe-mixin'; + +export const MdFieldMixin = dedupeMixin( + superclass => + class extends superclass { + static get styles() { + return [ + ...super.styles, + css` + /** @configure FormControlMixin */ + + /* ======================= + block | .form-field + ======================= */ + + :host { + position: relative; + font-family: 'Roboto', sans-serif; + padding-top: 16px; + } + + /* ========================== + element | .form-field__label + ========================== */ + + .form-field__label ::slotted(label) { + display: block; + color: var(--text-color, #545454); + font-size: 1rem; + line-height: 1.5rem; + } + + :host([disabled]) .form-field__label ::slotted(label) { + color: var(--disabled-text-color, lightgray); + } + + .form-field__label { + position: absolute; + top: 4px; + left: 0; + font: inherit; + pointer-events: none; + width: 100%; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + transform: perspective(100px); + -ms-transform: none; + transform-origin: 0 0; + transition: transform 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), + color 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), + width 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + /* z-index: 1; */ + } + + :host([focused]) .form-field__label, + :host([filled]) .form-field__label { + transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.001px); + width: 133.333333333333333333%; + } + + :host([focused]) .form-field__label { + color: var(--color-primary, royalblue); + } + + /* ============================== + element | .form-field__help-text + ============================== */ + + .form-field__help-text { + visibility: hidden; + margin-top: 8px; + position: relative; + font-size: 0.8em; + display: block; + } + + :host([disabled]) .form-field__help-text ::slotted(*) { + color: var(--disabled-text-color, lightgray); + } + + :host([focused]) .form-field__help-text { + visibility: visible; + } + + :host([shows-feedback-for~='error']) .form-field__help-text { + display: none; + } + + /* ============================== + element | .form-field__feedback + ============================== */ + + .form-field__feedback { + margin-top: 8px; + position: relative; + font-size: 0.8em; + display: block; + } + + :host([shows-feedback-for~='error']) .form-field__feedback { + color: var(--color-error, red); + } + + /* ============================== + element | .input-group + ============================== */ + + .input-group { + display: flex; + } + + /* ============================== + element | .input-group__container + ============================== */ + + .input-group__container { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; + } + + /* ============================== + element | .input-group__input + ============================== */ + + .input-group__input { + display: flex; + flex: 1; + position: relative; + } + + /* ============================== + element | [slot="input"] + ============================== */ + + * > ::slotted([slot='input']) { + display: block; + box-sizing: border-box; + flex: 1 1 auto; + width: 1%; + padding: 0.5rem 0; + outline: none; + border: none; + color: var(--primary-text-color, #333333); + background: transparent; + background-clip: padding-box; + font-size: 100%; + } + + :host([disabled]) + .input-group__container + > .input-group__input + ::slotted([slot='input']) { + color: var(--disabled-text-color, lightgray); + } + + /* ============================== + element | .input-group__prefix, + element | .input-group__suffix + ============================== */ + + .input-group__prefix, + .input-group__suffix { + display: flex; + } + + .input-group__prefix ::slotted(*), + .input-group__suffix ::slotted(*) { + align-self: center; + text-align: center; + padding: 0.375rem 0.75rem; + line-height: 1.5; + display: flex; + white-space: nowrap; + margin-bottom: 0; + } + + .input-group__container > .input-group__prefix ::slotted(button), + .input-group__container > .input-group__suffix ::slotted(button) { + height: 100%; + border: none; + background: transparent; + + position: relative; + overflow: hidden; + transform: translate3d(0, 0, 0); + } + + .input-group__container > .input-group__prefix ::slotted(button)::after, + .input-group__container > .input-group__suffix ::slotted(button)::after { + content: ''; + display: block; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + pointer-events: none; + background-image: radial-gradient(circle, #000 10%, transparent 10.01%); + background-repeat: no-repeat; + background-position: 50%; + transform: scale(10, 10); + opacity: 0; + transition: transform 0.25s, opacity 0.5s; + } + + .input-group__container > .input-group__prefix ::slotted(button:active)::after, + .input-group__container > .input-group__suffix ::slotted(button:active)::after { + transform: scale(0, 0); + opacity: 0.2; + transition: 0s; + } + + /* ==== state | :focus ==== */ + + /* ============================== + element | .input-group__before, + element | .input-group__after + ============================== */ + + .input-group__before, + .input-group__after { + display: flex; + } + + .input-group__before ::slotted(*), + .input-group__after ::slotted(*) { + align-self: center; + text-align: center; + padding: 0.375rem 0.75rem; + line-height: 1.5; + } + + .input-group__before ::slotted(*) { + padding-left: 0; + } + + .input-group__after ::slotted(*) { + padding-right: 0; + } + + /** @enhance FormControlMixin */ + + /* ============================== + element | .md-input__underline + ============================== */ + + .md-input__underline { + position: absolute; + height: 1px; + width: 100%; + background-color: rgba(0, 0, 0, 0.42); + bottom: 0; + } + + :host([disabled]) .md-input__underline { + border-top: 1px var(--disabled-text-color, lightgray) dashed; + background-color: transparent; + } + + :host([shows-feedback-for~='error']) .md-input__underline { + background-color: var(--color-error, red); + } + + /* ============================== + element | .md-input__underline-ripple + ============================== */ + + .md-input__underline-ripple { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 2px; + transform-origin: 50%; + transform: scaleX(0.5); + visibility: hidden; + opacity: 0; + transition: background-color 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); + background-color: var(--color-primary, royalblue); + } + + :host([focused]) .md-input__underline-ripple { + visibility: visible; + opacity: 1; + transform: scaleX(1); + transition: transform 0.3s cubic-bezier(0.25, 0.8, 0.25, 1), + opacity 0.1s cubic-bezier(0.25, 0.8, 0.25, 1), + background-color 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); + } + + :host([shows-feedback-for~='error']) .md-input__underline-ripple { + background-color: var(--color-error, red); + } + `, + ]; + } + + /** + * @override FormControlMixin + */ + _groupOneTemplate() { + return html``; + } + + /** + * @override FormControlMixin + */ + _inputGroupInputTemplate() { + return html` +
+ ${this._labelTemplate()} + +
+ `; + } + + /** + * @enhance FormControlMixin + */ + _inputGroupTemplate() { + return html` +
+ ${this._inputGroupBeforeTemplate()} +
+ ${this._inputGroupPrefixTemplate()} ${this._inputGroupInputTemplate()} + ${this._inputGroupSuffixTemplate()} +
+ +
+
+ ${this._inputGroupAfterTemplate()} +
+ `; + } + }, +); diff --git a/packages/ui/docs/components/combobox/src/md-combobox/md-combobox.js b/packages/ui/docs/components/combobox/src/md-combobox/md-combobox.js new file mode 100644 index 000000000..81250a5dd --- /dev/null +++ b/packages/ui/docs/components/combobox/src/md-combobox/md-combobox.js @@ -0,0 +1,89 @@ +import { css, html } from 'lit'; +import { LionOption } from '@lion/ui/listbox.js'; +import { LionCombobox } from '@lion/ui/combobox.js'; +import { MdFieldMixin } from './MdFieldMixin.js'; +import './style/md-ripple.js'; +import './style/load-roboto.js'; + +// TODO: insert ink wc here +export class MdOption extends LionOption { + static get styles() { + return [ + ...super.styles, + css` + :host { + position: relative; + padding: 8px; + } + + :host([focused]) { + background: lightgray; + } + + :host([active]) { + color: #1867c0 !important; + caret-color: #1867c0 !important; + } + + :host ::slotted(.md-highlight) { + color: rgba(0, 0, 0, 0.38); + background: #eee; + } + `, + ]; + } + + /** + * @override + * @param {string} matchingString + */ + onFilterMatch(matchingString) { + const { innerHTML } = this; + this.__originalInnerHTML = innerHTML; + this.innerHTML = innerHTML.replace( + new RegExp(`(${matchingString})`, 'i'), + `$1`, + ); + this.style.display = ''; + } + + /** + * @override + */ + onFilterUnmatch() { + if (this.__originalInnerHTML) { + this.innerHTML = this.__originalInnerHTML; + } + this.style.display = 'none'; + } + + render() { + return html` + ${super.render()} + + `; + } +} +customElements.define('md-option', MdOption); + +export class MdCombobox extends MdFieldMixin(LionCombobox) { + static get styles() { + return [ + ...super.styles, + css` + .input-group__container { + display: flex; + border-bottom: none; + } + + * > ::slotted([role='listbox']) { + box-shadow: 0 4px 6px 0 rgba(32, 33, 36, 0.28); + padding-top: 8px; + padding-bottom: 8px; + top: 2px; + } + `, + ]; + } +} +customElements.define('md-combobox', MdCombobox); diff --git a/packages/ui/docs/components/combobox/src/md-combobox/md-input.js b/packages/ui/docs/components/combobox/src/md-combobox/md-input.js new file mode 100644 index 000000000..11e7648ec --- /dev/null +++ b/packages/ui/docs/components/combobox/src/md-combobox/md-input.js @@ -0,0 +1,5 @@ +import { LionInput } from '@lion/ui/input.js'; +import { MdFieldMixin } from './MdFieldMixin.js'; + +export class MdInput extends MdFieldMixin(LionInput) {} +customElements.define('md-input', MdInput); diff --git a/packages/ui/docs/components/combobox/src/md-combobox/style/load-roboto.js b/packages/ui/docs/components/combobox/src/md-combobox/style/load-roboto.js new file mode 100644 index 000000000..182c1aaf4 --- /dev/null +++ b/packages/ui/docs/components/combobox/src/md-combobox/style/load-roboto.js @@ -0,0 +1,6 @@ +// We don't have access to our main index html, so let's add Roboto font like this +const linkNode = document.createElement('link'); +linkNode.href = 'https://fonts.googleapis.com/css?family=Roboto:300,400,500'; +linkNode.rel = 'stylesheet'; +linkNode.type = 'text/css'; +document.head.appendChild(linkNode); diff --git a/packages/ui/docs/components/combobox/src/md-combobox/style/md-ripple.js b/packages/ui/docs/components/combobox/src/md-combobox/style/md-ripple.js new file mode 100644 index 000000000..ea98f6ef0 --- /dev/null +++ b/packages/ui/docs/components/combobox/src/md-combobox/style/md-ripple.js @@ -0,0 +1,81 @@ +import { html, css, LitElement } from 'lit'; + +/** + * Material Design Ripple Element + * + * - should be placed in a 'positioned' context (having positon: (realtive/fixed/absolute)) + */ +class MdRipple extends LitElement { + static get styles() { + return [ + css` + :host { + overflow: hidden; + transition: 0.1s ease-in; + user-select: none; + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + } + + :host:hover { + cursor: pointer; + } + + #ripple { + background-color: rgba(0, 0, 0, 0.1); + border-radius: 100%; + position: relative; + transform: scale(0); + } + + .animate { + animation: ripple 0.4s linear; + } + + @keyframes ripple { + 100% { + transform: scale(12); + background-color: transparent; + } + } + `, + ]; + } + + render() { + return html`
`; + } + + firstUpdated(c) { + super.firstUpdated(c); + this._ripple = this.shadowRoot.querySelector('#ripple'); + this._ripple.style.cssText = `width: ${this.offsetHeight}px; height: ${this.offsetHeight}px;`; + this.__onRipple = this.__onRipple.bind(this); + this.addEventListener('mousedown', this.__onRipple); + } + + disconnectedCallback() { + this.removeEventListener('mousedown', this.__onRipple); + } + + __onRipple(e) { + this._ripple.classList.remove('animate'); + const rect = this.getBoundingClientRect(); + const offset = { + top: rect.top + document.body.scrollTop, + left: rect.left + document.body.scrollLeft, + }; + this._ripple.style.left = `${ + parseInt(e.pageX - offset.left, 10) - this._ripple.offsetWidth / 2 + }px`; + this._ripple.style.top = `${ + parseInt(e.pageY - offset.top, 10) - this._ripple.offsetHeight / 2 + }px`; + this._ripple.classList.add('animate'); + } +} +customElements.define('md-ripple', MdRipple); diff --git a/packages/ui/docs/components/combobox/src/wa-combobox/wa-combobox.js b/packages/ui/docs/components/combobox/src/wa-combobox/wa-combobox.js new file mode 100644 index 000000000..5c5ff4383 --- /dev/null +++ b/packages/ui/docs/components/combobox/src/wa-combobox/wa-combobox.js @@ -0,0 +1,368 @@ +import { html, css } from 'lit'; +import { renderLitAsNode } from '@lion/ui/helpers.js'; +import { LionOption } from '@lion/ui/listbox.js'; +import { LionCombobox } from '@lion/ui/combobox.js'; + +class WaOption extends LionOption { + static get properties() { + return { + title: String, + text: String, + time: String, + image: String, + isUserText: { attribute: 'is-user-text', reflect: true, type: Boolean }, + isUserTextRead: { attribute: 'is-user-text-read', reflect: true, type: Boolean }, + }; + } + + static get styles() { + return [ + ...super.styles, + css` + :host { + --background-default: white; + --background-default-active: gray; + --secondary: #777; + --secondary-lighter: #aaa; + --chatlist-icon: #aaa; + background-color: var(--background-default); + cursor: pointer; + color: rgb(74, 74, 74); + padding: 0; + transition: max-height 0.4s ease, opacity 0.3s ease; + max-height: 500px; + } + + :host([checked]) { + background-color: #eee; + } + + :host(:hover) { + background-color: #f6f6f6; + } + + .wa-option { + position: relative; + display: flex; + flex-direction: row; + height: 72px; + pointer-events: all; + } + + .wa-option__image { + display: flex; + flex: none; + align-items: center; + margin-top: -1px; + padding: 0 15px 0 13px; + } + + .wa-option__image-inner { + position: relative; + overflow: hidden; + background-color: var(--avatar-background); + border-radius: 50%; + height: 49px; + width: 49px; + } + + .wa-option__image-inner img, + .wa-option__image-inner svg { + width: 100%; + height: 100%; + } + + .wa-option__image-inner-inner { + position: absolute; + top: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + } + + .wa-option__content { + display: flex; + flex-basis: auto; + flex-direction: column; + flex-grow: 1; + justify-content: center; + min-width: 0; + border-bottom: 1px solid #eee; + padding-right: 15px; + } + + .wa-option__content-row1 { + display: flex; + align-items: center; + line-height: normal; + text-align: left; + } + + .wa-option__content-row1-title { + display: flex; + flex-grow: 1; + overflow: hidden; + color: var(--primary-strong); + font-weight: 400; + font-size: 17px; + line-height: 21px; + } + + .wa-option__content-row1-time { + line-height: 14px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin-left: 6px; + margin-top: 3px; + + flex: none; + max-width: 100%; + color: var(--secondary-lighter); + font-size: 12px; + line-height: 20px; + } + + .wa-option__content-row2 { + display: flex; + align-items: center; + min-height: 20px; + color: var(--secondary); + font-size: 13px; + line-height: 20px; + margin-top: 2px; + /* color: var(--secondary-stronger); */ + } + + .wa-option__content-row2-text { + flex-grow: 1; + overflow: hidden; + font-weight: 400; + font-size: 14px; + line-height: 20px; + white-space: nowrap; + text-overflow: ellipsis; + } + + .wa-option__content-row2-text-inner { + display: flex; + align-items: flex-start; + } + + .wa-option__content-row2-text-inner-icon { + display: none; + flex: none; + color: var(--chatlist-icon); + vertical-align: top; + margin-right: 2px; + } + + :host([is-user-text]) .wa-option__content-row2-text-inner-icon { + display: inline-block; + } + + :host([is-user-text-read]) .wa-option__content-row2-text-inner-icon { + color: lightblue; + } + /* + .wa-option__content-row2-menu { + } */ + `, + ]; + } + + render() { + return html``; + } + + /** + * @configure LionCombobox + * @param {string} matchingString + */ + onFilterMatch(matchingString) { + this.__originalTitle = this.title; + const newInnerHTML = this.title.replace(new RegExp(`(${matchingString})`, 'i'), `$1`); + const helperNode = document.createElement('div'); + // For Safari, we need to add a label to the element + helperNode.innerHTML = `${newInnerHTML}`; + [this.title] = helperNode.children; + this.style.cssText = ` + max-height: 500px; + opacity: 1; + `; + } + + /** + * @configure LionCombobox + * @param {string} [curValue] + * @param {string} [prevValue] + */ + // eslint-disable-next-line no-unused-vars + onFilterUnmatch() { + if (this.__originalTitle) { + this.title = this.__originalTitle; + } + this.style.cssText = ` + max-height: 0; + opacity: 0; + `; + } +} +customElements.define('wa-option', WaOption); + +class WaCombobox extends LionCombobox { + static get styles() { + return [ + ...super.styles, + css` + :host { + font-family: SF Pro Text, SF Pro Icons, system, -apple-system, system-ui, + BlinkMacSystemFont, Helvetica Neue, Helvetica, Lucida Grande, Kohinoor Devanagari, + sans-serif; + } + + .input-group__container { + display: flex; + border-bottom: none; + } + + * > ::slotted([role='listbox']) { + max-height: none; + } + + * > ::slotted([slot='input']) { + font-size: 14px; + } + + .input-group { + padding: 15px; + background: #f6f6f6; + } + + .input-group__prefix { + margin-right: 20px; + color: #999; + display: flex; + } + + .input-group__container { + border-radius: 18px; + background: white; + padding: 7px; + padding-left: 16px; + } + + /** Undo Popper */ + #overlay-content-node-wrapper { + position: static !important; + width: auto !important; + transform: none !important; + + /* height: 300px; + overflow: scroll; */ + } + `, + ]; + } + + get slots() { + return { + ...super.slots, + prefix: () => + renderLitAsNode( + html` + + `, + ), + }; + } + + constructor() { + super(); + + /** @configure OverlayMixin */ + this.opened = true; + /** @configure LionCombobox */ + this.showAllOnEmpty = true; + /** @configure LionCombobox */ + this.rotateKeyboardNavigation = false; + } +} +customElements.define('wa-combobox', WaCombobox); diff --git a/packages/ui/docs/components/combobox/use-cases.md b/packages/ui/docs/components/combobox/use-cases.md new file mode 100644 index 000000000..238555e99 --- /dev/null +++ b/packages/ui/docs/components/combobox/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/combobox/use-cases.md) diff --git a/packages/ui/docs/components/dialog/index.md b/packages/ui/docs/components/dialog/index.md new file mode 100644 index 000000000..c2c51ff0c --- /dev/null +++ b/packages/ui/docs/components/dialog/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/dialog/index.md) diff --git a/packages/ui/docs/components/dialog/overview.md b/packages/ui/docs/components/dialog/overview.md new file mode 100644 index 000000000..97b95480e --- /dev/null +++ b/packages/ui/docs/components/dialog/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/dialog/overview.md) diff --git a/packages/ui/docs/components/dialog/src/demo-dialog-style.js b/packages/ui/docs/components/dialog/src/demo-dialog-style.js new file mode 100644 index 000000000..33b081365 --- /dev/null +++ b/packages/ui/docs/components/dialog/src/demo-dialog-style.js @@ -0,0 +1,3 @@ +import { css } from 'lit'; + +export default css``; diff --git a/packages/ui/docs/components/dialog/src/demoStyle.js b/packages/ui/docs/components/dialog/src/demoStyle.js new file mode 100644 index 000000000..0be789d4d --- /dev/null +++ b/packages/ui/docs/components/dialog/src/demoStyle.js @@ -0,0 +1,39 @@ +import { css } from 'lit'; + +export const demoStyle = css` + .demo-box { + width: 200px; + background-color: white; + border-radius: 2px; + border: 1px solid grey; + padding: 8px; + } + .demo-box_placements { + display: flex; + flex-direction: column; + margin-top: 20px; + } + lion-dialog { + display: block; + padding: 10px; + margin-bottom: 10px; + } + .close-button { + color: black; + font-size: 28px; + line-height: 28px; + } + .demo-box__column { + display: flex; + flex-direction: column; + } + .demo-dialog--content { + display: block; + position: absolute; + font-size: 16px; + color: white; + background-color: black; + border-radius: 4px; + padding: 8px; + } +`; diff --git a/packages/ui/docs/components/dialog/src/slots-dialog-content.js b/packages/ui/docs/components/dialog/src/slots-dialog-content.js new file mode 100644 index 000000000..6b481427d --- /dev/null +++ b/packages/ui/docs/components/dialog/src/slots-dialog-content.js @@ -0,0 +1,32 @@ +import { LitElement, html, css } from 'lit'; + +class SlotsDialogContent extends LitElement { + static get styles() { + return [ + css` + :host { + background-color: #fff; + } + .actions { + border-top: 2px solid green; + } + `, + ]; + } + + _closeOverlay() { + this.dispatchEvent(new Event('close-overlay', { bubbles: true })); + } + + render() { + return html` +

This content contains an actions slot

+
+ +
+ + `; + } +} + +customElements.define('slots-dialog-content', SlotsDialogContent); diff --git a/packages/ui/docs/components/dialog/src/styled-dialog-content.js b/packages/ui/docs/components/dialog/src/styled-dialog-content.js new file mode 100644 index 000000000..799dae2e8 --- /dev/null +++ b/packages/ui/docs/components/dialog/src/styled-dialog-content.js @@ -0,0 +1,38 @@ +import { LitElement, html, css } from 'lit'; + +class StyledDialogContent extends LitElement { + static get styles() { + return [ + css` + :host { + background-color: #fff; + } + .nice { + font-weight: bold; + color: green; + } + .close-button { + color: black; + font-size: 28px; + line-height: 28px; + } + `, + ]; + } + + _closeOverlay() { + this.dispatchEvent(new Event('close-overlay', { bubbles: true })); + } + + render() { + return html` +

Hello person who opened the dialog!

+
+

Look how nice this dialog looks!

+
+ + `; + } +} + +customElements.define('styled-dialog-content', StyledDialogContent); diff --git a/packages/ui/docs/components/dialog/use-cases.md b/packages/ui/docs/components/dialog/use-cases.md new file mode 100644 index 000000000..f295536ca --- /dev/null +++ b/packages/ui/docs/components/dialog/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/dialog/use-cases.md) diff --git a/packages/ui/docs/components/drawer/index.md b/packages/ui/docs/components/drawer/index.md new file mode 100644 index 000000000..27ad39193 --- /dev/null +++ b/packages/ui/docs/components/drawer/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/drawer/index.md) diff --git a/packages/ui/docs/components/drawer/overview.md b/packages/ui/docs/components/drawer/overview.md new file mode 100644 index 000000000..07d4b8c97 --- /dev/null +++ b/packages/ui/docs/components/drawer/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/drawer/overview.md) diff --git a/packages/ui/docs/components/drawer/src/demoStyle.js b/packages/ui/docs/components/drawer/src/demoStyle.js new file mode 100644 index 000000000..763a89c60 --- /dev/null +++ b/packages/ui/docs/components/drawer/src/demoStyle.js @@ -0,0 +1,71 @@ +import { css } from 'lit'; + +export const demoStyle = css` + .demo-container { + height: 400px; + display: flex; + flex-direction: row; + } + + .demo-container > div { + padding: 8px; + background-color: #f6f8fa; + } + + lion-drawer { + height: 400px; + } + + button { + all: revert !important; + border: 2px solid #000000; + background-color: rgb(239, 239, 239); + } + + .demo-container-top { + height: 400px; + display: flex; + flex-direction: column; + } + + .demo-container-top > div { + padding: 8px; + height: 100%; + background-color: #f6f8fa; + } + + .demo-container-top lion-drawer { + height: auto; + width: 100%; + } + + .demo-container-right { + height: 400px; + display: flex; + flex-direction: row-reverse; + } + + .demo-container-right > div { + padding: 8px; + background-color: #f6f8fa; + } + + .demo-container-right lion-drawer { + height: 400px; + } + + .demo-container-opened { + height: 400px; + display: flex; + flex-direction: row; + } + + .demo-container-opened > div { + padding: 8px; + background-color: #f6f8fa; + } + + .demo-container-opened lion-drawer { + height: 400px; + } +`; diff --git a/packages/ui/docs/components/drawer/use-cases.md b/packages/ui/docs/components/drawer/use-cases.md new file mode 100644 index 000000000..8a01ab3d2 --- /dev/null +++ b/packages/ui/docs/components/drawer/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/drawer/use-cases.md) diff --git a/packages/ui/docs/components/fieldset/index.md b/packages/ui/docs/components/fieldset/index.md new file mode 100644 index 000000000..ecb2013fe --- /dev/null +++ b/packages/ui/docs/components/fieldset/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/fieldset/index.md) diff --git a/packages/ui/docs/components/fieldset/overview.md b/packages/ui/docs/components/fieldset/overview.md new file mode 100644 index 000000000..180587cbf --- /dev/null +++ b/packages/ui/docs/components/fieldset/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/fieldset/overview.md) diff --git a/packages/ui/docs/components/fieldset/use-cases.md b/packages/ui/docs/components/fieldset/use-cases.md new file mode 100644 index 000000000..4453a315c --- /dev/null +++ b/packages/ui/docs/components/fieldset/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/fieldset/use-cases.md) diff --git a/packages/ui/docs/components/form/index.md b/packages/ui/docs/components/form/index.md new file mode 100644 index 000000000..14c7f4b56 --- /dev/null +++ b/packages/ui/docs/components/form/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/form/index.md) diff --git a/packages/ui/docs/components/form/overview.md b/packages/ui/docs/components/form/overview.md new file mode 100644 index 000000000..01f7b6fbb --- /dev/null +++ b/packages/ui/docs/components/form/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/form/overview.md) diff --git a/packages/ui/docs/components/form/use-cases.md b/packages/ui/docs/components/form/use-cases.md new file mode 100644 index 000000000..f30634060 --- /dev/null +++ b/packages/ui/docs/components/form/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/form/use-cases.md) diff --git a/packages/ui/docs/components/icon/assets/bugs/bug01.svg.js b/packages/ui/docs/components/icon/assets/bugs/bug01.svg.js new file mode 100644 index 000000000..aea2228a4 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/bugs/bug01.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/bugs/bug02.svg.js b/packages/ui/docs/components/icon/assets/bugs/bug02.svg.js new file mode 100644 index 000000000..f69a54e44 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/bugs/bug02.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/bugs/bug05.svg.js b/packages/ui/docs/components/icon/assets/bugs/bug05.svg.js new file mode 100644 index 000000000..aa49c4c80 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/bugs/bug05.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/bugs/bug06.svg.js b/packages/ui/docs/components/icon/assets/bugs/bug06.svg.js new file mode 100644 index 000000000..5c59fcbbb --- /dev/null +++ b/packages/ui/docs/components/icon/assets/bugs/bug06.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/bugs/bug08.svg.js b/packages/ui/docs/components/icon/assets/bugs/bug08.svg.js new file mode 100644 index 000000000..3f29f4265 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/bugs/bug08.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/bugs/bug12.svg.js b/packages/ui/docs/components/icon/assets/bugs/bug12.svg.js new file mode 100644 index 000000000..80333cb62 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/bugs/bug12.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/bugs/bug19.svg.js b/packages/ui/docs/components/icon/assets/bugs/bug19.svg.js new file mode 100644 index 000000000..397d9f61a --- /dev/null +++ b/packages/ui/docs/components/icon/assets/bugs/bug19.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/bugs/bug23.svg.js b/packages/ui/docs/components/icon/assets/bugs/bug23.svg.js new file mode 100644 index 000000000..8db0542b8 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/bugs/bug23.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/bugs/bug24.svg.js b/packages/ui/docs/components/icon/assets/bugs/bug24.svg.js new file mode 100644 index 000000000..fe9cdeaa9 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/bugs/bug24.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/iconset-bugs.js b/packages/ui/docs/components/icon/assets/iconset-bugs.js new file mode 100755 index 000000000..b1314dec5 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/iconset-bugs.js @@ -0,0 +1,11 @@ +import bug01 from './bugs/bug01.svg.js'; +import bug02 from './bugs/bug02.svg.js'; +import bug05 from './bugs/bug05.svg.js'; +import bug06 from './bugs/bug06.svg.js'; +import bug08 from './bugs/bug08.svg.js'; +import bug12 from './bugs/bug12.svg.js'; +import bug19 from './bugs/bug19.svg.js'; +import bug23 from './bugs/bug23.svg.js'; +import bug24 from './bugs/bug24.svg.js'; + +export { bug01, bug02, bug05, bug06, bug08, bug12, bug19, bug23, bug24 }; diff --git a/packages/ui/docs/components/icon/assets/iconset-misc.js b/packages/ui/docs/components/icon/assets/iconset-misc.js new file mode 100644 index 000000000..7541a4a01 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/iconset-misc.js @@ -0,0 +1,3 @@ +import arrowLeft from './misc/arrowLeft.svg.js'; + +export { arrowLeft }; diff --git a/packages/ui/docs/components/icon/assets/iconset-space.js b/packages/ui/docs/components/icon/assets/iconset-space.js new file mode 100755 index 000000000..56b4a217b --- /dev/null +++ b/packages/ui/docs/components/icon/assets/iconset-space.js @@ -0,0 +1,31 @@ +import alienSpaceship from './space/aliens-spaceship.svg.js'; +import meteor from './space/meteor.svg.js'; +import moonFlag from './space/moon-flag.svg.js'; +import moon from './space/moon.svg.js'; +import night from './space/night.svg.js'; +import orbit from './space/orbit.svg.js'; +import planet from './space/planet.svg.js'; +import robot from './space/robot.svg.js'; +import rocket from './space/rocket.svg.js'; +import satellite from './space/satellite.svg.js'; +import signal from './space/signal.svg.js'; +import spaceHelmet from './space/space-helmet.svg.js'; +import sun from './space/sun.svg.js'; +import telescope from './space/telescope.svg.js'; + +export { + alienSpaceship, + meteor, + moonFlag, + moon, + night, + orbit, + planet, + robot, + rocket, + satellite, + signal, + spaceHelmet, + sun, + telescope, +}; diff --git a/packages/ui/docs/components/icon/assets/misc/arrowLeft.svg.js b/packages/ui/docs/components/icon/assets/misc/arrowLeft.svg.js new file mode 100644 index 000000000..d23823b45 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/misc/arrowLeft.svg.js @@ -0,0 +1,6 @@ +export default tag => + tag` + + + + `; diff --git a/packages/ui/docs/components/icon/assets/space/aliens-spaceship.svg.js b/packages/ui/docs/components/icon/assets/space/aliens-spaceship.svg.js new file mode 100644 index 000000000..9438a9317 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/space/aliens-spaceship.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/space/meteor.svg.js b/packages/ui/docs/components/icon/assets/space/meteor.svg.js new file mode 100644 index 000000000..197133816 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/space/meteor.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/space/moon-flag.svg.js b/packages/ui/docs/components/icon/assets/space/moon-flag.svg.js new file mode 100644 index 000000000..9283c4010 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/space/moon-flag.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/space/moon.svg.js b/packages/ui/docs/components/icon/assets/space/moon.svg.js new file mode 100644 index 000000000..dbfb92b1c --- /dev/null +++ b/packages/ui/docs/components/icon/assets/space/moon.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/space/night.svg.js b/packages/ui/docs/components/icon/assets/space/night.svg.js new file mode 100644 index 000000000..ba258dac1 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/space/night.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/space/orbit.svg.js b/packages/ui/docs/components/icon/assets/space/orbit.svg.js new file mode 100644 index 000000000..e3f26ebb0 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/space/orbit.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/space/planet.svg.js b/packages/ui/docs/components/icon/assets/space/planet.svg.js new file mode 100644 index 000000000..2d0283f43 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/space/planet.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/space/robot.svg.js b/packages/ui/docs/components/icon/assets/space/robot.svg.js new file mode 100644 index 000000000..73dd887fd --- /dev/null +++ b/packages/ui/docs/components/icon/assets/space/robot.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/space/rocket.svg.js b/packages/ui/docs/components/icon/assets/space/rocket.svg.js new file mode 100644 index 000000000..6d7a1fdc6 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/space/rocket.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/space/satellite.svg.js b/packages/ui/docs/components/icon/assets/space/satellite.svg.js new file mode 100644 index 000000000..363059924 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/space/satellite.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/space/signal.svg.js b/packages/ui/docs/components/icon/assets/space/signal.svg.js new file mode 100644 index 000000000..8613b0e1f --- /dev/null +++ b/packages/ui/docs/components/icon/assets/space/signal.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/space/space-helmet.svg.js b/packages/ui/docs/components/icon/assets/space/space-helmet.svg.js new file mode 100644 index 000000000..4b7b539ef --- /dev/null +++ b/packages/ui/docs/components/icon/assets/space/space-helmet.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/space/sun.svg.js b/packages/ui/docs/components/icon/assets/space/sun.svg.js new file mode 100644 index 000000000..11a341845 --- /dev/null +++ b/packages/ui/docs/components/icon/assets/space/sun.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/assets/space/telescope.svg.js b/packages/ui/docs/components/icon/assets/space/telescope.svg.js new file mode 100644 index 000000000..4fdffb02c --- /dev/null +++ b/packages/ui/docs/components/icon/assets/space/telescope.svg.js @@ -0,0 +1,2 @@ +export default tag => + tag``; diff --git a/packages/ui/docs/components/icon/index.md b/packages/ui/docs/components/icon/index.md new file mode 100644 index 000000000..9ad5a221b --- /dev/null +++ b/packages/ui/docs/components/icon/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/icon/index.md) diff --git a/packages/ui/docs/components/icon/overview.md b/packages/ui/docs/components/icon/overview.md new file mode 100644 index 000000000..985aac84f --- /dev/null +++ b/packages/ui/docs/components/icon/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/icon/overview.md) diff --git a/packages/ui/docs/components/icon/use-cases.md b/packages/ui/docs/components/icon/use-cases.md new file mode 100644 index 000000000..da1f5c94d --- /dev/null +++ b/packages/ui/docs/components/icon/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/icon/use-cases.md) diff --git a/packages/ui/docs/components/index.md b/packages/ui/docs/components/index.md new file mode 100644 index 000000000..a1875dad6 --- /dev/null +++ b/packages/ui/docs/components/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../docs/components/index.md) diff --git a/packages/ui/docs/components/input-amount/index.md b/packages/ui/docs/components/input-amount/index.md new file mode 100644 index 000000000..d7169e590 --- /dev/null +++ b/packages/ui/docs/components/input-amount/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-amount/index.md) diff --git a/packages/ui/docs/components/input-amount/overview.md b/packages/ui/docs/components/input-amount/overview.md new file mode 100644 index 000000000..61a60e843 --- /dev/null +++ b/packages/ui/docs/components/input-amount/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-amount/overview.md) diff --git a/packages/ui/docs/components/input-amount/use-cases.md b/packages/ui/docs/components/input-amount/use-cases.md new file mode 100644 index 000000000..dda15d2e8 --- /dev/null +++ b/packages/ui/docs/components/input-amount/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-amount/use-cases.md) diff --git a/packages/ui/docs/components/input-date/index.md b/packages/ui/docs/components/input-date/index.md new file mode 100644 index 000000000..dde5cb970 --- /dev/null +++ b/packages/ui/docs/components/input-date/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-date/index.md) diff --git a/packages/ui/docs/components/input-date/overview.md b/packages/ui/docs/components/input-date/overview.md new file mode 100644 index 000000000..78c5bc08d --- /dev/null +++ b/packages/ui/docs/components/input-date/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-date/overview.md) diff --git a/packages/ui/docs/components/input-date/use-cases.md b/packages/ui/docs/components/input-date/use-cases.md new file mode 100644 index 000000000..74ce9e7d4 --- /dev/null +++ b/packages/ui/docs/components/input-date/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-date/use-cases.md) diff --git a/packages/ui/docs/components/input-datepicker/index.md b/packages/ui/docs/components/input-datepicker/index.md new file mode 100644 index 000000000..4a2f5b64b --- /dev/null +++ b/packages/ui/docs/components/input-datepicker/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-datepicker/index.md) diff --git a/packages/ui/docs/components/input-datepicker/overview.md b/packages/ui/docs/components/input-datepicker/overview.md new file mode 100644 index 000000000..100c360b0 --- /dev/null +++ b/packages/ui/docs/components/input-datepicker/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-datepicker/overview.md) diff --git a/packages/ui/docs/components/input-datepicker/use-cases.md b/packages/ui/docs/components/input-datepicker/use-cases.md new file mode 100644 index 000000000..774e615a9 --- /dev/null +++ b/packages/ui/docs/components/input-datepicker/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-datepicker/use-cases.md) diff --git a/packages/ui/docs/components/input-email/index.md b/packages/ui/docs/components/input-email/index.md new file mode 100644 index 000000000..e458f8b25 --- /dev/null +++ b/packages/ui/docs/components/input-email/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-email/index.md) diff --git a/packages/ui/docs/components/input-email/overview.md b/packages/ui/docs/components/input-email/overview.md new file mode 100644 index 000000000..9ee862ee1 --- /dev/null +++ b/packages/ui/docs/components/input-email/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-email/overview.md) diff --git a/packages/ui/docs/components/input-email/use-cases.md b/packages/ui/docs/components/input-email/use-cases.md new file mode 100644 index 000000000..a1745df38 --- /dev/null +++ b/packages/ui/docs/components/input-email/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-email/use-cases.md) diff --git a/packages/ui/docs/components/input-iban/index.md b/packages/ui/docs/components/input-iban/index.md new file mode 100644 index 000000000..79f3cb63a --- /dev/null +++ b/packages/ui/docs/components/input-iban/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-iban/index.md) diff --git a/packages/ui/docs/components/input-iban/overview.md b/packages/ui/docs/components/input-iban/overview.md new file mode 100644 index 000000000..e39e8b7b0 --- /dev/null +++ b/packages/ui/docs/components/input-iban/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-iban/overview.md) diff --git a/packages/ui/docs/components/input-iban/use-cases.md b/packages/ui/docs/components/input-iban/use-cases.md new file mode 100644 index 000000000..550452761 --- /dev/null +++ b/packages/ui/docs/components/input-iban/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-iban/use-cases.md) diff --git a/packages/ui/docs/components/input-range/index.md b/packages/ui/docs/components/input-range/index.md new file mode 100644 index 000000000..d98da4230 --- /dev/null +++ b/packages/ui/docs/components/input-range/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-range/index.md) diff --git a/packages/ui/docs/components/input-range/overview.md b/packages/ui/docs/components/input-range/overview.md new file mode 100644 index 000000000..68faa1c3d --- /dev/null +++ b/packages/ui/docs/components/input-range/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-range/overview.md) diff --git a/packages/ui/docs/components/input-range/use-cases.md b/packages/ui/docs/components/input-range/use-cases.md new file mode 100644 index 000000000..23378fe4b --- /dev/null +++ b/packages/ui/docs/components/input-range/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-range/use-cases.md) diff --git a/packages/ui/docs/components/input-stepper/index.md b/packages/ui/docs/components/input-stepper/index.md new file mode 100644 index 000000000..0de447404 --- /dev/null +++ b/packages/ui/docs/components/input-stepper/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-stepper/index.md) diff --git a/packages/ui/docs/components/input-stepper/overview.md b/packages/ui/docs/components/input-stepper/overview.md new file mode 100644 index 000000000..7b7d03759 --- /dev/null +++ b/packages/ui/docs/components/input-stepper/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-stepper/overview.md) diff --git a/packages/ui/docs/components/input-stepper/use-cases.md b/packages/ui/docs/components/input-stepper/use-cases.md new file mode 100644 index 000000000..05e837bf1 --- /dev/null +++ b/packages/ui/docs/components/input-stepper/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-stepper/use-cases.md) diff --git a/packages/ui/docs/components/input-tel-dropdown/examples.md b/packages/ui/docs/components/input-tel-dropdown/examples.md new file mode 100644 index 000000000..fdaa33a5c --- /dev/null +++ b/packages/ui/docs/components/input-tel-dropdown/examples.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-tel-dropdown/examples.md) diff --git a/packages/ui/docs/components/input-tel-dropdown/index.md b/packages/ui/docs/components/input-tel-dropdown/index.md new file mode 100644 index 000000000..13fc56bab --- /dev/null +++ b/packages/ui/docs/components/input-tel-dropdown/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-tel-dropdown/index.md) diff --git a/packages/ui/docs/components/input-tel-dropdown/overview.md b/packages/ui/docs/components/input-tel-dropdown/overview.md new file mode 100644 index 000000000..b718ec4a4 --- /dev/null +++ b/packages/ui/docs/components/input-tel-dropdown/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-tel-dropdown/overview.md) diff --git a/packages/ui/docs/components/input-tel-dropdown/src/intl-input-tel-dropdown.js b/packages/ui/docs/components/input-tel-dropdown/src/intl-input-tel-dropdown.js new file mode 100644 index 000000000..771d7d8ac --- /dev/null +++ b/packages/ui/docs/components/input-tel-dropdown/src/intl-input-tel-dropdown.js @@ -0,0 +1,127 @@ +import { ScopedElementsMixin } from '@open-wc/scoped-elements'; +import { html, css } from 'lit'; +import { ref } from 'lit/directives/ref.js'; +import { repeat } from 'lit/directives/repeat.js'; +import { LionInputTelDropdown } from '@lion/ui/input-tel-dropdown.js'; +import { + IntlSelectRich, + IntlOption, + IntlSeparator, +} from '../../select-rich/src/intl-select-rich.js'; + +/** + * @typedef {import('@lion/ui/input-tel-dropdown/types.js').TemplateDataForDropdownInputTel}TemplateDataForDropdownInputTel + */ + +// Example implementation for https://intl-tel-input.com/ +export class IntlInputTelDropdown extends ScopedElementsMixin(LionInputTelDropdown) { + /** + * @configure LitElement + * @enhance LionInputTelDropdown + */ + static styles = [ + super.styles, + css` + :host, + ::slotted(*) { + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + } + + :host { + max-width: 300px; + } + + .input-group__container { + width: 100%; + height: 34px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgb(0 0 0 / 8%); + box-shadow: inset 0 1px 1px rgb(0 0 0 / 8%); + -webkit-transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s; + -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + } + + .input-group__input { + padding: 6px; + box-sizing: border-box; + } + + .input-group__input ::slotted(input) { + border: none; + outline: none; + } + + :host([focused]) .input-group__container { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgb(0 0 0 / 8%), 0 0 8px rgb(102 175 233 / 60%); + box-shadow: inset 0 1px 1px rgb(0 0 0 / 8%), 0 0 8px rgb(102 175 233 / 60%); + } + `, + ]; + + static templates = { + ...(super.templates || {}), + /** + * @param {TemplateDataForDropdownInputTel} templateDataForDropdown + */ + dropdown: templateDataForDropdown => { + const { refs, data } = templateDataForDropdown; + // TODO: once spread directive available, use it per ref (like ref(refs?.dropdown?.ref)) + return html` + + ${data?.regionMetaListPreferred?.length + ? html` ${repeat( + data.regionMetaListPreferred, + regionMeta => regionMeta.regionCode, + regionMeta => + html`${this.templates.dropdownOption(templateDataForDropdown, regionMeta)} `, + )}` + : ''} + ${repeat( + data.regionMetaList, + regionMeta => regionMeta.regionCode, + regionMeta => + html`${this.templates.dropdownOption(templateDataForDropdown, regionMeta)} `, + )} + + `; + }, + /** + * @param {TemplateDataForDropdownInputTel} templateDataForDropdown + * @param {RegionMeta} regionMeta + */ + // eslint-disable-next-line class-methods-use-this + dropdownOption: (templateDataForDropdown, regionMeta) => html` + + + `, + }; + + /** + * @configure ScopedElementsMixin + */ + static scopedElements = { + ...super.scopedElements, + 'intl-select-rich': IntlSelectRich, + 'intl-option': IntlOption, + 'intl-separator': IntlSeparator, + }; +} +customElements.define('intl-input-tel-dropdown', IntlInputTelDropdown); diff --git a/packages/ui/docs/components/input-tel-dropdown/use-cases.md b/packages/ui/docs/components/input-tel-dropdown/use-cases.md new file mode 100644 index 000000000..309cb6779 --- /dev/null +++ b/packages/ui/docs/components/input-tel-dropdown/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-tel-dropdown/use-cases.md) diff --git a/packages/ui/docs/components/input-tel/index.md b/packages/ui/docs/components/input-tel/index.md new file mode 100644 index 000000000..5d10504b0 --- /dev/null +++ b/packages/ui/docs/components/input-tel/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-tel/index.md) diff --git a/packages/ui/docs/components/input-tel/overview.md b/packages/ui/docs/components/input-tel/overview.md new file mode 100644 index 000000000..bda694694 --- /dev/null +++ b/packages/ui/docs/components/input-tel/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-tel/overview.md) diff --git a/packages/ui/docs/components/input-tel/src/h-region-code-table.js b/packages/ui/docs/components/input-tel/src/h-region-code-table.js new file mode 100644 index 000000000..bffe63d2e --- /dev/null +++ b/packages/ui/docs/components/input-tel/src/h-region-code-table.js @@ -0,0 +1,109 @@ +import { LitElement, css, html } from 'lit'; +import { repeat } from 'lit/directives/repeat.js'; +import { ScopedStylesController } from '@lion/ui/core.js'; +import { regionMetaList } from '../../select-rich/src/regionMetaList.js'; + +export class HRegionCodeTable extends LitElement { + static properties = { + regionMeta: Object, + }; + + constructor() { + super(); + /** @type {ScopedStylesController} */ + this.scopedStylesController = new ScopedStylesController(this); + } + + /** + * @param {CSSResult} scope + */ + static scopedStyles(scope) { + return css` + /* Custom input range styling comes here, be aware that this won't work for polyfilled browsers */ + .${scope} .sr-only { + position: absolute; + top: 0; + width: 1px; + height: 1px; + overflow: hidden; + clip-path: inset(100%); + clip: rect(1px, 1px, 1px, 1px); + white-space: nowrap; + border: 0; + margin: 0; + padding: 0; + } + + .${scope} table { + position: relative; + height: 300px; + } + + .${scope} th { + border-left: none; + border-right: none; + position: sticky; + top: -1px; + } + + .${scope} th .backdrop { + background-color: white; + opacity: 0.95; + filter: blur(4px); + position: absolute; + inset: -5px; + } + + .${scope} th .content { + position: relative; + } + + .${scope} td { + border-left: none; + border-right: none; + } + `; + } + + // Render to light dom, so global table styling will be applied + createRenderRoot() { + return this; + } + + render() { + const finalRegionMetaList = this.regionMetaList || regionMetaList; + return html` + + + + + + + + + + + ${repeat( + finalRegionMetaList, + regionMeta => regionMeta.regionCode, + ({ regionCode, countryCode, flagSymbol, nameForLocale }) => + html` + + + + `, + )} + +
+ Region codes +
+ country name + + region code + + country code +
${nameForLocale}${regionCode}${countryCode}
+ `; + } +} +customElements.define('h-region-code-table', HRegionCodeTable); diff --git a/packages/ui/docs/components/input-tel/use-cases.md b/packages/ui/docs/components/input-tel/use-cases.md new file mode 100644 index 000000000..74e1a3eec --- /dev/null +++ b/packages/ui/docs/components/input-tel/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input-tel/use-cases.md) diff --git a/packages/ui/docs/components/input/index.md b/packages/ui/docs/components/input/index.md new file mode 100644 index 000000000..f468563ba --- /dev/null +++ b/packages/ui/docs/components/input/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input/index.md) diff --git a/packages/ui/docs/components/input/overview.md b/packages/ui/docs/components/input/overview.md new file mode 100644 index 000000000..ae57c30e9 --- /dev/null +++ b/packages/ui/docs/components/input/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input/overview.md) diff --git a/packages/ui/docs/components/input/use-cases.md b/packages/ui/docs/components/input/use-cases.md new file mode 100644 index 000000000..f17d3c2f4 --- /dev/null +++ b/packages/ui/docs/components/input/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/input/use-cases.md) diff --git a/packages/ui/docs/components/listbox/index.md b/packages/ui/docs/components/listbox/index.md new file mode 100644 index 000000000..b201a6a71 --- /dev/null +++ b/packages/ui/docs/components/listbox/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/listbox/index.md) diff --git a/packages/ui/docs/components/listbox/overview.md b/packages/ui/docs/components/listbox/overview.md new file mode 100644 index 000000000..4991deda9 --- /dev/null +++ b/packages/ui/docs/components/listbox/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/listbox/overview.md) diff --git a/packages/ui/docs/components/listbox/src/listboxData.js b/packages/ui/docs/components/listbox/src/listboxData.js new file mode 100644 index 000000000..60f89ff59 --- /dev/null +++ b/packages/ui/docs/components/listbox/src/listboxData.js @@ -0,0 +1,65 @@ +export const listboxData = [ + 'Apple', + 'Artichoke', + 'Asparagus', + 'Banana', + 'Beets', + 'Bell pepper', + 'Broccoli', + 'Brussels sprout', + 'Cabbage', + 'Carrot', + 'Cauliflower', + 'Celery', + 'Chard', + 'Chicory', + 'Corn', + 'Cucumber', + 'Daikon', + 'Date', + 'Edamame', + 'Eggplant', + 'Elderberry', + 'Fennel', + 'Fig', + 'Garlic', + 'Grape', + 'Honeydew melon', + 'Iceberg lettuce', + 'Jerusalem artichoke', + 'Kale', + 'Kiwi', + 'Leek', + 'Lemon', + 'Mango', + 'Mangosteen', + 'Melon', + 'Mushroom', + 'Nectarine', + 'Okra', + 'Olive', + 'Onion', + 'Orange', + 'Parship', + 'Pea', + 'Pear', + 'Pineapple', + 'Potato', + 'Pumpkin', + 'Quince', + 'Radish', + 'Rhubarb', + 'Shallot', + 'Spinach', + 'Squash', + 'Strawberry', + 'Sweet potato', + 'Tomato', + 'Turnip', + 'Ugli fruit', + 'Victoria plum', + 'Watercress', + 'Watermelon', + 'Yam', + 'Zucchini', +]; diff --git a/packages/ui/docs/components/listbox/use-cases.md b/packages/ui/docs/components/listbox/use-cases.md new file mode 100644 index 000000000..2bec68ef6 --- /dev/null +++ b/packages/ui/docs/components/listbox/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/listbox/use-cases.md) diff --git a/packages/ui/docs/components/pagination/index.md b/packages/ui/docs/components/pagination/index.md new file mode 100644 index 000000000..0754f20a8 --- /dev/null +++ b/packages/ui/docs/components/pagination/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/pagination/index.md) diff --git a/packages/ui/docs/components/pagination/overview.md b/packages/ui/docs/components/pagination/overview.md new file mode 100644 index 000000000..31fb33457 --- /dev/null +++ b/packages/ui/docs/components/pagination/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/pagination/overview.md) diff --git a/packages/ui/docs/components/pagination/use-cases.md b/packages/ui/docs/components/pagination/use-cases.md new file mode 100644 index 000000000..c51207a81 --- /dev/null +++ b/packages/ui/docs/components/pagination/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/pagination/use-cases.md) diff --git a/packages/ui/docs/components/progress-indicator/assets/my-determinate-progress-bar.js b/packages/ui/docs/components/progress-indicator/assets/my-determinate-progress-bar.js new file mode 100644 index 000000000..01c7da840 --- /dev/null +++ b/packages/ui/docs/components/progress-indicator/assets/my-determinate-progress-bar.js @@ -0,0 +1,30 @@ +import { css, html } from 'lit'; +import { LionProgressIndicator } from '@lion/ui/progress-indicator.js'; + +export class MyDeterminateProgressBar extends LionProgressIndicator { + static get styles() { + return [ + css` + :host { + display: block; + position: relative; + width: 100%; + height: 6px; + overflow: hidden; + background-color: #eee; + } + + .progress__filled { + height: inherit; + background-color: green; + } + `, + ]; + } + + _graphicTemplate() { + return html`
`; + } +} + +customElements.define('my-determinate-progress-bar', MyDeterminateProgressBar); diff --git a/packages/ui/docs/components/progress-indicator/assets/my-indeterminate-progress-spinner.js b/packages/ui/docs/components/progress-indicator/assets/my-indeterminate-progress-spinner.js new file mode 100644 index 000000000..2c78b87b7 --- /dev/null +++ b/packages/ui/docs/components/progress-indicator/assets/my-indeterminate-progress-spinner.js @@ -0,0 +1,55 @@ +import { html, css } from 'lit'; +import { LionProgressIndicator } from '@lion/ui/progress-indicator.js'; + +export class MyIndeterminateProgressSpinner extends LionProgressIndicator { + static get styles() { + return [ + css` + .progress__icon { + display: inline-block; + width: 48px; + height: 48px; + animation: spinner-rotate 2s linear infinite; + } + + .progress__filled { + animation: spinner-dash 1.35s ease-in-out infinite; + fill: none; + stroke-width: 6px; + stroke: var(--primary-color); + } + + @keyframes spinner-rotate { + to { + transform: rotate(360deg); + } + } + + @keyframes spinner-dash { + 0% { + stroke-dasharray: 6, 122; + stroke-dashoffset: 0; + } + 50% { + stroke-dasharray: 100, 28; + stroke-dashoffset: -16; + } + 100% { + stroke-dasharray: 6, 122; + stroke-dashoffset: -127; + } + } + `, + ]; + } + + _graphicTemplate() { + return html` + + + + `; + } +} + +customElements.define('my-indeterminate-progress-spinner', MyIndeterminateProgressSpinner); diff --git a/packages/ui/docs/components/progress-indicator/examples.md b/packages/ui/docs/components/progress-indicator/examples.md new file mode 100644 index 000000000..f70614a14 --- /dev/null +++ b/packages/ui/docs/components/progress-indicator/examples.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/progress-indicator/examples.md) diff --git a/packages/ui/docs/components/progress-indicator/index.md b/packages/ui/docs/components/progress-indicator/index.md new file mode 100644 index 000000000..502bea066 --- /dev/null +++ b/packages/ui/docs/components/progress-indicator/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/progress-indicator/index.md) diff --git a/packages/ui/docs/components/progress-indicator/overview.md b/packages/ui/docs/components/progress-indicator/overview.md new file mode 100644 index 000000000..0c215b58c --- /dev/null +++ b/packages/ui/docs/components/progress-indicator/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/progress-indicator/overview.md) diff --git a/packages/ui/docs/components/radio-group/index.md b/packages/ui/docs/components/radio-group/index.md new file mode 100644 index 000000000..a85027939 --- /dev/null +++ b/packages/ui/docs/components/radio-group/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/radio-group/index.md) diff --git a/packages/ui/docs/components/radio-group/overview.md b/packages/ui/docs/components/radio-group/overview.md new file mode 100644 index 000000000..a5721cc91 --- /dev/null +++ b/packages/ui/docs/components/radio-group/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/radio-group/overview.md) diff --git a/packages/ui/docs/components/radio-group/use-cases.md b/packages/ui/docs/components/radio-group/use-cases.md new file mode 100644 index 000000000..ad9a7b3df --- /dev/null +++ b/packages/ui/docs/components/radio-group/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/radio-group/use-cases.md) diff --git a/packages/ui/docs/components/select-rich/examples.md b/packages/ui/docs/components/select-rich/examples.md new file mode 100644 index 000000000..659cbf21e --- /dev/null +++ b/packages/ui/docs/components/select-rich/examples.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/select-rich/examples.md) diff --git a/packages/ui/docs/components/select-rich/index.md b/packages/ui/docs/components/select-rich/index.md new file mode 100644 index 000000000..a32695f88 --- /dev/null +++ b/packages/ui/docs/components/select-rich/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/select-rich/index.md) diff --git a/packages/ui/docs/components/select-rich/overview.md b/packages/ui/docs/components/select-rich/overview.md new file mode 100644 index 000000000..9ea9e3849 --- /dev/null +++ b/packages/ui/docs/components/select-rich/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/select-rich/overview.md) diff --git a/packages/ui/docs/components/select-rich/src/flagStyles.js b/packages/ui/docs/components/select-rich/src/flagStyles.js new file mode 100644 index 000000000..51bcbfa41 --- /dev/null +++ b/packages/ui/docs/components/select-rich/src/flagStyles.js @@ -0,0 +1,1250 @@ +import { css, unsafeCSS } from 'lit'; + +const flagsImgUrl = unsafeCSS(new URL('./flags.png', import.meta.url).href); +const flagsImg2xUrl = unsafeCSS(new URL('./flags@2x.png', import.meta.url).href); + +export const flagStyles = css` + .iti { + position: relative; + display: inline-block; + } + .iti * { + box-sizing: border-box; + -moz-box-sizing: border-box; + } + .iti__hide { + display: none; + } + .iti__v-hide { + visibility: hidden; + } + .iti input, + .iti input[type='text'], + .iti input[type='tel'] { + position: relative; + z-index: 0; + margin-top: 0 !important; + margin-bottom: 0 !important; + padding-right: 36px; + margin-right: 0; + } + .iti__flag-container { + position: absolute; + top: 0; + bottom: 0; + right: 0; + padding: 1px; + } + .iti__selected-flag { + z-index: 1; + position: relative; + display: flex; + align-items: center; + height: 100%; + padding: 0 6px 0 8px; + } + .iti__arrow { + margin-left: 6px; + width: 0; + height: 0; + border-left: 3px solid transparent; + border-right: 3px solid transparent; + border-top: 4px solid #555; + } + .iti__arrow--up { + border-top: none; + border-bottom: 4px solid #555; + } + .iti__country-list { + position: absolute; + z-index: 2; + list-style: none; + text-align: left; + padding: 0; + margin: 0 0 0 -1px; + box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.2); + background-color: white; + border: 1px solid #ccc; + white-space: nowrap; + max-height: 200px; + overflow-y: scroll; + -webkit-overflow-scrolling: touch; + } + .iti__country-list--dropup { + bottom: 100%; + margin-bottom: -1px; + } + @media (max-width: 500px) { + .iti__country-list { + white-space: normal; + } + } + .iti__flag-box { + display: inline-block; + width: 20px; + } + .iti__divider { + padding-bottom: 5px; + margin-bottom: 5px; + border-bottom: 1px solid #ccc; + } + .iti__country { + padding: 5px 10px; + outline: none; + } + .iti__dial-code { + color: #999; + } + .iti__country.iti__highlight { + background-color: rgba(0, 0, 0, 0.05); + } + .iti__flag-box, + .iti__country-name, + .iti__dial-code { + vertical-align: middle; + } + .iti__flag-box, + .iti__country-name { + margin-right: 6px; + } + .iti--allow-dropdown input, + .iti--allow-dropdown input[type='text'], + .iti--allow-dropdown input[type='tel'], + .iti--separate-dial-code input, + .iti--separate-dial-code input[type='text'], + .iti--separate-dial-code input[type='tel'] { + padding-right: 6px; + padding-left: 52px; + margin-left: 0; + } + .iti--allow-dropdown .iti__flag-container, + .iti--separate-dial-code .iti__flag-container { + right: auto; + left: 0; + } + .iti--allow-dropdown .iti__flag-container:hover { + cursor: pointer; + } + .iti--allow-dropdown .iti__flag-container:hover .iti__selected-flag { + background-color: rgba(0, 0, 0, 0.05); + } + .iti--allow-dropdown input[disabled] + .iti__flag-container:hover, + .iti--allow-dropdown input[readonly] + .iti__flag-container:hover { + cursor: default; + } + .iti--allow-dropdown input[disabled] + .iti__flag-container:hover .iti__selected-flag, + .iti--allow-dropdown input[readonly] + .iti__flag-container:hover .iti__selected-flag { + background-color: transparent; + } + .iti--separate-dial-code .iti__selected-flag { + background-color: rgba(0, 0, 0, 0.05); + } + .iti--separate-dial-code .iti__selected-dial-code { + margin-left: 6px; + } + .iti--container { + position: absolute; + top: -1000px; + left: -1000px; + z-index: 1060; + padding: 1px; + } + .iti--container:hover { + cursor: pointer; + } + + .iti-mobile .iti--container { + top: 30px; + bottom: 30px; + left: 30px; + right: 30px; + position: fixed; + } + + .iti-mobile .iti__country-list { + max-height: 100%; + width: 100%; + } + + .iti-mobile .iti__country { + padding: 10px 10px; + line-height: 1.5em; + } + + .iti__flag { + width: 20px; + } + .iti__flag.iti__be { + width: 18px; + } + .iti__flag.iti__ch { + width: 15px; + } + .iti__flag.iti__mc { + width: 19px; + } + .iti__flag.iti__ne { + width: 18px; + } + .iti__flag.iti__np { + width: 13px; + } + .iti__flag.iti__va { + width: 15px; + } + @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { + .iti__flag { + background-size: 5652px 15px; + } + } + .iti__flag.iti__ac { + height: 10px; + background-position: 0px 0px; + } + .iti__flag.iti__ad { + height: 14px; + background-position: -22px 0px; + } + .iti__flag.iti__ae { + height: 10px; + background-position: -44px 0px; + } + .iti__flag.iti__af { + height: 14px; + background-position: -66px 0px; + } + .iti__flag.iti__ag { + height: 14px; + background-position: -88px 0px; + } + .iti__flag.iti__ai { + height: 10px; + background-position: -110px 0px; + } + .iti__flag.iti__al { + height: 15px; + background-position: -132px 0px; + } + .iti__flag.iti__am { + height: 10px; + background-position: -154px 0px; + } + .iti__flag.iti__ao { + height: 14px; + background-position: -176px 0px; + } + .iti__flag.iti__aq { + height: 14px; + background-position: -198px 0px; + } + .iti__flag.iti__ar { + height: 13px; + background-position: -220px 0px; + } + .iti__flag.iti__as { + height: 10px; + background-position: -242px 0px; + } + .iti__flag.iti__at { + height: 14px; + background-position: -264px 0px; + } + .iti__flag.iti__au { + height: 10px; + background-position: -286px 0px; + } + .iti__flag.iti__aw { + height: 14px; + background-position: -308px 0px; + } + .iti__flag.iti__ax { + height: 13px; + background-position: -330px 0px; + } + .iti__flag.iti__az { + height: 10px; + background-position: -352px 0px; + } + .iti__flag.iti__ba { + height: 10px; + background-position: -374px 0px; + } + .iti__flag.iti__bb { + height: 14px; + background-position: -396px 0px; + } + .iti__flag.iti__bd { + height: 12px; + background-position: -418px 0px; + } + .iti__flag.iti__be { + height: 15px; + background-position: -440px 0px; + } + .iti__flag.iti__bf { + height: 14px; + background-position: -460px 0px; + } + .iti__flag.iti__bg { + height: 12px; + background-position: -482px 0px; + } + .iti__flag.iti__bh { + height: 12px; + background-position: -504px 0px; + } + .iti__flag.iti__bi { + height: 12px; + background-position: -526px 0px; + } + .iti__flag.iti__bj { + height: 14px; + background-position: -548px 0px; + } + .iti__flag.iti__bl { + height: 14px; + background-position: -570px 0px; + } + .iti__flag.iti__bm { + height: 10px; + background-position: -592px 0px; + } + .iti__flag.iti__bn { + height: 10px; + background-position: -614px 0px; + } + .iti__flag.iti__bo { + height: 14px; + background-position: -636px 0px; + } + .iti__flag.iti__bq { + height: 14px; + background-position: -658px 0px; + } + .iti__flag.iti__br { + height: 14px; + background-position: -680px 0px; + } + .iti__flag.iti__bs { + height: 10px; + background-position: -702px 0px; + } + .iti__flag.iti__bt { + height: 14px; + background-position: -724px 0px; + } + .iti__flag.iti__bv { + height: 15px; + background-position: -746px 0px; + } + .iti__flag.iti__bw { + height: 14px; + background-position: -768px 0px; + } + .iti__flag.iti__by { + height: 10px; + background-position: -790px 0px; + } + .iti__flag.iti__bz { + height: 14px; + background-position: -812px 0px; + } + .iti__flag.iti__ca { + height: 10px; + background-position: -834px 0px; + } + .iti__flag.iti__cc { + height: 10px; + background-position: -856px 0px; + } + .iti__flag.iti__cd { + height: 15px; + background-position: -878px 0px; + } + .iti__flag.iti__cf { + height: 14px; + background-position: -900px 0px; + } + .iti__flag.iti__cg { + height: 14px; + background-position: -922px 0px; + } + .iti__flag.iti__ch { + height: 15px; + background-position: -944px 0px; + } + .iti__flag.iti__ci { + height: 14px; + background-position: -961px 0px; + } + .iti__flag.iti__ck { + height: 10px; + background-position: -983px 0px; + } + .iti__flag.iti__cl { + height: 14px; + background-position: -1005px 0px; + } + .iti__flag.iti__cm { + height: 14px; + background-position: -1027px 0px; + } + .iti__flag.iti__cn { + height: 14px; + background-position: -1049px 0px; + } + .iti__flag.iti__co { + height: 14px; + background-position: -1071px 0px; + } + .iti__flag.iti__cp { + height: 14px; + background-position: -1093px 0px; + } + .iti__flag.iti__cr { + height: 12px; + background-position: -1115px 0px; + } + .iti__flag.iti__cu { + height: 10px; + background-position: -1137px 0px; + } + .iti__flag.iti__cv { + height: 12px; + background-position: -1159px 0px; + } + .iti__flag.iti__cw { + height: 14px; + background-position: -1181px 0px; + } + .iti__flag.iti__cx { + height: 10px; + background-position: -1203px 0px; + } + .iti__flag.iti__cy { + height: 14px; + background-position: -1225px 0px; + } + .iti__flag.iti__cz { + height: 14px; + background-position: -1247px 0px; + } + .iti__flag.iti__de { + height: 12px; + background-position: -1269px 0px; + } + .iti__flag.iti__dg { + height: 10px; + background-position: -1291px 0px; + } + .iti__flag.iti__dj { + height: 14px; + background-position: -1313px 0px; + } + .iti__flag.iti__dk { + height: 15px; + background-position: -1335px 0px; + } + .iti__flag.iti__dm { + height: 10px; + background-position: -1357px 0px; + } + .iti__flag.iti__do { + height: 14px; + background-position: -1379px 0px; + } + .iti__flag.iti__dz { + height: 14px; + background-position: -1401px 0px; + } + .iti__flag.iti__ea { + height: 14px; + background-position: -1423px 0px; + } + .iti__flag.iti__ec { + height: 14px; + background-position: -1445px 0px; + } + .iti__flag.iti__ee { + height: 13px; + background-position: -1467px 0px; + } + .iti__flag.iti__eg { + height: 14px; + background-position: -1489px 0px; + } + .iti__flag.iti__eh { + height: 10px; + background-position: -1511px 0px; + } + .iti__flag.iti__er { + height: 10px; + background-position: -1533px 0px; + } + .iti__flag.iti__es { + height: 14px; + background-position: -1555px 0px; + } + .iti__flag.iti__et { + height: 10px; + background-position: -1577px 0px; + } + .iti__flag.iti__eu { + height: 14px; + background-position: -1599px 0px; + } + .iti__flag.iti__fi { + height: 12px; + background-position: -1621px 0px; + } + .iti__flag.iti__fj { + height: 10px; + background-position: -1643px 0px; + } + .iti__flag.iti__fk { + height: 10px; + background-position: -1665px 0px; + } + .iti__flag.iti__fm { + height: 11px; + background-position: -1687px 0px; + } + .iti__flag.iti__fo { + height: 15px; + background-position: -1709px 0px; + } + .iti__flag.iti__fr { + height: 14px; + background-position: -1731px 0px; + } + .iti__flag.iti__ga { + height: 15px; + background-position: -1753px 0px; + } + .iti__flag.iti__gb { + height: 10px; + background-position: -1775px 0px; + } + .iti__flag.iti__gd { + height: 12px; + background-position: -1797px 0px; + } + .iti__flag.iti__ge { + height: 14px; + background-position: -1819px 0px; + } + .iti__flag.iti__gf { + height: 14px; + background-position: -1841px 0px; + } + .iti__flag.iti__gg { + height: 14px; + background-position: -1863px 0px; + } + .iti__flag.iti__gh { + height: 14px; + background-position: -1885px 0px; + } + .iti__flag.iti__gi { + height: 10px; + background-position: -1907px 0px; + } + .iti__flag.iti__gl { + height: 14px; + background-position: -1929px 0px; + } + .iti__flag.iti__gm { + height: 14px; + background-position: -1951px 0px; + } + .iti__flag.iti__gn { + height: 14px; + background-position: -1973px 0px; + } + .iti__flag.iti__gp { + height: 14px; + background-position: -1995px 0px; + } + .iti__flag.iti__gq { + height: 14px; + background-position: -2017px 0px; + } + .iti__flag.iti__gr { + height: 14px; + background-position: -2039px 0px; + } + .iti__flag.iti__gs { + height: 10px; + background-position: -2061px 0px; + } + .iti__flag.iti__gt { + height: 13px; + background-position: -2083px 0px; + } + .iti__flag.iti__gu { + height: 11px; + background-position: -2105px 0px; + } + .iti__flag.iti__gw { + height: 10px; + background-position: -2127px 0px; + } + .iti__flag.iti__gy { + height: 12px; + background-position: -2149px 0px; + } + .iti__flag.iti__hk { + height: 14px; + background-position: -2171px 0px; + } + .iti__flag.iti__hm { + height: 10px; + background-position: -2193px 0px; + } + .iti__flag.iti__hn { + height: 10px; + background-position: -2215px 0px; + } + .iti__flag.iti__hr { + height: 10px; + background-position: -2237px 0px; + } + .iti__flag.iti__ht { + height: 12px; + background-position: -2259px 0px; + } + .iti__flag.iti__hu { + height: 10px; + background-position: -2281px 0px; + } + .iti__flag.iti__ic { + height: 14px; + background-position: -2303px 0px; + } + .iti__flag.iti__id { + height: 14px; + background-position: -2325px 0px; + } + .iti__flag.iti__ie { + height: 10px; + background-position: -2347px 0px; + } + .iti__flag.iti__il { + height: 15px; + background-position: -2369px 0px; + } + .iti__flag.iti__im { + height: 10px; + background-position: -2391px 0px; + } + .iti__flag.iti__in { + height: 14px; + background-position: -2413px 0px; + } + .iti__flag.iti__io { + height: 10px; + background-position: -2435px 0px; + } + .iti__flag.iti__iq { + height: 14px; + background-position: -2457px 0px; + } + .iti__flag.iti__ir { + height: 12px; + background-position: -2479px 0px; + } + .iti__flag.iti__is { + height: 15px; + background-position: -2501px 0px; + } + .iti__flag.iti__it { + height: 14px; + background-position: -2523px 0px; + } + .iti__flag.iti__je { + height: 12px; + background-position: -2545px 0px; + } + .iti__flag.iti__jm { + height: 10px; + background-position: -2567px 0px; + } + .iti__flag.iti__jo { + height: 10px; + background-position: -2589px 0px; + } + .iti__flag.iti__jp { + height: 14px; + background-position: -2611px 0px; + } + .iti__flag.iti__ke { + height: 14px; + background-position: -2633px 0px; + } + .iti__flag.iti__kg { + height: 12px; + background-position: -2655px 0px; + } + .iti__flag.iti__kh { + height: 13px; + background-position: -2677px 0px; + } + .iti__flag.iti__ki { + height: 10px; + background-position: -2699px 0px; + } + .iti__flag.iti__km { + height: 12px; + background-position: -2721px 0px; + } + .iti__flag.iti__kn { + height: 14px; + background-position: -2743px 0px; + } + .iti__flag.iti__kp { + height: 10px; + background-position: -2765px 0px; + } + .iti__flag.iti__kr { + height: 14px; + background-position: -2787px 0px; + } + .iti__flag.iti__kw { + height: 10px; + background-position: -2809px 0px; + } + .iti__flag.iti__ky { + height: 10px; + background-position: -2831px 0px; + } + .iti__flag.iti__kz { + height: 10px; + background-position: -2853px 0px; + } + .iti__flag.iti__la { + height: 14px; + background-position: -2875px 0px; + } + .iti__flag.iti__lb { + height: 14px; + background-position: -2897px 0px; + } + .iti__flag.iti__lc { + height: 10px; + background-position: -2919px 0px; + } + .iti__flag.iti__li { + height: 12px; + background-position: -2941px 0px; + } + .iti__flag.iti__lk { + height: 10px; + background-position: -2963px 0px; + } + .iti__flag.iti__lr { + height: 11px; + background-position: -2985px 0px; + } + .iti__flag.iti__ls { + height: 14px; + background-position: -3007px 0px; + } + .iti__flag.iti__lt { + height: 12px; + background-position: -3029px 0px; + } + .iti__flag.iti__lu { + height: 12px; + background-position: -3051px 0px; + } + .iti__flag.iti__lv { + height: 10px; + background-position: -3073px 0px; + } + .iti__flag.iti__ly { + height: 10px; + background-position: -3095px 0px; + } + .iti__flag.iti__ma { + height: 14px; + background-position: -3117px 0px; + } + .iti__flag.iti__mc { + height: 15px; + background-position: -3139px 0px; + } + .iti__flag.iti__md { + height: 10px; + background-position: -3160px 0px; + } + .iti__flag.iti__me { + height: 10px; + background-position: -3182px 0px; + } + .iti__flag.iti__mf { + height: 14px; + background-position: -3204px 0px; + } + .iti__flag.iti__mg { + height: 14px; + background-position: -3226px 0px; + } + .iti__flag.iti__mh { + height: 11px; + background-position: -3248px 0px; + } + .iti__flag.iti__mk { + height: 10px; + background-position: -3270px 0px; + } + .iti__flag.iti__ml { + height: 14px; + background-position: -3292px 0px; + } + .iti__flag.iti__mm { + height: 14px; + background-position: -3314px 0px; + } + .iti__flag.iti__mn { + height: 10px; + background-position: -3336px 0px; + } + .iti__flag.iti__mo { + height: 14px; + background-position: -3358px 0px; + } + .iti__flag.iti__mp { + height: 10px; + background-position: -3380px 0px; + } + .iti__flag.iti__mq { + height: 14px; + background-position: -3402px 0px; + } + .iti__flag.iti__mr { + height: 14px; + background-position: -3424px 0px; + } + .iti__flag.iti__ms { + height: 10px; + background-position: -3446px 0px; + } + .iti__flag.iti__mt { + height: 14px; + background-position: -3468px 0px; + } + .iti__flag.iti__mu { + height: 14px; + background-position: -3490px 0px; + } + .iti__flag.iti__mv { + height: 14px; + background-position: -3512px 0px; + } + .iti__flag.iti__mw { + height: 14px; + background-position: -3534px 0px; + } + .iti__flag.iti__mx { + height: 12px; + background-position: -3556px 0px; + } + .iti__flag.iti__my { + height: 10px; + background-position: -3578px 0px; + } + .iti__flag.iti__mz { + height: 14px; + background-position: -3600px 0px; + } + .iti__flag.iti__na { + height: 14px; + background-position: -3622px 0px; + } + .iti__flag.iti__nc { + height: 10px; + background-position: -3644px 0px; + } + .iti__flag.iti__ne { + height: 15px; + background-position: -3666px 0px; + } + .iti__flag.iti__nf { + height: 10px; + background-position: -3686px 0px; + } + .iti__flag.iti__ng { + height: 10px; + background-position: -3708px 0px; + } + .iti__flag.iti__ni { + height: 12px; + background-position: -3730px 0px; + } + .iti__flag.iti__nl { + height: 14px; + background-position: -3752px 0px; + } + .iti__flag.iti__no { + height: 15px; + background-position: -3774px 0px; + } + .iti__flag.iti__np { + height: 15px; + background-position: -3796px 0px; + } + .iti__flag.iti__nr { + height: 10px; + background-position: -3811px 0px; + } + .iti__flag.iti__nu { + height: 10px; + background-position: -3833px 0px; + } + .iti__flag.iti__nz { + height: 10px; + background-position: -3855px 0px; + } + .iti__flag.iti__om { + height: 10px; + background-position: -3877px 0px; + } + .iti__flag.iti__pa { + height: 14px; + background-position: -3899px 0px; + } + .iti__flag.iti__pe { + height: 14px; + background-position: -3921px 0px; + } + .iti__flag.iti__pf { + height: 14px; + background-position: -3943px 0px; + } + .iti__flag.iti__pg { + height: 15px; + background-position: -3965px 0px; + } + .iti__flag.iti__ph { + height: 10px; + background-position: -3987px 0px; + } + .iti__flag.iti__pk { + height: 14px; + background-position: -4009px 0px; + } + .iti__flag.iti__pl { + height: 13px; + background-position: -4031px 0px; + } + .iti__flag.iti__pm { + height: 14px; + background-position: -4053px 0px; + } + .iti__flag.iti__pn { + height: 10px; + background-position: -4075px 0px; + } + .iti__flag.iti__pr { + height: 14px; + background-position: -4097px 0px; + } + .iti__flag.iti__ps { + height: 10px; + background-position: -4119px 0px; + } + .iti__flag.iti__pt { + height: 14px; + background-position: -4141px 0px; + } + .iti__flag.iti__pw { + height: 13px; + background-position: -4163px 0px; + } + .iti__flag.iti__py { + height: 11px; + background-position: -4185px 0px; + } + .iti__flag.iti__qa { + height: 8px; + background-position: -4207px 0px; + } + .iti__flag.iti__re { + height: 14px; + background-position: -4229px 0px; + } + .iti__flag.iti__ro { + height: 14px; + background-position: -4251px 0px; + } + .iti__flag.iti__rs { + height: 14px; + background-position: -4273px 0px; + } + .iti__flag.iti__ru { + height: 14px; + background-position: -4295px 0px; + } + .iti__flag.iti__rw { + height: 14px; + background-position: -4317px 0px; + } + .iti__flag.iti__sa { + height: 14px; + background-position: -4339px 0px; + } + .iti__flag.iti__sb { + height: 10px; + background-position: -4361px 0px; + } + .iti__flag.iti__sc { + height: 10px; + background-position: -4383px 0px; + } + .iti__flag.iti__sd { + height: 10px; + background-position: -4405px 0px; + } + .iti__flag.iti__se { + height: 13px; + background-position: -4427px 0px; + } + .iti__flag.iti__sg { + height: 14px; + background-position: -4449px 0px; + } + .iti__flag.iti__sh { + height: 10px; + background-position: -4471px 0px; + } + .iti__flag.iti__si { + height: 10px; + background-position: -4493px 0px; + } + .iti__flag.iti__sj { + height: 15px; + background-position: -4515px 0px; + } + .iti__flag.iti__sk { + height: 14px; + background-position: -4537px 0px; + } + .iti__flag.iti__sl { + height: 14px; + background-position: -4559px 0px; + } + .iti__flag.iti__sm { + height: 15px; + background-position: -4581px 0px; + } + .iti__flag.iti__sn { + height: 14px; + background-position: -4603px 0px; + } + .iti__flag.iti__so { + height: 14px; + background-position: -4625px 0px; + } + .iti__flag.iti__sr { + height: 14px; + background-position: -4647px 0px; + } + .iti__flag.iti__ss { + height: 10px; + background-position: -4669px 0px; + } + .iti__flag.iti__st { + height: 10px; + background-position: -4691px 0px; + } + .iti__flag.iti__sv { + height: 12px; + background-position: -4713px 0px; + } + .iti__flag.iti__sx { + height: 14px; + background-position: -4735px 0px; + } + .iti__flag.iti__sy { + height: 14px; + background-position: -4757px 0px; + } + .iti__flag.iti__sz { + height: 14px; + background-position: -4779px 0px; + } + .iti__flag.iti__ta { + height: 10px; + background-position: -4801px 0px; + } + .iti__flag.iti__tc { + height: 10px; + background-position: -4823px 0px; + } + .iti__flag.iti__td { + height: 14px; + background-position: -4845px 0px; + } + .iti__flag.iti__tf { + height: 14px; + background-position: -4867px 0px; + } + .iti__flag.iti__tg { + height: 13px; + background-position: -4889px 0px; + } + .iti__flag.iti__th { + height: 14px; + background-position: -4911px 0px; + } + .iti__flag.iti__tj { + height: 10px; + background-position: -4933px 0px; + } + .iti__flag.iti__tk { + height: 10px; + background-position: -4955px 0px; + } + .iti__flag.iti__tl { + height: 10px; + background-position: -4977px 0px; + } + .iti__flag.iti__tm { + height: 14px; + background-position: -4999px 0px; + } + .iti__flag.iti__tn { + height: 14px; + background-position: -5021px 0px; + } + .iti__flag.iti__to { + height: 10px; + background-position: -5043px 0px; + } + .iti__flag.iti__tr { + height: 14px; + background-position: -5065px 0px; + } + .iti__flag.iti__tt { + height: 12px; + background-position: -5087px 0px; + } + .iti__flag.iti__tv { + height: 10px; + background-position: -5109px 0px; + } + .iti__flag.iti__tw { + height: 14px; + background-position: -5131px 0px; + } + .iti__flag.iti__tz { + height: 14px; + background-position: -5153px 0px; + } + .iti__flag.iti__ua { + height: 14px; + background-position: -5175px 0px; + } + .iti__flag.iti__ug { + height: 14px; + background-position: -5197px 0px; + } + .iti__flag.iti__um { + height: 11px; + background-position: -5219px 0px; + } + .iti__flag.iti__un { + height: 14px; + background-position: -5241px 0px; + } + .iti__flag.iti__us { + height: 11px; + background-position: -5263px 0px; + } + .iti__flag.iti__uy { + height: 14px; + background-position: -5285px 0px; + } + .iti__flag.iti__uz { + height: 10px; + background-position: -5307px 0px; + } + .iti__flag.iti__va { + height: 15px; + background-position: -5329px 0px; + } + .iti__flag.iti__vc { + height: 14px; + background-position: -5346px 0px; + } + .iti__flag.iti__ve { + height: 14px; + background-position: -5368px 0px; + } + .iti__flag.iti__vg { + height: 10px; + background-position: -5390px 0px; + } + .iti__flag.iti__vi { + height: 14px; + background-position: -5412px 0px; + } + .iti__flag.iti__vn { + height: 14px; + background-position: -5434px 0px; + } + .iti__flag.iti__vu { + height: 12px; + background-position: -5456px 0px; + } + .iti__flag.iti__wf { + height: 14px; + background-position: -5478px 0px; + } + .iti__flag.iti__ws { + height: 10px; + background-position: -5500px 0px; + } + .iti__flag.iti__xk { + height: 15px; + background-position: -5522px 0px; + } + .iti__flag.iti__ye { + height: 14px; + background-position: -5544px 0px; + } + .iti__flag.iti__yt { + height: 14px; + background-position: -5566px 0px; + } + .iti__flag.iti__za { + height: 14px; + background-position: -5588px 0px; + } + .iti__flag.iti__zm { + height: 14px; + background-position: -5610px 0px; + } + .iti__flag.iti__zw { + height: 10px; + background-position: -5632px 0px; + } + + .iti__flag { + height: 15px; + box-shadow: 0px 0px 1px 0px #888; + background-image: url(${flagsImgUrl}); + background-repeat: no-repeat; + background-color: #dbdbdb; + background-position: 20px 0; + } + @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { + .iti__flag { + background-image: url(${flagsImg2xUrl}); + } + } + + .iti__flag.iti__np { + background-color: transparent; + } +`; diff --git a/packages/ui/docs/components/select-rich/src/flags.png b/packages/ui/docs/components/select-rich/src/flags.png new file mode 100644 index 0000000000000000000000000000000000000000..3fa1bec9fbb5dc85e375efff7510ab79f5a0e020 GIT binary patch literal 70857 zcmV)3K+C_0P)8n5 z_p3+t`^UL6nMp>I8Km!T_d{ng_uhT?*|OwWYdu@Mc*$L=aOPO<_@suE3okj)?k z`>oFB$fO3YJGg)?fox9w=TeMF6ro9!0wDlEDcZMnw>q!nKGW_MO|!7-Qh4aLdpQ4$ z_b}=-bj@=5ummz)QS5WAqFuL>>c0>G3flF%F4e=K#}8&*nrDYsdf4t- z((*;^J}m(oI4bDj?(85T%R(d`R!Kp?ge&&W%eaELUeOv}}{(ZLqs2M%0 zPsf|F>PrFe_USjNtT_|8{cV#MzKOA9{M#TT6Bq8!@hKa*{`deTNrO4*wyhZ92tvq& ztg+jiini@40kH31OB8^v2~c3#yEpugem%sQ-{YTb-;ole`bZcS`$oemS_n>38S@3I)M{i>VW`$xinZus-MNgCAs6K^4mG z_=rSI7iT?i2G4yq6|^>QT7R+A?}!_B9%5{J-BLY18;CRN22w=7B4+-`ro5-yO z_9lC$?bWhx>&A}n)AdSQvCPqHO7&^KLWqw0RfB!;&G|~(as;E42r04Z>cQhC>x%Ozy8gG|+CE-x zKepq+C>Rlp@XFLxj0#5R>9N))R&GBJJMCM=8OM*}p@Wy{zzx!aGhs5ZZgyweyj}ARst^Dx#uoMIJ{!AYvjBLhU{s&>dt7O;vu+R1 z?y_H9C`{W~A6?p*svE&@u46|sWRzm+92htZG#4ET#NM<&JNieh=&AiAIAl4~ciqwK`Sjn3FIn2*e(g-|T=m@AK3%svP8==( zHsAlSLMdwA`H)!Y*6j|%F1DGAJ`n)#XLV%nDWsGbrbRenU?EUSp$Q21UAQz2+qQR@ zbEh3pwWLG8f?>npt+$+?EzL9&o34$lSho%iJ=FQxesu+aycuQ3VQ?z!l?@-1L1_r2 zYrC!3p)aL6*d_osCH``wQUV16lr0b<@p~8hU!c&0jTzHGha*P6$F1T9QvS14be~Pj! zp7m76y6o^FJaqLmd>(C=Yz3}6Lv`fr98p}!@8@s8W7*p$N`de|!Ifds4vp{Z+_urZ zC8JYSyL~Mjk*6gq?2teiy<4{-tLg=Sxg@(!WmkXO3XHy?Z*Bcmw+Mho1{|R73eIAc zJ0Hvl#N(i8yDoFrT=~JnzHF)HyuPG`_ z;+Xx%P+cG9oD-%BfaMiY_0q~FN^0ZybcrTmcii>|kIEAOUj!$0AlDUz*I!J*HRn?K z-&ZNQ^cIw1bz~as)Mhs?cHVXI-kp!m792OUiHYTFA>%rhq&4u;;!mCP*jamEzSHmc zb2{(WvN`L>**tL5nRu1WmS6pz+Gk(svfmb8jdS+sdN!5KuD8uK0U`PGpDQX zMp}G6!D8`9i;_H>`ecPA!EFfKanP;pkZD`|rK47R{EB|v51v0y>bzeiL7Je)5;nRA zY#l`BGCy`r;vDbsk52oQ3H;7B9bGSVGhqgFF%b*T?^Ivh_1`bJ>fZNImd&(r1-$;Z zpOc*y=#^Z5@sitA;mir#@!2L`T)K_-3K~EP_Ad!=WH83H`wXROKp}4oo`R-nU@Ih6 z8(k!@<#u`T(7yS-iY2tffRGYQtJQ#33edHkVhLBhy1s9H%cF*NIKP&yxap-eWIk{| zM^vxi`q^jmtLu(o#=xZB>COJK`~H1a-^!hYe^GJ%l`7-tgD9Oaoj*Obh({m$lvrgW zr1${Ie{a~I*>~RH#2UWUOqQhm;^)W-;{?FM^byKs zDa?={CM3duw7ug1)X#T(lhjWBT{qv2a)C$L=mCYH3HGR6v-7$s<=}*E_1EK%!};es zzyISOaK;&JgH_HPx3P~}*6pc}bL@N8q_Mcp+v+CnPHT}5UDc_je;+-zhI&qas*+R9l&>BL!-QV1z}@NBn`1rV_%7p@)86BPv=$89cg&Ktx2q@+~XHA$Rw{Ff|SGk}$=3Xmyb zgiu)3$sD}@QY=gG{>S6dG8<7!VAuPZFn%+m23PRhOEZy~jo7w?b=L}j(RUrDa#P;K zv?T(2x98!L^PD4)de$o{YFG@(4zl3({rU5}Vs3e173o1YO;H2GuzPn{o+-O2~&|;<9#SS{x z7jNy1!*qQ>dlVCD!D0FTW3pY%Z}!9IbRZvWP8z-^ zf1P_4Zf%DHXBqI;Utrl=Ab0kY#kI~nL}FH-j@RdLq|u_xv3=TaOKed6V~@U_-}4vt zE56fTdVc7m`}AqQ>(Bn!iP;?Yh}zNAx#XY`T({|S)Ysp#_|hvmV_pfhjnN)KtoBR4 zbl!FEL8>F{<&4n>@zB1P;nO|sKNpR$<<>t_`||4@`WI7Hd@TSrWKC8=*U0+!9rzE~ z$LZEI5eW=f*-=cn(a|w#5JGrCDU@X)60xlC+w-Y9=PHzGGPr7yll${2DkVkmabq%n z+ctoY8dC^aTKBmvN)XU2_Dyc!^1N;AliWaKgCc#dbB_O&RH$BzHSn3yOrx^U7uqc2-s)^ z79uRsGHh(Ah_BWWAxUSBM$0+=)xXB8Ukz?%aL@o#Vkyve2M3?MDdBe?+M{`pEjX8< zF(NI>{e_!Y{mM43xi>^Oq7VtU#%@uEM?KNEdj8eZciO*7sn%FP+uwJFvpauZ>;4^` zrI=L!xxpUiL3Y{x_~|a;MnXy_Mjf>sq3YW~Cnx-X!g+71Tv@{ca|~d1=+TSBLpYBk zx_+c%r}wKKswo)Ow>grf>jc1g-*zuVTJjrpDY{+Oe@+$K<8N(xk=WR+r(hRaBL3F+ z?if{E@5WGqJT1l`J%XtO((fV^(+Jf{l;y}rp>6*z+jJ~EAr;CNc#Tf1ls9hTIw6CA*S9{%hC!_b1?T_y{ymWLu>5qpqDzpqBPE!`Z51F<$k=v*a23PY`VFSn%C3XospK- zlApfl#_`Hr+yHL5^ReC0YU#|15kTBVpOnJno0s(~2Hu%%rrv%X`_9`S7VA~Mg8u1u zJLM>7QaG@356nO(A6{WuZm``9P1?#ig&*;|$3GGP>-IopT?)y^Lg;+JVoG^#7 zKU-Bb3vIPG$$N|lgJBDuRmgl}=X^#RIN9IC9ch(#+sZTn zDh8!@`Kf!$-Ju=Tvd`=VJrRXHPY;mOoHwr-G-bP@O(b4x%I2j3llk4aqlxd3`{h;^ zw=JK?ab=6J#LfdAu`#i3*PfyJZnVIk9(UgU>-SYh_MNR1LUXaVcLNi=iVzkRwu?8L z24lyJcKLYi+FuV40E73tI|gW)6sjOMg^@!t*;duW%C(gkmQ8+kviRp8j+OxD{eGUk zwX#vUG)ZAz3L^$*vbCa-RqLy;odBZR@Zl9MfW-v^`&5=qD&4eewwb0mFhY(Wp?6pn1CY9qxk4#$nXgat7~yQ_@Dn205?xRMEz;j zKq4*;&9JcKZbsk!`jFGXw3}3`eV@qh7P4dfUI^jjd)0-=A5+Br=geUG^UqQF!aHbw zFDRH$`%R+X7k8*jw6P2?#9g4-NKY7LJ3d8^+JfT+z{ca;eX`F6y%cx8__tGcs@up* z&g6|V?_u(Qk*(OLQVKnRZ7wQX&Efy~726uCcV4{PzwNxf!nQem!oECw=tX$6_UAcf z8JzppgFLbHqmJ{+fBUl2@A+T!tu6hJ+5K8q&|mrVgZ8-nH4SzD`qU90Pp(-WTkOl` z;JQ`3n>Ggf%L}{iWbBQ7JBJCs?8VD&SA{dibI0c!d49n*zL`}ALNfi+AV;OgxN7fF zga-tfKIwW=T@9E@@6w}giBr9B$z7_bjgEOYp<@nQozLMr)Sw!XC}`5DeMzLG2yMq= zUPs5Q&CXXcIT2-*Y_)4afCZr-4MtjS!gsW z3%xs8Cmj109J_bNtYT zD6gqN>MnW<`>Kyh`xP&qe${k!Xc=5^^kppn<^%4GEM-OBv1)7b0iumD4a!1d<5F>K z1%~EDC>x<{Y}rN*Up8~s^0YL$J%JAgUjenfMkI0G_TTdrb?fpQnAxzDMj$S9bYbsu z{&>3O6z|^@$W@OB6WdB}-4k1cxU6*>L>qi^>E=Zk)= zx$9{E+J?!hm)_;`J078FTUD>}$*`TH;C<8xWN;791zdl?(=>;-G53hA&L{T1y*=lK06Q*u z=Hm67G`p5~L_=aDb&2o@YG0_N>d|c|Lv{F_V~QQy?wBLTt6wZ}F}Oi?UnkxhpYNil z)sE|s>uMTW!2nPSYwI>A=W#c1-8U|~ zQw^Fkfjhsb<*9F~cz4Ja;-<~v>+?A=qnT^=&trWchZ7!Lj1k@*pAiY6sg!7M{4nI-9_>Kd9*HN3j~$w>l!blXs~S2Gtd3Oj7rs z5+}J?IOX}fIo|3-T}8^lFZby@G`w@H0BCsPDOG*l_1F!K$fO|3+`T%JVHI2Y)ow z?Wi;MS;ODY`5eE?Y-dN=G0BFz3#fc6oem)R?R9PaWcRhhVB3&~Spx2ylERZC1HD_g z1h>nRxs&>IKb%_b%)_^RoWD4=#abD5y%GYHrN~SV5RSwNN6qb29y{VJnvEHAK};tj zyMfw}w?n+-U4}o)#_gE@;P4T#1P~k<|ngwUf>`oyX3;i1O2aO(fKeD=7(Om_1t05oHUy zmpjRgTzkL(Dl-T0oNB2L+o3)gg(fU~T9_s?nI|tiI`M|>@<9mD5;lQlsl@&jjHH5B zc!*I{bbE+o;){D~MSK?&LA7x7waw{L2-1YXvA$-qTs_Zunfd6w?Ksi;Om8MQ(fVt=&N<$(lFPxZb_J4Z zwSWKdhRXAMNcXr{RUbkCNiH2Bz*35)xY@gfJ^yfLyc;|Cn9v=*nDiSV^(M!dM(=!V zSG0+rD8a~-t-QSd9~hOgwbPnYiJ~|fvA*Hl>{643`Vd?ExXMOam1Swb@vmmoZ=M&!*UlQDVj0kqWmE2j^u;0$%5{ zp{Qb8mEDe1xaBiLG&fiKvw1V#1VB&MO|`6>4OYkmD?wbRN$}}C7D%E4D7)?Ns)wKd zL7H-$YU#CiX~VRwC2S!R9-8B0d|`m9CWB?0o2d(#Xj0(Pe$Xdv=M*>u!U9WZC^Uya zTE)O_AfFK9T{hE(`k6C(I8zRsfh*fhon|p;@5ABWclYb~9xW~8XA4Vt{unp!owqMp z54{D_=G_b6z=^|oxiX(8UfPI=MFEMXNlY`sNheJJ;Mr%FqG>)XYiA(PL@>q`CaxsK zF)w=mN{AnC6VMzs_jG0zeA}kp9Hq!V!W8&Sl7L*W=k^Jc}Dw@#lpP{$%I!sY*XbF5l9j9zJyB zC|+s|GVj$TTpWudq(mu&VVY=uKSD~3=4Nz#=ae2#-W!-kC3b8jn5)59hB8*5%*`mf z7R)e0x&e=4C1?rqJST$$u>Ys`a0}s+8FiEAj{>kQ>_vLx2^_o|;ZRZxRoh_9WSB4= z(zAL@q|i6b1Z5{o$QTF@%GSUw5z7sDISS?0Pj-DYzt1UHZb@qDBUydQh@*G1?W86M zMdD-ygUp>gfZ;_+XhLVzrdmE-w2i8!CW3yC69n3E992tt_QkOny#BiL`w>Tg$J3*a z*>RX#0Qb*@Rkd*3aQOW3x4s;hkM=2O=#j+$J|;S*N#m$&Bd z?Z*60&E~#5Et&w!gsB;lhbQQyyCH6GzlT70B@ItjQU7SgPeeEPICA+G9&e``=+L(o znncA+jyrxb$w6mtHHBil`1&%WTko()N(zC;Er~>b0&+ruaDhy*v8p9Pf_tDve2a!v zC;0!tL?1RVy-)jFx61iBC$@#j@p7K@jpOO88JGj}u^Spumc2cxv=^jq&9D#4y3QdZio;({hnpbLlyfnXr z!a)K}*E#LD3D}n8>0t4SR&4iWI9Bt%@PC|h&p#-;Gan|8=j>v=4p zB?csgAefax*mQ`L0xm&geW*u;{O#u%iqf27tIc)MpQNn+A=|Z0gE;B=&zST1H~js; zy*TfXUvU2`%X#XVuZWg6IoNn&t6HWF5sN@!21gClIo(^y+#(;rgAQYH#!!C$^0L-` zbyHE5;v!?8I3qk^YMR`*hS+FAAp#D*;vJf}5Ub6_WGLsfo`TDFBJ_D$!!Qw}EOv43@-FN#}Z&nQJCVzOWQS1f2ALuD)*>FEJR z+ehtdEuClep^2(k(Xm6?QBZp)07GvrtnJTs)i-5)aQWk8o;8unP8(0Te=^T+Z03`y zEo^Bn#f&#Nm6DnZO}c0yLRPzLAtrJelwq_IP4=YqXDqj0T1T=@2(T=gQqw5&WK)@) zNu@hLL3t(PLmTkdH#&qJ9T_QhKaczW?4o{c*W6S511jjYx3mASCPaVXJNtk2SKu4AcB0PDbg-K2plL#MDm6 z{x(doPJT+_waz}<6ZZlel$l7_*A+eG{1o4}!jM2j0v4&Kg)wRcP4j$+Natk2ZQJLy z9+o$GIISSU&-0payTFde9c)kZFSw@(g=IOu%&CRdoMmq2soSb}^mQX4V|G^YXB2iM z#uFsDf`l*Ca~bpaPUeJ-l#;K$`igiw&R%=%<&dc;)h-WF34suTPe1(>Ap~>g%xV2> zyH;EUHDQ>Z52G@{qxT80-do(Lg_vf-&}5PWg3nhscWARt)Hg8Ky_f|}6A{AfB<`$( zN?gV*%pcZB(z@4ms+9n_Z*-3o&}=AXW;^|TRjCNNM6WJl)TKp|D?+-jo~m#WBe}hzR*GlpAAWmL)Ncg*gH`E2dI4|VVao`Pw-J# ziF#k#f{bGz_xBLr3LB4wrjLF^F>IxF?O-a2EP}WH}4tlUPz##dSp$TpB9ol8pzkw#Gtstv@wDlTzYxX^a|@NmiPl z;*x4G6E!v4t6?<9EReX}I%9@rk)G^h^@eI}yFHbmX7|tL=yhF}Wg}zG1v5%1lx3p4 zJ6}p}G&WIHT1t7vHl)u>N=_EChq;jdKeS|_v8T&Vo^%mSEc0;9!#2&$=SG-D^~2=q zNvW`GH#c1L4ayYU`{Y>0538amC&c{k2GAVQ5W0qE*kHUt7n)`FC@%2xl@$zZjB(xG zLnuq}qQ%VJCl%fSQ^-zk2B5MjuoLE>X%Z_M$1-e=I$>GLfD2AOH*W6yj{w=(fN_5=`AfhUH^ZU6wOfE~_2x z_Cf9;EJ~ZgrEBl!g7tqV(`=%?P5t?R- z>H)ykoxVet3Nxg0(%foJno)-tl}Kfy`8CWYldAj6sDHD@AvSHRe-gJnww3v>4KpbV zDlS;$VvlkSseS?}6q>|+z+Px0hZBG2L$rZ~*yRHbrj%+Ho@;h(co_~j{w z5qS7vloGssT0Z*>P2$a1D*t(T1w`A#XDop-5;a3^wY~VRlU7#~CJGf2zy z{3PUqQ$&!Uw6hcB`9Bf)pmvCr3-P~M0Acl0UX?3r3VPaTjLokTS^omcXzCOBaLF@H zLGRyAjpJ?5P;KhX+NGaB`&5*U{`P%fRi~YTYv^DqFa8zr)oakwQk|N?A88_feN#%$ ze7hD-rXD^<#~coHoX@Ih*oFzF;_7SmX2GIbK6-6AGU#$HF4!FmHbKwh5St`quls)_ zik4UlJvR%hz7Z9Pf!5|);9b~q((CEZq4t-f3WmwxqBP3N8wuCdpnR@&I$o1Dwvw0) z0W!1dx$c5bc=y|(y#3Wkq(6?m1M$rZ8=BeXGP!zI8k3tn#EKPG^X?N1g9F$^z3J$I zLh72gk>WM6ObtAWfhl=3#X}gjO+&1?XQaaY-E5mkNeLB?Jx24ACAhM)Nt!zKN2%Ml z{`oMORyi^EocTyGgi4|tycZu(`1K1E)hpD|<709d)Qj&0k*{i-%v zc<|~>!Ja8GuJBc};@N7B`$w4SdK*o)aAb)7KEe3=IA9)*Y@b)J*WJzpPziHY*IlGd z9zs@%x955OkM`(<@A7Q*=XjM8G*xY+xpp(UJ3xBTM08!}{ckGxW@QatkJjsYLllfi z2~rb_qfi80IxU3A^qY?;I?yaXeVyKG+r|bgF9L~@!tuGZ*iKWS6ohJ5VaIFnCJ#gR zrXe+V>+43Wnfh%D@h4>wNFUu!Z`xKIGg?QqVI9(wP9S4+zt6+zS6VDyxtS|ptK#75 z91clMLFkGG(?THlv3h16U1R9L3~K7apcH$I8NjNNYQpipjZe4DSMAB)e-JD{2#ks{ zLf?Ldo|@sTWg#zH8>%?<$=mtWz9(|k zop+P`=%bXs{TiCfjdZzDcK_u82p}e4ZXJw@Lzxe336;RKFnsNS_Y?0u^Vl;PQZ$UG zKe(QPj891p?w%CX9}Rs->E|Y^KZPkNE-KeKVBegojjVjdV1iWK8}#y-HjElW!=>AZ zm=E`$&1klwVPh_uS7G&*-BCGY#NdEfyDH6v0Jo;&()8}IuMS(R3uTE?*t(88Zve4K z1nKi5q=pJN<4#J$cIjYQT?X^=q>JnQIsBrj6gy$EwOqYCafHtJ;X30-IKc4IH73i~ znk-vuI`fk-q9lUr{W;{dxwW!a>lWAW`)p=SO(s3vk7c`PYHZ?*Wle;_bQ^%NfJg$| zDK$-U62*oUrb$8Kcb}AW75+5(nr%Y${C(1A;~N$wyvFAw{A<0l9^$6LtqY_O#7vtZ z*JSPuJXp43by0F+9l3 z>4O+Idkp#0#=^u2gqj*z^vTc;c9`dx~D7QSArUAJ4-6-Wq;(*f5%1NAibPEv`TMDF)~Kcu9p@$b`o> z*<8ON#*`*U&Mr)n+&b99iX{1eq{6!*HZ6;$`Cm}^_s57VE8gW|=yxkWBPHTuJ6>C(ww=ZOiWD zUz?sIV#j~7^Z8il14=(PS@S9Ev4b97^|HYPO>js6HoL&6kHOdxjDFz}s-AluqrQ>+ zi!Wf^IlsdG_$x&6c48INROqf;aODE~wJI|!z7;#N92wj~bk(QWjm3D!Hegn62Hgg9 zgm8m!1N!$&lKcHMT_{XT15Yf)%l*pZzXB^Jrl+p|%gu>{3pG-DxlUcjBb^F=JPUnd7(fsl8^(a$-rrEqTPwxSxI6oZRLJj?~9_v634obn}U zn6{43AB6;{DW$-+H5wycDjJgr#XJa{o58dW7E%+AUEEpGQcvCHmSocjse)%G>kJME z;^y{(Ug488y--cvL)*H)h{o-PNs}Ns85$d5@nQ$q`kq^hkG5tfA8k{sk9J?s%O_$e zb(YSR=g(!;+Dg7yxCszU8Jo)$=g;M@|Nepr~{7mLI|e>FX{qsac&Ak2@q=gzk7w@DaH)TV&7tY}kECL~A=D^yLaY8Br6J&-Q{P9O2PT`XC*jZcBDKNkLo(l1Qbeg;!hTvR0F+1%>Q6wfo5C~Wpl3-Iu$pVJ^UKKp7jspHlV7*vMx z6|<^l^YT~ANdr_)^_7*>)D z73*0wFp;d*$Bt^>UONf4=so$d*(f_1TX%)by8{e>3;>352y7(~?&*a5wCrgK?4f(e z3+OxEiBe&~jKL+$TewF;&wT%T>9P6+lx~i*X1-!diie7ITM)pW zm0MW(a-4C>Vz1l`{wxopNz>44>X`cOEoe!#xTQwC&dcJ1u7S){Xp^AQyI6umxg@{1 z>;MX~{d`*%r+90K;-}vu5-}V@z89EvhR?a~ZA;z%@#gi~zxcSE$8ys+x=!QtlDC*! z=;Prd59HS;oX2gCEg+EOZxs!J)BwlrmCr>fRZPjy2pn)Q3p0mt-^*3fe9qcu5SCJCJtY)AIiZJ|Kcw^vlhvO&n0G}t`XcBP>@|B5 zRo@gdHlvPFL-yj6FIU0$ba9GH*`O?Rtepq|1YlV(%mo^X)rLb-uw#Lh1WYBIzBEVncG+qoxK?DUMXrKq@*aYozflpWPfVvSd2 z7je}gH!ykmhpZl)O|m>sU!X zwAyBrOJTX(Xi*bs{V+lK{=#?qt3}N?3Y)f-SUY7%wBT}`7CZd(35H$629f>reI%W8 zB2^dvp3Q^zB>mPaNxABLgr*T+tEhUp7(K2?8fW2}1j@2$xZ|JHUVkV0paKTG`!v1- z=eFzj_4)AO*D!k$oOzVNVS83_*ob=Gu21E$$~MHpfM2ti9c<#v>`D$zt%pW~x8H`x zUWG3fLpa)g#*>9)e^-#{x}ODRnAc*BEVQG<+^)oJZ#~yvEx1N^c5AG(l5oiuXS_oS z@f2kD$WHC7*xI&j4%l~JzWVMv^o9lp14&6?=9DSC|ItTXezsf3*bv~g(FZzlE33=} zQ3nvL4*zAA({Gpxpmdwm>iok2@us3Z^tb5PK{P+%gO-e~qQxgw7@Bj@B4Q$=I zl~YbR#VMTM;TfKO`e`0}>@miU9m}j)v(PkcXHpdfREFT)^{}}CF{1!iPSP&N7h=1D z8<`r)wD6|~Ir_L_(%m{swvC{vwhrOa+8y@>9Z6W(W-`JLoKPYh(J95Tfv@dqp?s?&y5=<}L zz#(H+(%2j)Dd^$F?vF6^#E0C1p_9=@#V$QtvE%K zV^mfuVwR0tNH%}zCsyTV(Mth_jt{l#cjlxa{NiVOQd!$fZ2d;6=6y)46VlMW4WjhE z2&muO+I}jqSN+uQoh?ZvozATDKhZ9O{{N4JP63#fU_*t6`g%Wspu+8nke|~-yV)%f z=m@X2J;_D@wsQU!w@~|LJC_@LR0(bk6}1xhT;ly&!YOwDv~w?%X)|n48fPCdn$pS; z|9!idrlwdsqMLR^!j^|Te>JD(e#}W3?^5WsFfxatjX4hPxnuh-RM7AtG=2yvheFo* z5ZntY?uKwFG<~ogZSxmE&K2Mp0%g}j!&}ZY%kODNcZ*CYg>>aQV#Fx#fr3-*e$}(% z_@_1!EAc_I=+|?hl)$z$GX0M2TOD?Tw4Gd&UP4;7VN;Nm#6vmrsYY<FB<_WSp|iy|m4SQxk>c3@?G%1;neXK)P_JrPBE6WKG_SX-?7MS}R7jbTP*j z;Qe?L@gE@4Y1ukOx%KQlsf_*4JC1-i#G^NV%pS9=`Q_z%^RIbhkite81}d&lR?iqV zn_W6{x772*Yb*KPK12AbFclFqcl!xjE^nMZWD6%xcP=}9=9}?+T~Y|rLI{bJVAY36 zF394>)24IkhD9`7{sc9l7_1L>q&Xhum6ac3E1Qv-MR;`g53Gb$ZzTNxtX-FDM&zN* zn}?2x)m}R;T6^HfZ{P6nmw|#;|FPwr>MQc*f;)-8ta}IvKYVfS_cEqOYZg;wh1pte zGp;z9NA_$41;3oPiOp*o*`rb8FvEpkS6ICu*8NvP#}t1GliJ|Lv#K_-{1t<-Qt`Jo zwZoQSJ1)Htj*Dq0TpF?C*%!#9WUQK6tVSmwDAQ^gp zBUR6PsCm_cJIn6yVpU6NGh0kX&y4R|yZkupBF9qb0jgws3q+(et(HnXVAn zhJlb0x7$tJFdQPyL_F~OZhOx@QX~}xNhuh_xFjFBasX9ZgAj56k=*7LjE#PRH&#TM z97uUhH9=KPC~F208p$(DX%y+yq>XL2o;|VY?hAUEFNPEIz%l!N%k%Sxv)3pa6&D05 zs&VD6XUTUH5V%|CSDImJU1{7r;m^D@;8?ET{8x?{R*8~2;fRgwZEEO;A11Im!F1hE ze!#_J(K_C?!#n3M_6B$C0_S%wm4R54)>@WCiu!K1Bv%ttv%Y0`%37M@Nqk#1m3587 zTJsva_fO3p?BQOj(f?~5`@Tvc+%95c2Vh`e3!89}4_8SwqPhvC%b%?I;T16^yB9OU zwU$NkNvt$RVJf|wy=OSOq2+>CA-3avLO1{|0`$)HUsY3_WB#y+oD?^IxMVE%y}p?v zZ~YFT3(y>lrIkoH6a;B=%%lZeKKB*8+A99_RTA@-6=5kz@mU?>rDj}`mmB5olS-Ys zL0h0F>qM3}Q-04DA}d13ptk*B%Y=M4P3&kC+MF>If!IICn@%!JdM*(;L zaR_q{8`STY2lU?eRqf=1rpfk~Kqh{-Ec-{Fx2Tkj5R&S0Cub!ycVO$^{@2=`BWLw# zf8X+HLMBEKQlbq#oumQ#5nBBu8L@9jN)1vky$+X3FNiTJ*E)VgV^DF~Q!X^2_~5K2 zyp7T+``IB>-s*>lj{nxuzG@W@s^8>}Z`MrmUw?(FUtdM@tFIzc)0`Nh{o^ABIsK3q zI)4;E3W=s{EYosw=7j8$xNFgiEq3(>t#)<$eAf1Lx}R&qsgB#^W~QPA1)_F7!?b!n zFDOLmI-(|oC3YWO{Ibm68sDp>DHY2X4aWLC;Dj?Sw-JeY2G4 z($%O?h`n=bNFQ6-E1T^8#Lr28xVCQxdD^i61ZH(7ciK1>st0)1mtStTbu1g(tFvI? zW>AVjL$j!Dh|t&^Ludj`+L$2^Xf_ue|2cm=`+XvYi)$Y_06b=gwYH|En7=B*#`-wF zIWC;9Y#wJcv={*d#s9Vd;nQDy0b3m9gUe zJE&g!D&DlA44rcoL#7OT~`2OZ;?OuWXx`BoL4c8nc#WGlDA?M@tG&x^ftyX4S6jLkKV;_0+6<0L|q= z4~`%?Yb>tRG5C@P5sTE*xZxQ{%fpv?HA3h_8#fZKUrA%t3e4s;SVoMDv6uCFhJ`D^ zM{4x^lfSwp!Wl<-IO?}i7B1PqJFf*eygrA6Qj@VYMPs67MEuCsTL|!YbZY7&q$Yc* zZHQo)eQ)z;rg?GclFU>uT7t{LwiQ)%QB2FGrat=P@T+4{qD#I-rlupkKD68dR4j@z zE%elM+<60tZz;jpy1C0bpx1^i91I*!buZf9e{#398eGAEhvt_vMeZXLx`{G8v9I}%LvzB*j)Y?`JpGswL{Jw zAG@$+^>fn?;e=C$b6i@Ow~8An$XS50VbM9~vRCsURWrw%jcgwdRM0@M3hZc@P zVxc=xHLHpNG&4a{%ovg65D4!%mV#;HVDt#^B(;97uCA8z_n*whb){rxdCA=q)^FIj zgX7fq?UdB3Iq~O(96O+l4;LGZ%YGM>V)+F(vtPwWy!v&F$Cvu3p#dpv3JOx$y0w{Y z+nND`DN_oVGpCSy@BJDn-L1ov0#c1mB3OvC$!s2I&|he*?27=Q4ieN!;|3;>P2iW=J2B z3JW1XDjGsghbaMx*afZBmQ48VMPUk}HgU~SzQaNmd)8YVGTHw>MJl|m;rn5v5V}sv zq5I<+kW1zL|EA%c4_mJG=~YX0C1Wd#drSVq>)Sry+EEvA(y2cq^WcN2c;-1WPyHEn zA?KOK-1Hl&pM0L2lTU=qWS-sp8h~q73LpvxP`&b7V&z-N&%GW`Mmk~BLbd^; zXU&?yq>1C0Jb5zX#*bsn=&@vG<)XO@(A))37NzF4HN+x<0k@usZ=AxcTYxeagRur> zm7(l9oTNxsd*r=84D#(V5f9rZ&Uq9dgY(SI01Sd2B-3F3&-x=wzP=y_fW5=R>erug*V*^Veup%ZS24(Tb z^K)^#Ygkgco~ouTL>sFZK5!;OGKO&1MT5EcFJV@1EJyRW+O2Ds&u>}q%{Q=Y8I+Yd z|AF)Gni?2C9#Xo$HM1!O=S%>91IC$(w{8sxD zqn}~Fm)tNwqVNVug9 zG@JURUn#(h#;Fe^_g1Hquo58nNnLnI=2-C+DCS<(Y zeuH9f_E{hAuNJzU(*yf+((xlWIwi#0#f=oEev4AD{;XfJcf|^xUtGf*WrE2`L2}$K zf&sx7E6Um8exD3~78BA(lB;DBiN`TLdOOIYrnJGp>yq@y z9QvNxaYH*k$4Ur16@vZVw@8f@A*@yGzbuS6KoZMQh)(Rumv(8d_f69kjH{LGSJnhi zy-RfNOgv+UBRt&~SPZAzzFYIVwfYi9io6LR#vhkdHBECTb9pbcDjCgqk?%W)N z$I~rVc*YrLY=;=*0^jjblnbJMMYvg@9TX>+p)>XiH=PJbWjy^4)_HcN+Dd^gf& z=`foO0~B>hpoGHH=0?l@+7D07E#0ACfv#E9h64QIAIIa8I{Qud0x1;lEuMu@d^~rb ze*@`(a!gB0eE;_L^DeO`fh`oFh!?MB^7gXv01V2kCKUC8P|kb0=)*AE1CCP4_DQWM zOw-1+>|PbT{33G(C!R8aV^b{NT3tm!=65KiSaj|$nOnA+=N6aoO1VLX($D~5TZ}1c zU_etb1~E3db6JLgxq}_h^B7PSVB*qTe6XgDhbH=&KETW6o2xNw(d$AXTfvHoFe>r; z|IYor{Uxp2x2OMf5b?N0vn>&Y8Cb3+s+X^0+(9`!eapc#t=r6|a10O}G%AfF&K-wc zQ;WXO93pNXW$!FycB;jpzugy?OXHN&?{1YjUfX8#<|NK6-h;cdhH}lgb(}n?3}M<> zhK`o(td>_pOJV*N3$53$hwMd`0 zXQaZm{gXPyN(PWV#ozvOIM(U&S-NHb^S>F6Oo||c;>p+d!&1ozp?LcBX=o|UC?$CB zt0}~+WG0Q+%Dw;H8<`xzR@-kl7Fr|q&9m83a{>A357H1b(PUf0XM5hNfF9=~eRgeKEIu zIWI1)6FWFI$#uCJ=}c3I}^k_%HfEs@l-*VjYqAcZLFh@4DydK@Flrbbx|kgnF;-PR(^T{yoH%SnhoGOLj3TTPz7tcrOr z&f}s>-sI3}xg6>nN+fq2tL&+K*x=#4>KYc*Y@#l-4XkF65}|pJLUYK4djuj#lxdQ6 z>%Az$pz7-LkV(m)>)oEy{)*-P&4rmCYte9*NJ@vG0E7orzzb ze6j;n-qAHvVsRe%;9ZKcLeSViwJc%44Zj7SuT%exQ%~*L!dj}e@JA`T$Cob*y!Gn7 z6=X+$$p5wN?bv;Dx|KUEIHt;Iii(tv*o8i z5Hcd%#~0tD_1=fgwm~U;2hOFa_+#qtc!=8T@1pTv&yfA_U+_(vjGmH;7FBqL4JR`H zE2@5Z4d$k;q~CfasaIdMSIDKVOw@MULn+#!cBXZ?B*g3pEwY0YJD zB_&~Z@C;Tc)b+VF1X@8H?@4v&LlT!jm3W9gn}${D?v_;e+4YZh+PAQsY5^nRuILHp zTglFo09!KmEWHc&s-{*1`maXE(^`G%(bQqWIb2WvTBftt_Sq7TWdMMB`x?WGAuxx>{B!>-X;tKC( z-u(L}{`}2Aes{y8Y+SdT+yC?@$KBBczy5`nU(HIU=GQ7vNZNA-fzcyLN=l-rsEC@H z8t%F09qouAjZ_s*9*U&E6=uQmCSnnj zOp!^GaP73FE@9#k#!i11C~TbfU+#aN-}s+qtDVg+8?WKr*xn$Tx|G)c3=Zx}Eh7X3 ze9nFiMPl8%uyt!3S#o{ng^jkd@oH|?gtp<+JQRA?pC!&EXBACc=zT9 z0GM&_zASH2_+-y{appWy99mj8eKAF0v7orc! ze4imH1`OOA_mnfqnS3;O(g8;{$ROBZ2cEKl>bIcwElAx9GEM{e64(jis^ADnJr3$$ zf%;FJ_iJrrp$yQ=>cieQy(7|rR_9fMsUY341 z{dFWzwjj-8;L$Bc1sx)tVwpkA)ToQO5VGf_!V<7-7ssV-r8=~nv&zpSQeDe!#}1(^ zWb@Fw^;{60$zOBcY8L|VLEBaUb4~ytl3b_#;x_8yjNprQ97wf zUWOK>Q(RI-X?bJ2_x$d(QGGj!A1v;jZ6>P0is4Rn)3D!A@;)ynO*OD~*3a>LTSllp zhCsH?dD`G225AzH?xJYK2)yZOeKPEa%mMv+J}e3I2TO{xcFuvam1@1DY)270s!Fl< z1{5KIgS>^67P@7!j>^<;R<6j*Hfg85gZRuWd%U zx98L-rHFj_6?Rh-GAW3P#i+jN7Np<5`#wU#sc(!J{OS2`061iF(T|c)IRDmby4YnB zp}8M<>Xb^aZSfuW6 z;2vO;cYXv+sC&(jh-KTz@ z5CSU}B|kHl{ip8Dvmd|OI!AUi3NCkobou*pa_)ZnezhepMO?PeFIckX3m#pwfNJdk zME-s#A<6JX*~7CQZ$p%%SOcR|i_wHllc#~vfi0AngIMeF;5M2trKj~=^tk3*)u78p z7Btk7KA?nQsZgm_aKiW$vNIdGWRYm6u52L@%0wEqEK8fri5dUl)ERMpf1J*!Av(kr zmZ^~KqUT+-Hh8%WB-y<*4Jj^m#yFTFw<*y5?Zq zT@Lw<`@8j{{(ox8%4oG)1vZ8OwMH3QW)qrHG{*d7M|F~fg{`cgDBdCPix6|YpL4kX zZT{12v)&ktN!NO7#*m2&OwXgZVk61k0NF|DWCW7gSX)kGq?y4P11N8*<%FQ}VWMb*P)n2jb{vW`-1NQ6UClxd~JCopqi^<8pgx`&-XaA}NL^Kak&E0vv z*A8v?pKo){u!4qU#kv3Wa79`*IhSq4s!!w%p>XNY!r7%uFbr_HcKDmQJ?7XV*@xx_ zyEB5>o>bgDk<#Mr;5jITJ|K_0Xa7s}ZFf+A*IfuH!Q*lAL3X9}lh1zqy1#a4=-7ZC zh#OF^Lok?(UEc_Ca3yW$%x_H;PqZs~U{}vg__5Cv$7m8&5R2g|DkNomGV!u!sYx$j zub&^tqR&=SvuzE+w;e0(ZC!sODkq@)B}5An4vzeqyL@-7kXMU z8Rwor+R29#*lQY9cRxz#%WpYm;5N>lRk_pJbk$m{-$5rF(YNC~EpeV-eYNv*rfjfk zK_!Ae!UtOV_S<(lYFSQ>lt&5nPL0vK;#fX`|3E>jO-iu#vxA@D{Tt zI+vd>Ta<%oYT&Xut+UO_%0jsU+%d12;#qZEaZDaiwg!#j zyb!imQri%Ou)+*jREO#bMVgqFH;M&itJ+3!c3Ia8w;R{=DY&Lia=6yMT|)fZMG%ko z=mDh1L;fX~pbUfNB}*9ehdrA&+HjsTErJG!C1Ni73&?YuS^rq zfLu1b{3eB)xAO4=5A(CzZea2JPbprokbTZMotOUo7?TF(v*EF4@eIfTvwNBRikQ7tcTvGCw>>cmjQZ4V=oRxvJRF<;m0iCY*% zOg}+==UP|4UuXF6RA$a}E-3x-%L@E{z0V1SWnw4QnS${_gKLs&XnenlQ|@VIW4TQW ztYeshA-Re_{yKX@7aD8XJ;JWgPqhSCf{8<``7Jt+K!jTE8*CFwqan$`|gq~ zTS36>=&PVdqDiO=TWCTMirYP_o9c)03L&W4@Evs}FEMdSm`&?Gr=oZggC-ovotIDH zrt`-mMb9r2&(CrM`!nP6ot#H0uvN-VvaYw|Jfb&JRJdqvEG5*qjhupM39F^&I=!t_ z?UjVpdLih0As~Ba+gJ#fMn=}V3>+|?SxJSwx^5m~-Eijus2!dsId?Mg=3}T|_c+Z} z%do58M)MbjB{|L z=y&cO&qZ@o@!)e&@;{Uuv!9!zejnkh1tq-oR*<8^x$K)3#MTt1>MLAMbspDfB|(&3 zBrdl2VK$43%gN78A<6G%&F0!f9hm5GjIOH@7Uc%XO7r3OYIr?5RdrDiPA#SsigClz zh#5Aah(UFIl+D|kJO0N0j{ha*$z3>z)Qhjf<#Hi(xjiR5-U#j#lx5=?IgV&!J<`*8 z%>B22so?jgHM7_Ffn2k;h}vi}pRN3gLrd3k{b6Tw!QbvD`r!RkefDvW{mWfL3!%ab z4;R48aoDdKzRZWsUI?_s{u`T!locc1`4_|XI)~+(hO+9R`^nj~si);h?V5hflnnf9 zi#hV6GTvxPX5KJoa~^x;n;bncoy%rsb5O+^-Z0{zxiRXaN9iu<(PX3-eC|31PFRXd5BG?erfo~|1UP2=0Wf6nt{Dei zytc=*X%wcW5c*^_-tm)A4fQC?#5Z~@p+({HP64j*13XjV4o`7&5! zMfu7Ifr6lJbKuk%v!|+7EMWFj*j5_n^RG>?on(xet^nuxGH6ydvdxj}>AJmc7$7xb zhKKsnL_zVEMbtEGAQJb1h;%DF1W;#Nyb%uJ5`wjcV>kz-WK-DSD1V?^@iQ-Ddf%Ry z4c)_y$_CAAlW|xr)vu?KerO#jdpA(~UMiZ;>K6DF!V$cCjZWdvN$EWKSp}(njXg&u zZ}%?~vRo-eieG2$s1#mXSktMobNrOdt|!{IF~jxF;q)hNi|XPb|D5}pn>4_x6YLf2+Ky<7Mjb2uIU_f#zlPj{@avo-NIp~oI^p;c1j}8 zaeeHx-|i&$oIKM<@|uMlcUKcHHxA;<$sSNP`=9j{$4pD*iv0w~mapcexWpF-aLFZ; zx%uWV359HQ-Aid{6K}q`9?;tvf^k#vwV8@G_E2I^)FYe5_bkyo_~cfxo<|an&JDFf^}rxAUQFTd`EFaWrDB2a&UIf-g76OH{NrSi9=ui`}Z?E z)1qnq7gYcIX+jGY?-H3XfR)H5$#kbv5wGF=MZe?O&98Cu9gPPLCshAH7}X&3`}LV_VrV2=S)r_W%W{i{?S(6YEI_0VKJ1l`PmgO zbJWCiE}NM_^0qA~!*G(#JVDlc@GKt=53^~)37GTWW1z0nj6!R3OuqegA>V$x5cm%O zX{l+9nlz512M=S;)Tzjv9CF9!k{KL{-!}&1+h+9OIOOOYY%_!vUym|Zfw2N*ECrlv zo01O>_3Z>CaKwQp9oM)0{`F7o4OO8WP*uRCgSK+V`1SnznXw%Bm%||k`m@WzJb(@$y|Fz7Q+X5dhEIPj8Iqt7E*=5 zGYs235Tjx~zD;FBA_8;M3VcnQ+sB7GbF4(mj~y-_u#eI4q zQ`H8heL6x-|gj z&4WAdgv`wCw;(_C5L8#gZ+-)3p4ly+bJKS)F$)gLf|XIYcd4@#@{{1o2{3yel-5Bo z2$znAo0m92M%@FYA$W6>(@$HQQc9aA*POugjD=h_@z1O&AI5JN-+*c9=(>q%>R`f< zg3Vkv;0_M|{6(6cwJ9lgf*YB+^(3Dxm^bS*?yR^R7y`iW&zsvZ#w5Uw#Mrj{6Y9Tp zUY#%^n}g5Z6Y1;xoODMh+(ITiC@6S#vWwBl?a72iK+^PfJvDzVb99x~gPUiBa3<65 zcYgjrf%YExXq9Vu#WYDx@$tc@>%iwmy0rx0>t^Yya`xME=uW6@G;Z?I!V1c&BCOrq z^!+4B?dmxeU^hvk%XF+dL42czO2l5I-#NuroyPxqTYLOD{btj-GSVn|;C5mgHnH`V zzf$+bcQhYyI?J<1@`u1|HtDIjv3qr&fHKT>i?2+L5e22xH~X12Y%^c3DVP=+Y;qGZC7QIUi3>if(+F9DrXJ-SI<~zK8a1EZLwLjIxU)uJ zHEknWzKGz6L&(_cDl~samj}lo4ThlK&8Leu@U!1O&TmfLn~RR0jjl;-+ioR0>ggGO ztdIBCzKNe#9y=0WWf@n0Si|d$NxV>$hGkk@{?CORK0cN6=8Pn5NeM5muS9xW6lJF| zXY5SAUF;(_J%%^gqO_!%@|yTg!5h)?h_*sV!Sn(jW3oNGyDr4XB_TqF!sl{=Q)+kQ zSG!--E(x}YS8em}NU8R4p~Y z%5rYX+YPy|0Y`3u(^tdhVLBo|3o8`HsHnzWnA@%1EIhA%C-c^bY1B8n@Ovx*0i$<% z>F+Jjhv-=K2!&yI3ApQd;n^gFCYUibLM-OR?+IhuqLU#f2J!yw{UU!ePCdRGIU%sk zFbIj%5@d^AP0T}gw3iWpUrMG{*ORhf34@P18t?eAL>4cl@v8-R3kH&M;C|f_n6xJ3 zTOd3NE#D^cjF-SU5n^jxm?awSSq6w&qJ|xWri5UG_r4f~iu*WW?)y|XrD6gn%zmGzKRtk}o4LZCU=#KzimHf|~8tOMU;T}2L`6^}xCV%Qz* z)eHah#t!DFVClMwmM>!Cwg#@c?>&5Oy;u9}l({2F-nNCGJ+q!S!(QeUIV94@+&Yh= zC**P2l%X6WH}bJ*A(cY&yI48>=jh*7&=8AIeDH95@gy2dCuyMfu>{izyy_a02L|}} zyhkvIGco@-id{NpG=`8}m!b&)nSK{B)21nA5o>cRYO+Veqf2VSM(^r>#Lic+|Co|% zhkE)Jb7`S*opHwv2;t0A396}m@^kE1xb8YgPj@~`r;s^rsn|a!B!(u% z`BzD*dSYX;D39v+Oy>ckF41G1shXNQ@qq*?5mrcBUp8vJ&<--yvq;} z0wPhTW1m-a&-w9mi;ZA)=o<)+o58jqvwSm^II*A!gh@^iysNl@(7W)zY~>`ZYZ9}( zn$k;eBf6>tEiKu}N=n47svmk5ci{kXuR9NA+pXl8owbyc`xrC)$6xyQAUAx25(-So zn{U=r7m9*Wj%rX&30O?y!;c%BtsDIW+fESlnS$jj!ff3b1>;jxgWWFnsFXzLVK!8p z#U6zwGsZN~9Mh1kMEnMt9YYh6xNsq*tBuXN^Uhe9*bqxLHDKF{fJY}U%}ZH*lvSmT z_}m(PkIt+S8Mt)W<3y@et@wk)iH;B>HiA{zy^ZBf@)gHk4@ZR2tIaJiFq4_K4}LQxLee*|(?GMYDq z!&WEr=-bO6=AT^v?InAMvGNj|vLm&1}z z)42D$dh$=M=JK;@$jSVMDG@(Yf<^o$eH-93e_ zVU<kW|QHW9=0_)Nnm-& zF4k7Z$PVhHcsrJ5El92P^PhLQro)v9+qMCaKOi6Lth2kG!d61z&iA6vt8v!PhEgBf z3<}b`MLhb#dLq&8V_)e<9nAl={%ilfaYC1-r2rPKaT2R1k4S3G`RJ^@d}r6Tsyh@z zRc=MCF2z0cL^y6PqO^{rwVRQVSocMQBaiCxWgBP;Ip-oN;Oarz>f(OIce?hE+hALQ zR>BA8SJg2x^PrRU@|U^S;F7KcdGOAfP-qf!ODO_@EZE_~dC?yBv2C0CxUm(J+tKE; z+t_ppg=H(0ZKHk+enyMmZ&{#eq+W9&!BdZ+=JH!8-S-Gm&ODpUNoRtB>Pvo4<9{9{ z>G+>9;G<{I3-a21wzJkkEd2Rmm^mIUKH1>peX2Mj)uGP~DwEefg8QF^ua-ijyStl| z!aHUJT2heEH;YJ;8naA+_Vp@~^dz#*KLg*Kp5=^nM<`tT{#UHK_OC=XY`>T&R#ruH za~WFDPv&8ByZrpy_jg>tZ(A06YAUYRUngs{L+CR~(=d)Wf=doO5ZTFm9(eZIohu*b zHWz%S)FM(Wj1`W*qYa4TJEfN9`?A3h+p8@)X!|v-?yz%-MbzUV7;9wx-m^f#&`-Xk z*^`Vn7Q?1%!rqMRR2oam!B(UWatOd0HfC+&gUnz1A#1iRWN=z8Z?E}+g=OdR^J!;s=CpHgxpzN4 zBoa7}WoY<37S|6gW77J~+;UF?pDa}ze#CgrIpah=`LuvL?|PU)MK#=Uc?$b9Bvbwe z4^YwGH%|y=E9lO~V#C$0b#8qBo3JGx={?9e=FPLn;HS?L{9-AVvFv3x|wKCs$Tes8x_H z>ya|d0IC=utC{Rt!ZLFRU6nLF92ne*C{p-5E{;B668r5x5r9`dSi-#b7ZZsY-C{|; z-(241>rvq91$VM3Qp=+=e#Rc2+^!=I-4Y5br$D2olKJm`0Kj22l?YdM3#ESdCqW9n zSYJp}eKS@pgz%)Ws4{Om3+C>ISUSUJQcP;Lx+z_x$Qu|XJ*Y8piX_@)Lp7 z+5;ZrM-?CtY}#5&ZdNM!x=H=ppJGb2TVe0#AKbTVJIc0L_}xMTFlEXfNZGXvI%qHF z=b>K??PCS+Tx6a6@L&73+kr0taPUL-^liTdFZAebBS(xRzo3BS%a(EQK?m{C#~)K! zQPC%IK9&$2J-KJ{hiY{ZK`5F@byEb>a^Xpp7)IIdn}fpxxC*^2DNZGB=}h0ViulGT z|Fccd8qd(AKnejup$QvPxv(rR>FyeSmi{_F&-s|q1zy}^PA5419Q2|+0a#Po%vXz7 zw01e-Gq9V$s(0$g%~~+FL97Itzl7uiAophHz2!GT=u6PEA^&P{<$<2=)R}9kAd`Se z{W}G3htqeM5`keG7`B0wI=0osK0_TG;p27pAhiItZQ_zH$A{YKl+C4zFgD>9MetO`|>ofPh>>k_RHDMzj~-s}!I^c7sk$)8VxOkQ>pQWMy= zYQ+RB+wl+cviuyf*DwYbrcqfFa^5QiW}Bk$xqnucPe#~~qJ9ZPO!C$)EE+qWLa z^x_5xiEY`0?Ii4i;ke8tG+SPhYr0=4`alcbMfPJt;eFwhXD0A|!q(skTk3 zY_s+I2WxJ^%4R=zkQ&?EDYxRaSVK>o1Hw()Sn}S#`Sh*#nQ_FK?03wWJxgzNd8ukh z;g8SH;ED@Y^1$=sIQ>rt6Z9L@RRusO8il})#!%95Vm>{b++naB-eegp1o}^ z%a52&*f8-+iPd^DNB2EG(C*Ah8X{gw>ylAGL&S>^I(AbSS4t9BoU=EVL^lz;<|azZ zYH(*~VAMAd^aV+|{u2IsSQiM^od-Q<6)=+T~DP`ZMea06Q!DtLbR2TaTx z{)4LEkFFfswJf%ygpDXDh2P~vXk8N!4^E`&^jlp)KjqV-NrcCZd(=RD=_$-!RGd7l zdEE))W3@9rjMYB-NnpTZYSh`qRm<+P5gI8o{zk*sj{kV+{_WS^PAC+)ix}g5E1jR` z?vqJs*>cW!W-V{jdze4B8I)q*KRm`Ud*pHHltQw#%_!68)h(DuPszZS&@pc{CG%23 z#~h!~F_*U0F`A2G2fKK6Bdm>B;1w*dh&gu0j(o3{g;iArLSRLmLiFa>-`susq79y$ z7VvQ03DW>UTF}YKQi)6E9ME4nxhy}R^N@GlueyFi^)rp(HnJjY@F!n36Eq*S!i10{^?*3}mq*Z&71E>7GZlmHY9@AK3ege`;Z-}- zsVIo8N2|OEGrkR#_eZ9W`5Es$Fq{{^@N>goYuU7ZGj4a!F0pOs;hG95`O8H&^33}$ z6Kie+x0g|aM)2#O{gQj0f0z{;iji(l9}^vR-kN635XWyZ7;FV_$1*X7PUGK3CQ1qX zs)=6?`hbbPTGp+Z!0kgnB;QxhQ)?!2K+$6Sy20<)9?W^EFR`XJgIA5?i1oszJGf#E zuiG)Ap#WLY0?t07lDe|NWV>^Deq{-TY6w!fv35vCRR}CwBdAA++3@7M@XjKWtB%*X z_;3#a|E~MdHV}{+v#Og(T2M^>QAgt*-+Kc5j&ObhJ4-@l8@WSE`$WBTp#T&%$ z_AorFh|TpCOc*eXEwvSVy>U5_#6@>I_L!aG=AnzmaM{DfTz~I!28~SRi7Uo(&V4J` zR;q)W4v2&Y?Mx)x!PM(gVTN>0-m98ZXI5h=HzH=T?fx?A->5-&BwEmgiksNc1c`7; z3jS%+2=2W%!M*mvGj@z)SGOe;PN<`Z3!d_pQL25(9dqU~b-*rMym4|O{^f1jNoFRy zBDgijws&hL8J=cb((2KL3^i?5%&w|IMPtaUOzetEWL_>ZISFgshF#tP34fUhf{4r_Z6U`lDtc|pdyJo-3+)i zLD+Kd)!@>=h{I)xwAK5r0ar^7K$|aq`lgxP9GfWdcr8NcxLhen*>%p}=*QX&IBpYN z@e*|#KOpn;U*H`vjLNI8!LF%8Bn7c8yVpCa<9wg)ZaDAa^+dkU*MCmw=v3gxW;ud+ z`T#~9G=ux^y@SfdizvD0UaCHQ8=WK|mY7!8P9Db5Q!?MQT}%W(C~E;yR(5Xy`I+v^a7 z?oZqr+0CeJ#YYP^Vc5#K++Nq%vb7%RRuK1rw7B`)cliA&^N}uyH)yy$7DIAsNeV`3 z2zwBk+6j}8QnJrJ`*88a7xU0V|KP!ApJw^`D0g0##U2-W39qzic*h|Y?u}4y(I|em zBBMqSi`mXr)OBi_s>u#yaN)F{v9xkMl}%L$mv{GkY+c8D(y_P?*c-dF3~f*m-eZp- z^5|1Uo_e8MGTq3!bqS1BBXz(1@Q)gWD>IYWmMz%vIA&8*pX?9c;Rlm^?G?lqEg|ye zdkBvQnVp5TW$ShztB07KG7P*qnN%%XNzx@Z^WKAhSE98jbObjIX5 zw!`K+gW~cSZoP91v_Hq|_9ub#(pXoAX}NH_JSfX#Ls^{Fn;P-BB)y~+hoBvCwaUm(`kKpmA^!So98>lheq-su1cfI8zLyz}}j`;D9CU%XT3Xq!9lbs;9 z?>gUYN$+eM!vLIGrkb#a1G6TQ=1C(SaV11#dp}Mog)Q8q4?POu$)vjYaT=Re60}SB z?7f%y?+3|*8YCb{N`0DB_p4*i!6h_@OzVg@ki(5^(ls5^Rz0Soky2vgVB5}z zq?6~J_)oRQ5SC*aeOQZRW`CZUMgsq5Np?LcqagMaSu94ueH zlBVWn#*G`zhIO?({nRpCE;mX_j98SPpE91oL(*8jZUafdO2&;H+u=ERcZtQHn_+;8a+=KxzntX@zM;3*nCMsk z^BYQ|5@kz-yMZ&7c>#g4YI*s!GG6;8jr^cM2?@61>fs;a%{+yzg9fno;3LT2x`90g z&gbf7`*nW+g~C>Dwrm=RYefe6gKM#hzoaoRgtCH>R zU$&I}2MxhBbtYC#6++WdQleK?v95FtGJ7aqmzSvO_%7xae87j`w}D*F7%_*2U@GAZ zo7YU8C0~hFo-$pB&88wU-9!zQq%_y_+clrzMi4=@Til+m8wi9hiPnc%UFl-Ph*Zd# zO7WIz;&mI5K_7MxSis#v5Lb%tVzJg3q6Egd-MD)qCHsjp(%sqOi^S~}5kbbZ5URpU z{R>%SpIk-g!!%?Mj*1WtAol*UI_^7rICDm&AOsA~a*`oh0{ud4kE;f~I#LL1<bf{HRI!$-;zt3ywb#x^DGAsN z8{M1FG!&Zi9zpBxO6+11pAgj4Mp(46inJ6DnmmO2KGeBnzegFCR|~sADl9d@;*uE4 z*4Z?KosM4nq!~*}WG|@hTW&Z>iz%iw*~B%6Ot_^7w+(Skut$?kT1-*rb_gQAFUU=* zZU(O_sfRX&lOHl~-}Z zSq4c0N;cQ9aB(AN{O$lIkJ`$;)7Eo*ZZ*Fu9>S8kWN;asbMi^q|2Lr^K!veL2PM$M zpP&bi#g-YU#V?|bnuR+0Tl zH=bJnF_qXJAq%ekHX+&+3=4u`!@3#}p7!{Ytt2jwi2%;}=qYAqe#@xjwJfh4jTzDL zq!?U0;t?(=y&vBn%PC!wilJNtd|`4AYG&1O)40^SmUkBK3r5?cAi4lKw03s0M50S= zJL^JkL1W?6u@CUW)01^3rS4279R8?*nme~*$83a4bZ(=#-Oic_0XaF2Gu7f$<>a(D zc2HlRxb3k2+cp3EhArLrXafQQx5tIw>mnR8K$F|oS(Aig27aFl-Q#LgEbD-&pDwN8 zlO;7R0>SaoWk23zs)1*KvjDNJz551qQfi2a^e71Quxw(xLW?EFl({Q_tZVQ>K zcNny7D~dN%@$8$+*ic%RAnn+7Ju##xz|1`|c2;FQeaeLvh>#Ri zjQ4qw!e&ZV6f5e%BLyGTYW!`J3!kP4cHv?v%RpIi8WulCtb8enE+Z+D#+CcdC8i8s_}oo$ zz-0Es0-7Un{@bCIq=>Iwk8Aiaf^NxiW0IJh=jFBHMwXOEaZ492P3xKd-f=I97QaEX zao|OJBEz1vjO#iPNCGNLP<(|qUPnnZ^gz~c z+(H10;9j%Pl9Ia~_uV&lX^s{(!I`TC3o~tAne5?^DI;+iZnTu1k?^agHV8Hlv!VDq zFW-IcCch}ctb+}L{sa!zi(EIMcbp`P2C;Yw4H-VHJ*JbH9;3(5=g-o;2 zaxABy#}tTwLU>hb6O`kf?T3Yl{V;nM z_k-zg|3=G_czn>51l7?1CFOZ!r#7H~4dr=MMFTV?Deytel4x4@vO*~Vy2*E&2C}I( z9fHjWp;{B2gtSq?WI=b><*ss(1V4 zD7}g$By7@fj9g6i9-dA#7UT1%i+Id{9u#1?q-0!PfU0JL73J;8B#Y9#WCdM(v7wQ8 z7v$=H|72@BxnL<+yrqc)68{dxEMEAoibWe6cPA{`XYI}5-}GsJJC&{qiI57rIfRlD zEh*@%Z#3FYf?A=7bGv#<5*Q}RHaf)7bfKs;lA&__PSY!_P6SO{q^>J`QCfb*x3GcrMgYR zXnA#Tz~Hx|Ys93KsJeGqI^JcDle(bDMO+v31deFD@OL{*4B%1_7bwfdT(uha(N0Ik zw~J`J;zq~rb}NVUs}p!L|JUIzZ9z-H$KNI0oxCZO;v_t#T+jIxd3{4iS{n*s$%l zJa)n$0&SNhT2FDsa>8buDFY^huj{$JF|i>|x#w$QhQ-jFAdCKT08f9uncJRUiO?jE zT(Ac>oiL_XkN@9G6S&61U$Z4FQAmWVfisqR9eC4huP=lYU?>W*Y%)F7WRKU;d>Shj zM6qHaNa~pZAozdmy>*;i_4WV%d|w&enRUxb+#L%LAh;Em;)Q-Fw0KJeN{tUtqtKR8 ztb&#TZEz0`K|eD%3)(T6lBIF0k;mtMkMiv|+Bxq=jZ05aiG_Bci7kv#G{)#T zTv{@YK>0M*%QJYV)5(jKU$Bbz`U6m~!XdK0{eAS(F_>*F81=Pa8jO1S4G@CPzuiah zg?}L2{Sz#YWGuIDUkH+>>>=;LelDFP!-2i=B-GWCG;RDuudPNU2@IZ~R$>MEz2AJN zn+uM~rnY%G0zpasY!<&7qd6Syx45R3|2Ou>$jZ?A)y3OtB2+d+dG=j9c{*tnF}ldj zgi_C5Lsi0(xYjixjyM3Vr~p(I-Q~de@N*QAh7)(xPX{;~l5N{N*uJd;fbpZUm@qzT z5K@XeMik#Ez329R(D!d<@}Kew!xoS#ybgQ&6ddUE}4j+s?LARJGtaml+c?Wc{b zrkFWQ3$3)6!i5i!wdC70UHL=!AZE{$&q>)A@8X;{C*@q5pelotSdaARDw43|uAjp& zj9{3Cr(Pwxvj(vTKoZ?qL&H9GfD~92wjrpMB@np=YFPqfvkT$ue|`eEdmS_(B}tdc z=9?~J?4SQh^U?Fck~o%aVaE*@Gx@$}&|{`ekloLvSN!G=Om3(^NXgRTaR^{qyPn%P&zr@v5bGjPCzHgHnWs^ zE1R#oK44{VGKgfqr*5DOk7Ey?%5Q&o4rN8QZ*|xK;|WIMy!OGG!4afB>|&ebUSMMJ z$Bi$szIF={GtS#vKHM_yWoVOrES zhj{a|9mHZ1gde}s%$d2bae4VN4w_bk@8H`}W?hKsEn`!4l#ds#<*m^7_6a>6o6@Afl~19&h|WX@K8K$pyf!h#KecZVOa#buWYHLHpefdj+AF90%kDLC z%?#owjbk+Hcn|BqYSf@<`1gUd6bdpTB#llwtjWA}$@Ksn^rv5wt!$>iok>;5W5?ps zaw#MTg*8SCCl!t-u)^TaU$k@akvd7k;`g7m5{U|=e>BTihI$hl?lvZk$rS(&O=aoY zTG~3JXsSXW6lZ){4*A(0T&V`3<4Uv1@HlWfG?uKYp}8%BstQ7p1mnxIkrJvt>U+;S zg-Na!r#|Viae6h$)j4(p(WS|phNTo%zQYn_ z2a~l~G^K>5*n@6b_hpck;oYZPonC&LCH9Z7+1(D5k}=uETsr$?-q`XP3Crjm7wYG> zZtEw8FZ=2KI15**2YKHY9F$O4Ks*{G(pFC>9K_PRw6!)92)3r>WgeAWhCtG^$ibH% z7#yN6r#a%q3J4rnm{?>4o#^5yP*uBWMH)-uPz0~GcQE$rwRjs`)K?a9$`@P6U9o}x zHR`Ca;&@Qmo7NAerSSIJNyL(N@#zQa#}IFgGVSn*{O08G9Qyhz)IawYmfMY<<-=%d zq3GZPX}RS*ewe+USC%{rXsBNQuJW^(3sea)4H7OOh!7H0O{I(q35Elr9*}CK#G>1+)2`eL2S1?lf^up!DbJ#p`Zny}&teC)~FQESGEl#efE}t6j z_}=VT+p!-mzw2+Gd5T{=vweNz%UP5Af$|i_6xsQg)eW6}5;vqfPM&oOjWNlc^91)h z6}%Q81l!J(w0B0xD#+o$Lo}?gfoY1g#riFK=$I=8(lOHF-jz|?Mpf<4Xy~-_u!Y(O z{oZa3g$1B0`aYNW3b9N2x^$JxkDb;_)a$x}OeB%XWX`0;e^Is5C70&+oFZg9(IUQ-m`Hmj+3n*C8 zFsIHxk-3v*@~z)}AKV^DCMob|amduU_%i%pSzQtKJ?3|0ijr?U@+w?X5Yu(?#*OFe zmc_>PopSTegm6TgX{-zLLSh2ba_gBtrkT31A9sd>X`_OCSTl}Ip;B^13oSC2#BPlX z(yrAf|2QX`t4u!IV$c$@ zxaHvxFMQ$QXLGmkwdS|6R3{0=krrWQFTmWQXa3?opJ$LJWc%Rf#|UQqHj|Di-$c%r zDCFHtWIc@Z7-DJW&^itj`<`;cx6ABM@pN@g^Yg&Ur8Y49r z@g#Y{Lb3)TG)r@;|Nk_8;hbvg2m!HJk_%@Sa_m%-fF^K_8i$B}&brg4^7B_W;`F+@ z$;|torVN%(AYmq1UAvX?oMOtei|B|3 znOZc4a6C$DxD(5=XbE-TayZacji{v0h63#ogFn7pNoz2PlCRSmj`P!}o2hSeaK-^& z^1TH^Clc<8$ruTR;=&leJFf=3I?>e;n*Ur&WPKRLEwG{yWY9qI`*9z15Z(nx;XUdo z+|y^EYFe7JEl?5NO{eyDJbm>2d(5*yQ%q)N+fAYm%-haik9-8fQqz);CwKLSlNMG@ z9f_CTK$|mzZc&svVR=v#`S6xln>n~Gx^>rjxtiYM+8?wE&XTFb=lJ=OL zD4Xr_^};Czd%Y{)$CYW?OJ+#WCB`W5dEuRUi&y?qlXxu`y7C~fBne*{}NUdVaAY&x|D5S3`#UDLSYF+qDg!2B}}9$ zaCj6F?HG=x{jDGz}>w zny#U1`mj0y8BPo84ceqi!6*}{I{}SoBFgg{KcGI`3fjIl?6J@$PsVZFQN&(&701y> zpq7=OjvI~Vrf-v6x)NjKrU7l|b*G%t0~-LSz3;wVIBZkXzF|mGqLvinyZHu;Z9C}v z`CXXJt#*xts-ooOp!hN{n_7_JXxh3%CJY=|enPEnBro|c|9;>uelV(p`+s{kMl8m~ z=bp!J{&XMTz5AzB{PefT3=gWVBl{5wi>)Y?4nMIIvpHLbf2(C6;EaO>9i1`$6jdmn zI}t~~-b+5M6Nj3hHJ*nh6f*U8vK?(4SMV0kR9(@_ZwZA>-g&Q<+IpLSbHj!-&U>+1g6D zL+=bVq~^zg^0*YL!n>mkdTUe4H8JyexoAV|f|7t!jPakeo|h1yz<+psZF(bA3@ts)i&HUA_s#(kZv(&^N8M5t(K44(#>VjZoMo)D~>nvW13*dQ?@Ty{(CwsxbHeX%ppTc6~ur zb&MkpFC#nKBo>Jf4hC@OI+G_)?!Lw@pBFkKl577Gc-US8IMLmT2|mXdJucH%X!0FrRoQFsd`qy-S}Fud$w693+ugw1Oh#b?Y? zCG#fvIP{P)%$Pr&(t~H9PMri!8=!J!6_bz}J6FGh-xc7JtFHw!3HmNzSh!q_#MmD4 zfiO`qkOEFRdnN#{ytD-&+?atN6#=lzKP8qWQe@+TO`BR#Rdv7u)JRhHFm(5IG~8R> z?;f$DDoCimzZ{V^$(hY8`2LK6WL6lp`D2u$3oy6tK<;=GIew7qZyrqJ2s#4^-uSSR zi%*}#j*esb!#ft=Kk-S%6}9e@BRGGyo7X=M;>)%Z99!E>zIK$CWp(_Y8QXHS{uPD> zj)P*1U0@e%RDGn9Smv^cB?jAwBS{3fpN5nYMbj`k0(^Skoy@z%HU^jc_IBpq^iz}+ z=(V>SOeO?ojf&~ihbt#xpGSMlB2SSNs!2=>j8s4)M@aIsRLoF2Eu9j@spHU`GDNJYEM2A^|UT4U%=+Og68zkSiUOZ zJBWSoK3hMC^LRvI!+VP;C@tc^xwDu(XBM+&&0^-vS(KNL-8GHQk(oHvJu-Si0xlu> z&5W(wFuKkzK2YIbAC|N9i*~ZS0dh0^l#R<{-Vr6d^>%<4KN-u6=}j!i>SV>?EBSNf zC~nz0npl4%)QSqKhO4ZU1*eSWka-z=sVIC=Ih46tKgi~d6VZ<+l=WkTOUF^O5YgF) z>MJKc{~TOfm!g0899p=&PtWtg!UKC<)z}LO9 zgllvTo9j0)t|)^oJFQ;iyaRzjeDj;OU-8qQLO4Z$<@Lf{ciFF1R}Tt~DHK>VeE{xV1AjXLe!U95Y=hWtb*P&wGuz+ZSit08N%p1##&n`n|r!qA=qAWOR z8Wq)T7{OgY`9#Ymx7fW&izOkyQzx<2kK#~9B&*C>YLb764U9KE?IO`I1e?VID=c>T zPdezMERt0!X2;$UQm?DcALehkf0{ZB`w#*tCEG5$3EeW$lL@@@52obyA5buF9w)?2 zJi@?Avk>2(VHa|(yZ^*pizi&j&XUy(_o?Hl zk};V7IgZhlgc1@f?xe^8mKY$1LRtt_r}@1*X?*KWyH?%-dWM1-vv3xVA!Gb;L~EDh z$e%o7D=Su1 za`3_9$?!VawxgL~GR)VH7)!!}%9=J*BnQnIj|ewmEc_mcq~wre{y;#X%1QxzP&b8mhcly^r(-@nra^qpStgMwhv%ZR^Xb4SF2G!wXetmPF2Bq&% zyK7^{fzug%*Y|Awp3cNxf0=EHWOw#^4mXvX9FwC{6070RcEPqRHy@UpB(gdOH9GFS z^`Zg&>za-R-g*5^bSuK~r=3OFh35<`<_97a1||m}Cl2qAf{hg*SdNYth!I>}y-4BK_k<5MA58;=bz0Pn_%V1t`3q@K7HSv5h zV__5_sg4y;q;)WF?G{26K1@Rau_tB|>jS$GIP@eZOkdC28>WHmnG!6eO|sk^%HX8w z>v?nibP|TPUzrN(oIboR@C%74A)fkZw*X&O21e4LCX_%|RaDC)=J2rLn_uU|#Vh%+ z@e|e^GZWF717@Pf*-kr_;84M`@H$m8I;&_fa>-N;@>|xTnK6<=@2hO5$4FWh>*~YA zjoxRqsy#+yFhO#VIL@|v9_#hoB+F!aq!E`iIi`9Q6_3`ibdqM|HLJZTp0L=@x0#VENsB#K8-dB!&YN%<>J;Ga+qHFY#CT8uSu0-q;+)K|BX zp;$N^Dtu!>4>+=;!^!xD05~Ml5Z!?fY3yp^CcF51(m4j-A0z?WvUU}D{qvvj?6Z44 zHfwBXd>%XLI`x-! zZi7UqDv{;u@ywZm6^jpOL)`zw+W$H~3klKz;vfkwf!qda3{IM$^5bhXW>2;C#+r?i zyB{)m>tmB-vTGXT9whX#$9`2Eg5^7#xav8Re_l2g(*hwRiYto`n(Jtb1(`i&0Sc*3 z;)C37(y*`$i)2dHnx=%Lg`z9m{qkm>`Lr6t90Id{mz<94pzqQb9ZCAs7s6rdUYV#z z1h!GRc`Stop2SHt1we#v?q zlfBf|ZKmVP?U=d?A=6KUJI;~80^N&8*tko;RM{4HVXFTH``Iv%i8%gCuO_}`8SM|= zjpEHfD=9ErePzdE<(2@CzE;a2)9fV1d;VF$|D0CB#4^u5 zU0W&&@f;_K)mu@XcnOg((c+2pFfg@$a_eX~$Rq%<3^cW^@Nk-~SB zK4OCsNSI0L0xfK6sluf>$Z)tR%PQo}ie>m+UQVBKI1Xj7qS4;-B~!!^!k0m^)=t88 z9&&Jx*9IC7mjrt~=Wf}IxucR~AjG)!tGGAUkCl}kY3PLi06A~QLLfo)yZ7o69v2)w z2QEJYPMHtVr}Jz_7XN6mv6@TsnmOf|4i+4gzwCey-Q(@%eC@X5_pxUJ5`m}LfO^6EYo;TC4BbFz z@UdqCu;=^1+c7Yihcqm3>S%=pL^p3|$Dh7MVQVf)W$0G*?>%FP1ZyT?NAVW%Wsdkfd47vTNaEQcufti_dl{h}}ZS zQb?>+!-?JZFe1hpV;oVbqY8ruqh}M6F8m_GA0l5*5w;CI^y$zwPMklrn@kv>tSFlk z=TBwP;teE>L5OGiTxZ+9tqe8se)D=-j4+v+o5w3YU_tRr=I2epl5!BD|GsQgkeY_4 z6GHXR@~c~HyX3Y9pT*O815(pa28jXnEGpRd@wEZ9G2QDTgd`bOh_~si`9!5;s=@1j z${@eo~SemV{G|OIus0#DiE%dY)NcSI>F9E+Bj-66LT|)wwyOs%~ z>(RA+Ef^G-8^Z{96NesYp&BN^&k{s+51Djeq4J+ZIn=HR>bwF=-}^%&G=r3%*MGHICMgg*pf{eqV{RJ>m@I+(p;$p)Tlg$ZYX||ls#08FlcxOY<`YP!;uw9s zSAdxKc>m}3P)`e$i42xUa|l~HZwGDS`>u(d5jL*6tT(=~FZOv5lDY3Z$3ZeL*g|EeUOuC2bL#8 zQ;Uu0*WSx0dl_(gei7x>}bjhcsF{1ijmbj-% zPj@y3dR(~6-w>(7d^8Q(A}GaqI5Y*JYkMgCJwAQ&>XAJ*s?tke2{e!fdgD6;n+s7- zpG!O#BHX&3yymxI%GVL91`Hn8HB&aqt8cu4o@yxflg=8JJ2Sb>TS(+tH?%^Cz5O2AUjG2yCCPWYAek60U>l4i z2Twl;m+ru_Qu5PO>oUW8^-^2H~=kbwQHlZS%4x+Ibe!rh!M<;%d z7d6^QIBfAzV=2X=mIKN{U_mHkl4-Tk(rU4`I)iDE#YAHXR{76DI<%qVZB7Ll)2M37 zrLd@ua_1%-8M%BK@>Aq+5{tS(P4u+y75Kr$E^a#ANn^XkFP@3>(vl>aUuDV0IH#>C z;@o;acdq*hB~~lRA;27pgpdyF=9Qyfxd0b6$d%Q@vHD08rsoUl8(h{Q+6 z*PY?qx%WPDYUgLuj7W9$S=SGi<zRCMnzlvKMI+1WsqYLi6sE*QcCe8oqp!JbT5=|k{ zEu{3}KJY;NM;}AxF~{JTKE2n3gyRuvgDq5aH1sVX;wB{#KMP7GvEjYttdmRkdfiSc zU(@%ZqJ}UZuXj!HS`xDZwFlbFINy7fvHv@$kZXA3z_?9?oV_&nf7-?q1@GFOINH zp5f9ELSPvJr&~jhN`&8!D-uMg3Q4~Yz0<_!Qn6ebnm%xydRKOUTOAqSL=}BwEgydI z0m~LIq%2bqn|C)tz^0uG+4|)&f=6G>DaW1N+hk1FjI!X3os!?LvUOExj>5U4_YKRC z63TOR&N(oX=_Pg!f1Xd{h2@JN9M9;r^f4Z%riZ@?tZw+jDW-+kJoP+g zloeA^5yl8q;+}pmqu+RuhMRAp;-y6>&aMLF^zLlWe4n;xkcU>k3BYxSoB6Q zm)!uNNs>h>i9(fvvIwtlOY%s>!*K_XMmJZmeC?O~j>b6lu6x;35GT^o zNUXY!cpgk35M1F@Ed0NCq};N|m+O&+VH2*1+-^&# zr5|qt1Qs&94H>a>*M(;$!kdkxbzs1_Tc!!5At@{M)6!uQZ4jJ!{968Y^GoDqM~Szp zXuILEmK3O_%4sH766rphcBf4$d$nIllp-mcxS~`l*!+%SW32Uh^lZxxq6Y-pT7Qy=- zApYLR>BmR}NW(<;xJf3H?7ZT8+F&FZoSct&EI7o==BeV})tBH@;(TMw zUwEzVT%M@78i%qACz#RII$8qt(As1Nhw@BGo&*cQSXyyn?A7!tKvF`?5}cM3 zKQG?$a2)E_{jbwylF6ze{HqcHjG+1ih-1xQr~+VK`@&1dqe6 z*-;djKh8^DhRVbO2k&hT(-1Hy&vD?^1(Ag87j_=0`&9(^bBmaB(zQ%G^jsWnKe+5B zOTW5)Hs3jaBD$)ijgcIj>Kpgo7ysI?YEPzoqNL@cwcW?4f>ZGpG}9jc0@aEE$E9_h zFTz>^27sSbsQvMhEKv7H*{Wyc7_4Jte09G=DkNfX?M z#K|}*ikf5NJ$W~G5_;QBY`tSpyQI0zV(nIwspC{8mML_G>_0G5u2Xiz_90>pfjR^_ z$Xf%cj>BI-;!9z(Ty`}$ksuADdo7icVjO3lLgLl8Y;5w(Q?Xh*uo|0stzn57PHW%F zeGFn-)~>7Qs>RHrCT12jQIHWP!;#?c%jQzqo`qo!OsK1jQ2cLCJ2ERP3q{c|3=>oZ zQ};0UumT(oLB+osKvgl42AP>zSeDVR?P=HS*=zsr&rLqs(9V5VMS1s-cD}V~JX?gH zisl+_U3h=0U|x=h+|ev32n$?NpmzWlFiTxnAvan6o#=W3X^9~v1vfP{aocUTu}z3!&*QAG ztz}kr4kDQ#vUU|#IE-F2ibQo49)C8@oIL6~8q>O0RZ0SygR@t@$kOZ*UYc+mM1poU z`|cxTlJxjEYuj6#z4Ao@4o{y-d9ZaOwQf?{hg1_xDX}+fhi?fnGPO)@OT?EeZPW^js%Kg2RU{H{Xt5L zq9QwKuc09{AX(FJr`8mGzpBp<5hk=QEWqs4$iJ)}+%i4kmCE6M;G{t^mSiP}DmWy~ z8+|@K2R5ECdHUteoOkL3BKm3E^@_pI&-y3D*?X7#B_)i?*O9=6?Y75Nnxop!4MAs0 z`{>f{6s+(mObnZZ90Esbni2|RBqYmy3hhpTu=a0y^kwJd^{?K5vYa?~7TO(ce>NkZ z>QPR6FZQ<~Q^_vn9f4uJ&#M0B*R+Uj-9g~}#l&}1?lTF$CN!dEly)<~*YX!|&7{i_ zZa;am5A3Et%bR@=A}fL4~s=$ttM3$AdGW5Kjo=Zb?gR168ZTR8~|_Sy90YFTP^0kM3sTgfY9T z#sBV+A{1_Ei_o&IgLZ$AZOI@@mV(Cz3r;$ad54xlWJxLkPY%AZvU6efp(Lix;tgL0 zZ*1I~qK;Pv)I=6uLcW_2HPtvPwv(KA21ZU9jxSy&>rdC9N(+nxxV?74_#Q&@7Z1JF zr_fCpCZ;8M@`cY)6lKJcnTHGtIUSJU;ES;y);Y7-XKsyu^f$YT{h#h2chX^~c?VG0 z)K08pC5Ik+H1489sA}JdQ*$Cj`d#C?m72o=7hGTy)do|cWSdu93 z|1MLyLO9^Q)$mGXDp$j#JF&Yc#aGY}?Y~GbVz`NzZWP@j7|x))w3a`X+{&q+zCiFf ziyaMiv3Fik2fhmxUO)U|epUBFb}TCg4OEwjDb*fR^4)j7+wV5k5^zpkfCE!@*Ozr) z^1^$YFdRdhRwYFyoaun4=IAWQ+nr2UB0MV5r6F2=U5nXaAe>@wmQ24N4mt=tdk{T% zJTPmP{d**0zi&T{w0vtJusjYvURue;XUyW9iw@@FFL#23qfVJYZkC&WezFa`yGZqZ zAL;urWPYmCw8_1%ysZ7oT{A4Yvk1-bUSJ`+bBG!c->4zYy*Jh`e&qaN{*wPYqWi%) ze$4P*aD^Q}vlIo*H1HcSTK)NC{o)pK{^ufMZU??d3>48#hBK5Ui(LIbyRDr9Ry&&d zG)d_skt$x-M4YG@1?Bkx2tD^i-FEqHNptwTwqV#G*pWoI6e58nUo3A$$#!6w5}_yA zSd+)mKe@!-!-^f{u6nKv$CwJT4ql3T%uX!8iVxnKJ7dDJbod@15pF{opt!Sfmz7g+ z;{W2CetHj|erV^+zAwe+BUx2L!;Rmg(iOr~l(Y+8^|E2!xT)OVZJX-Y4hT&pGt14! z&Gne3#N~G2cI&KISBqgu{24B!CRnq!idZs1ec4&K94fUHF(QdN3i3Q8qsg9gWLYR4 z4`x#n;g3Hi`x}=aG!4@>B=R0gxsim$tLz}G!f$K#ngKK*$} z5emPs>XQL69C^Ip^c?|o@2R{w+T^*WjnK4d@O2wteT4u=B0)j8oenEWGMOML6y$$E zaj?L4BcoMgXsOvr4f#w6mLggvll0W#a!1o^s*@VW|Lzxk*bElon44p!uHo3&MqXU| zB~CrUX@MZWSadNTY?y)973(MY=K8O2b}TGom)&U@acpBIJ+xYpQ0LcpdTti)PO(U= zcovphJvYV>gSHZZ)CJL3TsS8s@EjOH-Dwej(LtoyO+!f$+e*i?Y4l{am5!%Aub7ZK zqg&7DMiO5nVq+dcjQDwSwVvU-v0 z*rT)GecXLZeO4fd-tX&UTzU3^dz@Xtnr)3NU0;iolKgBhCmcE+w?j+o`~ThMw!>lB zO#w_P5pCdAD_x5f9jz1^pL z)Ui;czi_+o~ zR7G@*QIe!4(jsIXF?}ifSEPQgAloO{w8O?lvwZ@;SEPmA)t+}=zY;&onL(k{@r|~N z#Y<~q#Oo@lTln0df_VEWSKAFAqA`kod^JV4U5yor^d?eDHF>K2{@p}ZZA5Xqke0>& znb9Rs5+K)sm?z;dnCKDw{9KiJQx&Y3{hlL^P;lrfTPrL!ZMSy&b2+G=Eu^hsloU`D zhy*!1dj`6y6OKgic|2(qkDofHh=eIA&T^p$!Q@dsjyuBO??Ju6|}HD6e7N}lSyuYmKf7NSw$a^Z&pSQ+c&mQA#-UDs+h4T{)}v(bsq$? z1eb&NmsT@pQX})+o&0326CA#@<01mc7Hanq>cZ?5dh~nRt6^gEeRxq>-I3rWZwDn; zMtI~3L1CT=Q59FlIB?9Mg2^lnW%G7zgil(ksqAiD91JqL`MMBGT=7{Eue!eNA_?PlzW z?w``Ka7>$qCt?%sIHpZQMx&r8z0a`_$mFj3b=?0*@AE4qW+aL2~*{q7wEpMRc=v(KXV?WX`}x&G%=A9^CbbI&37kH0`GE$;cZdtzjJ5DDYg zd8;Ff$F~;nS;$8um9V@x=;!c^AeR?3ampzjoIHPEVquYz*FmRXX^DeZC%ai*>Li|A z3Gb~KK5{?t-z7SQE-|YdSZyl$oCt}fwjR=FN3dE|%qjkc} zehlzM#iuld8oA=It9X6wD`Yy|L|rD?NrSJw7UGn}2A+r@s5TBsLUx&#WRde9KzT2l{9p%Qz4;CzY8RXR2Ptra2!Tp>Tqp z!KD$E#9jAMv5#jXo%kjx+(;TQwh&5ZIfw=wC<02#oQ&NN<+H7_2X2&<8gZ%jF@FLu z*=m-dk>C)0Gi6E(>x{89nRy5i-{(a5;qw*k+x@s{1DgZ2xD=hvM2Mv3VoiGm^Yf7A#nh7GZZuWO#{4YP;;SU~)v(EKpTFBG=71bNrx3q(e%C$RUfILDhBJ z%i9P2Oos)Y9oD|CAed{gLqO7t?B&R zyHABgYC4TA0*BSa1;wkl@z6F7Kk8t@Wk2SN@I>DEsF4ppdza-K>j-zoZS2yip=3C_ z!p}WwA*|4@J*oiNr$GL!;nw1>-L4#$p|cljn9k%bz#=iKrRHsSHvOF2Lx}vBE04HZpjw zA_P`4$;84kp1$ZBoSKG~!qxtE-c`g6gA@Py8&=isMA02-HA1j$ffzf@NxW4Z;qOOv z^3ak1t2b;VW+}|cIe?!X0ncys^J%k0Xa-gq3?f48(s6@r**)Jo*wy1wp*HE^JGoo< zAXLOB;Q~Gh7XVPCMLELT#IYF-{H<*Q?G6X+g?gXDZ7B6YLWNM+;HRw@a&h4j4ruoC z%a$3$BMF42>=$ygM}G3=@ZvTn@4xf5zwAk`H;2O95UuUmWclV$GJY&RUmnqPbbNGo zl+@l8k>qZX?3BH#h@t5NN1c=W!V-*w&t>fF$!vY{A#&?GP@NX4DNz+^_oLs7DHB4V zXcmc%D5Iv8@#}MEaLUq;X})tIK`GGlb4a$fkvD!Ki639gt&^H~bkze8H&DG5H4l?hjA`+Z)fv*$%+-QUgU6jcq*K%571S9xAD}#FB?sjBr4ZJ%5P3o zuEl7o*n2`@30qsLX$-ZJ?e?Q7DpT{v5H}JyHJz_&RJ0CE?qV7)3bRf^N87ve9p+@I~FEaFGvyJ*n01*?av=GN4tt6xv+PVU~ip1?y zD9Eu1i`-7t-miOUrzxhuFuN)3yDwt^7!rhL6Oj#3&<{n&kTN?hLvY+^d!N2nnMBd# zfT`U=Lc7c2H%D|*=QH=NekE07b^L7$`xV~`kTflF{BB-<{C5<293)L?ljQB*wQ_fb zKc-}Vql4YQZRH@EDpwO6??6>^@K$Azln3nAyl(K#;`jTB$KxzrYLhHxXJt`bSjY>T zH?ziw@jG8Jvwbd_H>+&E!iRre5@)H2v(!Ry%icNpmIYcKO4e~C8|tb5$^Eqa^--)? z9A~Z{DeZ>h2xVC3#4rrTjvCFxlCiAYx)z5o6Vo(l3kQ*@eA>Qzi?(~87#UkuRY@8K zUayy6AV6kjCao=7$Ou=HYt}NcTykno6&qWMxxZx+iI_>ia`4yM$!v+_a8~}uyq`FR zkY3PZrw%FZE-V_Wr!gga1C1SviA1uX<8WSBdjQZ=FDfcTgOV>cn%r@TpuPf58$G!p4yMC%FRxAox zeq5u9QB4bVbScK?+wF}m6cEG9X>yBgSSi_Grl-VJH;>Y9&ujgK*;iIfnC zg;5j*ufv6DStKnJx8@)i58JWPzAmLmB$*JGoH_eTzIW71c=S#D^)nwY?=6uqU+RPAaM*xFjl&X#Jnw$`wzwVJIhHSBD! zr#9F^I2!6bN1aJn+Dh$~3V!wU>V3|Yf4gc{FML5$OlD?RQRoiP81=KZy&S_*(RkA#%O;|4)rHtLHDSrvC;>Q3gq@e+YEE+d*SQIPvw6Ti>%u{GGk zN|jRLaJcwlYbBk*0At4-h8a-+K}OLm0@d&E+S;vH6B5MZ(cNsFG$%^h^`}#EL8Rg? zQ*s4P6~g;)WGpFJUKwR{u7lZSHZj!liYUt~qx;mz6amS01tTbMm)k|NM$kdBJ-xjl z0f%PL-d==~(M){oyR=T)$}jvG+?4G?L9#cMHI{&^fZ%~koV_5#Ja0RO zVPIrLc=?NB>H@AFO@D^O(Ii391v^_3{OwoAAb`3+482#ha$X;1Y<{+Q{b=Sip!qi`me8sI1mG; zyQgoaA|U}s9bCn4u3p5gfBqVlH-^xS9`Yg*i4Y5H;TIQXbN*N#yatWyl2~B|FIXDH z%p997nY$uFofV_7*y4T{Hl`~SJ9qB?bw3#%SJt#pR1KNsXUC83;)WkyL;3U1^NmX` z!HC7U|F?Hjd08!gfBKI^ul*Uph9(@@naE^M4jqTIuuR+T6T3?Gu_VOJRGpX#p=1WC zFxe5B$hOdACiylp#lN1XtFA;!fu&@g7j@6>`pb#IC_0CvJG-`L$P{Gh z7C$a*XZn^V?)XC|i>O77``^g9bNPv)P{ZIApN{H*36PVif5U+y8m4XLj>&b9 z?^D^*lwjUiH*H}9m#!cLDg1N)-|t5&n|A4Yk(H_)XhBMe%b}ucT{*l%6KdDj|7riD zwWdi<794%_8Ekm(S8P~U&rvu15vOzv`C6@pV<=XAzr(3(loa@AXbDl>*x7x?+X7L_ z3NtAw@X-;75jV`e#{Ro=|D;3;g)DE7_`!lPgxj)N(@@WW$DB`2d=VX4TQNg+JY36YBd2UK%Gfhm_U;x?nmBe!@sQ>x zS*g+bpdU5YBI9J6w=KHNN$Z1t%qDfv$u>-Q{FOMj{Ev%g7bVzOVR7q~Zsv}byuA|6 zdNl_QECrvoOCS$8><*=(D?YYoF5Nz2Qr3P>_8Fhs#*t&Hm@}$@JZ}U`3Z@pcaMrZV zytZ)?)t!C}>#J#)A%wuPEKJiR5D4IOIMCe=a*aBEnfnCdV}U?0Gs_@1R!%4}kw`d1 zBAFm3CkM;2Y&>GG<2WO0Hzie@ch*X|RF;~O$-Dcbx{iC=Od9K}+1d6q%t3l2(&$990C;B~tQn+{N1HoNA4^C&T;PDk5l>Ks|b zGU`AWw1i9Ww8bfu+q;Y8)5nS=i9~|oPPH^mlib`K3d%}oU-%4i?06jIV{lHGL}cwM z+Wz?jh1Xp~t}Bdb8EGAKAq0l*;-=64$+VN_qfDHJjP6#LYgq`l2W#tAPI&5{7`kg$ z_tZ4jsSg}&mmskuiqFaB4K~?lI%LAT4;{g5rxSso3wEBWJDBBkpr;|E9LmU$)Yi&= z5)%}dG!}mT7r5>MlRIv-ef_6jhX4rzX#(F8iLMH&TjN9%CT@pn&zlh4Ih|s+_3aWE zs?v9%?$V0Tz;eba#3=s`0L_sss0^iDbZd6C6*mn8sm>BY!4%olkVj2Y^5%v(Y^b92 z@r_K^{>}X9#T+tkEaPVtQkWBhoB)b<7wMXe#YV^T}h0{{r)0xTCWNBI^tY8^CMgzCrC(0%r*JT)?;W2 z`_qtPHY2vFq^o>}evCvIq3p!e?juYuRT9x8QeA8I!q|mS+dT~UORfa zANOA5IEj=Ib>~o6HT@` zbav$EX$hLYzVQCA-segE-Jz!9TW~mPRwhkuGWrQAB@ zS}rI*9a;i3J^nb;uecaowgWW%cMi`V`B$E+dX?X9dXVkWYO?iA6p>zW zrc4UV8Wpou8v>#5{%{=S0H=00k3dQkP2;5I9FBS3?p)%O5Yc2WP;U3yP78>|Br+(!LA&`@gB?K{34x`LXL9%8mNym{Gj3T4z1Kc0I zOvY2cp!wPdG25Cj4>^UT1lNj1pgH;sX#Vdty)&c@1TVg~hP7L3x$KO2Oe)Pyo51CV z-?2#wZoB8N!@6EKUTTB!j{H0<)k11|O2-ZFft3t{dAw`=~4`&W(Btj;1Sb-eBfMJI;Xc+SE6 z+PsywR~`cfs7@10DmIz$9%F0U*8XjHLl8)~5!gySkO;E9y@`aD{)8&2;vJ6;kI&XQ zxv)2xaBNMOmS0w5G$#?RG{}T)!x5G(vx%QI4JJ&m$%G>j*tX3kNePAQ_wBC$L0Z1G zL{SyOol%~Db3JpX6?5hZc1yL&>NY<7d^_RJD2iL}o`#85-<`>SIJ5@N5!B>c?hv9G*pea!d%S|HQgxmZa;X4Cld|)|0&bEtBpTB)rr{UEU zSF2D3QWaN@2*oMQ%ODg@;P<jPsaCp^!+LdxB%ONp{v5c#fQpQc|3%{-?&rK$^J1&i1U{XG5_tqaJF5*_4$B znYMNthGCI6tBtzaEb7~GP(2Z>0fG~kUw-+p9*ZZQunQ6f?vyRj{ZmL9cEPm6KZSTa zk(NDd30PU;=Fx+)ST)LR<7LLa<6Ej}qFYHU6oQ*G*cu+sw!#T)K70~8CXAy#r>GZ! zuqVD7fv^x*qIdG%NbLtDtM~gcrEURU1iAVV4VTu55szW0WdvdpG%Ky-H?f;9Ful-&1XkCD(oUSacS0ZNmSu8E^LnO* z8~In^Tq?YI={K?2xOhbEK1Ga7g7P)rKY^>yp2?in9fbb%DDPE8cq&@JD^(`p>RQe` zaay++4+kSW``3?o>D857eBq&7ciEMk)4H9L-ualt*>RqmTEt^d_q0VwDiDL&1s&Wn zV;dKasY56hMpz^7EL-Looq{vU>N&lnk!LGL@!NG1SlyHbLZMfA!oBzQ+?-uZ4)!5| zB}?F0I~kq}FNAsXdcNMh3A@0C8`GO8zr=r4j43k4Z8>q79m?dbITUrAMb{raIs+{7e~YJn>Vk)%z&q$&e6*s*Nl_4xK`P!!Bqkofj$wEP^%&*}3| zjHXtiD>sm+tV0aaaOs*WXAJ9k_}$3%gXsx*HUdk532^8M3I~o>Fe0)$QQQhi=FU(! zbgp6(3J;P)VB5~ii^Ce@tKz0Onu4%iafMt<~z^|q!*4i6$dtWai;_XW@2u zkZBVN%Tz+&9&tr!5^{KX;gt>q8cm81HDx!59=;h^{m_-k5!hZr2(na-#<0Pou|@(5 z+PLw0or4Z80&_f3X0XvamiIfIywlRk($?*?hwH(Nq!QJgD6UK-0~c(gs>o=J&c`3Z zF?j}A*ZhEF#daLiXX85bC}OLY4(bbxR4g|phk~x9zY^Km{dYYVLJ;hXaqIiG-|p9A z6ci3@r$wV(>(>7~sY%JfOTs;h)8%fBo(3AmerWJJtYgLu{;!Npm0<#5gQwrFxA%0| zU{ht7SrdHw4yhUj)|V?$d~Sr9KAxH|`}a3Br=)a@hj_|QEF0rNbDAX5i1CgTz7vT= z_OSm23Cp0=lS}dVd8mqlrf6h1Y#(=WRta9+jTJYD8qt1ByBe>!0wp^;MSw~VLg6mE zL%3WZ1f35(w9Dq)gM1hvkilI=Scx0H-Rra5sz7`DJ(62?;JN$)!ahHinI_4{x85CL zd&IK8i>iVp>G<8lwEgT}v@xZWyz>I?^G}3RjsSc*Z**kwdeMv%+%n>qR9c21n1 zNLCBd3&L)R9e@D;F!aHp|!8M!veBC>3JbG@{ z!1`j;=sq=#f<)IePOaLB?zH0~ry?jXAB)SdoB#B=J?bj^S7{0mSBO5Dhx;2Xh_2XL zrX>1Qp50Mf8#u<}??Evo5T+!ltCT+SGxS_PV{-FpZfipbL0)z?6|Kz_J@PXWM_q!R z45zG|-XGxiIPrPy2H71!J1;EDXY10TJeCrI;axJ!v<$xY{B>M<(3Q+7oyHfnUow5W zkFURzq`cNa$nB&vN1$41%E)kK>R8xszHD?mS0pQW_P32xo2PKXnYk?a^gVV~RAZQe z3@`ln8V^@Z%q0A%hiyw$G>=4c_uV7$d-K23hYe)e=de&9iWP~47abB(8$m>e>-8b!bt8w6MyxMh!&hfEQrSZ$-f5*&enfyU>_ z8L7q{%07_^Cz1w>KHbP!$IqdxC>wz4hISTxx{*XOjojWnaxUzqA_^VxAUgu}9FjGj z_ZwC-%9+W${He4>J86ps$Z`3QsRFOG>;)uAR0@f3YVNOadmO|Pc0O7`zJpWUzh*_` zAR6(YBm13?5i2T?-~=K_v@R%E0V5`ub$Xb1*gMG*4oBXPdtg4ux;;Wp8h8@rcEcWAb-%my=P_nu-?l> zsh_93+c+ZMRVX7<(2;%CgyCJ2m(zS{|JS<&WonN+^M_RYpryX zSrZl#17f`;uWX0_lJLV}J9KY#6^4qQU5=8%zDDA!Bhcv31?#a3&Kz+wDwoyLccRj_8$G7`aQ2b}4m95f!4KFkgsf3V?{AsqQi+dxr=Sgb6NB>4GKo%VQy({k(C5!3M^IUu)+`<9pU zz#2!Y5~}|Vc+KsvS%9J_g5rE1lg8xI+#Y7*wq^{&q9E7H9XHt<;^+6hM^jrEO;so< z^fSIZhlZ9An|HKy5vdIL6_!VH86OJqo!l*4nX`?Wqz8afJ%TPQ9&Vk)@@Ou-s}0k) z&30k5Af-SkCOexHe%ZDl#jYJgX!~dH0!$v=I`SVPdOz_+%{nIJmNKhwJgXYE_9nXN zXGRvn!AL(kCSfn8ZODmYM1g0T51x!REQFCnwslf= z-Whyx-QnEYv4{;{EJrwf2&Zn73HKFeNyuGaR5N*`Z9I?E6vDwFuC8`~BMUsB#>}+* ziNU^?BY!l`@|nas>>_z*`3xNSqxWea%qyG0_}o%f)@>$XCOK`&k?5+%>iVr;nI1pp z-t}olHee{qW2EW|Mk=3vciEb4#+Ylg=>PDHt$aLp=5KHp)?vo%WJEIxMyPK#79rSN z(aH_Kd;=a#0$myeqH{P>yMPHo#Y#07AL!myRpqhA9^)^6 z`3rBqZBsNIde~vyeDlqme(I@gOUAjNvx=X%3%JCSMaX3lSfk;eW)iPfcXdqN{X?uJ zSkY3N|Mo78_ufyux&|#L2hHU|rZ9T35Bsgp9jNPkw$>(Wz2kp=$oW6Jl0;`4XgVa5 zxc%8!LJ&_TdgCl3WZZ~&0#yhs)50mi2#0VuT!gd6F)mcWBv%!4%i8JOs`GCBR2rgw z3bkg+T+LiLYYnEF#V7S=kyJB!XqchI-O)|fR{KaYnv5o$XxKxh;YY)Zp_)C5CR4a` zI4(Kk_AqWYINSn)7DmKk-W(4xE&)1X^&|pIo95GL!dP)rop1p@~5`st9;hrt={yMcLa_BO%HI~b3m8WrV{!%CR32Nqtx}1>5YnUY9+r*s+O3G-L-iRE?;j+GNZ9 zowKBa(`MR4!cKJ)kA30e)%9aAEkV{^5D9mUvE!orX2J$KZ*N6U%w*JE^D*WfK-;K% zRvTfqHmzslt1q&(v4V<@2I@lXgkvE)2U@0x=~Zplzuo0obp*a>hMEY5?463YH{+5I zZ`ecr3jBJM2M&LfQ_EMfyk$JsefB>DlI}DKg|D*r?Zj~-1;-EkSoVG_9D0ptaR+aK z6G@H?Zu*an9eXT{h0whuLT-|6NhZ`TBj!t@DA3xuk;)E_Q(&BeW-jnI4E<`?OzOH2Y|qx z`iSjFxh<{xjhMw`Wxm6~?Qx=83ptFP-2w16-KWg9jlg+i!W;bfNshi0*G)e1T#=u&dmZ-2uf^XJo6SI5R% zzE9KNAII%VsK)w9^D3?K+XY z^p7oR(`ePF=1*}cUp2S+u#EDbZtvITy-pQ;OC6dSo0t0OOy%4R_xOD0=OZ{97HDqj zc7DM9*SyV~ajk6Fl#3$l=4-op2}pJ?^ASz(jpJ8hnDFR(v)NICE?Y%%#cDj4 zUxYetH0JgSjP;wp`i(3Uj4eAbYwB>HdJ?gB-p6ciMW`y$GKsyhh{PwKVK%j->V)@V zZlpv=(2Mff@!JPDPd&{ERh2A!;7;;ye}Km2t8o?PBa_Kq za;7g`C{kEpQtBL2u!!}6*_690DECzGQS))M#Pf+59vn)dmkm3Ey1lYH2R#uILY82@ zKhF1DEo@oX%y|z*Xbng-6--NzG~mFAlK=f)Hnp=a(IQ9$mh8RJXXI6k z$Tp~O^#8pZ8mf5WslRjFamSIl;BcOO?|qilR}$9;fN)dhv=~I54VSa8D7Nid)1F{f ziJL_mLYS81wY5PKCLB7}&4&6I(WJzwiGE?Sk-Fcbzp-dHe0X;fR?$^#uy;6tbN>>b zOF*bDf*m_(srwsBSRuVEa%e_JT7RqW z8KIJp=XawilE$VEG|}_KHa2xol;L+EqyQ-L@C)&-k zAJ|+(IN(5d;@vg2U1M@V1}9C*r#v@{vBhIp`q_(ox$ZqCnaj~eMTzaS-|rmNNFov< z+IA3rO>*4qF_h=}XzYwIIxBtKK*j{9lK7SsS)D5F=Y}x;{9J;|PId6qZBE`@ZE@*_ z9Fm8W!x`CV(n6-0D{k(2dItL&A+T!eNxb|9j#Ezr0g0F2z^bhuv4&Vf!Dn5X!C~b! z-DJW5ijd47Q%#05&Lc|>qBZR4mvgX}FEOn5Cs7oIl9CeQ@i;~zL2G9Ke@6pHP1%Iu z5=bF%1{27RdRjY+(6R7(y_A%cpeRZz*K^lAtBQ?F&x6kNG&+nSrE_ZbIsWuIhPnLhmGw=SC(!9m^GxkkJ zYD2m~A(2857bZ%EtyRNT0-@T1KAl?;NM=lZ1Kl}`>e_>lQHwFtmNIJMcH$fLz0wuK zeQbmf7?#DhZQBr|3Q+S4Ff5Z~a}!2u3&QI`A3X*V3ATo-F)S0I>4PR{3n@uzI$6Os zuK(a~6kq#TA9pXQ|H~~j2HQybd?F{jg%@E{QxYM31=T^a~QRBz|^s@vlb#LRKGuSzc0{LR|T)HY~_e4nVdK)8>OEr z^sZ+=+0;QSY2kG$y+{(CU(qtCg4lJX_Pq{zN`y^9Cv7z)Fj54=DyEV{jm)FQfVWqN zVfAXti80IZ67wf{IC9>u?%9z$?iq2#V_AY1U)W$4P z0>+k|%Of8uv;_998@3|g+~YC`rV^CTJuZX9UWhMCfMUXWpTfy=J^XBEoCAV(#A=04 z13ZX9s*?pgas{$BYnqE`OA$jF}}Qx8<&me{%X5}wB}4;$USV7aZ})+BVhCd zP<1;%J*){v0<0uSk&oe-O(&ONwX|Z4J&L5O5baObk@xo>5G|cb^t%tC8VTg8_YhVW z$wtq6xwdin9@wUWdBjm{t0`eiRWs)uF^QwA*OIKONz0M^Vd`hAf7Xbsn;DJTol)G@ z@HV91?HmcG#+J$^wpC7H?3fDbJ1pwzTJUD9#HHr2daEBHKc^@wmv!6yY_4oXIJLbm zr1bfQ-AT732yK_GX-dEW&+SaT!O@#c7;GY8bU11H2mDz54O5?4O2eWITB7;rN|LfU z%|tIL;mRw@Q3dgqAz2G3t{DmqOYsW2;ud`RCi~Q&-H zKHoALhyH5X1>H~nVt9MZX8(Pc{Okf{UwFHgXv_pN)cI^Zk~H%EeX@&kXfZDz#AWK zK~)5YA6QO%Qv)Au+(3rg#gv1yShcB%%@u8Z)OOhzqGRTaZt2zmJ7UZssqpjFXvalFDPE>!! zpmQR8yQ58DnoW%L$H=nW<$ z&>A&{fRfo`!VkXLLwA}I-dfQ>`714qi?r}T*&HUHwSe(CPSV;1ul{UA*PtdaYM8HR zV>u6;Sw{Qc9^~^*i-%*QSXkjDQr8B;0Jny!?P?~WstRO#iNy^b{nI-<{p=FHdBu_3 zdd>A5zvfHkzPyOXy6kEorYMw`2f1_HCN7y!i)xveaUJPYP(2beVlTFuEit5qh{HwG ztNHrOI-cHE!q0Y0A*Luj_4Ez9CFF<0(AEYeCA$)!{eD=u(Ej~|6KucDc95X9)^6iHfkk3tQY{_#gUZ-(pD#JX-YcrYFP2>nx*gAvX=@57 z$S>>hY}`n%iYX}+5E_Q;=cKEWb&1^6?i6)T?L)wX(8PmFN( zO~ssf_K_sD8NAtA#Cx44AGXx9rhOU7STo2Zs2YmmK&TluiLjKIGEGE7nq*$~9lR%= zPWa822)_7FoU;!`@nq~G>r5NV8opTWNR5F%OQNZQe2@JeQwoe>DuR`}+kpSC7W6-U zNC|T%`T4=cI?ujq>)0P$JciLl?w)zBdkqu_9N{>QaC}G?`|exU4k|9gVLSEHyH$tu z>WfAU-?{$!>-*7rVz*>G*$tHlu{%k5|0CFCD-NnThNkzvQ|s$>jWZ7@;rwyiprMH! z)8}ya$_@hIIR6nf-6{Jy`pzdbU-wgtoi*g#`F)!xSP?0rV5JL4!hQS^lyCZgj=LYG z?PvE8`1^C@KX@1J6OQbOZ`=i$nSu`ke*U<96dwdK3GYE9ya(__#8P;#Gm9@mK92Es z^4;QkEj0~*YSt!A9 z?n4sn?l_J*Y5_Yds+o77 z#;>o+U~YwB;Io4xF<>RV3XVY#*X;|_Axy}q8J@C70#VwD*8W<#joICceyF-=N^U6NmRkpZ*;H?^G}E$1D?s!(p-x z8_$8oDvBb=88e1Y+c)7!R1X@{DUFyTGQZmbN&c&b-2b~!0(l8ZLEQdq>nl17L%!*u z+BI`BZ3+R0(l;rAU>A#u+Rx_*AYq}+$%L1`ny)ToSN@~yNph9u$Wo&mKfRN44-$Ct z59j%YGTwYB%EqlrArt^z1D69O%abAzmUbhML5BB0$iD&nXG8d1*me@cTkX^wX@a7G zV|;3QwNwa1h1QoK^a+&x1;)Gxffu3qeqi~?&g0LY?5#(HqGCn_*$2#}?36Jizp!tj z?9c@(Q5i}k{^;Xu5-77HjIT70+b=qp zORCq2prSLll_g;QS-7m`jrozo)0%%;%`k@3$tQ( zOpmqJY;xwJViFY!W?s=9!{`)Uf zw=^}1>yCr`ce{C+({op;`b=2I~Z1E)tP+>%5qJsJvTu|DH?o@tX5Z>eWmb~7{b z+o*1H;dh%TmW50hYzmj7CX+bL5T>f_H5sNUVExV_*ji#cS&9jo)yvPaB;XJ%+hJm* za;C8qa&r`ZbgqZ%zUIK|oP}f-3g8-4xZ3fl*CxAp>;Ny7S?Y*5;W8ydnu4&Z)@B6Pu>29vn|2Xg1 zKiIZM^u=Ml&!2SLp!>ns*=5*JoL5MZFBiiyb`g3C$aH(D>ujO2tzp2cFZ$LUlw_{u zPapeuVU0~BobB0rBH?bEX-X|M75Tif;83c@Ww0gM%(f+ep}MJtP_W%54i?zJimHL4 zAygejcclDv*&QeDfeCErfG=C2eRzp)TVuXnXEkZ5BvM3A2~(pro=&{X zn(~#vw zedgT{-GmjauZy#2gH0%0lBJ_6A}tKI;G`o5)RN9Zi+Gj24>D&+T=|300l#85y|MDP zkeu`;R`yOr(hUhO4n=}<@8+({^ZoNhN&b9cf}DUrsC}RwVrc5Vt1a;M+R%vXvy6K#pME2OeSaW3N!L@Kv0}g+sLS1WqMR zh8kpb$AN4PP9tWz`LcCBZZ*=Uk0eL%NZeQ$;N*rz?!U90f4*nuIXHAkB<=gS@jS`b zzcrgj)SGx}>j@xCR6T+zmA!I{_GLWsE2V#QTPAV3{z{hd0m7?r!1S%$|MLVw^lzJd z^9Qzk)cxN5X5;IsU} z5;K&r@!OHYpM}6`Zm|jXQ|oDL+KScO^3}(U1Z;23VR>ya$4}U4+c5w_qDViI=j zcil(HPrr+4*vO5lsnp(eA2rV}!jYRbFq!ZW){TDFE#2W1f`gq-RA8H$WO2-fP!4iB znV{*IfMXEh<-c%b)@`7!KfiqvCXEKK3)XIjY#&^H8hp46mTgSM&C+AR#-R%S_I^E` zVT1B~Cy}_tsB8yCSq?Hi8ir{XB5tmW@bSh@99rMt!k{>slzV9j|3wToPu&E=eQbg% zpeg~ctpnEW2I9Q%+6bMpACAa=XiemgkoK{9Z369FA}}XnFJ*f**grSIFgw1xIkpwCkAbpGtiBIyU~~4npsIg6ekTC@3OX-$-+c zAWQMu&zbd2?7aL&n*Z@{#{KeV+;QL!IA`?N`0a)Vd6w1xm0;=Imh~gDaPBdUBXZrR zHs%fU6)OPv_uK16be;_hOZVB%9pFrpi)M${5 zm5WH;dnK}TVvpkLJxAi%=k_?q3L-BbNP#-hD9J_dkXW@k)onOE{S%IjOp#LA^;eC^ z{@vZGQV^J!{OMmCdE~a)c(hjL7EQygoQ|$(G)Fsd`CBo~LLOMS8k>q$>5|X?)lk8})?Vh}%4ty6Xyngt_{HpGU>{wO~ z8mKPQCK4Xx!>%dqzu|?F6io8uBBjleGuad4>XKG0z5k2e*lictYDQJyq3IeIl`14s zJY-lB;ZjI!kI`~R4aurF!mXxHCJc~BKvUCh0>jw#v$4_sx4*{_d^BsAeYTNBN%@b+ zm$|Ct%VE9VBO`pjr(E^Kh+Owub?*uo{>1y1#?GEn%Fx*1h|>`YFn|1dKHpwOA{3{y zsS`AVbfK9)K6k({-|3t7kDcd=uJcm854k?ET8Mo-Fh1mVXE1ZZ4A!k%OqJKi#BtLA z!PXrch(yE8ntljwx3^aZvtBY4iHRVt>KquVMt>po4{jZz^Q;bl8`6z4N~BHjrz(3-D4g<7UoC^3UN|;x zAZwdZ$BjoX$V)32QT>;!9&?>d3!0|kQd$rK@|U;KCY`hoLiD?9bO7+<>Ua88JyJq= ziwmEUj~kV7R)`;{AK4^C{ap3esh=K?XGG4$lTVIJbEsc^zDY0w&9WzTEE04qVz^!I zk=hTF+UiCe9I>PTM}p6GjAQZEi5z#}a<(_;Q_*bO)uZ#9nV8?qe|ODMB|YVsgofsDw}|&TRn9vgpF_$s(z@QYBm6yY ze*fpge8ux@+hNv>0oU!)%kSLv;PM4MUW>QD!#}eB?Kwi4%E67Dyz<6!%A7H_hx|Ck zTBt%2+iB}4*H{w-#CGg@Y)TJ_oeHOAv@$2YoYqDMp}urlGzu@j44-^r7az@-u^Wq= z?5Vq@g!Sv;!3W`}qu{Kwz&*rb?%hQ_=#Ok8cY?-rz5bJZ|~T{c>3?v7c$M~ z`Wo}hHdHBb43MtgB_jIc*A_qm!9i9#&!(O`pnXf<^YBjU-`-AdFu;2`9`dd~k!voU zNrNYkOSgphxVf6@(0WLA+VMqIN7WsG(#v+UGnx$m2Z7ReOEij!^$a zGX*&g3UeIjsUo|%lYB^^Gdy^q%}B)tpI$RKj@V_(3~oDT9k5* zOuM;U_fWf^%ewU%GA=ut)|>C7?!=4mU3fOxcYeS7ow-MnLRC6b|I!~};I-7hJ;#+B z)(bZ5zxl~I{!k|T=6lpU_#Ba~HZbg&IF{0DFCgdmLkIo)li#|&&+}y%1||8U@nt8u zWm_=<_)Sqg!S_~D+gypJX?vHTDFID_AxLg?rThz-7MU=>1>?Wj^IBb%-|BQC6jlnI%6LdvfVkeYtOs?OTkXDPH`^t1tq`qe(9K768y?>!O6uplp2WznKH*}AooV6c<#e#^rT=KJB_Ubeocp*SVFHw_c& zmCHu#&`T-NG>z)&YD!8= z{Z{_wuOo85=fCy81KLlDqF|NV!a%X=c=(gWY02{u%S#-g>;BKG&qw6S+y7_LSF(S1 z*BQ!Jou{zqoIdB^$#>z&-}JeAfXdXr0ep-9T|0bp`!fHvBK+VpunE|{CEF?6LJ<1{&)!@QyDN{U{b}3zV}(>D)_v&Uzflpa{1xjh&Q1SNhElG z+j=x1IDE97f48)HJMV8>Pb87BZPkG^{vVDP1K9_Sz{0(-A-WoZnx;i-M-*vEd|n4- zMVV}`YC~0a#Sc_PpsE6+>%CHv>2pz1=%=c#vxiNQJphidDVWXgn=^4M_Isk1MnWq1 zg-L(eH zsC(@b$n>N7+?Y+RlpeQ$EkFDkxA7^9Km7}0fj}CspUoY#mUiH8Mx9#IO`SFW=?t`aznWy;fKG>$|Zm*$j!;z{h7^!@E z;dGF3`VsgpISt{^QS)<{y>_cht=f9IE~NWk{_#IQIk_MW!FQJU`lD@cj&#Q7*5x4nn= zgKJ*@tNZ$$MMY6KOTf&=Faj8t@Y3+9Of~TpY0brFpMBQ-c=F`QI2;aEtXN_Dy{Q^# z1;GpPPSzMPewR_q%($C2%e2!D_n1!qu_x{N;9wI3*-t}o?Y*}UjD)!CfPgI_#+D{(7~g^zzh{Iv3wG?BWW>? z=IIW>6j~YUZzGJCa3ny?2@r~E2wkVZ(W#;nTWZM@R%CVGT_6$Cfx;j{NX|Yw#=J8P z4w(YPW7uJdmZpdJ%S9`)Qop#n90MMBX)UbSk>K!8>zo>fDfio$wd`}ZVwk-%tM!;INyke#j@YU&j;FQxY4Gd}RlT9+j&X8Tt&C;zbMSk!4-{pe;b+u$Bp=sG7BLiQ-7tsp8fN6)h z?yjZW{_qkYhEd?dvK@x9)E|57v8>$g=YJOJoojbZM0#^LpA+!!0vc_I#P1~fk2{%i z6dZgkNT+>|_a)C9+?Kwc+^x^@_Ca)Jmh^AF;hIH2=BH82f0FTW#)<A&p+_A96wB)p^=wg#oAhnch=`I##a(=YQkx3>h&)&7TYE){NpO9 zU$lhct9S7FU3c<>2kzqa1q-QNU&FEAp2Jg5Jjv`aWo&=&$=>%p^`p~Mx`}6VL_a)K z(Lnnf&75<0Cz~3in_ChtnegPXlK=d10R6Z*oZE028$uHiW*7kjlL==L=bbg!=f-dx zS4VyB@WC6+_Yev}iuPuMtd0)f#4re8{jv68MW)lB-#iOC|v)NV%rm1dM8-Q7c~G@~giy3^xZ z2J)WM{@c7E`ZjiouemBzU?c;O1Iov9_Uv<6wRtH;RiDDJwo~MJ2M~x+2eQsMp0{?a z$UVkXbRYeJx<8o+2^H|ezfcM*20`~Ji>!ySSY)XRTg=jVfu9nSwt5uGz8z)58o zLSl6%umwBoY_lz9^*e~y)%OGp{o0{^&n#spydYv3yu9upJi5)Xlec0!8Zld^y1A6M zH%%mNX#<+fY{e40A`}XdNF*pIEP{p|RL%M#{^<*d#p39ihS%>S94w$K7Nwx*0P1(_ zAQTEwTwJ_&uIy7fbH5kl<8c!?W!(f?qaLukC@m`GKTr8SM~csI-Sta({f+gzDA)bx z@n3M(1!A!Em{ty9cyB-12i%5u)Fcpe4}sfJ9X)90RC-<$0y~kQt+f?rM+3I*4wdkD zu)8|2yP~v|cYq#6({$`~gu-#~6c^HX=K~ZScMOHcxrZ7$|GAjPJ0HMPT$oesX$0U) zuKH<)$!URL?_*O4%p4Aat9P-dO>OYNb5K!|-ZGXFbX~ByDavgNx8gH3Yzbad@QZIw zy6ZuR#WBlDk&c5*BoJN?Mw0kLI(G6k zFQ(s5`1OCW`km7#zxpC(%=058b6Lu~C41eYwL@Z&o$c5Ehg@&!b` zc{zzi3-ENdfyWC)qcPXL2dm$PKvC*;I9UK7cca7=?*C~btz<=BnHQn&o{;eSShu;6 z|G4WTZan``CRTP4u_8ny6c%}CXdJ^$|5MGnO^p!nV>`}>XafFHWff%zZThKiH z$0}Fs40!iQ}$Y+kDl5RRKPb(W$95=d#L5*h&Tt4BYd z;XD27@Q#ZRNGYkToJ4tfC0lB1sIA`$QZlAuJQJ&?VVa(l$b=)BfzP%$zhN2YH+)EG zB0{(3K_JoiWauqNI%q;e7lPI8>-g12_wr)htLQ?b)KiQtozxBsrQ+EP3xZ`FWJ(`6h#eju$ zzgDJlSdcAw81C>5DJbwqiCHEmAF&FMtf-wp&>saUaMV<%ggZ`~Iy{QCk0yLFhkX9p zj>^26H_H%|cOHg2kl~7OsC!Ux-q3~Y*26!~diDSFPw8FT2ctf##a!ZkDh#I6-S!zf` z(nXerOx-}IyDDdHi>dkg#gu&eWPFEA!3l@yeB*sWe|{5bSqQ^ODdyIM zHX`)g;uQ`HUbXoCSq2_+r+mEdvdyBU4ompc`}@ zp?lCh0UUY`hGpRJlBN;=Xa%vAOA!7b`sgyc|F#e`9pUq-{F%at#`!m`9MtsoivoCsPK} z4^DjVYYCumpk^lqIEkIYy31!-S)Kto6UOWx89f5K<1C0z2CW+@Ix%f+pOx&~E9+Ri z*41r>A!u%C-2JdcBobl8^5qx;@YYKtLKB3dVV+z09)Dl&9=UIibb}CslL-$4 zbY0`1NoACk1Sl^JQoXr_4cl7#BuX?5okJ#$J(H#D+!`|gcdZh3OupaHzx zEtDVl`(Ki$@_Ta@355Z42fn<)VfKdfuF~Ji5Go~_46Y@_bUYIyRNcOb!Y_4Tw}T_2 zE`iGs$LYzcFxK2#*tWR=v%D0mqm!T~z^J*G^3*rVxoO>_bTrnZ2a0fz*!wwftM1%5 zh#(E2!-o*wDogd@mU9AO$b-4RGw92{%+oD-_~H$ytU=SEGPd-0CNA3s>} zSgL@xu(u?^?{V|H8{>BJwnQ3BKtoDN zFc_q^wwA80E`$&`$-KHt-Y78;)Yvh;6WYQJ!7+T-S3;*_Vr+yO|0Ft4s-*};~my|ASb3Fn;{+tTa!33oo;WTX!Mse-mg<=>MZU) zfTfzC(g4jAbUQi$L!;g2&>FP}lnY{xq%E2l1{3b!XePE-z(cWYJFT3nlO^3YT!g|h>DO#;ZD4zI-CloRx?u(A zM&6zAR~WI*epY<)He-)^(SRR1q8z{Q5rh!5IT|uB$}J2{XUPwvR+k8blRy@XW{E7K zdEyvA(BLz%F%Y(e+(#pwO%G`(w|2{0_p3FLO}ptxbWKp#*v*gTy~3aWvKleUizbZS zY-+CH`Ds@TV5{BbXbQKkI3e9`uyVi}p}Un33X=9G9X27C zxP-xugjL(4ZjJ|+cEf9kLCJ)(dB5Yo^85%>qOOPHFB^w9P_omXPh+k|8*$Dpb8A;e z8*x%=8wdTfYKq(lY*Ik^n1h%RtiWe_Dfaz{_Kl?oA<)L1!C&8w&?XO{pk(Md6}vqd zcP4+?ZCc91@Z&#uXr3_{E~vmTC01v`t(Vn?c?^Zqeh`-lNrK-4t_qUCw zp|gP6P!ZcgqjDmzJZjV^LZJ|=R;@x40>@uWLqQQyJ&Ntv1ib-*x=al_c#}Z5S*Ai&}|5j^OQHc)^TV8!co{k={Q7x*+pA;G=^p| zVMZh2?~UcQs_VGF`a)tM6V2;@hm?tgd!P*zv$6Zeun?g4ye0?t!*4&t;L^!D2|Gz9 zEJ1h#iP{)VH*X`hHjD`DBbhKjdplfvEff_&M~C}dVZ(edYCr(us-qy1Ct2@M1{e@;TA5hdyg-*Z^9BfVckUA$Kq#kRDLZD zO=z^n+qtj$QGQ?Z1TFD4ip;{KANNT*7P_DGoy3*7H091H%5aXd!~NA}1O^`qy@%Mz zrvxKMkS%!__H||^c=7$CLCD_Yy!9=myx3fZ@WzmX#Fm5QT$X$YV;;Xq3Ct%1n#eB- z>d&;qH4gWAcy^CI=JZ zhQnGosw67!U0=$wHm``Mah>>UuKh7*d_siTk!S%w@eSK(xcLF_nC@PsW1|K9DU%70 z1oV8(rWVQk|FYOtFFE#e?h(s>zHjr$Gd4|IB@}_22-NQ4$n7#j<>5wd{qP<RDNF+G!xZ{vg_QtG9aYg`VpM5q}Rc;eF zUDt6O2Tc(K3|YE|QY|G)iU<76L{bx2NHhe4?#Op!*B?2mty=l1L!ImtaQw&F(d(Q$ zMa`Rng2Go!c?YCD5busi*Xf&cnrPIF&tACcTxZYXp3;eg6tFo}g>N8|aRM zR#r^-wZ&NVO`vH^i+333glgt^q~m?AXzKMh*8X$#O_g6z%0HJSLK769eQMH34X>^- zN{a^;RSAit-(d>&+E?BS&GmbzA~)A`!wolJ7zWo~do8-IWAE`jUE*MfBe}7=ffZJS z8vf0unJsVCWK4mn2#xHX4R*(BTMt znn6iW$D<3P5;|fw6+si*k(32=e5Ot)X44jp6LGSyRvjZiX{?dUKbp^fZ1^3ctxnpL zjTbbs-w-h~G5{E0`at@D?hH45P??w9jeT`(FJbVF9mm*;u}IrOm?j`Ga)fYY*tuqO z6JeNr#@bTVcPNZ-pIqN_b58=ML8mm5`h%TkZ*zD#=t9tCgA{(e1@0M%7RN!8G9?1I ze8ay!UZlhy2)#NdD;7i71aB|d%6ZrQnT<8gm?Z&h$HB=_@|q`J`PSfm;I3(wLBEC~ z6doQGo*j8wKKE8Nwpk6TTxYc)632SKjZU+M!p7~0BMP%z7rbjT@f@vX$v}-EDD7K|y$ZC4N6zAmHZ5gxkodsIrpcQKK+Tv)}dmjhZ9b z-t7Y|PSE4$rzfAy*T>A}_FLER+>5KhW1ts#vF(wWcQf|yOv?0E@Nnt>B(h=+4Y%D3KxD-ljPlV)E4NjXnMXwtyT(1e z4amgM;-OvNMaSF1@-P*70FBAg_tli`a~ZyCLh_ZyLL4?ax5f(W9;fq=ke6LG+!qiARdSJ-&c!8K|vvF=t(N>N*>(vIF${9ueGh`^1An!6m6$V^B`cK$%OL}ukUz= zc`NVWz1C$E83h!ZMT$r`50I@X($ix1km;;fm3zxWc^LNZAqAS(Eppi2=600TJn`M) zP6Y*pAv;cR;DIo8YHD3|3ku-$)7>Jj46ATQf?s!-Q`IS^6eQ$tt4rkLsoI^G!1~bL zZ!ix{se*N6z;O^h51QYLbleShA#fjm0{vGhVf`k_{Ch1b%3LG3qgfJ*yW%Q4fK~mw zEH^E`kLm3j=rjXq`aT2Wmghgpt8x76k7o3_xc>(HOli%muj$=|TIHk_J{h>;I}_yV24~X;f$alh%UhD z4pZ^%Q+WTHFLPPV6V!cBjqWeT5i)1UgcTHa#^Zv-)_U50|19V_G8Rwni3%i=iHR=# ztd0$*7&yNFDLeG%lpgsZpO}r~yqiq7KB0$TYnTZsWeNnwqSt3iA4y+?M;>{kH*e(h z;}hD+&(aXQ5DT%wigJ5!97hgC-qun;qc3vk3v59b~^juJnbLzh9*GZAd|jYE*mS6}I5j0Sh!3vo~kD0e^m_AMC zcQ+QZa_V`^*?1B0L=fH6g(Eeb93hvMkrC$#=M;W&&LJ7SUQQ4Si(NHCSk-8yKy%)OkhDd7yiqfmaKgyRo~l9!yk0LA6&3q*o$XOC=y58GDtPG3 zOYk*R@y!cgV{1(_T9FSVBbH1URE?{`9;lr#DWlR}wRN+SF$D#M{T46n`NClb1$pLy zBRK4!Aa+l&hz8CUhsgW{&K75{#z<-|{cydrMh<`8E9D#f`LfL{ln` zbYA#(B@YS;3JMAe3JN(0nL*}K)x1(cK|w)5VdSH5!Ssyy4xMMLQGUZPAY1kH-#qLZ zd33Z9v8yY&$BYUIwPt}_SUBO8&7R_)u;`MH)Ql($XQ;DFoYLE{Vb{k4!9ZXk@e7T) zfeLQuZcsW)K|w)5K|vv>eDZw55B^e{(R!4}zh0&MGX(_&1qB5K1qFo+L2mAYgG3l$ zSx|Z-6#o*pAFZ+Xzo|MAg%N;hUw>-QnAL5onHp;T@?Etq@(}+IEWwji$%mHr00000 LNkvXXu0mjfG;JOG literal 0 HcmV?d00001 diff --git a/packages/ui/docs/components/select-rich/src/flags@2x.png b/packages/ui/docs/components/select-rich/src/flags@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7cc3ed3fba34e6e23f2dcf5f300898ef4e2fbd0d GIT binary patch literal 174369 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

1coj(6bdsU5HH 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

rwRU|s)cNLjgI$ha?`vHjw_;(_Jf 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%0DxAJw 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 literal 0 HcmV?d00001 diff --git a/packages/ui/docs/components/select-rich/src/intl-select-rich.js b/packages/ui/docs/components/select-rich/src/intl-select-rich.js new file mode 100644 index 000000000..e6bb088cf --- /dev/null +++ b/packages/ui/docs/components/select-rich/src/intl-select-rich.js @@ -0,0 +1,194 @@ +import { html, css, LitElement } from 'lit'; +import { LionSelectRich, LionSelectInvoker } from '@lion/ui/select-rich.js'; +import { LionOption } from '@lion/ui/listbox.js'; +import { flagStyles } from './flagStyles.js'; + +/** + * @typedef {import('@lion/ui/core.js').RenderOptions} RenderOptions + * @typedef {import('@lion/ui/input-tel/types/types.js').RegionAndCountryCode} RegionAndCountryCode + * @typedef {import('@lion/ui/input-tel/types/types.js').TemplateDataForDropdownInputTel} TemplateDataForDropdownInputTel + * @typedef {{countryCode: string; regionCode: string; nameForRegion: string; nameForLocale: string}} RegionMetaList + * @typedef {TemplateDataForDropdownInputTel & {data: {regionMetaList:RegionMetaList}}} TemplateDataForIntlInputTel + */ + +export class IntlOption extends LionOption { + static properties = { regionMeta: { type: Object } }; + + static styles = [ + super.styles, + flagStyles, + css` + :host { + padding: 5px 10px; + outline: none; + } + + :host(:hover), + :host([active]), + :host([checked]) { + background-color: rgba(0, 0, 0, 0.05); + } + `, + ]; + + get _regionCode() { + return this.choiceValue?.toUpperCase(); + } + + render() { + const ctor = /** @type {typeof IntlOption} */ (this.constructor); + return ctor._contentTemplate({ + data: this.regionMeta, + }); + } + + static _contentTemplate({ data: { regionCode, countryCode, nameForLocale, nameForRegion } }) { + return html` +

+
+
+ ${nameForLocale} (${nameForRegion}) + +${countryCode} + `; + } +} +customElements.define('intl-option', IntlOption); + +class IntlSelectInvoker extends LionSelectInvoker { + /** + * @configure LitElement + * @enhance LionSelectInvoker + */ + static styles = [ + super.styles, + flagStyles, + css` + :host { + /** TODO: avoid importants; should actually be configured in overlay */ + width: auto !important; + background-color: transparent; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + } + + #content-wrapper { + display: flex; + align-items: center; + } + `, + ]; + + /** + * @configure SlotMixin + * @override LionSelectInvoker + */ + get slots() { + return {}; + } + + /** + * @override LionSelectInvoker + */ + render() { + const ctor = /** @type {typeof LionSelectInvoker} */ (this.constructor); + return ctor._mainTemplate(this._templateData); + } + + get _templateData() { + return { + data: { selectedElement: this.selectedElement, hostElement: this.hostElement }, + }; + } + + static _mainTemplate(templateData) { + return html`
${this._contentTemplate(templateData)}
`; + } + + static _contentTemplate({ data: { selectedElement, hostElement } }) { + if (!selectedElement) { + return ``; + } + return html` +
+
+ `; + } +} +customElements.define('intl-select-invoker', IntlSelectInvoker); + +export class IntlSeparator extends LitElement { + static styles = [ + css` + :host { + display: block; + padding-bottom: 5px; + margin-bottom: 5px; + border-bottom: 1px solid #ccc; + } + `, + ]; + + /** + * @lifecycle platform + */ + connectedCallback() { + super.connectedCallback(); + this.setAttribute('role', 'separator'); + } +} +customElements.define('intl-separator', IntlSeparator); + +export class IntlSelectRich extends LionSelectRich { + static styles = [ + super.styles, + css` + :host, + ::slotted(*) { + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + } + + ::slotted([role='listbox']) { + margin-left: -3px; + display: block; + white-space: nowrap; + max-height: 200px; + overflow-y: scroll; + position: absolute; + z-index: 2; + list-style: none; + text-align: left; + padding: 0; + margin: 0 0 0 -1px; + box-shadow: 1px 1px 4px rgb(0 0 0 / 20%); + background-color: white; + border: 1px solid #ccc; + -webkit-overflow-scrolling: touch; + outline: none; + } + + .form-field__group-two, + .input-group, + .input-group__container, + .input-group__input { + height: 100%; + } + `, + ]; + + /** + * @configure ScopedElementsMixin + */ + static scopedElements = { 'intl-select-invoker': IntlSelectInvoker }; + + /** + * @configure SlotMixin + */ + slots = { + ...super.slots, + invoker: () => html``, + }; +} +customElements.define('intl-select-rich', IntlSelectRich); diff --git a/packages/ui/docs/components/select-rich/src/regionMetaList.js b/packages/ui/docs/components/select-rich/src/regionMetaList.js new file mode 100644 index 000000000..6fee46ece --- /dev/null +++ b/packages/ui/docs/components/select-rich/src/regionMetaList.js @@ -0,0 +1,1717 @@ +export const regionMetaList = [ + { + regionCode: 'AC', + countryCode: 247, + flagSymbol: '🇦🇨', + nameForLocale: 'Ascension Island', + nameForRegion: 'Ascension Island', + }, + { + regionCode: 'AD', + countryCode: 376, + flagSymbol: '🇦🇩', + nameForLocale: 'Andorra', + nameForRegion: 'Andorra', + }, + { + regionCode: 'AE', + countryCode: 971, + flagSymbol: '🇦🇪', + nameForLocale: 'United Arab Emirates', + nameForRegion: 'United Arab Emirates', + }, + { + regionCode: 'AF', + countryCode: 93, + flagSymbol: '🇦🇫', + nameForLocale: 'Afghanistan', + nameForRegion: 'Afghanistan', + }, + { + regionCode: 'AG', + countryCode: 1, + flagSymbol: '🇦🇬', + nameForLocale: 'Antigua & Barbuda', + nameForRegion: 'Antigua & Barbuda', + }, + { + regionCode: 'AI', + countryCode: 1, + flagSymbol: '🇦🇮', + nameForLocale: 'Anguilla', + nameForRegion: 'Anguilla', + }, + { + regionCode: 'AL', + countryCode: 355, + flagSymbol: '🇦🇱', + nameForLocale: 'Albania', + nameForRegion: 'Albania', + }, + { + regionCode: 'AM', + countryCode: 374, + flagSymbol: '🇦🇲', + nameForLocale: 'Armenia', + nameForRegion: 'አርሜኒያ', + }, + { + regionCode: 'AO', + countryCode: 244, + flagSymbol: '🇦🇴', + nameForLocale: 'Angola', + nameForRegion: 'Angola', + }, + { + regionCode: 'AR', + countryCode: 54, + flagSymbol: '🇦🇷', + nameForLocale: 'Argentina', + nameForRegion: 'الأرجنتين', + }, + { + regionCode: 'AS', + countryCode: 1, + flagSymbol: '🇦🇸', + nameForLocale: 'American Samoa', + nameForRegion: 'American Samoa', + }, + { + regionCode: 'AT', + countryCode: 43, + flagSymbol: '🇦🇹', + nameForLocale: 'Austria', + nameForRegion: 'Austria', + }, + { + regionCode: 'AU', + countryCode: 61, + flagSymbol: '🇦🇺', + nameForLocale: 'Australia', + nameForRegion: 'Australia', + }, + { + regionCode: 'AW', + countryCode: 297, + flagSymbol: '🇦🇼', + nameForLocale: 'Aruba', + nameForRegion: 'Aruba', + }, + { + regionCode: 'AX', + countryCode: 358, + flagSymbol: '🇦🇽', + nameForLocale: 'Åland Islands', + nameForRegion: 'Åland Islands', + }, + { + regionCode: 'AZ', + countryCode: 994, + flagSymbol: '🇦🇿', + nameForLocale: 'Azerbaijan', + nameForRegion: 'Azerbaijan', + }, + { + regionCode: 'BA', + countryCode: 387, + flagSymbol: '🇧🇦', + nameForLocale: 'Bosnia & Herzegovina', + nameForRegion: 'Bosnia & Herzegovina', + }, + { + regionCode: 'BB', + countryCode: 1, + flagSymbol: '🇧🇧', + nameForLocale: 'Barbados', + nameForRegion: 'Barbados', + }, + { + regionCode: 'BD', + countryCode: 880, + flagSymbol: '🇧🇩', + nameForLocale: 'Bangladesh', + nameForRegion: 'Bangladesh', + }, + { + regionCode: 'BE', + countryCode: 32, + flagSymbol: '🇧🇪', + nameForLocale: 'Belgium', + nameForRegion: 'Belgium', + }, + { + regionCode: 'BF', + countryCode: 226, + flagSymbol: '🇧🇫', + nameForLocale: 'Burkina Faso', + nameForRegion: 'Burkina Faso', + }, + { + regionCode: 'BG', + countryCode: 359, + flagSymbol: '🇧🇬', + nameForLocale: 'Bulgaria', + nameForRegion: 'България', + }, + { + regionCode: 'BH', + countryCode: 973, + flagSymbol: '🇧🇭', + nameForLocale: 'Bahrain', + nameForRegion: 'Bahrain', + }, + { + regionCode: 'BI', + countryCode: 257, + flagSymbol: '🇧🇮', + nameForLocale: 'Burundi', + nameForRegion: 'Burundi', + }, + { + regionCode: 'BJ', + countryCode: 229, + flagSymbol: '🇧🇯', + nameForLocale: 'Benin', + nameForRegion: 'Benin', + }, + { + regionCode: 'BL', + countryCode: 590, + flagSymbol: '🇧🇱', + nameForLocale: 'St. Barthélemy', + nameForRegion: 'St Barthélemy', + }, + { + regionCode: 'BM', + countryCode: 1, + flagSymbol: '🇧🇲', + nameForLocale: 'Bermuda', + nameForRegion: 'Bermuda', + }, + { + regionCode: 'BN', + countryCode: 673, + flagSymbol: '🇧🇳', + nameForLocale: 'Brunei', + nameForRegion: 'ব্রুনেই', + }, + { + regionCode: 'BO', + countryCode: 591, + flagSymbol: '🇧🇴', + nameForLocale: 'Bolivia', + nameForRegion: 'Bolivia', + }, + { + regionCode: 'BQ', + countryCode: 599, + flagSymbol: '🇧🇶', + nameForLocale: 'Caribbean Netherlands', + nameForRegion: 'Caribbean Netherlands', + }, + { + regionCode: 'BR', + countryCode: 55, + flagSymbol: '🇧🇷', + nameForLocale: 'Brazil', + nameForRegion: 'Brazil', + }, + { + regionCode: 'BS', + countryCode: 1, + flagSymbol: '🇧🇸', + nameForLocale: 'Bahamas', + nameForRegion: 'Bahamas', + }, + { + regionCode: 'BT', + countryCode: 975, + flagSymbol: '🇧🇹', + nameForLocale: 'Bhutan', + nameForRegion: 'Bhutan', + }, + { + regionCode: 'BW', + countryCode: 267, + flagSymbol: '🇧🇼', + nameForLocale: 'Botswana', + nameForRegion: 'Botswana', + }, + { + regionCode: 'BY', + countryCode: 375, + flagSymbol: '🇧🇾', + nameForLocale: 'Belarus', + nameForRegion: 'Belarus', + }, + { + regionCode: 'BZ', + countryCode: 501, + flagSymbol: '🇧🇿', + nameForLocale: 'Belize', + nameForRegion: 'Belize', + }, + { + regionCode: 'CA', + countryCode: 1, + flagSymbol: '🇨🇦', + nameForLocale: 'Canada', + nameForRegion: 'Canadà', + }, + { + regionCode: 'CC', + countryCode: 61, + flagSymbol: '🇨🇨', + nameForLocale: 'Cocos (Keeling) Islands', + nameForRegion: 'Cocos (Keeling) Islands', + }, + { + regionCode: 'CD', + countryCode: 243, + flagSymbol: '🇨🇩', + nameForLocale: 'Congo - Kinshasa', + nameForRegion: 'Congo - Kinshasa', + }, + { + regionCode: 'CF', + countryCode: 236, + flagSymbol: '🇨🇫', + nameForLocale: 'Central African Republic', + nameForRegion: 'Central African Republic', + }, + { + regionCode: 'CG', + countryCode: 242, + flagSymbol: '🇨🇬', + nameForLocale: 'Congo - Brazzaville', + nameForRegion: 'Congo - Brazzaville', + }, + { + regionCode: 'CH', + countryCode: 41, + flagSymbol: '🇨🇭', + nameForLocale: 'Switzerland', + nameForRegion: 'Switzerland', + }, + { + regionCode: 'CI', + countryCode: 225, + flagSymbol: '🇨🇮', + nameForLocale: 'Côte d’Ivoire', + nameForRegion: 'Côte d’Ivoire', + }, + { + regionCode: 'CK', + countryCode: 682, + flagSymbol: '🇨🇰', + nameForLocale: 'Cook Islands', + nameForRegion: 'Cook Islands', + }, + { + regionCode: 'CL', + countryCode: 56, + flagSymbol: '🇨🇱', + nameForLocale: 'Chile', + nameForRegion: 'Chile', + }, + { + regionCode: 'CM', + countryCode: 237, + flagSymbol: '🇨🇲', + nameForLocale: 'Cameroon', + nameForRegion: 'Cameroon', + }, + { + regionCode: 'CN', + countryCode: 86, + flagSymbol: '🇨🇳', + nameForLocale: 'China', + nameForRegion: 'China', + }, + { + regionCode: 'CO', + countryCode: 57, + flagSymbol: '🇨🇴', + nameForLocale: 'Colombia', + nameForRegion: 'Colombia', + }, + { + regionCode: 'CR', + countryCode: 506, + flagSymbol: '🇨🇷', + nameForLocale: 'Costa Rica', + nameForRegion: 'Costa Rica', + }, + { + regionCode: 'CU', + countryCode: 53, + flagSymbol: '🇨🇺', + nameForLocale: 'Cuba', + nameForRegion: 'Cuba', + }, + { + regionCode: 'CV', + countryCode: 238, + flagSymbol: '🇨🇻', + nameForLocale: 'Cape Verde', + nameForRegion: 'Cape Verde', + }, + { + regionCode: 'CW', + countryCode: 599, + flagSymbol: '🇨🇼', + nameForLocale: 'Curaçao', + nameForRegion: 'Curaçao', + }, + { + regionCode: 'CX', + countryCode: 61, + flagSymbol: '🇨🇽', + nameForLocale: 'Christmas Island', + nameForRegion: 'Christmas Island', + }, + { + regionCode: 'CY', + countryCode: 357, + flagSymbol: '🇨🇾', + nameForLocale: 'Cyprus', + nameForRegion: 'Cyprus', + }, + { + regionCode: 'CZ', + countryCode: 420, + flagSymbol: '🇨🇿', + nameForLocale: 'Czechia', + nameForRegion: 'Czechia', + }, + { + regionCode: 'DE', + countryCode: 49, + flagSymbol: '🇩🇪', + nameForLocale: 'Germany', + nameForRegion: 'Deutschland', + }, + { + regionCode: 'DJ', + countryCode: 253, + flagSymbol: '🇩🇯', + nameForLocale: 'Djibouti', + nameForRegion: 'Djibouti', + }, + { + regionCode: 'DK', + countryCode: 45, + flagSymbol: '🇩🇰', + nameForLocale: 'Denmark', + nameForRegion: 'Denmark', + }, + { + regionCode: 'DM', + countryCode: 1, + flagSymbol: '🇩🇲', + nameForLocale: 'Dominica', + nameForRegion: 'Dominica', + }, + { + regionCode: 'DO', + countryCode: 1, + flagSymbol: '🇩🇴', + nameForLocale: 'Dominican Republic', + nameForRegion: 'Dominican Republic', + }, + { + regionCode: 'DZ', + countryCode: 213, + flagSymbol: '🇩🇿', + nameForLocale: 'Algeria', + nameForRegion: 'Algeria', + }, + { + regionCode: 'EC', + countryCode: 593, + flagSymbol: '🇪🇨', + nameForLocale: 'Ecuador', + nameForRegion: 'Ecuador', + }, + { + regionCode: 'EE', + countryCode: 372, + flagSymbol: '🇪🇪', + nameForLocale: 'Estonia', + nameForRegion: 'Estonia', + }, + { + regionCode: 'EG', + countryCode: 20, + flagSymbol: '🇪🇬', + nameForLocale: 'Egypt', + nameForRegion: 'Egypt', + }, + { + regionCode: 'EH', + countryCode: 212, + flagSymbol: '🇪🇭', + nameForLocale: 'Western Sahara', + nameForRegion: 'Western Sahara', + }, + { + regionCode: 'ER', + countryCode: 291, + flagSymbol: '🇪🇷', + nameForLocale: 'Eritrea', + nameForRegion: 'Eritrea', + }, + { + regionCode: 'ES', + countryCode: 34, + flagSymbol: '🇪🇸', + nameForLocale: 'Spain', + nameForRegion: 'España', + }, + { + regionCode: 'ET', + countryCode: 251, + flagSymbol: '🇪🇹', + nameForLocale: 'Ethiopia', + nameForRegion: 'Etioopia', + }, + { + regionCode: 'FI', + countryCode: 358, + flagSymbol: '🇫🇮', + nameForLocale: 'Finland', + nameForRegion: 'Suomi', + }, + { + regionCode: 'FJ', + countryCode: 679, + flagSymbol: '🇫🇯', + nameForLocale: 'Fiji', + nameForRegion: 'Fiji', + }, + { + regionCode: 'FK', + countryCode: 500, + flagSymbol: '🇫🇰', + nameForLocale: 'Falkland Islands (Islas Malvinas)', + nameForRegion: 'Falkland Islands (Islas Malvinas)', + }, + { + regionCode: 'FM', + countryCode: 691, + flagSymbol: '🇫🇲', + nameForLocale: 'Micronesia', + nameForRegion: 'Micronesia', + }, + { + regionCode: 'FO', + countryCode: 298, + flagSymbol: '🇫🇴', + nameForLocale: 'Faroe Islands', + nameForRegion: 'Faroe Islands', + }, + { + regionCode: 'FR', + countryCode: 33, + flagSymbol: '🇫🇷', + nameForLocale: 'France', + nameForRegion: 'France', + }, + { + regionCode: 'GA', + countryCode: 241, + flagSymbol: '🇬🇦', + nameForLocale: 'Gabon', + nameForRegion: 'Gabon', + }, + { + regionCode: 'GB', + countryCode: 44, + flagSymbol: '🇬🇧', + nameForLocale: 'United Kingdom', + nameForRegion: 'United Kingdom', + }, + { + regionCode: 'GD', + countryCode: 1, + flagSymbol: '🇬🇩', + nameForLocale: 'Grenada', + nameForRegion: 'Grenada', + }, + { + regionCode: 'GE', + countryCode: 995, + flagSymbol: '🇬🇪', + nameForLocale: 'Georgia', + nameForRegion: 'Georgia', + }, + { + regionCode: 'GF', + countryCode: 594, + flagSymbol: '🇬🇫', + nameForLocale: 'French Guiana', + nameForRegion: 'French Guiana', + }, + { + regionCode: 'GG', + countryCode: 44, + flagSymbol: '🇬🇬', + nameForLocale: 'Guernsey', + nameForRegion: 'Guernsey', + }, + { + regionCode: 'GH', + countryCode: 233, + flagSymbol: '🇬🇭', + nameForLocale: 'Ghana', + nameForRegion: 'Ghana', + }, + { + regionCode: 'GI', + countryCode: 350, + flagSymbol: '🇬🇮', + nameForLocale: 'Gibraltar', + nameForRegion: 'Gibraltar', + }, + { + regionCode: 'GL', + countryCode: 299, + flagSymbol: '🇬🇱', + nameForLocale: 'Greenland', + nameForRegion: 'Greenland', + }, + { + regionCode: 'GM', + countryCode: 220, + flagSymbol: '🇬🇲', + nameForLocale: 'Gambia', + nameForRegion: 'Gambia', + }, + { + regionCode: 'GN', + countryCode: 224, + flagSymbol: '🇬🇳', + nameForLocale: 'Guinea', + nameForRegion: 'Guinea', + }, + { + regionCode: 'GP', + countryCode: 590, + flagSymbol: '🇬🇵', + nameForLocale: 'Guadeloupe', + nameForRegion: 'Guadeloupe', + }, + { + regionCode: 'GQ', + countryCode: 240, + flagSymbol: '🇬🇶', + nameForLocale: 'Equatorial Guinea', + nameForRegion: 'Equatorial Guinea', + }, + { + regionCode: 'GR', + countryCode: 30, + flagSymbol: '🇬🇷', + nameForLocale: 'Greece', + nameForRegion: 'Greece', + }, + { + regionCode: 'GT', + countryCode: 502, + flagSymbol: '🇬🇹', + nameForLocale: 'Guatemala', + nameForRegion: 'Guatemala', + }, + { + regionCode: 'GU', + countryCode: 1, + flagSymbol: '🇬🇺', + nameForLocale: 'Guam', + nameForRegion: 'ગ્વામ', + }, + { + regionCode: 'GW', + countryCode: 245, + flagSymbol: '🇬🇼', + nameForLocale: 'Guinea-Bissau', + nameForRegion: 'Guinea-Bissau', + }, + { + regionCode: 'GY', + countryCode: 592, + flagSymbol: '🇬🇾', + nameForLocale: 'Guyana', + nameForRegion: 'Guyana', + }, + { + regionCode: 'HK', + countryCode: 852, + flagSymbol: '🇭🇰', + nameForLocale: 'Hong Kong', + nameForRegion: 'Hong Kong', + }, + { + regionCode: 'HN', + countryCode: 504, + flagSymbol: '🇭🇳', + nameForLocale: 'Honduras', + nameForRegion: 'Honduras', + }, + { + regionCode: 'HR', + countryCode: 385, + flagSymbol: '🇭🇷', + nameForLocale: 'Croatia', + nameForRegion: 'Hrvatska', + }, + { + regionCode: 'HT', + countryCode: 509, + flagSymbol: '🇭🇹', + nameForLocale: 'Haiti', + nameForRegion: 'Haiti', + }, + { + regionCode: 'HU', + countryCode: 36, + flagSymbol: '🇭🇺', + nameForLocale: 'Hungary', + nameForRegion: 'Magyarország', + }, + { + regionCode: 'ID', + countryCode: 62, + flagSymbol: '🇮🇩', + nameForLocale: 'Indonesia', + nameForRegion: 'Indonesia', + }, + { + regionCode: 'IE', + countryCode: 353, + flagSymbol: '🇮🇪', + nameForLocale: 'Ireland', + nameForRegion: 'Ireland', + }, + { + regionCode: 'IL', + countryCode: 972, + flagSymbol: '🇮🇱', + nameForLocale: 'Israel', + nameForRegion: 'Israel', + }, + { + regionCode: 'IM', + countryCode: 44, + flagSymbol: '🇮🇲', + nameForLocale: 'Isle of Man', + nameForRegion: 'Isle of Man', + }, + { + regionCode: 'IN', + countryCode: 91, + flagSymbol: '🇮🇳', + nameForLocale: 'India', + nameForRegion: 'India', + }, + { + regionCode: 'IO', + countryCode: 246, + flagSymbol: '🇮🇴', + nameForLocale: 'British Indian Ocean Territory', + nameForRegion: 'British Indian Ocean Territory', + }, + { + regionCode: 'IQ', + countryCode: 964, + flagSymbol: '🇮🇶', + nameForLocale: 'Iraq', + nameForRegion: 'Iraq', + }, + { + regionCode: 'IR', + countryCode: 98, + flagSymbol: '🇮🇷', + nameForLocale: 'Iran', + nameForRegion: 'Iran', + }, + { + regionCode: 'IS', + countryCode: 354, + flagSymbol: '🇮🇸', + nameForLocale: 'Iceland', + nameForRegion: 'Iceland', + }, + { + regionCode: 'IT', + countryCode: 39, + flagSymbol: '🇮🇹', + nameForLocale: 'Italy', + nameForRegion: 'Italia', + }, + { + regionCode: 'JE', + countryCode: 44, + flagSymbol: '🇯🇪', + nameForLocale: 'Jersey', + nameForRegion: 'Jersey', + }, + { + regionCode: 'JM', + countryCode: 1, + flagSymbol: '🇯🇲', + nameForLocale: 'Jamaica', + nameForRegion: 'Jamaica', + }, + { + regionCode: 'JO', + countryCode: 962, + flagSymbol: '🇯🇴', + nameForLocale: 'Jordan', + nameForRegion: 'Jordan', + }, + { + regionCode: 'JP', + countryCode: 81, + flagSymbol: '🇯🇵', + nameForLocale: 'Japan', + nameForRegion: 'Japan', + }, + { + regionCode: 'KE', + countryCode: 254, + flagSymbol: '🇰🇪', + nameForLocale: 'Kenya', + nameForRegion: 'Kenya', + }, + { + regionCode: 'KG', + countryCode: 996, + flagSymbol: '🇰🇬', + nameForLocale: 'Kyrgyzstan', + nameForRegion: 'Kyrgyzstan', + }, + { + regionCode: 'KH', + countryCode: 855, + flagSymbol: '🇰🇭', + nameForLocale: 'Cambodia', + nameForRegion: 'Cambodia', + }, + { + regionCode: 'KI', + countryCode: 686, + flagSymbol: '🇰🇮', + nameForLocale: 'Kiribati', + nameForRegion: 'Kiribati', + }, + { + regionCode: 'KM', + countryCode: 269, + flagSymbol: '🇰🇲', + nameForLocale: 'Comoros', + nameForRegion: 'Comoros', + }, + { + regionCode: 'KN', + countryCode: 1, + flagSymbol: '🇰🇳', + nameForLocale: 'St. Kitts & Nevis', + nameForRegion: 'ಸೇಂಟ್ ಕಿಟ್ಸ್ ಮತ್ತು ನೆವಿಸ್', + }, + { + regionCode: 'KP', + countryCode: 850, + flagSymbol: '🇰🇵', + nameForLocale: 'North Korea', + nameForRegion: 'North Korea', + }, + { + regionCode: 'KR', + countryCode: 82, + flagSymbol: '🇰🇷', + nameForLocale: 'South Korea', + nameForRegion: 'South Korea', + }, + { + regionCode: 'KW', + countryCode: 965, + flagSymbol: '🇰🇼', + nameForLocale: 'Kuwait', + nameForRegion: 'Kuwait', + }, + { + regionCode: 'KY', + countryCode: 1, + flagSymbol: '🇰🇾', + nameForLocale: 'Cayman Islands', + nameForRegion: 'Cayman Islands', + }, + { + regionCode: 'KZ', + countryCode: 7, + flagSymbol: '🇰🇿', + nameForLocale: 'Kazakhstan', + nameForRegion: 'Kazakhstan', + }, + { + regionCode: 'LA', + countryCode: 856, + flagSymbol: '🇱🇦', + nameForLocale: 'Laos', + nameForRegion: 'Laos', + }, + { + regionCode: 'LB', + countryCode: 961, + flagSymbol: '🇱🇧', + nameForLocale: 'Lebanon', + nameForRegion: 'Lebanon', + }, + { + regionCode: 'LC', + countryCode: 1, + flagSymbol: '🇱🇨', + nameForLocale: 'St. Lucia', + nameForRegion: 'St Lucia', + }, + { + regionCode: 'LI', + countryCode: 423, + flagSymbol: '🇱🇮', + nameForLocale: 'Liechtenstein', + nameForRegion: 'Liechtenstein', + }, + { + regionCode: 'LK', + countryCode: 94, + flagSymbol: '🇱🇰', + nameForLocale: 'Sri Lanka', + nameForRegion: 'Sri Lanka', + }, + { + regionCode: 'LR', + countryCode: 231, + flagSymbol: '🇱🇷', + nameForLocale: 'Liberia', + nameForRegion: 'Liberia', + }, + { + regionCode: 'LS', + countryCode: 266, + flagSymbol: '🇱🇸', + nameForLocale: 'Lesotho', + nameForRegion: 'Lesotho', + }, + { + regionCode: 'LT', + countryCode: 370, + flagSymbol: '🇱🇹', + nameForLocale: 'Lithuania', + nameForRegion: 'Lietuva', + }, + { + regionCode: 'LU', + countryCode: 352, + flagSymbol: '🇱🇺', + nameForLocale: 'Luxembourg', + nameForRegion: 'Luxembourg', + }, + { + regionCode: 'LV', + countryCode: 371, + flagSymbol: '🇱🇻', + nameForLocale: 'Latvia', + nameForRegion: 'Latvija', + }, + { + regionCode: 'LY', + countryCode: 218, + flagSymbol: '🇱🇾', + nameForLocale: 'Libya', + nameForRegion: 'Libya', + }, + { + regionCode: 'MA', + countryCode: 212, + flagSymbol: '🇲🇦', + nameForLocale: 'Morocco', + nameForRegion: 'Morocco', + }, + { + regionCode: 'MC', + countryCode: 377, + flagSymbol: '🇲🇨', + nameForLocale: 'Monaco', + nameForRegion: 'Monaco', + }, + { + regionCode: 'MD', + countryCode: 373, + flagSymbol: '🇲🇩', + nameForLocale: 'Moldova', + nameForRegion: 'Moldova', + }, + { + regionCode: 'ME', + countryCode: 382, + flagSymbol: '🇲🇪', + nameForLocale: 'Montenegro', + nameForRegion: 'Montenegro', + }, + { + regionCode: 'MF', + countryCode: 590, + flagSymbol: '🇲🇫', + nameForLocale: 'St. Martin', + nameForRegion: 'St Martin', + }, + { + regionCode: 'MG', + countryCode: 261, + flagSymbol: '🇲🇬', + nameForLocale: 'Madagascar', + nameForRegion: 'Madagascar', + }, + { + regionCode: 'MH', + countryCode: 692, + flagSymbol: '🇲🇭', + nameForLocale: 'Marshall Islands', + nameForRegion: 'Marshall Islands', + }, + { + regionCode: 'MK', + countryCode: 389, + flagSymbol: '🇲🇰', + nameForLocale: 'North Macedonia', + nameForRegion: 'North Macedonia', + }, + { + regionCode: 'ML', + countryCode: 223, + flagSymbol: '🇲🇱', + nameForLocale: 'Mali', + nameForRegion: 'മാലി', + }, + { + regionCode: 'MM', + countryCode: 95, + flagSymbol: '🇲🇲', + nameForLocale: 'Myanmar (Burma)', + nameForRegion: 'Myanmar (Burma)', + }, + { + regionCode: 'MN', + countryCode: 976, + flagSymbol: '🇲🇳', + nameForLocale: 'Mongolia', + nameForRegion: 'Mongolia', + }, + { + regionCode: 'MO', + countryCode: 853, + flagSymbol: '🇲🇴', + nameForLocale: 'Macao', + nameForRegion: 'Macao', + }, + { + regionCode: 'MP', + countryCode: 1, + flagSymbol: '🇲🇵', + nameForLocale: 'Northern Mariana Islands', + nameForRegion: 'Northern Mariana Islands', + }, + { + regionCode: 'MQ', + countryCode: 596, + flagSymbol: '🇲🇶', + nameForLocale: 'Martinique', + nameForRegion: 'Martinique', + }, + { + regionCode: 'MR', + countryCode: 222, + flagSymbol: '🇲🇷', + nameForLocale: 'Mauritania', + nameForRegion: 'मॉरिटानिया', + }, + { + regionCode: 'MS', + countryCode: 1, + flagSymbol: '🇲🇸', + nameForLocale: 'Montserrat', + nameForRegion: 'Montserrat', + }, + { + regionCode: 'MT', + countryCode: 356, + flagSymbol: '🇲🇹', + nameForLocale: 'Malta', + nameForRegion: 'Malta', + }, + { + regionCode: 'MU', + countryCode: 230, + flagSymbol: '🇲🇺', + nameForLocale: 'Mauritius', + nameForRegion: 'Mauritius', + }, + { + regionCode: 'MV', + countryCode: 960, + flagSymbol: '🇲🇻', + nameForLocale: 'Maldives', + nameForRegion: 'Maldives', + }, + { + regionCode: 'MW', + countryCode: 265, + flagSymbol: '🇲🇼', + nameForLocale: 'Malawi', + nameForRegion: 'Malawi', + }, + { + regionCode: 'MX', + countryCode: 52, + flagSymbol: '🇲🇽', + nameForLocale: 'Mexico', + nameForRegion: 'Mexico', + }, + { + regionCode: 'MY', + countryCode: 60, + flagSymbol: '🇲🇾', + nameForLocale: 'Malaysia', + nameForRegion: 'Malaysia', + }, + { + regionCode: 'MZ', + countryCode: 258, + flagSymbol: '🇲🇿', + nameForLocale: 'Mozambique', + nameForRegion: 'Mozambique', + }, + { + regionCode: 'NA', + countryCode: 264, + flagSymbol: '🇳🇦', + nameForLocale: 'Namibia', + nameForRegion: 'Namibia', + }, + { + regionCode: 'NC', + countryCode: 687, + flagSymbol: '🇳🇨', + nameForLocale: 'New Caledonia', + nameForRegion: 'New Caledonia', + }, + { + regionCode: 'NE', + countryCode: 227, + flagSymbol: '🇳🇪', + nameForLocale: 'Niger', + nameForRegion: 'Niger', + }, + { + regionCode: 'NF', + countryCode: 672, + flagSymbol: '🇳🇫', + nameForLocale: 'Norfolk Island', + nameForRegion: 'Norfolk Island', + }, + { + regionCode: 'NG', + countryCode: 234, + flagSymbol: '🇳🇬', + nameForLocale: 'Nigeria', + nameForRegion: 'Nigeria', + }, + { + regionCode: 'NI', + countryCode: 505, + flagSymbol: '🇳🇮', + nameForLocale: 'Nicaragua', + nameForRegion: 'Nicaragua', + }, + { + regionCode: 'NL', + countryCode: 31, + flagSymbol: '🇳🇱', + nameForLocale: 'Netherlands', + nameForRegion: 'Nederland', + }, + { + regionCode: 'NO', + countryCode: 47, + flagSymbol: '🇳🇴', + nameForLocale: 'Norway', + nameForRegion: 'Norge', + }, + { + regionCode: 'NP', + countryCode: 977, + flagSymbol: '🇳🇵', + nameForLocale: 'Nepal', + nameForRegion: 'Nepal', + }, + { + regionCode: 'NR', + countryCode: 674, + flagSymbol: '🇳🇷', + nameForLocale: 'Nauru', + nameForRegion: 'Nauru', + }, + { + regionCode: 'NU', + countryCode: 683, + flagSymbol: '🇳🇺', + nameForLocale: 'Niue', + nameForRegion: 'Niue', + }, + { + regionCode: 'NZ', + countryCode: 64, + flagSymbol: '🇳🇿', + nameForLocale: 'New Zealand', + nameForRegion: 'New Zealand', + }, + { + regionCode: 'OM', + countryCode: 968, + flagSymbol: '🇴🇲', + nameForLocale: 'Oman', + nameForRegion: 'Oman', + }, + { + regionCode: 'PA', + countryCode: 507, + flagSymbol: '🇵🇦', + nameForLocale: 'Panama', + nameForRegion: 'Panama', + }, + { + regionCode: 'PE', + countryCode: 51, + flagSymbol: '🇵🇪', + nameForLocale: 'Peru', + nameForRegion: 'Peru', + }, + { + regionCode: 'PF', + countryCode: 689, + flagSymbol: '🇵🇫', + nameForLocale: 'French Polynesia', + nameForRegion: 'French Polynesia', + }, + { + regionCode: 'PG', + countryCode: 675, + flagSymbol: '🇵🇬', + nameForLocale: 'Papua New Guinea', + nameForRegion: 'Papua New Guinea', + }, + { + regionCode: 'PH', + countryCode: 63, + flagSymbol: '🇵🇭', + nameForLocale: 'Philippines', + nameForRegion: 'Philippines', + }, + { + regionCode: 'PK', + countryCode: 92, + flagSymbol: '🇵🇰', + nameForLocale: 'Pakistan', + nameForRegion: 'Pakistan', + }, + { + regionCode: 'PL', + countryCode: 48, + flagSymbol: '🇵🇱', + nameForLocale: 'Poland', + nameForRegion: 'Polska', + }, + { + regionCode: 'PM', + countryCode: 508, + flagSymbol: '🇵🇲', + nameForLocale: 'St. Pierre & Miquelon', + nameForRegion: 'St Pierre & Miquelon', + }, + { + regionCode: 'PR', + countryCode: 1, + flagSymbol: '🇵🇷', + nameForLocale: 'Puerto Rico', + nameForRegion: 'Puerto Rico', + }, + { + regionCode: 'PS', + countryCode: 970, + flagSymbol: '🇵🇸', + nameForLocale: 'Palestine', + nameForRegion: 'Palestine', + }, + { + regionCode: 'PT', + countryCode: 351, + flagSymbol: '🇵🇹', + nameForLocale: 'Portugal', + nameForRegion: 'Portugal', + }, + { + regionCode: 'PW', + countryCode: 680, + flagSymbol: '🇵🇼', + nameForLocale: 'Palau', + nameForRegion: 'Palau', + }, + { + regionCode: 'PY', + countryCode: 595, + flagSymbol: '🇵🇾', + nameForLocale: 'Paraguay', + nameForRegion: 'Paraguay', + }, + { + regionCode: 'QA', + countryCode: 974, + flagSymbol: '🇶🇦', + nameForLocale: 'Qatar', + nameForRegion: 'Qatar', + }, + { + regionCode: 'RE', + countryCode: 262, + flagSymbol: '🇷🇪', + nameForLocale: 'Réunion', + nameForRegion: 'Réunion', + }, + { + regionCode: 'RO', + countryCode: 40, + flagSymbol: '🇷🇴', + nameForLocale: 'Romania', + nameForRegion: 'România', + }, + { + regionCode: 'RS', + countryCode: 381, + flagSymbol: '🇷🇸', + nameForLocale: 'Serbia', + nameForRegion: 'Serbia', + }, + { + regionCode: 'RU', + countryCode: 7, + flagSymbol: '🇷🇺', + nameForLocale: 'Russia', + nameForRegion: 'Россия', + }, + { + regionCode: 'RW', + countryCode: 250, + flagSymbol: '🇷🇼', + nameForLocale: 'Rwanda', + nameForRegion: 'Rwanda', + }, + { + regionCode: 'SA', + countryCode: 966, + flagSymbol: '🇸🇦', + nameForLocale: 'Saudi Arabia', + nameForRegion: 'Saudi Arabia', + }, + { + regionCode: 'SB', + countryCode: 677, + flagSymbol: '🇸🇧', + nameForLocale: 'Solomon Islands', + nameForRegion: 'Solomon Islands', + }, + { + regionCode: 'SC', + countryCode: 248, + flagSymbol: '🇸🇨', + nameForLocale: 'Seychelles', + nameForRegion: 'Seychelles', + }, + { + regionCode: 'SD', + countryCode: 249, + flagSymbol: '🇸🇩', + nameForLocale: 'Sudan', + nameForRegion: 'Sudan', + }, + { + regionCode: 'SE', + countryCode: 46, + flagSymbol: '🇸🇪', + nameForLocale: 'Sweden', + nameForRegion: 'Sweden', + }, + { + regionCode: 'SG', + countryCode: 65, + flagSymbol: '🇸🇬', + nameForLocale: 'Singapore', + nameForRegion: 'Singapore', + }, + { + regionCode: 'SH', + countryCode: 290, + flagSymbol: '🇸🇭', + nameForLocale: 'St. Helena', + nameForRegion: 'Sveta Jelena', + }, + { + regionCode: 'SI', + countryCode: 386, + flagSymbol: '🇸🇮', + nameForLocale: 'Slovenia', + nameForRegion: 'Slovenia', + }, + { + regionCode: 'SJ', + countryCode: 47, + flagSymbol: '🇸🇯', + nameForLocale: 'Svalbard & Jan Mayen', + nameForRegion: 'Svalbard & Jan Mayen', + }, + { + regionCode: 'SK', + countryCode: 421, + flagSymbol: '🇸🇰', + nameForLocale: 'Slovakia', + nameForRegion: 'Slovensko', + }, + { + regionCode: 'SL', + countryCode: 232, + flagSymbol: '🇸🇱', + nameForLocale: 'Sierra Leone', + nameForRegion: 'Sierra Leone', + }, + { + regionCode: 'SM', + countryCode: 378, + flagSymbol: '🇸🇲', + nameForLocale: 'San Marino', + nameForRegion: 'San Marino', + }, + { + regionCode: 'SN', + countryCode: 221, + flagSymbol: '🇸🇳', + nameForLocale: 'Senegal', + nameForRegion: 'Senegal', + }, + { + regionCode: 'SO', + countryCode: 252, + flagSymbol: '🇸🇴', + nameForLocale: 'Somalia', + nameForRegion: 'Somalia', + }, + { + regionCode: 'SR', + countryCode: 597, + flagSymbol: '🇸🇷', + nameForLocale: 'Suriname', + nameForRegion: 'Суринам', + }, + { + regionCode: 'SS', + countryCode: 211, + flagSymbol: '🇸🇸', + nameForLocale: 'South Sudan', + nameForRegion: 'South Sudan', + }, + { + regionCode: 'ST', + countryCode: 239, + flagSymbol: '🇸🇹', + nameForLocale: 'São Tomé & Príncipe', + nameForRegion: 'São Tomé & Príncipe', + }, + { + regionCode: 'SV', + countryCode: 503, + flagSymbol: '🇸🇻', + nameForLocale: 'El Salvador', + nameForRegion: 'El Salvador', + }, + { + regionCode: 'SX', + countryCode: 1, + flagSymbol: '🇸🇽', + nameForLocale: 'Sint Maarten', + nameForRegion: 'Sint Maarten', + }, + { + regionCode: 'SY', + countryCode: 963, + flagSymbol: '🇸🇾', + nameForLocale: 'Syria', + nameForRegion: 'Syria', + }, + { + regionCode: 'SZ', + countryCode: 268, + flagSymbol: '🇸🇿', + nameForLocale: 'Eswatini', + nameForRegion: 'Eswatini', + }, + { + regionCode: 'TA', + countryCode: 290, + flagSymbol: '🇹🇦', + nameForLocale: 'Tristan da Cunha', + nameForRegion: 'டிரிஸ்டன் டா குன்ஹா', + }, + { + regionCode: 'TC', + countryCode: 1, + flagSymbol: '🇹🇨', + nameForLocale: 'Turks & Caicos Islands', + nameForRegion: 'Turks & Caicos Islands', + }, + { + regionCode: 'TD', + countryCode: 235, + flagSymbol: '🇹🇩', + nameForLocale: 'Chad', + nameForRegion: 'Chad', + }, + { + regionCode: 'TG', + countryCode: 228, + flagSymbol: '🇹🇬', + nameForLocale: 'Togo', + nameForRegion: 'Togo', + }, + { + regionCode: 'TH', + countryCode: 66, + flagSymbol: '🇹🇭', + nameForLocale: 'Thailand', + nameForRegion: 'ไทย', + }, + { + regionCode: 'TJ', + countryCode: 992, + flagSymbol: '🇹🇯', + nameForLocale: 'Tajikistan', + nameForRegion: 'Tajikistan', + }, + { + regionCode: 'TK', + countryCode: 690, + flagSymbol: '🇹🇰', + nameForLocale: 'Tokelau', + nameForRegion: 'Tokelau', + }, + { + regionCode: 'TL', + countryCode: 670, + flagSymbol: '🇹🇱', + nameForLocale: 'Timor-Leste', + nameForRegion: 'Timor-Leste', + }, + { + regionCode: 'TM', + countryCode: 993, + flagSymbol: '🇹🇲', + nameForLocale: 'Turkmenistan', + nameForRegion: 'Turkmenistan', + }, + { + regionCode: 'TN', + countryCode: 216, + flagSymbol: '🇹🇳', + nameForLocale: 'Tunisia', + nameForRegion: 'Tunisia', + }, + { + regionCode: 'TO', + countryCode: 676, + flagSymbol: '🇹🇴', + nameForLocale: 'Tonga', + nameForRegion: 'Tonga', + }, + { + regionCode: 'TR', + countryCode: 90, + flagSymbol: '🇹🇷', + nameForLocale: 'Turkey', + nameForRegion: 'Türkiye', + }, + { + regionCode: 'TT', + countryCode: 1, + flagSymbol: '🇹🇹', + nameForLocale: 'Trinidad & Tobago', + nameForRegion: 'Trinidad & Tobago', + }, + { + regionCode: 'TV', + countryCode: 688, + flagSymbol: '🇹🇻', + nameForLocale: 'Tuvalu', + nameForRegion: 'Tuvalu', + }, + { + regionCode: 'TW', + countryCode: 886, + flagSymbol: '🇹🇼', + nameForLocale: 'Taiwan', + nameForRegion: 'Taiwan', + }, + { + regionCode: 'TZ', + countryCode: 255, + flagSymbol: '🇹🇿', + nameForLocale: 'Tanzania', + nameForRegion: 'Tanzania', + }, + { + regionCode: 'UA', + countryCode: 380, + flagSymbol: '🇺🇦', + nameForLocale: 'Ukraine', + nameForRegion: 'Ukraine', + }, + { + regionCode: 'UG', + countryCode: 256, + flagSymbol: '🇺🇬', + nameForLocale: 'Uganda', + nameForRegion: 'Uganda', + }, + { + regionCode: 'US', + countryCode: 1, + flagSymbol: '🇺🇸', + nameForLocale: 'United States', + nameForRegion: 'United States', + }, + { + regionCode: 'UY', + countryCode: 598, + flagSymbol: '🇺🇾', + nameForLocale: 'Uruguay', + nameForRegion: 'Uruguay', + }, + { + regionCode: 'UZ', + countryCode: 998, + flagSymbol: '🇺🇿', + nameForLocale: 'Uzbekistan', + nameForRegion: 'Uzbekistan', + }, + { + regionCode: 'VA', + countryCode: 39, + flagSymbol: '🇻🇦', + nameForLocale: 'Vatican City', + nameForRegion: 'Vatican City', + }, + { + regionCode: 'VC', + countryCode: 1, + flagSymbol: '🇻🇨', + nameForLocale: 'St. Vincent & Grenadines', + nameForRegion: 'St Vincent & the Grenadines', + }, + { + regionCode: 'VE', + countryCode: 58, + flagSymbol: '🇻🇪', + nameForLocale: 'Venezuela', + nameForRegion: 'Venezuela', + }, + { + regionCode: 'VG', + countryCode: 1, + flagSymbol: '🇻🇬', + nameForLocale: 'British Virgin Islands', + nameForRegion: 'British Virgin Islands', + }, + { + regionCode: 'VI', + countryCode: 1, + flagSymbol: '🇻🇮', + nameForLocale: 'U.S. Virgin Islands', + nameForRegion: 'Quần đảo Virgin thuộc Hoa Kỳ', + }, + { + regionCode: 'VN', + countryCode: 84, + flagSymbol: '🇻🇳', + nameForLocale: 'Vietnam', + nameForRegion: 'Vietnam', + }, + { + regionCode: 'VU', + countryCode: 678, + flagSymbol: '🇻🇺', + nameForLocale: 'Vanuatu', + nameForRegion: 'Vanuatu', + }, + { + regionCode: 'WF', + countryCode: 681, + flagSymbol: '🇼🇫', + nameForLocale: 'Wallis & Futuna', + nameForRegion: 'Wallis & Futuna', + }, + { + regionCode: 'WS', + countryCode: 685, + flagSymbol: '🇼🇸', + nameForLocale: 'Samoa', + nameForRegion: 'Samoa', + }, + { + regionCode: 'XK', + countryCode: 383, + flagSymbol: '🇽🇰', + nameForLocale: 'Kosovo', + nameForRegion: 'Kosovo', + }, + { + regionCode: 'YE', + countryCode: 967, + flagSymbol: '🇾🇪', + nameForLocale: 'Yemen', + nameForRegion: 'Yemen', + }, + { + regionCode: 'YT', + countryCode: 262, + flagSymbol: '🇾🇹', + nameForLocale: 'Mayotte', + nameForRegion: 'Mayotte', + }, + { + regionCode: 'ZA', + countryCode: 27, + flagSymbol: '🇿🇦', + nameForLocale: 'South Africa', + nameForRegion: 'South Africa', + }, + { + regionCode: 'ZM', + countryCode: 260, + flagSymbol: '🇿🇲', + nameForLocale: 'Zambia', + nameForRegion: 'Zambia', + }, + { + regionCode: 'ZW', + countryCode: 263, + flagSymbol: '🇿🇼', + nameForLocale: 'Zimbabwe', + nameForRegion: 'Zimbabwe', + }, +]; diff --git a/packages/ui/docs/components/select-rich/use-cases.md b/packages/ui/docs/components/select-rich/use-cases.md new file mode 100644 index 000000000..7ab9a4bbd --- /dev/null +++ b/packages/ui/docs/components/select-rich/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/select-rich/use-cases.md) diff --git a/packages/ui/docs/components/select/index.md b/packages/ui/docs/components/select/index.md new file mode 100644 index 000000000..510c4df69 --- /dev/null +++ b/packages/ui/docs/components/select/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/select/index.md) diff --git a/packages/ui/docs/components/select/overview.md b/packages/ui/docs/components/select/overview.md new file mode 100644 index 000000000..43ac119aa --- /dev/null +++ b/packages/ui/docs/components/select/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/select/overview.md) diff --git a/packages/ui/docs/components/select/use-cases.md b/packages/ui/docs/components/select/use-cases.md new file mode 100644 index 000000000..a31dd2cb1 --- /dev/null +++ b/packages/ui/docs/components/select/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/select/use-cases.md) diff --git a/packages/ui/docs/components/steps/index.md b/packages/ui/docs/components/steps/index.md new file mode 100644 index 000000000..ac395b0fc --- /dev/null +++ b/packages/ui/docs/components/steps/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/steps/index.md) diff --git a/packages/ui/docs/components/steps/overview.md b/packages/ui/docs/components/steps/overview.md new file mode 100644 index 000000000..4ca067f33 --- /dev/null +++ b/packages/ui/docs/components/steps/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/steps/overview.md) diff --git a/packages/ui/docs/components/steps/use-cases.md b/packages/ui/docs/components/steps/use-cases.md new file mode 100644 index 000000000..b099175f0 --- /dev/null +++ b/packages/ui/docs/components/steps/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/steps/use-cases.md) diff --git a/packages/ui/docs/components/switch/index.md b/packages/ui/docs/components/switch/index.md new file mode 100644 index 000000000..876a35e52 --- /dev/null +++ b/packages/ui/docs/components/switch/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/switch/index.md) diff --git a/packages/ui/docs/components/switch/overview.md b/packages/ui/docs/components/switch/overview.md new file mode 100644 index 000000000..36dcbc3a3 --- /dev/null +++ b/packages/ui/docs/components/switch/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/switch/overview.md) diff --git a/packages/ui/docs/components/switch/reference.md b/packages/ui/docs/components/switch/reference.md new file mode 100644 index 000000000..54de976f1 --- /dev/null +++ b/packages/ui/docs/components/switch/reference.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/switch/reference.md) diff --git a/packages/ui/docs/components/switch/use-cases.md b/packages/ui/docs/components/switch/use-cases.md new file mode 100644 index 000000000..eb5854e2b --- /dev/null +++ b/packages/ui/docs/components/switch/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/switch/use-cases.md) diff --git a/packages/ui/docs/components/tabs/examples.md b/packages/ui/docs/components/tabs/examples.md new file mode 100644 index 000000000..581af338c --- /dev/null +++ b/packages/ui/docs/components/tabs/examples.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/tabs/examples.md) diff --git a/packages/ui/docs/components/tabs/index.md b/packages/ui/docs/components/tabs/index.md new file mode 100644 index 000000000..667ee2fd3 --- /dev/null +++ b/packages/ui/docs/components/tabs/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/tabs/index.md) diff --git a/packages/ui/docs/components/tabs/overview.md b/packages/ui/docs/components/tabs/overview.md new file mode 100644 index 000000000..54019bdaa --- /dev/null +++ b/packages/ui/docs/components/tabs/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/tabs/overview.md) diff --git a/packages/ui/docs/components/tabs/src/lea-tab-panel.js b/packages/ui/docs/components/tabs/src/lea-tab-panel.js new file mode 100644 index 000000000..dfe27f1e2 --- /dev/null +++ b/packages/ui/docs/components/tabs/src/lea-tab-panel.js @@ -0,0 +1,24 @@ +import { LitElement, html, css } from 'lit'; + +export class LeaTabPanel extends LitElement { + static get styles() { + return css` + :host { + background-color: #fff; + background-image: linear-gradient(top, #fff, #ddd); + border-radius: 0 2px 2px 2px; + box-shadow: 0 2px 2px #000, 0 -1px 0 #fff inset; + padding: 30px; + } + `; + } + + render() { + return html` + + + `; + } +} + +customElements.define('lea-tab-panel', LeaTabPanel); diff --git a/packages/ui/docs/components/tabs/src/lea-tab.js b/packages/ui/docs/components/tabs/src/lea-tab.js new file mode 100644 index 000000000..752cd5a4d --- /dev/null +++ b/packages/ui/docs/components/tabs/src/lea-tab.js @@ -0,0 +1,45 @@ +import { css, html, LitElement } from 'lit'; + +export class LeaTab extends LitElement { + static get styles() { + return css` + :host { + box-shadow: -4px 0 0 rgba(0, 0, 0, 0.2); + background: #ad1c1c; + background: linear-gradient(220deg, transparent 10px, #ad1c1c 10px); + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); + color: #fff; + float: left; + font: bold 12px/35px 'Lucida sans', Arial, Helvetica; + height: 35px; + padding: 0 30px; + text-decoration: none; + } + + :host(:hover) { + background: #c93434; + background: linear-gradient(220deg, transparent 10px, #c93434 10px); + } + + :host(:focus) { + border-radius: 4px; + box-shadow: 0 0 8px #9fcaea, 0 0 0 1px #559bd1; + + /* outline: 0; */ + } + + :host([selected]) { + background: #fff; + background: linear-gradient(220deg, transparent 10px, #fff 10px); + text-shadow: none; + color: #333; + } + `; + } + + render() { + return html``; + } +} + +customElements.define('lea-tab', LeaTab); diff --git a/packages/ui/docs/components/tabs/src/lea-tabs.js b/packages/ui/docs/components/tabs/src/lea-tabs.js new file mode 100644 index 000000000..06165f2ec --- /dev/null +++ b/packages/ui/docs/components/tabs/src/lea-tabs.js @@ -0,0 +1,28 @@ +import { css } from 'lit'; +import { LionTabs } from '@lion/ui/tabs.js'; + +export class LeaTabs extends LionTabs { + static get styles() { + return [ + ...super.styles, + css` + :host { + background: #222; + display: block; + padding: 20px; + } + `, + ]; + } + + connectedCallback() { + super.connectedCallback(); + this._setupFeature(); + } + + _setupFeature() { + // being awesome + } +} + +customElements.define('lea-tabs', LeaTabs); diff --git a/packages/ui/docs/components/tabs/use-cases.md b/packages/ui/docs/components/tabs/use-cases.md new file mode 100644 index 000000000..66c5887c0 --- /dev/null +++ b/packages/ui/docs/components/tabs/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/tabs/use-cases.md) diff --git a/packages/ui/docs/components/textarea/index.md b/packages/ui/docs/components/textarea/index.md new file mode 100644 index 000000000..2c7174020 --- /dev/null +++ b/packages/ui/docs/components/textarea/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/textarea/index.md) diff --git a/packages/ui/docs/components/textarea/overview.md b/packages/ui/docs/components/textarea/overview.md new file mode 100644 index 000000000..214a4354a --- /dev/null +++ b/packages/ui/docs/components/textarea/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/textarea/overview.md) diff --git a/packages/ui/docs/components/textarea/use-cases.md b/packages/ui/docs/components/textarea/use-cases.md new file mode 100644 index 000000000..f33a2793c --- /dev/null +++ b/packages/ui/docs/components/textarea/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/textarea/use-cases.md) diff --git a/packages/ui/docs/components/tooltip/examples.md b/packages/ui/docs/components/tooltip/examples.md new file mode 100644 index 000000000..338cb15b9 --- /dev/null +++ b/packages/ui/docs/components/tooltip/examples.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/tooltip/examples.md) diff --git a/packages/ui/docs/components/tooltip/index.md b/packages/ui/docs/components/tooltip/index.md new file mode 100644 index 000000000..cea7c303e --- /dev/null +++ b/packages/ui/docs/components/tooltip/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/tooltip/index.md) diff --git a/packages/ui/docs/components/tooltip/overview.md b/packages/ui/docs/components/tooltip/overview.md new file mode 100644 index 000000000..9735e8d45 --- /dev/null +++ b/packages/ui/docs/components/tooltip/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/tooltip/overview.md) diff --git a/packages/ui/docs/components/tooltip/use-cases.md b/packages/ui/docs/components/tooltip/use-cases.md new file mode 100644 index 000000000..84b509f69 --- /dev/null +++ b/packages/ui/docs/components/tooltip/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/components/tooltip/use-cases.md) diff --git a/packages/ui/docs/fundamentals/index.md b/packages/ui/docs/fundamentals/index.md new file mode 100644 index 000000000..a8c92f8a6 --- /dev/null +++ b/packages/ui/docs/fundamentals/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../docs/fundamentals/index.md) diff --git a/packages/ui/docs/fundamentals/node-tools/babel-plugin-extend-docs/index.md b/packages/ui/docs/fundamentals/node-tools/babel-plugin-extend-docs/index.md new file mode 100644 index 000000000..cad961a61 --- /dev/null +++ b/packages/ui/docs/fundamentals/node-tools/babel-plugin-extend-docs/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/node-tools/babel-plugin-extend-docs/index.md) diff --git a/packages/ui/docs/fundamentals/node-tools/babel-plugin-extend-docs/overview.md b/packages/ui/docs/fundamentals/node-tools/babel-plugin-extend-docs/overview.md new file mode 100644 index 000000000..aa9d01bbc --- /dev/null +++ b/packages/ui/docs/fundamentals/node-tools/babel-plugin-extend-docs/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/node-tools/babel-plugin-extend-docs/overview.md) diff --git a/packages/ui/docs/fundamentals/node-tools/index.md b/packages/ui/docs/fundamentals/node-tools/index.md new file mode 100644 index 000000000..7ed0e87f5 --- /dev/null +++ b/packages/ui/docs/fundamentals/node-tools/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/fundamentals/node-tools/index.md) diff --git a/packages/ui/docs/fundamentals/node-tools/providence-analytics/LocalConfiguration.md b/packages/ui/docs/fundamentals/node-tools/providence-analytics/LocalConfiguration.md new file mode 100644 index 000000000..a3c6fb60b --- /dev/null +++ b/packages/ui/docs/fundamentals/node-tools/providence-analytics/LocalConfiguration.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/node-tools/providence-analytics/LocalConfiguration.md) diff --git a/packages/ui/docs/fundamentals/node-tools/providence-analytics/QueryResult.md b/packages/ui/docs/fundamentals/node-tools/providence-analytics/QueryResult.md new file mode 100644 index 000000000..ff3cbd1f3 --- /dev/null +++ b/packages/ui/docs/fundamentals/node-tools/providence-analytics/QueryResult.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/node-tools/providence-analytics/QueryResult.md) diff --git a/packages/ui/docs/fundamentals/node-tools/providence-analytics/analyzer.md b/packages/ui/docs/fundamentals/node-tools/providence-analytics/analyzer.md new file mode 100644 index 000000000..e9cccd4c8 --- /dev/null +++ b/packages/ui/docs/fundamentals/node-tools/providence-analytics/analyzer.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/node-tools/providence-analytics/analyzer.md) diff --git a/packages/ui/docs/fundamentals/node-tools/providence-analytics/assets/_mermaid.svg.js b/packages/ui/docs/fundamentals/node-tools/providence-analytics/assets/_mermaid.svg.js new file mode 100644 index 000000000..189e03117 --- /dev/null +++ b/packages/ui/docs/fundamentals/node-tools/providence-analytics/assets/_mermaid.svg.js @@ -0,0 +1,1202 @@ +import { html } from 'lit-html'; + +/* + +```mermaid +graph TD; + queryConfig-->providence; + ProvidenceConfig-->providence; + providence-->QueryResult; +``` + +*/ +export const providenceFlowSvg = html` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ + + + + +
+ queryConfig +
+
+
+
+ + + + +
+ providence +
+
+
+
+ + + + +
+ ProvidenceConfig +
+
+
+
+ + + + +
+ QueryResult +
+
+
+
+
+
+
+
`; + +/* + +```mermaid +sequenceDiagram + participant providence + participant InputDataService + participant QueryService + participant ReportService + providence->>InputDataService: Give all search targets, based on 'queryConfig' + InputDataService->>providence: 'InputData' + providence->>QueryService: Run query, based on 'queryConfig' + QueryService->>providence: 'QueryResult' + providence->>ReportService: Give a report, based on 'QueryResult' and 'ProvidenceConfig' + ReportService->>providence: Done... +``` + +*/ +export const providenceInternalFlowSvg = html` + + + + + + + + + providence + + + + + + + InputDataService + + + + + + + QueryService + + + + + + + ReportService + + + + + + + + + + + + + + + + Give all search targets, based on 'queryConfig' + + + + + 'InputData' + + + + + Run query, based on 'queryConfig' + + + + + 'QueryResult' + + + + + Give a report, based on 'QueryResult' and 'ProvidenceConfig' + + + + + Done... + + + + + + providence + + + + + + InputDataService + + + + + + QueryService + + + + + + ReportService + + + +`; diff --git a/packages/ui/docs/fundamentals/node-tools/providence-analytics/dashboard.md b/packages/ui/docs/fundamentals/node-tools/providence-analytics/dashboard.md new file mode 100644 index 000000000..e9ba30bd9 --- /dev/null +++ b/packages/ui/docs/fundamentals/node-tools/providence-analytics/dashboard.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/node-tools/providence-analytics/dashboard.md) diff --git a/packages/ui/docs/fundamentals/node-tools/providence-analytics/index.md b/packages/ui/docs/fundamentals/node-tools/providence-analytics/index.md new file mode 100644 index 000000000..65f2ffe70 --- /dev/null +++ b/packages/ui/docs/fundamentals/node-tools/providence-analytics/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/node-tools/providence-analytics/index.md) diff --git a/packages/ui/docs/fundamentals/node-tools/providence-analytics/overview.md b/packages/ui/docs/fundamentals/node-tools/providence-analytics/overview.md new file mode 100644 index 000000000..75ac17416 --- /dev/null +++ b/packages/ui/docs/fundamentals/node-tools/providence-analytics/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/node-tools/providence-analytics/overview.md) diff --git a/packages/ui/docs/fundamentals/node-tools/publish-docs/index.md b/packages/ui/docs/fundamentals/node-tools/publish-docs/index.md new file mode 100644 index 000000000..774de2bdc --- /dev/null +++ b/packages/ui/docs/fundamentals/node-tools/publish-docs/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/node-tools/publish-docs/index.md) diff --git a/packages/ui/docs/fundamentals/node-tools/publish-docs/overview.md b/packages/ui/docs/fundamentals/node-tools/publish-docs/overview.md new file mode 100644 index 000000000..821b2387e --- /dev/null +++ b/packages/ui/docs/fundamentals/node-tools/publish-docs/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/node-tools/publish-docs/overview.md) diff --git a/packages/ui/docs/fundamentals/node-tools/remark-extend/index.md b/packages/ui/docs/fundamentals/node-tools/remark-extend/index.md new file mode 100644 index 000000000..2dcee2d51 --- /dev/null +++ b/packages/ui/docs/fundamentals/node-tools/remark-extend/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/node-tools/remark-extend/index.md) diff --git a/packages/ui/docs/fundamentals/node-tools/remark-extend/overview.md b/packages/ui/docs/fundamentals/node-tools/remark-extend/overview.md new file mode 100644 index 000000000..39d33203c --- /dev/null +++ b/packages/ui/docs/fundamentals/node-tools/remark-extend/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/node-tools/remark-extend/overview.md) diff --git a/packages/ui/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/index.md b/packages/ui/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/index.md new file mode 100644 index 000000000..fa24ee81b --- /dev/null +++ b/packages/ui/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/index.md) diff --git a/packages/ui/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md b/packages/ui/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md new file mode 100644 index 000000000..e751b0df5 --- /dev/null +++ b/packages/ui/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md) diff --git a/packages/ui/docs/fundamentals/rationales/TypeScript.md b/packages/ui/docs/fundamentals/rationales/TypeScript.md new file mode 100644 index 000000000..edc7a8cf0 --- /dev/null +++ b/packages/ui/docs/fundamentals/rationales/TypeScript.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/fundamentals/rationales/TypeScript.md) diff --git a/packages/ui/docs/fundamentals/rationales/index.md b/packages/ui/docs/fundamentals/rationales/index.md new file mode 100644 index 000000000..9d91f2d80 --- /dev/null +++ b/packages/ui/docs/fundamentals/rationales/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/fundamentals/rationales/index.md) diff --git a/packages/ui/docs/fundamentals/rationales/side-effects.md b/packages/ui/docs/fundamentals/rationales/side-effects.md new file mode 100644 index 000000000..f6b8c98e4 --- /dev/null +++ b/packages/ui/docs/fundamentals/rationales/side-effects.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/fundamentals/rationales/side-effects.md) diff --git a/packages/ui/docs/fundamentals/rationales/versioning.md b/packages/ui/docs/fundamentals/rationales/versioning.md new file mode 100644 index 000000000..c4130bb2c --- /dev/null +++ b/packages/ui/docs/fundamentals/rationales/versioning.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/fundamentals/rationales/versioning.md) diff --git a/packages/ui/docs/fundamentals/systems/core/index.md b/packages/ui/docs/fundamentals/systems/core/index.md new file mode 100644 index 000000000..811b1b4a5 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/core/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/core/index.md) diff --git a/packages/ui/docs/fundamentals/systems/core/overview.md b/packages/ui/docs/fundamentals/systems/core/overview.md new file mode 100644 index 000000000..74694a121 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/core/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/core/overview.md) diff --git a/packages/ui/docs/fundamentals/systems/form/assets/FormatMixinDiagram-1.svg b/packages/ui/docs/fundamentals/systems/form/assets/FormatMixinDiagram-1.svg new file mode 100644 index 000000000..a162f4423 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/form/assets/FormatMixinDiagram-1.svg @@ -0,0 +1 @@ +formattedValueUser(inputElement.input)valuemodelValueserializedValueparserserializerdeserializersyncpreprocesson-blurdelegatesyncformatter5interact123445761. User changes the input 2. Native input syncs with lion-input-date value and gets preprocessed3. Value is parsed to modelValue4. modelValue is formatted to formattedValue and modelValue is serialized to serializedValue 5. User blurs the field. Input gets validated by ValidateMixin6. formattedValue synced back to the value (preventRecursiveTrigger prevents infinite looping)7. Value is delegated back to native input value (what the user sees) “10/30/2010”“10/30/2010”[DateObject] “30-10-2010”“2010-10-30T00:00:00.000Z”“30-10-2010”“30-10-2010”“30-10-2010” @user-input-changed @model-value-changed @formatted-value-changed@serialized-value-changed ! [DateObject]User flow(if errorState = false) \ No newline at end of file diff --git a/packages/ui/docs/fundamentals/systems/form/assets/FormatMixinDiagram-2.svg b/packages/ui/docs/fundamentals/systems/form/assets/FormatMixinDiagram-2.svg new file mode 100644 index 000000000..dc0797b84 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/form/assets/FormatMixinDiagram-2.svg @@ -0,0 +1 @@ +User flow 2(Unparseable)User(inputElement.input)valuemodelValueserializedValueparserserializerdeserializerdelegatesyncinteract1345541. User changes the input 2. Native input syncs with lion-input-date value and gets preprocessed3. Value is parsed to modelValue but it is unparseable (parser returns undefined)4. modelValue.viewValue, which is the value prior to the parsing step, is synced back to the user. It is also serialized 5. Value is delegated back to native input value (what the user sees)“10%30%2010”“10%30%2010”[Unparseable]“10%30%2010” “10%30%2010” @user-input-changed @model-value-changed @serialized-value-changed !5. On request: serializedValue is deserialized to modelValue, which will again be Unparseable[Unparseable]"{"type":"unparseable","viewValue":"10%30%2010"}"syncpreprocess2 \ No newline at end of file diff --git a/packages/ui/docs/fundamentals/systems/form/assets/FormatMixinDiagram-3.svg b/packages/ui/docs/fundamentals/systems/form/assets/FormatMixinDiagram-3.svg new file mode 100644 index 000000000..00ce1d667 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/form/assets/FormatMixinDiagram-3.svg @@ -0,0 +1,84 @@ + + + + + + Imperative(programmatic) + formattedValue + User(inputElement.input) + value + modelValue + serializedValue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + serializer + + delegate + sync + formatter + + + + changed + + 1 + 2 + 2 + 4 + + 3 + 1. modelValue is changed during runtime 2. modelValue is formatted to formattedValue and modelValue is serialized to serializedValue 3. formattedValue is reflected back to the user through the field value property4. Value is delegated back to native input value (what the user sees) + [DateObject] (day + 1)“30-11-2010”“2010-10-30T00:00:00.000Z” “30-11-2010”“30-10-2010” + @model-value-changed + + diff --git a/packages/ui/docs/fundamentals/systems/form/assets/h-output.js b/packages/ui/docs/fundamentals/systems/form/assets/h-output.js new file mode 100644 index 000000000..dd161464b --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/form/assets/h-output.js @@ -0,0 +1,155 @@ +import { css, html, LitElement } from 'lit'; +import { LionField } from '@lion/ui/form-core.js'; +import { LionFieldset } from '@lion/ui/fieldset.js'; + +export class HelperOutput extends LitElement { + static properties = { + field: Object, + show: Array, + title: String, + readyPromise: Object, + }; + + static styles = [ + css` + :host { + display: block; + margin-top: 8px; + } + + code { + font-size: 8px; + background-color: #eee; + } + + caption { + position: absolute; + top: 0; + width: 1px; + height: 1px; + overflow: hidden; + clip-path: inset(100%); + clip: rect(1px, 1px, 1px, 1px); + white-space: nowrap; + border: 0; + margin: 0; + padding: 0; + } + + table, + th, + td { + border-bottom: 1px solid rgb(204, 204, 204); + border-image: initial; + padding: 4px; + font-size: 12px; + border-left: none; + border-right: none; + text-align: left; + } + + td { + max-width: 200px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + table { + border-collapse: collapse; + } + + caption { + text-align: left; + } + `, + ]; + + firstUpdated(changedProperties) { + super.firstUpdated(changedProperties); + if (!this.field) { + // Fuzzy logic, but... practical + const prev = this.previousElementSibling; + if (prev instanceof LionField || prev instanceof LionFieldset) { + this.field = prev; + } + } + this.__rerender = this.__rerender.bind(this); + + const storyRoot = this.closest('[mdjs-story-name]') || this.parentElement; + + storyRoot.addEventListener('model-value-changed', this.__rerender); + storyRoot.addEventListener('mousemove', this.__rerender); + // this.field.addEventListener('blur', this.__rerender); + storyRoot.addEventListener('focusin', this.__rerender); + storyRoot.addEventListener('focusout', this.__rerender); + storyRoot.addEventListener('change', this.__rerender); + + if (this.field._inputNode.form) { + this.field._inputNode.form.addEventListener('submit', this.__rerender); + } + + if (this.readyPromise) { + this.readyPromise.then(() => { + this.__rerender(); + }); + } + } + + __rerender() { + setTimeout(() => { + const f = this.field; + this.field = null; + this.field = f; + }); + } + + // eslint-disable-next-line class-methods-use-this + __renderProp(prop) { + const field = this.field || {}; + let resultText = ''; + + if (typeof prop === 'string') { + const p = field[prop]; + if (typeof p === 'boolean') { + return p === true ? '✓' : ''; + } + if (typeof p === 'undefined') { + return html`undefined`; + } + if (typeof p === 'object' && p !== null) { + return JSON.stringify(p); + } + resultText = p; + } else { + resultText = prop.processor(field); + } + + return html`${resultText}`; + } + + constructor() { + super(); + this.title = 'States'; + } + + render() { + const computePropName = prop => (typeof prop === 'string' ? prop : prop.name); + return html` + + + + ${this.show.map(prop => html``)} + + + + ${this.show.map(prop => html``)} + +
+ ${this.title} +
${computePropName(prop)}
${this.__renderProp(prop)}
+ `; + } +} + +customElements.define('h-output', HelperOutput); diff --git a/packages/ui/docs/fundamentals/systems/form/formatting-and-parsing.md b/packages/ui/docs/fundamentals/systems/form/formatting-and-parsing.md new file mode 100644 index 000000000..40164c92e --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/form/formatting-and-parsing.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/form/formatting-and-parsing.md) diff --git a/packages/ui/docs/fundamentals/systems/form/index.md b/packages/ui/docs/fundamentals/systems/form/index.md new file mode 100644 index 000000000..ae991b559 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/form/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/form/index.md) diff --git a/packages/ui/docs/fundamentals/systems/form/interaction-states.md b/packages/ui/docs/fundamentals/systems/form/interaction-states.md new file mode 100644 index 000000000..47297dd55 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/form/interaction-states.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/form/interaction-states.md) diff --git a/packages/ui/docs/fundamentals/systems/form/model-value.md b/packages/ui/docs/fundamentals/systems/form/model-value.md new file mode 100644 index 000000000..33fce57f5 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/form/model-value.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/form/model-value.md) diff --git a/packages/ui/docs/fundamentals/systems/form/overview.md b/packages/ui/docs/fundamentals/systems/form/overview.md new file mode 100644 index 000000000..dba9eac9a --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/form/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/form/overview.md) diff --git a/packages/ui/docs/fundamentals/systems/form/styling.md b/packages/ui/docs/fundamentals/systems/form/styling.md new file mode 100644 index 000000000..ecf6a4e0f --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/form/styling.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/form/styling.md) diff --git a/packages/ui/docs/fundamentals/systems/form/use-cases.md b/packages/ui/docs/fundamentals/systems/form/use-cases.md new file mode 100644 index 000000000..e4c247573 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/form/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/form/use-cases.md) diff --git a/packages/ui/docs/fundamentals/systems/form/validate.md b/packages/ui/docs/fundamentals/systems/form/validate.md new file mode 100644 index 000000000..2d0fe854f --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/form/validate.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/form/validate.md) diff --git a/packages/ui/docs/fundamentals/systems/icon/index.md b/packages/ui/docs/fundamentals/systems/icon/index.md new file mode 100644 index 000000000..f7bc6dfe8 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/icon/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/icon/index.md) diff --git a/packages/ui/docs/fundamentals/systems/icon/overview.md b/packages/ui/docs/fundamentals/systems/icon/overview.md new file mode 100644 index 000000000..216a2f3ac --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/icon/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/icon/overview.md) diff --git a/packages/ui/docs/fundamentals/systems/index.md b/packages/ui/docs/fundamentals/systems/index.md new file mode 100644 index 000000000..96420e2c4 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/fundamentals/systems/index.md) diff --git a/packages/ui/docs/fundamentals/systems/localize/assets/all-locales.js b/packages/ui/docs/fundamentals/systems/localize/assets/all-locales.js new file mode 100755 index 000000000..7f80e69b7 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/localize/assets/all-locales.js @@ -0,0 +1,437 @@ +export default { + 'af-ZA': 'Afrikaans (South Africa)', + af: 'Afrikaans', + 'ak-GH': 'Akan (Ghana)', + ak: 'Akan', + 'sq-AL': 'Albanian (Albania)', + sq: 'Albanian', + 'am-ET': 'Amharic (Ethiopia)', + am: 'Amharic', + 'ar-DZ': 'Arabic (Algeria)', + 'ar-BH': 'Arabic (Bahrain)', + 'ar-EG': 'Arabic (Egypt)', + 'ar-IQ': 'Arabic (Iraq)', + 'ar-JO': 'Arabic (Jordan)', + 'ar-KW': 'Arabic (Kuwait)', + 'ar-LB': 'Arabic (Lebanon)', + 'ar-LY': 'Arabic (Libya)', + 'ar-MA': 'Arabic (Morocco)', + 'ar-OM': 'Arabic (Oman)', + 'ar-QA': 'Arabic (Qatar)', + 'ar-SA': 'Arabic (Saudi Arabia)', + 'ar-SD': 'Arabic (Sudan)', + 'ar-SY': 'Arabic (Syria)', + 'ar-TN': 'Arabic (Tunisia)', + 'ar-AE': 'Arabic (United Arab Emirates)', + 'ar-YE': 'Arabic (Yemen)', + ar: 'Arabic', + 'hy-AM': 'Armenian (Armenia)', + hy: 'Armenian', + 'as-IN': 'Assamese (India)', + as: 'Assamese', + 'asa-TZ': 'Asu (Tanzania)', + asa: 'Asu', + 'az-Cyrl': 'Azerbaijani (Cyrillic)', + 'az-Cyrl-AZ': 'Azerbaijani (Cyrillic, Azerbaijan)', + 'az-Latn': 'Azerbaijani (Latin)', + 'az-Latn-AZ': 'Azerbaijani (Latin, Azerbaijan)', + az: 'Azerbaijani', + 'bm-ML': 'Bambara (Mali)', + bm: 'Bambara', + 'eu-ES': 'Basque (Spain)', + eu: 'Basque', + 'be-BY': 'Belarusian (Belarus)', + be: 'Belarusian', + 'bem-ZM': 'Bemba (Zambia)', + bem: 'Bemba', + 'bez-TZ': 'Bena (Tanzania)', + bez: 'Bena', + 'bn-BD': 'Bengali (Bangladesh)', + 'bn-IN': 'Bengali (India)', + bn: 'Bengali', + 'bs-BA': 'Bosnian (Bosnia and Herzegovina)', + bs: 'Bosnian', + 'bg-BG': 'Bulgarian (Bulgaria)', + bg: 'Bulgarian', + 'my-MM': 'Burmese (Myanmar [Burma])', + my: 'Burmese', + 'yue-Hant-HK': 'Cantonese (Traditional, Hong Kong SAR China)', + 'ca-ES': 'Catalan (Spain)', + ca: 'Catalan', + 'tzm-Latn': 'Central Morocco Tamazight (Latin)', + 'tzm-Latn-MA': 'Central Morocco Tamazight (Latin, Morocco)', + tzm: 'Central Morocco Tamazight', + 'chr-US': 'Cherokee (United States)', + chr: 'Cherokee', + 'cgg-UG': 'Chiga (Uganda)', + cgg: 'Chiga', + 'zh-Hans': 'Chinese (Simplified Han)', + 'zh-Hans-CN': 'Chinese (Simplified Han, China)', + 'zh-Hans-HK': 'Chinese (Simplified Han, Hong Kong SAR China)', + 'zh-Hans-MO': 'Chinese (Simplified Han, Macau SAR China)', + 'zh-Hans-SG': 'Chinese (Simplified Han, Singapore)', + 'zh-Hant': 'Chinese (Traditional Han)', + 'zh-Hant-HK': 'Chinese (Traditional Han, Hong Kong SAR China)', + 'zh-Hant-MO': 'Chinese (Traditional Han, Macau SAR China)', + 'zh-Hant-TW': 'Chinese (Traditional Han, Taiwan)', + zh: 'Chinese', + 'kw-GB': 'Cornish (United Kingdom)', + kw: 'Cornish', + 'hr-HR': 'Croatian (Croatia)', + hr: 'Croatian', + 'cs-CZ': 'Czech (Czech Republic)', + cs: 'Czech', + 'da-DK': 'Danish (Denmark)', + da: 'Danish', + 'nl-BE': 'Dutch (Belgium)', + 'nl-NL': 'Dutch (Netherlands)', + nl: 'Dutch', + 'ebu-KE': 'Embu (Kenya)', + ebu: 'Embu', + 'en-AS': 'English (American Samoa)', + 'en-AU': 'English (Australia)', + 'en-BE': 'English (Belgium)', + 'en-BZ': 'English (Belize)', + 'en-BW': 'English (Botswana)', + 'en-CA': 'English (Canada)', + 'en-GU': 'English (Guam)', + 'en-HK': 'English (Hong Kong SAR China)', + 'en-IN': 'English (India)', + 'en-IE': 'English (Ireland)', + 'en-IL': 'English (Israel)', + 'en-JM': 'English (Jamaica)', + 'en-MT': 'English (Malta)', + 'en-MH': 'English (Marshall Islands)', + 'en-MU': 'English (Mauritius)', + 'en-NA': 'English (Namibia)', + 'en-NZ': 'English (New Zealand)', + 'en-MP': 'English (Northern Mariana Islands)', + 'en-PK': 'English (Pakistan)', + 'en-PH': 'English (Philippines)', + 'en-SG': 'English (Singapore)', + 'en-ZA': 'English (South Africa)', + 'en-TT': 'English (Trinidad and Tobago)', + 'en-UM': 'English (U.S. Minor Outlying Islands)', + 'en-VI': 'English (U.S. Virgin Islands)', + 'en-GB': 'English (United Kingdom)', + 'en-US': 'English (United States)', + 'en-ZW': 'English (Zimbabwe)', + en: 'English', + eo: 'Esperanto', + 'et-EE': 'Estonian (Estonia)', + et: 'Estonian', + 'ee-GH': 'Ewe (Ghana)', + 'ee-TG': 'Ewe (Togo)', + ee: 'Ewe', + 'fo-FO': 'Faroese (Faroe Islands)', + fo: 'Faroese', + 'fil-PH': 'Filipino (Philippines)', + fil: 'Filipino', + 'fi-FI': 'Finnish (Finland)', + fi: 'Finnish', + 'fr-BE': 'French (Belgium)', + 'fr-BJ': 'French (Benin)', + 'fr-BF': 'French (Burkina Faso)', + 'fr-BI': 'French (Burundi)', + 'fr-CM': 'French (Cameroon)', + 'fr-CA': 'French (Canada)', + 'fr-CF': 'French (Central African Republic)', + 'fr-TD': 'French (Chad)', + 'fr-KM': 'French (Comoros)', + 'fr-CG': 'French (Congo - Brazzaville)', + 'fr-CD': 'French (Congo - Kinshasa)', + 'fr-CI': 'French (Côte d’Ivoire)', + 'fr-DJ': 'French (Djibouti)', + 'fr-GQ': 'French (Equatorial Guinea)', + 'fr-FR': 'French (France)', + 'fr-GA': 'French (Gabon)', + 'fr-GP': 'French (Guadeloupe)', + 'fr-GN': 'French (Guinea)', + 'fr-LU': 'French (Luxembourg)', + 'fr-MG': 'French (Madagascar)', + 'fr-ML': 'French (Mali)', + 'fr-MQ': 'French (Martinique)', + 'fr-MC': 'French (Monaco)', + 'fr-NE': 'French (Niger)', + 'fr-RW': 'French (Rwanda)', + 'fr-RE': 'French (Réunion)', + 'fr-BL': 'French (Saint Barthélemy)', + 'fr-MF': 'French (Saint Martin)', + 'fr-SN': 'French (Senegal)', + 'fr-CH': 'French (Switzerland)', + 'fr-TG': 'French (Togo)', + fr: 'French', + 'ff-SN': 'Fulah (Senegal)', + ff: 'Fulah', + 'gl-ES': 'Galician (Spain)', + gl: 'Galician', + 'lg-UG': 'Ganda (Uganda)', + lg: 'Ganda', + 'ka-GE': 'Georgian (Georgia)', + ka: 'Georgian', + 'de-AT': 'German (Austria)', + 'de-BE': 'German (Belgium)', + 'de-DE': 'German (Germany)', + 'de-LI': 'German (Liechtenstein)', + 'de-LU': 'German (Luxembourg)', + 'de-CH': 'German (Switzerland)', + de: 'German', + 'el-CY': 'Greek (Cyprus)', + 'el-GR': 'Greek (Greece)', + el: 'Greek', + 'gu-IN': 'Gujarati (India)', + gu: 'Gujarati', + 'guz-KE': 'Gusii (Kenya)', + guz: 'Gusii', + 'ha-Latn': 'Hausa (Latin)', + 'ha-Latn-GH': 'Hausa (Latin, Ghana)', + 'ha-Latn-NE': 'Hausa (Latin, Niger)', + 'ha-Latn-NG': 'Hausa (Latin, Nigeria)', + ha: 'Hausa', + 'haw-US': 'Hawaiian (United States)', + haw: 'Hawaiian', + 'he-IL': 'Hebrew (Israel)', + he: 'Hebrew', + 'hi-IN': 'Hindi (India)', + hi: 'Hindi', + 'hu-HU': 'Hungarian (Hungary)', + hu: 'Hungarian', + 'is-IS': 'Icelandic (Iceland)', + is: 'Icelandic', + 'ig-NG': 'Igbo (Nigeria)', + ig: 'Igbo', + 'id-ID': 'Indonesian (Indonesia)', + id: 'Indonesian', + 'ga-IE': 'Irish (Ireland)', + ga: 'Irish', + 'it-IT': 'Italian (Italy)', + 'it-CH': 'Italian (Switzerland)', + it: 'Italian', + 'ja-JP': 'Japanese (Japan)', + ja: 'Japanese', + 'kea-CV': 'Kabuverdianu (Cape Verde)', + kea: 'Kabuverdianu', + 'kab-DZ': 'Kabyle (Algeria)', + kab: 'Kabyle', + 'kl-GL': 'Kalaallisut (Greenland)', + kl: 'Kalaallisut', + 'kln-KE': 'Kalenjin (Kenya)', + kln: 'Kalenjin', + 'kam-KE': 'Kamba (Kenya)', + kam: 'Kamba', + 'kn-IN': 'Kannada (India)', + kn: 'Kannada', + 'kk-Cyrl': 'Kazakh (Cyrillic)', + 'kk-Cyrl-KZ': 'Kazakh (Cyrillic, Kazakhstan)', + kk: 'Kazakh', + 'km-KH': 'Khmer (Cambodia)', + km: 'Khmer', + 'ki-KE': 'Kikuyu (Kenya)', + ki: 'Kikuyu', + 'rw-RW': 'Kinyarwanda (Rwanda)', + rw: 'Kinyarwanda', + 'kok-IN': 'Konkani (India)', + kok: 'Konkani', + 'ko-KR': 'Korean (South Korea)', + ko: 'Korean', + 'khq-ML': 'Koyra Chiini (Mali)', + khq: 'Koyra Chiini', + 'ses-ML': 'Koyraboro Senni (Mali)', + ses: 'Koyraboro Senni', + 'lag-TZ': 'Langi (Tanzania)', + lag: 'Langi', + 'lv-LV': 'Latvian (Latvia)', + lv: 'Latvian', + 'lt-LT': 'Lithuanian (Lithuania)', + lt: 'Lithuanian', + 'luo-KE': 'Luo (Kenya)', + luo: 'Luo', + 'luy-KE': 'Luyia (Kenya)', + luy: 'Luyia', + 'mk-MK': 'Macedonian (Macedonia)', + mk: 'Macedonian', + 'jmc-TZ': 'Machame (Tanzania)', + jmc: 'Machame', + 'kde-TZ': 'Makonde (Tanzania)', + kde: 'Makonde', + 'mg-MG': 'Malagasy (Madagascar)', + mg: 'Malagasy', + 'ms-BN': 'Malay (Brunei)', + 'ms-MY': 'Malay (Malaysia)', + ms: 'Malay', + 'ml-IN': 'Malayalam (India)', + ml: 'Malayalam', + 'mt-MT': 'Maltese (Malta)', + mt: 'Maltese', + 'gv-GB': 'Manx (United Kingdom)', + gv: 'Manx', + 'mr-IN': 'Marathi (India)', + mr: 'Marathi', + 'mas-KE': 'Masai (Kenya)', + 'mas-TZ': 'Masai (Tanzania)', + mas: 'Masai', + 'mer-KE': 'Meru (Kenya)', + mer: 'Meru', + 'mfe-MU': 'Morisyen (Mauritius)', + mfe: 'Morisyen', + 'naq-NA': 'Nama (Namibia)', + naq: 'Nama', + 'ne-IN': 'Nepali (India)', + 'ne-NP': 'Nepali (Nepal)', + ne: 'Nepali', + 'nd-ZW': 'North Ndebele (Zimbabwe)', + nd: 'North Ndebele', + 'nb-NO': 'Norwegian Bokmål (Norway)', + nb: 'Norwegian Bokmål', + 'nn-NO': 'Norwegian Nynorsk (Norway)', + nn: 'Norwegian Nynorsk', + 'nyn-UG': 'Nyankole (Uganda)', + nyn: 'Nyankole', + 'or-IN': 'Oriya (India)', + or: 'Oriya', + 'om-ET': 'Oromo (Ethiopia)', + 'om-KE': 'Oromo (Kenya)', + om: 'Oromo', + 'ps-AF': 'Pashto (Afghanistan)', + ps: 'Pashto', + 'fa-AF': 'Persian (Afghanistan)', + 'fa-IR': 'Persian (Iran)', + fa: 'Persian', + 'pl-PL': 'Polish (Poland)', + pl: 'Polish', + 'pt-BR': 'Portuguese (Brazil)', + 'pt-GW': 'Portuguese (Guinea-Bissau)', + 'pt-MZ': 'Portuguese (Mozambique)', + 'pt-PT': 'Portuguese (Portugal)', + pt: 'Portuguese', + 'pa-Arab': 'Punjabi (Arabic)', + 'pa-Arab-PK': 'Punjabi (Arabic, Pakistan)', + 'pa-Guru': 'Punjabi (Gurmukhi)', + 'pa-Guru-IN': 'Punjabi (Gurmukhi, India)', + pa: 'Punjabi', + 'ro-MD': 'Romanian (Moldova)', + 'ro-RO': 'Romanian (Romania)', + ro: 'Romanian', + 'rm-CH': 'Romansh (Switzerland)', + rm: 'Romansh', + 'rof-TZ': 'Rombo (Tanzania)', + rof: 'Rombo', + 'ru-MD': 'Russian (Moldova)', + 'ru-RU': 'Russian (Russia)', + 'ru-UA': 'Russian (Ukraine)', + ru: 'Russian', + 'rwk-TZ': 'Rwa (Tanzania)', + rwk: 'Rwa', + 'saq-KE': 'Samburu (Kenya)', + saq: 'Samburu', + 'sg-CF': 'Sango (Central African Republic)', + sg: 'Sango', + 'seh-MZ': 'Sena (Mozambique)', + seh: 'Sena', + 'sr-Cyrl': 'Serbian (Cyrillic)', + 'sr-Cyrl-BA': 'Serbian (Cyrillic, Bosnia and Herzegovina)', + 'sr-Cyrl-ME': 'Serbian (Cyrillic, Montenegro)', + 'sr-Cyrl-RS': 'Serbian (Cyrillic, Serbia)', + 'sr-Latn': 'Serbian (Latin)', + 'sr-Latn-BA': 'Serbian (Latin, Bosnia and Herzegovina)', + 'sr-Latn-ME': 'Serbian (Latin, Montenegro)', + 'sr-Latn-RS': 'Serbian (Latin, Serbia)', + sr: 'Serbian', + 'sn-ZW': 'Shona (Zimbabwe)', + sn: 'Shona', + 'ii-CN': 'Sichuan Yi (China)', + ii: 'Sichuan Yi', + 'si-LK': 'Sinhala (Sri Lanka)', + si: 'Sinhala', + 'sk-SK': 'Slovak (Slovakia)', + sk: 'Slovak', + 'sl-SI': 'Slovenian (Slovenia)', + sl: 'Slovenian', + 'xog-UG': 'Soga (Uganda)', + xog: 'Soga', + 'so-DJ': 'Somali (Djibouti)', + 'so-ET': 'Somali (Ethiopia)', + 'so-KE': 'Somali (Kenya)', + 'so-SO': 'Somali (Somalia)', + so: 'Somali', + 'es-AR': 'Spanish (Argentina)', + 'es-BO': 'Spanish (Bolivia)', + 'es-CL': 'Spanish (Chile)', + 'es-CO': 'Spanish (Colombia)', + 'es-CR': 'Spanish (Costa Rica)', + 'es-DO': 'Spanish (Dominican Republic)', + 'es-EC': 'Spanish (Ecuador)', + 'es-SV': 'Spanish (El Salvador)', + 'es-GQ': 'Spanish (Equatorial Guinea)', + 'es-GT': 'Spanish (Guatemala)', + 'es-HN': 'Spanish (Honduras)', + 'es-419': 'Spanish (Latin America)', + 'es-MX': 'Spanish (Mexico)', + 'es-NI': 'Spanish (Nicaragua)', + 'es-PA': 'Spanish (Panama)', + 'es-PY': 'Spanish (Paraguay)', + 'es-PE': 'Spanish (Peru)', + 'es-PR': 'Spanish (Puerto Rico)', + 'es-ES': 'Spanish (Spain)', + 'es-US': 'Spanish (United States)', + 'es-UY': 'Spanish (Uruguay)', + 'es-VE': 'Spanish (Venezuela)', + es: 'Spanish', + 'sw-KE': 'Swahili (Kenya)', + 'sw-TZ': 'Swahili (Tanzania)', + sw: 'Swahili', + 'sv-FI': 'Swedish (Finland)', + 'sv-SE': 'Swedish (Sweden)', + sv: 'Swedish', + 'gsw-CH': 'Swiss German (Switzerland)', + gsw: 'Swiss German', + 'shi-Latn': 'Tachelhit (Latin)', + 'shi-Latn-MA': 'Tachelhit (Latin, Morocco)', + 'shi-Tfng': 'Tachelhit (Tifinagh)', + 'shi-Tfng-MA': 'Tachelhit (Tifinagh, Morocco)', + shi: 'Tachelhit', + 'dav-KE': 'Taita (Kenya)', + dav: 'Taita', + 'ta-IN': 'Tamil (India)', + 'ta-LK': 'Tamil (Sri Lanka)', + ta: 'Tamil', + 'te-IN': 'Telugu (India)', + te: 'Telugu', + 'teo-KE': 'Teso (Kenya)', + 'teo-UG': 'Teso (Uganda)', + teo: 'Teso', + 'th-TH': 'Thai (Thailand)', + th: 'Thai', + 'bo-CN': 'Tibetan (China)', + 'bo-IN': 'Tibetan (India)', + bo: 'Tibetan', + 'ti-ER': 'Tigrinya (Eritrea)', + 'ti-ET': 'Tigrinya (Ethiopia)', + ti: 'Tigrinya', + 'to-TO': 'Tonga (Tonga)', + to: 'Tonga', + 'tr-TR': 'Turkish (Turkey)', + tr: 'Turkish', + 'uk-UA': 'Ukrainian (Ukraine)', + uk: 'Ukrainian', + 'ur-IN': 'Urdu (India)', + 'ur-PK': 'Urdu (Pakistan)', + ur: 'Urdu', + 'uz-Arab': 'Uzbek (Arabic)', + 'uz-Arab-AF': 'Uzbek (Arabic, Afghanistan)', + 'uz-Cyrl': 'Uzbek (Cyrillic)', + 'uz-Cyrl-UZ': 'Uzbek (Cyrillic, Uzbekistan)', + 'uz-Latn': 'Uzbek (Latin)', + 'uz-Latn-UZ': 'Uzbek (Latin, Uzbekistan)', + uz: 'Uzbek', + 'vi-VN': 'Vietnamese (Vietnam)', + vi: 'Vietnamese', + 'vun-TZ': 'Vunjo (Tanzania)', + vun: 'Vunjo', + 'cy-GB': 'Welsh (United Kingdom)', + cy: 'Welsh', + 'yo-NG': 'Yoruba (Nigeria)', + yo: 'Yoruba', + 'zu-ZA': 'Zulu (South Africa)', + zu: 'Zulu', +}; diff --git a/packages/ui/docs/fundamentals/systems/localize/assets/en-AU.js b/packages/ui/docs/fundamentals/systems/localize/assets/en-AU.js new file mode 100644 index 000000000..9300e50da --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/localize/assets/en-AU.js @@ -0,0 +1,6 @@ +import en from './en.js'; + +export default { + ...en, + body: 'I am from Australia', +}; diff --git a/packages/ui/docs/fundamentals/systems/localize/assets/en-GB.js b/packages/ui/docs/fundamentals/systems/localize/assets/en-GB.js new file mode 100644 index 000000000..261ddad38 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/localize/assets/en-GB.js @@ -0,0 +1,6 @@ +import en from './en.js'; + +export default { + ...en, + body: 'I am from England', +}; diff --git a/packages/ui/docs/fundamentals/systems/localize/assets/en-US.js b/packages/ui/docs/fundamentals/systems/localize/assets/en-US.js new file mode 100644 index 000000000..0caa1a031 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/localize/assets/en-US.js @@ -0,0 +1,6 @@ +import en from './en.js'; + +export default { + ...en, + body: 'I am from the USA', +}; diff --git a/packages/ui/docs/fundamentals/systems/localize/assets/en.js b/packages/ui/docs/fundamentals/systems/localize/assets/en.js new file mode 100644 index 000000000..c1ec9eb55 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/localize/assets/en.js @@ -0,0 +1,4 @@ +export default { + header: '{ locale }: Localize message example', + body: 'I am English', +}; diff --git a/packages/ui/docs/fundamentals/systems/localize/assets/nl-BE.js b/packages/ui/docs/fundamentals/systems/localize/assets/nl-BE.js new file mode 100644 index 000000000..2eb8bc771 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/localize/assets/nl-BE.js @@ -0,0 +1,6 @@ +import nl from './nl.js'; + +export default { + ...nl, + body: 'Ik kom uit Belgie', +}; diff --git a/packages/ui/docs/fundamentals/systems/localize/assets/nl-NL.js b/packages/ui/docs/fundamentals/systems/localize/assets/nl-NL.js new file mode 100644 index 000000000..0969817f8 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/localize/assets/nl-NL.js @@ -0,0 +1,6 @@ +import nl from './nl.js'; + +export default { + ...nl, + body: 'Ik kom uit Nederland', +}; diff --git a/packages/ui/docs/fundamentals/systems/localize/assets/nl.js b/packages/ui/docs/fundamentals/systems/localize/assets/nl.js new file mode 100644 index 000000000..e2da5015d --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/localize/assets/nl.js @@ -0,0 +1,4 @@ +export default { + header: '{ locale }: Localize message voorbeeld', + body: 'Ik kom uit Nederland', +}; diff --git a/packages/ui/docs/fundamentals/systems/localize/dates.md b/packages/ui/docs/fundamentals/systems/localize/dates.md new file mode 100644 index 000000000..f1da52e61 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/localize/dates.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/localize/dates.md) diff --git a/packages/ui/docs/fundamentals/systems/localize/index.md b/packages/ui/docs/fundamentals/systems/localize/index.md new file mode 100644 index 000000000..fc8d1702b --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/localize/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/localize/index.md) diff --git a/packages/ui/docs/fundamentals/systems/localize/numbers.md b/packages/ui/docs/fundamentals/systems/localize/numbers.md new file mode 100644 index 000000000..d11b5c9d0 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/localize/numbers.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/localize/numbers.md) diff --git a/packages/ui/docs/fundamentals/systems/localize/overview.md b/packages/ui/docs/fundamentals/systems/localize/overview.md new file mode 100644 index 000000000..b8c5c783c --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/localize/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/localize/overview.md) diff --git a/packages/ui/docs/fundamentals/systems/localize/rationale.md b/packages/ui/docs/fundamentals/systems/localize/rationale.md new file mode 100644 index 000000000..a746874a7 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/localize/rationale.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/localize/rationale.md) diff --git a/packages/ui/docs/fundamentals/systems/localize/text.md b/packages/ui/docs/fundamentals/systems/localize/text.md new file mode 100644 index 000000000..1a38a8397 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/localize/text.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/localize/text.md) diff --git a/packages/ui/docs/fundamentals/systems/localize/use-cases.md b/packages/ui/docs/fundamentals/systems/localize/use-cases.md new file mode 100644 index 000000000..319a0c99a --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/localize/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/localize/use-cases.md) diff --git a/packages/ui/docs/fundamentals/systems/overlays/assets/applyDemoOverlayStyles.js b/packages/ui/docs/fundamentals/systems/overlays/assets/applyDemoOverlayStyles.js new file mode 100644 index 000000000..fb9b4e7f9 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/overlays/assets/applyDemoOverlayStyles.js @@ -0,0 +1,22 @@ +import { css } from 'lit'; + +const applyDemoOverlayStyles = () => { + const demoOverlaysStyle = css` + .demo-overlay { + background-color: white; + border: 1px solid black; + padding: 10px; + } + + .demo-overlay--blocking { + background-color: lightgrey; + } + `; + + const styleTag = document.createElement('style'); + styleTag.setAttribute('data-demo-global-overlays', ''); + styleTag.textContent = demoOverlaysStyle.cssText; + document.head.appendChild(styleTag); +}; + +applyDemoOverlayStyles(); diff --git a/packages/ui/docs/fundamentals/systems/overlays/assets/demo-overlay-backdrop.js b/packages/ui/docs/fundamentals/systems/overlays/assets/demo-overlay-backdrop.js new file mode 100644 index 000000000..06aa651bf --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/overlays/assets/demo-overlay-backdrop.js @@ -0,0 +1,48 @@ +import { css, LitElement } from 'lit'; + +/** + * @typedef {import('../types/OverlayConfig').OverlayConfig} OverlayConfig + */ +class DemoOverlayBackdrop extends LitElement { + static get styles() { + return css` + :host { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1; + background-color: grey; + opacity: 0.3; + display: none; + } + + :host(.local-overlays__backdrop--visible) { + display: block; + } + + :host(.local-overlays__backdrop--animation-in) { + animation: local-overlays-backdrop-fade-in 300ms; + } + + :host(.local-overlays__backdrop--animation-out) { + animation: local-overlays-backdrop-fade-out 300ms; + opacity: 0; + } + + @keyframes local-overlays-backdrop-fade-in { + from { + opacity: 0; + } + } + + @keyframes local-overlays-backdrop-fade-out { + from { + opacity: 0.3; + } + } + `; + } +} +customElements.define('demo-overlay-backdrop', DemoOverlayBackdrop); diff --git a/packages/ui/docs/fundamentals/systems/overlays/assets/demo-overlay-system.js b/packages/ui/docs/fundamentals/systems/overlays/assets/demo-overlay-system.js new file mode 100644 index 000000000..30c1ec87e --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/overlays/assets/demo-overlay-system.js @@ -0,0 +1,42 @@ +import { html, LitElement } from 'lit'; +import { OverlayMixin } from '@lion/ui/overlays.js'; + +/** + * @typedef {import('../types/OverlayConfig').OverlayConfig} OverlayConfig + */ +class DemoOverlaySystem extends OverlayMixin(LitElement) { + // eslint-disable-next-line class-methods-use-this + _defineOverlayConfig() { + return /** @type {OverlayConfig} */ ({ + placementMode: 'global', + }); + } + + _setupOpenCloseListeners() { + super._setupOpenCloseListeners(); + + if (this._overlayInvokerNode) { + this._overlayInvokerNode.addEventListener('click', this.toggle); + } + } + + _teardownOpenCloseListeners() { + super._teardownOpenCloseListeners(); + + if (this._overlayInvokerNode) { + this._overlayInvokerNode.removeEventListener('click', this.toggle); + } + } + + render() { + return html` + + +
+ +
+
popup is ${this.opened ? 'opened' : 'closed'}
+ `; + } +} +customElements.define('demo-overlay-system', DemoOverlaySystem); diff --git a/packages/ui/docs/fundamentals/systems/overlays/assets/ref.js b/packages/ui/docs/fundamentals/systems/overlays/assets/ref.js new file mode 100644 index 000000000..fed6d4307 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/overlays/assets/ref.js @@ -0,0 +1,38 @@ +import { directive } from 'lit/directive.js'; + +/** + * @typedef {import('@lion/ui/core.js').PropertyPart} PropertyPart + */ + +/** @type {WeakSet} */ +const cache = new WeakSet(); + +/** + * @desc Allows to have references to different parts of your lit template. + * Without it, seperate renders to different nodes would have been needed, leading to more verbose, + * less readable and less performant code. + * Inspired by Angular template refeference variables: + * https://angular.io/guide/template-syntax#ref-vars + * + * @example + * ```js + * const refObj = {}; + * ``` + * ```html + * + * + * + *``` + * + * @param {object} refObj will be used to store reference to attribute names like #myElement + */ +export const ref = directive(refObj => (/** @type {PropertyPart} */ part) => { + if (cache.has(part.committer.element)) { + return; + } + cache.add(part.committer.element); + const attrName = part.committer.name; + const key = attrName.replace(/^#/, ''); + // eslint-disable-next-line no-param-reassign + refObj[key] = part.committer.element; +}); diff --git a/packages/ui/docs/fundamentals/systems/overlays/assets/umbrella-form.js b/packages/ui/docs/fundamentals/systems/overlays/assets/umbrella-form.js new file mode 100644 index 000000000..58d5f7e13 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/overlays/assets/umbrella-form.js @@ -0,0 +1,133 @@ +import { LitElement, html } from 'lit'; +import { Required, MinLength } from '@lion/ui/form-core.js'; +import '@lion/ui/define/lion-form.js'; +import '@lion/ui/define/lion-fieldset.js'; +import '@lion/ui/define/lion-input.js'; +import '@lion/ui/define/lion-input-date.js'; +import '@lion/ui/define/lion-input-datepicker.js'; +import '@lion/ui/define/lion-input-amount.js'; +import '@lion/ui/define/lion-input-iban.js'; +import '@lion/ui/define/lion-input-email.js'; +import '@lion/ui/define/lion-checkbox-group.js'; +import '@lion/ui/define/lion-radio-group.js'; +import '@lion/ui/define/lion-select.js'; +import '@lion/ui/define/lion-select-rich.js'; +import '@lion/ui/define/lion-input-range.js'; +import '@lion/ui/define/lion-textarea.js'; +import '@lion/ui/define/lion-button.js'; +import '@lion/ui/define/lion-input-tel.js'; +import '@lion/ui/define/lion-input-tel-dropdown.js'; + +export class UmbrellaForm extends LitElement { + get _lionFormNode() { + return /** @type {import('@lion/ui/form.js').LionForm} */ ( + this.shadowRoot?.querySelector('lion-form') + ); + } + + render() { + return html` + +
+ + + + + + + + + + + + + + + + + + + + + + + + + Red + Hotpink + Teal + + + + + + + + + + + +
+ Submit + { + const lionForm = this._lionFormNode; + lionForm.resetGroup(); + }} + >Reset +
+
+
+ `; + } +} +customElements.define('umbrella-form', UmbrellaForm); diff --git a/packages/ui/docs/fundamentals/systems/overlays/configuration.md b/packages/ui/docs/fundamentals/systems/overlays/configuration.md new file mode 100644 index 000000000..3393610fc --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/overlays/configuration.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/overlays/configuration.md) diff --git a/packages/ui/docs/fundamentals/systems/overlays/form-integration.md b/packages/ui/docs/fundamentals/systems/overlays/form-integration.md new file mode 100644 index 000000000..8a593f2f5 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/overlays/form-integration.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/overlays/form-integration.md) diff --git a/packages/ui/docs/fundamentals/systems/overlays/index.md b/packages/ui/docs/fundamentals/systems/overlays/index.md new file mode 100644 index 000000000..6f1218712 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/overlays/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/overlays/index.md) diff --git a/packages/ui/docs/fundamentals/systems/overlays/overview.md b/packages/ui/docs/fundamentals/systems/overlays/overview.md new file mode 100644 index 000000000..d3a3ac3f1 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/overlays/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/overlays/overview.md) diff --git a/packages/ui/docs/fundamentals/systems/overlays/rationale.md b/packages/ui/docs/fundamentals/systems/overlays/rationale.md new file mode 100644 index 000000000..c412d4add --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/overlays/rationale.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/overlays/rationale.md) diff --git a/packages/ui/docs/fundamentals/systems/overlays/scope.md b/packages/ui/docs/fundamentals/systems/overlays/scope.md new file mode 100644 index 000000000..1012d8b5f --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/overlays/scope.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/overlays/scope.md) diff --git a/packages/ui/docs/fundamentals/systems/overlays/use-cases.md b/packages/ui/docs/fundamentals/systems/overlays/use-cases.md new file mode 100644 index 000000000..f82581059 --- /dev/null +++ b/packages/ui/docs/fundamentals/systems/overlays/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/systems/overlays/use-cases.md) diff --git a/packages/ui/docs/fundamentals/tools/ajax/assets/naga.json b/packages/ui/docs/fundamentals/tools/ajax/assets/naga.json new file mode 100644 index 000000000..0445fee3f --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/ajax/assets/naga.json @@ -0,0 +1,9 @@ +{ + "id": "2", + "type": "Polar Bear Dog", + "name": "Naga", + "skin": { + "type": "fur", + "color": "white" + } +} diff --git a/packages/ui/docs/fundamentals/tools/ajax/assets/pabu.json b/packages/ui/docs/fundamentals/tools/ajax/assets/pabu.json new file mode 100644 index 000000000..9c693a143 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/ajax/assets/pabu.json @@ -0,0 +1,9 @@ +{ + "id": "4", + "type": "Fire Ferret", + "name": "Pabu", + "skin": { + "type": "fur", + "color": "red" + } +} diff --git a/packages/ui/docs/fundamentals/tools/ajax/index.md b/packages/ui/docs/fundamentals/tools/ajax/index.md new file mode 100644 index 000000000..0c1ef3b95 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/ajax/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/tools/ajax/index.md) diff --git a/packages/ui/docs/fundamentals/tools/ajax/overview.md b/packages/ui/docs/fundamentals/tools/ajax/overview.md new file mode 100644 index 000000000..e988816e0 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/ajax/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/tools/ajax/overview.md) diff --git a/packages/ui/docs/fundamentals/tools/ajax/use-cases.md b/packages/ui/docs/fundamentals/tools/ajax/use-cases.md new file mode 100644 index 000000000..fd0809178 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/ajax/use-cases.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/tools/ajax/use-cases.md) diff --git a/packages/ui/docs/fundamentals/tools/helpers/action-logger.md b/packages/ui/docs/fundamentals/tools/helpers/action-logger.md new file mode 100644 index 000000000..3c73eb034 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/helpers/action-logger.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/tools/helpers/action-logger.md) diff --git a/packages/ui/docs/fundamentals/tools/helpers/index.md b/packages/ui/docs/fundamentals/tools/helpers/index.md new file mode 100644 index 000000000..4811a99c0 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/helpers/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/tools/helpers/index.md) diff --git a/packages/ui/docs/fundamentals/tools/helpers/overview.md b/packages/ui/docs/fundamentals/tools/helpers/overview.md new file mode 100644 index 000000000..828d6e0db --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/helpers/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/tools/helpers/overview.md) diff --git a/packages/ui/docs/fundamentals/tools/index.md b/packages/ui/docs/fundamentals/tools/index.md new file mode 100644 index 000000000..cef8ef650 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/fundamentals/tools/index.md) diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/.gitignore b/packages/ui/docs/fundamentals/tools/singleton-manager/.gitignore new file mode 100644 index 000000000..2dde2e120 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/.gitignore @@ -0,0 +1 @@ +!**/* diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/demo-app.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/demo-app.js new file mode 100644 index 000000000..057392db9 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/demo-app.js @@ -0,0 +1,93 @@ +import { LitElement, css, html } from 'lit'; + +import './overlayCompatibility.js'; + +import 'page-a/page-a.js'; +import 'page-b/page-b.js'; + +class DemoApp extends LitElement { + constructor() { + super(); + this.page = 'A'; + } + + static get properties() { + return { + page: { type: String }, + }; + } + + static get styles() { + return css` + :host { + display: block; + max-width: 680px; + margin: 0 auto; + } + + nav { + padding: 0 10px 10px 10px; + } + + button { + border: none; + padding: 1rem 2rem; + background: #0069ed; + color: #fff; + font-size: 1rem; + cursor: pointer; + text-align: center; + transition: background 250ms ease-in-out, transform 150ms ease; + } + + button:hover, + button:focus { + background: #0053ba; + } + + button:focus { + outline: 1px solid #fff; + outline-offset: -4px; + } + + button:active { + transform: scale(0.99); + } + + button.active { + background: #33a43f; + } + + h1 { + text-align: center; + } + `; + } + + render() { + return html` +

Demo App

+ + ${this.page === 'A' ? html` ` : html` `} + `; + } +} + +customElements.define('demo-app', DemoApp); diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/index.md b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/index.md new file mode 100644 index 000000000..78179d0b1 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../../docs/fundamentals/tools/singleton-manager/example-complex/index.md) diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/overlays/index.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/overlays/index.js new file mode 100644 index 000000000..fb10ab782 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/overlays/index.js @@ -0,0 +1,30 @@ +export class OverlaysManager { + name = 'OverlayManager 1.x'; + + blockBody = false; + + constructor() { + this._setupBlocker(); + } + + _setupBlocker() { + const blocker = document.createElement('div'); + blocker.setAttribute('style', 'border: 2px solid #8d0606; margin: 10px; padding: 10px; width: 140px; text-align: center;'); + blocker.innerText = `Blocker for ${this.name}`; + + const target = document.getElementById('overlay-target'); + target.appendChild(blocker); + + this.blocker = blocker; + } + + block() { + this.blockBody = true; + this.blocker.style.backgroundColor = '#ff6161'; + } + + unBlock() { + this.blockBody = false; + this.blocker.style.backgroundColor = 'transparent'; + } +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/overlays/instance.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/overlays/instance.js new file mode 100644 index 000000000..caecda9ae --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/overlays/instance.js @@ -0,0 +1,4 @@ +import { OverlaysManager } from './index.js'; +import { singletonManager } from 'singleton-manager'; + +export const overlays = singletonManager.get('overlays::overlays::1.x') || new OverlaysManager(); diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/overlays/package.json b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/overlays/package.json new file mode 100644 index 000000000..0cbd136ec --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/overlays/package.json @@ -0,0 +1,4 @@ +{ + "name": "overlays", + "version": "1.0.0" +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-a/package.json b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-a/package.json new file mode 100644 index 000000000..2c77c4dee --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-a/package.json @@ -0,0 +1,7 @@ +{ + "name": "page-a", + "version": "1.0.0", + "dependencies": { + "overlays": "^1.0.0" + } +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-a/page-a.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-a/page-a.js new file mode 100644 index 000000000..714486f76 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-a/page-a.js @@ -0,0 +1,35 @@ +import { LitElement, html, css } from 'lit-element'; +import { overlays } from 'overlays/instance.js'; + +export class PageA extends LitElement { + static get styles() { + return css` + :host { + display: block; + padding: 10px; + border: 2px solid #ccc; + } + `; + } + + render() { + return html` +

I am page A

+

Overlays Status:

+

Name: ${overlays.name}

+

Blocked: ${overlays.blockBody}

+ + + + `; + } +} + + +customElements.define('page-a', PageA); diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/node_modules/overlays/index.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/node_modules/overlays/index.js new file mode 100644 index 000000000..5c5ae99b9 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/node_modules/overlays/index.js @@ -0,0 +1,30 @@ +export class OverlaysManager { + name = 'OverlayManager 2.x'; + + _blockBody = false; + + constructor() { + this._setupBlocker(); + } + + _setupBlocker() { + const blocker = document.createElement('div'); + blocker.setAttribute('style', 'border: 2px solid #8d0606; margin: 10px; padding: 10px; width: 140px; text-align: center;'); + blocker.innerText = `Blocker for ${this.name}`; + + const target = document.getElementById('overlay-target'); + target.appendChild(blocker); + + this.blocker = blocker; + } + + blockBody() { + this._blockBody = true; + this.blocker.style.backgroundColor = '#ff6161'; + } + + unBlockBody() { + this._blockBody = false; + this.blocker.style.backgroundColor = 'transparent'; + } +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/node_modules/overlays/instance.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/node_modules/overlays/instance.js new file mode 100644 index 000000000..c3e546133 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/node_modules/overlays/instance.js @@ -0,0 +1,4 @@ +import { OverlaysManager } from './index.js'; +import { singletonManager } from 'singleton-manager'; + +export const overlays = singletonManager.get('overlays::overlays::2.x') || new OverlaysManager(); diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/node_modules/overlays/package.json b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/node_modules/overlays/package.json new file mode 100644 index 000000000..5e83291f8 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/node_modules/overlays/package.json @@ -0,0 +1,4 @@ +{ + "name": "overlays", + "version": "2.0.0" +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/package.json b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/package.json new file mode 100644 index 000000000..cd0fdbef4 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/package.json @@ -0,0 +1,7 @@ +{ + "name": "page-b", + "version": "1.0.0", + "dependencies": { + "overlays": "^2.0.0" + } +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/page-b.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/page-b.js new file mode 100644 index 000000000..bc65fde08 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/page-b.js @@ -0,0 +1,49 @@ +import { LitElement, html, css } from 'lit-element'; +import { overlays } from 'overlays/instance.js'; + +export class PageB extends LitElement { + getInstance(sym, fallback) { + const ev = new CustomEvent('request-instance', { + detail: { key: sym }, + bubbles: true, + cancelable: true, + composed: true, + }); + this.dispatchEvent(ev); + return ev.detail.instance || fallback(); + } + + connectedCallback() { + super.connectedCallback(); + } + + static get styles() { + return css` + :host { + display: block; + padding: 10px; + border: 2px solid #ccc; + } + `; + } + + render() { + return html` +

I am page B

+

Overlays Status:

+

Name: ${overlays.name}

+

Blocked: ${overlays._blockBody}

+ + + + `; + } +} + +customElements.define('page-b', PageB); diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/overlayCompatibility.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/overlayCompatibility.js new file mode 100644 index 000000000..384537215 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/overlayCompatibility.js @@ -0,0 +1,70 @@ +import { OverlaysManager } from 'overlays'; +import { singletonManager } from 'singleton-manager'; +import { OverlaysManager as OverlaysManager2 } from './node_modules/page-b/node_modules/overlays/index.js'; + +let compatibleManager1; +let compatibleManager2; + +const blocker = document.createElement('div'); +blocker.setAttribute( + 'style', + 'border: 2px solid #8d0606; margin: 10px; padding: 10px; width: 140px; text-align: center;', +); +blocker.innerText = `Shared Blocker for App`; +document.body.appendChild(blocker); + +class CompatibleManager1 extends OverlaysManager { + constructor() { + super(); + this.name = 'Compatible1 from App'; + } + + block(sync = true) { + super.block(); + if (sync) { + compatibleManager2.blockBody(false); + } + } + + unBlock(sync = true) { + super.unBlock(); + if (sync) { + compatibleManager2.unBlockBody(false); + } + } + + _setupBlocker() { + this.blocker = blocker; + } +} + +class CompatibleManager2 extends OverlaysManager2 { + constructor() { + super(); + this.name = 'Compatible2 from App'; + } + + blockBody(sync = true) { + super.blockBody(); + if (sync) { + compatibleManager1.block(); + } + } + + unBlockBody(sync = true) { + super.unBlockBody(); + if (sync) { + compatibleManager1.unBlock(); + } + } + + _setupBlocker() { + this.blocker = blocker; + } +} + +compatibleManager1 = new CompatibleManager1(); +compatibleManager2 = new CompatibleManager2(); + +singletonManager.set('overlays::overlays::1.x', compatibleManager1); +singletonManager.set('overlays::overlays::2.x', compatibleManager2); diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/package.json b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/package.json new file mode 100644 index 000000000..5bf693476 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-complex/package.json @@ -0,0 +1,9 @@ +{ + "name": "fail-demo-app", + "version": "1.0.0", + "dependencies": { + "@lion/core": "0.13.6", + "page-a": "^1.0.0", + "page-b": "^1.0.0" + } +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/demo-app.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/demo-app.js new file mode 100644 index 000000000..802bb6d85 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/demo-app.js @@ -0,0 +1,91 @@ +import { LitElement, css, html } from 'lit'; + +import 'page-a/page-a.js'; +import 'page-b/page-b.js'; + +class DemoApp extends LitElement { + constructor() { + super(); + this.page = 'A'; + } + + static get properties() { + return { + page: { type: String }, + }; + } + + static get styles() { + return css` + :host { + display: block; + max-width: 680px; + margin: 0 auto; + } + + nav { + padding: 0 10px 10px 10px; + } + + button { + border: none; + padding: 1rem 2rem; + background: #0069ed; + color: #fff; + font-size: 1rem; + cursor: pointer; + text-align: center; + transition: background 250ms ease-in-out, transform 150ms ease; + } + + button:hover, + button:focus { + background: #0053ba; + } + + button:focus { + outline: 1px solid #fff; + outline-offset: -4px; + } + + button:active { + transform: scale(0.99); + } + + button.active { + background: #33a43f; + } + + h1 { + text-align: center; + } + `; + } + + render() { + return html` +

Demo App

+ + ${this.page === 'A' ? html` ` : html` `} + `; + } +} + +customElements.define('demo-app', DemoApp); diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/index.md b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/index.md new file mode 100644 index 000000000..0ed02b504 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../../docs/fundamentals/tools/singleton-manager/example-fail/index.md) diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/overlays/index.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/overlays/index.js new file mode 100644 index 000000000..011dff710 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/overlays/index.js @@ -0,0 +1,30 @@ +export class OverlaysManager { + name = 'OverlayManager 1.x'; + + blockBody = false; + + constructor() { + this._setupBlocker(); + } + + _setupBlocker() { + const blocker = document.createElement('div'); + blocker.setAttribute('style', 'border: 2px solid #8d0606; margin: 10px; padding: 10px; width: 180px; text-align: center;'); + blocker.innerText = `Blocker for ${this.name}`; + + const target = document.getElementById('overlay-target'); + target.appendChild(blocker); + + this.blocker = blocker; + } + + block() { + this.blockBody = true; + this.blocker.style.backgroundColor = '#ff6161'; + } + + unBlock() { + this.blockBody = false; + this.blocker.style.backgroundColor = 'transparent'; + } +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/overlays/instance.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/overlays/instance.js new file mode 100644 index 000000000..f73ca3b47 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/overlays/instance.js @@ -0,0 +1,3 @@ +import { OverlaysManager } from './index.js'; + +export const overlays = new OverlaysManager(); diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/overlays/package.json b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/overlays/package.json new file mode 100644 index 000000000..0cbd136ec --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/overlays/package.json @@ -0,0 +1,4 @@ +{ + "name": "overlays", + "version": "1.0.0" +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-a/package.json b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-a/package.json new file mode 100644 index 000000000..2c77c4dee --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-a/package.json @@ -0,0 +1,7 @@ +{ + "name": "page-a", + "version": "1.0.0", + "dependencies": { + "overlays": "^1.0.0" + } +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-a/page-a.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-a/page-a.js new file mode 100644 index 000000000..21fd3dde5 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-a/page-a.js @@ -0,0 +1,34 @@ +import { LitElement, html, css } from 'lit-element'; +import { overlays } from 'overlays/instance.js'; + +export class PageA extends LitElement { + static get styles() { + return css` + :host { + display: block; + padding: 10px; + border: 2px solid #ccc; + } + `; + } + + render() { + return html` +

I am page A

+

Overlays Status:

+

Name: ${overlays.name}

+

Blocked: ${overlays.blockBody}

+ + + + `; + } +} + +customElements.define('page-a', PageA); diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/node_modules/overlays/index.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/node_modules/overlays/index.js new file mode 100644 index 000000000..ea2f3b178 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/node_modules/overlays/index.js @@ -0,0 +1,30 @@ +export class OverlaysManager { + name = 'OverlayManager 2.x'; + + _blockBody = false; + + constructor() { + this._setupBlocker(); + } + + _setupBlocker() { + const blocker = document.createElement('div'); + blocker.setAttribute('style', 'border: 2px solid #8d0606; margin: 10px; padding: 10px; width: 180px; text-align: center;'); + blocker.innerText = `Blocker for ${this.name}`; + + const target = document.getElementById('overlay-target'); + target.appendChild(blocker); + + this.blocker = blocker; + } + + blockBody() { + this._blockBody = true; + this.blocker.style.backgroundColor = '#ff6161'; + } + + unBlockBody() { + this._blockBody = false; + this.blocker.style.backgroundColor = 'transparent'; + } +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/node_modules/overlays/instance.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/node_modules/overlays/instance.js new file mode 100644 index 000000000..f73ca3b47 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/node_modules/overlays/instance.js @@ -0,0 +1,3 @@ +import { OverlaysManager } from './index.js'; + +export const overlays = new OverlaysManager(); diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/node_modules/overlays/package.json b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/node_modules/overlays/package.json new file mode 100644 index 000000000..5e83291f8 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/node_modules/overlays/package.json @@ -0,0 +1,4 @@ +{ + "name": "overlays", + "version": "2.0.0" +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/package.json b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/package.json new file mode 100644 index 000000000..cd0fdbef4 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/package.json @@ -0,0 +1,7 @@ +{ + "name": "page-b", + "version": "1.0.0", + "dependencies": { + "overlays": "^2.0.0" + } +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/page-b.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/page-b.js new file mode 100644 index 000000000..94a90c0c0 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-b/page-b.js @@ -0,0 +1,34 @@ +import { LitElement, html, css } from 'lit-element'; +import { overlays } from 'overlays/instance.js'; + +export class PageB extends LitElement { + static get styles() { + return css` + :host { + display: block; + padding: 10px; + border: 2px solid #ccc; + } + `; + } + + render() { + return html` +

I am page B

+

Overlays Status:

+

Name: ${overlays.name}

+

Blocked: ${overlays._blockBody}

+ + + + `; + } +} + +customElements.define('page-b', PageB); diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/package.json b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/package.json new file mode 100644 index 000000000..5bf693476 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-fail/package.json @@ -0,0 +1,9 @@ +{ + "name": "fail-demo-app", + "version": "1.0.0", + "dependencies": { + "@lion/core": "0.13.6", + "page-a": "^1.0.0", + "page-b": "^1.0.0" + } +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/demo-app.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/demo-app.js new file mode 100644 index 000000000..057392db9 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/demo-app.js @@ -0,0 +1,93 @@ +import { LitElement, css, html } from 'lit'; + +import './overlayCompatibility.js'; + +import 'page-a/page-a.js'; +import 'page-b/page-b.js'; + +class DemoApp extends LitElement { + constructor() { + super(); + this.page = 'A'; + } + + static get properties() { + return { + page: { type: String }, + }; + } + + static get styles() { + return css` + :host { + display: block; + max-width: 680px; + margin: 0 auto; + } + + nav { + padding: 0 10px 10px 10px; + } + + button { + border: none; + padding: 1rem 2rem; + background: #0069ed; + color: #fff; + font-size: 1rem; + cursor: pointer; + text-align: center; + transition: background 250ms ease-in-out, transform 150ms ease; + } + + button:hover, + button:focus { + background: #0053ba; + } + + button:focus { + outline: 1px solid #fff; + outline-offset: -4px; + } + + button:active { + transform: scale(0.99); + } + + button.active { + background: #33a43f; + } + + h1 { + text-align: center; + } + `; + } + + render() { + return html` +

Demo App

+ + ${this.page === 'A' ? html` ` : html` `} + `; + } +} + +customElements.define('demo-app', DemoApp); diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/index.md b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/index.md new file mode 100644 index 000000000..be7f911ce --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../../docs/fundamentals/tools/singleton-manager/example-success/index.md) diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/overlays/index.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/overlays/index.js new file mode 100644 index 000000000..fb10ab782 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/overlays/index.js @@ -0,0 +1,30 @@ +export class OverlaysManager { + name = 'OverlayManager 1.x'; + + blockBody = false; + + constructor() { + this._setupBlocker(); + } + + _setupBlocker() { + const blocker = document.createElement('div'); + blocker.setAttribute('style', 'border: 2px solid #8d0606; margin: 10px; padding: 10px; width: 140px; text-align: center;'); + blocker.innerText = `Blocker for ${this.name}`; + + const target = document.getElementById('overlay-target'); + target.appendChild(blocker); + + this.blocker = blocker; + } + + block() { + this.blockBody = true; + this.blocker.style.backgroundColor = '#ff6161'; + } + + unBlock() { + this.blockBody = false; + this.blocker.style.backgroundColor = 'transparent'; + } +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/overlays/instance.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/overlays/instance.js new file mode 100644 index 000000000..caecda9ae --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/overlays/instance.js @@ -0,0 +1,4 @@ +import { OverlaysManager } from './index.js'; +import { singletonManager } from 'singleton-manager'; + +export const overlays = singletonManager.get('overlays::overlays::1.x') || new OverlaysManager(); diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/overlays/package.json b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/overlays/package.json new file mode 100644 index 000000000..0cbd136ec --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/overlays/package.json @@ -0,0 +1,4 @@ +{ + "name": "overlays", + "version": "1.0.0" +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-a/package.json b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-a/package.json new file mode 100644 index 000000000..2c77c4dee --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-a/package.json @@ -0,0 +1,7 @@ +{ + "name": "page-a", + "version": "1.0.0", + "dependencies": { + "overlays": "^1.0.0" + } +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-a/page-a.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-a/page-a.js new file mode 100644 index 000000000..21fd3dde5 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-a/page-a.js @@ -0,0 +1,34 @@ +import { LitElement, html, css } from 'lit-element'; +import { overlays } from 'overlays/instance.js'; + +export class PageA extends LitElement { + static get styles() { + return css` + :host { + display: block; + padding: 10px; + border: 2px solid #ccc; + } + `; + } + + render() { + return html` +

I am page A

+

Overlays Status:

+

Name: ${overlays.name}

+

Blocked: ${overlays.blockBody}

+ + + + `; + } +} + +customElements.define('page-a', PageA); diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/node_modules/overlays/index.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/node_modules/overlays/index.js new file mode 100644 index 000000000..a2e56314e --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/node_modules/overlays/index.js @@ -0,0 +1,30 @@ +export class OverlaysManager { + name = 'OverlayManager 2.x'; + + blockBody = false; + + constructor() { + this._setupBlocker(); + } + + _setupBlocker() { + const blocker = document.createElement('div'); + blocker.setAttribute('style', 'border: 2px solid #8d0606; margin: 10px; padding: 10px; width: 140px; text-align: center;'); + blocker.innerText = `Blocker for ${this.name}`; + + const target = document.getElementById('overlay-target'); + target.appendChild(blocker); + + this.blocker = blocker; + } + + blockingBody() { + this.blockBody = true; + this.blocker.style.backgroundColor = '#ff6161'; + } + + unBlockingBody() { + this.blockBody = false; + this.blocker.style.backgroundColor = 'transparent'; + } +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/node_modules/overlays/instance.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/node_modules/overlays/instance.js new file mode 100644 index 000000000..c3e546133 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/node_modules/overlays/instance.js @@ -0,0 +1,4 @@ +import { OverlaysManager } from './index.js'; +import { singletonManager } from 'singleton-manager'; + +export const overlays = singletonManager.get('overlays::overlays::2.x') || new OverlaysManager(); diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/node_modules/overlays/package.json b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/node_modules/overlays/package.json new file mode 100644 index 000000000..5e83291f8 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/node_modules/overlays/package.json @@ -0,0 +1,4 @@ +{ + "name": "overlays", + "version": "2.0.0" +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/package.json b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/package.json new file mode 100644 index 000000000..cd0fdbef4 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/package.json @@ -0,0 +1,7 @@ +{ + "name": "page-b", + "version": "1.0.0", + "dependencies": { + "overlays": "^2.0.0" + } +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/page-b.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/page-b.js new file mode 100644 index 000000000..41fa08ad4 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-b/page-b.js @@ -0,0 +1,34 @@ +import { LitElement, html, css } from 'lit-element'; +import { overlays } from 'overlays/instance.js'; + +export class PageB extends LitElement { + static get styles() { + return css` + :host { + display: block; + padding: 10px; + border: 2px solid #ccc; + } + `; + } + + render() { + return html` +

I am page B

+

Overlays Status:

+

Name: ${overlays.name}

+

Blocked: ${overlays.blockBody}

+ + + + `; + } +} + +customElements.define('page-b', PageB); diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/overlayCompatibility.js b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/overlayCompatibility.js new file mode 100644 index 000000000..36a9c73c0 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/overlayCompatibility.js @@ -0,0 +1,23 @@ +import { OverlaysManager } from 'overlays'; +import { singletonManager } from 'singleton-manager'; + +class CompatibleManager extends OverlaysManager { + constructor() { + super(); + this.name = 'Compatible from App'; + this.blocker.innerText = `Blocker for ${this.name}`; + } + + blockingBody() { + this.block(); + } + + unBlockingBody() { + this.unBlock(); + } +} + +const compatibleManager = new CompatibleManager(); + +singletonManager.set('overlays::overlays::1.x', compatibleManager); +singletonManager.set('overlays::overlays::2.x', compatibleManager); diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/package.json b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/package.json new file mode 100644 index 000000000..5bf693476 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/example-success/package.json @@ -0,0 +1,9 @@ +{ + "name": "fail-demo-app", + "version": "1.0.0", + "dependencies": { + "@lion/core": "0.13.6", + "page-a": "^1.0.0", + "page-b": "^1.0.0" + } +} diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/index.md b/packages/ui/docs/fundamentals/tools/singleton-manager/index.md new file mode 100644 index 000000000..c596d52a8 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/tools/singleton-manager/index.md) diff --git a/packages/ui/docs/fundamentals/tools/singleton-manager/overview.md b/packages/ui/docs/fundamentals/tools/singleton-manager/overview.md new file mode 100644 index 000000000..bcb433e30 --- /dev/null +++ b/packages/ui/docs/fundamentals/tools/singleton-manager/overview.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../../docs/fundamentals/tools/singleton-manager/overview.md) diff --git a/packages/ui/docs/guides/how-to/create-a-custom-field.md b/packages/ui/docs/guides/how-to/create-a-custom-field.md new file mode 100644 index 000000000..abf05508a --- /dev/null +++ b/packages/ui/docs/guides/how-to/create-a-custom-field.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/guides/how-to/create-a-custom-field.md) diff --git a/packages/ui/docs/guides/how-to/extend-a-native-input.md b/packages/ui/docs/guides/how-to/extend-a-native-input.md new file mode 100644 index 000000000..732d29738 --- /dev/null +++ b/packages/ui/docs/guides/how-to/extend-a-native-input.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/guides/how-to/extend-a-native-input.md) diff --git a/packages/ui/docs/guides/how-to/get-started.md b/packages/ui/docs/guides/how-to/get-started.md new file mode 100644 index 000000000..c6c257997 --- /dev/null +++ b/packages/ui/docs/guides/how-to/get-started.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/guides/how-to/get-started.md) diff --git a/packages/ui/docs/guides/how-to/index.md b/packages/ui/docs/guides/how-to/index.md new file mode 100644 index 000000000..f277f8c7c --- /dev/null +++ b/packages/ui/docs/guides/how-to/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/guides/how-to/index.md) diff --git a/packages/ui/docs/guides/index.md b/packages/ui/docs/guides/index.md new file mode 100644 index 000000000..fda6dd4b0 --- /dev/null +++ b/packages/ui/docs/guides/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../docs/guides/index.md) diff --git a/packages/ui/docs/guides/principles/definitions-and-terms.md b/packages/ui/docs/guides/principles/definitions-and-terms.md new file mode 100644 index 000000000..6ddd68b5b --- /dev/null +++ b/packages/ui/docs/guides/principles/definitions-and-terms.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/guides/principles/definitions-and-terms.md) diff --git a/packages/ui/docs/guides/principles/index.md b/packages/ui/docs/guides/principles/index.md new file mode 100644 index 000000000..782a0ca05 --- /dev/null +++ b/packages/ui/docs/guides/principles/index.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/guides/principles/index.md) diff --git a/packages/ui/docs/guides/principles/scoped-elements.md b/packages/ui/docs/guides/principles/scoped-elements.md new file mode 100644 index 000000000..fe49e687c --- /dev/null +++ b/packages/ui/docs/guides/principles/scoped-elements.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/guides/principles/scoped-elements.md) diff --git a/packages/ui/docs/guides/principles/styling.md b/packages/ui/docs/guides/principles/styling.md new file mode 100644 index 000000000..b642e31f1 --- /dev/null +++ b/packages/ui/docs/guides/principles/styling.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/guides/principles/styling.md) diff --git a/packages/ui/docs/guides/principles/subclasser-apis.md b/packages/ui/docs/guides/principles/subclasser-apis.md new file mode 100644 index 000000000..62c703759 --- /dev/null +++ b/packages/ui/docs/guides/principles/subclasser-apis.md @@ -0,0 +1 @@ +[=> See Source <=](../../../../../docs/guides/principles/subclasser-apis.md) diff --git a/packages/ui/docs/override.js b/packages/ui/docs/override.js new file mode 100644 index 000000000..552d7c9b9 --- /dev/null +++ b/packages/ui/docs/override.js @@ -0,0 +1,15 @@ +/** + * This will override all md files within the folder to only contain [=> See Source <=](../path/to/source.md) + */ + +import { writeFile } from 'fs/promises'; +import glob from 'glob'; + +const allFiles = glob.sync('**/*.md', { nodir: true }); +const files = allFiles; + +for (const filePath of files) { + const insert = 3 + filePath.match(/\//g).length; + const srcPath = `${'../'.repeat(insert)}docs/${filePath}`; + await writeFile(filePath, `[=> See Source <=](${srcPath})`); +}