@stackonward/cli 1.3.2 → 1.3.3

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/dist/index.js CHANGED
@@ -5583,7 +5583,7 @@ function isFileExistsError(error) {
5583
5583
 
5584
5584
  // src/index.ts
5585
5585
  var program = new Command();
5586
- program.name("stackonward").description("Create projects and install reusable components and snippets").version("1.3.2");
5586
+ program.name("stackonward").description("Create projects and install reusable components and snippets").version("1.3.3");
5587
5587
  program.command("init [name]").description("Create a new project from template").option("-t, --template <template>", "Template to use").option("-d, --dir <directory>", "Target directory").option("--skip-install", "Skip dependency installation").option("--skip-git", "Skip git initialization").option("--module <module>", "Go module path (required for go-backend)").option("--author <author>", "Author name").option("-y, --yes", "Use defaults without interactive prompts").action(init);
5588
5588
  program.command("add [items...]").description("Add components or snippets to your project").option("-c, --component", "Add component(s)").option("-s, --snippet", "Add snippet(s)").option("-a, --all", "Add all items in category").option("-y, --yes", "Skip confirmation prompts").option("-o, --overwrite", "Overwrite existing files").option("-p, --path <path>", "Custom install path").action(add);
5589
5589
  program.command("list [type]").description("List available templates, components, or snippets").option("-t, --templates", "List templates").option("-c, --components", "List components").option("-s, --snippets", "List snippets").action(list);
@@ -1,4 +1,6 @@
1
1
  <script setup lang="ts">
2
+ defineOptions({ inheritAttrs: false });
3
+
2
4
  const site = useSiteShell();
3
5
  const analytics = useAnalytics();
4
6
  const consent = useConsent();
@@ -13,12 +15,15 @@ const visible = computed(
13
15
  </script>
14
16
 
15
17
  <template>
16
- <button
17
- v-if="visible"
18
- type="button"
19
- class="consent-settings-button"
20
- @click="consent.openSettings"
21
- >
22
- {{ t("consent.settings") }}
23
- </button>
18
+ <ClientOnly>
19
+ <button
20
+ v-if="visible"
21
+ v-bind="$attrs"
22
+ type="button"
23
+ class="consent-settings-button"
24
+ @click="consent.openSettings"
25
+ >
26
+ {{ t("consent.settings") }}
27
+ </button>
28
+ </ClientOnly>
24
29
  </template>
@@ -1,4 +1,6 @@
1
1
  <script setup lang="ts">
2
+ defineOptions({ inheritAttrs: false });
3
+
2
4
  const site = useSiteShell();
3
5
  const consent = useConsent();
4
6
  const { t } = useI18n();
@@ -21,38 +23,41 @@ const persistenceMessage = computed(() => {
21
23
  </script>
22
24
 
23
25
  <template>
24
- <section
25
- v-if="consent.visible.value"
26
- class="site-consent"
27
- role="region"
28
- :aria-label="t('consent.region')"
29
- >
30
- <div class="site-consent__header">
31
- <h2>{{ t("consent.title") }}</h2>
32
- <button
33
- v-if="consent.state.value.decision"
34
- type="button"
35
- class="site-consent__close"
36
- :aria-label="t('consent.close')"
37
- @click="consent.closeSettings"
38
- >
39
- <UIcon name="i-lucide-x" aria-hidden="true" />
40
- </button>
41
- </div>
42
- <p class="site-consent__message">{{ t("consent.message") }}</p>
43
- <NuxtLink class="site-consent__policy" :to="site.consent.policyPath">
44
- {{ t("consent.policy") }}
45
- </NuxtLink>
46
- <p v-if="persistenceMessage" class="site-consent__status" role="status">
47
- {{ persistenceMessage }}
48
- </p>
49
- <div class="site-consent__actions">
50
- <button type="button" class="base-button base-button--secondary" @click="consent.reject">
51
- {{ t("consent.decline") }}
52
- </button>
53
- <button type="button" class="base-button base-button--primary" @click="consent.accept">
54
- {{ t("consent.allow") }}
55
- </button>
56
- </div>
57
- </section>
26
+ <ClientOnly>
27
+ <section
28
+ v-if="consent.visible.value"
29
+ v-bind="$attrs"
30
+ class="site-consent"
31
+ role="region"
32
+ :aria-label="t('consent.region')"
33
+ >
34
+ <div class="site-consent__header">
35
+ <h2>{{ t("consent.title") }}</h2>
36
+ <button
37
+ v-if="consent.state.value.decision"
38
+ type="button"
39
+ class="site-consent__close"
40
+ :aria-label="t('consent.close')"
41
+ @click="consent.closeSettings"
42
+ >
43
+ <UIcon name="i-lucide-x" aria-hidden="true" />
44
+ </button>
45
+ </div>
46
+ <p class="site-consent__message">{{ t("consent.message") }}</p>
47
+ <NuxtLink class="site-consent__policy" :to="site.consent.policyPath">
48
+ {{ t("consent.policy") }}
49
+ </NuxtLink>
50
+ <p v-if="persistenceMessage" class="site-consent__status" role="status">
51
+ {{ persistenceMessage }}
52
+ </p>
53
+ <div class="site-consent__actions">
54
+ <button type="button" class="base-button base-button--secondary" @click="consent.reject">
55
+ {{ t("consent.decline") }}
56
+ </button>
57
+ <button type="button" class="base-button base-button--primary" @click="consent.accept">
58
+ {{ t("consent.allow") }}
59
+ </button>
60
+ </div>
61
+ </section>
62
+ </ClientOnly>
58
63
  </template>
@@ -53,9 +53,7 @@ function hasChildren(item: MarketingNavigationItem): boolean {
53
53
 
54
54
  <div class="marketing-header__actions">
55
55
  <div class="marketing-header__preferences">
56
- <ClientOnly>
57
- <ThemeSwitcher />
58
- </ClientOnly>
56
+ <ThemeSwitcher />
59
57
  <LocaleSwitcher />
60
58
  </div>
61
59
  <slot name="actions">
@@ -112,9 +110,7 @@ function hasChildren(item: MarketingNavigationItem): boolean {
112
110
  </details>
113
111
  </template>
114
112
  <div class="mobile-nav__preferences">
115
- <ClientOnly>
116
- <ThemeSwitcher @changed="closeMenu" />
117
- </ClientOnly>
113
+ <ThemeSwitcher @changed="closeMenu" />
118
114
  <LocaleSwitcher @changed="closeMenu" />
119
115
  </div>
120
116
  </nav>
@@ -26,9 +26,7 @@ const LazyMarketingFooter = defineLazyHydrationComponent(
26
26
  <div class="site-floating-stack">
27
27
  <BackToTop />
28
28
  <slot name="consent">
29
- <ClientOnly>
30
- <CookieConsent />
31
- </ClientOnly>
29
+ <CookieConsent />
32
30
  </slot>
33
31
  </div>
34
32
  </div>
@@ -1,6 +1,8 @@
1
1
  <script setup lang="ts">
2
2
  type ThemePreference = "system" | "light" | "dark";
3
3
 
4
+ defineOptions({ inheritAttrs: false });
5
+
4
6
  const emit = defineEmits<{ changed: [] }>();
5
7
  const colorMode = useColorMode();
6
8
  const { t } = useI18n();
@@ -35,29 +37,31 @@ onClickOutside(dropdown, () => dropdown.value?.removeAttribute("open"));
35
37
  </script>
36
38
 
37
39
  <template>
38
- <details ref="dropdown" class="site-preference" @keydown="handleKeydown">
39
- <summary :aria-label="t('theme.current', { theme: t(current.labelKey) })">
40
- <UIcon :name="current.icon" aria-hidden="true" />
41
- <span class="site-preference__current">{{ t(current.labelKey) }}</span>
42
- <UIcon class="site-preference__chevron" name="i-lucide-chevron-down" aria-hidden="true" />
43
- </summary>
44
- <div class="site-preference__menu" :aria-label="t('theme.select')">
45
- <button
46
- v-for="option in options"
47
- :key="option.value"
48
- type="button"
49
- :aria-pressed="option.value === preference"
50
- @click="selectTheme(option.value)"
51
- >
52
- <UIcon :name="option.icon" aria-hidden="true" />
53
- <span>{{ t(option.labelKey) }}</span>
54
- <UIcon
55
- v-if="option.value === preference"
56
- class="site-preference__check"
57
- name="i-lucide-check"
58
- aria-hidden="true"
59
- />
60
- </button>
61
- </div>
62
- </details>
40
+ <ClientOnly>
41
+ <details ref="dropdown" v-bind="$attrs" class="site-preference" @keydown="handleKeydown">
42
+ <summary :aria-label="t('theme.current', { theme: t(current.labelKey) })">
43
+ <UIcon :name="current.icon" aria-hidden="true" />
44
+ <span class="site-preference__current">{{ t(current.labelKey) }}</span>
45
+ <UIcon class="site-preference__chevron" name="i-lucide-chevron-down" aria-hidden="true" />
46
+ </summary>
47
+ <div class="site-preference__menu" :aria-label="t('theme.select')">
48
+ <button
49
+ v-for="option in options"
50
+ :key="option.value"
51
+ type="button"
52
+ :aria-pressed="option.value === preference"
53
+ @click="selectTheme(option.value)"
54
+ >
55
+ <UIcon :name="option.icon" aria-hidden="true" />
56
+ <span>{{ t(option.labelKey) }}</span>
57
+ <UIcon
58
+ v-if="option.value === preference"
59
+ class="site-preference__check"
60
+ name="i-lucide-check"
61
+ aria-hidden="true"
62
+ />
63
+ </button>
64
+ </div>
65
+ </details>
66
+ </ClientOnly>
63
67
  </template>
@@ -21,7 +21,7 @@
21
21
  "name": "@stackonward/cli",
22
22
  "description": "StackOnward project and resource CLI",
23
23
  "type": "npm",
24
- "version": "^1.3.2"
24
+ "version": "^1.3.3"
25
25
  },
26
26
  "@stackonward/cms-client": {
27
27
  "name": "@stackonward/cms-client",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stackonward/cli",
3
- "version": "1.3.2",
3
+ "version": "1.3.3",
4
4
  "description": "StackOnward CLI for creating projects and installing reusable components and snippets",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -36,8 +36,8 @@
36
36
  "ora": "^8.0.0",
37
37
  "prompts": "^2.4.2",
38
38
  "zod": "4",
39
- "@stackonward/api-client": "0.0.2",
40
- "@stackonward/google-tag-manager": "0.1.1"
39
+ "@stackonward/google-tag-manager": "0.1.1",
40
+ "@stackonward/api-client": "0.0.2"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/fs-extra": "^11.0.4",