{"version":3,"sources":["../../src/workos-widgets.client.tsx"],"sourcesContent":["\"use client\";\n\nimport { Theme as RadixThemes } from \"@radix-ui/themes\";\nimport type { GetPropDefTypes, themePropDefs } from \"@radix-ui/themes/props\";\nimport {\n  QueryClient,\n  QueryClientProvider,\n  useQueryClient,\n} from \"@tanstack/react-query\";\nimport cx from \"clsx\";\nimport * as React from \"react\";\nimport { namespaceClassNames } from \"./lib/utils.js\";\nimport { ExpiredTokenError, IncorrectPermissionsError } from \"./lib/errors.js\";\nimport { DEFAULT_API_HOSTNAME } from \"./lib/api/config.js\";\nimport type { Elements } from \"./lib/elements.js\";\nimport { WidgetsContext } from \"./lib/widgets-context.js\";\nimport { WIDGETS_DATA_ATTRIBUTE_NAMESPACE } from \"./lib/constants.js\";\n\nexport interface WorkOsWidgetsProps {\n  elements?: Elements;\n  theme?: Omit<GetPropDefTypes<typeof themePropDefs>, \"asChild\"> & {\n    fontFamily?: string;\n  };\n  style?: React.CSSProperties;\n  className?: string;\n  children: React.ReactNode;\n  apiHostname?: string;\n  port?: number | null;\n  https?: boolean;\n  /**\n   * Optional query client for users who are already using Tanstack Query. If\n   * not provided, a new query client will be created and mounted internally.\n   */\n  queryClient?: QueryClient;\n}\n\nexport const WorkOsWidgets: React.FC<WorkOsWidgetsProps> = ({\n  elements = {},\n  className,\n  theme: { fontFamily, ...radixThemesProps } = {},\n  style = {},\n  children,\n  apiHostname = DEFAULT_API_HOSTNAME,\n  port = null,\n  https = true,\n  queryClient,\n}) => {\n  const customStyle: React.CSSProperties = fontFamily\n    ? {\n        \"--default-font-family\": fontFamily,\n        ...style,\n      }\n    : style;\n\n  const apiBaseUrl = React.useMemo(() => {\n    try {\n      const url = new URL(\n        \"/\",\n        `${https ? \"https\" : \"http\"}://${apiHostname}${port ? `:${port}` : \"\"}`,\n      );\n      return url.toString().slice(0, -1);\n    } catch {\n      console.error(\n        \"Failed to validate the WorkOS API URL. Check to ensure that valid `apiHostname` and `port` props are passed to WorkOsWidgets\",\n      );\n      return `https://${DEFAULT_API_HOSTNAME}`;\n    }\n  }, [apiHostname, https, port]);\n\n  return (\n    <QueryClientProviderImpl client={queryClient}>\n      <RadixThemes\n        {...radixThemesProps}\n        {...{ [`data-${WIDGETS_DATA_ATTRIBUTE_NAMESPACE}-root`]: true }}\n        style={customStyle}\n        className={cx(namespaceClassNames(\"root\"), className)}\n      >\n        <WidgetsContext.Provider value={{ elements, apiBaseUrl }}>\n          {children}\n        </WidgetsContext.Provider>\n      </RadixThemes>\n    </QueryClientProviderImpl>\n  );\n};\n\nconst QueryClientProviderImpl = ({\n  client: providedClient,\n  children,\n}: {\n  client: QueryClient | undefined;\n  children: React.ReactNode;\n}) => {\n  const [queryClient] = React.useState(\n    () =>\n      providedClient ??\n      new QueryClient({\n        defaultOptions: {\n          queries: {\n            retry: (failureCount, error) => {\n              if (\n                error instanceof IncorrectPermissionsError ||\n                error instanceof ExpiredTokenError\n              ) {\n                return false;\n              }\n              return failureCount < 3;\n            },\n          },\n        },\n      }),\n  );\n\n  const client = useQueryClient(queryClient);\n  if (Object.is(client, providedClient)) {\n    // No need for a new context provider if the user provided the client to\n    // their own provider, which has already mounted the client.\n    return <>{children}</>;\n  }\n\n  return <QueryClientProvider client={client}>{children}</QueryClientProvider>;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA6EQ;AA3ER,oBAAqC;AAErC,yBAIO;AACP,kBAAe;AACf,YAAuB;AACvB,mBAAoC;AACpC,oBAA6D;AAC7D,oBAAqC;AAErC,6BAA+B;AAC/B,uBAAiD;AAoB1C,MAAM,gBAA8C,CAAC;AAAA,EAC1D,WAAW,CAAC;AAAA,EACZ;AAAA,EACA,OAAO,EAAE,YAAY,GAAG,iBAAiB,IAAI,CAAC;AAAA,EAC9C,QAAQ,CAAC;AAAA,EACT;AAAA,EACA,cAAc;AAAA,EACd,OAAO;AAAA,EACP,QAAQ;AAAA,EACR;AACF,MAAM;AACJ,QAAM,cAAmC,aACrC;AAAA,IACE,yBAAyB;AAAA,IACzB,GAAG;AAAA,EACL,IACA;AAEJ,QAAM,aAAa,MAAM,QAAQ,MAAM;AACrC,QAAI;AACF,YAAM,MAAM,IAAI;AAAA,QACd;AAAA,QACA,GAAG,QAAQ,UAAU,MAAM,MAAM,WAAW,GAAG,OAAO,IAAI,IAAI,KAAK,EAAE;AAAA,MACvE;AACA,aAAO,IAAI,SAAS,EAAE,MAAM,GAAG,EAAE;AAAA,IACnC,QAAQ;AACN,cAAQ;AAAA,QACN;AAAA,MACF;AACA,aAAO,WAAW,kCAAoB;AAAA,IACxC;AAAA,EACF,GAAG,CAAC,aAAa,OAAO,IAAI,CAAC;AAE7B,SACE,4CAAC,2BAAwB,QAAQ,aAC/B;AAAA,IAAC,cAAAA;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACH,GAAG,EAAE,CAAC,QAAQ,iDAAgC,OAAO,GAAG,KAAK;AAAA,MAC9D,OAAO;AAAA,MACP,eAAW,YAAAC,aAAG,kCAAoB,MAAM,GAAG,SAAS;AAAA,MAEpD,sDAAC,sCAAe,UAAf,EAAwB,OAAO,EAAE,UAAU,WAAW,GACpD,UACH;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,MAAM,0BAA0B,CAAC;AAAA,EAC/B,QAAQ;AAAA,EACR;AACF,MAGM;AACJ,QAAM,CAAC,WAAW,IAAI,MAAM;AAAA,IAC1B,MACE,kBACA,IAAI,+BAAY;AAAA,MACd,gBAAgB;AAAA,QACd,SAAS;AAAA,UACP,OAAO,CAAC,cAAc,UAAU;AAC9B,gBACE,iBAAiB,2CACjB,iBAAiB,iCACjB;AACA,qBAAO;AAAA,YACT;AACA,mBAAO,eAAe;AAAA,UACxB;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACL;AAEA,QAAM,aAAS,mCAAe,WAAW;AACzC,MAAI,OAAO,GAAG,QAAQ,cAAc,GAAG;AAGrC,WAAO,2EAAG,UAAS;AAAA,EACrB;AAEA,SAAO,4CAAC,0CAAoB,QAAiB,UAAS;AACxD;","names":["RadixThemes","cx"]}