@coveo/atomic 3.32.3-pre.cf57de7ea3 → 3.32.3-pre.d8ef4547c4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atomic/_atomic.esm.js +1 -1
- package/dist/atomic/components/analytics-config.js +1 -1
- package/dist/atomic/components/atomic-folded-result-list.js +1 -1
- package/dist/atomic/components/atomic-folded-result-list.js.map +1 -1
- package/dist/atomic/components/atomic-insight-folded-result-list.js +1 -1
- package/dist/atomic/components/atomic-insight-folded-result-list.js.map +1 -1
- package/dist/atomic/components/atomic-insight-result-list.js +1 -1
- package/dist/atomic/components/atomic-insight-result-list.js.map +1 -1
- package/dist/atomic/components/atomic-ipx-recs-list.js +1 -1
- package/dist/atomic/components/atomic-ipx-recs-list.js.map +1 -1
- package/dist/atomic/components/atomic-recs-list.js +1 -1
- package/dist/atomic/components/atomic-recs-list.js.map +1 -1
- package/dist/atomic/components/atomic-result-list.js +1 -1
- package/dist/atomic/components/atomic-result-list.js.map +1 -1
- package/dist/atomic/components/atomic-result-table-placeholder2.js +1 -1
- package/dist/atomic/components/atomic-result-table-placeholder2.js.map +1 -1
- package/dist/atomic/components/components/commerce/atomic-commerce-breadbox/atomic-commerce-breadbox.js +2 -2
- package/dist/atomic/components/components/commerce/atomic-commerce-breadbox/atomic-commerce-breadbox.tw.css.js +2 -3
- package/dist/atomic/components/components/commerce/atomic-commerce-category-facet/atomic-commerce-category-facet.js +5 -4
- package/dist/atomic/components/components/commerce/atomic-commerce-category-facet/atomic-commerce-category-facet.tw.css.js +2 -3
- package/dist/atomic/components/components/commerce/atomic-commerce-facet/atomic-commerce-facet.js +7 -6
- package/dist/atomic/components/components/commerce/atomic-commerce-facet/atomic-commerce-facet.tw.css.js +3 -0
- package/dist/atomic/components/components/commerce/atomic-commerce-facet-number-input/atomic-commerce-facet-number-input.js +2 -2
- package/dist/atomic/components/components/commerce/atomic-commerce-facet-number-input/atomic-commerce-facet-number-input.tw.css.js +2 -3
- package/dist/atomic/components/components/commerce/atomic-commerce-layout/atomic-commerce-layout.js +2 -2
- package/dist/atomic/components/components/commerce/atomic-commerce-layout/atomic-commerce-layout.tw.css.js +2 -3
- package/dist/atomic/components/components/commerce/atomic-commerce-numeric-facet/atomic-commerce-numeric-facet.js +6 -5
- package/dist/atomic/components/components/commerce/atomic-commerce-numeric-facet/atomic-commerce-numeric-facet.tw.css.js +3 -0
- package/dist/atomic/components/components/commerce/atomic-commerce-product-list/atomic-commerce-product-list.js +2 -2
- package/dist/atomic/components/components/commerce/atomic-commerce-product-list/atomic-commerce-product-list.tw.css.js +2 -3
- package/dist/atomic/components/components/commerce/atomic-commerce-recommendation-list/atomic-commerce-recommendation-list.js +2 -2
- package/dist/atomic/components/components/commerce/atomic-commerce-recommendation-list/atomic-commerce-recommendation-list.tw.css.js +2 -3
- package/dist/atomic/components/components/commerce/atomic-commerce-refine-modal/atomic-commerce-refine-modal.js +2 -2
- package/dist/atomic/components/components/commerce/atomic-commerce-refine-modal/atomic-commerce-refine-modal.tw.css.js +2 -3
- package/dist/atomic/components/components/commerce/atomic-commerce-refine-toggle/atomic-commerce-refine-toggle.tw.css.js +2 -0
- package/dist/atomic/components/components/commerce/atomic-commerce-search-box/atomic-commerce-search-box.js +3 -3
- package/dist/atomic/components/components/commerce/atomic-commerce-search-box/atomic-commerce-search-box.tw.css.js +3 -0
- package/dist/atomic/components/components/commerce/atomic-commerce-timeframe-facet/atomic-commerce-timeframe-facet.js +6 -5
- package/dist/atomic/components/components/commerce/atomic-commerce-timeframe-facet/atomic-commerce-timeframe-facet.tw.css.js +3 -0
- package/dist/atomic/components/components/commerce/atomic-product/atomic-product.js +2 -2
- package/dist/atomic/components/components/commerce/atomic-product/atomic-product.tw.css.js +2 -3
- package/dist/atomic/components/components/commerce/atomic-product-children/atomic-product-children.tw.css.js +2 -0
- package/dist/atomic/components/components/commerce/atomic-product-link/atomic-product-link.js +2 -2
- package/dist/atomic/components/components/commerce/atomic-product-link/atomic-product-link.tw.css.js +2 -3
- package/dist/atomic/components/components/commerce/atomic-product-rating/atomic-product-rating.js +6 -5
- package/dist/atomic/components/components/commerce/atomic-product-rating/atomic-product-rating.tw.css.js +3 -0
- package/dist/atomic/components/components/common/atomic-facet-date-input/atomic-facet-date-input.js +4 -2
- package/dist/atomic/components/components/common/atomic-rating/atomic-rating.tw.css.js +1 -2
- package/dist/atomic/components/global/environment.js +1 -1
- package/dist/atomic/components/utils/coveo.tw.css.js +1 -1
- package/dist/atomic/p-138bf395.entry.js +2 -0
- package/dist/atomic/{p-9dfc09f5.entry.js.map → p-138bf395.entry.js.map} +1 -1
- package/dist/atomic/{p-570070ff.entry.js → p-1fbcf15f.entry.js} +2 -2
- package/dist/atomic/p-2982ebb7.entry.js +2 -0
- package/dist/atomic/{p-a6e74240.entry.js.map → p-2982ebb7.entry.js.map} +1 -1
- package/dist/atomic/p-2eac467d.entry.js +2 -0
- package/dist/atomic/{p-d6fddc20.entry.js.map → p-2eac467d.entry.js.map} +1 -1
- package/dist/atomic/{p-3c0f4e14.entry.js → p-35929829.entry.js} +2 -2
- package/dist/atomic/{p-3c0f4e14.entry.js.map → p-35929829.entry.js.map} +1 -1
- package/dist/atomic/{p-e842ec4f.entry.js → p-67a47b7b.entry.js} +2 -2
- package/dist/atomic/{p-e842ec4f.entry.js.map → p-67a47b7b.entry.js.map} +1 -1
- package/dist/atomic/{p-c3958d05.entry.js → p-7f62a39d.entry.js} +2 -2
- package/dist/atomic/{p-c3314b9f.entry.js → p-81f316a4.entry.js} +2 -2
- package/dist/atomic/p-8a74eff4.entry.js +2 -0
- package/dist/atomic/{p-76501bba.entry.js.map → p-8a74eff4.entry.js.map} +1 -1
- package/dist/atomic/p-a006f8bc.entry.js +2 -0
- package/dist/atomic/{p-98f168f4.entry.js.map → p-a006f8bc.entry.js.map} +1 -1
- package/dist/atomic/{p-46729cc0.js → p-f0ec2e17.js} +2 -2
- package/dist/cjs/{analytics-config-c5cffe29.js → analytics-config-c1e1e561.js} +2 -2
- package/dist/cjs/{analytics-config-c5cffe29.js.map → analytics-config-c1e1e561.js.map} +1 -1
- package/dist/cjs/atomic-folded-result-list.cjs.entry.js +1 -1
- package/dist/cjs/atomic-folded-result-list.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-folded-result-list.cjs.entry.js +1 -1
- package/dist/cjs/atomic-insight-folded-result-list.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-interface.cjs.entry.js +1 -1
- package/dist/cjs/atomic-insight-result-list.cjs.entry.js +1 -1
- package/dist/cjs/atomic-insight-result-list.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-ipx-recs-list.cjs.entry.js +1 -1
- package/dist/cjs/atomic-ipx-recs-list.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-recs-interface.cjs.entry.js +1 -1
- package/dist/cjs/atomic-recs-list.cjs.entry.js +1 -1
- package/dist/cjs/atomic-recs-list.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-result-list.cjs.entry.js +1 -1
- package/dist/cjs/atomic-result-list.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-result-placeholder_8.cjs.entry.js +1 -1
- package/dist/cjs/atomic-result-placeholder_8.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-search-interface.cjs.entry.js +1 -1
- package/dist/cjs/version.cjs.js +2 -2
- package/dist/esm/{analytics-config-5a0ff313.js → analytics-config-38f7c123.js} +2 -2
- package/dist/esm/{analytics-config-5a0ff313.js.map → analytics-config-38f7c123.js.map} +1 -1
- package/dist/esm/atomic-folded-result-list.entry.js +1 -1
- package/dist/esm/atomic-folded-result-list.entry.js.map +1 -1
- package/dist/esm/atomic-insight-folded-result-list.entry.js +1 -1
- package/dist/esm/atomic-insight-folded-result-list.entry.js.map +1 -1
- package/dist/esm/atomic-insight-interface.entry.js +1 -1
- package/dist/esm/atomic-insight-result-list.entry.js +1 -1
- package/dist/esm/atomic-insight-result-list.entry.js.map +1 -1
- package/dist/esm/atomic-ipx-recs-list.entry.js +1 -1
- package/dist/esm/atomic-ipx-recs-list.entry.js.map +1 -1
- package/dist/esm/atomic-recs-interface.entry.js +1 -1
- package/dist/esm/atomic-recs-list.entry.js +1 -1
- package/dist/esm/atomic-recs-list.entry.js.map +1 -1
- package/dist/esm/atomic-result-list.entry.js +1 -1
- package/dist/esm/atomic-result-list.entry.js.map +1 -1
- package/dist/esm/atomic-result-placeholder_8.entry.js +1 -1
- package/dist/esm/atomic-result-placeholder_8.entry.js.map +1 -1
- package/dist/esm/atomic-search-interface.entry.js +1 -1
- package/dist/esm/version.js +2 -2
- package/dist/types/components/commerce/atomic-commerce-category-facet/atomic-commerce-category-facet.d.ts +1 -3
- package/dist/types/components/commerce/atomic-commerce-facet/atomic-commerce-facet.d.ts +1 -3
- package/dist/types/components/commerce/atomic-commerce-numeric-facet/atomic-commerce-numeric-facet.d.ts +1 -3
- package/dist/types/components/commerce/atomic-commerce-timeframe-facet/atomic-commerce-timeframe-facet.d.ts +1 -3
- package/dist/types/components/commerce/atomic-product-rating/atomic-product-rating.d.ts +1 -1
- package/dist/types/components/common/atomic-facet-date-input/atomic-facet-date-input.d.ts +2 -3
- package/docs/atomic-docs.json +1 -1
- package/package.json +3 -3
- package/dist/atomic/p-76501bba.entry.js +0 -2
- package/dist/atomic/p-98f168f4.entry.js +0 -2
- package/dist/atomic/p-9dfc09f5.entry.js +0 -2
- package/dist/atomic/p-a6e74240.entry.js +0 -2
- package/dist/atomic/p-d6fddc20.entry.js +0 -2
- package/dist/types/components/commerce/atomic-commerce-breadbox/atomic-commerce-breadbox.tw.css.d.ts +0 -2
- package/dist/types/components/commerce/atomic-commerce-category-facet/atomic-commerce-category-facet.tw.css.d.ts +0 -2
- package/dist/types/components/commerce/atomic-commerce-facet-number-input/atomic-commerce-facet-number-input.tw.css.d.ts +0 -2
- package/dist/types/components/commerce/atomic-commerce-layout/atomic-commerce-layout.tw.css.d.ts +0 -2
- package/dist/types/components/commerce/atomic-commerce-product-list/atomic-commerce-product-list.tw.css.d.ts +0 -2
- package/dist/types/components/commerce/atomic-commerce-recommendation-list/atomic-commerce-recommendation-list.tw.css.d.ts +0 -2
- package/dist/types/components/commerce/atomic-commerce-refine-modal/atomic-commerce-refine-modal.tw.css.d.ts +0 -2
- package/dist/types/components/commerce/atomic-product/atomic-product.tw.css.d.ts +0 -2
- package/dist/types/components/commerce/atomic-product-link/atomic-product-link.tw.css.d.ts +0 -2
- /package/dist/atomic/{p-570070ff.entry.js.map → p-1fbcf15f.entry.js.map} +0 -0
- /package/dist/atomic/{p-c3958d05.entry.js.map → p-7f62a39d.entry.js.map} +0 -0
- /package/dist/atomic/{p-c3314b9f.entry.js.map → p-81f316a4.entry.js.map} +0 -0
- /package/dist/atomic/{p-46729cc0.js.map → p-f0ec2e17.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["atomicRecsListCss","AtomicRecsListStyle0","AtomicRecsList","this","loadingFlag","randomID","isAppLoaded","resultTemplateRegistered","templateHasError","currentPage","recommendation","display","density","imageSize","numberOfRecommendations","headingLevel","watchNumberOfRecommendationsPerPage","setRenderFunction","resultRenderingFunction","itemRenderingFunction","previousPage","numberOfPages","nextPage","initialize","validateNumberOfRecommendationsPerPage","validateRecommendationIdentifier","updateOriginLevel2","recommendationList","buildRecommendationList","bindings","engine","options","id","itemTemplateProvider","ItemTemplateProvider","includeDefaultTemplate","templateElements","Array","from","host","querySelectorAll","getResultTemplateRegistered","getTemplateHasError","setResultTemplateRegistered","value","setTemplateHasError","itemListCommon","ItemListCommon","engineSubscribe","subscribe","getCurrentNumberOfItems","recommendationListState","recommendations","length","getIsLoading","isLoading","nextNewItemTarget","focusTarget","store","createAppLoadedListener","nextNewResultTarget","FocusTargetController","recommendationListStateWithAugment","firstRequestExecuted","searchResponseId","hasError","error","hasItems","results","subsetRecommendations","msg","NumberValue","min","max","validate","numberOfRecommendationsPerPage","Error","recListWithRecommendation","document","logger","warn","label","action","loadConfigurationActions","setOriginLevel2","originLevel2","dispatch","renderHeading","h","Heading","level","part","class","i18n","t","currentIndex","Math","abs","slice","ceil","hasPagination","shouldRenderPagination","getPropsForAtomicRecsResult","linkContent","getLinkTemplateContent","interactiveResult","buildRecsInteractiveResult","result","renderingFunction","key","getResultId","uniqueId","content","getTemplateContent","stopPropagation","computeListDisplayClasses","displayPlaceholders","getItemListDisplayClasses","renderAsGrid","i","propsForAtomicRecsResult","DisplayGrid","selectorForItem","item","setRef","element","setNewResultRef","renderListOfRecommendations","updateBreakpoints","listClasses","DisplayWrapper","ResultsPlaceholdersGuard","numberOfPlaceholders","ItemDisplayGuard","map","render","Fragment","Carousel","__decorate","InitializeBindings","BindStateToController"],"sources":["src/components/recommendations/atomic-recs-list/atomic-recs-list.pcss?tag=atomic-recs-list&encapsulation=shadow","src/components/recommendations/atomic-recs-list/atomic-recs-list.tsx"],"sourcesContent":["@import '../../../global/global.pcss';\n@import '../../common/item-list/styles/mixins.pcss';\n@import '../../common/item-list/styles/placeholders.pcss';\n\n:host {\n @apply atomic-grid-clickable-elements;\n @apply atomic-grid-display-common;\n display: block;\n\n /**\n * @prop --atomic-recs-number-of-columns: Number of columns for the recommendation list.\n */\n .list-root {\n @apply atomic-grid-with-cards;\n grid-template-columns: repeat(var(--atomic-recs-number-of-columns, 1), minmax(0, 1fr));\n }\n\n [part='label'] {\n @apply font-sans text-2xl font-bold;\n }\n\n atomic-result:not(.hydrated) {\n visibility: hidden;\n }\n}\n","import {NumberValue} from '@coveo/bueno';\nimport {\n buildRecommendationList,\n RecommendationList,\n RecommendationListState,\n loadConfigurationActions,\n buildInteractiveResult as buildRecsInteractiveResult,\n Result as RecsResult,\n} from '@coveo/headless/recommendation';\nimport {\n Component,\n State,\n Element,\n Prop,\n Method,\n h,\n Fragment,\n Watch,\n} from '@stencil/core';\nimport {\n BindStateToController,\n InitializableComponent,\n InitializeBindings,\n} from '../../../utils/initialization-utils';\nimport {FocusTargetController} from '../../../utils/stencil-accessibility-utils';\nimport {randomID} from '../../../utils/utils';\nimport {ResultsPlaceholdersGuard} from '../../common/atomic-result-placeholder/stencil-placeholders';\nimport {createAppLoadedListener} from '../../common/interface/store';\nimport {ItemDisplayGuard} from '../../common/item-list/item-display-guard';\nimport {ItemTemplateProvider} from '../../common/item-list/item-template-provider';\nimport {DisplayGrid} from '../../common/item-list/stencil-display-grid';\nimport {DisplayWrapper} from '../../common/item-list/stencil-display-wrapper';\nimport {\n ItemListCommon,\n ItemRenderingFunction,\n} from '../../common/item-list/stencil-item-list-common';\nimport {\n ItemDisplayDensity,\n ItemDisplayImageSize,\n ItemDisplayBasicLayout,\n getItemListDisplayClasses,\n} from '../../common/layout/display-options';\nimport {Carousel} from '../../common/stencil-carousel';\nimport {Heading} from '../../common/stencil-heading';\nimport {RecsBindings} from '../atomic-recs-interface/atomic-recs-interface';\n\n/**\n * The `atomic-recs-list` component displays recommendations by applying one or more result templates.\n *\n * @part result-list - The element containing the list of results.\n * @part result-list-grid-clickable-container - The parent of the result & the clickable link encompassing it.\n * @part result-list-grid-clickable - The clickable link encompassing the result.\n * @part label - The label of the result list.\n * @part previous-button - The previous button.\n * @part next-button - The next button.\n * @part indicators - The list of indicators.\n * @part indicator - A single indicator.\n * @part active-indicator - The active indicator.\n * @slot default - The default slot where to insert the template element.\n */\n@Component({\n tag: 'atomic-recs-list',\n styleUrl: 'atomic-recs-list.pcss',\n shadow: true,\n})\nexport class AtomicRecsList implements InitializableComponent<RecsBindings> {\n @InitializeBindings() public bindings!: RecsBindings;\n public recommendationList!: RecommendationList;\n private loadingFlag = randomID('firstRecommendationLoaded-');\n private itemRenderingFunction: ItemRenderingFunction;\n private itemTemplateProvider!: ItemTemplateProvider;\n private nextNewResultTarget?: FocusTargetController;\n private itemListCommon!: ItemListCommon;\n\n @Element() public host!: HTMLDivElement;\n\n @State() public error!: Error;\n @State() private isAppLoaded = false;\n\n @State() private resultTemplateRegistered = false;\n @State() private templateHasError = false;\n @State() private currentPage = 0;\n @BindStateToController('recommendationList')\n @State()\n public recommendationListState!: RecommendationListState;\n\n /**\n * The Recommendation identifier used by the Coveo platform to retrieve recommended documents.\n * Make sure to set a different value for each atomic-recs-list in your page.\n */\n @Prop({reflect: true}) public recommendation = 'Recommendation';\n\n /**\n * The layout to apply when displaying results themselves. This does not affect the display of the surrounding list itself.\n * To modify the number of recommendations per column, modify the --atomic-recs-number-of-columns CSS variable.\n */\n @Prop({reflect: true}) public display: ItemDisplayBasicLayout = 'list';\n /**\n * The spacing of various elements in the result list, including the gap between results, the gap between parts of a result, and the font sizes of different parts in a result.\n */\n @Prop({reflect: true}) public density: ItemDisplayDensity = 'normal';\n /**\n * The expected size of the image displayed in the results.\n */\n @Prop({reflect: true})\n public imageSize: ItemDisplayImageSize = 'small';\n\n /**\n * The total number of recommendations to display.\n * This does not modify the number of recommendations per column. To do so, modify the --atomic-recs-number-of-columns CSS variable.\n */\n @Prop({reflect: true}) public numberOfRecommendations = 10;\n\n /**\n * The number of recommendations to display, per page.\n * Setting a value greater than and lower than the numberOfRecommendations value activates the carousel.\n * This does not affect the display of the list itself, only the number of recommendation pages.\n */\n @Prop({reflect: true}) public numberOfRecommendationsPerPage?: number;\n\n /**\n * The non-localized label for the list of recommendations.\n */\n @Prop({reflect: true}) public label?: string;\n\n /**\n * The [heading level](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements) to use for the heading label, from 1 to 6.\n */\n @Prop({reflect: true}) public headingLevel = 0;\n\n @Watch('numberOfRecommendationsPerPage')\n public async watchNumberOfRecommendationsPerPage() {\n this.currentPage = 0;\n }\n\n /**\n * Sets a rendering function to bypass the standard HTML template mechanism for rendering results.\n * You can use this function while working with web frameworks that don't use plain HTML syntax, e.g., React, Angular or Vue.\n *\n * Do not use this method if you integrate Atomic in a plain HTML deployment.\n *\n * @param resultRenderingFunction\n */\n @Method() public async setRenderFunction(\n resultRenderingFunction: ItemRenderingFunction\n ) {\n this.itemRenderingFunction = resultRenderingFunction;\n }\n\n /**\n * Moves to the previous page, when the carousel is activated.\n */\n @Method() public async previousPage() {\n this.currentPage =\n this.currentPage - 1 < 0 ? this.numberOfPages - 1 : this.currentPage - 1;\n }\n\n /**\n * Moves to the next page, when the carousel is activated.\n */\n @Method() public async nextPage() {\n this.currentPage = (this.currentPage + 1) % this.numberOfPages;\n }\n\n public initialize() {\n this.validateNumberOfRecommendationsPerPage();\n this.validateRecommendationIdentifier();\n this.updateOriginLevel2();\n this.recommendationList = buildRecommendationList(this.bindings.engine, {\n options: {\n id: this.recommendation,\n numberOfRecommendations: this.numberOfRecommendations,\n },\n });\n\n this.itemTemplateProvider = new ItemTemplateProvider({\n includeDefaultTemplate: true,\n templateElements: Array.from(\n this.host.querySelectorAll('atomic-recs-result-template')\n ),\n getResultTemplateRegistered: () => this.resultTemplateRegistered,\n getTemplateHasError: () => this.templateHasError,\n setResultTemplateRegistered: (value: boolean) => {\n this.resultTemplateRegistered = value;\n },\n setTemplateHasError: (value: boolean) => {\n this.templateHasError = value;\n },\n bindings: this.bindings,\n });\n\n this.itemListCommon = new ItemListCommon({\n engineSubscribe: this.bindings.engine.subscribe,\n getCurrentNumberOfItems: () =>\n this.recommendationListState.recommendations.length,\n getIsLoading: () => this.recommendationListState.isLoading,\n host: this.host,\n loadingFlag: this.loadingFlag,\n nextNewItemTarget: this.focusTarget,\n store: this.bindings.store,\n });\n\n createAppLoadedListener(this.bindings.store, (isAppLoaded) => {\n this.isAppLoaded = isAppLoaded;\n });\n }\n\n public get focusTarget() {\n if (!this.nextNewResultTarget) {\n this.nextNewResultTarget = new FocusTargetController(this);\n }\n return this.nextNewResultTarget;\n }\n\n private get recommendationListStateWithAugment() {\n return {\n ...this.recommendationListState,\n firstRequestExecuted:\n this.recommendationListState.searchResponseId !== '',\n hasError: this.recommendationListState.error !== null,\n hasItems: this.recommendationListState.recommendations.length !== 0,\n results: this.subsetRecommendations,\n };\n }\n\n private validateNumberOfRecommendationsPerPage() {\n const msg = new NumberValue({\n min: 1,\n max: this.numberOfRecommendations - 1,\n }).validate(this.numberOfRecommendationsPerPage!);\n\n if (msg) {\n this.error = new Error(\n `The \"numberOfRecommendationsPerPage\" is invalid: ${msg}`\n );\n }\n }\n\n private validateRecommendationIdentifier() {\n const recListWithRecommendation = document.querySelectorAll(\n `atomic-recs-list[recommendation=\"${this.recommendation}\"]`\n );\n\n if (recListWithRecommendation.length > 1) {\n this.bindings.engine.logger.warn(\n `There are multiple atomic-recs-list in this page with the same recommendation property \"${this.recommendation}\". Make sure to set a different recommendation property for each.`\n );\n }\n }\n\n private updateOriginLevel2() {\n if (this.label) {\n const action = loadConfigurationActions(\n this.bindings.engine\n ).setOriginLevel2({\n originLevel2: this.label,\n });\n\n this.bindings.engine.dispatch(action);\n }\n }\n\n private renderHeading() {\n if (!this.label) {\n return;\n }\n\n if (this.recommendationListStateWithAugment.hasError) {\n return;\n }\n\n if (\n this.recommendationListStateWithAugment.firstRequestExecuted &&\n !this.recommendationListStateWithAugment.hasItems\n ) {\n return;\n }\n\n return (\n <Heading level={this.headingLevel} part=\"label\" class=\"m-0 mb-2\">\n {this.bindings.i18n.t(this.label)}\n </Heading>\n );\n }\n\n private get currentIndex() {\n return Math.abs(\n (this.currentPage * this.numberOfRecommendationsPerPage!) %\n this.recommendationListState.recommendations.length\n );\n }\n\n private get subsetRecommendations() {\n if (!this.numberOfRecommendationsPerPage) {\n return this.recommendationListState.recommendations;\n }\n\n return this.recommendationListState.recommendations.slice(\n this.currentIndex,\n this.currentIndex + this.numberOfRecommendationsPerPage\n );\n }\n\n private get numberOfPages() {\n return Math.ceil(\n this.recommendationListState.recommendations.length /\n this.numberOfRecommendationsPerPage!\n );\n }\n\n private get hasPagination() {\n return this.numberOfPages > 1;\n }\n\n private get shouldRenderPagination() {\n return (\n this.hasPagination && this.recommendationListStateWithAugment.hasItems\n );\n }\n\n private getPropsForAtomicRecsResult(recommendation: RecsResult) {\n const linkContent =\n this.itemTemplateProvider.getLinkTemplateContent(recommendation);\n\n return {\n interactiveResult: buildRecsInteractiveResult(this.bindings.engine, {\n options: {result: recommendation},\n }),\n result: recommendation,\n renderingFunction: this.itemRenderingFunction,\n loadingFlag: this.loadingFlag,\n key: this.itemListCommon.getResultId(\n recommendation.uniqueId,\n this.recommendationListState.searchResponseId,\n this.density,\n this.imageSize\n ),\n content: this.itemTemplateProvider.getTemplateContent(recommendation),\n linkContent,\n stopPropagation: !!linkContent,\n store: this.bindings.store,\n density: this.density,\n display: this.display,\n imageSize: this.imageSize,\n };\n }\n\n private computeListDisplayClasses() {\n const displayPlaceholders = !this.isAppLoaded;\n\n return getItemListDisplayClasses(\n 'grid',\n this.density,\n this.imageSize,\n this.recommendationListState.isLoading,\n displayPlaceholders\n );\n }\n\n private renderAsGrid(recommendation: RecsResult, i: number) {\n const propsForAtomicRecsResult =\n this.getPropsForAtomicRecsResult(recommendation);\n return (\n <DisplayGrid\n selectorForItem=\"atomic-recs-result\"\n item={recommendation}\n {...propsForAtomicRecsResult.interactiveResult}\n setRef={(element) =>\n element && this.itemListCommon.setNewResultRef(element, i)\n }\n >\n <atomic-recs-result {...propsForAtomicRecsResult}></atomic-recs-result>\n </DisplayGrid>\n );\n }\n\n private renderListOfRecommendations() {\n this.itemListCommon.updateBreakpoints();\n const listClasses = this.computeListDisplayClasses();\n\n if (\n !this.resultTemplateRegistered ||\n this.itemTemplateProvider.hasError ||\n this.error\n ) {\n return;\n }\n\n return (\n <DisplayWrapper listClasses={listClasses} display=\"grid\">\n <ResultsPlaceholdersGuard\n density={this.density}\n display={this.display}\n imageSize={this.imageSize}\n displayPlaceholders={!this.isAppLoaded}\n numberOfPlaceholders={\n this.numberOfRecommendationsPerPage ?? this.numberOfRecommendations\n }\n ></ResultsPlaceholdersGuard>\n <ItemDisplayGuard {...this.recommendationListStateWithAugment}>\n {this.subsetRecommendations.map((recommendation, i) => {\n return this.renderAsGrid(recommendation, i);\n })}\n </ItemDisplayGuard>\n </DisplayWrapper>\n );\n }\n\n public render() {\n return (\n <Fragment>\n {this.renderHeading()}\n {this.shouldRenderPagination ? (\n <Carousel\n bindings={this.bindings}\n currentPage={this.currentPage}\n nextPage={() => this.nextPage()}\n previousPage={() => this.previousPage()}\n numberOfPages={this.numberOfPages}\n >\n {this.renderListOfRecommendations()}\n </Carousel>\n ) : (\n this.renderListOfRecommendations()\n )}\n </Fragment>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["atomicRecsListCss","AtomicRecsListStyle0","AtomicRecsList","this","loadingFlag","randomID","isAppLoaded","resultTemplateRegistered","templateHasError","currentPage","recommendation","display","density","imageSize","numberOfRecommendations","headingLevel","watchNumberOfRecommendationsPerPage","setRenderFunction","resultRenderingFunction","itemRenderingFunction","previousPage","numberOfPages","nextPage","initialize","validateNumberOfRecommendationsPerPage","validateRecommendationIdentifier","updateOriginLevel2","recommendationList","buildRecommendationList","bindings","engine","options","id","itemTemplateProvider","ItemTemplateProvider","includeDefaultTemplate","templateElements","Array","from","host","querySelectorAll","getResultTemplateRegistered","getTemplateHasError","setResultTemplateRegistered","value","setTemplateHasError","itemListCommon","ItemListCommon","engineSubscribe","subscribe","getCurrentNumberOfItems","recommendationListState","recommendations","length","getIsLoading","isLoading","nextNewItemTarget","focusTarget","store","createAppLoadedListener","nextNewResultTarget","FocusTargetController","recommendationListStateWithAugment","firstRequestExecuted","searchResponseId","hasError","error","hasItems","results","subsetRecommendations","msg","NumberValue","min","max","validate","numberOfRecommendationsPerPage","Error","recListWithRecommendation","document","logger","warn","label","action","loadConfigurationActions","setOriginLevel2","originLevel2","dispatch","renderHeading","h","Heading","level","part","class","i18n","t","currentIndex","Math","abs","slice","ceil","hasPagination","shouldRenderPagination","getPropsForAtomicRecsResult","linkContent","getLinkTemplateContent","interactiveResult","buildRecsInteractiveResult","result","renderingFunction","key","getResultId","uniqueId","content","getTemplateContent","stopPropagation","computeListDisplayClasses","displayPlaceholders","getItemListDisplayClasses","renderAsGrid","i","propsForAtomicRecsResult","DisplayGrid","selectorForItem","item","setRef","element","setNewResultRef","renderListOfRecommendations","updateBreakpoints","listClasses","DisplayWrapper","ResultsPlaceholdersGuard","numberOfPlaceholders","ItemDisplayGuard","map","render","Fragment","Carousel","__decorate","InitializeBindings","BindStateToController"],"sources":["src/components/recommendations/atomic-recs-list/atomic-recs-list.pcss?tag=atomic-recs-list&encapsulation=shadow","src/components/recommendations/atomic-recs-list/atomic-recs-list.tsx"],"sourcesContent":["@import '../../../global/global.pcss';\n@import '../../common/item-list/styles/mixins.pcss';\n@import '../../common/item-list/styles/placeholders.pcss';\n\n:host {\n @apply atomic-grid-clickable-elements;\n @apply atomic-grid-display-common;\n display: block;\n\n /**\n * @prop --atomic-recs-number-of-columns: Number of columns for the recommendation list.\n */\n .list-root {\n @apply atomic-grid-with-cards;\n grid-template-columns: repeat(var(--atomic-recs-number-of-columns, 1), minmax(0, 1fr));\n }\n\n [part='label'] {\n @apply font-sans text-2xl font-bold;\n }\n\n atomic-result:not(.hydrated) {\n visibility: hidden;\n }\n}\n","import {NumberValue} from '@coveo/bueno';\nimport {\n buildRecommendationList,\n RecommendationList,\n RecommendationListState,\n loadConfigurationActions,\n buildInteractiveResult as buildRecsInteractiveResult,\n Result as RecsResult,\n} from '@coveo/headless/recommendation';\nimport {\n Component,\n State,\n Element,\n Prop,\n Method,\n h,\n Fragment,\n Watch,\n} from '@stencil/core';\nimport {\n BindStateToController,\n InitializableComponent,\n InitializeBindings,\n} from '../../../utils/initialization-utils';\nimport {FocusTargetController} from '../../../utils/stencil-accessibility-utils';\nimport {randomID} from '../../../utils/utils';\nimport {ResultsPlaceholdersGuard} from '../../common/atomic-result-placeholder/stencil-placeholders';\nimport {createAppLoadedListener} from '../../common/interface/store';\nimport {ItemDisplayGuard} from '../../common/item-list/item-display-guard';\nimport {ItemTemplateProvider} from '../../common/item-list/item-template-provider';\nimport {DisplayGrid} from '../../common/item-list/stencil-display-grid';\nimport {DisplayWrapper} from '../../common/item-list/stencil-display-wrapper';\nimport {\n ItemListCommon,\n ItemRenderingFunction,\n} from '../../common/item-list/stencil-item-list-common';\nimport {\n ItemDisplayDensity,\n ItemDisplayImageSize,\n ItemDisplayBasicLayout,\n getItemListDisplayClasses,\n} from '../../common/layout/display-options';\nimport {Carousel} from '../../common/stencil-carousel';\nimport {Heading} from '../../common/stencil-heading';\nimport {RecsBindings} from '../atomic-recs-interface/atomic-recs-interface';\n\n/**\n * The `atomic-recs-list` component displays recommendations by applying one or more result templates.\n *\n * @part result-list - The element containing the list of results.\n * @part result-list-grid-clickable-container - The parent of the result & the clickable link encompassing it.\n * @part result-list-grid-clickable - The clickable link encompassing the result.\n * @part label - The label of the result list.\n * @part previous-button - The previous button.\n * @part next-button - The next button.\n * @part indicators - The list of indicators.\n * @part indicator - A single indicator.\n * @part active-indicator - The active indicator.\n * @slot default - The default slot where to insert the template element.\n */\n@Component({\n tag: 'atomic-recs-list',\n styleUrl: 'atomic-recs-list.pcss',\n shadow: true,\n})\nexport class AtomicRecsList implements InitializableComponent<RecsBindings> {\n @InitializeBindings() public bindings!: RecsBindings;\n public recommendationList!: RecommendationList;\n private loadingFlag = randomID('firstRecommendationLoaded-');\n private itemRenderingFunction: ItemRenderingFunction;\n private itemTemplateProvider!: ItemTemplateProvider;\n private nextNewResultTarget?: FocusTargetController;\n private itemListCommon!: ItemListCommon;\n\n @Element() public host!: HTMLDivElement;\n\n @State() public error!: Error;\n @State() private isAppLoaded = false;\n\n @State() private resultTemplateRegistered = false;\n @State() private templateHasError = false;\n @State() private currentPage = 0;\n @BindStateToController('recommendationList')\n @State()\n public recommendationListState!: RecommendationListState;\n\n /**\n * The Recommendation identifier used by the Coveo platform to retrieve recommended documents.\n * Make sure to set a different value for each atomic-recs-list in your page.\n */\n @Prop({reflect: true}) public recommendation = 'Recommendation';\n\n /**\n * The layout to apply when displaying results themselves. This does not affect the display of the surrounding list itself.\n * To modify the number of recommendations per column, modify the --atomic-recs-number-of-columns CSS variable.\n */\n @Prop({reflect: true}) public display: ItemDisplayBasicLayout = 'list';\n /**\n * The spacing of various elements in the result list, including the gap between results, the gap between parts of a result, and the font sizes of different parts in a result.\n */\n @Prop({reflect: true}) public density: ItemDisplayDensity = 'normal';\n /**\n * The expected size of the image displayed in the results.\n */\n @Prop({reflect: true})\n public imageSize: ItemDisplayImageSize = 'small';\n\n /**\n * The total number of recommendations to display.\n * This does not modify the number of recommendations per column. To do so, modify the --atomic-recs-number-of-columns CSS variable.\n */\n @Prop({reflect: true}) public numberOfRecommendations = 10;\n\n /**\n * The number of recommendations to display, per page.\n * Setting a value greater than and lower than the numberOfRecommendations value activates the carousel.\n * This does not affect the display of the list itself, only the number of recommendation pages.\n */\n @Prop({reflect: true}) public numberOfRecommendationsPerPage?: number;\n\n /**\n * The non-localized label for the list of recommendations.\n */\n @Prop({reflect: true}) public label?: string;\n\n /**\n * The [heading level](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements) to use for the heading label, from 1 to 6.\n */\n @Prop({reflect: true}) public headingLevel = 0;\n\n @Watch('numberOfRecommendationsPerPage')\n public async watchNumberOfRecommendationsPerPage() {\n this.currentPage = 0;\n }\n\n /**\n * Sets a rendering function to bypass the standard HTML template mechanism for rendering results.\n * You can use this function while working with web frameworks that don't use plain HTML syntax, e.g., React, Angular or Vue.\n *\n * Do not use this method if you integrate Atomic in a plain HTML deployment.\n *\n * @param resultRenderingFunction\n */\n @Method() public async setRenderFunction(\n resultRenderingFunction: ItemRenderingFunction\n ) {\n this.itemRenderingFunction = resultRenderingFunction;\n }\n\n /**\n * Moves to the previous page, when the carousel is activated.\n */\n @Method() public async previousPage() {\n this.currentPage =\n this.currentPage - 1 < 0 ? this.numberOfPages - 1 : this.currentPage - 1;\n }\n\n /**\n * Moves to the next page, when the carousel is activated.\n */\n @Method() public async nextPage() {\n this.currentPage = (this.currentPage + 1) % this.numberOfPages;\n }\n\n public initialize() {\n this.validateNumberOfRecommendationsPerPage();\n this.validateRecommendationIdentifier();\n this.updateOriginLevel2();\n this.recommendationList = buildRecommendationList(this.bindings.engine, {\n options: {\n id: this.recommendation,\n numberOfRecommendations: this.numberOfRecommendations,\n },\n });\n\n this.itemTemplateProvider = new ItemTemplateProvider({\n includeDefaultTemplate: true,\n templateElements: Array.from(\n this.host.querySelectorAll('atomic-recs-result-template')\n ),\n getResultTemplateRegistered: () => this.resultTemplateRegistered,\n getTemplateHasError: () => this.templateHasError,\n setResultTemplateRegistered: (value: boolean) => {\n this.resultTemplateRegistered = value;\n },\n setTemplateHasError: (value: boolean) => {\n this.templateHasError = value;\n },\n bindings: this.bindings,\n });\n\n this.itemListCommon = new ItemListCommon({\n engineSubscribe: this.bindings.engine.subscribe,\n getCurrentNumberOfItems: () =>\n this.recommendationListState.recommendations.length,\n getIsLoading: () => this.recommendationListState.isLoading,\n host: this.host,\n loadingFlag: this.loadingFlag,\n nextNewItemTarget: this.focusTarget,\n store: this.bindings.store,\n });\n\n createAppLoadedListener(this.bindings.store, (isAppLoaded) => {\n this.isAppLoaded = isAppLoaded;\n });\n }\n\n public get focusTarget() {\n if (!this.nextNewResultTarget) {\n this.nextNewResultTarget = new FocusTargetController(this);\n }\n return this.nextNewResultTarget;\n }\n\n private get recommendationListStateWithAugment() {\n return {\n ...this.recommendationListState,\n firstRequestExecuted:\n this.recommendationListState.searchResponseId !== '',\n hasError: this.recommendationListState.error !== null,\n hasItems: this.recommendationListState.recommendations.length !== 0,\n results: this.subsetRecommendations,\n };\n }\n\n private validateNumberOfRecommendationsPerPage() {\n const msg = new NumberValue({\n min: 1,\n max: this.numberOfRecommendations - 1,\n }).validate(this.numberOfRecommendationsPerPage!);\n\n if (msg) {\n this.error = new Error(\n `The \"numberOfRecommendationsPerPage\" is invalid: ${msg}`\n );\n }\n }\n\n private validateRecommendationIdentifier() {\n const recListWithRecommendation = document.querySelectorAll(\n `atomic-recs-list[recommendation=\"${this.recommendation}\"]`\n );\n\n if (recListWithRecommendation.length > 1) {\n this.bindings.engine.logger.warn(\n `There are multiple atomic-recs-list in this page with the same recommendation property \"${this.recommendation}\". Make sure to set a different recommendation property for each.`\n );\n }\n }\n\n private updateOriginLevel2() {\n if (this.label) {\n const action = loadConfigurationActions(\n this.bindings.engine\n ).setOriginLevel2({\n originLevel2: this.label,\n });\n\n this.bindings.engine.dispatch(action);\n }\n }\n\n private renderHeading() {\n if (!this.label) {\n return;\n }\n\n if (this.recommendationListStateWithAugment.hasError) {\n return;\n }\n\n if (\n this.recommendationListStateWithAugment.firstRequestExecuted &&\n !this.recommendationListStateWithAugment.hasItems\n ) {\n return;\n }\n\n return (\n <Heading level={this.headingLevel} part=\"label\" class=\"m-0 mb-2\">\n {this.bindings.i18n.t(this.label)}\n </Heading>\n );\n }\n\n private get currentIndex() {\n return Math.abs(\n (this.currentPage * this.numberOfRecommendationsPerPage!) %\n this.recommendationListState.recommendations.length\n );\n }\n\n private get subsetRecommendations() {\n if (!this.numberOfRecommendationsPerPage) {\n return this.recommendationListState.recommendations;\n }\n\n return this.recommendationListState.recommendations.slice(\n this.currentIndex,\n this.currentIndex + this.numberOfRecommendationsPerPage\n );\n }\n\n private get numberOfPages() {\n return Math.ceil(\n this.recommendationListState.recommendations.length /\n this.numberOfRecommendationsPerPage!\n );\n }\n\n private get hasPagination() {\n return this.numberOfPages > 1;\n }\n\n private get shouldRenderPagination() {\n return (\n this.hasPagination && this.recommendationListStateWithAugment.hasItems\n );\n }\n\n private getPropsForAtomicRecsResult(recommendation: RecsResult) {\n const linkContent =\n this.itemTemplateProvider.getLinkTemplateContent(recommendation);\n\n return {\n interactiveResult: buildRecsInteractiveResult(this.bindings.engine, {\n options: {result: recommendation},\n }),\n result: recommendation,\n renderingFunction: this.itemRenderingFunction,\n loadingFlag: this.loadingFlag,\n key: this.itemListCommon.getResultId(\n recommendation.uniqueId,\n this.recommendationListState.searchResponseId,\n this.density,\n this.imageSize\n ),\n content: this.itemTemplateProvider.getTemplateContent(recommendation),\n linkContent,\n stopPropagation: !!linkContent,\n store: this.bindings.store,\n density: this.density,\n display: this.display,\n imageSize: this.imageSize,\n };\n }\n\n private computeListDisplayClasses() {\n const displayPlaceholders = !this.isAppLoaded;\n\n return getItemListDisplayClasses(\n 'grid',\n this.density,\n this.imageSize,\n this.recommendationListState.isLoading,\n displayPlaceholders\n );\n }\n\n private renderAsGrid(recommendation: RecsResult, i: number) {\n const propsForAtomicRecsResult =\n this.getPropsForAtomicRecsResult(recommendation);\n return (\n <DisplayGrid\n selectorForItem=\"atomic-recs-result\"\n item={recommendation}\n {...propsForAtomicRecsResult.interactiveResult}\n setRef={(element) =>\n element && this.itemListCommon.setNewResultRef(element, i)\n }\n >\n <atomic-recs-result {...propsForAtomicRecsResult}></atomic-recs-result>\n </DisplayGrid>\n );\n }\n\n private renderListOfRecommendations() {\n this.itemListCommon.updateBreakpoints();\n const listClasses = this.computeListDisplayClasses();\n\n if (\n !this.resultTemplateRegistered ||\n this.itemTemplateProvider.hasError ||\n this.error\n ) {\n return;\n }\n\n return (\n <DisplayWrapper listClasses={listClasses} display=\"grid\">\n <ResultsPlaceholdersGuard\n density={this.density}\n display={this.display}\n imageSize={this.imageSize}\n displayPlaceholders={!this.isAppLoaded}\n numberOfPlaceholders={\n this.numberOfRecommendationsPerPage ?? this.numberOfRecommendations\n }\n ></ResultsPlaceholdersGuard>\n <ItemDisplayGuard {...this.recommendationListStateWithAugment}>\n {this.subsetRecommendations.map((recommendation, i) => {\n return this.renderAsGrid(recommendation, i);\n })}\n </ItemDisplayGuard>\n </DisplayWrapper>\n );\n }\n\n public render() {\n return (\n <Fragment>\n {this.renderHeading()}\n {this.shouldRenderPagination ? (\n <Carousel\n bindings={this.bindings}\n currentPage={this.currentPage}\n nextPage={() => this.nextPage()}\n previousPage={() => this.previousPage()}\n numberOfPages={this.numberOfPages}\n >\n {this.renderListOfRecommendations()}\n </Carousel>\n ) : (\n this.renderListOfRecommendations()\n )}\n </Fragment>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as n,h as r,F as t,g as i}from"./p-dc3df5ce.js";import{NumberValue as e}from"@coveo/bueno";import{loadIPXActionsHistoryActions as a}from"@coveo/headless";import{buildRecommendationList as o,loadConfigurationActions as l,buildInteractiveResult as s}from"@coveo/headless/recommendation";import{I as c,B as d}from"./p-d6e6dbc3.js";import{F as m}from"./p-9f3ecfe5.js";import{r as p}from"./p-0f506869.js";import{R as h}from"./p-8e5e00b4.js";import{c as w}from"./p-5cafb3fe.js";import{I as g,D as b}from"./p-7cb0050f.js";import{I as u}from"./p-cef8175c.js";import{D as v}from"./p-187193bb.js";import{I as f}from"./p-06b55a5e.js";import{g as y}from"./p-ed21f076.js";import{C as x}from"./p-79075abe.js";import{H as k}from"./p-66d48d1a.js";import"./p-c9074946.js";import"./p-1580513b.js";import"./p-05de7ca3.js";import"./p-f77160c6.js";import"./p-f284897c.js";import"./p-0462f723.js";import"./p-7dd93292.js";import"./p-ad38f245.js";import"./p-cfa9c12b.js";import"./p-28a6dd9b.js";import"./p-ef905286.js";import"./p-21ab6f55.js";const z='/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer properties {\n *, :before, :after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-space-x-reverse: 0;\n --tw-divide-y-reverse: 0;\n --tw-border-style: solid;\n --tw-gradient-position: initial;\n --tw-gradient-from: #0000;\n --tw-gradient-via: #0000;\n --tw-gradient-to: #0000;\n --tw-gradient-stops: initial;\n --tw-gradient-via-stops: initial;\n --tw-gradient-from-position: 0%;\n --tw-gradient-via-position: 50%;\n --tw-gradient-to-position: 100%;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-duration: initial;\n --tw-ease: initial;\n --tw-content: "";\n }\n}\n@layer theme, base, components, utilities;\n@layer theme;\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, var(--atomic-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"));\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",\n "Courier New", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n }\n @supports (color: color-mix(in lab, red, red)) {\n ::placeholder {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden="until-found"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .\\@container {\n container-type: inline-size;\n }\n .pointer-events-auto {\n pointer-events: auto;\n }\n .pointer-events-none {\n pointer-events: none;\n }\n .collapse {\n visibility: collapse;\n }\n .invisible {\n visibility: hidden;\n }\n .visible {\n visibility: visible;\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n }\n .atomic-grid-clickable-elements [part~=\'outline\'][part~=\'result-list-grid-clickable-container\'] {\n position: relative;\n border: 1px solid transparent;\n padding: 1rem;\n border-radius: 1rem;\n transition: all 0.12s ease-out;\n }\n .atomic-grid-clickable-elements [part~=\'outline\'][part~=\'result-list-grid-clickable-container\']:hover {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n box-shadow: 0px 10px 25px var(--atomic-neutral);\n cursor: pointer;\n }\n .atomic-grid-clickable-elements [part=\'result-list-grid-clickable\']:focus-visible {\n border-radius: 2px;\n border-style: var(--tw-border-style);\n border-width: 2px;\n border-color: var(--atomic-primary);\n color: var(--atomic-primary);\n cursor: pointer;\n display: inline-block;\n text-decoration: underline;\n text-align: center;\n position: absolute;\n }\n .atomic-grid-clickable-elements [part=\'result-list-grid-clickable\']:not(:focus) {\n clip: rect(1px, 1px, 1px, 1px);\n overflow: hidden;\n position: absolute;\n padding: 0;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .static {\n position: static;\n }\n .sticky {\n position: sticky;\n }\n .-top-2 {\n top: calc(0.25rem * -2);\n }\n .-top-4 {\n top: calc(0.25rem * -4);\n }\n .top-0 {\n top: calc(0.25rem * 0);\n }\n .top-1\\/2 {\n top: calc(1/2 * 100%);\n }\n .top-6 {\n top: calc(0.25rem * 6);\n }\n .top-\\[4px\\] {\n top: 4px;\n }\n .top-full {\n top: 100%;\n }\n .top-px {\n top: 1px;\n }\n .-right-2 {\n right: calc(0.25rem * -2);\n }\n .right-0 {\n right: calc(0.25rem * 0);\n }\n .right-2 {\n right: calc(0.25rem * 2);\n }\n .right-6 {\n right: calc(0.25rem * 6);\n }\n .right-12 {\n right: calc(0.25rem * 12);\n }\n .right-20 {\n right: calc(0.25rem * 20);\n }\n .right-px {\n right: 1px;\n }\n .bottom-0 {\n bottom: calc(0.25rem * 0);\n }\n .bottom-1 {\n bottom: calc(0.25rem * 1);\n }\n .bottom-2 {\n bottom: calc(0.25rem * 2);\n }\n .bottom-px {\n bottom: 1px;\n }\n .left-0 {\n left: calc(0.25rem * 0);\n }\n .left-1 {\n left: calc(0.25rem * 1);\n }\n .left-2 {\n left: calc(0.25rem * 2);\n }\n .left-\\[15px\\] {\n left: 15px;\n }\n .isolate {\n isolation: isolate;\n }\n .z-0 {\n z-index: 0;\n }\n .z-1 {\n z-index: 1;\n }\n .z-10 {\n z-index: 10;\n }\n .z-9998 {\n z-index: 9998;\n }\n .z-9999 {\n z-index: 9999;\n }\n .order-last {\n order: 9999;\n }\n .col-span-2 {\n grid-column: span 2 / span 2;\n }\n .container {\n width: 100%;\n }\n @media (width >= 1024px) {\n .container {\n max-width: 1024px;\n }\n }\n @media (width >= 40rem) {\n .container {\n max-width: 40rem;\n }\n }\n @media (width >= 48rem) {\n .container {\n max-width: 48rem;\n }\n }\n @media (width >= 64rem) {\n .container {\n max-width: 64rem;\n }\n }\n @media (width >= 80rem) {\n .container {\n max-width: 80rem;\n }\n }\n @media (width >= 96rem) {\n .container {\n max-width: 96rem;\n }\n }\n @media not all and (width >= 1024px) {\n @media not all and (min-width: 768px) {\n .atomic-grid-display-mobile .list-root.display-grid.image-large {\n grid-template-columns: minmax(auto, 35rem);\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-large.density-comfortable [part~=\'outline\']::before {\n margin: 2rem 0;\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-large.density-normal [part~=\'outline\']::before {\n margin: 1.5rem 0;\n }\n @media not all and (width >= 1024px) {\n .atomic-grid-display-mobile .list-root.display-grid.image-large.density-normal [part~=\'outline\']::before {\n margin: 1.75rem 0;\n }\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-large.density-compact [part~=\'outline\']::before {\n margin: 1rem 0;\n }\n @media not all and (width >= 1024px) {\n .atomic-grid-display-mobile .list-root.display-grid.image-large.density-compact [part~=\'outline\']::before {\n margin: 1.5rem 0;\n }\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-large [part~=\'outline\']::before {\n display: block;\n content: \' \';\n height: 1px;\n background-color: var(--atomic-neutral);\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-large [part~=\'outline\']:first-of-type::before {\n display: none;\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-large atomic-result-placeholder::before {\n background-color: transparent;\n }\n }\n @media (min-width: 768px) {\n .atomic-grid-display-mobile .list-root.display-grid.image-large {\n grid-column-gap: 0.5rem;\n grid-row-gap: 0.5rem;\n grid-template-columns: 1fr 1fr;\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-large [part~=\'outline\'] {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n padding: 1rem;\n border-radius: 1rem;\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-large atomic-result-placeholder {\n border-color: transparent;\n }\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-small [part~=\'outline\'], .atomic-grid-display-mobile .list-root.display-grid.image-icon [part~=\'outline\'], .atomic-grid-display-mobile .list-root.display-grid.image-none [part~=\'outline\'] {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n padding: 1rem;\n border-radius: 1rem;\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-small atomic-result-placeholder, .atomic-grid-display-mobile .list-root.display-grid.image-icon atomic-result-placeholder, .atomic-grid-display-mobile .list-root.display-grid.image-none atomic-result-placeholder {\n border-color: transparent;\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-small, .atomic-grid-display-mobile .list-root.display-grid.image-icon, .atomic-grid-display-mobile .list-root.display-grid.image-none {\n grid-column-gap: 0.5rem;\n grid-row-gap: 0.5rem;\n }\n @media not all and (min-width: 640px) {\n .atomic-grid-display-mobile .list-root.display-grid.image-small, .atomic-grid-display-mobile .list-root.display-grid.image-icon, .atomic-grid-display-mobile .list-root.display-grid.image-none {\n grid-template-columns: minmax(0, 1fr);\n }\n }\n @media (min-width: 768px) {\n .atomic-grid-display-mobile .list-root.display-grid.image-small, .atomic-grid-display-mobile .list-root.display-grid.image-icon, .atomic-grid-display-mobile .list-root.display-grid.image-none {\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n }\n }\n @media (width >= 1024px) {\n .atomic-grid-display-mobile .list-root.display-grid.image-small, .atomic-grid-display-mobile .list-root.display-grid.image-icon, .atomic-grid-display-mobile .list-root.display-grid.image-none {\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr);\n }\n }\n }\n .atomic-list-with-dividers.density-comfortable [part~=\'outline\']::before {\n margin: 2rem 0;\n }\n .atomic-list-with-dividers.density-normal [part~=\'outline\']::before {\n margin: 1.5rem 0;\n }\n @media not all and (width >= 1024px) {\n .atomic-list-with-dividers.density-normal [part~=\'outline\']::before {\n margin: 1.75rem 0;\n }\n }\n .atomic-list-with-dividers.density-compact [part~=\'outline\']::before {\n margin: 1rem 0;\n }\n @media not all and (width >= 1024px) {\n .atomic-list-with-dividers.density-compact [part~=\'outline\']::before {\n margin: 1.5rem 0;\n }\n }\n .atomic-list-with-dividers [part~=\'outline\']::before {\n display: block;\n content: \' \';\n height: 1px;\n background-color: var(--atomic-neutral);\n }\n .atomic-list-with-dividers [part~=\'outline\']:first-of-type::before {\n display: none;\n }\n .atomic-list-with-dividers atomic-result-placeholder::before {\n background-color: transparent;\n }\n .m-0 {\n margin: calc(0.25rem * 0);\n }\n .m-2 {\n margin: calc(0.25rem * 2);\n }\n .mx-0 {\n margin-inline: calc(0.25rem * 0);\n }\n .mx-0\\.5 {\n margin-inline: calc(0.25rem * 0.5);\n }\n .mx-1 {\n margin-inline: calc(0.25rem * 1);\n }\n .mx-6 {\n margin-inline: calc(0.25rem * 6);\n }\n .mx-16 {\n margin-inline: calc(0.25rem * 16);\n }\n .mx-auto {\n margin-inline: auto;\n }\n .my-2 {\n margin-block: calc(0.25rem * 2);\n }\n .my-3 {\n margin-block: calc(0.25rem * 3);\n }\n .my-4 {\n margin-block: calc(0.25rem * 4);\n }\n .my-6 {\n margin-block: calc(0.25rem * 6);\n }\n .my-auto {\n margin-block: auto;\n }\n .mt-0 {\n margin-top: calc(0.25rem * 0);\n }\n .mt-1 {\n margin-top: calc(0.25rem * 1);\n }\n .mt-1\\.5 {\n margin-top: calc(0.25rem * 1.5);\n }\n .mt-2 {\n margin-top: calc(0.25rem * 2);\n }\n .mt-2\\.5 {\n margin-top: calc(0.25rem * 2.5);\n }\n .mt-3 {\n margin-top: calc(0.25rem * 3);\n }\n .mt-4 {\n margin-top: calc(0.25rem * 4);\n }\n .mt-6 {\n margin-top: calc(0.25rem * 6);\n }\n .mt-7 {\n margin-top: calc(0.25rem * 7);\n }\n .mt-8 {\n margin-top: calc(0.25rem * 8);\n }\n .mt-10 {\n margin-top: calc(0.25rem * 10);\n }\n .mt-px {\n margin-top: 1px;\n }\n .mr-0 {\n margin-right: calc(0.25rem * 0);\n }\n .mr-0\\.5 {\n margin-right: calc(0.25rem * 0.5);\n }\n .mr-1 {\n margin-right: calc(0.25rem * 1);\n }\n .mr-1\\.5 {\n margin-right: calc(0.25rem * 1.5);\n }\n .mr-2 {\n margin-right: calc(0.25rem * 2);\n }\n .mr-3 {\n margin-right: calc(0.25rem * 3);\n }\n .mr-6 {\n margin-right: calc(0.25rem * 6);\n }\n .mb-0 {\n margin-bottom: calc(0.25rem * 0);\n }\n .mb-1 {\n margin-bottom: calc(0.25rem * 1);\n }\n .mb-2 {\n margin-bottom: calc(0.25rem * 2);\n }\n .mb-3 {\n margin-bottom: calc(0.25rem * 3);\n }\n .mb-4 {\n margin-bottom: calc(0.25rem * 4);\n }\n .mb-6 {\n margin-bottom: calc(0.25rem * 6);\n }\n .ml-0\\.5 {\n margin-left: calc(0.25rem * 0.5);\n }\n .ml-1 {\n margin-left: calc(0.25rem * 1);\n }\n .ml-2 {\n margin-left: calc(0.25rem * 2);\n }\n .ml-4 {\n margin-left: calc(0.25rem * 4);\n }\n .ml-6 {\n margin-left: calc(0.25rem * 6);\n }\n .ml-auto {\n margin-left: auto;\n }\n .atomic-grid-display-common .list-wrapper {\n word-break: break-word;\n }\n .atomic-grid-display-common .list-root.display-grid {\n display: grid;\n justify-content: space-evenly;\n }\n .atomic-grid-display-common .list-root.display-grid .result-component {\n height: 100%;\n box-sizing: border-box;\n }\n .box-border {\n box-sizing: border-box;\n }\n .box-content {\n box-sizing: content-box;\n }\n .line-clamp-1 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n }\n .line-clamp-2 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n }\n .line-clamp-3 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n }\n .line-clamp-4 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 4;\n }\n .line-clamp-none {\n overflow: visible;\n display: block;\n -webkit-box-orient: horizontal;\n -webkit-line-clamp: unset;\n }\n .block {\n display: block;\n }\n .contents {\n display: contents;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline {\n display: inline;\n }\n .inline-block {\n display: inline-block;\n }\n .inline-flex {\n display: inline-flex;\n }\n .table {\n display: table;\n }\n .aspect-square {\n aspect-ratio: 1 / 1;\n }\n .size-\\[27px\\] {\n width: 27px;\n height: 27px;\n }\n .h-1 {\n height: calc(0.25rem * 1);\n }\n .h-2 {\n height: calc(0.25rem * 2);\n }\n .h-2\\.5 {\n height: calc(0.25rem * 2.5);\n }\n .h-3 {\n height: calc(0.25rem * 3);\n }\n .h-4 {\n height: calc(0.25rem * 4);\n }\n .h-5 {\n height: calc(0.25rem * 5);\n }\n .h-5\\/6 {\n height: calc(5/6 * 100%);\n }\n .h-6 {\n height: calc(0.25rem * 6);\n }\n .h-7 {\n height: calc(0.25rem * 7);\n }\n .h-8 {\n height: calc(0.25rem * 8);\n }\n .h-9 {\n height: calc(0.25rem * 9);\n }\n .h-10 {\n height: calc(0.25rem * 10);\n }\n .h-12 {\n height: calc(0.25rem * 12);\n }\n .h-\\[2\\.6rem\\] {\n height: 2.6rem;\n }\n .h-\\[9px\\] {\n height: 9px;\n }\n .h-auto {\n height: auto;\n }\n .h-full {\n height: 100%;\n }\n .max-h-96 {\n max-height: calc(0.25rem * 96);\n }\n .min-h-10 {\n min-height: calc(0.25rem * 10);\n }\n .w-0\\.5 {\n width: calc(0.25rem * 0.5);\n }\n .w-1 {\n width: calc(0.25rem * 1);\n }\n .w-1\\/2 {\n width: calc(1/2 * 100%);\n }\n .w-2 {\n width: calc(0.25rem * 2);\n }\n .w-2\\.5 {\n width: calc(0.25rem * 2.5);\n }\n .w-3 {\n width: calc(0.25rem * 3);\n }\n .w-3\\.5 {\n width: calc(0.25rem * 3.5);\n }\n .w-3\\/5 {\n width: calc(3/5 * 100%);\n }\n .w-4 {\n width: calc(0.25rem * 4);\n }\n .w-5 {\n width: calc(0.25rem * 5);\n }\n .w-5\\/6 {\n width: calc(5/6 * 100%);\n }\n .w-6 {\n width: calc(0.25rem * 6);\n }\n .w-7 {\n width: calc(0.25rem * 7);\n }\n .w-8 {\n width: calc(0.25rem * 8);\n }\n .w-9 {\n width: calc(0.25rem * 9);\n }\n .w-10 {\n width: calc(0.25rem * 10);\n }\n .w-12 {\n width: calc(0.25rem * 12);\n }\n .w-20 {\n width: calc(0.25rem * 20);\n }\n .w-26 {\n width: calc(0.25rem * 26);\n }\n .w-28 {\n width: calc(0.25rem * 28);\n }\n .w-32 {\n width: calc(0.25rem * 32);\n }\n .w-36 {\n width: calc(0.25rem * 36);\n }\n .w-44 {\n width: calc(0.25rem * 44);\n }\n .w-48 {\n width: calc(0.25rem * 48);\n }\n .w-60 {\n width: calc(0.25rem * 60);\n }\n .w-64 {\n width: calc(0.25rem * 64);\n }\n .w-72 {\n width: calc(0.25rem * 72);\n }\n .w-100 {\n width: calc(0.25rem * 100);\n }\n .w-\\[2\\.6rem\\] {\n width: 2.6rem;\n }\n .w-auto {\n width: auto;\n }\n .w-fit {\n width: fit-content;\n }\n .w-full {\n width: 100%;\n }\n .w-max {\n width: max-content;\n }\n .max-w-4\\/5 {\n max-width: calc(4/5 * 100%);\n }\n .max-w-60 {\n max-width: calc(0.25rem * 60);\n }\n .max-w-\\[30ch\\] {\n max-width: 30ch;\n }\n .max-w-full {\n max-width: 100%;\n }\n .max-w-lg {\n max-width: 32rem;\n }\n .max-w-max {\n max-width: max-content;\n }\n .atomic-result-table {\n min-width: 100%;\n border-spacing: 0;\n border-collapse: separate;\n }\n .atomic-result-table th, .atomic-result-table td {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n font-family: var(--atomic-font-family);\n font-size: var(--atomic-text-sm);\n line-height: var(--tw-leading, calc(1.25 / 0.875));\n line-height: 1rem;\n white-space: nowrap;\n }\n .atomic-result-table th:not(:first-child), .atomic-result-table td:not(:first-child) {\n border-left: none;\n }\n .atomic-result-table th:first-child, .atomic-result-table td:first-child {\n min-width: 19rem;\n }\n .atomic-result-table th {\n background-color: var(--atomic-neutral-light);\n border-bottom: none;\n font-weight: bold;\n color: black;\n padding: 1rem var(--padding);\n text-align: left;\n }\n .atomic-result-table th:first-child {\n border-top-left-radius: var(--atomic-border-radius-xl);\n }\n .atomic-result-table th:last-child {\n border-top-right-radius: var(--atomic-border-radius-xl);\n }\n .atomic-result-table td {\n color: var(--atomic-neutral-dark);\n border-top: none;\n vertical-align: top;\n padding: var(--padding);\n }\n .atomic-result-table.density-comfortable {\n --padding: 2rem;\n }\n .atomic-result-table.density-normal {\n --padding: 1.5rem;\n }\n .atomic-result-table.density-compact {\n --padding: 1rem;\n }\n .min-w-0 {\n min-width: calc(0.25rem * 0);\n }\n .min-w-10 {\n min-width: calc(0.25rem * 10);\n }\n .min-w-20 {\n min-width: calc(0.25rem * 20);\n }\n .min-w-24 {\n min-width: calc(0.25rem * 24);\n }\n .min-w-full {\n min-width: 100%;\n }\n .flex-1 {\n flex: 1;\n }\n .flex-none {\n flex: none;\n }\n .flex-shrink {\n flex-shrink: 1;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .flex-grow {\n flex-grow: 1;\n }\n .grow {\n flex-grow: 1;\n }\n .basis-1\\/2 {\n flex-basis: calc(1/2 * 100%);\n }\n .basis-8 {\n flex-basis: calc(0.25rem * 8);\n }\n .border-collapse {\n border-collapse: collapse;\n }\n .-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1/2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-1\\/2 {\n --tw-translate-x: calc(1/2 * 100%);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-y-1\\/2 {\n --tw-translate-y: calc(calc(1/2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .scale-75 {\n --tw-scale-x: 75%;\n --tw-scale-y: 75%;\n --tw-scale-z: 75%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .scale-100 {\n --tw-scale-x: 100%;\n --tw-scale-y: 100%;\n --tw-scale-z: 100%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .rotate-180 {\n rotate: 180deg;\n }\n .transform {\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\n }\n .animate-pulse {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n .animate-spin {\n animation: spin 1s linear infinite;\n }\n .cursor-\\[inherit\\] {\n cursor: inherit;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize {\n resize: both;\n }\n .resize-none {\n resize: none;\n }\n .list-outside {\n list-style-position: outside;\n }\n .list-decimal {\n list-style-type: decimal;\n }\n .list-disc {\n list-style-type: disc;\n }\n .list-none {\n list-style-type: none;\n }\n .appearance-none {\n appearance: none;\n }\n @media (width >= 1024px) {\n .atomic-grid-display-desktop .list-root.display-grid {\n grid-template-columns: repeat(auto-fit, minmax(17rem, 1fr));\n }\n .atomic-grid-display-desktop .list-root.display-grid.density-comfortable {\n grid-row-gap: 4rem;\n grid-column-gap: 1.5rem;\n }\n .atomic-grid-display-desktop .list-root.display-grid.density-normal, .atomic-grid-display-desktop .list-root.display-grid.density-compact {\n grid-row-gap: 3rem;\n grid-column-gap: 1.5rem;\n }\n .atomic-grid-display-desktop .list-root.display-grid.image-large {\n grid-template-columns: repeat(auto-fill, minmax(19rem, 1fr));\n }\n @media not all and (width >= 1024px) {\n .atomic-grid-display-desktop .list-root.display-grid.image-small {\n grid-template-columns: repeat(3, 1fr);\n }\n }\n @media (width >= 1024px) {\n .atomic-grid-display-desktop .list-root.display-grid.image-small {\n grid-template-columns: repeat(3, 1fr);\n }\n }\n @media (min-width: 1280px) {\n .atomic-grid-display-desktop .list-root.display-grid.image-small {\n grid-template-columns: repeat(4, 1fr);\n }\n }\n }\n .grid-cols-\\[min-content_1fr\\] {\n grid-template-columns: min-content 1fr;\n }\n .grid-cols-\\[min-content_auto\\] {\n grid-template-columns: min-content auto;\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-row {\n flex-direction: row;\n }\n .flex-nowrap {\n flex-wrap: nowrap;\n }\n .flex-wrap {\n flex-wrap: wrap;\n }\n .place-items-center {\n place-items: center;\n }\n .content-center {\n align-content: center;\n }\n .items-baseline {\n align-items: baseline;\n }\n .items-center {\n align-items: center;\n }\n .items-start {\n align-items: flex-start;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-end {\n justify-content: flex-end;\n }\n .gap-0\\.5 {\n gap: calc(0.25rem * 0.5);\n }\n .gap-1 {\n gap: calc(0.25rem * 1);\n }\n .gap-2 {\n gap: calc(0.25rem * 2);\n }\n .gap-3 {\n gap: calc(0.25rem * 3);\n }\n .gap-4 {\n gap: calc(0.25rem * 4);\n }\n .gap-8 {\n gap: calc(0.25rem * 8);\n }\n :where(.space-y-1 > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(0.25rem * 1) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(0.25rem * 1) * calc(1 - var(--tw-space-y-reverse)));\n }\n .gap-x-1\\.5 {\n column-gap: calc(0.25rem * 1.5);\n }\n .gap-x-2 {\n column-gap: calc(0.25rem * 2);\n }\n .gap-x-4 {\n column-gap: calc(0.25rem * 4);\n }\n :where(.space-x-1\\.5 > :not(:last-child)) {\n --tw-space-x-reverse: 0;\n margin-inline-start: calc(calc(0.25rem * 1.5) * var(--tw-space-x-reverse));\n margin-inline-end: calc(calc(0.25rem * 1.5) * calc(1 - var(--tw-space-x-reverse)));\n }\n .gap-y-0\\.5 {\n row-gap: calc(0.25rem * 0.5);\n }\n :where(.divide-y > :not(:last-child)) {\n --tw-divide-y-reverse: 0;\n border-bottom-style: var(--tw-border-style);\n border-top-style: var(--tw-border-style);\n border-top-width: calc(1px * var(--tw-divide-y-reverse));\n border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n }\n :where(.divide-neutral > :not(:last-child)) {\n border-color: var(--atomic-neutral);\n }\n .self-center {\n align-self: center;\n }\n .self-start {\n align-self: flex-start;\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-auto {\n overflow: auto;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .overflow-x-auto {\n overflow-x: auto;\n }\n .overflow-x-clip {\n overflow-x: clip;\n }\n .overflow-x-scroll {\n overflow-x: scroll;\n }\n .overflow-y-auto {\n overflow-y: auto;\n }\n .overflow-y-visible {\n overflow-y: visible;\n }\n .scroll-smooth {\n scroll-behavior: smooth;\n }\n .atomic-grid-with-cards [part~=\'outline\'] {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n padding: 1rem;\n border-radius: 1rem;\n }\n .atomic-grid-with-cards atomic-result-placeholder {\n border-color: transparent;\n }\n .atomic-grid-with-cards {\n grid-column-gap: 0.5rem;\n grid-row-gap: 0.5rem;\n }\n .atomic-list-with-cards [part~=\'outline\'] {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n padding: 1rem;\n border-radius: 1rem;\n }\n .atomic-list-with-cards atomic-result-placeholder {\n border-color: transparent;\n }\n .rounded {\n border-radius: var(--atomic-border-radius);\n }\n .rounded-3xl {\n border-radius: 1.5rem;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--atomic-border-radius-lg);\n }\n .rounded-md {\n border-radius: var(--atomic-border-radius-md);\n }\n .rounded-none {\n border-radius: 0;\n }\n .rounded-sm {\n border-radius: var(--atomic-border-radius);\n }\n .rounded-xl {\n border-radius: var(--atomic-border-radius-xl);\n }\n .rounded-tl-none {\n border-top-left-radius: 0;\n }\n .rounded-r-none {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-0 {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-r {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n .border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .border-l {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n .border-solid {\n --tw-border-style: solid;\n border-style: solid;\n }\n .border-gray-200 {\n border-color: oklch(0.928 0.006 264.531);\n }\n .border-neutral {\n border-color: var(--atomic-neutral);\n }\n .border-neutral-dark {\n border-color: var(--atomic-neutral-dark);\n }\n .border-neutral-dim {\n border-color: var(--atomic-neutral-dim);\n }\n .border-primary {\n border-color: var(--atomic-primary);\n }\n .border-primary-light {\n border-color: var(--atomic-primary-light);\n }\n .border-t-neutral {\n border-top-color: var(--atomic-neutral);\n }\n .border-b-neutral {\n border-bottom-color: var(--atomic-neutral);\n }\n .border-b-neutral-dim {\n border-bottom-color: var(--atomic-neutral-dim);\n }\n .border-l-neutral {\n border-left-color: var(--atomic-neutral);\n }\n .border-l-neutral-dim {\n border-left-color: var(--atomic-neutral-dim);\n }\n .bg-\\[\\#F1F2FF\\] {\n background-color: #F1F2FF;\n }\n .bg-background {\n background-color: var(--atomic-background);\n }\n .bg-error {\n background-color: var(--atomic-error);\n }\n .bg-gray-50 {\n background-color: oklch(0.985 0.002 247.839);\n }\n .bg-neutral {\n background-color: var(--atomic-neutral);\n }\n .bg-neutral-dark {\n background-color: var(--atomic-neutral-dark);\n }\n .bg-neutral-light {\n background-color: var(--atomic-neutral-light);\n }\n .bg-primary {\n background-color: var(--atomic-primary);\n }\n .bg-primary-background {\n background-color: var(--atomic-primary-background);\n }\n .bg-transparent {\n background-color: transparent;\n }\n .bg-white {\n background-color: #fff;\n }\n .bg-linear-to-l {\n --tw-gradient-position: to left;\n }\n @supports (background-image: linear-gradient(in lab, red, red)) {\n .bg-linear-to-l {\n --tw-gradient-position: to left in oklab;\n }\n }\n .bg-linear-to-l {\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-linear-to-r {\n --tw-gradient-position: to right;\n }\n @supports (background-image: linear-gradient(in lab, red, red)) {\n .bg-linear-to-r {\n --tw-gradient-position: to right in oklab;\n }\n }\n .bg-linear-to-r {\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .from-background\\/60 {\n --tw-gradient-from: color-mix(in srgb, #ffffff 60%, transparent);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .from-background\\/60 {\n --tw-gradient-from: color-mix(in oklab, var(--atomic-background) 60%, transparent);\n }\n }\n .from-background\\/60 {\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-more-results-progress-bar-color-from {\n --tw-gradient-from: var(\n --atomic-more-results-progress-bar-color-from,\n var(--atomic-primary-dark)\n );\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-more-results-progress-bar-color-to {\n --tw-gradient-to: var(\n --atomic-more-results-progress-bar-color-to,\n var(--atomic-primary-light)\n );\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .fill-current {\n fill: currentcolor;\n }\n .stroke-\\[1\\.25\\] {\n stroke-width: 1.25;\n }\n .object-contain {\n object-fit: contain;\n }\n .p-0 {\n padding: calc(0.25rem * 0);\n }\n .p-1 {\n padding: calc(0.25rem * 1);\n }\n .p-2 {\n padding: calc(0.25rem * 2);\n }\n .p-2\\.5 {\n padding: calc(0.25rem * 2.5);\n }\n .p-3 {\n padding: calc(0.25rem * 3);\n }\n .p-3\\.5 {\n padding: calc(0.25rem * 3.5);\n }\n .p-4 {\n padding: calc(0.25rem * 4);\n }\n .p-6 {\n padding: calc(0.25rem * 6);\n }\n .p-7 {\n padding: calc(0.25rem * 7);\n }\n .p-8 {\n padding: calc(0.25rem * 8);\n }\n .px-1 {\n padding-inline: calc(0.25rem * 1);\n }\n .px-2 {\n padding-inline: calc(0.25rem * 2);\n }\n .px-2\\.5 {\n padding-inline: calc(0.25rem * 2.5);\n }\n .px-3 {\n padding-inline: calc(0.25rem * 3);\n }\n .px-4 {\n padding-inline: calc(0.25rem * 4);\n }\n .px-6 {\n padding-inline: calc(0.25rem * 6);\n }\n .px-9 {\n padding-inline: calc(0.25rem * 9);\n }\n .py-0\\.5 {\n padding-block: calc(0.25rem * 0.5);\n }\n .py-1 {\n padding-block: calc(0.25rem * 1);\n }\n .py-1\\.5 {\n padding-block: calc(0.25rem * 1.5);\n }\n .py-2 {\n padding-block: calc(0.25rem * 2);\n }\n .py-2\\.5 {\n padding-block: calc(0.25rem * 2.5);\n }\n .py-3 {\n padding-block: calc(0.25rem * 3);\n }\n .py-3\\.5 {\n padding-block: calc(0.25rem * 3.5);\n }\n .py-4 {\n padding-block: calc(0.25rem * 4);\n }\n .py-5 {\n padding-block: calc(0.25rem * 5);\n }\n .pt-0\\.5 {\n padding-top: calc(0.25rem * 0.5);\n }\n .pt-8 {\n padding-top: calc(0.25rem * 8);\n }\n .pr-2 {\n padding-right: calc(0.25rem * 2);\n }\n .pr-6 {\n padding-right: calc(0.25rem * 6);\n }\n .pr-24 {\n padding-right: calc(0.25rem * 24);\n }\n .pb-1 {\n padding-bottom: calc(0.25rem * 1);\n }\n .pb-3 {\n padding-bottom: calc(0.25rem * 3);\n }\n .pb-4 {\n padding-bottom: calc(0.25rem * 4);\n }\n .pb-6 {\n padding-bottom: calc(0.25rem * 6);\n }\n .pl-0 {\n padding-left: calc(0.25rem * 0);\n }\n .pl-1 {\n padding-left: calc(0.25rem * 1);\n }\n .pl-3 {\n padding-left: calc(0.25rem * 3);\n }\n .pl-7 {\n padding-left: calc(0.25rem * 7);\n }\n .pl-9 {\n padding-left: calc(0.25rem * 9);\n }\n .pl-10 {\n padding-left: calc(0.25rem * 10);\n }\n .text-center {\n text-align: center;\n }\n .text-left {\n text-align: left;\n }\n .align-baseline {\n vertical-align: baseline;\n }\n .align-bottom {\n vertical-align: bottom;\n }\n .align-middle {\n vertical-align: middle;\n }\n .font-sans {\n font-family: var(--atomic-font-family);\n }\n .set-font-size-sm {\n --font-size: var(--atomic-text-sm);\n font-size: var(--font-size);\n --line-height: calc(var(--font-size) * var(--atomic-line-height-ratio));\n line-height: var(--line-height);\n }\n .set-font-size-sm {\n --font-size: var(--atomic-text-sm);\n font-size: var(--font-size);\n --line-height: calc(var(--font-size) * var(--atomic-line-height-ratio));\n line-height: var(--line-height);\n }\n .text-2xl {\n font-size: var(--atomic-text-2xl);\n line-height: var(--tw-leading, calc(2 / 1.5));\n }\n .text-base {\n font-size: var(--atomic-text-base);\n line-height: var(--tw-leading, calc(1.5 / 1));\n }\n .text-lg {\n font-size: var(--atomic-text-lg);\n line-height: var(--tw-leading, calc(1.75 / 1.125));\n }\n .text-sm {\n font-size: var(--atomic-text-sm);\n line-height: var(--tw-leading, calc(1.25 / 0.875));\n }\n .text-xl {\n font-size: var(--atomic-text-xl);\n line-height: var(--tw-leading, calc(1.75 / 1.25));\n }\n .text-xs {\n font-size: 0.75rem;\n line-height: var(--tw-leading, calc(1 / 0.75));\n }\n .text-xs\\/\\[1rem\\] {\n font-size: 0.75rem;\n line-height: 1rem;\n }\n .leading-4 {\n --tw-leading: calc(0.25rem * 4);\n line-height: calc(0.25rem * 4);\n }\n .leading-5 {\n --tw-leading: calc(0.25rem * 5);\n line-height: calc(0.25rem * 5);\n }\n .leading-6 {\n --tw-leading: calc(0.25rem * 6);\n line-height: calc(0.25rem * 6);\n }\n .leading-8 {\n --tw-leading: calc(0.25rem * 8);\n line-height: calc(0.25rem * 8);\n }\n .leading-10 {\n --tw-leading: calc(0.25rem * 10);\n line-height: calc(0.25rem * 10);\n }\n .leading-\\[1\\.5\\] {\n --tw-leading: 1.5;\n line-height: 1.5;\n }\n .leading-\\[calc\\(1\\/\\.75\\)\\] {\n --tw-leading: calc(1 / .75);\n line-height: calc(1 / .75);\n }\n .leading-\\[var\\(--line-height\\)\\] {\n --tw-leading: var(--line-height);\n line-height: var(--line-height);\n }\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .font-bold {\n --tw-font-weight: var(--atomic-font-bold);\n font-weight: var(--atomic-font-bold);\n }\n .font-light {\n --tw-font-weight: 300;\n font-weight: 300;\n }\n .font-medium {\n --tw-font-weight: 500;\n font-weight: 500;\n }\n .font-normal {\n --tw-font-weight: var(--atomic-font-normal);\n font-weight: var(--atomic-font-normal);\n }\n .font-semibold {\n --tw-font-weight: 600;\n font-weight: 600;\n }\n .break-words {\n overflow-wrap: break-word;\n }\n .break-all {\n word-break: break-all;\n }\n .break-keep {\n word-break: keep-all;\n }\n .text-ellipsis {\n text-overflow: ellipsis;\n }\n .whitespace-normal {\n white-space: normal;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .text-\\[\\#54698D\\] {\n color: #54698D;\n }\n .text-\\[inherit\\] {\n color: inherit;\n }\n .text-black {\n color: #000;\n }\n .text-error {\n color: var(--atomic-error);\n }\n .text-gray-500 {\n color: oklch(0.551 0.027 264.364);\n }\n .text-gray-600 {\n color: oklch(0.446 0.03 256.802);\n }\n .text-gray-700 {\n color: oklch(0.373 0.034 259.733);\n }\n .text-gray-900 {\n color: oklch(0.21 0.034 264.665);\n }\n .text-green-600 {\n color: oklch(0.627 0.194 149.214);\n }\n .text-inline-code {\n color: var(--atomic-inline-code);\n }\n .text-neutral {\n color: var(--atomic-neutral);\n }\n .text-neutral-dark {\n color: var(--atomic-neutral-dark);\n }\n .text-on-background {\n color: var(--atomic-on-background);\n }\n .text-on-primary {\n color: var(--atomic-on-primary);\n }\n .text-primary {\n color: var(--atomic-primary);\n }\n .text-primary-light {\n color: var(--atomic-primary-light);\n }\n .text-rating-icon-active {\n color: var(--atomic-rating-icon-active-color, #f6ce3c);\n }\n .text-rating-icon-inactive {\n color: var(\n --atomic-rating-icon-inactive-color,\n var(--atomic-neutral)\n );\n }\n .text-success {\n color: var(--atomic-success);\n }\n .text-transparent {\n color: transparent;\n }\n .capitalize {\n text-transform: capitalize;\n }\n .lowercase {\n text-transform: lowercase;\n }\n .italic {\n font-style: italic;\n }\n .line-through {\n text-decoration-line: line-through;\n }\n .placeholder-neutral-dark::placeholder {\n color: var(--atomic-neutral-dark);\n }\n .opacity-0 {\n opacity: 0%;\n }\n .opacity-50 {\n opacity: 50%;\n }\n .opacity-80 {\n opacity: 80%;\n }\n .shadow {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-inner-primary {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, var(--atomic-primary));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-lg {\n --tw-shadow: 0px 2px 8px var(--tw-shadow-color, rgba(229, 232, 232, 0.75));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-t-lg {\n --tw-shadow: 0px -2px 8px var(--tw-shadow-color, rgba(229, 232, 232, 0.75));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-1 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-3 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-primary {\n --tw-ring-color: var(--atomic-primary);\n }\n .ring-primary-light {\n --tw-ring-color: var(--atomic-primary-light);\n }\n .ring-ring-primary {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .outline-error {\n outline-color: var(--atomic-error);\n }\n .outline-neutral {\n outline-color: var(--atomic-neutral);\n }\n .outline-primary {\n outline-color: var(--atomic-primary);\n }\n .blur {\n --tw-blur: blur(8px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .invert {\n --tw-invert: invert(100%);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .filter {\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, visibility, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));\n transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));\n }\n .transition-\\[visibility\\] {\n transition-property: visibility;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));\n transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));\n }\n .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));\n transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));\n }\n .transition-opacity {\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));\n transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));\n }\n .duration-200 {\n --tw-duration: 200ms;\n transition-duration: 200ms;\n }\n .duration-300 {\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n .ease-in-out {\n --tw-ease: cubic-bezier(0.4, 0, 0.2, 1);\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n }\n @media (hover: hover) {\n .group-hover\\:visible:is(:where(.group):hover *) {\n visibility: visible;\n }\n }\n @media (hover: hover) {\n .group-hover\\:text-error:is(:where(.group):hover *) {\n color: var(--atomic-error);\n }\n }\n @media (hover: hover) {\n .group-hover\\:text-primary:is(:where(.group):hover *) {\n color: var(--atomic-primary);\n }\n }\n @media (hover: hover) {\n .group-hover\\:text-primary-light:is(:where(.group):hover *) {\n color: var(--atomic-primary-light);\n }\n }\n .group-focus\\:text-primary:is(:where(.group):focus *) {\n color: var(--atomic-primary);\n }\n .group-focus\\:text-primary-light:is(:where(.group):focus *) {\n color: var(--atomic-primary-light);\n }\n .group-focus-visible\\:text-error:is(:where(.group):focus-visible *) {\n color: var(--atomic-error);\n }\n .group-focus-visible\\:text-primary:is(:where(.group):focus-visible *) {\n color: var(--atomic-primary);\n }\n .peer-focus-within\\:border-primary-light:is(:where(.peer):focus-within ~ *) {\n border-color: var(--atomic-primary-light);\n }\n .peer-focus-within\\:text-primary-light:is(:where(.peer):focus-within ~ *) {\n color: var(--atomic-primary-light);\n }\n @media (hover: hover) {\n .peer-hover\\:border-primary-light:is(:where(.peer):hover ~ *) {\n border-color: var(--atomic-primary-light);\n }\n }\n @media (hover: hover) {\n .peer-hover\\:text-error:is(:where(.peer):hover ~ *) {\n color: var(--atomic-error);\n }\n }\n @media (hover: hover) {\n .peer-hover\\:text-primary-light:is(:where(.peer):hover ~ *) {\n color: var(--atomic-primary-light);\n }\n }\n .before\\:inline::before {\n content: var(--tw-content);\n display: inline;\n }\n .before\\:content-\\[\\\'\\,\\\\00a0\\\'\\]::before {\n content: var(--tw-content);\n --tw-content: \',\\00a0\';\n content: var(--tw-content);\n }\n .after\\:absolute::after {\n content: var(--tw-content);\n position: absolute;\n }\n .after\\:-bottom-0\\.5::after {\n content: var(--tw-content);\n bottom: calc(0.25rem * -0.5);\n }\n .after\\:block::after {\n content: var(--tw-content);\n display: block;\n }\n .after\\:h-1::after {\n content: var(--tw-content);\n height: calc(0.25rem * 1);\n }\n .after\\:w-full::after {\n content: var(--tw-content);\n width: 100%;\n }\n .after\\:rounded::after {\n content: var(--tw-content);\n border-radius: var(--atomic-border-radius);\n }\n .after\\:bg-primary::after {\n content: var(--tw-content);\n background-color: var(--atomic-primary);\n }\n .focus-within\\:border-disabled:focus-within {\n border-color: var(--atomic-disabled);\n }\n .focus-within\\:border-primary:focus-within {\n border-color: var(--atomic-primary);\n }\n .focus-within\\:ring-3:focus-within {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .focus-within\\:ring-neutral:focus-within {\n --tw-ring-color: var(--atomic-neutral);\n }\n .focus-within\\:ring-ring-primary:focus-within {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n @media (hover: hover) {\n .hover\\:border:hover {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n }\n @media (hover: hover) {\n .hover\\:border-error:hover {\n border-color: var(--atomic-error);\n }\n }\n @media (hover: hover) {\n .hover\\:border-primary-light:hover {\n border-color: var(--atomic-primary-light);\n }\n }\n @media (hover: hover) {\n .hover\\:bg-error:hover {\n background-color: var(--atomic-error);\n }\n }\n @media (hover: hover) {\n .hover\\:bg-neutral-light:hover {\n background-color: var(--atomic-neutral-light);\n }\n }\n @media (hover: hover) {\n .hover\\:bg-primary-light:hover {\n background-color: var(--atomic-primary-light);\n }\n }\n @media (hover: hover) {\n .hover\\:bg-transparent:hover {\n background-color: transparent;\n }\n }\n @media (hover: hover) {\n .hover\\:fill-white:hover {\n fill: #fff;\n }\n }\n @media (hover: hover) {\n .hover\\:text-primary-light:hover {\n color: var(--atomic-primary-light);\n }\n }\n @media (hover: hover) {\n .hover\\:underline:hover {\n text-decoration-line: underline;\n }\n }\n @media (hover: hover) {\n .hover\\:opacity-100:hover {\n opacity: 100%;\n }\n }\n @media (hover: hover) {\n .hover\\:shadow-sm:hover {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus\\:opacity-100:focus {\n opacity: 100%;\n }\n .focus\\:outline-hidden:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n @media (forced-colors: active) {\n .focus\\:outline-hidden:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n .focus-visible\\:border:focus-visible {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .focus-visible\\:border-error:focus-visible {\n border-color: var(--atomic-error);\n }\n .focus-visible\\:border-primary:focus-visible {\n border-color: var(--atomic-primary);\n }\n .focus-visible\\:border-primary-light:focus-visible {\n border-color: var(--atomic-primary-light);\n }\n .focus-visible\\:bg-error:focus-visible {\n background-color: var(--atomic-error);\n }\n .focus-visible\\:bg-neutral-light:focus-visible {\n background-color: var(--atomic-neutral-light);\n }\n .focus-visible\\:bg-primary-light:focus-visible {\n background-color: var(--atomic-primary-light);\n }\n .focus-visible\\:text-primary-light:focus-visible {\n color: var(--atomic-primary-light);\n }\n .focus-visible\\:underline:focus-visible {\n text-decoration-line: underline;\n }\n .focus-visible\\:ring-2:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .focus-visible\\:outline-none:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n @media (width >= 40rem) {\n .sm\\:px-6 {\n padding-inline: calc(0.25rem * 6);\n }\n }\n .\\[part\\=\\"breadcrumb-button\\"\\]\\:visible:is(part="breadcrumb-button") {\n visibility: visible;\n }\n}\n@layer theme, base, components, utilities;\n@layer components {\n .input-primary {\n border-radius: var(--atomic-border-radius);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n background-color: var(--atomic-background);\n }\n @media (hover: hover) {\n .input-primary:hover {\n border-color: var(--atomic-primary-light);\n }\n }\n .input-primary:focus-visible {\n border-color: var(--atomic-primary);\n }\n .input-primary:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .input-primary:focus-visible {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n .input-primary:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-radio {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n }\n .btn-radio::before {\n content: var(--tw-content);\n --tw-content: attr(value);\n content: var(--tw-content);\n }\n .btn-primary {\n border-radius: var(--atomic-border-radius);\n background-color: var(--atomic-primary);\n color: var(--atomic-on-primary);\n }\n @media (hover: hover) {\n .btn-primary:hover {\n background-color: var(--atomic-primary-light);\n }\n }\n .btn-primary:focus-visible {\n background-color: var(--atomic-primary-light);\n }\n .btn-primary:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .btn-primary:focus-visible {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n .btn-primary:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-primary:disabled {\n cursor: not-allowed;\n }\n .btn-primary:disabled {\n background-color: var(--atomic-disabled);\n }\n .btn-outline-primary {\n border-radius: var(--atomic-border-radius);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n background-color: var(--atomic-background);\n color: var(--atomic-primary);\n }\n @media (hover: hover) {\n .btn-outline-primary:hover {\n border-color: var(--atomic-primary-light);\n }\n }\n @media (hover: hover) {\n .btn-outline-primary:hover {\n color: var(--atomic-primary-light);\n }\n }\n .btn-outline-primary:focus-visible {\n border-color: var(--atomic-primary);\n }\n .btn-outline-primary:focus-visible {\n color: var(--atomic-primary);\n }\n .btn-outline-primary:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .btn-outline-primary:focus-visible {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n .btn-outline-primary:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-outline-primary:disabled {\n cursor: not-allowed;\n }\n .btn-outline-primary:disabled {\n border-color: var(--atomic-neutral);\n }\n .btn-outline-primary:disabled {\n color: var(--atomic-neutral);\n }\n .btn-text-primary {\n border-radius: var(--atomic-border-radius);\n background-color: var(--atomic-background);\n color: var(--atomic-primary);\n }\n @media (hover: hover) {\n .btn-text-primary:hover {\n background-color: var(--atomic-neutral-light);\n }\n }\n .btn-text-primary:focus-visible {\n background-color: var(--atomic-neutral-light);\n }\n .btn-text-primary:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-outline-neutral {\n border-radius: var(--atomic-border-radius);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n background-color: var(--atomic-background);\n color: var(--atomic-on-background);\n }\n @media (hover: hover) {\n .btn-outline-neutral:hover {\n border-color: var(--atomic-primary);\n }\n }\n @media (hover: hover) {\n .btn-outline-neutral:hover {\n color: var(--atomic-primary);\n }\n }\n .btn-outline-neutral:focus-visible {\n border-color: var(--atomic-primary);\n }\n .btn-outline-neutral:focus-visible {\n color: var(--atomic-primary);\n }\n .btn-outline-neutral:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .btn-outline-neutral:focus-visible {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n .btn-outline-neutral:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-outline-neutral:disabled {\n cursor: not-allowed;\n }\n .btn-outline-neutral:disabled {\n border-color: var(--atomic-neutral);\n }\n .btn-outline-neutral:disabled {\n color: var(--atomic-on-background);\n }\n .btn-outline-neutral:disabled {\n opacity: 50%;\n }\n .btn-outline-bg-neutral {\n border-radius: var(--atomic-border-radius);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n background-color: var(--atomic-background);\n color: var(--atomic-on-background);\n }\n @media (hover: hover) {\n .btn-outline-bg-neutral:hover {\n border-color: var(--atomic-primary);\n }\n }\n @media (hover: hover) {\n .btn-outline-bg-neutral:hover {\n background-color: var(--atomic-neutral-light);\n }\n }\n @media (hover: hover) {\n .btn-outline-bg-neutral:hover {\n color: var(--atomic-primary);\n }\n }\n .btn-outline-bg-neutral:focus-visible {\n border-color: var(--atomic-primary);\n }\n .btn-outline-bg-neutral:focus-visible {\n background-color: var(--atomic-neutral-light);\n }\n .btn-outline-bg-neutral:focus-visible {\n color: var(--atomic-primary);\n }\n .btn-outline-bg-neutral:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .btn-outline-bg-neutral:focus-visible {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n .btn-outline-bg-neutral:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-outline-bg-neutral:disabled {\n cursor: not-allowed;\n }\n .btn-outline-bg-neutral:disabled {\n border-color: var(--atomic-neutral);\n }\n .btn-outline-bg-neutral:disabled {\n color: var(--atomic-on-background);\n }\n .btn-outline-bg-neutral:disabled {\n opacity: 50%;\n }\n .btn-outline-bg-error {\n border-radius: var(--atomic-border-radius);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n background-color: var(--atomic-background);\n color: var(--atomic-on-background);\n }\n @media (hover: hover) {\n .btn-outline-bg-error:hover {\n border-color: var(--atomic-primary);\n }\n }\n @media (hover: hover) {\n .btn-outline-bg-error:hover {\n background-color: var(--atomic-neutral-light);\n }\n }\n @media (hover: hover) {\n .btn-outline-bg-error:hover {\n color: var(--atomic-primary);\n }\n }\n .btn-outline-bg-error:focus-visible {\n border-color: var(--atomic-primary);\n }\n .btn-outline-bg-error:focus-visible {\n background-color: var(--atomic-neutral-light);\n }\n .btn-outline-bg-error:focus-visible {\n color: var(--atomic-primary);\n }\n .btn-outline-bg-error:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .btn-outline-bg-error:focus-visible {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n .btn-outline-bg-error:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-outline-bg-error:disabled {\n cursor: not-allowed;\n }\n .btn-outline-bg-error:disabled {\n border-color: var(--atomic-neutral);\n }\n .btn-outline-bg-error:disabled {\n color: var(--atomic-on-background);\n }\n .btn-outline-bg-error:disabled {\n opacity: 50%;\n }\n .btn-outline-error {\n border-radius: var(--atomic-border-radius);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n background-color: var(--atomic-background);\n color: var(--atomic-on-background);\n }\n @media (hover: hover) {\n .btn-outline-error:hover {\n border-color: var(--atomic-error);\n }\n }\n @media (hover: hover) {\n .btn-outline-error:hover {\n color: var(--atomic-error);\n }\n }\n .btn-outline-error:focus-visible {\n border-color: var(--atomic-error);\n }\n .btn-outline-error:focus-visible {\n color: var(--atomic-error);\n }\n .btn-outline-error:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .btn-outline-error:focus-visible {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n .btn-outline-error:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-outline-error:disabled {\n cursor: not-allowed;\n }\n .btn-outline-error:disabled {\n border-color: var(--atomic-neutral);\n }\n .btn-outline-error:disabled {\n color: var(--atomic-on-background);\n }\n .btn-outline-error:disabled {\n opacity: 50%;\n }\n .btn-text-neutral {\n border-radius: var(--atomic-border-radius);\n background-color: var(--atomic-background);\n color: var(--atomic-on-background);\n }\n @media (hover: hover) {\n .btn-text-neutral:hover {\n background-color: var(--atomic-neutral-light);\n }\n }\n @media (hover: hover) {\n .btn-text-neutral:hover {\n color: var(--atomic-primary);\n }\n }\n .btn-text-neutral:focus-visible {\n background-color: var(--atomic-neutral-light);\n }\n .btn-text-neutral:focus-visible {\n color: var(--atomic-primary);\n }\n .btn-text-neutral:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-text-transparent {\n color: var(--atomic-on-background);\n }\n @media (hover: hover) {\n .btn-text-transparent:hover {\n color: var(--atomic-primary-light);\n }\n }\n .btn-text-transparent:focus-visible {\n color: var(--atomic-primary-light);\n }\n .btn-square-neutral {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n background-color: var(--atomic-background);\n color: var(--atomic-on-background);\n }\n @media (hover: hover) {\n .btn-square-neutral:hover {\n background-color: var(--atomic-neutral-light);\n }\n }\n .btn-square-neutral:focus-visible {\n background-color: var(--atomic-neutral-light);\n }\n .btn-square-neutral:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-page {\n display: grid;\n height: calc(0.25rem * 10);\n width: calc(0.25rem * 10);\n place-items: center;\n border-style: var(--tw-border-style);\n border-width: 0px;\n font-size: var(--atomic-text-lg);\n line-height: var(--tw-leading, calc(1.75 / 1.125));\n }\n @media (hover: hover) {\n .btn-page:hover {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n }\n .btn-page:focus-visible {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .btn-page.selected {\n border-style: var(--tw-border-style);\n border-width: 2px;\n border-color: var(--atomic-primary);\n --tw-font-weight: var(--atomic-font-bold);\n font-weight: var(--atomic-font-bold);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n border-color: oklch(0.928 0.006 264.531);\n }\n :host {\n display: block;\n }\n :host, button, input, select {\n font-family: var(--atomic-font-family);\n font-size: var(--atomic-text-base);\n line-height: var(--tw-leading, calc(1.5 / 1));\n --tw-font-weight: var(--atomic-font-normal);\n font-weight: var(--atomic-font-normal);\n }\n button {\n cursor: pointer;\n }\n :host(.atomic-hidden) {\n display: none;\n }\n .ripple {\n position: absolute;\n pointer-events: none;\n transform: scale(0);\n border-radius: 50%;\n animation: ripple var(--animation-duration) linear;\n }\n .ripple-relative {\n position: relative;\n }\n .ripple-parent {\n overflow: hidden;\n }\n @keyframes ripple {\n to {\n transform: scale(4);\n opacity: 0;\n }\n }\n}\n@keyframes scaleUp {\n 0% {\n transform: scale(0.7) translateY(150vh);\n opacity: 0.7;\n }\n 100% {\n transform: scale(1) translateY(0px);\n opacity: 1;\n }\n}\n@keyframes slideDown {\n 0% {\n transform: translateY(0px);\n opacity: 1;\n }\n 100% {\n transform: translateY(150vh);\n opacity: 0.7;\n }\n}\n.list-wrapper.placeholder .result-component {\n display: none;\n}\n.list-wrapper.placeholder table.list-root {\n display: none;\n}\n.list-wrapper:not(.placeholder) atomic-result-placeholder {\n display: none;\n}\n.list-wrapper:not(.placeholder) atomic-result-table-placeholder {\n display: none;\n}\n.list-root.loading {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n@keyframes pulse {\n 0%, 100% {\n opacity: 0.6;\n }\n 50% {\n opacity: 0.2;\n }\n}\n:host [part~=\'outline\'][part~=\'result-list-grid-clickable-container\'] {\n position: relative;\n border: 1px solid transparent;\n padding: 1rem;\n border-radius: 1rem;\n transition: all 0.12s ease-out;\n}\n:host [part~=\'outline\'][part~=\'result-list-grid-clickable-container\']:hover {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n box-shadow: 0px 10px 25px var(--atomic-neutral);\n cursor: pointer;\n}\n:host [part=\'result-list-grid-clickable\']:focus-visible {\n border-radius: 2px;\n border-style: var(--tw-border-style);\n border-width: 2px;\n border-color: var(--atomic-primary);\n color: var(--atomic-primary);\n cursor: pointer;\n display: inline-block;\n text-decoration: underline;\n text-align: center;\n position: absolute;\n}\n:host [part=\'result-list-grid-clickable\']:not(:focus) {\n clip: rect(1px, 1px, 1px, 1px);\n overflow: hidden;\n position: absolute;\n padding: 0;\n}\n:host .list-wrapper {\n word-break: break-word;\n}\n:host .list-root.display-grid {\n display: grid;\n justify-content: space-evenly;\n}\n:host .list-root.display-grid .result-component {\n height: 100%;\n box-sizing: border-box;\n}\n:host {\n display: block;\n}\n:host .list-root [part~=\'outline\'] {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n padding: 1rem;\n border-radius: 1rem;\n}\n:host .list-root atomic-result-placeholder {\n border-color: transparent;\n}\n:host .list-root {\n grid-column-gap: 0.5rem;\n grid-row-gap: 0.5rem;\n grid-template-columns: repeat(var(--atomic-recs-number-of-columns, 1), minmax(0, 1fr));\n}\n:host [part=\'label\'] {\n font-family: var(--atomic-font-family);\n font-size: var(--atomic-text-2xl);\n line-height: var(--tw-leading, calc(2 / 1.5));\n --tw-font-weight: var(--atomic-font-bold);\n font-weight: var(--atomic-font-bold);\n}\n:host atomic-result:not(.hydrated) {\n visibility: hidden;\n}\n@property --tw-border-style {\n syntax: "*";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-translate-x {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-scale-x {\n syntax: "*";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-y {\n syntax: "*";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-z {\n syntax: "*";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-rotate-x {\n syntax: "*";\n inherits: false;\n}\n@property --tw-rotate-y {\n syntax: "*";\n inherits: false;\n}\n@property --tw-rotate-z {\n syntax: "*";\n inherits: false;\n}\n@property --tw-skew-x {\n syntax: "*";\n inherits: false;\n}\n@property --tw-skew-y {\n syntax: "*";\n inherits: false;\n}\n@property --tw-space-y-reverse {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-space-x-reverse {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-divide-y-reverse {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-gradient-position {\n syntax: "*";\n inherits: false;\n}\n@property --tw-gradient-from {\n syntax: "<color>";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-via {\n syntax: "<color>";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-to {\n syntax: "<color>";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-stops {\n syntax: "*";\n inherits: false;\n}\n@property --tw-gradient-via-stops {\n syntax: "*";\n inherits: false;\n}\n@property --tw-gradient-from-position {\n syntax: "<length-percentage>";\n inherits: false;\n initial-value: 0%;\n}\n@property --tw-gradient-via-position {\n syntax: "<length-percentage>";\n inherits: false;\n initial-value: 50%;\n}\n@property --tw-gradient-to-position {\n syntax: "<length-percentage>";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-leading {\n syntax: "*";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: "*";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: "*";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: "<percentage>";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: "*";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: "<percentage>";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: "*";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: "*";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: "*";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: "<length>";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: "*";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: "*";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-blur {\n syntax: "*";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: "*";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: "*";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: "*";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: "*";\n inherits: false;\n}\n@property --tw-invert {\n syntax: "*";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: "*";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: "*";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: "*";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: "*";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: "*";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: "<percentage>";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: "*";\n inherits: false;\n}\n@property --tw-duration {\n syntax: "*";\n inherits: false;\n}\n@property --tw-ease {\n syntax: "*";\n inherits: false;\n}\n@property --tw-content {\n syntax: "*";\n initial-value: "";\n inherits: false;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-border-style: solid;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-space-y-reverse: 0;\n --tw-space-x-reverse: 0;\n --tw-divide-y-reverse: 0;\n --tw-gradient-position: initial;\n --tw-gradient-from: #0000;\n --tw-gradient-via: #0000;\n --tw-gradient-to: #0000;\n --tw-gradient-stops: initial;\n --tw-gradient-via-stops: initial;\n --tw-gradient-from-position: 0%;\n --tw-gradient-via-position: 50%;\n --tw-gradient-to-position: 100%;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-duration: initial;\n --tw-ease: initial;\n --tw-content: "";\n }\n }\n}\n';const j=z;var R=undefined&&undefined.__decorate||function(n,r,t,i){var e=arguments.length,a=e<3?r:i===null?i=Object.getOwnPropertyDescriptor(r,t):i,o;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")a=Reflect.decorate(n,r,t,i);else for(var l=n.length-1;l>=0;l--)if(o=n[l])a=(e<3?o(a):e>3?o(r,t,a):o(r,t))||a;return e>3&&a&&Object.defineProperty(r,t,a),a};const P=class{constructor(r){n(this,r);this.loadingFlag=p("firstRecommendationLoaded-");this.isAppLoaded=false;this.resultTemplateRegistered=false;this.templateHasError=false;this.currentPage=0;this.recommendation="Recommendation";this.display="list";this.density="normal";this.imageSize="small";this.numberOfRecommendations=10;this.headingLevel=0;this.error=undefined;this.isAppLoaded=false;this.resultTemplateRegistered=false;this.templateHasError=false;this.currentPage=0;this.recommendationListState=undefined;this.recommendation="Recommendation";this.display="list";this.density="normal";this.imageSize="small";this.numberOfRecommendations=10;this.numberOfRecommendationsPerPage=undefined;this.label=undefined;this.headingLevel=0}async watchNumberOfRecommendationsPerPage(){this.currentPage=0}async setRenderFunction(n){this.itemRenderingFunction=n}async previousPage(){this.currentPage=this.currentPage-1<0?this.numberOfPages-1:this.currentPage-1}async nextPage(){this.currentPage=(this.currentPage+1)%this.numberOfPages}initialize(){this.validateNumberOfRecommendationsPerPage();this.validateRecommendationIdentifier();this.updateOriginLevel2();this.recommendationList=o(this.bindings.engine,{options:{id:this.recommendation,numberOfRecommendations:this.numberOfRecommendations}});this.itemTemplateProvider=new u({includeDefaultTemplate:true,templateElements:Array.from(this.host.querySelectorAll("atomic-recs-result-template")),getResultTemplateRegistered:()=>this.resultTemplateRegistered,getTemplateHasError:()=>this.templateHasError,setResultTemplateRegistered:n=>{this.resultTemplateRegistered=n},setTemplateHasError:n=>{this.templateHasError=n},bindings:this.bindings});this.itemListCommon=new f({engineSubscribe:this.bindings.engine.subscribe,getCurrentNumberOfItems:()=>this.recommendationListState.recommendations.length,getIsLoading:()=>this.recommendationListState.isLoading,host:this.host,loadingFlag:this.loadingFlag,nextNewItemTarget:this.focusTarget,store:this.bindings.store});this.actionsHistoryActions=a(this.bindings.engine);w(this.bindings.store,(n=>{this.isAppLoaded=n}))}get focusTarget(){if(!this.nextNewResultTarget){this.nextNewResultTarget=new m(this)}return this.nextNewResultTarget}get recommendationListStateWithAugment(){return{...this.recommendationListState,firstRequestExecuted:this.recommendationListState.searchResponseId!=="",hasError:this.recommendationListState.error!==null,hasItems:this.recommendationListState.recommendations.length!==0,results:this.subsetRecommendations}}validateNumberOfRecommendationsPerPage(){const n=new e({min:1,max:this.numberOfRecommendations-1}).validate(this.numberOfRecommendationsPerPage);if(n){this.error=new Error(`The "numberOfRecommendationsPerPage" is invalid: ${n}`)}}validateRecommendationIdentifier(){const n=document.querySelectorAll(`atomic-ipx-recs-list[recommendation="${this.recommendation}"]`);if(n.length>1){this.bindings.engine.logger.warn(`There are multiple atomic-ipx-recs-list in this page with the same recommendation property "${this.recommendation}". Make sure to set a different recommendation property for each.`)}}updateOriginLevel2(){if(this.label){const n=l(this.bindings.engine).setOriginLevel2({originLevel2:this.label});this.bindings.engine.dispatch(n)}}renderHeading(){if(!this.label){return}if(this.recommendationListStateWithAugment.hasError){return}if(this.recommendationListStateWithAugment.firstRequestExecuted&&!this.recommendationListStateWithAugment.hasItems){return}return r(k,{level:this.headingLevel,part:"label",class:"m-0 mb-2"},this.bindings.i18n.t(this.label))}get currentIndex(){return Math.abs(this.currentPage*this.numberOfRecommendationsPerPage%this.recommendationListState.recommendations.length)}get subsetRecommendations(){if(!this.numberOfRecommendationsPerPage){return this.recommendationListState.recommendations}return this.recommendationListState.recommendations.slice(this.currentIndex,this.currentIndex+this.numberOfRecommendationsPerPage)}get numberOfPages(){return Math.ceil(this.recommendationListState.recommendations.length/this.numberOfRecommendationsPerPage)}get hasPagination(){return!!this.numberOfRecommendationsPerPage}get shouldRenderPagination(){return this.hasPagination&&this.recommendationListStateWithAugment.hasItems}async onSelect(n,r){if(n.raw.permanentid&&this.actionsHistoryActions){const r=this.actionsHistoryActions.addPageViewEntryInActionsHistory(n.raw.permanentid);this.bindings.engine.dispatch(r)}r()}getPropsForAtomicRecsResult(n){const r=s(this.bindings.engine,{options:{result:n}});const t=r.select;r.select=()=>{this.onSelect(n,t)};const i=this.itemTemplateProvider.getLinkTemplateContent(n);return{interactiveResult:r,result:n,renderingFunction:this.itemRenderingFunction,loadingFlag:this.loadingFlag,key:this.itemListCommon.getResultId(n.uniqueId,this.recommendationListState.searchResponseId,this.density,this.imageSize),content:this.itemTemplateProvider.getTemplateContent(n),linkContent:i,stopPropagation:!!i,store:this.bindings.store,density:this.density,display:this.display,imageSize:this.imageSize}}computeListDisplayClasses(){const n=!this.isAppLoaded;return y("grid",this.density,this.imageSize,this.recommendationListState.isLoading,n)}renderAsGrid(n,t){const i=this.getPropsForAtomicRecsResult(n);return r(v,{selectorForItem:"atomic-recs-result",item:n,...i.interactiveResult,setRef:n=>n&&this.itemListCommon.setNewResultRef(n,t)},r("atomic-recs-result",{...i}))}renderListOfRecommendations(){this.itemListCommon.updateBreakpoints();const n=this.computeListDisplayClasses();if(!this.resultTemplateRegistered||this.itemTemplateProvider.hasError||this.error){return}return r(b,{listClasses:n,display:"grid"},r(h,{density:this.density,display:this.display,imageSize:this.imageSize,displayPlaceholders:!this.isAppLoaded,numberOfPlaceholders:this.numberOfRecommendationsPerPage??this.numberOfRecommendations}),r(g,{...this.recommendationListStateWithAugment},this.subsetRecommendations.map(((n,r)=>this.renderAsGrid(n,r)))))}render(){return r(t,{key:"60391284fcd3b16fccfab94771e123938ddfb7b7"},this.renderHeading(),this.shouldRenderPagination?r(x,{bindings:this.bindings,currentPage:this.currentPage,nextPage:()=>this.nextPage(),previousPage:()=>this.previousPage(),numberOfPages:this.numberOfPages},this.renderListOfRecommendations()):this.renderListOfRecommendations())}get host(){return i(this)}static get watchers(){return{numberOfRecommendationsPerPage:["watchNumberOfRecommendationsPerPage"]}}};R([c()],P.prototype,"bindings",void 0);R([d("recommendationList")],P.prototype,"recommendationListState",void 0);P.style=j;export{P as atomic_ipx_recs_list};
|
|
2
|
+
//# sourceMappingURL=p-a006f8bc.entry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["atomicIpxRecsListCss","AtomicIpxRecsListStyle0","AtomicIPXRecsList","this","loadingFlag","randomID","isAppLoaded","resultTemplateRegistered","templateHasError","currentPage","recommendation","display","density","imageSize","numberOfRecommendations","headingLevel","watchNumberOfRecommendationsPerPage","setRenderFunction","resultRenderingFunction","itemRenderingFunction","previousPage","numberOfPages","nextPage","initialize","validateNumberOfRecommendationsPerPage","validateRecommendationIdentifier","updateOriginLevel2","recommendationList","buildRecommendationList","bindings","engine","options","id","itemTemplateProvider","ItemTemplateProvider","includeDefaultTemplate","templateElements","Array","from","host","querySelectorAll","getResultTemplateRegistered","getTemplateHasError","setResultTemplateRegistered","value","setTemplateHasError","itemListCommon","ItemListCommon","engineSubscribe","subscribe","getCurrentNumberOfItems","recommendationListState","recommendations","length","getIsLoading","isLoading","nextNewItemTarget","focusTarget","store","actionsHistoryActions","loadIPXActionsHistoryActions","createAppLoadedListener","nextNewResultTarget","FocusTargetController","recommendationListStateWithAugment","firstRequestExecuted","searchResponseId","hasError","error","hasItems","results","subsetRecommendations","msg","NumberValue","min","max","validate","numberOfRecommendationsPerPage","Error","recListWithRecommendation","document","logger","warn","label","action","loadConfigurationActions","setOriginLevel2","originLevel2","dispatch","renderHeading","h","Heading","level","part","class","i18n","t","currentIndex","Math","abs","slice","ceil","hasPagination","shouldRenderPagination","onSelect","originalSelect","raw","permanentid","addPageViewEntryInActionsHistory","getPropsForAtomicRecsResult","interactiveResult","buildRecsInteractiveResult","result","select","linkContent","getLinkTemplateContent","renderingFunction","key","getResultId","uniqueId","content","getTemplateContent","stopPropagation","computeListDisplayClasses","displayPlaceholders","getItemListDisplayClasses","renderAsGrid","i","propsForAtomicRecsResult","DisplayGrid","selectorForItem","item","setRef","element","setNewResultRef","renderListOfRecommendations","updateBreakpoints","listClasses","DisplayWrapper","ResultsPlaceholdersGuard","numberOfPlaceholders","ItemDisplayGuard","map","render","Fragment","Carousel","__decorate","InitializeBindings","BindStateToController"],"sources":["src/components/ipx/atomic-ipx-recs-list/atomic-recs-list/atomic-ipx-recs-list.pcss?tag=atomic-ipx-recs-list&encapsulation=shadow","src/components/ipx/atomic-ipx-recs-list/atomic-recs-list/atomic-ipx-recs-list.tsx"],"sourcesContent":["@import '../../../../global/global.pcss';\n@import '../../../common/item-list/styles/mixins.pcss';\n@import '../../../common/item-list/styles/placeholders.pcss';\n\n:host {\n @apply atomic-grid-clickable-elements;\n @apply atomic-grid-display-common;\n display: block;\n\n /**\n * @prop --atomic-recs-number-of-columns: Number of columns for the recommendation list.\n */\n .list-root {\n @apply atomic-grid-with-cards;\n grid-template-columns: repeat(var(--atomic-recs-number-of-columns, 1), minmax(0, 1fr));\n }\n\n [part='label'] {\n @apply font-sans text-2xl font-bold;\n }\n\n atomic-result:not(.hydrated) {\n visibility: hidden;\n }\n}\n","import {NumberValue} from '@coveo/bueno';\nimport {\n IPXActionsHistoryActionCreators,\n loadIPXActionsHistoryActions,\n} from '@coveo/headless';\nimport {\n buildRecommendationList,\n RecommendationList,\n RecommendationListState,\n loadConfigurationActions,\n Result as RecsResult,\n buildInteractiveResult as buildRecsInteractiveResult,\n} from '@coveo/headless/recommendation';\nimport {\n Component,\n State,\n Element,\n Prop,\n Method,\n h,\n Fragment,\n Watch,\n} from '@stencil/core';\nimport {\n InitializableComponent,\n InitializeBindings,\n BindStateToController,\n} from '../../../../utils/initialization-utils';\nimport {FocusTargetController} from '../../../../utils/stencil-accessibility-utils';\nimport {randomID} from '../../../../utils/utils';\nimport {ResultsPlaceholdersGuard} from '../../../common/atomic-result-placeholder/stencil-placeholders';\nimport {createAppLoadedListener} from '../../../common/interface/store';\nimport {ItemDisplayGuard} from '../../../common/item-list/item-display-guard';\nimport {ItemTemplateProvider} from '../../../common/item-list/item-template-provider';\nimport {DisplayGrid} from '../../../common/item-list/stencil-display-grid';\nimport {DisplayWrapper} from '../../../common/item-list/stencil-display-wrapper';\nimport {\n ItemListCommon,\n ItemRenderingFunction,\n} from '../../../common/item-list/stencil-item-list-common';\nimport {\n getItemListDisplayClasses,\n ItemDisplayBasicLayout,\n ItemDisplayDensity,\n ItemDisplayImageSize,\n} from '../../../common/layout/display-options';\nimport {Carousel} from '../../../common/stencil-carousel';\nimport {Heading} from '../../../common/stencil-heading';\nimport {RecsBindings} from '../../../recommendations/atomic-recs-interface/atomic-recs-interface';\n\n/**\n * The `atomic-ipx-recs-list` component displays recommendations by applying one or more result templates.\n *\n * @part result-list - The element containing the list of results.\n * @part result-list-grid-clickable-container - The parent of the result & the clickable link encompassing it.\n * @part result-list-grid-clickable - The clickable link encompassing the result.\n * @part label - The label of the result list.\n * @part previous-button - The previous button.\n * @part next-button - The next button.\n * @part indicators - The list of indicators.\n * @part indicator - A single indicator.\n * @part active-indicator - The active indicator.\n * @internal\n */\n@Component({\n tag: 'atomic-ipx-recs-list',\n styleUrl: 'atomic-ipx-recs-list.pcss',\n shadow: true,\n})\nexport class AtomicIPXRecsList implements InitializableComponent<RecsBindings> {\n @InitializeBindings() public bindings!: RecsBindings;\n public recommendationList!: RecommendationList;\n private loadingFlag = randomID('firstRecommendationLoaded-');\n private itemRenderingFunction: ItemRenderingFunction;\n private itemTemplateProvider!: ItemTemplateProvider;\n private nextNewResultTarget?: FocusTargetController;\n private itemListCommon!: ItemListCommon;\n private actionsHistoryActions?: IPXActionsHistoryActionCreators;\n\n @Element() public host!: HTMLDivElement;\n\n @State() public error!: Error;\n @State() private isAppLoaded = false;\n @State() private resultTemplateRegistered = false;\n @State() private templateHasError = false;\n @State() private currentPage = 0;\n @BindStateToController('recommendationList')\n @State()\n public recommendationListState!: RecommendationListState;\n\n /**\n * The Recommendation identifier used by the Coveo platform to retrieve recommended documents.\n * Make sure to set a different value for each atomic-ipx-recs-list in your page.\n */\n @Prop({reflect: true}) public recommendation = 'Recommendation';\n\n /**\n * The layout to apply when displaying results themselves. This does not affect the display of the surrounding list itself.\n * To modify the number of recommendations per column, modify the --atomic-recs-number-of-columns CSS variable.\n */\n @Prop({reflect: true}) public display: ItemDisplayBasicLayout = 'list';\n /**\n * The spacing of various elements in the result list, including the gap between results, the gap between parts of a result, and the font sizes of different parts in a result.\n */\n @Prop({reflect: true}) public density: ItemDisplayDensity = 'normal';\n /**\n * The expected size of the image displayed in the results.\n */\n @Prop({reflect: true})\n public imageSize: ItemDisplayImageSize = 'small';\n\n /**\n * The total number of recommendations to display.\n * This does not modify the number of recommendations per column. To do so, modify the --atomic-recs-number-of-columns CSS variable.\n */\n @Prop({reflect: true}) public numberOfRecommendations = 10;\n\n /**\n * The number of recommendations to display, per page.\n * Setting a value greater than and lower than the numberOfRecommendations value activates the carousel.\n * This does not affect the display of the list itself, only the number of recommendation pages.\n */\n @Prop({reflect: true}) public numberOfRecommendationsPerPage?: number;\n\n /**\n * The non-localized label for the list of recommendations.\n */\n @Prop({reflect: true}) public label?: string;\n\n /**\n * The [heading level](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements) to use for the heading label, from 1 to 6.\n */\n @Prop({reflect: true}) public headingLevel = 0;\n\n @Watch('numberOfRecommendationsPerPage')\n public async watchNumberOfRecommendationsPerPage() {\n this.currentPage = 0;\n }\n\n /**\n * Sets a rendering function to bypass the standard HTML template mechanism for rendering results.\n * You can use this function while working with web frameworks that don't use plain HTML syntax, e.g., React, Angular or Vue.\n *\n * Do not use this method if you integrate Atomic in a plain HTML deployment.\n *\n * @param resultRenderingFunction\n */\n @Method() public async setRenderFunction(\n resultRenderingFunction: ItemRenderingFunction\n ) {\n this.itemRenderingFunction = resultRenderingFunction;\n }\n\n /**\n * Moves to the previous page, when the carousel is activated.\n */\n @Method() public async previousPage() {\n this.currentPage =\n this.currentPage - 1 < 0 ? this.numberOfPages - 1 : this.currentPage - 1;\n }\n\n /**\n * Moves to the next page, when the carousel is activated.\n */\n @Method() public async nextPage() {\n this.currentPage = (this.currentPage + 1) % this.numberOfPages;\n }\n\n public initialize() {\n this.validateNumberOfRecommendationsPerPage();\n this.validateRecommendationIdentifier();\n this.updateOriginLevel2();\n this.recommendationList = buildRecommendationList(this.bindings.engine, {\n options: {\n id: this.recommendation,\n numberOfRecommendations: this.numberOfRecommendations,\n },\n });\n\n this.itemTemplateProvider = new ItemTemplateProvider({\n includeDefaultTemplate: true,\n templateElements: Array.from(\n this.host.querySelectorAll('atomic-recs-result-template')\n ),\n getResultTemplateRegistered: () => this.resultTemplateRegistered,\n getTemplateHasError: () => this.templateHasError,\n setResultTemplateRegistered: (value: boolean) => {\n this.resultTemplateRegistered = value;\n },\n setTemplateHasError: (value: boolean) => {\n this.templateHasError = value;\n },\n bindings: this.bindings,\n });\n\n this.itemListCommon = new ItemListCommon({\n engineSubscribe: this.bindings.engine.subscribe,\n getCurrentNumberOfItems: () =>\n this.recommendationListState.recommendations.length,\n getIsLoading: () => this.recommendationListState.isLoading,\n host: this.host,\n loadingFlag: this.loadingFlag,\n nextNewItemTarget: this.focusTarget,\n store: this.bindings.store,\n });\n this.actionsHistoryActions = loadIPXActionsHistoryActions(\n this.bindings.engine\n );\n\n createAppLoadedListener(this.bindings.store, (isAppLoaded) => {\n this.isAppLoaded = isAppLoaded;\n });\n }\n\n public get focusTarget() {\n if (!this.nextNewResultTarget) {\n this.nextNewResultTarget = new FocusTargetController(this);\n }\n return this.nextNewResultTarget;\n }\n\n private get recommendationListStateWithAugment() {\n return {\n ...this.recommendationListState,\n firstRequestExecuted:\n this.recommendationListState.searchResponseId !== '',\n hasError: this.recommendationListState.error !== null,\n hasItems: this.recommendationListState.recommendations.length !== 0,\n results: this.subsetRecommendations,\n };\n }\n\n private validateNumberOfRecommendationsPerPage() {\n const msg = new NumberValue({\n min: 1,\n max: this.numberOfRecommendations - 1,\n }).validate(this.numberOfRecommendationsPerPage!);\n\n if (msg) {\n this.error = new Error(\n `The \"numberOfRecommendationsPerPage\" is invalid: ${msg}`\n );\n }\n }\n\n private validateRecommendationIdentifier() {\n const recListWithRecommendation = document.querySelectorAll(\n `atomic-ipx-recs-list[recommendation=\"${this.recommendation}\"]`\n );\n\n if (recListWithRecommendation.length > 1) {\n this.bindings.engine.logger.warn(\n `There are multiple atomic-ipx-recs-list in this page with the same recommendation property \"${this.recommendation}\". Make sure to set a different recommendation property for each.`\n );\n }\n }\n\n private updateOriginLevel2() {\n if (this.label) {\n const action = loadConfigurationActions(\n this.bindings.engine\n ).setOriginLevel2({\n originLevel2: this.label,\n });\n\n this.bindings.engine.dispatch(action);\n }\n }\n\n private renderHeading() {\n if (!this.label) {\n return;\n }\n\n if (this.recommendationListStateWithAugment.hasError) {\n return;\n }\n\n if (\n this.recommendationListStateWithAugment.firstRequestExecuted &&\n !this.recommendationListStateWithAugment.hasItems\n ) {\n return;\n }\n\n return (\n <Heading level={this.headingLevel} part=\"label\" class=\"m-0 mb-2\">\n {this.bindings.i18n.t(this.label)}\n </Heading>\n );\n }\n\n private get currentIndex() {\n return Math.abs(\n (this.currentPage * this.numberOfRecommendationsPerPage!) %\n this.recommendationListState.recommendations.length\n );\n }\n\n private get subsetRecommendations() {\n if (!this.numberOfRecommendationsPerPage) {\n return this.recommendationListState.recommendations;\n }\n\n return this.recommendationListState.recommendations.slice(\n this.currentIndex,\n this.currentIndex + this.numberOfRecommendationsPerPage\n );\n }\n\n private get numberOfPages() {\n return Math.ceil(\n this.recommendationListState.recommendations.length /\n this.numberOfRecommendationsPerPage!\n );\n }\n\n private get hasPagination() {\n return !!this.numberOfRecommendationsPerPage;\n }\n\n private get shouldRenderPagination() {\n return (\n this.hasPagination && this.recommendationListStateWithAugment.hasItems\n );\n }\n\n private async onSelect(\n recommendation: RecsResult,\n originalSelect: () => void\n ) {\n if (recommendation.raw.permanentid && this.actionsHistoryActions) {\n const action =\n this.actionsHistoryActions.addPageViewEntryInActionsHistory(\n recommendation.raw.permanentid\n );\n this.bindings.engine.dispatch(action);\n }\n originalSelect();\n }\n\n private getPropsForAtomicRecsResult(recommendation: RecsResult) {\n const interactiveResult = buildRecsInteractiveResult(this.bindings.engine, {\n options: {result: recommendation},\n });\n const originalSelect = interactiveResult.select;\n interactiveResult.select = () => {\n this.onSelect(recommendation, originalSelect);\n };\n const linkContent =\n this.itemTemplateProvider.getLinkTemplateContent(recommendation);\n\n return {\n interactiveResult,\n result: recommendation,\n renderingFunction: this.itemRenderingFunction,\n loadingFlag: this.loadingFlag,\n key: this.itemListCommon.getResultId(\n recommendation.uniqueId,\n this.recommendationListState.searchResponseId,\n this.density,\n this.imageSize\n ),\n content: this.itemTemplateProvider.getTemplateContent(recommendation),\n linkContent,\n stopPropagation: !!linkContent,\n store: this.bindings.store,\n density: this.density,\n display: this.display,\n imageSize: this.imageSize,\n };\n }\n\n private computeListDisplayClasses() {\n const displayPlaceholders = !this.isAppLoaded;\n\n return getItemListDisplayClasses(\n 'grid',\n this.density,\n this.imageSize,\n this.recommendationListState.isLoading,\n displayPlaceholders\n );\n }\n\n private renderAsGrid(recommendation: RecsResult, i: number) {\n const propsForAtomicRecsResult =\n this.getPropsForAtomicRecsResult(recommendation);\n return (\n <DisplayGrid\n selectorForItem=\"atomic-recs-result\"\n item={recommendation}\n {...propsForAtomicRecsResult.interactiveResult}\n setRef={(element) =>\n element && this.itemListCommon.setNewResultRef(element, i)\n }\n >\n <atomic-recs-result {...propsForAtomicRecsResult}></atomic-recs-result>\n </DisplayGrid>\n );\n }\n\n private renderListOfRecommendations() {\n this.itemListCommon.updateBreakpoints();\n const listClasses = this.computeListDisplayClasses();\n\n if (\n !this.resultTemplateRegistered ||\n this.itemTemplateProvider.hasError ||\n this.error\n ) {\n return;\n }\n\n return (\n <DisplayWrapper listClasses={listClasses} display=\"grid\">\n <ResultsPlaceholdersGuard\n density={this.density}\n display={this.display}\n imageSize={this.imageSize}\n displayPlaceholders={!this.isAppLoaded}\n numberOfPlaceholders={\n this.numberOfRecommendationsPerPage ?? this.numberOfRecommendations\n }\n ></ResultsPlaceholdersGuard>\n <ItemDisplayGuard {...this.recommendationListStateWithAugment}>\n {this.subsetRecommendations.map((recommendation, i) => {\n return this.renderAsGrid(recommendation, i);\n })}\n </ItemDisplayGuard>\n </DisplayWrapper>\n );\n }\n\n public render() {\n return (\n <Fragment>\n {this.renderHeading()}\n {this.shouldRenderPagination ? (\n <Carousel\n bindings={this.bindings}\n currentPage={this.currentPage}\n nextPage={() => this.nextPage()}\n previousPage={() => this.previousPage()}\n numberOfPages={this.numberOfPages}\n >\n {this.renderListOfRecommendations()}\n </Carousel>\n ) : (\n this.renderListOfRecommendations()\n )}\n </Fragment>\n );\n }\n}\n"],"mappings":"ogCAAA,MAAMA,EAAuB,485EAC7B,MAAAC,EAAeD,E,iXCoEFE,EAAiB,M,yBAGpBC,KAAAC,YAAcC,EAAS,8BAUdF,KAAAG,YAAc,MACdH,KAAAI,yBAA2B,MAC3BJ,KAAAK,iBAAmB,MACnBL,KAAAM,YAAc,EASDN,KAAAO,eAAiB,iBAMjBP,KAAAQ,QAAkC,OAIlCR,KAAAS,QAA8B,SAKrDT,KAAAU,UAAkC,QAMXV,KAAAW,wBAA0B,GAiB1BX,KAAAY,aAAe,E,sCAlDd,M,8BACa,M,sBACR,M,iBACL,E,2DASgB,iB,aAMiB,O,aAIJ,S,eAKnB,Q,6BAMe,G,qFAiBX,C,CAGtC,yCAAMC,GACXb,KAAKM,YAAc,C,CAWJ,uBAAMQ,CACrBC,GAEAf,KAAKgB,sBAAwBD,C,CAMd,kBAAME,GACrBjB,KAAKM,YACHN,KAAKM,YAAc,EAAI,EAAIN,KAAKkB,cAAgB,EAAIlB,KAAKM,YAAc,C,CAM1D,cAAMa,GACrBnB,KAAKM,aAAeN,KAAKM,YAAc,GAAKN,KAAKkB,a,CAG5C,UAAAE,GACLpB,KAAKqB,yCACLrB,KAAKsB,mCACLtB,KAAKuB,qBACLvB,KAAKwB,mBAAqBC,EAAwBzB,KAAK0B,SAASC,OAAQ,CACtEC,QAAS,CACPC,GAAI7B,KAAKO,eACTI,wBAAyBX,KAAKW,2BAIlCX,KAAK8B,qBAAuB,IAAIC,EAAqB,CACnDC,uBAAwB,KACxBC,iBAAkBC,MAAMC,KACtBnC,KAAKoC,KAAKC,iBAAiB,gCAE7BC,4BAA6B,IAAMtC,KAAKI,yBACxCmC,oBAAqB,IAAMvC,KAAKK,iBAChCmC,4BAA8BC,IAC5BzC,KAAKI,yBAA2BqC,CAAK,EAEvCC,oBAAsBD,IACpBzC,KAAKK,iBAAmBoC,CAAK,EAE/Bf,SAAU1B,KAAK0B,WAGjB1B,KAAK2C,eAAiB,IAAIC,EAAe,CACvCC,gBAAiB7C,KAAK0B,SAASC,OAAOmB,UACtCC,wBAAyB,IACvB/C,KAAKgD,wBAAwBC,gBAAgBC,OAC/CC,aAAc,IAAMnD,KAAKgD,wBAAwBI,UACjDhB,KAAMpC,KAAKoC,KACXnC,YAAaD,KAAKC,YAClBoD,kBAAmBrD,KAAKsD,YACxBC,MAAOvD,KAAK0B,SAAS6B,QAEvBvD,KAAKwD,sBAAwBC,EAC3BzD,KAAK0B,SAASC,QAGhB+B,EAAwB1D,KAAK0B,SAAS6B,OAAQpD,IAC5CH,KAAKG,YAAcA,CAAW,G,CAIlC,eAAWmD,GACT,IAAKtD,KAAK2D,oBAAqB,CAC7B3D,KAAK2D,oBAAsB,IAAIC,EAAsB5D,K,CAEvD,OAAOA,KAAK2D,mB,CAGd,sCAAYE,GACV,MAAO,IACF7D,KAAKgD,wBACRc,qBACE9D,KAAKgD,wBAAwBe,mBAAqB,GACpDC,SAAUhE,KAAKgD,wBAAwBiB,QAAU,KACjDC,SAAUlE,KAAKgD,wBAAwBC,gBAAgBC,SAAW,EAClEiB,QAASnE,KAAKoE,sB,CAIV,sCAAA/C,GACN,MAAMgD,EAAM,IAAIC,EAAY,CAC1BC,IAAK,EACLC,IAAKxE,KAAKW,wBAA0B,IACnC8D,SAASzE,KAAK0E,gCAEjB,GAAIL,EAAK,CACPrE,KAAKiE,MAAQ,IAAIU,MACf,oDAAoDN,I,EAKlD,gCAAA/C,GACN,MAAMsD,EAA4BC,SAASxC,iBACzC,wCAAwCrC,KAAKO,oBAG/C,GAAIqE,EAA0B1B,OAAS,EAAG,CACxClD,KAAK0B,SAASC,OAAOmD,OAAOC,KAC1B,+FAA+F/E,KAAKO,kF,EAKlG,kBAAAgB,GACN,GAAIvB,KAAKgF,MAAO,CACd,MAAMC,EAASC,EACblF,KAAK0B,SAASC,QACdwD,gBAAgB,CAChBC,aAAcpF,KAAKgF,QAGrBhF,KAAK0B,SAASC,OAAO0D,SAASJ,E,EAI1B,aAAAK,GACN,IAAKtF,KAAKgF,MAAO,CACf,M,CAGF,GAAIhF,KAAK6D,mCAAmCG,SAAU,CACpD,M,CAGF,GACEhE,KAAK6D,mCAAmCC,uBACvC9D,KAAK6D,mCAAmCK,SACzC,CACA,M,CAGF,OACEqB,EAACC,EAAO,CAACC,MAAOzF,KAAKY,aAAc8E,KAAK,QAAQC,MAAM,YACnD3F,KAAK0B,SAASkE,KAAKC,EAAE7F,KAAKgF,O,CAKjC,gBAAYc,GACV,OAAOC,KAAKC,IACThG,KAAKM,YAAcN,KAAK0E,+BACvB1E,KAAKgD,wBAAwBC,gBAAgBC,O,CAInD,yBAAYkB,GACV,IAAKpE,KAAK0E,+BAAgC,CACxC,OAAO1E,KAAKgD,wBAAwBC,e,CAGtC,OAAOjD,KAAKgD,wBAAwBC,gBAAgBgD,MAClDjG,KAAK8F,aACL9F,KAAK8F,aAAe9F,KAAK0E,+B,CAI7B,iBAAYxD,GACV,OAAO6E,KAAKG,KACVlG,KAAKgD,wBAAwBC,gBAAgBC,OAC3ClD,KAAK0E,+B,CAIX,iBAAYyB,GACV,QAASnG,KAAK0E,8B,CAGhB,0BAAY0B,GACV,OACEpG,KAAKmG,eAAiBnG,KAAK6D,mCAAmCK,Q,CAI1D,cAAMmC,CACZ9F,EACA+F,GAEA,GAAI/F,EAAegG,IAAIC,aAAexG,KAAKwD,sBAAuB,CAChE,MAAMyB,EACJjF,KAAKwD,sBAAsBiD,iCACzBlG,EAAegG,IAAIC,aAEvBxG,KAAK0B,SAASC,OAAO0D,SAASJ,E,CAEhCqB,G,CAGM,2BAAAI,CAA4BnG,GAClC,MAAMoG,EAAoBC,EAA2B5G,KAAK0B,SAASC,OAAQ,CACzEC,QAAS,CAACiF,OAAQtG,KAEpB,MAAM+F,EAAiBK,EAAkBG,OACzCH,EAAkBG,OAAS,KACzB9G,KAAKqG,SAAS9F,EAAgB+F,EAAe,EAE/C,MAAMS,EACJ/G,KAAK8B,qBAAqBkF,uBAAuBzG,GAEnD,MAAO,CACLoG,oBACAE,OAAQtG,EACR0G,kBAAmBjH,KAAKgB,sBACxBf,YAAaD,KAAKC,YAClBiH,IAAKlH,KAAK2C,eAAewE,YACvB5G,EAAe6G,SACfpH,KAAKgD,wBAAwBe,iBAC7B/D,KAAKS,QACLT,KAAKU,WAEP2G,QAASrH,KAAK8B,qBAAqBwF,mBAAmB/G,GACtDwG,cACAQ,kBAAmBR,EACnBxD,MAAOvD,KAAK0B,SAAS6B,MACrB9C,QAAST,KAAKS,QACdD,QAASR,KAAKQ,QACdE,UAAWV,KAAKU,U,CAIZ,yBAAA8G,GACN,MAAMC,GAAuBzH,KAAKG,YAElC,OAAOuH,EACL,OACA1H,KAAKS,QACLT,KAAKU,UACLV,KAAKgD,wBAAwBI,UAC7BqE,E,CAII,YAAAE,CAAapH,EAA4BqH,GAC/C,MAAMC,EACJ7H,KAAK0G,4BAA4BnG,GACnC,OACEgF,EAACuC,EAAW,CACVC,gBAAgB,qBAChBC,KAAMzH,KACFsH,EAAyBlB,kBAC7BsB,OAASC,GACPA,GAAWlI,KAAK2C,eAAewF,gBAAgBD,EAASN,IAG1DrC,EAAA,yBAAwBsC,I,CAKtB,2BAAAO,GACNpI,KAAK2C,eAAe0F,oBACpB,MAAMC,EAActI,KAAKwH,4BAEzB,IACGxH,KAAKI,0BACNJ,KAAK8B,qBAAqBkC,UAC1BhE,KAAKiE,MACL,CACA,M,CAGF,OACEsB,EAACgD,EAAc,CAACD,YAAaA,EAAa9H,QAAQ,QAChD+E,EAACiD,EAAwB,CACvB/H,QAAST,KAAKS,QACdD,QAASR,KAAKQ,QACdE,UAAWV,KAAKU,UAChB+G,qBAAsBzH,KAAKG,YAC3BsI,qBACEzI,KAAK0E,gCAAkC1E,KAAKW,0BAGhD4E,EAACmD,EAAgB,IAAK1I,KAAK6D,oCACxB7D,KAAKoE,sBAAsBuE,KAAI,CAACpI,EAAgBqH,IACxC5H,KAAK2H,aAAapH,EAAgBqH,M,CAO5C,MAAAgB,GACL,OACErD,EAACsD,EAAQ,CAAA3B,IAAA,4CACNlH,KAAKsF,gBACLtF,KAAKoG,uBACJb,EAACuD,EAAQ,CACPpH,SAAU1B,KAAK0B,SACfpB,YAAaN,KAAKM,YAClBa,SAAU,IAAMnB,KAAKmB,WACrBF,aAAc,IAAMjB,KAAKiB,eACzBC,cAAelB,KAAKkB,eAEnBlB,KAAKoI,+BAGRpI,KAAKoI,8B,kIA3XgBW,EAAA,CAA5BC,K,+BAkBMD,EAAA,CAFNE,EAAsB,uB","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["atomicIpxRecsListCss","AtomicIpxRecsListStyle0","AtomicIPXRecsList","this","loadingFlag","randomID","isAppLoaded","resultTemplateRegistered","templateHasError","currentPage","recommendation","display","density","imageSize","numberOfRecommendations","headingLevel","watchNumberOfRecommendationsPerPage","setRenderFunction","resultRenderingFunction","itemRenderingFunction","previousPage","numberOfPages","nextPage","initialize","validateNumberOfRecommendationsPerPage","validateRecommendationIdentifier","updateOriginLevel2","recommendationList","buildRecommendationList","bindings","engine","options","id","itemTemplateProvider","ItemTemplateProvider","includeDefaultTemplate","templateElements","Array","from","host","querySelectorAll","getResultTemplateRegistered","getTemplateHasError","setResultTemplateRegistered","value","setTemplateHasError","itemListCommon","ItemListCommon","engineSubscribe","subscribe","getCurrentNumberOfItems","recommendationListState","recommendations","length","getIsLoading","isLoading","nextNewItemTarget","focusTarget","store","actionsHistoryActions","loadIPXActionsHistoryActions","createAppLoadedListener","nextNewResultTarget","FocusTargetController","recommendationListStateWithAugment","firstRequestExecuted","searchResponseId","hasError","error","hasItems","results","subsetRecommendations","msg","NumberValue","min","max","validate","numberOfRecommendationsPerPage","Error","recListWithRecommendation","document","logger","warn","label","action","loadConfigurationActions","setOriginLevel2","originLevel2","dispatch","renderHeading","h","Heading","level","part","class","i18n","t","currentIndex","Math","abs","slice","ceil","hasPagination","shouldRenderPagination","onSelect","originalSelect","raw","permanentid","addPageViewEntryInActionsHistory","getPropsForAtomicRecsResult","interactiveResult","buildRecsInteractiveResult","result","select","linkContent","getLinkTemplateContent","renderingFunction","key","getResultId","uniqueId","content","getTemplateContent","stopPropagation","computeListDisplayClasses","displayPlaceholders","getItemListDisplayClasses","renderAsGrid","i","propsForAtomicRecsResult","DisplayGrid","selectorForItem","item","setRef","element","setNewResultRef","renderListOfRecommendations","updateBreakpoints","listClasses","DisplayWrapper","ResultsPlaceholdersGuard","numberOfPlaceholders","ItemDisplayGuard","map","render","Fragment","Carousel","__decorate","InitializeBindings","BindStateToController"],"sources":["src/components/ipx/atomic-ipx-recs-list/atomic-recs-list/atomic-ipx-recs-list.pcss?tag=atomic-ipx-recs-list&encapsulation=shadow","src/components/ipx/atomic-ipx-recs-list/atomic-recs-list/atomic-ipx-recs-list.tsx"],"sourcesContent":["@import '../../../../global/global.pcss';\n@import '../../../common/item-list/styles/mixins.pcss';\n@import '../../../common/item-list/styles/placeholders.pcss';\n\n:host {\n @apply atomic-grid-clickable-elements;\n @apply atomic-grid-display-common;\n display: block;\n\n /**\n * @prop --atomic-recs-number-of-columns: Number of columns for the recommendation list.\n */\n .list-root {\n @apply atomic-grid-with-cards;\n grid-template-columns: repeat(var(--atomic-recs-number-of-columns, 1), minmax(0, 1fr));\n }\n\n [part='label'] {\n @apply font-sans text-2xl font-bold;\n }\n\n atomic-result:not(.hydrated) {\n visibility: hidden;\n }\n}\n","import {NumberValue} from '@coveo/bueno';\nimport {\n IPXActionsHistoryActionCreators,\n loadIPXActionsHistoryActions,\n} from '@coveo/headless';\nimport {\n buildRecommendationList,\n RecommendationList,\n RecommendationListState,\n loadConfigurationActions,\n Result as RecsResult,\n buildInteractiveResult as buildRecsInteractiveResult,\n} from '@coveo/headless/recommendation';\nimport {\n Component,\n State,\n Element,\n Prop,\n Method,\n h,\n Fragment,\n Watch,\n} from '@stencil/core';\nimport {\n InitializableComponent,\n InitializeBindings,\n BindStateToController,\n} from '../../../../utils/initialization-utils';\nimport {FocusTargetController} from '../../../../utils/stencil-accessibility-utils';\nimport {randomID} from '../../../../utils/utils';\nimport {ResultsPlaceholdersGuard} from '../../../common/atomic-result-placeholder/stencil-placeholders';\nimport {createAppLoadedListener} from '../../../common/interface/store';\nimport {ItemDisplayGuard} from '../../../common/item-list/item-display-guard';\nimport {ItemTemplateProvider} from '../../../common/item-list/item-template-provider';\nimport {DisplayGrid} from '../../../common/item-list/stencil-display-grid';\nimport {DisplayWrapper} from '../../../common/item-list/stencil-display-wrapper';\nimport {\n ItemListCommon,\n ItemRenderingFunction,\n} from '../../../common/item-list/stencil-item-list-common';\nimport {\n getItemListDisplayClasses,\n ItemDisplayBasicLayout,\n ItemDisplayDensity,\n ItemDisplayImageSize,\n} from '../../../common/layout/display-options';\nimport {Carousel} from '../../../common/stencil-carousel';\nimport {Heading} from '../../../common/stencil-heading';\nimport {RecsBindings} from '../../../recommendations/atomic-recs-interface/atomic-recs-interface';\n\n/**\n * The `atomic-ipx-recs-list` component displays recommendations by applying one or more result templates.\n *\n * @part result-list - The element containing the list of results.\n * @part result-list-grid-clickable-container - The parent of the result & the clickable link encompassing it.\n * @part result-list-grid-clickable - The clickable link encompassing the result.\n * @part label - The label of the result list.\n * @part previous-button - The previous button.\n * @part next-button - The next button.\n * @part indicators - The list of indicators.\n * @part indicator - A single indicator.\n * @part active-indicator - The active indicator.\n * @internal\n */\n@Component({\n tag: 'atomic-ipx-recs-list',\n styleUrl: 'atomic-ipx-recs-list.pcss',\n shadow: true,\n})\nexport class AtomicIPXRecsList implements InitializableComponent<RecsBindings> {\n @InitializeBindings() public bindings!: RecsBindings;\n public recommendationList!: RecommendationList;\n private loadingFlag = randomID('firstRecommendationLoaded-');\n private itemRenderingFunction: ItemRenderingFunction;\n private itemTemplateProvider!: ItemTemplateProvider;\n private nextNewResultTarget?: FocusTargetController;\n private itemListCommon!: ItemListCommon;\n private actionsHistoryActions?: IPXActionsHistoryActionCreators;\n\n @Element() public host!: HTMLDivElement;\n\n @State() public error!: Error;\n @State() private isAppLoaded = false;\n @State() private resultTemplateRegistered = false;\n @State() private templateHasError = false;\n @State() private currentPage = 0;\n @BindStateToController('recommendationList')\n @State()\n public recommendationListState!: RecommendationListState;\n\n /**\n * The Recommendation identifier used by the Coveo platform to retrieve recommended documents.\n * Make sure to set a different value for each atomic-ipx-recs-list in your page.\n */\n @Prop({reflect: true}) public recommendation = 'Recommendation';\n\n /**\n * The layout to apply when displaying results themselves. This does not affect the display of the surrounding list itself.\n * To modify the number of recommendations per column, modify the --atomic-recs-number-of-columns CSS variable.\n */\n @Prop({reflect: true}) public display: ItemDisplayBasicLayout = 'list';\n /**\n * The spacing of various elements in the result list, including the gap between results, the gap between parts of a result, and the font sizes of different parts in a result.\n */\n @Prop({reflect: true}) public density: ItemDisplayDensity = 'normal';\n /**\n * The expected size of the image displayed in the results.\n */\n @Prop({reflect: true})\n public imageSize: ItemDisplayImageSize = 'small';\n\n /**\n * The total number of recommendations to display.\n * This does not modify the number of recommendations per column. To do so, modify the --atomic-recs-number-of-columns CSS variable.\n */\n @Prop({reflect: true}) public numberOfRecommendations = 10;\n\n /**\n * The number of recommendations to display, per page.\n * Setting a value greater than and lower than the numberOfRecommendations value activates the carousel.\n * This does not affect the display of the list itself, only the number of recommendation pages.\n */\n @Prop({reflect: true}) public numberOfRecommendationsPerPage?: number;\n\n /**\n * The non-localized label for the list of recommendations.\n */\n @Prop({reflect: true}) public label?: string;\n\n /**\n * The [heading level](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements) to use for the heading label, from 1 to 6.\n */\n @Prop({reflect: true}) public headingLevel = 0;\n\n @Watch('numberOfRecommendationsPerPage')\n public async watchNumberOfRecommendationsPerPage() {\n this.currentPage = 0;\n }\n\n /**\n * Sets a rendering function to bypass the standard HTML template mechanism for rendering results.\n * You can use this function while working with web frameworks that don't use plain HTML syntax, e.g., React, Angular or Vue.\n *\n * Do not use this method if you integrate Atomic in a plain HTML deployment.\n *\n * @param resultRenderingFunction\n */\n @Method() public async setRenderFunction(\n resultRenderingFunction: ItemRenderingFunction\n ) {\n this.itemRenderingFunction = resultRenderingFunction;\n }\n\n /**\n * Moves to the previous page, when the carousel is activated.\n */\n @Method() public async previousPage() {\n this.currentPage =\n this.currentPage - 1 < 0 ? this.numberOfPages - 1 : this.currentPage - 1;\n }\n\n /**\n * Moves to the next page, when the carousel is activated.\n */\n @Method() public async nextPage() {\n this.currentPage = (this.currentPage + 1) % this.numberOfPages;\n }\n\n public initialize() {\n this.validateNumberOfRecommendationsPerPage();\n this.validateRecommendationIdentifier();\n this.updateOriginLevel2();\n this.recommendationList = buildRecommendationList(this.bindings.engine, {\n options: {\n id: this.recommendation,\n numberOfRecommendations: this.numberOfRecommendations,\n },\n });\n\n this.itemTemplateProvider = new ItemTemplateProvider({\n includeDefaultTemplate: true,\n templateElements: Array.from(\n this.host.querySelectorAll('atomic-recs-result-template')\n ),\n getResultTemplateRegistered: () => this.resultTemplateRegistered,\n getTemplateHasError: () => this.templateHasError,\n setResultTemplateRegistered: (value: boolean) => {\n this.resultTemplateRegistered = value;\n },\n setTemplateHasError: (value: boolean) => {\n this.templateHasError = value;\n },\n bindings: this.bindings,\n });\n\n this.itemListCommon = new ItemListCommon({\n engineSubscribe: this.bindings.engine.subscribe,\n getCurrentNumberOfItems: () =>\n this.recommendationListState.recommendations.length,\n getIsLoading: () => this.recommendationListState.isLoading,\n host: this.host,\n loadingFlag: this.loadingFlag,\n nextNewItemTarget: this.focusTarget,\n store: this.bindings.store,\n });\n this.actionsHistoryActions = loadIPXActionsHistoryActions(\n this.bindings.engine\n );\n\n createAppLoadedListener(this.bindings.store, (isAppLoaded) => {\n this.isAppLoaded = isAppLoaded;\n });\n }\n\n public get focusTarget() {\n if (!this.nextNewResultTarget) {\n this.nextNewResultTarget = new FocusTargetController(this);\n }\n return this.nextNewResultTarget;\n }\n\n private get recommendationListStateWithAugment() {\n return {\n ...this.recommendationListState,\n firstRequestExecuted:\n this.recommendationListState.searchResponseId !== '',\n hasError: this.recommendationListState.error !== null,\n hasItems: this.recommendationListState.recommendations.length !== 0,\n results: this.subsetRecommendations,\n };\n }\n\n private validateNumberOfRecommendationsPerPage() {\n const msg = new NumberValue({\n min: 1,\n max: this.numberOfRecommendations - 1,\n }).validate(this.numberOfRecommendationsPerPage!);\n\n if (msg) {\n this.error = new Error(\n `The \"numberOfRecommendationsPerPage\" is invalid: ${msg}`\n );\n }\n }\n\n private validateRecommendationIdentifier() {\n const recListWithRecommendation = document.querySelectorAll(\n `atomic-ipx-recs-list[recommendation=\"${this.recommendation}\"]`\n );\n\n if (recListWithRecommendation.length > 1) {\n this.bindings.engine.logger.warn(\n `There are multiple atomic-ipx-recs-list in this page with the same recommendation property \"${this.recommendation}\". Make sure to set a different recommendation property for each.`\n );\n }\n }\n\n private updateOriginLevel2() {\n if (this.label) {\n const action = loadConfigurationActions(\n this.bindings.engine\n ).setOriginLevel2({\n originLevel2: this.label,\n });\n\n this.bindings.engine.dispatch(action);\n }\n }\n\n private renderHeading() {\n if (!this.label) {\n return;\n }\n\n if (this.recommendationListStateWithAugment.hasError) {\n return;\n }\n\n if (\n this.recommendationListStateWithAugment.firstRequestExecuted &&\n !this.recommendationListStateWithAugment.hasItems\n ) {\n return;\n }\n\n return (\n <Heading level={this.headingLevel} part=\"label\" class=\"m-0 mb-2\">\n {this.bindings.i18n.t(this.label)}\n </Heading>\n );\n }\n\n private get currentIndex() {\n return Math.abs(\n (this.currentPage * this.numberOfRecommendationsPerPage!) %\n this.recommendationListState.recommendations.length\n );\n }\n\n private get subsetRecommendations() {\n if (!this.numberOfRecommendationsPerPage) {\n return this.recommendationListState.recommendations;\n }\n\n return this.recommendationListState.recommendations.slice(\n this.currentIndex,\n this.currentIndex + this.numberOfRecommendationsPerPage\n );\n }\n\n private get numberOfPages() {\n return Math.ceil(\n this.recommendationListState.recommendations.length /\n this.numberOfRecommendationsPerPage!\n );\n }\n\n private get hasPagination() {\n return !!this.numberOfRecommendationsPerPage;\n }\n\n private get shouldRenderPagination() {\n return (\n this.hasPagination && this.recommendationListStateWithAugment.hasItems\n );\n }\n\n private async onSelect(\n recommendation: RecsResult,\n originalSelect: () => void\n ) {\n if (recommendation.raw.permanentid && this.actionsHistoryActions) {\n const action =\n this.actionsHistoryActions.addPageViewEntryInActionsHistory(\n recommendation.raw.permanentid\n );\n this.bindings.engine.dispatch(action);\n }\n originalSelect();\n }\n\n private getPropsForAtomicRecsResult(recommendation: RecsResult) {\n const interactiveResult = buildRecsInteractiveResult(this.bindings.engine, {\n options: {result: recommendation},\n });\n const originalSelect = interactiveResult.select;\n interactiveResult.select = () => {\n this.onSelect(recommendation, originalSelect);\n };\n const linkContent =\n this.itemTemplateProvider.getLinkTemplateContent(recommendation);\n\n return {\n interactiveResult,\n result: recommendation,\n renderingFunction: this.itemRenderingFunction,\n loadingFlag: this.loadingFlag,\n key: this.itemListCommon.getResultId(\n recommendation.uniqueId,\n this.recommendationListState.searchResponseId,\n this.density,\n this.imageSize\n ),\n content: this.itemTemplateProvider.getTemplateContent(recommendation),\n linkContent,\n stopPropagation: !!linkContent,\n store: this.bindings.store,\n density: this.density,\n display: this.display,\n imageSize: this.imageSize,\n };\n }\n\n private computeListDisplayClasses() {\n const displayPlaceholders = !this.isAppLoaded;\n\n return getItemListDisplayClasses(\n 'grid',\n this.density,\n this.imageSize,\n this.recommendationListState.isLoading,\n displayPlaceholders\n );\n }\n\n private renderAsGrid(recommendation: RecsResult, i: number) {\n const propsForAtomicRecsResult =\n this.getPropsForAtomicRecsResult(recommendation);\n return (\n <DisplayGrid\n selectorForItem=\"atomic-recs-result\"\n item={recommendation}\n {...propsForAtomicRecsResult.interactiveResult}\n setRef={(element) =>\n element && this.itemListCommon.setNewResultRef(element, i)\n }\n >\n <atomic-recs-result {...propsForAtomicRecsResult}></atomic-recs-result>\n </DisplayGrid>\n );\n }\n\n private renderListOfRecommendations() {\n this.itemListCommon.updateBreakpoints();\n const listClasses = this.computeListDisplayClasses();\n\n if (\n !this.resultTemplateRegistered ||\n this.itemTemplateProvider.hasError ||\n this.error\n ) {\n return;\n }\n\n return (\n <DisplayWrapper listClasses={listClasses} display=\"grid\">\n <ResultsPlaceholdersGuard\n density={this.density}\n display={this.display}\n imageSize={this.imageSize}\n displayPlaceholders={!this.isAppLoaded}\n numberOfPlaceholders={\n this.numberOfRecommendationsPerPage ?? this.numberOfRecommendations\n }\n ></ResultsPlaceholdersGuard>\n <ItemDisplayGuard {...this.recommendationListStateWithAugment}>\n {this.subsetRecommendations.map((recommendation, i) => {\n return this.renderAsGrid(recommendation, i);\n })}\n </ItemDisplayGuard>\n </DisplayWrapper>\n );\n }\n\n public render() {\n return (\n <Fragment>\n {this.renderHeading()}\n {this.shouldRenderPagination ? (\n <Carousel\n bindings={this.bindings}\n currentPage={this.currentPage}\n nextPage={() => this.nextPage()}\n previousPage={() => this.previousPage()}\n numberOfPages={this.numberOfPages}\n >\n {this.renderListOfRecommendations()}\n </Carousel>\n ) : (\n this.renderListOfRecommendations()\n )}\n </Fragment>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|