@lmvz-ds/components 0.16.0 → 0.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/{icons-BOM23oli.js → Effect-DdYOHaR4.js} +153 -889
- package/dist/cjs/app-globals-V2Kpy_OQ.js +0 -3
- package/dist/cjs/aria-loader-BRxRUIyi.js +121 -0
- package/dist/cjs/{assets-XY-cBmal.js → assets-OvQ-WUwR.js} +2 -5
- package/dist/cjs/component-Csg9MtNK.js +140 -0
- package/dist/cjs/element-activation-controller-DC_6T0Rt.js +31 -0
- package/dist/cjs/icons-EHBLbidD.js +653 -0
- package/dist/cjs/{index-ww_DCXU7.js → index-BBqtydE-.js} +426 -431
- package/dist/cjs/index-Bp6Dd2i1.js +94 -0
- package/dist/cjs/{index-B1Puzu82.js → index-CH-YLRgg.js} +650 -10
- package/dist/cjs/index.cjs.js +12 -13
- package/dist/cjs/lmvz-action.cjs.entry.js +2 -5
- package/dist/cjs/lmvz-button.cjs.entry.js +73 -0
- package/dist/cjs/lmvz-card.cjs.entry.js +3 -6
- package/dist/cjs/lmvz-chip.cjs.entry.js +2 -5
- package/dist/cjs/lmvz-components.cjs.js +2 -5
- package/dist/cjs/lmvz-header_2.cjs.entry.js +153 -0
- package/dist/cjs/lmvz-icon.cjs.entry.js +87 -0
- package/dist/cjs/lmvz-input.cjs.entry.js +183 -0
- package/dist/cjs/lmvz-menuitem.cjs.entry.js +36 -0
- package/dist/cjs/lmvz-select.cjs.entry.js +71 -0
- package/dist/cjs/loader.cjs.js +2 -5
- package/dist/cjs/reactive-controller-host-vy1TIIXv.js +189 -0
- package/dist/collection/api/ds.constants.js +0 -1
- package/dist/collection/api/index.js +0 -1
- package/dist/collection/collection-manifest.json +13 -1
- package/dist/collection/components/lmvz-action/lmvz-action.js +1 -2
- package/dist/collection/components/lmvz-button/lmvz-button.css +2 -24
- package/dist/collection/components/lmvz-button/lmvz-button.js +1 -2
- package/dist/collection/components/lmvz-card/lmvz-card.css +2 -24
- package/dist/collection/components/lmvz-card/lmvz-card.js +1 -2
- package/dist/collection/components/lmvz-chip/lmvz-chip.js +1 -2
- package/dist/collection/components/lmvz-header/lmvz-header.js +1 -2
- package/dist/collection/components/lmvz-icon/icons.js +0 -1
- package/dist/collection/components/lmvz-icon/lmvz-icon.js +1 -2
- package/dist/collection/components/lmvz-icon/public.js +0 -1
- package/dist/collection/components/lmvz-icon/test/icons.unit.js +0 -1
- package/dist/collection/components/lmvz-input/lmvz-input.css +2 -24
- package/dist/collection/components/lmvz-input/lmvz-input.js +2 -3
- package/dist/collection/components/lmvz-menuitem/lmvz-menuitem.css +2 -24
- package/dist/collection/components/lmvz-menuitem/lmvz-menuitem.js +1 -2
- package/dist/collection/components/lmvz-select/lmvz-select.css +2 -24
- package/dist/collection/components/lmvz-select/lmvz-select.js +1 -2
- package/dist/collection/index.js +0 -1
- package/dist/collection/integration/header-integration.js +1 -2
- package/dist/collection/utils/aria/aria-validation-controller.js +0 -1
- package/dist/collection/utils/aria/element-activation-controller.js +0 -1
- package/dist/collection/utils/aria/list-keyboard-controller.js +0 -1
- package/dist/collection/utils/assets.js +0 -1
- package/dist/collection/utils/component.js +0 -1
- package/dist/collection/utils/effect.js +0 -1
- package/dist/collection/utils/environment.js +0 -1
- package/dist/collection/utils/http.js +0 -1
- package/dist/collection/utils/http.unit.js +0 -1
- package/dist/collection/utils/public.js +0 -1
- package/dist/collection/utils/reactive-controller-host.js +0 -1
- package/dist/collection/utils/validation/svg.js +0 -1
- package/dist/components/index.d.ts +0 -2
- package/dist/components/index.js +1 -2
- package/dist/components/lmvz-action.js +1 -2
- package/dist/components/lmvz-button.js +1 -2
- package/dist/components/lmvz-card.js +1 -2
- package/dist/components/lmvz-chip.js +1 -2
- package/dist/components/lmvz-header.js +1 -2
- package/dist/components/lmvz-icon.js +1 -2
- package/dist/components/lmvz-input.js +1 -2
- package/dist/components/lmvz-menuitem.js +1 -2
- package/dist/components/lmvz-select.js +1 -2
- package/dist/components/p-BfTCfPZ1.js +2 -3
- package/dist/components/p-BsHYIl56.js +1 -2
- package/dist/components/p-CKtksB0G.js +1 -0
- package/dist/components/p-CN0JX9-m.js +1 -2
- package/dist/components/p-CahBdGGN.js +1 -0
- package/dist/components/p-DQEkWkMh.js +1 -2
- package/dist/components/p-GKEnURpp.js +1 -0
- package/dist/components/p-vIq2biqy.js +2 -3
- package/dist/esm/{icons-D1lxdRXP.js → Effect-9SROYpxM.js} +91 -854
- package/dist/esm/app-globals-DQuL1Twl.js +0 -3
- package/dist/esm/aria-loader-JxXwTAe5.js +114 -0
- package/dist/esm/{assets-BD98wsl7.js → assets-CNHv_WMG.js} +1 -4
- package/dist/esm/component-DIrAQ4IB.js +134 -0
- package/dist/esm/element-activation-controller-CN0JX9-m.js +29 -0
- package/dist/esm/icons-B255FOe4.js +649 -0
- package/dist/esm/{index-DoNkkDv1.js → index-BW1YMEA3.js} +1 -6
- package/dist/esm/index-BfTCfPZ1.js +92 -0
- package/dist/esm/{index-WeqgWisK.js → index-CQb-mBBB.js} +650 -10
- package/dist/esm/index.js +5 -7
- package/dist/esm/lmvz-action.entry.js +2 -5
- package/dist/esm/lmvz-button.entry.js +71 -0
- package/dist/esm/lmvz-card.entry.js +3 -6
- package/dist/esm/lmvz-chip.entry.js +2 -5
- package/dist/esm/lmvz-components.js +3 -6
- package/dist/esm/lmvz-header_2.entry.js +150 -0
- package/dist/esm/lmvz-icon.entry.js +85 -0
- package/dist/esm/lmvz-input.entry.js +181 -0
- package/dist/esm/lmvz-menuitem.entry.js +34 -0
- package/dist/esm/lmvz-select.entry.js +69 -0
- package/dist/esm/loader.js +3 -6
- package/dist/esm/reactive-controller-host-OhKYwMvP.js +186 -0
- package/dist/lmvz-components/index.esm.js +1 -2
- package/dist/lmvz-components/lmvz-components.esm.js +1 -2
- package/dist/lmvz-components/p-150ecfb6.entry.js +1 -0
- package/dist/lmvz-components/p-22f67eff.entry.js +1 -0
- package/dist/lmvz-components/p-4530f088.entry.js +1 -0
- package/dist/lmvz-components/p-47d7ed0e.entry.js +1 -0
- package/dist/lmvz-components/p-5c3f1404.entry.js +1 -0
- package/dist/lmvz-components/p-8d51e396.entry.js +1 -0
- package/dist/lmvz-components/p-9SROYpxM.js +1 -0
- package/dist/lmvz-components/p-BfTCfPZ1.js +6 -0
- package/dist/lmvz-components/p-Bx29-tJt.js +1 -0
- package/dist/lmvz-components/p-CN0JX9-m.js +1 -0
- package/dist/lmvz-components/p-CQb-mBBB.js +2 -0
- package/dist/lmvz-components/p-Cp76bcGb.js +1 -0
- package/dist/lmvz-components/p-Cp7cp10e.js +12 -0
- package/dist/lmvz-components/p-DIrAQ4IB.js +1 -0
- package/dist/lmvz-components/p-DQuL1Twl.js +1 -2
- package/dist/lmvz-components/p-DyO6wO4l.js +1 -0
- package/dist/lmvz-components/p-b8926640.entry.js +1 -0
- package/dist/lmvz-components/p-b9d1953f.entry.js +1 -0
- package/dist/lmvz-components/p-d9c3f542.entry.js +1 -0
- package/dist/lmvz-components/p-i2508Ct1.js +1 -0
- package/dist/manifest.json +11 -47
- package/dist/stencil.config.base.js +0 -1
- package/dist/stencil.config.dev.js +0 -1
- package/dist/stencil.config.integration.js +0 -1
- package/dist/stencil.config.js +0 -1
- package/dist/stencil.config.prod.js +0 -1
- package/dist/types/components.d.ts +0 -18
- package/hydrate/index.js +11 -11
- package/hydrate/index.mjs +11 -11
- package/package.json +4 -4
- package/readme.md +1 -1
- package/dist/cjs/app-globals-V2Kpy_OQ.js.map +0 -1
- package/dist/cjs/assets-XY-cBmal.js.map +0 -1
- package/dist/cjs/header-integration_7.cjs.entry.js +0 -1024
- package/dist/cjs/header-integration_7.cjs.entry.js.map +0 -1
- package/dist/cjs/icons-BOM23oli.js.map +0 -1
- package/dist/cjs/index-B1Puzu82.js.map +0 -1
- package/dist/cjs/index-ww_DCXU7.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/components/lmvz-select/lmvz-select.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/aria/aria-validation-controller.js.map +0 -1
- package/dist/collection/utils/aria/element-activation-controller.js.map +0 -1
- package/dist/collection/utils/aria/list-keyboard-controller.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/environment.js.map +0 -1
- package/dist/collection/utils/http.js.map +0 -1
- package/dist/collection/utils/http.unit.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/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/lmvz-select.js.map +0 -1
- package/dist/components/p-B2g3aN-E.js +0 -2
- package/dist/components/p-B2g3aN-E.js.map +0 -1
- package/dist/components/p-BXdOuZTp.js +0 -2
- package/dist/components/p-BXdOuZTp.js.map +0 -1
- package/dist/components/p-BfTCfPZ1.js.map +0 -1
- package/dist/components/p-BpCjj39Z.js +0 -2
- package/dist/components/p-BpCjj39Z.js.map +0 -1
- package/dist/components/p-BsHYIl56.js.map +0 -1
- package/dist/components/p-C5rqq3bf.js +0 -2
- package/dist/components/p-C5rqq3bf.js.map +0 -1
- package/dist/components/p-CI0tffvo.js +0 -2
- package/dist/components/p-CI0tffvo.js.map +0 -1
- package/dist/components/p-CN0JX9-m.js.map +0 -1
- package/dist/components/p-ClmDNIy4.js +0 -2
- package/dist/components/p-ClmDNIy4.js.map +0 -1
- package/dist/components/p-DQEkWkMh.js.map +0 -1
- package/dist/components/p-X5fEFT9T.js +0 -2
- package/dist/components/p-X5fEFT9T.js.map +0 -1
- package/dist/components/p-vIq2biqy.js.map +0 -1
- package/dist/esm/app-globals-DQuL1Twl.js.map +0 -1
- package/dist/esm/assets-BD98wsl7.js.map +0 -1
- package/dist/esm/header-integration_7.entry.js +0 -1016
- package/dist/esm/header-integration_7.entry.js.map +0 -1
- package/dist/esm/icons-D1lxdRXP.js.map +0 -1
- package/dist/esm/index-DoNkkDv1.js.map +0 -1
- package/dist/esm/index-WeqgWisK.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-33485219.entry.js +0 -2
- package/dist/lmvz-components/p-33485219.entry.js.map +0 -1
- package/dist/lmvz-components/p-76032c32.entry.js +0 -2
- package/dist/lmvz-components/p-76032c32.entry.js.map +0 -1
- package/dist/lmvz-components/p-7aeec9a8.entry.js +0 -7
- package/dist/lmvz-components/p-7aeec9a8.entry.js.map +0 -1
- package/dist/lmvz-components/p-84e0a9dd.entry.js +0 -2
- package/dist/lmvz-components/p-84e0a9dd.entry.js.map +0 -1
- package/dist/lmvz-components/p-CkJb8WVZ.js +0 -2
- package/dist/lmvz-components/p-CkJb8WVZ.js.map +0 -1
- package/dist/lmvz-components/p-DQuL1Twl.js.map +0 -1
- package/dist/lmvz-components/p-WeqgWisK.js +0 -3
- package/dist/lmvz-components/p-WeqgWisK.js.map +0 -1
- package/dist/lmvz-components/p-Z9X0_ik0.js +0 -2
- package/dist/lmvz-components/p-Z9X0_ik0.js.map +0 -1
- package/dist/lmvz-components/p-eP0oxQ44.js +0 -13
- package/dist/lmvz-components/p-eP0oxQ44.js.map +0 -1
- package/dist/stencil.config.base.js.map +0 -1
- package/dist/stencil.config.dev.js.map +0 -1
- package/dist/stencil.config.integration.js.map +0 -1
- package/dist/stencil.config.js.map +0 -1
- package/dist/stencil.config.prod.js.map +0 -1
- package/dist/types/integration/header-integration.d.ts +0 -5
- /package/dist/types/{Users/patrick.nemenz/workspace/lmvz/lmvz-ds → opt/atlassian/pipelines/agent/build}/packages/components/.stencil/stencil.config.base.d.ts +0 -0
- /package/dist/types/{Users/patrick.nemenz/workspace/lmvz/lmvz-ds → opt/atlassian/pipelines/agent/build}/packages/components/.stencil/stencil.config.d.ts +0 -0
- /package/dist/types/{Users/patrick.nemenz/workspace/lmvz/lmvz-ds → opt/atlassian/pipelines/agent/build}/packages/components/.stencil/stencil.config.dev.d.ts +0 -0
- /package/dist/types/{Users/patrick.nemenz/workspace/lmvz/lmvz-ds → opt/atlassian/pipelines/agent/build}/packages/components/.stencil/stencil.config.integration.d.ts +0 -0
- /package/dist/types/{Users/patrick.nemenz/workspace/lmvz/lmvz-ds → opt/atlassian/pipelines/agent/build}/packages/components/.stencil/stencil.config.prod.d.ts +0 -0
|
@@ -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,gBAAiB,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;;MCQrC,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 type { EventEmitter } from '@stencil/core';\nimport { Component, Event, 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,ioPAAioP,CAAC;;MCWhpP,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,2BAAoB,CAAC,sBAAsB,CAAC;;IAG7C,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":["createAssetUrlSafely","h","Host"],"sources":["src/components/lmvz-card/lmvz-card.css?tag=lmvz-card&encapsulation=scoped","src/components/lmvz-card/lmvz-card.tsx"],"sourcesContent":["@import '~@lmvz-ds/lib-styles/define-layers.css';\n\n@import '~@lmvz-ds/lib-styles/fragments/_routerFont.css' layer(lmvz-ds.theme);\n@import '~@lmvz-ds/lib-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 '~@lmvz-ds/lib-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 type { EventEmitter } from '@stencil/core';\nimport { Component, Event, h, Host, Prop } from '@stencil/core';\n\nimport { createAssetUrlSafely } 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 createAssetUrlSafely('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/.pnpm/@stencil+core@4.43.3/node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"sourcesContent":["/*\n Stencil Client Patch Browser v4.43.3 | 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":"AACA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAO1D,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 type { EventEmitter } from '@stencil/core';\nimport { Component, Event, 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 type { Button } from '../../api';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/aria/aria-validation-controller';\nimport { ElementActivationController, type ElementActivationHost } from '../../utils/aria/element-activation-controller';\nimport { findFormByRef, inheritAriaAttributes, type Attributes, type FormRef } from '../../utils/component';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\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 validationEl: HTMLButtonElement | undefined;\n\n private inheritedAttributes: Attributes = {};\n private formEl: HTMLFormElement | null = null;\n private formButtonEl: HTMLButtonElement | null = null;\n\n /**\n * Event emitted when the button is activated, either by a click or by pressing \"Enter\" when the button is focused.\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 override connectedCallback() {\n this.inheritedAttributes = inheritAriaAttributes(this.el);\n super.connectedCallback();\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\n ref={(e) => (this.validationEl = e)}\n disabled={this.disabled}\n class={classNames(this.variant, { [this.scale ?? '']: !!this.scale, disabled: this.disabled })}\n {...this.inheritedAttributes}\n >\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":"AACA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAQ1D,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,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;IACtD,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 type { EventEmitter } from '@stencil/core';\nimport { Component, Event, h, Host, Prop } from '@stencil/core';\n\nimport { createAssetUrlSafely } 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 createAssetUrlSafely('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,CAAU;IAEtB,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 logo from '../../assets/icons/Logo.svg';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/aria/aria-validation-controller';\nimport { ListKeyboardNavigationController, type ListKeyboardNavigationHost } from '../../utils/aria/list-keyboard-controller';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\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 get validationEl() {\n return this.el;\n }\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 override componentDidLoad() {\n this.primarySlot?.addEventListener('slotchange', this.handlePrimaryNavItemsChange.bind(this));\n this.handlePrimaryNavItemsChange(); // initial check for already assigned elements\n this.secondarySlot?.addEventListener('slotchange', this.handleSecondaryNavItemsChange.bind(this));\n super.componentDidLoad();\n }\n\n private handlePrimaryNavItemsChange() {\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 this.updateKeyboardNavSubjects();\n }\n\n private handleSecondaryNavItemsChange() {\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.updateKeyboardNavSubjects();\n }\n\n private updateKeyboardNavSubjects() {\n this.keyboardNavigationController.updateElements([...this.primaryMenuitems, ...this.secondaryMenuitems]);\n }\n\n private updateElementsActive() {\n const items = this.primaryMenuitems;\n if (!items.length) return;\n\n let label = '';\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 if (!label) return;\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 <img id=\"fallback-logo-lmvz\" src={logo} alt=\"Lehrmittelverlag Zürich\" />\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 <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,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,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,oBAAoB,CAAC,GAAG,IAAI,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/D,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 { createAssetUrlSafely } 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 = createAssetUrlSafely(`${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 type { Icon } from '../../api';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/aria/aria-validation-controller';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\nimport { emptyDefaultSvg, fetchIconSvg, type 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 private readonly ariaValidationController = new AriaValidationController(this);\n\n @Element() el!: HTMLElement;\n validationEl: HTMLElement | undefined;\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(this.ariaValidationController);\n }\n\n override connectedCallback() {\n this.waitUntilVisible(() => {\n this.visible = true;\n this.loadIconPathData();\n });\n super.connectedCallback();\n }\n\n override disconnectedCallback() {\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = undefined;\n }\n super.disconnectedCallback();\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 override componentDidRender() {\n this.validationEl = this.el.querySelector('svg') as unknown as HTMLElement;\n this.ariaValidationController.revalidateAria();\n super.componentDidRender();\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 = undefined;\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 { beforeAll, beforeEach, describe, expect, test, vi } from '@stencil/vitest';\nimport { Effect } from 'effect';\nimport { FetchError, ResponseTextError } from '../../../utils/http';\nimport { BrandValidationError, SVGString } from '../../../utils/validation/svg';\nimport { clearIconCache, emptyDefaultSvg, fetchIconSvg } from '../icons';\n\nconst fetchMock = vi.fn();\n\nconst mockResponse = (textResult: unknown) =>\n ({\n status: 200,\n url: 'https://example.com/icons/actions.svg',\n text: vi.fn().mockResolvedValue(textResult),\n }) as unknown as Response;\n\ndescribe('icon utils:', () => {\n beforeAll(() => {\n vi.stubGlobal(\n 'DOMParser',\n class {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n parseFromString(str: string, _type: string) {\n return {\n documentElement: {\n nodeName: typeof str === 'string' && str.trimStart().startsWith('<svg') ? 'svg' : 'not-svg',\n },\n };\n }\n },\n );\n });\n\n beforeEach(() => {\n vi.clearAllMocks();\n fetchMock.mockReset();\n vi.stubGlobal('fetch', fetchMock);\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 fetchMock.mockResolvedValueOnce(mockResponse(svg));\n }\n\n function mockFetchFailure() {\n fetchMock.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 fetchMock.mockResolvedValueOnce({\n status: 200,\n url: 'https://example.com/icons/missing.svg',\n text: () => Promise.reject(new Error('not found')),\n } as unknown as Response);\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 fetchMock.mockResolvedValueOnce(mockResponse(123));\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 expect(fetchMock).toHaveBeenCalledTimes(1);\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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","sourcesContent":["import { AttachInternals, Component, Element, Event, type EventEmitter, h, Method, Prop, State, Watch } from '@stencil/core';\nimport classNames from 'classnames';\nimport type { Input } from '../../api';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/aria/aria-validation-controller';\nimport { componentOnReady } from '../../utils/component';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\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() readonly el!: HTMLElement;\n get validationEl() {\n return this.el;\n }\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 const val = newValue ?? '';\n\n if (input) {\n input.value = val;\n }\n this.value = val;\n this.internals.setFormValue?.(val); // undefined in stencil test environment\n this.lmvzInput.emit(val);\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 | undefined> {\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 override componentWillLoad() {\n this.initialValue = this.value ?? '';\n super.componentWillLoad();\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: Event) => {\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 <div id={this.helperId} role=\"status\">\n {this.helperText || null}\n </div>\n\n <div id={this.errorId} role=\"alert\">\n {(this.showErrorMessage && this.errorMessage) || null}\n </div>\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,EAAqB,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAA2B,MAAM,6CAA6C,CAAC;AAChH,OAAO,EAAE,2BAA2B,EAA8B,MAAM,gDAAgD,CAAC;AACzH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAU9E,MAAM,OAAO,YAAa,SAAQ,sBAAsB;IAClC,EAAE,CAAe;IAErC,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,cAAc,CAAmB;IAEjC,IAA6B,IAAI;QAC/B,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAoD,EAAE;QACpD,OAAO,CAAC,CAAC;IACX,CAAC;IAKQ,cAAc,CAAsB;IAE7C;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,aAAa,CAAC,IAAI,wBAAwB,CAAC,IAAI,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,aAAa,CAAC,IAAI,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;KAC3D;IAED,MAAM;QACJ,OAAO,CACL,EAAC,IAAI;YACH,6DAAM,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAA0E,CAChH,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Element, Event, type EventEmitter, Host, Prop, h } from '@stencil/core';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/aria/aria-validation-controller';\nimport { ElementActivationController, type ElementActivationHost } from '../../utils/aria/element-activation-controller';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\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() readonly el!: HTMLElement;\n\n get validationEl() {\n return this.el;\n }\n\n validationSlot?: HTMLSlotElement;\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 /**\n * Event emitted when the menu item is activated, either by a click or by pressing \"Enter\" or \"Space\" while the menu item is focused.\n */\n @Event() lmvzActivation!: EventEmitter<void>;\n\n constructor() {\n super();\n this.addController(new AriaValidationController(this, { validationTiming: 'slot' }));\n this.addController(new ElementActivationController(this));\n }\n\n render() {\n return (\n <Host>\n <slot ref={(e) => (this.validationSlot = e)}>{/* 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":"lmvz-select.js","sourceRoot":"","sources":["../../../../src/components/lmvz-select/lmvz-select.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, type EventEmitter, h, Host, Prop, State, Watch } from '@stencil/core';\nimport chevronDownSvg from '../../assets/icons/chevron-down.svg';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/aria/aria-validation-controller';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\n\nlet selectIdCounter = 0;\n\n/**\n * Select component with floating label and pill-shaped trigger.\n * Wraps a native `<select>` element for full keyboard and form support.\n *\n * @example\n * ```html\n * <lmvz-select label=\"Country\" name=\"country\">\n * <option value=\"ch\">Switzerland</option>\n * <option value=\"de\">Germany</option>\n * <option value=\"at\">Austria</option>\n * </lmvz-select>\n * ```\n *\n * @example\n * ```typescript\n * const select = document.querySelector('lmvz-select');\n * select.addEventListener('lmvzChange', (e) => console.log(e.detail));\n * ```\n *\n * @slot default - Native `<option>` or `<optgroup>` elements.\n */\n@Component({\n tag: 'lmvz-select',\n styleUrl: './lmvz-select.css',\n scoped: true,\n})\nexport class LmvzSelect extends ReactiveControllerHost implements AriaValidationHost {\n @Element() readonly el!: HTMLElement;\n get validationEl() {\n return this.el;\n }\n\n private selectId = `lmvz-select-${selectIdCounter++}`;\n private nativeSelectEl?: HTMLSelectElement;\n\n constructor() {\n super();\n this.addController(new AriaValidationController(this));\n }\n\n /**\n * Emitted when the user selects a new option. Detail contains the new value.\n */\n @Event() lmvzChange!: EventEmitter<string>;\n\n /**\n * Currently selected value.\n */\n @Prop({ mutable: true }) value?: string;\n\n /**\n * Label text displayed as a placeholder when no value is selected,\n * and floated above the trigger when a value is present.\n */\n @Prop() label!: string;\n\n /**\n * Helper text displayed below the select field.\n */\n @Prop() helperText?: string;\n\n /**\n * Whether the select is disabled.\n * @default false\n */\n @Prop({ reflect: true }) disabled = false;\n\n /**\n * Whether a value is required.\n * @default false\n */\n @Prop({ reflect: true }) required = false;\n\n /**\n * Name attribute passed to the native select for form submission.\n */\n @Prop() name?: string;\n\n @State() private selectedLabel = '';\n\n private get hasValue() {\n return Boolean(this.value);\n }\n\n override componentDidLoad() {\n this.syncSelectedLabel();\n super.componentDidLoad();\n }\n\n @Watch('value')\n protected handleValueChange(newValue: string | undefined) {\n if (this.nativeSelectEl && this.nativeSelectEl.value !== (newValue ?? '')) {\n this.nativeSelectEl.value = newValue ?? '';\n }\n this.syncSelectedLabel();\n }\n\n private syncSelectedLabel() {\n if (!this.nativeSelectEl) return;\n const idx = this.nativeSelectEl.selectedIndex;\n this.selectedLabel = idx >= 0 ? (this.nativeSelectEl.options[idx]?.text ?? '') : '';\n }\n\n private handleChange = (event: Event) => {\n const select = event.target as HTMLSelectElement;\n this.value = select.value;\n this.syncSelectedLabel();\n this.lmvzChange.emit(select.value);\n };\n\n render() {\n const hasValue = this.hasValue;\n const shouldShowLabel = hasValue;\n\n return (\n <Host>\n <div class=\"select-wrapper\">\n <label htmlFor={this.selectId} class={shouldShowLabel ? 'floating-label' : 'assistive-label'}>\n {this.label}\n {this.required && shouldShowLabel && <span aria-hidden=\"true\"> *</span>}\n </label>\n\n <div aria-hidden=\"true\">\n <span>\n {hasValue ? this.selectedLabel : this.label}\n {this.required && !hasValue && <span aria-hidden=\"true\"> *</span>}\n </span>\n <span>\n <img src={chevronDownSvg} alt=\"\" />\n </span>\n </div>\n\n <select\n id={this.selectId}\n ref={(el) => (this.nativeSelectEl = el)}\n name={this.name}\n disabled={this.disabled}\n required={this.required}\n aria-label={this.label}\n onChange={this.handleChange}\n >\n {!hasValue && <option value=\"\" disabled selected hidden></option>}\n <slot />\n </select>\n </div>\n\n {this.helperText && <div role=\"status\">{this.helperText}</div>}\n </Host>\n );\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAUA,cAAc,0BAA0B,CAAC;AAGzC,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 * from '@lmvz-ds/aria-validation';\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 type { 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;AAWzD,MAAM,OAAO,iBAAiB;IACH,SAAS,CAAU;IAEpC,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;oBAC1F,0DAAG,IAAI,EAAC,GAAG,iBAAe,CACZ;gBAChB,sEAAe,IAAI,EAAC,aAAa,EAAC,EAAE,EAAC,YAAY,EAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC1F,0DAAG,IAAI,EAAC,GAAG,iBAAe,CACZ;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,CACT,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, h, Host, Prop } from '@stencil/core';\n\n@Component({\n tag: 'header-integration',\n styles: `\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 <a href=\"#\">Lehrmittel</a>\n </lmvz-menuitem>\n <lmvz-menuitem slot=\"nav-primary\" id=\"verwaltung\" onLmvzActivation={this.activate.bind(this)}>\n <a href=\"#\">Verwaltung</a>\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 </Host>\n );\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aria-validation-controller.js","sourceRoot":"","sources":["../../../../src/utils/aria/aria-validation-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ARIA_VALIDATION_RUNTIME_CHANGED_EVENT,\n enableAriaValidation,\n isAriaValidationEnabled,\n queueValidation,\n UnlabelledFrameSelector,\n useVerboseLogging,\n} from '@lmvz-ds/aria-validation';\nimport { Build } from '@stencil/core';\nimport type { ReactiveController } from '../reactive-controller-host';\n\nexport type AriaValidationHost<T extends HTMLElement = HTMLElement> = {\n validationEl: T | undefined; // might by undefined due to timing (e.g. if the element is rendered conditionally), so the controller should handle this case\n validationSlot?: HTMLSlotElement;\n};\n\ntype Config = {\n reValidateOnPropChanges?: boolean;\n verboseLogging?: boolean;\n validationTiming?: 'load' | 'slot';\n};\n\nif (Build.isDev) {\n enableAriaValidation();\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. Though the controller makes some effort to anticipate the correct validation timing,\n * it may be necessary to adjust the timing based on the specific use case, using the `validationTiming` config option.\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 visibilityObserver?: IntersectionObserver;\n private elementQueued = false;\n private elementValidated = false;\n private elementLoaded = false;\n private static knownValidationErrors: UnlabelledFrameSelector[] = [];\n\n get disabled() {\n return !isAriaValidationEnabled();\n }\n\n private get useVerboseLogging() {\n return this.config?.verboseLogging || Build.isDev || useVerboseLogging();\n }\n\n constructor(\n private readonly host: AriaValidationHost,\n private readonly config?: Config,\n ) {}\n\n private readonly onRuntimeConfigChange = () => {\n if (!isAriaValidationEnabled()) return;\n\n this.checkLazyValidation();\n };\n\n hostDidLoad() {\n this.elementLoaded = true;\n if (typeof window !== 'undefined') {\n window.addEventListener(ARIA_VALIDATION_RUNTIME_CHANGED_EVENT, this.onRuntimeConfigChange);\n }\n\n if (this.elementQueued || this.elementValidated) return;\n\n if (this.config?.validationTiming === 'slot') {\n this.observeSlot();\n return;\n }\n\n if (!this.host.validationEl?.checkVisibility() || this.config?.validationTiming !== 'load') {\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 if (typeof window !== 'undefined') {\n window.removeEventListener(ARIA_VALIDATION_RUNTIME_CHANGED_EVENT, this.onRuntimeConfigChange);\n }\n }\n\n revalidateAria() {\n this.enqueueValidation();\n }\n\n private observeSlot() {\n this.host.validationSlot?.addEventListener('slotchange', this.enqueueValidation.bind(this));\n }\n\n private observeVisibilityOnce() {\n window.setTimeout(() => {\n if (!this.host.validationEl) return;\n\n this.visibilityObserver = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.target !== this.host.validationEl) 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.validationEl?.parentElement,\n rootMargin: '0px',\n threshold: 0.01, // 1% visible is enough to count as visible\n },\n );\n this.visibilityObserver.observe(this.host.validationEl);\n });\n }\n\n private checkLazyValidation() {\n if (!this.elementLoaded) return;\n\n if (!this.config?.reValidateOnPropChanges && (this.elementQueued || this.elementValidated)) return;\n\n if (!this.host.validationEl?.checkVisibility()) return;\n\n this.enqueueValidation();\n }\n\n private enqueueValidation() {\n if (!isAriaValidationEnabled()) return;\n\n this.elementQueued = true;\n\n queueValidation({\n context: { include: this.host.validationEl, exclude: AriaValidationController.knownValidationErrors },\n onComplete: (error, results) => {\n this.elementValidated = true;\n const elementName = (this.host as unknown as HTMLElement).tagName || this.host.validationEl?.tagName || 'Element';\n\n if (error) {\n console.error('Error running ARIA validation:', error, elementName);\n if (!this.host.validationEl?.tagName) {\n console.dir(this.host);\n }\n return;\n }\n\n const message = [elementName];\n\n if (!results?.violations.length) {\n if (this.useVerboseLogging) {\n console.log(...message, 'has no ARIA violations');\n if (!this.host.validationEl?.tagName) {\n console.dir(this.host);\n }\n }\n return;\n }\n\n const count = results.violations.length;\n const label = [...message, results.violations.at(0)!.id, count > 1 ? `(+${count - 1} more)` : ''].filter(Boolean).join(' ');\n if (this.useVerboseLogging) {\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 if (this.host.validationEl) {\n console.log('element:', this.host.validationEl);\n } else {\n console.dir(this.host);\n }\n console.groupEnd();\n\n AriaValidationController.knownValidationErrors.push(...targets);\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":"element-activation-controller.js","sourceRoot":"","sources":["../../../../src/utils/aria/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":"list-keyboard-controller.js","sourceRoot":"","sources":["../../../../src/utils/aria/list-keyboard-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AASrE,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,OAAmC,EAAE,SAAwB;QAC3F,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/B,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,SAAS,CAAC;QAE1C,IAAI,SAAS,GAAuB,SAAS,CAAC;QAC9C,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,SAAS;YAAE,OAAO,SAAS,CAAC;QAE7C,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 | undefined | null, direction: 'down' | 'up'): Element | undefined {\n if (!current) return undefined;\n const { elements } = this;\n const currentIndex = elements.indexOf(current);\n if (currentIndex === -1) return undefined;\n\n let nextIndex: number | undefined = undefined;\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 == undefined) return undefined;\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":"assets.js","sourceRoot":"","sources":["../../../src/utils/assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAU1C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAE,iBAAsC,EAAE,EAAE;IAG3F,MAAM,iBAAiB,GAAG,QAAQ,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAChF,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,mCAAmC,IAAI,cAAc,iBAAiB;oMAC6G,CAAC,CAAC;QAClM,OAAO,IAAI,GAAG,CAAC,iBAAiB,EAAE,eAAe,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,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 { getLocationBase } from './environment';\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 A string URL for the asset, or a fallback URL if the creation fails.\n */\nexport const createAssetUrlSafely = (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 try {\n return getAssetPath(relativeAssetPath);\n } catch {\n console.warn(`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 return 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?.shadowRoot) {\n const next: Element | null = 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 | undefined): boolean {\n if (!el) return false;\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":"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,KAAK,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE/C,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,KAAiC,EAAE,IAAkB,EAAE,EAAE,CAClF,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,MAAM,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtE,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, Micro as 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 | string, 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* Effect.fail(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.unit.js","sourceRoot":"","sources":["../../../src/utils/http.unit.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it, vi } from '@stencil/vitest';\n\nimport { Micro as 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 = vi.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 = vi.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 = vi.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 = vi.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: vi.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: vi.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":"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":"svg.js","sourceRoot":"","sources":["../../../../src/utils/validation/svg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGtD,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, Micro as 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 c,c as a,t as n}from"./p-C5rqq3bf.js";import{d as o}from"./p-BpCjj39Z.js";import{d as i}from"./p-BXdOuZTp.js";import{d as m}from"./p-B2g3aN-E.js";import{d as s}from"./p-X5fEFT9T.js";const f=e(class e extends t{constructor(e){super();if(e!==false){this.__registerHost()}this.__attachShadow()}activeNav;activate(e){const t=e.currentTarget;const c=t.closest('[slot="nav-primary"]');if(!c)return;const a=c.id;if(!a){console.warn("Nav item does not have an id:",c);return}console.log("Activating nav item:",a);this.activeNav=a}render(){return c(a,{key:"c70b22cccc010b6a18ec6003e31b9fb905cd669e"},c("lmvz-header",{key:"bf4f3a9c603dcfeee519dc1e78d8e9cd6e836f98",lmvzActiveNav:this.activeNav},c("lmvz-menuitem",{key:"64f3b9e2a6d5bb7feab15169d0de61e64a4002f1",slot:"nav-primary",id:"lehrmittel",onLmvzActivation:this.activate.bind(this)},c("a",{key:"2af5799904621d8b48640694a16f3858b0a5ccf9",href:"#"},"Lehrmittel")),c("lmvz-menuitem",{key:"54ed8090f68463bea9a18b290b1a1e707259119f",slot:"nav-primary",id:"verwaltung",onLmvzActivation:this.activate.bind(this)},c("a",{key:"98b8d121e0fca6b0630bc664cbfeb9307ce5b7e5",href:"#"},"Verwaltung")),c("lmvz-menuitem",{key:"c656b1a95940f1e14cf905a20c4679e92ca456ee",slot:"connect-nav-lehrmittel"},c("lmvz-icon",{key:"d9d16fe6d1d0ac183724881f7f1b41ce04f3c607",icon:"book"}),"Deutsch 7"),c("lmvz-menuitem",{key:"7aaf7887accf7fc388fe425718bdf2f703686f98",slot:"connect-nav-lehrmittel"},c("lmvz-icon",{key:"e2791405657a2de9527057f6c6767260cd9d21af",icon:"book"}),"Mathe 2"),c("lmvz-menuitem",{key:"c99fd516f891ae6bd6a76c92e504cf17ec3c0820",slot:"connect-nav-verwaltung"},c("lmvz-icon",{key:"78d9563d8c9a78f6b7bee0ad79ac0c51d8575790",icon:"cog"}),"iwas mit Verwaltung"),c("lmvz-menuitem",{key:"225f8207ee869d5e37bb9d6dbd7881a6fe636637",slot:"connect-nav-verwaltung","aria-label":"Einstellungen"},c("lmvz-icon",{key:"0d89fcb8bfbb3918ff14d783cfc087c658df151a",icon:"cog"})),c("lmvz-button",{key:"2637addd2ee7158087d6ab50808e6f900acabbf2",slot:"actions","aria-label":"Benutzerkonto"},c("lmvz-icon",{key:"c927e171d6f29474f18e2c222fff50c4947a0b3b",icon:"user"}))))}static get style(){return`.active button {\n background-color: var(--lmvz-semantic-color-status-selected);\n }`}},[513,"header-integration",{activeNav:[1025,"active-nav"]}]);function r(){if(typeof customElements==="undefined"){return}const e=["header-integration","lmvz-button","lmvz-header","lmvz-icon","lmvz-menuitem"];e.forEach((e=>{switch(e){case"header-integration":if(!customElements.get(n(e))){customElements.define(n(e),f)}break;case"lmvz-button":if(!customElements.get(n(e))){o()}break;case"lmvz-header":if(!customElements.get(n(e))){i()}break;case"lmvz-icon":if(!customElements.get(n(e))){m()}break;case"lmvz-menuitem":if(!customElements.get(n(e))){s()}break}}))}const l=f;const d=r;export{l 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","href","icon"],"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 .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 <a href=\"#\">Lehrmittel</a>\n </lmvz-menuitem>\n <lmvz-menuitem slot=\"nav-primary\" id=\"verwaltung\" onLmvzActivation={this.activate.bind(this)}>\n <a href=\"#\">Verwaltung</a>\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 </Host>\n );\n }\n}\n"],"mappings":"sNAWaA,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,OACrFE,EAAA,KAAAE,IAAA,2CAAGK,KAAK,KAAG,eAEbP,EAAA,iBAAAE,IAAA,2CAAeE,KAAK,cAAcV,GAAG,aAAaW,iBAAkBP,KAAKX,SAASmB,KAAKR,OACrFE,EAAA,KAAAE,IAAA,2CAAGK,KAAK,KAAG,eAEbP,EAAA,iBAAAE,IAAA,2CAAeE,KAAK,0BAClBJ,EAAA,aAAAE,IAAA,2CAAWM,KAAK,SACF,aAChBR,EAAA,iBAAAE,IAAA,2CAAeE,KAAK,0BAClBJ,EAAA,aAAAE,IAAA,2CAAWM,KAAK,SACF,WAChBR,EAAA,iBAAAE,IAAA,2CAAeE,KAAK,0BAClBJ,EAAA,aAAAE,IAAA,2CAAWM,KAAK,QACF,uBAChBR,EAAA,iBAAAE,IAAA,2CAAeE,KAAK,yBAAwB,aAAY,iBACtDJ,EAAA,aAAAE,IAAA,2CAAWM,KAAK,SAGlBR,EAAA,eAAAE,IAAA,2CAAaE,KAAK,UAAS,aAAY,iBACrCJ,EAAA,aAAAE,IAAA,2CAAWM,KAAK,W","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":"g0CAAO,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 type { EventEmitter } from '@stencil/core';\nimport { Component, Event, 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,MCQfC,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","createAssetUrlSafely","_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 '~@lmvz-ds/lib-styles/define-layers.css';\n\n@import '~@lmvz-ds/lib-styles/fragments/_routerFont.css' layer(lmvz-ds.theme);\n@import '~@lmvz-ds/lib-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 '~@lmvz-ds/lib-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 type { EventEmitter } from '@stencil/core';\nimport { Component, Event, h, Host, Prop } from '@stencil/core';\n\nimport { createAssetUrlSafely } 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 createAssetUrlSafely('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":"2GAAA,MAAMA,EAAc,IAAM,ooP,MCWbC,EAAQC,EAAA,MAAAD,UAAAE,E,sGAEXC,UAGAC,SAGAC,YAGAC,mBAA6B,GAG5BC,cAET,iBAAYC,GACV,OAAOC,EAAqB,uB,CAGtB,eAAAC,GACNC,KAAKJ,cAAcK,M,CAGb,gBAAAC,CAAiBC,GAEvBC,QAAQC,IAAIF,E,CAGd,MAAAG,GACE,MAAMC,EAAW,CACfC,gBAAiB,OAAOR,KAAKP,UAAYO,KAAKH,kBAEhD,OACEY,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,KAAKR,YAE1BiB,EAAA,KAAAE,IAAA,2CAAGE,MAAM,eAAeb,KAAKN,aAE7Be,EAAA,OAAAE,IAAA,2CAAKE,MAAM,WACTJ,EAAA,UAAAE,IAAA,2CAAQE,MAAM,UAAUG,QAAShB,KAAKD,gBAAgBkB,KAAKjB,MAAK,cAAc,WAC3EA,KAAKL,oBAGRc,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":[]}
|