avo 4.0.0.beta.2 → 4.0.0.beta.3

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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/app/assets/builds/avo/application.css +247 -28
  4. data/app/assets/stylesheets/application.css +1 -0
  5. data/app/assets/stylesheets/css/components/ui/state.css +129 -0
  6. data/app/assets/stylesheets/css/pagination.css +12 -6
  7. data/app/assets/svgs/avo/circle-minus.svg +3 -0
  8. data/app/components/avo/alert_component.rb +4 -4
  9. data/app/components/avo/backtrace_alert_component.html.erb +1 -1
  10. data/app/components/avo/button_component.rb +1 -1
  11. data/app/components/avo/debug/status_component.html.erb +2 -2
  12. data/app/components/avo/empty_state_component.html.erb +15 -4
  13. data/app/components/avo/empty_state_component.rb +9 -0
  14. data/app/components/avo/fields/common/files/view_type/grid_item_component.html.erb +1 -1
  15. data/app/components/avo/fields/common/key_value_component.html.erb +1 -1
  16. data/app/components/avo/fields/common/stars_component.html.erb +1 -1
  17. data/app/components/avo/fields/common/status_viewer_component.html.erb +3 -3
  18. data/app/components/avo/fields/preview_field/index_component.rb +1 -1
  19. data/app/components/avo/fields/stars_field/edit_component.html.erb +1 -1
  20. data/app/components/avo/filters_component.html.erb +1 -1
  21. data/app/components/avo/items/switcher_component.html.erb +1 -1
  22. data/app/components/avo/media_library/item_details_component.html.erb +2 -2
  23. data/app/components/avo/media_library/list_component.html.erb +1 -1
  24. data/app/components/avo/media_library/list_item_component.html.erb +2 -2
  25. data/app/components/avo/modal_component.html.erb +1 -1
  26. data/app/components/avo/paginator_component.html.erb +23 -17
  27. data/app/components/avo/paginator_component.rb +18 -0
  28. data/app/components/avo/resource_component.rb +2 -2
  29. data/app/components/avo/sidebar/group_component.html.erb +1 -1
  30. data/app/components/avo/sidebar/section_component.html.erb +1 -1
  31. data/app/components/avo/sidebar_profile_component.html.erb +1 -1
  32. data/app/components/avo/views/resource_index_component.rb +1 -1
  33. data/app/views/avo/base/_date_time_filter.html.erb +1 -1
  34. data/app/views/avo/base/preview.html.erb +1 -1
  35. data/app/views/avo/debug/_valid_indicator.html.erb +2 -2
  36. data/app/views/avo/home/failed_to_load.html.erb +40 -13
  37. data/app/views/avo/media_library/_form.html.erb +1 -1
  38. data/app/views/avo/partials/_color_scheme_switcher.html.erb +4 -4
  39. data/app/views/avo/partials/_custom_tools_alert.html.erb +3 -3
  40. data/app/views/avo/partials/_sortable_component.html.erb +3 -3
  41. data/app/views/avo/partials/_table_header.html.erb +1 -1
  42. data/app/views/avo/private/_links_and_buttons.html.erb +2 -2
  43. data/app/views/avo/private/design.html.erb +4 -4
  44. data/app/views/avo/sidebar/_license_warning.html.erb +2 -2
  45. data/lib/avo/version.rb +1 -1
  46. data/lib/generators/avo/resource_generator.rb +3 -3
  47. data/lib/generators/avo/templates/initializer/avo.tt +4 -4
  48. data/lib/generators/avo/templates/resource_tools/partial.tt +1 -1
  49. metadata +3 -15
  50. data/app/assets/svgs/avo/arrow-circle-right.svg +0 -1
  51. data/app/assets/svgs/avo/bell.svg +0 -3
  52. data/app/assets/svgs/avo/color-swatch.svg +0 -1
  53. data/app/assets/svgs/avo/dashboards.svg +0 -6
  54. data/app/assets/svgs/avo/exclamation.svg +0 -1
  55. data/app/assets/svgs/avo/filter.svg +0 -1
  56. data/app/assets/svgs/avo/logout.svg +0 -3
  57. data/app/assets/svgs/avo/resources.svg +0 -13
  58. data/app/assets/svgs/avo/save.svg +0 -8
  59. data/app/assets/svgs/avo/selector.svg +0 -1
  60. data/app/assets/svgs/avo/sort-ascending.svg +0 -1
  61. data/app/assets/svgs/avo/sort-descending.svg +0 -1
  62. data/app/assets/svgs/avo/times.svg +0 -3
  63. data/app/assets/svgs/avo/tools.svg +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 19ff8cb45166e5eba8e5f34a5077f598110351433d7617aa0acb0ef16024d503
