@mobielnl/elements 0.4.0 → 0.6.1

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.
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { r as pt, t as Z, i as Re, a as q, n as De, p as mt, b as fn, c as Ve, d as pn, v as mn, e as gn, f as x, g as le, s as vn, h as yn, j as Ie, k as H, l as gt, m as Y, o as bn, q as Tn, u as te, w as ue, x as I, y as ne, z as Vn, A as An, B as vt, C as Ne, D as Sn, E as wn, F as Pn, G as D, H as yt, I as bt, J as Tt, K as je, L as Vt, M as xn, N as Cn, O as Mn, P as ze, Q as Fn, R as On, S as Rn, T as Dn, U as In, V as Nn, W as Kn, X as En, Y as Bn, Z as Ln, _ as kn } from "./index-CJzOpHdk.js";
2
+ import { r as pt, t as Z, i as Re, a as q, n as De, p as mt, b as fn, c as Ve, d as pn, v as mn, e as gn, f as x, g as le, s as vn, h as yn, j as Ie, k as H, l as gt, m as Y, o as bn, q as Tn, u as te, w as ue, x as I, y as ne, z as Vn, A as An, B as vt, C as Ne, D as Sn, E as wn, F as Pn, G as D, H as yt, I as bt, J as Tt, K as je, L as Vt, M as xn, N as Cn, O as Mn, P as ze, Q as Fn, R as On, S as Rn, T as Dn, U as In, V as Nn, W as Kn, X as En, Y as Bn, Z as Ln, _ as kn } from "./index-DAyzaGWL.js";
3
3
  import { Fragment as _n } from "react";
4
4
  var ae = typeof globalThis < "u" && globalThis.process ? globalThis.process : { env: { NODE_ENV: "production" } };
5
5
  function At(t, e) {
package/dist/index.d.ts CHANGED
@@ -1,5 +1,10 @@
1
+ import { Component } from 'react';
2
+ import { ErrorInfo } from 'react';
1
3
  import { JSX } from 'react/jsx-runtime';
4
+ import { JSXElementConstructor } from 'react';
5
+ import { ReactElement } from 'react';
2
6
  import { ReactNode } from 'react';
7
+ import { ReactPortal } from 'react';
3
8
  import { z } from 'zod';
4
9
  import * as z_2 from 'zod';
5
10
 
@@ -55,6 +60,16 @@ declare type CreditInfoClassNames = {
55
60
  descriptionLink?: string;
56
61
  };
57
62
 
63
+ declare type DistinctPropertyOption = {
64
+ hex?: Maybe<Scalars['String']['output']>;
65
+ indexable: Scalars['Boolean']['output'];
66
+ key: Scalars['String']['output'];
67
+ label: Scalars['String']['output'];
68
+ name?: Maybe<Scalars['String']['output']>;
69
+ slug: Scalars['String']['output'];
70
+ value?: Maybe<Scalars['Value']['output']>;
71
+ };
72
+
58
73
  /**
59
74
  * ClassNames for styling the `ElementsRoot` component
60
75
  */
@@ -86,6 +101,57 @@ export declare type ElementsRootProps = {
86
101
  };
87
102
  };
88
103
 
104
+ export declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
105
+ state: ErrorBoundaryState;
106
+ static getDerivedStateFromError(_error: Error): ErrorBoundaryState;
107
+ componentDidCatch(error: Error, _errorInfo: ErrorInfo): void;
108
+ render(): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | ReactPortal | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | JSX.Element | null | undefined;
109
+ }
110
+
111
+ export declare type ErrorBoundaryProps = {
112
+ /** The content to be wrapped by the ErrorBoundary */
113
+ children: ReactNode;
114
+ /** Callback function called when an error is caught */
115
+ onError?: (error: Error) => void;
116
+ /** Custom fallback UI to render when an error occurs */
117
+ fallback?: ReactNode;
118
+ };
119
+
120
+ export declare type ErrorBoundaryState = {
121
+ hasError: boolean;
122
+ };
123
+
124
+ export declare function ErrorComponent({ classNames }: ErrorComponentProps): JSX.Element;
125
+
126
+ export declare type ErrorComponentClassNames = {
127
+ /** Main wrapper container for the error component */
128
+ base?: string;
129
+ /** Alert component class styling slots */
130
+ alert?: {
131
+ /** Alert container */
132
+ base?: string;
133
+ /** Alert title text */
134
+ title?: string;
135
+ /** Alert description text */
136
+ description?: string;
137
+ /** Alert main content wrapper */
138
+ mainWrapper?: string;
139
+ /** Alert close button */
140
+ closeButton?: string;
141
+ /** Alert icon wrapper */
142
+ iconWrapper?: string;
143
+ /** Alert icon */
144
+ alertIcon?: string;
145
+ };
146
+ /** Refresh page button */
147
+ button?: string;
148
+ };
149
+
150
+ export declare type ErrorComponentProps = {
151
+ /** Class slots for styling */
152
+ classNames?: ErrorComponentClassNames;
153
+ };
154
+
89
155
  export declare function FilterChip({ filter, filterOption, onRemove, classNames, }: FilterChipProps): JSX.Element | null;
