glib-web 0.5.16 → 0.5.18

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: f06e6697837bddfa0e71b0263a7dcc23452aff19
4
- data.tar.gz: 57677ef8d290617ca0a3bc935450b9c729113623
2
+ SHA256:
3
+ metadata.gz: 481c51fde9d25ee4f8b4470c126f26c957c04209acdb37b1a52db6faecba9f4e
4
+ data.tar.gz: d2258e2069c804b9ad232bb157c657260352bdf3eabab1342562040f165c1ffa
5
5
  SHA512:
6
- metadata.gz: 4bcfd89c5fbc018bb165b5a9c631435117415320c1465ae49a13975e7da3dfccc58f4a182ec9bd90fae1a7f42fd3426842e1a16b3db1e8bdf6b5bd8052e42ffb
7
- data.tar.gz: 89d40c161a93ce26a558029697553801d0e5cae50f0c0bc4f7ab7aec619f917e2487478ff741654f326a4d21e2452d61b2c73000bb054d2571aa12d09e98f451
6
+ metadata.gz: cc9c9bb53e07b9ef3031167aa3f72d901e2b07098ee4a90f285969c2fc1ee548d966c2947a165fd3c519f8d0cbad13cebc3c7e70498d90cbdc4db220c3a4ad92
7
+ data.tar.gz: 9b5fc5e2d30f03fe433425f3d4594eb0acfb3bb48774a73e161feae7bca2ea87cae450a291a32a29fd1b4acfcfdf057752be9e0c04386b570bb59ea925a24fec
@@ -71,6 +71,13 @@ module Glib
71
71
  end
72
72
  end
73
73
 
74
+ module Devices
75
+ class GetPushToken < Action
76
+ action :onGet
77
+ string :paramNameForToken
78
+ end
79
+ end
80
+
74
81
  module Analytics
75
82
  class LogEvent < Action
76
83
  string :name
@@ -45,6 +45,12 @@ module Glib
45
45
  @__json_ui_section.action_builder
46
46
  end
47
47
 
48
+ def json_ui_action_payload(&block)
49
+ dataJson = Jbuilder.new
50
+ block&.call Page.new(dataJson, self).action_builder
51
+ dataJson.attributes!
52
+ end
53
+
48
54
  class Page
49
55
  attr_reader :json, :context, :view_builder, :action_builder, :menu_builder
50
56
  attr_reader :list_section_builder, :table_section_builder, :drawer_content_builder, :split_content_builder
@@ -157,6 +157,7 @@ class Glib::JsonUi::ViewBuilder
157
157
  class DynamicGroup < AbstractField
158
158
  string :titlePrefix
159
159
  panels_builder :content, :template
160
+ hash :groupFieldProperties
160
161
 
161
162
  # NOTE: Consider using sub-panel instead (e.g. groupTemplate)
162
163
  # views :groupTemplateViews
@@ -1,6 +1,5 @@
1
1
 
2
2
  if local_assigns[:top_nav] || json_ui_app_is_web?
3
-
4
3
  page.leftDrawer content: ->(drawer) do
5
4
  drawer.header childViews: ->(header) do
6
5
  header.button text: 'App', styleClasses: ['link', 'logo'], onClick: ->(action) do
@@ -5,14 +5,20 @@ end
5
5
 
6
6
  section.rows builder: ->(template) do
7
7
  template.thumbnail title: 'http/post', onClick: ->(action) do
8
- action.http_post url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'New Joe' }
8
+ action.auth_saveCsrfToken token: form_authenticity_token, onSave: ->(subaction) do
9
+ subaction.http_post url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'New Joe' }
10
+ end
9
11
  end
10
12
 
11
13
  template.thumbnail title: 'http/patch', onClick: ->(action) do
12
- action.http_patch url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'Edit Joe' }
14
+ action.auth_saveCsrfToken token: form_authenticity_token, onSave: ->(subaction) do
15
+ subaction.http_patch url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'Edit Joe' }
16
+ end
13
17
  end
14
18
 
