@perspective-dev/viewer 5.3.1 → 5.4.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 (255) hide show
  1. package/dist/cdn/perspective-viewer.js +6 -6
  2. package/dist/cdn/perspective-viewer.js.map +2 -2
  3. package/dist/css/blueprint.css +1 -1
  4. package/dist/css/botanical.css +1 -1
  5. package/dist/css/dracula.css +1 -1
  6. package/dist/css/eggplant.css +1 -1
  7. package/dist/css/gruvbox-dark.css +1 -1
  8. package/dist/css/gruvbox.css +1 -1
  9. package/dist/css/icons.css +1 -1
  10. package/dist/css/intl/ar.css +1 -0
  11. package/dist/css/intl/de.css +1 -1
  12. package/dist/css/intl/es.css +1 -1
  13. package/dist/css/intl/fr.css +1 -1
  14. package/dist/css/intl/ja.css +1 -1
  15. package/dist/css/intl/pt.css +1 -1
  16. package/dist/css/intl/zh.css +1 -1
  17. package/dist/css/intl.css +1 -1
  18. package/dist/css/ledger.css +1 -1
  19. package/dist/css/monokai.css +1 -1
  20. package/dist/css/nord.css +1 -1
  21. package/dist/css/phosphor.css +1 -1
  22. package/dist/css/pro-dark.css +1 -1
  23. package/dist/css/pro.css +1 -1
  24. package/dist/css/solarized-dark.css +1 -1
  25. package/dist/css/solarized.css +1 -1
  26. package/dist/css/themes.css +1 -1
  27. package/dist/css/vaporwave.css +1 -1
  28. package/dist/css/velvet.css +1 -1
  29. package/dist/docs/perspective-docs.json +1 -1
  30. package/dist/esm/extensions.d.ts +0 -5
  31. package/dist/esm/perspective-viewer.inline.js +9 -9
  32. package/dist/esm/perspective-viewer.inline.js.map +3 -3
  33. package/dist/esm/perspective-viewer.js +5 -5
  34. package/dist/esm/perspective-viewer.js.map +2 -2
  35. package/dist/esm/ts-rs/ViewOnUpdateResp.d.ts +1 -1
  36. package/dist/wasm/perspective-viewer.d.ts +62 -73
  37. package/dist/wasm/perspective-viewer.js +226 -238
  38. package/dist/wasm/perspective-viewer.wasm +0 -0
  39. package/dist/wasm/perspective-viewer.wasm.d.ts +18 -28
  40. package/package.json +7 -7
  41. package/src/css/_context_menu.css +1 -1
  42. package/src/css/_dropdown_menu.css +1 -1
  43. package/src/css/_viewer_bundle.css +7 -8
  44. package/src/css/column-dropdown.css +0 -3
  45. package/src/css/column-selector.css +8 -5
  46. package/src/css/column-settings-panel.css +0 -225
  47. package/src/css/column-style.css +13 -0
  48. package/src/css/config-selector.css +18 -10
  49. package/src/css/filter-dropdown.css +5 -5
  50. package/src/css/form/debug.css +28 -4
  51. package/src/css/function-dropdown.css +5 -5
  52. package/src/css/panel-tab.css +23 -0
  53. package/src/css/plugin-selector.css +5 -5
  54. package/src/css/render-warning.css +1 -1
  55. package/src/css/status-bar.css +52 -21
  56. package/src/css/type-icon.css +1 -3
  57. package/src/css/{containers → ui/containers}/context-menu.css +22 -16
  58. package/src/css/ui/containers/dropdown-menu-items.css +66 -0
  59. package/src/css/{containers → ui/containers}/dropdown-menu.css +8 -53
  60. package/src/css/viewer.css +32 -26
  61. package/src/rust/components/chat_panel.rs +1 -1
  62. package/src/rust/components/{form/code_editor.rs → code_editor.rs} +4 -2
  63. package/src/rust/components/column_dropdown.rs +2 -2
  64. package/src/rust/components/column_selector/active_column.rs +15 -9
  65. package/src/rust/components/column_selector/aggregate_selector.rs +1 -1
  66. package/src/rust/components/column_selector/config_selector.rs +2 -2
  67. package/src/rust/components/column_selector/filter_column.rs +8 -5
  68. package/src/rust/components/column_selector/inactive_column.rs +4 -2
  69. package/src/rust/components/column_selector/pivot_column.rs +4 -3
  70. package/src/rust/components/column_selector/sort_column.rs +7 -4
  71. package/src/rust/components/column_selector.rs +3 -3
  72. package/src/rust/components/column_settings_sidebar/style_tab/agg_depth_selector.rs +1 -1
  73. package/src/rust/components/column_settings_sidebar/style_tab/primitive_field.rs +15 -17
  74. package/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_selector.rs +1 -1
  75. package/src/rust/components/column_settings_sidebar/style_tab.rs +4 -5
  76. package/src/rust/components/column_settings_sidebar.rs +3 -4
  77. package/src/rust/components/copy_dropdown.rs +1 -1
  78. package/src/rust/components/datetime_column_style/custom.rs +1 -3
  79. package/src/rust/components/datetime_column_style/simple.rs +1 -2
  80. package/src/rust/components/datetime_column_style.rs +1 -2
  81. package/src/rust/components/{form/debug.rs → debug_panel.rs} +5 -5
  82. package/src/rust/components/{containers/dragdrop_list.rs → dragdrop_list.rs} +2 -10
  83. package/src/rust/components/export_dropdown.rs +1 -1
  84. package/src/rust/components/expression_editor.rs +1 -1
  85. package/src/rust/components/filter_dropdown.rs +2 -2
  86. package/src/rust/components/function_dropdown.rs +2 -2
  87. package/src/rust/components/main_panel/frame_theme.rs +3 -59
  88. package/src/rust/components/main_panel/reconcile.rs +9 -4
  89. package/src/rust/components/main_panel/render.rs +62 -11
  90. package/src/rust/components/main_panel/update.rs +39 -10
  91. package/src/rust/components/main_panel.rs +26 -2
  92. package/src/rust/components/mod.rs +5 -7
  93. package/src/rust/components/new_panel_menu.rs +97 -0
  94. package/src/rust/components/number_series_style.rs +2 -3
  95. package/src/rust/components/panel_menu.rs +61 -87
  96. package/src/rust/components/panel_tab.rs +100 -43
  97. package/src/rust/components/plugin_tab.rs +1 -1
  98. package/src/rust/components/render_warning.rs +2 -2
  99. package/src/rust/components/{status_bar_counter.rs → rows_counter.rs} +10 -10
  100. package/src/rust/components/settings_panel.rs +2 -2
  101. package/src/rust/components/status_bar.rs +113 -19
  102. package/src/rust/components/status_indicator.rs +5 -14
  103. package/src/rust/components/string_column_style.rs +1 -2
  104. package/src/rust/components/{style/mod.rs → style.rs} +32 -15
  105. package/src/rust/components/style_controls/number_string_format/digits_section.rs +3 -5
  106. package/src/rust/components/style_controls/number_string_format/misc_section.rs +1 -1
  107. package/src/rust/components/style_controls/number_string_format/style_section.rs +1 -1
  108. package/src/rust/components/viewer/msg.rs +43 -30
  109. package/src/rust/components/viewer/panels.rs +50 -19
  110. package/src/rust/components/viewer/render.rs +15 -13
  111. package/src/rust/components/viewer/settings.rs +137 -68
  112. package/src/rust/components/viewer/snapshots.rs +5 -10
  113. package/src/rust/components/viewer/wiring.rs +1 -21
  114. package/src/rust/components/viewer.rs +15 -10
  115. package/src/rust/components/window_editor.rs +8 -9
  116. package/src/rust/config/column_config_schema.rs +2 -27
  117. package/src/rust/config/mod.rs +0 -2
  118. package/src/rust/config/workspace_config.rs +2 -1
  119. package/src/rust/custom_elements/debug_plugin.rs +1 -10
  120. package/src/rust/custom_elements/mod.rs +0 -3
  121. package/src/rust/custom_elements/viewer.rs +0 -18
  122. package/src/rust/js/plugin.rs +0 -86
  123. package/src/rust/lib.rs +12 -15
  124. package/src/rust/presentation/column_locator.rs +3 -7
  125. package/src/rust/presentation.rs +68 -38
  126. package/src/rust/queries/hosted_tables.rs +38 -0
  127. package/src/rust/queries/mod.rs +2 -0
  128. package/src/rust/queries/palette_set.rs +1 -1
  129. package/src/rust/renderer/activate.rs +1 -3
  130. package/src/rust/renderer/dispatch.rs +83 -22
  131. package/src/rust/renderer/limits.rs +24 -5
  132. package/src/rust/renderer/plugin_config.rs +1 -0
  133. package/src/rust/renderer/props.rs +2 -1
  134. package/src/rust/renderer.rs +14 -27
  135. package/src/rust/session/props.rs +4 -3
  136. package/src/rust/session/view_subscription.rs +19 -6
  137. package/src/rust/session.rs +38 -70
  138. package/src/rust/tasks/create_panel.rs +1 -1
  139. package/src/rust/tasks/dismiss_render_warning.rs +1 -1
  140. package/src/rust/tasks/eject.rs +1 -0
  141. package/src/rust/tasks/pipeline.rs +0 -60
  142. package/src/rust/tasks/presize_panels.rs +24 -1
  143. package/src/rust/tasks/restore_and_render.rs +0 -17
  144. package/src/rust/tasks/send_column_config.rs +1 -1
  145. package/src/rust/tasks/send_plugin_config.rs +1 -1
  146. package/src/rust/tasks/set_edit_mode.rs +1 -1
  147. package/src/rust/{components → ui}/containers/control_group.rs +25 -3
  148. package/src/rust/{components → ui}/containers/dropdown_menu.rs +5 -2
  149. package/src/rust/{components → ui}/containers/mod.rs +0 -4
  150. package/src/rust/{components → ui}/containers/scroll_panel.rs +0 -22
  151. package/src/rust/{components → ui}/containers/scroll_panel_item.rs +0 -13
  152. package/src/rust/{components → ui}/containers/select.rs +0 -6
  153. package/src/rust/{components → ui}/containers/sidebar.rs +5 -32
  154. package/src/rust/{components → ui}/containers/split_panel.rs +8 -80
  155. package/src/rust/{components → ui}/containers/tab_list.rs +15 -9
  156. package/src/rust/{components → ui}/context_menu.rs +8 -13
  157. package/src/rust/{presentation/drag_helpers.rs → ui/dragdrop.rs} +26 -31
  158. package/src/rust/{components → ui}/font_loader.rs +0 -26
  159. package/src/rust/{components → ui}/form/color_selector.rs +4 -2
  160. package/src/rust/ui/form/intl_label.rs +81 -0
  161. package/src/rust/{components → ui}/form/mirrored_textarea.rs +0 -53
  162. package/src/rust/{components → ui}/form/mod.rs +1 -10
  163. package/src/rust/{components → ui}/form/multi_stop_gradient_selector.rs +4 -5
  164. package/src/rust/{components → ui}/form/named_value_picker.rs +1 -6
  165. package/src/rust/{components → ui}/form/number_field.rs +1 -1
  166. package/src/rust/{components → ui}/form/number_range_field.rs +1 -1
  167. package/src/rust/{components → ui}/form/optional_field.rs +3 -1
  168. package/src/rust/{components → ui}/form/palette_selector.rs +4 -5
  169. package/src/rust/{components → ui}/form/select_enum_field.rs +2 -2
  170. package/src/rust/{components → ui}/form/select_value_field.rs +2 -2
  171. package/src/rust/ui/mod.rs +56 -0
  172. package/src/rust/ui/modal.rs +61 -0
  173. package/src/rust/{components → ui}/portal.rs +174 -79
  174. package/src/rust/{components/style/style_provider.rs → ui/style.rs} +4 -34
  175. package/src/rust/utils/completion.rs +0 -6
  176. package/src/rust/{config/css_scale.rs → utils/css.rs} +38 -35
  177. package/src/rust/utils/mod.rs +2 -0
  178. package/src/rust/workspace.rs +35 -0
  179. package/src/svg/boolean-type.svg +3 -2
  180. package/src/svg/checkbox-checked-icon.svg +4 -7
  181. package/src/svg/checkbox-hover.svg +3 -3
  182. package/src/svg/checkbox-off.svg +2 -3
  183. package/src/svg/checkbox-on.svg +3 -3
  184. package/src/svg/checkbox-unchecked-icon.svg +3 -3
  185. package/src/svg/datagrid-select-column.svg +8 -15
  186. package/src/svg/datagrid-select-region.svg +8 -15
  187. package/src/svg/datagrid-select-row-tree.svg +7 -12
  188. package/src/svg/datagrid-select-row.svg +8 -13
  189. package/src/svg/date-type.svg +4 -23
  190. package/src/svg/drawer-tab-hover.svg +4 -6
  191. package/src/svg/drawer-tab-invert-hover.svg +5 -5
  192. package/src/svg/drawer-tab-invert.svg +3 -5
  193. package/src/svg/drawer-tab.svg +5 -5
  194. package/src/svg/mega-menu-icons-candlestick.svg +5 -37
  195. package/src/svg/mega-menu-icons-ohlc.svg +4 -39
  196. package/src/svg/mega-menu-icons-sunburst.svg +4 -38
  197. package/src/svg/mega-menu-icons-treemap.svg +3 -43
  198. package/src/svg/mega-menu-icons-y-scatter.svg +12 -72
  199. package/src/svg/new-panel-icon.svg +4 -0
  200. package/src/svg/number-type.svg +3 -3
  201. package/src/svg/radio-hover.svg +3 -3
  202. package/src/svg/radio-off.svg +3 -3
  203. package/src/svg/radio-on.svg +3 -3
  204. package/src/svg/status_ok.svg +3 -26
  205. package/src/svg/string-type.svg +4 -8
  206. package/src/svg/theme-icon.svg +5 -5
  207. package/src/themes/blueprint.css +0 -57
  208. package/src/themes/botanical.css +0 -36
  209. package/src/themes/defaults.css +1 -24
  210. package/src/themes/dracula.css +0 -58
  211. package/src/themes/eggplant.css +0 -58
  212. package/src/themes/gruvbox-dark.css +0 -65
  213. package/src/themes/gruvbox.css +1 -39
  214. package/src/themes/icons.css +1 -8
  215. package/src/themes/intl/ar.css +185 -0
  216. package/src/themes/intl/de.css +45 -35
  217. package/src/themes/intl/es.css +40 -30
  218. package/src/themes/intl/fr.css +39 -29
  219. package/src/themes/intl/ja.css +41 -31
  220. package/src/themes/intl/pt.css +37 -27
  221. package/src/themes/intl/zh.css +47 -37
  222. package/src/themes/intl.css +16 -3
  223. package/src/themes/ledger.css +1 -59
  224. package/src/themes/monokai.css +0 -51
  225. package/src/themes/nord.css +0 -55
  226. package/src/themes/phosphor.css +0 -48
  227. package/src/themes/pro-dark.css +0 -37
  228. package/src/themes/pro.css +3 -23
  229. package/src/themes/solarized-dark.css +0 -31
  230. package/src/themes/solarized.css +1 -24
  231. package/src/themes/vaporwave.css +0 -44
  232. package/src/themes/velvet.css +0 -60
  233. package/src/ts/extensions.ts +0 -13
  234. package/src/ts/ts-rs/ViewOnUpdateResp.ts +1 -1
  235. package/src/css/plugin-settings-panel.css +0 -171
  236. package/src/rust/components/modal.rs +0 -177
  237. package/src/rust/custom_elements/copy_dropdown.rs +0 -219
  238. package/src/rust/custom_elements/export_dropdown.rs +0 -216
  239. package/src/rust/custom_elements/modal.rs +0 -299
  240. /package/dist/wasm/snippets/{perspective-viewer-87bd21b215d0631a → perspective-viewer-adc6f3f79141112b}/inline0.js +0 -0
  241. /package/dist/wasm/snippets/{perspective-viewer-87bd21b215d0631a → perspective-viewer-adc6f3f79141112b}/inline1.js +0 -0
  242. /package/dist/wasm/snippets/{perspective-viewer-87bd21b215d0631a → perspective-viewer-adc6f3f79141112b}/inline2.js +0 -0
  243. /package/dist/wasm/snippets/{perspective-viewer-87bd21b215d0631a → perspective-viewer-adc6f3f79141112b}/inline3.js +0 -0
  244. /package/dist/wasm/snippets/{perspective-viewer-87bd21b215d0631a → perspective-viewer-adc6f3f79141112b}/inline4.js +0 -0
  245. /package/dist/wasm/snippets/{perspective-viewer-87bd21b215d0631a → perspective-viewer-adc6f3f79141112b}/inline5.js +0 -0
  246. /package/src/css/{containers → ui/containers}/scroll-panel.css +0 -0
  247. /package/src/css/{containers → ui/containers}/split-panel.css +0 -0
  248. /package/src/css/{containers → ui/containers}/tabs.css +0 -0
  249. /package/src/css/{dom → ui/dom}/checkbox.css +0 -0
  250. /package/src/css/{dom → ui/dom}/scrollbar.css +0 -0
  251. /package/src/css/{dom → ui/dom}/select.css +0 -0
  252. /package/src/css/{form → ui/form}/mirrored-textarea.css +0 -0
  253. /package/src/rust/components/{form → code_editor}/highlight.rs +0 -0
  254. /package/src/rust/{components → ui}/containers/sidebar_close_button.rs +0 -0
  255. /package/src/rust/{components → ui}/form/number_input.rs +0 -0
