@nuasite/cms 0.24.0 → 0.25.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/dist/editor.js CHANGED
@@ -381,7 +381,7 @@ function CS(t, e) {
381
381
  function ES(t, e) {
382
382
  return typeof e == "function" ? e(t) : e;
383
383
  }
384
- const J_ = "0.24.0", j_ = J_, ct = {
384
+ const J_ = "0.25.0", j_ = J_, ct = {
385
385
  /** Highlight overlay for hovered elements */
386
386
  HIGHLIGHT: 2147483644,
387
387
  /** Hover outline for elements/components */
@@ -1731,17 +1731,17 @@ function pf(t) {
1731
1731
  function Ar() {
1732
1732
  pn.value = US();
1733
1733
  }
1734
- function eO(t) {
1734
+ function e5(t) {
1735
1735
  fn.value = {
1736
1736
  ...U0(),
1737
1737
  isOpen: !0,
1738
1738
  targetPage: t
1739
1739
  };
1740
1740
  }
1741
- function tO(t) {
1741
+ function t5(t) {
1742
1742
  fn.value = { ...fn.value, redirectTo: t };
1743
1743
  }
1744
- function rO(t) {
1744
+ function r5(t) {
1745
1745
  fn.value = { ...fn.value, createRedirect: t };
1746
1746
  }
1747
1747
  function T1(t) {
@@ -1750,10 +1750,10 @@ function T1(t) {
1750
1750
  function Zu() {
1751
1751
  fn.value = U0();
1752
1752
  }
1753
- function nO() {
1753
+ function n5() {
1754
1754
  ns.value = { ...q0(), isOpen: !0, isLoading: !0 };
1755
1755
  }
1756
- function iO(t) {
1756
+ function i5(t) {
1757
1757
  ns.value = { ...ns.value, rules: t, isLoading: !1 };
1758
1758
  }
1759
1759
  function ff(t) {
@@ -1793,7 +1793,7 @@ async function fC(t, e, r, n) {
1793
1793
  collectionDefinition: n
1794
1794
  };
1795
1795
  }
1796
- function sO(t, e) {
1796
+ function s5(t, e) {
1797
1797
  du.value = G0(), ao.value = {
1798
1798
  isOpen: !0,
1799
1799
  targetElementId: t,
@@ -1803,7 +1803,7 @@ function sO(t, e) {
1803
1803
  function lb() {
1804
1804
  ao.value = W0();
1805
1805
  }
1806
- function oO(t) {
1806
+ function o5(t) {
1807
1807
  return new Promise((e) => {
1808
1808
  Sp.value = {
1809
1809
  isOpen: !0,
@@ -1824,19 +1824,19 @@ function oO(t) {
1824
1824
  function I1() {
1825
1825
  Sp.value = WS();
1826
1826
  }
1827
- function aO() {
1827
+ function a5() {
1828
1828
  Vs.value = { ...Vs.value, showEditableHighlights: !Vs.value.showEditableHighlights };
1829
1829
  }
1830
- function lO(t) {
1830
+ function l5(t) {
1831
1831
  Vs.value = { ...Vs.value, ...t };
1832
1832
  }
1833
- function cO() {
1833
+ function c5() {
1834
1834
  rb.value = { isOpen: !0 };
1835
1835
  }
1836
1836
  function vd() {
1837
1837
  rb.value = GS();
1838
1838
  }
1839
- function uO(t, e) {
1839
+ function u5(t, e) {
1840
1840
  if (ao.value = W0(), !Xr.value.has(t)) {
1841
1841
  const r = _e.value.entries[t];
1842
1842
  if (r?.attributes && Object.keys(r.attributes).length > 0) {
@@ -1869,17 +1869,17 @@ function we(t, e = "info") {
1869
1869
  const r = `toast-${++M3}`;
1870
1870
  return Mc.value = [...Mc.value, { id: r, message: t, type: e }], r;
1871
1871
  }
1872
- function hO(t) {
1872
+ function h5(t) {
1873
1873
  Mc.value = Mc.value.filter((e) => e.id !== t);
1874
1874
  }
1875
- function dO(t) {
1875
+ function d5(t) {
1876
1876
  rt.value = t;
1877
1877
  }
1878
- function pO(t) {
1878
+ function p5(t) {
1879
1879
  const e = rt.value.features;
1880
1880
  e?.selectElement !== t?.selectElement && (rt.value = { ...rt.value, features: { ...e, ...t } });
1881
1881
  }
1882
- function fO() {
1882
+ function f5() {
1883
1883
  const t = $3.value;
1884
1884
  if (t.length === 0) return;
1885
1885
  const e = (C1.value + 1) % t.length;
@@ -1903,7 +1903,7 @@ function cb(t) {
1903
1903
  console.warn("[CMS] Failed to save edits to storage:", r);
1904
1904
  }
1905
1905
  }
1906
- function mO() {
1906
+ function m5() {
1907
1907
  try {
1908
1908
  const t = sessionStorage.getItem(mt.PENDING_EDITS);
1909
1909
  return t ? JSON.parse(t) : {};
@@ -1911,7 +1911,7 @@ function mO() {
1911
1911
  return console.warn("[CMS] Failed to load edits from storage:", t), {};
1912
1912
  }
1913
1913
  }
1914
- function gO() {
1914
+ function g5() {
1915
1915
  try {
1916
1916
  sessionStorage.removeItem(mt.PENDING_EDITS);
1917
1917
  } catch (t) {
@@ -1935,7 +1935,7 @@ function ub(t) {
1935
1935
  console.warn("[CMS] Failed to save image edits to storage:", r);
1936
1936
  }
1937
1937
  }
1938
- function bO() {
1938
+ function b5() {
1939
1939
  try {
1940
1940
  const t = sessionStorage.getItem(mt.PENDING_IMAGE_EDITS);
1941
1941
  return t ? JSON.parse(t) : {};
@@ -1943,7 +1943,7 @@ function bO() {
1943
1943
  return console.warn("[CMS] Failed to load image edits from storage:", t), {};
1944
1944
  }
1945
1945
  }
1946
- function xO() {
1946
+ function x5() {
1947
1947
  try {
1948
1948
  sessionStorage.removeItem(mt.PENDING_IMAGE_EDITS);
1949
1949
  } catch (t) {
@@ -1964,7 +1964,7 @@ function hb(t) {
1964
1964
  console.warn("[CMS] Failed to save color edits to storage:", r);
1965
1965
  }
1966
1966
  }
1967
- function yO() {
1967
+ function y5() {
1968
1968
  try {
1969
1969
  const t = sessionStorage.getItem(mt.PENDING_COLOR_EDITS);
1970
1970
  return t ? JSON.parse(t) : {};
@@ -1972,7 +1972,7 @@ function yO() {
1972
1972
  return console.warn("[CMS] Failed to load color edits from storage:", t), {};
1973
1973
  }
1974
1974
  }
1975
- function wO() {
1975
+ function w5() {
1976
1976
  try {
1977
1977
  sessionStorage.removeItem(mt.PENDING_COLOR_EDITS);
1978
1978
  } catch (t) {
@@ -1993,7 +1993,7 @@ function db(t) {
1993
1993
  console.warn("[CMS] Failed to save attribute edits to storage:", r);
1994
1994
  }
1995
1995
  }
1996
- function vO() {
1996
+ function v5() {
1997
1997
  try {
1998
1998
  const t = sessionStorage.getItem(mt.PENDING_ATTRIBUTE_EDITS);
1999
1999
  return t ? JSON.parse(t) : {};
@@ -2001,7 +2001,7 @@ function vO() {
2001
2001
  return console.warn("[CMS] Failed to load attribute edits from storage:", t), {};
2002
2002
  }
2003
2003
  }
2004
- function kO() {
2004
+ function k5() {
2005
2005
  try {
2006
2006
  sessionStorage.removeItem(mt.PENDING_ATTRIBUTE_EDITS);
2007
2007
  } catch (t) {
@@ -2028,7 +2028,7 @@ function pb(t) {
2028
2028
  console.warn("[CMS] Failed to save bg image edits to storage:", r);
2029
2029
  }
2030
2030
  }
2031
- function SO() {
2031
+ function S5() {
2032
2032
  try {
2033
2033
  const t = sessionStorage.getItem(mt.PENDING_BG_IMAGE_EDITS);
2034
2034
  return t ? JSON.parse(t) : {};
@@ -2036,21 +2036,21 @@ function SO() {
2036
2036
  return console.warn("[CMS] Failed to load bg image edits from storage:", t), {};
2037
2037
  }
2038
2038
  }
2039
- function CO() {
2039
+ function C5() {
2040
2040
  try {
2041
2041
  sessionStorage.removeItem(mt.PENDING_BG_IMAGE_EDITS);
2042
2042
  } catch (t) {
2043
2043
  console.warn("[CMS] Failed to clear bg image edits from storage:", t);
2044
2044
  }
2045
2045
  }
2046
- function EO(t) {
2046
+ function E5(t) {
2047
2047
  try {
2048
2048
  localStorage.setItem(mt.SETTINGS, JSON.stringify(t));
2049
2049
  } catch (e) {
2050
2050
  console.warn("[CMS] Failed to save settings to storage:", e);
2051
2051
  }
2052
2052
  }
2053
- function TO() {
2053
+ function T5() {
2054
2054
  try {
2055
2055
  const t = localStorage.getItem(mt.SETTINGS);
2056
2056
  return t ? JSON.parse(t) : null;
@@ -2058,14 +2058,14 @@ function TO() {
2058
2058
  return console.warn("[CMS] Failed to load settings from storage:", t), null;
2059
2059
  }
2060
2060
  }
2061
- function AO(t) {
2061
+ function A5(t) {
2062
2062
  try {
2063
2063
  sessionStorage.setItem(mt.PENDING_ENTRY_NAVIGATION, JSON.stringify(t));
2064
2064
  } catch (e) {
2065
2065
  console.warn("[CMS] Failed to save pending entry navigation:", e);
2066
2066
  }
2067
2067
  }
2068
- function NO() {
2068
+ function N5() {
2069
2069
  try {
2070
2070
  const t = sessionStorage.getItem(mt.PENDING_ENTRY_NAVIGATION);
2071
2071
  if (!t) return !1;
@@ -2075,7 +2075,7 @@ function NO() {
2075
2075
  return !1;
2076
2076
  }
2077
2077
  }
2078
- function IO() {
2078
+ function I5() {
2079
2079
  try {
2080
2080
  const t = sessionStorage.getItem(mt.PENDING_ENTRY_NAVIGATION);
2081
2081
  if (!t) return null;
@@ -2092,7 +2092,7 @@ function mC(t) {
2092
2092
  console.warn("[CMS] Failed to save editing state:", e);
2093
2093
  }
2094
2094
  }
2095
- function MO() {
2095
+ function M5() {
2096
2096
  try {
2097
2097
  return sessionStorage.getItem(mt.IS_EDITING) === "1";
2098
2098
  } catch {
@@ -2100,7 +2100,7 @@ function MO() {
2100
2100
  }
2101
2101
  }
2102
2102
  function gC() {
2103
- gO(), xO(), wO(), kO(), CO();
2103
+ g5(), x5(), w5(), k5(), C5();
2104
2104
  }
2105
2105
  function bC(t) {
2106
2106
  var e, r, n = "";
@@ -2111,40 +2111,40 @@ function bC(t) {
2111
2111
  } else for (r in t) t[r] && (n && (n += " "), n += r);
2112
2112
  return n;
2113
2113
  }
2114
- function _O() {
2114
+ function _5() {
2115
2115
  for (var t, e, r = 0, n = "", i = arguments.length; r < i; r++) (t = arguments[r]) && (e = bC(t)) && (n && (n += " "), n += e);
2116
2116
  return n;
2117
2117
  }
2118
- const OO = (t, e) => {
2118
+ const O5 = (t, e) => {
2119
2119
  const r = new Array(t.length + e.length);
2120
2120
  for (let n = 0; n < t.length; n++)
2121
2121
  r[n] = t[n];
2122
2122
  for (let n = 0; n < e.length; n++)
2123
2123
  r[t.length + n] = e[n];
2124
2124
  return r;
2125
- }, RO = (t, e) => ({
2125
+ }, R5 = (t, e) => ({
2126
2126
  classGroupId: t,
2127
2127
  validator: e
2128
2128
  }), xC = (t = /* @__PURE__ */ new Map(), e = null, r) => ({
2129
2129
  nextPart: t,
2130
2130
  validators: e,
2131
2131
  classGroupId: r
2132
- }), kd = "-", M1 = [], DO = "arbitrary..", PO = (t) => {
2133
- const e = BO(t), {
2132
+ }), kd = "-", M1 = [], D5 = "arbitrary..", P5 = (t) => {
2133
+ const e = B5(t), {
2134
2134
  conflictingClassGroups: r,
2135
2135
  conflictingClassGroupModifiers: n
2136
2136
  } = t;
2137
2137
  return {
2138
2138
  getClassGroupId: (o) => {
2139
2139
  if (o.startsWith("[") && o.endsWith("]"))
2140
- return LO(o);
2140
+ return L5(o);
2141
2141
  const a = o.split(kd), l = a[0] === "" && a.length > 1 ? 1 : 0;
2142
2142
  return yC(a, l, e);
2143
2143
  },
2144
2144
  getConflictingClassGroupIds: (o, a) => {
2145
2145
  if (a) {
2146
2146
  const l = n[o], c = r[o];
2147
- return l ? c ? OO(c, l) : l : c || M1;
2147
+ return l ? c ? O5(c, l) : l : c || M1;
2148
2148
  }
2149
2149
  return r[o] || M1;
2150
2150
  }
@@ -2166,16 +2166,16 @@ const OO = (t, e) => {
2166
2166
  if (u.validator(a))
2167
2167
  return u.classGroupId;
2168
2168
  }
2169
- }, LO = (t) => t.slice(1, -1).indexOf(":") === -1 ? void 0 : (() => {
2169
+ }, L5 = (t) => t.slice(1, -1).indexOf(":") === -1 ? void 0 : (() => {
2170
2170
  const e = t.slice(1, -1), r = e.indexOf(":"), n = e.slice(0, r);
2171
- return n ? DO + n : void 0;
2172
- })(), BO = (t) => {
2171
+ return n ? D5 + n : void 0;
2172
+ })(), B5 = (t) => {
2173
2173
  const {
2174
2174
  theme: e,
2175
2175
  classGroups: r
2176
2176
  } = t;
2177
- return FO(r, e);
2178
- }, FO = (t, e) => {
2177
+ return F5(r, e);
2178
+ }, F5 = (t, e) => {
2179
2179
  const r = xC();
2180
2180
  for (const n in t) {
2181
2181
  const i = t[n];
@@ -2186,28 +2186,28 @@ const OO = (t, e) => {
2186
2186
  const i = t.length;
2187
2187
  for (let s = 0; s < i; s++) {
2188
2188
  const o = t[s];
2189
- $O(o, e, r, n);
2189
+ $5(o, e, r, n);
2190
2190
  }
2191
- }, $O = (t, e, r, n) => {
2191
+ }, $5 = (t, e, r, n) => {
2192
2192
  if (typeof t == "string") {
2193
- zO(t, e, r);
2193
+ z5(t, e, r);
2194
2194
  return;
2195
2195
  }
2196
2196
  if (typeof t == "function") {
2197
- VO(t, e, r, n);
2197
+ V5(t, e, r, n);
2198
2198
  return;
2199
2199
  }
2200
- HO(t, e, r, n);
2201
- }, zO = (t, e, r) => {
2200
+ H5(t, e, r, n);
2201
+ }, z5 = (t, e, r) => {
2202
2202
  const n = t === "" ? e : wC(e, t);
2203
2203
  n.classGroupId = r;
2204
- }, VO = (t, e, r, n) => {
2205
- if (JO(t)) {
2204
+ }, V5 = (t, e, r, n) => {
2205
+ if (J5(t)) {
2206
2206
  fb(t(n), e, r, n);
2207
2207
  return;
2208
2208
  }
2209
- e.validators === null && (e.validators = []), e.validators.push(RO(r, t));
2210
- }, HO = (t, e, r, n) => {
2209
+ e.validators === null && (e.validators = []), e.validators.push(R5(r, t));
2210
+ }, H5 = (t, e, r, n) => {
2211
2211
  const i = Object.entries(t), s = i.length;
2212
2212
  for (let o = 0; o < s; o++) {
2213
2213
  const [a, l] = i[o];
@@ -2222,7 +2222,7 @@ const OO = (t, e) => {
2222
2222
  a || (a = xC(), r.nextPart.set(o, a)), r = a;
2223
2223
  }
2224
2224
  return r;
2225
- }, JO = (t) => "isThemeGetter" in t && t.isThemeGetter === !0, jO = (t) => {
2225
+ }, J5 = (t) => "isThemeGetter" in t && t.isThemeGetter === !0, j5 = (t) => {
2226
2226
  if (t < 1)
2227
2227
  return {
2228
2228
  get: () => {
@@ -2246,13 +2246,13 @@ const OO = (t, e) => {
2246
2246
  s in r ? r[s] = o : i(s, o);
2247
2247
  }
2248
2248
  };
2249
- }, Xm = "!", _1 = ":", UO = [], O1 = (t, e, r, n, i) => ({
2249
+ }, Xm = "!", _1 = ":", U5 = [], O1 = (t, e, r, n, i) => ({
2250
2250
  modifiers: t,
2251
2251
  hasImportantModifier: e,
2252
2252
  baseClassName: r,
2253
2253
  maybePostfixModifierPosition: n,
2254
2254
  isExternal: i
2255
- }), qO = (t) => {
2255
+ }), q5 = (t) => {
2256
2256
  const {
2257
2257
  prefix: e,
2258
2258
  experimentalParseClassName: r
@@ -2289,7 +2289,7 @@ const OO = (t, e) => {
2289
2289
  };
2290
2290
  if (e) {
2291
2291
  const i = e + _1, s = n;
2292
- n = (o) => o.startsWith(i) ? s(o.slice(i.length)) : O1(UO, !1, o, void 0, !0);
2292
+ n = (o) => o.startsWith(i) ? s(o.slice(i.length)) : O1(U5, !1, o, void 0, !0);
2293
2293
  }
2294
2294
  if (r) {
2295
2295
  const i = n;
@@ -2299,7 +2299,7 @@ const OO = (t, e) => {
2299
2299
  });
2300
2300
  }
2301
2301
  return n;
2302
- }, WO = (t) => {
2302
+ }, W5 = (t) => {
2303
2303
  const e = /* @__PURE__ */ new Map();
2304
2304
  return t.orderSensitiveModifiers.forEach((r, n) => {
2305
2305
  e.set(r, 1e6 + n);
@@ -2312,18 +2312,18 @@ const OO = (t, e) => {
2312
2312
  }
2313
2313
  return i.length > 0 && (i.sort(), n.push(...i)), n;
2314
2314
  };
2315
- }, GO = (t) => ({
2316
- cache: jO(t.cacheSize),
2317
- parseClassName: qO(t),
2318
- sortModifiers: WO(t),
2319
- ...PO(t)
2320
- }), KO = /\s+/, XO = (t, e) => {
2315
+ }, G5 = (t) => ({
2316
+ cache: j5(t.cacheSize),
2317
+ parseClassName: q5(t),
2318
+ sortModifiers: W5(t),
2319
+ ...P5(t)
2320
+ }), K5 = /\s+/, X5 = (t, e) => {
2321
2321
  const {
2322
2322
  parseClassName: r,
2323
2323
  getClassGroupId: n,
2324
2324
  getConflictingClassGroupIds: i,
2325
2325
  sortModifiers: s
2326
- } = e, o = [], a = t.trim().split(KO);
2326
+ } = e, o = [], a = t.trim().split(K5);
2327
2327
  let l = "";
2328
2328
  for (let c = a.length - 1; c >= 0; c -= 1) {
2329
2329
  const u = a[c], {
@@ -2361,7 +2361,7 @@ const OO = (t, e) => {
2361
2361
  l = u + (l.length > 0 ? " " + l : l);
2362
2362
  }
2363
2363
  return l;
2364
- }, YO = (...t) => {
2364
+ }, Y5 = (...t) => {
2365
2365
  let e = 0, r, n, i = "";
2366
2366
  for (; e < t.length; )
2367
2367
  (r = t[e++]) && (n = vC(r)) && (i && (i += " "), i += n);
@@ -2373,34 +2373,34 @@ const OO = (t, e) => {
2373
2373
  for (let n = 0; n < t.length; n++)
2374
2374
  t[n] && (e = vC(t[n])) && (r && (r += " "), r += e);
2375
2375
  return r;
2376
- }, QO = (t, ...e) => {
2376
+ }, Q5 = (t, ...e) => {
2377
2377
  let r, n, i, s;
2378
2378
  const o = (l) => {
2379
2379
  const c = e.reduce((u, d) => d(u), t());
2380
- return r = GO(c), n = r.cache.get, i = r.cache.set, s = a, a(l);
2380
+ return r = G5(c), n = r.cache.get, i = r.cache.set, s = a, a(l);
2381
2381
  }, a = (l) => {
2382
2382
  const c = n(l);
2383
2383
  if (c)
2384
2384
  return c;
2385
- const u = XO(l, r);
2385
+ const u = X5(l, r);
2386
2386
  return i(l, u), u;
2387
2387
  };
2388
- return s = o, (...l) => s(YO(...l));
2389
- }, ZO = [], Ct = (t) => {
2390
- const e = (r) => r[t] || ZO;
2388
+ return s = o, (...l) => s(Y5(...l));
2389
+ }, Z5 = [], Ct = (t) => {
2390
+ const e = (r) => r[t] || Z5;
2391
2391
  return e.isThemeGetter = !0, e;
2392
- }, kC = /^\[(?:(\w[\w-]*):)?(.+)\]$/i, SC = /^\((?:(\w[\w-]*):)?(.+)\)$/i, e5 = /^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/, t5 = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/, r5 = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/, n5 = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/, i5 = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/, s5 = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/, Mi = (t) => e5.test(t), ze = (t) => !!t && !Number.isNaN(Number(t)), _i = (t) => !!t && Number.isInteger(Number(t)), gf = (t) => t.endsWith("%") && ze(t.slice(0, -1)), Qn = (t) => t5.test(t), CC = () => !0, o5 = (t) => (
2392
+ }, kC = /^\[(?:(\w[\w-]*):)?(.+)\]$/i, SC = /^\((?:(\w[\w-]*):)?(.+)\)$/i, eO = /^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/, tO = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/, rO = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/, nO = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/, iO = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/, sO = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/, Mi = (t) => eO.test(t), ze = (t) => !!t && !Number.isNaN(Number(t)), _i = (t) => !!t && Number.isInteger(Number(t)), gf = (t) => t.endsWith("%") && ze(t.slice(0, -1)), Qn = (t) => tO.test(t), CC = () => !0, oO = (t) => (
2393
2393
  // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.
2394
2394
  // For example, `hsl(0 0% 0%)` would be classified as a length without this check.
2395
2395
  // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.
2396
- r5.test(t) && !n5.test(t)
2397
- ), mb = () => !1, a5 = (t) => i5.test(t), l5 = (t) => s5.test(t), c5 = (t) => !pe(t) && !me(t), u5 = (t) => ds(t, AC, mb), pe = (t) => kC.test(t), Ss = (t) => ds(t, NC, o5), R1 = (t) => ds(t, x5, ze), h5 = (t) => ds(t, MC, CC), d5 = (t) => ds(t, IC, mb), D1 = (t) => ds(t, EC, mb), p5 = (t) => ds(t, TC, l5), eh = (t) => ds(t, _C, a5), me = (t) => SC.test(t), tl = (t) => ko(t, NC), f5 = (t) => ko(t, IC), P1 = (t) => ko(t, EC), m5 = (t) => ko(t, AC), g5 = (t) => ko(t, TC), th = (t) => ko(t, _C, !0), b5 = (t) => ko(t, MC, !0), ds = (t, e, r) => {
2396
+ rO.test(t) && !nO.test(t)
2397
+ ), mb = () => !1, aO = (t) => iO.test(t), lO = (t) => sO.test(t), cO = (t) => !pe(t) && !me(t), uO = (t) => ds(t, AC, mb), pe = (t) => kC.test(t), Ss = (t) => ds(t, NC, oO), R1 = (t) => ds(t, xO, ze), hO = (t) => ds(t, MC, CC), dO = (t) => ds(t, IC, mb), D1 = (t) => ds(t, EC, mb), pO = (t) => ds(t, TC, lO), eh = (t) => ds(t, _C, aO), me = (t) => SC.test(t), tl = (t) => ko(t, NC), fO = (t) => ko(t, IC), P1 = (t) => ko(t, EC), mO = (t) => ko(t, AC), gO = (t) => ko(t, TC), th = (t) => ko(t, _C, !0), bO = (t) => ko(t, MC, !0), ds = (t, e, r) => {
2398
2398
  const n = kC.exec(t);
2399
2399
  return n ? n[1] ? e(n[1]) : r(n[2]) : !1;
2400
2400
  }, ko = (t, e, r = !1) => {
2401
2401
  const n = SC.exec(t);
2402
2402
  return n ? n[1] ? e(n[1]) : r : !1;
2403
- }, EC = (t) => t === "position" || t === "percentage", TC = (t) => t === "image" || t === "url", AC = (t) => t === "length" || t === "size" || t === "bg-size", NC = (t) => t === "length", x5 = (t) => t === "number", IC = (t) => t === "family-name", MC = (t) => t === "number" || t === "weight", _C = (t) => t === "shadow", y5 = () => {
2403
+ }, EC = (t) => t === "position" || t === "percentage", TC = (t) => t === "image" || t === "url", AC = (t) => t === "length" || t === "size" || t === "bg-size", NC = (t) => t === "length", xO = (t) => t === "number", IC = (t) => t === "family-name", MC = (t) => t === "number" || t === "weight", _C = (t) => t === "shadow", yO = () => {
2404
2404
  const t = Ct("color"), e = Ct("font"), r = Ct("text"), n = Ct("font-weight"), i = Ct("tracking"), s = Ct("leading"), o = Ct("breakpoint"), a = Ct("container"), l = Ct("spacing"), c = Ct("radius"), u = Ct("shadow"), d = Ct("inset-shadow"), p = Ct("text-shadow"), f = Ct("drop-shadow"), b = Ct("blur"), w = Ct("perspective"), x = Ct("aspect"), v = Ct("ease"), C = Ct("animate"), _ = () => ["auto", "avoid", "all", "avoid-page", "page", "left", "right", "column"], R = () => [
2405
2405
  "center",
2406
2406
  "top",
@@ -2425,7 +2425,7 @@ const OO = (t, e) => {
2425
2425
  position: [me, pe]
2426
2426
  }], Ce = () => ["no-repeat", {
2427
2427
  repeat: ["", "x", "y", "space", "round"]
2428
- }], D = () => ["auto", "cover", "contain", m5, u5, {
2428
+ }], D = () => ["auto", "cover", "contain", mO, uO, {
2429
2429
  size: [me, pe]
2430
2430
  }], ne = () => [gf, tl, Ss], ae = () => [
2431
2431
  // Deprecated since Tailwind CSS v4.0.0
@@ -2454,7 +2454,7 @@ const OO = (t, e) => {
2454
2454
  container: [Qn],
2455
2455
  "drop-shadow": [Qn],
2456
2456
  ease: ["in", "out", "in-out"],
2457
- font: [c5],
2457
+ font: [cO],
2458
2458
  "font-weight": ["thin", "extralight", "light", "normal", "medium", "semibold", "bold", "extrabold", "black"],
2459
2459
  "inset-shadow": [Qn],
2460
2460
  leading: ["none", "tight", "snug", "normal", "relaxed", "loose"],
@@ -3248,7 +3248,7 @@ const OO = (t, e) => {
3248
3248
  * @see https://tailwindcss.com/docs/font-weight
3249
3249
  */
3250
3250
  "font-weight": [{
3251
- font: [n, b5, h5]
3251
+ font: [n, bO, hO]
3252
3252
  }],
3253
3253
  /**
3254
3254
  * Font Stretch
@@ -3262,7 +3262,7 @@ const OO = (t, e) => {
3262
3262
  * @see https://tailwindcss.com/docs/font-family
3263
3263
  */
3264
3264
  "font-family": [{
3265
- font: [f5, d5, e]
3265
+ font: [fO, dO, e]
3266
3266
  }],
3267
3267
  /**
3268
3268
  * Font Feature Settings
@@ -3524,7 +3524,7 @@ const OO = (t, e) => {
3524
3524
  }, _i, me, pe],
3525
3525
  radial: ["", me, pe],
3526
3526
  conic: [_i, me, pe]
3527
- }, g5, p5]
3527
+ }, gO, pO]
3528
3528
  }],
3529
3529
  /**
3530
3530
  * Background Color
@@ -5029,7 +5029,7 @@ const OO = (t, e) => {
5029
5029
  },
5030
5030
  orderSensitiveModifiers: ["*", "**", "after", "backdrop", "before", "details-content", "file", "first-letter", "first-line", "marker", "placeholder", "selection"]
5031
5031
  };
5032
- }, w5 = /* @__PURE__ */ QO(y5), lt = (...t) => w5(_O(...t));
5032
+ }, wO = /* @__PURE__ */ Q5(yO), lt = (...t) => wO(_5(...t));
5033
5033
  function Fn({ label: t, isDirty: e, onReset: r }) {
5034
5034
  return /* @__PURE__ */ m("div", { class: "flex items-center justify-between", children: [
5035
5035
  /* @__PURE__ */ m("label", { class: "text-xs font-medium text-white/70", children: t }),
@@ -5406,7 +5406,7 @@ function L1({ label: t, selected: e, options: r, onChange: n, isDirty: i, onRese
5406
5406
  )
5407
5407
  ] });
5408
5408
  }
5409
- const v5 = {
5409
+ const vO = {
5410
5410
  // Link / navigation
5411
5411
  href: { type: "href", label: "URL (href)", placeholder: "https://example.com or /page" },
5412
5412
  target: {
@@ -5615,8 +5615,8 @@ const v5 = {
5615
5615
  ]
5616
5616
  }
5617
5617
  };
5618
- function k5(t) {
5619
- return v5[t] || {
5618
+ function kO(t) {
5619
+ return vO[t] || {
5620
5620
  type: "text",
5621
5621
  label: t,
5622
5622
  placeholder: `${t} value`
@@ -5629,8 +5629,8 @@ function Qm(t, e) {
5629
5629
  };
5630
5630
  return r(t) !== r(e);
5631
5631
  }
5632
- function S5({ attrName: t, currentAttr: e, originalAttr: r, pages: n, onUpdate: i, onReset: s, onOpenMediaLibrary: o }) {
5633
- const a = k5(t), l = e?.value ?? "", c = r?.value ?? "", u = Qm(l, c), d = u ? s : void 0;
5632
+ function SO({ attrName: t, currentAttr: e, originalAttr: r, pages: n, onUpdate: i, onReset: s, onOpenMediaLibrary: o }) {
5633
+ const a = kO(t), l = e?.value ?? "", c = r?.value ?? "", u = Qm(l, c), d = u ? s : void 0;
5634
5634
  switch (a.type) {
5635
5635
  case "select":
5636
5636
  return /* @__PURE__ */ m(
@@ -5719,7 +5719,7 @@ function S5({ attrName: t, currentAttr: e, originalAttr: r, pages: n, onUpdate:
5719
5719
  );
5720
5720
  }
5721
5721
  }
5722
- function C5({ onClose: t }) {
5722
+ function CO({ onClose: t }) {
5723
5723
  const e = N3.value, r = I3.value;
5724
5724
  rt.value;
5725
5725
  const n = _e.value, i = Xr.value, s = r ? i.get(r) : null;
@@ -5821,7 +5821,7 @@ function C5({ onClose: t }) {
5821
5821
  /* @__PURE__ */ m("div", { class: "flex-1 overflow-y-auto p-4", children: b ? /* @__PURE__ */ m("div", { class: "space-y-3", children: f.map((w, x) => /* @__PURE__ */ m("div", { children: [
5822
5822
  x > 0 && /* @__PURE__ */ m("div", { class: "h-px bg-white/5 mb-3" }),
5823
5823
  /* @__PURE__ */ m(
5824
- S5,
5824
+ SO,
5825
5825
  {
5826
5826
  attrName: w,
5827
5827
  currentAttr: p[w],
@@ -5849,17 +5849,17 @@ function C5({ onClose: t }) {
5849
5849
  }
5850
5850
  );
5851
5851
  }
5852
- const BC = 100, E5 = 500, wa = Oe([]), is = Oe([]), T5 = Qe(() => wa.value.length > 0 || In !== null), A5 = Qe(() => is.value.length > 0);
5852
+ const BC = 100, EO = 500, wa = Oe([]), is = Oe([]), TO = Qe(() => wa.value.length > 0 || In !== null), AO = Qe(() => is.value.length > 0);
5853
5853
  let mn = !1, In = null, ui = null;
5854
5854
  function Sd() {
5855
5855
  In && (gb(In), In = null), ui && (clearTimeout(ui), ui = null);
5856
5856
  }
5857
- function N5(t) {
5857
+ function NO(t) {
5858
5858
  mn || (In && In.cmsId === t.cmsId ? In = {
5859
5859
  ...In,
5860
5860
  currentHTML: t.currentHTML,
5861
5861
  currentText: t.currentText
5862
- } : (Sd(), In = t), is.value = [], ui && clearTimeout(ui), ui = setTimeout(Sd, E5));
5862
+ } : (Sd(), In = t), is.value = [], ui && clearTimeout(ui), ui = setTimeout(Sd, EO));
5863
5863
  }
5864
5864
  function Np(t) {
5865
5865
  mn || (Sd(), gb(t), is.value = []);
@@ -5868,29 +5868,29 @@ function gb(t) {
5868
5868
  const e = [...wa.value, t];
5869
5869
  e.length > BC && e.shift(), wa.value = e;
5870
5870
  }
5871
- function I5(t) {
5871
+ function IO(t) {
5872
5872
  const e = [...is.value, t];
5873
5873
  e.length > BC && e.shift(), is.value = e;
5874
5874
  }
5875
- function M5() {
5875
+ function MO() {
5876
5876
  Sd();
5877
5877
  const t = wa.value;
5878
5878
  if (t.length === 0) return;
5879
5879
  const e = t[t.length - 1];
5880
5880
  wa.value = t.slice(0, -1), mn = !0;
5881
5881
  try {
5882
- O5(e), I5(e);
5882
+ OO(e), IO(e);
5883
5883
  } finally {
5884
5884
  mn = !1;
5885
5885
  }
5886
5886
  }
5887
- function _5() {
5887
+ function _O() {
5888
5888
  const t = is.value;
5889
5889
  if (t.length === 0) return;
5890
5890
  const e = t[t.length - 1];
5891
5891
  is.value = t.slice(0, -1), mn = !0;
5892
5892
  try {
5893
- R5(e), gb(e);
5893
+ RO(e), gb(e);
5894
5894
  } finally {
5895
5895
  mn = !1;
5896
5896
  }
@@ -5970,10 +5970,10 @@ const FC = {
5970
5970
  }
5971
5971
  }
5972
5972
  };
5973
- function O5(t) {
5973
+ function OO(t) {
5974
5974
  FC[t.type].applyReverse(t);
5975
5975
  }
5976
- function R5(t) {
5976
+ function RO(t) {
5977
5977
  FC[t.type].applyForward(t);
5978
5978
  }
5979
5979
  function B1(t, e, r, n, i) {
@@ -6041,11 +6041,11 @@ function zC(t) {
6041
6041
  e[r] = { ...n };
6042
6042
  return e;
6043
6043
  }
6044
- const D5 = {
6044
+ const DO = {
6045
6045
  "bg-auto": "auto",
6046
6046
  "bg-cover": "cover",
6047
6047
  "bg-contain": "contain"
6048
- }, P5 = {
6048
+ }, PO = {
6049
6049
  "bg-center": "center",
6050
6050
  "bg-top": "top",
6051
6051
  "bg-bottom": "bottom",
@@ -6055,7 +6055,7 @@ const D5 = {
6055
6055
  "bg-top-right": "top right",
6056
6056
  "bg-bottom-left": "bottom left",
6057
6057
  "bg-bottom-right": "bottom right"
6058
- }, L5 = {
6058
+ }, LO = {
6059
6059
  "bg-repeat": "repeat",
6060
6060
  "bg-no-repeat": "no-repeat",
6061
6061
  "bg-repeat-x": "repeat-x",
@@ -6066,11 +6066,11 @@ const D5 = {
6066
6066
  function VC(t) {
6067
6067
  return t.match(/^bg-\[url\(['"]?([^'")\]]+)['"]?\)\]$/)?.[1] ?? "";
6068
6068
  }
6069
- const B5 = [
6069
+ const BO = [
6070
6070
  { value: "bg-auto", label: "Auto" },
6071
6071
  { value: "bg-contain", label: "Contain" },
6072
6072
  { value: "bg-cover", label: "Cover" }
6073
- ], F5 = [
6073
+ ], FO = [
6074
6074
  { value: "bg-top-left", label: "Top Left" },
6075
6075
  { value: "bg-top", label: "Top" },
6076
6076
  { value: "bg-top-right", label: "Top Right" },
@@ -6080,13 +6080,13 @@ const B5 = [
6080
6080
  { value: "bg-bottom-left", label: "Bottom Left" },
6081
6081
  { value: "bg-bottom", label: "Bottom" },
6082
6082
  { value: "bg-bottom-right", label: "Bottom Right" }
6083
- ], $5 = [
6083
+ ], $O = [
6084
6084
  { value: "bg-repeat", label: "Repeat" },
6085
6085
  { value: "bg-no-repeat", label: "No Repeat" },
6086
6086
  { value: "bg-repeat-x", label: "Repeat X" },
6087
6087
  { value: "bg-repeat-y", label: "Repeat Y" }
6088
6088
  ];
6089
- function z5({ visible: t, rect: e, element: r, cmsId: n }) {
6089
+ function zO({ visible: t, rect: e, element: r, cmsId: n }) {
6090
6090
  const [i, s] = re(!1), o = xe(null);
6091
6091
  ye(() => {
6092
6092
  n && o.current && n !== o.current.cmsId && (s(!1), o.current = null);
@@ -6200,7 +6200,7 @@ function z5({ visible: t, rect: e, element: r, cmsId: n }) {
6200
6200
  } : void 0
6201
6201
  }
6202
6202
  ),
6203
- /* @__PURE__ */ m("div", { class: "flex gap-1", children: B5.map(({ value: L, label: P }) => /* @__PURE__ */ m(
6203
+ /* @__PURE__ */ m("div", { class: "flex gap-1", children: BO.map(({ value: L, label: P }) => /* @__PURE__ */ m(
6204
6204
  "button",
6205
6205
  {
6206
6206
  type: "button",
@@ -6227,7 +6227,7 @@ function z5({ visible: t, rect: e, element: r, cmsId: n }) {
6227
6227
  } : void 0
6228
6228
  }
6229
6229
  ),
6230
- /* @__PURE__ */ m("div", { class: "inline-grid grid-cols-3 gap-0.5 bg-white/10 border border-white/20 rounded-cms-sm p-1", children: F5.map(({ value: L, label: P }) => /* @__PURE__ */ m(
6230
+ /* @__PURE__ */ m("div", { class: "inline-grid grid-cols-3 gap-0.5 bg-white/10 border border-white/20 rounded-cms-sm p-1", children: FO.map(({ value: L, label: P }) => /* @__PURE__ */ m(
6231
6231
  "button",
6232
6232
  {
6233
6233
  type: "button",
@@ -6257,7 +6257,7 @@ function z5({ visible: t, rect: e, element: r, cmsId: n }) {
6257
6257
  {
6258
6258
  label: "Repeat",
6259
6259
  value: x.newBgRepeat || void 0,
6260
- options: $5,
6260
+ options: $O,
6261
6261
  onChange: w,
6262
6262
  isDirty: N,
6263
6263
  onReset: N ? () => {
@@ -6289,7 +6289,7 @@ function Zn(t, e, r) {
6289
6289
  const a = VC(r.newBgImageClass);
6290
6290
  t.style.backgroundImage = `url('${a}')`;
6291
6291
  }
6292
- r.newBgSize !== void 0 && (rh(t, o.newBgSize, r.newBgSize), o.newBgSize = r.newBgSize, t.style.backgroundSize = D5[r.newBgSize] ?? ""), r.newBgPosition !== void 0 && (rh(t, o.newBgPosition, r.newBgPosition), o.newBgPosition = r.newBgPosition, t.style.backgroundPosition = P5[r.newBgPosition] ?? ""), r.newBgRepeat !== void 0 && (rh(t, o.newBgRepeat, r.newBgRepeat), o.newBgRepeat = r.newBgRepeat, t.style.backgroundRepeat = L5[r.newBgRepeat] ?? ""), o.isDirty = o.newBgImageClass !== o.originalBgImageClass || o.newBgSize !== o.originalBgSize || o.newBgPosition !== o.originalBgPosition || o.newBgRepeat !== o.originalBgRepeat, mn || Np({
6292
+ r.newBgSize !== void 0 && (rh(t, o.newBgSize, r.newBgSize), o.newBgSize = r.newBgSize, t.style.backgroundSize = DO[r.newBgSize] ?? ""), r.newBgPosition !== void 0 && (rh(t, o.newBgPosition, r.newBgPosition), o.newBgPosition = r.newBgPosition, t.style.backgroundPosition = PO[r.newBgPosition] ?? ""), r.newBgRepeat !== void 0 && (rh(t, o.newBgRepeat, r.newBgRepeat), o.newBgRepeat = r.newBgRepeat, t.style.backgroundRepeat = LO[r.newBgRepeat] ?? ""), o.isDirty = o.newBgImageClass !== o.originalBgImageClass || o.newBgSize !== o.originalBgSize || o.newBgPosition !== o.originalBgPosition || o.newBgRepeat !== o.originalBgRepeat, mn || Np({
6293
6293
  type: "bgImage",
6294
6294
  cmsId: e,
6295
6295
  element: t,
@@ -6308,7 +6308,7 @@ function Zn(t, e, r) {
6308
6308
  wasDirty: n.isDirty
6309
6309
  }), Wm(e, o), pb(vi.value);
6310
6310
  }
6311
- const V5 = (t, e) => e in t.entries, HC = (t) => t.components ?? {}, Ip = (t, e) => t.components?.[e], bb = (t) => t.componentDefinitions ?? {}, JC = (t, e) => bb(t)[e], H5 = (t) => Object.keys(t.entries).length;
6311
+ const VO = (t, e) => e in t.entries, HC = (t) => t.components ?? {}, Ip = (t, e) => t.components?.[e], bb = (t) => t.componentDefinitions ?? {}, JC = (t, e) => bb(t)[e], HO = (t) => Object.keys(t.entries).length;
6312
6312
  function Cd(t, e) {
6313
6313
  if (!e) return [];
6314
6314
  const r = t.collectionDefinitions?.[e];
@@ -6330,7 +6330,7 @@ function jC({ def: t, onClick: e }) {
6330
6330
  onClick: e,
6331
6331
  class: "p-4 bg-white/5 border border-white/10 rounded-cms-md cursor-pointer text-left transition-all hover:border-cms-primary/50 hover:bg-white/10 group",
6332
6332
  children: [
6333
- t.previewUrl && /* @__PURE__ */ m("div", { class: "mb-3 rounded overflow-hidden bg-white h-30 relative", children: /* @__PURE__ */ m(J5, { previewUrl: t.previewUrl, previewWidth: t.previewWidth }) }),
6333
+ t.previewUrl && /* @__PURE__ */ m("div", { class: "mb-3 rounded overflow-hidden bg-white h-30 relative", children: /* @__PURE__ */ m(JO, { previewUrl: t.previewUrl, previewWidth: t.previewWidth }) }),
6334
6334
  /* @__PURE__ */ m("div", { class: "font-medium text-white", children: t.name }),
6335
6335
  t.description && /* @__PURE__ */ m("div", { class: "text-xs text-white/50 mt-1", children: t.description }),
6336
6336
  /* @__PURE__ */ m("div", { class: "text-[11px] text-white/40 mt-2 font-mono", children: [
@@ -6342,7 +6342,7 @@ function jC({ def: t, onClick: e }) {
6342
6342
  }
6343
6343
  );
6344
6344
  }
6345
- function J5({ previewUrl: t, previewWidth: e }) {
6345
+ function JO({ previewUrl: t, previewWidth: e }) {
6346
6346
  const r = e ?? 1280, n = 320 / r;
6347
6347
  return /* @__PURE__ */ m(
6348
6348
  "iframe",
@@ -6359,16 +6359,16 @@ function J5({ previewUrl: t, previewWidth: e }) {
6359
6359
  function J1(t, e) {
6360
6360
  return xn(`${t.apiBase}/markdown/create`, e, "Create page failed");
6361
6361
  }
6362
- function j5(t, e) {
6362
+ function jO(t, e) {
6363
6363
  return xn(`${t.apiBase}/markdown/update`, e, "Update page failed");
6364
6364
  }
6365
- function U5(t, e, r) {
6365
+ function UO(t, e, r) {
6366
6366
  return xn(`${t.apiBase}/markdown/rename`, { filePath: e, newSlug: r }, "Rename failed");
6367
6367
  }
6368
- function q5(t, e) {
6368
+ function qO(t, e) {
6369
6369
  return xn(`${t.apiBase}/markdown/delete`, { filePath: e }, "Delete failed");
6370
6370
  }
6371
- async function W5(t, e) {
6371
+ async function WO(t, e) {
6372
6372
  const r = new URLSearchParams({ limit: String(e?.limit ?? 50) });
6373
6373
  e?.cursor && r.set("cursor", e.cursor), e?.folder && r.set("folder", e.folder), e?.type && e.type !== "all" && r.set("type", e.type);
6374
6374
  const n = await mi(`${t.apiBase}/media/list?${r}`, {
@@ -6400,10 +6400,10 @@ function eg(t, e, r, n) {
6400
6400
  }), l.addEventListener("error", () => a({ success: !1, error: "Network error during upload" })), l.addEventListener("timeout", () => a({ success: !1, error: "Upload timed out" })), l.open("POST", `${t.apiBase}/media/upload${o ? `?${o}` : ""}`), l.withCredentials = !0, l.timeout = TS.REQUEST_TIMEOUT_MS * 2, l.send(i);
6401
6401
  });
6402
6402
  }
6403
- async function G5(t, e) {
6403
+ async function GO(t, e) {
6404
6404
  return xn(`${t.apiBase}/media/folder`, { folder: e }, "Create folder failed");
6405
6405
  }
6406
- async function K5(t) {
6406
+ async function KO(t) {
6407
6407
  const e = await mi(`${t.apiBase}/media/project-images`, {
6408
6408
  method: "GET",
6409
6409
  credentials: "include"
@@ -6411,16 +6411,16 @@ async function K5(t) {
6411
6411
  if (!e.ok) throw new Error(`Failed to fetch project images (${e.status})`);
6412
6412
  return e.json();
6413
6413
  }
6414
- function X5(t, e) {
6414
+ function XO(t, e) {
6415
6415
  return xn(`${t.apiBase}/page/create`, e);
6416
6416
  }
6417
- function Y5(t, e) {
6417
+ function YO(t, e) {
6418
6418
  return xn(`${t.apiBase}/page/duplicate`, e);
6419
6419
  }
6420
- function Q5(t, e) {
6420
+ function QO(t, e) {
6421
6421
  return xn(`${t.apiBase}/page/delete`, e);
6422
6422
  }
6423
- function Z5(t, e, r) {
6423
+ function ZO(t, e, r) {
6424
6424
  return $0(`${t.apiBase}/page/check-slug?slug=${encodeURIComponent(e)}`, { exists: !1 }, r);
6425
6425
  }
6426
6426
  function eR(t) {
@@ -6745,7 +6745,7 @@ function pR({ page: t }) {
6745
6745
  }
6746
6746
  i(!0);
6747
6747
  try {
6748
- const l = await U5(rt.value, t.filePath, a);
6748
+ const l = await UO(rt.value, t.filePath, a);
6749
6749
  l.success && l.newSlug && l.newFilePath ? (K3({ slug: l.newSlug, filePath: l.newFilePath }), r(l.newSlug), we("Slug updated", "success")) : (we(l.error || "Failed to rename", "error"), r(t.slug));
6750
6750
  } catch {
6751
6751
  we("Failed to rename", "error"), r(t.slug);
@@ -7973,7 +7973,7 @@ function SR() {
7973
7973
  const s = G(async () => {
7974
7974
  const a = rt.value;
7975
7975
  !a || !t.title.trim() || !t.slug.trim() || t.slugError || t.submitPage(
7976
- () => X5(a, { title: t.title.trim(), slug: t.slug.trim(), layoutPath: n }),
7976
+ () => XO(a, { title: t.title.trim(), slug: t.slug.trim(), layoutPath: n }),
7977
7977
  "Failed to create page"
7978
7978
  );
7979
7979
  }, [t.title, t.slug, t.slugError, n, t.submitPage]), o = t.title.trim() && t.slug.trim() && !t.slugError && !t.slugChecking && !t.isSubmitting;
@@ -8045,7 +8045,7 @@ function CR() {
8045
8045
  const o = G(async () => {
8046
8046
  const l = rt.value;
8047
8047
  !l || !e || !s.slug.trim() || s.slugError || s.submitPage(
8048
- () => Y5(l, {
8048
+ () => YO(l, {
8049
8049
  sourcePagePath: e,
8050
8050
  slug: s.slug.trim(),
8051
8051
  title: s.title.trim() || void 0,
@@ -8224,7 +8224,7 @@ function NR(t, e, r, n, i) {
8224
8224
  }
8225
8225
  const o = new AbortController();
8226
8226
  r.current = o;
8227
- const a = await Z5(s, t, o.signal);
8227
+ const a = await ZO(s, t, o.signal);
8228
8228
  o.signal.aborted || (n(!1), i(a.exists ? `Page already exists at /${t}` : null));
8229
8229
  }, 300);
8230
8230
  }
@@ -8279,7 +8279,7 @@ function OR() {
8279
8279
  const u = o;
8280
8280
  if (!u) return null;
8281
8281
  const d = (x, v, C) => {
8282
- mf(), C ? (AO({ collectionName: e, slug: x, sourcePath: v, pathname: C }), window.location.href = C) : fC(e, x, v, u);
8282
+ mf(), C ? (A5({ collectionName: e, slug: x, sourcePath: v, pathname: C }), window.location.href = C) : fC(e, x, v, u);
8283
8283
  }, p = () => {
8284
8284
  mf(), Gm(e, u);
8285
8285
  }, f = (x, v) => {
@@ -8301,7 +8301,7 @@ function OR() {
8301
8301
  }
8302
8302
  };
8303
8303
  }
8304
- nh.value = null, ih.value = null, q5(rt.value, v);
8304
+ nh.value = null, ih.value = null, qO(rt.value, v);
8305
8305
  }, w = (x) => {
8306
8306
  x.stopPropagation(), ih.value = null;
8307
8307
  };
@@ -8881,7 +8881,7 @@ function JR() {
8881
8881
  const n = rt.value, i = fn.value;
8882
8882
  if (!n || !i.targetPage) return;
8883
8883
  T1(!0);
8884
- const s = await Q5(n, {
8884
+ const s = await QO(n, {
8885
8885
  pagePath: i.targetPage.pathname,
8886
8886
  createRedirect: i.createRedirect,
8887
8887
  redirectTo: i.createRedirect ? i.redirectTo : void 0
@@ -8909,7 +8909,7 @@ function JR() {
8909
8909
  {
8910
8910
  type: "checkbox",
8911
8911
  checked: e.createRedirect,
8912
- onChange: (n) => rO(n.target.checked),
8912
+ onChange: (n) => r5(n.target.checked),
8913
8913
  class: "w-4 h-4 rounded accent-cms-primary",
8914
8914
  "data-cms-ui": !0
8915
8915
  }
@@ -8923,7 +8923,7 @@ function JR() {
8923
8923
  {
8924
8924
  type: "text",
8925
8925
  value: e.redirectTo,
8926
- onInput: (n) => tO(n.target.value),
8926
+ onInput: (n) => t5(n.target.value),
8927
8927
  placeholder: "/",
8928
8928
  class: "w-full px-3 py-2 bg-white/5 border border-white/10 rounded-cms-md text-white placeholder:text-white/30 focus:outline-none focus:border-cms-primary/50",
8929
8929
  "data-cms-ui": !0
@@ -49281,8 +49281,8 @@ function rq() {
49281
49281
  w(!0);
49282
49282
  try {
49283
49283
  const A = !V, [ue, Ce] = await Promise.all([
49284
- W5(rt.value, { folder: V || void 0 }).catch(() => ({ items: [], folders: [] })),
49285
- A ? K5(rt.value).catch(() => ({ items: [] })) : Promise.resolve({ items: [] })
49284
+ WO(rt.value, { folder: V || void 0 }).catch(() => ({ items: [], folders: [] })),
49285
+ A ? KO(rt.value).catch(() => ({ items: [] })) : Promise.resolve({ items: [] })
49286
49286
  ]);
49287
49287
  c(ue.folders ?? []);
49288
49288
  const D = /* @__PURE__ */ new Set(), ne = [];
@@ -49353,7 +49353,7 @@ function rq() {
49353
49353
  }
49354
49354
  const A = u ? `${u}/${V}` : V;
49355
49355
  try {
49356
- const ue = await G5(rt.value, A);
49356
+ const ue = await GO(rt.value, A);
49357
49357
  ue.success ? (c((Ce) => [...Ce, { name: V, path: A }].sort((D, ne) => D.name.localeCompare(ne.name))), we("Folder created", "success")) : we(ue.error || "Failed to create folder", "error");
49358
49358
  } catch {
49359
49359
  we("Failed to create folder", "error");
@@ -50264,7 +50264,7 @@ async function cp() {
50264
50264
  const t = rt.value;
50265
50265
  if (!t) return;
50266
50266
  const e = await tR(t);
50267
- iO(e.rules);
50267
+ i5(e.rules);
50268
50268
  }
50269
50269
  function cq() {
50270
50270
  const t = XS.value;
@@ -50289,7 +50289,7 @@ function hq() {
50289
50289
  if (!(!t.fieldName || !t.ownerPath)) {
50290
50290
  o(!0);
50291
50291
  try {
50292
- const v = await j5(rt.value, {
50292
+ const v = await jO(rt.value, {
50293
50293
  filePath: t.ownerPath,
50294
50294
  frontmatter: { [t.fieldName]: x }
50295
50295
  });
@@ -51267,7 +51267,7 @@ const yq = ({ id: t, message: e, type: r, onRemove: n }) => {
51267
51267
  const r = xr.value, n = K0.value, i = aC.value, s = Jm.value, o = YS.value, a = pl.value, l = X0.value, [c, u] = re(!1), [d, p] = re(/* @__PURE__ */ new Set()), [f, b] = re(!1), w = xe(null);
51268
51268
  if (a) return null;
51269
51269
  const x = (M) => M.stopPropagation(), v = async () => {
51270
- await oO({
51270
+ await o5({
51271
51271
  title: "Discard Changes",
51272
51272
  message: "Discard all changes? This cannot be undone.",
51273
51273
  confirmLabel: "Discard",
@@ -51327,7 +51327,7 @@ const yq = ({ id: t, message: e, type: r, onRemove: n }) => {
51327
51327
  icon: /* @__PURE__ */ m("svg", { class: "w-4 h-4", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", children: /* @__PURE__ */ m("path", { d: "M3 6h18M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" }) }),
51328
51328
  onClick: () => {
51329
51329
  const M = window.location.pathname;
51330
- eO({ pathname: M });
51330
+ e5({ pathname: M });
51331
51331
  }
51332
51332
  }
51333
51333
  ], E = [];
@@ -51344,7 +51344,7 @@ const yq = ({ id: t, message: e, type: r, onRemove: n }) => {
51344
51344
  /* @__PURE__ */ m("path", { d: "M9 18l6-6-6-6" }),
51345
51345
  /* @__PURE__ */ m("path", { d: "M15 18l6-6-6-6" })
51346
51346
  ] }),
51347
- onClick: () => nO()
51347
+ onClick: () => n5()
51348
51348
  }), R.push({
51349
51349
  label: "Settings",
51350
51350
  icon: /* @__PURE__ */ m("svg", { class: "w-4 h-4", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", children: [
@@ -51608,13 +51608,13 @@ async function iS(t, e) {
51608
51608
  try {
51609
51609
  const c = await Nc();
51610
51610
  _c(c);
51611
- const u = H5(c);
51611
+ const u = HO(c);
51612
51612
  Ve(t.debug, "Loaded manifest with", u, "entries");
51613
51613
  } catch (c) {
51614
51614
  console.error("[CMS] Failed to load manifest:", c);
51615
51615
  return;
51616
51616
  }
51617
- const r = mO(), n = bO(), i = yO(), s = vO(), o = SO(), a = _e.value;
51617
+ const r = m5(), n = b5(), i = y5(), s = v5(), o = S5(), a = _e.value;
51618
51618
  s2().forEach((c) => {
51619
51619
  const u = c.getAttribute(Ae.ID_ATTRIBUTE);
51620
51620
  if (!u) return;
@@ -51622,7 +51622,7 @@ async function iS(t, e) {
51622
51622
  Ve(t.debug, "Skipping component element:", u), ni(c);
51623
51623
  return;
51624
51624
  }
51625
- if (!V5(a, u)) {
51625
+ if (!VO(a, u)) {
51626
51626
  Ve(t.debug, "Skipping element not in manifest:", u), ni(c);
51627
51627
  return;
51628
51628
  }
@@ -51699,7 +51699,7 @@ async function iS(t, e) {
51699
51699
  }, _n.BLUR_DELAY_MS);
51700
51700
  });
51701
51701
  });
51702
- const l = IO();
51702
+ const l = I5();
51703
51703
  if (l) {
51704
51704
  const c = _e.value.collectionDefinitions?.[l.collectionName];
51705
51705
  c && fC(
@@ -51726,7 +51726,7 @@ function Tq(t, e, r, n) {
51726
51726
  const f = r.querySelector(`[data-cms-id="${p.id}"]`);
51727
51727
  return f ? { ...p, currentHTML: f.outerHTML } : p;
51728
51728
  });
51729
- mn || N5({
51729
+ mn || NO({
51730
51730
  type: "text",
51731
51731
  cmsId: e,
51732
51732
  element: r,
@@ -53126,8 +53126,8 @@ const hS = {
53126
53126
  s();
53127
53127
  }, [s]);
53128
53128
  ye(() => {
53129
- const ie = TO();
53130
- ie && lO(ie);
53129
+ const ie = T5();
53130
+ ie && l5(ie);
53131
53131
  }, []), ye(() => {
53132
53132
  Nc().then((ie) => {
53133
53133
  _c(ie);
@@ -53140,9 +53140,9 @@ const hS = {
53140
53140
  };
53141
53141
  return document.addEventListener("astro:after-swap", ie), () => document.removeEventListener("astro:after-swap", ie);
53142
53142
  }, []), ye(() => {
53143
- MO() && !xr.value && iS(t, a);
53143
+ M5() && !xr.value && iS(t, a);
53144
53144
  }, [t, a]), ye(() => {
53145
- NO() && df();
53145
+ N5() && df();
53146
53146
  }, []);
53147
53147
  const l = xe(null);
53148
53148
  ye(() => {
@@ -53206,8 +53206,8 @@ const hS = {
53206
53206
  seo: sC.value,
53207
53207
  total: aC.value
53208
53208
  },
53209
- canUndo: T5.value,
53210
- canRedo: A5.value
53209
+ canUndo: TO.value,
53210
+ canRedo: AO.value
53211
53211
  }), Ye = JSON.stringify(ie);
53212
53212
  Ye !== d.current && (d.current = Ye, Ri(Zq(ie)));
53213
53213
  });
@@ -53228,7 +53228,7 @@ const hS = {
53228
53228
  }), ye(() => {
53229
53229
  const ie = (Ye) => {
53230
53230
  const Ze = Ye.data;
53231
- !Ze || typeof Ze.type != "string" || (Ze.type === "cms-deselect-element" ? b() : Ze.type === "cms-set-features" && pO(Ze.features));
53231
+ !Ze || typeof Ze.type != "string" || (Ze.type === "cms-deselect-element" ? b() : Ze.type === "cms-set-features" && p5(Ze.features));
53232
53232
  };
53233
53233
  return window.addEventListener("message", ie), () => window.removeEventListener("message", ie);
53234
53234
  }, [b]);
@@ -53258,11 +53258,11 @@ const hS = {
53258
53258
  }, []), M = G(async () => {
53259
53259
  await df() || we("No collection content found on this page", "error");
53260
53260
  }, []), L = G(() => {
53261
- aO();
53261
+ a5();
53262
53262
  const ie = Vs.value;
53263
- EO(ie);
53263
+ E5(ie);
53264
53264
  }, []), P = G(() => {
53265
- cO();
53265
+ c5();
53266
53266
  }, []), W = G(() => {
53267
53267
  const ie = !Zi.value;
53268
53268
  Zi.value = ie, ie || rc(null), xr.value || (ie ? l2() : c2());
@@ -53275,9 +53275,9 @@ const hS = {
53275
53275
  ), ee = G(() => {
53276
53276
  lb();
53277
53277
  }, []), Y = G((ie, Ye) => {
53278
- wh(!1), sO(ie, Ye);
53278
+ wh(!1), s5(ie, Ye);
53279
53279
  }, []), q = G((ie, Ye) => {
53280
- uO(ie, Ye);
53280
+ u5(ie, Ye);
53281
53281
  }, []), X = G((ie, Ye, Ze, ut) => {
53282
53282
  let xt = hn.value.get(ie);
53283
53283
  if (!xt) {
@@ -53341,7 +53341,7 @@ const hS = {
53341
53341
  }
53342
53342
  ) }),
53343
53343
  /* @__PURE__ */ m(Mt, { componentName: "BgImageOverlay", children: /* @__PURE__ */ m(
53344
- z5,
53344
+ zO,
53345
53345
  {
53346
53346
  visible: n.visible && oe,
53347
53347
  rect: n.rect,
@@ -53360,7 +53360,7 @@ const hS = {
53360
53360
  onSelectElement: W,
53361
53361
  onMediaLibrary: E,
53362
53362
  onNavigateChange: () => {
53363
- fO();
53363
+ f5();
53364
53364
  },
53365
53365
  onEditContent: M,
53366
53366
  onToggleHighlights: L,
@@ -53393,7 +53393,7 @@ const hS = {
53393
53393
  }
53394
53394
  ) }),
53395
53395
  /* @__PURE__ */ m(Mt, { componentName: "Attribute Editor", children: /* @__PURE__ */ m(
53396
- C5,
53396
+ CO,
53397
53397
  {
53398
53398
  onClose: j
53399
53399
  }
@@ -53420,7 +53420,7 @@ const hS = {
53420
53420
  /* @__PURE__ */ m(hq, {}),
53421
53421
  /* @__PURE__ */ m(Mt, { componentName: "Confirm Dialog", children: /* @__PURE__ */ m(HR, {}) }),
53422
53422
  /* @__PURE__ */ m(sq, {}),
53423
- /* @__PURE__ */ m(wq, { toasts: Ce, onRemove: hO })
53423
+ /* @__PURE__ */ m(wq, { toasts: Ce, onRemove: h5 })
53424
53424
  ] });
53425
53425
  };
53426
53426
  class lW {
@@ -53428,7 +53428,7 @@ class lW {
53428
53428
  shadowRoot = null;
53429
53429
  config = HS();
53430
53430
  async init() {
53431
- dO(this.config), Ve(this.config.debug, "Initializing CMS editor with config:", this.config), this.setupUI(), this.setupKeyboardShortcuts();
53431
+ d5(this.config), Ve(this.config.debug, "Initializing CMS editor with config:", this.config), this.setupUI(), this.setupKeyboardShortcuts();
53432
53432
  }
53433
53433
  setupUI() {
53434
53434
  const e = document.createElement("div");
@@ -53450,11 +53450,11 @@ class lW {
53450
53450
  if (!xr.value || !(e.metaKey || e.ctrlKey)) return;
53451
53451
  const n = e.key.toLowerCase();
53452
53452
  if (n === "z" && e.shiftKey) {
53453
- e.preventDefault(), _5();
53453
+ e.preventDefault(), _O();
53454
53454
  return;
53455
53455
  }
53456
53456
  if (n === "z" && !e.shiftKey) {
53457
- e.preventDefault(), M5();
53457
+ e.preventDefault(), MO();
53458
53458
  return;
53459
53459
  }
53460
53460
  });
package/package.json CHANGED
@@ -14,7 +14,7 @@
14
14
  "directory": "packages/astro-cms"
15
15
  },
16
16
  "license": "Apache-2.0",
17
- "version": "0.24.0",
17
+ "version": "0.25.0",
18
18
  "module": "src/index.ts",
19
19
  "types": "src/index.ts",
20
20
  "type": "module",
@@ -500,6 +500,36 @@ function parseContentConfigFieldTypes(
500
500
  return result
501
501
  }
502
502
 
503
+ /**
504
+ * Extract all top-level field names from a schema body string.
505
+ * Matches `fieldName:` patterns at the start of lines within z.object({...}).
506
+ */
507
+ function extractSchemaFieldNames(schemaBody: string): Set<string> {
508
+ const names = new Set<string>()
509
+ for (const m of schemaBody.matchAll(/^\s*(\w+)\s*:/gm)) {
510
+ names.add(m[1]!)
511
+ }
512
+ return names
513
+ }
514
+
515
+ /**
516
+ * When a content config schema exists, filter scanned fields to only include
517
+ * those defined in the schema. This prevents stale or extra frontmatter fields
518
+ * from appearing in the CMS editor.
519
+ */
520
+ function filterFieldsBySchema(
521
+ collections: Record<string, CollectionDefinition>,
522
+ schemaBlocks: Array<{ collectionName: string; schemaBody: string }>,
523
+ ): void {
524
+ for (const { collectionName, schemaBody } of schemaBlocks) {
525
+ const def = collections[collectionName]
526
+ if (!def) continue
527
+ const schemaNames = extractSchemaFieldNames(schemaBody)
528
+ if (schemaNames.size === 0) continue
529
+ def.fields = def.fields.filter(f => schemaNames.has(f.name))
530
+ }
531
+ }
532
+
503
533
  /**
504
534
  * Apply field type overrides from config parsing to scanned collections.
505
535
  */
@@ -759,6 +789,7 @@ export async function scanCollections(contentDir: string = 'src/content'): Promi
759
789
 
760
790
  // Post-scan: apply explicit type hints, detect references, and derived fields
761
791
  const schemaBlocks = await parseContentConfigSchemaBlocks()
792
+ filterFieldsBySchema(collections, schemaBlocks)
762
793
  applyConfigFieldTypes(collections, schemaBlocks)
763
794
  await detectReferenceFields(collections, schemaBlocks)
764
795
  detectDerivedHrefFields(collections)
@@ -162,7 +162,6 @@ export async function handleCreateMarkdown(
162
162
  const fullFrontmatter: BlogFrontmatter = {
163
163
  title,
164
164
  date: new Date().toISOString().split('T')[0]!,
165
- draft: true,
166
165
  ...frontmatter,
167
166
  }
168
167
  fileContent = serializeFrontmatter(fullFrontmatter, content)