@obelism/content 0.27.2 → 0.28.1
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 +21 -15
- package/dist/bridge.d.mts +6 -1
- package/dist/bridge.d.mts.map +1 -1
- package/dist/bridge.d.ts +6 -1
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.global.js +23 -7
- package/dist/bridge.js +213 -81
- package/dist/bridge.mjs +214 -82
- package/dist/index.d.mts +4 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/dist/site.js +5 -0
- package/dist/site.mjs +5 -0
- package/dist/{types-c7464prw.d.ts → types-b6jbj3g6.d.ts} +8 -1
- package/dist/types-b6jbj3g6.d.ts.map +1 -0
- package/package.json +4 -4
- package/dist/types-c7464prw.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -261,8 +261,9 @@ switches to prompts for the selected block — or the whole page — and shows
|
|
|
261
261
|
the answer with what it changed, before and after; the change shows on the
|
|
262
262
|
page straight away, outlined as a preview, and needs **Keep it** before it
|
|
263
263
|
can be saved (**Try another** and **Undo** take it back). Hovered blocks
|
|
264
|
-
show their name; Escape — or
|
|
265
|
-
|
|
264
|
+
show their name; Escape — or the link above the form, **Up to** the block
|
|
265
|
+
around it and **Whole page** at the top — goes up a level at a time, back to
|
|
266
|
+
the whole page. The header
|
|
266
267
|
names the page and opens every page of the space, drafts included, to go to
|
|
267
268
|
one (at `pagePath`, in the page's language when it has a path there), and
|
|
268
269
|
shows the environment. A launcher at the bottom left minimizes the panel,
|
|
@@ -375,12 +376,15 @@ path, paths }`, plus `previousPath` and `previousPaths` when moved), `asset.upda
|
|
|
375
376
|
|
|
376
377
|
## Click rates
|
|
377
378
|
|
|
378
|
-
The visual editor
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
379
|
+
The visual editor, and the on-site editor while blocks are outlined, show
|
|
380
|
+
how often each block is clicked on the page itself: a label on a block
|
|
381
|
+
("24% clicked"), and a little tag on the corner of each tagged link or
|
|
382
|
+
button — a cross before its first click, an hourglass while fewer than 20
|
|
383
|
+
visitors saw its page, then its rate ("24%"). In the visual editor the
|
|
384
|
+
**Show click rates on the page** switch turns them on and off. Clicking one
|
|
385
|
+
selects its block. The rates come from Obelism Numbers over the last 30
|
|
386
|
+
days, so tag a block's clickable element with its uid and load Numbers'
|
|
387
|
+
script on the site (see the CMS's visual editor guide, "Click rates"):
|
|
384
388
|
|
|
385
389
|
```tsx
|
|
386
390
|
<a href={block.link} data-numbers-id={block._uid}>
|
|
@@ -423,14 +427,15 @@ const xml = sitemapXml(pages, {
|
|
|
423
427
|
## Links
|
|
424
428
|
|
|
425
429
|
A `link` field goes to a page of the space, to any address, or (with
|
|
426
|
-
`products: true`) to a product of the
|
|
430
|
+
`products: true` or `collections: true`) to a product or collection of the
|
|
431
|
+
space's Shopify store, each with an optional query and anchor. It is
|
|
427
432
|
delivered as `Link`: the page's `id`, `title`, `slug` and `path` (never its
|
|
428
|
-
fields), the `url`, or the `product` (`{ id, handle }`) with
|
|
429
|
-
page as `entry` (`null` when it has none), plus `query` and `hash`
|
|
430
|
-
their `?` and `#`. A link to a page that isn't published is `null`. Where a
|
|
431
|
-
|
|
432
|
-
`
|
|
433
|
-
`/
|
|
433
|
+
fields), the `url`, or the `product` or `collection` (`{ id, handle }`) with
|
|
434
|
+
its page as `entry` (`null` when it has none), plus `query` and `hash`
|
|
435
|
+
without their `?` and `#`. A link to a page that isn't published is `null`. Where a page's path lives on your site is your routing, so
|
|
436
|
+
`linkHref` takes it as `url` (default `/<path>`), a product's address as
|
|
437
|
+
`product` (default `/products/<handle>`), a collection's as `collection`
|
|
438
|
+
(default `/collections/<handle>`), and adds the query and hash:
|
|
434
439
|
|
|
435
440
|
```tsx
|
|
436
441
|
import { linkHref } from '@obelism/content'
|
|
@@ -440,6 +445,7 @@ import { linkHref } from '@obelism/content'
|
|
|
440
445
|
linkHref(button.link, {
|
|
441
446
|
url: (path) => `/${locale}/${path}`,
|
|
442
447
|
product: ({ handle }) => `/${locale}/products/${handle}`,
|
|
448
|
+
collection: ({ handle }) => `/${locale}/collections/${handle}`,
|
|
443
449
|
}) ?? undefined
|
|
444
450
|
}
|
|
445
451
|
>
|
package/dist/bridge.d.mts
CHANGED
|
@@ -8,7 +8,10 @@ type BlockStats = {
|
|
|
8
8
|
};
|
|
9
9
|
type StatsLabels = {
|
|
10
10
|
clicked: string;
|
|
11
|
+
clickedShort: string;
|
|
11
12
|
title: string;
|
|
13
|
+
noClicks: string;
|
|
14
|
+
counting: string;
|
|
12
15
|
};
|
|
13
16
|
declare const DEFAULT_STATS_LABELS: StatsLabels;
|
|
14
17
|
type StatsOverlay = {
|
|
@@ -16,9 +19,10 @@ type StatsOverlay = {
|
|
|
16
19
|
refresh(): void;
|
|
17
20
|
destroy(): void;
|
|
18
21
|
};
|
|
19
|
-
declare const mountStatsOverlay: (win: Window, { selector, onSelect, labels: labelOverrides, }: {
|
|
22
|
+
declare const mountStatsOverlay: (win: Window, { selector, onSelect, checked, labels: labelOverrides, }: {
|
|
20
23
|
selector: (uid: string) => string;
|
|
21
24
|
onSelect: (uid: string) => void;
|
|
25
|
+
checked?: ((id: string) => boolean) | undefined;
|
|
22
26
|
labels?: Partial<StatsLabels> | undefined;
|
|
23
27
|
}) => StatsOverlay;
|
|
24
28
|
|
|
@@ -180,6 +184,7 @@ type SiteEditorLabels = SharedLabels & {
|
|
|
180
184
|
envProduction: string;
|
|
181
185
|
scopeNoteBlock: string;
|
|
182
186
|
scopeNotePage: string;
|
|
187
|
+
scopeUp: string;
|
|
183
188
|
block: string;
|
|
184
189
|
previewChip: string;
|
|
185
190
|
askIntro: string;
|
package/dist/bridge.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.mts","sources":["../src/bridge/statsOverlay.ts","../src/bridge/createBridge.ts","../src/bridge/labels.ts","../src/bridge/promptBox.ts","../src/bridge/siteEditor.ts","../src/bridge.ts"],"mappings":";;AAAA,KAAK,UAAU;AACf;AACA;AACA;AACA;AACA;AACA,KAAK,WAAW;AAChB;AACA;AACA;AACA,cAAc,oBAAoB,EAAE,WAAW;
|
|
1
|
+
{"version":3,"file":"bridge.d.mts","sources":["../src/bridge/statsOverlay.ts","../src/bridge/createBridge.ts","../src/bridge/labels.ts","../src/bridge/promptBox.ts","../src/bridge/siteEditor.ts","../src/bridge.ts"],"mappings":";;AAAA,KAAK,UAAU;AACf;AACA;AACA;AACA;AACA;AACA,KAAK,WAAW;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,oBAAoB,EAAE,WAAW;AAgB/C,KAAK,YAAY;AACjB,kBAAkB,QAAQ,CAAC,MAAM,SAAS,UAAU;AACpD;AACA;AACA;AACA,cAAc,iBAAiB,QAAQ,MAAM;AAC7C;AACA;AACA;AACA,aAAa,OAAO,CAAC,WAAW;AAChC,MAAM,YAAY;;AClClB,KAAK,YAAY;AACjB;AACA,eAAe,KAAK;AACpB;AACA;AACA,WAAW,MAAM;AACjB,eAAe,MAAM;AACrB,YAAY,WAAW;AACvB;AACA,KAAK,WAAW,SAAS,YAAY;AACrC,KAAK,cAAc,WAAW,WAAW,cAAc,YAAY;AACnE,KAAK,WAAW;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ,CAAC,MAAM,SAAS,UAAU;AAC7C;AACA;AACA,KAAK,YAAY;AACjB;AACA;AACA,KAAK,gBAAgB;AACrB;AACA;AACA;AACA;AACA;AACA,KAAK,uBAAuB;AAC5B;AACA;AACA;AACA;AACA,KAAK,0BAA0B,GAAG,uBAAuB;AACzD,KAAK,eAAe;AACpB;AACA,WAAW,MAAM;AACjB;AACA,KAAK,WAAW;AAChB;AACA;AACA;AACA;AACA;AACA,KAAK,UAAU;AACf;AACA;AACA,KAAK,QAAQ;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,WAAW;AACxB,gBAAgB,WAAW;AAC3B;AACA,KAAK,aAAa;AAClB;AACA;AACA;AACA;AACA,sBAAsB,WAAW;AACjC,yBAAyB,WAAW;AACpC,iBAAiB,WAAW,sBAAsB,cAAc;AAChE,gBAAgB,WAAW;AAC3B;AACA;AACA,QAAQ,OAAO,CAAC,YAAY;AAC5B,8CAA8C,OAAO,CAAC,gBAAgB;AACtE,gCAAgC,WAAW,GAAG,OAAO,CAAC,uBAAuB;AAC7E,sCAAsC,WAAW,GAAG,OAAO,CAAC,0BAA0B;AACtF;AACA;AACA,QAAQ,OAAO,CAAC,MAAM;AACtB,uBAAuB,MAAM;AAC7B;AACA,QAAQ,OAAO,CAAC,eAAe;AAC/B,wBAAwB,WAAW,YAAY,WAAW,GAAG,UAAU;AACvE,aAAa,OAAO,CAAC,QAAQ;AAC7B,mBAAmB,QAAQ;AAC3B;AACA,YAAY,OAAO;AACnB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AAEA,cAAc,aAAa,EAAE,WAAW;;ACpGxC,KAAK,YAAY;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,KAAK,YAAY,GAAG,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,qBAAqB,EAAE,YAAY;AACjD,KAAK,gBAAgB,GAAG,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,0BAA0B,EAAE,gBAAgB;;ACpF1D,KAAK,gBAAgB;AACrB,aAAa,OAAO,CAAC,YAAY;AACjC,cAAc,WAAW;AACzB;AACA;AACA;AACA,cAAc,cAAc,QAAQ,QAAQ,UAAU,aAAa,YAAY,gBAAgB;;ACN/F,KAAK,iBAAiB,GAAG,IAAI,CAAC,gBAAgB;AAC9C,aAAa,OAAO,CAAC,gBAAgB;AACrC;AASA,cAAc,eAAe,QAAQ,QAAQ,UAAU,aAAa,YAAY,iBAAiB;;ACDjG,KAAK,aAAa;AAClB;AACA,wBAAwB,IAAI,CAAC,gBAAgB;AAC7C,iBAAiB,OAAO,CAAC,YAAY,GAAG,gBAAgB;AACxD;AACA;AACA;AACA;AACA;AACA,cAAc,iBAAiB,QAAQ,aAAa;AACpD,cAAc,gBAAgB,6DAA6D,aAAa,KAAK,aAAa","names":[]}
|
package/dist/bridge.d.ts
CHANGED
|
@@ -8,7 +8,10 @@ type BlockStats = {
|
|
|
8
8
|
};
|
|
9
9
|
type StatsLabels = {
|
|
10
10
|
clicked: string;
|
|
11
|
+
clickedShort: string;
|
|
11
12
|
title: string;
|
|
13
|
+
noClicks: string;
|
|
14
|
+
counting: string;
|
|
12
15
|
};
|
|
13
16
|
declare const DEFAULT_STATS_LABELS: StatsLabels;
|
|
14
17
|
type StatsOverlay = {
|
|
@@ -16,9 +19,10 @@ type StatsOverlay = {
|
|
|
16
19
|
refresh(): void;
|
|
17
20
|
destroy(): void;
|
|
18
21
|
};
|
|
19
|
-
declare const mountStatsOverlay: (win: Window, { selector, onSelect, labels: labelOverrides, }: {
|
|
22
|
+
declare const mountStatsOverlay: (win: Window, { selector, onSelect, checked, labels: labelOverrides, }: {
|
|
20
23
|
selector: (uid: string) => string;
|
|
21
24
|
onSelect: (uid: string) => void;
|
|
25
|
+
checked?: ((id: string) => boolean) | undefined;
|
|
22
26
|
labels?: Partial<StatsLabels> | undefined;
|
|
23
27
|
}) => StatsOverlay;
|
|
24
28
|
|
|
@@ -180,6 +184,7 @@ type SiteEditorLabels = SharedLabels & {
|
|
|
180
184
|
envProduction: string;
|
|
181
185
|
scopeNoteBlock: string;
|
|
182
186
|
scopeNotePage: string;
|
|
187
|
+
scopeUp: string;
|
|
183
188
|
block: string;
|
|
184
189
|
previewChip: string;
|
|
185
190
|
askIntro: string;
|
package/dist/bridge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sources":["../src/bridge/statsOverlay.ts","../src/bridge/createBridge.ts","../src/bridge/labels.ts","../src/bridge/promptBox.ts","../src/bridge/siteEditor.ts","../src/bridge.ts"],"mappings":";;AAAA,KAAK,UAAU;AACf;AACA;AACA;AACA;AACA;AACA,KAAK,WAAW;AAChB;AACA;AACA;AACA,cAAc,oBAAoB,EAAE,WAAW;
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sources":["../src/bridge/statsOverlay.ts","../src/bridge/createBridge.ts","../src/bridge/labels.ts","../src/bridge/promptBox.ts","../src/bridge/siteEditor.ts","../src/bridge.ts"],"mappings":";;AAAA,KAAK,UAAU;AACf;AACA;AACA;AACA;AACA;AACA,KAAK,WAAW;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,oBAAoB,EAAE,WAAW;AAgB/C,KAAK,YAAY;AACjB,kBAAkB,QAAQ,CAAC,MAAM,SAAS,UAAU;AACpD;AACA;AACA;AACA,cAAc,iBAAiB,QAAQ,MAAM;AAC7C;AACA;AACA;AACA,aAAa,OAAO,CAAC,WAAW;AAChC,MAAM,YAAY;;AClClB,KAAK,YAAY;AACjB;AACA,eAAe,KAAK;AACpB;AACA;AACA,WAAW,MAAM;AACjB,eAAe,MAAM;AACrB,YAAY,WAAW;AACvB;AACA,KAAK,WAAW,SAAS,YAAY;AACrC,KAAK,cAAc,WAAW,WAAW,cAAc,YAAY;AACnE,KAAK,WAAW;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ,CAAC,MAAM,SAAS,UAAU;AAC7C;AACA;AACA,KAAK,YAAY;AACjB;AACA;AACA,KAAK,gBAAgB;AACrB;AACA;AACA;AACA;AACA;AACA,KAAK,uBAAuB;AAC5B;AACA;AACA;AACA;AACA,KAAK,0BAA0B,GAAG,uBAAuB;AACzD,KAAK,eAAe;AACpB;AACA,WAAW,MAAM;AACjB;AACA,KAAK,WAAW;AAChB;AACA;AACA;AACA;AACA;AACA,KAAK,UAAU;AACf;AACA;AACA,KAAK,QAAQ;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,WAAW;AACxB,gBAAgB,WAAW;AAC3B;AACA,KAAK,aAAa;AAClB;AACA;AACA;AACA;AACA,sBAAsB,WAAW;AACjC,yBAAyB,WAAW;AACpC,iBAAiB,WAAW,sBAAsB,cAAc;AAChE,gBAAgB,WAAW;AAC3B;AACA;AACA,QAAQ,OAAO,CAAC,YAAY;AAC5B,8CAA8C,OAAO,CAAC,gBAAgB;AACtE,gCAAgC,WAAW,GAAG,OAAO,CAAC,uBAAuB;AAC7E,sCAAsC,WAAW,GAAG,OAAO,CAAC,0BAA0B;AACtF;AACA;AACA,QAAQ,OAAO,CAAC,MAAM;AACtB,uBAAuB,MAAM;AAC7B;AACA,QAAQ,OAAO,CAAC,eAAe;AAC/B,wBAAwB,WAAW,YAAY,WAAW,GAAG,UAAU;AACvE,aAAa,OAAO,CAAC,QAAQ;AAC7B,mBAAmB,QAAQ;AAC3B;AACA,YAAY,OAAO;AACnB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AAEA,cAAc,aAAa,EAAE,WAAW;;ACpGxC,KAAK,YAAY;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,KAAK,YAAY,GAAG,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,qBAAqB,EAAE,YAAY;AACjD,KAAK,gBAAgB,GAAG,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,0BAA0B,EAAE,gBAAgB;;ACpF1D,KAAK,gBAAgB;AACrB,aAAa,OAAO,CAAC,YAAY;AACjC,cAAc,WAAW;AACzB;AACA;AACA;AACA,cAAc,cAAc,QAAQ,QAAQ,UAAU,aAAa,YAAY,gBAAgB;;ACN/F,KAAK,iBAAiB,GAAG,IAAI,CAAC,gBAAgB;AAC9C,aAAa,OAAO,CAAC,gBAAgB;AACrC;AASA,cAAc,eAAe,QAAQ,QAAQ,UAAU,aAAa,YAAY,iBAAiB;;ACDjG,KAAK,aAAa;AAClB;AACA,wBAAwB,IAAI,CAAC,gBAAgB;AAC7C,iBAAiB,OAAO,CAAC,YAAY,GAAG,gBAAgB;AACxD;AACA;AACA;AACA;AACA;AACA,cAAc,iBAAiB,QAAQ,aAAa;AACpD,cAAc,gBAAgB,6DAA6D,aAAa,KAAK,aAAa","names":[]}
|
package/dist/bridge.global.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
!/*! Obelism Content bridge (@obelism/content), MIT. https://content.obelism.studio/docs/guides/canvas */function(){"use strict";var e;let t="data-cms-uid",r="data-cms-entry",n="data-cms-product",a="data-cms-collection",i="cms_environment",o={clicked:"{rate}% clicked",title:"{clickers} of {viewers} visitors of its page clicked it in the last 30 days ({clicks} clicks)"},s=(e,t)=>e.replace(/\{(\w+)\}/g,(e,r)=>r in t?String(t[r]):e),
|
|
1
|
+
!/*! Obelism Content bridge (@obelism/content), MIT. https://content.obelism.studio/docs/guides/canvas */function(){"use strict";var e;let t="data-cms-uid",r="data-cms-entry",n="data-cms-product",a="data-cms-collection",i="cms_environment",o={clicked:"{rate}% clicked",clickedShort:"{rate}%",title:"{clickers} of {viewers} visitors of its page clicked it in the last 30 days ({clicks} clicks)",noClicks:"No clicks yet in the last 30 days",counting:"{clicks} clicks so far: a click rate once {needed} visitors saw its page ({viewers} yet)"},s="data-numbers-id",l={none:'<path d="M18 6 6 18"/><path d="m6 6 12 12"/>',counting:'<path d="M5 22h14"/><path d="M5 2h14"/><path d="M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22"/><path d="M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2"/>'},d=(e,t)=>e.replace(/\{(\w+)\}/g,(e,r)=>r in t?String(t[r]):e),p=`
|
|
2
2
|
:host { all: initial; }
|
|
3
3
|
.layer {
|
|
4
4
|
position: fixed; inset: 0; pointer-events: none;
|
|
@@ -19,10 +19,25 @@
|
|
|
19
19
|
content: ''; width: 8px; height: 8px; border-radius: 50%;
|
|
20
20
|
background: rgb(212 130 30);
|
|
21
21
|
}
|
|
22
|
-
.badge
|
|
23
|
-
.
|
|
24
|
-
|
|
25
|
-
`,d=(e,t)=>e.height>=64?{place:"inside",top:Math.max(e.top,0)+8,left:e.right-8}:e.right+8+140<=t?{place:"beside",top:e.top+e.height/2,left:e.right+8}:{place:"above",top:e.top-4,left:e.right},p=/(-?\d*\.?\d+)(?:s|l|d)?vh\b/g,c=(e,t)=>(p.lastIndex=0,p.test(e))?e.replace(p,(e,r)=>`${Math.round(Number(r)*t/100*100)/100}px`):null,u=(e,t)=>{for(let r=0;r<e.length;r++){let n=e.item(r),a=c(e.getPropertyValue(n),t);null!==a&&e.setProperty(n,a,e.getPropertyPriority(n))}},g=(e,t)=>{for(let r of Array.from(e)){let{style:e,cssRules:n}=r;e&&u(e,t),n&&g(n,t)}},h="obelism-content-bridge",b="#d58a1f",m=(e="")=>`${e}[${t}]{cursor:pointer;transition:outline-color .15s}${e}[${t}]:hover{outline:2px dashed ${b};outline-offset:2px}${e}[${t}][data-cms-selected]{outline:2px solid ${b};outline-offset:2px}`,f={features:[],selectedUid:null,prompting:!1,canUndo:!1,unsaved:!1,saving:!1,publishing:!1,selecting:!1,stats:{},statsVisible:!1},v=()=>{let e={update:new Set,saved:new Set,published:new Set,change:new Set};return{listeners:e,on:(t,r)=>(e[t].add(r),()=>{e[t].delete(r)}),emit(t,r){for(let n of e[t])try{n(r)}catch(e){console.error("[@obelism/content bridge]",e)}}}},x=()=>Promise.reject(Error("Save and publish in the visual editor itself")),y=()=>Promise.reject(Error("Only while signed in to edit on the site")),w={prompt:()=>Promise.reject(Error("Prompts only work inside the visual editor")),createPage:()=>Promise.reject(Error("New pages are made on the site itself")),createProductPage:()=>Promise.reject(Error("Product pages are made on the site itself")),createCollectionPage:()=>Promise.reject(Error("Collection pages are made on the site itself")),view:y,applyJson:y,openForm:(e,t={})=>(queueMicrotask(()=>t.onError?.("Only while signed in to edit on the site")),{close:()=>{}}),pages:y,openPage:()=>{},undo:()=>{},save:x,publish:x,signOut:()=>{},select:()=>{},setSelecting:()=>{}},k=e=>"number"==typeof e&&Number.isFinite(e)&&e>=0,E=e=>`[${t}="${e.replace(/["\\]/g,"\\$&")}"]`,C=(e,t)=>{let r=v();e.on("saved",()=>r.emit("saved",{})),e.on("published",()=>r.emit("published",{}));let n=!1;return{isEditing:e.isEditing,mode:e.isEditing?"editor":null,entryId:e.entryId,environment:t.get(i),product:null,collection:null,on:(t,a)=>("update"!==t||n||(n=!0,e.on("update",e=>{let t=e?.entry;t&&r.emit("update",{entry:t,selectedUid:null})})),r.on(t,a)),getState:()=>f,...w,destroy:()=>{}}},N=(e,t,r={},...n)=>{let a=e.createElement(t);for(let t of(Object.assign(a,r),n))a.appendChild("string"==typeof t?e.createTextNode(t):t);return a},A='<rect x="10" y="2" width="4" height="20"/><rect x="2" y="10" width="20" height="4"/><circle cx="6" cy="6" r="2.6"/><circle cx="18" cy="6" r="2.6"/><circle cx="6" cy="18" r="2.6"/><circle cx="18" cy="18" r="2.6"/>',L='<circle cx="6" cy="6" r="2.2"/><circle cx="18" cy="6" r="2.2"/><circle cx="12" cy="12" r="2.2" class="accent"/><circle cx="6" cy="18" r="2.2"/><circle cx="18" cy="18" r="2.2"/>',P=(e,t,r)=>{let n=N(e,"span",{className:t});return n.setAttribute("aria-hidden","true"),n.innerHTML=`<svg viewBox="0 0 24 24">${r}</svg>`,n},S=(e,t)=>e.replace(/\{(\w+)\}/g,(e,r)=>r in t?String(t[r]):e),$={page:'<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/>',newPage:'<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/><path d="M9 15h6"/><path d="M12 18v-6"/>',block:'<rect width="18" height="18" x="3" y="3" rx="2"/><path d="M7 8h10"/><path d="M7 12h6"/>',undo:'<path d="M9 14 4 9l5-5"/><path d="M4 9h10.5a5.5 5.5 0 0 1 0 11H11"/>',close:'<path d="M18 6 6 18"/><path d="m6 6 12 12"/>',minimize:'<path d="m6 9 6 6 6-6"/>',expand:'<path d="m18 15-6-6-6 6"/>',chevrons:'<path d="m7 15 5 5 5-5"/><path d="m7 9 5-5 5 5"/>',search:'<circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/>',check:'<path d="M20 6 9 17l-5-5"/>',mark:`<g fill="currentColor" stroke="none">${A}</g>`,send:'<path d="M3.714 3.048a.498.498 0 0 0-.683.627l2.843 7.627a2 2 0 0 1 0 1.396l-2.842 7.627a.498.498 0 0 0 .682.627l18-8.5a.5.5 0 0 0 0-.904z"/><path d="M6 12h16"/>',arrowUp:'<path d="M12 19V5"/><path d="m5 12 7-7 7 7"/>',dash:'<path d="M5 12h14"/>',eye:'<path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12Z"/><circle cx="12" cy="12" r="3"/>',eyeOff:'<path d="M10.7 5.1A10 10 0 0 1 12 5c6.5 0 10 7 10 7a17 17 0 0 1-2.2 3.2"/><path d="M6.6 6.6A17 17 0 0 0 2 12s3.5 7 10 7a9.7 9.7 0 0 0 5.4-1.6"/><path d="M9.9 9.9a3 3 0 0 0 4.2 4.2"/><path d="m2 2 20 20"/>',plus:'<path d="M5 12h14"/><path d="M12 5v14"/>',scope:'<rect x="3" y="3" width="18" height="18" rx="3" stroke-dasharray="3 3"/>',alert:'<circle cx="12" cy="12" r="10"/><path d="M12 8v4"/><path d="M12 16h.01"/>'},M=(e,t)=>P(e,"icon",$[t]),U=(e,t,r,{onReady:n,onError:a,onEscape:i})=>{let o=null,s=!1,l=null;return{get mounted(){return null!==o},get loading(){return s},get error(){return l},mount(){s=!0,l=null;let d=e.openForm(t,{title:r,onReady:()=>{o===d&&(s=!1,n())},onError:e=>{o===d&&(s=!1,l=e,a(e))},onEscape:()=>{o===d&&i?.()}});o=d},unmount(){o?.close(),o=null,s=!1,l=null}}},z={open:"Edit with a prompt",placeholder:"Describe a change, like “make it warmer”",send:"Apply",undo:"Undo",minimize:"Minimize, to see the page",scopeEntry:"Whole page",working:"Working on it…",publish:"Publish",saving:"Saving…",publishing:"Publishing…",saved:"Saved as a draft",published:"Published",unsaved:"Unsaved changes",signOut:"Exit",viewingDrafts:"Viewing drafts",newPage:"New page",newPageCancel:"Edit this page instead",newPagePlaceholder:"Describe the new page, e.g. “a pricing page for agencies”",path:"Path",pathPlaceholder:"/pricing",creating:"Writing the page…",created:"Opening the new page…",modes:"Edit with",modePrompt:"Ask",form:"Edit fields",formTitle:"The content form",formLoading:"Opening the form…",pages:"Pages",pagesSearch:"Find a page",pagesLoading:"Loading pages…",pagesEmpty:"No pages match",pageCurrent:"This page",pageDraft:"Draft",pageChanged:"Changed",addProductPage:"Add a product page",addingProductPage:"Making the product page…",addedProductPage:"Opening the product page…",productPageHint:"This product has no page yet. Add one for what the store doesn’t say.",addCollectionPage:"Add a collection page",addingCollectionPage:"Making the collection page…",addedCollectionPage:"Opening the collection page…",collectionPageHint:"This collection has no page yet. Add one for what goes around its products."},I={...z,close:"Close",expand:"Expand",scopeNoPage:"Whole page",scopeBlock:"Selected block",clearBlock:"Edit the whole page instead",save:"Save",selectHint:"Click a block to change only that block"},O={...z,editor:"Obelism editor",editing:"Editing",hideOutlines:"Show the page without outlines",environment:"Environment",envProduction:"live",scopeNoteBlock:"Working on {name}. Click another block to switch.",scopeNotePage:"Working on the whole page. Click a block to change only that block.",block:"Block",previewChip:"{name} \xb7 preview",askIntro:"Describe a change and Obelism shows it on the page. Nothing is stored until you keep it and save.",you:"You",obelism:"Obelism",suggested:"Suggested by Obelism",keep:"Keep it",retry:"Try another",retryPrompt:"{prompt}\n\nWrite a different version than the last one.",kept:"Kept",undone:"Undone",before:"Before",after:"After",emptyValue:"Empty",moreChanges:"{count} more changed",keepFirst:"Keep or undo the suggestion to save",keepBeforeFields:"Keep or undo the suggestion before editing fields.",saveDraft:"Save draft",upToDate:"No unsaved changes",saveFailed:"Couldn’t save",publishFailed:"Couldn’t publish",tryAgain:"Try again"},j=(e,t,r,{onLoad:n,onClose:a})=>{let i=N(e,"input",{type:"text",placeholder:r.pagesSearch,autocomplete:"off",spellcheck:!1});i.setAttribute("role","combobox"),i.setAttribute("aria-label",r.pagesSearch),i.setAttribute("aria-autocomplete","list"),i.setAttribute("aria-expanded","true"),i.setAttribute("aria-controls","obelism-pages");let o=N(e,"label",{className:"search"},M(e,"search"),i),s=N(e,"ul",{className:"options",id:"obelism-pages"});s.setAttribute("role","listbox"),s.setAttribute("aria-label",r.pages);let l=N(e,"p",{className:"empty"}),d=null,p=null,c=null,u=0,g=()=>{let e=i.value.trim().toLowerCase();return(d??[]).filter(t=>!e||t.name.toLowerCase().includes(e)||t.url.toLowerCase().includes(e)||`/${t.path}`.toLowerCase().includes(e))},h=e=>{if(e.entryId===t.entryId)return a();t.openPage(e)},b=()=>{let n=g();u=Math.max(0,Math.min(u,n.length-1)),s.textContent="",n.forEach((n,a)=>{let i=N(e,"li",{className:`option${a===u?" active":""}`,id:`obelism-page-${a}`},N(e,"span",{className:"option-text"},N(e,"span",{textContent:n.name}),N(e,"span",{className:"option-path",textContent:n.url})));if(i.setAttribute("role","option"),i.setAttribute("aria-selected",String(a===u)),"published"!==n.status&&i.appendChild(N(e,"span",{className:"badge",textContent:"draft"===n.status?r.pageDraft:r.pageChanged})),n.entryId===t.entryId){i.setAttribute("aria-current","page");let t=M(e,"check");t.removeAttribute("aria-hidden"),t.setAttribute("role","img"),t.setAttribute("aria-label",r.pageCurrent),i.appendChild(t)}i.addEventListener("click",()=>h(n)),s.appendChild(i)});let a=s.children[u];a?(i.setAttribute("aria-activedescendant",a.id),a.scrollIntoView?.({block:"nearest"})):i.removeAttribute("aria-activedescendant"),l.textContent=(c??(d?"":r.pagesLoading))||(0===n.length?r.pagesEmpty:""),l.hidden=!l.textContent,l.className=`empty${c?" error":""}`},m=()=>(p??(p=t.pages().then(e=>{d=e,c=null,b(),n()},e=>{p=null,c=e instanceof Error?e.message:String(e),b(),n()})),p);return i.addEventListener("input",()=>{u=0,b()}),i.addEventListener("keydown",e=>{let t=s.children.length;if("ArrowDown"===e.key||"ArrowUp"===e.key){if(e.preventDefault(),0===t)return;u=(u+("ArrowDown"===e.key?1:-1)+t)%t,b()}else if("Enter"!==e.key||e.isComposing)"Escape"===e.key&&(e.preventDefault(),a());else{e.preventDefault();let t=g()[u];t&&h(t)}}),{searchRow:o,search:i,list:s,note:l,get pages(){return d},get error(){return c},current:()=>d?.find(({entryId:e})=>e===t.entryId)??null,fetch:m,forget(){d=null,p=null},reset(){i.value="",u=Math.max(0,(d??[]).findIndex(({entryId:e})=>e===t.entryId)),m(),b()},render:b}},R=e=>e instanceof Error?e.message:String(e),T=(e,t,r)=>{let n="site"===e.mode,a=n&&t.features.includes("create"),i=n&&null===e.entryId,o=i&&a?e.product?"product":e.collection?"collection":null:null;return{site:n,canCreate:a,pageless:i,shopHere:o,onlyNew:i&&a&&!o&&!r}},D=(e,t)=>"collection"===t?{add:e.addCollectionPage,adding:e.addingCollectionPage,hint:e.collectionPageHint}:{add:e.addProductPage,adding:e.addingProductPage,hint:e.productPageHint},q=async(e,t)=>{try{if(e.product)return await e.createProductPage(),{text:t.addedProductPage,error:!1};return await e.createCollectionPage(),{text:t.addedCollectionPage,error:!1}}catch(e){return{text:R(e),error:!0}}},F=async(e,t)=>{try{return await e[t](),null}catch(e){return R(e)}},B="obelism-content-prompt-side",_=`
|
|
22
|
+
.badge:focus-visible, .tag:focus-visible { outline: 2px solid rgb(212 130 30); outline-offset: 2px; }
|
|
23
|
+
.tag {
|
|
24
|
+
position: absolute; transform: translate(-50%, -50%);
|
|
25
|
+
display: grid; place-items: center; width: 20px; height: 20px; padding: 0;
|
|
26
|
+
cursor: pointer; pointer-events: auto; border: 0; border-radius: 50%;
|
|
27
|
+
color: rgb(242 240 236); background: rgb(23 22 20 / .88);
|
|
28
|
+
box-shadow: 0 4px 10px -6px rgb(23 22 20 / .5);
|
|
29
|
+
}
|
|
30
|
+
.tag::after { content: ''; position: absolute; inset: -6px; }
|
|
31
|
+
.tag[data-status='counting'] { color: rgb(212 130 30); }
|
|
32
|
+
.tag[data-status='rate'] {
|
|
33
|
+
width: auto; height: 20px; padding: 0 7px; border-radius: 5em;
|
|
34
|
+
font-size: 11px; transform: translate(-70%, -50%);
|
|
35
|
+
}
|
|
36
|
+
.tag svg {
|
|
37
|
+
width: 12px; height: 12px; fill: none; stroke: currentColor;
|
|
38
|
+
stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round;
|
|
39
|
+
}
|
|
40
|
+
`,c=(e,{selector:r,onSelect:n,checked:a,labels:i})=>{let c=e.document,u={...o,...i},g=c.createElement("div");g.setAttribute("data-obelism-stats","");let h=g.attachShadow({mode:"open"}),b=c.createElement("style");b.textContent=p;let m=c.createElement("div");m.className="layer",h.append(b,m),c.body.appendChild(g);let f={},v=!1,x=null,y=(r,a,i)=>{let o,s=a.getBoundingClientRect();if(!s.width&&!s.height||s.bottom<0||s.top>e.innerHeight)return;let p=f[r],g=p&&0!==p.clicks?p.viewers<20?"counting":"rate":"none",h=c.createElement("button");h.type="button",h.dataset.uid=r,h.dataset.status=g;let b=p?Math.round(100*p.rate):0;h.title="rate"===g?d(u.title,{clickers:p.clickers,viewers:p.viewers,clicks:p.clicks}):"none"===g?u.noClicks:d(u.counting,{clicks:p.clicks,viewers:p.viewers,needed:20});let{top:v,left:x}="rate"===g&&s.height>=64?{top:Math.max(s.top,0)+8,left:s.right-8}:(o={width:e.innerWidth,height:e.innerHeight},{top:Math.min(Math.max(s.top,10),o.height-10),left:Math.min(s.right,o.width-10)});"rate"===g&&s.height>=64?(h.className="badge",h.textContent=d(u.clicked,{rate:b})):(h.className="tag","rate"===g?h.textContent=d(u.clickedShort,{rate:b}):h.innerHTML=`<svg viewBox="0 0 24 24" aria-hidden="true">${l[g]}</svg>`,h.setAttribute("aria-label",h.title)),h.style.top=`${v}px`,h.style.left=`${x}px`;let y=i.has(r)?r:a.closest(`[${t}]`)?.getAttribute(t);y&&h.addEventListener("click",()=>n(y)),m.appendChild(h)},w=()=>{if(x=null,m.replaceChildren(),m.hidden=!v,!v)return;let e=new Set;for(let r of c.querySelectorAll(`[${t}]`))e.add(r.getAttribute(t)??"");let n=a??(t=>e.has(t)),i=new Set;for(let t of c.querySelectorAll(`[${s}]`)){let r=t.getAttribute(s);r&&(f[r]||n(r))&&(i.add(r),y(r,t,e))}for(let t of Object.keys(f)){if(i.has(t)||!e.has(t))continue;let n=c.querySelector(r(t));n&&y(t,n,e)}},k=()=>{null===x&&v&&(x=e.requestAnimationFrame(w))};e.addEventListener("scroll",k,{capture:!0,passive:!0}),e.addEventListener("resize",k);let E=e.MutationObserver,C="function"==typeof E?new E(k):null;return C?.observe(c.body,{childList:!0,subtree:!0}),{update(t,r){f=t,v=r,null!==x&&(e.cancelAnimationFrame?.(x),x=null),w()},refresh:k,destroy(){null!==x&&e.cancelAnimationFrame?.(x),e.removeEventListener("scroll",k,{capture:!0}),e.removeEventListener("resize",k),C?.disconnect(),g.remove()}}},u=/(-?\d*\.?\d+)(?:s|l|d)?vh\b/g,g=(e,t)=>(u.lastIndex=0,u.test(e))?e.replace(u,(e,r)=>`${Math.round(Number(r)*t/100*100)/100}px`):null,h=(e,t)=>{for(let r=0;r<e.length;r++){let n=e.item(r),a=g(e.getPropertyValue(n),t);null!==a&&e.setProperty(n,a,e.getPropertyPriority(n))}},b=(e,t)=>{for(let r of Array.from(e)){let{style:e,cssRules:n}=r;e&&h(e,t),n&&b(n,t)}},m="obelism-content-bridge",f="#d58a1f",v=(e="")=>`${e}[${t}]{cursor:pointer;transition:outline-color .15s}${e}[${t}]:hover{outline:2px dashed ${f};outline-offset:2px}${e}[${t}][data-cms-selected]{outline:2px solid ${f};outline-offset:2px}`,x={features:[],selectedUid:null,prompting:!1,canUndo:!1,unsaved:!1,saving:!1,publishing:!1,selecting:!1,stats:{},statsVisible:!1},y=()=>{let e={update:new Set,saved:new Set,published:new Set,change:new Set};return{listeners:e,on:(t,r)=>(e[t].add(r),()=>{e[t].delete(r)}),emit(t,r){for(let n of e[t])try{n(r)}catch(e){console.error("[@obelism/content bridge]",e)}}}},w=()=>Promise.reject(Error("Save and publish in the visual editor itself")),k=()=>Promise.reject(Error("Only while signed in to edit on the site")),E={prompt:()=>Promise.reject(Error("Prompts only work inside the visual editor")),createPage:()=>Promise.reject(Error("New pages are made on the site itself")),createProductPage:()=>Promise.reject(Error("Product pages are made on the site itself")),createCollectionPage:()=>Promise.reject(Error("Collection pages are made on the site itself")),view:k,applyJson:k,openForm:(e,t={})=>(queueMicrotask(()=>t.onError?.("Only while signed in to edit on the site")),{close:()=>{}}),pages:k,openPage:()=>{},undo:()=>{},save:w,publish:w,signOut:()=>{},select:()=>{},setSelecting:()=>{}},C=e=>"number"==typeof e&&Number.isFinite(e)&&e>=0,A=e=>{if(!e||"object"!=typeof e||Array.isArray(e))return{};let t={};for(let[r,n]of Object.entries(e)){let{clicks:e,clickers:a,viewers:i,rate:o}=n??{};C(e)&&C(a)&&C(i)&&C(o)&&(t[r]={clicks:e,clickers:a,viewers:i,rate:o})}return t},N=e=>`[${t}="${e.replace(/["\\]/g,"\\$&")}"]`,L=(e,t)=>{let r=y();e.on("saved",()=>r.emit("saved",{})),e.on("published",()=>r.emit("published",{}));let n=!1;return{isEditing:e.isEditing,mode:e.isEditing?"editor":null,entryId:e.entryId,environment:t.get(i),product:null,collection:null,on:(t,a)=>("update"!==t||n||(n=!0,e.on("update",e=>{let t=e?.entry;t&&r.emit("update",{entry:t,selectedUid:null})})),r.on(t,a)),getState:()=>x,...E,destroy:()=>{}}},S=(e,t,r={},...n)=>{let a=e.createElement(t);for(let t of(Object.assign(a,r),n))a.appendChild("string"==typeof t?e.createTextNode(t):t);return a},P='<rect x="10" y="2" width="4" height="20"/><rect x="2" y="10" width="20" height="4"/><circle cx="6" cy="6" r="2.6"/><circle cx="18" cy="6" r="2.6"/><circle cx="6" cy="18" r="2.6"/><circle cx="18" cy="18" r="2.6"/>',$='<circle cx="6" cy="6" r="2.2"/><circle cx="18" cy="6" r="2.2"/><circle cx="12" cy="12" r="2.2" class="accent"/><circle cx="6" cy="18" r="2.2"/><circle cx="18" cy="18" r="2.2"/>',M=(e,t,r)=>{let n=S(e,"span",{className:t});return n.setAttribute("aria-hidden","true"),n.innerHTML=`<svg viewBox="0 0 24 24">${r}</svg>`,n},U=(e,t)=>e.replace(/\{(\w+)\}/g,(e,r)=>r in t?String(t[r]):e),z={page:'<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/>',newPage:'<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/><path d="M9 15h6"/><path d="M12 18v-6"/>',block:'<rect width="18" height="18" x="3" y="3" rx="2"/><path d="M7 8h10"/><path d="M7 12h6"/>',undo:'<path d="M9 14 4 9l5-5"/><path d="M4 9h10.5a5.5 5.5 0 0 1 0 11H11"/>',close:'<path d="M18 6 6 18"/><path d="m6 6 12 12"/>',minimize:'<path d="m6 9 6 6 6-6"/>',expand:'<path d="m18 15-6-6-6 6"/>',chevrons:'<path d="m7 15 5 5 5-5"/><path d="m7 9 5-5 5 5"/>',search:'<circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/>',check:'<path d="M20 6 9 17l-5-5"/>',mark:`<g fill="currentColor" stroke="none">${P}</g>`,send:'<path d="M3.714 3.048a.498.498 0 0 0-.683.627l2.843 7.627a2 2 0 0 1 0 1.396l-2.842 7.627a.498.498 0 0 0 .682.627l18-8.5a.5.5 0 0 0 0-.904z"/><path d="M6 12h16"/>',arrowUp:'<path d="M12 19V5"/><path d="m5 12 7-7 7 7"/>',dash:'<path d="M5 12h14"/>',eye:'<path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12Z"/><circle cx="12" cy="12" r="3"/>',eyeOff:'<path d="M10.7 5.1A10 10 0 0 1 12 5c6.5 0 10 7 10 7a17 17 0 0 1-2.2 3.2"/><path d="M6.6 6.6A17 17 0 0 0 2 12s3.5 7 10 7a9.7 9.7 0 0 0 5.4-1.6"/><path d="M9.9 9.9a3 3 0 0 0 4.2 4.2"/><path d="m2 2 20 20"/>',plus:'<path d="M5 12h14"/><path d="M12 5v14"/>',scope:'<rect x="3" y="3" width="18" height="18" rx="3" stroke-dasharray="3 3"/>',alert:'<circle cx="12" cy="12" r="10"/><path d="M12 8v4"/><path d="M12 16h.01"/>'},O=(e,t)=>M(e,"icon",z[t]),I=(e,t,r,{onReady:n,onError:a,onEscape:i})=>{let o=null,s=!1,l=null;return{get mounted(){return null!==o},get loading(){return s},get error(){return l},mount(){s=!0,l=null;let d=e.openForm(t,{title:r,onReady:()=>{o===d&&(s=!1,n())},onError:e=>{o===d&&(s=!1,l=e,a(e))},onEscape:()=>{o===d&&i?.()}});o=d},unmount(){o?.close(),o=null,s=!1,l=null}}},j={open:"Edit with a prompt",placeholder:"Describe a change, like “make it warmer”",send:"Apply",undo:"Undo",minimize:"Minimize, to see the page",scopeEntry:"Whole page",working:"Working on it…",publish:"Publish",saving:"Saving…",publishing:"Publishing…",saved:"Saved as a draft",published:"Published",unsaved:"Unsaved changes",signOut:"Exit",viewingDrafts:"Viewing drafts",newPage:"New page",newPageCancel:"Edit this page instead",newPagePlaceholder:"Describe the new page, e.g. “a pricing page for agencies”",path:"Path",pathPlaceholder:"/pricing",creating:"Writing the page…",created:"Opening the new page…",modes:"Edit with",modePrompt:"Ask",form:"Edit fields",formTitle:"The content form",formLoading:"Opening the form…",pages:"Pages",pagesSearch:"Find a page",pagesLoading:"Loading pages…",pagesEmpty:"No pages match",pageCurrent:"This page",pageDraft:"Draft",pageChanged:"Changed",addProductPage:"Add a product page",addingProductPage:"Making the product page…",addedProductPage:"Opening the product page…",productPageHint:"This product has no page yet. Add one for what the store doesn’t say.",addCollectionPage:"Add a collection page",addingCollectionPage:"Making the collection page…",addedCollectionPage:"Opening the collection page…",collectionPageHint:"This collection has no page yet. Add one for what goes around its products."},T={...j,close:"Close",expand:"Expand",scopeNoPage:"Whole page",scopeBlock:"Selected block",clearBlock:"Edit the whole page instead",save:"Save",selectHint:"Click a block to change only that block"},R={...j,editor:"Obelism editor",editing:"Editing",hideOutlines:"Show the page without outlines",environment:"Environment",envProduction:"live",scopeNoteBlock:"Working on {name}. Click another block to switch.",scopeNotePage:"Working on the whole page. Click a block to change only that block.",scopeUp:"Up to {name}",block:"Block",previewChip:"{name} \xb7 preview",askIntro:"Describe a change and Obelism shows it on the page. Nothing is stored until you keep it and save.",you:"You",obelism:"Obelism",suggested:"Suggested by Obelism",keep:"Keep it",retry:"Try another",retryPrompt:"{prompt}\n\nWrite a different version than the last one.",kept:"Kept",undone:"Undone",before:"Before",after:"After",emptyValue:"Empty",moreChanges:"{count} more changed",keepFirst:"Keep or undo the suggestion to save",keepBeforeFields:"Keep or undo the suggestion before editing fields.",saveDraft:"Save draft",upToDate:"No unsaved changes",saveFailed:"Couldn’t save",publishFailed:"Couldn’t publish",tryAgain:"Try again"},D=(e,t,r,{onLoad:n,onClose:a})=>{let i=S(e,"input",{type:"text",placeholder:r.pagesSearch,autocomplete:"off",spellcheck:!1});i.setAttribute("role","combobox"),i.setAttribute("aria-label",r.pagesSearch),i.setAttribute("aria-autocomplete","list"),i.setAttribute("aria-expanded","true"),i.setAttribute("aria-controls","obelism-pages");let o=S(e,"label",{className:"search"},O(e,"search"),i),s=S(e,"ul",{className:"options",id:"obelism-pages"});s.setAttribute("role","listbox"),s.setAttribute("aria-label",r.pages);let l=S(e,"p",{className:"empty"}),d=null,p=null,c=null,u=0,g=()=>{let e=i.value.trim().toLowerCase();return(d??[]).filter(t=>!e||t.name.toLowerCase().includes(e)||t.url.toLowerCase().includes(e)||`/${t.path}`.toLowerCase().includes(e))},h=e=>{if(e.entryId===t.entryId)return a();t.openPage(e)},b=()=>{let n=g();u=Math.max(0,Math.min(u,n.length-1)),s.textContent="",n.forEach((n,a)=>{let i=S(e,"li",{className:`option${a===u?" active":""}`,id:`obelism-page-${a}`},S(e,"span",{className:"option-text"},S(e,"span",{textContent:n.name}),S(e,"span",{className:"option-path",textContent:n.url})));if(i.setAttribute("role","option"),i.setAttribute("aria-selected",String(a===u)),"published"!==n.status&&i.appendChild(S(e,"span",{className:"badge",textContent:"draft"===n.status?r.pageDraft:r.pageChanged})),n.entryId===t.entryId){i.setAttribute("aria-current","page");let t=O(e,"check");t.removeAttribute("aria-hidden"),t.setAttribute("role","img"),t.setAttribute("aria-label",r.pageCurrent),i.appendChild(t)}i.addEventListener("click",()=>h(n)),s.appendChild(i)});let a=s.children[u];a?(i.setAttribute("aria-activedescendant",a.id),a.scrollIntoView?.({block:"nearest"})):i.removeAttribute("aria-activedescendant"),l.textContent=(c??(d?"":r.pagesLoading))||(0===n.length?r.pagesEmpty:""),l.hidden=!l.textContent,l.className=`empty${c?" error":""}`},m=()=>(p??(p=t.pages().then(e=>{d=e,c=null,b(),n()},e=>{p=null,c=e instanceof Error?e.message:String(e),b(),n()})),p);return i.addEventListener("input",()=>{u=0,b()}),i.addEventListener("keydown",e=>{let t=s.children.length;if("ArrowDown"===e.key||"ArrowUp"===e.key){if(e.preventDefault(),0===t)return;u=(u+("ArrowDown"===e.key?1:-1)+t)%t,b()}else if("Enter"!==e.key||e.isComposing)"Escape"===e.key&&(e.preventDefault(),a());else{e.preventDefault();let t=g()[u];t&&h(t)}}),{searchRow:o,search:i,list:s,note:l,get pages(){return d},get error(){return c},current:()=>d?.find(({entryId:e})=>e===t.entryId)??null,fetch:m,forget(){d=null,p=null},reset(){i.value="",u=Math.max(0,(d??[]).findIndex(({entryId:e})=>e===t.entryId)),m(),b()},render:b}},q=e=>e instanceof Error?e.message:String(e),F=(e,t,r)=>{let n="site"===e.mode,a=n&&t.features.includes("create"),i=n&&null===e.entryId,o=i&&a?e.product?"product":e.collection?"collection":null:null;return{site:n,canCreate:a,pageless:i,shopHere:o,onlyNew:i&&a&&!o&&!r}},B=(e,t)=>"collection"===t?{add:e.addCollectionPage,adding:e.addingCollectionPage,hint:e.collectionPageHint}:{add:e.addProductPage,adding:e.addingProductPage,hint:e.productPageHint},V=async(e,t)=>{try{if(e.product)return await e.createProductPage(),{text:t.addedProductPage,error:!1};return await e.createCollectionPage(),{text:t.addedCollectionPage,error:!1}}catch(e){return{text:q(e),error:!0}}},H=async(e,t)=>{try{return await e[t](),null}catch(e){return q(e)}},_="obelism-content-prompt-side",W=`
|
|
26
41
|
:host { all: initial; }
|
|
27
42
|
* { box-sizing: border-box; font: inherit; color: inherit; margin: 0; }
|
|
28
43
|
.root {
|
|
@@ -253,7 +268,7 @@ button.chip:disabled { opacity: .5; }
|
|
|
253
268
|
.empty { padding: 8px 12px; color: rgb(var(--theme-foreground-muted-rgb)); }
|
|
254
269
|
.empty.error { color: var(--theme-error); }
|
|
255
270
|
[hidden] { display: none !important; }
|
|
256
|
-
`,
|
|
271
|
+
`,Y=(e,t,r={})=>{let n,a={...T,...r.labels},i=S(e,"div");i.setAttribute("data-obelism-content-prompt","");let o=i.attachShadow({mode:"open"}),s="site"===t.mode,l=S(e,"span",{textContent:a.open}),d=S(e,"button",{className:"pill",type:"button"},l,((n=O(e,"mark")).classList.add("mark"),n)),p=S(e,"span",{className:"pill compact"},`${a.viewingDrafts} \xb7 `),c=S(e,"button",{className:"link",type:"button",textContent:a.signOut});p.appendChild(c);let u=S(e,"p",{className:"status"});u.setAttribute("role","status");let g=S(e,"textarea",{placeholder:a.placeholder,rows:1});g.setAttribute("aria-label",a.open);let h=S(e,"div",{className:"form-loader",textContent:a.formLoading});h.setAttribute("role","status");let b=S(e,"div",{className:"form"},h),m=O(e,"page"),f=O(e,"block"),v=S(e,"span"),x=S(e,"button",{type:"button",title:a.clearBlock});x.setAttribute("aria-label",a.clearBlock),x.appendChild(O(e,"close"));let y=S(e,"span",{className:"chip scope"},m,f,v,x),w=S(e,"button",{className:"action chip",type:"button"},O(e,"undo"),a.undo),k=t=>{let r=S(e,"button",{type:"button",textContent:t});return r.setAttribute("aria-pressed","false"),r},E=k(a.modePrompt),C=k(a.form),A=S(e,"span",{className:"modes"},E,C);A.setAttribute("role","group"),A.setAttribute("aria-label",a.modes);let N=S(e,"button",{className:"action chip",type:"button"},O(e,"newPage"),a.newPage),L=S(e,"button",{className:"action chip product",type:"button"},O(e,"newPage"),a.addProductPage),P=S(e,"button",{type:"button",title:a.newPageCancel});P.setAttribute("aria-label",a.newPageCancel),P.appendChild(O(e,"close"));let $=S(e,"span",{className:"chip scope"},O(e,"newPage"),S(e,"span",{textContent:a.newPage}),P),M=S(e,"input",{type:"text",placeholder:a.pathPlaceholder,autocomplete:"off",spellcheck:!1}),U=S(e,"label",{className:"path"},S(e,"span",{textContent:a.path}),M),z=S(e,"button",{className:"close icon-button",type:"button",title:a.close},O(e,"close"));z.setAttribute("aria-label",a.close);let j=O(e,"minimize"),R=O(e,"expand"),Y=S(e,"button",{className:"icon-button",type:"button"},j,R),X=S(e,"button",{className:"action primary icon-button",type:"submit"},S(e,"span",{className:"visually-hidden",textContent:a.send}),O(e,"send"));X.title=a.send;let K=S(e,"span",{className:"divider"}),J=S(e,"div",{className:"toolbar"},y,$,A,w,L,N,S(e,"span",{className:"spacer"}),Y,z,K,X),Z=S(e,"span",{textContent:a.pages}),G=S(e,"button",{className:"chip page-chip",type:"button",title:a.pages},O(e,"page"),Z,O(e,"chevrons"));G.setAttribute("aria-haspopup","listbox"),G.setAttribute("aria-expanded","false"),G.setAttribute("aria-controls","obelism-pages");let Q=D(e,t,a,{onLoad:()=>eE(),onClose:()=>eL(!1)}),ee=S(e,"div",{className:"pages"},Q.searchRow,Q.list,Q.note),et=S(e,"slot");et.name="actions-footer";let er=S(e,"slot");er.name="actions-bar",r.actions&&(r.actions.slot="actions-bar",i.appendChild(r.actions));let en=S(e,"span",{className:"unsaved"});en.appendChild(S(e,"span",{className:"dot"})),en.appendChild(e.createTextNode(a.unsaved));let ea=S(e,"button",{className:"link",type:"button",textContent:a.signOut}),ei=S(e,"button",{className:"action chip",type:"button",textContent:a.save}),eo=S(e,"button",{className:"action chip",type:"button",textContent:a.publish}),es=S(e,"div",{className:"footer"},G,en,S(e,"span",{className:"spacer"}),et,ea,ei,eo),el=S(e,"form",{className:"panel"},u,U,g,b,J,ee,es),ed=S(e,"div",{className:"root"},S(e,"div",{className:"bar"},d,p,er),el);o.append(S(e,"style",{textContent:W}),ed);let ep=e.defaultView,ec=e=>{"center"===e?delete ed.dataset.side:ed.dataset.side=e};ec((()=>{try{let e=ep?.localStorage.getItem(_);return"left"===e||"right"===e?e:"center"}catch{return"center"}})());let eu=null,eg=!1;ed.addEventListener("pointerdown",e=>{if(eg=!1,0!==e.button||!e.isPrimary)return;let t=e.target.closest("button, input, textarea, select, iframe, a, label, .pages, .form");if(t&&t!==d)return;let{left:r,right:n}=ed.getBoundingClientRect();eu={id:e.pointerId,startX:e.clientX,x:e.clientX,velocity:0,time:e.timeStamp,moved:!1,min:Math.min(0,16-r),max:Math.max(0,(ep?.innerWidth??0)-16-n)}}),ed.addEventListener("pointermove",e=>{if(!eu||e.pointerId!==eu.id)return;let t=e.clientX-eu.startX;if(!eu.moved){if(6>Math.abs(t))return;eu.moved=!0,ed.classList.add("dragging");try{ed.setPointerCapture(e.pointerId)}catch{}}let r=e.timeStamp-eu.time;r>0&&(eu.velocity=(e.clientX-eu.x)/r),eu.x=e.clientX,eu.time=e.timeStamp;let n=Math.min(Math.max(t,eu.min),eu.max);ed.style.translate=`${n+(t-n)/3}px 0`});let eh=e=>{if(!eu||e.pointerId!==eu.id)return;let{moved:t,x:r,velocity:n,time:a}=eu;if(eu=null,!t)return;eg=!0;let i=ed.getBoundingClientRect().left,o=ep?.innerWidth??0,s=r+(e.timeStamp-a>80?0:Math.min(Math.max(150*n,-120),120)),l=s<o/3?"left":s>2*o/3?"right":"center";ec(l),ed.style.translate="";let d=ed.getBoundingClientRect().left;ed.style.translate=`${i-d}px 0`,ed.offsetWidth,ed.classList.remove("dragging"),ed.style.translate="";try{ep?.localStorage.setItem(_,l)}catch{}};ed.addEventListener("pointerup",eh),ed.addEventListener("pointercancel",eh),ed.addEventListener("click",e=>{eg&&(eg=!1,e.preventDefault(),e.stopPropagation())},!0);let eb=!1,em=!1,ef=!1,ev=null,ex=!1,ey=I(t,b,a.formTitle,{onReady:()=>{ev=null,eE()},onError:e=>{ev={text:e,error:!0},eE()}}),ew=!1,ek=e=>{let n=e.features.includes("prompt"),i=e.saving||e.publishing,o=e.prompting||i;ed.hidden=!n&&!s,d.hidden=eb||!n,p.hidden=n||!s,el.hidden=!eb||!n;let{canCreate:k,pageless:S,shopHere:z,onlyNew:O}=F(t,e,r.promptWithoutPage),I=null!==z,T=B(a,z);L.lastChild.textContent=T.add,k||(ef=!1),O&&(ef=!0),(ef||S||!s)&&(ex=!1);let D=eb&&n&&ex;D&&!ey.mounted?ey.mount():!D&&ey.mounted&&ey.unmount();let q=I&&!ef;l.textContent=q?T.add:O?a.newPage:a.open,P.hidden=O,y.hidden=ef||q,$.hidden=!ef,L.hidden=!q,L.disabled=o,N.hidden=ef||ex||!k,N.disabled=o,em&&(ew=!1),U.hidden=!ef||ew||em,M.disabled=o,g.hidden=ex||ew||em||q,b.hidden=!ex||ew||em,b.classList.toggle("loading",ey.loading),h.hidden=!ey.loading,J.hidden=ew,ee.hidden=!ew,g.placeholder=ef?a.newPagePlaceholder:a.placeholder,v.textContent=e.selectedUid?a.scopeBlock:S?a.scopeNoPage:a.scopeEntry,x.hidden=!e.selectedUid,m.hidden=!!e.selectedUid,f.hidden=!e.selectedUid,A.hidden=!s||ef||S||!e.features.includes("form"),E.setAttribute("aria-pressed",String(!ex)),C.setAttribute("aria-pressed",String(ex)),A.querySelectorAll("button").forEach(e=>{e.disabled=o}),w.hidden=ef||!e.canUndo,w.disabled=o,X.hidden=ex||em||q,K.hidden=ex||em||q;let V=em?a.expand:a.minimize;Y.title=V,Y.setAttribute("aria-label",V),Y.setAttribute("aria-expanded",String(!em)),j.hidden=em,R.hidden=!em,X.disabled=o||""===g.value.trim()||ef&&""===M.value.trim(),g.disabled=o,ei.hidden=!e.features.includes("save")||S,ei.disabled=o||!e.unsaved,ei.textContent=e.saving?a.saving:a.save,eo.hidden=!e.features.includes("publish")||S,eo.disabled=o,eo.textContent=e.publishing?a.publishing:a.publish,ea.hidden=!s||!1===r.signOut,c.hidden=!1===r.signOut,r.actions&&(r.actions.slot=eb&&n?"actions-footer":"actions-bar"),es.hidden=!s,en.hidden=!e.unsaved,G.hidden=!s,G.setAttribute("aria-expanded",String(ew)),Z.textContent=Q.current()?.name??a.pages;let H=ex&&ey.loading&&!ew,_=e.prompting,W=e.prompting?ef?a.creating:q?T.adding:a.working:H?"":ev?.text??(q?T.hint:!s||ef||ew||e.selectedUid?"":a.selectHint);u.textContent=W,u.hidden=!W||em,u.className=`status${_?" working":""}${!o&&!H&&ev?.error?" error":""}`},eE=()=>ek(t.getState()),eC=()=>{g.style.height="auto",g.style.height=`${g.scrollHeight}px`},eA=e=>{ex!==e&&(ex=e,ev=null,eE(),ex||g.focus())},eN=async()=>{if(ex)return;let e=g.value.trim();if(e&&!t.getState().prompting){ev=null;try{if(ef){let r=M.value.trim();if(!r)return M.focus();await t.createPage(r,e),Q.forget(),ev={text:a.created,error:!1}}else{let{summary:r}=await t.prompt(e);ev={text:r,error:!1}}g.value="",eC()}catch(e){ev={text:q(e),error:!0}}eE(),g.focus()}},eL=e=>{ev=null,(ew=e)&&Q.reset(),eE(),(ew?Q.search:G).focus()},eS=e=>{(eb=e)||(ew=!1,em=!1),eE(),s&&t.setSelecting(eb&&!ef),eb&&s&&Q.fetch()},eP=e=>{ef=e,ev=null,t.setSelecting(eb&&!ef),ef&&t.select(null),eE(),(ef?M:g).focus()},e$=async e=>{ev=null;let r=await H(t,e);ev=r?{text:r,error:!0}:{text:"save"===e?a.saved:a.published,error:!1},eE()};d.addEventListener("click",()=>{eS(!0),ex||(ef?M:g).focus()}),z.addEventListener("click",()=>eS(!1)),Y.addEventListener("click",()=>{em=!em,eE(),em||(ex?Y:g).focus()}),el.addEventListener("click",e=>{if(!em)return;let t=e.target.closest("button");t&&t!==Y&&t!==z&&(em=!1,eE())},!0),ei.addEventListener("click",()=>void e$("save")),eo.addEventListener("click",()=>void e$("publish")),ea.addEventListener("click",()=>t.signOut()),c.addEventListener("click",()=>t.signOut()),x.addEventListener("click",()=>t.select(null)),N.addEventListener("click",()=>eP(!0)),L.addEventListener("click",async()=>{ev=null,ev=await V(t,a),eE()}),P.addEventListener("click",()=>eP(!1)),E.addEventListener("click",()=>eA(!1)),C.addEventListener("click",()=>eA(!0)),G.addEventListener("click",()=>eL(!ew)),M.addEventListener("input",eE),M.addEventListener("keydown",e=>{"Enter"!==e.key||e.isComposing?"Escape"===e.key&&eS(!1):(e.preventDefault(),g.focus())}),w.addEventListener("click",()=>{ev=null,t.undo()}),el.addEventListener("submit",e=>{e.preventDefault(),eN()}),g.addEventListener("input",()=>{eC(),eE()}),g.addEventListener("keydown",e=>{"Enter"!==e.key||e.shiftKey||e.isComposing?"Escape"===e.key&&eS(!1):(e.preventDefault(),eN())});let eM=t.on("change",ek);return eE(),e.body.appendChild(i),()=>{eM(),ey.unmount(),i.remove()}},X="https://content.obelism.studio",K=/^(?:\/[\w.~-]+)+$/,J=e=>{let{protocol:t}=new URL(e,"https://site.invalid");if("https:"!==t&&"http:"!==t)throw Error(`Not a page address: ${e}`);return e},Z=(e,t)=>JSON.stringify(e)===JSON.stringify(t),G="obelism-content-editor",Q=`
|
|
257
272
|
:host { all: initial; }
|
|
258
273
|
* { box-sizing: border-box; font: inherit; color: inherit; margin: 0; }
|
|
259
274
|
.root {
|
|
@@ -421,6 +436,7 @@ button:disabled { cursor: not-allowed; }
|
|
|
421
436
|
flex: none; font-size: 12px; font-weight: 500; text-decoration: underline; text-underline-offset: 2px;
|
|
422
437
|
}
|
|
423
438
|
.note button::after { content: ''; position: absolute; inset: -13px -6px; }
|
|
439
|
+
.scroll > .note { position: sticky; top: 0; z-index: 1; }
|
|
424
440
|
.intro { color: rgb(var(--muted)); font-size: 13px; }
|
|
425
441
|
.gate {
|
|
426
442
|
display: grid; gap: 8px; margin: 10px 14px 0; padding: 10px 12px; border-radius: 12px;
|
|
@@ -575,4 +591,4 @@ textarea:disabled, .path input:disabled { opacity: .6; }
|
|
|
575
591
|
.chips .accent-chip .mark { color: rgb(23 22 20); }
|
|
576
592
|
.chips .accent-chip .mark svg { width: 11px; height: 11px; }
|
|
577
593
|
.chips .ink-chip { background: rgb(23 22 20); color: rgb(255 255 255); font-weight: 500; }
|
|
578
|
-
`,Z=e=>{let t=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").trim().toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)},G=e=>!!e&&"object"==typeof e&&!Array.isArray(e),Q=(e,t,r,n)=>{if(null!=e&&""!==e){if("object"!=typeof e)return void n.set(r,{label:t,text:String(e)});if(Array.isArray(e)){if(e.every(e=>null===e||"object"!=typeof e)){e.length&&n.set(r,{label:t,text:e.join(", ")});return}e.forEach((e,a)=>{let i=G(e)&&"string"==typeof e._uid?e._uid:a,o=G(e)&&"string"==typeof e._type?e._type:null;Q(e,o?Z(o):t,`${r}/${i}`,n)});return}for(let[a,i]of Object.entries(e))"_uid"!==a&&"_type"!==a&&Q(i,t?`${t} \xb7 ${Z(a)}`:Z(a),`${r}/${a}`,n)}},ee=(e,n,a={})=>{let i,o={...O,...a.labels},s=e.defaultView,l=e.documentElement,d=(t,...r)=>N(e,"button",{className:t,type:"button"},...r),p=N(e,"div");p.setAttribute("data-obelism-content-editor","");let c=p.attachShadow({mode:"open"}),u=N(e,"style",{textContent:(i=`[${t}]`,`html[data-obelism-editor]{transition:margin-right .3s cubic-bezier(.2,.8,.2,1)}html[data-obelism-docked]{margin-right:436px!important}html[data-obelism-docked] [data-obelism-dock]{right:436px!important;max-width:calc(100vw - 436px)!important}html[data-obelism-editor][data-cms-selecting] ${i}:hover:not([data-cms-selected]){outline:none}html[data-obelism-editor][data-cms-selecting] ${i}[data-cms-selected]{outline:2px solid rgb(212 130 30);outline-offset:2px}@media (prefers-reduced-motion:reduce){html[data-obelism-editor]{transition:none}}`)}),g=N(e,"span",{className:"tile"},P(e,"mark",A)),h=N(e,"span"),b=d("page-button hit",h,N(e,"span",{className:"visually-hidden",textContent:`, ${o.pages}`}),M(e,"chevrons"));b.setAttribute("aria-haspopup","listbox"),b.setAttribute("aria-expanded","false"),b.setAttribute("aria-controls","obelism-pages");let m=N(e,"span",{className:"page-name"}),f=N(e,"span"),v=N(e,"span",{className:"env"},N(e,"span",{className:"visually-hidden",textContent:`${o.environment}: `}),f),x=d("icon-button hit",M(e,"dash"));x.setAttribute("aria-label",o.minimize),x.title=o.minimize;let y=d("mode hit",P(e,"mark",A),o.modePrompt);y.setAttribute("aria-pressed","false");let w=N(e,"div",{className:"head"},g,b,m,v,N(e,"span",{className:"spacer"}),y,x),k=j(e,n,o,{onLoad:()=>ts(),onClose:()=>tg(!1)}),C=d("button quiet new-page",M(e,"plus"),o.newPage),$=N(e,"div",{className:"pages"},k.searchRow,k.list,k.note,C),z=d("button primary",o.keep),I=d("button quiet",o.undo),B=N(e,"div",{className:"gate"},N(e,"p",{textContent:o.keepBeforeFields}),N(e,"div",{className:"actions"},z,I));B.setAttribute("role","alert");let _=N(e,"span"),H=d("",o.scopeEntry),V=d("",o.newPageCancel),W=N(e,"div",{className:"note"},M(e,"scope"),_,H,V),Y=N(e,"p",{className:"intro",textContent:o.askIntro}),X=N(e,"p",{className:"summary"}),ee=N(e,"span"),et=d("button primary",M(e,"plus"),ee),er=N(e,"div",{className:"shop"},X,et),en=N(e,"div",{className:"log"});en.setAttribute("role","log");let ea=N(e,"div",{className:"scroll"},W,Y,er,en),ei=N(e,"input",{type:"text",placeholder:o.pathPlaceholder,autocomplete:"off",spellcheck:!1}),eo=N(e,"label",{className:"path"},N(e,"span",{textContent:o.path}),ei),es=N(e,"textarea",{rows:1});es.setAttribute("aria-label",o.open);let el=M(e,"arrowUp"),ed=P(e,"working",L),ep=N(e,"button",{className:"send",type:"submit",title:o.send},N(e,"span",{className:"visually-hidden",textContent:o.send}),el,ed),ec=N(e,"div",{className:"bar"},P(e,"mark",A),es,ep),eu=N(e,"form",{className:"composer"},eo,ec),eg=N(e,"div",{className:"ask",id:"obelism-ask"},ea,eu);eg.setAttribute("role","tabpanel"),eg.setAttribute("aria-label",o.modePrompt);let eh=N(e,"p",{className:"form-note"});eh.setAttribute("role","status");let eb=N(e,"div",{className:"form"},eh),em=N(e,"span"),ef=d("",o.scopeEntry),ev=N(e,"div",{className:"note"},M(e,"scope"),em,ef),ex=N(e,"div",{className:"fields",id:"obelism-fields"},ev,eb);ex.setAttribute("role","tabpanel"),ex.setAttribute("aria-label",o.form);let ey=N(e,"p",{className:"save-state"});ey.setAttribute("aria-live","polite");let ew=N(e,"slot");ew.name="actions-footer";let ek=d("button quiet",M(e,"undo"),o.undo),eE=d("button secondary",o.saveDraft),eC=d("button primary",o.publish),eN=N(e,"div",{className:"foot"},ey,ew,ek,eE,eC),eA=N(e,"p",{className:"visually-hidden"});eA.setAttribute("role","status");let eL=N(e,"aside",{className:"panel",id:"obelism-editor"},w,$,B,eg,ex,eN,eA);eL.setAttribute("aria-label",o.editor);let eP=d("launch",N(e,"span",{className:"launch-tile"},P(e,"mark",A)),o.editing);eP.setAttribute("aria-controls",eL.id);let eS=N(e,"span",{className:"reading"},N(e,"span",{className:"launch-tile"},P(e,"mark",A)),o.viewingDrafts),e$=M(e,"eye"),eM=M(e,"eyeOff"),eU=d("eye",e$,eM);eU.setAttribute("aria-label",o.hideOutlines),eU.title=o.hideOutlines;let ez=N(e,"slot");ez.name="actions-bar";let eI=d("exit",o.signOut),eO=N(e,"div",{className:"launcher"},eP,eS,eU,ez,eI);a.actions&&p.appendChild(a.actions);let ej=N(e,"div",{className:"layer"});ej.setAttribute("aria-hidden","true");let eR=N(e,"div",{className:"wash"});eR.setAttribute("aria-hidden","true");let eT=N(e,"div",{className:"root"},eR,ej,eL,eO);c.append(N(e,"style",{textContent:J}),eT);let eD=(e=>{try{return e?.localStorage.getItem(K)!=="minimised"}catch{return!0}})(s),eq="fields",eF="fields",eB=!1,e_=!1,eH=!0,eV=!1,eW=null,eY=!1,eX=null,eK=[],eJ=!0,eZ=null,eG=new Map,eQ="idle",e0=!1,e1=U(n,eb,o.formTitle,{onReady:()=>{ts(),eD&&"fields"===eF&&e2()},onError:()=>ts(),onEscape:()=>th()}),e2=()=>eb.querySelector("iframe")?.focus(),e4=()=>eK.filter(({status:e})=>"pending"===e),e5=()=>e4().slice(-1)[0]??null,e6=()=>eK.some(({status:e})=>"working"===e)?null:e5(),e3=e=>(eG.has(e)||"loading"===eQ||(eG.set(e,null),n.view({uid:e}).then(t=>{"string"==typeof t._type&&eG.set(e,Z(t._type)),ts()},()=>{})),eG.get(e)??o.block),e8=e=>{Array.isArray(e)?e.forEach(e8):G(e)&&("string"==typeof e._uid&&"string"==typeof e._type&&eG.set(e._uid,Z(e._type)),Object.values(e).forEach(e8))},e7=()=>k.current()?.name||e.title.trim(),e9=null,te=()=>{null===e9&&s&&(e9=s.requestAnimationFrame(()=>{e9=null,(t=>{if(ej.replaceChildren(),eR.replaceChildren(),!tr(t))return;let n=t=>{let r=e.querySelector(t),n=r?.getBoundingClientRect();return n&&(n.width||n.height)?n:null},a=(t,r,n=ej)=>{let a=N(e,"div",{className:`box ${r}`});Object.assign(a.style,{top:`${t.top-3}px`,left:`${t.left-3}px`,width:`${t.width+6}px`,height:`${t.height+6}px`}),n.appendChild(a)},i=(t,...r)=>{let n=N(e,"div",{className:"chips"},...r),a=t.top-34<0?t.top+6:t.top-34;Object.assign(n.style,{top:`${a}px`,left:`${t.left-3}px`}),ej.appendChild(n)},s=(t,r)=>{let n=N(e,"span",{className:"accent-chip"});return r&&n.appendChild(P(e,"mark",A)),n.appendChild(e.createTextNode(t)),n},l=e5(),d=l?l.uid?E(l.uid):`[${r}]`:null,p=d?n(d):null;if(p&&a(p,"fill",eR),eZ&&eZ!==t.selectedUid){let t=n(E(eZ));if(t){a(t,"hover");let r=t.top-23<0,n=N(e,"span",{className:`name-tab${r?" inside":""}`,textContent:e3(eZ)});Object.assign(n.style,{top:`${r?t.top-1.5:t.top-23}px`,left:`${t.left-3}px`}),ej.appendChild(n)}}let c=!!l&&l.uid===t.selectedUid;if(t.selectedUid){let r=n(E(t.selectedUid));if(r){let n=e3(t.selectedUid),a=e7();i(r,s(c?S(o.previewChip,{name:n}):n,c),...a?[N(e,"span",{className:"ink-chip",textContent:a})]:[])}}if(p&&!c){a(p,"preview");let e=l.uid?e3(l.uid):e7()||o.pages;i(p,s(S(o.previewChip,{name:e}),!0))}})(n.getState())}))},tt=e=>e.features.includes("prompt")&&eD,tr=e=>tt(e)&&eH&&!e_,tn=t=>N(e,"span",{className:`value${t?"":" none"}`,textContent:t||o.emptyValue}),ta=t=>{let r=t.node.querySelector(".card");if(r.querySelector(".status-line")?.remove(),"failed"===t.status)return void r.appendChild(N(e,"p",{className:"failure"},M(e,"alert"),t.summary));for(let n of(r.appendChild(t.eyebrow),t.summary&&r.appendChild(N(e,"p",{className:"summary",textContent:t.summary})),t.diffs.slice(0,3))){let a=N(e,"div",{className:"diff-field"},N(e,"span",{className:"diff-label",textContent:n.label}),N(e,"div",{className:"diff"},N(e,"div",{className:"before"},N(e,"span",{className:"tag",textContent:o.before}),tn(n.before)),N(e,"div",{className:"after"},N(e,"span",{className:"tag",textContent:o.after}),tn(n.after))));t.details.push(a),r.appendChild(a)}if(t.diffs.length>3){let n=N(e,"p",{className:"more",textContent:S(o.moreChanges,{count:t.diffs.length-3})});t.details.push(n),r.appendChild(n)}if("pending"===t.status){let n=d("button primary",o.keep),a=d("button secondary",o.retry),i=d("button quiet",o.undo);n.addEventListener("click",()=>tb()),a.addEventListener("click",()=>void tv(t)),i.addEventListener("click",()=>tm(t)),t.actions=N(e,"div",{className:"actions"},n,a,i),r.appendChild(t.actions)}},ti=(t,r)=>{let n=N(e,"div",{className:"card"},N(e,"span",{className:"visually-hidden",textContent:`${o.obelism}: `}),N(e,"p",{className:"status-line"},P(e,"working",L),e_?o.creating:o.working)),a=N(e,"div",{className:"answer"},N(e,"span",{className:"chip"},P(e,"mark",A)),n);a.dataset.status="working";let i={prompt:t,uid:r,status:"working",summary:"",diffs:[],step:null,node:a,eyebrow:N(e,"p",{className:"eyebrow"}),actions:null,details:[]};return eK.push(i),en.appendChild(a),i},to=t=>{if(e0)return;let r=t.features.includes("prompt"),i=t.saving||t.publishing,s=t.prompting||i,p=r&&eD,{site:c,canCreate:u,pageless:g,shopHere:x,onlyNew:w}=T(n,t,a.promptWithoutPage);u||(e_=!1),w&&(e_=!0);let E=c&&!e_&&!g&&t.features.includes("form");eF=E?eq:"ask";let A=e4().length>0;for(let e of(A&&"fields"!==eF||(eB=!1),eK))null!==e.step&&e.step>(t.undoSteps??0)&&(e.step=null);eT.hidden=!r&&!c,eL.toggleAttribute("data-closed",!p),eL.inert=!p,eP.hidden=!r,eP.setAttribute("aria-expanded",String(p)),eS.hidden=r,eU.hidden=!p,eU.setAttribute("aria-pressed",String(!eH)),e$.hidden=!eH,eM.hidden=eH,eI.hidden=!1===a.signOut;let S=p&&eJ;l.toggleAttribute("data-obelism-docked",S),l.style.setProperty("--obelism-dock",`${436*!!S}px`);let U=p&&eH&&!e_;t.selecting!==U&&n.setSelecting(U);let O=p&&"fields"===eF;O&&!e1.mounted?e1.mount():!O&&e1.mounted&&e1.unmount(),eV&&!p&&(eV=!1),h.textContent=e7()||o.pages,b.hidden=null===k.pages&&null!==k.error,m.hidden=!b.hidden,m.textContent=e7()||o.pages,b.setAttribute("aria-expanded",String(eV)),$.hidden=!eV,C.hidden=!u||e_,C.disabled=s;let j=n.environment;v.hidden=!j,v.dataset.env=j??"",f.textContent="production"===j?o.envProduction:j??"",y.hidden=!E,y.setAttribute("aria-pressed",String("ask"===eF)),y.disabled=s,B.hidden=!eB,z.disabled=I.disabled=s,eg.hidden="ask"!==eF,ex.hidden="fields"!==eF;let R=null!==x&&!e_;if(e_)_.textContent=o.newPage;else if(t.selectedUid){let[r,n=""]=o.scopeNoteBlock.split("{name}");for(let a of[_,em])a.replaceChildren(r??"",N(e,"strong",{textContent:e3(t.selectedUid)}),n)}else _.textContent=o.scopeNotePage;ev.hidden=e_||!t.selectedUid,W.hidden=R||g&&!e_&&!a.promptWithoutPage,H.hidden=e_||!t.selectedUid,V.hidden=!e_||w,Y.hidden=eK.length>0||R||e_,er.hidden=!R;let q=D(o,x);ee.textContent=t.prompting&&R?q.adding:q.add,et.disabled=s,X.textContent=eX?.text??q.hint,X.className=eX?.error?"failure":"summary",eu.hidden=R,eo.hidden=!e_,ei.disabled=s,es.placeholder=e_?o.newPagePlaceholder:o.placeholder,es.disabled=s,ep.disabled=s||""===es.value.trim()||e_&&""===ei.value.trim(),ep.setAttribute("aria-busy",String(t.prompting)),el.hidden=t.prompting,ed.hidden=!t.prompting,ek.hidden=A||!t.canUndo||e_,ek.disabled=s,eE.hidden=!t.features.includes("save")||g,eE.disabled=s||A||!t.unsaved,eC.hidden=!t.features.includes("publish")||g,eC.disabled=s||A,a.actions&&(a.actions.slot=p?"actions-footer":"actions-bar"),eN.hidden=!c,t.unsaved&&!eY&&(eW=null),eY=t.unsaved;let F=i?P(e,"working",L):eW?.kind==="error"?M(e,"alert"):A||t.unsaved?N(e,"span",{className:"dot"}):M(e,"check"),K=t.saving?o.saving:t.publishing?o.publishing:eW?.kind==="error"?`${"save"===eW.action?o.saveFailed:o.publishFailed}: ${eW.text}`:A?o.keepFirst:t.unsaved?o.unsaved:eW?.kind==="saved"?o.saved:eW?.kind==="published"?o.published:o.upToDate,J=i?"saving":eW?.kind==="error"?"error":A||t.unsaved?"unsaved":"saved";if((ey.dataset.state!==J||ey.dataset.text!==K)&&(ey.dataset.state=J,ey.dataset.text=K,ey.replaceChildren(F,N(e,"span",{textContent:K})),eW?.kind==="error"&&!i)){let e=eW.action,t=d("link",o.tryAgain);t.addEventListener("click",()=>void ty(e)),ey.appendChild(t)}eb.classList.toggle("loading",e1.loading||null!==e1.error),eh.hidden=!e1.loading&&null===e1.error,eh.className=`form-note${null!==e1.error?" error":""}`,eh.textContent=e1.error??o.formLoading;let Z=e6();for(let e of eK){if("working"===e.status||"failed"===e.status)continue;e.node.dataset.status=e.status;let t="pending"===e.status?o.suggested:"kept"===e.status?o.kept:o.undone;for(let r of(e.eyebrow.textContent!==t&&(e.eyebrow.textContent=t),e.actions&&(e.actions.hidden=e!==Z),e.details))r.hidden="undone"===e.status}p&&((()=>{if("idle"!==eQ||null===n.entryId)return;eQ="loading";let e=()=>{eQ="done",ts()};n.view({uid:null}).then(t=>{e8(t),e()},e)})(),null===k.pages&&null===k.error&&k.fetch()),te()},ts=()=>to(n.getState()),tl=()=>{es.style.height="auto",es.style.height=`${es.scrollHeight}px`},td=()=>{ea.scrollTop=ea.scrollHeight},tp=e=>{eD=e;try{s?.localStorage.setItem(K,eD?"open":"minimised")}catch{}eD||(eV=!1),ts(),eD?e_?ei.focus():"fields"===eF?e2():es.focus():eP.focus()},tc=e=>{if("fields"===e&&e4().length>0){eB=!0,ts(),z.focus();return}if(eB=!1,eq===e)return ts();eq=e,ts()},tu=e=>{eV=!1,(e_=e)&&n.select(null),ts(),(e_?ei:es).focus()},tg=e=>{(eV=e)&&k.reset(),ts(),(eV?k.search:b).focus()},th=()=>{let e=n.getState();if(!tt(e))return!1;if(eV)tg(!1);else{if(!e.selectedUid)return!1;n.select(null)}return!0},tb=(e=!0)=>{let t=e4();t.length&&e6()&&(t.forEach(e=>{e.status="kept"}),ts(),e&&es.focus())},tm=(e,t=!0)=>{e===e6()&&(n.undo(),e.status="undone",ts(),t&&es.focus())},tf=async(e,t)=>{let r={uid:e.uid},a=await n.view(r).catch(()=>null);try{let{summary:i}=await n.prompt(t,r);e.step=n.getState().undoSteps??null;let o=a?await n.view(r).catch(()=>null):null;e.summary=i,e.diffs=a&&o?((e,t)=>{let r=new Map,n=new Map;Q(e,"","",r),Q(t,"","",n);let a=[];for(let e of new Set([...r.keys(),...n.keys()])){let t=r.get(e),i=n.get(e);t?.text!==i?.text&&a.push({label:(i??t).label,before:t?.text??"",after:i?.text??""})}return a})(a,o):[],e.status="pending"}catch(t){e.summary=R(t),e.status="failed"}ta(e),ts(),td()},tv=async e=>{if(e!==e6())return;n.undo(),e.status="undone";let t=ti(e.prompt,e.uid);ts(),td(),es.focus(),await tf(t,S(o.retryPrompt,{prompt:e.prompt}))},tx=async()=>{let t=es.value.trim(),r=n.getState();if(!t||r.prompting)return;let a=ei.value.trim();if(e_&&!a)return ei.focus();let i=e_?null:r.selectedUid,s=e_?`${o.newPage} \xb7 ${a}`:i?e3(i):o.scopeEntry;en.appendChild(N(e,"p",{className:"bubble"},N(e,"span",{className:"visually-hidden",textContent:`${o.you} (${s}): `}),t)),es.value="",tl();let l=ti(t,i);if(ts(),td(),e_){try{await n.createPage(a,t),k.forget(),l.summary=o.created,l.status="kept"}catch(e){l.summary=R(e),l.status="failed"}ta(l),ts()}else await tf(l,t);es.focus()},ty=async e=>{eW=null;let t=await F(n,e);eW=t?{kind:"error",action:e,text:t}:{kind:"save"===e?"saved":"published"},ts()};eP.addEventListener("click",()=>tp(!eD)),x.addEventListener("click",()=>tp(!1)),eU.addEventListener("click",()=>{eH=!eH,ts()}),eI.addEventListener("click",()=>n.signOut()),b.addEventListener("click",()=>tg(!eV)),C.addEventListener("click",()=>tu(!0)),V.addEventListener("click",()=>tu(!1)),H.addEventListener("click",()=>{n.select(null),es.focus()}),ef.addEventListener("click",()=>{n.select(null),e2()}),et.addEventListener("click",async()=>{eX=null,eX=await q(n,o),ts()}),y.addEventListener("click",()=>tc("ask"===eq?"fields":"ask")),z.addEventListener("click",()=>{tb(!1),tc("fields"),e2()}),I.addEventListener("click",()=>{for(let e=e6();e;e=e6())tm(e,!1);tc("fields"),e2()}),ek.addEventListener("click",()=>{let e=n.getState().undoSteps,t=void 0===e?void 0:eK.find(t=>"kept"===t.status&&t.step===e);if(n.undo(),t){var r;t.status="undone",ts(),r=`${o.undone}: ${t.summary}`,eA.textContent="",eA.textContent=r}ek.hidden&&es.focus()}),eE.addEventListener("click",()=>void ty("save")),eC.addEventListener("click",()=>void ty("publish")),eu.addEventListener("submit",e=>{e.preventDefault(),tx()}),es.addEventListener("input",()=>{tl(),ts()}),es.addEventListener("keydown",e=>{"Enter"!==e.key||e.shiftKey||e.isComposing||(e.preventDefault(),tx())}),ei.addEventListener("input",ts),ei.addEventListener("keydown",e=>{"Enter"!==e.key||e.isComposing||(e.preventDefault(),es.focus())});let tw=e=>{"Escape"===e.key&&!e.defaultPrevented&&th()&&e.preventDefault()};e.addEventListener("keydown",tw);let tk=e=>{let r=e.target,n=r?.closest?.(`[${t}]`),a=n?.getAttribute(t)??null;a!==eZ&&(eZ=a,te())},tE=()=>{eZ=null,te()};e.addEventListener("pointerover",tk),l.addEventListener("pointerleave",tE),s?.addEventListener("scroll",te,{capture:!0,passive:!0}),s?.addEventListener("resize",te);let tC=s?.MutationObserver,tN="function"==typeof tC?new tC(te):null;tN?.observe(e.body,{childList:!0,subtree:!0});let tA=s?.ResizeObserver,tL="function"==typeof tA?new tA(te):null;tL?.observe(l);let tP=s?.matchMedia?.("(min-width: 768px)")??null;eJ=tP?.matches??!0;let tS=()=>{eJ=tP?.matches??!0,ts()};tP?.addEventListener?.("change",tS);let t$=n.on("change",to);return l.setAttribute("data-obelism-editor",""),e.head.appendChild(u),e.body.appendChild(p),ts(),()=>{e0=!0,t$(),e1.unmount(),null!==e9&&s?.cancelAnimationFrame?.(e9),e.removeEventListener("keydown",tw),e.removeEventListener("pointerover",tk),l.removeEventListener("pointerleave",tE),s?.removeEventListener("scroll",te,{capture:!0}),s?.removeEventListener("resize",te),tP?.removeEventListener?.("change",tS),tN?.disconnect(),tL?.disconnect(),n.setSelecting(!1),l.removeAttribute("data-obelism-editor"),l.removeAttribute("data-obelism-docked"),l.style.removeProperty("--obelism-dock"),u.remove(),p.remove()}},et=Symbol.for("@obelism/content/bridge"),er=C({isEditing:!1,entryId:null,on:()=>{}},new URLSearchParams),en=({url:e,prompt:p=!0,pagePath:c,productPath:b,collectionPath:x}={})=>{let y;if("u"<typeof window)return er;let N=window;if(N[et])return N[et];if(N.ObelismBridge)y=C(N.ObelismBridge,new URLSearchParams(N.location.search));else{let C=(y=((e,r)=>{let n,a,p,c,b,x=new URLSearchParams(e.location.search),y=e.parent!==e&&x.has("cms_preview"),C=v(),N=[],A={...f,selecting:!0},L=e=>{A={...A,...e},C.emit("change",A)},P={isEditing:y,mode:y?"editor":null,entryId:x.get("cms_entry"),environment:x.get(i),product:null,collection:null,on:C.on,getState:()=>A,...w,destroy:()=>{N.splice(0).forEach(e=>e())}};if(!y)return P;let S=e.document,$=(t,n={})=>{e.parent.postMessage({source:h,type:t,...n},r)},M=S.createElement("style");M.textContent=m(),S.head.appendChild(M),N.push(()=>M.remove());let U=(e,t)=>{if(S.querySelectorAll("[data-cms-selected]").forEach(e=>{e.removeAttribute("data-cms-selected")}),A.selectedUid!==(e??null)&&L({selectedUid:e??null}),!e)return;let r=S.querySelector(E(e));r&&(r.setAttribute("data-cms-selected",""),t&&r.scrollIntoView({behavior:"smooth",block:"center"}))},z=e=>{let r=e.target,n=r?.closest?.(`[${t}]`);if(!n)return;e.preventDefault(),e.stopPropagation();let a=n.getAttribute(t);U(a,!1),$("select",{uid:a})};S.addEventListener("click",z,!0),N.push(()=>S.removeEventListener("click",z,!0));let I=()=>Math.ceil(Math.max(S.documentElement.scrollHeight,S.body?.scrollHeight??0)),O=0,j=()=>{O=I(),$("ready",{url:e.location.href,height:O})},R=e.ResizeObserver;if("function"==typeof R){let e=new R(()=>{let e=I();e!==O&&(O=e,$("size",{height:e}))});e.observe(S.documentElement),S.body&&e.observe(S.body),N.push(()=>e.disconnect())}let T=new Map,D=0,q=e=>{let t=T.get(e);return t?(clearTimeout(t.timer),T.delete(e),0===T.size&&L({prompting:!1}),t):null};P.prompt=(e,t={})=>{let r=e.trim();if(!r)return Promise.reject(Error("Say what to change"));if(!A.features.includes("prompt"))return Promise.reject(Error("The editor does not offer prompts here"));let n=`prompt_${++D}`,a=void 0===t.uid?A.selectedUid:t.uid;return new Promise((e,t)=>{let i=setTimeout(()=>{q(n)?.reject(Error("The editor did not answer in time"))},12e4);T.set(n,{resolve:e,reject:t,timer:i}),L({prompting:!0}),$("prompt",{id:n,prompt:r,uid:a})})},P.undo=()=>$("undo"),P.select=e=>{U(e,!1),$("select",{uid:e})};let F=null;N.push(()=>F?.destroy()),N.push(()=>{for(let e of T.keys())q(e)?.reject(Error("The bridge was destroyed"))});let B=(n=new WeakSet,a=null,p=null,c=!1,b=()=>{if(null!==a){for(let e of Array.from(S.styleSheets)){let t;if(!n.has(e)){try{t=e.cssRules}catch{continue}n.add(e),g(t,a)}}S.querySelectorAll('[style*="vh"]').forEach(e=>{u(e.style,a)})}},{freeze(e){if(null!==a||!(e>0))return;a=e,b();let t=S.defaultView?.MutationObserver;t&&(p=new t(()=>{if(c)return;c=!0;let e=()=>{c=!1,b()};S.defaultView?.requestAnimationFrame?S.defaultView.requestAnimationFrame(e):e()})).observe(S.documentElement,{childList:!0,subtree:!0})},destroy(){p?.disconnect()}});N.push(()=>B.destroy());let _=t=>{if(t.origin!==r||t.source!==e.parent)return;let n=t.data;if(n&&"obelism-content-editor"===n.source){if("connect"===n.type)j();else if("update"===n.type&&n.entry)C.emit("update",{entry:n.entry,selectedUid:n.selectedUid??null}),e.requestAnimationFrame(()=>U(n.selectedUid,!1)),F?.refresh();else if("select"===n.type)U(n.uid,!0);else if("saved"===n.type||"published"===n.type)C.emit(n.type,{}),0===C.listeners.update.size&&e.location.reload();else if("features"===n.type&&Array.isArray(n.features))L({features:n.features.filter(e=>"string"==typeof e)});else if("stats"===n.type)L({stats:(e=>{if(!e||"object"!=typeof e||Array.isArray(e))return{};let t={};for(let[r,n]of Object.entries(e)){let{clicks:e,clickers:a,viewers:i,rate:o}=n??{};k(e)&&k(a)&&k(i)&&k(o)&&(t[r]={clicks:e,clickers:a,viewers:i,rate:o})}return t})(n.stats),statsVisible:!1!==n.visible}),(F||Object.keys(A.stats).length)&&(F??(F=((e,{selector:t,onSelect:r,labels:n})=>{let a=e.document,i={...o,...n},p=a.createElement("div");p.setAttribute("data-obelism-stats","");let c=p.attachShadow({mode:"open"}),u=a.createElement("style");u.textContent=l;let g=a.createElement("div");g.className="layer",c.append(u,g),a.body.appendChild(p);let h={},b=!1,m=null,f=()=>{if(m=null,g.replaceChildren(),g.hidden=!b,!b)return;let n=e.innerHeight;for(let[o,l]of Object.entries(h)){let p=a.querySelector(t(o));if(!p)continue;let c=p.getBoundingClientRect();if(!c.width&&!c.height||c.bottom<0||c.top>n)continue;let u=a.createElement("button");u.type="button",u.className="badge",u.dataset.uid=o,u.textContent=s(i.clicked,{rate:Math.round(100*l.rate)}),u.title=s(i.title,{clickers:l.clickers,viewers:l.viewers,clicks:l.clicks});let{place:h,top:b,left:m}=d(c,e.innerWidth);u.dataset.place=h,u.style.top=`${b}px`,u.style.left=`${m}px`,u.addEventListener("click",()=>r(o)),g.appendChild(u)}},v=()=>{null===m&&b&&(m=e.requestAnimationFrame(f))};e.addEventListener("scroll",v,{capture:!0,passive:!0}),e.addEventListener("resize",v);let x=e.MutationObserver,y="function"==typeof x?new x(v):null;return y?.observe(a.body,{childList:!0,subtree:!0}),{update(t,r){h=t,b=r,null!==m&&(e.cancelAnimationFrame?.(m),m=null),f()},refresh:v,destroy(){null!==m&&e.cancelAnimationFrame?.(m),e.removeEventListener("scroll",v,{capture:!0}),e.removeEventListener("resize",v),y?.disconnect(),p.remove()}}})(e,{selector:E,onSelect:e=>P.select(e)})),F.update(A.stats,A.statsVisible));else if("viewport"===n.type&&"number"==typeof n.height)B.freeze(n.height);else if("promptState"===n.type)L({canUndo:!0===n.canUndo});else if("promptResult"===n.type&&"string"==typeof n.id){let e=q(n.id);if(!e)return;!0===n.ok?e.resolve({summary:"string"==typeof n.summary?n.summary:""}):e.reject(Error("string"==typeof n.error?n.error:"The prompt failed"))}}};return e.addEventListener("message",_),N.push(()=>e.removeEventListener("message",_)),"loading"===S.readyState?(S.addEventListener("DOMContentLoaded",j,{once:!0}),N.push(()=>S.removeEventListener("DOMContentLoaded",j))):j(),P})(N,new URL(e||V).origin)).isEditing||N.parent!==N?null:(e=>{for(let t of e.cookie.split(";")){let[e,...r]=t.trim().split("=");if("obelism_content_editing"===e)try{let e=decodeURIComponent(r.join("="));return W.test(e)?e:null}catch{break}}return null})(N.document);if(C&&(y=((e,i,{pagePath:o=e=>`/${e.replace(/^\/+/,"")}`,productPath:s,collectionPath:l}={})=>{let d=e.document,p=v(),c=[],u=new Map,g=[],b=new Set,x=null,y=null,w=-1/0,k=new Map,C=f,N=e=>{C={...C,...e},p.emit("change",C)},A=()=>N({unsaved:[...u.values()].some(({content:e,saved:t})=>!X(e,t)),canUndo:g.length>0,undoSteps:g.length}),L=async(t,r)=>{let n=await e.fetch(`${i}/api/${t}`,void 0===r?{credentials:"same-origin"}:{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json","x-obelism-content":"1"},body:JSON.stringify(r)}),a=await n.json().catch(()=>({}));if(401===n.status)throw N({features:[]}),Error("You were signed out. Sign in again to edit.");if(!n.ok)throw Error("string"==typeof a.error?a.error:`Obelism Content answered ${n.status}`);return a},P=()=>d.querySelector(`[${r}]`)?.getAttribute(r)??null,S=()=>{let e=d.querySelector(`[${n}]`),t=e?.getAttribute(n),r=e?.getAttribute("data-cms-product-handle");return t&&r?{id:t,handle:r}:null},$=()=>{let e=d.querySelector(`[${a}]`),t=e?.getAttribute(a),r=e?.getAttribute("data-cms-collection-handle");return t&&r?{id:t,handle:r}:null},M=e=>{let t=e?d.querySelector(E(e)):null;return t?.closest(`[${r}]`)?.getAttribute(r)??P()},U=()=>{if(!x)return;let e=x.space.locales.map(({code:e})=>e),t=d.documentElement.lang;if(e.includes(t))return t;let r=t.split("-")[0]??"";return e.includes(r)?r:x.space.defaultLocale},z=new Map,I=async e=>{let t=u.get(e);if(t)return t;let r=z.get(e);return r||(r=L(`entries/${encodeURIComponent(e)}`).then(t=>{let r=u.get(e)??{content:t.content,saved:t.content,revision:t.draftRevision};return u.set(e,r),r}).finally(()=>z.delete(e)),z.set(e,r)),r},O=e=>{let t=void 0===e?C.selectedUid:e,r=M(t);if(!r)throw Error("Nothing on this page is marked as an entry: add editable(entry)");return{uid:t,entryId:r}},j=e=>{d.querySelectorAll("[data-cms-selected]").forEach(e=>{e.removeAttribute("data-cms-selected")}),C.selectedUid!==e&&N({selectedUid:e}),e&&d.querySelector(E(e))?.setAttribute("data-cms-selected","")},R=async t=>{if(0===p.listeners.update.size)return;let r=u.get(t)?.content,{entry:n}=await L(`entries/${encodeURIComponent(t)}/preview`,{content:r,locale:U()});p.emit("update",{entry:n,selectedUid:C.selectedUid}),e.requestAnimationFrame(()=>j(C.selectedUid))},T=e=>console.error("[@obelism/content bridge]",e),D=t=>{p.emit(t,{}),0===p.listeners.update.size&&e.location.reload()},q=async()=>{for(let[e,t]of u){if(X(t.content,t.saved))continue;let{draftRevision:r}=await L(`entries/${encodeURIComponent(e)}/save`,{content:t.content,baseRevision:t.revision});t.saved=t.content,t.revision=r,b.add(e)}g.length=0,w=-1/0,A()},F={isEditing:!0,mode:"site",get entryId(){return P()},get product(){return S()},get collection(){return $()},get environment(){return x?.environment??null},on:p.on,getState:()=>C,async prompt(e,t={}){let r=e.trim();if(!r)throw Error("Say what to change");if(!C.features.includes("prompt"))throw Error("You may not edit content here");let{uid:n,entryId:a}=O(t.uid);N({prompting:!0});try{let e=await I(a),t=await L(`entries/${encodeURIComponent(a)}/prompt`,{prompt:r,content:e.content,locale:U(),uid:n});return g.push({entryId:a,content:e.content}),w=-1/0,e.content=t.content,A(),await R(a),{summary:t.summary}}finally{N({prompting:!1})}},async createPage(t,r){let n=r.trim();if(!n)throw Error("Say what the page is for");if(!t.trim())throw Error("Say where the page goes, like /pricing");if(!C.features.includes("create"))throw Error("You may not add pages here");if(C.unsaved)throw Error("Save or undo your changes before adding a page");N({prompting:!0});try{let r=await L("entries",{path:t,prompt:n,locale:U(),from:P()}),a=o(r.path,U()??"");return e.location.assign(Y(a)),{summary:r.summary,entryId:r.entryId,path:r.path,url:a}}finally{N({prompting:!1})}},async createProductPage(t=S()??void 0){if(!t)throw Error("Nothing on this page is marked as a product: add editableProduct(product)");if(!C.features.includes("create"))throw Error("You may not add pages here");if(C.unsaved)throw Error("Save or undo your changes before adding a page");N({prompting:!0});try{let r=await L("product-pages",{product:{id:t.id,handle:t.handle}});return e.location.reload(),r}finally{N({prompting:!1})}},async createCollectionPage(t=$()??void 0){if(!t)throw Error("Nothing on this page is marked as a collection: add editableCollection(collection)");if(!C.features.includes("create"))throw Error("You may not add pages here");if(C.unsaved)throw Error("Save or undo your changes before adding a page");N({prompting:!0});try{let r=await L("collection-pages",{collection:{id:t.id,handle:t.handle}});return e.location.reload(),r}finally{N({prompting:!1})}},async view(e={}){let{uid:t,entryId:r}=O(e.uid),n=await I(r),{view:a}=await L(`entries/${encodeURIComponent(r)}/view`,{content:n.content,locale:U(),uid:t});return a},async applyJson(e,t={}){if(!C.features.includes("prompt"))throw Error("You may not edit content here");if(!e||"object"!=typeof e||Array.isArray(e))throw Error("Send the fields to change as an object");let{uid:r,entryId:n}=O(t.uid);N({prompting:!0});try{let t=await I(n),a=await L(`entries/${encodeURIComponent(n)}/apply`,{changes:e,content:t.content,locale:U(),uid:r});return X(a.content,t.content)||(g.push({entryId:n,content:t.content}),w=-1/0,t.content=a.content,A(),await R(n)),{changed:a.changed??[],...a.view&&{view:a.view}}}finally{N({prompting:!1})}},openForm(t,r={}){let{title:n="Content form",onReady:a,onError:i,onEscape:o}=r;y?.();let s=!1,l=null,d=null,c=()=>{},b=e=>{s||i?.(e instanceof Error?e.message:String(e))},m=()=>{s||(s=!0,c(),l?.destroy(),y===m&&(y=null))};y=m;let f=()=>{if(s||!l)return;let e=M(C.selectedUid);if(!e)return;let t=u.get(e);if(!t)return void I(e).then(f,b);let r={entryId:e,content:t.content,locale:U(),selectedUid:C.selectedUid};d&&d.entryId===r.entryId&&d.content===r.content&&d.locale===r.locale&&d.selectedUid===r.selectedUid||(d=r,l.show(r))},v=(e,t)=>{let r=t??d?.entryId,n=void 0===r?void 0:u.get(r);if(s||void 0===r||!n||X(e,n.content))return;let a=Date.now();a-w>=1e3&&g.push({entryId:r,content:n.content}),w=a,n.content=e,d?.entryId===r&&(d={...d,content:e}),A(),clearTimeout(k.get(r)),k.set(r,setTimeout(()=>{k.delete(r),R(r).catch(T)},300))};return(async()=>{if(!C.features.includes("form"))throw Error("You may not edit content here");await I(O(void 0).entryId);let{url:r}=await L("form",{});s||(l=((e,t,r,n,a)=>{let i=null;try{i=new URL(r)}catch{}if(!i||!/^https?:$/.test(i.protocol))throw Error("Obelism Content sent no form to open");let o=i.origin,s=t.ownerDocument.createElement("iframe");s.title=n,s.src=r;let l=!1,d=!1,p=null,c=()=>{l&&p&&s.contentWindow?.postMessage({source:h,type:"content",...p},o)},u=setTimeout(()=>{d||a.onError("The form did not open")},3e4),g=()=>{d=!0,clearTimeout(u),a.onReady()},b=e=>{if(e.origin!==o||!s.contentWindow||e.source!==s.contentWindow)return;let t=e.data;if(t&&"obelism-content-form"===t.source)if("ready"===t.type)l=!0,c(),!0!==t.loading&&g();else if("loaded"===t.type)l&&g();else{let e;if("change"!==t.type||!(e=t.content)||"object"!=typeof e||Array.isArray(e))if("height"===t.type){let e=t.height;if("number"==typeof e&&Number.isFinite(e)){let t=Math.round(Math.min(Math.max(e,80),4e3));s.style.height=`min(${t}px, 60vh)`}}else"escape"===t.type?a.onEscape?.():"error"===t.type&&a.onError("string"==typeof t.message&&t.message?t.message:"The form failed");else a.onChange(t.content,"string"==typeof t.entryId?t.entryId:void 0)}};return e.addEventListener("message",b),t.appendChild(s),{show(e){p=e,c()},destroy(){clearTimeout(u),e.removeEventListener("message",b),s.remove()}}})(e,t,"string"==typeof r?r:"",n,{onReady:()=>a?.(),onChange:v,onError:e=>i?.(e),onEscape:()=>o?.()}),c=p.on("change",f),f())})().catch(b),{close:m}},async pages(){let{pages:e}=await L("pages"),t=[U(),x?.space.defaultLocale];return e.flatMap(e=>{let r,n,a=t.find(t=>void 0!==t&&void 0!==e.paths[t])??Object.keys(e.paths)[0],i=void 0===a?void 0:e.paths[a];return void 0===a||void 0===i?[]:[{entryId:e.entryId,name:e.name,contentType:e.contentType,status:e.status,path:i,url:e.product?(r=e.product.handle,s?s(r,a):(x?.productPath??"/products/{handle}").replaceAll("{handle}",encodeURIComponent(r))):e.collection?(n=e.collection.handle,l?l(n,a):(x?.collectionPath??"/collections/{handle}").replaceAll("{handle}",encodeURIComponent(n))):o(i,a),product:e.product??null,collection:e.collection??null}]})},openPage(t){(!C.unsaved||e.confirm("Leave this page and lose the changes you have not saved?"))&&(u.clear(),g.length=0,A(),e.location.assign(Y(t.url)))},undo(){let e=g.pop(),t=e&&u.get(e.entryId);e&&t&&(w=-1/0,t.content=e.content,A(),R(e.entryId).catch(T))},async save(){if(!C.features.includes("save"))throw Error("You may not edit content here");N({saving:!0});try{await q()}finally{N({saving:!1})}D("saved")},async publish(){if(!C.features.includes("publish"))throw Error("You may not publish here");N({publishing:!0});try{await q();let e=P(),t=b.size>0?[...b]:e?[e]:[];if(0===t.length)throw Error("Nothing on this page is marked as an entry: add editable(entry)");for(let e of t)await L(`entries/${encodeURIComponent(e)}/publish`,{}),b.delete(e)}finally{N({publishing:!1})}D("published")},signOut(){if(C.unsaved&&!e.confirm("Sign out and lose the changes you have not saved?"))return;u.clear(),A();let t=e.location.pathname+e.location.search;e.location.href=`${i}/logout?return_to=${encodeURIComponent(t)}`},select(e){j(e)},setSelecting(e){e?d.documentElement.setAttribute("data-cms-selecting",""):d.documentElement.removeAttribute("data-cms-selecting"),N({selecting:e})},destroy(){y?.(),k.forEach(e=>clearTimeout(e)),k.clear(),c.splice(0).forEach(e=>e())}},B=d.createElement("style");B.textContent=m("html[data-cms-selecting] "),d.head.appendChild(B),c.push(()=>B.remove()),c.push(()=>d.documentElement.removeAttribute("data-cms-selecting"));let _=e=>{if(!C.selecting)return;let r=e.target,n=r?.closest?.(`[${t}]`);n&&(e.preventDefault(),e.stopPropagation(),j(n.getAttribute(t)))};d.addEventListener("click",_,!0),c.push(()=>d.removeEventListener("click",_,!0));let H=e=>{C.unsaved&&(e.preventDefault(),e.returnValue="")};return e.addEventListener("beforeunload",H),c.push(()=>e.removeEventListener("beforeunload",H)),L("session").then(e=>{x=e,N({features:e.features})}).catch(e=>console.error("[@obelism/content bridge]",e)),F})(N,C,{pagePath:c,productPath:b,collectionPath:x})),y.isEditing&&p){let e=N.document,t=()=>{},r=!1,n=C?ee:H,a=()=>{r||(t=n(e,y,!0===p?{}:p))};e.body?a():e.addEventListener("DOMContentLoaded",a,{once:!0});let i=y.destroy;y.destroy=()=>{r=!0,e.removeEventListener("DOMContentLoaded",a),t(),i()}}}return N[et]=y,y};(e=window).ObelismBridge=en((e=>{let t=e?.dataset.url,r=t||V;if(!t&&e?.src){let t=new URL(e.src);"/bridge.js"===t.pathname&&(r=t.origin)}return{url:r,prompt:e?.dataset.prompt!=="false"}})(document.currentScript)),e.ObelismContent={getContentBridge:en,mountPromptBox:H,mountSiteEditor:ee}}();
|
|
594
|
+
`,ee=e=>{let t=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").trim().toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)},et=e=>!!e&&"object"==typeof e&&!Array.isArray(e),er=(e,t,r,n)=>{if(null!=e&&""!==e){if("object"!=typeof e)return void n.set(r,{label:t,text:String(e)});if(Array.isArray(e)){if(e.every(e=>null===e||"object"!=typeof e)){e.length&&n.set(r,{label:t,text:e.join(", ")});return}e.forEach((e,a)=>{let i=et(e)&&"string"==typeof e._uid?e._uid:a,o=et(e)&&"string"==typeof e._type?e._type:null;er(e,o?ee(o):t,`${r}/${i}`,n)});return}for(let[a,i]of Object.entries(e))"_uid"!==a&&"_type"!==a&&er(i,t?`${t} \xb7 ${ee(a)}`:ee(a),`${r}/${a}`,n)}},en=(e,n,a={})=>{let i,o={...R,...a.labels},s=e.defaultView,l=e.documentElement,d=(t,...r)=>S(e,"button",{className:t,type:"button"},...r),p=S(e,"div");p.setAttribute("data-obelism-content-editor","");let c=p.attachShadow({mode:"open"}),u=S(e,"style",{textContent:(i=`[${t}]`,`html[data-obelism-editor]{transition:margin-right .3s cubic-bezier(.2,.8,.2,1)}html[data-obelism-docked]{margin-right:436px!important}html[data-obelism-docked] [data-obelism-dock]{right:436px!important;max-width:calc(100vw - 436px)!important}html[data-obelism-editor][data-cms-selecting] ${i}:hover:not([data-cms-selected]){outline:none}html[data-obelism-editor][data-cms-selecting] ${i}[data-cms-selected]{outline:2px solid rgb(212 130 30);outline-offset:2px}@media (prefers-reduced-motion:reduce){html[data-obelism-editor]{transition:none}}`)}),g=S(e,"span",{className:"tile"},M(e,"mark",P)),h=S(e,"span"),b=d("page-button hit",h,S(e,"span",{className:"visually-hidden",textContent:`, ${o.pages}`}),O(e,"chevrons"));b.setAttribute("aria-haspopup","listbox"),b.setAttribute("aria-expanded","false"),b.setAttribute("aria-controls","obelism-pages");let m=S(e,"span",{className:"page-name"}),f=S(e,"span"),v=S(e,"span",{className:"env"},S(e,"span",{className:"visually-hidden",textContent:`${o.environment}: `}),f),x=d("icon-button hit",O(e,"dash"));x.setAttribute("aria-label",o.minimize),x.title=o.minimize;let y=d("mode hit",M(e,"mark",P),o.modePrompt);y.setAttribute("aria-pressed","false");let w=S(e,"div",{className:"head"},g,b,m,v,S(e,"span",{className:"spacer"}),y,x),k=D(e,n,o,{onLoad:()=>td(),onClose:()=>tb(!1)}),E=d("button quiet new-page",O(e,"plus"),o.newPage),C=S(e,"div",{className:"pages"},k.searchRow,k.list,k.note,E),A=d("button primary",o.keep),L=d("button quiet",o.undo),z=S(e,"div",{className:"gate"},S(e,"p",{textContent:o.keepBeforeFields}),S(e,"div",{className:"actions"},A,L));z.setAttribute("role","alert");let j=S(e,"span"),T=d("",o.scopeEntry),_=d("",o.newPageCancel),W=S(e,"div",{className:"note"},O(e,"scope"),j,T,_),Y=S(e,"p",{className:"intro",textContent:o.askIntro}),X=S(e,"p",{className:"summary"}),K=S(e,"span"),J=d("button primary",O(e,"plus"),K),Z=S(e,"div",{className:"shop"},X,J),en=S(e,"div",{className:"log"});en.setAttribute("role","log");let ea=S(e,"div",{className:"scroll"},W,Y,Z,en),ei=S(e,"input",{type:"text",placeholder:o.pathPlaceholder,autocomplete:"off",spellcheck:!1}),eo=S(e,"label",{className:"path"},S(e,"span",{textContent:o.path}),ei),es=S(e,"textarea",{rows:1});es.setAttribute("aria-label",o.open);let el=O(e,"arrowUp"),ed=M(e,"working",$),ep=S(e,"button",{className:"send",type:"submit",title:o.send},S(e,"span",{className:"visually-hidden",textContent:o.send}),el,ed),ec=S(e,"div",{className:"bar"},M(e,"mark",P),es,ep),eu=S(e,"form",{className:"composer"},eo,ec),eg=S(e,"div",{className:"ask",id:"obelism-ask"},ea,eu);eg.setAttribute("role","tabpanel"),eg.setAttribute("aria-label",o.modePrompt);let eh=S(e,"p",{className:"form-note"});eh.setAttribute("role","status");let eb=S(e,"div",{className:"form"},eh),em=S(e,"span"),ef=d("",o.scopeEntry),ev=S(e,"div",{className:"note"},O(e,"scope"),em,ef),ex=S(e,"div",{className:"fields",id:"obelism-fields"},ev,eb);ex.setAttribute("role","tabpanel"),ex.setAttribute("aria-label",o.form);let ey=S(e,"p",{className:"save-state"});ey.setAttribute("aria-live","polite");let ew=S(e,"slot");ew.name="actions-footer";let ek=d("button quiet",O(e,"undo"),o.undo),eE=d("button secondary",o.saveDraft),eC=d("button primary",o.publish),eA=S(e,"div",{className:"foot"},ey,ew,ek,eE,eC),eN=S(e,"p",{className:"visually-hidden"});eN.setAttribute("role","status");let eL=S(e,"aside",{className:"panel",id:"obelism-editor"},w,C,z,eg,ex,eA,eN);eL.setAttribute("aria-label",o.editor);let eS=d("launch",S(e,"span",{className:"launch-tile"},M(e,"mark",P)),o.editing);eS.setAttribute("aria-controls",eL.id);let eP=S(e,"span",{className:"reading"},S(e,"span",{className:"launch-tile"},M(e,"mark",P)),o.viewingDrafts),e$=O(e,"eye"),eM=O(e,"eyeOff"),eU=d("eye",e$,eM);eU.setAttribute("aria-label",o.hideOutlines),eU.title=o.hideOutlines;let ez=S(e,"slot");ez.name="actions-bar";let eO=d("exit",o.signOut),eI=S(e,"div",{className:"launcher"},eS,eP,eU,ez,eO);a.actions&&p.appendChild(a.actions);let ej=S(e,"div",{className:"layer"});ej.setAttribute("aria-hidden","true");let eT=S(e,"div",{className:"wash"});eT.setAttribute("aria-hidden","true");let eR=S(e,"div",{className:"root"},eT,ej,eL,eI);c.append(S(e,"style",{textContent:Q}),eR);let eD=(e=>{try{return e?.localStorage.getItem(G)!=="minimised"}catch{return!0}})(s),eq="fields",eF="fields",eB=!1,eV=!1,eH=!0,e_=!1,eW=null,eY=!1,eX=null,eK=[],eJ=!0,eZ=null,eG=new Map,eQ=new Map,e0="idle",e1=!1,e2=I(n,eb,o.formTitle,{onReady:()=>{td(),eD&&"fields"===eF&&e4()},onError:()=>td(),onEscape:()=>tf()}),e4=()=>eb.querySelector("iframe")?.focus(),e5=()=>eK.filter(({status:e})=>"pending"===e),e6=()=>e5().slice(-1)[0]??null,e3=()=>eK.some(({status:e})=>"working"===e)?null:e6(),e8=e=>(eG.has(e)||"loading"===e0||(eG.set(e,null),n.view({uid:e}).then(t=>{"string"==typeof t._type&&eG.set(e,ee(t._type)),td()},()=>{})),eG.get(e)??o.block),e7=(e,t=null)=>{if(Array.isArray(e))e.forEach(e=>e7(e,t));else if(et(e)){let r=t;"string"==typeof e._uid&&"string"==typeof e._type&&(r=e._uid,eQ.set(r,t),eG.set(r,ee(e._type))),Object.values(e).forEach(e=>e7(e,r))}},e9=r=>e.querySelector(N(r))?.parentElement?.closest(`[${t}]`)?.getAttribute(t)??eQ.get(r)??null,te=()=>k.current()?.name||e.title.trim(),tt=null,tr=()=>{null===tt&&s&&(tt=s.requestAnimationFrame(()=>{tt=null,(t=>{if(ej.replaceChildren(),eT.replaceChildren(),!ta(t))return;let n=t=>{let r=e.querySelector(t),n=r?.getBoundingClientRect();return n&&(n.width||n.height)?n:null},a=(t,r,n=ej)=>{let a=S(e,"div",{className:`box ${r}`});Object.assign(a.style,{top:`${t.top-3}px`,left:`${t.left-3}px`,width:`${t.width+6}px`,height:`${t.height+6}px`}),n.appendChild(a)},i=(t,...r)=>{let n=S(e,"div",{className:"chips"},...r),a=t.top-34<0?t.top+6:t.top-34;Object.assign(n.style,{top:`${a}px`,left:`${t.left-3}px`}),ej.appendChild(n)},s=(t,r)=>{let n=S(e,"span",{className:"accent-chip"});return r&&n.appendChild(M(e,"mark",P)),n.appendChild(e.createTextNode(t)),n},l=e6(),d=l?l.uid?N(l.uid):`[${r}]`:null,p=d?n(d):null;if(p&&a(p,"fill",eT),eZ&&eZ!==t.selectedUid){let t=n(N(eZ));if(t){a(t,"hover");let r=t.top-23<0,n=S(e,"span",{className:`name-tab${r?" inside":""}`,textContent:e8(eZ)});Object.assign(n.style,{top:`${r?t.top-1.5:t.top-23}px`,left:`${t.left-3}px`}),ej.appendChild(n)}}let c=!!l&&l.uid===t.selectedUid;if(t.selectedUid){let r=n(N(t.selectedUid));if(r){let n=e8(t.selectedUid),a=te();i(r,s(c?U(o.previewChip,{name:n}):n,c),...a?[S(e,"span",{className:"ink-chip",textContent:a})]:[])}}if(p&&!c){a(p,"preview");let e=l.uid?e8(l.uid):te()||o.pages;i(p,s(U(o.previewChip,{name:e}),!0))}})(n.getState())}))},tn=e=>e.features.includes("prompt")&&eD,ta=e=>tn(e)&&eH&&!eV,ti=t=>S(e,"span",{className:`value${t?"":" none"}`,textContent:t||o.emptyValue}),to=t=>{let r=t.node.querySelector(".card");if(r.querySelector(".status-line")?.remove(),"failed"===t.status)return void r.appendChild(S(e,"p",{className:"failure"},O(e,"alert"),t.summary));for(let n of(r.appendChild(t.eyebrow),t.summary&&r.appendChild(S(e,"p",{className:"summary",textContent:t.summary})),t.diffs.slice(0,3))){let a=S(e,"div",{className:"diff-field"},S(e,"span",{className:"diff-label",textContent:n.label}),S(e,"div",{className:"diff"},S(e,"div",{className:"before"},S(e,"span",{className:"tag",textContent:o.before}),ti(n.before)),S(e,"div",{className:"after"},S(e,"span",{className:"tag",textContent:o.after}),ti(n.after))));t.details.push(a),r.appendChild(a)}if(t.diffs.length>3){let n=S(e,"p",{className:"more",textContent:U(o.moreChanges,{count:t.diffs.length-3})});t.details.push(n),r.appendChild(n)}if("pending"===t.status){let n=d("button primary",o.keep),a=d("button secondary",o.retry),i=d("button quiet",o.undo);n.addEventListener("click",()=>tv()),a.addEventListener("click",()=>void tw(t)),i.addEventListener("click",()=>tx(t)),t.actions=S(e,"div",{className:"actions"},n,a,i),r.appendChild(t.actions)}},ts=(t,r)=>{let n=S(e,"div",{className:"card"},S(e,"span",{className:"visually-hidden",textContent:`${o.obelism}: `}),S(e,"p",{className:"status-line"},M(e,"working",$),eV?o.creating:o.working)),a=S(e,"div",{className:"answer"},S(e,"span",{className:"chip"},M(e,"mark",P)),n);a.dataset.status="working";let i={prompt:t,uid:r,status:"working",summary:"",diffs:[],step:null,node:a,eyebrow:S(e,"p",{className:"eyebrow"}),actions:null,details:[]};return eK.push(i),en.appendChild(a),i},tl=t=>{if(e1)return;let r=t.features.includes("prompt"),i=t.saving||t.publishing,s=t.prompting||i,p=r&&eD,{site:c,canCreate:u,pageless:g,shopHere:x,onlyNew:w}=F(n,t,a.promptWithoutPage);u||(eV=!1),w&&(eV=!0);let N=c&&!eV&&!g&&t.features.includes("form");eF=N?eq:"ask";let P=e5().length>0;for(let e of(P&&"fields"!==eF||(eB=!1),eK))null!==e.step&&e.step>(t.undoSteps??0)&&(e.step=null);eR.hidden=!r&&!c,eL.toggleAttribute("data-closed",!p),eL.inert=!p,eS.hidden=!r,eS.setAttribute("aria-expanded",String(p)),eP.hidden=r,eU.hidden=!p,eU.setAttribute("aria-pressed",String(!eH)),e$.hidden=!eH,eM.hidden=eH,eO.hidden=!1===a.signOut;let I=p&&eJ;l.toggleAttribute("data-obelism-docked",I),l.style.setProperty("--obelism-dock",`${436*!!I}px`);let R=p&&eH&&!eV;t.selecting!==R&&n.setSelecting(R);let D=p&&"fields"===eF;D&&!e2.mounted?e2.mount():!D&&e2.mounted&&e2.unmount(),e_&&!p&&(e_=!1),h.textContent=te()||o.pages,b.hidden=null===k.pages&&null!==k.error,m.hidden=!b.hidden,m.textContent=te()||o.pages,b.setAttribute("aria-expanded",String(e_)),C.hidden=!e_,E.hidden=!u||eV,E.disabled=s;let q=n.environment;v.hidden=!q,v.dataset.env=q??"",f.textContent="production"===q?o.envProduction:q??"",y.hidden=!N,y.setAttribute("aria-pressed",String("ask"===eF)),y.disabled=s,z.hidden=!eB,A.disabled=L.disabled=s,eg.hidden="ask"!==eF,ex.hidden="fields"!==eF;let V=null!==x&&!eV;if(eV)j.textContent=o.newPage;else if(t.selectedUid){let[r,n=""]=o.scopeNoteBlock.split("{name}");for(let a of[j,em])a.replaceChildren(r??"",S(e,"strong",{textContent:e8(t.selectedUid)}),n)}else j.textContent=o.scopeNotePage;let H=t.selectedUid?e9(t.selectedUid):null,G=H?U(o.scopeUp,{name:e8(H)}):o.scopeEntry;for(let e of[T,ef])e.textContent!==G&&(e.textContent=G);ev.hidden=eV||!t.selectedUid,W.hidden=V||g&&!eV&&!a.promptWithoutPage,T.hidden=eV||!t.selectedUid,_.hidden=!eV||w,Y.hidden=eK.length>0||V||eV,Z.hidden=!V;let Q=B(o,x);K.textContent=t.prompting&&V?Q.adding:Q.add,J.disabled=s,X.textContent=eX?.text??Q.hint,X.className=eX?.error?"failure":"summary",eu.hidden=V,eo.hidden=!eV,ei.disabled=s,es.placeholder=eV?o.newPagePlaceholder:o.placeholder,es.disabled=s,ep.disabled=s||""===es.value.trim()||eV&&""===ei.value.trim(),ep.setAttribute("aria-busy",String(t.prompting)),el.hidden=t.prompting,ed.hidden=!t.prompting,ek.hidden=P||!t.canUndo||eV,ek.disabled=s,eE.hidden=!t.features.includes("save")||g,eE.disabled=s||P||!t.unsaved,eC.hidden=!t.features.includes("publish")||g,eC.disabled=s||P,a.actions&&(a.actions.slot=p?"actions-footer":"actions-bar"),eA.hidden=!c,t.unsaved&&!eY&&(eW=null),eY=t.unsaved;let ee=i?M(e,"working",$):eW?.kind==="error"?O(e,"alert"):P||t.unsaved?S(e,"span",{className:"dot"}):O(e,"check"),et=t.saving?o.saving:t.publishing?o.publishing:eW?.kind==="error"?`${"save"===eW.action?o.saveFailed:o.publishFailed}: ${eW.text}`:P?o.keepFirst:t.unsaved?o.unsaved:eW?.kind==="saved"?o.saved:eW?.kind==="published"?o.published:o.upToDate,er=i?"saving":eW?.kind==="error"?"error":P||t.unsaved?"unsaved":"saved";if((ey.dataset.state!==er||ey.dataset.text!==et)&&(ey.dataset.state=er,ey.dataset.text=et,ey.replaceChildren(ee,S(e,"span",{textContent:et})),eW?.kind==="error"&&!i)){let e=eW.action,t=d("link",o.tryAgain);t.addEventListener("click",()=>void tE(e)),ey.appendChild(t)}eb.classList.toggle("loading",e2.loading||null!==e2.error),eh.hidden=!e2.loading&&null===e2.error,eh.className=`form-note${null!==e2.error?" error":""}`,eh.textContent=e2.error??o.formLoading;let en=e3();for(let e of eK){if("working"===e.status||"failed"===e.status)continue;e.node.dataset.status=e.status;let t="pending"===e.status?o.suggested:"kept"===e.status?o.kept:o.undone;for(let r of(e.eyebrow.textContent!==t&&(e.eyebrow.textContent=t),e.actions&&(e.actions.hidden=e!==en),e.details))r.hidden="undone"===e.status}p&&((()=>{if("idle"!==e0||null===n.entryId)return;e0="loading";let e=()=>{e0="done",td()};n.view({uid:null}).then(t=>{e7(t),e()},e)})(),null===k.pages&&null===k.error&&k.fetch()),tr()},td=()=>tl(n.getState()),tp=()=>{es.style.height="auto",es.style.height=`${es.scrollHeight}px`},tc=()=>{ea.scrollTop=ea.scrollHeight},tu=e=>{eD=e;try{s?.localStorage.setItem(G,eD?"open":"minimised")}catch{}eD||(e_=!1),td(),eD?eV?ei.focus():"fields"===eF?e4():es.focus():eS.focus()},tg=e=>{if("fields"===e&&e5().length>0){eB=!0,td(),A.focus();return}if(eB=!1,eq===e)return td();eq=e,td()},th=e=>{e_=!1,(eV=e)&&n.select(null),td(),(eV?ei:es).focus()},tb=e=>{(e_=e)&&k.reset(),td(),(e_?k.search:b).focus()},tm=()=>{let{selectedUid:e}=n.getState();return e&&n.select(e9(e)),!n.getState().selectedUid},tf=()=>{let e=n.getState();if(!tn(e))return!1;if(e_)tb(!1);else{if(!e.selectedUid)return!1;tm()}return!0},tv=(e=!0)=>{let t=e5();t.length&&e3()&&(t.forEach(e=>{e.status="kept"}),td(),e&&es.focus())},tx=(e,t=!0)=>{e===e3()&&(n.undo(),e.status="undone",td(),t&&es.focus())},ty=async(e,t)=>{let r={uid:e.uid},a=await n.view(r).catch(()=>null);try{let{summary:i}=await n.prompt(t,r);e.step=n.getState().undoSteps??null;let o=a?await n.view(r).catch(()=>null):null;e.summary=i,e.diffs=a&&o?((e,t)=>{let r=new Map,n=new Map;er(e,"","",r),er(t,"","",n);let a=[];for(let e of new Set([...r.keys(),...n.keys()])){let t=r.get(e),i=n.get(e);t?.text!==i?.text&&a.push({label:(i??t).label,before:t?.text??"",after:i?.text??""})}return a})(a,o):[],e.status="pending"}catch(t){e.summary=q(t),e.status="failed"}to(e),td(),tc()},tw=async e=>{if(e!==e3())return;n.undo(),e.status="undone";let t=ts(e.prompt,e.uid);td(),tc(),es.focus(),await ty(t,U(o.retryPrompt,{prompt:e.prompt}))},tk=async()=>{let t=es.value.trim(),r=n.getState();if(!t||r.prompting)return;let a=ei.value.trim();if(eV&&!a)return ei.focus();let i=eV?null:r.selectedUid,s=eV?`${o.newPage} \xb7 ${a}`:i?e8(i):o.scopeEntry;en.appendChild(S(e,"p",{className:"bubble"},S(e,"span",{className:"visually-hidden",textContent:`${o.you} (${s}): `}),t)),es.value="",tp();let l=ts(t,i);if(td(),tc(),eV){try{await n.createPage(a,t),k.forget(),l.summary=o.created,l.status="kept"}catch(e){l.summary=q(e),l.status="failed"}to(l),td()}else await ty(l,t);es.focus()},tE=async e=>{eW=null;let t=await H(n,e);eW=t?{kind:"error",action:e,text:t}:{kind:"save"===e?"saved":"published"},td()};eS.addEventListener("click",()=>tu(!eD)),x.addEventListener("click",()=>tu(!1)),eU.addEventListener("click",()=>{eH=!eH,td()}),eO.addEventListener("click",()=>n.signOut()),b.addEventListener("click",()=>tb(!e_)),E.addEventListener("click",()=>th(!0)),_.addEventListener("click",()=>th(!1)),T.addEventListener("click",()=>{tm()&&es.focus()}),ef.addEventListener("click",()=>{tm()&&e4()}),J.addEventListener("click",async()=>{eX=null,eX=await V(n,o),td()}),y.addEventListener("click",()=>tg("ask"===eq?"fields":"ask")),A.addEventListener("click",()=>{tv(!1),tg("fields"),e4()}),L.addEventListener("click",()=>{for(let e=e3();e;e=e3())tx(e,!1);tg("fields"),e4()}),ek.addEventListener("click",()=>{let e=n.getState().undoSteps,t=void 0===e?void 0:eK.find(t=>"kept"===t.status&&t.step===e);if(n.undo(),t){var r;t.status="undone",td(),r=`${o.undone}: ${t.summary}`,eN.textContent="",eN.textContent=r}ek.hidden&&es.focus()}),eE.addEventListener("click",()=>void tE("save")),eC.addEventListener("click",()=>void tE("publish")),eu.addEventListener("submit",e=>{e.preventDefault(),tk()}),es.addEventListener("input",()=>{tp(),td()}),es.addEventListener("keydown",e=>{"Enter"!==e.key||e.shiftKey||e.isComposing||(e.preventDefault(),tk())}),ei.addEventListener("input",td),ei.addEventListener("keydown",e=>{"Enter"!==e.key||e.isComposing||(e.preventDefault(),es.focus())});let tC=e=>{"Escape"===e.key&&!e.defaultPrevented&&tf()&&e.preventDefault()};e.addEventListener("keydown",tC);let tA=e=>{let r=e.target,n=r?.closest?.(`[${t}]`),a=n?.getAttribute(t)??null;a!==eZ&&(eZ=a,tr())},tN=()=>{eZ=null,tr()};e.addEventListener("pointerover",tA),l.addEventListener("pointerleave",tN),s?.addEventListener("scroll",tr,{capture:!0,passive:!0}),s?.addEventListener("resize",tr);let tL=s?.MutationObserver,tS="function"==typeof tL?new tL(tr):null;tS?.observe(e.body,{childList:!0,subtree:!0});let tP=s?.ResizeObserver,t$="function"==typeof tP?new tP(tr):null;t$?.observe(l);let tM=s?.matchMedia?.("(min-width: 768px)")??null;eJ=tM?.matches??!0;let tU=()=>{eJ=tM?.matches??!0,td()};tM?.addEventListener?.("change",tU);let tz=n.on("change",tl);return l.setAttribute("data-obelism-editor",""),e.head.appendChild(u),e.body.appendChild(p),td(),()=>{e1=!0,tz(),e2.unmount(),null!==tt&&s?.cancelAnimationFrame?.(tt),e.removeEventListener("keydown",tC),e.removeEventListener("pointerover",tA),l.removeEventListener("pointerleave",tN),s?.removeEventListener("scroll",tr,{capture:!0}),s?.removeEventListener("resize",tr),tM?.removeEventListener?.("change",tU),tS?.disconnect(),t$?.disconnect(),n.setSelecting(!1),l.removeAttribute("data-obelism-editor"),l.removeAttribute("data-obelism-docked"),l.style.removeProperty("--obelism-dock"),u.remove(),p.remove()}},ea=Symbol.for("@obelism/content/bridge"),ei=L({isEditing:!1,entryId:null,on:()=>{}},new URLSearchParams),eo=({url:e,prompt:o=!0,pagePath:l,productPath:d,collectionPath:p}={})=>{let u;if("u"<typeof window)return ei;let g=window;if(g[ea])return g[ea];if(g.ObelismBridge)u=L(g.ObelismBridge,new URLSearchParams(g.location.search));else{let f=(u=((e,r)=>{let n,a,o,s,l,d=new URLSearchParams(e.location.search),p=e.parent!==e&&d.has("cms_preview"),u=y(),g=[],f={...x,selecting:!0},w=e=>{f={...f,...e},u.emit("change",f)},k={isEditing:p,mode:p?"editor":null,entryId:d.get("cms_entry"),environment:d.get(i),product:null,collection:null,on:u.on,getState:()=>f,...E,destroy:()=>{g.splice(0).forEach(e=>e())}};if(!p)return k;let C=e.document,L=(t,n={})=>{e.parent.postMessage({source:m,type:t,...n},r)},S=C.createElement("style");S.textContent=v(),C.head.appendChild(S),g.push(()=>S.remove());let P=(e,t)=>{if(C.querySelectorAll("[data-cms-selected]").forEach(e=>{e.removeAttribute("data-cms-selected")}),f.selectedUid!==(e??null)&&w({selectedUid:e??null}),!e)return;let r=C.querySelector(N(e));r&&(r.setAttribute("data-cms-selected",""),t&&r.scrollIntoView({behavior:"smooth",block:"center"}))},$=e=>{let r=e.target,n=r?.closest?.(`[${t}]`);if(!n)return;e.preventDefault(),e.stopPropagation();let a=n.getAttribute(t);P(a,!1),L("select",{uid:a})};C.addEventListener("click",$,!0),g.push(()=>C.removeEventListener("click",$,!0));let M=()=>Math.ceil(Math.max(C.documentElement.scrollHeight,C.body?.scrollHeight??0)),U=0,z=()=>{U=M(),L("ready",{url:e.location.href,height:U})},O=e.ResizeObserver;if("function"==typeof O){let e=new O(()=>{let e=M();e!==U&&(U=e,L("size",{height:e}))});e.observe(C.documentElement),C.body&&e.observe(C.body),g.push(()=>e.disconnect())}let I=new Map,j=0,T=e=>{let t=I.get(e);return t?(clearTimeout(t.timer),I.delete(e),0===I.size&&w({prompting:!1}),t):null};k.prompt=(e,t={})=>{let r=e.trim();if(!r)return Promise.reject(Error("Say what to change"));if(!f.features.includes("prompt"))return Promise.reject(Error("The editor does not offer prompts here"));let n=`prompt_${++j}`,a=void 0===t.uid?f.selectedUid:t.uid;return new Promise((e,t)=>{let i=setTimeout(()=>{T(n)?.reject(Error("The editor did not answer in time"))},12e4);I.set(n,{resolve:e,reject:t,timer:i}),w({prompting:!0}),L("prompt",{id:n,prompt:r,uid:a})})},k.undo=()=>L("undo"),k.select=e=>{P(e,!1),L("select",{uid:e})};let R=null;g.push(()=>R?.destroy()),g.push(()=>{for(let e of I.keys())T(e)?.reject(Error("The bridge was destroyed"))});let D=(n=new WeakSet,a=null,o=null,s=!1,l=()=>{if(null!==a){for(let e of Array.from(C.styleSheets)){let t;if(!n.has(e)){try{t=e.cssRules}catch{continue}n.add(e),b(t,a)}}C.querySelectorAll('[style*="vh"]').forEach(e=>{h(e.style,a)})}},{freeze(e){if(null!==a||!(e>0))return;a=e,l();let t=C.defaultView?.MutationObserver;t&&(o=new t(()=>{if(s)return;s=!0;let e=()=>{s=!1,l()};C.defaultView?.requestAnimationFrame?C.defaultView.requestAnimationFrame(e):e()})).observe(C.documentElement,{childList:!0,subtree:!0})},destroy(){o?.disconnect()}});g.push(()=>D.destroy());let q=t=>{if(t.origin!==r||t.source!==e.parent)return;let n=t.data;if(n&&"obelism-content-editor"===n.source){if("connect"===n.type)z();else if("update"===n.type&&n.entry)u.emit("update",{entry:n.entry,selectedUid:n.selectedUid??null}),e.requestAnimationFrame(()=>P(n.selectedUid,!1)),R?.refresh();else if("select"===n.type)P(n.uid,!0);else if("saved"===n.type||"published"===n.type)u.emit(n.type,{}),0===u.listeners.update.size&&e.location.reload();else if("features"===n.type&&Array.isArray(n.features))w({features:n.features.filter(e=>"string"==typeof e)});else if("stats"===n.type)w({stats:A(n.stats),statsVisible:!1!==n.visible}),(R||Object.keys(f.stats).length)&&(R??(R=c(e,{selector:N,onSelect:e=>k.select(e)})),R.update(f.stats,f.statsVisible));else if("viewport"===n.type&&"number"==typeof n.height)D.freeze(n.height);else if("promptState"===n.type)w({canUndo:!0===n.canUndo});else if("promptResult"===n.type&&"string"==typeof n.id){let e=T(n.id);if(!e)return;!0===n.ok?e.resolve({summary:"string"==typeof n.summary?n.summary:""}):e.reject(Error("string"==typeof n.error?n.error:"The prompt failed"))}}};return e.addEventListener("message",q),g.push(()=>e.removeEventListener("message",q)),"loading"===C.readyState?(C.addEventListener("DOMContentLoaded",z,{once:!0}),g.push(()=>C.removeEventListener("DOMContentLoaded",z))):z(),k})(g,new URL(e||X).origin)).isEditing||g.parent!==g?null:(e=>{for(let t of e.cookie.split(";")){let[e,...r]=t.trim().split("=");if("obelism_content_editing"===e)try{let e=decodeURIComponent(r.join("="));return K.test(e)?e:null}catch{break}}return null})(g.document);if(f&&(u=((e,i,{pagePath:o=e=>`/${e.replace(/^\/+/,"")}`,productPath:l,collectionPath:d}={})=>{let p=e.document,u=y(),g=[],h=new Map,b=[],f=new Set,w=null,k=null,E=-1/0,C=new Map,L=x,S=e=>{L={...L,...e},u.emit("change",L)},P=()=>S({unsaved:[...h.values()].some(({content:e,saved:t})=>!Z(e,t)),canUndo:b.length>0,undoSteps:b.length}),$=async(t,r)=>{let n=await e.fetch(`${i}/api/${t}`,void 0===r?{credentials:"same-origin"}:{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json","x-obelism-content":"1"},body:JSON.stringify(r)}),a=await n.json().catch(()=>({}));if(401===n.status)throw S({features:[]}),Error("You were signed out. Sign in again to edit.");if(!n.ok)throw Error("string"==typeof a.error?a.error:`Obelism Content answered ${n.status}`);return a},M=()=>p.querySelector(`[${r}]`)?.getAttribute(r)??null,U=()=>{let e=p.querySelector(`[${n}]`),t=e?.getAttribute(n),r=e?.getAttribute("data-cms-product-handle");return t&&r?{id:t,handle:r}:null},z=()=>{let e=p.querySelector(`[${a}]`),t=e?.getAttribute(a),r=e?.getAttribute("data-cms-collection-handle");return t&&r?{id:t,handle:r}:null},O=e=>{let t=e?p.querySelector(N(e)):null;return t?.closest(`[${r}]`)?.getAttribute(r)??M()},I=()=>{if(!w)return;let e=w.space.locales.map(({code:e})=>e),t=p.documentElement.lang;if(e.includes(t))return t;let r=t.split("-")[0]??"";return e.includes(r)?r:w.space.defaultLocale},j=new Map,T=async e=>{let t=h.get(e);if(t)return t;let r=j.get(e);return r||(r=$(`entries/${encodeURIComponent(e)}`).then(t=>{let r=h.get(e)??{content:t.content,saved:t.content,revision:t.draftRevision};return h.set(e,r),r}).finally(()=>j.delete(e)),j.set(e,r)),r},R=e=>{let t=void 0===e?L.selectedUid:e,r=O(t);if(!r)throw Error("Nothing on this page is marked as an entry: add editable(entry)");return{uid:t,entryId:r}},D=e=>{p.querySelectorAll("[data-cms-selected]").forEach(e=>{e.removeAttribute("data-cms-selected")}),L.selectedUid!==e&&S({selectedUid:e}),e&&p.querySelector(N(e))?.setAttribute("data-cms-selected","")},q=async t=>{if(0===u.listeners.update.size)return;let r=h.get(t)?.content,{entry:n}=await $(`entries/${encodeURIComponent(t)}/preview`,{content:r,locale:I()});u.emit("update",{entry:n,selectedUid:L.selectedUid}),e.requestAnimationFrame(()=>D(L.selectedUid))},F=e=>console.error("[@obelism/content bridge]",e),B=t=>{u.emit(t,{}),0===u.listeners.update.size&&e.location.reload()},V=async()=>{for(let[e,t]of h){if(Z(t.content,t.saved))continue;let{draftRevision:r}=await $(`entries/${encodeURIComponent(e)}/save`,{content:t.content,baseRevision:t.revision});t.saved=t.content,t.revision=r,f.add(e)}b.length=0,E=-1/0,P()},H={isEditing:!0,mode:"site",get entryId(){return M()},get product(){return U()},get collection(){return z()},get environment(){return w?.environment??null},on:u.on,getState:()=>L,async prompt(e,t={}){let r=e.trim();if(!r)throw Error("Say what to change");if(!L.features.includes("prompt"))throw Error("You may not edit content here");let{uid:n,entryId:a}=R(t.uid);S({prompting:!0});try{let e=await T(a),t=await $(`entries/${encodeURIComponent(a)}/prompt`,{prompt:r,content:e.content,locale:I(),uid:n});return b.push({entryId:a,content:e.content}),E=-1/0,e.content=t.content,P(),await q(a),{summary:t.summary}}finally{S({prompting:!1})}},async createPage(t,r){let n=r.trim();if(!n)throw Error("Say what the page is for");if(!t.trim())throw Error("Say where the page goes, like /pricing");if(!L.features.includes("create"))throw Error("You may not add pages here");if(L.unsaved)throw Error("Save or undo your changes before adding a page");S({prompting:!0});try{let r=await $("entries",{path:t,prompt:n,locale:I(),from:M()}),a=o(r.path,I()??"");return e.location.assign(J(a)),{summary:r.summary,entryId:r.entryId,path:r.path,url:a}}finally{S({prompting:!1})}},async createProductPage(t=U()??void 0){if(!t)throw Error("Nothing on this page is marked as a product: add editableProduct(product)");if(!L.features.includes("create"))throw Error("You may not add pages here");if(L.unsaved)throw Error("Save or undo your changes before adding a page");S({prompting:!0});try{let r=await $("product-pages",{product:{id:t.id,handle:t.handle}});return e.location.reload(),r}finally{S({prompting:!1})}},async createCollectionPage(t=z()??void 0){if(!t)throw Error("Nothing on this page is marked as a collection: add editableCollection(collection)");if(!L.features.includes("create"))throw Error("You may not add pages here");if(L.unsaved)throw Error("Save or undo your changes before adding a page");S({prompting:!0});try{let r=await $("collection-pages",{collection:{id:t.id,handle:t.handle}});return e.location.reload(),r}finally{S({prompting:!1})}},async view(e={}){let{uid:t,entryId:r}=R(e.uid),n=await T(r),{view:a}=await $(`entries/${encodeURIComponent(r)}/view`,{content:n.content,locale:I(),uid:t});return a},async applyJson(e,t={}){if(!L.features.includes("prompt"))throw Error("You may not edit content here");if(!e||"object"!=typeof e||Array.isArray(e))throw Error("Send the fields to change as an object");let{uid:r,entryId:n}=R(t.uid);S({prompting:!0});try{let t=await T(n),a=await $(`entries/${encodeURIComponent(n)}/apply`,{changes:e,content:t.content,locale:I(),uid:r});return Z(a.content,t.content)||(b.push({entryId:n,content:t.content}),E=-1/0,t.content=a.content,P(),await q(n)),{changed:a.changed??[],...a.view&&{view:a.view}}}finally{S({prompting:!1})}},openForm(t,r={}){let{title:n="Content form",onReady:a,onError:i,onEscape:o}=r;k?.();let s=!1,l=null,d=null,p=()=>{},c=e=>{s||i?.(e instanceof Error?e.message:String(e))},g=()=>{s||(s=!0,p(),l?.destroy(),k===g&&(k=null))};k=g;let f=()=>{if(s||!l)return;let e=O(L.selectedUid);if(!e)return;let t=h.get(e);if(!t)return void T(e).then(f,c);let r={entryId:e,content:t.content,locale:I(),selectedUid:L.selectedUid};d&&d.entryId===r.entryId&&d.content===r.content&&d.locale===r.locale&&d.selectedUid===r.selectedUid||(d=r,l.show(r))},v=(e,t)=>{let r=t??d?.entryId,n=void 0===r?void 0:h.get(r);if(s||void 0===r||!n||Z(e,n.content))return;let a=Date.now();a-E>=1e3&&b.push({entryId:r,content:n.content}),E=a,n.content=e,d?.entryId===r&&(d={...d,content:e}),P(),clearTimeout(C.get(r)),C.set(r,setTimeout(()=>{C.delete(r),q(r).catch(F)},300))};return(async()=>{if(!L.features.includes("form"))throw Error("You may not edit content here");await T(R(void 0).entryId);let{url:r}=await $("form",{});s||(l=((e,t,r,n,a)=>{let i=null;try{i=new URL(r)}catch{}if(!i||!/^https?:$/.test(i.protocol))throw Error("Obelism Content sent no form to open");let o=i.origin,s=t.ownerDocument.createElement("iframe");s.title=n,s.src=r;let l=!1,d=!1,p=null,c=()=>{l&&p&&s.contentWindow?.postMessage({source:m,type:"content",...p},o)},u=setTimeout(()=>{d||a.onError("The form did not open")},3e4),g=()=>{d=!0,clearTimeout(u),a.onReady()},h=e=>{if(e.origin!==o||!s.contentWindow||e.source!==s.contentWindow)return;let t=e.data;if(t&&"obelism-content-form"===t.source)if("ready"===t.type)l=!0,c(),!0!==t.loading&&g();else if("loaded"===t.type)l&&g();else{let e;if("change"!==t.type||!(e=t.content)||"object"!=typeof e||Array.isArray(e))if("height"===t.type){let e=t.height;if("number"==typeof e&&Number.isFinite(e)){let t=Math.round(Math.min(Math.max(e,80),4e3));s.style.height=`min(${t}px, 60vh)`}}else"escape"===t.type?a.onEscape?.():"error"===t.type&&a.onError("string"==typeof t.message&&t.message?t.message:"The form failed");else a.onChange(t.content,"string"==typeof t.entryId?t.entryId:void 0)}};return e.addEventListener("message",h),t.appendChild(s),{show(e){p=e,c()},destroy(){clearTimeout(u),e.removeEventListener("message",h),s.remove()}}})(e,t,"string"==typeof r?r:"",n,{onReady:()=>a?.(),onChange:v,onError:e=>i?.(e),onEscape:()=>o?.()}),p=u.on("change",f),f())})().catch(c),{close:g}},async pages(){let{pages:e}=await $("pages"),t=[I(),w?.space.defaultLocale];return e.flatMap(e=>{let r,n,a=t.find(t=>void 0!==t&&void 0!==e.paths[t])??Object.keys(e.paths)[0],i=void 0===a?void 0:e.paths[a];return void 0===a||void 0===i?[]:[{entryId:e.entryId,name:e.name,contentType:e.contentType,status:e.status,path:i,url:e.product?(r=e.product.handle,l?l(r,a):(w?.productPath??"/products/{handle}").replaceAll("{handle}",encodeURIComponent(r))):e.collection?(n=e.collection.handle,d?d(n,a):(w?.collectionPath??"/collections/{handle}").replaceAll("{handle}",encodeURIComponent(n))):o(i,a),product:e.product??null,collection:e.collection??null}]})},openPage(t){(!L.unsaved||e.confirm("Leave this page and lose the changes you have not saved?"))&&(h.clear(),b.length=0,P(),e.location.assign(J(t.url)))},undo(){let e=b.pop(),t=e&&h.get(e.entryId);e&&t&&(E=-1/0,t.content=e.content,P(),q(e.entryId).catch(F))},async save(){if(!L.features.includes("save"))throw Error("You may not edit content here");S({saving:!0});try{await V()}finally{S({saving:!1})}B("saved")},async publish(){if(!L.features.includes("publish"))throw Error("You may not publish here");S({publishing:!0});try{await V();let e=M(),t=f.size>0?[...f]:e?[e]:[];if(0===t.length)throw Error("Nothing on this page is marked as an entry: add editable(entry)");for(let e of t)await $(`entries/${encodeURIComponent(e)}/publish`,{}),f.delete(e)}finally{S({publishing:!1})}B("published")},signOut(){if(L.unsaved&&!e.confirm("Sign out and lose the changes you have not saved?"))return;h.clear(),P();let t=e.location.pathname+e.location.search;e.location.href=`${i}/logout?return_to=${encodeURIComponent(t)}`},select(e){D(e)},setSelecting(e){e?p.documentElement.setAttribute("data-cms-selecting",""):p.documentElement.removeAttribute("data-cms-selecting"),S({selecting:e,statsVisible:e}),et()},destroy(){k?.(),C.forEach(e=>clearTimeout(e)),C.clear(),g.splice(0).forEach(e=>e())}},_=p.createElement("style");_.textContent=v("html[data-cms-selecting] "),p.head.appendChild(_),g.push(()=>_.remove()),g.push(()=>p.documentElement.removeAttribute("data-cms-selecting"));let W=e=>{if(!L.selecting)return;let r=e.target,n=r?.closest?.(`[${t}]`);n&&(e.preventDefault(),e.stopPropagation(),D(n.getAttribute(t)))};p.addEventListener("click",W,!0),g.push(()=>p.removeEventListener("click",W,!0));let Y=e=>{L.unsaved&&(e.preventDefault(),e.returnValue="")};e.addEventListener("beforeunload",Y),g.push(()=>e.removeEventListener("beforeunload",Y));let X=new Set,K=new Set,G=!1,Q=null,ee=null,et=()=>Q?.update(L.stats,L.statsVisible),er=async()=>{if(G)return;let t=[...new Set([...p.querySelectorAll(`[${s}]`)].map(e=>e.getAttribute(s)??""))].filter(e=>e&&!X.has(e)),r=t.slice(0,500);if(r.length){r.forEach(e=>X.add(e));try{let{stats:e}=await $("stats",{uids:r});r.forEach(e=>K.add(e)),S({stats:{...L.stats,...A(e)}})}catch{G=!0;return}Q??(Q=c(e,{selector:N,onSelect:e=>D(e),checked:e=>K.has(e)})),et(),t.length>r.length&&en()}},en=()=>{null!==ee||G||(ee=setTimeout(()=>{ee=null,er()},1e3))},ea=e.MutationObserver,ei="function"==typeof ea?new ea(en):null;return g.push(()=>{ei?.disconnect(),null!==ee&&clearTimeout(ee),Q?.destroy()}),$("session").then(e=>{w=e,S({features:e.features}),er(),ei?.observe(p.body,{childList:!0,subtree:!0})}).catch(e=>console.error("[@obelism/content bridge]",e)),H})(g,f,{pagePath:l,productPath:d,collectionPath:p})),u.isEditing&&o){let e=g.document,t=()=>{},r=!1,n=f?en:Y,a=()=>{r||(t=n(e,u,!0===o?{}:o))};e.body?a():e.addEventListener("DOMContentLoaded",a,{once:!0});let i=u.destroy;u.destroy=()=>{r=!0,e.removeEventListener("DOMContentLoaded",a),t(),i()}}}return g[ea]=u,u};(e=window).ObelismBridge=eo((e=>{let t=e?.dataset.url,r=t||X;if(!t&&e?.src){let t=new URL(e.src);"/bridge.js"===t.pathname&&(r=t.origin)}return{url:r,prompt:e?.dataset.prompt!=="false"}})(document.currentScript)),e.ObelismContent={getContentBridge:eo,mountPromptBox:Y,mountSiteEditor:en}}();
|