@perspective-dev/viewer 5.1.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 (245) 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 +3 -0
  26. package/dist/esm/perspective-viewer.inline.js +9 -9
  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/plugin.d.ts +10 -0
  31. package/dist/esm/providers.d.ts +79 -0
  32. package/dist/esm/ts-rs/CompactDisplay.d.ts +5 -0
  33. package/dist/esm/ts-rs/CurrencyCode.d.ts +1 -0
  34. package/dist/esm/ts-rs/CurrencyDisplay.d.ts +1 -0
  35. package/dist/esm/ts-rs/CurrencyNumberFormatStyle.d.ts +8 -0
  36. package/dist/esm/ts-rs/CurrencySign.d.ts +1 -0
  37. package/dist/esm/ts-rs/CustomDatetimeFormat.d.ts +1 -0
  38. package/dist/esm/ts-rs/CustomDatetimeStyleConfig.d.ts +54 -0
  39. package/dist/esm/ts-rs/CustomNumberFormatConfig.d.ts +34 -0
  40. package/dist/esm/ts-rs/DatetimeColorMode.d.ts +1 -0
  41. package/dist/esm/ts-rs/DatetimeFormatType.d.ts +6 -0
  42. package/dist/esm/ts-rs/FormatMode.d.ts +1 -0
  43. package/dist/esm/ts-rs/FormatUnit.d.ts +1 -0
  44. package/dist/esm/ts-rs/Notation.d.ts +17 -0
  45. package/dist/esm/ts-rs/NumberFormatStyle.d.ts +18 -0
  46. package/dist/esm/ts-rs/PanelViewerConfig.d.ts +42 -2
  47. package/dist/esm/ts-rs/PluginStaticConfig.d.ts +35 -0
  48. package/dist/esm/ts-rs/RestoreOptions.d.ts +19 -0
  49. package/dist/esm/ts-rs/RoundingMode.d.ts +1 -0
  50. package/dist/esm/ts-rs/RoundingPriority.d.ts +1 -0
  51. package/dist/esm/ts-rs/SaveWorkspaceOptions.d.ts +10 -0
  52. package/dist/esm/ts-rs/SignDisplay.d.ts +1 -0
  53. package/dist/esm/ts-rs/SimpleDatetimeFormat.d.ts +1 -0
  54. package/dist/esm/ts-rs/SimpleDatetimeStyleConfig.d.ts +24 -0
  55. package/dist/esm/ts-rs/SplitRollupMode.d.ts +9 -0
  56. package/dist/esm/ts-rs/StringColorMode.d.ts +1 -0
  57. package/dist/esm/ts-rs/TrailingZeroDisplay.d.ts +1 -0
  58. package/dist/esm/ts-rs/Unit.d.ts +1 -0
  59. package/dist/esm/ts-rs/UnitDisplay.d.ts +1 -0
  60. package/dist/esm/ts-rs/UnitNumberFormatStyle.d.ts +6 -0
  61. package/dist/esm/ts-rs/UseGrouping.d.ts +1 -0
  62. package/dist/esm/ts-rs/ViewerConfig.d.ts +42 -2
  63. package/dist/esm/ts-rs/ViewerConfigInitial.d.ts +175 -0
  64. package/dist/esm/ts-rs/ViewerConfigUpdate.d.ts +63 -0
  65. package/dist/esm/ts-rs/WindowSpec.d.ts +3 -2
  66. package/dist/esm/ts-rs/WorkspaceConfig.d.ts +9 -1
  67. package/dist/esm/ts-rs/WorkspaceConfigUpdate.d.ts +20 -9
  68. package/dist/wasm/perspective-viewer.d.ts +157 -41
  69. package/dist/wasm/perspective-viewer.js +452 -151
  70. package/dist/wasm/perspective-viewer.wasm +0 -0
  71. package/dist/wasm/perspective-viewer.wasm.d.ts +22 -17
  72. package/package.json +2 -1
  73. package/src/css/_viewer_bundle.css +1 -0
  74. package/src/css/column-selector.css +8 -0
  75. package/src/css/column-settings-panel.css +9 -5
  76. package/src/css/column-style.css +209 -31
  77. package/src/css/config-selector.css +38 -3
  78. package/src/css/dom/select.css +2 -1
  79. package/src/css/form/code-editor.css +6 -7
  80. package/src/css/form/mirrored-textarea.css +81 -0
  81. package/src/css/viewer.css +328 -0
  82. package/src/rust/agent/client/mod.rs +19 -0
  83. package/src/rust/agent/client/protocol.rs +320 -0
  84. package/src/rust/agent/client/transport.rs +287 -0
  85. package/src/rust/agent/client/turn.rs +174 -0
  86. package/src/rust/agent/config.rs +159 -0
  87. package/src/rust/agent/docs.rs +293 -0
  88. package/src/rust/agent/markdown/block.rs +509 -0
  89. package/src/rust/agent/markdown/entity.rs +52 -0
  90. package/src/rust/agent/markdown/events.rs +71 -0
  91. package/src/rust/agent/markdown/inline.rs +497 -0
  92. package/src/rust/agent/markdown/mod.rs +466 -0
  93. package/src/rust/agent/mod.rs +23 -0
  94. package/src/rust/agent/preamble.md +16 -0
  95. package/src/rust/agent/runtime.rs +201 -0
  96. package/src/rust/agent/slot.rs +236 -0
  97. package/src/rust/agent/tools.rs +1141 -0
  98. package/src/rust/components/chat_panel.rs +289 -0
  99. package/src/rust/components/column_selector/active_column.rs +2 -2
  100. package/src/rust/components/column_selector/add_expression_button.rs +3 -3
  101. package/src/rust/components/column_selector/aggregate_selector.rs +2 -3
  102. package/src/rust/components/column_selector/config_selector.rs +84 -7
  103. package/src/rust/components/column_selector/expr_edit_button.rs +4 -10
  104. package/src/rust/components/column_selector/inactive_column.rs +2 -2
  105. package/src/rust/components/column_selector.rs +55 -4
  106. package/src/rust/components/column_settings_sidebar/style_tab/primitive_field.rs +293 -126
  107. package/src/rust/components/column_settings_sidebar/style_tab.rs +262 -225
  108. package/src/rust/components/column_settings_sidebar.rs +88 -69
  109. package/src/rust/components/containers/dragdrop_list.rs +37 -0
  110. package/src/rust/components/editable_header.rs +85 -144
  111. package/src/rust/components/expression_editor.rs +9 -16
  112. package/src/rust/components/form/code_editor.rs +29 -28
  113. package/src/rust/components/form/debug.rs +9 -5
  114. package/src/rust/components/form/mirrored_textarea.rs +165 -0
  115. package/src/rust/components/form/mod.rs +4 -1
  116. package/src/rust/components/form/multi_stop_gradient_selector.rs +476 -0
  117. package/src/rust/components/form/named_value_picker.rs +86 -0
  118. package/src/rust/components/form/palette_selector.rs +440 -0
  119. package/src/rust/components/main_panel/msg.rs +2 -2
  120. package/src/rust/components/main_panel/reconcile.rs +4 -4
  121. package/src/rust/components/mod.rs +2 -0
  122. package/src/rust/components/plugin_tab.rs +4 -28
  123. package/src/rust/components/settings_panel.rs +105 -22
  124. package/src/rust/components/viewer/msg.rs +46 -7
  125. package/src/rust/components/viewer/panels.rs +17 -20
  126. package/src/rust/components/viewer/render.rs +10 -3
  127. package/src/rust/components/viewer/settings.rs +163 -23
  128. package/src/rust/components/viewer/snapshots.rs +46 -21
  129. package/src/rust/components/viewer/wiring.rs +14 -25
  130. package/src/rust/components/viewer.rs +12 -8
  131. package/src/rust/components/window_editor.rs +75 -103
  132. package/src/rust/config/column_config_schema.rs +100 -41
  133. package/src/rust/config/css_scale.rs +882 -0
  134. package/src/rust/config/datetime_column_style/custom.rs +17 -0
  135. package/src/rust/config/datetime_column_style/simple.rs +10 -0
  136. package/src/rust/config/mod.rs +2 -0
  137. package/src/rust/config/number_string_format.rs +33 -0
  138. package/src/rust/config/options.rs +28 -0
  139. package/src/rust/config/plugin_static_config.rs +120 -5
  140. package/src/rust/config/viewer_config.rs +216 -3
  141. package/src/rust/config/workspace_config.rs +138 -10
  142. package/src/rust/custom_elements/viewer.rs +369 -119
  143. package/src/rust/custom_events.rs +43 -1
  144. package/src/rust/js/regular_layout.rs +3 -3
  145. package/src/rust/lib.rs +15 -0
  146. package/src/rust/presentation/column_locator.rs +19 -5
  147. package/src/rust/presentation.rs +200 -36
  148. package/src/rust/queries/column_locator.rs +74 -44
  149. package/src/rust/queries/get_viewer_config.rs +2 -1
  150. package/src/rust/queries/mod.rs +2 -0
  151. package/src/rust/queries/palette_set.rs +82 -0
  152. package/src/rust/queries/plugin_column_styles.rs +6 -2
  153. package/src/rust/renderer/dispatch.rs +16 -4
  154. package/src/rust/renderer/plugin_config.rs +309 -47
  155. package/src/rust/renderer.rs +15 -42
  156. package/src/rust/session/column_defaults_update.rs +32 -7
  157. package/src/rust/session/metadata.rs +23 -21
  158. package/src/rust/session/props.rs +1 -0
  159. package/src/rust/session/replace_expression_update.rs +1 -0
  160. package/src/rust/session.rs +9 -6
  161. package/src/rust/tasks/create_panel.rs +46 -49
  162. package/src/rust/tasks/edit_expression.rs +19 -23
  163. package/src/rust/tasks/edit_window.rs +9 -11
  164. package/src/rust/tasks/eject.rs +4 -1
  165. package/src/rust/tasks/pipeline.rs +2 -2
  166. package/src/rust/tasks/presize_panels.rs +44 -5
  167. package/src/rust/tasks/reset_all.rs +4 -4
  168. package/src/rust/tasks/restore_and_render.rs +17 -44
  169. package/src/rust/tasks/restore_panel.rs +37 -22
  170. package/src/rust/tasks/set_edit_mode.rs +3 -1
  171. package/src/rust/tasks/sync_update_panels.rs +18 -24
  172. package/src/rust/tasks/update_theme.rs +23 -18
  173. package/src/rust/utils/css_vars.rs +26 -0
  174. package/src/rust/utils/mod.rs +2 -0
  175. package/src/rust/utils/spawn.rs +1 -1
  176. package/src/rust/workspace.rs +454 -199
  177. package/src/svg/lock.svg +7 -0
  178. package/src/themes/botanical.css +10 -0
  179. package/src/themes/defaults.css +12 -0
  180. package/src/themes/dracula.css +17 -0
  181. package/src/themes/gruvbox-dark.css +20 -0
  182. package/src/themes/gruvbox.css +10 -0
  183. package/src/themes/icons.css +1 -0
  184. package/src/themes/intl/de.css +16 -0
  185. package/src/themes/intl/es.css +16 -0
  186. package/src/themes/intl/fr.css +16 -0
  187. package/src/themes/intl/ja.css +16 -0
  188. package/src/themes/intl/pt.css +16 -0
  189. package/src/themes/intl/zh.css +16 -0
  190. package/src/themes/intl.css +16 -0
  191. package/src/themes/monokai.css +22 -0
  192. package/src/themes/phosphor.css +5 -0
  193. package/src/themes/pro-dark.css +10 -0
  194. package/src/themes/solarized-dark.css +7 -0
  195. package/src/themes/solarized.css +7 -0
  196. package/src/themes/vaporwave.css +20 -0
  197. package/src/ts/column-format.ts +67 -46
  198. package/src/ts/perspective-viewer.ts +3 -0
  199. package/src/ts/plugin.ts +14 -0
  200. package/src/ts/providers.ts +96 -0
  201. package/src/ts/ts-rs/CompactDisplay.ts +3 -0
  202. package/src/ts/ts-rs/CurrencyCode.ts +3 -0
  203. package/src/ts/ts-rs/CurrencyDisplay.ts +3 -0
  204. package/src/ts/ts-rs/CurrencyNumberFormatStyle.ts +6 -0
  205. package/src/ts/ts-rs/CurrencySign.ts +3 -0
  206. package/src/ts/ts-rs/CustomDatetimeFormat.ts +3 -0
  207. package/src/ts/ts-rs/CustomDatetimeStyleConfig.ts +54 -0
  208. package/src/ts/ts-rs/CustomNumberFormatConfig.ts +25 -0
  209. package/src/ts/ts-rs/DatetimeColorMode.ts +3 -0
  210. package/src/ts/ts-rs/DatetimeFormatType.ts +8 -0
  211. package/src/ts/ts-rs/FormatMode.ts +3 -0
  212. package/src/ts/ts-rs/FormatUnit.ts +3 -0
  213. package/src/ts/ts-rs/Notation.ts +11 -0
  214. package/src/ts/ts-rs/NumberFormatStyle.ts +12 -0
  215. package/src/ts/ts-rs/PanelViewerConfig.ts +48 -2
  216. package/src/ts/ts-rs/PluginStaticConfig.ts +36 -1
  217. package/src/ts/ts-rs/RestoreOptions.ts +20 -0
  218. package/src/ts/ts-rs/RoundingMode.ts +3 -0
  219. package/src/ts/ts-rs/RoundingPriority.ts +3 -0
  220. package/src/ts/ts-rs/SaveWorkspaceOptions.ts +11 -0
  221. package/src/ts/ts-rs/SignDisplay.ts +3 -0
  222. package/src/ts/ts-rs/SimpleDatetimeFormat.ts +3 -0
  223. package/src/ts/ts-rs/SimpleDatetimeStyleConfig.ts +25 -0
  224. package/src/ts/ts-rs/SplitRollupMode.ts +11 -0
  225. package/src/ts/ts-rs/StringColorMode.ts +3 -0
  226. package/src/ts/ts-rs/TrailingZeroDisplay.ts +3 -0
  227. package/src/ts/ts-rs/Unit.ts +3 -0
  228. package/src/ts/ts-rs/UnitDisplay.ts +3 -0
  229. package/src/ts/ts-rs/UnitNumberFormatStyle.ts +5 -0
  230. package/src/ts/ts-rs/UseGrouping.ts +3 -0
  231. package/src/ts/ts-rs/ViewerConfig.ts +48 -2
  232. package/src/ts/ts-rs/ViewerConfigInitial.ts +164 -0
  233. package/src/ts/ts-rs/ViewerConfigUpdate.ts +72 -2
  234. package/src/ts/ts-rs/WindowSpec.ts +3 -2
  235. package/src/ts/ts-rs/WorkspaceConfig.ts +8 -2
  236. package/src/ts/ts-rs/WorkspaceConfigUpdate.ts +18 -9
  237. package/dist/esm/ts-rs/WindowAggregate.d.ts +0 -1
  238. package/src/rust/components/form/color_range_selector.rs +0 -137
  239. package/src/ts/ts-rs/WindowAggregate.ts +0 -3
  240. /package/dist/wasm/snippets/{perspective-viewer-8a8c7d5d696b43ae → perspective-viewer-39c3c3b28e3cbd48}/inline0.js +0 -0
  241. /package/dist/wasm/snippets/{perspective-viewer-8a8c7d5d696b43ae → perspective-viewer-39c3c3b28e3cbd48}/inline1.js +0 -0
  242. /package/dist/wasm/snippets/{perspective-viewer-8a8c7d5d696b43ae → perspective-viewer-39c3c3b28e3cbd48}/inline2.js +0 -0
  243. /package/dist/wasm/snippets/{perspective-viewer-8a8c7d5d696b43ae → perspective-viewer-39c3c3b28e3cbd48}/inline3.js +0 -0
  244. /package/dist/wasm/snippets/{perspective-viewer-8a8c7d5d696b43ae → perspective-viewer-39c3c3b28e3cbd48}/inline4.js +0 -0
  245. /package/dist/wasm/snippets/{perspective-viewer-8a8c7d5d696b43ae → perspective-viewer-39c3c3b28e3cbd48}/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;
