disco_app 0.11.1 → 0.12.0

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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/components/shopify/image/_image.scss +82 -0
  3. data/app/assets/components/shopify/table/_table.scss +18 -0
  4. data/app/assets/javascripts/disco_app/components/custom/rules-editor.es6.jsx +2 -2
  5. data/app/assets/javascripts/disco_app/components/ui-kit/icons/next-icon.es6.jsx +3 -2
  6. data/app/assets/stylesheets/disco_app/disco_app.scss +2 -0
  7. data/app/assets/stylesheets/disco_app/ui-kit/_ui-kit.scss +5 -0
  8. data/app/jobs/disco_app/shop_job.rb +1 -1
  9. data/app/models/disco_app/concerns/has_metafields.rb +1 -1
  10. data/app/models/disco_app/concerns/renders_assets.rb +3 -3
  11. data/app/models/disco_app/concerns/shop.rb +3 -1
  12. data/app/models/disco_app/concerns/synchronises.rb +1 -1
  13. data/app/services/disco_app/charges_service.rb +3 -3
  14. data/app/views/disco_app/shared/_icons.html.erb +1 -1
  15. data/db/migrate/20150525000000_create_shops_if_not_existent.rb +102 -7
  16. data/lib/disco_app/version.rb +1 -1
  17. data/lib/generators/disco_app/disco_app_generator.rb +30 -33
  18. data/test/dummy/app/models/disco_app/shop.rb +5 -0
  19. data/test/fixtures/carts.yml +1 -1
  20. data/test/fixtures/products.yml +1 -1
  21. data/test/models/disco_app/has_metafields_test.rb +2 -2
  22. data/test/services/disco_app/subscription_service_test.rb +2 -2
  23. data/test/test_helper.rb +2 -0
  24. metadata +166 -89
  25. data/db/migrate/20150525162112_add_status_to_shops.rb +0 -5
  26. data/db/migrate/20150525171422_add_meta_to_shops.rb +0 -11
  27. data/db/migrate/20150629210346_add_charge_status_to_shop.rb +0 -5
  28. data/db/migrate/20150814214025_add_more_meta_to_shops.rb +0 -15
  29. data/db/migrate/20151017231302_create_disco_app_plans.rb +0 -13
  30. data/db/migrate/20151017232027_create_disco_app_subscriptions.rb +0 -15
  31. data/db/migrate/20151017234409_move_shop_to_disco_app_engine.rb +0 -5
  32. data/db/migrate/20160112233706_create_disco_app_sessions.rb +0 -12
  33. data/db/migrate/20160113194418_add_shop_id_to_disco_app_sessions.rb +0 -6
  34. data/db/migrate/20160223111044_create_disco_app_settings.rb +0 -8
  35. data/db/migrate/20160301223215_update_plans.rb +0 -22
  36. data/db/migrate/20160301224558_update_subscriptions.rb +0 -13
  37. data/db/migrate/20160302104816_create_disco_app_recurring_application_charges.rb +0 -14
  38. data/db/migrate/20160302105259_create_disco_app_application_charges.rb +0 -14
  39. data/db/migrate/20160302134728_drop_charge_status_from_shops.rb +0 -5
  40. data/db/migrate/20160302142941_add_shopify_attributes_to_charges.rb +0 -8
  41. data/db/migrate/20160331093148_create_disco_app_plan_codes.rb +0 -14
  42. data/db/migrate/20160401044420_add_status_to_plan_codes.rb +0 -5
  43. data/db/migrate/20160401045551_add_amount_and_plan_code_to_disco_app_subscriptions.rb +0 -7
  44. data/db/migrate/20160425205211_add_source_to_disco_app_subscriptions.rb +0 -5
  45. data/db/migrate/20160426033520_add_trial_period_days_to_disco_app_subscriptions.rb +0 -5
  46. data/db/migrate/20160513140727_add_name_to_disco_app_shops.rb +0 -5
  47. data/db/migrate/20160521135510_move_shop_to_synchronises.rb +0 -61
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e160b7536d263fd3c12a55e7eeb9f1dedbfd6744cf5eca2df6fcc69be4201946
4
- data.tar.gz: ee799bbb8e59ffd0c6ae81c15f8a0aeccb13f0e7e5b8455f52c0d700ea3db35d
3
+ metadata.gz: cff3f8aab2482607eafbbf0bec88e11dca418c4af76d9a4a74b6fba9d1d08f9d
4
+ data.tar.gz: 2ea82e6129fd1c1fa0f87c604cdbd3b0c781098c4fdc3e7c16ba238e87eae6f9
5
5
  SHA512:
6
- metadata.gz: 6331f3906cb9190c5d901389c39c2bccf274eb9cdae5c0c0c3678fe0a41488c7ae4fbdb91ed89607925fa7465f45f511e9814a1fbfec261fdba9e3858c23badb
7
- data.tar.gz: 3203c8671b3d3cb1c1bdbef2ab3fa4d951d9b5b64f90b3f94a3cf1be36edbbf5e0c8b363d2690c837d799f3cbffb73291f955014041fc6921edb4b925a01db94
6
+ metadata.gz: 3f33ce9c3604c826e8b2a35db6d414c98ad1b6c40bb231716e81a9a52f873666147c2b6bd8630e43c676866413da4c95a3ace3f493c8363d71a7b858ea34b439
7
+ data.tar.gz: d19ae72a0539f46e34091befa91775c388200c50cf09a10df6e5d8460ccaf6bd89620b6e101fc2070a29c58a8e9ebba4a0817aaff2878c78c8dfc6e8392f3d22
@@ -0,0 +1,82 @@
1
+ .aspect-ratio {
2
+ position: relative;
3
+ display: block;
4
+ background: #fafbfc;
5
+ padding: 0;
6
+ }
7
+
8
+ .aspect-ratio__content {
9
+ position: absolute;
10
+ max-width: 100%;
11
+ max-height: 100%;
12
+ display: block;
13
+ top: 0;
14
+ right: 0;
15
+ bottom: 0;
16
+ left: 0;
17
+ margin: auto;
18
+ }
19
+
20
+ .aspect-ratio::before {
21
+ z-index: 1;
22
+ content: "";
23
+ position: absolute;
24
+ top: 0;
25
+ right: 0;
26
+ bottom: 0;
27
+ left: 0;
28
+ border: 1px solid rgba(195,207,216,0.3);
29
+ }
30
+
31
+ .aspect-ratio--square {
32
+ width: 100%;
33
+ padding-bottom: 100%;
34
+ }
35
+
36
+ .aspect-ratio--square--50 {
37
+ width: 50px;
38
+ padding-bottom: 50px;
39
+ -webkit-flex-grow: 0;
40
+ -ms-flex-positive: 0;
41
+ flex-grow: 0;
42
+ -webkit-flex-shrink: 0;
43
+ -ms-flex-negative: 0;
44
+ flex-shrink: 0;
45
+ }
46
+
47
+ .aspect-ratio--square {
48
+ -webkit-flex-shrink: 0;
49
+ -ms-flex-negative: 0;
50
+ flex-shrink: 0;
51
+ }
52
+
53
+ .next-icon.aspect-ratio__content, .aspect-ratio__content.next-icon__text {
54
+ position: absolute;
55
+ }
56
+
57
+
58
+ @keyframes next-spinner-rotate {
59
+ 100% {
60
+ -webkit-transform: rotate(360deg);
61
+ transform: rotate(360deg);
62
+ }
63
+ }
64
+
65
+ .next-spinner {
66
+ display: inline-block;
67
+ -webkit-animation: next-spinner-rotate 600ms linear infinite;
68
+ animation: next-spinner-rotate 600ms linear infinite;
69
+ position: relative;
70
+ }
71
+
72
+ .next-spinner>.next-icon, .next-spinner>.next-icon__text {
73
+ position: static;
74
+ }
75
+
76
+ .next-spinner__ring {
77
+ stroke: #0078bd;
78
+ stroke-dasharray: 100%;
79
+ stroke-width: 2px;
80
+ stroke-linecap: round;
81
+ fill: none;
82
+ }
@@ -0,0 +1,18 @@
1
+ .next-table--data, .next-table--line-items {
2
+ width: 100%;
3
+ border-collapse: collapse;
4
+ }
5
+
6
+ .next-table--line-items td {
7
+ padding-top: 20px;
8
+ padding-bottom: 20px;
9
+ }
10
+
11
+ .next-table--line-items td:first-of-type, .next-table--line-items th:first-of-type {
12
+ padding-left: 0;
13
+ }
14
+
15
+ .next-table--line-items .next-table__image-cell {
16
+ vertical-align: top;
17
+ min-width: 48px;
18
+ }
@@ -214,7 +214,7 @@ class RulesEditor extends React.Component {
214
214
 
215
215
  // Convert the current rules JSON into a format using the correct column
216
216
  // format used by our more advanced key checker.
217
- const rulesJSON = JSON.stringify(this.state.rules.map((rule, i) => {
217
+ const rulesJSON = JSON.stringify(rules.map((rule, i) => {
218
218
  return Object.assign({}, rule, {
219
219
  column: this.props.columns[rule.column].column
220
220
  });
@@ -228,7 +228,7 @@ class RulesEditor extends React.Component {
228
228
  </div>
229
229
  </div>
230
230
  <Button onClick={this.onAddRule.bind(this)}>
231
- Add another condition
231
+ {rules.length === 0 ? 'Add a condition' : 'Add another condition'}
232
232
  </Button>
233
233
  <input type="hidden" name={name} value={rulesJSON} />
234
234
  </CardSection>
@@ -1,8 +1,9 @@
1
- const NextIcon = ({ size, name }) => {
1
+ const NextIcon = ({ size, name, additionalClassNames = '' }) => {
2
2
 
3
3
  const className = classNames({
4
4
  "next-icon": true,
5
- ['next-icon--size-' + size]: true
5
+ ['next-icon--size-' + size]: true,
6
+ [additionalClassNames]: (additionalClassNames.length > 0)
6
7
  });
7
8
 
8
9
  return (
@@ -21,4 +21,6 @@ $font-family: -apple-system, "BlinkMacSystemFont", "San Francisco", "Roboto", "S
21
21
  @import '../../components/shopify/ui-stack/ui-stack';
22
22
  @import '../../components/shopify/typography/typography';
23
23
  @import '../../components/shopify/buttons/buttons';
24
+ @import '../../components/shopify/table/table';
25
+ @import '../../components/shopify/image/image';
24
26
  @import '../../components/shopify/card/card';
@@ -4007,6 +4007,11 @@ input[type=checkbox].next-checkbox {
4007
4007
  fill: #ebeef0;
4008
4008
  }
4009
4009
 
4010
+ .next-icon--color-orange {
4011
+ color: #ff9517;
4012
+ fill: currentColor;
4013
+ }
4014
+
4010
4015
  .next-icon--sky {
4011
4016
  fill: #ebeef0;
4012
4017
  }
@@ -19,7 +19,7 @@ class DiscoApp::ShopJob < ActiveJob::Base
19
19
  end
20
20
 
21
21
  def shop_context(job, block)
22
- @shop.temp {
22
+ @shop.with_api_context {
23
23
  block.call(job.arguments)
24
24
  }
25
25
  end
@@ -14,7 +14,7 @@ module DiscoApp::Concerns::HasMetafields
14
14
  # })
15
15
  #
16
16
  # This method assumes that it is being called within a valid Shopify API
17
- # session context, eg @shop.temp { ... }.
17
+ # session context, eg @shop.with_api_context { ... }.
18
18
  #
19
19
  # It also assumes that the including class has defined the appropriate value
20
20
  # for SHOPIFY_API_CLASS and that calling the `id` method on the instance
@@ -97,7 +97,7 @@ module DiscoApp::Concerns::RendersAssets
97
97
 
98
98
  options[:assets].each do |asset|
99
99
  # Create/replace the asset via the Shopify API.
100
- shopify_asset = shop.temp {
100
+ shopify_asset = shop.with_api_context {
101
101
  ShopifyAPI::Asset.create(
102
102
  key: asset,
103
103
  value: render_asset_group_asset(asset, public_urls, options)
@@ -152,14 +152,14 @@ module DiscoApp::Concerns::RendersAssets
152
152
  # a public URL for.
153
153
  def render_asset_script_tags(options, public_urls)
154
154
  # Fetch the current set of script tags for the store.
155
- current_script_tags = shop.temp { ShopifyAPI::ScriptTag.find(:all) }
155
+ current_script_tags = shop.with_api_context { ShopifyAPI::ScriptTag.find(:all) }
156
156
 
157
157
  # Iterate each script tag for which we have a known public URL and create
158
158
  # or update the corresponding script tag resource.
159
159
  public_urls.slice(*options[:script_tags]).each do |asset, public_url|
160
160
  script_tag = current_script_tags.find(lambda { ShopifyAPI::ScriptTag.new(event: 'onload') }) { |script_tag| script_tag.src.include?("#{asset}?") }
161
161
  script_tag.src = public_url
162
- shop.temp { script_tag.save }
162
+ shop.with_api_context { script_tag.save }
163
163
  end
164
164
  end
165
165
 
@@ -20,7 +20,9 @@ module DiscoApp::Concerns::Shop
20
20
  scope :installed, -> { where status: statuses[:installed] }
21
21
  scope :has_active_shopify_plan, -> { where.not(plan_name: [:cancelled, :frozen, :fraudulent]) }
22
22
 
23
- # Alias 'with_shopify_session' as 'temp', as per our existing conventions.
23
+ # Alias 'with_shopify_session' as 'with_api_context' for better readability, but also as 'temp' for
24
+ # backward compatibility.
25
+ alias_method :with_api_context, :with_shopify_session
24
26
  alias_method :temp, :with_shopify_session
25
27
 
26
28
  # Return true if the shop is considered as in development mode.
@@ -46,7 +46,7 @@ module DiscoApp::Concerns::Synchronises
46
46
  end
47
47
 
48
48
  def synchronise_all(shop, params = {})
49
- resource_count = shop.temp { self::SHOPIFY_API_CLASS.count(params) }
49
+ resource_count = shop.with_api_context { self::SHOPIFY_API_CLASS.count(params) }
50
50
 
51
51
  (1..(resource_count / SYNCHRONISES_PAGE_LIMIT.to_f).ceil).each do |page|
52
52
  DiscoApp::SynchroniseResourcesJob.perform_later(shop, self.name, params.merge(page: page, limit: SYNCHRONISES_PAGE_LIMIT))
@@ -10,7 +10,7 @@ class DiscoApp::ChargesService
10
10
  )
11
11
 
12
12
  # Create the charge object on Shopify.
13
- shopify_charge = shop.temp {
13
+ shopify_charge = shop.with_api_context {
14
14
  subscription.shopify_charge_class.create(
15
15
  name: subscription.plan.name,
16
16
  price: '%.2f' % (subscription.amount.to_f / 100.0),
@@ -39,7 +39,7 @@ class DiscoApp::ChargesService
39
39
  def self.activate(shop, charge)
40
40
  begin
41
41
  # Start by fetching the Shopify charge to check that it was accepted.
42
- shopify_charge = shop.temp {
42
+ shopify_charge = shop.with_api_context {
43
43
  charge.subscription.shopify_charge_class.find(charge.shopify_id)
44
44
  }
45
45
 
@@ -50,7 +50,7 @@ class DiscoApp::ChargesService
50
50
  return false unless charge.accepted?
51
51
 
52
52
  # If the charge was indeed accepted, activate it via Shopify.
53
- charge.shop.temp {
53
+ charge.shop.with_api_context {
54
54
  shopify_charge.activate
55
55
  }
56
56
 
@@ -1 +1 @@
1
- <div id="global-icon-symbols" style="display: none;"><svg xmlns="http://www.w3.org/2000/svg"><symbol id="next-products" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"><path d="M21.8 1h-7c-.8 0-1.5.3-2 .8L1.4 13.2c-.5.5-.5 1.3 0 1.8L9 22.7c.5.5 1.3.5 1.8 0l11.3-11.4c.5-.5.8-1.3.8-2v-7c.1-.7-.4-1.3-1.1-1.3zm-4 7.6c-1.3 0-2.3-1.1-2.3-2.3C15.5 5 16.6 4 17.8 4c1.3 0 2.3 1.1 2.3 2.3 0 1.3-1 2.3-2.3 2.3z"></path></svg></symbol><symbol id="next-help-circle" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0zm-.1 20c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5c.827 0 1.5.67 1.5 1.5s-.673 1.5-1.5 1.5zm1.766-6.996c-.22.087-.39.367-.39.602V14c0 .55-.45 1-1 1h-.67c-.55 0-1-.448-1-1v-.87c0-1.18.805-2.16 1.92-2.55.44-.157.824-.456 1.08-.844.938-1.415-.248-3.07-1.665-3.07-.87 0-1.61.555-1.89 1.327-.14.4-.51.674-.94.674h-.7c-.644 0-1.144-.608-.974-1.23.622-2.28 2.936-3.87 5.502-3.333h.007c1.496.312 2.758 1.39 3.326 2.808 1.01 2.527-.32 5.182-2.6 6.092z"></path></svg></symbol><symbol id="next-website" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M9.4 2c-.2 0-.3.3-.2.4l1.4 1.4-3.8 3.9c-.2.2-.2.6 0 .8l.8.8c.2.2.6.2.8 0l3.8-3.8 1.4 1.4c.2.2.4 0 .4-.2v-4.2c0-.3-.2-.5-.5-.5h-4.1zm.6 0h-6c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2v-6 2h-2v3c0 .6-.5 1-1 1h-6c-.6 0-1-.5-1-1v-6c0-.6.5-1 1-1h3v-2h2z"></path></svg></symbol><symbol id="next-search-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><path d="M0 5.667c0 3.125 2.542 5.667 5.667 5.667 1.202 0 2.315-.38 3.233-1.02l.455.456c-.07.5.082 1.025.466 1.41l3.334 3.332c.326.325.753.488 1.18.488.425 0 .852-.163 1.177-.488.652-.65.652-1.706 0-2.357L12.18 9.822c-.384-.384-.91-.536-1.41-.466l-.454-.456c.64-.918 1.02-2.03 1.02-3.233C11.333 2.542 8.79 0 5.666 0S0 2.542 0 5.667zm2 0C2 3.645 3.645 2 5.667 2s3.667 1.645 3.667 3.667-1.646 3.666-3.667 3.666S2 7.688 2 5.667z"></path></svg></symbol><symbol id="loading-circle" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1_copy" x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve"><g><circle fill="#202428" cx="15" cy="8" r="1"></circle><circle fill="#22262A" cx="14.971" cy="8.637" r="1"></circle><circle fill="#24282D" cx="14.887" cy="9.258" r="1"></circle><circle fill="#262A2F" cx="14.75" cy="9.86" r="1"></circle><circle fill="#282D31" cx="14.563" cy="10.441" r="1"></circle><circle fill="#2A2F34" cx="14.327" cy="10.999" r="1"></circle><circle fill="#2C3136" cx="14.045" cy="11.531" r="1"></circle><circle fill="#2E3338" cx="13.721" cy="12.035" r="1"></circle><circle fill="#2F353B" cx="13.356" cy="12.508" r="1"></circle><circle fill="#31373D" cx="12.952" cy="12.947" r="1"></circle><circle fill="#33393F" cx="12.513" cy="13.351" r="1"></circle><circle fill="#353C42" cx="12.04" cy="13.717" r="1"></circle><circle fill="#373E44" cx="11.537" cy="14.042" r="1"></circle><circle fill="#394046" cx="11.005" cy="14.324" r="1"></circle><circle fill="#3B4249" cx="10.447" cy="14.56" r="1"></circle><circle fill="#3D444B" cx="9.866" cy="14.748" r="1"></circle><circle fill="#3F464D" cx="9.264" cy="14.886" r="1"></circle><circle fill="#414950" cx="8.644" cy="14.971" r="1"></circle><circle fill="#434B52" cx="8.007" cy="15" r="1"></circle><circle fill="#454D54" cx="7.37" cy="14.972" r="1"></circle><circle fill="#474F57" cx="6.749" cy="14.889" r="1"></circle><circle fill="#495159" cx="6.147" cy="14.752" r="1"></circle><circle fill="#4B535B" cx="5.565" cy="14.565" r="1"></circle><circle fill="#4C555E" cx="5.007" cy="14.33" r="1"></circle><circle fill="#4E5860" cx="4.474" cy="14.049" r="1"></circle><circle fill="#505A62" cx="3.97" cy="13.725" r="1"></circle><circle fill="#525C65" cx="3.497" cy="13.36" r="1"></circle><circle fill="#545E67" cx="3.057" cy="12.957" r="1"></circle><circle fill="#566069" cx="2.653" cy="12.518" r="1"></circle><circle fill="#58626C" cx="2.287" cy="12.045" r="1"></circle><circle fill="#5A646E" cx="1.961" cy="11.542" r="1"></circle><circle fill="#5C6770" cx="1.679" cy="11.011" r="1"></circle><circle fill="#5E6972" cx="1.442" cy="10.453" r="1"></circle><circle fill="#606B75" cx="1.253" cy="9.873" r="1"></circle><circle fill="#626D77" cx="1.115" cy="9.271" r="1"></circle><circle fill="#646F79" cx="1.03" cy="8.65" r="1"></circle><circle fill="#66717C" cx="1" cy="8.014" r="1"></circle><circle fill="#68737E" cx="1.027" cy="7.377" r="1"></circle><circle fill="#6A7680" cx="1.11" cy="6.756" r="1"></circle><circle fill="#6B7883" cx="1.246" cy="6.153" r="1"></circle><circle fill="#6D7A85" cx="1.433" cy="5.571" r="1"></circle><circle fill="#6F7C87" cx="1.668" cy="5.013" r="1"></circle><circle fill="#717E8A" cx="1.948" cy="4.48" r="1"></circle><circle fill="#73808C" cx="2.272" cy="3.976" r="1"></circle><circle fill="#75828E" cx="2.636" cy="3.502" r="1"></circle><circle fill="#778591" cx="3.039" cy="3.062" r="1"></circle><circle fill="#798793" cx="3.477" cy="2.657" r="1"></circle><circle fill="#7B8995" cx="3.949" cy="2.29" r="1"></circle><circle fill="#7D8B98" cx="4.452" cy="1.964" r="1"></circle><circle fill="#7F8D9A" cx="4.983" cy="1.682" r="1"></circle><circle fill="#818F9C" cx="5.54" cy="1.444" r="1"></circle><circle fill="#83929F" cx="6.121" cy="1.255" r="1"></circle><circle fill="#8594A1" cx="6.723" cy="1.116" r="1"></circle><circle fill="#8796A3" cx="7.343" cy="1.03" r="1"></circle><circle fill="#8898A6" cx="7.979" cy="1" r="1"></circle><circle fill="#8A9AA8" cx="8.609" cy="1.027" r="1"></circle><circle fill="#8C9CAA" cx="9.226" cy="1.109" r="1"></circle><circle fill="#8E9EAD" cx="9.827" cy="1.245" r="1"></circle><circle fill="#90A1AF" cx="10.408" cy="1.429" r="1"></circle><circle fill="#92A3B1" cx="10.967" cy="1.66" r="1"></circle><circle fill="#94A5B4" cx="11.498" cy="1.935" r="1"></circle><circle fill="#96A7B6" cx="12" cy="2.25" r="1"></circle></g></svg></symbol><symbol id="clear" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" baseProfile="tiny" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" fill="#BFBFBF" d="M12.234 3.766c-2.334-2.334-6.119-2.334-8.453 0s-2.334 6.119 0 8.453 6.119 2.334 8.453 0 2.334-6.119 0-8.453zm-1.06 6.329l-1.056 1.056-2.11-2.112-2.111 2.111-1.056-1.056 2.111-2.111-2.111-2.11 1.056-1.056 2.111 2.111 2.111-2.111 1.056 1.056-2.112 2.111 2.111 2.111z"></path></svg></symbol><symbol id="next-remove" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"><path d="M19.5 22c-.2 0-.5-.1-.7-.3L12 14.9l-6.8 6.8c-.2.2-.4.3-.7.3-.2 0-.5-.1-.7-.3l-1.6-1.6c-.1-.2-.2-.4-.2-.6 0-.2.1-.5.3-.7L9.1 12 2.3 5.2C2.1 5 2 4.8 2 4.5c0-.2.1-.5.3-.7l1.6-1.6c.2-.1.4-.2.6-.2.3 0 .5.1.7.3L12 9.1l6.8-6.8c.2-.2.4-.3.7-.3.2 0 .5.1.7.3l1.6 1.6c.1.2.2.4.2.6 0 .2-.1.5-.3.7L14.9 12l6.8 6.8c.2.2.3.4.3.7 0 .2-.1.5-.3.7l-1.6 1.6c-.2.1-.4.2-.6.2z"></path></svg></symbol><symbol id="next-info" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"><g><path d="M13.5 7h-2c-.8 0-1.5.7-1.5 1.5v14c0 .8.7 1.5 1.5 1.5h2c.8 0 1.5-.7 1.5-1.5v-14c0-.8-.7-1.5-1.5-1.5z"></path><circle cx="12.5" cy="2.5" r="2.5"></circle></g></svg></symbol><symbol id="next-dashboard-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><g><path d="M8.43 3.445c-.248-.21-.612-.21-.86 0L2.353 7.86C2.13 8.05 2 8.33 2 8.624v6.71c0 .366.3.666.667.666h2.667C5.7 16 6 15.7 6 15.333v-3c0-.183.15-.333.333-.333h3.333c.184 0 .334.15.334.333v3c0 .367.3.667.667.667h2.667c.366 0 .666-.3.666-.667v-6.71c0-.294-.13-.573-.354-.763L8.43 3.445zM15.764 6.158L8.944.39C8.692.14 8.357 0 8 0c-.357 0-.692.14-.902.354L.236 6.158c-.28.238-.316.66-.078.94.132.156.32.236.51.236.15 0 .304-.052.43-.158L7.6 1.638c.238-.178.56-.18.797-.003 1.468 1.1 6.505 5.54 6.505 5.54.28.237.702.203.94-.078.238-.28.203-.7-.078-.94z"></path></g></svg></symbol><symbol id="next-orders-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><g><path d="M13.992 0H2.1C.94 0 0 .94 0 2.1v12.244C0 15.305.785 16 1.75 16H14.34c.964 0 1.658-.694 1.658-1.658V2.1C16 .94 15.15 0 13.992 0zM14 2v8h-1.757C11.28 10 10 11.28 10 12.243v.7c0 .193.337.057.144.057H5.247c-.193 0-.247.136-.247-.057v-.7C5 11.28 4.113 10 3.148 10H2V2h12zM7.117 9.963c.167.16.437.16.603.002l5.17-5.042c.165-.16.165-.422 0-.583l-.604-.583c-.166-.16-.437-.16-.603 0L7.42 7.924 5.694 6.24c-.166-.16-.437-.16-.603 0l-.604.582c-.166.162-.166.423 0 .584l2.63 2.557z"></path></g></svg></symbol><symbol id="next-chevron-nav" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10.6,6 L8.2,8 L12,12 L8.2,16 L10.6,18 L15.3,13 C15.8,12.4 15.8,11.6 15.3,11 L10.6,6 L10.6,6 Z"></path></svg></symbol><symbol id="next-products-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><path d="M15.087 0H10.01c-.554 0-1.085.235-1.476.627L.3 8.87c-.37.368-.37.965 0 1.327l5.553 5.556c.362.368.955.37 1.323 0L15.4 7.52c.39-.392.6-.922.6-1.476V.967C16 .45 15.604 0 15.087 0zm-2.89 5.56c-.94 0-1.702-.764-1.702-1.703 0-.94.763-1.702 1.702-1.702.94 0 1.702.763 1.702 1.702 0 .94-.764 1.702-1.703 1.702z"></path></svg></symbol><symbol id="next-customers-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><g><path d="M13.08 8.26c-.68-.275-.674-.732-.674-1.007 0-.274.29-.657.566-.903.48-.423.777-1.04.777-1.737 0-1.206-1.018-2.21-2.224-2.257-.896-.03-1.658.41-2.062 1.1-.088.15-.03.337.127.415 1.12.555 1.873 1.69 1.873 3.03 0 .87-.32 1.698-.894 2.332-.128.14-.077.362.094.442.663.31 2.044.745 2.598 1.462.055.07.134-.136.224-.136h1.657c.473 0 .857.116.857-.358v-.12c0-1.308-1.93-1.85-2.92-2.263zM5.398 9.232c-.542-.603-.827-1.39-.827-2.304 0-1.348.74-2.53 1.863-3.08.16-.077.22-.267.128-.418-.5-.816-1.523-1.265-2.634-.993-1.006.24-1.64 1.17-1.64 2.21 0 .698.223 1.28.71 1.704.273.247.6.63.6.904s-.035.73-.715 1.006C1.89 8.67 0 9.214 0 10.522v.12c0 .474.384.358.857.358h1.656c.09 0 .17.206.226.133.544-.716 1.905-1.277 2.56-1.59.167-.078.222-.173.098-.31zM9.867 10.546c-.68-.278-.78-.735-.78-1.006 0-.274.234-.656.508-.9.483-.426.754-1.046.754-1.74 0-1.492-1.39-2.55-2.957-2.184-1.018.237-1.672 1.168-1.672 2.212 0 .695.223 1.286.706 1.71.274.246.596.628.596.902 0 .27-.248.728-.927 1.006C5.11 10.954 3 11.5 3 12.806v.122C3 13.4 3.812 14 4.286 14h7.43c.472 0 1.284-.6 1.284-1.072v-.122c0-1.307-2.147-1.852-3.133-2.26z"></path></g></svg></symbol><symbol id="next-reports-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><g><path d="M4 9.667C4 9.297 3.702 9 3.333 9H1.667C1.297 9 1 9.298 1 9.667v5.667c0 .368.298.666.667.666h1.667c.368 0 .666-.298.666-.667V9.667zM8 3.667C8 3.297 7.702 3 7.333 3H5.667C5.297 3 5 3.298 5 3.667v11.667c0 .368.298.666.667.666h1.667c.368 0 .666-.298.666-.667V3.667zM12 .667c0-.37-.298-.667-.667-.667H9.667C9.297 0 9 .298 9 .667v14.667c0 .368.298.666.667.666h1.667c.368 0 .666-.298.666-.667V.667zM16 6.667c0-.37-.298-.667-.667-.667h-1.667c-.368 0-.666.298-.666.667v8.667c0 .368.298.666.667.666h1.667c.368 0 .666-.298.666-.667V6.667z"></path></g></svg></symbol><symbol id="next-discounts-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><g><path d="M9 13.333C9 13.15 8.85 13 8.667 13H6.333c-.184 0-.333.15-.333.333v.333c0 .185.15.334.333.334h2.333c.185 0 .334-.15.334-.333v-.334zM13 13.333c0-.184-.15-.333-.333-.333h-2.333c-.185 0-.334.15-.334.333v.333c0 .185.15.334.333.334h2.333c.185 0 .334-.15.334-.333v-.334zM16 8.333C16 8.15 15.85 8 15.667 8h-.333c-.185 0-.334.15-.334.333v2.333c0 .185.15.334.333.334h.333c.185 0 .334-.15.334-.333V8.333zM11.3 9.2L7.272 5.902 11.3 2.607l-.013-.016c-.692-.845-1.94-.97-2.786-.278l-2.808 2.3-1.18-.966c.096-.254.155-.526.155-.813C4.667 1.547 3.62.5 2.333.5S0 1.547 0 2.833s1.047 2.333 2.333 2.333c.255 0 .495-.05.725-.127l1.055.862-.93.763c-.265-.103-.55-.165-.85-.165C1.047 6.5 0 7.547 0 8.833s1.047 2.333 2.333 2.333 2.333-1.047 2.333-2.333c0-.246-.05-.478-.12-.7l1.145-.938L8.5 9.493c.846.692 2.094.568 2.786-.28L11.3 9.2zM1.333 2.832c0-.55.45-1 1-1s1 .45 1 1-.45 1-1 1-1-.448-1-1zm1 7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1c0 .552-.448 1-1 1zM13 5.333C13 5.15 12.85 5 12.667 5h-2.333c-.185 0-.334.15-.334.333v.333c0 .185.15.334.333.334h2.333c.185 0 .334-.15.334-.333v-.334zM15.5 5h-1c-.276 0-.5 0-.5.5s.224.5.5.5h.5v.48c0 .275 0 .5.5.5s.5-.225.5-.5V5.5c0-.276-.063-.5-.5-.5zM3.5 14h1c.276 0 .5 0 .5-.5s-.224-.5-.5-.5H4v-.5c0-.276 0-.5-.5-.5s-.5.224-.5.5v.98c0 .275.062.52.5.52zM16 13.49v-1c0-.276 0-.5-.5-.5s-.5.224-.5.5V13h-.49c-.276 0-.5 0-.5.5s.224.5.5.5h.98c.276 0 .51-.073.51-.51z"></path></g></svg></symbol><symbol id="next-add-circle-outline" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M12 24c6.627 0 12-5.373 12-12s-5.373-12-12-12-12 5.373-12 12 5.373 12 12 12zm0-2.667c-5.155 0-9.333-4.179-9.333-9.333 0-5.155 4.179-9.333 9.333-9.333 5.155 0 9.333 4.179 9.333 9.333 0 5.155-4.179 9.333-9.333 9.333z"></path><path d="M12.623 13.337h3.663c.394 0 .714-.32.714-.714v-1.246c0-.394-.32-.714-.714-.714h-3.663l.714.714v-3.663c0-.394-.32-.714-.714-.714h-1.246c-.394 0-.714.32-.714.714v3.663l.714-.714h-3.663c-.394 0-.714.32-.714.714v1.246c0 .394.32.714.714.714h3.663l-.714-.714v3.663c0 .394.32.714.714.714h1.246c.394 0 .714-.32.714-.714v-3.663l-.714.714z"></path></g></svg></symbol><symbol id="next-online-store-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14.1c-3.4 0-6.1-2.7-6.1-6.1 0-.9.2-1.8.6-2.6v.3c0 .2.3.5.3.7 0 .3.2.5.4.7.3.1.6.2.8.4.2.2.4.3.7.2.2.2.1.4 0 .6-.2.2-.3.4-.3.5-.1.3-.1.6.2.8.2.1.3.3.3.5s.2.4.3.5c.4.2.4.6.5 1 .1.8.7 2 .9 1.6.2-.3.6-.9.8-1.1.1-.1.2-.2.2-.3.1-.2.2-.4.4-.5.1-.1.2-.2.2-.3 0-.4.2-.8.4-1.1.4-.5.2-.8-.4-1-.3-.1-.7-.3-1.1-.1v-.2c.1-.5 0-.6-.5-.8-.2-.2-.4-.3-.6-.4-.2-.1-.5 0-.8-.1-.3.1-.2-.4-.5-.5-.6-.6.3-.8.7-.6.1.1.5-.5 1.3-1 .2 0 .1-1 .3-1-1.7-1-2-1.4-2-1.4h-.2c.9-.6 2-.9 3.2-.9h.6l-.1.1s-.5.3.1 1c.2.2.7.8.6.9 0 .2 1.4-.1 1.6-.1.4 0 .3.6 0 .7 0 .1-1.8.3-1.9.3-.3.4-.3.3-.2.7 0 .2-.1.3-.1.6.2.2.4.5.6.8.3.3.5.8.8.7.1 0 .2-.1.4-.2.1.1.3.4.5.5-.1.3 0 .5.2.8.1.1 0 .8-.1.9-.1.2 0 .6.2 1s.7.4.9 0l.7-1.9c.2-.4.5-.7.9-.9l.3-.1V8c.1 3.4-2.6 6.1-6 6.1z"></path></svg></symbol><symbol id="next-apps-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><path d="M12.383 9.734c.59.41.882 1.044.87 1.675-.004.29.357.43.563.226l1.894-1.894c.387-.387.387-1.015 0-1.402l-2.498-2.498c-.167-.167-.115-.463.11-.54.397-.133.76-.396 1.02-.798.432-.662.416-1.56-.04-2.204-.734-1.033-2.175-1.123-3.03-.268-.216.216-.37.47-.463.74-.08.23-.387.28-.56.108L7.767.397C7.38.01 6.75.01 6.364.397L4.472 2.29c-.215.214-.05.565.257.565.504 0 1.013.192 1.4.58.87.87.765 2.34-.316 3.06-.663.443-1.568.435-2.216-.028-.576-.412-.86-1.04-.855-1.664.01-.29-.355-.43-.56-.224L.29 6.47c-.387.388-.387 1.016 0 1.403l2.498 2.498c.167.168.115.464-.11.54-.397.134-.76.397-1.02.8-.432.66-.416 1.56.04 2.203.734 1.033 2.175 1.123 3.03.268.216-.215.37-.47.463-.74.08-.23.387-.28.56-.107l2.483 2.484c.387.387 1.015.387 1.402 0l1.892-1.892c.215-.215.05-.564-.254-.563-.508 0-1.016-.193-1.404-.582-.86-.86-.768-2.304.278-3.037.658-.462 1.574-.466 2.235-.01z"></path></svg></symbol><symbol id="next-settings-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><path d="M15.733 6.767l-1.77-.36c-.117-.025-.21-.112-.245-.227-.102-.323-.232-.636-.39-.935-.056-.107-.053-.234.013-.335l1-1.51c.086-.13.07-.304-.042-.415L13.02 1.707c-.114-.114-.292-.132-.426-.043l-1.504.995c-.1.066-.228.07-.335.013-.3-.158-.61-.288-.935-.39-.114-.037-.202-.13-.226-.247l-.36-1.77C9.2.113 9.063 0 8.906 0H7.093c-.158 0-.295.11-.326.267l-.36 1.77c-.025.117-.113.21-.227.245-.323.102-.636.232-.935.39-.107.056-.234.053-.335-.013l-1.504-.996c-.134-.09-.312-.07-.426.043L1.702 2.985c-.11.11-.128.284-.042.415l1 1.51c.066.1.07.228.012.335-.158.3-.288.612-.39.935-.036.114-.128.202-.246.226l-1.77.36C.113 6.8 0 6.937 0 7.094v1.813c0 .158.11.295.267.327l1.77.36c.117.025.21.112.245.227.102.323.232.636.39.935.056.107.053.234-.013.335l-.996 1.504c-.09.134-.07.312.043.426l1.273 1.273c.114.114.292.132.426.043l1.504-.995c.1-.066.228-.07.335-.012.3.158.61.288.935.39.115.036.202.128.226.246l.36 1.77c.032.155.17.266.327.266h1.813c.158 0 .295-.11.327-.267l.36-1.77c.025-.117.112-.21.227-.245.323-.102.636-.232.935-.39.107-.056.234-.053.335.013l1.504.996c.134.09.312.07.426-.043l1.273-1.273c.114-.114.132-.292.043-.426l-.995-1.504c-.066-.1-.07-.228-.012-.335.158-.3.288-.61.39-.935.036-.115.128-.202.246-.226l1.77-.36c.155-.032.266-.17.266-.327V7.093c0-.158-.112-.295-.267-.326zM10.667 8c0 1.473-1.193 2.667-2.667 2.667S5.333 9.473 5.333 8c0-1.473 1.193-2.667 2.667-2.667S10.667 6.527 10.667 8z"></path></svg></symbol><symbol id="next-menu-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><path d="M7 9H1c-.552 0-1-.114-1-.667v-.666C0 7.114.448 7 1 7h14c.552 0 1 .114 1 .667v.667c0 .552-.448.666-1 .666H7zM7 4H1c-.552 0-1-.114-1-.667v-.666C0 2.114.448 2 1 2h14c.552 0 1 .114 1 .667v.667c0 .552-.448.666-1 .666H7zM7 14H1c-.552 0-1-.114-1-.667v-.667C0 12.114.448 12 1 12h14c.552 0 1 .114 1 .667v.667c0 .552-.448.666-1 .666H7z"></path></svg></symbol><symbol id="next-delete" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12" enable-background="new 0 0 12 12"><path d="M12 2c0 .5-.4 1-.8 1H.8C.4 3 0 2.5 0 2s.4-1 .8-1H4c0-.5.7-1 1.2-1h1.6C7.3 0 8 .6 8 1h3.2c.4 0 .8.5.8 1zm-1 2.6v6.6c0 .4-.8.8-1.2.8H2.2c-.4 0-1.2-.3-1.2-.8V4.6c0-.1.5-.6.7-.6h8.7c.1 0 .6.5.6.6zM5 6.4c0-.2-.2-.4-.4-.4h-.2c-.2 0-.4.2-.4.4v3.2c0 .2.2.4.4.4h.2c.2 0 .4-.2.4-.4V6.4zm3 0c0-.2-.2-.4-.4-.4h-.2c-.2 0-.4.2-.4.4v3.2c0 .2.2.4.4.4h.2c.2 0 .4-.2.4-.4V6.4z"></path></svg></symbol><symbol id="next-checkmark" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"><path d="M23.6 5L22 3.4c-.5-.4-1.2-.4-1.7 0L8.5 15l-4.8-4.7c-.5-.4-1.2-.4-1.7 0L.3 11.9c-.5.4-.5 1.2 0 1.6l7.3 7.1c.5.4 1.2.4 1.7 0l14.3-14c.5-.4.5-1.1 0-1.6z"></path></svg></symbol><symbol id="next-subtract" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12" enable-background="new 0 0 12 12"><path d="M6 0"></path><path d="M.8 7C.3 7 0 6.7 0 6.2v-.4c0-.5.3-.8.8-.8h10.5c.4 0 .7.3.7.8v.5c0 .4-.3.7-.8.7H.8z"></path></svg></symbol><symbol id="next-chevron" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6 4l9 8-9 8 2 2 11-10L8 2 6 4" fill="currentColor"></path></svg></symbol><symbol id="next-chevron-down" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"><path d="M21 5.176l-9.086 9.353-8.914-9.353-2.314 2.471 11.314 11.735 11.314-11.735-2.314-2.471z"></path></svg></symbol></svg></div>
1
+ <div id="global-icon-symbols" style="display: none;"><svg xmlns="http://www.w3.org/2000/svg"><symbol id="next-risk"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"><path d="M23.337 18.182L14.917 2.66c-1.603-2.958-4.226-2.974-5.84 0L.66 18.18c-1.605 2.958-.182 5.384 3.197 5.384H20.14c3.382 0 4.81-2.41 3.197-5.384z"/><path fill="#fff" d="M10.608,19.323a1.392,1.392 0 1,0 2.784,0a1.392,1.392 0 1,0 -2.784,0"/><path fill="#fff" d="M12.557 7.355h-1.113c-.46 0-.835.374-.835.835v7.793c0 .46.372.835.833.835h1.113c.46 0 .835-.374.835-.835V8.19c0-.46-.373-.835-.834-.835z"/></svg></symbol><symbol id="next-orders" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"><g><path d="M20.2 1H3.9C2.3 1 1 2.3 1 3.9v16.9C1 22 2.1 23 3.4 23h17.3c1.3 0 2.3-1 2.3-2.3V3.9C23 2.3 21.8 1 20.2 1zM20 4v11h-2.2c-1.3 0-2.8 1.5-2.8 2.8v1c0 .3.2.2-.1.2H8.2c-.3 0-.2.1-.2-.2v-1C8 16.5 6.7 15 5.3 15H4V4h16zM10.8 14.7c.2.2.6.2.8 0l7.1-6.9c.3-.3.3-.6 0-.8l-.8-.8c-.2-.2-.6-.2-.8 0l-5.9 5.7-2.4-2.3c-.2-.2-.6-.2-.8 0l-.8.8c-.2.2-.2.6 0 .8l3.6 3.5z"></path></g></svg></symbol><symbol id="next-clock" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"><path d="M12,0C5.4,0,0,5.4,0,12s5.4,12,12,12s12-5.4,12-12S18.6,0,12,0z M12,21c-5,0-9-4-9-9c0-5,4-9,9-9s9,4,9,9 C21,17,17,21,12,21z M17.4,14.5l-4.4-3V6.4l-0.1-0.3L12.5,6h-1.2L11,6.1l-0.1,0.3v6l0.1,0.3l0.1,0.1l5.1,3.4l0.3,0.1l0.1,0l0.3-0.2 l0.6-1C17.6,14.9,17.6,14.6,17.4,14.5z"></path></svg></symbol><symbol id="next-checkmark" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"><path d="M23.6 5L22 3.4c-.5-.4-1.2-.4-1.7 0L8.5 15l-4.8-4.7c-.5-.4-1.2-.4-1.7 0L.3 11.9c-.5.4-.5 1.2 0 1.6l7.3 7.1c.5.4 1.2.4 1.7 0l14.3-14c.5-.4.5-1.1 0-1.6z"></path></svg></symbol><symbol id="next-photos" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6.5 8c.8 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5-1.5-.7-1.5-1.5.7-1.5 1.5-1.5m0-1c-1.4 0-2.5 1.1-2.5 2.5s1.1 2.5 2.5 2.5 2.5-1.1 2.5-2.5-1.1-2.5-2.5-2.5zm15.5-4h-20c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h20c1.1 0 2-.9 2-2v-14c0-1.1-.9-2-2-2zm-20 2h20v9.6l-4.1-4.1c-1.3-1.3-3.5-1.3-4.9 0l-4 4c-1-.4-2.2-.2-3 .6l-3.9 3.9h-.1v-14zm5.4 11.5c.1-.1.1-.1.2-.1.3-.2.7-.1 1 .1l.6.6 1.9 1.9h-6.2l2.5-2.5zm6.6 2.5l-3.3-3.3 3.8-3.8c.6-.6 1.5-.6 2.1 0l5.5 5.5v1.6h-8.1z"></path></svg></symbol><symbol id="next-subtract" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12" enable-background="new 0 0 12 12"><path d="M6 0"></path><path d="M.8 7C.3 7 0 6.7 0 6.2v-.4c0-.5.3-.8.8-.8h10.5c.4 0 .7.3.7.8v.5c0 .4-.3.7-.8.7H.8z"></path></svg></symbol><symbol id="next-remove" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"><path d="M19.5 22c-.2 0-.5-.1-.7-.3L12 14.9l-6.8 6.8c-.2.2-.4.3-.7.3-.2 0-.5-.1-.7-.3l-1.6-1.6c-.1-.2-.2-.4-.2-.6 0-.2.1-.5.3-.7L9.1 12 2.3 5.2C2.1 5 2 4.8 2 4.5c0-.2.1-.5.3-.7l1.6-1.6c.2-.1.4-.2.6-.2.3 0 .5.1.7.3L12 9.1l6.8-6.8c.2-.2.4-.3.7-.3.2 0 .5.1.7.3l1.6 1.6c.1.2.2.4.2.6 0 .2-.1.5-.3.7L14.9 12l6.8 6.8c.2.2.3.4.3.7 0 .2-.1.5-.3.7l-1.6 1.6c-.2.1-.4.2-.6.2z"></path></svg></symbol><symbol id="next-chevron-down" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"><path d="M21 5.176l-9.086 9.353-8.914-9.353-2.314 2.471 11.314 11.735 11.314-11.735-2.314-2.471z"></path></svg></symbol><symbol id="next-search-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><path d="M0 5.667c0 3.125 2.542 5.667 5.667 5.667 1.202 0 2.315-.38 3.233-1.02l.455.456c-.07.5.082 1.025.466 1.41l3.334 3.332c.326.325.753.488 1.18.488.425 0 .852-.163 1.177-.488.652-.65.652-1.706 0-2.357L12.18 9.822c-.384-.384-.91-.536-1.41-.466l-.454-.456c.64-.918 1.02-2.03 1.02-3.233C11.333 2.542 8.79 0 5.666 0S0 2.542 0 5.667zm2 0C2 3.645 3.645 2 5.667 2s3.667 1.645 3.667 3.667-1.646 3.666-3.667 3.666S2 7.688 2 5.667z"></path></svg></symbol><symbol id="next-spinner"><svg preserveAspectRatio="xMinYMin"><circle class="next-spinner__ring" cx="50%" cy="50%" r="45%"/></svg></symbol><symbol id="next-document" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"><g><path d="M16 6h5.9c-.1-.2-.2-.3-.3-.4L20 4 16.4.4c-.1-.1-.3-.2-.4-.3V6zM15 8c-.6 0-1-.4-1-1V0H3.5C2.7 0 2 .7 2 1.5v21c0 .8.7 1.5 1.5 1.5h17c.8 0 1.5-.7 1.5-1.5V8h-7zM6 6h4c.6 0 1 .4 1 1s-.4 1-1 1H6c-.6 0-1-.4-1-1s.4-1 1-1zm12 12H6c-.6 0-1-.4-1-1s.4-1 1-1h12c.6 0 1 .4 1 1s-.4 1-1 1zm0-5H6c-.6 0-1-.4-1-1s.4-1 1-1h12c.6 0 1 .4 1 1s-.4 1-1 1z"></path></g></svg></symbol><symbol id="next-credit-card" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"><g><path d="M23.6 10H.4c-.2 0-.4.5-.4.7v7.7c0 .7.6 1.6 1.3 1.6h21.4c.7 0 1.3-.9 1.3-1.6v-7.7c0-.2-.2-.7-.4-.7zM20 16.6c0 .2-.2.4-.4.4h-4.1c-.2 0-.4-.2-.4-.4v-2.1c0-.2.2-.4.4-.4h4.1c.2 0 .4.2.4.4v2.1zM22.7 4H1.3C.6 4 0 4.9 0 5.6v1.7c0 .2.2.7.4.7h23.1c.3 0 .5-.5.5-.7V5.6c0-.7-.6-1.6-1.3-1.6z"></path></g></svg></symbol><symbol id="next-error" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"><path d="M12 0C5.4 0 0 5.4 0 12s5.4 12 12 12 12-5.4 12-12S18.6 0 12 0zm0 4c1.4 0 2.7.4 3.9 1L12 8.8 8.8 12 5 15.9c-.6-1.1-1-2.5-1-3.9 0-4.4 3.6-8 8-8zm0 16c-1.4 0-2.7-.4-3.9-1l3.9-3.9 3.2-3.2L19 8.1c.6 1.1 1 2.5 1 3.9 0 4.4-3.6 8-8 8z"></path></svg></symbol><symbol id="next-add-circle" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12"><path d="M6 0c-3.3 0-6 2.7-6 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zm3 7h-2v2c0 .5-.5 1-1 1s-1-.5-1-1v-2h-2c-.5 0-1-.5-1-1s.5-1 1-1h2v-2c0-.5.5-1 1-1s1 .5 1 1v2h2c.5 0 1 .5 1 1s-.5 1-1 1z"></path></svg></symbol><symbol id="next-website" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M9.4 2c-.2 0-.3.3-.2.4l1.4 1.4-3.8 3.9c-.2.2-.2.6 0 .8l.8.8c.2.2.6.2.8 0l3.8-3.8 1.4 1.4c.2.2.4 0 .4-.2v-4.2c0-.3-.2-.5-.5-.5h-4.1zm.6 0h-6c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2v-6 2h-2v3c0 .6-.5 1-1 1h-6c-.6 0-1-.5-1-1v-6c0-.6.5-1 1-1h3v-2h2z"></path></svg></symbol><symbol id="loading-circle" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1_copy" x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve"><g><circle fill="#202428" cx="15" cy="8" r="1"></circle><circle fill="#22262A" cx="14.971" cy="8.637" r="1"></circle><circle fill="#24282D" cx="14.887" cy="9.258" r="1"></circle><circle fill="#262A2F" cx="14.75" cy="9.86" r="1"></circle><circle fill="#282D31" cx="14.563" cy="10.441" r="1"></circle><circle fill="#2A2F34" cx="14.327" cy="10.999" r="1"></circle><circle fill="#2C3136" cx="14.045" cy="11.531" r="1"></circle><circle fill="#2E3338" cx="13.721" cy="12.035" r="1"></circle><circle fill="#2F353B" cx="13.356" cy="12.508" r="1"></circle><circle fill="#31373D" cx="12.952" cy="12.947" r="1"></circle><circle fill="#33393F" cx="12.513" cy="13.351" r="1"></circle><circle fill="#353C42" cx="12.04" cy="13.717" r="1"></circle><circle fill="#373E44" cx="11.537" cy="14.042" r="1"></circle><circle fill="#394046" cx="11.005" cy="14.324" r="1"></circle><circle fill="#3B4249" cx="10.447" cy="14.56" r="1"></circle><circle fill="#3D444B" cx="9.866" cy="14.748" r="1"></circle><circle fill="#3F464D" cx="9.264" cy="14.886" r="1"></circle><circle fill="#414950" cx="8.644" cy="14.971" r="1"></circle><circle fill="#434B52" cx="8.007" cy="15" r="1"></circle><circle fill="#454D54" cx="7.37" cy="14.972" r="1"></circle><circle fill="#474F57" cx="6.749" cy="14.889" r="1"></circle><circle fill="#495159" cx="6.147" cy="14.752" r="1"></circle><circle fill="#4B535B" cx="5.565" cy="14.565" r="1"></circle><circle fill="#4C555E" cx="5.007" cy="14.33" r="1"></circle><circle fill="#4E5860" cx="4.474" cy="14.049" r="1"></circle><circle fill="#505A62" cx="3.97" cy="13.725" r="1"></circle><circle fill="#525C65" cx="3.497" cy="13.36" r="1"></circle><circle fill="#545E67" cx="3.057" cy="12.957" r="1"></circle><circle fill="#566069" cx="2.653" cy="12.518" r="1"></circle><circle fill="#58626C" cx="2.287" cy="12.045" r="1"></circle><circle fill="#5A646E" cx="1.961" cy="11.542" r="1"></circle><circle fill="#5C6770" cx="1.679" cy="11.011" r="1"></circle><circle fill="#5E6972" cx="1.442" cy="10.453" r="1"></circle><circle fill="#606B75" cx="1.253" cy="9.873" r="1"></circle><circle fill="#626D77" cx="1.115" cy="9.271" r="1"></circle><circle fill="#646F79" cx="1.03" cy="8.65" r="1"></circle><circle fill="#66717C" cx="1" cy="8.014" r="1"></circle><circle fill="#68737E" cx="1.027" cy="7.377" r="1"></circle><circle fill="#6A7680" cx="1.11" cy="6.756" r="1"></circle><circle fill="#6B7883" cx="1.246" cy="6.153" r="1"></circle><circle fill="#6D7A85" cx="1.433" cy="5.571" r="1"></circle><circle fill="#6F7C87" cx="1.668" cy="5.013" r="1"></circle><circle fill="#717E8A" cx="1.948" cy="4.48" r="1"></circle><circle fill="#73808C" cx="2.272" cy="3.976" r="1"></circle><circle fill="#75828E" cx="2.636" cy="3.502" r="1"></circle><circle fill="#778591" cx="3.039" cy="3.062" r="1"></circle><circle fill="#798793" cx="3.477" cy="2.657" r="1"></circle><circle fill="#7B8995" cx="3.949" cy="2.29" r="1"></circle><circle fill="#7D8B98" cx="4.452" cy="1.964" r="1"></circle><circle fill="#7F8D9A" cx="4.983" cy="1.682" r="1"></circle><circle fill="#818F9C" cx="5.54" cy="1.444" r="1"></circle><circle fill="#83929F" cx="6.121" cy="1.255" r="1"></circle><circle fill="#8594A1" cx="6.723" cy="1.116" r="1"></circle><circle fill="#8796A3" cx="7.343" cy="1.03" r="1"></circle><circle fill="#8898A6" cx="7.979" cy="1" r="1"></circle><circle fill="#8A9AA8" cx="8.609" cy="1.027" r="1"></circle><circle fill="#8C9CAA" cx="9.226" cy="1.109" r="1"></circle><circle fill="#8E9EAD" cx="9.827" cy="1.245" r="1"></circle><circle fill="#90A1AF" cx="10.408" cy="1.429" r="1"></circle><circle fill="#92A3B1" cx="10.967" cy="1.66" r="1"></circle><circle fill="#94A5B4" cx="11.498" cy="1.935" r="1"></circle><circle fill="#96A7B6" cx="12" cy="2.25" r="1"></circle></g></svg></symbol><symbol id="clear" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" baseProfile="tiny" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" fill="#BFBFBF" d="M12.234 3.766c-2.334-2.334-6.119-2.334-8.453 0s-2.334 6.119 0 8.453 6.119 2.334 8.453 0 2.334-6.119 0-8.453zm-1.06 6.329l-1.056 1.056-2.11-2.112-2.111 2.111-1.056-1.056 2.111-2.111-2.111-2.11 1.056-1.056 2.111 2.111 2.111-2.111 1.056 1.056-2.112 2.111 2.111 2.111z"></path></svg></symbol><symbol id="next-info" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"><g><path d="M13.5 7h-2c-.8 0-1.5.7-1.5 1.5v14c0 .8.7 1.5 1.5 1.5h2c.8 0 1.5-.7 1.5-1.5v-14c0-.8-.7-1.5-1.5-1.5z"></path><circle cx="12.5" cy="2.5" r="2.5"></circle></g></svg></symbol><symbol id="next-dashboard-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><g><path d="M8.43 3.445c-.248-.21-.612-.21-.86 0L2.353 7.86C2.13 8.05 2 8.33 2 8.624v6.71c0 .366.3.666.667.666h2.667C5.7 16 6 15.7 6 15.333v-3c0-.183.15-.333.333-.333h3.333c.184 0 .334.15.334.333v3c0 .367.3.667.667.667h2.667c.366 0 .666-.3.666-.667v-6.71c0-.294-.13-.573-.354-.763L8.43 3.445zM15.764 6.158L8.944.39C8.692.14 8.357 0 8 0c-.357 0-.692.14-.902.354L.236 6.158c-.28.238-.316.66-.078.94.132.156.32.236.51.236.15 0 .304-.052.43-.158L7.6 1.638c.238-.178.56-.18.797-.003 1.468 1.1 6.505 5.54 6.505 5.54.28.237.702.203.94-.078.238-.28.203-.7-.078-.94z"></path></g></svg></symbol><symbol id="next-orders-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><g><path d="M13.992 0H2.1C.94 0 0 .94 0 2.1v12.244C0 15.305.785 16 1.75 16H14.34c.964 0 1.658-.694 1.658-1.658V2.1C16 .94 15.15 0 13.992 0zM14 2v8h-1.757C11.28 10 10 11.28 10 12.243v.7c0 .193.337.057.144.057H5.247c-.193 0-.247.136-.247-.057v-.7C5 11.28 4.113 10 3.148 10H2V2h12zM7.117 9.963c.167.16.437.16.603.002l5.17-5.042c.165-.16.165-.422 0-.583l-.604-.583c-.166-.16-.437-.16-.603 0L7.42 7.924 5.694 6.24c-.166-.16-.437-.16-.603 0l-.604.582c-.166.162-.166.423 0 .584l2.63 2.557z"></path></g></svg></symbol><symbol id="next-chevron-nav" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10.6,6 L8.2,8 L12,12 L8.2,16 L10.6,18 L15.3,13 C15.8,12.4 15.8,11.6 15.3,11 L10.6,6 L10.6,6 Z"></path></svg></symbol><symbol id="next-products-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><path d="M15.087 0H10.01c-.554 0-1.085.235-1.476.627L.3 8.87c-.37.368-.37.965 0 1.327l5.553 5.556c.362.368.955.37 1.323 0L15.4 7.52c.39-.392.6-.922.6-1.476V.967C16 .45 15.604 0 15.087 0zm-2.89 5.56c-.94 0-1.702-.764-1.702-1.703 0-.94.763-1.702 1.702-1.702.94 0 1.702.763 1.702 1.702 0 .94-.764 1.702-1.703 1.702z"></path></svg></symbol><symbol id="next-customers-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><g><path d="M13.08 8.26c-.68-.275-.674-.732-.674-1.007 0-.274.29-.657.566-.903.48-.423.777-1.04.777-1.737 0-1.206-1.018-2.21-2.224-2.257-.896-.03-1.658.41-2.062 1.1-.088.15-.03.337.127.415 1.12.555 1.873 1.69 1.873 3.03 0 .87-.32 1.698-.894 2.332-.128.14-.077.362.094.442.663.31 2.044.745 2.598 1.462.055.07.134-.136.224-.136h1.657c.473 0 .857.116.857-.358v-.12c0-1.308-1.93-1.85-2.92-2.263zM5.398 9.232c-.542-.603-.827-1.39-.827-2.304 0-1.348.74-2.53 1.863-3.08.16-.077.22-.267.128-.418-.5-.816-1.523-1.265-2.634-.993-1.006.24-1.64 1.17-1.64 2.21 0 .698.223 1.28.71 1.704.273.247.6.63.6.904s-.035.73-.715 1.006C1.89 8.67 0 9.214 0 10.522v.12c0 .474.384.358.857.358h1.656c.09 0 .17.206.226.133.544-.716 1.905-1.277 2.56-1.59.167-.078.222-.173.098-.31zM9.867 10.546c-.68-.278-.78-.735-.78-1.006 0-.274.234-.656.508-.9.483-.426.754-1.046.754-1.74 0-1.492-1.39-2.55-2.957-2.184-1.018.237-1.672 1.168-1.672 2.212 0 .695.223 1.286.706 1.71.274.246.596.628.596.902 0 .27-.248.728-.927 1.006C5.11 10.954 3 11.5 3 12.806v.122C3 13.4 3.812 14 4.286 14h7.43c.472 0 1.284-.6 1.284-1.072v-.122c0-1.307-2.147-1.852-3.133-2.26z"></path></g></svg></symbol><symbol id="next-reports-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><g><path d="M4 9.667C4 9.297 3.702 9 3.333 9H1.667C1.297 9 1 9.298 1 9.667v5.667c0 .368.298.666.667.666h1.667c.368 0 .666-.298.666-.667V9.667zM8 3.667C8 3.297 7.702 3 7.333 3H5.667C5.297 3 5 3.298 5 3.667v11.667c0 .368.298.666.667.666h1.667c.368 0 .666-.298.666-.667V3.667zM12 .667c0-.37-.298-.667-.667-.667H9.667C9.297 0 9 .298 9 .667v14.667c0 .368.298.666.667.666h1.667c.368 0 .666-.298.666-.667V.667zM16 6.667c0-.37-.298-.667-.667-.667h-1.667c-.368 0-.666.298-.666.667v8.667c0 .368.298.666.667.666h1.667c.368 0 .666-.298.666-.667V6.667z"></path></g></svg></symbol><symbol id="next-discounts-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><g><path d="M9 13.333C9 13.15 8.85 13 8.667 13H6.333c-.184 0-.333.15-.333.333v.333c0 .185.15.334.333.334h2.333c.185 0 .334-.15.334-.333v-.334zM13 13.333c0-.184-.15-.333-.333-.333h-2.333c-.185 0-.334.15-.334.333v.333c0 .185.15.334.333.334h2.333c.185 0 .334-.15.334-.333v-.334zM16 8.333C16 8.15 15.85 8 15.667 8h-.333c-.185 0-.334.15-.334.333v2.333c0 .185.15.334.333.334h.333c.185 0 .334-.15.334-.333V8.333zM11.3 9.2L7.272 5.902 11.3 2.607l-.013-.016c-.692-.845-1.94-.97-2.786-.278l-2.808 2.3-1.18-.966c.096-.254.155-.526.155-.813C4.667 1.547 3.62.5 2.333.5S0 1.547 0 2.833s1.047 2.333 2.333 2.333c.255 0 .495-.05.725-.127l1.055.862-.93.763c-.265-.103-.55-.165-.85-.165C1.047 6.5 0 7.547 0 8.833s1.047 2.333 2.333 2.333 2.333-1.047 2.333-2.333c0-.246-.05-.478-.12-.7l1.145-.938L8.5 9.493c.846.692 2.094.568 2.786-.28L11.3 9.2zM1.333 2.832c0-.55.45-1 1-1s1 .45 1 1-.45 1-1 1-1-.448-1-1zm1 7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1c0 .552-.448 1-1 1zM13 5.333C13 5.15 12.85 5 12.667 5h-2.333c-.185 0-.334.15-.334.333v.333c0 .185.15.334.333.334h2.333c.185 0 .334-.15.334-.333v-.334zM15.5 5h-1c-.276 0-.5 0-.5.5s.224.5.5.5h.5v.48c0 .275 0 .5.5.5s.5-.225.5-.5V5.5c0-.276-.063-.5-.5-.5zM3.5 14h1c.276 0 .5 0 .5-.5s-.224-.5-.5-.5H4v-.5c0-.276 0-.5-.5-.5s-.5.224-.5.5v.98c0 .275.062.52.5.52zM16 13.49v-1c0-.276 0-.5-.5-.5s-.5.224-.5.5V13h-.49c-.276 0-.5 0-.5.5s.224.5.5.5h.98c.276 0 .51-.073.51-.51z"></path></g></svg></symbol><symbol id="next-add-circle-outline" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M12 24c6.627 0 12-5.373 12-12s-5.373-12-12-12-12 5.373-12 12 5.373 12 12 12zm0-2.667c-5.155 0-9.333-4.179-9.333-9.333 0-5.155 4.179-9.333 9.333-9.333 5.155 0 9.333 4.179 9.333 9.333 0 5.155-4.179 9.333-9.333 9.333z"></path><path d="M12.623 13.337h3.663c.394 0 .714-.32.714-.714v-1.246c0-.394-.32-.714-.714-.714h-3.663l.714.714v-3.663c0-.394-.32-.714-.714-.714h-1.246c-.394 0-.714.32-.714.714v3.663l.714-.714h-3.663c-.394 0-.714.32-.714.714v1.246c0 .394.32.714.714.714h3.663l-.714-.714v3.663c0 .394.32.714.714.714h1.246c.394 0 .714-.32.714-.714v-3.663l-.714.714z"></path></g></svg></symbol><symbol id="next-online-store-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14.1c-3.4 0-6.1-2.7-6.1-6.1 0-.9.2-1.8.6-2.6v.3c0 .2.3.5.3.7 0 .3.2.5.4.7.3.1.6.2.8.4.2.2.4.3.7.2.2.2.1.4 0 .6-.2.2-.3.4-.3.5-.1.3-.1.6.2.8.2.1.3.3.3.5s.2.4.3.5c.4.2.4.6.5 1 .1.8.7 2 .9 1.6.2-.3.6-.9.8-1.1.1-.1.2-.2.2-.3.1-.2.2-.4.4-.5.1-.1.2-.2.2-.3 0-.4.2-.8.4-1.1.4-.5.2-.8-.4-1-.3-.1-.7-.3-1.1-.1v-.2c.1-.5 0-.6-.5-.8-.2-.2-.4-.3-.6-.4-.2-.1-.5 0-.8-.1-.3.1-.2-.4-.5-.5-.6-.6.3-.8.7-.6.1.1.5-.5 1.3-1 .2 0 .1-1 .3-1-1.7-1-2-1.4-2-1.4h-.2c.9-.6 2-.9 3.2-.9h.6l-.1.1s-.5.3.1 1c.2.2.7.8.6.9 0 .2 1.4-.1 1.6-.1.4 0 .3.6 0 .7 0 .1-1.8.3-1.9.3-.3.4-.3.3-.2.7 0 .2-.1.3-.1.6.2.2.4.5.6.8.3.3.5.8.8.7.1 0 .2-.1.4-.2.1.1.3.4.5.5-.1.3 0 .5.2.8.1.1 0 .8-.1.9-.1.2 0 .6.2 1s.7.4.9 0l.7-1.9c.2-.4.5-.7.9-.9l.3-.1V8c.1 3.4-2.6 6.1-6 6.1z"></path></svg></symbol><symbol id="next-apps-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><path d="M12.383 9.734c.59.41.882 1.044.87 1.675-.004.29.357.43.563.226l1.894-1.894c.387-.387.387-1.015 0-1.402l-2.498-2.498c-.167-.167-.115-.463.11-.54.397-.133.76-.396 1.02-.798.432-.662.416-1.56-.04-2.204-.734-1.033-2.175-1.123-3.03-.268-.216.216-.37.47-.463.74-.08.23-.387.28-.56.108L7.767.397C7.38.01 6.75.01 6.364.397L4.472 2.29c-.215.214-.05.565.257.565.504 0 1.013.192 1.4.58.87.87.765 2.34-.316 3.06-.663.443-1.568.435-2.216-.028-.576-.412-.86-1.04-.855-1.664.01-.29-.355-.43-.56-.224L.29 6.47c-.387.388-.387 1.016 0 1.403l2.498 2.498c.167.168.115.464-.11.54-.397.134-.76.397-1.02.8-.432.66-.416 1.56.04 2.203.734 1.033 2.175 1.123 3.03.268.216-.215.37-.47.463-.74.08-.23.387-.28.56-.107l2.483 2.484c.387.387 1.015.387 1.402 0l1.892-1.892c.215-.215.05-.564-.254-.563-.508 0-1.016-.193-1.404-.582-.86-.86-.768-2.304.278-3.037.658-.462 1.574-.466 2.235-.01z"></path></svg></symbol><symbol id="next-settings-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><path d="M15.733 6.767l-1.77-.36c-.117-.025-.21-.112-.245-.227-.102-.323-.232-.636-.39-.935-.056-.107-.053-.234.013-.335l1-1.51c.086-.13.07-.304-.042-.415L13.02 1.707c-.114-.114-.292-.132-.426-.043l-1.504.995c-.1.066-.228.07-.335.013-.3-.158-.61-.288-.935-.39-.114-.037-.202-.13-.226-.247l-.36-1.77C9.2.113 9.063 0 8.906 0H7.093c-.158 0-.295.11-.326.267l-.36 1.77c-.025.117-.113.21-.227.245-.323.102-.636.232-.935.39-.107.056-.234.053-.335-.013l-1.504-.996c-.134-.09-.312-.07-.426.043L1.702 2.985c-.11.11-.128.284-.042.415l1 1.51c.066.1.07.228.012.335-.158.3-.288.612-.39.935-.036.114-.128.202-.246.226l-1.77.36C.113 6.8 0 6.937 0 7.094v1.813c0 .158.11.295.267.327l1.77.36c.117.025.21.112.245.227.102.323.232.636.39.935.056.107.053.234-.013.335l-.996 1.504c-.09.134-.07.312.043.426l1.273 1.273c.114.114.292.132.426.043l1.504-.995c.1-.066.228-.07.335-.012.3.158.61.288.935.39.115.036.202.128.226.246l.36 1.77c.032.155.17.266.327.266h1.813c.158 0 .295-.11.327-.267l.36-1.77c.025-.117.112-.21.227-.245.323-.102.636-.232.935-.39.107-.056.234-.053.335.013l1.504.996c.134.09.312.07.426-.043l1.273-1.273c.114-.114.132-.292.043-.426l-.995-1.504c-.066-.1-.07-.228-.012-.335.158-.3.288-.61.39-.935.036-.115.128-.202.246-.226l1.77-.36c.155-.032.266-.17.266-.327V7.093c0-.158-.112-.295-.267-.326zM10.667 8c0 1.473-1.193 2.667-2.667 2.667S5.333 9.473 5.333 8c0-1.473 1.193-2.667 2.667-2.667S10.667 6.527 10.667 8z"></path></svg></symbol><symbol id="next-menu-16" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" enable-background="new 0 0 16 16"><path d="M7 9H1c-.552 0-1-.114-1-.667v-.666C0 7.114.448 7 1 7h14c.552 0 1 .114 1 .667v.667c0 .552-.448.666-1 .666H7zM7 4H1c-.552 0-1-.114-1-.667v-.666C0 2.114.448 2 1 2h14c.552 0 1 .114 1 .667v.667c0 .552-.448.666-1 .666H7zM7 14H1c-.552 0-1-.114-1-.667v-.667C0 12.114.448 12 1 12h14c.552 0 1 .114 1 .667v.667c0 .552-.448.666-1 .666H7z"></path></svg></symbol><symbol id="next-delete" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12" enable-background="new 0 0 12 12"><path d="M12 2c0 .5-.4 1-.8 1H.8C.4 3 0 2.5 0 2s.4-1 .8-1H4c0-.5.7-1 1.2-1h1.6C7.3 0 8 .6 8 1h3.2c.4 0 .8.5.8 1zm-1 2.6v6.6c0 .4-.8.8-1.2.8H2.2c-.4 0-1.2-.3-1.2-.8V4.6c0-.1.5-.6.7-.6h8.7c.1 0 .6.5.6.6zM5 6.4c0-.2-.2-.4-.4-.4h-.2c-.2 0-.4.2-.4.4v3.2c0 .2.2.4.4.4h.2c.2 0 .4-.2.4-.4V6.4zm3 0c0-.2-.2-.4-.4-.4h-.2c-.2 0-.4.2-.4.4v3.2c0 .2.2.4.4.4h.2c.2 0 .4-.2.4-.4V6.4z"></path></svg></symbol><symbol id="next-chevron" class="icon-symbol--loaded"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6 4l9 8-9 8 2 2 11-10L8 2 6 4" fill="currentColor"></path></svg></symbol></svg>/svg></div>
@@ -1,15 +1,110 @@
1
+ ##
2
+ # While this migration file is called "create shops if not existent", it's actually a reset of all `disco_app`
3
+ # migrations up until 23 January 2017. It's kept its name like this to ensure compatibility across upgraded apps.
1
4
  class CreateShopsIfNotExistent < ActiveRecord::Migration
2
5
 
3
6
  def change
4
- unless table_exists? :shops or table_exists? :disco_app_shops
5
- create_table :shops do |t|
6
- t.string :shopify_domain, null: false
7
- t.string :shopify_token, null: false
8
- t.timestamps null: false
9
- end
7
+ return if table_exists? :disco_app_shops
10
8
 
11
- add_index :shops, :shopify_domain, unique: true
9
+ create_table "disco_app_app_settings", force: :cascade do |t|
10
+ t.datetime "created_at", null: false
11
+ t.datetime "updated_at", null: false
12
12
  end
13
+
14
+ create_table "disco_app_application_charges", force: :cascade do |t|
15
+ t.integer "shop_id", limit: 8
16
+ t.integer "subscription_id", limit: 8
17
+ t.integer "status", default: 0
18
+ t.datetime "created_at", null: false
19
+ t.datetime "updated_at", null: false
20
+ t.integer "shopify_id", limit: 8
21
+ t.string "confirmation_url"
22
+ end
23
+
24
+ create_table "disco_app_plan_codes", force: :cascade do |t|
25
+ t.integer "plan_id", limit: 8
26
+ t.string "code"
27
+ t.integer "trial_period_days"
28
+ t.integer "amount"
29
+ t.datetime "created_at", null: false
30
+ t.datetime "updated_at", null: false
31
+ t.integer "status", default: 0
32
+ end
33
+
34
+ create_table "disco_app_plans", force: :cascade do |t|
35
+ t.integer "status", default: 0
36
+ t.string "name"
37
+ t.integer "plan_type", default: 0
38
+ t.integer "trial_period_days"
39
+ t.datetime "created_at", null: false
40
+ t.datetime "updated_at", null: false
41
+ t.integer "amount", default: 0
42
+ t.string "currency", default: "USD"
43
+ t.integer "interval", default: 0
44
+ t.integer "interval_count", default: 1
45
+ end
46
+
47
+ create_table "disco_app_recurring_application_charges", force: :cascade do |t|
48
+ t.integer "shop_id", limit: 8
49
+ t.integer "subscription_id", limit: 8
50
+ t.integer "status", default: 0
51
+ t.datetime "created_at", null: false
52
+ t.datetime "updated_at", null: false
53
+ t.integer "shopify_id", limit: 8
54
+ t.string "confirmation_url"
55
+ end
56
+
57
+ create_table "disco_app_sessions", force: :cascade do |t|
58
+ t.string "session_id", null: false
59
+ t.text "data"
60
+ t.datetime "created_at", null: false
61
+ t.datetime "updated_at", null: false
62
+ t.integer "shop_id"
63
+ end
64
+
65
+ add_index "disco_app_sessions", ["session_id"], name: "index_disco_app_sessions_on_session_id", unique: true, using: :btree
66
+ add_index "disco_app_sessions", ["updated_at"], name: "index_disco_app_sessions_on_updated_at", using: :btree
67
+
68
+ create_table "disco_app_shops", force: :cascade do |t|
69
+ t.string "shopify_domain", null: false
70
+ t.string "shopify_token", null: false
71
+ t.datetime "created_at", null: false
72
+ t.datetime "updated_at", null: false
73
+ t.integer "status", default: 0
74
+ t.string "domain"
75
+ t.string "plan_name"
76
+ t.string "name"
77
+ t.jsonb "data", default: {}
78
+ end
79
+
80
+ add_index "disco_app_shops", ["shopify_domain"], name: "index_disco_app_shops_on_shopify_domain", unique: true, using: :btree
81
+
82
+ create_table "disco_app_subscriptions", force: :cascade do |t|
83
+ t.integer "shop_id"
84
+ t.integer "plan_id"
85
+ t.integer "status"
86
+ t.integer "subscription_type"
87
+ t.datetime "created_at", null: false
88
+ t.datetime "updated_at", null: false
89
+ t.datetime "trial_start_at"
90
+ t.datetime "trial_end_at"
91
+ t.datetime "cancelled_at"
92
+ t.integer "amount", default: 0
93
+ t.integer "plan_code_id", limit: 8
94
+ t.string "source"
95
+ t.integer "trial_period_days"
96
+ end
97
+
98
+ add_index "disco_app_subscriptions", ["plan_id"], name: "index_disco_app_subscriptions_on_plan_id", using: :btree
99
+ add_index "disco_app_subscriptions", ["shop_id"], name: "index_disco_app_subscriptions_on_shop_id", using: :btree
100
+
101
+ add_foreign_key "disco_app_application_charges", "disco_app_shops", column: "shop_id"
102
+ add_foreign_key "disco_app_application_charges", "disco_app_subscriptions", column: "subscription_id"
103
+ add_foreign_key "disco_app_plan_codes", "disco_app_plans", column: "plan_id"
104
+ add_foreign_key "disco_app_recurring_application_charges", "disco_app_shops", column: "shop_id"
105
+ add_foreign_key "disco_app_recurring_application_charges", "disco_app_subscriptions", column: "subscription_id"
106
+ add_foreign_key "disco_app_sessions", "disco_app_shops", column: "shop_id", on_delete: :cascade
107
+ add_foreign_key "disco_app_subscriptions", "disco_app_plan_codes", column: "plan_code_id"
13
108
  end
14
109
 
15
110
  end
@@ -1,3 +1,3 @@
1
1
  module DiscoApp
2
- VERSION = '0.11.1'
2
+ VERSION = '0.12.0'
3
3
  end
@@ -22,44 +22,41 @@ class DiscoAppGenerator < Rails::Generators::Base
22
22
  end
23
23
 
24
24
  # Configure the application's Gemfile.
25
- def configure_gems
26
- # Remove sqlite from the general Gemfile.
25
+ def configure_gemfile
26
+ # Remove sqlite.
27
27
  gsub_file 'Gemfile', /^# Use sqlite3 as the database for Active Record\ngem 'sqlite3'/m, ''
28
28
 
29
- # Add gems common to all environments.
30
- gem 'shopify_app', '~> 6.4.1'
31
- gem 'sidekiq', '~> 4.0.2'
32
- gem 'puma', '~> 2.14.0'
33
- gem 'activerecord-session_store', '~> 1.0.0'
34
- gem 'activeresource', github: 'shopify/activeresource', tag: '4.2-threadsafe'
35
- gem 'rails-bigint-pk', '~> 1.2.0'
36
- gem 'acts_as_singleton', '~> 0.0.8'
37
- gem 'pg', '~> 0.18.3'
38
- gem 'react-rails', '~> 1.10'
39
- gem 'classnames-rails', '~> 2.1.5'
40
- gem 'active_link_to', '~> 1.0.2'
41
- gem 'premailer-rails', '~> 1.8.2'
42
- gem 'nokogiri', '~> 1.6.8'
43
- gem 'render_anywhere', '~> 0.0.12', require: false
44
-
45
- # Add gems for development and testing only.
46
- gem_group :development, :test do
47
- gem 'dotenv-rails', '~> 2.0.2'
48
- gem 'minitest-reporters', '~> 1.0.19'
49
- gem 'guard', '~> 2.13.0'
50
- gem 'guard-minitest', '~> 2.4.4'
51
- end
52
-
53
- # Add gems for production only.
29
+ # Add gem requirements.
30
+ gem 'shopify_app'
31
+ gem 'pg'
32
+ gem 'sidekiq'
33
+ gem 'rollbar'
34
+ gem 'newrelic_rpm'
35
+ gem 'react-rails'
36
+ gem 'classnames-rails'
37
+ gem 'premailer-rails'
38
+ gem 'rails-bigint-pk'
39
+ gem 'acts_as_singleton'
40
+ gem 'active_link_to'
41
+ gem 'nokogiri'
42
+ gem 'oj'
43
+ gem 'render_anywhere'
44
+
45
+ # Specify the threadsafe version of ActiveResource.
46
+ gem 'activeresource', git: 'https://github.com/shopify/activeresource.git', tag: '4.2-threadsafe'
47
+
48
+ # Indicate which gems should only be used in production.
54
49
  gem_group :production do
55
- gem 'rails_12factor', '~> 0.0.3'
56
- gem 'mailgun_rails', '~> 0.7.0'
50
+ gem 'rails_12factor'
51
+ gem 'mailgun_rails'
57
52
  end
58
53
 
59
- # Add monitoring gems to Gemfile
60
- gem 'rollbar', '~> 2.8.0'
61
- gem 'oj', '~> 2.14.5'
62
- gem 'newrelic_rpm', '~> 3.15.2.317'
54
+ # Indicate which gems should only be used in development and test.
55
+ gem_group :development, :test do
56
+ gem 'dotenv-rails'
57
+ gem 'minitest-reporters'
58
+ gem 'webmock'
59
+ end
63
60
  end
64
61
 
65
62
  # copy template for pg configuration
@@ -3,6 +3,11 @@ require 'active_utils'
3
3
  class DiscoApp::Shop < ActiveRecord::Base
4
4
  include DiscoApp::Concerns::Shop
5
5
 
6
+ has_one :js_configuration
7
+ has_one :widget_configuration
8
+ has_many :carts
9
+ has_many :products
10
+
6
11
  # Extend the Shop model to return the Shop's country as an ActiveUtils country.
7
12
  def country
8
13
  begin
@@ -1,5 +1,5 @@
1
1
  cart:
2
- id: 632910393
3
2
  shop: widget_store
3
+ id: 632910393
4
4
  token: efa1e7d02cfc60cf3ddadbed770ef1b6
5
5
  data: {}
@@ -1,4 +1,4 @@
1
1
  ipod:
2
- id: 632910393
3
2
  shop: widget_store
3
+ id: 632910393
4
4
  data: {}