@@ -90,6 +90,10 @@
90
90
  mask-image: var(--psp-icon--active-indicator--mask-image);
91
91
  }
92
92
 
93
+ :host([part~="tab"].closing) {
94
+ pointer-events: none;
95
+ }
96
+
93
97
  /* A lone tab (its viewer has a single plugin child) has no stack to open —
94
98
  * no caret. Must follow the `.active` rule (equal specificity) to win when
95
99
  * the lone tab is also active. */
@@ -139,6 +143,25 @@
139
143
  outline: none;
140
144
  }
141
145
 
146
+ span#rows {
147
+ display: flex;
148
+ align-items: baseline;
149
+ gap: 6px;
150
+ margin-left: 12px;
151
+ margin-right: 6px;
152
+ pointer-events: none;
153
+ white-space: nowrap;
154
+ overflow: hidden;
155
+ text-overflow: ellipsis;
156
+ flex: 0 100000000 auto;
157
+ }
158
+
159
+ span#rows span.x,
160
+ span#rows span.total {
161
+ text-overflow: ellipsis;
162
+ color: var(--psp-inactive--color);
163
+ }
164
+
142
165
  .psp-tab-master {
143
166
  margin-right: 6px;
144
167
  }
@@ -34,11 +34,12 @@
34
34
  margin: 0 0px 0 -9px;