15
19
  template.thumbnail title: 'http/delete', onClick: ->(action) do
16
- action.http_delete url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'Delete Joe' }
20
+ action.auth_saveCsrfToken token: form_authenticity_token, onSave: ->(subaction) do
21
+ subaction.http_delete url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'Delete Joe' }
22
+ end
17
23
  end
18
24
  end
@@ -7,23 +7,38 @@ json_ui_page json do |page|
7
7
  form.h2 text: 'Dynamic Group'
8
8
  form.spacer height: 6
9
9
 
10
- value = [
11
- {
12
- 'question': 'Punctuality',
13
- 'type': 'rating',
14
- 'enabled': '1'
15
- },
16
- {
17
- 'question': 'Quality of work',
18
- 'type': 'rating'
19
- },
20
- {
21
- 'question': 'Satisfied?',
22
- 'type': 'yes_no'
23
- }
24
- ]
10
+ # value = [
11
+ # {
12
+ # 'question': 'Punctuality',
13
+ # 'type': 'rating'
14
+ # },
15
+ # {
16
+ # 'question': 'Quality of work',
17
+ # 'type': 'rating',
18
+ # 'enabled': '1'
19
+ # },
20
+ # {
21
+ # 'question': 'Satisfied?',
22
+ # 'type': 'yes_no'
23
+ # }
24
+ # ]
25
25
 
26
- form.fields_dynamicGroup width: 'matchParent', name: 'user[evaluation]', value: value, titlePrefix: 'Entry', content: ->(group) do
26
+ properties = [
27
+ [
28
+ { name: 'question', value: 'Punctuality' },
29
+ { name: 'type', value: 'rating' },
30
+ ],
31
+ [
32
+ { name: 'question', value: 'Quality of work' },
33
+ { name: 'type', value: 'rating' },
34
+ { name: 'enabled', value: '1', styleClasses: ['success'] },
35
+ ],
36
+ [
37
+ { name: 'question', value: 'Satisfied?' },
38
+ { name: 'type', value: 'yes_no' },
39
+ ]
40
+ ]
41
+ form.fields_dynamicGroup width: 'matchParent', name: 'user[evaluation]', groupFieldProperties: properties, titlePrefix: 'Entry', content: ->(group) do
27
42
  group.template padding: { left: 32 }, childViews: ->(template) do
28
43
  template.spacer height: 10
29
44
  template.fields_text width: 'matchParent', name: 'question', label: 'Question', placeholder: 'Question'
