@perspective-dev/viewer 5.2.0 → 5.3.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 (133) hide show
  1. package/dist/cdn/perspective-viewer.js +2 -2
  2. package/dist/cdn/perspective-viewer.js.map +2 -2
  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/monokai.css +1 -1
  9. package/dist/css/phosphor.css +1 -1
  10. package/dist/css/pro-dark.css +1 -1
  11. package/dist/css/pro.css +1 -1
  12. package/dist/css/solarized-dark.css +1 -1
  13. package/dist/css/solarized.css +1 -1
  14. package/dist/css/themes.css +1 -1
  15. package/dist/css/vaporwave.css +1 -1
  16. package/dist/docs/perspective-docs.json +1 -1
  17. package/dist/esm/perspective-viewer.d.ts +1 -0
  18. package/dist/esm/perspective-viewer.inline.js +9 -9
  19. package/dist/esm/perspective-viewer.inline.js.map +2 -2
  20. package/dist/esm/perspective-viewer.js +4 -4
  21. package/dist/esm/perspective-viewer.js.map +2 -2
  22. package/dist/esm/plugin.d.ts +10 -0
  23. package/dist/esm/ts-rs/PanelViewerConfig.d.ts +1 -1
  24. package/dist/esm/ts-rs/SaveWorkspaceOptions.d.ts +10 -0
  25. package/dist/esm/ts-rs/ViewerConfig.d.ts +1 -1
  26. package/dist/esm/ts-rs/WorkspaceConfig.d.ts +9 -1
  27. package/dist/esm/ts-rs/WorkspaceConfigUpdate.d.ts +13 -3
  28. package/dist/wasm/perspective-viewer.d.ts +43 -36
  29. package/dist/wasm/perspective-viewer.js +194 -136
  30. package/dist/wasm/perspective-viewer.wasm +0 -0
  31. package/dist/wasm/perspective-viewer.wasm.d.ts +19 -17
  32. package/package.json +1 -1
  33. package/src/css/column-settings-panel.css +9 -5
  34. package/src/css/column-style.css +209 -31
  35. package/src/css/dom/select.css +2 -1
  36. package/src/css/form/code-editor.css +4 -4
  37. package/src/rust/agent/tools.rs +48 -17
  38. package/src/rust/components/column_selector/active_column.rs +2 -2
  39. package/src/rust/components/column_selector/add_expression_button.rs +3 -3
  40. package/src/rust/components/column_selector/aggregate_selector.rs +2 -3
  41. package/src/rust/components/column_selector/config_selector.rs +8 -0
  42. package/src/rust/components/column_selector/expr_edit_button.rs +4 -10
  43. package/src/rust/components/column_selector/inactive_column.rs +2 -2
  44. package/src/rust/components/column_selector.rs +48 -4
  45. package/src/rust/components/column_settings_sidebar/style_tab/primitive_field.rs +293 -126
  46. package/src/rust/components/column_settings_sidebar/style_tab.rs +262 -225
  47. package/src/rust/components/column_settings_sidebar.rs +88 -69
  48. package/src/rust/components/editable_header.rs +85 -144
  49. package/src/rust/components/expression_editor.rs +9 -16
  50. package/src/rust/components/form/code_editor.rs +16 -6
  51. package/src/rust/components/form/debug.rs +1 -0
  52. package/src/rust/components/form/mod.rs +3 -1
  53. package/src/rust/components/form/multi_stop_gradient_selector.rs +476 -0
  54. package/src/rust/components/form/named_value_picker.rs +86 -0
  55. package/src/rust/components/form/palette_selector.rs +440 -0
  56. package/src/rust/components/main_panel/msg.rs +2 -2
  57. package/src/rust/components/main_panel/reconcile.rs +4 -4
  58. package/src/rust/components/plugin_tab.rs +4 -28
  59. package/src/rust/components/settings_panel.rs +25 -20
  60. package/src/rust/components/viewer/msg.rs +46 -7
  61. package/src/rust/components/viewer/panels.rs +11 -9
  62. package/src/rust/components/viewer/render.rs +8 -3
  63. package/src/rust/components/viewer/settings.rs +163 -23
  64. package/src/rust/components/viewer/snapshots.rs +46 -21
  65. package/src/rust/components/viewer/wiring.rs +14 -25
  66. package/src/rust/components/viewer.rs +12 -8
  67. package/src/rust/config/column_config_schema.rs +100 -41
  68. package/src/rust/config/css_scale.rs +882 -0
  69. package/src/rust/config/mod.rs +2 -0
  70. package/src/rust/config/options.rs +10 -0
  71. package/src/rust/config/viewer_config.rs +49 -55
  72. package/src/rust/config/workspace_config.rs +132 -5
  73. package/src/rust/custom_elements/viewer.rs +214 -155
  74. package/src/rust/custom_events.rs +14 -1
  75. package/src/rust/js/regular_layout.rs +3 -3
  76. package/src/rust/lib.rs +2 -0
  77. package/src/rust/presentation/column_locator.rs +19 -5
  78. package/src/rust/presentation.rs +192 -36
  79. package/src/rust/queries/column_locator.rs +74 -44
  80. package/src/rust/queries/get_viewer_config.rs +0 -3
  81. package/src/rust/queries/mod.rs +2 -0
  82. package/src/rust/queries/palette_set.rs +82 -0
  83. package/src/rust/queries/plugin_column_styles.rs +6 -2
  84. package/src/rust/renderer/dispatch.rs +16 -4
  85. package/src/rust/renderer/plugin_config.rs +309 -47
  86. package/src/rust/renderer.rs +15 -42
  87. package/src/rust/session/column_defaults_update.rs +15 -8
  88. package/src/rust/session/metadata.rs +5 -1
  89. package/src/rust/session/props.rs +1 -0
  90. package/src/rust/session.rs +9 -6
  91. package/src/rust/tasks/create_panel.rs +44 -57
  92. package/src/rust/tasks/edit_expression.rs +19 -23
  93. package/src/rust/tasks/edit_window.rs +8 -10
  94. package/src/rust/tasks/eject.rs +4 -1
  95. package/src/rust/tasks/pipeline.rs +2 -2
  96. package/src/rust/tasks/presize_panels.rs +44 -5
  97. package/src/rust/tasks/reset_all.rs +4 -4
  98. package/src/rust/tasks/restore_and_render.rs +17 -44
  99. package/src/rust/tasks/restore_panel.rs +11 -13
  100. package/src/rust/tasks/set_edit_mode.rs +3 -1
  101. package/src/rust/tasks/sync_update_panels.rs +11 -1
  102. package/src/rust/tasks/update_theme.rs +23 -18
  103. package/src/rust/utils/css_vars.rs +26 -0
  104. package/src/rust/utils/mod.rs +2 -0
  105. package/src/rust/utils/spawn.rs +1 -1
  106. package/src/rust/workspace.rs +435 -272
  107. package/src/svg/lock.svg +7 -0
  108. package/src/themes/botanical.css +10 -0
  109. package/src/themes/defaults.css +12 -0
  110. package/src/themes/dracula.css +17 -0
  111. package/src/themes/gruvbox-dark.css +20 -0
  112. package/src/themes/gruvbox.css +10 -0
  113. package/src/themes/icons.css +1 -0
  114. package/src/themes/monokai.css +22 -0
  115. package/src/themes/phosphor.css +5 -0
  116. package/src/themes/pro-dark.css +10 -0
  117. package/src/themes/solarized-dark.css +7 -0
  118. package/src/themes/solarized.css +7 -0
  119. package/src/themes/vaporwave.css +20 -0
  120. package/src/ts/perspective-viewer.ts +1 -0
  121. package/src/ts/plugin.ts +14 -0
  122. package/src/ts/ts-rs/PanelViewerConfig.ts +1 -1
  123. package/src/ts/ts-rs/SaveWorkspaceOptions.ts +11 -0
  124. package/src/ts/ts-rs/ViewerConfig.ts +1 -1
  125. package/src/ts/ts-rs/WorkspaceConfig.ts +8 -2
  126. package/src/ts/ts-rs/WorkspaceConfigUpdate.ts +11 -3
  127. package/src/rust/components/form/color_range_selector.rs +0 -137
  128. /package/dist/wasm/snippets/{perspective-viewer-02e461f3d7062b26 → perspective-viewer-39c3c3b28e3cbd48}/inline0.js +0 -0
  129. /package/dist/wasm/snippets/{perspective-viewer-02e461f3d7062b26 → perspective-viewer-39c3c3b28e3cbd48}/inline1.js +0 -0
  130. /package/dist/wasm/snippets/{perspective-viewer-02e461f3d7062b26 → perspective-viewer-39c3c3b28e3cbd48}/inline2.js +0 -0
  131. /package/dist/wasm/snippets/{perspective-viewer-02e461f3d7062b26 → perspective-viewer-39c3c3b28e3cbd48}/inline3.js +0 -0
  132. /package/dist/wasm/snippets/{perspective-viewer-02e461f3d7062b26 → perspective-viewer-39c3c3b28e3cbd48}/inline4.js +0 -0
  133. /package/dist/wasm/snippets/{perspective-viewer-02e461f3d7062b26 → perspective-viewer-39c3c3b28e3cbd48}/inline5.js +0 -0
