efficient-easel 26.15.0 → 27.0.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.
Files changed (87) hide show
  1. package/README.md +9 -8
  2. package/dist/{canvas-typing--FlIZwbT.d.ts → canvas-typing-CD1aeYnk.d.ts} +7 -0
  3. package/dist/chunk-2262JGFV.js +5 -0
  4. package/dist/{chunk-NUJEHA6A.js → chunk-3W2O22DZ.js} +10 -10
  5. package/dist/chunk-53QUHEHK.js +1 -0
  6. package/dist/{chunk-7U4HEUZM.js → chunk-5JNVMCCB.js} +1 -1
  7. package/dist/{chunk-5OYP3C2K.js → chunk-5OWAV3MH.js} +1 -1
  8. package/dist/chunk-76MUJIZE.js +17 -0
  9. package/dist/{chunk-YMK3MZJK.js → chunk-AAZIMKLQ.js} +1 -1
  10. package/dist/{chunk-PG7G7ELT.js → chunk-BFJAEQZ6.js} +1 -1
  11. package/dist/chunk-DAKKPW2Z.js +1 -0
  12. package/dist/chunk-DIOTWSCO.js +1 -0
  13. package/dist/chunk-FW35PCK7.js +1 -0
  14. package/dist/{chunk-C4TJN6GR.js → chunk-G2VZ4DET.js} +1 -1
  15. package/dist/{chunk-WMC6FE3G.js → chunk-HG65R6IN.js} +14 -14
  16. package/dist/chunk-L2WK5JYB.js +2 -0
  17. package/dist/chunk-L7PSERQH.js +8 -0
  18. package/dist/{chunk-3BQT7FC7.js → chunk-MNQDOSAX.js} +2 -2
  19. package/dist/{chunk-H4TUOPI7.js → chunk-NTG5ODKZ.js} +1 -1
  20. package/dist/{chunk-2EDOL4IW.js → chunk-O4OWODU2.js} +35 -35
  21. package/dist/chunk-TDEBPOWV.js +3 -0
  22. package/dist/{chunk-3ZGOVNVH.js → chunk-TYTMUHUK.js} +1 -1
  23. package/dist/chunk-W3UZNKGS.js +7 -0
  24. package/dist/{chunk-CLAADE4J.js → chunk-XWTQTANN.js} +5 -5
  25. package/dist/{chunk-MGEXTIZH.js → chunk-YES5F7OS.js} +1 -1
  26. package/dist/chunk-ZFEAWEFS.js +4 -0
  27. package/dist/chunk-ZNLODQD4.js +3 -0
  28. package/dist/copy/index.d.ts +3 -3
  29. package/dist/copy/index.js +12 -12
  30. package/dist/draw/index.js +1 -1
  31. package/dist/easel/index.d.ts +2 -2
  32. package/dist/easel/index.js +1 -1
  33. package/dist/fields/index.d.ts +43 -16
  34. package/dist/fields/index.js +1 -1
  35. package/dist/panel/index.js +1 -1
  36. package/dist/{rowMarks-CO5TpfLY.d.ts → rowMarks-D2cO7UTi.d.ts} +5 -5
  37. package/dist/screen/components/AddBlockRow.js +1 -1
  38. package/dist/screen/components/AddSidePanel.js +1 -1
  39. package/dist/screen/components/NodeContextMenu.js +1 -1
  40. package/dist/screen/components/PageEditGuardNotices.js +1 -1
  41. package/dist/screen/components/ScreenChrome.js +1 -1
  42. package/dist/screen/components/ScreenDocumentContext.js +1 -1
  43. package/dist/screen/components/ScreenMount.js +1 -1
  44. package/dist/screen/components/ScreenStoreProvider.js +1 -1
  45. package/dist/screen/components/SectionScreenShell.js +17 -17
  46. package/dist/screen/components/usePartBridge.js +1 -1
  47. package/dist/screen/index.js +1 -1
  48. package/dist/screen/lib/content/view-tiers.d.ts +11 -1
  49. package/dist/screen/lib/content/view-tiers.js +1 -1
  50. package/dist/screen/lib/document/block-set-host.js +1 -1
  51. package/dist/screen/lib/document/block-size-fields.js +1 -1
  52. package/dist/screen/lib/document/box-fields.d.ts +41 -13
  53. package/dist/screen/lib/document/box-fields.js +1 -1
  54. package/dist/screen/lib/document/button-fields.js +1 -1
  55. package/dist/screen/lib/document/device-fields.d.ts +10 -17
  56. package/dist/screen/lib/document/device-fields.js +1 -1
  57. package/dist/screen/lib/document/image-fields.js +5 -5
  58. package/dist/screen/lib/document/panel-no-control-mark.d.ts +2 -2
  59. package/dist/screen/lib/document/shadow-fields.js +2 -2
  60. package/dist/screen/lib/document/style-clipboard.js +1 -1
  61. package/dist/screen/lib/document/style-fields.js +1 -1
  62. package/dist/screen/lib/document/use-section-ops.js +1 -1
  63. package/dist/screen/lib/key-scope.js +1 -1
  64. package/dist/screen/lib/screen-parts.d.ts +0 -10
  65. package/dist/screen/lib/screen-parts.js +1 -1
  66. package/dist/screen/screen.css +0 -6
  67. package/dist/screen/words.d.ts +1 -3
  68. package/dist/screen/words.js +1 -1
  69. package/dist/strings/index.js +2 -2
  70. package/dist/text-styles/index.d.ts +6 -5
  71. package/dist/text-styles/index.js +37 -37
  72. package/dist/text-styles/model.d.ts +24 -14
  73. package/dist/text-styles/model.js +1 -1
  74. package/dist/{types-CVHwspYM.d.ts → types-DcyH17ij.d.ts} +2 -0
  75. package/package.json +1 -1
  76. package/dist/chunk-BLE3U2GS.js +0 -2
  77. package/dist/chunk-CPIWSFGR.js +0 -2
  78. package/dist/chunk-E52W3M5I.js +0 -1
  79. package/dist/chunk-IHOTVWDE.js +0 -7
  80. package/dist/chunk-K6TDOXHR.js +0 -17
  81. package/dist/chunk-L4DFCNDQ.js +0 -5
  82. package/dist/chunk-M4SOZEZR.js +0 -4
  83. package/dist/chunk-RWGOCHH7.js +0 -1
  84. package/dist/chunk-U4TG43PD.js +0 -1
  85. package/dist/chunk-VVHDUTAE.js +0 -8
  86. package/dist/chunk-YHZSBL2N.js +0 -1
  87. package/dist/chunk-ZEH6QLBH.js +0 -4
