@lo-tek/interfaces 0.0.0 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3254 -0
- package/LICENSE +21 -0
- package/README.md +128 -1
- package/agent/astro.md +400 -0
- package/agent/bundles.md +429 -0
- package/agent/datastar.md +409 -0
- package/agent/html.md +388 -0
- package/agent/react.md +440 -0
- package/agent/templates.md +472 -0
- package/core/lotek-core.wasm +0 -0
- package/core/lotek.wasm +0 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +14 -0
- package/dist/cli.js.map +1 -0
- package/dist/components/css/accordion/accordion.d.ts +37 -0
- package/dist/components/css/accordion/accordion.d.ts.map +1 -0
- package/dist/components/css/accordion/accordion.js +31 -0
- package/dist/components/css/accordion/accordion.js.map +1 -0
- package/dist/components/css/alert/alert.d.ts +35 -0
- package/dist/components/css/alert/alert.d.ts.map +1 -0
- package/dist/components/css/alert/alert.js +29 -0
- package/dist/components/css/alert/alert.js.map +1 -0
- package/dist/components/css/avatar/avatar.d.ts +40 -0
- package/dist/components/css/avatar/avatar.d.ts.map +1 -0
- package/dist/components/css/avatar/avatar.js +30 -0
- package/dist/components/css/avatar/avatar.js.map +1 -0
- package/dist/components/css/badge/badge.d.ts +24 -0
- package/dist/components/css/badge/badge.d.ts.map +1 -0
- package/dist/components/css/badge/badge.js +24 -0
- package/dist/components/css/badge/badge.js.map +1 -0
- package/dist/components/css/breadcrumbs/breadcrumbs.d.ts +26 -0
- package/dist/components/css/breadcrumbs/breadcrumbs.d.ts.map +1 -0
- package/dist/components/css/breadcrumbs/breadcrumbs.js +24 -0
- package/dist/components/css/breadcrumbs/breadcrumbs.js.map +1 -0
- package/dist/components/css/button/button.d.ts +26 -0
- package/dist/components/css/button/button.d.ts.map +1 -0
- package/dist/components/css/button/button.js +25 -0
- package/dist/components/css/button/button.js.map +1 -0
- package/dist/components/css/card/card.d.ts +36 -0
- package/dist/components/css/card/card.d.ts.map +1 -0
- package/dist/components/css/card/card.js +28 -0
- package/dist/components/css/card/card.js.map +1 -0
- package/dist/components/css/checkbox/checkbox.d.ts +32 -0
- package/dist/components/css/checkbox/checkbox.d.ts.map +1 -0
- package/dist/components/css/checkbox/checkbox.js +27 -0
- package/dist/components/css/checkbox/checkbox.js.map +1 -0
- package/dist/components/css/divider/divider.d.ts +29 -0
- package/dist/components/css/divider/divider.d.ts.map +1 -0
- package/dist/components/css/divider/divider.js +23 -0
- package/dist/components/css/divider/divider.js.map +1 -0
- package/dist/components/css/error-text/error-text.d.ts +24 -0
- package/dist/components/css/error-text/error-text.d.ts.map +1 -0
- package/dist/components/css/error-text/error-text.js +18 -0
- package/dist/components/css/error-text/error-text.js.map +1 -0
- package/dist/components/css/fieldset/fieldset.d.ts +55 -0
- package/dist/components/css/fieldset/fieldset.d.ts.map +1 -0
- package/dist/components/css/fieldset/fieldset.js +39 -0
- package/dist/components/css/fieldset/fieldset.js.map +1 -0
- package/dist/components/css/file-upload/file-upload.d.ts +41 -0
- package/dist/components/css/file-upload/file-upload.d.ts.map +1 -0
- package/dist/components/css/file-upload/file-upload.js +32 -0
- package/dist/components/css/file-upload/file-upload.js.map +1 -0
- package/dist/components/css/heading/heading.d.ts +29 -0
- package/dist/components/css/heading/heading.d.ts.map +1 -0
- package/dist/components/css/heading/heading.js +23 -0
- package/dist/components/css/heading/heading.js.map +1 -0
- package/dist/components/css/help-text/help-text.d.ts +24 -0
- package/dist/components/css/help-text/help-text.d.ts.map +1 -0
- package/dist/components/css/help-text/help-text.js +23 -0
- package/dist/components/css/help-text/help-text.js.map +1 -0
- package/dist/components/css/icon/icon.d.ts +34 -0
- package/dist/components/css/icon/icon.d.ts.map +1 -0
- package/dist/components/css/icon/icon.js +25 -0
- package/dist/components/css/icon/icon.js.map +1 -0
- package/dist/components/css/input/input.d.ts +40 -0
- package/dist/components/css/input/input.d.ts.map +1 -0
- package/dist/components/css/input/input.js +45 -0
- package/dist/components/css/input/input.js.map +1 -0
- package/dist/components/css/label/label.d.ts +33 -0
- package/dist/components/css/label/label.d.ts.map +1 -0
- package/dist/components/css/label/label.js +23 -0
- package/dist/components/css/label/label.js.map +1 -0
- package/dist/components/css/link/link.d.ts +28 -0
- package/dist/components/css/link/link.d.ts.map +1 -0
- package/dist/components/css/link/link.js +20 -0
- package/dist/components/css/link/link.js.map +1 -0
- package/dist/components/css/list/list.d.ts +31 -0
- package/dist/components/css/list/list.d.ts.map +1 -0
- package/dist/components/css/list/list.js +25 -0
- package/dist/components/css/list/list.js.map +1 -0
- package/dist/components/css/pagination/pagination.d.ts +27 -0
- package/dist/components/css/pagination/pagination.d.ts.map +1 -0
- package/dist/components/css/pagination/pagination.js +25 -0
- package/dist/components/css/pagination/pagination.js.map +1 -0
- package/dist/components/css/paragraph/paragraph.d.ts +36 -0
- package/dist/components/css/paragraph/paragraph.d.ts.map +1 -0
- package/dist/components/css/paragraph/paragraph.js +26 -0
- package/dist/components/css/paragraph/paragraph.js.map +1 -0
- package/dist/components/css/progress/progress.d.ts +53 -0
- package/dist/components/css/progress/progress.d.ts.map +1 -0
- package/dist/components/css/progress/progress.js +38 -0
- package/dist/components/css/progress/progress.js.map +1 -0
- package/dist/components/css/radio/radio.d.ts +32 -0
- package/dist/components/css/radio/radio.d.ts.map +1 -0
- package/dist/components/css/radio/radio.js +27 -0
- package/dist/components/css/radio/radio.js.map +1 -0
- package/dist/components/css/search/search.d.ts +34 -0
- package/dist/components/css/search/search.d.ts.map +1 -0
- package/dist/components/css/search/search.js +32 -0
- package/dist/components/css/search/search.js.map +1 -0
- package/dist/components/css/select/select.d.ts +40 -0
- package/dist/components/css/select/select.d.ts.map +1 -0
- package/dist/components/css/select/select.js +31 -0
- package/dist/components/css/select/select.js.map +1 -0
- package/dist/components/css/shared.d.ts +90 -0
- package/dist/components/css/shared.d.ts.map +1 -0
- package/dist/components/css/shared.js +167 -0
- package/dist/components/css/shared.js.map +1 -0
- package/dist/components/css/skeleton/skeleton.d.ts +29 -0
- package/dist/components/css/skeleton/skeleton.d.ts.map +1 -0
- package/dist/components/css/skeleton/skeleton.js +23 -0
- package/dist/components/css/skeleton/skeleton.js.map +1 -0
- package/dist/components/css/skip-link/skip-link.d.ts +18 -0
- package/dist/components/css/skip-link/skip-link.d.ts.map +1 -0
- package/dist/components/css/skip-link/skip-link.js +16 -0
- package/dist/components/css/skip-link/skip-link.js.map +1 -0
- package/dist/components/css/spinner/spinner.d.ts +33 -0
- package/dist/components/css/spinner/spinner.d.ts.map +1 -0
- package/dist/components/css/spinner/spinner.js +25 -0
- package/dist/components/css/spinner/spinner.js.map +1 -0
- package/dist/components/css/sr-only/sr-only.d.ts +17 -0
- package/dist/components/css/sr-only/sr-only.d.ts.map +1 -0
- package/dist/components/css/sr-only/sr-only.js +15 -0
- package/dist/components/css/sr-only/sr-only.js.map +1 -0
- package/dist/components/css/switch/switch.d.ts +37 -0
- package/dist/components/css/switch/switch.d.ts.map +1 -0
- package/dist/components/css/switch/switch.js +29 -0
- package/dist/components/css/switch/switch.js.map +1 -0
- package/dist/components/css/table/table.d.ts +76 -0
- package/dist/components/css/table/table.d.ts.map +1 -0
- package/dist/components/css/table/table.js +59 -0
- package/dist/components/css/table/table.js.map +1 -0
- package/dist/components/css/tag/tag.d.ts +35 -0
- package/dist/components/css/tag/tag.d.ts.map +1 -0
- package/dist/components/css/tag/tag.js +27 -0
- package/dist/components/css/tag/tag.js.map +1 -0
- package/dist/components/css/textarea/textarea.d.ts +23 -0
- package/dist/components/css/textarea/textarea.d.ts.map +1 -0
- package/dist/components/css/textarea/textarea.js +18 -0
- package/dist/components/css/textarea/textarea.js.map +1 -0
- package/dist/components/css/toggle-group/toggle-group.d.ts +31 -0
- package/dist/components/css/toggle-group/toggle-group.d.ts.map +1 -0
- package/dist/components/css/toggle-group/toggle-group.js +29 -0
- package/dist/components/css/toggle-group/toggle-group.js.map +1 -0
- package/dist/components/css/tooltip/tooltip.d.ts +31 -0
- package/dist/components/css/tooltip/tooltip.d.ts.map +1 -0
- package/dist/components/css/tooltip/tooltip.js +29 -0
- package/dist/components/css/tooltip/tooltip.js.map +1 -0
- package/dist/components/default-texts.d.ts +35 -0
- package/dist/components/default-texts.d.ts.map +1 -0
- package/dist/components/default-texts.js +35 -0
- package/dist/components/default-texts.js.map +1 -0
- package/dist/components/events.d.ts +77 -0
- package/dist/components/events.d.ts.map +1 -0
- package/dist/components/events.js +3 -0
- package/dist/components/events.js.map +1 -0
- package/dist/components/frame/dialog/dialog.d.ts +122 -0
- package/dist/components/frame/dialog/dialog.d.ts.map +1 -0
- package/dist/components/frame/dialog/dialog.js +112 -0
- package/dist/components/frame/dialog/dialog.js.map +1 -0
- package/dist/components/frame/dialog/lt-dialog.d.ts +104 -0
- package/dist/components/frame/dialog/lt-dialog.d.ts.map +1 -0
- package/dist/components/frame/dialog/lt-dialog.js +431 -0
- package/dist/components/frame/dialog/lt-dialog.js.map +1 -0
- package/dist/components/frame/error-summary/error-summary.d.ts +40 -0
- package/dist/components/frame/error-summary/error-summary.d.ts.map +1 -0
- package/dist/components/frame/error-summary/error-summary.js +32 -0
- package/dist/components/frame/error-summary/error-summary.js.map +1 -0
- package/dist/components/frame/error-summary/lt-error-summary.d.ts +82 -0
- package/dist/components/frame/error-summary/lt-error-summary.d.ts.map +1 -0
- package/dist/components/frame/error-summary/lt-error-summary.js +302 -0
- package/dist/components/frame/error-summary/lt-error-summary.js.map +1 -0
- package/dist/components/frame/field/field-core.d.ts +92 -0
- package/dist/components/frame/field/field-core.d.ts.map +1 -0
- package/dist/components/frame/field/field-core.js +63 -0
- package/dist/components/frame/field/field-core.js.map +1 -0
- package/dist/components/frame/field/lt-field.d.ts +173 -0
- package/dist/components/frame/field/lt-field.d.ts.map +1 -0
- package/dist/components/frame/field/lt-field.js +580 -0
- package/dist/components/frame/field/lt-field.js.map +1 -0
- package/dist/components/frame/popover/lt-popover.d.ts +132 -0
- package/dist/components/frame/popover/lt-popover.d.ts.map +1 -0
- package/dist/components/frame/popover/lt-popover.js +490 -0
- package/dist/components/frame/popover/lt-popover.js.map +1 -0
- package/dist/components/frame/popover/popover.d.ts +49 -0
- package/dist/components/frame/popover/popover.d.ts.map +1 -0
- package/dist/components/frame/popover/popover.js +64 -0
- package/dist/components/frame/popover/popover.js.map +1 -0
- package/dist/components/frame/session-timeout/lt-session-timeout.d.ts +198 -0
- package/dist/components/frame/session-timeout/lt-session-timeout.d.ts.map +1 -0
- package/dist/components/frame/session-timeout/lt-session-timeout.js +573 -0
- package/dist/components/frame/session-timeout/lt-session-timeout.js.map +1 -0
- package/dist/components/frame/session-timeout/session-timeout.d.ts +113 -0
- package/dist/components/frame/session-timeout/session-timeout.d.ts.map +1 -0
- package/dist/components/frame/session-timeout/session-timeout.js +101 -0
- package/dist/components/frame/session-timeout/session-timeout.js.map +1 -0
- package/dist/components/frame/suggestion/lt-suggestion.d.ts +361 -0
- package/dist/components/frame/suggestion/lt-suggestion.d.ts.map +1 -0
- package/dist/components/frame/suggestion/lt-suggestion.js +1152 -0
- package/dist/components/frame/suggestion/lt-suggestion.js.map +1 -0
- package/dist/components/frame/suggestion/suggestion.d.ts +143 -0
- package/dist/components/frame/suggestion/suggestion.d.ts.map +1 -0
- package/dist/components/frame/suggestion/suggestion.js +127 -0
- package/dist/components/frame/suggestion/suggestion.js.map +1 -0
- package/dist/components/frame/tabs/lt-tabs.d.ts +404 -0
- package/dist/components/frame/tabs/lt-tabs.d.ts.map +1 -0
- package/dist/components/frame/tabs/lt-tabs.js +1201 -0
- package/dist/components/frame/tabs/lt-tabs.js.map +1 -0
- package/dist/components/frame/tabs/tabs.d.ts +112 -0
- package/dist/components/frame/tabs/tabs.d.ts.map +1 -0
- package/dist/components/frame/tabs/tabs.js +107 -0
- package/dist/components/frame/tabs/tabs.js.map +1 -0
- package/dist/components/host-element.d.ts +135 -0
- package/dist/components/host-element.d.ts.map +1 -0
- package/dist/components/host-element.js +366 -0
- package/dist/components/host-element.js.map +1 -0
- package/dist/components/standalone/connection-status/connection-status.d.ts +28 -0
- package/dist/components/standalone/connection-status/connection-status.d.ts.map +1 -0
- package/dist/components/standalone/connection-status/connection-status.js +22 -0
- package/dist/components/standalone/connection-status/connection-status.js.map +1 -0
- package/dist/components/standalone/connection-status/lt-connection-status.d.ts +81 -0
- package/dist/components/standalone/connection-status/lt-connection-status.d.ts.map +1 -0
- package/dist/components/standalone/connection-status/lt-connection-status.js +216 -0
- package/dist/components/standalone/connection-status/lt-connection-status.js.map +1 -0
- package/dist/components/standalone/toast/lt-toast.d.ts +109 -0
- package/dist/components/standalone/toast/lt-toast.d.ts.map +1 -0
- package/dist/components/standalone/toast/lt-toast.js +256 -0
- package/dist/components/standalone/toast/lt-toast.js.map +1 -0
- package/dist/components/standalone/toast/toast.d.ts +52 -0
- package/dist/components/standalone/toast/toast.d.ts.map +1 -0
- package/dist/components/standalone/toast/toast.js +42 -0
- package/dist/components/standalone/toast/toast.js.map +1 -0
- package/dist/diagnostics/core.d.ts +137 -0
- package/dist/diagnostics/core.d.ts.map +1 -0
- package/dist/diagnostics/core.js +72 -0
- package/dist/diagnostics/core.js.map +1 -0
- package/dist/diagnostics/default-core.d.ts +10 -0
- package/dist/diagnostics/default-core.d.ts.map +1 -0
- package/dist/diagnostics/default-core.js +72 -0
- package/dist/diagnostics/default-core.js.map +1 -0
- package/dist/diagnostics/index.d.ts +84 -0
- package/dist/diagnostics/index.d.ts.map +1 -0
- package/dist/diagnostics/index.js +106 -0
- package/dist/diagnostics/index.js.map +1 -0
- package/dist/dom.d.ts +55 -0
- package/dist/dom.d.ts.map +1 -0
- package/dist/dom.js +162 -0
- package/dist/dom.js.map +1 -0
- package/dist/index.d.ts +97 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +58 -0
- package/dist/index.js.map +1 -0
- package/dist/jsx/react.d.ts +180 -0
- package/dist/jsx/react.d.ts.map +1 -0
- package/dist/jsx/react.js +2 -0
- package/dist/jsx/react.js.map +1 -0
- package/dist/lotek.css +3617 -0
- package/dist/lt.d.ts +325 -0
- package/dist/lt.d.ts.map +1 -0
- package/dist/lt.js +183 -0
- package/dist/lt.js.map +1 -0
- package/dist/react.d.ts +492 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +296 -0
- package/dist/react.js.map +1 -0
- package/dist/register.d.ts +17 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +35 -0
- package/dist/register.js.map +1 -0
- package/dist/tokens/color.d.ts +43 -0
- package/dist/tokens/color.d.ts.map +1 -0
- package/dist/tokens/color.js +123 -0
- package/dist/tokens/color.js.map +1 -0
- package/dist/tokens/contract.d.ts +18 -0
- package/dist/tokens/contract.d.ts.map +1 -0
- package/dist/tokens/contract.js +18 -0
- package/dist/tokens/contract.js.map +1 -0
- package/dist/tokens/matrix-cells.d.ts +30 -0
- package/dist/tokens/matrix-cells.d.ts.map +1 -0
- package/dist/tokens/matrix-cells.js +273 -0
- package/dist/tokens/matrix-cells.js.map +1 -0
- package/dist/tokens/matrix.d.ts +18 -0
- package/dist/tokens/matrix.d.ts.map +1 -0
- package/dist/tokens/matrix.js +21 -0
- package/dist/tokens/matrix.js.map +1 -0
- package/dist/tokens/theme-check.d.ts +42 -0
- package/dist/tokens/theme-check.d.ts.map +1 -0
- package/dist/tokens/theme-check.js +10 -0
- package/dist/tokens/theme-check.js.map +1 -0
- package/dist/tokens/theme.d.ts +94 -0
- package/dist/tokens/theme.d.ts.map +1 -0
- package/dist/tokens/theme.js +14 -0
- package/dist/tokens/theme.js.map +1 -0
- package/dist/tokens/tokens.d.ts +122 -0
- package/dist/tokens/tokens.d.ts.map +1 -0
- package/dist/tokens/tokens.js +158 -0
- package/dist/tokens/tokens.js.map +1 -0
- package/dist/vocabulary/classes.d.ts +3 -0
- package/dist/vocabulary/classes.d.ts.map +1 -0
- package/dist/vocabulary/classes.js +1320 -0
- package/dist/vocabulary/classes.js.map +1 -0
- package/dist/vocabulary/elements.d.ts +3 -0
- package/dist/vocabulary/elements.d.ts.map +1 -0
- package/dist/vocabulary/elements.js +410 -0
- package/dist/vocabulary/elements.js.map +1 -0
- package/dist/vocabulary/types.d.ts +175 -0
- package/dist/vocabulary/types.d.ts.map +1 -0
- package/dist/vocabulary/types.js +11 -0
- package/dist/vocabulary/types.js.map +1 -0
- package/dist/wasi-host.d.ts +24 -0
- package/dist/wasi-host.d.ts.map +1 -0
- package/dist/wasi-host.js +140 -0
- package/dist/wasi-host.js.map +1 -0
- package/live-templates.xml +62 -0
- package/manifest/files.json +373 -0
- package/manifest/manifest.json +4965 -0
- package/manifest/manifest.schema.json +513 -0
- package/package.json +398 -5
- package/src/cli.ts +21 -0
- package/src/components/css/accordion/accordion.css +102 -0
- package/src/components/css/accordion/accordion.ts +50 -0
- package/src/components/css/alert/alert.css +53 -0
- package/src/components/css/alert/alert.ts +48 -0
- package/src/components/css/avatar/avatar.css +96 -0
- package/src/components/css/avatar/avatar.ts +57 -0
- package/src/components/css/badge/badge.css +42 -0
- package/src/components/css/badge/badge.ts +43 -0
- package/src/components/css/breadcrumbs/breadcrumbs.css +62 -0
- package/src/components/css/breadcrumbs/breadcrumbs.ts +30 -0
- package/src/components/css/button/button.css +128 -0
- package/src/components/css/button/button.ts +44 -0
- package/src/components/css/card/card.css +65 -0
- package/src/components/css/card/card.ts +50 -0
- package/src/components/css/checkbox/checkbox.css +114 -0
- package/src/components/css/checkbox/checkbox.ts +50 -0
- package/src/components/css/divider/divider.css +38 -0
- package/src/components/css/divider/divider.ts +42 -0
- package/src/components/css/error-text/error-text.css +21 -0
- package/src/components/css/error-text/error-text.ts +37 -0
- package/src/components/css/fieldset/fieldset.css +72 -0
- package/src/components/css/fieldset/fieldset.ts +87 -0
- package/src/components/css/file-upload/file-upload.css +102 -0
- package/src/components/css/file-upload/file-upload.ts +65 -0
- package/src/components/css/heading/heading.css +33 -0
- package/src/components/css/heading/heading.ts +42 -0
- package/src/components/css/help-text/help-text.css +24 -0
- package/src/components/css/help-text/help-text.ts +42 -0
- package/src/components/css/icon/icon.css +20 -0
- package/src/components/css/icon/icon.ts +44 -0
- package/src/components/css/input/input.css +145 -0
- package/src/components/css/input/input.ts +77 -0
- package/src/components/css/label/label.css +42 -0
- package/src/components/css/label/label.ts +51 -0
- package/src/components/css/link/link.css +38 -0
- package/src/components/css/link/link.ts +38 -0
- package/src/components/css/list/list.css +53 -0
- package/src/components/css/list/list.ts +44 -0
- package/src/components/css/pagination/pagination.css +95 -0
- package/src/components/css/pagination/pagination.ts +33 -0
- package/src/components/css/paragraph/paragraph.css +31 -0
- package/src/components/css/paragraph/paragraph.ts +53 -0
- package/src/components/css/progress/progress.css +161 -0
- package/src/components/css/progress/progress.ts +78 -0
- package/src/components/css/radio/radio.css +94 -0
- package/src/components/css/radio/radio.ts +50 -0
- package/src/components/css/search/search.css +50 -0
- package/src/components/css/search/search.ts +56 -0
- package/src/components/css/select/select.css +321 -0
- package/src/components/css/select/select.ts +63 -0
- package/src/components/css/shared.ts +199 -0
- package/src/components/css/skeleton/skeleton.css +62 -0
- package/src/components/css/skeleton/skeleton.ts +43 -0
- package/src/components/css/skip-link/skip-link.css +41 -0
- package/src/components/css/skip-link/skip-link.ts +22 -0
- package/src/components/css/spinner/spinner.css +48 -0
- package/src/components/css/spinner/spinner.ts +48 -0
- package/src/components/css/sr-only/sr-only.css +16 -0
- package/src/components/css/sr-only/sr-only.ts +21 -0
- package/src/components/css/switch/switch.css +105 -0
- package/src/components/css/switch/switch.ts +50 -0
- package/src/components/css/table/table.css +159 -0
- package/src/components/css/table/table.ts +107 -0
- package/src/components/css/tag/tag.css +58 -0
- package/src/components/css/tag/tag.ts +49 -0
- package/src/components/css/textarea/textarea.css +83 -0
- package/src/components/css/textarea/textarea.ts +40 -0
- package/src/components/css/toggle-group/toggle-group.css +92 -0
- package/src/components/css/toggle-group/toggle-group.ts +37 -0
- package/src/components/css/tooltip/tooltip.css +89 -0
- package/src/components/css/tooltip/tooltip.ts +37 -0
- package/src/components/default-texts.ts +34 -0
- package/src/components/events.ts +68 -0
- package/src/components/frame/dialog/dialog.css +306 -0
- package/src/components/frame/dialog/dialog.ts +166 -0
- package/src/components/frame/dialog/lt-dialog.ts +510 -0
- package/src/components/frame/error-summary/error-summary.css +47 -0
- package/src/components/frame/error-summary/error-summary.ts +56 -0
- package/src/components/frame/error-summary/lt-error-summary.ts +344 -0
- package/src/components/frame/field/field-core.ts +152 -0
- package/src/components/frame/field/field.css +17 -0
- package/src/components/frame/field/lt-field.ts +753 -0
- package/src/components/frame/popover/lt-popover.ts +555 -0
- package/src/components/frame/popover/popover.css +50 -0
- package/src/components/frame/popover/popover.ts +102 -0
- package/src/components/frame/session-timeout/lt-session-timeout.ts +681 -0
- package/src/components/frame/session-timeout/session-timeout.css +50 -0
- package/src/components/frame/session-timeout/session-timeout.ts +156 -0
- package/src/components/frame/suggestion/lt-suggestion.ts +1358 -0
- package/src/components/frame/suggestion/suggestion.css +132 -0
- package/src/components/frame/suggestion/suggestion.ts +172 -0
- package/src/components/frame/tabs/lt-tabs.ts +1319 -0
- package/src/components/frame/tabs/tabs.css +128 -0
- package/src/components/frame/tabs/tabs.ts +188 -0
- package/src/components/host-element.ts +400 -0
- package/src/components/standalone/connection-status/connection-status.css +41 -0
- package/src/components/standalone/connection-status/connection-status.ts +41 -0
- package/src/components/standalone/connection-status/lt-connection-status.ts +242 -0
- package/src/components/standalone/toast/lt-toast.ts +300 -0
- package/src/components/standalone/toast/toast.css +78 -0
- package/src/components/standalone/toast/toast.ts +70 -0
- package/src/diagnostics/core.ts +210 -0
- package/src/diagnostics/default-core.ts +81 -0
- package/src/diagnostics/index.ts +150 -0
- package/src/dom.ts +185 -0
- package/src/index.ts +218 -0
- package/src/jsx/react.ts +212 -0
- package/src/lt.ts +192 -0
- package/src/react.ts +411 -0
- package/src/register.ts +43 -0
- package/src/tailwind/tailwind.css +169 -0
- package/src/tokens/boundary.css +104 -0
- package/src/tokens/color-contract.json +231 -0
- package/src/tokens/color.ts +150 -0
- package/src/tokens/contract.ts +24 -0
- package/src/tokens/matrix-cells.ts +375 -0
- package/src/tokens/matrix.ts +32 -0
- package/src/tokens/theme-check.ts +51 -0
- package/src/tokens/theme.ts +104 -0
- package/src/tokens/tokens.css +569 -0
- package/src/tokens/tokens.ts +223 -0
- package/src/vocabulary/classes.ts +1322 -0
- package/src/vocabulary/elements.ts +412 -0
- package/src/vocabulary/types.ts +178 -0
- package/src/wasi-host.ts +155 -0
- package/web-types.json +800 -0
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The base the web components inherit from, and their registration.
|
|
3
|
+
*
|
|
4
|
+
* `HTMLElement` and `customElements` only exist in the browser. A
|
|
5
|
+
* `class X extends HTMLElement` is evaluated when the module loads, so a
|
|
6
|
+
* server that only wanted `lt.button()` from the package stopped with
|
|
7
|
+
* "HTMLElement is not defined" before it got that far. That hit nine of the
|
|
8
|
+
* entry points, the main entry included, and made the package useless in
|
|
9
|
+
* exactly the situation it is built for: the server writing the markup.
|
|
10
|
+
*
|
|
11
|
+
* The fallback is an empty class. It is never used for anything, because
|
|
12
|
+
* without `customElements` nothing is registered, and without registration
|
|
13
|
+
* the browser never creates an instance. It only exists so the module can
|
|
14
|
+
* load.
|
|
15
|
+
*/
|
|
16
|
+
export const HostElement = typeof HTMLElement === "undefined"
|
|
17
|
+
? class {
|
|
18
|
+
}
|
|
19
|
+
: HTMLElement;
|
|
20
|
+
/**
|
|
21
|
+
* Registers a web component, once, and only in the browser.
|
|
22
|
+
*
|
|
23
|
+
* When `defineLt*` is called from a module that also runs on the server, as
|
|
24
|
+
* in TanStack Start or a server-rendered React app, nothing happens. There is
|
|
25
|
+
* no `customElements` there to register in.
|
|
26
|
+
*
|
|
27
|
+
* A constructor can only be in the registry once. If the class is already
|
|
28
|
+
* there under another name, a subclass is registered:
|
|
29
|
+
* `defineLtToast("app-toast")` followed by `defineLt()` otherwise threw
|
|
30
|
+
* NotSupportedError on `lt-toast`, and the components after it in the list
|
|
31
|
+
* were never registered. With the subclass both names work, and `instanceof`
|
|
32
|
+
* holds for both.
|
|
33
|
+
*/
|
|
34
|
+
export function defineElement(tagName, element) {
|
|
35
|
+
if (typeof customElements === "undefined")
|
|
36
|
+
return;
|
|
37
|
+
if (customElements.get(tagName))
|
|
38
|
+
return;
|
|
39
|
+
if (isRegistered(element)) {
|
|
40
|
+
customElements.define(tagName, class extends element {
|
|
41
|
+
});
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
customElements.define(tagName, element);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
// The fallback for browsers without `getName`: the name is free, so a
|
|
49
|
+
// NotSupportedError here means the constructor is already in use.
|
|
50
|
+
if (!(error instanceof DOMException && error.name === "NotSupportedError"))
|
|
51
|
+
throw error;
|
|
52
|
+
customElements.define(tagName, class extends element {
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Whether the constructor is already in the registry, under any name.
|
|
58
|
+
* `getName` arrived in Chrome 117, Firefox 116 and Safari 17; without it the
|
|
59
|
+
* answer is `false`, and `define` reports the problem itself.
|
|
60
|
+
*/
|
|
61
|
+
function isRegistered(element) {
|
|
62
|
+
if (typeof customElements.getName !== "function")
|
|
63
|
+
return false;
|
|
64
|
+
return customElements.getName(element) !== null;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Sets an attribute, but only when the value actually differs.
|
|
68
|
+
*
|
|
69
|
+
* The components observe the attributes they set themselves, so they can set
|
|
70
|
+
* them back after a patch. Writing a value that is already there counts as a
|
|
71
|
+
* change, so the observer calls itself, writes again, and the microtask queue
|
|
72
|
+
* never empties. The page freezes, and a test run hangs without an error: no
|
|
73
|
+
* stack trace, no assertion, just silence. That is why no test can catch it,
|
|
74
|
+
* and why writes go through one function all the components use.
|
|
75
|
+
*
|
|
76
|
+
* `null` removes the attribute.
|
|
77
|
+
*/
|
|
78
|
+
export function setAttr(element, name, value) {
|
|
79
|
+
if (value === null || value === undefined) {
|
|
80
|
+
if (element.hasAttribute(name))
|
|
81
|
+
element.removeAttribute(name);
|
|
82
|
+
}
|
|
83
|
+
else if (element.getAttribute(name) !== value) {
|
|
84
|
+
element.setAttribute(name, value);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Turns a boolean attribute on or off, without writing when it is already so.
|
|
89
|
+
*
|
|
90
|
+
* `el.hidden = true` on something already hidden writes the attribute again,
|
|
91
|
+
* and that counts as a change. `toggleAttribute` does not: if the attribute
|
|
92
|
+
* is already as it should be, nothing happens. So it is the only permitted
|
|
93
|
+
* way to `hidden`, `disabled` and the other boolean attributes in a component
|
|
94
|
+
* that observes the attributes it writes.
|
|
95
|
+
*
|
|
96
|
+
* `Boolean(on)` and not `on` alone: with `undefined` as the second argument
|
|
97
|
+
* `toggleAttribute` toggles instead of removing. React 19 writes
|
|
98
|
+
* `el.open = undefined` when a prop goes from `true` to absent, and the
|
|
99
|
+
* setter then put the attribute back: a dialog the user had closed opened
|
|
100
|
+
* again as the app followed along.
|
|
101
|
+
*/
|
|
102
|
+
export function setFlag(element, name, on) {
|
|
103
|
+
element.toggleAttribute(name, Boolean(on));
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* The language nearest the element, or `undefined` when the page does not
|
|
107
|
+
* say.
|
|
108
|
+
*
|
|
109
|
+
* `undefined` gives `Intl` the browser's language. A `lang` that is not a
|
|
110
|
+
* valid language tag makes `Intl` throw, and then the browser's language is
|
|
111
|
+
* better than no text.
|
|
112
|
+
*/
|
|
113
|
+
export function languageOf(element) {
|
|
114
|
+
/*
|
|
115
|
+
* `closest()` stops at a shadow root. If the element is in one, as in
|
|
116
|
+
* every preview in the documentation, the search continues from the host;
|
|
117
|
+
* otherwise it never found `lang` on `<html>`.
|
|
118
|
+
*/
|
|
119
|
+
let node = element;
|
|
120
|
+
while (node) {
|
|
121
|
+
const owner = node.closest("[lang]");
|
|
122
|
+
// `lang=""` means "unknown language" and stops inheritance from the ancestors.
|
|
123
|
+
if (owner) {
|
|
124
|
+
const lang = owner.getAttribute("lang")?.trim();
|
|
125
|
+
if (!lang)
|
|
126
|
+
return undefined;
|
|
127
|
+
try {
|
|
128
|
+
Intl.getCanonicalLocales(lang);
|
|
129
|
+
return lang;
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const root = node.getRootNode();
|
|
136
|
+
node = root instanceof ShadowRoot ? root.host : null;
|
|
137
|
+
}
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Writes text in an element, but only when the text differs.
|
|
142
|
+
*
|
|
143
|
+
* `textContent` is a `childList` change, and the components observe their
|
|
144
|
+
* children. Writing the same text again counts as a change, and then the
|
|
145
|
+
* observer calls itself.
|
|
146
|
+
*
|
|
147
|
+
* `textContent` is all the text in the subtree joined, so the comparison does
|
|
148
|
+
* not tell `<b>3</b> matches` from `3 matches`. The function is meant for
|
|
149
|
+
* elements the component fills with plain text, such as the match count in
|
|
150
|
+
* the suggestion field.
|
|
151
|
+
*/
|
|
152
|
+
export function setText(element, text) {
|
|
153
|
+
if (element.textContent !== text)
|
|
154
|
+
element.textContent = text;
|
|
155
|
+
}
|
|
156
|
+
/** Adds a class, but only when it is not already there. */
|
|
157
|
+
export function addClass(element, name) {
|
|
158
|
+
if (!element.classList.contains(name))
|
|
159
|
+
element.classList.add(name);
|
|
160
|
+
}
|
|
161
|
+
/** An id the component creates itself, when the markup had none. */
|
|
162
|
+
export function uniqueId(prefix) {
|
|
163
|
+
return `${prefix}-${Math.random().toString(36).slice(2, 9)}`;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* The parts with a role, and those without only when the component set the
|
|
167
|
+
* roles itself.
|
|
168
|
+
*
|
|
169
|
+
* The components fill in roles where the markup came without them: a button
|
|
170
|
+
* in the row becomes a tab, an `<li>` in the list becomes an option. But if
|
|
171
|
+
* the server wrote the roles, an element without a role is something else,
|
|
172
|
+
* such as a "close" button in the row, and must not get a role, an id and
|
|
173
|
+
* `tabindex="-1"` from the component. `roledByHost` holds the roles the
|
|
174
|
+
* component set itself: if every role present was set by the component, the
|
|
175
|
+
* markup is bare, and an element without a role that the server sends later
|
|
176
|
+
* is a new part. The parts are limited to the host, since components inside
|
|
177
|
+
* components are ordinary markup.
|
|
178
|
+
*/
|
|
179
|
+
export function derivedParts(host, selector, role, roledByHost) {
|
|
180
|
+
const own = [...host.querySelectorAll(selector)].filter((part) => part.closest(host.localName) === host);
|
|
181
|
+
const bare = own
|
|
182
|
+
.filter((part) => part.getAttribute("role") === role)
|
|
183
|
+
.every((part) => roledByHost.has(part));
|
|
184
|
+
return bare ? own : own.filter((part) => part.getAttribute("role") === role);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* The attribute that gives the state back to the server.
|
|
188
|
+
*
|
|
189
|
+
* By default the components repair what the user has done: the selected tab,
|
|
190
|
+
* the open popover, the expanded suggestion list. A morph tears it away,
|
|
191
|
+
* since none of it was in the HTML the server sent, and the component sets it
|
|
192
|
+
* back. Then no template needs to know the attributes.
|
|
193
|
+
*
|
|
194
|
+
* Sometimes the server should decide: "go on to step 2" is a real thing a
|
|
195
|
+
* server wants to be able to do. With `server-controlled` on the host, the
|
|
196
|
+
* component does not set back what the user did, and each patch decides. It
|
|
197
|
+
* still does the wiring and the keyboard, and what the attribute means for
|
|
198
|
+
* each component is documented in the component.
|
|
199
|
+
*
|
|
200
|
+
* This replaces `data-preserve-attr`, which required the template to copy the
|
|
201
|
+
* name of every attribute the component would touch. One attribute to
|
|
202
|
+
* remember instead of nine, and the default is the right choice almost
|
|
203
|
+
* always.
|
|
204
|
+
*
|
|
205
|
+
* Preserving is also a mechanism of one particular morpher:
|
|
206
|
+
* `data-preserve-attr` is a `data-*` attribute, and such an attribute only
|
|
207
|
+
* means something to the code that reads it. Repair reads the markup, and
|
|
208
|
+
* works whoever does the morphing.
|
|
209
|
+
*/
|
|
210
|
+
export const SERVER_CONTROLLED = "server-controlled";
|
|
211
|
+
/** Whether the server decides the state in this element. */
|
|
212
|
+
export function isServerControlled(element) {
|
|
213
|
+
return element.hasAttribute(SERVER_CONTROLLED);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Warns when the markup a component received does not fit together.
|
|
217
|
+
*
|
|
218
|
+
* A component that cannot find its parts cannot do its job, and the only
|
|
219
|
+
* alternative to a message is silence. It was silent for a long time: a
|
|
220
|
+
* template without a control in `<lt-field>` gave a field without wiring,
|
|
221
|
+
* and nothing said so until someone read the page with a screen reader.
|
|
222
|
+
*
|
|
223
|
+
* The message comes once per element and message. A component syncs on every
|
|
224
|
+
* patch, and a warning per patch would fill the console so fast it became
|
|
225
|
+
* useless. So the message must be the same every time: interpolate a number
|
|
226
|
+
* into it and every round is a new message, and the deduplication is gone.
|
|
227
|
+
*
|
|
228
|
+
* `stillBroken` is why the warning can be trusted. It is called again when
|
|
229
|
+
* the page has settled, and only then is anything written. A component sees
|
|
230
|
+
* its markup as it connects, and the markup is often unfinished then: HTML
|
|
231
|
+
* streamed from a Go or Kotlin server arrives in chunks, and a break between
|
|
232
|
+
* the label and the field is perfectly normal. Without the final check the
|
|
233
|
+
* component warned about markup that was fine a moment later, and a warning
|
|
234
|
+
* that also fires on correct markup gets switched off.
|
|
235
|
+
*
|
|
236
|
+
* It comes in every environment, not only during development. The package
|
|
237
|
+
* has no build step that could remove it, and a warning that only fires on
|
|
238
|
+
* markup that really is wrong belongs where it happens.
|
|
239
|
+
*/
|
|
240
|
+
const reported = new WeakMap();
|
|
241
|
+
const queued = new WeakMap();
|
|
242
|
+
export function warnAboutMarkup(element, message, stillBroken) {
|
|
243
|
+
if (typeof console === "undefined")
|
|
244
|
+
return;
|
|
245
|
+
if (reported.get(element)?.has(message))
|
|
246
|
+
return;
|
|
247
|
+
let pending = queued.get(element);
|
|
248
|
+
if (!pending) {
|
|
249
|
+
pending = new Set();
|
|
250
|
+
queued.set(element, pending);
|
|
251
|
+
}
|
|
252
|
+
if (pending.has(message))
|
|
253
|
+
return;
|
|
254
|
+
pending.add(message);
|
|
255
|
+
whenSettled(() => {
|
|
256
|
+
pending.delete(message);
|
|
257
|
+
if (!element.isConnected || !stillBroken())
|
|
258
|
+
return;
|
|
259
|
+
let said = reported.get(element);
|
|
260
|
+
if (!said) {
|
|
261
|
+
said = new Set();
|
|
262
|
+
reported.set(element, said);
|
|
263
|
+
}
|
|
264
|
+
if (said.has(message))
|
|
265
|
+
return;
|
|
266
|
+
said.add(message);
|
|
267
|
+
console.warn(`${element.tagName.toLowerCase()}: ${message}`, element);
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Runs once the page has settled.
|
|
272
|
+
*
|
|
273
|
+
* First the parser must be done, or we only see the part of the markup that
|
|
274
|
+
* has arrived so far. Then two frames, so a morph, a React hydration or a
|
|
275
|
+
* script that fills the element in the next task has time to finish first.
|
|
276
|
+
*/
|
|
277
|
+
function whenSettled(run) {
|
|
278
|
+
let done = false;
|
|
279
|
+
const once = () => {
|
|
280
|
+
if (done)
|
|
281
|
+
return;
|
|
282
|
+
done = true;
|
|
283
|
+
run();
|
|
284
|
+
};
|
|
285
|
+
const afterTwoFrames = () => {
|
|
286
|
+
if (typeof requestAnimationFrame === "undefined") {
|
|
287
|
+
once();
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
/*
|
|
291
|
+
* A fallback, because `requestAnimationFrame` does not always fire in a
|
|
292
|
+
* frame that is not painted. Tested in an `<iframe>` with
|
|
293
|
+
* `display: none`: Chromium and WebKit fire anyway, Firefox does not.
|
|
294
|
+
* Without the fallback the message stayed in the queue there for ever,
|
|
295
|
+
* and blocked a later, real warning about the same thing.
|
|
296
|
+
*
|
|
297
|
+
* It is not cancelled. An attempt to cancel it in the first frame was
|
|
298
|
+
* worse than the problem: if the first frame fires and the tab is hidden
|
|
299
|
+
* before the second, both the fallback and the second frame are gone,
|
|
300
|
+
* and the check never runs. `once` runs only once, so it does no harm
|
|
301
|
+
* that both paths are running, and whichever comes first wins.
|
|
302
|
+
*
|
|
303
|
+
* One second is chosen so two frames win in anything but a page that is
|
|
304
|
+
* completely stalled. If that happens, a warning about markup that is
|
|
305
|
+
* still unfinished is a small problem next to a frozen page.
|
|
306
|
+
*/
|
|
307
|
+
setTimeout(once, 1000);
|
|
308
|
+
requestAnimationFrame(() => requestAnimationFrame(once));
|
|
309
|
+
};
|
|
310
|
+
if (typeof document !== "undefined" && document.readyState === "loading") {
|
|
311
|
+
document.addEventListener("DOMContentLoaded", afterTwoFrames, {
|
|
312
|
+
once: true,
|
|
313
|
+
});
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
afterTwoFrames();
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Waits until the element has been upgraded to its component, and returns it
|
|
320
|
+
* with the right type.
|
|
321
|
+
*
|
|
322
|
+
* The components with an imperative API have `show()`, `reportFailure()` and
|
|
323
|
+
* `extend()`. If one of them is called before `defineLt*` has run, the
|
|
324
|
+
* element is still a plain `HTMLElement`, and the call fails with
|
|
325
|
+
* "reportSuccess is not a function". In production it happened in the gap
|
|
326
|
+
* between the server's HTML being there and the registration being loaded:
|
|
327
|
+
* the first message from the event stream arrived in that gap, and the app
|
|
328
|
+
* put a `typeof` guard around every call to get around it.
|
|
329
|
+
*
|
|
330
|
+
* The helpers around the methods instead wait for `whenDefined` on the
|
|
331
|
+
* element's actual tag name, so a call that comes too early is made as soon
|
|
332
|
+
* as the registration is there. `upgrade()` covers an element not yet in the
|
|
333
|
+
* document; one that is in it is already upgraded when `whenDefined`
|
|
334
|
+
* resolves.
|
|
335
|
+
*
|
|
336
|
+
* An element nobody registers would otherwise wait silently for ever. After
|
|
337
|
+
* three seconds the helper says so in the console, once per tag name, and
|
|
338
|
+
* keeps waiting: if the registration comes late, the call should still be
|
|
339
|
+
* made.
|
|
340
|
+
*/
|
|
341
|
+
const UPGRADE_WARNING_MS = 3000;
|
|
342
|
+
const warnedTags = new Set();
|
|
343
|
+
export async function whenUpgraded(element) {
|
|
344
|
+
const tag = element.localName;
|
|
345
|
+
if (!customElements.get(tag)) {
|
|
346
|
+
const timer = setTimeout(() => {
|
|
347
|
+
if (customElements.get(tag) || warnedTags.has(tag))
|
|
348
|
+
return;
|
|
349
|
+
warnedTags.add(tag);
|
|
350
|
+
console.warn(`<${tag}> is not registered after ${UPGRADE_WARNING_MS / 1000} seconds. ` +
|
|
351
|
+
`Call defineLt() from @lo-tek/interfaces/register at startup, not in an effect.`, element);
|
|
352
|
+
}, UPGRADE_WARNING_MS);
|
|
353
|
+
// `finally`: `whenDefined` rejects a name without a hyphen, and without
|
|
354
|
+
// the cleanup the timer would have warned "not registered" three seconds
|
|
355
|
+
// after the call had already failed with the right error.
|
|
356
|
+
try {
|
|
357
|
+
await customElements.whenDefined(tag);
|
|
358
|
+
}
|
|
359
|
+
finally {
|
|
360
|
+
clearTimeout(timer);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
customElements.upgrade(element);
|
|
364
|
+
return element;
|
|
365
|
+
}
|
|
366
|
+
//# sourceMappingURL=host-element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-element.js","sourceRoot":"","sources":["../../src/components/host-element.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,CAAC,MAAM,WAAW,GACtB,OAAO,WAAW,KAAK,WAAW;IAChC,CAAC,CAAE;KAA0C;IAC7C,CAAC,CAAC,WAAW,CAAA;AAUjB;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAe,EACf,OAAiC;IAEjC,IAAI,OAAO,cAAc,KAAK,WAAW;QAAE,OAAM;IACjD,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAM;IACvC,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,KAAM,SAAQ,OAAO;SAAG,CAAC,CAAA;QACxD,OAAM;IACR,CAAC;IACD,IAAI,CAAC;QACH,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sEAAsE;QACtE,kEAAkE;QAClE,IAAI,CAAC,CAAC,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,CAAC;YACxE,MAAM,KAAK,CAAA;QACb,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,KAAM,SAAQ,OAAO;SAAG,CAAC,CAAA;IAC1D,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,OAAiC;IACrD,IAAI,OAAO,cAAc,CAAC,OAAO,KAAK,UAAU;QAAE,OAAO,KAAK,CAAA;IAC9D,OAAO,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;AACjD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,OAAO,CACrB,OAAgB,EAChB,IAAY,EACZ,KAAgC;IAEhC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC/D,CAAC;SAAM,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;QAChD,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACnC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,OAAO,CAAC,OAAgB,EAAE,IAAY,EAAE,EAAW;IACjE,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;AAC5C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC;;;;OAIG;IACH,IAAI,IAAI,GAAmB,OAAO,CAAA;IAClC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QACpC,+EAA+E;QAC/E,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAA;YAC/C,IAAI,CAAC,IAAI;gBAAE,OAAO,SAAS,CAAA;YAC3B,IAAI,CAAC;gBACH,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;gBAC9B,OAAO,IAAI,CAAA;YACb,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,SAAS,CAAA;YAClB,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAC/B,IAAI,GAAG,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IACtD,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,OAAO,CAAC,OAAgB,EAAE,IAAY;IACpD,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI;QAAE,OAAO,CAAC,WAAW,GAAG,IAAI,CAAA;AAC9D,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,QAAQ,CAAC,OAAgB,EAAE,IAAY;IACrD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACpE,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,QAAQ,CAAC,MAAc;IACrC,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;AAC9D,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAa,EACb,QAAgB,EAChB,IAAY,EACZ,WAA6B;IAE7B,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CACxD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAChD,CAAA;IACD,MAAM,IAAI,GAAG,GAAG;SACb,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;SACpD,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;IACzC,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAA;AAC9E,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAA4B,CAAA;AAE7D,4DAA4D;AAC5D,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAA;AAChD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAwB,CAAA;AACpD,MAAM,MAAM,GAAG,IAAI,OAAO,EAAwB,CAAA;AAElD,MAAM,UAAU,eAAe,CAC7B,OAAgB,EAChB,OAAe,EACf,WAA0B;IAE1B,IAAI,OAAO,OAAO,KAAK,WAAW;QAAE,OAAM;IAC1C,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;QAAE,OAAM;IAE/C,IAAI,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACjC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;QACnB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC9B,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAM;IAChC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAEpB,WAAW,CAAC,GAAG,EAAE;QACf,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACvB,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE;YAAE,OAAM;QAElD,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,IAAI,GAAG,EAAE,CAAA;YAChB,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAM;QAC7B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAEjB,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,EAAE,OAAO,CAAC,CAAA;IACvE,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,GAAe;IAClC,IAAI,IAAI,GAAG,KAAK,CAAA;IAChB,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,IAAI,IAAI;YAAE,OAAM;QAChB,IAAI,GAAG,IAAI,CAAA;QACX,GAAG,EAAE,CAAA;IACP,CAAC,CAAA;IAED,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,IAAI,OAAO,qBAAqB,KAAK,WAAW,EAAE,CAAC;YACjD,IAAI,EAAE,CAAA;YACN,OAAM;QACR,CAAC;QACD;;;;;;;;;;;;;;;;WAgBG;QACH,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACtB,qBAAqB,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAA;IAC1D,CAAC,CAAA;IAED,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACzE,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,cAAc,EAAE;YAC5D,IAAI,EAAE,IAAI;SACX,CAAC,CAAA;QACF,OAAM;IACR,CAAC;IAED,cAAc,EAAE,CAAA;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,kBAAkB,GAAG,IAAI,CAAA;AAC/B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAA;AAEpC,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAgB;IAEhB,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAA;IAC7B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAM;YAC1D,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACnB,OAAO,CAAC,IAAI,CACV,IAAI,GAAG,6BAA6B,kBAAkB,GAAG,IAAI,YAAY;gBACvE,gFAAgF,EAClF,OAAO,CACR,CAAA;QACH,CAAC,EAAE,kBAAkB,CAAC,CAAA;QACtB,wEAAwE;QACxE,yEAAyE;QACzE,0DAA0D;QAC1D,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACvC,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IACD,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/B,OAAO,OAAY,CAAA;AACrB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare const CONNECTION_STATUS_CLASS: "lt-connection-status";
|
|
2
|
+
export declare const CONNECTION_STATUS_BAR_CLASS: "lt-connection-status__bar";
|
|
3
|
+
export type ConnectionStatusOptions = {
|
|
4
|
+
/** The text when the connection is lost. */
|
|
5
|
+
offlineText?: string;
|
|
6
|
+
/** The text when it comes back. Shown for a short while. */
|
|
7
|
+
onlineText?: string;
|
|
8
|
+
};
|
|
9
|
+
export type ConnectionStatusAttributes = {
|
|
10
|
+
class: typeof CONNECTION_STATUS_CLASS;
|
|
11
|
+
"offline-text"?: string;
|
|
12
|
+
"online-text"?: string;
|
|
13
|
+
"data-ignore-morph": "";
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* The attributes for the bar that says the connection is lost.
|
|
17
|
+
*
|
|
18
|
+
* By definition the server cannot tell you it is unreachable. When it is
|
|
19
|
+
* down, nothing comes from it to render. So the component creates all the
|
|
20
|
+
* content itself, and `data-ignore-morph` stops a later patch from tearing
|
|
21
|
+
* it away the moment the connection is back.
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* <lt-connection-status {...lt.connectionStatus()} />
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare const connectionStatus: ({ offlineText, onlineText, }?: ConnectionStatusOptions) => ConnectionStatusAttributes;
|
|
28
|
+
//# sourceMappingURL=connection-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-status.d.ts","sourceRoot":"","sources":["../../../../src/components/standalone/connection-status/connection-status.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,uBAAuB,EAAG,sBAA+B,CAAA;AACtE,eAAO,MAAM,2BAA2B,EAAG,2BAAoC,CAAA;AAE/E,MAAM,MAAM,uBAAuB,GAAG;IACpC,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,EAAE,OAAO,uBAAuB,CAAA;IACrC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mBAAmB,EAAE,EAAE,CAAA;CACxB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,GAAI,+BAG9B,uBAA4B,KAAG,0BAM9B,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { attributes } from "../../css/shared.js";
|
|
2
|
+
export const CONNECTION_STATUS_CLASS = "lt-connection-status";
|
|
3
|
+
export const CONNECTION_STATUS_BAR_CLASS = "lt-connection-status__bar";
|
|
4
|
+
/**
|
|
5
|
+
* The attributes for the bar that says the connection is lost.
|
|
6
|
+
*
|
|
7
|
+
* By definition the server cannot tell you it is unreachable. When it is
|
|
8
|
+
* down, nothing comes from it to render. So the component creates all the
|
|
9
|
+
* content itself, and `data-ignore-morph` stops a later patch from tearing
|
|
10
|
+
* it away the moment the connection is back.
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* <lt-connection-status {...lt.connectionStatus()} />
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export const connectionStatus = ({ offlineText, onlineText, } = {}) => attributes({
|
|
17
|
+
class: CONNECTION_STATUS_CLASS,
|
|
18
|
+
"offline-text": offlineText,
|
|
19
|
+
"online-text": onlineText,
|
|
20
|
+
"data-ignore-morph": "",
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=connection-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-status.js","sourceRoot":"","sources":["../../../../src/components/standalone/connection-status/connection-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,MAAM,CAAC,MAAM,uBAAuB,GAAG,sBAA+B,CAAA;AACtE,MAAM,CAAC,MAAM,2BAA2B,GAAG,2BAAoC,CAAA;AAgB/E;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAC/B,WAAW,EACX,UAAU,MACiB,EAAE,EAA8B,EAAE,CAC7D,UAAU,CAAC;IACT,KAAK,EAAE,uBAAuB;IAC9B,cAAc,EAAE,WAAW;IAC3B,aAAa,EAAE,UAAU;IACzB,mBAAmB,EAAE,EAAW;CACjC,CAAC,CAAA"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { HostElement } from "../../host-element.js";
|
|
2
|
+
export declare const LT_CONNECTION_STATUS_TAG: "lt-connection-status";
|
|
3
|
+
/**
|
|
4
|
+
* Tells the user when the connection to the server is lost.
|
|
5
|
+
*
|
|
6
|
+
* By definition the server cannot tell you this. When it is unreachable,
|
|
7
|
+
* nothing comes from it. So this is a standalone component that creates all
|
|
8
|
+
* of its content itself.
|
|
9
|
+
*
|
|
10
|
+
* It is not decoration in an app that fetches content from the server as it
|
|
11
|
+
* goes. A page that loses its stream looks perfectly normal but is frozen,
|
|
12
|
+
* and a user filling in a form over a dead connection loses everything.
|
|
13
|
+
*
|
|
14
|
+
* `navigator.onLine` only says whether the machine has a network, not whether
|
|
15
|
+
* the server answers. That is why `reportFailure()` and `reportSuccess()`
|
|
16
|
+
* exist: the app calls them when a request fails or succeeds.
|
|
17
|
+
*
|
|
18
|
+
* ```ts
|
|
19
|
+
* const status = document.querySelector("lt-connection-status")
|
|
20
|
+
* try {
|
|
21
|
+
* const response = await fetch("/api/save", { method: "POST", body })
|
|
22
|
+
* if (!response.ok) throw new Error(response.statusText)
|
|
23
|
+
* status.reportSuccess()
|
|
24
|
+
* } catch {
|
|
25
|
+
* status.reportFailure()
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare class LtConnectionStatus extends HostElement {
|
|
30
|
+
static observedAttributes: readonly ["offline-text", "online-text"];
|
|
31
|
+
private bar?;
|
|
32
|
+
private timer?;
|
|
33
|
+
/** True when the app has reported a failed request, regardless of navigator. */
|
|
34
|
+
private failing;
|
|
35
|
+
get offlineText(): string;
|
|
36
|
+
set offlineText(value: string);
|
|
37
|
+
get onlineText(): string;
|
|
38
|
+
set onlineText(value: string);
|
|
39
|
+
attributeChangedCallback(): void;
|
|
40
|
+
connectedCallback(): void;
|
|
41
|
+
disconnectedCallback(): void;
|
|
42
|
+
/**
|
|
43
|
+
* The bar, created empty first and filled afterwards.
|
|
44
|
+
*
|
|
45
|
+
* A live region must exist before its content arrives, or assistive
|
|
46
|
+
* technology does not announce the first change. When the bar was already
|
|
47
|
+
* filled as it was inserted, the region appeared complete to the screen
|
|
48
|
+
* reader, and "No connection", the most important message, could be lost.
|
|
49
|
+
* So the text is set in the next frame when the bar is new. This cannot be
|
|
50
|
+
* checked without a screen reader; the rule is known from NVDA, JAWS and
|
|
51
|
+
* VoiceOver.
|
|
52
|
+
*
|
|
53
|
+
* The bar is created only when it is needed, not on connection: when it
|
|
54
|
+
* was in the DOM before React hydrated, React found an element it had not
|
|
55
|
+
* rendered.
|
|
56
|
+
*/
|
|
57
|
+
private ensureBar;
|
|
58
|
+
private write;
|
|
59
|
+
private showOffline;
|
|
60
|
+
private showOnline;
|
|
61
|
+
private scheduleRemoval;
|
|
62
|
+
private handleOffline;
|
|
63
|
+
private handleOnline;
|
|
64
|
+
private emit;
|
|
65
|
+
/** Reports that a request to the server failed. */
|
|
66
|
+
reportFailure(): void;
|
|
67
|
+
/** Reports that a request to the server succeeded again. */
|
|
68
|
+
reportSuccess(): void;
|
|
69
|
+
}
|
|
70
|
+
export declare function defineLtConnectionStatus(tagName?: string): void;
|
|
71
|
+
/**
|
|
72
|
+
* `element.reportFailure()`, but waits for the registration first.
|
|
73
|
+
*
|
|
74
|
+
* This is where the gap showed up in production: the first message from the
|
|
75
|
+
* event stream came before `defineLtConnectionStatus()`, and the app got
|
|
76
|
+
* "reportSuccess is not a function". See `whenUpgraded`.
|
|
77
|
+
*/
|
|
78
|
+
export declare function reportFailure(element: Element): Promise<void>;
|
|
79
|
+
/** `element.reportSuccess()`, but waits for the registration first. */
|
|
80
|
+
export declare function reportSuccess(element: Element): Promise<void>;
|
|
81
|
+
//# sourceMappingURL=lt-connection-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lt-connection-status.d.ts","sourceRoot":"","sources":["../../../../src/components/standalone/connection-status/lt-connection-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,WAAW,EAAgB,MAAM,uBAAuB,CAAA;AAMhF,eAAO,MAAM,wBAAwB,EAAG,sBAA+B,CAAA;AAUvE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,MAAM,CAAC,kBAAkB,2CAA2C;IAEpE,OAAO,CAAC,GAAG,CAAC,CAAa;IACzB,OAAO,CAAC,KAAK,CAAC,CAAQ;IACtB,gFAAgF;IAChF,OAAO,CAAC,OAAO,CAAQ;IAEvB,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,EAE5B;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,EAE3B;IAED,wBAAwB,IAAI,IAAI;IAWhC,iBAAiB,IAAI,IAAI;IAqBzB,oBAAoB,IAAI,IAAI;IAO5B;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,KAAK;IAuBb,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,aAAa,CAEpB;IAED,OAAO,CAAC,YAAY,CAGnB;IAED,OAAO,CAAC,IAAI;IAIZ,mDAAmD;IACnD,aAAa,IAAI,IAAI;IAMrB,4DAA4D;IAC5D,aAAa,IAAI,IAAI;CAKtB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,MAAiC,GACzC,IAAI,CAEN;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnE;AAED,uEAAuE;AACvE,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnE"}
|