@@ -43,6 +46,7 @@ export const perspectiveviewerelement_getPlugin: (a: number, b: number, c: numbe
43
46
  export const perspectiveviewerelement_getRenderStats: (a: number, b: number, c: number) => void;
44
47
  export const perspectiveviewerelement_getSelection: (a: number, b: number, c: number) => void;
45
48
  export const perspectiveviewerelement_getTable: (a: number, b: number) => number;
49
+ export const perspectiveviewerelement_getThemes: (a: number) => number;
46
50
  export const perspectiveviewerelement_getView: (a: number, b: number) => number;
47
51
  export const perspectiveviewerelement_getViewConfig: (a: number, b: number) => number;
48
52
  export const perspectiveviewerelement_load: (a: number, b: number, c: number) => void;
@@ -56,7 +60,7 @@ export const perspectiveviewerelement_restore: (a: number, b: number, c: number)
56
60
  export const perspectiveviewerelement_restoreWorkspace: (a: number, b: number) => number;
57
61
  export const perspectiveviewerelement_restyleElement: (a: number) => number;
58
62
  export const perspectiveviewerelement_save: (a: number, b: number) => number;
59
- export const perspectiveviewerelement_saveWorkspace: (a: number) => number;
63
+ export const perspectiveviewerelement_saveWorkspace: (a: number, b: number) => number;
60
64
  export const perspectiveviewerelement_setActivePanel: (a: number, b: number, c: number) => number;
61
65
  export const perspectiveviewerelement_setAutoPause: (a: number, b: number) => number;
62
66
  export const perspectiveviewerelement_setAutoSize: (a: number, b: number) => void;
@@ -96,7 +100,7 @@ export const client_table: (a: number, b: number, c: number) => number;
96
100
  export const client_terminate: (a: number, b: number) => void;
97
101
  export const genericsqlvirtualservermodel_getHostedTables: (a: number, b: number) => void;
98
102
  export const genericsqlvirtualservermodel_new: (a: number, b: number) => void;
99
- export const genericsqlvirtualservermodel_tableMakeView: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
103
+ export const genericsqlvirtualservermodel_tableMakeView: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => void;
100
104
  export const genericsqlvirtualservermodel_tableSchema: (a: number, b: number, c: number, d: number) => void;
101
105
  export const genericsqlvirtualservermodel_tableSize: (a: number, b: number, c: number, d: number) => void;
102
106
  export const genericsqlvirtualservermodel_tableValidateExpression: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
@@ -163,21 +167,22 @@ export const virtualdataslice_setIntegerCol: (a: number, b: number, c: number, d
163
167
  export const virtualdataslice_setStringCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
164
168
  export const virtualserver_handleRequest: (a: number, b: number, c: number) => number;
165
169
  export const virtualserver_new: (a: number, b: number) => void;
166
- export const __wasm_bindgen_func_elem_3667: (a: number, b: number) => void;
167
- export const __wasm_bindgen_func_elem_16364: (a: number, b: number) => void;
168
- export const __wasm_bindgen_func_elem_19409: (a: number, b: number) => void;
169
- export const __wasm_bindgen_func_elem_20067: (a: number, b: number) => void;
170
- export const __wasm_bindgen_func_elem_20096: (a: number, b: number) => void;
171
- export const __wasm_bindgen_func_elem_27549: (a: number, b: number, c: number, d: number) => void;
172
- export const __wasm_bindgen_func_elem_6430: (a: number, b: number, c: number) => void;
173
- export const __wasm_bindgen_func_elem_6431: (a: number, b: number, c: number) => void;
174
- export const __wasm_bindgen_func_elem_6432: (a: number, b: number, c: number) => void;
175
- export const __wasm_bindgen_func_elem_6428: (a: number, b: number, c: number) => void;
176
- export const __wasm_bindgen_func_elem_19529: (a: number, b: number, c: number) => void;
177
- export const __wasm_bindgen_func_elem_20072: (a: number, b: number, c: number) => void;
178
- export const __wasm_bindgen_func_elem_20113: (a: number, b: number, c: number) => void;
179
- export const __wasm_bindgen_func_elem_17084: (a: number, b: number) => number;
180
- export const __wasm_bindgen_func_elem_20071: (a: number, b: number) => void;
170
+ export const __wasm_bindgen_func_elem_17916: (a: number, b: number) => void;
171
+ export const __wasm_bindgen_func_elem_18625: (a: number, b: number) => void;
172
+ export const __wasm_bindgen_func_elem_19491: (a: number, b: number) => void;
173
+ export const __wasm_bindgen_func_elem_4310: (a: number, b: number) => void;
174
+ export const __wasm_bindgen_func_elem_24164: (a: number, b: number) => void;
175
+ export const __wasm_bindgen_func_elem_32290: (a: number, b: number, c: number, d: number) => void;
176
+ export const __wasm_bindgen_func_elem_18035: (a: number, b: number, c: number) => void;
177
+ export const __wasm_bindgen_func_elem_18630: (a: number, b: number, c: number) => void;
178
+ export const __wasm_bindgen_func_elem_7520: (a: number, b: number, c: number) => void;
179
+ export const __wasm_bindgen_func_elem_7521: (a: number, b: number, c: number) => void;
180
+ export const __wasm_bindgen_func_elem_7522: (a: number, b: number, c: number) => void;
181
+ export const __wasm_bindgen_func_elem_7518: (a: number, b: number, c: number) => void;
182
+ export const __wasm_bindgen_func_elem_24181: (a: number, b: number, c: number) => void;
183
+ export const __wasm_bindgen_func_elem_20501: (a: number, b: number) => number;
184
+ export const __wasm_bindgen_func_elem_18629: (a: number, b: number) => void;
185
+ export const __wasm_bindgen_func_elem_20502: (a: number, b: number) => void;
181
186
  export const __wbindgen_export: (a: number, b: number) => number;
182
187
  export const __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
183
188
  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.1.0",
3
+ "version": "5.3.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,6 +181,14 @@
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;
@@ -150,15 +150,15 @@
150
150
  content: var(--psp-label--number-fg-mode--content, "Foreground");
151
151
  }
152
152
 
153
- label#pos_fg_color-label:before {
153
+ label#fg_colors-label:before {
154
154
  content: var(--psp-label--number-fg-mode--content, "Foreground");
155
155
  }