4
- data.tar.gz: f959099635501f862297712d3a67de1cde5e3b2eda3872913deef69a2eea8412
3
+ metadata.gz: '009224ece686ff1bd1b3b4b3593336dd98759b01a1b76173d2197c7e8566a6cd'
4
+ data.tar.gz: ddef3ecbe7b8f39bcf24a473438f24fbe226a0c0993727619e255b469846df9a
5
5
  SHA512:
6
- metadata.gz: f0483f39c5f03075b9ead52b593d5307e665b5993723ccad3877faa861c96edcd8ee1edf51050b1fc169c357c1781a23c4a794df9a9b599123509e91b4247979
7
- data.tar.gz: fd7c1d840794b4a117f0730bb46836f0576de3d4826613da6bcb5b99ba56a80be61be189689a3969726cd8d9ee460507205acf4b739f1d409fff42f5fd065398
6
+ metadata.gz: 75f3e4a99a0400e57363b33f8623cc5ce33e433494badfbcb3a3441f4a68ecefc3348fe1157350e7c3c9654ca05694386c4473778bed496434e7628b814ba15e
7
+ data.tar.gz: f2bbd10861ba6211d9bbf54c7b8efec2462240392952e00d05c1a03d6f2af92ed549125b7008307ccab8149f006b74889a3160366c191330954fbdd20de607f0
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- avo (4.0.0.beta.2)
4
+ avo (4.0.0.beta.3)
5
5
  actionview (>= 6.1)
6
6
  active_link_to
7
7
  activerecord (>= 6.1)
@@ -559,9 +559,6 @@
559
559
  .start-1 {
560
560
  inset-inline-start: calc(var(--spacing) * 1);
561
561
  }
562
- .start-1\/2 {
563
- inset-inline-start: calc(1/2 * 100%);
564
- }
565
562
  .end {
566
563
  inset-inline-end: var(--spacing);
567
564
  }
@@ -966,12 +963,6 @@
966
963
  .h-40 {
967
964
  height: calc(var(--spacing) * 40);
968
965
  }
969
- .h-52 {
970
- height: calc(var(--spacing) * 52);
971
- }
972
- .h-64 {
973
- height: calc(var(--spacing) * 64);
974
- }
975
966
  .h-\[0\.75rem\] {
976
967
  height: 0.75rem;
977
968
  }
@@ -1628,10 +1619,6 @@
1628
1619
  border-bottom-style: var(--tw-border-style);
1629
1620
  border-bottom-width: 1px;
1630
1621
  }
