@perspective-dev/viewer 5.0.0 → 5.2.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 (213) hide show
  1. package/dist/cdn/perspective-viewer.js +9 -9
  2. package/dist/cdn/perspective-viewer.js.map +4 -4
  3. package/dist/css/botanical.css +1 -1
  4. package/dist/css/dracula.css +1 -1
  5. package/dist/css/gruvbox-dark.css +1 -1
  6. package/dist/css/gruvbox.css +1 -1
  7. package/dist/css/icons.css +1 -1
  8. package/dist/css/intl/de.css +1 -1
  9. package/dist/css/intl/es.css +1 -1
  10. package/dist/css/intl/fr.css +1 -1
  11. package/dist/css/intl/ja.css +1 -1
  12. package/dist/css/intl/pt.css +1 -1
  13. package/dist/css/intl/zh.css +1 -1
  14. package/dist/css/intl.css +1 -1
  15. package/dist/css/monokai.css +1 -1
  16. package/dist/css/phosphor.css +1 -1
  17. package/dist/css/pro-dark.css +1 -1
  18. package/dist/css/pro.css +1 -1
  19. package/dist/css/solarized-dark.css +1 -1
  20. package/dist/css/solarized.css +1 -1
  21. package/dist/css/themes.css +1 -1
  22. package/dist/css/vaporwave.css +1 -1
  23. package/dist/docs/perspective-docs.json +1 -0
  24. package/dist/esm/column-format.d.ts +19 -28
  25. package/dist/esm/perspective-viewer.d.ts +2 -0
  26. package/dist/esm/perspective-viewer.inline.js +8 -8
  27. package/dist/esm/perspective-viewer.inline.js.map +4 -4
  28. package/dist/esm/perspective-viewer.js +9 -9
  29. package/dist/esm/perspective-viewer.js.map +4 -4
  30. package/dist/esm/providers.d.ts +79 -0
  31. package/dist/esm/ts-rs/CompactDisplay.d.ts +5 -0
  32. package/dist/esm/ts-rs/CurrencyCode.d.ts +1 -0
  33. package/dist/esm/ts-rs/CurrencyDisplay.d.ts +1 -0
  34. package/dist/esm/ts-rs/CurrencyNumberFormatStyle.d.ts +8 -0
  35. package/dist/esm/ts-rs/CurrencySign.d.ts +1 -0
  36. package/dist/esm/ts-rs/CustomDatetimeFormat.d.ts +1 -0
  37. package/dist/esm/ts-rs/CustomDatetimeStyleConfig.d.ts +54 -0
  38. package/dist/esm/ts-rs/CustomNumberFormatConfig.d.ts +34 -0
  39. package/dist/esm/ts-rs/DatetimeColorMode.d.ts +1 -0
  40. package/dist/esm/ts-rs/DatetimeFormatType.d.ts +6 -0
  41. package/dist/esm/ts-rs/FormatMode.d.ts +1 -0
  42. package/dist/esm/ts-rs/FormatUnit.d.ts +1 -0
  43. package/dist/esm/ts-rs/Notation.d.ts +17 -0
  44. package/dist/esm/ts-rs/NumberFormatStyle.d.ts +18 -0
  45. package/dist/esm/ts-rs/PanelViewerConfig.d.ts +43 -1
  46. package/dist/esm/ts-rs/PluginStaticConfig.d.ts +35 -0
  47. package/dist/esm/ts-rs/RestoreOptions.d.ts +19 -0
  48. package/dist/esm/ts-rs/RoundingMode.d.ts +1 -0
  49. package/dist/esm/ts-rs/RoundingPriority.d.ts +1 -0
  50. package/dist/esm/ts-rs/SignDisplay.d.ts +1 -0
  51. package/dist/esm/ts-rs/SimpleDatetimeFormat.d.ts +1 -0
  52. package/dist/esm/ts-rs/SimpleDatetimeStyleConfig.d.ts +24 -0
  53. package/dist/esm/ts-rs/SplitRollupMode.d.ts +9 -0
  54. package/dist/esm/ts-rs/StringColorMode.d.ts +1 -0
  55. package/dist/esm/ts-rs/TrailingZeroDisplay.d.ts +1 -0
  56. package/dist/esm/ts-rs/Unit.d.ts +1 -0
  57. package/dist/esm/ts-rs/UnitDisplay.d.ts +1 -0
  58. package/dist/esm/ts-rs/UnitNumberFormatStyle.d.ts +6 -0
  59. package/dist/esm/ts-rs/UseGrouping.d.ts +1 -0
  60. package/dist/esm/ts-rs/ViewerConfig.d.ts +43 -1
  61. package/dist/esm/ts-rs/ViewerConfigInitial.d.ts +175 -0
  62. package/dist/esm/ts-rs/ViewerConfigUpdate.d.ts +72 -0
  63. package/dist/esm/ts-rs/WindowSort.d.ts +7 -0
  64. package/dist/esm/ts-rs/WindowSortDir.d.ts +6 -0
  65. package/dist/esm/ts-rs/WindowSpec.d.ts +47 -0
  66. package/dist/esm/ts-rs/Windows.d.ts +10 -0
  67. package/dist/esm/ts-rs/WorkspaceConfigUpdate.d.ts +7 -6
  68. package/dist/wasm/perspective-viewer.d.ts +222 -26
  69. package/dist/wasm/perspective-viewer.js +378 -125
  70. package/dist/wasm/perspective-viewer.wasm +0 -0
  71. package/dist/wasm/perspective-viewer.wasm.d.ts +18 -15
  72. package/package.json +2 -1
  73. package/src/css/_viewer_bundle.css +1 -0
  74. package/src/css/column-selector.css +9 -0
  75. package/src/css/column-settings-panel.css +67 -2
  76. package/src/css/column-style.css +4 -3
  77. package/src/css/config-selector.css +60 -4
  78. package/src/css/containers/context-menu.css +12 -6
  79. package/src/css/containers/tabs.css +2 -2
  80. package/src/css/form/code-editor.css +2 -3
  81. package/src/css/form/mirrored-textarea.css +81 -0
  82. package/src/css/viewer.css +336 -0
  83. package/src/rust/agent/client/mod.rs +19 -0
  84. package/src/rust/agent/client/protocol.rs +320 -0
  85. package/src/rust/agent/client/transport.rs +287 -0
  86. package/src/rust/agent/client/turn.rs +174 -0
  87. package/src/rust/agent/config.rs +159 -0
  88. package/src/rust/agent/docs.rs +293 -0
  89. package/src/rust/agent/markdown/block.rs +509 -0
  90. package/src/rust/agent/markdown/entity.rs +52 -0
  91. package/src/rust/agent/markdown/events.rs +71 -0
  92. package/src/rust/agent/markdown/inline.rs +497 -0
  93. package/src/rust/agent/markdown/mod.rs +466 -0
  94. package/src/rust/agent/mod.rs +23 -0
  95. package/src/rust/agent/preamble.md +16 -0
  96. package/src/rust/agent/runtime.rs +201 -0
  97. package/src/rust/agent/slot.rs +236 -0
  98. package/src/rust/agent/tools.rs +1110 -0
  99. package/src/rust/components/chat_panel.rs +289 -0
  100. package/src/rust/components/column_selector/active_column.rs +21 -27
  101. package/src/rust/components/column_selector/column_selector_column_row.rs +73 -0
  102. package/src/rust/components/column_selector/config_selector.rs +83 -8
  103. package/src/rust/components/column_selector/expr_edit_button.rs +7 -1
  104. package/src/rust/components/column_selector/inactive_column.rs +8 -1
  105. package/src/rust/components/column_selector.rs +27 -3
  106. package/src/rust/components/column_settings_sidebar/style_tab.rs +2 -1
  107. package/src/rust/components/column_settings_sidebar/window_tab.rs +34 -0
  108. package/src/rust/components/column_settings_sidebar.rs +163 -16
  109. package/src/rust/components/containers/dragdrop_list.rs +110 -3
  110. package/src/rust/components/containers/sidebar.rs +99 -22
  111. package/src/rust/components/containers/split_panel.rs +6 -0
  112. package/src/rust/components/editable_header.rs +2 -0
  113. package/src/rust/components/form/code_editor.rs +14 -23
  114. package/src/rust/components/form/debug.rs +8 -5
  115. package/src/rust/components/form/mirrored_textarea.rs +165 -0
  116. package/src/rust/components/form/mod.rs +1 -0
  117. package/src/rust/components/main_panel.rs +5 -0
  118. package/src/rust/components/mod.rs +3 -0
  119. package/src/rust/components/panel_menu.rs +7 -0
  120. package/src/rust/components/panel_tab.rs +5 -0
  121. package/src/rust/components/portal.rs +7 -0
  122. package/src/rust/components/settings_panel.rs +80 -2
  123. package/src/rust/components/viewer/msg.rs +2 -0
  124. package/src/rust/components/viewer/panels.rs +9 -14
  125. package/src/rust/components/viewer/render.rs +14 -0
  126. package/src/rust/components/viewer/settings.rs +33 -1
  127. package/src/rust/components/viewer.rs +2 -0
  128. package/src/rust/components/window_editor.rs +985 -0
  129. package/src/rust/config/datetime_column_style/custom.rs +17 -0
  130. package/src/rust/config/datetime_column_style/simple.rs +10 -0
  131. package/src/rust/config/number_string_format.rs +33 -0
  132. package/src/rust/config/options.rs +18 -0
  133. package/src/rust/config/plugin_static_config.rs +120 -5
  134. package/src/rust/config/viewer_config.rs +220 -1
  135. package/src/rust/config/workspace_config.rs +7 -6
  136. package/src/rust/custom_elements/viewer.rs +209 -18
  137. package/src/rust/custom_events.rs +29 -0
  138. package/src/rust/lib.rs +17 -1
  139. package/src/rust/presentation/column_locator.rs +16 -1
  140. package/src/rust/presentation.rs +8 -0
  141. package/src/rust/queries/columns_iter_set.rs +7 -1
  142. package/src/rust/queries/get_viewer_config.rs +5 -1
  143. package/src/rust/renderer/dispatch.rs +85 -58
  144. package/src/rust/renderer.rs +34 -1
  145. package/src/rust/session/column_defaults_update.rs +18 -0
  146. package/src/rust/session/drag_drop_update.rs +18 -0
  147. package/src/rust/session/metadata.rs +64 -9
  148. package/src/rust/session/replace_expression_update.rs +2 -0
  149. package/src/rust/session.rs +7 -5
  150. package/src/rust/tasks/create_panel.rs +18 -8
  151. package/src/rust/tasks/edit_window.rs +155 -0
  152. package/src/rust/tasks/mod.rs +2 -0
  153. package/src/rust/tasks/restore_panel.rs +34 -17
  154. package/src/rust/tasks/sync_update_panels.rs +7 -23
  155. package/src/rust/utils/browser/dragdrop.rs +12 -0
  156. package/src/rust/utils/browser/tests/debounce.rs +49 -0
  157. package/src/rust/utils/debounce.rs +76 -27
  158. package/src/rust/workspace.rs +112 -20
  159. package/src/svg/pin-icon.svg +5 -0
  160. package/src/themes/icons.css +1 -0
  161. package/src/themes/intl/de.css +23 -0
  162. package/src/themes/intl/es.css +23 -0
  163. package/src/themes/intl/fr.css +23 -0
  164. package/src/themes/intl/ja.css +23 -0
  165. package/src/themes/intl/pt.css +23 -0
  166. package/src/themes/intl/zh.css +23 -0
  167. package/src/themes/intl.css +26 -1
  168. package/src/ts/column-format.ts +67 -46
  169. package/src/ts/perspective-viewer.ts +2 -0
  170. package/src/ts/providers.ts +96 -0
  171. package/src/ts/ts-rs/CompactDisplay.ts +3 -0
  172. package/src/ts/ts-rs/CurrencyCode.ts +3 -0
  173. package/src/ts/ts-rs/CurrencyDisplay.ts +3 -0
  174. package/src/ts/ts-rs/CurrencyNumberFormatStyle.ts +6 -0
  175. package/src/ts/ts-rs/CurrencySign.ts +3 -0
  176. package/src/ts/ts-rs/CustomDatetimeFormat.ts +3 -0
  177. package/src/ts/ts-rs/CustomDatetimeStyleConfig.ts +54 -0
  178. package/src/ts/ts-rs/CustomNumberFormatConfig.ts +25 -0
  179. package/src/ts/ts-rs/DatetimeColorMode.ts +3 -0
  180. package/src/ts/ts-rs/DatetimeFormatType.ts +8 -0
  181. package/src/ts/ts-rs/FormatMode.ts +3 -0
  182. package/src/ts/ts-rs/FormatUnit.ts +3 -0
  183. package/src/ts/ts-rs/Notation.ts +11 -0
  184. package/src/ts/ts-rs/NumberFormatStyle.ts +12 -0
  185. package/src/ts/ts-rs/PanelViewerConfig.ts +48 -1
  186. package/src/ts/ts-rs/PluginStaticConfig.ts +36 -1
  187. package/src/ts/ts-rs/RestoreOptions.ts +20 -0
  188. package/src/ts/ts-rs/RoundingMode.ts +3 -0
  189. package/src/ts/ts-rs/RoundingPriority.ts +3 -0
  190. package/src/ts/ts-rs/SignDisplay.ts +3 -0
  191. package/src/ts/ts-rs/SimpleDatetimeFormat.ts +3 -0
  192. package/src/ts/ts-rs/SimpleDatetimeStyleConfig.ts +25 -0
  193. package/src/ts/ts-rs/SplitRollupMode.ts +11 -0
  194. package/src/ts/ts-rs/StringColorMode.ts +3 -0
  195. package/src/ts/ts-rs/TrailingZeroDisplay.ts +3 -0
  196. package/src/ts/ts-rs/Unit.ts +3 -0
  197. package/src/ts/ts-rs/UnitDisplay.ts +3 -0
  198. package/src/ts/ts-rs/UnitNumberFormatStyle.ts +5 -0
  199. package/src/ts/ts-rs/UseGrouping.ts +3 -0
  200. package/src/ts/ts-rs/ViewerConfig.ts +48 -1
  201. package/src/ts/ts-rs/ViewerConfigInitial.ts +164 -0
  202. package/src/ts/ts-rs/ViewerConfigUpdate.ts +81 -2
  203. package/src/ts/ts-rs/WindowSort.ts +9 -0
  204. package/src/ts/ts-rs/WindowSortDir.ts +8 -0
  205. package/src/ts/ts-rs/WindowSpec.ts +47 -0
  206. package/src/ts/ts-rs/Windows.ts +10 -0
  207. package/src/ts/ts-rs/WorkspaceConfigUpdate.ts +7 -6
  208. /package/dist/wasm/snippets/{perspective-viewer-daeef4ceb066e6c7 → perspective-viewer-02e461f3d7062b26}/inline0.js +0 -0
  209. /package/dist/wasm/snippets/{perspective-viewer-daeef4ceb066e6c7 → perspective-viewer-02e461f3d7062b26}/inline1.js +0 -0
  210. /package/dist/wasm/snippets/{perspective-viewer-daeef4ceb066e6c7 → perspective-viewer-02e461f3d7062b26}/inline2.js +0 -0
  211. /package/dist/wasm/snippets/{perspective-viewer-daeef4ceb066e6c7 → perspective-viewer-02e461f3d7062b26}/inline3.js +0 -0
  212. /package/dist/wasm/snippets/{perspective-viewer-daeef4ceb066e6c7 → perspective-viewer-02e461f3d7062b26}/inline4.js +0 -0
  213. /package/dist/wasm/snippets/{perspective-viewer-daeef4ceb066e6c7 → perspective-viewer-02e461f3d7062b26}/inline5.js +0 -0
