@shell-shock/plugin-banner 0.1.14 → 0.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -27,7 +27,7 @@ This package is part of the ⚡<b>Shell Shock</b> monorepo. The Shell Shock pack
27
27
 
28
28
  <h3 align="center">💻 Visit <a href="https://stormsoftware.com" target="_blank">stormsoftware.com</a> to stay up to date with this developer</h3><br />
29
29
 
30
- [![Version](https://img.shields.io/badge/version-0.1.8-1fb2a6.svg?style=for-the-badge&color=1fb2a6)](https://stormsoftware.com/projects/shell-shock/)&nbsp;[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?style=for-the-badge&logo=commitlint&color=1fb2a6)](http://commitizen.github.io/cz-cli/)&nbsp;![Semantic-Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=for-the-badge&color=1fb2a6)&nbsp;![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/storm-software/shell-shock/release.yml?style=for-the-badge&logo=github-actions&color=1fb2a6)
30
+ [![Version](https://img.shields.io/badge/version-0.1.14-1fb2a6.svg?style=for-the-badge&color=1fb2a6)](https://stormsoftware.com/projects/shell-shock/)&nbsp;[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?style=for-the-badge&logo=commitlint&color=1fb2a6)](http://commitizen.github.io/cz-cli/)&nbsp;![Semantic-Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=for-the-badge&color=1fb2a6)&nbsp;![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/storm-software/shell-shock/release.yml?style=for-the-badge&logo=github-actions&color=1fb2a6)
31
31
 
32
32
  <!-- prettier-ignore-start -->
33
33
  <!-- markdownlint-disable -->
@@ -7,6 +7,7 @@ let _powerlines_plugin_alloy_core_contexts_context = require("@powerlines/plugin
7
7
  let _alloy_js_typescript = require("@alloy-js/typescript");
8
8
  let _powerlines_plugin_alloy_core_components_spacing = require("@powerlines/plugin-alloy/core/components/spacing");
9
9
  let _shell_shock_plugin_theme_contexts_theme = require("@shell-shock/plugin-theme/contexts/theme");
10
+ let _stryke_type_checks_is_set_string = require("@stryke/type-checks/is-set-string");
10
11
 
11
12
  //#region src/components/banner-function-declaration.tsx
12
13
  /**
@@ -56,8 +57,6 @@ function BannerFunctionBodyDeclaration(props) {
56
57
  }
57
58
 
58
59
  useApp().set("banner", true); `,
59
- (0, _alloy_js_core_jsx_runtime.createComponent)(_powerlines_plugin_alloy_core_components_spacing.Spacing, {}),
60
- children,
61
60
  (0, _alloy_js_core_jsx_runtime.createComponent)(_powerlines_plugin_alloy_core_components_spacing.Spacing, {}),
62
61
  (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_core.Show, {
63
62
  when: insertNewlineBeforeBanner,
@@ -65,24 +64,49 @@ function BannerFunctionBodyDeclaration(props) {
65
64
  }),
66
65
  (0, _alloy_js_core_jsx_runtime.createComponent)(_powerlines_plugin_alloy_core_components_spacing.Spacing, {}),
67
66
  (0, _alloy_js_core_jsx_runtime.memo)(() => _alloy_js_core.code`
68
- writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].topLeft}") + ${theme.icons.banner.header[variant] ? `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(6)) + " " + ${theme.icons.banner.header[variant] ? `colors.text.banner.header.${variant}("${theme.icons.banner.header[variant]}") + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}") + " " +` : ""} colors.bold(colors.text.banner.header.${variant}("${header}")) + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${6 + (theme.icons.banner.header[variant] ? theme.icons.banner.header[variant].length + 3 : 0) + (header ? header.length + 2 : 0) + bannerPadding.value}, 0)))` : `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${bannerPadding.value}, 0)))`} + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].topRight}"), { consoleFn: console.${consoleFnName} });
69
-
70
- ${title ? title.split("\n").map((line) => `splitText("${line}",
71
- Math.max(process.stdout.columns - ${totalPadding.value}, 0)
72
- ).forEach((line) => {
73
- writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.bold(colors.text.banner.title.${variant}(line)) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} });
74
- }); `) : `splitText(title,
75
- Math.max(process.stdout.columns - ${totalPadding.value}, 0)
67
+ writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].topLeft}") + ${theme.icons.banner.header[variant] ? `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(6)) + " " + ${theme.icons.banner.header[variant] ? `colors.text.banner.header.${variant}("${theme.icons.banner.header[variant]}") + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}") + " " +` : ""} colors.bold(colors.text.banner.header.${variant}("${header}")) + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${6 + (theme.icons.banner.header[variant] ? theme.icons.banner.header[variant].length + 3 : 0) + (header ? header.length + 2 : 0) + bannerPadding.value}, 0)))` : `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${bannerPadding.value}, 0)))`} + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].topRight}"), { consoleFn: console.${consoleFnName} }); `),
68
+ (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_core.Show, {
69
+ when: !!children,
70
+ get fallback() {
71
+ return (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_core.Show, {
72
+ get when() {
73
+ return (0, _stryke_type_checks_is_set_string.isSetString)(title);
74
+ },
75
+ get children() {
76
+ return (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_core.For, {
77
+ get each() {
78
+ return title ? title.split("\n") : [];
79
+ },
80
+ hardline: true,
81
+ children: (line) => _alloy_js_core.code`splitText("${line}",
82
+ Math.max(process.stdout.columns - ${totalPadding.value}, 20)
76
83
  ).forEach((line) => {
77
84
  writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.bold(colors.text.banner.title.${variant}(line)) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} });
78
- });`}
79
-
80
- ${command?.title ? `${insertNewlineBeforeCommand ? `writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(process.stdout.columns - ${bannerPadding.value})) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} }); ` : ""}
81
- ${`writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi("${command.title}").length ${command.icon ? " + 3" : ""} + ${bannerPadding.value})) / 2), 0)) + colors.bold(colors.text.banner.command.${variant}("${command.icon ? `${command.icon} ` : ""}${command.title}")) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi("${command.title}").length ${command.icon ? " + 3" : ""} + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} }); `} ` : ""}
82
-
83
- splitText(
85
+ }); `
86
+ });
87
+ }
88
+ });
89
+ },
90
+ children
91
+ }),
92
+ (0, _alloy_js_core_jsx_runtime.createComponent)(_powerlines_plugin_alloy_core_components_spacing.Spacing, {}),
93
+ (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_core.Show, {
94
+ get when() {
95
+ return (0, _stryke_type_checks_is_set_string.isSetString)(command?.title) && !!command?.path;
96
+ },
97
+ get children() {
98
+ return [(0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_core.Show, {
99
+ when: insertNewlineBeforeCommand,
100
+ get children() {
101
+ return _alloy_js_core.code`writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(process.stdout.columns - ${bannerPadding.value})) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} }); `;
102
+ }
103
+ }), (0, _alloy_js_core_jsx_runtime.memo)(() => `writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi("${command?.title}").length ${command?.icon ? " + 3" : ""} + ${bannerPadding.value})) / 2), 0)) + colors.bold(colors.text.banner.command.${variant}("${command?.icon ? `${command.icon} ` : ""}${command?.title}")) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi("${command?.title}").length ${command?.icon ? " + 3" : ""} + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} }); `)];
104
+ }
105
+ }),
106
+ (0, _alloy_js_core_jsx_runtime.createComponent)(_powerlines_plugin_alloy_core_components_spacing.Spacing, {}),
107
+ (0, _alloy_js_core_jsx_runtime.memo)(() => _alloy_js_core.code`splitText(
84
108
  colors.bold(${command?.title ? "colors.text.banner.description" : "colors.text.banner.command"}.${variant}(\`${(0, _shell_shock_core_plugin_utils.formatDescription)(description)}\`)),
85
- Math.max(${command?.title ? `${totalPadding.value} * 2 > process.stdout.columns / 2 ? process.stdout.columns - 6 : process.stdout.columns - ${totalPadding.value}` : `process.stdout.columns - ${totalPadding.value}`} , 0)
109
+ Math.max(${command?.title ? `${totalPadding.value} * 2 > process.stdout.columns / 2 ? process.stdout.columns - 6 : process.stdout.columns - ${totalPadding.value}` : `process.stdout.columns - ${totalPadding.value}`} , 20)
86
110
  ).forEach((line) => {
87
111
  writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.text.banner.description.${variant}(line) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} });
88
112
  });
@@ -111,7 +135,7 @@ function BannerFunctionDeclaration(props) {
111
135
  get children() {
112
136
  return (0, _alloy_js_core_jsx_runtime.createComponent)(BannerFunctionBodyDeclaration, {
113
137
  get title() {
114
- return title.value;
138
+ return !children ? title.value : void 0;
115
139
  },
116
140
  get header() {
117
141
  return header.value;
@@ -1 +1 @@
1
- {"version":3,"file":"banner-function-declaration.d.cts","names":[],"sources":["../../src/components/banner-function-declaration.tsx"],"mappings":";;;;;UAiCiB,qCAAA;EACf,OAAA,GAAU,WAAA;EACV,QAAA,GAAW,QAAA;AAAA;;;;;;;iBASG,gCAAA,CACd,KAAA,EAAO,qCAAA,GAAqC,QAAA;AAAA,UAuB7B,kCAAA,SAA2C,8BAAA;EAC1D,KAAA;EACA,MAAA;EACA,MAAA;EACA,WAAA;EACA,0BAAA;EACA,yBAAA;EACA,6BAAA;AAAA;;AAPF;;;;;iBAgBgB,6BAAA,CACd,KAAA,EAAO,kCAAA,GAAkC,QAAA;AAAA,UA0M1B,8BAAA,SAAuC,qCAAA;EACtD,OAAA,GAAU,iBAAA;EACV,aAAA;EACA,yBAAA;AAAA;;;;AA9MF;;;iBAuNgB,yBAAA,CACd,KAAA,EAAO,8BAAA,GAA8B,QAAA"}
1
+ {"version":3,"file":"banner-function-declaration.d.cts","names":[],"sources":["../../src/components/banner-function-declaration.tsx"],"mappings":";;;;;UAkCiB,qCAAA;EACf,OAAA,GAAU,WAAA;EACV,QAAA,GAAW,QAAA;AAAA;;;;;;;iBASG,gCAAA,CACd,KAAA,EAAO,qCAAA,GAAqC,QAAA;AAAA,UAuB7B,kCAAA,SAA2C,8BAAA;EAC1D,KAAA;EACA,MAAA;EACA,MAAA;EACA,WAAA;EACA,0BAAA;EACA,yBAAA;EACA,6BAAA;AAAA;;AAPF;;;;;iBAgBgB,6BAAA,CACd,KAAA,EAAO,kCAAA,GAAkC,QAAA;AAAA,UA+L1B,8BAAA,SAAuC,qCAAA;EACtD,OAAA,GAAU,iBAAA;EACV,aAAA;EACA,yBAAA;AAAA;;;;AAnMF;;;iBA4MgB,yBAAA,CACd,KAAA,EAAO,8BAAA,GAA8B,QAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"banner-function-declaration.d.mts","names":[],"sources":["../../src/components/banner-function-declaration.tsx"],"mappings":";;;;;UAiCiB,qCAAA;EACf,OAAA,GAAU,WAAA;EACV,QAAA,GAAW,QAAA;AAAA;;;;;;;iBASG,gCAAA,CACd,KAAA,EAAO,qCAAA,GAAqC,QAAA;AAAA,UAuB7B,kCAAA,SAA2C,8BAAA;EAC1D,KAAA;EACA,MAAA;EACA,MAAA;EACA,WAAA;EACA,0BAAA;EACA,yBAAA;EACA,6BAAA;AAAA;;AAPF;;;;;iBAgBgB,6BAAA,CACd,KAAA,EAAO,kCAAA,GAAkC,QAAA;AAAA,UA0M1B,8BAAA,SAAuC,qCAAA;EACtD,OAAA,GAAU,iBAAA;EACV,aAAA;EACA,yBAAA;AAAA;;;;AA9MF;;;iBAuNgB,yBAAA,CACd,KAAA,EAAO,8BAAA,GAA8B,QAAA"}
1
+ {"version":3,"file":"banner-function-declaration.d.mts","names":[],"sources":["../../src/components/banner-function-declaration.tsx"],"mappings":";;;;;UAkCiB,qCAAA;EACf,OAAA,GAAU,WAAA;EACV,QAAA,GAAW,QAAA;AAAA;;;;;;;iBASG,gCAAA,CACd,KAAA,EAAO,qCAAA,GAAqC,QAAA;AAAA,UAuB7B,kCAAA,SAA2C,8BAAA;EAC1D,KAAA;EACA,MAAA;EACA,MAAA;EACA,WAAA;EACA,0BAAA;EACA,yBAAA;EACA,6BAAA;AAAA;;AAPF;;;;;iBAgBgB,6BAAA,CACd,KAAA,EAAO,kCAAA,GAAkC,QAAA;AAAA,UA+L1B,8BAAA,SAAuC,qCAAA;EACtD,OAAA,GAAU,iBAAA;EACV,aAAA;EACA,yBAAA;AAAA;;;;AAnMF;;;iBA4MgB,yBAAA,CACd,KAAA,EAAO,8BAAA,GAA8B,QAAA"}
@@ -1,10 +1,11 @@
1
1
  import { createComponent, memo } from "@alloy-js/core/jsx-runtime";
2
- import { Show, code, computed } from "@alloy-js/core";
2
+ import { For, Show, code, computed } from "@alloy-js/core";
3
3
  import { formatDescription, getAppDescription, getAppTitle } from "@shell-shock/core/plugin-utils";
4
4
  import { usePowerlines } from "@powerlines/plugin-alloy/core/contexts/context";
5
5
  import { FunctionDeclaration, IfStatement } from "@alloy-js/typescript";
6
6
  import { Spacing } from "@powerlines/plugin-alloy/core/components/spacing";
7
7
  import { useTheme } from "@shell-shock/plugin-theme/contexts/theme";
8
+ import { isSetString } from "@stryke/type-checks/is-set-string";
8
9
 
9
10
  //#region src/components/banner-function-declaration.tsx
10
11
  /**
@@ -54,8 +55,6 @@ function BannerFunctionBodyDeclaration(props) {
54
55
  }
55
56
 
56
57
  useApp().set("banner", true); `,
57
- createComponent(Spacing, {}),
58
- children,
59
58
  createComponent(Spacing, {}),
60
59
  createComponent(Show, {
61
60
  when: insertNewlineBeforeBanner,
@@ -63,24 +62,49 @@ function BannerFunctionBodyDeclaration(props) {
63
62
  }),
64
63
  createComponent(Spacing, {}),
65
64
  memo(() => code`
66
- writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].topLeft}") + ${theme.icons.banner.header[variant] ? `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(6)) + " " + ${theme.icons.banner.header[variant] ? `colors.text.banner.header.${variant}("${theme.icons.banner.header[variant]}") + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}") + " " +` : ""} colors.bold(colors.text.banner.header.${variant}("${header}")) + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${6 + (theme.icons.banner.header[variant] ? theme.icons.banner.header[variant].length + 3 : 0) + (header ? header.length + 2 : 0) + bannerPadding.value}, 0)))` : `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${bannerPadding.value}, 0)))`} + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].topRight}"), { consoleFn: console.${consoleFnName} });
67
-
68
- ${title ? title.split("\n").map((line) => `splitText("${line}",
69
- Math.max(process.stdout.columns - ${totalPadding.value}, 0)
70
- ).forEach((line) => {
71
- writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.bold(colors.text.banner.title.${variant}(line)) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} });
72
- }); `) : `splitText(title,
73
- Math.max(process.stdout.columns - ${totalPadding.value}, 0)
65
+ writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].topLeft}") + ${theme.icons.banner.header[variant] ? `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(6)) + " " + ${theme.icons.banner.header[variant] ? `colors.text.banner.header.${variant}("${theme.icons.banner.header[variant]}") + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}") + " " +` : ""} colors.bold(colors.text.banner.header.${variant}("${header}")) + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${6 + (theme.icons.banner.header[variant] ? theme.icons.banner.header[variant].length + 3 : 0) + (header ? header.length + 2 : 0) + bannerPadding.value}, 0)))` : `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${bannerPadding.value}, 0)))`} + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].topRight}"), { consoleFn: console.${consoleFnName} }); `),
66
+ createComponent(Show, {
67
+ when: !!children,
68
+ get fallback() {
69
+ return createComponent(Show, {
70
+ get when() {
71
+ return isSetString(title);
72
+ },
73
+ get children() {
74
+ return createComponent(For, {
75
+ get each() {
76
+ return title ? title.split("\n") : [];
77
+ },
78
+ hardline: true,
79
+ children: (line) => code`splitText("${line}",
80
+ Math.max(process.stdout.columns - ${totalPadding.value}, 20)
74
81
  ).forEach((line) => {
75
82
  writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.bold(colors.text.banner.title.${variant}(line)) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} });
76
- });`}
77
-
78
- ${command?.title ? `${insertNewlineBeforeCommand ? `writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(process.stdout.columns - ${bannerPadding.value})) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} }); ` : ""}
79
- ${`writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi("${command.title}").length ${command.icon ? " + 3" : ""} + ${bannerPadding.value})) / 2), 0)) + colors.bold(colors.text.banner.command.${variant}("${command.icon ? `${command.icon} ` : ""}${command.title}")) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi("${command.title}").length ${command.icon ? " + 3" : ""} + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} }); `} ` : ""}
80
-
81
- splitText(
83
+ }); `
84
+ });
85
+ }
86
+ });
87
+ },
88
+ children
89
+ }),
90
+ createComponent(Spacing, {}),
91
+ createComponent(Show, {
92
+ get when() {
93
+ return isSetString(command?.title) && !!command?.path;
94
+ },
95
+ get children() {
96
+ return [createComponent(Show, {
97
+ when: insertNewlineBeforeCommand,
98
+ get children() {
99
+ return code`writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(process.stdout.columns - ${bannerPadding.value})) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} }); `;
100
+ }
101
+ }), memo(() => `writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi("${command?.title}").length ${command?.icon ? " + 3" : ""} + ${bannerPadding.value})) / 2), 0)) + colors.bold(colors.text.banner.command.${variant}("${command?.icon ? `${command.icon} ` : ""}${command?.title}")) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi("${command?.title}").length ${command?.icon ? " + 3" : ""} + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} }); `)];
102
+ }
103
+ }),
104
+ createComponent(Spacing, {}),
105
+ memo(() => code`splitText(
82
106
  colors.bold(${command?.title ? "colors.text.banner.description" : "colors.text.banner.command"}.${variant}(\`${formatDescription(description)}\`)),
83
- Math.max(${command?.title ? `${totalPadding.value} * 2 > process.stdout.columns / 2 ? process.stdout.columns - 6 : process.stdout.columns - ${totalPadding.value}` : `process.stdout.columns - ${totalPadding.value}`} , 0)
107
+ Math.max(${command?.title ? `${totalPadding.value} * 2 > process.stdout.columns / 2 ? process.stdout.columns - 6 : process.stdout.columns - ${totalPadding.value}` : `process.stdout.columns - ${totalPadding.value}`} , 20)
84
108
  ).forEach((line) => {
85
109
  writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.text.banner.description.${variant}(line) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} });
86
110
  });
@@ -109,7 +133,7 @@ function BannerFunctionDeclaration(props) {
109
133
  get children() {
110
134
  return createComponent(BannerFunctionBodyDeclaration, {
111
135
  get title() {
112
- return title.value;
136
+ return !children ? title.value : void 0;
113
137
  },
114
138
  get header() {
115
139
  return header.value;
@@ -1 +1 @@
1
- {"version":3,"file":"banner-function-declaration.mjs","names":[],"sources":["../../src/components/banner-function-declaration.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { Children } from \"@alloy-js/core\";\nimport { code, computed, Show } from \"@alloy-js/core\";\nimport { FunctionDeclaration, IfStatement } from \"@alloy-js/typescript\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport {\n formatDescription,\n getAppDescription,\n getAppTitle\n} from \"@shell-shock/core/plugin-utils\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport { useTheme } from \"@shell-shock/plugin-theme/contexts/theme\";\nimport type { ThemeColorVariant } from \"@shell-shock/plugin-theme/types/theme\";\nimport type { BannerPluginContext } from \"../types\";\n\nexport interface BannerFunctionDeclarationWrapperProps {\n command?: CommandTree;\n children?: Children;\n}\n\n/**\n * A component to generate the `banner` function for a specific command or application.\n *\n * @remarks\n * This function will display a banner in the console with the application's name, version, and description. It can be customized with different variants for styling and supports conditional rendering based on flags or environment variables.\n */\nexport function BannerFunctionDeclarationWrapper(\n props: BannerFunctionDeclarationWrapperProps\n) {\n const { command, children } = props;\n\n const context = usePowerlines<BannerPluginContext>();\n\n return (\n <FunctionDeclaration\n export\n async\n name=\"showBanner\"\n doc={`Write the ${getAppTitle(context, true)} command-line interface application banner ${\n command ? `for the ${command.title} command ` : \"\"\n }to the console.`}\n parameters={[{ name: \"sleepTimeoutMs\", type: \"number\", default: 500 }]}>\n {children}\n <IfStatement condition={code`isInteractive && !isHelp`}>\n {code`await sleep(sleepTimeoutMs);`}\n </IfStatement>\n </FunctionDeclaration>\n );\n}\n\nexport interface BannerFunctionBodyDeclarationProps extends BannerFunctionDeclarationProps {\n title?: string;\n header?: string;\n footer?: string;\n description: string;\n insertNewlineBeforeCommand?: boolean;\n insertNewlineBeforeBanner?: boolean;\n insertNewlineAfterDescription?: boolean;\n}\n\n/**\n * A component to generate the `banner` function's body for a specific command or application.\n *\n * @remarks\n * This function will display a banner in the console with the application's name, version, and description. It can be customized with different variants for styling and supports conditional rendering based on flags or environment variables.\n */\nexport function BannerFunctionBodyDeclaration(\n props: BannerFunctionBodyDeclarationProps\n) {\n const {\n consoleFnName = \"log\",\n variant = \"primary\",\n title,\n header,\n footer,\n description,\n command,\n children,\n insertNewlineBeforeCommand = false,\n insertNewlineBeforeBanner = true,\n insertNewlineAfterDescription = false\n } = props;\n\n const theme = useTheme();\n\n const bannerPadding = computed(\n () =>\n Math.max(theme.padding.app, 0) * 2 +\n theme.borderStyles.banner.outline[variant].left.length +\n theme.borderStyles.banner.outline[variant].right.length\n );\n const totalPadding = computed(\n () => Math.max(theme.padding.banner, 0) * 2 + bannerPadding.value\n );\n\n return (\n <>\n {code`\n if (useApp().get(\"banner\") || hasFlag(\"no-banner\") || hasFlag(\"hide-banner\") || isMinimal) {\n return;\n }\n\n useApp().set(\"banner\", true); `}\n <Spacing />\n {children}\n <Spacing />\n <Show when={insertNewlineBeforeBanner}>{code`writeLine(\"\"); `}</Show>\n <Spacing />\n {code`\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].topLeft\n }\") + ${\n theme.icons.banner.header[variant]\n ? `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(6)) + \" \" + ${\n theme.icons.banner.header[variant]\n ? `colors.text.banner.header.${variant}(\"${\n theme.icons.banner.header[variant]\n }\") + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\") + \" \" +`\n : \"\"\n } colors.bold(colors.text.banner.header.${variant}(\"${\n header\n }\")) + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(Math.max(process.stdout.columns - ${\n 6 +\n (theme.icons.banner.header[variant]\n ? theme.icons.banner.header[variant].length + 3\n : 0) +\n (header ? header.length + 2 : 0) +\n bannerPadding.value\n }, 0)))`\n : `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n }, 0)))`\n } + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].topRight\n }\"), { consoleFn: console.${consoleFnName} });\n\n ${\n title\n ? title.split(\"\\n\").map(\n line => `splitText(\"${line}\",\n Math.max(process.stdout.columns - ${totalPadding.value}, 0)\n ).forEach((line) => {\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.bold(colors.text.banner.title.${variant}(line)) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} });\n }); `\n )\n : `splitText(title,\n Math.max(process.stdout.columns - ${totalPadding.value}, 0)\n ).forEach((line) => {\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.bold(colors.text.banner.title.${variant}(line)) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} });\n });`\n }\n\n ${\n command?.title\n ? `${\n insertNewlineBeforeCommand\n ? `writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n })) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} }); `\n : \"\"\n }\n ${`writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(\"${\n command.title\n }\").length ${command.icon ? \" + 3\" : \"\"} + ${\n bannerPadding.value\n })) / 2), 0)) + colors.bold(colors.text.banner.command.${\n variant\n }(\"${command.icon ? `${command.icon} ` : \"\"}${command.title}\")) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(\"${command.title}\").length ${\n command.icon ? \" + 3\" : \"\"\n } + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} }); `} `\n : \"\"\n }\n\n splitText(\n colors.bold(${\n command?.title\n ? \"colors.text.banner.description\"\n : \"colors.text.banner.command\"\n }.${variant}(\\`${formatDescription(description)}\\`)),\n Math.max(${\n command?.title\n ? `${totalPadding.value} * 2 > process.stdout.columns / 2 ? process.stdout.columns - 6 : process.stdout.columns - ${totalPadding.value}`\n : `process.stdout.columns - ${totalPadding.value}`\n } , 0)\n ).forEach((line) => {\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.text.banner.description.${variant}(line) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} });\n });\n ${\n insertNewlineAfterDescription\n ? `writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n })) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} });`\n : \"\"\n }\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottomLeft\n }\") + ${\n footer\n ? `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(Math.max(process.stdout.columns - ${\n 8 + (footer ? footer.length : 0) + bannerPadding.value\n }, 0))) + \" \" + ${\n footer\n ? `colors.bold(colors.text.banner.footer.${variant}(\"${footer}\"))`\n : \"\"\n } + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(6))`\n : `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n }, 0)))`\n } + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottomRight\n }\"), { consoleFn: console.${consoleFnName} });\n\n writeLine(\"\"); `}\n </>\n );\n}\n\nexport interface BannerFunctionDeclarationProps extends BannerFunctionDeclarationWrapperProps {\n variant?: ThemeColorVariant;\n consoleFnName?: \"log\" | \"info\" | \"warn\" | \"error\" | \"debug\";\n insertNewlineBeforeBanner?: boolean;\n}\n\n/**\n * A component to generate the `banner` function for a specific command or application.\n *\n * @remarks\n * This function will display a banner in the console with the application's name, version, and description. It can be customized with different variants for styling and supports conditional rendering based on flags or environment variables.\n */\nexport function BannerFunctionDeclaration(\n props: BannerFunctionDeclarationProps\n) {\n const {\n consoleFnName = \"log\",\n variant = \"primary\",\n command,\n children,\n insertNewlineBeforeBanner = true\n } = props;\n\n const theme = useTheme();\n const context = usePowerlines<BannerPluginContext>();\n\n const header = computed(\n () =>\n `${theme.labels.banner.header[variant] || getAppTitle(context, false)} v${\n context.packageJson.version || \"1.0.0\"\n }`\n );\n const footer = computed(() => theme.labels.banner.footer[variant]);\n const title = computed(\n () =>\n context.config.banner.title ||\n getAppTitle(context, true).replace(\n `v${context.packageJson.version || \"1.0.0\"}`,\n \"\"\n )\n );\n const description = computed(\n () => command?.description || getAppDescription(context)\n );\n\n return (\n <BannerFunctionDeclarationWrapper command={command}>\n <BannerFunctionBodyDeclaration\n title={title.value}\n header={header.value}\n description={description.value}\n footer={footer.value}\n variant={variant}\n consoleFnName={consoleFnName}\n command={command}\n insertNewlineBeforeCommand\n insertNewlineBeforeBanner={insertNewlineBeforeBanner}>\n {children}\n </BannerFunctionBodyDeclaration>\n </BannerFunctionDeclarationWrapper>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"banner-function-declaration.mjs","names":[],"sources":["../../src/components/banner-function-declaration.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { Children } from \"@alloy-js/core\";\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport { FunctionDeclaration, IfStatement } from \"@alloy-js/typescript\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport {\n formatDescription,\n getAppDescription,\n getAppTitle\n} from \"@shell-shock/core/plugin-utils\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport { useTheme } from \"@shell-shock/plugin-theme/contexts/theme\";\nimport type { ThemeColorVariant } from \"@shell-shock/plugin-theme/types/theme\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport type { BannerPluginContext } from \"../types\";\n\nexport interface BannerFunctionDeclarationWrapperProps {\n command?: CommandTree;\n children?: Children;\n}\n\n/**\n * A component to generate the `banner` function for a specific command or application.\n *\n * @remarks\n * This function will display a banner in the console with the application's name, version, and description. It can be customized with different variants for styling and supports conditional rendering based on flags or environment variables.\n */\nexport function BannerFunctionDeclarationWrapper(\n props: BannerFunctionDeclarationWrapperProps\n) {\n const { command, children } = props;\n\n const context = usePowerlines<BannerPluginContext>();\n\n return (\n <FunctionDeclaration\n export\n async\n name=\"showBanner\"\n doc={`Write the ${getAppTitle(context, true)} command-line interface application banner ${\n command ? `for the ${command.title} command ` : \"\"\n }to the console.`}\n parameters={[{ name: \"sleepTimeoutMs\", type: \"number\", default: 500 }]}>\n {children}\n <IfStatement condition={code`isInteractive && !isHelp`}>\n {code`await sleep(sleepTimeoutMs);`}\n </IfStatement>\n </FunctionDeclaration>\n );\n}\n\nexport interface BannerFunctionBodyDeclarationProps extends BannerFunctionDeclarationProps {\n title?: string;\n header?: string;\n footer?: string;\n description: string;\n insertNewlineBeforeCommand?: boolean;\n insertNewlineBeforeBanner?: boolean;\n insertNewlineAfterDescription?: boolean;\n}\n\n/**\n * A component to generate the `banner` function's body for a specific command or application.\n *\n * @remarks\n * This function will display a banner in the console with the application's name, version, and description. It can be customized with different variants for styling and supports conditional rendering based on flags or environment variables.\n */\nexport function BannerFunctionBodyDeclaration(\n props: BannerFunctionBodyDeclarationProps\n) {\n const {\n consoleFnName = \"log\",\n variant = \"primary\",\n title,\n header,\n footer,\n description,\n command,\n children,\n insertNewlineBeforeCommand = false,\n insertNewlineBeforeBanner = true,\n insertNewlineAfterDescription = false\n } = props;\n\n const theme = useTheme();\n\n const bannerPadding = computed(\n () =>\n Math.max(theme.padding.app, 0) * 2 +\n theme.borderStyles.banner.outline[variant].left.length +\n theme.borderStyles.banner.outline[variant].right.length\n );\n const totalPadding = computed(\n () => Math.max(theme.padding.banner, 0) * 2 + bannerPadding.value\n );\n\n return (\n <>\n {code`\n if (useApp().get(\"banner\") || hasFlag(\"no-banner\") || hasFlag(\"hide-banner\") || isMinimal) {\n return;\n }\n\n useApp().set(\"banner\", true); `}\n <Spacing />\n <Show when={insertNewlineBeforeBanner}>{code`writeLine(\"\"); `}</Show>\n <Spacing />\n\n {code`\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].topLeft\n }\") + ${\n theme.icons.banner.header[variant]\n ? `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(6)) + \" \" + ${\n theme.icons.banner.header[variant]\n ? `colors.text.banner.header.${variant}(\"${\n theme.icons.banner.header[variant]\n }\") + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\") + \" \" +`\n : \"\"\n } colors.bold(colors.text.banner.header.${variant}(\"${\n header\n }\")) + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(Math.max(process.stdout.columns - ${\n 6 +\n (theme.icons.banner.header[variant]\n ? theme.icons.banner.header[variant].length + 3\n : 0) +\n (header ? header.length + 2 : 0) +\n bannerPadding.value\n }, 0)))`\n : `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n }, 0)))`\n } + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].topRight\n }\"), { consoleFn: console.${consoleFnName} }); `}\n\n <Show\n when={!!children}\n fallback={\n <Show when={isSetString(title)}>\n <For each={title ? title.split(\"\\n\") : []} hardline>\n {line => code`splitText(\"${line}\",\n Math.max(process.stdout.columns - ${totalPadding.value}, 20)\n ).forEach((line) => {\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.bold(colors.text.banner.title.${variant}(line)) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} });\n }); `}\n </For>\n </Show>\n }>\n {children}\n </Show>\n <Spacing />\n\n <Show when={isSetString(command?.title) && !!command?.path}>\n <Show when={insertNewlineBeforeCommand}>\n {code`writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n })) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} }); `}\n </Show>\n {`writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(\"${\n command?.title\n }\").length ${command?.icon ? \" + 3\" : \"\"} + ${\n bannerPadding.value\n })) / 2), 0)) + colors.bold(colors.text.banner.command.${\n variant\n }(\"${command?.icon ? `${command.icon} ` : \"\"}${command?.title}\")) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(\"${command?.title}\").length ${\n command?.icon ? \" + 3\" : \"\"\n } + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} }); `}\n </Show>\n <Spacing />\n\n {code`splitText(\n colors.bold(${\n command?.title\n ? \"colors.text.banner.description\"\n : \"colors.text.banner.command\"\n }.${variant}(\\`${formatDescription(description)}\\`)),\n Math.max(${\n command?.title\n ? `${totalPadding.value} * 2 > process.stdout.columns / 2 ? process.stdout.columns - 6 : process.stdout.columns - ${totalPadding.value}`\n : `process.stdout.columns - ${totalPadding.value}`\n } , 20)\n ).forEach((line) => {\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.text.banner.description.${variant}(line) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} });\n });\n ${\n insertNewlineAfterDescription\n ? `writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n })) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} });`\n : \"\"\n }\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottomLeft\n }\") + ${\n footer\n ? `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(Math.max(process.stdout.columns - ${\n 8 + (footer ? footer.length : 0) + bannerPadding.value\n }, 0))) + \" \" + ${\n footer\n ? `colors.bold(colors.text.banner.footer.${variant}(\"${footer}\"))`\n : \"\"\n } + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(6))`\n : `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n }, 0)))`\n } + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottomRight\n }\"), { consoleFn: console.${consoleFnName} });\n\n writeLine(\"\"); `}\n </>\n );\n}\n\nexport interface BannerFunctionDeclarationProps extends BannerFunctionDeclarationWrapperProps {\n variant?: ThemeColorVariant;\n consoleFnName?: \"log\" | \"info\" | \"warn\" | \"error\" | \"debug\";\n insertNewlineBeforeBanner?: boolean;\n}\n\n/**\n * A component to generate the `banner` function for a specific command or application.\n *\n * @remarks\n * This function will display a banner in the console with the application's name, version, and description. It can be customized with different variants for styling and supports conditional rendering based on flags or environment variables.\n */\nexport function BannerFunctionDeclaration(\n props: BannerFunctionDeclarationProps\n) {\n const {\n consoleFnName = \"log\",\n variant = \"primary\",\n command,\n children,\n insertNewlineBeforeBanner = true\n } = props;\n\n const theme = useTheme();\n const context = usePowerlines<BannerPluginContext>();\n\n const header = computed(\n () =>\n `${theme.labels.banner.header[variant] || getAppTitle(context, false)} v${\n context.packageJson.version || \"1.0.0\"\n }`\n );\n const footer = computed(() => theme.labels.banner.footer[variant]);\n const title = computed(\n () =>\n context.config.banner.title ||\n getAppTitle(context, true).replace(\n `v${context.packageJson.version || \"1.0.0\"}`,\n \"\"\n )\n );\n const description = computed(\n () => command?.description || getAppDescription(context)\n );\n\n return (\n <BannerFunctionDeclarationWrapper command={command}>\n <BannerFunctionBodyDeclaration\n title={!children ? title.value : undefined}\n header={header.value}\n description={description.value}\n footer={footer.value}\n variant={variant}\n consoleFnName={consoleFnName}\n command={command}\n insertNewlineBeforeCommand\n insertNewlineBeforeBanner={insertNewlineBeforeBanner}>\n {children}\n </BannerFunctionBodyDeclaration>\n </BannerFunctionDeclarationWrapper>\n );\n}\n"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -27,42 +27,39 @@ const plugin = (options = {}) => {
27
27
  config() {
28
28
  return { banner: { title: options.title } };
29
29
  },
30
- prepare: {
31
- order: "post",
32
- async handler() {
33
- const commands = await (0, _shell_shock_core_plugin_utils.getCommandList)(this);
34
- this.debug(`Rendering \`banner\` built-ins for each of the ${commands.length} command modules.`);
35
- const bin = (0, _alloy_js_core.computed)(() => ({
36
- id: "",
37
- name: (0, _shell_shock_core_plugin_utils.getAppName)(this),
38
- title: (0, _shell_shock_core_plugin_utils.getAppTitle)(this),
39
- description: (0, _shell_shock_core_plugin_utils.getAppDescription)(this),
40
- isVirtual: true,
41
- path: null,
42
- segments: [],
43
- alias: [],
44
- tags: [],
45
- options: Object.fromEntries(this.options.map((option) => [option.name, option])),
46
- entry: { file: (0, _stryke_path_join.joinPaths)(this.entryPath, "bin.ts") },
47
- args: [],
48
- parent: null,
49
- children: this.commands
50
- }));
51
- return (0, _powerlines_plugin_alloy_render.render)(this, [
52
- (0, _alloy_js_core_jsx_runtime.createComponent)(require_components_banner_builtin.BannerBuiltin, { get command() {
53
- return bin.value;
54
- } }),
55
- (0, _alloy_js_core_jsx_runtime.createComponent)(_powerlines_plugin_alloy_core_components.Spacing, {}),
56
- (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_core.For, {
57
- get each() {
58
- return commands.sort((a, b) => a.name.localeCompare(b.name));
59
- },
60
- doubleHardline: true,
61
- children: (command) => (0, _alloy_js_core_jsx_runtime.createComponent)(require_components_banner_builtin.BannerBuiltin, { command })
62
- })
63
- ]);
64
- }
65
- }
30
+ prepare: { async handler() {
31
+ const commands = await (0, _shell_shock_core_plugin_utils.getCommandList)(this);
32
+ this.debug(`Rendering \`banner\` built-ins for each of the ${commands.length} command modules.`);
33
+ const bin = (0, _alloy_js_core.computed)(() => ({
34
+ id: "",
35
+ name: (0, _shell_shock_core_plugin_utils.getAppName)(this),
36
+ title: "",
37
+ description: (0, _shell_shock_core_plugin_utils.getAppDescription)(this),
38
+ isVirtual: true,
39
+ path: null,
40
+ segments: [],
41
+ alias: [],
42
+ tags: [],
43
+ options: Object.fromEntries(this.options.map((option) => [option.name, option])),
44
+ entry: { file: (0, _stryke_path_join.joinPaths)(this.entryPath, "bin.ts") },
45
+ args: [],
46
+ parent: null,
47
+ children: this.commands
48
+ }));
49
+ return (0, _powerlines_plugin_alloy_render.render)(this, [
50
+ (0, _alloy_js_core_jsx_runtime.createComponent)(require_components_banner_builtin.BannerBuiltin, { get command() {
51
+ return bin.value;
52
+ } }),
53
+ (0, _alloy_js_core_jsx_runtime.createComponent)(_powerlines_plugin_alloy_core_components.Spacing, {}),
54
+ (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_core.For, {
55
+ get each() {
56
+ return commands.sort((a, b) => a.name.localeCompare(b.name));
57
+ },
58
+ doubleHardline: true,
59
+ children: (command) => (0, _alloy_js_core_jsx_runtime.createComponent)(require_components_banner_builtin.BannerBuiltin, { command })
60
+ })
61
+ ]);
62
+ } }
66
63
  }
67
64
  ];
68
65
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.tsx"],"mappings":";;;;;;AAuCA;cAAa,MAAA,oBACM,mBAAA,GAAsB,mBAAA,EAEvC,OAAA,GAAS,mBAAA,KA6DJ,MAAA,CAAO,QAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.tsx"],"mappings":";;;;;;AAsCA;cAAa,MAAA,oBACM,mBAAA,GAAsB,mBAAA,EAEvC,OAAA,GAAS,mBAAA,KA4DJ,MAAA,CAAO,QAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.tsx"],"mappings":";;;;;;AAuCA;cAAa,MAAA,oBACM,mBAAA,GAAsB,mBAAA,EAEvC,OAAA,GAAS,mBAAA,KA6DJ,MAAA,CAAO,QAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.tsx"],"mappings":";;;;;;AAsCA;cAAa,MAAA,oBACM,mBAAA,GAAsB,mBAAA,EAEvC,OAAA,GAAS,mBAAA,KA4DJ,MAAA,CAAO,QAAA"}
package/dist/index.mjs CHANGED
@@ -4,7 +4,7 @@ import { createComponent } from "@alloy-js/core/jsx-runtime";
4
4
  import { For, computed } from "@alloy-js/core";
5
5
  import { Spacing } from "@powerlines/plugin-alloy/core/components";
6
6
  import { render } from "@powerlines/plugin-alloy/render";
7
- import { getAppDescription, getAppName, getAppTitle, getCommandList } from "@shell-shock/core/plugin-utils";
7
+ import { getAppDescription, getAppName, getCommandList } from "@shell-shock/core/plugin-utils";
8
8
  import console from "@shell-shock/plugin-console";
9
9
  import theme from "@shell-shock/plugin-theme";
10
10
  import { joinPaths } from "@stryke/path/join";
@@ -23,42 +23,39 @@ const plugin = (options = {}) => {
23
23
  config() {
24
24
  return { banner: { title: options.title } };
25
25
  },
26
- prepare: {
27
- order: "post",
28
- async handler() {
29
- const commands = await getCommandList(this);
30
- this.debug(`Rendering \`banner\` built-ins for each of the ${commands.length} command modules.`);
31
- const bin = computed(() => ({
32
- id: "",
33
- name: getAppName(this),
34
- title: getAppTitle(this),
35
- description: getAppDescription(this),
36
- isVirtual: true,
37
- path: null,
38
- segments: [],
39
- alias: [],
40
- tags: [],
41
- options: Object.fromEntries(this.options.map((option) => [option.name, option])),
42
- entry: { file: joinPaths(this.entryPath, "bin.ts") },
43
- args: [],
44
- parent: null,
45
- children: this.commands
46
- }));
47
- return render(this, [
48
- createComponent(BannerBuiltin, { get command() {
49
- return bin.value;
50
- } }),
51
- createComponent(Spacing, {}),
52
- createComponent(For, {
53
- get each() {
54
- return commands.sort((a, b) => a.name.localeCompare(b.name));
55
- },
56
- doubleHardline: true,
57
- children: (command) => createComponent(BannerBuiltin, { command })
58
- })
59
- ]);
60
- }
61
- }
26
+ prepare: { async handler() {
27
+ const commands = await getCommandList(this);
28
+ this.debug(`Rendering \`banner\` built-ins for each of the ${commands.length} command modules.`);
29
+ const bin = computed(() => ({
30
+ id: "",
31
+ name: getAppName(this),
32
+ title: "",
33
+ description: getAppDescription(this),
34
+ isVirtual: true,
35
+ path: null,
36
+ segments: [],
37
+ alias: [],
38
+ tags: [],
39
+ options: Object.fromEntries(this.options.map((option) => [option.name, option])),
40
+ entry: { file: joinPaths(this.entryPath, "bin.ts") },
41
+ args: [],
42
+ parent: null,
43
+ children: this.commands
44
+ }));
45
+ return render(this, [
46
+ createComponent(BannerBuiltin, { get command() {
47
+ return bin.value;
48
+ } }),
49
+ createComponent(Spacing, {}),
50
+ createComponent(For, {
51
+ get each() {
52
+ return commands.sort((a, b) => a.name.localeCompare(b.name));
53
+ },
54
+ doubleHardline: true,
55
+ children: (command) => createComponent(BannerBuiltin, { command })
56
+ })
57
+ ]);
58
+ } }
62
59
  }
63
60
  ];
64
61
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { computed, For } from \"@alloy-js/core\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components\";\nimport { render } from \"@powerlines/plugin-alloy/render\";\nimport {\n getAppDescription,\n getAppName,\n getAppTitle,\n getCommandList\n} from \"@shell-shock/core/plugin-utils\";\nimport console from \"@shell-shock/plugin-console\";\nimport theme from \"@shell-shock/plugin-theme\";\nimport { joinPaths } from \"@stryke/path/join\";\nimport type { Plugin } from \"powerlines\";\nimport { BannerBuiltin } from \"./components\";\nimport type { BannerPluginContext, BannerPluginOptions } from \"./types/plugin\";\n\nexport type * from \"./types\";\n\n/**\n * The Banner - Shell Shock plugin to add a banner command to the application.\n */\nexport const plugin = <\n TContext extends BannerPluginContext = BannerPluginContext\n>(\n options: BannerPluginOptions = {}\n) => {\n return [\n ...theme(options.theme),\n console(options.console),\n {\n name: \"shell-shock:banner\",\n enforce: \"post\",\n config() {\n return {\n banner: {\n title: options.title\n }\n };\n },\n prepare: {\n order: \"post\",\n async handler() {\n const commands = await getCommandList(this);\n this.debug(\n `Rendering \\`banner\\` built-ins for each of the ${\n commands.length\n } command modules.`\n );\n\n const bin = computed(() => ({\n id: \"\",\n name: getAppName(this),\n title: getAppTitle(this),\n description: getAppDescription(this),\n isVirtual: true,\n path: null,\n segments: [],\n alias: [],\n tags: [],\n options: Object.fromEntries(\n this.options.map(option => [option.name, option])\n ),\n entry: {\n file: joinPaths(this.entryPath, \"bin.ts\")\n },\n args: [],\n parent: null,\n children: this.commands\n }));\n\n return render(\n this,\n <>\n <BannerBuiltin command={bin.value} />\n <Spacing />\n <For\n each={commands.sort((a, b) => a.name.localeCompare(b.name))}\n doubleHardline>\n {command => <BannerBuiltin command={command} />}\n </For>\n </>\n );\n }\n }\n }\n ] as Plugin<TContext>[];\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;;;;;AAkCA,MAAa,UAAe,UAAA,EAAA,KAAA;;;;;GAE1B,MAAA;GACC,SAAU;GACX,SAAA;AACI,WAAO,EACX,QAAS,EACV,OAAA,QAAA,OACQ,EACJ;;GAED,SAAS;IACT,OAAQ;IACR,MAAA,UAAA;KACE,MAAO,WAAY,MAAM,eAAC,KAAA;AAC1B,UAAO,MAAG,kDAAK,SAAA,OAAA,mBAAA;KACf,MAAQ,MAAC,gBAAA;MACP,IAAM;MACJ,MAAM,WAAE,KAAA;MACR,OAAO,YAAU,KAAA;MACjB,aAAA,kBAAA,KAAA;MACD,WAAA;MACF,MAAA;MACD,UAAS,EAAA;MACP,OAAQ,EAAA;MACR,MAAM,EAAA;MACJ,SAAM,OAAU,YAAO,KAAA,QAAe,KAAK,WAAA,CAAA,OAAA,MAAA,OAAA,CAAA,CAAA;MAC3C,OAAK,EACH,MAAC,UAAY,KAAQ,WAAW,SAAS,EAC1C;MACD,MAAI,EAAA;MACJ,QAAC;;MAEF,EAAC;AACF,YAAO,OAAG,MAAA;MAAA,gBAAA,eAAA,EACR,IAAE,UAAM;AACN,cAAO,IAAA;SAEV,CAAC;MAAE,gBAAe,SAAA,EAAA,CAAA;MAAA,gBAAA,KAAA;OACjB,IAAE,OAAM;AACN,eAAA,SAAY,MAAA,GAAA,MAAA,EAAA,KAAA,cAAA,EAAA,KAAA,CAAA;;OAEd,gBAAU;OACV,WAAU,YAAQ,gBAAW,eAAA,EACpB,SACR,CAAC;OACH,CAAC;MAAC,CAAC;;IAEP;GACF;EAAC"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { computed, For } from \"@alloy-js/core\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components\";\nimport { render } from \"@powerlines/plugin-alloy/render\";\nimport {\n getAppDescription,\n getAppName,\n getCommandList\n} from \"@shell-shock/core/plugin-utils\";\nimport console from \"@shell-shock/plugin-console\";\nimport theme from \"@shell-shock/plugin-theme\";\nimport { joinPaths } from \"@stryke/path/join\";\nimport type { Plugin } from \"powerlines\";\nimport { BannerBuiltin } from \"./components\";\nimport type { BannerPluginContext, BannerPluginOptions } from \"./types/plugin\";\n\nexport type * from \"./types\";\n\n/**\n * The Banner - Shell Shock plugin to add a banner command to the application.\n */\nexport const plugin = <\n TContext extends BannerPluginContext = BannerPluginContext\n>(\n options: BannerPluginOptions = {}\n) => {\n return [\n ...theme(options.theme),\n console(options.console),\n {\n name: \"shell-shock:banner\",\n enforce: \"post\",\n config() {\n return {\n banner: {\n title: options.title\n }\n };\n },\n prepare: {\n async handler() {\n const commands = await getCommandList(this);\n this.debug(\n `Rendering \\`banner\\` built-ins for each of the ${\n commands.length\n } command modules.`\n );\n\n const bin = computed(() => ({\n id: \"\",\n name: getAppName(this),\n title: \"\",\n description: getAppDescription(this),\n isVirtual: true,\n path: null,\n segments: [],\n alias: [],\n tags: [],\n options: Object.fromEntries(\n this.options.map(option => [option.name, option])\n ),\n entry: {\n file: joinPaths(this.entryPath, \"bin.ts\")\n },\n args: [],\n parent: null,\n children: this.commands\n }));\n\n return render(\n this,\n <>\n <BannerBuiltin command={bin.value} />\n <Spacing />\n <For\n each={commands.sort((a, b) => a.name.localeCompare(b.name))}\n doubleHardline>\n {command => <BannerBuiltin command={command} />}\n </For>\n </>\n );\n }\n }\n }\n ] as Plugin<TContext>[];\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;;;;;;AAmCE,QAAA;EAAA,GAAA,MAAA,QAAA,MAAA;EAAA,QAAA,QAAA,QAAA;EAAA;GACC,MAAI;GACL,SAAA;GACF,SAAa;AACX,WAAS,EACV,QAAA,EACS,OAAC,QAAA,OACN,EACH;;GAEE,SAAQ,EACR,MAAA,UAAA;IACE,MAAO,WAAY,MAAM,eAAC,KAAA;AAC1B,SAAO,MAAG,kDAAK,SAAA,OAAA,mBAAA;IACf,MAAQ,MAAC,gBAAA;KACP,IAAM;KACJ,MAAM,WAAE,KAAA;KACR,OAAO;KACP,aAAA,kBAAA,KAAA;KACD,WAAA;KACF,MAAA;KACD,UAAS,EAAA;KACP,OAAM,EAAA;KACJ,MAAM,EAAA;KACN,SAAK,OAAK,YAAA,KAAA,QAAA,KAAA,WAAA,CAAA,OAAA,MAAA,OAAA,CAAA,CAAA;KACV,OAAG,EACD,MAAE,UAAS,KAAA,WAAA,SAAA,EACZ;KACD,MAAC,EAAA;;KAED,UAAU,KAAE;KACb,EAAE;AACH,WAAI,OAAM,MAAU;KAAC,gBAAK,eAAA,EACxB,IAAE,UAAS;AACT,aAAA,IAAW;QAEd,CAAC;KAAE,gBAAU,SAAA,EAAA,CAAA;KAAA,gBAAA,KAAA;MACZ,IAAE,OAAS;AACT,cAAO,SAAE,MAAA,GAAA,MAAA,EAAA,KAAA,cAAA,EAAA,KAAA,CAAA;;MAEX,gBAAW;MACX,WAAS,YAAY,gBAAkB,eAAa,EACjD,SACF,CAAC;MACH,CAAC;KAAC,CAAC;MAEP;GACF;EAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shell-shock/plugin-banner",
3
- "version": "0.1.14",
3
+ "version": "0.1.15",
4
4
  "private": false,
5
5
  "description": "A package containing a Shell Shock plugin to generate banner built-in modules that display information about the application.",
6
6
  "keywords": [
@@ -55,10 +55,11 @@
55
55
  "@powerlines/deepkit": "^0.6.162",
56
56
  "@powerlines/plugin-alloy": "^0.25.70",
57
57
  "@powerlines/plugin-plugin": "^0.12.334",
58
- "@shell-shock/core": "^0.14.1",
59
- "@shell-shock/plugin-theme": "^0.4.0",
60
- "@shell-shock/plugin-console": "^0.1.27",
58
+ "@shell-shock/core": "^0.14.2",
59
+ "@shell-shock/plugin-theme": "^0.4.1",
60
+ "@shell-shock/plugin-console": "^0.1.28",
61
61
  "@stryke/path": "^0.27.3",
62
+ "@stryke/type-checks": "^0.6.0",
62
63
  "defu": "^6.1.4",
63
64
  "powerlines": "^0.42.24"
64
65
  },
@@ -154,5 +155,5 @@
154
155
  }
155
156
  }
156
157
  },
157
- "gitHead": "47d5f1bcf7e0a915557aa31aff427b82c07017bd"
158
+ "gitHead": "081a1a99ff0c263af9b6d34547d02e96d0ac398e"
158
159
  }