@ostack.tech/ui-kform 0.8.2 → 0.9.1
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/chunks/{en-DdEhXMHn.js → en-DwjQmgp3.js} +11 -13
- package/dist/chunks/en-DwjQmgp3.js.map +1 -0
- package/dist/locales/en-GB.js +1 -1
- package/dist/locales/en-US.js +1 -1
- package/dist/locales/fr-FR.js +10 -12
- package/dist/locales/fr-FR.js.map +1 -1
- package/dist/locales/pt-PT.js +10 -12
- package/dist/locales/pt-PT.js.map +1 -1
- package/dist/ostack-ui-kform.css +2 -5
- package/dist/ostack-ui-kform.css.map +1 -1
- package/dist/ostack-ui-kform.js +453 -117
- package/dist/ostack-ui-kform.js.map +1 -1
- package/dist/types/components/Annexes/AnnexesContext.d.ts +1 -1
- package/dist/types/components/Annexes/AnnexesManager.d.ts +4 -0
- package/dist/types/components/Annexes/AnnexesMenu.d.ts +2 -2
- package/dist/types/components/FormPages/FormPage.d.ts +7 -2
- package/dist/types/components/FormPages/FormPagesContext.d.ts +1 -0
- package/dist/types/components/FormPages/FormPagesSidebar.d.ts +2 -2
- package/dist/types/components/IssueMessage/IssueMessage.d.ts +3 -1
- package/dist/types/components/IssueMessages/IssueMessages.d.ts +4 -0
- package/dist/types/components/IssuesPanel/IssuesPanel.d.ts +20 -0
- package/dist/types/components/IssuesPanel/IssuesPanelControls.d.ts +2 -2
- package/dist/types/components/LoadAction/LoadAction.d.ts +4 -1
- package/dist/types/components/PrintAction/PrintAction.d.ts +4 -1
- package/dist/types/components/SaveAction/SaveAction.d.ts +8 -2
- package/dist/types/components/SubmitAction/SubmitAction.d.ts +4 -1
- package/dist/types/components/ValidateAction/ValidateAction.d.ts +4 -1
- package/dist/types/providers/LocalizationProvider/LocalizationObject.d.ts +4 -4
- package/dist/types/utils/useControlIssues.d.ts +4 -1
- package/package.json +2 -2
- package/scss/components/FormPages/_FormPages.scss +1 -2
- package/scss/components/IssueMessages/_IssueMessages.scss +0 -4
- package/dist/chunks/en-DdEhXMHn.js.map +0 -1
|
@@ -51,7 +51,7 @@ export interface AnnexesActions {
|
|
|
51
51
|
updateActiveAnnex: (oldActiveAnnexIndex: number) => void;
|
|
52
52
|
registerAnnexState: (path: AbsolutePath, state: AnnexState) => void;
|
|
53
53
|
registerRepetitiveAnnexState: (path: AbsolutePath, state: RepetitiveAnnexState) => void;
|
|
54
|
-
addAnnex: (path: AbsolutePath, toAdd: unknown) => Promise<
|
|
54
|
+
addAnnex: (path: AbsolutePath, toAdd: unknown) => Promise<AbsolutePath>;
|
|
55
55
|
removeAnnex: (path: AbsolutePath, isRepetitive: boolean) => Promise<void>;
|
|
56
56
|
}
|
|
57
57
|
/** Annexes' store. */
|
|
@@ -4,8 +4,12 @@ import { ComponentPropsWithoutRef, ComponentPropsWithRef, ReactNode } from 'reac
|
|
|
4
4
|
export interface AnnexesManagerProps extends ComponentPropsWithoutRef<"nav"> {
|
|
5
5
|
/** Text of the menu button. */
|
|
6
6
|
menuButtonText?: ReactNode;
|
|
7
|
+
/** Accessible label of the menu button. */
|
|
8
|
+
menuButtonLabel?: string;
|
|
7
9
|
/** Text of the "add annex" item. */
|
|
8
10
|
addAnnexText?: ReactNode;
|
|
11
|
+
/** Message read to assistive technologies when an annex is successfully added. */
|
|
12
|
+
addAnnexSuccessMessage?: (annexName: ReactNode) => ReactNode;
|
|
9
13
|
/** Label of the remove annex button, announced by assistive technologies. */
|
|
10
14
|
removeAnnexButtonLabel?: string;
|
|
11
15
|
/**
|
|
@@ -2,9 +2,9 @@ import { Button, DropdownMenu, DropdownMenuContent } from '@ostack.tech/ui';
|
|
|
2
2
|
import { ComponentPropsWithoutRef, ComponentPropsWithRef } from 'react';
|
|
3
3
|
import { AnnexesManager } from './AnnexesManager.tsx';
|
|
4
4
|
/** Properties of the annexes' menu. */
|
|
5
|
-
export interface AnnexesMenuProps extends Pick<ComponentPropsWithoutRef<typeof AnnexesManager>, "menuButtonText" | "addAnnexText" | "removeAnnexButtonLabel" | "removeAnnexKeyboardHint" | "removeAnnexConfirmDialogTitle" | "removeAnnexConfirmDialogMessage" | "removeAnnexConfirmDialogOkText" | "removeAnnexConfirmDialogCancelText">, ComponentPropsWithoutRef<typeof DropdownMenu> {
|
|
5
|
+
export interface AnnexesMenuProps extends Pick<ComponentPropsWithoutRef<typeof AnnexesManager>, "menuButtonText" | "menuButtonLabel" | "addAnnexText" | "removeAnnexButtonLabel" | "removeAnnexKeyboardHint" | "removeAnnexConfirmDialogTitle" | "removeAnnexConfirmDialogMessage" | "removeAnnexConfirmDialogOkText" | "removeAnnexConfirmDialogCancelText">, ComponentPropsWithoutRef<typeof DropdownMenu> {
|
|
6
6
|
menuTriggerProps?: Omit<ComponentPropsWithRef<typeof Button<"button">>, "icon">;
|
|
7
7
|
menuContentProps?: ComponentPropsWithRef<typeof DropdownMenuContent>;
|
|
8
8
|
}
|
|
9
9
|
/** Component that allows to navigate between, add, and remove annexes. */
|
|
10
|
-
export declare function AnnexesMenu({ menuButtonText, addAnnexText, removeAnnexButtonLabel, removeAnnexKeyboardHint, removeAnnexConfirmDialogTitle, removeAnnexConfirmDialogMessage, removeAnnexConfirmDialogOkText, removeAnnexConfirmDialogCancelText, defaultOpen, open: controlledOpen, onOpenChange, menuTriggerProps, menuContentProps, ...otherProps }: AnnexesMenuProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare function AnnexesMenu({ menuButtonText, menuButtonLabel, addAnnexText, removeAnnexButtonLabel, removeAnnexKeyboardHint, removeAnnexConfirmDialogTitle, removeAnnexConfirmDialogMessage, removeAnnexConfirmDialogOkText, removeAnnexConfirmDialogCancelText, defaultOpen, open: controlledOpen, onOpenChange, menuTriggerProps, menuContentProps, ...otherProps }: AnnexesMenuProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -4,7 +4,7 @@ import { IssueMessages, IssueMessagesByCode } from '../IssueMessages';
|
|
|
4
4
|
import { IssuesPopover } from '../IssuesPopover';
|
|
5
5
|
import { FormPageObject } from './FormPages.tsx';
|
|
6
6
|
/** Properties of the form page component. */
|
|
7
|
-
export interface FormPageProps extends FormPageObject, Omit<ComponentPropsWithoutRef<"
|
|
7
|
+
export interface FormPageProps extends FormPageObject, Omit<ComponentPropsWithoutRef<"section">, "title" | "children"> {
|
|
8
8
|
/** Sets the form page as disabled. */
|
|
9
9
|
disabled?: boolean;
|
|
10
10
|
/** Sets the form page as read-only. */
|
|
@@ -50,6 +50,11 @@ export interface FormPageProps extends FormPageObject, Omit<ComponentPropsWithou
|
|
|
50
50
|
headerProps?: ComponentPropsWithRef<"div">;
|
|
51
51
|
/** Label of the helper button announced to assistive technologies. */
|
|
52
52
|
helperButtonLabel?: string;
|
|
53
|
+
/**
|
|
54
|
+
* Visually hidden prefix added to the form page code announced to assistive
|
|
55
|
+
* technologies.
|
|
56
|
+
*/
|
|
57
|
+
visuallyHiddenCodePrefix?: ReactNode;
|
|
53
58
|
/** Properties to pass to the code element. */
|
|
54
59
|
codeProps?: ComponentPropsWithRef<"div">;
|
|
55
60
|
/** Properties to pass to the title element. */
|
|
@@ -78,4 +83,4 @@ export interface FormPageProps extends FormPageObject, Omit<ComponentPropsWithou
|
|
|
78
83
|
children?: ReactNode;
|
|
79
84
|
}
|
|
80
85
|
/** Form page component. */
|
|
81
|
-
export declare const FormPage: import('react').ForwardRefExoticComponent<FormPageProps & import('react').RefAttributes<
|
|
86
|
+
export declare const FormPage: import('react').ForwardRefExoticComponent<FormPageProps & import('react').RefAttributes<HTMLElement>>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ComponentPropsWithoutRef } from 'react';
|
|
2
2
|
/** Properties of the form pages sidebar component. */
|
|
3
|
-
export interface FormPagesSidebarProps extends ComponentPropsWithoutRef<"
|
|
3
|
+
export interface FormPagesSidebarProps extends ComponentPropsWithoutRef<"div"> {
|
|
4
4
|
}
|
|
5
5
|
/** Sidebar component allowing the navigation between form pages. */
|
|
6
|
-
export declare const FormPagesSidebar: import('react').ForwardRefExoticComponent<FormPagesSidebarProps & import('react').RefAttributes<
|
|
6
|
+
export declare const FormPagesSidebar: import('react').ForwardRefExoticComponent<FormPagesSidebarProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
@@ -3,6 +3,8 @@ import { ComponentPropsWithRef, ReactNode } from 'react';
|
|
|
3
3
|
/** Properties of the issue message component. */
|
|
4
4
|
export interface IssueMessageProps {
|
|
5
5
|
displayIssueCode?: boolean;
|
|
6
|
+
visuallyHiddenErrorCodePrefix?: ReactNode;
|
|
7
|
+
visuallyHiddenWarningCodePrefix?: ReactNode;
|
|
6
8
|
unknownErrorMessage?: ReactNode;
|
|
7
9
|
unknownWarningMessage?: ReactNode;
|
|
8
10
|
path: AbsolutePath;
|
|
@@ -11,4 +13,4 @@ export interface IssueMessageProps {
|
|
|
11
13
|
issueCodeProps?: ComponentPropsWithRef<"span">;
|
|
12
14
|
}
|
|
13
15
|
/** Single issue message within the issue messages or issues panel components. */
|
|
14
|
-
export declare function IssueMessage({ path, issue, schema, displayIssueCode, unknownErrorMessage, unknownWarningMessage, issueCodeProps, }: IssueMessageProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export declare function IssueMessage({ path, issue, schema, displayIssueCode, visuallyHiddenErrorCodePrefix, visuallyHiddenWarningCodePrefix, unknownErrorMessage, unknownWarningMessage, issueCodeProps, }: IssueMessageProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -23,6 +23,10 @@ export interface IssueMessagesProps extends ComponentPropsWithoutRef<typeof Feed
|
|
|
23
23
|
* of the `FormApp`.
|
|
24
24
|
*/
|
|
25
25
|
displayIssueCodes?: boolean;
|
|
26
|
+
/** Accessible prefix for error codes when `displayIssueCodes` is set. */
|
|
27
|
+
visuallyHiddenErrorCodePrefix?: ReactNode;
|
|
28
|
+
/** Accessible prefix for warning codes when `displayIssueCodes` is set. */
|
|
29
|
+
visuallyHiddenWarningCodePrefix?: ReactNode;
|
|
26
30
|
/**
|
|
27
31
|
* Message to show for an error that does not have an associated message.
|
|
28
32
|
*
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import { IssuesTrackerOptions } from '@ostack.tech/kform-react';
|
|
2
2
|
import { Card, CardBody, CardHeader, CardTitle, CloseButton, Icon, IconButton, Spinner } from '@ostack.tech/ui';
|
|
3
3
|
import { ComponentPropsWithoutRef, ComponentPropsWithRef, ReactNode } from 'react';
|
|
4
|
+
/** Default “focus” keybinds. */
|
|
5
|
+
export declare const DEFAULT_FOCUS_KEYBINDS = "Alt+Shift+F";
|
|
6
|
+
/** Default “previous issue” keybinds. */
|
|
7
|
+
export declare const DEFAULT_PREVIOUS_ISSUE_KEYBINDS = "Alt+Shift+ArrowLeft";
|
|
8
|
+
/** Default “next issue” keybinds. */
|
|
9
|
+
export declare const DEFAULT_NEXT_ISSUE_KEYBINDS = "Alt+Shift+ArrowRight";
|
|
10
|
+
/** Default “first issue” keybinds. */
|
|
11
|
+
export declare const DEFAULT_FIRST_ISSUE_KEYBINDS = "Alt+Shift+Home";
|
|
12
|
+
/** Default “last issue” keybinds. */
|
|
13
|
+
export declare const DEFAULT_LAST_ISSUE_KEYBINDS = "Alt+Shift+End";
|
|
4
14
|
/** Properties of the issues navigation component. */
|
|
5
15
|
export interface IssuesPanelProps extends Pick<IssuesTrackerOptions, "issuesOrderCompareFn">, Omit<ComponentPropsWithoutRef<typeof Card>, "children" | "variant" | "color"> {
|
|
6
16
|
/** Default open state of the issues navigation panel. */
|
|
@@ -51,14 +61,24 @@ export interface IssuesPanelProps extends Pick<IssuesTrackerOptions, "issuesOrde
|
|
|
51
61
|
warningsLabel?: (warnings?: number) => ReactNode;
|
|
52
62
|
/** Label of the focus button. */
|
|
53
63
|
focusButtonLabel?: string;
|
|
64
|
+
/** Keybinds to trigger the "focus" button. */
|
|
65
|
+
focusKeybinds?: string | string[] | null;
|
|
54
66
|
/** Label of the "previous issue" button. */
|
|
55
67
|
previousIssueButtonLabel?: string;
|
|
68
|
+
/** Keybinds to trigger the "previous issue" button. */
|
|
69
|
+
previousIssueKeybinds?: string | string[] | null;
|
|
56
70
|
/** Label of the "next issue" button. */
|
|
57
71
|
nextIssueButtonLabel?: string;
|
|
72
|
+
/** Keybinds to trigger the "next issue" button. */
|
|
73
|
+
nextIssueKeybinds?: string | string[] | null;
|
|
58
74
|
/** Label of the "first issue" button. */
|
|
59
75
|
firstIssueButtonLabel?: string;
|
|
76
|
+
/** Keybinds to trigger the "first issue" button. */
|
|
77
|
+
firstIssueKeybinds?: string | string[] | null;
|
|
60
78
|
/** Label of the "last issue" button. */
|
|
61
79
|
lastIssueButtonLabel?: string;
|
|
80
|
+
/** Keybinds to trigger the "last issue" button. */
|
|
81
|
+
lastIssueKeybinds?: string | string[] | null;
|
|
62
82
|
/**
|
|
63
83
|
* Text announced to assistive technologies with the current page out of the
|
|
64
84
|
* total number of pages.
|
|
@@ -3,7 +3,7 @@ import { Controller } from '@ostack.tech/kform-react';
|
|
|
3
3
|
import { IconButtonColor } from '@ostack.tech/ui';
|
|
4
4
|
import { IssuesPanelProps } from './IssuesPanel.tsx';
|
|
5
5
|
/** Properties of the issues panel controls component. */
|
|
6
|
-
export interface IssuesPanelControlsProps extends Pick<IssuesPanelProps, "focusButtonLabel" | "previousIssueButtonLabel" | "nextIssueButtonLabel" | "firstIssueButtonLabel" | "lastIssueButtonLabel" | "paginationLabel" | "validatingSpinnerProps" | "paginationProps" | "focusButtonProps" | "previousIssueButtonProps" | "nextIssueButtonProps" | "firstIssueButtonProps" | "lastIssueButtonProps" | "closeButtonProps"> {
|
|
6
|
+
export interface IssuesPanelControlsProps extends Pick<IssuesPanelProps, "focusButtonLabel" | "focusKeybinds" | "previousIssueButtonLabel" | "previousIssueKeybinds" | "nextIssueButtonLabel" | "nextIssueKeybinds" | "firstIssueButtonLabel" | "firstIssueKeybinds" | "lastIssueButtonLabel" | "lastIssueKeybinds" | "paginationLabel" | "validatingSpinnerProps" | "paginationProps" | "focusButtonProps" | "previousIssueButtonProps" | "nextIssueButtonProps" | "firstIssueButtonProps" | "lastIssueButtonProps" | "closeButtonProps"> {
|
|
7
7
|
currentPagePath: AbsolutePath | null;
|
|
8
8
|
currentPageIndex: number;
|
|
9
9
|
currentPageController: Controller;
|
|
@@ -16,4 +16,4 @@ export interface IssuesPanelControlsProps extends Pick<IssuesPanelProps, "focusB
|
|
|
16
16
|
closePanel: () => void;
|
|
17
17
|
}
|
|
18
18
|
/** Controls of the issues panel. */
|
|
19
|
-
export declare function IssuesPanelControls({ currentPagePath, nPages, currentPageIndex, currentPageController, goToPreviousPage, goToNextPage, goToFirstPage, goToLastPage, buttonsColor, closePanel, focusButtonLabel, previousIssueButtonLabel, nextIssueButtonLabel, firstIssueButtonLabel, lastIssueButtonLabel, paginationLabel, validatingSpinnerProps, paginationProps, focusButtonProps, previousIssueButtonProps, nextIssueButtonProps, firstIssueButtonProps, lastIssueButtonProps, closeButtonProps, }: IssuesPanelControlsProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare function IssuesPanelControls({ currentPagePath, nPages, currentPageIndex, currentPageController, goToPreviousPage, goToNextPage, goToFirstPage, goToLastPage, buttonsColor, closePanel, focusButtonLabel, focusKeybinds, previousIssueButtonLabel, previousIssueKeybinds, nextIssueButtonLabel, nextIssueKeybinds, firstIssueButtonLabel, firstIssueKeybinds, lastIssueButtonLabel, lastIssueKeybinds, paginationLabel, validatingSpinnerProps, paginationProps, focusButtonProps, previousIssueButtonProps, nextIssueButtonProps, firstIssueButtonProps, lastIssueButtonProps, closeButtonProps, }: IssuesPanelControlsProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { ButtonProps } from '@ostack.tech/ui';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
import { FormLoaderOptions } from '../../utils/useFormLoader.tsx';
|
|
4
|
+
/** Default “load” keybinds. */
|
|
5
|
+
export declare const DEFAULT_LOAD_KEYBINDS = "$mod+O";
|
|
4
6
|
/** Properties of the load action. */
|
|
5
7
|
export interface LoadActionProps<T = unknown> extends Omit<ButtonProps, "children">, FormLoaderOptions<T> {
|
|
6
8
|
/** Action's label. */
|
|
@@ -14,7 +16,8 @@ export interface LoadActionProps<T = unknown> extends Omit<ButtonProps, "childre
|
|
|
14
16
|
* information on keybinding syntax, read the [`tinykeys`
|
|
15
17
|
* documentation](https://github.com/jamiebuilds/tinykeys).
|
|
16
18
|
*
|
|
17
|
-
* Defaults to the keybinds defined by the current locale
|
|
19
|
+
* Defaults to the keybinds defined by the current locale or to
|
|
20
|
+
* `DEFAULT_LOAD_KEYBINDS`.
|
|
18
21
|
*/
|
|
19
22
|
keybinds?: string | string[] | null;
|
|
20
23
|
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { ButtonProps } from '@ostack.tech/ui';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
|
+
/** Default “print” keybinds. */
|
|
4
|
+
export declare const DEFAULT_PRINT_KEYBINDS = "$mod+P";
|
|
3
5
|
/** Properties of the print action. */
|
|
4
6
|
export interface PrintActionProps extends Omit<ButtonProps, "children"> {
|
|
5
7
|
/** Action's label. */
|
|
@@ -13,7 +15,8 @@ export interface PrintActionProps extends Omit<ButtonProps, "children"> {
|
|
|
13
15
|
* information on keybinding syntax, read the [`tinykeys`
|
|
14
16
|
* documentation](https://github.com/jamiebuilds/tinykeys).
|
|
15
17
|
*
|
|
16
|
-
* Defaults to the keybinds defined by the current locale
|
|
18
|
+
* Defaults to the keybinds defined by the current locale or to
|
|
19
|
+
* `DEFAULT_PRINT_KEYBINDS`.
|
|
17
20
|
*/
|
|
18
21
|
keybinds?: string | string[] | null;
|
|
19
22
|
}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { ButtonProps, DropdownMenuContent, IconButton } from '@ostack.tech/ui';
|
|
2
2
|
import { ComponentPropsWithRef, ReactNode } from 'react';
|
|
3
3
|
import { FormSaverOptions } from '../../utils/useFormSaver.tsx';
|
|
4
|
+
/** Default “save” keybinds. */
|
|
5
|
+
export declare const DEFAULT_SAVE_KEYBINDS = "$mod+S";
|
|
6
|
+
/** Default “save as” keybinds. */
|
|
7
|
+
export declare const DEFAULT_SAVE_AS_KEYBINDS = "$mod+Shift+S";
|
|
4
8
|
/** Properties of the save action. */
|
|
5
9
|
export interface SaveActionProps<T = unknown> extends Omit<ButtonProps, "children">, Omit<FormSaverOptions<T>, "overwrite"> {
|
|
6
10
|
/** Action's label. */
|
|
@@ -14,7 +18,8 @@ export interface SaveActionProps<T = unknown> extends Omit<ButtonProps, "childre
|
|
|
14
18
|
* information on keybinding syntax, read the [`tinykeys`
|
|
15
19
|
* documentation](https://github.com/jamiebuilds/tinykeys).
|
|
16
20
|
*
|
|
17
|
-
* Defaults to the keybinds defined by the current locale
|
|
21
|
+
* Defaults to the keybinds defined by the current locale or to
|
|
22
|
+
* `DEFAULT_SAVE_KEYBINDS`.
|
|
18
23
|
*/
|
|
19
24
|
keybinds?: string | string[] | null;
|
|
20
25
|
/**
|
|
@@ -39,7 +44,8 @@ export interface SaveActionProps<T = unknown> extends Omit<ButtonProps, "childre
|
|
|
39
44
|
* information on keybinding syntax, read the [`tinykeys`
|
|
40
45
|
* documentation](https://github.com/jamiebuilds/tinykeys).
|
|
41
46
|
*
|
|
42
|
-
* Defaults to the keybinds defined by the current locale
|
|
47
|
+
* Defaults to the keybinds defined by the current locale or to
|
|
48
|
+
* `DEFAULT_SAVE_AS_KEYBINDS`.
|
|
43
49
|
*/
|
|
44
50
|
saveAsKeybinds?: string | string[] | null;
|
|
45
51
|
/** Properties to pass to the save options button component. */
|
|
@@ -2,6 +2,8 @@ import { LocatedValidationWarning } from '@ostack.tech/kform';
|
|
|
2
2
|
import { SubmitOptions } from '@ostack.tech/kform-react';
|
|
3
3
|
import { Alert, AlertDialogBody, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, Button, ButtonProps, Checkbox } from '@ostack.tech/ui';
|
|
4
4
|
import { ComponentPropsWithRef, ReactNode } from 'react';
|
|
5
|
+
/** Default “submit” keybinds. */
|
|
6
|
+
export declare const DEFAULT_SUBMIT_KEYBINDS = "$mod+Enter";
|
|
5
7
|
/** Properties of the submit action. */
|
|
6
8
|
export interface SubmitActionProps<T = unknown, TSubmitResult = unknown> extends Omit<ButtonProps, "children" | "onSubmit">, Pick<Required<SubmitOptions<T, TSubmitResult>>, "onSubmit">, Omit<SubmitOptions<T, TSubmitResult>, "onSubmit"> {
|
|
7
9
|
/** Action's label. */
|
|
@@ -15,7 +17,8 @@ export interface SubmitActionProps<T = unknown, TSubmitResult = unknown> extends
|
|
|
15
17
|
* information on keybinding syntax, read the [`tinykeys`
|
|
16
18
|
* documentation](https://github.com/jamiebuilds/tinykeys).
|
|
17
19
|
*
|
|
18
|
-
* Defaults to the keybinds defined by the current locale
|
|
20
|
+
* Defaults to the keybinds defined by the current locale or to
|
|
21
|
+
* `DEFAULT_SUBMIT_KEYBINDS`.
|
|
19
22
|
*/
|
|
20
23
|
keybinds?: string | string[] | null;
|
|
21
24
|
/**
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { ButtonProps } from '@ostack.tech/ui';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
|
+
/** Default “validate” keybinds. */
|
|
4
|
+
export declare const DEFAULT_VALIDATE_KEYBINDS = "Alt+Shift+V";
|
|
3
5
|
/** Properties of the validate action. */
|
|
4
6
|
export interface ValidateActionProps extends Omit<ButtonProps, "children"> {
|
|
5
7
|
/** Action's label. */
|
|
@@ -13,7 +15,8 @@ export interface ValidateActionProps extends Omit<ButtonProps, "children"> {
|
|
|
13
15
|
* information on keybinding syntax, read the [`tinykeys`
|
|
14
16
|
* documentation](https://github.com/jamiebuilds/tinykeys).
|
|
15
17
|
*
|
|
16
|
-
* Defaults to the keybinds defined by the current locale
|
|
18
|
+
* Defaults to the keybinds defined by the current locale or to
|
|
19
|
+
* `DEFAULT_VALIDATE_KEYBINDS`.
|
|
17
20
|
*/
|
|
18
21
|
keybinds?: string | string[] | null;
|
|
19
22
|
}
|
|
@@ -16,14 +16,14 @@ import { ValidateActionProps } from '../../components/ValidateAction';
|
|
|
16
16
|
/** Localization object representation. */
|
|
17
17
|
export interface LocalizationObject {
|
|
18
18
|
baseLocale: UiLocalizationObject;
|
|
19
|
-
AnnexesManager: Pick<AnnexesManagerProps, "aria-label" | "menuButtonText" | "addAnnexText" | "removeAnnexButtonLabel" | "removeAnnexKeyboardHint" | "removeAnnexConfirmDialogTitle" | "removeAnnexConfirmDialogMessage" | "removeAnnexConfirmDialogOkText" | "removeAnnexConfirmDialogCancelText">;
|
|
19
|
+
AnnexesManager: Pick<AnnexesManagerProps, "aria-label" | "menuButtonText" | "menuButtonLabel" | "addAnnexText" | "addAnnexSuccessMessage" | "removeAnnexButtonLabel" | "removeAnnexKeyboardHint" | "removeAnnexConfirmDialogTitle" | "removeAnnexConfirmDialogMessage" | "removeAnnexConfirmDialogOkText" | "removeAnnexConfirmDialogCancelText">;
|
|
20
20
|
DateRangeControl: Pick<DateRangeControlProps, "issuesPanelStartLabelSuffix" | "issuesPanelEndLabelSuffix">;
|
|
21
21
|
FileControl: Pick<FileControlProps, "viewFileButtonLabel" | "downloadFileButtonLabel" | "fallbackText">;
|
|
22
22
|
FormApp: Pick<FormAppProps, "formTitle" | "issuesPanelLabel" | "issueMessages" | "confirmUnloadMessage">;
|
|
23
|
-
FormPage: Pick<FormPageProps, "helperButtonLabel">;
|
|
23
|
+
FormPage: Pick<FormPageProps, "helperButtonLabel" | "visuallyHiddenCodePrefix">;
|
|
24
24
|
FormPagesNavigation: Pick<FormPagesNavigationProps, "aria-label">;
|
|
25
|
-
IssueMessages: Pick<IssueMessagesProps, "unknownErrorMessage" | "unknownWarningMessage">;
|
|
26
|
-
IssuesPanel: Pick<IssuesPanelProps, "errorsLabel" | "warningsLabel" | "focusButtonLabel" | "previousIssueButtonLabel" | "nextIssueButtonLabel" | "firstIssueButtonLabel" | "lastIssueButtonLabel" | "paginationLabel" | "noIssuesMessage" | "resolvedTitle" | "resolvedMessage">;
|
|
25
|
+
IssueMessages: Pick<IssueMessagesProps, "visuallyHiddenErrorCodePrefix" | "visuallyHiddenWarningCodePrefix" | "unknownErrorMessage" | "unknownWarningMessage">;
|
|
26
|
+
IssuesPanel: Pick<IssuesPanelProps, "errorsLabel" | "warningsLabel" | "focusButtonLabel" | "focusKeybinds" | "previousIssueButtonLabel" | "previousIssueKeybinds" | "nextIssueButtonLabel" | "nextIssueKeybinds" | "firstIssueButtonLabel" | "firstIssueKeybinds" | "lastIssueButtonLabel" | "lastIssueKeybinds" | "paginationLabel" | "noIssuesMessage" | "resolvedTitle" | "resolvedMessage">;
|
|
27
27
|
IssuesPopover: Pick<IssuesPopoverProps, "label">;
|
|
28
28
|
LoadAction: Pick<LoadActionProps, "label" | "keybinds" | "successMessage" | "errorMessage">;
|
|
29
29
|
SaveAction: Pick<SaveActionProps, "label" | "keybinds" | "saveOptionsLabel" | "saveAsLabel" | "saveAsKeybinds" | "successMessage" | "errorMessage">;
|
|
@@ -24,4 +24,7 @@ export interface UseControlIssuesOptions {
|
|
|
24
24
|
* the issues are to appear within a popover. This will be `null` if the
|
|
25
25
|
* issues should not appear in a popover.
|
|
26
26
|
*/
|
|
27
|
-
export declare function useControlIssues({ issuesToDisplay, issueMessages, displayIssues, issueMessagesProps, }: UseControlIssuesOptions): [
|
|
27
|
+
export declare function useControlIssues({ issuesToDisplay, issueMessages, displayIssues, issueMessagesProps, }: UseControlIssuesOptions): [
|
|
28
|
+
inlineIssues: ReactNode,
|
|
29
|
+
popoverIssues: ReactNode
|
|
30
|
+
];
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ostack.tech/ui-kform",
|
|
3
3
|
"description": "Integration of ostack/UI with ostack/KForm.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.9.1",
|
|
5
5
|
"homepage": "https://ui.ostack.tech/",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Opensoft",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"@fortawesome/free-solid-svg-icons": "^6.2.0 || ^7.0.0",
|
|
53
53
|
"@ostack.tech/kform": "~0.32.0",
|
|
54
54
|
"@ostack.tech/kform-react": "~0.32.0",
|
|
55
|
-
"@ostack.tech/ui": "~0.
|
|
55
|
+
"@ostack.tech/ui": "~0.9.1",
|
|
56
56
|
"@types/react": "^18.0.0 || ^19.0.0",
|
|
57
57
|
"@types/react-dom": "^18.0.0 || ^19.0.0",
|
|
58
58
|
"date-fns": "^4.1.0",
|
|
@@ -202,7 +202,6 @@
|
|
|
202
202
|
border: 0;
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
-
& > #{$form-pages}__page-code,
|
|
206
205
|
& > #{$form-pages}__page-title {
|
|
207
206
|
display: none;
|
|
208
207
|
}
|
|
@@ -219,7 +218,7 @@
|
|
|
219
218
|
|
|
220
219
|
&__page-code {
|
|
221
220
|
$code-size: 24px;
|
|
222
|
-
display: flex;
|
|
221
|
+
display: inline-flex;
|
|
223
222
|
align-items: center;
|
|
224
223
|
justify-content: center;
|
|
225
224
|
min-height: $code-size;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"en-DdEhXMHn.js","sources":["../../src/locales/en.tsx"],"sourcesContent":["import type { LocalizationObject } from \"../providers/LocalizationProvider\";\n\n/** `en` locale (partial). */\nexport const en: Omit<LocalizationObject, \"languageTag\" | \"baseLocale\"> = {\n AnnexesManager: {\n \"aria-label\": \"Form annexes\",\n menuButtonText: \"Annexes\",\n addAnnexText: \"Add annex\",\n removeAnnexButtonLabel: \"Remove annex\",\n removeAnnexKeyboardHint: \"Press the “Delete” key to remove the annex\",\n removeAnnexConfirmDialogTitle: \"Remove annex\",\n removeAnnexConfirmDialogMessage: (annexName) => (\n <>Are you sure you want to remove annex {annexName}?</>\n ),\n removeAnnexConfirmDialogOkText: \"Remove\",\n },\n DateRangeControl: {\n issuesPanelStartLabelSuffix: \" (start date)\",\n issuesPanelEndLabelSuffix: \" (end date)\",\n },\n FileControl: {\n viewFileButtonLabel: \"View file\",\n downloadFileButtonLabel: \"Download file\",\n fallbackText: (\n <>\n The selected file cannot be viewed in this browser.\n <br />\n Please use the button above to download the file. You can then open it\n using an external application.\n </>\n ),\n },\n FormApp: {\n formTitle: \"Form\",\n issueMessages: {\n \"/**\": {\n valueMissing: \"Field is required.\",\n valueDisallowed: \"Indicated value is not allowed.\",\n rangeUnderflow: \"Value is under the minimum allowed.\",\n rangeOverflow: \"Value exceeds the maximum allowed.\",\n lengthMismatch: (_data, { typeInfo: { name, restrictions } }) =>\n name === \"String\" &&\n typeof restrictions.minLength === \"number\" &&\n restrictions.minLength === restrictions.maxLength\n ? `Value must have ${restrictions.minLength} character${\n restrictions.minLength === 1 ? \"\" : \"s\"\n }.`\n : \"Value has an invalid length.\",\n tooShort: (_data, { typeInfo: { name, restrictions } }) =>\n name === \"String\" && typeof restrictions.minLength === \"number\"\n ? `Value must not have under ${restrictions.minLength} character${\n restrictions.minLength === 1 ? \"\" : \"s\"\n }.`\n : \"Value is too short.\",\n tooLong: (_data, { typeInfo: { name, restrictions } }) =>\n name === \"String\" && typeof restrictions.maxLength === \"number\"\n ? `Value must not have over ${restrictions.maxLength} character${\n restrictions.maxLength === 1 ? \"\" : \"s\"\n }.`\n : \"Value is too long.\",\n sizeMismatch: (_data, { typeInfo: { restrictions } }) =>\n typeof restrictions.minSize === \"number\" &&\n restrictions.minSize === restrictions.maxSize\n ? `Field must have ${restrictions.minSize} item${\n restrictions.minSize === 1 ? \"\" : \"s\"\n }.`\n : \"Field has an invalid number of items.\",\n tooSmall: (_data, { typeInfo: { restrictions } }) =>\n typeof restrictions.minLength === \"number\"\n ? `Field must not have under ${restrictions.minLength} item${\n restrictions.minLength === 1 ? \"\" : \"s\"\n }.`\n : \"Field does not have enough items.\",\n tooLarge: (_data, { typeInfo: { restrictions } }) =>\n typeof restrictions.maxLength === \"number\"\n ? `Field must not have over ${restrictions.maxLength} item${\n restrictions.maxLength === 1 ? \"\" : \"s\"\n }.`\n : \"Number of items of field exceeds allowed limit.\",\n scaleMismatch: (_data, { typeInfo: { restrictions } }) =>\n typeof restrictions.scale === \"number\"\n ? `Value must have ${restrictions.scale} decimal place${\n restrictions.scale === 1 ? \"\" : \"s\"\n }.`\n : \"Value has invalid number of decimal places.\",\n patternMismatch: \"Value does not follow required pattern.\",\n emailPatternMismatch: \"Invalid email address.\",\n fileTypeMismatch: (_data, { typeInfo: { restrictions } }) =>\n Array.isArray(restrictions.acceptedFileTypes)\n ? `Only the following file types are allowed: ${restrictions.acceptedFileTypes.join(\", \")}.`\n : \"Indicated file’s type is not allowed.\",\n itemsRepeated: ({ firstIndex, secondIndex }) =>\n firstIndex != null && secondIndex != null\n ? `Items ${+firstIndex + 1} and ${+secondIndex + 1} are repeated.`\n : \"Field contains repeated items.\",\n computedValueMismatch: \"Value differs from the computed value.\",\n validationFailed: (data) =>\n process.env.NODE_ENV !== \"production\"\n ? data.exception\n : \"Something went wrong validating this field. \" +\n \"Please try again later.\",\n },\n },\n confirmUnloadMessage:\n \"Are you sure you want to leave the page? \" +\n \"Changes you made to the form may not have been saved.\",\n },\n FormPagesNavigation: {\n \"aria-label\": \"Form pages\",\n },\n FormPage: {\n helperButtonLabel: \"Show help\",\n },\n IssueMessages: {\n unknownErrorMessage: \"Field with unknown error.\",\n unknownWarningMessage: \"Field with unknown warning.\",\n },\n IssuesPanel: {\n errorsLabel: (errors) =>\n errors === undefined ? (\n \"Errors\"\n ) : (\n <>\n {errors} {errors === 1 ? \"Error\" : \"Errors\"}\n </>\n ),\n warningsLabel: (warnings) =>\n warnings === undefined ? (\n \"Warnings\"\n ) : (\n <>\n {warnings} {warnings === 1 ? \"Warning\" : \"Warnings\"}\n </>\n ),\n focusButtonLabel: \"Focus field\",\n previousIssueButtonLabel: \"Previous field with issues\",\n nextIssueButtonLabel: \"Next field with issues\",\n firstIssueButtonLabel: \"First field with issues\",\n lastIssueButtonLabel: \"Last field with issues\",\n paginationLabel: (currentPage, totalPages) =>\n `Field with issues ${currentPage} of ${totalPages}.`,\n noIssuesMessage: \"No issues to report.\",\n resolvedTitle: \"Resolved\",\n resolvedMessage:\n \"Issues have been resolved. \" +\n \"Please advance to the next field with issues.\",\n },\n IssuesPopover: {\n label: \"Show issues\",\n },\n LoadAction: {\n label: \"Load\",\n keybinds: \"$mod+O\",\n successMessage: (file) => `File “${file.name}” loaded successfully.`,\n errorMessage: (file) =>\n file\n ? `Unable to load file “${file.name}”. ` +\n \"Please confirm that the indicated file is a valid file of the form.\"\n : \"Unable to load the indicated file. Please confirm that you have \" +\n \"the appropriate permissions to perform the operation.\",\n },\n PrintAction: {\n label: \"Print\",\n keybinds: \"$mod+P\",\n },\n SaveAction: {\n label: \"Save\",\n keybinds: \"$mod+S\",\n saveOptionsLabel: \"Save options\",\n saveAsLabel: \"Save as…\",\n saveAsKeybinds: \"$mod+Shift+S\",\n successMessage: (fileHandle) =>\n `File “${fileHandle.name}” saved successfully.`,\n errorMessage: (fileHandle) =>\n fileHandle\n ? `Unable to save file “${fileHandle.name}”. ` +\n \"Please confirm that you have the appropriate permissions to \" +\n \"perform the operation.\"\n : \"Unable to save the indicated file. Please confirm that you have \" +\n \"the appropriate permissions to perform the operation.\",\n },\n SubmitAction: {\n label: \"Submit\",\n keybinds: \"$mod+Enter\",\n dialogTitle: \"Submit form\",\n dialogDescription:\n \"Please confirm that you wish to proceed with the form submission.\",\n dialogCancelText: \"Cancel\",\n confirmWarningsCheckboxLabel:\n \"I declare that I have been informed of the warnings generated by the \" +\n \"data in this form and that I wish to proceed without changing said \" +\n \"data.\",\n successMessage: \"Form submitted successfully.\",\n errorMessage:\n \"Something went wrong while submitting the form. Please try again later.\",\n },\n TableControlAddRowTrigger: {\n defaultButtonText: \"Add row\",\n },\n TableControlRemoveRowTrigger: {\n defaultButtonLabel: \"Remove row\",\n confirmDialogTitle: \"Remove row\",\n confirmDialogMessage: (index) => (\n <>Are you sure you want to remove line #{index + 1}?</>\n ),\n confirmDialogOkText: \"Remove\",\n },\n ValidateAction: {\n label: \"Validate\",\n keybinds: \"F7\",\n },\n};\n"],"names":[],"mappings":"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"}
|