156
156
 
157
157
  label#number_bg_mode-label:before {
158
- content: var(--psp-label--number-fg-mode--content, "Background");
158
+ content: var(--psp-label--number-bg-mode--content, "Background");
159
159
  }
160
160
 
161
- label#pos_bg_color-label:before {
161
+ label#bg_colors-label:before {
162
162
  content: var(--psp-label--pos-bg-color--content, "Background");
163
163
  }
164
164
 
@@ -187,8 +187,12 @@
187
187
  content: var(--psp-label--series--content, "Series");
188
188
  }
189
189
 
190
- label#color-range-label:before {
191
- content: var(--psp-label--color-range--content, "Color Range");
190
+ label#palette-label:before {
191
+ content: var(--psp-label--palette--content, "Palette");
192
+ }
193
+
194
+ label#gradient-label:before {
195
+ content: var(--psp-label--gradient--content, "Gradient");
192
196
  }
193
197
 
194
198
  label#style-label:before {
@@ -221,34 +221,224 @@
221
221
  align-items: center;
222
222
  flex-wrap: nowrap;
223
223
  flex: 1 1 100%;
224
- .color-thermometer {
224
+ }
225
+
226
+ .palette-selector {
227
+ .palette-swatches {
228
+ display: flex;
229
+ flex-wrap: wrap;
230
+ align-items: center;
231
+ gap: 4px;
225
232
  flex: 1 1 auto;
233
+ width: 0px;
234
+ max-height: 84px;
235
+ overflow-y: auto;
236
+ overflow-x: hidden;
237
+ padding: 0px 0 4px 0;
238
+ }
239
+
240
+ .palette-swatch {
241
+ position: relative;
242
+ width: 24px;
226
243
  height: 24px;
244
+ touch-action: none;
245
+
246
+ input[type="color"] {
247
+ width: 24px;
248
+ height: 24px;
249
+ border-radius: 3px;
250
+ }
251
+
252
+ &.dragging {
253
+ opacity: 0.5;
254
+ outline: 1px dashed var(--psp--color);
255
+ outline-offset: -1px;
256
+ border-radius: 3px;
257
+ }
258
+
259
+ .palette-swatch-remove {
260
+ position: absolute;
261
+ top: -2px;
262
+ right: -7px;
263
+ width: 14px;
264
+ height: 14px;
265
+ cursor: pointer;
266
+ display: none;
267
+ background-color: var(--psp--color);
268
+ -webkit-mask-size: cover;
269
+ mask-size: cover;
270
+ -webkit-mask-image: var(--psp-icon--close--mask-image);
271
+ mask-image: var(--psp-icon--close--mask-image);
272
+ }
273
+
274
+ &:hover .palette-swatch-remove {
275
+ display: inline-block;
276
+ }
277
+ }
278
+
279
+ .palette-swatches.reordering .palette-swatch-remove {
280
+ display: none;
281
+ }
282
+
283
+ .palette-add {
284
+ width: 22px;
285
+ height: 22px;
286
+ border: 1px dashed var(--psp-inactive--color);
287
+ border-radius: 3px;
288
+ cursor: pointer;
289
+ display: flex;
290
+ align-items: center;
291
+ justify-content: center;
292
+
293
+ &:before {
294
+ content: "+";
295
+ font-size: 14px;
296
+ line-height: 1;
297
+ color: var(--psp-inactive--color);
298
+ }
299
+
300
+ &:hover {
301
+ border-color: var(--psp--color);
302
+
303
+ &:before {
304
+ color: var(--psp--color);
305
+ }
306
+ }
227
307
  }
228
308
  }
