cc98-cli 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +46 -179
  3. package/dist/api/client.d.ts +29 -15
  4. package/dist/api/client.d.ts.map +1 -1
  5. package/dist/api/client.js +163 -31
  6. package/dist/api/client.js.map +1 -1
  7. package/dist/api/endpoints.d.ts +14 -0
  8. package/dist/api/endpoints.d.ts.map +1 -1
  9. package/dist/api/endpoints.js +21 -1
  10. package/dist/api/endpoints.js.map +1 -1
  11. package/dist/api/types.d.ts +12 -0
  12. package/dist/api/types.d.ts.map +1 -1
  13. package/dist/cli/commands/board.d.ts.map +1 -1
  14. package/dist/cli/commands/board.js +15 -0
  15. package/dist/cli/commands/board.js.map +1 -1
  16. package/dist/cli/commands/cache.d.ts +2 -0
  17. package/dist/cli/commands/cache.d.ts.map +1 -0
  18. package/dist/cli/commands/cache.js +68 -0
  19. package/dist/cli/commands/cache.js.map +1 -0
  20. package/dist/cli/commands/me.d.ts.map +1 -1
  21. package/dist/cli/commands/me.js +18 -3
  22. package/dist/cli/commands/me.js.map +1 -1
  23. package/dist/cli/commands/message.d.ts.map +1 -1
  24. package/dist/cli/commands/message.js +10 -0
  25. package/dist/cli/commands/message.js.map +1 -1
  26. package/dist/cli/commands/post.d.ts.map +1 -1
  27. package/dist/cli/commands/post.js +12 -0
  28. package/dist/cli/commands/post.js.map +1 -1
  29. package/dist/cli/commands/topic.d.ts.map +1 -1
  30. package/dist/cli/commands/topic.js +41 -5
  31. package/dist/cli/commands/topic.js.map +1 -1
  32. package/dist/cli/commands/update.d.ts +2 -0
  33. package/dist/cli/commands/update.d.ts.map +1 -0
  34. package/dist/cli/commands/update.js +24 -0
  35. package/dist/cli/commands/update.js.map +1 -0
  36. package/dist/cli/commands/user.d.ts.map +1 -1
  37. package/dist/cli/commands/user.js +12 -0
  38. package/dist/cli/commands/user.js.map +1 -1
  39. package/dist/cli/router.d.ts.map +1 -1
  40. package/dist/cli/router.js +18 -2
  41. package/dist/cli/router.js.map +1 -1
  42. package/dist/storage/cache-store.d.ts +45 -2
  43. package/dist/storage/cache-store.d.ts.map +1 -1
  44. package/dist/storage/cache-store.js +158 -5
  45. package/dist/storage/cache-store.js.map +1 -1
  46. package/dist/storage/token-store.js +1 -1
  47. package/dist/storage/token-store.js.map +1 -1
  48. package/dist/tui/app-new.d.ts +2 -0
  49. package/dist/tui/app-new.d.ts.map +1 -0
  50. package/dist/tui/app-new.js +2589 -0
  51. package/dist/tui/app-new.js.map +1 -0
  52. package/dist/tui/app-old.d.ts +2 -0
  53. package/dist/tui/app-old.d.ts.map +1 -0
  54. package/dist/tui/app-old.js +2589 -0
  55. package/dist/tui/app-old.js.map +1 -0
  56. package/dist/tui/app.d.ts.map +1 -1
  57. package/dist/tui/app.js +14 -1055
  58. package/dist/tui/app.js.map +1 -1
  59. package/dist/tui/borders.d.ts +183 -0
  60. package/dist/tui/borders.d.ts.map +1 -0
  61. package/dist/tui/borders.js +143 -0
  62. package/dist/tui/borders.js.map +1 -0
  63. package/dist/tui/cached-client.d.ts +43 -1
  64. package/dist/tui/cached-client.d.ts.map +1 -1
  65. package/dist/tui/cached-client.js +108 -2
  66. package/dist/tui/cached-client.js.map +1 -1
  67. package/dist/tui/components/content.d.ts +11 -0
  68. package/dist/tui/components/content.d.ts.map +1 -0
  69. package/dist/tui/components/content.js +129 -0
  70. package/dist/tui/components/content.js.map +1 -0
  71. package/dist/tui/components/header.d.ts +7 -0
  72. package/dist/tui/components/header.d.ts.map +1 -0
  73. package/dist/tui/components/header.js +38 -0
  74. package/dist/tui/components/header.js.map +1 -0
  75. package/dist/tui/components/index.d.ts +8 -0
  76. package/dist/tui/components/index.d.ts.map +1 -0
  77. package/dist/tui/components/index.js +9 -0
  78. package/dist/tui/components/index.js.map +1 -0
  79. package/dist/tui/components/layout.d.ts +3 -0
  80. package/dist/tui/components/layout.d.ts.map +1 -0
  81. package/dist/tui/components/layout.js +464 -0
  82. package/dist/tui/components/layout.js.map +1 -0
  83. package/dist/tui/components/overview.d.ts +7 -0
  84. package/dist/tui/components/overview.d.ts.map +1 -0
  85. package/dist/tui/components/overview.js +20 -0
  86. package/dist/tui/components/overview.js.map +1 -0
  87. package/dist/tui/components/sidebar.d.ts +7 -0
  88. package/dist/tui/components/sidebar.d.ts.map +1 -0
  89. package/dist/tui/components/sidebar.js +58 -0
  90. package/dist/tui/components/sidebar.js.map +1 -0
  91. package/dist/tui/components/status.d.ts +8 -0
  92. package/dist/tui/components/status.d.ts.map +1 -0
  93. package/dist/tui/components/status.js +36 -0
  94. package/dist/tui/components/status.js.map +1 -0
  95. package/dist/tui/components/types.d.ts +17 -0
  96. package/dist/tui/components/types.d.ts.map +1 -0
  97. package/dist/tui/components/types.js +3 -0
  98. package/dist/tui/components/types.js.map +1 -0
  99. package/dist/tui/components/utils.d.ts +5 -0
  100. package/dist/tui/components/utils.d.ts.map +1 -0
  101. package/dist/tui/components/utils.js +68 -0
  102. package/dist/tui/components/utils.js.map +1 -0
  103. package/dist/tui/controller.d.ts +61 -0
  104. package/dist/tui/controller.d.ts.map +1 -0
  105. package/dist/tui/controller.js +1118 -0
  106. package/dist/tui/controller.js.map +1 -0
  107. package/dist/tui/helpers.d.ts +25 -0
  108. package/dist/tui/helpers.d.ts.map +1 -0
  109. package/dist/tui/helpers.js +240 -0
  110. package/dist/tui/helpers.js.map +1 -0
  111. package/dist/tui/keymap/actions.d.ts +9 -0
  112. package/dist/tui/keymap/actions.d.ts.map +1 -0
  113. package/dist/tui/keymap/actions.js +208 -0
  114. package/dist/tui/keymap/actions.js.map +1 -0
  115. package/dist/tui/keymap/bindings.d.ts +5 -0
  116. package/dist/tui/keymap/bindings.d.ts.map +1 -0
  117. package/dist/tui/keymap/bindings.js +138 -0
  118. package/dist/tui/keymap/bindings.js.map +1 -0
  119. package/dist/tui/keymap/index.d.ts +4 -0
  120. package/dist/tui/keymap/index.d.ts.map +1 -0
  121. package/dist/tui/keymap/index.js +5 -0
  122. package/dist/tui/keymap/index.js.map +1 -0
  123. package/dist/tui/keymap/types.d.ts +17 -0
  124. package/dist/tui/keymap/types.d.ts.map +1 -0
  125. package/dist/tui/keymap/types.js +3 -0
  126. package/dist/tui/keymap/types.js.map +1 -0
  127. package/dist/tui/navigation.d.ts +4 -0
  128. package/dist/tui/navigation.d.ts.map +1 -0
  129. package/dist/tui/navigation.js +20 -0
  130. package/dist/tui/navigation.js.map +1 -0
  131. package/dist/tui/renderer.d.ts +6 -0
  132. package/dist/tui/renderer.d.ts.map +1 -0
  133. package/dist/tui/renderer.js +302 -0
  134. package/dist/tui/renderer.js.map +1 -0
  135. package/dist/tui/state/index.d.ts +3 -0
  136. package/dist/tui/state/index.d.ts.map +1 -0
  137. package/dist/tui/state/index.js +4 -0
  138. package/dist/tui/state/index.js.map +1 -0
  139. package/dist/tui/state/store.d.ts +4 -0
  140. package/dist/tui/state/store.d.ts.map +1 -0
  141. package/dist/tui/state/store.js +61 -0
  142. package/dist/tui/state/store.js.map +1 -0
  143. package/dist/tui/state/types.d.ts +137 -0
  144. package/dist/tui/state/types.d.ts.map +1 -0
  145. package/dist/tui/state/types.js +3 -0
  146. package/dist/tui/state/types.js.map +1 -0
  147. package/dist/tui/topic-reader.d.ts +10 -0
  148. package/dist/tui/topic-reader.d.ts.map +1 -0
  149. package/dist/tui/topic-reader.js +167 -0
  150. package/dist/tui/topic-reader.js.map +1 -0
  151. package/dist/update.d.ts +17 -0
  152. package/dist/update.d.ts.map +1 -0
  153. package/dist/update.js +88 -0
  154. package/dist/update.js.map +1 -0
  155. package/dist/version.d.ts +6 -0
  156. package/dist/version.d.ts.map +1 -0
  157. package/dist/version.js +6 -0
  158. package/dist/version.js.map +1 -0
  159. package/images/tui.jpg +0 -0
  160. package/package.json +4 -2
