@fayz-ai/admin 0.61.0 → 0.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{CommandPalette-B5PMQFDG.js → CommandPalette-XDJJ5E3O.js} +3 -3
- package/dist/{CommandPalette-B5PMQFDG.js.map → CommandPalette-XDJJ5E3O.js.map} +1 -1
- package/dist/ConnectedBrandingSettings-43ZM3HCI.js +680 -0
- package/dist/ConnectedBrandingSettings-43ZM3HCI.js.map +1 -0
- package/dist/ConnectedCompanySettings-I4MALI2Q.js +197 -0
- package/dist/ConnectedCompanySettings-I4MALI2Q.js.map +1 -0
- package/dist/ConnectedModulesSettings-A2VJ5BMJ.js +563 -0
- package/dist/ConnectedModulesSettings-A2VJ5BMJ.js.map +1 -0
- package/dist/ConnectedSecuritySettings-25AHA4HJ.js +189 -0
- package/dist/ConnectedSecuritySettings-25AHA4HJ.js.map +1 -0
- package/dist/ConnectedUserProfile-E7USJRUE.js +424 -0
- package/dist/ConnectedUserProfile-E7USJRUE.js.map +1 -0
- package/dist/FieldRulesEditor-YGIPKI5T.js +129 -0
- package/dist/FieldRulesEditor-YGIPKI5T.js.map +1 -0
- package/dist/GettingStartedWidget-HMIJ3Y24.js +12 -0
- package/dist/GettingStartedWidget-HMIJ3Y24.js.map +1 -0
- package/dist/PermissionProfilesTab-3ZPRCHMZ.js +548 -0
- package/dist/PermissionProfilesTab-3ZPRCHMZ.js.map +1 -0
- package/dist/PersonTimeline-HQZT527S.js +3 -0
- package/dist/{PersonTimeline-X7JTPUWJ.js.map → PersonTimeline-HQZT527S.js.map} +1 -1
- package/dist/ProjectsSettings-7O2F27MD.js +5 -0
- package/dist/ProjectsSettings-7O2F27MD.js.map +1 -0
- package/dist/ScheduleEditor-54ELWR45.js +8 -0
- package/dist/{ScheduleEditor-L2UJXKMY.js.map → ScheduleEditor-54ELWR45.js.map} +1 -1
- package/dist/SeuSiteWidget-QLSUVC63.js +6 -0
- package/dist/SeuSiteWidget-QLSUVC63.js.map +1 -0
- package/dist/SubscriptionPage-5GE5HFJK.js +17 -0
- package/dist/{SubscriptionPage-IDVEFLZ5.js.map → SubscriptionPage-5GE5HFJK.js.map} +1 -1
- package/dist/TeamTab-6RAULFLW.js +502 -0
- package/dist/TeamTab-6RAULFLW.js.map +1 -0
- package/dist/TrialWidget-Z6CLUCU3.js +7 -0
- package/dist/TrialWidget-Z6CLUCU3.js.map +1 -0
- package/dist/app/AdminShell.d.ts.map +1 -1
- package/dist/app/admin-app.d.ts.map +1 -1
- package/dist/app/config.d.ts +14 -0
- package/dist/app/config.d.ts.map +1 -1
- package/dist/app/routing.d.ts +6 -0
- package/dist/app/routing.d.ts.map +1 -1
- package/dist/app/scaffold.d.ts.map +1 -1
- package/dist/billing/index.js +9 -4
- package/dist/chunk-2H46WDG5.js +53 -0
- package/dist/chunk-2H46WDG5.js.map +1 -0
- package/dist/chunk-3HLX7YB2.js +94 -0
- package/dist/chunk-3HLX7YB2.js.map +1 -0
- package/dist/chunk-3OUD4XBK.js +3 -0
- package/dist/chunk-3OUD4XBK.js.map +1 -0
- package/dist/{chunk-IXSY4GPK.js → chunk-5D5QLMOQ.js} +5 -3
- package/dist/chunk-5D5QLMOQ.js.map +1 -0
- package/dist/chunk-5WR62X2R.js +1081 -0
- package/dist/chunk-5WR62X2R.js.map +1 -0
- package/dist/{chunk-KPYRTOCK.js → chunk-6CQFGMEO.js} +4 -140
- package/dist/chunk-6CQFGMEO.js.map +1 -0
- package/dist/chunk-6MMSYC2I.js +116 -0
- package/dist/chunk-6MMSYC2I.js.map +1 -0
- package/dist/chunk-6QFOE3UD.js +1466 -0
- package/dist/chunk-6QFOE3UD.js.map +1 -0
- package/dist/chunk-6UUFVQ2E.js +283 -0
- package/dist/chunk-6UUFVQ2E.js.map +1 -0
- package/dist/chunk-7WNLL3F6.js +7889 -0
- package/dist/chunk-7WNLL3F6.js.map +1 -0
- package/dist/chunk-A74IHAQE.js +439 -0
- package/dist/chunk-A74IHAQE.js.map +1 -0
- package/dist/{chunk-JOBRLBIQ.js → chunk-AFA6IO23.js} +4 -3
- package/dist/chunk-AFA6IO23.js.map +1 -0
- package/dist/{chunk-P5UIGQFY.js → chunk-ALCSIN3Z.js} +5 -5
- package/dist/chunk-ALCSIN3Z.js.map +1 -0
- package/dist/chunk-AWM4AMBS.js +39 -0
- package/dist/chunk-AWM4AMBS.js.map +1 -0
- package/dist/{chunk-OQARLKZN.js → chunk-BG5Z6KLN.js} +6 -18
- package/dist/chunk-BG5Z6KLN.js.map +1 -0
- package/dist/chunk-DPNFZONC.js +19 -0
- package/dist/chunk-DPNFZONC.js.map +1 -0
- package/dist/chunk-DRCV643L.js +193 -0
- package/dist/chunk-DRCV643L.js.map +1 -0
- package/dist/chunk-E6DF3VR6.js +206 -0
- package/dist/chunk-E6DF3VR6.js.map +1 -0
- package/dist/chunk-ENHCVGXZ.js +120 -0
- package/dist/chunk-ENHCVGXZ.js.map +1 -0
- package/dist/chunk-FK6RHGI7.js +56 -0
- package/dist/chunk-FK6RHGI7.js.map +1 -0
- package/dist/chunk-G5HNA5QK.js +233 -0
- package/dist/chunk-G5HNA5QK.js.map +1 -0
- package/dist/chunk-HCFO4Z6A.js +53 -0
- package/dist/chunk-HCFO4Z6A.js.map +1 -0
- package/dist/chunk-JFIU6NQP.js +51 -0
- package/dist/chunk-JFIU6NQP.js.map +1 -0
- package/dist/chunk-JRZJBMOY.js +3 -0
- package/dist/chunk-JRZJBMOY.js.map +1 -0
- package/dist/{chunk-3YP7KW47.js → chunk-JVVOL4BB.js} +41 -512
- package/dist/chunk-JVVOL4BB.js.map +1 -0
- package/dist/chunk-KAQ3UIAA.js +415 -0
- package/dist/chunk-KAQ3UIAA.js.map +1 -0
- package/dist/{chunk-P6XUDT2P.js → chunk-KJELMULA.js} +4 -51
- package/dist/chunk-KJELMULA.js.map +1 -0
- package/dist/chunk-KLO7DKXX.js +1651 -0
- package/dist/chunk-KLO7DKXX.js.map +1 -0
- package/dist/chunk-M2CMDWUI.js +75 -0
- package/dist/chunk-M2CMDWUI.js.map +1 -0
- package/dist/chunk-PQ47MLTH.js +255 -0
- package/dist/chunk-PQ47MLTH.js.map +1 -0
- package/dist/{chunk-VX3WJLKK.js → chunk-QD7BMUDF.js} +17 -8
- package/dist/chunk-QD7BMUDF.js.map +1 -0
- package/dist/{chunk-E4MESMNR.js → chunk-QTSKCPSW.js} +7 -10
- package/dist/chunk-QTSKCPSW.js.map +1 -0
- package/dist/chunk-S56FQKPL.js +186 -0
- package/dist/chunk-S56FQKPL.js.map +1 -0
- package/dist/chunk-SGAFPNMA.js +75 -0
- package/dist/chunk-SGAFPNMA.js.map +1 -0
- package/dist/{chunk-OD7P4L3D.js → chunk-SOKCLVM4.js} +3 -3
- package/dist/{chunk-OD7P4L3D.js.map → chunk-SOKCLVM4.js.map} +1 -1
- package/dist/chunk-TL42NKTH.js +3 -0
- package/dist/chunk-TL42NKTH.js.map +1 -0
- package/dist/chunk-U6ZCO2PS.js +2964 -0
- package/dist/chunk-U6ZCO2PS.js.map +1 -0
- package/dist/chunk-VSXNROYH.js +16 -0
- package/dist/chunk-VSXNROYH.js.map +1 -0
- package/dist/chunk-WPFZCYZL.js +619 -0
- package/dist/chunk-WPFZCYZL.js.map +1 -0
- package/dist/chunk-XFTNIBDW.js +23 -0
- package/dist/chunk-XFTNIBDW.js.map +1 -0
- package/dist/chunk-Y66JDL6I.js +1020 -0
- package/dist/chunk-Y66JDL6I.js.map +1 -0
- package/dist/chunk-YEHIBPIX.js +137 -0
- package/dist/chunk-YEHIBPIX.js.map +1 -0
- package/dist/chunk-YKPPCV2Z.js +53 -0
- package/dist/chunk-YKPPCV2Z.js.map +1 -0
- package/dist/components/chat/markdown.d.ts.map +1 -1
- package/dist/components/plugins/PluginSettingsPanel.d.ts.map +1 -1
- package/dist/components/settings/SettingsPage.d.ts.map +1 -1
- package/dist/components/shared/ConnectionIndicator.d.ts.map +1 -1
- package/dist/connect-XKQJOWR7.js +18 -0
- package/dist/connect-XKQJOWR7.js.map +1 -0
- package/dist/crud/CrudDetailPage.d.ts.map +1 -1
- package/dist/crud/CrudListView.d.ts.map +1 -1
- package/dist/crud/CrudPage.d.ts.map +1 -1
- package/dist/crud/RelatedListTab.d.ts.map +1 -1
- package/dist/crud/archetypes/EntityLink.d.ts +1 -1
- package/dist/crud/archetypes/EntityLink.d.ts.map +1 -1
- package/dist/crud/record-chrome.d.ts.map +1 -1
- package/dist/entity-routes-PGU7EHAD.js +4 -0
- package/dist/{entity-routes-LXOBW5IB.js.map → entity-routes-PGU7EHAD.js.map} +1 -1
- package/dist/hooks/useModuleNavigation.d.ts.map +1 -1
- package/dist/impersonation/ImpersonateDialog.d.ts.map +1 -1
- package/dist/impersonation/session.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11922 -33564
- package/dist/index.js.map +1 -1
- package/dist/lib/connection.d.ts +14 -0
- package/dist/lib/connection.d.ts.map +1 -1
- package/dist/lib/entity-routes.d.ts.map +1 -1
- package/dist/org/index.js +4 -2
- package/dist/plugins/PluginRegistryManager.d.ts.map +1 -1
- package/dist/settings/MessageTemplateRow.d.ts.map +1 -1
- package/dist/timeline/PersonTimeline.d.ts.map +1 -1
- package/dist/timeline/TimelineList.d.ts.map +1 -1
- package/dist/units/UnitRailPage.d.ts.map +1 -1
- package/dist/units/useUnitFilter.d.ts.map +1 -1
- package/package.json +5 -5
- package/dist/PersonTimeline-X7JTPUWJ.js +0 -3
- package/dist/ScheduleEditor-L2UJXKMY.js +0 -6
- package/dist/SubscriptionPage-IDVEFLZ5.js +0 -8
- package/dist/chunk-3YP7KW47.js.map +0 -1
- package/dist/chunk-E4MESMNR.js.map +0 -1
- package/dist/chunk-IXSY4GPK.js.map +0 -1
- package/dist/chunk-JOBRLBIQ.js.map +0 -1
- package/dist/chunk-KPYRTOCK.js.map +0 -1
- package/dist/chunk-OQARLKZN.js.map +0 -1
- package/dist/chunk-P5UIGQFY.js.map +0 -1
- package/dist/chunk-P6XUDT2P.js.map +0 -1
- package/dist/chunk-VX3WJLKK.js.map +0 -1
- package/dist/entity-routes-LXOBW5IB.js +0 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/onboarding/connector-options.tsx","../src/onboarding/packs/beauty.ts","../src/onboarding/packs/food.ts","../src/onboarding/packs/retail.ts","../src/onboarding/packs/index.ts","../src/onboarding/checklist.ts","../src/onboarding/tasks.ts","../src/onboarding/activation.store.ts","../src/onboarding/guided-runner.ts","../src/onboarding/guided.ts","../src/onboarding/GettingStartedWidget.tsx"],"names":["tl","useTourStore","jsx"],"mappings":"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","file":"chunk-Y66JDL6I.js","sourcesContent":["import * as React from 'react'\nimport { tl } from '@fayz-ai/core'\nimport type { SelectableOption } from '@fayz-ai/ui'\nimport { ConnectorMark } from '../components/connect/ConnectorMark'\nimport { SDK_INTEGRATIONS, type SdkIntegration } from '../components/connect/connector-map.generated'\n\n/** The value the \"not on this list\" option carries. Packs key their follow-up text field off it. */\nexport const OTHER_CONNECTOR = 'other'\n\nexport interface ConnectorOptionsFilter {\n /** Connector categories, e.g. `['payments']` or `['marketplace']`. */\n categories?: string[]\n /** Which module brings it — `'shop'`, `'financial'`, `'orders'`. */\n moduleIds?: string[]\n /**\n * Include connectors declared but not implemented yet. On by default: someone\n * telling us what they use today is telling us about THEIR world, not about\n * what we happen to have built.\n */\n includeSoon?: boolean\n /** Options appended before \"other\" — providers with no connector of ours. */\n extras?: ReadonlyArray<{ value: string; label: string }>\n /** Append an \"other\" card that reveals a free-text follow-up. Default true. */\n other?: boolean\n otherLabel?: string\n}\n\n/**\n * The catalogue rows for a filter, deduped by slug.\n *\n * `SDK_INTEGRATIONS` carries one row per (slug, module) pair — Stripe appears\n * under both Financeiro and Loja. As a question about which provider someone\n * uses, that is one answer, so the implemented row wins and the rest collapse.\n */\nexport function connectorRows(filter: ConnectorOptionsFilter): SdkIntegration[] {\n const { categories, moduleIds, includeSoon = true } = filter\n const matched = SDK_INTEGRATIONS.filter((row) => {\n if (!includeSoon && row.status !== 'available') return false\n if (categories?.length && !(row.category && categories.includes(row.category))) return false\n if (moduleIds?.length && !moduleIds.includes(row.moduleId)) return false\n return true\n })\n\n const bySlug = new Map<string, SdkIntegration>()\n for (const row of matched) {\n const seen = bySlug.get(row.slug)\n if (!seen || (seen.status !== 'available' && row.status === 'available')) bySlug.set(row.slug, row)\n }\n return [...bySlug.values()].sort((a, b) => a.name.localeCompare(b.name))\n}\n\n/**\n * One provider's logo, for a hand-written option that happens to name a real app\n * — \"só no iFood\", \"Google Agenda\".\n *\n * People recognise a logo before they finish reading the label, and a list of\n * apps they use should look like the apps they use. Returns undefined for a slug\n * we carry no mark for, so the option simply renders without one.\n */\nexport function brandMark(slug: string): React.ReactNode | undefined {\n const row = SDK_INTEGRATIONS.find((r) => r.slug === slug)\n if (!row) return undefined\n return <ConnectorMark connector={{ id: row.slug, name: row.name, icon: row.icon, logoUrl: row.logoUrl }} size=\"sm\" />\n}\n\n/**\n * A choice list of real providers, with their brand marks — for onboarding\n * questions like \"which gateway do you use today?\" or \"which apps do your\n * orders come from?\".\n *\n * Runs with no tenant and no database on purpose: it is asked while the\n * workspace is still being created.\n */\nexport function connectorOptions(filter: ConnectorOptionsFilter): SelectableOption[] {\n const options: SelectableOption[] = connectorRows(filter).map((row) => ({\n value: row.slug,\n label: row.name,\n icon: <ConnectorMark connector={{ id: row.slug, name: row.name, icon: row.icon, logoUrl: row.logoUrl }} size=\"sm\" />,\n }))\n\n for (const extra of filter.extras ?? []) {\n options.push({ value: extra.value, label: extra.label })\n }\n\n if (filter.other !== false) {\n options.push({\n value: OTHER_CONNECTOR,\n label: filter.otherLabel ?? tl('Another one', 'Outro'),\n hint: tl('Tell us which', 'Conta qual'),\n })\n }\n\n return options\n}\n","import { tl } from '@fayz-ai/core'\nimport type { WizardStepDef } from '@fayz-ai/ui'\nimport { brandMark } from '../connector-options'\nimport type { QuestionPack } from '../types'\n\n/** Salons, barbershops, studios, clinics — everyone who sells appointments. */\nexport const beautyPack: QuestionPack = (ctx): WizardStepDef[] => [\n {\n id: 'beauty.business',\n eyebrow: tl('Your work', 'Seu trabalho'),\n title: tl('What kind of business is it?', 'Que tipo de negócio é o seu?'),\n media: ctx.media?.['beauty.business'],\n fields: [\n {\n // The whole funnel for this vertical lives here, so it has to name the\n // businesses that actually buy it — a tattoo studio and a brow bar run\n // the same operation as a salon, and neither recognises itself in\n // \"beauty and wellness\".\n id: 'beauty.businessType',\n kind: 'cards',\n required: true,\n columns: 3,\n options: [\n { value: 'salon', label: tl('Hair salon', 'Salão de beleza') },\n { value: 'barber', label: tl('Barbershop', 'Barbearia') },\n { value: 'aesthetics', label: tl('Aesthetics clinic', 'Clínica de estética') },\n { value: 'nails-lashes', label: tl('Nails / lashes studio', 'Studio de unhas / cílios') },\n { value: 'brows-waxing', label: tl('Brows & waxing', 'Sobrancelhas / depilação') },\n { value: 'tattoo', label: tl('Tattoo / piercing studio', 'Studio de tatuagem / piercing') },\n { value: 'spa', label: tl('Spa & massage', 'Spa / massagem') },\n { value: 'wellness', label: tl('Wellness practice', 'Terapias e bem-estar') },\n { value: 'other', label: tl('Something else', 'Outro') },\n ],\n },\n {\n id: 'beauty.businessTypeOther',\n kind: 'text',\n label: tl('Which one?', 'Qual?'),\n placeholder: tl('The name is enough', 'O nome já basta'),\n visibleWhen: (v) => v['beauty.businessType'] === 'other',\n },\n ],\n },\n {\n id: 'beauty.booking',\n eyebrow: tl('Your agenda', 'Sua agenda'),\n title: tl('How do clients book with you today?', 'Como os clientes marcam hoje?'),\n subtitle: tl(\n 'This is the part we replace first, so it is worth being precise.',\n 'É a parte que a gente substitui primeiro, então vale ser preciso.',\n ),\n media: ctx.media?.['beauty.booking'],\n fields: [\n {\n id: 'beauty.bookingToday',\n kind: 'cards',\n required: true,\n columns: 2,\n options: [\n { value: 'whatsapp', label: 'WhatsApp', hint: tl('One conversation at a time', 'Uma conversa de cada vez'), icon: brandMark('whatsapp') },\n { value: 'paper', label: tl('Paper diary', 'Agenda de papel') },\n { value: 'google', label: tl('Google Calendar', 'Google Agenda'), icon: brandMark('google-calendar') },\n { value: 'system', label: tl('Another system', 'Outro sistema'), hint: tl('Tell us which below', 'Conta qual abaixo') },\n ],\n },\n {\n id: 'beauty.bookingSystemName',\n kind: 'text',\n label: tl('Which system?', 'Qual sistema?'),\n placeholder: tl('e.g. Belle, Trinks', 'ex.: Belle, Trinks'),\n visibleWhen: (v) => v['beauty.bookingToday'] === 'system',\n },\n {\n id: 'beauty.deposit',\n kind: 'toggle',\n label: tl('I charge a deposit to hold the slot', 'Cobro sinal para segurar o horário'),\n },\n ],\n },\n {\n id: 'beauty.reach',\n eyebrow: tl('Where', 'Onde'),\n title: tl('Where do you see clients?', 'Onde você atende?'),\n media: ctx.media?.['beauty.reach'],\n fields: [\n {\n id: 'beauty.professionals',\n kind: 'chips',\n label: tl('How many professionals work there?', 'Quantos profissionais atendem?'),\n required: true,\n options: [\n { value: '1', label: tl('Just me', 'Só eu') },\n { value: '2-5', label: '2–5' },\n { value: '6-15', label: '6–15' },\n { value: 'gt15', label: tl('More than 15', 'Mais de 15') },\n ],\n },\n {\n id: 'beauty.where',\n kind: 'cards',\n required: true,\n columns: 3,\n options: [\n { value: 'fixed', label: tl('A fixed space', 'Espaço fixo') },\n { value: 'home-visits', label: tl('At the client', 'Na casa do cliente') },\n { value: 'both', label: tl('Both', 'Os dois') },\n ],\n },\n {\n id: 'beauty.sellsProducts',\n kind: 'toggle',\n label: tl('I also sell products', 'Também vendo produtos'),\n },\n ],\n },\n]\n","import { tl } from '@fayz-ai/core'\nimport type { WizardStepDef, WizardValues } from '@fayz-ai/ui'\nimport { connectorOptions, OTHER_CONNECTOR } from '../connector-options'\nimport type { QuestionPack } from '../types'\n\nfunction serves(values: WizardValues, mode: string): boolean {\n const picked = values['food.serviceModes']\n return Array.isArray(picked) && picked.includes(mode)\n}\n\n/** Restaurants, bars and anything that plates food. */\nexport const foodPack: QuestionPack = (ctx): WizardStepDef[] => [\n {\n id: 'food.operation',\n eyebrow: tl('Your operation', 'Sua operação'),\n title: tl('What kind of place is it?', 'Que tipo de operação é a sua?'),\n media: ctx.media?.['food.operation'],\n fields: [\n {\n id: 'food.operation',\n kind: 'cards',\n required: true,\n columns: 3,\n options: [\n { value: 'restaurant', label: tl('Restaurant', 'Restaurante') },\n { value: 'snack-bar', label: tl('Snack bar', 'Lanchonete') },\n { value: 'pizzeria', label: tl('Pizzeria', 'Pizzaria') },\n { value: 'cafe', label: tl('Café', 'Cafeteria') },\n { value: 'bar', label: tl('Bar', 'Bar') },\n { value: 'dark-kitchen', label: tl('Dark kitchen', 'Dark kitchen') },\n { value: 'food-truck', label: tl('Food truck', 'Food truck') },\n { value: 'bakery', label: tl('Bakery', 'Padaria') },\n { value: 'other', label: tl('Something else', 'Outro') },\n ],\n },\n ],\n },\n {\n id: 'food.service',\n eyebrow: tl('Service', 'Atendimento'),\n title: tl('How do people order from you?', 'Como as pessoas pedem?'),\n subtitle: tl(\n 'Each channel turns on a different part of the system — pick all of them.',\n 'Cada canal liga uma parte diferente do sistema — marque todos.',\n ),\n media: ctx.media?.['food.service'],\n fields: [\n {\n id: 'food.serviceModes',\n kind: 'cards',\n multi: true,\n required: true,\n columns: 2,\n options: [\n { value: 'dine-in', label: tl('Dining room', 'Salão'), hint: tl('Tables and tabs', 'Mesas e comandas') },\n { value: 'counter', label: tl('Counter / takeaway', 'Balcão / retirada') },\n { value: 'own-delivery', label: tl('My own delivery', 'Delivery próprio') },\n { value: 'aggregator', label: tl('Delivery apps', 'Apps de entrega'), hint: tl('Someone else takes the order', 'O pedido chega por eles') },\n ],\n },\n {\n // The real list, on the same screen as the answer that asks for it.\n // Naming two brands on a card meant guessing which two, and being wrong\n // for everyone on the third.\n id: 'food.marketplaceApps',\n kind: 'cards',\n multi: true,\n columns: 3,\n label: tl('Which ones?', 'Quais?'),\n visibleWhen: (v) => serves(v, 'aggregator'),\n options: connectorOptions({\n categories: ['marketplace'],\n moduleIds: ['orders'],\n // No connector of ours yet, but they are half the market — and the\n // answer is about their operation, not our roadmap.\n extras: [\n { value: 'rappi', label: 'Rappi' },\n { value: 'aiqfome', label: 'aiqfome' },\n { value: 'uber-eats', label: 'Uber Eats' },\n ],\n }),\n },\n {\n id: 'food.marketplaceOther',\n kind: 'text',\n label: tl('Which one?', 'Qual?'),\n placeholder: tl('The name is enough', 'O nome já basta'),\n visibleWhen: (v) => Array.isArray(v['food.marketplaceApps']) && v['food.marketplaceApps'].includes(OTHER_CONNECTOR),\n },\n {\n id: 'food.tables',\n kind: 'chips',\n label: tl('How many tables?', 'Quantas mesas?'),\n // Counted inside the room, not on the menu page.\n suggestable: false,\n visibleWhen: (v) => serves(v, 'dine-in'),\n options: [\n { value: 'lt10', label: tl('Up to 10', 'Até 10') },\n { value: '10-25', label: '10–25' },\n { value: '25-50', label: '25–50' },\n { value: 'gt50', label: tl('More than 50', 'Mais de 50') },\n ],\n },\n ],\n },\n {\n id: 'food.tools',\n eyebrow: tl('Today', 'Hoje'),\n title: tl('What are you using right now?', 'O que você usa hoje?'),\n media: ctx.media?.['food.tools'],\n fields: [\n {\n id: 'food.menuToday',\n kind: 'cards',\n label: tl('Your menu', 'Seu cardápio'),\n columns: 2,\n options: [\n { value: 'none', label: tl('Printed only', 'Só impresso') },\n { value: 'pdf', label: tl('A PDF or photo', 'PDF ou foto'), hint: tl('Sent over WhatsApp', 'Mandado no WhatsApp') },\n { value: 'aggregator', label: tl('Only in the delivery apps', 'Só nos apps de entrega') },\n { value: 'own-site', label: tl('My own digital menu', 'Cardápio digital próprio') },\n ],\n },\n {\n id: 'food.posToday',\n kind: 'cards',\n label: tl('Orders and tabs', 'Pedidos e comandas'),\n suggestable: false,\n columns: 2,\n options: [\n { value: 'paper', label: tl('Paper tabs', 'Comanda de papel') },\n { value: 'spreadsheet', label: tl('A spreadsheet', 'Planilha') },\n { value: 'pos', label: tl('A POS system', 'Um PDV'), hint: tl('Tell us which below', 'Conta qual abaixo') },\n ],\n },\n {\n id: 'food.posName',\n kind: 'text',\n label: tl('Which POS?', 'Qual PDV?'),\n suggestable: false,\n placeholder: tl('e.g. Consumer, Goomer', 'ex.: Consumer, Goomer'),\n visibleWhen: (v) => v['food.posToday'] === 'pos',\n },\n {\n id: 'food.volume',\n kind: 'chips',\n label: tl('Orders on a normal day', 'Pedidos num dia normal'),\n // Nobody publishes their daily volume.\n suggestable: false,\n options: [\n { value: 'lt20', label: tl('Up to 20', 'Até 20') },\n { value: '20-100', label: '20–100' },\n { value: '100-300', label: '100–300' },\n { value: 'gt300', label: tl('More than 300', 'Mais de 300') },\n ],\n },\n ],\n },\n]\n","import { tl } from '@fayz-ai/core'\nimport type { WizardStepDef } from '@fayz-ai/ui'\nimport { brandMark, connectorOptions, OTHER_CONNECTOR } from '../connector-options'\nimport type { QuestionPack } from '../types'\n\n/**\n * Retail / ecommerce. Reword freely — every answer lands in the `answers` jsonb\n * under its field id, so changing a question costs nothing but a stale id in old\n * rows (which is why the flow version is stamped alongside).\n */\nexport const retailPack: QuestionPack = (ctx): WizardStepDef[] => [\n {\n id: 'retail.catalog',\n eyebrow: tl('Your catalog', 'Seu catálogo'),\n title: tl('What do you sell?', 'O que você vende?'),\n subtitle: tl(\n 'Pick everything that applies — it decides which categories and fields we set up.',\n 'Marque tudo que se aplica — é o que define as categorias e os campos que vamos preparar.',\n ),\n media: ctx.media?.['retail.catalog'],\n fields: [\n {\n id: 'retail.segments',\n kind: 'chips',\n multi: true,\n required: true,\n options: [\n { value: 'fashion', label: tl('Fashion & accessories', 'Moda e acessórios') },\n { value: 'food', label: tl('Food & drink', 'Alimentos e bebidas') },\n { value: 'supplements', label: tl('Supplements', 'Suplementos') },\n { value: 'cosmetics', label: tl('Cosmetics', 'Cosméticos') },\n { value: 'home', label: tl('Home & decor', 'Casa e decoração') },\n { value: 'electronics', label: tl('Electronics', 'Eletrônicos') },\n { value: 'handmade', label: tl('Handmade', 'Artesanal') },\n { value: 'pet', label: tl('Pet', 'Pet') },\n { value: 'digital', label: tl('Digital products', 'Produtos digitais') },\n { value: 'other', label: tl('Something else', 'Outra coisa') },\n ],\n },\n {\n id: 'retail.catalogSize',\n kind: 'chips',\n label: tl('How many products?', 'Quantos produtos?'),\n // A homepage shows a shelf, never the stockroom. Asked to guess, a model\n // reads a full grid as \"hundreds\" and says so at high confidence.\n suggestable: false,\n options: [\n { value: 'lt20', label: tl('Up to 20', 'Até 20') },\n { value: '20-100', label: '20–100' },\n { value: '100-1000', label: '100–1.000' },\n { value: 'gt1000', label: tl('More than 1,000', 'Mais de 1.000') },\n ],\n },\n ],\n },\n {\n id: 'retail.channels',\n eyebrow: tl('Selling today', 'Como vende hoje'),\n title: tl('Where do your sales happen today?', 'Por onde suas vendas acontecem hoje?'),\n media: ctx.media?.['retail.channels'],\n fields: [\n {\n id: 'retail.channels',\n kind: 'cards',\n multi: true,\n required: true,\n columns: 2,\n options: [\n { value: 'store', label: tl('Physical store', 'Loja física'), hint: tl('Over the counter', 'No balcão') },\n { value: 'social', label: tl('Instagram / WhatsApp', 'Instagram / WhatsApp'), hint: tl('Chat and DMs', 'Conversa e direct'), icon: brandMark('whatsapp') },\n { value: 'marketplace', label: tl('Marketplace', 'Marketplace'), hint: tl('Someone else owns the storefront', 'A vitrine é de outro') },\n { value: 'own-site', label: tl('My own site', 'Site próprio'), hint: tl('A store I already run', 'Uma loja que já tenho') },\n { value: 'none', label: tl('Not selling yet', 'Ainda não vendo'), hint: tl('Starting from scratch', 'Começando do zero') },\n ],\n },\n {\n id: 'retail.fulfilment',\n kind: 'chips',\n multi: true,\n label: tl('And how does it reach the customer?', 'E como chega no cliente?'),\n options: [\n { value: 'correios', label: tl('Post office', 'Correios') },\n { value: 'melhor-envio', label: 'Melhor Envio', icon: brandMark('melhor-envio') },\n { value: 'carrier', label: tl('Carrier', 'Transportadora') },\n { value: 'own-delivery', label: tl('My own delivery', 'Entrega própria') },\n { value: 'pickup', label: tl('Pickup', 'Retirada') },\n { value: 'digital', label: tl('Nothing ships', 'Não envio nada') },\n ],\n },\n ],\n },\n {\n id: 'retail.payments',\n eyebrow: tl('Getting paid', 'Recebimento'),\n title: tl('How do you take payment today?', 'Como você recebe hoje?'),\n subtitle: tl(\n 'We use this to pre-select your payment methods — nothing is charged here.',\n 'Usamos isso para já deixar as formas de pagamento certas — nada é cobrado aqui.',\n ),\n media: ctx.media?.['retail.payments'],\n fields: [\n {\n id: 'retail.paymentsToday',\n kind: 'cards',\n required: true,\n columns: 2,\n options: [\n { value: 'none', label: tl('Not online yet', 'Ainda não recebo online') },\n { value: 'manual-pix', label: tl('Pix by hand', 'Pix na mão'), hint: tl('Key sent in chat', 'Chave enviada na conversa') },\n { value: 'card-machine', label: tl('Card machine', 'Maquininha') },\n { value: 'gateway', label: tl('A payment gateway', 'Um gateway'), hint: tl('Mercado Pago, Stripe, PagSeguro…', 'Mercado Pago, Stripe, PagSeguro…') },\n ],\n },\n {\n // The real catalogue, not a text box: naming the provider they already\n // use is the difference between a note someone reads later and a\n // connector we can offer to set up.\n id: 'retail.gateway',\n kind: 'cards',\n label: tl('Which one?', 'Qual?'),\n columns: 3,\n options: connectorOptions({ categories: ['payments'], moduleIds: ['shop', 'financial'] }),\n visibleWhen: (v) => v['retail.paymentsToday'] === 'gateway',\n },\n {\n id: 'retail.gatewayOther',\n kind: 'text',\n label: tl('Which one?', 'Qual?'),\n placeholder: tl('The name is enough', 'O nome já basta'),\n visibleWhen: (v) => v['retail.gateway'] === OTHER_CONNECTOR,\n },\n ],\n },\n {\n id: 'retail.marketplaces',\n eyebrow: tl('Channels', 'Canais'),\n // A store sells ON a marketplace; a kitchen RECEIVES orders from an app.\n // This step used to borrow the kitchen's wording (\"seus pedidos chegam por\n // quais apps?\"), which reads as a question about delivery and is the food\n // pack's question — see packs/food.ts, where it belongs.\n title: tl('Where else do you already sell?', 'Você já vende em quais marketplaces?'),\n subtitle: tl(\n 'Each one we already connect to is one catalog you stop keeping twice.',\n 'Cada um que a gente já conecta é um catálogo a menos para manter em dobro.',\n ),\n media: ctx.media?.['retail.marketplaces'],\n // Only worth asking of someone who said they sell on marketplaces.\n visibleWhen: (v) => Array.isArray(v['retail.channels']) && v['retail.channels'].includes('marketplace'),\n fields: [\n {\n id: 'retail.marketplaceApps',\n kind: 'cards',\n multi: true,\n columns: 3,\n options: connectorOptions({\n // SCOPED BY MODULE, not just by category. Every `marketplace`\n // connector we ship today is a food-delivery app brought by `orders`\n // (iFood, Rappi, 99Food, Uber Eats…), because that is the only kind\n // built so far — so a category filter alone offered a clothing store\n // iFood and Keeta. `shop` is what makes a sales channel relevant to a\n // store, the same way `orders` is what makes iFood relevant to a\n // kitchen.\n //\n // `ecommerce` is deliberately NOT here either: it is Shopify, which\n // is a storefront somebody runs, not a marketplace they sell on —\n // and `retail.channels` already has \"site próprio\" for that. Today\n // this matches nothing in the catalogue, so the list is the four\n // extras below; the day a real Mercado Livre connector lands it\n // appears here on its own.\n categories: ['marketplace'],\n moduleIds: ['shop'],\n // Big names with no connector of ours yet. Someone telling us they\n // live on Shopee is telling us about their world, and that answer is\n // worth having whether or not we have built for it.\n extras: [\n { value: 'mercadolivre', label: 'Mercado Livre' },\n { value: 'shopee', label: 'Shopee' },\n { value: 'amazon', label: 'Amazon' },\n { value: 'magalu', label: 'Magalu' },\n ],\n }),\n },\n {\n id: 'retail.marketplaceOther',\n kind: 'text',\n label: tl('Which one?', 'Qual?'),\n placeholder: tl('The name is enough', 'O nome já basta'),\n visibleWhen: (v) => Array.isArray(v['retail.marketplaceApps']) && v['retail.marketplaceApps'].includes(OTHER_CONNECTOR),\n },\n ],\n },\n]\n","import type { QuestionPack } from '../types'\nimport { beautyPack } from './beauty'\nimport { foodPack } from './food'\nimport { retailPack } from './retail'\n\n/**\n * Packs are keyed by `VerticalId` — the value that lands on `tenants.vertical_id`\n * and gates plugins at runtime.\n */\nexport const QUESTION_PACKS: Record<string, QuestionPack> = {\n retail: retailPack,\n food: foodPack,\n beauty: beautyPack,\n}\n\n/**\n * The repo carries more than one vertical vocabulary: `VerticalId` in core, and\n * the industry-pool slugs in `cli/pools.config.json` that name the Supabase\n * project. Callers hand us whichever they have; this is where they meet.\n */\nconst ALIASES: Record<string, string> = {\n ecommerce: 'retail',\n shop: 'retail',\n restaurant: 'food',\n resto: 'food',\n salon: 'beauty',\n}\n\nexport function resolveVerticalId(verticalId: string | undefined): string | undefined {\n if (!verticalId) return undefined\n const key = verticalId.toLowerCase()\n return ALIASES[key] ?? key\n}\n\n/**\n * The domain questions for a vertical. An unknown or absent vertical returns an\n * empty pack, so the flow is the base steps only rather than nothing at all.\n */\nexport function getQuestionPack(verticalId: string | undefined): QuestionPack {\n const resolved = resolveVerticalId(verticalId)\n return (resolved && QUESTION_PACKS[resolved]) || (() => [])\n}\n\nexport { beautyPack, foodPack, retailPack }\n","import { countByTenant, type OnboardingMove, type TourDef } from '@fayz-ai/core'\nimport type { OnboardingStepInput } from '@fayz-ai/ui'\nimport { useOrganizationStore } from '../org/store'\nimport { resolveVerticalId } from './packs'\nimport type { Task, TaskPriority } from '@fayz-ai/tasks/domain/task'\n\n/**\n * The getting-started checklist.\n *\n * The split this file rests on: THE DATABASE HOLDS STATE, CODE HOLDS BEHAVIOUR,\n * joined by `source_key`. A route cannot live in a row without pinning the app's\n * routing to data; a title must, because it is what the Tasks panel shows to\n * somebody who has never seen this catalog. So the row carries title, status and\n * assignee, and this array carries the route, the icon and the sensor.\n *\n * `key` becomes `tasks.source_key` and is the idempotency key for re-seeding.\n * REWORDING A TITLE IS FREE. CHANGING A KEY IS A DUPLICATE ROW.\n */\nexport interface OnboardingTaskSeed {\n key: string\n title: string\n description?: string\n icon?: string\n /** Where the step's action goes. Never stored. */\n route?: string\n /**\n * The step IS its screen: drop it when the app cannot serve the route. See\n * `OnboardingStepDef.requiresRoute`.\n */\n requiresRoute?: boolean\n /** A guided pass over the screen for this step. Never stored. */\n tour?: TourDef\n /** The walkthrough as data — see {@link OnboardingMove}. Never stored. */\n script?: OnboardingMove[]\n /** One line when the step closes. Never stored. */\n celebrate?: string\n priority?: TaskPriority\n /**\n * Same lever module steps have: hide this one when the setup answers rule it\n * out. See `OnboardingStepDef.appliesWhen` — absent answers keep the step.\n */\n appliesWhen?: (answers: Record<string, unknown>) => boolean\n /**\n * Deadline, in days from the seeding.\n *\n * NOT set by the base list, and that is the decision rather than an\n * oversight: a checklist is an invitation, and a due date stamped on somebody\n * the day they signed up turns \"cadastre um produto\" into an overdue task by\n * Thursday — the app nagging about work it invented. Priority already says\n * what matters first. A program is free to set one where a real date exists\n * (a fiscal deadline, a migration window).\n */\n dueInDays?: number\n /**\n * How it is done in this system, in a person's words. Seeded onto the task\n * row (so the Tasks panel carries the instructions) and read by the agent\n * before it walks anybody through the step. See `OnboardingStepDef.howTo`.\n */\n howTo?: string\n /**\n * Optional sensor: \"is this already true of the data?\". Must be cheap — it\n * runs once per open step per shell mount. Absent means the only way to\n * complete the step is to tick the task.\n */\n check?: () => Promise<boolean>\n}\n\n/**\n * Every one of these IS its screen — `requiresRoute` on all of them.\n *\n * The base list is the platform's opinion about any business, but an app is\n * free not to mount the screen behind a step: resto-saas declares no site, so\n * \"publique seu site\" was a permanently open row pointing at a settings tab\n * that app hides. A step nobody can do does not belong in a count of what is\n * left.\n */\nconst BASE: OnboardingTaskSeed[] = [\n {\n key: 'brand',\n title: 'Deixe com a sua cara',\n description: 'Logo, cores e o nome que aparece para o cliente.',\n howTo: 'Configurações › Marca. Suba o logo (PNG ou SVG com fundo transparente), escolha a cor principal e confira o nome que aparece para o cliente. Vale tudo mudar depois.',\n icon: 'Palette',\n route: '/settings/branding',\n requiresRoute: true,\n priority: 'high',\n celebrate: 'Com a sua cara 🎨',\n script: [\n { kind: 'say', text: 'Primeiro, deixar isto com a sua cara — logo e cor.' },\n { kind: 'goto', route: '/settings/branding' },\n { kind: 'await', text: 'Suba o logo e escolha a cor principal. Eu vejo daqui quando ficar pronto.' },\n ],\n // Reads the workspace we already have in memory — no query, and it closes\n // the moment a logo or a brand colour lands.\n check: async () => {\n const org = useOrganizationStore.getState().currentOrg\n const branding = (org?.settings?.['branding'] ?? {}) as Record<string, unknown>\n return Boolean(org?.logoUrl || branding['logoUrl'] || branding['primaryColor'])\n },\n },\n {\n key: 'team',\n title: 'Chame quem trabalha com você',\n description: 'Convide a equipe e diga o que cada um pode ver.',\n howTo: 'Configurações › Equipe › Convidar. Digite o e-mail da pessoa e escolha o papel dela (o papel é o que decide o que ela enxerga). Ela recebe um link por e-mail e define a própria senha — você não cria senha para ninguém.',\n icon: 'Users',\n route: '/settings/team',\n requiresRoute: true,\n // A pending invite counts: the work was done, and waiting on somebody\n // else's inbox is not a step the owner still owes.\n celebrate: 'Convite enviado 🤝',\n script: [\n { kind: 'say', text: 'Vamos chamar quem trabalha com você. Te levo até a Equipe.' },\n { kind: 'goto', route: '/settings/team' },\n {\n kind: 'point',\n anchor: 'action.invite',\n title: 'Convide daqui',\n body: 'E-mail da pessoa e o papel dela — o papel decide o que ela enxerga. Ela define a própria senha pelo link.',\n waitForUser: true,\n },\n ],\n check: async () => (await countByTenant('v_team_members')) > 1 || (await countByTenant('invitations')) > 0,\n tour: {\n id: 'workspace.team',\n stops: [\n {\n anchor: 'action.invite',\n title: 'Convide daqui',\n body: 'E-mail da pessoa e o papel dela. Ela define a própria senha pelo link.',\n route: '/settings/team',\n waitForUser: true,\n },\n ],\n },\n },\n {\n key: 'payments',\n title: 'Conecte o recebimento',\n description: 'Para o dinheiro cair na conta sem passo manual.',\n howTo: 'Configurações › Conectores. Escolha o provedor que você já usa para receber e siga a conexão dele. Precisa das credenciais da sua conta no provedor — se não tiver em mãos, deixe para quando tiver.',\n icon: 'CreditCard',\n route: '/settings/connectors',\n requiresRoute: true,\n priority: 'high',\n },\n {\n key: 'publish',\n title: 'Publique seu site',\n description: 'O endereço que você manda para o cliente.',\n howTo: 'Configurações › Site. Confira o endereço, o texto da capa e publique. Depois de publicado, o link já pode ir para a bio do Instagram.',\n icon: 'Globe',\n route: '/settings/sites',\n requiresRoute: true,\n },\n]\n\n/** One item per vertical: the first record that makes the app worth opening. */\nconst BY_VERTICAL: Record<string, OnboardingTaskSeed> = {\n retail: {\n key: 'catalog',\n title: 'Cadastre seu primeiro produto',\n icon: 'Package',\n route: '/products',\n requiresRoute: true,\n priority: 'high',\n },\n food: {\n key: 'catalog',\n title: 'Monte seu cardápio',\n icon: 'UtensilsCrossed',\n route: '/products',\n requiresRoute: true,\n priority: 'high',\n },\n beauty: {\n key: 'catalog',\n title: 'Cadastre seus serviços',\n icon: 'Sparkles',\n route: '/services',\n requiresRoute: true,\n priority: 'high',\n },\n}\n\n/**\n * The steps for a vertical. An unknown or absent vertical returns the base set\n * rather than nothing — the same call the question packs make.\n */\nexport function onboardingChecklist(verticalId?: string): OnboardingTaskSeed[] {\n const resolved = resolveVerticalId(verticalId)\n const vertical = resolved ? BY_VERTICAL[resolved] : undefined\n return vertical ? [...BASE, vertical] : [...BASE]\n}\n\n/** A due date `dueInDays` from now, as the `date` column wants it. */\nexport function dueDateFor(seed: OnboardingTaskSeed, from = new Date()): string | null {\n if (seed.dueInDays == null) return null\n const d = new Date(from)\n d.setDate(d.getDate() + seed.dueInDays)\n return d.toISOString().slice(0, 10)\n}\n\nexport interface MergeContext {\n /** Called when a sensor fires on a step whose row is still open. */\n onComplete?: (sourceKey: string) => void\n}\n\n/**\n * Rows + catalog → what the sidebar renders.\n *\n * The reconciliation is a MONOTONIC OR: neither source can un-complete the\n * other. `useOnboardingProgress` gives `done` precedence over `check`, so\n * handing it both would make the sensor dead code — instead a closed row\n * resolves to `done: true` and never probes, and an open row falls through to\n * the sensor exactly as it did before any of this was persisted.\n *\n * Pure on purpose: this is the part worth testing, and it needs neither React\n * nor a database to say what it does.\n */\nexport function mergeOnboardingSteps(\n catalog: OnboardingTaskSeed[],\n rows: Task[],\n ctx: MergeContext = {},\n): OnboardingStepInput[] {\n const byKey = new Map(rows.filter((r) => r.sourceKey).map((r) => [r.sourceKey as string, r]))\n\n return catalog.map((seed) => {\n const row = byKey.get(seed.key)\n const closed = row?.status === 'done' || row?.status === 'cancelled'\n\n return {\n id: seed.key,\n title: row?.title ?? seed.title,\n description: row?.description ?? seed.description,\n icon: seed.icon,\n action: seed.route,\n // Only `true` is ever asserted. Leaving it undefined for an open row is\n // what lets the sensor still speak; setting it to `false` would silence it.\n done: closed ? true : undefined,\n check: closed || !seed.check\n ? undefined\n : async () => {\n const ok = await seed.check!()\n // Latch, and only forward: a sensor that stops firing must never\n // reopen a task somebody ticked. Fire-and-forget — the caller\n // swallows a throwing check, so a failed write cannot blank the list.\n if (ok && row && row.status === 'todo') ctx.onComplete?.(seed.key)\n return ok\n },\n }\n })\n}\n","import { getSupabaseClientOptional, isKnownMissing, rememberIfMissing } from '@fayz-ai/core'\nimport { ONBOARDING_TASK_SOURCE, type Task } from '@fayz-ai/tasks/domain/task'\nimport { dueDateFor, type OnboardingTaskSeed } from './checklist'\n\nconst TASKS_TABLE = 'tasks'\n// Same memo the rail uses — a pool without 047 is asked once, not once a boot.\nconst TASKS_OBJECT = 'tasks'\n\n/**\n * The getting-started checklist's read/write seam.\n *\n * Same contract as its neighbour `backend.ts`: every function swallows its own\n * failures and returns a benign value. The caller has just created a workspace,\n * and a lost checklist is not a reason to tell someone their business was not\n * created.\n *\n * These are plain inserts rather than the entity provider on purpose:\n * `createSupabaseProvider` strips `ownerId`/`createdBy` from writes (the\n * triggers' job), and seeding runs before the new tenant is the active one, so\n * nothing that reads `getActiveTenantId()` would aim at the right rows.\n */\n\nexport interface SeedOnboardingTasksInput {\n tenantId: string\n /** Whoever ran the wizard. This is the only place that is reliably known. */\n userId: string\n userName?: string\n items: OnboardingTaskSeed[]\n}\n\nexport async function seedOnboardingTasks(input: SeedOnboardingTasksInput): Promise<boolean> {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase || input.items.length === 0 || isKnownMissing(TASKS_OBJECT)) return false\n\n const rows = input.items.map((seed, index) => ({\n tenant_id: input.tenantId,\n title: seed.title,\n // The one-liner AND the instructions: the Tasks panel is where somebody\n // works through this alone at 11pm, and \"Conecte o recebimento\" with no\n // mechanics under it is a title, not a task.\n description: [seed.description, seed.howTo].filter(Boolean).join('\\n\\n') || null,\n status: 'todo',\n priority: seed.priority ?? 'medium',\n due_date: dueDateFor(seed),\n position: index,\n assigned_to_id: input.userId,\n assigned_to_name: input.userName ?? null,\n created_by: input.userId,\n created_by_name: input.userName ?? null,\n source: ONBOARDING_TASK_SOURCE,\n source_key: seed.key,\n }))\n\n try {\n // `ignoreDuplicates` over the unique index, so a retried wizard, a\n // double-submit and a later backfill all converge on the same N rows.\n const { error } = await supabase\n .from(TASKS_TABLE)\n .upsert(rows, { onConflict: 'tenant_id,source,source_key', ignoreDuplicates: true })\n if (error) throw error\n return true\n } catch (err: unknown) {\n rememberIfMissing(TASKS_OBJECT, err)\n console.warn('[onboarding] could not seed the getting-started tasks:', err)\n return false\n }\n}\n\nfunction snakeToCamel(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(obj)) {\n result[key.replace(/_([a-z])/g, (_, c) => c.toUpperCase())] = value\n }\n return result\n}\n\n/** `[]` when Supabase is absent, when nothing was seeded, or on any error. */\nexport async function listOnboardingTasks(tenantId: string): Promise<Task[]> {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase || !tenantId || isKnownMissing(TASKS_OBJECT)) return []\n try {\n const { data, error } = await supabase\n .from(TASKS_TABLE)\n .select('*')\n .eq('tenant_id', tenantId)\n .eq('source', ONBOARDING_TASK_SOURCE)\n .order('position', { ascending: true })\n if (error) {\n rememberIfMissing(TASKS_OBJECT, error)\n throw error\n }\n return (data ?? []).map((row: Record<string, unknown>) => {\n const t = snakeToCamel(row) as unknown as Task\n if (!Array.isArray(t.labels)) t.labels = []\n return t\n })\n } catch {\n return []\n }\n}\n\n/**\n * Close a seeded step a module has taken over (see `supersededKeys`).\n *\n * `cancelled`, not `done`: nobody did it, and the checklist that would have\n * ticked it no longer exists. Both read as closed everywhere downstream.\n */\nexport async function cancelOnboardingTask(tenantId: string, sourceKey: string): Promise<void> {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase || !tenantId) return\n try {\n await supabase\n .from(TASKS_TABLE)\n .update({ status: 'cancelled' })\n .eq('tenant_id', tenantId)\n .eq('source', ONBOARDING_TASK_SOURCE)\n .eq('source_key', sourceKey)\n .eq('status', 'todo')\n } catch {\n /* the checklist is not worth an error path */\n }\n}\n\n/** The latch. Fire-and-forget; never throws. */\nexport async function completeOnboardingTask(tenantId: string, sourceKey: string): Promise<void> {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase || !tenantId) return\n try {\n await supabase\n .from(TASKS_TABLE)\n .update({ status: 'done', completed_at: new Date().toISOString() })\n .eq('tenant_id', tenantId)\n .eq('source', ONBOARDING_TASK_SOURCE)\n .eq('source_key', sourceKey)\n // Only an open row. Without this, a re-run would stamp a new completed_at\n // over the moment it was actually finished.\n .eq('status', 'todo')\n } catch {\n /* the checklist is not worth an error path */\n }\n}\n","import { create } from 'zustand'\nimport type { OnboardingStepInput } from '@fayz-ai/ui'\nimport type { Task } from '@fayz-ai/tasks/domain/task'\nimport { mergeOnboardingSteps } from './checklist'\nimport type { ActivationStep } from './programs'\nimport { completeOnboardingTask, listOnboardingTasks } from './tasks'\n\n/**\n * The activation checklist, once, for everybody who touches it.\n *\n * It used to load inside the sidebar widget, which was fine while the sidebar\n * was the only reader. It is not: the assistant now ticks steps as it finishes\n * them, and a checklist that only refetches on mount would keep showing \"2 de 6\"\n * for the rest of the session while the agent insisted it had done three. One\n * store, one set of rows, and the tick lands everywhere at once.\n *\n * Writes are optimistic and one-way — a step goes closed and stays closed. The\n * database call is fire-and-forget for the same reason the seeding is: a lost\n * checklist write is not worth an error dialog on top of somebody's first hour.\n */\nexport interface ActivationState {\n tenantId?: string\n /**\n * The assistant is walking somebody through the checklist right now.\n *\n * Session state, not a stored fact: it starts when a workspace is created (or\n * when somebody asks for help from the checklist) and ends when the list is\n * done or they close it. It is what turns a completed step from a silent tick\n * into \"boa — agora vamos para o próximo\": outside guided mode the same tick\n * must NOT ping the assistant, or every product a store creates six months\n * from now interrupts whatever conversation is open.\n */\n guided: boolean\n /** null = never loaded for this tenant (render nothing, not \"0 de 0\"). */\n rows: Task[] | null\n catalog: ActivationStep[]\n loading: boolean\n setCatalog: (catalog: ActivationStep[]) => void\n setGuided: (guided: boolean) => void\n load: (tenantId: string) => Promise<void>\n /**\n * Tick a step. Safe to call for a key that is already closed or unknown.\n *\n * `by` says who noticed: 'sensor' is the data itself saying the work landed,\n * which is what the guided run congratulates on. A tick nobody watched\n * (a re-seed, a manual close) passes through quietly.\n */\n complete: (key: string, by?: 'user' | 'agent' | 'sensor') => Promise<void>\n /** Set by the provider — how a finished step reaches the assistant. */\n onStepCompleted?: (step: ActivationStep, by: 'user' | 'agent' | 'sensor') => void\n}\n\nexport const useActivationStore = create<ActivationState>((set, get) => ({\n rows: null,\n catalog: [],\n loading: false,\n guided: false,\n\n setCatalog: (catalog) => set({ catalog }),\n setGuided: (guided) => set({ guided }),\n\n load: async (tenantId) => {\n if (!tenantId) return\n // Switching workspaces must not show the previous one's progress.\n if (get().tenantId !== tenantId) set({ tenantId, rows: null })\n set({ loading: true })\n const rows = await listOnboardingTasks(tenantId)\n // A late response from the workspace we just left is not our answer.\n if (get().tenantId !== tenantId) return\n set({ rows, loading: false })\n },\n\n complete: async (key, by = 'user') => {\n const { tenantId, rows, catalog, onStepCompleted } = get()\n if (!tenantId || !rows) return\n const row = rows.find((r) => r.sourceKey === key)\n if (!row || row.status === 'done' || row.status === 'cancelled') return\n set({\n rows: rows.map((r) =>\n r.sourceKey === key ? { ...r, status: 'done', completedAt: new Date().toISOString() } : r,\n ),\n })\n await completeOnboardingTask(tenantId, key)\n const step = catalog.find((s) => s.key === key)\n if (step) onStepCompleted?.(step, by)\n },\n}))\n\n/** Steps as the checklist UI wants them, sensors and all. */\nexport function selectSteps(state: ActivationState): OnboardingStepInput[] {\n if (!state.rows) return []\n return mergeOnboardingSteps(state.catalog, state.rows, {\n onComplete: (key) => void useActivationStore.getState().complete(key, 'sensor'),\n })\n}\n\n/** `source_key`s of every step still open — what the agent is here to close. */\nexport function openStepKeys(state: ActivationState): Set<string> {\n const closed = new Set(\n (state.rows ?? []).filter((r) => r.status === 'done' || r.status === 'cancelled').map((r) => r.sourceKey),\n )\n return new Set(state.catalog.map((s) => s.key).filter((k) => !closed.has(k)))\n}\n","import type { OnboardingMove, TourDef, TourStopDef } from '@fayz-ai/core'\nimport { useTourStore } from '@fayz-ai/ui'\nimport { navigateTo } from '../app/routing'\nimport { useChatStore, type ChatCard } from '../stores/chat.store'\nimport type { ActivationStep } from './programs'\n\n/**\n * Plays a step's script — the walkthrough with no model in the loop.\n *\n * The expensive version of this was: one turn to say \"abra Produtos\", another\n * to say \"clique em Adicionar\", another to say \"agora digite o nome\". Three\n * round trips for choreography that never varies, and a different wording every\n * time. The script is data, so the runtime performs it: navigate, spotlight,\n * speak, wait. The model is handed the turn only where the script says `ask` —\n * or the moment the person types something of their own, which was always the\n * part worth paying for.\n *\n * Split in two on purpose. `planScript` is pure: moves in, a plan out, and it\n * is where the interesting decisions live (consecutive points become ONE tour,\n * a handover ends the run). `playScript` is the side effects, in order.\n */\n\nexport interface ScriptedTour {\n kind: 'tour'\n tour: TourDef\n}\n\nexport type ScriptAct =\n | { kind: 'goto'; route: string }\n | { kind: 'say'; text: string }\n | ScriptedTour\n | { kind: 'await'; text?: string }\n | { kind: 'ask'; text: string }\n | {\n kind: 'choose'\n id: string\n question: string\n options: Array<{ id: string; label: string; meta?: string }>\n }\n\nexport interface ScriptPlan {\n acts: ScriptAct[]\n /**\n * The run stops here and waits for the sensor. True when the script ends in\n * `await`, or in a tour whose last stop is a handover — both mean \"the person\n * is doing it now\", and anything printed after that talks over them.\n */\n waits: boolean\n}\n\n/**\n * Moves → acts. Consecutive `point`s collapse into one tour because they are\n * one gesture: three separate overlays for three controls on the same screen is\n * three dismissals for one explanation.\n */\nexport function planScript(moves: OnboardingMove[], tourId: string): ScriptPlan {\n const acts: ScriptAct[] = []\n let stops: TourStopDef[] = []\n let route: string | undefined\n\n const flush = () => {\n if (stops.length === 0) return\n acts.push({ kind: 'tour', tour: { id: tourId, stops } })\n stops = []\n }\n\n for (const move of moves) {\n if (move.kind === 'point') {\n // The tour hunts for the anchor on whatever screen we last opened; a stop\n // carrying its own route is what lets one script cross two pages.\n stops.push({\n anchor: move.anchor,\n title: move.title,\n body: move.body,\n waitForUser: move.waitForUser,\n ...(stops.length === 0 && route ? { route } : {}),\n })\n continue\n }\n flush()\n if (move.kind === 'goto') {\n route = move.route\n acts.push({ kind: 'goto', route: move.route })\n } else if (move.kind === 'say') {\n acts.push({ kind: 'say', text: move.text })\n } else if (move.kind === 'await') {\n acts.push({ kind: 'await', text: move.text })\n } else if (move.kind === 'choose') {\n acts.push({ kind: 'choose', id: move.id, question: move.question, options: move.options })\n } else {\n acts.push({ kind: 'ask', text: move.text })\n }\n }\n flush()\n\n const last = acts[acts.length - 1]\n const waits =\n last?.kind === 'await' ||\n // A question is a wait too: the next move is theirs, and printing over an\n // unanswered question is how a walkthrough starts talking to itself.\n last?.kind === 'choose' ||\n (last?.kind === 'tour' && Boolean(last.tour.stops[last.tour.stops.length - 1]?.waitForUser))\n\n return { acts, waits }\n}\n\n/**\n * ONE RUN AT A TIME, and the run remembers which step it is on.\n *\n * Everything can ask for a walkthrough: the button on the checklist, the\n * automatic start after the wizard, a sensor closing a step and reaching for\n * the next one. Two of those arriving together used to play two scripts into\n * the same thread, interleaved — the same question printed twice around a line\n * that belonged between them. A script is a performance: a second one starting\n * does not add anything, it talks over the first.\n *\n * So a run takes a token, and every act checks that its token is still the\n * current one before it speaks. A newer run supersedes the older mid-sentence\n * instead of racing it, and a repeat request for the step already playing is\n * not a run at all (see `runStep`).\n */\nlet runSeq = 0\nlet current: { token: number; key: string } | null = null\n\n/** Claim the floor for `key`, superseding whatever was playing. */\nexport function beginRun(key: string): number {\n // Whatever the last script was still typing lands now, in full, before the\n // new one says anything.\n flushTyping()\n runSeq += 1\n current = { token: runSeq, key }\n return runSeq\n}\n\n/** Still the current run? False means somebody else took the floor. */\nexport function isRunAlive(token: number): boolean {\n return current?.token === token\n}\n\n/**\n * The step being walked through right now — including one that has already\n * spoken and is waiting on the person. Kept after the script ends on purpose:\n * \"which step are we on\" outlives the playing of it.\n */\nexport function currentRunKey(): string | null {\n return current?.key ?? null\n}\n\n/** Nothing is being walked through. */\nexport function clearRun(): void {\n current = null\n}\n\n/**\n * How long a locally-said line takes to appear.\n *\n * A line the model streams arrives a token at a time; a line the runtime knows\n * by heart used to appear whole, instantly. Side by side in one conversation\n * that reads as two different speakers — the scripted half feels canned, which\n * is exactly what it must not feel like, because the scripted half is most of\n * the onboarding.\n *\n * So a local line is typed too: dots first, then the words. Both are bounded\n * well under `readingTime`'s 1400ms floor, so the reveal always finishes before\n * the next act — the animation never adds to how long a walkthrough takes.\n */\nconst TYPING_LEAD_MS = 420\nconst TYPING_MS_PER_WORD = 55\nconst TYPING_CEILING_MS = 1200\nconst TYPING_FRAME_MS = 45\n\n/** A line from the assistant, straight into the thread. No turn, no bill. */\nexport function say(text: string, cards?: ChatCard[]): void {\n const chat = useChatStore.getState()\n const id = `guided-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`\n const trimmed = text.trim()\n chat.addMessage({\n id,\n role: 'assistant',\n // Empty content is what renders the typing dots (see ChatMessages).\n content: trimmed ? '' : text,\n timestamp: new Date().toISOString(),\n ...(cards ? { cards } : {}),\n })\n // A line nobody can see is a line nobody read: the panel comes forward with\n // it, the same way it does when the assistant answers.\n chat.setOpen(true)\n if (trimmed) typeInto(id, text)\n}\n\n/**\n * Reveal `text` into an existing bubble, word by word.\n *\n * By WORD and not by character: a character crawl is a gimmick at this length,\n * and it reflows the bubble on every frame. Words land at roughly the rate the\n * streamed half arrives, which is the point — the two halves of the\n * conversation should not be tellable apart.\n */\nfunction typeInto(id: string, text: string): void {\n const words = text.split(/(\\s+)/)\n const wordCount = words.filter((w) => w.trim()).length\n const total = Math.min(TYPING_CEILING_MS, wordCount * TYPING_MS_PER_WORD)\n const frames = Math.max(1, Math.round(total / TYPING_FRAME_MS))\n const perFrame = Math.max(1, Math.ceil(words.length / frames))\n\n let cursor = 0\n let timer: ReturnType<typeof setTimeout> | undefined\n const finish = () => {\n if (timer) clearTimeout(timer)\n typers.delete(finish)\n useChatStore.getState().setMessageContent(id, text)\n }\n const step = () => {\n cursor += perFrame\n if (cursor >= words.length) return finish()\n useChatStore.getState().setMessageContent(id, words.slice(0, cursor).join(''))\n timer = setTimeout(step, TYPING_FRAME_MS)\n }\n typers.add(finish)\n // The dots hold the floor first — a bubble that fills the instant it appears\n // never looked like anybody was typing.\n timer = setTimeout(step, TYPING_LEAD_MS)\n}\n\n/** Lines still typing themselves in. Each entry completes its own bubble. */\nconst typers = new Set<() => void>()\n\n/**\n * Put every half-typed line on screen at once.\n *\n * Called whenever a new run takes the floor: the previous script's sentence was\n * mid-reveal, and letting it keep dribbling in UNDER the new one is the same\n * talking-over-itself this module exists to prevent. A line that was worth\n * saying is worth finishing; only the pacing is abandoned.\n *\n * Also what makes `say` assertable — a transcript is text, not an animation.\n */\nexport function flushTyping(): void {\n const pending = [...typers]\n typers.clear()\n for (const finish of pending) finish()\n}\n\n/**\n * How long to hold before the next act.\n *\n * A fixed beat read as rushed: the spotlight arrived while the sentence\n * explaining it was still being read, which is the one thing a walkthrough\n * cannot do — it is the reason somebody is watching instead of clicking. So the\n * pause is READING TIME: a floor, plus time per word, capped so a long line\n * never becomes a hostage situation.\n */\nconst BEAT_FLOOR_MS = 1400\nconst MS_PER_WORD = 260\nconst BEAT_CEILING_MS = 6000\n\nfunction readingTime(text: string): number {\n const words = text.trim().split(/\\s+/).length\n return Math.min(BEAT_CEILING_MS, BEAT_FLOOR_MS + words * MS_PER_WORD)\n}\n\n/** A screen has to land before the spotlight goes hunting for something on it. */\nconst NAV_MS = 1000\n\nexport interface PlayOptions {\n /** Overridden in tests; the real one is `setTimeout`. */\n wait?: (ms: number) => Promise<void>\n /** From {@link beginRun}. The play stops the moment it is not current. */\n token?: number\n}\n\n/**\n * Perform the plan. Returns when the script is done or when it hands over to\n * somebody else — the person (a handover/await) or the model (`ask`).\n */\nexport async function playScript(plan: ScriptPlan, options: PlayOptions = {}): Promise<void> {\n const wait = options.wait ?? ((ms: number) => new Promise<void>((r) => setTimeout(r, ms)))\n // No token means nobody is coordinating (tests, a one-off) — always alive.\n const alive = () => options.token === undefined || isRunAlive(options.token)\n\n for (const act of plan.acts) {\n if (!alive()) return\n if (act.kind === 'goto') {\n navigateTo(act.route)\n await wait(NAV_MS)\n continue\n }\n if (act.kind === 'say') {\n say(act.text)\n await wait(readingTime(act.text))\n continue\n }\n if (act.kind === 'choose') {\n // The card carries the question in its own header, so the bubble carries\n // nothing: printing the sentence above rows that repeat it word for word\n // reads as a stutter, and it was one.\n say('', [{ kind: 'choice', id: act.id, question: act.question, options: act.options }])\n return\n }\n if (act.kind === 'tour') {\n useTourStore.getState().start(act.tour)\n // A tour owns the screen until it ends; nothing after it is played over\n // the top of it.\n return\n }\n if (act.kind === 'await') {\n if (act.text) say(act.text)\n return\n }\n // `ask` is the handover to the model — and the end of the script.\n useChatStore.getState().queuePrompt(act.text)\n return\n }\n}\n\n/** Play a step's script when it has one. `false` means \"no script — improvise\". */\nexport async function runStepScript(step: ActivationStep, options?: PlayOptions): Promise<boolean> {\n if (!step.script || step.script.length === 0) return false\n const token = options?.token ?? beginRun(step.key)\n await playScript(planScript(step.script, `guided.${step.key}`), { ...options, token })\n return true\n}\n","import { tl, type TourDef } from '@fayz-ai/core'\nimport { useAuthStore } from '@fayz-ai/auth'\nimport { useTourStore } from '@fayz-ai/ui'\nimport { navigateTo } from '../app/routing'\nimport { useChatStore } from '../stores/chat.store'\nimport { useActivationStore, openStepKeys } from './activation.store'\nimport { beginRun, currentRunKey, runStepScript, say } from './guided-runner'\nimport type { ActivationStep } from './programs'\nimport { seedOnboardingTasks } from './tasks'\n\n/**\n * Make sure the checklist EXISTS before anybody tries to walk it.\n *\n * The shell seeds on boot, but it deliberately refuses to seed a workspace that\n * has no rows at all (see ActivationProvider): a business that has been running\n * for months must not be handed a \"set up your workspace\" list it never asked\n * for. That guard is right for a silent boot and wrong for this: somebody who\n * just asked to be walked through the setup HAS asked for the list.\n *\n * Without it the run was theatre — every step showed as open (nothing had ever\n * been closed), the checklist rendered nothing (`rows.length === 0`), and every\n * tick was dropped on the floor, because `complete()` needs a row to update.\n *\n * The write is the same idempotent upsert the wizard does, so a second ask\n * converges on the same N rows.\n */\nexport async function ensureChecklist(): Promise<void> {\n const state = useActivationStore.getState()\n if (!state.tenantId || state.catalog.length === 0) return\n const seeded = new Set((state.rows ?? []).map((r) => r.sourceKey))\n const missing = state.catalog.filter((s) => !seeded.has(s.key))\n if (missing.length === 0) return\n\n const user = useAuthStore.getState().user\n if (!user) return\n const ok = await seedOnboardingTasks({\n tenantId: state.tenantId,\n userId: user.id,\n userName: user.fullName || user.email,\n items: missing,\n })\n if (ok) await useActivationStore.getState().load(state.tenantId)\n}\n\n/**\n * Start the guided run — the assistant walking somebody through the checklist.\n *\n * It starts by itself once, right after a workspace is created. This is the\n * OTHER way in, and it has to exist: the automatic one fires a single time per\n * tenant, so anybody who closed the panel that day, or who inherited a\n * workspace somebody else set up, had no way back to it. A mode with no button\n * is a mode most people never see.\n *\n * Three things happen together, and the order matters: the mode goes on (so a\n * finished step reports back instead of ticking silently), the screen moves to\n * the step, and only then the assistant is asked to take over — arriving at a\n * page that is already open reads as company, arriving before it reads as a\n * chatbot describing a menu.\n *\n * The list is created first when this workspace never had one — see\n * `ensureChecklist`. Fire-and-forget is fine for the callers that are buttons.\n */\nexport async function startGuidedRun(stepKey?: string): Promise<void> {\n // Guided mode goes on BEFORE the await: a sensor that fires while the seed is\n // in flight should report back, not tick in silence.\n useActivationStore.getState().setGuided(true)\n await ensureChecklist()\n\n const state = useActivationStore.getState()\n const open = openStepKeys(state)\n const step = state.catalog.find((s) => (stepKey ? s.key === stepKey : open.has(s.key)))\n await runStep(step)\n}\n\n/**\n * One step of the run: play its script, or hand the model the job when it has\n * none. Everything that advances the run — the button, the auto-start, a step\n * closing — goes through here, so a scripted step and an improvised one behave\n * the same from the outside.\n */\nexport async function runStep(step: ActivationStep | undefined): Promise<void> {\n if (!step) {\n useChatStore.getState().queuePrompt(\n tl(\n 'Walk me through what is left of the setup, one step at a time.',\n 'Me guie pelo que falta da configuração, um passo por vez.',\n ),\n )\n return\n }\n\n // ALREADY ON THIS STEP. The second press of the button, the auto-start\n // landing on top of a run somebody started by hand, a sensor reaching for a\n // step that is already open on screen: none of those want the script played\n // again, they want to be back where it is happening. Replaying it prints the\n // same lines a second time under the first — which is what it did.\n if (currentRunKey() === step.key) {\n if (step.route) navigateTo(step.route)\n useChatStore.getState().setOpen(true)\n return\n }\n\n const token = beginRun(step.key)\n if (await runStepScript(step, { token })) return\n\n // No script: the assistant improvises from howTo/agentHint, which still works\n // and costs a turn per move. Open the screen first either way — arriving at a\n // page that is already there reads as company.\n if (step.route) navigateTo(step.route)\n if (step.tour) useTourStore.getState().start(step.tour as TourDef)\n\n useChatStore.getState().queuePrompt(\n tl(\n `Walk me through this setup step: \"${step.title}\". Take me to the screen, point at what I have to use, and wait while I do it.`,\n `Me guie neste passo da configuração: \"${step.title}\". Me leve até a tela, aponte o que eu tenho que usar e espere eu fazer.`,\n ),\n )\n}\n\n/** Said when a step closes, before the next one starts. Local; no model call. */\nexport function celebrate(step: ActivationStep, remaining: number): void {\n const line = step.celebrate\n ?? tl(`Done: ${step.title}.`, `Feito: ${step.title.toLowerCase()}.`)\n const tail = remaining > 0\n ? tl(` ${remaining} left.`, ` Faltam ${remaining}.`)\n : tl(' That was the last one.', ' Esse era o último.')\n say(`${line}${tail}`)\n}\n","import * as React from 'react'\nimport { SidebarOnboarding, useTourStore } from '@fayz-ai/ui'\nimport type { TourDef } from '@fayz-ai/core'\nimport { useTranslation } from '@fayz-ai/core'\nimport { tl } from '@fayz-ai/core'\nimport { navigateTo } from '../app/routing'\nimport { startGuidedRun } from './guided'\nimport { selectSteps, useActivationStore } from './activation.store'\n\n/**\n * The getting-started checklist in the rail's foot.\n *\n * Reads the shared activation store rather than loading its own rows: the\n * assistant ticks steps as it closes them, and two independent loads meant the\n * rail kept showing yesterday's count while the agent said otherwise.\n *\n * A step that carries a tour starts it instead of just navigating — the same\n * \"show me\" the agent gives, available without asking for it.\n */\nexport function GettingStartedWidget() {\n const t = useTranslation()\n const rows = useActivationStore((s) => s.rows)\n const catalog = useActivationStore((s) => s.catalog)\n\n // Identity matters: useOnboardingProgress depends on this array by reference\n // and re-runs every sensor when it changes. Built once per (rows, catalog).\n const steps = React.useMemo(\n () => selectSteps({ ...useActivationStore.getState(), rows, catalog }),\n [rows, catalog],\n )\n\n const onNavigate = React.useCallback((path: string) => {\n const step = useActivationStore.getState().catalog.find((s) => s.route === path)\n navigateTo(path)\n if (step?.tour) useTourStore.getState().start(step.tour as TourDef)\n }, [])\n\n // The way INTO the guided run: mode on, screen open, assistant takes over.\n const onAskAgent = React.useCallback((step: { id: string }) => {\n void startGuidedRun(step.id)\n }, [])\n\n // Nothing seeded (a tenant that predates this, or no Supabase) means no\n // checklist at all — not an empty one reading \"0 de 0\".\n if (!rows || rows.length === 0) return null\n\n return (\n <SidebarOnboarding\n title={t('tasks.group.onboarding')}\n steps={steps}\n onNavigate={onNavigate}\n onAskAgent={onAskAgent}\n askAgentLabel={tl('Set it up with the assistant', 'Configurar com o assistente')}\n // Every plugin contributes onboarding steps, so the raw list runs to 15+.\n // The rail shows the next five to do; the rest surface as these clear.\n maxVisible={5}\n seeAllLabel={tl('+{n} more later', 'mais {n} depois')}\n />\n )\n}\n"]}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { useUnitBootstrap } from './chunk-DPNFZONC.js';
|
|
2
|
+
import { toast } from './chunk-3OUD4XBK.js';
|
|
3
|
+
import { useTenant, useUnitStore, countUnboundMembers, bindAllMembersTo, setUnitModeRemote } from './chunk-5D5QLMOQ.js';
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { Card, CardHeader, CardTitle, CardDescription, Switch, CardContent, Checkbox, ConfirmDialog } from '@fayz-ai/ui';
|
|
6
|
+
import { Building2, AlertTriangle } from 'lucide-react';
|
|
7
|
+
import { useAuth } from '@fayz-ai/auth';
|
|
8
|
+
import { emitDataChanged } from '@fayz-ai/core';
|
|
9
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
10
|
+
|
|
11
|
+
function UnitModeCard() {
|
|
12
|
+
useUnitBootstrap();
|
|
13
|
+
const { org } = useTenant();
|
|
14
|
+
const { user } = useAuth();
|
|
15
|
+
const unitMode = useUnitStore((s) => s.unitMode);
|
|
16
|
+
const units = useUnitStore((s) => s.units);
|
|
17
|
+
const setMode = useUnitStore((s) => s.setMode);
|
|
18
|
+
const load = useUnitStore((s) => s.load);
|
|
19
|
+
const [unbound, setUnbound] = React.useState(null);
|
|
20
|
+
const [bindEveryone, setBindEveryone] = React.useState(true);
|
|
21
|
+
const [pending, setPending] = React.useState(null);
|
|
22
|
+
const [saving, setSaving] = React.useState(false);
|
|
23
|
+
const headquarters = React.useMemo(
|
|
24
|
+
() => units.find((u) => u.isHeadquarters && u.kind !== "region") ?? units.find((u) => u.kind !== "region"),
|
|
25
|
+
[units]
|
|
26
|
+
);
|
|
27
|
+
React.useEffect(() => {
|
|
28
|
+
if (!org?.id || unitMode) return;
|
|
29
|
+
let alive = true;
|
|
30
|
+
void countUnboundMembers(org.id).then((n) => {
|
|
31
|
+
if (alive) setUnbound(n);
|
|
32
|
+
});
|
|
33
|
+
return () => {
|
|
34
|
+
alive = false;
|
|
35
|
+
};
|
|
36
|
+
}, [org?.id, unitMode]);
|
|
37
|
+
async function apply(on) {
|
|
38
|
+
if (!org?.id) return;
|
|
39
|
+
setSaving(true);
|
|
40
|
+
try {
|
|
41
|
+
if (on && bindEveryone && headquarters) {
|
|
42
|
+
const n = await bindAllMembersTo(org.id, headquarters.id);
|
|
43
|
+
if (n > 0) toast.success(`${n} pessoa(s) vinculada(s) a ${headquarters.name}`);
|
|
44
|
+
}
|
|
45
|
+
await setUnitModeRemote(org.id, on);
|
|
46
|
+
setMode(on);
|
|
47
|
+
emitDataChanged();
|
|
48
|
+
await load(org.id, user?.id);
|
|
49
|
+
toast.success(on ? "Gest\xE3o por unidades ligada" : "Gest\xE3o por unidades desligada");
|
|
50
|
+
} catch (err) {
|
|
51
|
+
toast.error("N\xE3o deu para mudar", { description: err?.message });
|
|
52
|
+
} finally {
|
|
53
|
+
setSaving(false);
|
|
54
|
+
setPending(null);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const noUnits = units.filter((u) => u.kind !== "region").length === 0;
|
|
58
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
59
|
+
/* @__PURE__ */ jsxs(Card, { children: [
|
|
60
|
+
/* @__PURE__ */ jsxs(CardHeader, { className: "flex flex-row items-start justify-between gap-4 space-y-0", children: [
|
|
61
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
62
|
+
/* @__PURE__ */ jsxs(CardTitle, { className: "flex items-center gap-2 text-base", children: [
|
|
63
|
+
/* @__PURE__ */ jsx(Building2, { className: "h-4 w-4" }),
|
|
64
|
+
"Gest\xE3o por unidades"
|
|
65
|
+
] }),
|
|
66
|
+
/* @__PURE__ */ jsx(CardDescription, { children: "Cada registro passa a pertencer a uma unidade, e cada pessoa v\xEA apenas as unidades a que est\xE1 vinculada. Quem tem acesso de dono ou administrador continua vendo a marca inteira." })
|
|
67
|
+
] }),
|
|
68
|
+
/* @__PURE__ */ jsx(
|
|
69
|
+
Switch,
|
|
70
|
+
{
|
|
71
|
+
checked: unitMode,
|
|
72
|
+
disabled: saving || noUnits && !unitMode,
|
|
73
|
+
onCheckedChange: (next) => setPending(next ? "on" : "off"),
|
|
74
|
+
"aria-label": "Gest\xE3o por unidades"
|
|
75
|
+
}
|
|
76
|
+
)
|
|
77
|
+
] }),
|
|
78
|
+
/* @__PURE__ */ jsxs(CardContent, { className: "space-y-3 text-sm", children: [
|
|
79
|
+
noUnits && !unitMode && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: "Cadastre pelo menos uma unidade abaixo antes de ligar." }),
|
|
80
|
+
!unitMode && unbound !== null && unbound > 0 && !noUnits && /* @__PURE__ */ jsxs("div", { className: "flex gap-3 rounded-lg border border-amber-400/40 bg-amber-400/10 p-3", children: [
|
|
81
|
+
/* @__PURE__ */ jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0 text-amber-600 dark:text-amber-400" }),
|
|
82
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 space-y-2", children: [
|
|
83
|
+
/* @__PURE__ */ jsxs("p", { children: [
|
|
84
|
+
/* @__PURE__ */ jsx("strong", { children: unbound }),
|
|
85
|
+
" pessoa(s) ainda n\xE3o est\xE3o vinculadas a nenhuma unidade. Ao ligar, elas deixam de ver agendamentos, pedidos e caixa de qualquer unidade."
|
|
86
|
+
] }),
|
|
87
|
+
headquarters && /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2", children: [
|
|
88
|
+
/* @__PURE__ */ jsx(
|
|
89
|
+
Checkbox,
|
|
90
|
+
{
|
|
91
|
+
checked: bindEveryone,
|
|
92
|
+
onChange: (v) => setBindEveryone(v)
|
|
93
|
+
}
|
|
94
|
+
),
|
|
95
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
96
|
+
"Vincular todo mundo a ",
|
|
97
|
+
/* @__PURE__ */ jsx("strong", { children: headquarters.name }),
|
|
98
|
+
" ao ligar"
|
|
99
|
+
] })
|
|
100
|
+
] })
|
|
101
|
+
] })
|
|
102
|
+
] }),
|
|
103
|
+
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: "Revers\xEDvel: desligar devolve a vis\xE3o completa para todo mundo e n\xE3o apaga nem move nenhum dado." })
|
|
104
|
+
] })
|
|
105
|
+
] }),
|
|
106
|
+
/* @__PURE__ */ jsx(
|
|
107
|
+
ConfirmDialog,
|
|
108
|
+
{
|
|
109
|
+
open: pending === "on",
|
|
110
|
+
loading: saving,
|
|
111
|
+
title: "Ligar a gest\xE3o por unidades?",
|
|
112
|
+
description: "Registros que j\xE1 existem n\xE3o t\xEAm unidade e continuam vis\xEDveis para a organiza\xE7\xE3o toda. Quem n\xE3o estiver vinculado a nenhuma unidade deixa de ver o que pertence a uma. Isto tamb\xE9m muda o que o assistente enxerga. D\xE1 para desligar depois, sem perder nada.",
|
|
113
|
+
confirmLabel: "Ligar",
|
|
114
|
+
cancelLabel: "Cancelar",
|
|
115
|
+
onConfirm: () => void apply(true),
|
|
116
|
+
onCancel: () => setPending(null)
|
|
117
|
+
}
|
|
118
|
+
),
|
|
119
|
+
/* @__PURE__ */ jsx(
|
|
120
|
+
ConfirmDialog,
|
|
121
|
+
{
|
|
122
|
+
open: pending === "off",
|
|
123
|
+
loading: saving,
|
|
124
|
+
title: "Desligar a gest\xE3o por unidades?",
|
|
125
|
+
description: "Todo mundo volta a ver a organiza\xE7\xE3o inteira. As unidades, os v\xEDnculos e o que j\xE1 foi carimbado continuam onde est\xE3o \u2014 \xE9 s\xF3 a restri\xE7\xE3o que deixa de valer.",
|
|
126
|
+
confirmLabel: "Desligar",
|
|
127
|
+
cancelLabel: "Cancelar",
|
|
128
|
+
onConfirm: () => void apply(false),
|
|
129
|
+
onCancel: () => setPending(null)
|
|
130
|
+
}
|
|
131
|
+
)
|
|
132
|
+
] });
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export { UnitModeCard };
|
|
136
|
+
//# sourceMappingURL=chunk-YEHIBPIX.js.map
|
|
137
|
+
//# sourceMappingURL=chunk-YEHIBPIX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/units/UnitModeCard.tsx"],"names":[],"mappings":"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","file":"chunk-YEHIBPIX.js","sourcesContent":["import * as React from 'react'\nimport { Card, CardHeader, CardTitle, CardDescription, CardContent, Switch, Checkbox, ConfirmDialog } from '@fayz-ai/ui'\nimport { AlertTriangle, Building2 } from 'lucide-react'\nimport { useTenant } from '../org'\nimport { useAuth } from '@fayz-ai/auth'\nimport { toast } from '../components/notifications/ToastProvider'\nimport { useUnitStore } from './store'\nimport { useUnitBootstrap } from './useUnitBootstrap'\nimport { bindAllMembersTo, countUnboundMembers, setUnitModeRemote } from './data'\nimport { emitDataChanged } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// The switch that decides whether a unit means anything at all.\n//\n// It lives in Settings → Geral, next to name, timezone and currency, because\n// that is the shelf for decisions about how this business is SHAPED — the\n// Unidades tab below is the list of them, which is a different question.\n//\n// Turning it on is the only action in the product that can make a colleague's\n// screen go empty, and the number of people that would happen to is knowable in\n// advance. So it is shown in advance, with a one-click way to avoid it.\n// ---------------------------------------------------------------------------\n\nexport function UnitModeCard() {\n useUnitBootstrap()\n const { org } = useTenant()\n const { user } = useAuth()\n const unitMode = useUnitStore((s) => s.unitMode)\n const units = useUnitStore((s) => s.units)\n const setMode = useUnitStore((s) => s.setMode)\n const load = useUnitStore((s) => s.load)\n\n const [unbound, setUnbound] = React.useState<number | null>(null)\n const [bindEveryone, setBindEveryone] = React.useState(true)\n const [pending, setPending] = React.useState<'on' | 'off' | null>(null)\n const [saving, setSaving] = React.useState(false)\n\n const headquarters = React.useMemo(\n () => units.find((u) => u.isHeadquarters && u.kind !== 'region') ?? units.find((u) => u.kind !== 'region'),\n [units],\n )\n\n React.useEffect(() => {\n if (!org?.id || unitMode) return\n let alive = true\n void countUnboundMembers(org.id).then((n) => { if (alive) setUnbound(n) })\n return () => { alive = false }\n }, [org?.id, unitMode])\n\n async function apply(on: boolean) {\n if (!org?.id) return\n setSaving(true)\n try {\n if (on && bindEveryone && headquarters) {\n const n = await bindAllMembersTo(org.id, headquarters.id)\n if (n > 0) toast.success(`${n} pessoa(s) vinculada(s) a ${headquarters.name}`)\n }\n await setUnitModeRemote(org.id, on)\n setMode(on)\n // The whole app's reads change meaning; nothing cached is still an answer.\n emitDataChanged()\n await load(org.id, user?.id)\n toast.success(on ? 'Gestão por unidades ligada' : 'Gestão por unidades desligada')\n } catch (err: any) {\n toast.error('Não deu para mudar', { description: err?.message })\n } finally {\n setSaving(false)\n setPending(null)\n }\n }\n\n const noUnits = units.filter((u) => u.kind !== 'region').length === 0\n\n return (\n <>\n <Card>\n <CardHeader className=\"flex flex-row items-start justify-between gap-4 space-y-0\">\n <div className=\"min-w-0\">\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <Building2 className=\"h-4 w-4\" />\n Gestão por unidades\n </CardTitle>\n <CardDescription>\n Cada registro passa a pertencer a uma unidade, e cada pessoa vê apenas as unidades\n a que está vinculada. Quem tem acesso de dono ou administrador continua vendo a marca inteira.\n </CardDescription>\n </div>\n <Switch\n checked={unitMode}\n disabled={saving || (noUnits && !unitMode)}\n onCheckedChange={(next: boolean) => setPending(next ? 'on' : 'off')}\n aria-label=\"Gestão por unidades\"\n />\n </CardHeader>\n\n <CardContent className=\"space-y-3 text-sm\">\n {noUnits && !unitMode && (\n <p className=\"text-muted-foreground\">\n Cadastre pelo menos uma unidade abaixo antes de ligar.\n </p>\n )}\n\n {!unitMode && unbound !== null && unbound > 0 && !noUnits && (\n <div className=\"flex gap-3 rounded-lg border border-amber-400/40 bg-amber-400/10 p-3\">\n <AlertTriangle className=\"mt-0.5 h-4 w-4 shrink-0 text-amber-600 dark:text-amber-400\" />\n <div className=\"min-w-0 space-y-2\">\n <p>\n <strong>{unbound}</strong> pessoa(s) ainda não estão vinculadas a nenhuma unidade.\n Ao ligar, elas deixam de ver agendamentos, pedidos e caixa de qualquer unidade.\n </p>\n {headquarters && (\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={bindEveryone}\n onChange={(v: boolean) => setBindEveryone(v)}\n />\n <span>Vincular todo mundo a <strong>{headquarters.name}</strong> ao ligar</span>\n </label>\n )}\n </div>\n </div>\n )}\n\n <p className=\"text-muted-foreground\">\n Reversível: desligar devolve a visão completa para todo mundo e não apaga nem move nenhum dado.\n </p>\n </CardContent>\n </Card>\n\n <ConfirmDialog\n open={pending === 'on'}\n loading={saving}\n title=\"Ligar a gestão por unidades?\"\n description={\n 'Registros que já existem não têm unidade e continuam visíveis para a organização toda. ' +\n 'Quem não estiver vinculado a nenhuma unidade deixa de ver o que pertence a uma. ' +\n 'Isto também muda o que o assistente enxerga. Dá para desligar depois, sem perder nada.'\n }\n confirmLabel=\"Ligar\"\n cancelLabel=\"Cancelar\"\n onConfirm={() => void apply(true)}\n onCancel={() => setPending(null)}\n />\n\n <ConfirmDialog\n open={pending === 'off'}\n loading={saving}\n title=\"Desligar a gestão por unidades?\"\n description={\n 'Todo mundo volta a ver a organização inteira. As unidades, os vínculos e o que já foi ' +\n 'carimbado continuam onde estão — é só a restrição que deixa de valer.'\n }\n confirmLabel=\"Desligar\"\n cancelLabel=\"Cancelar\"\n onConfirm={() => void apply(false)}\n onCancel={() => setPending(null)}\n />\n </>\n )\n}\n"]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { create } from 'zustand';
|
|
2
|
+
import { setActiveTenantId } from '@fayz-ai/core';
|
|
3
|
+
|
|
4
|
+
// src/org/store.ts
|
|
5
|
+
var STORAGE_KEY = "fayz:current-org";
|
|
6
|
+
function getPersistedOrgId() {
|
|
7
|
+
try {
|
|
8
|
+
if (typeof localStorage === "undefined") return null;
|
|
9
|
+
return localStorage.getItem(STORAGE_KEY);
|
|
10
|
+
} catch {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function persistOrgId(orgId) {
|
|
15
|
+
try {
|
|
16
|
+
if (typeof localStorage === "undefined") return;
|
|
17
|
+
if (orgId) {
|
|
18
|
+
localStorage.setItem(STORAGE_KEY, orgId);
|
|
19
|
+
} else {
|
|
20
|
+
localStorage.removeItem(STORAGE_KEY);
|
|
21
|
+
}
|
|
22
|
+
} catch {
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
var useOrganizationStore = create((set) => ({
|
|
26
|
+
currentOrg: null,
|
|
27
|
+
userOrgs: [],
|
|
28
|
+
members: [],
|
|
29
|
+
teamPersonKinds: [],
|
|
30
|
+
loading: false,
|
|
31
|
+
setCurrentOrg: (org) => {
|
|
32
|
+
setActiveTenantId(org?.id);
|
|
33
|
+
persistOrgId(org?.id ?? null);
|
|
34
|
+
set({ currentOrg: org });
|
|
35
|
+
},
|
|
36
|
+
// Sem `persistOrgId`: é a única diferença, e é toda a diferença.
|
|
37
|
+
paintCurrentOrg: (org) => {
|
|
38
|
+
setActiveTenantId(org?.id);
|
|
39
|
+
set({ currentOrg: org });
|
|
40
|
+
},
|
|
41
|
+
setUserOrgs: (orgs) => set({ userOrgs: orgs }),
|
|
42
|
+
setMembers: (members) => set({ members }),
|
|
43
|
+
setTeamPersonKinds: (kinds) => set({ teamPersonKinds: kinds }),
|
|
44
|
+
setLoading: (loading) => set({ loading }),
|
|
45
|
+
reset: () => {
|
|
46
|
+
setActiveTenantId(void 0);
|
|
47
|
+
set({ currentOrg: null, userOrgs: [], members: [], loading: false });
|
|
48
|
+
}
|
|
49
|
+
}));
|
|
50
|
+
|
|
51
|
+
export { getPersistedOrgId, persistOrgId, useOrganizationStore };
|
|
52
|
+
//# sourceMappingURL=chunk-YKPPCV2Z.js.map
|
|
53
|
+
//# sourceMappingURL=chunk-YKPPCV2Z.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/org/store.ts"],"names":[],"mappings":";;;;AAGA,IAAM,WAAA,GAAc,kBAAA;AAMpB,SAAS,iBAAA,GAAmC;AAC1C,EAAA,IAAI;AACF,IAAA,IAAI,OAAO,YAAA,KAAiB,WAAA,EAAa,OAAO,IAAA;AAChD,IAAA,OAAO,YAAA,CAAa,QAAQ,WAAW,CAAA;AAAA,EACzC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,aAAa,KAAA,EAA4B;AAChD,EAAA,IAAI;AACF,IAAA,IAAI,OAAO,iBAAiB,WAAA,EAAa;AACzC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,YAAA,CAAa,OAAA,CAAQ,aAAa,KAAK,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAA,YAAA,CAAa,WAAW,WAAW,CAAA;AAAA,IACrC;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAuCO,IAAM,oBAAA,GAAuB,MAAA,CAAiB,CAAC,GAAA,MAAS;AAAA,EAC7D,UAAA,EAAY,IAAA;AAAA,EACZ,UAAU,EAAC;AAAA,EACX,SAAS,EAAC;AAAA,EACV,iBAAiB,EAAC;AAAA,EAClB,OAAA,EAAS,KAAA;AAAA,EAET,aAAA,EAAe,CAAC,GAAA,KAAQ;AACtB,IAAA,iBAAA,CAAkB,KAAK,EAAE,CAAA;AACzB,IAAA,YAAA,CAAa,GAAA,EAAK,MAAM,IAAI,CAAA;AAC5B,IAAA,GAAA,CAAI,EAAE,UAAA,EAAY,GAAA,EAAK,CAAA;AAAA,EACzB,CAAA;AAAA;AAAA,EAGA,eAAA,EAAiB,CAAC,GAAA,KAAQ;AACxB,IAAA,iBAAA,CAAkB,KAAK,EAAE,CAAA;AACzB,IAAA,GAAA,CAAI,EAAE,UAAA,EAAY,GAAA,EAAK,CAAA;AAAA,EACzB,CAAA;AAAA,EACA,aAAa,CAAC,IAAA,KAAS,IAAI,EAAE,QAAA,EAAU,MAAM,CAAA;AAAA,EAC7C,YAAY,CAAC,OAAA,KAAY,GAAA,CAAI,EAAE,SAAS,CAAA;AAAA,EACxC,oBAAoB,CAAC,KAAA,KAAU,IAAI,EAAE,eAAA,EAAiB,OAAO,CAAA;AAAA,EAC7D,YAAY,CAAC,OAAA,KAAY,GAAA,CAAI,EAAE,SAAS,CAAA;AAAA,EACxC,OAAO,MAAM;AACX,IAAA,iBAAA,CAAkB,MAAS,CAAA;AAU3B,IAAA,GAAA,CAAI,EAAE,UAAA,EAAY,IAAA,EAAM,QAAA,EAAU,EAAC,EAAG,OAAA,EAAS,EAAC,EAAG,OAAA,EAAS,KAAA,EAAO,CAAA;AAAA,EACrE;AACF,CAAA,CAAE","file":"chunk-YKPPCV2Z.js","sourcesContent":["import { create } from 'zustand'\nimport { setActiveTenantId, type Organization, type OrgMember, type OrgMembership } from '@fayz-ai/core'\n\nconst STORAGE_KEY = 'fayz:current-org'\n\n// ---------------------------------------------------------------------------\n// Persistence helpers\n// ---------------------------------------------------------------------------\n\nfunction getPersistedOrgId(): string | null {\n try {\n if (typeof localStorage === 'undefined') return null\n return localStorage.getItem(STORAGE_KEY)\n } catch {\n return null\n }\n}\n\nfunction persistOrgId(orgId: string | null): void {\n try {\n if (typeof localStorage === 'undefined') return\n if (orgId) {\n localStorage.setItem(STORAGE_KEY, orgId)\n } else {\n localStorage.removeItem(STORAGE_KEY)\n }\n } catch {\n // ignore\n }\n}\n\n// ---------------------------------------------------------------------------\n// Store interface\n// ---------------------------------------------------------------------------\n\nexport interface OrgStore {\n currentOrg: Organization | null\n userOrgs: OrgMembership[]\n members: OrgMember[]\n /** Person `kind`s that make up the team (from config.team.personKinds). Drives\n * the Person-first Team screen; empty = legacy membership-only mode. */\n teamPersonKinds: string[]\n loading: boolean\n\n /**\n * A conta ativa, e a ESCOLHA que ela representa: persiste o pino.\n *\n * Use quando alguém decidiu — a troca de conta, a resolução do boot. Para\n * apenas PINTAR o que já se sabia, use `paintCurrentOrg`.\n */\n setCurrentOrg: (org: Organization | null) => void\n /**\n * Pinta a conta sem gravar o pino.\n *\n * O snapshot repinta a última conta conhecida antes de o primeiro filho\n * renderizar, para ninguém ver um quadro sem org. Isso é CACHE, não\n * decisão — e enquanto ele gravava o pino, vencia o\n * `decideWorkspaceChoice`: quem usa duas contas ficava preso na última que\n * o snapshot viu, e nada escolhido sobrevivia ao boot.\n */\n paintCurrentOrg: (org: Organization | null) => void\n setUserOrgs: (orgs: OrgMembership[]) => void\n setMembers: (members: OrgMember[]) => void\n setTeamPersonKinds: (kinds: string[]) => void\n setLoading: (loading: boolean) => void\n reset: () => void\n}\n\nexport const useOrganizationStore = create<OrgStore>((set) => ({\n currentOrg: null,\n userOrgs: [],\n members: [],\n teamPersonKinds: [],\n loading: false,\n\n setCurrentOrg: (org) => {\n setActiveTenantId(org?.id)\n persistOrgId(org?.id ?? null)\n set({ currentOrg: org })\n },\n\n // Sem `persistOrgId`: é a única diferença, e é toda a diferença.\n paintCurrentOrg: (org) => {\n setActiveTenantId(org?.id)\n set({ currentOrg: org })\n },\n setUserOrgs: (orgs) => set({ userOrgs: orgs }),\n setMembers: (members) => set({ members }),\n setTeamPersonKinds: (kinds) => set({ teamPersonKinds: kinds }),\n setLoading: (loading) => set({ loading }),\n reset: () => {\n setActiveTenantId(undefined)\n // NOTE: do NOT clear the persisted org id here. The org providers call\n // reset() whenever the auth store transiently reports `user === null` —\n // which happens on every fresh load while the Supabase session hydrates\n // asynchronously. Wiping 'fayz:current-org' at that moment drops a\n // multi-org user's workspace selection BEFORE loadOrgs can read it back,\n // so the app always falls to memberships[0] on reload (single-org users\n // never noticed). The pin is a last-selected hint that's re-validated\n // against the fresh membership list on load, so it's safe to keep across\n // sign-out too (a mismatching pin just falls back to memberships[0]).\n set({ currentOrg: null, userOrgs: [], members: [], loading: false })\n },\n}))\n\nexport { getPersistedOrgId, persistOrgId }\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../src/components/chat/markdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../src/components/chat/markdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAkF9B,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,qBAsG5D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginSettingsPanel.d.ts","sourceRoot":"","sources":["../../../src/components/plugins/PluginSettingsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAA;AAMhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAoB5D,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,KAAK,CAAC,SAAS,CAAA;CACzB;AASD,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;IACjE,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,qBAIA;AAkCD,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE;IAC/G;;;;+BAI2B;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,oCAAoC;IACpC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACjC,8DAA8D;IAC9D,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAChC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC/B,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAA;IACjB,qGAAqG;IACrG,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,
|
|
1
|
+
{"version":3,"file":"PluginSettingsPanel.d.ts","sourceRoot":"","sources":["../../../src/components/plugins/PluginSettingsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAA;AAMhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAoB5D,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,KAAK,CAAC,SAAS,CAAA;CACzB;AASD,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;IACjE,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,qBAIA;AAkCD,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE;IAC/G;;;;+BAI2B;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,oCAAoC;IACpC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACjC,8DAA8D;IAC9D,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAChC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC/B,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAA;IACjB,qGAAqG;IACrG,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,qBAqMA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsPage.d.ts","sourceRoot":"","sources":["../../../src/components/settings/SettingsPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"SettingsPage.d.ts","sourceRoot":"","sources":["../../../src/components/settings/SettingsPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAkBpE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB;wEACoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;qEACiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB;+EAC2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAChF,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;gEACgE;AAChE,wBAAgB,mBAAmB,CAAC,EAClC,WAAkB,EAClB,YAAmB,GACpB,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,WAAW,EAAE,CAkBxE;AAED,UAAU,iBAAiB;IACzB,IAAI,CAAC,EAAE,WAAW,EAAE,CAAA;IACpB,SAAS,CAAC,EAAE,WAAW,EAAE,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC/B,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC9B;;+BAE2B;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;yCACqC;IACrC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;+EAE2E;IAC3E,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;;;gFAK4E;IAC5E,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B;;;kDAG8C;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;4EACwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,SAAS,EACT,UAAU,EACV,SAAS,EACT,aAAa,EACb,YAAY,EACZ,WAAkB,EAClB,YAAmB,EACnB,OAAe,EACf,WAAW,EACX,QAAQ,EACR,SAAS,GACV,EAAE,iBAAiB,qBAmUnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionIndicator.d.ts","sourceRoot":"","sources":["../../../src/components/shared/ConnectionIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"ConnectionIndicator.d.ts","sourceRoot":"","sources":["../../../src/components/shared/ConnectionIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAczB;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,qBAuBxE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { AddConnectorButton, AddConnectorPanel, CATEGORY_LABELS, CATEGORY_ORDER, ConnectConsentPage, ConnectorDeliveries, ConnectorDetail, ConnectorHeading, ConnectorJourney, ConnectorRow, ConnectorRuns, ConnectorSyncActions, ConnectorsPanel, ConnectorsTab, CredentialSinkMissingError, DirectionBadge, OAUTH_FAILURE_REASONS, PlaneBadge, StateChip, buildConnectorList, categoryLabel, connectorRoute, connectorSubscriptions, filterConnectors, hasDestination, hasOperatingSettings, hasRunHistory, inCategories, isConnectorState, isSecretField, loadConnectorIndex, needsCredentialSink, oauthFailureMessage, openConnectorsPanel, probeConnection, readConnectorOAuthReturn, searchConnectors, shelveByCategory, sortConnectors, splitConnectorValues, submitConnection, urlWithoutOAuthReturn, useConnectorCatalog, useConnectorOAuthReturn, useConnectorRuns, useConnectors, useConnectorsPanelAvailable } from './chunk-U6ZCO2PS.js';
|
|
2
|
+
import './chunk-JFIU6NQP.js';
|
|
3
|
+
import './chunk-ENHCVGXZ.js';
|
|
4
|
+
import './chunk-PQ47MLTH.js';
|
|
5
|
+
import './chunk-S56FQKPL.js';
|
|
6
|
+
import './chunk-YUHCC7JY.js';
|
|
7
|
+
import './chunk-3OUD4XBK.js';
|
|
8
|
+
import './chunk-SGAFPNMA.js';
|
|
9
|
+
export { ConnectorMark, SDK_INTEGRATIONS } from './chunk-WPFZCYZL.js';
|
|
10
|
+
import './chunk-KLO7DKXX.js';
|
|
11
|
+
import './chunk-TL42NKTH.js';
|
|
12
|
+
import './chunk-5D5QLMOQ.js';
|
|
13
|
+
import './chunk-UQ2NTFQC.js';
|
|
14
|
+
import './chunk-KJELMULA.js';
|
|
15
|
+
import './chunk-JRZJBMOY.js';
|
|
16
|
+
import './chunk-YKPPCV2Z.js';
|
|
17
|
+
//# sourceMappingURL=connect-XKQJOWR7.js.map
|
|
18
|
+
//# sourceMappingURL=connect-XKQJOWR7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"connect-XKQJOWR7.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CrudDetailPage.d.ts","sourceRoot":"","sources":["../../src/crud/CrudDetailPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"CrudDetailPage.d.ts","sourceRoot":"","sources":["../../src/crud/CrudDetailPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAoB/D,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAIrE,OAAO,EAAgC,cAAc,EAAe,MAAM,iBAAiB,CAAA;AAC3F,OAAO,EAAE,cAAc,EAAE,CAAA;AAkBzB,OAAO,KAAK,EAAgB,SAAS,EAAE,QAAQ,EAAc,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzG,UAAU,mBAAmB;IAC3B,SAAS,EAAE,SAAS,CAAA;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;mCAC+B;IAC/B,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACnE;;;;;;iBAMa;IACb,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACxE;;;6DAGyD;IACzD,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACxB;;kDAE8C;IAC9C,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACpD;;8BAE0B;IAC1B,YAAY,CAAC,EAAE,UAAU,EAAE,CAAA;CAC5B;AAgED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,QAAQ,EAAE,CAM/F;AA6LD,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAgCzF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,SAAS,EAAE,EACjB,GAAG,EAAE;IAAE,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAC/D,SAAS,EAAE,CAKb;AA6BD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG;IAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CAAE,CAgE5K;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,UAAU,EACV,OAAO,EACP,MAAM,EACN,MAAM,EACN,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,MAAM,EACN,aAAa,EACb,YAAY,GACb,EAAE,mBAAmB,qBAkerB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CrudListView.d.ts","sourceRoot":"","sources":["../../src/crud/CrudListView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"CrudListView.d.ts","sourceRoot":"","sources":["../../src/crud/CrudListView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAA;AAEhD,OAAO,KAAK,EAAE,SAAS,IAAI,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAE3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAI9C,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9D,OAAO,EAAmH,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAOpL,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAI5D,4DAA4D;AAC5D,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;kEAC8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAC3B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClD,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAKD;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAA;AAYhD,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;IACzD,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;IACvB,yFAAyF;IACzF,OAAO,CAAC,EAAE,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;IACrC,wDAAwD;IACxD,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,gFAAgF;IAChF,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;+EAC2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wEAAwE;IACxE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IAC3B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,wCAAwC;IACxC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IAClD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;IAClE,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;IAC7B;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wDAAwD;IACxD,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;IAC/B,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;IAC3B;oFACgF;IAChF,WAAW,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAA;IACjC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAA;IAClC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;+EAC2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,kFAAkF;IAClF,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC/B,sDAAsD;IACtD,KAAK,CAAC,EAAE,YAAY,EAAE,CAAA;IACtB;4EACwE;IACxE,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC;;0EAEsE;IACtE,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,6EAA6E;IAC7E,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,gFAAgF;IAChF,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,8EAA8E;IAC9E,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,MAAM,KAAK,IAAI,CAAA;IACzC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IACxB;2CACuC;IACvC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;IAC7B,mFAAmF;IACnF,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,EACrD,SAAS,EACT,OAAO,EACP,KAAK,EACL,KAAK,EACL,eAAe,EACf,IAAQ,EACR,QAAa,EACb,YAAY,EACZ,OAAiB,EACjB,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,MAAM,EACN,aAAa,EACb,aAAa,EACb,KAAK,EACL,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,aAAa,EACb,KAAK,EACL,SAAS,EACT,gBAAgB,EAChB,MAAM,EACN,WAAW,EACX,SAAS,EACT,MAAM,EACN,OAAO,EACP,KAAK,EACL,OAAO,EACP,YAAsB,GACvB,EAAE,iBAAiB,CAAC,CAAC,CAAC,qBAskBtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CrudPage.d.ts","sourceRoot":"","sources":["../../src/crud/CrudPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAUhF,OAAO,EAAgB,KAAK,YAAY,EAAkB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEjG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAoB/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAG1D,KAAK,WAAW,GAAG,OAAO,GAAG,OAAO,CAAA;AAYpC,UAAU,aAAa,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;IAC9C,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;IACvB,QAAQ,EAAE,MAAM,SAAS,CAAC,CAAC,CAAC,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,YAAY,EAAE,CAAA;IAC5D;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB;qDACiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;
|
|
1
|
+
{"version":3,"file":"CrudPage.d.ts","sourceRoot":"","sources":["../../src/crud/CrudPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAUhF,OAAO,EAAgB,KAAK,YAAY,EAAkB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEjG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAoB/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAG1D,KAAK,WAAW,GAAG,OAAO,GAAG,OAAO,CAAA;AAYpC,UAAU,aAAa,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;IAC9C,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;IACvB,QAAQ,EAAE,MAAM,SAAS,CAAC,CAAC,CAAC,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,YAAY,EAAE,CAAA;IAC5D;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB;qDACiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAwID,wBAAgB,QAAQ,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,qBA6mB5M"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RelatedListTab.d.ts","sourceRoot":"","sources":["../../src/crud/RelatedListTab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,EAAE,SAAS,EAAY,WAAW,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"RelatedListTab.d.ts","sourceRoot":"","sources":["../../src/crud/RelatedListTab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,EAAE,SAAS,EAAY,WAAW,EAAE,MAAM,eAAe,CAAA;AAgCrE,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;IAC7D,IAAI,EAAE,OAAO,CAAA;IACb,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,WAAW,CAAA;IACpB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,4BAoDA;AAmCD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAO7D"}
|