229
309
 
230
- .color-selector {
231
- display: grid;
310
+ .gradient-stops-selector {
311
+ padding: 12px 0 16px 0;
232
312
 
233
- input {
234
- grid-column: 1;
235
- grid-row: 1;
313
+ .gradient-stops-bar {
314
+ cursor: copy;
315
+ position: relative;
316
+ flex: 1 1 auto;
317
+ height: 24px;
318
+ border-radius: 2px;
236
319
  }
237
- .color-label {
320
+
321
+ .gradient-stops-bar.discrete {
322
+ cursor: auto;
323
+ position: relative;
324
+ flex: 1 1 auto;
325
+ height: 24px;
326
+ border-radius: 2px;
327
+ }
328
+
329
+ .gradient-stop-handle {
330
+ position: absolute;
331
+ top: 0;
332
+ transform: translateX(-50%);
238
333
  display: flex;
239
- justify-content: center;
334
+ flex-direction: column;
240
335
  align-items: center;
241
- font-size: 14px;
242
- grid-column: 1;
243
- grid-row: 1;
244
- margin: 0;
245
- font-family: var(--psp-button--font-family, inherit);
246
- color: var(--sign--color, white);
247
- width: 36px;
336
+ width: 14px;
337
+ }
338
+
339
+ .gradient-stop-grip {
340
+ width: 14px;
248
341
  height: 24px;
249
- text-align: center;
250
- z-index: 1;
251
- pointer-events: none;
342
+ cursor: ew-resize;
343
+ touch-action: none;
344
+
345
+ &.disabled {
346
+ cursor: default;
347
+ }
348
+
349
+ &:before {
350
+ content: "";
351
+ display: block;
352
+ width: 0px;
353
+ height: 100%;
354
+ margin: 0 auto;
355
+ border: 1px solid var(--psp--background-color, #fff);
356
+ }
357
+ }
358
+
359
+ .gradient-stop-remove {
360
+ position: absolute;
361
+ top: -14px;
362
+ width: 14px;
363
+ height: 13px;
364
+ cursor: pointer;
365
+ display: inline-block;
366
+ background-color: var(--psp--color);
367
+ -webkit-mask-size: cover;
368
+ mask-size: cover;
369
+ -webkit-mask-image: var(--psp-icon--close--mask-image);
370
+ mask-image: var(--psp-icon--close--mask-image);
371
+
372
+ &.disabled {
373
+ cursor: default;
374
+ background-color: var(--psp-inactive--color);
375
+ }
376
+ }
377
+
378
+ .gradient-stop-lock {
379
+ position: absolute;
380
+ top: -14px;
381
+ width: 14px;
382
+ height: 13px;
383
+ display: inline-block;
384
+ background-color: var(--psp--color);
385
+ -webkit-mask-size: cover;
386
+ mask-size: cover;
387
+ -webkit-mask-image: var(--psp-icon--lock--mask-image);
388
+ mask-image: var(--psp-icon--lock--mask-image);
389
+ }
390
+
391
+ .gradient-stop-handle input[type="color"] {
392
+ width: 14px;
393
+ height: 14px;
394
+ margin-top: 2px;
395
+ border-radius: 3px;
396
+ }
397
+ }
398
+
399
+ .named-value-controls {
400
+ display: flex;
401
+ justify-content: flex-end;
402
+ align-items: center;
403
+ gap: 10px;
404
+ flex: 1 1 100%;
405
+ height: 0;
406
+ margin-top: 10px;
407
+ margin-bottom: -10px;
408
+ margin-right: 24px;
409
+ position: relative;
410
+ z-index: 1;
411
+ font-size: var(--label--font-size, 0.75em);
412
+ color: var(--psp-inactive--color);
413
+
414
+ select.named-value-select {
415
+ height: 15px;
416
+ padding: 0;
417
+ font-size: var(--label--font-size, 0.75em);
418
+ color: inherit;
419
+ background: none;
420
+ border: none;
421
+ cursor: pointer;
422
+
423
+ &:hover {
424
+ color: var(--psp--color, inherit);
425
+ }
426
+ }
427
+
428
+ .named-value-pin {
429
+ cursor: pointer;
430
+ user-select: none;
431
+ line-height: 15px;
432
+
433
+ &:before {
434
+ font-family: var(--psp-button--font-family, inherit);
435
+ color: var(--psp-inactive--color, #666);
436
+ content: var(--psp-label--pin-button--content, "Save");
437
+ }
438
+
439
+ &:hover:before {
440
+ color: var(--psp--color, inherit);
441
+ }
252
442
  }
253
443
  }
254
444
 
@@ -259,23 +449,11 @@
259
449
  padding: 0;
260
450
  font-family: inherit;
261
451
  overflow: hidden;
262
- border-radius: 12px;
452
+ border-radius: 3px;
263
453
 
264
454
  &:hover {
265
455
  opacity: 0.8;
266
456
  }
267
-
268
- &.pos-color-param {
269
- width: 36px;
270
- border-radius: 12px 0 0 12px;
271
- margin: 0 1px 0 0;
272
- }
273
-
274
- &.neg-color-param {
275
- width: 36px;
276
- border-radius: 0 12px 12px 0;
277
- margin: 0 0 0 1px;
278
- }
279
457
  }
280
458
 
281
459
  ::-webkit-color-swatch-wrapper {
@@ -201,12 +201,46 @@
201
201
  pointer-events: none;
202
202
  }
203
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. */
204
216
  #group_by label.pivot-selector-label:before {
205
- 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") ")";
206
225
  }
207
226
 
208
227
  #split_by label.pivot-selector-label:before {
209
- 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;
210
244
  }
211
245
 
212
246
  #sort label.pivot-selector-label:before {
@@ -320,7 +354,8 @@
320
354
  }
