@drawnagency/primitives 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -0
- package/dist/auth/cookies.d.ts +8 -0
- package/dist/auth/cookies.d.ts.map +1 -0
- package/dist/auth/cookies.js +44 -0
- package/dist/auth/errors.d.ts +8 -0
- package/dist/auth/errors.d.ts.map +1 -0
- package/dist/auth/errors.js +10 -0
- package/dist/auth/index.d.ts +5 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +3 -0
- package/dist/auth/security.d.ts +13 -0
- package/dist/auth/security.d.ts.map +1 -0
- package/dist/auth/security.js +48 -0
- package/dist/auth/types.d.ts +64 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +1 -0
- package/dist/components/brandguide/ColorSwatchSettings.d.ts +8 -0
- package/dist/components/brandguide/ColorSwatchSettings.d.ts.map +1 -0
- package/dist/components/brandguide/ColorSwatchSettings.js +10 -0
- package/dist/components/brandguide/Colors.d.ts +15 -0
- package/dist/components/brandguide/Colors.d.ts.map +1 -0
- package/dist/components/brandguide/Colors.js +79 -0
- package/dist/components/brandguide/DoDontList.d.ts +16 -0
- package/dist/components/brandguide/DoDontList.d.ts.map +1 -0
- package/dist/components/brandguide/DoDontList.js +22 -0
- package/dist/components/brandguide/DoDontMediaGrid.d.ts +16 -0
- package/dist/components/brandguide/DoDontMediaGrid.d.ts.map +1 -0
- package/dist/components/brandguide/DoDontMediaGrid.js +5 -0
- package/dist/components/editor/AudiencePicker.d.ts +9 -0
- package/dist/components/editor/AudiencePicker.d.ts.map +1 -0
- package/dist/components/editor/AudiencePicker.js +24 -0
- package/dist/components/editor/DeleteButton.d.ts +6 -0
- package/dist/components/editor/DeleteButton.d.ts.map +1 -0
- package/dist/components/editor/DeleteButton.js +6 -0
- package/dist/components/editor/DragHandle.d.ts +2 -0
- package/dist/components/editor/DragHandle.d.ts.map +1 -0
- package/dist/components/editor/DragHandle.js +8 -0
- package/dist/components/editor/InsertButton.d.ts +7 -0
- package/dist/components/editor/InsertButton.d.ts.map +1 -0
- package/dist/components/editor/InsertButton.js +7 -0
- package/dist/components/editor/SectionWrapper.d.ts +3 -0
- package/dist/components/editor/SectionWrapper.d.ts.map +1 -0
- package/dist/components/editor/SectionWrapper.js +135 -0
- package/dist/components/editor/SettingsButton.d.ts +6 -0
- package/dist/components/editor/SettingsButton.d.ts.map +1 -0
- package/dist/components/editor/SettingsButton.js +6 -0
- package/dist/components/editor/SettingsForm.d.ts +13 -0
- package/dist/components/editor/SettingsForm.d.ts.map +1 -0
- package/dist/components/editor/SettingsForm.js +64 -0
- package/dist/components/editor/StatusBadge.d.ts +7 -0
- package/dist/components/editor/StatusBadge.d.ts.map +1 -0
- package/dist/components/editor/StatusBadge.js +10 -0
- package/dist/components/editor/StatusPicker.d.ts +9 -0
- package/dist/components/editor/StatusPicker.d.ts.map +1 -0
- package/dist/components/editor/StatusPicker.js +30 -0
- package/dist/components/editor/index.d.ts +8 -0
- package/dist/components/editor/index.d.ts.map +1 -0
- package/dist/components/editor/index.js +7 -0
- package/dist/components/primitives/CustomParagraph.d.ts +2 -0
- package/dist/components/primitives/CustomParagraph.d.ts.map +1 -0
- package/dist/components/primitives/CustomParagraph.js +24 -0
- package/dist/components/primitives/EditableGrid.d.ts +19 -0
- package/dist/components/primitives/EditableGrid.d.ts.map +1 -0
- package/dist/components/primitives/EditableGrid.js +90 -0
- package/dist/components/primitives/EditableList.d.ts +15 -0
- package/dist/components/primitives/EditableList.d.ts.map +1 -0
- package/dist/components/primitives/EditableList.js +54 -0
- package/dist/components/primitives/EditablePlainText.d.ts +12 -0
- package/dist/components/primitives/EditablePlainText.d.ts.map +1 -0
- package/dist/components/primitives/EditablePlainText.js +52 -0
- package/dist/components/primitives/EditableRichText.d.ts +11 -0
- package/dist/components/primitives/EditableRichText.d.ts.map +1 -0
- package/dist/components/primitives/EditableRichText.js +86 -0
- package/dist/components/primitives/HeadingSection.d.ts +10 -0
- package/dist/components/primitives/HeadingSection.d.ts.map +1 -0
- package/dist/components/primitives/HeadingSection.js +7 -0
- package/dist/components/primitives/IconPicker.d.ts +9 -0
- package/dist/components/primitives/IconPicker.d.ts.map +1 -0
- package/dist/components/primitives/IconPicker.js +21 -0
- package/dist/components/primitives/LinkPopover.d.ts +8 -0
- package/dist/components/primitives/LinkPopover.d.ts.map +1 -0
- package/dist/components/primitives/LinkPopover.js +48 -0
- package/dist/components/primitives/MediaSettingsForms.d.ts +19 -0
- package/dist/components/primitives/MediaSettingsForms.d.ts.map +1 -0
- package/dist/components/primitives/MediaSettingsForms.js +42 -0
- package/dist/components/primitives/ResolvedMedia.d.ts +8 -0
- package/dist/components/primitives/ResolvedMedia.d.ts.map +1 -0
- package/dist/components/primitives/ResolvedMedia.js +9 -0
- package/dist/components/primitives/RichTextToolbar.d.ts +9 -0
- package/dist/components/primitives/RichTextToolbar.d.ts.map +1 -0
- package/dist/components/primitives/RichTextToolbar.js +26 -0
- package/dist/components/primitives/tiptap-presets.d.ts +4 -0
- package/dist/components/primitives/tiptap-presets.d.ts.map +1 -0
- package/dist/components/primitives/tiptap-presets.js +44 -0
- package/dist/components/primitives/useEditableCollection.d.ts +19 -0
- package/dist/components/primitives/useEditableCollection.d.ts.map +1 -0
- package/dist/components/primitives/useEditableCollection.js +61 -0
- package/dist/components/primitives/useEditablePlainText.d.ts +14 -0
- package/dist/components/primitives/useEditablePlainText.d.ts.map +1 -0
- package/dist/components/primitives/useEditablePlainText.js +27 -0
- package/dist/components/primitives/useEditableRichText.d.ts +16 -0
- package/dist/components/primitives/useEditableRichText.d.ts.map +1 -0
- package/dist/components/primitives/useEditableRichText.js +52 -0
- package/dist/components/sections/Button/CTAButton.d.ts +11 -0
- package/dist/components/sections/Button/CTAButton.d.ts.map +1 -0
- package/dist/components/sections/Button/CTAButton.js +18 -0
- package/dist/components/sections/Button/index.d.ts +11 -0
- package/dist/components/sections/Button/index.d.ts.map +1 -0
- package/dist/components/sections/Button/index.js +28 -0
- package/dist/components/sections/Colors/index.d.ts +22 -0
- package/dist/components/sections/Colors/index.d.ts.map +1 -0
- package/dist/components/sections/Colors/index.js +34 -0
- package/dist/components/sections/DoDontList/index.d.ts +21 -0
- package/dist/components/sections/DoDontList/index.d.ts.map +1 -0
- package/dist/components/sections/DoDontList/index.js +33 -0
- package/dist/components/sections/DoDontMediaGrid/index.d.ts +55 -0
- package/dist/components/sections/DoDontMediaGrid/index.d.ts.map +1 -0
- package/dist/components/sections/DoDontMediaGrid/index.js +41 -0
- package/dist/components/sections/IconList/IconList.d.ts +20 -0
- package/dist/components/sections/IconList/IconList.d.ts.map +1 -0
- package/dist/components/sections/IconList/IconList.js +131 -0
- package/dist/components/sections/IconList/IconListSettings.d.ts +11 -0
- package/dist/components/sections/IconList/IconListSettings.d.ts.map +1 -0
- package/dist/components/sections/IconList/IconListSettings.js +22 -0
- package/dist/components/sections/IconList/index.d.ts +17 -0
- package/dist/components/sections/IconList/index.d.ts.map +1 -0
- package/dist/components/sections/IconList/index.js +27 -0
- package/dist/components/sections/LinkHeading/index.d.ts +8 -0
- package/dist/components/sections/LinkHeading/index.d.ts.map +1 -0
- package/dist/components/sections/LinkHeading/index.js +15 -0
- package/dist/components/sections/MediaGrid/MediaGrid.d.ts +17 -0
- package/dist/components/sections/MediaGrid/MediaGrid.d.ts.map +1 -0
- package/dist/components/sections/MediaGrid/MediaGrid.js +62 -0
- package/dist/components/sections/MediaGrid/index.d.ts +55 -0
- package/dist/components/sections/MediaGrid/index.d.ts.map +1 -0
- package/dist/components/sections/MediaGrid/index.js +35 -0
- package/dist/components/sections/Prose/Prose.d.ts +8 -0
- package/dist/components/sections/Prose/Prose.d.ts.map +1 -0
- package/dist/components/sections/Prose/Prose.js +11 -0
- package/dist/components/sections/Prose/index.d.ts +8 -0
- package/dist/components/sections/Prose/index.d.ts.map +1 -0
- package/dist/components/sections/Prose/index.js +15 -0
- package/dist/components/sections/SectionLayout.d.ts +11 -0
- package/dist/components/sections/SectionLayout.d.ts.map +1 -0
- package/dist/components/sections/SectionLayout.js +15 -0
- package/dist/components/sections/SplitContent/SplitContent.d.ts +11 -0
- package/dist/components/sections/SplitContent/SplitContent.d.ts.map +1 -0
- package/dist/components/sections/SplitContent/SplitContent.js +31 -0
- package/dist/components/sections/SplitContent/SplitContentSettings.d.ts +9 -0
- package/dist/components/sections/SplitContent/SplitContentSettings.d.ts.map +1 -0
- package/dist/components/sections/SplitContent/SplitContentSettings.js +17 -0
- package/dist/components/sections/SplitContent/index.d.ts +13 -0
- package/dist/components/sections/SplitContent/index.d.ts.map +1 -0
- package/dist/components/sections/SplitContent/index.js +27 -0
- package/dist/components/sections/SubHeading/index.d.ts +9 -0
- package/dist/components/sections/SubHeading/index.d.ts.map +1 -0
- package/dist/components/sections/SubHeading/index.js +18 -0
- package/dist/components/sections/SubSubHeading/index.d.ts +9 -0
- package/dist/components/sections/SubSubHeading/index.d.ts.map +1 -0
- package/dist/components/sections/SubSubHeading/index.js +18 -0
- package/dist/components/sections/ViewRenderer.d.ts +8 -0
- package/dist/components/sections/ViewRenderer.d.ts.map +1 -0
- package/dist/components/sections/ViewRenderer.js +13 -0
- package/dist/components/sections/register-schemas.d.ts +2 -0
- package/dist/components/sections/register-schemas.d.ts.map +1 -0
- package/dist/components/sections/register-schemas.js +15 -0
- package/dist/components/sections/register.d.ts +2 -0
- package/dist/components/sections/register.d.ts.map +1 -0
- package/dist/components/sections/register.js +15 -0
- package/dist/components/shared/Button.d.ts +15 -0
- package/dist/components/shared/Button.d.ts.map +1 -0
- package/dist/components/shared/Button.js +27 -0
- package/dist/components/shared/Checkbox.d.ts +14 -0
- package/dist/components/shared/Checkbox.d.ts.map +1 -0
- package/dist/components/shared/Checkbox.js +10 -0
- package/dist/components/shared/ColorPicker.d.ts +9 -0
- package/dist/components/shared/ColorPicker.d.ts.map +1 -0
- package/dist/components/shared/ColorPicker.js +5 -0
- package/dist/components/shared/ErrorBoundary.d.ts +24 -0
- package/dist/components/shared/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/shared/ErrorBoundary.js +30 -0
- package/dist/components/shared/FontPicker.d.ts +8 -0
- package/dist/components/shared/FontPicker.d.ts.map +1 -0
- package/dist/components/shared/FontPicker.js +190 -0
- package/dist/components/shared/FormLabel.d.ts +8 -0
- package/dist/components/shared/FormLabel.d.ts.map +1 -0
- package/dist/components/shared/FormLabel.js +5 -0
- package/dist/components/shared/IconButton.d.ts +12 -0
- package/dist/components/shared/IconButton.d.ts.map +1 -0
- package/dist/components/shared/IconButton.js +16 -0
- package/dist/components/shared/Input.d.ts +8 -0
- package/dist/components/shared/Input.d.ts.map +1 -0
- package/dist/components/shared/Input.js +8 -0
- package/dist/components/shared/Navigation.d.ts +9 -0
- package/dist/components/shared/Navigation.d.ts.map +1 -0
- package/dist/components/shared/Navigation.js +71 -0
- package/dist/components/shared/PasswordInput.d.ts +13 -0
- package/dist/components/shared/PasswordInput.d.ts.map +1 -0
- package/dist/components/shared/PasswordInput.js +11 -0
- package/dist/components/shared/Popover.d.ts +12 -0
- package/dist/components/shared/Popover.d.ts.map +1 -0
- package/dist/components/shared/Popover.js +33 -0
- package/dist/components/shared/PopoverItem.d.ts +7 -0
- package/dist/components/shared/PopoverItem.d.ts.map +1 -0
- package/dist/components/shared/PopoverItem.js +6 -0
- package/dist/components/shared/Select.d.ts +16 -0
- package/dist/components/shared/Select.d.ts.map +1 -0
- package/dist/components/shared/Select.js +9 -0
- package/dist/components/shared/Textarea.d.ts +8 -0
- package/dist/components/shared/Textarea.d.ts.map +1 -0
- package/dist/components/shared/Textarea.js +8 -0
- package/dist/components/shared/Toggle.d.ts +10 -0
- package/dist/components/shared/Toggle.d.ts.map +1 -0
- package/dist/components/shared/Toggle.js +5 -0
- package/dist/components/shared/Tooltip.d.ts +12 -0
- package/dist/components/shared/Tooltip.d.ts.map +1 -0
- package/dist/components/shared/Tooltip.js +8 -0
- package/dist/components/shared/icons.d.ts +17 -0
- package/dist/components/shared/icons.d.ts.map +1 -0
- package/dist/components/shared/icons.js +23 -0
- package/dist/components/shell/AudienceAddForm.d.ts +11 -0
- package/dist/components/shell/AudienceAddForm.d.ts.map +1 -0
- package/dist/components/shell/AudienceAddForm.js +43 -0
- package/dist/components/shell/AudienceRow.d.ts +15 -0
- package/dist/components/shell/AudienceRow.d.ts.map +1 -0
- package/dist/components/shell/AudienceRow.js +74 -0
- package/dist/components/shell/EditorContext.d.ts +14 -0
- package/dist/components/shell/EditorContext.d.ts.map +1 -0
- package/dist/components/shell/EditorContext.js +24 -0
- package/dist/components/shell/EditorLoginForm.d.ts +13 -0
- package/dist/components/shell/EditorLoginForm.d.ts.map +1 -0
- package/dist/components/shell/EditorLoginForm.js +46 -0
- package/dist/components/shell/EditorModal.d.ts +13 -0
- package/dist/components/shell/EditorModal.d.ts.map +1 -0
- package/dist/components/shell/EditorModal.js +43 -0
- package/dist/components/shell/EditorModalContext.d.ts +16 -0
- package/dist/components/shell/EditorModalContext.d.ts.map +1 -0
- package/dist/components/shell/EditorModalContext.js +20 -0
- package/dist/components/shell/EditorShell.d.ts +22 -0
- package/dist/components/shell/EditorShell.d.ts.map +1 -0
- package/dist/components/shell/EditorShell.js +483 -0
- package/dist/components/shell/MediaLibraryContext.d.ts +14 -0
- package/dist/components/shell/MediaLibraryContext.d.ts.map +1 -0
- package/dist/components/shell/MediaLibraryContext.js +5 -0
- package/dist/components/shell/MediaLibraryModal.d.ts +14 -0
- package/dist/components/shell/MediaLibraryModal.d.ts.map +1 -0
- package/dist/components/shell/MediaLibraryModal.js +145 -0
- package/dist/components/shell/ProcessingIndicator.d.ts +7 -0
- package/dist/components/shell/ProcessingIndicator.d.ts.map +1 -0
- package/dist/components/shell/ProcessingIndicator.js +15 -0
- package/dist/components/shell/SectionSkeleton.d.ts +9 -0
- package/dist/components/shell/SectionSkeleton.d.ts.map +1 -0
- package/dist/components/shell/SectionSkeleton.js +22 -0
- package/dist/components/shell/SectionTypePicker.d.ts +14 -0
- package/dist/components/shell/SectionTypePicker.d.ts.map +1 -0
- package/dist/components/shell/SectionTypePicker.js +15 -0
- package/dist/components/shell/SiteSettingsDisplay.d.ts +8 -0
- package/dist/components/shell/SiteSettingsDisplay.d.ts.map +1 -0
- package/dist/components/shell/SiteSettingsDisplay.js +28 -0
- package/dist/components/shell/SiteSettingsModal.d.ts +24 -0
- package/dist/components/shell/SiteSettingsModal.d.ts.map +1 -0
- package/dist/components/shell/SiteSettingsModal.js +40 -0
- package/dist/components/shell/SiteSettingsUsers.d.ts +9 -0
- package/dist/components/shell/SiteSettingsUsers.d.ts.map +1 -0
- package/dist/components/shell/SiteSettingsUsers.js +87 -0
- package/dist/components/shell/SiteSettingsViewerAccess.d.ts +9 -0
- package/dist/components/shell/SiteSettingsViewerAccess.d.ts.map +1 -0
- package/dist/components/shell/SiteSettingsViewerAccess.js +94 -0
- package/dist/components/shell/ViewerLoginForm.d.ts +10 -0
- package/dist/components/shell/ViewerLoginForm.d.ts.map +1 -0
- package/dist/components/shell/ViewerLoginForm.js +40 -0
- package/dist/data/google-fonts.json +7718 -0
- package/dist/hooks/index.d.ts +7 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +6 -0
- package/dist/hooks/useActiveHeadings.d.ts +7 -0
- package/dist/hooks/useActiveHeadings.d.ts.map +1 -0
- package/dist/hooks/useActiveHeadings.js +99 -0
- package/dist/hooks/useEditorPersistence.d.ts +13 -0
- package/dist/hooks/useEditorPersistence.d.ts.map +1 -0
- package/dist/hooks/useEditorPersistence.js +73 -0
- package/dist/hooks/useEditorPublish.d.ts +24 -0
- package/dist/hooks/useEditorPublish.d.ts.map +1 -0
- package/dist/hooks/useEditorPublish.js +145 -0
- package/dist/hooks/useFocusTrap.d.ts +3 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -0
- package/dist/hooks/useFocusTrap.js +51 -0
- package/dist/hooks/useMediaPipeline.d.ts +65 -0
- package/dist/hooks/useMediaPipeline.d.ts.map +1 -0
- package/dist/hooks/useMediaPipeline.js +253 -0
- package/dist/hooks/useResolvedMedia.d.ts +9 -0
- package/dist/hooks/useResolvedMedia.d.ts.map +1 -0
- package/dist/hooks/useResolvedMedia.js +39 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/lib/cn.d.ts +3 -0
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/lib/cn.js +5 -0
- package/dist/lib/contrast.d.ts +2 -0
- package/dist/lib/contrast.d.ts.map +1 -0
- package/dist/lib/contrast.js +11 -0
- package/dist/lib/dexie.d.ts +41 -0
- package/dist/lib/dexie.d.ts.map +1 -0
- package/dist/lib/dexie.js +236 -0
- package/dist/lib/events.d.ts +12 -0
- package/dist/lib/events.d.ts.map +1 -0
- package/dist/lib/events.js +15 -0
- package/dist/lib/google-fonts.d.ts +2 -0
- package/dist/lib/google-fonts.d.ts.map +1 -0
- package/dist/lib/google-fonts.js +11 -0
- package/dist/lib/grid.d.ts +2 -0
- package/dist/lib/grid.d.ts.map +1 -0
- package/dist/lib/grid.js +7 -0
- package/dist/lib/icons.d.ts +9 -0
- package/dist/lib/icons.d.ts.map +1 -0
- package/dist/lib/icons.js +27 -0
- package/dist/lib/index.d.ts +13 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +12 -0
- package/dist/lib/loader.d.ts +28 -0
- package/dist/lib/loader.d.ts.map +1 -0
- package/dist/lib/loader.js +57 -0
- package/dist/lib/nav.d.ts +15 -0
- package/dist/lib/nav.d.ts.map +1 -0
- package/dist/lib/nav.js +58 -0
- package/dist/lib/registry.d.ts +110 -0
- package/dist/lib/registry.d.ts.map +1 -0
- package/dist/lib/registry.js +64 -0
- package/dist/lib/safeRedirect.d.ts +7 -0
- package/dist/lib/safeRedirect.d.ts.map +1 -0
- package/dist/lib/safeRedirect.js +11 -0
- package/dist/lib/sanitize.d.ts +2 -0
- package/dist/lib/sanitize.d.ts.map +1 -0
- package/dist/lib/sanitize.js +6 -0
- package/dist/lib/timestamp.d.ts +2 -0
- package/dist/lib/timestamp.d.ts.map +1 -0
- package/dist/lib/timestamp.js +28 -0
- package/dist/media/github.d.ts +3 -0
- package/dist/media/github.d.ts.map +1 -0
- package/dist/media/github.js +60 -0
- package/dist/media/index.d.ts +8 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +9 -0
- package/dist/media/queue.d.ts +74 -0
- package/dist/media/queue.d.ts.map +1 -0
- package/dist/media/queue.js +116 -0
- package/dist/media/resolve.d.ts +14 -0
- package/dist/media/resolve.d.ts.map +1 -0
- package/dist/media/resolve.js +50 -0
- package/dist/media/types.d.ts +42 -0
- package/dist/media/types.d.ts.map +1 -0
- package/dist/media/types.js +1 -0
- package/dist/media/utils.d.ts +7 -0
- package/dist/media/utils.d.ts.map +1 -0
- package/dist/media/utils.js +41 -0
- package/dist/media/videoPoster.d.ts +6 -0
- package/dist/media/videoPoster.d.ts.map +1 -0
- package/dist/media/videoPoster.js +44 -0
- package/dist/media/worker.d.ts +36 -0
- package/dist/media/worker.d.ts.map +1 -0
- package/dist/media/worker.js +73 -0
- package/dist/schemas/audience.d.ts +12 -0
- package/dist/schemas/audience.d.ts.map +1 -0
- package/dist/schemas/audience.js +19 -0
- package/dist/schemas/auth.d.ts +36 -0
- package/dist/schemas/auth.d.ts.map +1 -0
- package/dist/schemas/auth.js +22 -0
- package/dist/schemas/index.d.ts +8 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +7 -0
- package/dist/schemas/media-grid-options.d.ts +8 -0
- package/dist/schemas/media-grid-options.d.ts.map +1 -0
- package/dist/schemas/media-grid-options.js +7 -0
- package/dist/schemas/media.d.ts +63 -0
- package/dist/schemas/media.d.ts.map +1 -0
- package/dist/schemas/media.js +28 -0
- package/dist/schemas/sections.d.ts +12 -0
- package/dist/schemas/sections.d.ts.map +1 -0
- package/dist/schemas/sections.js +12 -0
- package/dist/schemas/shared.d.ts +98 -0
- package/dist/schemas/shared.d.ts.map +1 -0
- package/dist/schemas/shared.js +71 -0
- package/dist/schemas/site-config.d.ts +48 -0
- package/dist/schemas/site-config.d.ts.map +1 -0
- package/dist/schemas/site-config.js +26 -0
- package/package.json +57 -0
- package/src/auth/cookies.ts +51 -0
- package/src/auth/errors.ts +10 -0
- package/src/auth/index.ts +15 -0
- package/src/auth/security.ts +44 -0
- package/src/auth/types.ts +61 -0
- package/src/components/brandguide/ColorSwatchSettings.tsx +34 -0
- package/src/components/brandguide/Colors.tsx +277 -0
- package/src/components/brandguide/DoDontList.tsx +67 -0
- package/src/components/brandguide/DoDontMediaGrid.tsx +19 -0
- package/src/components/editor/AudiencePicker.tsx +103 -0
- package/src/components/editor/DeleteButton.tsx +18 -0
- package/src/components/editor/DragHandle.tsx +18 -0
- package/src/components/editor/InsertButton.tsx +22 -0
- package/src/components/editor/SectionWrapper.tsx +279 -0
- package/src/components/editor/SettingsButton.tsx +17 -0
- package/src/components/editor/SettingsForm.tsx +159 -0
- package/src/components/editor/StatusBadge.tsx +30 -0
- package/src/components/editor/StatusPicker.tsx +86 -0
- package/src/components/editor/index.ts +7 -0
- package/src/components/primitives/CustomParagraph.ts +25 -0
- package/src/components/primitives/EditableGrid.tsx +260 -0
- package/src/components/primitives/EditableList.tsx +160 -0
- package/src/components/primitives/EditablePlainText.tsx +99 -0
- package/src/components/primitives/EditableRichText.tsx +132 -0
- package/src/components/primitives/HeadingSection.tsx +25 -0
- package/src/components/primitives/IconPicker.tsx +60 -0
- package/src/components/primitives/LinkPopover.tsx +109 -0
- package/src/components/primitives/MediaSettingsForms.tsx +109 -0
- package/src/components/primitives/ResolvedMedia.tsx +36 -0
- package/src/components/primitives/RichTextToolbar.tsx +149 -0
- package/src/components/primitives/tiptap-presets.ts +50 -0
- package/src/components/primitives/useEditableCollection.ts +104 -0
- package/src/components/primitives/useEditablePlainText.ts +49 -0
- package/src/components/primitives/useEditableRichText.ts +74 -0
- package/src/components/sections/Button/CTAButton.tsx +50 -0
- package/src/components/sections/Button/index.tsx +37 -0
- package/src/components/sections/Colors/index.tsx +45 -0
- package/src/components/sections/DoDontList/index.tsx +43 -0
- package/src/components/sections/DoDontMediaGrid/index.tsx +53 -0
- package/src/components/sections/IconList/IconList.tsx +462 -0
- package/src/components/sections/IconList/IconListSettings.tsx +81 -0
- package/src/components/sections/IconList/index.tsx +36 -0
- package/src/components/sections/LinkHeading/index.tsx +24 -0
- package/src/components/sections/MediaGrid/MediaGrid.tsx +219 -0
- package/src/components/sections/MediaGrid/index.tsx +47 -0
- package/src/components/sections/Prose/Prose.tsx +34 -0
- package/src/components/sections/Prose/index.tsx +18 -0
- package/src/components/sections/SectionLayout.tsx +31 -0
- package/src/components/sections/SplitContent/SplitContent.tsx +77 -0
- package/src/components/sections/SplitContent/SplitContentSettings.tsx +42 -0
- package/src/components/sections/SplitContent/index.tsx +36 -0
- package/src/components/sections/SubHeading/index.tsx +27 -0
- package/src/components/sections/SubSubHeading/index.tsx +27 -0
- package/src/components/sections/ViewRenderer.tsx +29 -0
- package/src/components/sections/register-schemas.ts +16 -0
- package/src/components/sections/register.ts +16 -0
- package/src/components/shared/Button.tsx +77 -0
- package/src/components/shared/Checkbox.tsx +73 -0
- package/src/components/shared/ColorPicker.tsx +28 -0
- package/src/components/shared/ErrorBoundary.tsx +92 -0
- package/src/components/shared/FontPicker.tsx +300 -0
- package/src/components/shared/FormLabel.tsx +18 -0
- package/src/components/shared/IconButton.tsx +45 -0
- package/src/components/shared/Input.tsx +34 -0
- package/src/components/shared/Navigation.tsx +196 -0
- package/src/components/shared/PasswordInput.tsx +64 -0
- package/src/components/shared/Popover.tsx +61 -0
- package/src/components/shared/PopoverItem.tsx +24 -0
- package/src/components/shared/Select.tsx +60 -0
- package/src/components/shared/Textarea.tsx +34 -0
- package/src/components/shared/Toggle.tsx +35 -0
- package/src/components/shared/Tooltip.tsx +28 -0
- package/src/components/shared/icons.tsx +28 -0
- package/src/components/shell/AudienceAddForm.tsx +94 -0
- package/src/components/shell/AudienceRow.tsx +171 -0
- package/src/components/shell/EditorContext.tsx +44 -0
- package/src/components/shell/EditorLoginForm.tsx +130 -0
- package/src/components/shell/EditorModal.tsx +93 -0
- package/src/components/shell/EditorModalContext.tsx +40 -0
- package/src/components/shell/EditorShell.tsx +910 -0
- package/src/components/shell/MediaLibraryContext.tsx +19 -0
- package/src/components/shell/MediaLibraryModal.tsx +371 -0
- package/src/components/shell/ProcessingIndicator.tsx +84 -0
- package/src/components/shell/SectionSkeleton.tsx +54 -0
- package/src/components/shell/SectionTypePicker.tsx +47 -0
- package/src/components/shell/SiteSettingsDisplay.tsx +78 -0
- package/src/components/shell/SiteSettingsModal.tsx +129 -0
- package/src/components/shell/SiteSettingsUsers.tsx +190 -0
- package/src/components/shell/SiteSettingsViewerAccess.tsx +171 -0
- package/src/components/shell/ViewerLoginForm.tsx +95 -0
- package/src/data/google-fonts.json +7718 -0
- package/src/env.d.ts +3 -0
- package/src/hooks/index.ts +6 -0
- package/src/hooks/useActiveHeadings.ts +120 -0
- package/src/hooks/useEditorPersistence.ts +103 -0
- package/src/hooks/useEditorPublish.ts +187 -0
- package/src/hooks/useFocusTrap.ts +57 -0
- package/src/hooks/useMediaPipeline.ts +309 -0
- package/src/hooks/useResolvedMedia.ts +54 -0
- package/src/index.ts +4 -0
- package/src/lib/cn.ts +6 -0
- package/src/lib/contrast.ts +11 -0
- package/src/lib/dexie.ts +347 -0
- package/src/lib/events.ts +23 -0
- package/src/lib/google-fonts.ts +10 -0
- package/src/lib/grid.ts +7 -0
- package/src/lib/icons.ts +58 -0
- package/src/lib/index.ts +35 -0
- package/src/lib/loader.ts +81 -0
- package/src/lib/nav.ts +64 -0
- package/src/lib/registry.ts +202 -0
- package/src/lib/safeRedirect.ts +11 -0
- package/src/lib/sanitize.ts +6 -0
- package/src/lib/timestamp.ts +31 -0
- package/src/media/github.ts +72 -0
- package/src/media/index.ts +12 -0
- package/src/media/queue.ts +166 -0
- package/src/media/resolve.ts +63 -0
- package/src/media/types.ts +58 -0
- package/src/media/utils.ts +48 -0
- package/src/media/videoPoster.ts +53 -0
- package/src/media/worker.ts +122 -0
- package/src/schemas/audience.ts +28 -0
- package/src/schemas/auth.ts +31 -0
- package/src/schemas/index.ts +7 -0
- package/src/schemas/media-grid-options.ts +8 -0
- package/src/schemas/media.ts +40 -0
- package/src/schemas/sections.ts +24 -0
- package/src/schemas/shared.ts +96 -0
- package/src/schemas/site-config.ts +38 -0
package/README.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# @drawnagency/primitives
|
|
2
|
+
|
|
3
|
+
Schemas, components, utilities, and auth interfaces for the Drawn brand portal framework.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @drawnagency/primitives
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## What's included
|
|
12
|
+
|
|
13
|
+
- **Schemas** — Zod schemas for sections, site config, media, and audiences
|
|
14
|
+
- **Components** — React components for section rendering, navigation, and editor UI
|
|
15
|
+
- **Auth** — `AuthProvider` interface and session management utilities
|
|
16
|
+
- **Media** — Client-side image/video processing pipeline
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { IndexSchema, SiteConfigSchema } from "@drawnagency/primitives/schemas";
|
|
22
|
+
import { generateNavLinks } from "@drawnagency/primitives/lib";
|
|
23
|
+
import type { AuthProvider } from "@drawnagency/primitives/auth";
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Part of the Drawn Portal Framework
|
|
27
|
+
|
|
28
|
+
Built by [Drawn Agency](https://drawnagency.com). See [@drawnagency/core](https://www.npmjs.com/package/@drawnagency/core) for the full framework.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Session, CookieLike } from "./types";
|
|
2
|
+
export declare const SESSION_COOKIE = "bp-session";
|
|
3
|
+
export declare const AUDIENCE_COOKIE = "bp-audience";
|
|
4
|
+
export declare const SESSION_MAX_AGE_SECONDS: number;
|
|
5
|
+
export declare function signSessionToken(session: Session): Promise<string>;
|
|
6
|
+
export declare function verifySessionToken(token: string): Promise<Session | null>;
|
|
7
|
+
export declare function setSessionCookie(cookies: CookieLike, token: string, isProduction: boolean): void;
|
|
8
|
+
//# sourceMappingURL=cookies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/auth/cookies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGnD,eAAO,MAAM,cAAc,eAAe,CAAC;AAC3C,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAC7C,eAAO,MAAM,uBAAuB,QAAe,CAAC;AAEpD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAWxE;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAe/E;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,OAAO,GACpB,IAAI,CAQN"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as jose from "jose";
|
|
2
|
+
import { requireSessionSecret } from "./security";
|
|
3
|
+
export const SESSION_COOKIE = "bp-session";
|
|
4
|
+
export const AUDIENCE_COOKIE = "bp-audience";
|
|
5
|
+
export const SESSION_MAX_AGE_SECONDS = 60 * 60 * 24;
|
|
6
|
+
export async function signSessionToken(session) {
|
|
7
|
+
return new jose.SignJWT({
|
|
8
|
+
userId: session.userId,
|
|
9
|
+
email: session.email,
|
|
10
|
+
role: session.role,
|
|
11
|
+
siteId: session.siteId,
|
|
12
|
+
})
|
|
13
|
+
.setProtectedHeader({ alg: "HS256" })
|
|
14
|
+
.setExpirationTime(`${SESSION_MAX_AGE_SECONDS}s`)
|
|
15
|
+
.setIssuedAt()
|
|
16
|
+
.sign(requireSessionSecret());
|
|
17
|
+
}
|
|
18
|
+
export async function verifySessionToken(token) {
|
|
19
|
+
const secret = requireSessionSecret(); // throws on misconfiguration, before try
|
|
20
|
+
try {
|
|
21
|
+
const { payload } = await jose.jwtVerify(token, secret);
|
|
22
|
+
const role = payload.role;
|
|
23
|
+
if (role !== "owner" && role !== "editor")
|
|
24
|
+
return null;
|
|
25
|
+
return {
|
|
26
|
+
userId: payload.userId ?? null,
|
|
27
|
+
email: payload.email ?? null,
|
|
28
|
+
role,
|
|
29
|
+
siteId: payload.siteId,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function setSessionCookie(cookies, token, isProduction) {
|
|
37
|
+
cookies.set(SESSION_COOKIE, token, {
|
|
38
|
+
httpOnly: true,
|
|
39
|
+
secure: isProduction,
|
|
40
|
+
sameSite: "lax",
|
|
41
|
+
path: "/",
|
|
42
|
+
maxAge: SESSION_MAX_AGE_SECONDS,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thrown when a mutation would leave a site with zero owners.
|
|
3
|
+
* API routes should translate this to HTTP 409 Conflict with the message.
|
|
4
|
+
*/
|
|
5
|
+
export declare class LastOwnerError extends Error {
|
|
6
|
+
constructor(message?: string);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/auth/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,SAAiC;CAIrD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thrown when a mutation would leave a site with zero owners.
|
|
3
|
+
* API routes should translate this to HTTP 409 Conflict with the message.
|
|
4
|
+
*/
|
|
5
|
+
export class LastOwnerError extends Error {
|
|
6
|
+
constructor(message = "Cannot remove the last owner") {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = "LastOwnerError";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type { Role, Session, SiteUser, Audience, SignInMethod, SignInResult, AuthProvider, CookieLike, AuthContext, } from "./types";
|
|
2
|
+
export { requireSessionSecret, isSameOriginRequest, safeNextPath } from "./security";
|
|
3
|
+
export { signSessionToken, verifySessionToken, setSessionCookie, SESSION_COOKIE, AUDIENCE_COOKIE, SESSION_MAX_AGE_SECONDS } from "./cookies";
|
|
4
|
+
export { LastOwnerError } from "./errors";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAC7I,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared auth security primitives: session secret loader, same-origin check,
|
|
3
|
+
* redirect-path validator. Imported by cookies.ts, middleware, and auth API routes.
|
|
4
|
+
*/
|
|
5
|
+
export declare function requireSessionSecret(): Uint8Array;
|
|
6
|
+
/**
|
|
7
|
+
* Same-origin check for CSRF protection on state-changing requests.
|
|
8
|
+
* Combine with an HTTP-method guard at the call site — this does not
|
|
9
|
+
* discriminate between safe (GET/HEAD) and unsafe methods.
|
|
10
|
+
*/
|
|
11
|
+
export declare function isSameOriginRequest(request: Request): boolean;
|
|
12
|
+
export declare function safeNextPath(next: string | null | undefined): string | null;
|
|
13
|
+
//# sourceMappingURL=security.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/auth/security.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,oBAAoB,IAAI,UAAU,CAUjD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAY7D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAO3E"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared auth security primitives: session secret loader, same-origin check,
|
|
3
|
+
* redirect-path validator. Imported by cookies.ts, middleware, and auth API routes.
|
|
4
|
+
*/
|
|
5
|
+
export function requireSessionSecret() {
|
|
6
|
+
const secret = import.meta.env.SESSION_SECRET;
|
|
7
|
+
if (!secret) {
|
|
8
|
+
throw new Error("SESSION_SECRET is required but not set");
|
|
9
|
+
}
|
|
10
|
+
const bytes = new TextEncoder().encode(secret);
|
|
11
|
+
if (bytes.byteLength < 32) {
|
|
12
|
+
throw new Error("SESSION_SECRET must be at least 32 bytes");
|
|
13
|
+
}
|
|
14
|
+
return bytes;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Same-origin check for CSRF protection on state-changing requests.
|
|
18
|
+
* Combine with an HTTP-method guard at the call site — this does not
|
|
19
|
+
* discriminate between safe (GET/HEAD) and unsafe methods.
|
|
20
|
+
*/
|
|
21
|
+
export function isSameOriginRequest(request) {
|
|
22
|
+
const origin = request.headers.get("Origin");
|
|
23
|
+
const referer = request.headers.get("Referer");
|
|
24
|
+
const source = origin ?? referer;
|
|
25
|
+
if (!source)
|
|
26
|
+
return false;
|
|
27
|
+
try {
|
|
28
|
+
const sourceOrigin = new URL(source).origin;
|
|
29
|
+
const requestOrigin = new URL(request.url).origin;
|
|
30
|
+
return sourceOrigin === requestOrigin;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function safeNextPath(next) {
|
|
37
|
+
if (!next)
|
|
38
|
+
return null;
|
|
39
|
+
if (!next.startsWith("/"))
|
|
40
|
+
return null;
|
|
41
|
+
if (next.startsWith("//"))
|
|
42
|
+
return null;
|
|
43
|
+
if (next.includes("\\"))
|
|
44
|
+
return null;
|
|
45
|
+
if (/[\x00-\x1f]/.test(next))
|
|
46
|
+
return null;
|
|
47
|
+
return next;
|
|
48
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export type { Role, Session, SiteUser, Audience } from "../schemas/auth";
|
|
2
|
+
import type { Role, Session, SiteUser, Audience } from "../schemas/auth";
|
|
3
|
+
export type SignInMethod = {
|
|
4
|
+
type: "oauth";
|
|
5
|
+
provider: "google" | "github";
|
|
6
|
+
} | {
|
|
7
|
+
type: "email";
|
|
8
|
+
email: string;
|
|
9
|
+
password: string;
|
|
10
|
+
} | {
|
|
11
|
+
type: "password";
|
|
12
|
+
password: string;
|
|
13
|
+
};
|
|
14
|
+
export type SignInResult = {
|
|
15
|
+
success: true;
|
|
16
|
+
session: Session;
|
|
17
|
+
token: string;
|
|
18
|
+
} | {
|
|
19
|
+
success: true;
|
|
20
|
+
redirectUrl: string;
|
|
21
|
+
} | {
|
|
22
|
+
success: false;
|
|
23
|
+
error: string;
|
|
24
|
+
};
|
|
25
|
+
export interface AuthProvider {
|
|
26
|
+
capabilities: {
|
|
27
|
+
oauth: boolean;
|
|
28
|
+
emailPassword: boolean;
|
|
29
|
+
passwordOnly: boolean;
|
|
30
|
+
userManagement: boolean;
|
|
31
|
+
audienceManagement: boolean;
|
|
32
|
+
passwordToggle: boolean;
|
|
33
|
+
};
|
|
34
|
+
oauthProviders?: ("google" | "github")[];
|
|
35
|
+
resolveSession(ctx: AuthContext): Promise<Session | null>;
|
|
36
|
+
signIn(method: SignInMethod, ctx: AuthContext): Promise<SignInResult>;
|
|
37
|
+
signOut(ctx: AuthContext): Promise<void>;
|
|
38
|
+
listSiteUsers?(): Promise<SiteUser[]>;
|
|
39
|
+
inviteUser?(email: string, role: Role): Promise<void>;
|
|
40
|
+
revokeUser?(userId: string): Promise<void>;
|
|
41
|
+
listAudiences(): Promise<Audience[]>;
|
|
42
|
+
verifyAudiencePassword(name: string, password: string): Promise<boolean>;
|
|
43
|
+
getAudience?(name: string): Promise<Audience | null>;
|
|
44
|
+
createAudience?(displayName: string, color: string | null, password: string): Promise<void>;
|
|
45
|
+
setAudiencePassword?(name: string, password: string): Promise<void>;
|
|
46
|
+
setAudienceColor?(name: string, color: string | null): Promise<void>;
|
|
47
|
+
setAudienceDisplayName?(name: string, displayName: string): Promise<void>;
|
|
48
|
+
deleteAudience?(name: string): Promise<void>;
|
|
49
|
+
getPasswordEnabled(): Promise<boolean>;
|
|
50
|
+
setPasswordEnabled?(enabled: boolean): Promise<void>;
|
|
51
|
+
handleCallback?(request: Request, ctx: AuthContext): Promise<Response>;
|
|
52
|
+
}
|
|
53
|
+
export interface CookieLike {
|
|
54
|
+
get(name: string): {
|
|
55
|
+
value: string;
|
|
56
|
+
} | undefined;
|
|
57
|
+
set(name: string, value: string, options?: Record<string, unknown>): void;
|
|
58
|
+
delete(name: string): void;
|
|
59
|
+
}
|
|
60
|
+
export interface AuthContext {
|
|
61
|
+
cookies: CookieLike;
|
|
62
|
+
cookieHeader: string;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEzE,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,MAAM,MAAM,YAAY,GACpB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE;QACZ,KAAK,EAAE,OAAO,CAAC;QACf,aAAa,EAAE,OAAO,CAAC;QACvB,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,EAAE,OAAO,CAAC;QACxB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,cAAc,CAAC,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC;IAEzC,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC1D,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC,aAAa,CAAC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtC,UAAU,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAGzE,WAAW,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAGrD,cAAc,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5F,mBAAmB,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,gBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,sBAAsB,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,cAAc,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,kBAAkB,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErD,cAAc,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACjD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC1E,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,UAAU,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ColorItem } from "../../schemas/shared";
|
|
2
|
+
interface Props {
|
|
3
|
+
color: ColorItem;
|
|
4
|
+
onChange: (color: ColorItem) => void;
|
|
5
|
+
}
|
|
6
|
+
export default function ColorSwatchSettings({ color, onChange }: Props): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=ColorSwatchSettings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColorSwatchSettings.d.ts","sourceRoot":"","sources":["../../../src/components/brandguide/ColorSwatchSettings.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,sBAAsB,CAAC;AAElE,UAAU,KAAK;IACb,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CACtC;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,KAAK,2CAyBrE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Input } from "../shared/Input";
|
|
3
|
+
export default function ColorSwatchSettings({ color, onChange }) {
|
|
4
|
+
const space = color.spaces[0] || {};
|
|
5
|
+
const updateSpace = (key, value) => {
|
|
6
|
+
const newSpace = { ...space, [key]: value || undefined };
|
|
7
|
+
onChange({ ...color, spaces: [newSpace, ...color.spaces.slice(1)] });
|
|
8
|
+
};
|
|
9
|
+
return (_jsxs("div", { className: "space-y-3", children: [_jsx(Input, { label: "Name", value: color.name || "", onChange: (value) => onChange({ ...color, name: value }) }), ["hex", "rgb", "cmyk", "pantone"].map((key) => (_jsx(Input, { label: key.toUpperCase(), value: space[key] || "", onChange: (value) => updateSpace(key, value) }, key)))] }));
|
|
10
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { ColorItem } from "../../schemas/shared";
|
|
3
|
+
import type { SectionContent } from "../../schemas/sections";
|
|
4
|
+
interface Props {
|
|
5
|
+
colors: ColorItem[];
|
|
6
|
+
columns?: number;
|
|
7
|
+
label?: string;
|
|
8
|
+
collapsing?: boolean;
|
|
9
|
+
showLabel?: boolean;
|
|
10
|
+
onChange?: (content: SectionContent) => void;
|
|
11
|
+
openModal?: (title: string, content: ReactNode) => void;
|
|
12
|
+
}
|
|
13
|
+
export default function Colors({ colors, columns, label, collapsing, showLabel, onChange, openModal }: Props): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=Colors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Colors.d.ts","sourceRoot":"","sources":["../../../src/components/brandguide/Colors.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,UAAU,KAAK;IACb,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC;CACzD;AAgCD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,MAAM,EAAE,OAAW,EAAE,KAAK,EAAE,UAAU,EAAE,SAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,2CAgBtH"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect } from "react";
|
|
3
|
+
import { Eye, EyeOff } from "lucide-react";
|
|
4
|
+
import { cn } from "../../lib/cn";
|
|
5
|
+
import { gridColsClass } from "../../lib/grid";
|
|
6
|
+
import { EditableGrid } from "../primitives/EditableGrid";
|
|
7
|
+
import { EditablePlainText } from "../primitives/EditablePlainText";
|
|
8
|
+
import ColorSwatchSettings from "./ColorSwatchSettings";
|
|
9
|
+
function getContrastClass(hex) {
|
|
10
|
+
if (!hex)
|
|
11
|
+
return "text-white";
|
|
12
|
+
const h = hex.replace("#", "");
|
|
13
|
+
if (h.length < 6)
|
|
14
|
+
return "text-white";
|
|
15
|
+
const r = parseInt(h.substring(0, 2), 16);
|
|
16
|
+
const g = parseInt(h.substring(2, 4), 16);
|
|
17
|
+
const b = parseInt(h.substring(4, 6), 16);
|
|
18
|
+
const yiq = (r * 299 + g * 587 + b * 114) / 1000;
|
|
19
|
+
return yiq >= 128 ? "text-black" : "text-white";
|
|
20
|
+
}
|
|
21
|
+
const createColorItem = () => ({
|
|
22
|
+
name: "",
|
|
23
|
+
spaces: [{ hex: "#cccccc" }],
|
|
24
|
+
});
|
|
25
|
+
function buildContent(colors, options) {
|
|
26
|
+
const { label, columns, collapsing, showLabel } = options;
|
|
27
|
+
return {
|
|
28
|
+
type: "colors",
|
|
29
|
+
content: { colors },
|
|
30
|
+
...(label || columns || collapsing !== undefined || showLabel !== undefined
|
|
31
|
+
? { options: { label, columns, collapsing, showLabel } }
|
|
32
|
+
: {}),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export default function Colors({ colors, columns = 3, label, collapsing, showLabel = true, onChange, openModal }) {
|
|
36
|
+
if (onChange && openModal) {
|
|
37
|
+
return (_jsx(ColorsEditable, { colors: colors, columns: columns, label: label, collapsing: collapsing, showLabel: showLabel, onChange: onChange, openModal: openModal }));
|
|
38
|
+
}
|
|
39
|
+
return _jsx(ColorsView, { colors: colors, columns: columns, label: label, collapsing: collapsing, showLabel: showLabel });
|
|
40
|
+
}
|
|
41
|
+
function ColorsView({ colors, columns, label, collapsing, showLabel, }) {
|
|
42
|
+
const [expanded, setExpanded] = useState(!collapsing);
|
|
43
|
+
const [copiedValue, setCopiedValue] = useState(null);
|
|
44
|
+
const handleCopy = (value) => {
|
|
45
|
+
navigator.clipboard.writeText(value);
|
|
46
|
+
setCopiedValue(value);
|
|
47
|
+
setTimeout(() => setCopiedValue(null), 1500);
|
|
48
|
+
};
|
|
49
|
+
return (_jsxs("div", { children: [(showLabel && !!label || collapsing) && (_jsxs("div", { className: "mb-4 flex items-center gap-2", children: [showLabel && !!label && (_jsx("span", { className: "text-lg font-bold", children: label })), collapsing && (_jsxs("button", { onClick: () => setExpanded(!expanded), className: "cursor-pointer ml-auto flex items-center gap-1.5 text-sm text-base-contrast-light hover:text-base-contrast", children: [_jsx("span", { children: expanded ? "Hide Details" : "Show Details" }), expanded ? _jsx(EyeOff, { size: 16 }) : _jsx(Eye, { size: 16 })] }))] })), _jsx("div", { className: cn("grid gap-4", gridColsClass[columns] || "grid-cols-3"), children: colors.map((color, i) => {
|
|
50
|
+
const hex = color.spaces[0]?.hex;
|
|
51
|
+
const contrast = getContrastClass(hex);
|
|
52
|
+
return (_jsxs("div", { className: "overflow-hidden rounded-md border border-base-200", children: [_jsx("div", { className: cn("flex min-h-[80px] items-end p-3", contrast), style: { backgroundColor: hex || "#ccc" }, children: color.name && _jsx("span", { className: "text-sm font-bold", children: color.name }) }), expanded && (_jsx("div", { className: "space-y-1 bg-base-accent p-3 text-sm", children: color.spaces.map((space, j) => Object.entries(space).map(([key, value]) => value ? (_jsxs("button", { onClick: () => handleCopy(value), className: "cursor-pointer flex w-full justify-between hover:text-primary", children: [_jsx("span", { className: "font-medium uppercase", children: key }), _jsx("span", { children: copiedValue === value ? "Copied!" : value })] }, `${j}-${key}`)) : null)) }))] }, i));
|
|
53
|
+
}) })] }));
|
|
54
|
+
}
|
|
55
|
+
function ColorsEditable({ colors, columns, label, collapsing, showLabel, onChange, openModal, }) {
|
|
56
|
+
const [expanded, setExpanded] = useState(!collapsing);
|
|
57
|
+
const options = { label, columns, collapsing, showLabel };
|
|
58
|
+
// Sync expanded state when collapsing option changes via settings
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
setExpanded(!collapsing);
|
|
61
|
+
}, [collapsing]);
|
|
62
|
+
const handleItemSettings = (index) => {
|
|
63
|
+
const color = colors[index];
|
|
64
|
+
openModal("Color Settings", _jsx(ColorSwatchSettings, { color: color, onChange: (updated) => {
|
|
65
|
+
const newColors = colors.map((c, i) => (i === index ? updated : c));
|
|
66
|
+
onChange(buildContent(newColors, options));
|
|
67
|
+
} }));
|
|
68
|
+
};
|
|
69
|
+
return (_jsxs("div", { children: [(showLabel && !!label || collapsing) && (_jsxs("div", { className: "mb-4 flex items-center gap-2", children: [showLabel && !!label && (_jsx(EditablePlainText, { tag: "span", value: label, onChange: (newLabel) => onChange(buildContent(colors, { ...options, label: newLabel })), isEditMode: true, className: "text-lg font-bold" })), collapsing && (_jsxs("button", { onClick: () => setExpanded(!expanded), className: "cursor-pointer ml-auto flex items-center gap-1.5 text-sm text-base-contrast-light hover:text-base-contrast", children: [_jsx("span", { children: expanded ? "Hide Details" : "Show Details" }), expanded ? _jsx(EyeOff, { size: 16 }) : _jsx(Eye, { size: 16 })] }))] })), _jsx(EditableGrid, { items: colors, columns: columns, onChange: (newColors) => onChange(buildContent(newColors, options)), createItem: createColorItem, isEditMode: true, onItemSettings: handleItemSettings, renderItem: (color, { index }) => (_jsx(ColorSwatchEditable, { color: color, index: index, colors: colors, options: options, onChange: onChange, expanded: expanded })) })] }));
|
|
70
|
+
}
|
|
71
|
+
function ColorSwatchEditable({ color, index, colors, options, onChange, expanded, }) {
|
|
72
|
+
const hex = color.spaces[0]?.hex;
|
|
73
|
+
const contrast = getContrastClass(hex);
|
|
74
|
+
const updateColor = (updated) => {
|
|
75
|
+
const newColors = colors.map((c, i) => (i === index ? updated : c));
|
|
76
|
+
onChange(buildContent(newColors, options));
|
|
77
|
+
};
|
|
78
|
+
return (_jsxs("div", { className: "overflow-hidden rounded-md border border-base-200", children: [_jsx("div", { className: cn("flex min-h-[80px] items-end p-3", contrast), style: { backgroundColor: hex || "#ccc" }, children: _jsx(EditablePlainText, { tag: "span", value: color.name || "", onChange: (name) => updateColor({ ...color, name }), isEditMode: true, placeholder: "Color name", className: "text-sm font-bold" }) }), expanded && (_jsx("div", { className: "space-y-1 bg-base-accent p-3 text-sm", children: color.spaces.map((space, j) => Object.entries(space).map(([key, value]) => value ? (_jsxs("div", { className: "flex w-full justify-between", children: [_jsx("span", { className: "font-medium uppercase", children: key }), _jsx("span", { children: value })] }, `${j}-${key}`)) : null)) }))] }));
|
|
79
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SectionContent } from "../../schemas/sections";
|
|
2
|
+
interface DoDontItem {
|
|
3
|
+
label: string;
|
|
4
|
+
text: string;
|
|
5
|
+
icon?: string;
|
|
6
|
+
}
|
|
7
|
+
interface Props {
|
|
8
|
+
doItems: DoDontItem[];
|
|
9
|
+
dontItems: DoDontItem[];
|
|
10
|
+
showLabel?: boolean;
|
|
11
|
+
stackText?: boolean;
|
|
12
|
+
onChange?: (content: SectionContent) => void;
|
|
13
|
+
}
|
|
14
|
+
export default function DoDontList({ doItems, dontItems, showLabel, stackText, onChange, }: Props): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=DoDontList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DoDontList.d.ts","sourceRoot":"","sources":["../../../src/components/brandguide/DoDontList.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,KAAK;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;CAC9C;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,OAAO,EACP,SAAS,EACT,SAAgB,EAChB,SAAiB,EACjB,QAAQ,GACT,EAAE,KAAK,2CA0CP"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useEffect } from "react";
|
|
3
|
+
import IconList from "../sections/IconList/IconList";
|
|
4
|
+
export default function DoDontList({ doItems, dontItems, showLabel = true, stackText = false, onChange, }) {
|
|
5
|
+
const doRef = useRef(doItems);
|
|
6
|
+
const dontRef = useRef(dontItems);
|
|
7
|
+
useEffect(() => { doRef.current = doItems; }, [doItems]);
|
|
8
|
+
useEffect(() => { dontRef.current = dontItems; }, [dontItems]);
|
|
9
|
+
return (_jsxs("div", { className: "grid gap-16 lg:grid-cols-2", children: [_jsx(IconList, { items: doItems, icon: "check", showLabel: showLabel, stackText: stackText, labelClassName: "font-bold text-base-contrast", textClassName: "text-base-contrast", iconClassName: "text-green-600", onItemsChange: onChange ? (items) => {
|
|
10
|
+
onChange({
|
|
11
|
+
type: "do_dont",
|
|
12
|
+
content: { doItems: items, dontItems: dontRef.current },
|
|
13
|
+
options: { showLabel, stackText },
|
|
14
|
+
});
|
|
15
|
+
} : undefined }), _jsx(IconList, { items: dontItems, icon: "x", showLabel: showLabel, stackText: stackText, labelClassName: "font-bold text-base-contrast", textClassName: "text-base-contrast", iconClassName: "text-red-600", onItemsChange: onChange ? (items) => {
|
|
16
|
+
onChange({
|
|
17
|
+
type: "do_dont",
|
|
18
|
+
content: { doItems: doRef.current, dontItems: items },
|
|
19
|
+
options: { showLabel, stackText },
|
|
20
|
+
});
|
|
21
|
+
} : undefined })] }));
|
|
22
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { MediaReference } from "../../schemas/shared";
|
|
3
|
+
import type { SectionContent } from "../../schemas/sections";
|
|
4
|
+
interface Props {
|
|
5
|
+
media: MediaReference[];
|
|
6
|
+
columns: number;
|
|
7
|
+
square?: boolean;
|
|
8
|
+
border?: boolean;
|
|
9
|
+
crop?: boolean;
|
|
10
|
+
showCaptions?: boolean;
|
|
11
|
+
onChange?: (content: SectionContent) => void;
|
|
12
|
+
openModal?: (title: string, content: ReactNode) => void;
|
|
13
|
+
}
|
|
14
|
+
export default function DoDontMediaGrid(props: Props): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=DoDontMediaGrid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DoDontMediaGrid.d.ts","sourceRoot":"","sources":["../../../src/components/brandguide/DoDontMediaGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,UAAU,KAAK;IACb,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC;CACzD;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,KAAK,EAAE,KAAK,2CAEnD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Audience } from "../../auth/types";
|
|
2
|
+
interface Props {
|
|
3
|
+
access: string[];
|
|
4
|
+
audiences: Audience[];
|
|
5
|
+
onChange: (access: string[]) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function AudiencePicker({ access, audiences, onChange }: Props): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=AudiencePicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudiencePicker.d.ts","sourceRoot":"","sources":["../../../src/components/editor/AudiencePicker.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,UAAU,KAAK;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACtC;AAED,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,KAAK,2CAyFpE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useState } from "react";
|
|
3
|
+
import { Check } from "lucide-react";
|
|
4
|
+
import { cn } from "../../lib/cn";
|
|
5
|
+
import { Popover } from "../shared/Popover";
|
|
6
|
+
import { PopoverItem } from "../shared/PopoverItem";
|
|
7
|
+
export function AudiencePicker({ access, audiences, onChange }) {
|
|
8
|
+
const [open, setOpen] = useState(false);
|
|
9
|
+
const buttonRef = useRef(null);
|
|
10
|
+
const selected = audiences.filter((a) => access.includes(a.name));
|
|
11
|
+
const visibleCircles = selected.slice(0, 3);
|
|
12
|
+
function toggle(name) {
|
|
13
|
+
const next = access.includes(name)
|
|
14
|
+
? access.filter((n) => n !== name)
|
|
15
|
+
: [...access, name];
|
|
16
|
+
onChange(next);
|
|
17
|
+
}
|
|
18
|
+
return (_jsxs("div", { className: "relative", children: [_jsxs("button", { ref: buttonRef, type: "button", onClick: () => setOpen((v) => !v), className: cn("cursor-pointer inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-xs font-medium", "border border-base-200 hover:bg-base-accent", selected.length === 0 && "text-base-contrast-light"), children: [selected.length === 0 && _jsx("span", { children: "No audience" }), selected.length >= 1 && (_jsx("span", { className: "flex -space-x-1.5", children: visibleCircles.map((a) => (_jsx("span", { className: "h-3 w-3 rounded-full border border-base", style: { backgroundColor: a.color ?? "#9ca3af" } }, a.name))) })), selected.length === 1 && _jsx("span", { children: selected[0].displayName }), selected.length >= 2 && _jsxs("span", { children: [selected.length, " audiences"] })] }), _jsx(Popover, { isOpen: open, onClose: () => setOpen(false), anchorRef: buttonRef, align: "end", className: "w-56", children: audiences.length === 0 ? (_jsx("div", { className: "px-3 py-2 text-xs text-base-contrast-light", children: "No audiences configured. Add audiences in Site Settings \u2192 Viewer Access." })) : (_jsx("ul", { role: "list", className: "py-1", children: audiences.map((a) => {
|
|
19
|
+
const checked = access.includes(a.name);
|
|
20
|
+
return (_jsx("li", { children: _jsxs(PopoverItem, { role: "checkbox", "aria-checked": checked, onClick: () => toggle(a.name), children: [_jsx("span", { "aria-hidden": "true", className: cn("flex h-5 w-5 shrink-0 items-center justify-center rounded border transition-colors", checked
|
|
21
|
+
? "border-primary bg-primary text-primary-contrast"
|
|
22
|
+
: "border-base-300 bg-base"), children: checked && _jsx(Check, { size: 14, strokeWidth: 3 }) }), _jsx("span", { className: "h-3 w-3 shrink-0 rounded-full border border-base-200", style: { backgroundColor: a.color ?? "#9ca3af" } }), _jsx("span", { className: "text-sm font-medium text-base-contrast", children: a.displayName })] }) }, a.name));
|
|
23
|
+
}) })) })] }));
|
|
24
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteButton.d.ts","sourceRoot":"","sources":["../../../src/components/editor/DeleteButton.tsx"],"names":[],"mappings":"AAGA,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAU3D"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { DeleteIcon } from "../shared/icons";
|
|
3
|
+
import { IconButton } from "../shared/IconButton";
|
|
4
|
+
export function DeleteButton({ onDelete }) {
|
|
5
|
+
return (_jsx(IconButton, { icon: _jsx(DeleteIcon, { size: 16 }), label: "Delete section", intent: "destructive", onClick: onDelete, className: "pointer-events-auto" }));
|
|
6
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DragHandle.d.ts","sourceRoot":"","sources":["../../../src/components/editor/DragHandle.tsx"],"names":[],"mappings":"AAKA,eAAO,MAAM,UAAU,6FAYrB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from "react";
|
|
3
|
+
import { DragHandle as DragHandleIcon } from "../shared/icons";
|
|
4
|
+
import { IconButton } from "../shared/IconButton";
|
|
5
|
+
import { Tooltip, Kbd } from "../shared/Tooltip";
|
|
6
|
+
export const DragHandle = forwardRef(function DragHandle(_, ref) {
|
|
7
|
+
return (_jsx(Tooltip, { content: _jsxs(_Fragment, { children: [_jsx(Kbd, { children: "Drag" }), " to move"] }), className: "-ml-[34px]", children: _jsx(IconButton, { ref: ref, icon: _jsx(DragHandleIcon, { size: 18 }), label: "Drag to reorder section", className: "pointer-events-auto cursor-grab active:cursor-grabbing rounded-md text-base-contrast-light/80 hover:bg-base-contrast-light/10 hover:text-base-contrast", tabIndex: -1 }) }));
|
|
8
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InsertButton.d.ts","sourceRoot":"","sources":["../../../src/components/editor/InsertButton.tsx"],"names":[],"mappings":"AAIA,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAYlE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { AddIcon } from "../shared/icons";
|
|
3
|
+
import { IconButton } from "../shared/IconButton";
|
|
4
|
+
import { Tooltip, Kbd } from "../shared/Tooltip";
|
|
5
|
+
export function InsertButton({ index, onInsert }) {
|
|
6
|
+
return (_jsx(Tooltip, { content: _jsxs(_Fragment, { children: [_jsx(Kbd, { children: "Click" }), " to add below", _jsx("br", {}), _jsx(Kbd, { children: "Alt+Click" }), " to add above"] }), children: _jsx(IconButton, { icon: _jsx(AddIcon, { size: 18 }), label: "Add section", className: "pointer-events-auto rounded-md text-base-contrast-light/80 hover:bg-base-contrast-light/10 hover:text-base-contrast", tabIndex: -1, onClick: (e) => onInsert(e.altKey ? index : index + 1) }) }));
|
|
7
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { WrapperProps } from "../../lib/registry";
|
|
2
|
+
export declare function SectionWrapper({ sectionId, sectionType, status, dirty, index, isLast, definition, options, audiences, access, onAccessChange, onStatusChange, onSectionChange, onReorder, onRequestInsert, onDelete, children, }: WrapperProps): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
//# sourceMappingURL=SectionWrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SectionWrapper.d.ts","sourceRoot":"","sources":["../../../src/components/editor/SectionWrapper.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,WAAW,EACX,MAAM,EACN,KAAK,EACL,KAAK,EACL,MAAM,EACN,UAAU,EACV,OAAO,EACP,SAAS,EACT,MAAM,EACN,cAAc,EACd,cAAc,EACd,eAAe,EACf,SAAS,EACT,eAAe,EACf,QAAQ,EACR,QAAQ,GACT,EAAE,YAAY,2CA6Od"}
|