Binary file
@@ -27,6 +27,9 @@ export const perspectivedebugpluginelement_select_mode: (a: number, b: number) =
27
27
  export const perspectivedebugpluginelement_update: (a: number, b: number) => number;
28
28
  export const perspectiveviewerelement___get_model: (a: number) => number;
29
29
  export const perspectiveviewerelement_addPanel: (a: number, b: number) => number;
30
+ export const perspectiveviewerelement_agentConfig: (a: number, b: number, c: number) => void;
31
+ export const perspectiveviewerelement_agentPrompt: (a: number, b: number, c: number) => number;
32
+ export const perspectiveviewerelement_agentReset: (a: number) => number;
30
33
  export const perspectiveviewerelement_connectedCallback: (a: number, b: number) => void;
31
34
  export const perspectiveviewerelement_copy: (a: number, b: number) => number;
32
35
  export const perspectiveviewerelement_delete: (a: number) => number;
@@ -163,21 +166,21 @@ export const virtualdataslice_setIntegerCol: (a: number, b: number, c: number, d
163
166
  export const virtualdataslice_setStringCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
164
167
  export const virtualserver_handleRequest: (a: number, b: number, c: number) => number;
165
168
  export const virtualserver_new: (a: number, b: number) => void;
166
- export const __wasm_bindgen_func_elem_15590: (a: number, b: number) => void;
167
- export const __wasm_bindgen_func_elem_3497: (a: number, b: number) => void;
168
- export const __wasm_bindgen_func_elem_18482: (a: number, b: number) => void;
169
- export const __wasm_bindgen_func_elem_19140: (a: number, b: number) => void;
170
- export const __wasm_bindgen_func_elem_19169: (a: number, b: number) => void;
171
- export const __wasm_bindgen_func_elem_26445: (a: number, b: number, c: number, d: number) => void;
172
- export const __wasm_bindgen_func_elem_6144: (a: number, b: number, c: number) => void;
173
- export const __wasm_bindgen_func_elem_6145: (a: number, b: number, c: number) => void;
174
- export const __wasm_bindgen_func_elem_6146: (a: number, b: number, c: number) => void;
175
- export const __wasm_bindgen_func_elem_6142: (a: number, b: number, c: number) => void;
176
- export const __wasm_bindgen_func_elem_18602: (a: number, b: number, c: number) => void;
177
- export const __wasm_bindgen_func_elem_19145: (a: number, b: number, c: number) => void;
178
- export const __wasm_bindgen_func_elem_19186: (a: number, b: number, c: number) => void;
179
- export const __wasm_bindgen_func_elem_16279: (a: number, b: number) => number;
180
- export const __wasm_bindgen_func_elem_19144: (a: number, b: number) => void;
169
+ export const __wasm_bindgen_func_elem_17003: (a: number, b: number) => void;
170
+ export const __wasm_bindgen_func_elem_17713: (a: number, b: number) => void;
171
+ export const __wasm_bindgen_func_elem_18571: (a: number, b: number) => void;
172
+ export const __wasm_bindgen_func_elem_3989: (a: number, b: number) => void;
173
+ export const __wasm_bindgen_func_elem_23208: (a: number, b: number) => void;
174
+ export const __wasm_bindgen_func_elem_31328: (a: number, b: number, c: number, d: number) => void;
175
+ export const __wasm_bindgen_func_elem_17122: (a: number, b: number, c: number) => void;
176
+ export const __wasm_bindgen_func_elem_17718: (a: number, b: number, c: number) => void;
177
+ export const __wasm_bindgen_func_elem_6981: (a: number, b: number, c: number) => void;
178
+ export const __wasm_bindgen_func_elem_6982: (a: number, b: number, c: number) => void;
179
+ export const __wasm_bindgen_func_elem_6983: (a: number, b: number, c: number) => void;
180
+ export const __wasm_bindgen_func_elem_6979: (a: number, b: number, c: number) => void;
181
+ export const __wasm_bindgen_func_elem_23225: (a: number, b: number, c: number) => void;
182
+ export const __wasm_bindgen_func_elem_19569: (a: number, b: number) => number;
183
+ export const __wasm_bindgen_func_elem_17717: (a: number, b: number) => void;
181
184
  export const __wbindgen_export: (a: number, b: number) => number;
182
185
  export const __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
183
186
  export const __wbindgen_export3: (a: number) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@perspective-dev/viewer",
3
- "version": "5.0.0",
3
+ "version": "5.2.0",
4
4
  "description": "The `<perspective-viewer>` Custom Element, frontend for Perspective",
5
5
  "keywords": [
6
6
  "perspective",
@@ -69,6 +69,7 @@
69
69
  "@types/node": ">=22",
70
70
  "@types/react-dom": ">17 <20",
71
71
  "prettier": ">=3 <4",
72
+ "ts-json-schema-generator": "^2.4.0",
72
73
  "typedoc": "^0.28.7",
73
74
  "typescript": ">=5 <6",
74
75
  "zx": ">=8 <9"
@@ -35,6 +35,7 @@
35
35
  @import "render-warning.css";
36
36
  @import "status-bar.css";
37
37
 
38
+ @import "form/mirrored-textarea.css";
38
39
  @import "form/code-editor.css";
39
40
  @import "form/debug.css";
40
41
 
@@ -181,10 +181,19 @@
181
181
  border-color: var(--psp--color);
182
182
  }
183
183
 
184
+ /* Composed inside a `.pivot-column` pill (the window editor's slots),
185
+ the row's `min-width: auto` floor would hold it at content width and
186
+ overflow the container-stretched pill - collapse-to-0 requires the
187
+ definite-width chain to pass through. */
188
+ .pivot-column > .column-selector-column {
189
+ min-width: 0;
190
+ }
191
+
184
192
  .column-selector-column {
185
193
  display: flex;
186
194
  flex-direction: row-reverse;
187
195
  align-items: center;
196
+ flex: 1 1 auto;
188
197
 
189
198
  /* Expression column toolbar buttons */
190
199
  span.expression-edit-button,
@@ -41,6 +41,7 @@
41
41
  .item_title {
42
42
  flex: 0 0 auto;
43
43
  font-size: var(--label--font-size, 0.75em);
44
+ margin-top: 9px;
44
45
  }
45
46
 
46
47
  input {
@@ -70,7 +71,7 @@
70
71
 
71
72
  .sidebar_header_contents {
72
73
  display: flex;
73
- margin: 8px;
74
+ margin: 7px 8px;
74
75
  align-items: center;
75
76
  border-radius: 3px;
76
77
  outline-width: 1px;
@@ -117,6 +118,18 @@
117
118
  content: var(--psp-label--color--content, "Color");
118
119
  }
119
120
 
121
+ label#window-frame-label:before {
122
+ content: var(--psp-label--window-frame--content, "Frame");
123
+ }
124
+
125
+ label#window-offset-label:before {
126
+ content: var(--psp-label--window-offset--content, "Offset");
127
+ }
128
+
129
+ label#window-alpha-label:before {
130
+ content: var(--psp-label--window-alpha--content, "Alpha");
131
+ }
132
+
120
133
  label#format-label:before {