321
355
  }
322
356
 
323
- .group_rollup_wrapper {
357
+ .group_rollup_wrapper,
358
+ .split_rollup_wrapper {
324
359
  margin-bottom: -30px;
325
360
  flex: 0 1 auto;
326
361
  color: var(--psp-inactive--color);
@@ -16,12 +16,13 @@
16
16
  position: relative;
17
17
  flex: 1 1 auto;
18
18
  height: 100%;
19
+ font-size: 12px;
19
20
 
20
21
  &:after {
21
22
  content: attr(data-value) " ";
22
23
  visibility: hidden;
23
24
  white-space: nowrap;
24
- padding-right: 17px;
25
+ padding-right: 20px;
25
26
  }
26
27
 
27
28
  select {
@@ -12,6 +12,10 @@
12
12
  */
13
13
 
14
14
  :host {
15
+ #editor.contained {
16
+ contain: inline-size;
17
+ }
18
+
15
19
  #editor {
16
20
  display: flex;
17
21
  flex: 1 1 auto;
@@ -23,10 +27,9 @@
23
27
  height: 100px;
24
28
  }
25
29
 
26
- #editor-inner {
30
+ /* `position`/`display` come from `.mirrored-textarea`. */
31
+ .editor-inner {
27
32
  overflow: hidden;
28
- position: relative;
29
- display: flex;
30
33
  flex: 1 1 auto;
31
34
  }
32
35
 
@@ -66,10 +69,6 @@
66
69
  white-space: pre;
67
70
  overflow: hidden;
68
71
 
69
- span {
70
- /* display: contents; */
71
- }
72
-
73
72
  .comment {
74
73
  color: var(--psp-code-editor--comment--color, orange);
75
74
  }
@@ -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
+ }