@domainkit/react 0.5.0 → 0.7.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
@@ -1,10 +1,10 @@
1
1
  # @domainkit/react
2
2
 
3
- Accessible React flows and composable UI parts for DomainKit.
3
+ React flows and UI parts for DomainKit.
4
4
 
5
- The package can render the complete domain lifecycle, one focused lifecycle, or model-free DNS
6
- records. Every stateful operation goes through your authenticated server transport; provider
7
- credentials never belong in the browser.
5
+ The package can render the full domain flow, one focused flow, or DNS records. Every stateful
6
+ operation goes through your authenticated server transport; provider credentials never belong in the
7
+ browser.
8
8
 
9
9
  ## Install
10
10
 
@@ -29,17 +29,17 @@ export function DomainSetup() {
29
29
  }
30
30
  ```
31
31
 
32
- `Domain.Flow` coordinates connection, plan review, apply, verification, receipt-bound cleanup, and
33
- removing the domain grant. Your application still owns authentication, authorization, durable
34
- attempts, provider credentials, and the server-side `Transport` implementation.
32
+ `Domain.Flow` handles connection, plan review, apply, verification, cleanup, and removal of the
33
+ domain grant. Your app still owns authentication, authorization, saved attempts, provider
34
+ credentials, and the server-side `Transport` implementation.
35
35
 
36
- ## Adopt only the surface you need
36
+ ## Choose the parts you need
37
37
 
38
- - `Domain.Flow` — the complete lifecycle;
39
- - `Connection.Flow`, `Provisioning.Flow`, `Verification.Flow`, and `Cleanup.Flow` — focused flows;
40
- - `useModel` hooks and semantic parts — host-owned composition and interaction chrome;
41
- - `Records.Table`, `Records.Card`, and record parts — model-free DNS presentation without a root or
42
- transport.
38
+ - `Domain.Flow` — the full lifecycle;
39
+ - `Connection.Flow`, `Provisioning.Flow`, and `Cleanup.Flow` — focused flows;
40
+ - `Verification`'s model and parts — provider and public-DNS evidence with an observe action;
41
+ - `useModel` hooks and parts — your own layout and controls;
42
+ - `Records.Table`, `Records.Card`, and record parts — DNS display without a root or transport.
43
43
 
44
44
  The packaged flows use the same exported models and parts. Components support server rendering;
45
45
  clipboard, download, and navigation behavior runs only from browser interactions.
@@ -57,16 +57,16 @@ export const transport = Transport.layerFromAsync({
57
57
  });
58
58
  ```
59
59
 
60
- The stylesheet is opt-in. `DomainKit.Root` accepts host messages, provider marks, icons, design
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.
60
+ The stylesheet is opt-in. `DomainKit.Root` accepts your messages, provider marks, icons, design
61
+ tokens, color scheme, and portal container, so branding stays in your app.
62
+ Known provider marks load from `integrations.sh` and fall back to the provider's initial when a mark
63
+ is unavailable. Replace them through the `marks` prop when your app owns the artwork.
64
64
 
65
65
  ## Learn more
