@ankhorage/zora 1.0.10 → 1.2.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 (96) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +164 -5
  3. package/dist/components/app-bar/AppBar.d.ts +4 -0
  4. package/dist/components/app-bar/AppBar.d.ts.map +1 -0
  5. package/dist/components/app-bar/AppBar.js +63 -0
  6. package/dist/components/app-bar/AppBar.js.map +1 -0
  7. package/dist/components/app-bar/index.d.ts +3 -0
  8. package/dist/components/app-bar/index.d.ts.map +1 -0
  9. package/dist/components/app-bar/index.js +3 -0
  10. package/dist/components/app-bar/index.js.map +1 -0
  11. package/dist/components/app-bar/types.d.ts +31 -0
  12. package/dist/components/app-bar/types.d.ts.map +1 -0
  13. package/dist/components/app-bar/types.js +2 -0
  14. package/dist/components/app-bar/types.js.map +1 -0
  15. package/dist/components/image/Image.d.ts +4 -0
  16. package/dist/components/image/Image.d.ts.map +1 -0
  17. package/dist/components/image/Image.js +8 -0
  18. package/dist/components/image/Image.js.map +1 -0
  19. package/dist/components/image/index.d.ts +3 -0
  20. package/dist/components/image/index.d.ts.map +1 -0
  21. package/dist/components/image/index.js +2 -0
  22. package/dist/components/image/index.js.map +1 -0
  23. package/dist/components/image/types.d.ts +6 -0
  24. package/dist/components/image/types.d.ts.map +1 -0
  25. package/dist/components/image/types.js +2 -0
  26. package/dist/components/image/types.js.map +1 -0
  27. package/dist/components/input/types.d.ts +1 -1
  28. package/dist/components/input/types.d.ts.map +1 -1
  29. package/dist/components/input/types.js.map +1 -1
  30. package/dist/components/toolbar/types.d.ts +1 -1
  31. package/dist/components/toolbar/types.d.ts.map +1 -1
  32. package/dist/components/toolbar/types.js.map +1 -1
  33. package/dist/index.d.ts +11 -3
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +4 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/internal/resolveZoraNavigationItems.d.ts +4 -3
  38. package/dist/internal/resolveZoraNavigationItems.d.ts.map +1 -1
  39. package/dist/internal/resolveZoraNavigationItems.js.map +1 -1
  40. package/dist/patterns/image-preview/ImagePreview.d.ts +4 -0
  41. package/dist/patterns/image-preview/ImagePreview.d.ts.map +1 -0
  42. package/dist/patterns/image-preview/ImagePreview.js +41 -0
  43. package/dist/patterns/image-preview/ImagePreview.js.map +1 -0
  44. package/dist/patterns/image-preview/index.d.ts +3 -0
  45. package/dist/patterns/image-preview/index.d.ts.map +1 -0
  46. package/dist/patterns/image-preview/index.js +2 -0
  47. package/dist/patterns/image-preview/index.js.map +1 -0
  48. package/dist/patterns/image-preview/types.d.ts +36 -0
  49. package/dist/patterns/image-preview/types.d.ts.map +1 -0
  50. package/dist/patterns/image-preview/types.js +2 -0
  51. package/dist/patterns/image-preview/types.js.map +1 -0
  52. package/dist/patterns/image-upload-field/ImageUploadField.d.ts +4 -0
  53. package/dist/patterns/image-upload-field/ImageUploadField.d.ts.map +1 -0
  54. package/dist/patterns/image-upload-field/ImageUploadField.js +211 -0
  55. package/dist/patterns/image-upload-field/ImageUploadField.js.map +1 -0
  56. package/dist/patterns/image-upload-field/index.d.ts +3 -0
  57. package/dist/patterns/image-upload-field/index.d.ts.map +1 -0
  58. package/dist/patterns/image-upload-field/index.js +2 -0
  59. package/dist/patterns/image-upload-field/index.js.map +1 -0
  60. package/dist/patterns/image-upload-field/types.d.ts +35 -0
  61. package/dist/patterns/image-upload-field/types.d.ts.map +1 -0
  62. package/dist/patterns/image-upload-field/types.js +2 -0
  63. package/dist/patterns/image-upload-field/types.js.map +1 -0
  64. package/dist/patterns/image-upload-field/uploadFlow.d.ts +18 -0
  65. package/dist/patterns/image-upload-field/uploadFlow.d.ts.map +1 -0
  66. package/dist/patterns/image-upload-field/uploadFlow.js +106 -0
  67. package/dist/patterns/image-upload-field/uploadFlow.js.map +1 -0
  68. package/dist/patterns/list/types.d.ts +2 -2
  69. package/dist/patterns/list/types.d.ts.map +1 -1
  70. package/dist/patterns/list/types.js.map +1 -1
  71. package/dist/patterns/responsive-panel/types.d.ts +1 -1
  72. package/dist/patterns/responsive-panel/types.d.ts.map +1 -1
  73. package/dist/patterns/responsive-panel/types.js.map +1 -1
  74. package/package.json +9 -10
  75. package/src/components/app-bar/AppBar.tsx +133 -0
  76. package/src/components/app-bar/index.ts +2 -0
  77. package/src/components/app-bar/types.ts +36 -0
  78. package/src/components/image/Image.tsx +11 -0
  79. package/src/components/image/index.ts +2 -0
  80. package/src/components/image/types.ts +7 -0
  81. package/src/components/input/types.ts +1 -1
  82. package/src/components/toolbar/types.ts +2 -2
  83. package/src/index.ts +24 -3
  84. package/src/internal/resolveZoraNavigationItems.ts +3 -3
  85. package/src/patterns/image-preview/ImagePreview.tsx +76 -0
  86. package/src/patterns/image-preview/index.ts +2 -0
  87. package/src/patterns/image-preview/types.ts +41 -0
  88. package/src/patterns/image-upload-field/ImageUploadField.tsx +293 -0
  89. package/src/patterns/image-upload-field/index.ts +2 -0
  90. package/src/patterns/image-upload-field/types.ts +41 -0
  91. package/src/patterns/image-upload-field/uploadFlow.test.ts +117 -0
  92. package/src/patterns/image-upload-field/uploadFlow.ts +145 -0
  93. package/src/patterns/list/types.ts +2 -2
  94. package/src/patterns/responsive-panel/types.ts +2 -2
  95. package/src/showcaseCoverage.test.ts +4 -0
  96. package/src/theme/themeScopeStructure.test.ts +2 -0
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAmB7C,OAAO,EACL,IAAI,EACJ,WAAW,EACX,SAAS,EACT,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC;AAS3B,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAM3C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAc9D,OAAO,EACL,GAAG,EACH,MAAM,EACN,SAAS,EACT,OAAO,EACP,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,MAAM,EACN,KAAK,EACL,OAAO,GACR,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AActD,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAS5D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,cAAc,SAAS,CAAC","sourcesContent":["export type { AvatarProps, AvatarShape, AvatarSize } from './components/avatar';\nexport { Avatar, resolveAvatarInitials } from './components/avatar';\nexport type { AvatarGroupItem, AvatarGroupProps } from './components/avatar-group';\nexport { AvatarGroup } from './components/avatar-group';\nexport type { BadgeProps } from './components/badge';\nexport { Badge } from './components/badge';\nexport type { ButtonProps } from './components/button';\nexport { Button } from './components/button';\nexport type { CardProps } from './components/card';\nexport { Card } from './components/card';\nexport type { CheckboxGroupOption, CheckboxGroupProps, CheckboxProps } from './components/checkbox';\nexport { Checkbox, CheckboxGroup } from './components/checkbox';\nexport type { ChipProps } from './components/chip';\nexport { Chip } from './components/chip';\nexport type { ChipGroupItem, ChipGroupProps } from './components/chip-group';\nexport { ChipGroup } from './components/chip-group';\nexport type { DrawerProps } from './components/drawer';\nexport { Drawer } from './components/drawer';\nexport type {\n FormActionsProps,\n FormErrorProps,\n FormErrors,\n FormFieldConfig,\n FormFieldControlProps,\n FormFieldInputType,\n FormFieldProps,\n FormFieldValue,\n FormFieldWrapperProps,\n FormProps,\n FormValidationErrors,\n FormValidationResult,\n FormValues,\n UseFormControllerOptions,\n UseFormControllerResult,\n ValidationRule,\n} from './components/form';\nexport {\n Form,\n FormActions,\n FormError,\n FormField,\n hasRequiredRule,\n useFormController,\n validateField,\n validateFields,\n validateValue,\n} from './components/form';\nexport type {\n HeadingAlign,\n HeadingLevel,\n HeadingProps,\n HeadingSize,\n HeadingTone,\n HeadingWeight,\n} from './components/heading';\nexport { Heading } from './components/heading';\nexport type { IconProps } from './components/icon';\nexport { Icon } from './components/icon';\nexport type { IconButtonProps } from './components/icon-button';\nexport { IconButton } from './components/icon-button';\nexport type { InputProps, InputTrailingAction } from './components/input';\nexport { Input } from './components/input';\nexport type { MediaCardImageProps, MediaCardProps } from './components/media-card';\nexport { MediaCard } from './components/media-card';\nexport type { MetricCardProps } from './components/metric-card';\nexport { MetricCard } from './components/metric-card';\nexport type { ModalProps } from './components/modal';\nexport { Modal } from './components/modal';\nexport type {\n NavigationItemProps,\n ZoraNavigationRouteMetadata,\n ZoraNavigationRouteState,\n} from './components/navigation-item';\nexport { NavigationItem } from './components/navigation-item';\nexport type { NavigationListProps, ZoraNavigationRouteMap } from './components/navigation-list';\nexport { NavigationList } from './components/navigation-list';\nexport type { ProgressProps } from './components/progress';\nexport { Progress } from './components/progress';\nexport type { RadioGroupOption, RadioGroupProps, RadioProps } from './components/radio';\nexport { Radio, RadioGroup } from './components/radio';\nexport type { RatingProps } from './components/rating';\nexport { Rating } from './components/rating';\nexport type { SearchBarProps } from './components/search-bar';\nexport { SearchBar } from './components/search-bar';\nexport type { SelectOption, SelectProps } from './components/select';\nexport { Select } from './components/select';\nexport type { TabItem, TabsProps } from './components/tabs';\nexport { Tabs } from './components/tabs';\nexport type { TextAlign, TextProps, TextTone, TextVariant, TextWeight } from './components/text';\nexport { Text } from './components/text';\nexport type { TextareaProps } from './components/textarea';\nexport { Textarea } from './components/textarea';\nexport type { ToolbarActionProps, ToolbarProps } from './components/toolbar';\nexport { Toolbar, ToolbarAction } from './components/toolbar';\nexport type {\n BoxProps,\n CenterProps,\n ContainerProps,\n DividerProps,\n GridProps,\n InlineProps,\n ShowProps,\n SpacerProps,\n StackProps,\n SurfaceProps,\n SurfaceVariant,\n} from './foundation';\nexport {\n Box,\n Center,\n Container,\n Divider,\n Grid,\n Inline,\n Show,\n Spacer,\n Stack,\n Surface,\n} from './foundation';\nexport type { AppShellProps } from './layout/app-shell';\nexport { AppShell } from './layout/app-shell';\nexport type { AuthLayoutProps } from './layout/auth-layout';\nexport { AuthLayout } from './layout/auth-layout';\nexport type { PageProps } from './layout/page';\nexport { Page } from './layout/page';\nexport type { PageHeaderProps } from './layout/page-header';\nexport { PageHeader } from './layout/page-header';\nexport type { PageSectionProps } from './layout/page-section';\nexport { PageSection } from './layout/page-section';\nexport type { SettingsLayoutProps } from './layout/settings-layout';\nexport { SettingsLayout } from './layout/settings-layout';\nexport type { SidebarLayoutProps } from './layout/sidebar-layout';\nexport { SidebarLayout } from './layout/sidebar-layout';\nexport type { TopbarLayoutProps } from './layout/topbar-layout';\nexport { TopbarLayout } from './layout/topbar-layout';\nexport type {\n AuthFormBaseProps,\n AuthIdentifierKind,\n ForgotPasswordFormProps,\n ForgotPasswordFormValues,\n OtpFormProps,\n OtpFormValues,\n SignInFormProps,\n SignInFormValues,\n SignUpFormField,\n SignUpFormProps,\n SignUpFormValues,\n} from './patterns/auth';\nexport { ForgotPasswordForm, OtpForm, SignInForm, SignUpForm } from './patterns/auth';\nexport type {\n CollectionEditorProps,\n CollectionEditorRenderItemProps,\n} from './patterns/collection-editor';\nexport { CollectionEditor } from './patterns/collection-editor';\nexport type { ConfirmDialogProps } from './patterns/confirm-dialog';\nexport { ConfirmDialog } from './patterns/confirm-dialog';\nexport type { DisclosureSectionProps } from './patterns/disclosure-section';\nexport { DisclosureSection } from './patterns/disclosure-section';\nexport type { EmptyStateAction, EmptyStateProps } from './patterns/empty-state';\nexport { EmptyState } from './patterns/empty-state';\nexport type { FilterBarProps } from './patterns/filter-bar';\nexport { FilterBar } from './patterns/filter-bar';\nexport type { InspectorFieldProps } from './patterns/inspector-field';\nexport { InspectorField } from './patterns/inspector-field';\nexport type {\n ListChildrenProps,\n ListItemsProps,\n ListProps,\n ListRowProps,\n ListRowVariant,\n ListSectionProps,\n} from './patterns/list';\nexport { List, ListRow, ListSection } from './patterns/list';\nexport type { NoticeProps } from './patterns/notice';\nexport { Notice } from './patterns/notice';\nexport type { PanelProps } from './patterns/panel';\nexport { Panel } from './patterns/panel';\nexport type { ResponsivePanelProps } from './patterns/responsive-panel';\nexport { ResponsivePanel } from './patterns/responsive-panel';\nexport type { SectionHeaderProps } from './patterns/section-header';\nexport { SectionHeader } from './patterns/section-header';\nexport type { SettingsRowProps } from './patterns/settings-row';\nexport { SettingsRow } from './patterns/settings-row';\nexport type { SwitchFieldProps } from './patterns/switch-field';\nexport { SwitchField } from './patterns/switch-field';\nexport type { ThemeComposerProps } from './patterns/theme-composer';\nexport { ThemeComposer } from './patterns/theme-composer';\nexport type { PaletteItemProps, TileGridProps } from './patterns/tile-grid';\nexport { PaletteItem, TileGrid } from './patterns/tile-grid';\nexport type { TimelineItem, TimelineProps } from './patterns/timeline';\nexport { Timeline } from './patterns/timeline';\nexport type { TreeItemNode, TreeItemRenderProps, TreeViewProps } from './patterns/tree-view';\nexport { TreeItem, TreeView } from './patterns/tree-view';\nexport type { ZoraDrawerContentProps } from './patterns/zora-drawer-content';\nexport { ZoraDrawerContent } from './patterns/zora-drawer-content';\nexport type { ZoraTabBarProps } from './patterns/zora-tab-bar';\nexport { ZoraTabBar } from './patterns/zora-tab-bar';\nexport * from './theme';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export type { AppBarMode, AppBarOverflowAction, AppBarProps } from './components/app-bar';\nexport { AppBar } from './components/app-bar';\nexport type { AvatarProps, AvatarShape, AvatarSize } from './components/avatar';\nexport { Avatar, resolveAvatarInitials } from './components/avatar';\nexport type { AvatarGroupItem, AvatarGroupProps } from './components/avatar-group';\nexport { AvatarGroup } from './components/avatar-group';\nexport type { BadgeProps } from './components/badge';\nexport { Badge } from './components/badge';\nexport type { ButtonProps } from './components/button';\nexport { Button } from './components/button';\nexport type { CardProps } from './components/card';\nexport { Card } from './components/card';\nexport type { CheckboxGroupOption, CheckboxGroupProps, CheckboxProps } from './components/checkbox';\nexport { Checkbox, CheckboxGroup } from './components/checkbox';\nexport type { ChipProps } from './components/chip';\nexport { Chip } from './components/chip';\nexport type { ChipGroupItem, ChipGroupProps } from './components/chip-group';\nexport { ChipGroup } from './components/chip-group';\nexport type { DrawerProps } from './components/drawer';\nexport { Drawer } from './components/drawer';\nexport type {\n FormActionsProps,\n FormErrorProps,\n FormErrors,\n FormFieldConfig,\n FormFieldControlProps,\n FormFieldInputType,\n FormFieldProps,\n FormFieldValue,\n FormFieldWrapperProps,\n FormProps,\n FormValidationErrors,\n FormValidationResult,\n FormValues,\n UseFormControllerOptions,\n UseFormControllerResult,\n ValidationRule,\n} from './components/form';\nexport {\n Form,\n FormActions,\n FormError,\n FormField,\n hasRequiredRule,\n useFormController,\n validateField,\n validateFields,\n validateValue,\n} from './components/form';\nexport type {\n HeadingAlign,\n HeadingLevel,\n HeadingProps,\n HeadingSize,\n HeadingTone,\n HeadingWeight,\n} from './components/heading';\nexport { Heading } from './components/heading';\nexport type { IconProps } from './components/icon';\nexport { Icon } from './components/icon';\nexport type { IconButtonProps } from './components/icon-button';\nexport { IconButton } from './components/icon-button';\nexport type { ImageFit, ImageProps, SurfaceImageSource } from './components/image';\nexport { Image } from './components/image';\nexport type { InputProps, InputTrailingAction } from './components/input';\nexport { Input } from './components/input';\nexport type { MediaCardImageProps, MediaCardProps } from './components/media-card';\nexport { MediaCard } from './components/media-card';\nexport type { MetricCardProps } from './components/metric-card';\nexport { MetricCard } from './components/metric-card';\nexport type { ModalProps } from './components/modal';\nexport { Modal } from './components/modal';\nexport type {\n NavigationItemProps,\n ZoraNavigationRouteMetadata,\n ZoraNavigationRouteState,\n} from './components/navigation-item';\nexport { NavigationItem } from './components/navigation-item';\nexport type { NavigationListProps, ZoraNavigationRouteMap } from './components/navigation-list';\nexport { NavigationList } from './components/navigation-list';\nexport type { ProgressProps } from './components/progress';\nexport { Progress } from './components/progress';\nexport type { RadioGroupOption, RadioGroupProps, RadioProps } from './components/radio';\nexport { Radio, RadioGroup } from './components/radio';\nexport type { RatingProps } from './components/rating';\nexport { Rating } from './components/rating';\nexport type { SearchBarProps } from './components/search-bar';\nexport { SearchBar } from './components/search-bar';\nexport type { SelectOption, SelectProps } from './components/select';\nexport { Select } from './components/select';\nexport type { TabItem, TabsProps, TabsVariant } from './components/tabs';\nexport { Tabs } from './components/tabs';\nexport type { TextAlign, TextProps, TextTone, TextVariant, TextWeight } from './components/text';\nexport { Text } from './components/text';\nexport type { TextareaProps } from './components/textarea';\nexport { Textarea } from './components/textarea';\nexport type { ToolbarActionProps, ToolbarPosition, ToolbarProps } from './components/toolbar';\nexport { Toolbar, ToolbarAction } from './components/toolbar';\nexport type {\n BoxProps,\n CenterProps,\n ContainerProps,\n DividerProps,\n GridProps,\n InlineProps,\n ShowProps,\n SpacerProps,\n StackProps,\n SurfaceProps,\n SurfaceVariant,\n} from './foundation';\nexport {\n Box,\n Center,\n Container,\n Divider,\n Grid,\n Inline,\n Show,\n Spacer,\n Stack,\n Surface,\n} from './foundation';\nexport type { AppShellProps } from './layout/app-shell';\nexport { AppShell } from './layout/app-shell';\nexport type { AuthLayoutProps } from './layout/auth-layout';\nexport { AuthLayout } from './layout/auth-layout';\nexport type { PageProps } from './layout/page';\nexport { Page } from './layout/page';\nexport type { PageHeaderProps } from './layout/page-header';\nexport { PageHeader } from './layout/page-header';\nexport type { PageSectionProps } from './layout/page-section';\nexport { PageSection } from './layout/page-section';\nexport type { SettingsLayoutProps } from './layout/settings-layout';\nexport { SettingsLayout } from './layout/settings-layout';\nexport type { SidebarLayoutProps } from './layout/sidebar-layout';\nexport { SidebarLayout } from './layout/sidebar-layout';\nexport type { TopbarLayoutProps } from './layout/topbar-layout';\nexport { TopbarLayout } from './layout/topbar-layout';\nexport type {\n AuthFormBaseProps,\n AuthIdentifierKind,\n ForgotPasswordFormProps,\n ForgotPasswordFormValues,\n OtpFormProps,\n OtpFormValues,\n SignInFormProps,\n SignInFormValues,\n SignUpFormField,\n SignUpFormProps,\n SignUpFormValues,\n} from './patterns/auth';\nexport { ForgotPasswordForm, OtpForm, SignInForm, SignUpForm } from './patterns/auth';\nexport type {\n CollectionEditorProps,\n CollectionEditorRenderItemProps,\n} from './patterns/collection-editor';\nexport { CollectionEditor } from './patterns/collection-editor';\nexport type { ConfirmDialogProps } from './patterns/confirm-dialog';\nexport { ConfirmDialog } from './patterns/confirm-dialog';\nexport type { DisclosureSectionProps } from './patterns/disclosure-section';\nexport { DisclosureSection } from './patterns/disclosure-section';\nexport type { EmptyStateAction, EmptyStateProps } from './patterns/empty-state';\nexport { EmptyState } from './patterns/empty-state';\nexport type { FilterBarProps } from './patterns/filter-bar';\nexport { FilterBar } from './patterns/filter-bar';\nexport type {\n ImagePreviewProps,\n ZoraImageAsset,\n ZoraImageMetadata,\n} from './patterns/image-preview';\nexport { ImagePreview } from './patterns/image-preview';\nexport type {\n ImageUploadFieldProps,\n ImageUploadProgressContext,\n ZoraPickedImage,\n} from './patterns/image-upload-field';\nexport { ImageUploadField } from './patterns/image-upload-field';\nexport type { InspectorFieldProps } from './patterns/inspector-field';\nexport { InspectorField } from './patterns/inspector-field';\nexport type {\n ListChildrenProps,\n ListItemsProps,\n ListProps,\n ListRowProps,\n ListRowVariant,\n ListSectionProps,\n} from './patterns/list';\nexport { List, ListRow, ListSection } from './patterns/list';\nexport type { NoticeProps } from './patterns/notice';\nexport { Notice } from './patterns/notice';\nexport type { PanelProps } from './patterns/panel';\nexport { Panel } from './patterns/panel';\nexport type {\n ResponsivePanelDesktopMode,\n ResponsivePanelMobileMode,\n ResponsivePanelProps,\n ResponsivePanelSide,\n} from './patterns/responsive-panel';\nexport { ResponsivePanel } from './patterns/responsive-panel';\nexport type { SectionHeaderProps } from './patterns/section-header';\nexport { SectionHeader } from './patterns/section-header';\nexport type { SettingsRowProps } from './patterns/settings-row';\nexport { SettingsRow } from './patterns/settings-row';\nexport type { SwitchFieldProps } from './patterns/switch-field';\nexport { SwitchField } from './patterns/switch-field';\nexport type { ThemeComposerProps } from './patterns/theme-composer';\nexport { ThemeComposer } from './patterns/theme-composer';\nexport type { PaletteItemProps, TileGridProps } from './patterns/tile-grid';\nexport { PaletteItem, TileGrid } from './patterns/tile-grid';\nexport type { TimelineItem, TimelineProps } from './patterns/timeline';\nexport { Timeline } from './patterns/timeline';\nexport type { TreeItemNode, TreeItemRenderProps, TreeViewProps } from './patterns/tree-view';\nexport { TreeItem, TreeView } from './patterns/tree-view';\nexport type { ZoraDrawerContentProps } from './patterns/zora-drawer-content';\nexport { ZoraDrawerContent } from './patterns/zora-drawer-content';\nexport type { ZoraTabBarProps } from './patterns/zora-tab-bar';\nexport { ZoraTabBar } from './patterns/zora-tab-bar';\nexport * from './theme';\n"]}
@@ -1,7 +1,7 @@
1
1
  import type React from 'react';
