@pantheon-systems/puck-css 0.9.0 → 0.10.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 (194) hide show
  1. package/README.md +87 -0
  2. package/dist/auth/P1AuthProvider.d.ts.map +1 -1
  3. package/dist/auth/P1AuthProvider.js +52 -1
  4. package/dist/auth/P1AuthProvider.js.map +1 -1
  5. package/dist/collaboration/components/CollaboratorAvatars.d.ts.map +1 -1
  6. package/dist/collaboration/components/CollaboratorAvatars.js +1 -1
  7. package/dist/collaboration/components/CollaboratorAvatars.js.map +1 -1
  8. package/dist/core/PuckConfigContext.d.ts +7 -0
  9. package/dist/core/PuckConfigContext.d.ts.map +1 -0
  10. package/dist/core/PuckConfigContext.js +11 -0
  11. package/dist/core/PuckConfigContext.js.map +1 -0
  12. package/dist/core/index.d.ts +1 -0
  13. package/dist/core/index.d.ts.map +1 -1
  14. package/dist/core/index.js +1 -0
  15. package/dist/core/index.js.map +1 -1
  16. package/dist/core/types.d.ts +26 -0
  17. package/dist/core/types.d.ts.map +1 -1
  18. package/dist/data/collection-operators.d.ts +19 -0
  19. package/dist/data/collection-operators.d.ts.map +1 -0
  20. package/dist/data/collection-operators.js +97 -0
  21. package/dist/data/collection-operators.js.map +1 -0
  22. package/dist/data/css-queries/css-query-registry.d.ts.map +1 -1
  23. package/dist/data/css-queries/css-query-registry.js +2 -0
  24. package/dist/data/css-queries/css-query-registry.js.map +1 -1
  25. package/dist/data/dal/p1-store.d.ts +2 -0
  26. package/dist/data/dal/p1-store.d.ts.map +1 -1
  27. package/dist/data/data-list-block/DataListFieldsGrouper.d.ts +7 -0
  28. package/dist/data/data-list-block/DataListFieldsGrouper.d.ts.map +1 -0
  29. package/dist/data/data-list-block/DataListFieldsGrouper.js +72 -0
  30. package/dist/data/data-list-block/DataListFieldsGrouper.js.map +1 -0
  31. package/dist/data/data-list-block/builtin-components/cards.d.ts +8 -0
  32. package/dist/data/data-list-block/builtin-components/cards.d.ts.map +1 -0
  33. package/dist/data/data-list-block/builtin-components/cards.js +35 -0
  34. package/dist/data/data-list-block/builtin-components/cards.js.map +1 -0
  35. package/dist/data/data-list-block/builtin-components/listing.d.ts +8 -0
  36. package/dist/data/data-list-block/builtin-components/listing.d.ts.map +1 -0
  37. package/dist/data/data-list-block/builtin-components/listing.js +11 -0
  38. package/dist/data/data-list-block/builtin-components/listing.js.map +1 -0
  39. package/dist/data/data-list-block/builtin-components/rows.d.ts +8 -0
  40. package/dist/data/data-list-block/builtin-components/rows.d.ts.map +1 -0
  41. package/dist/data/data-list-block/builtin-components/rows.js +9 -0
  42. package/dist/data/data-list-block/builtin-components/rows.js.map +1 -0
  43. package/dist/data/data-list-block/builtin-modes.d.ts +3 -0
  44. package/dist/data/data-list-block/builtin-modes.d.ts.map +1 -0
  45. package/dist/data/data-list-block/builtin-modes.js +53 -0
  46. package/dist/data/data-list-block/builtin-modes.js.map +1 -0
  47. package/dist/data/data-list-block/create-data-list-block.d.ts +3 -0
  48. package/dist/data/data-list-block/create-data-list-block.d.ts.map +1 -0
  49. package/dist/data/data-list-block/create-data-list-block.js +305 -0
  50. package/dist/data/data-list-block/create-data-list-block.js.map +1 -0
  51. package/dist/data/data-list-block/field-groups.d.ts +4 -0
  52. package/dist/data/data-list-block/field-groups.d.ts.map +1 -0
  53. package/dist/data/data-list-block/field-groups.js +28 -0
  54. package/dist/data/data-list-block/field-groups.js.map +1 -0
  55. package/dist/data/data-list-block/index.d.ts +8 -0
  56. package/dist/data/data-list-block/index.d.ts.map +1 -0
  57. package/dist/data/data-list-block/index.js +7 -0
  58. package/dist/data/data-list-block/index.js.map +1 -0
  59. package/dist/data/data-list-block/types.d.ts +53 -0
  60. package/dist/data/data-list-block/types.d.ts.map +1 -0
  61. package/dist/data/data-list-block/types.js +2 -0
  62. package/dist/data/data-list-block/types.js.map +1 -0
  63. package/dist/data/data-list-block/utils.d.ts +14 -0
  64. package/dist/data/data-list-block/utils.d.ts.map +1 -0
  65. package/dist/data/data-list-block/utils.js +65 -0
  66. package/dist/data/data-list-block/utils.js.map +1 -0
  67. package/dist/data/fields/datasource-select-field.d.ts +29 -0
  68. package/dist/data/fields/datasource-select-field.d.ts.map +1 -0
  69. package/dist/data/fields/datasource-select-field.js +40 -0
  70. package/dist/data/fields/datasource-select-field.js.map +1 -0
  71. package/dist/data/fields/field-section.d.ts +11 -0
  72. package/dist/data/fields/field-section.d.ts.map +1 -0
  73. package/dist/data/fields/field-section.js +6 -0
  74. package/dist/data/fields/field-section.js.map +1 -0
  75. package/dist/data/fields/image-position-field.d.ts +28 -0
  76. package/dist/data/fields/image-position-field.d.ts.map +1 -0
  77. package/dist/data/fields/image-position-field.js +69 -0
  78. package/dist/data/fields/image-position-field.js.map +1 -0
  79. package/dist/data/fields/pds-field-helpers.d.ts +34 -0
  80. package/dist/data/fields/pds-field-helpers.d.ts.map +1 -0
  81. package/dist/data/fields/pds-field-helpers.js +55 -0
  82. package/dist/data/fields/pds-field-helpers.js.map +1 -0
  83. package/dist/data/fields/schema-select-field.d.ts +32 -0
  84. package/dist/data/fields/schema-select-field.d.ts.map +1 -0
  85. package/dist/data/fields/schema-select-field.js +134 -0
  86. package/dist/data/fields/schema-select-field.js.map +1 -0
  87. package/dist/data/fields/template-select-field.d.ts +16 -0
  88. package/dist/data/fields/template-select-field.d.ts.map +1 -0
  89. package/dist/data/fields/template-select-field.js +31 -0
  90. package/dist/data/fields/template-select-field.js.map +1 -0
  91. package/dist/data/fields/view-mode-field.d.ts +21 -0
  92. package/dist/data/fields/view-mode-field.d.ts.map +1 -0
  93. package/dist/data/fields/view-mode-field.js +14 -0
  94. package/dist/data/fields/view-mode-field.js.map +1 -0
  95. package/dist/data/fields.d.ts +12 -0
  96. package/dist/data/fields.d.ts.map +1 -1
  97. package/dist/data/fields.js +10 -0
  98. package/dist/data/fields.js.map +1 -1
  99. package/dist/data/remote-datasources/loader.d.ts.map +1 -1
  100. package/dist/data/remote-datasources/loader.js +3 -1
  101. package/dist/data/remote-datasources/loader.js.map +1 -1
  102. package/dist/data/resolve-data-templates.d.ts.map +1 -1
  103. package/dist/data/resolve-data-templates.js +6 -1
  104. package/dist/data/resolve-data-templates.js.map +1 -1
  105. package/dist/data/schema-heuristics.d.ts +5 -0
  106. package/dist/data/schema-heuristics.d.ts.map +1 -0
  107. package/dist/data/schema-heuristics.js +46 -0
  108. package/dist/data/schema-heuristics.js.map +1 -0
  109. package/dist/editor/P1PuckProvider.d.ts.map +1 -1
  110. package/dist/editor/P1PuckProvider.js +113 -23
  111. package/dist/editor/P1PuckProvider.js.map +1 -1
  112. package/dist/editor/components/P1InspectorFields.d.ts.map +1 -1
  113. package/dist/editor/components/P1InspectorFields.js +13 -1
  114. package/dist/editor/components/P1InspectorFields.js.map +1 -1
  115. package/dist/editor/components/VersionBannerOverride.d.ts.map +1 -1
  116. package/dist/editor/components/VersionBannerOverride.js +37 -3
  117. package/dist/editor/components/VersionBannerOverride.js.map +1 -1
  118. package/dist/editor/plugin/P1Plugin.d.ts.map +1 -1
  119. package/dist/editor/plugin/P1Plugin.js +10 -53
  120. package/dist/editor/plugin/P1Plugin.js.map +1 -1
  121. package/dist/editor/plugin/context-sync-key.d.ts.map +1 -1
  122. package/dist/editor/plugin/context-sync-key.js +5 -5
  123. package/dist/editor/plugin/context-sync-key.js.map +1 -1
  124. package/dist/editor/plugin/document-sync-plugin.d.ts +23 -5
  125. package/dist/editor/plugin/document-sync-plugin.d.ts.map +1 -1
  126. package/dist/editor/plugin/document-sync-plugin.js +13 -6
  127. package/dist/editor/plugin/document-sync-plugin.js.map +1 -1
  128. package/dist/editor/useP1Editor.d.ts.map +1 -1
  129. package/dist/editor/useP1Editor.js +47 -32
  130. package/dist/editor/useP1Editor.js.map +1 -1
  131. package/dist/editor/useResponsivePanels.d.ts +29 -0
  132. package/dist/editor/useResponsivePanels.d.ts.map +1 -0
  133. package/dist/editor/useResponsivePanels.js +175 -0
  134. package/dist/editor/useResponsivePanels.js.map +1 -0
  135. package/dist/editor/useSidebarScrollPreservation.d.ts +10 -0
  136. package/dist/editor/useSidebarScrollPreservation.d.ts.map +1 -0
  137. package/dist/editor/useSidebarScrollPreservation.js +39 -0
  138. package/dist/editor/useSidebarScrollPreservation.js.map +1 -0
  139. package/dist/index.d.ts +4 -0
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +3 -0
  142. package/dist/index.js.map +1 -1
  143. package/dist/p1/editor/client.d.ts +0 -4
  144. package/dist/p1/editor/client.d.ts.map +1 -1
  145. package/dist/p1/editor/client.js +9 -10
  146. package/dist/p1/editor/client.js.map +1 -1
  147. package/dist/p1/editor/editor-preview-resolve.d.ts +8 -3
  148. package/dist/p1/editor/editor-preview-resolve.d.ts.map +1 -1
  149. package/dist/p1/editor/editor-preview-resolve.js +22 -7
  150. package/dist/p1/editor/editor-preview-resolve.js.map +1 -1
  151. package/dist/p1/editor/hooks/api-hooks.d.ts.map +1 -1
  152. package/dist/p1/editor/hooks/api-hooks.js.map +1 -1
  153. package/dist/p1/editor/hooks/index.d.ts +1 -0
  154. package/dist/p1/editor/hooks/index.d.ts.map +1 -1
  155. package/dist/p1/editor/hooks/index.js +1 -0
  156. package/dist/p1/editor/hooks/index.js.map +1 -1
  157. package/dist/p1/editor/hooks/useLiveRemoteDatasources.d.ts +31 -0
  158. package/dist/p1/editor/hooks/useLiveRemoteDatasources.d.ts.map +1 -0
  159. package/dist/p1/editor/hooks/useLiveRemoteDatasources.js +45 -0
  160. package/dist/p1/editor/hooks/useLiveRemoteDatasources.js.map +1 -0
  161. package/dist/p1/editor/hooks/useP1Plugins.d.ts.map +1 -1
  162. package/dist/p1/editor/hooks/useP1Plugins.js +3 -11
  163. package/dist/p1/editor/hooks/useP1Plugins.js.map +1 -1
  164. package/dist/p1/editor/icons/data-list-block-icon.d.ts +2 -0
  165. package/dist/p1/editor/icons/data-list-block-icon.d.ts.map +1 -0
  166. package/dist/p1/editor/icons/data-list-block-icon.js +5 -0
  167. package/dist/p1/editor/icons/data-list-block-icon.js.map +1 -0
  168. package/dist/p1/editor/remote-datasources/remote-datasource-explorer-plugin.d.ts +6 -7
  169. package/dist/p1/editor/remote-datasources/remote-datasource-explorer-plugin.d.ts.map +1 -1
  170. package/dist/p1/editor/remote-datasources/remote-datasource-explorer-plugin.js +13 -7
  171. package/dist/p1/editor/remote-datasources/remote-datasource-explorer-plugin.js.map +1 -1
  172. package/dist/p1/pages/render-client.d.ts.map +1 -1
  173. package/dist/p1/pages/render-client.js +2 -1
  174. package/dist/p1/pages/render-client.js.map +1 -1
  175. package/dist/pds/components/P1EditorHeader.d.ts.map +1 -1
  176. package/dist/pds/components/P1EditorHeader.js +1 -1
  177. package/dist/pds/components/P1EditorHeader.js.map +1 -1
  178. package/dist/pds/components/P1EditorSubheader.d.ts +1 -3
  179. package/dist/pds/components/P1EditorSubheader.d.ts.map +1 -1
  180. package/dist/pds/components/P1EditorSubheader.js +2 -2
  181. package/dist/pds/components/P1EditorSubheader.js.map +1 -1
  182. package/dist/pds/components/P1EditorSubheader.module.css +0 -4
  183. package/dist/pds/components/PresenceStack.d.ts.map +1 -1
  184. package/dist/pds/components/PresenceStack.js +1 -1
  185. package/dist/pds/components/PresenceStack.js.map +1 -1
  186. package/dist/versioning/components/HistoricalVersionBanner.d.ts.map +1 -1
  187. package/dist/versioning/components/HistoricalVersionBanner.js +3 -3
  188. package/dist/versioning/components/HistoricalVersionBanner.js.map +1 -1
  189. package/dist/versioning/components/HistoricalVersionBanner.module.css +174 -0
  190. package/dist/versioning/components/VersionBannerActions.d.ts.map +1 -1
  191. package/dist/versioning/components/VersionBannerActions.js +11 -3
  192. package/dist/versioning/components/VersionBannerActions.js.map +1 -1
  193. package/package.json +4 -3
  194. package/src/styles.css +220 -180
