@domainkit/react 0.11.0 → 0.12.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 +96 -118
- package/dist/index.d.mts +543 -519
- package/dist/index.mjs +734 -2121
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -12
- package/dist/styles.css +0 -1875
package/dist/index.d.mts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { Approval, DnsRecord, DomainKit, Plan, Reason, Receipt, Storage } from "domainkit";
|
|
2
2
|
import "effect/Effect";
|
|
3
|
-
import {
|
|
3
|
+
import { AriaAttributes, FocusEventHandler, FormEventHandler, KeyboardEventHandler, MouseEventHandler, ReactElement, ReactNode } from "react";
|
|
4
4
|
import * as Data from "effect/Data";
|
|
5
5
|
import { Transport } from "domainkit/client";
|
|
6
|
-
import { useRender } from "@base-ui/react/use-render";
|
|
7
6
|
import { Testing } from "domainkit/testing";
|
|
8
7
|
//#region src/events.d.ts
|
|
9
8
|
/** What a customer finished doing, for host notifications, analytics, and audit trails. */
|
|
@@ -240,7 +239,7 @@ declare const Event: {
|
|
|
240
239
|
type Listener = (event: Event) => void;
|
|
241
240
|
//#endregion
|
|
242
241
|
//#region src/attempt.d.ts
|
|
243
|
-
type State$
|
|
242
|
+
type State$2 = Data.TaggedEnum<{
|
|
244
243
|
Idle: {};
|
|
245
244
|
Planning: {};
|
|
246
245
|
Planned: {
|
|
@@ -268,7 +267,7 @@ type State$3 = Data.TaggedEnum<{
|
|
|
268
267
|
readonly error: DomainKit.Error;
|
|
269
268
|
};
|
|
270
269
|
}>;
|
|
271
|
-
declare const State$
|
|
270
|
+
declare const State$2: {
|
|
272
271
|
readonly $is: <Tag extends "Applied" | "Applying" | "Approving" | "Failure" | "Idle" | "Planned" | "Planning" | "Rejected" | "Rejecting">(tag: Tag) => (u: unknown) => u is Extract<{
|
|
273
272
|
readonly _tag: "Applied";
|
|
274
273
|
readonly plan: Plan.Model | null;
|
|
@@ -475,7 +474,7 @@ declare const State$3: {
|
|
|
475
474
|
}, "_tag">;
|
|
476
475
|
};
|
|
477
476
|
interface Controller$2 {
|
|
478
|
-
readonly state: State$
|
|
477
|
+
readonly state: State$2;
|
|
479
478
|
/** Build a plan. The plan itself rides on the state, from `Planned` through `Applied`. */
|
|
480
479
|
readonly plan: () => void;
|
|
481
480
|
/** Authorize the digest and apply it. Pass `operationIds` to approve part of the plan. */
|
|
@@ -488,166 +487,386 @@ interface Controller$2 {
|
|
|
488
487
|
readonly retry: () => void;
|
|
489
488
|
readonly reset: () => void;
|
|
490
489
|
}
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
type ClassName<State> = string | ((state: State) => string | undefined);
|
|
494
|
-
type Style<State> = CSSProperties | ((state: State) => CSSProperties | undefined);
|
|
495
|
-
/**
|
|
496
|
-
* What every rendered part accepts: the element's own props, a state-aware `className` and
|
|
497
|
-
* `style`, and Base UI's `render` for replacing the element outright.
|
|
498
|
-
*/
|
|
499
|
-
type PartProps<Tag extends ElementType = "div", State extends Record<string, unknown> = Record<string, unknown>> = Omit<useRender.ElementProps<Tag>, "className" | "style"> & {
|
|
500
|
-
readonly className?: ClassName<State>;
|
|
501
|
-
readonly render?: useRender.RenderProp<State>;
|
|
502
|
-
readonly style?: Style<State>;
|
|
503
|
-
};
|
|
504
|
-
declare namespace outcome_d_exports {
|
|
505
|
-
export { Composition, Content, ContentProps, Description, DescriptionProps, Header$1 as Header, HeaderProps, Layout, Media, MediaProps, Provider, Root$7 as Root, RootProps$7 as RootProps, State$2 as State, Title, TitleProps, Tone, Value$1 as Value, useOutcome };
|
|
506
|
-
}
|
|
507
|
-
/** How the outcome reads: a problem, a caution, or a step that went through. */
|
|
508
|
-
type Tone = "danger" | "success" | "warning";
|
|
509
|
-
/** `card` is the panel a flow shows on its own; `inline` sits under a field or in a busy row. */
|
|
510
|
-
type Layout = "card" | "inline";
|
|
511
|
-
/** What a flow resolved for the outcome its parts render. */
|
|
512
|
-
interface Value$1 {
|
|
513
|
-
readonly tone: Tone;
|
|
514
|
-
readonly layout: Layout;
|
|
515
|
-
readonly title: string;
|
|
516
|
-
readonly description: string;
|
|
517
|
-
/** The retry the flow allows, or `null` when it allows none. */
|
|
518
|
-
readonly retry: (() => void) | null;
|
|
519
|
-
/** The part name the flow's retry carries, so a host's selectors keep working. */
|
|
520
|
-
readonly retryPart: string;
|
|
521
|
-
}
|
|
522
|
-
/** What the surrounding flow resolved, for a part of your own inside `X.Outcome`. */
|
|
523
|
-
declare function useOutcome(): Value$1;
|
|
524
|
-
/** Binds a resolved outcome to the parts below it. Flows render this; hosts rarely do. */
|
|
525
|
-
declare function Provider({ children, value }: {
|
|
526
|
-
readonly children: ReactNode;
|
|
527
|
-
readonly value: Value$1;
|
|
528
|
-
}): ReactElement;
|
|
529
|
-
interface State$2 extends Record<string, unknown> {
|
|
530
|
-
readonly tone: Tone;
|
|
531
|
-
readonly layout: Layout;
|
|
532
|
-
}
|
|
533
|
-
interface RootProps$7 extends PartProps<"div", State$2> {
|
|
534
|
-
readonly tone?: Tone;
|
|
535
|
-
readonly layout?: Layout;
|
|
536
|
-
}
|
|
490
|
+
/** The plan an attempt holds, whatever step it is on; `null` before there is one. */
|
|
491
|
+
declare const planOf: (state: State$2) => Plan.Model | null;
|
|
537
492
|
/**
|
|
538
|
-
* The
|
|
539
|
-
*
|
|
540
|
-
* root's own attributes.
|
|
493
|
+
* The plan still awaiting its apply, which is what a row of records reports; `null` once one has
|
|
494
|
+
* landed, because from then on an observation answers instead.
|
|
541
495
|
*/
|
|
542
|
-
declare
|
|
543
|
-
interface HeaderProps extends PartProps<"div", State$2> {}
|
|
544
|
-
/** Media, title, and description together, so the action below them can move on its own. */
|
|
545
|
-
declare function Header$1(props: HeaderProps): ReactElement;
|
|
546
|
-
interface MediaProps extends PartProps<"div", State$2> {
|
|
547
|
-
/** `icon` frames the glyph the way shadcn's `EmptyMedia` does; `default` draws it bare. */
|
|
548
|
-
readonly variant?: "default" | "icon";
|
|
549
|
-
}
|
|
550
|
-
/** The glyph for the tone. Children replace it; `icons` on `DomainKit.Root` replaces the set. */
|
|
551
|
-
declare function Media({ variant, ...props }: MediaProps): ReactElement;
|
|
552
|
-
interface TitleProps extends PartProps<"div", State$2> {}
|
|
553
|
-
/** The heading from the catalog. Children win, for a host that words it itself. */
|
|
554
|
-
declare function Title(props: TitleProps): ReactElement;
|
|
555
|
-
interface DescriptionProps extends PartProps<"p", State$2> {}
|
|
556
|
-
/** What to do about it, from the catalog. An outcome whose title says everything renders none. */
|
|
557
|
-
declare function Description(props: DescriptionProps): ReactElement | null;
|
|
558
|
-
interface ContentProps extends PartProps<"div", State$2> {}
|
|
559
|
-
/**
|
|
560
|
-
* The actions under the header. Without children it is the flow's retry, and a flow that allows
|
|
561
|
-
* none renders nothing: read-only hides every control that would start a write again.
|
|
562
|
-
*/
|
|
563
|
-
declare function Content(props: ContentProps): ReactElement | null;
|
|
564
|
-
/** Media, title, and description in a header, then the action. What `X.Outcome` renders alone. */
|
|
565
|
-
declare function Composition(): ReactElement;
|
|
566
|
-
//#endregion
|
|
567
|
-
//#region src/review.d.ts
|
|
568
|
-
interface ReviewState extends Record<string, unknown> {
|
|
569
|
-
readonly status: Controller$2["state"]["_tag"];
|
|
570
|
-
}
|
|
571
|
-
interface KindProps {
|
|
572
|
-
readonly controller: Controller$2;
|
|
573
|
-
readonly kind: Plan.Kind;
|
|
574
|
-
}
|
|
575
|
-
interface StatusProps$5 extends PartProps<"p", ReviewState>, KindProps {}
|
|
576
|
-
interface OutcomeProps$4 extends RootProps$7, KindProps {}
|
|
577
|
-
interface ActionsProps$2 extends PartProps<"div", ReviewState>, KindProps {}
|
|
578
|
-
interface DialogProps$3 extends KindProps {
|
|
579
|
-
readonly children?: ReactNode;
|
|
580
|
-
readonly onOpenChange?: (open: boolean) => void;
|
|
581
|
-
readonly open?: boolean;
|
|
582
|
-
/** Replace the dialog surface entirely: a drawer, an inline panel, a host modal. */
|
|
583
|
-
readonly render?: (props: {
|
|
584
|
-
readonly open: boolean;
|
|
585
|
-
readonly children: ReactNode;
|
|
586
|
-
}) => ReactNode;
|
|
587
|
-
readonly trigger?: ReactNode;
|
|
588
|
-
}
|
|
496
|
+
declare const pendingPlan: (state: State$2) => Plan.Model | null;
|
|
589
497
|
declare namespace cleanup_d_exports {
|
|
590
|
-
export {
|
|
498
|
+
export { Controller$2 as Controller, Options$3 as Options, State$2 as State, pendingPlan, planOf, useController$3 as useController };
|
|
591
499
|
}
|
|
592
500
|
interface Options$3 {
|
|
593
501
|
readonly domain: string;
|
|
594
502
|
/** Which apply to undo. Without it, the domain's latest provisioning receipt. */
|
|
595
503
|
readonly receiptId?: Receipt.ReceiptId;
|
|
596
504
|
readonly onCleaned?: (receipt: Receipt.Model) => void;
|
|
505
|
+
/** Refuse every step. Defaults to the surrounding `readOnly`. */
|
|
506
|
+
readonly readOnly?: boolean;
|
|
597
507
|
}
|
|
598
508
|
/**
|
|
599
509
|
* Cleanup is bound to a receipt: it removes only what an apply proved DomainKit created. When the
|
|
600
510
|
* host does not name one, the controller reads the domain's latest from the snapshot.
|
|
601
511
|
*/
|
|
602
|
-
declare function useController$3({ domain, onCleaned, receiptId }: Options$3): Controller$2;
|
|
603
|
-
|
|
604
|
-
|
|
512
|
+
declare function useController$3({ domain, onCleaned, readOnly, receiptId }: Options$3): Controller$2;
|
|
513
|
+
//#endregion
|
|
514
|
+
//#region src/domain-field.d.ts
|
|
515
|
+
type Zone = Transport.Zone;
|
|
516
|
+
type Account = Transport.Zones["connections"][number];
|
|
517
|
+
type AuthMethod = Descriptor["methods"][number];
|
|
518
|
+
/** Where a domain's records would go: the connection that serves it, and in which zone. */
|
|
519
|
+
interface Placement {
|
|
520
|
+
readonly connectionId: string;
|
|
521
|
+
readonly zone: string;
|
|
522
|
+
}
|
|
523
|
+
type ZonesState = Data.TaggedEnum<{
|
|
524
|
+
Loading: {};
|
|
525
|
+
Ready: {
|
|
526
|
+
readonly zones: ReadonlyArray<Zone>;
|
|
527
|
+
readonly connections: ReadonlyArray<Account>;
|
|
528
|
+
readonly providers: ReadonlyArray<Descriptor>;
|
|
529
|
+
};
|
|
530
|
+
Failure: {
|
|
531
|
+
readonly error: DomainKit.Error;
|
|
532
|
+
};
|
|
533
|
+
}>;
|
|
534
|
+
declare const ZonesState: {
|
|
535
|
+
readonly $is: <Tag extends "Failure" | "Loading" | "Ready">(tag: Tag) => (u: unknown) => u is Extract<{
|
|
536
|
+
readonly _tag: "Failure";
|
|
537
|
+
readonly error: DomainKit.Error;
|
|
538
|
+
}, {
|
|
539
|
+
readonly _tag: Tag;
|
|
540
|
+
}> | Extract<{
|
|
541
|
+
readonly _tag: "Loading";
|
|
542
|
+
}, {
|
|
543
|
+
readonly _tag: Tag;
|
|
544
|
+
}> | Extract<{
|
|
545
|
+
readonly _tag: "Ready";
|
|
546
|
+
readonly zones: ReadonlyArray<Zone>;
|
|
547
|
+
readonly connections: ReadonlyArray<Account>;
|
|
548
|
+
readonly providers: ReadonlyArray<Descriptor>;
|
|
549
|
+
}, {
|
|
550
|
+
readonly _tag: Tag;
|
|
551
|
+
}>;
|
|
552
|
+
readonly $match: {
|
|
553
|
+
<Cases extends { readonly [Tag in "Failure" | "Loading" | "Ready"]: (args: Extract<{
|
|
554
|
+
readonly _tag: "Failure";
|
|
555
|
+
readonly error: DomainKit.Error;
|
|
556
|
+
} | {
|
|
557
|
+
readonly _tag: "Loading";
|
|
558
|
+
} | {
|
|
559
|
+
readonly _tag: "Ready";
|
|
560
|
+
readonly zones: ReadonlyArray<Zone>;
|
|
561
|
+
readonly connections: ReadonlyArray<Account>;
|
|
562
|
+
readonly providers: ReadonlyArray<Descriptor>;
|
|
563
|
+
}, {
|
|
564
|
+
readonly _tag: Tag;
|
|
565
|
+
}>) => any; }>(cases: Cases): (value: {
|
|
566
|
+
readonly _tag: "Failure";
|
|
567
|
+
readonly error: DomainKit.Error;
|
|
568
|
+
} | {
|
|
569
|
+
readonly _tag: "Loading";
|
|
570
|
+
} | {
|
|
571
|
+
readonly _tag: "Ready";
|
|
572
|
+
readonly zones: ReadonlyArray<Zone>;
|
|
573
|
+
readonly connections: ReadonlyArray<Account>;
|
|
574
|
+
readonly providers: ReadonlyArray<Descriptor>;
|
|
575
|
+
}) => import("effect/Unify").Unify<ReturnType<Cases["Failure" | "Loading" | "Ready"]>>;
|
|
576
|
+
<Cases extends { readonly [Tag in "Failure" | "Loading" | "Ready"]: (args: Extract<{
|
|
577
|
+
readonly _tag: "Failure";
|
|
578
|
+
readonly error: DomainKit.Error;
|
|
579
|
+
} | {
|
|
580
|
+
readonly _tag: "Loading";
|
|
581
|
+
} | {
|
|
582
|
+
readonly _tag: "Ready";
|
|
583
|
+
readonly zones: ReadonlyArray<Zone>;
|
|
584
|
+
readonly connections: ReadonlyArray<Account>;
|
|
585
|
+
readonly providers: ReadonlyArray<Descriptor>;
|
|
586
|
+
}, {
|
|
587
|
+
readonly _tag: Tag;
|
|
588
|
+
}>) => any; }>(value: {
|
|
589
|
+
readonly _tag: "Failure";
|
|
590
|
+
readonly error: DomainKit.Error;
|
|
591
|
+
} | {
|
|
592
|
+
readonly _tag: "Loading";
|
|
593
|
+
} | {
|
|
594
|
+
readonly _tag: "Ready";
|
|
595
|
+
readonly zones: ReadonlyArray<Zone>;
|
|
596
|
+
readonly connections: ReadonlyArray<Account>;
|
|
597
|
+
readonly providers: ReadonlyArray<Descriptor>;
|
|
598
|
+
}, cases: Cases): import("effect/Unify").Unify<ReturnType<Cases["Failure" | "Loading" | "Ready"]>>;
|
|
599
|
+
};
|
|
600
|
+
readonly Failure: Data.TaggedEnum.ConstructorFrom<{
|
|
601
|
+
readonly _tag: "Failure";
|
|
602
|
+
readonly error: DomainKit.Error;
|
|
603
|
+
}, "_tag">;
|
|
604
|
+
readonly Loading: Data.TaggedEnum.ConstructorFrom<{
|
|
605
|
+
readonly _tag: "Loading";
|
|
606
|
+
}, "_tag">;
|
|
607
|
+
readonly Ready: Data.TaggedEnum.ConstructorFrom<{
|
|
608
|
+
readonly _tag: "Ready";
|
|
609
|
+
readonly zones: ReadonlyArray<Zone>;
|
|
610
|
+
readonly connections: ReadonlyArray<Account>;
|
|
611
|
+
readonly providers: ReadonlyArray<Descriptor>;
|
|
612
|
+
}, "_tag">;
|
|
613
|
+
};
|
|
614
|
+
interface ZonesController {
|
|
615
|
+
readonly state: ZonesState;
|
|
616
|
+
readonly zones: ReadonlyArray<Zone>;
|
|
617
|
+
readonly connections: ReadonlyArray<Account>;
|
|
618
|
+
readonly providers: ReadonlyArray<Descriptor>;
|
|
619
|
+
readonly refresh: () => void;
|
|
605
620
|
}
|
|
606
|
-
interface
|
|
607
|
-
|
|
621
|
+
interface ZonesOptions {
|
|
622
|
+
/** Only this provider's connections. Omit for every connection this owner holds. */
|
|
623
|
+
readonly provider?: string;
|
|
608
624
|
}
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
readonly
|
|
620
|
-
readonly onCleaned?: (receipt: Receipt.Model) => void;
|
|
621
|
-
readonly receiptId?: Receipt.ReceiptId;
|
|
622
|
-
readonly trigger?: ReactNode;
|
|
625
|
+
/**
|
|
626
|
+
* Every zone this owner's connections reach. A connection whose credential the provider turned
|
|
627
|
+
* down is listed in `connections` as `reconnect` and contributes no zones, so one dead account
|
|
628
|
+
* never costs the customer the others.
|
|
629
|
+
*/
|
|
630
|
+
declare function useZones({ provider }?: ZonesOptions): ZonesController;
|
|
631
|
+
interface ConnectAccountInput {
|
|
632
|
+
readonly provider: string;
|
|
633
|
+
readonly method: AuthMethod["kind"];
|
|
634
|
+
/** Keyed by the descriptor's field names. Ignored by the interactive methods. */
|
|
635
|
+
readonly values?: Readonly<Record<string, string>>;
|
|
623
636
|
}
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
637
|
+
type AccountsState = Data.TaggedEnum<{
|
|
638
|
+
Loading: {};
|
|
639
|
+
Ready: {};
|
|
640
|
+
Submitting: {
|
|
641
|
+
readonly provider: string;
|
|
642
|
+
};
|
|
643
|
+
Redirecting: {
|
|
644
|
+
readonly url: string;
|
|
645
|
+
};
|
|
646
|
+
Failure: {
|
|
647
|
+
readonly error: DomainKit.Error;
|
|
648
|
+
};
|
|
649
|
+
}>;
|
|
650
|
+
declare const AccountsState: {
|
|
651
|
+
readonly $is: <Tag extends "Failure" | "Loading" | "Ready" | "Redirecting" | "Submitting">(tag: Tag) => (u: unknown) => u is Extract<{
|
|
652
|
+
readonly _tag: "Failure";
|
|
653
|
+
readonly error: DomainKit.Error;
|
|
654
|
+
}, {
|
|
655
|
+
readonly _tag: Tag;
|
|
656
|
+
}> | Extract<{
|
|
657
|
+
readonly _tag: "Loading";
|
|
658
|
+
}, {
|
|
659
|
+
readonly _tag: Tag;
|
|
660
|
+
}> | Extract<{
|
|
661
|
+
readonly _tag: "Ready";
|
|
662
|
+
}, {
|
|
663
|
+
readonly _tag: Tag;
|
|
664
|
+
}> | Extract<{
|
|
665
|
+
readonly _tag: "Redirecting";
|
|
666
|
+
readonly url: string;
|
|
667
|
+
}, {
|
|
668
|
+
readonly _tag: Tag;
|
|
669
|
+
}> | Extract<{
|
|
670
|
+
readonly _tag: "Submitting";
|
|
671
|
+
readonly provider: string;
|
|
672
|
+
}, {
|
|
673
|
+
readonly _tag: Tag;
|
|
674
|
+
}>;
|
|
675
|
+
readonly $match: {
|
|
676
|
+
<Cases extends { readonly [Tag in "Failure" | "Loading" | "Ready" | "Redirecting" | "Submitting"]: (args: Extract<{
|
|
677
|
+
readonly _tag: "Failure";
|
|
678
|
+
readonly error: DomainKit.Error;
|
|
679
|
+
} | {
|
|
680
|
+
readonly _tag: "Loading";
|
|
681
|
+
} | {
|
|
682
|
+
readonly _tag: "Ready";
|
|
683
|
+
} | {
|
|
684
|
+
readonly _tag: "Redirecting";
|
|
685
|
+
readonly url: string;
|
|
686
|
+
} | {
|
|
687
|
+
readonly _tag: "Submitting";
|
|
688
|
+
readonly provider: string;
|
|
689
|
+
}, {
|
|
690
|
+
readonly _tag: Tag;
|
|
691
|
+
}>) => any; }>(cases: Cases): (value: {
|
|
692
|
+
readonly _tag: "Failure";
|
|
693
|
+
readonly error: DomainKit.Error;
|
|
694
|
+
} | {
|
|
695
|
+
readonly _tag: "Loading";
|
|
696
|
+
} | {
|
|
697
|
+
readonly _tag: "Ready";
|
|
698
|
+
} | {
|
|
699
|
+
readonly _tag: "Redirecting";
|
|
700
|
+
readonly url: string;
|
|
701
|
+
} | {
|
|
702
|
+
readonly _tag: "Submitting";
|
|
703
|
+
readonly provider: string;
|
|
704
|
+
}) => import("effect/Unify").Unify<ReturnType<Cases["Failure" | "Loading" | "Ready" | "Redirecting" | "Submitting"]>>;
|
|
705
|
+
<Cases extends { readonly [Tag in "Failure" | "Loading" | "Ready" | "Redirecting" | "Submitting"]: (args: Extract<{
|
|
706
|
+
readonly _tag: "Failure";
|
|
707
|
+
readonly error: DomainKit.Error;
|
|
708
|
+
} | {
|
|
709
|
+
readonly _tag: "Loading";
|
|
710
|
+
} | {
|
|
711
|
+
readonly _tag: "Ready";
|
|
712
|
+
} | {
|
|
713
|
+
readonly _tag: "Redirecting";
|
|
714
|
+
readonly url: string;
|
|
715
|
+
} | {
|
|
716
|
+
readonly _tag: "Submitting";
|
|
717
|
+
readonly provider: string;
|
|
718
|
+
}, {
|
|
719
|
+
readonly _tag: Tag;
|
|
720
|
+
}>) => any; }>(value: {
|
|
721
|
+
readonly _tag: "Failure";
|
|
722
|
+
readonly error: DomainKit.Error;
|
|
723
|
+
} | {
|
|
724
|
+
readonly _tag: "Loading";
|
|
725
|
+
} | {
|
|
726
|
+
readonly _tag: "Ready";
|
|
727
|
+
} | {
|
|
728
|
+
readonly _tag: "Redirecting";
|
|
729
|
+
readonly url: string;
|
|
730
|
+
} | {
|
|
731
|
+
readonly _tag: "Submitting";
|
|
732
|
+
readonly provider: string;
|
|
733
|
+
}, cases: Cases): import("effect/Unify").Unify<ReturnType<Cases["Failure" | "Loading" | "Ready" | "Redirecting" | "Submitting"]>>;
|
|
734
|
+
};
|
|
735
|
+
readonly Failure: Data.TaggedEnum.ConstructorFrom<{
|
|
736
|
+
readonly _tag: "Failure";
|
|
737
|
+
readonly error: DomainKit.Error;
|
|
738
|
+
}, "_tag">;
|
|
739
|
+
readonly Loading: Data.TaggedEnum.ConstructorFrom<{
|
|
740
|
+
readonly _tag: "Loading";
|
|
741
|
+
}, "_tag">;
|
|
742
|
+
readonly Ready: Data.TaggedEnum.ConstructorFrom<{
|
|
743
|
+
readonly _tag: "Ready";
|
|
744
|
+
}, "_tag">;
|
|
745
|
+
readonly Redirecting: Data.TaggedEnum.ConstructorFrom<{
|
|
746
|
+
readonly _tag: "Redirecting";
|
|
747
|
+
readonly url: string;
|
|
748
|
+
}, "_tag">;
|
|
749
|
+
readonly Submitting: Data.TaggedEnum.ConstructorFrom<{
|
|
750
|
+
readonly _tag: "Submitting";
|
|
751
|
+
readonly provider: string;
|
|
752
|
+
}, "_tag">;
|
|
753
|
+
};
|
|
754
|
+
interface AccountsController {
|
|
755
|
+
readonly state: AccountsState;
|
|
756
|
+
readonly zones: ReadonlyArray<Zone>;
|
|
757
|
+
readonly connections: ReadonlyArray<Account>;
|
|
758
|
+
readonly providers: ReadonlyArray<Descriptor>;
|
|
759
|
+
/** Connect a provider with no domain attached. The account is what the customer is granting. */
|
|
760
|
+
readonly connect: (input: ConnectAccountInput) => void;
|
|
761
|
+
/**
|
|
762
|
+
* Prove an account again for a connection the owner already holds. The connection and its
|
|
763
|
+
* domains stay; only the credential behind it is replaced.
|
|
764
|
+
*/
|
|
765
|
+
readonly reconnect: (input: ConnectAccountInput & {
|
|
766
|
+
readonly connectionId: string;
|
|
767
|
+
}) => void;
|
|
768
|
+
readonly refresh: () => void;
|
|
628
769
|
}
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
readonly providerId: string;
|
|
770
|
+
interface AccountsOptions {
|
|
771
|
+
/** Where an interactive method returns the customer. Defaults to the page they started from. */
|
|
772
|
+
readonly returnTo?: string | null;
|
|
773
|
+
/** Refuse the commands that grant an account. Defaults to the surrounding `readOnly`. */
|
|
774
|
+
readonly readOnly?: boolean;
|
|
635
775
|
}
|
|
636
|
-
|
|
637
|
-
|
|
776
|
+
/**
|
|
777
|
+
* The accounts this owner holds, and the one way to add another: connect a provider without naming
|
|
778
|
+
* a domain. A token method finishes in place; an interactive one redirects and comes back through
|
|
779
|
+
* the library's own callback, which lands on `returnTo`.
|
|
780
|
+
*/
|
|
781
|
+
declare function useAccounts({ readOnly: refused, returnTo }?: AccountsOptions): AccountsController;
|
|
782
|
+
/**
|
|
783
|
+
* The zone a value already sits in: the longest listed zone the value is at or under. Two accounts
|
|
784
|
+
* can serve the same zone, so `preferred` names the one the customer picked and wins among equals;
|
|
785
|
+
* without it the first listed account answers.
|
|
786
|
+
*/
|
|
787
|
+
declare const placementOf: (value: string, zones: ReadonlyArray<Zone>, preferred?: Placement | null) => {
|
|
788
|
+
readonly zone: Zone;
|
|
789
|
+
readonly placement: Placement;
|
|
790
|
+
} | null;
|
|
791
|
+
/** Zones the typed value is reaching for: a prefix of the zone, or a subdomain of one. */
|
|
792
|
+
declare const suggestionsFor: (value: string, zones: ReadonlyArray<Zone>) => ReadonlyArray<Zone>;
|
|
793
|
+
/** The value a suggestion completes to: whatever subdomain was typed, then the zone. */
|
|
794
|
+
declare const completionOf: (value: string, zone: Zone) => string;
|
|
795
|
+
interface DomainFieldOptions {
|
|
796
|
+
/** Every zone the surface offers, which `useZones` or `useAccounts` already holds. */
|
|
797
|
+
readonly zones: ReadonlyArray<Zone>;
|
|
798
|
+
readonly value: string;
|
|
799
|
+
readonly onChange: (value: string) => void;
|
|
800
|
+
/**
|
|
801
|
+
* Fires when the value or the account it resolves to changes, so a host holds the two together
|
|
802
|
+
* and submits them together. It reports the value as typed, not only the placement, because a
|
|
803
|
+
* form needs the name the customer is on as well as where its records would go.
|
|
804
|
+
*/
|
|
805
|
+
readonly onResolve?: (input: {
|
|
806
|
+
readonly domain: string;
|
|
807
|
+
readonly connection: Placement | null;
|
|
808
|
+
}) => void;
|
|
809
|
+
/** The input's id. The listbox and its options are named from it; one is generated otherwise. */
|
|
810
|
+
readonly id?: string;
|
|
811
|
+
}
|
|
812
|
+
/** The props one suggestion carries, so the option is a listbox option to a screen reader. */
|
|
813
|
+
interface OptionProps {
|
|
814
|
+
readonly "aria-selected": boolean;
|
|
815
|
+
readonly id: string;
|
|
816
|
+
readonly onMouseDown: MouseEventHandler<Element>;
|
|
817
|
+
readonly role: "option";
|
|
818
|
+
}
|
|
819
|
+
interface DomainFieldController {
|
|
820
|
+
/** Whether the listbox is showing: the customer opened it and there is something in it. */
|
|
821
|
+
readonly open: boolean;
|
|
822
|
+
/** The zones the typed value is reaching for, in the order they were listed. */
|
|
823
|
+
readonly suggestions: ReadonlyArray<Zone>;
|
|
824
|
+
/** The suggestion Tab and Enter would complete, or `null` when the list is empty. */
|
|
825
|
+
readonly highlighted: Zone | null;
|
|
826
|
+
/** The zone the value already sits in, with the account its records would go to. */
|
|
827
|
+
readonly found: {
|
|
828
|
+
readonly zone: Zone;
|
|
829
|
+
readonly placement: Placement;
|
|
830
|
+
} | null;
|
|
831
|
+
/** Finish the name from one suggestion, keeping whatever subdomain was typed in front of it. */
|
|
832
|
+
readonly complete: (zone: Zone) => void;
|
|
833
|
+
readonly close: () => void;
|
|
834
|
+
readonly inputProps: {
|
|
835
|
+
readonly "aria-activedescendant": AriaAttributes["aria-activedescendant"];
|
|
836
|
+
readonly "aria-autocomplete": "list";
|
|
837
|
+
readonly "aria-controls": string;
|
|
838
|
+
readonly "aria-expanded": boolean;
|
|
839
|
+
readonly autoComplete: "off";
|
|
840
|
+
readonly id: string;
|
|
841
|
+
readonly onChange: FormEventHandler<HTMLInputElement>;
|
|
842
|
+
readonly onFocus: FocusEventHandler<HTMLInputElement>;
|
|
843
|
+
readonly onKeyDown: KeyboardEventHandler<HTMLInputElement>;
|
|
844
|
+
readonly role: "combobox";
|
|
845
|
+
readonly type: "text";
|
|
846
|
+
readonly value: string;
|
|
847
|
+
};
|
|
848
|
+
readonly listboxProps: {
|
|
849
|
+
readonly "aria-label": string;
|
|
850
|
+
readonly hidden: boolean;
|
|
851
|
+
readonly id: string;
|
|
852
|
+
readonly role: "listbox";
|
|
853
|
+
};
|
|
854
|
+
readonly optionProps: (zone: Zone) => OptionProps;
|
|
638
855
|
}
|
|
639
856
|
/**
|
|
640
|
-
*
|
|
641
|
-
*
|
|
857
|
+
* One input over every zone the workspace's accounts reach, as props rather than markup. Arrow
|
|
858
|
+
* keys move the highlight, Tab or Enter completes it, Escape closes the list, and `found` says
|
|
859
|
+
* where the records will go.
|
|
642
860
|
*/
|
|
643
|
-
declare function
|
|
861
|
+
declare function useDomainField({ id, onChange, onResolve, value, zones }: DomainFieldOptions): DomainFieldController;
|
|
644
862
|
declare namespace connect_d_exports {
|
|
645
|
-
export {
|
|
863
|
+
export { Account, AccountsController, AccountsOptions, AccountsState, Attempt, Candidate, ConnectAccountInput, ConnectInput, Controller$1 as Controller, DescribedMethod, DescribedMethods, Descriptor, Discovery, DomainFieldController, DomainFieldOptions, Field, Invitation, MethodDescriptor, MethodFields, Options$2 as Options, Placement, Reusable, Snapshot, State$1 as State, Zone, ZonesController, ZonesOptions, ZonesState, answeredInPlace, attempted, completionOf, describeMethods, displayName, holdsConnection, hostProvider, offering, placementOf, providerOf, reconnect, rejectedField, reusableConnections, suggestionsFor, useAccounts, useController$2 as useController, useDomainField, useZones };
|
|
646
864
|
}
|
|
647
865
|
type Snapshot = Transport.Snapshot;
|
|
648
866
|
type Discovery = Transport.Discovery;
|
|
649
867
|
type Candidate = Transport.Candidate;
|
|
650
|
-
|
|
868
|
+
/** A provider as the snapshot describes it: an id, a display name, and its auth methods. */
|
|
869
|
+
type Descriptor = Transport.Snapshot["providers"][number];
|
|
651
870
|
type MethodDescriptor = Descriptor["methods"][number];
|
|
652
871
|
type Field = NonNullable<MethodDescriptor["fields"]>[number];
|
|
653
872
|
/**
|
|
@@ -925,6 +1144,11 @@ interface ConnectInput {
|
|
|
925
1144
|
}
|
|
926
1145
|
interface Controller$1 {
|
|
927
1146
|
readonly domain: string;
|
|
1147
|
+
/**
|
|
1148
|
+
* What this domain's last apply landed, read once per receipt id and held here. `null` until
|
|
1149
|
+
* the snapshot names a receipt, or when the transport carries no provisioning group.
|
|
1150
|
+
*/
|
|
1151
|
+
readonly receipt: Receipt.Model | null;
|
|
928
1152
|
/**
|
|
929
1153
|
* How many times a connection has been established for this domain on this surface: a token
|
|
930
1154
|
* connect that landed, or a load that followed this library's own redirect back. It only ever
|
|
@@ -957,74 +1181,44 @@ interface Options$2 {
|
|
|
957
1181
|
* pass `null` to send none and let the server's `defaultReturnTo` decide.
|
|
958
1182
|
*/
|
|
959
1183
|
readonly returnTo?: string | null;
|
|
1184
|
+
/**
|
|
1185
|
+
* Refuse every command that changes the connection. Defaults to the surrounding `readOnly`,
|
|
1186
|
+
* which is `DomainKit.Root`'s unless a `DomainKit.ReadOnly` narrows it.
|
|
1187
|
+
*/
|
|
1188
|
+
readonly readOnly?: boolean;
|
|
960
1189
|
}
|
|
961
1190
|
/**
|
|
962
1191
|
* The domain's connection, and the four ways to change it. Discovery runs on mount whenever the
|
|
963
1192
|
* transport declares it and the domain has no connection yet; a discovery failure is not the
|
|
964
1193
|
* customer's problem, so the provider list still renders.
|
|
965
1194
|
*/
|
|
966
|
-
declare function useController$2({ domain, returnTo }: Options$2): Controller$1;
|
|
967
|
-
interface RootState$3 extends Record<string, unknown> {
|
|
968
|
-
readonly status: State$1["_tag"];
|
|
969
|
-
}
|
|
970
|
-
interface RootProps$5 extends PartProps<"div", RootState$3> {
|
|
971
|
-
readonly controller: Controller$1;
|
|
972
|
-
}
|
|
973
|
-
declare function Root$5({ controller, ...props }: RootProps$5): ReactElement;
|
|
1195
|
+
declare function useController$2({ domain, readOnly: refused, returnTo }: Options$2): Controller$1;
|
|
974
1196
|
/**
|
|
975
1197
|
* Whether a failure is already answered where it was raised: beside the method the customer used.
|
|
976
|
-
* A
|
|
1198
|
+
* A surface rendering one outcome for the whole flow skips it, so the failure announces once.
|
|
977
1199
|
*/
|
|
978
1200
|
declare const answeredInPlace: (controller: Controller$1) => boolean;
|
|
979
1201
|
/**
|
|
980
1202
|
* Whether the surface should read as connected: it is, or a command it started is in flight over a
|
|
981
|
-
* connection that was. The
|
|
982
|
-
* command rather than vanishing under the customer half way through it.
|
|
1203
|
+
* connection that was. The provider row and the dialog it opened stay on screen for the length of
|
|
1204
|
+
* the command rather than vanishing under the customer half way through it.
|
|
983
1205
|
*/
|
|
984
1206
|
declare const holdsConnection: (controller: Controller$1) => boolean;
|
|
1207
|
+
/**
|
|
1208
|
+
* Whether the provider turned the credential down, so the customer must prove the account again.
|
|
1209
|
+
* Proving it re-credits the connection the workspace already holds and leaves its domains where
|
|
1210
|
+
* they are, which is why the surface offers a reconnect rather than a second account.
|
|
1211
|
+
*/
|
|
1212
|
+
declare const reconnect: (controller: Controller$1) => boolean;
|
|
985
1213
|
/**
|
|
986
1214
|
* The provider whose nameservers serve this domain, as the snapshot describes it. Discovery names
|
|
987
1215
|
* it by id; without a descriptor there is nothing to draw, so there is no host.
|
|
988
1216
|
*/
|
|
989
1217
|
declare const hostProvider: (controller: Controller$1) => Descriptor | null;
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
* The last failure as a card: media, the catalog's title and description, and the retry the flow
|
|
995
|
-
* allows. Children replace the composition and keep the binding.
|
|
996
|
-
*/
|
|
997
|
-
declare function Outcome$3({ children, controller, ...props }: OutcomeProps$2): ReactElement | null;
|
|
998
|
-
interface StatusProps$3 extends PartProps<"p", RootState$3> {
|
|
999
|
-
readonly controller: Controller$1;
|
|
1000
|
-
}
|
|
1001
|
-
declare function Status$3({ controller, ...props }: StatusProps$3): ReactElement;
|
|
1002
|
-
interface FormProps extends PartProps<"div", RootState$3> {
|
|
1003
|
-
readonly controller: Controller$1;
|
|
1004
|
-
/**
|
|
1005
|
-
* Narrow to this provider whatever discovery found. The dialog's header menu sets it, so a
|
|
1006
|
-
* customer who picks another provider gets the same one-decision surface for it.
|
|
1007
|
-
*/
|
|
1008
|
-
readonly provider?: string;
|
|
1009
|
-
}
|
|
1010
|
-
/**
|
|
1011
|
-
* Everything a disconnected domain can do: a connection discovery already found, the connections
|
|
1012
|
-
* this owner already has, then each provider's declared methods.
|
|
1013
|
-
*/
|
|
1014
|
-
declare function Form({ controller, provider: narrowed, ...props }: FormProps): ReactElement;
|
|
1015
|
-
interface DialogProps$1 {
|
|
1016
|
-
readonly controller: Controller$1;
|
|
1017
|
-
readonly children?: ReactNode;
|
|
1018
|
-
/** Replace the dialog surface: a drawer, a panel, whatever the host already has. */
|
|
1019
|
-
readonly render?: (props: {
|
|
1020
|
-
readonly open: boolean;
|
|
1021
|
-
readonly children: ReactNode;
|
|
1022
|
-
}) => ReactNode;
|
|
1023
|
-
readonly title?: ReactNode;
|
|
1024
|
-
readonly trigger?: ReactNode;
|
|
1025
|
-
}
|
|
1026
|
-
/** The connect surface. Without `render` it is a Base UI dialog behind `trigger`. */
|
|
1027
|
-
declare function Dialog$1({ children, controller, render, title, trigger }: DialogProps$1): ReactElement;
|
|
1218
|
+
/** The descriptor for one provider id, or `null` when the snapshot describes no such provider. */
|
|
1219
|
+
declare const providerOf: (controller: Controller$1, providerId: string | null | undefined) => Descriptor | null;
|
|
1220
|
+
/** The provider as the customer knows it, falling back to the id when the snapshot has no name. */
|
|
1221
|
+
declare const displayName: (controller: Controller$1, providerId: string) => string;
|
|
1028
1222
|
/**
|
|
1029
1223
|
* Whether the flow offers a connect surface: only when discovery names a host, always, or never.
|
|
1030
1224
|
* `never` is a host that decides for itself, such as a domain already ready without DomainKit; a
|
|
@@ -1034,101 +1228,83 @@ type Invitation = "always" | "detected" | "never";
|
|
|
1034
1228
|
/**
|
|
1035
1229
|
* Whether the connect surface has anything to offer for this domain: a provider that serves the
|
|
1036
1230
|
* zone, a connection discovery already found, one the owner already holds, or a command already
|
|
1037
|
-
* running. Never while a connection is held, which is what `holdsConnection` answers.
|
|
1038
|
-
*
|
|
1039
|
-
* DomainKit's rather than competing with them.
|
|
1231
|
+
* running. Never while a connection is held, which is what `holdsConnection` answers. A host reads
|
|
1232
|
+
* it to order its own offers beside DomainKit's rather than competing with them.
|
|
1040
1233
|
*/
|
|
1041
1234
|
declare const offering: (controller: Controller$1, connect?: Invitation) => boolean;
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
*/
|
|
1049
|
-
readonly connect?: Invitation;
|
|
1050
|
-
}
|
|
1051
|
-
/**
|
|
1052
|
-
* The disconnected offer: the provider whose nameservers serve the domain, what that means, and
|
|
1053
|
-
* the trigger that connects it. With no host detected there is nothing to offer, so nothing
|
|
1054
|
-
* renders unless the host application asks for the dialog anyway.
|
|
1055
|
-
*/
|
|
1056
|
-
declare function Prompt({ connect, controller, ...props }: PromptProps): ReactElement | null;
|
|
1057
|
-
interface DisconnectDialogProps {
|
|
1058
|
-
readonly controller: Controller$1;
|
|
1059
|
-
/** The receipt the cleanup this dialog ran produced, for a host that tracks its own state. */
|
|
1060
|
-
readonly onCleaned?: (receipt: Receipt.Model) => void;
|
|
1061
|
-
readonly trigger?: ReactNode;
|
|
1235
|
+
/** A connection this owner already holds that would serve the domain, as one list to offer. */
|
|
1236
|
+
interface Reusable {
|
|
1237
|
+
readonly connectionId: string;
|
|
1238
|
+
/** The zone the connection would attach, when discovery named one. */
|
|
1239
|
+
readonly zone: string | undefined;
|
|
1240
|
+
readonly label: string;
|
|
1062
1241
|
}
|
|
1063
1242
|
/**
|
|
1064
|
-
*
|
|
1065
|
-
*
|
|
1066
|
-
* connection; a plan with nothing in it is not a failure, so it goes straight to the release.
|
|
1067
|
-
*
|
|
1068
|
-
* The cleanup is this dialog's own, so nothing re-reads the snapshot in between: the disconnect
|
|
1069
|
-
* needs the connection the cleanup just used.
|
|
1243
|
+
* Every connection the customer can attach without proving anything: the one discovery resolved,
|
|
1244
|
+
* the candidates a zone choice is between, and the connections the snapshot lists as reusable.
|
|
1070
1245
|
*/
|
|
1071
|
-
declare
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1246
|
+
declare const reusableConnections: (controller: Controller$1) => ReadonlyArray<Reusable>;
|
|
1247
|
+
/** The fields one token method declares, split into what the surface asks for and what it hides. */
|
|
1248
|
+
interface MethodFields {
|
|
1249
|
+
readonly required: ReadonlyArray<Field>;
|
|
1250
|
+
/** The fields a provider does not need, which the surface keeps behind a disclosure. */
|
|
1251
|
+
readonly optional: ReadonlyArray<Field>;
|
|
1252
|
+
/** The field the provider's documentation link explains: the first secret, else the first field. */
|
|
1253
|
+
readonly explains: string | null;
|
|
1254
|
+
}
|
|
1255
|
+
/** One declared auth method, with the fields it asks for already arranged. */
|
|
1256
|
+
interface DescribedMethod {
|
|
1257
|
+
readonly kind: Storage.AuthMethod;
|
|
1258
|
+
readonly descriptor: MethodDescriptor;
|
|
1259
|
+
/** `null` for a method the customer clicks through, which asks for nothing on the page. */
|
|
1260
|
+
readonly fields: MethodFields | null;
|
|
1261
|
+
}
|
|
1262
|
+
/** What one provider offers, in the order the descriptor declares it. */
|
|
1263
|
+
interface DescribedMethods {
|
|
1264
|
+
/** The methods the customer clicks through: OAuth and the provider's own integration. */
|
|
1265
|
+
readonly interactive: ReadonlyArray<DescribedMethod>;
|
|
1266
|
+
/** The methods that ask for credentials on the page. */
|
|
1267
|
+
readonly typed: ReadonlyArray<DescribedMethod>;
|
|
1268
|
+
/**
|
|
1269
|
+
* Both kinds are on offer, so the surface shows the interactive one and a control that opens the
|
|
1270
|
+
* token form in its place: one decision at a time rather than a wall of alternatives.
|
|
1271
|
+
*/
|
|
1272
|
+
readonly alternate: boolean;
|
|
1076
1273
|
}
|
|
1274
|
+
/** One provider's auth methods, arranged for a surface that asks for one decision at a time. */
|
|
1275
|
+
declare const describeMethods: (provider: Descriptor) => DescribedMethods;
|
|
1077
1276
|
/**
|
|
1078
|
-
*
|
|
1079
|
-
*
|
|
1277
|
+
* The one field a rejected command was about, if any. A provider that turns down credentials is
|
|
1278
|
+
* answering the secret it was given, and it names no field, so the first secret carries the
|
|
1279
|
+
* answer; anything else is about the request rather than one input.
|
|
1080
1280
|
*/
|
|
1081
|
-
declare
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
readonly returnTo?: string | null;
|
|
1085
|
-
/** Offer the connect dialog even when discovery names no host. Defaults to `detected`. */
|
|
1086
|
-
readonly connect?: Invitation;
|
|
1087
|
-
/** The receipt a cleanup run from the disconnect dialog produced. */
|
|
1088
|
-
readonly onCleaned?: (receipt: Receipt.Model) => void;
|
|
1089
|
-
}
|
|
1090
|
-
/** Connection on its own: the card once connected, the prompt until then. */
|
|
1091
|
-
declare function Flow$2({ connect, domain, onCleaned, returnTo, ...props }: FlowProps$2): ReactElement;
|
|
1281
|
+
declare const rejectedField: (error: DomainKit.Error | null, fields: ReadonlyArray<Field>) => string | null;
|
|
1282
|
+
/** Whether a failure was raised by this provider's method, so the form answers beside it. */
|
|
1283
|
+
declare const attempted: (controller: Controller$1, provider: string, method: Storage.AuthMethod) => DomainKit.Error | null;
|
|
1092
1284
|
declare namespace provision_d_exports {
|
|
1093
|
-
export {
|
|
1285
|
+
export { Controller$2 as Controller, Options$1 as Options, State$2 as State, pendingPlan, planOf, useController$1 as useController };
|
|
1094
1286
|
}
|
|
1095
1287
|
interface Options$1 {
|
|
1096
1288
|
readonly domain: string;
|
|
1097
1289
|
readonly requirements: ReadonlyArray<DnsRecord.Model>;
|
|
1098
1290
|
readonly onApplied?: (receipt: Receipt.Model) => void;
|
|
1291
|
+
/** Refuse every step. Defaults to the surrounding `readOnly`. */
|
|
1292
|
+
readonly readOnly?: boolean;
|
|
1099
1293
|
}
|
|
1100
|
-
declare function useController$1({ domain, onApplied, requirements }: Options$1): Controller$2;
|
|
1101
|
-
interface RootState$2 extends Record<string, unknown> {
|
|
1102
|
-
readonly status: State$3["_tag"];
|
|
1103
|
-
}
|
|
1104
|
-
interface RootProps$4 extends PartProps<"div", RootState$2> {
|
|
1105
|
-
readonly controller: Controller$2;
|
|
1106
|
-
}
|
|
1107
|
-
declare function Root$4({ controller, ...props }: RootProps$4): ReactElement;
|
|
1108
|
-
interface DialogProps extends Omit<DialogProps$3, "kind"> {}
|
|
1109
|
-
declare function Dialog(props: DialogProps): ReactElement;
|
|
1110
|
-
interface ActionsProps extends Omit<ActionsProps$2, "kind"> {}
|
|
1111
|
-
/** Approve and Decline for a plan already under review. */
|
|
1112
|
-
declare function Actions(props: ActionsProps): ReactElement | null;
|
|
1113
|
-
interface OutcomeProps$1 extends Omit<OutcomeProps$4, "kind"> {}
|
|
1114
|
-
declare function Outcome$2(props: OutcomeProps$1): ReactElement | null;
|
|
1115
|
-
interface StatusProps$2 extends Omit<StatusProps$5, "kind"> {}
|
|
1116
|
-
declare function Status$2(props: StatusProps$2): ReactElement;
|
|
1117
|
-
interface FlowProps$1 extends Omit<RootProps$4, "controller"> {
|
|
1118
|
-
readonly domain: string;
|
|
1119
|
-
readonly onApplied?: (receipt: Receipt.Model) => void;
|
|
1120
|
-
readonly requirements: ReadonlyArray<DnsRecord.Model>;
|
|
1121
|
-
readonly trigger?: ReactNode;
|
|
1122
|
-
}
|
|
1123
|
-
/** Provisioning on its own: a trigger that plans, then the review dialog. */
|
|
1124
|
-
declare function Flow$1({ domain, onApplied, requirements, trigger, ...props }: FlowProps$1): import("react/jsx-runtime").JSX.Element;
|
|
1294
|
+
declare function useController$1({ domain, onApplied, readOnly, requirements }: Options$1): Controller$2;
|
|
1125
1295
|
declare namespace verify_d_exports {
|
|
1126
|
-
export { Controller, Evidence,
|
|
1296
|
+
export { Controller, Evidence, HostEvidence, Options, Readiness$1 as Readiness, Requirement, State, useController, valuesOf };
|
|
1127
1297
|
}
|
|
1128
1298
|
type Readiness$1 = Transport.Readiness;
|
|
1129
1299
|
type HostEvidence = Readiness$1["host"][number];
|
|
1130
1300
|
type Requirement = Readiness$1["requirements"][number];
|
|
1131
1301
|
type Evidence = Requirement["evidence"][number];
|
|
1302
|
+
/**
|
|
1303
|
+
* What the observer read back for the requirement's name, or `null` when it read nothing back at
|
|
1304
|
+
* all. Host evidence reports a status the host reached rather than values read off a name, and an
|
|
1305
|
+
* `unknown` observation is a lookup that never answered, which is not the same as finding nothing.
|
|
1306
|
+
*/
|
|
1307
|
+
declare const valuesOf: (evidence: Evidence) => ReadonlyArray<string> | null;
|
|
1132
1308
|
/**
|
|
1133
1309
|
* Readiness rides on the state rather than a ref, so it can never outlive the render that
|
|
1134
1310
|
* produced it: a controller pointed at a new domain has no readiness in the very first frame.
|
|
@@ -1263,90 +1439,17 @@ interface Options {
|
|
|
1263
1439
|
}
|
|
1264
1440
|
/** Observe once on mount, then follow the readiness's own `nextCheckAt` while polling is on. */
|
|
1265
1441
|
declare function useController({ domain, polling, requirements }: Options): Controller;
|
|
1266
|
-
interface RootState$1 extends Record<string, unknown> {
|
|
1267
|
-
readonly status: State["_tag"];
|
|
1268
|
-
}
|
|
1269
|
-
interface RootProps$3 extends PartProps<"div", RootState$1> {
|
|
1270
|
-
readonly controller: Controller;
|
|
1271
|
-
}
|
|
1272
|
-
declare function Root$3({ controller, ...props }: RootProps$3): ReactElement;
|
|
1273
|
-
interface ObserveActionProps extends PartProps<"button", RootState$1> {
|
|
1274
|
-
readonly controller: Controller;
|
|
1275
|
-
}
|
|
1276
|
-
declare function ObserveAction({ controller, ...props }: ObserveActionProps): ReactElement;
|
|
1277
|
-
interface EvidenceProps {
|
|
1278
|
-
readonly readiness: Readiness$1;
|
|
1279
|
-
}
|
|
1280
|
-
/**
|
|
1281
|
-
* Per-requirement readiness and, below it, the host's own evidence: an SES identity, a certificate,
|
|
1282
|
-
* anything DomainKit cannot observe but the host feeds in.
|
|
1283
|
-
*/
|
|
1284
|
-
declare function Evidence({ readiness }: EvidenceProps): ReactElement;
|
|
1285
|
-
interface OutcomeProps extends RootProps$7 {
|
|
1286
|
-
readonly controller: Controller;
|
|
1287
|
-
}
|
|
1288
|
-
/**
|
|
1289
|
-
* The last observation that failed. Observing reads the world rather than changing the domain, so
|
|
1290
|
-
* the retry stays even in read-only.
|
|
1291
|
-
*/
|
|
1292
|
-
declare function Outcome$1({ children, controller, ...props }: OutcomeProps): ReactElement | null;
|
|
1293
|
-
interface StatusProps$1 extends Omit<RootProps$3, "render"> {
|
|
1294
|
-
/** Replace the popover surface with a panel of the host's own. */
|
|
1295
|
-
readonly render?: (props: {
|
|
1296
|
-
readonly open: boolean;
|
|
1297
|
-
readonly children: ReactNode;
|
|
1298
|
-
}) => ReactNode;
|
|
1299
|
-
}
|
|
1300
|
-
/** The default verification slot: a button that observes, with the evidence behind it. */
|
|
1301
|
-
declare function Status$1({ controller, render, ...props }: StatusProps$1): ReactElement;
|
|
1302
1442
|
declare namespace domain_d_exports {
|
|
1303
|
-
export {
|
|
1304
|
-
}
|
|
1305
|
-
interface RecordsSlotProps {
|
|
1306
|
-
readonly records: ReadonlyArray<DnsRecord.Model>;
|
|
1307
|
-
readonly readiness: Readiness$1 | null;
|
|
1308
|
-
readonly controller: Controller;
|
|
1309
|
-
readonly domain: string;
|
|
1310
|
-
}
|
|
1311
|
-
interface VerificationSlotProps {
|
|
1312
|
-
readonly controller: Controller;
|
|
1313
|
-
readonly domain: string;
|
|
1314
|
-
}
|
|
1315
|
-
interface ActionsSlotProps {
|
|
1316
|
-
readonly connection: Controller$1;
|
|
1317
|
-
readonly provisioning: Controller$2;
|
|
1318
|
-
readonly cleanup: Controller$2;
|
|
1319
|
-
readonly domain: string;
|
|
1320
|
-
}
|
|
1321
|
-
interface ConnectionSlotProps {
|
|
1322
|
-
readonly controller: Controller$1;
|
|
1323
|
-
readonly domain: string;
|
|
1324
|
-
/** What the flow was told to offer when discovery names no host. */
|
|
1325
|
-
readonly connect: Invitation;
|
|
1443
|
+
export { Flow, FlowOptions, FlowState, useFlow };
|
|
1326
1444
|
}
|
|
1327
1445
|
/**
|
|
1328
|
-
*
|
|
1329
|
-
*
|
|
1330
|
-
*/
|
|
1331
|
-
interface Slots {
|
|
1332
|
-
/** The requirements table. Defaults to `Records.Table` with readiness when there is any. */
|
|
1333
|
-
readonly records?: (props: RecordsSlotProps) => ReactNode;
|
|
1334
|
-
/** Defaults to `Verify.Status`. Rendered only when the transport declares `verification`. */
|
|
1335
|
-
readonly verification?: (props: VerificationSlotProps) => ReactNode;
|
|
1336
|
-
/** Defaults to Approve and Decline, plus cleanup when the transport declares it. */
|
|
1337
|
-
readonly actions?: (props: ActionsSlotProps) => ReactNode;
|
|
1338
|
-
/** Defaults to `Connect.Card` once connected and `Connect.Prompt` until then. */
|
|
1339
|
-
readonly connection?: (props: ConnectionSlotProps) => ReactNode;
|
|
1340
|
-
}
|
|
1341
|
-
/**
|
|
1342
|
-
* What DomainKit has to say about this domain, on the part's data attributes, in `className` and
|
|
1343
|
-
* `style` callbacks, and through `onState`. A host reads `connected` and `offering` to order its
|
|
1344
|
-
* own offers beside DomainKit's: an offer of its own competes while `offering` is true, and a
|
|
1446
|
+
* What DomainKit has to say about this domain. A host reads `connected` and `offering` to order
|
|
1447
|
+
* its own offers beside DomainKit's: an offer of its own competes while `offering` is true, and a
|
|
1345
1448
|
* domain DomainKit holds needs none.
|
|
1346
1449
|
*/
|
|
1347
|
-
interface FlowState
|
|
1450
|
+
interface FlowState {
|
|
1348
1451
|
readonly connection: State$1["_tag"];
|
|
1349
|
-
readonly provisioning: State$
|
|
1452
|
+
readonly provisioning: State$2["_tag"];
|
|
1350
1453
|
/**
|
|
1351
1454
|
* DomainKit holds a connection for this domain, including while a command it started over that
|
|
1352
1455
|
* connection is still running. `offering` is never true at the same time.
|
|
@@ -1356,6 +1459,11 @@ interface FlowState extends Record<string, unknown> {
|
|
|
1356
1459
|
readonly offering: boolean;
|
|
1357
1460
|
/** Who holds the connection, or whose nameservers serve the zone. */
|
|
1358
1461
|
readonly provider: string | null;
|
|
1462
|
+
/**
|
|
1463
|
+
* The account the records go to, as the provider labelled the zone when the domain was attached.
|
|
1464
|
+
* `null` until there is an attachment.
|
|
1465
|
+
*/
|
|
1466
|
+
readonly label: string | null;
|
|
1359
1467
|
/**
|
|
1360
1468
|
* The apply receipt this domain's latest provisioning attempt produced, which is what cleanup
|
|
1361
1469
|
* plans from. A host's own "remove this domain" surface offers cleanup only when there is one.
|
|
@@ -1363,11 +1471,21 @@ interface FlowState extends Record<string, unknown> {
|
|
|
1363
1471
|
readonly receiptId: Receipt.ReceiptId | null;
|
|
1364
1472
|
/** `receiptId !== null`: DomainKit applied records here and can prove which. */
|
|
1365
1473
|
readonly applied: boolean;
|
|
1474
|
+
/**
|
|
1475
|
+
* The surface may read this domain but not write to it, so a host can say why rather than
|
|
1476
|
+
* leaving a customer in front of a page with nothing on it.
|
|
1477
|
+
*/
|
|
1478
|
+
readonly readOnly: boolean;
|
|
1366
1479
|
}
|
|
1367
|
-
interface
|
|
1480
|
+
interface FlowOptions {
|
|
1368
1481
|
readonly domain: string;
|
|
1369
1482
|
readonly requirements: ReadonlyArray<DnsRecord.Model>;
|
|
1370
|
-
|
|
1483
|
+
/**
|
|
1484
|
+
* Offer the connect surface even when discovery names no host, for a host application that lets
|
|
1485
|
+
* a customer connect a provider the domain's nameservers do not point at, or `never` for a
|
|
1486
|
+
* domain the host has already settled another way. Defaults to `detected`.
|
|
1487
|
+
*/
|
|
1488
|
+
readonly connect?: Invitation;
|
|
1371
1489
|
readonly onApplied?: (receipt: Receipt.Model) => void;
|
|
1372
1490
|
readonly onCleaned?: (receipt: Receipt.Model) => void;
|
|
1373
1491
|
/**
|
|
@@ -1375,62 +1493,28 @@ interface FlowProps extends Omit<PartProps<"div", FlowState>, "children"> {
|
|
|
1375
1493
|
* from; pass `null` to let the server's `defaultReturnTo` decide.
|
|
1376
1494
|
*/
|
|
1377
1495
|
readonly returnTo?: string | null;
|
|
1378
|
-
/**
|
|
1496
|
+
/** Report this domain's state without the controls that change it. Defaults to the root's. */
|
|
1379
1497
|
readonly readOnly?: boolean;
|
|
1380
|
-
/**
|
|
1381
|
-
* Offer the connect dialog even when discovery names no host, for a host application that lets
|
|
1382
|
-
* a customer connect a provider the domain's nameservers do not point at, or `never` for a
|
|
1383
|
-
* domain the host has already settled another way. Defaults to `detected`.
|
|
1384
|
-
*/
|
|
1385
|
-
readonly connect?: Invitation;
|
|
1386
|
-
/** Fires whenever what DomainKit has to say about this domain changes, and once on mount. */
|
|
1387
|
-
readonly onState?: (state: FlowState) => void;
|
|
1388
|
-
/**
|
|
1389
|
-
* `auto` plans and opens the review the moment a connection lands, so connecting and adding the
|
|
1390
|
-
* records is one pass rather than three. `manual` waits for the trigger.
|
|
1391
|
-
*/
|
|
1392
|
-
readonly review?: Review;
|
|
1393
1498
|
}
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
/**
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
/**
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
*/
|
|
1408
|
-
|
|
1409
|
-
/**
|
|
1410
|
-
readonly
|
|
1411
|
-
readonly close: ReactNode;
|
|
1412
|
-
readonly copied: ReactNode;
|
|
1413
|
-
readonly copy: ReactNode;
|
|
1414
|
-
readonly download: ReactNode;
|
|
1415
|
-
readonly external: ReactNode;
|
|
1416
|
-
readonly failure: ReactNode;
|
|
1417
|
-
readonly pending: ReactNode;
|
|
1418
|
-
readonly success: ReactNode;
|
|
1419
|
-
readonly warning: ReactNode;
|
|
1499
|
+
interface Flow {
|
|
1500
|
+
readonly domain: string;
|
|
1501
|
+
/** What the host asked for, as the surface renders it row by row. */
|
|
1502
|
+
readonly requirements: ReadonlyArray<DnsRecord.Model>;
|
|
1503
|
+
readonly state: FlowState;
|
|
1504
|
+
readonly connection: Controller$1;
|
|
1505
|
+
readonly provisioning: Controller$2;
|
|
1506
|
+
/** Bound to the domain's latest apply receipt, which is the only thing cleanup may undo. */
|
|
1507
|
+
readonly cleanup: Controller$2;
|
|
1508
|
+
readonly verification: Controller;
|
|
1509
|
+
/** The plan the rows report, which is one still awaiting its apply. */
|
|
1510
|
+
readonly plan: Plan.Model | null;
|
|
1511
|
+
readonly readiness: Readiness$1 | null;
|
|
1512
|
+
/** Which capability groups the transport declares, so a surface renders only what it can run. */
|
|
1513
|
+
readonly capabilities: ReadonlyArray<Transport.Capability>;
|
|
1514
|
+
/** What the flow was told to offer when discovery names no host. */
|
|
1515
|
+
readonly invitation: Invitation;
|
|
1420
1516
|
}
|
|
1421
|
-
declare
|
|
1422
|
-
readonly chevron: import("react/jsx-runtime").JSX.Element;
|
|
1423
|
-
readonly close: import("react/jsx-runtime").JSX.Element;
|
|
1424
|
-
readonly copied: import("react/jsx-runtime").JSX.Element;
|
|
1425
|
-
readonly copy: import("react/jsx-runtime").JSX.Element;
|
|
1426
|
-
readonly download: import("react/jsx-runtime").JSX.Element;
|
|
1427
|
-
readonly external: import("react/jsx-runtime").JSX.Element;
|
|
1428
|
-
readonly failure: import("react/jsx-runtime").JSX.Element;
|
|
1429
|
-
readonly pending: import("react/jsx-runtime").JSX.Element;
|
|
1430
|
-
readonly success: import("react/jsx-runtime").JSX.Element;
|
|
1431
|
-
readonly warning: import("react/jsx-runtime").JSX.Element;
|
|
1432
|
-
};
|
|
1433
|
-
declare function useIcons(): Icons;
|
|
1517
|
+
declare function useFlow({ connect, domain, onApplied, onCleaned, readOnly, requirements, returnTo }: FlowOptions): Flow;
|
|
1434
1518
|
declare namespace messages_d_exports {
|
|
1435
1519
|
export { Catalog, EvidenceLike, Outcome, OutcomeContext, english, failure, merge, outcome };
|
|
1436
1520
|
}
|
|
@@ -1464,8 +1548,10 @@ interface Catalog {
|
|
|
1464
1548
|
readonly useTokenInstead: string;
|
|
1465
1549
|
/** Returns from one method's form to the provider's methods. */
|
|
1466
1550
|
readonly back: string;
|
|
1467
|
-
/** The connected card's
|
|
1468
|
-
readonly
|
|
1551
|
+
/** The connected card's identity: who holds the connection and which account it reaches. */
|
|
1552
|
+
readonly connectedAccount: (provider: string, account: string) => string;
|
|
1553
|
+
/** How many records this domain's apply receipt proves DomainKit added. */
|
|
1554
|
+
readonly recordsAdded: (count: number) => string;
|
|
1469
1555
|
readonly needsReconnect: string;
|
|
1470
1556
|
/** The disconnect dialog's scope question, when the connection serves other domains too. */
|
|
1471
1557
|
readonly disconnectScope: string;
|
|
@@ -1477,6 +1563,14 @@ interface Catalog {
|
|
|
1477
1563
|
readonly download: string;
|
|
1478
1564
|
readonly useConnection: (label: string) => string;
|
|
1479
1565
|
readonly chooseZone: string;
|
|
1566
|
+
/** The domain field's listbox, named for a customer reading it with assistive technology. */
|
|
1567
|
+
readonly zoneSuggestions: string;
|
|
1568
|
+
/** Which account a typed domain's records will go to. */
|
|
1569
|
+
readonly recordsGoTo: (provider: string, account: string) => string;
|
|
1570
|
+
/** A typed domain no connected account reaches; the customer adds the records by hand. */
|
|
1571
|
+
readonly notInConnectedAccount: string;
|
|
1572
|
+
/** A held connection whose credential the provider turned down. */
|
|
1573
|
+
readonly reconnectAccount: (account: string) => string;
|
|
1480
1574
|
readonly getToken: string;
|
|
1481
1575
|
readonly loading: string;
|
|
1482
1576
|
readonly connecting: string;
|
|
@@ -1494,11 +1588,16 @@ interface Catalog {
|
|
|
1494
1588
|
/** The dialog heading, and the trigger, when no provider is named yet. */
|
|
1495
1589
|
readonly connectAnyTitle: string;
|
|
1496
1590
|
/** What the disconnected prompt says about the provider whose nameservers serve the domain. */
|
|
1497
|
-
readonly
|
|
1591
|
+
readonly hostDetected: (provider: string) => string;
|
|
1498
1592
|
readonly connectDescription: (domain: string) => string;
|
|
1499
1593
|
readonly connectedTo: (provider: string) => string;
|
|
1500
1594
|
/** Shown where a connect control would be when the customer may not connect. */
|
|
1501
1595
|
readonly notConnected: string;
|
|
1596
|
+
/**
|
|
1597
|
+
* What a customer who may read the domain but not write to it is told in place of the connect
|
|
1598
|
+
* control, so the surface explains the gap rather than leaving an empty row.
|
|
1599
|
+
*/
|
|
1600
|
+
readonly administratorConnects: (provider: string) => string;
|
|
1502
1601
|
readonly reconnectRequired: (provider: string) => string;
|
|
1503
1602
|
readonly disconnectTitle: (provider: string) => string;
|
|
1504
1603
|
/**
|
|
@@ -1533,6 +1632,10 @@ interface Catalog {
|
|
|
1533
1632
|
readonly declineReason: (reason: string) => string;
|
|
1534
1633
|
readonly operation: (operation: Plan.Operation) => string;
|
|
1535
1634
|
readonly conflictReason: (reason: Plan.Conflict["reason"]) => string;
|
|
1635
|
+
/** What to do about a conflict, in the row that reports it. */
|
|
1636
|
+
readonly conflictAdvice: (reason: Plan.Conflict["reason"]) => string;
|
|
1637
|
+
/** What a pending plan holds for one row: a write, a record already there, or a blocker. */
|
|
1638
|
+
readonly planStatus: (operation: Plan.Operation) => string;
|
|
1536
1639
|
readonly attemptStatus: (status: Storage.AttemptStatus) => string;
|
|
1537
1640
|
readonly recordsCaption: (domain: string) => string;
|
|
1538
1641
|
readonly headingType: string;
|
|
@@ -1614,74 +1717,49 @@ declare const merge: (overrides?: Partial<Catalog>) => Catalog;
|
|
|
1614
1717
|
declare const outcome: (error: DomainKit.Error, catalog: Catalog, context?: OutcomeContext) => Outcome;
|
|
1615
1718
|
/** The same failure as one sentence, for a host that renders text rather than a card. */
|
|
1616
1719
|
declare const failure: (error: DomainKit.Error, catalog: Catalog, context?: OutcomeContext) => string;
|
|
1617
|
-
declare namespace theme_d_exports {
|
|
1618
|
-
export { Theme, toStyle };
|
|
1619
|
-
}
|
|
1620
|
-
interface Theme {
|
|
1621
|
-
readonly accent?: string;
|
|
1622
|
-
readonly accentContrast?: string;
|
|
1623
|
-
readonly backdrop?: string;
|
|
1624
|
-
readonly background?: string;
|
|
1625
|
-
readonly border?: string;
|
|
1626
|
-
readonly danger?: string;
|
|
1627
|
-
readonly dangerContrast?: string;
|
|
1628
|
-
readonly fill?: string;
|
|
1629
|
-
readonly fontFamily?: string;
|
|
1630
|
-
readonly muted?: string;
|
|
1631
|
-
readonly radius?: string;
|
|
1632
|
-
readonly shadow?: string;
|
|
1633
|
-
readonly success?: string;
|
|
1634
|
-
readonly text?: string;
|
|
1635
|
-
readonly warning?: string;
|
|
1636
|
-
}
|
|
1637
|
-
declare function toStyle(theme?: Theme): CSSProperties;
|
|
1638
1720
|
declare namespace domain_kit_d_exports {
|
|
1639
|
-
export { ReadOnly, Root
|
|
1640
|
-
}
|
|
1641
|
-
interface RootState extends Record<string, unknown> {
|
|
1642
|
-
readonly colorScheme: "dark" | "inherit" | "light";
|
|
1721
|
+
export { ReadOnly, Root, RootProps, StableTransport, useCapabilities, useDomainKit, useMessages, useReadOnly, useTransport };
|
|
1643
1722
|
}
|
|
1644
|
-
interface RootProps
|
|
1723
|
+
interface RootProps {
|
|
1645
1724
|
readonly children: ReactNode;
|
|
1646
|
-
readonly colorScheme?: RootState["colorScheme"];
|
|
1647
|
-
readonly icons?: Partial<Icons>;
|
|
1648
|
-
readonly marks?: Marks;
|
|
1649
1725
|
readonly messages?: Partial<Catalog>;
|
|
1650
1726
|
/** Where an interactive provider flow sends the customer. Defaults to `window.location`. */
|
|
1651
1727
|
readonly navigate?: (url: string) => void;
|
|
1652
1728
|
readonly onEvent?: Listener;
|
|
1653
|
-
readonly portalContainer?: HTMLElement | null;
|
|
1654
1729
|
/**
|
|
1655
|
-
*
|
|
1656
|
-
* but not write to it. Capability gating already hides a group the transport does
|
|
1657
|
-
* this covers authorization the transport cannot express, such as a member of an
|
|
1730
|
+
* Report the domain's state without the controls that change it, for a customer who may read
|
|
1731
|
+
* the domain but not write to it. Capability gating already hides a group the transport does
|
|
1732
|
+
* not declare; this covers authorization the transport cannot express, such as a member of an
|
|
1733
|
+
* organisation. Every flow carries it on `FlowState.readOnly`, so a surface can explain it.
|
|
1658
1734
|
*/
|
|
1659
1735
|
readonly readOnly?: boolean;
|
|
1660
1736
|
/** Bump to re-inspect every mounted domain after a change the UI did not make. */
|
|
1661
1737
|
readonly revision?: number;
|
|
1662
|
-
readonly theme?: Theme;
|
|
1663
1738
|
/** The transport, by value. Rebuilding it inline on every render does not restart controllers. */
|
|
1664
1739
|
readonly transport: Transport.Interface;
|
|
1665
1740
|
}
|
|
1666
1741
|
interface ContextValue {
|
|
1667
1742
|
readonly capabilities: ReadonlyArray<Transport.Capability>;
|
|
1668
|
-
readonly colorScheme: RootState["colorScheme"];
|
|
1669
1743
|
readonly emit: Listener;
|
|
1670
|
-
readonly marks: Marks;
|
|
1671
1744
|
readonly messages: Catalog;
|
|
1672
1745
|
readonly navigate: (url: string) => void;
|
|
1673
|
-
readonly portalContainer: RefObject<HTMLElement | null>;
|
|
1674
1746
|
readonly readOnly: boolean;
|
|
1675
1747
|
readonly revision: number;
|
|
1676
|
-
readonly themeStyle: ReturnType<typeof toStyle>;
|
|
1677
1748
|
readonly transport: Transport.Interface;
|
|
1678
1749
|
}
|
|
1679
1750
|
interface StableTransport {
|
|
1680
1751
|
readonly transport: Transport.Interface;
|
|
1681
1752
|
readonly capabilities: ReadonlyArray<Transport.Capability>;
|
|
1682
1753
|
}
|
|
1683
|
-
|
|
1754
|
+
/**
|
|
1755
|
+
* The transport, the catalog, and the two host callbacks every hook below reads. It renders no
|
|
1756
|
+
* element of its own: `@domainkit/react` supplies behaviour, state, copy, and accessibility, and
|
|
1757
|
+
* the host application supplies the markup.
|
|
1758
|
+
*/
|
|
1759
|
+
declare function Root({ children, messages, navigate, onEvent, readOnly, revision, transport }: RootProps): ReactElement;
|
|
1684
1760
|
declare function useDomainKit(): ContextValue;
|
|
1761
|
+
/** The catalog `DomainKit.Root` holds, with the host's overrides already merged in. */
|
|
1762
|
+
declare function useMessages(): Catalog;
|
|
1685
1763
|
/** The transport `DomainKit.Root` holds, with the identity it keeps for the whole mount. */
|
|
1686
1764
|
declare function useTransport(): Transport.Interface;
|
|
1687
1765
|
/** Narrow one subtree to read-only without touching the rest of the page. */
|
|
@@ -1689,39 +1767,22 @@ declare function ReadOnly({ children, value }: {
|
|
|
1689
1767
|
readonly children: ReactNode;
|
|
1690
1768
|
readonly value: boolean;
|
|
1691
1769
|
}): import("react/jsx-runtime").JSX.Element;
|
|
1692
|
-
/** Whether this
|
|
1770
|
+
/** Whether this surface may offer controls that change the domain. */
|
|
1693
1771
|
declare function useReadOnly(): boolean;
|
|
1694
|
-
/** Which capability groups the host's transport declares, for gating a
|
|
1772
|
+
/** Which capability groups the host's transport declares, for gating a surface of your own. */
|
|
1695
1773
|
declare function useCapabilities(): ReadonlyArray<Transport.Capability>;
|
|
1696
|
-
declare namespace
|
|
1697
|
-
export {
|
|
1698
|
-
}
|
|
1699
|
-
declare const Kind: (props: PartProps<"span", Record$1<string, unknown>>) => ReactElement;
|
|
1700
|
-
declare const Type: (props: PartProps<"strong", Record$1<string, unknown>>) => ReactElement;
|
|
1701
|
-
declare const Record$1: (props: PartProps<"span", Record$1<string, unknown>>) => ReactElement;
|
|
1702
|
-
declare const Name: (props: PartProps<"span", Record$1<string, unknown>>) => ReactElement;
|
|
1703
|
-
declare const Reason$1: (props: PartProps<"span", Record$1<string, unknown>>) => ReactElement;
|
|
1704
|
-
interface ItemProps extends PartProps<"li", {
|
|
1705
|
-
readonly operation: Plan.Operation["_tag"];
|
|
1706
|
-
}> {
|
|
1707
|
-
readonly operation: Plan.Operation;
|
|
1708
|
-
}
|
|
1709
|
-
declare function Item({ operation, ...props }: ItemProps): ReactElement;
|
|
1710
|
-
interface RootProps$1 extends PartProps<"ul", {
|
|
1711
|
-
readonly count: number;
|
|
1712
|
-
readonly kind: Plan.Kind;
|
|
1713
|
-
}> {
|
|
1714
|
-
readonly count?: number;
|
|
1715
|
-
readonly kind: Plan.Kind;
|
|
1716
|
-
}
|
|
1717
|
-
declare function Root$1({ count, kind, ...props }: RootProps$1): ReactElement;
|
|
1718
|
-
interface ListProps extends Omit<RootProps$1, "children" | "count" | "kind"> {
|
|
1719
|
-
readonly plan: Plan.Model;
|
|
1774
|
+
declare namespace outcome_d_exports {
|
|
1775
|
+
export { Outcome, OutcomeContext, describe, useDescribe };
|
|
1720
1776
|
}
|
|
1721
|
-
/**
|
|
1722
|
-
declare
|
|
1777
|
+
/** The catalog's title and description for one failure. */
|
|
1778
|
+
declare const describe: (error: DomainKit.Error, catalog: Catalog, context?: OutcomeContext) => Outcome;
|
|
1779
|
+
/**
|
|
1780
|
+
* `describe` bound to the catalog `DomainKit.Root` holds. The reason alone cannot name the
|
|
1781
|
+
* provider a customer typed a token for, so the surface supplies it in the context.
|
|
1782
|
+
*/
|
|
1783
|
+
declare function useDescribe(): (error: DomainKit.Error, context?: OutcomeContext) => Outcome;
|
|
1723
1784
|
declare namespace records_d_exports {
|
|
1724
|
-
export {
|
|
1785
|
+
export { CopyController, Readiness, RequirementStatus, Sources, Standing, copyText, downloadZoneFile, identity, requirementsKey, statusOf, toZoneFile, useCopy };
|
|
1725
1786
|
}
|
|
1726
1787
|
type Readiness = Transport.Readiness;
|
|
1727
1788
|
type RequirementStatus = Readiness["requirements"][number]["status"];
|
|
@@ -1733,45 +1794,24 @@ interface CopyController {
|
|
|
1733
1794
|
readonly copy: () => void;
|
|
1734
1795
|
}
|
|
1735
1796
|
declare function useCopy(value: string, resetAfter?: number): CopyController;
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
readonly domain: string;
|
|
1746
|
-
readonly records: ReadonlyArray<DnsRecord.Model>;
|
|
1747
|
-
}
|
|
1748
|
-
declare function ZoneFile({ domain, records, ...props }: ZoneFileProps): ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
1749
|
-
/** The readiness this record reached, or `null` when nothing has observed it. */
|
|
1750
|
-
declare const statusOf: (record: DnsRecord.Model, readiness: Readiness | null | undefined) => RequirementStatus | null;
|
|
1751
|
-
interface StatusProps extends PartProps<"span", {
|
|
1752
|
-
readonly status: RequirementStatus;
|
|
1753
|
-
}> {
|
|
1797
|
+
/**
|
|
1798
|
+
* What a row has to say about one record: while a plan is pending it is what the plan will do to
|
|
1799
|
+
* it, and otherwise what the last observation read back.
|
|
1800
|
+
*/
|
|
1801
|
+
type Standing = {
|
|
1802
|
+
readonly _tag: "Operation";
|
|
1803
|
+
readonly operation: Plan.Operation;
|
|
1804
|
+
} | {
|
|
1805
|
+
readonly _tag: "Readiness";
|
|
1754
1806
|
readonly status: RequirementStatus;
|
|
1807
|
+
};
|
|
1808
|
+
interface Sources {
|
|
1809
|
+
/** A plan still awaiting its apply. Pass `null` once one has landed; readiness answers then. */
|
|
1810
|
+
readonly plan?: Plan.Model | null | undefined;
|
|
1811
|
+
readonly readiness?: Readiness | null | undefined;
|
|
1755
1812
|
}
|
|
1756
|
-
|
|
1757
|
-
declare const
|
|
1758
|
-
declare const Body: (props: PartProps<"tbody", Record<string, unknown>>) => ReactElement;
|
|
1759
|
-
declare const Footer: (props: PartProps<"tfoot", Record<string, unknown>>) => ReactElement;
|
|
1760
|
-
declare const Row: (props: PartProps<"tr", Record<string, unknown>>) => ReactElement;
|
|
1761
|
-
declare const Head: (props: PartProps<"th", Record<string, unknown>>) => ReactElement;
|
|
1762
|
-
declare const Cell: (props: PartProps<"td", Record<string, unknown>>) => ReactElement;
|
|
1763
|
-
declare const Caption: (props: PartProps<"caption", Record<string, unknown>>) => ReactElement;
|
|
1764
|
-
declare const Value: (props: PartProps<"span", Record<string, unknown>>) => ReactElement;
|
|
1765
|
-
declare const Purpose: (props: PartProps<"span", Record<string, unknown>>) => ReactElement;
|
|
1766
|
-
declare const CardHeader: (props: PartProps<"div", Record<string, unknown>>) => ReactElement;
|
|
1767
|
-
declare const CardTitle: (props: PartProps<"strong", Record<string, unknown>>) => ReactElement;
|
|
1768
|
-
declare const CardContent: (props: PartProps<"dl", Record<string, unknown>>) => ReactElement;
|
|
1769
|
-
interface RootProps extends PartProps<"table", {
|
|
1770
|
-
readonly count: number;
|
|
1771
|
-
}> {
|
|
1772
|
-
readonly count?: number;
|
|
1773
|
-
}
|
|
1774
|
-
declare function Root({ count, ...props }: RootProps): import("react/jsx-runtime").JSX.Element;
|
|
1813
|
+
/** The row's standing, or `null` when neither a plan nor an observation covers the record. */
|
|
1814
|
+
declare const statusOf: (record: DnsRecord.Model, sources: Sources) => Standing | null;
|
|
1775
1815
|
/** A stable React key for a requirement: type, name, and data identify a record. */
|
|
1776
1816
|
declare const identity: (record: DnsRecord.Model) => string;
|
|
1777
1817
|
/**
|
|
@@ -1781,22 +1821,6 @@ declare const identity: (record: DnsRecord.Model) => string;
|
|
|
1781
1821
|
* particular decides whether a name may hold anything else, so readiness turns on it.
|
|
1782
1822
|
*/
|
|
1783
1823
|
declare const requirementsKey: (records: ReadonlyArray<DnsRecord.Model>) => string;
|
|
1784
|
-
interface CardProps extends PartProps<"section", {
|
|
1785
|
-
readonly record: string;
|
|
1786
|
-
}> {
|
|
1787
|
-
readonly readiness?: Readiness | null;
|
|
1788
|
-
readonly record: DnsRecord.Model;
|
|
1789
|
-
}
|
|
1790
|
-
declare function Card({ readiness, record, ...props }: CardProps): ReactElement;
|
|
1791
|
-
interface TableProps extends PartProps<"table", {
|
|
1792
|
-
readonly count: number;
|
|
1793
|
-
}> {
|
|
1794
|
-
readonly caption?: string;
|
|
1795
|
-
readonly readiness?: Readiness | null;
|
|
1796
|
-
readonly records: ReadonlyArray<DnsRecord.Model>;
|
|
1797
|
-
}
|
|
1798
|
-
/** The default records presentation: one row per requirement, with readiness when there is any. */
|
|
1799
|
-
declare function Table({ caption, readiness, records, ...props }: TableProps): ReactElement;
|
|
1800
1824
|
declare namespace testing_d_exports {
|
|
1801
1825
|
export { RecordedCall, RecordingTransport, TransportOptions, transport$1 as transport };
|
|
1802
1826
|
}
|
|
@@ -1848,5 +1872,5 @@ declare const Failure: {
|
|
|
1848
1872
|
}, "_tag">;
|
|
1849
1873
|
};
|
|
1850
1874
|
//#endregion
|
|
1851
|
-
export {
|
|
1875
|
+
export { cleanup_d_exports as Cleanup, connect_d_exports as Connect, domain_d_exports as Domain, domain_kit_d_exports as DomainKit, Event, Failure, type Listener, messages_d_exports as Messages, outcome_d_exports as Outcome, provision_d_exports as Provision, records_d_exports as Records, testing_d_exports as Testing, verify_d_exports as Verify };
|
|
1852
1876
|
//# sourceMappingURL=index.d.mts.map
|