orn-ui 0.1.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/README.md +107 -0
- package/bin/orn-ui.mjs +228 -0
- package/lib/commonjs/atoms/Avatar.js +42 -0
- package/lib/commonjs/atoms/Avatar.js.map +1 -0
- package/lib/commonjs/atoms/Badge.js +82 -0
- package/lib/commonjs/atoms/Badge.js.map +1 -0
- package/lib/commonjs/atoms/Button.js +222 -0
- package/lib/commonjs/atoms/Button.js.map +1 -0
- package/lib/commonjs/atoms/Card.js +33 -0
- package/lib/commonjs/atoms/Card.js.map +1 -0
- package/lib/commonjs/atoms/Checkbox.js +107 -0
- package/lib/commonjs/atoms/Checkbox.js.map +1 -0
- package/lib/commonjs/atoms/Divider.js +27 -0
- package/lib/commonjs/atoms/Divider.js.map +1 -0
- package/lib/commonjs/atoms/EmptyState.js +69 -0
- package/lib/commonjs/atoms/EmptyState.js.map +1 -0
- package/lib/commonjs/atoms/Fab.js +62 -0
- package/lib/commonjs/atoms/Fab.js.map +1 -0
- package/lib/commonjs/atoms/IconButton.js +60 -0
- package/lib/commonjs/atoms/IconButton.js.map +1 -0
- package/lib/commonjs/atoms/Image.js +113 -0
- package/lib/commonjs/atoms/Image.js.map +1 -0
- package/lib/commonjs/atoms/Input.js +173 -0
- package/lib/commonjs/atoms/Input.js.map +1 -0
- package/lib/commonjs/atoms/KeyValueRow.js +60 -0
- package/lib/commonjs/atoms/KeyValueRow.js.map +1 -0
- package/lib/commonjs/atoms/PressableScale.js +60 -0
- package/lib/commonjs/atoms/PressableScale.js.map +1 -0
- package/lib/commonjs/atoms/Spinner.js +156 -0
- package/lib/commonjs/atoms/Spinner.js.map +1 -0
- package/lib/commonjs/atoms/Text.js +63 -0
- package/lib/commonjs/atoms/Text.js.map +1 -0
- package/lib/commonjs/atoms/index.js +135 -0
- package/lib/commonjs/atoms/index.js.map +1 -0
- package/lib/commonjs/icons/Icon.js +40 -0
- package/lib/commonjs/icons/Icon.js.map +1 -0
- package/lib/commonjs/icons/defaultIcons.js +386 -0
- package/lib/commonjs/icons/defaultIcons.js.map +1 -0
- package/lib/commonjs/icons/index.js +20 -0
- package/lib/commonjs/icons/index.js.map +1 -0
- package/lib/commonjs/icons/types.js +6 -0
- package/lib/commonjs/icons/types.js.map +1 -0
- package/lib/commonjs/index.js +61 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/molecules/AvatarHeader.js +87 -0
- package/lib/commonjs/molecules/AvatarHeader.js.map +1 -0
- package/lib/commonjs/molecules/FormActions.js +47 -0
- package/lib/commonjs/molecules/FormActions.js.map +1 -0
- package/lib/commonjs/molecules/InfoRow.js +83 -0
- package/lib/commonjs/molecules/InfoRow.js.map +1 -0
- package/lib/commonjs/molecules/OptionCard.js +98 -0
- package/lib/commonjs/molecules/OptionCard.js.map +1 -0
- package/lib/commonjs/molecules/Stepper.js +104 -0
- package/lib/commonjs/molecules/Stepper.js.map +1 -0
- package/lib/commonjs/molecules/Steps.js +220 -0
- package/lib/commonjs/molecules/Steps.js.map +1 -0
- package/lib/commonjs/molecules/ThemeToggle.js +91 -0
- package/lib/commonjs/molecules/ThemeToggle.js.map +1 -0
- package/lib/commonjs/molecules/index.js +55 -0
- package/lib/commonjs/molecules/index.js.map +1 -0
- package/lib/commonjs/organisms/Alert.js +223 -0
- package/lib/commonjs/organisms/Alert.js.map +1 -0
- package/lib/commonjs/organisms/AlertProvider.js +109 -0
- package/lib/commonjs/organisms/AlertProvider.js.map +1 -0
- package/lib/commonjs/organisms/BottomSheet.js +154 -0
- package/lib/commonjs/organisms/BottomSheet.js.map +1 -0
- package/lib/commonjs/organisms/DateField.js +147 -0
- package/lib/commonjs/organisms/DateField.js.map +1 -0
- package/lib/commonjs/organisms/DatePicker.js +253 -0
- package/lib/commonjs/organisms/DatePicker.js.map +1 -0
- package/lib/commonjs/organisms/List.js +143 -0
- package/lib/commonjs/organisms/List.js.map +1 -0
- package/lib/commonjs/organisms/Modal.js +286 -0
- package/lib/commonjs/organisms/Modal.js.map +1 -0
- package/lib/commonjs/organisms/Screen.js +75 -0
- package/lib/commonjs/organisms/Screen.js.map +1 -0
- package/lib/commonjs/organisms/SearchList.js +180 -0
- package/lib/commonjs/organisms/SearchList.js.map +1 -0
- package/lib/commonjs/organisms/Select.js +178 -0
- package/lib/commonjs/organisms/Select.js.map +1 -0
- package/lib/commonjs/organisms/Toast.js +157 -0
- package/lib/commonjs/organisms/Toast.js.map +1 -0
- package/lib/commonjs/organisms/ToastProvider.js +131 -0
- package/lib/commonjs/organisms/ToastProvider.js.map +1 -0
- package/lib/commonjs/organisms/Wizard.js +116 -0
- package/lib/commonjs/organisms/Wizard.js.map +1 -0
- package/lib/commonjs/organisms/index.js +127 -0
- package/lib/commonjs/organisms/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/theme/UIProvider.js +110 -0
- package/lib/commonjs/theme/UIProvider.js.map +1 -0
- package/lib/commonjs/theme/createStyles.js +42 -0
- package/lib/commonjs/theme/createStyles.js.map +1 -0
- package/lib/commonjs/theme/createTheme.js +50 -0
- package/lib/commonjs/theme/createTheme.js.map +1 -0
- package/lib/commonjs/theme/index.js +151 -0
- package/lib/commonjs/theme/index.js.map +1 -0
- package/lib/commonjs/theme/insets.js +15 -0
- package/lib/commonjs/theme/insets.js.map +1 -0
- package/lib/commonjs/theme/labels.js +18 -0
- package/lib/commonjs/theme/labels.js.map +1 -0
- package/lib/commonjs/theme/palettes.js +42 -0
- package/lib/commonjs/theme/palettes.js.map +1 -0
- package/lib/commonjs/theme/tokens.js +120 -0
- package/lib/commonjs/theme/tokens.js.map +1 -0
- package/lib/commonjs/theme/types.js +6 -0
- package/lib/commonjs/theme/types.js.map +1 -0
- package/lib/module/atoms/Avatar.js +37 -0
- package/lib/module/atoms/Avatar.js.map +1 -0
- package/lib/module/atoms/Badge.js +77 -0
- package/lib/module/atoms/Badge.js.map +1 -0
- package/lib/module/atoms/Button.js +217 -0
- package/lib/module/atoms/Button.js.map +1 -0
- package/lib/module/atoms/Card.js +28 -0
- package/lib/module/atoms/Card.js.map +1 -0
- package/lib/module/atoms/Checkbox.js +102 -0
- package/lib/module/atoms/Checkbox.js.map +1 -0
- package/lib/module/atoms/Divider.js +22 -0
- package/lib/module/atoms/Divider.js.map +1 -0
- package/lib/module/atoms/EmptyState.js +64 -0
- package/lib/module/atoms/EmptyState.js.map +1 -0
- package/lib/module/atoms/Fab.js +57 -0
- package/lib/module/atoms/Fab.js.map +1 -0
- package/lib/module/atoms/IconButton.js +55 -0
- package/lib/module/atoms/IconButton.js.map +1 -0
- package/lib/module/atoms/Image.js +108 -0
- package/lib/module/atoms/Image.js.map +1 -0
- package/lib/module/atoms/Input.js +168 -0
- package/lib/module/atoms/Input.js.map +1 -0
- package/lib/module/atoms/KeyValueRow.js +55 -0
- package/lib/module/atoms/KeyValueRow.js.map +1 -0
- package/lib/module/atoms/PressableScale.js +55 -0
- package/lib/module/atoms/PressableScale.js.map +1 -0
- package/lib/module/atoms/Spinner.js +151 -0
- package/lib/module/atoms/Spinner.js.map +1 -0
- package/lib/module/atoms/Text.js +58 -0
- package/lib/module/atoms/Text.js.map +1 -0
- package/lib/module/atoms/index.js +18 -0
- package/lib/module/atoms/index.js.map +1 -0
- package/lib/module/icons/Icon.js +35 -0
- package/lib/module/icons/Icon.js.map +1 -0
- package/lib/module/icons/defaultIcons.js +381 -0
- package/lib/module/icons/defaultIcons.js.map +1 -0
- package/lib/module/icons/index.js +5 -0
- package/lib/module/icons/index.js.map +1 -0
- package/lib/module/icons/types.js +4 -0
- package/lib/module/icons/types.js.map +1 -0
- package/lib/module/index.js +8 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/molecules/AvatarHeader.js +82 -0
- package/lib/module/molecules/AvatarHeader.js.map +1 -0
- package/lib/module/molecules/FormActions.js +42 -0
- package/lib/module/molecules/FormActions.js.map +1 -0
- package/lib/module/molecules/InfoRow.js +78 -0
- package/lib/module/molecules/InfoRow.js.map +1 -0
- package/lib/module/molecules/OptionCard.js +93 -0
- package/lib/module/molecules/OptionCard.js.map +1 -0
- package/lib/module/molecules/Stepper.js +99 -0
- package/lib/module/molecules/Stepper.js.map +1 -0
- package/lib/module/molecules/Steps.js +215 -0
- package/lib/module/molecules/Steps.js.map +1 -0
- package/lib/module/molecules/ThemeToggle.js +86 -0
- package/lib/module/molecules/ThemeToggle.js.map +1 -0
- package/lib/module/molecules/index.js +10 -0
- package/lib/module/molecules/index.js.map +1 -0
- package/lib/module/organisms/Alert.js +218 -0
- package/lib/module/organisms/Alert.js.map +1 -0
- package/lib/module/organisms/AlertProvider.js +103 -0
- package/lib/module/organisms/AlertProvider.js.map +1 -0
- package/lib/module/organisms/BottomSheet.js +149 -0
- package/lib/module/organisms/BottomSheet.js.map +1 -0
- package/lib/module/organisms/DateField.js +142 -0
- package/lib/module/organisms/DateField.js.map +1 -0
- package/lib/module/organisms/DatePicker.js +247 -0
- package/lib/module/organisms/DatePicker.js.map +1 -0
- package/lib/module/organisms/List.js +138 -0
- package/lib/module/organisms/List.js.map +1 -0
- package/lib/module/organisms/Modal.js +281 -0
- package/lib/module/organisms/Modal.js.map +1 -0
- package/lib/module/organisms/Screen.js +70 -0
- package/lib/module/organisms/Screen.js.map +1 -0
- package/lib/module/organisms/SearchList.js +175 -0
- package/lib/module/organisms/SearchList.js.map +1 -0
- package/lib/module/organisms/Select.js +173 -0
- package/lib/module/organisms/Select.js.map +1 -0
- package/lib/module/organisms/Toast.js +152 -0
- package/lib/module/organisms/Toast.js.map +1 -0
- package/lib/module/organisms/ToastProvider.js +125 -0
- package/lib/module/organisms/ToastProvider.js.map +1 -0
- package/lib/module/organisms/Wizard.js +111 -0
- package/lib/module/organisms/Wizard.js.map +1 -0
- package/lib/module/organisms/index.js +16 -0
- package/lib/module/organisms/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/theme/UIProvider.js +97 -0
- package/lib/module/theme/UIProvider.js.map +1 -0
- package/lib/module/theme/createStyles.js +38 -0
- package/lib/module/theme/createStyles.js.map +1 -0
- package/lib/module/theme/createTheme.js +45 -0
- package/lib/module/theme/createTheme.js.map +1 -0
- package/lib/module/theme/index.js +10 -0
- package/lib/module/theme/index.js.map +1 -0
- package/lib/module/theme/insets.js +11 -0
- package/lib/module/theme/insets.js.map +1 -0
- package/lib/module/theme/labels.js +14 -0
- package/lib/module/theme/labels.js.map +1 -0
- package/lib/module/theme/palettes.js +38 -0
- package/lib/module/theme/palettes.js.map +1 -0
- package/lib/module/theme/tokens.js +117 -0
- package/lib/module/theme/tokens.js.map +1 -0
- package/lib/module/theme/types.js +4 -0
- package/lib/module/theme/types.js.map +1 -0
- package/lib/typescript/atoms/Avatar.d.ts +15 -0
- package/lib/typescript/atoms/Avatar.d.ts.map +1 -0
- package/lib/typescript/atoms/Badge.d.ts +19 -0
- package/lib/typescript/atoms/Badge.d.ts.map +1 -0
- package/lib/typescript/atoms/Button.d.ts +30 -0
- package/lib/typescript/atoms/Button.d.ts.map +1 -0
- package/lib/typescript/atoms/Card.d.ts +8 -0
- package/lib/typescript/atoms/Card.d.ts.map +1 -0
- package/lib/typescript/atoms/Checkbox.d.ts +11 -0
- package/lib/typescript/atoms/Checkbox.d.ts.map +1 -0
- package/lib/typescript/atoms/Divider.d.ts +8 -0
- package/lib/typescript/atoms/Divider.d.ts.map +1 -0
- package/lib/typescript/atoms/EmptyState.d.ts +12 -0
- package/lib/typescript/atoms/EmptyState.d.ts.map +1 -0
- package/lib/typescript/atoms/Fab.d.ts +22 -0
- package/lib/typescript/atoms/Fab.d.ts.map +1 -0
- package/lib/typescript/atoms/IconButton.d.ts +23 -0
- package/lib/typescript/atoms/IconButton.d.ts.map +1 -0
- package/lib/typescript/atoms/Image.d.ts +45 -0
- package/lib/typescript/atoms/Image.d.ts.map +1 -0
- package/lib/typescript/atoms/Input.d.ts +24 -0
- package/lib/typescript/atoms/Input.d.ts.map +1 -0
- package/lib/typescript/atoms/KeyValueRow.d.ts +17 -0
- package/lib/typescript/atoms/KeyValueRow.d.ts.map +1 -0
- package/lib/typescript/atoms/PressableScale.d.ts +15 -0
- package/lib/typescript/atoms/PressableScale.d.ts.map +1 -0
- package/lib/typescript/atoms/Spinner.d.ts +20 -0
- package/lib/typescript/atoms/Spinner.d.ts.map +1 -0
- package/lib/typescript/atoms/Text.d.ts +13 -0
- package/lib/typescript/atoms/Text.d.ts.map +1 -0
- package/lib/typescript/atoms/index.d.ts +31 -0
- package/lib/typescript/atoms/index.d.ts.map +1 -0
- package/lib/typescript/icons/Icon.d.ts +18 -0
- package/lib/typescript/icons/Icon.d.ts.map +1 -0
- package/lib/typescript/icons/defaultIcons.d.ts +5 -0
- package/lib/typescript/icons/defaultIcons.d.ts.map +1 -0
- package/lib/typescript/icons/index.d.ts +5 -0
- package/lib/typescript/icons/index.d.ts.map +1 -0
- package/lib/typescript/icons/types.d.ts +10 -0
- package/lib/typescript/icons/types.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +6 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/molecules/AvatarHeader.d.ts +20 -0
- package/lib/typescript/molecules/AvatarHeader.d.ts.map +1 -0
- package/lib/typescript/molecules/FormActions.d.ts +21 -0
- package/lib/typescript/molecules/FormActions.d.ts.map +1 -0
- package/lib/typescript/molecules/InfoRow.d.ts +17 -0
- package/lib/typescript/molecules/InfoRow.d.ts.map +1 -0
- package/lib/typescript/molecules/OptionCard.d.ts +20 -0
- package/lib/typescript/molecules/OptionCard.d.ts.map +1 -0
- package/lib/typescript/molecules/Stepper.d.ts +15 -0
- package/lib/typescript/molecules/Stepper.d.ts.map +1 -0
- package/lib/typescript/molecules/Steps.d.ts +29 -0
- package/lib/typescript/molecules/Steps.d.ts.map +1 -0
- package/lib/typescript/molecules/ThemeToggle.d.ts +15 -0
- package/lib/typescript/molecules/ThemeToggle.d.ts.map +1 -0
- package/lib/typescript/molecules/index.d.ts +15 -0
- package/lib/typescript/molecules/index.d.ts.map +1 -0
- package/lib/typescript/organisms/Alert.d.ts +29 -0
- package/lib/typescript/organisms/Alert.d.ts.map +1 -0
- package/lib/typescript/organisms/AlertProvider.d.ts +32 -0
- package/lib/typescript/organisms/AlertProvider.d.ts.map +1 -0
- package/lib/typescript/organisms/BottomSheet.d.ts +15 -0
- package/lib/typescript/organisms/BottomSheet.d.ts.map +1 -0
- package/lib/typescript/organisms/DateField.d.ts +26 -0
- package/lib/typescript/organisms/DateField.d.ts.map +1 -0
- package/lib/typescript/organisms/DatePicker.d.ts +49 -0
- package/lib/typescript/organisms/DatePicker.d.ts.map +1 -0
- package/lib/typescript/organisms/List.d.ts +35 -0
- package/lib/typescript/organisms/List.d.ts.map +1 -0
- package/lib/typescript/organisms/Modal.d.ts +25 -0
- package/lib/typescript/organisms/Modal.d.ts.map +1 -0
- package/lib/typescript/organisms/Screen.d.ts +26 -0
- package/lib/typescript/organisms/Screen.d.ts.map +1 -0
- package/lib/typescript/organisms/SearchList.d.ts +40 -0
- package/lib/typescript/organisms/SearchList.d.ts.map +1 -0
- package/lib/typescript/organisms/Select.d.ts +25 -0
- package/lib/typescript/organisms/Select.d.ts.map +1 -0
- package/lib/typescript/organisms/Toast.d.ts +28 -0
- package/lib/typescript/organisms/Toast.d.ts.map +1 -0
- package/lib/typescript/organisms/ToastProvider.d.ts +36 -0
- package/lib/typescript/organisms/ToastProvider.d.ts.map +1 -0
- package/lib/typescript/organisms/Wizard.d.ts +40 -0
- package/lib/typescript/organisms/Wizard.d.ts.map +1 -0
- package/lib/typescript/organisms/index.d.ts +27 -0
- package/lib/typescript/organisms/index.d.ts.map +1 -0
- package/lib/typescript/theme/UIProvider.d.ts +47 -0
- package/lib/typescript/theme/UIProvider.d.ts.map +1 -0
- package/lib/typescript/theme/createStyles.d.ts +21 -0
- package/lib/typescript/theme/createStyles.d.ts.map +1 -0
- package/lib/typescript/theme/createTheme.d.ts +9 -0
- package/lib/typescript/theme/createTheme.d.ts.map +1 -0
- package/lib/typescript/theme/index.d.ts +14 -0
- package/lib/typescript/theme/index.d.ts.map +1 -0
- package/lib/typescript/theme/insets.d.ts +9 -0
- package/lib/typescript/theme/insets.d.ts.map +1 -0
- package/lib/typescript/theme/labels.d.ts +13 -0
- package/lib/typescript/theme/labels.d.ts.map +1 -0
- package/lib/typescript/theme/palettes.d.ts +24 -0
- package/lib/typescript/theme/palettes.d.ts.map +1 -0
- package/lib/typescript/theme/tokens.d.ts +41 -0
- package/lib/typescript/theme/tokens.d.ts.map +1 -0
- package/lib/typescript/theme/types.d.ts +24 -0
- package/lib/typescript/theme/types.d.ts.map +1 -0
- package/package.json +311 -0
- package/registry/alert-provider.json +21 -0
- package/registry/alert.json +19 -0
- package/registry/avatar-header.json +18 -0
- package/registry/avatar.json +18 -0
- package/registry/badge.json +18 -0
- package/registry/bottom-sheet.json +18 -0
- package/registry/button.json +18 -0
- package/registry/card.json +18 -0
- package/registry/checkbox.json +18 -0
- package/registry/core.json +64 -0
- package/registry/date-field.json +24 -0
- package/registry/date-picker.json +23 -0
- package/registry/divider.json +18 -0
- package/registry/empty-state.json +18 -0
- package/registry/fab.json +19 -0
- package/registry/form-actions.json +19 -0
- package/registry/icon-button.json +19 -0
- package/registry/image.json +20 -0
- package/registry/index.json +465 -0
- package/registry/info-row.json +19 -0
- package/registry/input.json +18 -0
- package/registry/key-value-row.json +18 -0
- package/registry/list.json +20 -0
- package/registry/manifest.json +263 -0
- package/registry/modal.json +21 -0
- package/registry/option-card.json +18 -0
- package/registry/pressable-scale.json +18 -0
- package/registry/screen.json +18 -0
- package/registry/search-list.json +23 -0
- package/registry/select.json +18 -0
- package/registry/spinner.json +18 -0
- package/registry/stepper.json +18 -0
- package/registry/steps.json +18 -0
- package/registry/theme-toggle.json +18 -0
- package/registry/title.json +21 -0
- package/registry/toast-provider.json +20 -0
- package/registry/toast.json +18 -0
- package/registry/wizard.json +20 -0
- package/src/atoms/Avatar.tsx +40 -0
- package/src/atoms/Badge.tsx +55 -0
- package/src/atoms/Button.tsx +186 -0
- package/src/atoms/Card.tsx +27 -0
- package/src/atoms/Checkbox.tsx +75 -0
- package/src/atoms/Divider.tsx +14 -0
- package/src/atoms/EmptyState.tsx +60 -0
- package/src/atoms/Fab.tsx +63 -0
- package/src/atoms/IconButton.tsx +53 -0
- package/src/atoms/Image.tsx +137 -0
- package/src/atoms/Input.tsx +166 -0
- package/src/atoms/KeyValueRow.tsx +48 -0
- package/src/atoms/PressableScale.tsx +52 -0
- package/src/atoms/Spinner.tsx +127 -0
- package/src/atoms/Text.tsx +58 -0
- package/src/atoms/index.ts +30 -0
- package/src/icons/Icon.tsx +27 -0
- package/src/icons/defaultIcons.tsx +292 -0
- package/src/icons/index.ts +4 -0
- package/src/icons/types.ts +27 -0
- package/src/index.ts +5 -0
- package/src/molecules/AvatarHeader.tsx +69 -0
- package/src/molecules/FormActions.tsx +52 -0
- package/src/molecules/InfoRow.tsx +52 -0
- package/src/molecules/OptionCard.tsx +82 -0
- package/src/molecules/Stepper.tsx +76 -0
- package/src/molecules/Steps.tsx +198 -0
- package/src/molecules/ThemeToggle.tsx +67 -0
- package/src/molecules/index.ts +14 -0
- package/src/organisms/Alert.tsx +162 -0
- package/src/organisms/AlertProvider.tsx +125 -0
- package/src/organisms/BottomSheet.tsx +95 -0
- package/src/organisms/DateField.tsx +134 -0
- package/src/organisms/DatePicker.tsx +255 -0
- package/src/organisms/List.tsx +154 -0
- package/src/organisms/Modal.tsx +251 -0
- package/src/organisms/Screen.tsx +84 -0
- package/src/organisms/SearchList.tsx +186 -0
- package/src/organisms/Select.tsx +156 -0
- package/src/organisms/Toast.tsx +135 -0
- package/src/organisms/ToastProvider.tsx +166 -0
- package/src/organisms/Wizard.tsx +137 -0
- package/src/organisms/index.ts +26 -0
- package/src/theme/UIProvider.tsx +129 -0
- package/src/theme/createStyles.ts +40 -0
- package/src/theme/createTheme.ts +49 -0
- package/src/theme/index.ts +22 -0
- package/src/theme/insets.ts +9 -0
- package/src/theme/labels.ts +23 -0
- package/src/theme/palettes.ts +53 -0
- package/src/theme/tokens.ts +113 -0
- package/src/theme/types.ts +27 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { ActivityIndicator, FlatList, Text, View } from 'react-native';
|
|
5
|
+
import { createStyles } from '../theme/createStyles';
|
|
6
|
+
import { useColors, useLabels } from '../theme/UIProvider';
|
|
7
|
+
import { Input } from '../atoms/Input';
|
|
8
|
+
import { EmptyState } from '../atoms/EmptyState';
|
|
9
|
+
import { Spinner } from '../atoms/Spinner';
|
|
10
|
+
import { IconButton } from '../atoms/IconButton';
|
|
11
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
const useStyles = createStyles(theme => ({
|
|
13
|
+
container: {
|
|
14
|
+
flex: 1
|
|
15
|
+
},
|
|
16
|
+
searchRow: {
|
|
17
|
+
flexDirection: 'row',
|
|
18
|
+
alignItems: 'center',
|
|
19
|
+
marginBottom: theme.tokens.spacing.lg - 1,
|
|
20
|
+
gap: theme.tokens.spacing.sm + 2
|
|
21
|
+
},
|
|
22
|
+
searchInput: {
|
|
23
|
+
flex: 1,
|
|
24
|
+
marginBottom: 0
|
|
25
|
+
},
|
|
26
|
+
scanButton: {
|
|
27
|
+
backgroundColor: theme.colors.primary,
|
|
28
|
+
width: 50,
|
|
29
|
+
height: 50,
|
|
30
|
+
borderRadius: theme.tokens.radius.lg,
|
|
31
|
+
...theme.tokens.shadow.sm
|
|
32
|
+
},
|
|
33
|
+
listArea: {
|
|
34
|
+
flex: 1
|
|
35
|
+
},
|
|
36
|
+
listContent: {
|
|
37
|
+
paddingBottom: theme.tokens.spacing.xl
|
|
38
|
+
},
|
|
39
|
+
loadingOverlay: {
|
|
40
|
+
position: 'absolute',
|
|
41
|
+
top: 0,
|
|
42
|
+
left: 0,
|
|
43
|
+
right: 0,
|
|
44
|
+
bottom: 0,
|
|
45
|
+
backgroundColor: theme.colors.surface + 'B3',
|
|
46
|
+
zIndex: 10,
|
|
47
|
+
justifyContent: 'center',
|
|
48
|
+
alignItems: 'center'
|
|
49
|
+
},
|
|
50
|
+
footer: {
|
|
51
|
+
paddingVertical: theme.tokens.spacing.xl,
|
|
52
|
+
alignItems: 'center',
|
|
53
|
+
gap: theme.tokens.spacing.md
|
|
54
|
+
},
|
|
55
|
+
footerText: {
|
|
56
|
+
color: theme.colors.textLight,
|
|
57
|
+
fontSize: theme.tokens.fontSize.md
|
|
58
|
+
}
|
|
59
|
+
}));
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* SearchList
|
|
63
|
+
* Buscador + lista + estados de carga/paginación/vacío. El contenido de
|
|
64
|
+
* cada ítem (renderItem) queda a cargo de quien la usa, ya que difiere por
|
|
65
|
+
* completo entre casos de uso.
|
|
66
|
+
*/
|
|
67
|
+
export function SearchList({
|
|
68
|
+
header,
|
|
69
|
+
searchValue,
|
|
70
|
+
onSearchChange,
|
|
71
|
+
searchPlaceholder,
|
|
72
|
+
searchIsLoading = false,
|
|
73
|
+
onScanPress,
|
|
74
|
+
scanAccessibilityLabel = 'Scan',
|
|
75
|
+
extraActions,
|
|
76
|
+
data,
|
|
77
|
+
keyExtractor,
|
|
78
|
+
renderItem,
|
|
79
|
+
isLoading = false,
|
|
80
|
+
loadingMode = 'replace',
|
|
81
|
+
loadingText,
|
|
82
|
+
onLoadMore,
|
|
83
|
+
isLoadingMore = false,
|
|
84
|
+
loadingMoreText,
|
|
85
|
+
hasMore = false,
|
|
86
|
+
noMoreText,
|
|
87
|
+
emptyTitle,
|
|
88
|
+
emptyDescription,
|
|
89
|
+
emptyIconName,
|
|
90
|
+
contentContainerStyle,
|
|
91
|
+
ListComponent = FlatList,
|
|
92
|
+
listProps
|
|
93
|
+
}) {
|
|
94
|
+
const colors = useColors();
|
|
95
|
+
const styles = useStyles();
|
|
96
|
+
const labels = useLabels();
|
|
97
|
+
const resolvedSearchPlaceholder = searchPlaceholder ?? labels.search;
|
|
98
|
+
const resolvedLoadingText = loadingText ?? labels.loading;
|
|
99
|
+
const resolvedLoadingMoreText = loadingMoreText ?? labels.loadingMore;
|
|
100
|
+
const renderFooter = () => {
|
|
101
|
+
if (isLoadingMore) {
|
|
102
|
+
return /*#__PURE__*/_jsx(View, {
|
|
103
|
+
style: styles.footer,
|
|
104
|
+
children: /*#__PURE__*/_jsx(Spinner, {
|
|
105
|
+
text: resolvedLoadingMoreText,
|
|
106
|
+
fullscreen: false
|
|
107
|
+
})
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
if (noMoreText && !hasMore && data.length > 0) {
|
|
111
|
+
return /*#__PURE__*/_jsx(View, {
|
|
112
|
+
style: styles.footer,
|
|
113
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
114
|
+
style: styles.footerText,
|
|
115
|
+
children: noMoreText
|
|
116
|
+
})
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
};
|
|
121
|
+
const showReplaceLoading = isLoading && loadingMode === 'replace' && data.length === 0;
|
|
122
|
+
const showOverlayLoading = isLoading && loadingMode === 'overlay' && data.length === 0;
|
|
123
|
+
const showEmpty = !isLoading && data.length === 0;
|
|
124
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
125
|
+
style: styles.container,
|
|
126
|
+
children: [header, /*#__PURE__*/_jsxs(View, {
|
|
127
|
+
style: styles.searchRow,
|
|
128
|
+
children: [/*#__PURE__*/_jsx(Input, {
|
|
129
|
+
placeholder: resolvedSearchPlaceholder,
|
|
130
|
+
leftIconName: "search",
|
|
131
|
+
value: searchValue,
|
|
132
|
+
onChangeText: onSearchChange,
|
|
133
|
+
rightIconName: searchValue.length > 0 ? 'close' : undefined,
|
|
134
|
+
onRightIconPress: () => onSearchChange(''),
|
|
135
|
+
isLoading: searchIsLoading,
|
|
136
|
+
containerStyle: styles.searchInput
|
|
137
|
+
}), onScanPress && /*#__PURE__*/_jsx(IconButton, {
|
|
138
|
+
iconName: "search",
|
|
139
|
+
onPress: onScanPress,
|
|
140
|
+
color: colors.white,
|
|
141
|
+
style: styles.scanButton,
|
|
142
|
+
accessibilityLabel: scanAccessibilityLabel
|
|
143
|
+
}), extraActions]
|
|
144
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
145
|
+
style: styles.listArea,
|
|
146
|
+
children: [showOverlayLoading && /*#__PURE__*/_jsxs(View, {
|
|
147
|
+
style: styles.loadingOverlay,
|
|
148
|
+
children: [/*#__PURE__*/_jsx(ActivityIndicator, {
|
|
149
|
+
size: "large",
|
|
150
|
+
color: colors.primary
|
|
151
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
152
|
+
style: styles.footerText,
|
|
153
|
+
children: resolvedLoadingText
|
|
154
|
+
})]
|
|
155
|
+
}), showReplaceLoading ? /*#__PURE__*/_jsx(Spinner, {
|
|
156
|
+
text: resolvedLoadingText
|
|
157
|
+
}) : showEmpty ? /*#__PURE__*/_jsx(EmptyState, {
|
|
158
|
+
title: emptyTitle,
|
|
159
|
+
description: emptyDescription,
|
|
160
|
+
iconName: emptyIconName
|
|
161
|
+
}) : /*#__PURE__*/_jsx(ListComponent, {
|
|
162
|
+
data: data,
|
|
163
|
+
keyExtractor: keyExtractor,
|
|
164
|
+
keyboardDismissMode: "on-drag",
|
|
165
|
+
contentContainerStyle: contentContainerStyle ?? styles.listContent,
|
|
166
|
+
onEndReached: onLoadMore,
|
|
167
|
+
onEndReachedThreshold: 0.2,
|
|
168
|
+
ListFooterComponent: renderFooter,
|
|
169
|
+
renderItem: renderItem,
|
|
170
|
+
...listProps
|
|
171
|
+
})]
|
|
172
|
+
})]
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=SearchList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","ActivityIndicator","FlatList","Text","View","createStyles","useColors","useLabels","Input","EmptyState","Spinner","IconButton","jsx","_jsx","jsxs","_jsxs","useStyles","theme","container","flex","searchRow","flexDirection","alignItems","marginBottom","tokens","spacing","lg","gap","sm","searchInput","scanButton","backgroundColor","colors","primary","width","height","borderRadius","radius","shadow","listArea","listContent","paddingBottom","xl","loadingOverlay","position","top","left","right","bottom","surface","zIndex","justifyContent","footer","paddingVertical","md","footerText","color","textLight","fontSize","SearchList","header","searchValue","onSearchChange","searchPlaceholder","searchIsLoading","onScanPress","scanAccessibilityLabel","extraActions","data","keyExtractor","renderItem","isLoading","loadingMode","loadingText","onLoadMore","isLoadingMore","loadingMoreText","hasMore","noMoreText","emptyTitle","emptyDescription","emptyIconName","contentContainerStyle","ListComponent","listProps","styles","labels","resolvedSearchPlaceholder","search","resolvedLoadingText","loading","resolvedLoadingMoreText","loadingMore","renderFooter","style","children","text","fullscreen","length","showReplaceLoading","showOverlayLoading","showEmpty","placeholder","leftIconName","value","onChangeText","rightIconName","undefined","onRightIconPress","containerStyle","iconName","onPress","white","accessibilityLabel","size","title","description","keyboardDismissMode","onEndReached","onEndReachedThreshold","ListFooterComponent"],"sourceRoot":"../../../src","sources":["organisms/SearchList.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useState } from 'react';
|
|
4
|
+
import { ActivityIndicator, Pressable, Text, View } from 'react-native';
|
|
5
|
+
import { createStyles } from '../theme/createStyles';
|
|
6
|
+
import { useAllowFontScaling, useColors, useLabels } from '../theme/UIProvider';
|
|
7
|
+
import { Icon } from '../icons/Icon';
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
+
const useStyles = createStyles(theme => ({
|
|
10
|
+
container: {
|
|
11
|
+
gap: theme.tokens.spacing.sm
|
|
12
|
+
},
|
|
13
|
+
containerOpen: {
|
|
14
|
+
zIndex: 20,
|
|
15
|
+
elevation: 20
|
|
16
|
+
},
|
|
17
|
+
label: {
|
|
18
|
+
fontWeight: theme.tokens.fontWeight.bold,
|
|
19
|
+
fontSize: theme.tokens.fontSize.md,
|
|
20
|
+
color: theme.colors.text
|
|
21
|
+
},
|
|
22
|
+
required: {
|
|
23
|
+
color: theme.colors.error
|
|
24
|
+
},
|
|
25
|
+
field: {
|
|
26
|
+
flexDirection: 'row',
|
|
27
|
+
alignItems: 'center',
|
|
28
|
+
justifyContent: 'space-between',
|
|
29
|
+
borderWidth: 2,
|
|
30
|
+
borderColor: theme.colors.border,
|
|
31
|
+
borderRadius: theme.tokens.radius.lg,
|
|
32
|
+
backgroundColor: theme.colors.inputBackground,
|
|
33
|
+
minHeight: 50,
|
|
34
|
+
paddingHorizontal: theme.tokens.spacing.lg
|
|
35
|
+
},
|
|
36
|
+
fieldText: {
|
|
37
|
+
fontSize: theme.tokens.fontSize.lg,
|
|
38
|
+
color: theme.colors.text
|
|
39
|
+
},
|
|
40
|
+
fieldPlaceholder: {
|
|
41
|
+
color: theme.colors.textLight
|
|
42
|
+
},
|
|
43
|
+
optionsList: {
|
|
44
|
+
position: 'absolute',
|
|
45
|
+
top: '100%',
|
|
46
|
+
left: 0,
|
|
47
|
+
right: 0,
|
|
48
|
+
marginTop: theme.tokens.spacing.sm,
|
|
49
|
+
borderWidth: 2,
|
|
50
|
+
borderColor: theme.colors.border,
|
|
51
|
+
borderRadius: theme.tokens.radius.lg,
|
|
52
|
+
backgroundColor: theme.colors.surface,
|
|
53
|
+
overflow: 'hidden',
|
|
54
|
+
zIndex: 20,
|
|
55
|
+
elevation: 20,
|
|
56
|
+
...theme.tokens.shadow.md
|
|
57
|
+
},
|
|
58
|
+
optionRow: {
|
|
59
|
+
flexDirection: 'row',
|
|
60
|
+
alignItems: 'center',
|
|
61
|
+
justifyContent: 'space-between',
|
|
62
|
+
paddingHorizontal: theme.tokens.spacing.lg,
|
|
63
|
+
paddingVertical: theme.tokens.spacing.md + 2,
|
|
64
|
+
borderBottomWidth: 1,
|
|
65
|
+
borderBottomColor: theme.colors.border
|
|
66
|
+
},
|
|
67
|
+
optionRowLast: {
|
|
68
|
+
borderBottomWidth: 0
|
|
69
|
+
},
|
|
70
|
+
optionRowSelected: {
|
|
71
|
+
backgroundColor: theme.colors.primary + '15'
|
|
72
|
+
},
|
|
73
|
+
optionText: {
|
|
74
|
+
fontSize: theme.tokens.fontSize.lg - 1,
|
|
75
|
+
color: theme.colors.text
|
|
76
|
+
},
|
|
77
|
+
optionTextSelected: {
|
|
78
|
+
fontWeight: theme.tokens.fontWeight.semibold,
|
|
79
|
+
color: theme.colors.primary
|
|
80
|
+
},
|
|
81
|
+
errorText: {
|
|
82
|
+
fontSize: theme.tokens.fontSize.sm,
|
|
83
|
+
color: theme.colors.error
|
|
84
|
+
}
|
|
85
|
+
}));
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Select
|
|
89
|
+
* Dropdown que expande la lista de opciones flotando sobre el resto del
|
|
90
|
+
* contenido (position: absolute), en vez de empujarlo hacia abajo o abrir
|
|
91
|
+
* un picker nativo del sistema.
|
|
92
|
+
*/
|
|
93
|
+
export function Select({
|
|
94
|
+
label,
|
|
95
|
+
required = false,
|
|
96
|
+
options,
|
|
97
|
+
selectedValue,
|
|
98
|
+
onSelect,
|
|
99
|
+
placeholder,
|
|
100
|
+
error,
|
|
101
|
+
isLoading = false,
|
|
102
|
+
containerStyle
|
|
103
|
+
}) {
|
|
104
|
+
const colors = useColors();
|
|
105
|
+
const styles = useStyles();
|
|
106
|
+
const labels = useLabels();
|
|
107
|
+
const allowFontScaling = useAllowFontScaling();
|
|
108
|
+
const [open, setOpen] = useState(false);
|
|
109
|
+
const selectedOption = options.find(o => o.value === selectedValue);
|
|
110
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
111
|
+
style: [styles.container, open && styles.containerOpen, containerStyle],
|
|
112
|
+
children: [label && /*#__PURE__*/_jsxs(Text, {
|
|
113
|
+
allowFontScaling: allowFontScaling,
|
|
114
|
+
style: styles.label,
|
|
115
|
+
children: [label, required && /*#__PURE__*/_jsx(Text, {
|
|
116
|
+
style: styles.required,
|
|
117
|
+
children: " *"
|
|
118
|
+
})]
|
|
119
|
+
}), /*#__PURE__*/_jsxs(Pressable, {
|
|
120
|
+
style: styles.field,
|
|
121
|
+
onPress: () => !isLoading && setOpen(o => !o),
|
|
122
|
+
disabled: isLoading,
|
|
123
|
+
accessibilityRole: "button",
|
|
124
|
+
accessibilityLabel: label ?? placeholder ?? labels.selectPlaceholder,
|
|
125
|
+
accessibilityState: {
|
|
126
|
+
expanded: open,
|
|
127
|
+
disabled: isLoading
|
|
128
|
+
},
|
|
129
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
130
|
+
allowFontScaling: allowFontScaling,
|
|
131
|
+
style: [styles.fieldText, !selectedOption && styles.fieldPlaceholder],
|
|
132
|
+
children: selectedOption?.label || placeholder || labels.selectPlaceholder
|
|
133
|
+
}), isLoading ? /*#__PURE__*/_jsx(ActivityIndicator, {
|
|
134
|
+
size: "small",
|
|
135
|
+
color: colors.primary
|
|
136
|
+
}) : /*#__PURE__*/_jsx(Icon, {
|
|
137
|
+
name: open ? 'chevron-up' : 'chevron-down',
|
|
138
|
+
size: 20,
|
|
139
|
+
color: colors.textLight
|
|
140
|
+
})]
|
|
141
|
+
}), open && !isLoading && /*#__PURE__*/_jsx(View, {
|
|
142
|
+
style: styles.optionsList,
|
|
143
|
+
children: options.map((option, index) => {
|
|
144
|
+
const isSelected = option.value === selectedValue;
|
|
145
|
+
return /*#__PURE__*/_jsxs(Pressable, {
|
|
146
|
+
style: [styles.optionRow, index === options.length - 1 && styles.optionRowLast, isSelected && styles.optionRowSelected],
|
|
147
|
+
onPress: () => {
|
|
148
|
+
onSelect(option.value);
|
|
149
|
+
setOpen(false);
|
|
150
|
+
},
|
|
151
|
+
accessibilityRole: "menuitem",
|
|
152
|
+
accessibilityState: {
|
|
153
|
+
selected: isSelected
|
|
154
|
+
},
|
|
155
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
156
|
+
allowFontScaling: allowFontScaling,
|
|
157
|
+
style: [styles.optionText, isSelected && styles.optionTextSelected],
|
|
158
|
+
children: option.label
|
|
159
|
+
}), isSelected && /*#__PURE__*/_jsx(Icon, {
|
|
160
|
+
name: "check",
|
|
161
|
+
size: 18,
|
|
162
|
+
color: colors.primary
|
|
163
|
+
})]
|
|
164
|
+
}, String(option.value));
|
|
165
|
+
})
|
|
166
|
+
}), !!error && /*#__PURE__*/_jsx(Text, {
|
|
167
|
+
allowFontScaling: allowFontScaling,
|
|
168
|
+
style: styles.errorText,
|
|
169
|
+
children: error
|
|
170
|
+
})]
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=Select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useState","ActivityIndicator","Pressable","Text","View","createStyles","useAllowFontScaling","useColors","useLabels","Icon","jsx","_jsx","jsxs","_jsxs","useStyles","theme","container","gap","tokens","spacing","sm","containerOpen","zIndex","elevation","label","fontWeight","bold","fontSize","md","color","colors","text","required","error","field","flexDirection","alignItems","justifyContent","borderWidth","borderColor","border","borderRadius","radius","lg","backgroundColor","inputBackground","minHeight","paddingHorizontal","fieldText","fieldPlaceholder","textLight","optionsList","position","top","left","right","marginTop","surface","overflow","shadow","optionRow","paddingVertical","borderBottomWidth","borderBottomColor","optionRowLast","optionRowSelected","primary","optionText","optionTextSelected","semibold","errorText","Select","options","selectedValue","onSelect","placeholder","isLoading","containerStyle","styles","labels","allowFontScaling","open","setOpen","selectedOption","find","o","value","style","children","onPress","disabled","accessibilityRole","accessibilityLabel","selectPlaceholder","accessibilityState","expanded","size","name","map","option","index","isSelected","length","selected","String"],"sourceRoot":"../../../src","sources":["organisms/Select.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAUC,QAAQ,QAAQ,OAAO;AAC7C,SAASC,iBAAiB,EAAEC,SAAS,EAAEC,IAAI,EAAEC,IAAI,QAAwC,cAAc;AACvG,SAASC,YAAY,QAAQ,uBAAuB;AACpD,SAASC,mBAAmB,EAAEC,SAAS,EAAEC,SAAS,QAAQ,qBAAqB;AAC/E,SAASC,IAAI,QAAQ,eAAe;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAmBrC,MAAMC,SAAS,GAAGT,YAAY,CAAEU,KAAK,KAAM;EACzCC,SAAS,EAAE;IAAEC,GAAG,EAAEF,KAAK,CAACG,MAAM,CAACC,OAAO,CAACC;EAAG,CAAC;EAC3CC,aAAa,EAAE;IAAEC,MAAM,EAAE,EAAE;IAAEC,SAAS,EAAE;EAAG,CAAC;EAC5CC,KAAK,EAAE;IAAEC,UAAU,EAAEV,KAAK,CAACG,MAAM,CAACO,UAAU,CAACC,IAAI;IAAEC,QAAQ,EAAEZ,KAAK,CAACG,MAAM,CAACS,QAAQ,CAACC,EAAE;IAAEC,KAAK,EAAEd,KAAK,CAACe,MAAM,CAACC;EAAK,CAAC;EACjHC,QAAQ,EAAE;IAAEH,KAAK,EAAEd,KAAK,CAACe,MAAM,CAACG;EAAM,CAAC;EACvCC,KAAK,EAAE;IACLC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,eAAe;IAC/BC,WAAW,EAAE,CAAC;IACdC,WAAW,EAAExB,KAAK,CAACe,MAAM,CAACU,MAAM;IAChCC,YAAY,EAAE1B,KAAK,CAACG,MAAM,CAACwB,MAAM,CAACC,EAAE;IACpCC,eAAe,EAAE7B,KAAK,CAACe,MAAM,CAACe,eAAe;IAC7CC,SAAS,EAAE,EAAE;IACbC,iBAAiB,EAAEhC,KAAK,CAACG,MAAM,CAACC,OAAO,CAACwB;EAC1C,CAAC;EACDK,SAAS,EAAE;IAAErB,QAAQ,EAAEZ,KAAK,CAACG,MAAM,CAACS,QAAQ,CAACgB,EAAE;IAAEd,KAAK,EAAEd,KAAK,CAACe,MAAM,CAACC;EAAK,CAAC;EAC3EkB,gBAAgB,EAAE;IAAEpB,KAAK,EAAEd,KAAK,CAACe,MAAM,CAACoB;EAAU,CAAC;EACnDC,WAAW,EAAE;IACXC,QAAQ,EAAE,UAAU;IACpBC,GAAG,EAAE,MAAM;IACXC,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRC,SAAS,EAAEzC,KAAK,CAACG,MAAM,CAACC,OAAO,CAACC,EAAE;IAClCkB,WAAW,EAAE,CAAC;IACdC,WAAW,EAAExB,KAAK,CAACe,MAAM,CAACU,MAAM;IAChCC,YAAY,EAAE1B,KAAK,CAACG,MAAM,CAACwB,MAAM,CAACC,EAAE;IACpCC,eAAe,EAAE7B,KAAK,CAACe,MAAM,CAAC2B,OAAO;IACrCC,QAAQ,EAAE,QAAQ;IAClBpC,MAAM,EAAE,EAAE;IACVC,SAAS,EAAE,EAAE;IACb,GAAGR,KAAK,CAACG,MAAM,CAACyC,MAAM,CAAC/B;EACzB,CAAC;EACDgC,SAAS,EAAE;IACTzB,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,eAAe;IAC/BU,iBAAiB,EAAEhC,KAAK,CAACG,MAAM,CAACC,OAAO,CAACwB,EAAE;IAC1CkB,eAAe,EAAE9C,KAAK,CAACG,MAAM,CAACC,OAAO,CAACS,EAAE,GAAG,CAAC;IAC5CkC,iBAAiB,EAAE,CAAC;IACpBC,iBAAiB,EAAEhD,KAAK,CAACe,MAAM,CAACU;EAClC,CAAC;EACDwB,aAAa,EAAE;IAAEF,iBAAiB,EAAE;EAAE,CAAC;EACvCG,iBAAiB,EAAE;IAAErB,eAAe,EAAE7B,KAAK,CAACe,MAAM,CAACoC,OAAO,GAAG;EAAK,CAAC;EACnEC,UAAU,EAAE;IAAExC,QAAQ,EAAEZ,KAAK,CAACG,MAAM,CAACS,QAAQ,CAACgB,EAAE,GAAG,CAAC;IAAEd,KAAK,EAAEd,KAAK,CAACe,MAAM,CAACC;EAAK,CAAC;EAChFqC,kBAAkB,EAAE;IAAE3C,UAAU,EAAEV,KAAK,CAACG,MAAM,CAACO,UAAU,CAAC4C,QAAQ;IAAExC,KAAK,EAAEd,KAAK,CAACe,MAAM,CAACoC;EAAQ,CAAC;EACjGI,SAAS,EAAE;IAAE3C,QAAQ,EAAEZ,KAAK,CAACG,MAAM,CAACS,QAAQ,CAACP,EAAE;IAAES,KAAK,EAAEd,KAAK,CAACe,MAAM,CAACG;EAAM;AAC7E,CAAC,CAAC,CAAC;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASsC,MAAMA,CAA4B;EAChD/C,KAAK;EACLQ,QAAQ,GAAG,KAAK;EAChBwC,OAAO;EACPC,aAAa;EACbC,QAAQ;EACRC,WAAW;EACX1C,KAAK;EACL2C,SAAS,GAAG,KAAK;EACjBC;AACc,CAAC,EAAE;EACjB,MAAM/C,MAAM,GAAGvB,SAAS,CAAC,CAAC;EAC1B,MAAMuE,MAAM,GAAGhE,SAAS,CAAC,CAAC;EAC1B,MAAMiE,MAAM,GAAGvE,SAAS,CAAC,CAAC;EAC1B,MAAMwE,gBAAgB,GAAG1E,mBAAmB,CAAC,CAAC;EAC9C,MAAM,CAAC2E,IAAI,EAAEC,OAAO,CAAC,GAAGlF,QAAQ,CAAC,KAAK,CAAC;EACvC,MAAMmF,cAAc,GAAGX,OAAO,CAACY,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,KAAK,KAAKb,aAAa,CAAC;EAErE,oBACE5D,KAAA,CAACT,IAAI;IAACmF,KAAK,EAAE,CAACT,MAAM,CAAC9D,SAAS,EAAEiE,IAAI,IAAIH,MAAM,CAACzD,aAAa,EAAEwD,cAAc,CAAE;IAAAW,QAAA,GAC3EhE,KAAK,iBACJX,KAAA,CAACV,IAAI;MAAC6E,gBAAgB,EAAEA,gBAAiB;MAACO,KAAK,EAAET,MAAM,CAACtD,KAAM;MAAAgE,QAAA,GAC3DhE,KAAK,EACLQ,QAAQ,iBAAIrB,IAAA,CAACR,IAAI;QAACoF,KAAK,EAAET,MAAM,CAAC9C,QAAS;QAAAwD,QAAA,EAAC;MAAE,CAAM,CAAC;IAAA,CAChD,CACP,eAED3E,KAAA,CAACX,SAAS;MACRqF,KAAK,EAAET,MAAM,CAAC5C,KAAM;MACpBuD,OAAO,EAAEA,CAAA,KAAM,CAACb,SAAS,IAAIM,OAAO,CAAEG,CAAC,IAAK,CAACA,CAAC,CAAE;MAChDK,QAAQ,EAAEd,SAAU;MACpBe,iBAAiB,EAAC,QAAQ;MAC1BC,kBAAkB,EAAEpE,KAAK,IAAImD,WAAW,IAAII,MAAM,CAACc,iBAAkB;MACrEC,kBAAkB,EAAE;QAAEC,QAAQ,EAAEd,IAAI;QAAES,QAAQ,EAAEd;MAAU,CAAE;MAAAY,QAAA,gBAE5D7E,IAAA,CAACR,IAAI;QAAC6E,gBAAgB,EAAEA,gBAAiB;QAACO,KAAK,EAAE,CAACT,MAAM,CAAC9B,SAAS,EAAE,CAACmC,cAAc,IAAIL,MAAM,CAAC7B,gBAAgB,CAAE;QAAAuC,QAAA,EAC7GL,cAAc,EAAE3D,KAAK,IAAImD,WAAW,IAAII,MAAM,CAACc;MAAiB,CAC7D,CAAC,EACNjB,SAAS,gBACRjE,IAAA,CAACV,iBAAiB;QAAC+F,IAAI,EAAC,OAAO;QAACnE,KAAK,EAAEC,MAAM,CAACoC;MAAQ,CAAE,CAAC,gBAEzDvD,IAAA,CAACF,IAAI;QAACwF,IAAI,EAAEhB,IAAI,GAAG,YAAY,GAAG,cAAe;QAACe,IAAI,EAAE,EAAG;QAACnE,KAAK,EAAEC,MAAM,CAACoB;MAAU,CAAE,CACvF;IAAA,CACQ,CAAC,EAEX+B,IAAI,IAAI,CAACL,SAAS,iBACjBjE,IAAA,CAACP,IAAI;MAACmF,KAAK,EAAET,MAAM,CAAC3B,WAAY;MAAAqC,QAAA,EAC7BhB,OAAO,CAAC0B,GAAG,CAAC,CAACC,MAAM,EAAEC,KAAK,KAAK;QAC9B,MAAMC,UAAU,GAAGF,MAAM,CAACb,KAAK,KAAKb,aAAa;QACjD,oBACE5D,KAAA,CAACX,SAAS;UAERqF,KAAK,EAAE,CAACT,MAAM,CAAClB,SAAS,EAAEwC,KAAK,KAAK5B,OAAO,CAAC8B,MAAM,GAAG,CAAC,IAAIxB,MAAM,CAACd,aAAa,EAAEqC,UAAU,IAAIvB,MAAM,CAACb,iBAAiB,CAAE;UACxHwB,OAAO,EAAEA,CAAA,KAAM;YACbf,QAAQ,CAACyB,MAAM,CAACb,KAAK,CAAC;YACtBJ,OAAO,CAAC,KAAK,CAAC;UAChB,CAAE;UACFS,iBAAiB,EAAC,UAAU;UAC5BG,kBAAkB,EAAE;YAAES,QAAQ,EAAEF;UAAW,CAAE;UAAAb,QAAA,gBAE7C7E,IAAA,CAACR,IAAI;YAAC6E,gBAAgB,EAAEA,gBAAiB;YAACO,KAAK,EAAE,CAACT,MAAM,CAACX,UAAU,EAAEkC,UAAU,IAAIvB,MAAM,CAACV,kBAAkB,CAAE;YAAAoB,QAAA,EAC3GW,MAAM,CAAC3E;UAAK,CACT,CAAC,EACN6E,UAAU,iBAAI1F,IAAA,CAACF,IAAI;YAACwF,IAAI,EAAC,OAAO;YAACD,IAAI,EAAE,EAAG;YAACnE,KAAK,EAAEC,MAAM,CAACoC;UAAQ,CAAE,CAAC;QAAA,GAZhEsC,MAAM,CAACL,MAAM,CAACb,KAAK,CAaf,CAAC;MAEhB,CAAC;IAAC,CACE,CACP,EAEA,CAAC,CAACrD,KAAK,iBACNtB,IAAA,CAACR,IAAI;MAAC6E,gBAAgB,EAAEA,gBAAiB;MAACO,KAAK,EAAET,MAAM,CAACR,SAAU;MAAAkB,QAAA,EAC/DvD;IAAK,CACF,CACP;EAAA,CACG,CAAC;AAEX","ignoreList":[]}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { memo, useEffect, useRef } from 'react';
|
|
4
|
+
import { Animated, Pressable, Text, View } from 'react-native';
|
|
5
|
+
import { createStyles } from '../theme/createStyles';
|
|
6
|
+
import { useAllowFontScaling, useColors } from '../theme/UIProvider';
|
|
7
|
+
import { Icon } from '../icons/Icon';
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
+
const ICON_BY_VARIANT = {
|
|
10
|
+
success: 'check',
|
|
11
|
+
error: 'alert',
|
|
12
|
+
warning: 'warning',
|
|
13
|
+
info: 'info'
|
|
14
|
+
};
|
|
15
|
+
const useStyles = createStyles(theme => ({
|
|
16
|
+
container: {
|
|
17
|
+
flexDirection: 'row',
|
|
18
|
+
alignItems: 'center',
|
|
19
|
+
gap: theme.tokens.spacing.md,
|
|
20
|
+
backgroundColor: theme.colors.surface,
|
|
21
|
+
borderRadius: theme.tokens.radius.lg,
|
|
22
|
+
borderWidth: 1,
|
|
23
|
+
borderColor: theme.colors.border,
|
|
24
|
+
paddingVertical: theme.tokens.spacing.md,
|
|
25
|
+
paddingHorizontal: theme.tokens.spacing.lg,
|
|
26
|
+
...theme.tokens.shadow.lg
|
|
27
|
+
},
|
|
28
|
+
accent: {
|
|
29
|
+
position: 'absolute',
|
|
30
|
+
left: 0,
|
|
31
|
+
top: 0,
|
|
32
|
+
bottom: 0,
|
|
33
|
+
width: 4,
|
|
34
|
+
borderTopLeftRadius: theme.tokens.radius.lg,
|
|
35
|
+
borderBottomLeftRadius: theme.tokens.radius.lg
|
|
36
|
+
},
|
|
37
|
+
text: {
|
|
38
|
+
flex: 1,
|
|
39
|
+
gap: 2
|
|
40
|
+
},
|
|
41
|
+
title: {
|
|
42
|
+
fontSize: theme.tokens.fontSize.md,
|
|
43
|
+
fontWeight: theme.tokens.fontWeight.semibold,
|
|
44
|
+
color: theme.colors.text
|
|
45
|
+
},
|
|
46
|
+
message: {
|
|
47
|
+
fontSize: theme.tokens.fontSize.sm,
|
|
48
|
+
color: theme.colors.textLight,
|
|
49
|
+
lineHeight: theme.tokens.lineHeight.sm
|
|
50
|
+
}
|
|
51
|
+
}));
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Toast
|
|
55
|
+
* Notificación efímera. Normalmente no se usa directo: `ToastProvider` +
|
|
56
|
+
* `useToast()` la montan y la descartan por vos. Se expone igual por si
|
|
57
|
+
* querés colocarla vos mismo dentro de una pantalla concreta.
|
|
58
|
+
*/
|
|
59
|
+
export const Toast = /*#__PURE__*/memo(({
|
|
60
|
+
title,
|
|
61
|
+
message,
|
|
62
|
+
variant = 'info',
|
|
63
|
+
onPress,
|
|
64
|
+
onDismiss,
|
|
65
|
+
hideCloseButton,
|
|
66
|
+
style,
|
|
67
|
+
testID
|
|
68
|
+
}) => {
|
|
69
|
+
const colors = useColors();
|
|
70
|
+
const styles = useStyles();
|
|
71
|
+
const allowFontScaling = useAllowFontScaling();
|
|
72
|
+
const accentColor = {
|
|
73
|
+
success: colors.success,
|
|
74
|
+
error: colors.error,
|
|
75
|
+
warning: colors.warning,
|
|
76
|
+
info: colors.secondary
|
|
77
|
+
};
|
|
78
|
+
const body = /*#__PURE__*/_jsxs(View, {
|
|
79
|
+
style: [styles.container, style],
|
|
80
|
+
testID: testID,
|
|
81
|
+
accessibilityRole: "alert",
|
|
82
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
83
|
+
style: [styles.accent, {
|
|
84
|
+
backgroundColor: accentColor[variant]
|
|
85
|
+
}]
|
|
86
|
+
}), /*#__PURE__*/_jsx(Icon, {
|
|
87
|
+
name: ICON_BY_VARIANT[variant],
|
|
88
|
+
size: 22,
|
|
89
|
+
color: accentColor[variant]
|
|
90
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
91
|
+
style: styles.text,
|
|
92
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
93
|
+
allowFontScaling: allowFontScaling,
|
|
94
|
+
style: styles.title,
|
|
95
|
+
children: title
|
|
96
|
+
}), !!message && /*#__PURE__*/_jsx(Text, {
|
|
97
|
+
allowFontScaling: allowFontScaling,
|
|
98
|
+
style: styles.message,
|
|
99
|
+
children: message
|
|
100
|
+
})]
|
|
101
|
+
}), !hideCloseButton && !!onDismiss && /*#__PURE__*/_jsx(Pressable, {
|
|
102
|
+
onPress: onDismiss,
|
|
103
|
+
accessibilityRole: "button",
|
|
104
|
+
accessibilityLabel: "Dismiss",
|
|
105
|
+
hitSlop: 8,
|
|
106
|
+
children: /*#__PURE__*/_jsx(Icon, {
|
|
107
|
+
name: "close",
|
|
108
|
+
size: 18,
|
|
109
|
+
color: colors.textLight
|
|
110
|
+
})
|
|
111
|
+
})]
|
|
112
|
+
});
|
|
113
|
+
if (!onPress) return body;
|
|
114
|
+
return /*#__PURE__*/_jsx(Pressable, {
|
|
115
|
+
onPress: onPress,
|
|
116
|
+
accessibilityRole: "button",
|
|
117
|
+
accessibilityLabel: title,
|
|
118
|
+
children: body
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
Toast.displayName = 'Toast';
|
|
122
|
+
|
|
123
|
+
/** Envuelve un Toast con su animación de entrada/salida. Uso interno del provider. */
|
|
124
|
+
export const AnimatedToast = /*#__PURE__*/memo(({
|
|
125
|
+
children,
|
|
126
|
+
onHeight
|
|
127
|
+
}) => {
|
|
128
|
+
const progress = useRef(new Animated.Value(0)).current;
|
|
129
|
+
useEffect(() => {
|
|
130
|
+
Animated.spring(progress, {
|
|
131
|
+
toValue: 1,
|
|
132
|
+
useNativeDriver: true,
|
|
133
|
+
speed: 14,
|
|
134
|
+
bounciness: 4
|
|
135
|
+
}).start();
|
|
136
|
+
}, [progress]);
|
|
137
|
+
return /*#__PURE__*/_jsx(Animated.View, {
|
|
138
|
+
onLayout: e => onHeight?.(e.nativeEvent.layout.height),
|
|
139
|
+
style: {
|
|
140
|
+
opacity: progress,
|
|
141
|
+
transform: [{
|
|
142
|
+
translateY: progress.interpolate({
|
|
143
|
+
inputRange: [0, 1],
|
|
144
|
+
outputRange: [-16, 0]
|
|
145
|
+
})
|
|
146
|
+
}]
|
|
147
|
+
},
|
|
148
|
+
children: children
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
AnimatedToast.displayName = 'AnimatedToast';
|
|
152
|
+
//# sourceMappingURL=Toast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","memo","useEffect","useRef","Animated","Pressable","Text","View","createStyles","useAllowFontScaling","useColors","Icon","jsx","_jsx","jsxs","_jsxs","ICON_BY_VARIANT","success","error","warning","info","useStyles","theme","container","flexDirection","alignItems","gap","tokens","spacing","md","backgroundColor","colors","surface","borderRadius","radius","lg","borderWidth","borderColor","border","paddingVertical","paddingHorizontal","shadow","accent","position","left","top","bottom","width","borderTopLeftRadius","borderBottomLeftRadius","text","flex","title","fontSize","fontWeight","semibold","color","message","sm","textLight","lineHeight","Toast","variant","onPress","onDismiss","hideCloseButton","style","testID","styles","allowFontScaling","accentColor","secondary","body","accessibilityRole","children","name","size","accessibilityLabel","hitSlop","displayName","AnimatedToast","onHeight","progress","Value","current","spring","toValue","useNativeDriver","speed","bounciness","start","onLayout","e","nativeEvent","layout","height","opacity","transform","translateY","interpolate","inputRange","outputRange"],"sourceRoot":"../../../src","sources":["organisms/Toast.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { View } from 'react-native';
|
|
5
|
+
import { AnimatedToast, Toast } from './Toast';
|
|
6
|
+
import { useInsets } from '../theme/UIProvider';
|
|
7
|
+
import { createStyles } from '../theme/createStyles';
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
+
const ToastContext = /*#__PURE__*/createContext(undefined);
|
|
10
|
+
const useStyles = createStyles(theme => ({
|
|
11
|
+
host: {
|
|
12
|
+
position: 'absolute',
|
|
13
|
+
left: 0,
|
|
14
|
+
right: 0,
|
|
15
|
+
paddingHorizontal: theme.tokens.spacing.lg,
|
|
16
|
+
gap: theme.tokens.spacing.sm
|
|
17
|
+
}
|
|
18
|
+
}));
|
|
19
|
+
/**
|
|
20
|
+
* ToastProvider
|
|
21
|
+
* Monta la capa de toasts sobre el resto de la app. Colocar una vez cerca de
|
|
22
|
+
* la raíz, dentro de UIProvider. Los timers de auto-dismiss se limpian al
|
|
23
|
+
* desmontar y al cerrar cada toast, así que no quedan callbacks colgados.
|
|
24
|
+
*/
|
|
25
|
+
export function ToastProvider({
|
|
26
|
+
children,
|
|
27
|
+
position = 'top',
|
|
28
|
+
maxVisible = 3,
|
|
29
|
+
defaultDuration = 4000
|
|
30
|
+
}) {
|
|
31
|
+
const [toasts, setToasts] = useState([]);
|
|
32
|
+
const timers = useRef(new Map());
|
|
33
|
+
const counter = useRef(0);
|
|
34
|
+
const insets = useInsets();
|
|
35
|
+
const styles = useStyles();
|
|
36
|
+
const clearTimer = useCallback(id => {
|
|
37
|
+
const t = timers.current.get(id);
|
|
38
|
+
if (t) {
|
|
39
|
+
clearTimeout(t);
|
|
40
|
+
timers.current.delete(id);
|
|
41
|
+
}
|
|
42
|
+
}, []);
|
|
43
|
+
const hide = useCallback(id => {
|
|
44
|
+
clearTimer(id);
|
|
45
|
+
setToasts(prev => prev.filter(t => t.id !== id));
|
|
46
|
+
}, [clearTimer]);
|
|
47
|
+
const hideAll = useCallback(() => {
|
|
48
|
+
timers.current.forEach(t => clearTimeout(t));
|
|
49
|
+
timers.current.clear();
|
|
50
|
+
setToasts([]);
|
|
51
|
+
}, []);
|
|
52
|
+
const show = useCallback(options => {
|
|
53
|
+
counter.current += 1;
|
|
54
|
+
const id = `toast-${counter.current}`;
|
|
55
|
+
const duration = options.duration ?? defaultDuration;
|
|
56
|
+
setToasts(prev => {
|
|
57
|
+
const next = [...prev, {
|
|
58
|
+
...options,
|
|
59
|
+
id
|
|
60
|
+
}];
|
|
61
|
+
// Se descartan los más viejos, no los recién llegados: un toast nuevo
|
|
62
|
+
// siempre se ve.
|
|
63
|
+
const overflow = next.length - maxVisible;
|
|
64
|
+
if (overflow > 0) {
|
|
65
|
+
next.slice(0, overflow).forEach(t => clearTimer(t.id));
|
|
66
|
+
return next.slice(overflow);
|
|
67
|
+
}
|
|
68
|
+
return next;
|
|
69
|
+
});
|
|
70
|
+
if (duration > 0) {
|
|
71
|
+
timers.current.set(id, setTimeout(() => hide(id), duration));
|
|
72
|
+
}
|
|
73
|
+
return id;
|
|
74
|
+
}, [defaultDuration, maxVisible, hide, clearTimer]);
|
|
75
|
+
|
|
76
|
+
// Al desmontar el provider no debe quedar ningún setTimeout apuntando a un
|
|
77
|
+
// setState de un árbol ya desmontado.
|
|
78
|
+
useEffect(() => {
|
|
79
|
+
const pending = timers.current;
|
|
80
|
+
return () => {
|
|
81
|
+
pending.forEach(t => clearTimeout(t));
|
|
82
|
+
pending.clear();
|
|
83
|
+
};
|
|
84
|
+
}, []);
|
|
85
|
+
const value = useMemo(() => ({
|
|
86
|
+
show,
|
|
87
|
+
hide,
|
|
88
|
+
hideAll
|
|
89
|
+
}), [show, hide, hideAll]);
|
|
90
|
+
const hostPosition = position === 'top' ? {
|
|
91
|
+
top: insets.top + 8
|
|
92
|
+
} : {
|
|
93
|
+
bottom: insets.bottom + 8,
|
|
94
|
+
flexDirection: 'column-reverse'
|
|
95
|
+
};
|
|
96
|
+
return /*#__PURE__*/_jsxs(ToastContext.Provider, {
|
|
97
|
+
value: value,
|
|
98
|
+
children: [children, toasts.length > 0 && /*#__PURE__*/_jsx(View, {
|
|
99
|
+
style: [styles.host, hostPosition],
|
|
100
|
+
pointerEvents: "box-none",
|
|
101
|
+
testID: "toast-host",
|
|
102
|
+
children: toasts.map(t => /*#__PURE__*/_jsx(AnimatedToast, {
|
|
103
|
+
children: /*#__PURE__*/_jsx(Toast, {
|
|
104
|
+
title: t.title,
|
|
105
|
+
message: t.message,
|
|
106
|
+
variant: t.variant,
|
|
107
|
+
hideCloseButton: t.hideCloseButton,
|
|
108
|
+
onDismiss: () => hide(t.id),
|
|
109
|
+
onPress: t.onPress ? () => {
|
|
110
|
+
t.onPress?.();
|
|
111
|
+
hide(t.id);
|
|
112
|
+
} : undefined
|
|
113
|
+
})
|
|
114
|
+
}, t.id))
|
|
115
|
+
})]
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
export function useToast() {
|
|
119
|
+
const ctx = useContext(ToastContext);
|
|
120
|
+
if (!ctx) {
|
|
121
|
+
throw new Error('orn-ui: useToast must be used within a <ToastProvider>.');
|
|
122
|
+
}
|
|
123
|
+
return ctx;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=ToastProvider.js.map
|