@dotted-labs/ngx-supabase-stripe 0.1.4
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/LICENSE +21 -0
- package/README.md +19 -0
- package/database.types.d.ts +368 -0
- package/fesm2022/dotted-labs-ngx-supabase-stripe.mjs +1624 -0
- package/fesm2022/dotted-labs-ngx-supabase-stripe.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/customer/payment-intents/payment-intents-list/payment-intents-item/payment-intent-item.component.d.ts +11 -0
- package/lib/components/customer/payment-intents/payment-intents-list/payment-intents-item-skeleton/payment-intent-item-skeleton.component.d.ts +5 -0
- package/lib/components/customer/payment-intents/payment-intents-list/payment-intents-list.component.d.ts +13 -0
- package/lib/components/customer/payment-intents/payment-intents-table/payment-intents-table.component.d.ts +36 -0
- package/lib/components/customer/subscriptions/subscription-card/subscription-card-skeleton/subscription-card-skeleton.component.d.ts +5 -0
- package/lib/components/customer/subscriptions/subscription-card/subscription-card.component.d.ts +19 -0
- package/lib/components/customer/subscriptions/subscriptions-list/subscription-item/subscription-item.component.d.ts +57 -0
- package/lib/components/customer/subscriptions/subscriptions-list/subscription-item-skeleton/subscription-item-skeleton.component.d.ts +5 -0
- package/lib/components/customer/subscriptions/subscriptions-list/subscriptions-list.component.d.ts +12 -0
- package/lib/components/customer/subscriptions/subscriptions.component.d.ts +70 -0
- package/lib/components/embedded-checkout/embedded-checkout.component.d.ts +91 -0
- package/lib/components/embedded-checkout/return-page/return-page.component.d.ts +44 -0
- package/lib/components/embedded-skeleton/embedded-skeleton.component.d.ts +5 -0
- package/lib/components/embedded-subscription/embedded-subscription.component.d.ts +88 -0
- package/lib/components/embedded-subscription/return-page/subscription-return-page.component.d.ts +41 -0
- package/lib/components/product-list/product-item/product-item.component.d.ts +12 -0
- package/lib/components/product-list/product-item-skeleton/product-item-skeleton.component.d.ts +5 -0
- package/lib/components/product-list/product-list.component.d.ts +33 -0
- package/lib/config/ngx-supabase-stripe.config.d.ts +13 -0
- package/lib/config/stripe.config.d.ts +17 -0
- package/lib/config/supabase.config.d.ts +21 -0
- package/lib/models/database.model.d.ts +20 -0
- package/lib/pages/customer/customer.component.d.ts +59 -0
- package/lib/services/stripe-client.service.d.ts +92 -0
- package/lib/services/supabase-client.service.d.ts +449 -0
- package/lib/services/utils.service.d.ts +8 -0
- package/lib/store/checkout.store.d.ts +34 -0
- package/lib/store/customer.store.d.ts +76 -0
- package/lib/store/portal-account.store.d.ts +24 -0
- package/lib/store/products.store.d.ts +33 -0
- package/lib/store/subscriptions.store.d.ts +63 -0
- package/package.json +44 -0
- package/public-api.d.ts +22 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dotted-labs-ngx-supabase-stripe.mjs","sources":["../../../projects/ngx-supabase-stripe/src/lib/config/stripe.config.ts","../../../projects/ngx-supabase-stripe/src/lib/config/supabase.config.ts","../../../projects/ngx-supabase-stripe/src/lib/config/ngx-supabase-stripe.config.ts","../../../projects/ngx-supabase-stripe/src/lib/services/supabase-client.service.ts","../../../projects/ngx-supabase-stripe/src/lib/services/stripe-client.service.ts","../../../projects/ngx-supabase-stripe/src/lib/store/products.store.ts","../../../projects/ngx-supabase-stripe/src/lib/store/subscriptions.store.ts","../../../projects/ngx-supabase-stripe/src/lib/store/customer.store.ts","../../../projects/ngx-supabase-stripe/src/lib/store/checkout.store.ts","../../../projects/ngx-supabase-stripe/src/lib/components/embedded-skeleton/embedded-skeleton.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/embedded-skeleton/embedded-skeleton.component.html","../../../projects/ngx-supabase-stripe/src/lib/components/embedded-checkout/embedded-checkout.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/embedded-checkout/embedded-checkout.component.html","../../../projects/ngx-supabase-stripe/src/lib/components/embedded-checkout/return-page/return-page.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/embedded-checkout/return-page/return-page.component.html","../../../projects/ngx-supabase-stripe/src/lib/components/product-list/product-item-skeleton/product-item-skeleton.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/product-list/product-item-skeleton/product-item-skeleton.component.html","../../../projects/ngx-supabase-stripe/src/lib/services/utils.service.ts","../../../projects/ngx-supabase-stripe/src/lib/components/product-list/product-item/product-item.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/product-list/product-item/product-item.component.html","../../../projects/ngx-supabase-stripe/src/lib/components/product-list/product-list.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/product-list/product-list.component.html","../../../projects/ngx-supabase-stripe/src/lib/components/embedded-subscription/embedded-subscription.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/embedded-subscription/embedded-subscription.component.html","../../../projects/ngx-supabase-stripe/src/lib/components/embedded-subscription/return-page/subscription-return-page.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/embedded-subscription/return-page/subscription-return-page.component.html","../../../projects/ngx-supabase-stripe/src/lib/components/customer/subscriptions/subscriptions-list/subscription-item-skeleton/subscription-item-skeleton.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/customer/subscriptions/subscriptions-list/subscription-item-skeleton/subscription-item-skeleton.component.html","../../../projects/ngx-supabase-stripe/src/lib/store/portal-account.store.ts","../../../projects/ngx-supabase-stripe/src/lib/components/customer/subscriptions/subscriptions-list/subscription-item/subscription-item.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/customer/subscriptions/subscriptions-list/subscription-item/subscription-item.component.html","../../../projects/ngx-supabase-stripe/src/lib/components/customer/subscriptions/subscriptions-list/subscriptions-list.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/customer/subscriptions/subscriptions-list/subscriptions-list.component.html","../../../projects/ngx-supabase-stripe/src/lib/components/customer/subscriptions/subscription-card/subscription-card-skeleton/subscription-card-skeleton.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/customer/subscriptions/subscription-card/subscription-card-skeleton/subscription-card-skeleton.component.html","../../../projects/ngx-supabase-stripe/src/lib/components/customer/subscriptions/subscription-card/subscription-card.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/customer/subscriptions/subscription-card/subscription-card.component.html","../../../projects/ngx-supabase-stripe/src/lib/components/customer/payment-intents/payment-intents-list/payment-intents-item-skeleton/payment-intent-item-skeleton.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/customer/payment-intents/payment-intents-list/payment-intents-item-skeleton/payment-intent-item-skeleton.component.html","../../../projects/ngx-supabase-stripe/src/lib/components/customer/payment-intents/payment-intents-list/payment-intents-item/payment-intent-item.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/customer/payment-intents/payment-intents-list/payment-intents-item/payment-intent-item.component.html","../../../projects/ngx-supabase-stripe/src/lib/components/customer/payment-intents/payment-intents-list/payment-intents-list.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/customer/payment-intents/payment-intents-list/payment-intents-list.component.html","../../../projects/ngx-supabase-stripe/src/lib/components/customer/payment-intents/payment-intents-table/payment-intents-table.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/customer/payment-intents/payment-intents-table/payment-intents-table.component.html","../../../projects/ngx-supabase-stripe/src/lib/components/customer/subscriptions/subscriptions.component.ts","../../../projects/ngx-supabase-stripe/src/lib/components/customer/subscriptions/subscriptions.component.html","../../../projects/ngx-supabase-stripe/src/lib/pages/customer/customer.component.ts","../../../projects/ngx-supabase-stripe/src/lib/pages/customer/customer.component.html","../../../projects/ngx-supabase-stripe/src/database.types.ts","../../../projects/ngx-supabase-stripe/src/public-api.ts","../../../projects/ngx-supabase-stripe/src/dotted-labs-ngx-supabase-stripe.ts"],"sourcesContent":["import { InjectionToken, Provider } from '@angular/core';\n\n/**\n * Stripe configuration interface\n */\nexport interface StripeConfig {\n /**\n * Stripe client secret\n */\n publishableKey: string;\n}\n\nexport const STRIPE_CONFIG = new InjectionToken<StripeConfig>('STRIPE_CONFIG');\n\n/**\n * Provides the Stripe configuration\n * @param config The Stripe configuration\n * @returns An array of providers\n */\nexport function provideStripeConfig(config: StripeConfig): Provider[] {\n return [\n {\n provide: STRIPE_CONFIG,\n useValue: config\n }\n ];\n}","import { InjectionToken, Provider } from '@angular/core';\n\n/**\n * Supabase configuration interface\n */\nexport interface SupabaseConfig {\n /**\n * Supabase project URL\n */\n supabaseUrl: string;\n\n /**\n * Supabase API key\n */\n supabaseKey: string;\n}\n\nexport const SUPABASE_CONFIG = new InjectionToken<SupabaseConfig>('SUPABASE_CONFIG');\n\n/**\n * Provides the Supabase configuration\n * @param config The Supabase configuration\n * @returns An array of providers\n */\nexport function provideSupabaseConfig(config: SupabaseConfig): Provider[] {\n return [\n {\n provide: SUPABASE_CONFIG,\n useValue: config\n }\n ];\n}\n\n","import { EnvironmentProviders, Provider } from '@angular/core';\nimport { STRIPE_CONFIG, StripeConfig } from './stripe.config';\nimport { SUPABASE_CONFIG, SupabaseConfig } from './supabase.config';\n\nexport interface NgxSupabaseStripeConfig {\n supabaseConfig: SupabaseConfig;\n stripeConfig: StripeConfig;\n}\n\n/**\n * Provides the NgxSupabaseStripeConfig object\n * @param config The NgxSupabaseStripeConfig object\n * @returns The NgxSupabaseStripeConfig object\n */\nexport function provideNgxSupabaseStripeConfig(\n config: NgxSupabaseStripeConfig\n): (Provider | EnvironmentProviders)[] {\n const providers: (Provider | EnvironmentProviders)[] = [\n {\n provide: SUPABASE_CONFIG,\n useValue: config.supabaseConfig\n },\n {\n provide: STRIPE_CONFIG,\n useValue: config.stripeConfig\n }\n ];\n\n return providers;\n}\n\n","import { inject, Injectable } from '@angular/core';\nimport { createClient, SupabaseClient } from '@supabase/supabase-js';\nimport { Database } from '../../database.types';\nimport { SUPABASE_CONFIG } from '../config/supabase.config';\nimport { StripeCheckoutSession, StripePaymentIntent, StripeProduct, StripeTables, StripeUpdateType } from '../models/database.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SupabaseClientService {\n private readonly config = inject(SUPABASE_CONFIG);\n private readonly client: SupabaseClient<Database>;\n\n constructor() {\n this.client = createClient<Database>(\n this.config.supabaseUrl,\n this.config.supabaseKey,\n );\n\n console.log('🚀 [SupabaseClientService]: this.client', this.client);\n } \n\n /**\n * Get the Supabase client instance\n */\n public getClient(): SupabaseClient<Database> {\n return this.client;\n }\n\n /**\n * Select checkout sessions\n * @param query Optional query parameters\n */\n public async selectCheckoutSessions(\n query?: {\n columns?: string;\n eq?: Partial<Record<keyof StripeCheckoutSession, unknown>>;\n order?: { column: keyof StripeCheckoutSession | string; ascending?: boolean };\n limit?: number;\n }\n ): Promise<{ data: StripeCheckoutSession[] | null; error: Error | null }> {\n return this.select<StripeCheckoutSession>('checkout_sessions', query);\n }\n\n /**\n * Select payment intents\n * @param query Optional query parameters\n */\n public async selectPaymentIntents(\n query?: {\n columns?: string;\n eq?: Partial<Record<keyof StripePaymentIntent, unknown>>;\n order?: { column: keyof StripePaymentIntent | string; ascending?: boolean };\n limit?: number;\n }\n ): Promise<{ data: StripePaymentIntent[] | null; error: Error | null }> {\n return this.select<StripePaymentIntent>('payment_intents', query);\n }\n\n /**\n * STRIPE SUBSCRIPTIONS\n */\n\n /**\n * Get all Stripe subscriptions\n */\n public getStripeSubscriptions() {\n return this.client\n .schema('public')\n .rpc('get_stripe_subscriptions')\n .select('*');\n }\n\n /**\n * Select a Stripe subscription\n * @param subscriptionId The subscription ID\n */\n public selectStripeSubscription(subscriptionId: string) {\n return this.client\n .schema('public')\n .rpc('get_stripe_subscription', { subscription_id: subscriptionId })\n .select('*');\n }\n\n /**\n * STRIPE PRICES\n */\n\n /**\n * Select Stripe prices\n * @param query Optional query parameters\n */\n public async selectStripePrices() {\n return this.client\n .schema('public')\n .rpc('get_stripe_prices')\n .select('*');\n }\n\n /**\n * STRIPE PRODUCTS\n */\n\n /**\n * Select Stripe products\n * @param query Optional query parameters\n */\n public async selectStripeProducts() {\n return this.client\n .schema('public')\n .rpc('get_stripe_products')\n .select('*');\n }\n\n /**\n * Select a Stripe product\n * @param productId The product ID\n */\n public async selectStripeProduct(productId: string) {\n return this.client\n .schema('public')\n .rpc('get_stripe_product', { product_id: productId })\n .select('*');\n }\n\n /**\n * Update a product\n * @param id The product ID\n * @param data The product data to update\n */\n public async updateProduct(\n id: string,\n data: StripeUpdateType<'products'>\n ): Promise<{ data: StripeProduct | null; error: Error | null }> {\n return this.update<StripeProduct>(\n 'products',\n data,\n { id }\n );\n }\n\n /**\n * Delete a product\n * @param id The product ID\n */\n public async deleteProduct(\n id: string\n ): Promise<{ data: StripeProduct | null; error: Error | null }> {\n return this.delete<StripeProduct>('products', { id });\n }\n\n /**\n * CUSTOMER FUNCTIONS\n */\n\n /**\n * Get customer by email\n * @param email The customer email\n */\n public async getCustomerByEmail(email: string) {\n return this.client.schema('public').rpc('get_stripe_customer', { customer_email: email });\n }\n\n /**\n * Get customer payment intents\n * @param customerId The customer ID\n */\n public async getCustomerPaymentIntents(customerId: string) {\n return this.client\n .schema('public')\n .rpc('get_stripe_customer_payment_intents', { customer_id: customerId })\n .select('*');\n }\n\n /**\n * Get customer subscriptions\n * @param customerId The customer ID\n */\n public async getCustomerSubscriptions(customerId: string) {\n return this.client\n .schema('public')\n .rpc('get_stripe_customer_subscriptions', { customer_id: customerId })\n .select('*');\n }\n\n\n /**\n * CLIENT GENERIC FUNCTIONS\n */\n\n /**\n * Select data from a table\n * @param table The table name\n * @param query Optional query parameters\n */\n public async select<T>(\n table: StripeTables,\n query?: {\n columns?: string;\n eq?: Record<string, any>;\n order?: { column: string; ascending?: boolean };\n limit?: number;\n }\n ): Promise<{ data: T[] | null; error: Error | null }> {\n try {\n let queryBuilder = this.client\n .schema('stripe')\n .from(table)\n .select(query?.columns ?? '*');\n\n if (query?.eq) {\n Object.entries(query.eq).forEach(([key, value]) => {\n queryBuilder = queryBuilder.eq(key, value);\n });\n }\n\n if (query?.order) {\n queryBuilder = queryBuilder.order(\n query.order.column,\n { ascending: query.order.ascending ?? true }\n );\n }\n\n if (query?.limit) {\n queryBuilder = queryBuilder.limit(query.limit);\n }\n\n const { data, error } = await queryBuilder;\n\n if (error) {\n throw error;\n }\n\n return { data: data as T[], error: null };\n } catch (error) {\n return { data: null, error: error as Error };\n }\n }\n\n /**\n * Insert data into a table\n * @param table The table name\n * @param data The data to insert\n */\n public async insert<T>(\n table: StripeTables,\n data: Partial<T>\n ): Promise<{ data: T | null; error: Error | null }> {\n try {\n const { data: result, error } = await (this.client\n .schema('stripe')\n .from(table)\n .insert(data)\n .select()\n .single());\n\n if (error) {\n throw error;\n }\n\n return { data: result as T, error: null };\n } catch (error) {\n return { data: null, error: error as Error };\n }\n }\n\n /**\n * Update data in a table\n * @param table The table name\n * @param data The data to update\n * @param eq The equality conditions\n */\n public async update<T>(\n table: StripeTables,\n data: Partial<T>,\n eq: Record<string, any>\n ): Promise<{ data: T | null; error: Error | null }> {\n try {\n let queryBuilder = this.client\n .schema('stripe')\n .from(table)\n .update(data);\n\n Object.entries(eq).forEach(([key, value]) => {\n queryBuilder = queryBuilder.eq(key, value);\n });\n\n const { data: result, error } = await queryBuilder\n .select()\n .single();\n\n if (error) {\n throw error;\n }\n\n return { data: result as T, error: null };\n } catch (error) {\n return { data: null, error: error as Error };\n }\n }\n\n\n /**\n * Delete data from a table\n * @param table The table name\n * @param eq The equality conditions\n */\n public async delete<T>(\n table: StripeTables,\n eq: Record<string, any>\n ): Promise<{ data: T | null; error: Error | null }> {\n try {\n let queryBuilder = this.client\n .schema('stripe')\n .from(table)\n .delete();\n\n Object.entries(eq).forEach(([key, value]) => {\n queryBuilder = queryBuilder.eq(key, value);\n });\n\n const { data: result, error } = await queryBuilder\n .select()\n .single();\n\n if (error) {\n throw error;\n }\n\n return { data: result as T, error: null };\n } catch (error) {\n return { data: null, error: error as Error };\n }\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { loadStripe, Stripe } from '@stripe/stripe-js';\nimport type { Stripe as StripeTypes } from 'stripe';\nimport { STRIPE_CONFIG } from '../config/stripe.config';\nimport { StripeCustomerPublic } from '../store/customer.store';\nimport { SupabaseClientService } from './supabase-client.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class StripeClientService {\n private readonly config = inject(STRIPE_CONFIG);\n private readonly supabase = inject(SupabaseClientService);\n private stripe: Promise<Stripe | null>;\n\n constructor() {\n this.stripe = loadStripe(this.config.publishableKey);\n console.log('🔌 [StripeClientService]: Loaded Stripe Client from @stripe/stripe-js');\n }\n\n /**\n * Get the Stripe instance\n */\n public async getStripe(): Promise<Stripe | null> {\n return this.stripe;\n }\n\n /**\n * Create a checkout session\n * @param priceId The price ID for the subscription\n * @param successUrl The URL to redirect to on success\n * @param cancelUrl The URL to redirect to on cancel\n */\n public async createCheckoutSession(\n priceId: string,\n resultPagePath: string,\n customer: StripeCustomerPublic | null\n ): Promise<{ clientSecret: string | null; error: Error | null }> {\n try {\n const { data, error } = await this.supabase.getClient()\n .functions.invoke<StripeTypes.Checkout.Session>('checkout_session', {\n body: {\n priceId,\n resultPagePath,\n customer\n }\n });\n\n if (error) {\n throw error;\n }\n\n return { \n clientSecret: data?.client_secret ?? null, \n error: null \n };\n } catch (error) {\n return { clientSecret: null, error: error as Error };\n }\n }\n\n /**\n * Create a subscription\n * @param priceId The price ID for the subscription\n */\n public async createSubscription(priceId: string, returnPath: string, customer: StripeCustomerPublic | null): Promise<{ clientSecret: string | null; error: Error | null }> {\n try {\n const { data, error } = await this.supabase.getClient()\n .functions.invoke<StripeTypes.Checkout.Session>('create_subscription', {\n body: {\n priceId,\n resultPagePath: returnPath,\n customer\n }\n });\n\n if (error) {\n throw error;\n }\n\n return { clientSecret: data?.client_secret ?? null, error: null };\n } catch (error) {\n return { clientSecret: null, error: error as Error };\n }\n }\n\n /**\n * Update a subscription\n * @param subscriptionId The subscription ID \n * @param params The parameters to update\n */\n public async updateSubscription(\n subscriptionId: string, \n params: any\n ): Promise<{ subscription: StripeTypes.Subscription | null; error: Error | null }> {\n try {\n const { data, error } = await this.supabase.getClient()\n .functions.invoke<StripeTypes.Subscription>('update_subscription', {\n body: {\n subscriptionId,\n params\n }\n });\n\n if (error) {\n throw error;\n }\n\n return { subscription: data, error: null };\n } catch (error) {\n return { subscription: null, error: error as Error };\n }\n }\n\n /**\n * Get a subscription\n * @param subscriptionId The subscription ID\n */\n public async getSubscription(\n subscriptionId: string\n ): Promise<{ subscription: StripeTypes.Subscription | null; error: Error | null }> {\n try {\n const { data, error } = await this.supabase.getClient()\n .functions.invoke<StripeTypes.Subscription>('get_subscription', {\n body: {\n subscriptionId\n }\n });\n\n if (error) {\n throw error;\n }\n\n return { subscription: data, error: null };\n } catch (error) {\n return { subscription: null, error: error as Error };\n }\n }\n\n /**\n * List customer subscriptions\n */\n public async listSubscriptions(): Promise<{ subscriptions: StripeTypes.Subscription[] | null; error: Error | null }> {\n try {\n const { data, error } = await this.supabase.getClient()\n .functions.invoke<StripeTypes.Subscription[]>('list_subscriptions');\n\n if (error) {\n throw error;\n }\n\n return { subscriptions: data, error: null };\n } catch (error) {\n return { subscriptions: null, error: error as Error };\n }\n }\n\n /**\n * Cancel a subscription\n * @param subscriptionId The subscription ID\n */\n public async cancelSubscription(\n subscriptionId: string\n ): Promise<{ subscription: StripeTypes.Subscription | null; error: Error | null }> {\n try {\n const { data, error } = await this.supabase.getClient()\n .functions.invoke<StripeTypes.Subscription>('cancel_subscription', {\n body: {\n subscriptionId\n }\n });\n\n if (error) {\n throw error;\n }\n\n return { subscription: data, error: null };\n } catch (error) {\n return { subscription: null, error: error as Error };\n }\n }\n\n /**\n * Resume a paused subscription\n * @param subscriptionId The subscription ID\n * @param params Optional parameters for resumption\n */\n public async resumeSubscription(\n subscriptionId: string,\n params?: any\n ): Promise<{ subscription: StripeTypes.Subscription | null; error: Error | null }> {\n try {\n const { data, error } = await this.supabase.getClient()\n .functions.invoke<StripeTypes.Subscription>('resume_subscription', {\n body: {\n subscriptionId,\n params\n }\n });\n\n if (error) {\n throw error;\n }\n\n return { subscription: data, error: null };\n } catch (error) {\n return { subscription: null, error: error as Error };\n }\n }\n\n /**\n * Retrieve the payment intent status\n * @param sessionId The session ID of the checkout session\n */\n public async getCheckoutSessionStatus(sessionId: string): Promise<{ \n sessionStatus: StripeTypes.Checkout.Session | null; \n error: Error | null \n }> {\n try {\n const { data, error } = await this.supabase.getClient()\n .functions.invoke<StripeTypes.Checkout.Session>('session_status', {\n body: {\n sessionId\n }\n });\n\n if (error) {\n throw error;\n }\n\n return { sessionStatus: data, error: null };\n } catch (error) {\n console.error('❌ [StripeClientService]: Error retrieving payment intent:', error);\n return { sessionStatus: null, error: error as Error };\n }\n }\n\n /**\n * Create a portal session\n * @param customerId The customer ID\n * @param returnUrl The URL to redirect to after the portal session\n */\n public async createPortalSession(customerId: string, returnUrl: string): Promise<{ url: string | null; error: Error | null }> {\n try {\n const { data, error } = await this.supabase.getClient()\n .functions.invoke<StripeTypes.BillingPortal.Session>('create_portal_session', {\n body: {\n customerId,\n returnUrl\n }\n });\n\n if (error) {\n throw error;\n }\n\n return { url: data?.url ?? null, error: null };\n } catch (error) {\n return { url: null, error: error as Error };\n }\n }\n}\n","import { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { StripePrice, StripeProduct } from '../models/database.model';\nimport { SupabaseClientService } from '../services/supabase-client.service';\n\nexport type StripeProductPublic = Omit<StripeProduct, 'attrs'> & {\n images: string[];\n prices: {\n details: StripePricePublic;\n recurringInterval: string;\n }[];\n}\n\nexport type StripePricePublic = Omit<StripePrice, 'attrs'>;\n\nexport type ProductsStatus = 'idle' | 'loading' | 'success' | 'error';\n\ntype ProductsState = {\n products: StripeProductPublic[] | null;\n prices: StripePricePublic[] | null;\n status: ProductsStatus;\n error: string | null;\n}\n\nconst initialProductsState: ProductsState = {\n products: null,\n prices: null,\n status: 'idle',\n error: null,\n};\n\nexport const ProductsStore = signalStore(\n { providedIn: 'root' },\n withState(initialProductsState),\n withComputed((state) => ({\n isStatusLoading: computed(() => state.status() === 'loading'),\n isStatusSuccess: computed(() => state.status() === 'success'),\n isStatusError: computed(() => state.status() === 'error'),\n recurringProducts: computed(() => state.products()?.filter(product => product.prices?.some(price => price.details.type === 'recurring')) || []),\n oneTimeProducts: computed(() => state.products()?.filter(product => product.prices?.some(price => price.details.type === 'one_time')) || []),\n hasProducts: computed(() => state.products() !== null && state.products()!.length > 0),\n isError: computed(() => state.error())\n })),\n withMethods((store, supabaseService = inject(SupabaseClientService)) => ({\n /**\n * Get products by IDs from the current loaded products\n */\n getProductsByIds(ids: string[]): StripeProductPublic[] {\n console.log('🎮 [ProductsStore] Loading products by ids: ', ids);\n return store.products()?.filter(product => product.id && ids.includes(product.id)) || [];\n },\n\n /**\n * Load product by id\n */\n async loadProductById(id: string) {\n patchState(store, { status: 'loading', error: null });\n\n try {\n const { data: product, error: productError } = await supabaseService.selectStripeProduct(id);\n \n if (productError) {\n console.error('🎮 [ProductsStore]: Error loading product', productError);\n patchState(store, { status: 'error', error: (productError as Error).message });\n }\n\n const products: StripeProductPublic[] = [];\n \n if (product && product.length > 0) {\n const productParsed = parseProduct(product[0], store.prices() as StripePrice[]);\n products.push(productParsed);\n }\n\n patchState(store, { status: 'success', products });\n \n } catch (error) {\n patchState(store, { status: 'error', error: (error as Error).message });\n }\n },\n\n /**\n * Load products from Stripe\n */\n async loadProducts() {\n patchState(store, { status: 'loading', error: null });\n\n try {\n const { data: stripeProducts, error: productsError } = await supabaseService.selectStripeProducts();\n\n if (productsError) {\n console.error('🎮 [ProductsStore]: Error loading products', productsError);\n patchState(store, {\n status: 'error',\n error: (productsError as Error).message,\n });\n }\n\n if (stripeProducts) {\n {\n const products: StripeProductPublic[] = [];\n\n stripeProducts.forEach(product => {\n products.push(parseProduct(product, store.prices() as StripePrice[]));\n });\n\n console.log('🎮 [ProductsStore] products: ', products);\n\n patchState(store, {\n status: 'success',\n products: products\n });\n }\n }\n\n } catch (error) {\n patchState(store, {\n status: 'error',\n error: (error as Error).message,\n });\n }\n },\n\n /**\n * Reset the store to initial state\n */\n reset() {\n patchState(store, initialProductsState);\n }\n })),\n withHooks((store, supabaseService = inject(SupabaseClientService)) => ({\n async onInit() {\n console.log('🎮 [ProductsStore] onInit');\n\n const { data: prices, error: pricesError } = await supabaseService.selectStripePrices();\n\n if (pricesError) {\n console.error('🎮 [ProductsStore]: Error loading prices', pricesError);\n patchState(store, { status: 'error', error: (pricesError as Error).message });\n }\n\n patchState(store, { prices });\n\n const products = store.products();\n console.log('🎮 [ProductsStore] products: ', products);\n\n if (!products) {\n console.log('🎮 [ProductsStore] loading products...');\n await store.loadProducts();\n }\n }\n }))\n)\n\nexport function parseProduct(product: StripeProduct, prices: StripePrice[] = []): StripeProductPublic {\n const { attrs, ...mainProperties } = product;\n return {\n ...mainProperties,\n images: (attrs as any)?.images || [],\n prices: prices.filter(price => price.product === product.id).map(price => ({\n details: price,\n recurringInterval: (price?.attrs as any)?.recurring?.interval || 'no-recurring'\n }))\n };\n}\n\n","import { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { StripeEmbeddedCheckout } from '@stripe/stripe-js';\nimport { StripeSubscription } from '../models/database.model';\nimport { StripeClientService } from '../services/stripe-client.service';\nimport { SupabaseClientService } from '../services/supabase-client.service';\nimport { ProductsStore, StripeProductPublic } from './products.store';\nimport { CustomerStore, StripeCustomerPublic } from './customer.store';\n\nexport type StripeSubscriptionCancellationDetails = {\n cancel_at_period_end: boolean;\n cancel_at: number;\n canceled_at: number;\n cancellation_details: {\n comment: string;\n feedback: string;\n reason: string;\n }\n}\n\nexport type StripeSubscriptionPlan = {\n amount: number;\n active: boolean;\n interval: string;\n productId: string;\n}\n\nexport type StripeSubscriptionPublic = Omit<StripeSubscription, 'attrs'> & {\n status: string;\n plan: StripeSubscriptionPlan;\n cancel: StripeSubscriptionCancellationDetails;\n product?: StripeProductPublic | null;\n};\n\nexport type SubscriptionStatus = 'idle' | 'loading' | 'success' | 'error';\n\nexport interface SubscriptionState {\n subscriptions: StripeSubscriptionPublic[] | null;\n embeddedSubscription: StripeEmbeddedCheckout | null;\n currentSubscription: StripeSubscriptionPublic | null;\n status: SubscriptionStatus;\n error: string | null;\n sessionStatus: any | null;\n}\n\nconst initialSubscriptionState: SubscriptionState = {\n subscriptions: null,\n embeddedSubscription: null,\n currentSubscription: null,\n status: 'idle',\n error: null,\n sessionStatus: null,\n};\n\nexport const SubscriptionsStore = signalStore(\n { providedIn: 'root' },\n withState(initialSubscriptionState),\n withComputed((state) => ({\n isStatusLoading: computed(() => state.status() === 'loading'),\n isStatusSuccess: computed(() => state.status() === 'success'),\n isStatusError: computed(() => state.status() === 'error'),\n hasSubscriptions: computed(() => state.subscriptions() !== null && state.subscriptions()!.length > 0),\n isError: computed(() => state.error()),\n })),\n withMethods((store, stripeService = inject(StripeClientService), \n supabaseService = inject(SupabaseClientService), \n productsStore = inject(ProductsStore),\n customerStore = inject(CustomerStore)) => ({\n /**\n * Create a subscription\n * @param priceId The price ID for the subscription\n */\n async createSubscription(priceId: string, returnPath: string, customerEmail: string | null) {\n patchState(store, { status: 'loading', error: null });\n\n try {\n let customer: StripeCustomerPublic | null = null;\n\n if (customerEmail) {\n customer = customerStore.customer().data;\n }\n\n const { clientSecret, error } = await stripeService.createSubscription(priceId, returnPath, customer);\n console.log('🔍 [SubscriptionsStore] created subscription', clientSecret, error);\n \n if (error) {\n patchState(store, {\n status: 'error',\n error: (error as Error).message,\n });\n } else {\n const stripe = await stripeService.getStripe();\n\n if (!stripe) {\n patchState(store, {\n status: 'error',\n error: 'No Stripe instance returned',\n });\n } else {\n const embeddedCheckout = await stripe.initEmbeddedCheckout({ \n clientSecret: clientSecret as string\n });\n \n //embeddedCheckout?.mount('#embedded-checkout');\n\n patchState(store, {\n status: 'success',\n embeddedSubscription: embeddedCheckout\n });\n }\n }\n } catch (error) {\n patchState(store, {\n status: 'error',\n error: (error as Error).message,\n });\n }\n },\n\n /**\n * Load all subscriptions for the current customer\n */\n async loadSubscriptions() {\n patchState(store, { status: 'loading', error: null });\n\n try {\n const { data: subscriptions, error } = await supabaseService.getStripeSubscriptions();\n console.log('🔍 [SubscriptionsStore] loaded subscriptions', subscriptions);\n\n const parsedSubscriptions = subscriptions?.map((subscription) => {\n const parsedSubscription = parseSubscription(subscription as StripeSubscription);\n \n // Get the product associated with this subscription\n const productId = parsedSubscription.plan.productId;\n if (productId && productsStore.products()) {\n const product = productsStore.products()?.find(p => p.id === productId);\n if (product) {\n parsedSubscription.product = product;\n }\n }\n \n return parsedSubscription;\n });\n\n if (error) {\n patchState(store, {\n status: 'error',\n error: (error as Error).message,\n });\n } else {\n patchState(store, {\n status: 'success',\n subscriptions: parsedSubscriptions\n });\n }\n } catch (error) {\n patchState(store, {\n status: 'error',\n error: (error as Error).message,\n });\n }\n },\n\n /**\n * Get a specific subscription\n * @param subscriptionId The subscription ID\n */\n async getSubscription(subscriptionId: string) {\n patchState(store, { status: 'loading', error: null });\n\n try {\n const { data, error } = await supabaseService.selectStripeSubscription(subscriptionId);\n const [subscription] = data || [];\n console.log('🔍 [SubscriptionsStore] got subscription', subscription, error);\n\n const parsedSubscription = parseSubscription(subscription as StripeSubscription);\n\n // Get the product associated with this subscription\n const productId = parsedSubscription.plan.productId;\n if (productId && productsStore.products()) {\n const product = productsStore.products()?.find(p => p.id === productId);\n if (product) {\n parsedSubscription.product = product;\n }\n }\n\n if (error) {\n patchState(store, {\n status: 'error',\n error: (error as Error).message,\n });\n } else {\n patchState(store, {\n status: 'success',\n currentSubscription: parsedSubscription\n });\n }\n } catch (error) {\n patchState(store, {\n status: 'error',\n error: (error as Error).message,\n });\n }\n },\n\n /**\n * Get the status of a checkout subcription session\n * @param sessionId The ID of the checkout subcription session\n */\n async getSessionStatus({sessionId}: {sessionId: string}) {\n patchState(store, { status: 'loading', error: null });\n\n try {\n const { sessionStatus, error } = await stripeService.getCheckoutSessionStatus(sessionId);\n \n if (error) {\n patchState(store, { status: 'error', error: (error as Error).message });\n } else {\n patchState(store, { status: 'success', sessionStatus });\n }\n\n } catch (error) {\n patchState(store, { status: 'error', error: (error as Error).message });\n }\n },\n\n /**\n * Destroy the embedded subscription\n */\n destroyEmbeddedSubscription() {\n console.log('🧹 [SubscriptionsStore] destroying embedded subscription', store.embeddedSubscription());\n store.embeddedSubscription()?.destroy();\n console.log('🧹 [SubscriptionsStore] destroyed embedded subscription', store.embeddedSubscription());\n },\n\n /**\n * Reset the store to initial state\n */\n reset() {\n patchState(store, initialSubscriptionState);\n }\n })),\n withHooks(() => {\n const productsStore = inject(ProductsStore);\n\n if (!productsStore.hasProducts()) {\n productsStore.loadProducts();\n console.log('🔍 [SubscriptionsStore] loading products');\n }\n\n return {\n onInit() {\n console.log('🔍 [SubscriptionsStore] initialized');\n },\n onDestroy() {\n console.log('🧹 [SubscriptionsStore] destroyed');\n }\n }\n })\n);\n\nexport function parseSubscription(subscription: StripeSubscription): StripeSubscriptionPublic {\n const subscriptionAttrs = subscription.attrs as any;\n \n return {\n ...subscription,\n status: subscriptionAttrs.status,\n plan: {\n amount: subscriptionAttrs.plan.amount,\n active: subscriptionAttrs.plan.active,\n interval: subscriptionAttrs.plan.interval,\n productId: subscriptionAttrs.plan.product,\n },\n cancel: {\n cancel_at_period_end: subscriptionAttrs.cancel_at_period_end ?? false,\n cancel_at: subscriptionAttrs.cancel_at ?? null,\n canceled_at: subscriptionAttrs.canceled_at ?? null,\n cancellation_details: subscriptionAttrs.cancellation_details ?? {\n comment: null,\n feedback: null,\n reason: null\n }\n },\n product: subscriptionAttrs.product ? subscriptionAttrs.product as StripeProductPublic : undefined\n };\n}","import { withState, signalStore, withComputed, patchState, withMethods, withHooks } from '@ngrx/signals';\nimport { computed, inject } from '@angular/core';\nimport { StripeCustomer, StripePaymentIntent } from '../models/database.model';\nimport { parseSubscription, StripeSubscriptionPublic } from './subscriptions.store';\nimport { SupabaseClientService } from '../services/supabase-client.service';\nimport { ProductsStore } from './products.store';\n\nexport type CustomerStatus = 'idle' | 'loading' | 'success' | 'error';\n\nexport type StripePaymentIntentsPublic = Omit<StripePaymentIntent, 'attrs'> & {\n status: string;\n invoiceId: string;\n liveMode: boolean;\n confirmationMethod: string;\n paymentMethodId: string;\n};\n\nexport type StripeCustomerPublic = Omit<StripeCustomer, 'attrs'>\n\n\nexport interface CustomerState {\n customer: {\n data: StripeCustomerPublic | null;\n status: CustomerStatus;\n error: string | null;\n };\n paymentIntents: {\n data: StripePaymentIntentsPublic[];\n status: CustomerStatus;\n error: string | null;\n };\n subscriptions: {\n data: StripeSubscriptionPublic[];\n status: CustomerStatus;\n error: string | null;\n };\n}\n\nconst initialCustomerState: CustomerState = {\n customer: { \n status: 'idle', \n data: null,\n error: null \n },\n paymentIntents: {\n data: [],\n status: 'idle',\n error: null,\n },\n subscriptions: {\n data: [], \n status: 'idle',\n error: null,\n },\n};\n\n\nexport const CustomerStore = signalStore(\n { providedIn: 'root' },\n withState(initialCustomerState),\n withComputed((state) => ({\n isPaymentIntentsStatusLoading: computed(() => state.paymentIntents.status() === 'loading'),\n isPaymentIntentsStatusSuccess: computed(() => state.paymentIntents.status() === 'success'),\n isPaymentIntentsStatusError: computed(() => state.paymentIntents.status() === 'error'),\n isSubscriptionsStatusLoading: computed(() => state.subscriptions.status() === 'loading'),\n isSubscriptionsStatusSuccess: computed(() => state.subscriptions.status() === 'success'),\n isSubscriptionsStatusError: computed(() => state.subscriptions.status() === 'error'),\n hasSubscriptions: computed(() => state.subscriptions.data() !== null && state.subscriptions.data()!.length > 0),\n hasPaymentIntents: computed(() => state.paymentIntents.data() !== null && state.paymentIntents.data()!.length > 0),\n firstSubscription: computed(() => state.subscriptions.data()?.[0]),\n restSubscriptions: computed(() => state.subscriptions.data()?.slice(1)),\n isError: computed(() => state.paymentIntents.error()),\n })),\n withMethods((state, supabaseService = inject(SupabaseClientService), productsStore = inject(ProductsStore)) => ({\n /**\n * Load customer\n * @param customerEmail The customer email\n */\n async loadCustomer(customerEmail: string) {\n patchState(state, { customer: { status: 'loading', data: null, error: null } });\n\n const { data, error } = await supabaseService.getCustomerByEmail(customerEmail);\n const [customer] = data as StripeCustomerPublic[];\n\n if (error) {\n patchState(state, { customer: { error: error.message, status: 'error', data: null } });\n } else {\n \n if (customer) {\n this.loadPaymentIntents(customer.id as string);\n this.loadSubscriptions(customer.id as string);\n\n patchState(state, { customer: { data: customer, status: 'success', error: null } });\n } else {\n patchState(state, { customer: { data: null, status: 'error', error: 'no customer found' } });\n }\n\n }\n },\n\n /**\n * Load payment intents\n * @param customerId The customer ID\n */\n async loadPaymentIntents(customerId: string) {\n patchState(state, { paymentIntents: { status: 'loading', data: [], error: null } });\n\n const { data, error } = await supabaseService.getCustomerPaymentIntents(customerId);\n const paymentIntents = data?.map((paymentIntent) => parsePaymentIntent(paymentIntent));\n\n if (error) {\n patchState(state, { paymentIntents: { error: error.message, status: 'error', data: [] } });\n } else {\n patchState(state, { paymentIntents: { data: paymentIntents ?? [], status: 'success', error: null } });\n }\n }, \n\n /**\n * Load subscriptions\n * @param customerId The customer ID\n */\n async loadSubscriptions(customerId: string) {\n patchState(state, { subscriptions: { data: [], status: 'loading', error: null } });\n\n const { data, error } = await supabaseService.getCustomerSubscriptions(customerId);\n \n if (error) {\n patchState(state, { subscriptions: { error: error.message, status: 'error', data: [] } });\n } else {\n const subscriptions = data.map((subscription) => {\n const parsedSubscription = parseSubscription(subscription);\n \n // Get the product associated with this subscription\n const productId = parsedSubscription.plan.productId;\n if (productId && productsStore.products()) {\n const product = productsStore.products()?.find(p => p.id === productId);\n if (product) {\n parsedSubscription.product = product;\n }\n }\n \n return parsedSubscription;\n });\n\n console.log('🔍 [CustomerStore] subscriptions: ', subscriptions);\n \n patchState(state, { subscriptions: { data: subscriptions ?? [], status: 'success', error: null } });\n }\n },\n })),\n withHooks(() => {\n return {\n onInit() {\n const productsStore = inject(ProductsStore);\n\n if (!productsStore.hasProducts()) {\n console.log('🔍 [CustomerStore] loading products...');\n productsStore.loadProducts();\n }\n console.log('🔍 [CustomerStore] initialized');\n },\n onDestroy() {\n console.log('🧹 [CustomerStore] destroyed');\n }\n }\n })\n);\n\nexport function parsePaymentIntent(paymentIntent: StripePaymentIntent): StripePaymentIntentsPublic {\n const paymentIntentAttrs = paymentIntent.attrs as any;\n return {\n ...paymentIntent,\n status: paymentIntentAttrs.status,\n invoiceId: paymentIntentAttrs.invoice as string,\n liveMode: paymentIntentAttrs.livemode as boolean,\n confirmationMethod: paymentIntentAttrs.confirmation_method,\n paymentMethodId: paymentIntentAttrs.payment_method,\n };\n}","import { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { StripeEmbeddedCheckout } from '@stripe/stripe-js';\nimport { StripeClientService } from '../services/stripe-client.service';\nimport { CustomerStore, StripeCustomerPublic } from './customer.store';\n\nexport type CheckoutStatus = 'idle' | 'loading' | 'success' | 'error';\n\ntype CheckoutState = {\n embeddedCheckout: StripeEmbeddedCheckout | null;\n status: CheckoutStatus;\n sessionId: string | null;\n returnPagePath: string;\n error: string | null;\n sessionStatus: any | null;\n}\n\nconst initialCheckoutState: CheckoutState = {\n embeddedCheckout: null,\n status: 'idle',\n sessionId: null,\n returnPagePath: '/return',\n error: null,\n sessionStatus: null\n};\n\nexport const CheckoutStore = signalStore(\n { providedIn: 'root' },\n withState(initialCheckoutState),\n withComputed((state) => ({\n isStatusLoading: computed(() => state.status() === 'loading'),\n isStatusSuccess: computed(() => state.status() === 'success'),\n isStatusError: computed(() => state.status() === 'error'),\n paymentStatus: computed(() => state.sessionStatus()?.status),\n isPaymentComplete: computed(() => state.sessionStatus()?.status === 'complete'),\n isPaymentProcessing: computed(() => state.sessionStatus()?.status === 'open'),\n isError: computed(() => state.error())\n })),\n withMethods((store, stripeService = inject(StripeClientService), customerStore = inject(CustomerStore)) => ({\n /**\n * Create a checkout session\n * @param priceId The price ID to checkout\n * @param returnPagePath The return page path after checkout\n */\n async createCheckoutSession({priceId, returnPagePath, customerEmail}: {priceId: string, returnPagePath: string, customerEmail: string | null}) {\n patchState(store, { status: 'loading', error: null });\n\n try {\n let customer: StripeCustomerPublic | null = null;\n \n if (customerEmail) {\n customer = customerStore.customer().data;\n }\n\n const { clientSecret, error } = await stripeService.createCheckoutSession(priceId, returnPagePath, customer);\n\n if (error) {\n patchState(store, {\n status: 'error',\n error: (error as Error).message,\n });\n } else {\n const stripe = await stripeService.getStripe();\n\n if (!stripe) {\n patchState(store, {\n status: 'error',\n error: 'No Stripe instance returned',\n });\n } else {\n const embeddedCheckout = await stripe.initEmbeddedCheckout({ \n clientSecret: clientSecret as string\n });\n \n embeddedCheckout?.mount('#embedded-checkout');\n\n patchState(store, {\n status: 'success',\n embeddedCheckout\n });\n }\n }\n\n } catch (error) {\n patchState(store, {\n status: 'error',\n error: (error as Error).message,\n });\n }\n },\n\n /**\n * Get the status of a checkout session\n * @param sessionId The ID of the checkout session\n */\n async getSessionStatus({sessionId}: {sessionId: string}) {\n patchState(store, { status: 'loading', error: null });\n\n try {\n const { sessionStatus, error } = await stripeService.getCheckoutSessionStatus(sessionId);\n \n if (error) {\n patchState(store, { status: 'error', error: (error as Error).message });\n } else {\n patchState(store, { status: 'success', sessionStatus });\n }\n\n } catch (error) {\n patchState(store, { status: 'error', error: (error as Error).message });\n }\n },\n\n\n /**\n * Destroy the embedded checkout\n */\n destroyEmbeddedCheckout() {\n console.log('🧹 [CheckoutStore] destroying embedded checkout', store.embeddedCheckout());\n store.embeddedCheckout()?.destroy();\n console.log('🧹 [CheckoutStore] destroyed embedded checkout', store.embeddedCheckout());\n },\n \n /**\n * Reset the store to initial state\n */\n reset() {\n patchState(store, initialCheckoutState);\n }\n })),\n withHooks({\n onInit() {\n console.log('🔍 [CheckoutStore] initialized');\n },\n onDestroy(store) {\n store.embeddedCheckout()?.destroy();\n console.log('🧹 [CheckoutStore] destroyed');\n }\n })\n) ","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-embedded-skeleton',\n templateUrl: './embedded-skeleton.component.html',\n standalone: true\n})\nexport class EmbeddedSkeletonComponent {} ","<div class=\"w-full max-w-md mx-auto p-4\">\n <!-- Header skeleton -->\n <div class=\"flex items-center gap-4 mb-6\">\n <div class=\"skeleton w-16 h-16 rounded-lg\"></div>\n <div class=\"skeleton h-6 w-48\"></div>\n </div>\n\n <!-- Price skeleton -->\n <div class=\"mb-8\">\n <div class=\"skeleton h-10 w-32 mb-2\"></div>\n <div class=\"skeleton h-4 w-24\"></div>\n </div>\n\n <!-- Payment form skeleton -->\n <div class=\"space-y-4\">\n <!-- Email field -->\n <div class=\"skeleton h-12 w-full\"></div>\n \n <!-- Card info field -->\n <div class=\"skeleton h-12 w-full\"></div>\n \n <!-- Name field -->\n <div class=\"skeleton h-12 w-full\"></div>\n \n <!-- Country selector -->\n <div class=\"skeleton h-12 w-full\"></div>\n \n <!-- Submit button -->\n <div class=\"skeleton h-12 w-full mt-6\"></div>\n </div>\n</div> ","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, OnInit } from '@angular/core';\nimport { CheckoutStore } from '../../store/checkout.store';\nimport { CustomerStore } from '../../store/customer.store';\nimport { EmbeddedSkeletonComponent } from '../embedded-skeleton/embedded-skeleton.component';\n\n@Component({\n selector: 'lib-embedded-checkout',\n templateUrl: './embedded-checkout.component.html',\n standalone: true,\n imports: [CommonModule, EmbeddedSkeletonComponent],\n})\nexport class EmbeddedCheckoutComponent implements OnInit {\n public readonly checkoutStore = inject(CheckoutStore);\n public readonly customerStore = inject(CustomerStore);\n \n public readonly priceId = input.required<string>();\n public readonly returnPagePath = input<string>('/return');\n \n public readonly customer = computed(() => this.customerStore.customer().data);\n\n async ngOnInit() {\n this.createCheckoutSession();\n }\n\n private createCheckoutSession() {\n const baseUrl = window.location.origin;\n const returnPath = `${baseUrl}${this.returnPagePath()}`;\n\n // Create the checkout session\n this.checkoutStore.createCheckoutSession({\n priceId: this.priceId(),\n returnPagePath: returnPath,\n customerEmail: this.customer()?.email ?? ''\n });\n }\n\n ngOnDestroy() {\n this.checkoutStore.destroyEmbeddedCheckout();\n }\n} ","<div class=\"checkout-container\">\n <div class=\"info-panel p-4 bg-blue-100 rounded-lg mb-4\">\n <div class=\"flex items-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-6 w-6 text-blue-600 mr-2\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <p class=\"text-blue-700\">ID del Precio: <span class=\"font-semibold\">{{ priceId() }}</span></p>\n </div>\n </div>\n \n @if (checkoutStore.isStatusLoading()) {\n <lib-embedded-skeleton />\n }\n \n @if (checkoutStore.isStatusError()) {\n <div class=\"error\">\n <p>Error: {{ checkoutStore.error() }}</p>\n </div>\n }\n \n <div id=\"embedded-checkout\"></div>\n</div> ","import { CommonModule } from '@angular/common';\nimport { Component, OnInit, inject, input } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { CheckoutStore } from '../../../store/checkout.store';\n\n@Component({\n selector: 'lib-checkout-return-page',\n templateUrl: './return-page.component.html',\n standalone: true,\n imports: [CommonModule],\n})\nexport class ReturnPageComponent implements OnInit {\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n \n public readonly checkoutStore = inject(CheckoutStore);\n \n public readonly returnUrl = input<string>('/');\n \n async ngOnInit() {\n this.route.queryParams.subscribe(async params => {\n const sessionId = params['session_id'];\n this.getSessionStatus(sessionId);\n });\n }\n\n private async getSessionStatus(sessionId: string) {\n if (sessionId) {\n await this.checkoutStore.getSessionStatus({ sessionId });\n } else {\n console.error('Missing session_id parameter in URL');\n }\n }\n \n public navigate(): void {\n this.router.navigateByUrl(this.returnUrl());\n }\n} ","<div class=\"return-page-container\">\n @if (checkoutStore.isStatusLoading()) {\n <div class=\"loading-state\">\n <div class=\"spinner\"></div>\n <p>Verifying your payment status...</p>\n </div>\n }\n\n @if (checkoutStore.isStatusSuccess() && checkoutStore.isPaymentComplete()) {\n <div class=\"alert alert-success alert-soft flex flex-col items-center gap-4\">\n <div class=\"flex items-center gap-4\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-12 h-12\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <h2 class=\"status-title\">¡Payment completed successfully!</h2>\n </div>\n </div>\n }\n\n @if (checkoutStore.isStatusSuccess() && checkoutStore.isPaymentProcessing()) {\n <div class=\"alert alert-info alert-soft flex flex-col items-center gap-4\">\n <div class=\"flex items-center gap-4\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-12 h-12\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <h2 class=\"status-title\">Payment in processing</h2>\n </div>\n <p class=\"status-message\">Your payment is being processed. You will receive an email confirmation when it is complete.</p>\n </div>\n }\n\n @if (checkoutStore.isStatusError()) {\n <div class=\"alert alert-error alert-soft flex flex-col items-center gap-4\">\n <div class=\"flex items-center gap-4\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-12 h-12\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z\" />\n </svg>\n <h2 class=\"status-title\">An error occurred</h2>\n </div>\n @if (checkoutStore.error()) {\n <p class=\"status-message\">{{ checkoutStore.error() }}</p>\n } @else {\n <p class=\"status-message\">The payment could not be processed. Please try again or contact support.</p>\n }\n </div>\n }\n\n <div class=\"flex justify-end w-full pt-4\">\n <button class=\"btn btn-outline\" (click)=\"navigate()\">Back</button>\n </div>\n</div> ","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-product-item-skeleton',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './product-item-skeleton.component.html'\n})\nexport class ProductItemSkeletonComponent {} ","<div class=\"card bg-base-100 shadow-xl\">\n <figure>\n <div class=\"skeleton h-48 w-full\"></div>\n </figure>\n <div class=\"card-body\">\n <div class=\"skeleton h-8 w-32\"></div>\n <div class=\"skeleton h-6 w-48\"></div>\n <div class=\"skeleton h-4 w-full\"></div>\n <div class=\"skeleton h-4 w-3/4\"></div>\n <div class=\"card-actions justify-end mt-4\">\n <div class=\"skeleton h-10 w-24\"></div>\n </div>\n </div>\n</div> ","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UtilsService {\n\n public formatAmount(amount: number, currency = 'EUR'): string {\n if (!amount) return 'N/A';\n \n console.log('[🛠️ UtilsService - formatAmount] currency: ', currency.toLocaleUpperCase());\n\n const formatter = new Intl.NumberFormat(currency.toLocaleUpperCase() === 'EUR' ? 'es-ES' : 'en-US', {\n style: 'currency',\n currency: currency || 'USD',\n });\n \n return formatter.format(amount / 100);\n }\n \n public formatDate(timestamp: number | string): string {\n if (!timestamp) return 'N/A';\n \n const date = typeof timestamp === 'number'\n ? new Date(timestamp * 1000)\n : new Date(timestamp);\n \n return date.toLocaleDateString('es-ES', {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n });\n }\n \n public getStatusBadgeClass(status: string): string {\n switch (status) {\n case 'active':\n case 'succeeded':\n case 'paid':\n return 'badge-success';\n case 'failed':\n case 'canceled':\n case 'unpaid':\n return 'badge-error';\n case 'pending':\n case 'processing':\n case 'trialing':\n return 'badge-warning';\n default:\n return 'badge-ghost';\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, output } from '@angular/core';\nimport { UtilsService } from '../../../services/utils.service';\nimport { StripePricePublic, StripeProductPublic } from '../../../store/products.store';\n\n@Component({\n selector: 'lib-product-item',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './product-item.component.html'\n})\nexport class ProductItemComponent {\n public readonly product = input.required<StripeProductPublic>();\n \n public readonly productSelected = output<StripeProductPublic>();\n public readonly priceSelected = output<StripePricePublic>();\n\n public readonly utils = inject(UtilsService);\n\n onSelect(price: StripePricePublic) {\n this.productSelected.emit(this.product());\n this.priceSelected.emit(price);\n }\n} ","<div class=\"card bg-base-100 shadow-xl\">\n @if (product().images && product().images.length) {\n <figure>\n <img src=\"{{ product().images[0] }}\" alt=\"{{ product().name }}\" class=\"h-48 w-full object-cover\" />\n </figure>\n }\n <div class=\"card-body\">\n @if (product().active) {\n <div class=\"badge badge-soft badge-success\">Active</div>\n } @else {\n <div class=\"badge badge-soft badge-warning\">Inactive</div>\n }\n\n <h2 class=\"card-title\">{{ product().name }}</h2>\n @if (product().description) {\n <p>{{ product().description }}</p>\n }\n \n @if (product().prices) {\n <div class=\"grid grid-cols-2 gap-4\">\n @for (price of product().prices; track price.details.id) {\n <div class=\"card bg-primary hover:brightness-90 cursor-pointer transition-colors p-6 rounded-2xl\" \n [class.bg-secondary]=\"price.recurringInterval === 'year'\"\n (click)=\"onSelect(price.details)\">\n <div class=\"flex flex-col gap-1\">\n @if (price.recurringInterval !== 'no-recurring') {\n <div class=\"text-xs font-medium\">Pay {{ price.recurringInterval === 'month' ? 'Monthly' : 'Yearly' }}</div>\n } @else {\n <div class=\"text-[11px] font-medium\">One time payment</div>\n }\n <div class=\"flex flex-col items-baseline\">\n <span class=\"text-2xl font-bold\">{{ utils.formatAmount(price.details.unit_amount ?? 0, price.details.currency ?? 'USD') }}</span>\n </div>\n @if (price.recurringInterval === 'year') {\n <div class=\"badge badge-sm badge-neutral\">Save 15%</div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n</div> ","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, output } from '@angular/core';\nimport { ProductsStore, StripePricePublic, StripeProductPublic } from '../../store/products.store';\nimport { ProductItemSkeletonComponent } from './product-item-skeleton/product-item-skeleton.component';\nimport { ProductItemComponent } from './product-item/product-item.component';\n\n@Component({\n selector: 'stripe-product-list',\n standalone: true,\n imports: [CommonModule, ProductItemComponent, ProductItemSkeletonComponent],\n templateUrl: './product-list.component.html'\n})\nexport class ProductListComponent {\n public readonly productsStore = inject(ProductsStore);\n\n public readonly products = input<StripeProductPublic[]>([]);\n \n public readonly productSelected = output<StripeProductPublic>();\n public readonly priceSelected = output<StripePricePublic>();\n\n onProductSelect(product: StripeProductPublic) {\n this.productSelected.emit(product);\n }\n\n onPriceSelect(price: StripePricePublic) {\n this.priceSelected.emit(price);\n }\n} ","@if (productsStore.isStatusLoading()) {\n <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\">\n @for (item of [1,2,3]; track item) {\n <lib-product-item-skeleton></lib-product-item-skeleton>\n }\n </div>\n} @else if (productsStore.isStatusError()) {\n <div class=\"alert alert-error\">\n <span>{{ productsStore.error() }}</span>\n </div>\n} @else if (!productsStore.hasProducts()) {\n <div class=\"alert alert-info\">\n <span>No products available</span>\n </div>\n} @else {\n <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\">\n @for (product of products(); track product.id) {\n <lib-product-item\n [product]=\"product\"\n (productSelected)=\"onProductSelect($event)\"\n (priceSelected)=\"onPriceSelect($event)\">\n </lib-product-item>\n }\n </div>\n} \n\n\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, OnInit, effect } from '@angular/core';\nimport { CustomerStore } from '../../store/customer.store';\nimport { SubscriptionsStore } from '../../store/subscriptions.store';\nimport { EmbeddedSkeletonComponent } from '../embedded-skeleton/embedded-skeleton.component';\n\n@Component({\n selector: 'lib-embedded-subscription',\n templateUrl: './embedded-subscription.component.html',\n standalone: true,\n imports: [CommonModule, EmbeddedSkeletonComponent]\n})\nexport class EmbeddedSubscriptionComponent implements OnInit {\n public readonly subscriptionsStore = inject(SubscriptionsStore);\n public readonly customerStore = inject(CustomerStore);\n\n public readonly priceId = input.required<string>();\n public readonly returnPagePath = input<string>('/subscription-return');\n \n public readonly customer = computed(() => this.customerStore.customer().data);\n\n constructor() {\n effect(() => {\n const embeddedSubscription = this.subscriptionsStore.embeddedSubscription();\n \n if (embeddedSubscription) {\n console.log('🎯 [EmbeddedSubscriptionComponent] Mounting embedded subscription');\n embeddedSubscription.mount('#embedded-checkout');\n }\n }, { allowSignalWrites: false });\n }\n\n async ngOnInit() {\n this.createSubscription();\n }\n\n private createSubscription() {\n const baseUrl = window.location.origin;\n const returnPath = `${baseUrl}${this.returnPagePath()}`;\n this.subscriptionsStore.createSubscription(this.priceId(), returnPath, this.customer()?.email ?? '');\n }\n\n ngOnDestroy() {\n this.subscriptionsStore.destroyEmbeddedSubscription();\n }\n} ","<div class=\"subscription-container\">\n <div class=\"info-panel p-4 bg-primary-100 rounded-lg mb-4\">\n <div class=\"flex items-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-6 w-6 text-primary mr-2\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <p class=\"text-primary-700\">Plan de suscripción: <span class=\"font-semibold\">{{ priceId() }}</span></p>\n </div>\n </div>\n \n @if (subscriptionsStore.isStatusLoading()) {\n <lib-embedded-skeleton />\n }\n \n @if (subscriptionsStore.isStatusError()) {\n <div class=\"error\">\n <p>Error: {{ subscriptionsStore.error() }}</p>\n </div>\n }\n \n <div id=\"embedded-checkout\" class=\"mt-4\"></div>\n</div> ","import { CommonModule } from '@angular/common';\nimport { Component, OnInit, inject, input } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { CheckoutStore } from '../../../store/checkout.store';\nimport { SubscriptionsStore } from '../../../store/subscriptions.store';\n\n@Component({\n selector: 'lib-subscription-return-page',\n templateUrl: './subscription-return-page.component.html',\n standalone: true,\n imports: [CommonModule],\n})\nexport class SubscriptionReturnPageComponent implements OnInit {\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly checkoutStore = inject(CheckoutStore);\n\n public readonly subscriptionsStore = inject(SubscriptionsStore);\n \n public readonly returnUrl = input<string>('/');\n \n async ngOnInit() {\n this.route.queryParams.subscribe(async params => {\n const sessionId = params['session_id'];\n this.getSessionStatus(sessionId);\n });\n }\n\n private async getSessionStatus(sessionId: string) {\n if (sessionId) {\n await this.checkoutStore.getSessionStatus({ sessionId });\n } else {\n console.error('Missing session_id parameter in URL');\n }\n }\n \n public navigate(): void {\n this.router.navigateByUrl(this.returnUrl());\n }\n} ","<div class=\"max-w-md mx-auto p-4 bg-white rounded-lg shadow-md\">\n <div class=\"text-center mb-6\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-16 w-16 text-primary mx-auto mb-2\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <h2 class=\"text-2xl font-bold text-gray-800\">¡Gracias por suscribirte!</h2>\n <p class=\"text-gray-600 mt-2\">Tu suscripción ha sido procesada correctamente.</p>\n </div>\n \n @if (subscriptionsStore.isStatusLoading()) {\n <div class=\"loading-container\">\n <div class=\"spinner\"></div>\n <p>Cargando detalles de la suscripción...</p>\n </div>\n } @else if (subscriptionsStore.isStatusError()) {\n <div class=\"error-container\">\n <p class=\"text-red-500\">{{ subscriptionsStore.error() }}</p>\n </div>\n } @else if (subscriptionsStore.hasSubscriptions()) {\n <div class=\"success-container\">\n <p class=\"text-green-600 font-medium\">Tu suscripción está activa.</p>\n </div>\n }\n \n <div class=\"mt-6 text-center\">\n <button class=\"btn btn-primary\" (click)=\"navigate()\">\n Volver al inicio\n </button>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-subscription-item-skeleton',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './subscription-item-skeleton.component.html',\n})\nexport class SubscriptionItemSkeletonComponent {}","<div class=\"card bg-base-100 shadow-sm\">\n <div class=\"card-body p-4\">\n <div class=\"flex justify-between\">\n <div>\n <div class=\"flex items-center gap-2\">\n <div class=\"skeleton h-6 w-32\"></div>\n <div class=\"skeleton h-5 w-20\"></div>\n </div>\n <div class=\"skeleton h-4 w-48 mt-2\"></div>\n </div>\n \n <div class=\"flex gap-2\">\n <div class=\"skeleton h-8 w-20\"></div>\n </div>\n </div>\n\n <div class=\"mt-2\">\n <div class=\"flex justify-between text-sm\">\n <div class=\"skeleton h-4 w-32\"></div>\n <div class=\"skeleton h-4 w-32\"></div>\n </div>\n </div>\n\n <!--<div class=\"mt-4 border-t pt-4\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div>\n <div class=\"skeleton h-5 w-24 mb-2\"></div>\n <div class=\"space-y-1\">\n <div class=\"skeleton h-4 w-full\"></div>\n <div class=\"skeleton h-4 w-full\"></div>\n <div class=\"skeleton h-4 w-3/4\"></div>\n </div>\n </div>\n \n <div>\n <div class=\"skeleton h-5 w-24 mb-2\"></div>\n <div class=\"space-y-1\">\n <div class=\"skeleton h-4 w-full\"></div>\n <div class=\"skeleton h-4 w-3/4\"></div>\n </div>\n </div>\n </div>\n \n <div class=\"card-actions mt-4 justify-end\">\n <div class=\"skeleton h-8 w-32\"></div>\n </div>\n </div>-->\n </div>\n</div>","import { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { StripeClientService } from '../services/stripe-client.service';\n\nexport interface PortalSessionResponse {\n url: string;\n}\n\nexport type PortalStatus = 'idle' | 'loading' | 'success' | 'error';\n\nexport interface PortalState {\n status: PortalStatus;\n error: string | null;\n portalUrl: string | null;\n}\n\nconst initialPortalState: PortalState = {\n status: 'idle',\n error: null,\n portalUrl: null\n};\n\nexport const PortalAccountStore = signalStore(\n { providedIn: 'root' },\n withState(initialPortalState),\n withComputed((state) => ({\n isStatusIdle: computed(() => state.status() === 'idle'),\n isStatusLoading: computed(() => state.status() === 'loading'),\n isStatusSuccess: computed(() => state.status() === 'success'),\n isStatusError: computed(() => state.status() === 'error'),\n })),\n withMethods((store, stripeService = inject(StripeClientService)) => ({\n /**\n * Creates a customer portal session and redirects to the URL\n * @param customerId Stripe customer ID\n * @param returnUrl URL to redirect to after the portal session\n */\n async createPortalSession(customerId: string, returnUrl: string): Promise<void> {\n patchState(store, { status: 'loading', error: null, portalUrl: null });\n\n try {\n const { url, error } = await stripeService.createPortalSession(customerId, returnUrl);\n\n if (error) {\n throw new Error(error.message);\n }\n\n if (!url) {\n throw new Error('No se pudo crear la sesión del portal');\n }\n\n patchState(store, {\n status: 'success',\n portalUrl: url\n });\n\n window.location.href = url;\n } catch (error) {\n console.error('🚨 [PortalAccountStore]', error);\n \n const errorMessage = error instanceof Error ? error.message : 'Error desconocido';\n \n patchState(store, {\n status: 'error',\n error: errorMessage\n });\n }\n },\n\n /**\n * Resets the store to initial state\n */\n reset(): void {\n patchState(store, initialPortalState);\n }\n }))\n); ","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, output } from '@angular/core';\nimport { UtilsService } from '../../../../../services/utils.service';\nimport { PortalAccountStore } from '../../../../../store/portal-account.store';\nimport { StripeSubscriptionPublic, SubscriptionsStore } from '../../../../../store/subscriptions.store';\n\n@Component({\n selector: 'lib-subscription-item',\n templateUrl: './subscription-item.component.html',\n standalone: true,\n imports: [CommonModule],\n})\nexport class SubscriptionItemComponent {\n public readonly subscriptionsStore = inject(SubscriptionsStore);\n public readonly portalAccountStore = inject(PortalAccountStore);\n public readonly utils = inject(UtilsService);\n \n public readonly subscription = input.required<StripeSubscriptionPublic>();\n public readonly onManageSubscription = output<string>();\n\n public readonly isStatusLoading = computed(() => this.portalAccountStore.isStatusLoading());\n \n public isExpanded = false;\n \n public toggleExpand(): void {\n this.isExpanded = !this.isExpanded;\n }\n \n public async manageSubscription(): Promise<void> {\n this.onManageSubscription.emit(this.subscription().customer ?? '');\n }\n} ","<div class=\"card bg-base-100 shadow-sm hover:shadow-md transition-shadow duration-200\">\n <div class=\"card-body p-4\">\n <div class=\"flex justify-between\">\n <div>\n <h3 class=\"card-title text-lg\">\n customer: {{ subscription().customer }}\n \n <span class=\"badge badge-soft {{ utils.getStatusBadgeClass(subscription().status) }} status-badge\">\n {{ subscription().status }}\n </span>\n\n @if (subscription().cancel.cancel_at_period_end) {\n <span class=\"badge badge-soft badge-warning ml-2\">Cancelada al final del periodo</span>\n }\n </h3>\n <p class=\"text-gray-600 text-sm\">\n ID: {{ subscription().id }}\n </p>\n </div>\n \n <div class=\"flex gap-2\">\n <button class=\"btn btn-sm btn-ghost\" (click)=\"toggleExpand()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n {{ isExpanded ? 'Ocultar' : 'Detalles' }}\n </button>\n </div>\n </div>\n\n <div class=\"subscription-details mt-2\">\n <div class=\"flex justify-between text-sm\">\n <div>\n <span class=\"font-medium\">Precio: </span><span class=\"text-xl font-bold text-secondary-content\">{{ utils.formatAmount(subscription().plan.amount, subscription().currency ?? 'EUR') }}</span>\n </div>\n <div>\n <span class=\"font-medium\">Período: </span><span class=\"text-md font-bold\">{{ subscription().plan.interval }}</span>\n </div>\n </div>\n </div>\n\n <!-- Expanded Details -->\n @if (isExpanded) {\n <div class=\"subscription-expanded mt-4 border-t pt-4\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div>\n <h4 class=\"text-md font-semibold mb-2\">Detalles del Plan</h4>\n <ul class=\"space-y-1 text-sm\">\n <li><span class=\"font-medium\">Inicio:</span> {{ utils.formatDate(subscription().current_period_start ?? '') }}</li>\n <li><span class=\"font-medium\">Renovación:</span> {{ utils.formatDate(subscription().current_period_end ?? '') }}</li>\n </ul>\n </div>\n \n @if (subscription().cancel.cancel_at_period_end) {\n <div>\n <h4 class=\"text-md font-semibold mb-2\">Detalles de la Cancelación</h4>\n <ul class=\"space-y-1 text-sm\">\n <li><span class=\"font-medium\">Cancelado el: </span> {{ subscription().cancel.canceled_at * 1000 | date:'dd/MM/yyyy' }}</li>\n <li><span class=\"font-medium\">No se renovará el: </span> {{ subscription().cancel.cancel_at * 1000 | date:'dd/MM/yyyy' }}</li>\n <li><span class=\"font-medium\">Feedback: </span> {{ subscription().cancel.cancellation_details.feedback }}</li>\n <li><span class=\"font-medium\">Comentario: </span> {{ subscription().cancel.cancellation_details.comment }}</li>\n </ul>\n </div>\n }\n </div>\n \n <!-- Action Buttons -->\n <div class=\"card-actions mt-4 justify-end\">\n <button class=\"btn btn-sm btn-secondary\" [disabled]=\"isStatusLoading()\" (click)=\"manageSubscription()\">\n @if (isStatusLoading()) {\n <span class=\"loading loading-spinner\"></span>\n loading account\n } @else {\n Manage subscription\n }\n </button>\n </div>\n </div>\n }\n </div>\n</div> ","import { CommonModule } from '@angular/common';\nimport { Component, input, output } from '@angular/core';\nimport { StripeSubscriptionPublic } from '../../../../store/subscriptions.store';\nimport { SubscriptionItemSkeletonComponent } from './subscription-item-skeleton/subscription-item-skeleton.component';\nimport { SubscriptionItemComponent } from './subscription-item/subscription-item.component';\n\n@Component({\n selector: 'lib-subscriptions-list',\n templateUrl: './subscriptions-list.component.html',\n standalone: true,\n imports: [CommonModule, SubscriptionItemComponent, SubscriptionItemSkeletonComponent],\n})\nexport class SubscriptionsListComponent {\n public readonly subscriptions = input.required<StripeSubscriptionPublic[]>();\n public readonly loading = input<boolean>(false);\n public readonly error = input<string | null>(null);\n public readonly withEmptyState = input<boolean>(true);\n\n public readonly onManageSubscription = output<string>();\n\n public manageSubscription(customerId: string): void {\n this.onManageSubscription.emit(customerId);\n }\n} ","<div class=\"subscriptions-container\">\n @if (loading()) {\n <div class=\"flex flex-col gap-4\">\n @for (item of [1,2,3]; track item) {\n <lib-subscription-item-skeleton></lib-subscription-item-skeleton>\n }\n </div>\n } @else if (error()) {\n <div class=\"error-container\">\n <div class=\"alert alert-error\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"stroke-current shrink-0 h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\" /></svg>\n <span>{{ error() }}</span>\n </div>\n </div>\n } @else if (subscriptions().length > 0) {\n <div class=\"subscriptions-list flex flex-col gap-4\">\n @for (subscription of subscriptions(); track subscription.id) {\n <lib-subscription-item \n [subscription]=\"subscription\"\n (onManageSubscription)=\"manageSubscription($event)\">\n </lib-subscription-item>\n }\n </div>\n } @else if (withEmptyState() && subscriptions().length === 0 && !loading()) {\n <div class=\"empty-state\">\n <div class=\"card bg-base-100 shadow-sm\">\n <div class=\"card-body items-center text-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-12 w-12 text-gray-400 mb-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <h2 class=\"card-title text-xl\">No tienes suscripciones activas</h2>\n <p class=\"text-gray-600\">Consulta nuestros planes para comenzar una suscripción.</p>\n </div>\n </div>\n </div>\n }\n</div> ","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-subscription-card-skeleton',\n templateUrl: './subscription-card-skeleton.component.html',\n standalone: true\n})\nexport class SubscriptionCardSkeletonComponent {}\n","<div class=\"card bg-base-100 w-96 shadow-sm\">\n <figure class=\"flex items-center justify-center\">\n <div class=\"skeleton h-48 w-full\"></div>\n </figure>\n <div class=\"card-body\">\n <div class=\"flex justify-between items-center\">\n <div class=\"skeleton h-8 w-2/3\"></div>\n <div class=\"skeleton h-6 w-24 rounded-full\"></div>\n </div>\n \n <div class=\"mt-3\">\n <div class=\"skeleton h-4 w-full\"></div>\n <div class=\"skeleton h-4 w-5/6 mt-2\"></div>\n </div>\n \n <div class=\"card-actions justify-end mt-4\">\n <div class=\"skeleton h-10 w-40 rounded-lg\"></div>\n </div>\n </div>\n</div> ","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, output } from '@angular/core';\nimport { StripeSubscriptionPublic } from '../../../../store/subscriptions.store';\nimport { SubscriptionCardSkeletonComponent } from './subscription-card-skeleton/subscription-card-skeleton.component';\nimport { UtilsService } from '../../../../services/utils.service';\n\n@Component({\n selector: 'lib-subscription-card',\n templateUrl: './subscription-card.component.html',\n standalone: true,\n imports: [CommonModule, SubscriptionCardSkeletonComponent],\n})\nexport class SubscriptionCardComponent {\n public readonly subscription = input.required<StripeSubscriptionPublic>();\n public readonly loading = input<boolean>(false);\n public readonly error = input<string | null>(null);\n\n public readonly utils = inject(UtilsService);\n \n public readonly onManageSubscription = output<string>();\n \n public hasValidProductImages(): boolean {\n const subscription = this.subscription();\n return !!subscription?.product && Array.isArray(subscription.product.images) && subscription.product.images.length > 0;\n }\n\n public getProductImage(): string {\n return this.subscription()?.product?.images?.[0] || '';\n }\n\n public getProductName(): string {\n return this.subscription()?.product?.name || '';\n }\n \n /**\n * Emit the customer ID to manage subscription\n */\n public manageSubscription(): void {\n this.onManageSubscription.emit(this.subscription().customer as string);\n }\n} ","@if (loading()) {\n <lib-subscription-card-skeleton></lib-subscription-card-skeleton>\n} @else if (error()) {\n <div class=\"alert alert-error\">{{ error() }}</div>\n} @else if (subscription()) {\n <div class=\"card bg-base-100 w-96 shadow-sm \">\n @if (hasValidProductImages()) {\n <figure class=\"flex items-center justify-center\">\n <img [src]=\"getProductImage()\" [alt]=\"getProductName()\" class=\"h-48 w-full object-cover\" />\n </figure>\n }\n <div class=\"card-body\">\n <div class=\"flex justify-between items-center\">\n <h2 class=\"card-title\">{{ getProductName() }}</h2>\n <span class=\"badge badge-soft {{ utils.getStatusBadgeClass(subscription().status) }} subscription-status\">\n {{ subscription().status }}\n </span>\n </div>\n \n <div class=\"mt-3\">\n <p class=\"opacity-75\">{{ subscription().product?.description }}</p>\n </div>\n \n <div class=\"card-actions justify-end\">\n <button class=\"btn btn-primary\" (click)=\"manageSubscription()\">\n Manage Subscription\n </button>\n </div>\n </div>\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-payment-intent-item-skeleton',\n templateUrl: './payment-intent-item-skeleton.component.html',\n standalone: true,\n imports: [CommonModule]\n})\nexport class PaymentIntentItemSkeletonComponent {} ","<div class=\"card bg-base-100 shadow-sm card-skeleton\">\n <div class=\"card-body p-4\">\n <!-- Header with status and expand button -->\n <div class=\"flex justify-between\">\n <div class=\"w-full\">\n <div class=\"flex items-center\">\n <!-- Title/Status placeholder -->\n <div class=\"skeleton w-32 h-6 rounded-md\"></div>\n <!-- Badge placeholder -->\n <div class=\"skeleton w-24 h-6 ml-2 rounded-full\"></div>\n </div>\n <!-- Customer ID placeholder -->\n <div class=\"skeleton w-48 h-4 mt-2 rounded-md\"></div>\n </div>\n \n <!-- Details button placeholder -->\n <div class=\"skeleton w-20 h-8 rounded-md\"></div>\n </div>\n\n <!-- Payment details summary -->\n <div class=\"flex justify-between mt-3\">\n <div>\n <!-- Amount placeholder -->\n <div class=\"skeleton w-32 h-8 rounded-md\"></div>\n </div>\n <div>\n <!-- Date placeholder -->\n <div class=\"skeleton w-28 h-6 rounded-md\"></div>\n </div>\n </div>\n \n <!-- Optional expanded details placeholder -->\n <div class=\"mt-4 border-t pt-4\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div>\n <!-- Details heading placeholder -->\n <div class=\"skeleton w-36 h-5 mb-3 rounded-md\"></div>\n \n <!-- List items placeholders -->\n <div class=\"space-y-2\">\n <div class=\"skeleton w-full h-4 rounded-md\"></div>\n <div class=\"skeleton w-full h-4 rounded-md\"></div>\n <div class=\"skeleton w-3/4 h-4 rounded-md\"></div>\n </div>\n </div>\n \n <div>\n <!-- Second column heading placeholder -->\n <div class=\"skeleton w-36 h-5 mb-3 rounded-md\"></div>\n \n <!-- List items placeholders -->\n <div class=\"space-y-2\">\n <div class=\"skeleton w-full h-4 rounded-md\"></div>\n <div class=\"skeleton w-2/3 h-4 rounded-md\"></div>\n </div>\n </div>\n </div>\n \n <!-- Action button placeholder -->\n <div class=\"flex justify-end mt-4\">\n <div class=\"skeleton w-36 h-10 rounded-md\"></div>\n </div>\n </div>\n </div>\n</div> ","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, signal } from '@angular/core';\nimport { StripePaymentIntentsPublic } from '../../../../../store/customer.store';\nimport { UtilsService } from '../../../../../services/utils.service';\n\n@Component({\n selector: 'lib-payment-intent-item',\n templateUrl: './payment-intent-item.component.html',\n standalone: true,\n imports: [CommonModule]\n})\nexport class PaymentIntentItemComponent {\n public readonly paymentIntent = input.required<StripePaymentIntentsPublic>();\n \n public readonly utils = inject(UtilsService);\n \n public readonly isExpanded = signal(false);\n \n public toggleExpand(): void {\n this.isExpanded.update(value => !value);\n }\n} ","<div class=\"card bg-base-100 shadow-sm hover:shadow-md transition-shadow duration-200 card-hover\">\n <div class=\"card-body p-4\">\n <div class=\"flex justify-between\">\n <div>\n <h3 class=\"card-title text-lg\">\n Customer: {{ paymentIntent().customer }}\n </h3>\n </div>\n \n <div class=\"flex gap-2\">\n <button class=\"btn btn-sm btn-ghost\" (click)=\"toggleExpand()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n {{ isExpanded() ? 'Ocultar' : 'Detalles' }}\n </button>\n </div>\n </div>\n\n <div class=\"payment-intent-details mt-2\">\n <div class=\"flex justify-start items-center gap-4 text-sm\">\n <div>\n <span class=\"font-medium\">Precio: </span><span class=\"text-xl font-bold text-secondary-content\">{{ utils.formatAmount(paymentIntent().amount ?? 0, paymentIntent().currency ?? 'EUR') }}</span>\n </div>\n <div>\n <span class=\"badge badge-outline\">\n {{ paymentIntent().paymentMethodId }}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Expanded Details -->\n @if (isExpanded()) {\n <div class=\"payment-expanded mt-4 border-t pt-4\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div>\n <h4 class=\"text-md font-semibold mb-2\">Detalles del Pago</h4>\n <ul class=\"space-y-1 text-sm\">\n <li><span class=\"font-medium\">ID Completo:</span> {{ paymentIntent().id }}</li>\n <li><span class=\"font-medium\">Método de pago:</span> {{ paymentIntent().paymentMethodId }}</li>\n <li><span class=\"font-medium\">Método de confirmación:</span> {{ paymentIntent().confirmationMethod }}</li>\n @if (paymentIntent().invoiceId) {\n <li><span class=\"font-medium\">ID de factura:</span> {{ paymentIntent().invoiceId }}</li>\n }\n </ul>\n </div>\n \n <div>\n <ul class=\"space-y-1 text-sm\">\n <li>\n <span class=\"font-medium\">Estado: </span> \n <span class=\"badge {{ utils.getStatusBadgeClass(paymentIntent().status) }} status-badge\">\n {{ paymentIntent().status }}\n </span>\n </li>\n <li><span class=\"font-medium\">Modo: </span> {{ paymentIntent().liveMode ? 'Producción' : 'Pruebas' }}</li>\n </ul>\n </div>\n </div>\n </div>\n }\n </div>\n</div> ","import { CommonModule } from '@angular/common';\nimport { Component, input, output } from '@angular/core';\nimport { StripePaymentIntentsPublic } from '../../../../store/customer.store';\nimport { PaymentIntentItemSkeletonComponent } from './payment-intents-item-skeleton/payment-intent-item-skeleton.component';\nimport { PaymentIntentItemComponent } from './payment-intents-item/payment-intent-item.component';\n\n@Component({\n selector: 'lib-payment-intents-list',\n templateUrl: './payment-intents-list.component.html',\n standalone: true,\n imports: [\n CommonModule,\n PaymentIntentItemSkeletonComponent,\n PaymentIntentItemComponent\n ]\n})\nexport class PaymentIntentsListComponent {\n public readonly paymentIntents = input.required<StripePaymentIntentsPublic[]>();\n public readonly loading = input<boolean>(false);\n public readonly error = input<string | null>(null);\n public readonly withControls = input<boolean>(true);\n \n public readonly onRefresh = output<void>();\n \n protected readonly trackByPaymentIntentId = (index: number, item: StripePaymentIntentsPublic) => item.id;\n \n public refreshPaymentIntents(): void {\n this.onRefresh.emit();\n }\n} ","<div class=\"payment-intents-container\">\n @if (withControls()) {\n <div class=\"controls mb-4 flex justify-between items-center\">\n <div class=\"stats\">\n @if (paymentIntents().length > 0) {\n <span class=\"badge badge-soft badge-info\">{{ paymentIntents().length }} payment intents</span>\n }\n </div>\n <button class=\"btn btn-sm btn-outline\" (click)=\"refreshPaymentIntents()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-4 w-4 mr-1\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n Actualizar\n </button>\n </div>\n }\n\n @if (loading()) {\n <div class=\"flex flex-col gap-4\">\n @for (item of [1,2,3]; track item) {\n <lib-payment-intent-item-skeleton></lib-payment-intent-item-skeleton>\n }\n </div>\n } @else if (error()) {\n <div class=\"error-container\">\n <div class=\"alert alert-error\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"stroke-current shrink-0 h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\" /></svg>\n <span>{{ error() }}</span>\n </div>\n </div>\n } @else if (paymentIntents().length > 0) {\n <div class=\"flex flex-col gap-4\">\n @for (paymentIntent of paymentIntents(); track paymentIntent.id) {\n <lib-payment-intent-item [paymentIntent]=\"paymentIntent\"></lib-payment-intent-item>\n }\n </div>\n } @else {\n <div class=\"empty-state\">\n <div class=\"card bg-base-100 shadow-sm\">\n <div class=\"card-body items-center text-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-12 w-12 text-gray-400 mb-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z\" />\n </svg>\n <h2 class=\"card-title text-xl\">No hay payment intents recientes</h2>\n <p class=\"text-gray-600\">No se encontraron payment intents en tu historial.</p>\n </div>\n </div>\n </div>\n }\n</div> ","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, output } from '@angular/core';\nimport { StripePaymentIntentsPublic } from '../../../../store/customer.store';\nimport { UtilsService } from '../../../../services/utils.service';\n\n@Component({\n selector: 'lib-payment-intents-table',\n templateUrl: './payment-intents-table.component.html',\n standalone: true,\n imports: [\n CommonModule\n ]\n})\nexport class PaymentIntentsTableComponent {\n public readonly paymentIntents = input.required<StripePaymentIntentsPublic[]>();\n\n public paymentIntentsTable = computed(() => {\n return this.paymentIntents().map(paymentIntent => ({\n ...paymentIntent,\n selected: false\n }));\n });\n\n public readonly loading = input<boolean>(false);\n public readonly error = input<string | null>(null);\n public readonly withControls = input<boolean>(true);\n \n public readonly exportSelected = output<StripePaymentIntentsPublic[]>();\n public readonly onRefresh = output<void>();\n \n public readonly utils = inject(UtilsService);\n \n public readonly hasPaymentIntents = computed(() => \n this.paymentIntents() && this.paymentIntents().length > 0\n );\n \n protected readonly trackByPaymentIntentId = (index: number, item: StripePaymentIntentsPublic) => item.id;\n \n public refreshPaymentIntents(): void {\n this.onRefresh.emit();\n }\n\n public allPaymentIntentsSelected(): boolean {\n return this.paymentIntentsTable().every(paymentIntent => paymentIntent.selected);\n }\n\n public somePaymentIntentsSelected(): boolean {\n return this.paymentIntentsTable().some(paymentIntent => paymentIntent.selected);\n }\n\n public toggleAllPaymentIntents(event: Event): void {\n const checkbox = event.target as HTMLInputElement;\n const isChecked = checkbox.checked;\n this.paymentIntentsTable().forEach(paymentIntent => {\n paymentIntent.selected = isChecked;\n });\n }\n\n public togglePaymentIntent(event: Event, id: string): void {\n const checkbox = event.target as HTMLInputElement;\n const isChecked = checkbox.checked;\n const paymentIntent = this.paymentIntentsTable().find(paymentIntent => paymentIntent.id === id);\n if (paymentIntent) {\n paymentIntent.selected = isChecked;\n }\n }\n\n public showDetails(id: string): void {\n const modalElement = document.getElementById(`modal-${id}`) as HTMLDialogElement;\n if (modalElement) {\n modalElement.showModal();\n }\n } \n\n public exportSelectedPaymentIntents(): void {\n this.exportSelected.emit(this.paymentIntentsTable().filter(paymentIntent => paymentIntent.selected));\n }\n} ","<div class=\"payment-intents-container\">\n @if (withControls()) {\n <div class=\"controls mb-4 flex justify-between items-center\">\n <div class=\"stats\">\n @if (hasPaymentIntents()) {\n <span class=\"badge badge-soft badge-info\">{{ paymentIntentsTable().length }} payment intents</span>\n }\n </div>\n <div class=\"flex justify-end items-center gap-2\">\n <button class=\"btn btn-sm btn-outline\" (click)=\"refreshPaymentIntents()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-4 w-4 mr-1\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n Actualizar\n </button>\n <button class=\"btn btn-sm btn-primary\" [disabled]=\"!somePaymentIntentsSelected()\" (click)=\"exportSelectedPaymentIntents()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M8.71 7.71L11 5.41V15a1 1 0 0 0 2 0V5.41l2.29 2.3a1 1 0 0 0 1.42 0a1 1 0 0 0 0-1.42l-4-4a1 1 0 0 0-.33-.21a1 1 0 0 0-.76 0a1 1 0 0 0-.33.21l-4 4a1 1 0 1 0 1.42 1.42M21 14a1 1 0 0 0-1 1v4a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-4a1 1 0 0 0-2 0v4a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-4a1 1 0 0 0-1-1\"/></svg>\n Export Selected\n </button>\n </div>\n </div>\n }\n\n @if (loading()) {\n <div class=\"overflow-x-auto\">\n <div class=\"skeleton h-32 w-full\"></div>\n </div>\n } @else if (error()) {\n <div class=\"error-container\">\n <div class=\"alert alert-error\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"stroke-current shrink-0 h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\" /></svg>\n <span>{{ error() }}</span>\n </div>\n </div>\n } @else if (hasPaymentIntents()) {\n <div class=\"overflow-x-auto rounded-box border border-base-content/5 bg-base-100\">\n <table class=\"table table-zebra\">\n <!-- head -->\n <thead>\n <tr>\n <th>\n <label>\n <input type=\"checkbox\" class=\"checkbox\" (change)=\"toggleAllPaymentIntents($event)\" [checked]=\"allPaymentIntentsSelected()\" />\n </label>\n </th>\n <th>Amount</th>\n <th>Payment Method</th>\n <th>Status</th>\n <th>Mode</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (paymentIntent of paymentIntentsTable(); track trackByPaymentIntentId(0, paymentIntent)) {\n <tr>\n <th>\n <label>\n <input type=\"checkbox\" class=\"checkbox\" (change)=\"togglePaymentIntent($event, paymentIntent.id ?? '')\" [checked]=\"paymentIntent.selected\" />\n </label>\n </th>\n <td>{{ utils.formatAmount(paymentIntent.amount ?? 0, paymentIntent.currency ?? 'EUR') }}</td>\n <td>\n <span class=\"badge badge-outline\">\n {{ paymentIntent.paymentMethodId }}\n </span>\n </td>\n <td>\n <span class=\"badge badge-soft {{ utils.getStatusBadgeClass(paymentIntent.status) }}\">\n {{ paymentIntent.status}}\n </span>\n </td>\n <td>{{ paymentIntent.liveMode ? 'Live' : 'Test' }}</td>\n <td>\n <button class=\"btn btn-xs btn-ghost\" (click)=\"showDetails(paymentIntent.id ?? '')\">\n Details\n </button>\n <dialog id=\"modal-{{ paymentIntent.id }}\" class=\"modal\">\n <div class=\"modal-box\">\n <h3 class=\"font-bold text-lg\">Payment Intent Details</h3>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4\">\n <div>\n <h4 class=\"text-md font-semibold mb-2\">Payment Details</h4>\n <ul class=\"space-y-1 text-sm\">\n <li><span class=\"font-medium\">Full ID:</span> {{ paymentIntent.id }}</li>\n <li><span class=\"font-medium\">Payment Method:</span> {{ paymentIntent.paymentMethodId }}</li>\n <li><span class=\"font-medium\">Confirmation Method:</span> {{ paymentIntent.confirmationMethod }}</li>\n @if (paymentIntent.invoiceId) {\n <li><span class=\"font-medium\">Invoice ID:</span> {{ paymentIntent.invoiceId }}</li>\n }\n </ul>\n </div>\n <div>\n <h4 class=\"text-md font-semibold mb-2\">Status Information</h4>\n <ul class=\"space-y-1 text-sm\">\n <li>\n <span class=\"font-medium\">Status: </span> \n <span class=\"badge badge-soft {{ utils.getStatusBadgeClass(paymentIntent.status) }}\">\n {{ paymentIntent.status }}\n </span>\n </li>\n <li><span class=\"font-medium\">Mode: </span> {{ paymentIntent.liveMode ? 'Production' : 'Test' }}</li>\n <li><span class=\"font-medium\">Amount: </span> {{ utils.formatAmount(paymentIntent.amount ?? 0, paymentIntent.currency ?? 'EUR') }}</li>\n </ul>\n </div>\n </div>\n <div class=\"modal-action\">\n <form method=\"dialog\">\n <button class=\"btn\">Close</button>\n </form>\n </div>\n </div>\n </dialog>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <div class=\"card bg-base-100 shadow-sm\">\n <div class=\"card-body items-center text-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-12 w-12 text-gray-400 mb-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z\" />\n </svg>\n <h2 class=\"card-title text-xl\">No recent payment intents</h2>\n <p class=\"text-gray-600\">No payment intents found in your history.</p>\n </div>\n </div>\n </div>\n }\n</div> ","import { CommonModule } from '@angular/common';\nimport { Component, inject, input } from '@angular/core';\nimport { CustomerStore } from '../../../store/customer.store';\nimport { PortalAccountStore } from '../../../store/portal-account.store';\nimport { SubscriptionCardComponent } from './subscription-card/subscription-card.component';\nimport { SubscriptionsListComponent } from './subscriptions-list/subscriptions-list.component';\n\n@Component({\n selector: 'lib-subscriptions',\n templateUrl: './subscriptions.component.html',\n standalone: true,\n imports: [CommonModule, SubscriptionCardComponent, SubscriptionsListComponent],\n})\nexport class SubscriptionsComponent {\n public readonly customerStore = inject(CustomerStore);\n public readonly portalAccountStore = inject(PortalAccountStore);\n\n public readonly returnUrl = input<string>(window.location.origin + '/account');\n\n public manageSubscription(customerId: string): void {\n this.portalAccountStore.createPortalSession(customerId, this.returnUrl());\n }\n\n public refreshSubscriptions(): void {\n if (this.customerStore.customer().data?.id) {\n this.customerStore.loadSubscriptions(this.customerStore.customer().data?.id as string);\n }\n }\n}\n\n","<div class=\"mb-4 flex flex-col justify-between items-center\">\n <div class=\"mb-6 w-full\">\n <h2 class=\"text-2xl font-bold text-gray-800\">Subscriptions</h2>\n <p class=\"text-gray-600\">Manage your subscriptions and payments in one place</p>\n </div>\n <div class=\"controls mb-4 flex justify-between items-center w-full\">\n <div class=\"stats\">\n @if (customerStore.subscriptions.data().length > 0) {\n <span class=\"badge badge-soft badge-info\">{{ customerStore.subscriptions.data().length}} subscriptions</span>\n }\n </div>\n <button class=\"btn btn-sm btn-outline\" (click)=\"refreshSubscriptions()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-4 w-4 mr-1\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n Updated\n </button>\n </div>\n</div>\n\n<div class=\"flex flex-col gap-4\">\n <lib-subscription-card\n [subscription]=\"customerStore.firstSubscription()\"\n [loading]=\"customerStore.isSubscriptionsStatusLoading()\"\n [error]=\"customerStore.subscriptions.error()\"\n (onManageSubscription)=\"manageSubscription($event)\">\n </lib-subscription-card>\n <lib-subscriptions-list\n [subscriptions]=\"customerStore.restSubscriptions()\"\n [loading]=\"customerStore.isSubscriptionsStatusLoading()\"\n [error]=\"customerStore.subscriptions.error()\"\n [withEmptyState]=\"false\"\n (onManageSubscription)=\"manageSubscription($event)\">\n </lib-subscriptions-list>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, signal } from '@angular/core';\nimport { PaymentIntentsListComponent } from '../../components/customer/payment-intents/payment-intents-list/payment-intents-list.component';\nimport { PaymentIntentsTableComponent } from '../../components/customer/payment-intents/payment-intents-table/payment-intents-table.component';\nimport { SubscriptionsComponent } from '../../components/customer/subscriptions/subscriptions.component';\nimport { CustomerStore, StripePaymentIntentsPublic } from '../../store/customer.store';\n\n@Component({\n selector: 'lib-customer-dashboard',\n templateUrl: './customer.component.html',\n standalone: true,\n imports: [\n CommonModule,\n PaymentIntentsListComponent,\n PaymentIntentsTableComponent,\n SubscriptionsComponent\n ]\n}) \nexport class CustomerDashboardComponent {\n public readonly customerStore = inject(CustomerStore);\n\n public readonly returnUrl = input<string>(window.location.origin + '/account');\n \n public readonly customer = computed(() => this.customerStore.customer().data);\n \n public readonly activeTab = signal<'list' | 'table'>('list');\n\n public refreshPaymentIntents(): void {\n this.customerStore.loadPaymentIntents(this.customerStore.customer().data?.id as string);\n }\n \n public setActiveTab(tab: 'list' | 'table'): void {\n this.activeTab.set(tab);\n }\n\n public exportSelectedPaymentIntents(paymentIntents: StripePaymentIntentsPublic[]): void {\n console.log('[💰 CustomerDashboardComponent] exportSelectedPaymentIntents: ', paymentIntents);\n }\n}\n","<div class=\"container flex flex-col gap-6 mx-auto\">\n <!-- Subscriptions Section -->\n <section class=\"flex flex-col\">\n <lib-subscriptions [returnUrl]=\"returnUrl()\"></lib-subscriptions>\n </section>\n\n <!-- Payment Intents Section with Tabs -->\n <section class=\"flex flex-col\">\n <header class=\"mb-4\">\n <h2 class=\"text-2xl font-bold text-gray-800\">Payment Intents</h2>\n <p class=\"text-gray-600\">Payment intents history. Select a tab to see the list or table view.</p>\n </header>\n\n <div role=\"tablist\" class=\"tabs tabs-box w-fit mb-4\">\n <a role=\"tab\" class=\"tab\" [class.tab-active]=\"activeTab() === 'list'\" (click)=\"setActiveTab('list')\">Lista</a>\n <a role=\"tab\" class=\"tab\" [class.tab-active]=\"activeTab() === 'table'\" (click)=\"setActiveTab('table')\">Tabla</a>\n </div>\n\n @if (activeTab() === 'list') {\n <lib-payment-intents-list\n [paymentIntents]=\"customerStore.paymentIntents.data()\"\n [loading]=\"customerStore.isPaymentIntentsStatusLoading()\"\n [error]=\"customerStore.paymentIntents.error()\"\n (onRefresh)=\"refreshPaymentIntents()\">\n </lib-payment-intents-list>\n } @else {\n <lib-payment-intents-table\n [paymentIntents]=\"customerStore.paymentIntents.data()\"\n [loading]=\"customerStore.isPaymentIntentsStatusLoading()\"\n [error]=\"customerStore.paymentIntents.error()\"\n (exportSelected)=\"exportSelectedPaymentIntents($event)\"\n (onRefresh)=\"refreshPaymentIntents()\">\n </lib-payment-intents-table>\n }\n </section>\n</div>\n","export type Json =\n | string\n | number\n | boolean\n | null\n | { [key: string]: Json | undefined }\n | Json[]\n\nexport type Database = {\n public: {\n Tables: {\n [_ in never]: never\n }\n Views: {\n [_ in never]: never\n }\n Functions: {\n get_stripe_customer: {\n Args: { customer_email: string }\n Returns: {\n id: string\n email: string\n name: string\n description: string\n created: string\n attrs: Json\n }[]\n }\n get_stripe_customer_payment_intents: {\n Args: { customer_id: string }\n Returns: {\n id: string\n customer: string\n amount: number\n currency: string\n payment_method: string\n created: string\n attrs: Json\n }[]\n }\n get_stripe_customer_subscriptions: {\n Args: { customer_id: string }\n Returns: {\n id: string\n customer: string\n currency: string\n current_period_start: string\n current_period_end: string\n attrs: Json\n }[]\n }\n get_stripe_prices: {\n Args: Record<PropertyKey, never>\n Returns: {\n id: string\n active: boolean\n currency: string\n product: string\n unit_amount: number\n type: string\n attrs: Json\n }[]\n }\n get_stripe_product: {\n Args: { product_id: string }\n Returns: {\n id: string\n name: string\n active: boolean\n default_price: string\n description: string\n attrs: Json\n }[]\n }\n get_stripe_products: {\n Args: Record<PropertyKey, never>\n Returns: {\n id: string\n name: string\n active: boolean\n default_price: string\n description: string\n attrs: Json\n }[]\n }\n get_stripe_subscription: {\n Args: { subscription_id: string }\n Returns: {\n id: string\n customer: string\n currency: string\n current_period_start: string\n current_period_end: string\n attrs: Json\n }[]\n }\n get_stripe_subscriptions: {\n Args: Record<PropertyKey, never>\n Returns: {\n id: string\n customer: string\n currency: string\n current_period_start: string\n current_period_end: string\n attrs: Json\n }[]\n }\n }\n Enums: {\n [_ in never]: never\n }\n CompositeTypes: {\n [_ in never]: never\n }\n }\n stripe: {\n Tables: {\n checkout_sessions: {\n Row: {\n attrs: Json | null\n customer: string | null\n id: string | null\n payment_intent: string | null\n subscription: string | null\n }\n Insert: {\n attrs?: Json | null\n customer?: string | null\n id?: string | null\n payment_intent?: string | null\n subscription?: string | null\n }\n Update: {\n attrs?: Json | null\n customer?: string | null\n id?: string | null\n payment_intent?: string | null\n subscription?: string | null\n }\n Relationships: []\n }\n customers: {\n Row: {\n attrs: Json | null\n created: string | null\n description: string | null\n email: string | null\n id: string | null\n name: string | null\n }\n Insert: {\n attrs?: Json | null\n created?: string | null\n description?: string | null\n email?: string | null\n id?: string | null\n name?: string | null\n }\n Update: {\n attrs?: Json | null\n created?: string | null\n description?: string | null\n email?: string | null\n id?: string | null\n name?: string | null\n }\n Relationships: []\n }\n payment_intents: {\n Row: {\n amount: number | null\n attrs: Json | null\n created: string | null\n currency: string | null\n customer: string | null\n id: string | null\n payment_method: string | null\n }\n Insert: {\n amount?: number | null\n attrs?: Json | null\n created?: string | null\n currency?: string | null\n customer?: string | null\n id?: string | null\n payment_method?: string | null\n }\n Update: {\n amount?: number | null\n attrs?: Json | null\n created?: string | null\n currency?: string | null\n customer?: string | null\n id?: string | null\n payment_method?: string | null\n }\n Relationships: []\n }\n prices: {\n Row: {\n active: boolean | null\n attrs: Json | null\n created: string | null\n currency: string | null\n id: string | null\n product: string | null\n type: string | null\n unit_amount: number | null\n }\n Insert: {\n active?: boolean | null\n attrs?: Json | null\n created?: string | null\n currency?: string | null\n id?: string | null\n product?: string | null\n type?: string | null\n unit_amount?: number | null\n }\n Update: {\n active?: boolean | null\n attrs?: Json | null\n created?: string | null\n currency?: string | null\n id?: string | null\n product?: string | null\n type?: string | null\n unit_amount?: number | null\n }\n Relationships: []\n }\n products: {\n Row: {\n active: boolean | null\n attrs: Json | null\n created: string | null\n default_price: string | null\n description: string | null\n id: string | null\n name: string | null\n updated: string | null\n }\n Insert: {\n active?: boolean | null\n attrs?: Json | null\n created?: string | null\n default_price?: string | null\n description?: string | null\n id?: string | null\n name?: string | null\n updated?: string | null\n }\n Update: {\n active?: boolean | null\n attrs?: Json | null\n created?: string | null\n default_price?: string | null\n description?: string | null\n id?: string | null\n name?: string | null\n updated?: string | null\n }\n Relationships: []\n }\n subscriptions: {\n Row: {\n attrs: Json | null\n currency: string | null\n current_period_end: string | null\n current_period_start: string | null\n customer: string | null\n id: string | null\n }\n Insert: {\n attrs?: Json | null\n currency?: string | null\n current_period_end?: string | null\n current_period_start?: string | null\n customer?: string | null\n id?: string | null\n }\n Update: {\n attrs?: Json | null\n currency?: string | null\n current_period_end?: string | null\n current_period_start?: string | null\n customer?: string | null\n id?: string | null\n }\n Relationships: []\n }\n }\n Views: {\n [_ in never]: never\n }\n Functions: {\n [_ in never]: never\n }\n Enums: {\n [_ in never]: never\n }\n CompositeTypes: {\n [_ in never]: never\n }\n }\n}\n\ntype DefaultSchema = Database[Extract<keyof Database, \"public\">]\n\nexport type Tables<\n DefaultSchemaTableNameOrOptions extends\n | keyof (DefaultSchema[\"Tables\"] & DefaultSchema[\"Views\"])\n | { schema: keyof Database },\n TableName extends DefaultSchemaTableNameOrOptions extends {\n schema: keyof Database\n }\n ? keyof (Database[DefaultSchemaTableNameOrOptions[\"schema\"]][\"Tables\"] &\n Database[DefaultSchemaTableNameOrOptions[\"schema\"]][\"Views\"])\n : never = never,\n> = DefaultSchemaTableNameOrOptions extends { schema: keyof Database }\n ? (Database[DefaultSchemaTableNameOrOptions[\"schema\"]][\"Tables\"] &\n Database[DefaultSchemaTableNameOrOptions[\"schema\"]][\"Views\"])[TableName] extends {\n Row: infer R\n }\n ? R\n : never\n : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema[\"Tables\"] &\n DefaultSchema[\"Views\"])\n ? (DefaultSchema[\"Tables\"] &\n DefaultSchema[\"Views\"])[DefaultSchemaTableNameOrOptions] extends {\n Row: infer R\n }\n ? R\n : never\n : never\n\nexport type TablesInsert<\n DefaultSchemaTableNameOrOptions extends\n | keyof DefaultSchema[\"Tables\"]\n | { schema: keyof Database },\n TableName extends DefaultSchemaTableNameOrOptions extends {\n schema: keyof Database\n }\n ? keyof Database[DefaultSchemaTableNameOrOptions[\"schema\"]][\"Tables\"]\n : never = never,\n> = DefaultSchemaTableNameOrOptions extends { schema: keyof Database }\n ? Database[DefaultSchemaTableNameOrOptions[\"schema\"]][\"Tables\"][TableName] extends {\n Insert: infer I\n }\n ? I\n : never\n : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema[\"Tables\"]\n ? DefaultSchema[\"Tables\"][DefaultSchemaTableNameOrOptions] extends {\n Insert: infer I\n }\n ? I\n : never\n : never\n\nexport type TablesUpdate<\n DefaultSchemaTableNameOrOptions extends\n | keyof DefaultSchema[\"Tables\"]\n | { schema: keyof Database },\n TableName extends DefaultSchemaTableNameOrOptions extends {\n schema: keyof Database\n }\n ? keyof Database[DefaultSchemaTableNameOrOptions[\"schema\"]][\"Tables\"]\n : never = never,\n> = DefaultSchemaTableNameOrOptions extends { schema: keyof Database }\n ? Database[DefaultSchemaTableNameOrOptions[\"schema\"]][\"Tables\"][TableName] extends {\n Update: infer U\n }\n ? U\n : never\n : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema[\"Tables\"]\n ? DefaultSchema[\"Tables\"][DefaultSchemaTableNameOrOptions] extends {\n Update: infer U\n }\n ? U\n : never\n : never\n\nexport type Enums<\n DefaultSchemaEnumNameOrOptions extends\n | keyof DefaultSchema[\"Enums\"]\n | { schema: keyof Database },\n EnumName extends DefaultSchemaEnumNameOrOptions extends {\n schema: keyof Database\n }\n ? keyof Database[DefaultSchemaEnumNameOrOptions[\"schema\"]][\"Enums\"]\n : never = never,\n> = DefaultSchemaEnumNameOrOptions extends { schema: keyof Database }\n ? Database[DefaultSchemaEnumNameOrOptions[\"schema\"]][\"Enums\"][EnumName]\n : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema[\"Enums\"]\n ? DefaultSchema[\"Enums\"][DefaultSchemaEnumNameOrOptions]\n : never\n\nexport type CompositeTypes<\n PublicCompositeTypeNameOrOptions extends\n | keyof DefaultSchema[\"CompositeTypes\"]\n | { schema: keyof Database },\n CompositeTypeName extends PublicCompositeTypeNameOrOptions extends {\n schema: keyof Database\n }\n ? keyof Database[PublicCompositeTypeNameOrOptions[\"schema\"]][\"CompositeTypes\"]\n : never = never,\n> = PublicCompositeTypeNameOrOptions extends { schema: keyof Database }\n ? Database[PublicCompositeTypeNameOrOptions[\"schema\"]][\"CompositeTypes\"][CompositeTypeName]\n : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema[\"CompositeTypes\"]\n ? DefaultSchema[\"CompositeTypes\"][PublicCompositeTypeNameOrOptions]\n : never\n\nexport const Constants = {\n public: {\n Enums: {},\n },\n stripe: {\n Enums: {},\n },\n} as const\n","/*\n * Public API Surface of ngx-supabase-stripe\n */\n\n// Export configurations\nexport * from './lib/config/ngx-supabase-stripe.config';\nexport * from './lib/config/stripe.config';\nexport * from './lib/config/supabase.config';\n\n// Export store\nexport * from './lib/store/checkout.store';\nexport * from './lib/store/products.store';\nexport * from './lib/store/subscriptions.store';\nexport * from './lib/store/customer.store';\n\n// Export services\nexport * from './lib/services/stripe-client.service';\nexport * from './lib/services/supabase-client.service';\n\n// Export components\nexport * from './lib/components/embedded-checkout/embedded-checkout.component';\nexport * from './lib/components/embedded-checkout/return-page/return-page.component';\nexport * from './lib/components/product-list/product-list.component';\nexport * from './lib/components/embedded-subscription/embedded-subscription.component';\nexport * from './lib/components/embedded-subscription/return-page/subscription-return-page.component';\nexport * from './lib/components/customer/subscriptions/subscriptions-list/subscriptions-list.component';\nexport * from './lib/components/customer/subscriptions/subscriptions-list/subscription-item/subscription-item.component';\nexport * from './lib/components/customer/subscriptions/subscription-card/subscription-card.component';\nexport * from './lib/components/customer/payment-intents/payment-intents-list/payment-intents-list.component';\nexport * from './lib/components/customer/payment-intents/payment-intents-list/payment-intents-item/payment-intent-item.component';\nexport * from './lib/components/customer/payment-intents/payment-intents-list/payment-intents-item-skeleton/payment-intent-item-skeleton.component';\nexport * from './lib/pages/customer/customer.component';\n\n// Export types\nexport * from './database.types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { StripePaymentIntentsPublic } from '../../../../../store/customer.store';
|
|
2
|
+
import { UtilsService } from '../../../../../services/utils.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class PaymentIntentItemComponent {
|
|
5
|
+
readonly paymentIntent: import("@angular/core").InputSignal<StripePaymentIntentsPublic>;
|
|
6
|
+
readonly utils: UtilsService;
|
|
7
|
+
readonly isExpanded: import("@angular/core").WritableSignal<boolean>;
|
|
8
|
+
toggleExpand(): void;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PaymentIntentItemComponent, never>;
|
|
10
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PaymentIntentItemComponent, "lib-payment-intent-item", never, { "paymentIntent": { "alias": "paymentIntent"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class PaymentIntentItemSkeletonComponent {
|
|
3
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PaymentIntentItemSkeletonComponent, never>;
|
|
4
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PaymentIntentItemSkeletonComponent, "lib-payment-intent-item-skeleton", never, {}, {}, never, never, true, never>;
|
|
5
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { StripePaymentIntentsPublic } from '../../../../store/customer.store';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class PaymentIntentsListComponent {
|
|
4
|
+
readonly paymentIntents: import("@angular/core").InputSignal<StripePaymentIntentsPublic[]>;
|
|
5
|
+
readonly loading: import("@angular/core").InputSignal<boolean>;
|
|
6
|
+
readonly error: import("@angular/core").InputSignal<string | null>;
|
|
7
|
+
readonly withControls: import("@angular/core").InputSignal<boolean>;
|
|
8
|
+
readonly onRefresh: import("@angular/core").OutputEmitterRef<void>;
|
|
9
|
+
protected readonly trackByPaymentIntentId: (index: number, item: StripePaymentIntentsPublic) => string | null;
|
|
10
|
+
refreshPaymentIntents(): void;
|
|
11
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PaymentIntentsListComponent, never>;
|
|
12
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PaymentIntentsListComponent, "lib-payment-intents-list", never, { "paymentIntents": { "alias": "paymentIntents"; "required": true; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "withControls": { "alias": "withControls"; "required": false; "isSignal": true; }; }, { "onRefresh": "onRefresh"; }, never, never, true, never>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { StripePaymentIntentsPublic } from '../../../../store/customer.store';
|
|
2
|
+
import { UtilsService } from '../../../../services/utils.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class PaymentIntentsTableComponent {
|
|
5
|
+
readonly paymentIntents: import("@angular/core").InputSignal<StripePaymentIntentsPublic[]>;
|
|
6
|
+
paymentIntentsTable: import("@angular/core").Signal<{
|
|
7
|
+
selected: boolean;
|
|
8
|
+
id: string | null;
|
|
9
|
+
customer: string | null;
|
|
10
|
+
amount: number | null;
|
|
11
|
+
currency: string | null;
|
|
12
|
+
payment_method: string | null;
|
|
13
|
+
status: string;
|
|
14
|
+
invoiceId: string;
|
|
15
|
+
liveMode: boolean;
|
|
16
|
+
confirmationMethod: string;
|
|
17
|
+
paymentMethodId: string;
|
|
18
|
+
}[]>;
|
|
19
|
+
readonly loading: import("@angular/core").InputSignal<boolean>;
|
|
20
|
+
readonly error: import("@angular/core").InputSignal<string | null>;
|
|
21
|
+
readonly withControls: import("@angular/core").InputSignal<boolean>;
|
|
22
|
+
readonly exportSelected: import("@angular/core").OutputEmitterRef<StripePaymentIntentsPublic[]>;
|
|
23
|
+
readonly onRefresh: import("@angular/core").OutputEmitterRef<void>;
|
|
24
|
+
readonly utils: UtilsService;
|
|
25
|
+
readonly hasPaymentIntents: import("@angular/core").Signal<boolean>;
|
|
26
|
+
protected readonly trackByPaymentIntentId: (index: number, item: StripePaymentIntentsPublic) => string | null;
|
|
27
|
+
refreshPaymentIntents(): void;
|
|
28
|
+
allPaymentIntentsSelected(): boolean;
|
|
29
|
+
somePaymentIntentsSelected(): boolean;
|
|
30
|
+
toggleAllPaymentIntents(event: Event): void;
|
|
31
|
+
togglePaymentIntent(event: Event, id: string): void;
|
|
32
|
+
showDetails(id: string): void;
|
|
33
|
+
exportSelectedPaymentIntents(): void;
|
|
34
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PaymentIntentsTableComponent, never>;
|
|
35
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PaymentIntentsTableComponent, "lib-payment-intents-table", never, { "paymentIntents": { "alias": "paymentIntents"; "required": true; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "withControls": { "alias": "withControls"; "required": false; "isSignal": true; }; }, { "exportSelected": "exportSelected"; "onRefresh": "onRefresh"; }, never, never, true, never>;
|
|
36
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class SubscriptionCardSkeletonComponent {
|
|
3
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SubscriptionCardSkeletonComponent, never>;
|
|
4
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SubscriptionCardSkeletonComponent, "lib-subscription-card-skeleton", never, {}, {}, never, never, true, never>;
|
|
5
|
+
}
|
package/lib/components/customer/subscriptions/subscription-card/subscription-card.component.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { StripeSubscriptionPublic } from '../../../../store/subscriptions.store';
|
|
2
|
+
import { UtilsService } from '../../../../services/utils.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class SubscriptionCardComponent {
|
|
5
|
+
readonly subscription: import("@angular/core").InputSignal<StripeSubscriptionPublic>;
|
|
6
|
+
readonly loading: import("@angular/core").InputSignal<boolean>;
|
|
7
|
+
readonly error: import("@angular/core").InputSignal<string | null>;
|
|
8
|
+
readonly utils: UtilsService;
|
|
9
|
+
readonly onManageSubscription: import("@angular/core").OutputEmitterRef<string>;
|
|
10
|
+
hasValidProductImages(): boolean;
|
|
11
|
+
getProductImage(): string;
|
|
12
|
+
getProductName(): string;
|
|
13
|
+
/**
|
|
14
|
+
* Emit the customer ID to manage subscription
|
|
15
|
+
*/
|
|
16
|
+
manageSubscription(): void;
|
|
17
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SubscriptionCardComponent, never>;
|
|
18
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SubscriptionCardComponent, "lib-subscription-card", never, { "subscription": { "alias": "subscription"; "required": true; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; }, { "onManageSubscription": "onManageSubscription"; }, never, never, true, never>;
|
|
19
|
+
}
|