@infineon/infineon-design-system-stencil 37.2.0--canary.1935.bcd753db2b5ee68950d2fca82ac243bd652f4fba.0 → 38.0.0--canary.1954.f29b2d8edb0fe3ea64fff93b4a103a880db2a074.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/ifx-alert_2.cjs.entry.js +1 -1
- package/dist/cjs/ifx-basic-table.cjs.entry.js +1 -1
- package/dist/cjs/ifx-faq.cjs.entry.js +1 -1
- package/dist/cjs/ifx-filter-accordion.cjs.entry.js +2 -2
- package/dist/cjs/ifx-filter-bar.cjs.entry.js +1 -1
- package/dist/cjs/ifx-filter-search.cjs.entry.js +1 -1
- package/dist/cjs/ifx-filter-type-group.cjs.entry.js +1 -1
- package/dist/cjs/ifx-list-entry.cjs.entry.js +1 -1
- package/dist/cjs/ifx-multiselect_2.cjs.entry.js +4 -4
- package/dist/cjs/ifx-search-field.cjs.entry.js +349 -12
- package/dist/cjs/ifx-search-field.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-segment.cjs.entry.js +1 -1
- package/dist/cjs/ifx-segmented-control.cjs.entry.js +2 -2
- package/dist/cjs/ifx-select.cjs.entry.js +2 -2
- package/dist/cjs/ifx-slider.cjs.entry.js +2 -2
- package/dist/cjs/ifx-spinner_2.cjs.entry.js +6 -6
- package/dist/cjs/ifx-status.cjs.entry.js +1 -1
- package/dist/cjs/ifx-step.cjs.entry.js +4 -4
- package/dist/cjs/ifx-stepper.cjs.entry.js +2 -2
- package/dist/cjs/ifx-switch.cjs.entry.js +1 -1
- package/dist/cjs/ifx-tab.cjs.entry.js +1 -1
- package/dist/cjs/ifx-table.cjs.entry.js +2 -2
- package/dist/cjs/ifx-tabs.cjs.entry.js +2 -2
- package/dist/cjs/ifx-tag.cjs.entry.js +1 -1
- package/dist/cjs/ifx-templates-ui.cjs.entry.js +1 -1
- package/dist/cjs/ifx-textarea.cjs.entry.js +1 -1
- package/dist/cjs/ifx-tooltip.cjs.entry.js +4 -4
- package/dist/cjs/ifx-tree-view-item.cjs.entry.js +2 -2
- package/dist/cjs/ifx-tree-view.cjs.entry.js +1 -1
- package/dist/cjs/infineon-design-system-stencil.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/components/search-field/search-field.css +114 -0
- package/dist/collection/components/search-field/search-field.js +724 -17
- package/dist/collection/components/search-field/search-field.js.map +1 -1
- package/dist/collection/components/search-field/search-field.stories.js +378 -2
- package/dist/collection/components/search-field/search-field.stories.js.map +1 -1
- package/dist/collection/components/segmented-control/segment/segment.js +1 -1
- package/dist/collection/components/segmented-control/segmented-control.js +2 -2
- package/dist/collection/components/select/multi-select/multiselect-option.js +4 -4
- package/dist/collection/components/select/single-select/select.js +2 -2
- package/dist/collection/components/slider/slider.js +2 -2
- package/dist/collection/components/spinner/spinner.js +2 -2
- package/dist/collection/components/status/status.js +1 -1
- package/dist/collection/components/stepper/step/step.js +4 -4
- package/dist/collection/components/stepper/stepper.js +2 -2
- package/dist/collection/components/switch/switch.js +1 -1
- package/dist/collection/components/table-advanced-version/filter-bar/filter-bar.js +1 -1
- package/dist/collection/components/table-advanced-version/filter-type-group/filter-accordion/filter-accordion.js +2 -2
- package/dist/collection/components/table-advanced-version/filter-type-group/filter-search/filter-search.js +1 -1
- package/dist/collection/components/table-advanced-version/filter-type-group/filter-type-group.js +1 -1
- package/dist/collection/components/table-advanced-version/list/list-entry/list-entry.js +1 -1
- package/dist/collection/components/table-advanced-version/table.js +2 -2
- package/dist/collection/components/table-basic-version/table.js +1 -1
- package/dist/collection/components/tabs/tab.js +1 -1
- package/dist/collection/components/tabs/tabs.js +2 -2
- package/dist/collection/components/tag/tag.js +1 -1
- package/dist/collection/components/templates/template/template.js +1 -1
- package/dist/collection/components/templates/templates-ui/templates-ui.js +1 -1
- package/dist/collection/components/text-field/text-field.js +4 -4
- package/dist/collection/components/textarea/textarea.js +1 -1
- package/dist/collection/components/tooltip/tooltip.js +4 -4
- package/dist/collection/components/tree-view/tree-view-item.js +2 -2
- package/dist/collection/components/tree-view/tree-view.js +1 -1
- package/dist/collection/stories/setup-and-installation/faq/faq.js +1 -1
- package/dist/components/ifx-basic-table.js +1 -1
- package/dist/components/ifx-faq.js +1 -1
- package/dist/components/ifx-filter-accordion.js +2 -2
- package/dist/components/ifx-filter-bar.js +1 -1
- package/dist/components/ifx-filter-search.js +2 -2
- package/dist/components/ifx-filter-type-group.js +1 -1
- package/dist/components/ifx-icons-preview.js +1 -1
- package/dist/components/ifx-list-entry.js +1 -1
- package/dist/components/ifx-multiselect-option.js +1 -1
- package/dist/components/ifx-multiselect.js +1 -1
- package/dist/components/ifx-pagination.js +1 -1
- package/dist/components/ifx-search-bar.js +1 -1
- package/dist/components/ifx-search-field.js +1 -1
- package/dist/components/ifx-segment.js +1 -1
- package/dist/components/ifx-segmented-control.js +2 -2
- package/dist/components/ifx-select.js +1 -1
- package/dist/components/ifx-set-filter.js +5 -5
- package/dist/components/ifx-slider.js +2 -2
- package/dist/components/ifx-spinner.js +1 -1
- package/dist/components/ifx-status.js +1 -1
- package/dist/components/ifx-step.js +4 -4
- package/dist/components/ifx-stepper.js +2 -2
- package/dist/components/ifx-switch.js +1 -1
- package/dist/components/ifx-tab.js +1 -1
- package/dist/components/ifx-table.js +4 -4
- package/dist/components/ifx-tabs.js +2 -2
- package/dist/components/ifx-tag.js +1 -1
- package/dist/components/ifx-template.js +1 -1
- package/dist/components/ifx-templates-ui.js +4 -4
- package/dist/components/ifx-text-field.js +1 -1
- package/dist/components/ifx-textarea.js +1 -1
- package/dist/components/ifx-tooltip.js +4 -4
- package/dist/components/ifx-tree-view-item.js +2 -2
- package/dist/components/ifx-tree-view.js +1 -1
- package/dist/components/{p-31696649.js → p-0218abcd.js} +5 -5
- package/dist/components/{p-31696649.js.map → p-0218abcd.js.map} +1 -1
- package/dist/components/{p-6a9e1fb6.js → p-122e79fc.js} +3 -3
- package/dist/components/{p-6a9e1fb6.js.map → p-122e79fc.js.map} +1 -1
- package/dist/components/{p-da273970.js → p-43438af8.js} +4 -4
- package/dist/components/{p-da273970.js.map → p-43438af8.js.map} +1 -1
- package/dist/components/{p-bfc8b82f.js → p-5853a3c8.js} +2 -2
- package/dist/components/{p-bfc8b82f.js.map → p-5853a3c8.js.map} +1 -1
- package/dist/components/{p-cb92983f.js → p-96237222.js} +3 -3
- package/dist/components/{p-cb92983f.js.map → p-96237222.js.map} +1 -1
- package/dist/components/{p-8cbf32a7.js → p-c601034d.js} +2 -2
- package/dist/components/{p-8cbf32a7.js.map → p-c601034d.js.map} +1 -1
- package/dist/components/p-c7297dfd.js +471 -0
- package/dist/components/p-c7297dfd.js.map +1 -0
- package/dist/components/{p-c5f7a0e2.js → p-f9c7ad2e.js} +5 -5
- package/dist/components/{p-c5f7a0e2.js.map → p-f9c7ad2e.js.map} +1 -1
- package/dist/esm/ifx-alert_2.entry.js +1 -1
- package/dist/esm/ifx-basic-table.entry.js +1 -1
- package/dist/esm/ifx-faq.entry.js +1 -1
- package/dist/esm/ifx-filter-accordion.entry.js +2 -2
- package/dist/esm/ifx-filter-bar.entry.js +1 -1
- package/dist/esm/ifx-filter-search.entry.js +1 -1
- package/dist/esm/ifx-filter-type-group.entry.js +1 -1
- package/dist/esm/ifx-list-entry.entry.js +1 -1
- package/dist/esm/ifx-multiselect_2.entry.js +4 -4
- package/dist/esm/ifx-search-field.entry.js +349 -12
- package/dist/esm/ifx-search-field.entry.js.map +1 -1
- package/dist/esm/ifx-segment.entry.js +1 -1
- package/dist/esm/ifx-segmented-control.entry.js +2 -2
- package/dist/esm/ifx-select.entry.js +2 -2
- package/dist/esm/ifx-slider.entry.js +2 -2
- package/dist/esm/ifx-spinner_2.entry.js +6 -6
- package/dist/esm/ifx-status.entry.js +1 -1
- package/dist/esm/ifx-step.entry.js +4 -4
- package/dist/esm/ifx-stepper.entry.js +2 -2
- package/dist/esm/ifx-switch.entry.js +1 -1
- package/dist/esm/ifx-tab.entry.js +1 -1
- package/dist/esm/ifx-table.entry.js +2 -2
- package/dist/esm/ifx-tabs.entry.js +2 -2
- package/dist/esm/ifx-tag.entry.js +1 -1
- package/dist/esm/ifx-templates-ui.entry.js +1 -1
- package/dist/esm/ifx-textarea.entry.js +1 -1
- package/dist/esm/ifx-tooltip.entry.js +4 -4
- package/dist/esm/ifx-tree-view-item.entry.js +2 -2
- package/dist/esm/ifx-tree-view.entry.js +1 -1
- package/dist/esm/infineon-design-system-stencil.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/infineon-design-system-stencil/infineon-design-system-stencil.esm.js +1 -1
- package/dist/infineon-design-system-stencil/infineon-design-system-stencil.esm.js.map +1 -1
- package/dist/infineon-design-system-stencil/{p-7adee2dd.entry.js → p-0cbdafca.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-2d7159a9.entry.js → p-10ef115a.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-f544fb03.entry.js → p-1e7646b7.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-0c1c831c.entry.js → p-253ea47f.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-09a8d63d.entry.js → p-273a91b3.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-3d037fa4.entry.js → p-33b46161.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-a2a44fbe.entry.js → p-37be5d65.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-18a81f5f.entry.js → p-3bce1f22.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-e5091718.entry.js → p-3dd8bdf4.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-6c2698a3.entry.js → p-6ec8258a.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-71e34467.entry.js → p-706a8ead.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/p-7705c159.entry.js +2 -0
- package/dist/infineon-design-system-stencil/{p-1e0d789f.entry.js → p-8e838717.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-4eda4ef3.entry.js → p-8eab207b.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-8ecae73b.entry.js → p-9be0905e.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-90efbef9.entry.js → p-9cfe025d.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-bca4f6c8.entry.js → p-b393c1e7.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/p-b83380f8.entry.js +2 -0
- package/dist/infineon-design-system-stencil/{p-e172e81c.entry.js.map → p-b83380f8.entry.js.map} +1 -1
- package/dist/infineon-design-system-stencil/{p-04d8ea38.entry.js → p-caef0e47.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-36dcebde.entry.js → p-d3d6a562.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/p-d4b4107a.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-d4b4107a.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/{p-c36df3ce.entry.js → p-d660ebea.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-59c3ac10.entry.js → p-d8a57524.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-84d4d6a1.entry.js → p-e196740d.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-2e931b0d.entry.js → p-e45d85fc.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-437973f5.entry.js → p-e61d3fc6.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-c7e86c7c.entry.js → p-ed30fb98.entry.js} +2 -2
- package/dist/infineon-design-system-stencil/{p-05d9aa1f.entry.js → p-f84af2e3.entry.js} +2 -2
- package/dist/types/components/search-field/search-field.d.ts +53 -2
- package/dist/types/components/search-field/search-field.stories.d.ts +191 -0
- package/dist/types/components.d.ts +42 -2
- package/package.json +1 -1
- package/dist/components/p-c6e5f94d.js +0 -115
- package/dist/components/p-c6e5f94d.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-c164c83b.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-c164c83b.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-e172e81c.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-e571c002.entry.js +0 -2
- /package/dist/infineon-design-system-stencil/{p-7adee2dd.entry.js.map → p-0cbdafca.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-2d7159a9.entry.js.map → p-10ef115a.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-f544fb03.entry.js.map → p-1e7646b7.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-0c1c831c.entry.js.map → p-253ea47f.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-09a8d63d.entry.js.map → p-273a91b3.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-3d037fa4.entry.js.map → p-33b46161.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-a2a44fbe.entry.js.map → p-37be5d65.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-18a81f5f.entry.js.map → p-3bce1f22.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-e5091718.entry.js.map → p-3dd8bdf4.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-6c2698a3.entry.js.map → p-6ec8258a.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-71e34467.entry.js.map → p-706a8ead.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-e571c002.entry.js.map → p-7705c159.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-1e0d789f.entry.js.map → p-8e838717.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-4eda4ef3.entry.js.map → p-8eab207b.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-8ecae73b.entry.js.map → p-9be0905e.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-90efbef9.entry.js.map → p-9cfe025d.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-bca4f6c8.entry.js.map → p-b393c1e7.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-04d8ea38.entry.js.map → p-caef0e47.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-36dcebde.entry.js.map → p-d3d6a562.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-c36df3ce.entry.js.map → p-d660ebea.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-59c3ac10.entry.js.map → p-d8a57524.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-84d4d6a1.entry.js.map → p-e196740d.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-2e931b0d.entry.js.map → p-e45d85fc.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-437973f5.entry.js.map → p-e61d3fc6.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-c7e86c7c.entry.js.map → p-ed30fb98.entry.js.map} +0 -0
- /package/dist/infineon-design-system-stencil/{p-05d9aa1f.entry.js.map → p-f84af2e3.entry.js.map} +0 -0
@@ -183,7 +183,7 @@ const Template = class {
|
|
183
183
|
}
|
184
184
|
}
|
185
185
|
render() {
|
186
|
-
return (index.h("div", { key: '
|
186
|
+
return (index.h("div", { key: '1de8086432131979b1290ea28de6027cf52aa043' }, this.isTemplatePage
|
187
187
|
?
|
188
188
|
index.h("div", { class: "template__page-wrapper" }, !this.repoUrl && !this.repoError &&
|
189
189
|
index.h("div", null, index.h("h3", null, "Your repository is getting ready.."), index.h("p", null, "This will only take a minute.")), this.isLoading && !this.repoError && index.h("div", null, index.h("ifx-spinner", { variant: 'default', size: 's' })), this.repoUrl && index.h("ifx-link", { href: this.repoUrl, target: "_parent", size: "m", variant: "underlined" }, "Your repository"), this.repoError && index.h("div", null, this.repoError))
|
@@ -188,7 +188,7 @@ const Table = class {
|
|
188
188
|
return {};
|
189
189
|
}
|
190
190
|
render() {
|
191
|
-
return (index.h(index.Host, { key: '
|
191
|
+
return (index.h(index.Host, { key: 'a6c385558fc5e2fc6d540b4e9973f4381a7dbd89' }, index.h("div", { key: '663ceb67d92453698c4a7ebc1a5b58de46acb6c9', id: "table-wrapper", class: this.getClassNames() }, index.h("div", { key: '3cf5947c50139e77084aa1a990989a901753067c', id: `ifxTable-${this.uniqueKey}`, class: `ifx-ag-grid ${this.variant === 'zebra' ? 'zebra' : ""}`, style: this.getTableStyle(), ref: (el) => (this.container = el) }))));
|
192
192
|
}
|
193
193
|
get host() { return index.getElement(this); }
|
194
194
|
};
|
@@ -12,7 +12,7 @@ const Faq = class {
|
|
12
12
|
index.registerInstance(this, hostRef);
|
13
13
|
}
|
14
14
|
render() {
|
15
|
-
return (index.h("div", { key: '
|
15
|
+
return (index.h("div", { key: 'd65665af11d77f22eba694be830c0d2cbd1c2aed', class: 'container' }, index.h("ifx-accordion", { key: '21a6945e8e2989152d4ae3b525d0b03100289a53' }, index.h("ifx-accordion-item", { key: '6a17004a92a541a569d0a0fcfc99ab3b036e0321', caption: "What is the Infineon DDS?" }, "The Infineon Digital Design System consists of code components, design principles, tools and guidelines as well as a dedicated interdisciplinary team. Its purpose is to support internal and external colleagues create digital user interfaces with a high level of usability as well as a consistent expression of the Infineon brand. The DDS does not focus on the content of a web application but it describes how the design of the application\u2019s structure should be."), index.h("ifx-accordion-item", { key: '173ea57ea7fb62173945b1c8c804e2472f174f34', caption: "How do I get access to the DDS?" }, "You can use the provided Figma file as a foundation for mockups and prototypes, use Storybook to view what UI components and variants are available and use code components provided via Storybook or Github."), index.h("ifx-accordion-item", { key: '7344d949d820868fee6ab85b8197fdde1b4574c7', caption: "Can I integrate the Infineon DDS into my project?" }, "Yes, you can. We are happy to discuss with you which point in time and which scope of integration is bestsuited for updating your interface to the Infineon DDS. (To avoid that users get confused by a mixture of UI components, we recommend choosing larger updates or technology changes as opportunity to integrate the Infineon DDS.)"), index.h("ifx-accordion-item", { key: '6f242e7e3a4116bdf122905becd07fc8f8f4cd22', caption: "Are Infineon DDS components accessable?" }, "We have taken WCAG 2.0 Level AA as baseline level for all design decisions inside the Infineon Digital Design System. To make an online experience truly accessible you have to implement the specific code, content, and visual design according to the accessibility standard. Find an introduction to this topic here."), index.h("ifx-accordion-item", { key: '1dd2fe2389021540de4d1ded1f66003592644a1d', caption: "How to request a new component?" }, "Please contact us like described in the contribution section! We are planning to expand the number of components continually. If your component is also usable for multiple other projects, there is a good chance we might work together with you."))));
|
16
16
|
}
|
17
17
|
};
|
18
18
|
Faq.style = IfxFaqStyle0;
|
@@ -53,8 +53,8 @@ const FilterAccordion = class {
|
|
53
53
|
this.el.removeEventListener('ifxListUpdate', this.handleCheckedChange);
|
54
54
|
}
|
55
55
|
render() {
|
56
|
-
return (index.h("div", { key: '
|
57
|
-
index.h("div", { key: '
|
56
|
+
return (index.h("div", { key: '3d0fd2cc850927fc6cc458867b049a582f47a0f5', class: `accordion ${this.expanded ? 'expanded' : ''}` }, index.h("div", { key: '0bc0dafdcfd874ae01fd7bb8446036ad34c07603', class: `header ${this.expanded ? 'expanded' : ''}`, onClick: this.toggleAccordion }, index.h("div", { key: '5b8a0a61ca1b4b5c640933b7e81e6c5f3f406ba1', class: `text-and-icon ${this.expanded ? 'expanded' : ''}` }, index.h("div", { key: '16e29f1f8ca7870e1e62cd5bcd56766a8a6ac512', class: "text" }, index.h("span", { key: '69687b082848bebb93647219eb8c1908b21d2c03' }, this.filterGroupName), index.h("ifx-indicator", { key: 'ede8211d6cee49e3a5af93e377b05863b324ab52', variant: 'number', number: this.count })), index.h("ifx-icon", { key: '27394e246008a8cefc69782b50885973cb548ce6', class: this.expanded ? '' : 'hidden', icon: "minus-16", onClick: this.toggleAccordion }), index.h("ifx-icon", { key: 'c517b29a5a66c8747a724af163ca761d3a7e11d9', class: this.expanded ? 'hidden' : '', icon: "plus-16", onClick: this.toggleAccordion }))), this.expanded &&
|
57
|
+
index.h("div", { key: '289e7251b83c88a26445be01f22575c85c5689e3', class: "filter-accordion-container" }, index.h("slot", { key: 'd63dbb79d3676b8881afaa318b6d642563935baa', name: "list" }))));
|
58
58
|
}
|
59
59
|
get el() { return index.getElement(this); }
|
60
60
|
};
|
@@ -97,7 +97,7 @@ const FilterBar = class {
|
|
97
97
|
// Calculate slotsToShow safely
|
98
98
|
const slotsToShow = Math.min(safeVisibleSlots, actualNumberOfComponents, Number.MAX_SAFE_INTEGER);
|
99
99
|
const slots = Array.from({ length: slotsToShow }, (_, i) => (index.h("div", { class: "filter-slot-wrapper" }, index.h("slot", { name: `filter-component-${i + 1}` }))));
|
100
|
-
return (index.h(index.Host, { key: '
|
100
|
+
return (index.h(index.Host, { key: '390d4edb8b2681c33017c1245d3b47c254086065' }, index.h("div", { key: '631db42c0db2e69c53a35a3a4878863215466783', class: "search-container" }, index.h("slot", { key: 'd3b7e942185a37da9af701ede28b22aabca08812', name: "filter-search" }), " "), index.h("div", { key: '599234808c4076a085f19bbe489a5a6746bfcda9', class: "components-container" }, slots.length > 0 ? slots : index.h("slot", { name: "filter-component" }), this.showMoreFiltersButton && !this.showAllFilters && (index.h("div", { key: '6ceade00712115f448158081ad7ec082d9c6c416', class: "more-filters-wrapper", onClick: this.handleMoreFiltersClick }, index.h("ifx-button", { key: 'd1dbd53565e30c526e75ceebff18ecaf9355997a', type: "button", disabled: false, variant: "tertiary", size: "m", target: "_blank", theme: "default", "full-width": "false" }, index.h("ifx-icon", { key: '43ec4bbcd0ac7b76534aafe26af8b330627d2f32', icon: "filter-16" }), "More filters"))))));
|
101
101
|
}
|
102
102
|
get el() { return index.getElement(this); }
|
103
103
|
};
|
@@ -33,7 +33,7 @@ const FilterSearch = class {
|
|
33
33
|
this.ifxFilterSearchChange.emit({ filterName: this.filterName, filterValue: this.filterValue, filterKey: this.filterKey }); // Emitting filterKey along with other properties
|
34
34
|
}
|
35
35
|
render() {
|
36
|
-
return (index.h("div", { key: '
|
36
|
+
return (index.h("div", { key: '3e287efc07bf8225fe661ae9551c8cc2e980e622', class: `${this.filterOrientation === 'sidebar' ? 'sidebar-filter-search-wrapper' : 'topbar-filter-search-wrapper'}` }, index.h("div", { key: '3b9a27b4e94843db8109028fb6a3ba849c4cf206', class: "filter-name" }, this.filterName), index.h("ifx-search-field", { key: '62cd45208bfe565cc2f903c361ced6fa02499942', placeholder: this.placeholder, "show-delete-icon": this.showDeleteIcon, disabled: this.disabled, value: this.filterValue })));
|
37
37
|
}
|
38
38
|
get host() { return index.getElement(this); }
|
39
39
|
static get watchers() { return {
|
@@ -129,7 +129,7 @@ const IfxFilterTypeGroup = class {
|
|
129
129
|
window.removeEventListener('ifxResetFiltersEvent', this.handleResetEvent);
|
130
130
|
}
|
131
131
|
render() {
|
132
|
-
return (index.h(index.Host, { key: '
|
132
|
+
return (index.h(index.Host, { key: '1d0bf0c68fb42e0394e0aa9bb5e66660d3ef5cda' }, index.h("div", { key: '215cd4cb99b4200d6a37c73267658f5dea619fff', class: "filter-type-group" }, index.h("slot", { key: 'e3a96b1a72ae653d2bcd51faf9c3a297bc541de3', name: "filter-search" }), index.h("slot", { key: '828ff0797c6f7ae7b3d6a2b6b0cdbde982b95cb1', name: "filter-accordion" }))));
|
133
133
|
}
|
134
134
|
get el() { return index.getElement(this); }
|
135
135
|
};
|
@@ -25,7 +25,7 @@ const ListEntry = class {
|
|
25
25
|
this.ifxListEntryChange.emit({ label: this.label, value: this.value, type: this.type });
|
26
26
|
}
|
27
27
|
render() {
|
28
|
-
return (index.h("div", { key: '
|
28
|
+
return (index.h("div", { key: 'a78a3927f090f95f0e4a75a6f2c44200b91370a2', class: "wrapper" }, this.type === 'checkbox' ? (index.h("div", { class: "list-entry" }, index.h("ifx-checkbox", { size: "s", checked: this.value }, this.label))) : (index.h("div", { class: "list-entry" }, index.h("ifx-radio-button", { size: "s", checked: this.value }, this.label)))));
|
29
29
|
}
|
30
30
|
get host() { return index.getElement(this); }
|
31
31
|
static get watchers() { return {
|
@@ -904,25 +904,25 @@ const MultiselectOption = class {
|
|
904
904
|
const additionalPadding = this.hasChildren ? 0 : 28;
|
905
905
|
let totalPadding = basePadding + additionalPadding;
|
906
906
|
const optionItemStyle = isFlatMultiselect ? undefined : { paddingLeft: `${totalPadding}px` };
|
907
|
-
return (index.h(index.Host, { key: '
|
907
|
+
return (index.h(index.Host, { key: '53ab714e5bc86c83569b2c1cf6f479405f528880' }, index.h("div", { key: 'b5597349b4d3ef268b5826047f414dd7ce0c7854', class: {
|
908
908
|
'option': true,
|
909
909
|
'option--has-children': this.hasChildren,
|
910
910
|
'option--expanded': this.isExpanded,
|
911
911
|
'option--disabled': this.disabled,
|
912
912
|
'option--selected': this.selected,
|
913
|
-
}, role: "option", "aria-expanded": this.hasChildren ? (this.isExpanded ? 'true' : 'false') : undefined, "aria-selected": this.selected ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "data-level": this.depth, "data-value": this.value }, index.h("div", { key: '
|
913
|
+
}, role: "option", "aria-expanded": this.hasChildren ? (this.isExpanded ? 'true' : 'false') : undefined, "aria-selected": this.selected ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "data-level": this.depth, "data-value": this.value }, index.h("div", { key: '3052a22b111e61ac0e48ecd64460c35aa2b06fea', class: "option-item", style: optionItemStyle }, index.h("div", { key: 'a392db43dbb81f06a4cfd4e5faad7672108bc4bb', class: "chevron-wrapper", tabIndex: this.hasChildren ? 0 : -1, role: this.hasChildren ? "button" : undefined, "aria-label": this.hasChildren ? (this.isExpanded ? "Collapse" : "Expand") : undefined, onClick: (e) => { e.stopPropagation(); this.toggleExpansion(); }, onKeyDown: (e) => {
|
914
914
|
if (e.key === 'Enter' || e.key === ' ') {
|
915
915
|
e.preventDefault();
|
916
916
|
e.stopPropagation();
|
917
917
|
this.toggleExpansion();
|
918
918
|
}
|
919
|
-
} }, this.hasChildren && (index.h("ifx-icon", { key: '
|
919
|
+
} }, this.hasChildren && (index.h("ifx-icon", { key: '033471dbc46d73d82f0ab44a07a1dfa5fd9625fb', class: `chevron ${this.isExpanded ? 'chevron--expanded' : 'chevron--collapsed'}`, icon: "chevron-right-16" }))), index.h("div", { key: 'd6fc07097a390e9e29f8c4dcc55c90f755b10fc9', class: "checkbox-wrapper", onClick: (e) => e.stopPropagation() }, index.h("ifx-checkbox", { key: '7d39f30d45c2f917edd924b3b8ce6c22f4146c19', size: 's', checked: (this.isSearchActive && this.isSearchDisabled) ? false : (this.indeterminate ? false : this.selected), indeterminate: (this.isSearchActive && this.isSearchDisabled) ? false : this.indeterminate, onClick: this.handleCheckboxClick, disabled: this.disabled || (this.isSearchActive && this.isSearchDisabled), onKeyDown: (e) => {
|
920
920
|
if (e.key === 'Enter' || e.key === ' ') {
|
921
921
|
e.preventDefault();
|
922
922
|
e.stopPropagation();
|
923
923
|
this.handleCheckboxClick(e);
|
924
924
|
}
|
925
|
-
} })), index.h("div", { key: '
|
925
|
+
} })), index.h("div", { key: 'e09de6a2559a8334553abb9d45b901c1459a2da7', class: "option-label", onClick: this.handleHeaderClick, tabIndex: -1 }, index.h("slot", { key: '941edb6987ef6add787211833e0e1aad0d5b9066' }))), this.isExpanded && index.h("div", { key: 'b5248d64937e418587f1c807e434874be4952f48', class: "option-children" }, index.h("slot", { key: '8e6e69e5000661632c114279a5afc5c80f361b8e', name: "children" })))));
|
926
926
|
}
|
927
927
|
get el() { return index.getElement(this); }
|
928
928
|
};
|
@@ -7,48 +7,367 @@ const tracking = require('./tracking-f00364dc.js');
|
|
7
7
|
const domUtils = require('./dom-utils-2c4573c2.js');
|
8
8
|
const index$1 = require('./index-5b0b9d4c.js');
|
9
9
|
|
10
|
-
const searchFieldCss = ":root{--ifx-font-family
|
10
|
+
const searchFieldCss = ":root {\n --ifx-font-family: \"Source Sans 3\", \"Arial, sans-serif\";\n}\n\n:host {\n display: flex;\n}\n\n.search-field {\n box-sizing: border-box;\n background-color: #FFFFFF;\n width: 100%;\n font-family: var(--ifx-font-family);\n position: relative;\n}\n.search-field .search-field__wrapper {\n box-sizing: border-box;\n height: 40px;\n display: flex;\n align-items: center;\n border: 1px solid #8D8786;\n border-radius: 1px;\n padding: 8px 16px;\n gap: 12px;\n flex: none;\n order: 0;\n align-self: stretch;\n flex-grow: 0;\n position: relative;\n width: 100%;\n outline: none;\n color: #8D8786;\n}\n.search-field .search-field__wrapper.focused {\n border: 1px solid #0A8276;\n}\n.search-field .search-field__wrapper.focused ifx-icon {\n color: #575352;\n}\n.search-field .search-field__wrapper.search-field__wrapper-s {\n height: 36px;\n}\n.search-field .search-field__wrapper:hover:not(.focused, :focus) {\n border: 1px solid #3C3A39;\n}\n.search-field .search-field__wrapper:focus {\n outline: none;\n border: 1px solid #0A8276;\n}\n.search-field .search-field__wrapper .delete-icon {\n right: 12px;\n cursor: pointer;\n}\n.search-field .search-field__wrapper input[type=text] {\n font-style: normal;\n font-weight: 400;\n font-size: 16px;\n color: #8D8786;\n border: none;\n width: 100%;\n outline: none;\n height: 16px;\n}\n.search-field .search-field__wrapper input[type=text]:focus {\n outline: none;\n color: #1d1d1d;\n}\n.search-field .search-field__wrapper input[type=text]:disabled {\n background-color: #EEEDED;\n}\n.search-field .search-field__wrapper:has(input[disabled]) {\n background-color: #EEEDED;\n}\n.search-field .suggestions-dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n background: #FFFFFF;\n margin-top: 4px;\n border: 1px solid #EEEDED;\n box-shadow: 0px 6px 9px 0px rgba(29, 29, 29, 0.1);\n z-index: 1000;\n max-height: 300px;\n overflow-y: auto;\n container-type: inline-size;\n}\n.search-field .suggestions-dropdown .suggestions-header {\n font-family: Source Sans 3;\n font-size: 0.8125rem;\n font-weight: 600;\n line-height: 1.25rem;\n letter-spacing: 0.25em;\n text-transform: uppercase;\n color: #575352;\n border-bottom: 1px solid #EEEDED;\n padding: 12px 16px;\n}\n.search-field .suggestions-dropdown .suggestion-item {\n padding: 12px 16px;\n cursor: pointer;\n transition: background-color 0.2s ease;\n}\n.search-field .suggestions-dropdown .suggestion-item:last-child {\n border-bottom: none;\n}\n.search-field .suggestions-dropdown .suggestion-item:hover, .search-field .suggestions-dropdown .suggestion-item--selected {\n background-color: #EEEDED;\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-icon {\n color: #575352;\n flex-shrink: 0;\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-icon--history {\n color: #575352;\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-text {\n flex: 1;\n display: flex;\n align-items: center;\n min-width: 0;\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-text .suggestion-main-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex-shrink: 1;\n min-width: 0;\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-text .suggestion-scope {\n color: #8D8786;\n flex-shrink: 0;\n white-space: nowrap;\n margin-left: 2px;\n font-weight: 600;\n font-size: 0.75rem;\n}\n@container (max-width: 320px) {\n .search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-text {\n flex-direction: column;\n align-items: flex-start;\n }\n .search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-text .suggestion-main-text {\n width: 100%;\n max-width: 100%;\n }\n .search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-text .suggestion-scope {\n margin-left: 0;\n margin-top: 0;\n width: 100%;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n flex-shrink: 1;\n }\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-count {\n color: #8D8786;\n margin-left: auto;\n flex-shrink: 0;\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-delete-icon {\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.2s ease, visibility 0.2s ease;\n cursor: pointer;\n margin-left: auto;\n flex-shrink: 0;\n color: #575352;\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-delete-icon:hover {\n color: #3C3A39;\n}\n.search-field .suggestions-dropdown .suggestion-item:hover .suggestion-delete-icon {\n opacity: 1;\n visibility: visible;\n}\n.search-field .search-field__wrapper.dropdown-open {\n border-radius: 1px 1px 0 0;\n border-color: #0A8276;\n}";
|
11
11
|
const IfxSearchFieldStyle0 = searchFieldCss;
|
12
12
|
|
13
13
|
const SearchField = class {
|
14
14
|
constructor(hostRef) {
|
15
15
|
index.registerInstance(this, hostRef);
|
16
16
|
this.ifxInput = index.createEvent(this, "ifxInput", 7);
|
17
|
+
this.ifxSuggestionRequested = index.createEvent(this, "ifxSuggestionRequested", 7);
|
18
|
+
this.ifxSuggestionSelected = index.createEvent(this, "ifxSuggestionSelected", 7);
|
19
|
+
this.ifxFocus = index.createEvent(this, "ifxFocus", 7);
|
20
|
+
this.ifxBlur = index.createEvent(this, "ifxBlur", 7);
|
17
21
|
this.value = '';
|
18
|
-
this.
|
22
|
+
this.suggestions = [];
|
23
|
+
this.showSuggestions = false;
|
24
|
+
this.maxSuggestions = 10;
|
25
|
+
this.maxHistoryItems = 5;
|
26
|
+
this.enableHistory = true;
|
27
|
+
this.historyKey = 'ifx-search-history';
|
28
|
+
this.historyHeaderText = 'Recent Searches';
|
29
|
+
// ARIA Labels and Accessibility Props
|
30
|
+
this.ariaLabel = 'Search field';
|
31
|
+
this.deleteIconAriaLabel = 'Clear search';
|
32
|
+
this.historyDeleteAriaLabel = 'Remove from history';
|
33
|
+
this.dropdownAriaLabel = 'Search suggestions and history';
|
34
|
+
this.suggestionAriaLabel = 'Search suggestion';
|
35
|
+
this.historyItemAriaLabel = 'Search history item';
|
36
|
+
this.showDropdown = false;
|
37
|
+
this.filteredSuggestions = [];
|
38
|
+
this.selectedSuggestionIndex = -1;
|
39
|
+
this.searchHistory = [];
|
19
40
|
this.showDeleteIcon = false;
|
20
41
|
this.showDeleteIconInternalState = false;
|
21
42
|
this.disabled = false;
|
22
43
|
this.size = 'l';
|
23
44
|
this.isFocused = false;
|
24
45
|
this.placeholder = "Search...";
|
25
|
-
this.autocomplete = "
|
46
|
+
this.autocomplete = "off";
|
26
47
|
this.maxlength = null;
|
48
|
+
this.focusEmitted = false;
|
27
49
|
this.handleInput = () => {
|
28
50
|
const query = this.inputElement.value;
|
29
|
-
this.value = query;
|
51
|
+
this.value = query;
|
30
52
|
this.ifxInput.emit(this.value);
|
53
|
+
if (this.showSuggestions) {
|
54
|
+
this.showDropdown = true;
|
55
|
+
this.selectedSuggestionIndex = -1;
|
56
|
+
this.requestSuggestions(query);
|
57
|
+
}
|
31
58
|
};
|
32
59
|
this.handleDelete = () => {
|
33
60
|
this.inputElement.value = '';
|
34
61
|
this.value = "";
|
35
62
|
this.ifxInput.emit(this.value);
|
63
|
+
this.hideDropdown();
|
36
64
|
};
|
65
|
+
this.handleSearch = () => {
|
66
|
+
if (this.value.trim() && this.enableHistory) {
|
67
|
+
// Only add to history if there are actual results
|
68
|
+
if (this.filteredSuggestions.length > 0) {
|
69
|
+
this.addToHistory(this.value);
|
70
|
+
}
|
71
|
+
}
|
72
|
+
this.hideDropdown();
|
73
|
+
};
|
74
|
+
// Handle click on history delete button
|
75
|
+
this.handleHistoryDelete = (event, term) => {
|
76
|
+
event.stopPropagation(); // Prevent selection of the entry
|
77
|
+
this.removeFromHistory(term);
|
78
|
+
};
|
79
|
+
}
|
80
|
+
componentDidLoad() {
|
81
|
+
this.loadSearchHistory();
|
37
82
|
}
|
38
83
|
handleOutsideClick(event) {
|
39
84
|
const path = event.composedPath();
|
40
|
-
if (!path.includes(this.inputElement)) {
|
41
|
-
this.
|
85
|
+
if (!path.includes(this.inputElement) && !path.includes(this.dropdownElement)) {
|
86
|
+
this.hideDropdown();
|
87
|
+
}
|
88
|
+
}
|
89
|
+
handleKeyDown(event) {
|
90
|
+
if (!this.showDropdown)
|
91
|
+
return;
|
92
|
+
switch (event.key) {
|
93
|
+
case 'ArrowDown':
|
94
|
+
event.preventDefault();
|
95
|
+
this.navigateSuggestions(1);
|
96
|
+
break;
|
97
|
+
case 'ArrowUp':
|
98
|
+
event.preventDefault();
|
99
|
+
this.navigateSuggestions(-1);
|
100
|
+
break;
|
101
|
+
case 'Enter':
|
102
|
+
event.preventDefault();
|
103
|
+
if (this.selectedSuggestionIndex >= 0) {
|
104
|
+
this.selectSuggestion(this.filteredSuggestions[this.selectedSuggestionIndex]);
|
105
|
+
}
|
106
|
+
else {
|
107
|
+
this.handleSearch();
|
108
|
+
}
|
109
|
+
break;
|
110
|
+
case 'Escape':
|
111
|
+
this.hideDropdown();
|
112
|
+
break;
|
42
113
|
}
|
43
114
|
}
|
44
115
|
valueWatcher(newValue) {
|
45
|
-
if (newValue !== this.inputElement.value) {
|
116
|
+
if (this.inputElement && newValue !== this.inputElement.value) {
|
46
117
|
this.inputElement.value = newValue;
|
47
118
|
}
|
119
|
+
this.updateSuggestions();
|
120
|
+
}
|
121
|
+
suggestionsWatcher() {
|
122
|
+
this.updateSuggestions();
|
48
123
|
}
|
49
124
|
focusInput() {
|
50
|
-
|
51
|
-
this.
|
125
|
+
// Don't call focus() if the input is already focused to prevent unnecessary operations
|
126
|
+
if (document.activeElement !== this.inputElement) {
|
127
|
+
this.inputElement.focus();
|
128
|
+
}
|
129
|
+
// Only emit focus event if it hasn't been emitted already
|
130
|
+
if (!this.focusEmitted) {
|
131
|
+
this.focusEmitted = true;
|
132
|
+
this.isFocused = true;
|
133
|
+
this.ifxFocus.emit();
|
134
|
+
}
|
135
|
+
if (this.showSuggestions) {
|
136
|
+
// On focus without input: Show only history
|
137
|
+
if (this.value.length === 0) {
|
138
|
+
this.showHistoryDropdown();
|
139
|
+
// Only show dropdown if history is actually present
|
140
|
+
this.showDropdown = this.enableHistory && this.searchHistory.length > 0;
|
141
|
+
}
|
142
|
+
else {
|
143
|
+
// With existing input: Normal suggestion logic
|
144
|
+
this.updateSuggestions();
|
145
|
+
this.showDropdown = this.filteredSuggestions.length > 0;
|
146
|
+
}
|
147
|
+
}
|
148
|
+
}
|
149
|
+
blurInput() {
|
150
|
+
setTimeout(() => {
|
151
|
+
this.isFocused = false;
|
152
|
+
this.focusEmitted = false; // Reset focus flag when blur occurs
|
153
|
+
this.ifxBlur.emit();
|
154
|
+
}, 150);
|
155
|
+
}
|
156
|
+
// Public method to update history from external sources
|
157
|
+
loadSearchHistory() {
|
158
|
+
if (this.enableHistory && typeof localStorage !== 'undefined') {
|
159
|
+
const stored = localStorage.getItem(this.historyKey);
|
160
|
+
this.searchHistory = stored ? JSON.parse(stored) : [];
|
161
|
+
// Update suggestions when history is loaded
|
162
|
+
this.updateSuggestions();
|
163
|
+
// If no input and no history left, close dropdown
|
164
|
+
if (this.value.length === 0 && this.searchHistory.length === 0) {
|
165
|
+
this.showDropdown = false;
|
166
|
+
}
|
167
|
+
}
|
168
|
+
}
|
169
|
+
// Public method to completely clear history
|
170
|
+
clearSearchHistory() {
|
171
|
+
if (this.enableHistory && typeof localStorage !== 'undefined') {
|
172
|
+
// Clear from localStorage
|
173
|
+
localStorage.removeItem(this.historyKey);
|
174
|
+
// Clear internal history
|
175
|
+
this.searchHistory = [];
|
176
|
+
// Reset all dropdown-relevant states
|
177
|
+
this.filteredSuggestions = [];
|
178
|
+
this.selectedSuggestionIndex = -1;
|
179
|
+
this.showDropdown = false;
|
180
|
+
// Update suggestions after reset
|
181
|
+
this.updateSuggestions();
|
182
|
+
}
|
183
|
+
}
|
184
|
+
// Suggestion Management Methods
|
185
|
+
addToHistory(term) {
|
186
|
+
if (!this.enableHistory || !term.trim())
|
187
|
+
return;
|
188
|
+
const history = [...this.searchHistory];
|
189
|
+
const existingIndex = history.indexOf(term);
|
190
|
+
if (existingIndex > -1) {
|
191
|
+
history.splice(existingIndex, 1);
|
192
|
+
}
|
193
|
+
history.unshift(term);
|
194
|
+
// Limit history to maxHistoryItems (default 5)
|
195
|
+
this.searchHistory = history.slice(0, this.maxHistoryItems);
|
196
|
+
if (typeof localStorage !== 'undefined') {
|
197
|
+
localStorage.setItem(this.historyKey, JSON.stringify(this.searchHistory));
|
198
|
+
}
|
199
|
+
}
|
200
|
+
// Remove individual history entry
|
201
|
+
removeFromHistory(term) {
|
202
|
+
if (!this.enableHistory)
|
203
|
+
return;
|
204
|
+
const history = [...this.searchHistory];
|
205
|
+
const index = history.indexOf(term);
|
206
|
+
if (index > -1) {
|
207
|
+
history.splice(index, 1);
|
208
|
+
this.searchHistory = history;
|
209
|
+
// Update localStorage
|
210
|
+
if (typeof localStorage !== 'undefined') {
|
211
|
+
localStorage.setItem(this.historyKey, JSON.stringify(this.searchHistory));
|
212
|
+
}
|
213
|
+
// Update suggestions after removal
|
214
|
+
this.updateSuggestions();
|
215
|
+
// Close dropdown if no history remains
|
216
|
+
if (this.searchHistory.length === 0 && this.value.length === 0) {
|
217
|
+
this.showDropdown = false;
|
218
|
+
}
|
219
|
+
}
|
220
|
+
}
|
221
|
+
requestSuggestions(query) {
|
222
|
+
this.ifxSuggestionRequested.emit(query);
|
223
|
+
this.updateSuggestions();
|
224
|
+
}
|
225
|
+
updateSuggestions() {
|
226
|
+
const query = this.value.toLowerCase();
|
227
|
+
let suggestions = [];
|
228
|
+
if (query.length > 0) {
|
229
|
+
// For text input: Mix external suggestions and relevant history
|
230
|
+
// 1. Filter external suggestions
|
231
|
+
if (this.suggestions && this.suggestions.length > 0) {
|
232
|
+
const filteredExternal = this.suggestions.filter(s => s.text.toLowerCase().includes(query));
|
233
|
+
suggestions = [...suggestions, ...filteredExternal];
|
234
|
+
}
|
235
|
+
// 2. Filter relevant history entries
|
236
|
+
if (this.enableHistory && this.searchHistory.length > 0) {
|
237
|
+
const filteredHistory = this.searchHistory
|
238
|
+
.filter(term => term.toLowerCase().includes(query))
|
239
|
+
.map((term, index) => ({
|
240
|
+
id: `history-${index}`,
|
241
|
+
text: term,
|
242
|
+
type: 'history'
|
243
|
+
}));
|
244
|
+
suggestions = [...suggestions, ...filteredHistory];
|
245
|
+
}
|
246
|
+
// 3. Sort by relevance (exact matches first, then prefix matches)
|
247
|
+
suggestions.sort((a, b) => {
|
248
|
+
const aText = a.text.toLowerCase();
|
249
|
+
const bText = b.text.toLowerCase();
|
250
|
+
// Exact match has highest priority
|
251
|
+
if (aText === query && bText !== query)
|
252
|
+
return -1;
|
253
|
+
if (bText === query && aText !== query)
|
254
|
+
return 1;
|
255
|
+
// Prefix match has second highest priority
|
256
|
+
const aStartsWith = aText.startsWith(query);
|
257
|
+
const bStartsWith = bText.startsWith(query);
|
258
|
+
if (aStartsWith && !bStartsWith)
|
259
|
+
return -1;
|
260
|
+
if (bStartsWith && !aStartsWith)
|
261
|
+
return 1;
|
262
|
+
// With equal relevance: external suggestions before history
|
263
|
+
if (a.type === 'suggestion' && b.type === 'history')
|
264
|
+
return -1;
|
265
|
+
if (a.type === 'history' && b.type === 'suggestion')
|
266
|
+
return 1;
|
267
|
+
// Alphabetical sorting as last criterion
|
268
|
+
return aText.localeCompare(bText);
|
269
|
+
});
|
270
|
+
}
|
271
|
+
else {
|
272
|
+
// For empty query: Show only history (no external suggestions)
|
273
|
+
if (this.enableHistory && this.searchHistory.length > 0) {
|
274
|
+
const historySuggestions = this.searchHistory.map((term, index) => ({
|
275
|
+
id: `history-${index}`,
|
276
|
+
text: term,
|
277
|
+
type: 'history'
|
278
|
+
}));
|
279
|
+
suggestions = historySuggestions;
|
280
|
+
}
|
281
|
+
// For empty query DO NOT show external suggestions
|
282
|
+
}
|
283
|
+
// Remove duplicates based on text and scope combination (history takes precedence over external)
|
284
|
+
const uniqueSuggestions = suggestions.reduce((unique, current) => {
|
285
|
+
const existingIndex = unique.findIndex(item => item.text.toLowerCase() === current.text.toLowerCase() &&
|
286
|
+
item.scope === current.scope);
|
287
|
+
if (existingIndex === -1) {
|
288
|
+
unique.push(current);
|
289
|
+
}
|
290
|
+
else {
|
291
|
+
// If already exists, prefer history over external suggestions
|
292
|
+
if (current.type === 'history' && unique[existingIndex].type !== 'history') {
|
293
|
+
unique[existingIndex] = current;
|
294
|
+
}
|
295
|
+
}
|
296
|
+
return unique;
|
297
|
+
}, []);
|
298
|
+
this.filteredSuggestions = uniqueSuggestions.slice(0, this.maxSuggestions);
|
299
|
+
this.selectedSuggestionIndex = -1;
|
300
|
+
}
|
301
|
+
navigateSuggestions(direction) {
|
302
|
+
const maxIndex = this.filteredSuggestions.length - 1;
|
303
|
+
if (direction > 0) {
|
304
|
+
this.selectedSuggestionIndex = this.selectedSuggestionIndex < maxIndex
|
305
|
+
? this.selectedSuggestionIndex + 1
|
306
|
+
: 0;
|
307
|
+
}
|
308
|
+
else {
|
309
|
+
this.selectedSuggestionIndex = this.selectedSuggestionIndex > 0
|
310
|
+
? this.selectedSuggestionIndex - 1
|
311
|
+
: maxIndex;
|
312
|
+
}
|
313
|
+
}
|
314
|
+
selectSuggestion(suggestion) {
|
315
|
+
this.value = suggestion.text;
|
316
|
+
this.inputElement.value = suggestion.text;
|
317
|
+
this.ifxSuggestionSelected.emit(suggestion);
|
318
|
+
this.ifxInput.emit(this.value);
|
319
|
+
if (this.enableHistory) {
|
320
|
+
// Always add selected suggestions to history since they are valid results
|
321
|
+
this.addToHistory(suggestion.text);
|
322
|
+
}
|
323
|
+
this.hideDropdown();
|
324
|
+
}
|
325
|
+
hideDropdown() {
|
326
|
+
this.showDropdown = false;
|
327
|
+
this.selectedSuggestionIndex = -1;
|
328
|
+
this.isFocused = false;
|
329
|
+
}
|
330
|
+
// Show only history in dropdown (e.g. on focus without input)
|
331
|
+
showHistoryDropdown() {
|
332
|
+
if (this.enableHistory && this.searchHistory.length > 0) {
|
333
|
+
// Show only history entries
|
334
|
+
const historySuggestions = this.searchHistory.map((term, index) => ({
|
335
|
+
id: `history-${index}`,
|
336
|
+
text: term,
|
337
|
+
type: 'history'
|
338
|
+
}));
|
339
|
+
this.filteredSuggestions = historySuggestions.slice(0, this.maxSuggestions);
|
340
|
+
this.selectedSuggestionIndex = -1;
|
341
|
+
}
|
342
|
+
else {
|
343
|
+
this.filteredSuggestions = [];
|
344
|
+
}
|
345
|
+
}
|
346
|
+
// Check if only history entries are displayed (without text input)
|
347
|
+
isShowingOnlyHistory() {
|
348
|
+
return this.value.length === 0 &&
|
349
|
+
this.filteredSuggestions.length > 0 &&
|
350
|
+
this.filteredSuggestions.every(s => s.type === 'history');
|
351
|
+
}
|
352
|
+
// Render text with highlighted matches
|
353
|
+
renderHighlightedText(text, query) {
|
354
|
+
if (!query || query.length === 0) {
|
355
|
+
return text;
|
356
|
+
}
|
357
|
+
const lowerText = text.toLowerCase();
|
358
|
+
const lowerQuery = query.toLowerCase();
|
359
|
+
const index$1 = lowerText.indexOf(lowerQuery);
|
360
|
+
if (index$1 === -1) {
|
361
|
+
return text;
|
362
|
+
}
|
363
|
+
const before = text.substring(0, index$1);
|
364
|
+
const match = text.substring(index$1, index$1 + query.length);
|
365
|
+
const after = text.substring(index$1 + query.length);
|
366
|
+
return [
|
367
|
+
before,
|
368
|
+
index.h("strong", null, match),
|
369
|
+
after
|
370
|
+
];
|
52
371
|
}
|
53
372
|
componentWillLoad() {
|
54
373
|
if (!domUtils.isNestedInIfxComponent(this.el)) {
|
@@ -63,7 +382,17 @@ const SearchField = class {
|
|
63
382
|
this.showDeleteIconInternalState = false;
|
64
383
|
}
|
65
384
|
render() {
|
66
|
-
return (index.h("div", { key: '
|
385
|
+
return (index.h("div", { key: 'b7cf249b85fdd3b8de6e145e026031b55d689758', "aria-label": this.ariaLabel, "aria-labelledby": this.ariaLabelledBy, "aria-describedby": this.ariaDescribedBy, "aria-disabled": this.disabled, "aria-value": this.value, class: 'search-field' }, index.h("div", { key: '0e19cb8ecf2bb3c82e0cc835aa66d2c144aac207', class: this.getWrapperClassNames(), tabindex: 1, onClick: () => this.focusInput() }, index.h("ifx-icon", { key: '2c8f71752ac2c7aa1e520b5de67a31025e66ae5d', icon: "search-16", class: "search-icon" }), index.h("input", { key: 'f9773fac1622f99251c7ed6c4662170bf7f94460', ref: (el) => (this.inputElement = el), type: "text", autocomplete: this.autocomplete, onInput: () => this.handleInput(), onFocus: () => this.focusInput(), onBlur: () => this.blurInput(), placeholder: this.placeholder, disabled: this.disabled, maxlength: this.maxlength, value: this.value, role: "combobox", "aria-expanded": this.showDropdown, "aria-autocomplete": "list", "aria-haspopup": "listbox", "aria-label": this.ariaLabel, "aria-labelledby": this.ariaLabelledBy, "aria-describedby": this.ariaDescribedBy, "aria-owns": this.showDropdown ? 'suggestions-dropdown' : undefined, "aria-activedescendant": this.selectedSuggestionIndex >= 0 ? `suggestion-${this.selectedSuggestionIndex}` : undefined }), this.showDeleteIcon && this.showDeleteIconInternalState ? (index.h("ifx-icon", { icon: "cRemove16", class: "delete-icon", onClick: this.handleDelete, role: "button", tabindex: "0", "aria-label": this.deleteIconAriaLabel, onKeyDown: (event) => {
|
386
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
387
|
+
event.preventDefault();
|
388
|
+
this.handleDelete();
|
389
|
+
}
|
390
|
+
} })) : null), this.showDropdown && this.filteredSuggestions.length > 0 && (index.h("div", { key: '5c83b7c9655ae7bed7e56c366d77fa400d02a080', ref: (el) => (this.dropdownElement = el), id: "suggestions-dropdown", class: "suggestions-dropdown", role: "listbox", "aria-label": this.dropdownAriaLabel }, this.isShowingOnlyHistory() && (index.h("div", { key: 'a053469803379f16fff04c053035095bffb7cbdc', class: "suggestions-header" }, this.historyHeaderText)), this.filteredSuggestions.map((suggestion, index$1) => (index.h("div", { key: suggestion.id, id: `suggestion-${index$1}`, class: this.getSuggestionClassNames(index$1), role: "option", "aria-selected": index$1 === this.selectedSuggestionIndex, "aria-label": `${suggestion.type === 'history' ? this.historyItemAriaLabel : this.suggestionAriaLabel}: ${suggestion.text}${suggestion.scope ? `, ${suggestion.scope}` : ''}${suggestion.resultCount ? `, ${suggestion.resultCount} results` : ''}`, onClick: () => this.selectSuggestion(suggestion), onMouseEnter: () => this.selectedSuggestionIndex = index$1 }, index.h("div", { class: "suggestion-content" }, suggestion.type === 'history' && (index.h("ifx-icon", { icon: "history-16", class: "suggestion-icon suggestion-icon--history" })), suggestion.type === 'suggestion' && (index.h("ifx-icon", { icon: "search-16", class: "suggestion-icon suggestion-icon--suggestion" })), index.h("span", { class: "suggestion-text" }, index.h("span", { class: "suggestion-main-text" }, this.renderHighlightedText(suggestion.text, this.value)), suggestion.scope && (index.h("span", { class: "suggestion-scope" }, "\u2013 ", suggestion.scope))), suggestion.resultCount !== undefined && suggestion.scope && (index.h("span", { class: "suggestion-count" }, suggestion.resultCount)), suggestion.type === 'history' && (index.h("ifx-icon", { icon: "cross16", class: "suggestion-delete-icon", role: "button", tabindex: "0", "aria-label": `${this.historyDeleteAriaLabel}: ${suggestion.text}`, onClick: (event) => this.handleHistoryDelete(event, suggestion.text), onKeyDown: (event) => {
|
391
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
392
|
+
event.preventDefault();
|
393
|
+
this.handleHistoryDelete(event, suggestion.text);
|
394
|
+
}
|
395
|
+
} }))))))))));
|
67
396
|
}
|
68
397
|
getSizeClass() {
|
69
398
|
return `${this.size}` === "s"
|
@@ -71,11 +400,19 @@ const SearchField = class {
|
|
71
400
|
: "";
|
72
401
|
}
|
73
402
|
getWrapperClassNames() {
|
74
|
-
return index$1.classNames(`search-field__wrapper`, `search-field__wrapper ${this.getSizeClass()}`, `${this.isFocused ? 'focused' : ""}`);
|
403
|
+
return index$1.classNames(`search-field__wrapper`, `search-field__wrapper ${this.getSizeClass()}`, `${this.isFocused ? 'focused' : ""}`, `${this.showDropdown ? 'dropdown-open' : ""}`);
|
404
|
+
}
|
405
|
+
getSuggestionClassNames(index) {
|
406
|
+
var _a;
|
407
|
+
return index$1.classNames('suggestion-item', {
|
408
|
+
'suggestion-item--selected': index === this.selectedSuggestionIndex,
|
409
|
+
'suggestion-item--history': ((_a = this.filteredSuggestions[index]) === null || _a === void 0 ? void 0 : _a.type) === 'history'
|
410
|
+
});
|
75
411
|
}
|
76
412
|
get el() { return index.getElement(this); }
|
77
413
|
static get watchers() { return {
|
78
|
-
"value": ["valueWatcher"]
|
414
|
+
"value": ["valueWatcher"],
|
415
|
+
"suggestions": ["suggestionsWatcher"]
|
79
416
|
}; }
|
80
417
|
};
|
81
418
|
SearchField.style = IfxSearchFieldStyle0;
|