121
134
  content: var(--psp-label--format--content, "Format");
122
135
  }
@@ -296,6 +309,58 @@
296
309
  }
297
310
 
298
311
  div.tab-title#Attributes:before {
299
- content: var(--psp-label--attributes-tab--content, "Attributes");
312
+ content: var(--psp-label--attributes-tab--content, "Expression");
313
+ }
314
+
315
+ div.tab-title#Window:before {
316
+ content: var(--psp-label--window-tab--content, "Window");
317
+ }
318
+ }
319
+
320
+ #window-tab {
321
+ display: flex;
322
+ flex-direction: column;
323
+ flex: 1;
324
+ }
325
+
326
+ #window-editor-container .window-editor-error {
327
+ color: var(--error--color, #ff5942);
328
+ font-size: 11px;
329
+ }
330
+
331
+ :host {
332
+ #column_settings_sidebar {
333
+ .sidebar_header {
334
+ padding-right: 24px;
335
+ }
336
+ }
337
+
338
+ #window-order-by .column-selector-column-border {
339
+ padding-right: 8px;
340
+ }
341
+
342
+ .sidebar_pin_button {
343
+ position: absolute;
344
+ right: 6px;
345
+ width: 14px;
346
+ height: 14px;
347
+ z-index: 8;
348
+ cursor: pointer;
349
+ background-color: var(--psp--color);
350
+ opacity: 0.5;
351
+ background-repeat: no-repeat;
352
+ -webkit-mask-size: cover;
353
+ mask-size: cover;
354
+ -webkit-mask-image: var(--psp-icon--pin--mask-image);
355
+ mask-image: var(--psp-icon--pin--mask-image);
356
+ transform: rotate(45deg);
357
+ &:hover {
358
+ opacity: 1;
359
+ }
360
+
361
+ &.is-pinned {
362
+ transform: none;
363
+ opacity: 1;
364
+ }
300
365
  }
