glib-web 0.5.16 → 0.5.18

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
- 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