@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.
Files changed (159) hide show
  1. package/dist/components/ps-action-menu/ps-action-menu-avatar-entry.d.ts +5 -0
  2. package/dist/components/ps-action-menu/ps-action-menu-avatar-entry.js +16 -0
  3. package/dist/components/ps-action-menu/ps-action-menu-entries.js +4 -2
  4. package/dist/components/ps-action-menu/ps-action-menu-labelled.d.ts +2 -1
  5. package/dist/components/ps-action-menu/ps-action-menu-labelled.js +2 -2
  6. package/dist/components/ps-action-menu/ps-action-menu.android.js +1 -1
  7. package/dist/components/ps-action-menu/ps-action-menu.ios.js +10 -1
  8. package/dist/components/ps-action-menu/ps-menu-tile-canvas.d.ts +6 -0
  9. package/dist/components/ps-action-menu/ps-menu-tile-canvas.js +5 -0
  10. package/dist/components/ps-action-menu/ps-menu-tile-drawing.d.ts +6 -0
  11. package/dist/components/ps-action-menu/ps-menu-tile-drawing.js +34 -0
  12. package/dist/components/ps-app-lock-screen/index.d.ts +2 -0
  13. package/dist/components/ps-app-lock-screen/index.js +2 -0
  14. package/dist/components/ps-app-lock-screen/ps-app-lock-screen-props.d.ts +9 -0
  15. package/dist/components/ps-app-lock-screen/ps-app-lock-screen-props.js +1 -0
  16. package/dist/components/ps-app-lock-screen/ps-app-lock-screen.d.ts +2 -0
  17. package/dist/components/ps-app-lock-screen/ps-app-lock-screen.js +19 -0
  18. package/dist/components/ps-chip/ps-chip.js +1 -1
  19. package/dist/components/ps-form-sheet/ps-form-sheet-props.d.ts +2 -0
  20. package/dist/components/ps-form-sheet/ps-form-sheet.d.ts +1 -1
  21. package/dist/components/ps-form-sheet/ps-form-sheet.js +17 -7
  22. package/dist/components/ps-list/ps-list-context-menu.js +1 -1
  23. package/dist/components/ps-list/ps-list-link-menu-entry.d.ts +5 -0
  24. package/dist/components/ps-list/ps-list-link-menu-entry.js +11 -0
  25. package/dist/components/ps-list/ps-list-link-menu.d.ts +10 -0
  26. package/dist/components/ps-list/ps-list-link-menu.js +16 -0
  27. package/dist/components/ps-list/ps-list-link-row.js +1 -1
  28. package/dist/components/ps-list/ps-list-props.d.ts +3 -1
  29. package/dist/components/ps-list/ps-list-row-body.js +2 -4
  30. package/dist/components/ps-list/ps-list-row.d.ts +1 -1
  31. package/dist/components/ps-list/ps-list-row.js +3 -2
  32. package/dist/components/ps-mobile-theme-provider/ps-mobile-theme-provider-props.d.ts +4 -2
  33. package/dist/components/ps-mobile-theme-provider/ps-mobile-theme-provider.d.ts +1 -1
  34. package/dist/components/ps-mobile-theme-provider/ps-mobile-theme-provider.js +20 -10
  35. package/dist/components/ps-native-menu/ps-native-menu.android.js +1 -1
  36. package/dist/components/ps-option-picker/index.d.ts +2 -0
  37. package/dist/components/ps-option-picker/index.js +2 -0
  38. package/dist/components/ps-option-picker/ps-option-picker-props.d.ts +16 -0
  39. package/dist/components/ps-option-picker/ps-option-picker-props.js +1 -0
  40. package/dist/components/ps-option-picker/ps-option-picker.d.ts +2 -0
  41. package/dist/components/ps-option-picker/ps-option-picker.js +33 -0
  42. package/dist/components/ps-privacy-cover/index.d.ts +2 -0
  43. package/dist/components/ps-privacy-cover/index.js +2 -0
  44. package/dist/components/ps-privacy-cover/ps-privacy-cover-props.d.ts +4 -0
  45. package/dist/components/ps-privacy-cover/ps-privacy-cover-props.js +1 -0
  46. package/dist/components/ps-privacy-cover/ps-privacy-cover.d.ts +2 -0
  47. package/dist/components/ps-privacy-cover/ps-privacy-cover.js +17 -0
  48. package/dist/components/ps-search-select-field/index.d.ts +2 -0
  49. package/dist/components/ps-search-select-field/index.js +2 -0
  50. package/dist/components/ps-search-select-field/ps-search-select-field-props.d.ts +10 -0
  51. package/dist/components/ps-search-select-field/ps-search-select-field-props.js +1 -0
  52. package/dist/components/ps-search-select-field/ps-search-select-field.d.ts +2 -0
  53. package/dist/components/ps-search-select-field/ps-search-select-field.js +15 -0
  54. package/dist/components/ps-selection-mode/index.d.ts +2 -0
  55. package/dist/components/ps-selection-mode/index.js +2 -0
  56. package/dist/components/ps-selection-mode/ps-selection-mode-props.d.ts +13 -0
  57. package/dist/components/ps-selection-mode/ps-selection-mode-props.js +1 -0
  58. package/dist/components/ps-selection-mode/ps-selection-mode.d.ts +2 -0
  59. package/dist/components/ps-selection-mode/ps-selection-mode.js +28 -0
  60. package/dist/components/ps-sheet/ps-sheet-props.d.ts +4 -1
  61. package/dist/components/ps-sheet/ps-sheet.d.ts +1 -1
  62. package/dist/components/ps-sheet/ps-sheet.js +4 -5
  63. package/dist/components/ps-sheet-header/ps-sheet-header-props.d.ts +2 -0
  64. package/dist/components/ps-sheet-header/ps-sheet-header.d.ts +1 -1
  65. package/dist/components/ps-sheet-header/ps-sheet-header.js +2 -2
  66. package/dist/components/ps-sheet-page/ps-sheet-page-view.d.ts +8 -0
  67. package/dist/components/ps-sheet-page/ps-sheet-page-view.js +11 -0
  68. package/dist/components/ps-sheet-presenter/ps-sheet-presenter.ios.js +9 -2
  69. package/dist/components/ps-tab-bar-provider/index.d.ts +2 -0
  70. package/dist/components/ps-tab-bar-provider/index.js +2 -0
  71. package/dist/components/ps-tab-bar-provider/ps-tab-bar-provider-props.d.ts +4 -0
  72. package/dist/components/ps-tab-bar-provider/ps-tab-bar-provider-props.js +1 -0
  73. package/dist/components/ps-tab-bar-provider/ps-tab-bar-provider.d.ts +2 -0
  74. package/dist/components/ps-tab-bar-provider/ps-tab-bar-provider.js +8 -0
  75. package/dist/components/ps-tabs/ps-tabs.js +1 -1
  76. package/dist/components/ps-text-link/ps-text-link.js +1 -1
  77. package/dist/constants/ps-app-lock-config.d.ts +13 -0
  78. package/dist/constants/ps-app-lock-config.js +13 -0
  79. package/dist/constants/ps-app-lock-native-codes.d.ts +10 -0
  80. package/dist/constants/ps-app-lock-native-codes.js +10 -0
  81. package/dist/constants/ps-biometry-kind.d.ts +7 -0
  82. package/dist/constants/ps-biometry-kind.js +6 -0
  83. package/dist/constants/ps-list-config.d.ts +2 -0
  84. package/dist/constants/ps-list-config.js +2 -0
  85. package/dist/constants/ps-menu-tile-config.d.ts +9 -0
  86. package/dist/constants/ps-menu-tile-config.js +9 -0
  87. package/dist/constants/ps-mobile-control-config.d.ts +0 -12
  88. package/dist/constants/ps-mobile-control-config.js +0 -6
  89. package/dist/constants/ps-option-picker-config.d.ts +6 -0
  90. package/dist/constants/ps-option-picker-config.js +6 -0
  91. package/dist/constants/ps-sf-symbol-config.d.ts +92 -0
  92. package/dist/constants/ps-sf-symbol-config.js +92 -0
  93. package/dist/constants/ps-sheet-page-config.d.ts +4 -0
  94. package/dist/constants/ps-sheet-page-config.js +4 -0
  95. package/dist/contexts/ps-tab-bar-context.d.ts +2 -0
  96. package/dist/contexts/ps-tab-bar-context.js +5 -0
  97. package/dist/hooks/use-ps-app-lock.d.ts +3 -0
  98. package/dist/hooks/use-ps-app-lock.js +72 -0
  99. package/dist/hooks/use-ps-menu-tiles.d.ts +4 -0
  100. package/dist/hooks/use-ps-menu-tiles.js +8 -0
  101. package/dist/hooks/use-ps-tab-bar.d.ts +2 -0
  102. package/dist/hooks/use-ps-tab-bar.js +3 -0
  103. package/dist/index.d.ts +18 -0
  104. package/dist/index.js +18 -0
  105. package/dist/interfaces/ps-action-menu-header.d.ts +1 -0
  106. package/dist/interfaces/ps-app-lock-native.d.ts +13 -0
  107. package/dist/interfaces/ps-app-lock-native.js +1 -0
  108. package/dist/interfaces/ps-app-lock-prompt.d.ts +4 -0
  109. package/dist/interfaces/ps-app-lock-prompt.js +1 -0
  110. package/dist/interfaces/ps-menu-item.d.ts +2 -0
  111. package/dist/interfaces/ps-menu-tile-request.d.ts +7 -0
  112. package/dist/interfaces/ps-menu-tile-request.js +1 -0
  113. package/dist/interfaces/ps-menu-tile-shape.d.ts +1 -0
  114. package/dist/interfaces/ps-menu-tile-shape.js +1 -0
  115. package/dist/interfaces/ps-mobile-brand-colors.d.ts +5 -0
  116. package/dist/interfaces/ps-mobile-brand-colors.js +1 -0
  117. package/dist/interfaces/ps-mobile-brand-input.d.ts +7 -0
  118. package/dist/interfaces/ps-mobile-brand-input.js +1 -0
  119. package/dist/interfaces/ps-mobile-theme-input.d.ts +1 -1
  120. package/dist/interfaces/ps-mobile-theme.d.ts +32 -0
  121. package/dist/interfaces/ps-sheet-leading-kind.d.ts +1 -0
  122. package/dist/interfaces/ps-sheet-leading-kind.js +1 -0
  123. package/dist/interfaces/ps-sheet-page.d.ts +8 -0
  124. package/dist/interfaces/ps-sheet-page.js +1 -0
  125. package/dist/interfaces/ps-tab-bar-context-data.d.ts +4 -0
  126. package/dist/interfaces/ps-tab-bar-context-data.js +1 -0
  127. package/dist/interfaces/use-ps-app-lock-options.d.ts +6 -0
  128. package/dist/interfaces/use-ps-app-lock-options.js +1 -0
  129. package/dist/interfaces/use-ps-app-lock-result.d.ts +7 -0
  130. package/dist/interfaces/use-ps-app-lock-result.js +1 -0
  131. package/dist/services/ps-action-menu-service.d.ts +4 -0
  132. package/dist/services/ps-action-menu-service.js +25 -2
  133. package/dist/services/ps-app-lock-grace-service.d.ts +6 -0
  134. package/dist/services/ps-app-lock-grace-service.js +17 -0
  135. package/dist/services/ps-app-lock-service.d.ts +10 -0
  136. package/dist/services/ps-app-lock-service.js +84 -0
  137. package/dist/services/ps-badge-tone-service.js +3 -3
  138. package/dist/services/ps-button-style-service.js +2 -2
  139. package/dist/services/ps-context-menu-service.d.ts +1 -0
  140. package/dist/services/ps-context-menu-service.js +13 -0
  141. package/dist/services/ps-list-row-style-service.d.ts +4 -0
  142. package/dist/services/ps-list-row-style-service.js +11 -0
  143. package/dist/services/ps-menu-tile-service.d.ts +16 -0
  144. package/dist/services/ps-menu-tile-service.js +70 -0
  145. package/dist/services/ps-menu-tile-style-service.d.ts +4 -0
  146. package/dist/services/ps-menu-tile-style-service.js +5 -0
  147. package/dist/services/ps-mobile-brand-service.d.ts +5 -0
  148. package/dist/services/ps-mobile-brand-service.js +24 -0
  149. package/dist/services/ps-mobile-theme-service.d.ts +0 -2
  150. package/dist/services/ps-mobile-theme-service.js +64 -94
  151. package/dist/services/ps-option-picker-service.d.ts +8 -0
  152. package/dist/services/ps-option-picker-service.js +10 -0
  153. package/dist/services/ps-selection-service.d.ts +5 -0
  154. package/dist/services/ps-selection-service.js +13 -0
  155. package/dist/services/ps-sheet-service.d.ts +5 -0
  156. package/dist/services/ps-sheet-service.js +11 -0
  157. package/dist/services/ps-text-service.js +4 -4
  158. package/jest-setup.js +71 -0
  159. package/package.json +14 -2
