@pallasoft/ps-mobile-components 1.2.0 → 1.3.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/components/ps-action-menu/ps-action-menu-avatar-entry.d.ts +5 -0
- package/dist/components/ps-action-menu/ps-action-menu-avatar-entry.js +16 -0
- package/dist/components/ps-action-menu/ps-action-menu-entries.js +4 -2
- package/dist/components/ps-action-menu/ps-action-menu-labelled.d.ts +2 -1
- package/dist/components/ps-action-menu/ps-action-menu-labelled.js +2 -2
- package/dist/components/ps-action-menu/ps-action-menu.android.js +1 -1
- package/dist/components/ps-action-menu/ps-action-menu.ios.js +10 -1
- package/dist/components/ps-action-menu/ps-menu-tile-canvas.d.ts +6 -0
- package/dist/components/ps-action-menu/ps-menu-tile-canvas.js +5 -0
- package/dist/components/ps-action-menu/ps-menu-tile-drawing.d.ts +6 -0
- package/dist/components/ps-action-menu/ps-menu-tile-drawing.js +34 -0
- package/dist/components/ps-app-lock-screen/index.d.ts +2 -0
- package/dist/components/ps-app-lock-screen/index.js +2 -0
- package/dist/components/ps-app-lock-screen/ps-app-lock-screen-props.d.ts +9 -0
- package/dist/components/ps-app-lock-screen/ps-app-lock-screen-props.js +1 -0
- package/dist/components/ps-app-lock-screen/ps-app-lock-screen.d.ts +2 -0
- package/dist/components/ps-app-lock-screen/ps-app-lock-screen.js +19 -0
- package/dist/components/ps-chip/ps-chip.js +1 -1
- package/dist/components/ps-form-sheet/ps-form-sheet-props.d.ts +2 -0
- package/dist/components/ps-form-sheet/ps-form-sheet.d.ts +1 -1
- package/dist/components/ps-form-sheet/ps-form-sheet.js +17 -7
- package/dist/components/ps-list/ps-list-context-menu.js +1 -1
- package/dist/components/ps-list/ps-list-link-menu-entry.d.ts +5 -0
- package/dist/components/ps-list/ps-list-link-menu-entry.js +11 -0
- package/dist/components/ps-list/ps-list-link-menu.d.ts +10 -0
- package/dist/components/ps-list/ps-list-link-menu.js +16 -0
- package/dist/components/ps-list/ps-list-link-row.js +1 -1
- package/dist/components/ps-list/ps-list-props.d.ts +3 -1
- package/dist/components/ps-list/ps-list-row-body.js +2 -4
- package/dist/components/ps-list/ps-list-row.d.ts +1 -1
- package/dist/components/ps-list/ps-list-row.js +3 -2
- package/dist/components/ps-mobile-theme-provider/ps-mobile-theme-provider-props.d.ts +4 -2
- package/dist/components/ps-mobile-theme-provider/ps-mobile-theme-provider.d.ts +1 -1
- package/dist/components/ps-mobile-theme-provider/ps-mobile-theme-provider.js +20 -10
- package/dist/components/ps-native-menu/ps-native-menu.android.js +1 -1
- package/dist/components/ps-option-picker/index.d.ts +2 -0
- package/dist/components/ps-option-picker/index.js +2 -0
- package/dist/components/ps-option-picker/ps-option-picker-props.d.ts +16 -0
- package/dist/components/ps-option-picker/ps-option-picker-props.js +1 -0
- package/dist/components/ps-option-picker/ps-option-picker.d.ts +2 -0
- package/dist/components/ps-option-picker/ps-option-picker.js +33 -0
- package/dist/components/ps-privacy-cover/index.d.ts +2 -0
- package/dist/components/ps-privacy-cover/index.js +2 -0
- package/dist/components/ps-privacy-cover/ps-privacy-cover-props.d.ts +4 -0
- package/dist/components/ps-privacy-cover/ps-privacy-cover-props.js +1 -0
- package/dist/components/ps-privacy-cover/ps-privacy-cover.d.ts +2 -0
- package/dist/components/ps-privacy-cover/ps-privacy-cover.js +17 -0
- package/dist/components/ps-search-select-field/index.d.ts +2 -0
- package/dist/components/ps-search-select-field/index.js +2 -0
- package/dist/components/ps-search-select-field/ps-search-select-field-props.d.ts +10 -0
- package/dist/components/ps-search-select-field/ps-search-select-field-props.js +1 -0
- package/dist/components/ps-search-select-field/ps-search-select-field.d.ts +2 -0
- package/dist/components/ps-search-select-field/ps-search-select-field.js +15 -0
- package/dist/components/ps-selection-mode/index.d.ts +2 -0
- package/dist/components/ps-selection-mode/index.js +2 -0
- package/dist/components/ps-selection-mode/ps-selection-mode-props.d.ts +13 -0
- package/dist/components/ps-selection-mode/ps-selection-mode-props.js +1 -0
- package/dist/components/ps-selection-mode/ps-selection-mode.d.ts +2 -0
- package/dist/components/ps-selection-mode/ps-selection-mode.js +28 -0
- package/dist/components/ps-sheet/ps-sheet-props.d.ts +4 -1
- package/dist/components/ps-sheet/ps-sheet.d.ts +1 -1
- package/dist/components/ps-sheet/ps-sheet.js +4 -5
- package/dist/components/ps-sheet-header/ps-sheet-header-props.d.ts +2 -0
- package/dist/components/ps-sheet-header/ps-sheet-header.d.ts +1 -1
- package/dist/components/ps-sheet-header/ps-sheet-header.js +2 -2
- package/dist/components/ps-sheet-page/ps-sheet-page-view.d.ts +8 -0
- package/dist/components/ps-sheet-page/ps-sheet-page-view.js +11 -0
- package/dist/components/ps-sheet-presenter/ps-sheet-presenter.ios.js +9 -2
- package/dist/components/ps-tab-bar-provider/index.d.ts +2 -0
- package/dist/components/ps-tab-bar-provider/index.js +2 -0
- package/dist/components/ps-tab-bar-provider/ps-tab-bar-provider-props.d.ts +4 -0
- package/dist/components/ps-tab-bar-provider/ps-tab-bar-provider-props.js +1 -0
- package/dist/components/ps-tab-bar-provider/ps-tab-bar-provider.d.ts +2 -0
- package/dist/components/ps-tab-bar-provider/ps-tab-bar-provider.js +8 -0
- package/dist/components/ps-tabs/ps-tabs.js +1 -1
- package/dist/components/ps-text-link/ps-text-link.js +1 -1
- package/dist/constants/ps-app-lock-config.d.ts +13 -0
- package/dist/constants/ps-app-lock-config.js +13 -0
- package/dist/constants/ps-app-lock-native-codes.d.ts +10 -0
- package/dist/constants/ps-app-lock-native-codes.js +10 -0
- package/dist/constants/ps-biometry-kind.d.ts +7 -0
- package/dist/constants/ps-biometry-kind.js +6 -0
- package/dist/constants/ps-list-config.d.ts +2 -0
- package/dist/constants/ps-list-config.js +2 -0
- package/dist/constants/ps-menu-tile-config.d.ts +9 -0
- package/dist/constants/ps-menu-tile-config.js +9 -0
- package/dist/constants/ps-mobile-control-config.d.ts +0 -12
- package/dist/constants/ps-mobile-control-config.js +0 -6
- package/dist/constants/ps-option-picker-config.d.ts +6 -0
- package/dist/constants/ps-option-picker-config.js +6 -0
- package/dist/constants/ps-sf-symbol-config.d.ts +92 -0
- package/dist/constants/ps-sf-symbol-config.js +92 -0
- package/dist/constants/ps-sheet-page-config.d.ts +4 -0
- package/dist/constants/ps-sheet-page-config.js +4 -0
- package/dist/contexts/ps-tab-bar-context.d.ts +2 -0
- package/dist/contexts/ps-tab-bar-context.js +5 -0
- package/dist/hooks/use-ps-app-lock.d.ts +3 -0
- package/dist/hooks/use-ps-app-lock.js +72 -0
- package/dist/hooks/use-ps-menu-tiles.d.ts +4 -0
- package/dist/hooks/use-ps-menu-tiles.js +8 -0
- package/dist/hooks/use-ps-tab-bar.d.ts +2 -0
- package/dist/hooks/use-ps-tab-bar.js +3 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +18 -0
- package/dist/interfaces/ps-action-menu-header.d.ts +1 -0
- package/dist/interfaces/ps-app-lock-native.d.ts +13 -0
- package/dist/interfaces/ps-app-lock-native.js +1 -0
- package/dist/interfaces/ps-app-lock-prompt.d.ts +4 -0
- package/dist/interfaces/ps-app-lock-prompt.js +1 -0
- package/dist/interfaces/ps-menu-item.d.ts +2 -0
- package/dist/interfaces/ps-menu-tile-request.d.ts +7 -0
- package/dist/interfaces/ps-menu-tile-request.js +1 -0
- package/dist/interfaces/ps-menu-tile-shape.d.ts +1 -0
- package/dist/interfaces/ps-menu-tile-shape.js +1 -0
- package/dist/interfaces/ps-mobile-brand-colors.d.ts +5 -0
- package/dist/interfaces/ps-mobile-brand-colors.js +1 -0
- package/dist/interfaces/ps-mobile-brand-input.d.ts +7 -0
- package/dist/interfaces/ps-mobile-brand-input.js +1 -0
- package/dist/interfaces/ps-mobile-theme-input.d.ts +1 -1
- package/dist/interfaces/ps-mobile-theme.d.ts +32 -0
- package/dist/interfaces/ps-sheet-leading-kind.d.ts +1 -0
- package/dist/interfaces/ps-sheet-leading-kind.js +1 -0
- package/dist/interfaces/ps-sheet-page.d.ts +8 -0
- package/dist/interfaces/ps-sheet-page.js +1 -0
- package/dist/interfaces/ps-tab-bar-context-data.d.ts +4 -0
- package/dist/interfaces/ps-tab-bar-context-data.js +1 -0
- package/dist/interfaces/use-ps-app-lock-options.d.ts +6 -0
- package/dist/interfaces/use-ps-app-lock-options.js +1 -0
- package/dist/interfaces/use-ps-app-lock-result.d.ts +7 -0
- package/dist/interfaces/use-ps-app-lock-result.js +1 -0
- package/dist/services/ps-action-menu-service.d.ts +4 -0
- package/dist/services/ps-action-menu-service.js +25 -2
- package/dist/services/ps-app-lock-grace-service.d.ts +6 -0
- package/dist/services/ps-app-lock-grace-service.js +17 -0
- package/dist/services/ps-app-lock-service.d.ts +10 -0
- package/dist/services/ps-app-lock-service.js +84 -0
- package/dist/services/ps-badge-tone-service.js +3 -3
- package/dist/services/ps-button-style-service.js +2 -2
- package/dist/services/ps-context-menu-service.d.ts +1 -0
- package/dist/services/ps-context-menu-service.js +13 -0
- package/dist/services/ps-list-row-style-service.d.ts +4 -0
- package/dist/services/ps-list-row-style-service.js +11 -0
- package/dist/services/ps-menu-tile-service.d.ts +16 -0
- package/dist/services/ps-menu-tile-service.js +70 -0
- package/dist/services/ps-menu-tile-style-service.d.ts +4 -0
- package/dist/services/ps-menu-tile-style-service.js +5 -0
- package/dist/services/ps-mobile-brand-service.d.ts +5 -0
- package/dist/services/ps-mobile-brand-service.js +24 -0
- package/dist/services/ps-mobile-theme-service.d.ts +0 -2
- package/dist/services/ps-mobile-theme-service.js +64 -94
- package/dist/services/ps-option-picker-service.d.ts +8 -0
- package/dist/services/ps-option-picker-service.js +10 -0
- package/dist/services/ps-selection-service.d.ts +5 -0
- package/dist/services/ps-selection-service.js +13 -0
- package/dist/services/ps-sheet-service.d.ts +5 -0
- package/dist/services/ps-sheet-service.js +11 -0
- package/dist/services/ps-text-service.js +4 -4
- package/jest-setup.js +71 -0
- package/package.json +14 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { usePsHaptics } from '../../hooks/use-ps-haptics';
|
|
3
|
+
import { PsFieldFrame } from '../ps-field-frame/ps-field-frame';
|
|
4
|
+
import { PsFieldSkeleton } from '../ps-field-skeleton/ps-field-skeleton';
|
|
5
|
+
import { PsSelectControl } from '../ps-select/ps-select-control';
|
|
6
|
+
import { PsSelectTrigger } from '../ps-select/ps-select-trigger';
|
|
7
|
+
export const PsSearchSelectField = ({ errorText, helperText, isDisabled = false, isLoading = false, label, onPress, placeholder, selectedLabel, }) => {
|
|
8
|
+
const haptic = usePsHaptics();
|
|
9
|
+
if (isLoading)
|
|
10
|
+
return _jsx(PsFieldSkeleton, {});
|
|
11
|
+
return (_jsx(PsFieldFrame, { errorText: errorText, helperText: helperText, label: label, children: _jsx(PsSelectTrigger, { isDisabled: isDisabled, label: label, onPress: () => {
|
|
12
|
+
haptic('selection');
|
|
13
|
+
onPress();
|
|
14
|
+
}, children: _jsx(PsSelectControl, { errorText: errorText, isDisabled: isDisabled, isFocused: false, placeholder: placeholder, selectedLabel: selectedLabel, size: 'default' }) }) }));
|
|
15
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PsMenuItem } from '../../interfaces/ps-menu-item';
|
|
2
|
+
export interface PsSelectionModeProps {
|
|
3
|
+
actions: PsMenuItem[];
|
|
4
|
+
deselectAllLabel: string;
|
|
5
|
+
doneLabel: string;
|
|
6
|
+
isAllSelected: boolean;
|
|
7
|
+
isSelecting: boolean;
|
|
8
|
+
onDone: () => void;
|
|
9
|
+
onSelectAll: () => void;
|
|
10
|
+
selectAllLabel: string;
|
|
11
|
+
selectedTitle: string;
|
|
12
|
+
title: string;
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { PsSelectionModeProps } from './ps-selection-mode-props';
|
|
2
|
+
export declare const PsSelectionMode: ({ actions, deselectAllLabel, doneLabel, isAllSelected, isSelecting, onDone, onSelectAll, selectAllLabel, selectedTitle, title, }: PsSelectionModeProps) => import("react").JSX.Element;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment, useEffect } from 'react';
|
|
3
|
+
import { Stack } from 'expo-router';
|
|
4
|
+
import { usePsHaptics } from '../../hooks/use-ps-haptics';
|
|
5
|
+
import { usePsMobileTheme } from '../../hooks/use-ps-mobile-theme';
|
|
6
|
+
import { usePsTabBar } from '../../hooks/use-ps-tab-bar';
|
|
7
|
+
import { PsActionMenuService } from '../../services/ps-action-menu-service';
|
|
8
|
+
export const PsSelectionMode = ({ actions, deselectAllLabel, doneLabel, isAllSelected, isSelecting, onDone, onSelectAll, selectAllLabel, selectedTitle, title, }) => {
|
|
9
|
+
const theme = usePsMobileTheme();
|
|
10
|
+
const haptic = usePsHaptics();
|
|
11
|
+
const { setIsHidden } = usePsTabBar();
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
setIsHidden(isSelecting);
|
|
14
|
+
return () => setIsHidden(false);
|
|
15
|
+
}, [isSelecting, setIsHidden]);
|
|
16
|
+
if (!isSelecting)
|
|
17
|
+
return _jsx(Stack.Screen, { options: { headerBackVisible: true, title } });
|
|
18
|
+
return (_jsxs(_Fragment, { children: [_jsx(Stack.Screen, { options: { headerBackVisible: false, title: selectedTitle } }), _jsx(Stack.Toolbar, { placement: 'left', children: _jsx(Stack.Toolbar.Button, { onPress: () => {
|
|
19
|
+
haptic('selection');
|
|
20
|
+
onSelectAll();
|
|
21
|
+
}, tintColor: theme.primaryText, children: isAllSelected ? deselectAllLabel : selectAllLabel }) }), _jsx(Stack.Toolbar, { placement: 'right', children: _jsx(Stack.Toolbar.Button, { onPress: () => {
|
|
22
|
+
haptic('light');
|
|
23
|
+
onDone();
|
|
24
|
+
}, tintColor: theme.primaryText, variant: 'done', children: doneLabel }) }), _jsxs(Stack.Toolbar, { placement: 'bottom', children: [_jsx(Stack.Toolbar.Spacer, {}), actions.map((item) => (_jsxs(Fragment, { children: [_jsx(Stack.Toolbar.Button, { disabled: item.isDisabled === true, icon: PsActionMenuService.symbol(item), onPress: () => {
|
|
25
|
+
haptic('medium');
|
|
26
|
+
item.onSelect();
|
|
27
|
+
}, tintColor: item.isDanger === true ? theme.danger : theme.primaryText, children: item.label }), _jsx(Stack.Toolbar.Spacer, {})] }, item.id)))] })] }));
|
|
28
|
+
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
import type { PsSheetAction } from '../../interfaces/ps-sheet-action';
|
|
3
|
+
import type { PsSheetLeadingKind } from '../../interfaces/ps-sheet-leading-kind';
|
|
3
4
|
export interface PsSheetProps {
|
|
4
5
|
children: ReactNode;
|
|
5
6
|
closeLabel?: string;
|
|
@@ -8,8 +9,10 @@ export interface PsSheetProps {
|
|
|
8
9
|
isDismissBlocked?: boolean;
|
|
9
10
|
isOpen: boolean;
|
|
10
11
|
isScrollable?: boolean;
|
|
12
|
+
leadingKind?: PsSheetLeadingKind;
|
|
11
13
|
leadingLabel?: string;
|
|
12
14
|
onClose: () => void;
|
|
15
|
+
onLeadingPress?: () => void;
|
|
13
16
|
title: string;
|
|
14
|
-
trailingAction?: PsSheetAction;
|
|
17
|
+
trailingAction?: PsSheetAction | null;
|
|
15
18
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { PsSheetProps } from './ps-sheet-props';
|
|
2
|
-
export declare const PsSheet: ({ children, closeLabel, eyebrow, footer, isDismissBlocked, isOpen, isScrollable, leadingLabel, onClose, title, trailingAction, }: PsSheetProps) => import("react").JSX.Element;
|
|
2
|
+
export declare const PsSheet: ({ children, closeLabel, eyebrow, footer, isDismissBlocked, isOpen, isScrollable, leadingKind, leadingLabel, onClose, onLeadingPress, title, trailingAction, }: PsSheetProps) => import("react").JSX.Element;
|
|
@@ -2,13 +2,12 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { PsSheetService } from '../../services/ps-sheet-service';
|
|
3
3
|
import { PsSheetContent } from '../ps-sheet-content/ps-sheet-content';
|
|
4
4
|
import { PsSheetPresenter } from '../ps-sheet-presenter/ps-sheet-presenter';
|
|
5
|
-
export const PsSheet = ({ children, closeLabel, eyebrow, footer, isDismissBlocked = false, isOpen, isScrollable = true, leadingLabel, onClose, title, trailingAction, }) => (_jsx(PsSheetPresenter, { isDismissBlocked: isDismissBlocked, isOpen: isOpen, onClose: onClose, children: _jsx(PsSheetContent, { footer: footer, header: {
|
|
5
|
+
export const PsSheet = ({ children, closeLabel, eyebrow, footer, isDismissBlocked = false, isOpen, isScrollable = true, leadingKind = 'close', leadingLabel, onClose, onLeadingPress, title, trailingAction, }) => (_jsx(PsSheetPresenter, { isDismissBlocked: isDismissBlocked, isOpen: isOpen, onClose: onClose, children: _jsx(PsSheetContent, { footer: footer, header: {
|
|
6
6
|
eyebrow,
|
|
7
7
|
isLeadingDisabled: isDismissBlocked,
|
|
8
|
+
leadingKind,
|
|
8
9
|
leadingLabel,
|
|
9
|
-
onLeadingPress: onClose,
|
|
10
|
+
onLeadingPress: onLeadingPress === undefined ? onClose : onLeadingPress,
|
|
10
11
|
title,
|
|
11
|
-
trailing: trailingAction
|
|
12
|
-
? PsSheetService.closeAction(closeLabel, onClose)
|
|
13
|
-
: trailingAction,
|
|
12
|
+
trailing: PsSheetService.trailing(trailingAction, closeLabel, onClose),
|
|
14
13
|
}, isScrollable: isScrollable, children: children }) }));
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { PsSheetAction } from '../../interfaces/ps-sheet-action';
|
|
2
|
+
import type { PsSheetLeadingKind } from '../../interfaces/ps-sheet-leading-kind';
|
|
2
3
|
export interface PsSheetHeaderProps {
|
|
3
4
|
eyebrow?: string;
|
|
4
5
|
isLeadingDisabled?: boolean;
|
|
6
|
+
leadingKind?: PsSheetLeadingKind;
|
|
5
7
|
leadingLabel?: string;
|
|
6
8
|
onLeadingPress?: () => void;
|
|
7
9
|
title: string;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { PsSheetHeaderProps } from './ps-sheet-header-props';
|
|
2
|
-
export declare const PsSheetHeader: ({ eyebrow, isLeadingDisabled, leadingLabel, onLeadingPress, title, trailing, }: PsSheetHeaderProps) => import("react").JSX.Element;
|
|
2
|
+
export declare const PsSheetHeader: ({ eyebrow, isLeadingDisabled, leadingKind, leadingLabel, onLeadingPress, title, trailing, }: PsSheetHeaderProps) => import("react").JSX.Element;
|
|
@@ -8,7 +8,7 @@ import { PsSheetService } from '../../services/ps-sheet-service';
|
|
|
8
8
|
import { PsIconButton } from '../ps-icon-button/ps-icon-button';
|
|
9
9
|
import { PsSpinner } from '../ps-spinner/ps-spinner';
|
|
10
10
|
import { PsText } from '../ps-text/ps-text';
|
|
11
|
-
export const PsSheetHeader = ({ eyebrow, isLeadingDisabled = false, leadingLabel, onLeadingPress, title, trailing, }) => {
|
|
11
|
+
export const PsSheetHeader = ({ eyebrow, isLeadingDisabled = false, leadingKind = 'close', leadingLabel, onLeadingPress, title, trailing, }) => {
|
|
12
12
|
const theme = usePsMobileTheme();
|
|
13
13
|
const trailingColor = trailing?.tone === 'danger' ? theme.danger : theme.primary;
|
|
14
14
|
const trailingContrast = trailing?.tone === 'danger' ? theme.white : theme.primaryContrast;
|
|
@@ -21,7 +21,7 @@ export const PsSheetHeader = ({ eyebrow, isLeadingDisabled = false, leadingLabel
|
|
|
21
21
|
paddingBottom: PsSheetConfig.headerPaddingBottom,
|
|
22
22
|
paddingHorizontal: PsSheetConfig.headerPaddingHorizontal,
|
|
23
23
|
paddingTop: PsSheetConfig.headerPaddingTop,
|
|
24
|
-
}, testID: 'ps-sheet-header', children: [_jsx(View, { style: { alignItems: 'flex-start', minWidth: PsSheetConfig.actionMinWidth }, children: leadingLabel === undefined ? null : (_jsx(PsIconButton, { iconKey: PsIconKey.Close, isDisabled: isLeadingDisabled, label: leadingLabel, onPress: onLeadingPress, testID: 'ps-sheet-leading', variant: 'header' })) }), _jsxs(View, { style: { alignItems: 'center', flex: 1 }, children: [_jsx(PsText, { accessibilityRole: 'header', align: 'center', numberOfLines: 2, weight: 'bold', children: title }), eyebrow === undefined ? null : (_jsx(PsText, { align: 'center', numberOfLines: 1, tone: 'muted', variant: 'small', children: eyebrow }))] }), _jsx(View, { style: { alignItems: 'flex-end', minWidth: PsSheetConfig.actionMinWidth }, children: trailing === undefined ? null : trailing.isSubmitting === true ? (_jsx(View, { accessibilityLabel: trailing.label, accessibilityState: { busy: true }, style: {
|
|
24
|
+
}, testID: 'ps-sheet-header', children: [_jsx(View, { style: { alignItems: 'flex-start', minWidth: PsSheetConfig.actionMinWidth }, children: leadingLabel === undefined ? null : (_jsx(View, { style: PsSheetService.leadingIconStyle(leadingKind), children: _jsx(PsIconButton, { iconKey: leadingKind === 'back' ? PsIconKey.ChevronRight : PsIconKey.Close, isDisabled: isLeadingDisabled, label: leadingLabel, onPress: onLeadingPress, testID: 'ps-sheet-leading', variant: 'header' }) })) }), _jsxs(View, { style: { alignItems: 'center', flex: 1 }, children: [_jsx(PsText, { accessibilityRole: 'header', align: 'center', numberOfLines: 2, weight: 'bold', children: title }), eyebrow === undefined ? null : (_jsx(PsText, { align: 'center', numberOfLines: 1, tone: 'muted', variant: 'small', children: eyebrow }))] }), _jsx(View, { style: { alignItems: 'flex-end', minWidth: PsSheetConfig.actionMinWidth }, children: trailing === undefined ? null : trailing.isSubmitting === true ? (_jsx(View, { accessibilityLabel: trailing.label, accessibilityState: { busy: true }, style: {
|
|
25
25
|
alignItems: 'center',
|
|
26
26
|
backgroundColor: trailingColor,
|
|
27
27
|
borderRadius: PsPageHeaderConfig.buttonSize / 2,
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface PsSheetPageViewProps {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
isAnimated: boolean;
|
|
5
|
+
isPage: boolean;
|
|
6
|
+
pageId: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const PsSheetPageView: ({ children, isAnimated, isPage, pageId }: PsSheetPageViewProps) => import("react").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import Animated, { SlideInLeft, SlideInRight } from 'react-native-reanimated';
|
|
3
|
+
import { PsSheetPageConfig } from '../../constants/ps-sheet-page-config';
|
|
4
|
+
import { usePsMobileTheme } from '../../hooks/use-ps-mobile-theme';
|
|
5
|
+
export const PsSheetPageView = ({ children, isAnimated, isPage, pageId }) => {
|
|
6
|
+
const theme = usePsMobileTheme();
|
|
7
|
+
const entering = theme.isReduceMotion || !isAnimated
|
|
8
|
+
? undefined
|
|
9
|
+
: (isPage ? SlideInRight : SlideInLeft).duration(PsSheetPageConfig.duration);
|
|
10
|
+
return (_jsx(Animated.View, { entering: entering, testID: `ps-sheet-page-${pageId}`, children: children }, pageId));
|
|
11
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useRef, useState } from 'react';
|
|
2
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
3
3
|
import { BottomSheet, Group, RNHostView } from '@expo/ui/swift-ui';
|
|
4
4
|
import { frame, interactiveDismissDisabled, presentationBackground, presentationDetents, presentationDragIndicator, } from '@expo/ui/swift-ui/modifiers';
|
|
5
5
|
import { PsNativeTreeContext } from '../../contexts/ps-native-tree-context';
|
|
@@ -14,6 +14,13 @@ export const PsSheetPresenter = ({ children, isDismissBlocked, isOpen, onClose,
|
|
|
14
14
|
const [height, setHeight] = useState(0);
|
|
15
15
|
isOpenRef.current = isOpen;
|
|
16
16
|
isBlockedRef.current = isDismissBlocked;
|
|
17
|
+
const measure = useCallback((next) => {
|
|
18
|
+
setHeight((previous) => PsSheetService.grownHeight(previous, next, isOpenRef.current));
|
|
19
|
+
}, []);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
if (!isOpen)
|
|
22
|
+
setHeight(0);
|
|
23
|
+
}, [isOpen]);
|
|
17
24
|
return (_jsx(PsHost, { matchContents: true, children: _jsx(BottomSheet, { isPresented: isOpen, onIsPresentedChange: (isPresented) => {
|
|
18
25
|
if (PsSheetService.shouldClose(isPresented, isOpenRef.current, isBlockedRef.current)) {
|
|
19
26
|
onClose();
|
|
@@ -24,5 +31,5 @@ export const PsSheetPresenter = ({ children, isDismissBlocked, isOpen, onClose,
|
|
|
24
31
|
presentationDragIndicator('visible'),
|
|
25
32
|
presentationBackground(theme.background),
|
|
26
33
|
interactiveDismissDisabled(isDismissBlocked),
|
|
27
|
-
], children: _jsx(RNHostView, { matchContents: { vertical: true }, children: _jsx(PsNativeTreeContext.Provider, { value: false, children: _jsx(PsSheetMeasureContext.Provider, { value:
|
|
34
|
+
], children: _jsx(RNHostView, { matchContents: { vertical: true }, children: _jsx(PsNativeTreeContext.Provider, { value: false, children: _jsx(PsSheetMeasureContext.Provider, { value: measure, children: children }) }) }) }) }) }));
|
|
28
35
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useState } from 'react';
|
|
3
|
+
import { PsTabBarContext } from '../../contexts/ps-tab-bar-context';
|
|
4
|
+
export const PsTabBarProvider = ({ children }) => {
|
|
5
|
+
const [isHidden, setIsHidden] = useState(false);
|
|
6
|
+
const value = useMemo(() => ({ isHidden, setIsHidden }), [isHidden]);
|
|
7
|
+
return _jsx(PsTabBarContext.Provider, { value: value, children: children });
|
|
8
|
+
};
|
|
@@ -25,7 +25,7 @@ export const PsTabs = ({ getItemIcon, getItemKey, getItemLabel, isLoading = fals
|
|
|
25
25
|
return (_jsx(View, { onLayout: (event) => setViewportWidth(event.nativeEvent.layout.width), style: { borderBottomColor: theme.line, borderBottomWidth: 1 }, children: _jsx(ScrollView, { accessibilityRole: 'tablist', contentContainerStyle: { flexGrow: 1 }, horizontal: true, ref: scroll, showsHorizontalScrollIndicator: false, children: items.map((item) => {
|
|
26
26
|
const key = getItemKey(item);
|
|
27
27
|
const isSelected = key === selectedKey;
|
|
28
|
-
const color = isSelected ? theme.
|
|
28
|
+
const color = isSelected ? theme.primaryText : theme.muted;
|
|
29
29
|
return (_jsxs(Pressable, { accessibilityRole: 'tab', accessibilityState: { selected: isSelected }, onLayout: (event) => frames.current.set(key, {
|
|
30
30
|
width: event.nativeEvent.layout.width,
|
|
31
31
|
x: event.nativeEvent.layout.x,
|
|
@@ -6,7 +6,7 @@ export const PsTextLink = ({ children, onPress, tone = 'emphasis' }) => {
|
|
|
6
6
|
const isEmphasis = tone === 'emphasis';
|
|
7
7
|
const isWhite = tone === 'white';
|
|
8
8
|
return (_jsx(PsText, { accessibilityRole: 'link', onPress: onPress, style: {
|
|
9
|
-
textDecorationColor: isEmphasis ? theme.
|
|
9
|
+
textDecorationColor: isEmphasis ? theme.primaryText : isWhite ? theme.white : theme.muted,
|
|
10
10
|
textDecorationLine: 'underline',
|
|
11
11
|
}, tone: isWhite ? 'white' : isEmphasis ? 'ink' : 'muted', weight: isEmphasis || isWhite ? 'semibold' : 'regular', children: children }));
|
|
12
12
|
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const PsAppLockConfig: {
|
|
2
|
+
readonly activeState: "active";
|
|
3
|
+
readonly backgroundState: "background";
|
|
4
|
+
readonly inactiveState: "inactive";
|
|
5
|
+
readonly defaultGraceSeconds: 60;
|
|
6
|
+
readonly iosPlatform: "ios";
|
|
7
|
+
readonly nativeModuleName: "ExpoLocalAuthentication";
|
|
8
|
+
readonly layout: {
|
|
9
|
+
readonly gap: 24;
|
|
10
|
+
readonly horizontalPadding: 20;
|
|
11
|
+
readonly maxWidth: 384;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const PsAppLockConfig = {
|
|
2
|
+
activeState: 'active',
|
|
3
|
+
backgroundState: 'background',
|
|
4
|
+
inactiveState: 'inactive',
|
|
5
|
+
defaultGraceSeconds: 60,
|
|
6
|
+
iosPlatform: 'ios',
|
|
7
|
+
nativeModuleName: 'ExpoLocalAuthentication',
|
|
8
|
+
layout: {
|
|
9
|
+
gap: 24,
|
|
10
|
+
horizontalPadding: 20,
|
|
11
|
+
maxWidth: 384,
|
|
12
|
+
},
|
|
13
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const PsMenuTileConfig: {
|
|
2
|
+
readonly dataUriPrefix: "data:image/png;base64,";
|
|
3
|
+
readonly fontSize: 40;
|
|
4
|
+
readonly initialsFontSize: 34;
|
|
5
|
+
readonly logoPadding: 12;
|
|
6
|
+
readonly roundedRadius: 22;
|
|
7
|
+
readonly size: 96;
|
|
8
|
+
readonly textBaseline: 0.36;
|
|
9
|
+
};
|
|
@@ -26,8 +26,6 @@ export declare const PsMobileControlConfig: {
|
|
|
26
26
|
readonly iconSizeInline: PallasoftControlMetric.IconInline;
|
|
27
27
|
readonly iconSizeStandalone: PallasoftControlMetric.IconStandalone;
|
|
28
28
|
readonly neutralAlpha: 0.08;
|
|
29
|
-
readonly overlayAlpha: 0.4;
|
|
30
|
-
readonly overlayAlphaDark: 0.7;
|
|
31
29
|
readonly pillRadius: 999;
|
|
32
30
|
readonly pressedAlpha: 0.06;
|
|
33
31
|
readonly pressedBorderAlpha: 0.4;
|
|
@@ -37,19 +35,9 @@ export declare const PsMobileControlConfig: {
|
|
|
37
35
|
readonly ringWidth: 2;
|
|
38
36
|
readonly rowSpacing: 12;
|
|
39
37
|
readonly skeletonAlpha: 0.1;
|
|
40
|
-
readonly skeletonBaseAlpha: {
|
|
41
|
-
readonly dark: 0.05;
|
|
42
|
-
readonly light: 0.08;
|
|
43
|
-
};
|
|
44
38
|
readonly skeletonLineHeight: 12;
|
|
45
39
|
readonly skeletonListCount: 5;
|
|
46
|
-
readonly skeletonSweepAlpha: {
|
|
47
|
-
readonly dark: 0.08;
|
|
48
|
-
readonly light: 0.14;
|
|
49
|
-
};
|
|
50
40
|
readonly skeletonSweepMs: 1400;
|
|
51
41
|
readonly skeletonTextLines: 3;
|
|
52
|
-
readonly softAlphaDark: 0.2;
|
|
53
|
-
readonly softAlphaLight: 0.16;
|
|
54
42
|
readonly spinnerSize: 18;
|
|
55
43
|
};
|
|
@@ -22,8 +22,6 @@ export const PsMobileControlConfig = {
|
|
|
22
22
|
iconSizeInline: PallasoftControlMetric.IconInline,
|
|
23
23
|
iconSizeStandalone: PallasoftControlMetric.IconStandalone,
|
|
24
24
|
neutralAlpha: 0.08,
|
|
25
|
-
overlayAlpha: 0.4,
|
|
26
|
-
overlayAlphaDark: 0.7,
|
|
27
25
|
pillRadius: 999,
|
|
28
26
|
pressedAlpha: 0.06,
|
|
29
27
|
pressedBorderAlpha: 0.4,
|
|
@@ -33,13 +31,9 @@ export const PsMobileControlConfig = {
|
|
|
33
31
|
ringWidth: 2,
|
|
34
32
|
rowSpacing: 12,
|
|
35
33
|
skeletonAlpha: 0.1,
|
|
36
|
-
skeletonBaseAlpha: { dark: 0.05, light: 0.08 },
|
|
37
34
|
skeletonLineHeight: 12,
|
|
38
35
|
skeletonListCount: 5,
|
|
39
|
-
skeletonSweepAlpha: { dark: 0.08, light: 0.14 },
|
|
40
36
|
skeletonSweepMs: 1400,
|
|
41
37
|
skeletonTextLines: 3,
|
|
42
|
-
softAlphaDark: 0.2,
|
|
43
|
-
softAlphaLight: 0.16,
|
|
44
38
|
spinnerSize: 18,
|
|
45
39
|
};
|
|
@@ -1,35 +1,127 @@
|
|
|
1
1
|
export declare const PsSfSymbolConfig: {
|
|
2
2
|
readonly symbols: {
|
|
3
|
+
arrow: "arrow.right";
|
|
4
|
+
audio: "waveform";
|
|
3
5
|
bank: "building.columns";
|
|
4
6
|
bell: "bell";
|
|
7
|
+
book: "book";
|
|
5
8
|
calendar: "calendar";
|
|
6
9
|
camera: "camera";
|
|
10
|
+
'camera-off': "camera.badge.ellipsis";
|
|
11
|
+
chart: "chart.bar";
|
|
12
|
+
chat: "bubble.left";
|
|
7
13
|
check: "checkmark";
|
|
14
|
+
chevron: "chevron.down";
|
|
15
|
+
'chevron-right': "chevron.right";
|
|
16
|
+
clipboard: "list.clipboard";
|
|
8
17
|
clock: "clock";
|
|
9
18
|
close: "xmark";
|
|
19
|
+
columns: "rectangle.split.3x1";
|
|
20
|
+
'credit-card': "creditcard";
|
|
21
|
+
crop: "crop";
|
|
10
22
|
doc: "doc.text";
|
|
11
23
|
download: "arrow.down.circle";
|
|
24
|
+
expand: "arrow.up.left.and.arrow.down.right";
|
|
12
25
|
eye: "eye";
|
|
26
|
+
'eye-off': "eye.slash";
|
|
13
27
|
file: "doc";
|
|
28
|
+
filter: "line.3.horizontal.decrease";
|
|
29
|
+
flash: "bolt";
|
|
14
30
|
forward: "arrowshape.turn.up.right";
|
|
31
|
+
globe: "globe";
|
|
32
|
+
help: "questionmark.circle";
|
|
15
33
|
home: "house";
|
|
16
34
|
image: "photo";
|
|
35
|
+
inbox: "tray";
|
|
17
36
|
invoice: "doc.plaintext";
|
|
37
|
+
layers: "square.stack.3d.up";
|
|
38
|
+
lifebuoy: "lifepreserver";
|
|
39
|
+
lightbulb: "lightbulb";
|
|
40
|
+
linkedin: "link";
|
|
41
|
+
location: "mappin.and.ellipse";
|
|
18
42
|
mail: "envelope";
|
|
43
|
+
menu: "line.3.horizontal";
|
|
44
|
+
minus: "minus.circle";
|
|
45
|
+
moon: "moon";
|
|
19
46
|
more: "ellipsis";
|
|
47
|
+
palette: "paintpalette";
|
|
48
|
+
pallabuzz: "app";
|
|
49
|
+
pallaforge: "app";
|
|
50
|
+
pause: "pause";
|
|
51
|
+
payroll: "person.2";
|
|
20
52
|
pencil: "pencil";
|
|
53
|
+
play: "play";
|
|
21
54
|
plus: "plus";
|
|
22
55
|
receipt: "scroll";
|
|
23
56
|
refresh: "arrow.clockwise";
|
|
24
57
|
reports: "chart.bar";
|
|
58
|
+
rewind: "backward";
|
|
59
|
+
rotate: "rotate.right";
|
|
60
|
+
scale: "scalemass";
|
|
25
61
|
scan: "doc.viewfinder";
|
|
62
|
+
search: "magnifyingglass";
|
|
26
63
|
settings: "gearshape";
|
|
27
64
|
share: "square.and.arrow.up";
|
|
65
|
+
sheet: "tablecells";
|
|
66
|
+
shield: "shield";
|
|
28
67
|
'sign-out': "rectangle.portrait.and.arrow.right";
|
|
68
|
+
smile: "face.smiling";
|
|
69
|
+
sort: "arrow.up.arrow.down";
|
|
70
|
+
'sort-ascending': "arrow.up";
|
|
71
|
+
'sort-descending': "arrow.down";
|
|
72
|
+
spark: "sparkles";
|
|
73
|
+
star: "star";
|
|
74
|
+
sun: "sun.max";
|
|
29
75
|
swap: "arrow.left.arrow.right";
|
|
76
|
+
tax: "percent";
|
|
77
|
+
text: "text.alignleft";
|
|
30
78
|
trash: "trash";
|
|
31
79
|
upload: "square.and.arrow.up";
|
|
32
80
|
user: "person.crop.circle";
|
|
81
|
+
video: "video";
|
|
82
|
+
wallet: "wallet.bifold";
|
|
83
|
+
warning: "exclamationmark.triangle";
|
|
84
|
+
x: "xmark";
|
|
85
|
+
'zoom-in': "plus.magnifyingglass";
|
|
86
|
+
'zoom-out': "minus.magnifyingglass";
|
|
87
|
+
};
|
|
88
|
+
readonly monograms: {
|
|
89
|
+
'0': "0.circle.fill";
|
|
90
|
+
'1': "1.circle.fill";
|
|
91
|
+
'2': "2.circle.fill";
|
|
92
|
+
'3': "3.circle.fill";
|
|
93
|
+
'4': "4.circle.fill";
|
|
94
|
+
'5': "5.circle.fill";
|
|
95
|
+
'6': "6.circle.fill";
|
|
96
|
+
'7': "7.circle.fill";
|
|
97
|
+
'8': "8.circle.fill";
|
|
98
|
+
'9': "9.circle.fill";
|
|
99
|
+
a: "a.circle.fill";
|
|
100
|
+
b: "b.circle.fill";
|
|
101
|
+
c: "c.circle.fill";
|
|
102
|
+
d: "d.circle.fill";
|
|
103
|
+
e: "e.circle.fill";
|
|
104
|
+
f: "f.circle.fill";
|
|
105
|
+
g: "g.circle.fill";
|
|
106
|
+
h: "h.circle.fill";
|
|
107
|
+
i: "i.circle.fill";
|
|
108
|
+
j: "j.circle.fill";
|
|
109
|
+
k: "k.circle.fill";
|
|
110
|
+
l: "l.circle.fill";
|
|
111
|
+
m: "m.circle.fill";
|
|
112
|
+
n: "n.circle.fill";
|
|
113
|
+
o: "o.circle.fill";
|
|
114
|
+
p: "p.circle.fill";
|
|
115
|
+
q: "q.circle.fill";
|
|
116
|
+
r: "r.circle.fill";
|
|
117
|
+
s: "s.circle.fill";
|
|
118
|
+
t: "t.circle.fill";
|
|
119
|
+
u: "u.circle.fill";
|
|
120
|
+
v: "v.circle.fill";
|
|
121
|
+
w: "w.circle.fill";
|
|
122
|
+
x: "x.circle.fill";
|
|
123
|
+
y: "y.circle.fill";
|
|
124
|
+
z: "z.circle.fill";
|
|
33
125
|
};
|
|
34
126
|
readonly checkedSymbol: "checkmark";
|
|
35
127
|
readonly headerSymbol: "person.crop.circle.fill";
|