@sonic-equipment/ui 0.0.20 → 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/algolia/algolia-active-filters.d.ts +6 -0
  2. package/dist/algolia/algolia-categories.d.ts +1 -0
  3. package/dist/algolia/algolia-filter-panel.d.ts +4 -1
  4. package/dist/algolia/algolia-provider.d.ts +13 -0
  5. package/dist/algolia/algolia-sort-by.d.ts +1 -1
  6. package/dist/algolia/algolia.stories.d.ts +2 -2
  7. package/dist/buttons/add-to-cart-button/add-to-cart-button.stories.d.ts +1 -0
  8. package/dist/buttons/add-to-cart-button/connected-add-to-cart-button.d.ts +5 -0
  9. package/dist/buttons/icon-button/icon-button.d.ts +2 -1
  10. package/dist/cards/product-card/connected-product-cart.d.ts +6 -0
  11. package/dist/cards/product-card/product-card.stories.d.ts +1 -0
  12. package/dist/collapsables/accordion/accordion-item.d.ts +2 -1
  13. package/dist/collapsables/accordion/accordion.d.ts +2 -1
  14. package/dist/collapsables/accordion/accordion.stories.d.ts +1 -0
  15. package/dist/filters/active-filters/active-filters.d.ts +9 -8
  16. package/dist/filters/active-filters/active-filters.stories.d.ts +2 -2
  17. package/dist/filters/pagination/pagination.d.ts +6 -0
  18. package/dist/filters/pagination/pagination.stories.d.ts +18 -0
  19. package/dist/icons/chevrons/chevron-left-filled-icon.d.ts +2 -0
  20. package/dist/icons/chevrons/chevron-right-filled-icon.d.ts +2 -0
  21. package/dist/index.d.ts +7 -9
  22. package/dist/index.js +342 -80
  23. package/dist/intl/translation-id.d.ts +1 -1
  24. package/dist/product-listing/product-listing.d.ts +1 -7
  25. package/dist/product-listing/product-listing.stories.d.ts +6 -1
  26. package/dist/shared/hooks/{use-device.d.ts → use-breakpoint.d.ts} +1 -1
  27. package/dist/shared/hooks/use-debounce-callback.d.ts +1 -0
  28. package/dist/shared/providers/cart-provider.d.ts +33 -0
  29. package/dist/shared/providers/global-state-provider.d.ts +23 -0
  30. package/dist/shared/types/cart.d.ts +8 -0
  31. package/dist/shared/utils/event-emitter.d.ts +9 -0
  32. package/dist/styles.css +221 -9
  33. package/dist/typography/heading/heading.d.ts +1 -1
  34. package/package.json +4 -3
