@cloudgrid-io/ui 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/dist/blocks/sign-in-options.d.ts +140 -0
- package/dist/blocks/sign-in-options.d.ts.map +1 -0
- package/dist/blocks/sign-in-options.js +57 -0
- package/dist/blocks/sign-in-options.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Button } from "../ui/button.js";
|
|
3
|
+
/**
|
|
4
|
+
* The sign-in methods, in one place.
|
|
5
|
+
*
|
|
6
|
+
* ## Why this exists (#129)
|
|
7
|
+
*
|
|
8
|
+
* The console rendered its sign-in options in four separate places and they
|
|
9
|
+
* diverged: the invitation-accept screen offered ONLY Google, so an invitee
|
|
10
|
+
* without a Google account could not accept an invitation at all — no error, no
|
|
11
|
+
* fallback, on the one screen whose whole purpose is to let an invited person
|
|
12
|
+
* in. A fifth hand-written list would be the same mistake with a larger blast
|
|
13
|
+
* radius. So the list renders through one component, and adding a provider is
|
|
14
|
+
* one edit at the call site that owns the list rather than four that can
|
|
15
|
+
* silently disagree.
|
|
16
|
+
*
|
|
17
|
+
* ## Presentation only
|
|
18
|
+
*
|
|
19
|
+
* The same line #117 / #119 / #121 / #126 drew. This block holds no auth logic,
|
|
20
|
+
* no provider SDK, no redirect and no token; it renders the methods it is
|
|
21
|
+
* handed and never implies a provider that does not exist. Starting Google
|
|
22
|
+
* OAuth needs a session code the page mints — so that is a callback the page
|
|
23
|
+
* owns. The email option is a LINK, deliberately: middle-click and "open in new
|
|
24
|
+
* tab" work, and the target is visible in the status bar.
|
|
25
|
+
*
|
|
26
|
+
* ## The one thing it does own: `carry`
|
|
27
|
+
*
|
|
28
|
+
* Sign-in must not lose state that rides the URL — where to land afterwards
|
|
29
|
+
* (`return_to`), the onboarding path a NEW user should walk (`arrival`), and
|
|
30
|
+
* for the device flow the code being authorized (`code`) and the client that
|
|
31
|
+
* started it (`source`). Forgetting one is not a visual bug and shows up
|
|
32
|
+
* nowhere: sign-in succeeds and the person silently lands somewhere generic or
|
|
33
|
+
* walks the wrong flow. That has happened three times (`ai_tool`, `invite`,
|
|
34
|
+
* `watermark`).
|
|
35
|
+
*
|
|
36
|
+
* So the page declares what must survive ONCE, in `carry`, and the block
|
|
37
|
+
* applies it to every method uniformly: appended to each link method's `href`,
|
|
38
|
+
* handed to each action method's `onSelect`. The block never knows what the
|
|
39
|
+
* keys mean — the page wires, the block carries.
|
|
40
|
+
*
|
|
41
|
+
* One obligation stays with the caller, loudly: **validate `return_to` before
|
|
42
|
+
* handing it in.** The console keeps its `isSafePostAuthReturn` allowlist and
|
|
43
|
+
* this package cannot import it; an unvalidated `return_to` is an open
|
|
44
|
+
* redirect. Pass the value already validated with the same allowlist the
|
|
45
|
+
* post-auth resolver uses, so there is one thing to audit rather than two.
|
|
46
|
+
*
|
|
47
|
+
* ## Methods are groups
|
|
48
|
+
*
|
|
49
|
+
* `methods` is an array of GROUPS: buttons within a group stack tight, and the
|
|
50
|
+
* divider — "OR" unless `divider` says otherwise — renders between groups.
|
|
51
|
+
* `[[google], [email]]` is the console's current screen; a second OAuth
|
|
52
|
+
* provider joins the first group with no API change. The grouping is what lets
|
|
53
|
+
* the divider sit "between the providers and email" without the block knowing
|
|
54
|
+
* which method is which.
|
|
55
|
+
*
|
|
56
|
+
* ## Icons are handed in
|
|
57
|
+
*
|
|
58
|
+
* Every mark in this package is flattened to `currentColor` and the literal
|
|
59
|
+
* gate keeps it that way, so the four-colour Google G cannot live here without
|
|
60
|
+
* a brand decision. Consumers pass their own marks (`icon`), which the block
|
|
61
|
+
* hides from assistive tech: the accessible name is exactly `label`.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```tsx
|
|
65
|
+
* <SignInOptions
|
|
66
|
+
* methods={[
|
|
67
|
+
* [{ id: "google", label: "Continue with Google", icon: <GoogleIcon />, onSelect: startGoogle }],
|
|
68
|
+
* [{ id: "email", label: "Continue with Email", icon: <Mail />, href: "/auth/email" }],
|
|
69
|
+
* ]}
|
|
70
|
+
* carry={{ return_to: safeReturn, arrival, code, source }}
|
|
71
|
+
* renderLink={(p) => <Link {...p} />}
|
|
72
|
+
* />
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
interface SignInMethodBase {
|
|
76
|
+
/** Stable, never shown. Lands on the button as `data-method`. */
|
|
77
|
+
id: string;
|
|
78
|
+
/** The words on the button, and its exact accessible name. */
|
|
79
|
+
label: string;
|
|
80
|
+
/**
|
|
81
|
+
* The method's mark, ~20px inside a fixed 5-unit slot at the inline start.
|
|
82
|
+
* Hidden from assistive tech here, so any mark keeps the name = `label`.
|
|
83
|
+
*/
|
|
84
|
+
icon?: React.ReactNode;
|
|
85
|
+
disabled?: boolean;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Exactly one of `href` (a link method: a real anchor, `carry` appended) or
|
|
89
|
+
* `onSelect` (an action method: the page owns what selecting it starts, and
|
|
90
|
+
* receives the carried entries). The union is enforced in the types because a
|
|
91
|
+
* method with both would hide which one wins, and a method with neither is a
|
|
92
|
+
* button that cannot sign anyone in — worse than an absent one.
|
|
93
|
+
*/
|
|
94
|
+
export type SignInMethod = (SignInMethodBase & {
|
|
95
|
+
href: string;
|
|
96
|
+
onSelect?: never;
|
|
97
|
+
}) | (SignInMethodBase & {
|
|
98
|
+
href?: never;
|
|
99
|
+
onSelect: (carried: Readonly<Record<string, string>>) => void;
|
|
100
|
+
});
|
|
101
|
+
export interface SignInOptionsProps {
|
|
102
|
+
/** Groups of methods. The divider renders between groups, never inside one. */
|
|
103
|
+
methods: ReadonlyArray<readonly SignInMethod[]>;
|
|
104
|
+
/**
|
|
105
|
+
* What every method must carry through sign-in — `return_to`, `arrival`,
|
|
106
|
+
* device `code`, `source`, whatever the page cannot afford to lose. Entries
|
|
107
|
+
* that are `null`, `undefined` or empty are dropped, so query params can be
|
|
108
|
+
* passed straight through. Appended to link methods' `href`; handed to
|
|
109
|
+
* action methods' `onSelect`.
|
|
110
|
+
*/
|
|
111
|
+
carry?: Readonly<Record<string, string | null | undefined>>;
|
|
112
|
+
/** Replaces the "OR" between groups. The rule itself stays. */
|
|
113
|
+
divider?: React.ReactNode;
|
|
114
|
+
/**
|
|
115
|
+
* Renders the anchor for link methods, for consumers with a framework link —
|
|
116
|
+
* `(p) => <Link {...p} />`. Defaults to a plain `<a>`, which works
|
|
117
|
+
* everywhere; the framework link is an optimisation, not a requirement.
|
|
118
|
+
*/
|
|
119
|
+
renderLink?: (props: {
|
|
120
|
+
href: string;
|
|
121
|
+
}) => React.ReactElement;
|
|
122
|
+
className?: string;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* One full-width method row: the library `Button` (`variant="outline"` — white
|
|
126
|
+
* fill, hairline border, ink label) sized up to the ~52px onboarding rhythm.
|
|
127
|
+
* The icon sits at the inline start, positioned absolute so the label stays
|
|
128
|
+
* centered rather than being pushed off-center.
|
|
129
|
+
*
|
|
130
|
+
* Exported so a surface composing its own screen (the console's styleguide
|
|
131
|
+
* pilot) renders the same row `SignInOptions` does, instead of keeping a
|
|
132
|
+
* private twin. Every remaining prop passes through to `Button`.
|
|
133
|
+
*/
|
|
134
|
+
export declare function SignInMethodButton({ icon, label, className, ...props }: Omit<React.ComponentProps<typeof Button>, "children"> & {
|
|
135
|
+
icon?: React.ReactNode;
|
|
136
|
+
label: string;
|
|
137
|
+
}): React.JSX.Element;
|
|
138
|
+
export declare function SignInOptions({ methods, carry, divider, renderLink, className, }: SignInOptionsProps): React.JSX.Element;
|
|
139
|
+
export {};
|
|
140
|
+
//# sourceMappingURL=sign-in-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign-in-options.d.ts","sourceRoot":"","sources":["../../src/blocks/sign-in-options.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAI7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuEG;AAEH,UAAU,gBAAgB;IACxB,iEAAiE;IACjE,EAAE,EAAE,MAAM,CAAA;IACV,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GACpB,CAAC,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,GACvD,CAAC,gBAAgB,GAAG;IAClB,IAAI,CAAC,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,IAAI,CAAA;CAC9D,CAAC,CAAA;AAEN,MAAM,WAAW,kBAAkB;IACjC,+EAA+E;IAC/E,OAAO,EAAE,aAAa,CAAC,SAAS,YAAY,EAAE,CAAC,CAAA;IAC/C;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAA;IAC3D,+DAA+D;IAC/D,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,KAAK,CAAC,YAAY,CAAA;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAuBD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,KAAK,EACL,SAAS,EACT,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG;IACzD,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;CACd,qBAsBA;AAmBD,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,KAAK,EACL,OAAO,EACP,UAAU,EACV,SAAS,GACV,EAAE,kBAAkB,qBAoDpB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { Button } from "../ui/button.js";
|
|
5
|
+
import { Separator } from "../ui/separator.js";
|
|
6
|
+
import { cn } from "../lib/cloudgrid-cn.js";
|
|
7
|
+
/** `carry` with the empty entries dropped, in declaration order. */
|
|
8
|
+
function carriedEntries(carry) {
|
|
9
|
+
if (!carry)
|
|
10
|
+
return [];
|
|
11
|
+
return Object.entries(carry).filter((entry) => typeof entry[1] === "string" && entry[1] !== "");
|
|
12
|
+
}
|
|
13
|
+
/** `href` with the carried entries appended, hash kept at the end. */
|
|
14
|
+
function withCarried(href, entries) {
|
|
15
|
+
if (entries.length === 0)
|
|
16
|
+
return href;
|
|
17
|
+
const hashAt = href.indexOf("#");
|
|
18
|
+
const base = hashAt === -1 ? href : href.slice(0, hashAt);
|
|
19
|
+
const hash = hashAt === -1 ? "" : href.slice(hashAt);
|
|
20
|
+
const joined = new URLSearchParams(entries).toString();
|
|
21
|
+
return `${base}${base.includes("?") ? "&" : "?"}${joined}${hash}`;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* One full-width method row: the library `Button` (`variant="outline"` — white
|
|
25
|
+
* fill, hairline border, ink label) sized up to the ~52px onboarding rhythm.
|
|
26
|
+
* The icon sits at the inline start, positioned absolute so the label stays
|
|
27
|
+
* centered rather than being pushed off-center.
|
|
28
|
+
*
|
|
29
|
+
* Exported so a surface composing its own screen (the console's styleguide
|
|
30
|
+
* pilot) renders the same row `SignInOptions` does, instead of keeping a
|
|
31
|
+
* private twin. Every remaining prop passes through to `Button`.
|
|
32
|
+
*/
|
|
33
|
+
export function SignInMethodButton({ icon, label, className, ...props }) {
|
|
34
|
+
return (_jsxs(Button, { variant: "outline", "data-slot": "sign-in-method", className: cn("relative h-[52px] w-full justify-center rounded-xl text-body-md font-medium", className), ...props, children: [icon == null ? null : (_jsx("span", { "aria-hidden": "true", className: "absolute left-4 flex size-5 items-center justify-center [&_svg]:size-5", children: icon })), label] }));
|
|
35
|
+
}
|
|
36
|
+
/** The "OR" rule between method groups. Decorative, and hidden as such. */
|
|
37
|
+
function SignInOptionsDivider({ children }) {
|
|
38
|
+
return (_jsxs("div", { "data-slot": "sign-in-options-divider", "aria-hidden": "true", className: "my-5 flex items-center gap-3", children: [_jsx(Separator, { className: "flex-1" }), _jsx("span", { className: "text-caption font-medium text-faint", children: children ?? "OR" }), _jsx(Separator, { className: "flex-1" })] }));
|
|
39
|
+
}
|
|
40
|
+
export function SignInOptions({ methods, carry, divider, renderLink, className, }) {
|
|
41
|
+
const entries = carriedEntries(carry);
|
|
42
|
+
const carried = Object.fromEntries(entries);
|
|
43
|
+
const groups = methods.filter((group) => group.length > 0);
|
|
44
|
+
return (_jsx("div", { "data-slot": "sign-in-options", className: className, children: groups.map((group, index) => (
|
|
45
|
+
// Groups have no identity of their own — position is what they mean.
|
|
46
|
+
// eslint-disable-next-line react/no-array-index-key
|
|
47
|
+
_jsxs(React.Fragment, { children: [index > 0 && _jsx(SignInOptionsDivider, { children: divider }), _jsx("div", { className: "grid gap-3", children: group.map((method) => method.href !== undefined ? (
|
|
48
|
+
/*
|
|
49
|
+
A real anchor rather than an onClick. Base UI's Button warns
|
|
50
|
+
when the rendered element is not a <button>, hence
|
|
51
|
+
`nativeButton={false}`, and it stamps `role="button"` on a
|
|
52
|
+
non-native target — put back to `link`, because this one
|
|
53
|
+
really does navigate.
|
|
54
|
+
*/
|
|
55
|
+
_jsx(SignInMethodButton, { "data-method": method.id, render: renderLink?.({ href: withCarried(method.href, entries) }) ?? (_jsx("a", { href: withCarried(method.href, entries) })), nativeButton: false, role: "link", icon: method.icon, label: method.label, disabled: method.disabled }, method.id)) : (_jsx(SignInMethodButton, { "data-method": method.id, icon: method.icon, label: method.label, disabled: method.disabled, onClick: () => method.onSelect(carried) }, method.id))) })] }, index))) }));
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=sign-in-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign-in-options.js","sourceRoot":"","sources":["../../src/blocks/sign-in-options.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -42,6 +42,7 @@ export * from "./blocks/pricing-tier-cards.js";
|
|
|
42
42
|
export * from "./blocks/pricing-tiers.js";
|
|
43
43
|
export * from "./blocks/quote.js";
|
|
44
44
|
export * from "./blocks/rich-text.js";
|
|
45
|
+
export * from "./blocks/sign-in-options.js";
|
|
45
46
|
export * from "./blocks/stage-panel.js";
|
|
46
47
|
export * from "./blocks/step-item.js";
|
|
47
48
|
export * from "./blocks/tool-logo.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAG/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,2BAA2B,CAAA;AACzC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AAGtC,cAAc,uBAAuB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAG/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,2BAA2B,CAAA;AACzC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AAGtC,cAAc,uBAAuB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -59,6 +59,7 @@ export * from "./blocks/pricing-tier-cards.js";
|
|
|
59
59
|
export * from "./blocks/pricing-tiers.js";
|
|
60
60
|
export * from "./blocks/quote.js";
|
|
61
61
|
export * from "./blocks/rich-text.js";
|
|
62
|
+
export * from "./blocks/sign-in-options.js";
|
|
62
63
|
export * from "./blocks/stage-panel.js";
|
|
63
64
|
export * from "./blocks/step-item.js";
|
|
64
65
|
export * from "./blocks/tool-logo.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,oEAAoE;AACpE,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,yEAAyE;AACzE,gFAAgF;AAChF,4EAA4E;AAC5E,EAAE;AACF,kEAAkE;AAClE,8EAA8E;AAC9E,uEAAuE;AAEvE,cAAc;AACd,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAE/B,mBAAmB;AACnB,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,2BAA2B,CAAA;AACzC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AAEtC,0EAA0E;AAC1E,cAAc,uBAAuB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,oEAAoE;AACpE,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,yEAAyE;AACzE,gFAAgF;AAChF,4EAA4E;AAC5E,EAAE;AACF,kEAAkE;AAClE,8EAA8E;AAC9E,uEAAuE;AAEvE,cAAc;AACd,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAE/B,mBAAmB;AACnB,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,2BAA2B,CAAA;AACzC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AAEtC,0EAA0E;AAC1E,cAAc,uBAAuB,CAAA"}
|
package/package.json
CHANGED