polaris_view_components 0.9.1 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +20 -65
  3. data/app/assets/javascripts/polaris_view_components/dropzone_controller.js +24 -5
  4. data/app/assets/javascripts/polaris_view_components/text_field_controller.js +5 -0
  5. data/app/assets/javascripts/polaris_view_components.js +28 -7
  6. data/app/assets/stylesheets/polaris_view_components/custom.css +60 -8
  7. data/app/assets/stylesheets/polaris_view_components.css +48 -9
  8. data/app/components/polaris/action_list/item_component.rb +2 -1
  9. data/app/components/polaris/button_component.html.erb +2 -2
  10. data/app/components/polaris/data_table/column_component.rb +2 -1
  11. data/app/components/polaris/data_table_component.html.erb +1 -0
  12. data/app/components/polaris/dropzone_component.html.erb +13 -8
  13. data/app/components/polaris/empty_search_results_component.html.erb +12 -0
  14. data/app/components/polaris/empty_search_results_component.rb +19 -0
  15. data/app/components/polaris/filters_component.rb +3 -1
  16. data/app/components/polaris/headless_button.html.erb +2 -2
  17. data/app/components/polaris/headless_button.rb +3 -1
  18. data/app/components/polaris/index_table/column_component.rb +2 -1
  19. data/app/components/polaris/index_table_component.html.erb +3 -5
  20. data/app/components/polaris/index_table_component.rb +10 -0
  21. data/app/components/polaris/page_component.html.erb +81 -10
  22. data/app/components/polaris/page_component.rb +91 -29
  23. data/app/components/polaris/resource_item_component.rb +4 -1
  24. data/app/components/polaris/resource_list_component.html.erb +11 -0
  25. data/app/components/polaris/resource_list_component.rb +21 -0
  26. data/app/components/polaris/text_field_component.html.erb +1 -1
  27. data/app/components/polaris/text_field_component.rb +1 -1
  28. data/app/components/polaris/visually_hidden_component.rb +0 -3
  29. data/app/helpers/polaris/url_helper.rb +37 -0
  30. data/app/helpers/polaris/view_helper.rb +1 -0
  31. data/lib/install/install.rb +57 -0
  32. data/lib/polaris/view_components/version.rb +1 -1
  33. data/lib/tasks/polaris_view_components_tasks.rake +6 -0
  34. metadata +91 -7
  35. data/lib/generators/polaris_view_components/USAGE +0 -5
  36. data/lib/generators/polaris_view_components/install_generator.rb +0 -35
  37. data/lib/generators/polaris_view_components/templates/README +0 -14
  38. data/lib/generators/polaris_view_components/templates/stimulus_index.js +0 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 910750f06bdf1ff3095625a911c884155cca167b4dba43fd9e7aa9d61cc0ba72
4
- data.tar.gz: a0bc6e2afc097fc27148cc8fcb91282380fe6ec878dfcf8828703aed6edec433
3
+ metadata.gz: bde9c78425359cff500d5e9d709750ef0351398696e5685cbb8faada617a9a45
4
+ data.tar.gz: 830d75b017692040ca7cc695712e6204fd4ebab9593c09f5777a163ee41a3c57
5
5
  SHA512:
6
- metadata.gz: 1d22ebdc5b83c1b52157c8e9b1f59cc2477546b521955329fff0b012a4c0472db8adad6b3bef881d108ad2e9388d2b23f44adb0d9e67fb0bb793015e4d23500b
7
- data.tar.gz: 4891914fde6deb943f74567a89334bee1a8ada3736d3547acbf47d834446974e42c83ddb9d0b7ae6cf6c3d5017ce70d9cbf74c8b4706097695a5b7bda0b0f3ea
6
+ metadata.gz: 19ec9d9273dd86977b5dd24ccd592b20656715a64a1287c6a653b47c130c226cc83c0bb1fc3b9463d3304a18cb52134a741081a47339d80a48bd472885fe17c5
7
+ data.tar.gz: 295b5b130d8b325978769d37d948446144d36ae7ba0ca72a8264e25dc9ae2d90f58cb6290415c9e13fc48a6bb55a2b268dfb3f957ab26efc88a36ab0c86fe061
data/README.md CHANGED
@@ -20,76 +20,23 @@ Render Polaris ViewComponents:
20
20
  <% end %>
