@perspective-dev/viewer 5.4.0 → 5.5.1

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 (142) hide show
  1. package/dist/cdn/perspective-viewer.js +4 -4
  2. package/dist/cdn/perspective-viewer.js.map +2 -2
  3. package/dist/css/blueprint.css +1 -1
  4. package/dist/css/botanical.css +1 -1
  5. package/dist/css/dracula.css +1 -1
  6. package/dist/css/eggplant.css +1 -1
  7. package/dist/css/gruvbox-dark.css +1 -1
  8. package/dist/css/gruvbox.css +1 -1
  9. package/dist/css/icons.css +1 -1
  10. package/dist/css/intl/ar.css +1 -1
  11. package/dist/css/intl/de.css +1 -1
  12. package/dist/css/intl/es.css +1 -1
  13. package/dist/css/intl/fr.css +1 -1
  14. package/dist/css/intl/ja.css +1 -1
  15. package/dist/css/intl/pt.css +1 -1
  16. package/dist/css/intl/zh.css +1 -1
  17. package/dist/css/intl.css +1 -1
  18. package/dist/css/ledger.css +1 -1
  19. package/dist/css/monokai.css +1 -1
  20. package/dist/css/nord.css +1 -1
  21. package/dist/css/phosphor.css +1 -1
  22. package/dist/css/pro-dark.css +1 -1
  23. package/dist/css/pro.css +1 -1
  24. package/dist/css/solarized-dark.css +1 -1
  25. package/dist/css/solarized.css +1 -1
  26. package/dist/css/themes.css +1 -1
  27. package/dist/css/vaporwave.css +1 -1
  28. package/dist/css/velvet.css +1 -1
  29. package/dist/docs/perspective-docs.json +1 -1
  30. package/dist/esm/perspective-viewer.d.ts +2 -0
  31. package/dist/esm/perspective-viewer.inline.js +9 -9
  32. package/dist/esm/perspective-viewer.inline.js.map +3 -3
  33. package/dist/esm/perspective-viewer.js +4 -4
  34. package/dist/esm/perspective-viewer.js.map +2 -2
  35. package/dist/esm/plugin.d.ts +9 -0
  36. package/dist/esm/ts-rs/AddPanelOptions.d.ts +9 -0
  37. package/dist/esm/ts-rs/ExportMethod.d.ts +1 -1
  38. package/dist/esm/ts-rs/GetViewMode.d.ts +4 -0
  39. package/dist/esm/ts-rs/GetViewOptions.d.ts +8 -0
  40. package/dist/esm/ts-rs/RestoreOptions.d.ts +6 -0
  41. package/dist/esm/ts-rs/RestoreWorkspaceOptions.d.ts +9 -0
  42. package/dist/esm/ts-rs/WorkspaceConfigUpdate.d.ts +30 -22
  43. package/dist/wasm/perspective-viewer.d.ts +102 -47
  44. package/dist/wasm/perspective-viewer.js +233 -142
  45. package/dist/wasm/perspective-viewer.wasm +0 -0
  46. package/dist/wasm/perspective-viewer.wasm.d.ts +18 -18
  47. package/package.json +7 -7
  48. package/src/css/column-selector.css +11 -3
  49. package/src/css/column-style.css +162 -0
  50. package/src/css/config-selector.css +1 -1
  51. package/src/css/form/debug.css +9 -0
  52. package/src/css/status-bar.css +11 -0
  53. package/src/css/ui/containers/tabs.css +2 -1
  54. package/src/rust/agent/tools.rs +80 -7
  55. package/src/rust/components/column_selector/active_column.rs +9 -0
  56. package/src/rust/components/column_selector.rs +11 -0
  57. package/src/rust/components/column_settings_sidebar/style_tab/alignment_field.rs +90 -0
  58. package/src/rust/components/column_settings_sidebar/style_tab/font_field.rs +267 -0
  59. package/src/rust/components/column_settings_sidebar/style_tab/primitive_field.rs +1 -1
  60. package/src/rust/components/column_settings_sidebar/style_tab.rs +68 -9
  61. package/src/rust/components/debug_panel.rs +107 -50
  62. package/src/rust/components/export_dropdown.rs +6 -0
  63. package/src/rust/components/main_panel/msg.rs +4 -0
  64. package/src/rust/components/main_panel.rs +14 -0
  65. package/src/rust/components/mod.rs +0 -1
  66. package/src/rust/components/plugin_tab.rs +57 -3
  67. package/src/rust/components/settings_panel.rs +6 -0
  68. package/src/rust/components/status_bar.rs +12 -3
  69. package/src/rust/components/status_indicator.rs +4 -0
  70. package/src/rust/components/viewer/filters.rs +2 -2
  71. package/src/rust/components/viewer/msg.rs +4 -0
  72. package/src/rust/components/viewer/panels.rs +6 -3
  73. package/src/rust/components/viewer/render.rs +1 -0
  74. package/src/rust/components/viewer/wiring.rs +14 -2
  75. package/src/rust/components/viewer.rs +2 -2
  76. package/src/rust/config/column_config_schema.rs +312 -8
  77. package/src/rust/config/datetime_column_style.rs +0 -11
  78. package/src/rust/config/export_method.rs +24 -0
  79. package/src/rust/config/mod.rs +0 -2
  80. package/src/rust/config/options.rs +50 -0
  81. package/src/rust/config/workspace_config.rs +69 -24
  82. package/src/rust/custom_elements/viewer.rs +214 -113
  83. package/src/rust/js/plugin.rs +3 -1
  84. package/src/rust/lib.rs +7 -3
  85. package/src/rust/queries/plugin_column_styles.rs +6 -5
  86. package/src/rust/renderer/plugin_config.rs +200 -41
  87. package/src/rust/renderer/plugin_store.rs +2 -1
  88. package/src/rust/renderer/props.rs +5 -0
  89. package/src/rust/renderer.rs +9 -0
  90. package/src/rust/session/metadata.rs +5 -10
  91. package/src/rust/session/props.rs +4 -0
  92. package/src/rust/session.rs +273 -195
  93. package/src/rust/tasks/copy_export.rs +67 -0
  94. package/src/rust/tasks/create_panel.rs +16 -13
  95. package/src/rust/tasks/pipeline.rs +26 -8
  96. package/src/rust/tasks/restore_panel.rs +129 -30
  97. package/src/rust/tasks/send_column_config.rs +3 -0
  98. package/src/rust/tasks/sync_update_panels.rs +148 -68
  99. package/src/rust/tasks/table_lifecycle.rs +7 -1
  100. package/src/rust/ui/containers/tab_list.rs +1 -1
  101. package/src/rust/ui/form/intl_label.rs +4 -23
  102. package/src/rust/ui/portal.rs +1 -0
  103. package/src/rust/utils/css_vars.rs +13 -0
  104. package/src/rust/{config/datetime_column_style/color_mode.rs → utils/in_flight.rs} +47 -35
  105. package/src/rust/utils/local_fonts.rs +395 -0
  106. package/src/rust/utils/mod.rs +4 -0
  107. package/src/rust/utils/pending_effects.rs +6 -30
  108. package/src/rust/workspace.rs +12 -0
  109. package/src/svg/status_pending.svg +3 -0
  110. package/src/themes/icons.css +1 -0
  111. package/src/themes/intl/ar.css +20 -7
  112. package/src/themes/intl/de.css +20 -7
  113. package/src/themes/intl/es.css +20 -7
  114. package/src/themes/intl/fr.css +20 -7
  115. package/src/themes/intl/ja.css +20 -7
  116. package/src/themes/intl/pt.css +20 -7
  117. package/src/themes/intl/zh.css +20 -7
  118. package/src/themes/intl.css +20 -7
  119. package/src/themes/monokai.css +1 -1
  120. package/src/themes/vaporwave.css +1 -1
  121. package/src/ts/perspective-viewer.ts +2 -0
  122. package/src/ts/plugin.ts +9 -0
  123. package/src/ts/ts-rs/AddPanelOptions.ts +10 -0
  124. package/src/ts/ts-rs/ExportMethod.ts +1 -1
  125. package/src/ts/ts-rs/{DatetimeColorMode.ts → GetViewMode.ts} +4 -1
  126. package/src/ts/ts-rs/GetViewOptions.ts +7 -0
  127. package/src/ts/ts-rs/RestoreOptions.ts +7 -1
  128. package/src/ts/ts-rs/RestoreWorkspaceOptions.ts +10 -0
  129. package/src/ts/ts-rs/WorkspaceConfigUpdate.ts +31 -20
  130. package/dist/esm/ts-rs/DatetimeColorMode.d.ts +0 -1
  131. package/dist/esm/ts-rs/FormatMode.d.ts +0 -1
  132. package/dist/esm/ts-rs/StringColorMode.d.ts +0 -1
  133. package/src/rust/components/string_column_style.rs +0 -120
  134. package/src/rust/config/string_column_style.rs +0 -135
  135. package/src/ts/ts-rs/FormatMode.ts +0 -3
  136. package/src/ts/ts-rs/StringColorMode.ts +0 -3
  137. /package/dist/wasm/snippets/{perspective-viewer-adc6f3f79141112b → perspective-viewer-6813b568219c6763}/inline0.js +0 -0
  138. /package/dist/wasm/snippets/{perspective-viewer-adc6f3f79141112b → perspective-viewer-6813b568219c6763}/inline1.js +0 -0
  139. /package/dist/wasm/snippets/{perspective-viewer-adc6f3f79141112b → perspective-viewer-6813b568219c6763}/inline2.js +0 -0
  140. /package/dist/wasm/snippets/{perspective-viewer-adc6f3f79141112b → perspective-viewer-6813b568219c6763}/inline3.js +0 -0
  141. /package/dist/wasm/snippets/{perspective-viewer-adc6f3f79141112b → perspective-viewer-6813b568219c6763}/inline4.js +0 -0
  142. /package/dist/wasm/snippets/{perspective-viewer-adc6f3f79141112b → perspective-viewer-6813b568219c6763}/inline5.js +0 -0