35
35
 
36
36
  #plugin_selector_border {
37
- height: 2px;
38
- min-height: 2px;
37
+ height: 3px;
38
+ min-height: 3px;
39
39
  width: 100%;
40
- background-color: var(--psp-inactive--color, #6e6e6e);
41
- margin-top: 2px;
40
+ margin-top: 1px;
41
+ background-color: #00000020;
42
+ border-bottom: 1px solid var(--psp-inactive--color, #6e6e6e);
42
43
  }
43
44
 
44
45
  .plugin-selector-options {
@@ -85,7 +86,6 @@
85
86
  );
86
87
  display: flex;
87
88
  align-items: center;
88
- border-bottom: 1px solid transparent;
89
89
  box-shadow: 0px 1px var(--psp-inactive--color, #6e6e6e);
90
90
  cursor: pointer;
91
91
  }
@@ -46,7 +46,7 @@
46
46
  }
47
47
 
48
48
  .plugin_information__icon:before {
49
- content: var(--psp-icon-overflow-hint--content);
49
+ content: var(--psp-icon-overflow-hint--content, var(--psp-missing));
50
50
  height: 20px;
51
51
  font-family: var(
52
52
  --overflow_hint--font-family,
@@ -46,10 +46,9 @@
46
46
  box-shadow: 0 1px 0 0px var(--psp-inactive--color);
47
47
  z-index: 6;
48
48
  display: var(--psp-status-bar--display, flex);
49
- gap: 4px;
50
49
  align-items: center;
51
50
  background: var(--psp--background-color);
52
- padding: var(--psp-status-bar--padding, 0 31px 0 4px);
51
+ padding: var(--psp-status-bar--padding, 0 26px 0 4px);
53
52
  position: relative;
54
53
  height: var(--psp-status-bar--height, 38px);
55
54
  min-height: var(--psp-status-bar--height, 38px);
@@ -69,21 +68,28 @@
69
68
  flex: 1 1000 auto;
70
69
  }
71
70
 
72
- span#rows {
73
- display: flex;
74
- align-items: flex-end;
75
- gap: 6px;
76
- flex: 0 1000 auto;
77
- overflow: hidden;
78
- margin: 0px 0px;
79
- pointer-events: none;
80
- span {
81
- margin: 0 !important;
71
+ #panel-bar {
72
+ flex: 0 0 auto;
73
+ height: 100%;
74
+ }
75
+
76
+ span#new_panel {
77
+ & > .icon {
78
+ -webkit-mask-image: var(--psp-icon--new-panel--mask-image);
79
+ mask-image: var(--psp-icon--new-panel--mask-image);
80
+ display: inline-flex;
81
+ &:before {
82
+ line-height: 0;
83
+ content: var(--psp-icon--new-panel--mask-image);
84
+ visibility: hidden;
85
+ }
82
86
  }
83
87
 
84
- span.x,
85
- span.total {
86
- color: var(--psp-inactive--color);
88
+ span:not(.icon):before {
89
+ content: var(
90
+ --psp-label--new-panel-button--content,
91
+ var(--psp-missing)
92
+ );
87
93
  }
88
94
  }
89
95
 
@@ -371,7 +377,10 @@
371
377
  }
