@composy/log-viewer-vue 0.0.1 → 0.0.2

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 (65) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +39 -25
  3. package/dist/index.css +379 -2
  4. package/dist/index.js +45 -34
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.min.css +1 -3
  7. package/dist/index.min.js +195 -1
  8. package/dist/index.min.js.map +1 -0
  9. package/es/.dts-output-manifest.json +1 -0
  10. package/es/.dts.tsbuildinfo +1 -0
  11. package/es/components/LogViewer.js +1 -1
  12. package/es/components/LogViewer.js.map +1 -1
  13. package/es/components/LogViewer.vue_vue_type_script_setup_true_lang.js +16 -15
  14. package/es/components/LogViewer.vue_vue_type_script_setup_true_lang.js.map +1 -1
  15. package/es/composables/useLogViewer.d.ts +3 -1
  16. package/es/composables/useLogViewer.d.ts.map +1 -1
  17. package/es/composables/useLogViewer.js +17 -7
  18. package/es/composables/useLogViewer.js.map +1 -1
  19. package/es/index.d.ts +0 -1
  20. package/es/index.js +2 -2
  21. package/es/index.js.map +1 -1
  22. package/es/plugin.d.ts +0 -1
  23. package/es/plugin.js +1 -1
  24. package/es/plugin.js.map +1 -1
  25. package/es/style/css.js +1 -1
  26. package/es/style/index.css +380 -0
  27. package/es/style/index.js +1 -1
  28. package/esm/components/LogViewer.js +17 -0
  29. package/esm/components/LogViewer.js.map +1 -0
  30. package/esm/components/LogViewer.vue_vue_type_script_setup_true_lang.js +110 -0
  31. package/esm/components/LogViewer.vue_vue_type_script_setup_true_lang.js.map +1 -0
  32. package/esm/composables/useLogViewer.d.ts +119 -0
  33. package/esm/composables/useLogViewer.d.ts.map +1 -0
  34. package/esm/composables/useLogViewer.js +123 -0
  35. package/esm/composables/useLogViewer.js.map +1 -0
  36. package/esm/index.d.ts.map +1 -0
  37. package/esm/index.js +19 -0
  38. package/esm/index.js.map +1 -0
  39. package/esm/plugin.d.ts.map +1 -0
  40. package/esm/plugin.js +18 -0
  41. package/esm/plugin.js.map +1 -0
  42. package/esm/style/css.js +1 -0
  43. package/esm/style/index.js +1 -0
  44. package/esm/style/index.less +434 -0
  45. package/lib/components/LogViewer.cjs +1 -1
  46. package/lib/components/LogViewer.cjs.map +1 -1
  47. package/lib/components/LogViewer.vue_vue_type_script_setup_true_lang.cjs +22 -21
  48. package/lib/components/LogViewer.vue_vue_type_script_setup_true_lang.cjs.map +1 -1
  49. package/lib/composables/useLogViewer.cjs +23 -13
  50. package/lib/composables/useLogViewer.cjs.map +1 -1
  51. package/lib/composables/{useLogViewer.d.ts → useLogViewer.d.cts} +3 -1
  52. package/lib/composables/useLogViewer.d.cts.map +1 -0
  53. package/lib/index.cjs +1 -1
  54. package/lib/index.cjs.map +1 -1
  55. package/lib/index.d.cts +14 -0
  56. package/lib/index.d.cts.map +1 -0
  57. package/lib/plugin.cjs +1 -1
  58. package/lib/plugin.cjs.map +1 -1
  59. package/lib/plugin.d.cts +7 -0
  60. package/lib/plugin.d.cts.map +1 -0
  61. package/lib/style/index.css +380 -2
  62. package/package.json +24 -16
  63. package/es/style/index.less +0 -1
  64. /package/{lib → esm}/index.d.ts +0 -0
  65. /package/{lib → esm}/plugin.d.ts +0 -0
@@ -2,12 +2,12 @@
2
2
  * ***********************************
3
3
  * @composy/log-viewer-vue v0.0.1 *
4
4
  * Built with rollup *
5
- * Build time: 2024-08-17 11:42:24 *
5
+ * Build time: 2024-10-12 17:44:31 *
6
6
  * Build mode: production *
7
7
  * Minified: No *
8
8
  * ***********************************
9
9
  */
10
- import { onUnmounted, ref } from "vue";
10
+ import { onUnmounted, ref } from "vue-demi";
11
11
  import { createLogViewer } from "@composy/log-viewer-core";
12
12
  //#region src/composables/useLogViewer.ts
