@fayz-ai/ui 0.12.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ChartWidgetInner-GDE5PBTR.js → ChartWidgetInner-IOLIUYTB.js} +21 -8
- package/dist/ChartWidgetInner-IOLIUYTB.js.map +1 -0
- package/dist/analytics/AnalyticsCard.d.ts.map +1 -1
- package/dist/analytics/AnalyticsControls.d.ts +5 -1
- package/dist/analytics/AnalyticsControls.d.ts.map +1 -1
- package/dist/chunk-3OVZ5JJQ.js +540 -0
- package/dist/chunk-3OVZ5JJQ.js.map +1 -0
- package/dist/{chunk-22EVFMS3.js → chunk-4GK6IHOI.js} +17 -3
- package/dist/chunk-4GK6IHOI.js.map +1 -0
- package/dist/{chunk-7BMXN7MP.js → chunk-5KMAEQA3.js} +25 -24
- package/dist/chunk-5KMAEQA3.js.map +1 -0
- package/dist/chunk-AASANYXN.js +601 -0
- package/dist/chunk-AASANYXN.js.map +1 -0
- package/dist/chunk-FFJ2C5YH.js +92 -0
- package/dist/chunk-FFJ2C5YH.js.map +1 -0
- package/dist/chunk-J7F3Z52K.js +152 -0
- package/dist/chunk-J7F3Z52K.js.map +1 -0
- package/dist/{chunk-JGJNRNQW.js → chunk-KD2V3TAX.js} +290 -67
- package/dist/chunk-KD2V3TAX.js.map +1 -0
- package/dist/{chunk-ZDRHCKRK.js → chunk-NA3GE4H3.js} +746 -533
- package/dist/chunk-NA3GE4H3.js.map +1 -0
- package/dist/{chunk-7BHG3XGJ.js → chunk-SLWTKHNY.js} +296 -269
- package/dist/chunk-SLWTKHNY.js.map +1 -0
- package/dist/dashboard/ChartWidgetInner.d.ts.map +1 -1
- package/dist/dashboard/DashboardCanvas.d.ts.map +1 -1
- package/dist/dashboard/DashboardCustomizeMenu.d.ts.map +1 -1
- package/dist/dashboard/DashboardRange.d.ts +8 -2
- package/dist/dashboard/DashboardRange.d.ts.map +1 -1
- package/dist/dashboard/index.js +4 -4
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +86 -99
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.d.ts +8 -2
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/ModulePage.d.ts +24 -1
- package/dist/layout/ModulePage.d.ts.map +1 -1
- package/dist/layout/Sidebar.d.ts +27 -4
- package/dist/layout/Sidebar.d.ts.map +1 -1
- package/dist/layout/Topbar.d.ts +10 -3
- package/dist/layout/Topbar.d.ts.map +1 -1
- package/dist/layout/index.d.ts +2 -1
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout/index.js +4 -4
- package/dist/layout/rail-flyout.d.ts +10 -0
- package/dist/layout/rail-flyout.d.ts.map +1 -1
- package/dist/primitives/SearchCombobox.d.ts +9 -1
- package/dist/primitives/SearchCombobox.d.ts.map +1 -1
- package/dist/primitives/bulk-action-bar.d.ts +3 -1
- package/dist/primitives/bulk-action-bar.d.ts.map +1 -1
- package/dist/primitives/color-palette.d.ts +24 -0
- package/dist/primitives/color-palette.d.ts.map +1 -0
- package/dist/primitives/header-tabs.d.ts +47 -7
- package/dist/primitives/header-tabs.d.ts.map +1 -1
- package/dist/primitives/image-drop.d.ts +28 -0
- package/dist/primitives/image-drop.d.ts.map +1 -0
- package/dist/primitives/index.d.ts +9 -3
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +6 -3
- package/dist/primitives/list-view.d.ts +9 -1
- package/dist/primitives/list-view.d.ts.map +1 -1
- package/dist/primitives/option-select.d.ts +46 -0
- package/dist/primitives/option-select.d.ts.map +1 -0
- package/dist/primitives/page-toolbar.d.ts +80 -0
- package/dist/primitives/page-toolbar.d.ts.map +1 -0
- package/dist/primitives/search-select.d.ts +3 -1
- package/dist/primitives/search-select.d.ts.map +1 -1
- package/dist/primitives/sheet.d.ts.map +1 -1
- package/dist/primitives/step-progress.d.ts +20 -0
- package/dist/primitives/step-progress.d.ts.map +1 -0
- package/dist/primitives/tabs.d.ts.map +1 -1
- package/dist/primitives/use-row-selection.d.ts +50 -0
- package/dist/primitives/use-row-selection.d.ts.map +1 -0
- package/dist/stores/index.d.ts +1 -1
- package/dist/stores/index.d.ts.map +1 -1
- package/dist/stores/page-header.store.d.ts +26 -2
- package/dist/stores/page-header.store.d.ts.map +1 -1
- package/dist/styles.css +74 -17
- package/dist/wizard/Wizard.d.ts +38 -0
- package/dist/wizard/Wizard.d.ts.map +1 -0
- package/dist/wizard/WizardField.d.ts +22 -0
- package/dist/wizard/WizardField.d.ts.map +1 -0
- package/dist/wizard/index.d.ts +6 -0
- package/dist/wizard/index.d.ts.map +1 -0
- package/dist/wizard/index.js +5 -0
- package/dist/wizard/index.js.map +1 -0
- package/dist/wizard/logic.d.ts +39 -0
- package/dist/wizard/logic.d.ts.map +1 -0
- package/dist/wizard/types.d.ts +95 -0
- package/dist/wizard/types.d.ts.map +1 -0
- package/dist/wizard/useWizard.d.ts +47 -0
- package/dist/wizard/useWizard.d.ts.map +1 -0
- package/package.json +14 -8
- package/dist/ChartWidgetInner-GDE5PBTR.js.map +0 -1
- package/dist/chunk-22EVFMS3.js.map +0 -1
- package/dist/chunk-7BHG3XGJ.js.map +0 -1
- package/dist/chunk-7BMXN7MP.js.map +0 -1
- package/dist/chunk-JGJNRNQW.js.map +0 -1
- package/dist/chunk-VAKWUUVC.js +0 -425
- package/dist/chunk-VAKWUUVC.js.map +0 -1
- package/dist/chunk-ZBQ772DU.js +0 -17
- package/dist/chunk-ZBQ772DU.js.map +0 -1
- package/dist/chunk-ZDRHCKRK.js.map +0 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface SelectableOption {
|
|
3
|
+
value: string;
|
|
4
|
+
label: React.ReactNode;
|
|
5
|
+
/** Second line under the label — the sentence that makes the choice obvious. */
|
|
6
|
+
hint?: React.ReactNode;
|
|
7
|
+
icon?: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
interface SharedProps {
|
|
10
|
+
options: ReadonlyArray<SelectableOption>;
|
|
11
|
+
/** A string in single mode, a list in `multi` mode. */
|
|
12
|
+
value?: string | string[];
|
|
13
|
+
onChange: (value: string | string[]) => void;
|
|
14
|
+
multi?: boolean;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Bind 1–9 to the first nine options and print the digit on each one.
|
|
18
|
+
*
|
|
19
|
+
* Off by default: two shortcut-bound groups on one screen would both answer to
|
|
20
|
+
* "1". The caller decides which group owns the keys.
|
|
21
|
+
*/
|
|
22
|
+
shortcuts?: boolean;
|
|
23
|
+
className?: string;
|
|
24
|
+
'aria-label'?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface OptionCardsProps extends SharedProps {
|
|
27
|
+
/** Cards per row on wide screens. One column reads as a list — use it for long hints. */
|
|
28
|
+
columns?: 1 | 2 | 3;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Card picker — the answer surface for a question with a handful of options that
|
|
32
|
+
* each need a sentence of explanation.
|
|
33
|
+
*
|
|
34
|
+
* Radix has no radio-group in this package and a native radio list cannot carry a
|
|
35
|
+
* hint line, so this is a button grid with `role="radio"`/`"checkbox"` semantics
|
|
36
|
+
* layered back on.
|
|
37
|
+
*/
|
|
38
|
+
export declare function OptionCards({ options, value, onChange, multi, disabled, shortcuts, columns, className, ...rest }: OptionCardsProps): React.JSX.Element;
|
|
39
|
+
export type OptionChipsProps = SharedProps;
|
|
40
|
+
/**
|
|
41
|
+
* Pill picker — same selection model as OptionCards, for lists long enough that
|
|
42
|
+
* cards would push the question off screen (industries, channels, price bands).
|
|
43
|
+
*/
|
|
44
|
+
export declare function OptionChips({ options, value, onChange, multi, disabled, shortcuts, className, ...rest }: OptionChipsProps): React.JSX.Element;
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=option-select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"option-select.d.ts","sourceRoot":"","sources":["../../src/primitives/option-select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,gFAAgF;IAChF,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACvB;AAED,UAAU,WAAW;IACnB,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAA;IACxC,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,IAAI,CAAA;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAqED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,yFAAyF;IACzF,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;CACpB;AAQD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAa,EAAE,QAAQ,EAAE,SAAiB,EAAE,OAAW,EAAE,SAAS,EAAE,GAAG,IAAI,EACtG,EAAE,gBAAgB,qBA8ClB;AAED,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAA;AAE1C;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAa,EAAE,QAAQ,EAAE,SAAiB,EAAE,SAAS,EAAE,GAAG,IAAI,EACzF,EAAE,gBAAgB,qBAoClB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* O gatilho padrão da barra: sem contorno, com o rótulo sublinhado tracejado.
|
|
4
|
+
*
|
|
5
|
+
* Contornados, os três viravam três caixas arredondadas dentro de outra caixa
|
|
6
|
+
* arredondada — a borda do vidro e a dos botões disputavam a mesma leitura, e a
|
|
7
|
+
* barra parecia um grupo de botões e não um controle. O tracejado é o traço
|
|
8
|
+
* clássico de "este valor se troca": diz que clica sem desenhar mais um limite.
|
|
9
|
+
*/
|
|
10
|
+
export declare const ToolbarButton: React.ForwardRefExoticComponent<Omit<import("./button").ButtonProps & React.RefAttributes<HTMLButtonElement> & {
|
|
11
|
+
icon?: React.ElementType;
|
|
12
|
+
caret?: boolean;
|
|
13
|
+
}, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
14
|
+
/**
|
|
15
|
+
* O gatilho de COMANDO da barra — Exportar, Imprimir, Novo.
|
|
16
|
+
*
|
|
17
|
+
* Mesma matéria do ToolbarButton acima (sem contorno, sem fundo, fantasma) e
|
|
18
|
+
* sem o sublinhado tracejado: o tracejado promete "este valor se troca", e
|
|
19
|
+
* imprimir não é um valor. Eram botões contornados no meio de uma barra sem
|
|
20
|
+
* contorno nenhum — duas caixas arredondadas ao lado de três rótulos soltos,
|
|
21
|
+
* que é o desenho que faz a barra parecer duas barras.
|
|
22
|
+
*/
|
|
23
|
+
export declare const ToolbarAction: React.ForwardRefExoticComponent<Omit<import("./button").ButtonProps & React.RefAttributes<HTMLButtonElement> & {
|
|
24
|
+
icon?: React.ElementType;
|
|
25
|
+
caret?: boolean;
|
|
26
|
+
}, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
27
|
+
export interface RangeOption {
|
|
28
|
+
value: string;
|
|
29
|
+
label: string;
|
|
30
|
+
}
|
|
31
|
+
export interface RangeControlProps {
|
|
32
|
+
options: RangeOption[];
|
|
33
|
+
value: string;
|
|
34
|
+
onChange: (value: string) => void;
|
|
35
|
+
/** Rótulo do gatilho quando não é nenhum dos presets (ex.: "Personalizado"). */
|
|
36
|
+
label?: string;
|
|
37
|
+
/** "21 jul – 19 ago" — a janela que os números realmente cobrem. Um nome de
|
|
38
|
+
* preset sozinho deixa a dúvida se "este mês" já inclui hoje. */
|
|
39
|
+
span?: string;
|
|
40
|
+
/** Itens extras no fim do menu (ex.: abrir uma janela personalizada). */
|
|
41
|
+
extra?: React.ReactNode;
|
|
42
|
+
/** Desenhado ao lado do gatilho (ex.: os dois seletores de data). */
|
|
43
|
+
children?: React.ReactNode;
|
|
44
|
+
icon?: React.ElementType;
|
|
45
|
+
className?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* O controle de período — um só, para o dashboard e para as análises.
|
|
49
|
+
*
|
|
50
|
+
* Puramente apresentacional: quem tem o estado (o contexto de analytics, o de
|
|
51
|
+
* dashboard) passa opções e valor. Eram dois desenhos para a mesma escolha, um
|
|
52
|
+
* segmentado de 7d/30d/90d e um menu de presets, e trocar de tela trocava a
|
|
53
|
+
* gramática do controle sem trocar o que ele faz.
|
|
54
|
+
*/
|
|
55
|
+
export declare function RangeControl({ options, value, onChange, label, span, extra, children, icon, className, }: RangeControlProps): React.JSX.Element;
|
|
56
|
+
export interface PageToolbarProps {
|
|
57
|
+
/** O período. */
|
|
58
|
+
range?: React.ReactNode;
|
|
59
|
+
/** Filtros gerais e comparação — o que estreita a pergunta. */
|
|
60
|
+
filters?: React.ReactNode;
|
|
61
|
+
/** Filtros aplicados, como pastilhas removíveis. */
|
|
62
|
+
chips?: React.ReactNode;
|
|
63
|
+
/** Quais componentes aparecem. */
|
|
64
|
+
customize?: React.ReactNode;
|
|
65
|
+
/** Extras da tela (exportar, um relatório novo). */
|
|
66
|
+
actions?: React.ReactNode;
|
|
67
|
+
onRefresh?: () => void;
|
|
68
|
+
refreshLabel?: string;
|
|
69
|
+
/** Solta a barra do topo (dentro de um modal, ou ao imprimir). */
|
|
70
|
+
sticky?: boolean;
|
|
71
|
+
/** Alça de arrastar à esquerda. Desligue onde a barra não flutua sobre nada. */
|
|
72
|
+
movable?: boolean;
|
|
73
|
+
/** Separa a posição desta barra da compartilhada. Ver useToolbarOffset. */
|
|
74
|
+
storageKey?: string;
|
|
75
|
+
/** Rótulo acessível da alça. */
|
|
76
|
+
moveLabel?: string;
|
|
77
|
+
className?: string;
|
|
78
|
+
}
|
|
79
|
+
export declare function PageToolbar({ range, filters, chips, customize, actions, onRefresh, refreshLabel, sticky, movable, storageKey, moveLabel, className, }: PageToolbarProps): React.JSX.Element | null;
|
|
80
|
+
//# sourceMappingURL=page-toolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-toolbar.d.ts","sourceRoot":"","sources":["../../src/primitives/page-toolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAqB9B;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa;WAEuB,KAAK,CAAC,WAAW;YAAU,OAAO;mDAyBjF,CAAA;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa;WAEuB,KAAK,CAAC,WAAW;YAAU,OAAO;mDAmBjF,CAAA;AAEF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;sEACkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,yEAAyE;IACzE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAe,EAAE,SAAS,GACnF,EAAE,iBAAiB,qBAwBnB;AA+ID,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,oDAAoD;IACpD,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,kCAAkC;IAClC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC3B,oDAAoD;IACpD,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAClE,MAAa,EAAE,OAAc,EAAE,UAAqB,EAAE,SAAS,EAAE,SAAS,GAC3E,EAAE,gBAAgB,4BA0ElB"}
|
|
@@ -36,6 +36,8 @@ export interface SearchSelectProps {
|
|
|
36
36
|
allowCreate?: boolean;
|
|
37
37
|
/** Label for create action (default: "Add") */
|
|
38
38
|
createLabel?: string;
|
|
39
|
+
/** Label for the footer's clear action (default: "Clear"). */
|
|
40
|
+
clearLabel?: string;
|
|
39
41
|
/** Callback when create is clicked. Can be async — component shows optimistic state while waiting. */
|
|
40
42
|
onCreate?: (query: string) => void | Promise<void>;
|
|
41
43
|
/** Custom render for each option */
|
|
@@ -49,5 +51,5 @@ export interface SearchSelectProps {
|
|
|
49
51
|
/** Disabled state */
|
|
50
52
|
disabled?: boolean;
|
|
51
53
|
}
|
|
52
|
-
export declare function SearchSelect({ value, displayValue, onChange, onSearch, placeholder, label, required, debounce, minChars, noResultsLabel, searchingLabel, allowCreate, createLabel, onCreate, renderOption, loadOnOpen, className, disabled, }: SearchSelectProps): React.JSX.Element;
|
|
54
|
+
export declare function SearchSelect({ value, displayValue, onChange, onSearch, placeholder, label, required, debounce, minChars, noResultsLabel, searchingLabel, allowCreate, createLabel, clearLabel, onCreate, renderOption, loadOnOpen, className, disabled, }: SearchSelectProps): React.JSX.Element;
|
|
53
55
|
//# sourceMappingURL=search-select.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-select.d.ts","sourceRoot":"","sources":["../../src/primitives/search-select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"search-select.d.ts","sourceRoot":"","sources":["../../src/primitives/search-select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAa9B,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,GAAG,CAAA;CACX;AAED,MAAM,WAAW,iBAAiB;IAChC,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,0CAA0C;IAC1C,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,KAAK,IAAI,CAAA;IACjE,oEAAoE;IACpE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAA;IACjF,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;0EACsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iCAAiC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,sGAAsG;IACtG,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD,oCAAoC;IACpC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,KAAK,CAAC,SAAS,CAAA;IAC9D;;wEAEoE;IACpE,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAMD,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,WAAyB,EACzB,KAAK,EACL,QAAQ,EACR,QAAc,EACd,QAAY,EACZ,cAAc,EACd,cAA+B,EAC/B,WAAW,EACX,WAAmB,EACnB,UAAoB,EACpB,QAAQ,EACR,YAAY,EACZ,UAAiB,EACjB,SAAS,EACT,QAAQ,GACT,EAAE,iBAAiB,qBAySnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../src/primitives/sheet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AA8BzD,QAAA,MAAM,KAAK,uCAAuB,CAAA;AAClC,QAAA,MAAM,YAAY,8GAA0B,CAAA;AAC5C,QAAA,MAAM,UAAU,4GAAwB,CAAA;AACxC,QAAA,MAAM,WAAW,6CAAyB,CAAA;AAM1C,QAAA,MAAM,YAAY,8JAYhB,CAAA;AAOF,QAAA,MAAM,YAAY;IAGd,kDAAkD;YAC1C,MAAM;IACd,qCAAqC;gBACzB,OAAO;IACnB,6EAA6E;cACnE,MAAM,GAAG,KAAK,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../src/primitives/sheet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AA8BzD,QAAA,MAAM,KAAK,uCAAuB,CAAA;AAClC,QAAA,MAAM,YAAY,8GAA0B,CAAA;AAC5C,QAAA,MAAM,UAAU,4GAAwB,CAAA;AACxC,QAAA,MAAM,WAAW,6CAAyB,CAAA;AAM1C,QAAA,MAAM,YAAY,8JAYhB,CAAA;AAOF,QAAA,MAAM,YAAY;IAGd,kDAAkD;YAC1C,MAAM;IACd,qCAAqC;gBACzB,OAAO;IACnB,6EAA6E;cACnE,MAAM,GAAG,KAAK,GAAG,MAAM;wCAyCnC,CAAA;AAOF,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,qBAOjF;kBAPQ,WAAW;;;AAcpB,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,qBAOjF;kBAPQ,WAAW;;;AAcpB,QAAA,MAAM,UAAU,oKASd,CAAA;AAOF,QAAA,MAAM,gBAAgB,8KASpB,CAAA;AAOF,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,qBAO/E;kBAPQ,SAAS;;;AAUlB,OAAO,EACL,KAAK,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,WAAW,EACX,UAAU,EACV,gBAAgB,GACjB,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface StepProgressProps {
|
|
3
|
+
/** How many steps the flow has. */
|
|
4
|
+
total: number;
|
|
5
|
+
/** Zero-based index of the step on screen. */
|
|
6
|
+
current: number;
|
|
7
|
+
/** Jump to a step. Only offered for steps already visited. */
|
|
8
|
+
onSelect?: (index: number) => void;
|
|
9
|
+
className?: string;
|
|
10
|
+
'aria-label'?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Segmented progress rail — one bar per step, filled up to the current one.
|
|
14
|
+
*
|
|
15
|
+
* A single continuous bar tells you how far along you are; segments also tell you
|
|
16
|
+
* how much is LEFT, which is what stops someone abandoning a form they think is
|
|
17
|
+
* endless. Sits at the bottom of the wizard column, above the footer.
|
|
18
|
+
*/
|
|
19
|
+
export declare function StepProgress({ total, current, onSelect, className, ...rest }: StepProgressProps): React.JSX.Element;
|
|
20
|
+
//# sourceMappingURL=step-progress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-progress.d.ts","sourceRoot":"","sources":["../../src/primitives/step-progress.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,MAAM,WAAW,iBAAiB;IAChC,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAA;IACf,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,iBAAiB,qBAiC/F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/primitives/tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAA;AAIrD,QAAA,MAAM,IAAI,gGAAqB,CAAA;AAE/B,QAAA,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/primitives/tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAA;AAIrD,QAAA,MAAM,IAAI,gGAAqB,CAAA;AAE/B,QAAA,MAAM,QAAQ,uJAcZ,CAAA;AAMF,QAAA,MAAM,WAAW,gKAYf,CAAA;AAGF,QAAA,MAAM,WAAW,0JAYf,CAAA;AAGF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { BulkAction } from './bulk-action-bar';
|
|
3
|
+
/**
|
|
4
|
+
* One entry in the bar that appears when rows are ticked. It receives the
|
|
5
|
+
* selected ROWS, not their ids: an action that has to go back to the store to
|
|
6
|
+
* learn what it is acting on is an action that can act on stale data.
|
|
7
|
+
*/
|
|
8
|
+
export interface RowBulkAction<T> {
|
|
9
|
+
id: string;
|
|
10
|
+
label: string;
|
|
11
|
+
icon?: React.ComponentType<{
|
|
12
|
+
className?: string;
|
|
13
|
+
}>;
|
|
14
|
+
onSelect: (rows: T[]) => void | Promise<void>;
|
|
15
|
+
/** Red label. Reserved for what cannot be undone. */
|
|
16
|
+
destructive?: boolean;
|
|
17
|
+
/** Moves the action into the "…" menu instead of the button row. */
|
|
18
|
+
overflow?: boolean;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface UseRowSelectionOptions<T> {
|
|
22
|
+
/** The rows currently on screen — what a selection may reach. */
|
|
23
|
+
rows: T[] | null | undefined;
|
|
24
|
+
actions?: RowBulkAction<T>[];
|
|
25
|
+
/** Row identity. Defaults to `row.id`. */
|
|
26
|
+
getRowId?: (row: T) => string;
|
|
27
|
+
/** Turns checkboxes off even with actions declared (e.g. a card grid, which
|
|
28
|
+
* has no row to hang one off). */
|
|
29
|
+
enabled?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface RowSelection<T> {
|
|
32
|
+
selectedIds: string[];
|
|
33
|
+
selectedRows: T[];
|
|
34
|
+
setSelectedIds: (ids: string[]) => void;
|
|
35
|
+
clear: () => void;
|
|
36
|
+
/** Ticks every row on screen. */
|
|
37
|
+
selectAll: () => void;
|
|
38
|
+
/** Actions bound to the current selection, ready for BulkActionBar. */
|
|
39
|
+
barActions: BulkAction[];
|
|
40
|
+
/** Whether to draw the checkbox column at all. */
|
|
41
|
+
selectable: boolean;
|
|
42
|
+
/** Selection is on AND something is ticked — the bar is showing. */
|
|
43
|
+
hasSelection: boolean;
|
|
44
|
+
/** Resolved row identity, to hand back to DataTable. */
|
|
45
|
+
getRowId: (row: T) => string;
|
|
46
|
+
/** How many rows "select all" would reach. */
|
|
47
|
+
total: number;
|
|
48
|
+
}
|
|
49
|
+
export declare function useRowSelection<T>({ rows, actions, getRowId, enabled, }: UseRowSelectionOptions<T>): RowSelection<T>;
|
|
50
|
+
//# sourceMappingURL=use-row-selection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-row-selection.d.ts","sourceRoot":"","sources":["../../src/primitives/use-row-selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AASnD;;;;GAIG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClD,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,qDAAqD;IACrD,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,iEAAiE;IACjE,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,CAAA;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAA;IAC5B,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAA;IAC7B;uCACmC;IACnC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,YAAY,EAAE,CAAC,EAAE,CAAA;IACjB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACvC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,iCAAiC;IACjC,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,uEAAuE;IACvE,UAAU,EAAE,UAAU,EAAE,CAAA;IACxB,kDAAkD;IAClD,UAAU,EAAE,OAAO,CAAA;IACnB,oEAAoE;IACpE,YAAY,EAAE,OAAO,CAAA;IACrB,wDAAwD;IACxD,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAA;IAC5B,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,EACjC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,OAAc,GACf,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAuD7C"}
|
package/dist/stores/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { useLayoutStore } from './layout.store';
|
|
2
2
|
export { useThemeStore, lightTheme, darkTheme, type ThemeTokens, type SemanticColors, type UIPerceptionTokens, type CreateThemeOptions, } from './theme.store';
|
|
3
|
-
export { usePageHeader, usePageHeaderSlot, usePageHeaderStore, usePageHeaderHost, useHasPageHeaderHost, useHasPageHeaderOutlet, PageHeaderOutlet, } from './page-header.store';
|
|
3
|
+
export { usePageHeader, usePageHeaderSlot, usePageHeaderStore, usePageHeaderHost, useHasPageHeaderHost, useHasPageHeaderBack, useHasPageHeaderOutlet, PageHeaderOutlet, useRegisterPageActions, useHasPageActions, } from './page-header.store';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EACL,aAAa,EACb,UAAU,EACV,SAAS,EACT,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,aAAa,EAAE,iBAAiB,EAAE,kBAAkB,EACpD,iBAAiB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EACL,aAAa,EACb,UAAU,EACV,SAAS,EACT,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,aAAa,EAAE,iBAAiB,EAAE,kBAAkB,EACpD,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,gBAAgB,EACvG,sBAAsB,EAAE,iBAAiB,GAC1C,MAAM,qBAAqB,CAAA"}
|
|
@@ -5,6 +5,12 @@ interface PageHeaderState {
|
|
|
5
5
|
/** Identity of whoever owns the slot, so a late unmount can't clear a newer
|
|
6
6
|
* owner's content — the exact race you get navigating form → form. */
|
|
7
7
|
owner: string | null;
|
|
8
|
+
/** The claimed header carries a back action, i.e. what the bar is showing is
|
|
9
|
+
* a SUBPAGE ("← Contas a Pagar / Nova"), not the module's own screen. The
|
|
10
|
+
* module's tab band reads this to step aside: a form reached from a tab is
|
|
11
|
+
* not one of the tabs, and leaving the strip up marks a place the user is no
|
|
12
|
+
* longer at, one line under a back link that says so. */
|
|
13
|
+
hasBack: boolean;
|
|
8
14
|
/** How many shells are currently rendering the slot. A page needs to know:
|
|
9
15
|
* with no host (minimal layout, an embedded form, a modal) its header would
|
|
10
16
|
* be claimed into the void, and the page must draw it inline instead. */
|
|
@@ -19,14 +25,27 @@ interface PageHeaderState {
|
|
|
19
25
|
* empurrando a trilha do módulo para baixo do topo.
|
|
20
26
|
*/
|
|
21
27
|
outlets: number;
|
|
22
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Quantos blocos de ações de página estão montados agora. A barra precisa
|
|
30
|
+
* saber ANTES de decidir se existe: ela some no celular de alguns produtos, e
|
|
31
|
+
* um "Novo" entregue a uma barra escondida simplesmente não aparecia.
|
|
32
|
+
*/
|
|
33
|
+
actions: number;
|
|
34
|
+
claim: (owner: string, node: React.ReactNode, hasBack?: boolean) => void;
|
|
23
35
|
release: (owner: string) => void;
|
|
24
36
|
addHost: () => void;
|
|
25
37
|
removeHost: () => void;
|
|
26
38
|
addOutlet: () => void;
|
|
27
39
|
removeOutlet: () => void;
|
|
40
|
+
addActions: () => void;
|
|
41
|
+
removeActions: () => void;
|
|
28
42
|
}
|
|
29
43
|
declare const usePageHeaderStore: import("zustand").UseBoundStore<import("zustand").StoreApi<PageHeaderState>>;
|
|
44
|
+
/** Declara que esta página tem ações no topo. Chamado por PageHeaderActions. */
|
|
45
|
+
export declare function useRegisterPageActions(): void;
|
|
46
|
+
/** Se alguma página tem ações no topo agora. A barra usa para não sumir com
|
|
47
|
+
* elas no celular, e para não existir vazia. */
|
|
48
|
+
export declare function useHasPageActions(): boolean;
|
|
30
49
|
/** Read the current override. The shell calls this; pages should not. */
|
|
31
50
|
export declare function usePageHeaderSlot(): React.ReactNode | null;
|
|
32
51
|
/**
|
|
@@ -64,6 +83,11 @@ export declare function PageHeaderOutlet({ className }: {
|
|
|
64
83
|
* The node is re-claimed on every change so a breadcrumb whose label depends on
|
|
65
84
|
* loaded data (a record's name) updates once it arrives.
|
|
66
85
|
*/
|
|
67
|
-
export declare function usePageHeader(node: React.ReactNode | null
|
|
86
|
+
export declare function usePageHeader(node: React.ReactNode | null, options?: {
|
|
87
|
+
back?: boolean;
|
|
88
|
+
}): void;
|
|
89
|
+
/** True while the bar is showing a subpage's "← parent / title". See
|
|
90
|
+
* `PageHeaderState.hasBack`. */
|
|
91
|
+
export declare function useHasPageHeaderBack(): boolean;
|
|
68
92
|
export { usePageHeaderStore };
|
|
69
93
|
//# sourceMappingURL=page-header.store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-header.store.d.ts","sourceRoot":"","sources":["../../src/stores/page-header.store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,UAAU,eAAe;IACvB,yEAAyE;IACzE,IAAI,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;IAC5B;2EACuE;IACvE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB;;8EAE0E;IAC1E,KAAK,EAAE,MAAM,CAAA;IACb;;;;;;;;OAQG;IACH,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"page-header.store.d.ts","sourceRoot":"","sources":["../../src/stores/page-header.store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,UAAU,eAAe;IACvB,yEAAyE;IACzE,IAAI,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;IAC5B;2EACuE;IACvE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB;;;;8DAI0D;IAC1D,OAAO,EAAE,OAAO,CAAA;IAChB;;8EAE0E;IAC1E,KAAK,EAAE,MAAM,CAAA;IACb;;;;;;;;OAQG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IACxE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,aAAa,EAAE,MAAM,IAAI,CAAA;CAC1B;AAED,QAAA,MAAM,kBAAkB,8EAiBrB,CAAA;AAEH,gFAAgF;AAChF,wBAAgB,sBAAsB,IAAI,IAAI,CAO7C;AAED;iDACiD;AACjD,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,IAAI,KAAK,CAAC,SAAS,GAAG,IAAI,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAOxC;AAED,uEAAuE;AACvE,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;+BAC+B;AAC/B,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAYjG;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAc9F;AAED;iCACiC;AACjC,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAA"}
|
package/dist/styles.css
CHANGED
|
@@ -286,40 +286,77 @@
|
|
|
286
286
|
}
|
|
287
287
|
|
|
288
288
|
/* ---------------------------------------------------------------------------
|
|
289
|
-
* The
|
|
289
|
+
* The floating material — of everything that hovers OVER a page.
|
|
290
290
|
*
|
|
291
|
-
*
|
|
292
|
-
*
|
|
293
|
-
*
|
|
294
|
-
* the
|
|
291
|
+
* Two things do: the assistant (the FAB and the docked composer are the same
|
|
292
|
+
* object in two shapes) and the page toolbar (period, filters, which widgets).
|
|
293
|
+
* They were built apart — one glass, one an opaque card with a token blur that
|
|
294
|
+
* the `.bg-card.border` rule below quietly painted solid anyway — so the same
|
|
295
|
+
* "I am on top of the grid" claim was made in two materials on the same screen.
|
|
296
|
+
* One rule, two tints: the assistant takes the brand, the toolbar takes paper.
|
|
295
297
|
*
|
|
296
298
|
* It lives in CSS, not in utility classes, for two reasons: every app gets it
|
|
297
299
|
* without adding Tailwind content globs, and a glass theme extends it through
|
|
298
300
|
* --glass-inner-highlight instead of forking it.
|
|
299
301
|
* ------------------------------------------------------------------------ */
|
|
300
|
-
.fayz-assistant-surface
|
|
302
|
+
.fayz-assistant-surface,
|
|
303
|
+
.fayz-floating-surface {
|
|
301
304
|
position: relative;
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
passes (bg-primary) stays as the opaque fallback for browsers, or builds,
|
|
307
|
-
that never see this rule. */
|
|
308
|
-
background-color: hsl(var(--primary) / 0.84);
|
|
309
|
-
backdrop-filter: blur(28px) saturate(1.8);
|
|
310
|
-
-webkit-backdrop-filter: blur(28px) saturate(1.8);
|
|
305
|
+
/* The blur is what makes the fill work: it turns whatever is underneath into
|
|
306
|
+
a wash, so the fill can be thin without the content reading through it. */
|
|
307
|
+
backdrop-filter: blur(40px) saturate(1.8);
|
|
308
|
+
-webkit-backdrop-filter: blur(40px) saturate(1.8);
|
|
311
309
|
background-clip: padding-box;
|
|
310
|
+
transition: box-shadow 200ms ease-out, transform 200ms cubic-bezier(0.22, 1, 0.36, 1);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/* Double class on purpose. The caller also passes `bg-primary` as the opaque
|
|
314
|
+
fallback, and Tailwind's utility layer is emitted AFTER this file — at equal
|
|
315
|
+
specificity the utility wins, which is how the bar ended up solid with a blur
|
|
316
|
+
behind an opaque fill doing nothing. */
|
|
317
|
+
.fayz-assistant-surface.fayz-assistant-surface {
|
|
318
|
+
border: 1px solid rgb(255 255 255 / 0.14);
|
|
319
|
+
/* Tinted glass: the page reads through the fill. This was 0.84 with a 28px
|
|
320
|
+
blur — thick enough that it read as a solid bar. The blur above is what
|
|
321
|
+
buys the extra transparency back: a heavier wash behind the label keeps
|
|
322
|
+
white legible on a fill this thin. The utility class the caller passes
|
|
323
|
+
(bg-primary) stays as the opaque fallback for browsers, or builds, that
|
|
324
|
+
never see this rule. */
|
|
325
|
+
background-color: hsl(var(--primary) / 0.7);
|
|
312
326
|
box-shadow:
|
|
313
327
|
0 10px 36px -10px rgb(0 0 0 / 0.45),
|
|
314
328
|
0 2px 6px -3px rgb(0 0 0 / 0.3),
|
|
315
329
|
inset 0 1px 0 rgb(255 255 255 / 0.32),
|
|
316
330
|
var(--glass-inner-highlight);
|
|
317
|
-
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/* Paper, not brand: this one floats over the content grid and has to let it
|
|
334
|
+
through without competing with it. Its border is a hairline of the theme's
|
|
335
|
+
own, since a white edge disappears on a light page. */
|
|
336
|
+
.fayz-floating-surface.fayz-floating-surface {
|
|
337
|
+
border: 1px solid hsl(var(--border) / 0.55);
|
|
338
|
+
background-color: hsl(var(--card) / 0.6);
|
|
339
|
+
box-shadow:
|
|
340
|
+
0 10px 30px -14px rgb(0 0 0 / 0.3),
|
|
341
|
+
0 2px 6px -3px rgb(0 0 0 / 0.14),
|
|
342
|
+
inset 0 1px 0 rgb(255 255 255 / 0.5),
|
|
343
|
+
var(--glass-inner-highlight);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
.dark .fayz-floating-surface.fayz-floating-surface {
|
|
347
|
+
/* On ink, the lit edge is the border — a theme hairline vanishes into it. */
|
|
348
|
+
border-color: rgb(255 255 255 / 0.1);
|
|
349
|
+
box-shadow:
|
|
350
|
+
0 10px 30px -14px rgb(0 0 0 / 0.6),
|
|
351
|
+
0 2px 6px -3px rgb(0 0 0 / 0.4),
|
|
352
|
+
inset 0 1px 0 rgb(255 255 255 / 0.12),
|
|
353
|
+
var(--glass-inner-highlight);
|
|
318
354
|
}
|
|
319
355
|
|
|
320
356
|
/* The sheen. Negative z-index paints it over the fill but UNDER the icons and
|
|
321
357
|
text, so the highlight lights the surface instead of washing out its label. */
|
|
322
|
-
.fayz-assistant-surface::after
|
|
358
|
+
.fayz-assistant-surface::after,
|
|
359
|
+
.fayz-floating-surface::after {
|
|
323
360
|
content: '';
|
|
324
361
|
position: absolute;
|
|
325
362
|
inset: 0;
|
|
@@ -614,6 +651,26 @@ select.bg-card,
|
|
|
614
651
|
to { opacity: 1; transform: translateX(0); }
|
|
615
652
|
}
|
|
616
653
|
|
|
654
|
+
/* The wizard replays these on every step, so a horizontal slide lands far more
|
|
655
|
+
often here than in normal navigation. Keep the crossfade, drop the travel. */
|
|
656
|
+
@media (prefers-reduced-motion: reduce) {
|
|
657
|
+
.saas-nav-forward,
|
|
658
|
+
.saas-nav-back {
|
|
659
|
+
animation: page-enter 150ms linear both;
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
/* Opacity ONLY — deliberately no transform. Used on full-screen surfaces that
|
|
664
|
+
position themselves with `fixed`: a transform on the element (or any ancestor)
|
|
665
|
+
makes it the containing block, and `fixed inset-0` stops meaning the viewport. */
|
|
666
|
+
.saas-fade-in {
|
|
667
|
+
animation: saas-fade-in 260ms var(--saas-transition-easing) both;
|
|
668
|
+
}
|
|
669
|
+
@keyframes saas-fade-in {
|
|
670
|
+
from { opacity: 0; }
|
|
671
|
+
to { opacity: 1; }
|
|
672
|
+
}
|
|
673
|
+
|
|
617
674
|
/* Sidebar rail push — when the whole left menu swaps context (e.g. app nav →
|
|
618
675
|
settings nav) the incoming rail pulls in from one side while the outgoing
|
|
619
676
|
one slides off the other, iOS-push style. The outgoing pane is absolutely
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { WizardMedia, WizardStepDef, WizardValues } from './types';
|
|
3
|
+
export interface WizardLabels {
|
|
4
|
+
back: string;
|
|
5
|
+
next: string;
|
|
6
|
+
finish: string;
|
|
7
|
+
exit: string;
|
|
8
|
+
stepOf: string;
|
|
9
|
+
exitTitle: string;
|
|
10
|
+
exitDescription: string;
|
|
11
|
+
exitConfirm: string;
|
|
12
|
+
exitCancel: string;
|
|
13
|
+
/** Badge on a field a `suggest` answered rather than the user. */
|
|
14
|
+
suggested: string;
|
|
15
|
+
}
|
|
16
|
+
export interface WizardProps {
|
|
17
|
+
steps: ReadonlyArray<WizardStepDef>;
|
|
18
|
+
initialValues?: WizardValues;
|
|
19
|
+
draftKey?: string;
|
|
20
|
+
onSubmit: (values: WizardValues) => Promise<void> | void;
|
|
21
|
+
/** Omit to hide the exit affordance — a first-run flow with nowhere to go back to. */
|
|
22
|
+
onExit?: () => void;
|
|
23
|
+
/** Brand mark above the question. */
|
|
24
|
+
logo?: React.ReactNode;
|
|
25
|
+
/** Panel shown when the current step declares no media of its own. */
|
|
26
|
+
fallbackMedia?: WizardMedia;
|
|
27
|
+
labels?: Partial<WizardLabels>;
|
|
28
|
+
className?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Fullscreen, data-driven wizard: form column on the left, media panel on the right.
|
|
32
|
+
*
|
|
33
|
+
* Steps and fields are plain data (`WizardStepDef[]`), so a flow changes by editing
|
|
34
|
+
* a list rather than a component — which is the whole point for questionnaires that
|
|
35
|
+
* get reworded every time we learn something about a vertical.
|
|
36
|
+
*/
|
|
37
|
+
export declare function Wizard({ steps, initialValues, draftKey, onSubmit, onExit, logo, fallbackMedia, labels, className, }: WizardProps): React.JSX.Element | null;
|
|
38
|
+
//# sourceMappingURL=Wizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Wizard.d.ts","sourceRoot":"","sources":["../../src/wizard/Wizard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAS9B,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEvE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAA;CAClB;AAgBD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;IACnC,aAAa,CAAC,EAAE,YAAY,CAAA;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACxD,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,qCAAqC;IACrC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,sEAAsE;IACtE,aAAa,CAAC,EAAE,WAAW,CAAA;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAyBD;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,EACrB,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,GACzF,EAAE,WAAW,4BAgMb"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { WizardFieldDef, WizardValues } from './types';
|
|
3
|
+
export interface WizardFieldProps {
|
|
4
|
+
field: WizardFieldDef;
|
|
5
|
+
values: WizardValues;
|
|
6
|
+
onChange: (id: string, value: unknown) => void;
|
|
7
|
+
/** Async/validation message resolved by the wizard for this field. */
|
|
8
|
+
error?: string | null;
|
|
9
|
+
autoFocus?: boolean;
|
|
10
|
+
/** This field owns the 1–9 keys on this step. Only one field may. */
|
|
11
|
+
shortcuts?: boolean;
|
|
12
|
+
/** This field's `suggest` is in flight. */
|
|
13
|
+
busy?: boolean;
|
|
14
|
+
/** The value on screen came from a suggestion, not from the user. */
|
|
15
|
+
suggested?: boolean;
|
|
16
|
+
/** Discard the suggestion. Only rendered when `suggested`. */
|
|
17
|
+
onClearSuggestion?: () => void;
|
|
18
|
+
/** Text on the badge that marks a suggested answer. */
|
|
19
|
+
suggestedLabel?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function WizardField({ field, values, onChange, error, autoFocus, shortcuts, busy, suggested, onClearSuggestion, suggestedLabel, }: WizardFieldProps): React.JSX.Element;
|
|
22
|
+
//# sourceMappingURL=WizardField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WizardField.d.ts","sourceRoot":"","sources":["../../src/wizard/WizardField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,cAAc,CAAA;IACrB,MAAM,EAAE,YAAY,CAAA;IACpB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAC9C,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC9B,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAaD,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,MAAM,EACN,QAAQ,EACR,KAAK,EACL,SAAS,EACT,SAAS,EACT,IAAI,EACJ,SAAS,EACT,iBAAiB,EACjB,cAAc,GACf,EAAE,gBAAgB,qBAuHlB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { Wizard, type WizardProps, type WizardLabels } from './Wizard';
|
|
2
|
+
export { WizardField, type WizardFieldProps } from './WizardField';
|
|
3
|
+
export { useWizard, type UseWizardOptions, type UseWizardResult } from './useWizard';
|
|
4
|
+
export { canAdvance, fieldErrors, isEmpty, parseDraft, visibleFields, visibleSteps, type WizardDraft, } from './logic';
|
|
5
|
+
export type { WizardFieldDef, WizardFieldKind, WizardMedia, WizardRenderContext, WizardStepDef, WizardValues, } from './types';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AACpF,OAAO,EACL,UAAU,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,aAAa,EACb,YAAY,EACZ,KAAK,WAAW,GACjB,MAAM,SAAS,CAAA;AAChB,YAAY,EACV,cAAc,EACd,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,YAAY,GACb,MAAM,SAAS,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { Wizard, WizardField, canAdvance, fieldErrors, isEmpty, parseDraft, useWizard, visibleFields, visibleSteps } from '../chunk-AASANYXN.js';
|
|
2
|
+
import '../chunk-3OVZ5JJQ.js';
|
|
3
|
+
import '../chunk-OKZ6WQB3.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { WizardFieldDef, WizardStepDef, WizardValues } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* The wizard's decisions, without React.
|
|
4
|
+
*
|
|
5
|
+
* Which steps show, which fields show, what blocks the button — all of it is a
|
|
6
|
+
* function of the answers, so it lives here where it can be tested directly
|
|
7
|
+
* instead of through a rendered component.
|
|
8
|
+
*/
|
|
9
|
+
export declare function isEmpty(value: unknown): boolean;
|
|
10
|
+
export declare function visibleSteps(steps: ReadonlyArray<WizardStepDef>, values: WizardValues): ReadonlyArray<WizardStepDef>;
|
|
11
|
+
export declare function visibleFields(step: WizardStepDef | undefined, values: WizardValues): ReadonlyArray<WizardFieldDef>;
|
|
12
|
+
/**
|
|
13
|
+
* Per-field messages for the current step.
|
|
14
|
+
*
|
|
15
|
+
* An untouched required field gets no message: a red line before someone has had
|
|
16
|
+
* a chance to type reads as a failure they caused. The disabled button says the
|
|
17
|
+
* same thing without the accusation — see `canAdvance`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function fieldErrors(fields: ReadonlyArray<WizardFieldDef>, values: WizardValues, asyncErrors?: Record<string, string | null>): Record<string, string | null>;
|
|
20
|
+
export declare function canAdvance(step: WizardStepDef | undefined, fields: ReadonlyArray<WizardFieldDef>, values: WizardValues, errors: Record<string, string | null>): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Which of a `suggest`'s answers may actually land.
|
|
23
|
+
*
|
|
24
|
+
* Three refusals, each for its own reason: a field nobody asks about would sit
|
|
25
|
+
* in the answers invisibly and still get submitted; a field the user has
|
|
26
|
+
* answered is theirs, and a slow reply must not overwrite what they typed while
|
|
27
|
+
* waiting for it; an empty value would mark a field as "suggested" while
|
|
28
|
+
* changing nothing on screen.
|
|
29
|
+
*/
|
|
30
|
+
export declare function acceptableSuggestion(patch: WizardValues, knownFieldIds: ReadonlySet<string>, answered: ReadonlySet<string>): WizardValues;
|
|
31
|
+
/** Every field id the flow asks about, across all steps — visible or not. */
|
|
32
|
+
export declare function allFieldIds(steps: ReadonlyArray<WizardStepDef>): Set<string>;
|
|
33
|
+
export interface WizardDraft {
|
|
34
|
+
index: number;
|
|
35
|
+
values: WizardValues;
|
|
36
|
+
}
|
|
37
|
+
/** Tolerant on purpose: a corrupt draft is a fresh start, never a crash. */
|
|
38
|
+
export declare function parseDraft(raw: string | null): WizardDraft | null;
|
|
39
|
+
//# sourceMappingURL=logic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logic.d.ts","sourceRoot":"","sources":["../../src/wizard/logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE1E;;;;;;GAMG;AAEH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK/C;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,EACnC,MAAM,EAAE,YAAY,GACnB,aAAa,CAAC,aAAa,CAAC,CAE9B;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,aAAa,GAAG,SAAS,EAC/B,MAAM,EAAE,YAAY,GACnB,aAAa,CAAC,cAAc,CAAC,CAE/B;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,EACrC,MAAM,EAAE,YAAY,EACpB,WAAW,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAM,GAC9C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAO/B;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,aAAa,GAAG,SAAS,EAC/B,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,EACrC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GACpC,OAAO,CAKT;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,EAClC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,GAC5B,YAAY,CASd;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAE5E;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,YAAY,CAAA;CACrB;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CASjE"}
|