@gem-sdk/core 1.46.0-staging.1 → 1.46.0-staging.12

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.
Files changed (38) hide show
  1. package/dist/cjs/components/ComponentToolbarPreview.js +8 -2
  2. package/dist/cjs/components/Render.liquid.js +17 -7
  3. package/dist/cjs/components/ai-generator/AIContentGenerator.js +1 -1
  4. package/dist/cjs/graphql/queries/articles.generated.js +3 -1
  5. package/dist/cjs/graphql/queries/blogs.generated.js +3 -1
  6. package/dist/cjs/helpers/loop-component.js +16 -0
  7. package/dist/cjs/helpers/pascal-to-kebab-case.js +7 -0
  8. package/dist/cjs/helpers/remove-matching-key.js +12 -0
  9. package/dist/cjs/helpers/third-party/addAppBlockId.js +20 -0
  10. package/dist/cjs/helpers/third-party/appConfig.js +45 -0
  11. package/dist/cjs/helpers/third-party/appSetting.js +77 -0
  12. package/dist/cjs/helpers/third-party/composeAppBlockId.js +11 -0
  13. package/dist/cjs/helpers/third-party/constant.js +16 -0
  14. package/dist/cjs/helpers/third-party/generateAppBlockConfigs.js +21 -0
  15. package/dist/cjs/helpers/third-party/getAppBlockConfig.js +23 -0
  16. package/dist/cjs/helpers/third-party/getAppBlockType.js +12 -0
  17. package/dist/cjs/helpers/third-party/getAppBlocks.js +41 -0
  18. package/dist/cjs/index.js +4 -0
  19. package/dist/esm/components/ComponentToolbarPreview.js +8 -2
  20. package/dist/esm/components/Render.liquid.js +17 -7
  21. package/dist/esm/components/ai-generator/AIContentGenerator.js +1 -1
  22. package/dist/esm/graphql/queries/articles.generated.js +3 -1
  23. package/dist/esm/graphql/queries/blogs.generated.js +3 -1
  24. package/dist/esm/helpers/loop-component.js +14 -0
  25. package/dist/esm/helpers/pascal-to-kebab-case.js +5 -0
  26. package/dist/esm/helpers/remove-matching-key.js +10 -0
  27. package/dist/esm/helpers/third-party/addAppBlockId.js +18 -0
  28. package/dist/esm/helpers/third-party/appConfig.js +38 -0
  29. package/dist/esm/helpers/third-party/appSetting.js +75 -0
  30. package/dist/esm/helpers/third-party/composeAppBlockId.js +9 -0
  31. package/dist/esm/helpers/third-party/constant.js +13 -0
  32. package/dist/esm/helpers/third-party/generateAppBlockConfigs.js +19 -0
  33. package/dist/esm/helpers/third-party/getAppBlockConfig.js +21 -0
  34. package/dist/esm/helpers/third-party/getAppBlockType.js +10 -0
  35. package/dist/esm/helpers/third-party/getAppBlocks.js +39 -0
  36. package/dist/esm/index.js +2 -0
  37. package/dist/types/index.d.ts +35 -9
  38. package/package.json +3 -2
