@primer-io/primer-js 0.7.2 → 0.8.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.
@@ -138,7 +138,8 @@ export type CollapsableComponentProps = {
138
138
  ariaLabel?: string;
139
139
  /** The button variant to use */
140
140
  buttonVariant?: ButtonVariant;
141
-
141
+ /** Internal state to track expanded state */
142
+ isExpanded?: boolean;
142
143
  /** */
143
144
  "onexpanded-changed"?: (e: CustomEvent<CustomEvent>) => void;
144
145
  };
@@ -457,6 +458,10 @@ export type RedirectPaymentComponentProps = {
457
458
  export type ShowOtherPaymentsComponentProps = {
458
459
  /** Consume the vault manager context to interact with vault state */
459
460
  vaultManager?: VaultManagerContextType;
461
+ /** Consume the events context for external control */
462
+ contextEventsController?: EventsContextType;
463
+ /** */
464
+ "onshow-other-payments-toggled"?: (e: CustomEvent<CustomEvent>) => void;
460
465
  };
461
466
 
462
467
  export type VaultManagerComponentProps = {
@@ -480,6 +485,10 @@ export type VaultManagerComponentProps = {
480
485
  vaultItemContext?: VaultItemContextType;
481
486
  /** */
482
487
  headlessUtils?: HeadlessUtilsContextType;
488
+ /** */
489
+ contextEventsController?: EventsContextType;
490
+ /** */
491
+ "onprimer-vault-payment-error"?: (e: CustomEvent<CustomEvent>) => void;
483
492
  };
484
493
 
485
494
  export type CardFormSubmitComponentProps = {
@@ -1053,8 +1062,16 @@ export type CustomElements = {
1053
1062
  /**
1054
1063
  * Component for showing/hiding other payment methods when vault is present
1055
1064
  * Utilizes the collapsable component for smooth transitions
1065
+ * Supports custom toggle buttons via slots and external control via events
1056
1066
  * ---
1057
1067
  *
1068
+ *
1069
+ * ### **Events:**
1070
+ * - **show-other-payments-toggled**
1071
+ *
1072
+ * ### **Methods:**
1073
+ * - **expand(): _void_** - Public API: Expand the accordion programmatically
1074
+ * - **collapse(): _void_** - Public API: Collapse the accordion programmatically
1058
1075
  */
1059
1076
  "primer-show-other-payments": Partial<ShowOtherPaymentsComponentProps & BaseProps & BaseEvents>;
1060
1077
 
@@ -1062,6 +1079,9 @@ export type CustomElements = {
1062
1079
  * VaultManagerComponent - displays and manages saved payment methods
1063
1080
  * ---
1064
1081
  *
1082
+ *
1083
+ * ### **Events:**
1084
+ * - **primer-vault-payment-error**
1065
1085
  */
1066
1086
  "primer-vault-manager": Partial<VaultManagerComponentProps & BaseProps & BaseEvents>;
1067
1087
 
@@ -1245,6 +1245,7 @@ export interface PrimerCheckoutOptions {
1245
1245
  * @default false
1246
1246
  */
1247
1247
  required?: boolean;
1248
+ defaultValue?: string;
1248
1249
  /**
1249
1250
  * Whether the cardholder name field is visible in the card form.
1250
1251
  * When false, the field is hidden and not included in validation.
@@ -1973,6 +1974,13 @@ export interface CardSubmitPayload {
1973
1974
  export interface PrimeAchErrorPayload {
1974
1975
  error: Error;
1975
1976
  }
1977
+ export interface VaultSubmitPayload {
1978
+ source?: string;
1979
+ }
1980
+ export interface ShowOtherPaymentsTogglePayload {
1981
+ action?: "toggle" | "expand" | "collapse";
1982
+ source?: string;
1983
+ }
1976
1984
  export interface PrimerEvents {
1977
1985
  "primer:state-change": CustomEvent<SdkStateContextType>;
1978
1986
  "primer:methods-update": CustomEvent<InitializedPayments>;
@@ -2006,6 +2014,8 @@ export interface PrimerEvents {
2006
2014
  vaultedPayments: InitializedVaultedPayments;
2007
2015
  timestamp: number;
2008
2016
  }>;
2017
+ "primer:vault-submit": CustomEvent<VaultSubmitPayload>;
2018
+ "primer:show-other-payments-toggle": CustomEvent<ShowOtherPaymentsTogglePayload>;
2009
2019
  }
2010
2020
  declare class PrimerEventsController implements ReactiveController {
2011
2021
  host: ReactiveControllerHost & LitElement;
@@ -2061,6 +2071,32 @@ declare class PrimerEventsController implements ReactiveController {
2061
2071
  * @param vaultedPayments - Wrapper containing filtered vaulted payment methods
2062
2072
  */
2063
2073
  dispatchVaultMethodsUpdate(vaultedPayments: InitializedVaultedPayments): void;
2074
+ /**
2075
+ * Dispatch vault submit event.
2076
+ * Called when a vault payment submission is triggered.
2077
+ */
2078
+ dispatchVaultSubmit(source?: string): void;
2079
+ /**
2080
+ * Handle external vault submit events and forward them through the event system.
2081
+ * This method provides a centralized way to process external vault submission events
2082
+ * that come from custom buttons or external triggers.
2083
+ *
2084
+ * @param eventDetails - The event details to forward, including source information
2085
+ */
2086
+ handleExternalVaultSubmit(eventDetails: VaultSubmitPayload): void;
2087
+ /**
2088
+ * Dispatch show other payments toggle event.
2089
+ * Called when the "Show other ways to pay" accordion should be toggled.
2090
+ */
2091
+ dispatchShowOtherPaymentsToggle(action?: "toggle" | "expand" | "collapse", source?: string): void;
2092
+ /**
2093
+ * Handle external show other payments toggle events and forward them through the event system.
2094
+ * This method provides a centralized way to process external toggle events
2095
+ * that come from custom buttons or external triggers.
2096
+ *
2097
+ * @param eventDetails - The event details to forward, including action and source information
2098
+ */
2099
+ handleExternalShowOtherPaymentsToggle(eventDetails: ShowOtherPaymentsTogglePayload): void;
2064
2100
  }
2065
2101
  export type AnalyticsContextType = AnalyticsUtils | null;
2066
2102
  export type EventsContextType = PrimerEventsController | null;
@@ -2563,6 +2599,16 @@ export declare class PrimerCheckoutComponent extends LitElement implements Prime
2563
2599
  * Uses AbortController signal to prevent circular event loops more safely
2564
2600
  */
2565
2601
  private handleExternalCardSubmit;
2602
+ /**
2603
+ * Handle external primer:vault-submit events by forwarding them through the events controller
2604
+ * Uses AbortController signal to prevent circular event loops more safely
2605
+ */
2606
+ private handleExternalVaultSubmit;
2607
+ /**
2608
+ * Handle external primer:show-other-payments-toggle events by forwarding them through the events controller
2609
+ * Uses AbortController signal to prevent circular event loops more safely
2610
+ */
2611
+ private handleExternalShowOtherPaymentsToggle;
2566
2612
  /**
2567
2613
  * Check if the loading state has changed and update the CSS loader visibility accordingly.
2568
2614
  * This method is called after each update cycle to detect when loading is complete.
@@ -3011,7 +3057,7 @@ declare class CollapsableComponent extends LitElement {
3011
3057
  /**
3012
3058
  * Internal state to track expanded state
3013
3059
  */
3014
- private isExpanded;
3060
+ isExpanded: boolean;
3015
3061
  /**
3016
3062
  * Hook into the component lifecycle to set the initial expanded state
3017
3063
  */
@@ -3717,6 +3763,7 @@ export interface VaultManagerEvents {
3717
3763
  vaultPaymentError: CustomEvent<{
3718
3764
  error: unknown;
3719
3765
  }>;
3766
+ vaultSubmit: CustomEvent<void>;
3720
3767
  }
3721
3768
  /**
3722
3769
  * Declare the event map for strict typing of events
@@ -3728,6 +3775,7 @@ export interface VaultManagerEventMap {
3728
3775
  "toggle-edit-mode": VaultManagerEvents["toggleEditMode"];
3729
3776
  "close-error": VaultManagerEvents["closeError"];
3730
3777
  "primer-vault-payment-error": VaultManagerEvents["vaultPaymentError"];
3778
+ "primer:vault-submit": VaultManagerEvents["vaultSubmit"];
3731
3779
  }
3732
3780
  /**
3733
3781
  * VaultManagerComponent - displays and manages saved payment methods
@@ -3740,6 +3788,11 @@ declare class VaultManagerComponent extends LitElement {
3740
3788
  vaultManagerContext: VaultManagerContextType;
3741
3789
  vaultItemContext: VaultItemContextType;
3742
3790
  headlessUtils: HeadlessUtilsContextType;
3791
+ contextEventsController: EventsContextType;
3792
+ /**
3793
+ * State to track if slot has content (triggers re-render)
3794
+ */
3795
+ private hasSlottedSubmit;
3743
3796
  /**
3744
3797
  * Whether we're in edit mode
3745
3798
  */
@@ -3760,6 +3813,14 @@ declare class VaultManagerComponent extends LitElement {
3760
3813
  * Animation duration override
3761
3814
  */
3762
3815
  animationDuration: number;
3816
+ /**
3817
+ * Flag to prevent circular event handling
3818
+ */
3819
+ private _isHandlingContextEvent;
3820
+ /**
3821
+ * Context event listener reference
3822
+ */
3823
+ private _contextVaultSubmitListener;
3763
3824
  /**
3764
3825
  * Asset config for the payment method being deleted
3765
3826
  */
@@ -3768,6 +3829,10 @@ declare class VaultManagerComponent extends LitElement {
3768
3829
  * Get base animation configuration with current settings
3769
3830
  */
3770
3831
  private getAnimationConfig;
3832
+ /**
3833
+ * Handle slot change to update hasSlottedSubmit state
3834
+ */
3835
+ private handleSubmitSlotChange;
3771
3836
  /**
3772
3837
  * Toggle edit mode handler
3773
3838
  */
@@ -3792,10 +3857,47 @@ declare class VaultManagerComponent extends LitElement {
3792
3857
  * Handle closing error message
3793
3858
  */
3794
3859
  private handleCloseError;
3860
+ /**
3861
+ * Determines if a button is a submit button based on its attributes
3862
+ */
3863
+ private isSubmitButton;
3864
+ /**
3865
+ * Handles click events from slotted content.
3866
+ * Supports both native <button> and custom <primer-button> elements.
3867
+ */
3868
+ private handleSlotButtonClick;
3869
+ /**
3870
+ * Handles direct primer:vault-submit events
3871
+ */
3872
+ private handleDirectSubmit;
3873
+ /**
3874
+ * Submits the vault payment
3875
+ */
3876
+ private submitVaultPayment;
3795
3877
  /**
3796
3878
  * Get payment method display name for the given ID
3797
3879
  */
3798
3880
  private getPaymentMethodName;
3881
+ /**
3882
+ * Sets up event listeners for context-forwarded events
3883
+ */
3884
+ private setupContextEventListeners;
3885
+ /**
3886
+ * Cleans up context event listeners
3887
+ */
3888
+ private cleanupContextEventListeners;
3889
+ /**
3890
+ * Handles primer:vault-submit events received from the events context
3891
+ */
3892
+ private handleContextVaultSubmit;
3893
+ /**
3894
+ * Lifecycle method called when component is added to the DOM
3895
+ */
3896
+ connectedCallback(): void;
3897
+ /**
3898
+ * Lifecycle method called when component is removed from the DOM
3899
+ */
3900
+ disconnectedCallback(): void;
3799
3901
  /**
3800
3902
  * Render loading overlay with spinner when isUpdating is true
3801
3903
  */
@@ -4759,6 +4861,7 @@ declare global {
4759
4861
  /**
4760
4862
  * Component for showing/hiding other payment methods when vault is present
4761
4863
  * Utilizes the collapsable component for smooth transitions
4864
+ * Supports custom toggle buttons via slots and external control via events
4762
4865
  */
4763
4866
  declare class ShowOtherPaymentsComponent extends LitElement {
4764
4867
  static styles: import("lit").CSSResult[];
@@ -4766,6 +4869,82 @@ declare class ShowOtherPaymentsComponent extends LitElement {
4766
4869
  * Consume the vault manager context to interact with vault state
4767
4870
  */
4768
4871
  vaultManager: VaultManagerContextType;
4872
+ /**
4873
+ * Consume the events context for external control
4874
+ */
4875
+ contextEventsController: EventsContextType;
4876
+ /**
4877
+ * Reference to the collapsable component
4878
+ */
4879
+ protected collapsableElement?: CollapsableComponent;
4880
+ /**
4881
+ * State to track if slot has content (triggers re-render)
4882
+ */
4883
+ private hasSlottedToggle;
4884
+ /**
4885
+ * State to track expanded state when using slotted toggle button
4886
+ */
4887
+ private isExpanded;
4888
+ /**
4889
+ * Flag to prevent circular event handling
4890
+ */
4891
+ private _isHandlingContextEvent;
4892
+ /**
4893
+ * Context event listener reference
4894
+ */
4895
+ private _contextToggleListener;
4896
+ /**
4897
+ * Handle slot change to update hasSlottedToggle state
4898
+ */
4899
+ private handleToggleSlotChange;
4900
+ /**
4901
+ * Determines if a button is a toggle button based on its attributes
4902
+ */
4903
+ private isToggleButton;
4904
+ /**
4905
+ * Handles click events from slotted toggle buttons
4906
+ */
4907
+ private handleSlotButtonClick;
4908
+ /**
4909
+ * Handles direct primer:show-other-payments-toggle events
4910
+ */
4911
+ private handleDirectToggle;
4912
+ /**
4913
+ * Handles primer:show-other-payments-toggle events received from the events context
4914
+ */
4915
+ private handleContextToggle;
4916
+ /**
4917
+ * Toggle the accordion state
4918
+ */
4919
+ private toggleAccordion;
4920
+ /**
4921
+ * Dispatch expanded state changed event
4922
+ */
4923
+ private dispatchExpandedEvent;
4924
+ /**
4925
+ * Public API: Expand the accordion programmatically
4926
+ */
4927
+ expand(): void;
4928
+ /**
4929
+ * Public API: Collapse the accordion programmatically
4930
+ */
4931
+ collapse(): void;
4932
+ /**
4933
+ * Sets up event listeners for context-forwarded events
4934
+ */
4935
+ private setupContextEventListeners;
4936
+ /**
4937
+ * Cleans up context event listeners
4938
+ */
4939
+ private cleanupContextEventListeners;
4940
+ /**
4941
+ * Lifecycle method called when component is added to the DOM
4942
+ */
4943
+ connectedCallback(): void;
4944
+ /**
4945
+ * Lifecycle method called when component is removed from the DOM
4946
+ */
4947
+ disconnectedCallback(): void;
4769
4948
  render(): typeof nothing | import("lit-html").TemplateResult<1>;
4770
4949
  }
4771
4950
  declare global {