@sonic-equipment/ui 259.0.2 → 260.0.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/algolia/algolia-active-categories.js +2 -2
- package/dist/algolia/algolia-categories-filters.js +2 -2
- package/dist/badges/badge/badge.d.ts +5 -3
- package/dist/badges/badge/badge.js +4 -4
- package/dist/badges/badge/badge.module.css.js +1 -1
- package/dist/badges/badge/icon-with-badge/icon-with-badge.d.ts +11 -6
- package/dist/badges/badge/icon-with-badge/icon-with-badge.js +5 -2
- package/dist/badges/badge/icon-with-badge/icon-with-badge.module.css.js +1 -1
- package/dist/base.css +2 -2
- package/dist/breadcrumbs/breadcrumb.js +3 -4
- package/dist/buttons/add-to-cart-button/add-to-cart-button.js +2 -2
- package/dist/buttons/button/button.js +2 -2
- package/dist/buttons/close-button/close-button.d.ts +12 -0
- package/dist/buttons/close-button/close-button.js +11 -0
- package/dist/buttons/close-button/close-button.module.css.js +3 -0
- package/dist/buttons/favorite/favorite-button.js +3 -3
- package/dist/buttons/icon-button/icon-button.d.ts +13 -5
- package/dist/buttons/icon-button/icon-button.js +6 -5
- package/dist/buttons/icon-button/icon-button.module.css.js +1 -1
- package/dist/buttons/link/link.d.ts +2 -0
- package/dist/buttons/link/link.js +4 -7
- package/dist/cards/orderline-card/connected-remove-button.js +1 -2
- package/dist/carousel/carousel-navigation-button.js +2 -3
- package/dist/collapsables/accordion/accordion-item.js +2 -3
- package/dist/collapsables/show-all/show-all.js +2 -2
- package/dist/collapsables/unmounter/utils.js +4 -1
- package/dist/country-language-selection-list/connected-country-language-selection-list.d.ts +1 -0
- package/dist/country-language-selection-list/connected-country-language-selection-list.js +268 -0
- package/dist/country-language-selection-list/country-language-selection-list.d.ts +18 -0
- package/dist/country-language-selection-list/country-language-selection-list.js +54 -0
- package/dist/country-language-selection-list/country-language-selection-list.module.css.js +3 -0
- package/dist/country-language-selector/connected-country-language-selector.d.ts +10 -0
- package/dist/country-language-selector/connected-country-language-selector.js +129 -0
- package/dist/country-language-selector/country-language-selector.d.ts +18 -0
- package/dist/country-language-selector/country-language-selector.js +52 -0
- package/dist/country-language-selector/country-language-selector.module.css.js +3 -0
- package/dist/country-language-selector-button/connected-country-language-selector-button.d.ts +1 -0
- package/dist/country-language-selector-button/connected-country-language-selector-button.js +22 -0
- package/dist/country-language-selector-button/country-language-selector-button.d.ts +7 -0
- package/dist/country-language-selector-button/country-language-selector-button.js +18 -0
- package/dist/country-language-selector-button/country-language-selector-button.module.css.js +3 -0
- package/dist/country-selector/country-selector-trigger/country-selector-trigger.js +2 -2
- package/dist/country-selector/country-selector-trigger/country-selector-trigger.module.css.js +1 -1
- package/dist/country-selector/use-countries-languages.d.ts +2 -2
- package/dist/country-selector/use-countries-languages.js +1 -1
- package/dist/delivery-time/delivery-time.js +1 -1
- package/dist/display/details/details.js +2 -2
- package/dist/exports.d.ts +71 -3
- package/dist/filters/active-filters/active-filters.js +1 -2
- package/dist/filters/active-filters/active-filters.module.css.js +1 -1
- package/dist/filters/pagination/pagination.js +1 -3
- package/dist/filters/pagination/pagination.module.css.js +1 -1
- package/dist/flag/flag.d.ts +8 -0
- package/dist/flag/flag.js +11 -0
- package/dist/flag/flag.module.css.js +3 -0
- package/dist/flags/flag-ad.d.ts +1 -0
- package/dist/flags/flag-ad.js +7 -0
- package/dist/flags/flag-ae.d.ts +1 -0
- package/dist/flags/flag-ae.js +7 -0
- package/dist/flags/flag-al.d.ts +1 -0
- package/dist/flags/flag-al.js +7 -0
- package/dist/flags/flag-at.d.ts +1 -0
- package/dist/flags/flag-at.js +7 -0
- package/dist/flags/flag-ba.d.ts +1 -0
- package/dist/flags/flag-ba.js +7 -0
- package/dist/flags/flag-be.d.ts +1 -0
- package/dist/flags/flag-be.js +7 -0
- package/dist/flags/flag-bg.d.ts +1 -0
- package/dist/flags/flag-bg.js +7 -0
- package/dist/flags/flag-br.d.ts +1 -0
- package/dist/flags/flag-br.js +7 -0
- package/dist/flags/flag-ca.d.ts +1 -0
- package/dist/flags/flag-ca.js +7 -0
- package/dist/flags/flag-ch.d.ts +1 -0
- package/dist/flags/flag-ch.js +7 -0
- package/dist/flags/flag-cy.d.ts +1 -0
- package/dist/flags/flag-cy.js +7 -0
- package/dist/flags/flag-cz.d.ts +1 -0
- package/dist/flags/flag-cz.js +7 -0
- package/dist/flags/flag-de.d.ts +1 -0
- package/dist/flags/flag-de.js +7 -0
- package/dist/flags/flag-dj.d.ts +1 -0
- package/dist/flags/flag-dj.js +7 -0
- package/dist/flags/flag-dk.d.ts +1 -0
- package/dist/flags/flag-dk.js +7 -0
- package/dist/flags/flag-ec.d.ts +1 -0
- package/dist/flags/flag-ec.js +7 -0
- package/dist/flags/flag-ee.d.ts +1 -0
- package/dist/flags/flag-ee.js +7 -0
- package/dist/flags/flag-es.d.ts +1 -0
- package/dist/flags/flag-es.js +7 -0
- package/dist/flags/flag-eu.d.ts +1 -0
- package/dist/flags/flag-eu.js +7 -0
- package/dist/flags/flag-fi.d.ts +1 -0
- package/dist/flags/flag-fi.js +7 -0
- package/dist/flags/flag-fr.d.ts +1 -0
- package/dist/flags/flag-fr.js +7 -0
- package/dist/flags/flag-gb.d.ts +1 -0
- package/dist/flags/flag-gb.js +7 -0
- package/dist/flags/flag-gr.d.ts +1 -0
- package/dist/flags/flag-gr.js +7 -0
- package/dist/flags/flag-hr.d.ts +1 -0
- package/dist/flags/flag-hr.js +7 -0
- package/dist/flags/flag-hu.d.ts +1 -0
- package/dist/flags/flag-hu.js +7 -0
- package/dist/flags/flag-ie.d.ts +1 -0
- package/dist/flags/flag-ie.js +7 -0
- package/dist/flags/flag-iq.d.ts +1 -0
- package/dist/flags/flag-iq.js +7 -0
- package/dist/flags/flag-is.d.ts +1 -0
- package/dist/flags/flag-is.js +7 -0
- package/dist/flags/flag-it.d.ts +1 -0
- package/dist/flags/flag-it.js +7 -0
- package/dist/flags/flag-kw.d.ts +1 -0
- package/dist/flags/flag-kw.js +7 -0
- package/dist/flags/flag-kz.d.ts +1 -0
- package/dist/flags/flag-kz.js +7 -0
- package/dist/flags/flag-lb.d.ts +1 -0
- package/dist/flags/flag-lb.js +7 -0
- package/dist/flags/flag-lt.d.ts +1 -0
- package/dist/flags/flag-lt.js +7 -0
- package/dist/flags/flag-lu.d.ts +1 -0
- package/dist/flags/flag-lu.js +7 -0
- package/dist/flags/flag-lv.d.ts +1 -0
- package/dist/flags/flag-lv.js +7 -0
- package/dist/flags/flag-ma.d.ts +1 -0
- package/dist/flags/flag-ma.js +7 -0
- package/dist/flags/flag-mc.d.ts +1 -0
- package/dist/flags/flag-mc.js +7 -0
- package/dist/flags/flag-md.d.ts +1 -0
- package/dist/flags/flag-md.js +7 -0
- package/dist/flags/flag-me.d.ts +1 -0
- package/dist/flags/flag-me.js +7 -0
- package/dist/flags/flag-mk.d.ts +1 -0
- package/dist/flags/flag-mk.js +7 -0
- package/dist/flags/flag-mt.d.ts +1 -0
- package/dist/flags/flag-mt.js +7 -0
- package/dist/flags/flag-mx.d.ts +1 -0
- package/dist/flags/flag-mx.js +7 -0
- package/dist/flags/flag-my.d.ts +1 -0
- package/dist/flags/flag-my.js +7 -0
- package/dist/flags/flag-nl.d.ts +1 -0
- package/dist/flags/flag-nl.js +7 -0
- package/dist/flags/flag-no.d.ts +1 -0
- package/dist/flags/flag-no.js +7 -0
- package/dist/flags/flag-pl.d.ts +1 -0
- package/dist/flags/flag-pl.js +7 -0
- package/dist/flags/flag-pt.d.ts +1 -0
- package/dist/flags/flag-pt.js +7 -0
- package/dist/flags/flag-ro.d.ts +1 -0
- package/dist/flags/flag-ro.js +7 -0
- package/dist/flags/flag-rs.d.ts +1 -0
- package/dist/flags/flag-rs.js +7 -0
- package/dist/flags/flag-sa.d.ts +1 -0
- package/dist/flags/flag-sa.js +7 -0
- package/dist/flags/flag-se.d.ts +1 -0
- package/dist/flags/flag-se.js +7 -0
- package/dist/flags/flag-sg.d.ts +1 -0
- package/dist/flags/flag-sg.js +7 -0
- package/dist/flags/flag-si.d.ts +1 -0
- package/dist/flags/flag-si.js +7 -0
- package/dist/flags/flag-sk.d.ts +1 -0
- package/dist/flags/flag-sk.js +7 -0
- package/dist/flags/flag-tr.d.ts +1 -0
- package/dist/flags/flag-tr.js +7 -0
- package/dist/flags/flag-tw.d.ts +1 -0
- package/dist/flags/flag-tw.js +7 -0
- package/dist/flags/flag-ua.d.ts +1 -0
- package/dist/flags/flag-ua.js +7 -0
- package/dist/flags/flag-us.d.ts +1 -0
- package/dist/flags/flag-us.js +7 -0
- package/dist/flags/flag-vn.d.ts +1 -0
- package/dist/flags/flag-vn.js +7 -0
- package/dist/flags/flag-xk.d.ts +1 -0
- package/dist/flags/flag-xk.js +7 -0
- package/dist/flags/flag-za.d.ts +1 -0
- package/dist/flags/flag-za.js +7 -0
- package/dist/flags/index.d.ts +1 -0
- package/dist/flags/index.js +88 -0
- package/dist/footer/connected-footer.d.ts +1 -3
- package/dist/footer/connected-footer.js +3 -5
- package/dist/forms/elements/checkbox/checkbox.module.css.js +1 -1
- package/dist/forms/elements/select/select.js +3 -4
- package/dist/forms/fields/number-field/number-field.js +2 -4
- package/dist/forms/fields/search-field/search-field.js +2 -2
- package/dist/forms/fields/select-field/select-field.d.ts +8 -1
- package/dist/forms/fields/select-field/select-field.js +30 -9
- package/dist/forms/fields/select-field/select-field.module.css.js +1 -1
- package/dist/forms/fields/text-field/password-reveal-toggle/password-reveal-toggle.js +2 -3
- package/dist/forms/layout/form/form.js +1 -1
- package/dist/global-search/search-input/search-input.js +5 -4
- package/dist/global-search/search-result-panel/sections/no-search.js +3 -4
- package/dist/global-search/search-result-panel/sections/with-results.js +4 -4
- package/dist/global-search/search-section/search-list-item.js +1 -2
- package/dist/header/buttons/account/connected-account-button.js +1 -2
- package/dist/header/buttons/cart/connected-cart-button.js +1 -2
- package/dist/header/buttons/favorites/connected-favorites-button.js +1 -3
- package/dist/header/buttons/hamburger/hamburger-button.js +1 -1
- package/dist/header/buttons/hamburger/hamburger-button.module.css.js +1 -1
- package/dist/header/buttons/search/search-button.js +1 -2
- package/dist/header/header.js +1 -1
- package/dist/header/link-list/navigation-link-list.js +2 -2
- package/dist/header/link-list/navigation-link-list.module.css.js +1 -1
- package/dist/header/sonic-logo/sonic-logo.js +7 -2
- package/dist/header/sonic-logo/sonic-logo.module.css.js +1 -1
- package/dist/icon/icon.d.ts +10 -0
- package/dist/icon/icon.js +11 -0
- package/dist/icon/icon.module.css.js +3 -0
- package/dist/icons/glyph/glyphs-arrow-boldcaps-left-icon.js +0 -1
- package/dist/icons/glyph/glyphs-arrow-boldcaps-right-icon.js +0 -1
- package/dist/icons/glyph/glyphs-chevrons-bold-down-icon.js +0 -1
- package/dist/icons/glyph/glyphs-chevrons-bold-left-icon.js +7 -0
- package/dist/icons/glyph/glyphs-chevrons-bold-right-icon.js +0 -1
- package/dist/icons/glyph/glyphs-chevrons-bold-up-icon.js +0 -1
- package/dist/icons/glyph/glyphs-chevrons-slim-down-icon.js +0 -1
- package/dist/icons/glyph/glyphs-chevrons-slim-left-icon.js +0 -1
- package/dist/icons/glyph/glyphs-chevrons-slim-right-icon.js +0 -1
- package/dist/icons/glyph/glyphs-chevrons-slim-up-icon.js +7 -0
- package/dist/icons/index.d.ts +87 -0
- package/dist/icons/index.js +90 -0
- package/dist/icons/solid/solid-attention-icon.js +0 -1
- package/dist/icons/solid/solid-cart-icon.js +0 -1
- package/dist/icons/solid/solid-close-icon.js +0 -1
- package/dist/icons/solid/solid-edit-icon.js +0 -1
- package/dist/icons/solid/solid-favorite-icon.js +0 -1
- package/dist/icons/solid/solid-home-icon.js +0 -1
- package/dist/icons/solid/solid-information-icon.js +0 -1
- package/dist/icons/solid/solid-login-icon.js +0 -1
- package/dist/icons/solid/solid-logout-icon.js +0 -1
- package/dist/icons/solid/solid-news-icon.js +0 -1
- package/dist/icons/solid/solid-notice-icon.js +0 -1
- package/dist/icons/solid/solid-okay-icon.js +0 -1
- package/dist/icons/solid/solid-rating-icon.js +0 -1
- package/dist/icons/solid/solid-salecategory-icon.js +0 -1
- package/dist/icons/solid/solid-tag-icon.js +0 -1
- package/dist/icons/stroke/stroke-arrowdown-icon.d.ts +1 -0
- package/dist/icons/stroke/stroke-arrowleft-icon.d.ts +1 -0
- package/dist/icons/stroke/stroke-arrowleft-icon.js +7 -0
- package/dist/icons/stroke/stroke-arrowright-icon.d.ts +1 -0
- package/dist/icons/stroke/stroke-arrowright-icon.js +7 -0
- package/dist/icons/stroke/stroke-arrowup-icon.d.ts +1 -0
- package/dist/icons/stroke/stroke-categories-icon.js +0 -1
- package/dist/icons/stroke/stroke-checkmark-icon.js +0 -1
- package/dist/icons/stroke/stroke-closebox-icon.js +0 -1
- package/dist/icons/stroke/stroke-dehashed-icon.js +0 -1
- package/dist/icons/stroke/stroke-download-icon.js +0 -1
- package/dist/icons/stroke/stroke-event-icon.js +0 -1
- package/dist/icons/stroke/stroke-favorite-icon.js +0 -1
- package/dist/icons/stroke/stroke-filter-icon.js +0 -1
- package/dist/icons/stroke/stroke-hashed-icon.js +0 -1
- package/dist/icons/stroke/stroke-information-icon.js +0 -1
- package/dist/icons/stroke/stroke-minus-icon.js +0 -1
- package/dist/icons/stroke/stroke-notice-icon.js +7 -0
- package/dist/icons/stroke/stroke-plus-icon.js +0 -1
- package/dist/icons/stroke/stroke-recent-icon.js +0 -1
- package/dist/icons/stroke/stroke-search-icon.js +0 -1
- package/dist/icons/stroke/stroke-trash-icon.js +0 -1
- package/dist/index.js +72 -4
- package/dist/info-icon-tooltip/info-icon-tooltip.d.ts +3 -1
- package/dist/info-icon-tooltip/info-icon-tooltip.js +6 -8
- package/dist/intl/intl-context.d.ts +2 -0
- package/dist/intl/intl-provider.js +5 -0
- package/dist/intl/translation-id.d.ts +1 -1
- package/dist/intl/types.d.ts +3 -0
- package/dist/intl/types.js +6 -1
- package/dist/lists/download-document-list/download-document-list.js +4 -8
- package/dist/lists/download-document-list/download-document-list.module.css.js +1 -1
- package/dist/lists/feature-list/feature-list.js +5 -4
- package/dist/lists/feature-list/feature-list.module.css.js +1 -1
- package/dist/lists/icon-list/icon-list.d.ts +2 -1
- package/dist/lists/icon-list/icon-list.js +3 -2
- package/dist/lists/icon-list/icon-list.module.css.js +1 -1
- package/dist/lists/menu-list/menu-list-back-button.js +2 -2
- package/dist/lists/menu-list/menu-list-header.js +2 -2
- package/dist/lists/menu-list/menu-list-item.js +2 -2
- package/dist/lists/orderline-list/orderline-list.js +2 -2
- package/dist/lists/orderline-list/orderline-list.module.css.js +1 -1
- package/dist/media/image/image.js +1 -1
- package/dist/message/message.js +5 -8
- package/dist/modals/dialog/dialog.js +1 -4
- package/dist/modals/favorite/add-to-favorite-dialog.js +1 -1
- package/dist/modals/modal/modal.js +3 -2
- package/dist/modals/recover-password/recover-password-dialog.js +1 -1
- package/dist/modals/signin/sign-in-dialog.js +2 -2
- package/dist/navigation/mobile-navigation/mobile-navigation.js +2 -4
- package/dist/navigation/mobile-navigation/mobile-navigation.module.css.js +1 -1
- package/dist/notifications/announcements/announcement-list.js +7 -3
- package/dist/notifications/announcements/announcement-list.module.css.js +1 -1
- package/dist/notifications/announcements/announcement.js +12 -18
- package/dist/pages/checkout/payment-page/components/payment.js +1 -1
- package/dist/pages/checkout/shipping-page/components/edit-checkout-bill-to-address-form.js +1 -1
- package/dist/pages/countries-page/countries-page.d.ts +1 -0
- package/dist/pages/countries-page/countries-page.js +18 -0
- package/dist/pages/error-page/error-page.js +1 -1
- package/dist/pages/my-sonic/actions/change-customer/change-customer.js +2 -2
- package/dist/pages/my-sonic/navigation/my-sonic-desktop-navigation.js +2 -1
- package/dist/pages/my-sonic/navigation/my-sonic-navigation-items.d.ts +2 -2
- package/dist/pages/my-sonic/navigation/my-sonic-navigation-items.js +4 -8
- package/dist/pages/my-sonic/pages/order-details/order-details-content.js +1 -1
- package/dist/pages/my-sonic/pages/order-history/order-history-page.js +2 -2
- package/dist/pages/my-sonic/widgets/connected-address-book-widget.js +2 -2
- package/dist/shared/api/storefront/hooks/authentication/use-patch-session.d.ts +4 -1
- package/dist/shared/api/storefront/model/storefront.model.d.ts +4 -1
- package/dist/shared/error/default-error-view.js +2 -2
- package/dist/shared/hooks/use-resize-observer.js +1 -0
- package/dist/sidebar/sidebar.js +3 -2
- package/dist/sidebar/toggle-sidebar-button.js +2 -2
- package/dist/styles.css +1032 -686
- package/dist/table/elements/table-sort-button.js +2 -2
- package/dist/toast/toast.js +8 -10
- package/dist/tooltip/tooltip.js +3 -2
- package/dist/tooltip/tooltip.module.css.js +1 -1
- package/package.json +2 -1
- package/dist/icons/glyph/glyphs-arrow-blackcaps-right-icon.js +0 -8
- package/dist/icons/glyph/glyphs-arrow-semibold-right-icon.js +0 -8
- package/dist/navigation/account-icon/account-icon.d.ts +0 -5
- package/dist/navigation/account-icon/account-icon.js +0 -13
- package/dist/navigation/cart-icon/cart-icon.d.ts +0 -5
- package/dist/navigation/cart-icon/cart-icon.js +0 -13
- package/dist/navigation/favorite-icon/favorite-icon.d.ts +0 -5
- package/dist/navigation/favorite-icon/favorite-icon.js +0 -13
|
@@ -3,9 +3,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
3
3
|
import { forwardRef, useRef, useState, useEffect } from 'react';
|
|
4
4
|
import { NumberField as NumberField$1, Button } from 'react-aria-components';
|
|
5
5
|
import clsx from 'clsx';
|
|
6
|
-
import {
|
|
7
|
-
import { StrokePlusIcon } from '../../../icons/stroke/stroke-plus-icon.js';
|
|
8
|
-
import { StrokeTrashIcon } from '../../../icons/stroke/stroke-trash-icon.js';
|
|
6
|
+
import { Icon } from '../../../icon/icon.js';
|
|
9
7
|
import { InfoIconTooltip } from '../../../info-icon-tooltip/info-icon-tooltip.js';
|
|
10
8
|
import { useFormattedMessage } from '../../../intl/use-formatted-message.js';
|
|
11
9
|
import { multiRef } from '../../../shared/utils/refs.js';
|
|
@@ -22,7 +20,7 @@ const defaultFormatOptions = {
|
|
|
22
20
|
// TODO: this should be hard set options, not free to tweak
|
|
23
21
|
};
|
|
24
22
|
function NumberFieldControls({ active, children, isDisabled, showReset, }) {
|
|
25
|
-
return (jsxs("div", { className: styles['controls'], children: [active && (jsx(Button, { className: styles['control'], "data-test-selector": "decrement", isDisabled: isDisabled, slot: "decrement", children: showReset ? jsx(
|
|
23
|
+
return (jsxs("div", { className: styles['controls'], children: [active && (jsx(Button, { className: styles['control'], "data-test-selector": "decrement", isDisabled: isDisabled, slot: "decrement", children: showReset ? (jsx(Icon, { name: "Trash", size: "xs" })) : (jsx(Icon, { name: "Minus", size: "xs" })) })), children, active && (jsx(Button, { className: styles['control'], "data-test-selector": "increment", isDisabled: isDisabled, slot: "increment", children: jsx(Icon, { name: "Plus", size: "xs" }) }))] }));
|
|
26
24
|
}
|
|
27
25
|
let debouncedChange;
|
|
28
26
|
let debouncedKeyup;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { useState } from 'react';
|
|
4
|
-
import {
|
|
4
|
+
import { Icon } from '../../../icon/icon.js';
|
|
5
5
|
import { ProgressCircle } from '../../../loading/progress-circle.js';
|
|
6
6
|
import { useDebouncedCallback } from '../../../shared/hooks/use-debounced-callback.js';
|
|
7
7
|
import { TextField } from '../text-field/text-field.js';
|
|
@@ -9,7 +9,7 @@ import { TextField } from '../text-field/text-field.js';
|
|
|
9
9
|
function SearchField({ isDebounced = false, isLoading = false, onChange, value: _value, ...props }) {
|
|
10
10
|
const [inputValue, setInputValue] = useState(_value);
|
|
11
11
|
const onChangeDebounced = useDebouncedCallback((...args) => onChange?.(...args), 300);
|
|
12
|
-
return (jsx(TextField, { ...props, inlineElement: isLoading ? (jsx(ProgressCircle, { size: "sm", variant: "gray" })) : (jsx(
|
|
12
|
+
return (jsx(TextField, { ...props, inlineElement: isLoading ? (jsx(ProgressCircle, { size: "sm", variant: "gray" })) : (jsx(Icon, { name: "Search", size: "sm" })), isMultiline: false, onChange: isDebounced
|
|
13
13
|
? (...args) => {
|
|
14
14
|
onChangeDebounced(...args);
|
|
15
15
|
setInputValue(...args);
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { ValidateFunction } from '../../elements/field-error/field-error';
|
|
2
|
+
export interface SelectFieldOptionGroup<K> {
|
|
3
|
+
key: string;
|
|
4
|
+
label: string;
|
|
5
|
+
options: Array<K>;
|
|
6
|
+
reactNode?: React.ReactNode;
|
|
7
|
+
}
|
|
2
8
|
interface SelectFieldPropsBase {
|
|
3
9
|
'data-test-selector'?: string;
|
|
4
10
|
label: string;
|
|
@@ -16,6 +22,7 @@ interface SelectFieldProps<T> extends SelectFieldPropsBase {
|
|
|
16
22
|
isRequired?: boolean;
|
|
17
23
|
name?: string;
|
|
18
24
|
onChange?: (value: keyof T) => void;
|
|
25
|
+
optionGroups?: SelectFieldOptionGroup<keyof T>[];
|
|
19
26
|
options: T;
|
|
20
27
|
selectedOption?: keyof T;
|
|
21
28
|
showLabel?: boolean;
|
|
@@ -23,5 +30,5 @@ interface SelectFieldProps<T> extends SelectFieldPropsBase {
|
|
|
23
30
|
validate?: ValidateFunction<string>;
|
|
24
31
|
variant?: 'outline' | 'solid';
|
|
25
32
|
}
|
|
26
|
-
export declare function SelectField<T extends Record<string, string>>({ className, 'data-test-selector': dataTestSelector, defaultSelectedOption, info, isDisabled, isInvalid, isLoading, isRequired, label, name, onChange, options, placeholder, selectedOption, showLabel, showPlaceholder, size, variant, }: SelectFieldProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
export declare function SelectField<T extends Record<string, string | React.ReactNode>>({ className, 'data-test-selector': dataTestSelector, defaultSelectedOption, info, isDisabled, isInvalid, isLoading, isRequired, label, name, onChange, optionGroups, options, placeholder, selectedOption, showLabel, showPlaceholder, size, variant, }: SelectFieldProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
27
34
|
export {};
|
|
@@ -1,32 +1,53 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
3
3
|
import { useState, useEffect } from 'react';
|
|
4
|
-
import { Select, Button, SelectValue, Popover, ListBox,
|
|
4
|
+
import { Select, Button, SelectValue, Popover, ListBox, Header, ListBoxSection, ListBoxItem } from 'react-aria-components';
|
|
5
5
|
import clsx from 'clsx';
|
|
6
|
-
import {
|
|
7
|
-
import { StrokeCheckmarkIcon } from '../../../icons/stroke/stroke-checkmark-icon.js';
|
|
6
|
+
import { Icon } from '../../../icon/icon.js';
|
|
8
7
|
import { InfoIconTooltip } from '../../../info-icon-tooltip/info-icon-tooltip.js';
|
|
9
8
|
import { ProgressCircle } from '../../../loading/progress-circle.js';
|
|
9
|
+
import { childrenToText } from '../../../shared/utils/children-to-text.js';
|
|
10
10
|
import { FieldError } from '../../elements/field-error/field-error.js';
|
|
11
11
|
import { Label } from '../../elements/label/label.js';
|
|
12
12
|
import { FormFieldLayout } from '../../layout/form/form-field-layout.js';
|
|
13
13
|
import styles from './select-field.module.css.js';
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
/* eslint-disable @eslint-react/hooks-extra/no-direct-set-state-in-use-effect */
|
|
16
|
+
function SelectField({ className, 'data-test-selector': dataTestSelector, defaultSelectedOption, info, isDisabled, isInvalid, isLoading, isRequired, label, name, onChange, optionGroups, options, placeholder, selectedOption, showLabel = true, showPlaceholder, size = 'lg', variant = 'outline', }) {
|
|
16
17
|
const [selectedKey, setSelectedKey] = useState(defaultSelectedOption);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (selectedOption)
|
|
20
|
+
setSelectedKey(selectedOption);
|
|
21
|
+
}, [selectedOption]);
|
|
17
22
|
const handleChange = (key) => {
|
|
18
23
|
setSelectedKey(key);
|
|
19
24
|
onChange?.(key);
|
|
20
25
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
26
|
+
const grouplessOptions = Object.keys(options).filter(key => {
|
|
27
|
+
if (!optionGroups)
|
|
28
|
+
return [];
|
|
29
|
+
return !Object.values(optionGroups).some(group => group.options.includes(key));
|
|
30
|
+
});
|
|
25
31
|
return (jsx(Select, { "aria-label": label, className: clsx(styles['select-field'], styles[size], styles[variant], {
|
|
26
32
|
[styles['loading']]: isLoading,
|
|
27
33
|
}, className), "data-test-selector": dataTestSelector, defaultSelectedKey: defaultSelectedOption === undefined
|
|
28
34
|
? undefined
|
|
29
|
-
: String(defaultSelectedOption), isDisabled: isDisabled, isInvalid: isInvalid, isRequired: isRequired, name: name, onSelectionChange: key => handleChange(key), placeholder: placeholder || label, selectedKey: selectedOption === undefined ? undefined : String(selectedOption), children: jsx(FormFieldLayout, { errorSlot: jsx(FieldError, {}), infoSlot: info && jsx(InfoIconTooltip, { children: info }), labelSlot: showLabel && jsx(Label, { isRequired: isRequired, children: label }), children: jsxs(Fragment, { children: [jsxs(Button, { className: styles.button, children: [jsx(SelectValue, { className: styles.value, "data-test-selector": "value" }), isLoading ? (jsx(ProgressCircle, { "aria-hidden": "true", className: styles.loading, variant: "gray" })) : (jsx(
|
|
35
|
+
: String(defaultSelectedOption), isDisabled: isDisabled, isInvalid: isInvalid, isRequired: isRequired, name: name, onSelectionChange: key => handleChange(key), placeholder: placeholder || label, selectedKey: selectedOption === undefined ? undefined : String(selectedOption), children: jsx(FormFieldLayout, { errorSlot: jsx(FieldError, {}), infoSlot: info && jsx(InfoIconTooltip, { children: info }), labelSlot: showLabel && jsx(Label, { isRequired: isRequired, children: label }), children: jsxs(Fragment, { children: [jsxs(Button, { className: styles.button, children: [jsx(SelectValue, { className: styles.value, "data-test-selector": "value" }), isLoading ? (jsx(ProgressCircle, { "aria-hidden": "true", className: styles.loading, variant: "gray" })) : (jsx(Icon, { className: styles.icon, name: "ArrowDown", size: "xxs" }))] }), jsx(Popover, { className: clsx(styles.popover, styles[variant]), placement: "bottom left", children: jsxs(ListBox, { className: styles.listbox, "data-test-selector": dataTestSelector ? `${dataTestSelector}_options` : undefined, children: [showPlaceholder && (jsx(Header, { className: styles.header, children: placeholder || label })), optionGroups &&
|
|
36
|
+
optionGroups.map(({ key: groupKey, options: groupOptions, reactNode }) => {
|
|
37
|
+
return (groupOptions.some(k => k in options) && (jsxs(ListBoxSection, { className: styles.section, children: [jsx(Header, { className: styles.header, children: reactNode || label }), groupOptions.map(optionKey => {
|
|
38
|
+
const value = options[optionKey];
|
|
39
|
+
const textValue = childrenToText(value);
|
|
40
|
+
return (jsxs(ListBoxItem, { className: styles.item, id: optionKey, textValue: textValue, children: [selectedKey === optionKey && (jsx("span", { className: styles.icon, slot: "description", children: jsx(Icon, { className: styles.check, name: "Checkmark" }) })), jsx("span", { className: styles.label, slot: "label", children: value })] }, optionKey));
|
|
41
|
+
})] }, groupKey)));
|
|
42
|
+
}), optionGroups && grouplessOptions.length > 0 && (jsx(ListBoxSection, { className: styles.section, children: grouplessOptions.map(optionKey => {
|
|
43
|
+
const value = options[optionKey];
|
|
44
|
+
const textValue = childrenToText(value);
|
|
45
|
+
return (jsxs(ListBoxItem, { className: styles.item, id: optionKey, textValue: textValue, children: [selectedKey === optionKey && (jsx("span", { className: styles.icon, slot: "description", children: jsx(Icon, { className: styles.check, name: "Checkmark" }) })), jsx("span", { className: styles.label, slot: "label", children: value })] }, optionKey));
|
|
46
|
+
}) })), !optionGroups &&
|
|
47
|
+
Object.entries(options).map(([optionKey, value]) => {
|
|
48
|
+
const textValue = childrenToText(value);
|
|
49
|
+
return (jsxs(ListBoxItem, { className: styles.item, id: optionKey, textValue: textValue, children: [selectedKey === optionKey && (jsx("span", { className: styles.icon, slot: "description", children: jsx(Icon, { className: styles.check, name: "Checkmark" }) })), jsx("span", { className: styles.label, slot: "label", children: value })] }, optionKey));
|
|
50
|
+
})] }) })] }) }) }));
|
|
30
51
|
}
|
|
31
52
|
|
|
32
53
|
export { SelectField };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var styles = {"select-field":"select-field-module-T07fb","md":"select-field-module-x-dtL","solid":"select-field-module-jfk-G","loading":"select-field-module-NyDa0","button":"select-field-module-uGX30","value":"select-field-module-z-6Ym","icon":"select-field-module-Njvvb","popover":"select-field-module-tbhPg","listbox":"select-field-module-Rwf0R","header":"select-field-module-KDZmc","item":"select-field-module-u3hoe"};
|
|
1
|
+
var styles = {"select-field":"select-field-module-T07fb","md":"select-field-module-x-dtL","solid":"select-field-module-jfk-G","loading":"select-field-module-NyDa0","button":"select-field-module-uGX30","value":"select-field-module-z-6Ym","icon":"select-field-module-Njvvb","popover":"select-field-module-tbhPg","listbox":"select-field-module-Rwf0R","header":"select-field-module-KDZmc","section":"select-field-module-7A3aF","item":"select-field-module-u3hoe","label":"select-field-module-g1IlV"};
|
|
2
2
|
|
|
3
3
|
export { styles as default };
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { Checkbox } from 'react-aria-components';
|
|
4
|
-
import {
|
|
5
|
-
import { StrokeHashedIcon } from '../../../../icons/stroke/stroke-hashed-icon.js';
|
|
4
|
+
import { Icon } from '../../../../icon/icon.js';
|
|
6
5
|
import { useFormattedMessage } from '../../../../intl/use-formatted-message.js';
|
|
7
6
|
import styles from './password-reveal-toggle.module.css.js';
|
|
8
7
|
|
|
@@ -13,7 +12,7 @@ import styles from './password-reveal-toggle.module.css.js';
|
|
|
13
12
|
function PasswordRevealToggle({ onChange, showPassword, }) {
|
|
14
13
|
const t = useFormattedMessage();
|
|
15
14
|
const helpText = showPassword ? t('Conceal value') : t('Reveal value');
|
|
16
|
-
return (jsx(Checkbox, { "aria-label": helpText, className: styles['password-reveal-toggle'], onChange: onChange, children: jsx("span", { title: helpText, children: showPassword ? jsx(
|
|
15
|
+
return (jsx(Checkbox, { "aria-label": helpText, className: styles['password-reveal-toggle'], onChange: onChange, children: jsx("span", { title: helpText, children: showPassword ? jsx(Icon, { name: "Invisible" }) : jsx(Icon, { name: "Visible" }) }) }));
|
|
17
16
|
}
|
|
18
17
|
|
|
19
18
|
export { PasswordRevealToggle };
|
|
@@ -22,7 +22,7 @@ function Form({ autoComplete = false, children, className, errorMessage, footer,
|
|
|
22
22
|
scrollToTop();
|
|
23
23
|
}
|
|
24
24
|
}, [errorMessage]);
|
|
25
|
-
return (jsxs(Form$1, { "aria-label": title, autoComplete: autoComplete ? 'on' : 'off', className: clsx(styles['form'], className), onSubmit: handleSubmit, validationBehavior: "native", validationErrors: validationErrors, children: [header && jsx("header", { className: styles['form-header'], children: header }), errorMessage && (jsx("section", { className: styles['error-messages'], children: jsx(Message, { type: "danger", children: errorMessage }) })), children, jsx("footer", { className: styles['form-footer'], children: footer })] }));
|
|
25
|
+
return (jsxs(Form$1, { "aria-label": title, autoComplete: autoComplete ? 'on' : 'off', className: clsx(styles['form'], className), onSubmit: handleSubmit, validationBehavior: "native", validationErrors: validationErrors, children: [header && jsx("header", { className: styles['form-header'], children: header }), errorMessage && (jsx("section", { className: styles['error-messages'], children: jsx(Message, { type: "danger", children: errorMessage }) })), children, footer && jsx("footer", { className: styles['form-footer'], children: footer })] }));
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
export { Form };
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
3
|
import clsx from 'clsx';
|
|
4
4
|
import { IconButton } from '../../buttons/icon-button/icon-button.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { Icon } from '../../icon/icon.js';
|
|
6
|
+
import { useFormattedMessage } from '../../intl/use-formatted-message.js';
|
|
7
7
|
import styles from './search-input.module.css.js';
|
|
8
8
|
|
|
9
9
|
function SearchInput({ autocomplete, formRef, inputRef, onCancel, onSubmit, placeholder, }) {
|
|
10
|
+
const t = useFormattedMessage();
|
|
10
11
|
const formProps = autocomplete?.getFormProps({
|
|
11
12
|
inputElement: inputRef.current,
|
|
12
13
|
});
|
|
@@ -20,10 +21,10 @@ function SearchInput({ autocomplete, formRef, inputRef, onCancel, onSubmit, plac
|
|
|
20
21
|
formProps?.onSubmit(e);
|
|
21
22
|
onSubmit?.();
|
|
22
23
|
}
|
|
23
|
-
return (jsx("form", { ref: formRef, className: styles.form, ...formProps, onSubmit: handleSubmit, children: jsxs("div", { className: styles['input-container'], children: [jsx("label", { className: styles.label, htmlFor: "search", ...labelProps, children: jsx(
|
|
24
|
+
return (jsx("form", { ref: formRef, className: styles.form, ...formProps, onSubmit: handleSubmit, children: jsxs("div", { className: styles['input-container'], children: [jsx("label", { className: styles.label, htmlFor: "search", ...labelProps, children: jsx(Icon, { className: clsx(styles['icon-search'], styles.icon), label: t('Search'), name: "Search" }) }), jsx("input", { ref: inputRef, name: "search", onKeyUp: e => {
|
|
24
25
|
if (e.key === 'Escape')
|
|
25
26
|
onCancel?.();
|
|
26
|
-
}, ...inputProps, className: styles.input, placeholder: placeholder }), inputProps?.value && (jsx(IconButton, { className: styles['reset-btn'],
|
|
27
|
+
}, ...inputProps, className: styles.input, placeholder: placeholder }), inputProps?.value && (jsx(IconButton, { round: true, className: styles['reset-btn'], icon: "CloseSolid", label: t('Reset'), onClick: () => formRef.current?.reset(), theme: "secondary", type: "reset" }))] }) }));
|
|
27
28
|
}
|
|
28
29
|
|
|
29
30
|
export { SearchInput };
|
|
@@ -3,8 +3,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
3
3
|
import { useAlgoliaSearch } from '../../../algolia/use-algolia-search.js';
|
|
4
4
|
import { Link } from '../../../buttons/link/link.js';
|
|
5
5
|
import { CardCarousel } from '../../../carousel/card-carousel/card-carousel.js';
|
|
6
|
-
import {
|
|
7
|
-
import { StrokeSearchIcon } from '../../../icons/stroke/stroke-search-icon.js';
|
|
6
|
+
import { Icon } from '../../../icon/icon.js';
|
|
8
7
|
import { FormattedMessage } from '../../../intl/formatted-message.js';
|
|
9
8
|
import { useFormattedMessage } from '../../../intl/use-formatted-message.js';
|
|
10
9
|
import { PromoCard } from '../../../promos/promo-card/promo-card.js';
|
|
@@ -31,7 +30,7 @@ function PopularSearchesSection() {
|
|
|
31
30
|
}), children: items.slice(0, 4).map(item => (jsx(SearchListItem, { ...autocomplete.getItemProps({
|
|
32
31
|
item,
|
|
33
32
|
source: source,
|
|
34
|
-
}), icon: jsx(
|
|
33
|
+
}), icon: jsx(Icon, { name: "Search", size: "sm" }), text: jsx(Highlight, { attribute: "query", hit: item }) }, item.objectID))) }) }));
|
|
35
34
|
}
|
|
36
35
|
function RecentSearchesSection() {
|
|
37
36
|
const { autocomplete, recentSearches: collection } = useAlgoliaSearch();
|
|
@@ -43,7 +42,7 @@ function RecentSearchesSection() {
|
|
|
43
42
|
return (jsx(SearchSection, { button: jsx(Link, { hasUnderline: true, onClick: () => items.forEach(item => source.onRemove(item.id)), children: jsx(FormattedMessage, { id: "Clear" }) }), title: t('Recent searches'), children: jsx(SearchList, { ...autocomplete.getListProps({ source }), children: items.map(item => (jsx(SearchListItem, { ...autocomplete.getItemProps({
|
|
44
43
|
item,
|
|
45
44
|
source: source,
|
|
46
|
-
}), icon: jsx(
|
|
45
|
+
}), icon: jsx(Icon, { name: "Refresh", size: "sm" }), isRemovable: true, onRemove: () => source.onRemove(item.id), text: jsx(Highlight, { attribute: "label", hit: item }) }, item.id))) }) }));
|
|
47
46
|
}
|
|
48
47
|
function QuickAccessSection() {
|
|
49
48
|
const { quickAccess: collection } = useAlgoliaSearch();
|
|
@@ -6,7 +6,7 @@ import { useAlgoliaSearch } from '../../../algolia/use-algolia-search.js';
|
|
|
6
6
|
import { Button } from '../../../buttons/button/button.js';
|
|
7
7
|
import { ConnectedProductCard } from '../../../cards/product-card/connected-product-card.js';
|
|
8
8
|
import { CardCarousel } from '../../../carousel/card-carousel/card-carousel.js';
|
|
9
|
-
import {
|
|
9
|
+
import { Icon } from '../../../icon/icon.js';
|
|
10
10
|
import { FormattedMessage } from '../../../intl/formatted-message.js';
|
|
11
11
|
import { useFormattedMessage } from '../../../intl/use-formatted-message.js';
|
|
12
12
|
import { PromoCard } from '../../../promos/promo-card/promo-card.js';
|
|
@@ -34,14 +34,14 @@ function SuggestionsSection() {
|
|
|
34
34
|
}), children: recentSearches.items.slice(0, 3).map(item => (jsx(SearchListItem, { ...autocomplete.getItemProps({
|
|
35
35
|
item,
|
|
36
36
|
source: recentSearches.source,
|
|
37
|
-
}), icon: jsx(
|
|
37
|
+
}), icon: jsx(Icon, { name: "Search", size: "sm" }), isRemovable: true, onRemove: () => {
|
|
38
38
|
recentSearches.source.onRemove(item.id);
|
|
39
39
|
}, text: jsx(Highlight, { attribute: "label", hit: item }) }, item.id))) })), querySuggestions && (jsx(SearchList, { ...autocomplete.getListProps({
|
|
40
40
|
source: querySuggestions.source,
|
|
41
41
|
}), children: querySuggestions.items.slice(0, 3).map(item => (jsx(SearchListItem, { ...autocomplete.getItemProps({
|
|
42
42
|
item,
|
|
43
43
|
source: querySuggestions.source,
|
|
44
|
-
}), icon: jsx(
|
|
44
|
+
}), icon: jsx(Icon, { name: "Search", size: "sm" }), text: jsx(Highlight, { attribute: "query", hit: item }) }, item.objectID))) })), categories && (jsx(SearchList, { ...autocomplete.getListProps({
|
|
45
45
|
source: categories.source,
|
|
46
46
|
}), children: categories.items
|
|
47
47
|
.slice(0, 3)
|
|
@@ -49,7 +49,7 @@ function SuggestionsSection() {
|
|
|
49
49
|
.map(item => (jsx(SearchListItem, { ...autocomplete.getItemProps({
|
|
50
50
|
item,
|
|
51
51
|
source: categories.source,
|
|
52
|
-
}), icon: jsx(
|
|
52
|
+
}), icon: jsx(Icon, { name: "Search", size: "sm" }), text: jsxs("span", { children: [jsx("span", { children: item.listCategories.at(-1) }), jsx("span", { children: item.listCategories.slice(0, -1).join(' > ') })] }) }, item.objectID))) }))] }));
|
|
53
53
|
}
|
|
54
54
|
function ProductHitCard({ autocomplete, hit, index, source, }) {
|
|
55
55
|
// TODO: re-enable addToCart and addToFavorites when authentication problems are solved (or we got rid of the split domains)
|
|
@@ -2,14 +2,13 @@
|
|
|
2
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { IconButton } from '../../buttons/icon-button/icon-button.js';
|
|
4
4
|
import { Link } from '../../buttons/link/link.js';
|
|
5
|
-
import { StrokeCloseboxIcon } from '../../icons/stroke/stroke-closebox-icon.js';
|
|
6
5
|
import { useFormattedMessage } from '../../intl/use-formatted-message.js';
|
|
7
6
|
import { Truncated } from '../../text/truncated/truncated.js';
|
|
8
7
|
import styles from './search-list-item.module.css.js';
|
|
9
8
|
|
|
10
9
|
function SearchListItem({ icon, id, isRemovable = false, onClick, onRemove, text, }) {
|
|
11
10
|
const t = useFormattedMessage();
|
|
12
|
-
return (jsxs("li", { className: styles['search-list-item'], children: [jsxs(Link, { className: styles['content'], id: id, onClick: onClick, children: [icon && icon, text && jsx(Truncated, { className: styles.text, children: text })] }), isRemovable && (jsx(IconButton, { "aria-describedby": id, className: styles['clear-filter'],
|
|
11
|
+
return (jsxs("li", { className: styles['search-list-item'], children: [jsxs(Link, { className: styles['content'], id: id, onClick: onClick, children: [icon && icon, text && jsx(Truncated, { className: styles.text, children: text })] }), isRemovable && (jsx(IconButton, { "aria-describedby": id, className: styles['clear-filter'], icon: "Close", label: t('Remove'), onClick: onRemove, theme: "secondary" }))] }));
|
|
13
12
|
}
|
|
14
13
|
|
|
15
14
|
export { SearchListItem };
|
|
@@ -4,7 +4,6 @@ import { useRef } from 'react';
|
|
|
4
4
|
import { Popover } from 'react-aria-components';
|
|
5
5
|
import { IconButton } from '../../../buttons/icon-button/icon-button.js';
|
|
6
6
|
import { useFormattedMessage } from '../../../intl/use-formatted-message.js';
|
|
7
|
-
import { AccountIcon } from '../../../navigation/account-icon/account-icon.js';
|
|
8
7
|
import { QuickAccessMenu } from '../../../navigation/quick-access-menu/quick-access-menu.js';
|
|
9
8
|
import { useFetchSession } from '../../../shared/api/storefront/hooks/authentication/use-fetch-session.js';
|
|
10
9
|
import { useSignOut } from '../../../shared/api/storefront/hooks/authentication/use-sign-out.js';
|
|
@@ -23,7 +22,7 @@ function ConnectedAccountButton({ className, 'data-test-selector': dataTestSelec
|
|
|
23
22
|
const lastName = data?.lastName ? data.lastName.trim() : undefined;
|
|
24
23
|
const customerName = firstName ? [firstName, lastName].join(' ') : undefined;
|
|
25
24
|
const customerCompany = data?.billTo?.companyName;
|
|
26
|
-
return (jsxs(Fragment, { children: [jsx(IconButton, { ref: triggerRef, className: className, "data-authenticated": data?.isAuthenticated ? true : false, "data-test-selector": dataTestSelector,
|
|
25
|
+
return (jsxs(Fragment, { children: [jsx(IconButton, { ref: triggerRef, badgeLabel: data?.isAuthenticated ? t('Signed in') : t('Signed out'), badgeStatus: data?.isAuthenticated ? 'on' : 'off', className: className, "data-authenticated": data?.isAuthenticated ? true : false, "data-test-selector": dataTestSelector, icon: "UserSolid", isDisabled: isLoadingSession, label: t('My Sonic'), onClick: toggle }), jsx(Popover, { className: styles['popover'], isOpen: isOpen, onOpenChange: state => (state ? open() : close()), placement: "bottom", triggerRef: triggerRef, children: jsx(QuickAccessMenu, { className: styles['quick-access-menu'], customerCompany: customerCompany, customerName: customerName, isAuthenticated: data?.isAuthenticated, isGuest: data?.isGuest, onSignOut: () => signOut(typeof window === 'undefined'
|
|
27
26
|
? undefined
|
|
28
27
|
: { returnUrl: window.location.href }) }) })] }));
|
|
29
28
|
}
|
|
@@ -2,13 +2,12 @@
|
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { IconButton } from '../../../buttons/icon-button/icon-button.js';
|
|
4
4
|
import { useFormattedMessage } from '../../../intl/use-formatted-message.js';
|
|
5
|
-
import { CartIcon } from '../../../navigation/cart-icon/cart-icon.js';
|
|
6
5
|
import { useFetchCurrentCartCount } from '../../../shared/api/storefront/hooks/cart/use-fetch-current-cart-count.js';
|
|
7
6
|
|
|
8
7
|
function ConnectedCartButton({ className, 'data-test-selector': dataTestSelector, href, onClick, }) {
|
|
9
8
|
const count = useFetchCurrentCartCount();
|
|
10
9
|
const t = useFormattedMessage();
|
|
11
|
-
return (jsx(IconButton, { className: className, "data-count": count, "data-test-selector": dataTestSelector, href: href,
|
|
10
|
+
return (jsx(IconButton, { badgeCount: count, className: className, "data-count": count, "data-test-selector": dataTestSelector, href: href, icon: "CartSolid", label: t('Shopping cart'), onClick: onClick }));
|
|
12
11
|
}
|
|
13
12
|
|
|
14
13
|
export { ConnectedCartButton };
|
|
@@ -2,12 +2,10 @@
|
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { IconButton } from '../../../buttons/icon-button/icon-button.js';
|
|
4
4
|
import { useFormattedMessage } from '../../../intl/use-formatted-message.js';
|
|
5
|
-
import { FavoriteIcon } from '../../../navigation/favorite-icon/favorite-icon.js';
|
|
6
5
|
|
|
7
6
|
function ConnectedFavoritesButton({ className, 'data-test-selector': dataTestSelector, href, onClick, }) {
|
|
8
7
|
const t = useFormattedMessage();
|
|
9
|
-
|
|
10
|
-
return (jsx(IconButton, { className: className, "data-test-selector": dataTestSelector, href: href, onClick: onClick, children: jsx(FavoriteIcon, { "aria-label": t('Favorites') }) }));
|
|
8
|
+
return (jsx(IconButton, { className: className, "data-test-selector": dataTestSelector, href: href, icon: "FavoriteSolid", label: t('Favorites'), onClick: onClick }));
|
|
11
9
|
}
|
|
12
10
|
|
|
13
11
|
export { ConnectedFavoritesButton };
|
|
@@ -7,7 +7,7 @@ import styles from './hamburger-button.module.css.js';
|
|
|
7
7
|
|
|
8
8
|
function HamburgerButton({ 'aria-controls': ariaControls, 'data-test-selector': dataTestSelector, isActive, onActiveChange, }) {
|
|
9
9
|
const t = useFormattedMessage();
|
|
10
|
-
return (jsx(IconButton, { "aria-controls": ariaControls, "aria-expanded": isActive,
|
|
10
|
+
return (jsx(IconButton, { "aria-controls": ariaControls, "aria-expanded": isActive, className: clsx(styles['hamburger-button'], isActive && styles['active']), "data-test-selector": dataTestSelector, label: t('Toggle navigation menu'), onClick: () => onActiveChange(!isActive), children: jsxs("div", { className: styles['hamburger'], role: "presentation", children: [jsx("span", {}), jsx("span", {}), jsx("span", {})] }) }));
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
export { HamburgerButton };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var styles = {"hamburger-button":"hamburger-button-module-W6FPI","
|
|
1
|
+
var styles = {"hamburger-button":"hamburger-button-module-W6FPI","hamburger":"hamburger-button-module-yrZxr","active":"hamburger-button-module-UXSUP"};
|
|
2
2
|
|
|
3
3
|
export { styles as default };
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { IconButton } from '../../../buttons/icon-button/icon-button.js';
|
|
4
|
-
import { StrokeSearchIcon } from '../../../icons/stroke/stroke-search-icon.js';
|
|
5
4
|
import { useFormattedMessage } from '../../../intl/use-formatted-message.js';
|
|
6
5
|
|
|
7
6
|
function SearchButton({ 'aria-controls': ariaControls, 'data-test-selector': dataTestSelector, isActive, onActiveChange, }) {
|
|
8
7
|
const t = useFormattedMessage();
|
|
9
|
-
return (jsx(IconButton, { "aria-controls": ariaControls, "aria-expanded": typeof isActive === 'boolean' ? isActive : undefined, "
|
|
8
|
+
return (jsx(IconButton, { "aria-controls": ariaControls, "aria-expanded": typeof isActive === 'boolean' ? isActive : undefined, "data-test-selector": dataTestSelector, icon: "Search", label: t('Search'), onClick: () => onActiveChange(!isActive) }));
|
|
10
9
|
}
|
|
11
10
|
|
|
12
11
|
export { SearchButton };
|
package/dist/header/header.js
CHANGED
|
@@ -29,7 +29,7 @@ function Header({ className, headerNavigationSection, sticky, }) {
|
|
|
29
29
|
const t = useFormattedMessage();
|
|
30
30
|
const isXl = useIsBreakpoint('xl');
|
|
31
31
|
const { ref: headerRef } = useResizeObserver((_, size) => {
|
|
32
|
-
const height =
|
|
32
|
+
const height = size.height;
|
|
33
33
|
document?.documentElement.style.setProperty('--header-height', `${height}px`);
|
|
34
34
|
});
|
|
35
35
|
const { close: closeSearch, groupId: searchGroupId, instanceId: searchInstanceId, isOpen: searchOpen, setIsOpen: setSearchOpen, } = useGlobalSearchDisclosure();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
3
|
import { Link } from '../../buttons/link/link.js';
|
|
4
|
-
import {
|
|
4
|
+
import { Icon } from '../../icon/icon.js';
|
|
5
5
|
import { logger } from '../../logging/logger.js';
|
|
6
6
|
import { isNavigationLinkGroup, isNavigationLink } from '../../shared/api/bff/model/bff.model.js';
|
|
7
7
|
import styles from './navigation-link-list.module.css.js';
|
|
@@ -11,7 +11,7 @@ function NavigationLinkList({ activeLink, 'data-test-selector': dataTestSelector
|
|
|
11
11
|
return (jsx("ul", { className: styles['navigation-link-list'], "data-test-selector": dataTestSelector, children: items.map(item => {
|
|
12
12
|
if (isNavigationLinkGroup(item)) {
|
|
13
13
|
if (item.items.length > 0) {
|
|
14
|
-
return (jsx("li", { className: activeLink === item ? styles['active'] : undefined, children: jsxs(Link, { "aria-controls": `panels-${item.key}`, "aria-expanded": activeLink === item, className: styles.link, "data-test-selector": `navigationLink-${item.key}`, onClick: () => onSubmenuToggle(item), target: item.openInNewTab ? '_blank' : undefined, children: [item.label, jsx(
|
|
14
|
+
return (jsx("li", { className: activeLink === item ? styles['active'] : undefined, children: jsxs(Link, { "aria-controls": `panels-${item.key}`, "aria-expanded": activeLink === item, className: styles.link, "data-test-selector": `navigationLink-${item.key}`, onClick: () => onSubmenuToggle(item), target: item.openInNewTab ? '_blank' : undefined, children: [item.label, jsx(Icon, { className: styles.icon, name: "ArrowDownBold", size: "xxs" })] }) }, item.key));
|
|
15
15
|
}
|
|
16
16
|
else {
|
|
17
17
|
logger.warn(`Link-group has no items: ${JSON.stringify(item, null, 2)}`);
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var styles = {"navigation-link-list":"navigation-link-list-module-Ku9Sa","link":"navigation-link-list-module-kj0Rj","
|
|
1
|
+
var styles = {"navigation-link-list":"navigation-link-list-module-Ku9Sa","link":"navigation-link-list-module-kj0Rj","icon":"navigation-link-list-module-jcogX","active":"navigation-link-list-module-jDgf0"};
|
|
2
2
|
|
|
3
3
|
export { styles as default };
|
|
@@ -5,9 +5,14 @@ import { Link } from '../../buttons/link/link.js';
|
|
|
5
5
|
import { useFormattedMessage } from '../../intl/use-formatted-message.js';
|
|
6
6
|
import styles from './sonic-logo.module.css.js';
|
|
7
7
|
|
|
8
|
-
function
|
|
8
|
+
function SonicLogoSVG() {
|
|
9
9
|
const t = useFormattedMessage();
|
|
10
|
-
return (jsx(
|
|
10
|
+
return (jsx("svg", { "aria-label": t('Sonic Equipment'), className: styles['logo'], viewBox: "0 0 100 24", xmlns: "http://www.w3.org/2000/svg", children: jsxs("g", { fill: "none", fillRule: "evenodd", children: [jsx("path", { className: styles.letters, d: "M11.87 8.65c1.815 0 3.286 1.482 3.286 3.311 0 6.595-5.325 11.962-11.87 11.962C1.471 23.923 0 22.44 0 20.612c0-1.766 1.372-3.21 3.1-3.307l.186-.005c2.848 0 5.179-2.277 5.293-5.12l.005-.219c0-1.829 1.471-3.311 3.286-3.311zm0-8.65c1.815 0 3.286 1.483 3.286 3.311 0 1.766-1.371 3.21-3.1 3.307l-.186.005c-2.849 0-5.178 2.277-5.293 5.118l-.004.22c0 1.829-1.472 3.311-3.287 3.311C1.472 15.272 0 13.79 0 11.961 0 5.366 5.325 0 11.87 0zm6.155 12.016c0 6.596 5.325 11.963 11.87 11.963 6.545 0 11.87-5.367 11.87-11.963 0-6.595-5.325-11.96-11.87-11.96-6.545 0-11.87 5.365-11.87 11.96zm6.572 0c0-2.943 2.376-5.338 5.298-5.338 2.92 0 5.297 2.395 5.297 5.338 0 2.945-2.376 5.34-5.297 5.34-2.922 0-5.298-2.395-5.298-5.34zM82.251 3.56c-4.628 4.663-4.628 12.251 0 16.915 4.628 4.663 12.158 4.663 16.786 0a3.33 3.33 0 0 0 .001-4.683 3.268 3.268 0 0 0-4.501-.138l-.146.138a5.278 5.278 0 0 1-7.494 0c-2.064-2.081-2.064-5.468.001-7.549a5.275 5.275 0 0 1 7.313-.174l.18.173a3.268 3.268 0 0 0 4.647 0 3.33 3.33 0 0 0 0-4.684c-4.63-4.663-12.16-4.662-16.787.002zm-12.868-.13v17.148c0 1.828 1.47 3.311 3.285 3.311 1.816 0 3.287-1.483 3.287-3.311V3.429c0-1.829-1.471-3.312-3.287-3.312-1.815 0-3.285 1.483-3.285 3.312zM48.063.075c-1.814 0-3.285 1.483-3.285 3.311V20.69c0 1.828 1.471 3.311 3.286 3.311s3.286-1.483 3.286-3.311V6.698h2.95c2.92 0 5.297 2.394 5.297 5.338v8.653c0 1.828 1.471 3.311 3.286 3.311s3.286-1.483 3.286-3.311v-8.653C66.17 5.44 60.844.075 54.3.075h-6.235z" }), jsx("path", { className: styles.dot, d: "M35.27 12.017c0 2.991-2.406 5.416-5.375 5.416-2.97 0-5.376-2.425-5.376-5.416 0-2.992 2.407-5.417 5.376-5.417 2.969 0 5.375 2.425 5.375 5.417" })] }) }));
|
|
11
|
+
}
|
|
12
|
+
function SonicLogo({ className, 'data-test-selector': dataTestSelector, href, title, }) {
|
|
13
|
+
if (href)
|
|
14
|
+
return (jsx(Link, { className: clsx(styles['sonic-logo'], className), "data-test-selector": dataTestSelector, href: href, title: title, children: jsx(SonicLogoSVG, {}) }));
|
|
15
|
+
return (jsx("div", { className: clsx(styles['sonic-logo'], className), "data-test-selector": dataTestSelector, children: jsx(SonicLogoSVG, {}) }));
|
|
11
16
|
}
|
|
12
17
|
|
|
13
18
|
export { SonicLogo };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var styles = {"
|
|
1
|
+
var styles = {"sonic-logo":"sonic-logo-module-9Mpdq","logo":"sonic-logo-module-PfC3z","letters":"sonic-logo-module-Pa7pF","dot":"sonic-logo-module-vTCO3"};
|
|
2
2
|
|
|
3
3
|
export { styles as default };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IconName } from '../icons';
|
|
2
|
+
export type IconSize = 'xxs' | 'xs' | 'sm' | 'md' | 'lg';
|
|
3
|
+
export interface IconProps {
|
|
4
|
+
className?: string;
|
|
5
|
+
'data-test-selector'?: string;
|
|
6
|
+
label?: string;
|
|
7
|
+
name: IconName;
|
|
8
|
+
size?: IconSize;
|
|
9
|
+
}
|
|
10
|
+
export declare function Icon({ className, 'data-test-selector': dataTestSelector, label, name, size, }: IconProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import { icons } from '../icons/index.js';
|
|
4
|
+
import styles from './icon.module.css.js';
|
|
5
|
+
|
|
6
|
+
function Icon({ className, 'data-test-selector': dataTestSelector, label, name, size = 'md', }) {
|
|
7
|
+
const Icon = icons[name];
|
|
8
|
+
return (jsx(Icon, { "aria-label": label, className: clsx(styles['icon'], clsx(styles[`size-${size}`], className)), "data-test-selector": dataTestSelector, role: label ? undefined : 'presentation' }));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { Icon };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
function GlyphsChevronsBoldLeftIcon(props) {
|
|
4
|
+
return (jsx("svg", { xmlns: "http://www.w3.org/2000/svg", ...props, fill: "currentColor", height: "12", viewBox: "0 0 12 12", width: "12", children: jsx("path", { d: "M2,5.98800959 L7.02068966,1 C7.34252874,1.17585931 7.7045977,1.4636291 8.10689655,1.86330935 C8.28390805,2.03916867 8.44482759,2.21502798 8.58965517,2.39088729 L8.74027586,2.58273381 C8.804,2.66906475 8.85034483,2.74100719 8.87931034,2.79856115 L8.97586207,2.94244604 L5.91034483,5.98800959 L9,9.05755396 C8.80689655,9.39328537 8.51724138,9.7529976 8.13103448,10.1366906 C7.95402299,10.31255 7.77701149,10.4724221 7.6,10.616307 L7.32482759,10.8321343 L7.18965517,10.9280576 L7.04482759,11 L2,5.98800959 Z", fillRule: "evenodd" }) }));
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export { GlyphsChevronsBoldLeftIcon };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
function GlyphsChevronsSlimUpIcon(props) {
|
|
4
|
+
return (jsx("svg", { xmlns: "http://www.w3.org/2000/svg", ...props, fill: "currentColor", height: "12", viewBox: "0 0 12 12", width: "12", children: jsx("path", { d: "M6,3 L1,7.93354971 C1.08169007,8.12109594 1.19817561,8.30512588 1.34945663,8.48563954 C1.50073764,8.6661532 1.68216803,8.83760669 1.89374779,9 L5.98800959,4.91652188 L9.9960307,9 C10.2121071,8.83350762 10.4031847,8.66205413 10.5692635,8.48563954 C10.7353424,8.30922495 10.8789212,8.12519501 11,7.93354971 L6,3 Z", fillRule: "evenodd" }) }));
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export { GlyphsChevronsSlimUpIcon };
|