301
366
  }
@@ -13,7 +13,8 @@
13
13
 
14
14
  :host {
15
15
  #column-style-container,
16
- #plugin-config-container {
16
+ #plugin-config-container,
17
+ #window-editor-container {
17
18
  outline: none;
18
19
  user-select: none;
19
20
 
@@ -81,8 +82,8 @@
81
82
  label {
82
83
  display: block;
83
84
  font-size: var(--label--font-size, 0.75em);
84
- margin: 4px 0 2px 0;
85
85
  width: 100%;
86
+ margin: 4px 0 2px 0;
86
87
  }
87
88
 
88
89
  span.reset-default-style-disabled {
@@ -160,7 +161,7 @@
160
161
 
161
162
  .column-style-label {
162
163
  display: flex;
163
- padding: 4px 0px;
164
+ padding: 0px;
164
165
  }
165
166
 
166
167
  .indent {
@@ -60,7 +60,8 @@
60
60
  }
61
61
  }
62
62
 
63
- #top_panel {
63
+ #top_panel,
64
+ #window-editor-slots {
64
65
  display: flex;
65
66
  flex-direction: column;
66
67
  justify-content: stretch;
@@ -176,6 +177,7 @@
176
177
  flex: 1 1 auto;
177
178
  align-self: stretch;
178
179
  position: relative;
180
+ min-height: 24px;
179
181
  &:before {
180
182
  content: " ";
181
183
  position: absolute;
@@ -199,12 +201,46 @@
199
201
  pointer-events: none;
200
202
  }
201
203
 
204
+ /* `--psp-label--pivot--content` is set inline by the pivot slot
205
+ * when the ACTIVE plugin declares what the field draws (a `Y Line`
206
+ * groups by its X axis; a `Treemap` by its hierarchy). The slot
207
+ * emits an intl var reference rather than words, so these labels
208
+ * localize like any other.
209
+ *
210
+ * The role leads and the field's own name follows as a secondary
211
+ * label, so the reader learns what this slot DRAWS without losing
212
+ * which config field it IS - and a plugin that declares no role
213
+ * shows just the field name, exactly as before. The slot sets
214
+ * `--psp-label--pivot-secondary--display` as a presence flag,
215
+ * since CSS cannot test whether a custom property is set. */
202
216
  #group_by label.pivot-selector-label:before {
203
- content: var(--psp-label--group-by--content, "Group By");
217
+ content: var(
218
+ --psp-label--pivot--content,
219
+ var(--psp-label--group-by--content, "Group By")
220
+ );
221
+ }
222
+
223
+ #group_by label.pivot-selector-label:after {
224
+ content: "(" var(--psp-label--group-by--content, "Group By") ")";
204
225
  }
