polaris_view_components 0.7.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/icons/polaris/AnalyticsMinor.svg +1 -0
- data/app/assets/icons/polaris/AppsMinor.svg +1 -0
- data/app/assets/icons/polaris/BlockMinor.svg +1 -0
- data/app/assets/icons/polaris/ButtonMinor.svg +1 -0
- data/app/assets/icons/polaris/CaretDownMinor.svg +1 -1
- data/app/assets/icons/polaris/CaretUpMinor.svg +1 -1
- data/app/assets/icons/polaris/CircleTickMinor.svg +1 -0
- data/app/assets/icons/polaris/Columns3Minor.svg +1 -0
- data/app/assets/icons/polaris/CustomersMinor.svg +1 -1
- data/app/assets/icons/polaris/DiscountsMinor.svg +1 -0
- data/app/assets/icons/polaris/DropdownMinor.svg +1 -1
- data/app/assets/icons/polaris/FinancesMajor.svg +1 -0
- data/app/assets/icons/polaris/FinancesMinor.svg +1 -0
- data/app/assets/icons/polaris/HomeMinor.svg +1 -0
- data/app/assets/icons/polaris/MarketingMinor.svg +1 -0
- data/app/assets/icons/polaris/OnlineStoreMinor.svg +1 -0
- data/app/assets/icons/polaris/OrdersMinor.svg +1 -0
- data/app/assets/icons/polaris/ProductsMinor.svg +1 -0
- data/app/assets/icons/polaris/QuestionMarkInverseMajor.svg +1 -0
- data/app/assets/icons/polaris/QuestionMarkInverseMinor.svg +1 -0
- data/app/assets/icons/polaris/SelectMinor.svg +1 -1
- data/app/assets/icons/polaris/TitleMinor.svg +1 -0
- data/app/assets/icons/polaris/WandMinor.svg +1 -0
- data/app/assets/javascripts/polaris_view_components/autocomplete_controller.js +32 -15
- data/app/assets/javascripts/polaris_view_components/collapsible_controller.js +19 -0
- data/app/assets/javascripts/polaris_view_components/dropzone_controller.js +495 -0
- data/app/assets/javascripts/polaris_view_components/index.js +4 -0
- data/app/assets/javascripts/polaris_view_components/polaris_controller.js +4 -0
- data/app/assets/javascripts/polaris_view_components/popover_controller.js +9 -2
- data/app/assets/javascripts/polaris_view_components/toast_controller.js +13 -2
- data/app/assets/javascripts/polaris_view_components/utils.js +23 -0
- data/app/assets/javascripts/polaris_view_components.js +560 -65
- data/app/assets/stylesheets/polaris_view_components/custom.css +38 -6
- data/app/assets/stylesheets/polaris_view_components.css +2107 -2021
- data/app/assets/stylesheets/polaris_view_components.postcss.css +1 -1
- data/app/components/polaris/action_list/item_component.rb +1 -1
- data/app/components/polaris/action_list/section_component.rb +1 -1
- data/app/components/polaris/action_list_component.rb +1 -1
- data/app/components/polaris/autocomplete/action_component.rb +1 -1
- data/app/components/polaris/autocomplete/option_component.rb +1 -1
- data/app/components/polaris/autocomplete/section_component.rb +1 -1
- data/app/components/polaris/autocomplete_component.rb +9 -2
- data/app/components/polaris/avatar_component.rb +1 -1
- data/app/components/polaris/badge_component.rb +1 -1
- data/app/components/polaris/banner_component.rb +2 -2
- data/app/components/polaris/base_button.rb +1 -1
- data/app/components/polaris/base_checkbox.rb +1 -1
- data/app/components/polaris/base_component.rb +1 -1
- data/app/components/polaris/base_radio_button.rb +1 -1
- data/app/components/polaris/button_group_component.rb +3 -3
- data/app/components/polaris/callout_card_component.rb +1 -1
- data/app/components/polaris/caption_component.rb +1 -1
- data/app/components/polaris/card/header_component.rb +1 -1
- data/app/components/polaris/card/section_component.rb +2 -2
- data/app/components/polaris/card_component.rb +1 -1
- data/app/components/polaris/checkbox_component.rb +1 -1
- data/app/components/polaris/choice_component.rb +1 -1
- data/app/components/polaris/choice_list_component.rb +1 -1
- data/app/components/polaris/collapsible_component.rb +37 -0
- data/app/components/polaris/component.rb +6 -1
- data/app/components/polaris/data_table/cell_component.rb +1 -1
- data/app/components/polaris/data_table/column_component.rb +1 -1
- data/app/components/polaris/data_table_component.rb +1 -1
- data/app/components/polaris/description_list_component.rb +2 -2
- data/app/components/polaris/display_text_component.rb +1 -1
- data/app/components/polaris/dropzone_component.html.erb +156 -0
- data/app/components/polaris/dropzone_component.rb +150 -0
- data/app/components/polaris/empty_state_component.rb +1 -1
- data/app/components/polaris/exception_list/item_component.rb +1 -1
- data/app/components/polaris/exception_list_component.rb +1 -1
- data/app/components/polaris/filters_component.rb +3 -3
- data/app/components/polaris/footer_help_component.rb +1 -1
- data/app/components/polaris/form_layout/group_component.rb +2 -2
- data/app/components/polaris/form_layout/item_component.rb +1 -1
- data/app/components/polaris/form_layout_component.rb +1 -1
- data/app/components/polaris/frame/save_bar_component.rb +1 -1
- data/app/components/polaris/frame/top_bar_component.rb +1 -1
- data/app/components/polaris/frame_component.rb +1 -1
- data/app/components/polaris/heading_component.rb +1 -1
- data/app/components/polaris/headless_button.rb +1 -1
- data/app/components/polaris/icon_component.rb +1 -1
- data/app/components/polaris/index_table/cell_component.rb +1 -1
- data/app/components/polaris/index_table/column_component.rb +1 -1
- data/app/components/polaris/index_table_component.rb +1 -1
- data/app/components/polaris/inline_error_component.rb +1 -1
- data/app/components/polaris/keyboard_key_component.rb +20 -0
- data/app/components/polaris/label_component.rb +1 -1
- data/app/components/polaris/labelled_component.rb +1 -1
- data/app/components/polaris/layout/annotated_section.rb +1 -1
- data/app/components/polaris/layout/section.rb +1 -1
- data/app/components/polaris/layout_component.rb +1 -1
- data/app/components/polaris/link_component.rb +1 -1
- data/app/components/polaris/list_component.rb +2 -2
- data/app/components/polaris/modal/section_component.rb +1 -1
- data/app/components/polaris/modal_component.rb +1 -1
- data/app/components/polaris/navigation/item_component.rb +2 -2
- data/app/components/polaris/navigation/section_component.rb +2 -2
- data/app/components/polaris/navigation_component.rb +1 -1
- data/app/components/polaris/option_list/checkbox_component.rb +1 -1
- data/app/components/polaris/option_list/option_component.rb +1 -1
- data/app/components/polaris/option_list/radio_button_component.rb +1 -1
- data/app/components/polaris/option_list/section_component.rb +1 -1
- data/app/components/polaris/option_list_component.rb +1 -1
- data/app/components/polaris/page_actions_component.rb +1 -1
- data/app/components/polaris/page_component.rb +1 -1
- data/app/components/polaris/pagination_component.rb +1 -1
- data/app/components/polaris/popover/pane_component.rb +1 -1
- data/app/components/polaris/popover/section_component.rb +1 -1
- data/app/components/polaris/popover_component.rb +10 -4
- data/app/components/polaris/progress_bar_component.rb +1 -1
- data/app/components/polaris/radio_button_component.rb +1 -1
- data/app/components/polaris/resource_item_component.rb +4 -2
- data/app/components/polaris/resource_list_component.rb +1 -1
- data/app/components/polaris/scrollable_component.rb +1 -1
- data/app/components/polaris/select_component.rb +1 -1
- data/app/components/polaris/setting_toggle_component.rb +1 -1
- data/app/components/polaris/shopify_navigation_component.rb +2 -2
- data/app/components/polaris/skeleton_body_text_component.rb +1 -1
- data/app/components/polaris/skeleton_display_text_component.rb +32 -0
- data/app/components/polaris/skeleton_thumbnail_component.rb +31 -0
- data/app/components/polaris/spacer_component.rb +1 -1
- data/app/components/polaris/spinner_component.rb +1 -1
- data/app/components/polaris/stack/item_component.rb +15 -0
- data/app/components/polaris/stack_component.rb +2 -18
- data/app/components/polaris/subheading_component.rb +1 -1
- data/app/components/polaris/tabs/tab_component.rb +1 -1
- data/app/components/polaris/tabs_component.rb +1 -1
- data/app/components/polaris/tag_component.rb +3 -2
- data/app/components/polaris/text_container_component.rb +1 -1
- data/app/components/polaris/text_field_component.rb +2 -2
- data/app/components/polaris/text_style_component.rb +1 -1
- data/app/components/polaris/thumbnail_component.rb +1 -1
- data/app/components/polaris/toast_component.rb +1 -1
- data/app/components/polaris/top_bar/user_menu_component.rb +1 -1
- data/app/components/polaris/visually_hidden_component.rb +1 -1
- data/app/helpers/polaris/form_builder.rb +14 -5
- data/app/helpers/polaris/view_helper.rb +6 -1
- data/config/locales/en.yml +6 -0
- data/lib/polaris/view_components/engine.rb +5 -1
- data/lib/polaris/view_components/version.rb +1 -1
- metadata +31 -21
- data/app/components/polaris/application_component.rb +0 -35
- data/app/components/polaris/dropzone/component.html.erb +0 -72
- data/app/components/polaris/dropzone/component.rb +0 -128
- data/app/components/polaris/dropzone/controller.js +0 -226
- data/app/components/polaris/dropzone/utils.js +0 -57
- data/app/components/polaris/new_component.rb +0 -10
- data/app/helpers/polaris/conditional_helper.rb +0 -11
@@ -1,226 +0,0 @@
|
|
1
|
-
import { Controller } from "@hotwired/stimulus"
|
2
|
-
|
3
|
-
import { fileAccepted, getDataTransferFiles } from './utils'
|
4
|
-
|
5
|
-
// eslint-disable-next-line import/no-default-export
|
6
|
-
export default class extends Controller {
|
7
|
-
static targets = ['container', 'fileUpload', 'input', 'itemTemplate', 'itemsTemplate', 'overlay']
|
8
|
-
static values = {
|
9
|
-
accept: String,
|
10
|
-
allowMultiple: Boolean,
|
11
|
-
disabled: Boolean,
|
12
|
-
dropOnPage: Boolean,
|
13
|
-
focused: Boolean,
|
14
|
-
}
|
15
|
-
|
16
|
-
_files = []
|
17
|
-
_acceptedFiles = []
|
18
|
-
_rejectedFiles = []
|
19
|
-
_dragging = false
|
20
|
-
dragTargets = []
|
21
|
-
filesRendered = false
|
22
|
-
|
23
|
-
onBlur () {
|
24
|
-
this.focusedValue = false
|
25
|
-
}
|
26
|
-
|
27
|
-
onChange (e) {
|
28
|
-
this.stopEvent(e)
|
29
|
-
if (this.disabled) return
|
30
|
-
|
31
|
-
this.clearFiles()
|
32
|
-
|
33
|
-
const fileList = getDataTransferFiles(e)
|
34
|
-
const { files, acceptedFiles, rejectedFiles } = this.getValidatedFiles(fileList)
|
35
|
-
this.dragTargets = []
|
36
|
-
|
37
|
-
this.files = files
|
38
|
-
this.acceptedFiles = acceptedFiles
|
39
|
-
this.rejectedFiles = rejectedFiles
|
40
|
-
}
|
41
|
-
|
42
|
-
onDragOver (e) {
|
43
|
-
this.stopEvent(e)
|
44
|
-
if (this.disabled) return
|
45
|
-
}
|
46
|
-
|
47
|
-
onDragEnter (e) {
|
48
|
-
this.stopEvent(e)
|
49
|
-
if (this.disabled) return
|
50
|
-
|
51
|
-
if (e.target && !this.dragTargets.includes(e.target)) {
|
52
|
-
this.dragTargets.push(e.target)
|
53
|
-
}
|
54
|
-
|
55
|
-
if (this.dragging) return
|
56
|
-
|
57
|
-
this.dragging = true
|
58
|
-
}
|
59
|
-
|
60
|
-
onDragLeave (e) {
|
61
|
-
this.stopEvent(e)
|
62
|
-
if (this.disabled) return
|
63
|
-
|
64
|
-
this.dragTargets = this.dragTargets.filter(el => {
|
65
|
-
const compareNode = this.element
|
66
|
-
|
67
|
-
return el !== e.target && compareNode && compareNode.contains(el)
|
68
|
-
})
|
69
|
-
|
70
|
-
if (this.dragTargets.length > 0) return
|
71
|
-
|
72
|
-
this.dragging = false
|
73
|
-
}
|
74
|
-
|
75
|
-
onDrop (e) {
|
76
|
-
this.stopEvent(e)
|
77
|
-
if (this.disabled) return
|
78
|
-
|
79
|
-
this.dragging = false
|
80
|
-
|
81
|
-
this.onChange(e)
|
82
|
-
}
|
83
|
-
|
84
|
-
onFocus () {
|
85
|
-
this.focusedValue = true
|
86
|
-
}
|
87
|
-
|
88
|
-
onClick () {
|
89
|
-
if (this.disabledValue) return
|
90
|
-
|
91
|
-
this.open()
|
92
|
-
}
|
93
|
-
|
94
|
-
open () {
|
95
|
-
this.inputTarget.click()
|
96
|
-
}
|
97
|
-
|
98
|
-
focusedValueChanged () {
|
99
|
-
this.element.classList.toggle('Polaris-DropZone--focused', this.focusedValue)
|
100
|
-
}
|
101
|
-
|
102
|
-
stopEvent (e) {
|
103
|
-
e.preventDefault()
|
104
|
-
e.stopPropagation()
|
105
|
-
}
|
106
|
-
|
107
|
-
getValidatedFiles (files) {
|
108
|
-
const acceptedFiles = []
|
109
|
-
const rejectedFiles = []
|
110
|
-
|
111
|
-
Array.from(files).forEach(file => {
|
112
|
-
if (!fileAccepted(file, this.acceptValue)) {
|
113
|
-
return rejectedFiles.push(file)
|
114
|
-
}
|
115
|
-
|
116
|
-
acceptedFiles.push(file)
|
117
|
-
})
|
118
|
-
|
119
|
-
if (!this.allowMultipleValue) {
|
120
|
-
acceptedFiles.splice(1, acceptedFiles.length)
|
121
|
-
rejectedFiles.push(...acceptedFiles.slice(1))
|
122
|
-
}
|
123
|
-
|
124
|
-
return { files, acceptedFiles, rejectedFiles }
|
125
|
-
}
|
126
|
-
|
127
|
-
renderUploadedFiles () {
|
128
|
-
if (this.files.length === 0) return
|
129
|
-
|
130
|
-
const clone = this.itemsTemplateTarget.content.cloneNode(true)
|
131
|
-
const filesTarget = clone.querySelector('.target')
|
132
|
-
|
133
|
-
this.files
|
134
|
-
.map(file => this.renderFile(file))
|
135
|
-
.forEach(fragment => filesTarget.parentNode.appendChild(fragment))
|
136
|
-
filesTarget.remove()
|
137
|
-
|
138
|
-
this.containerTarget.prepend(clone)
|
139
|
-
|
140
|
-
this.filesRendered = true
|
141
|
-
}
|
142
|
-
|
143
|
-
renderFile (file) {
|
144
|
-
const clone = this.itemTemplateTarget.content.cloneNode(true)
|
145
|
-
const [image, content, caption] = [
|
146
|
-
clone.querySelector('img'),
|
147
|
-
clone.querySelector('.content'),
|
148
|
-
clone.querySelector('.Polaris-Caption'),
|
149
|
-
]
|
150
|
-
image.alt = file.name
|
151
|
-
image.src = window.URL.createObjectURL(file)
|
152
|
-
content.insertAdjacentText('afterbegin', file.name)
|
153
|
-
caption.textContent = `${file.size} bytes`
|
154
|
-
|
155
|
-
return clone
|
156
|
-
}
|
157
|
-
|
158
|
-
clearFiles () {
|
159
|
-
if (!this.filesRendered) return
|
160
|
-
|
161
|
-
this.acceptedFiles = []
|
162
|
-
this.files = []
|
163
|
-
this.rejectedFiles = []
|
164
|
-
|
165
|
-
const rendered = this.element.querySelector('[data-rendered]')
|
166
|
-
if (!rendered) return
|
167
|
-
|
168
|
-
rendered.remove()
|
169
|
-
this.filesRendered = false
|
170
|
-
}
|
171
|
-
|
172
|
-
get dropNode () {
|
173
|
-
return this.dropOnPageValue ? document : this.element
|
174
|
-
}
|
175
|
-
|
176
|
-
get disabled () {
|
177
|
-
return this.disabledValue
|
178
|
-
}
|
179
|
-
|
180
|
-
set disabled (val) {
|
181
|
-
this.disabledValue = val
|
182
|
-
}
|
183
|
-
|
184
|
-
get dragging () {
|
185
|
-
return this._dragging
|
186
|
-
}
|
187
|
-
|
188
|
-
set dragging (val) {
|
189
|
-
this._dragging = val
|
190
|
-
|
191
|
-
this.element.classList.toggle('Polaris-DropZone--isDragging', val)
|
192
|
-
this.overlayTarget.classList.toggle('Polaris-VisuallyHidden', !val)
|
193
|
-
}
|
194
|
-
|
195
|
-
get files () {
|
196
|
-
return this._files
|
197
|
-
}
|
198
|
-
|
199
|
-
set files (val) {
|
200
|
-
this._files = val
|
201
|
-
|
202
|
-
const hasFiles = val.length > 0
|
203
|
-
|
204
|
-
this.fileUploadTarget.classList.toggle('Polaris-VisuallyHidden', hasFiles)
|
205
|
-
|
206
|
-
if (hasFiles && !this.filesRendered) {
|
207
|
-
this.renderUploadedFiles()
|
208
|
-
}
|
209
|
-
}
|
210
|
-
|
211
|
-
get acceptedFiles () {
|
212
|
-
return this._acceptedFiles
|
213
|
-
}
|
214
|
-
|
215
|
-
set acceptedFiles (val) {
|
216
|
-
this._acceptedFiles = val
|
217
|
-
}
|
218
|
-
|
219
|
-
get rejectedFiles () {
|
220
|
-
return this._rejectedFiles
|
221
|
-
}
|
222
|
-
|
223
|
-
set rejectedFiles (val) {
|
224
|
-
this._rejectedFiles = val
|
225
|
-
}
|
226
|
-
}
|
@@ -1,57 +0,0 @@
|
|
1
|
-
const dragEvents = ['dragover', 'dragenter', 'drop']
|
2
|
-
|
3
|
-
export function fileAccepted (file, accept) {
|
4
|
-
return file.type === 'application/x-moz-file' || accepts(file, accept)
|
5
|
-
}
|
6
|
-
|
7
|
-
export function getDataTransferFiles (event) {
|
8
|
-
if (isDragEvent(event) && event.dataTransfer) {
|
9
|
-
const dt = event.dataTransfer
|
10
|
-
|
11
|
-
if (dt.files && dt.files.length) {
|
12
|
-
return Array.from(dt.files)
|
13
|
-
} else if (dt.items && dt.items.length) {
|
14
|
-
// Chrome is the only browser that allows to read the file list on drag
|
15
|
-
// events and uses `items` instead of `files` in this case.
|
16
|
-
return Array.from(dt.items)
|
17
|
-
}
|
18
|
-
} else if (isChangeEvent(event) && event.target.files) {
|
19
|
-
// Return files from even when a file was selected from an upload dialog
|
20
|
-
return Array.from(event.target.files)
|
21
|
-
}
|
22
|
-
|
23
|
-
return []
|
24
|
-
}
|
25
|
-
|
26
|
-
function accepts (file, acceptedFiles = ['']) {
|
27
|
-
if (file && acceptedFiles) {
|
28
|
-
const fileName = file.name || ''
|
29
|
-
const mimeType = file.type || ''
|
30
|
-
const baseMimeType = mimeType.replace(/\/.*$/, '')
|
31
|
-
const acceptedFilesArray = Array.isArray(acceptedFiles)
|
32
|
-
? acceptedFiles
|
33
|
-
: acceptedFiles.split(',')
|
34
|
-
|
35
|
-
return acceptedFilesArray.some((type) => {
|
36
|
-
const validType = type.trim()
|
37
|
-
if (validType.startsWith('.')) {
|
38
|
-
return fileName.toLowerCase().endsWith(validType.toLowerCase())
|
39
|
-
} else if (validType.endsWith('/*')) {
|
40
|
-
// This is something like a image/* mime type
|
41
|
-
return baseMimeType === validType.replace(/\/.*$/, '')
|
42
|
-
}
|
43
|
-
|
44
|
-
return mimeType === validType
|
45
|
-
})
|
46
|
-
}
|
47
|
-
|
48
|
-
return true
|
49
|
-
}
|
50
|
-
|
51
|
-
function isDragEvent (event) {
|
52
|
-
return dragEvents.indexOf(event.type) > 0
|
53
|
-
}
|
54
|
-
|
55
|
-
function isChangeEvent (event) {
|
56
|
-
return event.type === 'change'
|
57
|
-
}
|