@ankhorage/zora 6.0.0 → 7.0.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 (126) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +2 -1
  3. package/dist/components/image/Image.d.ts +1 -5
  4. package/dist/components/image/Image.d.ts.map +1 -1
  5. package/dist/components/image/Image.js +79 -8
  6. package/dist/components/image/Image.js.map +1 -1
  7. package/dist/components/image/types.d.ts +4 -2
  8. package/dist/components/image/types.d.ts.map +1 -1
  9. package/dist/components/image/types.js.map +1 -1
  10. package/dist/features/uploader/adapters/inbound/Uploader.d.ts +5 -0
  11. package/dist/features/uploader/adapters/inbound/Uploader.d.ts.map +1 -0
  12. package/dist/features/uploader/adapters/inbound/Uploader.js +274 -0
  13. package/dist/features/uploader/adapters/inbound/Uploader.js.map +1 -0
  14. package/dist/features/uploader/adapters/outbound/pickDocumentOrFileAsync.d.ts +5 -0
  15. package/dist/features/uploader/adapters/outbound/pickDocumentOrFileAsync.d.ts.map +1 -0
  16. package/dist/features/uploader/adapters/outbound/pickDocumentOrFileAsync.js +38 -0
  17. package/dist/features/uploader/adapters/outbound/pickDocumentOrFileAsync.js.map +1 -0
  18. package/dist/features/uploader/adapters/outbound/pickImageOrVideoAsync.d.ts +5 -0
  19. package/dist/features/uploader/adapters/outbound/pickImageOrVideoAsync.d.ts.map +1 -0
  20. package/dist/features/uploader/adapters/outbound/pickImageOrVideoAsync.js +24 -0
  21. package/dist/features/uploader/adapters/outbound/pickImageOrVideoAsync.js.map +1 -0
  22. package/dist/features/uploader/application/ports/outbound/UploadPickerPort.d.ts +9 -0
  23. package/dist/features/uploader/application/ports/outbound/UploadPickerPort.d.ts.map +1 -0
  24. package/dist/features/uploader/application/ports/outbound/UploadPickerPort.js +2 -0
  25. package/dist/features/uploader/application/ports/outbound/UploadPickerPort.js.map +1 -0
  26. package/dist/features/uploader/application/use-cases/pickUploadAssetAsync.d.ts +5 -0
  27. package/dist/features/uploader/application/use-cases/pickUploadAssetAsync.d.ts.map +1 -0
  28. package/dist/features/uploader/application/use-cases/pickUploadAssetAsync.js +6 -0
  29. package/dist/features/uploader/application/use-cases/pickUploadAssetAsync.js.map +1 -0
  30. package/dist/features/uploader/application/use-cases/validateUploadAsset.d.ts +4 -0
  31. package/dist/features/uploader/application/use-cases/validateUploadAsset.d.ts.map +1 -0
  32. package/dist/features/uploader/application/use-cases/validateUploadAsset.js +77 -0
  33. package/dist/features/uploader/application/use-cases/validateUploadAsset.js.map +1 -0
  34. package/dist/features/uploader/composition/createUploadPicker.d.ts +4 -0
  35. package/dist/features/uploader/composition/createUploadPicker.d.ts.map +1 -0
  36. package/dist/features/uploader/composition/createUploadPicker.js +12 -0
  37. package/dist/features/uploader/composition/createUploadPicker.js.map +1 -0
  38. package/dist/features/uploader/meta.d.ts +10 -0
  39. package/dist/features/uploader/meta.d.ts.map +1 -0
  40. package/dist/features/uploader/meta.js +10 -0
  41. package/dist/features/uploader/meta.js.map +1 -0
  42. package/dist/features/uploader/public.d.ts +4 -0
  43. package/dist/features/uploader/public.d.ts.map +1 -0
  44. package/dist/features/uploader/public.js +3 -0
  45. package/dist/features/uploader/public.js.map +1 -0
  46. package/dist/index.d.ts +2 -4
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +1 -2
  49. package/dist/index.js.map +1 -1
  50. package/dist/metadata/componentMeta.d.ts.map +1 -1
  51. package/dist/metadata/componentMeta.js +2 -4
  52. package/dist/metadata/componentMeta.js.map +1 -1
  53. package/dist/registry.d.ts.map +1 -1
  54. package/dist/registry.js +2 -4
  55. package/dist/registry.js.map +1 -1
  56. package/dist/types/upload.d.ts +53 -0
  57. package/dist/types/upload.d.ts.map +1 -0
  58. package/dist/types/upload.js +2 -0
  59. package/dist/types/upload.js.map +1 -0
  60. package/package.json +11 -2
  61. package/src/components/image/Image.tsx +136 -8
  62. package/src/components/image/types.ts +6 -2
  63. package/src/features/uploader/adapters/inbound/Uploader.tsx +403 -0
  64. package/src/features/uploader/adapters/outbound/pickDocumentOrFileAsync.ts +50 -0
  65. package/src/features/uploader/adapters/outbound/pickImageOrVideoAsync.ts +30 -0
  66. package/src/features/uploader/application/ports/outbound/UploadPickerPort.ts +10 -0
  67. package/src/features/uploader/application/use-cases/pickUploadAssetAsync.test.ts +48 -0
  68. package/src/features/uploader/application/use-cases/pickUploadAssetAsync.ts +14 -0
  69. package/src/features/uploader/application/use-cases/validateUploadAsset.test.ts +51 -0
  70. package/src/features/uploader/application/use-cases/validateUploadAsset.ts +111 -0
  71. package/src/features/uploader/composition/createUploadPicker.ts +14 -0
  72. package/src/features/uploader/meta.ts +11 -0
  73. package/src/features/uploader/public.test.ts +34 -0
  74. package/src/features/uploader/public.ts +10 -0
  75. package/src/index.ts +9 -12
  76. package/src/metadata/componentMeta.ts +2 -4
  77. package/src/registry.test.ts +1 -1
  78. package/src/registry.ts +2 -4
  79. package/src/showcaseCoverage.test.ts +1 -2
  80. package/src/types/upload.ts +62 -0
  81. package/dist/patterns/image-preview/ImagePreview.d.ts +0 -9
  82. package/dist/patterns/image-preview/ImagePreview.d.ts.map +0 -1
  83. package/dist/patterns/image-preview/ImagePreview.js +0 -46
  84. package/dist/patterns/image-preview/ImagePreview.js.map +0 -1
  85. package/dist/patterns/image-preview/index.d.ts +0 -3
  86. package/dist/patterns/image-preview/index.d.ts.map +0 -1
  87. package/dist/patterns/image-preview/index.js +0 -2
  88. package/dist/patterns/image-preview/index.js.map +0 -1
  89. package/dist/patterns/image-preview/meta.d.ts +0 -9
  90. package/dist/patterns/image-preview/meta.d.ts.map +0 -1
  91. package/dist/patterns/image-preview/meta.js +0 -9
  92. package/dist/patterns/image-preview/meta.js.map +0 -1
  93. package/dist/patterns/image-preview/types.d.ts +0 -36
  94. package/dist/patterns/image-preview/types.d.ts.map +0 -1
  95. package/dist/patterns/image-preview/types.js +0 -2
  96. package/dist/patterns/image-preview/types.js.map +0 -1
  97. package/dist/patterns/image-upload-field/ImageUploadField.d.ts +0 -9
  98. package/dist/patterns/image-upload-field/ImageUploadField.d.ts.map +0 -1
  99. package/dist/patterns/image-upload-field/ImageUploadField.js +0 -222
  100. package/dist/patterns/image-upload-field/ImageUploadField.js.map +0 -1
  101. package/dist/patterns/image-upload-field/index.d.ts +0 -3
  102. package/dist/patterns/image-upload-field/index.d.ts.map +0 -1
  103. package/dist/patterns/image-upload-field/index.js +0 -2
  104. package/dist/patterns/image-upload-field/index.js.map +0 -1
  105. package/dist/patterns/image-upload-field/meta.d.ts +0 -9
  106. package/dist/patterns/image-upload-field/meta.d.ts.map +0 -1
  107. package/dist/patterns/image-upload-field/meta.js +0 -9
  108. package/dist/patterns/image-upload-field/meta.js.map +0 -1
  109. package/dist/patterns/image-upload-field/types.d.ts +0 -35
  110. package/dist/patterns/image-upload-field/types.d.ts.map +0 -1
  111. package/dist/patterns/image-upload-field/types.js +0 -2
  112. package/dist/patterns/image-upload-field/types.js.map +0 -1
  113. package/dist/patterns/image-upload-field/uploadFlow.d.ts +0 -18
  114. package/dist/patterns/image-upload-field/uploadFlow.d.ts.map +0 -1
  115. package/dist/patterns/image-upload-field/uploadFlow.js +0 -106
  116. package/dist/patterns/image-upload-field/uploadFlow.js.map +0 -1
  117. package/src/patterns/image-preview/ImagePreview.tsx +0 -82
  118. package/src/patterns/image-preview/index.ts +0 -2
  119. package/src/patterns/image-preview/meta.ts +0 -10
  120. package/src/patterns/image-preview/types.ts +0 -41
  121. package/src/patterns/image-upload-field/ImageUploadField.tsx +0 -319
  122. package/src/patterns/image-upload-field/index.ts +0 -2
  123. package/src/patterns/image-upload-field/meta.ts +0 -10
  124. package/src/patterns/image-upload-field/types.ts +0 -41
  125. package/src/patterns/image-upload-field/uploadFlow.test.ts +0 -117
  126. package/src/patterns/image-upload-field/uploadFlow.ts +0 -145
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InteractionPolicyProps } from '@ankhorage/surface';\nimport type React from 'react';\n\nimport { AppBar } from './components/app-bar';\nimport { Avatar } from './components/avatar';\nimport { AvatarGroup } from './components/avatar-group';\nimport { Badge } from './components/badge';\nimport { Breadcrumbs } from './components/breadcrumbs';\nimport { Button } from './components/button';\nimport { ButtonGroup } from './components/button-group';\nimport { Card } from './components/card';\nimport { Checkbox, CheckboxGroup } from './components/checkbox';\nimport { Chip } from './components/chip';\nimport { ChipGroup } from './components/chip-group';\nimport { DataTable } from './components/data-table';\nimport { DatePicker } from './components/date-picker';\nimport { Form, FormActions, FormError, FormField } from './components/form';\nimport { Gradient } from './components/gradient';\nimport { Heading } from './components/heading';\nimport { Icon } from './components/icon';\nimport { IconButton } from './components/icon-button';\nimport { Image } from './components/image';\nimport { Input } from './components/input';\nimport { MediaCard } from './components/media-card';\nimport { DropdownMenu, Menu } from './components/menu';\nimport { MetricCard } from './components/metric-card';\nimport { Modal } from './components/modal';\nimport { Pagination } from './components/pagination';\nimport { Progress, ProgressRing } from './components/progress';\nimport { Radio, RadioGroup } from './components/radio';\nimport { Rating } from './components/rating';\nimport { SearchBar } from './components/search-bar';\nimport { Select } from './components/select';\nimport { Skeleton, SkeletonCard, SkeletonList, SkeletonText } from './components/skeleton';\nimport { SplashScreen } from './components/splash-screen';\nimport { Tabs } from './components/tabs';\nimport { Text } from './components/text';\nimport { Textarea } from './components/textarea';\nimport { TimePicker } from './components/time-picker';\nimport { Toast } from './components/toast';\nimport { Toolbar, ToolbarAction } from './components/toolbar';\nimport {\n Box,\n Center,\n Container,\n Divider,\n Grid,\n Inline,\n Show,\n Spacer,\n Stack,\n Surface,\n} from './foundation';\nimport { AppShell } from './layout/app-shell';\nimport { Screen } from './layout/screen';\nimport { ScreenSection } from './layout/screen-section';\nimport { SettingsLayout } from './layout/settings-layout';\nimport { SidebarLayout } from './layout/sidebar-layout';\nimport { TopbarLayout } from './layout/topbar-layout';\nimport {\n ForgotPasswordForm,\n OAuthProviderButton,\n OAuthProviderList,\n OtpForm,\n SignInForm,\n SignUpForm,\n} from './patterns/auth';\nimport { ChatListItem } from './patterns/chat-list-item';\nimport { CollectionEditor } from './patterns/collection-editor';\nimport { ConfirmDialog } from './patterns/confirm-dialog';\nimport { ContentRail } from './patterns/content-rail';\nimport { DisclosureSection } from './patterns/disclosure-section';\nimport { EmptyState } from './patterns/empty-state';\nimport { FilterBar } from './patterns/filter-bar';\nimport { Hero } from './patterns/hero';\nimport { ImagePreview } from './patterns/image-preview';\nimport { ImageUploadField } from './patterns/image-upload-field';\nimport { InspectorField } from './patterns/inspector-field';\nimport { List, ListRow, ListSection } from './patterns/list';\nimport { MessageBubble } from './patterns/message-bubble';\nimport { MissingElement } from './patterns/missing-element';\nimport { Notice } from './patterns/notice';\nimport { Panel } from './patterns/panel';\nimport { PostCard } from './patterns/post-card';\nimport { ProductCard } from './patterns/product-card';\nimport { ReaderSurface } from './patterns/reader';\nimport { BarcodeScannerView, CameraPermissionView, ScanOverlay } from './patterns/scanner';\nimport { SectionHeader } from './patterns/section-header';\nimport { SelectableItem } from './patterns/selection';\nimport { SettingsRow } from './patterns/settings-row';\nimport { SwitchField } from './patterns/switch-field';\nimport { ThemeComposer } from './patterns/theme-composer';\nimport { PaletteItem, TileGrid } from './patterns/tile-grid';\nimport { Timeline } from './patterns/timeline';\nimport { TreeItem, TreeView } from './patterns/tree-view';\nimport { ThemeModeToggle } from './theme/ThemeModeToggle';\n\nexport type ZoraComponentRegistry = Readonly<Record<string, React.ElementType>>;\n\ntype ComponentPropsFor<K extends keyof typeof _ZORA_COMPONENT_REGISTRY> = React.ComponentProps<\n (typeof _ZORA_COMPONENT_REGISTRY)[K]\n>;\n\ntype AcceptsSurfaceInteractionPolicyProps<P> = 'interactionPolicy' extends keyof P\n ? InteractionPolicyProps extends Pick<P, 'interactionPolicy'>\n ? Pick<P, 'interactionPolicy'> extends InteractionPolicyProps\n ? true\n : false\n : false\n : false;\n\ntype RegistryInteractionPolicyContract = {\n [K in keyof typeof _ZORA_COMPONENT_REGISTRY]: AcceptsSurfaceInteractionPolicyProps<\n ComponentPropsFor<K>\n >;\n};\n\ntype _AssertTrue<T extends true> = T;\ntype _RegistryInteractionPolicyCheck = _AssertTrue<\n RegistryInteractionPolicyContract[keyof typeof _ZORA_COMPONENT_REGISTRY]\n>;\n\nconst _ZORA_COMPONENT_REGISTRY = {\n AppBar,\n Avatar,\n AvatarGroup,\n Badge,\n Breadcrumbs,\n Button,\n ButtonGroup,\n Card,\n Checkbox,\n CheckboxGroup,\n Chip,\n ChipGroup,\n DataTable,\n DatePicker,\n DropdownMenu,\n Form,\n FormActions,\n FormError,\n FormField,\n Gradient,\n Heading,\n Icon,\n IconButton,\n Image,\n Input,\n MediaCard,\n Menu,\n MetricCard,\n Modal,\n Pagination,\n Progress,\n ProgressRing,\n Radio,\n RadioGroup,\n Rating,\n SearchBar,\n Select,\n Skeleton,\n SkeletonCard,\n SkeletonList,\n SkeletonText,\n SplashScreen,\n Tabs,\n Text,\n Textarea,\n TimePicker,\n Toast,\n Toolbar,\n ToolbarAction,\n ThemeModeToggle,\n Box,\n Center,\n Container,\n Divider,\n Grid,\n Inline,\n Show,\n Spacer,\n Stack,\n Surface,\n AppShell,\n Screen,\n ScreenSection,\n SettingsLayout,\n SidebarLayout,\n TopbarLayout,\n ForgotPasswordForm,\n OAuthProviderButton,\n OAuthProviderList,\n OtpForm,\n SignInForm,\n SignUpForm,\n ChatListItem,\n CollectionEditor,\n ConfirmDialog,\n ContentRail,\n DisclosureSection,\n EmptyState,\n FilterBar,\n Hero,\n ImagePreview,\n ImageUploadField,\n InspectorField,\n List,\n ListRow,\n ListSection,\n MessageBubble,\n MissingElement,\n Notice,\n Panel,\n PostCard,\n ProductCard,\n ReaderSurface,\n BarcodeScannerView,\n CameraPermissionView,\n ScanOverlay,\n SectionHeader,\n SelectableItem,\n SettingsRow,\n SwitchField,\n ThemeComposer,\n PaletteItem,\n TileGrid,\n Timeline,\n TreeItem,\n TreeView,\n} as const satisfies ZoraComponentRegistry;\n\nexport const ZORA_COMPONENT_REGISTRY: ZoraComponentRegistry = _ZORA_COMPONENT_REGISTRY;\n"]}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InteractionPolicyProps } from '@ankhorage/surface';\nimport type React from 'react';\n\nimport { AppBar } from './components/app-bar';\nimport { Avatar } from './components/avatar';\nimport { AvatarGroup } from './components/avatar-group';\nimport { Badge } from './components/badge';\nimport { Breadcrumbs } from './components/breadcrumbs';\nimport { Button } from './components/button';\nimport { ButtonGroup } from './components/button-group';\nimport { Card } from './components/card';\nimport { Checkbox, CheckboxGroup } from './components/checkbox';\nimport { Chip } from './components/chip';\nimport { ChipGroup } from './components/chip-group';\nimport { DataTable } from './components/data-table';\nimport { DatePicker } from './components/date-picker';\nimport { Form, FormActions, FormError, FormField } from './components/form';\nimport { Gradient } from './components/gradient';\nimport { Heading } from './components/heading';\nimport { Icon } from './components/icon';\nimport { IconButton } from './components/icon-button';\nimport { Image } from './components/image';\nimport { Input } from './components/input';\nimport { MediaCard } from './components/media-card';\nimport { DropdownMenu, Menu } from './components/menu';\nimport { MetricCard } from './components/metric-card';\nimport { Modal } from './components/modal';\nimport { Pagination } from './components/pagination';\nimport { Progress, ProgressRing } from './components/progress';\nimport { Radio, RadioGroup } from './components/radio';\nimport { Rating } from './components/rating';\nimport { SearchBar } from './components/search-bar';\nimport { Select } from './components/select';\nimport { Skeleton, SkeletonCard, SkeletonList, SkeletonText } from './components/skeleton';\nimport { SplashScreen } from './components/splash-screen';\nimport { Tabs } from './components/tabs';\nimport { Text } from './components/text';\nimport { Textarea } from './components/textarea';\nimport { TimePicker } from './components/time-picker';\nimport { Toast } from './components/toast';\nimport { Toolbar, ToolbarAction } from './components/toolbar';\nimport { Uploader } from './features/uploader/public';\nimport {\n Box,\n Center,\n Container,\n Divider,\n Grid,\n Inline,\n Show,\n Spacer,\n Stack,\n Surface,\n} from './foundation';\nimport { AppShell } from './layout/app-shell';\nimport { Screen } from './layout/screen';\nimport { ScreenSection } from './layout/screen-section';\nimport { SettingsLayout } from './layout/settings-layout';\nimport { SidebarLayout } from './layout/sidebar-layout';\nimport { TopbarLayout } from './layout/topbar-layout';\nimport {\n ForgotPasswordForm,\n OAuthProviderButton,\n OAuthProviderList,\n OtpForm,\n SignInForm,\n SignUpForm,\n} from './patterns/auth';\nimport { ChatListItem } from './patterns/chat-list-item';\nimport { CollectionEditor } from './patterns/collection-editor';\nimport { ConfirmDialog } from './patterns/confirm-dialog';\nimport { ContentRail } from './patterns/content-rail';\nimport { DisclosureSection } from './patterns/disclosure-section';\nimport { EmptyState } from './patterns/empty-state';\nimport { FilterBar } from './patterns/filter-bar';\nimport { Hero } from './patterns/hero';\nimport { InspectorField } from './patterns/inspector-field';\nimport { List, ListRow, ListSection } from './patterns/list';\nimport { MessageBubble } from './patterns/message-bubble';\nimport { MissingElement } from './patterns/missing-element';\nimport { Notice } from './patterns/notice';\nimport { Panel } from './patterns/panel';\nimport { PostCard } from './patterns/post-card';\nimport { ProductCard } from './patterns/product-card';\nimport { ReaderSurface } from './patterns/reader';\nimport { BarcodeScannerView, CameraPermissionView, ScanOverlay } from './patterns/scanner';\nimport { SectionHeader } from './patterns/section-header';\nimport { SelectableItem } from './patterns/selection';\nimport { SettingsRow } from './patterns/settings-row';\nimport { SwitchField } from './patterns/switch-field';\nimport { ThemeComposer } from './patterns/theme-composer';\nimport { PaletteItem, TileGrid } from './patterns/tile-grid';\nimport { Timeline } from './patterns/timeline';\nimport { TreeItem, TreeView } from './patterns/tree-view';\nimport { ThemeModeToggle } from './theme/ThemeModeToggle';\n\nexport type ZoraComponentRegistry = Readonly<Record<string, React.ElementType>>;\n\ntype ComponentPropsFor<K extends keyof typeof _ZORA_COMPONENT_REGISTRY> = React.ComponentProps<\n (typeof _ZORA_COMPONENT_REGISTRY)[K]\n>;\n\ntype AcceptsSurfaceInteractionPolicyProps<P> = 'interactionPolicy' extends keyof P\n ? InteractionPolicyProps extends Pick<P, 'interactionPolicy'>\n ? Pick<P, 'interactionPolicy'> extends InteractionPolicyProps\n ? true\n : false\n : false\n : false;\n\ntype RegistryInteractionPolicyContract = {\n [K in keyof typeof _ZORA_COMPONENT_REGISTRY]: AcceptsSurfaceInteractionPolicyProps<\n ComponentPropsFor<K>\n >;\n};\n\ntype _AssertTrue<T extends true> = T;\ntype _RegistryInteractionPolicyCheck = _AssertTrue<\n RegistryInteractionPolicyContract[keyof typeof _ZORA_COMPONENT_REGISTRY]\n>;\n\nconst _ZORA_COMPONENT_REGISTRY = {\n AppBar,\n Avatar,\n AvatarGroup,\n Badge,\n Breadcrumbs,\n Button,\n ButtonGroup,\n Card,\n Checkbox,\n CheckboxGroup,\n Chip,\n ChipGroup,\n DataTable,\n DatePicker,\n DropdownMenu,\n Form,\n FormActions,\n FormError,\n FormField,\n Gradient,\n Heading,\n Icon,\n IconButton,\n Image,\n Input,\n MediaCard,\n Menu,\n MetricCard,\n Modal,\n Pagination,\n Progress,\n ProgressRing,\n Radio,\n RadioGroup,\n Rating,\n SearchBar,\n Select,\n Skeleton,\n SkeletonCard,\n SkeletonList,\n SkeletonText,\n SplashScreen,\n Tabs,\n Text,\n Textarea,\n TimePicker,\n Toast,\n Toolbar,\n ToolbarAction,\n Uploader,\n ThemeModeToggle,\n Box,\n Center,\n Container,\n Divider,\n Grid,\n Inline,\n Show,\n Spacer,\n Stack,\n Surface,\n AppShell,\n Screen,\n ScreenSection,\n SettingsLayout,\n SidebarLayout,\n TopbarLayout,\n ForgotPasswordForm,\n OAuthProviderButton,\n OAuthProviderList,\n OtpForm,\n SignInForm,\n SignUpForm,\n ChatListItem,\n CollectionEditor,\n ConfirmDialog,\n ContentRail,\n DisclosureSection,\n EmptyState,\n FilterBar,\n Hero,\n InspectorField,\n List,\n ListRow,\n ListSection,\n MessageBubble,\n MissingElement,\n Notice,\n Panel,\n PostCard,\n ProductCard,\n ReaderSurface,\n BarcodeScannerView,\n CameraPermissionView,\n ScanOverlay,\n SectionHeader,\n SelectableItem,\n SettingsRow,\n SwitchField,\n ThemeComposer,\n PaletteItem,\n TileGrid,\n Timeline,\n TreeItem,\n TreeView,\n} as const satisfies ZoraComponentRegistry;\n\nexport const ZORA_COMPONENT_REGISTRY: ZoraComponentRegistry = _ZORA_COMPONENT_REGISTRY;\n"]}
@@ -0,0 +1,53 @@
1
+ import type React from 'react';
2
+ import type { ZoraBaseProps } from '../theme/ZoraBaseProps';
3
+ export type UploadType = 'image' | 'video' | 'document' | 'file';
4
+ export interface UploadAssetBase {
5
+ fileName?: string;
6
+ sizeBytes?: number;
7
+ contentType?: string;
8
+ width?: number;
9
+ height?: number;
10
+ alt?: string;
11
+ createdAt?: string;
12
+ }
13
+ export type UploadAsset = (UploadAssetBase & {
14
+ kind: 'local';
15
+ uri: string;
16
+ }) | (UploadAssetBase & {
17
+ kind: 'url';
18
+ url: string;
19
+ }) | (UploadAssetBase & {
20
+ kind: 'storage';
21
+ storageId?: string;
22
+ bucket: string;
23
+ path: string;
24
+ publicUrl?: string;
25
+ });
26
+ export interface UploadProgressContext {
27
+ setProgress: (progress: number | null) => void;
28
+ }
29
+ export interface ValidateUploadAssetInput {
30
+ asset: UploadAsset;
31
+ accept?: string;
32
+ maxSizeBytes?: number;
33
+ validate?: (asset: UploadAsset) => string | undefined;
34
+ }
35
+ export interface UploaderProps extends ZoraBaseProps {
36
+ value: UploadAsset | null;
37
+ onChange: (next: UploadAsset | null) => void;
38
+ label: React.ReactNode;
39
+ description?: React.ReactNode;
40
+ helperText?: React.ReactNode;
41
+ errorText?: React.ReactNode;
42
+ type?: UploadType;
43
+ accept?: string;
44
+ maxSizeBytes?: number;
45
+ required?: boolean;
46
+ disabled?: boolean;
47
+ readOnly?: boolean;
48
+ validatePicked?: (asset: UploadAsset) => string | undefined;
49
+ onUpload?: (asset: UploadAsset, context: UploadProgressContext) => Promise<UploadAsset>;
50
+ onRemove?: (current: UploadAsset) => void | Promise<void>;
51
+ aspectRatio?: number;
52
+ }
53
+ //# sourceMappingURL=upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/types/upload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;AAEjE,MAAM,WAAW,eAAe;IAC9B,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;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,WAAW,GACnB,CAAC,eAAe,GAAG;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC,GACF,CAAC,eAAe,GAAG;IACjB,IAAI,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb,CAAC,GACF,CAAC,eAAe,GAAG;IACjB,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;CACpB,CAAC,CAAC;AAEP,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,MAAM,GAAG,SAAS,CAAC;CACvD;AAED,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,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,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,MAAM,GAAG,SAAS,CAAC;IAC5D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACxF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/types/upload.ts"],"names":[],"mappings":"","sourcesContent":["import type React from 'react';\n\nimport type { ZoraBaseProps } from '../theme/ZoraBaseProps';\n\nexport type UploadType = 'image' | 'video' | 'document' | 'file';\n\nexport interface UploadAssetBase {\n fileName?: string;\n sizeBytes?: number;\n contentType?: string;\n width?: number;\n height?: number;\n alt?: string;\n createdAt?: string;\n}\n\nexport type UploadAsset =\n | (UploadAssetBase & {\n kind: 'local';\n uri: string;\n })\n | (UploadAssetBase & {\n kind: 'url';\n url: string;\n })\n | (UploadAssetBase & {\n kind: 'storage';\n storageId?: string;\n bucket: string;\n path: string;\n publicUrl?: string;\n });\n\nexport interface UploadProgressContext {\n setProgress: (progress: number | null) => void;\n}\n\nexport interface ValidateUploadAssetInput {\n asset: UploadAsset;\n accept?: string;\n maxSizeBytes?: number;\n validate?: (asset: UploadAsset) => string | undefined;\n}\n\nexport interface UploaderProps extends ZoraBaseProps {\n value: UploadAsset | null;\n onChange: (next: UploadAsset | null) => void;\n label: React.ReactNode;\n description?: React.ReactNode;\n helperText?: React.ReactNode;\n errorText?: React.ReactNode;\n type?: UploadType;\n accept?: string;\n maxSizeBytes?: number;\n required?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n validatePicked?: (asset: UploadAsset) => string | undefined;\n onUpload?: (asset: UploadAsset, context: UploadProgressContext) => Promise<UploadAsset>;\n onRemove?: (current: UploadAsset) => void | Promise<void>;\n aspectRatio?: number;\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ankhorage/zora",
3
3
  "type": "module",
