katalyst-koi 4.6.0 → 4.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/builds/koi/admin.css +1 -1
  3. data/app/assets/builds/koi/admin.css.map +1 -1
  4. data/app/components/koi/navigation/editor/errors_component.rb +0 -1
  5. data/app/components/koi/tables/cells/attachment_component.rb +60 -0
  6. data/app/components/koi/tables/cells/link_component.rb +43 -0
  7. data/app/components/koi/tables/table_component.rb +54 -5
  8. data/app/controllers/admin/admin_users_controller.rb +1 -5
  9. data/app/controllers/admin/url_rewrites_controller.rb +1 -5
  10. data/app/controllers/concerns/koi/controller/is_admin_controller.rb +1 -0
  11. data/app/helpers/koi/index_actions_helper.rb +1 -1
  12. data/app/views/admin/admin_users/index.html.erb +6 -1
  13. data/app/views/admin/credentials/_credentials.html.erb +3 -3
  14. data/app/views/admin/url_rewrites/index.html.erb +7 -1
  15. data/app/views/layouts/koi/application.html.erb +3 -0
  16. data/config/locales/pagy.en.yml +1 -0
  17. data/lib/generators/koi/admin_controller/templates/controller.rb.tt +1 -5
  18. data/lib/generators/koi/admin_views/admin_views_generator.rb +1 -1
  19. data/lib/generators/koi/admin_views/templates/index.html.erb.tt +16 -1
  20. metadata +23 -19
  21. data/app/assets/builds/koi/nav_items.css +0 -1
  22. data/app/components/koi/index_table_component.rb +0 -26
  23. data/app/components/koi/ordinal_table_component.rb +0 -27
  24. data/app/components/koi/tables/body.rb +0 -228
  25. data/app/components/koi/tables/body_cell_component.rb +0 -21
  26. data/app/components/koi/tables/body_row_component.rb +0 -142
  27. data/app/components/koi/tables/header.rb +0 -63
  28. data/app/components/koi/tables/header_cell_component.rb +0 -38
  29. data/app/components/koi/tables/header_row_component.rb +0 -213
  30. data/app/views/admin/admin_users/_admin.html+row.erb +0 -2
  31. data/app/views/admin/url_rewrites/_url_rewrite.html+row.erb +0 -3
  32. data/lib/generators/koi/admin_views/templates/_record.html+row.erb.tt +0 -7
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: katalyst-koi
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.6.0
4
+ version: 4.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katalyst Interactive
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-04 00:00:00.000000000 Z
11
+ date: 2024-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -150,6 +150,20 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: katalyst-html-attributes
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: katalyst-kpop
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -192,7 +206,7 @@ dependencies:
192
206
  - - ">="
193
207
  - !ruby/object:Gem::Version
194
208
  version: '0'
195
- description:
209
+ description:
196
210
  email:
197
211
  - developers@katalyst.com.au
198
212
  executables: []
@@ -204,7 +218,6 @@ files:
204
218
  - Upgrade.md
205
219
  - app/assets/builds/koi/admin.css
206
220
  - app/assets/builds/koi/admin.css.map
207
- - app/assets/builds/koi/nav_items.css
208
221
  - app/assets/config/koi.js
209
222
  - app/assets/images/koi/application/chevron-right.svg
210
223
  - app/assets/images/koi/application/glyphicons-halflings-white.png
@@ -300,10 +313,8 @@ files:
300
313
  - app/components/koi/header/show_component.rb
301
314
  - app/components/koi/header_component.html.erb
302
315
  - app/components/koi/header_component.rb
303
- - app/components/koi/index_table_component.rb
304
316
  - app/components/koi/navigation/editor/errors_component.html.erb
305
317
  - app/components/koi/navigation/editor/errors_component.rb
306
- - app/components/koi/ordinal_table_component.rb
307
318
  - app/components/koi/summary_list/attachment_component.rb
308
319
  - app/components/koi/summary_list/base.rb
309
320
  - app/components/koi/summary_list/boolean_component.rb
@@ -315,12 +326,8 @@ files:
315
326
  - app/components/koi/summary_list/text_component.rb
316
327
  - app/components/koi/summary_list_component.html.erb
317
328
  - app/components/koi/summary_list_component.rb
318
- - app/components/koi/tables/body.rb
319
- - app/components/koi/tables/body_cell_component.rb
320
- - app/components/koi/tables/body_row_component.rb
321
- - app/components/koi/tables/header.rb
322
- - app/components/koi/tables/header_cell_component.rb
323
- - app/components/koi/tables/header_row_component.rb
329
+ - app/components/koi/tables/cells/attachment_component.rb
330
+ - app/components/koi/tables/cells/link_component.rb
324
331
  - app/components/koi/tables/table_component.rb
325
332
  - app/controllers/admin/admin_users_controller.rb
326
333
  - app/controllers/admin/application_controller.rb
@@ -346,7 +353,6 @@ files:
346
353
  - app/models/application_record.rb
347
354
  - app/models/concerns/koi/model/archivable.rb
348
355
  - app/models/url_rewrite.rb
349
- - app/views/admin/admin_users/_admin.html+row.erb
350
356
  - app/views/admin/admin_users/_fields.html.erb
351
357
  - app/views/admin/admin_users/edit.html.erb
352
358
  - app/views/admin/admin_users/index.html.erb
@@ -365,7 +371,6 @@ files:
365
371
  - app/views/admin/tokens/create.turbo_stream.erb
366
372
  - app/views/admin/tokens/show.html.erb
367
373
  - app/views/admin/url_rewrites/_fields.html.erb
368
- - app/views/admin/url_rewrites/_url_rewrite.html+row.erb
369
374
  - app/views/admin/url_rewrites/edit.html.erb
370
375
  - app/views/admin/url_rewrites/index.html.erb
371
376
  - app/views/admin/url_rewrites/new.html.erb
@@ -424,7 +429,6 @@ files:
424
429
  - lib/generators/koi/admin_views/USAGE
425
430
  - lib/generators/koi/admin_views/admin_views_generator.rb
426
431
  - lib/generators/koi/admin_views/templates/_fields.html.erb.tt
427
- - lib/generators/koi/admin_views/templates/_record.html+row.erb.tt
428
432
  - lib/generators/koi/admin_views/templates/edit.html.erb.tt
429
433
  - lib/generators/koi/admin_views/templates/index.html.erb.tt
430
434
  - lib/generators/koi/admin_views/templates/new.html.erb.tt
@@ -451,7 +455,7 @@ licenses:
451
455
  - MIT
452
456
  metadata:
453
457
  rubygems_mfa_required: 'true'
454
- post_install_message:
458
+ post_install_message:
455
459
  rdoc_options: []
456
460
  require_paths:
457
461
  - lib
@@ -466,8 +470,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
466
470
  - !ruby/object:Gem::Version
467
471
  version: '0'
468
472
  requirements: []
469
- rubygems_version: 3.4.19
470
- signing_key:
473
+ rubygems_version: 3.5.9
474
+ signing_key:
471
475
  specification_version: 4
472
476
  summary: Koi CMS admin framework
473
477
  test_files: []
