@perspective-dev/viewer 4.4.1 → 4.5.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.
- package/dist/cdn/perspective-viewer.js +1 -2
- package/dist/cdn/perspective-viewer.js.map +4 -4
- package/dist/css/botanical.css +1 -1
- package/dist/css/dracula.css +1 -1
- package/dist/css/gruvbox-dark.css +1 -1
- package/dist/css/gruvbox.css +1 -1
- package/dist/css/icons.css +1 -1
- package/dist/css/intl/de.css +1 -1
- package/dist/css/intl/es.css +1 -1
- package/dist/css/intl/fr.css +1 -1
- package/dist/css/intl/ja.css +1 -1
- package/dist/css/intl/pt.css +1 -1
- package/dist/css/intl/zh.css +1 -1
- package/dist/css/intl.css +1 -1
- package/dist/css/monokai.css +1 -1
- package/dist/css/phosphor.css +1 -1
- package/dist/css/pro-dark.css +1 -1
- package/dist/css/pro.css +1 -1
- package/dist/css/solarized-dark.css +1 -1
- package/dist/css/solarized.css +1 -1
- package/dist/css/themes.css +1 -1
- package/dist/css/vaporwave.css +1 -1
- package/dist/esm/bootstrap.d.ts +2 -1
- package/dist/esm/column-format.d.ts +51 -0
- package/dist/esm/extensions.d.ts +2 -0
- package/dist/esm/perspective-viewer.d.ts +3 -1
- package/dist/esm/perspective-viewer.inline.js +1 -2
- package/dist/esm/perspective-viewer.inline.js.map +4 -4
- package/dist/esm/perspective-viewer.js +1 -2
- package/dist/esm/perspective-viewer.js.map +4 -4
- package/dist/esm/perspective-viewer.worker.d.ts +2 -0
- package/dist/esm/plugin.d.ts +16 -72
- package/dist/esm/ts-rs/ColumnSelectMode.d.ts +1 -0
- package/dist/esm/ts-rs/PluginStaticConfig.d.ts +77 -0
- package/dist/esm/ts-rs/ViewerConfig.d.ts +6 -3
- package/dist/esm/ts-rs/ViewerConfigUpdate.d.ts +7 -4
- package/dist/wasm/perspective-viewer.d.ts +77 -18
- package/dist/wasm/perspective-viewer.js +293 -144
- package/dist/wasm/perspective-viewer.wasm +0 -0
- package/dist/wasm/perspective-viewer.wasm.d.ts +20 -15
- package/package.json +24 -2
- package/src/css/column-selector.css +3 -2
- package/src/css/column-settings-panel.css +35 -6
- package/src/css/column-style.css +27 -2
- package/src/css/containers/scroll-panel.css +2 -1
- package/src/css/containers/tabs.css +8 -52
- package/src/css/dom/checkbox.css +0 -4
- package/src/css/form/code-editor.css +1 -0
- package/src/css/form/debug.css +3 -10
- package/src/css/plugin-selector.css +33 -0
- package/src/css/plugin-settings-panel.css +99 -0
- package/src/css/viewer.css +65 -3
- package/src/rust/components/column_dropdown.rs +3 -1
- package/src/rust/components/column_selector/active_column.rs +13 -19
- package/src/rust/components/column_selector/config_selector.rs +20 -20
- package/src/rust/components/column_selector/filter_column.rs +14 -14
- package/src/rust/components/column_selector/inactive_column.rs +9 -15
- package/src/rust/components/column_selector/pivot_column.rs +7 -7
- package/src/rust/components/column_selector/sort_column.rs +7 -7
- package/src/rust/components/column_selector.rs +55 -37
- package/src/rust/components/column_settings_sidebar/style_tab/agg_depth_selector.rs +15 -7
- package/src/rust/components/column_settings_sidebar/style_tab/primitive_field.rs +394 -0
- package/src/rust/components/column_settings_sidebar/style_tab/symbol.rs +15 -6
- package/src/rust/components/column_settings_sidebar/style_tab.rs +267 -136
- package/src/rust/components/column_settings_sidebar.rs +43 -49
- package/src/rust/components/containers/dragdrop_list.rs +5 -5
- package/src/rust/components/containers/mod.rs +0 -1
- package/src/rust/components/containers/scroll_panel.rs +21 -7
- package/src/rust/components/containers/sidebar.rs +8 -6
- package/src/rust/components/containers/split_panel.rs +3 -3
- package/src/rust/components/containers/tab_list.rs +3 -9
- package/src/rust/components/copy_dropdown.rs +2 -3
- package/src/rust/components/datetime_column_style.rs +19 -81
- package/src/rust/components/editable_header.rs +2 -3
- package/src/rust/components/export_dropdown.rs +2 -3
- package/src/rust/components/expression_editor.rs +29 -17
- package/src/rust/components/filter_dropdown.rs +2 -1
- package/src/rust/components/form/color_range_selector.rs +14 -7
- package/src/rust/components/form/debug.rs +47 -37
- package/src/rust/components/main_panel.rs +24 -65
- package/src/rust/components/mod.rs +2 -1
- package/src/rust/components/number_series_style.rs +161 -0
- package/src/rust/components/plugin_tab.rs +221 -0
- package/src/rust/components/settings_panel.rs +181 -59
- package/src/rust/components/status_bar.rs +140 -173
- package/src/rust/components/status_indicator.rs +15 -22
- package/src/rust/components/string_column_style.rs +20 -82
- package/src/rust/components/style_controls/number_string_format.rs +14 -30
- package/src/rust/components/viewer.rs +92 -131
- package/src/rust/config/column_config_schema.rs +195 -0
- package/src/rust/config/columns_config.rs +4 -97
- package/src/rust/config/datetime_column_style.rs +0 -5
- package/src/rust/config/mod.rs +8 -2
- package/src/rust/config/number_series_style.rs +79 -0
- package/src/rust/config/plugin_static_config.rs +144 -0
- package/src/rust/config/string_column_style.rs +0 -5
- package/src/rust/config/viewer_config.rs +5 -6
- package/src/rust/custom_elements/copy_dropdown.rs +30 -18
- package/src/rust/custom_elements/debug_plugin.rs +1 -3
- package/src/rust/custom_elements/export_dropdown.rs +26 -18
- package/src/rust/custom_elements/viewer.rs +62 -73
- package/src/rust/custom_events.rs +181 -224
- package/src/rust/js/plugin.rs +45 -117
- package/src/rust/lib.rs +34 -5
- package/src/rust/presentation/drag_helpers.rs +206 -0
- package/src/rust/presentation/props.rs +8 -0
- package/src/rust/presentation.rs +256 -41
- package/src/rust/{tasks → queries}/column_locator.rs +17 -73
- package/src/rust/queries/column_values.rs +59 -0
- package/src/rust/{tasks → queries}/columns_iter_set.rs +11 -18
- package/src/rust/queries/exports.rs +96 -0
- package/src/rust/queries/fetch_column_stats.rs +94 -0
- package/src/rust/queries/get_viewer_config.rs +54 -0
- package/src/rust/queries/mod.rs +44 -0
- package/src/rust/queries/plugin_column_styles.rs +101 -0
- package/src/rust/{engines.rs → queries/validate_expression.rs} +26 -15
- package/src/rust/renderer/activate.rs +1 -0
- package/src/rust/renderer/limits.rs +9 -4
- package/src/rust/renderer/plugin_store.rs +12 -0
- package/src/rust/renderer/props.rs +28 -3
- package/src/rust/renderer/registry.rs +40 -15
- package/src/rust/renderer.rs +640 -51
- package/src/rust/session/column_defaults_update.rs +20 -28
- package/src/rust/session/drag_drop_update.rs +10 -10
- package/src/rust/session/metadata.rs +31 -16
- package/src/rust/session/props.rs +15 -6
- package/src/rust/session/view_subscription.rs +10 -0
- package/src/rust/session.rs +109 -147
- package/src/rust/tasks/copy_export.rs +178 -158
- package/src/rust/tasks/{structural.rs → dismiss_render_warning.rs} +20 -40
- package/src/rust/tasks/edit_expression.rs +68 -88
- package/src/rust/tasks/eject.rs +25 -22
- package/src/rust/tasks/intersection_observer.rs +8 -21
- package/src/rust/tasks/mod.rs +19 -21
- package/src/rust/tasks/reset_all.rs +78 -0
- package/src/rust/tasks/resize_observer.rs +11 -33
- package/src/rust/tasks/restore_and_render.rs +117 -90
- package/src/rust/tasks/{get_viewer_config.rs → send_column_config.rs} +38 -35
- package/src/rust/tasks/send_plugin_config.rs +32 -33
- package/src/rust/tasks/update_and_render.rs +66 -47
- package/src/rust/{components/containers/trap_door_panel.rs → tasks/update_theme.rs} +34 -33
- package/src/rust/tasks/validate_expression.rs +61 -0
- package/src/rust/utils/browser/selection.rs +4 -4
- package/src/rust/utils/mod.rs +0 -63
- package/src/svg/mega-menu-icons-density.svg +23 -0
- package/src/svg/mega-menu-icons-map-density.svg +24 -0
- package/src/svg/mega-menu-icons-map-line.svg +19 -0
- package/src/themes/botanical.css +27 -53
- package/src/themes/defaults.css +24 -36
- package/src/themes/dracula.css +36 -54
- package/src/themes/gruvbox-dark.css +39 -59
- package/src/themes/gruvbox.css +16 -28
- package/src/themes/icons.css +3 -0
- package/src/themes/intl/de.css +42 -6
- package/src/themes/intl/es.css +42 -6
- package/src/themes/intl/fr.css +42 -6
- package/src/themes/intl/ja.css +42 -6
- package/src/themes/intl/pt.css +42 -6
- package/src/themes/intl/zh.css +42 -6
- package/src/themes/intl.css +37 -4
- package/src/themes/monokai.css +45 -61
- package/src/themes/phosphor.css +20 -29
- package/src/themes/pro-dark.css +25 -34
- package/src/themes/solarized-dark.css +21 -36
- package/src/themes/solarized.css +13 -23
- package/src/themes/vaporwave.css +40 -74
- package/src/ts/bootstrap.ts +14 -3
- package/src/ts/column-format.ts +162 -0
- package/src/ts/extensions.ts +4 -0
- package/src/ts/perspective-viewer.ts +9 -1
- package/src/{rust/components/column_settings_sidebar/style_tab/stub.rs → ts/perspective-viewer.worker.ts} +2 -22
- package/src/ts/plugin.ts +25 -101
- package/src/ts/ts-rs/{FormatUnit.ts → ColumnSelectMode.ts} +1 -1
- package/src/ts/ts-rs/PluginStaticConfig.ts +78 -0
- package/src/ts/ts-rs/ViewerConfig.ts +1 -2
- package/src/ts/ts-rs/ViewerConfigUpdate.ts +2 -3
- package/dist/esm/ts-rs/ColumnConfigValues.d.ts +0 -31
- package/dist/esm/ts-rs/CustomDatetimeFormat.d.ts +0 -1
- package/dist/esm/ts-rs/CustomDatetimeStyleConfig.d.ts +0 -15
- package/dist/esm/ts-rs/CustomNumberFormatConfig.d.ts +0 -18
- package/dist/esm/ts-rs/DatetimeColorMode.d.ts +0 -1
- package/dist/esm/ts-rs/DatetimeFormatType.d.ts +0 -6
- package/dist/esm/ts-rs/FormatMode.d.ts +0 -1
- package/dist/esm/ts-rs/FormatUnit.d.ts +0 -1
- package/dist/esm/ts-rs/NumberBackgroundMode.d.ts +0 -1
- package/dist/esm/ts-rs/NumberForegroundMode.d.ts +0 -1
- package/dist/esm/ts-rs/PluginConfig.d.ts +0 -2
- package/dist/esm/ts-rs/RoundingMode.d.ts +0 -1
- package/dist/esm/ts-rs/RoundingPriority.d.ts +0 -1
- package/dist/esm/ts-rs/SignDisplay.d.ts +0 -1
- package/dist/esm/ts-rs/SimpleDatetimeFormat.d.ts +0 -1
- package/dist/esm/ts-rs/SimpleDatetimeStyleConfig.d.ts +0 -6
- package/dist/esm/ts-rs/StringColorMode.d.ts +0 -1
- package/dist/esm/ts-rs/TrailingZeroDisplay.d.ts +0 -1
- package/dist/esm/ts-rs/UseGrouping.d.ts +0 -1
- package/src/rust/components/number_column_style.rs +0 -491
- package/src/rust/config/number_column_style.rs +0 -136
- package/src/rust/dragdrop.rs +0 -481
- package/src/rust/tasks/plugin_column_styles.rs +0 -98
- package/src/ts/ts-rs/ColumnConfigValues.ts +0 -14
- package/src/ts/ts-rs/CustomDatetimeFormat.ts +0 -3
- package/src/ts/ts-rs/CustomDatetimeStyleConfig.ts +0 -5
- package/src/ts/ts-rs/CustomNumberFormatConfig.ts +0 -8
- package/src/ts/ts-rs/DatetimeColorMode.ts +0 -3
- package/src/ts/ts-rs/DatetimeFormatType.ts +0 -8
- package/src/ts/ts-rs/FormatMode.ts +0 -3
- package/src/ts/ts-rs/NumberBackgroundMode.ts +0 -3
- package/src/ts/ts-rs/NumberForegroundMode.ts +0 -3
- package/src/ts/ts-rs/PluginConfig.ts +0 -4
- package/src/ts/ts-rs/RoundingMode.ts +0 -3
- package/src/ts/ts-rs/RoundingPriority.ts +0 -3
- package/src/ts/ts-rs/SignDisplay.ts +0 -3
- package/src/ts/ts-rs/SimpleDatetimeFormat.ts +0 -3
- package/src/ts/ts-rs/SimpleDatetimeStyleConfig.ts +0 -4
- package/src/ts/ts-rs/StringColorMode.ts +0 -3
- package/src/ts/ts-rs/TrailingZeroDisplay.ts +0 -3
- package/src/ts/ts-rs/UseGrouping.ts +0 -3
- /package/dist/wasm/snippets/{perspective-viewer-d924246f0b4a3dce → perspective-viewer-39ab7da3ca157861}/inline0.js +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-d924246f0b4a3dce → perspective-viewer-39ab7da3ca157861}/inline1.js +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-d924246f0b4a3dce → perspective-viewer-39ab7da3ca157861}/inline2.js +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-d924246f0b4a3dce → perspective-viewer-39ab7da3ca157861}/inline3.js +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-d924246f0b4a3dce → perspective-viewer-39ab7da3ca157861}/inline4.js +0 -0
- /package/src/rust/{tasks → config}/export_method.rs +0 -0
- /package/src/rust/{tasks → queries}/export_app.rs +0 -0
- /package/src/rust/{tasks → queries}/is_invalid_drop.rs +0 -0
|
Binary file
|
|
@@ -12,7 +12,9 @@ export const copydropdownmenuelement_open: (a: number, b: number) => void;
|
|
|
12
12
|
export const exportdropdownmenuelement___set_model: (a: number, b: number) => void;
|
|
13
13
|
export const exportdropdownmenuelement_hide: (a: number, b: number) => void;
|
|
14
14
|
export const exportdropdownmenuelement_open: (a: number, b: number) => void;
|
|
15
|
-
export const
|
|
15
|
+
export const get_wasm_module: (a: number) => void;
|
|
16
|
+
export const get_worker_url: (a: number) => void;
|
|
17
|
+
export const init: (a: number, b: number) => void;
|
|
16
18
|
export const perspectivedebugpluginelement_clear: (a: number) => number;
|
|
17
19
|
export const perspectivedebugpluginelement_config_column_names: (a: number) => number;
|
|
18
20
|
export const perspectivedebugpluginelement_connectedCallback: (a: number) => void;
|
|
@@ -58,9 +60,9 @@ export const perspectiveviewerelement_toggleConfig: (a: number, b: number) => nu
|
|
|
58
60
|
export const registerPlugin: (a: number, b: number) => void;
|
|
59
61
|
export const perspectivedebugpluginelement_update: (a: number, b: number) => number;
|
|
60
62
|
export const perspectivedebugpluginelement_min_config_columns: (a: number) => number;
|
|
63
|
+
export const perspectivedebugpluginelement_restyle: (a: number) => void;
|
|
61
64
|
export const perspectivedebugpluginelement_delete: (a: number) => number;
|
|
62
65
|
export const perspectivedebugpluginelement_resize: (a: number) => number;
|
|
63
|
-
export const perspectivedebugpluginelement_restyle: (a: number) => number;
|
|
64
66
|
export const exportdropdownmenuelement_new: (a: number) => number;
|
|
65
67
|
export const __wbg_exportdropdownmenuelement_free: (a: number, b: number) => void;
|
|
66
68
|
export const exportdropdownmenuelement_connected_callback: (a: number) => void;
|
|
@@ -72,6 +74,7 @@ export const __wbg_view_free: (a: number, b: number) => void;
|
|
|
72
74
|
export const __wbg_virtualdataslice_free: (a: number, b: number) => void;
|
|
73
75
|
export const __wbg_virtualserver_free: (a: number, b: number) => void;
|
|
74
76
|
export const client___getClassname: (a: number, b: number) => void;
|
|
77
|
+
export const client___unsafe_open_view: (a: number, b: number, c: number) => number;
|
|
75
78
|
export const client_get_hosted_table_names: (a: number) => number;
|
|
76
79
|
export const client_handle_error: (a: number, b: number, c: number, d: number) => number;
|
|
77
80
|
export const client_handle_response: (a: number, b: number) => number;
|
|
@@ -119,6 +122,7 @@ export const table_update: (a: number, b: number, c: number) => number;
|
|
|
119
122
|
export const table_validate_expressions: (a: number, b: number) => number;
|
|
120
123
|
export const table_view: (a: number, b: number) => number;
|
|
121
124
|
export const view___get_model: (a: number) => number;
|
|
125
|
+
export const view___unsafe_get_name: (a: number, b: number) => void;
|
|
122
126
|
export const view_collapse: (a: number, b: number) => number;
|
|
123
127
|
export const view_column_paths: (a: number, b: number) => number;
|
|
124
128
|
export const view_delete: (a: number) => number;
|
|
@@ -142,6 +146,7 @@ export const view_to_csv: (a: number, b: number) => number;
|
|
|
142
146
|
export const view_to_json: (a: number, b: number) => number;
|
|
143
147
|
export const view_to_json_string: (a: number, b: number) => number;
|
|
144
148
|
export const view_to_ndjson: (a: number, b: number) => number;
|
|
149
|
+
export const view_with_typed_arrays: (a: number, b: number, c: number) => number;
|
|
145
150
|
export const virtualdataslice_fromArrowIpc: (a: number, b: number, c: number) => void;
|
|
146
151
|
export const virtualdataslice_new: (a: number) => number;
|
|
147
152
|
export const virtualdataslice_setBooleanCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
|
|
@@ -152,19 +157,19 @@ export const virtualdataslice_setIntegerCol: (a: number, b: number, c: number, d
|
|
|
152
157
|
export const virtualdataslice_setStringCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
|
|
153
158
|
export const virtualserver_handleRequest: (a: number, b: number, c: number) => number;
|
|
154
159
|
export const virtualserver_new: (a: number, b: number) => void;
|
|
155
|
-
export const
|
|
156
|
-
export const
|
|
157
|
-
export const
|
|
158
|
-
export const
|
|
159
|
-
export const
|
|
160
|
-
export const
|
|
161
|
-
export const
|
|
162
|
-
export const
|
|
163
|
-
export const
|
|
164
|
-
export const
|
|
165
|
-
export const
|
|
166
|
-
export const
|
|
167
|
-
export const
|
|
160
|
+
export const __wasm_bindgen_func_elem_3134: (a: number, b: number) => void;
|
|
161
|
+
export const __wasm_bindgen_func_elem_13509: (a: number, b: number) => void;
|
|
162
|
+
export const __wasm_bindgen_func_elem_16653: (a: number, b: number) => void;
|
|
163
|
+
export const __wasm_bindgen_func_elem_17311: (a: number, b: number) => void;
|
|
164
|
+
export const __wasm_bindgen_func_elem_17336: (a: number, b: number) => void;
|
|
165
|
+
export const __wasm_bindgen_func_elem_24562: (a: number, b: number, c: number, d: number) => void;
|
|
166
|
+
export const __wasm_bindgen_func_elem_5265: (a: number, b: number, c: number) => void;
|
|
167
|
+
export const __wasm_bindgen_func_elem_5266: (a: number, b: number, c: number) => void;
|
|
168
|
+
export const __wasm_bindgen_func_elem_5263: (a: number, b: number, c: number) => void;
|
|
169
|
+
export const __wasm_bindgen_func_elem_16772: (a: number, b: number, c: number) => void;
|
|
170
|
+
export const __wasm_bindgen_func_elem_17353: (a: number, b: number, c: number) => void;
|
|
171
|
+
export const __wasm_bindgen_func_elem_14430: (a: number, b: number) => number;
|
|
172
|
+
export const __wasm_bindgen_func_elem_17314: (a: number, b: number) => void;
|
|
168
173
|
export const __wbindgen_export: (a: number, b: number) => number;
|
|
169
174
|
export const __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
|
|
170
175
|
export const __wbindgen_export3: (a: number) => void;
|
package/package.json
CHANGED
|
@@ -1,20 +1,42 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@perspective-dev/viewer",
|
|
3
|
-
"version": "4.
|
|
4
|
-
"description": "The `<perspective-viewer>` Custom Element, frontend for Perspective
|
|
3
|
+
"version": "4.5.0",
|
|
4
|
+
"description": "The `<perspective-viewer>` Custom Element, frontend for Perspective",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"perspective",
|
|
7
|
+
"data",
|
|
8
|
+
"analytics",
|
|
9
|
+
"visualization",
|
|
10
|
+
"datagrid",
|
|
11
|
+
"charts",
|
|
12
|
+
"web-component",
|
|
13
|
+
"wasm",
|
|
14
|
+
"arrow"
|
|
15
|
+
],
|
|
16
|
+
"homepage": "https://perspective.finos.org",
|
|
5
17
|
"repository": {
|
|
6
18
|
"type": "git",
|
|
7
19
|
"url": "https://github.com/perspective-dev/perspective"
|
|
8
20
|
},
|
|
9
21
|
"type": "module",
|
|
10
22
|
"license": "Apache-2.0",
|
|
23
|
+
"sideEffects": true,
|
|
11
24
|
"unpkg": "dist/cdn/perspective-viewer.js",
|
|
12
25
|
"jsdelivr": "dist/cdn/perspective-viewer.js",
|
|
13
26
|
"exports": {
|
|
14
27
|
".": {
|
|
15
28
|
"types": "./dist/esm/perspective-viewer.d.ts",
|
|
29
|
+
"import": "./dist/esm/perspective-viewer.js",
|
|
16
30
|
"default": "./dist/esm/perspective-viewer.js"
|
|
17
31
|
},
|
|
32
|
+
"./inline": {
|
|
33
|
+
"types": "./dist/esm/perspective-viewer.d.ts",
|
|
34
|
+
"import": "./dist/esm/perspective-viewer.inline.js",
|
|
35
|
+
"default": "./dist/esm/perspective-viewer.inline.js"
|
|
36
|
+
},
|
|
37
|
+
"./themes": "./dist/css/themes.css",
|
|
38
|
+
"./themes/*.css": "./dist/css/*.css",
|
|
39
|
+
"./themes/intl/*.css": "./dist/css/intl/*.css",
|
|
18
40
|
"./dist/*": "./dist/*",
|
|
19
41
|
"./src/*": "./src/*",
|
|
20
42
|
"./test/*": "./test/*",
|
|
@@ -334,14 +334,14 @@
|
|
|
334
334
|
padding: var(--column_type--padding, 0px 0px 0px 0px);
|
|
335
335
|
position: absolute;
|
|
336
336
|
height: 28px;
|
|
337
|
-
top: -
|
|
337
|
+
top: -30px;
|
|
338
338
|
display: inline-flex;
|
|
339
339
|
align-items: flex-end;
|
|
340
340
|
content: var(--psp-label--all-columns--content, "All Columns");
|
|
341
341
|
}
|
|
342
342
|
|
|
343
343
|
#sub-columns .scroll-panel-container {
|
|
344
|
-
margin-top:
|
|
344
|
+
margin-top: 30px;
|
|
345
345
|
margin-bottom: 4px;
|
|
346
346
|
}
|
|
347
347
|
|
|
@@ -364,6 +364,7 @@
|
|
|
364
364
|
#active-columns {
|
|
365
365
|
display: flex;
|
|
366
366
|
padding-bottom: 8px;
|
|
367
|
+
padding-top: 6px;
|
|
367
368
|
}
|
|
368
369
|
|
|
369
370
|
#active-columns,
|
|
@@ -131,12 +131,37 @@
|
|
|
131
131
|
content: var(--psp-label--time-style--content, "Time Style");
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
label#
|
|
135
|
-
content: var(--psp-label--
|
|
134
|
+
label#number_fg_mode-label:before {
|
|
135
|
+
content: var(--psp-label--number-fg-mode--content, "Foreground");
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
-
label#
|
|
139
|
-
content: var(--psp-label--
|
|
138
|
+
label#pos_fg_color-label:before {
|
|
139
|
+
content: var(--psp-label--number-fg-mode--content, "Foreground");
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
label#number_bg_mode-label:before {
|
|
143
|
+
content: var(--psp-label--number-fg-mode--content, "Background");
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
label#pos_bg_color-label:before {
|
|
147
|
+
content: var(--psp-label--pos-bg-color--content, "Background");
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
label#datetime_color_mode-label:before {
|
|
151
|
+
content: var(--psp-label--datetime-color-mode--content, "Color");
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
label#string_color_mode-label:before {
|
|
155
|
+
content: var(--psp-label--string-color-mode--content, "Color");
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
label#chart-type-label:before,
|
|
159
|
+
label#chart_type-label:before {
|
|
160
|
+
content: var(--psp-label--chart-type--content, "Chart Type");
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
label#stack-label:before {
|
|
164
|
+
content: var(--psp-label--stack--content, "Stack");
|
|
140
165
|
}
|
|
141
166
|
|
|
142
167
|
label#series-label:before {
|
|
@@ -181,8 +206,12 @@
|
|
|
181
206
|
content: var(--psp-label--aggregate-depth--content, "Aggregate Depth");
|
|
182
207
|
}
|
|
183
208
|
|
|
184
|
-
label#
|
|
185
|
-
content: var(--psp-label--
|
|
209
|
+
label#fg_gradient-label:before {
|
|
210
|
+
content: var(--psp-label--fg-gradient--content, "Max Value");
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
label#bg_gradient-label:before {
|
|
214
|
+
content: var(--psp-label--bg-gradient--content, "Max Value");
|
|
186
215
|
}
|
|
187
216
|
|
|
188
217
|
label#rounding-priority-label:before {
|
package/src/css/column-style.css
CHANGED
|
@@ -12,10 +12,31 @@
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
:host {
|
|
15
|
-
#column-style-container
|
|
15
|
+
#column-style-container,
|
|
16
|
+
#plugin-config-container {
|
|
16
17
|
outline: none;
|
|
17
18
|
user-select: none;
|
|
18
19
|
|
|
20
|
+
.bool-field-desc {
|
|
21
|
+
font-size: 10px;
|
|
22
|
+
flex: 1 1 auto;
|
|
23
|
+
height: 22px;
|
|
24
|
+
display: flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
padding-left: 4px;
|
|
27
|
+
margin: 0px;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.bool-field-container {
|
|
31
|
+
display: flex;
|
|
32
|
+
border: 1px solid var(--psp-inactive--color);
|
|
33
|
+
border-radius: 3px;
|
|
34
|
+
align-items: center;
|
|
35
|
+
padding: 0 6px;
|
|
36
|
+
width: 100%;
|
|
37
|
+
cursor: pointer;
|
|
38
|
+
}
|
|
39
|
+
|
|
19
40
|
&.no-style {
|
|
20
41
|
font-style: italic;
|
|
21
42
|
background-color: var(--psp-placeholder--background);
|
|
@@ -57,7 +78,9 @@
|
|
|
57
78
|
}
|
|
58
79
|
|
|
59
80
|
span.reset-default-style-disabled {
|
|
81
|
+
flex: 0 0 14px;
|
|
60
82
|
margin-left: 4px;
|
|
83
|
+
margin-right: 4px;
|
|
61
84
|
width: 14px;
|
|
62
85
|
height: 14px;
|
|
63
86
|
border: 1px solid var(--psp-inactive--border-color);
|
|
@@ -65,10 +88,11 @@
|
|
|
65
88
|
}
|
|
66
89
|
|
|
67
90
|
span.reset-default-style {
|
|
91
|
+
flex: 0 0 22px;
|
|
68
92
|
cursor: pointer;
|
|
69
93
|
width: 22px;
|
|
70
94
|
height: 22px;
|
|
71
|
-
margin-right: -4px;
|
|
95
|
+
/* margin-right: -4px; */
|
|
72
96
|
display: inline-block;
|
|
73
97
|
background-repeat: no-repeat;
|
|
74
98
|
background-color: var(--psp--color);
|
|
@@ -215,6 +239,7 @@
|
|
|
215
239
|
height: 24px;
|
|
216
240
|
text-align: center;
|
|
217
241
|
z-index: 1;
|
|
242
|
+
pointer-events: none;
|
|
218
243
|
}
|
|
219
244
|
}
|
|
220
245
|
|
|
@@ -12,71 +12,27 @@
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
:host {
|
|
15
|
-
.tab-gutter {
|
|
16
|
-
border-color: var(--psp-inactive--color, #6e6e6e);
|
|
17
|
-
display: flex;
|
|
18
|
-
|
|
19
|
-
.tab.tab-padding {
|
|
20
|
-
flex: 1;
|
|
21
|
-
cursor: unset;
|
|
22
|
-
.tab-title {
|
|
23
|
-
border-right: none;
|
|
24
|
-
}
|
|
25
|
-
.tab-border {
|
|
26
|
-
border-right: none;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
.tab {
|
|
31
|
-
/* TODO: This needs to be a variable color. Which one? */
|
|
32
|
-
background: rgba(0, 0, 0, 0.125);
|
|
33
|
-
border-right: 1px solid var(--psp-inactive--color, #6e6e6e);
|
|
34
|
-
user-select: none;
|
|
35
|
-
cursor: pointer;
|
|
36
|
-
|
|
37
|
-
.tab-title {
|
|
38
|
-
font-size: 10px;
|
|
39
|
-
padding: 10px;
|
|
40
|
-
border-bottom: 1px solid var(--psp-inactive--color, #6e6e6e);
|
|
41
|
-
}
|
|
42
|
-
.tab-border {
|
|
43
|
-
height: 2px;
|
|
44
|
-
width: 100%;
|
|
45
|
-
background-color: var(--psp-inactive--color, #6e6e6e);
|
|
46
|
-
margin-top: 1px;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
&.selected {
|
|
50
|
-
background: unset;
|
|
51
|
-
border-bottom: 1px transparent;
|
|
52
|
-
|
|
53
|
-
.tab-title {
|
|
54
|
-
border-bottom: 1px transparent;
|
|
55
|
-
border-right: none;
|
|
56
|
-
}
|
|
57
|
-
.tab-border {
|
|
58
|
-
background-color: transparent;
|
|
59
|
-
border-right: none;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
15
|
#format-tab {
|
|
66
16
|
overflow: scroll;
|
|
67
17
|
}
|
|
68
18
|
|
|
19
|
+
#plugin-tab {
|
|
20
|
+
overflow-x: hidden;
|
|
21
|
+
overflow-y: scroll;
|
|
22
|
+
padding: 12px 0 0 0;
|
|
23
|
+
}
|
|
24
|
+
|
|
69
25
|
.tab-content {
|
|
70
26
|
flex: 1 1 auto;
|
|
71
27
|
overflow: hidden;
|
|
72
28
|
display: flex;
|
|
73
29
|
flex-direction: column;
|
|
74
30
|
.tab-section:last-child {
|
|
75
|
-
padding: 12px
|
|
31
|
+
padding: 12px 0px 12px 8px;
|
|
76
32
|
}
|
|
77
33
|
|
|
78
34
|
.tab-section {
|
|
79
|
-
padding: 12px
|
|
35
|
+
padding: 12px 0px 0px 8px;
|
|
80
36
|
flex: 0 0 auto;
|
|
81
37
|
overflow: hidden;
|
|
82
38
|
}
|
package/src/css/dom/checkbox.css
CHANGED
package/src/css/form/debug.css
CHANGED
|
@@ -21,14 +21,6 @@
|
|
|
21
21
|
display: flex;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
.tab-padding {
|
|
25
|
-
border-right: none;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
.tab-title {
|
|
29
|
-
height: 36px;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
24
|
#debug-panel {
|
|
33
25
|
display: flex;
|
|
34
26
|
min-width: 150px;
|
|
@@ -42,7 +34,7 @@
|
|
|
42
34
|
display: flex;
|
|
43
35
|
flex: 0 0 auto;
|
|
44
36
|
gap: 0.333333em;
|
|
45
|
-
padding:
|
|
37
|
+
padding: 12px 8px 0px 0px;
|
|
46
38
|
align-items: center;
|
|
47
39
|
button {
|
|
48
40
|
appearance: none;
|
|
@@ -76,13 +68,14 @@
|
|
|
76
68
|
flex-direction: column;
|
|
77
69
|
flex: 0 1 auto;
|
|
78
70
|
overflow: hidden;
|
|
79
|
-
padding:
|
|
71
|
+
padding: 8px 8px 8px 0;
|
|
80
72
|
}
|
|
81
73
|
|
|
82
74
|
#editor {
|
|
83
75
|
background-color: var(--psp--background-color);
|
|
84
76
|
border: 1px solid var(--psp-inactive--color);
|
|
85
77
|
border-radius: 2px;
|
|
78
|
+
font-size: 0.8em;
|
|
86
79
|
/* height: 100%; */
|
|
87
80
|
}
|
|
88
81
|
}
|
|
@@ -131,6 +131,17 @@
|
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
+
.plugin-select-item[data-plugin="Density"] > .icon {
|
|
135
|
+
-webkit-mask-image: var(
|
|
136
|
+
--psp-plugin-selector--density--content
|
|
137
|
+
);
|
|
138
|
+
mask-image: var(--psp-plugin-selector--density--content);
|
|
139
|
+
&:before {
|
|
140
|
+
content: var(--psp-plugin-selector--density--content);
|
|
141
|
+
visibility: hidden;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
134
145
|
.plugin-select-item[data-plugin="Map Scatter"] > .icon {
|
|
135
146
|
-webkit-mask-image: var(
|
|
136
147
|
--psp-plugin-selector--map-scatter--content
|
|
@@ -142,6 +153,28 @@
|
|
|
142
153
|
}
|
|
143
154
|
}
|
|
144
155
|
|
|
156
|
+
.plugin-select-item[data-plugin="Map Line"] > .icon {
|
|
157
|
+
-webkit-mask-image: var(
|
|
158
|
+
--psp-plugin-selector--map-line--content
|
|
159
|
+
);
|
|
160
|
+
mask-image: var(--psp-plugin-selector--map-line--content);
|
|
161
|
+
&:before {
|
|
162
|
+
content: var(--psp-plugin-selector--map-line--content);
|
|
163
|
+
visibility: hidden;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.plugin-select-item[data-plugin="Map Density"] > .icon {
|
|
168
|
+
-webkit-mask-image: var(
|
|
169
|
+
--psp-plugin-selector--map-density--content
|
|
170
|
+
);
|
|
171
|
+
mask-image: var(--psp-plugin-selector--map-density--content);
|
|
172
|
+
&:before {
|
|
173
|
+
content: var(--psp-plugin-selector--map-density--content);
|
|
174
|
+
visibility: hidden;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
145
178
|
.plugin-select-item[data-plugin="OHLC"] > .icon {
|
|
146
179
|
-webkit-mask-image: var(--psp-plugin-selector--ohlc--content);
|
|
147
180
|
mask-image: var(--psp-plugin-selector--ohlc--content);
|
|
@@ -0,0 +1,99 @@
|
|
|
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
|
+
:host {
|
|
15
|
+
label#edit_mode-label:before {
|
|
16
|
+
content: var(--psp-label--edit-mode--content);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
label#scroll_lock-label:before {
|
|
20
|
+
content: var(--psp-label--scroll-lock--content);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
label#chart_type-label:before {
|
|
24
|
+
content: var(--psp-label--chart-type--content);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* viewer-charts plugin_config controls */
|
|
28
|
+
label#auto_alt_y_axis-label:before {
|
|
29
|
+
content: var(--psp-label--auto-alt-y-axis--content);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
label#facet_mode-label:before {
|
|
33
|
+
content: var(--psp-label--facet-mode--content);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
label#facet_zoom_mode-label:before {
|
|
37
|
+
content: var(--psp-label--facet-zoom-mode--content);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
label#series_zoom_mode-label:before {
|
|
41
|
+
content: var(--psp-label--series-zoom-mode--content);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
label#line_width_px-label:before {
|
|
45
|
+
content: var(--psp-label--line-width-px--content);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
label#point_size_px-label:before {
|
|
49
|
+
content: var(--psp-label--point-size-px--content);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
label#band_inner_frac-label:before {
|
|
53
|
+
content: var(--psp-label--band-inner-frac--content);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
label#bar_inner_pad-label:before {
|
|
57
|
+
content: var(--psp-label--bar-inner-pad--content);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
label#wick_width_px-label:before {
|
|
61
|
+
content: var(--psp-label--wick-width-px--content);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
label#ohlc_line_width_px-label:before {
|
|
65
|
+
content: var(--psp-label--ohlc-line-width-px--content);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
label#include_zero-label:before {
|
|
69
|
+
content: var(--psp-label--include-zero--content);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
label#domain_mode-label:before {
|
|
73
|
+
content: var(--psp-label--domain-mode--content);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
label#gradient_color_mode-label:before {
|
|
77
|
+
content: var(--psp-label--gradient-color-mode--content);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
label#gradient_radius_px-label:before {
|
|
81
|
+
content: var(--psp-label--gradient-radius-px--content);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
label#gradient_intensity-label:before {
|
|
85
|
+
content: var(--psp-label--gradient-intensity--content);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
label#gradient_heat_max-label:before {
|
|
89
|
+
content: var(--psp-label--gradient-heat-max--content);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
label#map_tile_provider-label:before {
|
|
93
|
+
content: var(--psp-label--map-tile-provider--content);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
label#map_tile_alpha-label:before {
|
|
97
|
+
content: var(--psp-label--map-tile-alpha--content);
|
|
98
|
+
}
|
|
99
|
+
}
|
package/src/css/viewer.css
CHANGED
|
@@ -380,15 +380,57 @@
|
|
|
380
380
|
}
|
|
381
381
|
}
|
|
382
382
|
|
|
383
|
+
.settings_tab_bar_scroll_offset {
|
|
384
|
+
margin-left: -8px;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
#settings_tab_bar {
|
|
388
|
+
display: flex;
|
|
389
|
+
&:after {
|
|
390
|
+
content: " ";
|
|
391
|
+
border-bottom: 1px solid var(--psp-inactive--color);
|
|
392
|
+
background-color: #00000020;
|
|
393
|
+
flex: 1 0 auto;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
.settings_tab {
|
|
397
|
+
border-right: 1px solid var(--psp-inactive--color);
|
|
398
|
+
cursor: pointer;
|
|
399
|
+
padding: 6px 8px;
|
|
400
|
+
font-size: var(--label--font-size, 0.75em);
|
|
401
|
+
flex: 0 1 100px;
|
|
402
|
+
background-color: #00000020;
|
|
403
|
+
border-bottom: 1px solid var(--psp-inactive--color);
|
|
404
|
+
color: var(--psp-inactive--color);
|
|
405
|
+
margin-left: -1px;
|
|
406
|
+
border-left: 1px solid var(--psp-inactive--color);
|
|
407
|
+
|
|
408
|
+
&:hover {
|
|
409
|
+
color: inherit;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
.selected_tab {
|
|
414
|
+
color: inherit;
|
|
415
|
+
background-color: transparent;
|
|
416
|
+
border-bottom: 1px solid transparent;
|
|
417
|
+
box-shadow: 0px 9px 0px -8px var(--psp-inactive--color);
|
|
418
|
+
height: calc(100% - 1px);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
383
422
|
.split-panel.orient-reverse
|
|
384
423
|
> .split-panel-child:not(:last-child):not(.is-width-override) {
|
|
385
424
|
max-width: 300px;
|
|
386
425
|
}
|
|
387
426
|
|
|
388
427
|
.sidebar_header {
|
|
389
|
-
min-height:
|
|
390
|
-
|
|
391
|
-
|
|
428
|
+
min-height: calc(
|
|
429
|
+
var(
|
|
430
|
+
--psp-plugin-selector--height,
|
|
431
|
+
var(--psp-status-bar--height, 48px)
|
|
432
|
+
) +
|
|
433
|
+
1px
|
|
392
434
|
);
|
|
393
435
|
overflow: hidden;
|
|
394
436
|
display: flex;
|
|
@@ -413,4 +455,24 @@
|
|
|
413
455
|
flex-shrink: 0;
|
|
414
456
|
flex-grow: 0;
|
|
415
457
|
}
|
|
458
|
+
|
|
459
|
+
#query_tabbar_tab:before {
|
|
460
|
+
content: var(--psp-label--query-tab--content);
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
#plugin_tabbar_tab:before {
|
|
464
|
+
content: var(--psp-label--plugin-tab--content);
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
#debug_tabbar_tab:before {
|
|
468
|
+
content: var(--psp-label--debug-tab--content);
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
label#stack-label:before {
|
|
472
|
+
content: var(--psp-label--stack--content, "Stack");
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
label#alt_axis-label:before {
|
|
476
|
+
content: var(--psp-label--alt-axis--content, "Alt Axis");
|
|
477
|
+
}
|
|
416
478
|
}
|
|
@@ -91,7 +91,9 @@ impl ColumnDropDownElement {
|
|
|
91
91
|
let width = target.get_bounding_client_rect().width();
|
|
92
92
|
ApiFuture::spawn(async move {
|
|
93
93
|
if !exclude.contains(&input) {
|
|
94
|
-
let is_expr =
|
|
94
|
+
let is_expr = crate::queries::validate_expr(&session, &input)
|
|
95
|
+
.await?
|
|
96
|
+
.is_none();
|
|
95
97
|
if is_expr {
|
|
96
98
|
values.push(InPlaceColumn::Expression(Expression::new(
|
|
97
99
|
None,
|