package/src/styles.css CHANGED
@@ -11,20 +11,6 @@
11
11
  * Styles for version comparison and other UI components.
12
12
  */
13
13
 
14
- /* ============================================
15
- Plugin Rail Toggle
16
- ============================================ */
17
-
18
- /* Hide the plugin rail (left navigation with Blocks/Outline/History/etc.) */
19
- .p1-hide-plugin-rail [class*='_PuckLayout-nav_'] {
20
- display: none;
21
- }
22
-
23
- /* Reclaim the space - set the side nav width to 0 so grid collapses that column */
24
- .p1-hide-plugin-rail [class*='_PuckLayout-inner_'] {
25
- --puck-side-nav-width: 0;
26
- }
27
-
28
14
  /* ============================================
29
15
  Sidebar Background Matching
30
16
  ============================================ */
@@ -206,6 +192,27 @@
206
192
  font-weight: 600;
207
193
  }
208
194
 
195
+ .p1-inspector-template-badge {
196
+ display: flex;
197
+ align-items: center;
198
+ gap: 8px;
199
+ padding: 12px 16px;
200
+ margin-top: 8px;
201
+ border-top: 1px solid var(--pds-color-border-default, oklch(0.9401 0 0));
202
+ font-size: 13px;
203
+ line-height: 1.4;
204
+ }
205
+
206
+ .p1-inspector-template-badge__label {
207
+ color: var(--pds-color-fg-subtle, oklch(0.55 0 0));
208
+ font-weight: 500;
209
+ }
210
+
211
+ .p1-inspector-template-badge__name {
212
+ color: var(--pds-color-fg-default, var(--pds-color-text-primary, var(--puck-css-text)));
213
+ font-weight: 600;
214
+ }
215
+
209
216
  /* Strip container: min-height bypasses ancestor height constraints;
210
217
  overflow:hidden on _Sidebar--right_ clips it to the correct sidebar height. */