21
21
  ```
22
22
 
23
- ## Installation
24
-
25
- In `Gemfile`, add:
26
-
27
- ```ruby
28
- gem 'polaris_view_components'
29
- ```
30
-
31
- Run install generator:
32
- ```bash
33
- rails generate polaris_view_components:install
34
- ```
35
-
36
- Setup Polaris styles in your layouts `<head>` tag:
37
-
38
- ```erb
39
- <%= stylesheet_link_tag 'polaris_view_components' %>
40
- ```
41
-
42
- Define Polaris style on your `<body>` tag:
43
-
44
- ```erb
45
- <body style="<%= polaris_body_styles %>">
46
- ```
47
-
48
- ### Importmaps
49
-
50
- Install dependencies:
51
- ```
52
- bin/importmap pin @rails/request.js --download
53
- ```
54
-
55
- If you use sprockets make sure the vendor folder is loaded in `app/assets/config/manifest.js`:
56
- ```js
57
- //= link_tree ../../../vendor/assets/javascripts .js
58
- ```
23
+ ## Dependencies
59
24
 
60
- Add to `config/importmap.rb`:
25
+ - [Stimulus](https://stimulus.hotwired.dev/)
61
26
 
62
- ```rb
63
- pin "polaris-view-components", to: "polaris_view_components.js"
64
- ```
27
+ ## Installation
65
28
 
66
- Add to `app/javascript/controllers/index.js`:
67
- ```javascript
68
- // ...
29
+ Add to `Gemfile`:
69
30
 
70
- import { registerPolarisControllers } from "polaris-view-components"
71
- registerPolarisControllers(Stimulus)
31
+ ```ruby
32
+ gem "polaris_view_components"
72
33
  ```
73
34
 
74
- ### NPM
75
-
76
- Install NPM package:
35
+ Run installer:
77
36
  ```bash
78
- yarn add polaris-view-components @rails/request.js
37
+ bin/rails polaris_view_components:install
79
38
  ```
80
39
 
81
- Add to `app/javascript/controllers/index.js`:
82
- ```javascript
83
- // ...
84
-
85
- import { registerPolarisControllers } from "polaris-view-components"
86
- registerPolarisControllers(Stimulus)
87
- ```
88
-
89
- ## Dependencies
90
-
91
- In addition to the dependencies declared in the `gemspec`, Polaris ViewComponents assumes the presence of Polaris CSS.
92
-
93
40
  ## Development
94
41
 
95
42
  To get started:
@@ -99,16 +46,24 @@ To get started:
99
46
 
100
47
  It will open demo app with component previews on `localhost:4000`. You can change components and they will be updated on page reload. Component previews located in `demo/test/components/previews`.
101
48
 
