@orion-studios/payload-studio 0.5.0-beta.111 → 0.5.0-beta.113

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 CHANGED
@@ -1,22 +1,67 @@
1
1
  # @orion-studios/payload-studio
2
2
 
3
- Unified Payload CMS toolkit for Orion Studios projects.
3
+ `payload-studio` is the base package for Orion's XO-style websites. It defines the supported contract for:
4
4
 
5
- ## Editor Scope
5
+ - Payload admin customization
6
+ - Studio builder primitives
7
+ - block schema and document compilation
8
+ - Next.js query helpers
9
+ - shared media and social/global helpers
6
10
 
7
- `payload-studio` now treats block authoring as content-first by default.
11
+ ## Canonical Guide
8
12
 
9
- - Generic block-level Layout and Style controls are hidden in the CMS and Studio builder.
10
- - Internal layout/style fields still remain in the schema for compile compatibility with existing pages.
11
- - Editors should focus on content, media, typography, and a small set of block-specific variants.
13
+ Start here for any new project:
12
14
 
13
- ## Install
15
+ - [Studio Website Setup Guide](./docs/studio-website-setup-guide.md)
16
+
17
+ ## Stable Import Pattern
18
+
19
+ Prefer explicit subpath imports.
20
+
21
+ ```ts
22
+ import { configureAdmin, type StudioSection } from '@orion-studios/payload-studio/admin'
23
+ import { createPayloadClient, createPageQueries, createSiteQueries } from '@orion-studios/payload-studio/nextjs'
24
+ import { defaultPageLayoutBlocks } from '@orion-studios/payload-studio/blocks'
25
+ import { pageStudioModuleManifest } from '@orion-studios/payload-studio/studio-pages'
26
+ import { withImageUploadOptimization } from '@orion-studios/payload-studio/studio'
27
+ ```
28
+
29
+ The root `@orion-studios/payload-studio` namespace export remains available for backward compatibility, but new integrations should treat subpath imports as the public contract.
30
+
31
+ ## Quick Start
14
32
 
15
33
  ```bash
16
34
  npm install @orion-studios/payload-studio
17
35
  ```
18
36
 
19
- ## Subpath Exports
37
+ ```ts
38
+ import { configureAdmin } from '@orion-studios/payload-studio/admin'
39
+
40
+ const adminConfig = configureAdmin({
41
+ brandName: 'Client Name',
42
+ brandPrimary: '#243654',
43
+ brandSecondary: '#b56f4d',
44
+ defaultTheme: 'brand-light',
45
+ logoUrl: '/branding/logo.svg',
46
+ studio: {
47
+ forms: {
48
+ enabled: true,
49
+ collectionSlug: 'forms',
50
+ submissionsCollectionSlug: 'form-submissions',
51
+ uploadsCollectionSlug: 'form-uploads',
52
+ },
53
+ globals: [
54
+ { slug: 'site-settings', label: 'Website Settings' },
55
+ { slug: 'header', label: 'Header & Navigation' },
56
+ { slug: 'footer', label: 'Footer' },
57
+ { slug: 'social-media', label: 'Social Media' },
58
+ { slug: 'contact-form', label: 'Contact Form' },
59
+ ],
60
+ },
61
+ })
62
+ ```
63
+
64
+ ## Key Exports
20
65
 
21
66
  - `@orion-studios/payload-studio/admin`
22
67
  - `@orion-studios/payload-studio/admin/client`
@@ -31,80 +76,17 @@ npm install @orion-studios/payload-studio
31
76
  - `@orion-studios/payload-studio/studio-pages/client`
32
77
  - `@orion-studios/payload-studio/studio-pages/builder.css`
33
78
 