13
13
  function useLogViewer() {
@@ -22,8 +22,8 @@ function useLogViewer() {
22
22
  function create(container, config) {
23
23
  if (instance.value) instance.value.destroy();
24
24
  instance.value = createLogViewer({
25
- container,
26
- ...config
25
+ ...config,
26
+ container
27
27
  });
28
28
  instance.value.on("data:change", (entries) => {
29
29
  data.value = entries;
@@ -37,9 +37,10 @@ function useLogViewer() {
37
37
  instance.value.on("page:change", () => {
38
38
  if (instance.value) pagination.value = instance.value.getPagination();
39
39
  });
40
- if (config?.data) data.value = config.data;
41
- if (config?.theme) theme.value = config.theme;
42
- if (config?.filter) filter.value = config.filter;
40
+ data.value = instance.value.getData();
41
+ filter.value = instance.value.getFilter();
42
+ theme.value = instance.value.getTheme();
43
+ pagination.value = instance.value.getPagination();
43
44
  }
44
45
  function setData(entries) {
45
46
  instance.value?.setData(entries);
@@ -76,6 +77,14 @@ function useLogViewer() {
76
77
  function refresh() {
77
78
  instance.value?.refresh();
78
79
  }
80
+ async function loadData() {
81
+ const loader = instance.value?.loadData;
82
+ if (loader) await loader.call(instance.value);
83
+ if (instance.value) {
84
+ data.value = instance.value.getData();
85
+ pagination.value = instance.value.getPagination();
86
+ }
87
+ }
79
88
  function destroy() {
80
89
  instance.value?.destroy();
81
90
  instance.value = null;
@@ -103,6 +112,7 @@ function useLogViewer() {
103
112
  collapseAll,
104
113
  goToPage,
105
114
  refresh,
115
+ loadData,
106
116
  destroy,
107
117
  on
108
118
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useLogViewer.js","names":[],"sources":["../../src/composables/useLogViewer.ts"],"sourcesContent":["/**\n * useLogViewer - Vue 3 组合式 API\n */\nimport { ref, onUnmounted } from 'vue'\nimport {\n createLogViewer,\n type LogViewer,\n type LogViewerConfig,\n type LogEntry,\n type FilterConfig,\n type ThemeMode,\n type PaginationConfig,\n} from '@composy/log-viewer-core'\n\n/**\n * useLogViewer - use Log Viewer function\n * @returns 返回值说明\n */\nexport function useLogViewer() {\n const instance = ref<LogViewer | null>(null)\n const data = ref<LogEntry[]>([])\n const filter = ref<FilterConfig>({})\n const theme = ref<ThemeMode>('light')\n const pagination = ref<PaginationConfig>({ page: 1, pageSize: 20 })\n\n function create(container: HTMLElement | string, config?: Partial<LogViewerConfig>) {\n if (instance.value) {\n instance.value.destroy()\n }\n\n instance.value = createLogViewer({\n container,\n ...config,\n })\n\n // Sync refs\n instance.value.on('data:change', (entries: LogEntry[]) => {\n data.value = entries\n })\n instance.value.on('filter:change', (f: FilterConfig) => {\n filter.value = f\n })\n instance.value.on('theme:change', (t: ThemeMode) => {\n theme.value = t\n })\n instance.value.on('page:change', () => {\n if (instance.value) {\n pagination.value = instance.value.getPagination()\n }\n })\n\n if (config?.data) data.value = config.data\n if (config?.theme) theme.value = config.theme\n if (config?.filter) filter.value = config.filter\n }\n\n function setData(entries: LogEntry[]) {\n instance.value?.setData(entries)\n data.value = entries\n }\n\n function appendData(entries: LogEntry[]) {\n instance.value?.appendData(entries)\n data.value = instance.value?.getData() || []\n }\n\n function setFilter(f: FilterConfig) {\n instance.value?.setFilter(f)\n filter.value = f\n }\n\n function resetFilter() {\n instance.value?.resetFilter()\n filter.value = {}\n }\n\n function setTheme(t: ThemeMode) {\n instance.value?.setTheme(t)\n theme.value = t\n }\n\n function expandEntry(id: string) {\n instance.value?.expandEntry(id)\n }\n\n function collapseEntry(id: string) {\n instance.value?.collapseEntry(id)\n }\n\n function collapseAll() {\n instance.value?.collapseAll()\n }\n\n function goToPage(page: number) {\n instance.value?.goToPage(page)\n }\n\n function refresh() {\n instance.value?.refresh()\n }\n\n function destroy() {\n instance.value?.destroy()\n instance.value = null\n }\n\n function on(event: string, callback: (...args: unknown[]) => void): () => void {\n return instance.value?.on(event, callback) || (() => {})\n }\n\n onUnmounted(() => {\n destroy()\n })\n\n return {\n instance,\n data,\n filter,\n theme,\n pagination,\n create,\n setData,\n appendData,\n setFilter,\n resetFilter,\n setTheme,\n expandEntry,\n collapseEntry,\n collapseAll,\n goToPage,\n refresh,\n destroy,\n on,\n }\n}\n"],"mappings":";;;;;;;;;;;;AAkBO,SAAS,eAAe;CAC7B,MAAM,WAAW,IAAsB,IAAI;CAC3C,MAAM,OAAO,IAAgB,CAAC,CAAC;CAC/B,MAAM,SAAS,IAAkB,CAAC,CAAC;CACnC,MAAM,QAAQ,IAAe,OAAO;CACpC,MAAM,aAAa,IAAsB;EAAE,MAAM;EAAG,UAAU;CAAG,CAAC;CAElE,SAAS,OAAO,WAAiC,QAAmC;EAClF,IAAI,SAAS,OACX,SAAS,MAAM,QAAQ;EAGzB,SAAS,QAAQ,gBAAgB;GAC/B;GACA,GAAG;EACL,CAAC;EAGD,SAAS,MAAM,GAAG,gBAAgB,YAAwB;GACxD,KAAK,QAAQ;EACf,CAAC;EACD,SAAS,MAAM,GAAG,kBAAkB,MAAoB;GACtD,OAAO,QAAQ;EACjB,CAAC;EACD,SAAS,MAAM,GAAG,iBAAiB,MAAiB;GAClD,MAAM,QAAQ;EAChB,CAAC;EACD,SAAS,MAAM,GAAG,qBAAqB;GACrC,IAAI,SAAS,OACX,WAAW,QAAQ,SAAS,MAAM,cAAc;EAEpD,CAAC;EAED,IAAI,QAAQ,MAAM,KAAK,QAAQ,OAAO;EACtC,IAAI,QAAQ,OAAO,MAAM,QAAQ,OAAO;EACxC,IAAI,QAAQ,QAAQ,OAAO,QAAQ,OAAO;CAC5C;CAEA,SAAS,QAAQ,SAAqB;EACpC,SAAS,OAAO,QAAQ,OAAO;EAC/B,KAAK,QAAQ;CACf;CAEA,SAAS,WAAW,SAAqB;EACvC,SAAS,OAAO,WAAW,OAAO;EAClC,KAAK,QAAQ,SAAS,OAAO,QAAQ,KAAK,CAAC;CAC7C;CAEA,SAAS,UAAU,GAAiB;EAClC,SAAS,OAAO,UAAU,CAAC;EAC3B,OAAO,QAAQ;CACjB;CAEA,SAAS,cAAc;EACrB,SAAS,OAAO,YAAY;EAC5B,OAAO,QAAQ,CAAC;CAClB;CAEA,SAAS,SAAS,GAAc;EAC9B,SAAS,OAAO,SAAS,CAAC;EAC1B,MAAM,QAAQ;CAChB;CAEA,SAAS,YAAY,IAAY;EAC/B,SAAS,OAAO,YAAY,EAAE;CAChC;CAEA,SAAS,cAAc,IAAY;EACjC,SAAS,OAAO,cAAc,EAAE;CAClC;CAEA,SAAS,cAAc;EACrB,SAAS,OAAO,YAAY;CAC9B;CAEA,SAAS,SAAS,MAAc;EAC9B,SAAS,OAAO,SAAS,IAAI;CAC/B;CAEA,SAAS,UAAU;EACjB,SAAS,OAAO,QAAQ;CAC1B;CAEA,SAAS,UAAU;EACjB,SAAS,OAAO,QAAQ;EACxB,SAAS,QAAQ;CACnB;CAEA,SAAS,GAAG,OAAe,UAAoD;EAC7E,OAAO,SAAS,OAAO,GAAG,OAAO,QAAQ,YAAY,CAAC;CACxD;CAEA,kBAAkB;EAChB,QAAQ;CACV,CAAC;CAED,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}
1
+ {"version":3,"file":"useLogViewer.js","names":[],"sources":["../../src/composables/useLogViewer.ts"],"sourcesContent":["/**\r\n * useLogViewer - Vue 3 组合式 API\r\n */\r\nimport { onUnmounted, ref } from 'vue-demi'\r\nimport {\r\n createLogViewer,\r\n type LogViewer,\r\n type LogViewerConfig,\r\n type LogEntry,\r\n type FilterConfig,\r\n type ThemeMode,\r\n type PaginationConfig,\r\n} from '@composy/log-viewer-core'\r\n\r\n/**\r\n * useLogViewer - use Log Viewer function\r\n * @returns 返回值说明\r\n */\r\nexport function useLogViewer() {\r\n const instance = ref<LogViewer | null>(null)\r\n const data = ref<LogEntry[]>([])\r\n const filter = ref<FilterConfig>({})\r\n const theme = ref<ThemeMode>('light')\r\n const pagination = ref<PaginationConfig>({ page: 1, pageSize: 20 })\r\n\r\n function create(\r\n container: HTMLElement | string,\r\n config?: Partial<LogViewerConfig>\r\n ) {\r\n if (instance.value) {\r\n instance.value.destroy()\r\n }\r\n\r\n instance.value = createLogViewer({\r\n ...config,\r\n container,\r\n })\r\n\r\n // Sync refs\r\n instance.value.on('data:change', (entries: LogEntry[]) => {\r\n data.value = entries\r\n })\r\n instance.value.on('filter:change', (f: FilterConfig) => {\r\n filter.value = f\r\n })\r\n instance.value.on('theme:change', (t: ThemeMode) => {\r\n theme.value = t\r\n })\r\n instance.value.on('page:change', () => {\r\n if (instance.value) {\r\n pagination.value = instance.value.getPagination()\r\n }\r\n })\r\n\r\n data.value = instance.value.getData()\r\n filter.value = instance.value.getFilter()\r\n theme.value = instance.value.getTheme()\r\n pagination.value = instance.value.getPagination()\r\n }\r\n\r\n function setData(entries: LogEntry[]) {\r\n instance.value?.setData(entries)\r\n data.value = entries\r\n }\r\n\r\n function appendData(entries: LogEntry[]) {\r\n instance.value?.appendData(entries)\r\n data.value = instance.value?.getData() || []\r\n }\r\n\r\n function setFilter(f: FilterConfig) {\r\n instance.value?.setFilter(f)\r\n filter.value = f\r\n }\r\n\r\n function resetFilter() {\r\n instance.value?.resetFilter()\r\n filter.value = {}\r\n }\r\n\r\n function setTheme(t: ThemeMode) {\r\n instance.value?.setTheme(t)\r\n theme.value = t\r\n }\r\n\r\n function expandEntry(id: string) {\r\n instance.value?.expandEntry(id)\r\n }\r\n\r\n function collapseEntry(id: string) {\r\n instance.value?.collapseEntry(id)\r\n }\r\n\r\n function collapseAll() {\r\n instance.value?.collapseAll()\r\n }\r\n\r\n function goToPage(page: number) {\r\n instance.value?.goToPage(page)\r\n }\r\n\r\n function refresh() {\r\n instance.value?.refresh()\r\n }\r\n\r\n async function loadData() {\r\n const loader = (\r\n instance.value as unknown as { loadData?: () => Promise<void> }\r\n )?.loadData\r\n if (loader) await loader.call(instance.value)\r\n if (instance.value) {\r\n data.value = instance.value.getData()\r\n pagination.value = instance.value.getPagination()\r\n }\r\n }\r\n\r\n function destroy() {\r\n instance.value?.destroy()\r\n instance.value = null\r\n }\r\n\r\n function on(\r\n event: string,\r\n callback: (...args: unknown[]) => void\r\n ): () => void {\r\n return instance.value?.on(event, callback) || (() => {})\r\n }\r\n\r\n onUnmounted(() => {\r\n destroy()\r\n })\r\n\r\n return {\r\n instance,\r\n data,\r\n filter,\r\n theme,\r\n pagination,\r\n create,\r\n setData,\r\n appendData,\r\n setFilter,\r\n resetFilter,\r\n setTheme,\r\n expandEntry,\r\n collapseEntry,\r\n collapseAll,\r\n goToPage,\r\n refresh,\r\n loadData,\r\n destroy,\r\n on,\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;AAkBO,SAAS,eAAe;CAC7B,MAAM,WAAW,IAAsB,IAAI;CAC3C,MAAM,OAAO,IAAgB,CAAC,CAAC;CAC/B,MAAM,SAAS,IAAkB,CAAC,CAAC;CACnC,MAAM,QAAQ,IAAe,OAAO;CACpC,MAAM,aAAa,IAAsB;EAAE,MAAM;EAAG,UAAU;CAAG,CAAC;CAElE,SAAS,OACP,WACA,QACA;EACA,IAAI,SAAS,OACX,SAAS,MAAM,QAAQ;EAGzB,SAAS,QAAQ,gBAAgB;GAC/B,GAAG;GACH;EACF,CAAC;EAGD,SAAS,MAAM,GAAG,gBAAgB,YAAwB;GACxD,KAAK,QAAQ;EACf,CAAC;EACD,SAAS,MAAM,GAAG,kBAAkB,MAAoB;GACtD,OAAO,QAAQ;EACjB,CAAC;EACD,SAAS,MAAM,GAAG,iBAAiB,MAAiB;GAClD,MAAM,QAAQ;EAChB,CAAC;EACD,SAAS,MAAM,GAAG,qBAAqB;GACrC,IAAI,SAAS,OACX,WAAW,QAAQ,SAAS,MAAM,cAAc;EAEpD,CAAC;EAED,KAAK,QAAQ,SAAS,MAAM,QAAQ;EACpC,OAAO,QAAQ,SAAS,MAAM,UAAU;EACxC,MAAM,QAAQ,SAAS,MAAM,SAAS;EACtC,WAAW,QAAQ,SAAS,MAAM,cAAc;CAClD;CAEA,SAAS,QAAQ,SAAqB;EACpC,SAAS,OAAO,QAAQ,OAAO;EAC/B,KAAK,QAAQ;CACf;CAEA,SAAS,WAAW,SAAqB;EACvC,SAAS,OAAO,WAAW,OAAO;EAClC,KAAK,QAAQ,SAAS,OAAO,QAAQ,KAAK,CAAC;CAC7C;CAEA,SAAS,UAAU,GAAiB;EAClC,SAAS,OAAO,UAAU,CAAC;EAC3B,OAAO,QAAQ;CACjB;CAEA,SAAS,cAAc;EACrB,SAAS,OAAO,YAAY;EAC5B,OAAO,QAAQ,CAAC;CAClB;CAEA,SAAS,SAAS,GAAc;EAC9B,SAAS,OAAO,SAAS,CAAC;EAC1B,MAAM,QAAQ;CAChB;CAEA,SAAS,YAAY,IAAY;EAC/B,SAAS,OAAO,YAAY,EAAE;CAChC;CAEA,SAAS,cAAc,IAAY;EACjC,SAAS,OAAO,cAAc,EAAE;CAClC;CAEA,SAAS,cAAc;EACrB,SAAS,OAAO,YAAY;CAC9B;CAEA,SAAS,SAAS,MAAc;EAC9B,SAAS,OAAO,SAAS,IAAI;CAC/B;CAEA,SAAS,UAAU;EACjB,SAAS,OAAO,QAAQ;CAC1B;CAEA,eAAe,WAAW;EACxB,MAAM,SACJ,SAAS,OACR;EACH,IAAI,QAAQ,MAAM,OAAO,KAAK,SAAS,KAAK;EAC5C,IAAI,SAAS,OAAO;GAClB,KAAK,QAAQ,SAAS,MAAM,QAAQ;GACpC,WAAW,QAAQ,SAAS,MAAM,cAAc;EAClD;CACF;CAEA,SAAS,UAAU;EACjB,SAAS,OAAO,QAAQ;EACxB,SAAS,QAAQ;CACnB;CAEA,SAAS,GACP,OACA,UACY;EACZ,OAAO,SAAS,OAAO,GAAG,OAAO,QAAQ,YAAY,CAAC;CACxD;CAEA,kBAAkB;EAChB,QAAQ;CACV,CAAC;CAED,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}
package/es/index.d.ts CHANGED
@@ -12,4 +12,3 @@ export { useLogViewer } from './composables/useLogViewer';
12
12
  export { LogViewerPlugin } from './plugin';
13
13
  export type { ActionType, ThemeMode, AnomalyType, DiffEntry, LogEntry, FilterConfig, PaginationConfig, LogViewerConfig, LogViewerInstance, LogViewerEvents, } from '@composy/log-viewer-core';
14
14
  export { createLogViewer, ACTION_LABELS, ACTION_COLORS, formatDate, formatRelativeTime, } from '@composy/log-viewer-core';
15
- //# sourceMappingURL=index.d.ts.map
package/es/index.js CHANGED
@@ -2,13 +2,13 @@
2
2
  * ***********************************
3
3
  * @composy/log-viewer-vue v0.0.1 *
4
4
  * Built with rollup *
5
- * Build time: 2024-08-17 11:42:24 *
5
+ * Build time: 2024-10-12 17:44:31 *
6
6
  * Build mode: production *
7
7
  * Minified: No *
8
8
  * ***********************************
9
9
  */
10
- import LogViewer_default from "./components/LogViewer.js";
11
10
  import { useLogViewer } from "./composables/useLogViewer.js";
11
+ import LogViewer_default from "./components/LogViewer.js";
12
12
  import { LogViewerPlugin } from "./plugin.js";
13
13
  import { ACTION_COLORS, ACTION_LABELS, createLogViewer, formatDate, formatRelativeTime } from "@composy/log-viewer-core";
14
14
  //#region src/index.ts
package/es/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["/**\n * @composy/log-viewer-vue\n *\n * 审计日志查看器 — Vue 3 适配层\n * 提供 LogViewer 组件、useLogViewer 组合式函数和 Vue 插件\n *\n * @packageDocumentation\n */\n\nexport const VERSION = '0.1.0'\n\n// 组件\nexport { default as LogViewer } from './components/LogViewer.vue'\n\n// 组合式 API\nexport { useLogViewer } from './composables/useLogViewer'\n\n// 插件\nexport { LogViewerPlugin } from './plugin'\n\n// 重新导出核心类型\nexport type {\n ActionType,\n ThemeMode,\n AnomalyType,\n DiffEntry,\n LogEntry,\n FilterConfig,\n PaginationConfig,\n LogViewerConfig,\n LogViewerInstance,\n LogViewerEvents,\n} from '@composy/log-viewer-core'\n\nexport {\n createLogViewer,\n ACTION_LABELS,\n ACTION_COLORS,\n formatDate,\n formatRelativeTime,\n} from '@composy/log-viewer-core'\n"],"mappings":";;;;;;;;;;;;;;AASO,MAAM,UAAU"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["/**\r\n * @composy/log-viewer-vue\r\n *\r\n * 审计日志查看器 — Vue 3 适配层\r\n * 提供 LogViewer 组件、useLogViewer 组合式函数和 Vue 插件\r\n *\r\n * @packageDocumentation\r\n */\r\n\r\nexport const VERSION = '0.1.0'\r\n\r\n// 组件\r\nexport { default as LogViewer } from './components/LogViewer.vue'\r\n\r\n// 组合式 API\r\nexport { useLogViewer } from './composables/useLogViewer'\r\n\r\n// 插件\r\nexport { LogViewerPlugin } from './plugin'\r\n\r\n// 重新导出核心类型\r\nexport type {\r\n ActionType,\r\n ThemeMode,\r\n AnomalyType,\r\n DiffEntry,\r\n LogEntry,\r\n FilterConfig,\r\n PaginationConfig,\r\n LogViewerConfig,\r\n LogViewerInstance,\r\n LogViewerEvents,\r\n} from '@composy/log-viewer-core'\r\n\r\nexport {\r\n createLogViewer,\r\n ACTION_LABELS,\r\n ACTION_COLORS,\r\n formatDate,\r\n formatRelativeTime,\r\n} from '@composy/log-viewer-core'\r\n"],"mappings":";;;;;;;;;;;;;;AASO,MAAM,UAAU"}
package/es/plugin.d.ts CHANGED
@@ -5,4 +5,3 @@ import type { App } from 'vue';
5
5
  export declare const LogViewerPlugin: {
6
6
  install(app: App): void;
7
7
  };
8
- //# sourceMappingURL=plugin.d.ts.map
package/es/plugin.js CHANGED
@@ -2,7 +2,7 @@
2
2
  * ***********************************
3
3
  * @composy/log-viewer-vue v0.0.1 *
4
4
  * Built with rollup *
5
- * Build time: 2024-08-17 11:42:24 *
5
+ * Build time: 2024-10-12 17:44:31 *
6
6
  * Build mode: production *
7
7
  * Minified: No *
8
8
  * ***********************************
package/es/plugin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","names":[],"sources":["../src/plugin.ts"],"sourcesContent":["/**\n * Vue 插件 - 全局注册 LogViewer 组件\n */\nimport type { App } from 'vue'\nimport LogViewer from './components/LogViewer.vue'\n\nexport const LogViewerPlugin = {\n install(app: App) {\n app.component('LogViewer', LogViewer)\n },\n}\n"],"mappings":";;;;;;;;;;;AAMO,MAAM,kBAAkB,EAC7B,QAAQ,KAAU;CAChB,IAAI,UAAU,aAAa,iBAAS;AACtC,EACF"}
1
+ {"version":3,"file":"plugin.js","names":[],"sources":["../src/plugin.ts"],"sourcesContent":["/**\r\n * Vue 插件 - 全局注册 LogViewer 组件\r\n */\r\nimport type { App } from 'vue'\r\nimport LogViewer from './components/LogViewer.vue'\r\n\r\nexport const LogViewerPlugin = {\r\n install(app: App) {\r\n app.component('LogViewer', LogViewer)\r\n },\r\n}\r\n"],"mappings":";;;;;;;;;;;AAMO,MAAM,kBAAkB,EAC7B,QAAQ,KAAU;CAChB,IAAI,UAAU,aAAa,iBAAS;AACtC,EACF"}
package/es/style/css.js CHANGED
@@ -1 +1 @@
1
- import './index.less';
1
+ import './index.css';
@@ -0,0 +1,380 @@
1
+ /* Generated from packages/core/src/styles/index.ts CSS_TEXT. */
2
+ /* ===== CSS Variables ===== */
3
+ .lv-root {
4
+ --lv-bg: var(--ld-white);
5
+ --lv-bg-secondary: var(--ld-bg-surface-soft);
6
+ --lv-bg-hover: var(--ld-primary-50);
7
+ --lv-border: var(--ld-border);
8
+ --lv-text: var(--ld-text-primary);
9
+ --lv-text-secondary: var(--ld-text-secondary);
10
+ --lv-text-muted: var(--ld-text-muted);
11
+ --lv-primary: var(--ld-primary-500);
12
+ --lv-primary-light: var(--ld-primary-50);
13
+ --lv-shadow: color-mix(in srgb, var(--ld-text-primary) 4%, transparent);
14
+ --lv-timeline-line: var(--ld-border);
15
+ --lv-timeline-dot: var(--ld-primary-500);
16
+ --lv-diff-add-bg: var(--ld-success-50);
17
+ --lv-diff-add-text: var(--ld-success-700);
18
+ --lv-diff-del-bg: var(--ld-danger-50);
19
+ --lv-diff-del-text: var(--ld-danger-700);
20
+ --lv-anomaly-bg: var(--ld-warning-50);
21
+ --lv-anomaly-border: var(--ld-warning-300);
22
+ --lv-radius: var(--ld-radius-md);
23
+ --lv-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
24
+ --lv-font-mono: "Fira Code", "SF Mono", Consolas, monospace;
25
+ }
26
+ .lv-root[data-theme="dark"] {
27
+ --lv-bg: var(--ld-bg-surface);
28
+ --lv-bg-secondary: var(--ld-bg-surface-soft);
29
+ --lv-bg-hover: var(--ld-primary-50);
30
+ --lv-border: var(--ld-border-strong);
31
+ --lv-text: var(--ld-text-primary);
32
+ --lv-text-secondary: var(--ld-text-secondary);
33
+ --lv-text-muted: var(--ld-text-muted);
34
+ --lv-primary: var(--ld-primary-400);
35
+ --lv-primary-light: var(--ld-primary-50);
36
+ --lv-shadow: color-mix(in srgb, var(--ld-text-primary) 20%, transparent);
37
+ --lv-timeline-line: var(--ld-border-strong);
38
+ --lv-timeline-dot: var(--ld-primary-400);
39
+ --lv-diff-add-bg: var(--ld-success-50);
40
+ --lv-diff-add-text: var(--ld-success-700);
41
+ --lv-diff-del-bg: var(--ld-danger-50);
42
+ --lv-diff-del-text: var(--ld-danger-700);
43
+ --lv-anomaly-bg: var(--ld-warning-50);
44
+ --lv-anomaly-border: var(--ld-warning-700);
45
+ }
46
+ /* ===== Root ===== */
47
+ .lv-root {
48
+ font-family: var(--lv-font);
49
+ font-size: var(--ld-px-14);
50
+ color: var(--lv-text);
51
+ background: var(--lv-bg);
52
+ line-height: 1.6;
53
+ }
54
+ /* ===== Filter Bar ===== */
55
+ .lv-filter {
56
+ display: flex;
57
+ flex-wrap: wrap;
58
+ gap: var(--ld-px-10);
59
+ padding: var(--ld-px-16);
60
+ background: var(--lv-bg);
61
+ border: var(--ld-px-1) solid var(--lv-border);
62
+ border-radius: var(--lv-radius);
63
+ margin-bottom: var(--ld-px-16);
64
+ align-items: center;
65
+ }
66
+ .lv-filter-item {
67
+ display: flex;
68
+ align-items: center;
69
+ gap: var(--ld-px-6);
70
+ font-size: var(--ld-px-13);
71
+ }
72
+ .lv-filter-label {
73
+ color: var(--lv-text-secondary);
74
+ font-size: var(--ld-px-12);
75
+ white-space: nowrap;
76
+ }
77
+ .lv-filter-input {
78
+ padding: var(--ld-px-5) var(--ld-px-10);
79
+ border: var(--ld-px-1) solid var(--lv-border);
80
+ border-radius: var(--ld-px-6);
81
+ font-size: var(--ld-px-13);
82
+ background: var(--lv-bg);
83
+ color: var(--lv-text);
84
+ outline: none;
85
+ transition: border-color 0.2s;
86
+ min-width: var(--ld-px-120);
87
+ }
88
+ .lv-filter-input:focus {
89
+ border-color: var(--lv-primary);
90
+ }
91
+ .lv-filter-select {
92
+ padding: var(--ld-px-5) var(--ld-px-10);
93
+ border: var(--ld-px-1) solid var(--lv-border);
94
+ border-radius: var(--ld-px-6);
95
+ font-size: var(--ld-px-13);
96
+ background: var(--lv-bg);
97
+ color: var(--lv-text);
98
+ outline: none;
99
+ cursor: pointer;
100
+ }
101
+ .lv-filter-btn {
102
+ display: inline-flex;
103
+ align-items: center;
104
+ gap: var(--ld-px-4);
105
+ padding: var(--ld-px-5) var(--ld-px-14);
106
+ font-size: var(--ld-px-13);
107
+ border: var(--ld-px-1) solid var(--lv-border);
108
+ border-radius: var(--ld-px-6);
109
+ background: var(--lv-bg);
110
+ color: var(--lv-text);
111
+ cursor: pointer;
112
+ transition: all 0.15s;
113
+ }
114
+ .lv-filter-btn:hover {
115
+ border-color: var(--lv-primary);
116
+ color: var(--lv-primary);
117
+ }
118
+ .lv-filter-btn--primary {
119
+ background: var(--lv-primary);
120
+ border-color: var(--lv-primary);
121
+ color: var(--ld-white);
122
+ }
123
+ .lv-filter-btn--primary:hover {
124
+ opacity: 0.85;
125
+ }
126
+ /* ===== Timeline ===== */
127
+ .lv-timeline {
128
+ position: relative;
129
+ padding-left: var(--ld-px-28);
130
+ }
131
+ .lv-timeline::before {
132
+ content: "";
133
+ position: absolute;
134
+ left: var(--ld-px-9);
135
+ top: 0;
136
+ bottom: 0;
137
+ width: var(--ld-px-2);
138
+ background: var(--lv-timeline-line);
139
+ }
140
+ .lv-timeline-item {
141
+ position: relative;
142
+ padding: 0 0 var(--ld-px-20) 0;
143
+ }
144
+ .lv-timeline-dot {
145
+ position: absolute;
146
+ left: calc(-1 * var(--ld-px-25));
147
+ top: var(--ld-px-6);
148
+ width: var(--ld-px-12);
149
+ height: var(--ld-px-12);
150
+ border-radius: 50%;
151
+ background: var(--lv-bg);
152
+ border: var(--ld-px-2) solid var(--lv-timeline-dot);
153
+ z-index: 1;
154
+ }
155
+ .lv-timeline-dot--anomaly {
156
+ border-color: var(--ld-danger-500);
157
+ background: var(--ld-danger-50);
158
+ }
159
+ .lv-timeline-card {
160
+ background: var(--lv-bg);
161
+ border: var(--ld-px-1) solid var(--lv-border);
162
+ border-radius: var(--lv-radius);
163
+ padding: var(--ld-px-14) var(--ld-px-18);
164
+ cursor: pointer;
165
+ transition: all 0.2s;
166
+ box-shadow: 0 var(--ld-px-1) var(--ld-px-3) var(--lv-shadow);
167
+ }
168
+ .lv-timeline-card:hover {
169
+ border-color: var(--lv-primary);
170
+ box-shadow: 0 var(--ld-px-2) var(--ld-px-8) var(--lv-shadow);
171
+ }
172
+ .lv-timeline-card--anomaly {
173
+ border-left: var(--ld-px-3) solid var(--lv-anomaly-border);
174
+ background: var(--lv-anomaly-bg);
175
+ }
176
+ .lv-timeline-header {
177
+ display: flex;
178
+ align-items: center;
179
+ gap: var(--ld-px-10);
180
+ flex-wrap: wrap;
181
+ margin-bottom: var(--ld-px-4);
182
+ }
183
+ .lv-timeline-time {
184
+ font-size: var(--ld-px-12);
185
+ color: var(--lv-text-muted);
186
+ font-family: var(--lv-font-mono);
187
+ }
188
+ .lv-timeline-user {
189
+ font-weight: 600;
190
+ font-size: var(--ld-px-14);
191
+ }
192
+ .lv-action-tag {
193
+ display: inline-block;
194
+ padding: var(--ld-px-1) var(--ld-px-8);
195
+ font-size: var(--ld-px-12);
196
+ border-radius: var(--ld-px-4);
197
+ font-weight: 500;
198
+ color: var(--ld-white);
199
+ }
200
+ .lv-action-tag--create,
201
+ .lv-action-tag--approve {
202
+ background: var(--ld-success-500);
203
+ }
204
+ .lv-action-tag--update,
205
+ .lv-action-tag--login {
206
+ background: var(--ld-primary-500);
207
+ }
208
+ .lv-action-tag--delete,
209
+ .lv-action-tag--reject {
210
+ background: var(--ld-danger-500);
211
+ }
212
+ .lv-action-tag--query,
213
+ .lv-action-tag--other {
214
+ background: var(--ld-text-secondary);
215
+ }
216
+ .lv-action-tag--logout {
217
+ background: var(--ld-primary-700);
218
+ }
219
+ .lv-action-tag--export {
220
+ background: var(--ld-warning-500);
221
+ }
222
+ .lv-action-tag--import {
223
+ background: var(--ld-success-500);
224
+ }
225
+ .lv-timeline-module {
226
+ font-size: var(--ld-px-12);
227
+ color: var(--lv-text-secondary);
228
+ background: var(--lv-bg-secondary);
229
+ padding: var(--ld-px-1) var(--ld-px-8);
230
+ border-radius: var(--ld-px-4);
231
+ }
232
+ .lv-timeline-ip {
233
+ font-size: var(--ld-px-12);
234
+ color: var(--lv-text-muted);
235
+ font-family: var(--lv-font-mono);
236
+ }
237
+ .lv-anomaly-badge {
238
+ font-size: var(--ld-px-11);
239
+ padding: var(--ld-px-1) var(--ld-px-6);
240
+ border-radius: var(--ld-px-3);
241
+ background: var(--ld-warning-50);
242
+ color: var(--ld-warning-700);
243
+ border: var(--ld-px-1) solid var(--ld-warning-300);
244
+ }
245
+ .lv-timeline-detail {
246
+ font-size: var(--ld-px-13);
247
+ color: var(--lv-text-secondary);
248
+ margin-top: var(--ld-px-6);
249
+ }
250
+ .lv-timeline-expand-hint {
251
+ border: 0;
252
+ padding: 0;
253
+ background: transparent;
254
+ font: inherit;
255
+ font-size: var(--ld-px-12);
256
+ color: var(--lv-primary);
257
+ margin-top: var(--ld-px-6);
258
+ cursor: pointer;
259
+ }
260
+ /* ===== Detail Panel ===== */
261
+ .lv-detail {
262
+ margin-top: var(--ld-px-12);
263
+ padding-top: var(--ld-px-12);
264
+ border-top: var(--ld-px-1) dashed var(--lv-border);
265
+ animation: lv-slide-down 0.2s ease;
266
+ }
267
+ @keyframes lv-slide-down {
268
+ from {
269
+ opacity: 0;
270
+ transform: translateY(calc(-1 * var(--ld-px-8)));
271
+ }
272
+ to {
273
+ opacity: 1;
274
+ transform: translateY(0);
275
+ }
276
+ }
277
+ /* ===== Diff Table ===== */
278
+ .lv-diff-table {
279
+ width: 100%;
280
+ border-collapse: collapse;
281
+ font-size: var(--ld-px-13);
282
+ border: var(--ld-px-1) solid var(--lv-border);
283
+ border-radius: var(--ld-px-6);
284
+ overflow: hidden;
285
+ }
286
+ .lv-diff-table th {
287
+ background: var(--lv-bg-secondary);
288
+ padding: var(--ld-px-8) var(--ld-px-12);
289
+ text-align: left;
290
+ font-weight: 600;
291
+ font-size: var(--ld-px-12);
292
+ color: var(--lv-text-secondary);
293
+ border-bottom: var(--ld-px-1) solid var(--lv-border);
294
+ }
295
+ .lv-diff-table td {
296
+ padding: var(--ld-px-8) var(--ld-px-12);
297
+ border-bottom: var(--ld-px-1) solid var(--lv-border);
298
+ vertical-align: top;
299
+ }
300
+ .lv-diff-table tr:last-child td {
301
+ border-bottom: none;
302
+ }
303
+ .lv-diff-old {
304
+ background: var(--lv-diff-del-bg);
305
+ color: var(--lv-diff-del-text);
306
+ text-decoration: line-through;
307
+ font-family: var(--lv-font-mono);
308
+ font-size: var(--ld-px-12);
309
+ }
310
+ .lv-diff-new {
311
+ background: var(--lv-diff-add-bg);
312
+ color: var(--lv-diff-add-text);
313
+ font-family: var(--lv-font-mono);
314
+ font-size: var(--ld-px-12);
315
+ }
316
+ /* ===== Metadata ===== */
317
+ .lv-metadata {
318
+ margin-top: var(--ld-px-10);
319
+ background: var(--lv-bg-secondary);
320
+ border-radius: var(--ld-px-6);
321
+ padding: var(--ld-px-10) var(--ld-px-14);
322
+ font-size: var(--ld-px-12);
323
+ font-family: var(--lv-font-mono);
324
+ white-space: pre-wrap;
325
+ word-break: break-all;
326
+ color: var(--lv-text-secondary);
327
+ }
328
+ /* ===== Pagination ===== */
329
+ .lv-pagination {
330
+ display: flex;
331
+ align-items: center;
332
+ justify-content: center;
333
+ gap: var(--ld-px-6);
334
+ padding: var(--ld-px-16) 0;
335
+ }
336
+ .lv-pagination-btn {
337
+ display: inline-flex;
338
+ align-items: center;
339
+ justify-content: center;
340
+ width: var(--ld-px-32);
341
+ height: var(--ld-px-32);
342
+ border: var(--ld-px-1) solid var(--lv-border);
343
+ border-radius: var(--ld-px-6);
344
+ background: var(--lv-bg);
345
+ color: var(--lv-text);
346
+ font-size: var(--ld-px-13);
347
+ cursor: pointer;
348
+ transition: all 0.15s;
349
+ }
350
+ .lv-pagination-btn:hover {
351
+ border-color: var(--lv-primary);
352
+ color: var(--lv-primary);
353
+ }
354
+ .lv-pagination-btn--active {
355
+ background: var(--lv-primary);
356
+ border-color: var(--lv-primary);
357
+ color: var(--ld-white);
358
+ }
359
+ .lv-pagination-btn:disabled {
360
+ opacity: 0.4;
361
+ cursor: not-allowed;
362
+ }
363
+ .lv-pagination-info {
364
+ font-size: var(--ld-px-13);
365
+ color: var(--lv-text-secondary);
366
+ margin: 0 var(--ld-px-8);
367
+ }
368
+ /* ===== Empty state ===== */
369
+ .lv-empty {
370
+ text-align: center;
371
+ padding: var(--ld-px-48) var(--ld-px-16);
372
+ color: var(--lv-text-muted);
373
+ font-size: var(--ld-px-14);
374
+ }
375
+ .lv-empty-icon {
376
+ font-size: var(--ld-px-48);
377
+ margin-bottom: var(--ld-px-12);
378
+ opacity: 0.3;
379
+ }
380
+ /*# sourceMappingURL=src\style\index.less.map */
package/es/style/index.js CHANGED
@@ -1 +1 @@
1
- import './index.less';
1
+ import './index.css';
@@ -0,0 +1,17 @@
1
+ /*!
2
+ * ***********************************
3
+ * @composy/log-viewer-vue v0.0.1 *
4
+ * Built with rollup *
5
+ * Build time: 2024-10-12 17:44:31 *
6
+ * Build mode: production *
7
+ * Minified: No *
8
+ * ***********************************
9
+ */
10
+ import LogViewer_vue_vue_type_script_setup_true_lang_default from "./LogViewer.vue_vue_type_script_setup_true_lang.js";
11
+ //#region src/components/LogViewer.vue
12
+ LogViewer_vue_vue_type_script_setup_true_lang_default.__file = "src/components/LogViewer.vue";
13
+ var LogViewer_default = LogViewer_vue_vue_type_script_setup_true_lang_default;
14
+ //#endregion
15
+ export { LogViewer_default as default };
16
+ /*! End of @composy/log-viewer-vue | Powered by @composy/builder */
17
+ //# sourceMappingURL=LogViewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogViewer.js","names":[],"sources":["../../src/components/LogViewer.vue"],"sourcesContent":["<!--\r\n @file 日志查看器组件\r\n @description LDesign 日志查看器组件,支持日志过滤、差异对比、异常标记等功能\r\n-->\r\n<script setup lang=\"ts\">\r\nimport { onMounted, onUnmounted, ref, watch } from 'vue-demi'\r\nimport {\r\n createLogViewer,\r\n type LogViewerConfig,\r\n type LogEntry,\r\n type FilterConfig,\r\n type ThemeMode,\r\n type LogViewer as LogViewerInstance,\r\n} from '@composy/log-viewer-core'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n data?: LogEntry[]\r\n filter?: FilterConfig\r\n theme?: ThemeMode\r\n pageSize?: number\r\n showFilter?: boolean\r\n showDiff?: boolean\r\n showAnomalyBadge?: boolean\r\n }>(),\r\n {\r\n data: () => [],\r\n theme: 'light',\r\n pageSize: 20,\r\n showFilter: true,\r\n showDiff: true,\r\n showAnomalyBadge: true,\r\n }\r\n)\r\n\r\nconst emit = defineEmits<{\r\n entryClick: [entry: LogEntry]\r\n entryExpand: [entry: LogEntry]\r\n entryCollapse: [entry: LogEntry]\r\n filterChange: [filter: FilterConfig]\r\n themeChange: [theme: ThemeMode]\r\n pageChange: [page: number]\r\n}>()\r\n\r\nconst containerRef = ref<HTMLElement | null>(null)\r\nlet instance: LogViewerInstance | null = null\r\n\r\nonMounted(() => {\r\n if (!containerRef.value) return\r\n\r\n instance = createLogViewer({\r\n container: containerRef.value,\r\n data: props.data,\r\n filter: props.filter,\r\n theme: props.theme,\r\n pageSize: props.pageSize,\r\n showFilter: props.showFilter,\r\n showDiff: props.showDiff,\r\n showAnomalyBadge: props.showAnomalyBadge,\r\n })\r\n\r\n instance.on('entry:click', (entry: LogEntry) => emit('entryClick', entry))\r\n instance.on('entry:expand', (entry: LogEntry) => emit('entryExpand', entry))\r\n instance.on('entry:collapse', (entry: LogEntry) =>\r\n emit('entryCollapse', entry)\r\n )\r\n instance.on('filter:change', (filter: FilterConfig) =>\r\n emit('filterChange', filter)\r\n )\r\n instance.on('theme:change', (theme: ThemeMode) => emit('themeChange', theme))\r\n instance.on('page:change', (page: number) => emit('pageChange', page))\r\n})\r\n\r\nwatch(\r\n () => props.data,\r\n newData => {\r\n instance?.setData(newData)\r\n },\r\n { deep: true }\r\n)\r\n\r\nwatch(\r\n () => props.filter,\r\n newFilter => {\r\n instance?.setFilter(newFilter || {})\r\n },\r\n { deep: true }\r\n)\r\n\r\nwatch(\r\n () => props.theme,\r\n newTheme => {\r\n instance?.setTheme(newTheme)\r\n }\r\n)\r\n\r\nonUnmounted(() => {\r\n instance?.destroy()\r\n instance = null\r\n})\r\n\r\ndefineExpose({\r\n getInstance: () => instance,\r\n})\r\n</script>\r\n\r\n<template>\r\n <div ref=\"containerRef\" class=\"lv-vue-root\"></div>\r\n</template>\r\n"],"mappings":""}
@@ -0,0 +1,110 @@
1
+ /*!
2
+ * ***********************************
3
+ * @composy/log-viewer-vue v0.0.1 *
4
+ * Built with rollup *
5
+ * Build time: 2024-10-12 17:44:31 *
6
+ * Build mode: production *
7
+ * Minified: No *
8
+ * ***********************************
9
+ */
10
+ import { createElementBlock, defineComponent, openBlock } from "vue";
11
+ import { onMounted, onUnmounted, ref, watch } from "vue-demi";
12
+ import { createLogViewer } from "@composy/log-viewer-core";
13
+ //#region src/components/LogViewer.vue?vue&type=script&setup=true&lang.ts
14
+ var LogViewer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
15
+ __name: "LogViewer",
16
+ props: {
17
+ data: {
18
+ type: Array,
19
+ required: false,
20
+ default: () => []
21
+ },
22
+ filter: {
23
+ type: Object,
24
+ required: false
25
+ },
26
+ theme: {
27
+ type: String,
28
+ required: false,
29
+ default: "light"
30
+ },
31
+ pageSize: {
32
+ type: Number,
33
+ required: false,
34
+ default: 20
35
+ },
36
+ showFilter: {
37
+ type: Boolean,
38
+ required: false,
39
+ default: true
40
+ },
41
+ showDiff: {
42
+ type: Boolean,
43
+ required: false,
44
+ default: true
45
+ },
46
+ showAnomalyBadge: {
47
+ type: Boolean,
48
+ required: false,
49
+ default: true
50
+ }
51
+ },
52
+ emits: [
53
+ "entryClick",
54
+ "entryExpand",
55
+ "entryCollapse",
56
+ "filterChange",
57
+ "themeChange",
58
+ "pageChange"
59
+ ],
60
+ setup(__props, { expose: __expose, emit: __emit }) {
61
+ const props = __props;
62
+ const emit = __emit;
63
+ const containerRef = ref(null);
64
+ let instance = null;
65
+ onMounted(() => {
66
+ if (!containerRef.value) return;
67
+ instance = createLogViewer({
68
+ container: containerRef.value,
69
+ data: props.data,
70
+ filter: props.filter,
71
+ theme: props.theme,
72
+ pageSize: props.pageSize,
73
+ showFilter: props.showFilter,
74
+ showDiff: props.showDiff,
75
+ showAnomalyBadge: props.showAnomalyBadge
76
+ });
77
+ instance.on("entry:click", (entry) => emit("entryClick", entry));
78
+ instance.on("entry:expand", (entry) => emit("entryExpand", entry));
79
+ instance.on("entry:collapse", (entry) => emit("entryCollapse", entry));
80
+ instance.on("filter:change", (filter) => emit("filterChange", filter));
81
+ instance.on("theme:change", (theme) => emit("themeChange", theme));
82
+ instance.on("page:change", (page) => emit("pageChange", page));
83
+ });
84
+ watch(() => props.data, (newData) => {
85
+ instance?.setData(newData);
86
+ }, { deep: true });
87
+ watch(() => props.filter, (newFilter) => {
88
+ instance?.setFilter(newFilter || {});
89
+ }, { deep: true });
90
+ watch(() => props.theme, (newTheme) => {
91
+ instance?.setTheme(newTheme);
92
+ });
93
+ onUnmounted(() => {
94
+ instance?.destroy();
95
+ instance = null;
96
+ });
97
+ __expose({ getInstance: () => instance });
98
+ return (_ctx, _cache) => {
99
+ return openBlock(), createElementBlock("div", {
100
+ ref_key: "containerRef",
101
+ ref: containerRef,
102
+ class: "lv-vue-root"
103
+ }, null, 512);
104
+ };
105
+ }
106
+ });
107
+ //#endregion
108
+ export { LogViewer_vue_vue_type_script_setup_true_lang_default as default };
109
+ /*! End of @composy/log-viewer-vue | Powered by @composy/builder */
110
+ //# sourceMappingURL=LogViewer.vue_vue_type_script_setup_true_lang.js.map