@lmvz-ds/components 0.12.5-alpha.1 → 0.12.5-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/manifest.json +1 -1
  2. package/package.json +4 -4
  3. package/dist/cjs/app-globals-V2Kpy_OQ.js.map +0 -1
  4. package/dist/cjs/assets-Cswkqk_c.js +0 -18971
  5. package/dist/cjs/assets-Cswkqk_c.js.map +0 -1
  6. package/dist/cjs/axe-C2rxi-K2.js +0 -32837
  7. package/dist/cjs/axe-C2rxi-K2.js.map +0 -1
  8. package/dist/cjs/header-integration.lmvz-button.lmvz-header.lmvz-icon.lmvz-input.lmvz-menuitem-BTL_B6qg.js +0 -3665
  9. package/dist/cjs/header-integration.lmvz-button.lmvz-header.lmvz-icon.lmvz-input.lmvz-menuitem-BTL_B6qg.js.map +0 -1
  10. package/dist/cjs/header-integration_6.cjs.entry.js +0 -18
  11. package/dist/cjs/header-integration_6.cjs.entry.js.map +0 -1
  12. package/dist/cjs/icons-jn_Uak9B.js +0 -1063
  13. package/dist/cjs/icons-jn_Uak9B.js.map +0 -1
  14. package/dist/cjs/index-DpBPf1cE.js +0 -2112
  15. package/dist/cjs/index-DpBPf1cE.js.map +0 -1
  16. package/dist/cjs/index.cjs.js.map +0 -1
  17. package/dist/cjs/lmvz-action.cjs.entry.js.map +0 -1
  18. package/dist/cjs/lmvz-card.cjs.entry.js.map +0 -1
  19. package/dist/cjs/lmvz-chip.cjs.entry.js.map +0 -1
  20. package/dist/cjs/lmvz-components.cjs.js.map +0 -1
  21. package/dist/cjs/loader.cjs.js.map +0 -1
  22. package/dist/collection/api/ds.constants.js.map +0 -1
  23. package/dist/collection/api/index.js.map +0 -1
  24. package/dist/collection/components/lmvz-action/lmvz-action.js.map +0 -1
  25. package/dist/collection/components/lmvz-button/lmvz-button.js.map +0 -1
  26. package/dist/collection/components/lmvz-card/lmvz-card.js.map +0 -1
  27. package/dist/collection/components/lmvz-chip/lmvz-chip.js.map +0 -1
  28. package/dist/collection/components/lmvz-header/lmvz-header.js.map +0 -1
  29. package/dist/collection/components/lmvz-icon/icons.js.map +0 -1
  30. package/dist/collection/components/lmvz-icon/lmvz-icon.js.map +0 -1
  31. package/dist/collection/components/lmvz-icon/public.js.map +0 -1
  32. package/dist/collection/components/lmvz-icon/test/icons.unit.js.map +0 -1
  33. package/dist/collection/components/lmvz-input/lmvz-input.js.map +0 -1
  34. package/dist/collection/components/lmvz-menuitem/lmvz-menuitem.js.map +0 -1
  35. package/dist/collection/index.js.map +0 -1
  36. package/dist/collection/integration/header-integration.js.map +0 -1
  37. package/dist/collection/utils/assets.js.map +0 -1
  38. package/dist/collection/utils/component.js.map +0 -1
  39. package/dist/collection/utils/effect.js.map +0 -1
  40. package/dist/collection/utils/element-activation-controller.js.map +0 -1
  41. package/dist/collection/utils/environment.js.map +0 -1
  42. package/dist/collection/utils/http.js.map +0 -1
  43. package/dist/collection/utils/http.test.js.map +0 -1
  44. package/dist/collection/utils/list-keyboard-controller.js.map +0 -1
  45. package/dist/collection/utils/public.js.map +0 -1
  46. package/dist/collection/utils/reactive-controller-host.js.map +0 -1
  47. package/dist/collection/utils/typing.js.map +0 -1
  48. package/dist/collection/utils/validation/aria-validation-controller.js.map +0 -1
  49. package/dist/collection/utils/validation/svg.js.map +0 -1
  50. package/dist/components/header-integration.d.ts +0 -11
  51. package/dist/components/header-integration.js +0 -2
  52. package/dist/components/header-integration.js.map +0 -1
  53. package/dist/components/index.js.map +0 -1
  54. package/dist/components/lmvz-action.js.map +0 -1
  55. package/dist/components/lmvz-button.js.map +0 -1
  56. package/dist/components/lmvz-card.js.map +0 -1
  57. package/dist/components/lmvz-chip.js.map +0 -1
  58. package/dist/components/lmvz-header.js.map +0 -1
  59. package/dist/components/lmvz-icon.js.map +0 -1
  60. package/dist/components/lmvz-input.js.map +0 -1
  61. package/dist/components/lmvz-menuitem.js.map +0 -1
  62. package/dist/components/p-B3JVFwO1.js.map +0 -1
  63. package/dist/components/p-B85MJLTf.js.map +0 -1
  64. package/dist/components/p-CN0JX9-m.js.map +0 -1
  65. package/dist/components/p-Cd4nH2vx.js +0 -2
  66. package/dist/components/p-Cd4nH2vx.js.map +0 -1
  67. package/dist/components/p-CdofjRtQ.js.map +0 -1
  68. package/dist/components/p-CkTUjPwD.js +0 -2
  69. package/dist/components/p-CkTUjPwD.js.map +0 -1
  70. package/dist/components/p-CpI4KFOu.js +0 -2
  71. package/dist/components/p-CpI4KFOu.js.map +0 -1
  72. package/dist/components/p-D1HbKFuh.js.map +0 -1
  73. package/dist/components/p-D7xthqTT.js +0 -2
  74. package/dist/components/p-D7xthqTT.js.map +0 -1
  75. package/dist/components/p-DBeynNeU.js +0 -2
  76. package/dist/components/p-DBeynNeU.js.map +0 -1
  77. package/dist/components/p-DMLRPGid.js.map +0 -1
  78. package/dist/components/p-UiqQVZhU.js +0 -2
  79. package/dist/components/p-UiqQVZhU.js.map +0 -1
  80. package/dist/components/p-Xq267cFM.js +0 -2
  81. package/dist/components/p-Xq267cFM.js.map +0 -1
  82. package/dist/components/p-glDDybgu.js +0 -2
  83. package/dist/components/p-glDDybgu.js.map +0 -1
  84. package/dist/esm/app-globals-DQuL1Twl.js.map +0 -1
  85. package/dist/esm/assets-K2FHD9qn.js +0 -18770
  86. package/dist/esm/assets-K2FHD9qn.js.map +0 -1
  87. package/dist/esm/axe-CZ0Rtkog.js +0 -32835
  88. package/dist/esm/axe-CZ0Rtkog.js.map +0 -1
  89. package/dist/esm/header-integration.lmvz-button.lmvz-header.lmvz-icon.lmvz-input.lmvz-menuitem-CW3FGLZC.js +0 -3657
  90. package/dist/esm/header-integration.lmvz-button.lmvz-header.lmvz-icon.lmvz-input.lmvz-menuitem-CW3FGLZC.js.map +0 -1
  91. package/dist/esm/header-integration_6.entry.js +0 -7
  92. package/dist/esm/header-integration_6.entry.js.map +0 -1
  93. package/dist/esm/icons-BITzEzmq.js +0 -1032
  94. package/dist/esm/icons-BITzEzmq.js.map +0 -1
  95. package/dist/esm/index-D2eyw7iv.js +0 -2101
  96. package/dist/esm/index-D2eyw7iv.js.map +0 -1
  97. package/dist/esm/index.js.map +0 -1
  98. package/dist/esm/lmvz-action.entry.js.map +0 -1
  99. package/dist/esm/lmvz-card.entry.js.map +0 -1
  100. package/dist/esm/lmvz-chip.entry.js.map +0 -1
  101. package/dist/esm/lmvz-components.js.map +0 -1
  102. package/dist/esm/loader.js.map +0 -1
  103. package/dist/lmvz-components/index.esm.js.map +0 -1
  104. package/dist/lmvz-components/lmvz-components.esm.js.map +0 -1
  105. package/dist/lmvz-components/p-366a01f8.entry.js +0 -2
  106. package/dist/lmvz-components/p-366a01f8.entry.js.map +0 -1
  107. package/dist/lmvz-components/p-84ee7919.entry.js +0 -2
  108. package/dist/lmvz-components/p-84ee7919.entry.js.map +0 -1
  109. package/dist/lmvz-components/p-BLwPC3DQ.js +0 -2
  110. package/dist/lmvz-components/p-BLwPC3DQ.js.map +0 -1
  111. package/dist/lmvz-components/p-D2eyw7iv.js +0 -3
  112. package/dist/lmvz-components/p-D2eyw7iv.js.map +0 -1
  113. package/dist/lmvz-components/p-DANVVVBd.js +0 -7
  114. package/dist/lmvz-components/p-DANVVVBd.js.map +0 -1
  115. package/dist/lmvz-components/p-DQuL1Twl.js.map +0 -1
  116. package/dist/lmvz-components/p-DlDurXvX.js +0 -2
  117. package/dist/lmvz-components/p-DlDurXvX.js.map +0 -1
  118. package/dist/lmvz-components/p-Hc4uxoTU.js +0 -13
  119. package/dist/lmvz-components/p-Hc4uxoTU.js.map +0 -1
  120. package/dist/lmvz-components/p-a4200b26.entry.js +0 -2
  121. package/dist/lmvz-components/p-a4200b26.entry.js.map +0 -1
  122. package/dist/lmvz-components/p-d3243bae.entry.js +0 -2
  123. package/dist/lmvz-components/p-d3243bae.entry.js.map +0 -1