@@ -0,0 +1,7 @@
1
+ <svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="6.5" y="9.5" width="8" height="7" stroke="#666" />
3
+ <path d="M13 9V8.5C13 7.11929 11.8807 6 10.5 6V6C9.11929 6 8 7.11929 8 8.5V9" stroke="#666" />
4
+ <path
5
+ d="M11.4911 13C11.4911 13.5523 11.0434 14 10.4911 14C9.93878 14 9.49107 13.5523 9.49107 13C9.49107 12.4477 9.93878 12 10.4911 12C11.0434 12 11.4911 12.4477 11.4911 13Z"
6
+ fill="#666" />
7
+ </svg>
@@ -81,6 +81,16 @@ perspective-viewer [theme="Botanical"] {
81
81
  --psp-charts--series-8--color: rgb(210, 140, 80);
82
82
  --psp-charts--series-9--color: rgb(130, 120, 190);
83
83
  --psp-charts--series-10--color: rgb(170, 200, 110);
84
+ --psp-datagrid--series-1--color: rgb(90, 158, 75);
85
+ --psp-datagrid--series-2--color: rgb(206, 176, 104);
86
+ --psp-datagrid--series-3--color: rgb(160, 110, 180);
87
+ --psp-datagrid--series-4--color: rgb(80, 170, 150);
88
+ --psp-datagrid--series-5--color: rgb(140, 170, 90);
89
+ --psp-datagrid--series-6--color: rgb(200, 120, 140);
90
+ --psp-datagrid--series-7--color: rgb(100, 150, 190);
91
+ --psp-datagrid--series-8--color: rgb(210, 140, 80);
92
+ --psp-datagrid--series-9--color: rgb(130, 120, 190);
93
+ --psp-datagrid--series-10--color: rgb(170, 200, 110);
84
94
 
85
95
  --psp-charts--gradient--background: linear-gradient(
86
96
  #e8836a 0%,
@@ -104,6 +104,16 @@ perspective-string-column-style {
104
104
  --psp-charts--series-8--color: #7f7f7f;
105
105
  --psp-charts--series-9--color: #bcbd22;
106
106
  --psp-charts--series-10--color: #17becf;
107
+ --psp-datagrid--series-1--color: #0366d6;
108
+ --psp-datagrid--series-2--color: #ff7f0e;
109
+ --psp-datagrid--series-3--color: #2ca02c;
110
+ --psp-datagrid--series-4--color: #d62728;
111
+ --psp-datagrid--series-5--color: #9467bd;
112
+ --psp-datagrid--series-6--color: #8c564b;
113
+ --psp-datagrid--series-7--color: #e377c2;
114
+ --psp-datagrid--series-8--color: #7f7f7f;
115
+ --psp-datagrid--series-9--color: #bcbd22;
116
+ --psp-datagrid--series-10--color: #17becf;
107
117
  --psp-charts--gradient--background: linear-gradient(
108
118
  #4d342f 0%,
109
119
  #e4521b 22.5%,
@@ -167,6 +177,8 @@ perspective-string-column-style {
167
177
  --psp-openlayers--attribution--filter: initial;
168
178
  --psp-charts--series-11--color: initial;
169
179
  --psp-charts--series-12--color: initial;
180
+ --psp-datagrid--series-11--color: initial;
181
+ --psp-datagrid--series-12--color: initial;
170
182
  --psp-charts--map-tiles--url: initial;
171
183
  --psp-column-type--boolean--color: initial;
172
184
  --psp-column-type--date--color: initial;
@@ -78,6 +78,16 @@ perspective-viewer [theme="Dracula"] {
78
78
  --psp-charts--series-8--color: rgb(221, 99, 103);
79
79
  --psp-charts--series-9--color: rgb(120, 104, 206);
80
80
  --psp-charts--series-10--color: rgb(23, 166, 123);
81
+ --psp-datagrid--series-1--color: rgb(71, 120, 194);
82
+ --psp-datagrid--series-2--color: rgb(204, 120, 48);
83
+ --psp-datagrid--series-3--color: rgb(158, 84, 192);
84
+ --psp-datagrid--series-4--color: rgb(51, 150, 153);
85
+ --psp-datagrid--series-5--color: rgb(102, 114, 143);
86
+ --psp-datagrid--series-6--color: rgb(211, 103, 189);
87
+ --psp-datagrid--series-7--color: rgb(109, 124, 77);
88
+ --psp-datagrid--series-8--color: rgb(221, 99, 103);
89
+ --psp-datagrid--series-9--color: rgb(120, 104, 206);
90
+ --psp-datagrid--series-10--color: rgb(23, 166, 123);
81
91
  --psp-charts--gradient--background: linear-gradient(
82
92
  #dd6367 0%,
83
93
  #242526 50%,
@@ -148,6 +158,13 @@ perspective-viewer [theme="Dracula"] {
148
158
  --psp-charts--series-5--color: var(--theme-purple);
149
159
  --psp-charts--series-6--color: var(--theme-pink);
150
160
  --psp-charts--series-7--color: var(--theme-orange);
161
+ --psp-datagrid--series-1--color: var(--theme-blue);
162
+ --psp-datagrid--series-2--color: var(--theme-red);
163
+ --psp-datagrid--series-3--color: var(--theme-green);
164
+ --psp-datagrid--series-4--color: var(--theme-yellow);
165
+ --psp-datagrid--series-5--color: var(--theme-purple);
166
+ --psp-datagrid--series-6--color: var(--theme-pink);
167
+ --psp-datagrid--series-7--color: var(--theme-orange);
151
168
 
152
169
  --psp-charts--gradient--background: linear-gradient(
153
170
  var(--theme-red),
@@ -78,6 +78,16 @@ perspective-viewer [theme="Gruvbox Dark"] {
78
78
  --psp-charts--series-8--color: rgb(221, 99, 103);
79
79
  --psp-charts--series-9--color: rgb(120, 104, 206);
80
80
  --psp-charts--series-10--color: rgb(23, 166, 123);
81
+ --psp-datagrid--series-1--color: rgb(71, 120, 194);
82
+ --psp-datagrid--series-2--color: rgb(204, 120, 48);
83
+ --psp-datagrid--series-3--color: rgb(158, 84, 192);
84
+ --psp-datagrid--series-4--color: rgb(51, 150, 153);
85
+ --psp-datagrid--series-5--color: rgb(102, 114, 143);
86
+ --psp-datagrid--series-6--color: rgb(211, 103, 189);
87
+ --psp-datagrid--series-7--color: rgb(109, 124, 77);
88
+ --psp-datagrid--series-8--color: rgb(221, 99, 103);
89
+ --psp-datagrid--series-9--color: rgb(120, 104, 206);
90
+ --psp-datagrid--series-10--color: rgb(23, 166, 123);
81
91
  --psp-charts--gradient--background: linear-gradient(
82
92
  #dd6367 0%,
83
93
  #242526 50%,
@@ -159,6 +169,16 @@ perspective-viewer [theme="Gruvbox Dark"] {
159
169
  --psp-charts--series-8--color: var(--theme-alt-green);
160
170
  --psp-charts--series-9--color: var(--theme-alt-purple);
161
171
  --psp-charts--series-10--color: var(--theme-alt-aqua);
172
+ --psp-datagrid--series-1--color: var(--theme-blue);
173
+ --psp-datagrid--series-2--color: var(--theme-red);
174
+ --psp-datagrid--series-3--color: var(--theme-green);
175
+ --psp-datagrid--series-4--color: var(--theme-purple);
176
+ --psp-datagrid--series-5--color: var(--theme-aqua);
177
+ --psp-datagrid--series-6--color: var(--theme-alt-blue);
178
+ --psp-datagrid--series-7--color: var(--theme-alt-red);
179
+ --psp-datagrid--series-8--color: var(--theme-alt-green);
180
+ --psp-datagrid--series-9--color: var(--theme-alt-purple);
181
+ --psp-datagrid--series-10--color: var(--theme-alt-aqua);
162
182
 
163
183
  --psp-charts--gradient--background: linear-gradient(
164
184
  var(--theme-alt-red),
@@ -75,6 +75,16 @@ perspective-viewer [theme="Gruvbox Light"] {
75
75
  --psp-charts--series-8--color: var(--theme-alt-green);
76
76
  --psp-charts--series-9--color: var(--theme-alt-purple);
77
77
  --psp-charts--series-10--color: var(--theme-alt-aqua);
78
+ --psp-datagrid--series-1--color: var(--theme-blue);
79
+ --psp-datagrid--series-2--color: var(--theme-red);
80
+ --psp-datagrid--series-3--color: var(--theme-green);
81
+ --psp-datagrid--series-4--color: var(--theme-purple);
82
+ --psp-datagrid--series-5--color: var(--theme-aqua);
83
+ --psp-datagrid--series-6--color: var(--theme-alt-blue);
84
+ --psp-datagrid--series-7--color: var(--theme-alt-red);
85
+ --psp-datagrid--series-8--color: var(--theme-alt-green);
86
+ --psp-datagrid--series-9--color: var(--theme-alt-purple);
87
+ --psp-datagrid--series-10--color: var(--theme-alt-aqua);
78
88
 
79
89
  --psp-charts--gradient--background: linear-gradient(
80
90
  var(--theme-alt-red),
@@ -67,6 +67,7 @@ perspective-viewer-tab {
67
67
  --psp-icon--status-ok--mask-image: url(../svg/status_ok.svg);
68
68
  --psp-icon--export--mask-image: url("../svg/export-icon.svg");
69
69
  --psp-icon--free-scroll--mask-image: url("../svg/free-scroll-icon.svg");
70
+ --psp-icon--lock--mask-image: url("../svg/lock.svg");
70
71
  --psp-icon--reset--mask-image: url("../svg/revert-icon.svg");
71
72
  --psp-icon--copy--mask-image: url("../svg/duplicate-icon.svg");
72
73
  --psp-icon--theme--mask-image: url("../svg/theme-icon.svg");
@@ -78,6 +78,16 @@ perspective-viewer [theme="Monokai"] {
78
78
  --psp-charts--series-8--color: rgb(221, 99, 103);
79
79
  --psp-charts--series-9--color: rgb(120, 104, 206);
80
80
  --psp-charts--series-10--color: rgb(23, 166, 123);
81
+ --psp-datagrid--series-1--color: rgb(71, 120, 194);
82
+ --psp-datagrid--series-2--color: rgb(204, 120, 48);
83
+ --psp-datagrid--series-3--color: rgb(158, 84, 192);
84
+ --psp-datagrid--series-4--color: rgb(51, 150, 153);
85
+ --psp-datagrid--series-5--color: rgb(102, 114, 143);
86
+ --psp-datagrid--series-6--color: rgb(211, 103, 189);
87
+ --psp-datagrid--series-7--color: rgb(109, 124, 77);
88
+ --psp-datagrid--series-8--color: rgb(221, 99, 103);
89
+ --psp-datagrid--series-9--color: rgb(120, 104, 206);
90
+ --psp-datagrid--series-10--color: rgb(23, 166, 123);
81
91
  --psp-charts--gradient--background: linear-gradient(
82
92
  #dd6367 0%,
83
93
  #242526 50%,
@@ -157,6 +167,18 @@ perspective-viewer [theme="Monokai"] {
157
167
  --psp-charts--series-10--color: #e6db74;
158
168
  --psp-charts--series-11--color: #a6e22e;
159
169
  --psp-charts--series-12--color: #ae81ff;
170
+ --psp-datagrid--series-1--color: #78dce8;
171
+ --psp-datagrid--series-2--color: #ff6188;
172
+ --psp-datagrid--series-3--color: #fc9867;
173
+ --psp-datagrid--series-4--color: #ffd866;
174
+ --psp-datagrid--series-5--color: #a9dc76;
175
+ --psp-datagrid--series-6--color: #ab9df2;
176
+ --psp-datagrid--series-7--color: #66d9ef;
177
+ --psp-datagrid--series-8--color: #f92672;
178
+ --psp-datagrid--series-9--color: #fd971f;
179
+ --psp-datagrid--series-10--color: #e6db74;
180
+ --psp-datagrid--series-11--color: #a6e22e;
181
+ --psp-datagrid--series-12--color: #ae81ff;
160
182
 
161
183
  --psp-charts--gradient--background: linear-gradient(
162
184
  #ff6188 0%,
@@ -98,6 +98,11 @@ perspective-viewer [theme="Phosphor"] {
98
98
  --psp-charts--series-3--color: #ff0055;
99
99
  --psp-charts--series-4--color: #ffd700;
100
100
  --psp-charts--series-5--color: #7fffd4;
101
+ --psp-datagrid--series-1--color: #00ff41;
102
+ --psp-datagrid--series-2--color: #00bfff;
103
+ --psp-datagrid--series-3--color: #ff0055;
104
+ --psp-datagrid--series-4--color: #ffd700;
105
+ --psp-datagrid--series-5--color: #7fffd4;
101
106
 
102
107
  --psp-charts--gradient--background: linear-gradient(
103
108
  #ff3333 0%,
@@ -81,6 +81,16 @@ perspective-viewer [theme="Pro Dark"] {
81
81
  --psp-charts--series-8--color: rgb(221, 99, 103);
82
82
  --psp-charts--series-9--color: rgb(120, 104, 206);
83
83
  --psp-charts--series-10--color: rgb(23, 166, 123);
84
+ --psp-datagrid--series-1--color: rgb(71, 120, 194);
85
+ --psp-datagrid--series-2--color: rgb(204, 120, 48);
86
+ --psp-datagrid--series-3--color: rgb(158, 84, 192);
87
+ --psp-datagrid--series-4--color: rgb(51, 150, 153);
88
+ --psp-datagrid--series-5--color: rgb(102, 114, 143);
89
+ --psp-datagrid--series-6--color: rgb(211, 103, 189);
90
+ --psp-datagrid--series-7--color: rgb(109, 124, 77);
91
+ --psp-datagrid--series-8--color: rgb(221, 99, 103);
92
+ --psp-datagrid--series-9--color: rgb(120, 104, 206);
93
+ --psp-datagrid--series-10--color: rgb(23, 166, 123);
84
94
 
85
95
  --psp-charts--gradient--background: linear-gradient(
86
96
  #dd6367 0%,
@@ -53,6 +53,13 @@ perspective-viewer [theme="Solarized Dark"] {
53
53
  --psp-charts--series-5--color: #2aa198;
54
54
  --psp-charts--series-6--color: #6c71c4;
55
55
  --psp-charts--series-7--color: #d33682;
56
+ --psp-datagrid--series-1--color: #268bd2;
57
+ --psp-datagrid--series-2--color: #cb4b16;
58
+ --psp-datagrid--series-3--color: #b58900;
59
+ --psp-datagrid--series-4--color: #859900;
60
+ --psp-datagrid--series-5--color: #2aa198;
61
+ --psp-datagrid--series-6--color: #6c71c4;
62
+ --psp-datagrid--series-7--color: #d33682;
56
63
  /* perspective-viewer-solarized-dark--colors */
57
64
  color: #93a1a1;
58
65
  background-color: #002b36;
@@ -57,6 +57,13 @@ perspective-viewer [theme="Solarized"] {
57
57
 
58
58
  --psp-charts--series-6--color: #6c71c4;
59
59
  --psp-charts--series-7--color: #d33682;
60
+ --psp-datagrid--series-1--color: #268bd2;
61
+ --psp-datagrid--series-2--color: #cb4b16;
62
+ --psp-datagrid--series-3--color: #b58900;
63
+ --psp-datagrid--series-4--color: #859900;
64
+ --psp-datagrid--series-5--color: #2aa198;
65
+ --psp-datagrid--series-6--color: #6c71c4;
66
+ --psp-datagrid--series-7--color: #d33682;
60
67
  }
61
68
 
62
69
  x {
@@ -78,6 +78,16 @@ perspective-viewer [theme="Vaporwave"] {
78
78
  --psp-charts--series-8--color: rgb(221, 99, 103);
79
79
  --psp-charts--series-9--color: rgb(120, 104, 206);
80
80
  --psp-charts--series-10--color: rgb(23, 166, 123);
81
+ --psp-datagrid--series-1--color: rgb(71, 120, 194);
82
+ --psp-datagrid--series-2--color: rgb(204, 120, 48);
83
+ --psp-datagrid--series-3--color: rgb(158, 84, 192);
84
+ --psp-datagrid--series-4--color: rgb(51, 150, 153);
85
+ --psp-datagrid--series-5--color: rgb(102, 114, 143);
86
+ --psp-datagrid--series-6--color: rgb(211, 103, 189);
87
+ --psp-datagrid--series-7--color: rgb(109, 124, 77);
88
+ --psp-datagrid--series-8--color: rgb(221, 99, 103);
89
+ --psp-datagrid--series-9--color: rgb(120, 104, 206);
90
+ --psp-datagrid--series-10--color: rgb(23, 166, 123);
81
91
  --psp-charts--gradient--background: linear-gradient(
82
92
  #dd6367 0%,
83
93
  #242526 50%,
@@ -153,6 +163,16 @@ perspective-viewer [theme="Vaporwave"] {
153
163
  --psp-charts--series-8--color: hsl(192, 99%, 25%);
154
164
  --psp-charts--series-9--color: hsl(157, 100%, 25%);
155
165
  --psp-charts--series-10--color: hsl(272, 100%, 35%);
166
+ --psp-datagrid--series-1--color: #01cdfe;
167
+ --psp-datagrid--series-2--color: #ff71ce;
168
+ --psp-datagrid--series-3--color: #05ffa1;
169
+ --psp-datagrid--series-4--color: #b967ff;
170
+ --psp-datagrid--series-5--color: #fffb96;
171
+ --psp-datagrid--series-6--color: hsl(192, 99%, 25%);
172
+ --psp-datagrid--series-7--color: hsl(321, 100%, 36%);
173
+ --psp-datagrid--series-8--color: hsl(192, 99%, 25%);
174
+ --psp-datagrid--series-9--color: hsl(157, 100%, 25%);
175
+ --psp-datagrid--series-10--color: hsl(272, 100%, 35%);
156
176
 
157
177
  --psp-charts--gradient--background: linear-gradient(
158
178
  #f3d431,
@@ -58,6 +58,7 @@ export type * from "./ts-rs/FilterReducer.d.ts";
58
58
  export type * from "./ts-rs/PluginStaticConfig.ts";
59
59
  export type * from "./ts-rs/ExportMethod.d.ts";
60
60
  export type * from "./ts-rs/PanelOptions.d.ts";
61
+ export type * from "./ts-rs/SaveWorkspaceOptions.d.ts";
61
62
  export type * from "./ts-rs/ClientOptions.d.ts";
62
63
  export type * from "./ts-rs/ExportOptions.d.ts";
63
64
  export type * from "./ts-rs/GetTableOptions.d.ts";
package/src/ts/plugin.ts CHANGED
@@ -93,6 +93,20 @@ export interface IPerspectiveViewerPlugin {
93
93
  */
94
94
  column_style_config?: (view_type: string, group: string) => any;
95
95
 
96
+ /**
97
+ * The per-column Style-tab schema: the controls the viewer renders
98
+ * for one column, re-queried on every field edit so the field set
99
+ * may depend on `current_value`.
100
+ */
101
+ column_config_schema?(
102
+ view_type: string,
103
+ group: string | undefined,
104
+ column_name: string,
105
+ current_value: Record<string, unknown> | null,
106
+ viewer_config?: Record<string, unknown>,
107
+ column_stats?: Record<string, unknown>,
108
+ ): { fields: Array<Record<string, unknown> & { kind: string }> };
109
+
96
110
  /**
97
111
  * Render this plugin using the provided `View`. While there is no
98
112
  * provision to cancel a render in progress per se, calling a method on
@@ -12,7 +12,7 @@ import type { JsonValue } from "./serde_json/JsonValue.js";
12
12
  /**
13
13
  * The per-panel state of a [`ViewerConfig`] — everything except the
14
14
  * element-level `settings` flag. This is the `panels` entry type of the
15
- * whole-element config format.
15
+ * workspace config format.
16
16
  */
17
17
  export type PanelViewerConfig<V = string> = {
18
18
  /**
@@ -0,0 +1,11 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+
3
+ /**
4
+ * Options for the `saveWorkspace()` method.
5
+ */
6
+ export type SaveWorkspaceOptions = {
7
+ /**
8
+ * When `true`, the emitted `palette` is the full set the element
9
+ * holds rather than only the values the panels reference.
10
+ */
11
+ full_palette?: boolean, };
@@ -12,7 +12,7 @@ import type { JsonValue } from "./serde_json/JsonValue.js";
12
12
  /**
13
13
  * The state of an entire `custom_elements::PerspectiveViewerElement` component
14
14
  * and its `Plugin`: the element-level `settings` flag plus the per-panel
15
- * [`PanelViewerConfig`]. The split exists so the whole-element config format
15
+ * [`PanelViewerConfig`]. The split exists so the workspace config format
16
16
  * can serialize panel entries *without* a `settings` key (it is element-level
17
17
  * state there, carried by the top-level `active` field instead), while the
18
18
  * single-panel format flattens back to the legacy shape.
@@ -4,7 +4,7 @@ import type { Layout } from "./Layout.js";
4
4
  import type { PanelViewerConfig } from "./PanelViewerConfig.js";
5
5
 
6
6
  /**
7
- * The whole-element config format (`{version, active?, layout, panels}`) —
7
+ * The workspace config format (`{version, active?, layout, panels}`) —
8
8
  * the multi-panel counterpart of the single-panel [`ViewerConfig`] — as
9
9
  * emitted by [`PerspectiveViewerElement::save`].
10
10
  *
@@ -33,4 +33,10 @@ global_filters?: Array<Filter>,
33
33
  * which master contributed which clause does not — restored
34
34
  * `global_filters` are one unattributed bucket. Omitted when empty.
35
35
  */
36
- masters?: Array<string>, };
36
+ masters?: Array<string>,
37
+ /**
38
+ * Named color-scale definitions shared by every panel: CSS custom
39
+ * property name (`--psp-user--<kind>-<name>`) → canonical CSS
40
+ * value.
41
+ */
42
+ palette?: { [key in string]?: string }, };
@@ -4,7 +4,7 @@ import type { Layout } from "./Layout.js";
4
4
  import type { ViewerConfigInitial } from "./ViewerConfigInitial.js";
5
5
 
6
6
  /**
7
- * The parse target of a whole-element config in
7
+ * The parse target of a workspace config in
8
8
  * [`PerspectiveViewerElement::restoreWorkspace`]. Mirrors
9
9
  * [`WorkspaceConfig`], but `panels` entries are [`ViewerConfigInitial`]s —
10
10
  * every entry creates a NEW panel, so `table` is required by type (a
@@ -16,10 +16,18 @@ export type WorkspaceConfigUpdate = { active?: string, layout?: Layout, panels:
16
16
  * The element-level global (master/detail cross-) filters to re-apply as
17
17
  * a transient overlay on every DETAIL panel. Restored as one
18
18
  * unattributed bucket: the next selection on any master replaces it.
19
+ * `Option` so an explicit `undefined` property deserializes as
20
+ * `None` like an absent key (also `masters` / `palette` below).
19
21
  */
20
- global_filters?: Array<Filter>,
22
+ global_filters?: Array<Filter> | null,
21
23
  /**
22
24
  * The master (filter-source) panels, by saved `panels` key. An id not in
23
25
  * `panels` warns and is dropped.
24
26
  */
25
- masters?: Array<string>, };
27
+ masters?: Array<string> | null,
28
+ /**
29
+ * Named color-scale definitions to apply to the host (see
30
+ * [`WorkspaceConfig::palette`]), replacing any previously restored
31
+ * palette.
32
+ */
33
+ palette?: { [key in string]?: string } | null, };
@@ -1,137 +0,0 @@
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
- use wasm_bindgen::JsCast;
14
- use web_sys::*;
15
- use yew::prelude::*;
16
-
17
- #[derive(Properties, PartialEq, Clone)]
18
- pub struct ColorRangeProps {
19
- /// Extra class appended to the positive input's `class` attribute,
20
- /// so callers can target the pos / neg sides independently from CSS.
21
- /// Paired with `neg_class`; both default to empty.
22
- #[prop_or_default]
23
- pub pos_class: Classes,
24
- #[prop_or_default]
25
- pub neg_class: Classes,
26
- pub pos_color: String,
27
- pub neg_color: String,
28
- pub is_gradient: bool,
29
- pub on_pos_color: Callback<String>,
30
- pub on_neg_color: Callback<String>,
31
- pub on_reset: Callback<()>,
32
- pub is_modified: bool,
33
- }
34
-
35
- #[function_component(ColorRangeSelector)]
36
- pub fn color_chooser_component(props: &ColorRangeProps) -> Html {
37
- let on_pos_color = use_callback(
38
- props.on_pos_color.clone(),
39
- |event: InputEvent, on_pos_color| {
40
- let color = event
41
- .target()
42
- .unwrap()
43
- .unchecked_into::<HtmlInputElement>()
44
- .value();
45
- on_pos_color.emit(color);
46
- },
47
- );
48
-
49
- let on_neg_color = use_callback(
50
- props.on_neg_color.clone(),
51
- |event: InputEvent, on_neg_color| {
52
- let color = event
53
- .target()
54
- .unwrap()
55
- .unchecked_into::<HtmlInputElement>()
56
- .value();
57
- on_neg_color.emit(color);
58
- },
59
- );
60
-
61
- let fg_pos = infer_fg(&props.pos_color);
62
- let fg_neg = infer_fg(&props.neg_color);
63
- let style = if props.is_gradient {
64
- format!(
65
- "background:linear-gradient(to right, {} 0%, transparent 50%, {} 100%)",
66
- props.pos_color, props.neg_color
67
- )
68
- } else {
69
- format!(
70
- "background:linear-gradient(to right, {} 0%, {} 50%, {} 50%, {} 100%)",
71
- props.pos_color, props.pos_color, props.neg_color, props.neg_color
72
- )
73
- };
74
-
75
- let on_reset = use_callback(props.clone(), |_: MouseEvent, deps| deps.on_reset.emit(()));
76
-
77
- let pos_class = classes!("parameter", "pos-color-param", props.pos_class.clone());
78
- let neg_class = classes!("parameter", "neg-color-param", props.neg_class.clone());
79
-
80
- html! {
81
- <>
82
- <label id="color-range-label" />
83
- <div class="color-gradient-container">
84
- <div style={fg_pos} class="color-selector">
85
- <input
86
- class={pos_class}
87
- type="color"
88
- value={props.pos_color.to_owned()}
89
- data-value={props.pos_color.to_owned()}
90
- oninput={on_pos_color}
91
- />
92
- <label class="color-label">{ "+" }</label>
93
- </div>
94
- <div class="color-thermometer" {style} />
95
- <div style={fg_neg} class="color-selector">
96
- <input
97
- class={neg_class}
98
- type="color"
99
- value={props.neg_color.to_owned()}
100
- data-value={props.neg_color.to_owned()}
101
- oninput={on_neg_color}
102
- />
103
- <label class="color-label">{ "-" }</label>
104
- </div>
105
- if props.is_modified {
106
- <span class="reset-default-style" onclick={on_reset} />
107
- } else {
108
- <span class="reset-default-style-disabled" />
109
- }
110
- </div>
111
- </>
112
- }
113
- }
114
-
115
- fn infer_fg(color: &str) -> &'static str {
116
- if color.len() >= 7 {
117
- let r = i32::from_str_radix(&color[1..3], 16).unwrap_or(255) as f64;
118
- let g = i32::from_str_radix(&color[3..5], 16).unwrap_or(0) as f64;
119
- let b = i32::from_str_radix(&color[5..7], 16).unwrap_or(0) as f64;
120
- if (r * r * 0.299 + g * g * 0.587 + b * b * 0.114).sqrt() > 130.0 {
121
- "--sign--color:var(--psp--color)"
122
- } else {
123
- "--sign--color:var(--psp--background-color)"
124
- }
125
- } else if color.len() == 4 {
126
- let r = i32::from_str_radix(&color[1..2], 16).unwrap_or(15) as f64;
127
- let g = i32::from_str_radix(&color[2..3], 16).unwrap_or(0) as f64;
128
- let b = i32::from_str_radix(&color[3..4], 16).unwrap_or(0) as f64;
129
- if (r * r * 0.299 + g * g * 0.587 + b * b * 0.114).sqrt() > 8.0 {
130
- "--sign--color:var(--psp--color)"
131
- } else {
132
- "--sign--color:var(--psp--background-color)"
133
- }
134
- } else {
135
- "--sign--color:var(--psp--color)"
136
- }
137
- }