4
- "version": "6.0.0",
4
+ "version": "7.0.0",
5
5
  "description": "Opinionated React Native and React Native Web UI kit built on @ankhorage/surface.",
6
6
  "homepage": "https://github.com/ankhorage/zora#readme",
7
7
  "bugs": {
@@ -42,7 +42,9 @@
42
42
  "dependencies": {
43
43
  "@ankhorage/color-theory": "^0.3.0",
44
44
  "@ankhorage/contracts": "^12.0.1",
45
- "@ankhorage/surface": "^4.1.0"
45
+ "@ankhorage/surface": "^4.1.0",
46
+ "expo-document-picker": "~57.0.1",
47
+ "expo-image-picker": "~57.0.16"
46
48
  },
47
49
  "files": [
48
50
  "dist",
@@ -67,6 +69,13 @@
67
69
  "import": "./dist/features/bottom-sheet/public.js",
68
70
  "default": "./dist/features/bottom-sheet/public.js"
69
71
  },
72
+ "./uploader": {
73
+ "react-native": "./src/features/uploader/public.ts",
74
+ "browser": "./src/features/uploader/public.ts",
75
+ "types": "./dist/features/uploader/public.d.ts",
76
+ "import": "./dist/features/uploader/public.js",
77
+ "default": "./dist/features/uploader/public.js"
78
+ },
70
79
  "./metadata": {
71
80
  "react-native": "./src/metadata/index.ts",
72
81
  "browser": "./src/metadata/index.ts",
@@ -1,21 +1,149 @@
1
- import { Image as SurfaceImage } from '@ankhorage/surface';
1
+ import { Image as SurfaceImage, type SurfaceImageSource } from '@ankhorage/surface';
2
2
  import React from 'react';
3
3
 
4
+ import { Box } from '../../foundation';
5
+ import { useZoraTheme } from '../../theme/useZoraTheme';
4
6
  import { withZoraThemeScope } from '../../theme/withZoraThemeScope';
7
+ import type { UploadAsset } from '../../types/upload';
8
+ import { Icon } from '../icon';
5
9
  import type { ImageProps } from './types';
6
10
 
11
+ /*** Displays an image asset and owns its missing, unrenderable, and failed presentation states. */
12
+ export const Image = withZoraThemeScope(ImageInner);
13
+
14
+ /*** Renders the resolved image source or the canonical ZORA image placeholder. */
7
15
  function ImageInner({
8
16
  themeId: _themeId,
9
17
  mode: _mode,
10
18
  interactionPolicy: _interactionPolicy,
19
+ source,
20
+ fallbackSource,
21
+ alt,
22
+ accessibilityLabel,
23
+ width,
24
+ height,
25
+ aspectRatio,
26
+ radius,
27
+ style,
28
+ testID,
29
+ onError,
11
30
  ...props
12
31
  }: ImageProps) {
13
- return <SurfaceImage {...props} />;
32
+ const { theme } = useZoraTheme();
33
+ const resolvedSource = resolveImageSource(source);
34
+ const sourceKey = resolveImageSourceKey(source);
35
+ const firstFailureKeyRef = React.useRef<string | null>(null);
36
+ const [failedSourceKey, setFailedSourceKey] = React.useState<string | null>(null);
37
+ const showPlaceholder = resolvedSource === null || failedSourceKey === sourceKey;
38
+ const resolvedAlt = alt ?? (isUploadAsset(source) ? source.alt : undefined);
39
+ const placeholderLabel = accessibilityLabel ?? resolvedAlt;
40
+
41
+ if (showPlaceholder) {
42
+ return (
43
+ <Box
44
+ accessibilityLabel={placeholderLabel}
45
+ accessibilityRole={placeholderLabel ? 'image' : undefined}
46
+ accessible={Boolean(placeholderLabel)}
47
+ bg={theme.semantics.neutral.surface}
48
+ borderColor={theme.semantics.neutral.divider}
49
+ borderWidth={1}
50
+ height={height}
51
+ overflow="hidden"
52
+ radius={radius}
53
+ testID={testID}
54
+ width={width}
55
+ style={[
56
+ {
57
+ alignItems: 'center',
58
+ aspectRatio: aspectRatio ?? 1,
59
+ justifyContent: 'center',
60
+ },
61
+ style,
62
+ ]}
63
+ >
64
+ <Icon color={theme.semantics.content.muted} name="image-outline" size={24} />
65
+ </Box>
66
+ );
67
+ }
68
+
69
+ return (
70
+ <SurfaceImage
71
+ {...props}
72
+ accessibilityLabel={accessibilityLabel}
73
+ alt={resolvedAlt}
74
+ aspectRatio={aspectRatio}
75
+ fallbackSource={fallbackSource}
76
+ height={height}
77
+ onError={(event) => {
78
+ onError?.(event);
79
+
80
+ if (!sourceKey) {
81
+ return;
82
+ }
83
+
84
+ if (fallbackSource && firstFailureKeyRef.current !== sourceKey) {
85
+ firstFailureKeyRef.current = sourceKey;
86
+ return;
87
+ }
88
+
89
+ setFailedSourceKey(sourceKey);
90
+ }}
91
+ radius={radius}
92
+ source={resolvedSource}
93
+ style={style}
94
+ testID={testID}
95
+ width={width}
96
+ />
97
+ );
14
98
  }
15
99
 
16
- /***
17
- * Displays an image with cross-platform source and fit handling.
18
- *
19
-
20
- */
21
- export const Image = withZoraThemeScope(ImageInner);
100
+ /*** Resolves a generic upload asset into a source understood by the Surface Image primitive. */
101
+ function resolveImageSource(source: ImageProps['source']): SurfaceImageSource | null | undefined {
102
+ if (!isUploadAsset(source)) {
103
+ return source;
104
+ }
105
+
106
+ switch (source.kind) {
107
+ case 'local':
108
+ return source.uri;
109
+ case 'url':
110
+ return source.url;
111
+ case 'storage':
112
+ return source.publicUrl ?? null;
113
+ }
114
+ }
115
+
116
+ /*** Produces a stable-enough key for tracking image failures across source changes. */
117
+ function resolveImageSourceKey(source: ImageProps['source']): string | null {
118
+ if (source === null || source === undefined) {
119
+ return null;
120
+ }
121
+
122
+ if (isUploadAsset(source)) {
123
+ switch (source.kind) {
124
+ case 'local':
125
+ return `local:${source.uri}`;
126
+ case 'url':
127
+ return `url:${source.url}`;
128
+ case 'storage':
129
+ return `storage:${source.bucket}:${source.path}:${source.publicUrl ?? ''}`;
130
+ }
131
+ }
132
+
133
+ if (typeof source === 'string' || typeof source === 'number') {
134
+ return `source:${String(source)}`;
135
+ }
136
+
137
+ if (!Array.isArray(source) && 'uri' in source && typeof source.uri === 'string') {
138
+ return `source:${source.uri}`;
139
+ }
140
+
141
+ return 'source:opaque';
142
+ }
143
+
144
+ /*** Identifies the generic ZORA upload asset shape without leaking picker-specific types. */
145
+ function isUploadAsset(source: ImageProps['source']): source is UploadAsset {
146
+ return (
147
+ typeof source === 'object' && source !== null && !Array.isArray(source) && 'kind' in source
148
+ );
149
+ }
@@ -1,7 +1,11 @@
1
- import type { ImageProps as SurfaceImageProps } from '@ankhorage/surface';
1
+ import type { ImageProps as SurfaceImageProps, SurfaceImageSource } from '@ankhorage/surface';
2
2
 
3
3
  import type { ZoraBaseProps } from '../../theme/ZoraBaseProps';
4
+ import type { UploadAsset } from '../../types/upload';
4
5
 
5
6
  export type { ImageFit, SurfaceImageSource } from '@ankhorage/surface';
6
7
 
7
- export interface ImageProps extends ZoraBaseProps, Omit<SurfaceImageProps, 'mode' | 'themeId'> {}
8
+ export interface ImageProps
9
+ extends ZoraBaseProps, Omit<SurfaceImageProps, 'mode' | 'source' | 'themeId'> {
10
+ source?: SurfaceImageSource | UploadAsset | null;
11
+ }