@morphika/andami 0.1.3 → 0.1.6
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/app/(site)/[slug]/page.tsx +7 -4
- package/app/(site)/layout.tsx +5 -2
- package/app/(site)/page.tsx +2 -2
- package/app/(site)/preview/page.tsx +4 -4
- package/app/(site)/work/[slug]/page.tsx +7 -4
- package/app/admin/layout.tsx +3 -2
- package/app/admin/login/page.tsx +5 -5
- package/app/admin/navigation/page.tsx +255 -157
- package/app/api/admin/assets/health/route.ts +1 -1
- package/app/api/admin/assets/register/route.ts +1 -1
- package/app/api/admin/assets/registry/route.ts +1 -1
- package/app/api/admin/assets/relink/confirm/route.ts +2 -2
- package/app/api/admin/assets/relink/route.ts +1 -1
- package/app/api/admin/assets/scan/route.ts +1 -1
- package/app/api/admin/custom-sections/[slug]/route.ts +1 -1
- package/app/api/admin/custom-sections/route.ts +1 -1
- package/app/api/admin/database/route.ts +1 -1
- package/app/api/admin/pages/[slug]/duplicate/route.ts +1 -1
- package/app/api/admin/pages/[slug]/route.ts +2 -2
- package/app/api/admin/pages/[slug]/set-home/route.ts +1 -1
- package/app/api/admin/pages/route.ts +1 -1
- package/app/api/admin/preview/route.ts +1 -1
- package/app/api/admin/r2/delete/route.ts +1 -1
- package/app/api/admin/r2/rename/route.ts +1 -1
- package/app/api/admin/r2/status/route.ts +1 -1
- package/app/api/admin/r2/upload-url/route.ts +1 -1
- package/app/api/admin/settings/route.ts +41 -16
- package/app/api/admin/setup/complete/route.ts +2 -2
- package/app/api/admin/setup/route.ts +7 -4
- package/app/api/admin/storage/switch/route.ts +1 -1
- package/app/api/admin/styles/route.ts +1 -1
- package/components/admin/index.ts +7 -0
- package/components/admin/nav-builder/NavGeneralSettings.tsx +11 -15
- package/components/admin/nav-builder/NavItemSettings.tsx +29 -5
- package/components/admin/nav-builder/NavLivePreview.tsx +4 -1
- package/components/admin/nav-builder/NavMobileLivePreview.tsx +226 -0
- package/components/admin/nav-builder/NavMobileSettings.tsx +223 -0
- package/components/admin/nav-builder/index.ts +2 -0
- package/components/blocks/BlockRenderer.tsx +65 -13
- package/components/blocks/ButtonBlockRenderer.tsx +29 -6
- package/components/blocks/CoverBlockRenderer.tsx +36 -14
- package/components/blocks/ImageBlockRenderer.tsx +5 -3
- package/components/blocks/ImageGridBlockRenderer.tsx +13 -6
- package/components/blocks/PageRenderer.tsx +4 -2
- package/components/blocks/ProjectGridBlockRenderer.tsx +18 -3
- package/components/blocks/SectionRenderer.tsx +9 -8
- package/components/blocks/SectionV2Renderer.tsx +8 -8
- package/components/blocks/SpacerBlockRenderer.tsx +4 -2
- package/components/blocks/TextBlockRenderer.tsx +9 -4
- package/components/builder/BuilderCanvas.tsx +10 -4
- package/components/builder/ColorPicker.tsx +51 -243
- package/components/builder/ColorSwatchPicker.tsx +214 -274
- package/components/builder/DndWrapper.tsx +5 -2
- package/components/builder/SectionV2Canvas.tsx +15 -4
- package/components/builder/asset-browser/useAssetBrowser.ts +9 -1
- package/components/builder/color-picker/AlphaSlider.tsx +141 -0
- package/components/builder/color-picker/AngleControl.tsx +138 -0
- package/components/builder/color-picker/ColorInputs.tsx +105 -0
- package/components/builder/color-picker/EyedropperButton.tsx +74 -0
- package/components/builder/color-picker/GradientBar.tsx +222 -0
- package/components/builder/color-picker/GradientPreview.tsx +53 -0
- package/components/builder/color-picker/HueSlider.tsx +124 -0
- package/components/builder/color-picker/MeshCanvas.tsx +172 -0
- package/components/builder/color-picker/MeshPointEditor.tsx +133 -0
- package/components/builder/color-picker/MeshPointList.tsx +200 -0
- package/components/builder/color-picker/PositionControl.tsx +158 -0
- package/components/builder/color-picker/SaturationCanvas.tsx +142 -0
- package/components/builder/color-picker/StopEditor.tsx +178 -0
- package/components/builder/color-picker/SwatchBar.tsx +93 -0
- package/components/builder/color-picker/UnifiedColorPicker.tsx +713 -0
- package/components/builder/color-picker/index.ts +62 -0
- package/components/builder/color-picker/types.ts +115 -0
- package/components/builder/color-picker/utils.ts +138 -0
- package/components/builder/editors/CoverBlockEditor.tsx +86 -32
- package/components/builder/editors/ProjectGridEditor.tsx +51 -4
- package/components/builder/hooks/useColumnDrag.ts +25 -27
- package/components/builder/settings-panel/BlockLayoutTab.tsx +29 -7
- package/components/builder/settings-panel/LayoutTab.tsx +382 -310
- package/components/builder/settings-panel/PageSettings.tsx +6 -4
- package/components/builder/settings-panel/ParallaxSlideSettings.tsx +2 -2
- package/components/builder/settings-panel/SectionV2LayoutTab.tsx +392 -312
- package/components/builder/settings-panel/SectionV2Settings.tsx +65 -35
- package/components/ui/Navbar.tsx +97 -25
- package/components/ui/PortfolioTracker.tsx +3 -3
- package/lib/assets.ts +1 -1
- package/lib/auth.ts +1 -1
- package/lib/builder/gradient-presets.ts +128 -0
- package/lib/builder/layout-styles.ts +16 -10
- package/lib/builder/serializer.ts +1 -0
- package/lib/builder/store-blocks.ts +48 -61
- package/lib/builder/store-helpers.ts +31 -14
- package/lib/builder/store.ts +59 -41
- package/lib/builder/types.ts +14 -0
- package/lib/color-utils.ts +200 -0
- package/lib/revalidate.ts +2 -2
- package/lib/sanity/client.ts +16 -0
- package/lib/sanity/queries.ts +4 -3
- package/lib/sanity/types.ts +76 -1
- package/lib/setup/detect.ts +1 -1
- package/lib/storage/index.ts +22 -4
- package/lib/version.ts +6 -0
- package/package.json +8 -2
- package/sanity/schemas/siteSettings.ts +34 -0
- package/styles/base.css +3 -3
- package/app/globals.css +0 -7
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
AssetPathInput,
|
|
23
23
|
} from "../editors/shared";
|
|
24
24
|
import ColorSwatchPicker, { usePaletteSwatches } from "../ColorSwatchPicker";
|
|
25
|
+
import { serializeColorField, parseColorField, isGradient } from "../../../lib/color-utils";
|
|
25
26
|
import { TRBLInputs } from "./TRBLInputs";
|
|
26
27
|
import {
|
|
27
28
|
getBlockLayoutValue,
|
|
@@ -236,6 +237,14 @@ export function BlockLayoutTab({ block }: { block: ContentBlock }) {
|
|
|
236
237
|
const paletteSwatches = usePaletteSwatches();
|
|
237
238
|
const activeViewport = store.activeViewport;
|
|
238
239
|
|
|
240
|
+
// Live preview callbacks (Phase 4)
|
|
241
|
+
const handleBgPreview = (val: import("../../../lib/sanity/types").ColorField) => {
|
|
242
|
+
store.setColorPickerPreview({ blockKey: block._key, field: "background_color", value: val });
|
|
243
|
+
};
|
|
244
|
+
const handleBorderPreview = (val: import("../../../lib/sanity/types").ColorField) => {
|
|
245
|
+
store.setColorPickerPreview({ blockKey: block._key, field: "border_color", value: val });
|
|
246
|
+
};
|
|
247
|
+
|
|
239
248
|
/** Update a block layout property, viewport-aware */
|
|
240
249
|
const updateLayout = (property: keyof BlockLayout, value: unknown) => {
|
|
241
250
|
const updates = setBlockLayoutOverride(block, activeViewport, property, value);
|
|
@@ -257,6 +266,7 @@ export function BlockLayoutTab({ block }: { block: ContentBlock }) {
|
|
|
257
266
|
|
|
258
267
|
// Effective values per viewport
|
|
259
268
|
const bgOpacity = getBlockLayoutValue<number>(block, activeViewport, "background_opacity", 100);
|
|
269
|
+
const bgIsGradient = isGradient(parseColorField(getBlockLayoutValue<string>(block, activeViewport, "background_color", "")));
|
|
260
270
|
const alignH: AlignH = getBlockLayoutValue<string>(block, activeViewport, "align_h", "left") as AlignH;
|
|
261
271
|
const alignV: AlignV = getBlockLayoutValue<string>(block, activeViewport, "align_v", "top") as AlignV;
|
|
262
272
|
|
|
@@ -360,12 +370,15 @@ export function BlockLayoutTab({ block }: { block: ContentBlock }) {
|
|
|
360
370
|
<SettingsSection title="Background" defaultOpen icon={<BackgroundSectionIcon />}>
|
|
361
371
|
<SettingsField label="Color">
|
|
362
372
|
<ColorSwatchPicker
|
|
363
|
-
value={getBlockLayoutValue<string>(block, activeViewport, "background_color", "")}
|
|
364
|
-
onChange={(
|
|
373
|
+
value={parseColorField(getBlockLayoutValue<string>(block, activeViewport, "background_color", ""))}
|
|
374
|
+
onChange={(val) => {
|
|
365
375
|
store._pushSnapshot();
|
|
366
|
-
|
|
376
|
+
store.clearColorPickerPreview();
|
|
377
|
+
updateLayout("background_color", serializeColorField(val));
|
|
367
378
|
}}
|
|
368
379
|
swatches={paletteSwatches}
|
|
380
|
+
allowGradients
|
|
381
|
+
onPreview={handleBgPreview}
|
|
369
382
|
/>
|
|
370
383
|
</SettingsField>
|
|
371
384
|
|
|
@@ -377,12 +390,18 @@ export function BlockLayoutTab({ block }: { block: ContentBlock }) {
|
|
|
377
390
|
max={100}
|
|
378
391
|
value={bgOpacity}
|
|
379
392
|
onChange={(e) => updateLayout("background_opacity", parseInt(e.target.value))}
|
|
380
|
-
className=
|
|
393
|
+
className={`flex-1 accent-[#076bff] ${bgIsGradient ? "opacity-40 pointer-events-none" : ""}`}
|
|
394
|
+
disabled={bgIsGradient}
|
|
381
395
|
/>
|
|
382
396
|
<span className="text-xs text-neutral-900 w-10 text-right">
|
|
383
397
|
{bgOpacity}%
|
|
384
398
|
</span>
|
|
385
399
|
</div>
|
|
400
|
+
{bgIsGradient && (
|
|
401
|
+
<p className="text-[9px] text-neutral-400 italic mt-1">
|
|
402
|
+
Opacity is controlled per stop in gradient mode
|
|
403
|
+
</p>
|
|
404
|
+
)}
|
|
386
405
|
</SettingsField>
|
|
387
406
|
|
|
388
407
|
<SettingsField label="Image">
|
|
@@ -450,12 +469,15 @@ export function BlockLayoutTab({ block }: { block: ContentBlock }) {
|
|
|
450
469
|
<SettingsSection title="Border" icon={<BorderSectionIcon />}>
|
|
451
470
|
<SettingsField label="Color">
|
|
452
471
|
<ColorSwatchPicker
|
|
453
|
-
value={getBlockLayoutValue<string>(block, activeViewport, "border_color", "")}
|
|
454
|
-
onChange={(
|
|
472
|
+
value={parseColorField(getBlockLayoutValue<string>(block, activeViewport, "border_color", ""))}
|
|
473
|
+
onChange={(val) => {
|
|
455
474
|
store._pushSnapshot();
|
|
456
|
-
|
|
475
|
+
store.clearColorPickerPreview();
|
|
476
|
+
updateLayout("border_color", serializeColorField(val));
|
|
457
477
|
}}
|
|
458
478
|
swatches={paletteSwatches}
|
|
479
|
+
allowGradients
|
|
480
|
+
onPreview={handleBorderPreview}
|
|
459
481
|
/>
|
|
460
482
|
</SettingsField>
|
|
461
483
|
|