@@ -0,0 +1,96 @@
1
+ json.title 'Lists'
2
+
3
+ liked = params[:liked] == 'true'
4
+
5
+ page = json_ui_page json
6
+ render "#{@path_prefix}/nav_menu", json: json, page: page
7
+
8
+ page.list firstSection: ->(section) do
9
+ section.header padding: { top: 12, left: 16, right: 16, bottom: 12 }, childViews: ->(header) do
10
+ header.h3 text: 'Chat with John Doe'
11
+ end
12
+
13
+ section.rows builder: ->(template) do
14
+ # template.thumbnail title: "windows/reload (timestamp: #{DateTime.current.to_i}) -- #{liked}", onClick: ->(action) do
15
+ # action.windows_reload
16
+ # end, onLongPress: ->(action) do
17
+ # action.sheets_select message: "Context Menu (#{DateTime.current.to_i})", buttons: ->(menu) do
18
+ # if liked
19
+ # menu.button text: 'Cancel 👍', onClick: ->(subaction) do
20
+ # subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat', liked: false)
21
+ # end
22
+ # else
23
+ # menu.button text: 'Give 👍', onClick: ->(subaction) do
24
+ # subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat', liked: true)
25
+ # end
26
+ # end
27
+ # end
28
+ # end
29
+
30
+ template.commentOutgoing subtitle: 'Hey!', subsubtitle: l(10.minutes.ago, format: :short), imageUrl: glib_json_image_standard_url, chips: ->(menu) do
31
+ menu.button text: '😊 2', styleClass: 'info'
32
+ end
33
+
34
+ template.commentOutgoing subtitle: 'How are you?', subsubtitle: l(DateTime.current, format: :short)
35
+
36
+ template.commentIncoming title: 'John Doe', subtitle: 'Very well', subsubtitle: l(7.minutes.ago, format: :short), imageUrl: glib_json_image_standard_url, chips: ->(menu) do
37
+ menu.button text: "👍 #{liked ? 2 : 1}"
38
+ end, onLongPress: ->(action) do
39
+ action.sheets_select message: 'Context Menu', buttons: ->(menu) do
40
+ if liked
41
+ menu.button text: 'Cancel 👍', onClick: ->(subaction) do
42
+ subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat_ui', liked: false)
43
+ end
44
+ else
45
+ menu.button text: 'Give 👍', onClick: ->(subaction) do
46
+ subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat_ui', liked: true)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ page.footer padding: { top: 12, left: 16, right: 16, bottom: 12 }, childViews: ->(footer) do
55
+ # json.ws({
56
+ # "socket" => {
57
+ # "endpoint" => "/socket/websocket",
58
+ # "params" => {
59
+ # vsn: '2.0.0',
60
+ # token: 'TOKEN'
61
+ # }
62
+ # },
63
+ # # "topic" => "room:30",
64
+ # # "event" => "comments_updated",
65
+ # "topic" => "links",
66
+ # "events" => ["new_link_added"],
67
+ # "header" => {
68
+ # "user_id" => 2,
69
+ # "prev_item_id" => nil,
70
+ # "last_item_id" => nil
71
+ # }
72
+ # })
73
+
74
+ footer.panels_form width: 'matchParent', url: json_ui_garage_url(path: 'forms/basic_post'), method: 'post', padding: glib_json_padding_body, paramNameForFormData: 'formData', onSubmit: ->(action) do
75
+ json.action "ws/push"
76
+ json.topic "links"
77
+ json.event "new_link"
78
+ json.payload({
79
+ "club_id": "2",
80
+ "room_id": "30",
81
+ "user_id": "2"
82
+ # title: "TITLE",
83
+ # url: "URL"
84
+ })
85
+
86
+ end, childViews: ->(form) do
87
+ form.fields_text name: 'message[body]', width: 'matchParent', label: 'Message'
88
+
89
+ form.panels_split width: 'matchParent', content: ->(split) do
90
+ split.right childViews: ->(right) do
91
+ right.button text: 'Submit', onClick: ->(action) { action.forms_submit }
92
+ end
93
+ end
94
+ end
95
+
96
+ end
@@ -14,8 +14,8 @@ json_ui_page json do |page|
14
14
  template.thumbnail title: 'FAB (Floating Action Button)', onClick: ->(action) do
15
15
  action.windows_open url: json_ui_garage_url(path: 'lists/fab')
16
16
  end
17
- template.thumbnail title: 'Chat Prototype', onClick: ->(action) do
18
- action.windows_open url: json_ui_garage_url(path: 'lists/chat')
17
+ template.thumbnail title: 'Chat UI', onClick: ->(action) do
18
+ action.windows_open url: json_ui_garage_url(path: 'lists/chat_ui')
19
19
  end
20
20
  template.thumbnail title: 'Autoload as Needed', onClick: ->(action) do
21
21
  action.windows_open url: json_ui_garage_url(path: 'lists/autoload_as_needed')