34
- ## Quick Usage
35
-
36
- ```ts
37
- import { configureAdmin } from '@orion-studios/payload-studio/admin'
38
- import { defaultPageLayoutBlocks } from '@orion-studios/payload-studio/blocks'
39
- import { createPayloadClient, createPageQueries } from '@orion-studios/payload-studio/nextjs'
40
- import { createStudioRegistry } from '@orion-studios/payload-studio/studio'
41
- import { pageStudioModuleManifest } from '@orion-studios/payload-studio/studio-pages'
42
- ```
43
-
44
- ```ts
45
- import { withImageUploadOptimization } from '@orion-studios/payload-studio/studio'
46
-
47
- // In your Media collection:
48
- // export const Media = withImageUploadOptimization({
49
- // slug: 'media',
50
- // upload: { ... },
51
- // fields: [...],
52
- // })
53
- ```
54
-
55
- ```ts
56
- import { BuilderPageEditor } from '@orion-studios/payload-studio/studio-pages/client'
57
- import '@orion-studios/payload-studio/studio-pages/builder.css'
58
- ```
59
-
60
- ```ts
61
- import { AdminPage } from '@orion-studios/payload-studio/admin-app'
62
- import { AdminShellClient } from '@orion-studios/payload-studio/admin-app/client'
63
- import '@orion-studios/payload-studio/admin-app/styles.css'
64
- ```
65
-
66
- ## Social Media Global
79
+ ## Add-on Integration
67
80
 
68
- ```ts
69
- import { createSocialMediaGlobal } from '@orion-studios/payload-studio/admin'
70
-
71
- export const globals = [
72
- createSocialMediaGlobal(),
73
- ]
74
- ```
75
-
76
- `createSocialMediaGlobal` creates a `social-media` global with:
77
-
78
- - Major platforms (Facebook, Instagram, X, LinkedIn, YouTube, TikTok, Pinterest, Snapchat)
79
- - URL field for each platform
80
- - Four icon choices per platform (`Simple Icons`, `Font Awesome Brands`, `Tabler Brands`, `Remix Icons`)
81
-
82
- You can fetch and normalize these links in Next.js:
83
-
84
- ```ts
85
- import { createSiteQueries, resolveSocialMediaLinks } from '@orion-studios/payload-studio/nextjs'
86
-
87
- const { getSocialMedia } = createSiteQueries(getPayloadClient)
88
- const social = await getSocialMedia()
89
- const links = resolveSocialMediaLinks(social)
90
- ```
81
+ `StudioSection` from `@orion-studios/payload-studio/admin` is the official contract for optional add-ons such as analytics and SEO.
91
82
 
92
83
  ## Build
93
84
 
94
85
  ```bash
95
- npm install
96
86
  npm run build
87
+ npm run test
97
88
  ```
98
89
 
99
- ## Upload Optimization Hook
100
-
101
- `withImageUploadOptimization` and `createImageUploadOptimizationHook` compress raster uploads
102
- before Payload writes files and before cloud storage adapters upload them.
103
-
104
- - Preserves pixel dimensions (no resize)
105
- - Optimizes JPEG / PNG / WebP / AVIF / TIFF
106
- - Runs in a collection `beforeOperation` hook
107
-
108
90
  ## License
109
91
 
110
92
  MIT © Orion Studios
@@ -50,16 +50,6 @@ var resolveBuilderThemeTokens = (layers) => {
50
50
  return merge(withPage, layers.block);
51
51
  };
52
52
 
53
- // src/studio-pages/builder/settings-v2/BlockInspectorRenderer.tsx
54
- import { useMemo, useState as useState2 } from "react";
55
-
56
- // src/studio-pages/builder/ui/Accordion.tsx
57
- import { useEffect, useState } from "react";
58
- import { jsx, jsxs } from "react/jsx-runtime";
59
-
60
- // src/studio-pages/builder/ui/ImageControls.tsx
61
- import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
62
-
63
53
  // src/studio-pages/builder/settings-v2/inspectorSchema.ts
64
54
  var alignOptions = [
65
55
  { label: "Left", value: "left" },
@@ -410,9 +400,6 @@ var inspectorDefinitionByBlockType = {
410
400
  }
411
401
  };
412
402
 
