shopify-nuxt 0.0.10 → 0.0.11

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
@@ -6,7 +6,9 @@
6
6
 
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE.md)
8
8
  [![npm version](https://badge.fury.io/js/shopify-nuxt.svg)](https://badge.fury.io/js/shopify-nuxt)
9
+ [![NPM Downloads](https://img.shields.io/npm/dm/shopify-nuxt)](https://npmtrends.com/shopify-nuxt)
9
10
  [![Nuxt](https://img.shields.io/badge/Nuxt-020420?logo=nuxt)](https://nuxt.com)
11
+ [![npm bundle size (minified + gzip)](https://img.shields.io/bundlephobia/minzip/shopify-nuxt.svg)](https://img.shields.io/bundlephobia/minzip/shopify-nuxt.svg)
10
12
 
11
13
  This package makes it easy to use [Nuxt](https://nuxt.com/) to build Shopify apps.
12
14
 
@@ -391,6 +393,10 @@ Content: `ShText`, `ShHeading`, `ShParagraph`, `ShIcon`, `ShImage`, `ShThumbnail
391
393
 
392
394
  Other: `ShModal`, `ShQueryContainer`
393
395
 
396
+ App Bridge UI: `ShUiModal`, `ShUiTitleBar`, `ShUiSaveBar`, `ShUiNavMenu`
397
+
398
+ Loading: `ShLoadingIndicator`
399
+
394
400
  ### Using `ShModal`
395
401
 
396
402
  `ShModal` wraps the [Polaris `<s-modal>`](https://shopify.dev/docs/api/app-home/web-components/overlays/modal) component — it renders **inside** your app's iframe. Open and close it using `commandFor` / `command` attributes:
@@ -417,7 +423,142 @@ Other: `ShModal`, `ShQueryContainer`
417
423
  </template>
418
424
  ```
419
425
 
420
- > **Note**: `ShModal` is **not** the same as the [App Bridge `<ui-modal>`](https://shopify.dev/docs/api/app-bridge-library/apis/modal) which renders outside the iframe and is controlled via `shopify.modal.show(id)`. If you need the App Bridge modal, use `<ui-modal>` directly.
426
+ > **Note**: `ShModal` is **not** the same as the [App Bridge `<ui-modal>`](https://shopify.dev/docs/api/app-bridge-library/apis/modal) which renders outside the iframe and is controlled via `shopify.modal.show(id)`. If you need the App Bridge modal, use `<ShUiModal>` (see below).
427
+
428
+ ### App Bridge UI components
429
+
430
+ In addition to the Polaris `Sh*` components (which wrap `s-*` web components rendered **inside** your app's iframe), this module also provides Vue wrappers for [App Bridge UI web components](https://shopify.dev/docs/api/app-bridge-library/web-components) (`ui-*`). These render **outside** the app iframe in the Shopify Admin shell.
431
+
432
+ #### Polaris (`Sh*`) vs App Bridge (`ShUi*`) — what's the difference?
433
+
434
+ | | Polaris (`Sh*`) | App Bridge (`ShUi*`) |
435
+ | ------------------ | ----------------------------------------- | --------------------------------------------------------------------------------- |
436
+ | **HTML elements** | `<s-button>`, `<s-modal>`, etc. | `<ui-modal>`, `<ui-title-bar>`, etc. |
437
+ | **Renders in** | Your app's iframe | Shopify Admin (outside the iframe) |
438
+ | **Use for** | In-app UI: forms, tables, buttons, layout | Admin-level chrome: page title, modals overlaying the admin, save bar, navigation |
439
+ | **Controlled via** | Props, slots, `command`/`commandFor` | Props, template refs, `shopify.modal.show(id)` |
440
+
441
+ #### `<ShUiModal>`
442
+
443
+ Wraps [`<ui-modal>`](https://shopify.dev/docs/api/app-bridge-library/web-components/ui-modal) — renders a full-screen overlay **outside** the iframe, managed by Shopify Admin.
444
+
445
+ ```vue
446
+ <script setup>
447
+ const modalRef = ref()
448
+ </script>
449
+
450
+ <template>
451
+ <ShButton @click="modalRef.show()">Open Modal</ShButton>
452
+
453
+ <ShUiModal ref="modalRef" id="my-modal" variant="large" @hide="onClose">
454
+ <p>This content renders outside the iframe.</p>
455
+
456
+ <template #title-bar>
457
+ <ShUiTitleBar title="Edit Product">
458
+ <button variant="primary" onclick="handleSave()">Save</button>
459
+ <button onclick="document.getElementById('my-modal').hide()">
460
+ Cancel
461
+ </button>
462
+ </ShUiTitleBar>
463
+ </template>
464
+ </ShUiModal>
465
+ </template>
466
+ ```
467
+
468
+ | Prop | Type | Default | Description |
469
+ | --------- | --------------------------------------- | -------- | ------------------------------------------------------ |
470
+ | `id` | `string` | — | Unique identifier (used with `shopify.modal.show(id)`) |
471
+ | `variant` | `'small' \| 'base' \| 'large' \| 'max'` | `'base'` | Modal size |
472
+ | `src` | `string` | — | URL to load in an iframe inside the modal |
473
+
474
+ | Event | Description |
475
+ | ------ | ----------------------------- |
476
+ | `show` | Emitted when the modal opens |
477
+ | `hide` | Emitted when the modal closes |
478
+
479
+ Exposed methods via template ref: `show()`, `hide()`, `toggle()`
480
+
481
+ #### `<ShUiTitleBar>`
482
+
483
+ Wraps [`<ui-title-bar>`](https://shopify.dev/docs/api/app-bridge-library/web-components/ui-title-bar) — sets the page title and action buttons in the Shopify Admin title bar.
484
+
485
+ ```vue
486
+ <template>
487
+ <ShUiTitleBar title="Products">
488
+ <button variant="primary" onclick="createProduct()">Create product</button>
489
+ <button onclick="exportProducts()">Export</button>
490
+ </ShUiTitleBar>
491
+ </template>
492
+ ```
493
+
494
+ | Prop | Type | Description |
495
+ | ------- | -------- | ------------------------------------------ |
496
+ | `title` | `string` | The title displayed in the Admin title bar |
497
+
498
+ Child elements: `<button>` (with optional `variant="primary"` and `tone="critical"`), `<a>` (with optional `variant="breadcrumb"`), and `<section>` groups.
499
+
500
+ #### `<ShUiSaveBar>`
501
+
502
+ Wraps [`<ui-save-bar>`](https://shopify.dev/docs/api/app-bridge-library/web-components/ui-save-bar) — shows a contextual save bar at the top of the Admin when there are unsaved changes.
503
+
504
+ ```vue
505
+ <script setup>
506
+ const saveBarRef = ref()
507
+
508
+ function onFormChange() {
509
+ saveBarRef.value.show()
510
+ }
511
+ </script>
512
+
513
+ <template>
514
+ <ShUiSaveBar ref="saveBarRef" id="my-save-bar" discard-confirmation>
515
+ <button variant="primary" onclick="handleSave()">Save</button>
516
+ <button onclick="handleDiscard()">Discard</button>
517
+ </ShUiSaveBar>
518
+ </template>
519
+ ```
520
+
521
+ | Prop | Type | Description |
522
+ | --------------------- | --------- | ------------------------------------- |
523
+ | `id` | `string` | Unique identifier |
524
+ | `discardConfirmation` | `boolean` | Show a confirmation dialog on discard |
525
+
526
+ | Event | Description |
527
+ | ------ | -------------------------------------- |
528
+ | `show` | Emitted when the save bar appears |
529
+ | `hide` | Emitted when the save bar is dismissed |
530
+
531
+ Exposed methods via template ref: `show()`, `hide()`, `toggle()`
532
+
533
+ #### `<ShUiNavMenu>`
534
+
535
+ Wraps [`<ui-nav-menu>`](https://shopify.dev/docs/api/app-bridge-library/web-components/ui-nav-menu) — configures the app's navigation menu in the Shopify Admin sidebar.
536
+
537
+ ```vue
538
+ <template>
539
+ <ShUiNavMenu>
540
+ <a href="/" rel="home">Home</a>
541
+ <a href="/products">Products</a>
542
+ <a href="/settings">Settings</a>
543
+ </ShUiNavMenu>
544
+ </template>
545
+ ```
546
+
547
+ > **Tip**: For most apps, use the `navLinks` config option with `<ShopifyAppProvider>` instead of `<ShUiNavMenu>` directly. Use `<ShUiNavMenu>` only when you need dynamic or conditional navigation.
548
+
549
+ ### Loading indicator
550
+
551
+ `<ShLoadingIndicator>` hooks into Nuxt's `useLoadingIndicator()` and calls `shopify.loading()` to show/hide the Shopify Admin's native top loading bar during page navigations:
552
+
553
+ ```vue
554
+ <!-- app.vue -->
555
+ <template>
556
+ <ShLoadingIndicator />
557
+ <NuxtPage />
558
+ </template>
559
+ ```
560
+
561
+ This replaces `<NuxtLoadingIndicator>` with the native Shopify loading bar for a more integrated experience.
421
562
 
422
563
  ## OAuth routes
423
564
 
@@ -442,20 +583,21 @@ To load your app within the Shopify Admin, you need to:
442
583
 
443
584
  ## Features
444
585
 
445
- | Feature | Description |
446
- | ------------------- | ------------------------------------------------------------------------------- |
447
- | **Authentication** | OAuth flow, session tokens, token exchange — all handled automatically |
448
- | **App Bridge** | CDN-based App Bridge with full TypeScript types via `@shopify/app-bridge-types` |
449
- | **Polaris** | Vue wrapper components (`Sh*`) for all Polaris web components with typed props |
450
- | **Typed GraphQL** | Admin and Storefront API clients typed via `@shopify/admin-api-client` |
451
- | **Webhooks** | HMAC validation, payload parsing, and webhook registration |
452
- | **Admin API** | GraphQL and REST clients with automatic session management |
453
- | **Storefront API** | Typed GraphQL client for Storefront API via `@shopify/storefront-api-client` |
454
- | **Billing** | Billing context for subscription and usage-based charges |
455
- | **Session storage** | Built-in `MemorySessionStorage` default, pluggable via `configureShopify()` |
456
- | **Auto-imports** | Server utilities, client composables, and components are auto-imported |
457
- | **Bot detection** | Admin auth automatically detects bots and returns 410 to avoid unnecessary auth |
458
- | **CORS** | Built-in CORS helpers for public/checkout extension endpoints |
586
+ | Feature | Description |
587
+ | ------------------- | ---------------------------------------------------------------------------------------------- |
588
+ | **Authentication** | OAuth flow, session tokens, token exchange — all handled automatically |
589
+ | **App Bridge** | CDN-based App Bridge with full TypeScript types via `@shopify/app-bridge-types` |
590
+ | **Polaris** | Vue wrapper components (`Sh*`) for all Polaris web components with typed props |
591
+ | **App Bridge UI** | Vue wrappers (`ShUi*`) for App Bridge `ui-*` components (modal, title bar, save bar, nav menu) |
592
+ | **Typed GraphQL** | Admin and Storefront API clients typed via `@shopify/admin-api-client` |
593
+ | **Webhooks** | HMAC validation, payload parsing, and webhook registration |
594
+ | **Admin API** | GraphQL and REST clients with automatic session management |
595
+ | **Storefront API** | Typed GraphQL client for Storefront API via `@shopify/storefront-api-client` |
596
+ | **Billing** | Billing context for subscription and usage-based charges |
597
+ | **Session storage** | Built-in `MemorySessionStorage` default, pluggable via `configureShopify()` |
598
+ | **Auto-imports** | Server utilities, client composables, and components are auto-imported |
599
+ | **Bot detection** | Admin auth automatically detects bots and returns 410 to avoid unnecessary auth |
600
+ | **CORS** | Built-in CORS helpers for public/checkout extension endpoints |
459
601
 
460
602
  ## Server utilities
461
603
 
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "shopify-nuxt",
3
3
  "configKey": "shopify",
4
- "version": "0.0.10",
4
+ "version": "0.0.11",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "unknown"
@@ -0,0 +1,36 @@
1
+ type __VLS_Props = {
2
+ id?: string;
3
+ variant?: 'small' | 'base' | 'large' | 'max';
4
+ src?: string;
5
+ };
6
+ declare function show(): any;
7
+ declare function hide(): any;
8
+ declare function toggle(): any;
9
+ declare var __VLS_12: {}, __VLS_14: {}, __VLS_16: {};
10
+ type __VLS_Slots = {} & {
11
+ default?: (props: typeof __VLS_12) => any;
12
+ } & {
13
+ 'title-bar'?: (props: typeof __VLS_14) => any;
14
+ } & {
15
+ 'save-bar'?: (props: typeof __VLS_16) => any;
16
+ };
17
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
18
+ show: typeof show;
19
+ hide: typeof hide;
20
+ toggle: typeof toggle;
21
+ el: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
22
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
23
+ show: (event: Event) => void;
24
+ hide: (event: Event) => void;
25
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
26
+ onShow?: ((event: Event) => any) | undefined;
27
+ onHide?: ((event: Event) => any) | undefined;
28
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
29
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
30
+ declare const _default: typeof __VLS_export;
31
+ export default _default;
32
+ type __VLS_WithSlots<T, S> = T & {
33
+ new (): {
34
+ $slots: S;
35
+ };
36
+ };
@@ -0,0 +1,39 @@
1
+ <template>
2
+ <ui-modal
3
+ ref="modalRef"
4
+ v-bind="polarisAttrs"
5
+ @show="emit('show', $event)"
6
+ @hide="emit('hide', $event)"
7
+ >
8
+ <slot />
9
+ <slot name="title-bar" />
10
+ <slot name="save-bar" />
11
+ </ui-modal>
12
+ </template>
13
+
14
+ <script setup>
15
+ import { ref } from "vue";
16
+ import { usePolarisAttrs } from "./utils";
17
+ defineOptions({ name: "ShUiModal", inheritAttrs: false });
18
+ const props = defineProps({
19
+ id: { type: String, required: false },
20
+ variant: { type: String, required: false },
21
+ src: { type: String, required: false }
22
+ });
23
+ const emit = defineEmits(["show", "hide"]);
24
+ const polarisAttrs = usePolarisAttrs(props);
25
+ const modalRef = ref(null);
26
+ function getEl() {
27
+ return modalRef.value;
28
+ }
29
+ function show() {
30
+ return getEl()?.show?.();
31
+ }
32
+ function hide() {
33
+ return getEl()?.hide?.();
34
+ }
35
+ function toggle() {
36
+ return getEl()?.toggle?.();
37
+ }
38
+ defineExpose({ show, hide, toggle, el: modalRef });
39
+ </script>
@@ -0,0 +1,36 @@
1
+ type __VLS_Props = {
2
+ id?: string;
3
+ variant?: 'small' | 'base' | 'large' | 'max';
4
+ src?: string;
5
+ };
6
+ declare function show(): any;
7
+ declare function hide(): any;
8
+ declare function toggle(): any;
9
+ declare var __VLS_12: {}, __VLS_14: {}, __VLS_16: {};
10
+ type __VLS_Slots = {} & {
11
+ default?: (props: typeof __VLS_12) => any;
12
+ } & {
13
+ 'title-bar'?: (props: typeof __VLS_14) => any;
14
+ } & {
15
+ 'save-bar'?: (props: typeof __VLS_16) => any;
16
+ };
17
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
18
+ show: typeof show;
19
+ hide: typeof hide;
20
+ toggle: typeof toggle;
21
+ el: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
22
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
23
+ show: (event: Event) => void;
24
+ hide: (event: Event) => void;
25
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
26
+ onShow?: ((event: Event) => any) | undefined;
27
+ onHide?: ((event: Event) => any) | undefined;
28
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
29
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
30
+ declare const _default: typeof __VLS_export;
31
+ export default _default;
32
+ type __VLS_WithSlots<T, S> = T & {
33
+ new (): {
34
+ $slots: S;
35
+ };
36
+ };
@@ -0,0 +1,13 @@
1
+ declare var __VLS_8: {};
2
+ type __VLS_Slots = {} & {
3
+ default?: (props: typeof __VLS_8) => any;
4
+ };
5
+ declare const __VLS_base: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
6
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
9
+ type __VLS_WithSlots<T, S> = T & {
10
+ new (): {
11
+ $slots: S;
12
+ };
13
+ };
@@ -0,0 +1,9 @@
1
+ <template>
2
+ <ui-nav-menu v-bind="$attrs">
3
+ <slot />
4
+ </ui-nav-menu>
5
+ </template>
6
+
7
+ <script setup>
8
+ defineOptions({ name: "ShUiNavMenu", inheritAttrs: false });
9
+ </script>
@@ -0,0 +1,13 @@
1
+ declare var __VLS_8: {};
2
+ type __VLS_Slots = {} & {
3
+ default?: (props: typeof __VLS_8) => any;
4
+ };
5
+ declare const __VLS_base: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
6
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
9
+ type __VLS_WithSlots<T, S> = T & {
10
+ new (): {
11
+ $slots: S;
12
+ };
13
+ };
@@ -0,0 +1,31 @@
1
+ type __VLS_Props = {
2
+ id?: string;
3
+ discardConfirmation?: boolean;
4
+ };
5
+ declare function show(): any;
6
+ declare function hide(): any;
7
+ declare function toggle(): any;
8
+ declare var __VLS_12: {};
9
+ type __VLS_Slots = {} & {
10
+ default?: (props: typeof __VLS_12) => any;
11
+ };
12
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
13
+ show: typeof show;
14
+ hide: typeof hide;
15
+ toggle: typeof toggle;
16
+ el: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
17
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
18
+ show: (event: Event) => void;
19
+ hide: (event: Event) => void;
20
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
21
+ onShow?: ((event: Event) => any) | undefined;
22
+ onHide?: ((event: Event) => any) | undefined;
23
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
24
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
25
+ declare const _default: typeof __VLS_export;
26
+ export default _default;
27
+ type __VLS_WithSlots<T, S> = T & {
28
+ new (): {
29
+ $slots: S;
30
+ };
31
+ };
@@ -0,0 +1,36 @@
1
+ <template>
2
+ <ui-save-bar
3
+ ref="saveBarRef"
4
+ v-bind="polarisAttrs"
5
+ @show="emit('show', $event)"
6
+ @hide="emit('hide', $event)"
7
+ >
8
+ <slot />
9
+ </ui-save-bar>
10
+ </template>
11
+
12
+ <script setup>
13
+ import { ref } from "vue";
14
+ import { usePolarisAttrs } from "./utils";
15
+ defineOptions({ name: "ShUiSaveBar", inheritAttrs: false });
16
+ const props = defineProps({
17
+ id: { type: String, required: false },
18
+ discardConfirmation: { type: Boolean, required: false }
19
+ });
20
+ const emit = defineEmits(["show", "hide"]);
21
+ const polarisAttrs = usePolarisAttrs(props);
22
+ const saveBarRef = ref(null);
23
+ function getEl() {
24
+ return saveBarRef.value;
25
+ }
26
+ function show() {
27
+ return getEl()?.show?.();
28
+ }
29
+ function hide() {
30
+ return getEl()?.hide?.();
31
+ }
32
+ function toggle() {
33
+ return getEl()?.toggle?.();
34
+ }
35
+ defineExpose({ show, hide, toggle, el: saveBarRef });
36
+ </script>
@@ -0,0 +1,31 @@
1
+ type __VLS_Props = {
2
+ id?: string;
3
+ discardConfirmation?: boolean;
4
+ };
5
+ declare function show(): any;
6
+ declare function hide(): any;
7
+ declare function toggle(): any;
8
+ declare var __VLS_12: {};
9
+ type __VLS_Slots = {} & {
10
+ default?: (props: typeof __VLS_12) => any;
11
+ };
12
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
13
+ show: typeof show;
14
+ hide: typeof hide;
15
+ toggle: typeof toggle;
16
+ el: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
17
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
18
+ show: (event: Event) => void;
19
+ hide: (event: Event) => void;
20
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
21
+ onShow?: ((event: Event) => any) | undefined;
22
+ onHide?: ((event: Event) => any) | undefined;
23
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
24
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
25
+ declare const _default: typeof __VLS_export;
26
+ export default _default;
27
+ type __VLS_WithSlots<T, S> = T & {
28
+ new (): {
29
+ $slots: S;
30
+ };
31
+ };
@@ -0,0 +1,16 @@
1
+ type __VLS_Props = {
2
+ title?: string;
3
+ };
4
+ declare var __VLS_8: {};
5
+ type __VLS_Slots = {} & {
6
+ default?: (props: typeof __VLS_8) => any;
7
+ };
8
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
10
+ declare const _default: typeof __VLS_export;
11
+ export default _default;
12
+ type __VLS_WithSlots<T, S> = T & {
13
+ new (): {
14
+ $slots: S;
15
+ };
16
+ };
@@ -0,0 +1,14 @@
1
+ <template>
2
+ <ui-title-bar v-bind="polarisAttrs">
3
+ <slot />
4
+ </ui-title-bar>
5
+ </template>
6
+
7
+ <script setup>
8
+ import { usePolarisAttrs } from "./utils";
9
+ defineOptions({ name: "ShUiTitleBar", inheritAttrs: false });
10
+ const props = defineProps({
11
+ title: { type: String, required: false }
12
+ });
13
+ const polarisAttrs = usePolarisAttrs(props);
14
+ </script>
@@ -0,0 +1,16 @@
1
+ type __VLS_Props = {
2
+ title?: string;
3
+ };
4
+ declare var __VLS_8: {};
5
+ type __VLS_Slots = {} & {
6
+ default?: (props: typeof __VLS_8) => any;
7
+ };
8
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
10
+ declare const _default: typeof __VLS_export;
11
+ export default _default;
12
+ type __VLS_WithSlots<T, S> = T & {
13
+ new (): {
14
+ $slots: S;
15
+ };
16
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shopify-nuxt",
3
- "version": "0.0.10",
3
+ "version": "0.0.11",
4
4
  "description": "Shopify app integration for Nuxt - authentication, webhooks, billing, and App Bridge",
5
5
  "repository": "kiriminaja/shopify-nuxt",
6
6
  "license": "MIT",