1631
- .border-b-2 {
1632
- border-bottom-style: var(--tw-border-style);
1633
- border-bottom-width: 2px;
1634
- }
1635
1622
  .border-l {
1636
1623
  border-left-style: var(--tw-border-style);
1637
1624
  border-left-width: 1px;
@@ -1669,9 +1656,6 @@
1669
1656
  .border-blue-600 {
1670
1657
  border-color: var(--color-blue-600);
1671
1658
  }
1672
- .border-content-secondary {
1673
- border-color: var(--color-content-secondary);
1674
- }
1675
1659
  .border-cyan-300 {
1676
1660
  border-color: var(--color-cyan-300);
1677
1661
  }
@@ -2233,9 +2217,6 @@
2233
2217
  .pb-2 {
2234
2218
  padding-bottom: calc(var(--spacing) * 2);
2235
2219
  }
2236
- .pb-3 {
2237
- padding-bottom: calc(var(--spacing) * 3);
2238
- }
2239
2220
  .pb-4 {
2240
2221
  padding-bottom: calc(var(--spacing) * 4);
2241
2222
  }
@@ -2428,9 +2409,6 @@
2428
2409
  .text-fuchsia-700 {
2429
2410
  color: var(--color-fuchsia-700);
2430
2411
  }
2431
- .text-gray-300 {
2432
- color: var(--color-gray-300);
2433
- }
2434
2412
  .text-gray-400 {
2435
2413
  color: var(--color-gray-400);
2436
2414
  }
@@ -7927,6 +7905,9 @@
7927
7905
  @media (width >= 40rem) {
7928
7906
  flex-direction: row;
7929
7907
  }
7908
+ @media (width >= 40rem) {
7909
+ flex-wrap: wrap;
7910
+ }
7930
7911
  @media (width >= 40rem) {
7931
7912
  align-items: flex-end;
7932
7913
  }
@@ -7937,6 +7918,7 @@
7937
7918
  .pagination__per-page {
7938
7919
  --pagination-per-page-width: 10rem;
7939
7920
  display: flex;
7921
+ flex-shrink: 0;
7940
7922
  align-items: center;
7941
7923
  }
7942
7924
  .pagination__per-page-input {
@@ -7995,14 +7977,32 @@
7995
7977
  --tw-font-weight: var(--font-weight-normal);
7996
7978
  font-weight: var(--font-weight-normal);
7997
7979
  }
7980
+ .pagination__controls-wrap {
7981
+ display: flex;
7982
+ width: 100%;
7983
+ min-width: calc(var(--spacing) * 0);
7984
+ @media (width >= 40rem) {
7985
+ min-width: 22rem;
7986
+ }
7987
+ @media (width >= 40rem) {
7988
+ flex: 1 1 28rem;
7989
+ }
7990
+ @media (width >= 40rem) {
7991
+ justify-content: flex-end;
7992
+ }
7993
+ }
7998
7994
  .pagination__controls {
7999
7995
  display: flex;
8000
- width: fit-content;
8001
- flex-shrink: 0;
7996
+ width: 100%;
7997
+ max-width: 100%;
7998
+ min-width: calc(var(--spacing) * 0);
7999
+ --tw-pan-x: pan-x;
8000
+ touch-action: var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,);
8002
8001
  align-items: center;
8003
8002
  gap: calc(var(--spacing) * 3);
8004
- overflow: hidden;
8005
- overflow: visible;
8003
+ overflow-x: auto;
8004
+ overflow-y: hidden;
8005
+ overscroll-behavior-x: contain;
8006
8006
  border-radius: var(--radius-lg);
8007
8007
  border-style: var(--tw-border-style);
8008
8008
  border-width: 1px;
@@ -8010,11 +8010,16 @@
8010
8010
  background-color: var(--color-primary);
8011
8011
  padding-inline-start: calc(var(--spacing) * 3);
8012
8012
  padding-inline-end: calc(var(--spacing) * 2);
8013
+ @media (width >= 40rem) {
8014
+ width: fit-content;
8015
+ }
8016
+ -webkit-overflow-scrolling: touch;
8017
+ scrollbar-gutter: stable;
8013
8018
  }