@@ -0,0 +1,36 @@
1
+ // 底部状态栏组件
2
+ import { fg } from "../ansi.js";
3
+ import { fit, cellWidth } from "./utils.js";
4
+ import { getStatus } from "../state/store.js";
5
+ const muted = fg(139, 152, 166);
6
+ const cc98Blue = fg(0, 130, 202);
7
+ export class StatusBar {
8
+ visible = true;
9
+ render(state, width) {
10
+ if (state.inputMode) {
11
+ return fit(`${cc98Blue} ${state.inputPrompt}${state.inputValue}`, width);
12
+ }
13
+ const left = getStatus(state);
14
+ const right = this.getKeyHints(state);
15
+ const padding = Math.max(1, width - cellWidth(left) - cellWidth(right) - 2);
16
+ return fit(`${muted} ${left}${" ".repeat(padding)}${right} `, width);
17
+ }
18
+ getKeyHints(state) {
19
+ if (state.mode === "topic") {
20
+ return "j/k 滚动 n 下页 h 返回 s 收藏 l/d 赞踩 u 用户";
21
+ }
22
+ if (state.mode === "settings") {
23
+ return "j/k 选择 l/Enter 执行 h 返回";
24
+ }
25
+ if (state.modal === "search") {
26
+ return "Enter 搜索/打开 Tab 切换 Esc 关闭";
27
+ }
28
+ if (state.currentChat) {
29
+ return "j/k 滚动 n 更多 h 返回 r 刷新";
30
+ }
31
+ return state.focus === "nav"
32
+ ? "j/k 切换栏目 l/Enter 进入 r 刷新 / 搜索 ? 帮助 q 退出"
33
+ : "j/k 选择 l/Enter 打开 h 返回 r 刷新 / 搜索 ? 帮助 q 退出";
34
+ }
35
+ }
36
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/tui/components/status.ts"],"names":[],"mappings":"AAAA,UAAU;AAIV,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAChC,MAAM,QAAQ,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEjC,MAAM,OAAO,SAAS;IACpB,OAAO,GAAG,IAAI,CAAC;IAEf,MAAM,CAAC,KAAe,EAAE,KAAa;QACnC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,GAAG,CAAC,GAAG,QAAQ,IAAI,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5E,OAAO,GAAG,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC;IAEO,WAAW,CAAC,KAAe;QACjC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,OAAO,wCAAwC,CAAC;QAClD,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9B,OAAO,0BAA0B,CAAC;QACpC,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,6BAA6B,CAAC;QACvC,CAAC;QACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,0BAA0B,CAAC;QACpC,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,KAAK,KAAK;YAC1B,CAAC,CAAC,8CAA8C;YAChD,CAAC,CAAC,kDAAkD,CAAC;IACzD,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ import type { TuiState } from "../state/types.js";
2
+ export interface Component {
3
+ visible: boolean;
4
+ render(state: TuiState, width: number, height: number): string | string[];
5
+ }
6
+ export interface Rect {
7
+ x: number;
8
+ y: number;
9
+ width: number;
10
+ height: number;
11
+ }
12
+ export type Layer = "content" | "overview" | "sidebar" | "right" | "status" | "menu" | "search" | "user" | "help" | "info" | "input" | "which";
13
+ export interface ComponentConfig {
14
+ layer: Layer;
15
+ visible: boolean;
16
+ }
17
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tui/components/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGlD,MAAM,WAAW,SAAS;IAExB,OAAO,EAAE,OAAO,CAAC;IAGjB,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;CAC3E;AAGD,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,MAAM,KAAK,GACb,SAAS,GACT,UAAU,GACV,SAAS,GACT,OAAO,GACP,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,GACP,OAAO,CAAC;AAGZ,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB"}
@@ -0,0 +1,3 @@
1
+ // 组件类型定义
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tui/components/types.ts"],"names":[],"mappings":"AAAA,SAAS"}
@@ -0,0 +1,5 @@
1
+ export declare function fit(value: string, width: number): string;
2
+ export declare function cellWidth(value: string): number;
3
+ export declare function charCellWidth(char: string): number;
4
+ export declare function blank(count: number, width: number): string[];
5
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/tui/components/utils.ts"],"names":[],"mappings":"AAKA,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAoCxD;AAGD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM/C;AAGD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqBlD;AAGD,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAE5D"}
@@ -0,0 +1,68 @@
1
+ // 组件工具函数
2
+ import { stripAnsi } from "../ansi.js";
3
+ // 截断字符串到指定宽度
4
+ export function fit(value, width) {
5
+ const stripped = stripAnsi(value);
6
+ const strippedWidth = cellWidth(stripped);
7
+ if (strippedWidth <= width) {
8
+ return value + " ".repeat(Math.max(0, width - strippedWidth));
9
+ }
10
+ let out = "";
11
+ let used = 0;
12
+ let inEscape = false;
13
+ for (const char of value) {
14
+ if (char === "\x1b") {
15
+ inEscape = true;
16
+ out += char;
17
+ continue;
18
+ }
19
+ if (inEscape) {
20
+ out += char;
21
+ if (/[A-Za-z]/.test(char)) {
22
+ inEscape = false;
23
+ }
24
+ continue;
25
+ }
26
+ const charWidth = charCellWidth(char);
27
+ if (used + charWidth > width) {
28
+ break;
29
+ }
30
+ out += char;
31
+ used += charWidth;
32
+ }
33
+ return out;
34
+ }
35
+ // 计算字符串的显示宽度
36
+ export function cellWidth(value) {
37
+ let width = 0;
38
+ for (const char of stripAnsi(value)) {
39
+ width += charCellWidth(char);
40
+ }
41
+ return width;
42
+ }
43
+ // 计算单个字符的显示宽度
44
+ export function charCellWidth(char) {
45
+ const code = char.codePointAt(0) ?? 0;
46
+ if (code === 0) {
47
+ return 0;
48
+ }
49
+ if (code >= 0x1100 &&
50
+ (code <= 0x115f ||
51
+ code === 0x2329 ||
52
+ code === 0x232a ||
53
+ (code >= 0x2e80 && code <= 0xa4cf) ||
54
+ (code >= 0xac00 && code <= 0xd7a3) ||
55
+ (code >= 0xf900 && code <= 0xfaff) ||
56
+ (code >= 0xfe10 && code <= 0xfe19) ||
57
+ (code >= 0xfe30 && code <= 0xfe6f) ||
58
+ (code >= 0xff00 && code <= 0xff60) ||
59
+ (code >= 0xffe0 && code <= 0xffe6))) {
60
+ return 2;
61
+ }
62
+ return 1;
63
+ }
64
+ // 创建空白行
65
+ export function blank(count, width) {
66
+ return Array.from({ length: count }, () => " ".repeat(width));
67
+ }
68
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/tui/components/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import type { TokenStore } from "../storage/token-store.js";
2
+ import type { CachedCc98Client } from "./cached-client.js";
3
+ import type { TuiState } from "./state/types.js";
4
+ type RenderFn = () => void;
5
+ type CloseFn = () => void;
6
+ type SignalFn = () => AbortSignal;
7
+ export declare class TuiController {
8
+ private readonly state;
9
+ private readonly client;
10
+ private readonly tokenStore;
11
+ private readonly render;
12
+ private readonly close;
13
+ private readonly nextSignal;
14
+ private readonly abortCurrent;
15
+ private loadVersion;
16
+ constructor(state: TuiState, client: CachedCc98Client, tokenStore: TokenStore, render: RenderFn, close: CloseFn, nextSignal: SignalFn, abortCurrent: () => void);
17
+ load(force?: boolean): Promise<void>;
18
+ handleKey(key: string): void;
19
+ private handleInputKey;
20
+ private handleModalKey;
21
+ private handleSearchKey;
22
+ private handleUserModalKey;
23
+ private handleMenuKey;
24
+ private handleTopicKey;
25
+ private handleSettingsKey;
26
+ private handleNavKey;
27
+ private handleContentKey;
28
+ private leave;
29
+ private refresh;
30
+ private openSearch;
31
+ private openMenu;
32
+ private getMenuItems;
33
+ private closeModal;
34
+ private loadView;
35
+ private activateSetting;
36
+ private activateContentItem;
37
+ private openTopic;
38
+ private openBoard;
39
+ private openChat;
40
+ private loadNextChatPage;
41
+ private loadNextTopicPage;
42
+ private jumpToTopicFloor;
43
+ private runReadOnlyAction;
44
+ private openNoticeList;
45
+ private performSearch;
46
+ private toggleFavorite;
47
+ private reactToCurrentPost;
48
+ private showCurrentUser;
49
+ private showUserDetailById;
50
+ private showTopicVote;
51
+ private showPostReactionState;
52
+ private toggleFollow;
53
+ private sendPrivateMessage;
54
+ private signin;
55
+ private openFriendUsers;
56
+ private openReadOnlyList;
57
+ private snapshotParent;
58
+ private restoreParentList;
59
+ }
60
+ export {};
61
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/tui/controller.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,OAAO,KAAK,EAAqC,QAAQ,EAAU,MAAM,kBAAkB,CAAC;AA4B5F,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAC;AAC3B,KAAK,OAAO,GAAG,MAAM,IAAI,CAAC;AAC1B,KAAK,QAAQ,GAAG,MAAM,WAAW,CAAC;AAElC,qBAAa,aAAa;IAItB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAT/B,OAAO,CAAC,WAAW,CAAK;gBAGL,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,QAAQ,EACpB,YAAY,EAAE,MAAM,IAAI;IAGrC,IAAI,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA6CxC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAiC5B,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,eAAe;IAiDvB,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,cAAc;IAyEtB,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,gBAAgB;IAkCxB,OAAO,CAAC,KAAK;IAmBb,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,UAAU;YAQJ,QAAQ;YAyJR,eAAe;YAoCf,mBAAmB;YA6BnB,SAAS;YAyBT,SAAS;YAuBT,QAAQ;YAuBR,gBAAgB;YAmBhB,iBAAiB;YAiBjB,gBAAgB;YAmBhB,iBAAiB;YA0DjB,cAAc;YAMd,aAAa;YAmBb,cAAc;YAkBd,kBAAkB;YAkBlB,eAAe;YAYf,kBAAkB;YA2BlB,aAAa;YAcb,qBAAqB;YAgBrB,YAAY;YAmBZ,kBAAkB;YAUlB,MAAM;YAcN,eAAe;IAM7B,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,iBAAiB;CAgB1B"}