372
378
 
373
379
  span:not(.icon):before {
374
- content: var(--psp-label--export-button--content, "Export");
380
+ content: var(
381
+ --psp-label--export-button--content,
382
+ var(--psp-missing)
383
+ );
375
384
  }
376
385
  }
377
386
 
@@ -400,7 +409,10 @@
400
409
  }
401
410
  }
402
411
  span:not(.icon):before {
403
- content: var(--psp-label--reset-button--content);
412
+ content: var(
413
+ --psp-label--reset-button--content,
414
+ var(--psp-missing)
415
+ );
404
416
  }
405
417
  }
406
418
 
@@ -418,7 +430,10 @@
418
430
  }
419
431
 
420
432
  span:not(.icon):before {
421
- content: var(--psp-label--copy-button--content);
433
+ content: var(
434
+ --psp-label--copy-button--content,
435
+ var(--psp-missing)
436
+ );
422
437
  }
423
438
  }
424
439
 
@@ -440,8 +455,12 @@
440
455
  height: 100%;
441
456
  }
442
457
 
458
+ .select-arrow {
459
+ margin: 0;
460
+ }
461
+
443
462
  & > .icon {
444
- margin: 0 6px 0 4px;
463
+ margin: 0 2px 0 2px;
445
464
  height: auto;
446
465
  -webkit-mask-image: var(--psp-icon--theme--mask-image);
447
466
  mask-image: var(--psp-icon--theme--mask-image);
@@ -452,6 +471,10 @@
452
471
  visibility: hidden;
453
472
  }