102
- To release gem run:
49
+ ## Releases
50
+
51
+ The library follows [semantic versioning](https://semver.org/). To draft a new release you need to run `script/release` with a new version number:
52
+
103
53
  ```bash
104
- script/release
54
+ script/release VERSION
105
55
  ```
106
56
 
107
- To release npm package run:
57
+ Where the VERSION is the version number you want to release. This script will update the version in the gem and push it to GitHub and Rubygems automatically.
58
+
59
+ To release a new version of npm package update the package.json file with the new version number and run:
60
+
108
61
  ```bash
109
- yarn release
62
+ npm run release
110
63
  ```
111
64
 
65
+ After that make sure to commit changes in package.json.
66
+
112
67
  ## License
113
68
 
114
69
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -34,11 +34,12 @@ export default class extends Controller {
34
34
  }
35
35
 
36
36
  files = []
37
- acceptedFiles = []
38
37
  rejectedFiles = []
39
38
  _dragging = false
40
39
  dragTargets = []
41
40
  previewRendered = false
41
+
42
+ _acceptedFiles = []
42
43
  _size = 'large'
43
44
 
44
45
  connect () {
@@ -167,7 +168,8 @@ export default class extends Controller {
167
168
 
168
169
  if (this.acceptedFiles.length === 0) return
169
170
 
170
- this.loaderTarget.classList.remove("Polaris--hidden")
171
+ if (this.hasLoaderTarget)
172
+ this.loaderTarget.classList.remove("Polaris--hidden")
171
173
  }
172
174
 
173
175
  onDirectUploadInitialize = (event) => {
@@ -179,11 +181,14 @@ export default class extends Controller {
179
181
 
180
182
  if (this.sizeValue == 'small') {
181
183
  this.clearFiles()
182
- this.loaderTarget.classList.remove("Polaris--hidden")
184
+ if (this.hasLoaderTarget)
185
+ this.loaderTarget.classList.remove("Polaris--hidden")
183
186
  } else {
184
187
  const content = dropzone.querySelector(`[data-file-name="${file.name}"]`)
185
- const progressBar = content.parentElement.querySelector('[data-target="progress-bar"]')
186
- progressBar.id = `direct-upload-${id}`
188
+ if (content) {
189
+ const progressBar = content.parentElement.querySelector('[data-target="progress-bar"]')
190
+ progressBar.id = `direct-upload-${id}`
191
+ }
187
192
  }
188
193
  }
189
194
 
@@ -448,6 +453,20 @@ export default class extends Controller {
448
453
 
449
454
  this.element.classList.add(this.getSizeClass(val))
450
455
  }
456
+
457
+ get acceptedFiles () {
458
+ return this._acceptedFiles
459
+ }
460
+
461
+ set acceptedFiles (val) {
462
+ this._acceptedFiles = val
463
+
464
+ const list = new DataTransfer()
465
+
466
+ val.forEach(file => list.items.add(file))
467
+
468
+ this.inputTarget.files = list.files
469
+ }
451
470
  }
452
471
 
453
472
  export function fileAccepted (file, accept) {
@@ -26,7 +26,12 @@ export default class extends Controller {
26
26
  }
27
27
 
28
28
  clear() {
29
+ const oldValue = this.value
29
30
  this.value = null
31
+
32
+ if (this.value != oldValue) {
33
+ this.inputTarget.dispatchEvent(new Event('change'))
34
+ }
30
35
  }
31
36
 
32
37
  increase() {
@@ -361,11 +361,11 @@ class Dropzone extends Controller {
361
361
  size: String
362
362
  };
363
363
  files=[];
364
- acceptedFiles=[];
365
364
  rejectedFiles=[];
366
365
  _dragging=false;
367
366
  dragTargets=[];
368
367
  previewRendered=false;
368
+ _acceptedFiles=[];
369
369
  _size="large";
370
370
  connect() {
371
371
  document.body.addEventListener("click", this.onExternalTriggerClick);
@@ -460,7 +460,7 @@ class Dropzone extends Controller {
460
460
  this.enable();
461
461
  this.clearFiles();
462
462
  if (this.acceptedFiles.length === 0) return;
463
- this.loaderTarget.classList.remove("Polaris--hidden");
463
+ if (this.hasLoaderTarget) this.loaderTarget.classList.remove("Polaris--hidden");
464
464
  };
465
465
  onDirectUploadInitialize=event => {
466
466
  const {target: target, detail: detail} = event;
@@ -470,11 +470,13 @@ class Dropzone extends Controller {
470
470
  if (this.acceptedFiles.length === 0) return;
471
471
  if (this.sizeValue == "small") {
472
472
  this.clearFiles();
473
- this.loaderTarget.classList.remove("Polaris--hidden");
473
+ if (this.hasLoaderTarget) this.loaderTarget.classList.remove("Polaris--hidden");
474
474
  } else {
475
475
  const content = dropzone.querySelector(`[data-file-name="${file.name}"]`);
476
- const progressBar = content.parentElement.querySelector('[data-target="progress-bar"]');
477
- progressBar.id = `direct-upload-${id}`;
476
+ if (content) {
477
+ const progressBar = content.parentElement.querySelector('[data-target="progress-bar"]');
478
+ progressBar.id = `direct-upload-${id}`;
479
+ }
478
480
  }
479
481
  };
480
482
  onDirectUploadStart=event => {
@@ -545,6 +547,7 @@ class Dropzone extends Controller {
545
547
  this.toggleFileUpload(false);
546
548
  this.toggleErrorOverlay(true);
547
549
  const dropRejectedEvent = new CustomEvent("polaris-dropzone:drop-rejected", {
550
+ bubbles: true,
548
551
  detail: {
549
552
  rejectedFiles: this.rejectedFiles
550
553
  }
@@ -557,6 +560,7 @@ class Dropzone extends Controller {
557
560
  }
558
561
  this.toggleErrorOverlay(false);
559
562
  const dropAcceptedEvent = new CustomEvent("polaris-dropzone:drop-accepted", {
563
+ bubbles: true,
560
564
  detail: {
561
565
  acceptedFiles: this.acceptedFiles
562
566
  }
@@ -564,6 +568,7 @@ class Dropzone extends Controller {
564
568
  this.element.dispatchEvent(dropAcceptedEvent);
565
569
  }
566
570
  const dropEvent = new CustomEvent("polaris-dropzone:drop", {
571
+ bubbles: true,
567
572
  detail: {
568
573
  files: this.files,
569
574
  acceptedFiles: this.acceptedFiles,
@@ -681,6 +686,15 @@ class Dropzone extends Controller {
681
686
  sizeClassesToRemove.forEach((className => this.element.classList.remove(className)));
682
687
  this.element.classList.add(this.getSizeClass(val));
683
688
  }
689
+ get acceptedFiles() {
690
+ return this._acceptedFiles;
691
+ }
692
+ set acceptedFiles(val) {
693
+ this._acceptedFiles = val;
694
+ const list = new DataTransfer;
695
+ val.forEach((file => list.items.add(file)));
696
+ this.inputTarget.files = list.files;
697
+ }
684
698
  }
685
699
 
686
700
  function fileAccepted(file, accept) {
@@ -1101,6 +1115,9 @@ function getContainingBlock(element) {
1101
1115
  }
1102
1116
  }
1103
1117
  var currentNode = getParentNode(element);
1118
+ if (isShadowRoot(currentNode)) {
1119
+ currentNode = currentNode.host;
1120
+ }
1104
1121
  while (isHTMLElement(currentNode) && [ "html", "body" ].indexOf(getNodeName(currentNode)) < 0) {
1105
1122
  var css = getComputedStyle$1(currentNode);
1106
1123
  if (css.transform !== "none" || css.perspective !== "none" || css.contain === "paint" || [ "transform", "perspective" ].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === "filter" || isFirefox && css.filter && css.filter !== "none") {
@@ -1275,13 +1292,13 @@ function mapToStyles(_ref2) {
1275
1292
  offsetParent = offsetParent;
1276
1293
  if (placement === top || (placement === left || placement === right) && variation === end) {
1277
1294
  sideY = bottom;
1278
- var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : offsetParent[heightProp];
1295
+ var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : offsetParent[heightProp];
1279
1296
  y -= offsetY - popperRect.height;
1280
1297
  y *= gpuAcceleration ? 1 : -1;
1281
1298
  }
1282
1299
  if (placement === left || (placement === top || placement === bottom) && variation === end) {
1283
1300
  sideX = right;
1284
- var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : offsetParent[widthProp];
1301
+ var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : offsetParent[widthProp];
1285
1302
  x -= offsetX - popperRect.width;
1286
1303
  x *= gpuAcceleration ? 1 : -1;
1287
1304
  }
@@ -2399,7 +2416,11 @@ class TextField extends Controller {
2399
2416
  this.valueValue = this.inputTarget.value;
2400
2417
  }
2401
2418
  clear() {
2419
+ const oldValue = this.value;
2402
2420
  this.value = null;
2421
+ if (this.value != oldValue) {
2422
+ this.inputTarget.dispatchEvent(new Event("change"));
2423
+ }
2403
2424
  }
2404
2425
  increase() {
2405
2426
  this.changeNumber(1);
@@ -36,15 +36,16 @@ a.Polaris-Tag__Button {
36
36
  font-size: 1.25rem;
37
37
  }
38
38
 
39
- /* Remove box-shadow from buttons and links */
40
- .Polaris-Button::after,
41
- .Polaris-Button:focus::after,
42
- .Polaris-Breadcrumbs__Breadcrumb::after {
43
- box-shadow: none !important;
39
+ /* Remove focus styles for non-keyboard focus from buttons and links */
40
+ .Polaris-Button, .Polaris-Breadcrumbs__Breadcrumb {
41
+ &:focus:not(:focus-visible)::after {
42
+ box-shadow: none !important;
43
+ }
44
44
  }
45
-
46
- .Polaris-Tabs__Tab:focus > .Polaris-Tabs__Title::after {
47
- box-shadow: none !important;
45
+ .Polaris-Tabs__Tab {
46
+ &:focus:not(:focus-visible) > .Polaris-Tabs__Title::after {
47
+ box-shadow: none !important;
48
+ }
48
49
  }
49
50
 
50
51
  /* ResourceItem */
@@ -116,6 +117,15 @@ a.Polaris-Tag__Button {
116
117
  justify-content: center;
117
118
  }
118
119
 
120
+ &--sizeMedium {
121
+ justify-content: center;
122
+ text-align: center;
123
+
124
+ .Polaris-Stack.Polaris-Stack--alignmentCenter {
125
+ justify-content: center;
126
+ }
127
+ }
128
+
119
129
  &--sizeSmall {
120
130
  padding: 0;
121
131
  justify-content: center;
@@ -143,3 +153,45 @@ a.Polaris-Tag__Button {
143
153
  }
144
154
  }
145
155
  }
156
+
157
+ /* ActionMenu */
158
+ .Polaris-ActionMenu {
159
+ &--mobile {
160
+ @media (min-width: 768px){
161
+ display: none;
162
+ }
163
+ }
164
+
165
+ &--desktop {
166
+ display: none;
167
+
168
+ @media (min-width: 768px){
169
+ display: block;
170
+ }
171
+ }
172
+ }
173
+
174
+ /* Page Pagination */
175
+ @media (max-width: 768px){
176
+ .Polaris-Page-Header__PaginationWrapper {
177
+ display: none;
178
+ }
179
+ }
180
+
181
+ /* EmptySearchResults */
182
+ .Polaris-EmptySearchResults {
183
+ padding: 84px 0;
184
+
185
+ &__Content {
186
+ display: flex;
187
+ flex-direction: column;
188
+ align-items: center;
189
+ text-align: center;
190
+ }
191
+ }
192
+
193
+ /* ActionList */
194
+
195
+ .Polaris-ActionList__Item {
196
+ border: none !important;
197
+ }
@@ -2268,15 +2268,13 @@ a.Polaris-Tag__Button {
2268
2268
  .Polaris-TextStyle--sizeSmall {
2269
2269
  font-size: 1.25rem;
2270
2270
  }
2271
- /* Remove box-shadow from buttons and links */
2272
- .Polaris-Button::after,
2273
- .Polaris-Button:focus::after,
2274
- .Polaris-Breadcrumbs__Breadcrumb::after {
2275
- box-shadow: none !important;
2276
- }
2277
- .Polaris-Tabs__Tab:focus > .Polaris-Tabs__Title::after {
2278
- box-shadow: none !important;
2279
- }
2271
+ /* Remove focus styles for non-keyboard focus from buttons and links */
2272
+ .Polaris-Button:focus:not(:focus-visible)::after, .Polaris-Breadcrumbs__Breadcrumb:focus:not(:focus-visible)::after {
2273
+ box-shadow: none !important;
2274
+ }
2275
+ .Polaris-Tabs__Tab:focus:not(:focus-visible) > .Polaris-Tabs__Title::after {
2276
+ box-shadow: none !important;
2277
+ }
2280
2278
  /* ResourceItem */
2281
2279
  .Polaris-ResourceItem__Owned--offset {
2282
2280
  padding-left: 2rem;
@@ -2325,6 +2323,13 @@ a.Polaris-Tag__Button {
2325
2323
  text-align: center;
2326
2324
  justify-content: center;
2327
2325
  }
2326
+ .Polaris-DropZone__Preview--sizeMedium {
2327
+ justify-content: center;
2328
+ text-align: center;
2329
+ }
2330
+ .Polaris-DropZone__Preview--sizeMedium .Polaris-Stack.Polaris-Stack--alignmentCenter {
2331
+ justify-content: center;
2332
+ }
2328
2333
  .Polaris-DropZone__Preview--sizeSmall {
2329
2334
  padding: 0;
2330
2335
  justify-content: center;
@@ -2346,3 +2351,37 @@ a.Polaris-Tag__Button {
2346
2351
  .Polaris-DropZone__Loader .Polaris-Spinner--sizeSmall {
2347
2352
  height: 20px;
2348
2353
  }
2354
+ /* ActionMenu */
2355
+ @media (min-width: 768px){
2356
+ .Polaris-ActionMenu--mobile {
2357
+ display: none
2358
+ }
2359
+ }
2360
+ .Polaris-ActionMenu--desktop {
2361
+ display: none;
2362
+ }
2363
+ @media (min-width: 768px){
2364
+ .Polaris-ActionMenu--desktop {
2365
+ display: block
2366
+ }
2367
+ }
2368
+ /* Page Pagination */
2369
+ @media (max-width: 768px){
2370
+ .Polaris-Page-Header__PaginationWrapper {
2371
+ display: none;
2372
+ }
2373
+ }
2374
+ /* EmptySearchResults */
2375
+ .Polaris-EmptySearchResults {
2376
+ padding: 84px 0;
2377
+ }
2378
+ .Polaris-EmptySearchResults__Content {
2379
+ display: flex;
2380
+ flex-direction: column;
2381
+ align-items: center;
2382
+ text-align: center;
2383
+ }
2384
+ /* ActionList */
2385
+ .Polaris-ActionList__Item {
2386
+ border: none !important;
2387
+ }
@@ -5,6 +5,7 @@ class Polaris::ActionList::ItemComponent < Polaris::Component
5
5
  def initialize(
6
6
  url: nil,
7
7
  icon: nil,
8
+ icon_name: nil,
8
9
  help_text: nil,
9
10
  active: false,
10
11
  destructive: false,
@@ -12,7 +13,7 @@ class Polaris::ActionList::ItemComponent < Polaris::Component
12
13
  **system_arguments
13
14
  )
14
15
  @url = url
15
- @icon = icon
16
+ @icon = icon || icon_name
16
17
  @help_text = help_text
17
18
  @active = active
18
19
  @destructive = destructive
@@ -6,9 +6,9 @@
6
6
  </span>
7
7
  <% end %>
8
8
 
9
- <% if icon.present? %>
9
+ <% if icon.present? || @icon_name.present? %>
10
10
  <div class="Polaris-Button__Icon">
11
- <%= icon %>
11
+ <%= icon.presence || polaris_icon(name: @icon_name) %>
12
12
  </div>
13
13
  <% if content.present? %>
14
14
  &nbsp;
@@ -2,7 +2,7 @@ class Polaris::DataTable::ColumnComponent < Polaris::Component
2
2
  SORT_DEFAULT = false
3
3
  SORT_OPTIONS = [false, :asc, :desc]
4
4
 
5
- attr_reader :title, :numeric, :total, :sorted, :sort_url
5
+ attr_reader :title, :numeric, :total, :sorted, :sort_url, :system_arguments
6
6
 
7
7
  def initialize(title, numeric: false, total: nil, sorted: SORT_DEFAULT, sort_url: nil, **system_arguments, &block)
8
8
  @title = title
@@ -11,6 +11,7 @@ class Polaris::DataTable::ColumnComponent < Polaris::Component
11
11
  @sorted = fetch_or_fallback(SORT_OPTIONS, sorted, SORT_DEFAULT)
12
12
  @sort_url = sort_url
13
13
  @block = block
14
+ @system_arguments = system_arguments
14
15
  end
15
16
 
16
17
  def call(row)
@@ -26,6 +26,7 @@
26
26
  tag: (index.zero? ? "th" : "td"),
27
27
  scope: ("row" if index.zero?),
28
28
  total: true,
29
+ **column.system_arguments
29
30
  ) do %>
30
31
  <%= column.total %>
31
32
  <% end %>
@@ -4,10 +4,12 @@
4
4
  class="Polaris-DropZone__Overlay Polaris-VisuallyHidden"
5
5
  data-polaris-dropzone-target="overlay"
6
6
  >
7
- <%= render Polaris::StackComponent.new(vertical: true, spacing: :tight) do |stack| %>
8
- <% stack.item do %>
9
- <%= render Polaris::DisplayTextComponent.new(size: :small) do %>
10
- <%= @overlay_text %>
7
+ <% unless @size == :small %>
8
+ <%= render Polaris::StackComponent.new(vertical: true, spacing: :tight) do |stack| %>
9
+ <% stack.item do %>
10
+ <%= render Polaris::DisplayTextComponent.new(size: :small) do %>
11
+ <%= @overlay_text %>
12
+ <% end %>
11
13
  <% end %>
12
14
  <% end %>
13
15
  <% end %>
@@ -67,9 +69,11 @@
67
69
  <% end %>
68
70
  <% end %>
69
71
 
70
- <div class="Polaris-DropZone__Loader Polaris--hidden" data-polaris-dropzone-target="loader">
71
- <%= polaris_spinner(size: (@size == :small) ? :small : :large) %>
72
- </div>
72
+ <% if @preview %>
73
+ <div class="Polaris-DropZone__Loader Polaris--hidden" data-polaris-dropzone-target="loader">
74
+ <%= polaris_spinner(size: (@size == :small) ? :small : :large) %>
75
+ </div>
76
+ <% end %>
73
77
  </div>
74
78
 
75
79
  <%= render Polaris::VisuallyHiddenComponent.new do %>
@@ -86,7 +90,8 @@
86
90
  class: [
87
91
  "Polaris-DropZone__Preview",
88
92
  "Polaris-DropZone__Preview--singleFile": !@multiple,
89
- "Polaris-DropZone__Preview--sizeSmall": @size == :small
93
+ "Polaris-DropZone__Preview--sizeMedium": @size == :medium,
94
+ "Polaris-DropZone__Preview--sizeSmall": @size == :small,
90
95
  ]
91
96
  ) do %>
92
97
  <% if @size.in?(%i[small]) %>
@@ -0,0 +1,12 @@
1
+ <%= render Polaris::BaseComponent.new(**system_arguments) do %>
2
+ <div class="Polaris-EmptySearchResults__Content">
3
+ <%= polaris_text_container do %>
4
+ <%= polaris_display_text(size: :small) do %>
5
+ <%= @title %>
6
+ <% end %>
7
+ <div>
8
+ <%= polaris_text_subdued { @description } %>
9
+ </div>
10
+ <% end %>
11
+ </div>
12
+ <% end %>
@@ -0,0 +1,19 @@
1
+ module Polaris
2
+ class EmptySearchResultsComponent < Polaris::Component
3
+ def initialize(title:, description:, **system_arguments)
4
+ @title = title
5
+ @description = description
6
+ @system_arguments = system_arguments
7
+ end
8
+
9
+ def system_arguments
10
+ @system_arguments.tap do |args|
11
+ args[:tag] = "div"
12
+ args[:classes] = class_names(
13
+ args[:classes],
14
+ "Polaris-EmptySearchResults"
15
+ )
16
+ end
17
+ end
18
+ end
19
+ end
@@ -74,7 +74,9 @@ module Polaris
74
74
  def popover_arguments
75
75
  {
76
76
  sectioned: @sectioned,
77
- style: ("width: #{@width}" if @width.present?)
77
+ style: ("width: #{@width}" if @width.present?),
78
+ position: :below,
79
+ alignment: :left
78
80
  }
79
81
  end
80
82
 
@@ -5,9 +5,9 @@
5
5
  </span>
6
6
  <% end %>
7
7
 
8
- <% if icon.present? %>
8
+ <% if icon.present? || @icon_name.present? %>
9
9
  <div class="Polaris-Button__Icon">
10
- <%= icon %>
10
+ <%= icon || polaris_icon(name: @icon_name) %>
11
11
  </div>
12
12
  <% if content.present? %>
13
13
  &nbsp;
@@ -42,6 +42,7 @@ module Polaris
42
42
  remove_underline: false,
43
43
  size: SIZE_DEFAULT,
44
44
  text_align: TEXT_ALIGN_DEFAULT,
45
+ icon_name: nil,
45
46
  **system_arguments
46
47
  )
47
48
  @tag = url.present? ? "a" : "button"
@@ -52,6 +53,7 @@ module Polaris
52
53
  @loading = loading
53
54
  @disclosure = fetch_or_fallback(DISCLOSURE_OPTIONS, disclosure, DISCLOSURE_DEFAULT)
54
55
  @disclosure = :down if @disclosure === true
56
+ @icon_name = icon_name
55
57
 
56
58
  @system_arguments = system_arguments
57
59
  @system_arguments[:type] = submit ? "submit" : "button"
@@ -92,7 +94,7 @@ module Polaris
92
94
  def system_arguments
93
95
  @system_arguments[:classes] = class_names(
94
96
  @system_arguments[:classes],
95
- "Polaris-Button--iconOnly": icon.present? && content.blank?
97
+ "Polaris-Button--iconOnly": (icon.present? || @icon_name.present?) && content.blank?
96
98
  )
97
99
  @system_arguments
98
100
  end
@@ -1,10 +1,11 @@
1
1
  class Polaris::IndexTable::ColumnComponent < Polaris::Component
2
- attr_reader :title, :flush
2
+ attr_reader :title, :flush, :system_arguments
3
3
 
4
4
  def initialize(title, flush: false, **system_arguments, &block)
5
5
  @title = title
6
6
  @flush = flush
7
7
  @block = block
8
+ @system_arguments = system_arguments
8
9
  end
9
10
 
10
11
  def call(row)