66
66
 
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)
69
- - [Application transport contract](https://github.com/AryaLabsHQ/domainkit/blob/main/packages/domainkit/src/Transport.ts)
67
+ - [React source](https://github.com/AryaLabsHQ/domainkit/tree/main/packages/react)
68
+ - [React component catalog](https://domain-kit.dev/components)
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
 
72
72
  ## License
package/dist/index.d.mts CHANGED
@@ -978,6 +978,7 @@ interface Catalog {
978
978
  readonly dialogTitle: (provider: string) => string;
979
979
  readonly openingAuthorization: string;
980
980
  readonly moreActions: string;
981
+ readonly noChanges: string;
981
982
  readonly planConsent: string;
982
983
  readonly planningCleanup: string;
983
984
  readonly planningDns: string;
package/dist/index.mjs CHANGED
@@ -124,6 +124,7 @@ const english = {
124
124
  dialogTitle: (provider) => `Connect ${provider}`,
125
125
  openingAuthorization: "Opening provider authorization…",
126
126
  moreActions: "More connection actions",
127
+ noChanges: "No changes needed",
127
128
  planConsent: "Review the exact DNS operations before approving this plan.",
128
129
  planningCleanup: "Preparing cleanup…",
129
130
  planningDns: "Preparing DNS changes…",
@@ -512,47 +513,60 @@ function Flow$3({ connection, onCleaned, receiptId, trigger, ...props }) {
512
513
  //#endregion
513
514
  //#region src/provider.tsx
514
515
  var provider_exports = /* @__PURE__ */ __exportAll({ Mark: () => Mark });
516
+ const logoHosts = {
517
+ amazonroute53: "route53.com",
518
+ aws: "amazonaws.com",
519
+ bluehost: "bluehost.com",
520
+ cloudflare: "cloudflare.com",
521
+ digitalocean: "digitalocean.com",
522
+ dnsimple: "dnsimple.com",
523
+ dreamhost: "dreamhost.com",
524
+ dynadot: "dynadot.com",
525
+ gandi: "gandi.net",
526
+ godaddy: "godaddy.com",
527
+ google: "cloud.google.com",
528
+ googlecloud: "cloud.google.com",
529
+ googleclouddns: "cloud.google.com",
530
+ hostgator: "hostgator.com",
531
+ hostinger: "hostinger.com",
532
+ hover: "hover.com",
533
+ ionos: "ionos.com",
534
+ namecheap: "namecheap.com",
535
+ namecom: "name.com",
536
+ netlify: "netlify.com",
537
+ ns1: "ns1.com",
538
+ ovh: "ovh.com",
539
+ porkbun: "porkbun.com",
540
+ route53: "route53.com",
541
+ spaceship: "spaceship.com",
542
+ squarespace: "squarespace.com",
543
+ vercel: "vercel.com"
544
+ };
515
545
  const logoKey = (providerId) => providerId.trim().toLowerCase().replace(/[^a-z0-9]+/g, "");
546
+ const logoHost = (providerId) => logoHosts[logoKey(providerId)];
516
547
  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
548
  function DefaultMark({ provider }) {
545
- const BuiltIn = builtInMarks[logoKey(provider.id)];
546
- return BuiltIn === void 0 ? letterMark(provider) : /* @__PURE__ */ jsx(BuiltIn, {});
549
+ const host = logoHost(provider.id);
550
+ const [failed, setFailed] = useState(false);
551
+ if (host === void 0 || failed) return letterMark(provider);
552
+ return /* @__PURE__ */ jsx("img", {
553
+ alt: "",
554
+ height: 32,
555
+ onError: () => setFailed(true),
556
+ referrerPolicy: "no-referrer",
557
+ src: `https://integrations.sh/logo/${host}?sz=64`,
558
+ width: 32
559
+ });
547
560
  }
548
561
  function Mark({ provider, ...props }) {
549
562
  const { marks } = useDomainKit();
550
563
  const replacement = marks[provider.id];
551
- const content = typeof replacement === "function" ? replacement(provider) : replacement ?? /* @__PURE__ */ jsx(DefaultMark, { provider });
564
+ const content = typeof replacement === "function" ? replacement(provider) : replacement ?? /* @__PURE__ */ jsx(DefaultMark, { provider }, provider.id);
552
565
  return usePart("span", props, { providerId: provider.id }, {
553
566
  "aria-label": provider.name,
554
567
  children: content,
555
568
  "data-domainkit-part": "provider-mark",
569
+ "data-domainkit-provider": logoKey(provider.id),
556
570
  role: "img"
557
571
  });
558
572
  }
@@ -614,12 +628,11 @@ function useModel$2(domain) {
614
628
  attachmentId: snapshot.attachment.id,
615
629
  preserveDns: true
616
630
  }), (result) => {
617
- const detached = {
618
- _tag: "Disconnected",
631
+ const detached = Transport.Disconnected.make({
619
632
  domain: snapshot.attachment.domain,
620
633
  provider: snapshot.provider,
621
634
  reusableConnections: []
622
- };
635
+ });
623
636
  return Effect.flatMap(Effect.sync(() => {
624
637
  get.set(actionState, detached);
625
638
  emit(Event.DomainDetached({
@@ -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",
@@ -1387,6 +1401,7 @@ function Dialog$1({ controller, trigger }) {
1387
1401
  const plan = planRef.current;
1388
1402
  const busy = state._tag === "Planning" || state._tag === "Applying";
1389
1403
  const open = state._tag !== "Idle" && state._tag !== "Complete";
1404
+ const isNoopOnly = plan !== void 0 && plan.operations.every((operation) => operation._tag === "Noop");
1390
1405
  return /* @__PURE__ */ jsxs(Dialog.Root, {
1391
1406
  onOpenChange: (nextOpen, eventDetails) => {
1392
1407
  if (!nextOpen && busy) {
@@ -1455,10 +1470,10 @@ function Dialog$1({ controller, trigger }) {
1455
1470
  children: messages.cancel
1456
1471
  }), /* @__PURE__ */ jsx("button", {
1457
1472
  "data-domainkit-part": "plan-apply",
1458
- disabled: plan.operations.some((operation) => operation._tag === "Conflict"),
1473
+ disabled: isNoopOnly || plan.operations.some((operation) => operation._tag === "Conflict"),
1459
1474
  onClick: () => controller.apply(),
1460
1475
  type: "button",
1461
- children: messages.applyDns
1476
+ children: isNoopOnly ? messages.noChanges : messages.applyDns
1462
1477
  })] }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Dialog.Close, {
1463
1478
  "data-domainkit-part": "dialog-cancel",
1464
1479
  children: messages.close
@@ -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 noChanges: 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 noChanges: \"No changes needed\",\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 = Transport.Disconnected.make({\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 const isNoopOnly =\n plan !== undefined && plan.operations.every((operation) => operation._tag === \"Noop\");\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={\n isNoopOnly || plan.operations.some((operation) => operation._tag === \"Conflict\")\n }\n onClick={() => controller.apply()}\n type=\"button\"\n >\n {isNoopOnly ? messages.noChanges : 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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"}
package/dist/styles.css CHANGED
@@ -353,6 +353,7 @@
353
353
  ) {
354
354
  background: var(--domainkit-background);
355
355
  border: 1px solid var(--domainkit-border);
356
+ border-color: color-mix(in oklab, var(--domainkit-border) 60%, var(--domainkit-background));
356
357
  border-radius: var(--domainkit-radius);
357
358
  box-shadow: var(--domainkit-shadow);
358
359
  color: var(--domainkit-text);
@@ -362,6 +363,7 @@
362
363
  max-height: calc(100vh - 2rem);
363
364
  max-width: calc(100vw - 2rem);
364
365
  overflow: hidden;
366
+ outline: none;
365
367
  position: fixed;
366
368
  top: 50%;
367
369
  transform: translate(-50%, -50%);
@@ -544,6 +546,10 @@
544
546
  width: 1.25rem;
545
547
  }
546
548
 
549
+ :where([data-domainkit-part="provider-mark"][data-domainkit-provider="vercel"]) {
550
+ border-color: transparent;
551
+ }
552
+
547
553
  :where([data-domainkit-part="token-connect"]) {
548
554
  background: var(--domainkit-fill);
549
555
  border: 1px solid var(--domainkit-border);
package/package.json CHANGED
@@ -1,8 +1,20 @@
1
1
  {
2
2
  "name": "@domainkit/react",
3
- "version": "0.5.0",
4
- "description": "Accessible React flows for DomainKit",
3
+ "version": "0.7.0",
4
+ "description": "React flows and UI parts for custom-domain setup",
5
+ "keywords": [
6
+ "custom-domains",
7
+ "dns",
8
+ "domainkit",
9
+ "react",
10
+ "typescript"
11
+ ],
12
+ "homepage": "https://github.com/AryaLabsHQ/domainkit#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/AryaLabsHQ/domainkit/issues"
15
+ },
5
16
  "license": "MIT",
17
+ "author": "Arya Labs",
6
18
  "repository": {
7
19
  "type": "git",
8
20
  "url": "git+https://github.com/AryaLabsHQ/domainkit.git",
@@ -31,12 +43,11 @@
31
43
  "test": "vitest run --exclude tests/artifact/**/*.test.ts",
32
44
  "test:artifact": "vitest run tests/artifact",
33
45
  "test:browser": "playwright test",
34
- "typecheck": "tsc --noEmit",
35
- "workshop": "vite examples/vite --host 127.0.0.1 --port 4178"
46
+ "typecheck": "tsc --noEmit"
36
47
  },
37
48
  "dependencies": {
38
49
  "@base-ui/react": "^1.7.0",
39
- "domainkit": "^0.5.0",
50
+ "domainkit": "^0.7.0",
40
51
  "scheduler": "0.27.0"
41
52
  },
42
53
  "devDependencies": {
@@ -49,7 +60,6 @@
49
60
  "@types/react": "19.2.14",
50
61
  "@types/react-dom": "19.2.3",
51
62
  "@types/scheduler": "0.26.0",
52
- "dialkit": "1.4.3",
53
63
  "effect": "4.0.0-rc.112",
54
64
  "jsdom": "26.1.0",
55
65
  "motion": "13.1.1",