@catalystsoftware/ui 1.0.15 → 1.0.16

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.
@@ -11,6 +11,45 @@ import monaco from "./monaco"
11
11
  import { STORAGE_KEY } from "./editor"
12
12
 
13
13
  const posts = [
14
+ {// search - include all
15
+ title: "search - include all",
16
+ content: `
17
+ project-config.json, global-navigator-config.json, f:/DevStack/*,
18
+
19
+
20
+ `,
21
+ tags: ["monorepo", "github", "submodules"],
22
+ },
23
+ {// search - exclude all
24
+ title: "search - exclude all",
25
+ content: `
26
+ *.js, *.json, *.d.ts, *.js.map, *.log, *.css, *.mjs, *.md, *.cjs, *.mjs.map, **/node_modules/**,
27
+
28
+
29
+ `,
30
+ tags: ["monorepo", "github", "submodules"],
31
+ },
32
+ {// regex cursor manipulation
33
+ title: "regex cursor manipulation",
34
+ content: `
35
+ Highlight the Section You Want to Edit:
36
+
37
+ Select the specific block of code where you want to place the cursors.
38
+ Open the Find Widget in Selection Mode:
39
+
40
+ Press Ctrl+F (or Cmd+F on macOS) to open the Find widget.
41
+ Click on the three dots (...) on the right side of the Find widget and ensure "Find in Selection" is checked (it will limit the search to your highlighted area).
42
+ Enable Regular Expressions:
43
+
44
+ Click on the .\\* (the “Use Regular Expression” button) in the Find widget to enable regular expressions.
45
+ Search for Lines Starting with {:
46
+
47
+ Enter the pattern ^\\s\\*\\{ in the search field. This pattern matches lines that begin with { (allowing for any leading whitespace).
48
+ Select All Matches:
49
+
50
+ Press Alt+Enter (or Option+Enter on macOS) to select all occurrences. This will place a cursor at the start of each line that begins with { within your highlighted selection`,
51
+ tags: ["monorepo", "github", "submodules"],
52
+ },
14
53
  {// submodules cmds
15
54
  title: "submodules cmds",
16
55
  content: `cd apps/*
@@ -198,7 +237,7 @@ export const meta: MetaFunction<typeof loader> = ({ data }) => {
198
237
  localStorage.setItem("config", config)
199
238
  }, [config])\`\`\``,
200
239
  },
201
- {// generate Template Content
240
+ {// generate usage example
202
241
  title: "generate Template Content",
203
242
  content: `export function generateTemplateContent(
204
243
  compValue: string,
@@ -236,6 +275,181 @@ export const meta: MetaFunction<typeof loader> = ({ data }) => {
236
275
 
237
276
  return \`\${simpleTemplate}\n\n\${fullTemplate}\`;
238
277
  }`,
278
+ },
279
+ { // generate usage example2
280
+ title: "generate usage example2", content: `
281
+ interface PropDefinition {
282
+ name: string;
283
+ type: string;
284
+ default: string;
285
+ }
286
+
287
+ interface ComponentMetadata {
288
+ name: string;
289
+ value: string;
290
+ importPath: string;
291
+ multiImport: string;
292
+ path?: string;
293
+ source?: string | null;
294
+ usagePath?: string;
295
+ basicusage?: string;
296
+ usage?: string;
297
+ lofi?: null;
298
+ premium: boolean;
299
+ category: string;
300
+ tags: string[];
301
+ features: string[];
302
+ dependencies: string[];
303
+ demo?: any[];
304
+ props: Record<string, PropDefinition[]>;
305
+ desc?: string | null;
306
+ status?: string | null;
307
+ lastUpdated?: string | null;
308
+ }
309
+
310
+ interface UsageExamples {
311
+ basic: string;
312
+ advanced: string;
313
+ }
314
+
315
+ function hasChildrenProp(props: PropDefinition[]): boolean {
316
+ return props.some(prop => prop.name === 'children');
317
+ }
318
+
319
+ function generatePropString(props: PropDefinition[], includeChildren: boolean = true): string {
320
+ return props
321
+ .filter(prop => {
322
+ // Skip children prop in attribute list
323
+ if (prop.name === 'children') return false;
324
+ return true;
325
+ })
326
+ .map(prop => {
327
+ const propName = prop.name;
328
+
329
+ // Handle different prop types
330
+ if (prop.type === 'boolean') {
331
+ return `${propName}={false}`;
332
+ } else if (prop.type.includes('function') || prop.type.includes('=>')) {
333
+ return `${propName}={() => {}}`;
334
+ } else if (prop.type.includes('React.ReactNode') || prop.type.includes('ReactNode')) {
335
+ return `${propName}={null}`;
336
+ } else if (prop.type.includes('number')) {
337
+ return `${propName}={0}`;
338
+ } else if (prop.type.includes('|')) {
339
+ // Enum type - use first value
340
+ const firstValue = prop.type.split('|')[0].trim().replace(/['"]/g, '');
341
+ return `${propName}="${firstValue}"`;
342
+ } else {
343
+ // Default to empty string
344
+ return `${propName}=""`;
345
+ }
346
+ })
347
+ .join('\n ');
348
+ }
349
+
350
+ function generateUsageExamples(component: ComponentMetadata): UsageExamples {
351
+ const componentNames = component.multiImport.split(',').map(name => name.trim());
352
+ const mainComponentName = componentNames[0];
353
+
354
+ // Check if main component has children
355
+ const mainComponentProps = component.props[mainComponentName] || [];
356
+ const hasChildren = hasChildrenProp(mainComponentProps);
357
+
358
+ let basic = '';
359
+ let advanced = '';
360
+
361
+ if (hasChildren) {
362
+ // Component with children - could be wrapper or complex component
363
+ const childComponents = componentNames.slice(1);
364
+
365
+ if (childComponents.length > 0) {
366
+ // Complex component with sub-components (like DescriptionList)
367
+ basic = `<${mainComponentName}>\n`;
368
+
369
+ childComponents.forEach(childComp => {
370
+ const childProps = component.props[childComp] || [];
371
+ const childHasChildren = hasChildrenProp(childProps);
372
+
373
+ if (childHasChildren) {
374
+ basic += ` <${childComp}>\n \n </${childComp}>\n`;
375
+ } else {
376
+ basic += ` <${childComp} />\n`;
377
+ }
378
+ });
379
+
380
+ basic += `</${mainComponentName}>`;
381
+
382
+ // Advanced example with all props
383
+ advanced = `<${mainComponentName} className="">\n`;
384
+
385
+ childComponents.forEach(childComp => {
386
+ const childProps = component.props[childComp] || [];
387
+ const childHasChildren = hasChildrenProp(childProps);
388
+ const propsString = generatePropString(childProps, false);
389
+
390
+ if (childHasChildren) {
391
+ if (propsString) {
392
+ advanced += ` <${childComp}\n ${propsString}\n >\n \n </${childComp}>\n`;
393
+ } else {
394
+ advanced += ` <${childComp}>\n \n </${childComp}>\n`;
395
+ }
396
+ } else {
397
+ if (propsString) {
398
+ advanced += ` <${childComp}\n ${propsString}\n />\n`;
399
+ } else {
400
+ advanced += ` <${childComp} />\n`;
401
+ }
402
+ }
403
+ });
404
+
405
+ advanced += `</${mainComponentName}>`;
406
+ } else {
407
+ // Simple wrapper component (like Card, Button with children)
408
+ basic = `<${mainComponentName}>\n \n</${mainComponentName}>`;
409
+
410
+ const propsString = generatePropString(mainComponentProps, false);
411
+ if (propsString) {
412
+ advanced = `<${mainComponentName}\n ${propsString}\n>\n \n</${mainComponentName}>`;
413
+ } else {
414
+ advanced = basic;
415
+ }
416
+ }
417
+ } else {
418
+ // Self-closing component (like Input, Icon)
419
+ basic = `<${mainComponentName} />`;
420
+
421
+ const propsString = generatePropString(mainComponentProps, false);
422
+ if (propsString) {
423
+ advanced = `<${mainComponentName}\n ${propsString}\n/>`;
424
+ } else {
425
+ advanced = basic;
426
+ }
427
+ }
428
+
429
+ return {
430
+ basic: basic.trim(),
431
+ advanced: advanced.trim(),
432
+ };
433
+ }
434
+
435
+ // Example usage:
436
+ function updateComponentWithGeneratedUsage(component: ComponentMetadata): ComponentMetadata {
437
+ const examples = generateUsageExamples(component);
438
+
439
+ return {
440
+ ...component,
441
+ basicusage: examples.basic,
442
+ usage: examples.advanced,
443
+ };
444
+ }
445
+
446
+ // Apply to all components
447
+ function generateAllUsageExamples(metadata: ComponentMetadata[]): ComponentMetadata[] {
448
+ return metadata.map(component => {
449
+ console.log(`📝 Generating usage for: ${component.name}`);
450
+ return updateComponentWithGeneratedUsage(component);
451
+ });
452
+ }`
239
453
  },
240
454
  {// find and place cursor on highlighted lines
241
455
  title: "find and place cursor on highlighted lines",
@@ -251,7 +465,7 @@ then press ctrl shift L`,
251
465
  .map(word => word.charAt(0).toUpperCase() + word.slice(1))
252
466
  .join('');
253
467
  }` },
254
- {// escapeTemplateContent
468
+ {// escape Template Content
255
469
  title: "escapeTemplateContent", content: `
256
470
  function escapeTemplateContent(content) {
257
471
  if (!content) return "";
@@ -2249,7 +2463,7 @@ export async function GetWorkSpace(context: vscode.ExtensionContext): Promise<Wo
2249
2463
  }
2250
2464
  `
2251
2465
  },
2252
- {
2466
+ {// VSCode Regex: Place cursor on every 2nd line
2253
2467
  title: "VSCode Regex: Place cursor on every 2nd line", content: `1. ctrl + h - find and replace
2254
2468
  2. enable regex mode '.*'
2255
2469
  3. ^(.*)$\n.*$
@@ -2446,7 +2660,7 @@ ___Bold and italic text___
2446
2660
  3. Third ordered item
2447
2661
  1. Ordered sub-item
2448
2662
  2. Another ordered sub-item`,
2449
- CheckLists: `- [ ] First ordered item
2663
+ CheckLists: `- [ ] First ordered item
2450
2664
  - [ ] Second ordered item
2451
2665
  - [ ] Unordered sub-item
2452
2666
  - [ ] Another unordered sub-item
@@ -3474,7 +3688,7 @@ Your Name - [@twitter_handle](https://twitter.com/twitter_handle) - email@email_
3474
3688
  </p>`,
3475
3689
  sectionHeader: `## <img src="https://media2.giphy.com/media/QssGEmpkyEOhBCb7e1/giphy.gif?cid=ecf05e47a0n3gi1bfqntqmob8g9aid1oyj2wr3ds3mg700bl&rid=giphy.gif" width ="25"><b> Skills</b>
3476
3690
  <br>`,
3477
- badgeBuilder: `Here's a list of popular logo values for shields.io badges:
3691
+ badgeBuilder: `Here's a list of popular logo values for shields.io badges:
3478
3692
 
3479
3693
  ![Loki AI](https://img.shields.io/badge/-Loki%20AI-7C3AED?style=flat&logo=wandb&logoColor=fff)
3480
3694
  ![V4 Tailwind Plugin](https://img.shields.io/badge/-V4%20Tailwind%20Plugin-06B6D4?style=flat&logo=tailwindcss&logoColor=fff)
@@ -3558,7 +3772,7 @@ badgeBuilder: `Here's a list of popular logo values for shields.io badges:
3558
3772
  - "logo=settings" - Settings gear
3559
3773
  - "logo=tool" - Tool/wrench
3560
3774
  `,
3561
- chalkColorsandStuff: `
3775
+ chalkColorsandStuff: `
3562
3776
  import inquirer from 'inquirer';
3563
3777
  import chalk from 'chalk';
3564
3778
  import ora from 'ora';
@@ -3584,34 +3798,6 @@ function logSuccess(message: string) {
3584
3798
  log(\`✔ \${message}\`, 'blue');
3585
3799
  }
3586
3800
  `,
3587
- renderMenuHeader: `
3588
- function renderMenuHeader() {
3589
- const header = [
3590
- '\n',
3591
- '╭────────────────────────────────────────────────────────────────────────────╮',
3592
- '│ \u001b[1mCATALYST UI\u001b[0m · \u001b[36mINSTALL AND CONFIGURE\u001b[0m │',
3593
- '├────────────────────────────────────────────────────────────────────────────┤',
3594
- '│ Select a installation option: │',
3595
- '│ 1) Copy source files │',
3596
- '│ 2) Copy for dist │',
3597
- '│ 3) Copy free components │',
3598
- '│ 4) Update libs │',
3599
- '│ 5) Copy config files │',
3600
- '│ 6) Build CLI │',
3601
- '╰────────────────────────────────────────────────────────────────────────────╯'
3602
- ];
3603
- for (const line of header) log(line, 'cyan');
3604
- }`,
3605
- renderMenuFooter: `
3606
- function renderMenuFooter(duration: string) {
3607
- const footer = [
3608
- '\n',
3609
- '╭────────────────────────────────────────────────────────────────────────────╮',
3610
- \`│ \u001b[32mBUILD COMPLETE\u001b[0m — Duration: \u001b[1m\${duration}s\u001b[0m │\`,
3611
- '╰────────────────────────────────────────────────────────────────────────────╯\n'
3612
- ];
3613
- for (const line of footer) log(line, 'green');
3614
- }`,
3615
3801
  drawBox: `
3616
3802
  const BOX = {
3617
3803
  // rounded
@@ -3777,14 +3963,17 @@ function printErrorBox(message: string) {
3777
3963
  console.log(chalk.red.bold(BOX.BL + BOX.H.repeat(width) + BOX.BR));
3778
3964
  console.log('');
3779
3965
  }`,
3780
- arrowR: `→`,
3781
- arrowRAlt: `➔ ⇒ ⟹`,
3782
- arrowL: `←`,
3783
- arrowLAlt: `⬅ ⟸`,
3784
- arrowU: `↑`,
3785
- arrowUAlt: `⬆ ⇑`,
3786
- arrowD: `↓`,
3787
- arrowDAlt: `⬇ ⇓`,
3966
+ padLine: `// Helper to pad strings for the 80-character wide box
3967
+ function padLine(text: string, width = 76) {
3968
+ const cleanText = text.replace(/\u001b\[.*?m/g, ''); // Strip ANSI for length calc
3969
+ return text + ' '.repeat(Math.max(0, width - cleanText.length));
3970
+ }`,
3971
+ padLine2: `function padLine(text: string, width = 72) {
3972
+ // Removes all ANSI escape codes to calculate real visible string length
3973
+ const cleanText = text.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '');
3974
+ const paddingNeeded = Math.max(0, width - cleanText.length);
3975
+ return text + ' '.repeat(paddingNeeded);
3976
+ }`,
3788
3977
  unorderedListHtml: `<ul><li></li></ul>`,
3789
3978
  orderedListHtml: `<ol><li></li></ol>`,
3790
3979
  rawImageURL: `https://raw.githubusercontent.com/user/repo/branch/utils/5.jpg`,
@@ -3809,145 +3998,714 @@ function printErrorBox(message: string) {
3809
3998
  "ocrmnavigator.bleedingEdge": true,
3810
3999
  "ocrmnavigator.autorunDir": "src",
3811
4000
  }</code><pre>`,
4001
+ termColors: `
4002
+ const colors = {
4003
+ // Styles
4004
+ reset: '\x1b[0m',
4005
+ bright: '\x1b[1m',
4006
+ dim: '\x1b[2m',
4007
+ italic: '\x1b[3m',
4008
+ underline: '\x1b[4m',
4009
+ inverse: '\x1b[7m',
4010
+
4011
+ // Standard Colors
4012
+ black: '\x1b[30m',
4013
+ red: '\x1b[31m',
4014
+ green: '\x1b[32m',
4015
+ yellow: '\x1b[33m',
4016
+ blue: '\x1b[34m',
4017
+ magenta: '\x1b[35m',
4018
+ cyan: '\x1b[36m',
4019
+ white: '\x1b[37m',
4020
+ gray: '\x1b[90m',
4021
+
4022
+ // Bright Variants
4023
+ brightRed: '\x1b[91m',
4024
+ brightGreen: '\x1b[92m',
4025
+ brightYellow: '\x1b[93m',
4026
+ brightBlue: '\x1b[94m',
4027
+ brightMagenta: '\x1b[95m',
4028
+ brightCyan: '\x1b[96m',
4029
+ brightWhite: '\x1b[97m',
4030
+
4031
+ // Background Colors
4032
+ bgBlack: '\x1b[40m',
4033
+ bgRed: '\x1b[41m',
4034
+ bgGreen: '\x1b[42m',
4035
+ bgYellow: '\x1b[43m',
4036
+ bgBlue: '\x1b[44m',
4037
+ bgMagenta: '\x1b[45m',
4038
+ bgCyan: '\x1b[46m',
4039
+ bgWhite: '\x1b[47m',
4040
+ };`,
3812
4041
  specialWeirdChars: `\`\`\`sh
3813
- // Box Drawing Characters
3814
- '◇' // white diamond
3815
- '◆' // black diamond
3816
- '☆' // white star
3817
- '○' // white circle
3818
- '●' // black circle
3819
- '★' // black star
3820
- '✔' // bold check
3821
- '✓' // bold check
3822
- '✗' // bold check
3823
-
3824
- // Single Line
3825
- '─' // horizontal line
3826
- '' // vertical line
3827
- '┌' // top-left corner
3828
- '┐' // top-right corner
3829
- '└' // bottom-left corner
3830
- '┘' // bottom-right corner
3831
- '├' // left T-junction
3832
- '┤' // right T-junction
3833
- '┬' // top T-junction
3834
- '┴' // bottom T-junction
3835
- '┼' // cross/plus
3836
-
3837
- // file tree
3838
- '├── 📂 BRANCH_TITLE/'
3839
- '├── 📄 line item ................ Description'
3840
- '├── 📄 line item 2 .............. Description'
3841
- '└── 📄 line 3 ................... Description'
3842
-
3843
- // Double Line
3844
- '═' // horizontal double
3845
- '║' // vertical double
3846
- '╔' // top-left double
3847
- '╗' // top-right double
3848
- '╚' // bottom-left double
3849
- '╝' // bottom-right double
3850
- '╠' // left T-junction double
3851
- '╣' // right T-junction double
3852
- '╦' // top T-junction double
3853
- '╩' // bottom T-junction double
3854
- '╬' // cross double
3855
-
3856
- // Heavy/Bold Line
3857
- '━' // horizontal heavy
3858
- '┃' // vertical heavy
3859
- '┏' // top-left heavy
3860
- '┓' // top-right heavy
3861
- '┗' // bottom-left heavy
3862
- '┛' // bottom-right heavy
3863
- '┣' // left T-junction heavy
3864
- '┫' // right T-junction heavy
3865
- '┳' // top T-junction heavy
3866
- '┻' // bottom T-junction heavy
3867
- '╋' // cross heavy
3868
-
3869
- // Mixed (single + double combinations)
3870
- '╒' // top-left (double horizontal, single vertical)
3871
- '╓' // top-left (single horizontal, double vertical)
3872
- '╕' // top-right (double horizontal, single vertical)
3873
- '╖' // top-right (single horizontal, double vertical)
3874
- '╘' // bottom-left (double horizontal, single vertical)
3875
- '╙' // bottom-left (single horizontal, double vertical)
3876
- '╛' // bottom-right (double horizontal, single vertical)
3877
- '╜' // bottom-right (single horizontal, double vertical)
3878
-
3879
- // Rounded Corners
3880
- '╭' // top-left rounded
3881
- '╮' // top-right rounded
3882
- '╰' // bottom-left rounded
3883
- '╯' // bottom-right rounded
3884
-
3885
- // Dashed/Dotted
3886
- '┄' // horizontal dashed (3 dots)
3887
- '┅' // horizontal dashed heavy
3888
- '┆' // vertical dashed (3 dots)
3889
- '┇' // vertical dashed heavy
3890
- '┈' // horizontal dashed (4 dots)
3891
- '┉' // horizontal dashed heavy (4 dots)
3892
- '┊' // vertical dashed (4 dots)
3893
- '┋' // vertical dashed heavy (4 dots)
3894
-
3895
- // Other Useful Characters
3896
- '▀' // upper half block
3897
- '▄' // lower half block
3898
- '█' // full block
3899
- '░' // light shade
3900
- '▒' // medium shade
3901
- '▓' // dark shade
3902
- '▌' // left half block
3903
- '▐' // right half block
3904
- '■' // black square
3905
- '▪' // white square
3906
- '□' // small black square
3907
- '▫' // small white square
3908
- '→' // right arrow
3909
- '←' // left arrow
3910
- '↑' // up arrow
3911
- '↓' // down arrow
3912
- '⇒' // right double arrow
3913
- '⇐' // left double arrow
3914
- '•' // bullet
3915
- '·' // middle dot
3916
- '…' // ellipsis
3917
- '―' // horizontal bar
3918
- '‖' // double vertical line
3919
-
3920
-
3921
-
3922
- // examples
3923
- ┌───────────────────────────── VSCODE ─────────────────────────────┐
3924
-
3925
- └── mlops-course/
3926
- ├── .github/
3927
- └── workflows/
3928
- ├── LICENSE.md
3929
- ├── Makefile.js
3930
- ├── README.md
3931
- └── datasets/
3932
- ├── dataset.csv
3933
- ├── holdout.csv
3934
- ├── projects.csv
3935
- └── tags.csv
4042
+ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────╮
4043
+ │ ♠ ♣ SPECIAL CHARS BUILD ♥ ♦ │
4044
+ ├───────────────────────────────────────────────────────────────────────────────────────────────────────────┤
4045
+ │ Box Drawing Characters │
4046
+ │ ◇ ────────────────────────────────────────────────────── white diamond │
4047
+ │ ◆ ────────────────────────────────────────────────────── black diamond │
4048
+ │ ☆ ────────────────────────────────────────────────────── white star
4049
+ │ ○ ────────────────────────────────────────────────────── white circle │
4050
+ │ ● ────────────────────────────────────────────────────── black circle │
4051
+ │ ★ ────────────────────────────────────────────────────── black star │
4052
+ │ ✔ ────────────────────────────────────────────────────── bold check │
4053
+ │ ✓ ────────────────────────────────────────────────────── bold check │
4054
+ │ ✗ ────────────────────────────────────────────────────── bold check │
4055
+ ────────────────────────────────────────────────────── bold check │
4056
+ │ ✦ ✧ ───────────────────────────────────────────────── Four-point stars │
4057
+ │ ✩ ✪ ───────────────────────────────────────────────── Open/center star │
4058
+ │ ✫ ✬ ───────────────────────────────────────────────── Star with circle │
4059
+ │ ✭ ✮ ───────────────────────────────────────────────── Star outlines │
4060
+ │ ✯ ✰ ───────────────────────────────────────────────── Sparkle stars │
4061
+ │ ♠ ♣ ♥ ♦ ────────────────────────────────────────── Suits │
4062
+ │ ☀ ☁ ☂ ☃ ☄ ──────────────────────────────────── Weather │
4063
+ │ ☎ ☏ ───────────────────────────────────────────────── Phone symbols │
4064
+ │ ♩ ♪ ♫ ♬ ────────────────────────────────────────── Music notes │
4065
+ ├───────────────────────────────────────────────────────────────────────────────────────────────────────────┤
4066
+ │ DOTS │
4067
+ │ ⠁ ⠃ ⠄ ⠅ ⠆ ⠇ ⠈ ⠉ ⠊ ⠋ ⠌ ⠍ ⠎ ⠏ │
4068
+ ⠕ ⠖ ⠗ ⠘ ⠙ ⠚ ⠛ ⠜ ⠝ ⠞ ⠟ │
4069
+ ⠧ ⠨ ⠩ ⠪ ⠫ ⠬ ⠭ ⠮ ⠯ │
4070
+ ⠵ ⠶ ⠷ ⠸ ⠹ ⠺ ⠻ ⠼ ⠽ ⠾ ⠿ │
4071
+ │ ⡀ ⡁ ⡂ ⡃ ⡄ ⡅ ⡆ ⡇ ⡈ ⡉ ⡊ ⡋ ⡌ ⡍ ⡎ ⡏ │
4072
+ │ ⡐ ⡒ ⡓ ⡔ ⡕ ⡖ ⡗ ⡘ ⡙ ⡚ ⡛ ⡜ ⡝ ⡞ ⡟ │
4073
+ │ ⡠ ⡢ ⡣ ⡤ ⡥ ⡦ ⡧ ⡨ ⡩ ⡪ ⡫ ⡬ ⡭ ⡮ ⡯ │
4074
+ │ ⡰ ⡲ ⡳ ⡴ ⡵ ⡶ ⡷ ⡸ ⡹ ⡺ ⡻ ⡼ ⡽ ⡾ ⡿ │
4075
+ │ ⢀ ⢂ ⢃ ⢄ ⢅ ⢆ ⢇ ⢈ ⢉ ⢊ ⢋ ⢌ ⢍ ⢎ ⢏ │
4076
+ │ ⢐ ⢒ ⢓ ⢔ ⢕ ⢖ ⢗ ⢘ ⢙ ⢚ ⢛ ⢜ ⢝ ⢞ ⢟ │
4077
+ │ ⢠ ⢢ ⢣ ⢤ ⢥ ⢦ ⢧ ⢨ ⢩ ⢪ ⢫ ⢬ ⢭ ⢮ ⢯ │
4078
+ │ ⢰ ⢲ ⢳ ⢴ ⢵ ⢶ ⢷ ⢸ ⢹ ⢺ ⢻ ⢼ ⢽ ⢾ ⢿ │
4079
+ │ ⣀ ⣃ ⣄ ⣅ ⣆ ⣇ ⣈ ⣉ ⣊ ⣋ ⣌ ⣍ ⣎ ⣏ │
4080
+ │ ⣐ ⣓ ⣔ ⣕ ⣖ ⣗ ⣘ ⣙ ⣚ ⣛ ⣜ ⣝ ⣞ ⣟ │
4081
+ │ ⣠ ⣣ ⣤ ⣥ ⣦ ⣧ ⣨ ⣩ ⣪ ⣫ ⣬ ⣭ ⣮ ⣯ │
4082
+ │ ⣰ ⣳ ⣴ ⣵ ⣶ ⣷ ⣸ ⣹ ⣺ ⣻ ⣼ ⣽ ⣾ ⣿ │
4083
+ │ ⠋ , , ⠹ , ⠸ , ⠼ , ⠴ , ⠦ , ⠧ , ⠇ , ⠏ │
4084
+ │ ⣾ , ⣽ , ⣻ , ⢿ , ⡿ , ⣟ , ⣯ , ⣷ │
4085
+ │ ⠁ , ⠂ , ⠄ , ⡀ , ⢀ , ⠠ , ⠐ , ⠈ │
4086
+ │ ⠀ , , ⣀ , ⣄ , ⣤ , ⣦ , ⣴ , ⣶ , ⣷ , ⣿ ───────────── 0-90% │
4087
+ │ ⣿ , ⣿⡀ , ⣿⣀ , ⣿⣄ , ⣿⣤ , ⣿⣦ , ⣿⣴ , ⣿⣶ , ⣿⣷ , ⣿⣿ ─ 100% │
4088
+ │ ⠁ ⠂ ⠄ ⡀ ⠈ ⠐ ⠠ ⢀ ────────────────────────────── Individual dots │
4089
+ │ ⠿ ───────────────────────────────────────────────────────────── All dots (full 2x4 grid) │
4090
+ │ ⠋ ───────────────────────────────────────────────────────────── Example pattern │
4091
+ │ ⁚ ────────────────────────────────────────────────────────────── two dot colon │
4092
+ │ ⁝ ────────────────────────────────────────────────────────────── three dot colon │
4093
+ │ ⁞ ────────────────────────────────────────────────────────────── four dot colon │
4094
+ │ ︙ ───────────────────────────────────────────────────────────── vertical ellipsis │
4095
+ │ ⠁ (1) ⠂ (2) ⠄ (4) ⠈ (8) │
4096
+ │ ⠐ (16) ⠠ (32) ⢀ (64) ⠀ (128) - empty │
4097
+ │ ┄ // horizontal dashed (3 dots) │
4098
+ │ ┅ // horizontal dashed heavy │
4099
+ │ ┆ // vertical dashed (3 dots)
4100
+ │ ┇ // vertical dashed heavy │
4101
+ │ ┈ // horizontal dashed (4 dots)
4102
+ │ ┉ // horizontal dashed heavy (4 dots)
4103
+ │ ┊ // vertical dashed (4 dots)
4104
+ │ ┋ // vertical dashed heavy (4 dots)
4105
+ │ • // bullet │
4106
+ │ · // middle dot │
4107
+ │ … // ellipsis │
4108
+ │ ― // horizontal bar
4109
+ // Loading...
4110
+ │ ⠙ Processing...
4111
+ │ ⠹ Working...
4112
+ │ dots: [ ⠋ , , ⠹ , ⠸ , ⠼ , ⠴ , ⠦ , ⠧ , ⠇ , ⠏ ],
4113
+ │ line: [ | , / , - , \\ ],
4114
+ │ arrow: [ ← , ↖ , ↑ , ↗ , → , ↘ , ↓ , ↙ ],
4115
+ │ bounce: [ ⠁ , , ⠄ , ⠂ ],
4116
+ │ box: [ ◰ , , ◲ , ◱ ],
4117
+ │ circle: [ ◐ , , ◑ , ◒ ],
4118
+ │ square: [ ◰ , , ◲ , ◱ ],
4119
+ │ arrows: [ ▹▹▹▹▹ , ▸▹▹▹▹ , ▹▸▹▹▹ , ▹▹▸▹▹ , ▹▹▹▸▹ , ▹▹▹▹▸ ],
4120
+ │ growing: [ ▁ , , ▄ , ▅ , ▆ , ▇ , █ , ▇ , ▆ , ▅ , ▄ , ▃ ],
4121
+ │ moon: [ 🌑 , 🌒 , 🌓 , 🌔 , 🌕 , 🌖 , 🌗 , 🌘 ],
4122
+ │ earth: [ 🌍 , 🌎 , 🌏 ],
4123
+ │ clock: [ 🕐 , 🕑 , 🕒 , 🕓 , 🕔 , 🕕 , 🕖 , 🕗 , 🕘 , 🕙 , 🕚 , 🕛 ],
4124
+ │ braille: [ , ⣽ , ⣻ , ⢿ , ⡿ , ⣟ , ⣯ , ⣷ ],
4125
+ │ dots2: [ ⣷ , , ⣟ , ⡿ , ⢿ , ⣻ , ⣽ , ⣾ ],
4126
+ │ pulse: [ ∙∙∙ , ●∙∙ , ∙●∙ , ∙∙● , ∙∙∙ ],
4127
+ │ weather: [ ☀️ , ☀️ , ⛅ , 🌤 , ⛅ , 🌥 , ☁️ , 🌧 , ⛈ , 🌩 , 🌧 ],
4128
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4129
+ │ ⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4130
+ │ ⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4131
+ │ ⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4132
+ │ ⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4133
+ │ ⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4134
+ │ ⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4135
+ │ ⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4136
+ │ ⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4137
+ │ ⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4138
+ │ ⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4139
+ │ ⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4140
+ │ ⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4141
+ │ ⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4142
+ │ ⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4143
+ │ ⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4144
+ │ ⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4145
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4146
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4147
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4148
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4149
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4150
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4151
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿
4152
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿
4153
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿
4154
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿
4155
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿
4156
+ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿
4157
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿
4158
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿
4159
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿
4160
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿
4161
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿
4162
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿
4163
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿
4164
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿
4165
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿
4166
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿
4167
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿
4168
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿
4169
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾
4170
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷
4171
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯
4172
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣟
4173
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿
4174
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿
4175
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿
4176
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿
4177
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿
4178
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿
4179
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿
4180
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿
4181
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿
4182
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿
4183
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿
4184
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿
4185
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿
4186
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿
4187
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿
4188
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿
4189
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿
4190
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿
4191
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4192
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4193
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4194
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4195
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4196
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4197
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4198
+ │ ⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4199
+ │ ⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4200
+ │ ⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4201
+ │ ⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4202
+ │ ⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4203
+ │ ⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4204
+ │ ⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4205
+ │ ⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4206
+ │ ⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4207
+ │ ⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4208
+ │ ⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4209
+ │ ⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4210
+ │ ⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4211
+ │ ⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4212
+ │ ⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4213
+ │ ⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4214
+ │ ⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4215
+ │ ⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4216
+ │ ⣽⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
4217
+ │ │
4218
+ ├───────────────────────────────────────────────────────────────────────────────────────────────────────────┤
4219
+ │ LINES │
4220
+ │ ─ ───────────────────────────────────────────────────────────── horizontal line │
4221
+ │ │ ───────────────────────────────────────────────────────────── vertical line │
4222
+ │ ┌ ───────────────────────────────────────────────────────────── top-left corner │
4223
+ │ ┐ ───────────────────────────────────────────────────────────── top-right corner │
4224
+ │ └ ───────────────────────────────────────────────────────────── bottom-left corner │
4225
+ │ ┘ ───────────────────────────────────────────────────────────── bottom-right corner │
4226
+ │ ├ ───────────────────────────────────────────────────────────── left T-junction │
4227
+ │ ┤ ───────────────────────────────────────────────────────────── right T-junction │
4228
+ │ ┬ ───────────────────────────────────────────────────────────── top T-junction │
4229
+ │ ┴ ───────────────────────────────────────────────────────────── bottom T-junction │
4230
+ │ ┼ ───────────────────────────────────────────────────────────── cross/plus │
4231
+ │ ╭ ╮ ╯ ╰ ───────────────────────────────────────────────── Light arc corners │
4232
+ │ ╱ ╲ ╳ ───────────────────────────────────────────────────── Diagonal lines │
4233
+ │ ┍ ┑ ┕ ┙ ───────────────────────────────────────────────── Alternative corners │
4234
+ │ ┝ ┥ ┯ ┷ ───────────────────────────────────────────────── Alternative junctions │
4235
+ │ ┭ ┵ ┶ ┱ ┲ ┹ ┺ │
4236
+ │ ┽ ┾ ┿ ╀ ╁ ╂ ╃ │
4237
+ │ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ───────────────────────────────────── Rare junctions │
4238
+ │ ┕ ───────────────────────────────────────────────────────────── heavy bottom-left │
4239
+ │ ┖ ───────────────────────────────────────────────────────────── heavy vertical-right │
4240
+ │ │
4241
+ │ Double Line │
4242
+ │ ═ ───────────────────────────────────────────────────────────── horizontal double │
4243
+ │ ║ ───────────────────────────────────────────────────────────── vertical double │
4244
+ │ ╔ ───────────────────────────────────────────────────────────── top-left double │
4245
+ │ ╗ ───────────────────────────────────────────────────────────── top-right double │
4246
+ │ ╚ ───────────────────────────────────────────────────────────── bottom-left double │
4247
+ │ ╝ ───────────────────────────────────────────────────────────── bottom-right double │
4248
+ │ ╠ ───────────────────────────────────────────────────────────── left T-junction double │
4249
+ │ ╣ ───────────────────────────────────────────────────────────── right T-junction double │
4250
+ │ ╦ ───────────────────────────────────────────────────────────── top T-junction double │
4251
+ │ ╩ ───────────────────────────────────────────────────────────── bottom T-junction double │
4252
+ │ ╬ ───────────────────────────────────────────────────────────── cross double │
4253
+ │ │
4254
+ │ Heavy/Bold Line │
4255
+ │ ━ ───────────────────────────────────────────────────────────── horizontal heavy │
4256
+ │ ┃ ───────────────────────────────────────────────────────────── vertical heavy │
4257
+ │ ┏ ───────────────────────────────────────────────────────────── top-left heavy │
4258
+ │ ┓ ───────────────────────────────────────────────────────────── top-right heavy │
4259
+ │ ┗ ───────────────────────────────────────────────────────────── bottom-left heavy │
4260
+ │ ┛ ───────────────────────────────────────────────────────────── bottom-right heavy │
4261
+ │ ┣ ───────────────────────────────────────────────────────────── left T-junction heavy │
4262
+ │ ┫ ───────────────────────────────────────────────────────────── right T-junction heavy │
4263
+ │ ┳ ───────────────────────────────────────────────────────────── top T-junction heavy │
4264
+ │ ┻ ───────────────────────────────────────────────────────────── bottom T-junction heavy │
4265
+ │ ╋ ───────────────────────────────────────────────────────────── cross heavy │
4266
+ │ │
4267
+ │ Mixed (single + double combinations) │
4268
+ │ ╒ ───────────────────────────────────────────────────────────── top-left ( single vertical) │
4269
+ │ ╓ ───────────────────────────────────────────────────────────── top-left ( double vertical) │
4270
+ │ ╕ ───────────────────────────────────────────────────────────── top-right ( single vertical) │
4271
+ │ ╖ ───────────────────────────────────────────────────────────── top-right ( double vertical) │
4272
+ │ ╘ ───────────────────────────────────────────────────────────── bottom-left ( single vertical) │
4273
+ │ ╙ ───────────────────────────────────────────────────────────── bottom-left ( double vertical) │
4274
+ │ ╛ ───────────────────────────────────────────────────────────── bottom-right ( single vertical) │
4275
+ │ ╜ ───────────────────────────────────────────────────────────── bottom-right ( double vertical) │
4276
+ │ │
4277
+ │ Rounded Corners │
4278
+ │ ╭ ───────────────────────────────────────────────────────────── top-left rounded │
4279
+ │ ╮ ───────────────────────────────────────────────────────────── top-right rounded │
4280
+ │ ╰ ───────────────────────────────────────────────────────────── bottom-left rounded │
4281
+ │ ╯ ───────────────────────────────────────────────────────────── bottom-right rounded │
4282
+ ├───────────────────────────────────────────────────────────────────────────────────────────────────────────┤
4283
+ │ FILE TREE │
4284
+ │ │
4285
+ │ ┌───────────────────────────── VSCODE ─────────────────────────────┐ │
4286
+ │ ├── 📂 BRANCH_TITLE/ │
4287
+ │ │ ├── 📄 line item ................ Description │
4288
+ │ │ ├── 📄 line item 2 .............. Description │
4289
+ │ │ └── 📄 line 3 ................... Description │
4290
+ │ │
4291
+ │ │
4292
+ │ └── mlops-course/ │
4293
+ │ ├── .github/ │
4294
+ │ │ └── workflows/ │
4295
+ │ ├── LICENSE.md │
4296
+ │ ├── Makefile.js │
4297
+ │ ├── README.md │
4298
+ │ └── datasets/ │
4299
+ │ ├── dataset.csv │
4300
+ │ ├── holdout.csv │
4301
+ │ ├── projects.csv │
4302
+ │ └── tags.csv │
4303
+ │ │
4304
+ │ ┌─ src/ │
4305
+ │ │ ├─ components/ │
4306
+ │ │ │ ├─ Button.tsx │
4307
+ │ │ │ └─ Input.tsx │
4308
+ │ │ ├─ utils/ │
4309
+ │ │ │ └─ helpers.ts │
4310
+ │ │ └─ index.ts │
4311
+ │ └─ package.json
4312
+
4313
+ │ ├─ Starting server...
4314
+ │ │ ├─ ✓ Port 3000 opened
4315
+ │ │ ├─ ✓ Database connected
4316
+ │ │ └─ ✓ Routes loaded
4317
+ │ └─ ✓ Server ready
4318
+
4319
+ │ // Git-style Branch Visualization
4320
+ │ * main
4321
+ │ ├─* feature/login
4322
+ │ │ └─* fix/auth-bug
4323
+ │ └─* feature/dashboard
4324
+
4325
+ │ Project Config
4326
+ │ ├─ Development
4327
+ │ │ ├─ port: 3000
4328
+ │ │ └─ debug: true
4329
+ │ ├─ Production
4330
+ │ │ ├─ port: 8080
4331
+ │ │ └─ debug: false
4332
+ │ └─ Testing
4333
+ │ └─ coverage: 80%
4334
+
4335
+ │ // Activity Timeline
4336
+ │ 2024-12-07
4337
+ │ ├─ 09:00 │ Started project
4338
+ │ ├─ 10:30 │ Fixed bug #123
4339
+ │ ├─ 12:00 │ ──── Lunch Break ────
4340
+ │ ├─ 14:00 │ Deployed to staging
4341
+ │ └─ 16:00 │ Code review completed
4342
+
4343
+ │ // Connection Diagrams
4344
+ │ Client ──→ API Gateway ──→ Microservice A
4345
+ │ └──→ Microservice B
4346
+ │ └──→ Database
4347
+ ├───────────────────────────────────────────────────────────────────────────────────────────────────────────┤
4348
+ │ BLOCKS │
4349
+ │ ‖ ────────────────────────────────────────────────────────────── double vertical line │
4350
+ │ ▀ ────────────────────────────────────────────────────────────── upper half block │
4351
+ │ ▄ ────────────────────────────────────────────────────────────── lower half block │
4352
+ │ █ ────────────────────────────────────────────────────────────── full block │
4353
+ │ ░ ────────────────────────────────────────────────────────────── light shade │
4354
+ │ ▒ ────────────────────────────────────────────────────────────── medium shade │
4355
+ │ ▓ ────────────────────────────────────────────────────────────── dark shade │
4356
+ │ ▌ ────────────────────────────────────────────────────────────── left half block │
4357
+ │ ▐ ────────────────────────────────────────────────────────────── right half block │
4358
+ │ ■ ────────────────────────────────────────────────────────────── black square │
4359
+ │ │
4360
+ │ █ ────────────────────────────────────────────────────────────── Full block │
4361
+ │ ▉ ───────────────────────────────────────────────────────────── 7/8 block │
4362
+ │ ▊ ───────────────────────────────────────────────────────────── 3/4 block │
4363
+ │ ▋ ───────────────────────────────────────────────────────────── 5/8 block │
4364
+ │ ▌ ────────────────────────────────────────────────────────────── 1/2 block (left half) │
4365
+ │ ▍ ───────────────────────────────────────────────────────────── 3/8 block │
4366
+ │ ▎ ───────────────────────────────────────────────────────────── 1/4 block │
4367
+ │ ▏ ───────────────────────────────────────────────────────────── 1/8 block │
4368
+ │ ────────────────────────────────────────────────────────────── Empty │
4369
+ │ │
4370
+ │ █ ▉ ▊ ▋ ▌ ▍ ▎ ▏ ──────────────────────────── Full to thin blocks (right side) │
4371
+ │ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ─────────────────────────────── Vertical progress segments │
4372
+ │ ▏ ───────────────────────────────────────────────────────────── left 1/8 block │
4373
+ │ ▎ ───────────────────────────────────────────────────────────── left 1/4 block │
4374
+ │ ▍ ───────────────────────────────────────────────────────────── left 3/8 block │
4375
+ │ ▌ ────────────────────────────────────────────────────────────── left 1/2 block │
4376
+ │ ▋ ───────────────────────────────────────────────────────────── left 5/8 block │
4377
+ │ ▊ ───────────────────────────────────────────────────────────── left 3/4 block │
4378
+ │ ▉ ───────────────────────────────────────────────────────────── left 7/8 block │
4379
+ │ ▇ ───────────────────────────────────────────────────────────── lower 7/8 block │
4380
+ │ ▆ ───────────────────────────────────────────────────────────── lower 3/4 block │
4381
+ │ ▅ ───────────────────────────────────────────────────────────── lower 5/8 block │
4382
+ │ ▄ ────────────────────────────────────────────────────────────── lower 1/2 block │
4383
+ │ ▃ ───────────────────────────────────────────────────────────── lower 3/8 block │
4384
+ │ ▂ ───────────────────────────────────────────────────────────── lower 1/4 block │
4385
+ │ ────────────────────────────────────────────────────────────── lower 1/8 block │
4386
+ │ │
4387
+ │ █ ────────────────────────────────────────────────────────────── Full block │
4388
+ │ ▇ ───────────────────────────────────────────────────────────── 7/8 block (right side missing) │
4389
+ │ ▆ ───────────────────────────────────────────────────────────── 3/4 block │
4390
+ │ ▅ ───────────────────────────────────────────────────────────── 5/8 block │
4391
+ │ ▄ ────────────────────────────────────────────────────────────── 1/2 block (bottom half) │
4392
+ │ ▃ ───────────────────────────────────────────────────────────── 3/8 block │
4393
+ │ ▂ ───────────────────────────────────────────────────────────── 1/4 block │
4394
+ │ ▁ ───────────────────────────────────────────────────────────── 1/8 block │
4395
+ │ ────────────────────────────────────────────────────────────── Empty │
4396
+ │ ◐ │
4397
+ │ ◓ │
4398
+ │ ◑ │
4399
+ │ ◒ │
4400
+ │ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ──────────────────────────────── 8-level vertical fill │
4401
+ ├───────────────────────────────────────────────────────────────────────────────────────────────────────────┤
4402
+ │ ARROWS │
4403
+ │ → ───────────────────────────────────────────────────────────── right arrow │
4404
+ │ ← ───────────────────────────────────────────────────────────── left arrow │
4405
+ │ ↑ ───────────────────────────────────────────────────────────── up arrow │
4406
+ │ ↓ ───────────────────────────────────────────────────────────── down arrow │
4407
+ │ ⇒ ───────────────────────────────────────────────────────────── right double arrow │
4408
+ │ ⇐ ───────────────────────────────────────────────────────────── left double arrow │
4409
+ │ ↔ ↕ ────────────────────────────────────────────────────────── Left-right, up-down │
4410
+ │ ↖ ↗ ↘ ↙ ───────────────────────────────────────────────── Diagonal arrows │
4411
+ │ ⇄ ⇅ ───────────────────────────────────────────────────────── Double arrows with bars │
4412
+ │ ⇆ ⇅ ───────────────────────────────────────────────────────── Two-headed arrows │
4413
+ │ ↻ ↺ ───────────────────────────────────────────────────────── Clockwise/counterclockwise │
4414
+ │ ⟳ ⟲ ──────────────────────────────────────────────────────── More circular arrows │
4415
+ │ ⤴ ⤵ ───────────────────────────────────────────────────────── Curved arrows │
4416
+ │ ⇢ ⇠ ───────────────────────────────────────────────────────── Dashed arrows │
4417
+ │ ➔ ➙ ➜ ➞ ─────────────────────────────────────────────── Various right arrows │
4418
+ │ ⮕ ⮐ ⮑ ⮒ ⮓ ─────────────────────────────────────────── Heavy arrows │
4419
+ │ ⇨ ⇦ ⇧ ⇩ ────────────────────────────────────────────────── Dashed arrows │
4420
+ │ ⤶ ⤷ ─────────────────────────────────────────────────────────── Return arrows │
4421
+ │ ⬆ ⬇ ⬅ ➡ ────────────────────────────────────────────────── Emoji-style arrows (bold) │
4422
+ │ →
4423
+ │ ➔ ➜ ➞ ➡ ⇒ ⟹
4424
+ │ ←
4425
+ │ ⬅ ⇐ ⟸
4426
+ │ ↑
4427
+ │ ⬆ ⇑
4428
+ │ ↓
4429
+ │ ⬇ ⇓
4430
+ ├───────────────────────────────────────────────────────────────────────────────────────────────────────────┤
4431
+ │ THINGS │
4432
+ │ [ ] ───────────────────────────────────────────────────────────── checkbox off │
4433
+ │ [x] ───────────────────────────────────────────────────────────── checkbox on │
4434
+ │ [✓] ───────────────────────────────────────────────────────────── checkbox on │
4435
+ │ ( ) ───────────────────────────────────────────────────────────── checkbox off │
4436
+ │ (●) ───────────────────────────────────────────────────────────── checkbox off │
4437
+ │ ≈ ≠ ≤ ≥ ± ∞ √ ∫ ∑ ∏ ∂ ∇ ─────────────────── Math symbols │
4438
+ │ μ θ π σ Ω ──────────────────────────────────────────────── Greek letters │
4439
+ │ ℃ ℉ ° ─────────────────────────────────────────────────────── Temperature │
4440
+ │ ‰ ‱ ─────────────────────────────────────────────────────────── Per mille/ten thousand │
4441
+ │ ℅ № ───────────────────────────────────────────────────────────── Care of, numero │
4442
+ │ ⁰ ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ──────────────────────────────────────────────── Superscripts │
4443
+ │ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ──────────────────────────────────────────────── Subscripts │
4444
+ │ ⁺ ⁻ ⁼ ⁽ ⁾ ⁿ ────────────────────────────────────────────────── Superscript operators │
4445
+ │ ₊ ₋ ₌ ₍ ₎ ────────────────────────────────────────────────── Subscript operators │
4446
+ │ ½ ⅓ ⅔ ¼ ¾ ⅕ ⅖ ⅗ ⅘ ⅙ ⅚ ⅛ ⅜ ⅝ ⅞ │
4447
+ │ ※ ──────────────────────────────────────────────────────────────── reference mark │
4448
+ │ ‣ ───────────────────────────────────────────────────────────────── triangular bullet │
4449
+ │ ⁃ ───────────────────────────────────────────────────────────────── hyphen bullet │
4450
+ │ ⁌ ───────────────────────────────────────────────────────────────── end of proof │
4451
+ │ ∴ ───────────────────────────────────────────────────────────────── therefore │
4452
+ │ ∵ ───────────────────────────────────────────────────────────────── because │
4453
+ │ ∎ ───────────────────────────────────────────────────────────────── end of proof (solid) │
4454
+ │ ⊕ ⊗ ⊙ ─────────────────────────────────────────────────────── circled operators │
4455
+ │ ⦿ ───────────────────────────────────────────────────────────────── circled bullet │
4456
+ │ ⦾ ───────────────────────────────────────────────────────────────── white circled bullet │
4457
+ │ ◎ ───────────────────────────────────────────────────────────────── bullseye │
4458
+ │ ⊚ ───────────────────────────────────────────────────────────────── circled ring operator │
4459
+ │ ◉ ───────────────────────────────────────────────────────────────── fisheye │
4460
+ │ ⊢ ⊣ ⊤ ⊥ ───────────────────────────────────────────────────── logical symbols │
4461
+ │ – ────────────────────────────────────────────────────────────────── en dash │
4462
+ │ — ────────────────────────────────────────────────────────────────── em dash │
4463
+ │ ‐ ────────────────────────────────────────────────────────────────── hyphen │
4464
+ │ ‑ ────────────────────────────────────────────────────────────────── non-breaking hyphen │
4465
+ │ ────────────────────────────────────────────────────────────────── em space │
4466
+ │ ────────────────────────────────────────────────────────────────── en space │
4467
+ │ " " ───────────────────────────────────────────────────────────── Smart quotes │
4468
+ │ ‚ „ ────────────────────────────────────────────────────────────── Low quotes │
4469
+ │ ‹ › ────────────────────────────────────────────────────────────── Single angle quotes │
4470
+ │ ▪ ────────────────────────────────────────────────────────────────── white square │
4471
+ │ □ ────────────────────────────────────────────────────────────────── small black square │
4472
+ │ ▫ ────────────────────────────────────────────────────────────────── small white square │
4473
+ │ ☐ ───────────────────────────────────────────────────────────────── Ballot box │
4474
+ │ ☑ ───────────────────────────────────────────────────────────────── Ballot box with check │
4475
+ │ ☒ ───────────────────────────────────────────────────────────────── Ballot box with X │
4476
+ │ ⭘ ───────────────────────────────────────────────────────────────── Hollow circle │
4477
+ │ ⭕ ───────────────────────────────────────────────────────────────── Heavy circle │
4478
+ │ ⏺ ────────────────────────────────────────────────────────────────── Record/radio button filled │
4479
+ │ ⏹ ────────────────────────────────────────────────────────────────── Stop/square │
4480
+ │ ⏸ ────────────────────────────────────────────────────────────────── Pause │
4481
+ │ ▶ ────────────────────────────────────────────────────────────────── Play │
4482
+ │ ⏭ ────────────────────────────────────────────────────────────────── Next │
4483
+ │ ⏮ ────────────────────────────────────────────────────────────────── Previous │
4484
+ │ ⚑ ────────────────────────────────────────────────────────────────── flag │
4485
+ │ ⚐ ────────────────────────────────────────────────────────────────── hollow flag │
4486
+ │ ⛿ ───────────────────────────────────────────────────────────────── power button │
4487
+ │ ⏻ ⏼ ⭘ ────────────────────────────────────────────────────────── Power symbols │
4488
+ │ ∅ ────────────────────────────────────────────────────────────────── empty set │
4489
+ │ ◯ ────────────────────────────────────────────────────────────────── empty circle (radio off) │
4490
+ │ ◉ ────────────────────────────────────────────────────────────────── fish eye (radio on) │
4491
+ │ 🔘 ───────────────────────────────────────────────────────────────── radio button │
4492
+ │ 🌳 ───────────────────────────────────────────────────────────────── root │
4493
+ │ 📁 ───────────────────────────────────────────────────────────────── directory │
4494
+ │ 📄 ────────────────────────────────────────────────────────────────── file │
4495
+ │ 实践 ──────────────────────────────────────────────────────────────── placeholder │
4496
+ │ 末 │
4497
+ │ ⚡ ───────────────────────────────────────────────────────────────── lightning bolt │
4498
+ │ ℹ ────────────────────────────────────────────────────────────────── information source │
4499
+ │ ⚠ ────────────────────────────────────────────────────────────────── warning sign │
4500
+ │ 📋 ───────────────────────────────────────────────────────────────── clipboard (for copy actions) │
4501
+ │ 🔍 ───────────────────────────────────────────────────────────────── magnifying glass (for search) │
4502
+ │ ⚙ ────────────────────────────────────────────────────────────────── gear (for settings) │
4503
+ │ ✨ ───────────────────────────────────────────────────────────────── sparkles (for AI or Premium) │
4504
+ │ 🔔 ───────────────────────────────────────────────────────────────── bell (for notifications) │
4505
+ │ 📁 ───────────────────────────────────────────────────────────────── folder │
4506
+ │ 📂 ───────────────────────────────────────────────────────────────── open folder │
4507
+ │ ⏳ ⌛ ───────────────────────────────────────────────────────────── Hourglasses │
4508
+ │ ⚫ ⚪ ──────────────────────────────────────────────────────────── Large black/white circles │
4509
+ │ ⬤ ○ ────────────────────────────────────────────────────────────── Large filled/hollow circles │
4510
+ │ ◼ ◻ ───────────────────────────────────────────────────────────── Medium squares │
4511
+ │ ⬛ ⬜ ─────────────────────────────────────────────────────────── Large squares │
4512
+ │ 🔶 🔷 🔸 🔹 ───────────────────────────────────────────────── Diamond shapes │
4513
+ │ 🟢 🟡 🟠 🔴 ──────────────────────────────────────────────── Colored circles │
4514
+ │ ✅ ❌ ⭕ ❎ ──────────────────────────────────────────────── Modern check/X │
4515
+ │ 🔒 🔓 🔑 ────────────────────────────────────────────────────── Lock/unlock │
4516
+ │ 📊 📈 📉 ────────────────────────────────────────────────────── Charts │
4517
+ │ ⌗ ───────────────────────────────────────────────────────────────── hash/tag symbol │
4518
+ │ № ───────────────────────────────────────────────────────────────── numero (already have) │
4519
+ │ ℻ ───────────────────────────────────────────────────────────────── fax symbol │
4520
+ │ ⌘ ───────────────────────────────────────────────────────────────── command key (Mac) │
4521
+ │ ⎇ ───────────────────────────────────────────────────────────────── alternative key │
4522
+ │ ⇧ ───────────────────────────────────────────────────────────────── shift │
4523
+ │ ⇪ ───────────────────────────────────────────────────────────────── caps lock │
4524
+ │ ⌥ ───────────────────────────────────────────────────────────────── option key │
4525
+ ├───────────────────────────────────────────────────────────────────────────────────────────────────────────┤
4526
+ │ SPACE │
4527
+ │ ' ' ───────────────────────────────────────────────────────────── Narrow no-break space (thin space) │
4528
+ │ ' ' ───────────────────────────────────────────────────────────── Thin space │
4529
+ │ ' ' ───────────────────────────────────────────────────────────── Hair space │
4530
+ │ '​' ────────────────────────────────────────────────────────────── Zero-width space │
4531
+ │ '‌' ────────────────────────────────────────────────────────────── Zero-width non-joiner │
4532
+ │ '‍' ────────────────────────────────────────────────────────────── Zero-width joiner │
4533
+ │ '︎' ────────────────────────────────────────────────────────────── Variation selector-15 (text style) │
4534
+ │ '️' ────────────────────────────────────────────────────────────── Variation selector-16 (emoji style) │
4535
+ ├───────────────────────────────────────────────────────────────────────────────────────────────────────────┤
4536
+ │ TRIANGLE │
4537
+ │ ▲ ────────────────────────────────────────────────────────────── black up-pointing triangle │
4538
+ │ ▼ ────────────────────────────────────────────────────────────── black down-pointing triangle │
4539
+ │ ◀ ───────────────────────────────────────────────────────────── black left-pointing triangle │
4540
+ │ ▶ ───────────────────────────────────────────────────────────── black right-pointing triangle │
4541
+ │ △ ───────────────────────────────────────────────────────────── white up-pointing triangle │
4542
+ │ ▽ ───────────────────────────────────────────────────────────── white down-pointing triangle │
4543
+ │ ◁ ───────────────────────────────────────────────────────────── white left-pointing triangle │
4544
+ │ ▷ ───────────────────────────────────────────────────────────── white right-pointing triangle │
4545
+ │ ◣ ───────────────────────────────────────────────────────────── lower left triangle │
4546
+ │ ◢ ───────────────────────────────────────────────────────────── lower right triangle │
4547
+ │ ◤ ───────────────────────────────────────────────────────────── upper left triangle │
4548
+ │ ◥ ───────────────────────────────────────────────────────────── upper right triangle │
4549
+ │ » ────────────────────────────────────────────────────────────── right-pointing double angle quotation │
4550
+ │ « ────────────────────────────────────────────────────────────── left-pointing double angle quotation │
4551
+ │ 〉 ───────────────────────────────────────────────────────────── single right-pointing angle bracket │
4552
+ │ 〈 ───────────────────────────────────────────────────────────── single left-pointing angle bracket │
4553
+ ├───────────────────────────────────────────────────────────────────────────────────────────────────────────┤
4554
+ │ SPINNERS │
4555
+ │ ◴ ◵ ◶ ◷ ───────────────────────────────────────────────────────────── Pie chart quarters │
4556
+ │ ◐ ◑ ◒ ◓ ───────────────────────────────────────────────────────────── Spinners │
4557
+ │ │
4558
+ │ // Create a smooth 0-100% progress bar (width=10) │
4559
+ │ function createProgressBar(percent, width = 10) { │
4560
+ │ const fullBlocks = Math.floor(percent / 100 * width); │
4561
+ │ const partialIndex = Math.round((percent / 100 * width - fullBlocks) * 8); │
4562
+ │ const partialChars = [' ', '▏', '▎', '▍', '▌', '▋', '▊', '▉', '█']; │
4563
+ │ │
4564
+ │ return '█'.repeat(fullBlocks) + │
4565
+ │ partialChars[partialIndex] + │
4566
+ │ ' '.repeat(width - fullBlocks - 1); │
4567
+ │ } │
4568
+ │ │
4569
+ │ // Or using left/right halves: │
4570
+ │ function createSmoothBar(percent, width = 20) { │
4571
+ │ const barLength = percent / 100 * width * 2; // Double resolution │
4572
+ │ const full = Math.floor(barLength / 2); │
4573
+ │ const half = barLength % 2; │
4574
+ │ │
4575
+ │ return '█'.repeat(full) + (half ? '▌' : '') + ' '.repeat(width - full - half); │
4576
+ │ } │
4577
+ ├───────────────────────────────────────────────────────────────────────────────────────────────────────────┤
4578
+ │ PROGRESS │
4579
+ │ │
4580
+ │ │
4581
+ │ ████████████░░░░░░░░ 60% │
4582
+ │ ━━━━━━━━━━━━━━━━━━━━ 100% │
4583
+ │ │
4584
+ ├───────────────────────────────────────────────────────────────────────────────────────────────────────────┤
4585
+ │ MENUS │
4586
+ │ ╭────────────────────────────────────────────────────────────────────────────╮ │
4587
+ │ │ CATALYST UI · INSTALL AND CONFIGURE │ │
4588
+ │ ├────────────────────────────────────────────────────────────────────────────┤ │
4589
+ │ │ Select a installation option: │ │
4590
+ │ │ 1) Copy source files │ │
4591
+ │ │ 2) Copy for dist │ │
4592
+ │ │ 3) Copy free components │ │
4593
+ │ │ 4) Update libs │ │
4594
+ │ │ 5) Copy config files │ │
4595
+ │ │ 6) Build CLI │ │
4596
+ │ ╰────────────────────────────────────────────────────────────────────────────╯ │
4597
+ │ │
4598
+ │ ╭────────────────────────────────────────────────────────────────────────────╮ │
4599
+ │ │ BUILD COMPLETE — Duration: 1m 6s │ │
4600
+ │ ╰────────────────────────────────────────────────────────────────────────────╯ │
4601
+ │ │
4602
+ │ ┌─────────┬──────────┬─────────┐ │
4603
+ │ │ Name │ Status │ Progress│ │
4604
+ │ ├─────────┼──────────┼─────────┤ │
4605
+ │ │ Task 1 │ Done │ ███████ │ │
4606
+ │ │ Task 2 │ Running │ ████░░░ │ │
4607
+ │ └─────────┴──────────┴─────────┘ │
4608
+ │ │
4609
+ │ ╔════════════════════════════════╗ │
4610
+ │ ║ System Status Dashboard ║ │
4611
+ │ ╠════════════════════════════════╣ │
4612
+ │ ║ CPU Usage: ████████░░ 80% ║ │
4613
+ │ ║ Memory: ██████░░░░ 60% ║ │
4614
+ │ ║ Disk: ████░░░░░░ 40% ║ │
4615
+ │ ╚════════════════════════════════╝ │
4616
+ │ │
4617
+ │ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ │
4618
+ │ ┃ function hello() { ┃ │
4619
+ │ ┃ console.log("Hello World");┃ │
4620
+ │ ┃ } ┃ │
4621
+ │ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │
4622
+ │ │
4623
+ │ ╭───────────────────╮ │
4624
+ │ │ • File │ │
4625
+ │ │ • Edit │ │
4626
+ │ │ • View │ │
4627
+ │ │ ▶ Tools │ │
4628
+ │ │ ├─ Options │ │
4629
+ │ │ ├─ Settings │ │
4630
+ │ │ └─ Preferences │ │
4631
+ │ ╰───────────────────╯ │
4632
+ │ │
4633
+ │ ┌ Build Status ──────────────┐ │
4634
+ │ │ ● Backend: Running │ │
4635
+ │ │ ● Frontend: Running │ │
4636
+ │ │ ○ Database: Stopped │ │
4637
+ │ └────────────────────────────┘ │
4638
+ │ │
4639
+ │ ╔═══════════════════════════╗ │
4640
+ │ ║ ⚠️ WARNING ║ │
4641
+ │ ║ Database connection lost ║ │
4642
+ │ ║ Retrying in 5 seconds... ║ │
4643
+ │ ╚═══════════════════════════╝ │
4644
+ │ │
4645
+ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
4646
+ │ TESTS PASSED ✓ │
4647
+ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
4648
+ │ │
4649
+ │ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
4650
+ │ │ CATALYST UI ★ BUILD │ │
4651
+ │ ├───────────────────────────────────────────────────────────────────────────────────────────────────────┤ │
4652
+ │ ├───────────────────────────────────────────────────────────────────────────────────────────────────────┤ │
4653
+ │ │ STEP 1A: COPYING SOURCE FILES │ │
4654
+ │ │ ✔ Copied source files except data/, pages/, and blocks/ │ │
4655
+ │ │ ✔ Cleaned data.tsx │ │
4656
+ │ │ ✔ Cleaned 34 data files with relative imports │ │
4657
+ │ ├───────────────────────────────────────────────────────────────────────────────────────────────────────┤ │
4658
+ │ │ STEP 1B: PREPPING DIST FILES │ │
4659
+ │ │ ✔ Copied source files except data/, pages/, and blocks/ │ │
4660
+ │ │ ✔ Cleaned data.tsx with package-relative imports │ │
4661
+ │ │ ✔ Cleaned 34 data files with package-relative imports for dist │ │
4662
+ │ ├───────────────────────────────────────────────────────────────────────────────────────────────────────┤ │
4663
+ │ │ STEP 2: EXTRACTING COMPONENTS │ │
4664
+ │ │ ✔ Found 143 free components out of 1462 total │ │
4665
+ │ │ ⚠ Source not found: faq │ │
4666
+ │ │ ↳ Path: /components/catalyst-ui/core/data-display/faq.tsx │ │
4667
+ │ │ ✗ Failed to copy faq: fullPath is not defined │ │
4668
+ │ │ ⚠ Source not found: panel │ │
4669
+ │ │ ↳ Path: /components/catalyst-ui/core/layout/panel.tsx │ │
4670
+ │ │ ✗ Failed to copy panel: fullPath is not defined │ │
4671
+ │ │ ⚠ Source not found: Fieldset │ │
4672
+ │ │ ↳ Path: /components/catalyst-ui/components/fieldset.tsx │ │
4673
+ │ │ ✗ Failed to copy Fieldset: fullPath is not defined │ │
4674
+ │ │ ⚠ Source not found: Forms │ │
4675
+ │ │ ↳ Path: /components/catalyst-ui/forms/form.tsx │ │
4676
+ │ │ ✗ Failed to copy Forms: fullPath is not defined │ │
4677
+ │ │ ⚠ Source not found: Iframe │ │
4678
+ │ │ ↳ Path: /components/catalyst-ui/core/components/iframe.tsx │ │
4679
+ │ │ ✗ Failed to copy Iframe: fullPath is not defined │ │
4680
+ │ │ ⚠ Source not found: Dual Sidebar Agnostic │ │
4681
+ │ │ ↳ Path: /components/catalyst-ui/components/overlay/dual-sidebar-agnostic.tsx │ │
4682
+ │ │ ✗ Failed to copy Dual Sidebar Agnostic: fullPath is not defined │ │
4683
+ │ │ ⚠ Source not found: For │ │
4684
+ │ │ ↳ Path: /components/catalyst-ui/primitives/for.tsx │ │
4685
+ │ │ ✗ Failed to copy For: fullPath is not defined │ │
4686
+ │ │ ✔ Copied 115 component files │ │
4687
+ │ │ ⚠ Skipped 14 files (not found or error) │ │
4688
+ │ ├───────────────────────────────────────────────────────────────────────────────────────────────────────┤ │
4689
+ │ │ STEP 3: MAPPING LIBRARIES │ │
4690
+ │ │ ✔ Free dependencies: 144 │ │
4691
+ │ │ ✔ All dependencies: 199 │ │
4692
+ │ ├───────────────────────────────────────────────────────────────────────────────────────────────────────┤ │
4693
+ │ │ STEP 4: SYNCING CONFIGS │ │
4694
+ │ │ ✔ Copied tailwind.config.ngin.ts to both locations │ │
4695
+ │ │ ✔ Copied postcss.config.js to both locations │ │
4696
+ │ │ ✔ Copied tailwind.css to both locations │ │
4697
+ │ │ ✔ Created standard tailwind.config.js in both locations │ │
4698
+ │ ├───────────────────────────────────────────────────────────────────────────────────────────────────────┤ │
4699
+ │ │ STEP 5: BUILDING CLI │ │
4700
+ │ │ ✔ CLI built successfully │ │
4701
+ │ ├───────────────────────────────────────────────────────────────────────────────────────────────────────┤ │
4702
+ │ │ ★ BUILD COMPLETE IN 21.09s ★ │ │
4703
+ │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
4704
+ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────╯
3936
4705
 
3937
4706
  \`\`\`
3938
4707
  `,
3939
- fileTree: `\`\`\`sh
3940
- // File Tree Visualizer
3941
- ┌─ src/
3942
- │ ├─ components/
3943
- │ │ ├─ Button.tsx
3944
- │ │ └─ Input.tsx
3945
- │ ├─ utils/
3946
- │ │ └─ helpers.ts
3947
- │ └─ index.ts
3948
- └─ package.json
3949
- \`\`\`
3950
- `,
4708
+
3951
4709
  fileTreeWithClickableLinks: `\`\`\`sh
3952
4710
  <pre style="max-width: 800px; white-space: pre-wrap; overflow-wrap: break-word;">
3953
4711
  / DEVSTACK_SYSTEM_ROOT/
@@ -4026,134 +4784,6 @@ function printErrorBox(message: string) {
4026
4784
 
4027
4785
  </pre>
4028
4786
 
4029
- \`\`\`
4030
- `,
4031
- progress: `\`\`\`sh
4032
- // Progress Bars
4033
- ████████████░░░░░░░░ 60%
4034
- ━━━━━━━━━━━━━━━━━━━━ 100%
4035
- \`\`\`
4036
- `,
4037
- asciiTables: `\`\`\`sh
4038
- // Tables
4039
- ┌─────────┬──────────┬─────────┐
4040
- │ Name │ Status │ Progress│
4041
- ├─────────┼──────────┼─────────┤
4042
- │ Task 1 │ Done │ ███████ │
4043
- │ Task 2 │ Running │ ████░░░ │
4044
- └─────────┴──────────┴─────────┘
4045
- \`\`\`
4046
- `,
4047
- spinners: `\`\`\`sh
4048
- // Loading Spinners
4049
- ⠋ Loading...
4050
- ⠙ Processing...
4051
- ⠹ Working...
4052
- \`\`\`
4053
- `,
4054
- dashboards: `\`\`\`sh
4055
- // Dashboards
4056
- ╔════════════════════════════════╗
4057
- ║ System Status Dashboard ║
4058
- ╠════════════════════════════════╣
4059
- ║ CPU Usage: ████████░░ 80% ║
4060
- ║ Memory: ██████░░░░ 60% ║
4061
- ║ Disk: ████░░░░░░ 40% ║
4062
- ╚════════════════════════════════╝
4063
- \`\`\`
4064
- `,
4065
- codeBlockPreviews: `\`\`\`sh
4066
- // Code Block Previews
4067
- ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
4068
- ┃ function hello() { ┃
4069
- ┃ console.log("Hello World");┃
4070
- ┃ } ┃
4071
- ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
4072
- \`\`\`
4073
- `,
4074
- menu: `\`\`\`sh
4075
- // Menu Systems
4076
- ╭───────────────────╮
4077
- │ • File │
4078
- │ • Edit │
4079
- │ • View │
4080
- │ ▶ Tools │
4081
- │ ├─ Options │
4082
- │ ├─ Settings │
4083
- │ └─ Preferences │
4084
- ╰───────────────────╯
4085
- \`\`\`
4086
- `,
4087
- logs: `\`\`\`sh
4088
- // Terminal Logs with Hierarchy
4089
- ├─ Starting server...
4090
- │ ├─ ✓ Port 3000 opened
4091
- │ ├─ ✓ Database connected
4092
- │ └─ ✓ Routes loaded
4093
- └─ ✓ Server ready
4094
- \`\`\`
4095
- `,
4096
- branchVis: `\`\`\`sh
4097
- // Git-style Branch Visualization
4098
- * main
4099
- ├─* feature/login
4100
- │ └─* fix/auth-bug
4101
- └─* feature/dashboard
4102
- \`\`\`
4103
- `,
4104
- status: `\`\`\`sh
4105
- // Status Indicators
4106
- ┌ Build Status ──────────────┐
4107
- │ ● Backend: Running │
4108
- │ ● Frontend: Running │
4109
- │ ○ Database: Stopped │
4110
- └────────────────────────────┘
4111
- \`\`\`
4112
- `,
4113
- notification: `\`\`\`sh
4114
- // Notification Boxes
4115
- ╔═══════════════════════════╗
4116
- ║ ⚠️ WARNING ║
4117
- ║ Database connection lost ║
4118
- ║ Retrying in 5 seconds... ║
4119
- ╚═══════════════════════════╝
4120
- \`\`\`
4121
- `,
4122
- separators: `\`\`\`sh
4123
- // Command Output Separators
4124
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━
4125
- TESTS PASSED ✓
4126
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━
4127
- \`\`\`
4128
- `,
4129
- nestedData: `\`\`\`sh
4130
- // Nested Data Structures
4131
- Project Config
4132
- ├─ Development
4133
- │ ├─ port: 3000
4134
- │ └─ debug: true
4135
- ├─ Production
4136
- │ ├─ port: 8080
4137
- │ └─ debug: false
4138
- └─ Testing
4139
- └─ coverage: 80%
4140
- \`\`\`
4141
- `,
4142
- activity: `\`\`\`sh
4143
- // Activity Timeline
4144
- 2024-12-07
4145
- ├─ 09:00 │ Started project
4146
- ├─ 10:30 │ Fixed bug #123
4147
- ├─ 12:00 │ ──── Lunch Break ────
4148
- ├─ 14:00 │ Deployed to staging
4149
- └─ 16:00 │ Code review completed
4150
- \`\`\`
4151
- `,
4152
- conDiagrams: `\`\`\`sh
4153
- // Connection Diagrams
4154
- Client ──→ API Gateway ──→ Microservice A
4155
- └──→ Microservice B
4156
- └──→ Database
4157
4787
  \`\`\`
4158
4788
  `,
4159
4789
  basicSpin: `\`\`\`javascript
@@ -4186,28 +4816,6 @@ const spinner = ora({frames: ['⣷', '⣯', '⣟', '⡿', '⢿', '⣻', '⣽', '
4186
4816
  return false;
4187
4817
  }
4188
4818
 
4189
- `,
4190
-
4191
- diffSpins: `\`\`\`javascript
4192
- export const spinners = {
4193
- dots: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'],
4194
- line: ['|', '/', '-', '\\'],
4195
- arrow: ['←', '↖', '↑', '↗', '→', '↘', '↓', '↙'],
4196
- bounce: ['⠁', '⠂', '⠄', '⠂'],
4197
- box: ['◰', '◳', '◲', '◱'],
4198
- circle: ['◐', '◓', '◑', '◒'],
4199
- square: ['◰', '◳', '◲', '◱'],
4200
- arrows: ['▹▹▹▹▹', '▸▹▹▹▹', '▹▸▹▹▹', '▹▹▸▹▹', '▹▹▹▸▹', '▹▹▹▹▸'],
4201
- growing: ['▁', '▃', '▄', '▅', '▆', '▇', '█', '▇', '▆', '▅', '▄', '▃'],
4202
- moon: ['🌑', '🌒', '🌓', '🌔', '🌕', '🌖', '🌗', '🌘'],
4203
- earth: ['🌍', '🌎', '🌏'],
4204
- clock: ['🕐', '🕑', '🕒', '🕓', '🕔', '🕕', '🕖', '🕗', '🕘', '🕙', '🕚', '🕛'],
4205
- braille: ['⣾', '⣽', '⣻', '⢿', '⡿', '⣟', '⣯', '⣷'],
4206
- dots2: ['⣷', '⣯', '⣟', '⡿', '⢿', '⣻', '⣽', '⣾'],
4207
- pulse: ['∙∙∙', '●∙∙', '∙●∙', '∙∙●', '∙∙∙'],
4208
- weather: ['☀️ ', '☀️ ', '⛅ ', '🌤 ', '⛅ ', '🌥 ', '☁️ ', '🌧 ', '⛈ ', '🌩 ', '🌧 '],
4209
- };
4210
- \`\`\`
4211
4819
  `,
4212
4820
  spinnerclass: `\`\`\`javascript
4213
4821
  export class Spinner {
@@ -4352,10 +4960,6 @@ Normal markdown text.
4352
4960
  `,
4353
4961
  order66: `\`\`\`javascript
4354
4962
 
4355
- \`\`\`
4356
- `,
4357
- three: `\`\`\`javascript
4358
-
4359
4963
  \`\`\`
4360
4964
  `,
4361
4965
  }