@@ -74,16 +74,13 @@ perspective-viewer {
74
74
 
75
75
  /* Column Settings */
76
76
  --psp-label--color--content: "Couleur";
77
- --psp-label--format--content: "Format";
78
77
  --psp-label--timezone--content: "Fuseau horaire";
79
78
  --psp-label--date-style--content: "Style de date";
80
79
  --psp-label--time-style--content: "Style d'heure";
81
- --psp-label--number-fg-mode--content: "Premier plan";
82
- --psp-label--number-bg-mode--content: "Arrière-plan";
83
- --psp-label--fg-colors--content: "Premier plan";
84
- --psp-label--bg-colors--content: "Arrière-plan";
85
- --psp-label--datetime-color-mode--content: "Couleur";
86
- --psp-label--string-color-mode--content: "Couleur";
80
+ --psp-label--fg-mode--content: "Premier plan";
81
+ --psp-label--bg-mode--content: "Arrière-plan";
82
+ --psp-label--fg-color--content: "Premier plan";
83
+ --psp-label--bg-color--content: "Arrière-plan";
87
84
  --psp-label--series--content: "Série";
88
85
  --psp-label--color-range--content: "Gamme de couleurs";
89
86
  --psp-label--style--content: "Style";
@@ -148,6 +145,21 @@ perspective-viewer {
148
145
  /* Plugin settings */
149
146
  --psp-label--edit-mode--content: "Mode édition";
150
147
  --psp-label--scroll-lock--content: "Verrouillage du défilement";
148
+ --psp-label--column-menus--content: "Menus de colonne";
149
+ --psp-label--group-font--content: "Police";
150
+ --psp-label--group-rows--content: "Lignes";
151
+ --psp-label--link--content: "Lien";
152
+ --psp-label--font-family--content: "Famille de police";
153
+ --psp-label--font-size--content: "Taille de police";
154
+ --psp-label--request-local-fonts--content: "Polices locales";
155
+ --psp-label--local-fonts-blocked--content: "Polices locales bloquées";
156
+ --psp-label--request-local-fonts-title--content: "Autoriser l'accès aux polices installées sur cet appareil";
157
+ --psp-label--local-fonts-blocked-title--content: "L'accès aux polices locales est bloqué pour ce site. Autorisez-le dans les paramètres du site du navigateur pour les afficher ici.";
158
+ --psp-label--word-wrap--content: "Retour à la ligne";
159
+ --psp-label--align--content: "Alignement";
160
+ --psp-label--row-height--content: "Hauteur de ligne";
161
+ --psp-label--zebra-rows--content: "Lignes zébrées";
162
+ --psp-label--zebra-color--content: "Couleur zébrée";
151
163
  --psp-label--chart-type--content: "Type de glyphe";
152
164
 
153
165
  /* Plugin settings — viewer-charts */
@@ -189,6 +201,7 @@ perspective-viewer {
189
201
  --psp-label--group-legend--content: "Légende";
190
202
  --psp-label--group-tooltip--content: "Info-bulles";
191
203
  --psp-label--group-color--content: "Couleur";
204
+ --psp-label--group-column--content: "Colonne";
192
205
  --psp-label--group-format--content: "Format";
193
206
  --psp-label--column-size-override--content: "Largeur de colonne";
194
207
  }
@@ -75,16 +75,13 @@ perspective-viewer {
75
75
 
76
76
  /* Column Settings */
77
77
  --psp-label--color--content: "色";
78
- --psp-label--format--content: "フォーマット";
79
78
  --psp-label--timezone--content: "タイムゾーン";
80
79
  --psp-label--date-style--content: "日付スタイル";
81
80
  --psp-label--time-style--content: "時間スタイル";
82
- --psp-label--number-fg-mode--content: "前景";
83
- --psp-label--number-bg-mode--content: "背景";
84
- --psp-label--fg-colors--content: "前景";
85
- --psp-label--bg-colors--content: "背景";
86
- --psp-label--datetime-color-mode--content: "色";
87
- --psp-label--string-color-mode--content: "色";
81
+ --psp-label--fg-mode--content: "前景";
82
+ --psp-label--bg-mode--content: "背景";
83
+ --psp-label--fg-color--content: "前景";
84
+ --psp-label--bg-color--content: "背景";
88
85
  --psp-label--series--content: "シリーズ";
89
86
  --psp-label--color-range--content: "色の範囲";
90
87
  --psp-label--style--content: "スタイル";
@@ -148,6 +145,21 @@ perspective-viewer {
148
145
  /* Plugin settings */
149
146
  --psp-label--edit-mode--content: "編集モード";
150
147
  --psp-label--scroll-lock--content: "スクロールロック";
148
+ --psp-label--column-menus--content: "列メニュー";
149
+ --psp-label--group-font--content: "フォント";
150
+ --psp-label--group-rows--content: "行";
151
+ --psp-label--link--content: "リンク";
152
+ --psp-label--font-family--content: "フォントファミリー";
153
+ --psp-label--font-size--content: "フォントサイズ";
154
+ --psp-label--request-local-fonts--content: "ローカルフォント";
155
+ --psp-label--local-fonts-blocked--content: "ローカルフォントはブロック済み";
156
+ --psp-label--request-local-fonts-title--content: "このデバイスにインストールされているフォントへのアクセスを許可";
157
+ --psp-label--local-fonts-blocked-title--content: "このサイトではローカルフォントへのアクセスがブロックされています。ブラウザーのサイト設定で許可すると、ここに一覧表示されます。";
158
+ --psp-label--word-wrap--content: "折り返し";
159
+ --psp-label--align--content: "配置";
160
+ --psp-label--row-height--content: "行の高さ";
161
+ --psp-label--zebra-rows--content: "縞模様の行数";
162
+ --psp-label--zebra-color--content: "縞模様の色";
151
163
  --psp-label--chart-type--content: "グリフの種類";
152
164
 
153
165
  /* Plugin settings — viewer-charts */
@@ -189,6 +201,7 @@ perspective-viewer {
189
201
  --psp-label--group-legend--content: "凡例";
190
202
  --psp-label--group-tooltip--content: "ツールチップ";
191
203
  --psp-label--group-color--content: "色";
204
+ --psp-label--group-column--content: "列";
192
205
  --psp-label--group-format--content: "書式";
193
206
  --psp-label--column-size-override--content: "列の幅";
194
207
  }
@@ -74,16 +74,13 @@ perspective-viewer {
74
74
 
75
75
  /* Column Settings */
76
76
  --psp-label--color--content: "Cor";
77
- --psp-label--format--content: "Formato";
78
77
  --psp-label--timezone--content: "Fuso horário";
79
78
  --psp-label--date-style--content: "Estilo de data";
80
79
  --psp-label--time-style--content: "Estilo de tempo";
81
- --psp-label--number-fg-mode--content: "Primeiro plano";
82
- --psp-label--number-bg-mode--content: "Fundo";
83
- --psp-label--fg-colors--content: "Primeiro plano";
84
- --psp-label--bg-colors--content: "Fundo";
85
- --psp-label--datetime-color-mode--content: "Cor";
86
- --psp-label--string-color-mode--content: "Cor";
80
+ --psp-label--fg-mode--content: "Primeiro plano";
81
+ --psp-label--bg-mode--content: "Fundo";
82
+ --psp-label--fg-color--content: "Primeiro plano";
83
+ --psp-label--bg-color--content: "Fundo";
87
84
  --psp-label--series--content: "Série";
88
85
  --psp-label--color-range--content: "Gama de cores";
89
86
  --psp-label--style--content: "Estilo";
@@ -148,6 +145,21 @@ perspective-viewer {
148
145
  /* Plugin settings */
149
146
  --psp-label--edit-mode--content: "Modo de edição";
150
147
  --psp-label--scroll-lock--content: "Bloqueio de rolagem";
148
+ --psp-label--column-menus--content: "Menus de coluna";
149
+ --psp-label--group-font--content: "Fonte";
150
+ --psp-label--group-rows--content: "Linhas";
151
+ --psp-label--link--content: "Link";
152
+ --psp-label--font-family--content: "Família da fonte";
153
+ --psp-label--font-size--content: "Tamanho da fonte";
154
+ --psp-label--request-local-fonts--content: "Fontes locais";
155
+ --psp-label--local-fonts-blocked--content: "Fontes locais bloqueadas";
156
+ --psp-label--request-local-fonts-title--content: "Permitir acesso às fontes instaladas neste dispositivo";
157
+ --psp-label--local-fonts-blocked-title--content: "O acesso às fontes locais está bloqueado para este site. Permita-o nas configurações do site do navegador para listá-las aqui.";
158
+ --psp-label--word-wrap--content: "Quebra de linha";
159
+ --psp-label--align--content: "Alinhamento";
160
+ --psp-label--row-height--content: "Altura da linha";
161
+ --psp-label--zebra-rows--content: "Linhas zebradas";
162
+ --psp-label--zebra-color--content: "Cor zebrada";
151
163
  --psp-label--chart-type--content: "Tipo de glifo";
152
164
 
153
165
  /* Plugin settings — viewer-charts */
@@ -189,6 +201,7 @@ perspective-viewer {
189
201
  --psp-label--group-legend--content: "Legenda";
190
202
  --psp-label--group-tooltip--content: "Dicas";
191
203
  --psp-label--group-color--content: "Cor";
204
+ --psp-label--group-column--content: "Coluna";
192
205
  --psp-label--group-format--content: "Formato";
193
206
  --psp-label--column-size-override--content: "Largura da coluna";
194
207
  }
@@ -74,16 +74,13 @@ perspective-viewer {
74
74
 
75
75
  /* Column Settings */
76
76
  --psp-label--color--content: "颜色";
77
- --psp-label--format--content: "格式";
78
77
  --psp-label--timezone--content: "时区";
79
78
  --psp-label--date-style--content: "日期样式";
80
79
  --psp-label--time-style--content: "时间风格";
81
- --psp-label--number-fg-mode--content: "前景";
82
- --psp-label--number-bg-mode--content: "背景";
83
- --psp-label--fg-colors--content: "前景";
84
- --psp-label--bg-colors--content: "背景";
85
- --psp-label--datetime-color-mode--content: "颜色";
86
- --psp-label--string-color-mode--content: "颜色";
80
+ --psp-label--fg-mode--content: "前景";
81
+ --psp-label--bg-mode--content: "背景";
82
+ --psp-label--fg-color--content: "前景";
83
+ --psp-label--bg-color--content: "背景";
87
84
  --psp-label--series--content: "系列";
88
85
  --psp-label--color-range--content: "颜色范围";
89
86
  --psp-label--style--content: "样式";
@@ -148,6 +145,21 @@ perspective-viewer {
148
145
  /* Plugin settings */
149
146
  --psp-label--edit-mode--content: "编辑模式";
150
147
  --psp-label--scroll-lock--content: "滚动锁定";
148
+ --psp-label--column-menus--content: "列菜单";
149
+ --psp-label--group-font--content: "字体";
150
+ --psp-label--group-rows--content: "行";
151
+ --psp-label--link--content: "链接";
152
+ --psp-label--font-family--content: "字体系列";
153
+ --psp-label--font-size--content: "字号";
154
+ --psp-label--request-local-fonts--content: "本地字体";
155
+ --psp-label--local-fonts-blocked--content: "本地字体已被阻止";
156
+ --psp-label--request-local-fonts-title--content: "允许访问此设备上安装的字体";
157
+ --psp-label--local-fonts-blocked-title--content: "此站点已阻止访问本地字体。请在浏览器的站点设置中允许访问,以便在此列出。";
158
+ --psp-label--word-wrap--content: "自动换行";
159
+ --psp-label--align--content: "对齐";
160
+ --psp-label--row-height--content: "行高";
161
+ --psp-label--zebra-rows--content: "斑马行";
162
+ --psp-label--zebra-color--content: "斑马色";
151
163
  --psp-label--chart-type--content: "图元类型";
152
164
 
153
165
  /* Plugin settings — viewer-charts */
@@ -189,6 +201,7 @@ perspective-viewer {
189
201
  --psp-label--group-legend--content: "图例";
190
202
  --psp-label--group-tooltip--content: "工具提示";
191
203
  --psp-label--group-color--content: "颜色";
204
+ --psp-label--group-column--content: "列";
192
205
  --psp-label--group-format--content: "格式";
193
206
  --psp-label--column-size-override--content: "列宽";
194
207
  }
@@ -74,16 +74,13 @@ perspective-viewer {
74
74
 
75
75
  /* Column Settings */
76
76
  --psp-label--color--content: "Color";
77
- --psp-label--format--content: "Format";
78
77
  --psp-label--timezone--content: "Timezone";
79
78
  --psp-label--date-style--content: "Date Style";
80
79
  --psp-label--time-style--content: "Time Style";
81
- --psp-label--number-fg-mode--content: "Foreground";
82
- --psp-label--number-bg-mode--content: "Background";
83
- --psp-label--fg-colors--content: "Foreground";
84
- --psp-label--bg-colors--content: "Background";
85
- --psp-label--datetime-color-mode--content: "Color";
86
- --psp-label--string-color-mode--content: "Color";
80
+ --psp-label--fg-mode--content: "Foreground";
81
+ --psp-label--bg-mode--content: "Background";
82
+ --psp-label--fg-color--content: "Color";
83
+ --psp-label--bg-color--content: "Color";
87
84
  --psp-label--series--content: "Series";
88
85
  --psp-label--color-range--content: "Color Range";
89
86
  --psp-label--style--content: "Style";
@@ -122,6 +119,7 @@ perspective-viewer {
122
119
  --psp-label--group-legend--content: "Legend";
123
120
  --psp-label--group-tooltip--content: "Tooltips";
124
121
  --psp-label--group-color--content: "Color";
122
+ --psp-label--group-column--content: "Column";
125
123
  --psp-label--group-format--content: "Format";
126
124
  --psp-label--column-size-override--content: "Column Width";
127
125
 
@@ -160,6 +158,21 @@ perspective-viewer {
160
158
  /* Plugin settings */
161
159
  --psp-label--edit-mode--content: "Edit mode";
162
160
  --psp-label--scroll-lock--content: "Scroll lock";
161
+ --psp-label--column-menus--content: "Column menus";
162
+ --psp-label--group-font--content: "Font";
163
+ --psp-label--group-rows--content: "Rows";
164
+ --psp-label--link--content: "Link";
165
+ --psp-label--font-family--content: "Font family";
166
+ --psp-label--font-size--content: "Font size";
167
+ --psp-label--request-local-fonts--content: "Local Fonts";
168
+ --psp-label--local-fonts-blocked--content: "No Access";
169
+ --psp-label--request-local-fonts-title--content: "Allow access to the fonts installed on this device";
170
+ --psp-label--local-fonts-blocked-title--content: "Access to local fonts is blocked for this site. Allow it in the browser's site settings to list them here.";
171
+ --psp-label--word-wrap--content: "Word wrap";
172
+ --psp-label--align--content: "Alignment";
173
+ --psp-label--row-height--content: "Row height";
174
+ --psp-label--zebra-rows--content: "Zebra rows";
175
+ --psp-label--zebra-color--content: "Zebra color";
163
176
  --psp-label--chart-type--content: "Glyph type";
164
177
 
165
178
  /* Plugin settings — viewer-charts */
@@ -131,7 +131,7 @@ perspective-viewer [theme="Monokai"] {
131
131
  --psp-datagrid--border-color: #444444;
132
132
 
133
133
  /* FIXME: broken in shadow DOM */
134
- regular-table table tbody th:empty {
134
+ regular-table table tbody th.psp-tree-spacer {
135
135
  background: linear-gradient(
136
136
  to right,
137
137
  transparent 9px,
@@ -130,7 +130,7 @@ perspective-viewer [theme="Vaporwave"] {
130
130
  --psp-datagrid--hover--border-color: var(--pp-color-1) !important;
131
131
 
132
132
  /* FIXME: broken in shadow DOM */
133
- regular-table table tbody th:empty {
133
+ regular-table table tbody th.psp-tree-spacer {
134
134
  background: linear-gradient(
135
135
  to right,
136
136
  transparent 9px,
@@ -63,6 +63,8 @@ export type * from "./ts-rs/ClientOptions.d.ts";
63
63
  export type * from "./ts-rs/ExportOptions.d.ts";
64
64
  export type * from "./ts-rs/GetTableOptions.d.ts";
65
65
  export type * from "./ts-rs/GetClientOptions.d.ts";
66
+ export type * from "./ts-rs/GetViewOptions.d.ts";
67
+ export type * from "./ts-rs/GetViewMode.d.ts";
66
68
 
67
69
  export { init_client } from "./bootstrap";
68
70
  import { init_client } from "./bootstrap";
package/src/ts/plugin.ts CHANGED
@@ -107,6 +107,15 @@ export interface IPerspectiveViewerPlugin {
107
107
  column_stats?: Record<string, unknown>,
108
108
  ): { fields: Array<Record<string, unknown> & { kind: string }> };
109
109
 
110
+ /**
111
+ * The plugin-level settings schema as it applies to `current_value`, the
112
+ * `plugin_config` state the schema should describe.
113
+ */
114
+ plugin_config_schema?(
115
+ view_config?: Record<string, unknown>,
116
+ current_value?: Record<string, unknown> | null,
117
+ ): { fields: Array<Record<string, unknown> & { kind: string }> };
118
+
110
119
  /**
111
120
  * Render this plugin using the provided `View`. While there is no
112
121
  * provision to cancel a render in progress per se, calling a method on
@@ -0,0 +1,10 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+
3
+ /**
4
+ * Options for the `addPanel()` method.
5
+ */
6
+ export type AddPanelOptions = {
7
+ /**
8
+ * As `RestoreOptions::wait_for_table`.
9
+ */
10
+ wait_for_table?: boolean, };
@@ -1,3 +1,3 @@
1
1
  // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
2
 
3
- export type ExportMethod = "csv" | "csv-all" | "csv-selected" | "json" | "json-all" | "json-selected" | "ndjson" | "ndjson-all" | "ndjson-selected" | "html" | "plugin" | "arrow" | "arrow-selected" | "arrow-all" | "json-config";
3
+ export type ExportMethod = "csv" | "csv-all" | "csv-selected" | "json" | "json-all" | "json-selected" | "ndjson" | "ndjson-all" | "ndjson-selected" | "html" | "plugin" | "arrow" | "arrow-selected" | "arrow-all" | "arrow-lz4" | "arrow-lz4-selected" | "arrow-lz4-all" | "arrow-zstd" | "arrow-zstd-selected" | "arrow-zstd-all" | "json-config";
@@ -1,3 +1,6 @@
1
1
  // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
2
 
3
- export type DatetimeColorMode = "none" | "foreground" | "background";
3
+ /**
4
+ * How `getView` resolves the `View` it returns.
5
+ */
6
+ export type GetViewMode = "live" | "clone" | "auto";
@@ -0,0 +1,7 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+ import type { GetViewMode } from "./GetViewMode.js";
3
+
4
+ /**
5
+ * The `getView` argument: the `mode` and the target panel.
6
+ */
7
+ export type GetViewOptions = { mode?: GetViewMode, panel?: string, };
@@ -17,4 +17,10 @@ panel?: string,
17
17
  * The config may be partially applied on failure; restore a
18
18
  * known-good config to recover exactly.
19
19
  */
20
- suppress_errors?: boolean, };
20
+ suppress_errors?: boolean,
21
+ /**
22
+ * When `true`, a `table` no loaded client hosts yet leaves the panel
23
+ * empty and pending until the table is created, instead of the default
24
+ * error.
25
+ */
26
+ wait_for_table?: boolean, };
@@ -0,0 +1,10 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+
3
+ /**
4
+ * Options for the `restoreWorkspace()` method.
5
+ */
6
+ export type RestoreWorkspaceOptions = {
7
+ /**
8
+ * As `RestoreOptions::wait_for_table`, applied to every panel entry.
9
+ */
10
+ wait_for_table?: boolean, };
@@ -1,33 +1,44 @@
1
1
  // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
2
  import type { Filter } from "./Filter.js";
3
3
  import type { Layout } from "./Layout.js";
4
+ import type { OptionalUpdate } from "./OptionalUpdate.js";
4
5
  import type { ViewerConfigInitial } from "./ViewerConfigInitial.js";
5
6
 
6
7
  /**
7
- * The parse target of a workspace config in
8
- * [`PerspectiveViewerElement::restoreWorkspace`]. Mirrors
9
- * [`WorkspaceConfig`], but `panels` entries are [`ViewerConfigInitial`]s —
10
- * every entry creates a NEW panel, so `table` is required by type (a
11
- * stray per-panel `settings` key is ignored; it is element-level state,
12
- * carried by the top-level `active` field).
8
+ * The [`PerspectiveViewerElement::restoreWorkspace`] argument: a field-wise
9
+ * update of the element's workspace state, like [`ViewerConfigUpdate`] for a
10
+ * panel, where an absent key is unchanged, `null` resets and a value
11
+ * replaces.
13
12
  */
14
- export type WorkspaceConfigUpdate = { active?: string, layout?: Layout, panels: { [key in string]?: ViewerConfigInitial },
13
+ export type WorkspaceConfigUpdate = {
15
14
  /**
16
- * The element-level global (master/detail cross-) filters to re-apply as
17
- * a transient overlay on every DETAIL panel. Restored as one
18
- * unattributed bucket: the next selection on any master replaces it.
19
- * `Option` so an explicit `undefined` property deserializes as
20
- * `None` like an absent key (also `masters` / `palette` below).
15
+ * The panel to activate with the settings sidebar open, by `panels` key
16
+ * or existing panel id; `null` closes the sidebar.
21
17
  */
22
- global_filters?: Array<Filter> | null,
18
+ active?: OptionalUpdate<string>,
23
19
  /**
24
- * The master (filter-source) panels, by saved `panels` key. An id not in
25
- * `panels` warns and is dropped.
20
+ * The layout tree to stage, naming `panels` keys or existing panel ids.
26
21
  */
27
- masters?: Array<string> | null,
22
+ layout?: Layout,
28
23
  /**
29
- * Named color-scale definitions to apply to the host (see
30
- * [`WorkspaceConfig::palette`]), replacing any previously restored
31
- * palette.
24
+ * The complete replacement panel set, each [`ViewerConfigInitial`] entry
25
+ * creating a new panel (`{}` empties the element); absent keeps the
26
+ * existing panels.
32
27
  */
33
- palette?: { [key in string]?: string } | null, };
28
+ panels?: { [key in string]?: ViewerConfigInitial },
29
+ /**
30
+ * The element-level cross-filter set applied to every detail panel as
31
+ * one unattributed bucket, replacing the current set; `null` clears it.
32
+ */
33
+ global_filters?: OptionalUpdate<Array<Filter>>,
34
+ /**
35
+ * The master (filter-source) panels by `panels` key or existing panel
36
+ * id, unknown ids dropped with a warning; `null` demotes every panel.
37
+ */
38
+ masters?: OptionalUpdate<Array<string>>,
39
+ /**
40
+ * Named color-scale definitions applied to the host (see
41
+ * [`WorkspaceConfig::palette`]), replacing the previous palette; `null`
42
+ * clears it.
43
+ */
44
+ palette?: OptionalUpdate<{ [key in string]?: string }>, };
@@ -1 +0,0 @@
1
- export type DatetimeColorMode = "none" | "foreground" | "background";
@@ -1 +0,0 @@
1
- export type FormatMode = "none" | "link" | "bold" | "italics";
@@ -1 +0,0 @@
1
- export type StringColorMode = "none" | "foreground" | "background" | "series";
@@ -1,120 +0,0 @@
1
- // ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
2
- // ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
3
- // ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
4
- // ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
5
- // ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
6
- // ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
7
- // ┃ Copyright (c) 2017, the Perspective Authors. ┃
8
- // ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
9
- // ┃ This file is part of the Perspective library, distributed under the terms ┃
10
- // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
11
- // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
12
-
13
- use yew::prelude::*;
14
-
15
- use crate::config::*;
16
- use crate::ui::{ModalLink, SelectEnumField, SetModalLink};
17
- use crate::utils::WeakScope;
18
-
19
- /// Format-only widget for [`String`] columns. Renders the `format` enum
20
- /// only; color/color-mode UI is provided externally as primitive `Enum`
21
- /// + `Color` schema fields.
22
- #[derive(Properties)]
23
- pub struct StringColumnStyleProps {
24
- pub config: Option<StringColumnStyleConfig>,
25
-
26
- #[prop_or_default]
27
- pub on_change: Callback<ColumnConfigFieldUpdate>,
28
-
29
- #[prop_or_default]
30
- pub keys: Vec<String>,
31
-
32
- #[prop_or_default]
33
- weak_link: WeakScope<StringColumnStyle>,
34
- }
35
-
36
- impl ModalLink<StringColumnStyle> for StringColumnStyleProps {
37
- fn weak_link(&self) -> &'_ WeakScope<StringColumnStyle> {
38
- &self.weak_link
39
- }
40
- }
41
-
42
- impl PartialEq for StringColumnStyleProps {
43
- fn eq(&self, other: &Self) -> bool {
44
- self.config == other.config
45
- }
46
- }
47
-
48
- pub enum StringColumnStyleMsg {
49
- FormatChanged(Option<FormatMode>),
50
- }
51
-
52
- pub struct StringColumnStyle {
53
- config: StringColumnStyleConfig,
54
- }
55
-
56
- impl Component for StringColumnStyle {
57
- type Message = StringColumnStyleMsg;
58
- type Properties = StringColumnStyleProps;
59
-
60
- fn create(ctx: &Context<Self>) -> Self {
61
- ctx.set_modal_link();
62
- Self {
63
- config: ctx.props().config.clone().unwrap_or_default(),
64
- }
65
- }
66
-
67
- fn changed(&mut self, ctx: &Context<Self>, _old: &Self::Properties) -> bool {
68
- let mut new_config = ctx.props().config.clone().unwrap_or_default();
69
- if self.config != new_config {
70
- std::mem::swap(&mut self.config, &mut new_config);
71
- true
72
- } else {
73
- false
74
- }
75
- }
76
-
77
- fn update(&mut self, ctx: &Context<Self>, msg: Self::Message) -> bool {
78
- match msg {
79
- StringColumnStyleMsg::FormatChanged(val) => {
80
- self.config.format = val.unwrap_or_default();
81
- self.dispatch_config(ctx);
82
- true
83
- },
84
- }
85
- }
86
-
87
- fn view(&self, ctx: &Context<Self>) -> Html {
88
- let format_mode_changed = ctx.link().callback(StringColumnStyleMsg::FormatChanged);
89
- html! {
90
- <>
91
- <div id="column-style-container" class="string-column-style-container">
92
- <SelectEnumField<FormatMode>
93
- label="format"
94
- on_change={format_mode_changed}
95
- current_value={self.config.format}
96
- />
97
- </div>
98
- </>
99
- }
100
- }
101
- }
102
-
103
- impl StringColumnStyle {
104
- /// When this config has changed, we must signal the wrapper element.
105
- fn dispatch_config(&self, ctx: &Context<Self>) {
106
- let value = if self.config == StringColumnStyleConfig::default() {
107
- serde_json::Map::new()
108
- } else {
109
- match serde_json::to_value(&self.config) {
110
- Ok(serde_json::Value::Object(m)) => m,
111
- _ => serde_json::Map::new(),
112
- }
113
- };
114
-
115
- ctx.props().on_change.emit(ColumnConfigFieldUpdate {
116
- keys: ctx.props().keys.clone(),
117
- value,
118
- });
119
- }
120
- }