@@ -1 +1 @@
1
- export{usePartBridge}from"../../chunk-5OYP3C2K.js";import"../../chunk-3ZGOVNVH.js";import"../../chunk-L4DFCNDQ.js";import"../../chunk-NCXYC7WI.js";import"../../chunk-LX23TCTP.js";import"../../chunk-R4AUZVA3.js";import"../../chunk-TCAAOYQY.js";import"../../chunk-NUJEHA6A.js";import"../../chunk-JQQFB7EZ.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-WMC6FE3G.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-YCSZAP7T.js";import"../../chunk-ZEH6QLBH.js";import"../../chunk-WHS6Y55E.js";import"../../chunk-D4TH4QQR.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-56ID6FKZ.js";import"../../chunk-K53PQAMP.js";import"../../chunk-FIVU2COQ.js";import"../../chunk-QTHQPJWA.js";import"../../chunk-3BQT7FC7.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";import"../../chunk-467WWV4I.js";import"../../chunk-TIAWIOGD.js";import"../../chunk-MGVI67QV.js";
1
+ export{usePartBridge}from"../../chunk-5OWAV3MH.js";import"../../chunk-TYTMUHUK.js";import"../../chunk-2262JGFV.js";import"../../chunk-NCXYC7WI.js";import"../../chunk-LX23TCTP.js";import"../../chunk-R4AUZVA3.js";import"../../chunk-TCAAOYQY.js";import"../../chunk-3W2O22DZ.js";import"../../chunk-JQQFB7EZ.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-HG65R6IN.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-YCSZAP7T.js";import"../../chunk-TDEBPOWV.js";import"../../chunk-WHS6Y55E.js";import"../../chunk-D4TH4QQR.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-56ID6FKZ.js";import"../../chunk-K53PQAMP.js";import"../../chunk-FIVU2COQ.js";import"../../chunk-QTHQPJWA.js";import"../../chunk-MNQDOSAX.js";import"../../chunk-PMRN5Z3T.js";import"../../chunk-Y2T3JX7K.js";import"../../chunk-KFWNGPW3.js";import"../../chunk-DX3VILZ3.js";import"../../chunk-MIX7EGRG.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";import"../../chunk-467WWV4I.js";import"../../chunk-TIAWIOGD.js";import"../../chunk-MGVI67QV.js";
@@ -1 +1 @@
1
- import"../chunk-GZO72N3Q.js";export{DocumentScreen,ScreenMount}from"../chunk-IHOTVWDE.js";import"../chunk-GXQCZJOP.js";export{ScreenStoreProvider}from"../chunk-YMK3MZJK.js";import"../chunk-2EDOL4IW.js";import"../chunk-UMBNBCL4.js";import"../chunk-OXZDSOZV.js";import"../chunk-7OCEPOEJ.js";import"../chunk-U4TG43PD.js";import"../chunk-5XL2RXFU.js";import"../chunk-3QB2ZQXK.js";import"../chunk-BLE3U2GS.js";import"../chunk-22I55W37.js";import"../chunk-LUOY3A3Q.js";import"../chunk-PG7G7ELT.js";import"../chunk-KCBEE2MC.js";import"../chunk-6EDVZBUO.js";import"../chunk-5OYP3C2K.js";import"../chunk-3ZGOVNVH.js";import"../chunk-MGEXTIZH.js";import"../chunk-PVBDKBJB.js";import"../chunk-RKTF5XLP.js";import"../chunk-CPIWSFGR.js";import"../chunk-QZJKWKGH.js";import"../chunk-ERR437B5.js";import"../chunk-JIP5JNRB.js";import"../chunk-GR3XRILS.js";export{NO_DOCUMENT_ADDRESSING}from"../chunk-RLBXE4EU.js";import"../chunk-6ATIYLUL.js";import"../chunk-KO47WAWR.js";import"../chunk-NQW6XCAY.js";import"../chunk-LOMEH6DG.js";import"../chunk-5545A3PC.js";import"../chunk-VVHDUTAE.js";import"../chunk-GDO4QJ4G.js";import"../chunk-IZGFJWH4.js";import"../chunk-N7E6264U.js";import"../chunk-N3MJOHAG.js";import"../chunk-SBVIW3KJ.js";import"../chunk-UMDQ6CLQ.js";import"../chunk-KCOBHPN6.js";import"../chunk-RUQOIQWI.js";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-L4DFCNDQ.js";import"../chunk-T2RINM7R.js";import"../chunk-NCXYC7WI.js";import"../chunk-H4TUOPI7.js";export{EaselSessionProvider,useEaselSession}from"../chunk-YM4UEGBV.js";export{EFFICIENT_BACKEND,activateEaselSession,backendOf,createEaselSession,currentEaselSession,deactivateEaselSession,efficientClientOpen,isEfficientBackend,provideDefaultBackend,resetAmbientEaselSession,sessionRegistry,setSessionBridgedSite,setSessionDocumentSite}from"../chunk-SNF5764Q.js";export{DETACHED_EASEL_HOST,EaselHostContext,EaselHostProvider,FIELD_DESCRIPTION_MARKER,createEaselHost,describedAs,useEaselHost,useHostEscape}from"../chunk-LX23TCTP.js";import"../chunk-XFYFKITX.js";import"../chunk-C4TJN6GR.js";import"../chunk-CWELHADJ.js";import"../chunk-6WY6ZXJG.js";import"../chunk-5NHQ452C.js";import"../chunk-AJ2SUSET.js";import"../chunk-6UAEFOJ4.js";import"../chunk-ANPOR6EY.js";import"../chunk-R4AUZVA3.js";import"../chunk-TCAAOYQY.js";import"../chunk-NUJEHA6A.js";import"../chunk-JQQFB7EZ.js";import"../chunk-TBY3DFKS.js";import"../chunk-WMC6FE3G.js";import"../chunk-BPXEFVSQ.js";import"../chunk-YCSZAP7T.js";import"../chunk-ZEH6QLBH.js";import"../chunk-WHS6Y55E.js";import"../chunk-D4TH4QQR.js";import"../chunk-K56YDHYQ.js";import"../chunk-56ID6FKZ.js";import"../chunk-K53PQAMP.js";import"../chunk-ZKY45F5G.js";import"../chunk-FIVU2COQ.js";import"../chunk-P5VYGWYO.js";import"../chunk-WK3AFPXY.js";import"../chunk-QTHQPJWA.js";import"../chunk-NDRZP6YR.js";import"../chunk-H6DDIBQ4.js";import"../chunk-VBEVZZTV.js";import"../chunk-MJM6SFD3.js";import"../chunk-AJSDWWJW.js";import"../chunk-2OAZYSWJ.js";import"../chunk-YYD257TD.js";import"../chunk-RE4LP46F.js";import"../chunk-3BQT7FC7.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-SQTVXE5D.js";import"../chunk-TQ5Y6S2X.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";import"../chunk-BSPCSC45.js";import"../chunk-467WWV4I.js";import"../chunk-TIAWIOGD.js";import"../chunk-MGVI67QV.js";
1
+ import"../chunk-GZO72N3Q.js";export{DocumentScreen,ScreenMount}from"../chunk-W3UZNKGS.js";import"../chunk-GXQCZJOP.js";export{ScreenStoreProvider}from"../chunk-AAZIMKLQ.js";import"../chunk-O4OWODU2.js";import"../chunk-UMBNBCL4.js";import"../chunk-OXZDSOZV.js";import"../chunk-7OCEPOEJ.js";import"../chunk-FW35PCK7.js";import"../chunk-5XL2RXFU.js";import"../chunk-3QB2ZQXK.js";import"../chunk-ZNLODQD4.js";import"../chunk-22I55W37.js";import"../chunk-LUOY3A3Q.js";import"../chunk-BFJAEQZ6.js";import"../chunk-KCBEE2MC.js";import"../chunk-6EDVZBUO.js";import"../chunk-5OWAV3MH.js";import"../chunk-TYTMUHUK.js";import"../chunk-YES5F7OS.js";import"../chunk-PVBDKBJB.js";import"../chunk-RKTF5XLP.js";import"../chunk-L2WK5JYB.js";import"../chunk-QZJKWKGH.js";import"../chunk-ERR437B5.js";import"../chunk-JIP5JNRB.js";import"../chunk-GR3XRILS.js";export{NO_DOCUMENT_ADDRESSING}from"../chunk-RLBXE4EU.js";import"../chunk-6ATIYLUL.js";import"../chunk-KO47WAWR.js";import"../chunk-NQW6XCAY.js";import"../chunk-LOMEH6DG.js";import"../chunk-5545A3PC.js";import"../chunk-L7PSERQH.js";import"../chunk-GDO4QJ4G.js";import"../chunk-IZGFJWH4.js";import"../chunk-N7E6264U.js";import"../chunk-N3MJOHAG.js";import"../chunk-SBVIW3KJ.js";import"../chunk-UMDQ6CLQ.js";import"../chunk-KCOBHPN6.js";import"../chunk-RUQOIQWI.js";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-2262JGFV.js";import"../chunk-T2RINM7R.js";import"../chunk-NCXYC7WI.js";import"../chunk-NTG5ODKZ.js";export{EaselSessionProvider,useEaselSession}from"../chunk-YM4UEGBV.js";export{EFFICIENT_BACKEND,activateEaselSession,backendOf,createEaselSession,currentEaselSession,deactivateEaselSession,efficientClientOpen,isEfficientBackend,provideDefaultBackend,resetAmbientEaselSession,sessionRegistry,setSessionBridgedSite,setSessionDocumentSite}from"../chunk-SNF5764Q.js";export{DETACHED_EASEL_HOST,EaselHostContext,EaselHostProvider,FIELD_DESCRIPTION_MARKER,createEaselHost,describedAs,useEaselHost,useHostEscape}from"../chunk-LX23TCTP.js";import"../chunk-XFYFKITX.js";import"../chunk-G2VZ4DET.js";import"../chunk-CWELHADJ.js";import"../chunk-6WY6ZXJG.js";import"../chunk-5NHQ452C.js";import"../chunk-AJ2SUSET.js";import"../chunk-6UAEFOJ4.js";import"../chunk-ANPOR6EY.js";import"../chunk-R4AUZVA3.js";import"../chunk-TCAAOYQY.js";import"../chunk-3W2O22DZ.js";import"../chunk-JQQFB7EZ.js";import"../chunk-TBY3DFKS.js";import"../chunk-HG65R6IN.js";import"../chunk-BPXEFVSQ.js";import"../chunk-YCSZAP7T.js";import"../chunk-TDEBPOWV.js";import"../chunk-WHS6Y55E.js";import"../chunk-D4TH4QQR.js";import"../chunk-K56YDHYQ.js";import"../chunk-56ID6FKZ.js";import"../chunk-K53PQAMP.js";import"../chunk-ZKY45F5G.js";import"../chunk-FIVU2COQ.js";import"../chunk-P5VYGWYO.js";import"../chunk-WK3AFPXY.js";import"../chunk-QTHQPJWA.js";import"../chunk-NDRZP6YR.js";import"../chunk-H6DDIBQ4.js";import"../chunk-VBEVZZTV.js";import"../chunk-MJM6SFD3.js";import"../chunk-AJSDWWJW.js";import"../chunk-2OAZYSWJ.js";import"../chunk-YYD257TD.js";import"../chunk-RE4LP46F.js";import"../chunk-MNQDOSAX.js";import"../chunk-PMRN5Z3T.js";import"../chunk-Y2T3JX7K.js";import"../chunk-KFWNGPW3.js";import"../chunk-DX3VILZ3.js";import"../chunk-MIX7EGRG.js";import"../chunk-JACEEVVF.js";import"../chunk-MFIRYGHW.js";import"../chunk-SQTVXE5D.js";import"../chunk-TQ5Y6S2X.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";import"../chunk-BSPCSC45.js";import"../chunk-467WWV4I.js";import"../chunk-TIAWIOGD.js";import"../chunk-MGVI67QV.js";
@@ -113,5 +113,15 @@ interface ViewValues<T> {
113
113
  * auto into a copy that stops following its parent.
114
114
  */
115
115
  declare function resolveViewValue<T>(kind: ViewValueKind, desktop: T, tablet?: T | null, phone?: T | null, rules?: Record<ViewValueKind, AutoRule>): ViewValues<T>;
116
+ /**
117
+ * What an EMPTY view value follows, as the editor's panel shows it: the next
118
+ * wider view's value. With `tablet` given (the phone's twin): the tablet value,
119
+ * then the desktop value. Without it (the tablet's twin): the desktop value.
120
+ * Every panel row that shows a followed value reads it here, through
121
+ * {@link resolveViewValue} under {@link FOLLOW_RULES}, so the chain is spelled
122
+ * once. A page drawn by {@link AUTO_RULES} scales that value; the panel does
123
+ * not show the scaled number yet.
124
+ */
125
+ declare function viewFollows<T>(desktop: T, tablet?: T | null): T;
116
126
 
117
- export { AUTO_RULES, type AutoRule, FOLLOW_RULES, VIEW_DESKTOP_MIN, VIEW_TABLET_MIN, VIEW_TIERS, VIEW_TIER_LABEL, type ViewTier, type ViewValueKind, type ViewValues, isAuto, phoneKey, resolveViewValue, tabletKey, viewTierForWidth };
127
+ export { AUTO_RULES, type AutoRule, FOLLOW_RULES, VIEW_DESKTOP_MIN, VIEW_TABLET_MIN, VIEW_TIERS, VIEW_TIER_LABEL, type ViewTier, type ViewValueKind, type ViewValues, isAuto, phoneKey, resolveViewValue, tabletKey, viewFollows, viewTierForWidth };
@@ -1 +1 @@
1
- export{AUTO_RULES,FOLLOW_RULES,VIEW_DESKTOP_MIN,VIEW_TABLET_MIN,VIEW_TIERS,VIEW_TIER_LABEL,isAuto,phoneKey,resolveViewValue,tabletKey,viewTierForWidth}from"../../../chunk-E52W3M5I.js";
1
+ export{AUTO_RULES,FOLLOW_RULES,VIEW_DESKTOP_MIN,VIEW_TABLET_MIN,VIEW_TIERS,VIEW_TIER_LABEL,isAuto,phoneKey,resolveViewValue,tabletKey,viewFollows,viewTierForWidth}from"../../../chunk-DIOTWSCO.js";
@@ -1 +1 @@
1
- import{buttonFieldSet as e}from"../../../chunk-RWGOCHH7.js";import"../../../chunk-M4SOZEZR.js";import{boxFieldSet as o}from"../../../chunk-K6TDOXHR.js";import"../../../chunk-CLAADE4J.js";import"../../../chunk-2T22IY3J.js";import"../../../chunk-BLE3U2GS.js";import"../../../chunk-22I55W37.js";import"../../../chunk-LX23TCTP.js";import"../../../chunk-C4TJN6GR.js";import"../../../chunk-CWELHADJ.js";import"../../../chunk-6WY6ZXJG.js";import"../../../chunk-PLTTPHK5.js";import{phoneKey as t}from"../../../chunk-E52W3M5I.js";import{foldMetaOf as n}from"../../../chunk-ANPOR6EY.js";import"../../../chunk-NUJEHA6A.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-D4TH4QQR.js";import"../../../chunk-56ID6FKZ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-OECWLNKJ.js";import"../../../chunk-3BQT7FC7.js";import"../../../chunk-PMRN5Z3T.js";import"../../../chunk-KFWNGPW3.js";import"../../../chunk-MIX7EGRG.js";import"../../../chunk-DX3VILZ3.js";import"../../../chunk-JACEEVVF.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-TOKMFZPB.js";import"../../../chunk-FR7EEKFF.js";import"../../../chunk-7UFKEX72.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import"../../../chunk-BSPCSC45.js";function s(e){return Object.keys(e).filter(o=>{return t=e[o],!(null!==n(t));var t})}function r(e,o){const t=o.off??{},s=o.keys??{};for(const[e,o]of Object.entries(t))if(!o.trim())throw new Error(`blockSetFor: off row "${e}" needs a reason.`);for(const o of[...Object.keys(t),...Object.keys(s)]){if(!Object.hasOwn(e,o))throw new Error(`blockSetFor: the set has no row "${o}".`);if(Object.hasOwn(t,o)&&Object.hasOwn(s,o))throw new Error(`blockSetFor: row "${o}" is both off and renamed.`)}const r={};let i=[];for(const[o,c]of Object.entries(e)){const a=n(c);if(a){i=i.filter(([,e])=>n(e).level<a.level),i.push([o,c]);continue}if(Object.hasOwn(t,o))continue;for(const[e,o]of i)r[e]=o;i=[];const u=Object.hasOwn(s,o)?s[o]:o;if(Object.hasOwn(r,u)||u!==o&&Object.hasOwn(e,u))throw new Error(`blockSetFor: renamed key "${u}" is already a row.`);r[u]=c}return r}function i(e){const o=e.build();r(o,e.email),r(o,e.website);const t=s(o),n=e=>new Set(Object.keys(e.off??{})),i=n(e.email),c=n(e.website),a=[];for(const o of t)i.has(o)&&!c.has(o)&&a.push({row:o,only:"website",reason:e.email.off[o]}),c.has(o)&&!i.has(o)&&a.push({row:o,only:"email",reason:e.website.off[o]});return a}var c=["button","image","box","divider","logo","text","section","social"],a={useFill:()=>"",useText:()=>"",useBorder:()=>({width:0,color:""}),useCorners:()=>0},u={button:{build:()=>e({follows:a,padding:{fallback:{}}}),email:{editor:"email"},website:{editor:"website"}},box:{build:()=>o(),email:{editor:"email",keys:{gap:"itemGap"},off:Object.fromEntries(["sectionPaddingTop","sectionPaddingRight","sectionPaddingBottom","sectionPaddingLeft"].map(e=>[t(e),"email: a Banner Box draws in the desktop view only (admin inBannerFields)"]))},website:{editor:"website"}}},h={button:"the set is in easel; admin (A-B) and web-builder (W-B) still build their own rows (plan group 1)",image:"no easel set yet (plan group 2)",box:"the set is in easel and the email Banner Box imports it; the website Flex builds its own rows (plan group 3)",divider:"no easel set yet (plan group 4)",logo:"no easel set yet (plan group 5)",text:"no easel set yet (plan group 6)",section:"no easel set yet (plan group 7)",social:"no easel set yet (plan group 7)"};export{c as BLOCK_KINDS,h as BLOCK_SETS_STILL_TWO_COPIES,u as BLOCK_SET_PAIRS,i as blockSetDifferences,r as blockSetFor,s as blockSetRowKeys};
1
+ import{buttonFieldSet as e}from"../../../chunk-DAKKPW2Z.js";import"../../../chunk-ZFEAWEFS.js";import{boxFieldSet as o}from"../../../chunk-76MUJIZE.js";import"../../../chunk-XWTQTANN.js";import"../../../chunk-2T22IY3J.js";import"../../../chunk-ZNLODQD4.js";import"../../../chunk-22I55W37.js";import"../../../chunk-LX23TCTP.js";import"../../../chunk-G2VZ4DET.js";import"../../../chunk-CWELHADJ.js";import"../../../chunk-6WY6ZXJG.js";import"../../../chunk-PLTTPHK5.js";import{foldMetaOf as t}from"../../../chunk-ANPOR6EY.js";import"../../../chunk-3W2O22DZ.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-D4TH4QQR.js";import"../../../chunk-56ID6FKZ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-OECWLNKJ.js";import{phoneKey as n}from"../../../chunk-DIOTWSCO.js";import"../../../chunk-MNQDOSAX.js";import"../../../chunk-PMRN5Z3T.js";import"../../../chunk-KFWNGPW3.js";import"../../../chunk-DX3VILZ3.js";import"../../../chunk-MIX7EGRG.js";import"../../../chunk-JACEEVVF.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-TOKMFZPB.js";import"../../../chunk-FR7EEKFF.js";import"../../../chunk-7UFKEX72.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import"../../../chunk-BSPCSC45.js";function s(e){return Object.keys(e).filter(o=>{return n=e[o],!(null!==t(n));var n})}function r(e,o){const n=o.off??{},s=o.keys??{};for(const[e,o]of Object.entries(n))if(!o.trim())throw new Error(`blockSetFor: off row "${e}" needs a reason.`);for(const o of[...Object.keys(n),...Object.keys(s)]){if(!Object.hasOwn(e,o))throw new Error(`blockSetFor: the set has no row "${o}".`);if(Object.hasOwn(n,o)&&Object.hasOwn(s,o))throw new Error(`blockSetFor: row "${o}" is both off and renamed.`)}const r={};let i=[];for(const[o,c]of Object.entries(e)){const a=t(c);if(a){i=i.filter(([,e])=>t(e).level<a.level),i.push([o,c]);continue}if(Object.hasOwn(n,o))continue;for(const[e,o]of i)r[e]=o;i=[];const u=Object.hasOwn(s,o)?s[o]:o;if(Object.hasOwn(r,u)||u!==o&&Object.hasOwn(e,u))throw new Error(`blockSetFor: renamed key "${u}" is already a row.`);r[u]=c}return r}function i(e){const o=e.build();r(o,e.email),r(o,e.website);const t=s(o),n=e=>new Set(Object.keys(e.off??{})),i=n(e.email),c=n(e.website),a=[];for(const o of t)i.has(o)&&!c.has(o)&&a.push({row:o,only:"website",reason:e.email.off[o]}),c.has(o)&&!i.has(o)&&a.push({row:o,only:"email",reason:e.website.off[o]});return a}var c=["button","image","box","divider","logo","text","section","social"],a={useFill:()=>"",useText:()=>"",useBorder:()=>({width:0,color:""}),useCorners:()=>0},u={button:{build:()=>e({follows:a,padding:{fallback:{}}}),email:{editor:"email"},website:{editor:"website"}},box:{build:()=>o(),email:{editor:"email",keys:{gap:"itemGap"},off:Object.fromEntries(["sectionPaddingTop","sectionPaddingRight","sectionPaddingBottom","sectionPaddingLeft"].map(e=>[n(e),"email: a Banner Box draws in the desktop view only (admin inBannerFields)"]))},website:{editor:"website"}}},h={button:"the set is in easel; admin (A-B) and web-builder (W-B) still build their own rows (plan group 1)",image:"no easel set yet (plan group 2)",box:"the set is in easel and the email Banner Box imports it; the website Flex builds its own rows (plan group 3)",divider:"no easel set yet (plan group 4)",logo:"no easel set yet (plan group 5)",text:"no easel set yet (plan group 6)",section:"no easel set yet (plan group 7)",social:"no easel set yet (plan group 7)"};export{c as BLOCK_KINDS,h as BLOCK_SETS_STILL_TWO_COPIES,u as BLOCK_SET_PAIRS,i as blockSetDifferences,r as blockSetFor,s as blockSetRowKeys};
@@ -1 +1 @@
1
- import{noGlyph as t,boxFieldBuilders as i,PHONE_KEY_ACCESS as n,group as o,phoneTwinFields as r}from"../../../chunk-K6TDOXHR.js";import"../../../chunk-CLAADE4J.js";import"../../../chunk-2T22IY3J.js";import"../../../chunk-BLE3U2GS.js";import"../../../chunk-22I55W37.js";import"../../../chunk-LX23TCTP.js";import"../../../chunk-C4TJN6GR.js";import"../../../chunk-CWELHADJ.js";import"../../../chunk-6WY6ZXJG.js";import{BLOCK_WIDTH_LIMIT as h,BLOCK_FIXED_WIDTH as m,BLOCK_WIDTH_FIT_POINTS as e,BLOCK_WIDTH_FIT_DEFAULT as s,TEXT_FIT_MIN_FONT as c,TEXT_FIT_POINTS as p}from"../../../chunk-XH4BP64C.js";import"../../../chunk-E52W3M5I.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-NUJEHA6A.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-D4TH4QQR.js";import"../../../chunk-56ID6FKZ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-OECWLNKJ.js";import"../../../chunk-3BQT7FC7.js";import"../../../chunk-PMRN5Z3T.js";import"../../../chunk-KFWNGPW3.js";import"../../../chunk-MIX7EGRG.js";import"../../../chunk-DX3VILZ3.js";import"../../../chunk-JACEEVVF.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-TOKMFZPB.js";import"../../../chunk-FR7EEKFF.js";import"../../../chunk-7UFKEX72.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import"../../../chunk-BSPCSC45.js";import{WidthIcon as u,TextLinesIcon as k}from"efficient-shell/icons/efficient";import{jsx as j}from"react/jsx-runtime";var d=t("a value or limit row under the Width and text-fit choices; drawn bare in the approved design (owner 2026-10-29, c25 row 4); no shell glyph names a min, max or fixed width");function a(t={}){const a=i(t.say),F=t.phone??n,x=(t,i)=>r(t,i,F),f=(t,i,n,o,r)=>x(t,a.slider(i,d,n.min,n.max,n.step,o,"px",{clear:r?{hint:o,emptyLabel:r}:{hint:o}}));return{size:{_gBlockSize:o("Size"),...x("widthFit",a.segmented("Width",/* @__PURE__ */j(u,{}),[...e],s)),...f("width","Fixed width",m,m.fallback),...f("minWidth","Min width",h,h.min,"None"),...f("maxWidth","Content width",h,h.min,"None")},text:t.textFit?{_gText:o("Text"),...x("textFit",a.segmented("When the text does not fit",/* @__PURE__ */j(k,{}),[...p],t.textFit)),...f("minFont","Min font size",c,c.fallback)}:{}}}export{a as blockSizeFieldSet};
1
+ import{noGlyph as t,boxFieldBuilders as i,PHONE_KEY_ACCESS as n,group as o,phoneTwinFields as r}from"../../../chunk-76MUJIZE.js";import"../../../chunk-XWTQTANN.js";import"../../../chunk-2T22IY3J.js";import"../../../chunk-ZNLODQD4.js";import"../../../chunk-22I55W37.js";import"../../../chunk-LX23TCTP.js";import"../../../chunk-G2VZ4DET.js";import"../../../chunk-CWELHADJ.js";import"../../../chunk-6WY6ZXJG.js";import{BLOCK_WIDTH_LIMIT as h,BLOCK_FIXED_WIDTH as m,BLOCK_WIDTH_FIT_POINTS as e,BLOCK_WIDTH_FIT_DEFAULT as s,TEXT_FIT_MIN_FONT as c,TEXT_FIT_POINTS as p}from"../../../chunk-XH4BP64C.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-3W2O22DZ.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-D4TH4QQR.js";import"../../../chunk-56ID6FKZ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-OECWLNKJ.js";import"../../../chunk-DIOTWSCO.js";import"../../../chunk-MNQDOSAX.js";import"../../../chunk-PMRN5Z3T.js";import"../../../chunk-KFWNGPW3.js";import"../../../chunk-DX3VILZ3.js";import"../../../chunk-MIX7EGRG.js";import"../../../chunk-JACEEVVF.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-TOKMFZPB.js";import"../../../chunk-FR7EEKFF.js";import"../../../chunk-7UFKEX72.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import"../../../chunk-BSPCSC45.js";import{WidthIcon as u,TextLinesIcon as k}from"efficient-shell/icons/efficient";import{jsx as j}from"react/jsx-runtime";var d=t("a value or limit row under the Width and text-fit choices; drawn bare in the approved design (owner 2026-10-29, c25 row 4); no shell glyph names a min, max or fixed width");function a(t={}){const a=i(t.say),F=t.phone??n,x=(t,i)=>r(t,i,F),W=(t,i,n,o,r)=>x(t,a.slider(i,d,n.min,n.max,n.step,o,"px",{clear:r?{hint:o,emptyLabel:r}:{hint:o}}));return{size:{_gBlockSize:o("Size"),...x("widthFit",a.segmented("Width",/* @__PURE__ */j(u,{}),[...e],s)),...W("width","Fixed width",m,m.fallback),...W("minWidth","Min width",h,h.min,"None"),...W("maxWidth","Content width",h,h.min,"None")},text:t.textFit?{_gText:o("Text"),...x("textFit",a.segmented("When the text does not fit",/* @__PURE__ */j(k,{}),[...p],t.textFit)),...W("minFont","Min font size",c,c.fallback)}:{}}}export{a as blockSizeFieldSet};
@@ -30,11 +30,12 @@ import '../shared-section-types.js';
30
30
  /** A host's word for an English word or row label a builder draws. */
31
31
  type BoxFieldSay = (english: string) => string;
32
32
  /**
33
- * What a phone row says it follows: "{value} on desktop", in the host's words.
34
- * The ONE home of that sentence: every twin row (a slider, a strip, a list, a
35
- * colour, a border) says it through here.
33
+ * What a twin row says it follows: "{value} on desktop", or on the tablet for a
34
+ * phone twin that rests on a tablet value, in the host's words. The ONE home of
35
+ * that sentence: every twin row (a slider, a strip, a list, a colour, a border)
36
+ * says it through here.
36
37
  */
37
- declare function onDesktopWords(say: BoxFieldSay, shown: string): string;
38
+ declare function onDesktopWords(say: BoxFieldSay, shown: string, followsView?: 'desktop' | 'tablet'): string;
38
39
  /** A choice's option, as a builder is given it and as it rides the field. */
39
40
  interface SelectOption {
40
41
  value: string;
@@ -76,12 +77,20 @@ type BoxFieldRenderProps<V> = {
76
77
  * that stores nothing passes `undefined`.
77
78
  */
78
79
  follows?: unknown;
80
+ /** Which view `follows` is the value of. Left out: the desktop. */
81
+ followsView?: 'desktop' | 'tablet';
79
82
  /**
80
83
  * Where a phone twin's values are kept ({@link phoneTwinFields} passes its
81
84
  * access). A row that reads or writes a SIBLING key too (a colour's
82
85
  * opacity) goes through this, so the twin never touches a desktop key.
83
86
  */
84
87
  twinAccess?: PhoneValueAccess;
88
+ /**
89
+ * Where the next wider view's values are kept, on the phone's twin of a
90
+ * host with tablet values: the tablet's access. A row that follows a SIBLING
91
+ * key too (the Corners' sides) reads the tablet's there, then the desktop's.
92
+ */
93
+ widerAccess?: PhoneValueAccess;
85
94
  id?: string;
86
95
  name?: string;
87
96
  };
@@ -276,9 +285,17 @@ interface PhoneValueAccess extends ValueAccess {
276
285
  /** The phone value is stored under `fieldKey` itself, so the row reads and
277
286
  * writes through its own field (`value` / `onChange`), as any row does. */
278
287
  ownField?: boolean;
288
+ /** Where the row's TABLET value is kept. Left out: the row has none, and the
289
+ * tablet view hides it (the email designer has no tablet view). */
290
+ tablet?: PhoneValueAccess;
279
291
  }
280
292
  /** The website's phone values: `phoneKey(key)`, beside the desktop key. */
281
293
  declare const PHONE_KEY_ACCESS: PhoneValueAccess;
294
+ /**
295
+ * The website's phone AND tablet values. A row takes this in the PR that makes
296
+ * the page draw its tablet value, so no panel row writes a value nothing reads.
297
+ */
298
+ declare const VIEW_KEY_ACCESS: PhoneValueAccess;
282
299
  /**
283
300
  * Phone values kept in ONE object prop (the email designer's `mobile`). A
284
301
  * write keeps the object's other keys; a clear removes only its own, and an
@@ -290,7 +307,7 @@ declare function phoneObjectAccess(objectKey: string): PhoneValueAccess;
290
307
  * is kept. */
291
308
  interface PhoneTwinOptions<V> {
292
309
  /**
293
- * The row the phone view draws, when it is not the desktop's row: a phone
310
+ * The row the phone and tablet views draw, when it is not the desktop's row: a phone
294
311
  * that takes a different range or unit (a divider's length is a % of the
295
312
  * column on a phone, px or % on the desktop). It is still given `follows`;
296
313
  * a row that must not rest on the desktop value says so itself
@@ -299,11 +316,19 @@ interface PhoneTwinOptions<V> {
299
316
  phoneRow?: BoxField<V>;
300
317
  }
301
318
  /**
302
- * A row WITH its phone value (twins plan E2: "phone values in phone view, on
303
- * the same row", Lewis 2026-10-27): the row under `key` (Desktop view only)
304
- * and its twin (Phone view only) under `access.fieldKey(key)`. The twin is the
305
- * same row given `follows`, the desktop value: empty, it rests on that and
306
- * says so. A clear writes nothing — never a copy of the desktop value.
319
+ * A row WITH its view values (twins plan E2: "phone values in phone view, on
320
+ * the same row", Lewis 2026-10-27): the row under `key` (Desktop view only), its
321
+ * tablet twin under `access.tablet.fieldKey(key)` when the host keeps one
322
+ * (Tablet view only) and its phone twin under `access.fieldKey(key)` (Phone view
323
+ * only). A twin is the same row given `follows`, the next wider view's value:
324
+ * empty, it rests on that and says so. A clear writes nothing — never a copy.
325
+ *
326
+ * A row can be a twin when it reads and writes through its own field or
327
+ * through `twinAccess` (every builder here: slider, select, the style rows,
328
+ * the object padding row). Not a twin, because it reads the node's keys
329
+ * itself: `positionFields` (its two keys), and the picture row's focus point
330
+ * (`focusKey`, which knows the phone only). A host that gives either one a
331
+ * view value changes the row first; a test holds each row it makes a twin.
307
332
  */
308
333
  declare function phoneTwinFields<V>(key: string, row: BoxField<V>, access?: PhoneValueAccess, more?: PhoneTwinOptions<V>): Record<string, BoxField<V>>;
309
334
  /** A slider's label-line mark, as a function of the STORED value. */
@@ -331,8 +356,8 @@ interface SliderClear {
331
356
  * follows is not one ("Auto": a picture's own height). */
332
357
  emptyLabel?: string;
333
358
  /**
334
- * Whether this row's PHONE TWIN rests on the desktop value. Default true.
335
- * `false`: an empty phone value is the row's own empty state (`hint`,
359
+ * Whether this row's TWINS rest on the wider view's value. Default true.
360
+ * `false`: an empty tablet or phone value is the row's own empty state (`hint`,
336
361
  * `useHint`, `emptyLabel`), whatever the desktop stores — a picture whose
337
362
  * phone height is its natural height ("Auto"), not the desktop's band.
338
363
  */
@@ -486,6 +511,9 @@ type SidesPaddingOptions = {
486
511
  };
487
512
  /** Give the row a phone twin (shown in phone view only). Default true. */
488
513
  phone?: boolean;
514
+ /** Give the row a tablet twin too (shown in tablet view only), under
515
+ * `tabletKey(key)`, as {@link VIEW_KEY_ACCESS} does for one key. */
516
+ tablet?: boolean;
489
517
  /** What an EMPTY side draws, per side, shown in grey (default 0). */
490
518
  fallback?: Partial<Record<PadSide, number>>;
491
519
  /**
@@ -733,4 +761,4 @@ declare const boxFieldSet: (opts?: BoxFieldSetOptions) => {
733
761
  _gNudge: BoxField<undefined>;
734
762
  };
735
763
 
736
- export { ANCHOR_LABELS, type AlignmentOptions, AlignmentStrip, BOX_ALIGN_POINTS, BOX_DIRECTIONS, BOX_DIRECTION_LABEL, BOX_GAP, BOX_JUSTIFY_POINTS, BOX_NUDGE_LIMIT, BOX_PLACEMENTS, BOX_PLACEMENT_DEFAULT, BOX_WIDTH, BOX_WRAP_LABEL, BOX_WRAP_POINTS, type BlockAlignmentOptions, BlockAlignmentStrip, type BoxAlign, type BoxField, type BoxFieldRenderProps, type BoxFieldSay, type BoxFieldSetOptions, type BoxFlexRowOptions, type BoxJustify, type BoxPlacement, type BoxWrap, type DirectionFieldOptions, FLAT_ACCESS, type GapFieldOptions, OPEN_PLACEMENT_POINTS, PHONE_KEY_ACCESS, type PhoneTwinOptions, type PhoneValueAccess, type PlacementFieldOptions, PlacementGridView, type PlacementPoint, type PositionOptions, type RowRead, SIDE_PAD_KEYS, Segmented, type SegmentedOptions, type SelectField, type SelectOption, type SelectOptions, type SidesPaddingOptions, type SliderAction, type SliderClear, SliderControl, type SliderControlProps, type SliderOptions, type ValueAccess, alignmentField, alignmentFields, blockAlignmentField, blockAlignmentFields, boxAlignField, boxFieldBuilders, boxFieldSet, boxJustifyField, boxWrapField, directionField, gapField, group, iconOf, isNoGlyph, noGlyph, normaliseBoxPlacement, objectAccess, onDesktopWords, phoneObjectAccess, phoneTwinFields, placementField, positionFields, positionPatch, section, segmented, select, sharedStyleKinds, sidesFromObject, sidesPaddingFields, sidesPaddingPatch, sidesToObject, slider, useAccessPatch, useAccessValue };
764
+ export { ANCHOR_LABELS, type AlignmentOptions, AlignmentStrip, BOX_ALIGN_POINTS, BOX_DIRECTIONS, BOX_DIRECTION_LABEL, BOX_GAP, BOX_JUSTIFY_POINTS, BOX_NUDGE_LIMIT, BOX_PLACEMENTS, BOX_PLACEMENT_DEFAULT, BOX_WIDTH, BOX_WRAP_LABEL, BOX_WRAP_POINTS, type BlockAlignmentOptions, BlockAlignmentStrip, type BoxAlign, type BoxField, type BoxFieldRenderProps, type BoxFieldSay, type BoxFieldSetOptions, type BoxFlexRowOptions, type BoxJustify, type BoxPlacement, type BoxWrap, type DirectionFieldOptions, FLAT_ACCESS, type GapFieldOptions, OPEN_PLACEMENT_POINTS, PHONE_KEY_ACCESS, type PhoneTwinOptions, type PhoneValueAccess, type PlacementFieldOptions, PlacementGridView, type PlacementPoint, type PositionOptions, type RowRead, SIDE_PAD_KEYS, Segmented, type SegmentedOptions, type SelectField, type SelectOption, type SelectOptions, type SidesPaddingOptions, type SliderAction, type SliderClear, SliderControl, type SliderControlProps, type SliderOptions, VIEW_KEY_ACCESS, type ValueAccess, alignmentField, alignmentFields, blockAlignmentField, blockAlignmentFields, boxAlignField, boxFieldBuilders, boxFieldSet, boxJustifyField, boxWrapField, directionField, gapField, group, iconOf, isNoGlyph, noGlyph, normaliseBoxPlacement, objectAccess, onDesktopWords, phoneObjectAccess, phoneTwinFields, placementField, positionFields, positionPatch, section, segmented, select, sharedStyleKinds, sidesFromObject, sidesPaddingFields, sidesPaddingPatch, sidesToObject, slider, useAccessPatch, useAccessValue };
@@ -1 +1 @@
1
- export{ANCHOR_LABELS,AlignmentStrip,BOX_ALIGN_POINTS,BOX_DIRECTIONS,BOX_DIRECTION_LABEL,BOX_GAP,BOX_JUSTIFY_POINTS,BOX_NUDGE_LIMIT,BOX_PLACEMENTS,BOX_PLACEMENT_DEFAULT,BOX_WIDTH,BOX_WRAP_LABEL,BOX_WRAP_POINTS,BlockAlignmentStrip,FLAT_ACCESS,OPEN_PLACEMENT_POINTS,PHONE_KEY_ACCESS,PlacementGridView,SIDE_PAD_KEYS,Segmented,SliderControl,alignmentField,alignmentFields,blockAlignmentField,blockAlignmentFields,boxAlignField,boxFieldBuilders,boxFieldSet,boxJustifyField,boxWrapField,directionField,gapField,group,iconOf,isNoGlyph,noGlyph,normaliseBoxPlacement,objectAccess,onDesktopWords,phoneObjectAccess,phoneTwinFields,placementField,positionFields,positionPatch,section,segmented,select,sharedStyleKinds,sidesFromObject,sidesPaddingFields,sidesPaddingPatch,sidesToObject,slider,useAccessPatch,useAccessValue}from"../../../chunk-K6TDOXHR.js";import"../../../chunk-CLAADE4J.js";import"../../../chunk-2T22IY3J.js";import"../../../chunk-BLE3U2GS.js";import"../../../chunk-22I55W37.js";export{FIELD_DESCRIPTION_MARKER,describedAs}from"../../../chunk-LX23TCTP.js";import"../../../chunk-C4TJN6GR.js";import"../../../chunk-CWELHADJ.js";import"../../../chunk-6WY6ZXJG.js";import"../../../chunk-E52W3M5I.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-NUJEHA6A.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-D4TH4QQR.js";import"../../../chunk-56ID6FKZ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-OECWLNKJ.js";import"../../../chunk-3BQT7FC7.js";import"../../../chunk-PMRN5Z3T.js";import"../../../chunk-KFWNGPW3.js";import"../../../chunk-MIX7EGRG.js";import"../../../chunk-DX3VILZ3.js";import"../../../chunk-JACEEVVF.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-TOKMFZPB.js";import"../../../chunk-FR7EEKFF.js";import"../../../chunk-7UFKEX72.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import"../../../chunk-BSPCSC45.js";
1
+ export{ANCHOR_LABELS,AlignmentStrip,BOX_ALIGN_POINTS,BOX_DIRECTIONS,BOX_DIRECTION_LABEL,BOX_GAP,BOX_JUSTIFY_POINTS,BOX_NUDGE_LIMIT,BOX_PLACEMENTS,BOX_PLACEMENT_DEFAULT,BOX_WIDTH,BOX_WRAP_LABEL,BOX_WRAP_POINTS,BlockAlignmentStrip,FLAT_ACCESS,OPEN_PLACEMENT_POINTS,PHONE_KEY_ACCESS,PlacementGridView,SIDE_PAD_KEYS,Segmented,SliderControl,VIEW_KEY_ACCESS,alignmentField,alignmentFields,blockAlignmentField,blockAlignmentFields,boxAlignField,boxFieldBuilders,boxFieldSet,boxJustifyField,boxWrapField,directionField,gapField,group,iconOf,isNoGlyph,noGlyph,normaliseBoxPlacement,objectAccess,onDesktopWords,phoneObjectAccess,phoneTwinFields,placementField,positionFields,positionPatch,section,segmented,select,sharedStyleKinds,sidesFromObject,sidesPaddingFields,sidesPaddingPatch,sidesToObject,slider,useAccessPatch,useAccessValue}from"../../../chunk-76MUJIZE.js";import"../../../chunk-XWTQTANN.js";import"../../../chunk-2T22IY3J.js";import"../../../chunk-ZNLODQD4.js";import"../../../chunk-22I55W37.js";export{FIELD_DESCRIPTION_MARKER,describedAs}from"../../../chunk-LX23TCTP.js";import"../../../chunk-G2VZ4DET.js";import"../../../chunk-CWELHADJ.js";import"../../../chunk-6WY6ZXJG.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-3W2O22DZ.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-D4TH4QQR.js";import"../../../chunk-56ID6FKZ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-OECWLNKJ.js";import"../../../chunk-DIOTWSCO.js";import"../../../chunk-MNQDOSAX.js";import"../../../chunk-PMRN5Z3T.js";import"../../../chunk-KFWNGPW3.js";import"../../../chunk-DX3VILZ3.js";import"../../../chunk-MIX7EGRG.js";import"../../../chunk-JACEEVVF.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-TOKMFZPB.js";import"../../../chunk-FR7EEKFF.js";import"../../../chunk-7UFKEX72.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import"../../../chunk-BSPCSC45.js";
@@ -1 +1 @@
1
- export{buttonFieldSet}from"../../../chunk-RWGOCHH7.js";import"../../../chunk-M4SOZEZR.js";import"../../../chunk-K6TDOXHR.js";import"../../../chunk-CLAADE4J.js";import"../../../chunk-2T22IY3J.js";import"../../../chunk-BLE3U2GS.js";import"../../../chunk-22I55W37.js";import"../../../chunk-LX23TCTP.js";import"../../../chunk-C4TJN6GR.js";import"../../../chunk-CWELHADJ.js";import"../../../chunk-6WY6ZXJG.js";export{BUTTON_PAD_KEYS,BUTTON_STYLE_KEYS}from"../../../chunk-PLTTPHK5.js";import"../../../chunk-E52W3M5I.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-NUJEHA6A.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-D4TH4QQR.js";import"../../../chunk-56ID6FKZ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-OECWLNKJ.js";import"../../../chunk-3BQT7FC7.js";import"../../../chunk-PMRN5Z3T.js";import"../../../chunk-KFWNGPW3.js";import"../../../chunk-MIX7EGRG.js";import"../../../chunk-DX3VILZ3.js";import"../../../chunk-JACEEVVF.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-TOKMFZPB.js";import"../../../chunk-FR7EEKFF.js";import"../../../chunk-7UFKEX72.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import"../../../chunk-BSPCSC45.js";
1
+ export{buttonFieldSet}from"../../../chunk-DAKKPW2Z.js";import"../../../chunk-ZFEAWEFS.js";import"../../../chunk-76MUJIZE.js";import"../../../chunk-XWTQTANN.js";import"../../../chunk-2T22IY3J.js";import"../../../chunk-ZNLODQD4.js";import"../../../chunk-22I55W37.js";import"../../../chunk-LX23TCTP.js";import"../../../chunk-G2VZ4DET.js";import"../../../chunk-CWELHADJ.js";import"../../../chunk-6WY6ZXJG.js";export{BUTTON_PAD_KEYS,BUTTON_STYLE_KEYS}from"../../../chunk-PLTTPHK5.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-3W2O22DZ.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-D4TH4QQR.js";import"../../../chunk-56ID6FKZ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-OECWLNKJ.js";import"../../../chunk-DIOTWSCO.js";import"../../../chunk-MNQDOSAX.js";import"../../../chunk-PMRN5Z3T.js";import"../../../chunk-KFWNGPW3.js";import"../../../chunk-DX3VILZ3.js";import"../../../chunk-MIX7EGRG.js";import"../../../chunk-JACEEVVF.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-TOKMFZPB.js";import"../../../chunk-FR7EEKFF.js";import"../../../chunk-7UFKEX72.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import"../../../chunk-BSPCSC45.js";
@@ -1,7 +1,7 @@
1
1
  import { ReactElement } from 'react';
2
2
  import { PreviewDevice } from '../../components/PreviewDeviceContext.js';
3
- import { D as DeviceFieldTier, a as DeviceTier } from '../../../rowMarks-CO5TpfLY.js';
4
- export { b as DEVICE_FIELD_MARKER, c as DeviceFieldMeta, d as deviceMetaOf } from '../../../rowMarks-CO5TpfLY.js';
3
+ import { D as DeviceFieldTier, a as DeviceTier } from '../../../rowMarks-D2cO7UTi.js';
4
+ export { b as DEVICE_FIELD_MARKER, c as DeviceFieldMeta, d as deviceMetaOf } from '../../../rowMarks-D2cO7UTi.js';
5
5
  import '../content/view-tiers.js';
6
6
 
7
7
  /**
@@ -31,11 +31,9 @@ import '../content/view-tiers.js';
31
31
  * desktop size is exactly where it was, because nothing ever wrote to it.
32
32
  * `scripts/test-device-fields.tsx` pins that round trip.
33
33
  *
34
- * TABLET (owner ruling, card 66066). There are no tablet-specific stored values
35
- * today, and inventing them would mean a new stored prop on every section — a
36
- * different card. So tablet shows the DESKTOP values and the panel SAYS SO
37
- * ({@link DEVICE_NOTE}); it never presents desktop values as if they were
38
- * tablet's. {@link shownTier} is the single place that ruling is written down.
34
+ * THREE VIEWS (Lewis 2026-10-09, 2026-10-23, 2026-11-02). Each view owns its
35
+ * values: a tablet row is gated as a phone row is, and a row with no value of
36
+ * the view's own is not drawn there.
39
37
  *
40
38
  * WHY THE HIDDEN FIELD LEAVES NO GAP. The old library wraps every top-level field in its
41
39
  * own padded old library's padded field box before it calls `render`, so a field that
@@ -46,20 +44,15 @@ import '../content/view-tiers.js';
46
44
  * instead of a second DOM pass (so it cannot race the fold's).
47
45
  */
48
46
 
49
- /**
50
- * Which tier's stored values the panel shows for a given preview device.
51
- *
52
- * The owner ruling in one expression: phone shows the phone values, everything
53
- * else — desktop AND tablet — shows the desktop values.
54
- */
47
+ /** Which tier's stored values the panel shows for a given preview device: its own. */
55
48
  declare function shownTier(device: PreviewDevice): DeviceTier;
56
49
  /**
57
50
  * The quiet line the panel puts above a section's settings, so a merchant can
58
51
  * always tell WHICH device's value they are editing without reading the canvas.
59
52
  *
60
53
  * Desktop says nothing: it is the resting state, and a banner that is always
61
- * there is a banner nobody reads. Tablet says the ruling out loud rather than
62
- * letting the desktop values pass for tablet's own.
54
+ * there is a banner nobody reads. Tablet says nothing either: its rows are its
55
+ * own, and the name and the Reset say which hold a value.
63
56
  */
64
57
  declare const DEVICE_NOTE: Readonly<Record<PreviewDevice, string | null>>;
65
58
  /** The attribute the stylesheet looks for to collapse a gated-off field's the old library
@@ -82,8 +75,8 @@ type AnyCustomField = {
82
75
  declare function withoutDeviceGate(field: unknown): unknown;
83
76
  /**
84
77
  * Paint `field` only while the canvas is showing `tier` — or, with `"each"`, in
85
- * every view, handing the control the tier it writes there (`tier` prop:
86
- * `"mobile"` in the phone view, `"desktop"` otherwise). See `DeviceFieldTier`.
78
+ * every view, handing the control the tier it writes there (`tier` prop: the
79
+ * view's own). See `DeviceFieldTier`.
87
80
  *
88
81
  * Everything else about the field is preserved by identity-spread — its `type`,
89
82
  * its manifest markers, its data keys — so the media and neutralization walks,
@@ -1 +1 @@
1
- export{DEVICE_HIDDEN_ATTR,DEVICE_NOTE,deviceField,deviceNote,shownTier,withoutDeviceGate}from"../../../chunk-BLE3U2GS.js";import"../../../chunk-22I55W37.js";import"../../../chunk-C4TJN6GR.js";export{DEVICE_FIELD_MARKER,deviceMetaOf}from"../../../chunk-YCSZAP7T.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-BSPCSC45.js";
1
+ export{DEVICE_HIDDEN_ATTR,DEVICE_NOTE,deviceField,deviceNote,shownTier,withoutDeviceGate}from"../../../chunk-ZNLODQD4.js";import"../../../chunk-22I55W37.js";import"../../../chunk-G2VZ4DET.js";export{DEVICE_FIELD_MARKER,deviceMetaOf}from"../../../chunk-YCSZAP7T.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-BSPCSC45.js";
@@ -1,5 +1,5 @@
1
- import{SettingsDefaultReset as e}from"../../../chunk-2T22IY3J.js";import{ScreenDocumentContext as n}from"../../../chunk-CPIWSFGR.js";import"../../../chunk-QZJKWKGH.js";import"../../../chunk-ERR437B5.js";import{requestMediaPick as o}from"../../../chunk-JIP5JNRB.js";import"../../../chunk-GR3XRILS.js";import"../../../chunk-RLBXE4EU.js";import"../../../chunk-6ATIYLUL.js";import"../../../chunk-KO47WAWR.js";import"../../../chunk-NQW6XCAY.js";import"../../../chunk-LOMEH6DG.js";import"../../../chunk-KCOBHPN6.js";import"../../../chunk-NCXYC7WI.js";import"../../../chunk-YM4UEGBV.js";import"../../../chunk-SNF5764Q.js";import{useEaselHost as t}from"../../../chunk-LX23TCTP.js";import{DEFAULT_IMAGE_ROW_WORDS as r}from"../../../chunk-C4TJN6GR.js";import{phoneKey as i}from"../../../chunk-E52W3M5I.js";import{MEDIA_FIELD_MARKER as c}from"../../../chunk-ANPOR6EY.js";import{useSelectedHost as s}from"../../../chunk-NUJEHA6A.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import{DEFAULT_PANEL_WORDS as a}from"../../../chunk-56ID6FKZ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-NDRZP6YR.js";import"../../../chunk-H6DDIBQ4.js";import"../../../chunk-YYD257TD.js";import"../../../chunk-RE4LP46F.js";import"../../../chunk-3BQT7FC7.js";import"../../../chunk-PMRN5Z3T.js";import{SettingsField as m}from"../../../chunk-MIX7EGRG.js";import{useWords as l}from"../../../chunk-MFIRYGHW.js";import"../../../chunk-TOKMFZPB.js";import"../../../chunk-FR7EEKFF.js";import"../../../chunk-7UFKEX72.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import{usePreviewDevice as u}from"../../../chunk-BSPCSC45.js";import{useContext as p,useState as h}from"react";import{FOCAL_DEFAULT as f}from"efficient-shell/format";import{MediaUploadField as k,Button as d,Input as j}from"efficient-shell/ui";import{jsx as g,jsxs as v}from"react/jsx-runtime";function C(e){return"string"==typeof e?e:e&&"object"==typeof e&&"string"==typeof e.src?e.src:""}function y({src:e,onChange:n,tidy:o,name:t}){const[r,i]=h(null),c=!r||e!==r.text&&e!==r.from?e:r.text;/* @__PURE__ */
2
- return g(j,{size:"md",type:"url",inputMode:"url",autoComplete:"off",spellCheck:!1,value:c,placeholder:"https://…","aria-label":t,onChange:o=>{const t=o.target.value;i(n=>({text:t,from:!n||e!==n.text&&e!==n.from?e:n.from})),n(t)},onBlur:e=>{const t=e.target.value,r=o?o(t):t;r!==t&&n(r),i(null)},onKeyDown:e=>{"Enter"===e.key&&e.currentTarget.blur()}})}function R({label:c,icon:j,hint:R,value:E,onChange:P,name:b,readOnly:B,canPick:F=!0,kind:K="image",accept:M,acceptHint:N,pickOptions:L,maxSizeBytes:T,height:Y,placeholder:D,removeLabel:I,paste:Q,focusKey:G,focusWhen:O,frameKey:S,note:W}){const w=l("imageRow",r),H=l("panel",a),x=t(),A=s(),J=p(n),X="video"===K,U=function(e,n){const o=s(),t="mobile"===u();if(!e||!o)return null;const r=o.values??{};if(n&&!n(r))return null;const c="string"==typeof r[e]&&r[e]?String(r[e]):f,a=i(e),m="string"==typeof r[a]&&r[a]?String(r[a]):void 0;return{phone:t,desktop:c,own:m,focus:t?m??c:c,set:n=>o.onChange(t?a:e,n),clear:()=>o.onChange(a,void 0)}}(X?void 0:G,O),[Z,z]=h(!1),V=!0===B||!0===A?.readOnly,q=F&&!V;if(J&&!J.capabilities.mediaEditing)/* @__PURE__ */
3
- return g(m,{label:c,icon:j,hint:R,children:/* @__PURE__ */g("div",{className:"es-image-row-note",children:X?w.templateVideo:w.template})});const $=S&&b?{video:b,frame:S}:null,_=$?e=>e?P(e):A?.onChangeMany({[$.video]:"",[$.frame]:""}):P,ee=$?e=>A?.onChangeMany({[$.video]:e,[$.frame]:""}):P,ne=C(E),oe=U?.phone&&ne?/* @__PURE__ */g(e,{words:H,label:w.focus,changed:Boolean(U.own),detail:w.onDesktop(U.desktop),onReset:U.clear,disabled:V}):void 0,te=Q&&!V&&(Q.open||Z);/* @__PURE__ */
4
- return g(m,{label:c,icon:j,hint:R,action:oe,children:/* @__PURE__ */v("div",{className:"es-image-row",children:[
5
- /* @__PURE__ */g(k,{value:ne,onChange:_,onPick:e=>{if(q)return $&&!A?Promise.resolve(null):o(x,{accept:M??(X?"video/*":"image/*"),title:c,...e?{file:e}:{},...L?{options:L}:{}}).then(e=>e&&$?(A?.onChangeMany({[$.video]:e.url,[$.frame]:e.posterUrl??""}),null):e?.url??null)},accept:M??(X?"video/*":"image/*"),acceptHint:N,kind:K,maxSizeBytes:T,height:Y,placeholder:D,removeLabel:I,allowReplace:q,allowRemove:!V,disabled:V||!q&&!ne,focusLabel:w.focus,...U&&!V?{focus:U.focus,onFocusChange:U.set}:U?{focus:U.focus}:{}}),W?.(ne),Q&&!V?te?/* @__PURE__ */g(y,{src:ne,onChange:ee,tidy:Q.tidy,name:w.pasteName}):/* @__PURE__ */g(d,{variant:"link",size:"sm",onClick:()=>z(!0),children:w.pasteLink}):null]})})}function E(e,n,o={}){return{type:"custom",[c]:!0,render:t=>/* @__PURE__ */g(R,{...o,label:e,icon:n,value:t.value,onChange:e=>t.onChange(e),name:t.name,readOnly:t.readOnly})}}export{R as ImageRow,E as imageField,C as imageValueSrc};
1
+ import{SettingsDefaultReset as e}from"../../../chunk-2T22IY3J.js";import{ScreenDocumentContext as n}from"../../../chunk-L2WK5JYB.js";import"../../../chunk-QZJKWKGH.js";import"../../../chunk-ERR437B5.js";import{requestMediaPick as o}from"../../../chunk-JIP5JNRB.js";import"../../../chunk-GR3XRILS.js";import"../../../chunk-RLBXE4EU.js";import"../../../chunk-6ATIYLUL.js";import"../../../chunk-KO47WAWR.js";import"../../../chunk-NQW6XCAY.js";import"../../../chunk-LOMEH6DG.js";import"../../../chunk-KCOBHPN6.js";import"../../../chunk-NCXYC7WI.js";import"../../../chunk-YM4UEGBV.js";import"../../../chunk-SNF5764Q.js";import{useEaselHost as t}from"../../../chunk-LX23TCTP.js";import{DEFAULT_IMAGE_ROW_WORDS as r}from"../../../chunk-G2VZ4DET.js";import{MEDIA_FIELD_MARKER as i}from"../../../chunk-ANPOR6EY.js";import{useSelectedHost as c}from"../../../chunk-3W2O22DZ.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import{DEFAULT_PANEL_WORDS as s}from"../../../chunk-56ID6FKZ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-NDRZP6YR.js";import"../../../chunk-H6DDIBQ4.js";import"../../../chunk-YYD257TD.js";import"../../../chunk-RE4LP46F.js";import{phoneKey as a}from"../../../chunk-DIOTWSCO.js";import"../../../chunk-MNQDOSAX.js";import"../../../chunk-PMRN5Z3T.js";import{SettingsField as m}from"../../../chunk-MIX7EGRG.js";import{useWords as l}from"../../../chunk-MFIRYGHW.js";import"../../../chunk-TOKMFZPB.js";import"../../../chunk-FR7EEKFF.js";import"../../../chunk-7UFKEX72.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import{usePreviewDevice as u}from"../../../chunk-BSPCSC45.js";import{useContext as p,useState as h}from"react";import{FOCAL_DEFAULT as f}from"efficient-shell/format";import{MediaUploadField as k,Button as d,Input as j}from"efficient-shell/ui";import{jsx as g,jsxs as v}from"react/jsx-runtime";function C(e){return"string"==typeof e?e:e&&"object"==typeof e&&"string"==typeof e.src?e.src:""}function y({src:e,onChange:n,tidy:o,name:t}){const[r,i]=h(null),c=!r||e!==r.text&&e!==r.from?e:r.text;/* @__PURE__ */
2
+ return g(j,{size:"md",type:"url",inputMode:"url",autoComplete:"off",spellCheck:!1,value:c,placeholder:"https://…","aria-label":t,onChange:o=>{const t=o.target.value;i(n=>({text:t,from:!n||e!==n.text&&e!==n.from?e:n.from})),n(t)},onBlur:e=>{const t=e.target.value,r=o?o(t):t;r!==t&&n(r),i(null)},onKeyDown:e=>{"Enter"===e.key&&e.currentTarget.blur()}})}function R({label:i,icon:j,hint:R,value:E,onChange:K,name:b,readOnly:B,canPick:D=!0,kind:P="image",accept:O,acceptHint:F,pickOptions:L,maxSizeBytes:M,height:Y,placeholder:N,removeLabel:T,paste:Q,focusKey:S,focusWhen:W,frameKey:I,note:w}){const G=l("imageRow",r),X=l("panel",s),x=t(),H=c(),Z=p(n),A="video"===P,J=function(e,n){const o=c(),t="mobile"===u();if(!e||!o)return null;const r=o.values??{};if(n&&!n(r))return null;const i="string"==typeof r[e]&&r[e]?String(r[e]):f,s=a(e),m="string"==typeof r[s]&&r[s]?String(r[s]):void 0;return{phone:t,desktop:i,own:m,focus:t?m??i:i,set:n=>o.onChange(t?s:e,n),clear:()=>o.onChange(s,void 0)}}(A?void 0:S,W),[U,z]=h(!1),V=!0===B||!0===H?.readOnly,q=D&&!V;if(Z&&!Z.capabilities.mediaEditing)/* @__PURE__ */
3
+ return g(m,{label:i,icon:j,hint:R,children:/* @__PURE__ */g("div",{className:"es-image-row-note",children:A?G.templateVideo:G.template})});const $=I&&b?{video:b,frame:I}:null,_=$?e=>e?K(e):H?.onChangeMany({[$.video]:"",[$.frame]:""}):K,ee=$?e=>H?.onChangeMany({[$.video]:e,[$.frame]:""}):K,ne=C(E),oe=J?.phone&&ne?/* @__PURE__ */g(e,{words:X,label:G.focus,changed:Boolean(J.own),detail:G.onDesktop(J.desktop),onReset:J.clear,disabled:V}):void 0,te=Q&&!V&&(Q.open||U);/* @__PURE__ */
4
+ return g(m,{label:i,icon:j,hint:R,action:oe,children:/* @__PURE__ */v("div",{className:"es-image-row",children:[
5
+ /* @__PURE__ */g(k,{value:ne,onChange:_,onPick:e=>{if(q)return $&&!H?Promise.resolve(null):o(x,{accept:O??(A?"video/*":"image/*"),title:i,...e?{file:e}:{},...L?{options:L}:{}}).then(e=>e&&$?(H?.onChangeMany({[$.video]:e.url,[$.frame]:e.posterUrl??""}),null):e?.url??null)},accept:O??(A?"video/*":"image/*"),acceptHint:F,kind:P,maxSizeBytes:M,height:Y,placeholder:N,removeLabel:T,allowReplace:q,allowRemove:!V,disabled:V||!q&&!ne,focusLabel:G.focus,...J&&!V?{focus:J.focus,onFocusChange:J.set}:J?{focus:J.focus}:{}}),w?.(ne),Q&&!V?te?/* @__PURE__ */g(y,{src:ne,onChange:ee,tidy:Q.tidy,name:G.pasteName}):/* @__PURE__ */g(d,{variant:"link",size:"sm",onClick:()=>z(!0),children:G.pasteLink}):null]})})}function E(e,n,o={}){return{type:"custom",[i]:!0,render:t=>/* @__PURE__ */g(R,{...o,label:e,icon:n,value:t.value,onChange:e=>t.onChange(e),name:t.name,readOnly:t.readOnly})}}export{R as ImageRow,E as imageField,C as imageValueSrc};
@@ -1,6 +1,6 @@
1
1
  import { ReactElement } from 'react';
2
- import { N as NoControlFieldMeta } from '../../../rowMarks-CO5TpfLY.js';
3
- export { e as NO_CONTROL_FIELD, n as noControlMetaOf } from '../../../rowMarks-CO5TpfLY.js';
2
+ import { N as NoControlFieldMeta } from '../../../rowMarks-D2cO7UTi.js';
3
+ export { e as NO_CONTROL_FIELD, n as noControlMetaOf } from '../../../rowMarks-D2cO7UTi.js';
4
4
 
5
5
  /**
6
6
  * panel-no-control-mark — what a settings field draws when it draws NO CONTROL
@@ -1,2 +1,2 @@
1
- import{DEFAULT_SHADOW_COLOR as o,DEFAULT_SHADOW as n,shadowValue as r,SHADOWS as i}from"../../../chunk-CRITA6CA.js";export{DEFAULT_SHADOW,DEFAULT_SHADOW_COLOR,SHADOWS,shadowValue}from"../../../chunk-CRITA6CA.js";import{styleFieldBuilders as t}from"../../../chunk-M4SOZEZR.js";import"../../../chunk-K6TDOXHR.js";import"../../../chunk-CLAADE4J.js";import{SettingsDefaultReset as s}from"../../../chunk-2T22IY3J.js";import"../../../chunk-BLE3U2GS.js";import"../../../chunk-22I55W37.js";import"../../../chunk-LX23TCTP.js";import"../../../chunk-C4TJN6GR.js";import"../../../chunk-CWELHADJ.js";import"../../../chunk-6WY6ZXJG.js";import"../../../chunk-PLTTPHK5.js";import"../../../chunk-E52W3M5I.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-NUJEHA6A.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-D4TH4QQR.js";import{DEFAULT_PANEL_WORDS as e}from"../../../chunk-56ID6FKZ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-OECWLNKJ.js";import"../../../chunk-3BQT7FC7.js";import"../../../chunk-PMRN5Z3T.js";import"../../../chunk-KFWNGPW3.js";import{SettingsField as p}from"../../../chunk-MIX7EGRG.js";import"../../../chunk-DX3VILZ3.js";import"../../../chunk-JACEEVVF.js";import{useWords as c}from"../../../chunk-MFIRYGHW.js";import"../../../chunk-TOKMFZPB.js";import"../../../chunk-FR7EEKFF.js";import"../../../chunk-7UFKEX72.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import"../../../chunk-BSPCSC45.js";import{ShadowIcon as h}from"efficient-shell/icons/efficient";import{IconPicker as u}from"efficient-shell/ui";import{jsx as l}from"react/jsx-runtime";var m={none:"None",soft:"Soft",lifted:"Lifted"},a={none:"none",soft:"0 1px 1px rgba(20, 20, 22, 0.10), 0 2px 4px -1px rgba(20, 20, 22, 0.14)",lifted:"0 1px 2px rgba(20, 20, 22, 0.10), 0 4px 7px -2px rgba(20, 20, 22, 0.30)"},k={display:"block",flex:"none",boxSizing:"border-box",width:16,height:11};function j({o:o,say:t,props:j}){const d=c("panel",e),f=o.builtIn??n,b=r(j.value),C=b??f,F=t(o.label);/* @__PURE__ */
2
- return l(p,{label:F,icon:o.icon??/* @__PURE__ */l(h,{}),value:t(m[C]),changed:null!==b,hint:o.hint,action:/* @__PURE__ */l(s,{words:d,label:F,changed:null!==b,detail:t(m[f]),onReset:()=>j.onChange(void 0),disabled:j.readOnly}),children:/* @__PURE__ */l(u,{label:F,value:C,options:i.map(o=>({value:o,label:t(m[o]),icon:/* @__PURE__ */l("span",{"data-shadow-chip":"",className:"border border-line bg-surface",style:{...k,boxShadow:a[o]}})})),onChange:o=>j.onChange(o),disabled:j.readOnly})})}function d(n=o=>o){const{colourField:r}=t(n);return{shadowField:o=>({type:"custom",render:r=>/* @__PURE__ */l(j,{o:o,say:n,props:r})}),shadowColourField:n=>{const i=n.follows??o;return r({key:n.key??"shadowColor",label:n.label,icon:/* @__PURE__ */l(h,{}),hint:n.hint,useFollows:()=>i})}}}var{shadowField:f,shadowColourField:b}=d();export{b as shadowColourField,f as shadowField,d as shadowFieldBuilders};
1
+ import{DEFAULT_SHADOW_COLOR as o,DEFAULT_SHADOW as n,shadowValue as r,SHADOWS as i}from"../../../chunk-CRITA6CA.js";export{DEFAULT_SHADOW,DEFAULT_SHADOW_COLOR,SHADOWS,shadowValue}from"../../../chunk-CRITA6CA.js";import{styleFieldBuilders as t}from"../../../chunk-ZFEAWEFS.js";import"../../../chunk-76MUJIZE.js";import"../../../chunk-XWTQTANN.js";import{SettingsDefaultReset as s}from"../../../chunk-2T22IY3J.js";import"../../../chunk-ZNLODQD4.js";import"../../../chunk-22I55W37.js";import"../../../chunk-LX23TCTP.js";import"../../../chunk-G2VZ4DET.js";import"../../../chunk-CWELHADJ.js";import"../../../chunk-6WY6ZXJG.js";import"../../../chunk-PLTTPHK5.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-3W2O22DZ.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-D4TH4QQR.js";import{DEFAULT_PANEL_WORDS as e}from"../../../chunk-56ID6FKZ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-OECWLNKJ.js";import"../../../chunk-DIOTWSCO.js";import"../../../chunk-MNQDOSAX.js";import"../../../chunk-PMRN5Z3T.js";import"../../../chunk-KFWNGPW3.js";import"../../../chunk-DX3VILZ3.js";import{SettingsField as p}from"../../../chunk-MIX7EGRG.js";import"../../../chunk-JACEEVVF.js";import{useWords as c}from"../../../chunk-MFIRYGHW.js";import"../../../chunk-TOKMFZPB.js";import"../../../chunk-FR7EEKFF.js";import"../../../chunk-7UFKEX72.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import"../../../chunk-BSPCSC45.js";import{ShadowIcon as h}from"efficient-shell/icons/efficient";import{IconPicker as u}from"efficient-shell/ui";import{jsx as l}from"react/jsx-runtime";var m={none:"None",soft:"Soft",lifted:"Lifted"},a={none:"none",soft:"0 1px 1px rgba(20, 20, 22, 0.10), 0 2px 4px -1px rgba(20, 20, 22, 0.14)",lifted:"0 1px 2px rgba(20, 20, 22, 0.10), 0 4px 7px -2px rgba(20, 20, 22, 0.30)"},k={display:"block",flex:"none",boxSizing:"border-box",width:16,height:11};function j({o:o,say:t,props:j}){const d=c("panel",e),f=o.builtIn??n,b=r(j.value),F=b??f,C=t(o.label);/* @__PURE__ */
2
+ return l(p,{label:C,icon:o.icon??/* @__PURE__ */l(h,{}),value:t(m[F]),changed:null!==b,hint:o.hint,action:/* @__PURE__ */l(s,{words:d,label:C,changed:null!==b,detail:t(m[f]),onReset:()=>j.onChange(void 0),disabled:j.readOnly}),children:/* @__PURE__ */l(u,{label:C,value:F,options:i.map(o=>({value:o,label:t(m[o]),icon:/* @__PURE__ */l("span",{"data-shadow-chip":"",className:"border border-line bg-surface",style:{...k,boxShadow:a[o]}})})),onChange:o=>j.onChange(o),disabled:j.readOnly})})}function d(n=o=>o){const{colourField:r}=t(n);return{shadowField:o=>({type:"custom",render:r=>/* @__PURE__ */l(j,{o:o,say:n,props:r})}),shadowColourField:n=>{const i=n.follows??o;return r({key:n.key??"shadowColor",label:n.label,icon:/* @__PURE__ */l(h,{}),hint:n.hint,useFollows:()=>i})}}}var{shadowField:f,shadowColourField:b}=d();export{b as shadowColourField,f as shadowField,d as shadowFieldBuilders};
@@ -1 +1 @@
1
- export{copyNodeStyle,nodeStyleRows,planNodePaste,shopFieldKind,siteStyleScope,styleClipboardOf}from"../../../chunk-U4TG43PD.js";import"../../../chunk-5XL2RXFU.js";import"../../../chunk-3QB2ZQXK.js";import"../../../chunk-BLE3U2GS.js";import"../../../chunk-22I55W37.js";import"../../../chunk-C4TJN6GR.js";import"../../../chunk-CWELHADJ.js";import"../../../chunk-6WY6ZXJG.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-BPXEFVSQ.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import"../../../chunk-BSPCSC45.js";
1
+ export{copyNodeStyle,nodeStyleRows,planNodePaste,shopFieldKind,siteStyleScope,styleClipboardOf}from"../../../chunk-FW35PCK7.js";import"../../../chunk-5XL2RXFU.js";import"../../../chunk-3QB2ZQXK.js";import"../../../chunk-ZNLODQD4.js";import"../../../chunk-22I55W37.js";import"../../../chunk-G2VZ4DET.js";import"../../../chunk-CWELHADJ.js";import"../../../chunk-6WY6ZXJG.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-BPXEFVSQ.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import"../../../chunk-BSPCSC45.js";
@@ -1 +1 @@
1
- export{BORDER_WIDTH_MAX,CORNER_RADIUS_MAX,borderField,colourField,cornersField,keptByRow,styleFieldBuilders}from"../../../chunk-M4SOZEZR.js";import"../../../chunk-K6TDOXHR.js";import"../../../chunk-CLAADE4J.js";import"../../../chunk-2T22IY3J.js";import"../../../chunk-BLE3U2GS.js";import"../../../chunk-22I55W37.js";import"../../../chunk-LX23TCTP.js";import"../../../chunk-C4TJN6GR.js";import"../../../chunk-CWELHADJ.js";import"../../../chunk-6WY6ZXJG.js";export{CORNER_SIDES}from"../../../chunk-PLTTPHK5.js";import"../../../chunk-E52W3M5I.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-NUJEHA6A.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-D4TH4QQR.js";import"../../../chunk-56ID6FKZ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-OECWLNKJ.js";import"../../../chunk-3BQT7FC7.js";import"../../../chunk-PMRN5Z3T.js";import"../../../chunk-KFWNGPW3.js";import"../../../chunk-MIX7EGRG.js";import"../../../chunk-DX3VILZ3.js";import"../../../chunk-JACEEVVF.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-TOKMFZPB.js";import"../../../chunk-FR7EEKFF.js";import"../../../chunk-7UFKEX72.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import"../../../chunk-BSPCSC45.js";
1
+ export{BORDER_WIDTH_MAX,CORNER_RADIUS_MAX,borderField,colourField,cornersField,keptByRow,styleFieldBuilders}from"../../../chunk-ZFEAWEFS.js";import"../../../chunk-76MUJIZE.js";import"../../../chunk-XWTQTANN.js";import"../../../chunk-2T22IY3J.js";import"../../../chunk-ZNLODQD4.js";import"../../../chunk-22I55W37.js";import"../../../chunk-LX23TCTP.js";import"../../../chunk-G2VZ4DET.js";import"../../../chunk-CWELHADJ.js";import"../../../chunk-6WY6ZXJG.js";export{CORNER_SIDES}from"../../../chunk-PLTTPHK5.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-3W2O22DZ.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-D4TH4QQR.js";import"../../../chunk-56ID6FKZ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-OECWLNKJ.js";import"../../../chunk-DIOTWSCO.js";import"../../../chunk-MNQDOSAX.js";import"../../../chunk-PMRN5Z3T.js";import"../../../chunk-KFWNGPW3.js";import"../../../chunk-DX3VILZ3.js";import"../../../chunk-MIX7EGRG.js";import"../../../chunk-JACEEVVF.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-TOKMFZPB.js";import"../../../chunk-FR7EEKFF.js";import"../../../chunk-7UFKEX72.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import"../../../chunk-BSPCSC45.js";
@@ -1 +1 @@
1
- export{useSectionOps}from"../../../chunk-3ZGOVNVH.js";import"../../../chunk-L4DFCNDQ.js";import"../../../chunk-NCXYC7WI.js";import"../../../chunk-LX23TCTP.js";import"../../../chunk-TCAAOYQY.js";import"../../../chunk-NUJEHA6A.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-WMC6FE3G.js";import"../../../chunk-BPXEFVSQ.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-ZEH6QLBH.js";import"../../../chunk-WHS6Y55E.js";import"../../../chunk-D4TH4QQR.js";import"../../../chunk-K56YDHYQ.js";import"../../../chunk-56ID6FKZ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-FIVU2COQ.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-3BQT7FC7.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";
1
+ export{useSectionOps}from"../../../chunk-TYTMUHUK.js";import"../../../chunk-2262JGFV.js";import"../../../chunk-NCXYC7WI.js";import"../../../chunk-LX23TCTP.js";import"../../../chunk-TCAAOYQY.js";import"../../../chunk-3W2O22DZ.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-HG65R6IN.js";import"../../../chunk-BPXEFVSQ.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-TDEBPOWV.js";import"../../../chunk-WHS6Y55E.js";import"../../../chunk-D4TH4QQR.js";import"../../../chunk-K56YDHYQ.js";import"../../../chunk-56ID6FKZ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-FIVU2COQ.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-MNQDOSAX.js";import"../../../chunk-PMRN5Z3T.js";import"../../../chunk-Y2T3JX7K.js";import"../../../chunk-KFWNGPW3.js";import"../../../chunk-DX3VILZ3.js";import"../../../chunk-MIX7EGRG.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";
@@ -1 +1 @@
1
- export{editorRootFocus,isSaveShortcut,useEaselKeyTarget,useEaselSaveKey,useEaselUndoKeys}from"../../chunk-PG7G7ELT.js";import"../../chunk-LX23TCTP.js";import"../../chunk-NUJEHA6A.js";import"../../chunk-JQQFB7EZ.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-K53PQAMP.js";import"../../chunk-QTHQPJWA.js";import"../../chunk-3BQT7FC7.js";import"../../chunk-PMRN5Z3T.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-TOKMFZPB.js";import"../../chunk-FR7EEKFF.js";import"../../chunk-7UFKEX72.js";import"../../chunk-EUFDQ4KL.js";import"../../chunk-KXM6YRG2.js";
1
+ export{editorRootFocus,isSaveShortcut,useEaselKeyTarget,useEaselSaveKey,useEaselUndoKeys}from"../../chunk-BFJAEQZ6.js";import"../../chunk-LX23TCTP.js";import"../../chunk-3W2O22DZ.js";import"../../chunk-JQQFB7EZ.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-K53PQAMP.js";import"../../chunk-QTHQPJWA.js";import"../../chunk-MNQDOSAX.js";import"../../chunk-PMRN5Z3T.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-TOKMFZPB.js";import"../../chunk-FR7EEKFF.js";import"../../chunk-7UFKEX72.js";import"../../chunk-EUFDQ4KL.js";import"../../chunk-KXM6YRG2.js";
@@ -971,16 +971,6 @@ interface ScreenBlockLook {
971
971
  * Absent: the screen's two, as it drew them.
972
972
  */
973
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;
984
974
  }
985
975
  /**
986
976
  * THE DEVICES the canvas can be looked at on. That the top bar has a switch,
@@ -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-L4DFCNDQ.js";import"../../chunk-NCXYC7WI.js";import"../../chunk-LX23TCTP.js";import"../../chunk-TCAAOYQY.js";import"../../chunk-NUJEHA6A.js";import"../../chunk-JQQFB7EZ.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-WMC6FE3G.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-YCSZAP7T.js";import"../../chunk-ZEH6QLBH.js";import"../../chunk-WHS6Y55E.js";import"../../chunk-D4TH4QQR.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-56ID6FKZ.js";import"../../chunk-K53PQAMP.js";import"../../chunk-FIVU2COQ.js";import"../../chunk-QTHQPJWA.js";import"../../chunk-3BQT7FC7.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";
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-2262JGFV.js";import"../../chunk-NCXYC7WI.js";import"../../chunk-LX23TCTP.js";import"../../chunk-TCAAOYQY.js";import"../../chunk-3W2O22DZ.js";import"../../chunk-JQQFB7EZ.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-HG65R6IN.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-YCSZAP7T.js";import"../../chunk-TDEBPOWV.js";import"../../chunk-WHS6Y55E.js";import"../../chunk-D4TH4QQR.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-56ID6FKZ.js";import"../../chunk-K53PQAMP.js";import"../../chunk-FIVU2COQ.js";import"../../chunk-QTHQPJWA.js";import"../../chunk-MNQDOSAX.js";import"../../chunk-PMRN5Z3T.js";import"../../chunk-Y2T3JX7K.js";import"../../chunk-KFWNGPW3.js";import"../../chunk-DX3VILZ3.js";import"../../chunk-MIX7EGRG.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";
@@ -831,12 +831,6 @@
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
- }
840
834
  /* A SHARED node's tab (Shared section design v4, Lewis 2026-10-21): the
841
835
  shell's `shared` mark before the name, inside the badge's line. */
842
836
  .es-band-tab-mark {
@@ -389,10 +389,8 @@ type ScreenWords = {
389
389
  headerSettings: string;
390
390
  /** The section screen's menu of blocks to add (`AddBlockRow`). */
391
391
  addBlockMenu: string;
392
- /** The quiet line over a section's settings on a device that is not the
393
- * desktop: the tablet's, then the phone's. */
392
+ /** The quiet line over a section's settings in the phone view. */
394
393
  deviceNote: {
395
- tablet: string;
396
394
  mobile: string;
397
395
  };
398
396
  };
@@ -1 +1 @@
1
- export{DEFAULT_IMAGE_ROW_WORDS,DEFAULT_SCREEN_ADD_WORDS,DEFAULT_SCREEN_SAVE_STATUS_WORDS,DEFAULT_SCREEN_SHARED_WORDS,DEFAULT_SCREEN_WORDS}from"../chunk-C4TJN6GR.js";
1
+ export{DEFAULT_IMAGE_ROW_WORDS,DEFAULT_SCREEN_ADD_WORDS,DEFAULT_SCREEN_SAVE_STATUS_WORDS,DEFAULT_SCREEN_SHARED_WORDS,DEFAULT_SCREEN_WORDS}from"../chunk-G2VZ4DET.js";
@@ -1,2 +1,2 @@
1
- import{DEFAULT_TEXT_STYLES_WORDS as o}from"../chunk-OGH6CC3E.js";import{DEFAULT_SCREEN_WORDS as r,DEFAULT_IMAGE_ROW_WORDS as n}from"../chunk-C4TJN6GR.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 e}from"../chunk-K56YDHYQ.js";import{DEFAULT_COLOUR_ROW_WORDS as m,DEFAULT_PANEL_WORDS as i}from"../chunk-56ID6FKZ.js";import{DEFAULT_NODE_MENU_WORDS as s}from"../chunk-WK3AFPXY.js";import{DEFAULT_PAGE_COPY_WORDS as u}from"../chunk-CEC5XLN4.js";import{DEFAULT_SAVE_WORDS as f}from"../chunk-H6DDIBQ4.js";import{DEFAULT_CHROME_WORDS as p,DEFAULT_NOTICE_WORDS as l}from"../chunk-AJSDWWJW.js";import{DEFAULT_RAIL_WORDS as h}from"../chunk-2OAZYSWJ.js";import{DEFAULT_LOCK_WORDS as j}from"../chunk-RE4LP46F.js";import{DEFAULT_COPY_WORDS as a}from"../chunk-PMRN5Z3T.js";import{DEFAULT_FIELDS_WORDS as k}from"../chunk-JACEEVVF.js";import{stringsContext as y}from"../chunk-MFIRYGHW.js";import{DEFAULT_DRAG_WORDS as C}from"../chunk-TQ5Y6S2X.js";import{useContext as Y,useMemo as W}from"react";import{jsx as d}from"react/jsx-runtime";var g={notice:l,lock:j,save:f,chrome:p,rail:h,tree:e,panel:i,fields:k,colourRow:m,imageRow:n,drag:C,menu:s,styleClipboard:t,copy:a,canvas:c,textStyles:o,screen:r,pageCopy:u},v=o=>"object"==typeof o&&null!==o;function D(o,r){const n={};for(const t of Object.keys(o)){const c=o[t],e=r[t];null==e?n[t]=c:v(c)?n[t]=v(e)?D(c,e):c:n[t]=typeof e==typeof c?e:c}return n}function F(o,r){return r?D(o,r):o}function J({value:o,locale:r,children:n}){const t=y(),c=Y(t),e=c?.strings??g,m=r??c?.locale??"en",i=W(()=>({strings:F(e,o),locale:m}),[e,o,m]);/* @__PURE__ */
2
- return d(t.Provider,{value:i,children:n})}function R(){return Y(y())?.strings??g}function E(){return Y(y())?.locale??"en"}export{g as DEFAULT_EASEL_STRINGS,J as EaselStringsProvider,F as mergeEaselStrings,E as useEaselLocale,R as useEaselStrings};
1
+ import{DEFAULT_TEXT_STYLES_WORDS as o}from"../chunk-OGH6CC3E.js";import{DEFAULT_SCREEN_WORDS as r,DEFAULT_IMAGE_ROW_WORDS as n}from"../chunk-G2VZ4DET.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 e}from"../chunk-K56YDHYQ.js";import{DEFAULT_COLOUR_ROW_WORDS as m,DEFAULT_PANEL_WORDS as i}from"../chunk-56ID6FKZ.js";import{DEFAULT_NODE_MENU_WORDS as s}from"../chunk-WK3AFPXY.js";import{DEFAULT_PAGE_COPY_WORDS as u}from"../chunk-CEC5XLN4.js";import{DEFAULT_SAVE_WORDS as f}from"../chunk-H6DDIBQ4.js";import{DEFAULT_CHROME_WORDS as p,DEFAULT_NOTICE_WORDS as l}from"../chunk-AJSDWWJW.js";import{DEFAULT_RAIL_WORDS as h}from"../chunk-2OAZYSWJ.js";import{DEFAULT_LOCK_WORDS as j}from"../chunk-RE4LP46F.js";import{DEFAULT_COPY_WORDS as a}from"../chunk-PMRN5Z3T.js";import{DEFAULT_FIELDS_WORDS as k}from"../chunk-JACEEVVF.js";import{stringsContext as y}from"../chunk-MFIRYGHW.js";import{DEFAULT_DRAG_WORDS as Y}from"../chunk-TQ5Y6S2X.js";import{useContext as C,useMemo as D}from"react";import{jsx as W}from"react/jsx-runtime";var d={notice:l,lock:j,save:f,chrome:p,rail:h,tree:e,panel:i,fields:k,colourRow:m,imageRow:n,drag:Y,menu:s,styleClipboard:t,copy:a,canvas:c,textStyles:o,screen:r,pageCopy:u},g=o=>"object"==typeof o&&null!==o;function v(o,r){const n={};for(const t of Object.keys(o)){const c=o[t],e=r[t];null==e?n[t]=c:g(c)?n[t]=g(e)?v(c,e):c:n[t]=typeof e==typeof c?e:c}return n}function E(o,r){return r?v(o,r):o}function F({value:o,locale:r,children:n}){const t=y(),c=C(t),e=c?.strings??d,m=r??c?.locale??"en",i=D(()=>({strings:E(e,o),locale:m}),[e,o,m]);/* @__PURE__ */
2
+ return W(t.Provider,{value:i,children:n})}function J(){return C(y())?.strings??d}function R(){return C(y())?.locale??"en"}export{d as DEFAULT_EASEL_STRINGS,F as EaselStringsProvider,E as mergeEaselStrings,R as useEaselLocale,J as useEaselStrings};
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode } from 'react';
3
3
  import { TextStyle, TextStyleFont, TextStyleColour, TextStyleSetting, TextStyleAuto, TextStyleValues, TextStyleDevice, TextStyleKind } from './model.js';
