@morphika/andami 0.5.1 → 0.5.3

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 (147) hide show
  1. package/README.md +27 -2
  2. package/app/admin/assets/page.tsx +6 -6
  3. package/app/admin/database/page.tsx +302 -302
  4. package/app/admin/error.tsx +53 -53
  5. package/app/admin/layout.tsx +332 -320
  6. package/app/admin/navigation/page.tsx +255 -255
  7. package/app/admin/pages/[slug]/page.tsx +44 -27
  8. package/app/admin/pages/page.tsx +24 -19
  9. package/app/admin/projects/page.tsx +30 -21
  10. package/app/admin/setup/page.tsx +1 -1
  11. package/app/admin/styles/page.tsx +1 -1
  12. package/app/api/admin/assets/register/route.ts +51 -14
  13. package/app/api/admin/assets/registry/route.ts +4 -1
  14. package/app/api/admin/assets/relink/confirm/route.ts +4 -1
  15. package/app/api/admin/assets/relink/route.ts +4 -1
  16. package/app/api/admin/assets/scan/route.ts +4 -1
  17. package/app/api/admin/backups/restore-data/route.ts +4 -1
  18. package/app/api/admin/r2/connect/route.ts +4 -1
  19. package/app/api/admin/r2/delete/route.ts +4 -1
  20. package/app/api/admin/r2/rename/route.ts +4 -1
  21. package/app/api/admin/r2/upload-url/route.ts +4 -1
  22. package/app/api/admin/revalidate/route.ts +4 -1
  23. package/app/api/admin/storage/switch/route.ts +4 -1
  24. package/app/api/custom-sections/[id]/route.ts +5 -6
  25. package/components/admin/MetadataEditor.tsx +6 -6
  26. package/components/admin/PublishToggle.tsx +2 -2
  27. package/components/admin/nav-builder/NavBuilder.tsx +1 -1
  28. package/components/admin/nav-builder/NavBuilderGrid.tsx +3 -3
  29. package/components/admin/nav-builder/NavGridCell.tsx +48 -48
  30. package/components/admin/nav-builder/NavGridItem.tsx +8 -6
  31. package/components/admin/nav-builder/NavItemSettings.tsx +331 -331
  32. package/components/admin/nav-builder/NavItemTypePicker.tsx +102 -102
  33. package/components/admin/nav-builder/NavLivePreview.tsx +1 -1
  34. package/components/admin/nav-builder/NavMobileLivePreview.tsx +226 -226
  35. package/components/admin/nav-builder/NavMobileSettings.tsx +242 -242
  36. package/components/admin/nav-builder/NavSettingsFields.tsx +518 -514
  37. package/components/admin/setup-wizard/BrandingStep.tsx +3 -3
  38. package/components/admin/setup-wizard/DatabaseStep.tsx +2 -2
  39. package/components/admin/setup-wizard/DoneStep.tsx +1 -1
  40. package/components/admin/setup-wizard/SetupWizard.tsx +4 -4
  41. package/components/admin/setup-wizard/StorageStep.tsx +2 -2
  42. package/components/admin/setup-wizard/WelcomeStep.tsx +2 -2
  43. package/components/admin/styles/ColorsEditor.tsx +9 -8
  44. package/components/admin/styles/FontsEditor.tsx +9 -7
  45. package/components/admin/styles/GridLayoutEditor.tsx +9 -9
  46. package/components/admin/styles/LinksButtonsEditor.tsx +5 -5
  47. package/components/admin/styles/TypographyEditor.tsx +6 -6
  48. package/components/admin/styles/shared.tsx +68 -68
  49. package/components/blocks/AudioBlockRenderer.tsx +286 -286
  50. package/components/blocks/CoverSectionRenderer.tsx +7 -1
  51. package/components/blocks/MarqueeBlockRenderer.tsx +316 -0
  52. package/components/blocks/ProjectCarouselBlockRenderer.tsx +1 -1
  53. package/components/blocks/SectionV2Renderer.tsx +8 -1
  54. package/components/builder/BlockCardIcons.tsx +316 -316
  55. package/components/builder/BlockTypePicker.tsx +1 -1
  56. package/components/builder/BubbleIcons.tsx +104 -0
  57. package/components/builder/BuilderCanvas.tsx +2 -0
  58. package/components/builder/CanvasMinimap.tsx +66 -49
  59. package/components/builder/CanvasToolbar.tsx +31 -41
  60. package/components/builder/CoverSectionCanvas.tsx +363 -363
  61. package/components/builder/DeviceFrame.tsx +1 -1
  62. package/components/builder/DndWrapper.tsx +3 -3
  63. package/components/builder/InsertionLines.tsx +1 -1
  64. package/components/builder/SectionCardIcons.tsx +421 -320
  65. package/components/builder/SectionEditorBar.tsx +5 -3
  66. package/components/builder/SectionTypePicker.tsx +7 -5
  67. package/components/builder/SectionV2Canvas.tsx +1 -1
  68. package/components/builder/SectionV2Column.tsx +82 -68
  69. package/components/builder/SettingsPanel.tsx +21 -17
  70. package/components/builder/SortableBlock.tsx +93 -73
  71. package/components/builder/SortableRow.tsx +33 -35
  72. package/components/builder/VirtualAssetGrid.tsx +10 -4
  73. package/components/builder/asset-browser/R2BrowserContent.tsx +18 -14
  74. package/components/builder/blockStyles.tsx +192 -185
  75. package/components/builder/color-picker/AlphaSlider.tsx +141 -141
  76. package/components/builder/color-picker/ColorInputs.tsx +105 -105
  77. package/components/builder/color-picker/EyedropperButton.tsx +75 -74
  78. package/components/builder/color-picker/HueSlider.tsx +124 -124
  79. package/components/builder/color-picker/SaturationCanvas.tsx +142 -142
  80. package/components/builder/color-picker/SwatchBar.tsx +98 -93
  81. package/components/builder/color-picker/UnifiedColorPicker.tsx +11 -6
  82. package/components/builder/editors/AudioBlockEditor.tsx +242 -242
  83. package/components/builder/editors/BeforeAfterBlockEditor.tsx +360 -360
  84. package/components/builder/editors/ButtonBlockEditor.tsx +4 -4
  85. package/components/builder/editors/EnterAnimationPicker.tsx +2 -2
  86. package/components/builder/editors/HoverEffectPicker.tsx +2 -2
  87. package/components/builder/editors/ImageBlockEditor.tsx +2 -2
  88. package/components/builder/editors/ImageGridBlockEditor.tsx +8 -6
  89. package/components/builder/editors/MarqueeBlockEditor.tsx +622 -0
  90. package/components/builder/editors/ProjectCarouselBlockEditor.tsx +443 -443
  91. package/components/builder/editors/ProjectGridEditor.tsx +21 -16
  92. package/components/builder/editors/SpacerBlockEditor.tsx +29 -27
  93. package/components/builder/editors/StaggerSettings.tsx +109 -109
  94. package/components/builder/editors/TextBlockEditor.tsx +22 -17
  95. package/components/builder/editors/TextStylePicker.tsx +1 -1
  96. package/components/builder/editors/VideoBlockEditor.tsx +2 -2
  97. package/components/builder/editors/index.ts +11 -10
  98. package/components/builder/editors/shared.tsx +10 -8
  99. package/components/builder/live-preview/LiveAudioPreview.tsx +120 -120
  100. package/components/builder/live-preview/LiveBeforeAfterPreview.tsx +1 -1
  101. package/components/builder/live-preview/LiveImageGridPreview.tsx +10 -2
  102. package/components/builder/live-preview/LiveImagePreview.tsx +4 -2
  103. package/components/builder/live-preview/LiveMarqueePreview.tsx +39 -0
  104. package/components/builder/live-preview/LiveProjectCarouselPreview.tsx +1 -1
  105. package/components/builder/live-preview/LiveVideoPreview.tsx +1 -1
  106. package/components/builder/live-preview/ProjectCardWrapper.tsx +293 -291
  107. package/components/builder/live-preview/RichTextBubbleMenu.tsx +10 -6
  108. package/components/builder/live-preview/shared.tsx +5 -2
  109. package/components/builder/settings-panel/AnimationTab.tsx +138 -138
  110. package/components/builder/settings-panel/BlockLayoutTab.tsx +11 -9
  111. package/components/builder/settings-panel/CardEntranceSection.tsx +114 -114
  112. package/components/builder/settings-panel/ColumnV2LayoutTab.tsx +242 -0
  113. package/components/builder/settings-panel/ColumnV2Settings.tsx +5 -5
  114. package/components/builder/settings-panel/CoverSectionLayoutTab.tsx +71 -71
  115. package/components/builder/settings-panel/CoverSectionSettings.tsx +337 -335
  116. package/components/builder/settings-panel/PageSettings.tsx +3 -3
  117. package/components/builder/settings-panel/ParallaxSlideSettings.tsx +2 -2
  118. package/components/builder/settings-panel/SectionV2AnimationTab.tsx +4 -4
  119. package/components/builder/settings-panel/SectionV2LayoutTab.tsx +356 -356
  120. package/components/builder/settings-panel/SectionV2Settings.tsx +25 -20
  121. package/components/builder/settings-panel/TRBLInputs.tsx +1 -1
  122. package/components/builder/settings-panel/index.ts +1 -0
  123. package/lib/animation/enter-types.ts +1 -0
  124. package/lib/animation/hover-effect-presets.ts +210 -210
  125. package/lib/animation/hover-effect-types.ts +1 -0
  126. package/lib/builder/block-registrations.ts +468 -417
  127. package/lib/builder/constants.ts +111 -111
  128. package/lib/builder/serializer/normalizers.ts +14 -0
  129. package/lib/builder/serializer/serializers.ts +27 -0
  130. package/lib/builder/store-sections.ts +23 -2
  131. package/lib/builder/types-slices.ts +428 -414
  132. package/lib/builder/types.ts +4 -1
  133. package/lib/config/index.ts +27 -27
  134. package/lib/sanity/queries.ts +48 -0
  135. package/lib/sanity/types.ts +112 -1
  136. package/lib/version.ts +1 -1
  137. package/package.json +7 -5
  138. package/sanity/schemas/blocks/audioBlock.ts +69 -69
  139. package/sanity/schemas/blocks/index.ts +12 -11
  140. package/sanity/schemas/blocks/marqueeBlock.ts +292 -0
  141. package/sanity/schemas/index.ts +120 -117
  142. package/sanity/schemas/objects/coverSection.ts +32 -0
  143. package/sanity/schemas/objects/parallaxSlide.ts +32 -0
  144. package/sanity/schemas/pageSectionV2.ts +32 -0
  145. package/styles/admin.css +85 -85
  146. package/styles/animations.css +237 -237
  147. package/styles/base.css +114 -114