90
156
 
91
157
  declare type FilterChipClassNames = {
@@ -185,35 +251,6 @@ declare type FilterValue = {
185
251
  value: string | string[];
186
252
  };
187
253
 
188
- /**
189
- * ClassNames for styling the `FooterInfo` component within `PropositionCard`
190
- */
191
- export declare type FooterInfoClassNames = {
192
- /** Wrapper container for the footer info section */
193
- base?: string;
194
- /** tcoPerMonth/average price text
195
- * @example "gem. 10,- /mnd" */
196
- averagePrice?: string;
197
- /** Device discount text
198
- * @example "100,- toestelkorting" */
199
- deviceDiscount?: string;
200
- };
201
-
202
- export declare type FooterInfoProps = {
203
- /** Device discount text
204
- * @example "100,- toestelkorting" */
205
- deviceDiscount?: string;
206
- /** Average total cost per month text
207
- * @example "gem. 10,- /mnd" */
208
- tcoPerMonth?: string;
209
- /** Class slots for styling */
210
- classNames?: FooterInfoClassNames;
211
- /** Whether the PropositionCard is horizontal */
212
- horizontal?: boolean;
213
- /** Whether the footer info is for a proposition with a product */
214
- hasProduct?: boolean;
215
- };
216
-
217
254
  declare type GetPageByPathQuery = {
218
255
  __typename?: 'RootQueryType';
219
256
  page?: {
@@ -261,6 +298,8 @@ declare type ListBoxClassNames = {
261
298
  selectedIcon?: string;
262
299
  };
263
300
 
301
+ declare type Maybe<T> = T | null;
302
+
264
303
  declare type ModalClassNames = {
265
304
  /** The backdrop slot, it is displayed behind the modal */
266
305
  backdrop?: string;
@@ -282,6 +321,59 @@ declare type ModalClassNames = {
282
321
  primaryButton?: string;
283
322
  };
284
323
 
324
+ declare type ModalClassNames_2 = {
325
+ /** The backdrop slot, it is displayed behind the modal */
326
+ backdrop?: string;
327
+ /** The wrapper slot of the modal. It wraps the base and the backdrop slots */
328
+ wrapper?: string;
329
+ /** The main slot of the modal content */
330
+ base?: string;
331
+ /** The header of the modal, it is displayed at the top of the modal */
332
+ header?: string;
333
+ /** The body of the modal, it is displayed in the middle of the modal */
334
+ body?: string;
335
+ /** The footer of the modal, it is displayed at the bottom of the modal */
336
+ footer?: string;
337
+ /** The close button (X) of the modal in top-right corner */
338
+ closeButton?: string;
339
+ };
340
+
341
+ declare type PhoneListContainerClassNames = {
342
+ base?: string;
343
+ wrapper?: string;
344
+ title?: string;
345
+ description?: string;
346
+ selectedIcon?: string;
347
+ item?: string;
348
+ itemWrapper?: string;
349
+ itemContent?: string;
350
+ itemLabel?: string;
351
+ itemDescription?: string;
352
+ emptyContent?: string;
353
+ };
354
+
355
+ export declare function PhoneSelector({ onChange, classNames, disabled, productSlug: initialProductSlug, selectedDistinctProperties: initialSelectedDistinctProperties, }: PhoneSelectorProps): JSX.Element;
356
+
357
+ declare type PhoneSelectorClassNames = {
358
+ base?: string;
359
+ button?: string;
360
+ /** Filter modal class styling slots - see type `ModalClassNames` */
361
+ modal?: ModalClassNames;
362
+ brandTabs?: string;
363
+ phoneList?: PhoneListContainerClassNames;
364
+ variantList?: string;
365
+ confirmButton?: string;
366
+ };
367
+
368
+ declare type PhoneSelectorProps = {
369
+ onChange?: (productSlug: string, distinctProperties: VersionDistinctProperty[]) => void;
370
+ classNames?: PhoneSelectorClassNames;
371
+ disabled?: boolean;
372
+ placeholder?: string;
373
+ productSlug?: string;
374
+ selectedDistinctProperties?: VersionDistinctProperty[];
375
+ };
376
+
285
377
  declare type PopoverContentClassNames = {
286
378
  base?: string;
287
379
  trigger?: string;
@@ -304,6 +396,80 @@ declare type PostcodeCheckLoadingClassNames = {
304
396
  addressText?: string;
305
397
  };
306
398
 
399
+ export declare type PostcodeCheckModalClassNames = {
400
+ /** Modal dialog class styling slots - see type `ModalClassNames` */
401
+ modal?: ModalClassNames_2;
402
+ /** Header section containing icon and title */
403
+ header?: {
404
+ /** Container wrapping the header content */
405
+ container?: string;
406
+ /** Icon wrapper with background */
407
+ iconWrapper?: string;
408
+ /** Home location icon */
409
+ icon?: string;
410
+ /** Main title text */
411
+ title?: string;
412
+ /** Description text below title */
413
+ description?: string;
414
+ };
415
+ /** Form section for address input */
416
+ form?: {
417
+ /** Form element container */
418
+ container?: string;
419
+ /** Address section label */
420
+ addressLabel?: string;
421
+ /** Container for postcode, number, and numberAddon inputs */
422
+ inputsContainer?: string;
423
+ /** Input field styling slots */
424
+ input?: {
425
+ /** Input wrapper styling */
426
+ inputWrapper?: string;
427
+ /** Input element styling */
428
+ input?: string;
429
+ /** Input label styling */
430
+ label?: string;
431
+ };
432
+ /** Error message container */
433
+ error?: {
434
+ /** Error container wrapper */
435
+ container?: string;
436
+ /** Error text styling */
437
+ text?: string;
438
+ };
439
+ };
440
+ /** Provider selection section */
441
+ provider?: {
442
+ /** Provider section label */
443
+ label?: string;
444
+ /** Select component styling */
445
+ select?: {
446
+ /** Select label styling */
447
+ label?: string;
448
+ /** Select trigger button styling */
449
+ trigger?: string;
450
+ /** Provider item container in select */
451
+ itemContainer?: string;
452
+ /** Provider icon styling */
453
+ icon?: string;
454
+ };
455
+ };
456
+ /** Submit button styling */
457
+ submitButton?: string;
458
+ };
459
+
460
+ export declare type PostcodeCheckModalProps = {
461
+ /** Whether the modal is open */
462
+ open: boolean;
463
+ /** Callback function to handle modal open state changes */
464
+ onOpenChange: (open: boolean) => void;
465
+ /** Class slots for styling */
466
+ classNames?: PostcodeCheckModalClassNames;
467
+ /** Callback function to handle profile changes */
468
+ onProfileChange?: (profile: Partial<Profile>) => void;
469
+ /** User profile */
470
+ profile: Profile;
471
+ };
472
+
307
473
  /**
308
474
  * ClassNames for styling the `PricingSection` component within `PropositionCard`
309
475
  */
@@ -324,25 +490,18 @@ export declare type PricingSectionClassNames = {
324
490
  /** Promotion text for monthly fee
325
491
  * @example "12 mnd van 10,- voor:" */
326
492
  promotionText?: string;
493
+ /** Average price container (TCO per month) */
494
+ averagePrice?: string;
327
495
  };
328
496
 
329
- export declare type PricingSectionProps = {
330
- /** Promotion text for monthly fee
331
- * @example "12 mnd van 10,- voor:" */
332
- monthlyFeePromotionText?: string;
333
- /** Monthly fee text
334
- * @example "10,-" */
335
- monthlyFee: string;
336
- /** Product price text (one-time payment - only visible for phone propositions)
337
- * @example "+ 100,- eenmalig" */
338
- productPrice?: string;
497
+ export declare type PricingSectionProps = Pick<PropositionCardProps, 'onInfoClick' | 'productPrice' | 'monthlyFee' | 'tcoPerMonth' | 'monthlyFeePromotionText'> & {
339
498
  /** Class slots for styling */
340
499
  classNames?: PricingSectionClassNames;
341
500
  };
342
501
 
343
- declare type ProductCategory = 'sim-only-proposition' | 'smartphone-proposition' | 'phone-and-subscription' | 'fixed-proposition';
502
+ declare type ProductCategory = 'sim-only-proposition' | 'fixed-proposition' | 'smartphone-proposition' | 'smartphone-proposition-extended';
344
503
 
345
- export declare function ProductResults({ productCategory, initialSelectedFilters, limit, propositionCardLayout, classNames, profile, onProfileChange, }: ProductResultsProps): JSX.Element;
504
+ export declare function ProductResults({ productCategory, initialSelectedFilters, limit, classNames, initialProfile, onProfileChange, onError, }: ProductResultsProps): JSX.Element;
346
505
 
347
506
  /**
348
507
  * ClassNames for styling different parts of the `ProductResults` component
@@ -372,23 +531,25 @@ export declare type ProductResultsClassNames = {
372
531
  propositionCard?: PropositionCardClassNames;
373
532
  /** PostcodeCheck loading card class styling slots (only for fixed propositions) - see type `PostcodeCheckLoadingClassNames` */
374
533
  postcodeCheckLoading?: PostcodeCheckLoadingClassNames;
534
+ /** Postcode check modal class styling slots - see type `PostcodeCheckModalClassNames` */
535
+ postcodeCheckModal?: PostcodeCheckModalClassNames;
375
536
  };
376
537
 
377
538
  export declare type ProductResultsProps = {
378
539
  /** Product type of the results */
379
- productCategory: ProductCategory;
540
+ productCategory: Exclude<ProductCategory, 'smartphone-proposition-extended'>;
380
541
  /** Initial selected filters */
381
542
  initialSelectedFilters?: FilterValue[];
382
543
  /** Limit the number of propositions to display */
383
544
  limit?: number;
384
- /** Layout of the proposition cards */
385
- propositionCardLayout?: 'vertical' | 'horizontal';
386
545
  /** Class slots for styling */
387
546
  classNames?: ProductResultsClassNames;
388
- /** User profile */
389
- profile?: Profile;
547
+ /** Initial user profile */
548
+ initialProfile?: Partial<Profile>;
390
549
  /** Callback function to handle profile changes */
391
550
  onProfileChange?: (profile: Partial<Profile>) => void;
551
+ /** Callback function called when an error occurs */
552
+ onError?: (error: Error) => void;
392
553
  };
393
554
 
394
555
  /**
@@ -401,59 +562,18 @@ export declare type ProductSectionClassNames = {
401
562
  imageWrapper?: string;
402
563
  /** Product image element */
403
564
  image?: string;
404
- /** Product title text
405
- * @example "iPhone 17" */
406
- title?: string;
407
- /** Product subtitle/brand text
408
- * @example "Apple" */
409
- subtitle?: string;
410
- /** Stock status badge
411
- * @example "Op voorraad" */
412
- stockStatus?: string;
413
- /** Average review score text
414
- * @example "9.5" */
415
- reviewScore?: string;
416
- /** Amount of reviews text
417
- * @example "(100)" */
418
- reviewCount?: string;
419
- /** Product specifications list container
420
- * @example "6.3 inch • 256GB opslag • 5 kleuren" */
421
- specifications?: string;
422
- };
423
-
424
- export declare type ProductSectionProps = {
425
- /** Product title text
426
- * @example "iPhone 17" */
427
- title: string;
428
- /** Product subtitle/brand text
429
- * @example "Apple" */
430
- subtitle: string;
431
- /** Product image URL */
432
- imageUrl: string;
433
- /** Product image alt text */
434
- imageAlt: string;
435
- /** Product specifications */
436
- specifications?: {
437
- title: string;
438
- }[];
439
- /** Stock status
440
- * @example "Op voorraad" */
441
- stockStatus?: string;
442
- /** Amount of reviews
443
- * @example 100 */
444
- reviewCount?: number;
445
- /** Average review score
446
- * @example 9.5 */
447
- reviewScore?: number;
448
- /** Class slots for styling */
449
- classNames?: ProductSectionClassNames;
450
- horizontal?: boolean;
565
+ /** Delivery Text Icon " */
566
+ deliveryTextIcon?: string;
567
+ /** Delivery Text
568
+ * @example "Direct leverbaar" */
569
+ deliveryText?: string;
451
570
  };
452
571
 
453
572
  declare type Profile = z.infer<typeof profileSchema>;
454
573
 
455
574
  declare const profileSchema: z_2.ZodObject<{
456
575
  keepCurrentMsisdn: z_2.ZodOptional<z_2.ZodBoolean>;
576
+ currentMsisdn: z_2.ZodOptional<z_2.ZodString>;
457
577
  currentSubscriptionType: z_2.ZodOptional<z_2.ZodEnum<{
458
578
  subscription: "subscription";
459
579
  prepaid: "prepaid";
@@ -480,20 +600,21 @@ declare const profileSchema: z_2.ZodObject<{
480
600
  export declare type PromotionsListClassNames = {
481
601
  /** Wrapper container for the promotions list */
482
602
  base?: string;
483
- /** Individual special/modification promotion item
603
+ /** Individual promotion item
484
604
  * @example "€4,50 korting per maand" */
485
605
  item?: string;
486
- /** Checkmark icon for each special promotion item */
487
- specialPromotionIcon?: string;
488
- /** Checkmark icon for each modification promotion item */
489
- modificationPromotionIcon?: string;
606
+ /** Checkmark icon for each promotion item */
607
+ promotionIcon?: string;
608
+ /** Urgent text chip */
609
+ urgentChip?: string;
490
610
  };
491
611
 
492
612
  export declare type PromotionsListProps = {
493
- /** Special promotions to display */
494
- specialPromotions: string[];
495
- /** Modification promotions to display */
496
- modificationPromotions: string[];
613
+ /** Promotions to display */
614
+ promotions: string[];
615
+ /** Urgent text to display as a chip above promotions
616
+ * @example "Actie nog 6 dagen" */
617
+ urgentText?: string;
497
618
  /** Class slots for styling */
498
619
  classNames?: PromotionsListClassNames;
499
620
  };
@@ -510,15 +631,15 @@ export declare type PropositionCardClassNames = {
510
631
  header?: string;
511
632
  /** Card body wrapper around `specifications`, `urgentChip` and `promotionsList` */
512
633
  body?: string;
513
- /** Card footer wrapper around `deliveryText`, `pricingSection` and `button` */
634
+ /** Card footer wrapper around `pricingSection` and `button` */
514
635
  footer?: string;
515
- /** Image wrapper for main product or proposition image on Horizontal card
636
+ /** Image wrapper for proposition provider image (only on Horizontal card)
516
637
  *
517
- * It handles alignment, placement, and general appearance for the product image */
638
+ * It handles alignment, placement, and general appearance for the proposition provider image */
518
639
  imageWrapper?: string;
519
- /** Main product or proposition image on Horizontal card */
640
+ /** Proposition provider image (only on Horizontal card) */
520
641
  image?: string;
521
- /** Product section (only visible for phone propositions) class styling slots - see type `ProductSectionClassNames` */
642
+ /** Product section (only visible for smartphone propositions) class styling slots - see type `ProductSectionClassNames` */
522
643
  productSection?: ProductSectionClassNames;
523
644
  /** Proposition header class styling slots - see type `PropositionHeaderClassNames` */
524
645
  propositionHeader?: PropositionHeaderClassNames;
@@ -526,8 +647,6 @@ export declare type PropositionCardClassNames = {
526
647
  pricingSection?: PricingSectionClassNames;
527
648
  /** Promotions list class styling slots - see type `PromotionsListClassNames` */
528
649
  promotionsList?: PromotionsListClassNames;
529
- /** Footer info (tcoPerMonth/average price and device discount) class styling slots - see type `FooterInfoClassNames` */
530
- footerInfo?: FooterInfoClassNames;
531
650
  /** Specifications grid (only visible for sim only and fixed propositions)
532
651
  * @example
533
652
  * - "2 jaar"
@@ -538,42 +657,34 @@ export declare type PropositionCardClassNames = {
538
657
  /** Urgent text chip (only visible when promotion is urgent)
539
658
  * @example "Actie nog 6 dagen" */
540
659
  urgentChip?: string;
541
- /** Delivery promise text
542
- * @example "Voor 23:59 besteld, morgen in huis" */
543
- deliveryText?: string;
544
660
  /** Call To Action button
545
661
  * @example "Bekijk" */
546
662
  button?: string;
663
+ /** Card wrapper (container for the label and card) */
664
+ cardWrapper?: string;
665
+ /** Label text styling */
666
+ label?: string;
547
667
  };
548
668
 
549
669
  export declare type PropositionCardProps = {
670
+ /** Click handler on the card */
671
+ onClick: (e: {
672
+ target: Element;
673
+ }) => void;
674
+ /** Click handler to open the details modal */
675
+ onInfoClick: (tab: 'general' | 'conditions' | 'channels' | 'costs') => void;
550
676
  /** Whether the proposition is disabled */
551
677
  disabled?: boolean;
552
- /** Link to the proposition page */
553
- href: string;
554
- /** Product title
555
- * @example "iPhone 17" */
678
+ /** Product title - should include brand + phone name
679
+ * @example "Apple iPhone 17" */
556
680
  productTitle?: string;
557
- /** Product subtitle (brand)
558
- * @example "Apple" */
559
- productSubtitle?: string;
560
681
  /** Product image URL */
561
682
  productImageUrl?: string;
562
683
  /** Product image alt text */
563
684
  productImageAlt?: string;
564
- /** Product specifications */
565
- productSpecifications?: {
566
- title: string;
567
- }[];
568
685
  /** Product stock status
569
686
  * @example "in_stock" */
570
687
  productStockStatus?: string;
571
- /** Product review count
572
- * @example 100 */
573
- productReviewCount?: number;
574
- /** Product review score
575
- * @example 9.5 */
576
- productReviewScore?: number;
577
688
  /** Product price
578
689
  * @example "100,-" */
579
690
  productPrice?: string;
@@ -610,12 +721,12 @@ export declare type PropositionCardProps = {
610
721
  /** Device discount
611
722
  * @example "100,-" */
612
723
  deviceDiscount?: string;
613
- /** Delivery text
614
- * @example "Voor 23:59 besteld, morgen in huis" */
615
- deliveryText?: string | null;
616
724
  /** Urgent text for urgent special promotion
617
725
  * @example "Actie nog 6 dagen" */
618
726
  urgentText?: string;
727
+ /** Label text to display above the card
728
+ * @example "Meest gekozen" */
729
+ label?: string;
619
730
  /** Class slots for styling */
620
731
  classNames?: PropositionCardClassNames;
621
732
  horizontal?: boolean;
@@ -627,9 +738,9 @@ export declare type PropositionCardProps = {
627
738
  export declare type PropositionHeaderClassNames = {
628
739
  /** Wrapper container for the proposition header */
629
740
  base?: string;
630
- /** Image wrapper, it handles alignment, placement, and general appearance for the proposition provider image */
741
+ /** Image wrapper, it handles alignment, placement, and general appearance for the proposition provider image (only on Vertical card) */
631
742
  imageWrapper?: string;
632
- /** Proposition provider image element*/
743
+ /** Proposition provider image element (only on Vertical card) */
633
744
  image?: string;
634
745
  /** Proposition title text
635
746
  * @example "30 GB"
@@ -639,23 +750,35 @@ export declare type PropositionHeaderClassNames = {
639
750
  * @example "Onbp min / sms"
640
751
  * @example "Glasvezel" */
641
752
  subtitle?: string;
753
+ /** Specifications container */
754
+ specifications?: string;
642
755
  };
643
756
 
644
757
  export declare type PropositionHeaderProps = {
758
+ /** Product title (for smartphone propositions) - should include brand + phone name
759
+ * @example "Apple iPhone 17" */
760
+ productTitle?: string;
645
761
  /** Proposition title text
646
762
  * @example "30 GB"
647
763
  * @example "100 Mb/s" */
648
- title: string;
764
+ propositionTitle: string;
649
765
  /** Proposition subtitle text
650
766
  * @example "Onbp min / sms"
651
767
  * @example "Glasvezel" */
652
- subtitle: string;
653
- /** Proposition image URL */
654
- imageUrl: string;
655
- /** Proposition image alt text */
656
- imageAlt: string;
768
+ propositionSubtitle: string;
769
+ /** Proposition provider image URL */
770
+ imageUrl?: string;
771
+ /** Proposition provider image alt text */
772
+ imageAlt?: string;
657
773
  /** Whether the proposition has a product/phone */
658
774
  hasProduct: boolean;
775
+ /** Proposition specifications */
776
+ propositionSpecifications?: {
777
+ slug: string;
778
+ title: string;
779
+ }[];
780
+ /** Click handler to open the details modal */
781
+ onInfoClick?: (tab: 'general' | 'conditions' | 'channels' | 'costs') => void;
659
782
  /** Class slots for styling */
660
783
  classNames?: PropositionHeaderClassNames;
661
784
  horizontal?: boolean;
@@ -741,6 +864,38 @@ declare type ResultsNotFoundClassNames = {
741
864
  };
742
865
  };
743
866
 
867
+ /** All built-in and custom scalars, mapped to their actual values */
868
+ declare type Scalars = {
869
+ ID: {
870
+ input: string;
871
+ output: string;
872
+ };
873
+ String: {
874
+ input: string;
875
+ output: string;
876
+ };
877
+ Boolean: {
878
+ input: boolean;
879
+ output: boolean;
880
+ };
881
+ Int: {
882
+ input: number;
883
+ output: number;
884
+ };
885
+ Float: {
886
+ input: number;
887
+ output: number;
888
+ };
889
+ Json: {
890
+ input: any;
891
+ output: any;
892
+ };
893
+ Value: {
894
+ input: any;
895
+ output: any;
896
+ };
897
+ };
898
+
744
899
  export declare function SelectFilter({ id, options, values, onChange, classNames, }: SelectFilterProps): JSX.Element;
745
900
 
746
901
  /**
@@ -788,6 +943,58 @@ export declare type SelectFilterProps = {
788
943
  classNames?: SelectFilterClassNames;
789
944
  };
790
945
 
946
+ export declare function Selector({ classNames, onClick, disabled, title, description, imageUrl, imageAlt, Icon, avatarName, selected, }: SelectorProps): JSX.Element;
947
+
948
+ /**
949
+ * ClassNames for styling different parts of the `Selector` component
950
+ */
951
+ export declare type SelectorClassNames = {
952
+ /** Title text styling */
953
+ title?: string;
954
+ /** Description text styling */
955
+ description?: string;
956
+ /** Main button wrapper */
957
+ button?: string;
958
+ /** Badge component (visible when not selected) */
959
+ badge?: string;
960
+ /** Avatar component displaying the image or icon */
961
+ avatar?: {
962
+ /** Base wrapper styling for the avatar container */
963
+ base?: string;
964
+ /** Image element styling */
965
+ img?: string;
966
+ /** Name text styling (when displaying initials) */
967
+ name?: string;
968
+ /** Icon wrapper styling */
969
+ icon?: string;
970
+ /** Fallback content styling (when no image is available) */
971
+ fallback?: string;
972
+ };
973
+ };
974
+
975
+ export declare type SelectorProps = {
976
+ /** Class slots for styling */
977
+ classNames?: SelectorClassNames;
978
+ /** Main title text */
979
+ title: string;
980
+ /** Optional description text below the title */
981
+ description?: string;
982
+ /** Whether the selector is in selected state */
983
+ selected?: boolean;
984
+ /** Click handler for the selector */
985
+ onClick: () => void;
986
+ /** Icon component to display as fallback when no image is provided */
987
+ Icon?: React.ElementType;
988
+ /** Name to display as initials in the avatar when no image is available */
989
+ avatarName?: string;
990
+ /** Image URL for the avatar */
991
+ imageUrl?: string | null;
992
+ /** Alt text for the image */
993
+ imageAlt?: string | null;
994
+ /** Whether the selector is disabled */
995
+ disabled?: boolean;
996
+ };
997
+
791
998
  /**
792
999
  * ClassNames for styling different parts of the `RangeFilter`, `MinFilter` and `MaxFilter` component
793
1000
  */
@@ -876,4 +1083,11 @@ declare type SortSelectClassNames = {
876
1083
  endWrapper?: string;
877
1084
  };
878
1085
 
1086
+ declare type VersionDistinctProperty = {
1087
+ __typename?: 'VersionDistinctProperty';
1088
+ key: Scalars['String']['output'];
1089
+ label: Scalars['String']['output'];
1090
+ option: DistinctPropertyOption;
1091
+ };
1092
+
879
1093
  export { }