4
- export { CAMPAIGN_TEXT_STYLE_SETTINGS, TEXT_STYLE_CASES, TEXT_STYLE_CASE_CSS, TEXT_STYLE_DEFAULT_COUNT, TEXT_STYLE_KINDS, TEXT_STYLE_MAX, TEXT_STYLE_RANGES, TEXT_STYLE_SETTINGS, TextStyleCase, TextStyleCaseCss, TextStyleNumber, TextStyleRange, addTextStyle, canAddTextStyle, defaultTextStyles, describeTextStyle, isDefaultTextStyle, isTextStyleCase, removeTextStyle, resolveTextStyle, textStyleCaseCss, textStyleCaseOfCss, textStyleRowSize, updateTextStyle, weightWord } from './model.js';
4
+ export { CAMPAIGN_TEXT_STYLE_SETTINGS, TEXT_STYLE_CASES, TEXT_STYLE_CASE_CSS, TEXT_STYLE_DEFAULT_COUNT, TEXT_STYLE_KINDS, TEXT_STYLE_MAX, TEXT_STYLE_RANGES, TEXT_STYLE_SETTINGS, TEXT_STYLE_VIEW_NUMBERS, TextStyleCase, TextStyleCaseCss, TextStyleNumber, TextStyleRange, TextStyleViewNumber, addTextStyle, canAddTextStyle, defaultTextStyles, describeTextStyle, isDefaultTextStyle, isTextStyleCase, removeTextStyle, resolveTextStyle, textStyleCaseCss, textStyleCaseOfCss, textStyleRowSize, textStyleViewKey, textStyleViewValues, updateTextStyle, weightWord } from './model.js';
5
5
  export { D as DEFAULT_TEXT_STYLES_WORDS, T as TextStylesWords } from '../words-B5Gb7KFq.js';
