@clicoh/orion-library 1.2.0-beta.22 → 1.2.0-beta.23
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/assets/avatares/caja-ruedas.svg +1 -0
- package/assets/avatares/cohete-azul.svg +1 -0
- package/assets/avatares/criatura-tres-ojos.svg +1 -0
- package/assets/avatares/cubo-brazos.svg +1 -0
- package/assets/avatares/cubo-morado.svg +1 -0
- package/assets/avatares/dino-placas-amarillas.svg +1 -0
- package/assets/avatares/dino-placas-azules.svg +1 -0
- package/assets/avatares/edificio-cupulas.svg +1 -0
- package/assets/avatares/globo-anillo.svg +1 -0
- package/assets/avatares/pulpo-morado.svg +1 -0
- package/assets/avatares/robot-lente.svg +1 -0
- package/assets/avatares/ventana-codigo.svg +1 -0
- package/assets/css/expresivo.css +37 -0
- package/dist/components/01-atoms/CodeBlock/CodeBlock.d.ts +11 -3
- package/dist/components/01-atoms/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/components/01-atoms/CodeBlock/CodeBlock.jsx +13 -5
- package/dist/components/01-atoms/CodeBlock/CodeBlock.jsx.map +1 -1
- package/dist/components/01-atoms/OtpInput/OtpInput.d.ts +1 -1
- package/dist/components/01-atoms/OtpInput/OtpInput.jsx +3 -2
- package/dist/components/01-atoms/OtpInput/OtpInput.jsx.map +1 -1
- package/dist/components/02-molecules/ActionMenu/ActionMenu.d.ts +39 -0
- package/dist/components/02-molecules/ActionMenu/ActionMenu.d.ts.map +1 -0
- package/dist/components/02-molecules/ActionMenu/ActionMenu.jsx +36 -0
- package/dist/components/02-molecules/ActionMenu/ActionMenu.jsx.map +1 -0
- package/dist/components/02-molecules/ActionMenu/index.d.ts +2 -0
- package/dist/components/02-molecules/ActionMenu/index.d.ts.map +1 -0
- package/dist/components/02-molecules/ActionMenu/index.js +2 -0
- package/dist/components/02-molecules/ActionMenu/index.js.map +1 -0
- package/dist/components/02-molecules/Tab/TabList.d.ts.map +1 -1
- package/dist/components/02-molecules/Tab/TabList.jsx +10 -6
- package/dist/components/02-molecules/Tab/TabList.jsx.map +1 -1
- package/dist/components/02-molecules/index.d.ts +1 -0
- package/dist/components/02-molecules/index.d.ts.map +1 -1
- package/dist/components/02-molecules/index.js +1 -0
- package/dist/components/02-molecules/index.js.map +1 -1
- package/dist/components/03-organisms/BarChart/BarChart.d.ts +52 -0
- package/dist/components/03-organisms/BarChart/BarChart.d.ts.map +1 -0
- package/dist/components/03-organisms/BarChart/BarChart.jsx +116 -0
- package/dist/components/03-organisms/BarChart/BarChart.jsx.map +1 -0
- package/dist/components/03-organisms/BarChart/index.d.ts +2 -0
- package/dist/components/03-organisms/BarChart/index.d.ts.map +1 -0
- package/dist/components/03-organisms/BarChart/index.js +2 -0
- package/dist/components/03-organisms/BarChart/index.js.map +1 -0
- package/dist/components/03-organisms/DataTable/DataTable.d.ts +5 -2
- package/dist/components/03-organisms/DataTable/DataTable.d.ts.map +1 -1
- package/dist/components/03-organisms/DataTable/DataTable.jsx +10 -7
- package/dist/components/03-organisms/DataTable/DataTable.jsx.map +1 -1
- package/dist/components/03-organisms/index.d.ts +1 -0
- package/dist/components/03-organisms/index.d.ts.map +1 -1
- package/dist/components/03-organisms/index.js +1 -0
- package/dist/components/03-organisms/index.js.map +1 -1
- package/dist/components/04-templates/LoginTemplate/LoginForm.d.ts +6 -1
- package/dist/components/04-templates/LoginTemplate/LoginForm.d.ts.map +1 -1
- package/dist/components/04-templates/LoginTemplate/LoginForm.jsx +29 -7
- package/dist/components/04-templates/LoginTemplate/LoginForm.jsx.map +1 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepThree.d.ts.map +1 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepThree.jsx +8 -4
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepThree.jsx.map +1 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepTwo.d.ts.map +1 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepTwo.jsx +10 -3
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepTwo.jsx.map +1 -1
- package/dist/components/04-templates/LoginTemplate/index.d.ts +1 -1
- package/dist/components/04-templates/LoginTemplate/index.d.ts.map +1 -1
- package/dist/components/04-templates/LoginTemplate/submitOnEnter.d.ts +9 -0
- package/dist/components/04-templates/LoginTemplate/submitOnEnter.d.ts.map +1 -0
- package/dist/components/04-templates/LoginTemplate/submitOnEnter.js +15 -0
- package/dist/components/04-templates/LoginTemplate/submitOnEnter.js.map +1 -0
- package/expresivo/ExpAccentNote/ExpAccentNote.d.ts +25 -0
- package/expresivo/ExpAccentNote/ExpAccentNote.d.ts.map +1 -0
- package/expresivo/ExpAccentNote/ExpAccentNote.jsx +47 -0
- package/expresivo/ExpAccentNote/ExpAccentNote.jsx.map +1 -0
- package/expresivo/ExpAccentNote/index.d.ts +2 -0
- package/expresivo/ExpAccentNote/index.d.ts.map +1 -0
- package/expresivo/ExpAccentNote/index.js +2 -0
- package/expresivo/ExpAccentNote/index.js.map +1 -0
- package/expresivo/ExpCodeHostIcon/ExpCodeHostIcon.d.ts +29 -0
- package/expresivo/ExpCodeHostIcon/ExpCodeHostIcon.d.ts.map +1 -0
- package/expresivo/ExpCodeHostIcon/ExpCodeHostIcon.jsx +44 -0
- package/expresivo/ExpCodeHostIcon/ExpCodeHostIcon.jsx.map +1 -0
- package/expresivo/ExpCodeHostIcon/index.d.ts +2 -0
- package/expresivo/ExpCodeHostIcon/index.d.ts.map +1 -0
- package/expresivo/ExpCodeHostIcon/index.js +2 -0
- package/expresivo/ExpCodeHostIcon/index.js.map +1 -0
- package/expresivo/ExpFigureBand/ExpFigureBand.d.ts +61 -0
- package/expresivo/ExpFigureBand/ExpFigureBand.d.ts.map +1 -0
- package/expresivo/ExpFigureBand/ExpFigureBand.jsx +102 -0
- package/expresivo/ExpFigureBand/ExpFigureBand.jsx.map +1 -0
- package/expresivo/ExpFigureBand/index.d.ts +2 -0
- package/expresivo/ExpFigureBand/index.d.ts.map +1 -0
- package/expresivo/ExpFigureBand/index.js +2 -0
- package/expresivo/ExpFigureBand/index.js.map +1 -0
- package/expresivo/ExpGrowBar/ExpGrowBar.d.ts +13 -2
- package/expresivo/ExpGrowBar/ExpGrowBar.d.ts.map +1 -1
- package/expresivo/ExpGrowBar/ExpGrowBar.jsx +16 -4
- package/expresivo/ExpGrowBar/ExpGrowBar.jsx.map +1 -1
- package/expresivo/ExpRepoAvatar/ExpRepoAvatar.d.ts +3 -0
- package/expresivo/ExpRepoAvatar/ExpRepoAvatar.d.ts.map +1 -1
- package/expresivo/ExpRepoAvatar/ExpRepoAvatar.jsx +3 -0
- package/expresivo/ExpRepoAvatar/ExpRepoAvatar.jsx.map +1 -1
- package/expresivo/ExpRepoAvatar/catalog.d.ts +6 -2
- package/expresivo/ExpRepoAvatar/catalog.d.ts.map +1 -1
- package/expresivo/ExpRepoAvatar/catalog.js +29 -1
- package/expresivo/ExpRepoAvatar/catalog.js.map +1 -1
- package/expresivo/ExpSplitCard/ExpSplitCard.d.ts +38 -0
- package/expresivo/ExpSplitCard/ExpSplitCard.d.ts.map +1 -0
- package/expresivo/ExpSplitCard/ExpSplitCard.jsx +48 -0
- package/expresivo/ExpSplitCard/ExpSplitCard.jsx.map +1 -0
- package/expresivo/ExpSplitCard/index.d.ts +2 -0
- package/expresivo/ExpSplitCard/index.d.ts.map +1 -0
- package/expresivo/ExpSplitCard/index.js +2 -0
- package/expresivo/ExpSplitCard/index.js.map +1 -0
- package/expresivo/ExpStatusTag/ExpStatusTag.d.ts +26 -0
- package/expresivo/ExpStatusTag/ExpStatusTag.d.ts.map +1 -0
- package/expresivo/ExpStatusTag/ExpStatusTag.jsx +44 -0
- package/expresivo/ExpStatusTag/ExpStatusTag.jsx.map +1 -0
- package/expresivo/ExpStatusTag/index.d.ts +2 -0
- package/expresivo/ExpStatusTag/index.d.ts.map +1 -0
- package/expresivo/ExpStatusTag/index.js +2 -0
- package/expresivo/ExpStatusTag/index.js.map +1 -0
- package/expresivo/index.d.ts +5 -0
- package/expresivo/index.d.ts.map +1 -1
- package/expresivo/index.js +5 -0
- package/expresivo/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import clsx from 'clsx';
|
|
2
|
+
import { Each, Show } from '../../00-base';
|
|
3
|
+
const seriesStyleMap = [
|
|
4
|
+
'bg-lavender dark:bg-lavender-dark',
|
|
5
|
+
'bg-cyan dark:bg-cyan-dark',
|
|
6
|
+
'bg-olive dark:bg-olive-dark',
|
|
7
|
+
'bg-amber dark:bg-amber-dark',
|
|
8
|
+
];
|
|
9
|
+
const seriesStyle = (index) => seriesStyleMap[index % seriesStyleMap.length];
|
|
10
|
+
const MUTED = 'text-gray-1 dark:text-gray-2';
|
|
11
|
+
const REFERENCE_LINE = 'border-amber dark:border-amber-dark';
|
|
12
|
+
/**
|
|
13
|
+
* BarChart component for comparing a few values side by side, as vertical bars.
|
|
14
|
+
*
|
|
15
|
+
* Each label gets one bar per series, with its value on top. A `reference`
|
|
16
|
+
* draws a dashed line, such as a goal, over the bars; its label goes in the
|
|
17
|
+
* legend under the plot, so no bar covers it. The bars are hidden from screen
|
|
18
|
+
* readers, which read a table with the same values instead.
|
|
19
|
+
*
|
|
20
|
+
* @component
|
|
21
|
+
* @example
|
|
22
|
+
* // Mean cost per route, with the goal as a reference line
|
|
23
|
+
* <BarChart
|
|
24
|
+
* labels={['lookup', 'similar', 'model']}
|
|
25
|
+
* series={[{ name: 'USD per case', data: [0.03, 0.09, 0.24] }]}
|
|
26
|
+
* formatValue={(value) => value.toFixed(2)}
|
|
27
|
+
* reference={{ value: 0.25, label: 'goal 0.25' }}
|
|
28
|
+
* ariaLabel="Mean cost per route"
|
|
29
|
+
* />
|
|
30
|
+
*
|
|
31
|
+
* @param {Object} props - The properties of the BarChart component.
|
|
32
|
+
* @param {string[]} props.labels - One label per group of bars, under the plot.
|
|
33
|
+
* @param {BarChartSeries[]} props.series - The values. With more than one series the bars are grouped and a legend shows up.
|
|
34
|
+
* @param {string} props.ariaLabel - What the chart shows: the caption of the table that screen readers read.
|
|
35
|
+
* @param {Function} [props.formatValue] - Turns each value into the text over its bar and in the table. Defaults to `String`.
|
|
36
|
+
* @param {BarChartReference} [props.reference] - A dashed line at that value; its label goes in the legend.
|
|
37
|
+
* @param {number} [props.height=200] - Height of the plot in pixels, without the labels.
|
|
38
|
+
* @param {Object} [props.restProps] - Additional properties to be passed to the `figure`.
|
|
39
|
+
*
|
|
40
|
+
* @returns {ReactNode} The rendered BarChart component.
|
|
41
|
+
*/
|
|
42
|
+
export function BarChart({ labels, series, ariaLabel, formatValue = String, reference, height = 200, ...restProps }) {
|
|
43
|
+
const values = series.flatMap((item) => item.data);
|
|
44
|
+
const max = Math.max(...values, reference?.value ?? 0, 0) || 1;
|
|
45
|
+
const share = (value) => `${(Math.max(value, 0) / max) * 100}%`;
|
|
46
|
+
return (<figure {...restProps} className={clsx('m-0 text-black dark:text-white', restProps.className)}>
|
|
47
|
+
<div aria-hidden="true" className="pt-5">
|
|
48
|
+
<div className="border-gray-5 dark:border-gray-1 relative flex items-end gap-4 border-b px-2" style={{ height }}>
|
|
49
|
+
<Show>
|
|
50
|
+
<Show.When isTrue={!!reference}>
|
|
51
|
+
<div className={clsx('absolute inset-x-0 z-10 border-t border-dashed', REFERENCE_LINE)} style={{ bottom: share(reference?.value ?? 0) }}/>
|
|
52
|
+
</Show.When>
|
|
53
|
+
</Show>
|
|
54
|
+
<Each of={labels} render={(label, labelIndex) => (<div key={label} className="flex h-full flex-1 items-end justify-center gap-1">
|
|
55
|
+
<Each of={series} render={(item, seriesIndex) => (<div key={item.name} className={clsx('relative min-h-0.5 max-w-14 flex-1 rounded-t', seriesStyle(seriesIndex))} style={{ height: share(item.data[labelIndex] ?? 0) }}>
|
|
56
|
+
<span className="absolute bottom-full left-1/2 mb-0.5 -translate-x-1/2 text-xs leading-4 font-semibold whitespace-nowrap">
|
|
57
|
+
{formatValue(item.data[labelIndex] ?? 0)}
|
|
58
|
+
</span>
|
|
59
|
+
</div>)}/>
|
|
60
|
+
</div>)}/>
|
|
61
|
+
</div>
|
|
62
|
+
<div className="flex gap-4 px-2 pt-2">
|
|
63
|
+
<Each of={labels} render={(label) => (<span key={label} className={clsx('min-w-0 flex-1 text-center text-xs leading-4 break-words', MUTED)}>
|
|
64
|
+
{label}
|
|
65
|
+
</span>)}/>
|
|
66
|
+
</div>
|
|
67
|
+
<Show>
|
|
68
|
+
<Show.When isTrue={series.length > 1 || !!reference}>
|
|
69
|
+
<div className="flex flex-wrap gap-4 px-2 pt-3">
|
|
70
|
+
<Show>
|
|
71
|
+
<Show.When isTrue={series.length > 1}>
|
|
72
|
+
<Each of={series} render={(item, seriesIndex) => (<span key={item.name} className={clsx('inline-flex items-center gap-1.5 text-xs', MUTED)}>
|
|
73
|
+
<span className={clsx('size-2 rounded-sm', seriesStyle(seriesIndex))}/>
|
|
74
|
+
{item.name}
|
|
75
|
+
</span>)}/>
|
|
76
|
+
</Show.When>
|
|
77
|
+
</Show>
|
|
78
|
+
<Show>
|
|
79
|
+
<Show.When isTrue={!!reference}>
|
|
80
|
+
<span className="text-amber-strong dark:text-amber-dark inline-flex items-center gap-1.5 text-xs">
|
|
81
|
+
<span className={clsx('w-4 border-t-2 border-dashed', REFERENCE_LINE)}/>
|
|
82
|
+
{reference?.label}
|
|
83
|
+
</span>
|
|
84
|
+
</Show.When>
|
|
85
|
+
</Show>
|
|
86
|
+
</div>
|
|
87
|
+
</Show.When>
|
|
88
|
+
</Show>
|
|
89
|
+
</div>
|
|
90
|
+
<table className="sr-only">
|
|
91
|
+
<caption>{ariaLabel}</caption>
|
|
92
|
+
<thead>
|
|
93
|
+
<tr>
|
|
94
|
+
<td />
|
|
95
|
+
<Each of={series} render={(item) => (<th key={item.name} scope="col">
|
|
96
|
+
{item.name}
|
|
97
|
+
</th>)}/>
|
|
98
|
+
</tr>
|
|
99
|
+
</thead>
|
|
100
|
+
<tbody>
|
|
101
|
+
<Each of={labels} render={(label, labelIndex) => (<tr key={label}>
|
|
102
|
+
<th scope="row">{label}</th>
|
|
103
|
+
<Each of={series} render={(item) => (<td key={item.name}>
|
|
104
|
+
{formatValue(item.data[labelIndex] ?? 0)}
|
|
105
|
+
</td>)}/>
|
|
106
|
+
</tr>)}/>
|
|
107
|
+
</tbody>
|
|
108
|
+
</table>
|
|
109
|
+
<Show>
|
|
110
|
+
<Show.When isTrue={!!reference}>
|
|
111
|
+
<p className="sr-only">{reference?.label}</p>
|
|
112
|
+
</Show.When>
|
|
113
|
+
</Show>
|
|
114
|
+
</figure>);
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=BarChart.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BarChart.jsx","sourceRoot":"","sources":["../../../../src/components/03-organisms/BarChart/BarChart.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/03-organisms/BarChart/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/03-organisms/BarChart/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { ComponentProps, HTMLAttributes, ReactNode } from 'react';
|
|
|
2
2
|
import { Pagination, Table } from '../../02-molecules';
|
|
3
3
|
type DataTableProps = {
|
|
4
4
|
table: Pick<ComponentProps<typeof Table>, 'id' | 'headers' | 'data' | 'action' | 'actions' | 'loading' | 'selectable' | 'multiple' | 'currentSelection' | 'setCurrentSelection' | 'tableName' | 'selectAllLabel' | 'getRowSelectionLabel' | 'getRowActionLabel' | 'footer' | 'empty' | 'tableProps'>;
|
|
5
|
-
pagination
|
|
5
|
+
pagination?: Pick<ComponentProps<typeof Pagination>, 'currentPage' | 'pageChange' | 'itemsPerPage' | 'totalItems' | 'navigationLabel' | 'previousPageLabel' | 'nextPageLabel' | 'itemsPerPageLabel'>;
|
|
6
6
|
summary?: ReactNode;
|
|
7
7
|
modifier?: DataTableVariants;
|
|
8
8
|
} & HTMLAttributes<HTMLDivElement>;
|
|
@@ -14,6 +14,9 @@ export type DataTableVariants = 'card' | 'plain';
|
|
|
14
14
|
* so only the row separators are left, for tables that read as part of the page
|
|
15
15
|
* instead of as a card.
|
|
16
16
|
*
|
|
17
|
+
* Without `pagination` the table shows every row it gets and the pagination
|
|
18
|
+
* row goes away; a `summary` still gets a row of its own.
|
|
19
|
+
*
|
|
17
20
|
* @component
|
|
18
21
|
* @example
|
|
19
22
|
* // Example usage of DataTable component
|
|
@@ -42,7 +45,7 @@ export type DataTableVariants = 'card' | 'plain';
|
|
|
42
45
|
* @param {Function} props.table.action - The action to be performed on table data.
|
|
43
46
|
* @param {Array<Object>} props.table.actions - The actions available for table rows.
|
|
44
47
|
* @param {boolean} props.table.loading - The loading state of the table.
|
|
45
|
-
* @param {Object} props.pagination - The pagination configuration.
|
|
48
|
+
* @param {Object} [props.pagination] - The pagination configuration. Without it, no pagination row.
|
|
46
49
|
* @param {number} props.pagination.currentPage - The current page number.
|
|
47
50
|
* @param {Function} props.pagination.pageChange - The function to handle page changes.
|
|
48
51
|
* @param {number} props.pagination.itemsPerPage - The number of items per page.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../src/components/03-organisms/DataTable/DataTable.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAE5E,OAAO,EACL,UAAU,EACV,KAAK,EAGN,MAAM,oBAAoB,CAAC;AAE5B,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,IAAI,CACT,cAAc,CAAC,OAAO,KAAK,CAAC,EAC1B,IAAI,GACJ,SAAS,GACT,MAAM,GACN,QAAQ,GACR,SAAS,GACT,SAAS,GACT,YAAY,GACZ,UAAU,GACV,kBAAkB,GAClB,qBAAqB,GACrB,WAAW,GACX,gBAAgB,GAChB,sBAAsB,GACtB,mBAAmB,GACnB,QAAQ,GACR,OAAO,GACP,YAAY,CACf,CAAC;IACF,UAAU,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../src/components/03-organisms/DataTable/DataTable.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAE5E,OAAO,EACL,UAAU,EACV,KAAK,EAGN,MAAM,oBAAoB,CAAC;AAE5B,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,IAAI,CACT,cAAc,CAAC,OAAO,KAAK,CAAC,EAC1B,IAAI,GACJ,SAAS,GACT,MAAM,GACN,QAAQ,GACR,SAAS,GACT,SAAS,GACT,YAAY,GACZ,UAAU,GACV,kBAAkB,GAClB,qBAAqB,GACrB,WAAW,GACX,gBAAgB,GAChB,sBAAsB,GACtB,mBAAmB,GACnB,QAAQ,GACR,OAAO,GACP,YAAY,CACf,CAAC;IACF,UAAU,CAAC,EAAE,IAAI,CACf,cAAc,CAAC,OAAO,UAAU,CAAC,EAC/B,aAAa,GACb,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,iBAAiB,GACjB,mBAAmB,GACnB,eAAe,GACf,mBAAmB,CACtB,CAAC;IACF,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAEnC,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,CAAC;AAOjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,UAAU,EACV,OAAO,EACP,QAAkB,EAClB,GAAG,SAAS,EACb,EAAE,cAAc,GAAG,SAAS,CAmF5B"}
|
|
@@ -14,6 +14,9 @@ const styleMap = {
|
|
|
14
14
|
* so only the row separators are left, for tables that read as part of the page
|
|
15
15
|
* instead of as a card.
|
|
16
16
|
*
|
|
17
|
+
* Without `pagination` the table shows every row it gets and the pagination
|
|
18
|
+
* row goes away; a `summary` still gets a row of its own.
|
|
19
|
+
*
|
|
17
20
|
* @component
|
|
18
21
|
* @example
|
|
19
22
|
* // Example usage of DataTable component
|
|
@@ -42,7 +45,7 @@ const styleMap = {
|
|
|
42
45
|
* @param {Function} props.table.action - The action to be performed on table data.
|
|
43
46
|
* @param {Array<Object>} props.table.actions - The actions available for table rows.
|
|
44
47
|
* @param {boolean} props.table.loading - The loading state of the table.
|
|
45
|
-
* @param {Object} props.pagination - The pagination configuration.
|
|
48
|
+
* @param {Object} [props.pagination] - The pagination configuration. Without it, no pagination row.
|
|
46
49
|
* @param {number} props.pagination.currentPage - The current page number.
|
|
47
50
|
* @param {Function} props.pagination.pageChange - The function to handle page changes.
|
|
48
51
|
* @param {number} props.pagination.itemsPerPage - The number of items per page.
|
|
@@ -54,10 +57,10 @@ const styleMap = {
|
|
|
54
57
|
* @returns {ReactNode} The rendered DataTable component.
|
|
55
58
|
*/
|
|
56
59
|
export function DataTable({ table, pagination, summary, modifier = 'plain', ...restProps }) {
|
|
57
|
-
const [numberOfRows, setNumberOfRows] = useState(pagination
|
|
60
|
+
const [numberOfRows, setNumberOfRows] = useState(pagination?.itemsPerPage?.at(0) || 10);
|
|
58
61
|
const handlePageChange = (page, itemsPerPage) => {
|
|
59
62
|
setNumberOfRows(itemsPerPage || 10);
|
|
60
|
-
pagination
|
|
63
|
+
pagination?.pageChange(page, itemsPerPage);
|
|
61
64
|
};
|
|
62
65
|
return (<div {...restProps} data-orion-part="data-table" data-modifier={modifier} className={clsx('dark:text-white', styleMap[modifier], restProps.className)}>
|
|
63
66
|
<Show>
|
|
@@ -72,10 +75,10 @@ export function DataTable({ table, pagination, summary, modifier = 'plain', ...r
|
|
|
72
75
|
<Table {...table} numberOfRows={numberOfRows} selectable={true} multiple={false} currentSelection={table.currentSelection} setCurrentSelection={table.setCurrentSelection}/>
|
|
73
76
|
</Show.When>
|
|
74
77
|
</Show>
|
|
75
|
-
<div className={clsx('flex flex-wrap items-center gap-4 px-4 py-2', summary ? 'justify-between' : 'justify-end')}>
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
78
|
+
{(!!pagination || !!summary) && (<div className={clsx('flex flex-wrap items-center gap-4 px-4 py-2', summary ? 'justify-between' : 'justify-end')}>
|
|
79
|
+
{summary}
|
|
80
|
+
{!!pagination && (<Pagination {...pagination} pageChange={handlePageChange} className={'justify-end'} disableNavigation={table.loading} disabledNext={table.data.length < numberOfRows}/>)}
|
|
81
|
+
</div>)}
|
|
79
82
|
</div>);
|
|
80
83
|
}
|
|
81
84
|
//# sourceMappingURL=DataTable.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.jsx","sourceRoot":"","sources":["../../../../src/components/03-organisms/DataTable/DataTable.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAA6C,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EACL,UAAU,EACV,KAAK,GAGN,MAAM,oBAAoB,CAAC;AAwC5B,MAAM,QAAQ,GAAsC;IAClD,IAAI,EAAE,IAAI,CAAC,oDAAoD,CAAC;IAChE,KAAK,EAAE,EAAE;CACV,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"DataTable.jsx","sourceRoot":"","sources":["../../../../src/components/03-organisms/DataTable/DataTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/03-organisms/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/03-organisms/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/03-organisms/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/03-organisms/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
|
|
@@ -16,6 +16,7 @@ export type LoginFormSubmitState = {
|
|
|
16
16
|
label: string;
|
|
17
17
|
};
|
|
18
18
|
export type LoginFormErrorStyle = 'text' | 'message';
|
|
19
|
+
export type LoginFormCodeLayout = 'replace' | 'below';
|
|
19
20
|
type LoginFormProps = {
|
|
20
21
|
login: (formData: FormData) => Promise<string | undefined>;
|
|
21
22
|
callback?: () => void;
|
|
@@ -37,6 +38,8 @@ type LoginFormProps = {
|
|
|
37
38
|
errorStyle?: LoginFormErrorStyle;
|
|
38
39
|
toastErrors?: boolean;
|
|
39
40
|
showSpinner?: boolean;
|
|
41
|
+
codeLayout?: LoginFormCodeLayout;
|
|
42
|
+
onBack?: () => void;
|
|
40
43
|
};
|
|
41
44
|
/**
|
|
42
45
|
* LoginForm component for rendering a login form with email and password
|
|
@@ -87,9 +90,11 @@ type LoginFormProps = {
|
|
|
87
90
|
* @param {'text' | 'message'} [props.errorStyle='text'] - `text` shows the error as red text under the buttons; `message` as an error `InlineMessage` above the submit button.
|
|
88
91
|
* @param {boolean} [props.toastErrors=true] - Also shows each error in a toast.
|
|
89
92
|
* @param {boolean} [props.showSpinner=true] - Shows a spinner under the form while `login` runs. Turn it off when `renderSubmit` already shows the wait.
|
|
93
|
+
* @param {'replace' | 'below'} [props.codeLayout='replace'] - `replace` swaps the email and password for the code step; `below` keeps them on screen, read-only, with the code under them, and leaves them read-only instead of disabled while `login` runs. With `below` the browser only takes the sign-in as done when the code is accepted, not when the code step shows up.
|
|
94
|
+
* @param {Function} [props.onBack] - Called when the user leaves the code step or the MFA setup to edit the email and password.
|
|
90
95
|
*
|
|
91
96
|
* @returns {ReactNode} The rendered LoginForm component.
|
|
92
97
|
*/
|
|
93
|
-
export declare function LoginForm({ login, callback, needCode, lengthCode, setupMfa, showPasswordAriaLabel, hidePasswordAriaLabel, getOtpDigitAriaLabel, loadingLabel, setupMfaAccessibilityLabels, title, description, labels, forgotPassword, footer, renderSubmit, errorStyle, toastErrors, showSpinner, }: LoginFormProps): ReactNode;
|
|
98
|
+
export declare function LoginForm({ login, callback, needCode, lengthCode, setupMfa, showPasswordAriaLabel, hidePasswordAriaLabel, getOtpDigitAriaLabel, loadingLabel, setupMfaAccessibilityLabels, title, description, labels, forgotPassword, footer, renderSubmit, errorStyle, toastErrors, showSpinner, codeLayout, onBack, }: LoginFormProps): ReactNode;
|
|
94
99
|
export {};
|
|
95
100
|
//# sourceMappingURL=LoginForm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginForm.d.ts","sourceRoot":"","sources":["../../../../src/components/04-templates/LoginTemplate/LoginForm.tsx"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"LoginForm.d.ts","sourceRoot":"","sources":["../../../../src/components/04-templates/LoginTemplate/LoginForm.tsx"],"names":[],"mappings":"AAGA,OAAO,EAEL,SAAS,EAIV,MAAM,OAAO,CAAC;AAYf,OAAO,EAAY,KAAK,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAGxE,0EAA0E;AAC1E,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,kEAAkE;AAClE,MAAM,MAAM,oBAAoB,GAAG;IACjC,iCAAiC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,SAAS,CAAC;AAErD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,OAAO,CAAC;AAEtD,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC3D,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACzE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,SAAS,CAAC;IAC1D,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAaF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,QAAgB,EAChB,UAAc,EACd,QAAQ,EACR,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,2BAA2B,EAC3B,KAAqB,EACrB,WAAW,EACX,MAAM,EACN,cAAc,EACd,MAAM,EACN,YAAY,EACZ,UAAmB,EACnB,WAAkB,EAClB,WAAkB,EAClB,UAAsB,EACtB,MAAM,GACP,EAAE,cAAc,GAAG,SAAS,CAoL5B"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import clsx from 'clsx';
|
|
3
|
-
import { useEffect, useState } from 'react';
|
|
3
|
+
import { useEffect, useRef, useState, } from 'react';
|
|
4
4
|
import { FiArrowRight } from 'react-icons/fi';
|
|
5
5
|
import { Button, Heading, Input, OtpInput, Paragraph, showToast, Spinner, } from '../../01-atoms';
|
|
6
6
|
import { InlineMessage } from '../../02-molecules';
|
|
7
7
|
import { SetupMfa } from './SetupMfa';
|
|
8
|
+
import { submitOnEnter } from './submitOnEnter';
|
|
9
|
+
const READ_ONLY_TEXT = 'read-only:text-gray-1 dark:read-only:text-gray-2 read-only:focus:text-gray-1 dark:read-only:focus:text-gray-2';
|
|
8
10
|
const DEFAULT_LABELS = {
|
|
9
11
|
username: 'Usuario',
|
|
10
12
|
password: 'Contraseña',
|
|
@@ -61,21 +63,38 @@ const DEFAULT_LABELS = {
|
|
|
61
63
|
* @param {'text' | 'message'} [props.errorStyle='text'] - `text` shows the error as red text under the buttons; `message` as an error `InlineMessage` above the submit button.
|
|
62
64
|
* @param {boolean} [props.toastErrors=true] - Also shows each error in a toast.
|
|
63
65
|
* @param {boolean} [props.showSpinner=true] - Shows a spinner under the form while `login` runs. Turn it off when `renderSubmit` already shows the wait.
|
|
66
|
+
* @param {'replace' | 'below'} [props.codeLayout='replace'] - `replace` swaps the email and password for the code step; `below` keeps them on screen, read-only, with the code under them, and leaves them read-only instead of disabled while `login` runs. With `below` the browser only takes the sign-in as done when the code is accepted, not when the code step shows up.
|
|
67
|
+
* @param {Function} [props.onBack] - Called when the user leaves the code step or the MFA setup to edit the email and password.
|
|
64
68
|
*
|
|
65
69
|
* @returns {ReactNode} The rendered LoginForm component.
|
|
66
70
|
*/
|
|
67
|
-
export function LoginForm({ login, callback, needCode = false, lengthCode = 6, setupMfa, showPasswordAriaLabel, hidePasswordAriaLabel, getOtpDigitAriaLabel, loadingLabel, setupMfaAccessibilityLabels, title = 'Bienvenido!', description, labels, forgotPassword, footer, renderSubmit, errorStyle = 'text', toastErrors = true, showSpinner = true, }) {
|
|
71
|
+
export function LoginForm({ login, callback, needCode = false, lengthCode = 6, setupMfa, showPasswordAriaLabel, hidePasswordAriaLabel, getOtpDigitAriaLabel, loadingLabel, setupMfaAccessibilityLabels, title = 'Bienvenido!', description, labels, forgotPassword, footer, renderSubmit, errorStyle = 'text', toastErrors = true, showSpinner = true, codeLayout = 'replace', onBack, }) {
|
|
68
72
|
const [errorMessage, setErrorMessage] = useState();
|
|
69
73
|
const [otpCode, setOtpCode] = useState('');
|
|
70
74
|
const [isPending, setIsPending] = useState(false);
|
|
71
75
|
const [qr, setQr] = useState();
|
|
72
76
|
const [showLogin, setShowLogin] = useState(!needCode);
|
|
77
|
+
const codeRef = useRef(null);
|
|
73
78
|
const copy = { ...DEFAULT_LABELS, ...labels };
|
|
79
|
+
const showCredentials = showLogin || codeLayout === 'below';
|
|
80
|
+
// Chrome takes the sign-in as done when no field of the form can take focus once the request ends.
|
|
81
|
+
const lockedCredentials = !showLogin || (isPending && codeLayout === 'below');
|
|
82
|
+
const credentialState = {
|
|
83
|
+
disabled: isPending && codeLayout !== 'below',
|
|
84
|
+
readOnly: lockedCredentials,
|
|
85
|
+
className: lockedCredentials ? READ_ONLY_TEXT : undefined,
|
|
86
|
+
};
|
|
74
87
|
useEffect(() => {
|
|
75
88
|
setShowLogin(!needCode);
|
|
76
89
|
}, [needCode]);
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
if (!showLogin && !qr)
|
|
92
|
+
codeRef.current?.querySelector('input')?.focus();
|
|
93
|
+
}, [showLogin, qr]);
|
|
77
94
|
const handlerSubmit = (event) => {
|
|
78
95
|
event.preventDefault();
|
|
96
|
+
if (isPending)
|
|
97
|
+
return;
|
|
79
98
|
setIsPending(true);
|
|
80
99
|
setErrorMessage(undefined);
|
|
81
100
|
const formData = new FormData(event.currentTarget);
|
|
@@ -100,6 +119,7 @@ export function LoginForm({ login, callback, needCode = false, lengthCode = 6, s
|
|
|
100
119
|
setQr(undefined);
|
|
101
120
|
setOtpCode('');
|
|
102
121
|
setShowLogin(true);
|
|
122
|
+
onBack?.();
|
|
103
123
|
};
|
|
104
124
|
const handleSetupMfa = (firstCode, secondCode) => {
|
|
105
125
|
return setupMfa?.(firstCode, secondCode);
|
|
@@ -118,25 +138,27 @@ export function LoginForm({ login, callback, needCode = false, lengthCode = 6, s
|
|
|
118
138
|
{description}
|
|
119
139
|
</Paragraph>)}
|
|
120
140
|
</div>
|
|
121
|
-
<form onSubmit={handlerSubmit} aria-busy={isPending} className="flex w-72 flex-col items-center gap-4">
|
|
122
|
-
{!!
|
|
141
|
+
<form onSubmit={handlerSubmit} onKeyDown={submitOnEnter} aria-busy={isPending} className="flex w-72 flex-col items-center gap-4">
|
|
142
|
+
{!!showCredentials && (<>
|
|
123
143
|
<Input label={copy.username} input={{
|
|
124
144
|
type: 'email',
|
|
125
145
|
name: 'username',
|
|
126
146
|
required: true,
|
|
127
147
|
autoComplete: 'email',
|
|
128
|
-
|
|
148
|
+
...credentialState,
|
|
129
149
|
}}/>
|
|
130
150
|
<Input label={copy.password} showPasswordAriaLabel={showPasswordAriaLabel} hidePasswordAriaLabel={hidePasswordAriaLabel} input={{
|
|
131
151
|
type: 'password',
|
|
132
152
|
name: 'password',
|
|
133
153
|
required: true,
|
|
134
154
|
autoComplete: 'current-password',
|
|
135
|
-
|
|
155
|
+
...credentialState,
|
|
136
156
|
}}/>
|
|
137
157
|
</>)}
|
|
138
158
|
|
|
139
|
-
{!showLogin && (<
|
|
159
|
+
{!showLogin && (<div ref={codeRef} className="w-full">
|
|
160
|
+
<OtpInput label={copy.code} length={lengthCode} handleSubmit={(otp) => setOtpCode(otp)} getDigitAriaLabel={getOtpDigitAriaLabel}/>
|
|
161
|
+
</div>)}
|
|
140
162
|
|
|
141
163
|
{errorStyle === 'message' && !!errorMessage && (<InlineMessage modifier="error" className="w-full">
|
|
142
164
|
{errorMessage}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginForm.jsx","sourceRoot":"","sources":["../../../../src/components/04-templates/LoginTemplate/LoginForm.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"LoginForm.jsx","sourceRoot":"","sources":["../../../../src/components/04-templates/LoginTemplate/LoginForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepThree.d.ts","sourceRoot":"","sources":["../../../../../src/components/04-templates/LoginTemplate/SetupMfa/StepThree.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StepThree.d.ts","sourceRoot":"","sources":["../../../../../src/components/04-templates/LoginTemplate/SetupMfa/StepThree.tsx"],"names":[],"mappings":"AAWA,KAAK,cAAc,GAAG;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,CACN,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAgB,SAAS,CAAC,EACxB,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,UAAc,EACd,iBAAiB,EACjB,YAAY,GACb,EAAE,cAAc,+BAgGhB"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { Button, Heading, OtpInput, Paragraph, Spinner, } from '../../../01-atoms';
|
|
2
2
|
import { useState } from 'react';
|
|
3
3
|
import clsx from 'clsx';
|
|
4
|
+
import { submitOnEnter } from '../submitOnEnter';
|
|
4
5
|
export function StepThree({ previousCode, previousStep, nextStep, onCancel, submit, lengthCode = 4, getDigitAriaLabel, loadingLabel, }) {
|
|
5
6
|
const [secondCode, setSecondCode] = useState('');
|
|
6
7
|
const [errorMessage, setErrorMessage] = useState('');
|
|
7
8
|
const [isPending, setIsPending] = useState(false);
|
|
8
|
-
const handleSubmit =
|
|
9
|
+
const handleSubmit = (event) => {
|
|
10
|
+
event.preventDefault();
|
|
11
|
+
if (secondCode.length < lengthCode || isPending)
|
|
12
|
+
return;
|
|
9
13
|
setIsPending(true);
|
|
10
14
|
submit?.(previousCode, secondCode)
|
|
11
15
|
?.then(() => {
|
|
@@ -18,7 +22,7 @@ export function StepThree({ previousCode, previousStep, nextStep, onCancel, subm
|
|
|
18
22
|
setIsPending(false);
|
|
19
23
|
});
|
|
20
24
|
};
|
|
21
|
-
return (<
|
|
25
|
+
return (<form noValidate onSubmit={handleSubmit} onKeyDown={submitOnEnter} aria-busy={isPending} className="col-1 flex w-72 flex-col items-center text-black dark:text-white">
|
|
22
26
|
<Heading className="mb-4" level="h7">
|
|
23
27
|
Configurar autenticación
|
|
24
28
|
</Heading>
|
|
@@ -36,7 +40,7 @@ export function StepThree({ previousCode, previousStep, nextStep, onCancel, subm
|
|
|
36
40
|
|
|
37
41
|
<OtpInput label="Codigo de Verificación 2" length={lengthCode} handleSubmit={setSecondCode} error={errorMessage} className="dark:[&_.text-error]:text-error-1" getDigitAriaLabel={getDigitAriaLabel}/>
|
|
38
42
|
|
|
39
|
-
<Button disabled={secondCode?.length < lengthCode || isPending} modifier="principal" className="my-2 w-full" type="
|
|
43
|
+
<Button disabled={secondCode?.length < lengthCode || isPending} modifier="principal" className="my-2 w-full" type="submit" aria-disabled={isPending}>
|
|
40
44
|
Verificar y Completar
|
|
41
45
|
</Button>
|
|
42
46
|
|
|
@@ -53,6 +57,6 @@ export function StepThree({ previousCode, previousStep, nextStep, onCancel, subm
|
|
|
53
57
|
<div className={clsx('mt-4 self-center', !isPending && 'invisible opacity-0')}>
|
|
54
58
|
<Spinner label={loadingLabel}/>
|
|
55
59
|
</div>
|
|
56
|
-
</
|
|
60
|
+
</form>);
|
|
57
61
|
}
|
|
58
62
|
//# sourceMappingURL=StepThree.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepThree.jsx","sourceRoot":"","sources":["../../../../../src/components/04-templates/LoginTemplate/SetupMfa/StepThree.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,OAAO,EACP,QAAQ,EACR,SAAS,EACT,OAAO,GACR,MAAM,mBAAmB,CAAC;AAC3B,OAAO,
|
|
1
|
+
{"version":3,"file":"StepThree.jsx","sourceRoot":"","sources":["../../../../../src/components/04-templates/LoginTemplate/SetupMfa/StepThree.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepTwo.d.ts","sourceRoot":"","sources":["../../../../../src/components/04-templates/LoginTemplate/SetupMfa/StepTwo.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StepTwo.d.ts","sourceRoot":"","sources":["../../../../../src/components/04-templates/LoginTemplate/SetupMfa/StepTwo.tsx"],"names":[],"mappings":"AAIA,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/C,CAAC;AAEF,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,iBAAiB,GAClB,EAAE,YAAY,+BA6Dd"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import { useState } from 'react';
|
|
2
2
|
import { Button, Heading, OtpInput, Paragraph } from '../../../01-atoms';
|
|
3
|
+
import { submitOnEnter } from '../submitOnEnter';
|
|
3
4
|
export function StepTwo({ nextStep, previousStep, onCancel, getDigitAriaLabel, }) {
|
|
4
5
|
const [code, setCode] = useState('');
|
|
5
|
-
|
|
6
|
+
const handleSubmit = (event) => {
|
|
7
|
+
event.preventDefault();
|
|
8
|
+
if (code.length < 6)
|
|
9
|
+
return;
|
|
10
|
+
nextStep(code);
|
|
11
|
+
};
|
|
12
|
+
return (<form noValidate onSubmit={handleSubmit} onKeyDown={submitOnEnter} className="flex w-72 flex-col items-center text-black dark:text-white">
|
|
6
13
|
<Heading className="mb-4" level="h7">
|
|
7
14
|
Configurar autenticación
|
|
8
15
|
</Heading>
|
|
@@ -13,7 +20,7 @@ export function StepTwo({ nextStep, previousStep, onCancel, getDigitAriaLabel, }
|
|
|
13
20
|
|
|
14
21
|
<OtpInput label="Codigo de Verificación 1" length={6} handleSubmit={(otp) => setCode(otp)} getDigitAriaLabel={getDigitAriaLabel}/>
|
|
15
22
|
|
|
16
|
-
<Button modifier="principal" className="my-2 w-full" type="
|
|
23
|
+
<Button modifier="principal" className="my-2 w-full" type="submit" disabled={code.length < 6}>
|
|
17
24
|
Continuar
|
|
18
25
|
</Button>
|
|
19
26
|
|
|
@@ -26,6 +33,6 @@ export function StepTwo({ nextStep, previousStep, onCancel, getDigitAriaLabel, }
|
|
|
26
33
|
Atrás
|
|
27
34
|
</Button>
|
|
28
35
|
</div>
|
|
29
|
-
</
|
|
36
|
+
</form>);
|
|
30
37
|
}
|
|
31
38
|
//# sourceMappingURL=StepTwo.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepTwo.jsx","sourceRoot":"","sources":["../../../../../src/components/04-templates/LoginTemplate/SetupMfa/StepTwo.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"StepTwo.jsx","sourceRoot":"","sources":["../../../../../src/components/04-templates/LoginTemplate/SetupMfa/StepTwo.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AASjD,MAAM,UAAU,OAAO,CAAC,EACtB,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,iBAAiB,GACJ;IACb,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAE7C,MAAM,YAAY,GAAG,CAAC,KAAiC,EAAE,EAAE;QACzD,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO;QAC5B,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,OAAO,CACL,CAAC,IAAI,CACH,UAAU,CACV,QAAQ,CAAC,CAAC,YAAY,CAAC,CACvB,SAAS,CAAC,CAAC,aAAa,CAAC,CACzB,SAAS,CAAC,4DAA4D,CAEtE;MAAA,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAClC;;MACF,EAAE,OAAO,CAET;;MAAA,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CACvC;;MACF,EAAE,SAAS,CAEX;;MAAA,CAAC,QAAQ,CACP,KAAK,CAAC,0BAA0B,CAChC,MAAM,CAAC,CAAC,CAAC,CAAC,CACV,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CACpC,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,EAGvC;;MAAA,CAAC,MAAM,CACL,QAAQ,CAAC,WAAW,CACpB,SAAS,CAAC,aAAa,CACvB,IAAI,CAAC,QAAQ,CACb,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAE1B;;MACF,EAAE,MAAM,CAER;;MAAA,CAAC,GAAG,CAAC,SAAS,CAAC,yBAAyB,CACtC;QAAA,CAAC,MAAM,CACL,QAAQ,CAAC,QAAQ,CACjB,SAAS,CAAC,UAAU,CACpB,IAAI,CAAC,QAAQ,CACb,OAAO,CAAC,CAAC,QAAQ,CAAC,CAElB;;QACF,EAAE,MAAM,CAER;;QAAA,CAAC,MAAM,CACL,QAAQ,CAAC,QAAQ,CACjB,SAAS,CAAC,UAAU,CACpB,IAAI,CAAC,QAAQ,CACb,OAAO,CAAC,CAAC,YAAY,CAAC,CAEtB;;QACF,EAAE,MAAM,CACV;MAAA,EAAE,GAAG,CACP;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { LoginTemplate } from './LoginTemplate';
|
|
2
2
|
export { LoginForm } from './LoginForm';
|
|
3
|
-
export type { LoginFormErrorStyle, LoginFormLabels, LoginFormSubmitState, } from './LoginForm';
|
|
3
|
+
export type { LoginFormCodeLayout, LoginFormErrorStyle, LoginFormLabels, LoginFormSubmitState, } from './LoginForm';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/04-templates/LoginTemplate/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/04-templates/LoginTemplate/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { KeyboardEvent } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Submits the form on Enter in one of its fields. The browser does not submit when something
|
|
4
|
+
* else, such as an extension, cancels the key first.
|
|
5
|
+
*
|
|
6
|
+
* @param {KeyboardEvent<HTMLFormElement>} event - The `keydown` of the form.
|
|
7
|
+
*/
|
|
8
|
+
export declare function submitOnEnter(event: KeyboardEvent<HTMLFormElement>): void;
|
|
9
|
+
//# sourceMappingURL=submitOnEnter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submitOnEnter.d.ts","sourceRoot":"","sources":["../../../../src/components/04-templates/LoginTemplate/submitOnEnter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,IAAI,CAKzE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Submits the form on Enter in one of its fields. The browser does not submit when something
|
|
3
|
+
* else, such as an extension, cancels the key first.
|
|
4
|
+
*
|
|
5
|
+
* @param {KeyboardEvent<HTMLFormElement>} event - The `keydown` of the form.
|
|
6
|
+
*/
|
|
7
|
+
export function submitOnEnter(event) {
|
|
8
|
+
if (event.key !== 'Enter' || event.nativeEvent.isComposing)
|
|
9
|
+
return;
|
|
10
|
+
if (!(event.target instanceof HTMLInputElement))
|
|
11
|
+
return;
|
|
12
|
+
event.preventDefault();
|
|
13
|
+
event.currentTarget.requestSubmit();
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=submitOnEnter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submitOnEnter.js","sourceRoot":"","sources":["../../../../src/components/04-templates/LoginTemplate/submitOnEnter.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAqC;IACjE,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC,WAAW;QAAE,OAAO;IACnE,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,YAAY,gBAAgB,CAAC;QAAE,OAAO;IACxD,KAAK,CAAC,cAAc,EAAE,CAAC;IACvB,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;AACtC,CAAC"}
|