205
226
 
206
227
  #split_by label.pivot-selector-label:before {
207
- content: var(--psp-label--split-by--content, "Split By");
228
+ content: var(
229
+ --psp-label--pivot--content,
230
+ var(--psp-label--split-by--content, "Split By")
231
+ );
232
+ }
233
+
234
+ #split_by label.pivot-selector-label:after {
235
+ content: "(" var(--psp-label--split-by--content, "Split By") ")";
236
+ }
237
+
238
+ #group_by label.pivot-selector-label:after,
239
+ #split_by label.pivot-selector-label:after {
240
+ display: var(--psp-label--pivot-secondary--display, none);
241
+ margin-left: 6px;
242
+ opacity: 0.6;
243
+ font-size: 0.9em;
208
244
  }
209
245
 
210
246
  #sort label.pivot-selector-label:before {
@@ -215,6 +251,21 @@
215
251
  content: var(--psp-label--filter--content, "Where");
216
252
  }
217
253
 
254
+ #window-source label.pivot-selector-label:before {
255
+ content: var(--psp-label--window-source--content, "Column");
256
+ }
257
+
258
+ #window-order-by label.pivot-selector-label:before {
259
+ content: var(--psp-label--window-order-by--content, "Order By");
260
+ }
261
+
262
+ #window-partition-by label.pivot-selector-label:before {
263
+ content: var(
264
+ --psp-label--window-partition-by--content,
265
+ "Partition By"
266
+ );
267
+ }
268
+
218
269
  .rrow {
219
270
  display: flex;
220
271
  min-height: 24px;
@@ -303,7 +354,8 @@
303
354
  }
