@domainkit/react 0.6.0 → 0.8.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 attachment. 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
- Recognized provider marks load from `integrations.sh` and fall back to the provider's initial when
63
- the mark is unavailable; hosts can replace them through the `marks` prop.
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)
67
+ - [React source](https://github.com/AryaLabsHQ/domainkit/tree/main/packages/react)
68
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)
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…",
@@ -627,12 +628,11 @@ function useModel$2(domain) {
627
628
  attachmentId: snapshot.attachment.id,
628
629
  preserveDns: true
629
630
  }), (result) => {
630
- const detached = {
631
- _tag: "Disconnected",
631
+ const detached = Transport.Disconnected({
632
632
  domain: snapshot.attachment.domain,
633
633
  provider: snapshot.provider,
634
634
  reusableConnections: []
635
- };
635
+ });
636
636
  return Effect.flatMap(Effect.sync(() => {
637
637
  get.set(actionState, detached);
638
638
  emit(Event.DomainDetached({
@@ -1401,6 +1401,7 @@ function Dialog$1({ controller, trigger }) {
1401
1401
  const plan = planRef.current;
1402
1402
  const busy = state._tag === "Planning" || state._tag === "Applying";
1403
1403
  const open = state._tag !== "Idle" && state._tag !== "Complete";
1404
+ const isNoopOnly = plan !== void 0 && plan.operations.every((operation) => operation._tag === "Noop");
1404
1405
  return /* @__PURE__ */ jsxs(Dialog.Root, {
1405
1406
  onOpenChange: (nextOpen, eventDetails) => {
1406
1407
  if (!nextOpen && busy) {
@@ -1469,10 +1470,10 @@ function Dialog$1({ controller, trigger }) {
1469
1470
  children: messages.cancel
1470
1471
  }), /* @__PURE__ */ jsx("button", {
1471
1472
  "data-domainkit-part": "plan-apply",
1472
- disabled: plan.operations.some((operation) => operation._tag === "Conflict"),
1473
+ disabled: isNoopOnly || plan.operations.some((operation) => operation._tag === "Conflict"),
1473
1474
  onClick: () => controller.apply(),
1474
1475
  type: "button",
1475
- children: messages.applyDns
1476
+ children: isNoopOnly ? messages.noChanges : messages.applyDns
1476
1477
  })] }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Dialog.Close, {
1477
1478
  "data-domainkit-part": "dialog-cancel",
1478
1479
  children: messages.close
@@ -1893,14 +1894,10 @@ var testing_exports = /* @__PURE__ */ __exportAll({
1893
1894
  target: () => target
1894
1895
  });
1895
1896
  const provider = (overrides = {}) => ({
1896
- authentication: [{
1897
- _tag: "OAuth",
1898
- label: "Continue with OAuth"
1899
- }, {
1900
- _tag: "Token",
1897
+ authentication: [Transport.AuthenticationMethod.OAuth({ label: "Continue with OAuth" }), Transport.AuthenticationMethod.Token({
1901
1898
  label: "Connect with token",
1902
1899
  placeholder: "Paste API token"
1903
- }],
1900
+ })],
1904
1901
  id: "cloudflare",
1905
1902
  name: "Cloudflare",
1906
1903
  ...overrides
@@ -1929,8 +1926,7 @@ const attachment = (overrides = {}) => ({
1929
1926
  target: target(),
1930
1927
  ...overrides
1931
1928
  });
1932
- const connected = (overrides = {}) => ({
1933
- _tag: "Connected",
1929
+ const connected = (overrides = {}) => Transport.Connected({
1934
1930
  attachment: attachment(),
1935
1931
  connection: connection(),
1936
1932
  provider: provider(),
@@ -1953,31 +1949,28 @@ function makeFakeTransport(options) {
1953
1949
  cleanup: {
1954
1950
  apply: async (input) => {
1955
1951
  calls.cleanupApply.push(input);
1956
- return options.cleanupApply ?? {
1957
- _tag: "Cleaned",
1952
+ return options.cleanupApply ?? Transport.CleanupResult.Cleaned({
1958
1953
  operationId: "cleanup-operation-1",
1959
1954
  results: []
1960
- };
1955
+ });
1961
1956
  },
1962
1957
  plan: async (input) => {
1963
1958
  calls.cleanupPlan.push(input);
1964
- return options.cleanupPlan ?? {
1965
- _tag: "CleanupPlan",
1959
+ return options.cleanupPlan ?? Transport.CleanupPlan({
1966
1960
  digest: "cleanup-digest-1",
1967
1961
  expiresAt: "2099-01-01T00:00:00.000Z",
1968
1962
  operations: []
1969
- };
1963
+ });
1970
1964
  }
1971
1965
  },
1972
1966
  connection: {
1973
1967
  connect: async (input) => {
1974
1968
  calls.connect.push(input);
1975
- return options.connect ?? {
1976
- _tag: "Connected",
1969
+ return options.connect ?? Transport.Connected({
1977
1970
  attachment: attachment({ domain: DomainName.parse(input.domain) }),
1978
1971
  connection: connection(),
1979
1972
  provider: provider()
1980
- };
1973
+ });
1981
1974
  },
1982
1975
  inspect: async (input) => {
1983
1976
  calls.inspect.push(input);
@@ -1992,8 +1985,7 @@ function makeFakeTransport(options) {
1992
1985
  },
1993
1986
  attach: async (input) => {
1994
1987
  calls.attach.push(input);
1995
- return options.attach ?? {
1996
- _tag: "Connected",
1988
+ return options.attach ?? Transport.Connected({
1997
1989
  attachment: attachment({
1998
1990
  connectionId: input.connectionId,
1999
1991
  domain: DomainName.parse(input.domain),
@@ -2001,55 +1993,44 @@ function makeFakeTransport(options) {
2001
1993
  }),
2002
1994
  connection: connection({ id: input.connectionId }),
2003
1995
  provider: provider()
2004
- };
1996
+ });
2005
1997
  },
2006
1998
  detach: async (input) => {
2007
1999
  calls.detach.push(input);
2008
- return options.detach ?? {
2009
- _tag: "Detached",
2000
+ return options.detach ?? Transport.DetachResult({
2010
2001
  attachment: attachment(),
2011
2002
  connection: connection(),
2012
2003
  remainingAttachments: 0
2013
- };
2004
+ });
2014
2005
  }
2015
2006
  },
2016
2007
  provisioning: {
2017
2008
  apply: async (input) => {
2018
2009
  calls.apply.push(input);
2019
- return options.apply ?? {
2020
- _tag: "Applied",
2010
+ return options.apply ?? Transport.ApplyResult.Applied({
2021
2011
  operationId: "apply-operation-1",
2022
2012
  receiptId: "receipt-1",
2023
2013
  results: []
2024
- };
2014
+ });
2025
2015
  },
2026
2016
  plan: async (input) => {
2027
2017
  calls.plan.push(input);
2028
- return options.plan ?? {
2029
- _tag: "Plan",
2018
+ return options.plan ?? Transport.ProvisioningPlan({
2030
2019
  digest: "plan-digest-1",
2031
2020
  expiresAt: "2099-01-01T00:00:00.000Z",
2032
- operations: input.records.map((record) => ({
2033
- _tag: "Create",
2021
+ operations: input.records.map((record) => Transport.PlanOperation.Create({
2034
2022
  id: `create-${record.id}`,
2035
2023
  record
2036
2024
  }))
2037
- };
2025
+ });
2038
2026
  }
2039
2027
  },
2040
2028
  verification: { observe: async (input) => {
2041
2029
  calls.observe.push(input);
2042
- return options.observe ?? {
2043
- _tag: "Observation",
2044
- provider: input.sources.provider ? input.records.map((record) => ({
2045
- _tag: "Found",
2046
- recordId: record.id
2047
- })) : [],
2048
- publicDns: input.sources.publicDns ? input.records.map((record) => ({
2049
- _tag: "Found",
2050
- recordId: record.id
2051
- })) : []
2052
- };
2030
+ return options.observe ?? Transport.Observation({
2031
+ provider: input.sources.provider ? input.records.map((record) => Transport.ObservationEvidence.Found({ recordId: record.id })) : [],
2032
+ publicDns: input.sources.publicDns ? input.records.map((record) => Transport.ObservationEvidence.Found({ recordId: record.id })) : []
2033
+ });
2053
2034
  } }
2054
2035
  };
2055
2036
  return Object.assign(Transport.layerFromAsync(transport), transport, { calls });
@@ -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 { useState, type ComponentPropsWithoutRef, type ReactNode } from \"react\";\nimport type { Transport } from \"domainkit\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\n\ntype ProviderDescriptor = Transport.Provider;\n\nexport type Marks = Readonly<\n Record<string, ReactNode | ((provider: ProviderDescriptor) => ReactNode)>\n>;\n\nexport interface MarkState extends Record<string, unknown> {\n readonly providerId: string;\n}\n\nexport interface MarkProps extends PartProps<\"span\", MarkState> {\n readonly provider: ProviderDescriptor;\n}\n\nconst logoHosts: Readonly<Record<string, string>> = {\n amazonroute53: \"route53.com\",\n aws: \"amazonaws.com\",\n bluehost: \"bluehost.com\",\n cloudflare: \"cloudflare.com\",\n digitalocean: \"digitalocean.com\",\n dnsimple: \"dnsimple.com\",\n dreamhost: \"dreamhost.com\",\n dynadot: \"dynadot.com\",\n gandi: \"gandi.net\",\n godaddy: \"godaddy.com\",\n google: \"cloud.google.com\",\n googlecloud: \"cloud.google.com\",\n googleclouddns: \"cloud.google.com\",\n hostgator: \"hostgator.com\",\n hostinger: \"hostinger.com\",\n hover: \"hover.com\",\n ionos: \"ionos.com\",\n namecheap: \"namecheap.com\",\n namecom: \"name.com\",\n netlify: \"netlify.com\",\n ns1: \"ns1.com\",\n ovh: \"ovh.com\",\n porkbun: \"porkbun.com\",\n route53: \"route53.com\",\n spaceship: \"spaceship.com\",\n squarespace: \"squarespace.com\",\n vercel: \"vercel.com\",\n};\n\nconst logoKey = (providerId: string): string =>\n providerId\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"\");\n\nconst logoHost = (providerId: string): string | undefined => logoHosts[logoKey(providerId)];\n\nconst letterMark = (provider: ProviderDescriptor): string =>\n provider.name.trim().charAt(0).toUpperCase() || \"?\";\n\nfunction DefaultMark({ provider }: { readonly provider: ProviderDescriptor }) {\n const host = logoHost(provider.id);\n const [failed, setFailed] = useState(false);\n if (host === undefined || failed) return letterMark(provider);\n return (\n <img\n alt=\"\"\n height={32}\n onError={() => setFailed(true)}\n referrerPolicy=\"no-referrer\"\n src={`https://integrations.sh/logo/${host}?sz=64`}\n width={32}\n />\n );\n}\n\nexport function Mark({ provider, ...props }: MarkProps) {\n const { marks } = useDomainKit();\n const replacement = marks[provider.id];\n const content =\n typeof replacement === \"function\"\n ? replacement(provider)\n : (replacement ?? <DefaultMark key={provider.id} provider={provider} />);\n return usePart(\n \"span\",\n props,\n { providerId: provider.id },\n {\n \"aria-label\": provider.name,\n children: content,\n \"data-domainkit-part\": \"provider-mark\",\n \"data-domainkit-provider\": logoKey(provider.id),\n role: \"img\",\n },\n );\n}\n\nexport type { ProviderDescriptor as Provider };\nexport type MarkElementProps = ComponentPropsWithoutRef<\"span\">;\n","import { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport * as AsyncResult from \"effect/unstable/reactivity/AsyncResult\";\nimport {\n useMemo,\n useState,\n type ComponentPropsWithoutRef,\n type FormEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport * as Provider from \"./provider.tsx\";\nimport { Event as LifecycleEvent } from \"./lifecycle.ts\";\nimport { failureFromDefect, failureFromError, type Failure } from \"./atom.ts\";\n\ntype LocalState = Data.TaggedEnum<{\n Detaching: { readonly snapshot: Transport.Connected };\n Loading: {};\n Redirecting: { readonly snapshot: Disconnected };\n Submitting: { readonly snapshot: Disconnected };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State = LocalState | Transport.ConnectionSnapshot | Failure;\n\ntype Disconnected = Extract<Transport.ConnectionSnapshot, { readonly _tag: \"Disconnected\" }>;\n\nconst sameTarget = (left: Transport.ProviderTarget, right: Transport.ProviderTarget): boolean =>\n left.accountId === right.accountId &&\n left.accountKind === right.accountKind &&\n left.zoneId === right.zoneId &&\n left.zoneName === right.zoneName;\n\nexport interface Controller {\n readonly attach: (\n connection: Transport.ReusableConnection,\n target: Transport.ProviderTarget,\n ) => void;\n readonly connect: (method: Transport.Method) => void;\n readonly detach: () => void;\n readonly retry: () => void;\n readonly state: State;\n}\n\nexport type Command = Data.TaggedEnum<{\n Attach: { readonly connectionId: string; readonly target: Transport.ProviderTarget };\n Connect: { readonly method: Transport.Method };\n Detach: {};\n Retry: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport function useModel(domain: string): Model {\n const { emit, navigate, runtime } = useDomainKit();\n return useMemo(() => {\n const actionState = Atom.make<State | undefined>(undefined);\n const inspect = runtime.atom(\n Effect.flatMap(Transport.Service, (transport) => transport.connection.inspect({ domain })),\n );\n const state = Atom.make((get): State => {\n const action = get(actionState);\n if (action !== undefined) return action;\n const inspection = get(inspect);\n return AsyncResult.matchWithError(inspection, {\n onDefect: () => failureFromDefect(\"connection.inspect\", \"Provider detection failed\"),\n onError: failureFromError,\n onInitial: () => State.Loading(),\n onSuccess: ({ value }) => value,\n });\n });\n const command = runtime.fn<Command>()((input, get) => {\n if (input._tag === \"Retry\") {\n get.set(actionState, undefined);\n get.refresh(inspect);\n return Effect.void;\n }\n const snapshot = get(state);\n if (input._tag === \"Detach\") {\n if (snapshot._tag !== \"Connected\") return Effect.void;\n get.set(actionState, State.Detaching({ snapshot }));\n return Effect.flatMap(Transport.Service, (transport) =>\n Effect.flatMap(\n transport.connection.detach({\n attachmentId: snapshot.attachment.id,\n preserveDns: true,\n }),\n (result) => {\n const detached: Disconnected = {\n _tag: \"Disconnected\",\n domain: snapshot.attachment.domain,\n provider: snapshot.provider,\n reusableConnections: [],\n };\n return Effect.flatMap(\n Effect.sync(() => {\n get.set(actionState, detached);\n emit(\n LifecycleEvent.DomainDetached({\n connection: snapshot,\n result,\n }),\n );\n }),\n () =>\n transport.connection.inspect({ domain }).pipe(\n Effect.catch(() => Effect.succeed(detached)),\n Effect.tap((refreshed) => Effect.sync(() => get.set(actionState, refreshed))),\n ),\n );\n },\n ),\n ).pipe(\n Effect.catch((error) => Effect.sync(() => get.set(actionState, failureFromError(error)))),\n Effect.asVoid,\n );\n }\n if (snapshot._tag !== \"Disconnected\") return Effect.void;\n const complete = (\n request: Effect.Effect<Transport.ConnectionResult, Transport.Failure, Transport.Service>,\n source: \"connect\" | \"attach\",\n ) =>\n request.pipe(\n Effect.tap((result) =>\n Effect.sync(() => {\n if (result._tag === \"Redirect\") {\n get.set(actionState, State.Redirecting({ snapshot }));\n navigate(result.authorizationUrl);\n } else {\n get.set(actionState, result);\n emit(\n LifecycleEvent.ConnectionEstablished({\n connection: result,\n source,\n }),\n );\n }\n }),\n ),\n Effect.catch((error) => Effect.sync(() => get.set(actionState, failureFromError(error)))),\n Effect.asVoid,\n );\n if (input._tag === \"Attach\") {\n const reusableConnection = snapshot.reusableConnections.find(\n ({ connection }) => connection.id === input.connectionId,\n );\n if (reusableConnection === undefined) return Effect.void;\n const target = reusableConnection.targets.find((candidate) =>\n sameTarget(candidate, input.target),\n );\n if (target === undefined) return Effect.void;\n get.set(actionState, State.Submitting({ snapshot }));\n return complete(\n Effect.flatMap(Transport.Service, (transport) =>\n transport.connection.attach({\n connectionId: input.connectionId,\n domain,\n target,\n }),\n ),\n \"attach\",\n );\n }\n get.set(actionState, State.Submitting({ snapshot }));\n if (input._tag === \"Connect\") {\n return complete(\n Effect.flatMap(Transport.Service, (transport) =>\n transport.connection.connect({\n domain,\n method: input.method,\n providerId: snapshot.provider.id,\n }),\n ),\n \"connect\",\n );\n }\n return Effect.void;\n });\n return { command, state };\n }, [domain, emit, navigate, runtime]);\n}\n\nexport function useController(domain: string): Controller {\n const model = useModel(domain);\n const state = useAtomValue(model.state);\n const execute = useAtomSet(model.command);\n\n return {\n attach: (connection, target) =>\n execute(Command.Attach({ connectionId: connection.connection.id, target })),\n connect: (method) => execute(Command.Connect({ method })),\n detach: () => execute(Command.Detach()),\n retry: () => execute(Command.Retry()),\n state,\n };\n}\n\nexport interface RootState extends Record<string, unknown> {\n readonly status: State[\"_tag\"];\n}\n\nexport interface RootProps extends PartProps<\"div\", RootState> {\n readonly status?: State[\"_tag\"];\n}\n\nexport function Root({ children, status = \"Loading\", ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n {\n children,\n \"data-domainkit-part\": \"connection-root\",\n },\n );\n}\n\nexport interface StatusState extends Record<string, unknown> {\n readonly status: State[\"_tag\"];\n}\n\nexport interface StatusProps extends PartProps<\"div\", StatusState> {\n readonly state: State;\n}\n\nexport function Status({ children, state, ...props }: StatusProps) {\n const { messages } = useDomainKit();\n const text =\n state._tag === \"Loading\"\n ? messages.detectingProvider\n : state._tag === \"Connected\"\n ? messages.connected(state.provider.name)\n : state._tag === \"Detaching\"\n ? messages.detaching\n : state._tag === \"Unsupported\"\n ? messages.automaticUnavailable\n : state._tag === \"Failure\"\n ? state.message\n : state._tag === \"Redirecting\"\n ? messages.openingAuthorization\n : state._tag === \"Submitting\"\n ? messages.connecting\n : messages.providerAvailable(state.provider.name);\n return usePart(\n \"div\",\n props,\n { status: state._tag },\n {\n children: children ?? text,\n \"data-domainkit-part\": \"connection-status\",\n \"data-state\": state._tag,\n },\n );\n}\n\nexport interface TriggerProps extends Omit<\n ComponentPropsWithoutRef<typeof BaseDialog.Trigger>,\n \"children\"\n> {\n readonly children: ReactNode;\n}\n\nexport interface ConnectTriggerProps extends Omit<TriggerProps, \"children\"> {\n readonly children?: ReactNode;\n readonly provider: Provider.Provider;\n}\n\nexport function Trigger({ children, ...props }: TriggerProps) {\n return (\n <BaseDialog.Trigger data-domainkit-part=\"connection-trigger\" {...props}>\n {children}\n </BaseDialog.Trigger>\n );\n}\n\nexport function ConnectTrigger({ children, provider, ...props }: ConnectTriggerProps) {\n const { messages } = useDomainKit();\n return (\n <Trigger {...props} data-domainkit-recipe=\"connect\">\n {children ?? (\n <>\n <Provider.Mark aria-hidden=\"true\" provider={provider} />\n {messages.connectProvider(provider.name)}\n </>\n )}\n </Trigger>\n );\n}\n\nexport interface ActionState extends Record<string, unknown> {\n readonly authentication: \"attach\" | \"integration\" | \"oauth\" | \"token\";\n}\n\nexport interface OAuthActionProps extends PartProps<\"button\", ActionState> {\n readonly controller: Controller;\n readonly label: string;\n}\n\nexport function OAuthAction({ controller, label, ...props }: OAuthActionProps) {\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n return usePart(\n \"button\",\n props,\n { authentication: \"oauth\" },\n {\n children: label,\n \"data-domainkit-part\": \"oauth-connect\",\n disabled: pending,\n onClick: () => controller.connect(Transport.Method.OAuth()),\n type: \"button\",\n },\n );\n}\n\nexport interface IntegrationActionProps extends PartProps<\"button\", ActionState> {\n readonly controller: Controller;\n readonly label: string;\n}\n\nexport function IntegrationAction({ controller, label, ...props }: IntegrationActionProps) {\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n return usePart(\n \"button\",\n props,\n { authentication: \"integration\" },\n {\n children: label,\n \"data-domainkit-part\": \"integration-connect\",\n disabled: pending,\n onClick: () => controller.connect(Transport.Method.Integration()),\n type: \"button\",\n },\n );\n}\n\nexport interface AttachActionProps extends PartProps<\"button\", ActionState> {\n readonly connection: Transport.ReusableConnection;\n readonly controller: Controller;\n readonly label: string;\n readonly target: Transport.ProviderTarget;\n}\n\nexport function AttachAction({\n connection,\n controller,\n label,\n target,\n ...props\n}: AttachActionProps) {\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n return usePart(\n \"button\",\n props,\n { authentication: \"attach\" },\n {\n children: label,\n \"data-domainkit-part\": \"attach-target\",\n disabled: pending,\n onClick: () => controller.attach(connection, target),\n type: \"button\",\n },\n );\n}\n\nexport interface TokenActionProps extends Omit<PartProps<\"form\", ActionState>, \"method\"> {\n readonly controller: Controller;\n readonly method: Extract<Transport.AuthenticationMethod, { readonly _tag: \"Token\" }>;\n}\n\nexport function TokenAction({ controller, method, ...props }: TokenActionProps) {\n const { messages } = useDomainKit();\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n const [token, setToken] = useState(\"\");\n const [parameters, setParameters] = useState<Readonly<Record<string, string>>>({});\n const submit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (token.length > 0) {\n const populated = Object.fromEntries(\n Object.entries(parameters).filter(([, value]) => value.length > 0),\n );\n controller.connect(\n Transport.Method.Token({\n token,\n ...(Object.keys(populated).length === 0 ? {} : { parameters: populated }),\n }),\n );\n }\n };\n const missingRequiredParameter = method.parameters?.some(\n (parameter) => parameter.required === true && !parameters[parameter.key],\n );\n return usePart(\n \"form\",\n props,\n { authentication: \"token\" },\n {\n children: (\n <>\n {method.parameters?.map((parameter) => (\n <label key={parameter.key}>\n {parameter.label}\n <input\n name={parameter.key}\n disabled={pending}\n onChange={(event) => {\n const value = event.currentTarget.value;\n setParameters((current) => ({\n ...current,\n [parameter.key]: value,\n }));\n }}\n placeholder={parameter.placeholder}\n required={parameter.required}\n type=\"text\"\n value={parameters[parameter.key] ?? \"\"}\n />\n {parameter.description === undefined ? null : <small>{parameter.description}</small>}\n </label>\n ))}\n <label>\n {messages.tokenLabel}\n <input\n autoComplete=\"off\"\n disabled={pending}\n name=\"token\"\n onChange={(event) => setToken(event.currentTarget.value)}\n placeholder={method.placeholder}\n type=\"password\"\n value={token}\n />\n </label>\n <button\n disabled={pending || token.length === 0 || missingRequiredParameter === true}\n type=\"submit\"\n >\n {method.label}\n </button>\n </>\n ),\n \"data-domainkit-part\": \"token-connect\",\n onSubmit: submit,\n },\n );\n}\n\nexport interface DialogProps {\n readonly controller: Controller;\n readonly snapshot: Disconnected;\n}\n\nexport const targetLabel = (target: Transport.ProviderTarget): string =>\n `${target.evidence?.accountName ?? target.accountId} · ${target.zoneName}`;\n\nexport function Dialog({ controller, snapshot }: DialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n const integrationMethods = snapshot.provider.authentication.filter(\n (method): method is Extract<Transport.AuthenticationMethod, { readonly _tag: \"Integration\" }> =>\n method._tag === \"Integration\",\n );\n const oauthMethods = snapshot.provider.authentication.filter(\n (method): method is Extract<Transport.AuthenticationMethod, { readonly _tag: \"OAuth\" }> =>\n method._tag === \"OAuth\",\n );\n const tokenMethods = snapshot.provider.authentication.filter(\n (method): method is Extract<Transport.AuthenticationMethod, { readonly _tag: \"Token\" }> =>\n method._tag === \"Token\",\n );\n const hasProviderAccountPath =\n integrationMethods.length > 0 ||\n oauthMethods.length > 0 ||\n snapshot.reusableConnections.length > 0;\n return (\n <BaseDialog.Portal container={portalContainer}>\n <BaseDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseDialog.Popup\n data-domainkit-part=\"connection-dialog\"\n data-domainkit-root=\"\"\n data-color-scheme={colorScheme}\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <Provider.Mark provider={snapshot.provider} />\n <div data-domainkit-part=\"dialog-heading\">\n <BaseDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.dialogTitle(snapshot.provider.name)}\n </BaseDialog.Title>\n <BaseDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.dialogDescription(snapshot.domain)}\n </BaseDialog.Description>\n </div>\n {pending ? null : (\n <BaseDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-body\">\n {hasProviderAccountPath ? (\n <div data-domainkit-part=\"provider-authentication\">\n {integrationMethods.map((method) => (\n <IntegrationAction controller={controller} key={method._tag} label={method.label} />\n ))}\n {oauthMethods.map((method) => (\n <OAuthAction controller={controller} key={method._tag} label={method.label} />\n ))}\n {snapshot.reusableConnections.map((connection) => (\n <section\n data-connection-id={connection.connection.id}\n data-domainkit-part=\"reusable-connection\"\n key={connection.connection.id}\n >\n <div data-domainkit-part=\"reusable-connection-heading\">\n <strong>{messages.existingConnection}</strong>\n <span>{connection.connection.providerId}</span>\n </div>\n <div\n data-domainkit-part=\"target-list\"\n data-state={\n connection.targets.length === 0\n ? \"unavailable\"\n : connection.targets.length === 1\n ? \"unique\"\n : \"ambiguous\"\n }\n >\n {connection.targets.length === 0 ? (\n <p data-domainkit-part=\"target-unavailable\">{messages.targetUnavailable}</p>\n ) : (\n connection.targets.map((target) => (\n <AttachAction\n connection={connection}\n controller={controller}\n key={`${target.accountId}:${target.zoneId}`}\n label={messages.attachTarget(targetLabel(target))}\n target={target}\n />\n ))\n )}\n </div>\n </section>\n ))}\n </div>\n ) : null}\n {hasProviderAccountPath && tokenMethods.length > 0 ? (\n <div\n aria-label={messages.authenticationAlternative}\n data-domainkit-part=\"authentication-separator\"\n role=\"separator\"\n >\n <span aria-hidden=\"true\">{messages.authenticationAlternative}</span>\n </div>\n ) : null}\n {tokenMethods.map((method) => (\n <TokenAction controller={controller} key={method._tag} method={method} />\n ))}\n </div>\n {pending ? null : (\n <div data-domainkit-part=\"dialog-footer\">\n <BaseDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseDialog.Close>\n </div>\n )}\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n );\n}\n\nexport interface FlowProps extends Omit<RootProps, \"children\"> {\n readonly domain: string;\n}\n\nexport function Flow({ domain, ...props }: FlowProps) {\n const controller = useController(domain);\n const state = controller.state;\n const snapshot =\n state._tag === \"Disconnected\"\n ? state\n : state._tag === \"Submitting\" || state._tag === \"Redirecting\"\n ? state.snapshot\n : undefined;\n return (\n <Root {...props} status={state._tag}>\n <Status state={state} />\n {state._tag === \"Failure\" && state.retry !== \"never\" ? (\n <RetryAction\n controller={controller}\n kind={state.retry === \"after-user-action\" ? \"after-user-action\" : \"retry\"}\n />\n ) : null}\n {snapshot === undefined ? null : (\n <BaseDialog.Root\n onOpenChange={(open, eventDetails) => {\n if (!open && (state._tag === \"Submitting\" || state._tag === \"Redirecting\")) {\n eventDetails.cancel();\n }\n }}\n >\n <ConnectTrigger provider={snapshot.provider} />\n <Dialog controller={controller} snapshot={snapshot} />\n </BaseDialog.Root>\n )}\n </Root>\n );\n}\n\nexport interface RetryActionProps extends PartProps<\"button\", { readonly status: \"Failure\" }> {\n readonly controller: Controller;\n readonly kind?: \"after-user-action\" | \"retry\";\n}\n\nexport function RetryAction({ controller, kind = \"retry\", ...props }: RetryActionProps) {\n const { messages } = useDomainKit();\n return usePart(\n \"button\",\n props,\n { status: \"Failure\" },\n {\n children: kind === \"after-user-action\" ? messages.checkAgain : messages.retry,\n \"data-domainkit-part\": \"connection-retry\",\n onClick: controller.retry,\n type: \"button\",\n },\n );\n}\n\nexport interface CardProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Card({ status, ...props }: CardProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"connected-card\", \"data-state\": status },\n );\n}\n\nexport interface CardIdentityProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function CardIdentity({ status, ...props }: CardIdentityProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"connected-identity\", \"data-state\": status },\n );\n}\n\nexport interface CardActionsProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function CardActions({ status, ...props }: CardActionsProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"connected-actions\", \"data-state\": status },\n );\n}\n\nexport interface DisconnectDialogProps {\n readonly connection: Transport.Connected;\n readonly controller: Controller;\n readonly onOpenChange?: (open: boolean) => void;\n readonly open?: boolean;\n readonly trigger?: ReactElement | null;\n}\n\nexport function DisconnectDialog({\n connection,\n controller,\n onOpenChange,\n open: openProp,\n trigger,\n}: DisconnectDialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const [internalOpen, setInternalOpen] = useState(false);\n const open = openProp ?? internalOpen;\n const setOpen = (nextOpen: boolean) => {\n if (openProp === undefined) setInternalOpen(nextOpen);\n onOpenChange?.(nextOpen);\n };\n const detaching = controller.state._tag === \"Detaching\";\n return (\n <BaseAlertDialog.Root\n onOpenChange={(nextOpen, eventDetails) => {\n if (!nextOpen && detaching) {\n eventDetails.cancel();\n return;\n }\n setOpen(nextOpen);\n }}\n open={open}\n >\n {trigger === null ? null : (\n <BaseAlertDialog.Trigger\n data-domainkit-part=\"disconnect-trigger\"\n {...(trigger === undefined ? {} : { render: trigger })}\n >\n {messages.disconnectDomain}\n </BaseAlertDialog.Trigger>\n )}\n <BaseAlertDialog.Portal container={portalContainer}>\n <BaseAlertDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseAlertDialog.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"disconnect-dialog\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <div data-domainkit-part=\"dialog-heading\">\n <BaseAlertDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.disconnectTitle(connection.provider.name)}\n </BaseAlertDialog.Title>\n <BaseAlertDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.disconnectConsent}\n </BaseAlertDialog.Description>\n </div>\n {detaching ? null : (\n <BaseAlertDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseAlertDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-footer\">\n {detaching ? null : (\n <BaseAlertDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseAlertDialog.Close>\n )}\n <button\n data-domainkit-part=\"disconnect-action\"\n disabled={detaching}\n onClick={() => controller.detach()}\n type=\"button\"\n >\n {detaching ? messages.detaching : messages.disconnectDomain}\n </button>\n </div>\n </BaseAlertDialog.Popup>\n </BaseAlertDialog.Portal>\n </BaseAlertDialog.Root>\n );\n}\n\nexport type Connected = Transport.Connected;\n","import { useEffect, useRef, useState, type ReactElement, type ReactNode } from \"react\";\nimport type { Transport } from \"domainkit\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useIcons } from \"./icons.tsx\";\n\nexport const copyText = (value: string): Promise<boolean> => {\n if (typeof navigator === \"undefined\" || navigator.clipboard === undefined) {\n return Promise.resolve(false);\n }\n return navigator.clipboard.writeText(value).then(\n () => true,\n () => false,\n );\n};\n\nconst downloadText = (filename: string, contents: string): void => {\n if (typeof document === \"undefined\") return;\n const blob = new Blob([contents], { type: \"text/plain;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.download = filename;\n anchor.href = url;\n document.body.append(anchor);\n anchor.click();\n anchor.remove();\n URL.revokeObjectURL(url);\n};\n\nconst absoluteDomainName = (value: string): string => (value.endsWith(\".\") ? value : `${value}.`);\n\nconst textEncoder = new TextEncoder();\n\nconst escapeTxtCharacter = (character: string): string => {\n if (character === '\"' || character === \"\\\\\") return `\\\\${character}`;\n const codePoint = character.codePointAt(0);\n if (codePoint !== undefined && (codePoint < 32 || codePoint === 127)) {\n return `\\\\${codePoint.toString().padStart(3, \"0\")}`;\n }\n return character;\n};\n\nconst txtValue = (value: string): string => {\n const chunks: Array<string> = [];\n let chunk = \"\";\n let byteLength = 0;\n for (const character of value) {\n const characterByteLength = textEncoder.encode(character).byteLength;\n if (byteLength + characterByteLength > 255) {\n chunks.push(chunk);\n chunk = \"\";\n byteLength = 0;\n }\n chunk += escapeTxtCharacter(character);\n byteLength += characterByteLength;\n }\n chunks.push(chunk);\n return chunks.map((part) => `\"${part}\"`).join(\" \");\n};\n\nconst srvValue = (value: string): string => {\n const fields = value.trim().split(/\\s+/);\n if (fields.length !== 3) throw new Error(`Invalid SRV value: ${value}`);\n const [weight, port, target] = fields;\n if (weight === undefined || port === undefined || target === undefined) {\n throw new Error(`Invalid SRV value: ${value}`);\n }\n return `${weight} ${port} ${absoluteDomainName(target)}`;\n};\n\nconst zoneValue = (record: Transport.DnsRecord): string => {\n switch (record.type.toUpperCase()) {\n case \"CNAME\":\n case \"MX\":\n case \"NS\":\n case \"PTR\":\n return absoluteDomainName(record.value);\n case \"SRV\":\n return srvValue(record.value);\n case \"TXT\":\n return txtValue(record.value);\n default:\n return record.value;\n }\n};\n\ntype LeafState = Record<string, unknown>;\n\nfunction leafPart<Tag extends keyof React.JSX.IntrinsicElements>(\n defaultTagName: Tag,\n part: string,\n) {\n return function Leaf(props: PartProps<Tag, LeafState>): ReactElement {\n return usePart(defaultTagName, props, {}, { \"data-domainkit-part\": part });\n };\n}\n\nexport interface CopyController {\n readonly copied: boolean;\n readonly copy: () => void;\n}\n\nexport function useCopy(value: string, resetAfter = 2000): CopyController {\n const [copied, setCopied] = useState(false);\n const reset = useRef<ReturnType<typeof setTimeout>>(undefined);\n useEffect(() => () => clearTimeout(reset.current), []);\n return {\n copied,\n copy: () => {\n void copyText(value).then((ok) => {\n if (!ok) return;\n setCopied(true);\n clearTimeout(reset.current);\n reset.current = setTimeout(() => setCopied(false), resetAfter);\n });\n },\n };\n}\n\nexport interface CopyValueProps extends PartProps<\"span\", { readonly copied: boolean }> {\n readonly copiedIcon?: ReactNode;\n readonly copiedLabel?: string;\n readonly copyIcon?: ReactNode;\n readonly copyLabel?: string;\n readonly value: string;\n}\n\nexport function CopyValue({\n copiedIcon,\n copiedLabel = \"Copied\",\n copyIcon,\n copyLabel = \"Copy\",\n value,\n ...props\n}: CopyValueProps) {\n const icons = useIcons();\n const controller = useCopy(value);\n const copied = controller.copied;\n return usePart(\n \"span\",\n props,\n { copied },\n {\n children: (\n <>\n <code>{value}</code>\n <button\n aria-label={`${copied ? copiedLabel : copyLabel} ${value}`}\n data-domainkit-part=\"copy-action\"\n onClick={controller.copy}\n type=\"button\"\n >\n <span\n aria-hidden=\"true\"\n data-domainkit-part=\"copy-glyph\"\n data-icon=\"\"\n data-state=\"idle\"\n >\n {copyIcon ?? icons.copy}\n </span>\n <span\n aria-hidden=\"true\"\n data-domainkit-part=\"copy-glyph\"\n data-icon=\"\"\n data-state=\"done\"\n >\n {copiedIcon ?? icons.copied}\n </span>\n </button>\n </>\n ),\n \"data-copied\": copied ? \"\" : undefined,\n \"data-domainkit-part\": \"copy-value\",\n },\n );\n}\n\nexport interface ZoneFileProps extends PartProps<\"div\", { readonly count: number }> {\n readonly copiedIcon?: ReactNode;\n readonly copiedLabel?: string;\n readonly copyIcon?: ReactNode;\n readonly copyLabel?: string;\n readonly domain: string;\n readonly downloadIcon?: ReactNode;\n readonly downloadLabel?: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n}\n\nexport function ZoneFile({\n copiedIcon,\n copiedLabel = \"Copied\",\n copyIcon,\n copyLabel = \"Copy zone\",\n domain,\n downloadIcon,\n downloadLabel = \"Download\",\n records,\n ...props\n}: ZoneFileProps) {\n const icons = useIcons();\n const zone = toZoneFile(records);\n const controller = useCopy(zone);\n const copied = controller.copied;\n return usePart(\n \"div\",\n props,\n { count: records.length },\n {\n children: (\n <>\n <button\n aria-label={copied ? copiedLabel : copyLabel}\n data-domainkit-part=\"zone-copy\"\n onClick={controller.copy}\n type=\"button\"\n >\n <span aria-hidden=\"true\" data-icon=\"inline-start\">\n {copied ? (copiedIcon ?? icons.copied) : (copyIcon ?? icons.copy)}\n </span>\n {copied ? copiedLabel : copyLabel}\n </button>\n <button\n aria-label={downloadLabel}\n data-domainkit-part=\"zone-download\"\n onClick={() => downloadZoneFile(domain, records)}\n type=\"button\"\n >\n <span aria-hidden=\"true\" data-icon=\"inline-start\">\n {downloadIcon ?? icons.download}\n </span>\n {downloadLabel}\n </button>\n </>\n ),\n \"data-domainkit-part\": \"zone-file\",\n },\n );\n}\n\nexport interface StatusProps extends PartProps<\n \"span\",\n { readonly status: Transport.ObservationEvidence[\"_tag\"] }\n> {\n readonly evidence: Transport.ObservationEvidence;\n}\n\nexport function Status({ evidence, ...props }: StatusProps) {\n return usePart(\n \"span\",\n props,\n { status: evidence._tag },\n {\n children: evidence._tag,\n \"data-domainkit-part\": \"record-status\",\n \"data-status\": evidence._tag,\n },\n );\n}\n\nexport interface PriorityProps extends PartProps<\"span\", { readonly priority: number }> {\n readonly priority?: number;\n}\n\nexport function Priority({ children, priority = 0, ...props }: PriorityProps) {\n return usePart(\n \"span\",\n props,\n { priority },\n {\n children: children ?? `Priority ${priority}`,\n \"data-domainkit-part\": \"record-priority\",\n },\n );\n}\n\nexport const Header = leafPart(\"thead\", \"records-header\");\nexport const Body = leafPart(\"tbody\", \"records-body\");\nexport const Footer = leafPart(\"tfoot\", \"records-footer\");\nexport const Row = leafPart(\"tr\", \"records-row\");\nexport const Head = leafPart(\"th\", \"records-head\");\nexport const Cell = leafPart(\"td\", \"records-cell\");\nexport const Caption = leafPart(\"caption\", \"records-caption\");\nexport const Value = leafPart(\"span\", \"record-value\");\nexport const CardHeader = leafPart(\"div\", \"record-card-head\");\nexport const CardTitle = leafPart(\"strong\", \"record-card-title\");\nexport const CardContent = leafPart(\"dl\", \"record-card-content\");\n\nexport interface RootProps extends PartProps<\"table\", { readonly count: number }> {\n readonly count?: number;\n}\n\nexport function Root({ count = 0, ...props }: RootProps) {\n return (\n <div data-domainkit-part=\"records-panel\">\n {usePart(\"table\", props, { count }, { \"data-domainkit-part\": \"records-table\" })}\n </div>\n );\n}\n\nexport interface CardProps extends PartProps<\"section\", { readonly recordId: string }> {\n readonly copiedIcon?: ReactNode;\n readonly copyIcon?: ReactNode;\n readonly evidence?: ReadonlyArray<Transport.ObservationEvidence>;\n readonly record: Transport.DnsRecord;\n}\n\nexport function Card({ copiedIcon, copyIcon, evidence, record, ...props }: CardProps) {\n const matching =\n evidence === undefined ? [] : evidence.filter((item) => item.recordId === record.id);\n return usePart(\n \"section\",\n props,\n { recordId: record.id },\n {\n children: (\n <>\n <CardHeader>\n <CardTitle>{record.type}</CardTitle>\n {matching.map((item, index) => (\n <Status evidence={item} key={`${item._tag}-${index}`} />\n ))}\n </CardHeader>\n <CardContent>\n <div>\n <dt>Name</dt>\n <dd>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.name} />\n </dd>\n </div>\n <div>\n <dt>Value</dt>\n <dd>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.value} />\n {record.priority === undefined ? null : <Priority priority={record.priority} />}\n </dd>\n </div>\n </CardContent>\n </>\n ),\n \"data-domainkit-part\": \"record-card\",\n },\n );\n}\n\nexport interface TableProps extends PartProps<\"table\", { readonly count: number }> {\n readonly copiedIcon?: ReactNode;\n readonly copyIcon?: ReactNode;\n readonly evidence?: ReadonlyArray<Transport.ObservationEvidence>;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n}\n\nexport function Table({ copiedIcon, copyIcon, evidence, records, ...props }: TableProps) {\n const status = evidence !== undefined;\n return (\n <Root count={records.length} {...props}>\n <Header>\n <Row>\n <Head scope=\"col\">Type</Head>\n <Head scope=\"col\">Name</Head>\n <Head scope=\"col\">Value</Head>\n {status ? (\n <Head data-column=\"status\" scope=\"col\">\n Status\n </Head>\n ) : null}\n </Row>\n </Header>\n <Body>\n {records.map((record) => (\n <Row key={record.id}>\n <Cell>{record.type}</Cell>\n <Cell>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.name} />\n </Cell>\n <Cell>\n <Value>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.value} />\n {record.priority === undefined ? null : <Priority priority={record.priority} />}\n </Value>\n </Cell>\n {status ? (\n <Cell data-column=\"status\">\n {evidence\n .filter((item) => item.recordId === record.id)\n .map((item, index) => (\n <Status evidence={item} key={`${item._tag}-${index}`} />\n ))}\n </Cell>\n ) : null}\n </Row>\n ))}\n </Body>\n </Root>\n );\n}\n\nexport const toZoneFile = (records: ReadonlyArray<Transport.DnsRecord>): string =>\n `${records\n .map(\n (record) =>\n `${absoluteDomainName(record.name)} IN ${record.type} ${record.priority === undefined ? \"\" : `${record.priority} `}${zoneValue(record)}`,\n )\n .join(\"\\n\")}\\n`;\n\nexport const downloadZoneFile = (\n domain: string,\n records: ReadonlyArray<Transport.DnsRecord>,\n): void => downloadText(`${domain}.txt`, toZoneFile(records));\n\nexport type DnsRecord = Transport.DnsRecord;\nexport type ObservationEvidence = Transport.ObservationEvidence;\n","import { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { useMemo, useRef, type ReactElement } from \"react\";\n\nimport { failureFromError, recordsIdentity, type Failure } from \"./atom.ts\";\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport { Event as LifecycleEvent } from \"./lifecycle.ts\";\nimport * as Operations from \"./operations.tsx\";\nimport * as Records from \"./records.tsx\";\n\ntype LocalState = Data.TaggedEnum<{\n Applying: { readonly plan: Transport.ProvisioningPlan };\n Complete: { readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" }> };\n Idle: {};\n Partial: { readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Partial\" }> };\n Planning: {};\n Review: { readonly plan: Transport.ProvisioningPlan };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State =\n | LocalState\n | Extract<Transport.ApplyResult, { readonly _tag: \"Stale\" }>\n | Failure;\n\nexport interface Controller {\n readonly apply: () => void;\n readonly dismiss: () => void;\n readonly plan: () => void;\n readonly retry: () => void;\n readonly state: State;\n}\n\nexport type Command = Data.TaggedEnum<{\n Apply: {};\n Dismiss: {};\n Plan: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport function useModel(\n connection: Transport.Connected,\n records: ReadonlyArray<Transport.DnsRecord>,\n onApplied?: (\n result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" | \"Partial\" }>,\n ) => void,\n): Model {\n const { emit, runtime } = useDomainKit();\n const recordKey = recordsIdentity(records);\n const onAppliedRef = useRef(onApplied);\n onAppliedRef.current = onApplied;\n return useMemo(() => {\n const state = Atom.make<State>(State.Idle());\n const execute = runtime.fn<Command>()((command, get) => {\n const current = get(state);\n if (command._tag === \"Dismiss\") {\n if (current._tag === \"Planning\" || current._tag === \"Applying\") return Effect.void;\n get.set(state, State.Idle());\n return Effect.void;\n }\n if (command._tag === \"Plan\") {\n if (current._tag === \"Planning\" || current._tag === \"Applying\") return Effect.void;\n get.set(state, State.Planning());\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.provisioning.plan({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n records,\n }),\n ).pipe(\n Effect.tap((plan) => Effect.sync(() => get.set(state, State.Review({ plan })))),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n }\n if (\n current._tag !== \"Review\" ||\n current.plan.operations.some((operation) => operation._tag === \"Conflict\")\n )\n return Effect.void;\n const plan = current.plan;\n get.set(state, State.Applying({ plan }));\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.provisioning.apply({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n planDigest: plan.digest,\n }),\n ).pipe(\n Effect.tap((result) =>\n Effect.sync(() => {\n if (result._tag === \"Applied\") {\n get.set(state, State.Complete({ result }));\n emit(LifecycleEvent.RecordsApplied({ connection, result }));\n onAppliedRef.current?.(result);\n } else if (result._tag === \"Partial\") {\n get.set(state, State.Partial({ result }));\n emit(LifecycleEvent.RecordsPartiallyApplied({ connection, result }));\n onAppliedRef.current?.(result);\n } else {\n get.set(state, result);\n }\n }),\n ),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n });\n return { command: execute, state };\n }, [connection.attachment.domain, connection.attachment.id, emit, recordKey, runtime]);\n}\n\nexport function useController(\n connection: Transport.Connected,\n records: ReadonlyArray<Transport.DnsRecord>,\n onApplied?: (\n result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" | \"Partial\" }>,\n ) => void,\n): Controller {\n const model = useModel(connection, records, onApplied);\n const state = useAtomValue(model.state);\n const execute = useAtomSet(model.command);\n\n return {\n apply: () => execute(Command.Apply()),\n dismiss: () => execute(Command.Dismiss()),\n plan: () => execute(Command.Plan()),\n retry: () => execute(Command.Plan()),\n state,\n };\n}\n\nexport interface RootProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Root({ status, ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"provisioning-flow\", \"data-state\": status },\n );\n}\n\nexport function Outcome({ state }: { readonly state: State }) {\n const { messages } = useDomainKit();\n if (state._tag === \"Partial\" || state._tag === \"Failure\" || state._tag === \"Stale\") {\n return (\n <p data-domainkit-part=\"flow-outcome\" data-tone=\"danger\" role=\"alert\">\n {state._tag === \"Partial\" ? messages.recordsPartiallyApplied : state.message}\n </p>\n );\n }\n return null;\n}\n\nexport interface DialogProps {\n readonly controller: Controller;\n readonly trigger?: ReactElement;\n}\n\nexport function Dialog({ controller, trigger }: DialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const state = controller.state;\n const planRef = useRef<Transport.ProvisioningPlan | undefined>(undefined);\n if (state._tag === \"Idle\") planRef.current = undefined;\n if (state._tag === \"Review\" || state._tag === \"Applying\") planRef.current = state.plan;\n const plan = planRef.current;\n const busy = state._tag === \"Planning\" || state._tag === \"Applying\";\n const open = state._tag !== \"Idle\" && state._tag !== \"Complete\";\n return (\n <BaseDialog.Root\n onOpenChange={(nextOpen, eventDetails) => {\n if (!nextOpen && busy) {\n eventDetails.cancel();\n return;\n }\n if (!nextOpen) controller.dismiss();\n }}\n open={open}\n >\n <BaseDialog.Trigger\n data-domainkit-part=\"plan-trigger\"\n disabled={state._tag !== \"Idle\"}\n onClick={() => controller.plan()}\n {...(trigger === undefined ? {} : { render: trigger })}\n >\n {messages.reviewDns}\n </BaseDialog.Trigger>\n <BaseDialog.Portal container={portalContainer}>\n <BaseDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseDialog.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"plan-dialog\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <div data-domainkit-part=\"dialog-heading\">\n <BaseDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.reviewDns}\n </BaseDialog.Title>\n <BaseDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.planConsent}\n </BaseDialog.Description>\n </div>\n {busy ? null : (\n <BaseDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-body\">\n {plan === undefined ? (\n <p data-domainkit-part=\"dialog-progress\" role=\"status\">\n {messages.planningDns}\n </p>\n ) : (\n <Operations.List lifecycle=\"provisioning\" operations={plan.operations} />\n )}\n <Outcome state={state} />\n </div>\n <div data-domainkit-part=\"dialog-footer\">\n {busy ? (\n <button data-domainkit-part=\"plan-apply\" disabled type=\"button\">\n {state._tag === \"Applying\" ? messages.applyingDns : messages.planningDns}\n </button>\n ) : state._tag === \"Review\" && plan !== undefined ? (\n <>\n <BaseDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseDialog.Close>\n <button\n data-domainkit-part=\"plan-apply\"\n disabled={plan.operations.some((operation) => operation._tag === \"Conflict\")}\n onClick={() => controller.apply()}\n type=\"button\"\n >\n {messages.applyDns}\n </button>\n </>\n ) : (\n <>\n <BaseDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.close}\n </BaseDialog.Close>\n <button\n data-domainkit-part=\"provisioning-retry\"\n onClick={() => controller.retry()}\n type=\"button\"\n >\n {messages.retry}\n </button>\n </>\n )}\n </div>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\n\nexport function RetryAction({ controller }: { readonly controller: Controller }) {\n const { messages } = useDomainKit();\n const state = controller.state;\n if (state._tag !== \"Failure\" && state._tag !== \"Stale\" && state._tag !== \"Partial\") return null;\n return (\n <button\n data-domainkit-part=\"provisioning-retry\"\n onClick={() => controller.retry()}\n type=\"button\"\n >\n {messages.retry}\n </button>\n );\n}\n\nexport interface FlowProps extends Omit<RootProps, \"status\"> {\n readonly connection: Transport.Connected;\n readonly onApplied?: (\n result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" | \"Partial\" }>,\n ) => void;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n readonly showRecords?: boolean;\n readonly trigger?: ReactElement;\n}\n\nexport function Flow({\n connection,\n onApplied,\n records,\n showRecords = true,\n trigger,\n ...props\n}: FlowProps) {\n const controller = useController(connection, records, onApplied);\n const state = controller.state;\n return (\n <Root status={state._tag} {...props}>\n {showRecords ? <Records.Table records={records} /> : null}\n <Dialog controller={controller} {...(trigger === undefined ? {} : { trigger })} />\n </Root>\n );\n}\n","import { Popover as BasePopover } from \"@base-ui/react/popover\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { useMemo } from \"react\";\n\nimport { failureFromError, recordsIdentity, type Failure } from \"./atom.ts\";\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport { Status as RecordStatus } from \"./records.tsx\";\n\ntype LocalState = Data.TaggedEnum<{\n Failed: { readonly failure: Failure; readonly previous?: Transport.Observation };\n Idle: {};\n Observing: { readonly previous?: Transport.Observation };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State = LocalState | Transport.Observation;\n\nexport interface ObserveConfig {\n readonly connection?: Transport.Connected;\n readonly domain: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n readonly sources?: {\n readonly provider?: boolean;\n readonly publicDns?: boolean;\n };\n}\n\nexport type Command = Data.TaggedEnum<{\n Observe: {};\n Reset: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport interface Controller {\n readonly observe: () => void;\n readonly reset: () => void;\n readonly state: State;\n}\n\nexport function useModel(config: ObserveConfig): Model {\n const { runtime } = useDomainKit();\n const provider = config.sources?.provider ?? config.connection !== undefined;\n const publicDns = config.sources?.publicDns ?? true;\n const recordKey = recordsIdentity(config.records);\n return useMemo(() => {\n const state = Atom.make<State>(State.Idle());\n const observe = runtime.fn<Command>()((command, get) => {\n if (command._tag === \"Reset\") {\n get.set(state, State.Idle());\n return Effect.void;\n }\n const current = get(state);\n if (current._tag === \"Observing\") return Effect.void;\n const previous =\n current._tag === \"Observation\"\n ? current\n : current._tag === \"Failed\"\n ? current.previous\n : undefined;\n get.set(state, State.Observing({ ...(previous === undefined ? {} : { previous }) }));\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.verification.observe({\n ...(config.connection === undefined\n ? {}\n : { attachmentId: config.connection.attachment.id }),\n domain: config.domain,\n records: config.records,\n sources: { provider, publicDns },\n }),\n ).pipe(\n Effect.tap((observation) => Effect.sync(() => get.set(state, observation))),\n Effect.catch((error) =>\n Effect.sync(() =>\n get.set(\n state,\n State.Failed({\n failure: failureFromError(error),\n ...(previous === undefined ? {} : { previous }),\n }),\n ),\n ),\n ),\n Effect.asVoid,\n );\n });\n return { command: observe, state };\n }, [config.connection?.attachment.id, config.domain, provider, publicDns, recordKey, runtime]);\n}\n\nexport function useController(config: ObserveConfig): Controller {\n const model = useModel(config);\n const state = useAtomValue(model.state);\n const dispatch = useAtomSet(model.command);\n const observe = () => dispatch(Command.Observe());\n const reset = () => dispatch(Command.Reset());\n return { observe, reset, state };\n}\n\nconst evidenceNote = (evidence: Transport.ObservationEvidence): string | undefined => {\n switch (evidence._tag) {\n case \"Mismatch\":\n case \"Unavailable\":\n return evidence.message;\n case \"Found\":\n case \"Missing\":\n return undefined;\n default: {\n const _exhaustive: never = evidence;\n return _exhaustive;\n }\n }\n};\n\nconst observationGroups = (\n observation: Transport.Observation,\n): ReadonlyArray<{\n readonly evidence: ReadonlyArray<Transport.ObservationEvidence>;\n readonly label: string;\n}> =>\n [\n { evidence: observation.provider, label: \"Provider\" },\n { evidence: observation.publicDns, label: \"Public DNS\" },\n ].filter((group) => group.evidence.length > 0);\n\nexport interface RootProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Root({ status, ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"verification-status\", \"data-state\": status },\n );\n}\n\nexport function Evidence({ observation }: { readonly observation: Transport.Observation }) {\n return (\n <div data-domainkit-part=\"observation-list\">\n {observationGroups(observation).map((group) => (\n <section data-domainkit-part=\"observation-group\" key={group.label}>\n <h3 data-domainkit-part=\"observation-source\">{group.label}</h3>\n <ul>\n {group.evidence.map((evidence, index) => {\n const note = evidenceNote(evidence);\n return (\n <li key={`${evidence._tag}-${evidence.recordId}-${index}`}>\n <div data-domainkit-part=\"observation-row\">\n <span data-domainkit-part=\"observation-record\">{evidence.recordId}</span>\n <RecordStatus evidence={evidence} />\n </div>\n {note === undefined ? null : <p data-domainkit-part=\"observation-note\">{note}</p>}\n </li>\n );\n })}\n </ul>\n </section>\n ))}\n </div>\n );\n}\n\nexport function Outcome({ state }: { readonly state: State }) {\n if (state._tag !== \"Failed\") return null;\n return (\n <p data-domainkit-part=\"flow-outcome\" data-tone=\"danger\" role=\"alert\">\n {state.failure.message}\n </p>\n );\n}\n\nexport interface ObserveActionProps extends PartProps<\n \"button\",\n { readonly status: State[\"_tag\"] }\n> {\n readonly controller: Controller;\n}\n\nexport function ObserveAction({ controller, ...props }: ObserveActionProps) {\n const { messages } = useDomainKit();\n const observing = controller.state._tag === \"Observing\";\n return usePart(\n \"button\",\n props,\n { status: controller.state._tag },\n {\n \"aria-busy\": observing,\n children: messages.checkDns,\n \"data-domainkit-part\": \"observe-action\",\n \"data-loading\": observing ? \"\" : undefined,\n disabled: observing,\n onClick: () => controller.observe(),\n type: \"button\",\n },\n );\n}\n\nexport interface StatusProps extends Omit<RootProps, \"status\"> {\n readonly config: ObserveConfig;\n}\n\nexport function Status({ config, ...props }: StatusProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const controller = useController(config);\n const state = controller.state;\n const observation =\n state._tag === \"Observation\"\n ? state\n : state._tag === \"Observing\" || state._tag === \"Failed\"\n ? state.previous\n : undefined;\n return (\n <Root status={state._tag} {...props}>\n <BasePopover.Root>\n <BasePopover.Trigger render={<ObserveAction controller={controller} />} />\n <BasePopover.Portal container={portalContainer}>\n <BasePopover.Positioner\n align=\"end\"\n data-domainkit-part=\"verification-positioner\"\n sideOffset={6}\n >\n <BasePopover.Popup\n aria-label={messages.checkDns}\n aria-busy={state._tag === \"Observing\"}\n data-color-scheme={colorScheme}\n data-domainkit-part=\"verification-popover\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <BasePopover.Arrow data-domainkit-part=\"verification-arrow\" />\n {state._tag === \"Observing\" ? (\n <p data-domainkit-part=\"verification-progress\" role=\"status\">\n {messages.checkingDns}\n </p>\n ) : null}\n {observation === undefined ? null : <Evidence observation={observation} />}\n <Outcome state={state} />\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n </BasePopover.Root>\n </Root>\n );\n}\n\nexport type Observation = Transport.Observation;\n","import { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { Menu as BaseMenu } from \"@base-ui/react/menu\";\nimport type { Transport } from \"domainkit\";\nimport { useRef, useState, type RefObject } from \"react\";\n\nimport * as Cleanup from \"./cleanup.tsx\";\nimport * as Connection from \"./connection.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport * as Provider from \"./provider.tsx\";\nimport * as Provisioning from \"./provisioning.tsx\";\nimport * as Records from \"./records.tsx\";\nimport * as Verification from \"./verification.tsx\";\n\nexport interface FlowProps {\n readonly domain: string;\n readonly receiptId?: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n}\n\nexport function Flow({ domain, receiptId, records }: FlowProps) {\n const controller = Connection.useController(domain);\n const state = controller.state;\n const connected =\n state._tag === \"Connected\" ? state : state._tag === \"Detaching\" ? state.snapshot : undefined;\n return (\n <Connection.Root status={state._tag}>\n {state._tag === \"Connected\" || state._tag === \"Detaching\" ? (\n <ConnectedCard\n connection={state._tag === \"Connected\" ? state : state.snapshot}\n controller={controller}\n {...(receiptId === undefined ? {} : { initialReceiptId: receiptId })}\n records={records}\n status={state._tag}\n />\n ) : (\n <AvailableCard controller={controller} state={state} />\n )}\n <Records.Table records={records} />\n <Verification.Status\n config={{\n ...(connected === undefined ? {} : { connection: connected }),\n domain,\n records,\n }}\n />\n </Connection.Root>\n );\n}\n\nfunction AvailableCard({\n controller,\n state,\n}: {\n readonly controller: Connection.Controller;\n readonly state: Exclude<Connection.State, Transport.Connected>;\n}) {\n const { messages } = useDomainKit();\n const snapshot =\n state._tag === \"Disconnected\"\n ? state\n : state._tag === \"Submitting\" || state._tag === \"Redirecting\"\n ? state.snapshot\n : undefined;\n return (\n <Connection.Card status={state._tag}>\n <Connection.CardIdentity status={state._tag}>\n {snapshot === undefined ? null : <Provider.Mark provider={snapshot.provider} />}\n <Connection.Status state={state} />\n </Connection.CardIdentity>\n <Connection.CardActions status={state._tag}>\n {state._tag === \"Failure\" && state.retry !== \"never\" ? (\n <Connection.RetryAction\n controller={controller}\n kind={state.retry === \"after-user-action\" ? \"after-user-action\" : \"retry\"}\n />\n ) : null}\n {snapshot === undefined ? null : (\n <BaseDialog.Root\n onOpenChange={(open, eventDetails) => {\n if (!open && (state._tag === \"Submitting\" || state._tag === \"Redirecting\")) {\n eventDetails.cancel();\n }\n }}\n >\n <Connection.ConnectTrigger\n disabled={state._tag === \"Submitting\" || state._tag === \"Redirecting\"}\n provider={snapshot.provider}\n >\n {messages.connectProvider(snapshot.provider.name)}\n </Connection.ConnectTrigger>\n <Connection.Dialog controller={controller} snapshot={snapshot} />\n </BaseDialog.Root>\n )}\n </Connection.CardActions>\n </Connection.Card>\n );\n}\n\nfunction ConnectedCard({\n connection,\n controller,\n initialReceiptId,\n records,\n status,\n}: {\n readonly connection: Transport.Connected;\n readonly controller: Connection.Controller;\n readonly initialReceiptId?: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n readonly status: \"Connected\" | \"Detaching\";\n}) {\n const [receipt, setReceipt] = useState({\n host: initialReceiptId,\n value: initialReceiptId,\n });\n if (receipt.host !== initialReceiptId) {\n setReceipt({ host: initialReceiptId, value: initialReceiptId });\n }\n const receiptId = receipt.host === initialReceiptId ? receipt.value : initialReceiptId;\n const disabled = status === \"Detaching\";\n const actionsTriggerRef = useRef<HTMLButtonElement>(null);\n return (\n <Connection.Card status={status}>\n <Connection.CardIdentity status={status}>\n <Provider.Mark provider={connection.provider} />\n <Connection.Status state={status === \"Connected\" ? connection : controller.state} />\n </Connection.CardIdentity>\n <Connection.CardActions status={status}>\n <Provisioning.Flow\n connection={connection}\n onApplied={(result) => setReceipt({ host: initialReceiptId, value: result.receiptId })}\n records={records}\n showRecords={false}\n />\n {receiptId === undefined ? (\n <ProviderActions\n actionsTriggerRef={actionsTriggerRef}\n connection={connection}\n controller={controller}\n disabled={disabled}\n />\n ) : (\n <ProviderActionsWithCleanup\n actionsTriggerRef={actionsTriggerRef}\n connection={connection}\n controller={controller}\n disabled={disabled}\n key={receiptId}\n onCleaned={() => setReceipt({ host: initialReceiptId, value: undefined })}\n receiptId={receiptId}\n />\n )}\n </Connection.CardActions>\n </Connection.Card>\n );\n}\n\nfunction ProviderActionsWithCleanup({\n actionsTriggerRef,\n connection,\n controller,\n disabled,\n onCleaned,\n receiptId,\n}: {\n readonly actionsTriggerRef: RefObject<HTMLButtonElement | null>;\n readonly connection: Transport.Connected;\n readonly controller: Connection.Controller;\n readonly disabled: boolean;\n readonly onCleaned: () => void;\n readonly receiptId: string;\n}) {\n const [cleaned, setCleaned] = useState(false);\n const cleanup = Cleanup.useController(connection, receiptId, (result) => {\n if (result._tag === \"Cleaned\") setCleaned(true);\n });\n return (\n <ProviderActions\n actionsTriggerRef={actionsTriggerRef}\n cleanup={cleanup}\n connection={connection}\n controller={controller}\n disabled={disabled}\n onCleanupCloseComplete={() => {\n if (cleaned) onCleaned();\n }}\n />\n );\n}\n\nfunction ProviderActions({\n actionsTriggerRef: actionsTriggerRefProp,\n cleanup,\n connection,\n controller,\n disabled,\n onCleanupCloseComplete,\n}: {\n readonly actionsTriggerRef?: RefObject<HTMLButtonElement | null>;\n readonly cleanup?: Cleanup.Controller;\n readonly connection: Transport.Connected;\n readonly controller: Connection.Controller;\n readonly disabled: boolean;\n readonly onCleanupCloseComplete?: () => void;\n}) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const fallbackActionsTriggerRef = useRef<HTMLButtonElement>(null);\n const actionsTriggerRef = actionsTriggerRefProp ?? fallbackActionsTriggerRef;\n const [menuOpen, setMenuOpen] = useState(false);\n const [disconnectOpen, setDisconnectOpen] = useState(false);\n return (\n <>\n <BaseMenu.Root disabled={disabled} modal={false} onOpenChange={setMenuOpen} open={menuOpen}>\n <BaseMenu.Trigger\n aria-label={messages.moreActions}\n data-domainkit-part=\"actions-trigger\"\n ref={actionsTriggerRef}\n >\n <span aria-hidden=\"true\">⋯</span>\n </BaseMenu.Trigger>\n <BaseMenu.Portal container={portalContainer} keepMounted>\n <BaseMenu.Positioner align=\"end\" sideOffset={6}>\n <BaseMenu.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"actions-menu\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n {cleanup === undefined ? null : (\n <>\n <BaseMenu.Item\n closeOnClick={false}\n data-domainkit-part=\"actions-item\"\n nativeButton\n onClickCapture={() => {\n setMenuOpen(false);\n queueMicrotask(() => cleanup.plan());\n }}\n render={<button type=\"button\" />}\n >\n {messages.reviewCleanup}\n </BaseMenu.Item>\n <BaseMenu.Separator data-domainkit-part=\"actions-separator\" />\n </>\n )}\n <BaseMenu.Item\n closeOnClick={false}\n data-domainkit-part=\"actions-item\"\n data-tone=\"danger\"\n nativeButton\n onClickCapture={() => {\n setMenuOpen(false);\n queueMicrotask(() => setDisconnectOpen(true));\n }}\n render={<button type=\"button\" />}\n >\n {messages.disconnectDomain}\n </BaseMenu.Item>\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n {cleanup === undefined ? null : (\n <Cleanup.Dialog\n controller={cleanup}\n onOpenChangeComplete={(open) => {\n if (!open) {\n onCleanupCloseComplete?.();\n queueMicrotask(() => actionsTriggerRef.current?.focus());\n }\n }}\n trigger={null}\n />\n )}\n <Connection.DisconnectDialog\n connection={connection}\n controller={controller}\n onOpenChange={(open) => {\n setDisconnectOpen(open);\n if (!open) queueMicrotask(() => actionsTriggerRef.current?.focus());\n }}\n open={disconnectOpen}\n trigger={null}\n />\n </>\n );\n}\n","import { DomainName, Transport } from \"domainkit\";\nimport type * as Layer from \"effect/Layer\";\n\nexport interface FakeOptions {\n readonly connect?: Transport.ConnectionResult;\n readonly inspect:\n | Transport.ConnectionSnapshot\n | FakeFailure\n | ReadonlyArray<Transport.ConnectionSnapshot | FakeFailure>;\n readonly attach?: Transport.Connected;\n readonly detach?: Transport.DetachResult;\n readonly plan?: Transport.ProvisioningPlan;\n readonly apply?: Transport.ApplyResult;\n readonly observe?: Transport.Observation;\n readonly cleanupPlan?: Transport.CleanupPlan;\n readonly cleanupApply?: Transport.CleanupResult;\n}\n\ninterface FakeFailure {\n readonly _tag: \"Failure\";\n readonly message: string;\n readonly operation?: string;\n readonly retry: Transport.Failure[\"retry\"];\n}\n\nexport interface FakeTransport extends Transport.AsyncInterface, Layer.Layer<Transport.Service> {\n readonly calls: {\n readonly attach: Array<Transport.AttachInput>;\n readonly connect: Array<Transport.ConnectInput>;\n readonly detach: Array<Transport.DetachInput>;\n readonly inspect: Array<Transport.InspectInput>;\n readonly plan: Array<Transport.ProvisioningPlanInput>;\n readonly apply: Array<Transport.ProvisioningApplyInput>;\n readonly observe: Array<Transport.ObserveInput>;\n readonly cleanupPlan: Array<Transport.CleanupPlanInput>;\n readonly cleanupApply: Array<Transport.CleanupApplyInput>;\n };\n}\n\nexport const provider = (overrides: Partial<Transport.Provider> = {}): Transport.Provider => ({\n authentication: [\n { _tag: \"OAuth\", label: \"Continue with OAuth\" },\n { _tag: \"Token\", label: \"Connect with token\", placeholder: \"Paste API token\" },\n ],\n id: \"cloudflare\",\n name: \"Cloudflare\",\n ...overrides,\n});\n\nexport const target = (\n overrides: Partial<Transport.ProviderTarget> = {},\n): Transport.ProviderTarget => ({\n accountId: \"account-1\",\n accountKind: \"account\",\n zoneId: \"zone-1\",\n zoneName: DomainName.parse(\"example.com\"),\n ...overrides,\n});\n\nexport const connection = (\n overrides: Partial<Transport.ProviderConnection> = {},\n): Transport.ProviderConnection => ({\n createdAt: new Date(\"2026-08-30T00:00:00.000Z\"),\n id: \"connection-1\",\n method: \"oauth2\",\n ownerId: \"organization-1\",\n providerId: \"cloudflare\",\n status: \"active\",\n ...overrides,\n});\n\nexport const attachment = (\n overrides: Partial<Transport.DomainAttachment> = {},\n): Transport.DomainAttachment => ({\n connectionId: \"connection-1\",\n createdAt: new Date(\"2026-08-30T00:00:00.000Z\"),\n domain: DomainName.parse(\"mail.example.com\"),\n id: \"attachment-1\",\n target: target(),\n ...overrides,\n});\n\nexport const connected = (overrides: Partial<Transport.Connected> = {}): Transport.Connected => ({\n _tag: \"Connected\",\n attachment: attachment(),\n connection: connection(),\n provider: provider(),\n ...overrides,\n});\n\nexport function makeFakeTransport(options: FakeOptions): FakeTransport {\n const calls: FakeTransport[\"calls\"] = {\n apply: [],\n attach: [],\n cleanupApply: [],\n cleanupPlan: [],\n connect: [],\n detach: [],\n inspect: [],\n observe: [],\n plan: [],\n };\n const inspections = Array.isArray(options.inspect) ? [...options.inspect] : [options.inspect];\n const transport: Transport.AsyncInterface = {\n cleanup: {\n apply: async (input) => {\n calls.cleanupApply.push(input);\n return (\n options.cleanupApply ?? {\n _tag: \"Cleaned\",\n operationId: \"cleanup-operation-1\",\n results: [],\n }\n );\n },\n plan: async (input) => {\n calls.cleanupPlan.push(input);\n return (\n options.cleanupPlan ?? {\n _tag: \"CleanupPlan\",\n digest: \"cleanup-digest-1\",\n expiresAt: \"2099-01-01T00:00:00.000Z\",\n operations: [],\n }\n );\n },\n },\n connection: {\n connect: async (input) => {\n calls.connect.push(input);\n return (\n options.connect ?? {\n _tag: \"Connected\",\n attachment: attachment({ domain: DomainName.parse(input.domain) }),\n connection: connection(),\n provider: provider(),\n }\n );\n },\n inspect: async (input) => {\n calls.inspect.push(input);\n const snapshot = inspections.shift() ?? inspections.at(-1) ?? options.inspect;\n if (Array.isArray(snapshot)) throw new Error(\"Fake inspection sequence is empty\");\n if (snapshot._tag === \"Failure\")\n throw new Transport.Failure({\n message: snapshot.message,\n operation: snapshot.operation ?? \"connection.inspect\",\n retry: snapshot.retry,\n });\n return snapshot;\n },\n attach: async (input) => {\n calls.attach.push(input);\n return (\n options.attach ?? {\n _tag: \"Connected\",\n attachment: attachment({\n connectionId: input.connectionId,\n domain: DomainName.parse(input.domain),\n target: input.target,\n }),\n connection: connection({ id: input.connectionId }),\n provider: provider(),\n }\n );\n },\n detach: async (input) => {\n calls.detach.push(input);\n return (\n options.detach ?? {\n _tag: \"Detached\",\n attachment: attachment(),\n connection: connection(),\n remainingAttachments: 0,\n }\n );\n },\n },\n provisioning: {\n apply: async (input) => {\n calls.apply.push(input);\n return (\n options.apply ?? {\n _tag: \"Applied\",\n operationId: \"apply-operation-1\",\n receiptId: \"receipt-1\",\n results: [],\n }\n );\n },\n plan: async (input) => {\n calls.plan.push(input);\n return (\n options.plan ?? {\n _tag: \"Plan\",\n digest: \"plan-digest-1\",\n expiresAt: \"2099-01-01T00:00:00.000Z\",\n operations: input.records.map((record) => ({\n _tag: \"Create\" as const,\n id: `create-${record.id}`,\n record,\n })),\n }\n );\n },\n },\n verification: {\n observe: async (input) => {\n calls.observe.push(input);\n return (\n options.observe ?? {\n _tag: \"Observation\",\n provider: input.sources.provider\n ? input.records.map((record) => ({ _tag: \"Found\" as const, recordId: record.id }))\n : [],\n publicDns: input.sources.publicDns\n ? input.records.map((record) => ({ _tag: \"Found\" as const, recordId: record.id }))\n : [],\n }\n );\n },\n },\n };\n return Object.assign(Transport.layerFromAsync(transport), transport, { calls });\n}\n"],"mappings":"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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({\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 Transport.AuthenticationMethod.OAuth({ label: \"Continue with OAuth\" }),\n Transport.AuthenticationMethod.Token({\n label: \"Connect with token\",\n placeholder: \"Paste API token\",\n }),\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 Transport.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 Transport.CleanupResult.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 Transport.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 Transport.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 Transport.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 Transport.DetachResult({\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 Transport.ApplyResult.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 Transport.ProvisioningPlan({\n digest: \"plan-digest-1\",\n expiresAt: \"2099-01-01T00:00:00.000Z\",\n operations: input.records.map((record) =>\n Transport.PlanOperation.Create({\n id: `create-${record.id}`,\n record,\n }),\n ),\n })\n );\n },\n },\n verification: {\n observe: async (input) => {\n calls.observe.push(input);\n return (\n options.observe ??\n Transport.Observation({\n provider: input.sources.provider\n ? input.records.map((record) =>\n Transport.ObservationEvidence.Found({ recordId: record.id }),\n )\n : [],\n publicDns: input.sources.publicDns\n ? input.records.map((record) =>\n Transport.ObservationEvidence.Found({ recordId: record.id }),\n )\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%);
package/package.json CHANGED
@@ -1,8 +1,20 @@
1
1
  {
2
2
  "name": "@domainkit/react",
3
- "version": "0.6.0",
4
- "description": "Accessible React flows for DomainKit",
3
+ "version": "0.8.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",
@@ -35,7 +47,7 @@
35
47
  },
36
48
  "dependencies": {
37
49
  "@base-ui/react": "^1.7.0",
38
- "domainkit": "^0.6.0",
50
+ "domainkit": "^0.8.0",
39
51
  "scheduler": "0.27.0"
40
52
  },
41
53
  "devDependencies": {