211
218
  .p1-inspector-reopen-strip {
@@ -962,133 +969,6 @@
962
969
  background: var(--puck-css-diff-reordered);
963
970
  }
964
971
 
965
- /* ============================================
966
- HistoricalVersionBanner
967
- ============================================ */
968
- .historical-version-banner {
969
- display: flex;
970
- align-items: center;
971
- gap: var(--pds-spacing-xs);
972
- padding: var(--pds-spacing-xs) var(--pds-spacing-l);
973
- background: var(--pds-color-bg-default-secondary, #f9fafb);
974
- border-top: 2px solid var(--pds-color-interactive-link-default, #3A5DFB);
975
- border-bottom: var(--pds-border-width-default, 1px) solid var(--pds-color-border-secondary, #ececf0);
976
- color: var(--pds-color-fg-default, #171717);
977
- font-family: var(--pds-typography-ff-default, 'Inter', system-ui, sans-serif);
978
- min-height: var(--pds-spacing-button-height-m);
979
- flex-wrap: wrap;
980
- }
981
-
982
- .historical-version-banner__icon {
983
- display: flex;
984
- align-items: center;
985
- justify-content: center;
986
- color: var(--pds-color-interactive-link-default, #3A5DFB);
987
- flex: none;
988
- }
989
-
990
- .historical-version-banner__content {
991
- display: flex;
992
- align-items: center;
993
- gap: var(--pds-spacing-3xs);
994
- }
995
-
996
- .historical-version-banner__text {
997
- font: 500 var(--pds-typography-size-m) var(--pds-typography-ff-default, 'Inter', system-ui, sans-serif);
998
- color: var(--pds-color-fg-default, #171717);
999
- }
1000
-
1001
- .historical-version-banner__text strong {
1002
- font: 700 var(--pds-typography-size-m) var(--pds-typography-ff-compact, 'Inter Tight', 'Inter', system-ui, sans-serif);
1003
- }
1004
-
1005
- .historical-version-banner__date {
1006
- font: 500 var(--pds-typography-size-m) var(--pds-typography-ff-default, 'Inter', system-ui, sans-serif);
1007
- color: var(--pds-color-fg-default, #171717);
1008
- }
1009
-
1010
- .historical-version-banner__actions {
1011
- display: flex;
1012
- align-items: center;
1013
- gap: var(--pds-spacing-2xs);
1014
- margin-left: auto;
1015
- flex: none;
1016
- }
1017
-
1018
- .historical-version-banner__exit-btn {
1019
- /* Reset browser button defaults without wiping font (all:unset kills font too) */
1020
- appearance: none;
1021
- -webkit-appearance: none;
1022
- box-sizing: border-box;
1023
- display: inline-flex;
1024
- align-items: center;
1025
- justify-content: center;
1026
- border: var(--pds-border-width-default, 1px) solid var(--pds-color-border-default, #d4d4d4);
1027
- background: var(--pds-color-bg-surface, white);
1028
- border-radius: 9px;
1029
- padding: 9px 20px;
1030
- font: 600 var(--pds-typography-size-m) var(--pds-typography-ff-compact, 'Inter Tight', 'Inter', system-ui, sans-serif);
1031
- color: var(--pds-color-fg-default, #171717);
1032
- cursor: pointer;
1033
- white-space: nowrap;
1034
- transition: var(--pds-animation-transition-button);
1035
- line-height: 1;
1036
- }
1037
-
1038
- .historical-version-banner__exit-btn:hover:not(:disabled) {
1039
- background: var(--pds-color-interactive-background-hover, #f5f5f5);
1040
- }
1041
-
1042
- .historical-version-banner__exit-btn:disabled {
1043
- opacity: 0.5;
1044
- cursor: default;
1045
- }
1046
-
1047
- .historical-version-banner__revert-btn {
1048
- display: inline-flex;
1049
- align-items: center;
1050
- justify-content: center;
1051
- gap: var(--pds-spacing-button-gap-inline-m);
1052
- border: none;
1053
- border-radius: var(--pds-border-radius-button);
1054
- background: var(--pds-color-fg-default, #171717);
1055
- color: white;
1056
- font: 700 var(--pds-typography-size-m) var(--pds-typography-ff-compact, 'Inter Tight', 'Inter', system-ui, sans-serif);
1057
- padding: 11px 18px;
1058
- cursor: pointer;
1059
- white-space: nowrap;
1060
- transition: var(--pds-animation-transition-button);
1061
- line-height: 1;
1062
- }
1063
-
1064
- .historical-version-banner__revert-btn:hover:not(:disabled) {
1065
- filter: brightness(1.15);
1066
- }
1067
-
1068
- .historical-version-banner__revert-btn:disabled {
1069
- opacity: 0.6;
1070
- cursor: default;
1071
- }
1072
-
1073
- .historical-version-banner__error {
1074
- width: 100%;
1075
- margin: 4px 0 2px;
1076
- padding: 0;
1077
- font-size: var(--pds-typography-size-s, 0.875rem);
1078
- color: var(--pds-color-status-error-icon, #c0392b);
1079
- }
1080
-
1081
- .historical-version-banner__spinner {
1082
- display: inline-block;
1083
- width: 12px;
1084
- height: 12px;
1085
- border: 2px solid currentColor;
1086
- border-top-color: transparent;
1087
- border-radius: 50%;
1088
- animation: css-plugin-version-spin 0.6s linear infinite;
1089
- flex: none;
1090
- }
1091
-
1092
972
  /* ============================================
1093
973
  CSS Plugin Panel
1094
974
  ============================================ */
@@ -1476,35 +1356,6 @@
1476
1356
  color: var(--pds-color-foreground-default);
1477
1357
  }
1478
1358
 
1479
- /* Banner steppers */
1480
- .historical-version-banner__steppers {
1481
- display: flex;
1482
- gap: 2px;
1483
- }
1484
-
1485
- .historical-version-banner__stepper-btn {
1486
- display: flex;
1487
- align-items: center;
1488
- justify-content: center;
1489
- width: 32px;
1490
- height: 32px;
1491
- border-radius: 6px;
1492
- border: 1px solid var(--pds-color-border-secondary, #ececf0);
1493
- background: transparent;
1494
- cursor: pointer;
1495
- color: var(--pds-color-fg-default, #1a1a1a);
1496
- transition: background 100ms ease;
1497
- }
1498
-
1499
- .historical-version-banner__stepper-btn:hover:not(:disabled) {
1500
- background: var(--pds-color-bg-default-secondary, #f9fafb);
1501
- }
1502
-
1503
- .historical-version-banner__stepper-btn:disabled {
1504
- opacity: 0.35;
1505
- cursor: not-allowed;
1506
- }
1507
-
1508
1359
  /* Unpublished changes pill on current version row */
1509
1360
  .css-plugin-version-unpublished {
1510
1361
  display: inline-block;
@@ -1535,10 +1386,6 @@
1535
1386
  margin-top: 2px;
1536
1387
  }
1537
1388
 
1538
- @keyframes css-plugin-version-spin {
1539
- to { transform: rotate(360deg); }
1540
- }
1541
-
1542
1389
  /* ============================================
1543
1390
  Toast Notifications
1544
1391
  ============================================ */
@@ -2827,6 +2674,10 @@
2827
2674
  nth-child(3) CSS plugin → rotateClock (React NavIcon in CSSPlugin)
2828
2675
  nth-child(4) AI plugin → sparkles (targeted by nth-child)
2829
2676
  nth-child(5) PCC plugin → fileLines (targeted by nth-child)
2677
+
2678
+ The positional slots only apply when the tab has no PDS icon of its own — the
2679
+ rail reorders whenever a plugin gains or loses `render`, so a slot may hold a
2680
+ plugin that already ships its icon, and painting over it would double up.
2830
2681
  ============================================================================= */
2831
2682
 
2832
2683
  /* 1. Hide all text labels.
@@ -2840,8 +2691,8 @@
2840
2691
  /* 2. Shared pseudo-element for injected SVG icons */
2841
2692
  [class*='NavItem-linkIcon']:has(svg.lucide-hammer)::after,
2842
2693
  [class*='NavItem-linkIcon']:has(svg.lucide-layers)::after,
2843
- [class*='Nav-list'] > li:nth-child(4) [class*='NavItem-linkIcon']::after,
2844
- [class*='Nav-list'] > li:nth-child(5) [class*='NavItem-linkIcon']::after {
2694
+ [class*='Nav-list'] > li:nth-child(4) [class*='NavItem-linkIcon']:not(:has(.pds-icon))::after,
2695
+ [class*='Nav-list'] > li:nth-child(5) [class*='NavItem-linkIcon']:not(:has(.pds-icon))::after {
2845
2696
  content: '';
2846
2697
  display: block;
2847
2698
  width: 20px;
@@ -2857,8 +2708,8 @@ svg.lucide-layers {
2857
2708
  display: none;
2858
2709
  }
2859
2710
 
2860
- [class*='Nav-list'] > li:nth-child(4) [class*='NavItem-linkIcon'] > *,
2861
- [class*='Nav-list'] > li:nth-child(5) [class*='NavItem-linkIcon'] > * {
2711
+ [class*='Nav-list'] > li:nth-child(4) [class*='NavItem-linkIcon']:not(:has(.pds-icon)) > *,
2712
+ [class*='Nav-list'] > li:nth-child(5) [class*='NavItem-linkIcon']:not(:has(.pds-icon)) > * {
2862
2713
  display: none;
2863
2714
  }
2864
2715
 
@@ -2875,12 +2726,12 @@ svg.lucide-layers {
2875
2726
  }
2876
2727
 
2877
2728
  /* AI plugin (4th) → fa-sparkles */
2878
- [class*='Nav-list'] > li:nth-child(4) [class*='NavItem-linkIcon']::after {
2729
+ [class*='Nav-list'] > li:nth-child(4) [class*='NavItem-linkIcon']:not(:has(.pds-icon))::after {
2879
2730
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512'%3E%3Cpath fill='%23374151' d='M391.5 53.2c-4.5 1.7-7.5 6-7.5 10.8s3 9.1 7.5 10.8L448 96 469.2 152.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L512 96 568.5 74.8c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L512 32 490.8-24.5c-1.7-4.5-6-7.5-10.8-7.5s-9.1 3-10.8 7.5L448 32 391.5 53.2zm-185 20.1c-2.6-5.7-8.3-9.3-14.5-9.3s-11.9 3.6-14.5 9.3l-53.1 115-115 53.1C3.6 244.1 0 249.8 0 256s3.6 11.9 9.3 14.5l115 53.1 53.1 115c2.6 5.7 8.3 9.3 14.5 9.3s11.9-3.6 14.5-9.3l53.1-115 115-53.1c5.7-2.6 9.3-8.3 9.3-14.5s-3.6-11.9-9.3-14.5l-115-53.1-53.1-115zM416 416l-56.5 21.2c-4.5 1.7-7.5 6-7.5 10.8s3 9.1 7.5 10.8L416 480 437.2 536.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L480 480 536.5 458.8c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L480 416 458.8 359.5c-1.7-4.5-6-7.5-10.8-7.5s-9.1 3-10.8 7.5L416 416z'/%3E%3C/svg%3E");
2880
2731
  }
2881
2732
 
2882
2733
  /* PCC plugin (5th) → fa-file-lines */
2883
- [class*='Nav-list'] > li:nth-child(5) [class*='NavItem-linkIcon']::after {
2734
+ [class*='Nav-list'] > li:nth-child(5) [class*='NavItem-linkIcon']:not(:has(.pds-icon))::after {
2884
2735
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath fill='%23374151' d='M0 64C0 28.7 28.7 0 64 0L213.5 0c17 0 33.3 6.7 45.3 18.7L365.3 125.3c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm208-5.5l0 93.5c0 13.3 10.7 24 24 24L325.5 176 208 58.5zM120 256c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z'/%3E%3C/svg%3E");
2885
2736
  }
2886
2737
 
@@ -3392,3 +3243,192 @@ svg.lucide-layers {
3392
3243
  color: var(--pds-color-text-primary, var(--puck-css-text));
3393
3244
  }
3394
3245
 
3246
+ /* ============================================
3247
+ Inspector Field Spacing
3248
+ ============================================ */
3249
+
3250
+ .p1-inspector-fields [class*='_InputWrapper_'] + [class*='_InputWrapper_'] {
3251
+ margin-top: 16px;
3252
+ }
3253
+
3254
+ .p1-inspector-fields [class*='_Input-label_'] {
3255
+ padding-bottom: 8px;
3256
+ }
3257
+
3258
+ .p1-inspector-fields [class*='_Input-label_']::after {
3259
+ content: ':';
3260
+ }
3261
+
3262
+ /* ============================================
3263
+ Field Section (collapsible sidebar groups)
3264
+ ============================================ */
3265
+
3266
+ .p1-field-section {
3267
+ border-bottom: 1px solid var(--puck-color-grey-09, #e0e0e0);
3268
+ }
3269
+
3270
+ .p1-field-section:last-of-type {
3271
+ border-bottom: none;
3272
+ }
3273
+
3274
+ .p1-field-section__header {
3275
+ width: 100%;
3276
+ display: flex;
3277
+ align-items: center;
3278
+ gap: 6px;
3279
+ padding: 13px 20px;
3280
+ border: none;
3281
+ background: transparent;
3282
+ cursor: pointer;
3283
+ user-select: none;
3284
+ list-style: none;
3285
+ }
3286
+
3287
+ .p1-field-section__header::-webkit-details-marker {
3288
+ display: none;
3289
+ }
3290
+
3291
+ .p1-field-section__label {
3292
+ font: 600 11.5px/1 var(--pds-font-family, sans-serif);
3293
+ letter-spacing: 0.1em;
3294
+ text-transform: uppercase;
3295
+ color: #9a9a9a;
3296
+ }
3297
+
3298
+ .p1-field-section__header:hover .p1-field-section__label {
3299
+ color: var(--puck-color-grey-01, #1a1a1a);
3300
+ }
3301
+
3302
+ .p1-field-section__badge {
3303
+ font: 600 10px/1 var(--pds-font-family, sans-serif);
3304
+ letter-spacing: 0;
3305
+ color: #9a9a9a;
3306
+ background: #f0f0f0;
3307
+ border-radius: 99px;
3308
+ padding: 1px 7px;
3309
+ }
3310
+
3311
+ .p1-field-section__chevron {
3312
+ margin-left: auto;
3313
+ width: 15px;
3314
+ height: 15px;
3315
+ transition: transform 0.15s ease;
3316
+ background: #c4c4c4;
3317
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='currentColor' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") center / contain no-repeat;
3318
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='currentColor' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") center / contain no-repeat;
3319
+ }
3320
+
3321
+ .p1-field-section[open] > .p1-field-section__header .p1-field-section__chevron {
3322
+ transform: rotate(0deg);
3323
+ }
3324
+
3325
+ .p1-field-section:not([open]) > .p1-field-section__header .p1-field-section__chevron {
3326
+ transform: rotate(-90deg);
3327
+ }
3328
+
3329
+ .p1-field-section__subtitle {
3330
+ margin: 0;
3331
+ padding: 0 20px 8px;
3332
+ font: 400 12px/1.4 var(--pds-font-family, sans-serif);
3333
+ color: #7c7c7c;
3334
+ }
3335
+
3336
+ .p1-field-section__body {
3337
+ padding: 0 20px 18px;
3338
+ display: flex;
3339
+ flex-direction: column;
3340
+ gap: 14px;
3341
+ }
3342
+
3343
+ .p1-field-mapping-section__title {
3344
+ font-size: 13px;
3345
+ font-weight: 700;
3346
+ color: var(--puck-color-grey-01, #1a1a1a);
3347
+ margin: 4px 0 2px;
3348
+ padding: 0;
3349
+ }
3350
+
3351
+ .p1-field-mapping-section__subtitle {
3352
+ font-size: 12px;
3353
+ font-weight: 500;
3354
+ color: #7c7c7c;
3355
+ margin: 0 0 6px;
3356
+ padding: 0;
3357
+ line-height: 1.4;
3358
+ }
3359
+
3360
+ /* Schema-select field: custom label with required asterisk and type hint */
3361
+ .p1-schema-field__label-row {
3362
+ display: flex;
3363
+ align-items: baseline;
3364
+ gap: 4px;
3365
+ margin-bottom: 4px;
3366
+ }
3367
+
3368
+ .p1-schema-field__label {
3369
+ font-size: 12px;
3370
+ font-weight: 600;
3371
+ color: var(--puck-color-grey-01, #1a1a1a);
3372
+ }
3373
+
3374
+ .p1-schema-field__required {
3375
+ color: #e53e3e;
3376
+ font-weight: 600;
3377
+ }
3378
+
3379
+ .p1-schema-field__type-hint {
3380
+ font-size: 11px;
3381
+ font-weight: 400;
3382
+ color: #9a9a9a;
3383
+ }
3384
+
3385
+ /* Unmapped fields counter below field mapping section */
3386
+ .p1-field-mapping-section__unmapped {
3387
+ font-size: 11px;
3388
+ font-weight: 500;
3389
+ color: #9a9a9a;
3390
+ margin: 8px 0 0;
3391
+ padding: 0;
3392
+ }
3393
+
3394
+ /* Schema-select field row: dropdown + eye toggle inline */
3395
+ .p1-schema-select-row {
3396
+ display: flex;
3397
+ align-items: flex-end;
3398
+ gap: 6px;
3399
+ }
3400
+
3401
+ .p1-schema-select-row__control {
3402
+ flex: 1;
3403
+ min-width: 0;
3404
+ }
3405
+
3406
+ /* Eye toggle button for schema-select field visibility */
3407
+ .p1-eye-toggle {
3408
+ display: inline-flex;
3409
+ align-items: center;
3410
+ justify-content: center;
3411
+ width: 36px;
3412
+ height: 36px;
3413
+ padding: 0;
3414
+ border: 1px solid var(--puck-color-grey-09, #e0e0e0);
3415
+ border-radius: 50%;
3416
+ background: transparent;
3417
+ color: var(--puck-color-grey-04, #666);
3418
+ cursor: pointer;
3419
+ flex-shrink: 0;
3420
+ transition: color 0.15s, border-color 0.15s;
3421
+ }
3422
+
3423
+ .p1-eye-toggle:hover {
3424
+ color: var(--puck-color-grey-01, #1a1a1a);
3425
+ border-color: var(--puck-color-grey-05, #999);
3426
+ }
3427
+
3428
+ .p1-eye-toggle--off {
3429
+ color: var(--puck-color-grey-07, #bbb);
3430
+ }
3431
+
3432
+ .p1-eye-toggle--off:hover {
3433
+ color: var(--puck-color-grey-04, #666);
3434
+ }