304
355
  }
305
356
 
306
- .group_rollup_wrapper {
357
+ .group_rollup_wrapper,
358
+ .split_rollup_wrapper {
307
359
  margin-bottom: -30px;
308
360
  flex: 0 1 auto;
309
361
  color: var(--psp-inactive--color);
@@ -341,6 +393,10 @@
341
393
  }
342
394
  }
343
395
 
396
+ #window-editor-slots .pivot-column {
397
+ min-height: 24px;
398
+ }
399
+
344
400
  .sort-icon {
345
401
  display: inline-flex;
346
402
  margin-left: auto;
@@ -38,12 +38,13 @@
38
38
  cursor: pointer;
39
39
  white-space: nowrap;
40
40
 
41
+ /* The dropdown-menu surface's inverted hover, from the same theme keys
42
+ * (`--psp--color`/`--psp--background-color` land on the host via the
43
+ * modal selector groups) — the Copy/Export pickers this menu spawns use
44
+ * exactly this idiom. */
41
45
  &:hover {
42
- background: var(
43
- --psp-context-menu--hover--background,
44
- var(--psp-active--background, rgba(0, 0, 0, 0.08))
45
- );
46
- color: var(--psp-context-menu--hover--color, inherit);
46
+ background-color: var(--psp--color);
47
+ color: var(--psp--background-color);
47
48
  }
48
49
 
49
50
  &.disabled {
@@ -51,7 +52,7 @@
51
52
  cursor: default;
52
53
 
53
54
  &:hover {
54
- background: transparent;
55
+ background-color: transparent;
55
56
  color: inherit;
56
57
  }
57
58
  }
@@ -86,6 +87,11 @@
86
87
  max-height: 50vh;
87
88
  overflow-y: auto;
88
89
  background-color: var(--psp--background-color, white);
90
+
91
+ /* The flyout is a CHILD of its (necessarily hovered, so inverted) parent
92
+ * item — un-hovered rows must not inherit the parent's inverted
93
+ * foreground. */
94
+ color: var(--psp--color);
89
95
  border: 1px solid var(--psp-inactive--color);
90
96
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
91
97
  }
