@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.
- package/build/commands/create/examples/default/AGENTS.md +3 -1
- package/build/commands/disable/index.d.ts +2 -0
- package/build/commands/disable/index.js +30 -0
- package/build/commands/disable/index.js.map +1 -0
- package/build/commands/enable/index.d.ts +2 -0
- package/build/commands/enable/index.js +30 -0
- package/build/commands/enable/index.js.map +1 -0
- package/build/data/mini-toggle.d.ts +6 -0
- package/build/data/mini-toggle.js +14 -0
- package/build/data/mini-toggle.js.map +1 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/gql.d.ts +7 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/gql.js +1 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/gql.js.map +1 -1
- package/build/data/types/autogenerated/shop-minis-admin-api/graphql.d.ts +29 -1244
- package/build/data/types/autogenerated/shop-minis-admin-api/graphql.js +55 -560
- package/build/data/types/autogenerated/shop-minis-admin-api/graphql.js.map +1 -1
- package/build/program.js +4 -0
- package/build/program.js.map +1 -1
- package/build/utils/scopes-validation.d.ts +8 -2
- package/build/utils/scopes-validation.js +27 -3
- package/build/utils/scopes-validation.js.map +1 -1
- package/dashboard/node_modules/.modules.yaml +1 -1
- package/dashboard/node_modules/.pnpm-workspace-state-v1.json +1 -1
- package/package.json +1 -1
- package/scripts/graphql-codegen.ts +13 -1
|
@@ -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**:
|
|
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,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,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,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;
|
|
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"}
|