@lmvz-ds/components 0.12.5-alpha.1 → 0.12.5-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/manifest.json +1 -1
- package/package.json +4 -4
- package/dist/cjs/app-globals-V2Kpy_OQ.js.map +0 -1
- package/dist/cjs/assets-Cswkqk_c.js +0 -18971
- package/dist/cjs/assets-Cswkqk_c.js.map +0 -1
- package/dist/cjs/axe-C2rxi-K2.js +0 -32837
- package/dist/cjs/axe-C2rxi-K2.js.map +0 -1
- package/dist/cjs/header-integration.lmvz-button.lmvz-header.lmvz-icon.lmvz-input.lmvz-menuitem-BTL_B6qg.js +0 -3665
- package/dist/cjs/header-integration.lmvz-button.lmvz-header.lmvz-icon.lmvz-input.lmvz-menuitem-BTL_B6qg.js.map +0 -1
- package/dist/cjs/header-integration_6.cjs.entry.js +0 -18
- package/dist/cjs/header-integration_6.cjs.entry.js.map +0 -1
- package/dist/cjs/icons-jn_Uak9B.js +0 -1063
- package/dist/cjs/icons-jn_Uak9B.js.map +0 -1
- package/dist/cjs/index-DpBPf1cE.js +0 -2112
- package/dist/cjs/index-DpBPf1cE.js.map +0 -1
- package/dist/cjs/index.cjs.js.map +0 -1
- package/dist/cjs/lmvz-action.cjs.entry.js.map +0 -1
- package/dist/cjs/lmvz-card.cjs.entry.js.map +0 -1
- package/dist/cjs/lmvz-chip.cjs.entry.js.map +0 -1
- package/dist/cjs/lmvz-components.cjs.js.map +0 -1
- package/dist/cjs/loader.cjs.js.map +0 -1
- package/dist/collection/api/ds.constants.js.map +0 -1
- package/dist/collection/api/index.js.map +0 -1
- package/dist/collection/components/lmvz-action/lmvz-action.js.map +0 -1
- package/dist/collection/components/lmvz-button/lmvz-button.js.map +0 -1
- package/dist/collection/components/lmvz-card/lmvz-card.js.map +0 -1
- package/dist/collection/components/lmvz-chip/lmvz-chip.js.map +0 -1
- package/dist/collection/components/lmvz-header/lmvz-header.js.map +0 -1
- package/dist/collection/components/lmvz-icon/icons.js.map +0 -1
- package/dist/collection/components/lmvz-icon/lmvz-icon.js.map +0 -1
- package/dist/collection/components/lmvz-icon/public.js.map +0 -1
- package/dist/collection/components/lmvz-icon/test/icons.unit.js.map +0 -1
- package/dist/collection/components/lmvz-input/lmvz-input.js.map +0 -1
- package/dist/collection/components/lmvz-menuitem/lmvz-menuitem.js.map +0 -1
- package/dist/collection/index.js.map +0 -1
- package/dist/collection/integration/header-integration.js.map +0 -1
- package/dist/collection/utils/assets.js.map +0 -1
- package/dist/collection/utils/component.js.map +0 -1
- package/dist/collection/utils/effect.js.map +0 -1
- package/dist/collection/utils/element-activation-controller.js.map +0 -1
- package/dist/collection/utils/environment.js.map +0 -1
- package/dist/collection/utils/http.js.map +0 -1
- package/dist/collection/utils/http.test.js.map +0 -1
- package/dist/collection/utils/list-keyboard-controller.js.map +0 -1
- package/dist/collection/utils/public.js.map +0 -1
- package/dist/collection/utils/reactive-controller-host.js.map +0 -1
- package/dist/collection/utils/typing.js.map +0 -1
- package/dist/collection/utils/validation/aria-validation-controller.js.map +0 -1
- package/dist/collection/utils/validation/svg.js.map +0 -1
- package/dist/components/header-integration.d.ts +0 -11
- package/dist/components/header-integration.js +0 -2
- package/dist/components/header-integration.js.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/components/lmvz-action.js.map +0 -1
- package/dist/components/lmvz-button.js.map +0 -1
- package/dist/components/lmvz-card.js.map +0 -1
- package/dist/components/lmvz-chip.js.map +0 -1
- package/dist/components/lmvz-header.js.map +0 -1
- package/dist/components/lmvz-icon.js.map +0 -1
- package/dist/components/lmvz-input.js.map +0 -1
- package/dist/components/lmvz-menuitem.js.map +0 -1
- package/dist/components/p-B3JVFwO1.js.map +0 -1
- package/dist/components/p-B85MJLTf.js.map +0 -1
- package/dist/components/p-CN0JX9-m.js.map +0 -1
- package/dist/components/p-Cd4nH2vx.js +0 -2
- package/dist/components/p-Cd4nH2vx.js.map +0 -1
- package/dist/components/p-CdofjRtQ.js.map +0 -1
- package/dist/components/p-CkTUjPwD.js +0 -2
- package/dist/components/p-CkTUjPwD.js.map +0 -1
- package/dist/components/p-CpI4KFOu.js +0 -2
- package/dist/components/p-CpI4KFOu.js.map +0 -1
- package/dist/components/p-D1HbKFuh.js.map +0 -1
- package/dist/components/p-D7xthqTT.js +0 -2
- package/dist/components/p-D7xthqTT.js.map +0 -1
- package/dist/components/p-DBeynNeU.js +0 -2
- package/dist/components/p-DBeynNeU.js.map +0 -1
- package/dist/components/p-DMLRPGid.js.map +0 -1
- package/dist/components/p-UiqQVZhU.js +0 -2
- package/dist/components/p-UiqQVZhU.js.map +0 -1
- package/dist/components/p-Xq267cFM.js +0 -2
- package/dist/components/p-Xq267cFM.js.map +0 -1
- package/dist/components/p-glDDybgu.js +0 -2
- package/dist/components/p-glDDybgu.js.map +0 -1
- package/dist/esm/app-globals-DQuL1Twl.js.map +0 -1
- package/dist/esm/assets-K2FHD9qn.js +0 -18770
- package/dist/esm/assets-K2FHD9qn.js.map +0 -1
- package/dist/esm/axe-CZ0Rtkog.js +0 -32835
- package/dist/esm/axe-CZ0Rtkog.js.map +0 -1
- package/dist/esm/header-integration.lmvz-button.lmvz-header.lmvz-icon.lmvz-input.lmvz-menuitem-CW3FGLZC.js +0 -3657
- package/dist/esm/header-integration.lmvz-button.lmvz-header.lmvz-icon.lmvz-input.lmvz-menuitem-CW3FGLZC.js.map +0 -1
- package/dist/esm/header-integration_6.entry.js +0 -7
- package/dist/esm/header-integration_6.entry.js.map +0 -1
- package/dist/esm/icons-BITzEzmq.js +0 -1032
- package/dist/esm/icons-BITzEzmq.js.map +0 -1
- package/dist/esm/index-D2eyw7iv.js +0 -2101
- package/dist/esm/index-D2eyw7iv.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/lmvz-action.entry.js.map +0 -1
- package/dist/esm/lmvz-card.entry.js.map +0 -1
- package/dist/esm/lmvz-chip.entry.js.map +0 -1
- package/dist/esm/lmvz-components.js.map +0 -1
- package/dist/esm/loader.js.map +0 -1
- package/dist/lmvz-components/index.esm.js.map +0 -1
- package/dist/lmvz-components/lmvz-components.esm.js.map +0 -1
- package/dist/lmvz-components/p-366a01f8.entry.js +0 -2
- package/dist/lmvz-components/p-366a01f8.entry.js.map +0 -1
- package/dist/lmvz-components/p-84ee7919.entry.js +0 -2
- package/dist/lmvz-components/p-84ee7919.entry.js.map +0 -1
- package/dist/lmvz-components/p-BLwPC3DQ.js +0 -2
- package/dist/lmvz-components/p-BLwPC3DQ.js.map +0 -1
- package/dist/lmvz-components/p-D2eyw7iv.js +0 -3
- package/dist/lmvz-components/p-D2eyw7iv.js.map +0 -1
- package/dist/lmvz-components/p-DANVVVBd.js +0 -7
- package/dist/lmvz-components/p-DANVVVBd.js.map +0 -1
- package/dist/lmvz-components/p-DQuL1Twl.js.map +0 -1
- package/dist/lmvz-components/p-DlDurXvX.js +0 -2
- package/dist/lmvz-components/p-DlDurXvX.js.map +0 -1
- package/dist/lmvz-components/p-Hc4uxoTU.js +0 -13
- package/dist/lmvz-components/p-Hc4uxoTU.js.map +0 -1
- package/dist/lmvz-components/p-a4200b26.entry.js +0 -2
- package/dist/lmvz-components/p-a4200b26.entry.js.map +0 -1
- package/dist/lmvz-components/p-d3243bae.entry.js +0 -2
- package/dist/lmvz-components/p-d3243bae.entry.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["src/api/ds.constants.ts","src/utils/effect.ts"],"sourcesContent":["export const variants = ['primary', 'secondary', 'tertiary'] as const;\n\nexport const scaleValues = ['small', 'default', 'large'] as const;\nexport const sizes = ['xs', 'sm', 'md', 'lg'] as const;\nexport const textSizes = [...sizes, 'xl'] as const;\n\nexport const inputTypes = ['text', 'email', 'password', 'tel', 'url', 'search', 'number'] as const;\n\n// TODO: generate from available tokens (component/icon/size)\nexport const iconSizes = [...sizes, 'inherit'] as const;\nexport const iconWeights = ['thin', 'medium', 'bold', 'filled'] as const;\nexport const iconNames = [\n 'Logo',\n 'actions',\n 'adduser',\n 'alert',\n 'apple',\n 'arrow-down',\n 'arrow-left',\n 'arrow-right',\n 'arrow-up',\n 'book',\n 'bookmark',\n 'checkmark',\n 'chevron-down',\n 'chevron-left',\n 'chevron-right',\n 'chevron-up',\n 'close-l',\n 'close-sm',\n 'cog',\n 'computer',\n 'dashboard',\n 'delete',\n 'download',\n 'edit',\n 'external',\n 'facebook',\n 'favorite',\n 'filter',\n 'group',\n 'hide',\n 'home',\n 'info',\n 'instagram',\n 'letter',\n 'linkedin',\n 'logout',\n 'map',\n 'minus',\n 'navigation',\n 'plus',\n 'qr-scan',\n 'question',\n 'reader',\n 'reset',\n 'school',\n 'search',\n 'send',\n 'settings',\n 'share',\n 'shopping-cart',\n 'show',\n 'snapchat',\n 'sort',\n 'speech-bubble',\n 'star',\n 'student',\n 'upload',\n 'user',\n 'warn-circle',\n 'warn-triangle',\n 'whatsapp',\n 'world',\n 'x',\n 'youtube',\n] as const;\n","import { Effect } from 'effect';\n\nexport type UnwrapEffect<T> = T extends Effect.Effect<infer A, infer E, infer R> ? [A, E, R] : never;\n\nexport function run<T extends Effect.Effect<unknown, unknown, never>>(effect: T): T extends Effect.Effect<infer A, infer E, never> ? Promise<A | E> : never {\n return Effect.runPromise(effect).catch(error => {\n console.error('Unhandled error in Effect:', error);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) as any;\n}\n"],"names":["Effect.runPromise"],"mappings":";;;;;;AAAO,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU;AAEpD,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO;AAChD,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACrC,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,EAAE,IAAI;AAEjC,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ;AAGjF,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,EAAE,SAAS;AACtC,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ;AACvD,MAAM,SAAS,GAAG;IACvB,MAAM;IACN,SAAS;IACT,SAAS;IACT,OAAO;IACP,OAAO;IACP,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,UAAU;IACV,MAAM;IACN,UAAU;IACV,WAAW;IACX,cAAc;IACd,cAAc;IACd,eAAe;IACf,YAAY;IACZ,SAAS;IACT,UAAU;IACV,KAAK;IACL,UAAU;IACV,WAAW;IACX,QAAQ;IACR,UAAU;IACV,MAAM;IACN,UAAU;IACV,UAAU;IACV,UAAU;IACV,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,WAAW;IACX,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,KAAK;IACL,OAAO;IACP,YAAY;IACZ,MAAM;IACN,SAAS;IACT,UAAU;IACV,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,UAAU;IACV,OAAO;IACP,eAAe;IACf,MAAM;IACN,UAAU;IACV,MAAM;IACN,eAAe;IACf,MAAM;IACN,SAAS;IACT,QAAQ;IACR,MAAM;IACN,aAAa;IACb,eAAe;IACf,UAAU;IACV,OAAO;IACP,GAAG;IACH,SAAS;;;ACvEL,SAAU,GAAG,CAAmD,MAAS,EAAA;IAC7E,OAAOA,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,IAAG;AAC7C,QAAA,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC;AAEpD,KAAC,CAAQ;AACX;;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"file":"lmvz-action.cjs.entry.js","mappings":";;;;AAAA,MAAM,aAAa,GAAG,MAAM,CAAC,oBAAoB,CAAC;;MCOrC,UAAU,GAAA,MAAA;;;;;AACZ,IAAA,WAAW;AAEZ,IAAA,QAAQ,CAAC,KAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;;IAG9B,MAAM,GAAA;AACJ,QAAA,QACEA,OAAA,CAACC,UAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA,EACrCD,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAa,CACR;;;;;;;","names":["h","Host"],"sources":["src/components/lmvz-action/lmvz-action.css?tag=lmvz-action&encapsulation=shadow","src/components/lmvz-action/lmvz-action.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, Event, EventEmitter, Host, h } from '@stencil/core';\n\n@Component({\n tag: 'lmvz-action',\n styleUrl: 'lmvz-action.css',\n shadow: true,\n})\nexport class LmvzAction {\n @Event() actionClick!: EventEmitter<MouseEvent>;\n\n private _onClick(event: MouseEvent) {\n this.actionClick.emit(event);\n }\n\n render() {\n return (\n <Host onClick={this._onClick.bind(this)}>\n <slot></slot>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"file":"lmvz-card.cjs.entry.js","mappings":";;;;;AAAA,MAAM,WAAW,GAAG,MAAM,CAAC,0mPAA0mP,CAAC;;MCWznP,QAAQ,GAAA,MAAA;;;;;AAEX,IAAA,SAAS;AAGT,IAAA,QAAQ;AAGR,IAAA,WAAW;IAGX,kBAAkB,GAAW,EAAE;AAG9B,IAAA,aAAa;AAEtB,IAAA,IAAY,aAAa,GAAA;AACvB,QAAA,OAAOA,cAAO,CAACC,+BAAwB,CAAC,sBAAsB,CAAC,CAAC;;IAG1D,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;;AAGnB,IAAA,gBAAgB,CAAC,KAAmB,EAAA;AAE1C,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;IAGpB,MAAM,GAAA;AACJ,QAAA,MAAM,QAAQ,GAAG;YACf,eAAe,EAAE,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAA,CAAA,CAAG;SAC/D;QACD,QACEC,OAAA,CAACC,UAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAC,IAAI,EAAC,SAAS,EAAA,EAClBD,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,KAAK,EAAA,EACdA,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,eAAe,EAAC,KAAK,EAAE,QAAQ,EAAA,EACxCA,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,WAAW,EAAA,EACpBA,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,MAAM,EAAA,CAAQ,CACrB,CACF,CACF,EACNA,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,QAAQ,EAAA,EACjBA,OAAA,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACEA,OAAA,CAAA,IAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAI,KAAK,EAAC,OAAO,EAAA,EAAE,IAAI,CAAC,SAAS,CAAM,CAChC,EACTA,OAAA,CAAA,GAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAG,KAAK,EAAC,aAAa,IAAE,IAAI,CAAC,WAAW,CAAK,EAE7CA,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,SAAS,EAAA,EAClBA,OAAA,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAQ,KAAK,EAAC,SAAS,EAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA,aAAA,EAAc,SAAS,IACpF,IAAI,CAAC,kBAAkB,CACjB,EAETA,OAAA,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAQ,KAAK,EAAC,UAAU,EAAA,YAAA,EAAY,cAAc,EAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAA,EAC/EA,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,kBAAkB,EAAA,EAAA,KAAA,CAAW,CAClC,CAIL,CACF,CACD;;;;;;;;","names":["runSync","syncCreateAssetUrlSafely","h","Host"],"sources":["src/components/lmvz-card/lmvz-card.css?tag=lmvz-card&encapsulation=scoped","src/components/lmvz-card/lmvz-card.tsx"],"sourcesContent":["@import url('../../styles/internal/define-layers.css');\n\n@import url('../../styles/fragments/_routerFont.css') layer(lmvz-ds.theme);\n@import url('../../styles/fragments/_reset.css') layer(lmvz-ds.reset);\n\n:host {\n /** component dependencies */\n /* * the (invalid nested) import will be handled by postcss */\n /* stylelint-disable no-invalid-position-at-import-rule */\n @import url('../../styles/fragments/_buttons.css');\n\n display: flex;\n min-width: var(--lmvz-other-component-card-minwidth);\n max-width: var(--lmvz-other-component-card-maxwidth);\n flex-direction: column;\n align-items: flex-start;\n\n border-radius: var(--lmvz-semantic-border-radius-lg);\n border: var(--lmvz-semantic-border-width-default) solid var(--lmvz-semantic-color-border-default);\n background: var(--lmvz-semantic-color-surface-primary);\n}\n\n* {\n color: var(--lmvz-semantic-color-on-surface-primary);\n font: var(--lmvz-typography-body-md);\n}\n\n.top {\n display: flex;\n padding: var(--lmvz-dimension-8-12);\n flex-direction: column;\n justify-content: center;\n align-items: center;\n align-self: stretch;\n}\n\n.bottom {\n display: flex;\n min-width: 150px;\n padding: var(--lmvz-dimension-4-6) var(--lmvz-dimension-10-14) var(--lmvz-dimension-10-14) var(--lmvz-dimension-10-14);\n flex-direction: column;\n align-items: flex-start;\n align-self: stretch;\n}\n\n.title {\n margin: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n align-self: stretch;\n\n padding-bottom: var(--lmvz-global-s4);\n overflow-wrap: break-word;\n font: var(--lmvz-typography-heading-2xl);\n}\n\n.description {\n display: flex;\n margin: 0;\n padding-bottom: var(--lmvz-component-body-sm-padding-bottom);\n align-items: flex-start;\n align-self: stretch;\n white-space: pre-line;\n font: var(--lmvz-typography-body-md);\n}\n\n.image-wrapper {\n aspect-ratio: 4 / 3;\n width: 100%;\n background-size: cover;\n background-position: center;\n flex: 1 0 0;\n align-self: stretch;\n border-radius: var(--lmvz-semantic-border-radius-md);\n}\n\n.actions {\n margin-top: var(--lmvz-component-form-wrapper-gap-y);\n display: flex;\n align-items: center;\n gap: var(--lmvz-component-input-md-gap-x);\n align-self: stretch;\n}\n\nbutton.primary,\nlmvz-button.primary {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: var(--lmvz-component-input-md-gap-x);\n flex: 1 0 0;\n}\n\n/* .overflow-button {\n anchor-name: --overflow-button;\n} */\n\n/* menu {\n position: fixed;\n position-anchor: --overflow-button;\n\n inset-block-start: anchor(end);\n inset-inline-end: anchor(self-end);\n margin: 5px 0 0 5px;\n} */\n","import { Component, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\n\nimport { runSync } from 'effect/Effect';\nimport { syncCreateAssetUrlSafely } from '../../utils/assets';\n\n@Component({\n tag: 'lmvz-card',\n styleUrl: 'lmvz-card.css',\n scoped: true,\n assetsDirs: ['../../assets'],\n})\nexport class LmvzCard {\n /** Card title (required) */\n @Prop() cardTitle!: string;\n\n /** Optional image URL; placeholder used if omitted */\n @Prop() imageUrl?: string;\n\n /** Optional description */\n @Prop() description?: string;\n\n /** Primary action button label */\n @Prop() primaryActionLabel: string = '';\n\n /** Event emitted when primary button is clicked */\n @Event() primaryAction!: EventEmitter<PointerEvent>;\n\n private get fallbackImage() {\n return runSync(syncCreateAssetUrlSafely('card-placeholder.svg'));\n }\n\n private _onPrimaryClick() {\n this.primaryAction.emit();\n }\n\n private _onOverflowClick(event: PointerEvent) {\n // TODO: show menu\n console.log(event);\n }\n\n render() {\n const imgStyle = {\n backgroundImage: `url(${this.imageUrl ?? this.fallbackImage})`,\n };\n return (\n <Host role=\"article\">\n <div class=\"top\">\n <div class=\"image-wrapper\" style={imgStyle}>\n <div class=\"chip-slot\">\n <slot name=\"chip\"></slot>\n </div>\n </div>\n </div>\n <div class=\"bottom\">\n <header>\n <h2 class=\"title\">{this.cardTitle}</h2>\n </header>\n <p class=\"description\">{this.description}</p>\n {/* TODO: hide unless actions are available https://stackoverflow.com/questions/53796599/how-to-determine-number-of-children-in-a-slot */}\n <div class=\"actions\">\n <button class=\"primary\" onClick={this._onPrimaryClick.bind(this)} data-testid=\"primary\">\n {this.primaryActionLabel}\n </button>\n {/* popoverTarget=\"mypopover\" */}\n <button class=\"tertiary\" aria-label=\"More actions\" onClick={this._onOverflowClick}>\n <span class=\"icon-placeholder\">...</span>\n </button>\n {/* <menu id=\"mypopover\" popover=\"manual\">\n <li>TEST</li>\n </menu> */}\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"file":"lmvz-chip.cjs.entry.js","mappings":";;;;AAAA,MAAM,WAAW,GAAG,MAAM,CAAC,oBAAoB,CAAC;;MCOnC,QAAQ,GAAA,MAAA;;;;AACX,IAAA,IAAI;IAEZ,MAAM,GAAA;AACJ,QAAA,OAAOA,QAACC,UAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EAAE,IAAI,CAAC,IAAI,CAAQ;;;;;;;","names":["h","Host"],"sources":["src/components/lmvz-chip/lmvz-chip.css?tag=lmvz-chip&encapsulation=shadow","src/components/lmvz-chip/lmvz-chip.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, Host, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'lmvz-chip',\n styleUrl: 'lmvz-chip.css',\n shadow: true,\n})\nexport class LmvzChip {\n @Prop() text: string;\n\n render() {\n return <Host>{this.text}</Host>;\n }\n}\n"],"version":3}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lmvz-components.cjs.js","sources":["../../node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"sourcesContent":["/*\n Stencil Client Patch Browser v4.43.2 | MIT Licensed | https://stenciljs.com\n */\n\n// src/client/client-patch-browser.ts\nimport { BUILD, NAMESPACE } from \"@stencil/core/internal/app-data\";\nimport { consoleDevInfo, H, promiseResolve, win } from \"@stencil/core\";\nvar patchBrowser = () => {\n if (BUILD.isDev && !BUILD.isTesting) {\n consoleDevInfo(\"Running in development mode.\");\n }\n if (BUILD.cloneNodeFix) {\n patchCloneNodeFix(H.prototype);\n }\n const scriptElm = BUILD.scriptDataOpts ? win.document && Array.from(win.document.querySelectorAll(\"script\")).find(\n (s) => new RegExp(`/${NAMESPACE}(\\\\.esm)?\\\\.js($|\\\\?|#)`).test(s.src) || s.getAttribute(\"data-stencil-namespace\") === NAMESPACE\n ) : null;\n const importMeta = import.meta.url;\n const opts = BUILD.scriptDataOpts ? (scriptElm || {})[\"data-opts\"] || {} : {};\n if (importMeta !== \"\") {\n opts.resourcesUrl = new URL(\".\", importMeta).href;\n }\n return promiseResolve(opts);\n};\nvar patchCloneNodeFix = (HTMLElementPrototype) => {\n const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;\n HTMLElementPrototype.cloneNode = function(deep) {\n if (this.nodeName === \"TEMPLATE\") {\n return nativeCloneNodeFn.call(this, deep);\n }\n const clonedNode = nativeCloneNodeFn.call(this, false);\n const srcChildNodes = this.childNodes;\n if (deep) {\n for (let i = 0; i < srcChildNodes.length; i++) {\n if (srcChildNodes[i].nodeType !== 2) {\n clonedNode.appendChild(srcChildNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nexport {\n patchBrowser\n};\n","export { setNonce } from '@stencil/core';\nimport { bootstrapLazy } from '@stencil/core';\nimport { patchBrowser } from '@stencil/core/internal/client/patch-browser';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\npatchBrowser().then(async (options) => {\n await globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n});\n"],"names":["promiseResolve","globalScripts","bootstrapLazy"],"mappings":";;;;;;AAAA;AACA;AACA;;AAKA,IAAI,YAAY,GAAG,MAAM;AAUzB,EAAE,MAAM,UAAU,GAAG,wQAAe;AACpC,EAAE,MAAM,IAAI,GAAiE,EAAE;AAC/E,EAAE,IAAI,UAAU,KAAK,EAAE,EAAE;AACzB,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI;AACrD;AACA,EAAE,OAAOA,oBAAc,CAAC,IAAI,CAAC;AAC7B,CAAC;;ACnBD,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,OAAO,KAAK;AACvC,EAAE,MAAMC,wBAAa,EAAE;AACvB,EAAE,OAAOC,mBAAa,CAAC,4BAA4B,EAAE,OAAO,CAAC;AAC7D,CAAC,CAAC;;;;","x_google_ignoreList":[0]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loader.cjs.js","sources":["@lazy-external-entrypoint?app-data=conditional"],"sourcesContent":["export { setNonce } from '@stencil/core';\nimport { bootstrapLazy } from '@stencil/core';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\nexport const defineCustomElements = async (win, options) => {\n if (typeof window === 'undefined') return undefined;\n await globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n};\n"],"names":["globalScripts","bootstrapLazy"],"mappings":";;;;;AAGY,MAAC,oBAAoB,GAAG,OAAO,GAAG,EAAE,OAAO,KAAK;AAC5D,EAAE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,OAAO,SAAS;AACrD,EAAE,MAAMA,wBAAa,EAAE;AACvB,EAAE,OAAOC,mBAAa,CAAC,4BAA4B,EAAE,OAAO,CAAC;AAC7D;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ds.constants.js","sourceRoot":"","sources":["../../src/api/ds.constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAU,CAAC;AAEtE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AAClE,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AACvD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,EAAE,IAAI,CAAU,CAAC;AAEnD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAGnG,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,EAAE,SAAS,CAAU,CAAC;AACxD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC;AACzE,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,MAAM;IACN,SAAS;IACT,SAAS;IACT,OAAO;IACP,OAAO;IACP,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,UAAU;IACV,MAAM;IACN,UAAU;IACV,WAAW;IACX,cAAc;IACd,cAAc;IACd,eAAe;IACf,YAAY;IACZ,SAAS;IACT,UAAU;IACV,KAAK;IACL,UAAU;IACV,WAAW;IACX,QAAQ;IACR,UAAU;IACV,MAAM;IACN,UAAU;IACV,UAAU;IACV,UAAU;IACV,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,WAAW;IACX,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,KAAK;IACL,OAAO;IACP,YAAY;IACZ,MAAM;IACN,SAAS;IACT,UAAU;IACV,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,UAAU;IACV,OAAO;IACP,eAAe;IACf,MAAM;IACN,UAAU;IACV,MAAM;IACN,eAAe;IACf,MAAM;IACN,SAAS;IACT,QAAQ;IACR,MAAM;IACN,aAAa;IACb,eAAe;IACf,UAAU;IACV,OAAO;IACP,GAAG;IACH,SAAS;CACD,CAAC","sourcesContent":["export const variants = ['primary', 'secondary', 'tertiary'] as const;\n\nexport const scaleValues = ['small', 'default', 'large'] as const;\nexport const sizes = ['xs', 'sm', 'md', 'lg'] as const;\nexport const textSizes = [...sizes, 'xl'] as const;\n\nexport const inputTypes = ['text', 'email', 'password', 'tel', 'url', 'search', 'number'] as const;\n\n// TODO: generate from available tokens (component/icon/size)\nexport const iconSizes = [...sizes, 'inherit'] as const;\nexport const iconWeights = ['thin', 'medium', 'bold', 'filled'] as const;\nexport const iconNames = [\n 'Logo',\n 'actions',\n 'adduser',\n 'alert',\n 'apple',\n 'arrow-down',\n 'arrow-left',\n 'arrow-right',\n 'arrow-up',\n 'book',\n 'bookmark',\n 'checkmark',\n 'chevron-down',\n 'chevron-left',\n 'chevron-right',\n 'chevron-up',\n 'close-l',\n 'close-sm',\n 'cog',\n 'computer',\n 'dashboard',\n 'delete',\n 'download',\n 'edit',\n 'external',\n 'facebook',\n 'favorite',\n 'filter',\n 'group',\n 'hide',\n 'home',\n 'info',\n 'instagram',\n 'letter',\n 'linkedin',\n 'logout',\n 'map',\n 'minus',\n 'navigation',\n 'plus',\n 'qr-scan',\n 'question',\n 'reader',\n 'reset',\n 'school',\n 'search',\n 'send',\n 'settings',\n 'share',\n 'shopping-cart',\n 'show',\n 'snapchat',\n 'sort',\n 'speech-bubble',\n 'star',\n 'student',\n 'upload',\n 'user',\n 'warn-circle',\n 'warn-triangle',\n 'whatsapp',\n 'world',\n 'x',\n 'youtube',\n] as const;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC","sourcesContent":["export type * from './aria-types';\nexport * from './ds.constants';\nexport type * from './ds.types';\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lmvz-action.js","sourceRoot":"","sources":["../../../src/components/lmvz-action/lmvz-action.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAgB,IAAI,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAOxE,MAAM,OAAO,UAAU;IACZ,WAAW,CAA4B;IAExC,QAAQ,CAAC,KAAiB;QAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM;QACJ,OAAO,CACL,EAAC,IAAI,qDAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACrC,8DAAa,CACR,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Event, EventEmitter, Host, h } from '@stencil/core';\n\n@Component({\n tag: 'lmvz-action',\n styleUrl: 'lmvz-action.css',\n shadow: true,\n})\nexport class LmvzAction {\n @Event() actionClick!: EventEmitter<MouseEvent>;\n\n private _onClick(event: MouseEvent) {\n this.actionClick.emit(event);\n }\n\n render() {\n return (\n <Host onClick={this._onClick.bind(this)}>\n <slot></slot>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lmvz-button.js","sourceRoot":"","sources":["../../../src/components/lmvz-button/lmvz-button.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, Host, Prop, h, type EventEmitter } from '@stencil/core';\nimport classNames from 'classnames';\nimport { Button } from '../../api';\nimport { findFormByRef, inheritAriaAttributes, type Attributes, type FormRef } from '../../utils/component';\nimport { ElementActivationController, type ElementActivationHost } from '../../utils/element-activation-controller';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/validation/aria-validation-controller';\n\n/**\n * @slot default - Slot for the content of the button\n */\n@Component({\n tag: 'lmvz-button',\n styleUrl: './lmvz-button.css',\n shadow: { delegatesFocus: true },\n})\nexport class LmvzButton extends ReactiveControllerHost implements AriaValidationHost, ElementActivationHost {\n @Element() el: HTMLLmvzButtonElement;\n\n private inheritedAttributes: Attributes = {};\n private formEl: HTMLFormElement | null = null;\n private formButtonEl: HTMLButtonElement | null = null;\n\n @Event() lmvzActivation: EventEmitter<void>;\n\n @Prop({ reflect: true, attribute: 'tabindex' }) get ti() {\n return 0;\n }\n\n /**\n * Scale of the button\n * @default 'default'\n */\n @Prop({ reflect: true }) scale: Button.Scale = 'default';\n\n /**\n * Variant of the button\n * @default 'secondary', since the primary button should be marked as such in context\n */\n @Prop({ reflect: true }) variant: Button.Variant = 'secondary';\n\n /**\n * Whether the button is disabled\n * @default false\n */\n @Prop({ reflect: true }) disabled = false;\n\n @Prop() type: 'submit' | 'button' = 'button';\n\n /**\n * The HTML form element or form element id. Used to submit a form when the button is not a child of the form.\n */\n @Prop() form?: FormRef;\n\n constructor() {\n super();\n this.addController(new AriaValidationController(this));\n this.addController(\n new ElementActivationController(this, {\n localHandler: this.handleClick.bind(this),\n keys: ['Enter'],\n }),\n );\n }\n\n connectedCallback(): void {\n this.inheritedAttributes = inheritAriaAttributes(this.el);\n }\n\n /**\n * This renders a hidden native button element inside the associated form.\n * This allows users to submit a form by pressing \"Enter\" when a text\n * field inside of the form is focused, even though our native button is in the Shadow DOM.\n */\n private renderHiddenButton() {\n const formEl = (this.formEl = findFormByRef(this.form, this.el));\n if (!formEl) return;\n\n const { formButtonEl } = this;\n\n // append only once\n if (formButtonEl !== null && formEl.contains(formButtonEl)) return;\n\n const newFormButtonEl = (this.formButtonEl = document.createElement('button'));\n newFormButtonEl.type = 'submit';\n newFormButtonEl.style.display = 'none';\n newFormButtonEl.disabled = this.disabled;\n\n formEl.appendChild(newFormButtonEl);\n }\n\n private submitForm(ev: Event) {\n if (this.formEl && this.formButtonEl) {\n ev.preventDefault();\n this.formButtonEl.click();\n }\n }\n\n private handleClick = (ev: Event) => {\n if (this.type === 'submit') {\n this.submitForm(ev);\n }\n };\n\n render() {\n this.renderHiddenButton();\n\n return (\n <Host aria-disabled={this.disabled ? 'true' : null}>\n <button disabled={this.disabled} class={classNames(this.variant, { [this.scale ?? '']: !!this.scale, disabled: this.disabled })} {...this.inheritedAttributes}>\n <slot></slot>\n </button>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lmvz-card.js","sourceRoot":"","sources":["../../../src/components/lmvz-card/lmvz-card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE9E,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAQ9D,MAAM,OAAO,QAAQ;IAEX,SAAS,CAAU;IAGnB,QAAQ,CAAU;IAGlB,WAAW,CAAU;IAGrB,kBAAkB,GAAW,EAAE,CAAC;IAG/B,aAAa,CAA8B;IAEpD,IAAY,aAAa;QACvB,OAAO,OAAO,CAAC,wBAAwB,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACnE,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IAEO,gBAAgB,CAAC,KAAmB;QAE1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,MAAM;QACJ,MAAM,QAAQ,GAAG;YACf,eAAe,EAAE,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,GAAG;SAC/D,CAAC;QACF,OAAO,CACL,EAAC,IAAI,qDAAC,IAAI,EAAC,SAAS;YAClB,4DAAK,KAAK,EAAC,KAAK;gBACd,4DAAK,KAAK,EAAC,eAAe,EAAC,KAAK,EAAE,QAAQ;oBACxC,4DAAK,KAAK,EAAC,WAAW;wBACpB,6DAAM,IAAI,EAAC,MAAM,GAAQ,CACrB,CACF,CACF;YACN,4DAAK,KAAK,EAAC,QAAQ;gBACjB;oBACE,2DAAI,KAAK,EAAC,OAAO,IAAE,IAAI,CAAC,SAAS,CAAM,CAChC;gBACT,0DAAG,KAAK,EAAC,aAAa,IAAE,IAAI,CAAC,WAAW,CAAK;gBAE7C,4DAAK,KAAK,EAAC,SAAS;oBAClB,+DAAQ,KAAK,EAAC,SAAS,EAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAc,SAAS,IACpF,IAAI,CAAC,kBAAkB,CACjB;oBAET,+DAAQ,KAAK,EAAC,UAAU,gBAAY,cAAc,EAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB;wBAC/E,6DAAM,KAAK,EAAC,kBAAkB,UAAW,CAClC,CAIL,CACF,CACD,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\n\nimport { runSync } from 'effect/Effect';\nimport { syncCreateAssetUrlSafely } from '../../utils/assets';\n\n@Component({\n tag: 'lmvz-card',\n styleUrl: 'lmvz-card.css',\n scoped: true,\n assetsDirs: ['../../assets'],\n})\nexport class LmvzCard {\n /** Card title (required) */\n @Prop() cardTitle!: string;\n\n /** Optional image URL; placeholder used if omitted */\n @Prop() imageUrl?: string;\n\n /** Optional description */\n @Prop() description?: string;\n\n /** Primary action button label */\n @Prop() primaryActionLabel: string = '';\n\n /** Event emitted when primary button is clicked */\n @Event() primaryAction!: EventEmitter<PointerEvent>;\n\n private get fallbackImage() {\n return runSync(syncCreateAssetUrlSafely('card-placeholder.svg'));\n }\n\n private _onPrimaryClick() {\n this.primaryAction.emit();\n }\n\n private _onOverflowClick(event: PointerEvent) {\n // TODO: show menu\n console.log(event);\n }\n\n render() {\n const imgStyle = {\n backgroundImage: `url(${this.imageUrl ?? this.fallbackImage})`,\n };\n return (\n <Host role=\"article\">\n <div class=\"top\">\n <div class=\"image-wrapper\" style={imgStyle}>\n <div class=\"chip-slot\">\n <slot name=\"chip\"></slot>\n </div>\n </div>\n </div>\n <div class=\"bottom\">\n <header>\n <h2 class=\"title\">{this.cardTitle}</h2>\n </header>\n <p class=\"description\">{this.description}</p>\n {/* TODO: hide unless actions are available https://stackoverflow.com/questions/53796599/how-to-determine-number-of-children-in-a-slot */}\n <div class=\"actions\">\n <button class=\"primary\" onClick={this._onPrimaryClick.bind(this)} data-testid=\"primary\">\n {this.primaryActionLabel}\n </button>\n {/* popoverTarget=\"mypopover\" */}\n <button class=\"tertiary\" aria-label=\"More actions\" onClick={this._onOverflowClick}>\n <span class=\"icon-placeholder\">...</span>\n </button>\n {/* <menu id=\"mypopover\" popover=\"manual\">\n <li>TEST</li>\n </menu> */}\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lmvz-chip.js","sourceRoot":"","sources":["../../../src/components/lmvz-chip/lmvz-chip.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAOzD,MAAM,OAAO,QAAQ;IACX,IAAI,CAAS;IAErB,MAAM;QACJ,OAAO,EAAC,IAAI,uDAAE,IAAI,CAAC,IAAI,CAAQ,CAAC;IAClC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'lmvz-chip',\n styleUrl: 'lmvz-chip.css',\n shadow: true,\n})\nexport class LmvzChip {\n @Prop() text: string;\n\n render() {\n return <Host>{this.text}</Host>;\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lmvz-header.js","sourceRoot":"","sources":["../../../src/components/lmvz-header/lmvz-header.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, h, Host, Prop, Watch } from '@stencil/core';\nimport { ListKeyboardNavigationController, type ListKeyboardNavigationHost } from '../../utils/list-keyboard-controller';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/validation/aria-validation-controller';\n\n/**\n * An accessible, application-style navigation header component, that renders two connected levels of navigation.\n *\n * @slot brand - The branding area, typically containing a logo and/or site title.\n *\n * @slot nav-primary - The first level of the navigation.\n * This is required and must only contain <lmvz-menuitem> elements.\n * Each menuitem should have an id, which will be used to link it to the corresponding secondary nav items.\n *\n * @slot connect-nav-`lmvzActiveNav` - The second level of the navigation. This is optional and must also contain <lmvz-menuitem> elements.\n * Only if the secondary nav items' `slot=\"${name}\"` matches \"connect-nav-`lmvzActiveNav`\"\n * (including lmvzActiveNav from the component's props),\n * then these secondary items will be displayed in the second level navigation.\n *\n * @slot actions - An optional slot for actions, such as user profile, settings, logout, etc. This content is aligned to the right side of the header.\n */\n@Component({\n tag: 'lmvz-header',\n styleUrl: './lmvz-header.css',\n shadow: true,\n})\nexport class LmvzHeader extends ReactiveControllerHost implements AriaValidationHost, ListKeyboardNavigationHost {\n @Element() readonly el!: HTMLElement;\n\n private primarySlot!: HTMLSlotElement;\n private secondarySlot!: HTMLSlotElement;\n private secondaryNav!: HTMLElement;\n\n private keyboardNavigationController = new ListKeyboardNavigationController(this);\n\n private get primaryMenuitems() {\n return this.primarySlot.assignedElements({ flatten: false });\n }\n\n private get secondaryMenuitems() {\n return this.secondarySlot.assignedElements({ flatten: true });\n }\n\n @Prop({ reflect: true }) get role() {\n return 'banner';\n }\n\n @Prop() lmvzActiveNav?: string;\n\n get secondarySlotName() {\n return `connect-nav-${this.lmvzActiveNav}`;\n }\n\n constructor() {\n super();\n this.addController(new AriaValidationController(this, { reValidateOnPropChanges: true }));\n this.addController(this.keyboardNavigationController);\n }\n\n @Watch('lmvzActiveNav')\n handleActiveNavChange() {\n this.updateElementsActive();\n }\n\n componentDidLoad() {\n this.primarySlot.addEventListener('slotchange', this.handlePrimaryNavChange.bind(this));\n this.handlePrimaryNavChange(); // initial check for already assigned elements\n this.secondarySlot.addEventListener('slotchange', this.handleSecondaryNavChange.bind(this));\n }\n\n private handlePrimaryNavChange() {\n const items = this.primaryMenuitems;\n if (!items.length) {\n console.warn('Primary slot has no assigned elements. Please add navigation items to the primary slot.');\n return;\n }\n\n items.forEach(el => {\n el.setAttribute('aria-haspopup', 'true');\n el.setAttribute('aria-controls', `nav-secondary`);\n });\n this.updateElementsActive();\n }\n\n private handleSecondaryNavChange() {\n const items = this.secondaryMenuitems;\n if (!items.length) {\n // It's valid to have no secondary items for a given primary item, so we just return early without warning\n return;\n }\n this.keyboardNavigationController.updateElements([...this.primaryMenuitems, ...this.secondaryMenuitems]);\n }\n\n private updateElementsActive() {\n const items = this.primaryMenuitems;\n let label: string;\n items.forEach(el => {\n const isActive = el.id === this.lmvzActiveNav;\n if (isActive) label = el.textContent || el.id;\n el.setAttribute('aria-expanded', isActive ? 'true' : 'false');\n });\n\n this.secondaryNav.setAttribute('aria-label', `Untermenü für ${label}`);\n }\n\n private delegateFocus() {\n // If the header itself receives focus, delegate it to the first focusable element in the primary nav\n const firstFocusable = this.primaryMenuitems[0] as HTMLElement | undefined;\n if (firstFocusable) {\n firstFocusable.focus();\n }\n }\n\n render() {\n return (\n <Host onFocus={this.delegateFocus.bind(this)}>\n <div class=\"brand\">\n <slot name=\"brand\">\n <lmvz-icon id=\"fallback-logo-lmvz\" icon=\"Logo\" size=\"inherit\" aria-label=\"Lehrmittelverlag Zürich\"></lmvz-icon>\n </slot>\n {/* brand image, title, etc. */}\n </div>\n\n <nav aria-label=\"Hauptnavigation\">\n <div role=\"menubar\" class=\"primary-menubar\">\n <slot name=\"nav-primary\" ref={el => (this.primarySlot = el)}></slot>\n\n <separator></separator>\n\n <div role=\"menu\" id=\"nav-secondary\" class=\"secondary-menubar\" hidden={!this.lmvzActiveNav} ref={el => (this.secondaryNav = el)}>\n <slot name={this.secondarySlotName} ref={el => (this.secondarySlot = el)}></slot>\n </div>\n </div>\n </nav>\n\n <div class=\"actions\">\n <slot name=\"actions\"></slot>\n {/* user avatar, name, settings, etc. */}\n </div>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../../src/components/lmvz-icon/icons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAI7E,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,uGAAuG,CAAC,CAAC;AAGxJ,MAAM,eAAe,GAAG,GAAG,EAAE,CAC3B,KAAK,CAAC,IAAI,CAAC;IACT,QAAQ,EAAE,GAAG;IACb,UAAU,EAAE,QAAQ,CAAC,QAAQ;IAC7B,MAAM,EAAE,CAAC,GAAiB,EAAE,EAAE,CAC5B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,IAAI,GAAG,GAAoB,CAAC;QAClC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,wBAAwB,CAAC,GAAG,IAAI,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAClD,OAAO,KAAK,CAAC,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;IACrD,CAAC,CAAC;CACL,CAAC,CAAC;AAEL,IAAI,aAAa,GAA+D,IAAI,CAAC;AAarF,MAAM,UAAU,YAAY,CAAC,IAAmB;IAC9C,MAAM,GAAG,GAAiB,IAAI,CAAC;IAC/B,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,aAAa,GAAG,KAAK,CAAC,CAAC,eAAe,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAoD,CAAC;IAC1F,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,UAAU,CAAC,yDAAyD,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { Cache, Duration, Effect } from 'effect';\nimport { Icon } from '../..';\nimport { syncCreateAssetUrlSafely } from '../../utils/assets';\nimport type { UnwrapEffect } from '../../utils/effect';\nimport { httpClient, responseAsText } from '../../utils/http';\nimport { createValidSVGString, SVGString } from '../../utils/validation/svg';\n\nexport type IconData = SVGString;\nexport type IconCacheKey = `${Icon.IconName}`;\nexport const emptyDefaultSvg = () => SVGString(`<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"></svg>`);\n\n// Create a cache for icon data (concurrent-safe, TTL infinite)\nconst createIconCache = () =>\n Cache.make({\n capacity: 200,\n timeToLive: Duration.infinity,\n lookup: (key: IconCacheKey) =>\n Effect.gen(function* () {\n const name = key as Icon.IconName;\n const assetPath = yield* syncCreateAssetUrlSafely(`${name}.svg`, 'icons');\n const res = yield* httpClient(assetPath);\n const responseString = yield* responseAsText(res);\n return yield* createValidSVGString(responseString);\n }),\n });\n\nlet cacheInstance: UnwrapEffect<ReturnType<typeof createIconCache>>[0] | null = null;\n\n/**\n * Fetches an icon from the cache by name, falling back to an empty default SVG if not found.\n *\n * @param name - The name of the icon to fetch from the cache.\n * @returns An Effect that yields a valid SVG string (branded), always.\n *\n * @example\n * ```typescript\n * const iconEffect = fetchIcon('home');\n * ```\n */\nexport function fetchIconSvg(name: Icon.IconName) {\n const key: IconCacheKey = name;\n return Effect.gen(function* () {\n if (!cacheInstance) {\n cacheInstance = yield* createIconCache();\n }\n return yield* cacheInstance.get(key) satisfies Effect.Effect<SVGString, unknown, never>;\n });\n}\n\nexport function clearIconCache() {\n return Effect.gen(function* () {\n if (cacheInstance) {\n yield* cacheInstance.invalidateAll;\n } else {\n Effect.logWarning('Attempted to clear icon cache before it was initialized');\n }\n });\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lmvz-icon.js","sourceRoot":"","sources":["../../../src/components/lmvz-icon/lmvz-icon.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Build, Component, Element, h, Host, Prop, State, Watch } from '@stencil/core';\nimport { Effect } from 'effect';\nimport { Icon } from '../../api';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/validation/aria-validation-controller';\nimport { emptyDefaultSvg, fetchIconSvg, IconData } from './icons';\n\n/**\n * `lmvz-icon` is a web component that lazy-loads and displays an SVG icon from our predefined icon set.\n * It uses an IntersectionObserver to defer loading the icon until it becomes visible in the viewport. Once loaded, icon data is cached across instances.\n */\n@Component({\n tag: 'lmvz-icon',\n styleUrl: 'lmvz-icon.css',\n scoped: true,\n assetsDirs: ['../../assets/icons'],\n})\nexport class LmvzIcon extends ReactiveControllerHost implements AriaValidationHost {\n private intersectionObserver: IntersectionObserver;\n\n @Element() el!: HTMLElement;\n\n /**\n * The name of the icon to display (required).\n */\n @Prop({ reflect: true }) icon!: Icon.IconName;\n\n /**\n * The weight/style of the icon (optional, default is 'medium').\n */\n @Prop({ reflect: true }) weight?: Icon.IconWeight = 'medium';\n\n /**\n * The size of the icon (optional, default is 'md').\n */\n @Prop({ reflect: true }) size?: Icon.Size = 'md';\n\n @State() private iconData: IconData;\n @State() private visible = false;\n\n @Prop({ reflect: true }) ariaLabel?: string;\n\n private get ariaHidden() {\n return !this.ariaLabel;\n }\n\n constructor() {\n super();\n this.addController(new AriaValidationController(this));\n }\n\n connectedCallback() {\n this.waitUntilVisible(() => {\n this.visible = true;\n this.loadIconPathData();\n });\n }\n\n disconnectedCallback() {\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = null;\n }\n }\n\n @Watch('icon')\n private async loadIconPathData() {\n const { icon, visible } = this;\n\n if (!Build.isBrowser || !icon || !visible) {\n return;\n }\n this.iconData = await Effect.runPromise(\n fetchIconSvg(this.icon).pipe(\n Effect.tapError(error => Effect.logError(`Error loading icon \"${icon}\":`, error.message, error.cause, error.stack)),\n Effect.catchAll(() => Effect.succeed(emptyDefaultSvg())),\n ),\n );\n }\n\n render() {\n return <Host role=\"img\" aria-hidden={`${this.ariaHidden}`} innerHTML={this.iconData}></Host>;\n }\n\n private waitUntilVisible(callback: () => unknown, rootMargin = 50) {\n if (!Build.isBrowser || typeof window === 'undefined' || !window.IntersectionObserver) {\n callback();\n return;\n }\n\n this.intersectionObserver = new IntersectionObserver(\n entries => {\n entries.some(entry => {\n if (entry.isIntersecting) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = null;\n callback();\n return true;\n }\n return false;\n });\n },\n { rootMargin: `${rootMargin}px` },\n );\n\n this.intersectionObserver.observe(this.el);\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"public.js","sourceRoot":"","sources":["../../../src/components/lmvz-icon/public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC","sourcesContent":["export { clearIconCache } from './icons';\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"icons.unit.js","sourceRoot":"","sources":["../../../../src/components/lmvz-icon/test/icons.unit.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from 'effect';\nimport { FetchError, ResponseTextError } from '../../../utils/http';\nimport { BrandValidationError, SVGString } from '../../../utils/validation/svg';\nimport { clearIconCache, emptyDefaultSvg, fetchIconSvg } from '../icons';\n\ndescribe('icon utils:', () => {\n beforeAll(() => {\n global.DOMParser = class {\n // @ts-expect-error unused variable due to mock\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n parseFromString(str: string, type: string) {\n // Simple mock: treat any string containing '<svg' as valid SVG\n return {\n documentElement: {\n nodeName: str.includes('<svg') ? 'svg' : 'not-svg',\n },\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any;\n });\n\n beforeEach(() => {\n jest.resetAllMocks();\n global.fetch = jest.fn();\n return Effect.runPromise(clearIconCache());\n });\n\n const validSvg = '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"></svg>';\n const invalidSvg = '<div>not an svg</div>';\n const iconName = 'actions';\n\n function mockFetchSuccess(svg: string = validSvg) {\n (global.fetch as jest.Mock).mockResolvedValueOnce({\n text: () => Promise.resolve(svg),\n });\n }\n\n function mockFetchFailure() {\n (global.fetch as jest.Mock).mockRejectedValueOnce(new Error('fail'));\n }\n\n test('fetchIcon returns valid SVGString when fetch succeeds with valid SVG', async () => {\n mockFetchSuccess(validSvg);\n const result = await Effect.runPromise(fetchIconSvg(iconName));\n expect(result).toContain('<svg');\n expect(result).not.toBe(emptyDefaultSvg());\n });\n\n test('fetchIcon throws a specific FetchError when fetch fails', async () => {\n mockFetchFailure();\n const res = await Effect.runPromise(fetchIconSvg(iconName).pipe(Effect.flip));\n expect(res).toBeInstanceOf(FetchError);\n });\n\n test('fetchIcon throws a specific InvalidSvgError when SVG is invalid', async () => {\n mockFetchSuccess(invalidSvg);\n const result = await Effect.runPromise(fetchIconSvg(iconName).pipe(Effect.flip));\n expect(result).toBeInstanceOf(BrandValidationError);\n expect(result.message).toContain('SVGString');\n });\n\n test('fetchIcon throws specific NotFoundError when icon is missing', async () => {\n (global.fetch as jest.Mock).mockResolvedValueOnce({\n text: () => Promise.reject(new Error('not found')),\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = await Effect.runPromise(fetchIconSvg('missing' as any).pipe(Effect.flip));\n expect(result).toBeInstanceOf(ResponseTextError);\n });\n\n test('fetchIcon throws specific BrandValidationError for empty SVG string', async () => {\n mockFetchSuccess('');\n const result = await Effect.runPromise(fetchIconSvg(iconName).pipe(Effect.flip));\n expect(result).toBeInstanceOf(BrandValidationError);\n });\n test('fetchIcon throws specific BrandValidationError for non-string SVG', async () => {\n mockFetchSuccess(123 as unknown as string);\n const result = await Effect.runPromise(fetchIconSvg(iconName).pipe(Effect.flip));\n expect(result).toBeInstanceOf(BrandValidationError);\n });\n\n test('SVGString branding enforces valid SVG', () => {\n expect(() => SVGString(validSvg)).not.toThrow();\n expect(() => SVGString(invalidSvg)).toThrow();\n expect(() => SVGString('')).toThrow();\n expect(() => SVGString(123 as unknown as string)).toThrow();\n });\n\n test('emptyDefaultSvg is a valid branded SVGString', () => {\n expect(() => SVGString(emptyDefaultSvg())).not.toThrow();\n expect(emptyDefaultSvg()).toContain('<svg');\n });\n\n test('fetchIcon uses default weight if not provided', async () => {\n mockFetchSuccess(validSvg);\n const result = await Effect.runPromise(fetchIconSvg(iconName));\n expect(result).toContain('<svg');\n });\n\n test('fetchIcon handles multiple calls and caches result', async () => {\n mockFetchSuccess(validSvg);\n const result1 = await Effect.runPromise(fetchIconSvg(iconName));\n const result2 = await Effect.runPromise(fetchIconSvg(iconName));\n expect(result1).toContain('<svg');\n // Should use cache, so fetch not called again\n expect(result2).toBe(result1);\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lmvz-input.js","sourceRoot":"","sources":["../../../src/components/lmvz-input/lmvz-input.tsx"],"names":[],"mappings":"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AAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { AttachInternals, Component, Element, Event, EventEmitter, h, Method, Prop, State, Watch } from '@stencil/core';\nimport classNames from 'classnames';\nimport { Input } from '../../api';\nimport { componentOnReady } from '../../utils/component';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/validation/aria-validation-controller';\n\nlet inputIdCounter = 0;\n\n/**\n * Input component with floating label, (form) validation, and slotted content support.\n *\n * @example\n * ```html\n * <lmvz-input\n * label=\"Email\"\n * type=\"email\"\n * required\n * autocomplete=\"email\"\n * helper-text=\"We'll never share your email\"\n * ></lmvz-input>\n * ```\n *\n * @example\n * ```typescript\n * const input = document.querySelector('lmvz-input');\n * input.addEventListener('input', (e) => console.log(e.target.value));\n * await input.focus();\n * ```\n *\n * @slot before-input - Content to the left of the input. If interactive (e.g., clear button), use an lmvz-button element.\n * Example: <lmvz-button slot=\"before-input\" aria-label=\"Clear input\" tabindex=\"0\"><lmvz-icon icon=\"close-sm\"></lmvz-icon></lmvz-button>\n * @slot after-input - Content to the right of the input. If interactive (e.g., password toggle), use an lmvz-button element.\n * Example: <lmvz-button slot=\"after-input\" aria-label=\"Toggle password visibility\" tabindex=\"0\"><lmvz-icon icon=\"eye\"></lmvz-icon></lmvz-button>\n */\n@Component({\n tag: 'lmvz-input',\n styleUrl: './lmvz-input.css',\n scoped: true,\n formAssociated: true,\n})\nexport class LmvzInput extends ReactiveControllerHost implements AriaValidationHost {\n @Element() el!: HTMLElement;\n @Event() lmvzInput: EventEmitter<string>;\n\n @AttachInternals() internals: ElementInternals;\n\n private nativeInputElement?: HTMLInputElement;\n private inputId = `lmvz-input-${inputIdCounter++}`;\n private initialValue = '';\n\n /**\n * Internal state tracking native validation\n */\n @State() private nativeError = false;\n\n /**\n * Track if error was manually set via prop\n */\n private errorFromProp = false;\n\n private get helperId(): string | undefined {\n return this.helperText ? `${this.inputId}-helper` : undefined;\n }\n\n private get showErrorMessage() {\n return this.error && Boolean(this.errorMessage);\n }\n\n private get errorId(): string {\n return `${this.inputId}-error`;\n }\n\n /**\n * reactively updated via depedency of `error`\n */\n private get describedBy(): string | undefined {\n const ids: string[] = [];\n if (this.helperId) ids.push(this.helperId);\n if (this.showErrorMessage) ids.push(this.errorId);\n return ids.length > 0 ? ids.join(' ') : undefined;\n }\n\n /**\n * * PUBLIC API\n */\n\n /**\n * Value of the input\n */\n @Prop({ mutable: true }) value?: string;\n\n /**\n * Label text for the input\n */\n @Prop() label!: string;\n\n /**\n * Helper text displayed below the input\n */\n @Prop() helperText?: string;\n\n /**\n * Placeholder text\n */\n @Prop() placeholder?: string;\n\n /**\n * Whether the input is disabled\n * @default false\n */\n @Prop({ reflect: true }) disabled = false;\n\n /**\n * Whether the input is readonly\n * @default false\n */\n @Prop({ reflect: true }) readonly = false;\n\n /**\n * Whether the input is required\n * @default false\n */\n @Prop({ reflect: true }) required = false;\n\n /**\n * Name attribute for the input\n */\n @Prop() name?: string;\n\n /**\n * Type of the input\n * @default 'text'\n */\n @Prop() type: Input.Type = 'text';\n\n /**\n * Error message to display when error is true\n */\n @Prop() errorMessage?: string;\n\n /**\n * Autocomplete attribute for form autofill\n */\n @Prop() autocomplete?: Input.Autocomplete;\n\n /**\n * Input mode for mobile keyboards\n */\n @Prop() inputmode?: Input.Inputmode;\n\n /**\n * Autocorrect attribute for mobile keyboards\n * @default undefined\n */\n @Prop() autocorrect?: 'on' | 'off';\n\n /**\n * Autocapitalize attribute for mobile keyboards\n * @default undefined\n */\n @Prop() autocapitalize?: Input.Autocapitalize;\n\n /**\n * Spellcheck attribute\n * @default undefined\n */\n @Prop() spellcheck?: boolean;\n\n /**\n * Whether the input should autofocus\n * @default false\n */\n @Prop() autofocus = false;\n\n /**\n * Minimum length for text inputs\n */\n @Prop() minlength?: number;\n\n /**\n * Maximum length for text inputs\n */\n @Prop() maxlength?: number;\n\n /**\n * Validation pattern (regex)\n */\n @Prop() pattern?: string;\n\n /**\n * Minimum value for number/date inputs\n */\n @Prop() min?: number | string;\n\n /**\n * Maximum value for number/date inputs\n */\n @Prop() max?: number | string;\n\n /**\n * Step interval for number inputs\n */\n @Prop() step?: number | string;\n\n /**\n * Form id to associate with\n */\n @Prop() form?: string;\n\n /**\n * Whether the input is in an error state\n * When not set manually, this will automatically reflect native HTML5 validation state\n * @default false\n */\n @Prop({ reflect: true })\n get error(): boolean {\n return this.errorFromProp || this.nativeError;\n }\n set error(value: boolean) {\n this.errorFromProp = value;\n }\n\n @Method()\n async setValue(newValue: string | undefined) {\n const input = this.nativeInputElement;\n this.value = input.value = newValue ?? '';\n this.internals.setFormValue?.(newValue); // undefined in stencil test environment\n this.lmvzInput.emit(newValue);\n }\n\n /**\n * Sets focus on the input\n */\n @Method()\n async focusInput() {\n this.nativeInputElement?.focus();\n }\n\n /**\n * Removes focus from the input\n */\n @Method()\n async blurInput() {\n this.nativeInputElement?.blur();\n }\n\n /**\n * Selects the text in the input\n */\n @Method()\n async select() {\n this.nativeInputElement?.select();\n }\n\n /**\n * Returns whether the input satisfies its validation constraints\n */\n @Method()\n async checkValidity(): Promise<boolean> {\n return this.nativeInputElement?.checkValidity?.() ?? false;\n }\n\n /**\n * Reports validation errors to the user\n */\n @Method()\n async reportValidity(): Promise<boolean> {\n return this.nativeInputElement?.reportValidity?.() ?? false;\n }\n\n /**\n * Returns the native HTMLInputElement.\n *\n * Promise resolves when the element is ready and the input is available. If the input is not yet rendered, it waits for the component to be ready.\n */\n @Method()\n async getInputElement(): Promise<HTMLInputElement> {\n if (!this.nativeInputElement) {\n await new Promise(resolve => componentOnReady(this.el, resolve));\n }\n return Promise.resolve(this.nativeInputElement);\n }\n\n /**\n * * Lifecycle & Reactivity\n */\n\n constructor() {\n super();\n this.addController(\n new AriaValidationController(this, {\n reValidateOnPropChanges: true,\n }),\n );\n }\n\n componentWillLoad() {\n this.initialValue = this.value;\n }\n\n formAssociatedCallback(form: HTMLFormElement | undefined) {\n if (!form) return;\n this.internals.setFormValue?.(this.value); // undefined in stencil test environment\n }\n\n formResetCallback() {\n this.internals.setValidity({});\n this.setValue(this.initialValue);\n }\n\n formStateRestoreCallback(state: string) {\n this.setValue(state);\n }\n\n @Watch('value')\n protected handleValueChange(newValue: string | undefined) {\n if (!this.nativeInputElement) return;\n\n const isInternalChange = this.nativeInputElement.value === newValue;\n if (isInternalChange) return;\n\n this.setValue(newValue);\n }\n\n @Watch('disabled')\n protected handleDisabledChange(disabled: boolean) {\n if (disabled && this.nativeInputElement) {\n this.nativeInputElement.blur();\n }\n }\n\n /**\n * Fires whenever the input changes\n */\n private handleInput = (event: InputEvent) => {\n const input = event.target as HTMLInputElement;\n\n this.setValue(input.value);\n };\n\n /**\n * Fires when value changes and input loses focus.\n */\n private handleChange = (event: InputEvent) => {\n const input = (event.target as HTMLInputElement) ?? this.nativeInputElement;\n this.updateNativeError(input);\n };\n\n private handleFocus = () => {};\n\n /**\n * Fires when the input loses focus\n */\n private handleBlur = (event: FocusEvent) => {\n const input = event.target as HTMLInputElement;\n input.reportValidity?.();\n };\n\n /**\n * Updates the nativeError state based on the validity of the input.\n * validity may not exist in test environments\n */\n private updateNativeError(fromEvent?: HTMLInputElement) {\n const input = fromEvent ?? this.nativeInputElement;\n if (!input) return;\n this.nativeError = !(input.checkValidity?.() ?? true);\n }\n\n render() {\n const hasValue = Boolean(this.value);\n const shouldFloatLabel = hasValue || Boolean(this.placeholder);\n\n return (\n <div\n class={classNames('input-container', {\n 'interaction-filled': hasValue,\n })}\n >\n <div class=\"input-wrapper\">\n <slot name=\"before-input\"></slot>\n\n <div class=\"label-input-group\">\n <label htmlFor={this.inputId} class={classNames({ floating: shouldFloatLabel })}>\n {this.label}\n {this.required && (\n <span class=\"required-indicator\" aria-hidden=\"true\">\n {' '}\n *\n </span>\n )}\n </label>\n <input\n id={this.inputId}\n ref={el => (this.nativeInputElement = el)}\n type={this.type}\n min={this.min}\n max={this.max}\n step={this.step}\n value={this.value}\n name={this.name}\n placeholder={this.placeholder}\n disabled={this.disabled}\n readOnly={this.readonly}\n required={this.required}\n form={this.form}\n autocomplete={this.autocomplete}\n inputmode={this.inputmode}\n autocorrect={this.autocorrect}\n autocapitalize={this.autocapitalize}\n spellcheck={this.spellcheck}\n autofocus={this.autofocus}\n minlength={this.minlength}\n maxlength={this.maxlength}\n pattern={this.pattern}\n aria-invalid={this.error ? 'true' : 'false'}\n aria-required={this.required ? 'true' : 'false'}\n aria-describedby={this.describedBy}\n aria-errormessage={this.errorId}\n onInput={this.handleInput}\n onChange={this.handleChange}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n </div>\n\n <slot name=\"after-input\"></slot>\n </div>\n\n {this.helperText && (\n <div id={this.helperId} class=\"helper-text\">\n {this.helperText}\n </div>\n )}\n\n {this.showErrorMessage && (\n <div id={this.errorId} class=\"error-message\" role=\"alert\">\n {this.errorMessage}\n </div>\n )}\n </div>\n );\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lmvz-menuitem.js","sourceRoot":"","sources":["../../../src/components/lmvz-menuitem/lmvz-menuitem.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAgB,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,2BAA2B,EAA8B,MAAM,2CAA2C,CAAC;AACpH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAA2B,MAAM,mDAAmD,CAAC;AAUtH,MAAM,OAAO,YAAa,SAAQ,sBAAsB;IAC3C,EAAE,CAAe;IAE5B,IAA6B,IAAI;QAC/B,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAoD,EAAE;QACpD,OAAO,CAAC,CAAC;IACX,CAAC;IAEQ,cAAc,CAAqB;IAE5C;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,aAAa,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,aAAa,CAAC,IAAI,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;KAC3D;IAED,MAAM;QACJ,OAAO,CACL,EAAC,IAAI;YACH,8DAA8E,CACzE,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Element, Event, EventEmitter, Host, Prop, h } from '@stencil/core';\nimport { ElementActivationController, type ElementActivationHost } from '../../utils/element-activation-controller';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/validation/aria-validation-controller';\n\n/**\n * A menu item component to be used within the `lmvz-header` component's navigation slots.\n */\n@Component({\n tag: 'lmvz-menuitem',\n styleUrl: './lmvz-menuitem.css',\n scoped: true,\n})\nexport class LmvzMenuItem extends ReactiveControllerHost implements AriaValidationHost, ElementActivationHost {\n @Element() el!: HTMLElement;\n\n @Prop({ reflect: true }) get role() {\n return 'menuitem';\n }\n @Prop({ reflect: true, attribute: 'tabindex' }) get ti() {\n return 0;\n }\n\n @Event() lmvzActivation: EventEmitter<void>;\n\n constructor() {\n super();\n this.addController(new AriaValidationController(this));\n this.addController(new ElementActivationController(this));\n }\n\n render() {\n return (\n <Host>\n <slot>{/* The content of the menu item will be provided by the user */}</slot>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,cAAc,OAAO,CAAC;AAItB,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC","sourcesContent":["/**\n * @fileoverview entry point for your component library\n *\n * This is the entry point for your component library. Use this file to export utilities,\n * constants or data structure that accompany your components.\n *\n * DO NOT use this file to export your components. Instead, use the recommended approaches\n * to consume components of this package as outlined in the `README.md`.\n */\n\nexport type * from './components.d.ts';\n\nexport * from './api';\n// the following are _currently_ not implicitly exported by Stencil, but we want to export them for better DX in Storybook stories and tests\nexport { LmvzDS, Typography } from './api';\n\nexport * from './components/lmvz-icon/public';\nexport * from './utils/public';\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"header-integration.js","sourceRoot":"","sources":["../../src/integration/header-integration.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAiBzD,MAAM,OAAO,iBAAiB;IACH,SAAS,CAAS;IAEnC,QAAQ,CAAC,KAAwB;QACvC,MAAM,MAAM,GAAG,KAAK,CAAC,aAAsC,CAAC;QAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAuB,CAAC;QAC7E,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,MAAM;QACJ,OAAO,CACL,EAAC,IAAI;YACH,oEAAa,aAAa,EAAE,IAAI,CAAC,SAAS;gBAExC,sEAAe,IAAI,EAAC,aAAa,EAAC,EAAE,EAAC,YAAY,EAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,iBAE5E;gBAChB,sEAAe,IAAI,EAAC,aAAa,EAAC,EAAE,EAAC,YAAY,EAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,iBAE5E;gBAChB,sEAAe,IAAI,EAAC,wBAAwB;oBAC1C,kEAAW,IAAI,EAAC,MAAM,GAAa;gCACrB;gBAChB,sEAAe,IAAI,EAAC,wBAAwB;oBAC1C,kEAAW,IAAI,EAAC,MAAM,GAAa;8BACrB;gBAChB,sEAAe,IAAI,EAAC,wBAAwB;oBAC1C,kEAAW,IAAI,EAAC,KAAK,GAAa;0CACpB;gBAChB,sEAAe,IAAI,EAAC,wBAAwB,gBAAY,eAAe;oBACrE,kEAAW,IAAI,EAAC,KAAK,GAAa,CACpB;gBAEhB,oEAAa,IAAI,EAAC,SAAS,gBAAY,eAAe;oBACpD,kEAAW,IAAI,EAAC,MAAM,GAAa,CACvB,CACF;YAEd,mEAAY,KAAK,EAAC,MAAM,GAAc,CACjC,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, h, Host, Prop } from '@stencil/core';\n\n@Component({\n tag: 'header-integration',\n styles: `\n :host {\n display: block;\n min-height: 100vh;\n background: var(--lmvz-color-spec-bg-outer-view);\n }\n\n .active button {\n background-color: var(--lmvz-semantic-color-status-selected);\n }\n `,\n shadow: true,\n})\nexport class HeaderIntegration {\n @Prop({ mutable: true }) activeNav: string;\n\n private activate(event: CustomEvent<void>) {\n const target = event.currentTarget as HTMLLmvzButtonElement;\n const navItem = target.closest('[slot=\"nav-primary\"]') as HTMLElement | null;\n if (!navItem) return;\n\n const navId = navItem.id;\n if (!navId) {\n console.warn('Nav item does not have an id:', navItem);\n return;\n }\n\n console.log('Activating nav item:', navId);\n this.activeNav = navId;\n }\n\n render() {\n return (\n <Host>\n <lmvz-header lmvzActiveNav={this.activeNav}>\n {/* <lmvz-icon icon=\"Logo\" slot=\"brand\" aria-hidden></lmvz-icon> */}\n <lmvz-menuitem slot=\"nav-primary\" id=\"lehrmittel\" onLmvzActivation={this.activate.bind(this)}>\n Lehrmittel\n </lmvz-menuitem>\n <lmvz-menuitem slot=\"nav-primary\" id=\"verwaltung\" onLmvzActivation={this.activate.bind(this)}>\n Verwaltung\n </lmvz-menuitem>\n <lmvz-menuitem slot=\"connect-nav-lehrmittel\">\n <lmvz-icon icon=\"book\"></lmvz-icon>Deutsch 7\n </lmvz-menuitem>\n <lmvz-menuitem slot=\"connect-nav-lehrmittel\">\n <lmvz-icon icon=\"book\"></lmvz-icon>Mathe 2\n </lmvz-menuitem>\n <lmvz-menuitem slot=\"connect-nav-verwaltung\">\n <lmvz-icon icon=\"cog\"></lmvz-icon>iwas mit Verwaltung\n </lmvz-menuitem>\n <lmvz-menuitem slot=\"connect-nav-verwaltung\" aria-label=\"Einstellungen\">\n <lmvz-icon icon=\"cog\"></lmvz-icon>\n </lmvz-menuitem>\n\n <lmvz-button slot=\"actions\" aria-label=\"Benutzerkonto\">\n <lmvz-icon icon=\"user\"></lmvz-icon>\n </lmvz-button>\n </lmvz-header>\n\n <lmvz-input label=\"test\"></lmvz-input>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/utils/assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,OAAO,gBAAiB,SAAQ,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAQ;CAAG;AAEpF,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAU1C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,IAAY,EAAE,iBAAsC,EAAE,EAAE;IAG/F,MAAM,iBAAiB,GAAG,QAAQ,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAChF,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAC3D,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CACnB,MAAM,CAAC,UAAU,CAAC,mCAAmC,IAAI,cAAc,iBAAiB;oMACsG,CAAC,CAChM,EACD,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,eAAe,EAAE,CAAC,CAAC,CAC1E,CAAC;AACJ,CAAC,CAAC;AAEF,SAAS,QAAQ,CAAC,GAAG,KAA6B;IAChD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAChF,CAAC","sourcesContent":["import { getAssetPath } from '@stencil/core';\nimport { Data, Effect } from 'effect';\nimport { getLocationBase } from './environment';\n\nexport class URLCreationError extends Data.TaggedError('URLCreationError')<Error> {}\n\nconst relativeAssetsPath = '../../assets';\n\n/**\n * Attempts to create an asset URL using Stencil's `getAssetPath` utility, and falls back to a default URL if that fails (e.g. because the app using the library hasn't configured the asset path correctly).\n * This is a workaround for Stencil's behavior of throwing an error when `getAssetPath` is called without a valid asset path configuration, which can happen in certain environments like Storybook.\n *\n * @param file - The filename of the asset to create a URL for, relative to the configured asset path.\n * @param pathFromAssetRoot - The path from the asset root to the asset directory (e.g. 'icons' for assets located at <pkg-root>/assets/icons/).\n * @returns An Effect that yields a string URL for the asset, or a fallback URL if the creation fails.\n */\nexport const syncCreateAssetUrlSafely = (file: string, pathFromAssetRoot?: string | undefined) => {\n // * dist output target expects assets to be located at <pkg-root>/assets/...\n // * this base path is used in components' assetDirs declaration, but with the relative ../../assets/\n const relativeAssetPath = joinPath(relativeAssetsPath, pathFromAssetRoot, file);\n return Effect.try(() => getAssetPath(relativeAssetPath)).pipe(\n Effect.tapError(() =>\n Effect.logWarning(`Failed to create URL for asset \"${file}\" in path \"${pathFromAssetRoot}\".\n Please provide an absolute URL in your app's 'setAssetPath(...)' configuration! Falling back to a relative URL, which may work in some environments but is not guaranteed to be correct.`),\n ),\n Effect.orElseSucceed(() => new URL(relativeAssetPath, getLocationBase())),\n );\n};\n\nfunction joinPath(...parts: (string | undefined)[]) {\n return parts.filter(Boolean).join('/').replace('//', '/').replace('/./', '/');\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/utils/component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Adapted from ionic-team/ionic-framework/core/src/utils/helpers.ts\n * v8.7.17\n *\n * Major changes are marked with `// ! LMVZ-DS` comments\n *\n * MIT License\n *\n * Copyright (c) 2015-present Drifty Co.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n// ! LMVZ-DS:\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { EventEmitter } from '@stencil/core';\n\ndeclare const __zone_symbol__requestAnimationFrame: typeof window.requestAnimationFrame;\ndeclare const requestAnimationFrame: typeof window.requestAnimationFrame;\n\nexport const transitionEndAsync = (el: HTMLElement | null, expectedDuration = 0) => {\n return new Promise(resolve => {\n transitionEnd(el, expectedDuration, resolve);\n });\n};\n\n/**\n * Allows developer to wait for a transition\n * to finish and fallback to a timer if the\n * transition is cancelled or otherwise\n * never finishes. Also see transitionEndAsync\n * which is an await-able version of this.\n */\nconst transitionEnd = (el: HTMLElement | null, expectedDuration = 0, callback: (ev?: TransitionEvent) => void) => {\n let unRegTrans: (() => void) | undefined;\n let animationTimeout: number | undefined;\n const opts: AddEventListenerOptions = { passive: true };\n const ANIMATION_FALLBACK_TIMEOUT = 500;\n\n const unregister = () => {\n if (unRegTrans) {\n unRegTrans();\n }\n };\n\n const onTransitionEnd = (ev?: Event) => {\n if (ev === undefined || el === ev.target) {\n unregister();\n callback(ev as TransitionEvent);\n }\n };\n\n if (el) {\n el.addEventListener('webkitTransitionEnd', onTransitionEnd, opts);\n el.addEventListener('transitionend', onTransitionEnd, opts);\n animationTimeout = setTimeout(onTransitionEnd, expectedDuration + ANIMATION_FALLBACK_TIMEOUT) as unknown as number;\n\n unRegTrans = () => {\n if (animationTimeout !== undefined) {\n clearTimeout(animationTimeout);\n animationTimeout = undefined;\n }\n el.removeEventListener('webkitTransitionEnd', onTransitionEnd, opts);\n el.removeEventListener('transitionend', onTransitionEnd, opts);\n };\n }\n\n return unregister;\n};\n\n/**\n * Waits for a component to be ready for\n * both custom element and non-custom element builds.\n * If non-custom element build, el.componentOnReady\n * will be used.\n * For custom element builds, we wait a frame\n * so that the inner contents of the component\n * have a chance to render.\n *\n * Use this utility rather than calling\n * el.componentOnReady yourself.\n */\nexport const componentOnReady = (el: any, callback: any) => {\n if (el.componentOnReady) {\n el.componentOnReady().then((resolvedEl: any) => callback(resolvedEl));\n } else {\n raf(() => callback(el));\n }\n};\n\n/**\n * This functions checks if a Stencil component is using\n * the lazy loaded build of Stencil. Returns `true` if\n * the component is lazy loaded. Returns `false` otherwise.\n */\nexport const hasLazyBuild = (stencilEl: HTMLElement) => {\n return (stencilEl as any).componentOnReady !== undefined;\n};\n\nexport type Attributes = { [key: string]: any };\n\n/**\n * Elements inside of web components sometimes need to inherit global attributes\n * set on the host. For example, the inner input in `ion-input` should inherit\n * the `title` attribute that developers set directly on `ion-input`. This\n * helper function should be called in componentWillLoad and assigned to a variable\n * that is later used in the render function.\n *\n * This does not need to be reactive as changing attributes on the host element\n * does not trigger a re-render.\n */\nexport const inheritAttributes = (el: HTMLElement, attributes: string[] = []) => {\n const attributeObject: Attributes = {};\n\n attributes.forEach(attr => {\n if (el.hasAttribute(attr)) {\n const value = el.getAttribute(attr);\n if (value !== null) {\n attributeObject[attr] = el.getAttribute(attr);\n }\n el.removeAttribute(attr);\n }\n });\n\n return attributeObject;\n};\n\n/**\n * List of available ARIA attributes + `role`.\n * Removed deprecated attributes.\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes\n */\nconst ariaAttributes = [\n 'role',\n 'aria-activedescendant',\n 'aria-atomic',\n 'aria-autocomplete',\n 'aria-braillelabel',\n 'aria-brailleroledescription',\n 'aria-busy',\n 'aria-checked',\n 'aria-colcount',\n 'aria-colindex',\n 'aria-colindextext',\n 'aria-colspan',\n 'aria-controls',\n 'aria-current',\n 'aria-describedby',\n 'aria-description',\n 'aria-details',\n 'aria-disabled',\n 'aria-errormessage',\n 'aria-expanded',\n 'aria-flowto',\n 'aria-haspopup',\n 'aria-hidden',\n 'aria-invalid',\n 'aria-keyshortcuts',\n 'aria-label',\n 'aria-labelledby',\n 'aria-level',\n 'aria-live',\n 'aria-multiline',\n 'aria-multiselectable',\n 'aria-orientation',\n 'aria-owns',\n 'aria-placeholder',\n 'aria-posinset',\n 'aria-pressed',\n 'aria-readonly',\n 'aria-relevant',\n 'aria-required',\n 'aria-roledescription',\n 'aria-rowcount',\n 'aria-rowindex',\n 'aria-rowindextext',\n 'aria-rowspan',\n 'aria-selected',\n 'aria-setsize',\n 'aria-sort',\n 'aria-valuemax',\n 'aria-valuemin',\n 'aria-valuenow',\n 'aria-valuetext',\n];\n\n/**\n * Returns an array of aria attributes that should be copied from\n * the shadow host element to a target within the light DOM.\n * @param el The element that the attributes should be copied from.\n * @param ignoreList The list of aria-attributes to ignore reflecting and removing from the host.\n * Use this in instances where we manually specify aria attributes on the `<Host>` element.\n */\nexport const inheritAriaAttributes = (el: HTMLElement, ignoreList?: string[]) => {\n let attributesToInherit = ariaAttributes;\n if (ignoreList && ignoreList.length > 0) {\n attributesToInherit = attributesToInherit.filter(attr => !ignoreList.includes(attr));\n }\n return inheritAttributes(el, attributesToInherit);\n};\n\nexport const addEventListener = (el: any, eventName: string, callback: any, opts?: any) => {\n return el.addEventListener(eventName, callback, opts);\n};\n\nexport const removeEventListener = (el: any, eventName: string, callback: any, opts?: any) => {\n return el.removeEventListener(eventName, callback, opts);\n};\n\n/**\n * Gets the root context of a shadow dom element\n * On newer browsers this will be the shadowRoot,\n * but for older browser this may just be the\n * element itself.\n *\n * Useful for whenever you need to explicitly\n * do \"myElement.shadowRoot!.querySelector(...)\".\n */\nexport const getElementRoot = (el: HTMLElement, fallback: HTMLElement = el) => {\n return el.shadowRoot || fallback;\n};\n\n/**\n * Patched version of requestAnimationFrame that avoids ngzone\n * Use only when you know ngzone should not run\n */\nexport const raf = (h: FrameRequestCallback) => {\n if (typeof __zone_symbol__requestAnimationFrame === 'function') {\n return __zone_symbol__requestAnimationFrame(h);\n }\n if (typeof requestAnimationFrame === 'function') {\n return requestAnimationFrame(h);\n }\n return setTimeout(h);\n};\n\nexport const hasShadowDom = (el: HTMLElement) => {\n return !!el.shadowRoot && !!(el as any).attachShadow;\n};\n\nexport const focusVisibleElement = (el: HTMLElement) => {\n el.focus();\n\n // ! LMVZ-DS: removed ion-focusable handling\n};\n\n/**\n * This method is used to add a hidden input to a host element that contains\n * a Shadow DOM. It does not add the input inside of the Shadow root which\n * allows it to be picked up inside of forms. It should contain the same\n * values as the host element.\n *\n * @param always Add a hidden input even if the container does not use Shadow\n * @param container The element where the input will be added\n * @param name The name of the input\n * @param value The value of the input\n * @param disabled If true, the input is disabled\n */\nexport const renderHiddenInput = (always: boolean, container: HTMLElement, name: string, value: string | undefined | null, disabled: boolean) => {\n if (always || hasShadowDom(container)) {\n let input = container.querySelector('input.aux-input') as HTMLInputElement | null;\n if (!input) {\n input = container.ownerDocument!.createElement('input');\n input.type = 'hidden';\n input.classList.add('aux-input');\n container.appendChild(input);\n }\n input.disabled = disabled;\n input.name = name;\n input.value = value || '';\n }\n};\n\nexport const clamp = (min: number, n: number, max: number) => {\n return Math.max(min, Math.min(n, max));\n};\n\nexport const assert = (actual: any, reason: string) => {\n if (!actual) {\n const message = 'ASSERT: ' + reason;\n console.error(message);\n debugger; // eslint-disable-line\n throw new Error(message);\n }\n};\n\nexport const now = (ev: UIEvent) => {\n return ev.timeStamp || Date.now();\n};\n\nexport const pointerCoord = (ev: any): { x: number; y: number } => {\n // get X coordinates for either a mouse click\n // or a touch depending on the given event\n if (ev) {\n const changedTouches = ev.changedTouches;\n if (changedTouches && changedTouches.length > 0) {\n const touch = changedTouches[0];\n return { x: touch.clientX, y: touch.clientY };\n }\n if (ev.pageX !== undefined) {\n return { x: ev.pageX, y: ev.pageY };\n }\n }\n return { x: 0, y: 0 };\n};\n\n// ! removed isEndSide (for RTL handling) via menu-interface\n\nexport const deferEvent = (event: EventEmitter): EventEmitter => {\n return debounceEvent(event, 0);\n};\n\nexport const debounceEvent = (event: EventEmitter, wait: number): EventEmitter => {\n const original = (event as any)._original || event;\n return {\n _original: event,\n emit: debounce(original.emit.bind(original), wait),\n } as EventEmitter;\n};\n\nexport const debounce = (func: (...args: any[]) => void, wait = 0) => {\n let timer: any;\n return (...args: any[]): any => {\n clearTimeout(timer);\n timer = setTimeout(func, wait, ...args);\n };\n};\n\n/**\n * Check whether the two string maps are shallow equal.\n *\n * undefined is treated as an empty map.\n *\n * @returns whether the keys are the same and the values are shallow equal.\n */\nexport const shallowEqualStringMap = (map1: { [k: string]: any } | undefined, map2: { [k: string]: any } | undefined): boolean => {\n map1 ??= {};\n map2 ??= {};\n\n if (map1 === map2) {\n return true;\n }\n\n const keys1 = Object.keys(map1);\n\n if (keys1.length !== Object.keys(map2).length) {\n return false;\n }\n\n for (const k1 of keys1) {\n if (!(k1 in map2)) {\n return false;\n }\n if (map1[k1] !== map2[k1]) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * Checks input for usable number. Not NaN and not Infinite.\n */\nexport const isSafeNumber = (input: unknown): input is number => {\n return typeof input === 'number' && !isNaN(input) && isFinite(input);\n};\n\n// CUSTOM LMVZ-DS utilities for components\n\nexport function getDeepActiveElement(root = document) {\n let activeElement = root.activeElement;\n\n // No focus at all\n if (!activeElement) {\n return null;\n }\n\n // Walk through shadow DOMs\n while (activeElement && activeElement.shadowRoot) {\n const next = activeElement.shadowRoot.activeElement;\n if (!next) {\n // Focus is effectively on the host element itself\n break;\n }\n activeElement = next;\n }\n\n return activeElement;\n}\n\nexport function canReceiveFocus(el: Element): boolean {\n return (\n el instanceof HTMLElement && el.tabIndex >= 0 && !el.hasAttribute('disabled') && el.getAttribute('aria-hidden') !== 'true' && el.checkVisibility() && el.offsetParent !== null\n );\n}\n\nexport type FormRef = string | HTMLFormElement | undefined;\n\n/**\n * Finds the form element based on the provided `form` selector or element reference.\n */\nexport function findFormByRef(form: FormRef, el: HTMLElement): HTMLFormElement | null {\n if (form instanceof HTMLFormElement) {\n return form;\n }\n if (typeof form === 'string') {\n // Check if the string provided is a form id.\n const el: HTMLElement | null = document.getElementById(form);\n if (el) {\n if (el instanceof HTMLFormElement) {\n return el;\n } else {\n /**\n * The developer referenced the form using an id string,\n * but the element with that id is not a form element.\n */\n console.warn(`No Form found with selector: \"#${form}\". Verify that the element with id exists and is actually a <form> element.`, el);\n return null;\n }\n } else {\n /**\n * The developer referenced the form using an id string,\n * but the element with that id could not be found in the DOM.\n */\n console.warn(`No Form found with selector: \"#${form}\". Verify that the id is correct and the form is rendered in the DOM.`, el);\n return null;\n }\n }\n if (form !== undefined) {\n /**\n * The developer specified an HTMLElement for the form attribute,\n * but the element is not a HTMLFormElement.\n * This will also catch if the developer passes null as the form attribute.\n */\n console.warn(`The provided \"form\" element is invalid. Verify that the form is a HTMLFormElement and rendered in the DOM.`, el);\n return null;\n }\n /**\n * If the form element is not set, the button may be inside\n * of a form element. Query the closest form element to the button.\n */\n return el.closest('form');\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"effect.js","sourceRoot":"","sources":["../../src/utils/effect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,MAAM,UAAU,GAAG,CAAmD,MAAS;IAC7E,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAC7C,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;IAErD,CAAC,CAAQ,CAAC;AACZ,CAAC","sourcesContent":["import { Effect } from 'effect';\n\nexport type UnwrapEffect<T> = T extends Effect.Effect<infer A, infer E, infer R> ? [A, E, R] : never;\n\nexport function run<T extends Effect.Effect<unknown, unknown, never>>(effect: T): T extends Effect.Effect<infer A, infer E, never> ? Promise<A | E> : never {\n return Effect.runPromise(effect).catch(error => {\n console.error('Unhandled error in Effect:', error);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) as any;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element-activation-controller.js","sourceRoot":"","sources":["../../src/utils/element-activation-controller.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,2BAA2B;IAE5B;IACA;IAFV,YACU,IAA2B,EAC3B,MAAe;QADf,SAAI,GAAJ,IAAI,CAAuB;QAC3B,WAAM,GAAN,MAAM,CAAS;IACtB,CAAC;IAEJ,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,yDAAyD,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,CAAC;IAEO,aAAa,GAAG,CAAC,KAAoB,EAAE,EAAE;QAE/C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAE9D,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC;IAEM,gBAAgB,GAAG,CAAC,KAAY,EAAE,EAAE;QAC1C,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CAAC;CACH","sourcesContent":["import type { EventEmitter } from '@stencil/core';\nimport type { ReactiveController } from './reactive-controller-host';\n\nexport type ElementActivationHost = {\n el: HTMLElement;\n lmvzActivation: EventEmitter<void>;\n};\n\ntype Config = {\n localHandler?: (event: Event) => unknown;\n keys?: string[];\n};\n\nexport class ElementActivationController implements ReactiveController {\n constructor(\n private host: ElementActivationHost,\n private config?: Config,\n ) {}\n\n hostDidLoad() {\n if (!this.host.el.hasAttribute('tabindex')) {\n console.warn('Interactive element does not have a tabindex attribute!', this.host.el);\n }\n this.host.el.addEventListener('keydown', this.handleKeyDown.bind(this));\n this.host.el.addEventListener('click', this.handleActivation.bind(this));\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n // Activate on Enter or Space key press\n if ((this.config?.keys ?? ['Enter', ' ']).includes(event.key)) {\n // Prevent default scrolling behavior for Space key\n event.preventDefault();\n this.handleActivation(event);\n }\n };\n\n private handleActivation = (event: Event) => {\n this.host.lmvzActivation.emit();\n if (this.config?.localHandler) {\n this.config.localHandler(event);\n }\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/utils/environment.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe;IAC7B,OAAO,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,CAAC;AAC5D,CAAC","sourcesContent":["export function getLocationBase() {\n return import.meta?.url ?? window?.location?.origin ?? '';\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,OAAO,UAAW,SAAQ,IAAI,CAAC,WAAW,CAAC,YAAY,CAAqB;CAAG;AACrF,MAAM,OAAO,aAAc,SAAQ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAkB;CAAG;AAExF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAwB,EAAE,IAAkB,EAAE,EAAE,CACzE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QACxC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;QAC7B,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;KACjD,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,CAAC,IAAI,aAAa,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,MAAM,OAAO,iBAAkB,SAAQ,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAQ;IACjF,YAAY,KAAY;QACtB,KAAK,CAAC,IAAI,KAAK,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;CACF;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAa,EAAE,EAAE,CAC9C,MAAM,CAAC,UAAU,CAAC;IAChB,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE;IACrB,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,iBAAiB,CAAC,KAAc,CAAC;CACtD,CAAC,CAAC","sourcesContent":["import { Data, Effect } from 'effect';\n\nexport class FetchError extends Data.TaggedError('FetchError')<{ cause: unknown }> {}\nexport class NotFoundError extends Data.TaggedError('NotFoundError')<{ url: string }> {}\n\nexport const httpClient = (input: RequestInfo | URL, init?: RequestInit) =>\n Effect.gen(function* () {\n const response = yield* Effect.tryPromise({\n try: () => fetch(input, init),\n catch: error => new FetchError({ cause: error }),\n });\n\n if (response.status === 404) {\n return yield* new NotFoundError({ url: response.url });\n }\n\n return response;\n });\n\nexport class ResponseTextError extends Data.TaggedError('ResponseTextError')<Error> {\n constructor(error: Error) {\n super(new Error(`Failed to read response text`, { cause: error }));\n }\n}\n\nexport const responseAsText = (res: Response) =>\n Effect.tryPromise({\n try: () => res.text(),\n catch: error => new ResponseTextError(error as Error),\n });\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http.test.js","sourceRoot":"","sources":["../../src/utils/http.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from 'effect';\nimport { FetchError, NotFoundError, ResponseTextError, httpClient, responseAsText } from './http';\n\ndescribe('Http Utils', () => {\n describe('httpClient', () => {\n it('should return response on successful fetch', async () => {\n const mockResponse = { status: 200, url: 'https://example.com' };\n global.fetch = jest.fn().mockResolvedValueOnce(mockResponse);\n\n const result = await Effect.runPromise(httpClient('https://example.com'));\n\n expect(result).toEqual(mockResponse);\n });\n\n it('should handle fetch errors', async () => {\n const error = new Error('Network error');\n global.fetch = jest.fn().mockRejectedValueOnce(error);\n\n const result = await Effect.runPromise(Effect.flip(httpClient('https://example.com')));\n\n expect(result).toBeInstanceOf(FetchError);\n expect(result.cause).toBe(error);\n });\n\n it('should return NotFoundError on 404 status', async () => {\n const mockResponse = { status: 404, url: 'https://example.com/notfound' };\n global.fetch = jest.fn().mockResolvedValueOnce(mockResponse);\n\n const result = await Effect.runPromise(Effect.flip(httpClient('https://example.com/notfound')));\n\n expect(result).toBeInstanceOf(NotFoundError);\n });\n\n it('should pass RequestInit options to fetch', async () => {\n const mockResponse = { status: 200, url: 'https://example.com' };\n global.fetch = jest.fn().mockResolvedValueOnce(mockResponse);\n const init = { method: 'POST', headers: { 'Content-Type': 'application/json' } };\n\n await Effect.runPromise(httpClient('https://example.com', init));\n\n expect(global.fetch).toHaveBeenCalledWith('https://example.com', init);\n });\n });\n\n describe('responseAsText', () => {\n it('should return text from response', async () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mockResponse = { text: jest.fn().mockResolvedValueOnce('Hello World') } as any;\n\n const result = await Effect.runPromise(responseAsText(mockResponse));\n\n expect(result).toBe('Hello World');\n });\n\n it('should handle text reading errors', async () => {\n const error = new Error('Read error');\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mockResponse = { text: jest.fn().mockRejectedValueOnce(error) } as any;\n\n const result = await Effect.runPromise(Effect.flip(responseAsText(mockResponse)));\n\n expect(result).toBeInstanceOf(ResponseTextError);\n expect(result.message).toContain('Failed to read response text');\n });\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-keyboard-controller.js","sourceRoot":"","sources":["../../src/utils/list-keyboard-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AASpE,MAAM,OAAO,gCAAgC;IAIxB;IAHX,QAAQ,GAAc,EAAE,CAAC;IAEjC,YACmB,IAAgC;QAAhC,SAAI,GAAJ,IAAI,CAA4B;IAEhD,CAAC;IAEJ,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC/D,CAAC;IAED,cAAc,CAAC,QAAmB;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAEO,aAAa,GAAG,CAAC,KAAoB,EAAE,EAAE;QAC/C,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO;QAE/E,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3H,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,CAAC,cAAc,EAAE,CAAC;YACtB,WAA2B,CAAC,KAAK,EAAE,EAAE,CAAC;QACzC,CAAC;IACH,CAAC,CAAC;IAEM,uBAAuB,CAAC,OAAgB,EAAE,SAAwB;QACxE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC1B,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,YAAY,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAErC,IAAI,SAAS,GAAkB,IAAI,CAAC;QACpC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,SAAS,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;QACnD,CAAC;aAAM,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YAC9B,SAAS,GAAG,CAAC,YAAY,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;QACrE,CAAC;QAED,IAAI,SAAS,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QAEnC,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAE3F,OAAO,SAAS,CAAC;IACnB,CAAC;CACF","sourcesContent":["import { canReceiveFocus, getDeepActiveElement } from './component';\nimport type { ReactiveController } from './reactive-controller-host';\n\nexport type ListKeyboardNavigationHost = {\n el: HTMLElement;\n};\n\n// type Config = {};\n\nexport class ListKeyboardNavigationController implements ReactiveController {\n private elements: Element[] = [];\n\n constructor(\n private readonly host: ListKeyboardNavigationHost,\n // private readonly config?: Config,\n ) {}\n\n hostDidRender() {\n this.host.el.addEventListener('keydown', this.handleKeydown);\n }\n\n updateElements(elements: Element[]) {\n this.elements = elements;\n }\n\n private handleKeydown = (event: KeyboardEvent) => {\n const { key } = event;\n if (!['ArrowDown', 'ArrowRight', 'ArrowUp', 'ArrowLeft'].includes(key)) return;\n\n const activeElement = getDeepActiveElement(document);\n const nextElement = this.getNextFocusableElement(activeElement, ['ArrowDown', 'ArrowRight'].includes(key) ? 'down' : 'up');\n if (nextElement) {\n event.preventDefault();\n (nextElement as HTMLElement).focus?.();\n }\n };\n\n private getNextFocusableElement(current: Element, direction: 'down' | 'up'): Element | null {\n const { elements } = this;\n const currentIndex = elements.indexOf(current);\n if (currentIndex === -1) return null;\n\n let nextIndex: number | null = null;\n if (direction === 'down') {\n nextIndex = (currentIndex + 1) % elements.length;\n } else if (direction === 'up') {\n nextIndex = (currentIndex - 1 + elements.length) % elements.length;\n }\n\n if (nextIndex == null) return null;\n\n const candidate = elements[nextIndex];\n if (!canReceiveFocus(candidate)) return this.getNextFocusableElement(candidate, direction);\n\n return candidate;\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/utils/public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC","sourcesContent":["export { run } from './effect';\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reactive-controller-host.js","sourceRoot":"","sources":["../../src/utils/reactive-controller-host.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,sBAAsB;IACzB,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;IAE1C,aAAa,CAAC,UAA8B;QACpD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAES,gBAAgB,CAAC,UAA8B;QACvD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,IAAY,iBAAiB;QAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjF,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAE3B,OAAO,CAAC,IAAI,CAAC,kEAAkE,EAAE,IAAI,CAAC,CAAC;QACzF,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAC7E,CAAC;CACF","sourcesContent":["import { ComponentInterface } from '@stencil/core';\n\nexport interface ReactiveController {\n hostConnected?(): void;\n hostDisconnected?(): void;\n hostWillLoad?(): Promise<void> | void;\n hostDidLoad?(): void;\n hostWillRender?(): Promise<void> | void;\n hostDidRender?(): void;\n hostWillUpdate?(): Promise<void> | void;\n hostDidUpdate?(): void;\n readonly disabled?: boolean;\n}\n\nexport class ReactiveControllerHost implements ComponentInterface {\n private controllers = new Set<ReactiveController>();\n\n protected addController(controller: ReactiveController) {\n this.controllers.add(controller);\n }\n\n protected removeController(controller: ReactiveController) {\n this.controllers.delete(controller);\n }\n\n private get activeControllers() {\n return Array.from(this.controllers).filter(controller => !controller.disabled);\n }\n\n connectedCallback() {\n if (!this.controllers.size) {\n // sanity check - likely indicates a setup error\n console.warn('ReactiveControllerHost connected with no controllers registered.', this);\n }\n this.activeControllers.forEach(controller => controller.hostConnected?.());\n }\n\n disconnectedCallback() {\n this.activeControllers.forEach(controller => controller.hostDisconnected?.());\n }\n\n componentWillLoad() {\n this.activeControllers.forEach(controller => controller.hostWillLoad?.());\n }\n\n componentDidLoad() {\n this.activeControllers.forEach(controller => controller.hostDidLoad?.());\n }\n\n componentWillRender() {\n this.activeControllers.forEach(controller => controller.hostWillRender?.());\n }\n\n componentDidRender() {\n this.activeControllers.forEach(controller => controller.hostDidRender?.());\n }\n\n componentWillUpdate() {\n this.activeControllers.forEach(controller => controller.hostWillUpdate?.());\n }\n\n componentDidUpdate() {\n this.activeControllers.forEach(controller => controller.hostDidUpdate?.());\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"typing.js","sourceRoot":"","sources":["../../src/utils/typing.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Requires at least one key of T to be present.\n * Expands to a union where each member has one key required and the rest optional.\n */\nexport type AtLeastOneKey<T> = {\n [K in keyof T]-?: Required<Pick<T, K>> & Partial<Omit<T, K>>;\n}[keyof T];\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aria-validation-controller.js","sourceRoot":"","sources":["../../../src/utils/validation/aria-validation-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { Build } from '@stencil/core';\nimport type { AxeResults, ElementContext, UnlabelledFrameSelector } from 'axe-core';\nimport { Effect, Fiber, Queue, Stream } from 'effect';\nimport type { ReactiveController } from '../reactive-controller-host';\n\ntype AxeRunRequest = {\n context: ElementContext;\n onComplete: (error: Error | null, results?: AxeResults) => void;\n};\n\nexport type AriaValidationHost<T extends HTMLElement = HTMLElement> = {\n el: T;\n};\ntype Config = {\n reValidateOnPropChanges?: boolean;\n verboseLogging?: boolean;\n};\n\n/**\n * A controller that performs ARIA validation on the host component and its children once the component is visible.\n *\n * The host class must provide a member `el`, using stencil's @Element() decorator.\n * The controller will run axe-core validation on this element and log any ARIA violations to the console,\n * at the appropriate lifecycle points.\n *\n * This is a basic implementation that allows for further enhancements, such as:\n * - different timings: on load, on demand, on attribute change, etc.\n * - context-based, stateful optimization (such as only validating children that are relevant for the host's ARIA role)\n */\nexport class AriaValidationController implements ReactiveController {\n private static get globalValidationEnabled() {\n return Build.isDev; // TODO: implement runtime switch for enabling/disabling ARIA validation\n }\n private static axe = this.globalValidationEnabled ? import('axe-core') : null;\n private static axeQueue: Queue.Queue<AxeRunRequest> | null = null;\n private static axeStreamFiber: Fiber.RuntimeFiber<void, never> | null = null;\n\n private visibilityObserver?: IntersectionObserver;\n private elementQueued = false;\n private elementValidated = false;\n private knownValidationErrors: UnlabelledFrameSelector[] = [];\n\n get disabled() {\n return !AriaValidationController.globalValidationEnabled;\n }\n\n constructor(\n private readonly host: AriaValidationHost,\n private readonly config?: Config,\n ) {\n // Initialize the stream on first use\n AriaValidationController.initializeAxeStream();\n }\n\n /**\n * Initializes the shared axe validation stream that processes runs sequentially.\n * This is called once on first use and creates a background fiber that processes\n * validation requests from the queue.\n */\n private static initializeAxeStream() {\n if (!this.globalValidationEnabled) return;\n if (this.axeStreamFiber) return;\n\n const program = Effect.gen(function* () {\n // Create a bounded queue for axe run requests\n const queue = (AriaValidationController.axeQueue = yield* Queue.bounded<AxeRunRequest>(100));\n\n // Load axe library once\n const axeLib = yield* Effect.promise(() => AriaValidationController.axe);\n if (!axeLib) {\n console.error('Axe library not available, ARIA validation will not run.');\n return;\n }\n\n // Create a stream from the queue that processes requests sequentially\n const stream = Stream.fromQueue(queue).pipe(\n Stream.mapEffect(({ context, onComplete }) =>\n Effect.async<void, never>(resume => {\n // Run axe validation and resume when complete\n axeLib.run(context, {}, (error, results) => {\n onComplete(error, results);\n resume(Effect.void);\n });\n }),\n ),\n );\n\n // Run the stream indefinitely, processing each request sequentially\n yield* Stream.runDrain(stream);\n });\n\n // Start the stream in the background\n this.axeStreamFiber = Effect.runFork(program);\n }\n\n hostDidLoad() {\n if (this.elementQueued || this.elementValidated) return;\n\n if (!this.host.el.checkVisibility()) {\n this.observeVisibilityOnce();\n return;\n }\n\n this.enqueueValidation();\n }\n\n hostDidUpdate() {\n this.checkLazyValidation();\n }\n\n hostDisconnected() {\n this.discardVisibilityObserver();\n }\n\n private observeVisibilityOnce() {\n this.visibilityObserver = new IntersectionObserver(\n entries => {\n for (const entry of entries) {\n if (entry.target !== this.host.el) continue;\n if (!entry.isIntersecting) continue;\n\n this.checkLazyValidation();\n\n // stop observing once the element is visible and validation is triggered\n this.discardVisibilityObserver();\n }\n },\n {\n root: this.host.el.parentElement,\n rootMargin: '0px',\n threshold: 0.01, // 1% visible is enough to count as visible\n },\n );\n this.visibilityObserver.observe(this.host.el);\n }\n\n private checkLazyValidation() {\n if (!this.config?.reValidateOnPropChanges && (this.elementQueued || this.elementValidated)) return;\n this.enqueueValidation();\n }\n\n private enqueueValidation() {\n if (!AriaValidationController.globalValidationEnabled) return;\n\n this.elementQueued = true;\n\n // Enqueue the axe run request - will be processed sequentially\n Effect.runPromise(\n // since the queue lives in the static context,\n // we need to wrap the enqueueing in an effect to access it\n // and also pass around the current element and a callback\n AriaValidationController.axeQueue?.offer({\n context: { include: this.host.el, exclude: this.knownValidationErrors },\n onComplete: (error, results) => {\n this.elementValidated = true;\n if (error) {\n console.error('Error running ARIA validation:', error);\n return;\n }\n if (!results?.violations.length) {\n if (this.config?.verboseLogging) {\n console.log(`No ARIA validation violations found for ${this.host.el?.tagName || 'element'}.`);\n }\n return;\n }\n\n const label = `ARIA validation violations found for ${this.host.el?.tagName || 'element'}`;\n if (this.config?.verboseLogging) {\n console.group(label);\n } else {\n console.groupCollapsed(label);\n }\n const targets = results.violations.flatMap(violation => {\n console.dir(violation, { showHidden: true, compact: false });\n return violation.nodes.map(node => node.target);\n });\n console.log('element:', this.host.el);\n console.groupEnd();\n\n this.knownValidationErrors.push(...targets);\n },\n }),\n );\n }\n\n private discardVisibilityObserver() {\n if (!this.visibilityObserver) return;\n this.visibilityObserver.disconnect();\n this.visibilityObserver = undefined;\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"svg.js","sourceRoot":"","sources":["../../../src/utils/validation/svg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAG7C,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAY,UAAU,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;AAC1G,MAAM,OAAO,oBAAqB,SAAQ,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAQ;IACvF,YAAY,KAAY,EAAE,IAAY;QACpC,KAAK,CAAC,IAAI,KAAK,CAAC,oCAAoC,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAClF,CAAC;CACF;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAW,EAAE,EAAE,CAClD,MAAM,CAAC,GAAG,CAAC;IACT,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,oBAAoB,CAAC,KAAc,EAAE,WAAW,CAAC;CACtE,CAAC,CAAC;AAEL,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QACzD,OAAO,GAAG,CAAC,eAAe,CAAC,QAAQ,KAAK,KAAK,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC","sourcesContent":["import { Brand, Data, Effect } from 'effect';\n\nexport type SVGString = string & Brand.Brand<'SVG'>;\nexport const SVGString = Brand.refined<SVGString>(isValidSVG, () => Brand.error('SVG data is malformed'));\nexport class BrandValidationError extends Data.TaggedError('BrandValidationError')<Error> {\n constructor(error: Error, type: string) {\n super(new Error(`Brand validation failed for type ${type}.`, { cause: error }));\n }\n}\n\nexport const createValidSVGString = (svg: string) =>\n Effect.try({\n try: () => SVGString(svg),\n catch: error => new BrandValidationError(error as Error, 'SVGString'),\n });\n\nfunction isValidSVG(svg: string): boolean {\n if (typeof svg !== 'string') {\n return false;\n }\n try {\n const parser = new DOMParser();\n const doc = parser.parseFromString(svg, 'image/svg+xml');\n return doc.documentElement.nodeName === 'svg';\n } catch {\n return false;\n }\n}\n"]}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Components, JSX } from "../types/components";
|
|
2
|
-
|
|
3
|
-
interface HeaderIntegration extends Components.HeaderIntegration, HTMLElement {}
|
|
4
|
-
export const HeaderIntegration: {
|
|
5
|
-
prototype: HeaderIntegration;
|
|
6
|
-
new (): HeaderIntegration;
|
|
7
|
-
};
|
|
8
|
-
/**
|
|
9
|
-
* Used to define this component and all nested components recursively.
|
|
10
|
-
*/
|
|
11
|
-
export const defineCustomElement: () => void;
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{p as e,H as t,h as a,c as n,t as c}from"./p-DBeynNeU.js";import{d as o}from"./p-Xq267cFM.js";import{d as i}from"./p-glDDybgu.js";import{d as m}from"./p-Cd4nH2vx.js";import{d as s}from"./p-CpI4KFOu.js";import{d as l}from"./p-CkTUjPwD.js";const r=e(class e extends t{constructor(e){super();if(e!==false){this.__registerHost()}this.__attachShadow()}activeNav;activate(e){const t=e.currentTarget;const a=t.closest('[slot="nav-primary"]');if(!a)return;const n=a.id;if(!n){console.warn("Nav item does not have an id:",a);return}console.log("Activating nav item:",n);this.activeNav=n}render(){return a(n,{key:"d36cd9202cfdea4bc684f2b17ba625fd37397616"},a("lmvz-header",{key:"681f8b9fe603d98bad55bbbc7b4dbd43a3d7aff1",lmvzActiveNav:this.activeNav},a("lmvz-menuitem",{key:"54a1b1d394c69e98e742e2dd53f000de028a8626",slot:"nav-primary",id:"lehrmittel",onLmvzActivation:this.activate.bind(this)},"Lehrmittel"),a("lmvz-menuitem",{key:"1aa874d07f7e444433c818c97e300d0e1693fa06",slot:"nav-primary",id:"verwaltung",onLmvzActivation:this.activate.bind(this)},"Verwaltung"),a("lmvz-menuitem",{key:"d462954ef05c4d70252febfd184b363c4a2a3cde",slot:"connect-nav-lehrmittel"},a("lmvz-icon",{key:"72e9bb03e05463b876bbf23e2e3e12838b15c76c",icon:"book"}),"Deutsch 7"),a("lmvz-menuitem",{key:"3f065f96ecd9ec59ae9ebd7885173e706f156a94",slot:"connect-nav-lehrmittel"},a("lmvz-icon",{key:"cb8039ffb7e590c201e7dc31ba55741c2dbe1181",icon:"book"}),"Mathe 2"),a("lmvz-menuitem",{key:"90eff45f7a773665a71eddceb4841e89fe54e5cb",slot:"connect-nav-verwaltung"},a("lmvz-icon",{key:"1a9a36baab23233209649e65a5a25d0d1e9b455e",icon:"cog"}),"iwas mit Verwaltung"),a("lmvz-menuitem",{key:"14149a8355373308ff6a531fc6e796b0a67e44a3",slot:"connect-nav-verwaltung","aria-label":"Einstellungen"},a("lmvz-icon",{key:"0e713b2f6740e004c8897e986de0756c9392459e",icon:"cog"})),a("lmvz-button",{key:"ee75293a9e256b5d3edf90a77a817aa1b60aea9e",slot:"actions","aria-label":"Benutzerkonto"},a("lmvz-icon",{key:"483e613ab4f5c32be0f942714fe649019b001f3f",icon:"user"}))),a("lmvz-input",{key:"63ec977b40a39ecd9bc37309ee2d917916cf3256",label:"test"}))}static get style(){return`:host {\n display: block;\n min-height: 100vh;\n background: var(--lmvz-color-spec-bg-outer-view);\n }\n\n .active button {\n background-color: var(--lmvz-semantic-color-status-selected);\n }`}},[513,"header-integration",{activeNav:[1025,"active-nav"]}]);function v(){if(typeof customElements==="undefined"){return}const e=["header-integration","lmvz-button","lmvz-header","lmvz-icon","lmvz-input","lmvz-menuitem"];e.forEach((e=>{switch(e){case"header-integration":if(!customElements.get(c(e))){customElements.define(c(e),r)}break;case"lmvz-button":if(!customElements.get(c(e))){o()}break;case"lmvz-header":if(!customElements.get(c(e))){i()}break;case"lmvz-icon":if(!customElements.get(c(e))){m()}break;case"lmvz-input":if(!customElements.get(c(e))){s()}break;case"lmvz-menuitem":if(!customElements.get(c(e))){l()}break}}))}const b=r;const d=v;export{b as HeaderIntegration,d as defineCustomElement};
|
|
2
|
-
//# sourceMappingURL=header-integration.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["HeaderIntegration","__stencil_proxyCustomElement","HTMLElement","activeNav","activate","event","target","currentTarget","navItem","closest","navId","id","console","warn","log","this","render","h","Host","key","lmvzActiveNav","slot","onLmvzActivation","bind","icon","label"],"sources":["src/integration/header-integration.tsx"],"sourcesContent":["import { Component, h, Host, Prop } from '@stencil/core';\n\n@Component({\n tag: 'header-integration',\n styles: `\n :host {\n display: block;\n min-height: 100vh;\n background: var(--lmvz-color-spec-bg-outer-view);\n }\n\n .active button {\n background-color: var(--lmvz-semantic-color-status-selected);\n }\n `,\n shadow: true,\n})\nexport class HeaderIntegration {\n @Prop({ mutable: true }) activeNav: string;\n\n private activate(event: CustomEvent<void>) {\n const target = event.currentTarget as HTMLLmvzButtonElement;\n const navItem = target.closest('[slot=\"nav-primary\"]') as HTMLElement | null;\n if (!navItem) return;\n\n const navId = navItem.id;\n if (!navId) {\n console.warn('Nav item does not have an id:', navItem);\n return;\n }\n\n console.log('Activating nav item:', navId);\n this.activeNav = navId;\n }\n\n render() {\n return (\n <Host>\n <lmvz-header lmvzActiveNav={this.activeNav}>\n {/* <lmvz-icon icon=\"Logo\" slot=\"brand\" aria-hidden></lmvz-icon> */}\n <lmvz-menuitem slot=\"nav-primary\" id=\"lehrmittel\" onLmvzActivation={this.activate.bind(this)}>\n Lehrmittel\n </lmvz-menuitem>\n <lmvz-menuitem slot=\"nav-primary\" id=\"verwaltung\" onLmvzActivation={this.activate.bind(this)}>\n Verwaltung\n </lmvz-menuitem>\n <lmvz-menuitem slot=\"connect-nav-lehrmittel\">\n <lmvz-icon icon=\"book\"></lmvz-icon>Deutsch 7\n </lmvz-menuitem>\n <lmvz-menuitem slot=\"connect-nav-lehrmittel\">\n <lmvz-icon icon=\"book\"></lmvz-icon>Mathe 2\n </lmvz-menuitem>\n <lmvz-menuitem slot=\"connect-nav-verwaltung\">\n <lmvz-icon icon=\"cog\"></lmvz-icon>iwas mit Verwaltung\n </lmvz-menuitem>\n <lmvz-menuitem slot=\"connect-nav-verwaltung\" aria-label=\"Einstellungen\">\n <lmvz-icon icon=\"cog\"></lmvz-icon>\n </lmvz-menuitem>\n\n <lmvz-button slot=\"actions\" aria-label=\"Benutzerkonto\">\n <lmvz-icon icon=\"user\"></lmvz-icon>\n </lmvz-button>\n </lmvz-header>\n\n <lmvz-input label=\"test\"></lmvz-input>\n </Host>\n );\n }\n}\n"],"mappings":"0PAiBaA,EAAiBC,EAAA,MAAAD,UAAAE,E,iFACHC,UAEjB,QAAAC,CAASC,GACf,MAAMC,EAASD,EAAME,cACrB,MAAMC,EAAUF,EAAOG,QAAQ,wBAC/B,IAAKD,EAAS,OAEd,MAAME,EAAQF,EAAQG,GACtB,IAAKD,EAAO,CACVE,QAAQC,KAAK,gCAAiCL,GAC9C,M,CAGFI,QAAQE,IAAI,uBAAwBJ,GACpCK,KAAKZ,UAAYO,C,CAGnB,MAAAM,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,eAAAE,IAAA,2CAAaC,cAAeL,KAAKZ,WAE/Bc,EAAA,iBAAAE,IAAA,2CAAeE,KAAK,cAAcV,GAAG,aAAaW,iBAAkBP,KAAKX,SAASmB,KAAKR,OAAK,cAG5FE,EAAA,iBAAAE,IAAA,2CAAeE,KAAK,cAAcV,GAAG,aAAaW,iBAAkBP,KAAKX,SAASmB,KAAKR,OAAK,cAG5FE,EAAA,iBAAAE,IAAA,2CAAeE,KAAK,0BAClBJ,EAAA,aAAAE,IAAA,2CAAWK,KAAK,SACF,aAChBP,EAAA,iBAAAE,IAAA,2CAAeE,KAAK,0BAClBJ,EAAA,aAAAE,IAAA,2CAAWK,KAAK,SACF,WAChBP,EAAA,iBAAAE,IAAA,2CAAeE,KAAK,0BAClBJ,EAAA,aAAAE,IAAA,2CAAWK,KAAK,QACF,uBAChBP,EAAA,iBAAAE,IAAA,2CAAeE,KAAK,yBAAwB,aAAY,iBACtDJ,EAAA,aAAAE,IAAA,2CAAWK,KAAK,SAGlBP,EAAA,eAAAE,IAAA,2CAAaE,KAAK,UAAS,aAAY,iBACrCJ,EAAA,aAAAE,IAAA,2CAAWK,KAAK,WAIpBP,EAAA,cAAAE,IAAA,2CAAYM,MAAM,S","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["variants","scaleValues","sizes","textSizes","inputTypes","iconSizes","iconWeights","iconNames","run","effect","Effect.runPromise","catch","error","console"],"sources":["src/api/ds.constants.ts","src/utils/effect.ts"],"sourcesContent":["export const variants = ['primary', 'secondary', 'tertiary'] as const;\n\nexport const scaleValues = ['small', 'default', 'large'] as const;\nexport const sizes = ['xs', 'sm', 'md', 'lg'] as const;\nexport const textSizes = [...sizes, 'xl'] as const;\n\nexport const inputTypes = ['text', 'email', 'password', 'tel', 'url', 'search', 'number'] as const;\n\n// TODO: generate from available tokens (component/icon/size)\nexport const iconSizes = [...sizes, 'inherit'] as const;\nexport const iconWeights = ['thin', 'medium', 'bold', 'filled'] as const;\nexport const iconNames = [\n 'Logo',\n 'actions',\n 'adduser',\n 'alert',\n 'apple',\n 'arrow-down',\n 'arrow-left',\n 'arrow-right',\n 'arrow-up',\n 'book',\n 'bookmark',\n 'checkmark',\n 'chevron-down',\n 'chevron-left',\n 'chevron-right',\n 'chevron-up',\n 'close-l',\n 'close-sm',\n 'cog',\n 'computer',\n 'dashboard',\n 'delete',\n 'download',\n 'edit',\n 'external',\n 'facebook',\n 'favorite',\n 'filter',\n 'group',\n 'hide',\n 'home',\n 'info',\n 'instagram',\n 'letter',\n 'linkedin',\n 'logout',\n 'map',\n 'minus',\n 'navigation',\n 'plus',\n 'qr-scan',\n 'question',\n 'reader',\n 'reset',\n 'school',\n 'search',\n 'send',\n 'settings',\n 'share',\n 'shopping-cart',\n 'show',\n 'snapchat',\n 'sort',\n 'speech-bubble',\n 'star',\n 'student',\n 'upload',\n 'user',\n 'warn-circle',\n 'warn-triangle',\n 'whatsapp',\n 'world',\n 'x',\n 'youtube',\n] as const;\n","import { Effect } from 'effect';\n\nexport type UnwrapEffect<T> = T extends Effect.Effect<infer A, infer E, infer R> ? [A, E, R] : never;\n\nexport function run<T extends Effect.Effect<unknown, unknown, never>>(effect: T): T extends Effect.Effect<infer A, infer E, never> ? Promise<A | E> : never {\n return Effect.runPromise(effect).catch(error => {\n console.error('Unhandled error in Effect:', error);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) as any;\n}\n"],"mappings":"4hCAAO,MAAMA,EAAW,CAAC,UAAW,YAAa,YAE1C,MAAMC,EAAc,CAAC,QAAS,UAAW,SACzC,MAAMC,EAAQ,CAAC,KAAM,KAAM,KAAM,MACjC,MAAMC,EAAY,IAAID,EAAO,MAE7B,MAAME,EAAa,CAAC,OAAQ,QAAS,WAAY,MAAO,MAAO,SAAU,UAGzE,MAAMC,EAAY,IAAIH,EAAO,WAC7B,MAAMI,EAAc,CAAC,OAAQ,SAAU,OAAQ,UAC/C,MAAMC,EAAY,CACvB,OACA,UACA,UACA,QACA,QACA,aACA,aACA,cACA,WACA,OACA,WACA,YACA,eACA,eACA,gBACA,aACA,UACA,WACA,MACA,WACA,YACA,SACA,WACA,OACA,WACA,WACA,WACA,SACA,QACA,OACA,OACA,OACA,YACA,SACA,WACA,SACA,MACA,QACA,aACA,OACA,UACA,WACA,SACA,QACA,SACA,SACA,OACA,WACA,QACA,gBACA,OACA,WACA,OACA,gBACA,OACA,UACA,SACA,OACA,cACA,gBACA,WACA,QACA,IACA,WCvEI,SAAUC,EAAsDC,GACpE,OAAOC,EAAkBD,GAAQE,OAAMC,IACrCC,QAAQD,MAAM,6BAA8BA,EAAM,GAGtD,Q","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["lmvzActionCss","LmvzAction","__stencil_proxyCustomElement","HTMLElement","actionClick","_onClick","event","this","emit","render","h","Host","key","onClick","bind"],"sources":["src/components/lmvz-action/lmvz-action.css?tag=lmvz-action&encapsulation=shadow","src/components/lmvz-action/lmvz-action.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, Event, EventEmitter, Host, h } from '@stencil/core';\n\n@Component({\n tag: 'lmvz-action',\n styleUrl: 'lmvz-action.css',\n shadow: true,\n})\nexport class LmvzAction {\n @Event() actionClick!: EventEmitter<MouseEvent>;\n\n private _onClick(event: MouseEvent) {\n this.actionClick.emit(event);\n }\n\n render() {\n return (\n <Host onClick={this._onClick.bind(this)}>\n <slot></slot>\n </Host>\n );\n }\n}\n"],"mappings":"uEAAA,MAAMA,EAAgB,IAAM,uB,MCOfC,EAAUC,EAAA,MAAAD,UAAAE,E,wHACZC,YAED,QAAAC,CAASC,GACfC,KAAKH,YAAYI,KAAKF,E,CAGxB,MAAAG,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,2CAACC,QAASN,KAAKF,SAASS,KAAKP,OAChCG,EAAA,QAAAE,IAAA,6C","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":[],"mappings":"","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["lmvzCardCss","LmvzCard","__stencil_proxyCustomElement","HTMLElement","cardTitle","imageUrl","description","primaryActionLabel","primaryAction","fallbackImage","runSync","syncCreateAssetUrlSafely","_onPrimaryClick","this","emit","_onOverflowClick","event","console","log","render","imgStyle","backgroundImage","h","Host","key","role","class","style","name","onClick","bind"],"sources":["src/components/lmvz-card/lmvz-card.css?tag=lmvz-card&encapsulation=scoped","src/components/lmvz-card/lmvz-card.tsx"],"sourcesContent":["@import url('../../styles/internal/define-layers.css');\n\n@import url('../../styles/fragments/_routerFont.css') layer(lmvz-ds.theme);\n@import url('../../styles/fragments/_reset.css') layer(lmvz-ds.reset);\n\n:host {\n /** component dependencies */\n /* * the (invalid nested) import will be handled by postcss */\n /* stylelint-disable no-invalid-position-at-import-rule */\n @import url('../../styles/fragments/_buttons.css');\n\n display: flex;\n min-width: var(--lmvz-other-component-card-minwidth);\n max-width: var(--lmvz-other-component-card-maxwidth);\n flex-direction: column;\n align-items: flex-start;\n\n border-radius: var(--lmvz-semantic-border-radius-lg);\n border: var(--lmvz-semantic-border-width-default) solid var(--lmvz-semantic-color-border-default);\n background: var(--lmvz-semantic-color-surface-primary);\n}\n\n* {\n color: var(--lmvz-semantic-color-on-surface-primary);\n font: var(--lmvz-typography-body-md);\n}\n\n.top {\n display: flex;\n padding: var(--lmvz-dimension-8-12);\n flex-direction: column;\n justify-content: center;\n align-items: center;\n align-self: stretch;\n}\n\n.bottom {\n display: flex;\n min-width: 150px;\n padding: var(--lmvz-dimension-4-6) var(--lmvz-dimension-10-14) var(--lmvz-dimension-10-14) var(--lmvz-dimension-10-14);\n flex-direction: column;\n align-items: flex-start;\n align-self: stretch;\n}\n\n.title {\n margin: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n align-self: stretch;\n\n padding-bottom: var(--lmvz-global-s4);\n overflow-wrap: break-word;\n font: var(--lmvz-typography-heading-2xl);\n}\n\n.description {\n display: flex;\n margin: 0;\n padding-bottom: var(--lmvz-component-body-sm-padding-bottom);\n align-items: flex-start;\n align-self: stretch;\n white-space: pre-line;\n font: var(--lmvz-typography-body-md);\n}\n\n.image-wrapper {\n aspect-ratio: 4 / 3;\n width: 100%;\n background-size: cover;\n background-position: center;\n flex: 1 0 0;\n align-self: stretch;\n border-radius: var(--lmvz-semantic-border-radius-md);\n}\n\n.actions {\n margin-top: var(--lmvz-component-form-wrapper-gap-y);\n display: flex;\n align-items: center;\n gap: var(--lmvz-component-input-md-gap-x);\n align-self: stretch;\n}\n\nbutton.primary,\nlmvz-button.primary {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: var(--lmvz-component-input-md-gap-x);\n flex: 1 0 0;\n}\n\n/* .overflow-button {\n anchor-name: --overflow-button;\n} */\n\n/* menu {\n position: fixed;\n position-anchor: --overflow-button;\n\n inset-block-start: anchor(end);\n inset-inline-end: anchor(self-end);\n margin: 5px 0 0 5px;\n} */\n","import { Component, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\n\nimport { runSync } from 'effect/Effect';\nimport { syncCreateAssetUrlSafely } from '../../utils/assets';\n\n@Component({\n tag: 'lmvz-card',\n styleUrl: 'lmvz-card.css',\n scoped: true,\n assetsDirs: ['../../assets'],\n})\nexport class LmvzCard {\n /** Card title (required) */\n @Prop() cardTitle!: string;\n\n /** Optional image URL; placeholder used if omitted */\n @Prop() imageUrl?: string;\n\n /** Optional description */\n @Prop() description?: string;\n\n /** Primary action button label */\n @Prop() primaryActionLabel: string = '';\n\n /** Event emitted when primary button is clicked */\n @Event() primaryAction!: EventEmitter<PointerEvent>;\n\n private get fallbackImage() {\n return runSync(syncCreateAssetUrlSafely('card-placeholder.svg'));\n }\n\n private _onPrimaryClick() {\n this.primaryAction.emit();\n }\n\n private _onOverflowClick(event: PointerEvent) {\n // TODO: show menu\n console.log(event);\n }\n\n render() {\n const imgStyle = {\n backgroundImage: `url(${this.imageUrl ?? this.fallbackImage})`,\n };\n return (\n <Host role=\"article\">\n <div class=\"top\">\n <div class=\"image-wrapper\" style={imgStyle}>\n <div class=\"chip-slot\">\n <slot name=\"chip\"></slot>\n </div>\n </div>\n </div>\n <div class=\"bottom\">\n <header>\n <h2 class=\"title\">{this.cardTitle}</h2>\n </header>\n <p class=\"description\">{this.description}</p>\n {/* TODO: hide unless actions are available https://stackoverflow.com/questions/53796599/how-to-determine-number-of-children-in-a-slot */}\n <div class=\"actions\">\n <button class=\"primary\" onClick={this._onPrimaryClick.bind(this)} data-testid=\"primary\">\n {this.primaryActionLabel}\n </button>\n {/* popoverTarget=\"mypopover\" */}\n <button class=\"tertiary\" aria-label=\"More actions\" onClick={this._onOverflowClick}>\n <span class=\"icon-placeholder\">...</span>\n </button>\n {/* <menu id=\"mypopover\" popover=\"manual\">\n <li>TEST</li>\n </menu> */}\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"+IAAA,MAAMA,EAAc,IAAM,6mP,MCWbC,EAAQC,EAAA,MAAAD,UAAAE,E,sGAEXC,UAGAC,SAGAC,YAGAC,mBAA6B,GAG5BC,cAET,iBAAYC,GACV,OAAOC,EAAQC,EAAyB,wB,CAGlC,eAAAC,GACNC,KAAKL,cAAcM,M,CAGb,gBAAAC,CAAiBC,GAEvBC,QAAQC,IAAIF,E,CAGd,MAAAG,GACE,MAAMC,EAAW,CACfC,gBAAiB,OAAOR,KAAKR,UAAYQ,KAAKJ,kBAEhD,OACEa,EAACC,EAAI,CAAAC,IAAA,2CAACC,KAAK,WACTH,EAAA,OAAAE,IAAA,2CAAKE,MAAM,OACTJ,EAAA,OAAAE,IAAA,2CAAKE,MAAM,gBAAgBC,MAAOP,GAChCE,EAAA,OAAAE,IAAA,2CAAKE,MAAM,aACTJ,EAAA,QAAAE,IAAA,2CAAMI,KAAK,YAIjBN,EAAA,OAAAE,IAAA,2CAAKE,MAAM,UACTJ,EAAA,UAAAE,IAAA,4CACEF,EAAA,MAAAE,IAAA,2CAAIE,MAAM,SAASb,KAAKT,YAE1BkB,EAAA,KAAAE,IAAA,2CAAGE,MAAM,eAAeb,KAAKP,aAE7BgB,EAAA,OAAAE,IAAA,2CAAKE,MAAM,WACTJ,EAAA,UAAAE,IAAA,2CAAQE,MAAM,UAAUG,QAAShB,KAAKD,gBAAgBkB,KAAKjB,MAAK,cAAc,WAC3EA,KAAKN,oBAGRe,EAAA,UAAAE,IAAA,2CAAQE,MAAM,WAAU,aAAY,eAAeG,QAAShB,KAAKE,kBAC/DO,EAAA,QAAAE,IAAA,2CAAME,MAAM,oBAAkB,U","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["lmvzChipCss","LmvzChip","__stencil_proxyCustomElement","HTMLElement","text","render","h","Host","key","this"],"sources":["src/components/lmvz-chip/lmvz-chip.css?tag=lmvz-chip&encapsulation=shadow","src/components/lmvz-chip/lmvz-chip.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, Host, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'lmvz-chip',\n styleUrl: 'lmvz-chip.css',\n shadow: true,\n})\nexport class LmvzChip {\n @Prop() text: string;\n\n render() {\n return <Host>{this.text}</Host>;\n }\n}\n"],"mappings":"2DAAA,MAAMA,EAAc,IAAM,uB,MCObC,EAAQC,EAAA,MAAAD,UAAAE,E,iFACXC,KAER,MAAAC,GACE,OAAOC,EAACC,EAAI,CAAAC,IAAA,4CAAEC,KAAKL,K","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":[],"mappings":"","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":[],"mappings":"","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":[],"mappings":"","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":[],"mappings":"","ignoreList":[]}
|