efficient-easel 24.2.0 → 25.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -2
- package/dist/{CanvasDragLayer-NZpaX6aq.d.ts → CanvasDragLayer-DXeQGrwJ.d.ts} +42 -3
- package/dist/canvas/index.d.ts +2 -139
- package/dist/canvas/index.js +1 -1
- package/dist/chrome/index.js +1 -1
- package/dist/{chunk-6NJHYXJM.js → chunk-3XECMGXX.js} +1 -1
- package/dist/{chunk-FRAIEWRC.js → chunk-62UGN7VM.js} +1 -1
- package/dist/{chunk-HNKB2ZYR.js → chunk-6ATIYLUL.js} +1 -1
- package/dist/{chunk-Y53EKN35.js → chunk-6EDVZBUO.js} +1 -1
- package/dist/{chunk-JMAOCKB2.js → chunk-6WTWYHC2.js} +3 -3
- package/dist/chunk-7UFKEX72.js +1 -0
- package/dist/chunk-BBD3FLU3.js +16 -0
- package/dist/chunk-CEC5XLN4.js +1 -0
- package/dist/chunk-CWELHADJ.js +1 -0
- package/dist/chunk-DX3VILZ3.js +6 -0
- package/dist/chunk-ERB6FAZT.js +2 -0
- package/dist/{chunk-TGZCD6IP.js → chunk-EUFDQ4KL.js} +1 -1
- package/dist/chunk-FEP6XMNX.js +1 -0
- package/dist/chunk-FR7EEKFF.js +1 -0
- package/dist/chunk-GDO4QJ4G.js +1 -0
- package/dist/{chunk-GMCZXMOV.js → chunk-GR3XRILS.js} +1 -1
- package/dist/chunk-H6BER2EU.js +1 -0
- package/dist/{chunk-G67G63O5.js → chunk-ITIVCER6.js} +1 -1
- package/dist/chunk-IW5QXREH.js +64 -0
- package/dist/chunk-JIP5JNRB.js +1 -0
- package/dist/chunk-JQQFB7EZ.js +1 -0
- package/dist/{chunk-AGWKB77Q.js → chunk-K53PQAMP.js} +1 -1
- package/dist/{chunk-4ESG53BH.js → chunk-KF3LT7J2.js} +1 -1
- package/dist/{chunk-CLOS6SSX.js → chunk-KO47WAWR.js} +1 -1
- package/dist/chunk-KVIEUWTX.js +11 -0
- package/dist/{chunk-QORC32JO.js → chunk-LUHGBFOD.js} +3 -3
- package/dist/{chunk-DDH2DYQP.js → chunk-LUOY3A3Q.js} +1 -1
- package/dist/chunk-MIX7EGRG.js +2 -0
- package/dist/{chunk-2FYFAAAK.js → chunk-OXOUGEAT.js} +1 -1
- package/dist/chunk-PMRN5Z3T.js +1 -0
- package/dist/{chunk-55KKGABA.js → chunk-PVBDKBJB.js} +1 -1
- package/dist/{chunk-RPMSET77.js → chunk-QTHQPJWA.js} +1 -1
- package/dist/{chunk-ISS72IKO.js → chunk-QZJKWKGH.js} +1 -1
- package/dist/{chunk-IYHO4XQX.js → chunk-S6YOIRXQ.js} +1 -1
- package/dist/{chunk-5PXVT7JY.js → chunk-SBVIW3KJ.js} +1 -1
- package/dist/chunk-SC6E3UUS.js +13 -0
- package/dist/{chunk-LN43DP2A.js → chunk-SQTVXE5D.js} +13 -13
- package/dist/chunk-TOKMFZPB.js +1 -0
- package/dist/chunk-U3LTJSBU.js +20 -0
- package/dist/{chunk-75C6WFNF.js → chunk-UCZQWQNS.js} +1 -1
- package/dist/chunk-UDWXBS46.js +1 -0
- package/dist/{chunk-WYTPBF3Q.js → chunk-VBEVZZTV.js} +11 -11
- package/dist/{chunk-OITNWE52.js → chunk-XLC7HWW3.js} +1 -1
- package/dist/chunk-XTDOSL2M.js +8 -0
- package/dist/chunk-YYD257TD.js +1 -0
- package/dist/copy/index.js +13 -13
- package/dist/copy-place-CQIemdtU.d.ts +25 -0
- package/dist/data/index.d.ts +4 -1
- package/dist/data/index.js +1 -1
- package/dist/dom-BpxMcHFP.d.ts +200 -0
- package/dist/drag/index.d.ts +2 -3
- package/dist/drag/index.js +1 -1
- package/dist/draw/index.d.ts +1 -1
- package/dist/draw/index.js +1 -1
- package/dist/easel/index.d.ts +67 -1
- package/dist/easel/index.js +1 -1
- package/dist/edit-lock/index.d.ts +0 -46
- package/dist/edit-lock/index.js +1 -1
- package/dist/fields/fields.css +6 -40
- package/dist/fields/index.d.ts +1 -6
- package/dist/fields/index.js +1 -1
- package/dist/node-ops/index.js +1 -1
- package/dist/page-copy/index.d.ts +110 -0
- package/dist/page-copy/index.js +5 -0
- package/dist/panel/index.d.ts +29 -34
- package/dist/panel/index.js +1 -1
- package/dist/panel/panel.css +0 -78
- package/dist/screen/components/AddBlockRow.js +1 -1
- package/dist/screen/components/AddSidePanel.d.ts +37 -57
- package/dist/screen/components/AddSidePanel.js +1 -1
- package/dist/screen/components/NodeContextMenu.d.ts +19 -11
- package/dist/screen/components/NodeContextMenu.js +1 -1
- package/dist/screen/components/PageEditGuardNotices.js +1 -1
- package/dist/screen/components/SaveControls.d.ts +10 -11
- package/dist/screen/components/SaveControls.js +1 -1
- package/dist/screen/components/ScreenChrome.js +1 -1
- package/dist/screen/components/ScreenDocumentContext.js +1 -1
- package/dist/screen/components/ScreenMount.d.ts +5 -6
- package/dist/screen/components/ScreenMount.js +1 -1
- package/dist/screen/components/ScreenStoreProvider.d.ts +8 -9
- package/dist/screen/components/ScreenStoreProvider.js +1 -1
- package/dist/screen/components/SectionScreenShell.js +17 -17
- package/dist/screen/components/SidePanelHead.js +1 -1
- package/dist/screen/components/panel-widths.js +1 -1
- package/dist/screen/components/usePartBridge.d.ts +10 -11
- package/dist/screen/components/usePartBridge.js +1 -1
- package/dist/screen/index.d.ts +9 -10
- package/dist/screen/index.js +1 -1
- package/dist/screen/lib/document/block-set-host.d.ts +55 -0
- package/dist/screen/lib/document/block-set-host.js +1 -0
- package/dist/screen/lib/document/block-types-in.js +1 -1
- package/dist/screen/lib/document/box-fields.d.ts +160 -5
- package/dist/screen/lib/document/box-fields.js +1 -9
- package/dist/screen/lib/document/device-fields.js +1 -1
- package/dist/screen/lib/document/palette-sections.d.ts +33 -97
- package/dist/screen/lib/document/palette-sections.js +1 -1
- package/dist/screen/lib/document/preview-dom.js +1 -1
- package/dist/screen/lib/document/section-doc.js +1 -1
- package/dist/screen/lib/document/style-clipboard.d.ts +10 -11
- package/dist/screen/lib/document/style-clipboard.js +1 -1
- package/dist/screen/lib/document/use-section-ops.js +1 -1
- package/dist/screen/lib/document-switch.js +1 -1
- package/dist/screen/lib/failure.js +1 -1
- package/dist/screen/lib/host-inbound.js +1 -1
- package/dist/screen/lib/key-scope.js +1 -1
- package/dist/screen/lib/media-picker.js +1 -1
- package/dist/screen/lib/page-lock.js +1 -1
- package/dist/screen/lib/screen-parts.d.ts +251 -12
- package/dist/screen/lib/screen-parts.js +1 -1
- package/dist/screen/screen.css +6 -0
- package/dist/screen/words.d.ts +9 -0
- package/dist/screen/words.js +1 -1
- package/dist/strings/index.d.ts +4 -1
- package/dist/strings/index.js +2 -2
- package/dist/style-clipboard/index.d.ts +0 -32
- package/dist/style-clipboard/index.js +1 -1
- package/dist/text-styles/index.d.ts +7 -6
- package/dist/text-styles/index.js +37 -36
- package/dist/text-styles/text-styles.css +5 -53
- package/dist/tree/index.d.ts +2 -2
- package/dist/{types-DBy3L69b.d.ts → types-CoUTWUwB.d.ts} +1 -1
- package/dist/words-Dl8Qja4K.d.ts +32 -0
- package/package.json +15 -3
- package/dist/chunk-3FIS2FRS.js +0 -1
- package/dist/chunk-7RSE6KKY.js +0 -1
- package/dist/chunk-CMPFUJ26.js +0 -8
- package/dist/chunk-CZAAGBVL.js +0 -7
- package/dist/chunk-DSKNJXB4.js +0 -1
- package/dist/chunk-FJTCSQWK.js +0 -16
- package/dist/chunk-G7ISR6DI.js +0 -1
- package/dist/chunk-H4Z2V56N.js +0 -21
- package/dist/chunk-K7MMLCTT.js +0 -2
- package/dist/chunk-KRL3IUV3.js +0 -1
- package/dist/chunk-LF3FUSCQ.js +0 -1
- package/dist/chunk-THWO5YVZ.js +0 -1
- package/dist/chunk-TOHOGVAE.js +0 -15
- package/dist/chunk-UKPZ2YWE.js +0 -64
- package/dist/chunk-V7U33NF2.js +0 -1
- package/dist/chunk-VKPOH6MK.js +0 -1
- package/dist/chunk-YU3WHLGI.js +0 -1
- package/dist/repeat-D65bJS8d.d.ts +0 -49
- package/dist/session-EsjORLQ0.d.ts +0 -43
|
@@ -1,41 +1,40 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ReactNode, MouseEvent, ComponentType } from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { M as MeasuredCanvas, C as CanvasDragModel, D as DragSession } from '../../CanvasDragLayer-DXeQGrwJ.js';
|
|
4
|
+
import { SectionTemplate } from './section-template-types.js';
|
|
5
|
+
import { SharedSectionUse, SharedSection } from './shared-section-types.js';
|
|
6
|
+
import { BlockChoice } from './document/block-choice.js';
|
|
7
|
+
import { Data, Config } from '../../blocks/index.js';
|
|
4
8
|
import { C as CanvasTarget } from '../../watch-Unf6SfUf.js';
|
|
5
9
|
import { D as DeviceOption } from '../../types-SrGNzYeO.js';
|
|
6
10
|
import { P as Place } from '../../types-Dq180WRV.js';
|
|
7
|
-
import {
|
|
11
|
+
import { R as RepeatCopy } from '../../copy-place-CQIemdtU.js';
|
|
8
12
|
import { E as EaselContextMenuItem } from '../../types-BbOBWXMP.js';
|
|
9
13
|
import { E as EaselRailItem } from '../../types-Cy7rdmXt.js';
|
|
10
14
|
import { StyleRow } from '../../style-clipboard/index.js';
|
|
11
|
-
import {
|
|
12
|
-
import { AddKey } from '../components/AddSidePanel.js';
|
|
15
|
+
import { f as TreeRowMark } from '../../types-CoUTWUwB.js';
|
|
13
16
|
import { q as AnyScreenTarget } from '../../ScreenDocumentContext-DPW_6gOC.js';
|
|
14
17
|
import { HostProduct } from './host-chrome.js';
|
|
15
18
|
import { EaselSession } from './session.js';
|
|
16
|
-
import { SharedSectionUse, SharedSection } from './shared-section-types.js';
|
|
17
19
|
import { AddTarget } from './document/add-target-types.js';
|
|
18
20
|
import { SlotConfigView, SlotChild } from './document/content-tree.js';
|
|
21
|
+
import '../../words-SD4neL0n.js';
|
|
19
22
|
import '../../types-BljCVdzR.js';
|
|
20
23
|
import '../../data/index.js';
|
|
21
24
|
import '../../resolve-Bz4mszpL.js';
|
|
22
25
|
import '../../plan-D0DgSLnY.js';
|
|
23
26
|
import '../../edit-lock/index.js';
|
|
24
27
|
import '../../panelWidths-DgQXiPXU.js';
|
|
25
|
-
import '../../session-EsjORLQ0.js';
|
|
26
|
-
import '../../words-SD4neL0n.js';
|
|
27
28
|
import '../../wordFit-7XpmhcaW.js';
|
|
28
29
|
import '../../words-CnnHb9jo.js';
|
|
29
30
|
import 'efficient-shell/ui';
|
|
30
31
|
import '../../words-Cl9xMUYY.js';
|
|
31
|
-
import './section-template-types.js';
|
|
32
|
-
import './document/block-choice.js';
|
|
33
32
|
import './document-contract.js';
|
|
34
33
|
import './document-switch.js';
|
|
35
34
|
import '../../engine-CvXpFE86.js';
|
|
36
35
|
import './admin-bridge.js';
|
|
37
|
-
import './links/link-filters.js';
|
|
38
36
|
import './backend-error.js';
|
|
37
|
+
import './links/link-filters.js';
|
|
39
38
|
import './document-hooks.js';
|
|
40
39
|
import './document/slot-section-spec.js';
|
|
41
40
|
|
|
@@ -552,6 +551,16 @@ interface ScreenBridges {
|
|
|
552
551
|
* rows alone, as the menu has always drawn them.
|
|
553
552
|
*/
|
|
554
553
|
menuRows?: (node: ScreenNode, zone: string, index: number) => ScreenMenuRows | null | undefined;
|
|
554
|
+
/**
|
|
555
|
+
* THE ROW'S OWN ACTIONS ON A DRAWN COPY (card copy typing, 2026-10-30). A
|
|
556
|
+
* card template is drawn once per row of its owner's data, each copy in a
|
|
557
|
+
* `data-sf-repeat` wrapper; the rows are the layer's, never the document's.
|
|
558
|
+
* Given, a right-click on a block in a copy offers, in the node's one menu,
|
|
559
|
+
* Add item after, Move item earlier, Move item later (the way a row cannot
|
|
560
|
+
* go greyed) and Delete item, and a press comes here with the copy's place.
|
|
561
|
+
* Withheld while nothing may be written. Absent: the menu is as before.
|
|
562
|
+
*/
|
|
563
|
+
onCopyItem?: (request: CopyItemRequest) => void;
|
|
555
564
|
/** The layer's own context, stood round the whole screen. What it is handed
|
|
556
565
|
* is the screen; what it returns is rendered in the screen's place. */
|
|
557
566
|
wrap?: (screen: ReactNode) => ReactNode;
|
|
@@ -581,6 +590,22 @@ interface ScreenSharedSections {
|
|
|
581
590
|
* copy, this one included, and the layer takes that in. Optional. */
|
|
582
591
|
removed?: (section: SharedSection) => void;
|
|
583
592
|
}
|
|
593
|
+
/** What a press on a drawn copy's item row asks (`ScreenBridges.onCopyItem`). */
|
|
594
|
+
type CopyItemAction = "addAfter" | "moveEarlier" | "moveLater" | "delete";
|
|
595
|
+
/** The copy a row was pressed on, and what to do to its row. */
|
|
596
|
+
interface CopyItemRequest {
|
|
597
|
+
/** The block whose slot is drawn once per row. */
|
|
598
|
+
ownerId: string;
|
|
599
|
+
/** That slot (`template`). */
|
|
600
|
+
slot: string;
|
|
601
|
+
/** The row the copy is drawn for; 0 is the main copy. */
|
|
602
|
+
index: number;
|
|
603
|
+
/** The copy of an outer template this copy's owner is drawn in, when
|
|
604
|
+
* there is one (`RepeatCopy.outer`, `efficient-easel/easel`): the inner
|
|
605
|
+
* index alone names no row. */
|
|
606
|
+
outer?: RepeatCopy;
|
|
607
|
+
action: CopyItemAction;
|
|
608
|
+
}
|
|
584
609
|
/** A layer's own rows in a node's menu, by the group of the menu each goes at
|
|
585
610
|
* the end of (efficient-easel/node-ops `nodeMenuItems`' `extras`): `pick`
|
|
586
611
|
* (Select layer), `make` (Duplicate … Paste), `change` (Rename, Hide …) and
|
|
@@ -875,10 +900,20 @@ interface ScreenBlockLook {
|
|
|
875
900
|
size?: number;
|
|
876
901
|
className?: string;
|
|
877
902
|
}>;
|
|
878
|
-
/** The cover picture of a section type, filling the Add panel's card
|
|
903
|
+
/** The cover picture of a section type, filling the Add panel's card — or
|
|
904
|
+
* of a preset row, asked with the preset's key (`presets`). */
|
|
879
905
|
Thumbnail: ComponentType<{
|
|
880
906
|
type: string;
|
|
881
907
|
}>;
|
|
908
|
+
/**
|
|
909
|
+
* ADD ROWS THAT ARE PRESETS, NOT BLOCK TYPES (GG ruling 2026-10-30, owner
|
|
910
|
+
* item C36): each with its own key, label, group, blurb and cover, and an
|
|
911
|
+
* `insert` that builds the node it lays down, in one step. Searched,
|
|
912
|
+
* pressed after a ➕ and dragged like a section's row; it goes in the page's
|
|
913
|
+
* own list only. Absent: every row is a block type, as before
|
|
914
|
+
* (lib/document/palette-sections `PalettePreset`).
|
|
915
|
+
*/
|
|
916
|
+
presets?: readonly PalettePreset[];
|
|
882
917
|
/**
|
|
883
918
|
* The products a row may be named after when its block holds only a
|
|
884
919
|
* product's handle: null until they arrive, and for good when there are
|
|
@@ -936,6 +971,16 @@ interface ScreenBlockLook {
|
|
|
936
971
|
* Absent: the screen's two, as it drew them.
|
|
937
972
|
*/
|
|
938
973
|
rowActions?: (node: ScreenNode, zone: string, index: number) => ReactNode;
|
|
974
|
+
/**
|
|
975
|
+
* THE WORDS OF A BLOCK'S CANVAS TAB (Stats design B, Lewis 2026-10-29,
|
|
976
|
+
* canvas look Y): where a block's value comes from — "Designs shown" for a
|
|
977
|
+
* number filled from a live count — or null for a block that has no tab.
|
|
978
|
+
* Asked of the selected block and of the block under the pointer. The
|
|
979
|
+
* screen draws the tab the pinned bands wear (the shell's solid badge)
|
|
980
|
+
* above the block's top edge; a click on it selects the block. Absent: no
|
|
981
|
+
* block has a tab.
|
|
982
|
+
*/
|
|
983
|
+
canvasTab?: (node: ScreenNode) => string | null;
|
|
939
984
|
}
|
|
940
985
|
/**
|
|
941
986
|
* THE DEVICES the canvas can be looked at on. That the top bar has a switch,
|
|
@@ -1612,4 +1657,198 @@ declare function useScreenCanvasTarget(): CanvasTarget | null;
|
|
|
1612
1657
|
* engine's plain rows for the selection. */
|
|
1613
1658
|
declare function useScreenInspectorPanel(): ComponentType<ScreenInspectorPanelProps>;
|
|
1614
1659
|
|
|
1615
|
-
|
|
1660
|
+
/**
|
|
1661
|
+
* A PALETTE ROW THAT IS A PRESET, NOT A BLOCK TYPE (GG ruling 2026-10-30,
|
|
1662
|
+
* owner item C36). The website's Contact / Locations section is offered as TWO
|
|
1663
|
+
* rows, "City pictures" and "City maps": each lays down its own arrangement of
|
|
1664
|
+
* ordinary blocks, and there is no block type behind either. So a row may be a
|
|
1665
|
+
* preset — its own key, label, group, blurb and cover — and pressing it lays
|
|
1666
|
+
* down what `insert` builds, in ONE insert, so one Undo takes it back (the way
|
|
1667
|
+
* a splittable section's press already lands: `newSectionNode`).
|
|
1668
|
+
*
|
|
1669
|
+
* The layer hands these in (`PaletteLook.presets`); the screen states none.
|
|
1670
|
+
* What the arrangement IS stays where the layer keeps arrangements (the
|
|
1671
|
+
* website: `SECTION_PRESETS`); this says only where the row sits and what it
|
|
1672
|
+
* is called.
|
|
1673
|
+
*/
|
|
1674
|
+
interface PalettePreset {
|
|
1675
|
+
/** The row's own key, unique among presets. It names NO block type: a
|
|
1676
|
+
* preset whose key is a registered type is not offered (a type row and a
|
|
1677
|
+
* preset row would be one key with two meanings). The cover is the layer's
|
|
1678
|
+
* `Thumbnail`, asked with this key. */
|
|
1679
|
+
key: string;
|
|
1680
|
+
/** What the row is called. Also what the toast says when it is added. */
|
|
1681
|
+
label: string;
|
|
1682
|
+
/** The key of the category (`config.categories`) it is grouped under. A
|
|
1683
|
+
* category the config does not have, or does not offer, offers no preset. */
|
|
1684
|
+
cat: string;
|
|
1685
|
+
/** The block type in that category the row follows; absent, or not in the
|
|
1686
|
+
* category, and the row closes its group. */
|
|
1687
|
+
after?: string;
|
|
1688
|
+
/** The one-line blurb, shown and searched. */
|
|
1689
|
+
desc?: string;
|
|
1690
|
+
/** More words it is found by, searched but never shown. */
|
|
1691
|
+
alias?: string;
|
|
1692
|
+
/** The node it lays down — one node, slot children inline, every id fresh
|
|
1693
|
+
* from `make.newNodeId` — or null, and nothing is added. Lent the same
|
|
1694
|
+
* four things `newSectionNode` is. */
|
|
1695
|
+
insert: (make: ScreenNodeMaker) => ScreenNewNode | null;
|
|
1696
|
+
}
|
|
1697
|
+
/** One offerable section, with the category it is grouped under. */
|
|
1698
|
+
type PaletteSection = {
|
|
1699
|
+
/** The block type — or, on a preset row, the preset's key (`preset`). */
|
|
1700
|
+
type: string;
|
|
1701
|
+
cat: string;
|
|
1702
|
+
name: string;
|
|
1703
|
+
desc: string;
|
|
1704
|
+
/**
|
|
1705
|
+
* The heading of the category this section sits under, resolved once at build
|
|
1706
|
+
* time — SEARCHED, and already SHOWN as the nav row this card sits beneath.
|
|
1707
|
+
*
|
|
1708
|
+
* ⚠️ IT IS HERE BECAUSE THE NAV AND THE SEARCH DISAGREED. Seven of the
|
|
1709
|
+
* thirteen category names returned NOTHING when typed: "Blog & journal" reads
|
|
1710
|
+
* 5 in the nav, and "blog" found 0, because not one of Issue Header, Featured
|
|
1711
|
+
* Cover, Article Text, Recurring Columns or Latest Posts carries the word. Same
|
|
1712
|
+
* for shop, about, promotions, navigation, legal and layout. A merchant reads
|
|
1713
|
+
* the word off the screen, types it, and is told no section matches.
|
|
1714
|
+
*
|
|
1715
|
+
* Resolved HERE, not in `matchesQuery`, because the label needs the `config`
|
|
1716
|
+
* (`categoryLabel`) and the matcher is given only a section — passing config
|
|
1717
|
+
* into the matcher would make every caller carry it.
|
|
1718
|
+
*/
|
|
1719
|
+
catLabel: string;
|
|
1720
|
+
/**
|
|
1721
|
+
* Another word this section is known by, searched but never shown.
|
|
1722
|
+
*
|
|
1723
|
+
* ⚠️ THIS EXISTS FOR ONE NODE AND ONE REASON. `Flex` is offered here as
|
|
1724
|
+
* "Blank section" and is called "Box" everywhere it is nested — so a merchant
|
|
1725
|
+
* who met it in a Layers row, or in last week's handoff, types "box" and must
|
|
1726
|
+
* still find it. Without this they would find NOTHING: the card is pinned out
|
|
1727
|
+
* of its group, so a search that misses it misses it completely.
|
|
1728
|
+
*/
|
|
1729
|
+
alias?: string;
|
|
1730
|
+
/** Set on a PRESET row only: the preset it lays down. Absent on every
|
|
1731
|
+
* type row, so a type row is the row it always was. */
|
|
1732
|
+
preset?: PalettePreset;
|
|
1733
|
+
};
|
|
1734
|
+
/**
|
|
1735
|
+
* What the layer says of its sections for the palette: the word for a type at
|
|
1736
|
+
* a level, a group's short heading where it has one, and the blurbs. The
|
|
1737
|
+
* screen's `blockLook` is one (lib/screen-parts); so is the website's own
|
|
1738
|
+
* (lib/document/add-palette).
|
|
1739
|
+
*/
|
|
1740
|
+
interface PaletteLook {
|
|
1741
|
+
/** What a node of `type` is called at a level, given the label the config
|
|
1742
|
+
* holds for it. */
|
|
1743
|
+
labelAtLevel: (type: string, level: "section" | "block", base: string) => string;
|
|
1744
|
+
/** A group's short heading, by its key, where the layer has one; undefined,
|
|
1745
|
+
* and the config's own title is the heading. */
|
|
1746
|
+
categoryLabel: (id: string) => string | undefined;
|
|
1747
|
+
/** The one-line blurb for a section, by type. */
|
|
1748
|
+
descriptions: Record<string, string>;
|
|
1749
|
+
/** Rows that are presets, not block types (`PalettePreset`). Absent: every
|
|
1750
|
+
* row is a type, as before. */
|
|
1751
|
+
presets?: readonly PalettePreset[];
|
|
1752
|
+
}
|
|
1753
|
+
/**
|
|
1754
|
+
* Flatten `config.categories` into an ordered section list.
|
|
1755
|
+
*
|
|
1756
|
+
* Grouping and order ARE the category order in the config — which is the
|
|
1757
|
+
* catalog's order — so this adds no opinion of its own. A component listed in a
|
|
1758
|
+
* category but absent from `components` is skipped: a stale catalog row cannot
|
|
1759
|
+
* render and certainly cannot insert, so offering it would be a card that fails
|
|
1760
|
+
* on click.
|
|
1761
|
+
*
|
|
1762
|
+
* Child-only blocks (HeroSlide / CollectionCard / ProductRef) and the four
|
|
1763
|
+
* generic primitives (Heading / Text / ImageBlock / ButtonBlock) sit in NO
|
|
1764
|
+
* category on purpose, so they never appear here — they are added from their
|
|
1765
|
+
* parent's slot instead. See the note above `categories:` in lib/document/config.tsx.
|
|
1766
|
+
*
|
|
1767
|
+
* A category the config marks `visible: false` is NOT offered (0.105.0, seam
|
|
1768
|
+
* E9): it is a registry's way of keeping blocks it has out of the picker — the
|
|
1769
|
+
* campaign designer's Product parts, its retired blocks, its Sections — and a
|
|
1770
|
+
* palette that listed them would offer things that may not be put on a page.
|
|
1771
|
+
* The old library's own palette read the flag the same way. No website category carries
|
|
1772
|
+
* it, so the website's palette is the list it was.
|
|
1773
|
+
*/
|
|
1774
|
+
declare function buildPaletteSections(config: Config, look: PaletteLook): PaletteSection[];
|
|
1775
|
+
/** A category's display label — the layer's short one where there is one, else the config's title. */
|
|
1776
|
+
declare function categoryLabel(config: Config, id: string, shortLabel: (id: string) => string | undefined): string;
|
|
1777
|
+
/**
|
|
1778
|
+
* Does a section match a search query?
|
|
1779
|
+
*
|
|
1780
|
+
* The query is matched against the NAME, any ALIAS, the blurb, the component
|
|
1781
|
+
* TYPE and the CATEGORY HEADING — the type because a merchant who knows the
|
|
1782
|
+
* section by the word they saw in a handoff should still find it, the alias
|
|
1783
|
+
* because one node is called something else everywhere it is nested (see
|
|
1784
|
+
* `PaletteSection.alias`), and the category because it is PRINTED IN THE NAV
|
|
1785
|
+
* BESIDE THE RESULTS: seven of thirteen headings used to match nothing at all
|
|
1786
|
+
* (see `PaletteSection.catLabel`). A word a merchant can read off this screen
|
|
1787
|
+
* must find what it is labelling.
|
|
1788
|
+
*
|
|
1789
|
+
* `q` is expected already lower-cased and trimmed; an empty query matches
|
|
1790
|
+
* everything.
|
|
1791
|
+
*/
|
|
1792
|
+
declare function matchesQuery(s: PaletteSection, q: string): boolean;
|
|
1793
|
+
/** The pinned section, or `null` if the layer pins none or the config does not offer it. */
|
|
1794
|
+
declare function pinnedSection(sections: PaletteSection[], pinned: string | null): PaletteSection | null;
|
|
1795
|
+
/** Every OTHER section — what the grouped grid below the pinned card draws. */
|
|
1796
|
+
declare function paletteWithoutPinned(sections: PaletteSection[], pinned: string | null): PaletteSection[];
|
|
1797
|
+
|
|
1798
|
+
/** What a tile adds, parsed back out of its key. */
|
|
1799
|
+
type AddKey = {
|
|
1800
|
+
kind: "section";
|
|
1801
|
+
type: string;
|
|
1802
|
+
} | {
|
|
1803
|
+
kind: "template";
|
|
1804
|
+
template: SectionTemplate;
|
|
1805
|
+
} | {
|
|
1806
|
+
kind: "shared";
|
|
1807
|
+
section: SharedSection;
|
|
1808
|
+
}
|
|
1809
|
+
/** A row that is a preset, not a block type (the layer's `presets`): what
|
|
1810
|
+
* it lays down is its `insert`'s. */
|
|
1811
|
+
| {
|
|
1812
|
+
kind: "preset";
|
|
1813
|
+
preset: PalettePreset;
|
|
1814
|
+
} | {
|
|
1815
|
+
kind: "block";
|
|
1816
|
+
type: string;
|
|
1817
|
+
};
|
|
1818
|
+
declare const sectionKey: (type: string) => string;
|
|
1819
|
+
declare const blockKey: (type: string) => string;
|
|
1820
|
+
declare const templateKey: (id: string) => string;
|
|
1821
|
+
declare const sharedKey: (id: string) => string;
|
|
1822
|
+
declare const presetKey: (key: string) => string;
|
|
1823
|
+
type AddSidePanelProps<I> = {
|
|
1824
|
+
/** Where the next thing goes, when the panel was opened at a place. */
|
|
1825
|
+
at?: {
|
|
1826
|
+
label: string;
|
|
1827
|
+
onClear: () => void;
|
|
1828
|
+
};
|
|
1829
|
+
/** At a place in a list of blocks: the blocks that list takes. They are in
|
|
1830
|
+
* the one list whatever the catalogue holds, so a place can always be
|
|
1831
|
+
* filled from it. */
|
|
1832
|
+
placeBlocks?: readonly BlockChoice[];
|
|
1833
|
+
/** At a place: may what a tile names go there? Null when it may, else why
|
|
1834
|
+
* not, in the panel's words — the tile is then dimmed and says so. Absent
|
|
1835
|
+
* (no place): every tile is offered, to drag. */
|
|
1836
|
+
canTake?: (key: AddKey) => string | null;
|
|
1837
|
+
/** At a place: put what a pressed tile names there. Absent (no place): a
|
|
1838
|
+
* press adds nothing, and a tile is only dragged. */
|
|
1839
|
+
onPick?: (key: AddKey) => void;
|
|
1840
|
+
/** The drag item for what a tile names — a drag in the editor's session. */
|
|
1841
|
+
itemFor: (key: AddKey) => I;
|
|
1842
|
+
session: DragSession<I>;
|
|
1843
|
+
/** A row under the tiles for something that is not a block, drawn by the
|
|
1844
|
+
* layer that owns it (the website: the Live chat bubble). */
|
|
1845
|
+
siteWide?: ReactNode;
|
|
1846
|
+
/** Leave Add — back to the view underneath (the head's "Done"). */
|
|
1847
|
+
onClose: () => void;
|
|
1848
|
+
/** Hide the left panel (the head's last button, as on every panel). */
|
|
1849
|
+
onHide?: () => void;
|
|
1850
|
+
readOnly?: boolean;
|
|
1851
|
+
};
|
|
1852
|
+
declare function AddSidePanel<I>({ at, placeBlocks, canTake, onPick, itemFor, session, siteWide, onClose, onHide, readOnly, }: AddSidePanelProps<I>): react.JSX.Element;
|
|
1853
|
+
|
|
1854
|
+
export { type AddKey as A, type CopyItemAction, type CopyItemRequest, type NodeDefaults, type PaletteLook as P, SELECTION_MODE, type ScreenBlockLook, type ScreenBlockRules, type ScreenBridges, type ScreenCanvas, type ScreenCanvasDrag, type ScreenCanvasDragContext, type ScreenCanvasHeadProps, ScreenCanvasTargetProvider, type ScreenDevices, type ScreenDocumentOps, type ScreenDragItem, type ScreenInspector, type ScreenInspectorMode, type ScreenInspectorPanelProps, type ScreenLeftPanel, type ScreenLeftView, type ScreenLeftViewFrame, type ScreenLeftViewRules, type ScreenMainAction, type ScreenMediaDrop, type ScreenMediaFile, type ScreenMenuItem, type ScreenMenuRows, type ScreenNewNode, type ScreenNode, type ScreenNodeActions, type ScreenNodeAt, type ScreenNodeLevel, type ScreenNodeMaker, type ScreenPartMode, type ScreenParts, ScreenPartsProvider, type ScreenPinnedBand, type ScreenPinnedNodes, type ScreenRailItem, type ScreenSelector, type ScreenSharedSections, type ScreenSlot, type ScreenSlotAction, type ScreenSlotMode, type ScreenStyleClipboard, type ScreenStyleDocument, type ScreenStylePastePlan, type ScreenToastExtra, type ScreenTree, type ScreenTreeFolds, type ScreenTreeRows, type PalettePreset as a, type PaletteSection as b, buildPaletteSections as c, categoryLabel as d, pinnedSection as e, type AddSidePanelProps as f, blockKey as g, AddSidePanel as h, presetKey as i, isPinnedFirst, isPinnedLast, isSelectionMode, isSlotMode, sharedKey as j, matchesQuery as m, paletteWithoutPinned as p, sectionKey as s, sameInspectorMode, screenSlotsOf, shownChildSlotsOf, shownSlotFieldsOf, templateKey as t, useScreenBlockLook, useScreenBlockRules, useScreenBridges, useScreenCanvasDrag, useScreenCanvasFrame, useScreenCanvasHead, useScreenCanvasTarget, useScreenDevices, useScreenDocumentLabel, useScreenDocumentPass, useScreenInspectorPanel, useScreenLeftView, useScreenNodeKeys, useScreenNotify, useScreenOwnerName, useScreenParts, useScreenPickFollowsSelection, useScreenPinned, useScreenSaveSwitch, useScreenStorageNamespace, useScreenStyleClipboard, useStandaloneScreenBridges };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{SELECTION_MODE,ScreenCanvasTargetProvider,ScreenPartsProvider,isPinnedFirst,isPinnedLast,isSelectionMode,isSlotMode,sameInspectorMode,screenSlotsOf,shownChildSlotsOf,shownSlotFieldsOf,useScreenBlockLook,useScreenBlockRules,useScreenBridges,useScreenCanvasDrag,useScreenCanvasFrame,useScreenCanvasHead,useScreenCanvasTarget,useScreenDevices,useScreenDocumentLabel,useScreenDocumentPass,useScreenInspectorPanel,useScreenLeftView,useScreenNodeKeys,useScreenNotify,useScreenOwnerName,useScreenParts,useScreenPickFollowsSelection,useScreenPinned,useScreenSaveSwitch,useScreenStorageNamespace,useScreenStyleClipboard,useStandaloneScreenBridges}from"../../chunk-
|
|
1
|
+
export{SELECTION_MODE,ScreenCanvasTargetProvider,ScreenPartsProvider,isPinnedFirst,isPinnedLast,isSelectionMode,isSlotMode,sameInspectorMode,screenSlotsOf,shownChildSlotsOf,shownSlotFieldsOf,useScreenBlockLook,useScreenBlockRules,useScreenBridges,useScreenCanvasDrag,useScreenCanvasFrame,useScreenCanvasHead,useScreenCanvasTarget,useScreenDevices,useScreenDocumentLabel,useScreenDocumentPass,useScreenInspectorPanel,useScreenLeftView,useScreenNodeKeys,useScreenNotify,useScreenOwnerName,useScreenParts,useScreenPickFollowsSelection,useScreenPinned,useScreenSaveSwitch,useScreenStorageNamespace,useScreenStyleClipboard,useStandaloneScreenBridges}from"../../chunk-LUHGBFOD.js";import"../../chunk-NCXYC7WI.js";import"../../chunk-LX23TCTP.js";import"../../chunk-TCAAOYQY.js";import"../../chunk-BBD3FLU3.js";import"../../chunk-JQQFB7EZ.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-U3LTJSBU.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-YCSZAP7T.js";import"../../chunk-ZEH6QLBH.js";import"../../chunk-WHS6Y55E.js";import"../../chunk-FM6JO4WF.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-K53PQAMP.js";import"../../chunk-FIVU2COQ.js";import"../../chunk-QTHQPJWA.js";import"../../chunk-HZSZT3BE.js";import"../../chunk-PMRN5Z3T.js";import"../../chunk-Y2T3JX7K.js";import"../../chunk-KFWNGPW3.js";import"../../chunk-MIX7EGRG.js";import"../../chunk-DX3VILZ3.js";import"../../chunk-JACEEVVF.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-3XECMGXX.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-TOKMFZPB.js";import"../../chunk-FR7EEKFF.js";import"../../chunk-7UFKEX72.js";import"../../chunk-EUFDQ4KL.js";import"../../chunk-KXM6YRG2.js";
|
package/dist/screen/screen.css
CHANGED
|
@@ -831,6 +831,12 @@
|
|
|
831
831
|
pointer-events: auto;
|
|
832
832
|
cursor: pointer;
|
|
833
833
|
}
|
|
834
|
+
/* A block's own tab (`blockLook.canvasTab`, Stats design B, Lewis
|
|
835
|
+
2026-10-29): it rides above the block's top edge, lifted by its own
|
|
836
|
+
height, so it never covers the number it names. */
|
|
837
|
+
.es-band-tab.is-above {
|
|
838
|
+
transform: translateY(-100%);
|
|
839
|
+
}
|
|
834
840
|
/* A SHARED node's tab (Shared section design v4, Lewis 2026-10-21): the
|
|
835
841
|
shell's `shared` mark before the name, inside the badge's line. */
|
|
836
842
|
.es-band-tab-mark {
|
package/dist/screen/words.d.ts
CHANGED
|
@@ -236,6 +236,15 @@ type ScreenMenuWords = {
|
|
|
236
236
|
pinned: string;
|
|
237
237
|
/** Paste in a text box, refused the clipboard by the browser. */
|
|
238
238
|
clipboardRefused: string;
|
|
239
|
+
/** A drawn copy's row actions (`ScreenBridges.onCopyItem`): a new row
|
|
240
|
+
* after this one… Optional (added after 24.2.0, so a host's own words
|
|
241
|
+
* still compile): left out, the English. */
|
|
242
|
+
itemAddAfter?: string;
|
|
243
|
+
/** …this row one place earlier, one place later… */
|
|
244
|
+
itemMoveEarlier?: string;
|
|
245
|
+
itemMoveLater?: string;
|
|
246
|
+
/** …and this row gone. */
|
|
247
|
+
itemDelete?: string;
|
|
239
248
|
};
|
|
240
249
|
type ScreenWords = {
|
|
241
250
|
/** An "Add block" run heading's count, in words: its Tooltip and screen-reader text. */
|
package/dist/screen/words.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{DEFAULT_SCREEN_ADD_WORDS,DEFAULT_SCREEN_SAVE_STATUS_WORDS,DEFAULT_SCREEN_SHARED_WORDS,DEFAULT_SCREEN_WORDS}from"../chunk-
|
|
1
|
+
export{DEFAULT_SCREEN_ADD_WORDS,DEFAULT_SCREEN_SAVE_STATUS_WORDS,DEFAULT_SCREEN_SHARED_WORDS,DEFAULT_SCREEN_WORDS}from"../chunk-S6YOIRXQ.js";
|
package/dist/strings/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { D as DragWords } from '../words-SD4neL0n.js';
|
|
|
5
5
|
import { LockWords } from '../edit-lock/index.js';
|
|
6
6
|
import { F as FieldsWords } from '../words-CFkb8XtN.js';
|
|
7
7
|
import { N as NodeMenuWords } from '../words-DMG4dYq2.js';
|
|
8
|
+
import { P as PageCopyWords } from '../words-Dl8Qja4K.js';
|
|
8
9
|
import { P as PanelWords } from '../words-fbR9IwxH.js';
|
|
9
10
|
import { P as PickWords } from '../words-DWvCJXwR.js';
|
|
10
11
|
import { ScreenWords } from '../screen/words.js';
|
|
@@ -119,6 +120,8 @@ interface EaselStrings {
|
|
|
119
120
|
* notice's word for the document, the Layers tree's frame, the Add panel,
|
|
120
121
|
* the main button and the block keys. */
|
|
121
122
|
screen: ScreenWords;
|
|
123
|
+
/** `efficient-easel/page-copy` — the Duplicate page dialog. */
|
|
124
|
+
pageCopy: PageCopyWords;
|
|
122
125
|
}
|
|
123
126
|
/** Today's English, word for word. */
|
|
124
127
|
declare const DEFAULT_EASEL_STRINGS: EaselStrings;
|
|
@@ -172,4 +175,4 @@ declare function useEaselStrings(): EaselStrings;
|
|
|
172
175
|
/** The nearest provider's locale, or `'en'`. */
|
|
173
176
|
declare function useEaselLocale(): string;
|
|
174
177
|
|
|
175
|
-
export { type CanvasWords, ChromeWords, CopyWords, DEFAULT_EASEL_STRINGS, type DeepPartial, DragWords, type EaselStrings, EaselStringsProvider, type EaselStringsProviderProps, FieldsWords, LockWords, NodeMenuWords, NoticeWords, PanelWords, PickWords, type RailWords, SaveWords, ScreenWords, StyleClipboardWords, TextStylesWords, TreeWords, mergeEaselStrings, useEaselLocale, useEaselStrings };
|
|
178
|
+
export { type CanvasWords, ChromeWords, CopyWords, DEFAULT_EASEL_STRINGS, type DeepPartial, DragWords, type EaselStrings, EaselStringsProvider, type EaselStringsProviderProps, FieldsWords, LockWords, NodeMenuWords, NoticeWords, PageCopyWords, PanelWords, PickWords, type RailWords, SaveWords, ScreenWords, StyleClipboardWords, TextStylesWords, TreeWords, mergeEaselStrings, useEaselLocale, useEaselStrings };
|
package/dist/strings/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
return
|
|
1
|
+
import{DEFAULT_TEXT_STYLES_WORDS as r}from"../chunk-OGH6CC3E.js";import{DEFAULT_PICK_WORDS as o}from"../chunk-OFBZOI6W.js";import{DEFAULT_SCREEN_WORDS as n}from"../chunk-S6YOIRXQ.js";import{DEFAULT_STYLE_CLIPBOARD_WORDS as t}from"../chunk-6WY6ZXJG.js";import{DEFAULT_CANVAS_WORDS as c}from"../chunk-TBY3DFKS.js";import{DEFAULT_TREE_WORDS as m}from"../chunk-K56YDHYQ.js";import{DEFAULT_PANEL_WORDS as e}from"../chunk-KFV7N2DJ.js";import{DEFAULT_NODE_MENU_WORDS as i}from"../chunk-WK3AFPXY.js";import{DEFAULT_PAGE_COPY_WORDS as s}from"../chunk-CEC5XLN4.js";import{DEFAULT_SAVE_WORDS as u}from"../chunk-H6DDIBQ4.js";import{DEFAULT_CHROME_WORDS as f,DEFAULT_NOTICE_WORDS as p}from"../chunk-AJSDWWJW.js";import{DEFAULT_RAIL_WORDS as l}from"../chunk-2OAZYSWJ.js";import{DEFAULT_LOCK_WORDS as h}from"../chunk-RE4LP46F.js";import{DEFAULT_COPY_WORDS as j}from"../chunk-PMRN5Z3T.js";import{DEFAULT_FIELDS_WORDS as k}from"../chunk-JACEEVVF.js";import{stringsContext as a}from"../chunk-MFIRYGHW.js";import{DEFAULT_DRAG_WORDS as Y}from"../chunk-TQ5Y6S2X.js";import{useContext as y,useMemo as W}from"react";import{jsx as C}from"react/jsx-runtime";var F={notice:p,lock:h,save:u,chrome:f,rail:l,tree:m,panel:e,fields:k,pick:o,drag:Y,menu:i,styleClipboard:t,copy:j,canvas:c,textStyles:r,screen:n,pageCopy:s},d=r=>"object"==typeof r&&null!==r;function v(r,o){const n={};for(const t of Object.keys(r)){const c=r[t],m=o[t];null==m?n[t]=c:d(c)?n[t]=d(m)?v(c,m):c:n[t]=typeof m==typeof c?m:c}return n}function D(r,o){return o?v(r,o):r}function J({value:r,locale:o,children:n}){const t=a(),c=y(t),m=c?.strings??F,e=o??c?.locale??"en",i=W(()=>({strings:D(m,r),locale:e}),[m,r,e]);/* @__PURE__ */
|
|
2
|
+
return C(t.Provider,{value:i,children:n})}function O(){return y(a())?.strings??F}function S(){return y(a())?.locale??"en"}export{F as DEFAULT_EASEL_STRINGS,J as EaselStringsProvider,D as mergeEaselStrings,S as useEaselLocale,O as useEaselStrings};
|
|
@@ -2,38 +2,6 @@ import { E as EaselContextMenuItem } from '../types-BbOBWXMP.js';
|
|
|
2
2
|
import { S as StyleClipboardWords } from '../words-CnnHb9jo.js';
|
|
3
3
|
import 'react';
|
|
4
4
|
|
|
5
|
-
/**
|
|
6
|
-
* `efficient-easel/style-clipboard` — COPY STYLE and PASTE STYLE, for both editors.
|
|
7
|
-
*
|
|
8
|
-
* Owner, 2026-09-19 (card [ADD] Copy Style And Paste Style): copy a component's
|
|
9
|
-
* look, paste it onto another component, in the campaign designer AND the
|
|
10
|
-
* website editor, written once. His three answers are the three rules here:
|
|
11
|
-
*
|
|
12
|
-
* 1. ONE copy. Everything that is the same in both editors lives in this file:
|
|
13
|
-
* the held style, the matching rule, the menu rows, the words a merchant
|
|
14
|
-
* reads after a paste, and the shortcut test. A host only says which of its
|
|
15
|
-
* rows are Style or Layout, and saves the new props through the one op it
|
|
16
|
-
* already has — so a paste is one undo step, and the shell dispatches
|
|
17
|
-
* nothing.
|
|
18
|
-
* 2. Paste onto ANY component, but only the settings the target also has. A
|
|
19
|
-
* setting is the same setting when the KEY and the KIND are the same — see
|
|
20
|
-
* {@link planPaste}. When we cannot tell, it is skipped.
|
|
21
|
-
* 3. Style and Layout, never Content. Which rows those are is the host's
|
|
22
|
-
* answer (its tabs are its own); this file never sees a Content row.
|
|
23
|
-
*
|
|
24
|
-
* WHAT IS HELD. One style at a time, tagged with the SCOPE it came from (a site,
|
|
25
|
-
* a campaign). In another scope nothing is held, so a look never crosses from
|
|
26
|
-
* one site to another or from the email editor to the website editor. It is
|
|
27
|
-
* kept in memory and in `sessionStorage`, so it lasts for the editor session
|
|
28
|
-
* and survives a page load inside the same tab. Storage can be missing or throw
|
|
29
|
-
* (a private window, blocked site data); every touch is in a try/catch and the
|
|
30
|
-
* memory copy still works.
|
|
31
|
-
*
|
|
32
|
-
* A LEAF. Nothing here runs at import: no `window`, no `document`, no storage.
|
|
33
|
-
* It imports React only for the two menu glyphs, and nothing outside `src/`
|
|
34
|
-
* (`tests/style-clipboard-leaf-safety.test.ts`).
|
|
35
|
-
*/
|
|
36
|
-
|
|
37
5
|
/** Where a value is stored on a node's props: `['size']`, or `['mobile', 'size']`
|
|
38
6
|
* for the campaign editor's phone value of `size`. */
|
|
39
7
|
type StylePath = readonly string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{COPY_STYLE_SHORTCUT,PASTE_STYLE_SHORTCUT,STYLE_KIND,choiceKind,clearStyle,copyStyle,fieldKind,heldStyle,pasteMessage,planPaste,styleMenuItems,styleShortcut,subscribeStyle,withStyleKind}from"../chunk-
|
|
1
|
+
export{COPY_STYLE_SHORTCUT,PASTE_STYLE_SHORTCUT,STYLE_KIND,choiceKind,clearStyle,copyStyle,fieldKind,heldStyle,pasteMessage,planPaste,styleMenuItems,styleShortcut,subscribeStyle,withStyleKind}from"../chunk-CWELHADJ.js";import"../chunk-6WY6ZXJG.js";import"../chunk-EUFDQ4KL.js";import"../chunk-KXM6YRG2.js";
|
|
@@ -137,12 +137,13 @@ interface ColourSwatchRowProps {
|
|
|
137
137
|
* draws it through this export, unchanged.
|
|
138
138
|
*
|
|
139
139
|
* The swatches are the shell's `ColorSwatch`, named on hover by its `Tooltip`
|
|
140
|
-
* (easel#199 step 4, harness UI-24). Any color
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
* The row's name, the readout and the swatch group
|
|
140
|
+
* (easel#199 step 4, harness UI-24). Any color is the shell's `Popover`
|
|
141
|
+
* (duplicate audit 2026-10-29, U21): its trigger wears the swatch's look
|
|
142
|
+
* (`colorSwatchClasses`, painted with the hue wheel, ringed while the colour
|
|
143
|
+
* is a hex), and the window under it is placed, closed by Escape or a press
|
|
144
|
+
* outside, and hands focus back as every kit popup is — the colour picker's
|
|
145
|
+
* (`ColourPicker`) included. The row's name, the readout and the swatch group
|
|
146
|
+
* stay this row's.
|
|
146
147
|
*
|
|
147
148
|
* What a press means is the host's: a swatch writes its key, the window a
|
|
148
149
|
* hex. Clearing, and what "nothing chosen" reads, are the host's too.
|