8014
8019
  .pagination__info {
8015
8020
  display: flex;
8021
+ flex-shrink: 0;
8016
8022
  align-items: center;
8017
- overflow: hidden;
8018
8023
  border-inline-end-style: var(--tw-border-style);
8019
8024
  border-inline-end-width: 1px;
8020
8025
  border-color: var(--color-tertiary);
@@ -8026,7 +8031,6 @@
8026
8031
  line-height: calc(var(--spacing) * 5);
8027
8032
  --tw-font-weight: var(--font-weight-normal);
8028
8033
  font-weight: var(--font-weight-normal);
8029
- text-overflow: ellipsis;
8030
8034
  white-space: nowrap;
8031
8035
  color: var(--color-content);
8032
8036
  &:last-child {
@@ -8041,12 +8045,15 @@
8041
8045
  }
8042
8046
  .pagination__nav {
8043
8047
  display: flex;
8048
+ flex-shrink: 0;
8044
8049
  align-items: center;
8045
8050
  }
8046
8051
  .pagy.series-nav {
8047
8052
  display: flex;
8053
+ min-width: max-content;
8048
8054
  align-items: center;
8049
8055
  gap: calc(var(--spacing) * 0.5);
8056
+ white-space: nowrap;
8050
8057
  a[role="separator"] {
8051
8058
  padding-inline: calc(var(--spacing) * 2);
8052
8059
  font-size: var(--text-sm);
@@ -10775,6 +10782,203 @@
10775
10782
  --badge-bg: var(--color-rose-400);
10776
10783
  --badge-text: var(--color-rose-600);
10777
10784
  }
10785
+ .state {
10786
+ margin-inline: auto;
10787
+ display: flex;
10788
+ width: 100%;
10789
+ max-width: calc(var(--spacing) * 72);
10790
+ flex-direction: column;
10791
+ align-items: center;
10792
+ justify-content: center;
10793
+ gap: calc(var(--spacing) * 3);
10794
+ border-radius: var(--radius-lg);
10795
+ background-color: var(--color-background);
10796
+ padding: calc(var(--spacing) * 6);
10797
+ text-align: center;
10798
+ }
10799
+ .state__illustration {
10800
+ position: relative;
10801
+ display: flex;
10802
+ height: calc(var(--spacing) * 36);
10803
+ width: calc(var(--spacing) * 60);
10804
+ align-items: center;
10805
+ justify-content: center;
10806
+ }
10807
+ .state__card {
10808
+ position: absolute;
10809
+ display: flex;
10810
+ height: calc(var(--spacing) * 11);
10811
+ width: calc(var(--spacing) * 44);
10812
+ align-items: center;
10813
+ gap: calc(var(--spacing) * 1.5);
10814
+ border-radius: var(--radius-lg);
10815
+ border-style: var(--tw-border-style);
10816
+ border-width: 1px;
10817
+ border-color: var(--color-secondary);
10818
+ padding: calc(var(--spacing) * 2.5);
10819
+ background: linear-gradient(194deg, var(--color-primary) 27%, var(--color-background) 65%);
10820
+ box-shadow: var(--box-shadow-card);
10821
+ }
10822
+ .state__card--top {
10823
+ inset-inline-start: calc(var(--spacing) * 0);
10824
+ top: calc(var(--spacing) * 0);
10825
+ }
10826
+ .state__card--middle {
10827
+ inset-inline-start: calc(var(--spacing) * 14);
10828
+ top: calc(var(--spacing) * 8);
10829
+ }
10830
+ .state__card--bottom {
10831
+ inset-inline-start: calc(var(--spacing) * 5);
10832
+ top: calc(var(--spacing) * 20);
10833
+ }
10834
+ .state__badge {
10835
+ display: flex;
10836
+ width: calc(var(--spacing) * 6);
10837
+ height: calc(var(--spacing) * 6);
10838
+ flex-shrink: 0;
10839
+ align-items: center;
10840
+ justify-content: center;
10841
+ border-radius: calc(infinity * 1px);
10842
+ font-size: var(--text-xs);
10843
+ line-height: var(--tw-leading, var(--text-xs--line-height));
10844
+ --tw-leading: 1;
10845
+ line-height: 1;
10846
+ --tw-font-weight: var(--font-weight-medium);
10847
+ font-weight: var(--font-weight-medium);
10848
+ color: var(--color-content);
10849
+ background: color-mix(in srgb, oklch(92.80% 0.0000 89.88) 88%, #fff);
10850
+ @supports (color: color-mix(in lab, red, red)) {
10851
+ background: color-mix(in oklab, var(--color-tertiary) 88%, var(--color-primary));
10852
+ }
10853
+ }
10854
+ .state__body {
10855
+ display: flex;
10856
+ min-width: calc(var(--spacing) * 0);
10857
+ flex: 1;
10858
+ flex-direction: column;
10859
+ gap: calc(var(--spacing) * 1);
10860
+ }
10861
+ .state__line {
10862
+ display: block;
10863
+ height: calc(var(--spacing) * 1.5);
10864
+ border-radius: calc(infinity * 1px);
10865
+ background: color-mix(in srgb, oklch(92.80% 0.0000 89.88) 78%, #fff);
10866
+ @supports (color: color-mix(in lab, red, red)) {
10867
+ background: color-mix(in oklab, var(--color-tertiary) 78%, var(--color-primary));
10868
+ }
10869
+ }
10870
+ .state__line--title {
10871
+ opacity: 75%;
10872
+ }
10873
+ .state__line--large {
10874
+ width: calc(var(--spacing) * 14);
10875
+ }
10876
+ .state__line--medium {
10877
+ width: calc(var(--spacing) * 12);
10878
+ }
10879
+ .state__line--small {
10880
+ width: calc(var(--spacing) * 11);
10881
+ }
10882
+ .state__line--content {
10883
+ width: 100%;
10884
+ }
10885
+ .state__message {
10886
+ font-size: var(--text-base);
10887
+ line-height: var(--tw-leading, var(--text-base--line-height));
10888
+ --tw-leading: calc(var(--spacing) * 6);
10889
+ line-height: calc(var(--spacing) * 6);
10890
+ --tw-font-weight: var(--font-weight-normal);
10891
+ font-weight: var(--font-weight-normal);
10892
+ color: var(--color-content-secondary);
10893
+ }
10894
+ .state--frame-load-failed {
10895
+ max-width: calc(var(--spacing) * 96);
10896
+ gap: calc(var(--spacing) * 1);
10897
+ }
10898
+ .state__document {
10899
+ position: absolute;
10900
+ display: flex;
10901
+ height: calc(var(--spacing) * 28);
10902
+ width: calc(var(--spacing) * 20);
10903
+ flex-direction: column;
10904
+ border-radius: var(--radius-lg);
10905
+ border-style: var(--tw-border-style);
10906
+ border-width: 1px;
10907
+ border-color: var(--color-secondary);
10908
+ padding: calc(var(--spacing) * 0.5);
10909
+ background: linear-gradient(235deg, var(--color-primary) 27%, var(--color-background) 65%);
10910
+ }
10911
+ .state__document--start {
10912
+ inset-inline-start: calc(var(--spacing) * 4);
10913
+ rotate: -21deg;
10914
+ }
10915
+ .state__document--center {
10916
+ inset-inline-start: calc(var(--spacing) * 16);
10917
+ z-index: 10;
10918
+ }
10919
+ .state__document--end {
10920
+ inset-inline-start: calc(var(--spacing) * 24);
10921
+ z-index: 0;
10922
+ rotate: 21deg;
10923
+ }
10924
+ .state__document-body {
10925
+ display: flex;
10926
+ height: 100%;
10927
+ width: 100%;
10928
+ align-items: center;
10929
+ border-radius: var(--radius-lg);
10930
+ padding: calc(var(--spacing) * 2.5);
10931
+ box-shadow: var(--box-shadow-card);
10932
+ }
10933
+ .state__document-lines {
10934
+ display: flex;
10935
+ height: 100%;
10936
+ width: 100%;
10937
+ flex-direction: column;
10938
+ justify-content: space-between;
10939
+ }
10940
+ .state__document-line {
10941
+ display: block;
10942
+ height: calc(var(--spacing) * 1);
10943
+ width: 100%;
10944
+ border-radius: calc(infinity * 1px);
10945
+ background: color-mix(in srgb, oklch(92.80% 0.0000 89.88) 78%, #fff);
10946
+ @supports (color: color-mix(in lab, red, red)) {
10947
+ background: color-mix(in oklab, var(--color-tertiary) 78%, var(--color-primary));
10948
+ }
10949
+ }
10950
+ .state__document-line--short {
10951
+ width: calc(var(--spacing) * 10);
10952
+ }
10953
+ .state__magnifier {
10954
+ position: absolute;
10955
+ inset-inline-start: 30%;
10956
+ top: 30%;
10957
+ z-index: 20;
10958
+ background-image: none;
10959
+ }
10960
+ .state__magnifier-icon {
10961
+ width: calc(var(--spacing) * 24);
10962
+ height: calc(var(--spacing) * 24);
10963
+ color: var(--color-content-secondary);
10964
+ opacity: 20%;
10965
+ }
10966
+ .state__note {
10967
+ text-align: center;
10968
+ font-size: var(--text-sm);
10969
+ line-height: var(--tw-leading, var(--text-sm--line-height));
10970
+ --tw-leading: calc(var(--spacing) * 5);
10971
+ line-height: calc(var(--spacing) * 5);
10972
+ --tw-font-weight: var(--font-weight-normal);
10973
+ font-weight: var(--font-weight-normal);
10974
+ color: var(--color-content);
10975
+ }
10976
+ .state__link {
10977
+ color: color-mix(in srgb, oklch(54.6% 0.245 262.881), oklch(20.46% 0.0000 89.88) 10%);
10978
+ @supports (color: color-mix(in lab, red, red)) {
10979
+ color: color-mix(in oklab, var(--color-info-content), var(--color-content) 10%);
10980
+ }
10981
+ }
10778
10982
  .file-upload-input {
10779
10983
  position: relative;
10780
10984
  display: flex;
@@ -13891,6 +14095,18 @@
13891
14095
  inherits: false;
13892
14096
  initial-value: solid;
13893
14097
  }
14098
+ @property --tw-pan-x {
14099
+ syntax: "*";
14100
+ inherits: false;
14101
+ }
14102
+ @property --tw-pan-y {
14103
+ syntax: "*";
14104
+ inherits: false;
14105
+ }
14106
+ @property --tw-pinch-zoom {
14107
+ syntax: "*";
14108
+ inherits: false;
14109
+ }
13894
14110
  @keyframes spin {
13895
14111
  to {
13896
14112
  transform: rotate(360deg);
@@ -13974,6 +14190,9 @@
13974
14190
  --tw-ease: initial;
13975
14191
  --tw-content: "";
13976
14192
  --tw-outline-style: solid;
14193
+ --tw-pan-x: initial;
14194
+ --tw-pan-y: initial;
14195
+ --tw-pinch-zoom: initial;
13977
14196
  }
13978
14197
  }
13979
14198
  }
@@ -135,6 +135,7 @@
135
135
  @import "./css/components/ui/description_list.css";
136
136
  @import "./css/components/ui/tabs.css";
137
137
  @import "./css/components/ui/badge.css";
138
+ @import "./css/components/ui/state.css";
138
139
  @import "./css/components/ui/file_upload_input.css";
139
140
  @import "./css/components/ui/file_upload_item.css";
140
141
  @import "./css/components/ui/dropdown.css";
@@ -0,0 +1,129 @@
1
+ /* State Component - BEM: .state (block), .state__* (elements), .state--* (modifiers) */
2
+
3
+ /* Empty State Component */
4
+
5
+ .state {
6
+ @apply mx-auto flex w-full max-w-72 flex-col items-center justify-center gap-3 rounded-lg bg-background p-6 text-center;
7
+ }
8
+
9
+ .state__illustration {
10
+ @apply relative h-36 w-60 flex items-center justify-center;
11
+ }
12
+
13
+ .state__card {
14
+ @apply absolute flex h-11 w-44 items-center gap-1.5 rounded-lg border border-secondary p-2.5;
15
+
16
+ background: linear-gradient(194deg, var(--color-primary) 27%, var(--color-background) 65%);
17
+ box-shadow: var(--box-shadow-card);
18
+ }
19
+
20
+ .state__card--top {
21
+ @apply start-0 top-0;
22
+ }
23
+
24
+ .state__card--middle {
25
+ @apply start-14 top-8;
26
+ }
27
+
28
+ .state__card--bottom {
29
+ @apply start-5 top-20;
30
+ }
31
+
32
+ .state__badge {
33
+ @apply flex size-6 shrink-0 items-center justify-center rounded-full text-xs font-medium leading-none text-content;
34
+
35
+ background: color-mix(in oklab, var(--color-tertiary) 88%, var(--color-primary));
36
+ }
37
+
38
+ .state__body {
39
+ @apply flex min-w-0 flex-1 flex-col gap-1;
40
+ }
41
+
42
+ .state__line {
43
+ @apply block h-1.5 rounded-full;
44
+
45
+ background: color-mix(in oklab, var(--color-tertiary) 78%, var(--color-primary));
46
+ }
47
+
48
+ .state__line--title {
49
+ @apply opacity-75;
50
+ }
51
+
52
+ .state__line--large {
53
+ @apply w-14;
54
+ }
55
+
56
+ .state__line--medium {
57
+ @apply w-12;
58
+ }
59
+
60
+ .state__line--small {
61
+ @apply w-11;
62
+ }
63
+
64
+ .state__line--content {
65
+ @apply w-full;
66
+ }
67
+
68
+ .state__message {
69
+ @apply text-base font-normal leading-6 text-content-secondary;
70
+ }
71
+
72
+ /* Frame Load Failed Component */
73
+ .state--frame-load-failed {
74
+ @apply max-w-96 gap-1;
75
+ }
76
+
77
+ .state__document {
78
+ @apply absolute flex h-28 w-20 flex-col rounded-lg border border-secondary p-0.5;
79
+
80
+ background: linear-gradient(235deg, var(--color-primary) 27%, var(--color-background) 65%);
81
+ }
82
+
83
+ .state__document--start {
84
+ @apply start-4 rotate-[-21deg];
85
+ }
86
+
87
+ .state__document--center {
88
+ @apply start-16 z-10;
89
+ }
90
+
91
+ .state__document--end {
92
+ @apply start-24 rotate-[21deg] z-0;
93
+ }
94
+
95
+ .state__document-body {
96
+ @apply flex h-full w-full items-center rounded-lg p-2.5;
97
+
98
+ box-shadow: var(--box-shadow-card);
99
+ }
100
+
101
+ .state__document-lines {
102
+ @apply flex h-full w-full flex-col justify-between
103
+ }
104
+
105
+ .state__document-line {
106
+ @apply block h-1 w-full rounded-full;
107
+
108
+ background: color-mix(in oklab, var(--color-tertiary) 78%, var(--color-primary));
109
+ }
110
+
111
+ .state__document-line--short {
112
+ @apply w-10;
113
+ }
114
+
115
+ .state__magnifier {
116
+ @apply absolute start-[30%] top-[30%] z-20 bg-none;
117
+ }
118
+
119
+ .state__magnifier-icon {
120
+ @apply size-24 text-content-secondary opacity-20;
121
+ }
122
+
123
+ .state__note {
124
+ @apply text-center text-sm font-normal leading-5 text-content;
125
+ }
126
+
127
+ .state__link {
128
+ color: color-mix(in oklab, var(--color-info-content), var(--color-content) 10%);
129
+ }
@@ -4,14 +4,14 @@
4
4
  .pagination__controls, .pagination__info, .pagination__nav (elements) */
5
5
 
6
6
  .pagination {
7
- @apply flex w-full flex-col items-stretch justify-between gap-2 sm:flex-row sm:items-end sm:gap-0;
7
+ @apply flex w-full flex-col items-stretch justify-between gap-2 sm:flex-row sm:flex-wrap sm:items-end sm:gap-0;
8
8
  }
9
9
 
10
10
  /* === Per-page selector (left) === */
11
11
 
12
12
  .pagination__per-page {
13
13
  --pagination-per-page-width: 10rem; /* w-48 equivalent; use 165px for exact Figma match */
14
- @apply flex items-center;
14
+ @apply flex shrink-0 items-center;
15
15
  }
16
16
 
17
17
  .pagination__per-page-input {
@@ -49,13 +49,19 @@
49
49
 
50
50
  /* === Controls pill (right) === */
51
51
 
52
+ .pagination__controls-wrap {
53
+ @apply flex w-full min-w-0 sm:flex-[1_1_28rem] sm:min-w-[22rem] sm:justify-end;
54
+ }
55
+
52
56
  .pagination__controls {
53
- @apply flex w-fit shrink-0 items-center gap-3 rounded-lg border border-tertiary bg-primary overflow-hidden ps-3 pe-2 overflow-visible;
57
+ @apply flex w-full min-w-0 max-w-full items-center gap-3 rounded-lg border border-tertiary bg-primary ps-3 pe-2 overflow-x-auto overflow-y-hidden overscroll-x-contain touch-pan-x sm:w-fit;
58
+ -webkit-overflow-scrolling: touch;
59
+ scrollbar-gutter: stable;
54
60
  }
55
61
 
56
62
  /* Info text with right-border divider */
57
63
  .pagination__info {
58
- @apply flex items-center py-1 pe-3 border-e border-tertiary whitespace-nowrap overflow-hidden text-ellipsis text-sm text-content leading-5 font-normal;
64
+ @apply shrink-0 flex items-center py-1 pe-3 border-e border-tertiary whitespace-nowrap text-sm text-content leading-5 font-normal;
59
65
 
60
66
  &:last-child {
61
67
  @apply border-e-0 pe-1;
@@ -68,12 +74,12 @@
68
74
 
69
75
  /* Nav buttons wrapper */
70
76
  .pagination__nav {
71
- @apply flex items-center;
77
+ @apply shrink-0 flex items-center;
72
78
  }
73
79
 
74
80
  /* === Pagy nav === */
75
81
  .pagy.series-nav {
76
- @apply flex items-center gap-0.5;
82
+ @apply flex min-w-max items-center gap-0.5 whitespace-nowrap;
77
83
 
78
84
  a[role="separator"] {
79
85
  @apply px-2 text-sm text-content-secondary;
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
2
+ <path fill-rule="evenodd" d="M12 2.25c-5.385 0-9.75 4.365-9.75 9.75s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25Zm3 10.5a.75.75 0 0 0 0-1.5H9a.75.75 0 0 0 0 1.5h6Z" clip-rule="evenodd" />
3
+ </svg>
@@ -8,10 +8,10 @@ class Avo::AlertComponent < Avo::BaseComponent
8
8
  prop :timeout
9
9
 
10
10
  def icon
11
- return "heroicons/solid/exclamation-circle" if is_error?
12
- return "heroicons/solid/exclamation" if is_warning?
13
- return "heroicons/solid/exclamation-circle" if is_info?
14
- return "heroicons/solid/check-circle" if is_success?
11
+ return "tabler/filled/alert-circle" if is_error?
12
+ return "tabler/filled/alert-triangle" if is_warning?
13
+ return "tabler/filled/alert-circle" if is_info?
14
+ return "tabler/filled/circle-check" if is_success?
15
15
 
16
16
  "check-circle"
17
17
  end
@@ -6,7 +6,7 @@
6
6
  <div class="px-2">
7
7
  <div class="flex h-full">
8
8
  <div class="flex items-center min-h-full">
9
- <%= helpers.svg "heroicons/solid/exclamation-circle", class: "h-6" %>
9
+ <%= helpers.svg "tabler/filled/alert-circle", class: "h-6" %>
10
10
  </div>
11
11
  <div class="ms-3 w-0 flex-1 pt-0.5">
12
12
  <p class="text-sm leading-5 font-semibold">
@@ -4,7 +4,7 @@
4
4
  # style: primary/outline/text
5
5
  # size: :sm, :md, :lg
6
6
  # color: nil, :primary, :accent, :gray, :red, :green, :blue, or any other tailwind color
7
- # icon: "heroicons/outline/paperclip" as specified in the docs (https://docs.avohq.io/3.0/icons.html)
7
+ # icon: "tabler/outline/paperclip" as specified in the docs (https://docs.avohq.io/3.0/icons.html)
8
8
  class Avo::ButtonComponent < Avo::BaseComponent
9
9
  prop :path, kind: :positional
10
10
  prop :size, default: :md
@@ -10,7 +10,7 @@
10
10
  <div>
11
11
  <div class="text-xl font-semibold">
12
12
  <span class="text-green-700 text-xl">
13
- <%= helpers.svg "heroicons/outline/check-badge", class: "h-5 inline -mt-1 relative" %> <span>Community</span>
13
+ <%= helpers.svg "tabler/outline/rosette-discount-check", class: "h-5 inline -mt-1 relative" %> <span>Community</span>
14
14
  </span> license
15
15
  </div>
16
16
  <div class="mt-4">
@@ -30,7 +30,7 @@
30
30
  style: :primary,
31
31
  color: :blue,
32
32
  target: '_blank',
33
- icon: 'heroicons/outline/external-link' do %>
33
+ icon: 'tabler/outline/external-link' do %>
34
34
  Get started!
35
35
  <% end %>
36
36
  </div>
@@ -1,5 +1,16 @@
1
- <div class="relative flex-1 flex flex-col items-center justify-center space-y-2 py-6 border border-dashed border-content-secondary rounded-lg">
2
- <div class="text-content-secondary text-center">
3
- <%= text %>
1
+ <%= content_tag :div, class: class_names("state", @classes) do %>
2
+ <div class="state__illustration" aria-hidden="true">
3
+ <% cards.each do |card| %>
4
+ <div class="<%= class_names("state__card", "state__card--#{card[:position]}") %>">
5
+ <div class="state__badge"><%= card[:number] %></div>
6
+
7
+ <div class="state__body">
8
+ <div class="<%= class_names("state__line", "state__line--title", "state__line--#{card[:title]}") %>"></div>
9
+ <div class="state__line state__line--content"></div>
10
+ </div>
11
+ </div>
12
+ <% end %>
4
13
  </div>
5
- </div>
14
+
15
+ <p class="state__message"><%= text %></p>
16
+ <% end %>