@@ -1 +1 @@
1
- export type TranslationId = 'Chosen filters' | 'Clear filters' | 'Excl. VAT' | 'Incl. VAT' | 'Show all' | 'Show filters' | 'Show less' | 'Sort' | 'articles' | 'article';
1
+ export type TranslationId = 'Chosen filters' | 'Clear filters' | 'Excl. VAT' | 'Incl. VAT' | 'Show' | 'Show all' | 'Show filters' | 'Show less' | 'Sort' | 'articles' | 'article' | 'of';
@@ -1,4 +1,3 @@
1
- import { ComponentType } from 'react';
2
1
  export interface Filters {
3
2
  color: {
4
3
  options: {
@@ -25,13 +24,8 @@ export type ProductListingProps = {
25
24
  isLoading?: boolean;
26
25
  onFilterChange: (filters: ActiveFilters) => void;
27
26
  onSortChange: (sort: SortKey) => void;
28
- productCard: ComponentType;
29
- products: {
30
- id: string;
31
- title: string;
32
- }[];
33
27
  sort: SortKey;
34
28
  total: number;
35
29
  };
36
- export declare function ProductListing({ activeFilters, filters, isLoading, onFilterChange, onSortChange, productCard: ProductCard, products, }: ProductListingProps): import("react/jsx-runtime").JSX.Element;
30
+ export declare function ProductListing({ isLoading }: ProductListingProps): import("react/jsx-runtime").JSX.Element;
37
31
  export {};
@@ -1,16 +1,21 @@
1
+ import { ComponentProps } from 'react';
1
2
  import { StoryObj } from '@storybook/react';
2
3
  import { ProductListing } from './product-listing';
3
4
  declare const meta: {
4
5
  args: {
5
6
  onFilterChange: import("@vitest/spy").Mock<[filters: import("./product-listing").ActiveFilters], void>;
6
7
  onSortChange: import("@vitest/spy").Mock<[sort: "new" | "popular" | "price_asc" | "price_desc" | "recommended"], void>;
8
+ online: false;
7
9
  };
8
10
  component: typeof ProductListing;
9
11
  tags: string[];
10
12
  title: string;
11
13
  };
12
14
  export default meta;
13
- type Story = StoryObj<typeof ProductListing>;
15
+ type StoryProps = ComponentProps<typeof ProductListing> & {
16
+ online: boolean;
17
+ };
18
+ type Story = StoryObj<StoryProps>;
14
19
  export declare const Default: Story;
15
20
  export declare const Loading: Story;
16
21
  export declare const WithActiveFilters: Story;
@@ -1,4 +1,4 @@
1
- export declare const useDevice: () => {
1
+ export declare const useBreakpoint: () => {
2
2
  isDesktop: boolean;
3
3
  isMobile: boolean;
4
4
  isTablet: boolean;
@@ -0,0 +1 @@
1
+ export declare function useDebouncedCallback<T extends (...args: any[]) => any>(func: T, delay: number): (...args: Parameters<T>) => void;
@@ -0,0 +1,33 @@
1
+ import { Cart, CartLine } from 'shared/types/cart';
2
+ interface Props {
3
+ addToCart: (args: {
4
+ productId: string;
5
+ quantity: number;
6
+ }) => void;
7
+ currentCart: Cart;
8
+ isLoaded: boolean;
9
+ isLoading: boolean;
10
+ loadCurrentCart: VoidFunction;
11
+ removeCartLine: (args: {
12
+ cartLineId: string;
13
+ }) => void;
14
+ updateCartLine: (cartLine: CartLine) => void;
15
+ }
16
+ export declare function CartProvider(props: Props): null;
17
+ export declare function useCart(): Props;
18
+ export declare function useProductCartLine(productId: string): {
19
+ addToCart: (args: {
20
+ productId: string;
21
+ quantity: number;
22
+ }) => void;
23
+ cartLine: CartLine | undefined;
24
+ currentCart: Cart;
25
+ isLoaded: boolean;
26
+ isLoading: boolean;
27
+ loadCurrentCart: VoidFunction;
28
+ removeCartLine: (args: {
29
+ cartLineId: string;
30
+ }) => void;
31
+ updateCartLine: (cartLine: CartLine) => void;
32
+ };
33
+ export {};
@@ -0,0 +1,23 @@
1
+ import { MutableRefObject, ReactElement, ReactNode } from 'react';
2
+ import { EventEmitter } from 'shared/utils/event-emitter';
3
+ declare class State<T> extends EventEmitter<T | undefined> {
4
+ private _state;
5
+ constructor(state?: T);
6
+ get value(): T | undefined;
7
+ set value(newState: T | undefined);
8
+ }
9
+ declare class GlobalState {
10
+ private states;
11
+ constructor(states: MutableRefObject<Record<string | symbol, State<any>>>);
12
+ get<T>(key: string | symbol): State<T>;
13
+ get<T>(key: string | symbol, initialState: T | undefined): State<T>;
14
+ set<T>(key: string | symbol, state: State<T>): void;
15
+ }
16
+ export declare const GlobalStateProviderContext: React.Context<GlobalState>;
17
+ interface GlobalStateProviderProps {
18
+ children: ReactNode;
19
+ }
20
+ export declare function GlobalStateProvider({ children, }: GlobalStateProviderProps): ReactElement | null;
21
+ export declare function useGlobalState<T>(key: string | symbol): [T | undefined, (value: T) => void];
22
+ export declare function useGlobalState<T>(key: string | symbol, initialState: T): [T, (value: T) => void];
23
+ export {};
@@ -0,0 +1,8 @@
1
+ export interface CartLine {
2
+ id: string;
3
+ productId: string;
4
+ qtyOrdered: number;
5
+ }
6
+ export interface Cart {
7
+ cartLines: CartLine[];
8
+ }
@@ -0,0 +1,9 @@
1
+ type EventCallback<T> = (data: T) => void;
2
+ export declare class EventEmitter<T> {
3
+ private listeners;
4
+ constructor();
5
+ addEventListener(event: string, listener: EventCallback<T>): void;
6
+ removeEventListener(event: string, listener: EventCallback<T>): void;
7
+ trigger(event: string, data: T): void;
8
+ }
9
+ export {};
package/dist/styles.css CHANGED
@@ -269,6 +269,7 @@
269
269
  min-height: 40px;
270
270
  padding: 0 var(--space-20);
271
271
  border-radius: var(--border-radius-20);
272
+ font-size: var(--font-size-14);
272
273
  }
273
274
 
274
275
  .button-module-GVTEW.button-module-GKHQc {
@@ -499,6 +500,11 @@
499
500
  cursor: pointer;
500
501
  }
501
502
 
503
+ .icon-button-module-4PDK-[data-disabled] {
504
+ cursor: default;
505
+ opacity: 0.4;
506
+ }
507
+
502
508
  /*********************************************************
503
509
  *
504
510
  * Sizes
@@ -759,6 +765,7 @@
759
765
  aspect-ratio: 1 / 1;
760
766
  margin-inline: auto;
761
767
  place-items: center;
768
+ transition: width ease 0.2s;
762
769
  }
763
770
 
764
771
  .product-card-module-pLaiB .product-card-module-p-zoi img {
@@ -819,6 +826,8 @@
819
826
  --color: var(--color-black);
820
827
  --button-font-size: var(--font-size-16);
821
828
  --seperator-color: transparent;
829
+ --accordion-padding-inline: 0;
830
+ --accordion-padding-block: var(--space-16);
822
831
  }
823
832
 
824
833
  .accordion-module-9WvAH.accordion-module-CaVdG {
@@ -841,8 +850,11 @@
841
850
  --seperator-color: var(--color-white);
842
851
  }
843
852
 
853
+ .accordion-module-6CcEH {
854
+ --accordion-padding-inline: var(--space-16);
855
+ }
856
+
844
857
  .accordion-module-lf9d- {
845
- --padding: var(--space-16);
846
858
  --transition-duration: 0.2s;
847
859
 
848
860
  border-bottom: 1px solid var(--seperator-color);
@@ -856,8 +868,8 @@
856
868
  position: relative;
857
869
  display: block;
858
870
  width: 100%;
859
- padding: var(--padding);
860
- padding-right: calc(var(--padding) * 2);
871
+ padding-right: calc(var(--accordion-padding-inline) * 2);
872
+ padding-left: var(--accordion-padding-inline);
861
873
  border: none;
862
874
  background: none;
863
875
  color: var(--color);
@@ -866,6 +878,7 @@
866
878
  font-size: var(--button-font-size);
867
879
  font-weight: var(--font-weight-bold);
868
880
  line-height: 1;
881
+ padding-block: var(--accordion-padding-block);
869
882
  text-align: left;
870
883
  }
871
884
 
@@ -897,7 +910,7 @@
897
910
  .accordion-module-lf9d- .accordion-module-KZjMo {
898
911
  display: grid;
899
912
  grid-template-rows: 0fr;
900
- padding-inline: var(--padding);
913
+ padding-inline: var(--accordion-padding-inline);
901
914
  transition:
902
915
  grid-template-rows var(--transition-duration) linear,
903
916
  padding-block var(--transition-duration) linear;
@@ -1005,8 +1018,9 @@
1005
1018
  align-items: center;
1006
1019
  color: var(--color-brand-black);
1007
1020
  cursor: pointer;
1021
+ font-size: var(--font-size-14);
1008
1022
  forced-color-adjust: none;
1009
- gap: 4px;
1023
+ gap: 6px;
1010
1024
  line-height: 1;
1011
1025
  }
1012
1026
 
@@ -1130,6 +1144,7 @@
1130
1144
  display: block;
1131
1145
  width: var(--space-12);
1132
1146
  height: var(--space-12);
1147
+ color: var(--color-brand-dark-gray);
1133
1148
  inset-block: 0;
1134
1149
  inset-inline-end: 14px;
1135
1150
  margin-block: auto;
@@ -1157,16 +1172,27 @@
1157
1172
  min-width: fit-content;
1158
1173
  background-color: var(--color-white);
1159
1174
  box-shadow: var(--box-shadow-light);
1175
+ padding-block: var(--space-8);
1160
1176
  }
1161
1177
 
1162
1178
  .select-module-S21ba {
1163
1179
  outline: none;
1164
1180
  }
1165
1181
 
1182
+ .select-module-4Bm2j {
1183
+ padding: var(--space-8) var(--space-24);
1184
+ color: var(--color-brand-dark-gray);
1185
+ cursor: default;
1186
+ line-height: 1;
1187
+ outline: none;
1188
+ word-break: break-word;
1189
+ }
1190
+
1166
1191
  .select-module-LgEJO {
1167
1192
  position: relative;
1168
1193
  padding: var(--space-8) var(--space-24);
1169
1194
  cursor: pointer;
1195
+ line-height: 1;
1170
1196
  outline: none;
1171
1197
  word-break: break-word;
1172
1198
  }
@@ -1334,6 +1360,174 @@
1334
1360
  }
1335
1361
  }
1336
1362
 
1363
+ .heading-module-pMC65 {
1364
+ padding: 0;
1365
+ margin: 0;
1366
+ color: var(--color-brand-black);
1367
+ font-weight: 900;
1368
+ }
1369
+
1370
+ .heading-module-pMC65:where(.heading-module-6spgX) {
1371
+ text-transform: uppercase;
1372
+ }
1373
+
1374
+ .heading-module-pMC65:where(.heading-module-XXMDM) {
1375
+ font-style: italic;
1376
+ }
1377
+
1378
+ .heading-module-pMC65:where(.heading-module-Kn3ZN) {
1379
+ font-size: var(--text-heading-xxl-size);
1380
+ line-height: var(--text-heading-xxl-line-height);
1381
+ }
1382
+
1383
+ .heading-module-pMC65:where(.heading-module--hZs-) {
1384
+ font-size: var(--text-heading-xl-size);
1385
+ line-height: var(--text-heading-xl-line-height);
1386
+ }
1387
+
1388
+ .heading-module-pMC65:where(.heading-module-WrJRY) {
1389
+ font-size: var(--text-heading-l-size);
1390
+ line-height: var(--text-heading-l-line-height);
1391
+ }
1392
+
1393
+ .heading-module-pMC65:where(.heading-module-hTexc) {
1394
+ font-size: var(--text-heading-m-size);
1395
+ font-weight: var(--font-weight-bold);
1396
+ line-height: var(--text-heading-m-line-height);
1397
+ }
1398
+
1399
+ .heading-module-pMC65:where(.heading-module-7W29m) {
1400
+ font-size: var(--text-heading-s-size);
1401
+ font-weight: var(--font-weight-bold);
1402
+ line-height: var(--text-heading-s-line-height);
1403
+ }
1404
+
1405
+ .heading-module-pMC65:where(.heading-module-SgaLB) {
1406
+ font-size: var(--text-heading-xs-size);
1407
+ font-weight: var(--font-weight-bold);
1408
+ line-height: var(--text-heading-xs-line-height);
1409
+ }
1410
+
1411
+ .heading-module-pMC65:where(.heading-module-33en7) {
1412
+ font-size: var(--text-heading-xxs-size);
1413
+ font-weight: var(--font-weight-bold);
1414
+ line-height: var(--text-heading-xxs-line-height);
1415
+ }
1416
+
1417
+ .active-filters-module-1qLjB {
1418
+ --spacing: var(--space-16);
1419
+
1420
+ border-bottom: 1px solid var(--color-brand-medium-gray);
1421
+ margin-top: var(--space-16);
1422
+ color: var(--color-brand-black);
1423
+ }
1424
+
1425
+ .active-filters-module-1qLjB .active-filters-module-UKKDu {
1426
+ margin-bottom: var(--spacing);
1427
+ }
1428
+
1429
+ .active-filters-module-1qLjB .active-filters-module-UKKDu .active-filters-module-h29rI {
1430
+ margin: 0;
1431
+ font-size: var(--font-size-16);
1432
+ line-height: 1;
1433
+ }
1434
+
1435
+ .active-filters-module-1qLjB .active-filters-module-UKKDu,
1436
+ .active-filters-module-1qLjB .active-filters-module-Rrmhy {
1437
+ display: flex;
1438
+ align-items: center;
1439
+ justify-content: space-between;
1440
+ }
1441
+
1442
+ .active-filters-module-1qLjB .active-filters-module-u9TTE {
1443
+ display: grid;
1444
+ margin-bottom: var(--spacing);
1445
+ gap: var(--spacing);
1446
+ }
1447
+
1448
+ .active-filters-module-1qLjB .active-filters-module-u9TTE .active-filters-module-CIuPU {
1449
+ font-weight: var(--font-weight-bold);
1450
+ }
1451
+
1452
+ .filter-panel-module-8oxI1 {
1453
+ --padding: var(--space-16);
1454
+
1455
+ position: relative;
1456
+ height: 100%;
1457
+ }
1458
+
1459
+ .filter-panel-module-8oxI1,
1460
+ .filter-panel-module-8oxI1 * {
1461
+ box-sizing: border-box;
1462
+ }
1463
+
1464
+ .filter-panel-module-8oxI1 .filter-panel-module-w0hhZ {
1465
+ overflow: auto;
1466
+ width: 100%;
1467
+ height: 100%;
1468
+ padding-bottom: 76px;
1469
+ padding-inline: var(--padding);
1470
+ }
1471
+
1472
+ .filter-panel-module-8oxI1 .filter-panel-module-AHlq3 {
1473
+ padding-bottom: 14px;
1474
+ border-bottom: 1px solid var(--color-brand-medium-gray);
1475
+ }
1476
+
1477
+ .filter-panel-module-8oxI1 .filter-panel-module-AHlq3 .filter-panel-module-TMp3J {
1478
+ display: inline-block;
1479
+ color: var(--color-black);
1480
+ font-size: var(--font-size-14);
1481
+ line-height: 2.25;
1482
+ text-decoration: none;
1483
+ }
1484
+
1485
+ .filter-panel-module-8oxI1 .filter-panel-module-AHlq3 .filter-panel-module-TMp3J .filter-panel-module-ykW1a {
1486
+ color: var(--color-brand-medium-gray);
1487
+ }
1488
+
1489
+ .filter-panel-module-8oxI1 .filter-panel-module-AHlq3 .filter-panel-module-xvhRz {
1490
+ display: grid;
1491
+ gap: var(--space-8);
1492
+ }
1493
+
1494
+ .filter-panel-module-8oxI1 .filter-panel-module-AHlq3 .filter-panel-module-hJVR0 {
1495
+ margin-top: 0;
1496
+ margin-bottom: var(--space-8);
1497
+ font-size: var(--font-size-16);
1498
+ font-weight: var(--font-weight-bold);
1499
+ }
1500
+
1501
+ .filter-panel-module-8oxI1 .filter-panel-module-hMmIb {
1502
+ position: absolute;
1503
+ bottom: var(--padding);
1504
+ display: grid;
1505
+ inset-inline: 0;
1506
+ padding-inline: var(--padding);
1507
+ }
1508
+
1509
+ @media (width >= 1440px) {
1510
+ .filter-panel-module-8oxI1 .filter-panel-module-w0hhZ {
1511
+ overflow: hidden;
1512
+ }
1513
+
1514
+ .filter-panel-module-8oxI1 .filter-panel-module-hMmIb {
1515
+ display: none;
1516
+ }
1517
+ }
1518
+
1519
+ .pagination-module-k4OgY,
1520
+ .pagination-module-oq89A {
1521
+ display: flex;
1522
+ align-items: center;
1523
+ justify-content: center;
1524
+ gap: var(--space-24);
1525
+ }
1526
+
1527
+ .pagination-module-k4OgY .pagination-module-oq89A, .pagination-module-oq89A .pagination-module-oq89A {
1528
+ gap: var(--space-8);
1529
+ }
1530
+
1337
1531
  .sidebar-module-fSa9Q {
1338
1532
  --transition-duration: 0.3s;
1339
1533
  --transition-timing-function: ease-in-out;
@@ -1346,8 +1540,8 @@
1346
1540
  max-width: 100vw;
1347
1541
  height: 100%;
1348
1542
  box-sizing: border-box;
1349
- padding: 46px 16px;
1350
1543
  background: var(--color-white);
1544
+ padding-block: 46px;
1351
1545
  transform: translateX(-100%);
1352
1546
  transition: transform var(--transition-duration)
1353
1547
  var(--transition-timing-function);
@@ -1355,6 +1549,7 @@
1355
1549
 
1356
1550
  .sidebar-module-fSa9Q .sidebar-module-2puGC {
1357
1551
  position: absolute;
1552
+ z-index: calc(var(--sidebar-layer) + 2);
1358
1553
  top: 36px;
1359
1554
  right: 8px;
1360
1555
  }
@@ -1380,6 +1575,7 @@
1380
1575
  position: static;
1381
1576
  z-index: initial;
1382
1577
  overflow: hidden;
1578
+ width: 324px;
1383
1579
  padding: 0;
1384
1580
  transform: translateX(0);
1385
1581
  transition: width var(--transition-duration)
@@ -1397,16 +1593,32 @@
1397
1593
  }
1398
1594
  }
1399
1595
 
1400
- .product-listing-module-EmEFw .product-listing-module-rFNcR {
1596
+ .product-listing-module-EmEFw .product-listing-module-JEjsa {
1597
+ margin-bottom: 44px;
1598
+ }
1599
+ .product-listing-module-EmEFw .product-listing-module-rFNcR {
1401
1600
  display: grid;
1402
1601
  align-items: center;
1403
1602
  margin-bottom: var(--space-24);
1404
1603
  grid-template-columns: auto 1fr auto;
1405
1604
  }
1406
-
1407
- .product-listing-module-EmEFw .product-listing-module-rFNcR .product-listing-module-1seez {
1605
+ .product-listing-module-EmEFw .product-listing-module-rFNcR .product-listing-module-1seez {
1408
1606
  margin: auto;
1409
1607
  }
1410
1608
  .product-listing-module-EmEFw .product-listing-module-hZuKD {
1609
+ display: grid;
1610
+ grid-template-columns: 1fr;
1611
+ }
1612
+ .product-listing-module-EmEFw .product-listing-module-RRbLO {
1411
1613
  display: flex;
1614
+ flex-direction: column;
1615
+ }
1616
+ .product-listing-module-EmEFw .product-listing-module-kkOfB {
1617
+ margin-top: var(--space-24);
1618
+ grid-column: span 2;
1619
+ }
1620
+ @media (width >= 1440px) {
1621
+ .product-listing-module-EmEFw .product-listing-module-hZuKD {
1622
+ grid-template-columns: auto 1fr;
1623
+ }
1412
1624
  }
@@ -7,7 +7,7 @@ interface HeadingProps {
7
7
  children: React.ReactNode;
8
8
  className?: string;
9
9
  italic?: boolean;
10
- size: Size;
10
+ size?: Size;
11
11
  tag?: Tag;
12
12
  uppercase?: boolean;
13
13
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sonic-equipment/ui",
3
- "version": "0.0.20",
3
+ "version": "0.0.21",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "engines": {
@@ -24,8 +24,8 @@
24
24
  "check-updates": "npx npm-check-updates",
25
25
  "clean": "rimraf node_modules dist",
26
26
  "dev": "storybook dev -p 6006",
27
- "lint": "eslint . --ext ts,tsx,cjs,js,mdx --report-unused-disable-directives --max-warnings 0 --cache --cache-location node_modules/.cache/.eslintcache",
28
- "lint:fix": "eslint . --fix --ext ts,tsx,cjs,js,mdx --report-unused-disable-directives --max-warnings 0 --cache --cache-location node_modules/.cache/.eslintcache",
27
+ "lint": "eslint . --ext ts,tsx,cjs,js,mdx --report-unused-disable-directives --cache --cache-location node_modules/.cache/.eslintcache",
28
+ "lint:fix": "eslint . --fix --ext ts,tsx,cjs,js,mdx --report-unused-disable-directives --cache --cache-location node_modules/.cache/.eslintcache",
29
29
  "prepare": "husky",
30
30
  "start": "http-server ./storybook-static",
31
31
  "stylelint": "stylelint --config .stylelintrc.cjs \"src/**/*.css\"",
@@ -81,6 +81,7 @@
81
81
  "eslint-plugin-unused-imports": "^3.2.0",
82
82
  "http-server": "^14.1.1",
83
83
  "husky": "^9.0.11",
84
+ "instantsearch.js": "^4.69.0",
84
85
  "postcss": "^8.4.38",
85
86
  "postcss-custom-media": "^10.0.6",
86
87
  "postcss-import": "^16.1.0",