@@ -0,0 +1,2 @@
1
+ export * from './ps-search-select-field';
2
+ export * from './ps-search-select-field-props';
@@ -0,0 +1,2 @@
1
+ export * from './ps-search-select-field';
2
+ export * from './ps-search-select-field-props';
@@ -0,0 +1,10 @@
1
+ export interface PsSearchSelectFieldProps {
2
+ errorText?: string;
3
+ helperText?: string;
4
+ isDisabled?: boolean;
5
+ isLoading?: boolean;
6
+ label: string;
7
+ onPress: () => void;
8
+ placeholder?: string;
9
+ selectedLabel: string;
10
+ }
@@ -0,0 +1,2 @@
1
+ import type { PsSearchSelectFieldProps } from './ps-search-select-field-props';
2
+ export declare const PsSearchSelectField: ({ errorText, helperText, isDisabled, isLoading, label, onPress, placeholder, selectedLabel, }: PsSearchSelectFieldProps) => import("react").JSX.Element;
@@ -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,2 @@
1
+ export * from './ps-selection-mode';
2
+ export * from './ps-selection-mode-props';
@@ -0,0 +1,2 @@
1
+ export * from './ps-selection-mode';
2
+ export * from './ps-selection-mode-props';
@@ -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,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 === undefined
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: setHeight, children: children }) }) }) }) }) }));
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,2 @@
1
+ export * from './ps-tab-bar-provider';
2
+ export * from './ps-tab-bar-provider-props';
@@ -0,0 +1,2 @@
1
+ export * from './ps-tab-bar-provider';
2
+ export * from './ps-tab-bar-provider-props';
@@ -0,0 +1,4 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface PsTabBarProviderProps {
3
+ children: ReactNode;
4
+ }
@@ -0,0 +1,2 @@
1
+ import type { PsTabBarProviderProps } from './ps-tab-bar-provider-props';
2
+ export declare const PsTabBarProvider: ({ children }: PsTabBarProviderProps) => import("react").JSX.Element;
@@ -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.primary : theme.muted;
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.primary : isWhite ? theme.white : theme.muted,
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,10 @@
1
+ export declare const PsAuthenticationTypeCode: {
2
+ readonly face: 2;
3
+ readonly fingerprint: 1;
4
+ readonly iris: 3;
5
+ };
6
+ export declare const PsSecurityLevelCode: {
7
+ readonly biometricWeak: 2;
8
+ readonly none: 0;
9
+ readonly secret: 1;
10
+ };
@@ -0,0 +1,10 @@
1
+ export const PsAuthenticationTypeCode = {
2
+ face: 2,
3
+ fingerprint: 1,
4
+ iris: 3,
5
+ };
6
+ export const PsSecurityLevelCode = {
7
+ biometricWeak: 2,
8
+ none: 0,
9
+ secret: 1,
10
+ };
@@ -0,0 +1,7 @@
1
+ export declare const PsBiometryKind: {
2
+ readonly face: "face";
3
+ readonly fingerprint: "fingerprint";
4
+ readonly iris: "iris";
5
+ readonly passcode: "passcode";
6
+ };
7
+ export type PsBiometryKind = (typeof PsBiometryKind)[keyof typeof PsBiometryKind];
@@ -0,0 +1,6 @@
1
+ export const PsBiometryKind = {
2
+ face: 'face',
3
+ fingerprint: 'fingerprint',
4
+ iris: 'iris',
5
+ passcode: 'passcode',
6
+ };
@@ -1,6 +1,8 @@
1
1
  export declare const PsListConfig: {
2
2
  readonly contentInset: 16;
3
3
  readonly dividerInset: 16;
4
+ readonly previewHeight: 176;
5
+ readonly previewWidth: 340;
4
6
  readonly sectionRowTitleWidth: 96;
5
7
  readonly skeletonBadgeWidth: 56;
6
8
  readonly skeletonRows: 4;
@@ -1,6 +1,8 @@
1
1
  export const PsListConfig = {
2
2
  contentInset: 16,
3
3
  dividerInset: 16,
4
+ previewHeight: 176,
5
+ previewWidth: 340,
4
6
  sectionRowTitleWidth: 96,
5
7
  skeletonBadgeWidth: 56,
6
8
  skeletonRows: 4,
@@ -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
+ };
@@ -0,0 +1,9 @@
1
+ export const PsMenuTileConfig = {
2
+ dataUriPrefix: 'data:image/png;base64,',
3
+ fontSize: 40,
4
+ initialsFontSize: 34,
5
+ logoPadding: 12,
6
+ roundedRadius: 22,
7
+ size: 96,
8
+ 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
  };
@@ -0,0 +1,6 @@
1
+ export declare const PsOptionPickerConfig: {
2
+ readonly defaultLimit: 50;
3
+ readonly gap: 12;
4
+ readonly rowGap: 2;
5
+ readonly rowPadding: 14;
6
+ };
@@ -0,0 +1,6 @@
1
+ export const PsOptionPickerConfig = {
2
+ defaultLimit: 50,
3
+ gap: 12,
4
+ rowGap: 2,
5
+ rowPadding: 14,
6
+ };
@@ -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";