2
2
  import type { ZoraNavigationRouteMetadata, ZoraNavigationRouteState } from '../components/navigation-item';
3
3
  import type { ZoraNavigationRouteMap } from '../components/navigation-list';
4
- export interface ZoraNavigationDescriptorOptions {
4
+ interface ZoraNavigationDescriptorOptions {
5
5
  title?: string;
6
6
  tabBarLabel?: string | React.ReactNode;
7
7
  drawerLabel?: string | React.ReactNode;
@@ -14,12 +14,12 @@ export interface ZoraNavigationState {
14
14
  index: number;
15
15
  routes: readonly ZoraNavigationRouteState[];
16
16
  }
17
- export interface ZoraTabPressEvent {
17
+ interface ZoraTabPressEvent {
18
18
  type: 'tabPress';
19
19
  target: string;
20
20
  canPreventDefault: true;
21
21
  }
22
- export interface ZoraTabPressEventResult {
22
+ interface ZoraTabPressEventResult {
23
23
  defaultPrevented: boolean;
24
24
  }
25
25
  export interface ZoraTabBarNavigation {
@@ -61,4 +61,5 @@ export declare function createDrawerItemPressHandler({ item, navigation, }: {
61
61
  item: ZoraResolvedNavigationItem;
62
62
  navigation: ZoraDrawerNavigation;
63
63
  }): (() => void) | undefined;
64
+ export {};
64
65
  //# sourceMappingURL=resolveZoraNavigationItems.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveZoraNavigationItems.d.ts","sourceRoot":"","sources":["../../src/internal/resolveZoraNavigationItems.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EACV,2BAA2B,EAC3B,wBAAwB,EACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAE5E,MAAM,WAAW,+BAA+B;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;CACxC;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,+BAA+B,CAAC;CAC3C;AAED,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAC9C,MAAM,CAAC,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAAC,CACrD,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,wBAAwB,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,uBAAuB,CAAC;IAC7D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,wBAAwB,CAAC;IAChC,QAAQ,CAAC,EAAE,2BAA2B,CAAC;IACvC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC;AAEtE,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,QAAQ,EACR,UAAU,EACV,IAAI,GACL,EAAE;IACD,KAAK,EAAE,wBAAwB,CAAC;IAChC,QAAQ,EAAE,2BAA2B,GAAG,SAAS,CAAC;IAClD,UAAU,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACjD,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;CACxB,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,CAgB3D;AAED,wBAAgB,sBAAsB,CAAC,EACrC,KAAK,EACL,WAAW,EACX,QAAQ,EACR,IAAI,GACL,EAAE;IACD,KAAK,EAAE,mBAAmB,CAAC;IAC3B,WAAW,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAC9C,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;CACxB,GAAG,SAAS,0BAA0B,EAAE,CAiBxC;AAED,wBAAgB,4BAA4B,CAAC,EAC3C,IAAI,EACJ,UAAU,GACX,EAAE;IACD,IAAI,EAAE,0BAA0B,CAAC;IACjC,UAAU,EAAE,oBAAoB,CAAC;CAClC,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAkB3B;AAED,wBAAgB,4BAA4B,CAAC,EAC3C,IAAI,EACJ,UAAU,GACX,EAAE;IACD,IAAI,EAAE,0BAA0B,CAAC;IACjC,UAAU,EAAE,oBAAoB,CAAC;CAClC,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAS3B"}
1
+ {"version":3,"file":"resolveZoraNavigationItems.d.ts","sourceRoot":"","sources":["../../src/internal/resolveZoraNavigationItems.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolveZoraNavigationItems.js","sourceRoot":"","sources":["../../src/internal/resolveZoraNavigationItems.ts"],"names":[],"mappings":"AAyDA,MAAM,UAAU,iBAAiB,CAAC,EAChC,KAAK,EACL,QAAQ,EACR,UAAU,EACV,IAAI,GAML;IACC,IAAI,QAAQ,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACvD,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,EAAE,OAAO,CAAC;IACpC,MAAM,QAAQ,GACZ,IAAI,KAAK,KAAK;QACZ,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,IAAI,OAAO,EAAE,KAAK,CAAC;QAC1C,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,IAAI,OAAO,EAAE,KAAK,CAAC,CAAC;IAE/C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACnD,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,EACrC,KAAK,EACL,WAAW,EACX,QAAQ,EACR,IAAI,GAML;IACC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE9C,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAChC,MAAM,QAAQ,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,EAAE,KAAK,EAAE,GAAG,iBAAiB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE7C,OAAO;YACL,KAAK;YACL,QAAQ;YACR,KAAK;YACL,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;YAC3D,QAAQ;SACT,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,EAC3C,IAAI,EACJ,UAAU,GAIX;IACC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,EAAE;QACV,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG;YACtB,iBAAiB,EAAE,IAAI;SACxB,CAAC,CAAC;QAEH,IAAI,MAAM,EAAE,gBAAgB,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,EAC3C,IAAI,EACJ,UAAU,GAIX;IACC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type React from 'react';\n\nimport type {\n ZoraNavigationRouteMetadata,\n ZoraNavigationRouteState,\n} from '../components/navigation-item';\nimport type { ZoraNavigationRouteMap } from '../components/navigation-list';\n\nexport interface ZoraNavigationDescriptorOptions {\n title?: string;\n tabBarLabel?: string | React.ReactNode;\n drawerLabel?: string | React.ReactNode;\n}\n\nexport interface ZoraNavigationDescriptor {\n options?: ZoraNavigationDescriptorOptions;\n}\n\nexport type ZoraNavigationDescriptors = Readonly<\n Record<string, ZoraNavigationDescriptor | undefined>\n>;\n\nexport interface ZoraNavigationState {\n index: number;\n routes: readonly ZoraNavigationRouteState[];\n}\n\nexport interface ZoraTabPressEvent {\n type: 'tabPress';\n target: string;\n canPreventDefault: true;\n}\n\nexport interface ZoraTabPressEventResult {\n defaultPrevented: boolean;\n}\n\nexport interface ZoraTabBarNavigation {\n emit?: (event: ZoraTabPressEvent) => ZoraTabPressEventResult;\n navigate: (name: string) => void;\n}\n\nexport interface ZoraDrawerNavigation {\n navigate: (name: string) => void;\n closeDrawer?: () => void;\n}\n\nexport interface ZoraResolvedNavigationItem {\n route: ZoraNavigationRouteState;\n metadata?: ZoraNavigationRouteMetadata;\n label: React.ReactNode;\n active: boolean;\n disabled: boolean;\n}\n\nexport type ZoraRouteLabelSource = 'routeMap' | 'descriptor' | 'name';\n\nexport function resolveRouteLabel({\n route,\n metadata,\n descriptor,\n kind,\n}: {\n route: ZoraNavigationRouteState;\n metadata: ZoraNavigationRouteMetadata | undefined;\n descriptor: ZoraNavigationDescriptor | undefined;\n kind: 'tab' | 'drawer';\n}): { label: React.ReactNode; source: ZoraRouteLabelSource } {\n if (metadata?.label !== undefined) {\n return { label: metadata.label, source: 'routeMap' };\n }\n\n const options = descriptor?.options;\n const fallback =\n kind === 'tab'\n ? (options?.tabBarLabel ?? options?.title)\n : (options?.drawerLabel ?? options?.title);\n\n if (fallback !== undefined) {\n return { label: fallback, source: 'descriptor' };\n }\n\n return { label: route.name, source: 'name' };\n}\n\nexport function resolveNavigationItems({\n state,\n descriptors,\n routeMap,\n kind,\n}: {\n state: ZoraNavigationState;\n descriptors?: ZoraNavigationDescriptors | undefined;\n routeMap?: ZoraNavigationRouteMap | undefined;\n kind: 'tab' | 'drawer';\n}): readonly ZoraResolvedNavigationItem[] {\n const activeRoute = state.routes[state.index];\n\n return state.routes.map((route) => {\n const metadata = routeMap?.[route.name];\n const descriptor = descriptors?.[route.key];\n const { label } = resolveRouteLabel({ route, metadata, descriptor, kind });\n const disabled = Boolean(metadata?.disabled);\n\n return {\n route,\n metadata,\n label,\n active: activeRoute ? activeRoute.key === route.key : false,\n disabled,\n };\n });\n}\n\nexport function createTabBarItemPressHandler({\n item,\n navigation,\n}: {\n item: ZoraResolvedNavigationItem;\n navigation: ZoraTabBarNavigation;\n}): (() => void) | undefined {\n if (item.disabled || item.active) {\n return undefined;\n }\n\n return () => {\n const result = navigation.emit?.({\n type: 'tabPress',\n target: item.route.key,\n canPreventDefault: true,\n });\n\n if (result?.defaultPrevented) {\n return;\n }\n\n navigation.navigate(item.route.name);\n };\n}\n\nexport function createDrawerItemPressHandler({\n item,\n navigation,\n}: {\n item: ZoraResolvedNavigationItem;\n navigation: ZoraDrawerNavigation;\n}): (() => void) | undefined {\n if (item.disabled) {\n return undefined;\n }\n\n return () => {\n navigation.navigate(item.route.name);\n navigation.closeDrawer?.();\n };\n}\n"]}
1
+ {"version":3,"file":"resolveZoraNavigationItems.js","sourceRoot":"","sources":["../../src/internal/resolveZoraNavigationItems.ts"],"names":[],"mappings":"AAyDA,MAAM,UAAU,iBAAiB,CAAC,EAChC,KAAK,EACL,QAAQ,EACR,UAAU,EACV,IAAI,GAML;IACC,IAAI,QAAQ,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACvD,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,EAAE,OAAO,CAAC;IACpC,MAAM,QAAQ,GACZ,IAAI,KAAK,KAAK;QACZ,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,IAAI,OAAO,EAAE,KAAK,CAAC;QAC1C,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,IAAI,OAAO,EAAE,KAAK,CAAC,CAAC;IAE/C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACnD,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,EACrC,KAAK,EACL,WAAW,EACX,QAAQ,EACR,IAAI,GAML;IACC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE9C,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAChC,MAAM,QAAQ,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,EAAE,KAAK,EAAE,GAAG,iBAAiB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE7C,OAAO;YACL,KAAK;YACL,QAAQ;YACR,KAAK;YACL,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;YAC3D,QAAQ;SACT,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,EAC3C,IAAI,EACJ,UAAU,GAIX;IACC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,EAAE;QACV,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG;YACtB,iBAAiB,EAAE,IAAI;SACxB,CAAC,CAAC;QAEH,IAAI,MAAM,EAAE,gBAAgB,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,EAC3C,IAAI,EACJ,UAAU,GAIX;IACC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type React from 'react';\n\nimport type {\n ZoraNavigationRouteMetadata,\n ZoraNavigationRouteState,\n} from '../components/navigation-item';\nimport type { ZoraNavigationRouteMap } from '../components/navigation-list';\n\ninterface ZoraNavigationDescriptorOptions {\n title?: string;\n tabBarLabel?: string | React.ReactNode;\n drawerLabel?: string | React.ReactNode;\n}\n\nexport interface ZoraNavigationDescriptor {\n options?: ZoraNavigationDescriptorOptions;\n}\n\nexport type ZoraNavigationDescriptors = Readonly<\n Record<string, ZoraNavigationDescriptor | undefined>\n>;\n\nexport interface ZoraNavigationState {\n index: number;\n routes: readonly ZoraNavigationRouteState[];\n}\n\ninterface ZoraTabPressEvent {\n type: 'tabPress';\n target: string;\n canPreventDefault: true;\n}\n\ninterface ZoraTabPressEventResult {\n defaultPrevented: boolean;\n}\n\nexport interface ZoraTabBarNavigation {\n emit?: (event: ZoraTabPressEvent) => ZoraTabPressEventResult;\n navigate: (name: string) => void;\n}\n\nexport interface ZoraDrawerNavigation {\n navigate: (name: string) => void;\n closeDrawer?: () => void;\n}\n\nexport interface ZoraResolvedNavigationItem {\n route: ZoraNavigationRouteState;\n metadata?: ZoraNavigationRouteMetadata;\n label: React.ReactNode;\n active: boolean;\n disabled: boolean;\n}\n\nexport type ZoraRouteLabelSource = 'routeMap' | 'descriptor' | 'name';\n\nexport function resolveRouteLabel({\n route,\n metadata,\n descriptor,\n kind,\n}: {\n route: ZoraNavigationRouteState;\n metadata: ZoraNavigationRouteMetadata | undefined;\n descriptor: ZoraNavigationDescriptor | undefined;\n kind: 'tab' | 'drawer';\n}): { label: React.ReactNode; source: ZoraRouteLabelSource } {\n if (metadata?.label !== undefined) {\n return { label: metadata.label, source: 'routeMap' };\n }\n\n const options = descriptor?.options;\n const fallback =\n kind === 'tab'\n ? (options?.tabBarLabel ?? options?.title)\n : (options?.drawerLabel ?? options?.title);\n\n if (fallback !== undefined) {\n return { label: fallback, source: 'descriptor' };\n }\n\n return { label: route.name, source: 'name' };\n}\n\nexport function resolveNavigationItems({\n state,\n descriptors,\n routeMap,\n kind,\n}: {\n state: ZoraNavigationState;\n descriptors?: ZoraNavigationDescriptors | undefined;\n routeMap?: ZoraNavigationRouteMap | undefined;\n kind: 'tab' | 'drawer';\n}): readonly ZoraResolvedNavigationItem[] {\n const activeRoute = state.routes[state.index];\n\n return state.routes.map((route) => {\n const metadata = routeMap?.[route.name];\n const descriptor = descriptors?.[route.key];\n const { label } = resolveRouteLabel({ route, metadata, descriptor, kind });\n const disabled = Boolean(metadata?.disabled);\n\n return {\n route,\n metadata,\n label,\n active: activeRoute ? activeRoute.key === route.key : false,\n disabled,\n };\n });\n}\n\nexport function createTabBarItemPressHandler({\n item,\n navigation,\n}: {\n item: ZoraResolvedNavigationItem;\n navigation: ZoraTabBarNavigation;\n}): (() => void) | undefined {\n if (item.disabled || item.active) {\n return undefined;\n }\n\n return () => {\n const result = navigation.emit?.({\n type: 'tabPress',\n target: item.route.key,\n canPreventDefault: true,\n });\n\n if (result?.defaultPrevented) {\n return;\n }\n\n navigation.navigate(item.route.name);\n };\n}\n\nexport function createDrawerItemPressHandler({\n item,\n navigation,\n}: {\n item: ZoraResolvedNavigationItem;\n navigation: ZoraDrawerNavigation;\n}): (() => void) | undefined {\n if (item.disabled) {\n return undefined;\n }\n\n return () => {\n navigation.navigate(item.route.name);\n navigation.closeDrawer?.();\n };\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { ImagePreviewProps } from './types';
3
+ export declare const ImagePreview: (props: ImagePreviewProps) => React.ReactElement | null;
4
+ //# sourceMappingURL=ImagePreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImagePreview.d.ts","sourceRoot":"","sources":["../../../src/patterns/image-preview/ImagePreview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,SAAS,CAAC;AAoEjE,eAAO,MAAM,YAAY,yDAAwC,CAAC"}
@@ -0,0 +1,41 @@
1
+ import React from 'react';
2
+ import { Image } from '../../components/image';
3
+ import { Text } from '../../components/text';
4
+ import { Box, Stack } from '../../foundation';
5
+ import { useZoraTheme } from '../../theme/useZoraTheme';
6
+ import { withZoraThemeScope } from '../../theme/withZoraThemeScope';
7
+ function resolveRenderableUrl(asset) {
8
+ if (!asset)
9
+ return null;
10
+ if (asset.kind === 'url') {
11
+ return asset.url;
12
+ }
13
+ return asset.publicUrl ?? null;
14
+ }
15
+ function resolveSafeAspectRatio(value) {
16
+ if (!value || !Number.isFinite(value) || value <= 0) {
17
+ return 1;
18
+ }
19
+ return value;
20
+ }
21
+ function ImagePreviewInner({ themeId: _themeId, mode: _mode, testID, asset, aspectRatio, fit = 'cover', emptyTitle = 'No image', emptyDescription = 'Select an image to preview it here.', }) {
22
+ const { theme } = useZoraTheme();
23
+ const renderableUrl = resolveRenderableUrl(asset);
24
+ const resolvedAspectRatio = resolveSafeAspectRatio(aspectRatio);
25
+ return (<Box bg={theme.semantics.neutral.surface} borderColor={theme.semantics.neutral.divider} borderWidth={1} radius="l" testID={testID} style={{ overflow: 'hidden' }}>
26
+ {renderableUrl ? (<Box style={{ aspectRatio: resolvedAspectRatio, width: '100%' }}>
27
+ <Image alt={asset?.alt} fit={fit} source={renderableUrl} style={{ height: '100%', width: '100%' }}/>
28
+ </Box>) : (<Box p="l">
29
+ <Stack gap="xs">
30
+ <Text variant="label" weight="semiBold">
31
+ {emptyTitle}
32
+ </Text>
33
+ <Text tone="muted" variant="bodySmall">
34
+ {emptyDescription}
35
+ </Text>
36
+ </Stack>
37
+ </Box>)}
38
+ </Box>);
39
+ }
40
+ export const ImagePreview = withZoraThemeScope(ImagePreviewInner);
41
+ //# sourceMappingURL=ImagePreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImagePreview.js","sourceRoot":"","sources":["../../../src/patterns/image-preview/ImagePreview.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { Image } from '../../components/image';\nimport { Text } from '../../components/text';\nimport { Box, Stack } from '../../foundation';\nimport { useZoraTheme } from '../../theme/useZoraTheme';\nimport { withZoraThemeScope } from '../../theme/withZoraThemeScope';\nimport type { ImagePreviewProps, ZoraImageAsset } from './types';\n\nfunction resolveRenderableUrl(asset: ZoraImageAsset | null | undefined): string | null {\n if (!asset) return null;\n\n if (asset.kind === 'url') {\n return asset.url;\n }\n\n return asset.publicUrl ?? null;\n}\n\nfunction resolveSafeAspectRatio(value: number | undefined): number {\n if (!value || !Number.isFinite(value) || value <= 0) {\n return 1;\n }\n\n return value;\n}\n\nfunction ImagePreviewInner({\n themeId: _themeId,\n mode: _mode,\n testID,\n asset,\n aspectRatio,\n fit = 'cover',\n emptyTitle = 'No image',\n emptyDescription = 'Select an image to preview it here.',\n}: ImagePreviewProps) {\n const { theme } = useZoraTheme();\n const renderableUrl = resolveRenderableUrl(asset);\n const resolvedAspectRatio = resolveSafeAspectRatio(aspectRatio);\n\n return (\n <Box\n bg={theme.semantics.neutral.surface}\n borderColor={theme.semantics.neutral.divider}\n borderWidth={1}\n radius=\"l\"\n testID={testID}\n style={{ overflow: 'hidden' }}\n >\n {renderableUrl ? (\n <Box style={{ aspectRatio: resolvedAspectRatio, width: '100%' }}>\n <Image\n alt={asset?.alt}\n fit={fit}\n source={renderableUrl}\n style={{ height: '100%', width: '100%' }}\n />\n </Box>\n ) : (\n <Box p=\"l\">\n <Stack gap=\"xs\">\n <Text variant=\"label\" weight=\"semiBold\">\n {emptyTitle}\n </Text>\n <Text tone=\"muted\" variant=\"bodySmall\">\n {emptyDescription}\n </Text>\n </Stack>\n </Box>\n )}\n </Box>\n );\n}\n\nexport const ImagePreview = withZoraThemeScope(ImagePreviewInner);\n"]}
@@ -0,0 +1,3 @@
1
+ export { ImagePreview } from './ImagePreview';
2
+ export type { ImagePreviewProps, ZoraImageAsset, ZoraImageMetadata } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/patterns/image-preview/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ImagePreview } from './ImagePreview';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/patterns/image-preview/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC","sourcesContent":["export { ImagePreview } from './ImagePreview';\nexport type { ImagePreviewProps, ZoraImageAsset, ZoraImageMetadata } from './types';\n"]}
@@ -0,0 +1,36 @@
1
+ import type React from 'react';
2
+ import type { ImageFit } from '../../components/image';
3
+ import type { ZoraBaseProps } from '../../theme/ZoraBaseProps';
4
+ export interface ZoraImageMetadata {
5
+ fileName?: string;
6
+ sizeBytes?: number;
7
+ createdAt?: string;
8
+ }
9
+ export type ZoraImageAsset = {
10
+ kind: 'url';
11
+ url: string;
12
+ alt?: string;
13
+ width?: number;
14
+ height?: number;
15
+ contentType?: string;
16
+ metadata?: ZoraImageMetadata;
17
+ } | {
18
+ kind: 'storage';
19
+ storageId?: string;
20
+ bucket: string;
21
+ path: string;
22
+ publicUrl?: string;
23
+ alt?: string;
24
+ width?: number;
25
+ height?: number;
26
+ contentType?: string;
27
+ metadata?: ZoraImageMetadata;
28
+ };
29
+ export interface ImagePreviewProps extends ZoraBaseProps {
30
+ asset?: ZoraImageAsset | null;
31
+ aspectRatio?: number;
32
+ fit?: ImageFit;
33
+ emptyTitle?: React.ReactNode;
34
+ emptyDescription?: React.ReactNode;
35
+ }
36
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/patterns/image-preview/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,cAAc,GACtB;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B,CAAC;AAEN,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACpC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/patterns/image-preview/types.ts"],"names":[],"mappings":"","sourcesContent":["import type React from 'react';\n\nimport type { ImageFit } from '../../components/image';\nimport type { ZoraBaseProps } from '../../theme/ZoraBaseProps';\n\nexport interface ZoraImageMetadata {\n fileName?: string;\n sizeBytes?: number;\n createdAt?: string;\n}\n\nexport type ZoraImageAsset =\n | {\n kind: 'url';\n url: string;\n alt?: string;\n width?: number;\n height?: number;\n contentType?: string;\n metadata?: ZoraImageMetadata;\n }\n | {\n kind: 'storage';\n storageId?: string;\n bucket: string;\n path: string;\n publicUrl?: string;\n alt?: string;\n width?: number;\n height?: number;\n contentType?: string;\n metadata?: ZoraImageMetadata;\n };\n\nexport interface ImagePreviewProps extends ZoraBaseProps {\n asset?: ZoraImageAsset | null;\n aspectRatio?: number;\n fit?: ImageFit;\n emptyTitle?: React.ReactNode;\n emptyDescription?: React.ReactNode;\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { ImageUploadFieldProps } from './types';
3
+ export declare const ImageUploadField: (props: ImageUploadFieldProps) => React.ReactElement | null;
4
+ //# sourceMappingURL=ImageUploadField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageUploadField.d.ts","sourceRoot":"","sources":["../../../src/patterns/image-upload-field/ImageUploadField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AA0RrD,eAAO,MAAM,gBAAgB,6DAA4C,CAAC"}
@@ -0,0 +1,211 @@
1
+ import React from 'react';
2
+ import { Button } from '../../components/button';
3
+ import { Modal } from '../../components/modal';
4
+ import { Progress } from '../../components/progress';
5
+ import { Text } from '../../components/text';
6
+ import { Box, Stack } from '../../foundation';
7
+ import { withZoraThemeScope } from '../../theme/withZoraThemeScope';
8
+ import { FormField } from '../form-field';
9
+ import { ImagePreview } from '../image-preview';
10
+ import { createOptimisticAssetFromPicked, formatAcceptHint, formatMaxSizeHint, resolveRenderableUrl, validatePickedImage, } from './uploadFlow';
11
+ function clampProgress(value) {
12
+ if (value === null)
13
+ return null;
14
+ if (!Number.isFinite(value))
15
+ return null;
16
+ return Math.max(0, Math.min(1, value));
17
+ }
18
+ function formatUnknownError(error) {
19
+ if (error instanceof Error && error.message)
20
+ return error.message;
21
+ if (typeof error === 'string' && error.trim().length > 0)
22
+ return error;
23
+ return 'Something went wrong.';
24
+ }
25
+ function ImageUploadFieldInner({ themeId: _themeId, mode: _mode, testID, value, onChange, label, description, helperText, errorText, required, disabled = false, readOnly = false, accept, maxSizeBytes, validatePicked, onPick, onUpload, onRemove, aspectRatio = 1, previewTitle = 'Image preview', previewDescription, }) {
26
+ const [internalError, setInternalError] = React.useState(undefined);
27
+ const [uploading, setUploading] = React.useState(false);
28
+ const [removing, setRemoving] = React.useState(false);
29
+ const [progress, setProgress] = React.useState(null);
30
+ const [previewOpen, setPreviewOpen] = React.useState(false);
31
+ const isMountedRef = React.useRef(true);
32
+ React.useEffect(() => {
33
+ return () => {
34
+ isMountedRef.current = false;
35
+ };
36
+ }, []);
37
+ const renderableUrl = resolveRenderableUrl(value);
38
+ const isRenderable = renderableUrl !== null;
39
+ const actionsDisabled = disabled || readOnly;
40
+ const effectiveError = errorText ?? internalError;
41
+ const invalid = Boolean(effectiveError);
42
+ const acceptHint = formatAcceptHint(accept);
43
+ const maxSizeHint = formatMaxSizeHint(maxSizeBytes);
44
+ const setProgressSafe = React.useCallback((next) => {
45
+ if (!isMountedRef.current)
46
+ return;
47
+ setProgress(clampProgress(next));
48
+ }, []);
49
+ const clearTransientState = React.useCallback(() => {
50
+ if (!isMountedRef.current)
51
+ return;
52
+ setUploading(false);
53
+ setRemoving(false);
54
+ setProgress(null);
55
+ }, []);
56
+ const handleReplace = React.useCallback(async () => {
57
+ if (actionsDisabled || uploading || removing)
58
+ return;
59
+ setInternalError(undefined);
60
+ let picked;
61
+ try {
62
+ picked = await onPick();
63
+ }
64
+ catch (error) {
65
+ if (!isMountedRef.current)
66
+ return;
67
+ setInternalError(formatUnknownError(error));
68
+ return;
69
+ }
70
+ if (!picked)
71
+ return;
72
+ const validationError = validatePickedImage({
73
+ picked,
74
+ accept,
75
+ maxSizeBytes,
76
+ validatePicked,
77
+ });
78
+ if (validationError) {
79
+ setInternalError(validationError);
80
+ return;
81
+ }
82
+ if (!onUpload) {
83
+ onChange(createOptimisticAssetFromPicked(picked));
84
+ return;
85
+ }
86
+ const optimisticAsset = createOptimisticAssetFromPicked(picked);
87
+ onChange(optimisticAsset);
88
+ setUploading(true);
89
+ setProgressSafe(0);
90
+ try {
91
+ const uploaded = await onUpload(picked, { setProgress: setProgressSafe });
92
+ if (!isMountedRef.current)
93
+ return;
94
+ onChange(uploaded);
95
+ setInternalError(undefined);
96
+ clearTransientState();
97
+ }
98
+ catch (error) {
99
+ if (!isMountedRef.current)
100
+ return;
101
+ setInternalError(formatUnknownError(error));
102
+ setUploading(false);
103
+ setProgress(null);
104
+ }
105
+ }, [
106
+ accept,
107
+ actionsDisabled,
108
+ clearTransientState,
109
+ maxSizeBytes,
110
+ onChange,
111
+ onPick,
112
+ onUpload,
113
+ removing,
114
+ setProgressSafe,
115
+ uploading,
116
+ validatePicked,
117
+ ]);
118
+ const handleRemove = React.useCallback(async () => {
119
+ if (actionsDisabled || uploading || removing)
120
+ return;
121
+ if (!value) {
122
+ onChange(null);
123
+ return;
124
+ }
125
+ setInternalError(undefined);
126
+ if (!onRemove) {
127
+ onChange(null);
128
+ return;
129
+ }
130
+ setRemoving(true);
131
+ try {
132
+ await onRemove(value);
133
+ if (!isMountedRef.current)
134
+ return;
135
+ onChange(null);
136
+ setRemoving(false);
137
+ }
138
+ catch (error) {
139
+ if (!isMountedRef.current)
140
+ return;
141
+ setInternalError(formatUnknownError(error));
142
+ setRemoving(false);
143
+ }
144
+ }, [actionsDisabled, onChange, onRemove, removing, uploading, value]);
145
+ const handlePreview = React.useCallback(() => {
146
+ if (!isRenderable)
147
+ return;
148
+ setPreviewOpen(true);
149
+ }, [isRenderable]);
150
+ const closePreview = React.useCallback(() => setPreviewOpen(false), []);
151
+ return (<>
152
+ <FormField description={description} disabled={disabled} errorText={effectiveError} helperText={helperText} invalid={invalid} label={label} readOnly={readOnly} required={required} testID={testID}>
153
+ <Stack gap="m">
154
+ <ImagePreview aspectRatio={aspectRatio} asset={value} emptyDescription={actionsDisabled ? 'No image available.' : undefined}/>
155
+
156
+ {acceptHint || maxSizeHint ? (<Stack gap="xs">
157
+ {acceptHint ? (<Text tone="muted" variant="caption">
158
+ {acceptHint}
159
+ </Text>) : null}
160
+ {maxSizeHint ? (<Text tone="muted" variant="caption">
161
+ {maxSizeHint}
162
+ </Text>) : null}
163
+ </Stack>) : null}
164
+
165
+ {uploading ? (<Stack gap="xs">
166
+ <Text tone="muted" variant="caption">
167
+ Uploading…
168
+ </Text>
169
+ {progress !== null ? <Progress max={1} value={progress}/> : null}
170
+ </Stack>) : null}
171
+
172
+ <Stack direction={{ base: 'column', md: 'row' }} gap="s">
173
+ <Button disabled={actionsDisabled || uploading || removing} onPress={() => {
174
+ void handleReplace();
175
+ }}>
176
+ {value ? 'Replace image' : 'Select image'}
177
+ </Button>
178
+
179
+ {value ? (<Button disabled={actionsDisabled || uploading || removing} emphasis="outline" loading={removing} tone="danger" onPress={() => {
180
+ void handleRemove();
181
+ }}>
182
+ Remove
183
+ </Button>) : null}
184
+
185
+ {isRenderable ? (<Button disabled={false} emphasis="soft" tone="neutral" onPress={handlePreview}>
186
+ Preview
187
+ </Button>) : null}
188
+ </Stack>
189
+
190
+ {!isRenderable && value?.kind === 'storage' && value.publicUrl === undefined ? (<Box>
191
+ <Text tone="muted" variant="caption">
192
+ This image is stored, but no preview URL is available yet.
193
+ </Text>
194
+ </Box>) : null}
195
+ </Stack>
196
+ </FormField>
197
+
198
+ {isRenderable ? (<Modal closeOnBackdrop description={previewDescription} title={previewTitle} visible={previewOpen} onDismiss={closePreview}>
199
+ <Stack gap="m">
200
+ <ImagePreview asset={value} aspectRatio={aspectRatio}/>
201
+ <Stack direction="row" justify="flex-end">
202
+ <Button emphasis="soft" tone="neutral" onPress={closePreview}>
203
+ Close
204
+ </Button>
205
+ </Stack>
206
+ </Stack>
207
+ </Modal>) : null}
208
+ </>);
209
+ }
210
+ export const ImageUploadField = withZoraThemeScope(ImageUploadFieldInner);
211
+ //# sourceMappingURL=ImageUploadField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageUploadField.js","sourceRoot":"","sources":["../../../src/patterns/image-upload-field/ImageUploadField.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { Button } from '../../components/button';\nimport { Modal } from '../../components/modal';\nimport { Progress } from '../../components/progress';\nimport { Text } from '../../components/text';\nimport { Box, Stack } from '../../foundation';\nimport { withZoraThemeScope } from '../../theme/withZoraThemeScope';\nimport { FormField } from '../form-field';\nimport { ImagePreview } from '../image-preview';\nimport type { ImageUploadFieldProps } from './types';\nimport {\n createOptimisticAssetFromPicked,\n formatAcceptHint,\n formatMaxSizeHint,\n resolveRenderableUrl,\n validatePickedImage,\n} from './uploadFlow';\n\nfunction clampProgress(value: number | null): number | null {\n if (value === null) return null;\n if (!Number.isFinite(value)) return null;\n return Math.max(0, Math.min(1, value));\n}\n\nfunction formatUnknownError(error: unknown): string {\n if (error instanceof Error && error.message) return error.message;\n if (typeof error === 'string' && error.trim().length > 0) return error;\n return 'Something went wrong.';\n}\n\nfunction ImageUploadFieldInner({\n themeId: _themeId,\n mode: _mode,\n testID,\n value,\n onChange,\n label,\n description,\n helperText,\n errorText,\n required,\n disabled = false,\n readOnly = false,\n accept,\n maxSizeBytes,\n validatePicked,\n onPick,\n onUpload,\n onRemove,\n aspectRatio = 1,\n previewTitle = 'Image preview',\n previewDescription,\n}: ImageUploadFieldProps) {\n const [internalError, setInternalError] = React.useState<string | undefined>(undefined);\n const [uploading, setUploading] = React.useState(false);\n const [removing, setRemoving] = React.useState(false);\n const [progress, setProgress] = React.useState<number | null>(null);\n const [previewOpen, setPreviewOpen] = React.useState(false);\n const isMountedRef = React.useRef(true);\n\n React.useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n const renderableUrl = resolveRenderableUrl(value);\n const isRenderable = renderableUrl !== null;\n const actionsDisabled = disabled || readOnly;\n\n const effectiveError = errorText ?? internalError;\n const invalid = Boolean(effectiveError);\n\n const acceptHint = formatAcceptHint(accept);\n const maxSizeHint = formatMaxSizeHint(maxSizeBytes);\n\n const setProgressSafe = React.useCallback((next: number | null) => {\n if (!isMountedRef.current) return;\n setProgress(clampProgress(next));\n }, []);\n\n const clearTransientState = React.useCallback(() => {\n if (!isMountedRef.current) return;\n setUploading(false);\n setRemoving(false);\n setProgress(null);\n }, []);\n\n const handleReplace = React.useCallback(async () => {\n if (actionsDisabled || uploading || removing) return;\n\n setInternalError(undefined);\n let picked;\n try {\n picked = await onPick();\n } catch (error) {\n if (!isMountedRef.current) return;\n setInternalError(formatUnknownError(error));\n return;\n }\n if (!picked) return;\n\n const validationError = validatePickedImage({\n picked,\n accept,\n maxSizeBytes,\n validatePicked,\n });\n\n if (validationError) {\n setInternalError(validationError);\n return;\n }\n\n if (!onUpload) {\n onChange(createOptimisticAssetFromPicked(picked));\n return;\n }\n\n const optimisticAsset = createOptimisticAssetFromPicked(picked);\n onChange(optimisticAsset);\n setUploading(true);\n setProgressSafe(0);\n\n try {\n const uploaded = await onUpload(picked, { setProgress: setProgressSafe });\n if (!isMountedRef.current) return;\n onChange(uploaded);\n setInternalError(undefined);\n clearTransientState();\n } catch (error) {\n if (!isMountedRef.current) return;\n setInternalError(formatUnknownError(error));\n setUploading(false);\n setProgress(null);\n }\n }, [\n accept,\n actionsDisabled,\n clearTransientState,\n maxSizeBytes,\n onChange,\n onPick,\n onUpload,\n removing,\n setProgressSafe,\n uploading,\n validatePicked,\n ]);\n\n const handleRemove = React.useCallback(async () => {\n if (actionsDisabled || uploading || removing) return;\n if (!value) {\n onChange(null);\n return;\n }\n\n setInternalError(undefined);\n\n if (!onRemove) {\n onChange(null);\n return;\n }\n\n setRemoving(true);\n try {\n await onRemove(value);\n if (!isMountedRef.current) return;\n onChange(null);\n setRemoving(false);\n } catch (error) {\n if (!isMountedRef.current) return;\n setInternalError(formatUnknownError(error));\n setRemoving(false);\n }\n }, [actionsDisabled, onChange, onRemove, removing, uploading, value]);\n\n const handlePreview = React.useCallback(() => {\n if (!isRenderable) return;\n setPreviewOpen(true);\n }, [isRenderable]);\n\n const closePreview = React.useCallback(() => setPreviewOpen(false), []);\n\n return (\n <>\n <FormField\n description={description}\n disabled={disabled}\n errorText={effectiveError}\n helperText={helperText}\n invalid={invalid}\n label={label}\n readOnly={readOnly}\n required={required}\n testID={testID}\n >\n <Stack gap=\"m\">\n <ImagePreview\n aspectRatio={aspectRatio}\n asset={value}\n emptyDescription={actionsDisabled ? 'No image available.' : undefined}\n />\n\n {acceptHint || maxSizeHint ? (\n <Stack gap=\"xs\">\n {acceptHint ? (\n <Text tone=\"muted\" variant=\"caption\">\n {acceptHint}\n </Text>\n ) : null}\n {maxSizeHint ? (\n <Text tone=\"muted\" variant=\"caption\">\n {maxSizeHint}\n </Text>\n ) : null}\n </Stack>\n ) : null}\n\n {uploading ? (\n <Stack gap=\"xs\">\n <Text tone=\"muted\" variant=\"caption\">\n Uploading…\n </Text>\n {progress !== null ? <Progress max={1} value={progress} /> : null}\n </Stack>\n ) : null}\n\n <Stack direction={{ base: 'column', md: 'row' }} gap=\"s\">\n <Button\n disabled={actionsDisabled || uploading || removing}\n onPress={() => {\n void handleReplace();\n }}\n >\n {value ? 'Replace image' : 'Select image'}\n </Button>\n\n {value ? (\n <Button\n disabled={actionsDisabled || uploading || removing}\n emphasis=\"outline\"\n loading={removing}\n tone=\"danger\"\n onPress={() => {\n void handleRemove();\n }}\n >\n Remove\n </Button>\n ) : null}\n\n {isRenderable ? (\n <Button disabled={false} emphasis=\"soft\" tone=\"neutral\" onPress={handlePreview}>\n Preview\n </Button>\n ) : null}\n </Stack>\n\n {!isRenderable && value?.kind === 'storage' && value.publicUrl === undefined ? (\n <Box>\n <Text tone=\"muted\" variant=\"caption\">\n This image is stored, but no preview URL is available yet.\n </Text>\n </Box>\n ) : null}\n </Stack>\n </FormField>\n\n {isRenderable ? (\n <Modal\n closeOnBackdrop\n description={previewDescription}\n title={previewTitle}\n visible={previewOpen}\n onDismiss={closePreview}\n >\n <Stack gap=\"m\">\n <ImagePreview asset={value} aspectRatio={aspectRatio} />\n <Stack direction=\"row\" justify=\"flex-end\">\n <Button emphasis=\"soft\" tone=\"neutral\" onPress={closePreview}>\n Close\n </Button>\n </Stack>\n </Stack>\n </Modal>\n ) : null}\n </>\n );\n}\n\nexport const ImageUploadField = withZoraThemeScope(ImageUploadFieldInner);\n"]}
@@ -0,0 +1,3 @@
1
+ export { ImageUploadField } from './ImageUploadField';
2
+ export type { ImageUploadFieldProps, ImageUploadProgressContext, ZoraPickedImage } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/patterns/image-upload-field/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ImageUploadField } from './ImageUploadField';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/patterns/image-upload-field/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC","sourcesContent":["export { ImageUploadField } from './ImageUploadField';\nexport type { ImageUploadFieldProps, ImageUploadProgressContext, ZoraPickedImage } from './types';\n"]}
@@ -0,0 +1,35 @@
1
+ import type React from 'react';
2
+ import type { ZoraBaseProps } from '../../theme/ZoraBaseProps';
3
+ import type { ZoraImageAsset } from '../image-preview';
4
+ export interface ZoraPickedImage {
5
+ uri: string;
6
+ fileName?: string;
7
+ sizeBytes?: number;
8
+ contentType?: string;
9
+ width?: number;
10
+ height?: number;
11
+ }
12
+ export interface ImageUploadProgressContext {
13
+ setProgress: (progress: number | null) => void;
14
+ }
15
+ export interface ImageUploadFieldProps extends ZoraBaseProps {
16
+ value: ZoraImageAsset | null;
17
+ onChange: (next: ZoraImageAsset | null) => void;
18
+ label: React.ReactNode;
19
+ description?: React.ReactNode;
20
+ helperText?: React.ReactNode;
21
+ errorText?: React.ReactNode;
22
+ required?: boolean;
23
+ disabled?: boolean;
24
+ readOnly?: boolean;
25
+ accept?: string;
26
+ maxSizeBytes?: number;
27
+ validatePicked?: (picked: ZoraPickedImage) => string | undefined;
28
+ onPick: () => Promise<ZoraPickedImage | null>;
29
+ onUpload?: (picked: ZoraPickedImage, context: ImageUploadProgressContext) => Promise<ZoraImageAsset>;
30
+ onRemove?: (current: ZoraImageAsset) => void | Promise<void>;
31
+ aspectRatio?: number;
32
+ previewTitle?: React.ReactNode;
33
+ previewDescription?: React.ReactNode;
34
+ }
35
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/patterns/image-upload-field/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,MAAM,GAAG,SAAS,CAAC;IACjE,MAAM,EAAE,MAAM,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAC9C,QAAQ,CAAC,EAAE,CACT,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,0BAA0B,KAChC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,kBAAkB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACtC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/patterns/image-upload-field/types.ts"],"names":[],"mappings":"","sourcesContent":["import type React from 'react';\n\nimport type { ZoraBaseProps } from '../../theme/ZoraBaseProps';\nimport type { ZoraImageAsset } from '../image-preview';\n\nexport interface ZoraPickedImage {\n uri: string;\n fileName?: string;\n sizeBytes?: number;\n contentType?: string;\n width?: number;\n height?: number;\n}\n\nexport interface ImageUploadProgressContext {\n setProgress: (progress: number | null) => void;\n}\n\nexport interface ImageUploadFieldProps extends ZoraBaseProps {\n value: ZoraImageAsset | null;\n onChange: (next: ZoraImageAsset | null) => void;\n label: React.ReactNode;\n description?: React.ReactNode;\n helperText?: React.ReactNode;\n errorText?: React.ReactNode;\n required?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n accept?: string;\n maxSizeBytes?: number;\n validatePicked?: (picked: ZoraPickedImage) => string | undefined;\n onPick: () => Promise<ZoraPickedImage | null>;\n onUpload?: (\n picked: ZoraPickedImage,\n context: ImageUploadProgressContext,\n ) => Promise<ZoraImageAsset>;\n onRemove?: (current: ZoraImageAsset) => void | Promise<void>;\n aspectRatio?: number;\n previewTitle?: React.ReactNode;\n previewDescription?: React.ReactNode;\n}\n"]}
@@ -0,0 +1,18 @@
1
+ import type { ZoraImageAsset } from '../image-preview';
2
+ import type { ZoraPickedImage } from './types';
3
+ export declare function isAccepted({ accept, contentType, fileName, }: {
4
+ accept: string | undefined;
5
+ contentType: string | undefined;
6
+ fileName: string | undefined;
7
+ }): boolean;
8
+ export declare function formatAcceptHint(accept: string | undefined): string | null;
9
+ export declare function formatMaxSizeHint(maxSizeBytes: number | undefined): string | null;
10
+ export declare function createOptimisticAssetFromPicked(picked: ZoraPickedImage): ZoraImageAsset;
11
+ export declare function resolveRenderableUrl(asset: ZoraImageAsset | null): string | null;
12
+ export declare function validatePickedImage({ picked, accept, maxSizeBytes, validatePicked, }: {
13
+ picked: ZoraPickedImage;
14
+ accept: string | undefined;
15
+ maxSizeBytes: number | undefined;
16
+ validatePicked: ((picked: ZoraPickedImage) => string | undefined) | undefined;
17
+ }): string | undefined;
18
+ //# sourceMappingURL=uploadFlow.d.ts.map