@@ -28,11 +28,11 @@
28
28
  display: flex;
29
29
  flex-direction: column;
30
30
  .tab-section:last-child {
31
- padding: 12px 0px 12px 8px;
31
+ padding: 13px 0px 12px 8px;
32
32
  }
33
33
 
34
34
  .tab-section {
35
- padding: 12px 0px 0px 8px;
35
+ padding: 6px 0 0 8px;
36
36
  flex: 0 0 auto;
37
37
  overflow: hidden;
38
38
  }
@@ -23,10 +23,9 @@
23
23
  height: 100px;
24
24
  }
25
25
 
26
- #editor-inner {
26
+ /* `position`/`display` come from `.mirrored-textarea`. */
27
+ .editor-inner {
27
28
  overflow: hidden;
28
- position: relative;
29
- display: flex;
30
29
  flex: 1 1 auto;
31
30
  }
32
31
 
@@ -0,0 +1,81 @@
1
+ /* ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
2
+ * ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
3
+ * ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
4
+ * ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
5
+ * ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
6
+ * ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
7
+ * ┃ Copyright (c) 2017, the Perspective Authors. ┃
8
+ * ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
9
+ * ┃ This file is part of the Perspective library, distributed under the terms ┃
10
+ * ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
11
+ * ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
12
+ */
13
+
14
+ /* Geometry for `components/form/mirrored_textarea.rs`: an invisible
15
+ * `<textarea>` stacked over a `<pre>` mirror of its text, so that layout -
16
+ * not a JS resize loop - sizes the box.
17
+ *
18
+ * This file fixes ONLY what must agree between the two layers, because
19
+ * every disagreement shows up as a caret sitting somewhere other than the
20
+ * glyphs it is between. Consumers own the rest of the box (padding,
21
+ * border, min/max size) and choose the growth axes via `white-space`. */
22
+
23
+ :host {
24
+ .mirrored-textarea {
25
+ position: relative;
26
+ display: flex;
27
+
28
+ /* Anything affecting glyph advance or line breaking must be
29
+ * identical in both layers - hence one selector, never two. */
30
+ & > .mirrored-textarea-input,
31
+ & > .mirrored-textarea-mirror {
32
+ box-sizing: border-box;
33
+ font: inherit;
34
+ letter-spacing: inherit;
35
+ line-height: inherit;
36
+ tab-size: inherit;
37
+ margin: 0;
38
+ border: none;
39
+ white-space: pre-wrap;
40
+ overflow-wrap: anywhere;
41
+ }
42
+
43
+ & > .mirrored-textarea-input {
44
+ position: absolute;
45
+ inset: 0;
46
+ width: 100%;
47
+ height: 100%;
48
+
49
+ /* The container's padding, so the two layers' text origins
50
+ * and wrap widths coincide however a consumer pads the box:
51
+ * the mirror starts at the content box, and this element
52
+ * covers the padding box and re-applies the same inset. */
53
+ padding: inherit;
54
+
55
+ resize: none;
56
+ outline: none;
57
+ overscroll-behavior: none;
58
+
59
+ /* Functional, not visual: keystrokes, selection and caret
60
+ * only. The glyphs the user reads are the mirror's. */
61
+ color: transparent;
62
+ background-color: transparent;
63
+ caret-color: var(--psp--color, #161616);
64
+ }
65
+
66
+ & > .mirrored-textarea-mirror {
67
+ /* Clicks and drags belong to the input layer above. */
68
+ pointer-events: none;
69
+ }
70
+
71
+ /* The mirror paints everything the user sees, INCLUDING the
72
+ * placeholder: a consumer supplies it as `content` on
73
+ * `.is-empty`, which the intl label mechanism can localize.
74
+ * The native `placeholder` attribute stays for assistive tech
75
+ * but is never painted - it would double up, and no stylesheet
76
+ * can translate an attribute. */
77
+ & > .mirrored-textarea-input::placeholder {
78
+ color: transparent;
79
+ }
80
+ }
81
+ }