@@ -0,0 +1,56 @@
1
+ if (server_key = ENV['GCM_SERVER_KEY'])
2
+ fcm = FCM.new(server_key)
3
+
4
+ # you can set option parameters in here
5
+ # - all options are pass to HTTParty method arguments
6
+ # - ref: https://github.com/jnunemaker/httparty/blob/master/lib/httparty.rb#L29-L60
7
+ # fcm = FCM.new("my_server_key", timeout: 3)
8
+
9
+ registration_ids = [params[:token]] # an array of one or more client registration tokens
10
+
11
+
12
+
13
+ # # dataJson = Jbuilder.new
14
+ # data = json_ui_response nil do |action|
15
+ # action.snackbars_alert message: 'TEST'
16
+ # end
17
+ # # data = dataJson.attributes!
18
+
19
+
20
+ # action = json_ui_action nil do |action|
21
+ # action.snackbars_alert message: 'TEST'
22
+ # end
23
+
24
+ payload = json_ui_action_payload do |action|
25
+ action.snackbars_alert message: 'TEST'
26
+ end
27
+
28
+ puts "D: #{payload}"
29
+
30
+ # See https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages for all available options.
31
+ options = {
32
+ notification: {
33
+ title: params[:title],
34
+ body: "Message from server"
35
+ },
36
+ data: {
37
+ channelId: 'default',
38
+ notificationId: 1,
39
+ onClick: payload
40
+ }
41
+ }
42
+ response = fcm.send(registration_ids, options)
43
+
44
+ body = JSON.parse(response[:body])
45
+ if (errors = body['results'].map { |i| i['error'] }.compact).any?
46
+ message = errors.join(', ')
47
+ else
48
+ message = 'Sent'
49
+ end
50
+ else
51
+ message = 'Need to set env var: GCM_SERVER_KEY'
52
+ end
53
+
54
+ json_ui_response json do |action|
55
+ action.snackbars_alert message: message
56
+ end
@@ -11,6 +11,17 @@ page.list firstSection: ->(section) do
11
11
  end
12
12
  end
13
13
 
14
+ template.thumbnail title: 'Send Android Notification', onClick: ->(action) do
15
+ action.auth_saveCsrfToken token: form_authenticity_token, onSave: ->(subaction) do
16
+ subaction.devices_getPushToken paramNameForToken: 'formData[token]', onGet: ->(subsubaction) do
17
+ formData = {
18
+ title: 'Title from formData'
19
+ }
20
+ subsubaction.http_post url: json_ui_garage_url(path: 'notifications/android_post'), formData: formData
21
+ end
22
+ end
23
+ end
24
+
14
25
  template.thumbnail title: 'WebSocket Real-time Update', onClick: ->(action) do
15
26
  action.windows_open url: json_ui_garage_url(path: 'notifications/web_socket')
16
27
  end
@@ -2,10 +2,14 @@ batch_count = 30
2
2
  items = (1..batch_count)
3
3
  section = page.table_section_builder
4
4
  section.rows objects: items, builder: ->(row, item, index) do
5
- row.default cellViews: ->(cell) do
5
+ row.default colStyles: [{ width: 36 }, {}, {}, {}, { width: 36 }], cellViews: ->(cell) do
6
+ cell.label text: ''
7
+
6
8
  column_indexes.each do |i|
7
- cell.label text: "Data #{page_index * batch_count + item}"
9
+ cell.label text: "Data #{page_index * batch_count + item}-#{i}"
8
10
  end
11
+
12
+ cell.label text: ''
9
13
  end, onClick: ->(action) do
10
14
  action.windows_open url: json_ui_garage_url(path: 'home/blank')
11
15
  end
@@ -10,6 +10,8 @@ column_indexes = (1..3)
10
10
  # - for SEO: one URL for a standalone page and one URL for pagination only
11
11
  # - for generic approach, e.g. excluding nav_menu when there is no change
12
12
  if params[:section_only].present?
13
+ sleep 1
14
+
13
15
  json.nextPage next_page if page_index < 3
14
16
  json_ui_page json do |page|
15
17
  json.sections do
@@ -1,12 +1,15 @@
1
1
 
2
+ col_index = params[:col].to_i
2
3
  page_index = params[:page].to_i
3
4
  next_page = {
4
- url: json_ui_garage_url(path: 'tables/autoload_as_needed', page: page_index + 1, section_only: 'v1'),
5
+ url: json_ui_garage_url(path: 'tables/autoload_as_needed', page: page_index + 1, col: col_index, section_only: 'v1'),
5
6
  autoload: 'asNeeded'
6
7
  }
7
8
 
8
9
  page = json_ui_page json
