@domainkit/react 0.5.0 → 0.6.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/README.md CHANGED
@@ -59,13 +59,13 @@ export const transport = Transport.layerFromAsync({
59
59
 
60
60
  The stylesheet is opt-in. `DomainKit.Root` accepts host messages, provider marks, icons, design
61
61
  tokens, color scheme, and portal container, so product branding remains outside the package.
62
- Cloudflare and Vercel use bundled, theme-aware marks sourced from SVGL; hosts can replace either
63
- through the `marks` prop.
62
+ Recognized provider marks load from `integrations.sh` and fall back to the provider's initial when
63
+ the mark is unavailable; hosts can replace them through the `marks` prop.
64
64
 
65
65
  ## Learn more
66
66
 
67
67
  - [React source and examples](https://github.com/AryaLabsHQ/domainkit/tree/main/packages/react)
68
- - [Vite workshop source](https://github.com/AryaLabsHQ/domainkit/tree/main/packages/react/examples/vite)
68
+ - [React component catalog](https://domain-kit.dev/components)
69
69
  - [Application transport contract](https://github.com/AryaLabsHQ/domainkit/blob/main/packages/domainkit/src/Transport.ts)
70
70
  - [Issues](https://github.com/AryaLabsHQ/domainkit/issues)
71
71
 
package/dist/index.mjs CHANGED
@@ -512,47 +512,60 @@ function Flow$3({ connection, onCleaned, receiptId, trigger, ...props }) {
512
512
  //#endregion
513
513
  //#region src/provider.tsx
514
514
  var provider_exports = /* @__PURE__ */ __exportAll({ Mark: () => Mark });
515
+ const logoHosts = {
516
+ amazonroute53: "route53.com",
517
+ aws: "amazonaws.com",
518
+ bluehost: "bluehost.com",
519
+ cloudflare: "cloudflare.com",
520
+ digitalocean: "digitalocean.com",
521
+ dnsimple: "dnsimple.com",
522
+ dreamhost: "dreamhost.com",
523
+ dynadot: "dynadot.com",
524
+ gandi: "gandi.net",
525
+ godaddy: "godaddy.com",
526
+ google: "cloud.google.com",
527
+ googlecloud: "cloud.google.com",
528
+ googleclouddns: "cloud.google.com",
529
+ hostgator: "hostgator.com",
530
+ hostinger: "hostinger.com",
531
+ hover: "hover.com",
532
+ ionos: "ionos.com",
533
+ namecheap: "namecheap.com",
534
+ namecom: "name.com",
535
+ netlify: "netlify.com",
536
+ ns1: "ns1.com",
537
+ ovh: "ovh.com",
538
+ porkbun: "porkbun.com",
539
+ route53: "route53.com",
540
+ spaceship: "spaceship.com",
541
+ squarespace: "squarespace.com",
542
+ vercel: "vercel.com"
543
+ };
515
544
  const logoKey = (providerId) => providerId.trim().toLowerCase().replace(/[^a-z0-9]+/g, "");
545
+ const logoHost = (providerId) => logoHosts[logoKey(providerId)];
516
546
  const letterMark = (provider) => provider.name.trim().charAt(0).toUpperCase() || "?";
517
- function CloudflareMark() {
518
- return /* @__PURE__ */ jsxs("svg", {
519
- "aria-hidden": "true",
520
- viewBox: "0 0 48 32",
521
- children: [/* @__PURE__ */ jsx("path", {
522
- d: "M30.2 24.6H7.7a6.2 6.2 0 0 1 .5-12.4 9.7 9.7 0 0 1 18.5-2.8 7.7 7.7 0 0 1 3.5 15.2Z",
523
- fill: "#f48120"
524
- }), /* @__PURE__ */ jsx("path", {
525
- d: "M33.1 16.2h1.3a5.2 5.2 0 0 1 .3 10.4H18.2l1.2-3.4h12.9l.8-7Z",
526
- fill: "#faad3d"
527
- })]
528
- });
529
- }
530
- function VercelMark() {
531
- return /* @__PURE__ */ jsx("svg", {
532
- "aria-hidden": "true",
533
- viewBox: "0 0 32 32",
534
- children: /* @__PURE__ */ jsx("path", {
535
- d: "m16 5 13 22H3L16 5Z",
536
- fill: "currentColor"
537
- })
538
- });
539
- }
540
- const builtInMarks = {
541
- cloudflare: CloudflareMark,
542
- vercel: VercelMark
543
- };
544
547
  function DefaultMark({ provider }) {
545
- const BuiltIn = builtInMarks[logoKey(provider.id)];
546
- return BuiltIn === void 0 ? letterMark(provider) : /* @__PURE__ */ jsx(BuiltIn, {});
548
+ const host = logoHost(provider.id);
549
+ const [failed, setFailed] = useState(false);
550
+ if (host === void 0 || failed) return letterMark(provider);
551
+ return /* @__PURE__ */ jsx("img", {
552
+ alt: "",
553
+ height: 32,
554
+ onError: () => setFailed(true),
555
+ referrerPolicy: "no-referrer",
556
+ src: `https://integrations.sh/logo/${host}?sz=64`,
557
+ width: 32
558
+ });
547
559
  }
548
560
  function Mark({ provider, ...props }) {
549
561
  const { marks } = useDomainKit();
550
562
  const replacement = marks[provider.id];
551
- const content = typeof replacement === "function" ? replacement(provider) : replacement ?? /* @__PURE__ */ jsx(DefaultMark, { provider });
563
+ const content = typeof replacement === "function" ? replacement(provider) : replacement ?? /* @__PURE__ */ jsx(DefaultMark, { provider }, provider.id);
552
564
  return usePart("span", props, { providerId: provider.id }, {
553
565
  "aria-label": provider.name,
554
566
  children: content,
555
567
  "data-domainkit-part": "provider-mark",
568
+ "data-domainkit-provider": logoKey(provider.id),
556
569
  role: "img"
557
570
  });
558
571
  }
@@ -1175,6 +1188,7 @@ function ZoneFile({ copiedIcon, copiedLabel = "Copied", copyIcon, copyLabel = "C
1175
1188
  children: copied ? copiedIcon ?? icons.copied : copyIcon ?? icons.copy
1176
1189
  }), copied ? copiedLabel : copyLabel]
1177
1190
  }), /* @__PURE__ */ jsxs("button", {
1191
+ "aria-label": downloadLabel,
1178
1192
  "data-domainkit-part": "zone-download",
1179
1193
  onClick: () => downloadZoneFile(domain, records),
1180
1194
  type: "button",
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["Root","mergeMessages","leafPart","Value","Priority","Root","State","Command","useModel","LifecycleEvent","useController","Root","Outcome","Dialog","BaseAlertDialog","Operations.List","Flow","State","Command","useModel","LifecycleEvent","useController","Root","Status","BaseDialog","Provider.Mark","Dialog","Flow","RetryAction","Card","BaseAlertDialog","Status","Root","State","Command","useModel","LifecycleEvent","useController","Root","Outcome","Dialog","BaseDialog","Operations.List","Flow","Records.Table","_exhaustive","RecordStatus","BasePopover","Connection.useController","Connection.Root","Records.Table","Verification.Status","Connection.Card","Connection.CardIdentity","Provider.Mark","Connection.Status","Connection.CardActions","Connection.RetryAction","BaseDialog","Connection.ConnectTrigger","Connection.Dialog","Provisioning.Flow","Cleanup.useController","BaseMenu","Cleanup.Dialog","Connection.DisconnectDialog"],"sources":["../src/atom.ts","../src/composition.tsx","../src/icons.tsx","../src/messages.ts","../src/theme.ts","../src/domain-kit.tsx","../src/lifecycle.ts","../src/operations.tsx","../src/cleanup.tsx","../src/provider.tsx","../src/connection.tsx","../src/records.tsx","../src/provisioning.tsx","../src/verification.tsx","../src/domain.tsx","../src/testing.ts"],"sourcesContent":["import * as Data from \"effect/Data\";\nimport type * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { Transport } from \"domainkit\";\n\nexport type Runtime = Atom.AtomRuntime<Transport.Service>;\n\nexport type Failure = Data.TaggedEnum<{\n Failure: {\n readonly message: string;\n readonly operation: string;\n readonly retry: Transport.Failure[\"retry\"];\n };\n}>;\nexport const Failure = Data.taggedEnum<Failure>();\n\nexport const failureFromError = (error: Transport.Failure): Failure =>\n Failure.Failure({\n message: error.message,\n operation: error.operation,\n retry: error.retry,\n });\n\nexport const failureFromDefect = (operation: string, message: string): Failure =>\n Failure.Failure({ message, operation, retry: \"safe\" });\n\nexport const recordsIdentity = (records: ReadonlyArray<Transport.DnsRecord>): string =>\n JSON.stringify(\n records.map(({ id, name, priority, type, value }) => ({ id, name, priority, type, value })),\n );\n","import { useRender } from \"@base-ui/react/use-render\";\nimport type { CSSProperties, ElementType, ReactElement } from \"react\";\n\nexport type ClassName<State> = string | ((state: State) => string | undefined);\nexport type Style<State> = CSSProperties | ((state: State) => CSSProperties | undefined);\n\nexport type PartProps<Tag extends ElementType, State extends Record<string, unknown>> = Omit<\n useRender.ElementProps<Tag>,\n \"className\" | \"style\"\n> & {\n readonly className?: ClassName<State>;\n readonly render?: useRender.RenderProp<State>;\n readonly style?: Style<State>;\n};\n\nexport function usePart<\n Tag extends keyof React.JSX.IntrinsicElements,\n State extends Record<string, unknown>,\n>(\n defaultTagName: Tag,\n componentProps: PartProps<Tag, State>,\n state: State,\n internalProps: Record<string, unknown>,\n): ReactElement {\n const { className, render, style, ...externalProps } = componentProps;\n const parameters: useRender.Parameters<State, Element, undefined> & {\n readonly className?: ClassName<State>;\n readonly style?: Style<State>;\n } = {\n ...(className === undefined ? {} : { className }),\n defaultTagName,\n props: [internalProps, externalProps] as unknown as Record<string, unknown>,\n ...(render === undefined ? {} : { render }),\n state,\n ...(style === undefined ? {} : { style }),\n };\n return useRender(parameters);\n}\n","import { createContext, useContext, useMemo, type ReactNode } from \"react\";\n\nexport type Icons = {\n readonly copied: ReactNode;\n readonly copy: ReactNode;\n readonly download: ReactNode;\n};\n\nfunction Glyph({ children }: { readonly children: ReactNode }) {\n return (\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n viewBox=\"0 0 24 24\"\n >\n {children}\n </svg>\n );\n}\n\nexport const defaultIcons = {\n copied: (\n <Glyph>\n <path d=\"M20 6 9 17l-5-5\" />\n </Glyph>\n ),\n copy: (\n <Glyph>\n <rect height=\"14\" rx=\"2\" width=\"14\" x=\"8\" y=\"8\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </Glyph>\n ),\n download: (\n <Glyph>\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <path d=\"m7 10 5 5 5-5\" />\n <path d=\"M12 15V3\" />\n </Glyph>\n ),\n} as const satisfies Icons;\n\nconst IconsContext = createContext<Icons>(defaultIcons);\n\nexport function IconsProvider({\n children,\n icons,\n}: {\n readonly children: ReactNode;\n readonly icons?: Partial<Icons>;\n}) {\n const value = useMemo<Icons>(\n () => ({\n copied: icons?.copied ?? defaultIcons.copied,\n copy: icons?.copy ?? defaultIcons.copy,\n download: icons?.download ?? defaultIcons.download,\n }),\n [icons],\n );\n return <IconsContext.Provider value={value}>{children}</IconsContext.Provider>;\n}\n\nexport function useIcons(): Icons {\n return useContext(IconsContext);\n}\n","export interface Catalog {\n readonly applyCleanup: string;\n readonly applyDns: string;\n readonly applyingDns: string;\n readonly authenticationAlternative: string;\n readonly automaticUnavailable: string;\n readonly cancel: string;\n readonly checkAgain: string;\n readonly checkingDns: string;\n readonly checkDns: string;\n readonly cleanupConsent: string;\n readonly cleanupPartial: string;\n readonly cleaningDns: string;\n readonly connectProvider: (provider: string) => string;\n readonly connected: (provider: string) => string;\n readonly providerAvailable: (provider: string) => string;\n readonly connecting: string;\n readonly close: string;\n readonly detectingProvider: string;\n readonly disconnectDomain: string;\n readonly disconnectConsent: string;\n readonly disconnecting: string;\n readonly detaching: string;\n readonly disconnectTitle: (provider: string) => string;\n readonly domainDisconnected: string;\n readonly dialogDescription: (domain: string) => string;\n readonly dialogTitle: (provider: string) => string;\n readonly openingAuthorization: string;\n readonly moreActions: string;\n readonly planConsent: string;\n readonly planningCleanup: string;\n readonly planningDns: string;\n readonly recordsPartiallyApplied: string;\n readonly reviewCleanup: string;\n readonly reviewDns: string;\n readonly retry: string;\n readonly existingConnection: string;\n readonly targetUnavailable: string;\n readonly attachTarget: (target: string) => string;\n readonly tokenLabel: string;\n}\n\nexport const english: Catalog = {\n applyCleanup: \"Remove records\",\n applyDns: \"Add records\",\n applyingDns: \"Adding records…\",\n authenticationAlternative: \"or\",\n automaticUnavailable: \"Automatic connection is not available for this domain\",\n cancel: \"Cancel\",\n checkAgain: \"Check again\",\n checkingDns: \"Checking DNS…\",\n checkDns: \"Check DNS\",\n cleanupConsent: \"Only records proven by the apply receipt will be deleted.\",\n cleanupPartial: \"Some DNS records could not be deleted. Review and retry safely.\",\n cleaningDns: \"Removing records…\",\n connectProvider: () => \"Connect\",\n connected: (provider) => `${provider} connected`,\n providerAvailable: (provider) => `${provider} manages DNS for this domain`,\n connecting: \"Connecting…\",\n close: \"Close\",\n detectingProvider: \"Detecting DNS provider…\",\n disconnectDomain: \"Disconnect\",\n disconnectConsent:\n \"This domain will be detached from the provider. Existing DNS records will be preserved.\",\n disconnecting: \"Disconnecting…\",\n detaching: \"Detaching domain…\",\n disconnectTitle: (provider) => `Detach ${provider}?`,\n domainDisconnected: \"Domain detached. DNS records were preserved.\",\n dialogDescription: (domain) => `Authorize DNS changes for ${domain}.`,\n dialogTitle: (provider) => `Connect ${provider}`,\n openingAuthorization: \"Opening provider authorization…\",\n moreActions: \"More connection actions\",\n planConsent: \"Review the exact DNS operations before approving this plan.\",\n planningCleanup: \"Preparing cleanup…\",\n planningDns: \"Preparing DNS changes…\",\n recordsPartiallyApplied: \"Some DNS changes failed. Review and retry safely.\",\n reviewCleanup: \"Remove records\",\n reviewDns: \"Review changes\",\n retry: \"Try again\",\n existingConnection: \"Existing provider connection\",\n targetUnavailable: \"No provider targets are available for this connection.\",\n attachTarget: (target) => `Use ${target}`,\n tokenLabel: \"API token\",\n};\n\nexport const merge = (overrides: Partial<Catalog> = {}): Catalog => ({\n ...english,\n ...overrides,\n});\n","import type { CSSProperties } from \"react\";\n\nexport interface Theme {\n readonly accent?: string;\n readonly accentContrast?: string;\n readonly backdrop?: string;\n readonly background?: string;\n readonly border?: string;\n readonly danger?: string;\n readonly dangerContrast?: string;\n readonly fill?: string;\n readonly fontFamily?: string;\n readonly muted?: string;\n readonly radius?: string;\n readonly shadow?: string;\n readonly success?: string;\n readonly text?: string;\n}\n\nconst variables = {\n accent: \"--domainkit-accent\",\n accentContrast: \"--domainkit-accent-contrast\",\n backdrop: \"--domainkit-backdrop\",\n background: \"--domainkit-background\",\n border: \"--domainkit-border\",\n danger: \"--domainkit-danger\",\n dangerContrast: \"--domainkit-danger-contrast\",\n fill: \"--domainkit-fill\",\n fontFamily: \"--domainkit-font-family\",\n muted: \"--domainkit-muted\",\n radius: \"--domainkit-radius\",\n shadow: \"--domainkit-shadow\",\n success: \"--domainkit-success\",\n text: \"--domainkit-text\",\n} as const satisfies Record<keyof Theme, string>;\n\nexport function toStyle(theme: Theme = {}): CSSProperties {\n return Object.fromEntries(\n Object.entries(theme).flatMap(([key, value]) =>\n value === undefined ? [] : [[variables[key as keyof Theme], value]],\n ),\n ) as CSSProperties;\n}\n","import { RegistryProvider } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport type * as Layer from \"effect/Layer\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport {\n createContext,\n useCallback,\n useContext,\n useLayoutEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n type ReactNode,\n type RefObject,\n} from \"react\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport type { Icons } from \"./icons.tsx\";\nimport { IconsProvider } from \"./icons.tsx\";\nimport type * as Lifecycle from \"./lifecycle.ts\";\nimport type { Catalog } from \"./messages.ts\";\nimport { merge as mergeMessages } from \"./messages.ts\";\nimport type { Marks } from \"./provider.tsx\";\nimport type { Theme } from \"./theme.ts\";\nimport { toStyle } from \"./theme.ts\";\nimport type { Runtime } from \"./atom.ts\";\n\nexport interface RootState extends Record<string, unknown> {\n readonly colorScheme: \"dark\" | \"inherit\" | \"light\";\n}\n\nexport interface RootProps extends Omit<PartProps<\"div\", RootState>, \"children\"> {\n readonly children: ReactNode;\n readonly colorScheme?: RootState[\"colorScheme\"];\n readonly icons?: Partial<Icons>;\n readonly messages?: Partial<Catalog>;\n readonly marks?: Marks;\n readonly navigate?: (url: string) => void;\n readonly onEvent?: Lifecycle.Listener;\n readonly portalContainer?: HTMLElement | null;\n readonly theme?: Theme;\n readonly transport: Layer.Layer<Transport.Service>;\n}\n\ninterface ContextValue {\n readonly colorScheme: RootState[\"colorScheme\"];\n readonly navigate: (url: string) => void;\n readonly marks: Marks;\n readonly messages: Catalog;\n readonly emit: Lifecycle.Listener;\n readonly portalContainer: RefObject<HTMLElement | null>;\n readonly themeStyle: ReturnType<typeof toStyle>;\n readonly runtime: Runtime;\n}\n\nconst Context = createContext<ContextValue | null>(null);\n\nconst navigateInBrowser = (url: string): void => {\n if (typeof window === \"undefined\") {\n throw new Error(\"DomainKit OAuth navigation requires a browser or a custom navigate function\");\n }\n window.location.assign(url);\n};\n\nconst resolvePortalContainer = (\n container: HTMLElement | null,\n ownerDocument: Document | null,\n): HTMLElement | null => {\n if (container === null || ownerDocument === null) return null;\n return container.ownerDocument === ownerDocument && container.getRootNode() === ownerDocument\n ? container\n : null;\n};\n\nconst usePortalContainer = (container: HTMLElement | null): HTMLElement | null => {\n const ownerDocument = useMemo(() => container?.ownerDocument ?? null, [container]);\n const subscribe = useCallback(\n (notify: () => void) => {\n if (ownerDocument === null || typeof MutationObserver === \"undefined\") return () => {};\n const observer = new MutationObserver(notify);\n observer.observe(ownerDocument, { childList: true, subtree: true });\n return () => observer.disconnect();\n },\n [ownerDocument],\n );\n const getSnapshot = useCallback(\n () => resolvePortalContainer(container, ownerDocument),\n [container, ownerDocument],\n );\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n};\n\nexport function Root({\n children,\n colorScheme = \"inherit\",\n icons,\n marks = {},\n messages,\n navigate = navigateInBrowser,\n onEvent,\n portalContainer = null,\n theme,\n transport,\n ...props\n}: RootProps) {\n const runtime = useMemo(() => Atom.runtime(transport), [transport]);\n const onEventRef = useRef(onEvent);\n useLayoutEffect(() => {\n onEventRef.current = onEvent;\n }, [onEvent]);\n const emit = useCallback<Lifecycle.Listener>((event) => {\n try {\n onEventRef.current?.(event);\n } catch {\n // Host observers are best-effort and cannot change a completed mutation's outcome.\n }\n }, []);\n const themeStyle = toStyle(theme);\n const resolvedPortalContainer = usePortalContainer(portalContainer);\n const portalContainerRef = useMemo<RefObject<HTMLElement | null>>(\n () => ({ current: resolvedPortalContainer }),\n [resolvedPortalContainer],\n );\n const content = usePart(\n \"div\",\n props,\n { colorScheme },\n {\n children,\n \"data-color-scheme\": colorScheme,\n \"data-domainkit-root\": \"\",\n style: themeStyle,\n },\n );\n return (\n <RegistryProvider>\n <Context.Provider\n value={{\n colorScheme,\n emit,\n marks,\n messages: mergeMessages(messages),\n navigate,\n portalContainer: portalContainerRef,\n runtime,\n themeStyle,\n }}\n >\n <IconsProvider {...(icons === undefined ? {} : { icons })}>{content}</IconsProvider>\n </Context.Provider>\n </RegistryProvider>\n );\n}\n\nexport function useDomainKit(): ContextValue {\n const value = useContext(Context);\n if (value === null)\n throw new Error(\"DomainKit components must be rendered inside DomainKit.Root\");\n return value;\n}\n","import type { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\n\n/** User-action lifecycle events suitable for host notifications and telemetry. */\nexport type Event = Data.TaggedEnum<{\n ConnectionEstablished: {\n readonly connection: Transport.Connected;\n readonly source: \"attach\" | \"connect\";\n };\n DomainDetached: {\n readonly connection: Transport.Connected;\n readonly result: Transport.DetachResult;\n };\n RecordsApplied: {\n readonly connection: Transport.Connected;\n readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" }>;\n };\n RecordsCleaned: {\n readonly connection: Transport.Connected;\n readonly result: Extract<Transport.CleanupResult, { readonly _tag: \"Cleaned\" }>;\n };\n RecordsPartiallyApplied: {\n readonly connection: Transport.Connected;\n readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Partial\" }>;\n };\n RecordsPartiallyCleaned: {\n readonly connection: Transport.Connected;\n readonly result: Extract<Transport.CleanupResult, { readonly _tag: \"Partial\" }>;\n };\n}>;\n\nexport const Event = Data.taggedEnum<Event>();\n\nexport type Listener = (event: Event) => void;\n","import type { Transport } from \"domainkit\";\nimport type { ReactElement } from \"react\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\n\nexport type Operation =\n | Transport.ProvisioningPlan[\"operations\"][number]\n | Transport.CleanupPlan[\"operations\"][number];\n\ntype LeafState = Record<string, unknown>;\n\nfunction leafPart<Tag extends keyof React.JSX.IntrinsicElements>(\n defaultTagName: Tag,\n part: string,\n) {\n return function Leaf(props: PartProps<Tag, LeafState>): ReactElement {\n return usePart(defaultTagName, props, {}, { \"data-domainkit-part\": part });\n };\n}\n\nexport const Kind = leafPart(\"span\", \"operation-kind\");\nexport const Type = leafPart(\"strong\", \"operation-type\");\nexport const Record = leafPart(\"span\", \"operation-record\");\nexport const Name = leafPart(\"span\", \"operation-name\");\nexport const Value = leafPart(\"code\", \"operation-value\");\nexport const Priority = leafPart(\"span\", \"operation-priority\");\nexport const Reason = leafPart(\"span\", \"operation-reason\");\n\nexport interface ItemProps extends PartProps<\"li\", { readonly operation: Operation[\"_tag\"] }> {\n readonly operation: Operation;\n}\n\nexport function Item({ operation, ...props }: ItemProps) {\n return usePart(\n \"li\",\n props,\n { operation: operation._tag },\n {\n children: (\n <>\n <Kind>{operation._tag}</Kind> <Type>{operation.record.type}</Type>{\" \"}\n <Record>\n <Name>{operation.record.name}</Name>\n <Value>{operation.record.value}</Value>\n {operation.record.priority === undefined ? null : (\n <Priority>Priority {operation.record.priority}</Priority>\n )}\n {\"reason\" in operation ? <Reason>{operation.reason}</Reason> : null}\n </Record>\n </>\n ),\n \"data-domainkit-part\": \"operation-item\",\n \"data-operation\": operation._tag,\n },\n );\n}\n\nexport interface RootProps extends PartProps<\n \"ul\",\n { readonly count: number; readonly lifecycle: Lifecycle }\n> {\n readonly count?: number;\n readonly lifecycle: Lifecycle;\n}\n\nexport type Lifecycle = \"cleanup\" | \"provisioning\";\n\nexport function Root({ count = 0, lifecycle, ...props }: RootProps) {\n return usePart(\n \"ul\",\n props,\n { count, lifecycle },\n {\n \"data-domainkit-part\":\n lifecycle === \"provisioning\" ? \"plan-operations\" : \"cleanup-operations\",\n \"data-lifecycle\": lifecycle,\n },\n );\n}\n\nexport interface ListProps extends Omit<RootProps, \"children\" | \"count\"> {\n readonly operations: ReadonlyArray<Operation>;\n}\n\nexport function List({ lifecycle, operations, ...props }: ListProps) {\n return (\n <Root count={operations.length} lifecycle={lifecycle} {...props}>\n {operations.map((operation) => (\n <Item key={operation.id} operation={operation} />\n ))}\n </Root>\n );\n}\n","import { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { useMemo, useRef, type ReactElement } from \"react\";\n\nimport { failureFromError, type Failure } from \"./atom.ts\";\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport { Event as LifecycleEvent } from \"./lifecycle.ts\";\nimport * as Operations from \"./operations.tsx\";\n\ntype LocalState = Data.TaggedEnum<{\n Cleaned: { readonly result: Extract<Transport.CleanupResult, { readonly _tag: \"Cleaned\" }> };\n Cleaning: { readonly plan: Transport.CleanupPlan };\n Idle: {};\n Partial: { readonly result: Extract<Transport.CleanupResult, { readonly _tag: \"Partial\" }> };\n Planning: {};\n Review: { readonly plan: Transport.CleanupPlan };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State =\n | LocalState\n | Extract<Transport.CleanupResult, { readonly _tag: \"Stale\" }>\n | Failure;\n\nexport type Command = Data.TaggedEnum<{\n Apply: {};\n Dismiss: {};\n Plan: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport interface Controller {\n readonly apply: () => void;\n readonly dismiss: () => void;\n readonly plan: () => void;\n readonly retry: () => void;\n readonly state: State;\n}\n\nexport type Completion = Extract<Transport.CleanupResult, { readonly _tag: \"Cleaned\" | \"Partial\" }>;\n\nexport function useModel(\n connection: Transport.Connected,\n receiptId: string,\n onCleaned?: (result: Completion) => void,\n): Model {\n const { emit, runtime } = useDomainKit();\n const onCleanedRef = useRef(onCleaned);\n onCleanedRef.current = onCleaned;\n return useMemo(() => {\n const state = Atom.make<State>(State.Idle());\n const execute = runtime.fn<Command>()((command, get) => {\n const current = get(state);\n if (command._tag === \"Dismiss\") {\n if (current._tag === \"Planning\" || current._tag === \"Cleaning\") return Effect.void;\n get.set(state, State.Idle());\n return Effect.void;\n }\n if (command._tag === \"Plan\") {\n if (current._tag === \"Planning\" || current._tag === \"Cleaning\") return Effect.void;\n get.set(state, State.Planning());\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.cleanup.plan({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n receiptId,\n }),\n ).pipe(\n Effect.tap((plan) => Effect.sync(() => get.set(state, State.Review({ plan })))),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n }\n if (\n current._tag !== \"Review\" ||\n current.plan.operations.some((operation) => operation._tag === \"Blocked\")\n )\n return Effect.void;\n const plan = current.plan;\n get.set(state, State.Cleaning({ plan }));\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.cleanup.apply({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n planDigest: plan.digest,\n receiptId,\n }),\n ).pipe(\n Effect.tap((result) =>\n Effect.sync(() => {\n if (result._tag === \"Cleaned\") {\n get.set(state, State.Cleaned({ result }));\n onCleanedRef.current?.(result);\n emit(LifecycleEvent.RecordsCleaned({ connection, result }));\n } else if (result._tag === \"Partial\") {\n get.set(state, State.Partial({ result }));\n onCleanedRef.current?.(result);\n emit(LifecycleEvent.RecordsPartiallyCleaned({ connection, result }));\n } else {\n get.set(state, result);\n }\n }),\n ),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n });\n return { command: execute, state };\n }, [connection.attachment.domain, connection.attachment.id, emit, receiptId, runtime]);\n}\n\nexport function useController(\n connection: Transport.Connected,\n receiptId: string,\n onCleaned?: (result: Completion) => void,\n): Controller {\n const model = useModel(connection, receiptId, onCleaned);\n const state = useAtomValue(model.state);\n const execute = useAtomSet(model.command);\n\n return {\n apply: () => execute(Command.Apply()),\n dismiss: () => execute(Command.Dismiss()),\n plan: () => execute(Command.Plan()),\n retry: () => execute(Command.Plan()),\n state,\n } as const;\n}\n\nexport interface RootProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Root({ status, ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"cleanup-flow\", \"data-state\": status },\n );\n}\n\nexport function Outcome({ state }: { readonly state: State }) {\n const { messages } = useDomainKit();\n if (state._tag === \"Partial\" || state._tag === \"Failure\" || state._tag === \"Stale\") {\n return (\n <p data-domainkit-part=\"flow-outcome\" data-tone=\"danger\" role=\"alert\">\n {state._tag === \"Partial\" ? messages.cleanupPartial : state.message}\n </p>\n );\n }\n return null;\n}\n\nexport interface DialogProps {\n readonly controller: Controller;\n readonly onOpenChange?: (open: boolean) => void;\n readonly onOpenChangeComplete?: (open: boolean) => void;\n readonly trigger?: ReactElement | null;\n}\n\nexport function Dialog({ controller, onOpenChange, onOpenChangeComplete, trigger }: DialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const state = controller.state;\n const planRef = useRef<Transport.CleanupPlan | undefined>(undefined);\n if (state._tag === \"Idle\") planRef.current = undefined;\n if (state._tag === \"Review\" || state._tag === \"Cleaning\") planRef.current = state.plan;\n const plan = planRef.current;\n const busy = state._tag === \"Planning\" || state._tag === \"Cleaning\";\n const open = state._tag !== \"Idle\" && state._tag !== \"Cleaned\";\n return (\n <BaseAlertDialog.Root\n onOpenChange={(nextOpen, eventDetails) => {\n if (!nextOpen && busy) {\n eventDetails.cancel();\n return;\n }\n if (!nextOpen) {\n controller.dismiss();\n }\n onOpenChange?.(nextOpen);\n }}\n onOpenChangeComplete={onOpenChangeComplete}\n open={open}\n >\n {trigger === null ? null : (\n <BaseAlertDialog.Trigger\n data-domainkit-part=\"cleanup-trigger\"\n disabled={state._tag !== \"Idle\"}\n onClick={() => controller.plan()}\n {...(trigger === undefined ? {} : { render: trigger })}\n >\n {messages.reviewCleanup}\n </BaseAlertDialog.Trigger>\n )}\n <BaseAlertDialog.Portal container={portalContainer}>\n <BaseAlertDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseAlertDialog.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"cleanup-dialog\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <div data-domainkit-part=\"dialog-heading\">\n <BaseAlertDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.reviewCleanup}\n </BaseAlertDialog.Title>\n <BaseAlertDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.cleanupConsent}\n </BaseAlertDialog.Description>\n </div>\n {busy ? null : (\n <BaseAlertDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseAlertDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-body\">\n {plan === undefined ? (\n <p data-domainkit-part=\"dialog-progress\" role=\"status\">\n {messages.planningCleanup}\n </p>\n ) : (\n <Operations.List lifecycle=\"cleanup\" operations={plan.operations} />\n )}\n <Outcome state={state} />\n </div>\n <div data-domainkit-part=\"dialog-footer\">\n {busy ? (\n <button data-domainkit-part=\"cleanup-apply\" disabled type=\"button\">\n {state._tag === \"Cleaning\" ? messages.cleaningDns : messages.planningCleanup}\n </button>\n ) : state._tag === \"Review\" && plan !== undefined ? (\n <>\n <BaseAlertDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseAlertDialog.Close>\n <button\n data-domainkit-part=\"cleanup-apply\"\n disabled={plan.operations.some((operation) => operation._tag === \"Blocked\")}\n onClick={() => controller.apply()}\n type=\"button\"\n >\n {messages.applyCleanup}\n </button>\n </>\n ) : (\n <>\n <BaseAlertDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.close}\n </BaseAlertDialog.Close>\n <button\n data-domainkit-part=\"cleanup-retry\"\n onClick={() => controller.retry()}\n type=\"button\"\n >\n {messages.retry}\n </button>\n </>\n )}\n </div>\n </BaseAlertDialog.Popup>\n </BaseAlertDialog.Portal>\n </BaseAlertDialog.Root>\n );\n}\n\nexport interface FlowProps extends Omit<RootProps, \"status\"> {\n readonly connection: Transport.Connected;\n readonly onCleaned?: (result: Completion) => void;\n readonly receiptId: string;\n readonly trigger?: ReactElement;\n}\n\nexport function Flow({ connection, onCleaned, receiptId, trigger, ...props }: FlowProps) {\n const controller = useController(connection, receiptId, onCleaned);\n const state = controller.state;\n return (\n <Root status={state._tag} {...props}>\n <Dialog controller={controller} {...(trigger === undefined ? {} : { trigger })} />\n </Root>\n );\n}\n","import type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport type { Transport } from \"domainkit\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\n\ntype ProviderDescriptor = Transport.Provider;\n\nexport type Marks = Readonly<\n Record<string, ReactNode | ((provider: ProviderDescriptor) => ReactNode)>\n>;\n\nexport interface MarkState extends Record<string, unknown> {\n readonly providerId: string;\n}\n\nexport interface MarkProps extends PartProps<\"span\", MarkState> {\n readonly provider: ProviderDescriptor;\n}\n\nconst logoKey = (providerId: string): string =>\n providerId\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"\");\n\nconst letterMark = (provider: ProviderDescriptor): string =>\n provider.name.trim().charAt(0).toUpperCase() || \"?\";\n\nfunction CloudflareMark() {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 48 32\">\n <path\n d=\"M30.2 24.6H7.7a6.2 6.2 0 0 1 .5-12.4 9.7 9.7 0 0 1 18.5-2.8 7.7 7.7 0 0 1 3.5 15.2Z\"\n fill=\"#f48120\"\n />\n <path d=\"M33.1 16.2h1.3a5.2 5.2 0 0 1 .3 10.4H18.2l1.2-3.4h12.9l.8-7Z\" fill=\"#faad3d\" />\n </svg>\n );\n}\n\nfunction VercelMark() {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 32 32\">\n <path d=\"m16 5 13 22H3L16 5Z\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nconst builtInMarks: Readonly<Record<string, () => ReactNode>> = {\n cloudflare: CloudflareMark,\n vercel: VercelMark,\n};\n\nfunction DefaultMark({ provider }: { readonly provider: ProviderDescriptor }) {\n const BuiltIn = builtInMarks[logoKey(provider.id)];\n return BuiltIn === undefined ? letterMark(provider) : <BuiltIn />;\n}\n\nexport function Mark({ provider, ...props }: MarkProps) {\n const { marks } = useDomainKit();\n const replacement = marks[provider.id];\n const content =\n typeof replacement === \"function\"\n ? replacement(provider)\n : (replacement ?? <DefaultMark provider={provider} />);\n return usePart(\n \"span\",\n props,\n { providerId: provider.id },\n {\n \"aria-label\": provider.name,\n children: content,\n \"data-domainkit-part\": \"provider-mark\",\n role: \"img\",\n },\n );\n}\n\nexport type { ProviderDescriptor as Provider };\nexport type MarkElementProps = ComponentPropsWithoutRef<\"span\">;\n","import { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport * as AsyncResult from \"effect/unstable/reactivity/AsyncResult\";\nimport {\n useMemo,\n useState,\n type ComponentPropsWithoutRef,\n type FormEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport * as Provider from \"./provider.tsx\";\nimport { Event as LifecycleEvent } from \"./lifecycle.ts\";\nimport { failureFromDefect, failureFromError, type Failure } from \"./atom.ts\";\n\ntype LocalState = Data.TaggedEnum<{\n Detaching: { readonly snapshot: Transport.Connected };\n Loading: {};\n Redirecting: { readonly snapshot: Disconnected };\n Submitting: { readonly snapshot: Disconnected };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State = LocalState | Transport.ConnectionSnapshot | Failure;\n\ntype Disconnected = Extract<Transport.ConnectionSnapshot, { readonly _tag: \"Disconnected\" }>;\n\nconst sameTarget = (left: Transport.ProviderTarget, right: Transport.ProviderTarget): boolean =>\n left.accountId === right.accountId &&\n left.accountKind === right.accountKind &&\n left.zoneId === right.zoneId &&\n left.zoneName === right.zoneName;\n\nexport interface Controller {\n readonly attach: (\n connection: Transport.ReusableConnection,\n target: Transport.ProviderTarget,\n ) => void;\n readonly connect: (method: Transport.Method) => void;\n readonly detach: () => void;\n readonly retry: () => void;\n readonly state: State;\n}\n\nexport type Command = Data.TaggedEnum<{\n Attach: { readonly connectionId: string; readonly target: Transport.ProviderTarget };\n Connect: { readonly method: Transport.Method };\n Detach: {};\n Retry: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport function useModel(domain: string): Model {\n const { emit, navigate, runtime } = useDomainKit();\n return useMemo(() => {\n const actionState = Atom.make<State | undefined>(undefined);\n const inspect = runtime.atom(\n Effect.flatMap(Transport.Service, (transport) => transport.connection.inspect({ domain })),\n );\n const state = Atom.make((get): State => {\n const action = get(actionState);\n if (action !== undefined) return action;\n const inspection = get(inspect);\n return AsyncResult.matchWithError(inspection, {\n onDefect: () => failureFromDefect(\"connection.inspect\", \"Provider detection failed\"),\n onError: failureFromError,\n onInitial: () => State.Loading(),\n onSuccess: ({ value }) => value,\n });\n });\n const command = runtime.fn<Command>()((input, get) => {\n if (input._tag === \"Retry\") {\n get.set(actionState, undefined);\n get.refresh(inspect);\n return Effect.void;\n }\n const snapshot = get(state);\n if (input._tag === \"Detach\") {\n if (snapshot._tag !== \"Connected\") return Effect.void;\n get.set(actionState, State.Detaching({ snapshot }));\n return Effect.flatMap(Transport.Service, (transport) =>\n Effect.flatMap(\n transport.connection.detach({\n attachmentId: snapshot.attachment.id,\n preserveDns: true,\n }),\n (result) => {\n const detached: Disconnected = {\n _tag: \"Disconnected\",\n domain: snapshot.attachment.domain,\n provider: snapshot.provider,\n reusableConnections: [],\n };\n return Effect.flatMap(\n Effect.sync(() => {\n get.set(actionState, detached);\n emit(\n LifecycleEvent.DomainDetached({\n connection: snapshot,\n result,\n }),\n );\n }),\n () =>\n transport.connection.inspect({ domain }).pipe(\n Effect.catch(() => Effect.succeed(detached)),\n Effect.tap((refreshed) => Effect.sync(() => get.set(actionState, refreshed))),\n ),\n );\n },\n ),\n ).pipe(\n Effect.catch((error) => Effect.sync(() => get.set(actionState, failureFromError(error)))),\n Effect.asVoid,\n );\n }\n if (snapshot._tag !== \"Disconnected\") return Effect.void;\n const complete = (\n request: Effect.Effect<Transport.ConnectionResult, Transport.Failure, Transport.Service>,\n source: \"connect\" | \"attach\",\n ) =>\n request.pipe(\n Effect.tap((result) =>\n Effect.sync(() => {\n if (result._tag === \"Redirect\") {\n get.set(actionState, State.Redirecting({ snapshot }));\n navigate(result.authorizationUrl);\n } else {\n get.set(actionState, result);\n emit(\n LifecycleEvent.ConnectionEstablished({\n connection: result,\n source,\n }),\n );\n }\n }),\n ),\n Effect.catch((error) => Effect.sync(() => get.set(actionState, failureFromError(error)))),\n Effect.asVoid,\n );\n if (input._tag === \"Attach\") {\n const reusableConnection = snapshot.reusableConnections.find(\n ({ connection }) => connection.id === input.connectionId,\n );\n if (reusableConnection === undefined) return Effect.void;\n const target = reusableConnection.targets.find((candidate) =>\n sameTarget(candidate, input.target),\n );\n if (target === undefined) return Effect.void;\n get.set(actionState, State.Submitting({ snapshot }));\n return complete(\n Effect.flatMap(Transport.Service, (transport) =>\n transport.connection.attach({\n connectionId: input.connectionId,\n domain,\n target,\n }),\n ),\n \"attach\",\n );\n }\n get.set(actionState, State.Submitting({ snapshot }));\n if (input._tag === \"Connect\") {\n return complete(\n Effect.flatMap(Transport.Service, (transport) =>\n transport.connection.connect({\n domain,\n method: input.method,\n providerId: snapshot.provider.id,\n }),\n ),\n \"connect\",\n );\n }\n return Effect.void;\n });\n return { command, state };\n }, [domain, emit, navigate, runtime]);\n}\n\nexport function useController(domain: string): Controller {\n const model = useModel(domain);\n const state = useAtomValue(model.state);\n const execute = useAtomSet(model.command);\n\n return {\n attach: (connection, target) =>\n execute(Command.Attach({ connectionId: connection.connection.id, target })),\n connect: (method) => execute(Command.Connect({ method })),\n detach: () => execute(Command.Detach()),\n retry: () => execute(Command.Retry()),\n state,\n };\n}\n\nexport interface RootState extends Record<string, unknown> {\n readonly status: State[\"_tag\"];\n}\n\nexport interface RootProps extends PartProps<\"div\", RootState> {\n readonly status?: State[\"_tag\"];\n}\n\nexport function Root({ children, status = \"Loading\", ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n {\n children,\n \"data-domainkit-part\": \"connection-root\",\n },\n );\n}\n\nexport interface StatusState extends Record<string, unknown> {\n readonly status: State[\"_tag\"];\n}\n\nexport interface StatusProps extends PartProps<\"div\", StatusState> {\n readonly state: State;\n}\n\nexport function Status({ children, state, ...props }: StatusProps) {\n const { messages } = useDomainKit();\n const text =\n state._tag === \"Loading\"\n ? messages.detectingProvider\n : state._tag === \"Connected\"\n ? messages.connected(state.provider.name)\n : state._tag === \"Detaching\"\n ? messages.detaching\n : state._tag === \"Unsupported\"\n ? messages.automaticUnavailable\n : state._tag === \"Failure\"\n ? state.message\n : state._tag === \"Redirecting\"\n ? messages.openingAuthorization\n : state._tag === \"Submitting\"\n ? messages.connecting\n : messages.providerAvailable(state.provider.name);\n return usePart(\n \"div\",\n props,\n { status: state._tag },\n {\n children: children ?? text,\n \"data-domainkit-part\": \"connection-status\",\n \"data-state\": state._tag,\n },\n );\n}\n\nexport interface TriggerProps extends Omit<\n ComponentPropsWithoutRef<typeof BaseDialog.Trigger>,\n \"children\"\n> {\n readonly children: ReactNode;\n}\n\nexport interface ConnectTriggerProps extends Omit<TriggerProps, \"children\"> {\n readonly children?: ReactNode;\n readonly provider: Provider.Provider;\n}\n\nexport function Trigger({ children, ...props }: TriggerProps) {\n return (\n <BaseDialog.Trigger data-domainkit-part=\"connection-trigger\" {...props}>\n {children}\n </BaseDialog.Trigger>\n );\n}\n\nexport function ConnectTrigger({ children, provider, ...props }: ConnectTriggerProps) {\n const { messages } = useDomainKit();\n return (\n <Trigger {...props} data-domainkit-recipe=\"connect\">\n {children ?? (\n <>\n <Provider.Mark aria-hidden=\"true\" provider={provider} />\n {messages.connectProvider(provider.name)}\n </>\n )}\n </Trigger>\n );\n}\n\nexport interface ActionState extends Record<string, unknown> {\n readonly authentication: \"attach\" | \"integration\" | \"oauth\" | \"token\";\n}\n\nexport interface OAuthActionProps extends PartProps<\"button\", ActionState> {\n readonly controller: Controller;\n readonly label: string;\n}\n\nexport function OAuthAction({ controller, label, ...props }: OAuthActionProps) {\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n return usePart(\n \"button\",\n props,\n { authentication: \"oauth\" },\n {\n children: label,\n \"data-domainkit-part\": \"oauth-connect\",\n disabled: pending,\n onClick: () => controller.connect(Transport.Method.OAuth()),\n type: \"button\",\n },\n );\n}\n\nexport interface IntegrationActionProps extends PartProps<\"button\", ActionState> {\n readonly controller: Controller;\n readonly label: string;\n}\n\nexport function IntegrationAction({ controller, label, ...props }: IntegrationActionProps) {\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n return usePart(\n \"button\",\n props,\n { authentication: \"integration\" },\n {\n children: label,\n \"data-domainkit-part\": \"integration-connect\",\n disabled: pending,\n onClick: () => controller.connect(Transport.Method.Integration()),\n type: \"button\",\n },\n );\n}\n\nexport interface AttachActionProps extends PartProps<\"button\", ActionState> {\n readonly connection: Transport.ReusableConnection;\n readonly controller: Controller;\n readonly label: string;\n readonly target: Transport.ProviderTarget;\n}\n\nexport function AttachAction({\n connection,\n controller,\n label,\n target,\n ...props\n}: AttachActionProps) {\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n return usePart(\n \"button\",\n props,\n { authentication: \"attach\" },\n {\n children: label,\n \"data-domainkit-part\": \"attach-target\",\n disabled: pending,\n onClick: () => controller.attach(connection, target),\n type: \"button\",\n },\n );\n}\n\nexport interface TokenActionProps extends Omit<PartProps<\"form\", ActionState>, \"method\"> {\n readonly controller: Controller;\n readonly method: Extract<Transport.AuthenticationMethod, { readonly _tag: \"Token\" }>;\n}\n\nexport function TokenAction({ controller, method, ...props }: TokenActionProps) {\n const { messages } = useDomainKit();\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n const [token, setToken] = useState(\"\");\n const [parameters, setParameters] = useState<Readonly<Record<string, string>>>({});\n const submit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (token.length > 0) {\n const populated = Object.fromEntries(\n Object.entries(parameters).filter(([, value]) => value.length > 0),\n );\n controller.connect(\n Transport.Method.Token({\n token,\n ...(Object.keys(populated).length === 0 ? {} : { parameters: populated }),\n }),\n );\n }\n };\n const missingRequiredParameter = method.parameters?.some(\n (parameter) => parameter.required === true && !parameters[parameter.key],\n );\n return usePart(\n \"form\",\n props,\n { authentication: \"token\" },\n {\n children: (\n <>\n {method.parameters?.map((parameter) => (\n <label key={parameter.key}>\n {parameter.label}\n <input\n name={parameter.key}\n disabled={pending}\n onChange={(event) => {\n const value = event.currentTarget.value;\n setParameters((current) => ({\n ...current,\n [parameter.key]: value,\n }));\n }}\n placeholder={parameter.placeholder}\n required={parameter.required}\n type=\"text\"\n value={parameters[parameter.key] ?? \"\"}\n />\n {parameter.description === undefined ? null : <small>{parameter.description}</small>}\n </label>\n ))}\n <label>\n {messages.tokenLabel}\n <input\n autoComplete=\"off\"\n disabled={pending}\n name=\"token\"\n onChange={(event) => setToken(event.currentTarget.value)}\n placeholder={method.placeholder}\n type=\"password\"\n value={token}\n />\n </label>\n <button\n disabled={pending || token.length === 0 || missingRequiredParameter === true}\n type=\"submit\"\n >\n {method.label}\n </button>\n </>\n ),\n \"data-domainkit-part\": \"token-connect\",\n onSubmit: submit,\n },\n );\n}\n\nexport interface DialogProps {\n readonly controller: Controller;\n readonly snapshot: Disconnected;\n}\n\nexport const targetLabel = (target: Transport.ProviderTarget): string =>\n `${target.evidence?.accountName ?? target.accountId} · ${target.zoneName}`;\n\nexport function Dialog({ controller, snapshot }: DialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n const integrationMethods = snapshot.provider.authentication.filter(\n (method): method is Extract<Transport.AuthenticationMethod, { readonly _tag: \"Integration\" }> =>\n method._tag === \"Integration\",\n );\n const oauthMethods = snapshot.provider.authentication.filter(\n (method): method is Extract<Transport.AuthenticationMethod, { readonly _tag: \"OAuth\" }> =>\n method._tag === \"OAuth\",\n );\n const tokenMethods = snapshot.provider.authentication.filter(\n (method): method is Extract<Transport.AuthenticationMethod, { readonly _tag: \"Token\" }> =>\n method._tag === \"Token\",\n );\n const hasProviderAccountPath =\n integrationMethods.length > 0 ||\n oauthMethods.length > 0 ||\n snapshot.reusableConnections.length > 0;\n return (\n <BaseDialog.Portal container={portalContainer}>\n <BaseDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseDialog.Popup\n data-domainkit-part=\"connection-dialog\"\n data-domainkit-root=\"\"\n data-color-scheme={colorScheme}\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <Provider.Mark provider={snapshot.provider} />\n <div data-domainkit-part=\"dialog-heading\">\n <BaseDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.dialogTitle(snapshot.provider.name)}\n </BaseDialog.Title>\n <BaseDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.dialogDescription(snapshot.domain)}\n </BaseDialog.Description>\n </div>\n {pending ? null : (\n <BaseDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-body\">\n {hasProviderAccountPath ? (\n <div data-domainkit-part=\"provider-authentication\">\n {integrationMethods.map((method) => (\n <IntegrationAction controller={controller} key={method._tag} label={method.label} />\n ))}\n {oauthMethods.map((method) => (\n <OAuthAction controller={controller} key={method._tag} label={method.label} />\n ))}\n {snapshot.reusableConnections.map((connection) => (\n <section\n data-connection-id={connection.connection.id}\n data-domainkit-part=\"reusable-connection\"\n key={connection.connection.id}\n >\n <div data-domainkit-part=\"reusable-connection-heading\">\n <strong>{messages.existingConnection}</strong>\n <span>{connection.connection.providerId}</span>\n </div>\n <div\n data-domainkit-part=\"target-list\"\n data-state={\n connection.targets.length === 0\n ? \"unavailable\"\n : connection.targets.length === 1\n ? \"unique\"\n : \"ambiguous\"\n }\n >\n {connection.targets.length === 0 ? (\n <p data-domainkit-part=\"target-unavailable\">{messages.targetUnavailable}</p>\n ) : (\n connection.targets.map((target) => (\n <AttachAction\n connection={connection}\n controller={controller}\n key={`${target.accountId}:${target.zoneId}`}\n label={messages.attachTarget(targetLabel(target))}\n target={target}\n />\n ))\n )}\n </div>\n </section>\n ))}\n </div>\n ) : null}\n {hasProviderAccountPath && tokenMethods.length > 0 ? (\n <div\n aria-label={messages.authenticationAlternative}\n data-domainkit-part=\"authentication-separator\"\n role=\"separator\"\n >\n <span aria-hidden=\"true\">{messages.authenticationAlternative}</span>\n </div>\n ) : null}\n {tokenMethods.map((method) => (\n <TokenAction controller={controller} key={method._tag} method={method} />\n ))}\n </div>\n {pending ? null : (\n <div data-domainkit-part=\"dialog-footer\">\n <BaseDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseDialog.Close>\n </div>\n )}\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n );\n}\n\nexport interface FlowProps extends Omit<RootProps, \"children\"> {\n readonly domain: string;\n}\n\nexport function Flow({ domain, ...props }: FlowProps) {\n const controller = useController(domain);\n const state = controller.state;\n const snapshot =\n state._tag === \"Disconnected\"\n ? state\n : state._tag === \"Submitting\" || state._tag === \"Redirecting\"\n ? state.snapshot\n : undefined;\n return (\n <Root {...props} status={state._tag}>\n <Status state={state} />\n {state._tag === \"Failure\" && state.retry !== \"never\" ? (\n <RetryAction\n controller={controller}\n kind={state.retry === \"after-user-action\" ? \"after-user-action\" : \"retry\"}\n />\n ) : null}\n {snapshot === undefined ? null : (\n <BaseDialog.Root\n onOpenChange={(open, eventDetails) => {\n if (!open && (state._tag === \"Submitting\" || state._tag === \"Redirecting\")) {\n eventDetails.cancel();\n }\n }}\n >\n <ConnectTrigger provider={snapshot.provider} />\n <Dialog controller={controller} snapshot={snapshot} />\n </BaseDialog.Root>\n )}\n </Root>\n );\n}\n\nexport interface RetryActionProps extends PartProps<\"button\", { readonly status: \"Failure\" }> {\n readonly controller: Controller;\n readonly kind?: \"after-user-action\" | \"retry\";\n}\n\nexport function RetryAction({ controller, kind = \"retry\", ...props }: RetryActionProps) {\n const { messages } = useDomainKit();\n return usePart(\n \"button\",\n props,\n { status: \"Failure\" },\n {\n children: kind === \"after-user-action\" ? messages.checkAgain : messages.retry,\n \"data-domainkit-part\": \"connection-retry\",\n onClick: controller.retry,\n type: \"button\",\n },\n );\n}\n\nexport interface CardProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Card({ status, ...props }: CardProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"connected-card\", \"data-state\": status },\n );\n}\n\nexport interface CardIdentityProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function CardIdentity({ status, ...props }: CardIdentityProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"connected-identity\", \"data-state\": status },\n );\n}\n\nexport interface CardActionsProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function CardActions({ status, ...props }: CardActionsProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"connected-actions\", \"data-state\": status },\n );\n}\n\nexport interface DisconnectDialogProps {\n readonly connection: Transport.Connected;\n readonly controller: Controller;\n readonly onOpenChange?: (open: boolean) => void;\n readonly open?: boolean;\n readonly trigger?: ReactElement | null;\n}\n\nexport function DisconnectDialog({\n connection,\n controller,\n onOpenChange,\n open: openProp,\n trigger,\n}: DisconnectDialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const [internalOpen, setInternalOpen] = useState(false);\n const open = openProp ?? internalOpen;\n const setOpen = (nextOpen: boolean) => {\n if (openProp === undefined) setInternalOpen(nextOpen);\n onOpenChange?.(nextOpen);\n };\n const detaching = controller.state._tag === \"Detaching\";\n return (\n <BaseAlertDialog.Root\n onOpenChange={(nextOpen, eventDetails) => {\n if (!nextOpen && detaching) {\n eventDetails.cancel();\n return;\n }\n setOpen(nextOpen);\n }}\n open={open}\n >\n {trigger === null ? null : (\n <BaseAlertDialog.Trigger\n data-domainkit-part=\"disconnect-trigger\"\n {...(trigger === undefined ? {} : { render: trigger })}\n >\n {messages.disconnectDomain}\n </BaseAlertDialog.Trigger>\n )}\n <BaseAlertDialog.Portal container={portalContainer}>\n <BaseAlertDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseAlertDialog.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"disconnect-dialog\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <div data-domainkit-part=\"dialog-heading\">\n <BaseAlertDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.disconnectTitle(connection.provider.name)}\n </BaseAlertDialog.Title>\n <BaseAlertDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.disconnectConsent}\n </BaseAlertDialog.Description>\n </div>\n {detaching ? null : (\n <BaseAlertDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseAlertDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-footer\">\n {detaching ? null : (\n <BaseAlertDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseAlertDialog.Close>\n )}\n <button\n data-domainkit-part=\"disconnect-action\"\n disabled={detaching}\n onClick={() => controller.detach()}\n type=\"button\"\n >\n {detaching ? messages.detaching : messages.disconnectDomain}\n </button>\n </div>\n </BaseAlertDialog.Popup>\n </BaseAlertDialog.Portal>\n </BaseAlertDialog.Root>\n );\n}\n\nexport type Connected = Transport.Connected;\n","import { useEffect, useRef, useState, type ReactElement, type ReactNode } from \"react\";\nimport type { Transport } from \"domainkit\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useIcons } from \"./icons.tsx\";\n\nexport const copyText = (value: string): Promise<boolean> => {\n if (typeof navigator === \"undefined\" || navigator.clipboard === undefined) {\n return Promise.resolve(false);\n }\n return navigator.clipboard.writeText(value).then(\n () => true,\n () => false,\n );\n};\n\nconst downloadText = (filename: string, contents: string): void => {\n if (typeof document === \"undefined\") return;\n const blob = new Blob([contents], { type: \"text/plain;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.download = filename;\n anchor.href = url;\n document.body.append(anchor);\n anchor.click();\n anchor.remove();\n URL.revokeObjectURL(url);\n};\n\nconst absoluteDomainName = (value: string): string => (value.endsWith(\".\") ? value : `${value}.`);\n\nconst textEncoder = new TextEncoder();\n\nconst escapeTxtCharacter = (character: string): string => {\n if (character === '\"' || character === \"\\\\\") return `\\\\${character}`;\n const codePoint = character.codePointAt(0);\n if (codePoint !== undefined && (codePoint < 32 || codePoint === 127)) {\n return `\\\\${codePoint.toString().padStart(3, \"0\")}`;\n }\n return character;\n};\n\nconst txtValue = (value: string): string => {\n const chunks: Array<string> = [];\n let chunk = \"\";\n let byteLength = 0;\n for (const character of value) {\n const characterByteLength = textEncoder.encode(character).byteLength;\n if (byteLength + characterByteLength > 255) {\n chunks.push(chunk);\n chunk = \"\";\n byteLength = 0;\n }\n chunk += escapeTxtCharacter(character);\n byteLength += characterByteLength;\n }\n chunks.push(chunk);\n return chunks.map((part) => `\"${part}\"`).join(\" \");\n};\n\nconst srvValue = (value: string): string => {\n const fields = value.trim().split(/\\s+/);\n if (fields.length !== 3) throw new Error(`Invalid SRV value: ${value}`);\n const [weight, port, target] = fields;\n if (weight === undefined || port === undefined || target === undefined) {\n throw new Error(`Invalid SRV value: ${value}`);\n }\n return `${weight} ${port} ${absoluteDomainName(target)}`;\n};\n\nconst zoneValue = (record: Transport.DnsRecord): string => {\n switch (record.type.toUpperCase()) {\n case \"CNAME\":\n case \"MX\":\n case \"NS\":\n case \"PTR\":\n return absoluteDomainName(record.value);\n case \"SRV\":\n return srvValue(record.value);\n case \"TXT\":\n return txtValue(record.value);\n default:\n return record.value;\n }\n};\n\ntype LeafState = Record<string, unknown>;\n\nfunction leafPart<Tag extends keyof React.JSX.IntrinsicElements>(\n defaultTagName: Tag,\n part: string,\n) {\n return function Leaf(props: PartProps<Tag, LeafState>): ReactElement {\n return usePart(defaultTagName, props, {}, { \"data-domainkit-part\": part });\n };\n}\n\nexport interface CopyController {\n readonly copied: boolean;\n readonly copy: () => void;\n}\n\nexport function useCopy(value: string, resetAfter = 2000): CopyController {\n const [copied, setCopied] = useState(false);\n const reset = useRef<ReturnType<typeof setTimeout>>(undefined);\n useEffect(() => () => clearTimeout(reset.current), []);\n return {\n copied,\n copy: () => {\n void copyText(value).then((ok) => {\n if (!ok) return;\n setCopied(true);\n clearTimeout(reset.current);\n reset.current = setTimeout(() => setCopied(false), resetAfter);\n });\n },\n };\n}\n\nexport interface CopyValueProps extends PartProps<\"span\", { readonly copied: boolean }> {\n readonly copiedIcon?: ReactNode;\n readonly copiedLabel?: string;\n readonly copyIcon?: ReactNode;\n readonly copyLabel?: string;\n readonly value: string;\n}\n\nexport function CopyValue({\n copiedIcon,\n copiedLabel = \"Copied\",\n copyIcon,\n copyLabel = \"Copy\",\n value,\n ...props\n}: CopyValueProps) {\n const icons = useIcons();\n const controller = useCopy(value);\n const copied = controller.copied;\n return usePart(\n \"span\",\n props,\n { copied },\n {\n children: (\n <>\n <code>{value}</code>\n <button\n aria-label={`${copied ? copiedLabel : copyLabel} ${value}`}\n data-domainkit-part=\"copy-action\"\n onClick={controller.copy}\n type=\"button\"\n >\n <span\n aria-hidden=\"true\"\n data-domainkit-part=\"copy-glyph\"\n data-icon=\"\"\n data-state=\"idle\"\n >\n {copyIcon ?? icons.copy}\n </span>\n <span\n aria-hidden=\"true\"\n data-domainkit-part=\"copy-glyph\"\n data-icon=\"\"\n data-state=\"done\"\n >\n {copiedIcon ?? icons.copied}\n </span>\n </button>\n </>\n ),\n \"data-copied\": copied ? \"\" : undefined,\n \"data-domainkit-part\": \"copy-value\",\n },\n );\n}\n\nexport interface ZoneFileProps extends PartProps<\"div\", { readonly count: number }> {\n readonly copiedIcon?: ReactNode;\n readonly copiedLabel?: string;\n readonly copyIcon?: ReactNode;\n readonly copyLabel?: string;\n readonly domain: string;\n readonly downloadIcon?: ReactNode;\n readonly downloadLabel?: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n}\n\nexport function ZoneFile({\n copiedIcon,\n copiedLabel = \"Copied\",\n copyIcon,\n copyLabel = \"Copy zone\",\n domain,\n downloadIcon,\n downloadLabel = \"Download\",\n records,\n ...props\n}: ZoneFileProps) {\n const icons = useIcons();\n const zone = toZoneFile(records);\n const controller = useCopy(zone);\n const copied = controller.copied;\n return usePart(\n \"div\",\n props,\n { count: records.length },\n {\n children: (\n <>\n <button\n aria-label={copied ? copiedLabel : copyLabel}\n data-domainkit-part=\"zone-copy\"\n onClick={controller.copy}\n type=\"button\"\n >\n <span aria-hidden=\"true\" data-icon=\"inline-start\">\n {copied ? (copiedIcon ?? icons.copied) : (copyIcon ?? icons.copy)}\n </span>\n {copied ? copiedLabel : copyLabel}\n </button>\n <button\n data-domainkit-part=\"zone-download\"\n onClick={() => downloadZoneFile(domain, records)}\n type=\"button\"\n >\n <span aria-hidden=\"true\" data-icon=\"inline-start\">\n {downloadIcon ?? icons.download}\n </span>\n {downloadLabel}\n </button>\n </>\n ),\n \"data-domainkit-part\": \"zone-file\",\n },\n );\n}\n\nexport interface StatusProps extends PartProps<\n \"span\",\n { readonly status: Transport.ObservationEvidence[\"_tag\"] }\n> {\n readonly evidence: Transport.ObservationEvidence;\n}\n\nexport function Status({ evidence, ...props }: StatusProps) {\n return usePart(\n \"span\",\n props,\n { status: evidence._tag },\n {\n children: evidence._tag,\n \"data-domainkit-part\": \"record-status\",\n \"data-status\": evidence._tag,\n },\n );\n}\n\nexport interface PriorityProps extends PartProps<\"span\", { readonly priority: number }> {\n readonly priority?: number;\n}\n\nexport function Priority({ children, priority = 0, ...props }: PriorityProps) {\n return usePart(\n \"span\",\n props,\n { priority },\n {\n children: children ?? `Priority ${priority}`,\n \"data-domainkit-part\": \"record-priority\",\n },\n );\n}\n\nexport const Header = leafPart(\"thead\", \"records-header\");\nexport const Body = leafPart(\"tbody\", \"records-body\");\nexport const Footer = leafPart(\"tfoot\", \"records-footer\");\nexport const Row = leafPart(\"tr\", \"records-row\");\nexport const Head = leafPart(\"th\", \"records-head\");\nexport const Cell = leafPart(\"td\", \"records-cell\");\nexport const Caption = leafPart(\"caption\", \"records-caption\");\nexport const Value = leafPart(\"span\", \"record-value\");\nexport const CardHeader = leafPart(\"div\", \"record-card-head\");\nexport const CardTitle = leafPart(\"strong\", \"record-card-title\");\nexport const CardContent = leafPart(\"dl\", \"record-card-content\");\n\nexport interface RootProps extends PartProps<\"table\", { readonly count: number }> {\n readonly count?: number;\n}\n\nexport function Root({ count = 0, ...props }: RootProps) {\n return (\n <div data-domainkit-part=\"records-panel\">\n {usePart(\"table\", props, { count }, { \"data-domainkit-part\": \"records-table\" })}\n </div>\n );\n}\n\nexport interface CardProps extends PartProps<\"section\", { readonly recordId: string }> {\n readonly copiedIcon?: ReactNode;\n readonly copyIcon?: ReactNode;\n readonly evidence?: ReadonlyArray<Transport.ObservationEvidence>;\n readonly record: Transport.DnsRecord;\n}\n\nexport function Card({ copiedIcon, copyIcon, evidence, record, ...props }: CardProps) {\n const matching =\n evidence === undefined ? [] : evidence.filter((item) => item.recordId === record.id);\n return usePart(\n \"section\",\n props,\n { recordId: record.id },\n {\n children: (\n <>\n <CardHeader>\n <CardTitle>{record.type}</CardTitle>\n {matching.map((item, index) => (\n <Status evidence={item} key={`${item._tag}-${index}`} />\n ))}\n </CardHeader>\n <CardContent>\n <div>\n <dt>Name</dt>\n <dd>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.name} />\n </dd>\n </div>\n <div>\n <dt>Value</dt>\n <dd>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.value} />\n {record.priority === undefined ? null : <Priority priority={record.priority} />}\n </dd>\n </div>\n </CardContent>\n </>\n ),\n \"data-domainkit-part\": \"record-card\",\n },\n );\n}\n\nexport interface TableProps extends PartProps<\"table\", { readonly count: number }> {\n readonly copiedIcon?: ReactNode;\n readonly copyIcon?: ReactNode;\n readonly evidence?: ReadonlyArray<Transport.ObservationEvidence>;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n}\n\nexport function Table({ copiedIcon, copyIcon, evidence, records, ...props }: TableProps) {\n const status = evidence !== undefined;\n return (\n <Root count={records.length} {...props}>\n <Header>\n <Row>\n <Head scope=\"col\">Type</Head>\n <Head scope=\"col\">Name</Head>\n <Head scope=\"col\">Value</Head>\n {status ? (\n <Head data-column=\"status\" scope=\"col\">\n Status\n </Head>\n ) : null}\n </Row>\n </Header>\n <Body>\n {records.map((record) => (\n <Row key={record.id}>\n <Cell>{record.type}</Cell>\n <Cell>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.name} />\n </Cell>\n <Cell>\n <Value>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.value} />\n {record.priority === undefined ? null : <Priority priority={record.priority} />}\n </Value>\n </Cell>\n {status ? (\n <Cell data-column=\"status\">\n {evidence\n .filter((item) => item.recordId === record.id)\n .map((item, index) => (\n <Status evidence={item} key={`${item._tag}-${index}`} />\n ))}\n </Cell>\n ) : null}\n </Row>\n ))}\n </Body>\n </Root>\n );\n}\n\nexport const toZoneFile = (records: ReadonlyArray<Transport.DnsRecord>): string =>\n `${records\n .map(\n (record) =>\n `${absoluteDomainName(record.name)} IN ${record.type} ${record.priority === undefined ? \"\" : `${record.priority} `}${zoneValue(record)}`,\n )\n .join(\"\\n\")}\\n`;\n\nexport const downloadZoneFile = (\n domain: string,\n records: ReadonlyArray<Transport.DnsRecord>,\n): void => downloadText(`${domain}.txt`, toZoneFile(records));\n\nexport type DnsRecord = Transport.DnsRecord;\nexport type ObservationEvidence = Transport.ObservationEvidence;\n","import { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { useMemo, useRef, type ReactElement } from \"react\";\n\nimport { failureFromError, recordsIdentity, type Failure } from \"./atom.ts\";\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport { Event as LifecycleEvent } from \"./lifecycle.ts\";\nimport * as Operations from \"./operations.tsx\";\nimport * as Records from \"./records.tsx\";\n\ntype LocalState = Data.TaggedEnum<{\n Applying: { readonly plan: Transport.ProvisioningPlan };\n Complete: { readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" }> };\n Idle: {};\n Partial: { readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Partial\" }> };\n Planning: {};\n Review: { readonly plan: Transport.ProvisioningPlan };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State =\n | LocalState\n | Extract<Transport.ApplyResult, { readonly _tag: \"Stale\" }>\n | Failure;\n\nexport interface Controller {\n readonly apply: () => void;\n readonly dismiss: () => void;\n readonly plan: () => void;\n readonly retry: () => void;\n readonly state: State;\n}\n\nexport type Command = Data.TaggedEnum<{\n Apply: {};\n Dismiss: {};\n Plan: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport function useModel(\n connection: Transport.Connected,\n records: ReadonlyArray<Transport.DnsRecord>,\n onApplied?: (\n result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" | \"Partial\" }>,\n ) => void,\n): Model {\n const { emit, runtime } = useDomainKit();\n const recordKey = recordsIdentity(records);\n const onAppliedRef = useRef(onApplied);\n onAppliedRef.current = onApplied;\n return useMemo(() => {\n const state = Atom.make<State>(State.Idle());\n const execute = runtime.fn<Command>()((command, get) => {\n const current = get(state);\n if (command._tag === \"Dismiss\") {\n if (current._tag === \"Planning\" || current._tag === \"Applying\") return Effect.void;\n get.set(state, State.Idle());\n return Effect.void;\n }\n if (command._tag === \"Plan\") {\n if (current._tag === \"Planning\" || current._tag === \"Applying\") return Effect.void;\n get.set(state, State.Planning());\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.provisioning.plan({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n records,\n }),\n ).pipe(\n Effect.tap((plan) => Effect.sync(() => get.set(state, State.Review({ plan })))),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n }\n if (\n current._tag !== \"Review\" ||\n current.plan.operations.some((operation) => operation._tag === \"Conflict\")\n )\n return Effect.void;\n const plan = current.plan;\n get.set(state, State.Applying({ plan }));\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.provisioning.apply({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n planDigest: plan.digest,\n }),\n ).pipe(\n Effect.tap((result) =>\n Effect.sync(() => {\n if (result._tag === \"Applied\") {\n get.set(state, State.Complete({ result }));\n emit(LifecycleEvent.RecordsApplied({ connection, result }));\n onAppliedRef.current?.(result);\n } else if (result._tag === \"Partial\") {\n get.set(state, State.Partial({ result }));\n emit(LifecycleEvent.RecordsPartiallyApplied({ connection, result }));\n onAppliedRef.current?.(result);\n } else {\n get.set(state, result);\n }\n }),\n ),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n });\n return { command: execute, state };\n }, [connection.attachment.domain, connection.attachment.id, emit, recordKey, runtime]);\n}\n\nexport function useController(\n connection: Transport.Connected,\n records: ReadonlyArray<Transport.DnsRecord>,\n onApplied?: (\n result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" | \"Partial\" }>,\n ) => void,\n): Controller {\n const model = useModel(connection, records, onApplied);\n const state = useAtomValue(model.state);\n const execute = useAtomSet(model.command);\n\n return {\n apply: () => execute(Command.Apply()),\n dismiss: () => execute(Command.Dismiss()),\n plan: () => execute(Command.Plan()),\n retry: () => execute(Command.Plan()),\n state,\n };\n}\n\nexport interface RootProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Root({ status, ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"provisioning-flow\", \"data-state\": status },\n );\n}\n\nexport function Outcome({ state }: { readonly state: State }) {\n const { messages } = useDomainKit();\n if (state._tag === \"Partial\" || state._tag === \"Failure\" || state._tag === \"Stale\") {\n return (\n <p data-domainkit-part=\"flow-outcome\" data-tone=\"danger\" role=\"alert\">\n {state._tag === \"Partial\" ? messages.recordsPartiallyApplied : state.message}\n </p>\n );\n }\n return null;\n}\n\nexport interface DialogProps {\n readonly controller: Controller;\n readonly trigger?: ReactElement;\n}\n\nexport function Dialog({ controller, trigger }: DialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const state = controller.state;\n const planRef = useRef<Transport.ProvisioningPlan | undefined>(undefined);\n if (state._tag === \"Idle\") planRef.current = undefined;\n if (state._tag === \"Review\" || state._tag === \"Applying\") planRef.current = state.plan;\n const plan = planRef.current;\n const busy = state._tag === \"Planning\" || state._tag === \"Applying\";\n const open = state._tag !== \"Idle\" && state._tag !== \"Complete\";\n return (\n <BaseDialog.Root\n onOpenChange={(nextOpen, eventDetails) => {\n if (!nextOpen && busy) {\n eventDetails.cancel();\n return;\n }\n if (!nextOpen) controller.dismiss();\n }}\n open={open}\n >\n <BaseDialog.Trigger\n data-domainkit-part=\"plan-trigger\"\n disabled={state._tag !== \"Idle\"}\n onClick={() => controller.plan()}\n {...(trigger === undefined ? {} : { render: trigger })}\n >\n {messages.reviewDns}\n </BaseDialog.Trigger>\n <BaseDialog.Portal container={portalContainer}>\n <BaseDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseDialog.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"plan-dialog\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <div data-domainkit-part=\"dialog-heading\">\n <BaseDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.reviewDns}\n </BaseDialog.Title>\n <BaseDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.planConsent}\n </BaseDialog.Description>\n </div>\n {busy ? null : (\n <BaseDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-body\">\n {plan === undefined ? (\n <p data-domainkit-part=\"dialog-progress\" role=\"status\">\n {messages.planningDns}\n </p>\n ) : (\n <Operations.List lifecycle=\"provisioning\" operations={plan.operations} />\n )}\n <Outcome state={state} />\n </div>\n <div data-domainkit-part=\"dialog-footer\">\n {busy ? (\n <button data-domainkit-part=\"plan-apply\" disabled type=\"button\">\n {state._tag === \"Applying\" ? messages.applyingDns : messages.planningDns}\n </button>\n ) : state._tag === \"Review\" && plan !== undefined ? (\n <>\n <BaseDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseDialog.Close>\n <button\n data-domainkit-part=\"plan-apply\"\n disabled={plan.operations.some((operation) => operation._tag === \"Conflict\")}\n onClick={() => controller.apply()}\n type=\"button\"\n >\n {messages.applyDns}\n </button>\n </>\n ) : (\n <>\n <BaseDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.close}\n </BaseDialog.Close>\n <button\n data-domainkit-part=\"provisioning-retry\"\n onClick={() => controller.retry()}\n type=\"button\"\n >\n {messages.retry}\n </button>\n </>\n )}\n </div>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\n\nexport function RetryAction({ controller }: { readonly controller: Controller }) {\n const { messages } = useDomainKit();\n const state = controller.state;\n if (state._tag !== \"Failure\" && state._tag !== \"Stale\" && state._tag !== \"Partial\") return null;\n return (\n <button\n data-domainkit-part=\"provisioning-retry\"\n onClick={() => controller.retry()}\n type=\"button\"\n >\n {messages.retry}\n </button>\n );\n}\n\nexport interface FlowProps extends Omit<RootProps, \"status\"> {\n readonly connection: Transport.Connected;\n readonly onApplied?: (\n result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" | \"Partial\" }>,\n ) => void;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n readonly showRecords?: boolean;\n readonly trigger?: ReactElement;\n}\n\nexport function Flow({\n connection,\n onApplied,\n records,\n showRecords = true,\n trigger,\n ...props\n}: FlowProps) {\n const controller = useController(connection, records, onApplied);\n const state = controller.state;\n return (\n <Root status={state._tag} {...props}>\n {showRecords ? <Records.Table records={records} /> : null}\n <Dialog controller={controller} {...(trigger === undefined ? {} : { trigger })} />\n </Root>\n );\n}\n","import { Popover as BasePopover } from \"@base-ui/react/popover\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { useMemo } from \"react\";\n\nimport { failureFromError, recordsIdentity, type Failure } from \"./atom.ts\";\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport { Status as RecordStatus } from \"./records.tsx\";\n\ntype LocalState = Data.TaggedEnum<{\n Failed: { readonly failure: Failure; readonly previous?: Transport.Observation };\n Idle: {};\n Observing: { readonly previous?: Transport.Observation };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State = LocalState | Transport.Observation;\n\nexport interface ObserveConfig {\n readonly connection?: Transport.Connected;\n readonly domain: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n readonly sources?: {\n readonly provider?: boolean;\n readonly publicDns?: boolean;\n };\n}\n\nexport type Command = Data.TaggedEnum<{\n Observe: {};\n Reset: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport interface Controller {\n readonly observe: () => void;\n readonly reset: () => void;\n readonly state: State;\n}\n\nexport function useModel(config: ObserveConfig): Model {\n const { runtime } = useDomainKit();\n const provider = config.sources?.provider ?? config.connection !== undefined;\n const publicDns = config.sources?.publicDns ?? true;\n const recordKey = recordsIdentity(config.records);\n return useMemo(() => {\n const state = Atom.make<State>(State.Idle());\n const observe = runtime.fn<Command>()((command, get) => {\n if (command._tag === \"Reset\") {\n get.set(state, State.Idle());\n return Effect.void;\n }\n const current = get(state);\n if (current._tag === \"Observing\") return Effect.void;\n const previous =\n current._tag === \"Observation\"\n ? current\n : current._tag === \"Failed\"\n ? current.previous\n : undefined;\n get.set(state, State.Observing({ ...(previous === undefined ? {} : { previous }) }));\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.verification.observe({\n ...(config.connection === undefined\n ? {}\n : { attachmentId: config.connection.attachment.id }),\n domain: config.domain,\n records: config.records,\n sources: { provider, publicDns },\n }),\n ).pipe(\n Effect.tap((observation) => Effect.sync(() => get.set(state, observation))),\n Effect.catch((error) =>\n Effect.sync(() =>\n get.set(\n state,\n State.Failed({\n failure: failureFromError(error),\n ...(previous === undefined ? {} : { previous }),\n }),\n ),\n ),\n ),\n Effect.asVoid,\n );\n });\n return { command: observe, state };\n }, [config.connection?.attachment.id, config.domain, provider, publicDns, recordKey, runtime]);\n}\n\nexport function useController(config: ObserveConfig): Controller {\n const model = useModel(config);\n const state = useAtomValue(model.state);\n const dispatch = useAtomSet(model.command);\n const observe = () => dispatch(Command.Observe());\n const reset = () => dispatch(Command.Reset());\n return { observe, reset, state };\n}\n\nconst evidenceNote = (evidence: Transport.ObservationEvidence): string | undefined => {\n switch (evidence._tag) {\n case \"Mismatch\":\n case \"Unavailable\":\n return evidence.message;\n case \"Found\":\n case \"Missing\":\n return undefined;\n default: {\n const _exhaustive: never = evidence;\n return _exhaustive;\n }\n }\n};\n\nconst observationGroups = (\n observation: Transport.Observation,\n): ReadonlyArray<{\n readonly evidence: ReadonlyArray<Transport.ObservationEvidence>;\n readonly label: string;\n}> =>\n [\n { evidence: observation.provider, label: \"Provider\" },\n { evidence: observation.publicDns, label: \"Public DNS\" },\n ].filter((group) => group.evidence.length > 0);\n\nexport interface RootProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Root({ status, ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"verification-status\", \"data-state\": status },\n );\n}\n\nexport function Evidence({ observation }: { readonly observation: Transport.Observation }) {\n return (\n <div data-domainkit-part=\"observation-list\">\n {observationGroups(observation).map((group) => (\n <section data-domainkit-part=\"observation-group\" key={group.label}>\n <h3 data-domainkit-part=\"observation-source\">{group.label}</h3>\n <ul>\n {group.evidence.map((evidence, index) => {\n const note = evidenceNote(evidence);\n return (\n <li key={`${evidence._tag}-${evidence.recordId}-${index}`}>\n <div data-domainkit-part=\"observation-row\">\n <span data-domainkit-part=\"observation-record\">{evidence.recordId}</span>\n <RecordStatus evidence={evidence} />\n </div>\n {note === undefined ? null : <p data-domainkit-part=\"observation-note\">{note}</p>}\n </li>\n );\n })}\n </ul>\n </section>\n ))}\n </div>\n );\n}\n\nexport function Outcome({ state }: { readonly state: State }) {\n if (state._tag !== \"Failed\") return null;\n return (\n <p data-domainkit-part=\"flow-outcome\" data-tone=\"danger\" role=\"alert\">\n {state.failure.message}\n </p>\n );\n}\n\nexport interface ObserveActionProps extends PartProps<\n \"button\",\n { readonly status: State[\"_tag\"] }\n> {\n readonly controller: Controller;\n}\n\nexport function ObserveAction({ controller, ...props }: ObserveActionProps) {\n const { messages } = useDomainKit();\n const observing = controller.state._tag === \"Observing\";\n return usePart(\n \"button\",\n props,\n { status: controller.state._tag },\n {\n \"aria-busy\": observing,\n children: messages.checkDns,\n \"data-domainkit-part\": \"observe-action\",\n \"data-loading\": observing ? \"\" : undefined,\n disabled: observing,\n onClick: () => controller.observe(),\n type: \"button\",\n },\n );\n}\n\nexport interface StatusProps extends Omit<RootProps, \"status\"> {\n readonly config: ObserveConfig;\n}\n\nexport function Status({ config, ...props }: StatusProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const controller = useController(config);\n const state = controller.state;\n const observation =\n state._tag === \"Observation\"\n ? state\n : state._tag === \"Observing\" || state._tag === \"Failed\"\n ? state.previous\n : undefined;\n return (\n <Root status={state._tag} {...props}>\n <BasePopover.Root>\n <BasePopover.Trigger render={<ObserveAction controller={controller} />} />\n <BasePopover.Portal container={portalContainer}>\n <BasePopover.Positioner\n align=\"end\"\n data-domainkit-part=\"verification-positioner\"\n sideOffset={6}\n >\n <BasePopover.Popup\n aria-label={messages.checkDns}\n aria-busy={state._tag === \"Observing\"}\n data-color-scheme={colorScheme}\n data-domainkit-part=\"verification-popover\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <BasePopover.Arrow data-domainkit-part=\"verification-arrow\" />\n {state._tag === \"Observing\" ? (\n <p data-domainkit-part=\"verification-progress\" role=\"status\">\n {messages.checkingDns}\n </p>\n ) : null}\n {observation === undefined ? null : <Evidence observation={observation} />}\n <Outcome state={state} />\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n </BasePopover.Root>\n </Root>\n );\n}\n\nexport type Observation = Transport.Observation;\n","import { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { Menu as BaseMenu } from \"@base-ui/react/menu\";\nimport type { Transport } from \"domainkit\";\nimport { useRef, useState, type RefObject } from \"react\";\n\nimport * as Cleanup from \"./cleanup.tsx\";\nimport * as Connection from \"./connection.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport * as Provider from \"./provider.tsx\";\nimport * as Provisioning from \"./provisioning.tsx\";\nimport * as Records from \"./records.tsx\";\nimport * as Verification from \"./verification.tsx\";\n\nexport interface FlowProps {\n readonly domain: string;\n readonly receiptId?: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n}\n\nexport function Flow({ domain, receiptId, records }: FlowProps) {\n const controller = Connection.useController(domain);\n const state = controller.state;\n const connected =\n state._tag === \"Connected\" ? state : state._tag === \"Detaching\" ? state.snapshot : undefined;\n return (\n <Connection.Root status={state._tag}>\n {state._tag === \"Connected\" || state._tag === \"Detaching\" ? (\n <ConnectedCard\n connection={state._tag === \"Connected\" ? state : state.snapshot}\n controller={controller}\n {...(receiptId === undefined ? {} : { initialReceiptId: receiptId })}\n records={records}\n status={state._tag}\n />\n ) : (\n <AvailableCard controller={controller} state={state} />\n )}\n <Records.Table records={records} />\n <Verification.Status\n config={{\n ...(connected === undefined ? {} : { connection: connected }),\n domain,\n records,\n }}\n />\n </Connection.Root>\n );\n}\n\nfunction AvailableCard({\n controller,\n state,\n}: {\n readonly controller: Connection.Controller;\n readonly state: Exclude<Connection.State, Transport.Connected>;\n}) {\n const { messages } = useDomainKit();\n const snapshot =\n state._tag === \"Disconnected\"\n ? state\n : state._tag === \"Submitting\" || state._tag === \"Redirecting\"\n ? state.snapshot\n : undefined;\n return (\n <Connection.Card status={state._tag}>\n <Connection.CardIdentity status={state._tag}>\n {snapshot === undefined ? null : <Provider.Mark provider={snapshot.provider} />}\n <Connection.Status state={state} />\n </Connection.CardIdentity>\n <Connection.CardActions status={state._tag}>\n {state._tag === \"Failure\" && state.retry !== \"never\" ? (\n <Connection.RetryAction\n controller={controller}\n kind={state.retry === \"after-user-action\" ? \"after-user-action\" : \"retry\"}\n />\n ) : null}\n {snapshot === undefined ? null : (\n <BaseDialog.Root\n onOpenChange={(open, eventDetails) => {\n if (!open && (state._tag === \"Submitting\" || state._tag === \"Redirecting\")) {\n eventDetails.cancel();\n }\n }}\n >\n <Connection.ConnectTrigger\n disabled={state._tag === \"Submitting\" || state._tag === \"Redirecting\"}\n provider={snapshot.provider}\n >\n {messages.connectProvider(snapshot.provider.name)}\n </Connection.ConnectTrigger>\n <Connection.Dialog controller={controller} snapshot={snapshot} />\n </BaseDialog.Root>\n )}\n </Connection.CardActions>\n </Connection.Card>\n );\n}\n\nfunction ConnectedCard({\n connection,\n controller,\n initialReceiptId,\n records,\n status,\n}: {\n readonly connection: Transport.Connected;\n readonly controller: Connection.Controller;\n readonly initialReceiptId?: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n readonly status: \"Connected\" | \"Detaching\";\n}) {\n const [receipt, setReceipt] = useState({\n host: initialReceiptId,\n value: initialReceiptId,\n });\n if (receipt.host !== initialReceiptId) {\n setReceipt({ host: initialReceiptId, value: initialReceiptId });\n }\n const receiptId = receipt.host === initialReceiptId ? receipt.value : initialReceiptId;\n const disabled = status === \"Detaching\";\n const actionsTriggerRef = useRef<HTMLButtonElement>(null);\n return (\n <Connection.Card status={status}>\n <Connection.CardIdentity status={status}>\n <Provider.Mark provider={connection.provider} />\n <Connection.Status state={status === \"Connected\" ? connection : controller.state} />\n </Connection.CardIdentity>\n <Connection.CardActions status={status}>\n <Provisioning.Flow\n connection={connection}\n onApplied={(result) => setReceipt({ host: initialReceiptId, value: result.receiptId })}\n records={records}\n showRecords={false}\n />\n {receiptId === undefined ? (\n <ProviderActions\n actionsTriggerRef={actionsTriggerRef}\n connection={connection}\n controller={controller}\n disabled={disabled}\n />\n ) : (\n <ProviderActionsWithCleanup\n actionsTriggerRef={actionsTriggerRef}\n connection={connection}\n controller={controller}\n disabled={disabled}\n key={receiptId}\n onCleaned={() => setReceipt({ host: initialReceiptId, value: undefined })}\n receiptId={receiptId}\n />\n )}\n </Connection.CardActions>\n </Connection.Card>\n );\n}\n\nfunction ProviderActionsWithCleanup({\n actionsTriggerRef,\n connection,\n controller,\n disabled,\n onCleaned,\n receiptId,\n}: {\n readonly actionsTriggerRef: RefObject<HTMLButtonElement | null>;\n readonly connection: Transport.Connected;\n readonly controller: Connection.Controller;\n readonly disabled: boolean;\n readonly onCleaned: () => void;\n readonly receiptId: string;\n}) {\n const [cleaned, setCleaned] = useState(false);\n const cleanup = Cleanup.useController(connection, receiptId, (result) => {\n if (result._tag === \"Cleaned\") setCleaned(true);\n });\n return (\n <ProviderActions\n actionsTriggerRef={actionsTriggerRef}\n cleanup={cleanup}\n connection={connection}\n controller={controller}\n disabled={disabled}\n onCleanupCloseComplete={() => {\n if (cleaned) onCleaned();\n }}\n />\n );\n}\n\nfunction ProviderActions({\n actionsTriggerRef: actionsTriggerRefProp,\n cleanup,\n connection,\n controller,\n disabled,\n onCleanupCloseComplete,\n}: {\n readonly actionsTriggerRef?: RefObject<HTMLButtonElement | null>;\n readonly cleanup?: Cleanup.Controller;\n readonly connection: Transport.Connected;\n readonly controller: Connection.Controller;\n readonly disabled: boolean;\n readonly onCleanupCloseComplete?: () => void;\n}) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const fallbackActionsTriggerRef = useRef<HTMLButtonElement>(null);\n const actionsTriggerRef = actionsTriggerRefProp ?? fallbackActionsTriggerRef;\n const [menuOpen, setMenuOpen] = useState(false);\n const [disconnectOpen, setDisconnectOpen] = useState(false);\n return (\n <>\n <BaseMenu.Root disabled={disabled} modal={false} onOpenChange={setMenuOpen} open={menuOpen}>\n <BaseMenu.Trigger\n aria-label={messages.moreActions}\n data-domainkit-part=\"actions-trigger\"\n ref={actionsTriggerRef}\n >\n <span aria-hidden=\"true\">⋯</span>\n </BaseMenu.Trigger>\n <BaseMenu.Portal container={portalContainer} keepMounted>\n <BaseMenu.Positioner align=\"end\" sideOffset={6}>\n <BaseMenu.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"actions-menu\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n {cleanup === undefined ? null : (\n <>\n <BaseMenu.Item\n closeOnClick={false}\n data-domainkit-part=\"actions-item\"\n nativeButton\n onClickCapture={() => {\n setMenuOpen(false);\n queueMicrotask(() => cleanup.plan());\n }}\n render={<button type=\"button\" />}\n >\n {messages.reviewCleanup}\n </BaseMenu.Item>\n <BaseMenu.Separator data-domainkit-part=\"actions-separator\" />\n </>\n )}\n <BaseMenu.Item\n closeOnClick={false}\n data-domainkit-part=\"actions-item\"\n data-tone=\"danger\"\n nativeButton\n onClickCapture={() => {\n setMenuOpen(false);\n queueMicrotask(() => setDisconnectOpen(true));\n }}\n render={<button type=\"button\" />}\n >\n {messages.disconnectDomain}\n </BaseMenu.Item>\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n {cleanup === undefined ? null : (\n <Cleanup.Dialog\n controller={cleanup}\n onOpenChangeComplete={(open) => {\n if (!open) {\n onCleanupCloseComplete?.();\n queueMicrotask(() => actionsTriggerRef.current?.focus());\n }\n }}\n trigger={null}\n />\n )}\n <Connection.DisconnectDialog\n connection={connection}\n controller={controller}\n onOpenChange={(open) => {\n setDisconnectOpen(open);\n if (!open) queueMicrotask(() => actionsTriggerRef.current?.focus());\n }}\n open={disconnectOpen}\n trigger={null}\n />\n </>\n );\n}\n","import { DomainName, Transport } from \"domainkit\";\nimport type * as Layer from \"effect/Layer\";\n\nexport interface FakeOptions {\n readonly connect?: Transport.ConnectionResult;\n readonly inspect:\n | Transport.ConnectionSnapshot\n | FakeFailure\n | ReadonlyArray<Transport.ConnectionSnapshot | FakeFailure>;\n readonly attach?: Transport.Connected;\n readonly detach?: Transport.DetachResult;\n readonly plan?: Transport.ProvisioningPlan;\n readonly apply?: Transport.ApplyResult;\n readonly observe?: Transport.Observation;\n readonly cleanupPlan?: Transport.CleanupPlan;\n readonly cleanupApply?: Transport.CleanupResult;\n}\n\ninterface FakeFailure {\n readonly _tag: \"Failure\";\n readonly message: string;\n readonly operation?: string;\n readonly retry: Transport.Failure[\"retry\"];\n}\n\nexport interface FakeTransport extends Transport.AsyncInterface, Layer.Layer<Transport.Service> {\n readonly calls: {\n readonly attach: Array<Transport.AttachInput>;\n readonly connect: Array<Transport.ConnectInput>;\n readonly detach: Array<Transport.DetachInput>;\n readonly inspect: Array<Transport.InspectInput>;\n readonly plan: Array<Transport.ProvisioningPlanInput>;\n readonly apply: Array<Transport.ProvisioningApplyInput>;\n readonly observe: Array<Transport.ObserveInput>;\n readonly cleanupPlan: Array<Transport.CleanupPlanInput>;\n readonly cleanupApply: Array<Transport.CleanupApplyInput>;\n };\n}\n\nexport const provider = (overrides: Partial<Transport.Provider> = {}): Transport.Provider => ({\n authentication: [\n { _tag: \"OAuth\", label: \"Continue with OAuth\" },\n { _tag: \"Token\", label: \"Connect with token\", placeholder: \"Paste API token\" },\n ],\n id: \"cloudflare\",\n name: \"Cloudflare\",\n ...overrides,\n});\n\nexport const target = (\n overrides: Partial<Transport.ProviderTarget> = {},\n): Transport.ProviderTarget => ({\n accountId: \"account-1\",\n accountKind: \"account\",\n zoneId: \"zone-1\",\n zoneName: DomainName.parse(\"example.com\"),\n ...overrides,\n});\n\nexport const connection = (\n overrides: Partial<Transport.ProviderConnection> = {},\n): Transport.ProviderConnection => ({\n createdAt: new Date(\"2026-08-30T00:00:00.000Z\"),\n id: \"connection-1\",\n method: \"oauth2\",\n ownerId: \"organization-1\",\n providerId: \"cloudflare\",\n status: \"active\",\n ...overrides,\n});\n\nexport const attachment = (\n overrides: Partial<Transport.DomainAttachment> = {},\n): Transport.DomainAttachment => ({\n connectionId: \"connection-1\",\n createdAt: new Date(\"2026-08-30T00:00:00.000Z\"),\n domain: DomainName.parse(\"mail.example.com\"),\n id: \"attachment-1\",\n target: target(),\n ...overrides,\n});\n\nexport const connected = (overrides: Partial<Transport.Connected> = {}): Transport.Connected => ({\n _tag: \"Connected\",\n attachment: attachment(),\n connection: connection(),\n provider: provider(),\n ...overrides,\n});\n\nexport function makeFakeTransport(options: FakeOptions): FakeTransport {\n const calls: FakeTransport[\"calls\"] = {\n apply: [],\n attach: [],\n cleanupApply: [],\n cleanupPlan: [],\n connect: [],\n detach: [],\n inspect: [],\n observe: [],\n plan: [],\n };\n const inspections = Array.isArray(options.inspect) ? [...options.inspect] : [options.inspect];\n const transport: Transport.AsyncInterface = {\n cleanup: {\n apply: async (input) => {\n calls.cleanupApply.push(input);\n return (\n options.cleanupApply ?? {\n _tag: \"Cleaned\",\n operationId: \"cleanup-operation-1\",\n results: [],\n }\n );\n },\n plan: async (input) => {\n calls.cleanupPlan.push(input);\n return (\n options.cleanupPlan ?? {\n _tag: \"CleanupPlan\",\n digest: \"cleanup-digest-1\",\n expiresAt: \"2099-01-01T00:00:00.000Z\",\n operations: [],\n }\n );\n },\n },\n connection: {\n connect: async (input) => {\n calls.connect.push(input);\n return (\n options.connect ?? {\n _tag: \"Connected\",\n attachment: attachment({ domain: DomainName.parse(input.domain) }),\n connection: connection(),\n provider: provider(),\n }\n );\n },\n inspect: async (input) => {\n calls.inspect.push(input);\n const snapshot = inspections.shift() ?? inspections.at(-1) ?? options.inspect;\n if (Array.isArray(snapshot)) throw new Error(\"Fake inspection sequence is empty\");\n if (snapshot._tag === \"Failure\")\n throw new Transport.Failure({\n message: snapshot.message,\n operation: snapshot.operation ?? \"connection.inspect\",\n retry: snapshot.retry,\n });\n return snapshot;\n },\n attach: async (input) => {\n calls.attach.push(input);\n return (\n options.attach ?? {\n _tag: \"Connected\",\n attachment: attachment({\n connectionId: input.connectionId,\n domain: DomainName.parse(input.domain),\n target: input.target,\n }),\n connection: connection({ id: input.connectionId }),\n provider: provider(),\n }\n );\n },\n detach: async (input) => {\n calls.detach.push(input);\n return (\n options.detach ?? {\n _tag: \"Detached\",\n attachment: attachment(),\n connection: connection(),\n remainingAttachments: 0,\n }\n );\n },\n },\n provisioning: {\n apply: async (input) => {\n calls.apply.push(input);\n return (\n options.apply ?? {\n _tag: \"Applied\",\n operationId: \"apply-operation-1\",\n receiptId: \"receipt-1\",\n results: [],\n }\n );\n },\n plan: async (input) => {\n calls.plan.push(input);\n return (\n options.plan ?? {\n _tag: \"Plan\",\n digest: \"plan-digest-1\",\n expiresAt: \"2099-01-01T00:00:00.000Z\",\n operations: input.records.map((record) => ({\n _tag: \"Create\" as const,\n id: `create-${record.id}`,\n record,\n })),\n }\n );\n },\n },\n verification: {\n observe: async (input) => {\n calls.observe.push(input);\n return (\n options.observe ?? {\n _tag: \"Observation\",\n provider: input.sources.provider\n ? input.records.map((record) => ({ _tag: \"Found\" as const, recordId: record.id }))\n : [],\n publicDns: input.sources.publicDns\n ? input.records.map((record) => ({ _tag: \"Found\" as const, recordId: record.id }))\n : [],\n }\n );\n },\n },\n };\n return Object.assign(Transport.layerFromAsync(transport), transport, { calls });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["Root","mergeMessages","leafPart","Value","Priority","Root","State","Command","useModel","LifecycleEvent","useController","Root","Outcome","Dialog","BaseAlertDialog","Operations.List","Flow","State","Command","useModel","LifecycleEvent","useController","Root","Status","BaseDialog","Provider.Mark","Dialog","Flow","RetryAction","Card","BaseAlertDialog","Status","Root","State","Command","useModel","LifecycleEvent","useController","Root","Outcome","Dialog","BaseDialog","Operations.List","Flow","Records.Table","_exhaustive","RecordStatus","BasePopover","Connection.useController","Connection.Root","Records.Table","Verification.Status","Connection.Card","Connection.CardIdentity","Provider.Mark","Connection.Status","Connection.CardActions","Connection.RetryAction","BaseDialog","Connection.ConnectTrigger","Connection.Dialog","Provisioning.Flow","Cleanup.useController","BaseMenu","Cleanup.Dialog","Connection.DisconnectDialog"],"sources":["../src/atom.ts","../src/composition.tsx","../src/icons.tsx","../src/messages.ts","../src/theme.ts","../src/domain-kit.tsx","../src/lifecycle.ts","../src/operations.tsx","../src/cleanup.tsx","../src/provider.tsx","../src/connection.tsx","../src/records.tsx","../src/provisioning.tsx","../src/verification.tsx","../src/domain.tsx","../src/testing.ts"],"sourcesContent":["import * as Data from \"effect/Data\";\nimport type * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { Transport } from \"domainkit\";\n\nexport type Runtime = Atom.AtomRuntime<Transport.Service>;\n\nexport type Failure = Data.TaggedEnum<{\n Failure: {\n readonly message: string;\n readonly operation: string;\n readonly retry: Transport.Failure[\"retry\"];\n };\n}>;\nexport const Failure = Data.taggedEnum<Failure>();\n\nexport const failureFromError = (error: Transport.Failure): Failure =>\n Failure.Failure({\n message: error.message,\n operation: error.operation,\n retry: error.retry,\n });\n\nexport const failureFromDefect = (operation: string, message: string): Failure =>\n Failure.Failure({ message, operation, retry: \"safe\" });\n\nexport const recordsIdentity = (records: ReadonlyArray<Transport.DnsRecord>): string =>\n JSON.stringify(\n records.map(({ id, name, priority, type, value }) => ({ id, name, priority, type, value })),\n );\n","import { useRender } from \"@base-ui/react/use-render\";\nimport type { CSSProperties, ElementType, ReactElement } from \"react\";\n\nexport type ClassName<State> = string | ((state: State) => string | undefined);\nexport type Style<State> = CSSProperties | ((state: State) => CSSProperties | undefined);\n\nexport type PartProps<Tag extends ElementType, State extends Record<string, unknown>> = Omit<\n useRender.ElementProps<Tag>,\n \"className\" | \"style\"\n> & {\n readonly className?: ClassName<State>;\n readonly render?: useRender.RenderProp<State>;\n readonly style?: Style<State>;\n};\n\nexport function usePart<\n Tag extends keyof React.JSX.IntrinsicElements,\n State extends Record<string, unknown>,\n>(\n defaultTagName: Tag,\n componentProps: PartProps<Tag, State>,\n state: State,\n internalProps: Record<string, unknown>,\n): ReactElement {\n const { className, render, style, ...externalProps } = componentProps;\n const parameters: useRender.Parameters<State, Element, undefined> & {\n readonly className?: ClassName<State>;\n readonly style?: Style<State>;\n } = {\n ...(className === undefined ? {} : { className }),\n defaultTagName,\n props: [internalProps, externalProps] as unknown as Record<string, unknown>,\n ...(render === undefined ? {} : { render }),\n state,\n ...(style === undefined ? {} : { style }),\n };\n return useRender(parameters);\n}\n","import { createContext, useContext, useMemo, type ReactNode } from \"react\";\n\nexport type Icons = {\n readonly copied: ReactNode;\n readonly copy: ReactNode;\n readonly download: ReactNode;\n};\n\nfunction Glyph({ children }: { readonly children: ReactNode }) {\n return (\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n viewBox=\"0 0 24 24\"\n >\n {children}\n </svg>\n );\n}\n\nexport const defaultIcons = {\n copied: (\n <Glyph>\n <path d=\"M20 6 9 17l-5-5\" />\n </Glyph>\n ),\n copy: (\n <Glyph>\n <rect height=\"14\" rx=\"2\" width=\"14\" x=\"8\" y=\"8\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </Glyph>\n ),\n download: (\n <Glyph>\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <path d=\"m7 10 5 5 5-5\" />\n <path d=\"M12 15V3\" />\n </Glyph>\n ),\n} as const satisfies Icons;\n\nconst IconsContext = createContext<Icons>(defaultIcons);\n\nexport function IconsProvider({\n children,\n icons,\n}: {\n readonly children: ReactNode;\n readonly icons?: Partial<Icons>;\n}) {\n const value = useMemo<Icons>(\n () => ({\n copied: icons?.copied ?? defaultIcons.copied,\n copy: icons?.copy ?? defaultIcons.copy,\n download: icons?.download ?? defaultIcons.download,\n }),\n [icons],\n );\n return <IconsContext.Provider value={value}>{children}</IconsContext.Provider>;\n}\n\nexport function useIcons(): Icons {\n return useContext(IconsContext);\n}\n","export interface Catalog {\n readonly applyCleanup: string;\n readonly applyDns: string;\n readonly applyingDns: string;\n readonly authenticationAlternative: string;\n readonly automaticUnavailable: string;\n readonly cancel: string;\n readonly checkAgain: string;\n readonly checkingDns: string;\n readonly checkDns: string;\n readonly cleanupConsent: string;\n readonly cleanupPartial: string;\n readonly cleaningDns: string;\n readonly connectProvider: (provider: string) => string;\n readonly connected: (provider: string) => string;\n readonly providerAvailable: (provider: string) => string;\n readonly connecting: string;\n readonly close: string;\n readonly detectingProvider: string;\n readonly disconnectDomain: string;\n readonly disconnectConsent: string;\n readonly disconnecting: string;\n readonly detaching: string;\n readonly disconnectTitle: (provider: string) => string;\n readonly domainDisconnected: string;\n readonly dialogDescription: (domain: string) => string;\n readonly dialogTitle: (provider: string) => string;\n readonly openingAuthorization: string;\n readonly moreActions: string;\n readonly planConsent: string;\n readonly planningCleanup: string;\n readonly planningDns: string;\n readonly recordsPartiallyApplied: string;\n readonly reviewCleanup: string;\n readonly reviewDns: string;\n readonly retry: string;\n readonly existingConnection: string;\n readonly targetUnavailable: string;\n readonly attachTarget: (target: string) => string;\n readonly tokenLabel: string;\n}\n\nexport const english: Catalog = {\n applyCleanup: \"Remove records\",\n applyDns: \"Add records\",\n applyingDns: \"Adding records…\",\n authenticationAlternative: \"or\",\n automaticUnavailable: \"Automatic connection is not available for this domain\",\n cancel: \"Cancel\",\n checkAgain: \"Check again\",\n checkingDns: \"Checking DNS…\",\n checkDns: \"Check DNS\",\n cleanupConsent: \"Only records proven by the apply receipt will be deleted.\",\n cleanupPartial: \"Some DNS records could not be deleted. Review and retry safely.\",\n cleaningDns: \"Removing records…\",\n connectProvider: () => \"Connect\",\n connected: (provider) => `${provider} connected`,\n providerAvailable: (provider) => `${provider} manages DNS for this domain`,\n connecting: \"Connecting…\",\n close: \"Close\",\n detectingProvider: \"Detecting DNS provider…\",\n disconnectDomain: \"Disconnect\",\n disconnectConsent:\n \"This domain will be detached from the provider. Existing DNS records will be preserved.\",\n disconnecting: \"Disconnecting…\",\n detaching: \"Detaching domain…\",\n disconnectTitle: (provider) => `Detach ${provider}?`,\n domainDisconnected: \"Domain detached. DNS records were preserved.\",\n dialogDescription: (domain) => `Authorize DNS changes for ${domain}.`,\n dialogTitle: (provider) => `Connect ${provider}`,\n openingAuthorization: \"Opening provider authorization…\",\n moreActions: \"More connection actions\",\n planConsent: \"Review the exact DNS operations before approving this plan.\",\n planningCleanup: \"Preparing cleanup…\",\n planningDns: \"Preparing DNS changes…\",\n recordsPartiallyApplied: \"Some DNS changes failed. Review and retry safely.\",\n reviewCleanup: \"Remove records\",\n reviewDns: \"Review changes\",\n retry: \"Try again\",\n existingConnection: \"Existing provider connection\",\n targetUnavailable: \"No provider targets are available for this connection.\",\n attachTarget: (target) => `Use ${target}`,\n tokenLabel: \"API token\",\n};\n\nexport const merge = (overrides: Partial<Catalog> = {}): Catalog => ({\n ...english,\n ...overrides,\n});\n","import type { CSSProperties } from \"react\";\n\nexport interface Theme {\n readonly accent?: string;\n readonly accentContrast?: string;\n readonly backdrop?: string;\n readonly background?: string;\n readonly border?: string;\n readonly danger?: string;\n readonly dangerContrast?: string;\n readonly fill?: string;\n readonly fontFamily?: string;\n readonly muted?: string;\n readonly radius?: string;\n readonly shadow?: string;\n readonly success?: string;\n readonly text?: string;\n}\n\nconst variables = {\n accent: \"--domainkit-accent\",\n accentContrast: \"--domainkit-accent-contrast\",\n backdrop: \"--domainkit-backdrop\",\n background: \"--domainkit-background\",\n border: \"--domainkit-border\",\n danger: \"--domainkit-danger\",\n dangerContrast: \"--domainkit-danger-contrast\",\n fill: \"--domainkit-fill\",\n fontFamily: \"--domainkit-font-family\",\n muted: \"--domainkit-muted\",\n radius: \"--domainkit-radius\",\n shadow: \"--domainkit-shadow\",\n success: \"--domainkit-success\",\n text: \"--domainkit-text\",\n} as const satisfies Record<keyof Theme, string>;\n\nexport function toStyle(theme: Theme = {}): CSSProperties {\n return Object.fromEntries(\n Object.entries(theme).flatMap(([key, value]) =>\n value === undefined ? [] : [[variables[key as keyof Theme], value]],\n ),\n ) as CSSProperties;\n}\n","import { RegistryProvider } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport type * as Layer from \"effect/Layer\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport {\n createContext,\n useCallback,\n useContext,\n useLayoutEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n type ReactNode,\n type RefObject,\n} from \"react\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport type { Icons } from \"./icons.tsx\";\nimport { IconsProvider } from \"./icons.tsx\";\nimport type * as Lifecycle from \"./lifecycle.ts\";\nimport type { Catalog } from \"./messages.ts\";\nimport { merge as mergeMessages } from \"./messages.ts\";\nimport type { Marks } from \"./provider.tsx\";\nimport type { Theme } from \"./theme.ts\";\nimport { toStyle } from \"./theme.ts\";\nimport type { Runtime } from \"./atom.ts\";\n\nexport interface RootState extends Record<string, unknown> {\n readonly colorScheme: \"dark\" | \"inherit\" | \"light\";\n}\n\nexport interface RootProps extends Omit<PartProps<\"div\", RootState>, \"children\"> {\n readonly children: ReactNode;\n readonly colorScheme?: RootState[\"colorScheme\"];\n readonly icons?: Partial<Icons>;\n readonly messages?: Partial<Catalog>;\n readonly marks?: Marks;\n readonly navigate?: (url: string) => void;\n readonly onEvent?: Lifecycle.Listener;\n readonly portalContainer?: HTMLElement | null;\n readonly theme?: Theme;\n readonly transport: Layer.Layer<Transport.Service>;\n}\n\ninterface ContextValue {\n readonly colorScheme: RootState[\"colorScheme\"];\n readonly navigate: (url: string) => void;\n readonly marks: Marks;\n readonly messages: Catalog;\n readonly emit: Lifecycle.Listener;\n readonly portalContainer: RefObject<HTMLElement | null>;\n readonly themeStyle: ReturnType<typeof toStyle>;\n readonly runtime: Runtime;\n}\n\nconst Context = createContext<ContextValue | null>(null);\n\nconst navigateInBrowser = (url: string): void => {\n if (typeof window === \"undefined\") {\n throw new Error(\"DomainKit OAuth navigation requires a browser or a custom navigate function\");\n }\n window.location.assign(url);\n};\n\nconst resolvePortalContainer = (\n container: HTMLElement | null,\n ownerDocument: Document | null,\n): HTMLElement | null => {\n if (container === null || ownerDocument === null) return null;\n return container.ownerDocument === ownerDocument && container.getRootNode() === ownerDocument\n ? container\n : null;\n};\n\nconst usePortalContainer = (container: HTMLElement | null): HTMLElement | null => {\n const ownerDocument = useMemo(() => container?.ownerDocument ?? null, [container]);\n const subscribe = useCallback(\n (notify: () => void) => {\n if (ownerDocument === null || typeof MutationObserver === \"undefined\") return () => {};\n const observer = new MutationObserver(notify);\n observer.observe(ownerDocument, { childList: true, subtree: true });\n return () => observer.disconnect();\n },\n [ownerDocument],\n );\n const getSnapshot = useCallback(\n () => resolvePortalContainer(container, ownerDocument),\n [container, ownerDocument],\n );\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n};\n\nexport function Root({\n children,\n colorScheme = \"inherit\",\n icons,\n marks = {},\n messages,\n navigate = navigateInBrowser,\n onEvent,\n portalContainer = null,\n theme,\n transport,\n ...props\n}: RootProps) {\n const runtime = useMemo(() => Atom.runtime(transport), [transport]);\n const onEventRef = useRef(onEvent);\n useLayoutEffect(() => {\n onEventRef.current = onEvent;\n }, [onEvent]);\n const emit = useCallback<Lifecycle.Listener>((event) => {\n try {\n onEventRef.current?.(event);\n } catch {\n // Host observers are best-effort and cannot change a completed mutation's outcome.\n }\n }, []);\n const themeStyle = toStyle(theme);\n const resolvedPortalContainer = usePortalContainer(portalContainer);\n const portalContainerRef = useMemo<RefObject<HTMLElement | null>>(\n () => ({ current: resolvedPortalContainer }),\n [resolvedPortalContainer],\n );\n const content = usePart(\n \"div\",\n props,\n { colorScheme },\n {\n children,\n \"data-color-scheme\": colorScheme,\n \"data-domainkit-root\": \"\",\n style: themeStyle,\n },\n );\n return (\n <RegistryProvider>\n <Context.Provider\n value={{\n colorScheme,\n emit,\n marks,\n messages: mergeMessages(messages),\n navigate,\n portalContainer: portalContainerRef,\n runtime,\n themeStyle,\n }}\n >\n <IconsProvider {...(icons === undefined ? {} : { icons })}>{content}</IconsProvider>\n </Context.Provider>\n </RegistryProvider>\n );\n}\n\nexport function useDomainKit(): ContextValue {\n const value = useContext(Context);\n if (value === null)\n throw new Error(\"DomainKit components must be rendered inside DomainKit.Root\");\n return value;\n}\n","import type { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\n\n/** User-action lifecycle events suitable for host notifications and telemetry. */\nexport type Event = Data.TaggedEnum<{\n ConnectionEstablished: {\n readonly connection: Transport.Connected;\n readonly source: \"attach\" | \"connect\";\n };\n DomainDetached: {\n readonly connection: Transport.Connected;\n readonly result: Transport.DetachResult;\n };\n RecordsApplied: {\n readonly connection: Transport.Connected;\n readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" }>;\n };\n RecordsCleaned: {\n readonly connection: Transport.Connected;\n readonly result: Extract<Transport.CleanupResult, { readonly _tag: \"Cleaned\" }>;\n };\n RecordsPartiallyApplied: {\n readonly connection: Transport.Connected;\n readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Partial\" }>;\n };\n RecordsPartiallyCleaned: {\n readonly connection: Transport.Connected;\n readonly result: Extract<Transport.CleanupResult, { readonly _tag: \"Partial\" }>;\n };\n}>;\n\nexport const Event = Data.taggedEnum<Event>();\n\nexport type Listener = (event: Event) => void;\n","import type { Transport } from \"domainkit\";\nimport type { ReactElement } from \"react\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\n\nexport type Operation =\n | Transport.ProvisioningPlan[\"operations\"][number]\n | Transport.CleanupPlan[\"operations\"][number];\n\ntype LeafState = Record<string, unknown>;\n\nfunction leafPart<Tag extends keyof React.JSX.IntrinsicElements>(\n defaultTagName: Tag,\n part: string,\n) {\n return function Leaf(props: PartProps<Tag, LeafState>): ReactElement {\n return usePart(defaultTagName, props, {}, { \"data-domainkit-part\": part });\n };\n}\n\nexport const Kind = leafPart(\"span\", \"operation-kind\");\nexport const Type = leafPart(\"strong\", \"operation-type\");\nexport const Record = leafPart(\"span\", \"operation-record\");\nexport const Name = leafPart(\"span\", \"operation-name\");\nexport const Value = leafPart(\"code\", \"operation-value\");\nexport const Priority = leafPart(\"span\", \"operation-priority\");\nexport const Reason = leafPart(\"span\", \"operation-reason\");\n\nexport interface ItemProps extends PartProps<\"li\", { readonly operation: Operation[\"_tag\"] }> {\n readonly operation: Operation;\n}\n\nexport function Item({ operation, ...props }: ItemProps) {\n return usePart(\n \"li\",\n props,\n { operation: operation._tag },\n {\n children: (\n <>\n <Kind>{operation._tag}</Kind> <Type>{operation.record.type}</Type>{\" \"}\n <Record>\n <Name>{operation.record.name}</Name>\n <Value>{operation.record.value}</Value>\n {operation.record.priority === undefined ? null : (\n <Priority>Priority {operation.record.priority}</Priority>\n )}\n {\"reason\" in operation ? <Reason>{operation.reason}</Reason> : null}\n </Record>\n </>\n ),\n \"data-domainkit-part\": \"operation-item\",\n \"data-operation\": operation._tag,\n },\n );\n}\n\nexport interface RootProps extends PartProps<\n \"ul\",\n { readonly count: number; readonly lifecycle: Lifecycle }\n> {\n readonly count?: number;\n readonly lifecycle: Lifecycle;\n}\n\nexport type Lifecycle = \"cleanup\" | \"provisioning\";\n\nexport function Root({ count = 0, lifecycle, ...props }: RootProps) {\n return usePart(\n \"ul\",\n props,\n { count, lifecycle },\n {\n \"data-domainkit-part\":\n lifecycle === \"provisioning\" ? \"plan-operations\" : \"cleanup-operations\",\n \"data-lifecycle\": lifecycle,\n },\n );\n}\n\nexport interface ListProps extends Omit<RootProps, \"children\" | \"count\"> {\n readonly operations: ReadonlyArray<Operation>;\n}\n\nexport function List({ lifecycle, operations, ...props }: ListProps) {\n return (\n <Root count={operations.length} lifecycle={lifecycle} {...props}>\n {operations.map((operation) => (\n <Item key={operation.id} operation={operation} />\n ))}\n </Root>\n );\n}\n","import { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { useMemo, useRef, type ReactElement } from \"react\";\n\nimport { failureFromError, type Failure } from \"./atom.ts\";\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport { Event as LifecycleEvent } from \"./lifecycle.ts\";\nimport * as Operations from \"./operations.tsx\";\n\ntype LocalState = Data.TaggedEnum<{\n Cleaned: { readonly result: Extract<Transport.CleanupResult, { readonly _tag: \"Cleaned\" }> };\n Cleaning: { readonly plan: Transport.CleanupPlan };\n Idle: {};\n Partial: { readonly result: Extract<Transport.CleanupResult, { readonly _tag: \"Partial\" }> };\n Planning: {};\n Review: { readonly plan: Transport.CleanupPlan };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State =\n | LocalState\n | Extract<Transport.CleanupResult, { readonly _tag: \"Stale\" }>\n | Failure;\n\nexport type Command = Data.TaggedEnum<{\n Apply: {};\n Dismiss: {};\n Plan: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport interface Controller {\n readonly apply: () => void;\n readonly dismiss: () => void;\n readonly plan: () => void;\n readonly retry: () => void;\n readonly state: State;\n}\n\nexport type Completion = Extract<Transport.CleanupResult, { readonly _tag: \"Cleaned\" | \"Partial\" }>;\n\nexport function useModel(\n connection: Transport.Connected,\n receiptId: string,\n onCleaned?: (result: Completion) => void,\n): Model {\n const { emit, runtime } = useDomainKit();\n const onCleanedRef = useRef(onCleaned);\n onCleanedRef.current = onCleaned;\n return useMemo(() => {\n const state = Atom.make<State>(State.Idle());\n const execute = runtime.fn<Command>()((command, get) => {\n const current = get(state);\n if (command._tag === \"Dismiss\") {\n if (current._tag === \"Planning\" || current._tag === \"Cleaning\") return Effect.void;\n get.set(state, State.Idle());\n return Effect.void;\n }\n if (command._tag === \"Plan\") {\n if (current._tag === \"Planning\" || current._tag === \"Cleaning\") return Effect.void;\n get.set(state, State.Planning());\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.cleanup.plan({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n receiptId,\n }),\n ).pipe(\n Effect.tap((plan) => Effect.sync(() => get.set(state, State.Review({ plan })))),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n }\n if (\n current._tag !== \"Review\" ||\n current.plan.operations.some((operation) => operation._tag === \"Blocked\")\n )\n return Effect.void;\n const plan = current.plan;\n get.set(state, State.Cleaning({ plan }));\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.cleanup.apply({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n planDigest: plan.digest,\n receiptId,\n }),\n ).pipe(\n Effect.tap((result) =>\n Effect.sync(() => {\n if (result._tag === \"Cleaned\") {\n get.set(state, State.Cleaned({ result }));\n onCleanedRef.current?.(result);\n emit(LifecycleEvent.RecordsCleaned({ connection, result }));\n } else if (result._tag === \"Partial\") {\n get.set(state, State.Partial({ result }));\n onCleanedRef.current?.(result);\n emit(LifecycleEvent.RecordsPartiallyCleaned({ connection, result }));\n } else {\n get.set(state, result);\n }\n }),\n ),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n });\n return { command: execute, state };\n }, [connection.attachment.domain, connection.attachment.id, emit, receiptId, runtime]);\n}\n\nexport function useController(\n connection: Transport.Connected,\n receiptId: string,\n onCleaned?: (result: Completion) => void,\n): Controller {\n const model = useModel(connection, receiptId, onCleaned);\n const state = useAtomValue(model.state);\n const execute = useAtomSet(model.command);\n\n return {\n apply: () => execute(Command.Apply()),\n dismiss: () => execute(Command.Dismiss()),\n plan: () => execute(Command.Plan()),\n retry: () => execute(Command.Plan()),\n state,\n } as const;\n}\n\nexport interface RootProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Root({ status, ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"cleanup-flow\", \"data-state\": status },\n );\n}\n\nexport function Outcome({ state }: { readonly state: State }) {\n const { messages } = useDomainKit();\n if (state._tag === \"Partial\" || state._tag === \"Failure\" || state._tag === \"Stale\") {\n return (\n <p data-domainkit-part=\"flow-outcome\" data-tone=\"danger\" role=\"alert\">\n {state._tag === \"Partial\" ? messages.cleanupPartial : state.message}\n </p>\n );\n }\n return null;\n}\n\nexport interface DialogProps {\n readonly controller: Controller;\n readonly onOpenChange?: (open: boolean) => void;\n readonly onOpenChangeComplete?: (open: boolean) => void;\n readonly trigger?: ReactElement | null;\n}\n\nexport function Dialog({ controller, onOpenChange, onOpenChangeComplete, trigger }: DialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const state = controller.state;\n const planRef = useRef<Transport.CleanupPlan | undefined>(undefined);\n if (state._tag === \"Idle\") planRef.current = undefined;\n if (state._tag === \"Review\" || state._tag === \"Cleaning\") planRef.current = state.plan;\n const plan = planRef.current;\n const busy = state._tag === \"Planning\" || state._tag === \"Cleaning\";\n const open = state._tag !== \"Idle\" && state._tag !== \"Cleaned\";\n return (\n <BaseAlertDialog.Root\n onOpenChange={(nextOpen, eventDetails) => {\n if (!nextOpen && busy) {\n eventDetails.cancel();\n return;\n }\n if (!nextOpen) {\n controller.dismiss();\n }\n onOpenChange?.(nextOpen);\n }}\n onOpenChangeComplete={onOpenChangeComplete}\n open={open}\n >\n {trigger === null ? null : (\n <BaseAlertDialog.Trigger\n data-domainkit-part=\"cleanup-trigger\"\n disabled={state._tag !== \"Idle\"}\n onClick={() => controller.plan()}\n {...(trigger === undefined ? {} : { render: trigger })}\n >\n {messages.reviewCleanup}\n </BaseAlertDialog.Trigger>\n )}\n <BaseAlertDialog.Portal container={portalContainer}>\n <BaseAlertDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseAlertDialog.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"cleanup-dialog\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <div data-domainkit-part=\"dialog-heading\">\n <BaseAlertDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.reviewCleanup}\n </BaseAlertDialog.Title>\n <BaseAlertDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.cleanupConsent}\n </BaseAlertDialog.Description>\n </div>\n {busy ? null : (\n <BaseAlertDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseAlertDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-body\">\n {plan === undefined ? (\n <p data-domainkit-part=\"dialog-progress\" role=\"status\">\n {messages.planningCleanup}\n </p>\n ) : (\n <Operations.List lifecycle=\"cleanup\" operations={plan.operations} />\n )}\n <Outcome state={state} />\n </div>\n <div data-domainkit-part=\"dialog-footer\">\n {busy ? (\n <button data-domainkit-part=\"cleanup-apply\" disabled type=\"button\">\n {state._tag === \"Cleaning\" ? messages.cleaningDns : messages.planningCleanup}\n </button>\n ) : state._tag === \"Review\" && plan !== undefined ? (\n <>\n <BaseAlertDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseAlertDialog.Close>\n <button\n data-domainkit-part=\"cleanup-apply\"\n disabled={plan.operations.some((operation) => operation._tag === \"Blocked\")}\n onClick={() => controller.apply()}\n type=\"button\"\n >\n {messages.applyCleanup}\n </button>\n </>\n ) : (\n <>\n <BaseAlertDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.close}\n </BaseAlertDialog.Close>\n <button\n data-domainkit-part=\"cleanup-retry\"\n onClick={() => controller.retry()}\n type=\"button\"\n >\n {messages.retry}\n </button>\n </>\n )}\n </div>\n </BaseAlertDialog.Popup>\n </BaseAlertDialog.Portal>\n </BaseAlertDialog.Root>\n );\n}\n\nexport interface FlowProps extends Omit<RootProps, \"status\"> {\n readonly connection: Transport.Connected;\n readonly onCleaned?: (result: Completion) => void;\n readonly receiptId: string;\n readonly trigger?: ReactElement;\n}\n\nexport function Flow({ connection, onCleaned, receiptId, trigger, ...props }: FlowProps) {\n const controller = useController(connection, receiptId, onCleaned);\n const state = controller.state;\n return (\n <Root status={state._tag} {...props}>\n <Dialog controller={controller} {...(trigger === undefined ? {} : { trigger })} />\n </Root>\n );\n}\n","import { useState, type ComponentPropsWithoutRef, type ReactNode } from \"react\";\nimport type { Transport } from \"domainkit\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\n\ntype ProviderDescriptor = Transport.Provider;\n\nexport type Marks = Readonly<\n Record<string, ReactNode | ((provider: ProviderDescriptor) => ReactNode)>\n>;\n\nexport interface MarkState extends Record<string, unknown> {\n readonly providerId: string;\n}\n\nexport interface MarkProps extends PartProps<\"span\", MarkState> {\n readonly provider: ProviderDescriptor;\n}\n\nconst logoHosts: Readonly<Record<string, string>> = {\n amazonroute53: \"route53.com\",\n aws: \"amazonaws.com\",\n bluehost: \"bluehost.com\",\n cloudflare: \"cloudflare.com\",\n digitalocean: \"digitalocean.com\",\n dnsimple: \"dnsimple.com\",\n dreamhost: \"dreamhost.com\",\n dynadot: \"dynadot.com\",\n gandi: \"gandi.net\",\n godaddy: \"godaddy.com\",\n google: \"cloud.google.com\",\n googlecloud: \"cloud.google.com\",\n googleclouddns: \"cloud.google.com\",\n hostgator: \"hostgator.com\",\n hostinger: \"hostinger.com\",\n hover: \"hover.com\",\n ionos: \"ionos.com\",\n namecheap: \"namecheap.com\",\n namecom: \"name.com\",\n netlify: \"netlify.com\",\n ns1: \"ns1.com\",\n ovh: \"ovh.com\",\n porkbun: \"porkbun.com\",\n route53: \"route53.com\",\n spaceship: \"spaceship.com\",\n squarespace: \"squarespace.com\",\n vercel: \"vercel.com\",\n};\n\nconst logoKey = (providerId: string): string =>\n providerId\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"\");\n\nconst logoHost = (providerId: string): string | undefined => logoHosts[logoKey(providerId)];\n\nconst letterMark = (provider: ProviderDescriptor): string =>\n provider.name.trim().charAt(0).toUpperCase() || \"?\";\n\nfunction DefaultMark({ provider }: { readonly provider: ProviderDescriptor }) {\n const host = logoHost(provider.id);\n const [failed, setFailed] = useState(false);\n if (host === undefined || failed) return letterMark(provider);\n return (\n <img\n alt=\"\"\n height={32}\n onError={() => setFailed(true)}\n referrerPolicy=\"no-referrer\"\n src={`https://integrations.sh/logo/${host}?sz=64`}\n width={32}\n />\n );\n}\n\nexport function Mark({ provider, ...props }: MarkProps) {\n const { marks } = useDomainKit();\n const replacement = marks[provider.id];\n const content =\n typeof replacement === \"function\"\n ? replacement(provider)\n : (replacement ?? <DefaultMark key={provider.id} provider={provider} />);\n return usePart(\n \"span\",\n props,\n { providerId: provider.id },\n {\n \"aria-label\": provider.name,\n children: content,\n \"data-domainkit-part\": \"provider-mark\",\n \"data-domainkit-provider\": logoKey(provider.id),\n role: \"img\",\n },\n );\n}\n\nexport type { ProviderDescriptor as Provider };\nexport type MarkElementProps = ComponentPropsWithoutRef<\"span\">;\n","import { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport * as AsyncResult from \"effect/unstable/reactivity/AsyncResult\";\nimport {\n useMemo,\n useState,\n type ComponentPropsWithoutRef,\n type FormEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport * as Provider from \"./provider.tsx\";\nimport { Event as LifecycleEvent } from \"./lifecycle.ts\";\nimport { failureFromDefect, failureFromError, type Failure } from \"./atom.ts\";\n\ntype LocalState = Data.TaggedEnum<{\n Detaching: { readonly snapshot: Transport.Connected };\n Loading: {};\n Redirecting: { readonly snapshot: Disconnected };\n Submitting: { readonly snapshot: Disconnected };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State = LocalState | Transport.ConnectionSnapshot | Failure;\n\ntype Disconnected = Extract<Transport.ConnectionSnapshot, { readonly _tag: \"Disconnected\" }>;\n\nconst sameTarget = (left: Transport.ProviderTarget, right: Transport.ProviderTarget): boolean =>\n left.accountId === right.accountId &&\n left.accountKind === right.accountKind &&\n left.zoneId === right.zoneId &&\n left.zoneName === right.zoneName;\n\nexport interface Controller {\n readonly attach: (\n connection: Transport.ReusableConnection,\n target: Transport.ProviderTarget,\n ) => void;\n readonly connect: (method: Transport.Method) => void;\n readonly detach: () => void;\n readonly retry: () => void;\n readonly state: State;\n}\n\nexport type Command = Data.TaggedEnum<{\n Attach: { readonly connectionId: string; readonly target: Transport.ProviderTarget };\n Connect: { readonly method: Transport.Method };\n Detach: {};\n Retry: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport function useModel(domain: string): Model {\n const { emit, navigate, runtime } = useDomainKit();\n return useMemo(() => {\n const actionState = Atom.make<State | undefined>(undefined);\n const inspect = runtime.atom(\n Effect.flatMap(Transport.Service, (transport) => transport.connection.inspect({ domain })),\n );\n const state = Atom.make((get): State => {\n const action = get(actionState);\n if (action !== undefined) return action;\n const inspection = get(inspect);\n return AsyncResult.matchWithError(inspection, {\n onDefect: () => failureFromDefect(\"connection.inspect\", \"Provider detection failed\"),\n onError: failureFromError,\n onInitial: () => State.Loading(),\n onSuccess: ({ value }) => value,\n });\n });\n const command = runtime.fn<Command>()((input, get) => {\n if (input._tag === \"Retry\") {\n get.set(actionState, undefined);\n get.refresh(inspect);\n return Effect.void;\n }\n const snapshot = get(state);\n if (input._tag === \"Detach\") {\n if (snapshot._tag !== \"Connected\") return Effect.void;\n get.set(actionState, State.Detaching({ snapshot }));\n return Effect.flatMap(Transport.Service, (transport) =>\n Effect.flatMap(\n transport.connection.detach({\n attachmentId: snapshot.attachment.id,\n preserveDns: true,\n }),\n (result) => {\n const detached: Disconnected = {\n _tag: \"Disconnected\",\n domain: snapshot.attachment.domain,\n provider: snapshot.provider,\n reusableConnections: [],\n };\n return Effect.flatMap(\n Effect.sync(() => {\n get.set(actionState, detached);\n emit(\n LifecycleEvent.DomainDetached({\n connection: snapshot,\n result,\n }),\n );\n }),\n () =>\n transport.connection.inspect({ domain }).pipe(\n Effect.catch(() => Effect.succeed(detached)),\n Effect.tap((refreshed) => Effect.sync(() => get.set(actionState, refreshed))),\n ),\n );\n },\n ),\n ).pipe(\n Effect.catch((error) => Effect.sync(() => get.set(actionState, failureFromError(error)))),\n Effect.asVoid,\n );\n }\n if (snapshot._tag !== \"Disconnected\") return Effect.void;\n const complete = (\n request: Effect.Effect<Transport.ConnectionResult, Transport.Failure, Transport.Service>,\n source: \"connect\" | \"attach\",\n ) =>\n request.pipe(\n Effect.tap((result) =>\n Effect.sync(() => {\n if (result._tag === \"Redirect\") {\n get.set(actionState, State.Redirecting({ snapshot }));\n navigate(result.authorizationUrl);\n } else {\n get.set(actionState, result);\n emit(\n LifecycleEvent.ConnectionEstablished({\n connection: result,\n source,\n }),\n );\n }\n }),\n ),\n Effect.catch((error) => Effect.sync(() => get.set(actionState, failureFromError(error)))),\n Effect.asVoid,\n );\n if (input._tag === \"Attach\") {\n const reusableConnection = snapshot.reusableConnections.find(\n ({ connection }) => connection.id === input.connectionId,\n );\n if (reusableConnection === undefined) return Effect.void;\n const target = reusableConnection.targets.find((candidate) =>\n sameTarget(candidate, input.target),\n );\n if (target === undefined) return Effect.void;\n get.set(actionState, State.Submitting({ snapshot }));\n return complete(\n Effect.flatMap(Transport.Service, (transport) =>\n transport.connection.attach({\n connectionId: input.connectionId,\n domain,\n target,\n }),\n ),\n \"attach\",\n );\n }\n get.set(actionState, State.Submitting({ snapshot }));\n if (input._tag === \"Connect\") {\n return complete(\n Effect.flatMap(Transport.Service, (transport) =>\n transport.connection.connect({\n domain,\n method: input.method,\n providerId: snapshot.provider.id,\n }),\n ),\n \"connect\",\n );\n }\n return Effect.void;\n });\n return { command, state };\n }, [domain, emit, navigate, runtime]);\n}\n\nexport function useController(domain: string): Controller {\n const model = useModel(domain);\n const state = useAtomValue(model.state);\n const execute = useAtomSet(model.command);\n\n return {\n attach: (connection, target) =>\n execute(Command.Attach({ connectionId: connection.connection.id, target })),\n connect: (method) => execute(Command.Connect({ method })),\n detach: () => execute(Command.Detach()),\n retry: () => execute(Command.Retry()),\n state,\n };\n}\n\nexport interface RootState extends Record<string, unknown> {\n readonly status: State[\"_tag\"];\n}\n\nexport interface RootProps extends PartProps<\"div\", RootState> {\n readonly status?: State[\"_tag\"];\n}\n\nexport function Root({ children, status = \"Loading\", ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n {\n children,\n \"data-domainkit-part\": \"connection-root\",\n },\n );\n}\n\nexport interface StatusState extends Record<string, unknown> {\n readonly status: State[\"_tag\"];\n}\n\nexport interface StatusProps extends PartProps<\"div\", StatusState> {\n readonly state: State;\n}\n\nexport function Status({ children, state, ...props }: StatusProps) {\n const { messages } = useDomainKit();\n const text =\n state._tag === \"Loading\"\n ? messages.detectingProvider\n : state._tag === \"Connected\"\n ? messages.connected(state.provider.name)\n : state._tag === \"Detaching\"\n ? messages.detaching\n : state._tag === \"Unsupported\"\n ? messages.automaticUnavailable\n : state._tag === \"Failure\"\n ? state.message\n : state._tag === \"Redirecting\"\n ? messages.openingAuthorization\n : state._tag === \"Submitting\"\n ? messages.connecting\n : messages.providerAvailable(state.provider.name);\n return usePart(\n \"div\",\n props,\n { status: state._tag },\n {\n children: children ?? text,\n \"data-domainkit-part\": \"connection-status\",\n \"data-state\": state._tag,\n },\n );\n}\n\nexport interface TriggerProps extends Omit<\n ComponentPropsWithoutRef<typeof BaseDialog.Trigger>,\n \"children\"\n> {\n readonly children: ReactNode;\n}\n\nexport interface ConnectTriggerProps extends Omit<TriggerProps, \"children\"> {\n readonly children?: ReactNode;\n readonly provider: Provider.Provider;\n}\n\nexport function Trigger({ children, ...props }: TriggerProps) {\n return (\n <BaseDialog.Trigger data-domainkit-part=\"connection-trigger\" {...props}>\n {children}\n </BaseDialog.Trigger>\n );\n}\n\nexport function ConnectTrigger({ children, provider, ...props }: ConnectTriggerProps) {\n const { messages } = useDomainKit();\n return (\n <Trigger {...props} data-domainkit-recipe=\"connect\">\n {children ?? (\n <>\n <Provider.Mark aria-hidden=\"true\" provider={provider} />\n {messages.connectProvider(provider.name)}\n </>\n )}\n </Trigger>\n );\n}\n\nexport interface ActionState extends Record<string, unknown> {\n readonly authentication: \"attach\" | \"integration\" | \"oauth\" | \"token\";\n}\n\nexport interface OAuthActionProps extends PartProps<\"button\", ActionState> {\n readonly controller: Controller;\n readonly label: string;\n}\n\nexport function OAuthAction({ controller, label, ...props }: OAuthActionProps) {\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n return usePart(\n \"button\",\n props,\n { authentication: \"oauth\" },\n {\n children: label,\n \"data-domainkit-part\": \"oauth-connect\",\n disabled: pending,\n onClick: () => controller.connect(Transport.Method.OAuth()),\n type: \"button\",\n },\n );\n}\n\nexport interface IntegrationActionProps extends PartProps<\"button\", ActionState> {\n readonly controller: Controller;\n readonly label: string;\n}\n\nexport function IntegrationAction({ controller, label, ...props }: IntegrationActionProps) {\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n return usePart(\n \"button\",\n props,\n { authentication: \"integration\" },\n {\n children: label,\n \"data-domainkit-part\": \"integration-connect\",\n disabled: pending,\n onClick: () => controller.connect(Transport.Method.Integration()),\n type: \"button\",\n },\n );\n}\n\nexport interface AttachActionProps extends PartProps<\"button\", ActionState> {\n readonly connection: Transport.ReusableConnection;\n readonly controller: Controller;\n readonly label: string;\n readonly target: Transport.ProviderTarget;\n}\n\nexport function AttachAction({\n connection,\n controller,\n label,\n target,\n ...props\n}: AttachActionProps) {\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n return usePart(\n \"button\",\n props,\n { authentication: \"attach\" },\n {\n children: label,\n \"data-domainkit-part\": \"attach-target\",\n disabled: pending,\n onClick: () => controller.attach(connection, target),\n type: \"button\",\n },\n );\n}\n\nexport interface TokenActionProps extends Omit<PartProps<\"form\", ActionState>, \"method\"> {\n readonly controller: Controller;\n readonly method: Extract<Transport.AuthenticationMethod, { readonly _tag: \"Token\" }>;\n}\n\nexport function TokenAction({ controller, method, ...props }: TokenActionProps) {\n const { messages } = useDomainKit();\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n const [token, setToken] = useState(\"\");\n const [parameters, setParameters] = useState<Readonly<Record<string, string>>>({});\n const submit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (token.length > 0) {\n const populated = Object.fromEntries(\n Object.entries(parameters).filter(([, value]) => value.length > 0),\n );\n controller.connect(\n Transport.Method.Token({\n token,\n ...(Object.keys(populated).length === 0 ? {} : { parameters: populated }),\n }),\n );\n }\n };\n const missingRequiredParameter = method.parameters?.some(\n (parameter) => parameter.required === true && !parameters[parameter.key],\n );\n return usePart(\n \"form\",\n props,\n { authentication: \"token\" },\n {\n children: (\n <>\n {method.parameters?.map((parameter) => (\n <label key={parameter.key}>\n {parameter.label}\n <input\n name={parameter.key}\n disabled={pending}\n onChange={(event) => {\n const value = event.currentTarget.value;\n setParameters((current) => ({\n ...current,\n [parameter.key]: value,\n }));\n }}\n placeholder={parameter.placeholder}\n required={parameter.required}\n type=\"text\"\n value={parameters[parameter.key] ?? \"\"}\n />\n {parameter.description === undefined ? null : <small>{parameter.description}</small>}\n </label>\n ))}\n <label>\n {messages.tokenLabel}\n <input\n autoComplete=\"off\"\n disabled={pending}\n name=\"token\"\n onChange={(event) => setToken(event.currentTarget.value)}\n placeholder={method.placeholder}\n type=\"password\"\n value={token}\n />\n </label>\n <button\n disabled={pending || token.length === 0 || missingRequiredParameter === true}\n type=\"submit\"\n >\n {method.label}\n </button>\n </>\n ),\n \"data-domainkit-part\": \"token-connect\",\n onSubmit: submit,\n },\n );\n}\n\nexport interface DialogProps {\n readonly controller: Controller;\n readonly snapshot: Disconnected;\n}\n\nexport const targetLabel = (target: Transport.ProviderTarget): string =>\n `${target.evidence?.accountName ?? target.accountId} · ${target.zoneName}`;\n\nexport function Dialog({ controller, snapshot }: DialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n const integrationMethods = snapshot.provider.authentication.filter(\n (method): method is Extract<Transport.AuthenticationMethod, { readonly _tag: \"Integration\" }> =>\n method._tag === \"Integration\",\n );\n const oauthMethods = snapshot.provider.authentication.filter(\n (method): method is Extract<Transport.AuthenticationMethod, { readonly _tag: \"OAuth\" }> =>\n method._tag === \"OAuth\",\n );\n const tokenMethods = snapshot.provider.authentication.filter(\n (method): method is Extract<Transport.AuthenticationMethod, { readonly _tag: \"Token\" }> =>\n method._tag === \"Token\",\n );\n const hasProviderAccountPath =\n integrationMethods.length > 0 ||\n oauthMethods.length > 0 ||\n snapshot.reusableConnections.length > 0;\n return (\n <BaseDialog.Portal container={portalContainer}>\n <BaseDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseDialog.Popup\n data-domainkit-part=\"connection-dialog\"\n data-domainkit-root=\"\"\n data-color-scheme={colorScheme}\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <Provider.Mark provider={snapshot.provider} />\n <div data-domainkit-part=\"dialog-heading\">\n <BaseDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.dialogTitle(snapshot.provider.name)}\n </BaseDialog.Title>\n <BaseDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.dialogDescription(snapshot.domain)}\n </BaseDialog.Description>\n </div>\n {pending ? null : (\n <BaseDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-body\">\n {hasProviderAccountPath ? (\n <div data-domainkit-part=\"provider-authentication\">\n {integrationMethods.map((method) => (\n <IntegrationAction controller={controller} key={method._tag} label={method.label} />\n ))}\n {oauthMethods.map((method) => (\n <OAuthAction controller={controller} key={method._tag} label={method.label} />\n ))}\n {snapshot.reusableConnections.map((connection) => (\n <section\n data-connection-id={connection.connection.id}\n data-domainkit-part=\"reusable-connection\"\n key={connection.connection.id}\n >\n <div data-domainkit-part=\"reusable-connection-heading\">\n <strong>{messages.existingConnection}</strong>\n <span>{connection.connection.providerId}</span>\n </div>\n <div\n data-domainkit-part=\"target-list\"\n data-state={\n connection.targets.length === 0\n ? \"unavailable\"\n : connection.targets.length === 1\n ? \"unique\"\n : \"ambiguous\"\n }\n >\n {connection.targets.length === 0 ? (\n <p data-domainkit-part=\"target-unavailable\">{messages.targetUnavailable}</p>\n ) : (\n connection.targets.map((target) => (\n <AttachAction\n connection={connection}\n controller={controller}\n key={`${target.accountId}:${target.zoneId}`}\n label={messages.attachTarget(targetLabel(target))}\n target={target}\n />\n ))\n )}\n </div>\n </section>\n ))}\n </div>\n ) : null}\n {hasProviderAccountPath && tokenMethods.length > 0 ? (\n <div\n aria-label={messages.authenticationAlternative}\n data-domainkit-part=\"authentication-separator\"\n role=\"separator\"\n >\n <span aria-hidden=\"true\">{messages.authenticationAlternative}</span>\n </div>\n ) : null}\n {tokenMethods.map((method) => (\n <TokenAction controller={controller} key={method._tag} method={method} />\n ))}\n </div>\n {pending ? null : (\n <div data-domainkit-part=\"dialog-footer\">\n <BaseDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseDialog.Close>\n </div>\n )}\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n );\n}\n\nexport interface FlowProps extends Omit<RootProps, \"children\"> {\n readonly domain: string;\n}\n\nexport function Flow({ domain, ...props }: FlowProps) {\n const controller = useController(domain);\n const state = controller.state;\n const snapshot =\n state._tag === \"Disconnected\"\n ? state\n : state._tag === \"Submitting\" || state._tag === \"Redirecting\"\n ? state.snapshot\n : undefined;\n return (\n <Root {...props} status={state._tag}>\n <Status state={state} />\n {state._tag === \"Failure\" && state.retry !== \"never\" ? (\n <RetryAction\n controller={controller}\n kind={state.retry === \"after-user-action\" ? \"after-user-action\" : \"retry\"}\n />\n ) : null}\n {snapshot === undefined ? null : (\n <BaseDialog.Root\n onOpenChange={(open, eventDetails) => {\n if (!open && (state._tag === \"Submitting\" || state._tag === \"Redirecting\")) {\n eventDetails.cancel();\n }\n }}\n >\n <ConnectTrigger provider={snapshot.provider} />\n <Dialog controller={controller} snapshot={snapshot} />\n </BaseDialog.Root>\n )}\n </Root>\n );\n}\n\nexport interface RetryActionProps extends PartProps<\"button\", { readonly status: \"Failure\" }> {\n readonly controller: Controller;\n readonly kind?: \"after-user-action\" | \"retry\";\n}\n\nexport function RetryAction({ controller, kind = \"retry\", ...props }: RetryActionProps) {\n const { messages } = useDomainKit();\n return usePart(\n \"button\",\n props,\n { status: \"Failure\" },\n {\n children: kind === \"after-user-action\" ? messages.checkAgain : messages.retry,\n \"data-domainkit-part\": \"connection-retry\",\n onClick: controller.retry,\n type: \"button\",\n },\n );\n}\n\nexport interface CardProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Card({ status, ...props }: CardProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"connected-card\", \"data-state\": status },\n );\n}\n\nexport interface CardIdentityProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function CardIdentity({ status, ...props }: CardIdentityProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"connected-identity\", \"data-state\": status },\n );\n}\n\nexport interface CardActionsProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function CardActions({ status, ...props }: CardActionsProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"connected-actions\", \"data-state\": status },\n );\n}\n\nexport interface DisconnectDialogProps {\n readonly connection: Transport.Connected;\n readonly controller: Controller;\n readonly onOpenChange?: (open: boolean) => void;\n readonly open?: boolean;\n readonly trigger?: ReactElement | null;\n}\n\nexport function DisconnectDialog({\n connection,\n controller,\n onOpenChange,\n open: openProp,\n trigger,\n}: DisconnectDialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const [internalOpen, setInternalOpen] = useState(false);\n const open = openProp ?? internalOpen;\n const setOpen = (nextOpen: boolean) => {\n if (openProp === undefined) setInternalOpen(nextOpen);\n onOpenChange?.(nextOpen);\n };\n const detaching = controller.state._tag === \"Detaching\";\n return (\n <BaseAlertDialog.Root\n onOpenChange={(nextOpen, eventDetails) => {\n if (!nextOpen && detaching) {\n eventDetails.cancel();\n return;\n }\n setOpen(nextOpen);\n }}\n open={open}\n >\n {trigger === null ? null : (\n <BaseAlertDialog.Trigger\n data-domainkit-part=\"disconnect-trigger\"\n {...(trigger === undefined ? {} : { render: trigger })}\n >\n {messages.disconnectDomain}\n </BaseAlertDialog.Trigger>\n )}\n <BaseAlertDialog.Portal container={portalContainer}>\n <BaseAlertDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseAlertDialog.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"disconnect-dialog\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <div data-domainkit-part=\"dialog-heading\">\n <BaseAlertDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.disconnectTitle(connection.provider.name)}\n </BaseAlertDialog.Title>\n <BaseAlertDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.disconnectConsent}\n </BaseAlertDialog.Description>\n </div>\n {detaching ? null : (\n <BaseAlertDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseAlertDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-footer\">\n {detaching ? null : (\n <BaseAlertDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseAlertDialog.Close>\n )}\n <button\n data-domainkit-part=\"disconnect-action\"\n disabled={detaching}\n onClick={() => controller.detach()}\n type=\"button\"\n >\n {detaching ? messages.detaching : messages.disconnectDomain}\n </button>\n </div>\n </BaseAlertDialog.Popup>\n </BaseAlertDialog.Portal>\n </BaseAlertDialog.Root>\n );\n}\n\nexport type Connected = Transport.Connected;\n","import { useEffect, useRef, useState, type ReactElement, type ReactNode } from \"react\";\nimport type { Transport } from \"domainkit\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useIcons } from \"./icons.tsx\";\n\nexport const copyText = (value: string): Promise<boolean> => {\n if (typeof navigator === \"undefined\" || navigator.clipboard === undefined) {\n return Promise.resolve(false);\n }\n return navigator.clipboard.writeText(value).then(\n () => true,\n () => false,\n );\n};\n\nconst downloadText = (filename: string, contents: string): void => {\n if (typeof document === \"undefined\") return;\n const blob = new Blob([contents], { type: \"text/plain;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.download = filename;\n anchor.href = url;\n document.body.append(anchor);\n anchor.click();\n anchor.remove();\n URL.revokeObjectURL(url);\n};\n\nconst absoluteDomainName = (value: string): string => (value.endsWith(\".\") ? value : `${value}.`);\n\nconst textEncoder = new TextEncoder();\n\nconst escapeTxtCharacter = (character: string): string => {\n if (character === '\"' || character === \"\\\\\") return `\\\\${character}`;\n const codePoint = character.codePointAt(0);\n if (codePoint !== undefined && (codePoint < 32 || codePoint === 127)) {\n return `\\\\${codePoint.toString().padStart(3, \"0\")}`;\n }\n return character;\n};\n\nconst txtValue = (value: string): string => {\n const chunks: Array<string> = [];\n let chunk = \"\";\n let byteLength = 0;\n for (const character of value) {\n const characterByteLength = textEncoder.encode(character).byteLength;\n if (byteLength + characterByteLength > 255) {\n chunks.push(chunk);\n chunk = \"\";\n byteLength = 0;\n }\n chunk += escapeTxtCharacter(character);\n byteLength += characterByteLength;\n }\n chunks.push(chunk);\n return chunks.map((part) => `\"${part}\"`).join(\" \");\n};\n\nconst srvValue = (value: string): string => {\n const fields = value.trim().split(/\\s+/);\n if (fields.length !== 3) throw new Error(`Invalid SRV value: ${value}`);\n const [weight, port, target] = fields;\n if (weight === undefined || port === undefined || target === undefined) {\n throw new Error(`Invalid SRV value: ${value}`);\n }\n return `${weight} ${port} ${absoluteDomainName(target)}`;\n};\n\nconst zoneValue = (record: Transport.DnsRecord): string => {\n switch (record.type.toUpperCase()) {\n case \"CNAME\":\n case \"MX\":\n case \"NS\":\n case \"PTR\":\n return absoluteDomainName(record.value);\n case \"SRV\":\n return srvValue(record.value);\n case \"TXT\":\n return txtValue(record.value);\n default:\n return record.value;\n }\n};\n\ntype LeafState = Record<string, unknown>;\n\nfunction leafPart<Tag extends keyof React.JSX.IntrinsicElements>(\n defaultTagName: Tag,\n part: string,\n) {\n return function Leaf(props: PartProps<Tag, LeafState>): ReactElement {\n return usePart(defaultTagName, props, {}, { \"data-domainkit-part\": part });\n };\n}\n\nexport interface CopyController {\n readonly copied: boolean;\n readonly copy: () => void;\n}\n\nexport function useCopy(value: string, resetAfter = 2000): CopyController {\n const [copied, setCopied] = useState(false);\n const reset = useRef<ReturnType<typeof setTimeout>>(undefined);\n useEffect(() => () => clearTimeout(reset.current), []);\n return {\n copied,\n copy: () => {\n void copyText(value).then((ok) => {\n if (!ok) return;\n setCopied(true);\n clearTimeout(reset.current);\n reset.current = setTimeout(() => setCopied(false), resetAfter);\n });\n },\n };\n}\n\nexport interface CopyValueProps extends PartProps<\"span\", { readonly copied: boolean }> {\n readonly copiedIcon?: ReactNode;\n readonly copiedLabel?: string;\n readonly copyIcon?: ReactNode;\n readonly copyLabel?: string;\n readonly value: string;\n}\n\nexport function CopyValue({\n copiedIcon,\n copiedLabel = \"Copied\",\n copyIcon,\n copyLabel = \"Copy\",\n value,\n ...props\n}: CopyValueProps) {\n const icons = useIcons();\n const controller = useCopy(value);\n const copied = controller.copied;\n return usePart(\n \"span\",\n props,\n { copied },\n {\n children: (\n <>\n <code>{value}</code>\n <button\n aria-label={`${copied ? copiedLabel : copyLabel} ${value}`}\n data-domainkit-part=\"copy-action\"\n onClick={controller.copy}\n type=\"button\"\n >\n <span\n aria-hidden=\"true\"\n data-domainkit-part=\"copy-glyph\"\n data-icon=\"\"\n data-state=\"idle\"\n >\n {copyIcon ?? icons.copy}\n </span>\n <span\n aria-hidden=\"true\"\n data-domainkit-part=\"copy-glyph\"\n data-icon=\"\"\n data-state=\"done\"\n >\n {copiedIcon ?? icons.copied}\n </span>\n </button>\n </>\n ),\n \"data-copied\": copied ? \"\" : undefined,\n \"data-domainkit-part\": \"copy-value\",\n },\n );\n}\n\nexport interface ZoneFileProps extends PartProps<\"div\", { readonly count: number }> {\n readonly copiedIcon?: ReactNode;\n readonly copiedLabel?: string;\n readonly copyIcon?: ReactNode;\n readonly copyLabel?: string;\n readonly domain: string;\n readonly downloadIcon?: ReactNode;\n readonly downloadLabel?: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n}\n\nexport function ZoneFile({\n copiedIcon,\n copiedLabel = \"Copied\",\n copyIcon,\n copyLabel = \"Copy zone\",\n domain,\n downloadIcon,\n downloadLabel = \"Download\",\n records,\n ...props\n}: ZoneFileProps) {\n const icons = useIcons();\n const zone = toZoneFile(records);\n const controller = useCopy(zone);\n const copied = controller.copied;\n return usePart(\n \"div\",\n props,\n { count: records.length },\n {\n children: (\n <>\n <button\n aria-label={copied ? copiedLabel : copyLabel}\n data-domainkit-part=\"zone-copy\"\n onClick={controller.copy}\n type=\"button\"\n >\n <span aria-hidden=\"true\" data-icon=\"inline-start\">\n {copied ? (copiedIcon ?? icons.copied) : (copyIcon ?? icons.copy)}\n </span>\n {copied ? copiedLabel : copyLabel}\n </button>\n <button\n aria-label={downloadLabel}\n data-domainkit-part=\"zone-download\"\n onClick={() => downloadZoneFile(domain, records)}\n type=\"button\"\n >\n <span aria-hidden=\"true\" data-icon=\"inline-start\">\n {downloadIcon ?? icons.download}\n </span>\n {downloadLabel}\n </button>\n </>\n ),\n \"data-domainkit-part\": \"zone-file\",\n },\n );\n}\n\nexport interface StatusProps extends PartProps<\n \"span\",\n { readonly status: Transport.ObservationEvidence[\"_tag\"] }\n> {\n readonly evidence: Transport.ObservationEvidence;\n}\n\nexport function Status({ evidence, ...props }: StatusProps) {\n return usePart(\n \"span\",\n props,\n { status: evidence._tag },\n {\n children: evidence._tag,\n \"data-domainkit-part\": \"record-status\",\n \"data-status\": evidence._tag,\n },\n );\n}\n\nexport interface PriorityProps extends PartProps<\"span\", { readonly priority: number }> {\n readonly priority?: number;\n}\n\nexport function Priority({ children, priority = 0, ...props }: PriorityProps) {\n return usePart(\n \"span\",\n props,\n { priority },\n {\n children: children ?? `Priority ${priority}`,\n \"data-domainkit-part\": \"record-priority\",\n },\n );\n}\n\nexport const Header = leafPart(\"thead\", \"records-header\");\nexport const Body = leafPart(\"tbody\", \"records-body\");\nexport const Footer = leafPart(\"tfoot\", \"records-footer\");\nexport const Row = leafPart(\"tr\", \"records-row\");\nexport const Head = leafPart(\"th\", \"records-head\");\nexport const Cell = leafPart(\"td\", \"records-cell\");\nexport const Caption = leafPart(\"caption\", \"records-caption\");\nexport const Value = leafPart(\"span\", \"record-value\");\nexport const CardHeader = leafPart(\"div\", \"record-card-head\");\nexport const CardTitle = leafPart(\"strong\", \"record-card-title\");\nexport const CardContent = leafPart(\"dl\", \"record-card-content\");\n\nexport interface RootProps extends PartProps<\"table\", { readonly count: number }> {\n readonly count?: number;\n}\n\nexport function Root({ count = 0, ...props }: RootProps) {\n return (\n <div data-domainkit-part=\"records-panel\">\n {usePart(\"table\", props, { count }, { \"data-domainkit-part\": \"records-table\" })}\n </div>\n );\n}\n\nexport interface CardProps extends PartProps<\"section\", { readonly recordId: string }> {\n readonly copiedIcon?: ReactNode;\n readonly copyIcon?: ReactNode;\n readonly evidence?: ReadonlyArray<Transport.ObservationEvidence>;\n readonly record: Transport.DnsRecord;\n}\n\nexport function Card({ copiedIcon, copyIcon, evidence, record, ...props }: CardProps) {\n const matching =\n evidence === undefined ? [] : evidence.filter((item) => item.recordId === record.id);\n return usePart(\n \"section\",\n props,\n { recordId: record.id },\n {\n children: (\n <>\n <CardHeader>\n <CardTitle>{record.type}</CardTitle>\n {matching.map((item, index) => (\n <Status evidence={item} key={`${item._tag}-${index}`} />\n ))}\n </CardHeader>\n <CardContent>\n <div>\n <dt>Name</dt>\n <dd>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.name} />\n </dd>\n </div>\n <div>\n <dt>Value</dt>\n <dd>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.value} />\n {record.priority === undefined ? null : <Priority priority={record.priority} />}\n </dd>\n </div>\n </CardContent>\n </>\n ),\n \"data-domainkit-part\": \"record-card\",\n },\n );\n}\n\nexport interface TableProps extends PartProps<\"table\", { readonly count: number }> {\n readonly copiedIcon?: ReactNode;\n readonly copyIcon?: ReactNode;\n readonly evidence?: ReadonlyArray<Transport.ObservationEvidence>;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n}\n\nexport function Table({ copiedIcon, copyIcon, evidence, records, ...props }: TableProps) {\n const status = evidence !== undefined;\n return (\n <Root count={records.length} {...props}>\n <Header>\n <Row>\n <Head scope=\"col\">Type</Head>\n <Head scope=\"col\">Name</Head>\n <Head scope=\"col\">Value</Head>\n {status ? (\n <Head data-column=\"status\" scope=\"col\">\n Status\n </Head>\n ) : null}\n </Row>\n </Header>\n <Body>\n {records.map((record) => (\n <Row key={record.id}>\n <Cell>{record.type}</Cell>\n <Cell>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.name} />\n </Cell>\n <Cell>\n <Value>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.value} />\n {record.priority === undefined ? null : <Priority priority={record.priority} />}\n </Value>\n </Cell>\n {status ? (\n <Cell data-column=\"status\">\n {evidence\n .filter((item) => item.recordId === record.id)\n .map((item, index) => (\n <Status evidence={item} key={`${item._tag}-${index}`} />\n ))}\n </Cell>\n ) : null}\n </Row>\n ))}\n </Body>\n </Root>\n );\n}\n\nexport const toZoneFile = (records: ReadonlyArray<Transport.DnsRecord>): string =>\n `${records\n .map(\n (record) =>\n `${absoluteDomainName(record.name)} IN ${record.type} ${record.priority === undefined ? \"\" : `${record.priority} `}${zoneValue(record)}`,\n )\n .join(\"\\n\")}\\n`;\n\nexport const downloadZoneFile = (\n domain: string,\n records: ReadonlyArray<Transport.DnsRecord>,\n): void => downloadText(`${domain}.txt`, toZoneFile(records));\n\nexport type DnsRecord = Transport.DnsRecord;\nexport type ObservationEvidence = Transport.ObservationEvidence;\n","import { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { useMemo, useRef, type ReactElement } from \"react\";\n\nimport { failureFromError, recordsIdentity, type Failure } from \"./atom.ts\";\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport { Event as LifecycleEvent } from \"./lifecycle.ts\";\nimport * as Operations from \"./operations.tsx\";\nimport * as Records from \"./records.tsx\";\n\ntype LocalState = Data.TaggedEnum<{\n Applying: { readonly plan: Transport.ProvisioningPlan };\n Complete: { readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" }> };\n Idle: {};\n Partial: { readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Partial\" }> };\n Planning: {};\n Review: { readonly plan: Transport.ProvisioningPlan };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State =\n | LocalState\n | Extract<Transport.ApplyResult, { readonly _tag: \"Stale\" }>\n | Failure;\n\nexport interface Controller {\n readonly apply: () => void;\n readonly dismiss: () => void;\n readonly plan: () => void;\n readonly retry: () => void;\n readonly state: State;\n}\n\nexport type Command = Data.TaggedEnum<{\n Apply: {};\n Dismiss: {};\n Plan: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport function useModel(\n connection: Transport.Connected,\n records: ReadonlyArray<Transport.DnsRecord>,\n onApplied?: (\n result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" | \"Partial\" }>,\n ) => void,\n): Model {\n const { emit, runtime } = useDomainKit();\n const recordKey = recordsIdentity(records);\n const onAppliedRef = useRef(onApplied);\n onAppliedRef.current = onApplied;\n return useMemo(() => {\n const state = Atom.make<State>(State.Idle());\n const execute = runtime.fn<Command>()((command, get) => {\n const current = get(state);\n if (command._tag === \"Dismiss\") {\n if (current._tag === \"Planning\" || current._tag === \"Applying\") return Effect.void;\n get.set(state, State.Idle());\n return Effect.void;\n }\n if (command._tag === \"Plan\") {\n if (current._tag === \"Planning\" || current._tag === \"Applying\") return Effect.void;\n get.set(state, State.Planning());\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.provisioning.plan({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n records,\n }),\n ).pipe(\n Effect.tap((plan) => Effect.sync(() => get.set(state, State.Review({ plan })))),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n }\n if (\n current._tag !== \"Review\" ||\n current.plan.operations.some((operation) => operation._tag === \"Conflict\")\n )\n return Effect.void;\n const plan = current.plan;\n get.set(state, State.Applying({ plan }));\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.provisioning.apply({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n planDigest: plan.digest,\n }),\n ).pipe(\n Effect.tap((result) =>\n Effect.sync(() => {\n if (result._tag === \"Applied\") {\n get.set(state, State.Complete({ result }));\n emit(LifecycleEvent.RecordsApplied({ connection, result }));\n onAppliedRef.current?.(result);\n } else if (result._tag === \"Partial\") {\n get.set(state, State.Partial({ result }));\n emit(LifecycleEvent.RecordsPartiallyApplied({ connection, result }));\n onAppliedRef.current?.(result);\n } else {\n get.set(state, result);\n }\n }),\n ),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n });\n return { command: execute, state };\n }, [connection.attachment.domain, connection.attachment.id, emit, recordKey, runtime]);\n}\n\nexport function useController(\n connection: Transport.Connected,\n records: ReadonlyArray<Transport.DnsRecord>,\n onApplied?: (\n result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" | \"Partial\" }>,\n ) => void,\n): Controller {\n const model = useModel(connection, records, onApplied);\n const state = useAtomValue(model.state);\n const execute = useAtomSet(model.command);\n\n return {\n apply: () => execute(Command.Apply()),\n dismiss: () => execute(Command.Dismiss()),\n plan: () => execute(Command.Plan()),\n retry: () => execute(Command.Plan()),\n state,\n };\n}\n\nexport interface RootProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Root({ status, ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"provisioning-flow\", \"data-state\": status },\n );\n}\n\nexport function Outcome({ state }: { readonly state: State }) {\n const { messages } = useDomainKit();\n if (state._tag === \"Partial\" || state._tag === \"Failure\" || state._tag === \"Stale\") {\n return (\n <p data-domainkit-part=\"flow-outcome\" data-tone=\"danger\" role=\"alert\">\n {state._tag === \"Partial\" ? messages.recordsPartiallyApplied : state.message}\n </p>\n );\n }\n return null;\n}\n\nexport interface DialogProps {\n readonly controller: Controller;\n readonly trigger?: ReactElement;\n}\n\nexport function Dialog({ controller, trigger }: DialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const state = controller.state;\n const planRef = useRef<Transport.ProvisioningPlan | undefined>(undefined);\n if (state._tag === \"Idle\") planRef.current = undefined;\n if (state._tag === \"Review\" || state._tag === \"Applying\") planRef.current = state.plan;\n const plan = planRef.current;\n const busy = state._tag === \"Planning\" || state._tag === \"Applying\";\n const open = state._tag !== \"Idle\" && state._tag !== \"Complete\";\n return (\n <BaseDialog.Root\n onOpenChange={(nextOpen, eventDetails) => {\n if (!nextOpen && busy) {\n eventDetails.cancel();\n return;\n }\n if (!nextOpen) controller.dismiss();\n }}\n open={open}\n >\n <BaseDialog.Trigger\n data-domainkit-part=\"plan-trigger\"\n disabled={state._tag !== \"Idle\"}\n onClick={() => controller.plan()}\n {...(trigger === undefined ? {} : { render: trigger })}\n >\n {messages.reviewDns}\n </BaseDialog.Trigger>\n <BaseDialog.Portal container={portalContainer}>\n <BaseDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseDialog.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"plan-dialog\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <div data-domainkit-part=\"dialog-heading\">\n <BaseDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.reviewDns}\n </BaseDialog.Title>\n <BaseDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.planConsent}\n </BaseDialog.Description>\n </div>\n {busy ? null : (\n <BaseDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-body\">\n {plan === undefined ? (\n <p data-domainkit-part=\"dialog-progress\" role=\"status\">\n {messages.planningDns}\n </p>\n ) : (\n <Operations.List lifecycle=\"provisioning\" operations={plan.operations} />\n )}\n <Outcome state={state} />\n </div>\n <div data-domainkit-part=\"dialog-footer\">\n {busy ? (\n <button data-domainkit-part=\"plan-apply\" disabled type=\"button\">\n {state._tag === \"Applying\" ? messages.applyingDns : messages.planningDns}\n </button>\n ) : state._tag === \"Review\" && plan !== undefined ? (\n <>\n <BaseDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseDialog.Close>\n <button\n data-domainkit-part=\"plan-apply\"\n disabled={plan.operations.some((operation) => operation._tag === \"Conflict\")}\n onClick={() => controller.apply()}\n type=\"button\"\n >\n {messages.applyDns}\n </button>\n </>\n ) : (\n <>\n <BaseDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.close}\n </BaseDialog.Close>\n <button\n data-domainkit-part=\"provisioning-retry\"\n onClick={() => controller.retry()}\n type=\"button\"\n >\n {messages.retry}\n </button>\n </>\n )}\n </div>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\n\nexport function RetryAction({ controller }: { readonly controller: Controller }) {\n const { messages } = useDomainKit();\n const state = controller.state;\n if (state._tag !== \"Failure\" && state._tag !== \"Stale\" && state._tag !== \"Partial\") return null;\n return (\n <button\n data-domainkit-part=\"provisioning-retry\"\n onClick={() => controller.retry()}\n type=\"button\"\n >\n {messages.retry}\n </button>\n );\n}\n\nexport interface FlowProps extends Omit<RootProps, \"status\"> {\n readonly connection: Transport.Connected;\n readonly onApplied?: (\n result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" | \"Partial\" }>,\n ) => void;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n readonly showRecords?: boolean;\n readonly trigger?: ReactElement;\n}\n\nexport function Flow({\n connection,\n onApplied,\n records,\n showRecords = true,\n trigger,\n ...props\n}: FlowProps) {\n const controller = useController(connection, records, onApplied);\n const state = controller.state;\n return (\n <Root status={state._tag} {...props}>\n {showRecords ? <Records.Table records={records} /> : null}\n <Dialog controller={controller} {...(trigger === undefined ? {} : { trigger })} />\n </Root>\n );\n}\n","import { Popover as BasePopover } from \"@base-ui/react/popover\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { useMemo } from \"react\";\n\nimport { failureFromError, recordsIdentity, type Failure } from \"./atom.ts\";\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport { Status as RecordStatus } from \"./records.tsx\";\n\ntype LocalState = Data.TaggedEnum<{\n Failed: { readonly failure: Failure; readonly previous?: Transport.Observation };\n Idle: {};\n Observing: { readonly previous?: Transport.Observation };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State = LocalState | Transport.Observation;\n\nexport interface ObserveConfig {\n readonly connection?: Transport.Connected;\n readonly domain: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n readonly sources?: {\n readonly provider?: boolean;\n readonly publicDns?: boolean;\n };\n}\n\nexport type Command = Data.TaggedEnum<{\n Observe: {};\n Reset: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport interface Controller {\n readonly observe: () => void;\n readonly reset: () => void;\n readonly state: State;\n}\n\nexport function useModel(config: ObserveConfig): Model {\n const { runtime } = useDomainKit();\n const provider = config.sources?.provider ?? config.connection !== undefined;\n const publicDns = config.sources?.publicDns ?? true;\n const recordKey = recordsIdentity(config.records);\n return useMemo(() => {\n const state = Atom.make<State>(State.Idle());\n const observe = runtime.fn<Command>()((command, get) => {\n if (command._tag === \"Reset\") {\n get.set(state, State.Idle());\n return Effect.void;\n }\n const current = get(state);\n if (current._tag === \"Observing\") return Effect.void;\n const previous =\n current._tag === \"Observation\"\n ? current\n : current._tag === \"Failed\"\n ? current.previous\n : undefined;\n get.set(state, State.Observing({ ...(previous === undefined ? {} : { previous }) }));\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.verification.observe({\n ...(config.connection === undefined\n ? {}\n : { attachmentId: config.connection.attachment.id }),\n domain: config.domain,\n records: config.records,\n sources: { provider, publicDns },\n }),\n ).pipe(\n Effect.tap((observation) => Effect.sync(() => get.set(state, observation))),\n Effect.catch((error) =>\n Effect.sync(() =>\n get.set(\n state,\n State.Failed({\n failure: failureFromError(error),\n ...(previous === undefined ? {} : { previous }),\n }),\n ),\n ),\n ),\n Effect.asVoid,\n );\n });\n return { command: observe, state };\n }, [config.connection?.attachment.id, config.domain, provider, publicDns, recordKey, runtime]);\n}\n\nexport function useController(config: ObserveConfig): Controller {\n const model = useModel(config);\n const state = useAtomValue(model.state);\n const dispatch = useAtomSet(model.command);\n const observe = () => dispatch(Command.Observe());\n const reset = () => dispatch(Command.Reset());\n return { observe, reset, state };\n}\n\nconst evidenceNote = (evidence: Transport.ObservationEvidence): string | undefined => {\n switch (evidence._tag) {\n case \"Mismatch\":\n case \"Unavailable\":\n return evidence.message;\n case \"Found\":\n case \"Missing\":\n return undefined;\n default: {\n const _exhaustive: never = evidence;\n return _exhaustive;\n }\n }\n};\n\nconst observationGroups = (\n observation: Transport.Observation,\n): ReadonlyArray<{\n readonly evidence: ReadonlyArray<Transport.ObservationEvidence>;\n readonly label: string;\n}> =>\n [\n { evidence: observation.provider, label: \"Provider\" },\n { evidence: observation.publicDns, label: \"Public DNS\" },\n ].filter((group) => group.evidence.length > 0);\n\nexport interface RootProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Root({ status, ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"verification-status\", \"data-state\": status },\n );\n}\n\nexport function Evidence({ observation }: { readonly observation: Transport.Observation }) {\n return (\n <div data-domainkit-part=\"observation-list\">\n {observationGroups(observation).map((group) => (\n <section data-domainkit-part=\"observation-group\" key={group.label}>\n <h3 data-domainkit-part=\"observation-source\">{group.label}</h3>\n <ul>\n {group.evidence.map((evidence, index) => {\n const note = evidenceNote(evidence);\n return (\n <li key={`${evidence._tag}-${evidence.recordId}-${index}`}>\n <div data-domainkit-part=\"observation-row\">\n <span data-domainkit-part=\"observation-record\">{evidence.recordId}</span>\n <RecordStatus evidence={evidence} />\n </div>\n {note === undefined ? null : <p data-domainkit-part=\"observation-note\">{note}</p>}\n </li>\n );\n })}\n </ul>\n </section>\n ))}\n </div>\n );\n}\n\nexport function Outcome({ state }: { readonly state: State }) {\n if (state._tag !== \"Failed\") return null;\n return (\n <p data-domainkit-part=\"flow-outcome\" data-tone=\"danger\" role=\"alert\">\n {state.failure.message}\n </p>\n );\n}\n\nexport interface ObserveActionProps extends PartProps<\n \"button\",\n { readonly status: State[\"_tag\"] }\n> {\n readonly controller: Controller;\n}\n\nexport function ObserveAction({ controller, ...props }: ObserveActionProps) {\n const { messages } = useDomainKit();\n const observing = controller.state._tag === \"Observing\";\n return usePart(\n \"button\",\n props,\n { status: controller.state._tag },\n {\n \"aria-busy\": observing,\n children: messages.checkDns,\n \"data-domainkit-part\": \"observe-action\",\n \"data-loading\": observing ? \"\" : undefined,\n disabled: observing,\n onClick: () => controller.observe(),\n type: \"button\",\n },\n );\n}\n\nexport interface StatusProps extends Omit<RootProps, \"status\"> {\n readonly config: ObserveConfig;\n}\n\nexport function Status({ config, ...props }: StatusProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const controller = useController(config);\n const state = controller.state;\n const observation =\n state._tag === \"Observation\"\n ? state\n : state._tag === \"Observing\" || state._tag === \"Failed\"\n ? state.previous\n : undefined;\n return (\n <Root status={state._tag} {...props}>\n <BasePopover.Root>\n <BasePopover.Trigger render={<ObserveAction controller={controller} />} />\n <BasePopover.Portal container={portalContainer}>\n <BasePopover.Positioner\n align=\"end\"\n data-domainkit-part=\"verification-positioner\"\n sideOffset={6}\n >\n <BasePopover.Popup\n aria-label={messages.checkDns}\n aria-busy={state._tag === \"Observing\"}\n data-color-scheme={colorScheme}\n data-domainkit-part=\"verification-popover\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <BasePopover.Arrow data-domainkit-part=\"verification-arrow\" />\n {state._tag === \"Observing\" ? (\n <p data-domainkit-part=\"verification-progress\" role=\"status\">\n {messages.checkingDns}\n </p>\n ) : null}\n {observation === undefined ? null : <Evidence observation={observation} />}\n <Outcome state={state} />\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n </BasePopover.Root>\n </Root>\n );\n}\n\nexport type Observation = Transport.Observation;\n","import { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { Menu as BaseMenu } from \"@base-ui/react/menu\";\nimport type { Transport } from \"domainkit\";\nimport { useRef, useState, type RefObject } from \"react\";\n\nimport * as Cleanup from \"./cleanup.tsx\";\nimport * as Connection from \"./connection.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport * as Provider from \"./provider.tsx\";\nimport * as Provisioning from \"./provisioning.tsx\";\nimport * as Records from \"./records.tsx\";\nimport * as Verification from \"./verification.tsx\";\n\nexport interface FlowProps {\n readonly domain: string;\n readonly receiptId?: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n}\n\nexport function Flow({ domain, receiptId, records }: FlowProps) {\n const controller = Connection.useController(domain);\n const state = controller.state;\n const connected =\n state._tag === \"Connected\" ? state : state._tag === \"Detaching\" ? state.snapshot : undefined;\n return (\n <Connection.Root status={state._tag}>\n {state._tag === \"Connected\" || state._tag === \"Detaching\" ? (\n <ConnectedCard\n connection={state._tag === \"Connected\" ? state : state.snapshot}\n controller={controller}\n {...(receiptId === undefined ? {} : { initialReceiptId: receiptId })}\n records={records}\n status={state._tag}\n />\n ) : (\n <AvailableCard controller={controller} state={state} />\n )}\n <Records.Table records={records} />\n <Verification.Status\n config={{\n ...(connected === undefined ? {} : { connection: connected }),\n domain,\n records,\n }}\n />\n </Connection.Root>\n );\n}\n\nfunction AvailableCard({\n controller,\n state,\n}: {\n readonly controller: Connection.Controller;\n readonly state: Exclude<Connection.State, Transport.Connected>;\n}) {\n const { messages } = useDomainKit();\n const snapshot =\n state._tag === \"Disconnected\"\n ? state\n : state._tag === \"Submitting\" || state._tag === \"Redirecting\"\n ? state.snapshot\n : undefined;\n return (\n <Connection.Card status={state._tag}>\n <Connection.CardIdentity status={state._tag}>\n {snapshot === undefined ? null : <Provider.Mark provider={snapshot.provider} />}\n <Connection.Status state={state} />\n </Connection.CardIdentity>\n <Connection.CardActions status={state._tag}>\n {state._tag === \"Failure\" && state.retry !== \"never\" ? (\n <Connection.RetryAction\n controller={controller}\n kind={state.retry === \"after-user-action\" ? \"after-user-action\" : \"retry\"}\n />\n ) : null}\n {snapshot === undefined ? null : (\n <BaseDialog.Root\n onOpenChange={(open, eventDetails) => {\n if (!open && (state._tag === \"Submitting\" || state._tag === \"Redirecting\")) {\n eventDetails.cancel();\n }\n }}\n >\n <Connection.ConnectTrigger\n disabled={state._tag === \"Submitting\" || state._tag === \"Redirecting\"}\n provider={snapshot.provider}\n >\n {messages.connectProvider(snapshot.provider.name)}\n </Connection.ConnectTrigger>\n <Connection.Dialog controller={controller} snapshot={snapshot} />\n </BaseDialog.Root>\n )}\n </Connection.CardActions>\n </Connection.Card>\n );\n}\n\nfunction ConnectedCard({\n connection,\n controller,\n initialReceiptId,\n records,\n status,\n}: {\n readonly connection: Transport.Connected;\n readonly controller: Connection.Controller;\n readonly initialReceiptId?: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n readonly status: \"Connected\" | \"Detaching\";\n}) {\n const [receipt, setReceipt] = useState({\n host: initialReceiptId,\n value: initialReceiptId,\n });\n if (receipt.host !== initialReceiptId) {\n setReceipt({ host: initialReceiptId, value: initialReceiptId });\n }\n const receiptId = receipt.host === initialReceiptId ? receipt.value : initialReceiptId;\n const disabled = status === \"Detaching\";\n const actionsTriggerRef = useRef<HTMLButtonElement>(null);\n return (\n <Connection.Card status={status}>\n <Connection.CardIdentity status={status}>\n <Provider.Mark provider={connection.provider} />\n <Connection.Status state={status === \"Connected\" ? connection : controller.state} />\n </Connection.CardIdentity>\n <Connection.CardActions status={status}>\n <Provisioning.Flow\n connection={connection}\n onApplied={(result) => setReceipt({ host: initialReceiptId, value: result.receiptId })}\n records={records}\n showRecords={false}\n />\n {receiptId === undefined ? (\n <ProviderActions\n actionsTriggerRef={actionsTriggerRef}\n connection={connection}\n controller={controller}\n disabled={disabled}\n />\n ) : (\n <ProviderActionsWithCleanup\n actionsTriggerRef={actionsTriggerRef}\n connection={connection}\n controller={controller}\n disabled={disabled}\n key={receiptId}\n onCleaned={() => setReceipt({ host: initialReceiptId, value: undefined })}\n receiptId={receiptId}\n />\n )}\n </Connection.CardActions>\n </Connection.Card>\n );\n}\n\nfunction ProviderActionsWithCleanup({\n actionsTriggerRef,\n connection,\n controller,\n disabled,\n onCleaned,\n receiptId,\n}: {\n readonly actionsTriggerRef: RefObject<HTMLButtonElement | null>;\n readonly connection: Transport.Connected;\n readonly controller: Connection.Controller;\n readonly disabled: boolean;\n readonly onCleaned: () => void;\n readonly receiptId: string;\n}) {\n const [cleaned, setCleaned] = useState(false);\n const cleanup = Cleanup.useController(connection, receiptId, (result) => {\n if (result._tag === \"Cleaned\") setCleaned(true);\n });\n return (\n <ProviderActions\n actionsTriggerRef={actionsTriggerRef}\n cleanup={cleanup}\n connection={connection}\n controller={controller}\n disabled={disabled}\n onCleanupCloseComplete={() => {\n if (cleaned) onCleaned();\n }}\n />\n );\n}\n\nfunction ProviderActions({\n actionsTriggerRef: actionsTriggerRefProp,\n cleanup,\n connection,\n controller,\n disabled,\n onCleanupCloseComplete,\n}: {\n readonly actionsTriggerRef?: RefObject<HTMLButtonElement | null>;\n readonly cleanup?: Cleanup.Controller;\n readonly connection: Transport.Connected;\n readonly controller: Connection.Controller;\n readonly disabled: boolean;\n readonly onCleanupCloseComplete?: () => void;\n}) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const fallbackActionsTriggerRef = useRef<HTMLButtonElement>(null);\n const actionsTriggerRef = actionsTriggerRefProp ?? fallbackActionsTriggerRef;\n const [menuOpen, setMenuOpen] = useState(false);\n const [disconnectOpen, setDisconnectOpen] = useState(false);\n return (\n <>\n <BaseMenu.Root disabled={disabled} modal={false} onOpenChange={setMenuOpen} open={menuOpen}>\n <BaseMenu.Trigger\n aria-label={messages.moreActions}\n data-domainkit-part=\"actions-trigger\"\n ref={actionsTriggerRef}\n >\n <span aria-hidden=\"true\">⋯</span>\n </BaseMenu.Trigger>\n <BaseMenu.Portal container={portalContainer} keepMounted>\n <BaseMenu.Positioner align=\"end\" sideOffset={6}>\n <BaseMenu.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"actions-menu\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n {cleanup === undefined ? null : (\n <>\n <BaseMenu.Item\n closeOnClick={false}\n data-domainkit-part=\"actions-item\"\n nativeButton\n onClickCapture={() => {\n setMenuOpen(false);\n queueMicrotask(() => cleanup.plan());\n }}\n render={<button type=\"button\" />}\n >\n {messages.reviewCleanup}\n </BaseMenu.Item>\n <BaseMenu.Separator data-domainkit-part=\"actions-separator\" />\n </>\n )}\n <BaseMenu.Item\n closeOnClick={false}\n data-domainkit-part=\"actions-item\"\n data-tone=\"danger\"\n nativeButton\n onClickCapture={() => {\n setMenuOpen(false);\n queueMicrotask(() => setDisconnectOpen(true));\n }}\n render={<button type=\"button\" />}\n >\n {messages.disconnectDomain}\n </BaseMenu.Item>\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n {cleanup === undefined ? null : (\n <Cleanup.Dialog\n controller={cleanup}\n onOpenChangeComplete={(open) => {\n if (!open) {\n onCleanupCloseComplete?.();\n queueMicrotask(() => actionsTriggerRef.current?.focus());\n }\n }}\n trigger={null}\n />\n )}\n <Connection.DisconnectDialog\n connection={connection}\n controller={controller}\n onOpenChange={(open) => {\n setDisconnectOpen(open);\n if (!open) queueMicrotask(() => actionsTriggerRef.current?.focus());\n }}\n open={disconnectOpen}\n trigger={null}\n />\n </>\n );\n}\n","import { DomainName, Transport } from \"domainkit\";\nimport type * as Layer from \"effect/Layer\";\n\nexport interface FakeOptions {\n readonly connect?: Transport.ConnectionResult;\n readonly inspect:\n | Transport.ConnectionSnapshot\n | FakeFailure\n | ReadonlyArray<Transport.ConnectionSnapshot | FakeFailure>;\n readonly attach?: Transport.Connected;\n readonly detach?: Transport.DetachResult;\n readonly plan?: Transport.ProvisioningPlan;\n readonly apply?: Transport.ApplyResult;\n readonly observe?: Transport.Observation;\n readonly cleanupPlan?: Transport.CleanupPlan;\n readonly cleanupApply?: Transport.CleanupResult;\n}\n\ninterface FakeFailure {\n readonly _tag: \"Failure\";\n readonly message: string;\n readonly operation?: string;\n readonly retry: Transport.Failure[\"retry\"];\n}\n\nexport interface FakeTransport extends Transport.AsyncInterface, Layer.Layer<Transport.Service> {\n readonly calls: {\n readonly attach: Array<Transport.AttachInput>;\n readonly connect: Array<Transport.ConnectInput>;\n readonly detach: Array<Transport.DetachInput>;\n readonly inspect: Array<Transport.InspectInput>;\n readonly plan: Array<Transport.ProvisioningPlanInput>;\n readonly apply: Array<Transport.ProvisioningApplyInput>;\n readonly observe: Array<Transport.ObserveInput>;\n readonly cleanupPlan: Array<Transport.CleanupPlanInput>;\n readonly cleanupApply: Array<Transport.CleanupApplyInput>;\n };\n}\n\nexport const provider = (overrides: Partial<Transport.Provider> = {}): Transport.Provider => ({\n authentication: [\n { _tag: \"OAuth\", label: \"Continue with OAuth\" },\n { _tag: \"Token\", label: \"Connect with token\", placeholder: \"Paste API token\" },\n ],\n id: \"cloudflare\",\n name: \"Cloudflare\",\n ...overrides,\n});\n\nexport const target = (\n overrides: Partial<Transport.ProviderTarget> = {},\n): Transport.ProviderTarget => ({\n accountId: \"account-1\",\n accountKind: \"account\",\n zoneId: \"zone-1\",\n zoneName: DomainName.parse(\"example.com\"),\n ...overrides,\n});\n\nexport const connection = (\n overrides: Partial<Transport.ProviderConnection> = {},\n): Transport.ProviderConnection => ({\n createdAt: new Date(\"2026-08-30T00:00:00.000Z\"),\n id: \"connection-1\",\n method: \"oauth2\",\n ownerId: \"organization-1\",\n providerId: \"cloudflare\",\n status: \"active\",\n ...overrides,\n});\n\nexport const attachment = (\n overrides: Partial<Transport.DomainAttachment> = {},\n): Transport.DomainAttachment => ({\n connectionId: \"connection-1\",\n createdAt: new Date(\"2026-08-30T00:00:00.000Z\"),\n domain: DomainName.parse(\"mail.example.com\"),\n id: \"attachment-1\",\n target: target(),\n ...overrides,\n});\n\nexport const connected = (overrides: Partial<Transport.Connected> = {}): Transport.Connected => ({\n _tag: \"Connected\",\n attachment: attachment(),\n connection: connection(),\n provider: provider(),\n ...overrides,\n});\n\nexport function makeFakeTransport(options: FakeOptions): FakeTransport {\n const calls: FakeTransport[\"calls\"] = {\n apply: [],\n attach: [],\n cleanupApply: [],\n cleanupPlan: [],\n connect: [],\n detach: [],\n inspect: [],\n observe: [],\n plan: [],\n };\n const inspections = Array.isArray(options.inspect) ? [...options.inspect] : [options.inspect];\n const transport: Transport.AsyncInterface = {\n cleanup: {\n apply: async (input) => {\n calls.cleanupApply.push(input);\n return (\n options.cleanupApply ?? {\n _tag: \"Cleaned\",\n operationId: \"cleanup-operation-1\",\n results: [],\n }\n );\n },\n plan: async (input) => {\n calls.cleanupPlan.push(input);\n return (\n options.cleanupPlan ?? {\n _tag: \"CleanupPlan\",\n digest: \"cleanup-digest-1\",\n expiresAt: \"2099-01-01T00:00:00.000Z\",\n operations: [],\n }\n );\n },\n },\n connection: {\n connect: async (input) => {\n calls.connect.push(input);\n return (\n options.connect ?? {\n _tag: \"Connected\",\n attachment: attachment({ domain: DomainName.parse(input.domain) }),\n connection: connection(),\n provider: provider(),\n }\n );\n },\n inspect: async (input) => {\n calls.inspect.push(input);\n const snapshot = inspections.shift() ?? inspections.at(-1) ?? options.inspect;\n if (Array.isArray(snapshot)) throw new Error(\"Fake inspection sequence is empty\");\n if (snapshot._tag === \"Failure\")\n throw new Transport.Failure({\n message: snapshot.message,\n operation: snapshot.operation ?? \"connection.inspect\",\n retry: snapshot.retry,\n });\n return snapshot;\n },\n attach: async (input) => {\n calls.attach.push(input);\n return (\n options.attach ?? {\n _tag: \"Connected\",\n attachment: attachment({\n connectionId: input.connectionId,\n domain: DomainName.parse(input.domain),\n target: input.target,\n }),\n connection: connection({ id: input.connectionId }),\n provider: provider(),\n }\n );\n },\n detach: async (input) => {\n calls.detach.push(input);\n return (\n options.detach ?? {\n _tag: \"Detached\",\n attachment: attachment(),\n connection: connection(),\n remainingAttachments: 0,\n }\n );\n },\n },\n provisioning: {\n apply: async (input) => {\n calls.apply.push(input);\n return (\n options.apply ?? {\n _tag: \"Applied\",\n operationId: \"apply-operation-1\",\n receiptId: \"receipt-1\",\n results: [],\n }\n );\n },\n plan: async (input) => {\n calls.plan.push(input);\n return (\n options.plan ?? {\n _tag: \"Plan\",\n digest: \"plan-digest-1\",\n expiresAt: \"2099-01-01T00:00:00.000Z\",\n operations: input.records.map((record) => ({\n _tag: \"Create\" as const,\n id: `create-${record.id}`,\n record,\n })),\n }\n );\n },\n },\n verification: {\n observe: async (input) => {\n calls.observe.push(input);\n return (\n options.observe ?? {\n _tag: \"Observation\",\n provider: input.sources.provider\n ? input.records.map((record) => ({ _tag: \"Found\" as const, recordId: record.id }))\n : [],\n publicDns: input.sources.publicDns\n ? input.records.map((record) => ({ _tag: \"Found\" as const, recordId: record.id }))\n : [],\n }\n );\n },\n },\n };\n return Object.assign(Transport.layerFromAsync(transport), transport, { calls });\n}\n"],"mappings":";;;;;;;;;;;;;;;AAaA,MAAa,UAAU,KAAK,WAAoB;AAEhD,MAAa,oBAAoB,UAC/B,QAAQ,QAAQ;CACd,SAAS,MAAM;CACf,WAAW,MAAM;CACjB,OAAO,MAAM;AACf,CAAC;AAEH,MAAa,qBAAqB,WAAmB,YACnD,QAAQ,QAAQ;CAAE;CAAS;CAAW,OAAO;AAAO,CAAC;AAEvD,MAAa,mBAAmB,YAC9B,KAAK,UACH,QAAQ,KAAK,EAAE,IAAI,MAAM,UAAU,MAAM,aAAa;CAAE;CAAI;CAAM;CAAU;CAAM;AAAM,EAAE,CAC5F;;;ACbF,SAAgB,QAId,gBACA,gBACA,OACA,eACc;CACd,MAAM,EAAE,WAAW,QAAQ,OAAO,GAAG,kBAAkB;CACvD,MAAM,aAGF;EACF,GAAI,cAAc,KAAA,IAAY,CAAC,IAAI,EAAE,UAAU;EAC/C;EACA,OAAO,CAAC,eAAe,aAAa;EACpC,GAAI,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO;EACzC;EACA,GAAI,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,MAAM;CACzC;CACA,OAAO,UAAU,UAAU;AAC7B;;;AC7BA,SAAS,MAAM,EAAE,YAA8C;CAC7D,OACE,oBAAC,OAAD;EACE,eAAY;EACZ,MAAK;EACL,QAAO;EACP,eAAc;EACd,gBAAe;EACf,aAAa;EACb,SAAQ;EAEP;CACE,CAAA;AAET;AAEA,MAAa,eAAe;CAC1B,QACE,oBAAC,OAAD,EAAA,UACE,oBAAC,QAAD,EAAM,GAAE,kBAAmB,CAAA,EACtB,CAAA;CAET,MACE,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,QAAD;EAAM,QAAO;EAAK,IAAG;EAAI,OAAM;EAAK,GAAE;EAAI,GAAE;CAAK,CAAA,GACjD,oBAAC,QAAD,EAAM,GAAE,0DAA2D,CAAA,CAC9D,EAAA,CAAA;CAET,UACE,qBAAC,OAAD,EAAA,UAAA;EACE,oBAAC,QAAD,EAAM,GAAE,4CAA6C,CAAA;EACrD,oBAAC,QAAD,EAAM,GAAE,gBAAiB,CAAA;EACzB,oBAAC,QAAD,EAAM,GAAE,WAAY,CAAA;CACf,EAAA,CAAA;AAEX;AAEA,MAAM,eAAe,cAAqB,YAAY;AAEtD,SAAgB,cAAc,EAC5B,UACA,SAIC;CACD,MAAM,QAAQ,eACL;EACL,QAAQ,OAAO,UAAU,aAAa;EACtC,MAAM,OAAO,QAAQ,aAAa;EAClC,UAAU,OAAO,YAAY,aAAa;CAC5C,IACA,CAAC,KAAK,CACR;CACA,OAAO,oBAAC,aAAa,UAAd;EAA8B;EAAQ;CAAgC,CAAA;AAC/E;AAEA,SAAgB,WAAkB;CAChC,OAAO,WAAW,YAAY;AAChC;;;;;;;ACzBA,MAAa,UAAmB;CAC9B,cAAc;CACd,UAAU;CACV,aAAa;CACb,2BAA2B;CAC3B,sBAAsB;CACtB,QAAQ;CACR,YAAY;CACZ,aAAa;CACb,UAAU;CACV,gBAAgB;CAChB,gBAAgB;CAChB,aAAa;CACb,uBAAuB;CACvB,YAAY,aAAa,GAAG,SAAS;CACrC,oBAAoB,aAAa,GAAG,SAAS;CAC7C,YAAY;CACZ,OAAO;CACP,mBAAmB;CACnB,kBAAkB;CAClB,mBACE;CACF,eAAe;CACf,WAAW;CACX,kBAAkB,aAAa,UAAU,SAAS;CAClD,oBAAoB;CACpB,oBAAoB,WAAW,6BAA6B,OAAO;CACnE,cAAc,aAAa,WAAW;CACtC,sBAAsB;CACtB,aAAa;CACb,aAAa;CACb,iBAAiB;CACjB,aAAa;CACb,yBAAyB;CACzB,eAAe;CACf,WAAW;CACX,OAAO;CACP,oBAAoB;CACpB,mBAAmB;CACnB,eAAe,WAAW,OAAO;CACjC,YAAY;AACd;AAEA,MAAa,SAAS,YAA8B,CAAC,OAAgB;CACnE,GAAG;CACH,GAAG;AACL;;;;ACrEA,MAAM,YAAY;CAChB,QAAQ;CACR,gBAAgB;CAChB,UAAU;CACV,YAAY;CACZ,QAAQ;CACR,QAAQ;CACR,gBAAgB;CAChB,MAAM;CACN,YAAY;CACZ,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,MAAM;AACR;AAEA,SAAgB,QAAQ,QAAe,CAAC,GAAkB;CACxD,OAAO,OAAO,YACZ,OAAO,QAAQ,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,WACnC,UAAU,KAAA,IAAY,CAAC,IAAI,CAAC,CAAC,UAAU,MAAqB,KAAK,CAAC,CACpE,CACF;AACF;;;;;;;ACcA,MAAM,UAAU,cAAmC,IAAI;AAEvD,MAAM,qBAAqB,QAAsB;CAC/C,IAAI,OAAO,WAAW,aACpB,MAAM,IAAI,MAAM,6EAA6E;CAE/F,OAAO,SAAS,OAAO,GAAG;AAC5B;AAEA,MAAM,0BACJ,WACA,kBACuB;CACvB,IAAI,cAAc,QAAQ,kBAAkB,MAAM,OAAO;CACzD,OAAO,UAAU,kBAAkB,iBAAiB,UAAU,YAAY,MAAM,gBAC5E,YACA;AACN;AAEA,MAAM,sBAAsB,cAAsD;CAChF,MAAM,gBAAgB,cAAc,WAAW,iBAAiB,MAAM,CAAC,SAAS,CAAC;CACjF,MAAM,YAAY,aACf,WAAuB;EACtB,IAAI,kBAAkB,QAAQ,OAAO,qBAAqB,aAAa,aAAa,CAAC;EACrF,MAAM,WAAW,IAAI,iBAAiB,MAAM;EAC5C,SAAS,QAAQ,eAAe;GAAE,WAAW;GAAM,SAAS;EAAK,CAAC;EAClE,aAAa,SAAS,WAAW;CACnC,GACA,CAAC,aAAa,CAChB;CACA,MAAM,cAAc,kBACZ,uBAAuB,WAAW,aAAa,GACrD,CAAC,WAAW,aAAa,CAC3B;CACA,OAAO,qBAAqB,WAAW,aAAa,WAAW;AACjE;AAEA,SAAgBA,OAAK,EACnB,UACA,cAAc,WACd,OACA,QAAQ,CAAC,GACT,UACA,WAAW,mBACX,SACA,kBAAkB,MAClB,OACA,WACA,GAAG,SACS;CACZ,MAAM,UAAU,cAAc,KAAK,QAAQ,SAAS,GAAG,CAAC,SAAS,CAAC;CAClE,MAAM,aAAa,OAAO,OAAO;CACjC,sBAAsB;EACpB,WAAW,UAAU;CACvB,GAAG,CAAC,OAAO,CAAC;CACZ,MAAM,OAAO,aAAiC,UAAU;EACtD,IAAI;GACF,WAAW,UAAU,KAAK;EAC5B,QAAQ,CAER;CACF,GAAG,CAAC,CAAC;CACL,MAAM,aAAa,QAAQ,KAAK;CAChC,MAAM,0BAA0B,mBAAmB,eAAe;CAClE,MAAM,qBAAqB,eAClB,EAAE,SAAS,wBAAwB,IAC1C,CAAC,uBAAuB,CAC1B;CACA,MAAM,UAAU,QACd,OACA,OACA,EAAE,YAAY,GACd;EACE;EACA,qBAAqB;EACrB,uBAAuB;EACvB,OAAO;CACT,CACF;CACA,OACE,oBAAC,kBAAD,EAAA,UACE,oBAAC,QAAQ,UAAT;EACE,OAAO;GACL;GACA;GACA;GACA,UAAUC,MAAc,QAAQ;GAChC;GACA,iBAAiB;GACjB;GACA;EACF;EAEA,UAAA,oBAAC,eAAD;GAAe,GAAK,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,MAAM;GAAK,UAAA;EAAuB,CAAA;CACnE,CAAA,EACF,CAAA;AAEtB;AAEA,SAAgB,eAA6B;CAC3C,MAAM,QAAQ,WAAW,OAAO;CAChC,IAAI,UAAU,MACZ,MAAM,IAAI,MAAM,6DAA6D;CAC/E,OAAO;AACT;;;;ACjIA,MAAa,QAAQ,KAAK,WAAkB;;;;;;;;;;;;;;;ACnB5C,SAASC,WACP,gBACA,MACA;CACA,OAAO,SAAS,KAAK,OAAgD;EACnE,OAAO,QAAQ,gBAAgB,OAAO,CAAC,GAAG,EAAE,uBAAuB,KAAK,CAAC;CAC3E;AACF;AAEA,MAAa,OAAOA,WAAS,QAAQ,gBAAgB;AACrD,MAAa,OAAOA,WAAS,UAAU,gBAAgB;AACvD,MAAa,SAASA,WAAS,QAAQ,kBAAkB;AACzD,MAAa,OAAOA,WAAS,QAAQ,gBAAgB;AACrD,MAAaC,UAAQD,WAAS,QAAQ,iBAAiB;AACvD,MAAaE,aAAWF,WAAS,QAAQ,oBAAoB;AAC7D,MAAa,SAASA,WAAS,QAAQ,kBAAkB;AAMzD,SAAgB,KAAK,EAAE,WAAW,GAAG,SAAoB;CACvD,OAAO,QACL,MACA,OACA,EAAE,WAAW,UAAU,KAAK,GAC5B;EACE,UACE,qBAAA,UAAA,EAAA,UAAA;GACE,oBAAC,MAAD,EAAA,UAAO,UAAU,KAAW,CAAA;GAAC;GAAC,oBAAC,MAAD,EAAA,UAAO,UAAU,OAAO,KAAW,CAAA;GAAE;GACnE,qBAAC,QAAD,EAAA,UAAA;IACE,oBAAC,MAAD,EAAA,UAAO,UAAU,OAAO,KAAW,CAAA;IACnC,oBAACC,SAAD,EAAA,UAAQ,UAAU,OAAO,MAAa,CAAA;IACrC,UAAU,OAAO,aAAa,KAAA,IAAY,OACzC,qBAACC,YAAD,EAAA,UAAA,CAAU,aAAU,UAAU,OAAO,QAAmB,EAAA,CAAA;IAEzD,YAAY,YAAY,oBAAC,QAAD,EAAA,UAAS,UAAU,OAAe,CAAA,IAAI;GACzD,EAAA,CAAA;EACR,EAAA,CAAA;EAEJ,uBAAuB;EACvB,kBAAkB,UAAU;CAC9B,CACF;AACF;AAYA,SAAgBC,OAAK,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAoB;CAClE,OAAO,QACL,MACA,OACA;EAAE;EAAO;CAAU,GACnB;EACE,uBACE,cAAc,iBAAiB,oBAAoB;EACrD,kBAAkB;CACpB,CACF;AACF;AAMA,SAAgB,KAAK,EAAE,WAAW,YAAY,GAAG,SAAoB;CACnE,OACE,oBAACA,QAAD;EAAM,OAAO,WAAW;EAAmB;EAAW,GAAI;EACvD,UAAA,WAAW,KAAK,cACf,oBAAC,MAAD,EAAoC,UAAY,GAArC,UAAU,EAA2B,CACjD;CACG,CAAA;AAEV;;;;;;;;;;;;;ACtEA,MAAaC,UAAQ,KAAK,WAAuB;AAWjD,MAAaC,YAAU,KAAK,WAAoB;AAiBhD,SAAgBC,WACd,YACA,WACA,WACO;CACP,MAAM,EAAE,MAAM,YAAY,aAAa;CACvC,MAAM,eAAe,OAAO,SAAS;CACrC,aAAa,UAAU;CACvB,OAAO,cAAc;EACnB,MAAM,QAAQ,KAAK,KAAYF,QAAM,KAAK,CAAC;EAyD3C,OAAO;GAAE,SAxDO,QAAQ,GAAY,CAAC,EAAE,SAAS,QAAQ;IACtD,MAAM,UAAU,IAAI,KAAK;IACzB,IAAI,QAAQ,SAAS,WAAW;KAC9B,IAAI,QAAQ,SAAS,cAAc,QAAQ,SAAS,YAAY,OAAO,OAAO;KAC9E,IAAI,IAAI,OAAOA,QAAM,KAAK,CAAC;KAC3B,OAAO,OAAO;IAChB;IACA,IAAI,QAAQ,SAAS,QAAQ;KAC3B,IAAI,QAAQ,SAAS,cAAc,QAAQ,SAAS,YAAY,OAAO,OAAO;KAC9E,IAAI,IAAI,OAAOA,QAAM,SAAS,CAAC;KAC/B,OAAO,OAAO,QAAQ,UAAU,UAAU,cACxC,UAAU,QAAQ,KAAK;MACrB,cAAc,WAAW,WAAW;MACpC,QAAQ,WAAW,WAAW;MAC9B;KACF,CAAC,CACH,CAAC,CAAC,KACA,OAAO,KAAK,SAAS,OAAO,WAAW,IAAI,IAAI,OAAOA,QAAM,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAC9E,OAAO,OAAO,UAAU,OAAO,WAAW,IAAI,IAAI,OAAO,iBAAiB,KAAK,CAAC,CAAC,CAAC,GAClF,OAAO,MACT;IACF;IACA,IACE,QAAQ,SAAS,YACjB,QAAQ,KAAK,WAAW,MAAM,cAAc,UAAU,SAAS,SAAS,GAExE,OAAO,OAAO;IAChB,MAAM,OAAO,QAAQ;IACrB,IAAI,IAAI,OAAOA,QAAM,SAAS,EAAE,KAAK,CAAC,CAAC;IACvC,OAAO,OAAO,QAAQ,UAAU,UAAU,cACxC,UAAU,QAAQ,MAAM;KACtB,cAAc,WAAW,WAAW;KACpC,QAAQ,WAAW,WAAW;KAC9B,YAAY,KAAK;KACjB;IACF,CAAC,CACH,CAAC,CAAC,KACA,OAAO,KAAK,WACV,OAAO,WAAW;KAChB,IAAI,OAAO,SAAS,WAAW;MAC7B,IAAI,IAAI,OAAOA,QAAM,QAAQ,EAAE,OAAO,CAAC,CAAC;MACxC,aAAa,UAAU,MAAM;MAC7B,KAAKG,MAAe,eAAe;OAAE;OAAY;MAAO,CAAC,CAAC;KAC5D,OAAO,IAAI,OAAO,SAAS,WAAW;MACpC,IAAI,IAAI,OAAOH,QAAM,QAAQ,EAAE,OAAO,CAAC,CAAC;MACxC,aAAa,UAAU,MAAM;MAC7B,KAAKG,MAAe,wBAAwB;OAAE;OAAY;MAAO,CAAC,CAAC;KACrE,OACE,IAAI,IAAI,OAAO,MAAM;IAEzB,CAAC,CACH,GACA,OAAO,OAAO,UAAU,OAAO,WAAW,IAAI,IAAI,OAAO,iBAAiB,KAAK,CAAC,CAAC,CAAC,GAClF,OAAO,MACT;GACF,CACwB;GAAG;EAAM;CACnC,GAAG;EAAC,WAAW,WAAW;EAAQ,WAAW,WAAW;EAAI;EAAM;EAAW;CAAO,CAAC;AACvF;AAEA,SAAgBC,gBACd,YACA,WACA,WACY;CACZ,MAAM,QAAQF,WAAS,YAAY,WAAW,SAAS;CACvD,MAAM,QAAQ,aAAa,MAAM,KAAK;CACtC,MAAM,UAAU,WAAW,MAAM,OAAO;CAExC,OAAO;EACL,aAAa,QAAQD,UAAQ,MAAM,CAAC;EACpC,eAAe,QAAQA,UAAQ,QAAQ,CAAC;EACxC,YAAY,QAAQA,UAAQ,KAAK,CAAC;EAClC,aAAa,QAAQA,UAAQ,KAAK,CAAC;EACnC;CACF;AACF;AAMA,SAAgBI,OAAK,EAAE,QAAQ,GAAG,SAAoB;CACpD,OAAO,QACL,OACA,OACA,EAAE,OAAO,GACT;EAAE,uBAAuB;EAAgB,cAAc;CAAO,CAChE;AACF;AAEA,SAAgBC,UAAQ,EAAE,SAAoC;CAC5D,MAAM,EAAE,aAAa,aAAa;CAClC,IAAI,MAAM,SAAS,aAAa,MAAM,SAAS,aAAa,MAAM,SAAS,SACzE,OACE,oBAAC,KAAD;EAAG,uBAAoB;EAAe,aAAU;EAAS,MAAK;EAC3D,UAAA,MAAM,SAAS,YAAY,SAAS,iBAAiB,MAAM;CAC3D,CAAA;CAGP,OAAO;AACT;AASA,SAAgBC,SAAO,EAAE,YAAY,cAAc,sBAAsB,WAAwB;CAC/F,MAAM,EAAE,aAAa,UAAU,iBAAiB,eAAe,aAAa;CAC5E,MAAM,QAAQ,WAAW;CACzB,MAAM,UAAU,OAA0C,KAAA,CAAS;CACnE,IAAI,MAAM,SAAS,QAAQ,QAAQ,UAAU,KAAA;CAC7C,IAAI,MAAM,SAAS,YAAY,MAAM,SAAS,YAAY,QAAQ,UAAU,MAAM;CAClF,MAAM,OAAO,QAAQ;CACrB,MAAM,OAAO,MAAM,SAAS,cAAc,MAAM,SAAS;CACzD,MAAM,OAAO,MAAM,SAAS,UAAU,MAAM,SAAS;CACrD,OACE,qBAACC,YAAgB,MAAjB;EACE,eAAe,UAAU,iBAAiB;GACxC,IAAI,CAAC,YAAY,MAAM;IACrB,aAAa,OAAO;IACpB;GACF;GACA,IAAI,CAAC,UACH,WAAW,QAAQ;GAErB,eAAe,QAAQ;EACzB;EACsB;EAChB;EAZR,UAAA,CAcG,YAAY,OAAO,OAClB,oBAACA,YAAgB,SAAjB;GACE,uBAAoB;GACpB,UAAU,MAAM,SAAS;GACzB,eAAe,WAAW,KAAK;GAC/B,GAAK,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,QAAQ,QAAQ;GAEnD,UAAA,SAAS;EACa,CAAA,GAE3B,qBAACA,YAAgB,QAAjB;GAAwB,WAAW;GAAnC,UAAA,CACE,oBAACA,YAAgB,UAAjB;IACE,qBAAmB;IACnB,uBAAoB;IACpB,uBAAoB;IACpB,OAAO;GACR,CAAA,GACD,qBAACA,YAAgB,OAAjB;IACE,qBAAmB;IACnB,uBAAoB;IACpB,uBAAoB;IACpB,OAAO;IAJT,UAAA;KAME,qBAAC,OAAD;MAAK,uBAAoB;MAAzB,UAAA,CACE,qBAAC,OAAD;OAAK,uBAAoB;OAAzB,UAAA,CACE,oBAACA,YAAgB,OAAjB;QAAuB,uBAAoB;QACxC,UAAA,SAAS;OACW,CAAA,GACvB,oBAACA,YAAgB,aAAjB;QAA6B,uBAAoB;QAC9C,UAAA,SAAS;OACiB,CAAA,CAC1B;MACJ,CAAA,GAAA,OAAO,OACN,oBAACA,YAAgB,OAAjB;OAAuB,cAAY,SAAS;OAAO,uBAAoB;OAAe,UAAA;MAE/D,CAAA,CAEtB;;KACL,qBAAC,OAAD;MAAK,uBAAoB;MAAzB,UAAA,CACG,SAAS,KAAA,IACR,oBAAC,KAAD;OAAG,uBAAoB;OAAkB,MAAK;OAC3C,UAAA,SAAS;MACT,CAAA,IAEH,oBAACC,MAAD;OAAiB,WAAU;OAAU,YAAY,KAAK;MAAa,CAAA,GAErE,oBAACH,WAAD,EAAgB,MAAQ,CAAA,CACrB;;KACL,oBAAC,OAAD;MAAK,uBAAoB;MACtB,UAAA,OACC,oBAAC,UAAD;OAAQ,uBAAoB;OAAgB,UAAA;OAAS,MAAK;OACvD,UAAA,MAAM,SAAS,aAAa,SAAS,cAAc,SAAS;MACvD,CAAA,IACN,MAAM,SAAS,YAAY,SAAS,KAAA,IACtC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAACE,YAAgB,OAAjB;OAAuB,uBAAoB;OACxC,UAAA,SAAS;MACW,CAAA,GACvB,oBAAC,UAAD;OACE,uBAAoB;OACpB,UAAU,KAAK,WAAW,MAAM,cAAc,UAAU,SAAS,SAAS;OAC1E,eAAe,WAAW,MAAM;OAChC,MAAK;OAEJ,UAAA,SAAS;MACJ,CAAA,CACR,EAAA,CAAA,IAEF,qBAAA,UAAA,EAAA,UAAA,CACE,oBAACA,YAAgB,OAAjB;OAAuB,uBAAoB;OACxC,UAAA,SAAS;MACW,CAAA,GACvB,oBAAC,UAAD;OACE,uBAAoB;OACpB,eAAe,WAAW,MAAM;OAChC,MAAK;OAEJ,UAAA,SAAS;MACJ,CAAA,CACR,EAAA,CAAA;KAED,CAAA;IACgB;GACD,CAAA,CAAA;EACJ,CAAA,CAAA;;AAE1B;AASA,SAAgBE,OAAK,EAAE,YAAY,WAAW,WAAW,SAAS,GAAG,SAAoB;CACvF,MAAM,aAAaN,gBAAc,YAAY,WAAW,SAAS;CACjE,MAAM,QAAQ,WAAW;CACzB,OACE,oBAACC,QAAD;EAAM,QAAQ,MAAM;EAAM,GAAI;EAC5B,UAAA,oBAACE,UAAD;GAAoB;GAAY,GAAK,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,QAAQ;EAAK,CAAA;CAC7E,CAAA;AAEV;;;;ACrRA,MAAM,YAA8C;CAClD,eAAe;CACf,KAAK;CACL,UAAU;CACV,YAAY;CACZ,cAAc;CACd,UAAU;CACV,WAAW;CACX,SAAS;CACT,OAAO;CACP,SAAS;CACT,QAAQ;CACR,aAAa;CACb,gBAAgB;CAChB,WAAW;CACX,WAAW;CACX,OAAO;CACP,OAAO;CACP,WAAW;CACX,SAAS;CACT,SAAS;CACT,KAAK;CACL,KAAK;CACL,SAAS;CACT,SAAS;CACT,WAAW;CACX,aAAa;CACb,QAAQ;AACV;AAEA,MAAM,WAAW,eACf,WACG,KAAK,CAAC,CACN,YAAY,CAAC,CACb,QAAQ,eAAe,EAAE;AAE9B,MAAM,YAAY,eAA2C,UAAU,QAAQ,UAAU;AAEzF,MAAM,cAAc,aAClB,SAAS,KAAK,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,KAAK;AAElD,SAAS,YAAY,EAAE,YAAuD;CAC5E,MAAM,OAAO,SAAS,SAAS,EAAE;CACjC,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAC1C,IAAI,SAAS,KAAA,KAAa,QAAQ,OAAO,WAAW,QAAQ;CAC5D,OACE,oBAAC,OAAD;EACE,KAAI;EACJ,QAAQ;EACR,eAAe,UAAU,IAAI;EAC7B,gBAAe;EACf,KAAK,gCAAgC,KAAK;EAC1C,OAAO;CACR,CAAA;AAEL;AAEA,SAAgB,KAAK,EAAE,UAAU,GAAG,SAAoB;CACtD,MAAM,EAAE,UAAU,aAAa;CAC/B,MAAM,cAAc,MAAM,SAAS;CACnC,MAAM,UACJ,OAAO,gBAAgB,aACnB,YAAY,QAAQ,IACnB,eAAe,oBAAC,aAAD,EAAyC,SAAW,GAAlC,SAAS,EAAyB;CAC1E,OAAO,QACL,QACA,OACA,EAAE,YAAY,SAAS,GAAG,GAC1B;EACE,cAAc,SAAS;EACvB,UAAU;EACV,uBAAuB;EACvB,2BAA2B,QAAQ,SAAS,EAAE;EAC9C,MAAM;CACR,CACF;AACF;;;;;;;;;;;;;;;;;;;;;;;;;ACnEA,MAAaI,UAAQ,KAAK,WAAuB;AAKjD,MAAM,cAAc,MAAgC,UAClD,KAAK,cAAc,MAAM,aACzB,KAAK,gBAAgB,MAAM,eAC3B,KAAK,WAAW,MAAM,UACtB,KAAK,aAAa,MAAM;AAmB1B,MAAaC,YAAU,KAAK,WAAoB;AAOhD,SAAgBC,WAAS,QAAuB;CAC9C,MAAM,EAAE,MAAM,UAAU,YAAY,aAAa;CACjD,OAAO,cAAc;EACnB,MAAM,cAAc,KAAK,KAAwB,KAAA,CAAS;EAC1D,MAAM,UAAU,QAAQ,KACtB,OAAO,QAAQ,UAAU,UAAU,cAAc,UAAU,WAAW,QAAQ,EAAE,OAAO,CAAC,CAAC,CAC3F;EACA,MAAM,QAAQ,KAAK,MAAM,QAAe;GACtC,MAAM,SAAS,IAAI,WAAW;GAC9B,IAAI,WAAW,KAAA,GAAW,OAAO;GACjC,MAAM,aAAa,IAAI,OAAO;GAC9B,OAAO,YAAY,eAAe,YAAY;IAC5C,gBAAgB,kBAAkB,sBAAsB,2BAA2B;IACnF,SAAS;IACT,iBAAiBF,QAAM,QAAQ;IAC/B,YAAY,EAAE,YAAY;GAC5B,CAAC;EACH,CAAC;EA4GD,OAAO;GAAE,SA3GO,QAAQ,GAAY,CAAC,EAAE,OAAO,QAAQ;IACpD,IAAI,MAAM,SAAS,SAAS;KAC1B,IAAI,IAAI,aAAa,KAAA,CAAS;KAC9B,IAAI,QAAQ,OAAO;KACnB,OAAO,OAAO;IAChB;IACA,MAAM,WAAW,IAAI,KAAK;IAC1B,IAAI,MAAM,SAAS,UAAU;KAC3B,IAAI,SAAS,SAAS,aAAa,OAAO,OAAO;KACjD,IAAI,IAAI,aAAaA,QAAM,UAAU,EAAE,SAAS,CAAC,CAAC;KAClD,OAAO,OAAO,QAAQ,UAAU,UAAU,cACxC,OAAO,QACL,UAAU,WAAW,OAAO;MAC1B,cAAc,SAAS,WAAW;MAClC,aAAa;KACf,CAAC,IACA,WAAW;MACV,MAAM,WAAyB;OAC7B,MAAM;OACN,QAAQ,SAAS,WAAW;OAC5B,UAAU,SAAS;OACnB,qBAAqB,CAAC;MACxB;MACA,OAAO,OAAO,QACZ,OAAO,WAAW;OAChB,IAAI,IAAI,aAAa,QAAQ;OAC7B,KACEG,MAAe,eAAe;QAC5B,YAAY;QACZ;OACF,CAAC,CACH;MACF,CAAC,SAEC,UAAU,WAAW,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,KACvC,OAAO,YAAY,OAAO,QAAQ,QAAQ,CAAC,GAC3C,OAAO,KAAK,cAAc,OAAO,WAAW,IAAI,IAAI,aAAa,SAAS,CAAC,CAAC,CAC9E,CACJ;KACF,CACF,CACF,CAAC,CAAC,KACA,OAAO,OAAO,UAAU,OAAO,WAAW,IAAI,IAAI,aAAa,iBAAiB,KAAK,CAAC,CAAC,CAAC,GACxF,OAAO,MACT;IACF;IACA,IAAI,SAAS,SAAS,gBAAgB,OAAO,OAAO;IACpD,MAAM,YACJ,SACA,WAEA,QAAQ,KACN,OAAO,KAAK,WACV,OAAO,WAAW;KAChB,IAAI,OAAO,SAAS,YAAY;MAC9B,IAAI,IAAI,aAAaH,QAAM,YAAY,EAAE,SAAS,CAAC,CAAC;MACpD,SAAS,OAAO,gBAAgB;KAClC,OAAO;MACL,IAAI,IAAI,aAAa,MAAM;MAC3B,KACEG,MAAe,sBAAsB;OACnC,YAAY;OACZ;MACF,CAAC,CACH;KACF;IACF,CAAC,CACH,GACA,OAAO,OAAO,UAAU,OAAO,WAAW,IAAI,IAAI,aAAa,iBAAiB,KAAK,CAAC,CAAC,CAAC,GACxF,OAAO,MACT;IACF,IAAI,MAAM,SAAS,UAAU;KAC3B,MAAM,qBAAqB,SAAS,oBAAoB,MACrD,EAAE,iBAAiB,WAAW,OAAO,MAAM,YAC9C;KACA,IAAI,uBAAuB,KAAA,GAAW,OAAO,OAAO;KACpD,MAAM,SAAS,mBAAmB,QAAQ,MAAM,cAC9C,WAAW,WAAW,MAAM,MAAM,CACpC;KACA,IAAI,WAAW,KAAA,GAAW,OAAO,OAAO;KACxC,IAAI,IAAI,aAAaH,QAAM,WAAW,EAAE,SAAS,CAAC,CAAC;KACnD,OAAO,SACL,OAAO,QAAQ,UAAU,UAAU,cACjC,UAAU,WAAW,OAAO;MAC1B,cAAc,MAAM;MACpB;MACA;KACF,CAAC,CACH,GACA,QACF;IACF;IACA,IAAI,IAAI,aAAaA,QAAM,WAAW,EAAE,SAAS,CAAC,CAAC;IACnD,IAAI,MAAM,SAAS,WACjB,OAAO,SACL,OAAO,QAAQ,UAAU,UAAU,cACjC,UAAU,WAAW,QAAQ;KAC3B;KACA,QAAQ,MAAM;KACd,YAAY,SAAS,SAAS;IAChC,CAAC,CACH,GACA,SACF;IAEF,OAAO,OAAO;GAChB,CACe;GAAG;EAAM;CAC1B,GAAG;EAAC;EAAQ;EAAM;EAAU;CAAO,CAAC;AACtC;AAEA,SAAgBI,gBAAc,QAA4B;CACxD,MAAM,QAAQF,WAAS,MAAM;CAC7B,MAAM,QAAQ,aAAa,MAAM,KAAK;CACtC,MAAM,UAAU,WAAW,MAAM,OAAO;CAExC,OAAO;EACL,SAAS,YAAY,WACnB,QAAQD,UAAQ,OAAO;GAAE,cAAc,WAAW,WAAW;GAAI;EAAO,CAAC,CAAC;EAC5E,UAAU,WAAW,QAAQA,UAAQ,QAAQ,EAAE,OAAO,CAAC,CAAC;EACxD,cAAc,QAAQA,UAAQ,OAAO,CAAC;EACtC,aAAa,QAAQA,UAAQ,MAAM,CAAC;EACpC;CACF;AACF;AAUA,SAAgBI,OAAK,EAAE,UAAU,SAAS,WAAW,GAAG,SAAoB;CAC1E,OAAO,QACL,OACA,OACA,EAAE,OAAO,GACT;EACE;EACA,uBAAuB;CACzB,CACF;AACF;AAUA,SAAgBC,SAAO,EAAE,UAAU,OAAO,GAAG,SAAsB;CACjE,MAAM,EAAE,aAAa,aAAa;CAClC,MAAM,OACJ,MAAM,SAAS,YACX,SAAS,oBACT,MAAM,SAAS,cACb,SAAS,UAAU,MAAM,SAAS,IAAI,IACtC,MAAM,SAAS,cACb,SAAS,YACT,MAAM,SAAS,gBACb,SAAS,uBACT,MAAM,SAAS,YACb,MAAM,UACN,MAAM,SAAS,gBACb,SAAS,uBACT,MAAM,SAAS,eACb,SAAS,aACT,SAAS,kBAAkB,MAAM,SAAS,IAAI;CAChE,OAAO,QACL,OACA,OACA,EAAE,QAAQ,MAAM,KAAK,GACrB;EACE,UAAU,YAAY;EACtB,uBAAuB;EACvB,cAAc,MAAM;CACtB,CACF;AACF;AAcA,SAAgB,QAAQ,EAAE,UAAU,GAAG,SAAuB;CAC5D,OACE,oBAACC,OAAW,SAAZ;EAAoB,uBAAoB;EAAqB,GAAI;EAC9D;CACiB,CAAA;AAExB;AAEA,SAAgB,eAAe,EAAE,UAAU,UAAU,GAAG,SAA8B;CACpF,MAAM,EAAE,aAAa,aAAa;CAClC,OACE,oBAAC,SAAD;EAAS,GAAI;EAAO,yBAAsB;EACvC,UAAA,YACC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAACC,MAAD;GAAe,eAAY;GAAiB;EAAW,CAAA,GACtD,SAAS,gBAAgB,SAAS,IAAI,CACvC,EAAA,CAAA;CAEG,CAAA;AAEb;AAWA,SAAgB,YAAY,EAAE,YAAY,OAAO,GAAG,SAA2B;CAE7E,OAAO,QACL,UACA,OACA,EAAE,gBAAgB,QAAQ,GAC1B;EACE,UAAU;EACV,uBAAuB;EACvB,UARY,WAAW,MAAM,SAAS,gBAAgB,WAAW,MAAM,SAAS;EAShF,eAAe,WAAW,QAAQ,UAAU,OAAO,MAAM,CAAC;EAC1D,MAAM;CACR,CACF;AACF;AAOA,SAAgB,kBAAkB,EAAE,YAAY,OAAO,GAAG,SAAiC;CAEzF,OAAO,QACL,UACA,OACA,EAAE,gBAAgB,cAAc,GAChC;EACE,UAAU;EACV,uBAAuB;EACvB,UARY,WAAW,MAAM,SAAS,gBAAgB,WAAW,MAAM,SAAS;EAShF,eAAe,WAAW,QAAQ,UAAU,OAAO,YAAY,CAAC;EAChE,MAAM;CACR,CACF;AACF;AASA,SAAgB,aAAa,EAC3B,YACA,YACA,OACA,QACA,GAAG,SACiB;CAEpB,OAAO,QACL,UACA,OACA,EAAE,gBAAgB,SAAS,GAC3B;EACE,UAAU;EACV,uBAAuB;EACvB,UARY,WAAW,MAAM,SAAS,gBAAgB,WAAW,MAAM,SAAS;EAShF,eAAe,WAAW,OAAO,YAAY,MAAM;EACnD,MAAM;CACR,CACF;AACF;AAOA,SAAgB,YAAY,EAAE,YAAY,QAAQ,GAAG,SAA2B;CAC9E,MAAM,EAAE,aAAa,aAAa;CAClC,MAAM,UAAU,WAAW,MAAM,SAAS,gBAAgB,WAAW,MAAM,SAAS;CACpF,MAAM,CAAC,OAAO,YAAY,SAAS,EAAE;CACrC,MAAM,CAAC,YAAY,iBAAiB,SAA2C,CAAC,CAAC;CACjF,MAAM,UAAU,UAAsC;EACpD,MAAM,eAAe;EACrB,IAAI,MAAM,SAAS,GAAG;GACpB,MAAM,YAAY,OAAO,YACvB,OAAO,QAAQ,UAAU,CAAC,CAAC,QAAQ,GAAG,WAAW,MAAM,SAAS,CAAC,CACnE;GACA,WAAW,QACT,UAAU,OAAO,MAAM;IACrB;IACA,GAAI,OAAO,KAAK,SAAS,CAAC,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,YAAY,UAAU;GACzE,CAAC,CACH;EACF;CACF;CACA,MAAM,2BAA2B,OAAO,YAAY,MACjD,cAAc,UAAU,aAAa,QAAQ,CAAC,WAAW,UAAU,IACtE;CACA,OAAO,QACL,QACA,OACA,EAAE,gBAAgB,QAAQ,GAC1B;EACE,UACE,qBAAA,UAAA,EAAA,UAAA;GACG,OAAO,YAAY,KAAK,cACvB,qBAAC,SAAD,EAAA,UAAA;IACG,UAAU;IACX,oBAAC,SAAD;KACE,MAAM,UAAU;KAChB,UAAU;KACV,WAAW,UAAU;MACnB,MAAM,QAAQ,MAAM,cAAc;MAClC,eAAe,aAAa;OAC1B,GAAG;QACF,UAAU,MAAM;MACnB,EAAE;KACJ;KACA,aAAa,UAAU;KACvB,UAAU,UAAU;KACpB,MAAK;KACL,OAAO,WAAW,UAAU,QAAQ;IACrC,CAAA;IACA,UAAU,gBAAgB,KAAA,IAAY,OAAO,oBAAC,SAAD,EAAA,UAAQ,UAAU,YAAmB,CAAA;GAC9E,EAAA,GAlBK,UAAU,GAkBf,CACR;GACD,qBAAC,SAAD,EAAA,UAAA,CACG,SAAS,YACV,oBAAC,SAAD;IACE,cAAa;IACb,UAAU;IACV,MAAK;IACL,WAAW,UAAU,SAAS,MAAM,cAAc,KAAK;IACvD,aAAa,OAAO;IACpB,MAAK;IACL,OAAO;GACR,CAAA,CACI,EAAA,CAAA;GACP,oBAAC,UAAD;IACE,UAAU,WAAW,MAAM,WAAW,KAAK,6BAA6B;IACxE,MAAK;IAEJ,UAAA,OAAO;GACF,CAAA;EACR,EAAA,CAAA;EAEJ,uBAAuB;EACvB,UAAU;CACZ,CACF;AACF;AAOA,MAAa,eAAe,WAC1B,GAAG,OAAO,UAAU,eAAe,OAAO,UAAU,KAAK,OAAO;AAElE,SAAgBC,SAAO,EAAE,YAAY,YAAyB;CAC5D,MAAM,EAAE,aAAa,UAAU,iBAAiB,eAAe,aAAa;CAC5E,MAAM,UAAU,WAAW,MAAM,SAAS,gBAAgB,WAAW,MAAM,SAAS;CACpF,MAAM,qBAAqB,SAAS,SAAS,eAAe,QACzD,WACC,OAAO,SAAS,aACpB;CACA,MAAM,eAAe,SAAS,SAAS,eAAe,QACnD,WACC,OAAO,SAAS,OACpB;CACA,MAAM,eAAe,SAAS,SAAS,eAAe,QACnD,WACC,OAAO,SAAS,OACpB;CACA,MAAM,yBACJ,mBAAmB,SAAS,KAC5B,aAAa,SAAS,KACtB,SAAS,oBAAoB,SAAS;CACxC,OACE,qBAACF,OAAW,QAAZ;EAAmB,WAAW;EAA9B,UAAA,CACE,oBAACA,OAAW,UAAZ;GACE,qBAAmB;GACnB,uBAAoB;GACpB,uBAAoB;GACpB,OAAO;EACR,CAAA,GACD,qBAACA,OAAW,OAAZ;GACE,uBAAoB;GACpB,uBAAoB;GACpB,qBAAmB;GACnB,OAAO;GAJT,UAAA;IAME,qBAAC,OAAD;KAAK,uBAAoB;KAAzB,UAAA;MACE,oBAACC,MAAD,EAAe,UAAU,SAAS,SAAW,CAAA;MAC7C,qBAAC,OAAD;OAAK,uBAAoB;OAAzB,UAAA,CACE,oBAACD,OAAW,OAAZ;QAAkB,uBAAoB;QACnC,UAAA,SAAS,YAAY,SAAS,SAAS,IAAI;OAC5B,CAAA,GAClB,oBAACA,OAAW,aAAZ;QAAwB,uBAAoB;QACzC,UAAA,SAAS,kBAAkB,SAAS,MAAM;OACrB,CAAA,CACrB;;MACJ,UAAU,OACT,oBAACA,OAAW,OAAZ;OAAkB,cAAY,SAAS;OAAO,uBAAoB;OAAe,UAAA;MAE/D,CAAA;KAEjB;;IACL,qBAAC,OAAD;KAAK,uBAAoB;KAAzB,UAAA;MACG,yBACC,qBAAC,OAAD;OAAK,uBAAoB;OAAzB,UAAA;QACG,mBAAmB,KAAK,WACvB,oBAAC,mBAAD;SAA+B;SAA8B,OAAO,OAAO;QAAQ,GAAnC,OAAO,IAA4B,CACpF;QACA,aAAa,KAAK,WACjB,oBAAC,aAAD;SAAyB;SAA8B,OAAO,OAAO;QAAQ,GAAnC,OAAO,IAA4B,CAC9E;QACA,SAAS,oBAAoB,KAAK,eACjC,qBAAC,WAAD;SACE,sBAAoB,WAAW,WAAW;SAC1C,uBAAoB;SAFtB,UAAA,CAKE,qBAAC,OAAD;UAAK,uBAAoB;UAAzB,UAAA,CACE,oBAAC,UAAD,EAAA,UAAS,SAAS,mBAA2B,CAAA,GAC7C,oBAAC,QAAD,EAAA,UAAO,WAAW,WAAW,WAAiB,CAAA,CAC3C;SACL,CAAA,GAAA,oBAAC,OAAD;UACE,uBAAoB;UACpB,cACE,WAAW,QAAQ,WAAW,IAC1B,gBACA,WAAW,QAAQ,WAAW,IAC5B,WACA;UAGP,UAAA,WAAW,QAAQ,WAAW,IAC7B,oBAAC,KAAD;WAAG,uBAAoB;WAAsB,UAAA,SAAS;UAAqB,CAAA,IAE3E,WAAW,QAAQ,KAAK,WACtB,oBAAC,cAAD;WACc;WACA;WAEZ,OAAO,SAAS,aAAa,YAAY,MAAM,CAAC;WACxC;UACT,GAHM,GAAG,OAAO,UAAU,GAAG,OAAO,QAGpC,CACF;SAEA,CAAA,CACE;QA9BF,GAAA,WAAW,WAAW,EA8BpB,CACV;OACE;MACH,CAAA,IAAA;MACH,0BAA0B,aAAa,SAAS,IAC/C,oBAAC,OAAD;OACE,cAAY,SAAS;OACrB,uBAAoB;OACpB,MAAK;OAEL,UAAA,oBAAC,QAAD;QAAM,eAAY;QAAQ,UAAA,SAAS;OAAgC,CAAA;MAChE,CAAA,IACH;MACH,aAAa,KAAK,WACjB,oBAAC,aAAD;OAAyB;OAAsC;MAAS,GAA9B,OAAO,IAAuB,CACzE;KACE;;IACJ,UAAU,OACT,oBAAC,OAAD;KAAK,uBAAoB;KACvB,UAAA,oBAACA,OAAW,OAAZ;MAAkB,uBAAoB;MACnC,UAAA,SAAS;KACM,CAAA;IACf,CAAA;GAES;EACD,CAAA,CAAA;;AAEvB;AAMA,SAAgBG,OAAK,EAAE,QAAQ,GAAG,SAAoB;CACpD,MAAM,aAAaN,gBAAc,MAAM;CACvC,MAAM,QAAQ,WAAW;CACzB,MAAM,WACJ,MAAM,SAAS,iBACX,QACA,MAAM,SAAS,gBAAgB,MAAM,SAAS,gBAC5C,MAAM,WACN,KAAA;CACR,OACE,qBAACC,QAAD;EAAM,GAAI;EAAO,QAAQ,MAAM;EAA/B,UAAA;GACE,oBAACC,UAAD,EAAe,MAAQ,CAAA;GACtB,MAAM,SAAS,aAAa,MAAM,UAAU,UAC3C,oBAACK,eAAD;IACc;IACZ,MAAM,MAAM,UAAU,sBAAsB,sBAAsB;GACnE,CAAA,IACC;GACH,aAAa,KAAA,IAAY,OACxB,qBAACJ,OAAW,MAAZ;IACE,eAAe,MAAM,iBAAiB;KACpC,IAAI,CAAC,SAAS,MAAM,SAAS,gBAAgB,MAAM,SAAS,gBAC1D,aAAa,OAAO;IAExB;IALF,UAAA,CAOE,oBAAC,gBAAD,EAAgB,UAAU,SAAS,SAAW,CAAA,GAC9C,oBAACE,UAAD;KAAoB;KAAsB;IAAW,CAAA,CACtC;;EAEf;;AAEV;AAOA,SAAgBE,cAAY,EAAE,YAAY,OAAO,SAAS,GAAG,SAA2B;CACtF,MAAM,EAAE,aAAa,aAAa;CAClC,OAAO,QACL,UACA,OACA,EAAE,QAAQ,UAAU,GACpB;EACE,UAAU,SAAS,sBAAsB,SAAS,aAAa,SAAS;EACxE,uBAAuB;EACvB,SAAS,WAAW;EACpB,MAAM;CACR,CACF;AACF;AAMA,SAAgBC,OAAK,EAAE,QAAQ,GAAG,SAAoB;CACpD,OAAO,QACL,OACA,OACA,EAAE,OAAO,GACT;EAAE,uBAAuB;EAAkB,cAAc;CAAO,CAClE;AACF;AAMA,SAAgB,aAAa,EAAE,QAAQ,GAAG,SAA4B;CACpE,OAAO,QACL,OACA,OACA,EAAE,OAAO,GACT;EAAE,uBAAuB;EAAsB,cAAc;CAAO,CACtE;AACF;AAMA,SAAgB,YAAY,EAAE,QAAQ,GAAG,SAA2B;CAClE,OAAO,QACL,OACA,OACA,EAAE,OAAO,GACT;EAAE,uBAAuB;EAAqB,cAAc;CAAO,CACrE;AACF;AAUA,SAAgB,iBAAiB,EAC/B,YACA,YACA,cACA,MAAM,UACN,WACwB;CACxB,MAAM,EAAE,aAAa,UAAU,iBAAiB,eAAe,aAAa;CAC5E,MAAM,CAAC,cAAc,mBAAmB,SAAS,KAAK;CACtD,MAAM,OAAO,YAAY;CACzB,MAAM,WAAW,aAAsB;EACrC,IAAI,aAAa,KAAA,GAAW,gBAAgB,QAAQ;EACpD,eAAe,QAAQ;CACzB;CACA,MAAM,YAAY,WAAW,MAAM,SAAS;CAC5C,OACE,qBAACC,YAAgB,MAAjB;EACE,eAAe,UAAU,iBAAiB;GACxC,IAAI,CAAC,YAAY,WAAW;IAC1B,aAAa,OAAO;IACpB;GACF;GACA,QAAQ,QAAQ;EAClB;EACM;EARR,UAAA,CAUG,YAAY,OAAO,OAClB,oBAACA,YAAgB,SAAjB;GACE,uBAAoB;GACpB,GAAK,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,QAAQ,QAAQ;GAEnD,UAAA,SAAS;EACa,CAAA,GAE3B,qBAACA,YAAgB,QAAjB;GAAwB,WAAW;GAAnC,UAAA,CACE,oBAACA,YAAgB,UAAjB;IACE,qBAAmB;IACnB,uBAAoB;IACpB,uBAAoB;IACpB,OAAO;GACR,CAAA,GACD,qBAACA,YAAgB,OAAjB;IACE,qBAAmB;IACnB,uBAAoB;IACpB,uBAAoB;IACpB,OAAO;IAJT,UAAA,CAME,qBAAC,OAAD;KAAK,uBAAoB;KAAzB,UAAA,CACE,qBAAC,OAAD;MAAK,uBAAoB;MAAzB,UAAA,CACE,oBAACA,YAAgB,OAAjB;OAAuB,uBAAoB;OACxC,UAAA,SAAS,gBAAgB,WAAW,SAAS,IAAI;MAC7B,CAAA,GACvB,oBAACA,YAAgB,aAAjB;OAA6B,uBAAoB;OAC9C,UAAA,SAAS;MACiB,CAAA,CAC1B;KACJ,CAAA,GAAA,YAAY,OACX,oBAACA,YAAgB,OAAjB;MAAuB,cAAY,SAAS;MAAO,uBAAoB;MAAe,UAAA;KAE/D,CAAA,CAEtB;IACL,CAAA,GAAA,qBAAC,OAAD;KAAK,uBAAoB;KAAzB,UAAA,CACG,YAAY,OACX,oBAACA,YAAgB,OAAjB;MAAuB,uBAAoB;MACxC,UAAA,SAAS;KACW,CAAA,GAEzB,oBAAC,UAAD;MACE,uBAAoB;MACpB,UAAU;MACV,eAAe,WAAW,OAAO;MACjC,MAAK;MAEJ,UAAA,YAAY,SAAS,YAAY,SAAS;KACrC,CAAA,CACL;IACgB,CAAA,CAAA;GACD,CAAA,CAAA;EACJ,CAAA,CAAA;;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7vBA,MAAa,YAAY,UAAoC;CAC3D,IAAI,OAAO,cAAc,eAAe,UAAU,cAAc,KAAA,GAC9D,OAAO,QAAQ,QAAQ,KAAK;CAE9B,OAAO,UAAU,UAAU,UAAU,KAAK,CAAC,CAAC,WACpC,YACA,KACR;AACF;AAEA,MAAM,gBAAgB,UAAkB,aAA2B;CACjE,IAAI,OAAO,aAAa,aAAa;CACrC,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,GAAG,EAAE,MAAM,2BAA2B,CAAC;CACtE,MAAM,MAAM,IAAI,gBAAgB,IAAI;CACpC,MAAM,SAAS,SAAS,cAAc,GAAG;CACzC,OAAO,WAAW;CAClB,OAAO,OAAO;CACd,SAAS,KAAK,OAAO,MAAM;CAC3B,OAAO,MAAM;CACb,OAAO,OAAO;CACd,IAAI,gBAAgB,GAAG;AACzB;AAEA,MAAM,sBAAsB,UAA2B,MAAM,SAAS,GAAG,IAAI,QAAQ,GAAG,MAAM;AAE9F,MAAM,cAAc,IAAI,YAAY;AAEpC,MAAM,sBAAsB,cAA8B;CACxD,IAAI,cAAc,QAAO,cAAc,MAAM,OAAO,KAAK;CACzD,MAAM,YAAY,UAAU,YAAY,CAAC;CACzC,IAAI,cAAc,KAAA,MAAc,YAAY,MAAM,cAAc,MAC9D,OAAO,KAAK,UAAU,SAAS,CAAC,CAAC,SAAS,GAAG,GAAG;CAElD,OAAO;AACT;AAEA,MAAM,YAAY,UAA0B;CAC1C,MAAM,SAAwB,CAAC;CAC/B,IAAI,QAAQ;CACZ,IAAI,aAAa;CACjB,KAAK,MAAM,aAAa,OAAO;EAC7B,MAAM,sBAAsB,YAAY,OAAO,SAAS,CAAC,CAAC;EAC1D,IAAI,aAAa,sBAAsB,KAAK;GAC1C,OAAO,KAAK,KAAK;GACjB,QAAQ;GACR,aAAa;EACf;EACA,SAAS,mBAAmB,SAAS;EACrC,cAAc;CAChB;CACA,OAAO,KAAK,KAAK;CACjB,OAAO,OAAO,KAAK,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG;AACnD;AAEA,MAAM,YAAY,UAA0B;CAC1C,MAAM,SAAS,MAAM,KAAK,CAAC,CAAC,MAAM,KAAK;CACvC,IAAI,OAAO,WAAW,GAAG,MAAM,IAAI,MAAM,sBAAsB,OAAO;CACtE,MAAM,CAAC,QAAQ,MAAM,UAAU;CAC/B,IAAI,WAAW,KAAA,KAAa,SAAS,KAAA,KAAa,WAAW,KAAA,GAC3D,MAAM,IAAI,MAAM,sBAAsB,OAAO;CAE/C,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,mBAAmB,MAAM;AACvD;AAEA,MAAM,aAAa,WAAwC;CACzD,QAAQ,OAAO,KAAK,YAAY,GAAhC;EACE,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,OACH,OAAO,mBAAmB,OAAO,KAAK;EACxC,KAAK,OACH,OAAO,SAAS,OAAO,KAAK;EAC9B,KAAK,OACH,OAAO,SAAS,OAAO,KAAK;EAC9B,SACE,OAAO,OAAO;CAClB;AACF;AAIA,SAAS,SACP,gBACA,MACA;CACA,OAAO,SAAS,KAAK,OAAgD;EACnE,OAAO,QAAQ,gBAAgB,OAAO,CAAC,GAAG,EAAE,uBAAuB,KAAK,CAAC;CAC3E;AACF;AAOA,SAAgB,QAAQ,OAAe,aAAa,KAAsB;CACxE,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAC1C,MAAM,QAAQ,OAAsC,KAAA,CAAS;CAC7D,sBAAsB,aAAa,MAAM,OAAO,GAAG,CAAC,CAAC;CACrD,OAAO;EACL;EACA,YAAY;GACV,SAAc,KAAK,CAAC,CAAC,MAAM,OAAO;IAChC,IAAI,CAAC,IAAI;IACT,UAAU,IAAI;IACd,aAAa,MAAM,OAAO;IAC1B,MAAM,UAAU,iBAAiB,UAAU,KAAK,GAAG,UAAU;GAC/D,CAAC;EACH;CACF;AACF;AAUA,SAAgB,UAAU,EACxB,YACA,cAAc,UACd,UACA,YAAY,QACZ,OACA,GAAG,SACc;CACjB,MAAM,QAAQ,SAAS;CACvB,MAAM,aAAa,QAAQ,KAAK;CAChC,MAAM,SAAS,WAAW;CAC1B,OAAO,QACL,QACA,OACA,EAAE,OAAO,GACT;EACE,UACE,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD,EAAA,UAAO,MAAY,CAAA,GACnB,qBAAC,UAAD;GACE,cAAY,GAAG,SAAS,cAAc,UAAU,GAAG;GACnD,uBAAoB;GACpB,SAAS,WAAW;GACpB,MAAK;GAJP,UAAA,CAME,oBAAC,QAAD;IACE,eAAY;IACZ,uBAAoB;IACpB,aAAU;IACV,cAAW;IAEV,UAAA,YAAY,MAAM;GACf,CAAA,GACN,oBAAC,QAAD;IACE,eAAY;IACZ,uBAAoB;IACpB,aAAU;IACV,cAAW;IAEV,UAAA,cAAc,MAAM;GACjB,CAAA,CACA;EACR,CAAA,CAAA,EAAA,CAAA;EAEJ,eAAe,SAAS,KAAK,KAAA;EAC7B,uBAAuB;CACzB,CACF;AACF;AAaA,SAAgB,SAAS,EACvB,YACA,cAAc,UACd,UACA,YAAY,aACZ,QACA,cACA,gBAAgB,YAChB,SACA,GAAG,SACa;CAChB,MAAM,QAAQ,SAAS;CAEvB,MAAM,aAAa,QADN,WAAW,OACM,CAAC;CAC/B,MAAM,SAAS,WAAW;CAC1B,OAAO,QACL,OACA,OACA,EAAE,OAAO,QAAQ,OAAO,GACxB;EACE,UACE,qBAAA,UAAA,EAAA,UAAA,CACE,qBAAC,UAAD;GACE,cAAY,SAAS,cAAc;GACnC,uBAAoB;GACpB,SAAS,WAAW;GACpB,MAAK;GAJP,UAAA,CAME,oBAAC,QAAD;IAAM,eAAY;IAAO,aAAU;IAChC,UAAA,SAAU,cAAc,MAAM,SAAW,YAAY,MAAM;GACxD,CAAA,GACL,SAAS,cAAc,SAClB;EACR,CAAA,GAAA,qBAAC,UAAD;GACE,cAAY;GACZ,uBAAoB;GACpB,eAAe,iBAAiB,QAAQ,OAAO;GAC/C,MAAK;GAJP,UAAA,CAME,oBAAC,QAAD;IAAM,eAAY;IAAO,aAAU;IAChC,UAAA,gBAAgB,MAAM;GACnB,CAAA,GACL,aACK;EACR,CAAA,CAAA,EAAA,CAAA;EAEJ,uBAAuB;CACzB,CACF;AACF;AASA,SAAgBC,SAAO,EAAE,UAAU,GAAG,SAAsB;CAC1D,OAAO,QACL,QACA,OACA,EAAE,QAAQ,SAAS,KAAK,GACxB;EACE,UAAU,SAAS;EACnB,uBAAuB;EACvB,eAAe,SAAS;CAC1B,CACF;AACF;AAMA,SAAgB,SAAS,EAAE,UAAU,WAAW,GAAG,GAAG,SAAwB;CAC5E,OAAO,QACL,QACA,OACA,EAAE,SAAS,GACX;EACE,UAAU,YAAY,YAAY;EAClC,uBAAuB;CACzB,CACF;AACF;AAEA,MAAa,SAAS,SAAS,SAAS,gBAAgB;AACxD,MAAa,OAAO,SAAS,SAAS,cAAc;AACpD,MAAa,SAAS,SAAS,SAAS,gBAAgB;AACxD,MAAa,MAAM,SAAS,MAAM,aAAa;AAC/C,MAAa,OAAO,SAAS,MAAM,cAAc;AACjD,MAAa,OAAO,SAAS,MAAM,cAAc;AACjD,MAAa,UAAU,SAAS,WAAW,iBAAiB;AAC5D,MAAa,QAAQ,SAAS,QAAQ,cAAc;AACpD,MAAa,aAAa,SAAS,OAAO,kBAAkB;AAC5D,MAAa,YAAY,SAAS,UAAU,mBAAmB;AAC/D,MAAa,cAAc,SAAS,MAAM,qBAAqB;AAM/D,SAAgBC,OAAK,EAAE,QAAQ,GAAG,GAAG,SAAoB;CACvD,OACE,oBAAC,OAAD;EAAK,uBAAoB;EACtB,UAAA,QAAQ,SAAS,OAAO,EAAE,MAAM,GAAG,EAAE,uBAAuB,gBAAgB,CAAC;CAC3E,CAAA;AAET;AASA,SAAgB,KAAK,EAAE,YAAY,UAAU,UAAU,QAAQ,GAAG,SAAoB;CACpF,MAAM,WACJ,aAAa,KAAA,IAAY,CAAC,IAAI,SAAS,QAAQ,SAAS,KAAK,aAAa,OAAO,EAAE;CACrF,OAAO,QACL,WACA,OACA,EAAE,UAAU,OAAO,GAAG,GACtB;EACE,UACE,qBAAA,UAAA,EAAA,UAAA,CACE,qBAAC,YAAD,EAAA,UAAA,CACE,oBAAC,WAAD,EAAA,UAAY,OAAO,KAAgB,CAAA,GAClC,SAAS,KAAK,MAAM,UACnB,oBAACD,UAAD,EAAQ,UAAU,KAAqC,GAA1B,GAAG,KAAK,KAAK,GAAG,OAAU,CACxD,CACS,EAAA,CAAA,GACZ,qBAAC,aAAD,EAAA,UAAA,CACE,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,MAAD,EAAA,UAAI,OAAQ,CAAA,GACZ,oBAAC,MAAD,EAAA,UACE,oBAAC,WAAD;GAAuB;GAAsB;GAAU,OAAO,OAAO;EAAO,CAAA,EAC1E,CAAA,CACD,EAAA,CAAA,GACL,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,MAAD,EAAA,UAAI,QAAS,CAAA,GACb,qBAAC,MAAD,EAAA,UAAA,CACE,oBAAC,WAAD;GAAuB;GAAsB;GAAU,OAAO,OAAO;EAAQ,CAAA,GAC5E,OAAO,aAAa,KAAA,IAAY,OAAO,oBAAC,UAAD,EAAU,UAAU,OAAO,SAAW,CAAA,CAC5E,EAAA,CAAA,CACD,EAAA,CAAA,CACM,EAAA,CAAA,CACb,EAAA,CAAA;EAEJ,uBAAuB;CACzB,CACF;AACF;AASA,SAAgB,MAAM,EAAE,YAAY,UAAU,UAAU,SAAS,GAAG,SAAqB;CACvF,MAAM,SAAS,aAAa,KAAA;CAC5B,OACE,qBAACC,QAAD;EAAM,OAAO,QAAQ;EAAQ,GAAI;EAAjC,UAAA,CACE,oBAAC,QAAD,EAAA,UACE,qBAAC,KAAD,EAAA,UAAA;GACE,oBAAC,MAAD;IAAM,OAAM;IAAM,UAAA;GAAU,CAAA;GAC5B,oBAAC,MAAD;IAAM,OAAM;IAAM,UAAA;GAAU,CAAA;GAC5B,oBAAC,MAAD;IAAM,OAAM;IAAM,UAAA;GAAW,CAAA;GAC5B,SACC,oBAAC,MAAD;IAAM,eAAY;IAAS,OAAM;IAAM,UAAA;GAEjC,CAAA,IACJ;EACD,EAAA,CAAA,EACC,CAAA,GACR,oBAAC,MAAD,EAAA,UACG,QAAQ,KAAK,WACZ,qBAAC,KAAD,EAAA,UAAA;GACE,oBAAC,MAAD,EAAA,UAAO,OAAO,KAAW,CAAA;GACzB,oBAAC,MAAD,EAAA,UACE,oBAAC,WAAD;IAAuB;IAAsB;IAAU,OAAO,OAAO;GAAO,CAAA,EACxE,CAAA;GACN,oBAAC,MAAD,EAAA,UACE,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,WAAD;IAAuB;IAAsB;IAAU,OAAO,OAAO;GAAQ,CAAA,GAC5E,OAAO,aAAa,KAAA,IAAY,OAAO,oBAAC,UAAD,EAAU,UAAU,OAAO,SAAW,CAAA,CACzE,EAAA,CAAA,EACH,CAAA;GACL,SACC,oBAAC,MAAD;IAAM,eAAY;IACf,UAAA,SACE,QAAQ,SAAS,KAAK,aAAa,OAAO,EAAE,CAAC,CAC7C,KAAK,MAAM,UACV,oBAACD,UAAD,EAAQ,UAAU,KAAqC,GAA1B,GAAG,KAAK,KAAK,GAAG,OAAU,CACxD;GACC,CAAA,IACJ;EACD,EAAA,GApBK,OAAO,EAoBZ,CACN,EACG,CAAA,CACF;;AAEV;AAEA,MAAa,cAAc,YACzB,GAAG,QACA,KACE,WACC,GAAG,mBAAmB,OAAO,IAAI,EAAE,MAAM,OAAO,KAAK,GAAG,OAAO,aAAa,KAAA,IAAY,KAAK,GAAG,OAAO,SAAS,KAAK,UAAU,MAAM,GACzI,CAAC,CACA,KAAK,IAAI,EAAE;AAEhB,MAAa,oBACX,QACA,YACS,aAAa,GAAG,OAAO,OAAO,WAAW,OAAO,CAAC;;;;;;;;;;;;;;AChY5D,MAAaE,UAAQ,KAAK,WAAuB;AAmBjD,MAAaC,YAAU,KAAK,WAAoB;AAOhD,SAAgBC,WACd,YACA,SACA,WAGO;CACP,MAAM,EAAE,MAAM,YAAY,aAAa;CACvC,MAAM,YAAY,gBAAgB,OAAO;CACzC,MAAM,eAAe,OAAO,SAAS;CACrC,aAAa,UAAU;CACvB,OAAO,cAAc;EACnB,MAAM,QAAQ,KAAK,KAAYF,QAAM,KAAK,CAAC;EAwD3C,OAAO;GAAE,SAvDO,QAAQ,GAAY,CAAC,EAAE,SAAS,QAAQ;IACtD,MAAM,UAAU,IAAI,KAAK;IACzB,IAAI,QAAQ,SAAS,WAAW;KAC9B,IAAI,QAAQ,SAAS,cAAc,QAAQ,SAAS,YAAY,OAAO,OAAO;KAC9E,IAAI,IAAI,OAAOA,QAAM,KAAK,CAAC;KAC3B,OAAO,OAAO;IAChB;IACA,IAAI,QAAQ,SAAS,QAAQ;KAC3B,IAAI,QAAQ,SAAS,cAAc,QAAQ,SAAS,YAAY,OAAO,OAAO;KAC9E,IAAI,IAAI,OAAOA,QAAM,SAAS,CAAC;KAC/B,OAAO,OAAO,QAAQ,UAAU,UAAU,cACxC,UAAU,aAAa,KAAK;MAC1B,cAAc,WAAW,WAAW;MACpC,QAAQ,WAAW,WAAW;MAC9B;KACF,CAAC,CACH,CAAC,CAAC,KACA,OAAO,KAAK,SAAS,OAAO,WAAW,IAAI,IAAI,OAAOA,QAAM,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAC9E,OAAO,OAAO,UAAU,OAAO,WAAW,IAAI,IAAI,OAAO,iBAAiB,KAAK,CAAC,CAAC,CAAC,GAClF,OAAO,MACT;IACF;IACA,IACE,QAAQ,SAAS,YACjB,QAAQ,KAAK,WAAW,MAAM,cAAc,UAAU,SAAS,UAAU,GAEzE,OAAO,OAAO;IAChB,MAAM,OAAO,QAAQ;IACrB,IAAI,IAAI,OAAOA,QAAM,SAAS,EAAE,KAAK,CAAC,CAAC;IACvC,OAAO,OAAO,QAAQ,UAAU,UAAU,cACxC,UAAU,aAAa,MAAM;KAC3B,cAAc,WAAW,WAAW;KACpC,QAAQ,WAAW,WAAW;KAC9B,YAAY,KAAK;IACnB,CAAC,CACH,CAAC,CAAC,KACA,OAAO,KAAK,WACV,OAAO,WAAW;KAChB,IAAI,OAAO,SAAS,WAAW;MAC7B,IAAI,IAAI,OAAOA,QAAM,SAAS,EAAE,OAAO,CAAC,CAAC;MACzC,KAAKG,MAAe,eAAe;OAAE;OAAY;MAAO,CAAC,CAAC;MAC1D,aAAa,UAAU,MAAM;KAC/B,OAAO,IAAI,OAAO,SAAS,WAAW;MACpC,IAAI,IAAI,OAAOH,QAAM,QAAQ,EAAE,OAAO,CAAC,CAAC;MACxC,KAAKG,MAAe,wBAAwB;OAAE;OAAY;MAAO,CAAC,CAAC;MACnE,aAAa,UAAU,MAAM;KAC/B,OACE,IAAI,IAAI,OAAO,MAAM;IAEzB,CAAC,CACH,GACA,OAAO,OAAO,UAAU,OAAO,WAAW,IAAI,IAAI,OAAO,iBAAiB,KAAK,CAAC,CAAC,CAAC,GAClF,OAAO,MACT;GACF,CACwB;GAAG;EAAM;CACnC,GAAG;EAAC,WAAW,WAAW;EAAQ,WAAW,WAAW;EAAI;EAAM;EAAW;CAAO,CAAC;AACvF;AAEA,SAAgBC,gBACd,YACA,SACA,WAGY;CACZ,MAAM,QAAQF,WAAS,YAAY,SAAS,SAAS;CACrD,MAAM,QAAQ,aAAa,MAAM,KAAK;CACtC,MAAM,UAAU,WAAW,MAAM,OAAO;CAExC,OAAO;EACL,aAAa,QAAQD,UAAQ,MAAM,CAAC;EACpC,eAAe,QAAQA,UAAQ,QAAQ,CAAC;EACxC,YAAY,QAAQA,UAAQ,KAAK,CAAC;EAClC,aAAa,QAAQA,UAAQ,KAAK,CAAC;EACnC;CACF;AACF;AAMA,SAAgBI,OAAK,EAAE,QAAQ,GAAG,SAAoB;CACpD,OAAO,QACL,OACA,OACA,EAAE,OAAO,GACT;EAAE,uBAAuB;EAAqB,cAAc;CAAO,CACrE;AACF;AAEA,SAAgBC,UAAQ,EAAE,SAAoC;CAC5D,MAAM,EAAE,aAAa,aAAa;CAClC,IAAI,MAAM,SAAS,aAAa,MAAM,SAAS,aAAa,MAAM,SAAS,SACzE,OACE,oBAAC,KAAD;EAAG,uBAAoB;EAAe,aAAU;EAAS,MAAK;EAC3D,UAAA,MAAM,SAAS,YAAY,SAAS,0BAA0B,MAAM;CACpE,CAAA;CAGP,OAAO;AACT;AAOA,SAAgBC,SAAO,EAAE,YAAY,WAAwB;CAC3D,MAAM,EAAE,aAAa,UAAU,iBAAiB,eAAe,aAAa;CAC5E,MAAM,QAAQ,WAAW;CACzB,MAAM,UAAU,OAA+C,KAAA,CAAS;CACxE,IAAI,MAAM,SAAS,QAAQ,QAAQ,UAAU,KAAA;CAC7C,IAAI,MAAM,SAAS,YAAY,MAAM,SAAS,YAAY,QAAQ,UAAU,MAAM;CAClF,MAAM,OAAO,QAAQ;CACrB,MAAM,OAAO,MAAM,SAAS,cAAc,MAAM,SAAS;CACzD,MAAM,OAAO,MAAM,SAAS,UAAU,MAAM,SAAS;CACrD,OACE,qBAACC,OAAW,MAAZ;EACE,eAAe,UAAU,iBAAiB;GACxC,IAAI,CAAC,YAAY,MAAM;IACrB,aAAa,OAAO;IACpB;GACF;GACA,IAAI,CAAC,UAAU,WAAW,QAAQ;EACpC;EACM;EARR,UAAA,CAUE,oBAACA,OAAW,SAAZ;GACE,uBAAoB;GACpB,UAAU,MAAM,SAAS;GACzB,eAAe,WAAW,KAAK;GAC/B,GAAK,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,QAAQ,QAAQ;GAEnD,UAAA,SAAS;EACQ,CAAA,GACpB,qBAACA,OAAW,QAAZ;GAAmB,WAAW;GAA9B,UAAA,CACE,oBAACA,OAAW,UAAZ;IACE,qBAAmB;IACnB,uBAAoB;IACpB,uBAAoB;IACpB,OAAO;GACR,CAAA,GACD,qBAACA,OAAW,OAAZ;IACE,qBAAmB;IACnB,uBAAoB;IACpB,uBAAoB;IACpB,OAAO;IAJT,UAAA;KAME,qBAAC,OAAD;MAAK,uBAAoB;MAAzB,UAAA,CACE,qBAAC,OAAD;OAAK,uBAAoB;OAAzB,UAAA,CACE,oBAACA,OAAW,OAAZ;QAAkB,uBAAoB;QACnC,UAAA,SAAS;OACM,CAAA,GAClB,oBAACA,OAAW,aAAZ;QAAwB,uBAAoB;QACzC,UAAA,SAAS;OACY,CAAA,CACrB;MACJ,CAAA,GAAA,OAAO,OACN,oBAACA,OAAW,OAAZ;OAAkB,cAAY,SAAS;OAAO,uBAAoB;OAAe,UAAA;MAE/D,CAAA,CAEjB;;KACL,qBAAC,OAAD;MAAK,uBAAoB;MAAzB,UAAA,CACG,SAAS,KAAA,IACR,oBAAC,KAAD;OAAG,uBAAoB;OAAkB,MAAK;OAC3C,UAAA,SAAS;MACT,CAAA,IAEH,oBAACC,MAAD;OAAiB,WAAU;OAAe,YAAY,KAAK;MAAa,CAAA,GAE1E,oBAACH,WAAD,EAAgB,MAAQ,CAAA,CACrB;;KACL,oBAAC,OAAD;MAAK,uBAAoB;MACtB,UAAA,OACC,oBAAC,UAAD;OAAQ,uBAAoB;OAAa,UAAA;OAAS,MAAK;OACpD,UAAA,MAAM,SAAS,aAAa,SAAS,cAAc,SAAS;MACvD,CAAA,IACN,MAAM,SAAS,YAAY,SAAS,KAAA,IACtC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAACE,OAAW,OAAZ;OAAkB,uBAAoB;OACnC,UAAA,SAAS;MACM,CAAA,GAClB,oBAAC,UAAD;OACE,uBAAoB;OACpB,UAAU,KAAK,WAAW,MAAM,cAAc,UAAU,SAAS,UAAU;OAC3E,eAAe,WAAW,MAAM;OAChC,MAAK;OAEJ,UAAA,SAAS;MACJ,CAAA,CACR,EAAA,CAAA,IAEF,qBAAA,UAAA,EAAA,UAAA,CACE,oBAACA,OAAW,OAAZ;OAAkB,uBAAoB;OACnC,UAAA,SAAS;MACM,CAAA,GAClB,oBAAC,UAAD;OACE,uBAAoB;OACpB,eAAe,WAAW,MAAM;OAChC,MAAK;OAEJ,UAAA,SAAS;MACJ,CAAA,CACR,EAAA,CAAA;KAED,CAAA;IACW;GACD,CAAA,CAAA;EACJ,CAAA,CAAA;;AAErB;AAEA,SAAgB,YAAY,EAAE,cAAmD;CAC/E,MAAM,EAAE,aAAa,aAAa;CAClC,MAAM,QAAQ,WAAW;CACzB,IAAI,MAAM,SAAS,aAAa,MAAM,SAAS,WAAW,MAAM,SAAS,WAAW,OAAO;CAC3F,OACE,oBAAC,UAAD;EACE,uBAAoB;EACpB,eAAe,WAAW,MAAM;EAChC,MAAK;EAEJ,UAAA,SAAS;CACJ,CAAA;AAEZ;AAYA,SAAgBE,OAAK,EACnB,YACA,WACA,SACA,cAAc,MACd,SACA,GAAG,SACS;CACZ,MAAM,aAAaN,gBAAc,YAAY,SAAS,SAAS;CAC/D,MAAM,QAAQ,WAAW;CACzB,OACE,qBAACC,QAAD;EAAM,QAAQ,MAAM;EAAM,GAAI;EAA9B,UAAA,CACG,cAAc,oBAACM,OAAD,EAAwB,QAAU,CAAA,IAAI,MACrD,oBAACJ,UAAD;GAAoB;GAAY,GAAK,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,QAAQ;EAAK,CAAA,CAC7E;;AAEV;;;;;;;;;;;;;;AC5SA,MAAa,QAAQ,KAAK,WAAuB;AAiBjD,MAAa,UAAU,KAAK,WAAoB;AAahD,SAAgB,SAAS,QAA8B;CACrD,MAAM,EAAE,YAAY,aAAa;CACjC,MAAM,WAAW,OAAO,SAAS,YAAY,OAAO,eAAe,KAAA;CACnE,MAAM,YAAY,OAAO,SAAS,aAAa;CAC/C,MAAM,YAAY,gBAAgB,OAAO,OAAO;CAChD,OAAO,cAAc;EACnB,MAAM,QAAQ,KAAK,KAAY,MAAM,KAAK,CAAC;EAwC3C,OAAO;GAAE,SAvCO,QAAQ,GAAY,CAAC,EAAE,SAAS,QAAQ;IACtD,IAAI,QAAQ,SAAS,SAAS;KAC5B,IAAI,IAAI,OAAO,MAAM,KAAK,CAAC;KAC3B,OAAO,OAAO;IAChB;IACA,MAAM,UAAU,IAAI,KAAK;IACzB,IAAI,QAAQ,SAAS,aAAa,OAAO,OAAO;IAChD,MAAM,WACJ,QAAQ,SAAS,gBACb,UACA,QAAQ,SAAS,WACf,QAAQ,WACR,KAAA;IACR,IAAI,IAAI,OAAO,MAAM,UAAU,EAAE,GAAI,aAAa,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS,EAAG,CAAC,CAAC;IACnF,OAAO,OAAO,QAAQ,UAAU,UAAU,cACxC,UAAU,aAAa,QAAQ;KAC7B,GAAI,OAAO,eAAe,KAAA,IACtB,CAAC,IACD,EAAE,cAAc,OAAO,WAAW,WAAW,GAAG;KACpD,QAAQ,OAAO;KACf,SAAS,OAAO;KAChB,SAAS;MAAE;MAAU;KAAU;IACjC,CAAC,CACH,CAAC,CAAC,KACA,OAAO,KAAK,gBAAgB,OAAO,WAAW,IAAI,IAAI,OAAO,WAAW,CAAC,CAAC,GAC1E,OAAO,OAAO,UACZ,OAAO,WACL,IAAI,IACF,OACA,MAAM,OAAO;KACX,SAAS,iBAAiB,KAAK;KAC/B,GAAI,aAAa,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS;IAC/C,CAAC,CACH,CACF,CACF,GACA,OAAO,MACT;GACF,CACwB;GAAG;EAAM;CACnC,GAAG;EAAC,OAAO,YAAY,WAAW;EAAI,OAAO;EAAQ;EAAU;EAAW;EAAW;CAAO,CAAC;AAC/F;AAEA,SAAgB,cAAc,QAAmC;CAC/D,MAAM,QAAQ,SAAS,MAAM;CAC7B,MAAM,QAAQ,aAAa,MAAM,KAAK;CACtC,MAAM,WAAW,WAAW,MAAM,OAAO;CACzC,MAAM,gBAAgB,SAAS,QAAQ,QAAQ,CAAC;CAChD,MAAM,cAAc,SAAS,QAAQ,MAAM,CAAC;CAC5C,OAAO;EAAE;EAAS;EAAO;CAAM;AACjC;AAEA,MAAM,gBAAgB,aAAgE;CACpF,QAAQ,SAAS,MAAjB;EACE,KAAK;EACL,KAAK,eACH,OAAO,SAAS;EAClB,KAAK;EACL,KAAK,WACH;EACF,SAEE,OAAOK;CAEX;AACF;AAEA,MAAM,qBACJ,gBAKA,CACE;CAAE,UAAU,YAAY;CAAU,OAAO;AAAW,GACpD;CAAE,UAAU,YAAY;CAAW,OAAO;AAAa,CACzD,CAAC,CAAC,QAAQ,UAAU,MAAM,SAAS,SAAS,CAAC;AAM/C,SAAgB,KAAK,EAAE,QAAQ,GAAG,SAAoB;CACpD,OAAO,QACL,OACA,OACA,EAAE,OAAO,GACT;EAAE,uBAAuB;EAAuB,cAAc;CAAO,CACvE;AACF;AAEA,SAAgB,SAAS,EAAE,eAAgE;CACzF,OACE,oBAAC,OAAD;EAAK,uBAAoB;EACtB,UAAA,kBAAkB,WAAW,CAAC,CAAC,KAAK,UACnC,qBAAC,WAAD;GAAS,uBAAoB;GAA7B,UAAA,CACE,oBAAC,MAAD;IAAI,uBAAoB;IAAsB,UAAA,MAAM;GAAU,CAAA,GAC9D,oBAAC,MAAD,EAAA,UACG,MAAM,SAAS,KAAK,UAAU,UAAU;IACvC,MAAM,OAAO,aAAa,QAAQ;IAClC,OACE,qBAAC,MAAD,EAAA,UAAA,CACE,qBAAC,OAAD;KAAK,uBAAoB;KAAzB,UAAA,CACE,oBAAC,QAAD;MAAM,uBAAoB;MAAsB,UAAA,SAAS;KAAe,CAAA,GACxE,oBAACC,UAAD,EAAwB,SAAW,CAAA,CAChC;IACJ,CAAA,GAAA,SAAS,KAAA,IAAY,OAAO,oBAAC,KAAD;KAAG,uBAAoB;KAAoB,UAAA;IAAQ,CAAA,CAC9E,EAAA,GANK,GAAG,SAAS,KAAK,GAAG,SAAS,SAAS,GAAG,OAM9C;GAER,CAAC,EACC,CAAA,CACG;EAhB6C,GAAA,MAAM,KAgBnD,CACV;CACE,CAAA;AAET;AAEA,SAAgB,QAAQ,EAAE,SAAoC;CAC5D,IAAI,MAAM,SAAS,UAAU,OAAO;CACpC,OACE,oBAAC,KAAD;EAAG,uBAAoB;EAAe,aAAU;EAAS,MAAK;EAC3D,UAAA,MAAM,QAAQ;CACd,CAAA;AAEP;AASA,SAAgB,cAAc,EAAE,YAAY,GAAG,SAA6B;CAC1E,MAAM,EAAE,aAAa,aAAa;CAClC,MAAM,YAAY,WAAW,MAAM,SAAS;CAC5C,OAAO,QACL,UACA,OACA,EAAE,QAAQ,WAAW,MAAM,KAAK,GAChC;EACE,aAAa;EACb,UAAU,SAAS;EACnB,uBAAuB;EACvB,gBAAgB,YAAY,KAAK,KAAA;EACjC,UAAU;EACV,eAAe,WAAW,QAAQ;EAClC,MAAM;CACR,CACF;AACF;AAMA,SAAgB,OAAO,EAAE,QAAQ,GAAG,SAAsB;CACxD,MAAM,EAAE,aAAa,UAAU,iBAAiB,eAAe,aAAa;CAC5E,MAAM,aAAa,cAAc,MAAM;CACvC,MAAM,QAAQ,WAAW;CACzB,MAAM,cACJ,MAAM,SAAS,gBACX,QACA,MAAM,SAAS,eAAe,MAAM,SAAS,WAC3C,MAAM,WACN,KAAA;CACR,OACE,oBAAC,MAAD;EAAM,QAAQ,MAAM;EAAM,GAAI;EAC5B,UAAA,qBAACC,QAAY,MAAb,EAAA,UAAA,CACE,oBAACA,QAAY,SAAb,EAAqB,QAAQ,oBAAC,eAAD,EAA2B,WAAa,CAAA,EAAI,CAAA,GACzE,oBAACA,QAAY,QAAb;GAAoB,WAAW;GAC7B,UAAA,oBAACA,QAAY,YAAb;IACE,OAAM;IACN,uBAAoB;IACpB,YAAY;IAEZ,UAAA,qBAACA,QAAY,OAAb;KACE,cAAY,SAAS;KACrB,aAAW,MAAM,SAAS;KAC1B,qBAAmB;KACnB,uBAAoB;KACpB,uBAAoB;KACpB,OAAO;KANT,UAAA;MAQE,oBAACA,QAAY,OAAb,EAAmB,uBAAoB,qBAAsB,CAAA;MAC5D,MAAM,SAAS,cACd,oBAAC,KAAD;OAAG,uBAAoB;OAAwB,MAAK;OACjD,UAAA,SAAS;MACT,CAAA,IACD;MACH,gBAAgB,KAAA,IAAY,OAAO,oBAAC,UAAD,EAAuB,YAAc,CAAA;MACzE,oBAAC,SAAD,EAAgB,MAAQ,CAAA;KACP;;GACG,CAAA;EACN,CAAA,CACJ,EAAA,CAAA;CACd,CAAA;AAEV;;;;AC3OA,SAAgB,KAAK,EAAE,QAAQ,WAAW,WAAsB;CAC9D,MAAM,aAAaC,gBAAyB,MAAM;CAClD,MAAM,QAAQ,WAAW;CACzB,MAAM,YACJ,MAAM,SAAS,cAAc,QAAQ,MAAM,SAAS,cAAc,MAAM,WAAW,KAAA;CACrF,OACE,qBAACC,QAAD;EAAiB,QAAQ,MAAM;EAA/B,UAAA;GACG,MAAM,SAAS,eAAe,MAAM,SAAS,cAC5C,oBAAC,eAAD;IACE,YAAY,MAAM,SAAS,cAAc,QAAQ,MAAM;IAC3C;IACZ,GAAK,cAAc,KAAA,IAAY,CAAC,IAAI,EAAE,kBAAkB,UAAU;IACzD;IACT,QAAQ,MAAM;GACf,CAAA,IAED,oBAAC,eAAD;IAA2B;IAAmB;GAAQ,CAAA;GAExD,oBAACC,OAAD,EAAwB,QAAU,CAAA;GAClC,oBAACC,QAAD,EACE,QAAQ;IACN,GAAI,cAAc,KAAA,IAAY,CAAC,IAAI,EAAE,YAAY,UAAU;IAC3D;IACA;GACF,EACD,CAAA;EACc;;AAErB;AAEA,SAAS,cAAc,EACrB,YACA,SAIC;CACD,MAAM,EAAE,aAAa,aAAa;CAClC,MAAM,WACJ,MAAM,SAAS,iBACX,QACA,MAAM,SAAS,gBAAgB,MAAM,SAAS,gBAC5C,MAAM,WACN,KAAA;CACR,OACE,qBAACC,QAAD;EAAiB,QAAQ,MAAM;EAA/B,UAAA,CACE,qBAACC,cAAD;GAAyB,QAAQ,MAAM;GAAvC,UAAA,CACG,aAAa,KAAA,IAAY,OAAO,oBAACC,MAAD,EAAe,UAAU,SAAS,SAAW,CAAA,GAC9E,oBAACC,UAAD,EAA0B,MAAQ,CAAA,CACX;EACzB,CAAA,GAAA,qBAACC,aAAD;GAAwB,QAAQ,MAAM;GAAtC,UAAA,CACG,MAAM,SAAS,aAAa,MAAM,UAAU,UAC3C,oBAACC,eAAD;IACc;IACZ,MAAM,MAAM,UAAU,sBAAsB,sBAAsB;GACnE,CAAA,IACC,MACH,aAAa,KAAA,IAAY,OACxB,qBAACC,OAAW,MAAZ;IACE,eAAe,MAAM,iBAAiB;KACpC,IAAI,CAAC,SAAS,MAAM,SAAS,gBAAgB,MAAM,SAAS,gBAC1D,aAAa,OAAO;IAExB;IALF,UAAA,CAOE,oBAACC,gBAAD;KACE,UAAU,MAAM,SAAS,gBAAgB,MAAM,SAAS;KACxD,UAAU,SAAS;KAElB,UAAA,SAAS,gBAAgB,SAAS,SAAS,IAAI;IACvB,CAAA,GAC3B,oBAACC,UAAD;KAA+B;KAAsB;IAAW,CAAA,CACjD;GAEG,CAAA,CAAA;EACT,CAAA,CAAA;;AAErB;AAEA,SAAS,cAAc,EACrB,YACA,YACA,kBACA,SACA,UAOC;CACD,MAAM,CAAC,SAAS,cAAc,SAAS;EACrC,MAAM;EACN,OAAO;CACT,CAAC;CACD,IAAI,QAAQ,SAAS,kBACnB,WAAW;EAAE,MAAM;EAAkB,OAAO;CAAiB,CAAC;CAEhE,MAAM,YAAY,QAAQ,SAAS,mBAAmB,QAAQ,QAAQ;CACtE,MAAM,WAAW,WAAW;CAC5B,MAAM,oBAAoB,OAA0B,IAAI;CACxD,OACE,qBAACR,QAAD;EAAyB;EAAzB,UAAA,CACE,qBAACC,cAAD;GAAiC;GAAjC,UAAA,CACE,oBAACC,MAAD,EAAe,UAAU,WAAW,SAAW,CAAA,GAC/C,oBAACC,UAAD,EAAmB,OAAO,WAAW,cAAc,aAAa,WAAW,MAAQ,CAAA,CAC5D;EACzB,CAAA,GAAA,qBAACC,aAAD;GAAgC;GAAhC,UAAA,CACE,oBAACK,QAAD;IACc;IACZ,YAAY,WAAW,WAAW;KAAE,MAAM;KAAkB,OAAO,OAAO;IAAU,CAAC;IAC5E;IACT,aAAa;GACd,CAAA,GACA,cAAc,KAAA,IACb,oBAAC,iBAAD;IACqB;IACP;IACA;IACF;GACX,CAAA,IAED,oBAAC,4BAAD;IACqB;IACP;IACA;IACF;IAEV,iBAAiB,WAAW;KAAE,MAAM;KAAkB,OAAO,KAAA;IAAU,CAAC;IAC7D;GACZ,GAHM,SAGN,CAEmB;EACT,CAAA,CAAA;;AAErB;AAEA,SAAS,2BAA2B,EAClC,mBACA,YACA,YACA,UACA,WACA,aAQC;CACD,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAC5C,MAAM,UAAUC,gBAAsB,YAAY,YAAY,WAAW;EACvE,IAAI,OAAO,SAAS,WAAW,WAAW,IAAI;CAChD,CAAC;CACD,OACE,oBAAC,iBAAD;EACqB;EACV;EACG;EACA;EACF;EACV,8BAA8B;GAC5B,IAAI,SAAS,UAAU;EACzB;CACD,CAAA;AAEL;AAEA,SAAS,gBAAgB,EACvB,mBAAmB,uBACnB,SACA,YACA,YACA,UACA,0BAQC;CACD,MAAM,EAAE,aAAa,UAAU,iBAAiB,eAAe,aAAa;CAC5E,MAAM,4BAA4B,OAA0B,IAAI;CAChE,MAAM,oBAAoB,yBAAyB;CACnD,MAAM,CAAC,UAAU,eAAe,SAAS,KAAK;CAC9C,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,KAAK;CAC1D,OACE,qBAAA,UAAA,EAAA,UAAA;EACE,qBAACC,KAAS,MAAV;GAAyB;GAAU,OAAO;GAAO,cAAc;GAAa,MAAM;GAAlF,UAAA,CACE,oBAACA,KAAS,SAAV;IACE,cAAY,SAAS;IACrB,uBAAoB;IACpB,KAAK;IAEL,UAAA,oBAAC,QAAD;KAAM,eAAY;KAAO,UAAA;IAAO,CAAA;GAChB,CAAA,GAClB,oBAACA,KAAS,QAAV;IAAiB,WAAW;IAAiB,aAAA;IAC3C,UAAA,oBAACA,KAAS,YAAV;KAAqB,OAAM;KAAM,YAAY;KAC3C,UAAA,qBAACA,KAAS,OAAV;MACE,qBAAmB;MACnB,uBAAoB;MACpB,uBAAoB;MACpB,OAAO;MAJT,UAAA,CAMG,YAAY,KAAA,IAAY,OACvB,qBAAA,UAAA,EAAA,UAAA,CACE,oBAACA,KAAS,MAAV;OACE,cAAc;OACd,uBAAoB;OACpB,cAAA;OACA,sBAAsB;QACpB,YAAY,KAAK;QACjB,qBAAqB,QAAQ,KAAK,CAAC;OACrC;OACA,QAAQ,oBAAC,UAAD,EAAQ,MAAK,SAAU,CAAA;OAE9B,UAAA,SAAS;MACG,CAAA,GACf,oBAACA,KAAS,WAAV,EAAoB,uBAAoB,oBAAqB,CAAA,CAC7D,EAAA,CAAA,GAEJ,oBAACA,KAAS,MAAV;OACE,cAAc;OACd,uBAAoB;OACpB,aAAU;OACV,cAAA;OACA,sBAAsB;QACpB,YAAY,KAAK;QACjB,qBAAqB,kBAAkB,IAAI,CAAC;OAC9C;OACA,QAAQ,oBAAC,UAAD,EAAQ,MAAK,SAAU,CAAA;OAE9B,UAAA,SAAS;MACG,CAAA,CACD;;IACG,CAAA;GACN,CAAA,CACJ;;EACd,YAAY,KAAA,IAAY,OACvB,oBAACC,UAAD;GACE,YAAY;GACZ,uBAAuB,SAAS;IAC9B,IAAI,CAAC,MAAM;KACT,yBAAyB;KACzB,qBAAqB,kBAAkB,SAAS,MAAM,CAAC;IACzD;GACF;GACA,SAAS;EACV,CAAA;EAEH,oBAACC,kBAAD;GACc;GACA;GACZ,eAAe,SAAS;IACtB,kBAAkB,IAAI;IACtB,IAAI,CAAC,MAAM,qBAAqB,kBAAkB,SAAS,MAAM,CAAC;GACpE;GACA,MAAM;GACN,SAAS;EACV,CAAA;CACD,EAAA,CAAA;AAEN;;;;;;;;;;;ACvPA,MAAa,YAAY,YAAyC,CAAC,OAA2B;CAC5F,gBAAgB,CACd;EAAE,MAAM;EAAS,OAAO;CAAsB,GAC9C;EAAE,MAAM;EAAS,OAAO;EAAsB,aAAa;CAAkB,CAC/E;CACA,IAAI;CACJ,MAAM;CACN,GAAG;AACL;AAEA,MAAa,UACX,YAA+C,CAAC,OAClB;CAC9B,WAAW;CACX,aAAa;CACb,QAAQ;CACR,UAAU,WAAW,MAAM,aAAa;CACxC,GAAG;AACL;AAEA,MAAa,cACX,YAAmD,CAAC,OAClB;CAClC,2BAAW,IAAI,KAAK,0BAA0B;CAC9C,IAAI;CACJ,QAAQ;CACR,SAAS;CACT,YAAY;CACZ,QAAQ;CACR,GAAG;AACL;AAEA,MAAa,cACX,YAAiD,CAAC,OAClB;CAChC,cAAc;CACd,2BAAW,IAAI,KAAK,0BAA0B;CAC9C,QAAQ,WAAW,MAAM,kBAAkB;CAC3C,IAAI;CACJ,QAAQ,OAAO;CACf,GAAG;AACL;AAEA,MAAa,aAAa,YAA0C,CAAC,OAA4B;CAC/F,MAAM;CACN,YAAY,WAAW;CACvB,YAAY,WAAW;CACvB,UAAU,SAAS;CACnB,GAAG;AACL;AAEA,SAAgB,kBAAkB,SAAqC;CACrE,MAAM,QAAgC;EACpC,OAAO,CAAC;EACR,QAAQ,CAAC;EACT,cAAc,CAAC;EACf,aAAa,CAAC;EACd,SAAS,CAAC;EACV,QAAQ,CAAC;EACT,SAAS,CAAC;EACV,SAAS,CAAC;EACV,MAAM,CAAC;CACT;CACA,MAAM,cAAc,MAAM,QAAQ,QAAQ,OAAO,IAAI,CAAC,GAAG,QAAQ,OAAO,IAAI,CAAC,QAAQ,OAAO;CAC5F,MAAM,YAAsC;EAC1C,SAAS;GACP,OAAO,OAAO,UAAU;IACtB,MAAM,aAAa,KAAK,KAAK;IAC7B,OACE,QAAQ,gBAAgB;KACtB,MAAM;KACN,aAAa;KACb,SAAS,CAAC;IACZ;GAEJ;GACA,MAAM,OAAO,UAAU;IACrB,MAAM,YAAY,KAAK,KAAK;IAC5B,OACE,QAAQ,eAAe;KACrB,MAAM;KACN,QAAQ;KACR,WAAW;KACX,YAAY,CAAC;IACf;GAEJ;EACF;EACA,YAAY;GACV,SAAS,OAAO,UAAU;IACxB,MAAM,QAAQ,KAAK,KAAK;IACxB,OACE,QAAQ,WAAW;KACjB,MAAM;KACN,YAAY,WAAW,EAAE,QAAQ,WAAW,MAAM,MAAM,MAAM,EAAE,CAAC;KACjE,YAAY,WAAW;KACvB,UAAU,SAAS;IACrB;GAEJ;GACA,SAAS,OAAO,UAAU;IACxB,MAAM,QAAQ,KAAK,KAAK;IACxB,MAAM,WAAW,YAAY,MAAM,KAAK,YAAY,GAAG,EAAE,KAAK,QAAQ;IACtE,IAAI,MAAM,QAAQ,QAAQ,GAAG,MAAM,IAAI,MAAM,mCAAmC;IAChF,IAAI,SAAS,SAAS,WACpB,MAAM,IAAI,UAAU,QAAQ;KAC1B,SAAS,SAAS;KAClB,WAAW,SAAS,aAAa;KACjC,OAAO,SAAS;IAClB,CAAC;IACH,OAAO;GACT;GACA,QAAQ,OAAO,UAAU;IACvB,MAAM,OAAO,KAAK,KAAK;IACvB,OACE,QAAQ,UAAU;KAChB,MAAM;KACN,YAAY,WAAW;MACrB,cAAc,MAAM;MACpB,QAAQ,WAAW,MAAM,MAAM,MAAM;MACrC,QAAQ,MAAM;KAChB,CAAC;KACD,YAAY,WAAW,EAAE,IAAI,MAAM,aAAa,CAAC;KACjD,UAAU,SAAS;IACrB;GAEJ;GACA,QAAQ,OAAO,UAAU;IACvB,MAAM,OAAO,KAAK,KAAK;IACvB,OACE,QAAQ,UAAU;KAChB,MAAM;KACN,YAAY,WAAW;KACvB,YAAY,WAAW;KACvB,sBAAsB;IACxB;GAEJ;EACF;EACA,cAAc;GACZ,OAAO,OAAO,UAAU;IACtB,MAAM,MAAM,KAAK,KAAK;IACtB,OACE,QAAQ,SAAS;KACf,MAAM;KACN,aAAa;KACb,WAAW;KACX,SAAS,CAAC;IACZ;GAEJ;GACA,MAAM,OAAO,UAAU;IACrB,MAAM,KAAK,KAAK,KAAK;IACrB,OACE,QAAQ,QAAQ;KACd,MAAM;KACN,QAAQ;KACR,WAAW;KACX,YAAY,MAAM,QAAQ,KAAK,YAAY;MACzC,MAAM;MACN,IAAI,UAAU,OAAO;MACrB;KACF,EAAE;IACJ;GAEJ;EACF;EACA,cAAc,EACZ,SAAS,OAAO,UAAU;GACxB,MAAM,QAAQ,KAAK,KAAK;GACxB,OACE,QAAQ,WAAW;IACjB,MAAM;IACN,UAAU,MAAM,QAAQ,WACpB,MAAM,QAAQ,KAAK,YAAY;KAAE,MAAM;KAAkB,UAAU,OAAO;IAAG,EAAE,IAC/E,CAAC;IACL,WAAW,MAAM,QAAQ,YACrB,MAAM,QAAQ,KAAK,YAAY;KAAE,MAAM;KAAkB,UAAU,OAAO;IAAG,EAAE,IAC/E,CAAC;GACP;EAEJ,EACF;CACF;CACA,OAAO,OAAO,OAAO,UAAU,eAAe,SAAS,GAAG,WAAW,EAAE,MAAM,CAAC;AAChF"}
package/dist/styles.css CHANGED
@@ -544,6 +544,10 @@
544
544
  width: 1.25rem;
545
545
  }
546
546
 
547
+ :where([data-domainkit-part="provider-mark"][data-domainkit-provider="vercel"]) {
548
+ border-color: transparent;
549
+ }
550
+
547
551
  :where([data-domainkit-part="token-connect"]) {
548
552
  background: var(--domainkit-fill);
549
553
  border: 1px solid var(--domainkit-border);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@domainkit/react",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Accessible React flows for DomainKit",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -31,12 +31,11 @@
31
31
  "test": "vitest run --exclude tests/artifact/**/*.test.ts",
32
32
  "test:artifact": "vitest run tests/artifact",
33
33
  "test:browser": "playwright test",
34
- "typecheck": "tsc --noEmit",
35
- "workshop": "vite examples/vite --host 127.0.0.1 --port 4178"
34
+ "typecheck": "tsc --noEmit"
36
35
  },
37
36
  "dependencies": {
38
37
  "@base-ui/react": "^1.7.0",
39
- "domainkit": "^0.5.0",
38
+ "domainkit": "^0.6.0",
40
39
  "scheduler": "0.27.0"
41
40
  },
42
41
  "devDependencies": {
@@ -49,7 +48,6 @@
49
48
  "@types/react": "19.2.14",
50
49
  "@types/react-dom": "19.2.3",
51
50
  "@types/scheduler": "0.26.0",
52
- "dialkit": "1.4.3",
53
51
  "effect": "4.0.0-rc.112",
54
52
  "jsdom": "26.1.0",
55
53
  "motion": "13.1.1",