6
6
 
7
7
  interface TextStylesListProps {
@@ -49,9 +49,10 @@ interface TextStylesListProps {
49
49
  /** At most this many of each kind. */
50
50
  max?: number;
51
51
  /**
52
- * The view the host's editor is in. In `phone`, the Size row edits the
53
- * style's phone size (`sizePhone`): the desktop size shows grey behind it,
54
- * and an emptied box goes back to it. Left out: `desktop`, as before.
52
+ * The view the host's editor is in. In `tablet` and `phone`, only Size, Line
53
+ * spacing, Letter spacing, Paragraph spacing and Largest size are drawn, and
54
+ * each edits that view's value: the next wider view's number shows grey behind
55
+ * it, and an emptied box goes back to it. Left out: `desktop`, as before.
55
56
  */
56
57
  device?: TextStyleDevice;
57
58
  readOnly?: boolean;
@@ -99,7 +100,7 @@ interface TextStyleItemProps {
99
100
  onChange: (next: TextStyle) => void;
100
101
  /** Buttons at the end of the row, outside the button that opens it. */
101
102
  actions?: ReactNode;
102
- /** The editor's view: `phone` draws and edits the phone size. */
103
+ /** The editor's view: `tablet` and `phone` draw and edit that view's values. */
103
104
  device?: TextStyleDevice;
104
105
  readOnly?: boolean;
105
106
  }