454
473
  }
474
+
475
+ & > .dropdown-width-container {
476
+ padding-left: 5px;
477
+ }
455
478
  }
456
479
 
457
480
  #theme_icon.modified:hover + #theme > .icon {
@@ -488,6 +511,10 @@
488
511
  }
489
512
  }
490
513
 
514
+ .modal-target .button > span.icon-label {
515
+ display: none !important;
516
+ }
517
+
491
518
  .hover-target {
492
519
  margin: 0;
493
520
  display: inline-flex;
@@ -495,11 +522,15 @@
495
522
  align-items: center;
496
523
 
497
524
  &:focus-within,
498
- &:hover,
499
- &.modal-target {
525
+ &:hover:not(.modal-target) {
500
526
  box-shadow:
501
527
  -4px 0 0 var(--psp--color),
502
528
  4px 0 0 var(--psp--color);
529
+ }
530
+
531
+ &:focus-within,
532
+ &:hover,
533
+ &.modal-target {
503
534
  background-color: var(--psp--color);
504
535
  }
505
536
 
@@ -13,9 +13,7 @@
13
13
 
14
14
  :host #selected-columns .type-icon,
15
15
  :host #sub-columns .type-icon {
16
- /* position: absolute; */
17
- /* left: 15px; */
18
- margin-left: 4px;
16
+ margin-left: 1px;
19
17
  }
20
18
 
21
19
  :host .icon {
@@ -12,24 +12,30 @@
12
12
  */
13
13
 
14
14
  /* Panel context menu (right-click a panel). The `<perspective-context-menu>`
15
- * host is body-mounted by `PortalModal` (which owns position/z-index inline)
16
- * and themed by the document theme rules' modal selector groups — chrome like
17
- * `background-color`/`color`/`border` lands on the HOST from `defaults.css` /
18
- * each theme's `perspective-context-menu[theme="X"]` group, exactly like the
19
- * Copy/Export menus. Only the interior layout + item states live here. */
15
+ * host is a viewer light-DOM child in the top layer (see `PortalModal`),
16
+ * themed by the `--psp-*` vars it inherits; its chrome lives here, exactly
17
+ * like the Copy/Export menus' surface. */
18
+
19
+ @import "./dropdown-menu-items.css";
20
20
 
21
21
  :host {
22
+ overflow: visible;
23
+ padding: 0;
24
+ background-color: var(--psp--background-color, #ffffff);
25
+ color: var(--psp--color, #161616);
26
+ border: 1px solid var(--psp-inactive--color, #ababab);
27
+ border-radius: 0 0 2px 2px;
22
28
  outline: none;
23
29
  user-select: none;
24
30
  font-size: 12px;
25
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
31
+ box-shadow: var(--psp-dropdown--box-shadow);
26
32
  }
27
33
 
28
34
  .context-menu {
29
35
  display: flex;
30
36
  flex-direction: column;
31
37
  min-width: 120px;
32
- padding: 4px 0;
38
+ padding: 0px 0;
33
39
  }
34
40
 
35
41
  .context-menu-item {
@@ -73,17 +79,11 @@
73
79
  }
74
80
  }
75
81
 
76
- /* Hover flyout. Positioned OUTSIDE the host's box, so the host-level theme
77
- * chrome (see the :host comment above) doesn't paint it — rebuild the same
78
- * chrome from the modal selector groups' vars. Edge-adjacent (`left: 100%`,
79
- * no gap) so the pointer never leaves the hover chain crossing into it;
80
- * `top: -5px` aligns its first row with the parent row (4px menu padding +
81
- * 1px border). */
82
82
  .context-menu-submenu {
83
83
  display: none;
84
84
  position: absolute;
85
85
  left: 100%;
86
- top: -5px;
86
+ top: -1px;
87
87
  max-height: 50vh;
88
88
  overflow-y: auto;
89
89
  background-color: var(--psp--background-color, white);
@@ -93,10 +93,16 @@
93
93
  * foreground. */
94
94
  color: var(--psp--color);
95
95
  border: 1px solid var(--psp-inactive--color);
96
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
96
+ box-shadow: var(--psp-dropdown--box-shadow);
97
+ }
98
+
99
+ .context-menu-submenu > .new-panel-menu {
100
+ display: flex;
101
+ flex-direction: column;
102
+ padding: 8px;
103
+ min-width: 120px;
97
104
  }
98
105
 
99
- /* Non-interactive group label (e.g. client names in the "New" sub-menu). */
100
106
  .context-menu-header {
101
107
  padding: 4px 12px 2px;
102
108
  cursor: default;
@@ -0,0 +1,66 @@
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
+ .dropdown-group-label {
15
+ font-size: 0.75em;
16
+ color: var(--psp-inactive--color);
17
+ &:not(:first-of-type) {
18
+ margin-top: 16px;
19
+ }
20
+ }
21
+
22
+ .dropdown-group-label[data-label="new-from-table"]::before {
23
+ content: var(--psp-label--new-from-table--content, var(--psp-missing));
24
+ }
25
+
26
+ .dropdown-group-label[data-label="new-from-panel"]::before {
27
+ content: var(--psp-label--new-from-panel--content, var(--psp-missing));
28
+ }
29
+
30
+ .dropdown-group-sublabel {
31
+ font-size: 0.75em;
32
+ text-transform: uppercase;
33
+ color: var(--psp-inactive--color);
34
+ margin-top: 6px;
35
+ }
36
+
37
+ .dropdown-group-container {
38
+ display: flex;
39
+ flex-direction: column;
40
+ margin: 0;
41
+ }
42
+
43
+ .dropdown-group-label,
44
+ .dropdown-group-sublabel,
45
+ .dropdown-group-container > span,
46
+ .no-results {
47
+ display: inline-flex;
48
+ align-items: center;
49
+ margin: 0 -8px;
50
+ padding: 0 8px;
51
+ }
52
+
53
+ .dropdown-menu-item {
54
+ cursor: pointer;
55
+ min-height: 22px;
56
+ &:hover {
57
+ background-color: var(--psp--color);
58
+ color: var(--psp--background-color);
59
+ }
60
+ }
61
+
62
+ .no-results {
63
+ font-style: italic;
64
+ padding: 6px 24px;
65
+ color: #ccc;
66
+ }
@@ -11,15 +11,17 @@
11
11
  * ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
12
12
  */
13
13
 
14
+ @import "./dropdown-menu-items.css";
15
+
14
16
  :host {
15
- position: fixed;
16
- z-index: 10000;
17
+ overflow: visible;
18
+ background-color: var(--psp--background-color, #ffffff);
19
+ color: var(--psp--color, #161616);
20
+ border: 1px solid var(--psp-inactive--color, #ababab);
21
+ border-radius: 0 0 2px 2px;
17
22
  outline: none;
18
- font-size: 0.75em;
19
- border: inherit;
20
- box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%);
23
+ box-shadow: var(--psp-dropdown--box-shadow);
21
24
  user-select: none;
22
- background-color: white;
23
25
  padding: 8px;
24
26
 
25
27
  display: flex;
@@ -45,51 +47,4 @@
45
47
  color: var(--psp-error--color, #ff0000);
46
48
  border-color: var(--psp-error--color, #ff0000);
47
49
  }
48
-
49
- .selected {
50
- background-color: rgba(0, 0, 0, 0.05);
51
- }
52
-
53
- .dropdown-group-label {
54
- color: var(--psp-inactive--color);
55
-
56
- &:not(:first-of-type) {
57
- margin-top: 16px;
58
- }
59
- }
60
-
61
- .dropdown-group-container {
62
- display: flex;
63
- flex-direction: column;
64
- margin: 0;
65
- }
66
-
67
- span {
68
- min-height: 22px;
69
- display: inline-flex;
70
- align-items: center;
71
- margin: 0 -8px;
72
- padding: 0 8px;
73
- }
74
-
75
- .dropdown-group-container span {
76
- cursor: pointer;
77
- }
78
-
79
- .no-results {
80
- font-style: italics;
81
- padding: 6px 24px;
82
- color: #ccc;
83
- }
84
- }
85
-
86
- :host(:hover) {
87
- .selected {
88
- background-color: transparent;
89
- }
90
-
91
- .dropdown-group-container span:hover {
92
- background-color: var(--psp--color);
93
- color: var(--psp--background-color);
94
- }
95
50
  }
@@ -14,6 +14,7 @@
14
14
  :host {
15
15
  --settings-panel-z-index: 10;
16
16
  --psp--color: #ff0000;
17
+ --psp-missing: "__MISSING__";
17
18
  }
18
19
 
19
20
  :host(.shift-active) .shift-alt-icon {
@@ -89,7 +90,9 @@
89
90
  pointer-events: var(--override-content-pointer-events);
90
91
  }
91
92
 
92
- ::slotted(:not([slot^="statusbar-extra"]):not([slot^="tab-"])) {
93
+ ::slotted(
94
+ :not([slot^="statusbar-extra"]):not([slot^="tab-"]):not([slot="modal"])
95
+ ) {
93
96
  position: absolute;
94
97
  inset: 0;
95
98
  background-color: var(--psp--background-color) !important;
@@ -100,7 +103,10 @@
100
103
  -1.75px 2.75px 0 2.75px var(--psp-inactive--color);
101
104
  }
102
105
 
103
- .overlay ::slotted(:not([slot^="statusbar-extra"]):not([slot^="tab-"])) {
106
+ .overlay
107
+ ::slotted(
108
+ :not([slot^="statusbar-extra"]):not([slot^="tab-"]):not([slot="modal"])
109
+ ) {
104
110
  box-shadow:
105
111
  2.25px 2.25px 0 2.25px var(--psp--background-color),
106
112
  -2.25px 2.25px 0 2.25px var(--psp--background-color),
@@ -338,7 +344,6 @@
338
344
  z-index: 0;
339
345
  position: relative;
340
346
  height: 100%;
341
- box-shadow: var(--plugin--box-shadow, none);
342
347
  overflow: hidden;
343
348
  border: var(--psp-plugin--border, none);
344
349
  background: var(
@@ -487,8 +492,9 @@
487
492
  }
488
493
 
489
494
  & > .split-panel-divider {
495
+ background-color: #00000020;
490
496
  border-top: 1px solid var(--psp-inactive--color, #6e6e6e);
491
- border-bottom: 2px solid var(--psp-inactive--color, #6e6e6e);
497
+ border-bottom: 1px solid var(--psp-inactive--color, #6e6e6e);
492
498
  margin-left: -9px;
493
499
  margin-right: 0px;
494
500
  flex: 0 0 4px;
@@ -584,9 +590,11 @@
584
590
  }
585
591
 
586
592
  .settings_tab {
593
+ overflow: hidden;
594
+ text-overflow: ellipsis;
587
595
  border-right: 1px solid var(--psp-inactive--color);
588
596
  cursor: pointer;
589
- padding: 6px 8px;
597
+ padding: 5px 8px 7px 8px;
590
598
  font-size: var(--label--font-size, 0.75em);
591
599
  text-transform: uppercase;
592
600
  flex: 0 1 100px;
@@ -605,7 +613,7 @@
605
613
  background-color: transparent;
606
614
  border-bottom: 1px solid transparent;
607
615
  box-shadow: 0px 9px 0px -8px var(--psp-inactive--color);
608
- height: calc(100% - 1px);
616
+ height: 23px;
609
617
  }
610
618
  }
611
619
 
@@ -639,36 +647,28 @@
639
647
  }
640
648
 
641
649
  .sidebar_border {
642
- height: 2px;
650
+ height: 3px;
651
+ border-bottom: 1px solid var(--psp-inactive--color, #6e6e6e);
643
652
  width: 100%;
644
- background-color: var(--psp-inactive--color, #6e6e6e);
645
- margin-top: 1px;
653
+ background-color: rgba(0, 0, 0, 0.15);
646
654
  flex-shrink: 0;
647
655
  flex-grow: 0;
648
656
  }
649
657
 
650
658
  #query_tabbar_tab:before {
651
- content: var(--psp-label--query-tab--content);
659
+ content: var(--psp-label--query-tab--content, var(--psp-missing));
652
660
  }
653
661
 
654
662
  #plugin_tabbar_tab:before {
655
- content: var(--psp-label--plugin-tab--content);
663
+ content: var(--psp-label--plugin-tab--content, var(--psp-missing));
656
664
  }
657
665
 
658
666
  #debug_tabbar_tab:before {
659
- content: var(--psp-label--debug-tab--content);
667
+ content: var(--psp-label--debug-tab--content, var(--psp-missing));
660
668
  }
661
669
 
662
670
  #chat_tabbar_tab:before {
663
- content: var(--psp-label--chat-tab--content);
664
- }
665
-
666
- label#stack-label:before {
667
- content: var(--psp-label--stack--content, "Stack");
668
- }
669
-
670
- label#alt_axis-label:before {
671
- content: var(--psp-label--alt-axis--content, "Alt Axis");
671
+ content: var(--psp-label--chat-tab--content, var(--psp-missing));
672
672
  }
673
673
  }
674
674
 
@@ -853,7 +853,10 @@
853
853
  user-select: none;
854
854
  &:before {
855
855
  text-transform: uppercase;
856
- content: var(--psp-label--chat-reasoning--content);
856
+ content: var(
857
+ --psp-label--chat-reasoning--content,
858
+ var(--psp-missing)
859
+ );
857
860
  font-size: var(--psp-label--font-size, 0.75em);
858
861
  }
859
862
  }
@@ -898,7 +901,7 @@
898
901
  align-items: flex-end;
899
902
 
900
903
  /* The prompt is a `MirroredTextarea` (see
901
- * `form/mirrored-textarea.css`): it is exactly as tall as its
904
+ * `ui/form/mirrored-textarea.css`): it is exactly as tall as its
902
905
  * text, so this wrapper owns the visible box and caps how far
903
906
  * that growth goes before it scrolls instead. */
904
907
  #chat_input_scroll {
@@ -933,7 +936,10 @@
933
936
  * `placeholder` attribute is untranslatable and is
934
937
  * kept only for assistive tech. */
935
938
  &.is-empty:before {
936
- content: var(--psp-label--chat-placeholder--content);
939
+ content: var(
940
+ --psp-label--chat-placeholder--content,
941
+ var(--psp-missing)
942
+ );
937
943
  color: var(--psp-inactive--color, #6e6e6e);
938
944
  }
939
945
  }
@@ -965,11 +971,11 @@
965
971
  }
966
972
 
967
973
  #chat_send_button:before {
968
- content: var(--psp-label--chat-send--content);
974
+ content: var(--psp-label--chat-send--content, var(--psp-missing));
969
975
  }
970
976
 
971
977
  #chat_stop_button:before {
972
- content: var(--psp-label--chat-stop--content);
978
+ content: var(--psp-label--chat-stop--content, var(--psp-missing));
973
979
  }
974
980
  }
975
981
 
@@ -18,7 +18,7 @@
18
18
  use yew::prelude::*;
19
19
 
20
20
  use crate::agent::{AgentSlot, ChatEntry, render_markdown};
21
- use crate::components::form::mirrored_textarea::MirroredTextarea;
21
+ use crate::ui::MirroredTextarea;
22
22
 
23
23
  #[derive(Properties, PartialEq)]
24
24
  struct ChatReasoningProps {
@@ -10,6 +10,8 @@
10
10
  // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
11
11
  // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
12
12
 
13
+ mod highlight;
14
+
13
15
  use std::rc::Rc;
14
16
 
15
17
  use perspective_client::ExprValidationError;
@@ -17,10 +19,10 @@ use wasm_bindgen::JsCast;
17
19
  use web_sys::*;
18
20
  use yew::prelude::*;
19
21
 
20
- use crate::components::form::highlight::highlight;
21
- use crate::components::form::mirrored_textarea::MirroredTextarea;
22
+ use self::highlight::highlight;
22
23
  use crate::components::function_dropdown::{FunctionDropDownElement, FunctionDropDownPortal};
23
24
  use crate::exprtk::{Cursor, tokenize};
25
+ use crate::ui::MirroredTextarea;
24
26
  use crate::utils::*;
25
27
 
26
28
  #[derive(Properties, PartialEq)]
@@ -21,9 +21,9 @@ use yew::html::ImplicitClone;
21
21
  use yew::prelude::*;
22
22
 
23
23
  use super::column_selector::InPlaceColumn;
24
- use super::portal::PortalModal;
25
24
  use super::style::StyleSurface;
26
25
  use crate::session::Session;
26
+ use crate::ui::PortalModal;
27
27
  use crate::utils::*;
28
28
  use crate::*;
29
29
 
@@ -216,7 +216,7 @@ impl Component for ColumnDropDownPortal {
216
216
  html! {
217
217
  <PortalModal
218
218
  tag_name="perspective-dropdown"
219
- surface={StyleSurface::ColumnDropdown}
219
+ sheet={StyleSurface::ColumnDropdown.sheet()}
220
220
  {target}
221
221
  own_focus=false
222
222
  {on_close}