@@ -1 +0,0 @@
1
- [data-whatinput=mouse] .disable-mouse-outline{outline:0}ul.row,ol.row,.row{margin-left:-16px;margin-right:-16px;margin-top:-16px;margin-bottom:-16px}ul.row:after,ol.row:after,.row:after{content:"";display:table;clear:both}.text-wrap{word-wrap:break-word;overflow-wrap:break-word}.no-wrap{white-space:nowrap}.nested-link{color:#222;text-decoration:none}.nested-link:visited{color:#222}.nested-link:focus{color:#222}.nested-link:hover{color:#222}.nested-link:active{color:#222}.nested-link:hover{text-decoration:none}.nested-link .nested-link--target{color:#ff521f}.nested-link:hover .nested-link--target{text-decoration:underline}.overlay{position:relative}.overlay:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(46,46,46,.5);z-index:1}.overlay .overlay--content{position:relative;z-index:1;color:#fff}html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,code,del,dfn,em,img,q,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,dialog,figure,footer,header,hgroup,nav,section{margin:0;padding:0;border:0;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;box-sizing:border-box}ol,ul{list-style:none;padding:0}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}*{box-sizing:border-box}button{-webkit-appearance:inherit;-webkit-box-align:inherit;background:transparent;border:none;color:inherit;cursor:pointer;display:inline;font-family:inherit;font-size:inherit;font-weight:inherit;font:inherit;height:auto;line-height:inherit;margin:0;padding:0;text-align:inherit;text-transform:inherit;border-radius:0}html,body{height:100%;width:100%}h1,h2,h3,h4,h5,h6{text-rendering:optimizeLegibility}img{-ms-interpolation-mode:bicubic}img,embed,object,video,iframe{max-width:100%}body,.body-type{font-family:"Open Sans",sans-serif;font-style:normal;font-weight:normal;font-size:14px;line-height:1.5}.heading-one{font-family:"Open Sans",sans-serif;font-style:normal;font-weight:bold;font-size:44px;line-height:64px;font-weight:300}.heading-one em{font-family:"Open Sans",sans-serif;font-style:italic;font-weight:bold}.heading-one:first-child{margin-top:0}.heading-one:last-child{margin-bottom:0}@media only screen and (max-width: 480px){.heading-one{font-size:40px;line-height:50px}}.heading-two{font-family:"Open Sans",sans-serif;font-style:normal;font-weight:bold;font-size:28px;line-height:40px}.heading-two em{font-family:"Open Sans",sans-serif;font-style:italic;font-weight:bold}.heading-two:first-child{margin-top:0}.heading-two:last-child{margin-bottom:0}@media only screen and (max-width: 480px){.heading-two{line-height:36px;font-size:26px}}.heading-three{font-family:"Open Sans",sans-serif;font-style:normal;font-weight:bold;font-size:24px;line-height:34px}.heading-three em{font-family:"Open Sans",sans-serif;font-style:italic;font-weight:bold}.heading-three:first-child{margin-top:0}.heading-three:last-child{margin-bottom:0}@media only screen and (max-width: 480px){.heading-three{font-size:20px}}.heading-four{font-family:"Open Sans",sans-serif;font-style:normal;font-weight:bold;font-size:18px;line-height:1.5}.heading-four em{font-family:"Open Sans",sans-serif;font-style:italic;font-weight:bold}.heading-four:first-child{margin-top:0}.heading-four:last-child{margin-bottom:0}.heading-six{text-transform:uppercase;font-size:14px;color:#999}strong,b{font-family:"Open Sans",sans-serif;font-style:normal;font-weight:bold}em,i{font-family:"Open Sans",sans-serif;font-style:italic;font-weight:normal}em b,em strong,i b,i strong,b i,b em,strong i,strong em{font-family:"Open Sans",sans-serif;font-style:italic;font-weight:bold}small{font-family:"Open Sans",sans-serif;font-style:normal;font-weight:normal;font-size:12px;line-height:1}.small{font-size:12px}.grey{color:#999}a,button{text-decoration:none;color:#ff521f}a:hover,button:hover{text-decoration:underline}a:visited,button:visited{color:#ff521f}a:focus,button:focus{color:#ff521f}th{font-family:"Open Sans",sans-serif;font-style:normal;font-weight:bold}body{font-size:14px;line-height:1.5;color:#222;font-family:"Open Sans",sans-serif;font-style:normal;font-weight:normal}a,button{text-decoration:none;color:#ff521f}a:hover,button:hover{text-decoration:underline}a:visited,button:visited{color:#ff521f}a:focus,button:focus{color:#ff521f}.ornament-form [type=text],.ornament-form [type=password],.ornament-form [type=date],.ornament-form [type=datetime],.ornament-form [type=email],.ornament-form [type=number],.ornament-form [type=search],.ornament-form [type=tel],.ornament-form [type=time],.ornament-form [type=url],.ornament-form textarea{font:inherit;line-height:1.5;font-family:"Open Sans",sans-serif;font-style:normal;font-weight:normal}pre.code{border:1px solid #ececec;background:#fff;padding:.5em 1em;overflow:auto;word-wrap:normal;font-family:Consolas,"Liberation Mono",Courier,monospace;border-radius:4px;box-shadow:inset 1px 1px 2px rgba(0,0,0,.1);text-shadow:1px 1px #fff}span.code,code{font-family:Consolas,"Liberation Mono",Courier,monospace;border:1px solid #e1e3e6;background:#f2f4f5;padding:.3em .3em .2em;border-radius:4px;text-shadow:1px 1px #fff;white-space:nowrap}.link-disabled .icon-spinner{display:block;width:17px;height:17px}.link-disabled .icon-spinner path{fill:#ff521f}.svg .grunticon-chevron-double-left-16-white{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%2016%2016%22%20enable-background%3D%22new%200%200%2016%2016%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3Ecircle%2C%20ellipse%2C%20line%2C%20path%2C%20polygon%2C%20polyline%2C%20rect%2C%20text%20%7B%20fill%3A%20white%20!important%3B%20%7D%3C%2Fstyle%3E%3Cpath%20d%3D%22M0%2C8.001c0-0.154%2C0.057-0.289%2C0.17-0.402l6.625-6.625c0.113-0.113%2C0.248-0.17%2C0.402-0.17s0.289%2C0.057%2C0.402%2C0.17L9.08%2C2.456%20c0.111%2C0.113%2C0.17%2C0.247%2C0.17%2C0.402c0%2C0.154-0.059%2C0.288-0.17%2C0.401L4.339%2C8.001l4.741%2C4.741c0.111%2C0.111%2C0.17%2C0.248%2C0.17%2C0.4%20c0%2C0.154-0.059%2C0.289-0.17%2C0.402l-1.481%2C1.48c-0.113%2C0.113-0.248%2C0.17-0.401%2C0.17s-0.288-0.057-0.401-0.17L0.169%2C8.403%20C0.057%2C8.29%2C0%2C8.155%2C0%2C8.001z%22%2F%3E%3Cpath%20d%3D%22M6.75%2C8.001c0-0.154%2C0.057-0.289%2C0.17-0.402l6.625-6.625c0.113-0.113%2C0.248-0.17%2C0.402-0.17s0.289%2C0.057%2C0.402%2C0.17%20l1.48%2C1.482C15.941%2C2.569%2C16%2C2.703%2C16%2C2.858c0%2C0.154-0.059%2C0.288-0.17%2C0.401l-4.741%2C4.742l4.741%2C4.741%20c0.111%2C0.111%2C0.17%2C0.248%2C0.17%2C0.4c0%2C0.154-0.059%2C0.289-0.17%2C0.402l-1.48%2C1.48c-0.113%2C0.113-0.248%2C0.17-0.402%2C0.17%20c-0.152%2C0-0.287-0.057-0.4-0.17L6.919%2C8.403C6.807%2C8.29%2C6.75%2C8.155%2C6.75%2C8.001z%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-chevron-double-left-16{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%2016%2016%22%20enable-background%3D%22new%200%200%2016%2016%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M0%2C8.001c0-0.154%2C0.057-0.289%2C0.17-0.402l6.625-6.625c0.113-0.113%2C0.248-0.17%2C0.402-0.17s0.289%2C0.057%2C0.402%2C0.17L9.08%2C2.456%20c0.111%2C0.113%2C0.17%2C0.247%2C0.17%2C0.402c0%2C0.154-0.059%2C0.288-0.17%2C0.401L4.339%2C8.001l4.741%2C4.741c0.111%2C0.111%2C0.17%2C0.248%2C0.17%2C0.4%20c0%2C0.154-0.059%2C0.289-0.17%2C0.402l-1.481%2C1.48c-0.113%2C0.113-0.248%2C0.17-0.401%2C0.17s-0.288-0.057-0.401-0.17L0.169%2C8.403%20C0.057%2C8.29%2C0%2C8.155%2C0%2C8.001z%22%2F%3E%3Cpath%20d%3D%22M6.75%2C8.001c0-0.154%2C0.057-0.289%2C0.17-0.402l6.625-6.625c0.113-0.113%2C0.248-0.17%2C0.402-0.17s0.289%2C0.057%2C0.402%2C0.17%20l1.48%2C1.482C15.941%2C2.569%2C16%2C2.703%2C16%2C2.858c0%2C0.154-0.059%2C0.288-0.17%2C0.401l-4.741%2C4.742l4.741%2C4.741%20c0.111%2C0.111%2C0.17%2C0.248%2C0.17%2C0.4c0%2C0.154-0.059%2C0.289-0.17%2C0.402l-1.48%2C1.48c-0.113%2C0.113-0.248%2C0.17-0.402%2C0.17%20c-0.152%2C0-0.287-0.057-0.4-0.17L6.919%2C8.403C6.807%2C8.29%2C6.75%2C8.155%2C6.75%2C8.001z%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-chevron-double-right-16-white{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%2016%2016%22%20enable-background%3D%22new%200%200%2016%2016%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3Ecircle%2C%20ellipse%2C%20line%2C%20path%2C%20polygon%2C%20polyline%2C%20rect%2C%20text%20%7B%20fill%3A%20white%20!important%3B%20%7D%3C%2Fstyle%3E%3Cpath%20d%3D%22M0%2C13.143c0-0.153%2C0.057-0.289%2C0.17-0.401L4.911%2C8L0.17%2C3.259C0.057%2C3.146%2C0%2C3.011%2C0%2C2.857c0-0.155%2C0.057-0.289%2C0.17-0.402%20l1.482-1.482c0.113-0.113%2C0.247-0.17%2C0.402-0.17c0.155%2C0%2C0.289%2C0.057%2C0.402%2C0.17L9.08%2C7.598C9.193%2C7.711%2C9.252%2C7.846%2C9.252%2C8%20S9.193%2C8.289%2C9.08%2C8.402l-6.625%2C6.625c-0.113%2C0.113-0.247%2C0.17-0.402%2C0.17c-0.155%2C0-0.289-0.057-0.402-0.17L0.17%2C13.545%20C0.057%2C13.432%2C0%2C13.297%2C0%2C13.143z%22%2F%3E%3Cpath%20d%3D%22M6.748%2C13.143c0-0.153%2C0.057-0.289%2C0.17-0.401L11.658%2C8l-4.74-4.741c-0.113-0.113-0.17-0.248-0.17-0.402%20c0-0.155%2C0.057-0.289%2C0.17-0.402L8.4%2C0.973c0.112-0.113%2C0.246-0.17%2C0.401-0.17s0.289%2C0.057%2C0.401%2C0.17l6.625%2C6.625%20C15.941%2C7.711%2C16%2C7.846%2C16%2C8s-0.059%2C0.289-0.172%2C0.402l-6.625%2C6.625c-0.112%2C0.113-0.246%2C0.17-0.401%2C0.17s-0.289-0.057-0.401-0.17%20l-1.482-1.482C6.805%2C13.432%2C6.748%2C13.297%2C6.748%2C13.143z%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-chevron-double-right-16{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%2016%2016%22%20enable-background%3D%22new%200%200%2016%2016%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M0%2C13.143c0-0.153%2C0.057-0.289%2C0.17-0.401L4.911%2C8L0.17%2C3.259C0.057%2C3.146%2C0%2C3.011%2C0%2C2.857c0-0.155%2C0.057-0.289%2C0.17-0.402%20l1.482-1.482c0.113-0.113%2C0.247-0.17%2C0.402-0.17c0.155%2C0%2C0.289%2C0.057%2C0.402%2C0.17L9.08%2C7.598C9.193%2C7.711%2C9.252%2C7.846%2C9.252%2C8%20S9.193%2C8.289%2C9.08%2C8.402l-6.625%2C6.625c-0.113%2C0.113-0.247%2C0.17-0.402%2C0.17c-0.155%2C0-0.289-0.057-0.402-0.17L0.17%2C13.545%20C0.057%2C13.432%2C0%2C13.297%2C0%2C13.143z%22%2F%3E%3Cpath%20d%3D%22M6.748%2C13.143c0-0.153%2C0.057-0.289%2C0.17-0.401L11.658%2C8l-4.74-4.741c-0.113-0.113-0.17-0.248-0.17-0.402%20c0-0.155%2C0.057-0.289%2C0.17-0.402L8.4%2C0.973c0.112-0.113%2C0.246-0.17%2C0.401-0.17s0.289%2C0.057%2C0.401%2C0.17l6.625%2C6.625%20C15.941%2C7.711%2C16%2C7.846%2C16%2C8s-0.059%2C0.289-0.172%2C0.402l-6.625%2C6.625c-0.112%2C0.113-0.246%2C0.17-0.401%2C0.17s-0.289-0.057-0.401-0.17%20l-1.482-1.482C6.805%2C13.432%2C6.748%2C13.297%2C6.748%2C13.143z%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-chevron-left-16-white{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%2016%2016%22%20enable-background%3D%22new%200%200%2016%2016%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3Ecircle%2C%20ellipse%2C%20line%2C%20path%2C%20polygon%2C%20polyline%2C%20rect%2C%20text%20%7B%20fill%3A%20white%20!important%3B%20%7D%3C%2Fstyle%3E%3Cpath%20d%3D%22M2.604%2C8.001c0-0.154%2C0.057-0.289%2C0.17-0.402l6.625-6.625c0.113-0.113%2C0.248-0.17%2C0.402-0.17s0.289%2C0.057%2C0.402%2C0.17%20l1.48%2C1.482c0.113%2C0.113%2C0.17%2C0.247%2C0.17%2C0.402c0%2C0.154-0.057%2C0.288-0.17%2C0.401l-4.74%2C4.742l4.741%2C4.741%20c0.112%2C0.112%2C0.17%2C0.248%2C0.17%2C0.401c0%2C0.154-0.058%2C0.289-0.17%2C0.402l-1.481%2C1.48c-0.113%2C0.113-0.248%2C0.17-0.401%2C0.17%20c-0.154%2C0-0.289-0.057-0.402-0.17L2.773%2C8.403C2.661%2C8.29%2C2.604%2C8.155%2C2.604%2C8.001z%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-chevron-left-16{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%2016%2016%22%20enable-background%3D%22new%200%200%2016%2016%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M2.604%2C8.001c0-0.154%2C0.057-0.289%2C0.17-0.402l6.625-6.625c0.113-0.113%2C0.248-0.17%2C0.402-0.17s0.289%2C0.057%2C0.402%2C0.17%20l1.48%2C1.482c0.113%2C0.113%2C0.17%2C0.247%2C0.17%2C0.402c0%2C0.154-0.057%2C0.288-0.17%2C0.401l-4.74%2C4.742l4.741%2C4.741%20c0.112%2C0.112%2C0.17%2C0.248%2C0.17%2C0.401c0%2C0.154-0.058%2C0.289-0.17%2C0.402l-1.481%2C1.48c-0.113%2C0.113-0.248%2C0.17-0.401%2C0.17%20c-0.154%2C0-0.289-0.057-0.402-0.17L2.773%2C8.403C2.661%2C8.29%2C2.604%2C8.155%2C2.604%2C8.001z%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-chevron-left-32-white{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20width%3D%2223%22%20height%3D%2232%22%20viewBox%3D%220%200%2023%2032%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3Ecircle%2C%20ellipse%2C%20line%2C%20path%2C%20polygon%2C%20polyline%2C%20rect%2C%20text%20%7B%20fill%3A%20white%20!important%3B%20%7D%3C%2Fstyle%3E%3Cg%3E%3C%2Fg%3E%20%3Cpath%20d%3D%22M2.75%2014.857q0-0.464%200.339-0.804l13.25-13.25q0.339-0.339%200.804-0.339t0.804%200.339l2.964%202.964q0.339%200.339%200.339%200.804t-0.339%200.804l-9.482%209.482%209.482%209.482q0.339%200.339%200.339%200.804t-0.339%200.804l-2.964%202.964q-0.339%200.339-0.804%200.339t-0.804-0.339l-13.25-13.25q-0.339-0.339-0.339-0.804z%22%20fill%3D%22%23000000%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-chevron-left-32{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20width%3D%2223%22%20height%3D%2232%22%20viewBox%3D%220%200%2023%2032%22%3E%3Cg%3E%3C%2Fg%3E%20%3Cpath%20d%3D%22M2.75%2014.857q0-0.464%200.339-0.804l13.25-13.25q0.339-0.339%200.804-0.339t0.804%200.339l2.964%202.964q0.339%200.339%200.339%200.804t-0.339%200.804l-9.482%209.482%209.482%209.482q0.339%200.339%200.339%200.804t-0.339%200.804l-2.964%202.964q-0.339%200.339-0.804%200.339t-0.804-0.339l-13.25-13.25q-0.339-0.339-0.339-0.804z%22%20fill%3D%22%23000000%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-chevron-right-16-white{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%22-2.5%200%2016%2016%22%20enable-background%3D%22new%20-2.5%200%2016%2016%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3Ecircle%2C%20ellipse%2C%20line%2C%20path%2C%20polygon%2C%20polyline%2C%20rect%2C%20text%20%7B%20fill%3A%20white%20!important%3B%20%7D%3C%2Fstyle%3E%3Cpath%20d%3D%22M1.137%2C13.143c0-0.154%2C0.057-0.289%2C0.17-0.402L6.048%2C8L1.307%2C3.259c-0.113-0.113-0.17-0.248-0.17-0.402%20c0-0.155%2C0.057-0.289%2C0.17-0.402l1.482-1.482c0.113-0.113%2C0.247-0.17%2C0.402-0.17s0.289%2C0.057%2C0.402%2C0.17l6.625%2C6.625%20c0.113%2C0.113%2C0.17%2C0.248%2C0.17%2C0.402s-0.057%2C0.289-0.17%2C0.402l-6.625%2C6.625c-0.113%2C0.113-0.247%2C0.17-0.402%2C0.17%20s-0.289-0.057-0.402-0.17l-1.482-1.482C1.194%2C13.432%2C1.137%2C13.297%2C1.137%2C13.143z%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-chevron-right-16{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%22-2.5%200%2016%2016%22%20enable-background%3D%22new%20-2.5%200%2016%2016%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M1.137%2C13.143c0-0.154%2C0.057-0.289%2C0.17-0.402L6.048%2C8L1.307%2C3.259c-0.113-0.113-0.17-0.248-0.17-0.402%20c0-0.155%2C0.057-0.289%2C0.17-0.402l1.482-1.482c0.113-0.113%2C0.247-0.17%2C0.402-0.17s0.289%2C0.057%2C0.402%2C0.17l6.625%2C6.625%20c0.113%2C0.113%2C0.17%2C0.248%2C0.17%2C0.402s-0.057%2C0.289-0.17%2C0.402l-6.625%2C6.625c-0.113%2C0.113-0.247%2C0.17-0.402%2C0.17%20s-0.289-0.057-0.402-0.17l-1.482-1.482C1.194%2C13.432%2C1.137%2C13.297%2C1.137%2C13.143z%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-chevron-right-32-white{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20width%3D%2223%22%20height%3D%2232%22%20viewBox%3D%220%200%2023%2032%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3Ecircle%2C%20ellipse%2C%20line%2C%20path%2C%20polygon%2C%20polyline%2C%20rect%2C%20text%20%7B%20fill%3A%20white%20!important%3B%20%7D%3C%2Fstyle%3E%3Cg%3E%3C%2Fg%3E%20%3Cpath%20d%3D%22M1.607%2025.143q0-0.464%200.339-0.804l9.482-9.482-9.482-9.482q-0.339-0.339-0.339-0.804t0.339-0.804l2.964-2.964q0.339-0.339%200.804-0.339t0.804%200.339l13.25%2013.25q0.339%200.339%200.339%200.804t-0.339%200.804l-13.25%2013.25q-0.339%200.339-0.804%200.339t-0.804-0.339l-2.964-2.964q-0.339-0.339-0.339-0.804z%22%20fill%3D%22%23000000%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-chevron-right-32{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20width%3D%2223%22%20height%3D%2232%22%20viewBox%3D%220%200%2023%2032%22%3E%3Cg%3E%3C%2Fg%3E%20%3Cpath%20d%3D%22M1.607%2025.143q0-0.464%200.339-0.804l9.482-9.482-9.482-9.482q-0.339-0.339-0.339-0.804t0.339-0.804l2.964-2.964q0.339-0.339%200.804-0.339t0.804%200.339l13.25%2013.25q0.339%200.339%200.339%200.804t-0.339%200.804l-13.25%2013.25q-0.339%200.339-0.804%200.339t-0.804-0.339l-2.964-2.964q-0.339-0.339-0.339-0.804z%22%20fill%3D%22%23000000%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-close-16-white{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3Ecircle%2C%20ellipse%2C%20line%2C%20path%2C%20polygon%2C%20polyline%2C%20rect%2C%20text%20%7B%20fill%3A%20white%20!important%3B%20%7D%3C%2Fstyle%3E%3Cdefs%3E%3Cg%20id%3D%22icon-close%22%3E%20%3Cpath%20class%3D%22path1%22%20d%3D%22M15.854%2012.854c-0-0-0-0-0-0l-4.854-4.854%204.854-4.854c0-0%200-0%200-0%200.052-0.052%200.090-0.113%200.114-0.178%200.066-0.178%200.028-0.386-0.114-0.529l-2.293-2.293c-0.143-0.143-0.351-0.181-0.529-0.114-0.065%200.024-0.126%200.062-0.178%200.114%200%200-0%200-0%200l-4.854%204.854-4.854-4.854c-0-0-0-0-0-0-0.052-0.052-0.113-0.090-0.178-0.114-0.178-0.066-0.386-0.029-0.529%200.114l-2.293%202.293c-0.143%200.143-0.181%200.351-0.114%200.529%200.024%200.065%200.062%200.126%200.114%200.178%200%200%200%200%200%200l4.854%204.854-4.854%204.854c-0%200-0%200-0%200-0.052%200.052-0.090%200.113-0.114%200.178-0.066%200.178-0.029%200.386%200.114%200.529l2.293%202.293c0.143%200.143%200.351%200.181%200.529%200.114%200.065-0.024%200.126-0.062%200.178-0.114%200-0%200-0%200-0l4.854-4.854%204.854%204.854c0%200%200%200%200%200%200.052%200.052%200.113%200.090%200.178%200.114%200.178%200.066%200.386%200.029%200.529-0.114l2.293-2.293c0.143-0.143%200.181-0.351%200.114-0.529-0.024-0.065-0.062-0.126-0.114-0.178z%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fdefs%3E%3Cg%20fill%3D%22%23000000%22%3E%20%3Cuse%20xlink%3Ahref%3D%22%23icon-close%22%20transform%3D%22translate(0%200)%22%3E%3C%2Fuse%3E%3C%2Fg%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-close-16{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cdefs%3E%3Cg%20id%3D%22icon-close%22%3E%20%3Cpath%20class%3D%22path1%22%20d%3D%22M15.854%2012.854c-0-0-0-0-0-0l-4.854-4.854%204.854-4.854c0-0%200-0%200-0%200.052-0.052%200.090-0.113%200.114-0.178%200.066-0.178%200.028-0.386-0.114-0.529l-2.293-2.293c-0.143-0.143-0.351-0.181-0.529-0.114-0.065%200.024-0.126%200.062-0.178%200.114%200%200-0%200-0%200l-4.854%204.854-4.854-4.854c-0-0-0-0-0-0-0.052-0.052-0.113-0.090-0.178-0.114-0.178-0.066-0.386-0.029-0.529%200.114l-2.293%202.293c-0.143%200.143-0.181%200.351-0.114%200.529%200.024%200.065%200.062%200.126%200.114%200.178%200%200%200%200%200%200l4.854%204.854-4.854%204.854c-0%200-0%200-0%200-0.052%200.052-0.090%200.113-0.114%200.178-0.066%200.178-0.029%200.386%200.114%200.529l2.293%202.293c0.143%200.143%200.351%200.181%200.529%200.114%200.065-0.024%200.126-0.062%200.178-0.114%200-0%200-0%200-0l4.854-4.854%204.854%204.854c0%200%200%200%200%200%200.052%200.052%200.113%200.090%200.178%200.114%200.178%200.066%200.386%200.029%200.529-0.114l2.293-2.293c0.143-0.143%200.181-0.351%200.114-0.529-0.024-0.065-0.062-0.126-0.114-0.178z%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fdefs%3E%3Cg%20fill%3D%22%23000000%22%3E%20%3Cuse%20xlink%3Ahref%3D%22%23icon-close%22%20transform%3D%22translate(0%200)%22%3E%3C%2Fuse%3E%3C%2Fg%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-menu-white{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2224px%22%20height%3D%2224px%22%20viewBox%3D%229.959%209.958%2024%2024%22%20enable-background%3D%22new%209.959%209.958%2024%2024%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3Ecircle%2C%20ellipse%2C%20line%2C%20path%2C%20polygon%2C%20polyline%2C%20rect%2C%20text%20%7B%20fill%3A%20white%20!important%3B%20%7D%3C%2Fstyle%3E%3Cpath%20d%3D%22M32%2C18H12c-1.104%2C0-2-0.896-2-2s0.896-2%2C2-2h20c1.104%2C0%2C2%2C0.896%2C2%2C2S33.104%2C18%2C32%2C18z%22%2F%3E%3Cpath%20d%3D%22M32%2C24H12c-1.104%2C0-2-0.896-2-2c0-1.104%2C0.896-2%2C2-2h20c1.104%2C0%2C2%2C0.896%2C2%2C2C34%2C23.104%2C33.104%2C24%2C32%2C24z%22%2F%3E%3Cpath%20d%3D%22M32%2C30H12c-1.104%2C0-2-0.896-2-2s0.896-2%2C2-2h20c1.104%2C0%2C2%2C0.896%2C2%2C2S33.104%2C30%2C32%2C30z%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-menu{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2224px%22%20height%3D%2224px%22%20viewBox%3D%229.959%209.958%2024%2024%22%20enable-background%3D%22new%209.959%209.958%2024%2024%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M32%2C18H12c-1.104%2C0-2-0.896-2-2s0.896-2%2C2-2h20c1.104%2C0%2C2%2C0.896%2C2%2C2S33.104%2C18%2C32%2C18z%22%2F%3E%3Cpath%20d%3D%22M32%2C24H12c-1.104%2C0-2-0.896-2-2c0-1.104%2C0.896-2%2C2-2h20c1.104%2C0%2C2%2C0.896%2C2%2C2C34%2C23.104%2C33.104%2C24%2C32%2C24z%22%2F%3E%3Cpath%20d%3D%22M32%2C30H12c-1.104%2C0-2-0.896-2-2s0.896-2%2C2-2h20c1.104%2C0%2C2%2C0.896%2C2%2C2S33.104%2C30%2C32%2C30z%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-plus-16-white{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%22-1.5%200%2016%2016%22%20enable-background%3D%22new%20-1.5%200%2016%2016%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3Ecircle%2C%20ellipse%2C%20line%2C%20path%2C%20polygon%2C%20polyline%2C%20rect%2C%20text%20%7B%20fill%3A%20white%20!important%3B%20%7D%3C%2Fstyle%3E%3Cg%3E%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23449FDB%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%220%22%20y2%3D%220%22%2F%3E%3C%2Fg%3E%3Cpath%20d%3D%22M0%2C8.857V7.143c0-0.238%2C0.083-0.44%2C0.25-0.607c0.167-0.167%2C0.369-0.25%2C0.607-0.25h3.714V2.572%20c0-0.238%2C0.083-0.44%2C0.25-0.607c0.167-0.167%2C0.369-0.25%2C0.607-0.25h1.714c0.237%2C0%2C0.439%2C0.083%2C0.606%2C0.25s0.25%2C0.369%2C0.25%2C0.607%20v3.714h3.714c0.238%2C0%2C0.44%2C0.083%2C0.607%2C0.25c0.166%2C0.167%2C0.25%2C0.369%2C0.25%2C0.607v1.715c0%2C0.236-0.084%2C0.439-0.25%2C0.605%20c-0.167%2C0.168-0.369%2C0.25-0.607%2C0.25H7.999v3.715c0%2C0.238-0.083%2C0.439-0.25%2C0.607c-0.167%2C0.166-0.369%2C0.25-0.606%2C0.25H5.428%20c-0.238%2C0-0.44-0.084-0.607-0.25c-0.167-0.168-0.25-0.369-0.25-0.607V9.713H0.857c-0.238%2C0-0.44-0.082-0.607-0.25%20C0.083%2C9.297%2C0%2C9.094%2C0%2C8.857z%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-plus-16{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%22-1.5%200%2016%2016%22%20enable-background%3D%22new%20-1.5%200%2016%2016%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%3E%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23449FDB%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%220%22%20y2%3D%220%22%2F%3E%3C%2Fg%3E%3Cpath%20d%3D%22M0%2C8.857V7.143c0-0.238%2C0.083-0.44%2C0.25-0.607c0.167-0.167%2C0.369-0.25%2C0.607-0.25h3.714V2.572%20c0-0.238%2C0.083-0.44%2C0.25-0.607c0.167-0.167%2C0.369-0.25%2C0.607-0.25h1.714c0.237%2C0%2C0.439%2C0.083%2C0.606%2C0.25s0.25%2C0.369%2C0.25%2C0.607%20v3.714h3.714c0.238%2C0%2C0.44%2C0.083%2C0.607%2C0.25c0.166%2C0.167%2C0.25%2C0.369%2C0.25%2C0.607v1.715c0%2C0.236-0.084%2C0.439-0.25%2C0.605%20c-0.167%2C0.168-0.369%2C0.25-0.607%2C0.25H7.999v3.715c0%2C0.238-0.083%2C0.439-0.25%2C0.607c-0.167%2C0.166-0.369%2C0.25-0.606%2C0.25H5.428%20c-0.238%2C0-0.44-0.084-0.607-0.25c-0.167-0.168-0.25-0.369-0.25-0.607V9.713H0.857c-0.238%2C0-0.44-0.082-0.607-0.25%20C0.083%2C9.297%2C0%2C9.094%2C0%2C8.857z%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-search-16-white{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%228%208%2016%2016%22%20enable-background%3D%22new%208%208%2016%2016%22%20xml%3Aspace%3D%22preserve%22%3E%3Cstyle%20type%3D%22text%2Fcss%22%3Ecircle%2C%20ellipse%2C%20line%2C%20path%2C%20polygon%2C%20polyline%2C%20rect%2C%20text%20%7B%20fill%3A%20white%20!important%3B%20%7D%3C%2Fstyle%3E%3Cg%20id%3D%22icomoon-ignore%22%3E%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23449FDB%22%20x1%3D%228%22%20y1%3D%228%22%20x2%3D%228%22%20y2%3D%228%22%2F%3E%3C%2Fg%3E%3Cpath%20d%3D%22M23.504%2C21.615l-3.79-3.224c-0.392-0.353-0.811-0.515-1.149-0.499c0.895-1.048%2C1.435-2.407%2C1.435-3.893c0-3.313-2.687-6-6-6%20c-3.313%2C0-6%2C2.687-6%2C6c0%2C3.313%2C2.687%2C6%2C6%2C6c1.486%2C0%2C2.845-0.54%2C3.893-1.435c-0.016%2C0.339%2C0.146%2C0.758%2C0.499%2C1.149l3.224%2C3.79%20c0.552%2C0.612%2C1.454%2C0.664%2C2.004%2C0.115C24.168%2C23.069%2C24.116%2C22.167%2C23.504%2C21.615z%20M14%2C18c-2.209%2C0-4-1.792-4-4c0-2.209%2C1.791-4%2C4-4%20c2.208%2C0%2C4%2C1.791%2C4%2C4C18%2C16.208%2C16.208%2C18%2C14%2C18z%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.svg .grunticon-search-16{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%228%208%2016%2016%22%20enable-background%3D%22new%208%208%2016%2016%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22icomoon-ignore%22%3E%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23449FDB%22%20x1%3D%228%22%20y1%3D%228%22%20x2%3D%228%22%20y2%3D%228%22%2F%3E%3C%2Fg%3E%3Cpath%20d%3D%22M23.504%2C21.615l-3.79-3.224c-0.392-0.353-0.811-0.515-1.149-0.499c0.895-1.048%2C1.435-2.407%2C1.435-3.893c0-3.313-2.687-6-6-6%20c-3.313%2C0-6%2C2.687-6%2C6c0%2C3.313%2C2.687%2C6%2C6%2C6c1.486%2C0%2C2.845-0.54%2C3.893-1.435c-0.016%2C0.339%2C0.146%2C0.758%2C0.499%2C1.149l3.224%2C3.79%20c0.552%2C0.612%2C1.454%2C0.664%2C2.004%2C0.115C24.168%2C23.069%2C24.116%2C22.167%2C23.504%2C21.615z%20M14%2C18c-2.209%2C0-4-1.792-4-4c0-2.209%2C1.791-4%2C4-4%20c2.208%2C0%2C4%2C1.791%2C4%2C4C18%2C16.208%2C16.208%2C18%2C14%2C18z%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat}.no-svg .grunticon-chevron-double-left-16-white{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAANtJREFUOI3FkUFKA0EURMuARNAYIqIgJHoE8ahivIiK3kADwRsoXiC5Qb1yM8Fh7J5x599Wv0dTJVUOGAMXpSzJKTCpsUpyYPvF9ha46WRXtr9svwMnVTjN2d4mWbTh/Ny6F24Er0mOCnBs3w7CwHEFvkuy98+wJNl+LsHA+SAsaSTJtTUlUd26U95TofkpcGn7c+gXAsYFyVuSaZJFQbKsSR57JB+d7D7J6C+SFTCpSJa/OmkkD61HG2DeZPO2xPaqWOxOYnuT5LqT7STrJLO+dfaBs0o2Aw4l6Rt9KGPFPHQltAAAAABJRU5ErkJggg==");background-repeat:no-repeat}.no-svg .grunticon-chevron-double-left-16{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAMFJREFUOI3F0ttpAkEYQOFPQRTiBSVEELyUIClVYhoxIekgCmIHig1oB7p5cAUdZnZ984d5OnMOw8+QnjoGCfaKVoGrgV8c8R6wCfbYoFckZ/k5YhTIV7YukzP8oRmRM8wekdsJ+QOV58vwk5D7j8hVnMQnwznB7qaB78grOhhjV/YKLr8ujCzzyCgSmaciXwWRbcA+8xWURlYu/z4Wmcd2Usfi5tIBw5wNg8gqFriNHDAN2DWyRjcVgBreEqyLF/gHGMxsEG3zf6UAAAAASUVORK5CYII=");background-repeat:no-repeat}.no-svg .grunticon-chevron-double-right-16-white{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAANdJREFUOI3dkk1Kg0EQRPsLIW40iX+4kGDwCAGvqqiHEHMLE5VkHzxCyAGsem4mMIwzZm/vhuK9GuiOiAjbQ9vnURnb18CglkVEBHAhaS3py/ZNAd8BO0lz20dVgaQVaXIJcAvssqwukXRPNnuJ7RNJb0X2WwL0JD3UJMD4/0guG5LXXmUxXfF213U0su+y/bFo2NiepPZFkb2wP7AEPzXgU0nLQ/BzCwbem3A6pFbz6CCcBB8lnH42lbT9E46IsH0m6TOHs2wmaduEsw0cA+NaZvsK6LfYH5zmY8Gei428AAAAAElFTkSuQmCC");background-repeat:no-repeat}.no-svg .grunticon-chevron-double-right-16{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAALlJREFUOI3d0sFKQkEYhuGng9RGK61oEVF0CUG3mlgXIXoXlonuw0sQL0CqhXPgMMx/bO0Hsxi+/31/GIZ9znGlnDucBh24xgprPGTdC7aY4iwSLPGbTlPylOC6CyWvjaGmpIdZ1hUlFYaB5PJ4JDeBZFLlBpxk9580XOp2+fZRtuEb92n7R9aNNT5YhbcA7uPzEPzeAs/bYC2bL/4Dw1cBhkdsDsEwwCKD6zwnSQjX6dq/dCm36ETgH/IJbAy9wAGJAAAAAElFTkSuQmCC");background-repeat:no-repeat}.no-svg .grunticon-chevron-left-16-white{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAIBJREFUOI3dkzEKg0AQRVcRPUIKz2Aj5FSi0SMJ9oEcTHKB/38ai3VZyeh2TvvnvRkYxjlDkawllZbeGPyU9AXwIVldgrUVgOUyLEkkuxS4T4GHFPhlhZsIPP7j8r2DDPLMNN0ztADWYIvpXhLbOY8kAOZTAl8C4J3ykQ9JRSz7AT+oHA9w5liSAAAAAElFTkSuQmCC");background-repeat:no-repeat}.no-svg .grunticon-chevron-left-16{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAHFJREFUOI1jYCAOSDMwMLARqRYDmDIwMHxgYGDYxMDAwE6u5v9QvIQSzf8ZGBiyKdGcS4nmPEo05xOrWReL5gJCmpiQ2P+gGBkwEms7DBgxMDC8Q3NF4fAyhOjoxGXIQlINQDZkPQMFOVKcgYGBBZsEAAh0NnGuq+AnAAAAAElFTkSuQmCC");background-repeat:no-repeat}.no-svg .grunticon-chevron-left-32-white{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAgCAYAAAD5VeO1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAK1JREFUSInt1L0NwjAYhOFPIFEwQHqqIFIzBwtQMQIjsQY/BeNEMMLd0WDJsiAhsS0FyVdbz/spRcwiR3JH8ihpHmuF8AEAJQnAKVnAh92SBD7BQWCWHHYjuc0CA7hJWuSClznga4EdfPk7+DwpePMDfB8C+/+Ap5k9et6vJa0GXe1d3wBoe65vSTYlUAIlwCpLAABI1qPwrsAb3o+GvwWSwWEgOewFqqhvPMm9ALmIDpzg3fqrAAAAAElFTkSuQmCC");background-repeat:no-repeat}.no-svg .grunticon-chevron-left-32{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAgCAYAAAD5VeO1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAKNJREFUSInt1DEOgjAUgOE/mjB4gO5OEJ09Bxdw8ggeiWsoDByH6BEKLDYpRhHtewmGvuRtzfc3HQrhkwNnYC1gDeYEtEAHFJIBH3YrEngF+4GVBuz2oAVXQKIFbzTgMsJur38HX2YF7ybA9Tew/wfcgduH8xmwnX7f4eyBhvHbN49zMRADSw8YrYAF0l/xsYAFjiHwu4AY/BwQh90YAt94ftMDFd/dWwh7aPEAAAAASUVORK5CYII=");background-repeat:no-repeat}.no-svg .grunticon-chevron-right-16-white{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAHpJREFUOI3dkUEOgkAQBNFfiOIr8AvGB5Jw4GfoP+BAdXvZw4aQsIw3+zpT1ZlMVW3E9t32eWu2G0kvYAaGwxJJD2B2ymGJpAswOktEcv1/SZfvRH69lLbfgPeqvS86IcGfKNz8AtdhOAlaYArBmeQJTCE4k9S2TyW7Xx60NbS6e13JAAAAAElFTkSuQmCC");background-repeat:no-repeat}.no-svg .grunticon-chevron-right-16{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAG5JREFUOI3dkUEOQDAQRR+3UOUUXEEcUGLRm+EeLCRspkkjRE13fjKr+e/NYuA+NZA/7F7TAxvgNJJW4EPms6QApkCgkpT/lwxhQfPrPbZogflyfYw9aoFFC1cpsEmBARpg1cI+nUhUsI8BspjiCRhLNW38Or7KAAAAAElFTkSuQmCC");background-repeat:no-repeat}.no-svg .grunticon-chevron-right-32-white{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAgCAYAAAD5VeO1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAALlJREFUSIntkzEKAjEURJNUwm4ppNA7qKWlCB7Dq+jVPIRrI1jbi2IxM1YBCeK6+BcUMm1+3hs+fOeySKpJbkjO87evIqkGsJMkAFeSS3NwiomAZJWDzQQk16/AJgJJQwBNbwKSsQiKoAgYARxbBBeSVfoTOvAnzrlRy8zJe3/v2noF4NbSuiEZC7iAfxg86wOcLnQcQhi8kR+894sQwrlT6xRJW7NVfCIwA+cCAHtT8JNgKqk2B/9NHvQO6rojNdesAAAAAElFTkSuQmCC");background-repeat:no-repeat}.no-svg .grunticon-chevron-right-32{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAgCAYAAAD5VeO1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAJtJREFUSInt1rEJwkAAhtGHlqYUUjiEOoNg5wruYedqDmEqwcYRRNFGiyONJobIHQjeD6kS3pdrQobeV2CDO04N979egR0euGCRAq6vKIFRAxwtsG6BowTGqFIGyhzIgRxQ4tAROAufEjDogU8x6XjmiFsPEyxx9fmtK+F0Gc7wr8LzVDCsUsH1tqngtkA0+DWwjw3Xmwm/d3+6JxDG3vQbprkCAAAAAElFTkSuQmCC");background-repeat:no-repeat}.no-svg .grunticon-close-16-white{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAALJJREFUOI2lk1EOgjAQBbdeweBlRUG9HiEC8Thv6g81TS1Lou+3b6ZttjUzM+AkaQGuthNJD0kT0FgGv+IaTyLpkXqSZqAxSUssAlw8OJOMBnTlwippPXjtnFPhtiVx4LY84r1W3IC/rugetYD9SXkSoCv7B9dWJIQQft49S/8PXJd4o3LE/S6cbVAdMdCZpMmDM0ntsQ0GNJJmD06JMfapJ+kJHM3MkmT8vG0n698ZEvwGPXZwRP8Dfi0AAAAASUVORK5CYII=");background-repeat:no-repeat}.no-svg .grunticon-close-16{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAKJJREFUOI2lk10KwjAQhD+9QmkvWzXRXq+Itnie+JAuxLI/QgfmJTszm7BZqBiAFbgRYwLeQC8HA/ABykYvZGp0i4SszaHwGpiFT4CkFApwCcwFGEVwd0Isc9sAgIch1Kg90b1qy3BSXkjai89R2g6nI92F+YjZDPFGZdXyP2aBNeIEdTHCT4L+2WaoC7EEZkFudC+gk0JPXYxRtf0ibZ07gC+M2ob5DsLDegAAAABJRU5ErkJggg==");background-repeat:no-repeat}.no-svg .grunticon-menu-white{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAI9JREFUSIntkjEOAQEUBec/whFEIy7DZawLcTjRi02Ukn1fIwqKbb4Vyc4BZpqBkV8TtjeZeQCWxe6LpCa6rjtJWhfLAbDdCph+Q/5kIkl729dqs+1bROwCIDMDmBc37hHhYucn40V9jBf1E7a3mXkEFsXu10VnSatiOTDURRHR2G6rze8XCZgVN4a56P95AKK3Wd27OCNGAAAAAElFTkSuQmCC");background-repeat:no-repeat}.no-svg .grunticon-menu{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAHtJREFUSInt0jEKwkAQRuFvY9AjhBxIa+09gifSw4X0GrBNoTYiikWaWSWwD6b95xWPwr9JWOOINnj7jAN0uGe6oUIdbP7OAra4ZLC/Yp+enxJWwfYjbsGb35SKpigVTZOwwQlN8Parot7cK9phyGD/UVGFZbD9byqaPw/Gy5ed6pfkOgAAAABJRU5ErkJggg==");background-repeat:no-repeat}.no-svg .grunticon-navicon-16-white{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAJZJREFUOI3FkrENwgAMBM8OA4CExAQ0LEfFGtBkDoYhRVIwARIwgf00BImCwhGIr/3v9/vh3zCAiNgDmyK3a5pmx1PgrCIiYgCYAZjZITPXJetmfdHxByGAzFyZ2aJClHRz9wsAEdFPyKAD8FFwgnu9TpC0lDQvCtzd/Tph8TvGELeSqm8c3L0FvlAk4JiZ1SqfivM/wgMt5c6IKpsRxwAAAABJRU5ErkJggg==");background-repeat:no-repeat}.no-svg .grunticon-navicon-16{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAINJREFUOI3F0r0JQkEQBOBPsQAFwQpMbM7INjSxDovxBb7ACgS1hDO5QwWTeSIOLMvC7uzsD//GqPotVmFth00Lziih9TCpBDssQwWnMP8z2g4WmIW1N1xe5aQ76GBcCcoA9YXnCHNMQ4I7rgMav6MpWMvP2GPfgq8f6SB/5WOY/yM8AMViNjCNWFc9AAAAAElFTkSuQmCC");background-repeat:no-repeat}.no-svg .grunticon-navicon-32-white{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAPJJREFUWIXtlrFKQ0EQRe+92EjAVjCIpVjYpUjvH/iJafwJu1T2Cn6AQuweeW3mjk2EuC8ELDIivlOeLc4MLMsCI/8d2p4DmBe01iQXJDe78iQzHyVNCgZAZm4ALHadquJbzlqhwvheZPulImTbJJ9bT9unAKYFM/SSPgo6Iz+Dtq8A3Ba01iSXJPObjYhVFmH7vp1Kks4Ltv/iYjBAYXwvsr2qipF8GzjbU9Rcwo7k0+ASjvw2tD0heXnsUGb2kt4HBxHxWvEIRYRt37V9Sbo+9vbbEAHcDHxF/BCy3Rf2ulbQ9gw13/KO5APJKGiN/CE+AV01HeiJkDpcAAAAAElFTkSuQmCC");background-repeat:no-repeat}.no-svg .grunticon-navicon-32{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAANRJREFUWIXt1rFKQzEUBuAv2aTQVVBKR+ng5tDdN/ABfDiXPoiTu4IPUEG3S+uo1SEuhoAVbs9FvB9kSYb/HBIOYfTfJSy/1qFtcIO3+uAVH0Hrug7PmPTV4h6mrQIGlfEQlLXDfb2ZcITTgAK2eAnIGf1OwhznAVkb3Crz4JtncYPoqg7POO6rxT2ctAoYVFauIMq63kjKEIp4hB3uNB7haFBJ+Q/MArK2eGodPIoZQjtc1uEZZ73097OERauAQWXlbqJ09UbChZhveYcV3gOyRn/IJ1eKaGJm1KHvAAAAAElFTkSuQmCC");background-repeat:no-repeat}.no-svg .grunticon-plus-16-white{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAALNJREFUOI3Fk78OgUEQxGeHgs47iEKr0yu8iQfQingqrcRj+NPQKEWB5nY0VxzJfZxPYrrLTH7Z3dsFaspyhrv3AXQBOIAVyVsROYRwUpS7T3M5Zg2ylTzbxYBPVRtgAODuQ0lzPA91RLIR/R2AfeIdSU7MzAEAkhYqV+cnLTRjBUtJgxfgOGlhA2CbeAeSl0qypHOyB7Nc7v/fmAW4e7r711yu6ph6iMdkZmszu39V4js9AEnhgcskyZ6iAAAAAElFTkSuQmCC");background-repeat:no-repeat}.no-svg .grunticon-plus-16{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAKNJREFUOI3F0z0OQVEQhuHHT0FnD6LQ6vQKO7EArYhVaSWW4aehUYoCFQpX7iG5x+VKTDI5k8zkzcw3ZyhopUiujSYumOH0KXyHa+LDrKJyBFAL4vo3gFxWGPAQsYuxZ1F7qCTxCusgt8XAXWAwkQqW1xs/GaGavFN0XoD9YIQFlkFug8M7+F7a7iir6P9rjAHCv3/MKoodU0t6THOcP2otr90AWPslGcJ3MsoAAAAASUVORK5CYII=");background-repeat:no-repeat}.no-svg .grunticon-search-16-white{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAARZJREFUOI2dkktKA0EURWMGxsSgSIYiDrOP4CworsAd+EF0Oa7FaQZ+UBKDBLIECTpQhHOek9cQTHeDPiiq4dY9fetSjUaO2lavgAfgK9e9ehkRG426UfeBl6gYYKzuVZnbhRmYqMOI6Kib6iEwLSClSdTrJfPWbz0itguIerkCAB5THNZc8Shvc1cG+EqxUwWIiG6m/PytNZcOrVUBllkrgGazOc7vQY3xIPfJiqJeZLxpRGyv/DJiB3jNns7LAC3guYBkYd1cx4UZmKut0nzqLvBU85Dmud+qvVJIRKyrp8AIeAc+gJF6lilvEzJT+zV9lY/aA2YJeVPrSq+E9IG3hHyrJ/+BDIDvrGfxZ0BCTiJiAdz8ADRwlzuvQ26iAAAAAElFTkSuQmCC");background-repeat:no-repeat}.no-svg .grunticon-search-16{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAO5JREFUOI2d0j1Kg0EUheFHCzUxKJJSxDL7CHbB4ArcgT8EXY5rSWvhD0piECFLkKCFweazyBWHMPMJOTDMhXPPe2eG4U8NXOEB81j3GGDLPzrEC6rCGuGgFG4k4TF6aGIbx5gkkOxJrpPwTsbfTSCDHOAxzF7NFfvRc5cz52E2awCt6PlaNtaTeq0G8KsqBxhF3a0JHsU+zpmXQZ5YPNiy9vAaPRc5wCaeE0jf4s4tnCThafRmtY8n5Y80jX2IdgmygTPc4gOfUZ/H5GFA3tApQerUjnCFd/WPXlQnwhW+cboKpBvhCrNVAGLyDDc/eftJq3GNtEcAAAAASUVORK5CYII=");background-repeat:no-repeat}.no-svg .grunticon-search{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAgJJREFUWIW91j1rFFEUxvHfhJC0KayEjbIQUbv0isSXOmWwSWOxQW0CCwr2fge3VbDQVm3EjyCLEk0XbSzcLppskI1rcUfY3JnNvKzOgVPMHZ5z/vecO/dM4nRr4zbWcBln0vUBdvAOz/G1IE5la+MlfmNc4McpxPK/Sr6JgxKJY/8hVGsme1AjcezbdZNvTgn4Hh2sYCH1C9hCf4pmo2rytmzZD3GnQJekcMNIu49WFYAXOcmvVtBfy4F4Vlbclj3tRTvPs60oxkjJKjyS7XkdS2TPRLdINCdcMpP2pCbAGL1oLY6da9+cpF6pCQAXo1h7ZUS/ItHCDACLUayDIsHcDMnKWFIGYBCtnZ8hYTt6/l4GYCdauz4DwI3o+VMZ0UMn+9ZXonQ5luCDip8hnBNG6qSwUwPgnpoXEWGeT4qHwvVa1tZwFMV4WkFvWZjnMUTH6e1IhJ3HySsPI8LPRN5o7eOucMkspn4J92V7/tcfq/mJb08JWMd3sVoHYkMoYdWE+8LOJ9d+Yr0OREuY56MSiUfCgWsJZd+N3h8r+TlOA+nilTBYDoSflS94nb6LD9uqsPMYtIf5uiBVbV32bhnjLZaagujmAIzxWXZm/DfrTYEY4EoTAPNC2fMgjnCrCYgloex5EB+bACD0fJADMGwKgNDzeGa8aRIAbgrz4zBNfvYPvmIgBkA3v0IAAAAASUVORK5CYII=");background-repeat:no-repeat}.nav-item--body{display:block;border:1px solid #e1e3e6;border-radius:4px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;background:#f2f4f5}.nav-item--body:hover>.controls{display:block}.nav-item.is-hidden>.zone .nav-item--body{background:#fff;border-style:dashed}.nav-item.is-hidden>.zone .nav-item--body .icon{opacity:.7}.nav-item.is-hidden>.zone .nav-item--body .information a{color:#999}.nav-item.is-hidden>.zone .nav-item--body .information a:visited{color:#999}.nav-item.is-hidden>.zone .nav-item--body .information a:focus{color:#999}.nav-item.is-hidden>.zone .nav-item--body .information a:hover{color:#999}.nav-item.is-hidden>.zone .nav-item--body .information a:active{color:#999}.nav-item>ol{position:relative;padding-left:32px;display:none}.nav-item>ol:before{content:"";position:absolute;top:0;left:0;bottom:0;width:1px;border-left:1px dotted #e1e3e6}.nav-item.mjs-nestedSortable-expanded>ol{display:block}.nav-item{margin-top:4px}.disclose{display:none;cursor:pointer;border-right:1px solid #e1e3e6;width:22px;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center}.nav-item.is-hidden>.zone .disclose{border-right-style:dashed}.mjs-nestedSortable-branch>.zone .disclose{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.mjs-nestedSortable-branch.level-0>.zone .disclose{display:none}.nav-item .placeholder{outline:1px dashed #ff521f;border-radius:4px;margin-top:4px}.nav-item .information{padding:8px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;align-items:center;-webkit-flex-grow:1;flex-grow:1}.draggable .nav-item .information{cursor:move}.nav-item .information a{cursor:pointer}.nav-item .information.folder{font-family:"Open Sans",sans-serif;font-style:normal;font-weight:bold}.nav-item.level-0>.zone .information{font-family:"Open Sans",sans-serif;font-style:normal;font-weight:bold}.nav-item--title{padding-right:8px}.nav-item--icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-right:8px}.nav-item--links-to-child,.nav-item--key,.nav-item--hidden{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;align-items:center;padding-left:4px;padding-right:4px}.nav-item--links-to-child svg,.nav-item--key svg,.nav-item--hidden svg{width:12px;height:12px;display:block}.nav-item--links-to-child svg path,.nav-item--key svg path,.nav-item--hidden svg path{fill:#999}.nav-item--links-to-child .icon--polygon,.nav-item--links-to-child svg path,.nav-item--key .icon--polygon,.nav-item--key svg path,.nav-item--hidden .icon--polygon,.nav-item--hidden svg path{fill:#999}.nav-item--links-to-child .icon--polyline,.nav-item--links-to-child svg path,.nav-item--key .icon--polyline,.nav-item--key svg path,.nav-item--hidden .icon--polyline,.nav-item--hidden svg path{stroke:#999}.nav-item .controls{display:none;margin-left:auto;padding:4px;position:relative;z-index:10}.nav-item .controls>ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.nav-item .controls>ul ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.nav-item .controls>ul>li+li{margin-left:4px}.nav-item .controls .has-menu{position:relative}.nav-item .controls .has-menu ul{position:absolute;top:100%;right:0;display:none;padding-top:2px;border-radius:4px;overflow:hidden}.nav-item .controls .has-menu li a{text-align:left;border-radius:0}.nav-item .controls .has-menu:hover{border-bottom-left-radius:0;border-bottom-right-radius:0}.nav-item .controls .has-menu:hover ul{display:block}.nav-item--icon>.icon{background-position:center;min-width:16px;min-height:16px;background-repeat:no-repeat}.nav-item--icon>.icon.settings{background-image:url("koi/nav_items/icon-nav-item-settings.png")}.nav-item--icon>.icon.folder{background-image:url("koi/nav_items/icon-nav-item-folder.png")}.nav-item--icon>.icon.module{background-image:url("koi/nav_items/icon-nav-item-module.png")}.nav-item--icon>.icon.alias{background-image:url("koi/nav_items/icon-nav-item-alias.png")}.nav-item--icon>.icon.home{background-image:url("koi/nav_items/icon-nav-item-home.png")}.nav-item--icon>.icon.page{background-image:url("koi/nav_items/icon-nav-item-page.png")}.nav-item--icon>.icon.move{background-image:url("koi/nav_items/icon-nav-item-move.png")}.nav-item--icon>.icon.sort{background-image:url("koi/nav_items/icon-nav-item-sortable.png")}.nav-item--icon>.icon.sort>a{height:22px;padding-right:24px;cursor:move}
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Koi
4
- class IndexTableComponent < ViewComponent::Base
5
- attr_reader :id, :pagy_id
6
-
7
- # Use the Koi::Tables::TableComponent to support custom header and body row components
8
- renders_one :table, Koi::Tables::TableComponent
9
- renders_one :pagination, Katalyst::Turbo::PagyNavComponent
10
-
11
- def initialize(collection:, id: "index-table", **options)
12
- super
13
-
14
- @id = id
15
- @pagy_id = "#{id}-pagination"
16
-
17
- with_table(collection:, id:, class: "index-table", caption: true, **options)
18
- with_pagination(collection:, id: pagy_id) if collection.paginate?
19
- end
20
-
21
- def call
22
- concat(table)
23
- concat(pagination)
24
- end
25
- end
26
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Koi
4
- class OrdinalTableComponent < Tables::TableComponent
5
- include Katalyst::Tables::Orderable
6
-
7
- def initialize(collection:,
8
- id: "index-table",
9
- url: [:order, :admin, collection],
10
- scope: "order[#{collection.model_name.plural}]",
11
- **options)
12
- super(collection:, id:, class: "index-table", caption: true, **options)
13
-
14
- @url = url
15
- @scope = scope
16
- end
17
-
18
- def before_render
19
- with_orderable(url: @url, scope: @scope) unless orderable?
20
- end
21
-
22
- def call
23
- concat(render_parent)
24
- concat(orderable)
25
- end
26
- end
27
- end
@@ -1,228 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- using Katalyst::HtmlAttributes::HasHtmlAttributes
4
-
5
- module Koi
6
- module Tables
7
- module Body
8
- # Shows Yes/No for boolean values
9
- class BooleanComponent < BodyCellComponent
10
- def rendered_value
11
- value ? "Yes" : "No"
12
- end
13
- end
14
-
15
- # Formats the value as a date
16
- # @param format [String] date format, defaults to :admin
17
- # @param relative [Boolean] if true, the date may be(if within 5 days) shown as a relative date
18
- class DateComponent < BodyCellComponent
19
- include Koi::DateHelper
20
-
21
- def initialize(table, record, attribute, format: :admin, relative: true, **options)
22
- super(table, record, attribute, **options)
23
-
24
- @format = format
25
- @relative = relative
26
- end
27
-
28
- def value
29
- super&.to_date
30
- end
31
-
32
- def rendered_value
33
- @relative ? relative_time : absolute_time
34
- end
35
-
36
- private
37
-
38
- def absolute_time
39
- value.present? ? I18n.l(value, format: @format) : ""
40
- end
41
-
42
- def relative_time
43
- if value.blank?
44
- ""
45
- else
46
- days_ago_in_words(value)&.capitalize || absolute_time
47
- end
48
- end
49
-
50
- def default_html_attributes
51
- @relative && value.present? && days_ago_in_words(value).present? ? { title: absolute_time } : {}
52
- end
53
- end
54
-
55
- # Formats the value as a datetime
56
- # @param format [String] datetime format, defaults to :admin
57
- # @param relative [Boolean] if true, the datetime may be(if today) shown as a relative date/time
58
- class DatetimeComponent < BodyCellComponent
59
- include ActionView::Helpers::DateHelper
60
-
61
- def initialize(table, record, attribute, format: :admin, relative: true, **options)
62
- super(table, record, attribute, **options)
63
-
64
- @format = format
65
- @relative = relative
66
- end
67
-
68
- def value
69
- super&.to_datetime
70
- end
71
-
72
- def rendered_value
73
- @relative ? relative_time : absolute_time
74
- end
75
-
76
- private
77
-
78
- def absolute_time
79
- value.present? ? I18n.l(value, format: @format) : ""
80
- end
81
-
82
- def today?
83
- value.to_date == Date.current
84
- end
85
-
86
- def relative_time
87
- return "" if value.blank?
88
-
89
- if today?
90
- if value > DateTime.current
91
- "#{distance_of_time_in_words(value, DateTime.current)} from now".capitalize
92
- else
93
- "#{distance_of_time_in_words(value, DateTime.current)} ago".capitalize
94
- end
95
- else
96
- absolute_time
97
- end
98
- end
99
-
100
- def default_html_attributes
101
- @relative && today? ? { title: absolute_time } : {}
102
- end
103
- end
104
-
105
- # Formats the value as a money value
106
- #
107
- # The value is expected to be in cents.
108
- # Adds a class to the cell to allow for custom styling
109
- class CurrencyComponent < BodyCellComponent
110
- def initialize(table, record, attribute, options: {}, **html_attributes)
111
- super(table, record, attribute, **html_attributes)
112
-
113
- @options = options
114
- end
115
-
116
- def rendered_value
117
- value.present? ? number_to_currency(value / 100.0, @options) : ""
118
- end
119
-
120
- def default_html_attributes
121
- super.merge_html(class: "type-currency")
122
- end
123
- end
124
-
125
- # Formats the value as a number
126
- #
127
- # Adds a class to the cell to allow for custom styling
128
- class NumberComponent < BodyCellComponent
129
- def rendered_value
130
- value.present? ? number_to_human(value) : ""
131
- end
132
-
133
- def default_html_attributes
134
- super.merge_html(class: "type-number")
135
- end
136
- end
137
-
138
- # Displays the plain text for rich text content
139
- #
140
- # Adds a title attribute to allow for hover over display of the full content
141
- class RichTextComponent < BodyCellComponent
142
- def default_html_attributes
143
- { title: value.to_plain_text }
144
- end
145
- end
146
-
147
- # Displays a link to the record
148
- # The link text is the value of the attribute
149
- # @see Koi::Tables::BodyRowComponent#link
150
- class LinkComponent < BodyCellComponent
151
- def initialize(table, record, attribute, url:, link: {}, **options)
152
- super(table, record, attribute, **options)
153
-
154
- @url = url
155
- @link_options = link
156
- end
157
-
158
- def call
159
- content # ensure content is set before rendering options
160
-
161
- link = content.present? && url.present? ? link_to(content, url, @link_options) : content.to_s
162
- content_tag(@type, link, **html_attributes)
163
- end
164
-
165
- def url
166
- case @url
167
- when Symbol
168
- # helpers are not available until the component is rendered
169
- @url = helpers.public_send(@url, record)
170
- when Proc
171
- @url = @url.call(record)
172
- else
173
- @url
174
- end
175
- end
176
- end
177
-
178
- # Shows an attachment
179
- #
180
- # The value is expected to be an ActiveStorage attachment
181
- #
182
- # If it is representable, shows as a image tag using a default variant named :thumb.
183
- #
184
- # Otherwise shows as a link to download.
185
- class AttachmentComponent < BodyCellComponent
186
- def initialize(table, record, attribute, variant: :thumb, **options)
187
- super(table, record, attribute, **options)
188
-
189
- @variant = variant
190
- end
191
-
192
- def rendered_value
193
- representation
194
- end
195
-
196
- def representation
197
- if value.try(:variable?) && named_variant.present?
198
- image_tag(value.variant(@variant))
199
- elsif value.try(:attached?)
200
- filename.to_s
201
- else
202
- ""
203
- end
204
- end
205
-
206
- def filename
207
- value.blob.filename
208
- end
209
-
210
- # Utility for accessing the path Rails provides for retrieving the
211
- # attachment for use in cells. Example:
212
- # <% row.attachment :file do |cell| %>
213
- # <%= link_to "Download", cell.internal_path %>
214
- # <% end %>
215
- def internal_path
216
- rails_blob_path(value, disposition: :attachment)
217
- end
218
-
219
- private
220
-
221
- # Find the reflective variant by name (i.e. :thumb by default)
222
- def named_variant
223
- object.attachment_reflections[@attribute.to_s].named_variants[@variant.to_sym]
224
- end
225
- end
226
- end
227
- end
228
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Koi
4
- module Tables
5
- # Custom body cell component, in order to override the content
6
- class BodyCellComponent < Katalyst::Tables::BodyCellComponent
7
- def before_render
8
- # fallback if no content block is given
9
- with_content(rendered_value) unless content?
10
- end
11
-
12
- def rendered_value
13
- value.to_s
14
- end
15
-
16
- def to_s
17
- rendered_value
18
- end
19
- end
20
- end
21
- end