9
- column_indexes = (1..3)
10
+ column_begin = (col_index * 3) + 1
11
+ column_end = column_begin + 2
12
+ column_indexes = (column_begin..column_end)
10
13
 
11
14
  if params[:section_only].present?
12
15
  sleep 1
@@ -24,9 +27,17 @@ else
24
27
 
25
28
  page.table nextPage: next_page, firstSection: ->(section) do
26
29
  section.header cellViews: ->(header) do
30
+ header.button icon: "chevron_left", styleClass: 'icon', onClick: ->(action) do
31
+ action.windows_reload url: json_ui_garage_url(path: 'tables/autoload_as_needed', page: 0, col: col_index - 1)
32
+ end
33
+
27
34
  column_indexes.each do |i|
28
35
  header.label text: "Heading#{i}"
29
36
  end
37
+
38
+ header.button icon: "chevron_right", styleClass: 'icon', onClick: ->(action) do
39
+ action.windows_reload url: json_ui_garage_url(path: 'tables/autoload_as_needed', page: 0, col: col_index + 1)
40
+ end
30
41
  end
31
42
 
32
43
  render "#{@path_prefix}/tables/autoload_section", page: page, page_index: page_index, column_indexes: column_indexes
@@ -14,12 +14,12 @@ json_ui_page json do |page|
14
14
  template.thumbnail title: 'Export/Import', onClick: ->(action) do
15
15
  action.windows_open url: json_ui_garage_url(path: 'tables/export_import')
16
16
  end
17
- template.thumbnail title: 'Autoload All', onClick: ->(action) do
18
- action.windows_open url: json_ui_garage_url(path: 'tables/autoload_all')
19
- end
20
17
  template.thumbnail title: 'Autoload as Needed', onClick: ->(action) do
21
18
  action.windows_open url: json_ui_garage_url(path: 'tables/autoload_as_needed')
22
19
  end
20
+ template.thumbnail title: 'Autoload All', onClick: ->(action) do
21
+ action.windows_open url: json_ui_garage_url(path: 'tables/autoload_all')
22
+ end
23
23
  end
24
24
 
25
25
  end
@@ -20,13 +20,13 @@ json_ui_page json do |page|
20
20
  scroll.spacer height: 6
21
21
  scroll.banners_select width: 'matchParent', icon: 'info', message: 'This is a select banner', buttons: ->(menu) do
22
22
  menu.button text: 'Option1', onClick: ->(action) do
23
- action.dialogs_alert message: 'Option 1'
23
+ action.windows_open url: json_ui_garage_url(path: 'home/blank')
24
24
  end
25
25
  menu.button text: 'Option2', onClick: ->(action) do
26
- action.dialogs_alert message: 'Option 2'
26
+ action.windows_open url: json_ui_garage_url(path: 'home/slow')
27
27
  end
28
28
  menu.button text: 'Option3', onClick: ->(action) do
29
- action.dialogs_alert message: 'Option 3'
29
+ action.dialogs_alert message: 'Alert'
30
30
  end
31
31
  end
32
32
 
@@ -4,19 +4,1447 @@ page = json_ui_page json
4
4
  render "#{@path_prefix}/nav_menu", json: json, page: page
5
5
 
6
6
  page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
7
- # TODO: Scrape all names from https://material.io/resources/icons
8
- icon_names = [
9
- 'info', 'info', 'info', 'info', 'info', 'info', 'info', 'info',
10
- 'info', 'info', 'info', 'info', 'info', 'info', 'info', 'info',
11
- 'info', 'info', 'info', 'info', 'info', 'info', 'info', 'info',
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
+ }
12
1429
  ]
13
- icon_names.each do |icon_name|
14
- scroll.panels_column lg: { cols: 2 }, childViews: ->(column) do
15
- column.panels_horizontal align: 'middle', childViews: ->(horizontal) do
16
- horizontal.icon spec: icon_name
17
- horizontal.spacer width: 6
18
- horizontal.label text: icon_name
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
19
1445
  end
20
1446
  end
1447
+
1448
+ scroll.spacer height: 20
21
1449
  end
22
1450
  end