{ "version": 3, "sources": ["../../@lit/context/src/lib/context-request-event.ts", "../../@lit/context/src/lib/create-context.ts", "../../@lit/context/src/lib/controllers/context-consumer.ts", "../../@lit/context/src/lib/value-notifier.ts", "../../@lit/context/src/lib/controllers/context-provider.ts", "../../@lit/context/src/lib/context-root.ts", "../../@lit/context/src/lib/decorators/provide.ts", "../../@lit/context/src/lib/decorators/consume.ts", "../../@patternfly/pfe-core/decorators/bound.ts", "../../@patternfly/pfe-core/controllers/at-focus-controller.ts", "../../@patternfly/pfe-core/controllers/roving-tabindex-controller.ts", "../../@patternfly/pfe-core/controllers/tabs-aria-controller.ts", "../../@patternfly/pfe-core/functions/isElementInView.ts", "../../@patternfly/pfe-core/controllers/overflow-controller.ts", "../../@patternfly/pfe-core/functions/random.ts", "../../@lit/reactive-element/src/decorators/query-assigned-elements.ts", "../../@patternfly/pfe-core/functions/context.ts", "../../@rhds/elements/elements/rh-tabs/context.ts", "../../@rhds/elements/elements/rh-tabs/rh-tab.ts", "../../@rhds/elements/elements/rh-tabs/rh-tab-panel.ts", "../../@rhds/elements/elements/rh-tabs/rh-tabs.ts"], "sourcesContent": ["/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport {ContextType, Context} from './create-context.js';\n\ndeclare global {\n interface HTMLElementEventMap {\n /**\n * A 'context-request' event can be emitted by any element which desires\n * a context value to be injected by an external provider.\n */\n 'context-request': ContextRequestEvent>;\n }\n}\n\n/**\n * A callback which is provided by a context requester and is called with the value satisfying the request.\n * This callback can be called multiple times by context providers as the requested value is changed.\n */\nexport type ContextCallback = (\n value: ValueType,\n unsubscribe?: () => void\n) => void;\n\n/**\n * Interface definition for a ContextRequest\n */\nexport interface ContextRequest> {\n readonly context: C;\n readonly contextTarget: Element;\n readonly callback: ContextCallback>;\n readonly subscribe?: boolean;\n}\n\n/**\n * An event fired by a context requester to signal it desires a specified context with the given key.\n *\n * A provider should inspect the `context` property of the event to determine if it has a value that can\n * satisfy the request, calling the `callback` with the requested value if so.\n *\n * If the requested context event contains a truthy `subscribe` value, then a provider can call the callback\n * multiple times if the value is changed, if this is the case the provider should pass an `unsubscribe`\n * method to the callback which consumers can invoke to indicate they no longer wish to receive these updates.\n *\n * If no `subscribe` value is present in the event, then the provider can assume that this is a 'one time'\n * request for the context and can therefore not track the consumer.\n */\nexport class ContextRequestEvent>\n extends Event\n implements ContextRequest\n{\n readonly context: C;\n readonly contextTarget: Element;\n readonly callback: ContextCallback>;\n readonly subscribe?: boolean;\n\n /**\n *\n * @param context the context key to request\n * @param contextTarget the original context target of the requester\n * @param callback the callback that should be invoked when the context with the specified key is available\n * @param subscribe when, true indicates we want to subscribe to future updates\n */\n constructor(\n context: C,\n contextTarget: Element,\n callback: ContextCallback>,\n subscribe?: boolean\n ) {\n super('context-request', {bubbles: true, composed: true});\n this.context = context;\n this.contextTarget = contextTarget;\n this.callback = callback;\n this.subscribe = subscribe ?? false;\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\n/**\n * The Context type defines a type brand to associate a key value with the context value type\n */\nexport type Context = KeyType & {__context__: ValueType};\n\n/**\n * @deprecated use Context instead\n */\nexport type ContextKey = Context;\n\n/**\n * A helper type which can extract a Context value type from a Context type\n */\nexport type ContextType> =\n Key extends Context ? ValueType : never;\n\n/**\n * Creates a typed Context.\n *\n * Contexts are compared with strict equality.\n *\n * If you want two separate `createContext()` calls to referer to the same\n * context, then use a key that will by equal under strict equality like a\n * string for `Symbol.for()`:\n *\n * ```ts\n * // true\n * createContext('my-context') === createContext('my-context')\n * // true\n * createContext(Symbol.for('my-context')) === createContext(Symbol.for('my-context'))\n * ```\n *\n * If you want a context to be unique so that it's guaranteed to not collide\n * with other contexts, use a key that's unique under strict equality, like\n * a `Symbol()` or object.:\n *\n * ```\n * // false\n * createContext({}) === createContext({})\n * // false\n * createContext(Symbol('my-context')) === createContext(Symbol('my-context'))\n * ```\n *\n * @param key a context key value\n * @template ValueType the type of value that can be provided by this context.\n * @returns the context key value cast to `Context`\n */\nexport function createContext(key: K) {\n return key as Context;\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport {\n ContextCallback,\n ContextRequestEvent,\n} from '../context-request-event.js';\nimport type {Context, ContextType} from '../create-context.js';\nimport type {\n ReactiveController,\n ReactiveControllerHost,\n} from '@lit/reactive-element';\n\nexport interface Options> {\n context: C;\n callback?: (value: ContextType, dispose?: () => void) => void;\n subscribe?: boolean;\n}\n\n/**\n * A ReactiveController which adds context consuming behavior to a custom\n * element by dispatching `context-request` events.\n *\n * When the host element is connected to the document it will emit a\n * `context-request` event with its context key. When the context request\n * is satisfied the controller will invoke the callback, if present, and\n * trigger a host update so it can respond to the new value.\n *\n * It will also call the dispose method given by the provider when the\n * host element is disconnected.\n */\nexport class ContextConsumer<\n C extends Context,\n HostElement extends ReactiveControllerHost & HTMLElement,\n> implements ReactiveController\n{\n protected host: HostElement;\n private context: C;\n private callback?: (value: ContextType, dispose?: () => void) => void;\n private subscribe = false;\n\n private provided = false;\n\n value?: ContextType = undefined;\n\n constructor(host: HostElement, options: Options);\n /** @deprecated Use new ContextConsumer(host, options) */\n constructor(\n host: HostElement,\n context: C,\n callback?: (value: ContextType, dispose?: () => void) => void,\n subscribe?: boolean\n );\n constructor(\n host: HostElement,\n contextOrOptions: C | Options,\n callback?: (value: ContextType, dispose?: () => void) => void,\n subscribe?: boolean\n ) {\n this.host = host;\n // This is a potentially fragile duck-type. It means a context object can't\n // have a property name context and be used in positional argument form.\n if ((contextOrOptions as Options).context !== undefined) {\n const options = contextOrOptions as Options;\n this.context = options.context;\n this.callback = options.callback;\n this.subscribe = options.subscribe ?? false;\n } else {\n this.context = contextOrOptions as C;\n this.callback = callback;\n this.subscribe = subscribe ?? false;\n }\n this.host.addController(this);\n }\n\n private unsubscribe?: () => void;\n\n hostConnected(): void {\n this.dispatchRequest();\n }\n\n hostDisconnected(): void {\n if (this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = undefined;\n }\n }\n\n private dispatchRequest() {\n this.host.dispatchEvent(\n new ContextRequestEvent(\n this.context,\n this.host,\n this._callback,\n this.subscribe\n )\n );\n }\n\n // This function must have stable identity to properly dedupe in ContextRoot\n // if this element connects multiple times.\n private _callback: ContextCallback> = (value, unsubscribe) => {\n // some providers will pass an unsubscribe function indicating they may provide future values\n if (this.unsubscribe) {\n // if the unsubscribe function changes this implies we have changed provider\n if (this.unsubscribe !== unsubscribe) {\n // cleanup the old provider\n this.provided = false;\n this.unsubscribe();\n }\n // if we don't support subscription, immediately unsubscribe\n if (!this.subscribe) {\n this.unsubscribe();\n }\n }\n\n // store the value so that it can be retrieved from the controller\n this.value = value;\n // schedule an update in case this value is used in a template\n this.host.requestUpdate();\n\n // only invoke callback if we are either expecting updates or have not yet\n // been provided a value\n if (!this.provided || this.subscribe) {\n this.provided = true;\n if (this.callback) {\n this.callback(value, unsubscribe);\n }\n }\n\n this.unsubscribe = unsubscribe;\n };\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport {ContextCallback} from './context-request-event.js';\n\n/**\n * A disposer function\n */\ntype Disposer = () => void;\n\ninterface CallbackInfo {\n disposer: Disposer;\n consumerHost: Element;\n}\n\n/**\n * A simple class which stores a value, and triggers registered callbacks when\n * the value is changed via its setter.\n *\n * An implementor might use other observable patterns such as MobX or Redux to\n * get behavior like this. But this is a pretty minimal approach that will\n * likely work for a number of use cases.\n */\nexport class ValueNotifier {\n protected readonly subscriptions = new Map<\n ContextCallback,\n CallbackInfo\n >();\n private _value!: T;\n get value(): T {\n return this._value;\n }\n set value(v: T) {\n this.setValue(v);\n }\n\n setValue(v: T, force = false) {\n const update = force || !Object.is(v, this._value);\n this._value = v;\n if (update) {\n this.updateObservers();\n }\n }\n\n constructor(defaultValue?: T) {\n if (defaultValue !== undefined) {\n this.value = defaultValue;\n }\n }\n\n updateObservers = (): void => {\n for (const [callback, {disposer}] of this.subscriptions) {\n callback(this._value, disposer);\n }\n };\n\n addCallback(\n callback: ContextCallback,\n consumerHost: Element,\n subscribe?: boolean\n ): void {\n if (!subscribe) {\n // just call the callback once and we're done\n callback(this.value);\n return;\n }\n if (!this.subscriptions.has(callback)) {\n this.subscriptions.set(callback, {\n disposer: () => {\n this.subscriptions.delete(callback);\n },\n consumerHost,\n });\n }\n const {disposer} = this.subscriptions.get(callback)!;\n callback(this.value, disposer);\n }\n\n clearCallbacks(): void {\n this.subscriptions.clear();\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport {ContextRequestEvent} from '../context-request-event.js';\nimport {ValueNotifier} from '../value-notifier.js';\nimport type {Context, ContextType} from '../create-context.js';\nimport type {\n ReactiveController,\n ReactiveControllerHost,\n} from '@lit/reactive-element';\n\ndeclare global {\n interface HTMLElementEventMap {\n /**\n * A 'context-provider' event can be emitted by any element which hosts\n * a context provider to indicate it is available for use.\n */\n 'context-provider': ContextProviderEvent>;\n }\n}\n\nexport class ContextProviderEvent<\n C extends Context,\n> extends Event {\n readonly context: C;\n readonly contextTarget: Element;\n\n /**\n *\n * @param context the context which this provider can provide\n * @param contextTarget the original context target of the provider\n */\n constructor(context: C, contextTarget: Element) {\n super('context-provider', {bubbles: true, composed: true});\n this.context = context;\n this.contextTarget = contextTarget;\n }\n}\n\nexport interface Options> {\n context: C;\n initialValue?: ContextType;\n}\n\ntype ReactiveElementHost = Partial & HTMLElement;\n\n/**\n * A ReactiveController which adds context provider behavior to a\n * custom element.\n *\n * This controller simply listens to the `context-request` event when\n * the host is connected to the DOM and registers the received callbacks\n * against its observable Context implementation.\n *\n * The controller may also be attached to any HTML element in which case it's\n * up to the user to call hostConnected() when attached to the DOM. This is\n * done automatically for any custom elements implementing\n * ReactiveControllerHost.\n */\nexport class ContextProvider<\n T extends Context,\n HostElement extends ReactiveElementHost = ReactiveElementHost,\n >\n extends ValueNotifier>\n implements ReactiveController\n{\n protected readonly host: HostElement;\n private readonly context: T;\n\n constructor(host: HostElement, options: Options);\n /** @deprecated Use new ContextProvider(host, options) */\n constructor(host: HostElement, context: T, initialValue?: ContextType);\n constructor(\n host: HostElement,\n contextOrOptions: T | Options,\n initialValue?: ContextType\n ) {\n super(\n (contextOrOptions as Options).context !== undefined\n ? (contextOrOptions as Options).initialValue\n : initialValue\n );\n this.host = host;\n if ((contextOrOptions as Options).context !== undefined) {\n this.context = (contextOrOptions as Options).context;\n } else {\n this.context = contextOrOptions as T;\n }\n this.attachListeners();\n this.host.addController?.(this);\n }\n\n onContextRequest = (\n ev: ContextRequestEvent>\n ): void => {\n // Only call the callback if the context matches.\n if (ev.context !== this.context) {\n return;\n }\n // Also, in case an element is a consumer AND a provider\n // of the same context, we want to avoid the element to self-register.\n const consumerHost = ev.contextTarget ?? ev.composedPath()[0];\n if (consumerHost === this.host) {\n return;\n }\n ev.stopPropagation();\n this.addCallback(ev.callback, consumerHost, ev.subscribe);\n };\n\n /**\n * When we get a provider request event, that means a child of this element\n * has just woken up. If it's a provider of our context, then we may need to\n * re-parent our subscriptions, because is a more specific provider than us\n * for its subtree.\n */\n onProviderRequest = (\n ev: ContextProviderEvent>\n ): void => {\n // Ignore events when the context doesn't match.\n if (ev.context !== this.context) {\n return;\n }\n // Also, in case an element is a consumer AND a provider\n // of the same context it shouldn't provide to itself.\n const childProviderHost = ev.contextTarget ?? ev.composedPath()[0];\n if (childProviderHost === this.host) {\n return;\n }\n // Re-parent all of our subscriptions in case this new child provider\n // should take them over.\n const seen = new Set();\n for (const [callback, {consumerHost}] of this.subscriptions) {\n // Prevent infinite loops in the case where a one host element\n // is providing the same context multiple times.\n //\n // While normally it's a no-op to attempt to re-parent a subscription\n // that already has its proper parent, in the case where there's more\n // than one ValueProvider for the same context on the same hostElement,\n // they will each call the consumer, and since they will each have their\n // own dispose function, a well behaved consumer will notice the change\n // in dispose function and call their old one.\n //\n // This will cause the subscriptions to thrash, but worse, without this\n // set check here, we can end up in an infinite loop, as we add and remove\n // the same subscriptions onto the end of the map over and over.\n if (seen.has(callback)) {\n continue;\n }\n seen.add(callback);\n consumerHost.dispatchEvent(\n new ContextRequestEvent(this.context, consumerHost, callback, true)\n );\n }\n ev.stopPropagation();\n };\n\n private attachListeners() {\n this.host.addEventListener('context-request', this.onContextRequest);\n this.host.addEventListener('context-provider', this.onProviderRequest);\n }\n\n hostConnected(): void {\n // emit an event to signal a provider is available for this context\n this.host.dispatchEvent(new ContextProviderEvent(this.context, this.host));\n }\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport {Context} from './create-context.js';\nimport {ContextCallback, ContextRequestEvent} from './context-request-event.js';\nimport {ContextProviderEvent} from './controllers/context-provider.js';\n\n/**\n * A ContextRoot can be used to gather unsatisfied context requests and\n * re-dispatch them when new providers which satisfy matching context keys are\n * available.\n *\n * This allows providers to be added to a DOM tree, or upgraded, after the\n * consumers.\n */\nexport class ContextRoot {\n private pendingContextRequests = new Map<\n Context,\n {\n // The WeakMap lets us detect if we're seen an element/callback pair yet,\n // without needing to iterate the `requests` array\n callbacks: WeakMap>>;\n\n // Requests lets us iterate over every element/callback that we need to\n // replay context events for\n // Both the element and callback must be stored in WeakRefs because the\n // callback most likely has a strong ref to the element.\n requests: Array<{\n elementRef: WeakRef;\n callbackRef: WeakRef>;\n }>;\n }\n >();\n\n /**\n * Attach the ContextRoot to a given element to intercept `context-request` and\n * `context-provider` events.\n *\n * @param element an element to add event listeners to\n */\n attach(element: HTMLElement): void {\n element.addEventListener('context-request', this.onContextRequest);\n element.addEventListener('context-provider', this.onContextProvider);\n }\n\n /**\n * Removes the ContextRoot event listeners from a given element.\n *\n * @param element an element from which to remove event listeners\n */\n detach(element: HTMLElement): void {\n element.removeEventListener('context-request', this.onContextRequest);\n element.removeEventListener('context-provider', this.onContextProvider);\n }\n\n private onContextProvider = (\n event: ContextProviderEvent>\n ) => {\n const pendingRequestData = this.pendingContextRequests.get(event.context);\n if (pendingRequestData === undefined) {\n // No pending requests for this context at this time\n return;\n }\n\n // Clear our list. Any still unsatisfied requests will re-add themselves\n // when we dispatch the events below.\n this.pendingContextRequests.delete(event.context);\n\n // Loop over all pending requests and re-dispatch them from their source\n const {requests} = pendingRequestData;\n for (const {elementRef, callbackRef} of requests) {\n const element = elementRef.deref();\n const callback = callbackRef.deref();\n\n if (element === undefined || callback === undefined) {\n // The element was GC'ed. Do nothing.\n } else {\n // Re-dispatch if we still have the element and callback\n element.dispatchEvent(\n new ContextRequestEvent(event.context, element, callback, true)\n );\n }\n }\n };\n\n private onContextRequest = (\n event: ContextRequestEvent>\n ) => {\n // Events that are not subscribing should not be buffered\n if (event.subscribe !== true) {\n return;\n }\n\n // Note, it's important to use the initial target\n // since that's the requesting element and the event may be re-targeted\n // to an outer host element.\n const element = (event.contextTarget ??\n event.composedPath()[0]) as HTMLElement;\n const callback = event.callback;\n\n let pendingContextRequests = this.pendingContextRequests.get(event.context);\n if (pendingContextRequests === undefined) {\n this.pendingContextRequests.set(\n event.context,\n (pendingContextRequests = {\n callbacks: new WeakMap(),\n requests: [],\n })\n );\n }\n\n let callbacks = pendingContextRequests.callbacks.get(element);\n if (callbacks === undefined) {\n pendingContextRequests.callbacks.set(\n element,\n (callbacks = new WeakSet())\n );\n }\n\n if (callbacks.has(callback)) {\n // We're already tracking this element/callback pair\n return;\n }\n\n callbacks.add(callback);\n pendingContextRequests.requests.push({\n elementRef: new WeakRef(element),\n callbackRef: new WeakRef(callback),\n });\n };\n}\n", "/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport {ReactiveElement} from '@lit/reactive-element';\nimport {Context} from '../create-context.js';\nimport {ContextProvider} from '../controllers/context-provider.js';\n\n/*\n * IMPORTANT: For compatibility with tsickle and the Closure JS compiler, all\n * property decorators (but not class decorators) in this file that have\n * an @ExportDecoratedItems annotation must be defined as a regular function,\n * not an arrow function.\n */\n\n/**\n * A property decorator that adds a ContextProvider controller to the component\n * making it respond to any `context-request` events from its children consumer.\n *\n * @param context A Context identifier value created via `createContext`\n *\n * @example\n *\n * ```ts\n * import {provide} from '@lit/context';\n * import {Logger} from 'my-logging-library';\n * import {loggerContext} from './logger-context.js';\n *\n * class MyElement {\n * @provide({context: loggerContext})\n * logger = new Logger();\n * }\n * ```\n * @category Decorator\n */\nexport function provide({\n context: context,\n}: {\n context: Context;\n}): ProvideDecorator {\n return ((\n protoOrTarget: ClassAccessorDecoratorTarget,\n nameOrContext:\n | PropertyKey\n | ClassAccessorDecoratorContext\n ) => {\n // Map of instances to controllers\n const controllerMap = new WeakMap<\n ReactiveElement,\n ContextProvider>\n >();\n if (typeof nameOrContext === 'object') {\n // Standard decorators branch\n nameOrContext.addInitializer(function () {\n controllerMap.set(this, new ContextProvider(this, {context}));\n });\n return {\n get(this: ReactiveElement) {\n return protoOrTarget.get.call(this);\n },\n set(this: ReactiveElement, value: ValueType) {\n controllerMap.get(this)?.setValue(value);\n return protoOrTarget.set.call(this, value);\n },\n init(this: ReactiveElement, value: ValueType) {\n controllerMap.get(this)?.setValue(value);\n return value;\n },\n };\n } else {\n // Experimental decorators branch\n (protoOrTarget.constructor as typeof ReactiveElement).addInitializer(\n (element: ReactiveElement): void => {\n controllerMap.set(element, new ContextProvider(element, {context}));\n }\n );\n // proxy any existing setter for this property and use it to\n // notify the controller of an updated value\n const descriptor = Object.getOwnPropertyDescriptor(\n protoOrTarget,\n nameOrContext\n );\n let newDescriptor: PropertyDescriptor;\n if (descriptor === undefined) {\n const valueMap = new WeakMap();\n newDescriptor = {\n get(this: ReactiveElement) {\n return valueMap.get(this);\n },\n set(this: ReactiveElement, value: ValueType) {\n controllerMap.get(this)!.setValue(value);\n valueMap.set(this, value);\n },\n configurable: true,\n enumerable: true,\n };\n } else {\n const oldSetter = descriptor.set;\n newDescriptor = {\n ...descriptor,\n set(this: ReactiveElement, value: ValueType) {\n controllerMap.get(this)!.setValue(value);\n oldSetter?.call(this, value);\n },\n };\n }\n Object.defineProperty(protoOrTarget, nameOrContext, newDescriptor);\n return;\n }\n }) as ProvideDecorator;\n}\n\n/**\n * Generates a public interface type that removes private and protected fields.\n * This allows accepting otherwise compatible versions of the type (e.g. from\n * multiple copies of the same package in `node_modules`).\n */\ntype Interface = {\n [K in keyof T]: T[K];\n};\n\ntype ProvideDecorator = {\n // legacy\n <\n K extends PropertyKey,\n Proto extends Interface>,\n >(\n protoOrDescriptor: Proto,\n name?: K\n ): FieldMustMatchContextType;\n\n // standard\n <\n C extends Interface>,\n V extends ContextType,\n >(\n value: ClassAccessorDecoratorTarget,\n context: ClassAccessorDecoratorContext\n ): void;\n};\n\n// Note TypeScript requires the return type of a decorator to be `void | any`\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype DecoratorReturn = void | any;\n\ntype FieldMustMatchContextType =\n // First we check whether the object has the property as a required field\n Obj extends Record\n ? // Ok, it does, just check whether it's ok to assign the\n // provided type to the consuming field\n [ProvidingType] extends [ContextType]\n ? DecoratorReturn\n : {\n message: 'providing field not assignable to context';\n context: ContextType;\n provided: ProvidingType;\n }\n : // Next we check whether the object has the property as an optional field\n Obj extends Partial>\n ? // Check assignability again. Note that we have to include undefined\n // here on the providing type because it's optional.\n [Providing | undefined] extends [ContextType]\n ? DecoratorReturn\n : {\n message: 'providing field not assignable to context';\n context: ContextType;\n consuming: Providing | undefined;\n }\n : // Ok, the field isn't present, so either someone's using provide\n // manually, i.e. not as a decorator (maybe don't do that! but if you do,\n // you're on your own for your type checking, sorry), or the field is\n // private, in which case we can't check it.\n DecoratorReturn;\n", "/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport {ReactiveElement} from '@lit/reactive-element';\nimport {ContextConsumer} from '../controllers/context-consumer.js';\nimport {Context} from '../create-context.js';\n\n/*\n * IMPORTANT: For compatibility with tsickle and the Closure JS compiler, all\n * property decorators (but not class decorators) in this file that have\n * an @ExportDecoratedItems annotation must be defined as a regular function,\n * not an arrow function.\n */\n\n/**\n * A property decorator that adds a ContextConsumer controller to the component\n * which will try and retrieve a value for the property via the Context API.\n *\n * @param context A Context identifier value created via `createContext`\n * @param subscribe An optional boolean which when true allows the value to be updated\n * multiple times.\n *\n * @example\n *\n * ```ts\n * import {consume} from '@lit/context';\n * import {loggerContext, Logger} from 'community-protocols/logger';\n *\n * class MyElement {\n * @consume({context: loggerContext})\n * logger?: Logger;\n *\n * doThing() {\n * this.logger!.log('thing was done');\n * }\n * }\n * ```\n * @category Decorator\n */\nexport function consume({\n context,\n subscribe,\n}: {\n context: Context;\n subscribe?: boolean;\n}): ConsumeDecorator {\n return ((\n protoOrTarget: ClassAccessorDecoratorTarget,\n nameOrContext:\n | PropertyKey\n | ClassAccessorDecoratorContext\n ) => {\n if (typeof nameOrContext === 'object') {\n // Standard decorators branch\n nameOrContext.addInitializer(function () {\n new ContextConsumer(this, {\n context,\n callback: (value) => {\n protoOrTarget.set.call(this, value);\n },\n subscribe,\n });\n });\n } else {\n // Experimental decorators branch\n (protoOrTarget.constructor as typeof ReactiveElement).addInitializer(\n (element: ReactiveElement): void => {\n new ContextConsumer(element, {\n context,\n callback: (value) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (element as any)[nameOrContext] = value;\n },\n subscribe,\n });\n }\n );\n }\n }) as ConsumeDecorator;\n}\n\n/**\n * Generates a public interface type that removes private and protected fields.\n * This allows accepting otherwise incompatible versions of the type (e.g. from\n * multiple copies of the same package in `node_modules`).\n */\ntype Interface = {\n [K in keyof T]: T[K];\n};\n\ntype ConsumeDecorator = {\n // legacy\n <\n K extends PropertyKey,\n Proto extends Interface>,\n >(\n protoOrDescriptor: Proto,\n name?: K\n ): FieldMustMatchProvidedType;\n\n // standard\n <\n C extends Interface>,\n V extends ValueType,\n >(\n value: ClassAccessorDecoratorTarget,\n context: ClassAccessorDecoratorContext\n ): void;\n};\n\n// Note TypeScript requires the return type of a decorator to be `void | any`\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype DecoratorReturn = void | any;\n\ntype FieldMustMatchProvidedType =\n // First we check whether the object has the property as a required field\n Obj extends Record\n ? // Ok, it does, just check whether it's ok to assign the\n // provided type to the consuming field\n [ProvidedType] extends [ConsumingType]\n ? DecoratorReturn\n : {\n message: 'provided type not assignable to consuming field';\n provided: ProvidedType;\n consuming: ConsumingType;\n }\n : // Next we check whether the object has the property as an optional field\n Obj extends Partial>\n ? // Check assignability again. Note that we have to include undefined\n // here on the consuming type because it's optional.\n [ProvidedType] extends [ConsumingType | undefined]\n ? DecoratorReturn\n : {\n message: 'provided type not assignable to consuming field';\n provided: ProvidedType;\n consuming: ConsumingType | undefined;\n }\n : // Ok, the field isn't present, so either someone's using consume\n // manually, i.e. not as a decorator (maybe don't do that! but if you do,\n // you're on your own for your type checking, sorry), or the field is\n // private, in which case we can't check it.\n DecoratorReturn;\n", "const configurable = true;\n\n/**\n * Binds a class method to the instance\n * @param _\n * @param key\n * @param descriptor\n * @example Binding an event listener\n * ```ts\n * private mo = new MutationObserver(this.onMutation);\n *\n * @bound onMutation(records: MutationRecord[]) {\n * this.count = this.children.length;\n * }\n * ```\n */\nexport function bound(_: unknown, key: string, descriptor: PropertyDescriptor): PropertyDescriptor {\n if (typeof descriptor?.value !== 'function') {\n throw new TypeError(`Only methods can be decorated with @bound. <${key ?? (_ as () => void).name}> is not a method!`);\n } /* c8 ignore next */\n return {\n configurable,\n get() {\n const value = descriptor.value.bind(this);\n Object.defineProperty(this, key, { value, configurable, writable: true });\n return value;\n },\n };\n}\n", "import { isServer, type ReactiveControllerHost } from 'lit';\nimport { bound } from '../decorators/bound.js';\n\nfunction isATFocusableItem(el: Element): el is HTMLElement {\n return !!el\n && el.ariaHidden !== 'true'\n && !el.hasAttribute('inert')\n && !el.hasAttribute('hidden');\n}\n\nexport interface ATFocusControllerOptions {\n /**\n * Callback to return the list of items\n */\n getItems(): Item[];\n /**\n * Callback to return the listbox container element\n */\n getItemsContainer?(): HTMLElement | null;\n /**\n * Callback to return the direction of navigation in the list box.\n */\n getOrientation?(): 'horizontal' | 'vertical' | 'both' | 'undefined';\n /**\n * Function returning the DOM nodes which are accessibility controllers of item container\n * e.g. the button toggle and combobox input which control a listbox.\n */\n getControlsElements?(): HTMLElement[];\n}\n\nexport abstract class ATFocusController {\n #itemsContainerElement: HTMLElement | null = null;\n\n #atFocusedItemIndex = -1;\n\n protected _items: Item[] = [];\n\n /** All items */\n abstract items: Item[];\n\n /**\n * Index of the Item which currently has assistive technology focus\n * Set this to change focus. Setting to an out-of-bounds value will\n * wrap around to the other side of the list.\n */\n get atFocusedItemIndex() {\n return this.#atFocusedItemIndex;\n }\n\n set atFocusedItemIndex(index: number) {\n const previousIndex = this.#atFocusedItemIndex;\n const direction = index > previousIndex ? 1 : -1;\n const { items, atFocusableItems } = this;\n const itemsIndexOfLastATFocusableItem = items.indexOf(this.atFocusableItems.at(-1)!);\n let itemToGainFocus = items.at(index);\n let itemToGainFocusIsFocusable = atFocusableItems.includes(itemToGainFocus!);\n if (atFocusableItems.length) {\n let count = 0;\n while (!itemToGainFocus || !itemToGainFocusIsFocusable && count++ <= 1000) {\n if (index < 0) {\n index = itemsIndexOfLastATFocusableItem;\n } else if (index >= itemsIndexOfLastATFocusableItem) {\n index = 0;\n } else {\n index = index + direction;\n }\n itemToGainFocus = items.at(index);\n itemToGainFocusIsFocusable = atFocusableItems.includes(itemToGainFocus!);\n }\n if (count >= 1000) {\n throw new Error('Could not atFocusedItemIndex');\n }\n }\n this.#atFocusedItemIndex = index;\n }\n\n /** Elements which control the items container e.g. a combobox input */\n protected get controlsElements(): HTMLElement[] {\n return this.options.getControlsElements?.() ?? [];\n }\n\n /** All items which are able to receive assistive technology focus */\n get atFocusableItems(): Item[] {\n return this._items.filter(isATFocusableItem);\n }\n\n /** The element containing focusable items, e.g. a listbox */\n get itemsContainerElement() {\n return this.#itemsContainerElement ?? null;\n }\n\n set itemsContainerElement(container: HTMLElement | null) {\n if (container !== this.#itemsContainerElement) {\n this.#itemsContainerElement?.removeEventListener('keydown', this.onKeydown);\n this.#itemsContainerElement = container;\n this.#itemsContainerElement?.addEventListener('keydown', this.onKeydown);\n this.host.requestUpdate();\n }\n }\n\n constructor(\n public host: ReactiveControllerHost,\n protected options: ATFocusControllerOptions,\n ) {\n this.host.updateComplete.then(() => this.initItems());\n }\n\n /**\n * Initialize the items and itemsContainerElement fields\n */\n protected initItems(): void {\n this.items = this.options.getItems();\n this.itemsContainerElement ??= this.#initContainer();\n }\n\n hostConnected(): void {\n this.hostUpdate();\n }\n\n hostDisconnected(): void {\n this.#itemsContainerElement?.removeEventListener('keydown', this.onKeydown);\n }\n\n hostUpdate(): void {\n this.itemsContainerElement ??= this.#initContainer();\n }\n\n #initContainer() {\n return this.options.getItemsContainer?.()\n ?? (!isServer && this.host instanceof HTMLElement ? this.host : null);\n }\n\n /**\n * Override and conditionally call `super.onKeydown` to filter out keyboard events\n * which should not result in a focus change. Ensure that subclass' method is bound\n * @param event keyboard event\n */\n protected onKeydown(event: KeyboardEvent): void {\n const orientation = this.options.getOrientation?.() ?? this\n .#itemsContainerElement\n ?.getAttribute('aria-orientation') as\n 'horizontal' | 'vertical' | 'grid' | 'undefined';\n\n const item = this._items.at(this.atFocusedItemIndex);\n\n const horizontalOnly =\n orientation === 'horizontal'\n || item?.tagName === 'SELECT'\n || item?.getAttribute('role') === 'spinbutton';\n\n const verticalOnly = orientation === 'vertical';\n\n switch (event.key) {\n case 'ArrowLeft':\n if (verticalOnly) {\n return;\n }\n this.atFocusedItemIndex--;\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowRight':\n if (verticalOnly) {\n return;\n }\n this.atFocusedItemIndex++;\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n if (horizontalOnly) {\n return;\n }\n this.atFocusedItemIndex--;\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n if (horizontalOnly) {\n return;\n }\n this.atFocusedItemIndex++;\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Home':\n if (!(event.target instanceof HTMLElement\n && (event.target.hasAttribute('aria-activedescendant')\n || event.target.ariaActiveDescendantElement))) {\n this.atFocusedItemIndex = 0;\n event.stopPropagation();\n event.preventDefault();\n }\n break;\n case 'End':\n if (!(event.target instanceof HTMLElement\n && (event.target.hasAttribute('aria-activedescendant')\n || event.target.ariaActiveDescendantElement))) {\n this.atFocusedItemIndex = this.items.length - 1;\n event.stopPropagation();\n event.preventDefault();\n }\n break;\n default:\n break;\n }\n this.host.requestUpdate();\n };\n}\n", "import { isServer, type ReactiveControllerHost } from 'lit';\nimport { ATFocusController, type ATFocusControllerOptions } from './at-focus-controller.js';\nimport { Logger } from './logger.js';\nimport { bound } from '../decorators/bound.js';\n\nexport type RovingTabindexControllerOptions =\n ATFocusControllerOptions;\n\n/**\n * Implements roving tabindex, as described in WAI-ARIA practices, [Managing Focus Within\n * Components Using a Roving tabindex][rti]\n *\n * [rti]: https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_roving_tabindex\n */\nexport class RovingTabindexController<\n Item extends HTMLElement = HTMLElement\n> extends ATFocusController {\n static of(\n host: ReactiveControllerHost,\n options: RovingTabindexControllerOptions,\n ): RovingTabindexController {\n return new RovingTabindexController(host, options);\n }\n\n #logger = new Logger(this.host);\n\n #gainedInitialFocus = false;\n\n #itemsSet = new Set();\n\n get atFocusedItemIndex(): number {\n return super.atFocusedItemIndex;\n }\n\n /**\n * Sets the DOM Focus on the item with assistive technology focus\n * @param item item\n */\n set atFocusedItemIndex(index: number) {\n super.atFocusedItemIndex = index;\n const item = this.items.at(this.atFocusedItemIndex);\n for (const i of this.items) {\n i.tabIndex = item === i ? 0 : -1;\n }\n if (this.#gainedInitialFocus) {\n item?.focus();\n }\n this.host.requestUpdate();\n }\n\n get items() {\n return this._items;\n }\n\n public set items(items: Item[]) {\n this._items = items;\n this.#itemsSet = new Set(items);\n const pivot = Math.max(0, this.atFocusedItemIndex);\n const [firstFocusable] = this.atFocusableItems;\n const firstFocusableIndex = firstFocusable ? items.indexOf(firstFocusable) : -1;\n const pivotFocusableIndex = items.indexOf(this.items\n .slice(pivot)\n .concat(this.items.slice(0, pivot))\n .find(item => this.atFocusableItems.includes(item))!);\n this.atFocusedItemIndex = Math.max(firstFocusableIndex, pivotFocusableIndex);\n this.host.requestUpdate();\n }\n\n private constructor(\n public host: ReactiveControllerHost,\n options: RovingTabindexControllerOptions,\n ) {\n super(host, options);\n this.initItems();\n const container = options.getItemsContainer?.() ?? this.host;\n if (!isServer) {\n if (container instanceof HTMLElement) {\n container.addEventListener('focusin', () =>\n this.#gainedInitialFocus = true, { once: true });\n } else {\n this.#logger.warn('RovingTabindexController requires a getItemsContainer function');\n }\n }\n }\n\n @bound\n protected override onKeydown(event: KeyboardEvent): void {\n if (!event.ctrlKey\n && !event.altKey\n && !event.metaKey\n && !!this.atFocusableItems.length\n && !!event.composedPath().some(node => this.#itemsSet.has(node as Item))) {\n super.onKeydown(event);\n }\n }\n}\n", "import { isServer, type ReactiveController, type ReactiveControllerHost } from 'lit';\n\nimport { Logger } from '@patternfly/pfe-core/controllers/logger.js';\n\nexport interface TabsAriaControllerOptions {\n /** Add an `isTab` predicate to ensure this tabs instance' state does not leak into parent tabs' state */\n isTab: (node: unknown) => node is Tab;\n isActiveTab: (tab: Tab) => boolean;\n /** Add an `isPanel` predicate to ensure this tabs instance' state does not leak into parent tabs' state */\n isPanel: (node: unknown) => node is Panel;\n getHTMLElement?: () => HTMLElement;\n}\n\nexport class TabsAriaController<\n Tab extends HTMLElement = HTMLElement,\n Panel extends HTMLElement = HTMLElement\n> implements ReactiveController {\n #logger: Logger;\n\n #host: ReactiveControllerHost;\n\n #element!: HTMLElement;\n\n #tabPanelMap = new Map();\n\n #options: TabsAriaControllerOptions;\n\n #mo = new MutationObserver(this.#onSlotchange.bind(this));\n\n get tabs() {\n return [...this.#tabPanelMap.keys()] as Tab[];\n }\n\n get activeTab(): Tab | undefined {\n return this.tabs.find(x => this.#options.isActiveTab(x));\n }\n\n /**\n * @param host controller host\n * @param options controller options\n * @example Usage in PfTab\n * ```ts\n * new TabsController(this, {\n * isTab: (x): x is PfTab => x instanceof PfTab,\n * isPanel: (x): x is PfTabPanel => x instanceof PfTabPanel\n * });\n * ```\n */\n constructor(\n host: ReactiveControllerHost,\n options: TabsAriaControllerOptions,\n ) {\n this.#options = options;\n this.#logger = new Logger(host);\n (this.#host = host).addController(this);\n if (isServer) {\n return;\n }\n if (host instanceof HTMLElement) {\n this.#element = host;\n } else {\n const element = options.getHTMLElement?.();\n if (!element) {\n throw new Error(\n 'TabsController must be instantiated with an HTMLElement or a `getHTMLElement()` option',\n );\n }\n this.#element = element;\n }\n this.#element.addEventListener('slotchange', this.#onSlotchange);\n if (this.#element.isConnected) {\n this.hostConnected();\n }\n }\n\n hostConnected(): void {\n this.#mo.observe(this.#element, { attributes: false, childList: true, subtree: false });\n this.#onSlotchange();\n }\n\n hostUpdated(): void {\n for (const [tab, panel] of this.#tabPanelMap) {\n panel.setAttribute('aria-labelledby', tab.id);\n tab.setAttribute('aria-controls', panel.id);\n }\n }\n\n hostDisconnected(): void {\n this.#mo.disconnect();\n }\n\n /**\n * zip the tabs and panels together into #tabPanelMap\n */\n #onSlotchange() {\n this.#tabPanelMap.clear();\n const tabs = [];\n const panels = [];\n for (const child of this.#element?.children ?? []) {\n if (this.#options.isTab(child)) {\n tabs.push(child);\n child.role ??= 'tab';\n } else if (this.#options.isPanel(child)) {\n panels.push(child);\n child.role ??= 'tabpanel';\n }\n }\n if (tabs.length > panels.length) {\n this.#logger.warn('Too many tabs!');\n } else if (panels.length > tabs.length) {\n this.#logger.warn('Too many panels!');\n }\n while (tabs.length) {\n this.#tabPanelMap.set(tabs.shift()!, panels.shift()!);\n }\n this.#host.requestUpdate();\n }\n\n panelFor(tab: Tab): Panel | undefined {\n return this.#tabPanelMap.get(tab);\n }\n\n tabFor(panel: Panel): Tab | undefined {\n for (const [tab, panelToCheck] of this.#tabPanelMap) {\n if (panel === panelToCheck) {\n return tab;\n }\n }\n }\n}\n", "/**\n * This function returns whether or not an element is within the viewable area of a container. If partial is true,\n * then this function will return true even if only part of the element is in view.\n * @param container The container to check if the element is in view of.\n * @param element The element to check if it is view\n * @param partial true if partial view is allowed\n * @param strict true if strict mode is set, never consider the container width and element width\n * @returns True if the component is in View.\n */\nexport function isElementInView(\n container: HTMLElement,\n element: HTMLElement,\n partial = false,\n strict = false\n): boolean {\n if (!container || !element) {\n return false;\n }\n const containerBounds = container.getBoundingClientRect();\n const elementBounds = element.getBoundingClientRect();\n const containerBoundsLeft = Math.ceil(containerBounds.left);\n const containerBoundsRight = Math.floor(containerBounds.right);\n const elementBoundsLeft = Math.ceil(elementBounds.left);\n const elementBoundsRight = Math.floor(elementBounds.right);\n\n // Check if in view\n const isTotallyInView =\n elementBoundsLeft >= containerBoundsLeft\n && elementBoundsRight <= containerBoundsRight;\n const isPartiallyInView =\n (partial || (!strict && containerBounds.width < elementBounds.width))\n && ((elementBoundsLeft < containerBoundsLeft && elementBoundsRight > containerBoundsLeft)\n || (elementBoundsRight > containerBoundsRight && elementBoundsLeft < containerBoundsRight));\n\n // Return outcome\n return isTotallyInView || isPartiallyInView;\n}\n", "import type { ReactiveController, ReactiveElement } from 'lit';\n\nimport { isElementInView } from '@patternfly/pfe-core/functions/isElementInView.js';\n\nexport interface Options {\n /**\n * Force hide the scroll buttons regardless of overflow\n */\n hideOverflowButtons?: boolean;\n /**\n * Delay in ms to wait before checking for overflow\n */\n scrollTimeoutDelay?: number;\n}\n\nexport class OverflowController implements ReactiveController {\n static #instances = new Set();\n\n static {\n // on resize check for overflows to add or remove scroll buttons\n globalThis.addEventListener?.('resize', () => {\n for (const instance of this.#instances) {\n instance.onScroll();\n }\n }, { capture: false, passive: true });\n }\n\n /** Overflow container */\n #container?: HTMLElement;\n /** Children that can overflow */\n #items: HTMLElement[] = [];\n\n #scrollTimeoutDelay: number;\n #scrollTimeout?: ReturnType;\n\n /** Default state */\n #hideOverflowButtons: boolean;\n\n #mo = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n this.#setOverflowState();\n }\n }\n });\n\n #ro = new ResizeObserver(() => {\n requestAnimationFrame(() => {\n this.#setOverflowState();\n });\n });\n\n showScrollButtons = false;\n overflowLeft = false;\n overflowRight = false;\n\n get firstItem(): HTMLElement | undefined {\n return this.#items.at(0);\n }\n\n get lastItem(): HTMLElement | undefined {\n return this.#items.at(-1);\n }\n\n constructor(\n // TODO: widen this type to ReactiveControllerHost\n public host: ReactiveElement,\n private options?: Options | undefined,\n ) {\n this.#hideOverflowButtons = options?.hideOverflowButtons ?? false;\n this.#scrollTimeoutDelay = options?.scrollTimeoutDelay ?? 0;\n if (host.isConnected) {\n OverflowController.#instances.add(this);\n }\n host.addController(this);\n if (host.isConnected) {\n this.hostConnected();\n }\n }\n\n #setOverflowState(): void {\n if (!this.firstItem || !this.lastItem || !this.#container) {\n return;\n }\n const prevLeft = this.overflowLeft;\n const prevRight = this.overflowRight;\n\n this.overflowLeft = !this.#hideOverflowButtons\n && !isElementInView(this.#container, this.firstItem);\n this.overflowRight = !this.#hideOverflowButtons\n && !isElementInView(this.#container, this.lastItem);\n let scrollButtonsWidth = 0;\n if (this.overflowLeft || this.overflowRight) {\n scrollButtonsWidth =\n (this.#container.parentElement?.querySelector('button')?.getBoundingClientRect().width || 0)\n * 2;\n }\n this.showScrollButtons = !this.#hideOverflowButtons\n && this.#container.scrollWidth > (this.#container.clientWidth + scrollButtonsWidth);\n\n // only request update if there has been a change\n if ((prevLeft !== this.overflowLeft) || (prevRight !== this.overflowRight)) {\n this.host.requestUpdate();\n }\n }\n\n init(container: HTMLElement, items: HTMLElement[]): void {\n this.#container = container;\n // convert HTMLCollection to HTMLElement[]\n this.#items = items;\n }\n\n onScroll = (): void => {\n clearTimeout(this.#scrollTimeout);\n this.#scrollTimeout = setTimeout(() => this.#setOverflowState(), this.#scrollTimeoutDelay);\n };\n\n scrollLeft(): void {\n if (!this.#container) {\n return;\n }\n const leftScroll = this.#container.scrollLeft - this.#container.clientWidth;\n this.#container.scroll({ left: leftScroll, behavior: 'smooth' });\n this.#setOverflowState();\n }\n\n scrollRight(): void {\n if (!this.#container) {\n return;\n }\n const leftScroll = this.#container.scrollLeft + this.#container.clientWidth;\n this.#container.scroll({ left: leftScroll, behavior: 'smooth' });\n this.#setOverflowState();\n }\n\n update(): void {\n this.#setOverflowState();\n }\n\n hostConnected(): void {\n this.#mo.observe(this.host, { attributes: false, childList: true, subtree: true });\n this.#ro.observe(this.host);\n this.onScroll();\n this.#setOverflowState();\n }\n}\n", "/**\n * A quick way to fetch a random ID value.\n * _Note:_ All values are prefixed automatically to ensure an ID-safe value is returned.\n * @param prefix id-safe string prefix\n */\nexport function getRandomId(prefix = 'pfe') {\n return `${prefix}-${Math.random().toString(36).substr(2, 9)}`;\n}\n", "/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\n/*\n * IMPORTANT: For compatibility with tsickle and the Closure JS compiler, all\n * property decorators (but not class decorators) in this file that have\n * an @ExportDecoratedItems annotation must be defined as a regular function,\n * not an arrow function.\n */\n\nimport type {ReactiveElement} from '../reactive-element.js';\nimport type {QueryAssignedNodesOptions} from './query-assigned-nodes.js';\nimport {desc, type Interface} from './base.js';\n\nexport type QueryAssignedElementsDecorator = {\n // legacy\n (\n proto: Interface,\n name: PropertyKey,\n descriptor?: PropertyDescriptor\n // Note TypeScript requires the return type to be `void|any`\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): void | any;\n\n // standard\n , V extends Array>(\n value: ClassAccessorDecoratorTarget,\n context: ClassAccessorDecoratorContext\n ): ClassAccessorDecoratorResult;\n};\n\n/**\n * Options for the {@linkcode queryAssignedElements} decorator. Extends the\n * options that can be passed into\n * [HTMLSlotElement.assignedElements](https://developer.mozilla.org/en-US/docs/Web/API/HTMLSlotElement/assignedElements).\n */\nexport interface QueryAssignedElementsOptions\n extends QueryAssignedNodesOptions {\n /**\n * CSS selector used to filter the elements returned. For example, a selector\n * of `\".item\"` will only include elements with the `item` class.\n */\n selector?: string;\n}\n\n/**\n * A property decorator that converts a class property into a getter that\n * returns the `assignedElements` of the given `slot`. Provides a declarative\n * way to use\n * [`HTMLSlotElement.assignedElements`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLSlotElement/assignedElements).\n *\n * Can be passed an optional {@linkcode QueryAssignedElementsOptions} object.\n *\n * Example usage:\n * ```ts\n * class MyElement {\n * @queryAssignedElements({ slot: 'list' })\n * listItems!: Array;\n * @queryAssignedElements()\n * unnamedSlotEls!: Array;\n *\n * render() {\n * return html`\n * \n * \n * `;\n * }\n * }\n * ```\n *\n * Note, the type of this property should be annotated as `Array`.\n *\n * @category Decorator\n */\nexport function queryAssignedElements(\n options?: QueryAssignedElementsOptions\n): QueryAssignedElementsDecorator {\n return (>(\n obj: object,\n name: PropertyKey | ClassAccessorDecoratorContext\n ) => {\n const {slot, selector} = options ?? {};\n const slotSelector = `slot${slot ? `[name=${slot}]` : ':not([name])'}`;\n return desc(obj, name, {\n get(this: ReactiveElement): V {\n const slotEl =\n this.renderRoot?.querySelector(slotSelector);\n const elements = slotEl?.assignedElements(options) ?? [];\n return (\n selector === undefined\n ? elements\n : elements.filter((node) => node.matches(selector))\n ) as V;\n },\n });\n }) as QueryAssignedElementsDecorator;\n}\n", "import { ContextRoot, createContext, type Context } from '@lit/context';\nimport { isServer } from 'lit';\n\nlet root: ContextRoot;\n\nfunction makeContextRoot() {\n const root = new ContextRoot();\n if (!isServer) {\n root.attach(document.body);\n }\n return root;\n}\n\n/**\n * In order to prevent late-upgrading-context-consumers from 'missing'\n * their rightful context providers, we must set up a `ContextRoot` on the body.\n * Always use this function when creating contexts that are shared with child elements.\n * @param args createContext args\n */\nexport function createContextWithRoot(\n ...args: Parameters\n): Context {\n root ??= makeContextRoot();\n return createContext(...args);\n}\n", "import type { RhTab } from './rh-tab.js';\n\nimport { createContextWithRoot } from '@patternfly/pfe-core/functions/context.js';\n\nexport interface RhTabsContext {\n activeTab?: RhTab;\n firstTab?: RhTab;\n lastTab?: RhTab;\n box?: 'box' | 'inset';\n manual: boolean;\n vertical: boolean;\n}\n\nexport const context = createContextWithRoot(Symbol('rh-tabs-context'));\n", "import type { RhTabsContext } from './context.js';\n\nimport { html, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\nimport { queryAssignedElements } from 'lit/decorators/query-assigned-elements.js';\nimport { query } from 'lit/decorators/query.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { consume } from '@lit/context';\n\nimport { observes } from '@patternfly/pfe-core/decorators/observes.js';\nimport { getRandomId } from '@patternfly/pfe-core/functions/random.js';\nimport { InternalsController } from '@patternfly/pfe-core/controllers/internals-controller.js';\n\nimport { colorContextConsumer, type ColorTheme } from '../../lib/context/color/consumer.js';\n\nimport { context } from './context.js';\n\nimport styles from './rh-tab.css';\n\nexport class TabExpandEvent extends Event {\n constructor(\n public active: boolean,\n public tab: RhTab,\n ) {\n super('expand', { bubbles: true, cancelable: true });\n }\n}\n\n/**\n * The tab button for use within a rh-tabs element, must be paired with a rh-tab-panel.\n * @slot icon - Can contain an `` or ``\n * @slot - Tab title text\n * @csspart button - element that contains the interactive part of a tab\n * @csspart icon - icon `` element\n * @csspart text - tile text `` element\n * @cssprop {} [--rh-tabs-link-color=#4d4d4d] - Tab link text color\n * @cssprop {} [--rh-tabs-active-border-color=#ff442b] - Tab active border color\n * @cssprop {} [--rh-tabs-link-padding-inline-start=32px] - Tab padding inline start\n * @cssprop {} [--rh-tabs-link-padding-block-start=16px] - Tab padding block start\n * @cssprop {} [--rh-tabs-link-padding-inline-end=32px`] - Tab padding inline end\n * @cssprop {} [--rh-tabs-link-padding-block-end=16px] - Tab padding block end\n * @fires { TabExpandEvent } expand - when a tab expands\n */\n@customElement('rh-tab')\nexport class RhTab extends LitElement {\n static readonly styles = [styles];\n\n /** True when the tab is selected */\n @property({ reflect: true, type: Boolean }) active = false;\n\n /** True when the tab is disabled */\n @property({ reflect: true, type: Boolean }) disabled = false;\n\n @consume({ context, subscribe: true })\n @property({ attribute: false })\n private ctx?: RhTabsContext;\n\n /** Sets color theme based on parent context */\n @colorContextConsumer() private on?: ColorTheme;\n\n @queryAssignedElements({ slot: 'icon', flatten: true }) private icons!: HTMLElement[];\n\n @query('#button') private button!: HTMLButtonElement;\n\n #internals = InternalsController.of(this, { role: 'tab' });\n\n override connectedCallback() {\n super.connectedCallback();\n this.id ||= getRandomId(this.localName);\n this.addEventListener('click', this.#onClick);\n this.addEventListener('keydown', this.#onKeydown);\n this.addEventListener('focus', this.#onFocus);\n }\n\n render() {\n const { on = 'light' } = this;\n const active = this.ctx?.activeTab === this;\n const { box = false, vertical = false, firstTab, lastTab } = this.ctx ?? {};\n const first = firstTab === this;\n const last = lastTab === this;\n return html`\n
\n this.requestUpdate()}\">\n \n
\n `;\n }\n\n #onClick() {\n if (!this.disabled && this.#internals.ariaDisabled !== 'true' && this.ariaDisabled !== 'true') {\n this.#activate();\n if (InternalsController.isSafari) {\n this.focus();\n }\n }\n }\n\n #onFocus() {\n if (!this.ctx?.manual && !this.disabled) {\n this.#activate();\n }\n }\n\n #onKeydown(event: KeyboardEvent) {\n if (!this.disabled) {\n switch (event.key) {\n case 'Enter':\n this.#activate();\n }\n }\n }\n\n #activate() {\n this.dispatchEvent(new TabExpandEvent(this.active, this));\n }\n\n @observes('active')\n private activeChanged(old: boolean) {\n this.#internals.ariaSelected = String(!!this.active);\n if (this.active && !old) {\n this.#activate();\n }\n }\n\n /**\n * if a tab is disabled, then it is also aria-disabled\n * if a tab is removed from disabled its not necessarily\n * not still aria-disabled so we don't remove the aria-disabled\n */\n @observes('disabled')\n private disabledChanged() {\n this.#internals.ariaDisabled = String(!!this.disabled);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'rh-tab': RhTab;\n }\n}\n", "import { LitElement, html } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { getRandomId } from '@patternfly/pfe-core/functions/random.js';\n\nimport { colorContextConsumer, type ColorTheme } from '../../lib/context/color/consumer.js';\n\nimport styles from './rh-tab-panel.css';\n\n/**\n * The tab panel for use within a rh-tabs element, must be paired with a rh-tab.\n *\n * @slot - Panel content should follow guidelines for [tab panel content layout](../guidelines)\n *\n */\n@customElement('rh-tab-panel')\nexport class RhTabPanel extends LitElement {\n static readonly styles = [styles];\n\n /**\n * Sets color theme based on parent context\n */\n @colorContextConsumer() private on?: ColorTheme;\n\n #internals = this.attachInternals();\n\n connectedCallback() {\n super.connectedCallback();\n this.id ||= getRandomId('rh-tab-panel');\n this.hidden ??= true;\n this.#internals.role = 'tabpanel';\n\n /*\n To make it easy for screen reader users to navigate from a tab\n to the beginning of content in the active tabpanel, the tabpanel\n element has tabindex=\"0\" to include the panel in the page Tab sequence.\n It is recommended that all tabpanel elements in a tab set are focusable\n if there are any panels in the set that contain content where the first\n element in the panel is not focusable.\n https://www.w3.org/WAI/ARIA/apg/example-index/tabs/tabs-automatic\n */\n this.tabIndex = 0;\n }\n\n render() {\n const { on = 'light' } = this;\n return html`\n
\n \n
\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'rh-tab-panel': RhTabPanel;\n }\n}\n", "import { html, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { query } from 'lit/decorators/query.js';\nimport { provide } from '@lit/context';\n\nimport { RovingTabindexController } from '@patternfly/pfe-core/controllers/roving-tabindex-controller.js';\nimport { TabsAriaController } from '@patternfly/pfe-core/controllers/tabs-aria-controller.js';\nimport { OverflowController } from '@patternfly/pfe-core/controllers/overflow-controller.js';\nimport { observes } from '@patternfly/pfe-core/decorators/observes.js';\n\nimport { getRandomId } from '@patternfly/pfe-core/functions/random.js';\n\nimport { RhTab, TabExpandEvent } from './rh-tab.js';\nimport { RhTabPanel } from './rh-tab-panel.js';\nimport '@rhds/elements/rh-icon/rh-icon.js';\n\nimport { DirController } from '../../lib/DirController.js';\n\nimport { colorContextConsumer, type ColorTheme } from '../../lib/context/color/consumer.js';\nimport { colorContextProvider, type ColorPalette } from '../../lib/context/color/provider.js';\n\nimport { context, type RhTabsContext } from './context.js';\n\nimport styles from './rh-tabs.css';\n\nexport { RhTab };\n\n/**\n * Tabs are used to organize and navigate between sections of content.\n * They feature a horizontal or a vertical list of section text labels\n * with a content panel below or to the right of the component.\n * @summary Arranges content in a contained view on the same page\n * @csspart container - outer container\n * @csspart tabs-container - tabs container\n * @csspart tabs - tablist\n * @csspart panels - panels\n * @slot tab - Must contain one or more ``\n * @slot - Must contain one or more ``\n * @cssprop {} [--rh-tabs-border-color=#c7c7c7] - Tabs Border color\n * @cssprop {} [--rh-tabs-inset=auto] - Tabs inset\n */\n@customElement('rh-tabs')\nexport class RhTabs extends LitElement {\n static readonly styles = [styles];\n\n /**\n * Label for the scroll left button\n */\n @property({ reflect: true, attribute: 'label-scroll-left' }) labelScrollLeft = 'Scroll left';\n\n /**\n * Label for the scroll right button\n */\n @property({ reflect: true, attribute: 'label-scroll-right' }) labelScrollRight = 'Scroll right';\n\n /**\n * Tabs can be either [automatic](https://w3c.github.io/aria-practices/examples/tabs/tabs-automatic.html) activated\n * or [manual](https://w3c.github.io/aria-practices/examples/tabs/tabs-manual.html)\n */\n @property({ reflect: true, type: Boolean }) manual = false;\n\n /**\n * Index of the active tab\n */\n @property({ attribute: 'active-index', type: Number })\n get activeIndex() {\n return this.#activeIndex;\n }\n\n set activeIndex(v: number) {\n this.#tabindex.atFocusedItemIndex = v;\n this.#activeIndex = v;\n this.activeTab = this.tabs[v];\n for (const tab of this.tabs) {\n if (!this.activeTab?.disabled) {\n tab.active = tab === this.activeTab;\n }\n this.#tabs.panelFor(tab)?.toggleAttribute('hidden', !tab.active);\n }\n }\n\n @property({ attribute: false }) activeTab?: RhTab;\n\n @colorContextConsumer() private on?: ColorTheme;\n\n /** Sets color context for child components, overrides parent context */\n @colorContextProvider()\n @property({ reflect: true, attribute: 'color-palette' }) colorPalette?: ColorPalette;\n\n /** Aligns tabs to the center */\n @property({ reflect: true, type: Boolean }) centered? = false;\n\n /** Sets tabs to a boxed style with or without an inset */\n @property({ reflect: true }) box?: 'box' | 'inset';\n\n /** Sets the alignment of the tabs vertical */\n @property({ reflect: true, type: Boolean }) vertical = false;\n\n @query('[part=\"tabs\"]') private tabList!: HTMLElement;\n\n get #ctx(): RhTabsContext {\n const { activeTab, manual, vertical } = this;\n const box = this.box === null || this.box === '' as 'box' ? 'box' : this.box;\n const firstTab = this.#firstTab;\n const lastTab = this.#lastTab;\n return { activeTab, box, firstTab, lastTab, manual, vertical };\n }\n\n protected get canShowScrollButtons(): boolean {\n return !this.vertical;\n }\n\n #activeIndex = -1;\n\n #overflow = new OverflowController(this);\n\n #tabs = new TabsAriaController(this, {\n isTab: (x): x is RhTab => (x as HTMLElement).localName === 'rh-tab',\n isPanel: (x): x is RhTabPanel => (x as HTMLElement).localName === 'rh-tab-panel',\n isActiveTab: x => x.active,\n });\n\n #tabindex = RovingTabindexController.of(this, {\n getItemsContainer: () => this.tabList,\n getItems: () => this.tabs ?? [],\n });\n\n #dir = new DirController(this);\n\n get tabs(): RhTab[] {\n return this.#tabs.tabs;\n }\n\n get panels() {\n return this.tabs.map(tab => this.#tabs.panelFor(tab));\n }\n\n get #firstTab(): RhTab | undefined {\n const [tab] = this.tabs;\n return tab;\n }\n\n get #lastTab(): RhTab | undefined {\n return this.tabs.at(-1);\n }\n\n @provide({ context }) private ctx = this.#ctx;\n\n override connectedCallback() {\n super.connectedCallback();\n this.id ||= getRandomId(this.localName);\n this.addEventListener('expand', this.#onExpand);\n this.activeIndex = this.#tabindex.atFocusedItemIndex;\n }\n\n override willUpdate(): void {\n if (!this.manual && this.activeIndex !== this.#tabindex.atFocusedItemIndex) {\n this.activeIndex = this.#tabindex.atFocusedItemIndex;\n }\n this.ctx = this.#ctx;\n }\n\n async firstUpdated() {\n this.tabList.addEventListener('scroll', this.#overflow.onScroll.bind(this));\n if (this.tabs.length && this.activeIndex === -1) {\n this.select(this.tabs.findIndex(x => !x.disabled));\n }\n this.#onSlotchange();\n }\n\n override render() {\n const { on = '', vertical = false, box = false, centered = false } = this;\n const inset = this.box === 'inset' ? 'inset' : '';\n const rtl = this.#dir.dir === 'rtl';\n return html`\n
\n
\n
${!this.#overflow.showScrollButtons ? '' : html`\n `}\n
\n \n
${!this.#overflow.showScrollButtons ? '' : html`\n `}\n
\n \n
\n
\n `;\n }\n\n @observes('activeTab')\n protected activeTabChanged(old?: RhTab, activeTab?: RhTab): void {\n if (activeTab?.disabled) {\n this.activeIndex = 0;\n } if (activeTab) {\n this.activeIndex = this.tabs.indexOf(activeTab);\n }\n }\n\n #onSlotchange() {\n this.#overflow.init(this.tabList, this.tabs);\n }\n\n #onExpand(event: Event) {\n if (event instanceof TabExpandEvent\n && !event.defaultPrevented && this.tabs.includes(event.tab)) {\n this.select(event.tab);\n }\n }\n\n select(option: RhTab | number) {\n if (typeof option === 'number') {\n this.activeIndex = option;\n } else {\n this.activeIndex = this.#tabindex.items.indexOf(option);\n }\n this.#overflow.update();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'rh-tabs': RhTabs;\n }\n}\n"], "mappings": "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", "names": ["context", "context", "context", "context", "root", "RhTab", "RhTabPanel", "styles", "RhTabs", "styles"] }