@@ -1,2 +0,0 @@
1
- import{g as t}from"./p-DBeynNeU.js";import{a4 as e,Z as s,a0 as r,_ as n,a5 as a}from"./p-CdofjRtQ.js";const o=function(){const t=Symbol.for("effect/Data/Error/plainArgs");const s={BaseEffectError:class extends e{constructor(e){super(e?.message,e?.cause?{cause:e.cause}:undefined);if(e){Object.assign(this,e);Object.defineProperty(this,t,{value:e,enumerable:false})}}toJSON(){return{...this[t],...this}}}};return s.BaseEffectError}();const c=t=>{const e={BaseEffectError:class extends o{_tag=t}};e.BaseEffectError.prototype.name=t;return e.BaseEffectError};function i(){return import.meta?.url??window?.location?.origin??""}class u extends(c("URLCreationError")){}const f="../../assets";const l=(e,o)=>{const c=p(f,o,e);return s((()=>t(c))).pipe(r((()=>n(`Failed to create URL for asset "${e}" in path "${o}".\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.`))),a((()=>new URL(c,i()))))};function p(...t){return t.filter(Boolean).join("/").replace("//","/").replace("/./","/")}export{c as T,l as s};
2
- //# sourceMappingURL=p-UiqQVZhU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["Error","plainArgsSymbol","Symbol","for","O","BaseEffectError","core.YieldableError","constructor","args","super","message","cause","undefined","Object","assign","this","defineProperty","value","enumerable","toJSON","TaggedError","tag","_tag","prototype","name","getLocationBase","url","window","location","origin","URLCreationError","Data.TaggedError","relativeAssetsPath","syncCreateAssetUrlSafely","file","pathFromAssetRoot","relativeAssetPath","joinPath","Effect.try","getAssetPath","pipe","Effect.tapError","Effect.logWarning","Effect.orElseSucceed","URL","parts","filter","Boolean","join","replace"],"sources":["../../node_modules/effect/dist/esm/Data.js","src/utils/environment.ts","src/utils/assets.ts"],"sourcesContent":["import * as core from \"./internal/core.js\";\nimport * as internal from \"./internal/data.js\";\nimport { StructuralPrototype } from \"./internal/effectable.js\";\nimport * as Predicate from \"./Predicate.js\";\n/**\n * @example\n * ```ts\n * import * as assert from \"node:assert\"\n * import { Data, Equal } from \"effect\"\n *\n * const alice = Data.struct({ name: \"Alice\", age: 30 })\n *\n * const bob = Data.struct({ name: \"Bob\", age: 40 })\n *\n * assert.deepStrictEqual(Equal.equals(alice, alice), true)\n * assert.deepStrictEqual(Equal.equals(alice, Data.struct({ name: \"Alice\", age: 30 })), true)\n *\n * assert.deepStrictEqual(Equal.equals(alice, { name: \"Alice\", age: 30 }), false)\n * assert.deepStrictEqual(Equal.equals(alice, bob), false)\n * ```\n *\n * @category constructors\n * @since 2.0.0\n */\nexport const struct = internal.struct;\n/**\n * @category constructors\n * @since 2.0.0\n */\nexport const unsafeStruct = as => Object.setPrototypeOf(as, StructuralPrototype);\n/**\n * @example\n * ```ts\n * import * as assert from \"node:assert\"\n * import { Data, Equal } from \"effect\"\n *\n * const alice = Data.tuple(\"Alice\", 30)\n *\n * const bob = Data.tuple(\"Bob\", 40)\n *\n * assert.deepStrictEqual(Equal.equals(alice, alice), true)\n * assert.deepStrictEqual(Equal.equals(alice, Data.tuple(\"Alice\", 30)), true)\n *\n * assert.deepStrictEqual(Equal.equals(alice, [\"Alice\", 30]), false)\n * assert.deepStrictEqual(Equal.equals(alice, bob), false)\n * ```\n *\n * @category constructors\n * @since 2.0.0\n */\nexport const tuple = (...as) => unsafeArray(as);\n/**\n * @example\n * ```ts\n * import * as assert from \"node:assert\"\n * import { Data, Equal } from \"effect\"\n *\n * const alice = Data.struct({ name: \"Alice\", age: 30 })\n * const bob = Data.struct({ name: \"Bob\", age: 40 })\n *\n * const persons = Data.array([alice, bob])\n *\n * assert.deepStrictEqual(\n * Equal.equals(\n * persons,\n * Data.array([\n * Data.struct({ name: \"Alice\", age: 30 }),\n * Data.struct({ name: \"Bob\", age: 40 })\n * ])\n * ),\n * true\n * )\n * ```\n *\n * @category constructors\n * @since 2.0.0\n */\nexport const array = as => unsafeArray(as.slice(0));\n/**\n * @category constructors\n * @since 2.0.0\n */\nexport const unsafeArray = as => Object.setPrototypeOf(as, internal.ArrayProto);\nconst _case = () => args => args === undefined ? Object.create(StructuralPrototype) : struct(args);\nexport {\n/**\n * Provides a constructor for the specified `Case`.\n *\n * @example\n * ```ts\n * import * as assert from \"node:assert\"\n * import { Data, Equal } from \"effect\"\n *\n * interface Person {\n * readonly name: string\n * }\n *\n * // Creating a constructor for the specified Case\n * const Person = Data.case<Person>()\n *\n * // Creating instances of Person\n * const mike1 = Person({ name: \"Mike\" })\n * const mike2 = Person({ name: \"Mike\" })\n * const john = Person({ name: \"John\" })\n *\n * // Checking equality\n * assert.deepStrictEqual(Equal.equals(mike1, mike2), true)\n * assert.deepStrictEqual(Equal.equals(mike1, john), false)\n *\n * ```\n * @since 2.0.0\n * @category constructors\n */\n_case as case };\n/**\n * Provides a tagged constructor for the specified `Case`.\n *\n * @example\n * ```ts\n * import * as assert from \"node:assert\"\n * import { Data } from \"effect\"\n *\n * interface Person {\n * readonly _tag: \"Person\" // the tag\n * readonly name: string\n * }\n *\n * const Person = Data.tagged<Person>(\"Person\")\n *\n * const mike = Person({ name: \"Mike\" })\n *\n * assert.deepEqual(mike, { _tag: \"Person\", name: \"Mike\" })\n * ```\n *\n * @since 2.0.0\n * @category constructors\n */\nexport const tagged = tag => args => {\n const value = args === undefined ? Object.create(StructuralPrototype) : struct(args);\n value._tag = tag;\n return value;\n};\n/**\n * Provides a constructor for a Case Class.\n *\n * @example\n * ```ts\n * import * as assert from \"node:assert\"\n * import { Data, Equal } from \"effect\"\n *\n * class Person extends Data.Class<{ readonly name: string }> {}\n *\n * // Creating instances of Person\n * const mike1 = new Person({ name: \"Mike\" })\n * const mike2 = new Person({ name: \"Mike\" })\n * const john = new Person({ name: \"John\" })\n *\n * // Checking equality\n * assert.deepStrictEqual(Equal.equals(mike1, mike2), true)\n * assert.deepStrictEqual(Equal.equals(mike1, john), false)\n * ```\n *\n * @since 2.0.0\n * @category constructors\n */\nexport const Class = internal.Structural;\n/**\n * Provides a Tagged constructor for a Case Class.\n *\n * @example\n * ```ts\n * import * as assert from \"node:assert\"\n * import { Data, Equal } from \"effect\"\n *\n * class Person extends Data.TaggedClass(\"Person\")<{ readonly name: string }> {}\n *\n * // Creating instances of Person\n * const mike1 = new Person({ name: \"Mike\" })\n * const mike2 = new Person({ name: \"Mike\" })\n * const john = new Person({ name: \"John\" })\n *\n * // Checking equality\n * assert.deepStrictEqual(Equal.equals(mike1, mike2), true)\n * assert.deepStrictEqual(Equal.equals(mike1, john), false)\n *\n * assert.deepStrictEqual(mike1._tag, \"Person\")\n * ```\n *\n * @since 2.0.0\n * @category constructors\n */\nexport const TaggedClass = tag => {\n class Base extends Class {\n _tag = tag;\n }\n return Base;\n};\n/**\n * @since 2.0.0\n * @category constructors\n */\nexport const Structural = internal.Structural;\n/**\n * Create a constructor for a tagged union of `Data` structs.\n *\n * You can also pass a `TaggedEnum.WithGenerics` if you want to add generics to\n * the constructor.\n *\n * @example\n * ```ts\n * import { Data } from \"effect\"\n *\n * const { BadRequest, NotFound } = Data.taggedEnum<\n * | { readonly _tag: \"BadRequest\"; readonly status: 400; readonly message: string }\n * | { readonly _tag: \"NotFound\"; readonly status: 404; readonly message: string }\n * >()\n *\n * const notFound = NotFound({ status: 404, message: \"Not Found\" })\n * ```\n *\n * @example\n * import { Data } from \"effect\"\n *\n * type MyResult<E, A> = Data.TaggedEnum<{\n * Failure: { readonly error: E }\n * Success: { readonly value: A }\n * }>\n * interface MyResultDefinition extends Data.TaggedEnum.WithGenerics<2> {\n * readonly taggedEnum: MyResult<this[\"A\"], this[\"B\"]>\n * }\n * const { Failure, Success } = Data.taggedEnum<MyResultDefinition>()\n *\n * const success = Success({ value: 1 })\n *\n * @category constructors\n * @since 2.0.0\n */\nexport const taggedEnum = () => new Proxy({}, {\n get(_target, tag, _receiver) {\n if (tag === \"$is\") {\n return Predicate.isTagged;\n } else if (tag === \"$match\") {\n return taggedMatch;\n }\n return tagged(tag);\n }\n});\nfunction taggedMatch() {\n if (arguments.length === 1) {\n const cases = arguments[0];\n return function (value) {\n return cases[value._tag](value);\n };\n }\n const value = arguments[0];\n const cases = arguments[1];\n return cases[value._tag](value);\n}\n/**\n * Provides a constructor for a Case Class.\n *\n * @since 2.0.0\n * @category constructors\n */\nexport const Error = /*#__PURE__*/function () {\n const plainArgsSymbol = /*#__PURE__*/Symbol.for(\"effect/Data/Error/plainArgs\");\n const O = {\n BaseEffectError: class extends core.YieldableError {\n constructor(args) {\n super(args?.message, args?.cause ? {\n cause: args.cause\n } : undefined);\n if (args) {\n Object.assign(this, args);\n // @effect-diagnostics-next-line floatingEffect:off\n Object.defineProperty(this, plainArgsSymbol, {\n value: args,\n enumerable: false\n });\n }\n }\n toJSON() {\n return {\n ...this[plainArgsSymbol],\n ...this\n };\n }\n }\n };\n return O.BaseEffectError;\n}();\n/**\n * @since 2.0.0\n * @category constructors\n */\nexport const TaggedError = tag => {\n const O = {\n BaseEffectError: class extends Error {\n _tag = tag;\n }\n };\n O.BaseEffectError.prototype.name = tag;\n return O.BaseEffectError;\n};\n//# sourceMappingURL=Data.js.map","export function getLocationBase() {\n return import.meta?.url ?? window?.location?.origin ?? '';\n}\n","import { getAssetPath } from '@stencil/core';\nimport { Data, Effect } from 'effect';\nimport { getLocationBase } from './environment';\n\nexport class URLCreationError extends Data.TaggedError('URLCreationError')<Error> {}\n\nconst relativeAssetsPath = '../../assets';\n\n/**\n * Attempts to create an asset URL using Stencil's `getAssetPath` utility, and falls back to a default URL if that fails (e.g. because the app using the library hasn't configured the asset path correctly).\n * This is a workaround for Stencil's behavior of throwing an error when `getAssetPath` is called without a valid asset path configuration, which can happen in certain environments like Storybook.\n *\n * @param file - The filename of the asset to create a URL for, relative to the configured asset path.\n * @param pathFromAssetRoot - The path from the asset root to the asset directory (e.g. 'icons' for assets located at <pkg-root>/assets/icons/).\n * @returns An Effect that yields a string URL for the asset, or a fallback URL if the creation fails.\n */\nexport const syncCreateAssetUrlSafely = (file: string, pathFromAssetRoot?: string | undefined) => {\n // * dist output target expects assets to be located at <pkg-root>/assets/...\n // * this base path is used in components' assetDirs declaration, but with the relative ../../assets/\n const relativeAssetPath = joinPath(relativeAssetsPath, pathFromAssetRoot, file);\n return Effect.try(() => getAssetPath(relativeAssetPath)).pipe(\n Effect.tapError(() =>\n Effect.logWarning(`Failed to create URL for asset \"${file}\" in path \"${pathFromAssetRoot}\".\n Please provide an absolute URL in your app's 'setAssetPath(...)' configuration! Falling back to a relative URL, which may work in some environments but is not guaranteed to be correct.`),\n ),\n Effect.orElseSucceed(() => new URL(relativeAssetPath, getLocationBase())),\n );\n};\n\nfunction joinPath(...parts: (string | undefined)[]) {\n return parts.filter(Boolean).join('/').replace('//', '/').replace('/./', '/');\n}\n"],"mappings":"uGAwQO,MAAMA,EAAqB,WAChC,MAAMC,EAA+BC,OAAOC,IAAI,+BAChD,MAAMC,EAAI,CACRC,gBAAiB,cAAcC,EAC7B,WAAAC,CAAYC,GACVC,MAAMD,GAAME,QAASF,GAAMG,MAAQ,CACjCA,MAAOH,EAAKG,OACVC,WACJ,GAAIJ,EAAM,CACRK,OAAOC,OAAOC,KAAMP,GAEpBK,OAAOG,eAAeD,KAAMd,EAAiB,CAC3CgB,MAAOT,EACPU,WAAY,OAExB,CACA,CACM,MAAAC,GACE,MAAO,IACFJ,KAAKd,MACLc,KAEb,IAGE,OAAOX,EAAEC,eACX,CA1BkC,GA+BtB,MAACe,EAAcC,IACzB,MAAMjB,EAAI,CACRC,gBAAiB,cAAcL,EAC7BsB,KAAOD,IAGXjB,EAAEC,gBAAgBkB,UAAUC,KAAOH,EACnC,OAAOjB,EAAEC,eAAe,E,SC9SVoB,IACd,oBAAoBC,KAAOC,QAAQC,UAAUC,QAAU,EACzD,CCEM,MAAOC,UAAyBC,EAAiB,sBAEvD,MAAMC,EAAqB,e,MAUdC,EAA2B,CAACC,EAAcC,KAGrD,MAAMC,EAAoBC,EAASL,EAAoBG,EAAmBD,GAC1E,OAAOI,GAAW,IAAMC,EAAaH,KAAoBI,KACvDC,GAAgB,IACdC,EAAkB,mCAAmCR,eAAkBC,8MAGzEQ,GAAqB,IAAM,IAAIC,IAAIR,EAAmBX,OACvD,EAGH,SAASY,KAAYQ,GACnB,OAAOA,EAAMC,OAAOC,SAASC,KAAK,KAAKC,QAAQ,KAAM,KAAKA,QAAQ,MAAO,IAC3E,Q","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{p as t,d as o,h as e,c as r,t as n}from"./p-DBeynNeU.js";import{c as a}from"./p-DMLRPGid.js";import{i as l,f as m}from"./p-B3JVFwO1.js";import{E as i}from"./p-CN0JX9-m.js";import{R as s,A as d}from"./p-D7xthqTT.js";const c=()=>` @layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides; @layer lmvz-ds.theme { @font-face { font-family: Router; src: local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'), local('Router'); font-weight: 400 normal; } @font-face { font-family: Router; src: local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'), local('Router'); font-weight: 500; } @font-face { font-family: Router; src: local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'), local('Router'); font-weight: 700 bold; } } @layer lmvz-ds.reset { h1, h2, h3, h4, h5, h6 { margin: 0; } } :host { button { --lmvz-button-color: var(--lmvz-component-color, var(--lmvz-semantic-color-int-on-primary, #ffffff)); --lmvz-button-padding-inline: var(--lmvz-button-padding, var(--lmvz-component-input-md-padding-x, clamp(0.75rem, 0.69rem + 0.26vw, 1rem))); --lmvz-button-padding-block: var(--lmvz-button-padding, var(--lmvz-component-input-md-padding-y, clamp(0.75rem, 0.69rem + 0.26vw, 1rem))); --lmvz-button-gap: var(--lmvz-component-input-md-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); --lmvz-button-font: var(--lmvz-typography-body-lg, 400 clamp(1rem, 0.97rem + 0.13vw, 1.13rem) / 1.4 Router); --lmvz-button-radius: var(--lmvz-component-input-radius-default, 999px); --lmvz-button-border-width: 0; --lmvz-button-border-color: transparent; --lmvz-button-background: var(--lmvz-semantic-color-int-primary, #000000); display: inline-flex; align-items: center; justify-content: center; gap: var(--lmvz-button-gap); padding-block: var(--lmvz-button-padding-block); padding-inline: var(--lmvz-button-padding-inline); border-radius: var(--lmvz-button-radius); border: var(--lmvz-button-border-width) solid var(--lmvz-button-border-color); background-color: var(--lmvz-button-background); color: var(--lmvz-button-color); cursor: pointer; font: var(--lmvz-button-font); text-align: center; text-decoration: none; white-space: nowrap; transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease; } button > * { font: inherit; color: inherit; } button:focus-visible { outline: var(--lmvz-semantic-border-width-default, 1px) solid var(--lmvz-semantic-color-status-selected, #f1f9fe); outline-offset: var(--lmvz-component-input-sm-padding-x, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); } button:is([disabled], .disabled) { cursor: not-allowed; pointer-events: none; opacity: var(--lmvz-component-input-disabled-opacity, 40%); } button:not([disabled]):hover { --lmvz-button-background: var(--lmvz-semantic-color-int-primary-hover, #2e2e2e); } button:not([disabled]):active { --lmvz-button-background: var(--lmvz-semantic-color-int-primary-active, #545454); } button.secondary { --lmvz-button-background: var(--lmvz-semantic-color-int-secondary, #f0f0f0); --lmvz-button-color: var(--lmvz-semantic-color-int-on-secondary, #000000); --lmvz-button-border-width: var(--lmvz-semantic-border-width-default, 1px); --lmvz-button-border-color: var(--lmvz-semantic-color-border-default, #e0e0e0); } button.secondary:not([disabled], .disabled):hover { --lmvz-button-background: var(--lmvz-semantic-color-int-secondary-hover, #e0e0e0); --lmvz-button-border-color: var(--lmvz-semantic-color-border-hover, #c7c7c7); } button.secondary:not([disabled], .disabled):active { --lmvz-button-background: var(--lmvz-semantic-color-int-secondary-active, #d4d4d4); --lmvz-button-border-color: var(--lmvz-semantic-color-border-active, #d4d4d4); } button.tertiary { --lmvz-button-background: var(--lmvz-semantic-color-int-tertiary, #ffffff); --lmvz-button-color: var(--lmvz-semantic-color-int-on-tertiary, #545454); } button.tertiary:not([disabled], .disabled):hover { --lmvz-button-background: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0); } button.tertiary:not([disabled], .disabled):active { --lmvz-button-background: var(--lmvz-semantic-color-int-tertiary-active, #e0e0e0); } button.small { --lmvz-button-padding-inline: var(--lmvz-component-input-sm-padding-x, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); --lmvz-button-padding-block: var(--lmvz-component-input-sm-padding-y, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); --lmvz-button-gap: var(--lmvz-component-input-sm-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); --lmvz-button-font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4 Router); } button.large { --lmvz-button-padding-inline: var(--lmvz-component-input-lg-padding-x, clamp(0.88rem, 0.78rem + 0.39vw, 1.25rem)); --lmvz-button-padding-block: var(--lmvz-component-input-lg-padding-y, clamp(0.88rem, 0.78rem + 0.39vw, 1.25rem)); --lmvz-button-gap: var(--lmvz-component-input-lg-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); --lmvz-button-font: var(--lmvz-typography-body-lg, 400 clamp(1rem, 0.97rem + 0.13vw, 1.13rem) / 1.4 Router); } display: contents; } ::slotted(*) { --lmvz-component-color: var(--lmvz-button-color); } `;const v=t(class t extends s{get el(){return this}inheritedAttributes={};formEl=null;formButtonEl=null;lmvzActivation;get ti(){return 0}scale="default";variant="secondary";disabled=false;type="button";form;constructor(t){super(false);if(t!==false){this.__registerHost()}this.__attachShadow();this.lmvzActivation=o(this,"lmvzActivation");this.addController(new d(this));this.addController(new i(this,{localHandler:this.handleClick.bind(this),keys:["Enter"]}))}connectedCallback(){this.inheritedAttributes=l(this.el)}renderHiddenButton(){const t=this.formEl=m(this.form,this.el);if(!t)return;const{formButtonEl:o}=this;if(o!==null&&t.contains(o))return;const e=this.formButtonEl=document.createElement("button");e.type="submit";e.style.display="none";e.disabled=this.disabled;t.appendChild(e)}submitForm(t){if(this.formEl&&this.formButtonEl){t.preventDefault();this.formButtonEl.click()}}handleClick=t=>{if(this.type==="submit"){this.submitForm(t)}};render(){this.renderHiddenButton();return e(r,{key:"1c96281344dd604e2e4c919ea72907a9e934e5c6","aria-disabled":this.disabled?"true":null},e("button",{key:"16728ce6fee7d121e7120aa993031777f6d8570e",disabled:this.disabled,class:a(this.variant,{[this.scale??""]:!!this.scale,disabled:this.disabled}),...this.inheritedAttributes},e("slot",{key:"e1b0d95953bdbd42885eecdeef8b457070e7e247"})))}static get delegatesFocus(){return true}static get style(){return c()}},[785,"lmvz-button",{ti:[2562,"tabindex"],scale:[513],variant:[513],disabled:[516],type:[1],form:[1]}]);function u(){if(typeof customElements==="undefined"){return}const t=["lmvz-button"];t.forEach((t=>{switch(t){case"lmvz-button":if(!customElements.get(n(t))){customElements.define(n(t),v)}break}}))}export{v as L,u as d};
2
- //# sourceMappingURL=p-Xq267cFM.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["lmvzButtonCss","LmvzButton","__stencil_proxyCustomElement","ReactiveControllerHost","inheritedAttributes","formEl","formButtonEl","lmvzActivation","ti","scale","variant","disabled","type","form","constructor","registerHost","this","addController","AriaValidationController","ElementActivationController","localHandler","handleClick","bind","keys","connectedCallback","inheritAriaAttributes","el","renderHiddenButton","findFormByRef","contains","newFormButtonEl","document","createElement","style","display","appendChild","submitForm","ev","preventDefault","click","render","h","Host","key","class","classNames"],"sources":["src/components/lmvz-button/lmvz-button.css?tag=lmvz-button&encapsulation=shadow","src/components/lmvz-button/lmvz-button.tsx"],"sourcesContent":["@import url('../../styles/internal/define-layers.css');\n\n@import url('../../styles/fragments/_routerFont.css') layer(lmvz-ds.theme);\n@import url('../../styles/fragments/_reset.css') layer(lmvz-ds.reset);\n\n:host {\n /* * the (invalid nested) import will be handled by postcss */\n /* stylelint-disable-next-line no-invalid-position-at-import-rule */\n @import url('../../styles/fragments/_buttons.css');\n\n display: contents;\n}\n\n::slotted(*) {\n --lmvz-component-color: var(--lmvz-button-color);\n}\n","import { Component, Element, Event, Host, Prop, h, type EventEmitter } from '@stencil/core';\nimport classNames from 'classnames';\nimport { Button } from '../../api';\nimport { findFormByRef, inheritAriaAttributes, type Attributes, type FormRef } from '../../utils/component';\nimport { ElementActivationController, type ElementActivationHost } from '../../utils/element-activation-controller';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/validation/aria-validation-controller';\n\n/**\n * @slot default - Slot for the content of the button\n */\n@Component({\n tag: 'lmvz-button',\n styleUrl: './lmvz-button.css',\n shadow: { delegatesFocus: true },\n})\nexport class LmvzButton extends ReactiveControllerHost implements AriaValidationHost, ElementActivationHost {\n @Element() el: HTMLLmvzButtonElement;\n\n private inheritedAttributes: Attributes = {};\n private formEl: HTMLFormElement | null = null;\n private formButtonEl: HTMLButtonElement | null = null;\n\n @Event() lmvzActivation: EventEmitter<void>;\n\n @Prop({ reflect: true, attribute: 'tabindex' }) get ti() {\n return 0;\n }\n\n /**\n * Scale of the button\n * @default 'default'\n */\n @Prop({ reflect: true }) scale: Button.Scale = 'default';\n\n /**\n * Variant of the button\n * @default 'secondary', since the primary button should be marked as such in context\n */\n @Prop({ reflect: true }) variant: Button.Variant = 'secondary';\n\n /**\n * Whether the button is disabled\n * @default false\n */\n @Prop({ reflect: true }) disabled = false;\n\n @Prop() type: 'submit' | 'button' = 'button';\n\n /**\n * The HTML form element or form element id. Used to submit a form when the button is not a child of the form.\n */\n @Prop() form?: FormRef;\n\n constructor() {\n super();\n this.addController(new AriaValidationController(this));\n this.addController(\n new ElementActivationController(this, {\n localHandler: this.handleClick.bind(this),\n keys: ['Enter'],\n }),\n );\n }\n\n connectedCallback(): void {\n this.inheritedAttributes = inheritAriaAttributes(this.el);\n }\n\n /**\n * This renders a hidden native button element inside the associated form.\n * This allows users to submit a form by pressing \"Enter\" when a text\n * field inside of the form is focused, even though our native button is in the Shadow DOM.\n */\n private renderHiddenButton() {\n const formEl = (this.formEl = findFormByRef(this.form, this.el));\n if (!formEl) return;\n\n const { formButtonEl } = this;\n\n // append only once\n if (formButtonEl !== null && formEl.contains(formButtonEl)) return;\n\n const newFormButtonEl = (this.formButtonEl = document.createElement('button'));\n newFormButtonEl.type = 'submit';\n newFormButtonEl.style.display = 'none';\n newFormButtonEl.disabled = this.disabled;\n\n formEl.appendChild(newFormButtonEl);\n }\n\n private submitForm(ev: Event) {\n if (this.formEl && this.formButtonEl) {\n ev.preventDefault();\n this.formButtonEl.click();\n }\n }\n\n private handleClick = (ev: Event) => {\n if (this.type === 'submit') {\n this.submitForm(ev);\n }\n };\n\n render() {\n this.renderHiddenButton();\n\n return (\n <Host aria-disabled={this.disabled ? 'true' : null}>\n <button disabled={this.disabled} class={classNames(this.variant, { [this.scale ?? '']: !!this.scale, disabled: this.disabled })} {...this.inheritedAttributes}>\n <slot></slot>\n </button>\n </Host>\n );\n }\n}\n"],"mappings":"8NAAA,MAAMA,EAAgB,IAAM,gnK,MCgBfC,EAAWC,EAAA,MAAAD,UAAQE,E,qBAGtBC,oBAAkC,GAClCC,OAAiC,KACjCC,aAAyC,KAExCC,eAET,MAAoDC,GAClD,OAAO,C,CAOgBC,MAAsB,UAMtBC,QAA0B,YAM1BC,SAAW,MAE5BC,KAA4B,SAK5BC,KAER,WAAAC,CAAAC,G,oHAEEC,KAAKC,cAAc,IAAIC,EAAyBF,OAChDA,KAAKC,cACH,IAAIE,EAA4BH,KAAM,CACpCI,aAAcJ,KAAKK,YAAYC,KAAKN,MACpCO,KAAM,CAAC,WAGZ,CAED,iBAAAC,GACER,KAAKZ,oBAAsBqB,EAAsBT,KAAKU,G,CAQhD,kBAAAC,GACN,MAAMtB,EAAUW,KAAKX,OAASuB,EAAcZ,KAAKH,KAAMG,KAAKU,IAC5D,IAAKrB,EAAQ,OAEb,MAAMC,aAAEA,GAAiBU,KAGzB,GAAIV,IAAiB,MAAQD,EAAOwB,SAASvB,GAAe,OAE5D,MAAMwB,EAAmBd,KAAKV,aAAeyB,SAASC,cAAc,UACpEF,EAAgBlB,KAAO,SACvBkB,EAAgBG,MAAMC,QAAU,OAChCJ,EAAgBnB,SAAWK,KAAKL,SAEhCN,EAAO8B,YAAYL,E,CAGb,UAAAM,CAAWC,GACjB,GAAIrB,KAAKX,QAAUW,KAAKV,aAAc,CACpC+B,EAAGC,iBACHtB,KAAKV,aAAaiC,O,EAIdlB,YAAegB,IACrB,GAAIrB,KAAKJ,OAAS,SAAU,CAC1BI,KAAKoB,WAAWC,E,GAIpB,MAAAG,GACExB,KAAKW,qBAEL,OACEc,EAACC,EAAI,CAAAC,IAAA,2DAAgB3B,KAAKL,SAAW,OAAS,MAC5C8B,EAAA,UAAAE,IAAA,2CAAQhC,SAAUK,KAAKL,SAAUiC,MAAOC,EAAW7B,KAAKN,QAAS,CAAE,CAACM,KAAKP,OAAS,MAAOO,KAAKP,MAAOE,SAAUK,KAAKL,cAAiBK,KAAKZ,qBACxIqC,EAAA,QAAAE,IAAA,8C","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{p as e,h as a,c as t,t as r}from"./p-DBeynNeU.js";import{g as n,c as s}from"./p-B3JVFwO1.js";import{R as i,A as l}from"./p-D7xthqTT.js";import{d as o}from"./p-Cd4nH2vx.js";class c{host;elements=[];constructor(e){this.host=e}hostDidRender(){this.host.el.addEventListener("keydown",this.handleKeydown)}updateElements(e){this.elements=e}handleKeydown=e=>{const{key:a}=e;if(!["ArrowDown","ArrowRight","ArrowUp","ArrowLeft"].includes(a))return;const t=n(document);const r=this.getNextFocusableElement(t,["ArrowDown","ArrowRight"].includes(a)?"down":"up");if(r){e.preventDefault();r.focus?.()}};getNextFocusableElement(e,a){const{elements:t}=this;const r=t.indexOf(e);if(r===-1)return null;let n=null;if(a==="down"){n=(r+1)%t.length}else if(a==="up"){n=(r-1+t.length)%t.length}if(n==null)return null;const i=t[n];if(!s(i))return this.getNextFocusableElement(i,a);return i}}const d=()=>`:host{display:flex;width:100vw;flex-direction:row;align-items:center;box-sizing:border-box;background-color:var(--lmvz-semantic-color-surface-primary, #ffffff);--lmvz-header-x-spacing-level-1:var(--lmvz-dimension-8-28, clamp(0.5rem, 0.2rem + 1.29vw, 1.75rem));--lmvz-header-x-spacing-level-2:var(--lmvz-component-buttongroup-wrapper-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem));padding:var(--lmvz-dimension-8-16, clamp(0.5rem, 0.38rem + 0.52vw, 1rem)) var(--lmvz-header-x-spacing-level-1);gap:var(--lmvz-header-x-spacing-level-1);.brand{display:inline-flex;justify-content:center;align-items:center}#fallback-logo-lmvz{height:34px;width:auto}nav{flex-grow:1}.primary-menubar{display:flex;flex-direction:row;align-items:center}.secondary-menubar{display:flex;flex-direction:row;align-items:center;margin-left:var(--lmvz-header-x-spacing-level-2);padding-left:var(--lmvz-header-x-spacing-level-2);border-left:1px solid var(--lmvz-semantic-color-border-default, #e0e0e0)}}`;const m=e(class e extends i{get el(){return this}primarySlot;secondarySlot;secondaryNav;keyboardNavigationController=new c(this);get primaryMenuitems(){return this.primarySlot.assignedElements({flatten:false})}get secondaryMenuitems(){return this.secondarySlot.assignedElements({flatten:true})}get role(){return"banner"}lmvzActiveNav;get secondarySlotName(){return`connect-nav-${this.lmvzActiveNav}`}constructor(e){super(false);if(e!==false){this.__registerHost()}this.__attachShadow();this.addController(new l(this,{reValidateOnPropChanges:true}));this.addController(this.keyboardNavigationController)}handleActiveNavChange(){this.updateElementsActive()}componentDidLoad(){this.primarySlot.addEventListener("slotchange",this.handlePrimaryNavChange.bind(this));this.handlePrimaryNavChange();this.secondarySlot.addEventListener("slotchange",this.handleSecondaryNavChange.bind(this))}handlePrimaryNavChange(){const e=this.primaryMenuitems;if(!e.length){console.warn("Primary slot has no assigned elements. Please add navigation items to the primary slot.");return}e.forEach((e=>{e.setAttribute("aria-haspopup","true");e.setAttribute("aria-controls",`nav-secondary`)}));this.updateElementsActive()}handleSecondaryNavChange(){const e=this.secondaryMenuitems;if(!e.length){return}this.keyboardNavigationController.updateElements([...this.primaryMenuitems,...this.secondaryMenuitems])}updateElementsActive(){const e=this.primaryMenuitems;let a;e.forEach((e=>{const t=e.id===this.lmvzActiveNav;if(t)a=e.textContent||e.id;e.setAttribute("aria-expanded",t?"true":"false")}));this.secondaryNav.setAttribute("aria-label",`Untermenü für ${a}`)}delegateFocus(){const e=this.primaryMenuitems[0];if(e){e.focus()}}render(){return a(t,{key:"58934683ff442801eb34f025ac809631f93a27e8",onFocus:this.delegateFocus.bind(this)},a("div",{key:"35d3eadfabb70f83b313f946c8d31f9c223e8344",class:"brand"},a("slot",{key:"5ce98314d980d63e1c87f508d96119aca2e702a9",name:"brand"},a("lmvz-icon",{key:"b24e61a9071d81948d506a8c545e012d3f0e5dd2",id:"fallback-logo-lmvz",icon:"Logo",size:"inherit","aria-label":"Lehrmittelverlag Zürich"}))),a("nav",{key:"1d5cc9010ef90e6cebc8a7b054db595f35f9e040","aria-label":"Hauptnavigation"},a("div",{key:"488a1b1544242562b57d76169f1988d84c611de4",role:"menubar",class:"primary-menubar"},a("slot",{key:"59c6dd1442290931ed9a55f7bacc65ea4bb9ff6d",name:"nav-primary",ref:e=>this.primarySlot=e}),a("separator",{key:"2729f0e8b115614c50c4a16b6684a3bdb21856b8"}),a("div",{key:"6b5bed5951bad9173fefdc78039e71c4ccc120b2",role:"menu",id:"nav-secondary",class:"secondary-menubar",hidden:!this.lmvzActiveNav,ref:e=>this.secondaryNav=e},a("slot",{key:"02f5a13e8851372c1698e3f786a8757a0a09c32f",name:this.secondarySlotName,ref:e=>this.secondarySlot=e})))),a("div",{key:"53aafe8139bcea27d3039f64a48974cdb5aac5f9",class:"actions"},a("slot",{key:"f12ee19831073253e6ba8e251ba31ec403c21035",name:"actions"})))}static get watchers(){return{lmvzActiveNav:[{handleActiveNavChange:0}]}}static get style(){return d()}},[769,"lmvz-header",{role:[2561],lmvzActiveNav:[1,"lmvz-active-nav"]},undefined,{lmvzActiveNav:[{handleActiveNavChange:0}]}]);function h(){if(typeof customElements==="undefined"){return}const e=["lmvz-header","lmvz-icon"];e.forEach((e=>{switch(e){case"lmvz-header":if(!customElements.get(r(e))){customElements.define(r(e),m)}break;case"lmvz-icon":if(!customElements.get(r(e))){o()}break}}))}export{m as L,h as d};
2
- //# sourceMappingURL=p-glDDybgu.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["ListKeyboardNavigationController","host","elements","constructor","this","hostDidRender","el","addEventListener","handleKeydown","updateElements","event","key","includes","activeElement","getDeepActiveElement","document","nextElement","getNextFocusableElement","preventDefault","focus","current","direction","currentIndex","indexOf","nextIndex","length","candidate","canReceiveFocus","lmvzHeaderCss","LmvzHeader","__stencil_proxyCustomElement","ReactiveControllerHost","primarySlot","secondarySlot","secondaryNav","keyboardNavigationController","primaryMenuitems","assignedElements","flatten","secondaryMenuitems","role","lmvzActiveNav","secondarySlotName","registerHost","addController","AriaValidationController","reValidateOnPropChanges","handleActiveNavChange","updateElementsActive","componentDidLoad","handlePrimaryNavChange","bind","handleSecondaryNavChange","items","console","warn","forEach","setAttribute","label","isActive","id","textContent","delegateFocus","firstFocusable","render","h","Host","onFocus","class","name","icon","size","ref","hidden"],"sources":["src/utils/list-keyboard-controller.ts","src/components/lmvz-header/lmvz-header.css?tag=lmvz-header&encapsulation=shadow","src/components/lmvz-header/lmvz-header.tsx"],"sourcesContent":["import { canReceiveFocus, getDeepActiveElement } from './component';\nimport type { ReactiveController } from './reactive-controller-host';\n\nexport type ListKeyboardNavigationHost = {\n el: HTMLElement;\n};\n\n// type Config = {};\n\nexport class ListKeyboardNavigationController implements ReactiveController {\n private elements: Element[] = [];\n\n constructor(\n private readonly host: ListKeyboardNavigationHost,\n // private readonly config?: Config,\n ) {}\n\n hostDidRender() {\n this.host.el.addEventListener('keydown', this.handleKeydown);\n }\n\n updateElements(elements: Element[]) {\n this.elements = elements;\n }\n\n private handleKeydown = (event: KeyboardEvent) => {\n const { key } = event;\n if (!['ArrowDown', 'ArrowRight', 'ArrowUp', 'ArrowLeft'].includes(key)) return;\n\n const activeElement = getDeepActiveElement(document);\n const nextElement = this.getNextFocusableElement(activeElement, ['ArrowDown', 'ArrowRight'].includes(key) ? 'down' : 'up');\n if (nextElement) {\n event.preventDefault();\n (nextElement as HTMLElement).focus?.();\n }\n };\n\n private getNextFocusableElement(current: Element, direction: 'down' | 'up'): Element | null {\n const { elements } = this;\n const currentIndex = elements.indexOf(current);\n if (currentIndex === -1) return null;\n\n let nextIndex: number | null = null;\n if (direction === 'down') {\n nextIndex = (currentIndex + 1) % elements.length;\n } else if (direction === 'up') {\n nextIndex = (currentIndex - 1 + elements.length) % elements.length;\n }\n\n if (nextIndex == null) return null;\n\n const candidate = elements[nextIndex];\n if (!canReceiveFocus(candidate)) return this.getNextFocusableElement(candidate, direction);\n\n return candidate;\n }\n}\n","/* @import url('../../styles/internal/define-layers.css'); */\n\n:host {\n display: flex;\n /* TODO: why does it overflow on smaller screens? */\n width: 100vw;\n flex-direction: row;\n align-items: center;\n box-sizing: border-box;\n\n background-color: var(--lmvz-semantic-color-surface-primary);\n\n --lmvz-header-x-spacing-level-1: var(--lmvz-dimension-8-28);\n --lmvz-header-x-spacing-level-2: var(--lmvz-component-buttongroup-wrapper-gap-x);\n\n padding: var(--lmvz-dimension-8-16) var(--lmvz-header-x-spacing-level-1);\n gap: var(--lmvz-header-x-spacing-level-1);\n\n .brand {\n /* min-width: var(--lmvz-dimension-48-96); */\n display: inline-flex;\n justify-content: center;\n align-items: center;\n }\n\n #fallback-logo-lmvz {\n height: 34px;\n width: auto;\n }\n\n nav {\n flex-grow: 1;\n }\n\n .primary-menubar {\n display: flex;\n flex-direction: row;\n align-items: center;\n }\n .secondary-menubar {\n display: flex;\n flex-direction: row;\n align-items: center;\n /* gap: var(--lmvz-component-buttongroup-wrapper-gap-x); */\n margin-left: var(--lmvz-header-x-spacing-level-2);\n padding-left: var(--lmvz-header-x-spacing-level-2);\n border-left: 1px solid var(--lmvz-semantic-color-border-default);\n }\n}\n","import { Component, Element, h, Host, Prop, Watch } from '@stencil/core';\nimport { ListKeyboardNavigationController, type ListKeyboardNavigationHost } from '../../utils/list-keyboard-controller';\nimport { ReactiveControllerHost } from '../../utils/reactive-controller-host';\nimport { AriaValidationController, type AriaValidationHost } from '../../utils/validation/aria-validation-controller';\n\n/**\n * An accessible, application-style navigation header component, that renders two connected levels of navigation.\n *\n * @slot brand - The branding area, typically containing a logo and/or site title.\n *\n * @slot nav-primary - The first level of the navigation.\n * This is required and must only contain <lmvz-menuitem> elements.\n * Each menuitem should have an id, which will be used to link it to the corresponding secondary nav items.\n *\n * @slot connect-nav-`lmvzActiveNav` - The second level of the navigation. This is optional and must also contain <lmvz-menuitem> elements.\n * Only if the secondary nav items' `slot=\"${name}\"` matches \"connect-nav-`lmvzActiveNav`\"\n * (including lmvzActiveNav from the component's props),\n * then these secondary items will be displayed in the second level navigation.\n *\n * @slot actions - An optional slot for actions, such as user profile, settings, logout, etc. This content is aligned to the right side of the header.\n */\n@Component({\n tag: 'lmvz-header',\n styleUrl: './lmvz-header.css',\n shadow: true,\n})\nexport class LmvzHeader extends ReactiveControllerHost implements AriaValidationHost, ListKeyboardNavigationHost {\n @Element() readonly el!: HTMLElement;\n\n private primarySlot!: HTMLSlotElement;\n private secondarySlot!: HTMLSlotElement;\n private secondaryNav!: HTMLElement;\n\n private keyboardNavigationController = new ListKeyboardNavigationController(this);\n\n private get primaryMenuitems() {\n return this.primarySlot.assignedElements({ flatten: false });\n }\n\n private get secondaryMenuitems() {\n return this.secondarySlot.assignedElements({ flatten: true });\n }\n\n @Prop({ reflect: true }) get role() {\n return 'banner';\n }\n\n @Prop() lmvzActiveNav?: string;\n\n get secondarySlotName() {\n return `connect-nav-${this.lmvzActiveNav}`;\n }\n\n constructor() {\n super();\n this.addController(new AriaValidationController(this, { reValidateOnPropChanges: true }));\n this.addController(this.keyboardNavigationController);\n }\n\n @Watch('lmvzActiveNav')\n handleActiveNavChange() {\n this.updateElementsActive();\n }\n\n componentDidLoad() {\n this.primarySlot.addEventListener('slotchange', this.handlePrimaryNavChange.bind(this));\n this.handlePrimaryNavChange(); // initial check for already assigned elements\n this.secondarySlot.addEventListener('slotchange', this.handleSecondaryNavChange.bind(this));\n }\n\n private handlePrimaryNavChange() {\n const items = this.primaryMenuitems;\n if (!items.length) {\n console.warn('Primary slot has no assigned elements. Please add navigation items to the primary slot.');\n return;\n }\n\n items.forEach(el => {\n el.setAttribute('aria-haspopup', 'true');\n el.setAttribute('aria-controls', `nav-secondary`);\n });\n this.updateElementsActive();\n }\n\n private handleSecondaryNavChange() {\n const items = this.secondaryMenuitems;\n if (!items.length) {\n // It's valid to have no secondary items for a given primary item, so we just return early without warning\n return;\n }\n this.keyboardNavigationController.updateElements([...this.primaryMenuitems, ...this.secondaryMenuitems]);\n }\n\n private updateElementsActive() {\n const items = this.primaryMenuitems;\n let label: string;\n items.forEach(el => {\n const isActive = el.id === this.lmvzActiveNav;\n if (isActive) label = el.textContent || el.id;\n el.setAttribute('aria-expanded', isActive ? 'true' : 'false');\n });\n\n this.secondaryNav.setAttribute('aria-label', `Untermenü für ${label}`);\n }\n\n private delegateFocus() {\n // If the header itself receives focus, delegate it to the first focusable element in the primary nav\n const firstFocusable = this.primaryMenuitems[0] as HTMLElement | undefined;\n if (firstFocusable) {\n firstFocusable.focus();\n }\n }\n\n render() {\n return (\n <Host onFocus={this.delegateFocus.bind(this)}>\n <div class=\"brand\">\n <slot name=\"brand\">\n <lmvz-icon id=\"fallback-logo-lmvz\" icon=\"Logo\" size=\"inherit\" aria-label=\"Lehrmittelverlag Zürich\"></lmvz-icon>\n </slot>\n {/* brand image, title, etc. */}\n </div>\n\n <nav aria-label=\"Hauptnavigation\">\n <div role=\"menubar\" class=\"primary-menubar\">\n <slot name=\"nav-primary\" ref={el => (this.primarySlot = el)}></slot>\n\n <separator></separator>\n\n <div role=\"menu\" id=\"nav-secondary\" class=\"secondary-menubar\" hidden={!this.lmvzActiveNav} ref={el => (this.secondaryNav = el)}>\n <slot name={this.secondarySlotName} ref={el => (this.secondarySlot = el)}></slot>\n </div>\n </div>\n </nav>\n\n <div class=\"actions\">\n <slot name=\"actions\"></slot>\n {/* user avatar, name, settings, etc. */}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-globals-DQuL1Twl.js","sources":["@stencil/core/internal/app-globals"],"sourcesContent":["export const globalScripts = () => {};\nexport const globalStyles = \"\";\n"],"names":[],"mappings":"AAAY,MAAC,aAAa,GAAG,MAAM;;;;"}