@@ -1,93 +1,98 @@
1
- "use client";
2
-
3
- /**
4
- * SwatchBar — User palette swatches + common neutral colors.
5
- *
6
- * Integrated inside the color picker modal. Shows:
7
- * - "Your Palette" row with user swatches + an "add to palette" button
8
- * - "Common" row with standard neutrals (white → black)
9
- */
10
-
11
- import { useCallback } from "react";
12
- import type { SwatchBarProps } from "./types";
13
-
14
- // Common neutral colors always available
15
- const COMMON_COLORS = [
16
- "#ffffff",
17
- "#f5f5f5",
18
- "#e5e5e5",
19
- "#a3a3a3",
20
- "#525252",
21
- "#262626",
22
- "#171717",
23
- "#000000",
24
- ];
25
-
26
- export default function SwatchBar({
27
- value,
28
- onSelect,
29
- swatches = [],
30
- }: SwatchBarProps) {
31
- const handleSwatchClick = useCallback(
32
- (hex: string) => {
33
- onSelect(hex);
34
- },
35
- [onSelect]
36
- );
37
-
38
- return (
39
- <div className="border-t border-neutral-200 pt-4">
40
- {/* User palette */}
41
- {swatches.length > 0 && (
42
- <div className="mb-3">
43
- <div className="flex items-center justify-between mb-2">
44
- <span className="text-[10px] text-neutral-400 uppercase tracking-widest">
45
- Your Palette
46
- </span>
47
- </div>
48
- <div className="flex flex-wrap gap-1.5">
49
- {swatches.map((s, i) => (
50
- <button
51
- key={s._key || `swatch-${i}`}
52
- type="button"
53
- onClick={() => handleSwatchClick(s.hex)}
54
- title={`${s.name}: ${s.hex}`}
55
- className={`w-8 h-8 rounded-lg cursor-pointer transition-all ${
56
- value.toLowerCase() === s.hex.toLowerCase()
57
- ? "ring-2 ring-[#076bff] ring-offset-1 ring-offset-white"
58
- : "border border-neutral-200 hover:border-neutral-400 hover:scale-110"
59
- }`}
60
- style={{ background: s.hex }}
61
- />
62
- ))}
63
- </div>
64
- </div>
65
- )}
66
-
67
- {/* Common colors */}
68
- <div>
69
- {swatches.length > 0 && (
70
- <span className="text-[10px] text-neutral-400 uppercase tracking-widest block mb-2">
71
- Common
72
- </span>
73
- )}
74
- <div className="flex gap-1">
75
- {COMMON_COLORS.map((c) => (
76
- <button
77
- key={c}
78
- type="button"
79
- onClick={() => handleSwatchClick(c)}
80
- title={c.toUpperCase()}
81
- className={`w-6 h-6 rounded-md cursor-pointer transition-all ${
82
- value.toLowerCase() === c
83
- ? "ring-2 ring-[#076bff] ring-offset-1 ring-offset-white"
84
- : "border border-neutral-200 hover:border-neutral-400 hover:scale-110"
85
- }`}
86
- style={{ background: c }}
87
- />
88
- ))}
89
- </div>
90
- </div>
91
- </div>
92
- );
93
- }
1
+ "use client";
2
+
3
+ /**
4
+ * SwatchBar — User palette swatches + common neutral colors.
5
+ *
6
+ * Integrated inside the color picker modal. Shows:
7
+ * - "Your Palette" row with user swatches + an "add to palette" button
8
+ * - "Common" row with standard neutrals (white → black)
9
+ */
10
+
11
+ import { useCallback } from "react";
12
+ import type { SwatchBarProps } from "./types";
13
+ import { BubbleTooltip } from "../BubbleIcons";
14
+
15
+ // Common neutral colors always available
16
+ const COMMON_COLORS = [
17
+ "#ffffff",
18
+ "#f5f5f5",
19
+ "#e5e5e5",
20
+ "#a3a3a3",
21
+ "#525252",
22
+ "#262626",
23
+ "#171717",
24
+ "#000000",
25
+ ];
26
+
27
+ export default function SwatchBar({
28
+ value,
29
+ onSelect,
30
+ swatches = [],
31
+ }: SwatchBarProps) {
32
+ const handleSwatchClick = useCallback(
33
+ (hex: string) => {
34
+ onSelect(hex);
35
+ },
36
+ [onSelect]
37
+ );
38
+
39
+ return (
40
+ <div className="border-t border-neutral-200 pt-4">
41
+ {/* User palette */}
42
+ {swatches.length > 0 && (
43
+ <div className="mb-3">
44
+ <div className="flex items-center justify-between mb-2">
45
+ <span className="text-[10px] text-neutral-400 uppercase tracking-widest">
46
+ Your Palette
47
+ </span>
48
+ </div>
49
+ <div className="flex flex-wrap gap-1.5">
50
+ {swatches.map((s, i) => (
51
+ <button
52
+ key={s._key || `swatch-${i}`}
53
+ type="button"
54
+ onClick={() => handleSwatchClick(s.hex)}
55
+ aria-label={`${s.name}: ${s.hex}`}
56
+ className={`group/bb relative w-8 h-8 rounded-lg cursor-pointer transition-all ${
57
+ value.toLowerCase() === s.hex.toLowerCase()
58
+ ? "ring-2 ring-[#3580f9] ring-offset-1 ring-offset-white"
59
+ : "border border-neutral-200 hover:border-neutral-400 hover:scale-110"
60
+ }`}
61
+ style={{ background: s.hex }}
62
+ >
63
+ <BubbleTooltip>{`${s.name}: ${s.hex}`}</BubbleTooltip>
64
+ </button>
65
+ ))}
66
+ </div>
67
+ </div>
68
+ )}
69
+
70
+ {/* Common colors */}
71
+ <div>
72
+ {swatches.length > 0 && (
73
+ <span className="text-[10px] text-neutral-400 uppercase tracking-widest block mb-2">
74
+ Common
75
+ </span>
76
+ )}
77
+ <div className="flex gap-1">
78
+ {COMMON_COLORS.map((c) => (
79
+ <button
80
+ key={c}
81
+ type="button"
82
+ onClick={() => handleSwatchClick(c)}
83
+ aria-label={c.toUpperCase()}
84
+ className={`group/bb relative w-6 h-6 rounded-md cursor-pointer transition-all ${
85
+ value.toLowerCase() === c
86
+ ? "ring-2 ring-[#3580f9] ring-offset-1 ring-offset-white"
87
+ : "border border-neutral-200 hover:border-neutral-400 hover:scale-110"
88
+ }`}
89
+ style={{ background: c }}
90
+ >
91
+ <BubbleTooltip>{c.toUpperCase()}</BubbleTooltip>
92
+ </button>
93
+ ))}
94
+ </div>
95
+ </div>
96
+ </div>
97
+ );
98
+ }
@@ -45,6 +45,7 @@ import {
45
45
  import { getPresetsForCategory } from "../../../lib/builder/gradient-presets";
46
46
  import type { GradientPresetInfo } from "../../../lib/builder/gradient-presets";
47
47
  import type { ColorSwatch } from "../../../lib/sanity/types";
48
+ import { BubbleTooltip } from "../BubbleIcons";
48
49
 
49
50
  type GradientTab = "solid" | "linear" | "radial" | "mesh";
50
51
 
@@ -554,11 +555,13 @@ export default function UnifiedColorPicker({
554
555
  <button
555
556
  key={preset.id}
556
557
  type="button"
557
- title={preset.label}
558
+ aria-label={preset.label}
558
559
  onClick={() => handlePresetSelect(preset)}
559
- className="w-8 h-8 rounded-lg border border-neutral-200 hover:border-neutral-400 transition-colors cursor-pointer shrink-0"
560
+ className="group/bb relative w-8 h-8 rounded-lg border border-neutral-200 hover:border-neutral-400 transition-colors cursor-pointer shrink-0"
560
561
  style={{ backgroundImage: colorToCSS(preset.template) }}
561
- />
562
+ >
563
+ <BubbleTooltip>{preset.label}</BubbleTooltip>
564
+ </button>
562
565
  ))}
563
566
  </div>
564
567
  )}
@@ -678,11 +681,13 @@ export default function UnifiedColorPicker({
678
681
  <button
679
682
  key={preset.id}
680
683
  type="button"
681
- title={preset.label}
684
+ aria-label={preset.label}
682
685
  onClick={() => handlePresetSelect(preset)}
683
- className="w-8 h-8 rounded-lg border border-neutral-200 hover:border-neutral-400 transition-colors cursor-pointer shrink-0"
686
+ className="group/bb relative w-8 h-8 rounded-lg border border-neutral-200 hover:border-neutral-400 transition-colors cursor-pointer shrink-0"
684
687
  style={{ backgroundImage: colorToCSS(preset.template) }}
685
- />
688
+ >
689
+ <BubbleTooltip>{preset.label}</BubbleTooltip>
690
+ </button>
686
691
  ))}
687
692
  </div>
688
693
  )}