@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
@@ -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");
@@ -118,6 +118,22 @@ perspective-dropdown {
118
118
  --psp-label--query-tab--content: "Abfrage";
119
119
  --psp-label--plugin-tab--content: "Plugin";
120
120
  --psp-label--debug-tab--content: "JSON";
121
+ --psp-label--chat-tab--content: "Chat";
122
+
123
+ /* Chat panel */
124
+ --psp-label--chat-reasoning--content: "Denkprozess";
125
+ --psp-label--chat-send--content: "Senden";
126
+ --psp-label--chat-stop--content: "Stopp";
127
+ --psp-label--chat-placeholder--content: "Frage zu Ihren Daten…";
128
+
129
+ /* Plugin-declared pivot roles (PluginStaticConfig) */
130
+ --psp-label--role--x-axis--content: "X-Achse";
131
+ --psp-label--role--y-axis--content: "Y-Achse";
132
+ --psp-label--role--series--content: "Serien";
133
+ --psp-label--role--hierarchy--content: "Hierarchie";
134
+ --psp-label--role--facets--content: "Facetten";
135
+ --psp-label--role--row-groups--content: "Zeilengruppen";
136
+ --psp-label--role--column-groups--content: "Spaltengruppen";
121
137
 
122
138
  /* Plugin settings */
123
139
  --psp-label--edit-mode--content: "Bearbeitungsmodus";
@@ -118,6 +118,22 @@ perspective-dropdown {
118
118
  --psp-label--query-tab--content: "Consulta";
119
119
  --psp-label--plugin-tab--content: "Plugin";
120
120
  --psp-label--debug-tab--content: "JSON";
121
+ --psp-label--chat-tab--content: "Chat";
122
+
123
+ /* Chat panel */
124
+ --psp-label--chat-reasoning--content: "Razonamiento";
125
+ --psp-label--chat-send--content: "Enviar";
126
+ --psp-label--chat-stop--content: "Detener";
127
+ --psp-label--chat-placeholder--content: "Pregunta sobre tus datos…";
128
+
129
+ /* Plugin-declared pivot roles (PluginStaticConfig) */
130
+ --psp-label--role--x-axis--content: "Eje X";
131
+ --psp-label--role--y-axis--content: "Eje Y";
132
+ --psp-label--role--series--content: "Series";
133
+ --psp-label--role--hierarchy--content: "Jerarquía";
134
+ --psp-label--role--facets--content: "Facetas";
135
+ --psp-label--role--row-groups--content: "Grupos de filas";
136
+ --psp-label--role--column-groups--content: "Grupos de columnas";
121
137
 
122
138
  /* Plugin settings */
123
139
  --psp-label--edit-mode--content: "Modo de edición";
@@ -118,6 +118,22 @@ perspective-dropdown {
118
118
  --psp-label--query-tab--content: "Requête";
119
119
  --psp-label--plugin-tab--content: "Plugin";
120
120
  --psp-label--debug-tab--content: "JSON";
121
+ --psp-label--chat-tab--content: "Discussion";
122
+
123
+ /* Chat panel */
124
+ --psp-label--chat-reasoning--content: "Raisonnement";
125
+ --psp-label--chat-send--content: "Envoyer";
126
+ --psp-label--chat-stop--content: "Arrêter";
127
+ --psp-label--chat-placeholder--content: "Question sur vos données…";
128
+
129
+ /* Plugin-declared pivot roles (PluginStaticConfig) */
130
+ --psp-label--role--x-axis--content: "Axe X";
131
+ --psp-label--role--y-axis--content: "Axe Y";
132
+ --psp-label--role--series--content: "Séries";
133
+ --psp-label--role--hierarchy--content: "Hiérarchie";
134
+ --psp-label--role--facets--content: "Facettes";
135
+ --psp-label--role--row-groups--content: "Groupes de lignes";
136
+ --psp-label--role--column-groups--content: "Groupes de colonnes";
121
137
 
122
138
  /* Plugin settings */
123
139
  --psp-label--edit-mode--content: "Mode édition";
@@ -118,6 +118,22 @@ perspective-dropdown {
118
118
  --psp-label--query-tab--content: "クエリ";
119
119
  --psp-label--plugin-tab--content: "プラグイン";
120
120
  --psp-label--debug-tab--content: "JSON";
121
+ --psp-label--chat-tab--content: "チャット";
122
+
123
+ /* Chat panel */
124
+ --psp-label--chat-reasoning--content: "推論";
125
+ --psp-label--chat-send--content: "送信";
126
+ --psp-label--chat-stop--content: "停止";
127
+ --psp-label--chat-placeholder--content: "データについて質問…";
128
+
129
+ /* Plugin-declared pivot roles (PluginStaticConfig) */
130
+ --psp-label--role--x-axis--content: "X軸";
131
+ --psp-label--role--y-axis--content: "Y軸";
132
+ --psp-label--role--series--content: "系列";
133
+ --psp-label--role--hierarchy--content: "階層";
134
+ --psp-label--role--facets--content: "ファセット";
135
+ --psp-label--role--row-groups--content: "行グループ";
136
+ --psp-label--role--column-groups--content: "列グループ";
121
137
 
122
138
  /* Plugin settings */
123
139
  --psp-label--edit-mode--content: "編集モード";
@@ -118,6 +118,22 @@ perspective-dropdown {
118
118
  --psp-label--query-tab--content: "Consulta";
119
119
  --psp-label--plugin-tab--content: "Plugin";
120
120
  --psp-label--debug-tab--content: "JSON";
121
+ --psp-label--chat-tab--content: "Conversa";
122
+
123
+ /* Chat panel */
124
+ --psp-label--chat-reasoning--content: "Raciocínio";
125
+ --psp-label--chat-send--content: "Enviar";
126
+ --psp-label--chat-stop--content: "Parar";
127
+ --psp-label--chat-placeholder--content: "Pergunte sobre seus dados…";
128
+
129
+ /* Plugin-declared pivot roles (PluginStaticConfig) */
130
+ --psp-label--role--x-axis--content: "Eixo X";
131
+ --psp-label--role--y-axis--content: "Eixo Y";
132
+ --psp-label--role--series--content: "Séries";
133
+ --psp-label--role--hierarchy--content: "Hierarquia";
134
+ --psp-label--role--facets--content: "Facetas";
135
+ --psp-label--role--row-groups--content: "Grupos de linhas";
136
+ --psp-label--role--column-groups--content: "Grupos de colunas";
121
137
 
122
138
  /* Plugin settings */
123
139
  --psp-label--edit-mode--content: "Modo de edição";
@@ -118,6 +118,22 @@ perspective-dropdown {
118
118
  --psp-label--query-tab--content: "查询";
119
119
  --psp-label--plugin-tab--content: "插件";
120
120
  --psp-label--debug-tab--content: "JSON";
121
+ --psp-label--chat-tab--content: "聊天";
122
+
123
+ /* Chat panel */
124
+ --psp-label--chat-reasoning--content: "推理";
125
+ --psp-label--chat-send--content: "发送";
126
+ --psp-label--chat-stop--content: "停止";
127
+ --psp-label--chat-placeholder--content: "询问您的数据…";
128
+
129
+ /* Plugin-declared pivot roles (PluginStaticConfig) */
130
+ --psp-label--role--x-axis--content: "X 轴";
131
+ --psp-label--role--y-axis--content: "Y 轴";
132
+ --psp-label--role--series--content: "系列";
133
+ --psp-label--role--hierarchy--content: "层级";
134
+ --psp-label--role--facets--content: "分面";
135
+ --psp-label--role--row-groups--content: "行分组";
136
+ --psp-label--role--column-groups--content: "列分组";
121
137
 
122
138
  /* Plugin settings */
123
139
  --psp-label--edit-mode--content: "编辑模式";
@@ -108,6 +108,22 @@ perspective-dropdown {
108
108
  --psp-label--query-tab--content: "Query";
109
109
  --psp-label--plugin-tab--content: "Plugin";
110
110
  --psp-label--debug-tab--content: "JSON";
111
+ --psp-label--chat-tab--content: "Chat";
112
+
113
+ /* Chat panel */
114
+ --psp-label--chat-reasoning--content: "Reasoning";
115
+ --psp-label--chat-send--content: "Send";
116
+ --psp-label--chat-stop--content: "Stop";
117
+ --psp-label--chat-placeholder--content: "Ask Perspective ...";
118
+
119
+ /* Plugin-declared pivot roles (PluginStaticConfig) */
120
+ --psp-label--role--x-axis--content: "X Axis";
121
+ --psp-label--role--y-axis--content: "Y Axis";
122
+ --psp-label--role--series--content: "Series";
123
+ --psp-label--role--hierarchy--content: "Hierarchy";
124
+ --psp-label--role--facets--content: "Facets";
125
+ --psp-label--role--row-groups--content: "Row Groups";
126
+ --psp-label--role--column-groups--content: "Column Groups";
111
127
 
112
128
  /* Window editor */
113
129
  --psp-label--window-source--content: "Column";
@@ -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,
@@ -24,34 +24,36 @@
24
24
  * per-field overrides (year / month / day / ...).
25
25
  */
26
26
 
27
- export interface NumberFormatConfig {
28
- style?: "decimal" | "currency" | "percent" | "unit";
29
- minimumFractionDigits?: number;
30
- maximumFractionDigits?: number;
31
- minimumIntegerDigits?: number;
32
- minimumSignificantDigits?: number;
33
- maximumSignificantDigits?: number;
34
- currency?: string;
35
- currencyDisplay?: "code" | "symbol" | "narrowSymbol" | "name";
36
- notation?: "standard" | "scientific" | "engineering" | "compact";
37
- compactDisplay?: "short" | "long";
38
- useGrouping?: boolean;
39
- }
27
+ import type { CustomNumberFormatConfig } from "./ts-rs/CustomNumberFormatConfig.d.ts";
28
+ import type { NumberFormatStyle } from "./ts-rs/NumberFormatStyle.d.ts";
29
+ import type { Notation } from "./ts-rs/Notation.d.ts";
30
+ import type { DatetimeFormatType } from "./ts-rs/DatetimeFormatType.d.ts";
31
+ import type { SimpleDatetimeStyleConfig } from "./ts-rs/SimpleDatetimeStyleConfig.d.ts";
32
+
33
+ /**
34
+ * A numeric column's `number_format` (`columns_config` value), exactly as
35
+ * the Style tab's editor WRITES it — the ts-rs projection of the Rust
36
+ * `CustomNumberFormatConfig`, re-composed with its serde-flattened
37
+ * `style` and `notation` families (ts-rs cannot flatten `Option<enum>`,
38
+ * so the Rust type `#[ts(skip)]`s them and they export separately).
39
+ */
40
+ export type NumberFormatConfig = CustomNumberFormatConfig &
41
+ Partial<NumberFormatStyle> &
42
+ Partial<Notation>;
40
43
 
41
- export interface DateFormatConfig {
42
- format?: "custom" | string;
43
- timeZone?: string;
44
- dateStyle?: "short" | "medium" | "long" | "full" | "disabled";
45
- timeStyle?: "short" | "medium" | "long" | "full" | "disabled";
46
- second?: "numeric" | "2-digit" | "disabled";
47
- minute?: "numeric" | "2-digit" | "disabled";
48
- hour?: "numeric" | "2-digit" | "disabled";
49
- day?: "numeric" | "2-digit" | "disabled";
50
- weekday?: "narrow" | "short" | "long" | "disabled";
51
- month?: "numeric" | "2-digit" | "narrow" | "short" | "long" | "disabled";
52
- year?: "numeric" | "2-digit" | "disabled";
53
- hour12?: boolean;
54
- fractionalSecondDigits?: 1 | 2 | 3;
44
+ /**
45
+ * A datetime column's `date_format` (`columns_config` value) — the Rust
46
+ * `DatetimeFormatType` union: a `Simple` preset (`dateStyle` /
47
+ * `timeStyle`), or per-part custom fields discriminated by
48
+ * `format: "custom"`.
49
+ */
50
+ export type DateFormatConfig = DatetimeFormatType;
51
+
52
+ /** Narrow a [`DateFormatConfig`] to its `Simple` arm, if it is one. */
53
+ function simple_config(
54
+ cfg?: DateFormatConfig,
55
+ ): SimpleDatetimeStyleConfig | undefined {
56
+ return cfg && !("format" in cfg) ? cfg : undefined;
55
57
  }
56
58
 
57
59
  /**
@@ -85,55 +87,73 @@ export function createNumberFormatter(
85
87
  type: string,
86
88
  cfg?: NumberFormatConfig,
87
89
  ): Intl.NumberFormat {
88
- const opts: Intl.NumberFormatOptions =
89
- cfg ?? NUMERIC_LEGACY_DEFAULTS[type] ?? {};
90
+ // ts-rs renders serde-absent keys as `T | null`; the wire never
91
+ // carries an explicit `null` (`skip_serializing_if`), and
92
+ // `Intl.NumberFormat` treats both absent and `undefined` the same, so
93
+ // the cast is presentation-only.
94
+ const opts = (cfg ??
95
+ NUMERIC_LEGACY_DEFAULTS[type] ??
96
+ {}) as Intl.NumberFormatOptions;
90
97
  return new Intl.NumberFormat(navigator.languages as string[], opts);
91
98
  }
92
99
 
93
100
  export function createDatetimeFormatter(
94
101
  cfg?: DateFormatConfig,
95
102
  ): Intl.DateTimeFormat {
96
- if (!cfg || cfg.format !== "custom") {
103
+ if (!cfg || !("format" in cfg)) {
104
+ const preset = simple_config(cfg);
97
105
  const opts: Intl.DateTimeFormatOptions = {
98
- timeZone: cfg?.timeZone,
106
+ timeZone: preset?.timeZone ?? undefined,
99
107
  dateStyle:
100
- cfg?.dateStyle === "disabled"
108
+ preset?.dateStyle === "disabled"
101
109
  ? undefined
102
- : (cfg?.dateStyle ?? DATETIME_LEGACY_DEFAULTS.dateStyle),
110
+ : (preset?.dateStyle ?? DATETIME_LEGACY_DEFAULTS.dateStyle),
103
111
  timeStyle:
104
- cfg?.timeStyle === "disabled"
112
+ preset?.timeStyle === "disabled"
105
113
  ? undefined
106
- : (cfg?.timeStyle ?? DATETIME_LEGACY_DEFAULTS.timeStyle),
114
+ : (preset?.timeStyle ?? DATETIME_LEGACY_DEFAULTS.timeStyle),
107
115
  };
108
116
 
109
117
  return new Intl.DateTimeFormat(navigator.languages as string[], opts);
110
118
  }
111
119
 
120
+ // Per-part fields are the shared `CustomDatetimeFormat` enum; the
121
+ // editor only writes each part's `Intl`-valid subset, so the
122
+ // narrowing casts below are presentation-only.
112
123
  const opts: Intl.DateTimeFormatOptions = {
113
- timeZone: cfg.timeZone,
124
+ timeZone: cfg.timeZone ?? undefined,
114
125
  hour12: cfg.hour12 ?? true,
115
- fractionalSecondDigits: cfg.fractionalSecondDigits,
126
+ fractionalSecondDigits: cfg.fractionalSecondDigits as
127
+ | 1
128
+ | 2
129
+ | 3
130
+ | undefined,
116
131
  };
117
132
  if (cfg.year !== "disabled") {
118
- opts.year = cfg.year ?? "2-digit";
133
+ opts.year = (cfg.year ??
134
+ "2-digit") as Intl.DateTimeFormatOptions["year"];
119
135
  }
120
136
  if (cfg.month !== "disabled") {
121
- opts.month = cfg.month ?? "numeric";
137
+ opts.month = (cfg.month ??
138
+ "numeric") as Intl.DateTimeFormatOptions["month"];
122
139
  }
123
140
  if (cfg.day !== "disabled") {
124
- opts.day = cfg.day ?? "numeric";
141
+ opts.day = (cfg.day ?? "numeric") as Intl.DateTimeFormatOptions["day"];
125
142
  }
126
143
  if (cfg.weekday && cfg.weekday !== "disabled") {
127
- opts.weekday = cfg.weekday;
144
+ opts.weekday = cfg.weekday as Intl.DateTimeFormatOptions["weekday"];
128
145
  }
129
146
  if (cfg.hour !== "disabled") {
130
- opts.hour = cfg.hour ?? "numeric";
147
+ opts.hour = (cfg.hour ??
148
+ "numeric") as Intl.DateTimeFormatOptions["hour"];
131
149
  }
132
150
  if (cfg.minute !== "disabled") {
133
- opts.minute = cfg.minute ?? "numeric";
151
+ opts.minute = (cfg.minute ??
152
+ "numeric") as Intl.DateTimeFormatOptions["minute"];
134
153
  }
135
154
  if (cfg.second !== "disabled") {
136
- opts.second = cfg.second ?? "numeric";
155
+ opts.second = (cfg.second ??
156
+ "numeric") as Intl.DateTimeFormatOptions["second"];
137
157
  }
138
158
  return new Intl.DateTimeFormat(navigator.languages as string[], opts);
139
159
  }
@@ -141,12 +161,13 @@ export function createDatetimeFormatter(
141
161
  export function createDateFormatter(
142
162
  cfg?: DateFormatConfig,
143
163
  ): Intl.DateTimeFormat {
164
+ const preset = simple_config(cfg);
144
165
  const opts: Intl.DateTimeFormatOptions = {
145
166
  timeZone: "utc",
146
167
  dateStyle:
147
- cfg?.dateStyle === "disabled"
168
+ preset?.dateStyle === "disabled"
148
169
  ? undefined
149
- : (cfg?.dateStyle ?? DATE_LEGACY_DEFAULTS.dateStyle),
170
+ : (preset?.dateStyle ?? DATE_LEGACY_DEFAULTS.dateStyle),
150
171
  };
151
172
  return new Intl.DateTimeFormat(navigator.languages as string[], opts);
152
173
  }
@@ -35,6 +35,8 @@ import "regular-layout";
35
35
 
36
36
  export { IPerspectiveViewerPlugin } from "./plugin";
37
37
  export { HTMLPerspectiveViewerPluginElement } from "./plugin";
38
+ export { providers } from "./providers";
39
+ export type { AgentProviderPreset } from "./providers";
38
40
 
39
41
  export {
40
42
  createNumberFormatter,
@@ -56,6 +58,7 @@ export type * from "./ts-rs/FilterReducer.d.ts";
56
58
  export type * from "./ts-rs/PluginStaticConfig.ts";
57
59
  export type * from "./ts-rs/ExportMethod.d.ts";
58
60
  export type * from "./ts-rs/PanelOptions.d.ts";
61
+ export type * from "./ts-rs/SaveWorkspaceOptions.d.ts";
59
62
  export type * from "./ts-rs/ClientOptions.d.ts";
60
63
  export type * from "./ts-rs/ExportOptions.d.ts";
61
64
  export type * from "./ts-rs/GetTableOptions.d.ts";