glib-web 0.5.58 → 0.5.63

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0530acf902c8752058a734963723a16e5811befbe70266998c69a8f4aaa848d1
4
- data.tar.gz: 78382d21966ea3f149afc4b8ce1dc31505909756011979351b50359f49877bc2
3
+ metadata.gz: dacfeeb7446f91959b4e0ac4ac86bb5e8fbc80e5bce79794bfbcf98ee37398a2
4
+ data.tar.gz: 95e67ccbd12f6cea3799fbd2a378f29c6b0059e03daf813ad832c5c28605ca9a
5
5
  SHA512:
6
- metadata.gz: 8828097d8d8d4959888bbdd7634d8cbf676ddd31183b98fa16440535ace50cdde2a8f6230ca9eb0d22ef1fc8bf9e5358642b3a2652ab1b9014dcbcc3c78fca17
7
- data.tar.gz: 8d2c328743536269527adac29527b00ec2cae739cdef6c9d1ac645c041e73aa56ab5d13aeec7ec72505f813b45d96d54d1351ffc78b3eee92e0c9355dd17be1e
6
+ metadata.gz: 427e9cb5d7385eb33e3e93e71717fcd9c5318671d0f9957ca8fb0a5766beb55e1bd61e2b28516a40c2d89a04c621f08b262795594e530741d67d31d57ef921e2
7
+ data.tar.gz: f42ef59f998e58b5b2bf1a8ae8dc565261b3999d4e82d33567ba0b716f4859abcf9d3ee18916f69808a8a47c58ae7fe7273577cb7767b28348e5330142dbe8bc
@@ -0,0 +1,29 @@
1
+ module Glib
2
+ module Channel
3
+ class OnlineChannel < ApplicationCable::Channel
4
+ class << self
5
+ attr_accessor :channel_name
6
+ end
7
+
8
+ def channel_name
9
+ self.class.channel_name
10
+ end
11
+
12
+ def subscribed
13
+ stream_from "#{self.class.channel_name}_#{params['conversation_id']}"
14
+ end
15
+
16
+ def online_status(data)
17
+ ActionCable.server.broadcast \
18
+ "#{self.class.channel_name}_#{params['conversation_id']}",
19
+ action: {
20
+ action: 'component/set',
21
+ name: User.find(data['user_id']).full_name,
22
+ status: data['status'],
23
+ user_id: data['user_id'],
24
+ event: 'online_status'
25
+ }
26
+ end
27
+ end
28
+ end
29
+ end
@@ -123,13 +123,35 @@ module Glib
123
123
  end
124
124
 
125
125
  class Avatar < View
126
+ int :size
126
127
  string :url
127
128
  action :onClick
128
129
  end
129
130
 
130
131
  class Icon < View
132
+ # TODO: Remove later. Deprecated.
131
133
  icon :spec
134
+
132
135
  action :onClick
136
+ color :color
137
+
138
+ def name(value)
139
+ @name = value
140
+ end
141
+
142
+ def size(value)
143
+ @size = value
144
+ end
145
+
146
+ # Override
147
+ def created
148
+ if @name
149
+ json.material do
150
+ json.name @name
151
+ json.size @size if @size
152
+ end
153
+ end
154
+ end
133
155
  end
134
156
 
135
157
  # class Banner < View
@@ -241,6 +241,11 @@ class Glib::JsonUi::ViewBuilder
241
241
  string :currency
242
242
  end
243
243
 
244
+ class Phone < AbstractField
245
+ string :defaultCountry
246
+ bool :disableAutoDetect
247
+ end
248
+
244
249
  class CreditCard < AbstractField
245
250
  string :publicKey
246
251
  end
@@ -9,6 +9,12 @@ section.rows builder: ->(template) do
9
9
  subaction.snackbars_alert message: 'Timeout elapsed'
10
10
  end
11
11
  end
12
+
13
+ template.thumbnail title: 'timeouts/set with repeat', onClick: ->(action) do
14
+ action.timeouts_set interval: 1000, repeat: true, onTimeout: ->(subaction) do
15
+ subaction.snackbars_alert message: 'Timeout elapsed every 1 second'
16
+ end
17
+ end
12
18
  end
13
19
 
14
20
  # section.rows builder: ->(template) do
@@ -5,7 +5,7 @@ render "#{@path_prefix}/nav_menu", json: json, page: page
5
5
 
6
6
  page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', padding: glib_json_padding_body, childViews: ->(form) do
7
7
  form.h1 text: 'Text'
8
- form.fields_password name: 'user[text1]', width: 'matchParent', label: 'Type "show"'
8
+ form.fields_password name: 'user[text1]', width: 'matchParent', label: 'Type "show"', value: ''
9
9
  form.label text: 'Typed', showIf: {
10
10
  "==": [
11
11
  {
@@ -14,6 +14,14 @@ page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', p
14
14
  'show'
15
15
  ]
16
16
  }
17
+ form.label text: 'Type something', showIf: {
18
+ "==": [
19
+ {
20
+ "var": 'user[text1]'
21
+ },
22
+ ''
23
+ ]
24
+ }
17
25
 
18
26
  form.spacer height: 20
19
27
  form.h1 text: 'Textarea'
@@ -45,6 +53,7 @@ page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', p
45
53
  form.fields_radioGroup name: 'user[radio1]', value: 'F', childViews: ->(group) do
46
54
  group.fields_radio value: 'show', label: 'Show'
47
55
  group.fields_radio value: 'hide', label: 'Hide'
56
+ group.fields_radio value: '', label: 'Empty'
48
57
  end
49
58
  form.spacer height: 10
50
59
  form.label text: 'Chosen', showIf: {
@@ -55,11 +64,19 @@ page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', p
55
64
  'show'
56
65
  ]
57
66
  }
67
+ form.label text: 'Unspecified', showIf: {
68
+ "==": [
69
+ {
70
+ "var": 'user[radio1]'
71
+ },
72
+ ''
73
+ ]
74
+ }
58
75
 
59
76
  form.spacer height: 20
60
77
  form.h1 text: 'Select'
