@shopify/shop-minis-cli 0.3.1 → 0.3.2

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.
@@ -53,7 +53,7 @@ const CustomButton = () => {...} // Wrong if SDK Button exists
53
53
  - **Touch targets**: Minimum 48px height for all interactive elements
54
54
  - **Full-width buttons**: Use `className="w-full"` for primary actions
55
55
  - **List virtualization**: Use `<List>` component for >50 items
56
- - **Safe areas**: Respect device notches and system UI
56
+ - **Safe areas**: Use the `<SafeArea>` component to keep content clear of system UI (home indicator, navigation bar). It works like a `div` — pass classes and styles directly. For specific edges only (e.g., a sticky footer), use `edges={['bottom']}`. You can also use the `useSafeArea()` hook for pixel values or `var(--safe-area-inset-*)` CSS custom properties. **Do not use `env(safe-area-inset-*)`** — it is broken on Android. **Placement**: For apps without a router, wrap your top-level layout in `<SafeArea>`. For apps with a router, use `<SafeArea>` inside each screen/page component — not around the router itself — so each screen can control its own safe area edges independently.
57
57
  - **No hover states**: Design for touch, not mouse interaction
58
58
 
59
59
  ### 3. Performance Constraints
@@ -221,6 +221,7 @@ import {
221
221
  useShopNavigation,
222
222
  useAsyncStorage,
223
223
  useSecureStorage,
224
+ useSafeArea,
224
225
 
225
226
  // Core components
226
227
  Button,
@@ -228,6 +229,7 @@ import {
228
229
  MerchantCard,
229
230
  List,
230
231
  Image,
232
+ SafeArea,
231
233
 
232
234
  // UI components
233
235
  Alert,
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function loadCommand(parentProgram: Command): void;
@@ -0,0 +1,30 @@
1
+ import { Command } from 'commander';
2
+ import { handler as handleError } from '@shopify/cli-kit/node/error';
3
+ import { renderConfirmationPrompt, renderSuccess } from '@shopify/cli-kit/node/ui';
4
+ import { miniToggle } from '../../data/mini-toggle.js';
5
+ import { assertNetworkAndAuth } from '../../utils/common-tasks.js';
6
+ export function loadCommand(parentProgram) {
7
+ const command = new Command()
8
+ .name('disable')
9
+ .description('Disable your Shop Mini.')
10
+ .option('--verbose', 'Print debugging messages.')
11
+ .action(async () => {
12
+ try {
13
+ await assertNetworkAndAuth();
14
+ const shouldContinue = await renderConfirmationPrompt({
15
+ message: 'Are you sure you want to disable your Mini?',
16
+ });
17
+ if (!shouldContinue)
18
+ return;
19
+ await miniToggle({ enable: false });
20
+ renderSuccess({
21
+ headline: 'Mini disabled',
22
+ });
23
+ }
24
+ catch (error) {
25
+ handleError(error);
26
+ }
27
+ });
28
+ parentProgram.addCommand(command);
29
+ }
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/disable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,OAAO,IAAI,WAAW,EAAC,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAC,wBAAwB,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAA;AAEhF,OAAO,EAAC,UAAU,EAAC,MAAM,2BAA2B,CAAA;AACpD,OAAO,EAAC,oBAAoB,EAAC,MAAM,6BAA6B,CAAA;AAEhE,MAAM,UAAU,WAAW,CAAC,aAAsB;IAChD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SAC1B,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC;SAChD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI;YACF,MAAM,oBAAoB,EAAE,CAAA;YAE5B,MAAM,cAAc,GAAG,MAAM,wBAAwB,CAAC;gBACpD,OAAO,EAAE,6CAA6C;aACvD,CAAC,CAAA;YACF,IAAI,CAAC,cAAc;gBAAE,OAAM;YAE3B,MAAM,UAAU,CAAC,EAAC,MAAM,EAAE,KAAK,EAAC,CAAC,CAAA;YAEjC,aAAa,CAAC;gBACZ,QAAQ,EAAE,eAAe;aAC1B,CAAC,CAAA;SACH;QAAC,OAAO,KAAK,EAAE;YACd,WAAW,CAAC,KAAK,CAAC,CAAA;SACnB;IACH,CAAC,CAAC,CAAA;IAEJ,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;AACnC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function loadCommand(parentProgram: Command): void;
@@ -0,0 +1,30 @@
1
+ import { Command } from 'commander';
2
+ import { handler as handleError } from '@shopify/cli-kit/node/error';
3
+ import { renderConfirmationPrompt, renderSuccess } from '@shopify/cli-kit/node/ui';
4
+ import { miniToggle } from '../../data/mini-toggle.js';
5
+ import { assertNetworkAndAuth } from '../../utils/common-tasks.js';
6
+ export function loadCommand(parentProgram) {
7
+ const command = new Command()
8
+ .name('enable')
9
+ .description('Enable your Shop Mini.')
10
+ .option('--verbose', 'Print debugging messages.')
11
+ .action(async () => {
12
+ try {
13
+ await assertNetworkAndAuth();
14
+ const shouldContinue = await renderConfirmationPrompt({
15
+ message: 'Are you sure you want to enable your Mini?',
16
+ });
17
+ if (!shouldContinue)
18
+ return;
19
+ await miniToggle({ enable: true });
20
+ renderSuccess({
21
+ headline: 'Mini enabled',
22
+ });
23
+ }
24
+ catch (error) {
25
+ handleError(error);
26
+ }
27
+ });
28
+ parentProgram.addCommand(command);
29
+ }
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/enable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,OAAO,IAAI,WAAW,EAAC,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAC,wBAAwB,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAA;AAEhF,OAAO,EAAC,UAAU,EAAC,MAAM,2BAA2B,CAAA;AACpD,OAAO,EAAC,oBAAoB,EAAC,MAAM,6BAA6B,CAAA;AAEhE,MAAM,UAAU,WAAW,CAAC,aAAsB;IAChD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SAC1B,IAAI,CAAC,QAAQ,CAAC;SACd,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC;SAChD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI;YACF,MAAM,oBAAoB,EAAE,CAAA;YAE5B,MAAM,cAAc,GAAG,MAAM,wBAAwB,CAAC;gBACpD,OAAO,EAAE,4CAA4C;aACtD,CAAC,CAAA;YACF,IAAI,CAAC,cAAc;gBAAE,OAAM;YAE3B,MAAM,UAAU,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAA;YAEhC,aAAa,CAAC;gBACZ,QAAQ,EAAE,cAAc;aACzB,CAAC,CAAA;SACH;QAAC,OAAO,KAAK,EAAE;YACd,WAAW,CAAC,KAAK,CAAC,CAAA;SACnB;IACH,CAAC,CAAC,CAAA;IAEJ,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;AACnC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare const miniToggle: ({ enable }: {
2
+ enable: boolean;
3
+ }) => Promise<{
4
+ __typename?: "MiniTogglePayload" | undefined;
5
+ enabled?: boolean | null | undefined;
6
+ }>;
@@ -0,0 +1,14 @@
1
+ import { graphql } from './types/autogenerated/shop-minis-admin-api/gql.js';
2
+ import { client } from './gql-client.js';
3
+ const miniToggleMutation = graphql(/* GraphQL */ `
4
+ mutation MiniToggle($enable: Boolean!) {
5
+ miniToggle(enable: $enable) {
6
+ enabled
7
+ }
8
+ }
9
+ `);
10
+ export const miniToggle = async ({ enable }) => {
11
+ const data = await client.request(miniToggleMutation, { enable }, {});
12
+ return data.miniToggle;
13
+ };
14
+ //# sourceMappingURL=mini-toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mini-toggle.js","sourceRoot":"","sources":["../../src/data/mini-toggle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,mDAAmD,CAAA;AACzE,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAA;AAEtC,MAAM,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC;;;;;;CAMhD,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,EAAC,MAAM,EAAoB,EAAE,EAAE;IAC9D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC,CAAA;IAEnE,OAAO,IAAI,CAAC,UAAU,CAAA;AACxB,CAAC,CAAA"}
@@ -43,6 +43,9 @@ declare const documents: {
43
43
  organizationId: string;
44
44
  partnersAccessToken: string;
45
45
  }>>;
46
+ '\n mutation MiniToggle($enable: Boolean!) {\n miniToggle(enable: $enable) {\n enabled\n }\n }\n': DocumentNode<types.MiniToggleMutation, types.Exact<{
47
+ enable: boolean;
48
+ }>>;
46
49
  '\n query Mini {\n mini {\n handle\n }\n }\n': DocumentNode<types.MiniQuery, types.Exact<{
47
50
  [key: string]: never;
48
51
  }>>;
@@ -101,6 +104,10 @@ export declare function graphql(source: '\n query Submissions($first: Int) {\n
101
104
  * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
102
105
  */
103
106
  export declare function graphql(source: '\n mutation MiniCreate(\n $name: String!\n $organizationId: ID!\n $partnersAccessToken: String!\n ) {\n miniCreate(\n name: $name\n organizationId: $organizationId\n partnersAccessToken: $partnersAccessToken\n ) {\n mini {\n handle\n }\n token\n userErrors {\n code\n message\n field\n }\n }\n }\n'): (typeof documents)['\n mutation MiniCreate(\n $name: String!\n $organizationId: ID!\n $partnersAccessToken: String!\n ) {\n miniCreate(\n name: $name\n organizationId: $organizationId\n partnersAccessToken: $partnersAccessToken\n ) {\n mini {\n handle\n }\n token\n userErrors {\n code\n message\n field\n }\n }\n }\n'];
107
+ /**
108
+ * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
109
+ */
110
+ export declare function graphql(source: '\n mutation MiniToggle($enable: Boolean!) {\n miniToggle(enable: $enable) {\n enabled\n }\n }\n'): (typeof documents)['\n mutation MiniToggle($enable: Boolean!) {\n miniToggle(enable: $enable) {\n enabled\n }\n }\n'];
104
111
  /**
105
112
  * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
106
113
  */
@@ -19,6 +19,7 @@ const documents = {
19
19
  '\n mutation CreateUpload(\n $filename: String!\n $fileSize: Int!\n $checksum: String!\n $mimeType: String!\n ) {\n submissionUploadCreate(\n input: {\n filename: $filename\n fileSize: $fileSize\n checksum: $checksum\n mimeType: $mimeType\n }\n ) {\n upload {\n url\n headers\n parameters\n id\n }\n userErrors {\n code\n message\n field\n }\n }\n }\n': types.CreateUploadDocument,
20
20
  '\n query Submissions($first: Int) {\n submissions(first: $first) {\n nodes {\n reference\n description\n status\n submittedAt\n feedbackMessage\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n': types.SubmissionsDocument,
21
21
  '\n mutation MiniCreate(\n $name: String!\n $organizationId: ID!\n $partnersAccessToken: String!\n ) {\n miniCreate(\n name: $name\n organizationId: $organizationId\n partnersAccessToken: $partnersAccessToken\n ) {\n mini {\n handle\n }\n token\n userErrors {\n code\n message\n field\n }\n }\n }\n': types.MiniCreateDocument,
22
+ '\n mutation MiniToggle($enable: Boolean!) {\n miniToggle(enable: $enable) {\n enabled\n }\n }\n': types.MiniToggleDocument,
22
23
  '\n query Mini {\n mini {\n handle\n }\n }\n': types.MiniDocument,
23
24
  '\n mutation UserMetafieldDefinitionCreate(\n $definition: UserMetafieldDefinitionCreateInput!\n ) {\n userMetafieldDefinitionCreate(definition: $definition) {\n createdDefinition {\n description\n name\n key\n }\n userErrors {\n code\n message\n field\n }\n }\n }\n': types.UserMetafieldDefinitionCreateDocument,
24
25
  '\n mutation UserMetafieldDefinitionDelete($key: String!) {\n userMetafieldDefinitionDelete(identifier: {key: $key}) {\n deletedDefinition {\n key\n }\n userErrors {\n code\n message\n field\n }\n }\n }\n': types.UserMetafieldDefinitionDeleteDocument,
@@ -1 +1 @@
1
- {"version":3,"file":"gql.js","sourceRoot":"","sources":["../../../../../src/data/types/autogenerated/shop-minis-admin-api/gql.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC;;;;;;;;;GASG;AACH,MAAM,SAAS,GAAG;IAChB,sSAAsS,EACpS,KAAK,CAAC,sBAAsB;IAC9B,kGAAkG,EAChG,KAAK,CAAC,eAAe;IACvB,2JAA2J,EACzJ,KAAK,CAAC,oBAAoB;IAC5B,wSAAwS,EACtS,KAAK,CAAC,wBAAwB;IAChC,ycAAyc,EACvc,KAAK,CAAC,wBAAwB;IAChC,meAAme,EACje,KAAK,CAAC,oBAAoB;IAC5B,qUAAqU,EACnU,KAAK,CAAC,mBAAmB;IAC3B,oYAAoY,EAClY,KAAK,CAAC,kBAAkB;IAC1B,0DAA0D,EACxD,KAAK,CAAC,YAAY;IACpB,qVAAqV,EACnV,KAAK,CAAC,qCAAqC;IAC7C,qQAAqQ,EACnQ,KAAK,CAAC,qCAAqC;IAC7C,0KAA0K,EACxK,KAAK,CAAC,gCAAgC;CACzC,CAAA;AAyFD,MAAM,UAAU,OAAO,CAAC,MAAc;IACpC,OAAQ,SAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;AACzC,CAAC"}
1
+ {"version":3,"file":"gql.js","sourceRoot":"","sources":["../../../../../src/data/types/autogenerated/shop-minis-admin-api/gql.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC;;;;;;;;;GASG;AACH,MAAM,SAAS,GAAG;IAChB,sSAAsS,EACpS,KAAK,CAAC,sBAAsB;IAC9B,kGAAkG,EAChG,KAAK,CAAC,eAAe;IACvB,2JAA2J,EACzJ,KAAK,CAAC,oBAAoB;IAC5B,wSAAwS,EACtS,KAAK,CAAC,wBAAwB;IAChC,ycAAyc,EACvc,KAAK,CAAC,wBAAwB;IAChC,meAAme,EACje,KAAK,CAAC,oBAAoB;IAC5B,qUAAqU,EACnU,KAAK,CAAC,mBAAmB;IAC3B,oYAAoY,EAClY,KAAK,CAAC,kBAAkB;IAC1B,8GAA8G,EAC5G,KAAK,CAAC,kBAAkB;IAC1B,0DAA0D,EACxD,KAAK,CAAC,YAAY;IACpB,qVAAqV,EACnV,KAAK,CAAC,qCAAqC;IAC7C,qQAAqQ,EACnQ,KAAK,CAAC,qCAAqC;IAC7C,0KAA0K,EACxK,KAAK,CAAC,gCAAgC;CACzC,CAAA;AA+FD,MAAM,UAAU,OAAO,CAAC,MAAc;IACpC,OAAQ,SAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;AACzC,CAAC"}