@1money/component-ui 0.0.95-alpha.1 → 0.0.95-alpha.10
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/es/business/Dialog/BaseDialog/BaseDialog.d.ts +0 -1
- package/es/business/Dialog/BaseDialog/BaseDialog.js +43 -66
- package/es/business/Dialog/BaseDialog/constants.d.ts +7 -8
- package/es/business/Dialog/BaseDialog/constants.js +8 -9
- package/es/business/Dialog/VerificationDialog/VerificationDialog.js +10 -6
- package/es/business/Dialog/VerificationDialog/interface.d.ts +9 -2
- package/es/business/Dialog/variants/LoadingDialog.js +3 -3
- package/es/business/{PageForm → Form/PageForm}/PageForm.d.ts +1 -1
- package/es/business/Form/PageForm/PageForm.js +98 -0
- package/es/business/Form/PageForm/index.js +5 -0
- package/es/business/{PageForm → Form/PageForm}/interface.d.ts +8 -7
- package/es/business/Form/PageForm/interface.js +2 -0
- package/es/business/Form/ResultForm/ResultForm.d.ts +2 -0
- package/es/business/Form/ResultForm/ResultForm.js +38 -0
- package/es/business/Form/ResultForm/index.d.ts +4 -0
- package/es/business/Form/ResultForm/index.js +5 -0
- package/es/business/Form/ResultForm/interface.d.ts +10 -0
- package/es/business/Form/ResultForm/interface.js +2 -0
- package/es/business/Form/index.d.ts +3 -0
- package/es/business/Form/index.js +15 -0
- package/es/business/Form/variants/ExpiredForm.d.ts +3 -0
- package/es/business/Form/variants/ExpiredForm.js +21 -0
- package/es/business/Form/variants/FailureForm.d.ts +3 -0
- package/es/business/Form/variants/FailureForm.js +20 -0
- package/es/business/Form/variants/PendingForm.d.ts +3 -0
- package/es/business/Form/variants/PendingForm.js +20 -0
- package/es/business/Form/variants/SuccessForm.d.ts +3 -0
- package/es/business/Form/variants/SuccessForm.js +20 -0
- package/es/business/Form/variants/index.d.ts +8 -0
- package/es/business/Form/variants/index.js +12 -0
- package/es/business/index.d.ts +1 -1
- package/es/business/index.js +2 -2
- package/es/components/ActionBar/ActionBar.js +49 -19
- package/es/components/ActionBar/constants.d.ts +8 -0
- package/es/components/ActionBar/constants.js +8 -1
- package/es/components/ActionBar/interface.d.ts +42 -8
- package/es/components/ActionBar/style/ActionBar.css +3 -0
- package/es/components/Dialog/interface.d.ts +10 -4
- package/es/components/FormLayout/config.d.ts +23 -19
- package/es/components/FormLayout/config.js +19 -15
- package/es/components/FormLayout/interface.d.ts +7 -2
- package/es/components/PanelLayout/PanelLayout.d.ts +3 -0
- package/es/components/PanelLayout/PanelLayout.js +163 -0
- package/es/components/PanelLayout/constants.d.ts +60 -0
- package/es/components/PanelLayout/constants.js +48 -0
- package/es/components/PanelLayout/index.d.ts +6 -0
- package/es/components/PanelLayout/index.js +6 -0
- package/es/components/PanelLayout/interface.d.ts +73 -0
- package/es/components/PanelLayout/interface.js +2 -0
- package/es/components/PanelLayout/style/PanelLayout.css +56 -0
- package/es/components/PanelLayout/style/css.js +2 -0
- package/es/components/PanelLayout/style/index.d.ts +1 -0
- package/es/components/PanelLayout/style/index.js +2 -0
- package/es/index.css +1 -1
- package/es/index.d.ts +2 -0
- package/es/index.js +2 -1
- package/lib/business/Dialog/BaseDialog/BaseDialog.d.ts +0 -1
- package/lib/business/Dialog/BaseDialog/BaseDialog.js +42 -65
- package/lib/business/Dialog/BaseDialog/constants.d.ts +7 -8
- package/lib/business/Dialog/BaseDialog/constants.js +9 -10
- package/lib/business/Dialog/VerificationDialog/VerificationDialog.js +10 -6
- package/lib/business/Dialog/VerificationDialog/interface.d.ts +9 -2
- package/lib/business/Dialog/variants/LoadingDialog.js +3 -3
- package/lib/business/{PageForm → Form/PageForm}/PageForm.d.ts +1 -1
- package/lib/business/Form/PageForm/PageForm.js +104 -0
- package/lib/business/Form/PageForm/index.js +30 -0
- package/lib/business/{PageForm → Form/PageForm}/interface.d.ts +8 -7
- package/lib/business/Form/PageForm/interface.js +6 -0
- package/lib/business/Form/ResultForm/ResultForm.d.ts +2 -0
- package/lib/business/Form/ResultForm/ResultForm.js +44 -0
- package/lib/business/Form/ResultForm/index.d.ts +4 -0
- package/lib/business/Form/ResultForm/index.js +30 -0
- package/lib/business/Form/ResultForm/interface.d.ts +10 -0
- package/lib/business/Form/ResultForm/interface.js +6 -0
- package/lib/business/Form/index.d.ts +3 -0
- package/lib/business/Form/index.js +39 -0
- package/lib/business/Form/variants/ExpiredForm.d.ts +3 -0
- package/lib/business/Form/variants/ExpiredForm.js +27 -0
- package/lib/business/Form/variants/FailureForm.d.ts +3 -0
- package/lib/business/Form/variants/FailureForm.js +26 -0
- package/lib/business/Form/variants/PendingForm.d.ts +3 -0
- package/lib/business/Form/variants/PendingForm.js +26 -0
- package/lib/business/Form/variants/SuccessForm.d.ts +3 -0
- package/lib/business/Form/variants/SuccessForm.js +26 -0
- package/lib/business/Form/variants/index.d.ts +8 -0
- package/lib/business/Form/variants/index.js +34 -0
- package/lib/business/index.d.ts +1 -1
- package/lib/business/index.js +5 -5
- package/lib/components/ActionBar/ActionBar.js +48 -18
- package/lib/components/ActionBar/constants.d.ts +8 -0
- package/lib/components/ActionBar/constants.js +9 -2
- package/lib/components/ActionBar/interface.d.ts +42 -8
- package/lib/components/ActionBar/style/ActionBar.css +3 -0
- package/lib/components/Dialog/interface.d.ts +10 -4
- package/lib/components/FormLayout/config.d.ts +23 -19
- package/lib/components/FormLayout/config.js +19 -15
- package/lib/components/FormLayout/interface.d.ts +7 -2
- package/lib/components/PanelLayout/PanelLayout.d.ts +3 -0
- package/lib/components/PanelLayout/PanelLayout.js +172 -0
- package/lib/components/PanelLayout/constants.d.ts +60 -0
- package/lib/components/PanelLayout/constants.js +54 -0
- package/lib/components/PanelLayout/index.d.ts +6 -0
- package/lib/components/PanelLayout/index.js +52 -0
- package/lib/components/PanelLayout/interface.d.ts +73 -0
- package/lib/components/PanelLayout/interface.js +6 -0
- package/lib/components/PanelLayout/style/PanelLayout.css +56 -0
- package/lib/components/PanelLayout/style/css.js +4 -0
- package/lib/components/PanelLayout/style/index.d.ts +1 -0
- package/lib/components/PanelLayout/style/index.js +4 -0
- package/lib/index.css +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.js +14 -1
- package/package.json +29 -4
- package/scripts/mcp-server/examples.generated.json +48 -6
- package/scripts/mcp-server/index.generated.json +240 -7
- package/es/business/Dialog/BaseDialog/style/BaseDialog.css +0 -72
- package/es/business/Dialog/BaseDialog/style/css.js +0 -2
- package/es/business/Dialog/BaseDialog/style/index.d.ts +0 -1
- package/es/business/Dialog/BaseDialog/style/index.js +0 -2
- package/es/business/PageForm/PageForm.js +0 -97
- package/es/business/PageForm/index.js +0 -5
- package/es/business/PageForm/interface.js +0 -2
- package/lib/business/Dialog/BaseDialog/style/BaseDialog.css +0 -72
- package/lib/business/Dialog/BaseDialog/style/css.js +0 -4
- package/lib/business/Dialog/BaseDialog/style/index.d.ts +0 -1
- package/lib/business/Dialog/BaseDialog/style/index.js +0 -4
- package/lib/business/PageForm/PageForm.js +0 -103
- package/lib/business/PageForm/index.js +0 -30
- package/lib/business/PageForm/interface.js +0 -6
- /package/es/business/{PageForm → Form/PageForm}/index.d.ts +0 -0
- /package/lib/business/{PageForm → Form/PageForm}/index.d.ts +0 -0
|
@@ -22,6 +22,14 @@ export type ActionBarLayout = (typeof ACTION_BAR_LAYOUTS)[number];
|
|
|
22
22
|
* "Dialog Body" spec).
|
|
23
23
|
*/
|
|
24
24
|
export declare const ACTION_BAR_BUTTON_SIZE: Record<ActionBarLayout, ButtonSize>;
|
|
25
|
+
/**
|
|
26
|
+
* Footnote row alignment. The DS uses `center` for a prompt + action pair and
|
|
27
|
+
* `start` for a bare action link sitting under the buttons (the auth card's
|
|
28
|
+
* "Forgot your password?", Figma 39579:28516).
|
|
29
|
+
*/
|
|
30
|
+
export declare const ACTION_BAR_FOOTNOTE_ALIGNS: readonly ["center", "start"];
|
|
31
|
+
export type ActionBarFootnoteAlign = (typeof ACTION_BAR_FOOTNOTE_ALIGNS)[number];
|
|
32
|
+
export declare const ACTION_BAR_FOOTNOTE_DEFAULT_ALIGN: ActionBarFootnoteAlign;
|
|
25
33
|
export declare const ACTION_BAR_SLOT: {
|
|
26
34
|
readonly root: "root";
|
|
27
35
|
readonly actions: "actions";
|
|
@@ -22,9 +22,16 @@ export var ACTION_BAR_BUTTON_SIZE = {
|
|
|
22
22
|
fill: 'large',
|
|
23
23
|
compact: 'medium'
|
|
24
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* Footnote row alignment. The DS uses `center` for a prompt + action pair and
|
|
27
|
+
* `start` for a bare action link sitting under the buttons (the auth card's
|
|
28
|
+
* "Forgot your password?", Figma 39579:28516).
|
|
29
|
+
*/
|
|
30
|
+
export var ACTION_BAR_FOOTNOTE_ALIGNS = ['center', 'start'];
|
|
31
|
+
export var ACTION_BAR_FOOTNOTE_DEFAULT_ALIGN = 'center';
|
|
25
32
|
export var ACTION_BAR_SLOT = {
|
|
26
33
|
root: 'root',
|
|
27
34
|
actions: 'actions',
|
|
28
35
|
footnote: 'footnote'
|
|
29
36
|
};
|
|
30
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvQWN0aW9uQmFyL2NvbnN0YW50cy50cyIsImNvbXBvbmVudHMvQWN0aW9uQmFyL2NvbnN0YW50cy5qcyJdLCJuYW1lcyI6WyJBQ1RJT05fQkFSX1BSRUZJWCIsIkFDVElPTl9CQVJfREVGQVVMVFMiLCJwcmltYXJ5TGFiZWwiLCJzZWNvbmRhcnlMYWJlbCIsInByaW1hcnlDb2xvciIsInNlY29uZGFyeUNvbG9yIiwiQUNUSU9OX0JBUl9MQVlPVVRTIiwiQUNUSU9OX0JBUl9ESVJFQ1RJT05TIiwiQUNUSU9OX0JBUl9CVVRUT05fU0laRSIsImZpbGwiLCJjb21wYWN0IiwiQUNUSU9OX0JBUl9GT09UTk9URV9BTElHTlMiLCJBQ1RJT05fQkFSX0ZPT1ROT1RFX0RFRkFVTFRfQUxJR04iLCJBQ1RJT05fQkFSX1NMT1QiLCJyb290IiwiYWN0aW9ucyIsImZvb3Rub3RlIl0sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLElBQU1BLGlCQUFpQixHQUFHLFlBQVk7QUFFN0M7QUNGQTtBQUNBO0FBQ0E7QURJQSxPQUFPLElBQU1DLG1CQUFtQixHQUFHO0VBQ2pDQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsY0FBYyxFQUFFLFFBQVE7RUFDeEJDLFlBQVksRUFBRSxTQUFxRDtFQUNuRUMsY0FBYyxFQUFFO0FDRmxCLENER1U7QUFFVixPQUFPLElBQU1DLGtCQUFrQixHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBVTtBQUU5RCxPQUFPLElBQU1DLHFCQUFxQixHQUFHLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBVTtBQVd4RTtBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBRGdCQSxPQUFPLElBQU1DLHNCQUFzQixHQUF3QztFQUN6RUMsSUFBSSxFQUFFLE9BQU87RUFDYkMsT0FBTyxFQUFFO0FDZFgsQ0RlQztBQUVEO0FDZkE7QUFDQTtBQUNBO0FBQ0E7QURpQkEsT0FBTyxJQUFNQywwQkFBMEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQVU7QUFJdEUsT0FBTyxJQUFNQyxpQ0FBaUMsR0FBMkIsUUFBUTtBQUVqRixPQUFPLElBQU1DLGVBQWUsR0FBRztFQUM3QkMsSUFBSSxFQUFFLE1BQU07RUFDWkMsT0FBTyxFQUFFLFNBQVM7RUFDbEJDLFFBQVEsRUFBRTtBQ25CWixDRG9CVSIsImZpbGUiOiJjb21wb25lbnRzL0FjdGlvbkJhci9jb25zdGFudHMuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImV4cG9ydCBjb25zdCBBQ1RJT05fQkFSX1BSRUZJWCA9ICdhY3Rpb24tYmFyJztcbi8qKlxuICogR2VuZXJpYywgb3ZlcnJpZGFibGUgVUkgdm9jYWJ1bGFyeSDigJQgTk9UIHByb2R1Y3QgY29weS4gU2NlbmFyaW8gY29weVxuICogKHRpdGxlcywgZGVzY3JpcHRpb25zLCBzY2VuYXJpbyBidXR0b24gbGFiZWxzKSBhbHdheXMgY29tZXMgZnJvbSBjb25zdW1lcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBBQ1RJT05fQkFSX0RFRkFVTFRTID0ge1xuICAgIHByaW1hcnlMYWJlbDogJ0NvbmZpcm0nLFxuICAgIHNlY29uZGFyeUxhYmVsOiAnQ2FuY2VsJyxcbiAgICBwcmltYXJ5Q29sb3I6ICdwcmltYXJ5JyxcbiAgICBzZWNvbmRhcnlDb2xvcjogJ2dyZXknLFxufTtcbmV4cG9ydCBjb25zdCBBQ1RJT05fQkFSX0xBWU9VVFMgPSBbJ2ZpbGwnLCAnY29tcGFjdCddO1xuZXhwb3J0IGNvbnN0IEFDVElPTl9CQVJfRElSRUNUSU9OUyA9IFsnaG9yaXpvbnRhbCcsICd2ZXJ0aWNhbCddO1xuLyoqXG4gKiBMYXlvdXQgaXMgY2hvc2VuIGJ5IHRoZSBTQ0VOQVJJTyBTSEVMTCwgbmV2ZXIgYnkgYnVzaW5lc3MgY29kZTpcbiAqIC0gYGZpbGxgIOKAlCBidXR0b25zIHNoYXJlIHRoZSBmdWxsIHJvdyAocmVzdWx0IGRpYWxvZ3MsIHBhZ2UgZm9ybXMpO1xuICogICBvbmUgYWN0aW9uIHNwYW5zIHRoZSByb3csIHR3byBzcGxpdCBpdCBldmVubHkuXG4gKiAtIGBjb21wYWN0YCDigJQgYXV0by13aWR0aCBidXR0b25zLCBsZWZ0LWFsaWduZWQgKGZvcm0gZGlhbG9ncywgcGVyIHRoZSBEU1xuICogICBcIkRpYWxvZyBCb2R5XCIgc3BlYykuXG4gKi9cbmV4cG9ydCBjb25zdCBBQ1RJT05fQkFSX0JVVFRPTl9TSVpFID0ge1xuICAgIGZpbGw6ICdsYXJnZScsXG4gICAgY29tcGFjdDogJ21lZGl1bScsXG59O1xuLyoqXG4gKiBGb290bm90ZSByb3cgYWxpZ25tZW50LiBUaGUgRFMgdXNlcyBgY2VudGVyYCBmb3IgYSBwcm9tcHQgKyBhY3Rpb24gcGFpciBhbmRcbiAqIGBzdGFydGAgZm9yIGEgYmFyZSBhY3Rpb24gbGluayBzaXR0aW5nIHVuZGVyIHRoZSBidXR0b25zICh0aGUgYXV0aCBjYXJkJ3NcbiAqIFwiRm9yZ290IHlvdXIgcGFzc3dvcmQ/XCIsIEZpZ21hIDM5NTc5OjI4NTE2KS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFDVElPTl9CQVJfRk9PVE5PVEVfQUxJR05TID0gWydjZW50ZXInLCAnc3RhcnQnXTtcbmV4cG9ydCBjb25zdCBBQ1RJT05fQkFSX0ZPT1ROT1RFX0RFRkFVTFRfQUxJR04gPSAnY2VudGVyJztcbmV4cG9ydCBjb25zdCBBQ1RJT05fQkFSX1NMT1QgPSB7XG4gICAgcm9vdDogJ3Jvb3QnLFxuICAgIGFjdGlvbnM6ICdhY3Rpb25zJyxcbiAgICBmb290bm90ZTogJ2Zvb3Rub3RlJyxcbn07Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
import type { ButtonColor, ButtonProps, ButtonSize } from "../Button";
|
|
3
|
-
import type { ActionBarDirection, ActionBarLayout } from './constants';
|
|
4
|
-
export type { ActionBarDirection, ActionBarLayout } from './constants';
|
|
3
|
+
import type { ActionBarDirection, ActionBarFootnoteAlign, ActionBarLayout } from './constants';
|
|
4
|
+
export type { ActionBarDirection, ActionBarFootnoteAlign, ActionBarLayout } from './constants';
|
|
5
5
|
/**
|
|
6
6
|
* One footer action. The bar owns size, order, and layout; consumers only
|
|
7
7
|
* supply label, behavior, and (optionally) a color tone override.
|
|
@@ -48,7 +48,7 @@ export interface ActionBarAction {
|
|
|
48
48
|
*/
|
|
49
49
|
export type ActionBarPrimarySlot = ReactNode;
|
|
50
50
|
/**
|
|
51
|
-
* Optional
|
|
51
|
+
* Optional footnote row under the actions, e.g.
|
|
52
52
|
* `"Don't have access to your 2FA? Reset 2FA"`.
|
|
53
53
|
*/
|
|
54
54
|
export interface ActionBarFootnote {
|
|
@@ -56,9 +56,32 @@ export interface ActionBarFootnote {
|
|
|
56
56
|
prompt?: ReactNode;
|
|
57
57
|
/** Trailing brand-colored action text. */
|
|
58
58
|
action?: ReactNode;
|
|
59
|
+
/**
|
|
60
|
+
* Row alignment. Defaults to `center` (the prompt + action pair). Use
|
|
61
|
+
* `start` for a bare action link under the buttons — the auth card's
|
|
62
|
+
* "Forgot your password?" sits left-aligned while the passkey row below it
|
|
63
|
+
* stays centered.
|
|
64
|
+
*/
|
|
65
|
+
align?: ActionBarFootnoteAlign;
|
|
66
|
+
/**
|
|
67
|
+
* Destination for an action that navigates. The action already renders as
|
|
68
|
+
* an anchor, so giving it the `href` is what makes it behave like the link
|
|
69
|
+
* it looks like — open-in-new-tab, middle click, copy address, and the
|
|
70
|
+
* status bar preview all come back. Handing it an `onClick` that navigates
|
|
71
|
+
* instead leaves an anchor with no destination, which none of those work on.
|
|
72
|
+
*/
|
|
73
|
+
href?: string;
|
|
74
|
+
/** Anchor target, e.g. `_blank`. Only meaningful with `href`. */
|
|
75
|
+
target?: string;
|
|
76
|
+
/** Anchor rel, e.g. `noopener noreferrer`. Only meaningful with `href`. */
|
|
77
|
+
rel?: string;
|
|
59
78
|
/** Fires when the action text is clicked or activated via keyboard. */
|
|
60
79
|
onClick?: () => void;
|
|
61
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* Render a hairline divider above the row (matches the OTP dialog design).
|
|
82
|
+
* The divider is a row of the bar in its own right, so the bar's uniform
|
|
83
|
+
* gap surrounds it — it carries no margin of its own.
|
|
84
|
+
*/
|
|
62
85
|
divided?: boolean;
|
|
63
86
|
}
|
|
64
87
|
export interface ActionBarProps {
|
|
@@ -69,8 +92,13 @@ export interface ActionBarProps {
|
|
|
69
92
|
*/
|
|
70
93
|
layout?: ActionBarLayout;
|
|
71
94
|
/**
|
|
72
|
-
* Arrangement: `horizontal` (default
|
|
73
|
-
* full-width
|
|
95
|
+
* Arrangement: `horizontal` (default — two actions split the row) or
|
|
96
|
+
* `vertical` (stacked, each button full-width).
|
|
97
|
+
*
|
|
98
|
+
* The default applies everywhere, result surfaces included: `PanelLayout`
|
|
99
|
+
* and `BaseDialog` pass this straight through and set no default of their
|
|
100
|
+
* own. `vertical` is opt-in, for flows that want the actions read
|
|
101
|
+
* top-to-bottom rather than weighed side by side.
|
|
74
102
|
*/
|
|
75
103
|
direction?: ActionBarDirection;
|
|
76
104
|
/**
|
|
@@ -81,8 +109,14 @@ export interface ActionBarProps {
|
|
|
81
109
|
primarySlot?: ReactNode;
|
|
82
110
|
/** Optional secondary (left) action. */
|
|
83
111
|
secondary?: ActionBarAction;
|
|
84
|
-
/**
|
|
85
|
-
|
|
112
|
+
/**
|
|
113
|
+
* Footnote row(s) below the actions. Pass an array for surfaces that stack
|
|
114
|
+
* more than one — the auth card (Figma 39579:28516) puts a left-aligned
|
|
115
|
+
* "Forgot your password?" directly under the buttons, then a divided,
|
|
116
|
+
* centered passkey row. Rows render in array order and are spaced by the
|
|
117
|
+
* bar's own gap.
|
|
118
|
+
*/
|
|
119
|
+
footnote?: ActionBarFootnote | ActionBarFootnote[];
|
|
86
120
|
/** CSS class prefix. */
|
|
87
121
|
prefixCls?: string;
|
|
88
122
|
/** Additional class on the root element. */
|
|
@@ -15,10 +15,16 @@ export interface DialogProps extends Omit<HTMLAttributes<HTMLDivElement>, 'child
|
|
|
15
15
|
fullWidth?: boolean;
|
|
16
16
|
fixed?: boolean;
|
|
17
17
|
/**
|
|
18
|
-
* Bare panel mode: keep the overlay machinery (portal, mask, Esc, close
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
18
|
+
* Bare panel mode: keep the overlay machinery (portal, mask, Esc, the close
|
|
19
|
+
* control, viewport max-height, width presets) but render NO panel chrome
|
|
20
|
+
* and NO header/body/footer slots — children fill the panel directly. For
|
|
21
|
+
* surfaces that bring their own chrome (e.g. FormLayout).
|
|
22
|
+
*
|
|
23
|
+
* `showBackIcon` is NOT honoured here. The close control is absolutely
|
|
24
|
+
* positioned overlay chrome and works in either mode, but the back arrow
|
|
25
|
+
* takes its own row in the content flow — and a bare panel has no content
|
|
26
|
+
* flow to put it in. A bare host that needs one renders it into its own
|
|
27
|
+
* surface instead (PanelLayout takes `showBackIcon`/`onBack` of its own).
|
|
22
28
|
*/
|
|
23
29
|
bare?: boolean;
|
|
24
30
|
width?: number | string;
|
|
@@ -50,24 +50,28 @@ export type FormLayoutSize = (typeof FORM_LAYOUT_SIZES)[number];
|
|
|
50
50
|
/**
|
|
51
51
|
* Per-size density overrides on a variant's baseline (the baseline IS the
|
|
52
52
|
* `large` size). Only `page/small` exists today — the compact auth-card
|
|
53
|
-
* surface
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
53
|
+
* surface: a narrower, less padded panel that keeps the page baseline's gap
|
|
54
|
+
* rhythm untouched (12 row gap / 12 column gutter / 16 region gap), so a field
|
|
55
|
+
* stack reads identically in the auth card and in the full-width page form.
|
|
56
|
+
* Width and padding are the ONLY deviations.
|
|
57
|
+
*
|
|
58
|
+
* Its 380 width is the SAME number `PanelLayout` uses, and deliberately so:
|
|
59
|
+
* an auth flow swaps a form card for a result panel in place (forgot-password
|
|
60
|
+
* → "we've sent a link"), so a different width would make the card jump.
|
|
61
|
+
* The two tables still hold it separately — they are different surfaces that
|
|
62
|
+
* happen to agree, not one value with two readers.
|
|
63
|
+
*
|
|
64
|
+
* Every gap (rowGap / colGutter / regionGap / actionGap) plus `controlSize`
|
|
65
|
+
* falls back to the baseline. A variant/size with no entry uses the baseline
|
|
66
|
+
* unchanged, so `large` never needs an entry. `modal` intentionally has no
|
|
67
|
+
* `small`: the confirm/result dialog is BaseDialog, which is not a form
|
|
68
|
+
* surface and does not use FormLayout.
|
|
62
69
|
*/
|
|
63
70
|
export declare const FORM_LAYOUT_SIZE: {
|
|
64
71
|
readonly page: {
|
|
65
72
|
readonly small: {
|
|
66
|
-
readonly width:
|
|
73
|
+
readonly width: 380;
|
|
67
74
|
readonly padding: 24;
|
|
68
|
-
readonly rowGap: 16;
|
|
69
|
-
readonly colGutter: 16;
|
|
70
|
-
readonly regionGap: 16;
|
|
71
75
|
};
|
|
72
76
|
};
|
|
73
77
|
};
|
|
@@ -77,18 +81,18 @@ export declare const FORM_LAYOUT_SIZE: {
|
|
|
77
81
|
* (BaseProForm) read, so width / padding / gaps / control size never diverge.
|
|
78
82
|
*/
|
|
79
83
|
export declare const resolveFormLayoutConfig: (variant: FormLayoutVariant, size?: FormLayoutSize) => {
|
|
80
|
-
width: 640 |
|
|
84
|
+
width: 640 | 380;
|
|
81
85
|
padding: 24;
|
|
82
|
-
rowGap:
|
|
83
|
-
colGutter:
|
|
86
|
+
rowGap: 12;
|
|
87
|
+
colGutter: 12;
|
|
84
88
|
regionGap: 16;
|
|
85
89
|
actionGap: 12;
|
|
86
90
|
controlSize: "small";
|
|
87
91
|
} | {
|
|
88
|
-
width: 738 |
|
|
92
|
+
width: 738 | 380;
|
|
89
93
|
padding: 32 | 24;
|
|
90
|
-
rowGap:
|
|
91
|
-
colGutter:
|
|
94
|
+
rowGap: 12;
|
|
95
|
+
colGutter: 12;
|
|
92
96
|
regionGap: 16;
|
|
93
97
|
actionGap: 12;
|
|
94
98
|
controlSize: "large";
|
|
@@ -47,24 +47,28 @@ export var FORM_LAYOUT_SIZES = ['large', 'small'];
|
|
|
47
47
|
/**
|
|
48
48
|
* Per-size density overrides on a variant's baseline (the baseline IS the
|
|
49
49
|
* `large` size). Only `page/small` exists today — the compact auth-card
|
|
50
|
-
* surface
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
50
|
+
* surface: a narrower, less padded panel that keeps the page baseline's gap
|
|
51
|
+
* rhythm untouched (12 row gap / 12 column gutter / 16 region gap), so a field
|
|
52
|
+
* stack reads identically in the auth card and in the full-width page form.
|
|
53
|
+
* Width and padding are the ONLY deviations.
|
|
54
|
+
*
|
|
55
|
+
* Its 380 width is the SAME number `PanelLayout` uses, and deliberately so:
|
|
56
|
+
* an auth flow swaps a form card for a result panel in place (forgot-password
|
|
57
|
+
* → "we've sent a link"), so a different width would make the card jump.
|
|
58
|
+
* The two tables still hold it separately — they are different surfaces that
|
|
59
|
+
* happen to agree, not one value with two readers.
|
|
60
|
+
*
|
|
61
|
+
* Every gap (rowGap / colGutter / regionGap / actionGap) plus `controlSize`
|
|
62
|
+
* falls back to the baseline. A variant/size with no entry uses the baseline
|
|
63
|
+
* unchanged, so `large` never needs an entry. `modal` intentionally has no
|
|
64
|
+
* `small`: the confirm/result dialog is BaseDialog, which is not a form
|
|
65
|
+
* surface and does not use FormLayout.
|
|
59
66
|
*/
|
|
60
67
|
export var FORM_LAYOUT_SIZE = {
|
|
61
68
|
page: {
|
|
62
69
|
small: {
|
|
63
|
-
width:
|
|
64
|
-
padding: 24
|
|
65
|
-
rowGap: 16,
|
|
66
|
-
colGutter: 16,
|
|
67
|
-
regionGap: 16
|
|
70
|
+
width: 380,
|
|
71
|
+
padding: 24
|
|
68
72
|
}
|
|
69
73
|
}
|
|
70
74
|
};
|
|
@@ -98,4 +102,4 @@ export var formLayoutCssVars = function formLayoutCssVars(variant) {
|
|
|
98
102
|
'--form-layout-action-gap': "".concat(config.actionGap, "px")
|
|
99
103
|
};
|
|
100
104
|
};
|
|
101
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
105
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvRm9ybUxheW91dC9jb25maWcudHMiLCJjb21wb25lbnRzL0Zvcm1MYXlvdXQvY29uZmlnLmpzIl0sIm5hbWVzIjpbIkZPUk1fTEFZT1VUX1BSRUZJWCIsIkZPUk1fTEFZT1VUX0NPTkZJRyIsIm1vZGFsIiwid2lkdGgiLCJwYWRkaW5nIiwicm93R2FwIiwiY29sR3V0dGVyIiwicmVnaW9uR2FwIiwiYWN0aW9uR2FwIiwiY29udHJvbFNpemUiLCJwYWdlIiwiRk9STV9MQVlPVVRfVkFSSUFOVFMiLCJPYmplY3QiLCJrZXlzIiwiRk9STV9MQVlPVVRfU0laRVMiLCJGT1JNX0xBWU9VVF9TSVpFIiwic21hbGwiLCJyZXNvbHZlRm9ybUxheW91dENvbmZpZyIsInZhcmlhbnQiLCJzaXplIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwib3ZlcnJpZGVzIiwib3ZlcnJpZGUiLCJhc3NpZ24iLCJGT1JNX0xBWU9VVF9TTE9UIiwiaGVhZGVyIiwidGl0bGUiLCJleHRyYSIsImNvbnRlbnQiLCJmb290ZXIiLCJmb3JtTGF5b3V0Q3NzVmFycyIsImNvbmZpZyIsImNvbmNhdCJdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxJQUFNQSxrQkFBa0IsR0FBRyxhQUFhO0FBRS9DO0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FESUEsT0FBTyxJQUFNQyxrQkFBa0IsR0FBRztFQUNoQztFQUNBQyxLQUFLLEVBQUU7SUFDTDtJQUNBQyxLQUFLLEVBQUUsR0FBRztJQUNWO0lBQ0FDLE9BQU8sRUFBRSxFQUFFO0lBQ1g7SUFDQUMsTUFBTSxFQUFFLEVBQUU7SUFDVjtJQUNBQyxTQUFTLEVBQUUsRUFBRTtJQUNiO0lBQ0FDLFNBQVMsRUFBRSxFQUFFO0lBQ2I7SUFDQUMsU0FBUyxFQUFFLEVBQUU7SUFDYjtJQUNBQyxXQUFXLEVBQUU7RUNGYixDREdEO0VBQ0Q7QUNGRjtBQUNBO0FBQ0E7QUFDQTtFRElFQyxJQUFJLEVBQUU7SUFDSlAsS0FBSyxFQUFFLEdBQUc7SUFDVkMsT0FBTyxFQUFFLEVBQUU7SUFDWEMsTUFBTSxFQUFFLEVBQUU7SUFDVkMsU0FBUyxFQUFFLEVBQUU7SUFDYkMsU0FBUyxFQUFFLEVBQUU7SUFDYkMsU0FBUyxFQUFFLEVBQUU7SUFDYkMsV0FBVyxFQUFFO0VDRmI7QUFDSixDREdVO0FBSVYsT0FBTyxJQUFNRSxvQkFBb0IsR0FBR0MsTUFBTSxDQUFDQyxJQUFJLENBQUNaLGtCQUFrQixDQUF3QjtBQUUxRixPQUFPLElBQU1hLGlCQUFpQixHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBVTtBQWM1RDtBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBRHFCQSxPQUFPLElBQU1DLGdCQUFnQixHQUFHO0VBQzlCTCxJQUFJLEVBQUU7SUFDSk0sS0FBSyxFQUFFO01BQUViLEtBQUssRUFBRSxHQUFHO01BQUVDLE9BQU8sRUFBRTtJQUFFO0VDbkJoQztBQUNKLENEb0I0RztBQUU1RztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBRHNCQSxPQUFPLElBQU1hLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBdUJBLENBQUlDLE9BQTBCLEVBQW9DO0VBQUEsSUFBbENDLElBQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQXVCLE9BQU87RUFDaEcsSUFBTUcsU0FBUyxHQUFHUixnQkFBZ0IsQ0FBQ0csT0FBd0MsQ0FBQztFQUM1RSxJQUFNTSxRQUFRLEdBQUdELFNBQVMsR0FBR0EsU0FBUyxDQUFDSixJQUE4QixDQUFDLEdBQUdHLFNBQVM7RUFDbEYsT0FBQVYsTUFBQSxDQUFBYSxNQUFBLENBQUFiLE1BQUEsQ0FBQWEsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFZeEIsa0JBQWtCLENBQUNpQixPQUFPLENBQUMsQ0FBQSxFQUFLTSxRQUFRLENBQUE7QUFDdEQsQ0FBQztBQUVELE9BQU8sSUFBTUUsZ0JBQWdCLEdBQUc7RUFDOUJDLE1BQU0sRUFBRSxRQUFRO0VBQ2hCQyxLQUFLLEVBQUUsT0FBTztFQUNkQyxLQUFLLEVBQUUsT0FBTztFQUNkQyxPQUFPLEVBQUUsU0FBUztFQUNsQkMsTUFBTSxFQUFFO0FDckJWLENEc0JVO0FBRVY7QUFDQSxPQUFPLElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQzVCZCxPQUEwQixFQUVUO0VBQUEsSUFEakJDLElBQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQXVCLE9BQU87RUFFOUIsSUFBTWEsTUFBTSxHQUFHaEIsdUJBQXVCLENBQUNDLE9BQU8sRUFBRUMsSUFBSSxDQUFDO0VBQ3JELE9BQU87SUFDTCxxQkFBcUIsS0FBQWUsTUFBQSxDQUFLRCxNQUFNLENBQUM5QixLQUFLLE9BQUk7SUFDMUMsdUJBQXVCLEtBQUErQixNQUFBLENBQUtELE1BQU0sQ0FBQzdCLE9BQU8sT0FBSTtJQUM5Qyx1QkFBdUIsS0FBQThCLE1BQUEsQ0FBS0QsTUFBTSxDQUFDNUIsTUFBTSxPQUFJO0lBQzdDLDBCQUEwQixLQUFBNkIsTUFBQSxDQUFLRCxNQUFNLENBQUMxQixTQUFTLE9BQUk7SUFDbkQsMEJBQTBCLEtBQUEyQixNQUFBLENBQUtELE1BQU0sQ0FBQ3pCLFNBQVM7RUN6Qi9DLENEMEJnQjtBQUNwQixDQUFDIiwiZmlsZSI6ImNvbXBvbmVudHMvRm9ybUxheW91dC9jb25maWcuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImV4cG9ydCBjb25zdCBGT1JNX0xBWU9VVF9QUkVGSVggPSAnZm9ybS1sYXlvdXQnO1xuLyoqXG4gKiBUSEUgZGVuc2l0eSB0YWJsZSBmb3IgZm9ybSBzdXJmYWNlcyDigJQgdGhlIHNpbmdsZSB0aGluZyB0byBlZGl0IHdoZW4gdGhlXG4gKiBkZXNpZ24gY2hhbmdlcyBvciBhIG5ldyBkZW5zaXR5IGlzIGFkZGVkLiBFdmVyeSB2YWx1ZSBpcyBjb25zdW1lZCB0aHJvdWdoXG4gKiBDU1MgY3VzdG9tIHByb3BlcnRpZXMgKGNvbnRhaW5lciBzcGFjaW5nKSBvciByZWFkIGJ5IHRoZSBmb3JtIHByZXNldFxuICogKHJvdyBnYXAgLyBjb2x1bW4gZ3V0dGVyIGZvciBQcm9Gb3JtKSwgc28gYWRkaW5nIGEgdmFyaWFudCBoZXJlIGlzIHRoZVxuICogd2hvbGUgam9iLlxuICpcbiAqIFNvdXJjZTogMU1vbmV5IERlc2lnbiBTeXN0ZW0gKEJldGEpIOKAlCBcIkRpYWxvZyBCb2R5XCIgKG5vZGUgMzk3NDMtNDYzNClcbiAqIGZvciBgbW9kYWxgOyBwYWdlIHVzYWdlIChub2RlIDM5OTU2LTk3MTIpIGZvciBgcGFnZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBGT1JNX0xBWU9VVF9DT05GSUcgPSB7XG4gICAgLyoqIEluc2lkZSBhIGRpYWxvZzogdGlnaHRlciBkZW5zaXR5LiAqL1xuICAgIG1vZGFsOiB7XG4gICAgICAgIC8qKiBEZWZhdWx0IHBhbmVsIHdpZHRoIChweCk7IHRoZSBgd2lkdGhgIHByb3Agb3ZlcnJpZGVzLiAqL1xuICAgICAgICB3aWR0aDogNjQwLFxuICAgICAgICAvKiogUGFuZWwgcGFkZGluZyAocHgpLiAqL1xuICAgICAgICBwYWRkaW5nOiAyNCxcbiAgICAgICAgLyoqIFZlcnRpY2FsIGdhcCBiZXR3ZWVuIGZpZWxkIHJvd3MgKHB4KS4gKi9cbiAgICAgICAgcm93R2FwOiAxMixcbiAgICAgICAgLyoqIEhvcml6b250YWwgZ3V0dGVyIGJldHdlZW4gY29sdW1ucyBpbiBhIHJvdyAocHgpLiAqL1xuICAgICAgICBjb2xHdXR0ZXI6IDEyLFxuICAgICAgICAvKiogR2FwIGJldHdlZW4gdGhlIGhlYWRlciAvIGZpZWxkcyAvIGZvb3RlciByZWdpb25zIChweCkuICovXG4gICAgICAgIHJlZ2lvbkdhcDogMTYsXG4gICAgICAgIC8qKiBHYXAgYmV0d2VlbiBmb290ZXIgYWN0aW9uIGJ1dHRvbnMgKHB4KTsgQWN0aW9uQmFyIHJlYWRzIGl0IHZpYSB2YXIuICovXG4gICAgICAgIGFjdGlvbkdhcDogMTIsXG4gICAgICAgIC8qKiBDb250cm9sIHNpemUgY2FzY2FkZWQgdG8gZXZlcnkgZmllbGQgdmlhIFByb0Zvcm0gYHNpemVgLiAqL1xuICAgICAgICBjb250cm9sU2l6ZTogJ3NtYWxsJyxcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFN0YW5kYWxvbmUgb24gYSBwYWdlOiBhIHdpZGVyIHBhbmVsIHdpdGggcm9vbWllciBwYWRkaW5nLCBidXQgdGhlIFNBTUVcbiAgICAgKiB0aWdodCAxMi8xNiBnYXAgcmh5dGhtIGFzIHRoZSBkaWFsb2cg4oCUIG9ubHkgYHdpZHRoYCAoNzM4KSBhbmQgYHBhZGRpbmdgXG4gICAgICogKDMyKSBzZXBhcmF0ZSB0aGUgdHdvIGRlbnNpdGllcywgcGx1cyB0aGUgbGFyZ2UgY29udHJvbCBzaXplLlxuICAgICAqL1xuICAgIHBhZ2U6IHtcbiAgICAgICAgd2lkdGg6IDczOCxcbiAgICAgICAgcGFkZGluZzogMzIsXG4gICAgICAgIHJvd0dhcDogMTIsXG4gICAgICAgIGNvbEd1dHRlcjogMTIsXG4gICAgICAgIHJlZ2lvbkdhcDogMTYsXG4gICAgICAgIGFjdGlvbkdhcDogMTIsXG4gICAgICAgIGNvbnRyb2xTaXplOiAnbGFyZ2UnLFxuICAgIH0sXG59O1xuZXhwb3J0IGNvbnN0IEZPUk1fTEFZT1VUX1ZBUklBTlRTID0gT2JqZWN0LmtleXMoRk9STV9MQVlPVVRfQ09ORklHKTtcbmV4cG9ydCBjb25zdCBGT1JNX0xBWU9VVF9TSVpFUyA9IFsnbGFyZ2UnLCAnc21hbGwnXTtcbi8qKlxuICogUGVyLXNpemUgZGVuc2l0eSBvdmVycmlkZXMgb24gYSB2YXJpYW50J3MgYmFzZWxpbmUgKHRoZSBiYXNlbGluZSBJUyB0aGVcbiAqIGBsYXJnZWAgc2l6ZSkuIE9ubHkgYHBhZ2Uvc21hbGxgIGV4aXN0cyB0b2RheSDigJQgdGhlIGNvbXBhY3QgYXV0aC1jYXJkXG4gKiBzdXJmYWNlOiBhIG5hcnJvd2VyLCBsZXNzIHBhZGRlZCBwYW5lbCB0aGF0IGtlZXBzIHRoZSBwYWdlIGJhc2VsaW5lJ3MgZ2FwXG4gKiByaHl0aG0gdW50b3VjaGVkICgxMiByb3cgZ2FwIC8gMTIgY29sdW1uIGd1dHRlciAvIDE2IHJlZ2lvbiBnYXApLCBzbyBhIGZpZWxkXG4gKiBzdGFjayByZWFkcyBpZGVudGljYWxseSBpbiB0aGUgYXV0aCBjYXJkIGFuZCBpbiB0aGUgZnVsbC13aWR0aCBwYWdlIGZvcm0uXG4gKiBXaWR0aCBhbmQgcGFkZGluZyBhcmUgdGhlIE9OTFkgZGV2aWF0aW9ucy5cbiAqXG4gKiBJdHMgMzgwIHdpZHRoIGlzIHRoZSBTQU1FIG51bWJlciBgUGFuZWxMYXlvdXRgIHVzZXMsIGFuZCBkZWxpYmVyYXRlbHkgc286XG4gKiBhbiBhdXRoIGZsb3cgc3dhcHMgYSBmb3JtIGNhcmQgZm9yIGEgcmVzdWx0IHBhbmVsIGluIHBsYWNlIChmb3Jnb3QtcGFzc3dvcmRcbiAqIOKGkiBcIndlJ3ZlIHNlbnQgYSBsaW5rXCIpLCBzbyBhIGRpZmZlcmVudCB3aWR0aCB3b3VsZCBtYWtlIHRoZSBjYXJkIGp1bXAuXG4gKiBUaGUgdHdvIHRhYmxlcyBzdGlsbCBob2xkIGl0IHNlcGFyYXRlbHkg4oCUIHRoZXkgYXJlIGRpZmZlcmVudCBzdXJmYWNlcyB0aGF0XG4gKiBoYXBwZW4gdG8gYWdyZWUsIG5vdCBvbmUgdmFsdWUgd2l0aCB0d28gcmVhZGVycy5cbiAqXG4gKiBFdmVyeSBnYXAgKHJvd0dhcCAvIGNvbEd1dHRlciAvIHJlZ2lvbkdhcCAvIGFjdGlvbkdhcCkgcGx1cyBgY29udHJvbFNpemVgXG4gKiBmYWxscyBiYWNrIHRvIHRoZSBiYXNlbGluZS4gQSB2YXJpYW50L3NpemUgd2l0aCBubyBlbnRyeSB1c2VzIHRoZSBiYXNlbGluZVxuICogdW5jaGFuZ2VkLCBzbyBgbGFyZ2VgIG5ldmVyIG5lZWRzIGFuIGVudHJ5LiBgbW9kYWxgIGludGVudGlvbmFsbHkgaGFzIG5vXG4gKiBgc21hbGxgOiB0aGUgY29uZmlybS9yZXN1bHQgZGlhbG9nIGlzIEJhc2VEaWFsb2csIHdoaWNoIGlzIG5vdCBhIGZvcm1cbiAqIHN1cmZhY2UgYW5kIGRvZXMgbm90IHVzZSBGb3JtTGF5b3V0LlxuICovXG5leHBvcnQgY29uc3QgRk9STV9MQVlPVVRfU0laRSA9IHtcbiAgICBwYWdlOiB7XG4gICAgICAgIHNtYWxsOiB7IHdpZHRoOiAzODAsIHBhZGRpbmc6IDI0IH0sXG4gICAgfSxcbn07XG4vKipcbiAqIEJhc2VsaW5lIGRlbnNpdHkgZm9yIGEgdmFyaWFudCBtZXJnZWQgd2l0aCB0aGUgcmVxdWVzdGVkIHNpemUncyBkZXZpYXRpb25zLlxuICogVGhlIHNpbmdsZSBsb29rdXAgYm90aCB0aGUgc3VyZmFjZSAoRm9ybUxheW91dCkgYW5kIHRoZSBmb3JtIHByZXNldFxuICogKEJhc2VQcm9Gb3JtKSByZWFkLCBzbyB3aWR0aCAvIHBhZGRpbmcgLyBnYXBzIC8gY29udHJvbCBzaXplIG5ldmVyIGRpdmVyZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlRm9ybUxheW91dENvbmZpZyA9ICh2YXJpYW50LCBzaXplID0gJ2xhcmdlJykgPT4ge1xuICAgIGNvbnN0IG92ZXJyaWRlcyA9IEZPUk1fTEFZT1VUX1NJWkVbdmFyaWFudF07XG4gICAgY29uc3Qgb3ZlcnJpZGUgPSBvdmVycmlkZXMgPyBvdmVycmlkZXNbc2l6ZV0gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgRk9STV9MQVlPVVRfQ09ORklHW3ZhcmlhbnRdKSwgb3ZlcnJpZGUpO1xufTtcbmV4cG9ydCBjb25zdCBGT1JNX0xBWU9VVF9TTE9UID0ge1xuICAgIGhlYWRlcjogJ2hlYWRlcicsXG4gICAgdGl0bGU6ICd0aXRsZScsXG4gICAgZXh0cmE6ICdleHRyYScsXG4gICAgY29udGVudDogJ2NvbnRlbnQnLFxuICAgIGZvb3RlcjogJ2Zvb3RlcicsXG59O1xuLyoqIEJyaWRnZSB0aGUgcmVzb2x2ZWQgKHZhcmlhbnQsIHNpemUpIG51bWJlcnMgaW50byBDU1MgY3VzdG9tIHByb3BlcnRpZXMuICovXG5leHBvcnQgY29uc3QgZm9ybUxheW91dENzc1ZhcnMgPSAodmFyaWFudCwgc2l6ZSA9ICdsYXJnZScpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSByZXNvbHZlRm9ybUxheW91dENvbmZpZyh2YXJpYW50LCBzaXplKTtcbiAgICByZXR1cm4ge1xuICAgICAgICAnLS1mb3JtLWxheW91dC13aWR0aCc6IGAke2NvbmZpZy53aWR0aH1weGAsXG4gICAgICAgICctLWZvcm0tbGF5b3V0LXBhZGRpbmcnOiBgJHtjb25maWcucGFkZGluZ31weGAsXG4gICAgICAgICctLWZvcm0tbGF5b3V0LXJvdy1nYXAnOiBgJHtjb25maWcucm93R2FwfXB4YCxcbiAgICAgICAgJy0tZm9ybS1sYXlvdXQtcmVnaW9uLWdhcCc6IGAke2NvbmZpZy5yZWdpb25HYXB9cHhgLFxuICAgICAgICAnLS1mb3JtLWxheW91dC1hY3Rpb24tZ2FwJzogYCR7Y29uZmlnLmFjdGlvbkdhcH1weGAsXG4gICAgfTtcbn07Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|
|
@@ -17,7 +17,7 @@ export interface FormLayoutProps extends Omit<HTMLAttributes<HTMLDivElement>, 't
|
|
|
17
17
|
/**
|
|
18
18
|
* Panel size within the variant. `large` (default) is the variant baseline;
|
|
19
19
|
* `small` layers a deviation. Only `page/small` deviates today — the compact
|
|
20
|
-
* auth-card surface (
|
|
20
|
+
* auth-card surface (380 wide, 24 padding, 16 gaps); other variant/size
|
|
21
21
|
* combos fall back to the baseline.
|
|
22
22
|
*/
|
|
23
23
|
size?: FormLayoutSize;
|
|
@@ -27,7 +27,12 @@ export interface FormLayoutProps extends Omit<HTMLAttributes<HTMLDivElement>, 't
|
|
|
27
27
|
* footer stay pinned); when `false` content always grows the panel.
|
|
28
28
|
*/
|
|
29
29
|
scroll?: boolean;
|
|
30
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Heading; a plain string renders as `Headline/sm` (24 / 28) regardless of
|
|
32
|
+
* variant or size. Pass a node to compose your own header block (e.g. a
|
|
33
|
+
* title with a description under it) — the automatic wrapping is skipped,
|
|
34
|
+
* so supply the `Headline/sm` typography yourself.
|
|
35
|
+
*/
|
|
31
36
|
title?: ReactNode;
|
|
32
37
|
/** Trailing slot on the title row (e.g. an environment switcher). */
|
|
33
38
|
extra?: ReactNode;
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { memo } from 'react';
|
|
3
|
+
import { ActionBar } from '../ActionBar';
|
|
4
|
+
import { FormLayout } from '../FormLayout';
|
|
5
|
+
import { Icons } from '../Icons';
|
|
6
|
+
import { Typography } from '../Typography';
|
|
7
|
+
import { default as classnames, joinCls } from '../../utils/classnames';
|
|
8
|
+
import { PANEL_LAYOUT_BACK_ICON_SIZE, PANEL_LAYOUT_BACK_LABEL, PANEL_LAYOUT_PREFIX, resolvePanelLayoutConfig } from './constants';
|
|
9
|
+
import './style';
|
|
10
|
+
/**
|
|
11
|
+
* The non-form content PANEL — the counterpart to `FormLayout`: that one
|
|
12
|
+
* holds fields, this one holds an illustration, copy and actions. ONE surface
|
|
13
|
+
* serving two hosts:
|
|
14
|
+
*
|
|
15
|
+
* page host <PanelLayout /> used directly
|
|
16
|
+
* dialog host BaseDialog = Dialog(bare) + this(modal) only adds the overlay
|
|
17
|
+
*
|
|
18
|
+
* Deliberately NOT named for a scenario, because it carries several: a
|
|
19
|
+
* verification challenge, a stepped wizard (2FA setup — hence the back
|
|
20
|
+
* arrow), a terminal page with no action at all.
|
|
21
|
+
*
|
|
22
|
+
* On a page, ONE of those scenarios has a shell of its own and the rest do
|
|
23
|
+
* not — which decides where business code should reach:
|
|
24
|
+
*
|
|
25
|
+
* a result (success / failure / expired / …) → `ResultForm`, business/Form
|
|
26
|
+
* anything else → this, directly
|
|
27
|
+
*
|
|
28
|
+
* So being used directly is the normal case here, not a fallback. Only add
|
|
29
|
+
* another shell on top when a scenario earns a name AND recurring copy (a
|
|
30
|
+
* `preset`); a shell that just re-exports this one buys nothing.
|
|
31
|
+
*
|
|
32
|
+
* Assembly:
|
|
33
|
+
*
|
|
34
|
+
* FormLayout card chrome (surface, hairline, radius) + the 24
|
|
35
|
+
* │ padding and 16 region gap. Its `page/small` width
|
|
36
|
+
* │ (448, the sign-in card) is NOT used — the panel width
|
|
37
|
+
* │ comes from the config table.
|
|
38
|
+
* ├─ header slot back / illustration / eyebrow / title / description as
|
|
39
|
+
* │ ONE block on 8px seams. It goes in the title slot, not
|
|
40
|
+
* │ the content region, because it is all header copy —
|
|
41
|
+
* │ that also keeps it pinned when the content scrolls.
|
|
42
|
+
* ├─ content region `children` — free-form (a QR code, an OTP input, rows)
|
|
43
|
+
* └─ ActionBar(fill) the actions.
|
|
44
|
+
*
|
|
45
|
+
* It owns no copy and no loose numbers: everything host-specific comes from
|
|
46
|
+
* `PANEL_LAYOUT_CONFIG`, so a divergence between page and dialog is a value
|
|
47
|
+
* change in that table and nothing else.
|
|
48
|
+
*/
|
|
49
|
+
var PanelLayoutBase = function PanelLayoutBase(_ref) {
|
|
50
|
+
var _ref$variant = _ref.variant,
|
|
51
|
+
variant = _ref$variant === void 0 ? 'page' : _ref$variant,
|
|
52
|
+
scroll = _ref.scroll,
|
|
53
|
+
width = _ref.width,
|
|
54
|
+
className = _ref.className,
|
|
55
|
+
showBackIcon = _ref.showBackIcon,
|
|
56
|
+
onBack = _ref.onBack,
|
|
57
|
+
backIcon = _ref.backIcon,
|
|
58
|
+
eyebrow = _ref.eyebrow,
|
|
59
|
+
title = _ref.title,
|
|
60
|
+
description = _ref.description,
|
|
61
|
+
_ref$descriptionStron = _ref.descriptionStrong,
|
|
62
|
+
descriptionStrong = _ref$descriptionStron === void 0 ? true : _ref$descriptionStron,
|
|
63
|
+
illustration = _ref.illustration,
|
|
64
|
+
primary = _ref.primary,
|
|
65
|
+
secondary = _ref.secondary,
|
|
66
|
+
direction = _ref.direction,
|
|
67
|
+
footnote = _ref.footnote,
|
|
68
|
+
children = _ref.children;
|
|
69
|
+
var classes = classnames(PANEL_LAYOUT_PREFIX);
|
|
70
|
+
var config = resolvePanelLayoutConfig(variant);
|
|
71
|
+
// A plain string becomes the family heading; a node passes through so
|
|
72
|
+
// callers can compose (e.g. a Tag above a two-line title).
|
|
73
|
+
var titleNode = typeof title === 'string' || typeof title === 'number' ? _jsx(Typography.Headline, {
|
|
74
|
+
size: 'sm',
|
|
75
|
+
as: 'h2',
|
|
76
|
+
color: 'default',
|
|
77
|
+
children: title
|
|
78
|
+
}) : title;
|
|
79
|
+
// Same contract as `title`: a plain string gets the family treatment (the
|
|
80
|
+
// muted label of "Step 2 of 3"), a node passes through so a Tag or a
|
|
81
|
+
// composed row still works. Without this every caller with a text eyebrow
|
|
82
|
+
// would hand-roll the same Typography.
|
|
83
|
+
//
|
|
84
|
+
// An EMPTY string counts as absent. Callers routinely hold the eyebrow in a
|
|
85
|
+
// state object that starts as `''`, and rendering an empty label would open
|
|
86
|
+
// an 8px seam above the title for nothing — so they can pass the value
|
|
87
|
+
// straight through instead of guarding it at every call site.
|
|
88
|
+
var eyebrowNode = eyebrow == null || eyebrow === '' ? null : typeof eyebrow === 'string' || typeof eyebrow === 'number' ? _jsx(Typography.Body, {
|
|
89
|
+
size: 'sm',
|
|
90
|
+
color: 'default-tertiary',
|
|
91
|
+
children: eyebrow
|
|
92
|
+
}) : eyebrow;
|
|
93
|
+
var illustrationNode = typeof illustration === 'string' ? _jsx(Icons, {
|
|
94
|
+
name: illustration,
|
|
95
|
+
size: config.illustrationSize
|
|
96
|
+
}) : illustration;
|
|
97
|
+
// Its own row above everything else, on the block's 8px seam — the shape
|
|
98
|
+
// stepped flows use in both hosts (2FA setup on a page, wizard dialogs).
|
|
99
|
+
var backNode = showBackIcon ? _jsx("button", {
|
|
100
|
+
type: 'button',
|
|
101
|
+
className: classes('back'),
|
|
102
|
+
"aria-label": PANEL_LAYOUT_BACK_LABEL,
|
|
103
|
+
onClick: onBack,
|
|
104
|
+
children: backIcon !== null && backIcon !== void 0 ? backIcon : _jsx(Icons, {
|
|
105
|
+
name: 'arrowLeft',
|
|
106
|
+
size: PANEL_LAYOUT_BACK_ICON_SIZE
|
|
107
|
+
})
|
|
108
|
+
}) : null;
|
|
109
|
+
var hasHeader = showBackIcon || illustration != null || eyebrowNode != null || title != null || description != null;
|
|
110
|
+
var header = hasHeader ? _jsxs("div", {
|
|
111
|
+
className: classes('header'),
|
|
112
|
+
children: [backNode, illustrationNode != null && _jsx("div", {
|
|
113
|
+
className: classes('illustration'),
|
|
114
|
+
children: illustrationNode
|
|
115
|
+
}), eyebrowNode, titleNode, description != null && _jsx(Typography.Body, {
|
|
116
|
+
as: 'p',
|
|
117
|
+
size: 'md',
|
|
118
|
+
strong: descriptionStrong,
|
|
119
|
+
color: 'default-secondary',
|
|
120
|
+
className: classes('description'),
|
|
121
|
+
children: description
|
|
122
|
+
})]
|
|
123
|
+
}) : undefined;
|
|
124
|
+
// The bar owns the button size, so the family size is applied per action
|
|
125
|
+
// rather than as a bar-level prop; an explicit per-action `size` still wins.
|
|
126
|
+
var withSize = function withSize(action) {
|
|
127
|
+
var _a;
|
|
128
|
+
return action && Object.assign(Object.assign({}, action), {
|
|
129
|
+
size: (_a = action.size) !== null && _a !== void 0 ? _a : config.buttonSize
|
|
130
|
+
});
|
|
131
|
+
};
|
|
132
|
+
var footer = primary || secondary || footnote ? _jsx(ActionBar, {
|
|
133
|
+
direction: direction,
|
|
134
|
+
primary: withSize(primary),
|
|
135
|
+
secondary: withSize(secondary),
|
|
136
|
+
footnote: footnote
|
|
137
|
+
}) : undefined;
|
|
138
|
+
return _jsx(FormLayout
|
|
139
|
+
// `page/small` is used for its 24 padding and 16 region gap, which are
|
|
140
|
+
// already the result family's numbers. Its 448 width is NOT — that is
|
|
141
|
+
// the sign-in card; the result panel is 380, from the config table.
|
|
142
|
+
, {
|
|
143
|
+
// `page/small` is used for its 24 padding and 16 region gap, which are
|
|
144
|
+
// already the result family's numbers. Its 448 width is NOT — that is
|
|
145
|
+
// the sign-in card; the result panel is 380, from the config table.
|
|
146
|
+
variant: 'page',
|
|
147
|
+
size: 'small',
|
|
148
|
+
scroll: scroll,
|
|
149
|
+
// In a dialog the Dialog panel carries the width (BaseDialog reads the
|
|
150
|
+
// same entry) and the layout fills it: sizing a bare panel from its
|
|
151
|
+
// child hits the shrink-to-fit percentage circularity.
|
|
152
|
+
width: width !== null && width !== void 0 ? width : variant === 'modal' ? '100%' : config.width,
|
|
153
|
+
className: joinCls(classes(), classes(variant), className),
|
|
154
|
+
style: {
|
|
155
|
+
'--form-layout-action-gap': "".concat(config.actionGap, "px")
|
|
156
|
+
},
|
|
157
|
+
title: header,
|
|
158
|
+
footer: footer,
|
|
159
|
+
children: children
|
|
160
|
+
});
|
|
161
|
+
};
|
|
162
|
+
export var PanelLayout = /*#__PURE__*/memo(PanelLayoutBase);
|
|
163
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUGFuZWxMYXlvdXQvUGFuZWxMYXlvdXQuanMiLCJjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL1BhbmVsTGF5b3V0L1BhbmVsTGF5b3V0LnRzeCJdLCJuYW1lcyI6WyJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwibWVtbyIsIkFjdGlvbkJhciIsIkZvcm1MYXlvdXQiLCJJY29ucyIsIlR5cG9ncmFwaHkiLCJkZWZhdWx0IiwiY2xhc3NuYW1lcyIsImpvaW5DbHMiLCJQQU5FTF9MQVlPVVRfQkFDS19JQ09OX1NJWkUiLCJQQU5FTF9MQVlPVVRfQkFDS19MQUJFTCIsIlBBTkVMX0xBWU9VVF9QUkVGSVgiLCJyZXNvbHZlUGFuZWxMYXlvdXRDb25maWciLCJQYW5lbExheW91dEJhc2UiLCJfcmVmIiwiX3JlZiR2YXJpYW50IiwidmFyaWFudCIsInNjcm9sbCIsIndpZHRoIiwiY2xhc3NOYW1lIiwic2hvd0JhY2tJY29uIiwib25CYWNrIiwiYmFja0ljb24iLCJleWVicm93IiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIl9yZWYkZGVzY3JpcHRpb25TdHJvbiIsImRlc2NyaXB0aW9uU3Ryb25nIiwiaWxsdXN0cmF0aW9uIiwicHJpbWFyeSIsInNlY29uZGFyeSIsImRpcmVjdGlvbiIsImZvb3Rub3RlIiwiY2hpbGRyZW4iLCJjbGFzc2VzIiwiY29uZmlnIiwidGl0bGVOb2RlIiwiSGVhZGxpbmUiLCJzaXplIiwiYXMiLCJjb2xvciIsImV5ZWJyb3dOb2RlIiwiQm9keSIsImlsbHVzdHJhdGlvbk5vZGUiLCJuYW1lIiwiaWxsdXN0cmF0aW9uU2l6ZSIsImJhY2tOb2RlIiwidHlwZSIsIm9uQ2xpY2siLCJoYXNIZWFkZXIiLCJoZWFkZXIiLCJzdHJvbmciLCJ1bmRlZmluZWQiLCJ3aXRoU2l6ZSIsImFjdGlvbiIsIl9hIiwiT2JqZWN0IiwiYXNzaWduIiwiYnV0dG9uU2l6ZSIsImZvb3RlciIsInN0eWxlIiwiY29uY2F0IiwiYWN0aW9uR2Fw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LE9BQ0V0RCxJQUFBLENBQUNLO0VBQ0M7RUFDQTtFQUNBO0VBQUEsRURoR0E7SUM4RkE7SUFDQTtJQUNBO0lBQ0FhLE9BQU8sRUFBQyxNQUFNO0lBQ2RzQixJQUFJLEVBQUMsT0FBTztJQUNackIsTUFBTSxFQUFFQSxNQUFNO0lBQ2Q7SUFDQTtJQUNBO0lBQ0FDLEtBQUssRUFBRUEsS0FBSyxLQUFBLElBQUEsSUFBTEEsS0FBSyxLQUFBLEtBQUEsQ0FBQSxHQUFMQSxLQUFLLEdBQUtGLE9BQU8sS0FBSyxPQUFPLEdBQUcsTUFBTSxHQUFHbUIsTUFBTSxDQUFDakIsS0FBTTtJQUM3REMsU0FBUyxFQUFFWCxPQUFPLENBQUMwQixPQUFPLENBQUEsQ0FBRSxFQUFFQSxPQUFPLENBQUNsQixPQUFPLENBQUMsRUFBRUcsU0FBUyxDQUFDO0lBQzFEeUMsS0FBSyxFQUFFO01BQUUsMEJBQTBCLEtBQUFDLE1BQUEsQ0FBSzFCLE1BQU0sQ0FBQzJCLFNBQVM7SUFBSSxDQUFtQjtJQUMvRXRDLEtBQUssRUFBRTBCLE1BQU07SUFDYlMsTUFBTSxFQUFFQSxNQUFNO0lBQUExQixRQUFBLEVBRWJBO0VBQVEsQ0FBQSxDQUNFO0FBRWpCLENBQUM7QUFFRCxPQUFPLElBQU04QixXQUFXLGdCQUFHOUQsSUFBSSxDQUFDWSxlQUFlLENBQUMiLCJmaWxlIjoiY29tcG9uZW50cy9QYW5lbExheW91dC9QYW5lbExheW91dC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQWN0aW9uQmFyIH0gZnJvbSAnLi4vQWN0aW9uQmFyJztcbmltcG9ydCB7IEZvcm1MYXlvdXQgfSBmcm9tICcuLi9Gb3JtTGF5b3V0JztcbmltcG9ydCB7IEljb25zIH0gZnJvbSAnLi4vSWNvbnMnO1xuaW1wb3J0IHsgVHlwb2dyYXBoeSB9IGZyb20gJy4uL1R5cG9ncmFwaHknO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBjbGFzc25hbWVzLCBqb2luQ2xzIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBQQU5FTF9MQVlPVVRfQkFDS19JQ09OX1NJWkUsIFBBTkVMX0xBWU9VVF9CQUNLX0xBQkVMLCBQQU5FTF9MQVlPVVRfUFJFRklYLCByZXNvbHZlUGFuZWxMYXlvdXRDb25maWcsIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0ICcuL3N0eWxlJztcbi8qKlxuICogVGhlIG5vbi1mb3JtIGNvbnRlbnQgUEFORUwg4oCUIHRoZSBjb3VudGVycGFydCB0byBgRm9ybUxheW91dGA6IHRoYXQgb25lXG4gKiBob2xkcyBmaWVsZHMsIHRoaXMgb25lIGhvbGRzIGFuIGlsbHVzdHJhdGlvbiwgY29weSBhbmQgYWN0aW9ucy4gT05FIHN1cmZhY2VcbiAqIHNlcnZpbmcgdHdvIGhvc3RzOlxuICpcbiAqICAgcGFnZSBob3N0ICAgIDxQYW5lbExheW91dCAvPiAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGRpcmVjdGx5XG4gKiAgIGRpYWxvZyBob3N0ICBCYXNlRGlhbG9nID0gRGlhbG9nKGJhcmUpICsgdGhpcyhtb2RhbCkgb25seSBhZGRzIHRoZSBvdmVybGF5XG4gKlxuICogRGVsaWJlcmF0ZWx5IE5PVCBuYW1lZCBmb3IgYSBzY2VuYXJpbywgYmVjYXVzZSBpdCBjYXJyaWVzIHNldmVyYWw6IGFcbiAqIHZlcmlmaWNhdGlvbiBjaGFsbGVuZ2UsIGEgc3RlcHBlZCB3aXphcmQgKDJGQSBzZXR1cCDigJQgaGVuY2UgdGhlIGJhY2tcbiAqIGFycm93KSwgYSB0ZXJtaW5hbCBwYWdlIHdpdGggbm8gYWN0aW9uIGF0IGFsbC5cbiAqXG4gKiBPbiBhIHBhZ2UsIE9ORSBvZiB0aG9zZSBzY2VuYXJpb3MgaGFzIGEgc2hlbGwgb2YgaXRzIG93biBhbmQgdGhlIHJlc3QgZG9cbiAqIG5vdCDigJQgd2hpY2ggZGVjaWRlcyB3aGVyZSBidXNpbmVzcyBjb2RlIHNob3VsZCByZWFjaDpcbiAqXG4gKiAgIGEgcmVzdWx0IChzdWNjZXNzIC8gZmFpbHVyZSAvIGV4cGlyZWQgLyDigKYpICDihpIgYFJlc3VsdEZvcm1gLCBidXNpbmVzcy9Gb3JtXG4gKiAgIGFueXRoaW5nIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oaSIHRoaXMsIGRpcmVjdGx5XG4gKlxuICogU28gYmVpbmcgdXNlZCBkaXJlY3RseSBpcyB0aGUgbm9ybWFsIGNhc2UgaGVyZSwgbm90IGEgZmFsbGJhY2suIE9ubHkgYWRkXG4gKiBhbm90aGVyIHNoZWxsIG9uIHRvcCB3aGVuIGEgc2NlbmFyaW8gZWFybnMgYSBuYW1lIEFORCByZWN1cnJpbmcgY29weSAoYVxuICogYHByZXNldGApOyBhIHNoZWxsIHRoYXQganVzdCByZS1leHBvcnRzIHRoaXMgb25lIGJ1eXMgbm90aGluZy5cbiAqXG4gKiBBc3NlbWJseTpcbiAqXG4gKiAgIEZvcm1MYXlvdXQgICAgICAgICAgY2FyZCBjaHJvbWUgKHN1cmZhY2UsIGhhaXJsaW5lLCByYWRpdXMpICsgdGhlIDI0XG4gKiAgIOKUgiAgICAgICAgICAgICAgICAgICBwYWRkaW5nIGFuZCAxNiByZWdpb24gZ2FwLiBJdHMgYHBhZ2Uvc21hbGxgIHdpZHRoXG4gKiAgIOKUgiAgICAgICAgICAgICAgICAgICAoNDQ4LCB0aGUgc2lnbi1pbiBjYXJkKSBpcyBOT1QgdXNlZCDigJQgdGhlIHBhbmVsIHdpZHRoXG4gKiAgIOKUgiAgICAgICAgICAgICAgICAgICBjb21lcyBmcm9tIHRoZSBjb25maWcgdGFibGUuXG4gKiAgIOKUnOKUgCBoZWFkZXIgc2xvdCAgICAgIGJhY2sgLyBpbGx1c3RyYXRpb24gLyBleWVicm93IC8gdGl0bGUgLyBkZXNjcmlwdGlvbiBhc1xuICogICDilIIgICAgICAgICAgICAgICAgICAgT05FIGJsb2NrIG9uIDhweCBzZWFtcy4gSXQgZ29lcyBpbiB0aGUgdGl0bGUgc2xvdCwgbm90XG4gKiAgIOKUgiAgICAgICAgICAgICAgICAgICB0aGUgY29udGVudCByZWdpb24sIGJlY2F1c2UgaXQgaXMgYWxsIGhlYWRlciBjb3B5IOKAlFxuICogICDilIIgICAgICAgICAgICAgICAgICAgdGhhdCBhbHNvIGtlZXBzIGl0IHBpbm5lZCB3aGVuIHRoZSBjb250ZW50IHNjcm9sbHMuXG4gKiAgIOKUnOKUgCBjb250ZW50IHJlZ2lvbiAgIGBjaGlsZHJlbmAg4oCUIGZyZWUtZm9ybSAoYSBRUiBjb2RlLCBhbiBPVFAgaW5wdXQsIHJvd3MpXG4gKiAgIOKUlOKUgCBBY3Rpb25CYXIoZmlsbCkgIHRoZSBhY3Rpb25zLlxuICpcbiAqIEl0IG93bnMgbm8gY29weSBhbmQgbm8gbG9vc2UgbnVtYmVyczogZXZlcnl0aGluZyBob3N0LXNwZWNpZmljIGNvbWVzIGZyb21cbiAqIGBQQU5FTF9MQVlPVVRfQ09ORklHYCwgc28gYSBkaXZlcmdlbmNlIGJldHdlZW4gcGFnZSBhbmQgZGlhbG9nIGlzIGEgdmFsdWVcbiAqIGNoYW5nZSBpbiB0aGF0IHRhYmxlIGFuZCBub3RoaW5nIGVsc2UuXG4gKi9cbmNvbnN0IFBhbmVsTGF5b3V0QmFzZSA9ICh7IHZhcmlhbnQgPSAncGFnZScsIHNjcm9sbCwgd2lkdGgsIGNsYXNzTmFtZSwgc2hvd0JhY2tJY29uLCBvbkJhY2ssIGJhY2tJY29uLCBleWVicm93LCB0aXRsZSwgZGVzY3JpcHRpb24sIGRlc2NyaXB0aW9uU3Ryb25nID0gdHJ1ZSwgaWxsdXN0cmF0aW9uLCBwcmltYXJ5LCBzZWNvbmRhcnksIGRpcmVjdGlvbiwgZm9vdG5vdGUsIGNoaWxkcmVuLCB9KSA9PiB7XG4gICAgY29uc3QgY2xhc3NlcyA9IGNsYXNzbmFtZXMoUEFORUxfTEFZT1VUX1BSRUZJWCk7XG4gICAgY29uc3QgY29uZmlnID0gcmVzb2x2ZVBhbmVsTGF5b3V0Q29uZmlnKHZhcmlhbnQpO1xuICAgIC8vIEEgcGxhaW4gc3RyaW5nIGJlY29tZXMgdGhlIGZhbWlseSBoZWFkaW5nOyBhIG5vZGUgcGFzc2VzIHRocm91Z2ggc29cbiAgICAvLyBjYWxsZXJzIGNhbiBjb21wb3NlIChlLmcuIGEgVGFnIGFib3ZlIGEgdHdvLWxpbmUgdGl0bGUpLlxuICAgIGNvbnN0IHRpdGxlTm9kZSA9IHR5cGVvZiB0aXRsZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHRpdGxlID09PSAnbnVtYmVyJyA/IChfanN4KFR5cG9ncmFwaHkuSGVhZGxpbmUsIHsgc2l6ZTogJ3NtJywgYXM6ICdoMicsIGNvbG9yOiAnZGVmYXVsdCcsIGNoaWxkcmVuOiB0aXRsZSB9KSkgOiAodGl0bGUpO1xuICAgIC8vIFNhbWUgY29udHJhY3QgYXMgYHRpdGxlYDogYSBwbGFpbiBzdHJpbmcgZ2V0cyB0aGUgZmFtaWx5IHRyZWF0bWVudCAodGhlXG4gICAgLy8gbXV0ZWQgbGFiZWwgb2YgXCJTdGVwIDIgb2YgM1wiKSwgYSBub2RlIHBhc3NlcyB0aHJvdWdoIHNvIGEgVGFnIG9yIGFcbiAgICAvLyBjb21wb3NlZCByb3cgc3RpbGwgd29ya3MuIFdpdGhvdXQgdGhpcyBldmVyeSBjYWxsZXIgd2l0aCBhIHRleHQgZXllYnJvd1xuICAgIC8vIHdvdWxkIGhhbmQtcm9sbCB0aGUgc2FtZSBUeXBvZ3JhcGh5LlxuICAgIC8vXG4gICAgLy8gQW4gRU1QVFkgc3RyaW5nIGNvdW50cyBhcyBhYnNlbnQuIENhbGxlcnMgcm91dGluZWx5IGhvbGQgdGhlIGV5ZWJyb3cgaW4gYVxuICAgIC8vIHN0YXRlIG9iamVjdCB0aGF0IHN0YXJ0cyBhcyBgJydgLCBhbmQgcmVuZGVyaW5nIGFuIGVtcHR5IGxhYmVsIHdvdWxkIG9wZW5cbiAgICAvLyBhbiA4cHggc2VhbSBhYm92ZSB0aGUgdGl0bGUgZm9yIG5vdGhpbmcg4oCUIHNvIHRoZXkgY2FuIHBhc3MgdGhlIHZhbHVlXG4gICAgLy8gc3RyYWlnaHQgdGhyb3VnaCBpbnN0ZWFkIG9mIGd1YXJkaW5nIGl0IGF0IGV2ZXJ5IGNhbGwgc2l0ZS5cbiAgICBjb25zdCBleWVicm93Tm9kZSA9IGV5ZWJyb3cgPT0gbnVsbCB8fCBleWVicm93ID09PSAnJyA/IG51bGxcbiAgICAgICAgOiB0eXBlb2YgZXllYnJvdyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGV5ZWJyb3cgPT09ICdudW1iZXInID8gKF9qc3goVHlwb2dyYXBoeS5Cb2R5LCB7IHNpemU6ICdzbScsIGNvbG9yOiAnZGVmYXVsdC10ZXJ0aWFyeScsIGNoaWxkcmVuOiBleWVicm93IH0pKSA6IChleWVicm93KTtcbiAgICBjb25zdCBpbGx1c3RyYXRpb25Ob2RlID0gdHlwZW9mIGlsbHVzdHJhdGlvbiA9PT0gJ3N0cmluZycgPyAoX2pzeChJY29ucywgeyBuYW1lOiBpbGx1c3RyYXRpb24sIHNpemU6IGNvbmZpZy5pbGx1c3RyYXRpb25TaXplIH0pKSA6IChpbGx1c3RyYXRpb24pO1xuICAgIC8vIEl0cyBvd24gcm93IGFib3ZlIGV2ZXJ5dGhpbmcgZWxzZSwgb24gdGhlIGJsb2NrJ3MgOHB4IHNlYW0g4oCUIHRoZSBzaGFwZVxuICAgIC8vIHN0ZXBwZWQgZmxvd3MgdXNlIGluIGJvdGggaG9zdHMgKDJGQSBzZXR1cCBvbiBhIHBhZ2UsIHdpemFyZCBkaWFsb2dzKS5cbiAgICBjb25zdCBiYWNrTm9kZSA9IHNob3dCYWNrSWNvbiA/IChfanN4KFwiYnV0dG9uXCIsIHsgdHlwZTogJ2J1dHRvbicsIGNsYXNzTmFtZTogY2xhc3NlcygnYmFjaycpLCBcImFyaWEtbGFiZWxcIjogUEFORUxfTEFZT1VUX0JBQ0tfTEFCRUwsIG9uQ2xpY2s6IG9uQmFjaywgY2hpbGRyZW46IGJhY2tJY29uICE9PSBudWxsICYmIGJhY2tJY29uICE9PSB2b2lkIDAgPyBiYWNrSWNvbiA6IF9qc3goSWNvbnMsIHsgbmFtZTogJ2Fycm93TGVmdCcsIHNpemU6IFBBTkVMX0xBWU9VVF9CQUNLX0lDT05fU0laRSB9KSB9KSkgOiBudWxsO1xuICAgIGNvbnN0IGhhc0hlYWRlciA9IHNob3dCYWNrSWNvbiB8fFxuICAgICAgICBpbGx1c3RyYXRpb24gIT0gbnVsbCB8fFxuICAgICAgICBleWVicm93Tm9kZSAhPSBudWxsIHx8XG4gICAgICAgIHRpdGxlICE9IG51bGwgfHxcbiAgICAgICAgZGVzY3JpcHRpb24gIT0gbnVsbDtcbiAgICBjb25zdCBoZWFkZXIgPSBoYXNIZWFkZXIgPyAoX2pzeHMoXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2hlYWRlcicpLCBjaGlsZHJlbjogW2JhY2tOb2RlLCBpbGx1c3RyYXRpb25Ob2RlICE9IG51bGwgJiYgKF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2lsbHVzdHJhdGlvbicpLCBjaGlsZHJlbjogaWxsdXN0cmF0aW9uTm9kZSB9KSksIGV5ZWJyb3dOb2RlLCB0aXRsZU5vZGUsIGRlc2NyaXB0aW9uICE9IG51bGwgJiYgKF9qc3goVHlwb2dyYXBoeS5Cb2R5LCB7IGFzOiAncCcsIHNpemU6ICdtZCcsIHN0cm9uZzogZGVzY3JpcHRpb25TdHJvbmcsIGNvbG9yOiAnZGVmYXVsdC1zZWNvbmRhcnknLCBjbGFzc05hbWU6IGNsYXNzZXMoJ2Rlc2NyaXB0aW9uJyksIGNoaWxkcmVuOiBkZXNjcmlwdGlvbiB9KSldIH0pKSA6IHVuZGVmaW5lZDtcbiAgICAvLyBUaGUgYmFyIG93bnMgdGhlIGJ1dHRvbiBzaXplLCBzbyB0aGUgZmFtaWx5IHNpemUgaXMgYXBwbGllZCBwZXIgYWN0aW9uXG4gICAgLy8gcmF0aGVyIHRoYW4gYXMgYSBiYXItbGV2ZWwgcHJvcDsgYW4gZXhwbGljaXQgcGVyLWFjdGlvbiBgc2l6ZWAgc3RpbGwgd2lucy5cbiAgICBjb25zdCB3aXRoU2l6ZSA9IChhY3Rpb24pID0+IHsgdmFyIF9hOyByZXR1cm4gYWN0aW9uICYmIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYWN0aW9uKSwgeyBzaXplOiAoX2EgPSBhY3Rpb24uc2l6ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29uZmlnLmJ1dHRvblNpemUgfSk7IH07XG4gICAgY29uc3QgZm9vdGVyID0gcHJpbWFyeSB8fCBzZWNvbmRhcnkgfHwgZm9vdG5vdGUgPyAoX2pzeChBY3Rpb25CYXIsIHsgZGlyZWN0aW9uOiBkaXJlY3Rpb24sIHByaW1hcnk6IHdpdGhTaXplKHByaW1hcnkpLCBzZWNvbmRhcnk6IHdpdGhTaXplKHNlY29uZGFyeSksIGZvb3Rub3RlOiBmb290bm90ZSB9KSkgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIChfanN4KEZvcm1MYXlvdXRcbiAgICAvLyBgcGFnZS9zbWFsbGAgaXMgdXNlZCBmb3IgaXRzIDI0IHBhZGRpbmcgYW5kIDE2IHJlZ2lvbiBnYXAsIHdoaWNoIGFyZVxuICAgIC8vIGFscmVhZHkgdGhlIHJlc3VsdCBmYW1pbHkncyBudW1iZXJzLiBJdHMgNDQ4IHdpZHRoIGlzIE5PVCDigJQgdGhhdCBpc1xuICAgIC8vIHRoZSBzaWduLWluIGNhcmQ7IHRoZSByZXN1bHQgcGFuZWwgaXMgMzgwLCBmcm9tIHRoZSBjb25maWcgdGFibGUuXG4gICAgLCB7IFxuICAgICAgICAvLyBgcGFnZS9zbWFsbGAgaXMgdXNlZCBmb3IgaXRzIDI0IHBhZGRpbmcgYW5kIDE2IHJlZ2lvbiBnYXAsIHdoaWNoIGFyZVxuICAgICAgICAvLyBhbHJlYWR5IHRoZSByZXN1bHQgZmFtaWx5J3MgbnVtYmVycy4gSXRzIDQ0OCB3aWR0aCBpcyBOT1Qg4oCUIHRoYXQgaXNcbiAgICAgICAgLy8gdGhlIHNpZ24taW4gY2FyZDsgdGhlIHJlc3VsdCBwYW5lbCBpcyAzODAsIGZyb20gdGhlIGNvbmZpZyB0YWJsZS5cbiAgICAgICAgdmFyaWFudDogJ3BhZ2UnLCBzaXplOiAnc21hbGwnLCBzY3JvbGw6IHNjcm9sbCwgXG4gICAgICAgIC8vIEluIGEgZGlhbG9nIHRoZSBEaWFsb2cgcGFuZWwgY2FycmllcyB0aGUgd2lkdGggKEJhc2VEaWFsb2cgcmVhZHMgdGhlXG4gICAgICAgIC8vIHNhbWUgZW50cnkpIGFuZCB0aGUgbGF5b3V0IGZpbGxzIGl0OiBzaXppbmcgYSBiYXJlIHBhbmVsIGZyb20gaXRzXG4gICAgICAgIC8vIGNoaWxkIGhpdHMgdGhlIHNocmluay10by1maXQgcGVyY2VudGFnZSBjaXJjdWxhcml0eS5cbiAgICAgICAgd2lkdGg6IHdpZHRoICE9PSBudWxsICYmIHdpZHRoICE9PSB2b2lkIDAgPyB3aWR0aCA6ICh2YXJpYW50ID09PSAnbW9kYWwnID8gJzEwMCUnIDogY29uZmlnLndpZHRoKSwgY2xhc3NOYW1lOiBqb2luQ2xzKGNsYXNzZXMoKSwgY2xhc3Nlcyh2YXJpYW50KSwgY2xhc3NOYW1lKSwgc3R5bGU6IHsgJy0tZm9ybS1sYXlvdXQtYWN0aW9uLWdhcCc6IGAke2NvbmZpZy5hY3Rpb25HYXB9cHhgIH0sIHRpdGxlOiBoZWFkZXIsIGZvb3RlcjogZm9vdGVyLCBjaGlsZHJlbjogY2hpbGRyZW4gfSkpO1xufTtcbmV4cG9ydCBjb25zdCBQYW5lbExheW91dCA9IG1lbW8oUGFuZWxMYXlvdXRCYXNlKTsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export declare const PANEL_LAYOUT_PREFIX = "panel-layout";
|
|
2
|
+
/** Back-arrow control: 24px icon, and its accessible name. */
|
|
3
|
+
export declare const PANEL_LAYOUT_BACK_ICON_SIZE = 24;
|
|
4
|
+
export declare const PANEL_LAYOUT_BACK_LABEL = "Go back";
|
|
5
|
+
/**
|
|
6
|
+
* THE density table for content panels — the single thing to edit when the
|
|
7
|
+
* design changes. Same shape as `FORM_LAYOUT_CONFIG`: one entry per host, so
|
|
8
|
+
* a divergence between the two is a value change, never a structural one.
|
|
9
|
+
*
|
|
10
|
+
* The two entries are currently IDENTICAL, and that is the design: a panel
|
|
11
|
+
* renders the same on a page and in a dialog, the only difference being
|
|
12
|
+
* whether a `Dialog(bare)` is wrapped around it. They are still spelled out
|
|
13
|
+
* separately so that (a) the sameness reads as deliberate rather than as an
|
|
14
|
+
* oversight, and (b) a divergence later is a value change here and nothing
|
|
15
|
+
* else — no consumer passes these numbers, they only pass `variant`.
|
|
16
|
+
*
|
|
17
|
+
* `width` is the panel width used in BOTH hosts (380). It is NOT inherited
|
|
18
|
+
* from FormLayout's `page/small` density — that entry is 448, the app's
|
|
19
|
+
* sign-in card, a different surface. Only the padding (24) and the region gap
|
|
20
|
+
* (16) come from that density, and those already match. Inside a dialog the
|
|
21
|
+
* value goes on the Dialog panel and the layout fills at 100%: sizing a bare
|
|
22
|
+
* panel from its child hits the shrink-to-fit percentage circularity (the
|
|
23
|
+
* same reason FormDialog gives).
|
|
24
|
+
*/
|
|
25
|
+
export declare const PANEL_LAYOUT_CONFIG: {
|
|
26
|
+
/** Standalone on a page. */
|
|
27
|
+
readonly page: {
|
|
28
|
+
/** Panel width (px). */
|
|
29
|
+
readonly width: 380;
|
|
30
|
+
/** Illustration above the header copy (px). */
|
|
31
|
+
readonly illustrationSize: 52;
|
|
32
|
+
/** Footer action button size. */
|
|
33
|
+
readonly buttonSize: "medium";
|
|
34
|
+
/** Gap between footer action buttons (px); ActionBar reads it via var. */
|
|
35
|
+
readonly actionGap: 8;
|
|
36
|
+
};
|
|
37
|
+
/** Inside a dialog, wrapped by `BaseDialog` in a `Dialog(bare)`. */
|
|
38
|
+
readonly modal: {
|
|
39
|
+
readonly width: 380;
|
|
40
|
+
readonly illustrationSize: 52;
|
|
41
|
+
readonly buttonSize: "medium";
|
|
42
|
+
readonly actionGap: 8;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
export type PanelLayoutVariant = keyof typeof PANEL_LAYOUT_CONFIG;
|
|
46
|
+
export declare const resolvePanelLayoutConfig: (variant: PanelLayoutVariant) => {
|
|
47
|
+
/** Panel width (px). */
|
|
48
|
+
readonly width: 380;
|
|
49
|
+
/** Illustration above the header copy (px). */
|
|
50
|
+
readonly illustrationSize: 52;
|
|
51
|
+
/** Footer action button size. */
|
|
52
|
+
readonly buttonSize: "medium";
|
|
53
|
+
/** Gap between footer action buttons (px); ActionBar reads it via var. */
|
|
54
|
+
readonly actionGap: 8;
|
|
55
|
+
} | {
|
|
56
|
+
readonly width: 380;
|
|
57
|
+
readonly illustrationSize: 52;
|
|
58
|
+
readonly buttonSize: "medium";
|
|
59
|
+
readonly actionGap: 8;
|
|
60
|
+
};
|