@@ -59,7 +59,8 @@ const ComponentToolbarPreview = (props)=>{
59
59
  const editProductElementList = [
60
60
  'Product Title',
61
61
  'Product Description',
62
- 'Product Price'
62
+ 'Product Price',
63
+ 'Product Vendor'
63
64
  ];
64
65
  const isOverToolbarPosition = (el, parent)=>{
65
66
  const parentLength = parents.length;
@@ -294,6 +295,11 @@ const ComponentToolbarPreview = (props)=>{
294
295
  const isEnableCreateThemeSection = ()=>{
295
296
  return editingPageType !== 'STATIC' && editingPageType !== 'POST_PURCHASE';
296
297
  };
298
+ const isEnableAIContent = ()=>{
299
+ const { isShopifySection, tag } = props;
300
+ if (isShopifySection || isThemeSection && !isThemeSectionEditor) return false;
301
+ return constant.ableGenerateContentElements.includes(tag);
302
+ };
297
303
  // if (!isActive) return null;
298
304
  return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
299
305
  children: [
@@ -459,7 +465,7 @@ const ComponentToolbarPreview = (props)=>{
459
465
  props.tag === 'Section' && !props.isThemeSection && isEnableCreateThemeSection() && !props.isShopifySection && getIndexSection() < SECTION_LIMIT && /*#__PURE__*/ jsxRuntime.jsx(CreateThemeSection.CreateThemeSection, {
460
466
  ...props
461
467
  }),
462
- !props.isShopifySection && constant.ableGenerateContentElements.includes(props.tag) && /*#__PURE__*/ jsxRuntime.jsx(AIContentGenerator.AIContentGenerator, {
468
+ isEnableAIContent() && /*#__PURE__*/ jsxRuntime.jsx(AIContentGenerator.AIContentGenerator, {
463
469
  ...props
464
470
  }),
465
471
  props.tag == 'Sticky' && /*#__PURE__*/ jsxRuntime.jsx("div", {
@@ -20,6 +20,7 @@ require('dayjs');
20
20
  var composeAdvanceStyle = require('../helpers/compose-advance-style.js');
21
21
  var convert = require('../helpers/convert.js');
22
22
  var render = require('../helpers/render.js');
23
+ var cssjson = require('cssjson');
23
24
 
24
25
  const componentsRenderWithParentId = [
25
26
  'CarouselItem'
@@ -181,19 +182,28 @@ const Render = ({ uid, builder, components, parentId, extraFiles = {}, pageConte
181
182
  };
182
183
  }
183
184
  };
185
+ const isEmptyCSS = (cssString)=>{
186
+ if (!cssString) return true;
187
+ const cssJSON = cssjson.toJSON(cssString);
188
+ const isObjectEmpty = (obj)=>{
189
+ if (typeof obj !== 'object' || obj === null) return true;
190
+ return !Object.keys(obj).some((key)=>{
191
+ return key === 'attributes' && Object.keys(obj[key]).length > 0 || typeof obj[key] === 'object' && !isObjectEmpty(obj[key]);
192
+ });
193
+ };
194
+ return isObjectEmpty(cssJSON.children);
195
+ };
184
196
  const RenderCustomCode = (item)=>{
185
197
  const { css, javascript, rootClassName } = item.advanced?.editorData || {};
186
198
  const replacedCSS = css?.replaceAll(rootClassName, item.uid);
187
199
  const replacedJS = javascript?.replaceAll(rootClassName, item.uid);
188
- const cssCode = render.RenderIf(!!css, render.template`
189
- <style
190
- id="${`custom-css-${item?.uid}`}"
191
- >${replacedCSS}</style>
200
+ const cssCode = render.RenderIf(!!css && !isEmptyCSS(replacedCSS), render.template`
201
+ <style id="${`custom-css-${item?.uid}`}">
202
+ ${replacedCSS}
203
+ </style>
192
204
  `);
193
205
  const jsCode = render.RenderIf(!!javascript, render.template`
194
- <script
195
- id="${`custom-js-${item?.uid}`}"
196
- >
206
+ <script id="${`custom-js-${item?.uid}`}">
197
207
  try {
198
208
  ${replacedJS}
199
209
  } catch(err){}
@@ -108,7 +108,7 @@ const AIContentGenerator = ({ ...props })=>{
108
108
  ref: genTool,
109
109
  children: [
110
110
  /*#__PURE__*/ jsxRuntime.jsx("div", {
111
- className: "gp-gen-content-toolbar gp-border-r-[#6a6a6a] gp-border-r gp-pr-1 gp-mr-1",
111
+ className: "gp-gen-content-toolbar gp-border-r gp-pr-1 gp-mr-1",
112
112
  children: /*#__PURE__*/ jsxRuntime.jsxs("button", {
113
113
  className: classNames({
114
114
  'gp-toolbar-ai-active': isShowPopup
@@ -22,7 +22,9 @@ const ArticlesDocument = `
22
22
  descriptionMeta
23
23
  baseID
24
24
  platform
25
- tags
25
+ tags {
26
+ name
27
+ }
26
28
  isSample
27
29
  platformCreatedAt
28
30
  author
@@ -29,7 +29,9 @@ const BlogsDocument = `
29
29
  titleMeta
30
30
  descriptionMeta
31
31
  baseID
32
- tags
32
+ tags {
33
+ name
34
+ }
33
35
  isSample
34
36
  platformCreatedAt
35
37
  author
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ function loopComponent(component, callback) {
4
+ if (component) {
5
+ callback(component);
6
+ }
7
+ if (component?.childrens?.length) {
8
+ // eslint-disable-next-line
9
+ for(let i = 0; i < component.childrens.length; i++){
10
+ const children = component.childrens[i];
11
+ loopComponent(children, callback);
12
+ }
13
+ }
14
+ }
15
+
16
+ exports.loopComponent = loopComponent;
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ const pascalToKebab = (pascalCaseString)=>{
4
+ return pascalCaseString.replace(/[A-Z]/g, (match, offset)=>(offset ? '-' : '') + match.toLowerCase());
5
+ };
6
+
7
+ exports.pascalToKebab = pascalToKebab;
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ const removeMatchingKey = (obj, searchText)=>{
4
+ for(const key in obj){
5
+ if (key.includes(searchText)) {
6
+ delete obj[key];
7
+ }
8
+ }
9
+ return obj;
10
+ };
11
+
12
+ exports.removeMatchingKey = removeMatchingKey;
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ var loopComponent = require('../loop-component.js');
4
+ var composeAppBlockId = require('./composeAppBlockId.js');
5
+
6
+ const addAppBlockId = (component)=>{
7
+ const strComponent = JSON.stringify(component) || '';
8
+ if (!strComponent.includes('appBlockId')) {
9
+ return component;
10
+ }
11
+ loopComponent.loopComponent(component, (component)=>handleSetBlockId(component));
12
+ return component;
13
+ };
14
+ const handleSetBlockId = (component)=>{
15
+ const { tag, uid } = component;
16
+ if (component.settings.appBlockId === undefined) return component;
17
+ component.settings.appBlockId = composeAppBlockId.composeAppBlockId(tag, uid);
18
+ };
19
+
20
+ exports.addAppBlockId = addAppBlockId;
@@ -0,0 +1,45 @@
1
+ 'use strict';
2
+
3
+ const RechargeSubscriptionsConfig = {
4
+ RechargeSubscriptions: {
5
+ appName: 'recharge-subscriptions',
6
+ appId: '371eed76-0b44-4869-9813-730372ea378e'
7
+ }
8
+ };
9
+ const BonLoyaltyRewardsReferralsConfig = {
10
+ BonLoyaltyRewardsReferrals: {
11
+ appName: 'bon-loyalty',
12
+ appId: '63496a04-c097-48d1-8c11-475aec24b12e'
13
+ }
14
+ };
15
+ const SubifySubscriptionsConfig = {
16
+ SubifySubscriptionsApp: {
17
+ appName: 'subify-subscriptions-app',
18
+ appId: 'bc0dba25-cd46-4841-bea4-6bdfe9ac815f'
19
+ }
20
+ };
21
+ const SelleasyConfig = {
22
+ Selleasy: {
23
+ appName: 'selleasy',
24
+ appId: '790c1a03-a71f-4bc1-9869-00dad526d3c2'
25
+ }
26
+ };
27
+ const LoopSubscriptionsConfig = {
28
+ LoopSubscriptions: {
29
+ appName: 'Loop Subscriptions',
30
+ appId: '267a7c64-5cb3-4552-b817-5485165f0a0b'
31
+ }
32
+ };
33
+ const SkioSubscriptionsYcS20Config = {
34
+ SkioSubscriptionsYcS20: {
35
+ appName: 'skio-subscriptions-yc-s20',
36
+ appId: 'de50f7a4-0bb0-4d4c-84e2-c03dce83436d'
37
+ }
38
+ };
39
+
40
+ exports.BonLoyaltyRewardsReferralsConfig = BonLoyaltyRewardsReferralsConfig;
41
+ exports.LoopSubscriptionsConfig = LoopSubscriptionsConfig;
42
+ exports.RechargeSubscriptionsConfig = RechargeSubscriptionsConfig;
43
+ exports.SelleasyConfig = SelleasyConfig;
44
+ exports.SkioSubscriptionsYcS20Config = SkioSubscriptionsYcS20Config;
45
+ exports.SubifySubscriptionsConfig = SubifySubscriptionsConfig;
@@ -0,0 +1,77 @@
1
+ 'use strict';
2
+
3
+ const RechargeSubscriptions = {
4
+ RechargeSubscriptions: {
5
+ 'subscription-widget': {
6
+ product: '{{ product }}'
7
+ }
8
+ }
9
+ };
10
+ const LoyaltyRewardsReferrals = {
11
+ BonLoyaltyRewardsReferrals: {
12
+ 'loyalty-page-block': null,
13
+ 'loyalty-page-earning-block': null,
14
+ 'loyalty-page-header-block': null,
15
+ 'loyalty-page-profile-block': null,
16
+ 'loyalty-page-redeem-block': null,
17
+ 'loyalty-page-referral-block': null,
18
+ 'loyalty-page-tier-block': null,
19
+ 'product-point-preview': null
20
+ }
21
+ };
22
+ const SubifySubscriptions = {
23
+ SubifySubscriptionsApp: {
24
+ 'app-block': {
25
+ product: '{{product}}',
26
+ use_app_block_wording: false,
27
+ widget_label: 'Purchase options',
28
+ one_time_purchase_text: 'One-Time Purchase',
29
+ subscription_text: 'Subscribe and save',
30
+ delivery_frequency_text: 'Delivery frequency',
31
+ prepaid_subscription_text: 'Subscription with prepaid',
32
+ skin1_priceSuffix: 'each',
33
+ skin1_save: 'Save(skin1)',
34
+ skin1_prepaid_payment_title: 'prepaid',
35
+ skin1_normal_payment_title: 'pay as you go',
36
+ skin2_discountSuffix: 'Save',
37
+ skin3_fullPrice: 'Full price',
38
+ skin3_priceSuffix: 'each',
39
+ skin3_discountSuffix: 'Off',
40
+ skin4_justOnce: 'Just once',
41
+ skin4_discountSuffix: 'Off',
42
+ skin4_priceSuffix: 'each',
43
+ skin4_fullPrice: '(Full price)',
44
+ skin4_sellingPlansTitle: 'Renews every:',
45
+ from: 'from',
46
+ max_discount_badge_title: 'UP To',
47
+ pay: 'Pay',
48
+ price_save_up_to: 'save up to'
49
+ }
50
+ }
51
+ };
52
+ const SelleasyWidget = {
53
+ Selleasy: {
54
+ 'lb-upsell-fbt-block': null,
55
+ 'lb-upsell-addon-block': null
56
+ }
57
+ };
58
+ const LoopSubscriptions = {
59
+ LoopSubscriptions: {
60
+ 'star_rating': null
61
+ }
62
+ };
63
+ const SkioSubscriptionsYcS20 = {
64
+ SkioSubscriptionsYcS20: {
65
+ 'app-block': null
66
+ }
67
+ };
68
+ const composeSettingsByWidgetType = {
69
+ ...SkioSubscriptionsYcS20,
70
+ ...LoopSubscriptions,
71
+ ...RechargeSubscriptions,
72
+ ...LoyaltyRewardsReferrals,
73
+ ...SubifySubscriptions,
74
+ ...SelleasyWidget
75
+ };
76
+
77
+ exports.composeSettingsByWidgetType = composeSettingsByWidgetType;
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ var pascalToKebabCase = require('../pascal-to-kebab-case.js');
4
+ var constant = require('./constant.js');
5
+
6
+ const composeAppBlockId = (tag, uid)=>{
7
+ const key = pascalToKebabCase.pascalToKebab(tag);
8
+ return `${constant.THIRD_PARTY_APP_BLOCK_ID_PREFIX}_${key}_${uid}`;
9
+ };
10
+
11
+ exports.composeAppBlockId = composeAppBlockId;
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ var appConfig = require('./appConfig.js');
4
+
5
+ const mapShopifyAppMeta = {
6
+ ...appConfig.RechargeSubscriptionsConfig,
7
+ ...appConfig.BonLoyaltyRewardsReferralsConfig,
8
+ ...appConfig.SubifySubscriptionsConfig,
9
+ ...appConfig.SelleasyConfig,
10
+ ...appConfig.LoopSubscriptionsConfig,
11
+ ...appConfig.SkioSubscriptionsYcS20Config
12
+ };
13
+ const THIRD_PARTY_APP_BLOCK_ID_PREFIX = 'gp_app';
14
+
15
+ exports.THIRD_PARTY_APP_BLOCK_ID_PREFIX = THIRD_PARTY_APP_BLOCK_ID_PREFIX;
16
+ exports.mapShopifyAppMeta = mapShopifyAppMeta;
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ var loopComponent = require('../loop-component.js');
4
+ var getAppBlockConfig = require('./getAppBlockConfig.js');
5
+
6
+ const generateAppBlockConfigs = (component)=>{
7
+ const strComponent = JSON.stringify(component) || '';
8
+ if (!strComponent.includes('appBlockId')) return null;
9
+ const configs = [];
10
+ loopComponent.loopComponent(component, (component)=>{
11
+ const settings = component.settings || {};
12
+ const appBlockId = settings?.appBlockId || '';
13
+ if (!appBlockId) return;
14
+ const config = getAppBlockConfig.getAppBlockConfig(component.tag, appBlockId, settings);
15
+ if (!config) return;
16
+ configs.push(config);
17
+ });
18
+ return configs;
19
+ };
20
+
21
+ exports.generateAppBlockConfigs = generateAppBlockConfigs;
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ var appSetting = require('./appSetting.js');
4
+ var getAppBlockType = require('./getAppBlockType.js');
5
+
6
+ const getAppBlockConfig = (tag, appBlockId, settings)=>{
7
+ const appBlockType = getAppBlockType.getAppBlockType({
8
+ tag,
9
+ widgetType: settings?.widgetType
10
+ });
11
+ const settingByWidget = appSetting.composeSettingsByWidgetType[tag][settings?.widgetType];
12
+ return {
13
+ key: appBlockId,
14
+ value: {
15
+ type: appBlockType,
16
+ ...settingByWidget && {
17
+ settings: settingByWidget
18
+ }
19
+ }
20
+ };
21
+ };
22
+
23
+ exports.getAppBlockConfig = getAppBlockConfig;
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var constant = require('./constant.js');
4
+
5
+ const getAppBlockType = ({ tag, widgetType })=>{
6
+ const shopifyAppMeta = constant.mapShopifyAppMeta[tag];
7
+ if (!shopifyAppMeta) return '';
8
+ const { appName, appId } = shopifyAppMeta;
9
+ return `shopify://apps/${appName}/blocks/${widgetType}/${appId}`;
10
+ };
11
+
12
+ exports.getAppBlockType = getAppBlockType;
@@ -0,0 +1,41 @@
1
+ 'use strict';
2
+
3
+ var removeMatchingKey = require('../remove-matching-key.js');
4
+ var addAppBlockId = require('./addAppBlockId.js');
5
+ var generateAppBlockConfigs = require('./generateAppBlockConfigs.js');
6
+
7
+ const getAppBlocks = (section, currentBlock, currentBlockOrder)=>{
8
+ const component = JSON.parse(section?.component || '');
9
+ const componentWithAppBlockId = addAppBlockId.addAppBlockId(component);
10
+ const appBlockConfigs = generateAppBlockConfigs.generateAppBlockConfigs(componentWithAppBlockId);
11
+ if (!appBlockConfigs?.length) {
12
+ return {
13
+ blocks: currentBlock,
14
+ block_order: currentBlockOrder
15
+ };
16
+ }
17
+ let newBlocks = currentBlock;
18
+ let newBlockOrder = currentBlockOrder;
19
+ appBlockConfigs.forEach(({ key, value })=>{
20
+ const newBlock = {
21
+ [key]: value
22
+ };
23
+ const oldKeyRemovedBlock = removeMatchingKey.removeMatchingKey(newBlocks, key);
24
+ newBlocks = {
25
+ ...oldKeyRemovedBlock,
26
+ ...newBlock
27
+ };
28
+ newBlockOrder = newBlockOrder ? [
29
+ ...newBlockOrder,
30
+ key
31
+ ] : [
32
+ key
33
+ ];
34
+ });
35
+ return {
36
+ blocks: newBlocks,
37
+ block_order: newBlockOrder
38
+ };
39
+ };
40
+
41
+ exports.getAppBlocks = getAppBlocks;
package/dist/cjs/index.js CHANGED
@@ -104,6 +104,8 @@ var animations$1 = require('./types/animations.js');
104
104
  var getCollection = require('./helpers/queries/get-collection.js');
105
105
  var getProduct = require('./helpers/queries/get-product.js');
106
106
  var getProductBySlug = require('./helpers/queries/get-product-by-slug.js');
107
+ var getAppBlocks = require('./helpers/third-party/getAppBlocks.js');
108
+ var addAppBlockId = require('./helpers/third-party/addAppBlockId.js');
107
109
 
108
110
 
109
111
 
@@ -387,3 +389,5 @@ exports.fetchMedias = getProduct.fetchMedias;
387
389
  exports.fetchVariants = getProduct.fetchVariants;
388
390
  exports.getProduct = getProduct.getProduct;
389
391
  exports.getProductBySlug = getProductBySlug.getProductBySlug;
392
+ exports.getAppBlocks = getAppBlocks.getAppBlocks;
393
+ exports.addAppBlockId = addAppBlockId.addAppBlockId;
@@ -55,7 +55,8 @@ const ComponentToolbarPreview = (props)=>{
55
55
  const editProductElementList = [
56
56
  'Product Title',
57
57
  'Product Description',
58
- 'Product Price'
58
+ 'Product Price',
59
+ 'Product Vendor'
59
60
  ];
60
61
  const isOverToolbarPosition = (el, parent)=>{
61
62
  const parentLength = parents.length;
@@ -290,6 +291,11 @@ const ComponentToolbarPreview = (props)=>{
290
291
  const isEnableCreateThemeSection = ()=>{
291
292
  return editingPageType !== 'STATIC' && editingPageType !== 'POST_PURCHASE';
292
293
  };
294
+ const isEnableAIContent = ()=>{
295
+ const { isShopifySection, tag } = props;
296
+ if (isShopifySection || isThemeSection && !isThemeSectionEditor) return false;
297
+ return ableGenerateContentElements.includes(tag);
298
+ };
293
299
  // if (!isActive) return null;
294
300
  return /*#__PURE__*/ jsxs(Fragment, {
295
301
  children: [
@@ -455,7 +461,7 @@ const ComponentToolbarPreview = (props)=>{
455
461
  props.tag === 'Section' && !props.isThemeSection && isEnableCreateThemeSection() && !props.isShopifySection && getIndexSection() < SECTION_LIMIT && /*#__PURE__*/ jsx(CreateThemeSection, {
456
462
  ...props
457
463
  }),
458
- !props.isShopifySection && ableGenerateContentElements.includes(props.tag) && /*#__PURE__*/ jsx(AIContentGenerator, {
464
+ isEnableAIContent() && /*#__PURE__*/ jsx(AIContentGenerator, {
459
465
  ...props
460
466
  }),
461
467
  props.tag == 'Sticky' && /*#__PURE__*/ jsx("div", {
@@ -16,6 +16,7 @@ import 'dayjs';
16
16
  import { composeAdvanceStyle } from '../helpers/compose-advance-style.js';
17
17
  import { baseAssetURL, isLocalEnv } from '../helpers/convert.js';
18
18
  import { RenderIf, template } from '../helpers/render.js';
19
+ import { toJSON } from 'cssjson';
19
20
 
20
21
  const componentsRenderWithParentId = [
21
22
  'CarouselItem'
@@ -177,19 +178,28 @@ const Render = ({ uid, builder, components, parentId, extraFiles = {}, pageConte
177
178
  };
178
179
  }
179
180
  };
181
+ const isEmptyCSS = (cssString)=>{
182
+ if (!cssString) return true;
183
+ const cssJSON = toJSON(cssString);
184
+ const isObjectEmpty = (obj)=>{
185
+ if (typeof obj !== 'object' || obj === null) return true;
186
+ return !Object.keys(obj).some((key)=>{
187
+ return key === 'attributes' && Object.keys(obj[key]).length > 0 || typeof obj[key] === 'object' && !isObjectEmpty(obj[key]);
188
+ });
189
+ };
190
+ return isObjectEmpty(cssJSON.children);
191
+ };
180
192
  const RenderCustomCode = (item)=>{
181
193
  const { css, javascript, rootClassName } = item.advanced?.editorData || {};
182
194
  const replacedCSS = css?.replaceAll(rootClassName, item.uid);
183
195
  const replacedJS = javascript?.replaceAll(rootClassName, item.uid);
184
- const cssCode = RenderIf(!!css, template`
185
- <style
186
- id="${`custom-css-${item?.uid}`}"
187
- >${replacedCSS}</style>
196
+ const cssCode = RenderIf(!!css && !isEmptyCSS(replacedCSS), template`
197
+ <style id="${`custom-css-${item?.uid}`}">
198
+ ${replacedCSS}
199
+ </style>
188
200
  `);
189
201
  const jsCode = RenderIf(!!javascript, template`
190
- <script
191
- id="${`custom-js-${item?.uid}`}"
192
- >
202
+ <script id="${`custom-js-${item?.uid}`}">
193
203
  try {
194
204
  ${replacedJS}
195
205
  } catch(err){}
@@ -106,7 +106,7 @@ const AIContentGenerator = ({ ...props })=>{
106
106
  ref: genTool,
107
107
  children: [
108
108
  /*#__PURE__*/ jsx("div", {
109
- className: "gp-gen-content-toolbar gp-border-r-[#6a6a6a] gp-border-r gp-pr-1 gp-mr-1",
109
+ className: "gp-gen-content-toolbar gp-border-r gp-pr-1 gp-mr-1",
110
110
  children: /*#__PURE__*/ jsxs("button", {
111
111
  className: classNames({
112
112
  'gp-toolbar-ai-active': isShowPopup
@@ -20,7 +20,9 @@ const ArticlesDocument = `
20
20
  descriptionMeta
21
21
  baseID
22
22
  platform
23
- tags
23
+ tags {
24
+ name
25
+ }
24
26
  isSample
25
27
  platformCreatedAt
26
28
  author
@@ -27,7 +27,9 @@ const BlogsDocument = `
27
27
  titleMeta
28
28
  descriptionMeta
29
29
  baseID
30
- tags
30
+ tags {
31
+ name
32
+ }
31
33
  isSample
32
34
  platformCreatedAt
33
35
  author
@@ -0,0 +1,14 @@
1
+ function loopComponent(component, callback) {
2
+ if (component) {
3
+ callback(component);
4
+ }
5
+ if (component?.childrens?.length) {
6
+ // eslint-disable-next-line
7
+ for(let i = 0; i < component.childrens.length; i++){
8
+ const children = component.childrens[i];
9
+ loopComponent(children, callback);
10
+ }
11
+ }
12
+ }
13
+
14
+ export { loopComponent };
@@ -0,0 +1,5 @@
1
+ const pascalToKebab = (pascalCaseString)=>{
2
+ return pascalCaseString.replace(/[A-Z]/g, (match, offset)=>(offset ? '-' : '') + match.toLowerCase());
3
+ };
4
+
5
+ export { pascalToKebab };
@@ -0,0 +1,10 @@
1
+ const removeMatchingKey = (obj, searchText)=>{
2
+ for(const key in obj){
3
+ if (key.includes(searchText)) {
4
+ delete obj[key];
5
+ }
6
+ }
7
+ return obj;
8
+ };
9
+
10
+ export { removeMatchingKey };
@@ -0,0 +1,18 @@
1
+ import { loopComponent } from '../loop-component.js';
2
+ import { composeAppBlockId } from './composeAppBlockId.js';
3
+
4
+ const addAppBlockId = (component)=>{
5
+ const strComponent = JSON.stringify(component) || '';
6
+ if (!strComponent.includes('appBlockId')) {
7
+ return component;
8
+ }
9
+ loopComponent(component, (component)=>handleSetBlockId(component));
10
+ return component;
11
+ };
12
+ const handleSetBlockId = (component)=>{
13
+ const { tag, uid } = component;
14
+ if (component.settings.appBlockId === undefined) return component;
15
+ component.settings.appBlockId = composeAppBlockId(tag, uid);
16
+ };
17
+
18
+ export { addAppBlockId };
@@ -0,0 +1,38 @@
1
+ const RechargeSubscriptionsConfig = {
2
+ RechargeSubscriptions: {
3
+ appName: 'recharge-subscriptions',
4
+ appId: '371eed76-0b44-4869-9813-730372ea378e'
5
+ }
6
+ };
7
+ const BonLoyaltyRewardsReferralsConfig = {
8
+ BonLoyaltyRewardsReferrals: {
9
+ appName: 'bon-loyalty',
10
+ appId: '63496a04-c097-48d1-8c11-475aec24b12e'
11
+ }
12
+ };
13
+ const SubifySubscriptionsConfig = {
14
+ SubifySubscriptionsApp: {
15
+ appName: 'subify-subscriptions-app',
16
+ appId: 'bc0dba25-cd46-4841-bea4-6bdfe9ac815f'
17
+ }
18
+ };
19
+ const SelleasyConfig = {
20
+ Selleasy: {
21
+ appName: 'selleasy',
22
+ appId: '790c1a03-a71f-4bc1-9869-00dad526d3c2'
23
+ }
24
+ };
25
+ const LoopSubscriptionsConfig = {
26
+ LoopSubscriptions: {
27
+ appName: 'Loop Subscriptions',
28
+ appId: '267a7c64-5cb3-4552-b817-5485165f0a0b'
29
+ }
30
+ };
31
+ const SkioSubscriptionsYcS20Config = {
32
+ SkioSubscriptionsYcS20: {
33
+ appName: 'skio-subscriptions-yc-s20',
34
+ appId: 'de50f7a4-0bb0-4d4c-84e2-c03dce83436d'
35
+ }
36
+ };
37
+
38
+ export { BonLoyaltyRewardsReferralsConfig, LoopSubscriptionsConfig, RechargeSubscriptionsConfig, SelleasyConfig, SkioSubscriptionsYcS20Config, SubifySubscriptionsConfig };
@@ -0,0 +1,75 @@
1
+ const RechargeSubscriptions = {
2
+ RechargeSubscriptions: {
3
+ 'subscription-widget': {
4
+ product: '{{ product }}'
5
+ }
6
+ }
7
+ };
8
+ const LoyaltyRewardsReferrals = {
9
+ BonLoyaltyRewardsReferrals: {
10
+ 'loyalty-page-block': null,
11
+ 'loyalty-page-earning-block': null,
12
+ 'loyalty-page-header-block': null,
13
+ 'loyalty-page-profile-block': null,
14
+ 'loyalty-page-redeem-block': null,
15
+ 'loyalty-page-referral-block': null,
16
+ 'loyalty-page-tier-block': null,
17
+ 'product-point-preview': null
18
+ }
19
+ };
20
+ const SubifySubscriptions = {
21
+ SubifySubscriptionsApp: {
22
+ 'app-block': {
23
+ product: '{{product}}',
24
+ use_app_block_wording: false,
25
+ widget_label: 'Purchase options',
26
+ one_time_purchase_text: 'One-Time Purchase',
27
+ subscription_text: 'Subscribe and save',
28
+ delivery_frequency_text: 'Delivery frequency',
29
+ prepaid_subscription_text: 'Subscription with prepaid',
30
+ skin1_priceSuffix: 'each',
31
+ skin1_save: 'Save(skin1)',
32
+ skin1_prepaid_payment_title: 'prepaid',
33
+ skin1_normal_payment_title: 'pay as you go',
34
+ skin2_discountSuffix: 'Save',
35
+ skin3_fullPrice: 'Full price',
36
+ skin3_priceSuffix: 'each',
37
+ skin3_discountSuffix: 'Off',
38
+ skin4_justOnce: 'Just once',
39
+ skin4_discountSuffix: 'Off',
40
+ skin4_priceSuffix: 'each',
41
+ skin4_fullPrice: '(Full price)',
42
+ skin4_sellingPlansTitle: 'Renews every:',
43
+ from: 'from',
44
+ max_discount_badge_title: 'UP To',
45
+ pay: 'Pay',
46
+ price_save_up_to: 'save up to'
47
+ }
48
+ }
49
+ };
50
+ const SelleasyWidget = {
51
+ Selleasy: {
52
+ 'lb-upsell-fbt-block': null,
53
+ 'lb-upsell-addon-block': null
54
+ }
55
+ };
56
+ const LoopSubscriptions = {
57
+ LoopSubscriptions: {
58
+ 'star_rating': null
59
+ }
60
+ };
61
+ const SkioSubscriptionsYcS20 = {
62
+ SkioSubscriptionsYcS20: {
63
+ 'app-block': null
64
+ }
65
+ };
66
+ const composeSettingsByWidgetType = {
67
+ ...SkioSubscriptionsYcS20,
68
+ ...LoopSubscriptions,
69
+ ...RechargeSubscriptions,
70
+ ...LoyaltyRewardsReferrals,
71
+ ...SubifySubscriptions,
72
+ ...SelleasyWidget
73
+ };
74
+
75
+ export { composeSettingsByWidgetType };
@@ -0,0 +1,9 @@
1
+ import { pascalToKebab } from '../pascal-to-kebab-case.js';
2
+ import { THIRD_PARTY_APP_BLOCK_ID_PREFIX } from './constant.js';
3
+
4
+ const composeAppBlockId = (tag, uid)=>{
5
+ const key = pascalToKebab(tag);
6
+ return `${THIRD_PARTY_APP_BLOCK_ID_PREFIX}_${key}_${uid}`;
7
+ };
8
+
9
+ export { composeAppBlockId };
@@ -0,0 +1,13 @@
1
+ import { RechargeSubscriptionsConfig, BonLoyaltyRewardsReferralsConfig, SubifySubscriptionsConfig, SelleasyConfig, LoopSubscriptionsConfig, SkioSubscriptionsYcS20Config } from './appConfig.js';
2
+
3
+ const mapShopifyAppMeta = {
4
+ ...RechargeSubscriptionsConfig,
5
+ ...BonLoyaltyRewardsReferralsConfig,
6
+ ...SubifySubscriptionsConfig,
7
+ ...SelleasyConfig,
8
+ ...LoopSubscriptionsConfig,
9
+ ...SkioSubscriptionsYcS20Config
10
+ };
11
+ const THIRD_PARTY_APP_BLOCK_ID_PREFIX = 'gp_app';
12
+
13
+ export { THIRD_PARTY_APP_BLOCK_ID_PREFIX, mapShopifyAppMeta };
@@ -0,0 +1,19 @@
1
+ import { loopComponent } from '../loop-component.js';
2
+ import { getAppBlockConfig } from './getAppBlockConfig.js';
3
+
4
+ const generateAppBlockConfigs = (component)=>{
5
+ const strComponent = JSON.stringify(component) || '';
6
+ if (!strComponent.includes('appBlockId')) return null;
7
+ const configs = [];
8
+ loopComponent(component, (component)=>{
9
+ const settings = component.settings || {};
10
+ const appBlockId = settings?.appBlockId || '';
11
+ if (!appBlockId) return;
12
+ const config = getAppBlockConfig(component.tag, appBlockId, settings);
13
+ if (!config) return;
14
+ configs.push(config);
15
+ });
16
+ return configs;
17
+ };
18
+
19
+ export { generateAppBlockConfigs };
@@ -0,0 +1,21 @@
1
+ import { composeSettingsByWidgetType } from './appSetting.js';
2
+ import { getAppBlockType } from './getAppBlockType.js';
3
+
4
+ const getAppBlockConfig = (tag, appBlockId, settings)=>{
5
+ const appBlockType = getAppBlockType({
6
+ tag,
7
+ widgetType: settings?.widgetType
8
+ });
9
+ const settingByWidget = composeSettingsByWidgetType[tag][settings?.widgetType];
10
+ return {
11
+ key: appBlockId,
12
+ value: {
13
+ type: appBlockType,
14
+ ...settingByWidget && {
15
+ settings: settingByWidget
16
+ }
17
+ }
18
+ };
19
+ };
20
+
21
+ export { getAppBlockConfig };
@@ -0,0 +1,10 @@
1
+ import { mapShopifyAppMeta } from './constant.js';
2
+
3
+ const getAppBlockType = ({ tag, widgetType })=>{
4
+ const shopifyAppMeta = mapShopifyAppMeta[tag];
5
+ if (!shopifyAppMeta) return '';
6
+ const { appName, appId } = shopifyAppMeta;
7
+ return `shopify://apps/${appName}/blocks/${widgetType}/${appId}`;
8
+ };
9
+
10
+ export { getAppBlockType };
@@ -0,0 +1,39 @@
1
+ import { removeMatchingKey } from '../remove-matching-key.js';
2
+ import { addAppBlockId } from './addAppBlockId.js';
3
+ import { generateAppBlockConfigs } from './generateAppBlockConfigs.js';
4
+
5
+ const getAppBlocks = (section, currentBlock, currentBlockOrder)=>{
6
+ const component = JSON.parse(section?.component || '');
7
+ const componentWithAppBlockId = addAppBlockId(component);
8
+ const appBlockConfigs = generateAppBlockConfigs(componentWithAppBlockId);
9
+ if (!appBlockConfigs?.length) {
10
+ return {
11
+ blocks: currentBlock,
12
+ block_order: currentBlockOrder
13
+ };
14
+ }
15
+ let newBlocks = currentBlock;
16
+ let newBlockOrder = currentBlockOrder;
17
+ appBlockConfigs.forEach(({ key, value })=>{
18
+ const newBlock = {
19
+ [key]: value
20
+ };
21
+ const oldKeyRemovedBlock = removeMatchingKey(newBlocks, key);
22
+ newBlocks = {
23
+ ...oldKeyRemovedBlock,
24
+ ...newBlock
25
+ };
26
+ newBlockOrder = newBlockOrder ? [
27
+ ...newBlockOrder,
28
+ key
29
+ ] : [
30
+ key
31
+ ];
32
+ });
33
+ return {
34
+ blocks: newBlocks,
35
+ block_order: newBlockOrder
36
+ };
37
+ };
38
+
39
+ export { getAppBlocks };
package/dist/esm/index.js CHANGED
@@ -107,3 +107,5 @@ export { AnimationDirectionType, AnimationEasingType, AnimationSetting, Animatio
107
107
  export { calculateFirstProduct, getCollection } from './helpers/queries/get-collection.js';
108
108
  export { fetchMedias, fetchVariants, getProduct } from './helpers/queries/get-product.js';
109
109
  export { getProductBySlug } from './helpers/queries/get-product-by-slug.js';
110
+ export { getAppBlocks } from './helpers/third-party/getAppBlocks.js';
111
+ export { addAppBlockId } from './helpers/third-party/addAppBlockId.js';
@@ -75,7 +75,7 @@ type Article$2 = {
75
75
  platform?: Maybe$1<ArticlePlatform$1>;
76
76
  platformCreatedAt?: Maybe$1<Scalars$2['Time']>;
77
77
  platformUpdatedAt?: Maybe$1<Scalars$2['Time']>;
78
- tags: Array<Scalars$2['String']>;
78
+ tags?: Maybe$1<Array<Maybe$1<Tag$1>>>;
79
79
  templateSuffix?: Maybe$1<Scalars$2['String']>;
80
80
  title?: Maybe$1<Scalars$2['String']>;
81
81
  titleMeta?: Maybe$1<Scalars$2['String']>;
@@ -2333,6 +2333,7 @@ type Entity = {
2333
2333
  findPublishedThemePageOnlineStoreDataByID: PublishedThemePageOnlineStoreData$1;
2334
2334
  findPublishedThemeSectionByID: PublishedThemeSection$1;
2335
2335
  findPublishedThemeStyleByID: PublishedThemeStyle$1;
2336
+ findTagByID: Tag$1;
2336
2337
  };
2337
2338
  type EntityFindMetafieldByIdArgs = {
2338
2339
  id: Scalars$2['ID'];
@@ -2373,6 +2374,9 @@ type EntityFindPublishedThemeSectionByIdArgs = {
2373
2374
  type EntityFindPublishedThemeStyleByIdArgs = {
2374
2375
  id: Scalars$2['ID'];
2375
2376
  };
2377
+ type EntityFindTagByIdArgs = {
2378
+ id: Scalars$2['ID'];
2379
+ };
2376
2380
  type Media$1 = {
2377
2381
  alt?: Maybe$1<Scalars$2['String']>;
2378
2382
  contentType?: Maybe$1<Scalars$2['String']>;
@@ -5429,9 +5433,6 @@ type PublishedThemePage$1 = {
5429
5433
  themePageOnlineStoreData?: Maybe$1<Array<Maybe$1<PublishedThemePageOnlineStoreData$1>>>;
5430
5434
  type: PublishedThemePageType$1;
5431
5435
  updatedAt?: Maybe$1<Scalars$2['Time']>;
5432
- publishedAt?: Maybe$1<Scalars$2['Time']>;
5433
- isPlatformDefault?: boolean;
5434
- platformOriginalTemplateContent?: string;
5435
5436
  };
5436
5437
  type PublishedThemePageCustomSection$1 = {
5437
5438
  id: Scalars$2['ID'];
@@ -6334,6 +6335,12 @@ type StoreProperty$1 = {
6334
6335
  primaryDomain?: Maybe$1<Scalars$2['String']>;
6335
6336
  swatchesConfig: Scalars$2['String'];
6336
6337
  };
6338
+ type Tag$1 = {
6339
+ createdAt?: Maybe$1<Scalars$2['Time']>;
6340
+ id: Scalars$2['ID'];
6341
+ name?: Maybe$1<Scalars$2['String']>;
6342
+ updatedAt?: Maybe$1<Scalars$2['Time']>;
6343
+ };
6337
6344
  type TagType$1 = 'ARTICLE' | 'BLOG' | 'COLLECTION' | 'PRODUCT';
6338
6345
  /**
6339
6346
  * TagWhereInput is used for filtering Tag objects.
@@ -6452,7 +6459,7 @@ type VariantProductOptionWhereInput$1 = {
6452
6459
  variantIDNEQ?: InputMaybe$1<Scalars$2['ID']>;
6453
6460
  variantIDNotIn?: InputMaybe$1<Array<Scalars$2['ID']>>;
6454
6461
  };
6455
- type _Entity = Metafield$1 | Product$1 | PublishedCustomSection$1 | PublishedPageInteraction$1 | PublishedPageSection$1 | PublishedPageSectionMeta$1 | PublishedShopMeta$1 | PublishedThemePage$1 | PublishedThemePageCustomSection$1 | PublishedThemePageMeta$1 | PublishedThemePageOnlineStoreData$1 | PublishedThemeSection$1 | PublishedThemeStyle$1;
6462
+ type _Entity = Metafield$1 | Product$1 | PublishedCustomSection$1 | PublishedPageInteraction$1 | PublishedPageSection$1 | PublishedPageSectionMeta$1 | PublishedShopMeta$1 | PublishedThemePage$1 | PublishedThemePageCustomSection$1 | PublishedThemePageMeta$1 | PublishedThemePageOnlineStoreData$1 | PublishedThemeSection$1 | PublishedThemeStyle$1 | Tag$1;
6456
6463
  type _Service = {
6457
6464
  sdl?: Maybe$1<Scalars$2['String']>;
6458
6465
  };
@@ -6471,6 +6478,7 @@ type shop_EntityFindPublishedThemePageMetaByIdArgs = EntityFindPublishedThemePag
6471
6478
  type shop_EntityFindPublishedThemePageOnlineStoreDataByIdArgs = EntityFindPublishedThemePageOnlineStoreDataByIdArgs;
6472
6479
  type shop_EntityFindPublishedThemeSectionByIdArgs = EntityFindPublishedThemeSectionByIdArgs;
6473
6480
  type shop_EntityFindPublishedThemeStyleByIdArgs = EntityFindPublishedThemeStyleByIdArgs;
6481
+ type shop_EntityFindTagByIdArgs = EntityFindTagByIdArgs;
6474
6482
  type shop_Query_EntitiesArgs = Query_EntitiesArgs;
6475
6483
  type shop__Entity = _Entity;
6476
6484
  type shop__Service = _Service;
@@ -6553,6 +6561,7 @@ declare namespace shop {
6553
6561
  shop_EntityFindPublishedThemePageOnlineStoreDataByIdArgs as EntityFindPublishedThemePageOnlineStoreDataByIdArgs,
6554
6562
  shop_EntityFindPublishedThemeSectionByIdArgs as EntityFindPublishedThemeSectionByIdArgs,
6555
6563
  shop_EntityFindPublishedThemeStyleByIdArgs as EntityFindPublishedThemeStyleByIdArgs,
6564
+ shop_EntityFindTagByIdArgs as EntityFindTagByIdArgs,
6556
6565
  Exact$1 as Exact,
6557
6566
  InputMaybe$1 as InputMaybe,
6558
6567
  MakeMaybe$1 as MakeMaybe,
@@ -6693,6 +6702,7 @@ declare namespace shop {
6693
6702
  ShopShopify$1 as ShopShopify,
6694
6703
  ShopTokenWhereInput$1 as ShopTokenWhereInput,
6695
6704
  StoreProperty$1 as StoreProperty,
6705
+ Tag$1 as Tag,
6696
6706
  TagType$1 as TagType,
6697
6707
  TagWhereInput$1 as TagWhereInput,
6698
6708
  VariantProductOptionWhereInput$1 as VariantProductOptionWhereInput,
@@ -37217,7 +37227,8 @@ type ArticlesQueryVariables = Exact$1<{
37217
37227
  type ArticlesQueryResponse = {
37218
37228
  articles?: Maybe$1<(Pick<ArticleConnection$1, 'totalCount'> & {
37219
37229
  edges: Array<(Pick<ArticleEdge$1, 'cursor'> & {
37220
- node?: Maybe$1<(Pick<Article$2, 'id' | 'title' | 'handle' | 'description' | 'templateSuffix' | 'titleMeta' | 'descriptionMeta' | 'baseID' | 'platform' | 'tags' | 'isSample' | 'platformCreatedAt' | 'author'> & {
37230
+ node?: Maybe$1<(Pick<Article$2, 'id' | 'title' | 'handle' | 'description' | 'templateSuffix' | 'titleMeta' | 'descriptionMeta' | 'baseID' | 'platform' | 'isSample' | 'platformCreatedAt' | 'author'> & {
37231
+ tags: Array<never>;
37221
37232
  content?: Maybe$1<Pick<ArticleContent$1, 'excerptHtml'>>;
37222
37233
  blogs?: Maybe$1<{
37223
37234
  edges: Array<{
@@ -37246,9 +37257,15 @@ type BlogsQueryResponse = {
37246
37257
  node?: Maybe$1<(Pick<Blog$1, 'baseID' | 'description' | 'descriptionMeta' | 'handle' | 'id' | 'platform' | 'tags' | 'templateSuffix' | 'title' | 'titleMeta'> & {
37247
37258
  articles?: Maybe$1<(Pick<ArticleConnection$1, 'totalCount'> & {
37248
37259
  edges: Array<(Pick<ArticleEdge$1, 'cursor'> & {
37249
- node?: Maybe$1<(Pick<Article$2, 'id' | 'title' | 'handle' | 'description' | 'templateSuffix' | 'titleMeta' | 'descriptionMeta' | 'baseID' | 'tags' | 'isSample' | 'platformCreatedAt' | 'author'> & {
37260
+ node?: Maybe$1<(Pick<Article$2, 'id' | 'title' | 'handle' | 'description' | 'templateSuffix' | 'titleMeta' | 'descriptionMeta' | 'baseID' | 'platform' | 'isSample' | 'platformCreatedAt' | 'author'> & {
37261
+ tags: Array<never>;
37250
37262
  content?: Maybe$1<Pick<ArticleContent$1, 'excerptHtml'>>;
37251
- media?: Maybe$1<Pick<Media$1, 'width' | 'src' | 'height'>>;
37263
+ blogs?: Maybe$1<{
37264
+ edges: Array<{
37265
+ node?: Maybe$1<Pick<Blog$1, 'title' | 'handle'>>;
37266
+ }>;
37267
+ }>;
37268
+ media?: Maybe$1<Pick<Media$1, 'alt' | 'width' | 'src' | 'height'>>;
37252
37269
  })>;
37253
37270
  })>;
37254
37271
  })>;
@@ -37343,4 +37360,13 @@ type PublishedThemePageSelectFragment = Pick<PublishedThemePage$1, 'id' | 'name'
37343
37360
 
37344
37361
  declare const getProductBySlug: (fetcher: FetchFunc, slug?: string) => Promise<ProductSelectFragment>;
37345
37362
 
37346
- export { AddOn, AddonProvider, AddonProviderProps, AdvancedType, AliReviewsWidgetType, AlignItemProp, AlignProp, AnimationBaseSetting, AnimationConfig, AnimationDirectionType, AnimationEasingType, AnimationFadeSettingType, AnimationSetting, AnimationSettingType, AnimationShakeSettingType, AnimationSlideSettingType, AnimationTrigger, AnimationTriggerType, AnimationType, AnimationZoomDirectionType, AnimationZoomSettingType, appAPI as AppAPIType, ArticleListProvider, ArticleListProviderProps, ArticleProvider, ArticleProviderProps, Background, BaseProps, BasePropsWrap, BlockEntity, BogosWidgetType, BoldSubscriptionsWidgetType, Border, BorderStyle, BuilderComponentProvider, BuilderComponentProviderProps, BuilderEntity, BuilderEntityNested, BuilderPreviewProvider, BuilderPreviewProviderProps, BuilderProvider, BuilderProviderProps, BuilderState, Builtin, CartLineProvider, CartLineProviderProps, CollectionDetailFilterDocument, CollectionDetailFilterQueryResponse, CollectionDetailFilterQueryVariables, CollectionDocument, CollectionProvider, CollectionProviderProps, CollectionQueryResponse, CollectionQueryVariables, CollectionSelectFragment, CollectionsDocument, CollectionsQueryResponse, CollectionsQueryVariables, ColorKey, ColorType$1 as ColorType, ColorValueType, Component, ComponentPreset, ComponentSetting, ContainerProp, ControlProp, ControlTriggerAction, ControlUI, CornerRadius, CornerRadiusType, CustomComponentConfig, DeepPartial, DynamicCollection, DynamicProduct, ExtractState, FeraReviewsV3WidgetType, FeraReviewsWidgetType, FetchCollectionArgs, FetchFunc, FetchProductParams, FlexDirectionProp, FontName, GRADIENT_BGR_KEY, GlobalStyleConfig, GlobalStyleResponsiveConfig, GlobalSwatchesData, GraphQLConnection, GroupPropType, GrowaveWidgetType, HSLAColorType, HSLColorType, HexColorType, ImageShape$1 as ImageShape, InitComponentType, InstantJudgeMeReviewsWidgetType, InstantKlaviyoWidgetType, InstantLooxReviewsWidgetType, JudgeMeReviewsWidgetType, KlaviyoWidgetType, LaiProductReviewsAdvancedWidgetType, LaiProductReviewsWidgetType, LibrarySaleFunnelDocument, LibrarySaleFunnelQueryResponse, LibrarySaleFunnelQueryVariables, LibraryTemplateDocument, LibraryTemplateQueryResponse, LibraryTemplateQueryVariables, LooxReviewsWidgetType, ModalProvider, ModalProviderProps, NameDevices$1 as NameDevices, NestedKeys, ObjectDeviceGlobalType, ObjectDevices, ObjectLayoutValue, OmnisendWidgetType, OnlyOne, OpinewDesignWidgetType, OpinewWidgetType, OptionNormalStyle, OptionSpecialStyle, Options, PageContext, PageProvider, PageProviderProps, PageType, PageViewUpDocument, PageViewUpMutationResponse, PageViewUpMutationVariables, PickyStoryWidgetType, PostPurchaseTypo, PreviewPageDocument, PreviewPageQueryResponse, PreviewPageQueryVariables, Primitive, ProductInputAnalytic, ProductListProvider, ProductListProviderProps, ProductOffer, ProductProvider, ProductProviderProps, ProductReviewsWidgetType, ProductSelectFragment, ProductsDocument, ProductsQueryResponse, ProductsQueryVariables, PublicStoreFrontData, PublishedThemePageSelectFragment, PublishedThemePagesDocument, PublishedThemePagesQueryResponse, PublishedThemePagesQueryVariables, RGBAColorType, RGBColorType, Ratio$1 as Ratio, RawChild, RenderMemo as Render, RenderChildren, RenderIf, Render as RenderLiquid, RenderMode, RenderPreviewMemo as RenderPreview, RequiredCursorEdge, ResponsiveKey, ResponsiveStateProp, RivyoWidgetType, RoundedSize, RyviuWidgetType, SaleFunnelDiscount$1 as SaleFunnelDiscount, SaleFunnelDiscountEdge$1 as SaleFunnelDiscountEdge, SaleFunnelDiscountObjectType$1 as SaleFunnelDiscountObjectType, SaleFunnelDiscountType$1 as SaleFunnelDiscountType, SaleFunnelDiscountValueType$1 as SaleFunnelDiscountValueType, SaleFunnelDiscountsDocument, SaleFunnelDiscountsQueryResponse, SaleFunnelDiscountsQueryVariables, Scalars$1 as Scalars, ScaleByDirection, SectionData, SectionEntity, SectionProvider, SectionProviderProps, SettingByAnimationType, SettingByAnimationValues, ShadowProps, ShadowStyle, ShadowStyleApplied, ShadowType, ShopProvider, ShopProviderProps, shop as ShopType, SizeProps, SizeSetting, SizeSettingGlobal, SizeType, SpacingType, StampedWidgetType, StateProp, StateSelector, StateType, StoreConfig, StorePropertyDocument, StorePropertyQueryResponse, StorePropertyQueryVariables, SwatchesOptionType, SwatchesOptionValue, ThemePageDocument, ThemePageQueryResponse, ThemePageQueryVariables, ThemeSectionStatus$1 as ThemeSectionStatus, TransformProp, TriggerConfig, TrustooWidgetType, TypographyProps, TypographySetting, TypographySettingV2, TypographyType, TypographyV2Attrs, TypographyV2Props, UltimateSalesBoostWidgetType, VariantSelectFragment, VitalsWidgetType, WiserV2WidgetType, WiserWidgetType, WrapRenderChildren, YotpoReviewsWidgetType, animations, baseAssetURL, calculateFirstProduct, checkAvailableVariantInStock, cls, composeAdvanceStyle, composeAdvanceStyleForPostPurchase, composeBackgroundCss, composeBorderCss, composeCornerCss, composeFallbackTypographyStyle, composeFontFamilyTypographyV2, composeGridLayout, composeMemo, composePositionLineHeight, composePostionIconList, composeRadius, composeRadiusResponsive, composeShadowCss, composeSize, composeSizeCss, composeSpacing, composeTextColorCss, composeTypography, composeTypographyAttr, composeTypographyClassName, composeTypographyCss, composeTypographyStyle, composeTypographyV2, composeTypographyV2Css, convertHTML, convertOldLayout, dataStringify, fetchMedias, fetchVariants, filterAttrInStyle, filterCornerInStyle, filterToolbarPreview, flattenConnection, fpixel, genSizeClass, genTypoClass, genVariable, generateCollectionQueryKey, generateProductQueryKey, generateProductsQueryKey, getAspectRatioGlobalSize, getBgImageByDevice, getBorderRadiusStyle, getBorderStyle, getCarouselContainerHeight, getCollection, getCornerCSSFromGlobal, getCustomRadius, getGlobalColorCSSProp, getGlobalColorClass, getGlobalColorResponsiveClass, getGlobalColorResponsiveStyle, getGlobalColorStateClass, getGlobalColorStateClassDynamicBtn, getGlobalColorStateResponsiveClass, getGlobalColorStateResponsiveClassDynamicBtn, getGlobalColorStateResponsiveStyle, getGlobalColorStateStyle, getGlobalColorStyle, getGlobalSizeGap, getGradientBgrStyleByDevice, getGradientBgrStyleForButton, getHeightByShapeGlobalSize, getPaddingGlobalSize, getProduct, getProductBySlug, getRadiusCSSFromGlobal, getRadiusStyleActiveState, getResponsiveStateValue, getResponsiveValue, getResponsiveValueByScreen, getSelectedVariant, getShortName, getSingleColorVariable, getSpacingVariable, getStyleBackgroundByDevice, getStyleBgColor, getStyleShadow, getStyleShadowState, getValueByDevice, getWidthByShapeGlobalSize, getWidthHeightGlobalSize, globalEvent, gridToArrayRegex, gtag, handleConvertBorderColor, handleConvertBorderStyle, handleConvertBorderWidth, handleConvertClassColor, handleConvertClassColorDynamicBtn, isBrowser, isColor, isColumnDirectionExist, isDefined, isEmptyChildren, isLocalEnv, isSafari, loadScript, makeAspectRatio, makeContainerWidthOrHeight, makeDotGapToCarouselStyle, makeFixedBgAttachment, makeGlobalSize, makeGlobalSizeHeightResponsive, makeGlobalSizeIcon, makeGlobalSizeWidthResponsive, makeHeight, makeLineClamp, makeStyle, makeStyleKey, makeStyleResponsive, makeStyleResponsiveByScreen, makeStyleResponsiveState, makeStyleState, makeStyleWithDefault, makeWidth, normalizeBuilderData, optionLayoutStyle, parseSelectedOption, parseValueWithUnit, prefetchQueries, props, removeAttrInStyle, removeNullUndefined, removePaddingYInStyle, removeUndefinedValuesFromObject, shopifyPriceRounding, splitStyle, styles, template, tiktokpixel, useAddToCart, useAddon, useAddons, useArticleListStore, useArticleStore, useArticlesQuery, useBlogsQuery, useBuilderComponent, useBuilderPreviewStore, useBuilderStore, useCartData, useCartDiscountCodesUpdate, useCartId, useCartLine, useCartLineStore, useCartNoteUpdate, useCartUI, useCheckAvailableVariantInStock, useCheckoutUrl, useCollection, useCollectionQuery, useCollectionStore, useCollectionsQuery, useConnectedShopify, useCreateCart, useCurrency, useCurrentDevice, useCurrentVariant, useCurrentVariantInStock, useEditorMode, useFeaturedImageGlobal, useFormatMoney, useInitialSwatchesOptions, useIsSampleProduct, useIsStorefrontProduct, useIsSyncProduct, useIsomorphicLayoutEffect, useLazyVideo, useLoadScript, useLocale, useMatchMutate, useMobileOnly, useModalStore, useMoney, useMoneyFormat, usePageStore, usePageType, usePluginEnable, usePrevious, useProduct, useProductList, useProductListProducts, useProductListSettings, useProductListStore, useProductListStyles, useProductOfferDiscount, useProductProperties, useProductQuery, useProductStore, useProductsQuery, useProductsQueryAll, useQuantity, useRemoveCartItem, useSection, useSectionStore, useSelectedOption, useShopStore, useStoreFront, useSuspenseFetch, useSwatches, useSwatchesOptions, useUniqProductID, useUpdateCartItem, useVariant, useVariantOutStock, useVariants, validateEmail };
37363
+ declare const getAppBlocks: (section: PublishedPageSection$1 & {
37364
+ appBlocks: string;
37365
+ }, currentBlock: {}, currentBlockOrder: string[]) => {
37366
+ blocks: {};
37367
+ block_order: string[];
37368
+ };
37369
+
37370
+ declare const addAppBlockId: (component: Component) => Component;
37371
+
37372
+ export { AddOn, AddonProvider, AddonProviderProps, AdvancedType, AliReviewsWidgetType, AlignItemProp, AlignProp, AnimationBaseSetting, AnimationConfig, AnimationDirectionType, AnimationEasingType, AnimationFadeSettingType, AnimationSetting, AnimationSettingType, AnimationShakeSettingType, AnimationSlideSettingType, AnimationTrigger, AnimationTriggerType, AnimationType, AnimationZoomDirectionType, AnimationZoomSettingType, appAPI as AppAPIType, ArticleListProvider, ArticleListProviderProps, ArticleProvider, ArticleProviderProps, Background, BaseProps, BasePropsWrap, BlockEntity, BogosWidgetType, BoldSubscriptionsWidgetType, Border, BorderStyle, BuilderComponentProvider, BuilderComponentProviderProps, BuilderEntity, BuilderEntityNested, BuilderPreviewProvider, BuilderPreviewProviderProps, BuilderProvider, BuilderProviderProps, BuilderState, Builtin, CartLineProvider, CartLineProviderProps, CollectionDetailFilterDocument, CollectionDetailFilterQueryResponse, CollectionDetailFilterQueryVariables, CollectionDocument, CollectionProvider, CollectionProviderProps, CollectionQueryResponse, CollectionQueryVariables, CollectionSelectFragment, CollectionsDocument, CollectionsQueryResponse, CollectionsQueryVariables, ColorKey, ColorType$1 as ColorType, ColorValueType, Component, ComponentPreset, ComponentSetting, ContainerProp, ControlProp, ControlTriggerAction, ControlUI, CornerRadius, CornerRadiusType, CustomComponentConfig, DeepPartial, DynamicCollection, DynamicProduct, ExtractState, FeraReviewsV3WidgetType, FeraReviewsWidgetType, FetchCollectionArgs, FetchFunc, FetchProductParams, FlexDirectionProp, FontName, GRADIENT_BGR_KEY, GlobalStyleConfig, GlobalStyleResponsiveConfig, GlobalSwatchesData, GraphQLConnection, GroupPropType, GrowaveWidgetType, HSLAColorType, HSLColorType, HexColorType, ImageShape$1 as ImageShape, InitComponentType, InstantJudgeMeReviewsWidgetType, InstantKlaviyoWidgetType, InstantLooxReviewsWidgetType, JudgeMeReviewsWidgetType, KlaviyoWidgetType, LaiProductReviewsAdvancedWidgetType, LaiProductReviewsWidgetType, LibrarySaleFunnelDocument, LibrarySaleFunnelQueryResponse, LibrarySaleFunnelQueryVariables, LibraryTemplateDocument, LibraryTemplateQueryResponse, LibraryTemplateQueryVariables, LooxReviewsWidgetType, ModalProvider, ModalProviderProps, NameDevices$1 as NameDevices, NestedKeys, ObjectDeviceGlobalType, ObjectDevices, ObjectLayoutValue, OmnisendWidgetType, OnlyOne, OpinewDesignWidgetType, OpinewWidgetType, OptionNormalStyle, OptionSpecialStyle, Options, PageContext, PageProvider, PageProviderProps, PageType, PageViewUpDocument, PageViewUpMutationResponse, PageViewUpMutationVariables, PickyStoryWidgetType, PostPurchaseTypo, PreviewPageDocument, PreviewPageQueryResponse, PreviewPageQueryVariables, Primitive, ProductInputAnalytic, ProductListProvider, ProductListProviderProps, ProductOffer, ProductProvider, ProductProviderProps, ProductReviewsWidgetType, ProductSelectFragment, ProductsDocument, ProductsQueryResponse, ProductsQueryVariables, PublicStoreFrontData, PublishedThemePageSelectFragment, PublishedThemePagesDocument, PublishedThemePagesQueryResponse, PublishedThemePagesQueryVariables, RGBAColorType, RGBColorType, Ratio$1 as Ratio, RawChild, RenderMemo as Render, RenderChildren, RenderIf, Render as RenderLiquid, RenderMode, RenderPreviewMemo as RenderPreview, RequiredCursorEdge, ResponsiveKey, ResponsiveStateProp, RivyoWidgetType, RoundedSize, RyviuWidgetType, SaleFunnelDiscount$1 as SaleFunnelDiscount, SaleFunnelDiscountEdge$1 as SaleFunnelDiscountEdge, SaleFunnelDiscountObjectType$1 as SaleFunnelDiscountObjectType, SaleFunnelDiscountType$1 as SaleFunnelDiscountType, SaleFunnelDiscountValueType$1 as SaleFunnelDiscountValueType, SaleFunnelDiscountsDocument, SaleFunnelDiscountsQueryResponse, SaleFunnelDiscountsQueryVariables, Scalars$1 as Scalars, ScaleByDirection, SectionData, SectionEntity, SectionProvider, SectionProviderProps, SettingByAnimationType, SettingByAnimationValues, ShadowProps, ShadowStyle, ShadowStyleApplied, ShadowType, ShopProvider, ShopProviderProps, shop as ShopType, SizeProps, SizeSetting, SizeSettingGlobal, SizeType, SpacingType, StampedWidgetType, StateProp, StateSelector, StateType, StoreConfig, StorePropertyDocument, StorePropertyQueryResponse, StorePropertyQueryVariables, SwatchesOptionType, SwatchesOptionValue, ThemePageDocument, ThemePageQueryResponse, ThemePageQueryVariables, ThemeSectionStatus$1 as ThemeSectionStatus, TransformProp, TriggerConfig, TrustooWidgetType, TypographyProps, TypographySetting, TypographySettingV2, TypographyType, TypographyV2Attrs, TypographyV2Props, UltimateSalesBoostWidgetType, VariantSelectFragment, VitalsWidgetType, WiserV2WidgetType, WiserWidgetType, WrapRenderChildren, YotpoReviewsWidgetType, addAppBlockId, animations, baseAssetURL, calculateFirstProduct, checkAvailableVariantInStock, cls, composeAdvanceStyle, composeAdvanceStyleForPostPurchase, composeBackgroundCss, composeBorderCss, composeCornerCss, composeFallbackTypographyStyle, composeFontFamilyTypographyV2, composeGridLayout, composeMemo, composePositionLineHeight, composePostionIconList, composeRadius, composeRadiusResponsive, composeShadowCss, composeSize, composeSizeCss, composeSpacing, composeTextColorCss, composeTypography, composeTypographyAttr, composeTypographyClassName, composeTypographyCss, composeTypographyStyle, composeTypographyV2, composeTypographyV2Css, convertHTML, convertOldLayout, dataStringify, fetchMedias, fetchVariants, filterAttrInStyle, filterCornerInStyle, filterToolbarPreview, flattenConnection, fpixel, genSizeClass, genTypoClass, genVariable, generateCollectionQueryKey, generateProductQueryKey, generateProductsQueryKey, getAppBlocks, getAspectRatioGlobalSize, getBgImageByDevice, getBorderRadiusStyle, getBorderStyle, getCarouselContainerHeight, getCollection, getCornerCSSFromGlobal, getCustomRadius, getGlobalColorCSSProp, getGlobalColorClass, getGlobalColorResponsiveClass, getGlobalColorResponsiveStyle, getGlobalColorStateClass, getGlobalColorStateClassDynamicBtn, getGlobalColorStateResponsiveClass, getGlobalColorStateResponsiveClassDynamicBtn, getGlobalColorStateResponsiveStyle, getGlobalColorStateStyle, getGlobalColorStyle, getGlobalSizeGap, getGradientBgrStyleByDevice, getGradientBgrStyleForButton, getHeightByShapeGlobalSize, getPaddingGlobalSize, getProduct, getProductBySlug, getRadiusCSSFromGlobal, getRadiusStyleActiveState, getResponsiveStateValue, getResponsiveValue, getResponsiveValueByScreen, getSelectedVariant, getShortName, getSingleColorVariable, getSpacingVariable, getStyleBackgroundByDevice, getStyleBgColor, getStyleShadow, getStyleShadowState, getValueByDevice, getWidthByShapeGlobalSize, getWidthHeightGlobalSize, globalEvent, gridToArrayRegex, gtag, handleConvertBorderColor, handleConvertBorderStyle, handleConvertBorderWidth, handleConvertClassColor, handleConvertClassColorDynamicBtn, isBrowser, isColor, isColumnDirectionExist, isDefined, isEmptyChildren, isLocalEnv, isSafari, loadScript, makeAspectRatio, makeContainerWidthOrHeight, makeDotGapToCarouselStyle, makeFixedBgAttachment, makeGlobalSize, makeGlobalSizeHeightResponsive, makeGlobalSizeIcon, makeGlobalSizeWidthResponsive, makeHeight, makeLineClamp, makeStyle, makeStyleKey, makeStyleResponsive, makeStyleResponsiveByScreen, makeStyleResponsiveState, makeStyleState, makeStyleWithDefault, makeWidth, normalizeBuilderData, optionLayoutStyle, parseSelectedOption, parseValueWithUnit, prefetchQueries, props, removeAttrInStyle, removeNullUndefined, removePaddingYInStyle, removeUndefinedValuesFromObject, shopifyPriceRounding, splitStyle, styles, template, tiktokpixel, useAddToCart, useAddon, useAddons, useArticleListStore, useArticleStore, useArticlesQuery, useBlogsQuery, useBuilderComponent, useBuilderPreviewStore, useBuilderStore, useCartData, useCartDiscountCodesUpdate, useCartId, useCartLine, useCartLineStore, useCartNoteUpdate, useCartUI, useCheckAvailableVariantInStock, useCheckoutUrl, useCollection, useCollectionQuery, useCollectionStore, useCollectionsQuery, useConnectedShopify, useCreateCart, useCurrency, useCurrentDevice, useCurrentVariant, useCurrentVariantInStock, useEditorMode, useFeaturedImageGlobal, useFormatMoney, useInitialSwatchesOptions, useIsSampleProduct, useIsStorefrontProduct, useIsSyncProduct, useIsomorphicLayoutEffect, useLazyVideo, useLoadScript, useLocale, useMatchMutate, useMobileOnly, useModalStore, useMoney, useMoneyFormat, usePageStore, usePageType, usePluginEnable, usePrevious, useProduct, useProductList, useProductListProducts, useProductListSettings, useProductListStore, useProductListStyles, useProductOfferDiscount, useProductProperties, useProductQuery, useProductStore, useProductsQuery, useProductsQueryAll, useQuantity, useRemoveCartItem, useSection, useSectionStore, useSelectedOption, useShopStore, useStoreFront, useSuspenseFetch, useSwatches, useSwatchesOptions, useUniqProductID, useUpdateCartItem, useVariant, useVariantOutStock, useVariants, validateEmail };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gem-sdk/core",
3
- "version": "1.46.0-staging.1",
3
+ "version": "1.46.0-staging.12",
4
4
  "license": "MIT",
5
5
  "sideEffects": false,
6
6
  "main": "dist/cjs/index.js",
@@ -28,11 +28,12 @@
28
28
  },
29
29
  "devDependencies": {
30
30
  "@gem-sdk/adapter-shopify": "1.45.0",
31
- "@gem-sdk/styles": "1.46.0-staging.1",
31
+ "@gem-sdk/styles": "1.46.0-staging.8",
32
32
  "@types/classnames": "^2.3.1"
33
33
  },
34
34
  "dependencies": {
35
35
  "classnames": "^2.5.1",
36
+ "cssjson": "2.1.3",
36
37
  "dayjs": "^1.11.11",
37
38
  "react-error-boundary": "4.0.10",
38
39
  "swr": "2.1.2",