413
- // src/studio-pages/builder/settings-v2/BlockInspectorRenderer.tsx
414
- import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
415
-
416
403
  // src/studio-pages/migrations.ts
417
404
  var isRecord2 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
418
405
  var assertPageStudioDocumentV1 = (value) => {
package/dist/index.js CHANGED
@@ -3851,16 +3851,6 @@ var resolveBuilderThemeTokens = (layers) => {
3851
3851
  return merge(withPage, layers.block);
3852
3852
  };
3853
3853
 
3854
- // src/studio-pages/builder/settings-v2/BlockInspectorRenderer.tsx
3855
- var import_react2 = require("react");
3856
-
3857
- // src/studio-pages/builder/ui/Accordion.tsx
3858
- var import_react = require("react");
3859
- var import_jsx_runtime4 = require("react/jsx-runtime");
3860
-
3861
- // src/studio-pages/builder/ui/ImageControls.tsx
3862
- var import_jsx_runtime5 = require("react/jsx-runtime");
3863
-
3864
3854
  // src/studio-pages/builder/settings-v2/inspectorSchema.ts
3865
3855
  var alignOptions = [
3866
3856
  { label: "Left", value: "left" },
@@ -4211,9 +4201,6 @@ var inspectorDefinitionByBlockType = {
4211
4201
  }
4212
4202
  };
4213
4203
 
4214
- // src/studio-pages/builder/settings-v2/BlockInspectorRenderer.tsx
4215
- var import_jsx_runtime6 = require("react/jsx-runtime");
4216
-
4217
4204
  // src/studio-pages/migrations.ts
4218
4205
  var isRecord5 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
4219
4206
  var assertPageStudioDocumentV1 = (value) => {
package/dist/index.mjs CHANGED
@@ -16,7 +16,7 @@ import {
16
16
  } from "./chunk-ADIIWIYL.mjs";
17
17
  import {
18
18
  studio_pages_exports
19
- } from "./chunk-GKMBYYXF.mjs";
19
+ } from "./chunk-3T2P6SDM.mjs";
20
20
  import "./chunk-OQSEJXC4.mjs";
21
21
  import "./chunk-PF3EBZXF.mjs";
22
22
  import "./chunk-6BWS3CLP.mjs";
@@ -45,21 +45,6 @@ function createPayloadClient(config) {
45
45
  // src/nextjs/queries/pages.ts
46
46
  var import_cache = require("next/cache");
47
47
 
48
- // src/studio/imageUploadOptimization.ts
49
- var import_promises = require("fs/promises");
50
- var DEFAULT_OPTIONS = {
51
- avifQuality: 50,
52
- enforceSmallerForLossy: true,
53
- jpegQuality: 78,
54
- minBytes: 48 * 1024,
55
- minQualityFloor: 42,
56
- onlyIfSmaller: true,
57
- pngCompressionLevel: 9,
58
- skipAnimated: true,
59
- tiffQuality: 75,
60
- webpQuality: 78
61
- };
62
-
63
48
  // src/studio/index.ts
64
49
  var isRecord = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
65
50
  function assertStudioDocumentV1(input) {
@@ -354,16 +354,6 @@ var resolveBuilderThemeTokens = (layers) => {
354
354
  return merge(withPage, layers.block);
355
355
  };
356
356
 
357
- // src/studio-pages/builder/settings-v2/BlockInspectorRenderer.tsx
358
- var import_react2 = require("react");
359
-
360
- // src/studio-pages/builder/ui/Accordion.tsx
361
- var import_react = require("react");
362
- var import_jsx_runtime = require("react/jsx-runtime");
363
-
364
- // src/studio-pages/builder/ui/ImageControls.tsx
365
- var import_jsx_runtime2 = require("react/jsx-runtime");
366
-
367
357
  // src/studio-pages/builder/settings-v2/inspectorSchema.ts
368
358
  var alignOptions = [
369
359
  { label: "Left", value: "left" },
@@ -714,9 +704,6 @@ var inspectorDefinitionByBlockType = {
714
704
  }
715
705
  };
716
706
 
717
- // src/studio-pages/builder/settings-v2/BlockInspectorRenderer.tsx
718
- var import_jsx_runtime3 = require("react/jsx-runtime");
719
-
720
707
  // src/studio-pages/document.ts
721
708
  var ensureNodeID = (value, index) => {
722
709
  if (typeof value === "string" && value.trim().length > 0) {
@@ -4,7 +4,7 @@ import {
4
4
  pagePaletteGroups,
5
5
  pageStudioModuleManifest,
6
6
  resolveBuilderThemeTokens
7
- } from "../chunk-GKMBYYXF.mjs";
7
+ } from "../chunk-3T2P6SDM.mjs";
8
8
  import "../chunk-OQSEJXC4.mjs";
9
9
  import {
10
10
  createDefaultStudioDocument,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@orion-studios/payload-studio",
3
- "version": "0.5.0-beta.111",
4
- "description": "Unified Payload CMS toolkit for Orion Studios",
3
+ "version": "0.5.0-beta.113",
4
+ "description": "Base CMS, builder, and custom admin toolkit for Orion Studios websites",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.mjs",
@@ -75,9 +75,9 @@
75
75
  "dist"
76
76
  ],
77
77
  "scripts": {
78
- "build": "tsup && node -e \"const fs=require('fs'); fs.copyFileSync('src/admin/styles/admin.css','dist/admin.css'); fs.mkdirSync('dist/admin-app',{recursive:true}); fs.copyFileSync('src/admin-app/styles/admin-app.css','dist/admin-app/styles.css'); fs.mkdirSync('dist/studio-pages',{recursive:true}); fs.copyFileSync('src/studio-pages/styles/builder.css','dist/studio-pages/builder.css'); fs.mkdirSync('dist/admin',{recursive:true}); fs.copyFileSync('src/admin/client.d.ts','dist/admin/client.d.ts'); fs.copyFileSync('src/admin/client.d.ts','dist/admin/client.d.mts'); fs.copyFileSync('src/admin-app/client.d.ts','dist/admin-app/client.d.ts'); fs.copyFileSync('src/admin-app/client.d.ts','dist/admin-app/client.d.mts'); fs.copyFileSync('src/studio-pages/client.d.ts','dist/studio-pages/client.d.ts'); fs.copyFileSync('src/studio-pages/client.d.ts','dist/studio-pages/client.d.mts')\"",
78
+ "build": "tsup && node scripts/copy-assets.mjs",
79
79
  "dev": "tsup --watch",
80
- "test": "tsx --test src/studio-pages/builder/settings-v2/__tests__/*.test.ts src/studio-pages/__tests__/*.test.ts",
80
+ "test": "tsx --test src/shared/__tests__/*.test.ts src/studio-pages/builder/settings-v2/__tests__/*.test.ts src/studio-pages/__tests__/*.test.ts",
81
81
  "typecheck": "tsc --noEmit"
82
82
  },
83
83
  "overrides": {
@@ -98,6 +98,11 @@
98
98
  ],
99
99
  "author": "Orion Studios",
100
100
  "license": "MIT",
101
+ "sideEffects": [
102
+ "./dist/admin.css",
103
+ "./dist/admin-app/styles.css",
104
+ "./dist/studio-pages/builder.css"
105
+ ],
101
106
  "peerDependencies": {
102
107
  "@payloadcms/richtext-lexical": "^3.0.0",
103
108
  "@payloadcms/ui": "^3.0.0",
@@ -109,6 +114,7 @@
109
114
  "devDependencies": {
110
115
  "@payloadcms/richtext-lexical": "3.75.0",
111
116
  "@payloadcms/ui": "3.75.0",
117
+ "@types/node": "^22.0.0",
112
118
  "@types/react": "^19.0.0",
113
119
  "@types/react-dom": "^19.0.0",
114
120
  "next": "16.2.0",