61
- options = ['show', 'hide']
62
- form.fields_select name: 'user[select1]', width: 'matchParent', label: 'Select "show"', options: options
78
+ options = ['', 'show', 'hide']
79
+ form.fields_select name: 'user[select1]', width: 'matchParent', label: 'Select "show"', options: options, value: ''
63
80
  form.label text: 'Selected', showIf: {
64
81
  "==": [
65
82
  {
@@ -68,6 +85,14 @@ page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', p
68
85
  'show'
69
86
  ]
70
87
  }
88
+ form.label text: 'Unspecified', showIf: {
89
+ "==": [
90
+ {
91
+ "var": 'user[select1]'
92
+ },
93
+ ''
94
+ ]
95
+ }
71
96
 
72
97
  form.spacer height: 20
73
98
  form.h1 text: 'Combined conditions'
@@ -90,7 +115,7 @@ page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', p
90
115
  form.spacer height: 10
91
116
  form.fields_check name: 'user[check2]', checkValue: 'on', label: 'Show field'
92
117
  form.spacer height: 10
93
- form.fields_text width: 'matchParent', label: 'Comment (optional)', name: 'user[comment]', value: 'This field can be submitted when it is hidden, but it is not necessary (i.e. up to the app)', showIf: {
118
+ form.fields_text width: 'matchParent', label: 'Comment (optional)', name: 'user[comment]', value: 'This field should be submitted even when it is hidden', showIf: {
94
119
  "==": [
95
120
  {
96
121
  "var": 'user[check2]'
@@ -26,6 +26,18 @@ page.form \
26
26
  leftText: 'USD',
27
27
  rightText: '.00'
28
28
 
29
+ form.fields_phone \
30
+ name: 'user[phone1]',
31
+ width: 'matchParent',
32
+ label: 'Phone field'
33
+
34
+ form.fields_phone \
35
+ name: 'user[phone2]',
36
+ width: 'matchParent',
37
+ label: "Phone field with Australia as the default country",
38
+ disableAutoDetect: true, # Disable country auto detect by user IP
39
+ defaultCountry: 'AU' # ISO Country code, see: https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes
40
+
29
41
  form.fields_password \
30
42
  name: 'user[password]',
31
43
  width: 'matchParent',
@@ -1,11 +1,15 @@
1
1
  json.title 'Lists'
2
2
 
3
- json_ui_page json do |page|
4
- render "#{@path_prefix}/nav_menu", json: json, page: page
3
+ page_index = params[:page].to_i
4
+ page = json_ui_page json
5
+ render "#{@path_prefix}/nav_menu", json: json, page: page
5
6
 
6
- page.list firstSection: ->(section) do
7
- section.rows builder: ->(template) do
8
- template.thumbnail title: 'Click menu (web) or swipe left (Android/iOS)', leftButtons: ->(menu) do
7
+ page.list firstSection: ->(section) do
8
+ section.rows builder: ->(template) do
9
+ template.thumbnail \
10
+ title: 'Click menu (web) or swipe left (Android/iOS)',
11
+ subtitle: "Page index: #{page_index}",
12
+ leftButtons: ->(menu) do
9
13
  menu.button styleClass: 'icon', icon: 'check_box', onClick: ->(subaction) do
10
14
  subaction.dialogs_alert message: 'Tick/untick'
11
15
  end
@@ -17,38 +21,39 @@ json_ui_page json do |page|
17
21
  subaction.dialogs_alert message: 'Open'
18
22
  end
19
23
  end, editButtons: ->(menu) do
20
- menu.button text: 'Edit', onClick: ->(action) do
21
- action.dialogs_alert message: 'Perform action'
24
+ menu.button text: "Edit (ID: #{page_index})", onClick: ->(action) do
25
+ action.dialogs_alert message: 'Perform Edit action'
22
26
  end
23
27
  menu.button text: 'Delete', onClick: ->(action) do
24
- action.dialogs_alert message: 'Perform action'
28
+ action.dialogs_alert message: 'Perform Delete action'
25
29
  end
30
+ end, onClick: ->(action) do
31
+ action.windows_open url: json_ui_garage_url(path: 'lists/edit_actions', page: page_index + 1)
26
32
  end
27
33
 
28
- template.thumbnail title: 'Long press to get an alert', onLongPress: ->(action) do
29
- action.dialogs_alert message: 'This is an alert'
30
- end
34
+ template.thumbnail title: 'Long press to get an alert', onLongPress: ->(action) do
35
+ action.dialogs_alert message: 'This is an alert'
36
+ end
31
37
 
32
- template.thumbnail title: 'Long press to see menu', onLongPress: ->(action) do
33
- action.sheets_select message: 'Context Menu', buttons: ->(menu) do
34
- menu.button icon: 'edit', text: 'Edit', onClick: ->(subaction) do
35
- subaction.dialogs_alert message: 'Perform action'
36
- end
37
- menu.button icon: 'delete', text: 'Delete', onClick: ->(subaction) do
38
- subaction.dialogs_alert message: 'Perform action'
39
- end
38
+ template.thumbnail title: 'Long press to see menu', onLongPress: ->(action) do
39
+ action.sheets_select message: 'Context Menu', buttons: ->(menu) do
40
+ menu.button icon: 'edit', text: 'Edit', onClick: ->(subaction) do
41
+ subaction.dialogs_alert message: 'Perform action'
42
+ end
43
+ menu.button icon: 'delete', text: 'Delete', onClick: ->(subaction) do
44
+ subaction.dialogs_alert message: 'Perform action'
40
45
  end
41
46
  end
42
-
43
- # template.thumbnail title: 'Long press to see menu', contextButtons: ->(menu) do
44
- # menu.button text: 'Edit', onClick: ->(action) do
45
- # action.dialogs_alert message: 'Perform action'
46
- # end
47
- # menu.button text: 'Delete', onClick: ->(action) do
48
- # action.dialogs_alert message: 'Perform action'
49
- # end
50
- # end
51
47
  end
52
48
 
49
+ # template.thumbnail title: 'Long press to see menu', contextButtons: ->(menu) do
50
+ # menu.button text: 'Edit', onClick: ->(action) do
51
+ # action.dialogs_alert message: 'Perform action'
52
+ # end
53
+ # menu.button text: 'Delete', onClick: ->(action) do
54
+ # action.dialogs_alert message: 'Perform action'
55
+ # end
56
+ # end
53
57
  end
58
+
54
59
  end
@@ -1,6 +1,10 @@
1
1
  json.title 'ActionCable Real-time Update'
2
2
  page = json_ui_page json
3
3
 
4
+ online_channel = 'OnlineChannel'
5
+ typing_channel = 'IsTypingChannel'
6
+ first_user = User.first
7
+ second_user = User.offset(1).first
4
8
  # Implement a page that shows how ActionCable works in json_ui
5
9
 
6
10
  # 1. Example for list
@@ -21,13 +25,19 @@ page = json_ui_page json
21
25
 
22
26
 
23
27
  # 3. Example for online status
24
- # - TODO: Implement "repeat: true" in glib-web-npm
25
- # page.on load: ->(action) do
26
- # action.timeouts_set interval: 10000, repeat: true, onTimeout: ->(subaction) do
27
- # subaction.cables_push channel: 'message', event: 'online'
28
- # end
28
+
29
+ # put on app/channels/online_channel.rb
30
+ # class OnlineChannel < Glib::Channel::OnlineChannel
31
+ # self.channel_name = 'OnlineChannel'
29
32
  # end
30
33
 
34
+ page.on load: ->(action) do
35
+ action.timeouts_set interval: 1000, repeat: true, onTimeout: ->(subaction) do
36
+ subaction.cables_push channel: online_channel, event: 'online_status', payload: { status: true, user_id: first_user.id }
37
+ end
38
+ end
39
+
40
+ # 4. Example for typing status
31
41
 
32
42
  # put on app/channels/is_typing_channel.rb
33
43
  # class IsTypingChannel < Glib::Channel::IsTypingChannel
@@ -36,30 +46,35 @@ page = json_ui_page json
36
46
 
37
47
  page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
38
48
 
39
- channel = 'IsTypingChannel'
40
- first_user = User.first
41
- second_user = User.offset(1).first
42
-
43
49
  scroll.panels_split width: 'matchParent', content: ->(content) do
44
50
  content.left childViews: ->(left) do
51
+ online_socket_config = {
52
+ channel: online_channel,
53
+ filterKey: second_user.id,
54
+ params: {
55
+ conversation: 2
56
+ }
57
+ }
58
+ left.label actionCable: online_socket_config, text: ' '
59
+
45
60
  left.fields_textarea \
46
61
  width: 440,
47
62
  label: "Messages from #{first_user.full_name}",
48
63
  onTypeStart: lambda { |action|
49
64
  action.cables_push \
50
- channel: channel, event: 'typing',
65
+ channel: typing_channel, event: 'typing',
51
66
  payload: { status: true, user_id: first_user.id }
52
67
  },
53
68
  onTypeEnd: lambda { |action|
54
69
  action.cables_push \
55
- channel: channel,
70
+ channel: typing_channel,
56
71
  event: 'typing',
57
72
  payload: { status: false, user_id: first_user.id }
58
73
  }
59
74
  left.spacer height: 10
60
75
 
61
76
  socket_config = {
62
- channel: channel,
77
+ channel: typing_channel,
63
78
  filterKey: first_user.id,
64
79
  params: {
65
80
  conversation: 2
@@ -67,25 +82,26 @@ page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
67
82
  }
68
83
  left.label actionCable: socket_config, text: ' '
69
84
  end
85
+
70
86
  content.right childViews: ->(right) do
71
87
  right.fields_textarea \
72
88
  width: 440,
73
89
  label: "Messages from #{second_user.full_name}",
74
90
  onTypeStart: lambda { |action|
75
91
  action.cables_push \
76
- channel: channel, event: 'typing',
92
+ channel: typing_channel, event: 'typing',
77
93
  payload: { status: true, user_id: second_user.id }
78
94
  },
79
95
  onTypeEnd: lambda { |action|
80
96
  action.cables_push \
81
- channel: channel,
97
+ channel: typing_channel,
82
98
  event: 'typing',
83
99
  payload: { status: false, user_id: second_user.id }
84
100
  }
85
101
  right.spacer height: 10
86
102
 
87
103
  socket_config = {
88
- channel: channel,
104
+ channel: typing_channel,
89
105
  filterKey: second_user.id,
90
106
  params: {
91
107
  conversation: 2
@@ -0,0 +1,1450 @@
1
+ json.title 'Views'
2
+
3
+ page = json_ui_page json
4
+ render "#{@path_prefix}/nav_menu", json: json, page: page
5
+
6
+ page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
7
+ # From https://material.io/resources/icons
8
+ #
9
+ # To scrape, run this on JS console:
10
+ #
11
+ # function download(content, fileName, contentType) {
12
+ # var a = document.createElement("a");
13
+ # var file = new Blob([JSON.stringify(content)], { type: contentType });
14
+ # a.href = URL.createObjectURL(file);
15
+ # a.download = fileName;
16
+ # a.click();
17
+ # }
18
+ #
19
+ # let sections = [];
20
+ # let containersNode = document.querySelectorAll(".category-container");
21
+ # for (const containerNode of containersNode) {
22
+ # let titleNode = containerNode.querySelector(".category-name");
23
+ # let iconsNode = Array.from(
24
+ # containerNode.querySelectorAll(".icon-image-preview")
25
+ # );
26
+ # let section = {
27
+ # title: titleNode.textContent,
28
+ # icons: iconsNode.map(function(iconNode) {
29
+ # return iconNode.textContent;
30
+ # })
31
+ # };
32
+ # sections.push(section);
33
+ # }
34
+ # download(sections, "json.txt", "text/plain");
35
+ #
36
+ categories = [
37
+ {
38
+ "title": "action",
39
+ "icons": [
40
+ "3d_rotation",
41
+ "accessibility",
42
+ "accessibility_new",
43
+ "accessible",
44
+ "accessible_forward",
45
+ "account_balance",
46
+ "account_balance_wallet",
47
+ "account_box",
48
+ "account_circle",
49
+ "add_shopping_cart",
50
+ "add_task",
51
+ "addchart",
52
+ "admin_panel_settings",
53
+ "alarm",
54
+ "alarm_add",
55
+ "alarm_off",
56
+ "alarm_on",
57
+ "all_inbox",
58
+ "all_out",
59
+ "analytics",
60
+ "anchor",
61
+ "android",
62
+ "announcement",
63
+ "api",
64
+ "app_blocking",
65
+ "arrow_circle_down",
66
+ "arrow_circle_up",
67
+ "arrow_right_alt",
68
+ "article",
69
+ "aspect_ratio",
70
+ "assessment",
71
+ "assignment",
72
+ "assignment_ind",
73
+ "assignment_late",
74
+ "assignment_return",
75
+ "assignment_returned",
76
+ "assignment_turned_in",
77
+ "autorenew",
78
+ "backup",
79
+ "backup_table",
80
+ "batch_prediction",
81
+ "book",
82
+ "book_online",
83
+ "bookmark",
84
+ "bookmark_border",
85
+ "bookmarks",
86
+ "bug_report",
87
+ "build",
88
+ "build_circle",
89
+ "cached",
90
+ "calendar_today",
91
+ "calendar_view_day",
92
+ "camera_enhance",
93
+ "cancel_schedule_send",
94
+ "card_giftcard",
95
+ "card_membership",
96
+ "card_travel",
97
+ "change_history",
98
+ "check_circle",
99
+ "check_circle_outline",
100
+ "chrome_reader_mode",
101
+ "class",
102
+ "close_fullscreen",
103
+ "code",
104
+ "comment_bank",
105
+ "commute",
106
+ "compare_arrows",
107
+ "contact_page",
108
+ "contact_support",
109
+ "contactless",
110
+ "copyright",
111
+ "credit_card",
112
+ "dashboard",
113
+ "date_range",
114
+ "delete",
115
+ "delete_forever",
116
+ "delete_outline",
117
+ "description",
118
+ "disabled_by_default",
119
+ "dns",
120
+ "done",
121
+ "done_all",
122
+ "done_outline",
123
+ "donut_large",
124
+ "donut_small",
125
+ "drag_indicator",
126
+ "dynamic_form",
127
+ "eco",
128
+ "eject",
129
+ "euro_symbol",
130
+ "event",
131
+ "event_seat",
132
+ "exit_to_app",
133
+ "explore",
134
+ "explore_off",
135
+ "extension",
136
+ "face",
137
+ "fact_check",
138
+ "favorite",
139
+ "favorite_border",
140
+ "feedback",
141
+ "filter_alt",
142
+ "find_in_page",
143
+ "find_replace",
144
+ "fingerprint",
145
+ "flaky",
146
+ "flight_land",
147
+ "flight_takeoff",
148
+ "flip_to_back",
149
+ "flip_to_front",
150
+ "g_translate",
151
+ "gavel",
152
+ "get_app",
153
+ "gif",
154
+ "grade",
155
+ "grading",
156
+ "group_work",
157
+ "help",
158
+ "help_center",
159
+ "help_outline",
160
+ "highlight_alt",
161
+ "highlight_off",
162
+ "history",
163
+ "history_toggle_off",
164
+ "home",
165
+ "horizontal_split",
166
+ "hourglass_disabled",
167
+ "hourglass_empty",
168
+ "hourglass_full",
169
+ "http",
170
+ "https",
171
+ "important_devices",
172
+ "info",
173
+ "input",
174
+ "integration_instructions",
175
+ "invert_colors",
176
+ "label",
177
+ "label_important",
178
+ "label_off",
179
+ "language",
180
+ "launch",
181
+ "leaderboard",
182
+ "line_style",
183
+ "line_weight",
184
+ "list",
185
+ "lock",
186
+ "lock_open",
187
+ "login",
188
+ "loyalty",
189
+ "markunread_mailbox",
190
+ "maximize",
191
+ "mediation",
192
+ "minimize",
193
+ "model_training",
194
+ "next_plan",
195
+ "not_accessible",
196
+ "not_started",
197
+ "note_add",
198
+ "offline_bolt",
199
+ "offline_pin",
200
+ "online_prediction",
201
+ "opacity",
202
+ "open_in_browser",
203
+ "open_in_full",
204
+ "open_in_new",
205
+ "open_with",
206
+ "outbond",
207
+ "outlet",
208
+ "pageview",
209
+ "pan_tool",
210
+ "payment",
211
+ "pending",
212
+ "pending_actions",
213
+ "perm_camera_mic",
214
+ "perm_contact_calendar",
215
+ "perm_data_setting",
216
+ "perm_device_information",
217
+ "perm_identity",
218
+ "perm_media",
219
+ "perm_phone_msg",
220
+ "perm_scan_wifi",
221
+ "pets",
222
+ "picture_in_picture",
223
+ "picture_in_picture_alt",
224
+ "plagiarism",
225
+ "play_for_work",
226
+ "polymer",
227
+ "power_settings_new",
228
+ "pregnant_woman",
229
+ "preview",
230
+ "print",
231
+ "privacy_tip",
232
+ "published_with_changes",
233
+ "query_builder",
234
+ "question_answer",
235
+ "quickreply",
236
+ "receipt",
237
+ "record_voice_over",
238
+ "redeem",
239
+ "remove_shopping_cart",
240
+ "reorder",
241
+ "report_problem",
242
+ "request_page",
243
+ "restore",
244
+ "restore_from_trash",
245
+ "restore_page",
246
+ "room",
247
+ "rounded_corner",
248
+ "rowing",
249
+ "rule",
250
+ "schedule",
251
+ "search",
252
+ "search_off",
253
+ "settings",
254
+ "settings_applications",
255
+ "settings_backup_restore",
256
+ "settings_bluetooth",
257
+ "settings_brightness",
258
+ "settings_cell",
259
+ "settings_ethernet",
260
+ "settings_input_antenna",
261
+ "settings_input_component",
262
+ "settings_input_composite",
263
+ "settings_input_hdmi",
264
+ "settings_input_svideo",
265
+ "settings_overscan",
266
+ "settings_phone",
267
+ "settings_power",
268
+ "settings_remote",
269
+ "settings_voice",
270
+ "shop",
271
+ "shop_two",
272
+ "shopping_bag",
273
+ "shopping_basket",
274
+ "shopping_cart",
275
+ "smart_button",
276
+ "source",
277
+ "speaker_notes",
278
+ "speaker_notes_off",
279
+ "spellcheck",
280
+ "star_rate",
281
+ "stars",
282
+ "sticky_note_2",
283
+ "store",
284
+ "subject",
285
+ "subtitles_off",
286
+ "supervised_user_circle",
287
+ "supervisor_account",
288
+ "support",
289
+ "swap_horiz",
290
+ "swap_horizontal_circle",
291
+ "swap_vert",
292
+ "swap_vertical_circle",
293
+ "sync_alt",
294
+ "system_update_alt",
295
+ "tab",
296
+ "tab_unselected",
297
+ "table_view",
298
+ "text_rotate_up",
299
+ "text_rotate_vertical",
300
+ "text_rotation_angledown",
301
+ "text_rotation_angleup",
302
+ "text_rotation_down",
303
+ "text_rotation_none",
304
+ "theaters",
305
+ "thumb_down",
306
+ "thumb_up",
307
+ "thumbs_up_down",
308
+ "timeline",
309
+ "toc",
310
+ "today",
311
+ "toll",
312
+ "touch_app",
313
+ "tour",
314
+ "track_changes",
315
+ "translate",
316
+ "trending_down",
317
+ "trending_flat",
318
+ "trending_up",
319
+ "turned_in",
320
+ "turned_in_not",
321
+ "unpublished",
322
+ "update",
323
+ "upgrade",
324
+ "verified",
325
+ "verified_user",
326
+ "vertical_split",
327
+ "view_agenda",
328
+ "view_array",
329
+ "view_carousel",
330
+ "view_column",
331
+ "view_day",
332
+ "view_headline",
333
+ "view_list",
334
+ "view_module",
335
+ "view_quilt",
336
+ "view_sidebar",
337
+ "view_stream",
338
+ "view_week",
339
+ "visibility",
340
+ "visibility_off",
341
+ "voice_over_off",
342
+ "watch_later",
343
+ "wifi_protected_setup",
344
+ "work",
345
+ "work_off",
346
+ "work_outline",
347
+ "wysiwyg",
348
+ "youtube_searched_for",
349
+ "zoom_in",
350
+ "zoom_out"
351
+ ]
352
+ },
353
+ {
354
+ "title": "alert",
355
+ "icons": [
356
+ "add_alert",
357
+ "auto_delete",
358
+ "error",
359
+ "error_outline",
360
+ "notification_important",
361
+ "warning"
362
+ ]
363
+ },
364
+ {
365
+ "title": "av",
366
+ "icons": [
367
+ "4k",
368
+ "5g",
369
+ "add_to_queue",
370
+ "airplay",
371
+ "album",
372
+ "art_track",
373
+ "av_timer",
374
+ "branding_watermark",
375
+ "call_to_action",
376
+ "closed_caption",
377
+ "closed_caption_disabled",
378
+ "control_camera",
379
+ "equalizer",
380
+ "explicit",
381
+ "fast_forward",
382
+ "fast_rewind",
383
+ "featured_play_list",
384
+ "featured_video",
385
+ "fiber_dvr",
386
+ "fiber_manual_record",
387
+ "fiber_new",
388
+ "fiber_pin",
389
+ "fiber_smart_record",
390
+ "forward_10",
391
+ "forward_30",
392
+ "forward_5",
393
+ "games",
394
+ "hd",
395
+ "hearing",
396
+ "hearing_disabled",
397
+ "high_quality",
398
+ "library_add",
399
+ "library_add_check",
400
+ "library_books",
401
+ "library_music",
402
+ "loop",
403
+ "mic",
404
+ "mic_none",
405
+ "mic_off",
406
+ "missed_video_call",
407
+ "movie",
408
+ "music_video",
409
+ "new_releases",
410
+ "not_interested",
411
+ "note",
412
+ "pause",
413
+ "pause_circle_filled",
414
+ "pause_circle_outline",
415
+ "play_arrow",
416
+ "play_circle_filled",
417
+ "play_circle_outline",
418
+ "playlist_add",
419
+ "playlist_add_check",
420
+ "playlist_play",
421
+ "queue",
422
+ "queue_music",
423
+ "queue_play_next",
424
+ "radio",
425
+ "recent_actors",
426
+ "remove_from_queue",
427
+ "repeat",
428
+ "repeat_one",
429
+ "replay",
430
+ "replay_10",
431
+ "replay_30",
432
+ "replay_5",
433
+ "shuffle",
434
+ "skip_next",
435
+ "skip_previous",
436
+ "slow_motion_video",
437
+ "snooze",
438
+ "sort_by_alpha",
439
+ "speed",
440
+ "stop",
441
+ "stop_circle",
442
+ "subscriptions",
443
+ "subtitles",
444
+ "surround_sound",
445
+ "video_call",
446
+ "video_label",
447
+ "video_library",
448
+ "video_settings",
449
+ "videocam",
450
+ "videocam_off",
451
+ "volume_down",
452
+ "volume_mute",
453
+ "volume_off",
454
+ "volume_up",
455
+ "web",
456
+ "web_asset"
457
+ ]
458
+ },
459
+ {
460
+ "title": "communication",
461
+ "icons": [
462
+ "add_ic_call",
463
+ "alternate_email",
464
+ "business",
465
+ "call",
466
+ "call_end",
467
+ "call_made",
468
+ "call_merge",
469
+ "call_missed",
470
+ "call_missed_outgoing",
471
+ "call_received",
472
+ "call_split",
473
+ "cancel_presentation",
474
+ "chat",
475
+ "chat_bubble",
476
+ "chat_bubble_outline",
477
+ "clear_all",
478
+ "comment",
479
+ "contact_mail",
480
+ "contact_phone",
481
+ "contacts",
482
+ "desktop_access_disabled",
483
+ "dialer_sip",
484
+ "dialpad",
485
+ "domain_disabled",
486
+ "domain_verification",
487
+ "duo",
488
+ "email",
489
+ "forum",
490
+ "forward_to_inbox",
491
+ "hourglass_bottom",
492
+ "hourglass_top",
493
+ "import_contacts",
494
+ "import_export",
495
+ "invert_colors_off",
496
+ "list_alt",
497
+ "live_help",
498
+ "location_off",
499
+ "location_on",
500
+ "mail_outline",
501
+ "mark_chat_read",
502
+ "mark_chat_unread",
503
+ "mark_email_read",
504
+ "mark_email_unread",
505
+ "message",
506
+ "mobile_screen_share",
507
+ "more_time",
508
+ "nat",
509
+ "no_sim",
510
+ "pause_presentation",
511
+ "person_add_disabled",
512
+ "person_search",
513
+ "phone",
514
+ "phone_disabled",
515
+ "phone_enabled",
516
+ "phonelink_erase",
517
+ "phonelink_lock",
518
+ "phonelink_ring",
519
+ "phonelink_setup",
520
+ "portable_wifi_off",
521
+ "present_to_all",
522
+ "print_disabled",
523
+ "qr_code",
524
+ "qr_code_scanner",
525
+ "read_more",
526
+ "ring_volume",
527
+ "rss_feed",
528
+ "screen_share",
529
+ "sentiment_satisfied_alt",
530
+ "speaker_phone",
531
+ "stay_current_landscape",
532
+ "stay_current_portrait",
533
+ "stay_primary_landscape",
534
+ "stay_primary_portrait",
535
+ "stop_screen_share",
536
+ "swap_calls",
537
+ "textsms",
538
+ "unsubscribe",
539
+ "voicemail",
540
+ "vpn_key",
541
+ "wifi_calling"
542
+ ]
543
+ },
544
+ {
545
+ "title": "content",
546
+ "icons": [
547
+ "add",
548
+ "add_box",
549
+ "add_circle",
550
+ "add_circle_outline",
551
+ "amp_stories",
552
+ "archive",
553
+ "backspace",
554
+ "ballot",
555
+ "biotech",
556
+ "block",
557
+ "calculate",
558
+ "clear",
559
+ "content_copy",
560
+ "content_cut",
561
+ "content_paste",
562
+ "create",
563
+ "delete_sweep",
564
+ "drafts",
565
+ "dynamic_feed",
566
+ "file_copy",
567
+ "filter_list",
568
+ "flag",
569
+ "font_download",
570
+ "forward",
571
+ "gesture",
572
+ "how_to_reg",
573
+ "how_to_vote",
574
+ "inbox",
575
+ "insights",
576
+ "link",
577
+ "link_off",
578
+ "low_priority",
579
+ "mail",
580
+ "markunread",
581
+ "move_to_inbox",
582
+ "next_week",
583
+ "outlined_flag",
584
+ "policy",
585
+ "push_pin",
586
+ "redo",
587
+ "remove",
588
+ "remove_circle",
589
+ "remove_circle_outline",
590
+ "reply",
591
+ "reply_all",
592
+ "report",
593
+ "report_off",
594
+ "save",
595
+ "save_alt",
596
+ "select_all",
597
+ "send",
598
+ "sort",
599
+ "square_foot",
600
+ "text_format",
601
+ "unarchive",
602
+ "undo",
603
+ "waves",
604
+ "weekend",
605
+ "where_to_vote"
606
+ ]
607
+ },
608
+ {
609
+ "title": "device",
610
+ "icons": [
611
+ "access_alarm",
612
+ "access_alarms",
613
+ "access_time",
614
+ "ad_units",
615
+ "add_alarm",
616
+ "add_to_home_screen",
617
+ "airplanemode_active",
618
+ "airplanemode_inactive",
619
+ "battery_alert",
620
+ "battery_charging_full",
621
+ "battery_full",
622
+ "battery_std",
623
+ "battery_unknown",
624
+ "bluetooth",
625
+ "bluetooth_connected",
626
+ "bluetooth_disabled",
627
+ "bluetooth_searching",
628
+ "brightness_auto",
629
+ "brightness_high",
630
+ "brightness_low",
631
+ "brightness_medium",
632
+ "data_usage",
633
+ "developer_mode",
634
+ "devices",
635
+ "dvr",
636
+ "gps_fixed",
637
+ "gps_not_fixed",
638
+ "gps_off",
639
+ "graphic_eq",
640
+ "location_disabled",
641
+ "location_searching",
642
+ "mobile_friendly",
643
+ "mobile_off",
644
+ "nfc",
645
+ "screen_lock_landscape",
646
+ "screen_lock_portrait",
647
+ "screen_lock_rotation",
648
+ "screen_rotation",
649
+ "sd_storage",
650
+ "settings_system_daydream",
651
+ "signal_cellular_4_bar",
652
+ "signal_cellular_alt",
653
+ "signal_cellular_connected_no_internet_4_bar",
654
+ "signal_cellular_no_sim",
655
+ "signal_cellular_null",
656
+ "signal_cellular_off",
657
+ "signal_wifi_4_bar",
658
+ "signal_wifi_4_bar_lock",
659
+ "signal_wifi_off",
660
+ "storage",
661
+ "usb",
662
+ "wallpaper",
663
+ "widgets",
664
+ "wifi_lock",
665
+ "wifi_tethering"
666
+ ]
667
+ },
668
+ {
669
+ "title": "editor",
670
+ "icons": [
671
+ "add_comment",
672
+ "attach_file",
673
+ "attach_money",
674
+ "bar_chart",
675
+ "border_all",
676
+ "border_bottom",
677
+ "border_clear",
678
+ "border_horizontal",
679
+ "border_inner",
680
+ "border_left",
681
+ "border_outer",
682
+ "border_right",
683
+ "border_style",
684
+ "border_top",
685
+ "border_vertical",
686
+ "bubble_chart",
687
+ "drag_handle",
688
+ "format_align_center",
689
+ "format_align_justify",
690
+ "format_align_left",
691
+ "format_align_right",
692
+ "format_bold",
693
+ "format_clear",
694
+ "format_color_reset",
695
+ "format_indent_decrease",
696
+ "format_indent_increase",
697
+ "format_italic",
698
+ "format_line_spacing",
699
+ "format_list_bulleted",
700
+ "format_list_numbered",
701
+ "format_list_numbered_rtl",
702
+ "format_paint",
703
+ "format_quote",
704
+ "format_shapes",
705
+ "format_size",
706
+ "format_strikethrough",
707
+ "format_textdirection_l_to_r",
708
+ "format_textdirection_r_to_l",
709
+ "format_underlined",
710
+ "functions",
711
+ "height",
712
+ "highlight",
713
+ "horizontal_rule",
714
+ "insert_chart",
715
+ "insert_chart_outlined",
716
+ "insert_comment",
717
+ "insert_drive_file",
718
+ "insert_emoticon",
719
+ "insert_invitation",
720
+ "insert_link",
721
+ "insert_photo",
722
+ "linear_scale",
723
+ "merge_type",
724
+ "mode_comment",
725
+ "monetization_on",
726
+ "money_off",
727
+ "multiline_chart",
728
+ "notes",
729
+ "pie_chart",
730
+ "post_add",
731
+ "publish",
732
+ "scatter_plot",
733
+ "score",
734
+ "short_text",
735
+ "show_chart",
736
+ "space_bar",
737
+ "stacked_line_chart",
738
+ "strikethrough_s",
739
+ "subscript",
740
+ "superscript",
741
+ "table_chart",
742
+ "table_rows",
743
+ "text_fields",
744
+ "title",
745
+ "vertical_align_bottom",
746
+ "vertical_align_center",
747
+ "vertical_align_top",
748
+ "wrap_text"
749
+ ]
750
+ },
751
+ {
752
+ "title": "file",
753
+ "icons": [
754
+ "attach_email",
755
+ "attachment",
756
+ "cloud",
757
+ "cloud_circle",
758
+ "cloud_done",
759
+ "cloud_download",
760
+ "cloud_off",
761
+ "cloud_queue",
762
+ "cloud_upload",
763
+ "create_new_folder",
764
+ "folder",
765
+ "folder_open",
766
+ "folder_shared",
767
+ "request_quote",
768
+ "rule_folder",
769
+ "snippet_folder",
770
+ "text_snippet",
771
+ "topic"
772
+ ]
773
+ },
774
+ {
775
+ "title": "hardware",
776
+ "icons": [
777
+ "browser_not_supported",
778
+ "cast",
779
+ "cast_connected",
780
+ "cast_for_education",
781
+ "computer",
782
+ "desktop_mac",
783
+ "desktop_windows",
784
+ "developer_board",
785
+ "device_hub",
786
+ "device_unknown",
787
+ "devices_other",
788
+ "dock",
789
+ "gamepad",
790
+ "headset",
791
+ "headset_mic",
792
+ "keyboard",
793
+ "keyboard_arrow_down",
794
+ "keyboard_arrow_left",
795
+ "keyboard_arrow_right",
796
+ "keyboard_arrow_up",
797
+ "keyboard_backspace",
798
+ "keyboard_capslock",
799
+ "keyboard_hide",
800
+ "keyboard_return",
801
+ "keyboard_tab",
802
+ "keyboard_voice",
803
+ "laptop",
804
+ "laptop_chromebook",
805
+ "laptop_mac",
806
+ "laptop_windows",
807
+ "memory",
808
+ "mouse",
809
+ "phone_android",
810
+ "phone_iphone",
811
+ "phonelink",
812
+ "phonelink_off",
813
+ "point_of_sale",
814
+ "power_input",
815
+ "router",
816
+ "scanner",
817
+ "security",
818
+ "sim_card",
819
+ "smartphone",
820
+ "speaker",
821
+ "speaker_group",
822
+ "tablet",
823
+ "tablet_android",
824
+ "tablet_mac",
825
+ "toys",
826
+ "tv",
827
+ "videogame_asset",
828
+ "watch"
829
+ ]
830
+ },
831
+ {
832
+ "title": "home",
833
+ "icons": [
834
+ "sensor_door",
835
+ "sensor_window"
836
+ ]
837
+ },
838
+ {
839
+ "title": "image",
840
+ "icons": [
841
+ "add_a_photo",
842
+ "add_photo_alternate",
843
+ "add_to_photos",
844
+ "adjust",
845
+ "assistant",
846
+ "assistant_photo",
847
+ "audiotrack",
848
+ "bedtime",
849
+ "blur_circular",
850
+ "blur_linear",
851
+ "blur_off",
852
+ "blur_on",
853
+ "brightness_1",
854
+ "brightness_2",
855
+ "brightness_3",
856
+ "brightness_4",
857
+ "brightness_5",
858
+ "brightness_6",
859
+ "brightness_7",
860
+ "broken_image",
861
+ "brush",
862
+ "burst_mode",
863
+ "camera",
864
+ "camera_alt",
865
+ "camera_front",
866
+ "camera_rear",
867
+ "camera_roll",
868
+ "center_focus_strong",
869
+ "center_focus_weak",
870
+ "collections",
871
+ "collections_bookmark",
872
+ "color_lens",
873
+ "colorize",
874
+ "compare",
875
+ "control_point",
876
+ "control_point_duplicate",
877
+ "crop",
878
+ "crop_16_9",
879
+ "crop_3_2",
880
+ "crop_5_4",
881
+ "crop_7_5",
882
+ "crop_din",
883
+ "crop_free",
884
+ "crop_landscape",
885
+ "crop_original",
886
+ "crop_portrait",
887
+ "crop_rotate",
888
+ "crop_square",
889
+ "dehaze",
890
+ "details",
891
+ "edit",
892
+ "euro",
893
+ "exposure",
894
+ "exposure_neg_1",
895
+ "exposure_neg_2",
896
+ "exposure_plus_1",
897
+ "exposure_plus_2",
898
+ "exposure_zero",
899
+ "filter",
900
+ "filter_1",
901
+ "filter_2",
902
+ "filter_3",
903
+ "filter_4",
904
+ "filter_5",
905
+ "filter_6",
906
+ "filter_7",
907
+ "filter_8",
908
+ "filter_9",
909
+ "filter_9_plus",
910
+ "filter_b_and_w",
911
+ "filter_center_focus",
912
+ "filter_drama",
913
+ "filter_frames",
914
+ "filter_hdr",
915
+ "filter_none",
916
+ "filter_tilt_shift",
917
+ "filter_vintage",
918
+ "flare",
919
+ "flash_auto",
920
+ "flash_off",
921
+ "flash_on",
922
+ "flip",
923
+ "flip_camera_android",
924
+ "flip_camera_ios",
925
+ "gradient",
926
+ "grain",
927
+ "grid_off",
928
+ "grid_on",
929
+ "hdr_off",
930
+ "hdr_on",
931
+ "hdr_strong",
932
+ "hdr_weak",
933
+ "healing",
934
+ "image",
935
+ "image_aspect_ratio",
936
+ "image_not_supported",
937
+ "image_search",
938
+ "iso",
939
+ "landscape",
940
+ "leak_add",
941
+ "leak_remove",
942
+ "lens",
943
+ "linked_camera",
944
+ "looks",
945
+ "looks_3",
946
+ "looks_4",
947
+ "looks_5",
948
+ "looks_6",
949
+ "looks_one",
950
+ "looks_two",
951
+ "loupe",
952
+ "monochrome_photos",
953
+ "motion_photos_on",
954
+ "motion_photos_pause",
955
+ "motion_photos_paused",
956
+ "movie_creation",
957
+ "movie_filter",
958
+ "music_note",
959
+ "music_off",
960
+ "nature",
961
+ "nature_people",
962
+ "navigate_before",
963
+ "navigate_next",
964
+ "palette",
965
+ "panorama",
966
+ "panorama_fish_eye",
967
+ "panorama_horizontal",
968
+ "panorama_vertical",
969
+ "panorama_wide_angle",
970
+ "photo",
971
+ "photo_album",
972
+ "photo_camera",
973
+ "photo_filter",
974
+ "photo_library",
975
+ "photo_size_select_actual",
976
+ "photo_size_select_large",
977
+ "photo_size_select_small",
978
+ "picture_as_pdf",
979
+ "portrait",
980
+ "receipt_long",
981
+ "remove_red_eye",
982
+ "rotate_90_degrees_ccw",
983
+ "rotate_left",
984
+ "rotate_right",
985
+ "shutter_speed",
986
+ "slideshow",
987
+ "straighten",
988
+ "style",
989
+ "switch_camera",
990
+ "switch_video",
991
+ "tag_faces",
992
+ "texture",
993
+ "timelapse",
994
+ "timer",
995
+ "timer_10",
996
+ "timer_3",
997
+ "timer_off",
998
+ "tonality",
999
+ "transform",
1000
+ "tune",
1001
+ "view_comfy",
1002
+ "view_compact",
1003
+ "vignette",
1004
+ "wb_auto",
1005
+ "wb_cloudy",
1006
+ "wb_incandescent",
1007
+ "wb_iridescent",
1008
+ "wb_sunny"
1009
+ ]
1010
+ },
1011
+ {
1012
+ "title": "maps",
1013
+ "icons": [
1014
+ "360",
1015
+ "add_business",
1016
+ "add_location",
1017
+ "add_location_alt",
1018
+ "add_road",
1019
+ "agriculture",
1020
+ "alt_route",
1021
+ "atm",
1022
+ "beenhere",
1023
+ "bike_scooter",
1024
+ "category",
1025
+ "cleaning_services",
1026
+ "compass_calibration",
1027
+ "departure_board",
1028
+ "design_services",
1029
+ "directions",
1030
+ "directions_bike",
1031
+ "directions_boat",
1032
+ "directions_bus",
1033
+ "directions_car",
1034
+ "directions_railway",
1035
+ "directions_run",
1036
+ "directions_subway",
1037
+ "directions_transit",
1038
+ "directions_walk",
1039
+ "edit_attributes",
1040
+ "edit_location",
1041
+ "edit_road",
1042
+ "electric_bike",
1043
+ "electric_car",
1044
+ "electric_moped",
1045
+ "electric_scooter",
1046
+ "electrical_services",
1047
+ "ev_station",
1048
+ "fastfood",
1049
+ "flight",
1050
+ "handyman",
1051
+ "home_repair_service",
1052
+ "hotel",
1053
+ "hvac",
1054
+ "layers",
1055
+ "layers_clear",
1056
+ "local_activity",
1057
+ "local_airport",
1058
+ "local_atm",
1059
+ "local_bar",
1060
+ "local_cafe",
1061
+ "local_car_wash",
1062
+ "local_convenience_store",
1063
+ "local_dining",
1064
+ "local_drink",
1065
+ "local_fire_department",
1066
+ "local_florist",
1067
+ "local_gas_station",
1068
+ "local_grocery_store",
1069
+ "local_hospital",
1070
+ "local_hotel",
1071
+ "local_laundry_service",
1072
+ "local_library",
1073
+ "local_mall",
1074
+ "local_movies",
1075
+ "local_offer",
1076
+ "local_parking",
1077
+ "local_pharmacy",
1078
+ "local_phone",
1079
+ "local_pizza",
1080
+ "local_play",
1081
+ "local_police",
1082
+ "local_post_office",
1083
+ "local_printshop",
1084
+ "local_see",
1085
+ "local_shipping",
1086
+ "local_taxi",
1087
+ "map",
1088
+ "maps_ugc",
1089
+ "medical_services",
1090
+ "menu_book",
1091
+ "miscellaneous_services",
1092
+ "money",
1093
+ "moped",
1094
+ "multiple_stop",
1095
+ "museum",
1096
+ "my_location",
1097
+ "navigation",
1098
+ "near_me",
1099
+ "near_me_disabled",
1100
+ "no_meals",
1101
+ "no_transfer",
1102
+ "not_listed_location",
1103
+ "pedal_bike",
1104
+ "person_pin",
1105
+ "person_pin_circle",
1106
+ "pest_control",
1107
+ "pest_control_rodent",
1108
+ "pin_drop",
1109
+ "place",
1110
+ "plumbing",
1111
+ "rate_review",
1112
+ "restaurant",
1113
+ "restaurant_menu",
1114
+ "run_circle",
1115
+ "satellite",
1116
+ "set_meal",
1117
+ "store_mall_directory",
1118
+ "streetview",
1119
+ "subway",
1120
+ "terrain",
1121
+ "traffic",
1122
+ "train",
1123
+ "tram",
1124
+ "transfer_within_a_station",
1125
+ "transit_enterexit",
1126
+ "trip_origin",
1127
+ "two_wheeler",
1128
+ "wine_bar",
1129
+ "wrong_location",
1130
+ "zoom_out_map"
1131
+ ]
1132
+ },
1133
+ {
1134
+ "title": "navigation",
1135
+ "icons": [
1136
+ "app_settings_alt",
1137
+ "apps",
1138
+ "arrow_back",
1139
+ "arrow_back_ios",
1140
+ "arrow_downward",
1141
+ "arrow_drop_down",
1142
+ "arrow_drop_down_circle",
1143
+ "arrow_drop_up",
1144
+ "arrow_forward",
1145
+ "arrow_forward_ios",
1146
+ "arrow_left",
1147
+ "arrow_right",
1148
+ "arrow_upward",
1149
+ "campaign",
1150
+ "cancel",
1151
+ "check",
1152
+ "chevron_left",
1153
+ "chevron_right",
1154
+ "close",
1155
+ "double_arrow",
1156
+ "east",
1157
+ "expand_less",
1158
+ "expand_more",
1159
+ "first_page",
1160
+ "fullscreen",
1161
+ "fullscreen_exit",
1162
+ "home_work",
1163
+ "last_page",
1164
+ "legend_toggle",
1165
+ "menu",
1166
+ "menu_open",
1167
+ "more_horiz",
1168
+ "more_vert",
1169
+ "north",
1170
+ "north_east",
1171
+ "north_west",
1172
+ "payments",
1173
+ "refresh",
1174
+ "south",
1175
+ "south_east",
1176
+ "south_west",
1177
+ "subdirectory_arrow_left",
1178
+ "subdirectory_arrow_right",
1179
+ "switch_left",
1180
+ "switch_right",
1181
+ "unfold_less",
1182
+ "unfold_more",
1183
+ "west"
1184
+ ]
1185
+ },
1186
+ {
1187
+ "title": "notification",
1188
+ "icons": [
1189
+ "account_tree",
1190
+ "adb",
1191
+ "airline_seat_flat",
1192
+ "airline_seat_flat_angled",
1193
+ "airline_seat_individual_suite",
1194
+ "airline_seat_legroom_extra",
1195
+ "airline_seat_legroom_normal",
1196
+ "airline_seat_legroom_reduced",
1197
+ "airline_seat_recline_extra",
1198
+ "airline_seat_recline_normal",
1199
+ "bluetooth_audio",
1200
+ "confirmation_number",
1201
+ "directions_off",
1202
+ "disc_full",
1203
+ "drive_eta",
1204
+ "enhanced_encryption",
1205
+ "event_available",
1206
+ "event_busy",
1207
+ "event_note",
1208
+ "folder_special",
1209
+ "live_tv",
1210
+ "mms",
1211
+ "more",
1212
+ "network_check",
1213
+ "network_locked",
1214
+ "no_encryption",
1215
+ "ondemand_video",
1216
+ "personal_video",
1217
+ "phone_bluetooth_speaker",
1218
+ "phone_callback",
1219
+ "phone_forwarded",
1220
+ "phone_in_talk",
1221
+ "phone_locked",
1222
+ "phone_missed",
1223
+ "phone_paused",
1224
+ "power",
1225
+ "power_off",
1226
+ "priority_high",
1227
+ "sd_card",
1228
+ "sms",
1229
+ "sms_failed",
1230
+ "support_agent",
1231
+ "sync",
1232
+ "sync_disabled",
1233
+ "sync_problem",
1234
+ "system_update",
1235
+ "tap_and_play",
1236
+ "time_to_leave",
1237
+ "tv_off",
1238
+ "vibration",
1239
+ "voice_chat",
1240
+ "vpn_lock",
1241
+ "wc",
1242
+ "wifi",
1243
+ "wifi_off"
1244
+ ]
1245
+ },
1246
+ {
1247
+ "title": "places",
1248
+ "icons": [
1249
+ "ac_unit",
1250
+ "airport_shuttle",
1251
+ "all_inclusive",
1252
+ "apartment",
1253
+ "baby_changing_station",
1254
+ "backpack",
1255
+ "bathtub",
1256
+ "beach_access",
1257
+ "bento",
1258
+ "business_center",
1259
+ "carpenter",
1260
+ "casino",
1261
+ "charging_station",
1262
+ "checkroom",
1263
+ "child_care",
1264
+ "child_friendly",
1265
+ "corporate_fare",
1266
+ "countertops",
1267
+ "do_not_step",
1268
+ "do_not_touch",
1269
+ "dry",
1270
+ "elevator",
1271
+ "escalator",
1272
+ "escalator_warning",
1273
+ "family_restroom",
1274
+ "fence",
1275
+ "fire_extinguisher",
1276
+ "fitness_center",
1277
+ "food_bank",
1278
+ "foundation",
1279
+ "free_breakfast",
1280
+ "golf_course",
1281
+ "grass",
1282
+ "hot_tub",
1283
+ "house",
1284
+ "house_siding",
1285
+ "kitchen",
1286
+ "meeting_room",
1287
+ "microwave",
1288
+ "night_shelter",
1289
+ "no_backpack",
1290
+ "no_cell",
1291
+ "no_drinks",
1292
+ "no_flash",
1293
+ "no_food",
1294
+ "no_meeting_room",
1295
+ "no_photography",
1296
+ "no_stroller",
1297
+ "pool",
1298
+ "rice_bowl",
1299
+ "roofing",
1300
+ "room_preferences",
1301
+ "room_service",
1302
+ "rv_hookup",
1303
+ "smoke_free",
1304
+ "smoking_rooms",
1305
+ "soap",
1306
+ "spa",
1307
+ "sports_bar",
1308
+ "stairs",
1309
+ "storefront",
1310
+ "stroller",
1311
+ "tapas",
1312
+ "tty",
1313
+ "umbrella",
1314
+ "wash",
1315
+ "water_damage",
1316
+ "wheelchair_pickup"
1317
+ ]
1318
+ },
1319
+ {
1320
+ "title": "social",
1321
+ "icons": [
1322
+ "6_ft_apart",
1323
+ "architecture",
1324
+ "cake",
1325
+ "clean_hands",
1326
+ "connect_without_contact",
1327
+ "construction",
1328
+ "coronavirus",
1329
+ "deck",
1330
+ "domain",
1331
+ "elderly",
1332
+ "emoji_emotions",
1333
+ "emoji_events",
1334
+ "emoji_flags",
1335
+ "emoji_food_beverage",
1336
+ "emoji_nature",
1337
+ "emoji_objects",
1338
+ "emoji_people",
1339
+ "emoji_symbols",
1340
+ "emoji_transportation",
1341
+ "engineering",
1342
+ "facebook",
1343
+ "fireplace",
1344
+ "follow_the_signs",
1345
+ "group",
1346
+ "group_add",
1347
+ "groups",
1348
+ "history_edu",
1349
+ "king_bed",
1350
+ "location_city",
1351
+ "luggage",
1352
+ "masks",
1353
+ "military_tech",
1354
+ "mood",
1355
+ "mood_bad",
1356
+ "nights_stay",
1357
+ "no_luggage",
1358
+ "notifications",
1359
+ "notifications_active",
1360
+ "notifications_none",
1361
+ "notifications_off",
1362
+ "notifications_paused",
1363
+ "outdoor_grill",
1364
+ "pages",
1365
+ "party_mode",
1366
+ "people",
1367
+ "people_alt",
1368
+ "people_outline",
1369
+ "person",
1370
+ "person_add",
1371
+ "person_add_alt_1",
1372
+ "person_outline",
1373
+ "person_remove",
1374
+ "person_remove_alt_1",
1375
+ "plus_one",
1376
+ "poll",
1377
+ "psychology",
1378
+ "public",
1379
+ "public_off",
1380
+ "reduce_capacity",
1381
+ "sanitizer",
1382
+ "school",
1383
+ "science",
1384
+ "self_improvement",
1385
+ "sentiment_dissatisfied",
1386
+ "sentiment_satisfied",
1387
+ "sentiment_very_dissatisfied",
1388
+ "sentiment_very_satisfied",
1389
+ "share",
1390
+ "sick",
1391
+ "single_bed",
1392
+ "sports",
1393
+ "sports_baseball",
1394
+ "sports_basketball",
1395
+ "sports_cricket",
1396
+ "sports_esports",
1397
+ "sports_football",
1398
+ "sports_golf",
1399
+ "sports_handball",
1400
+ "sports_hockey",
1401
+ "sports_kabaddi",
1402
+ "sports_mma",
1403
+ "sports_motorsports",
1404
+ "sports_rugby",
1405
+ "sports_soccer",
1406
+ "sports_tennis",
1407
+ "sports_volleyball",
1408
+ "thumb_down_alt",
1409
+ "thumb_up_alt",
1410
+ "whatshot"
1411
+ ]
1412
+ },
1413
+ {
1414
+ "title": "toggle",
1415
+ "icons": [
1416
+ "check_box",
1417
+ "check_box_outline_blank",
1418
+ "indeterminate_check_box",
1419
+ "radio_button_checked",
1420
+ "radio_button_unchecked",
1421
+ "star",
1422
+ "star_border",
1423
+ "star_half",
1424
+ "star_outline",
1425
+ "toggle_off",
1426
+ "toggle_on"
1427
+ ]
1428
+ }
1429
+ ]
1430
+
1431
+ categories.each do |category|
1432
+ scroll.h3 text: category[:title]
1433
+ scroll.spacer height: 6
1434
+
1435
+ icon_names = category[:icons]
1436
+ icon_names.each do |icon_name|
1437
+ scroll.panels_column lg: { cols: 4 }, childViews: ->(column) do
1438
+ column.panels_horizontal align: 'middle', childViews: ->(horizontal) do
1439
+ horizontal.icon spec: icon_name
1440
+ horizontal.spacer width: 6
1441
+ horizontal.label text: icon_name
1442
+
1443
+ # horizontal.button icon: icon_name, text: icon_name
1444
+ end
1445
+ end
1446
+ end
1447
+
1448
+ scroll.spacer height: 20
1449
+ end
1450
+ end