swop 0.1.0

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 (49) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +5 -0
  3. data/CODE_OF_CONDUCT.md +132 -0
  4. data/LICENSE +201 -0
  5. data/README.md +15 -0
  6. data/Rakefile +4 -0
  7. data/app/assets/javascripts/rails_admin/application.js.erb +32 -0
  8. data/app/assets/javascripts/rails_admin/custom/filtering-select.js +304 -0
  9. data/app/assets/javascripts/rails_admin/custom/sidescroll.js +20 -0
  10. data/app/assets/javascripts/rails_admin/custom/ui.js +11 -0
  11. data/app/assets/stylesheets/rails_admin/application.scss.erb +52 -0
  12. data/app/assets/stylesheets/rails_admin/custom/base/base.scss +5 -0
  13. data/app/assets/stylesheets/rails_admin/custom/base/bootstrap-variables.scss +196 -0
  14. data/app/assets/stylesheets/rails_admin/custom/base/mixins.scss +88 -0
  15. data/app/assets/stylesheets/rails_admin/custom/base/typography.scss +16 -0
  16. data/app/assets/stylesheets/rails_admin/custom/base/variables.scss +86 -0
  17. data/app/assets/stylesheets/rails_admin/custom/components/breadcrumbs.scss +18 -0
  18. data/app/assets/stylesheets/rails_admin/custom/components/buttons.scss +55 -0
  19. data/app/assets/stylesheets/rails_admin/custom/components/dropdowns.scss +40 -0
  20. data/app/assets/stylesheets/rails_admin/custom/components/filtering-select.scss +43 -0
  21. data/app/assets/stylesheets/rails_admin/custom/components/forms.scss +25 -0
  22. data/app/assets/stylesheets/rails_admin/custom/components/images.scss +21 -0
  23. data/app/assets/stylesheets/rails_admin/custom/components/navbar.scss +18 -0
  24. data/app/assets/stylesheets/rails_admin/custom/components/navs.scss +28 -0
  25. data/app/assets/stylesheets/rails_admin/custom/components/offcanvas.scss +18 -0
  26. data/app/assets/stylesheets/rails_admin/custom/components/progress.scss +11 -0
  27. data/app/assets/stylesheets/rails_admin/custom/components/sidebar.scss +115 -0
  28. data/app/assets/stylesheets/rails_admin/custom/components/table.scss +59 -0
  29. data/app/assets/stylesheets/rails_admin/custom/components/tiles.scss +20 -0
  30. data/app/assets/stylesheets/rails_admin/custom/layouts/body.scss +10 -0
  31. data/app/assets/stylesheets/rails_admin/custom/layouts/containers.scss +31 -0
  32. data/app/helpers/rails_admin/application_helper.rb +270 -0
  33. data/app/views/layouts/rails_admin/_sidebar_navigation.html.erb +1 -0
  34. data/app/views/layouts/rails_admin/application.html.erb +24 -0
  35. data/app/views/layouts/rails_admin/content.html.erb +57 -0
  36. data/app/views/layouts/rails_admin/custom/_nav.html.erb +10 -0
  37. data/app/views/rails_admin/main/_submit_buttons.html.erb +25 -0
  38. data/app/views/rails_admin/main/dashboard.html.erb +70 -0
  39. data/app/views/rails_admin/main/delete.html.erb +19 -0
  40. data/app/views/rails_admin/main/edit.html.erb +5 -0
  41. data/app/views/rails_admin/main/export.html.erb +128 -0
  42. data/app/views/rails_admin/main/index.html.erb +170 -0
  43. data/app/views/rails_admin/main/new.html.erb +5 -0
  44. data/app/views/rails_admin/main/show.html.erb +28 -0
  45. data/lib/swop/engine.rb +7 -0
  46. data/lib/swop/version.rb +5 -0
  47. data/lib/swop.rb +8 -0
  48. data/sig/swop.rbs +4 -0
  49. metadata +140 -0
@@ -0,0 +1,86 @@
1
+ // Colors
2
+ $white: #fff;
3
+ $black: #000;
4
+
5
+ $azure: #245ae4; // Private – Primary color
6
+ $jnquil: #ffd334; // Private – Secondary color
7
+ $lime-green: #00c648; // Private – Success color
8
+ $amethyst: #b652e4; // Private – Info color
9
+ $princeton-orange: #fc9e34; // Private – Warning color
10
+ $vermilion: #e4150a; // Private – Danger color
11
+ $ghost-white: #f3f6ff; // Private – Light color
12
+ $eerie-black: #20284e; // Private – Dark color
13
+
14
+ $dim-gray: #606884; // Private – Text color
15
+ $taupe-gray: #8C8ea2; // Private – Text secondary color
16
+
17
+ $platinum: #ecf0fa; // Private – Border color
18
+
19
+ $primary-color: $azure;
20
+ $secondary-color: $jnquil;
21
+ $success-color: $lime-green;
22
+ $info-color: $amethyst;
23
+ $warning-color: $princeton-orange;
24
+ $danger-color: $vermilion;
25
+ $light-color: $ghost-white;
26
+ $dark-color: $eerie-black;
27
+
28
+ $text-color: $dim-gray;
29
+ $text-secondary-color: $taupe-gray;
30
+
31
+ $primary-gradient: linear-gradient(125deg, lighten($primary-color, 2.5%) 0%, darken($primary-color, 2.5%) 100%);
32
+
33
+ // Spacing
34
+ $spacer: rem(4px);
35
+ $spacer-1: $spacer; // 4px
36
+ $spacer-2: $spacer * 2; // 8px
37
+ $spacer-3: $spacer * 3; // 12px
38
+ $spacer-4: $spacer * 4; // 16px
39
+ $spacer-5: $spacer * 5; // 20px
40
+ $spacer-6: $spacer * 6; // 24px
41
+ $spacer-7: $spacer * 7; // 28px
42
+ $spacer-8: $spacer * 8; // 32px
43
+ $spacer-9: $spacer * 10; // 40px
44
+ $spacer-10: $spacer * 12; // 48px
45
+ $spacer-11: $spacer * 14; // 56px
46
+
47
+ // Components
48
+ $border-width: rem(1px);
49
+ $border-color: $platinum;
50
+
51
+ $base-border-radius: rem(4px);
52
+ $md-border-radius: $base-border-radius * 2; // 8px
53
+ $sm-border-radius: $base-border-radius; // 4px
54
+ $lg-border-radius: $base-border-radius * 3; // 12px
55
+ $xl-border-radius: $base-border-radius * 5; // 16px
56
+
57
+ $md-box-shadow: 0 0 rem(16px 12px) rgba(darken($primary-color, 5%), 0.025);
58
+ $lg-box-shadow: 0 0 rem(24px 16px) rgba(darken($primary-color, 5%), 0.05);
59
+
60
+ // Typography
61
+ $body-family: "Mulish", "Helvetica Neue", Helvetica, Arial, sans-serif;
62
+
63
+ $base-font-size: rem(16px);
64
+
65
+ $md-font-size: $base-font-size; // 16px
66
+ $xs-font-size: $base-font-size * 0.786625; // 12.586px
67
+ $sm-font-size: $base-font-size * 0.8869375; // 14.191px
68
+ $lg-font-size: $base-font-size * 1.1275; // 18.04px
69
+
70
+ $fw-normal: 400;
71
+ $fw-medium: 500;
72
+ $fw-semibold: 600;
73
+ $fw-bold: 700;
74
+ $fw-extrabold: 800;
75
+
76
+ $h1-font-size: $base-font-size * 2.0544375; // 32.871px
77
+ $h2-font-size: $base-font-size * 1.822125; // 29.154px
78
+ $h3-font-size: $base-font-size * 1.6160625; // 25.857px
79
+ $h4-font-size: $base-font-size * 1.4333125; // 22.933px
80
+ $h5-font-size: $base-font-size * 1.27125; // 20.34px
81
+ $h6-font-size: $base-font-size * 1.1275; // 18.04px
82
+
83
+ $headings-family: "Mulish", "Helvetica Neue", Helvetica, Arial, sans-serif;
84
+
85
+ // Other
86
+ $md-transition: all 0.275s cubic-bezier(0.1, 0, 0.1, 1);
@@ -0,0 +1,18 @@
1
+ .breadcrumb {
2
+ font-size: $sm-font-size;
3
+ font-weight: $fw-semibold;
4
+ line-height: 1;
5
+ margin-bottom: $spacer-2;
6
+
7
+ &-item {
8
+ align-items: baseline;
9
+ display: flex;
10
+
11
+ & + .breadcrumb-item::before {
12
+ @extend .fa-sm;
13
+ @extend .fa-solid;
14
+ color: $primary-color;
15
+ content: "\f105";
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,55 @@
1
+ .btn {
2
+ letter-spacing: -0.01em;
3
+ transition: $md-transition;
4
+
5
+ &-square {
6
+ padding: 0;
7
+
8
+ &.btn-sm {
9
+ height: rem(36px);
10
+ width: rem(36px);
11
+ }
12
+ }
13
+
14
+ &-dropdown {
15
+ transition: none;
16
+ color: $text-secondary-color;
17
+
18
+ &:hover,
19
+ &.show {
20
+ background: linear-gradient($white, $white) padding-box, linear-gradient(darken($border-color, 3%), darken($border-color, 5%)) border-box;
21
+ box-shadow: 0 rem(1px 2px 0px) rgba($dark-color, 0.0875);
22
+ }
23
+ }
24
+
25
+ &-white {
26
+ background: linear-gradient($white, $white) padding-box, linear-gradient(darken($border-color, 1%), darken($border-color, 1.75%)) border-box;
27
+ box-shadow: 0 rem(2px 3px -1px) rgba($dark-color, 0.075);
28
+
29
+ @include button-variant(
30
+ $background: $white,
31
+ $border: darken($border-color, 3.25%),
32
+ $color: $dark-color,
33
+ $hover-background: $white,
34
+ $hover-border: transparent,
35
+ $hover-color: $dark-color,
36
+ $active-background: $white,
37
+ $active-border:transparent,
38
+ $active-color: $dark-color,
39
+ $disabled-background: $white,
40
+ $disabled-border: lighten($border-color, 3.25%),
41
+ $disabled-color: $text-secondary-color
42
+ );
43
+
44
+ &:hover {
45
+ background: linear-gradient($white, $white) padding-box, linear-gradient(darken($border-color, 3%), darken($border-color, 5%)) border-box;
46
+ box-shadow: 0 rem(1px 2px 0px) rgba($dark-color, 0.0875);
47
+ }
48
+
49
+ .input-group & {
50
+ background-color: $white;
51
+ border-color: $border-color;
52
+ box-shadow: none;
53
+ }
54
+ }
55
+ }
@@ -0,0 +1,40 @@
1
+ .dropdown {
2
+
3
+ &-menu {
4
+ border: $border-width solid $border-color;
5
+ box-shadow: $md-box-shadow;
6
+ }
7
+
8
+ &-item {
9
+ font-weight: $fw-semibold;
10
+
11
+ .fa-solid,
12
+ .fas {
13
+ color: $text-secondary-color;
14
+ margin-right: $spacer-2;
15
+ }
16
+ }
17
+
18
+ &-admin {
19
+
20
+ .btn {
21
+
22
+ @include media-breakpoint-up(md) {
23
+ max-width: rem(200px);
24
+ overflow: hidden;
25
+ }
26
+
27
+ @include media-breakpoint-up(xl) {
28
+ max-width: rem(225px);
29
+ }
30
+
31
+ @include media-breakpoint-up(xxl) {
32
+ max-width: rem(250px);
33
+ }
34
+
35
+ &:focus {
36
+ box-shadow: none;
37
+ }
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,43 @@
1
+ .ui {
2
+
3
+ &-widget {
4
+ font-family: $body-family;
5
+ font-size: $md-font-size;
6
+
7
+ &-content {
8
+ border: $border-width solid $border-color;
9
+
10
+ a {
11
+ color: $dark-color;
12
+ }
13
+ }
14
+ }
15
+
16
+ &-menu {
17
+ box-shadow: none;
18
+ padding: $spacer-2 0;
19
+
20
+ & &-item a {
21
+ padding: $spacer * 1.75 $spacer-4; // 7px
22
+
23
+ &.ui-state-hover,
24
+ &.ui-state-active {
25
+ background-color: rgba($dark-color, 0.05);
26
+ border: unset;
27
+ color: $dark-color;
28
+ margin: unset;
29
+ text-shadow: unset;
30
+ }
31
+
32
+ span {
33
+ color: $text-secondary-color;
34
+ }
35
+ }
36
+ }
37
+
38
+ &-autocomplete {
39
+ border-radius: $md-border-radius;
40
+ box-shadow: none;
41
+ }
42
+ }
43
+
@@ -0,0 +1,25 @@
1
+ .form {
2
+
3
+ &-switch {
4
+
5
+ .form-check-input {
6
+ margin-top: 0;
7
+ height: rem(25px);
8
+ width: rem(48px);
9
+ }
10
+ }
11
+ }
12
+
13
+ .input-group {
14
+
15
+ &-btn {
16
+ border-left: 0;
17
+
18
+ &.dropdown-toggle::after {
19
+ @extend .fa-solid;
20
+ @extend .fa-xs;
21
+ border: 0;
22
+ content: "\f078";
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,21 @@
1
+ .img {
2
+
3
+ &-wrapper {
4
+
5
+ &-avatar {
6
+ border-radius: 50%;
7
+ display: inline-block;
8
+ font-size: 0;
9
+ height: rem(42px);
10
+ line-height: 0;
11
+ overflow: hidden;
12
+ width: rem(42px);
13
+
14
+ img {
15
+ height: 100%;
16
+ object-fit: cover;
17
+ width: 100%;
18
+ }
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,18 @@
1
+ .navbar {
2
+
3
+ &-toggler {
4
+
5
+ .navbar-toggler-icon {
6
+ background-color: $dark-color;
7
+ background-image: none;
8
+ border-radius: $sm-border-radius;
9
+ display: block;
10
+ height: rem(2px);
11
+ width: rem(28px);
12
+
13
+ & + .navbar-toggler-icon {
14
+ margin-top: $spacer-2;
15
+ }
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,28 @@
1
+ .nav {
2
+
3
+ &-tabs {
4
+
5
+ &-main-show {
6
+ border: none;
7
+
8
+ li.show_member_link {
9
+ display: none
10
+ }
11
+
12
+ li.edit_member_link .dropdown-item {
13
+ @extend .btn;
14
+ @extend .btn-white;
15
+ }
16
+
17
+ li.delete_member_link .dropdown-item {
18
+ @extend .btn;
19
+ @extend .btn-danger;
20
+ margin-left: $spacer-3;
21
+
22
+ .fas {
23
+ color: $white;
24
+ }
25
+ }
26
+ }
27
+ }
28
+ }
@@ -0,0 +1,18 @@
1
+ .offcanvas {
2
+ transition: $md-transition;
3
+
4
+ &-body {
5
+ padding: $spacer-4 $spacer-3;
6
+
7
+ @include media-breakpoint-up(md) {
8
+ padding: $spacer-5 $spacer-4;
9
+ }
10
+ }
11
+
12
+ .sidebar {
13
+ display: block;
14
+ height: 100%;
15
+ position: relative;
16
+ width: 100%;
17
+ }
18
+ }
@@ -0,0 +1,11 @@
1
+ .progress {
2
+ font-weight: $fw-bold;
3
+
4
+ &-bar {
5
+ border-radius: $lg-border-radius;
6
+ padding-left: $spacer-2;
7
+ padding-right: $spacer-2;
8
+ text-align: end;
9
+ min-width: rem(28px);
10
+ }
11
+ }
@@ -0,0 +1,115 @@
1
+ .sidebar {
2
+ background-position: center;
3
+ background-repeat: no-repeat;
4
+ background-size: cover;
5
+ background: $primary-gradient;
6
+ border-radius: $xl-border-radius;
7
+ bottom: 0;
8
+ box-shadow: $lg-box-shadow;
9
+ display: none;
10
+ left: 0;
11
+ padding: $spacer-2;
12
+ position: fixed;
13
+ top: 0;
14
+ transition: $md-transition;
15
+
16
+ @include media-breakpoint-up(lg) {
17
+ bottom: $spacer-6;
18
+ display: block;
19
+ left: $spacer-4;
20
+ top: $spacer-6;
21
+ width: rem(250px);
22
+ }
23
+
24
+ li {
25
+ margin-bottom: 0 !important;
26
+
27
+ & + li .btn-toggle {
28
+ border: 0;
29
+ color: rgba($white, 0.675);
30
+ font-size: $xs-font-size;
31
+ font-weight: $fw-medium;
32
+ line-height: 1;
33
+ margin-bottom: $spacer-2;
34
+ margin-top: $spacer-2;
35
+ padding: $spacer-5 $spacer-4 $spacer-1 $spacer-4;
36
+ pointer-events: none;
37
+ position: relative;
38
+ text-align: start;
39
+ width: 100%;
40
+
41
+ &::before {
42
+ background-color: rgba($white, 0.15);
43
+ content: "";
44
+ height: $border-width;
45
+ left: 0;
46
+ margin-left: $spacer-4;
47
+ margin-right: $spacer-4;
48
+ position: absolute;
49
+ top: 0;
50
+ width: calc(100% - #{$spacer-4 * 2});
51
+ }
52
+
53
+ .fas {
54
+ display: none;
55
+ }
56
+ }
57
+ }
58
+
59
+ .nav-link {
60
+ border-radius: $base-border-radius * 2.5; // 10px
61
+ border: 0;
62
+ color: rgba($white, 0.75);
63
+ font-size: $sm-font-size;
64
+ font-weight: $fw-bold;
65
+ overflow: hidden;
66
+ padding: $spacer-2 $spacer-4;
67
+ transition: $md-transition;
68
+
69
+ &:hover {
70
+
71
+ @include media-breakpoint-up(lg) {
72
+ background-color: rgba($white, 0.05);
73
+ color: $white;
74
+ padding-left: $spacer-5;
75
+ }
76
+ }
77
+
78
+ &.active {
79
+ background-color: $white;
80
+ color: $dark-color;
81
+ font-weight: $fw-extrabold;
82
+ position: relative;
83
+
84
+ &::after {
85
+ background-color: lighten(adjust-hue($primary-color, -36%), 8%);
86
+ border-bottom-left-radius: $sm-border-radius;
87
+ border-top-left-radius: $sm-border-radius;
88
+ content: "";
89
+ height: rem(24px);
90
+ position: absolute;
91
+ right: 0;
92
+ top: 50%;
93
+ transform: translateY(-45%);
94
+ width: rem(3px);
95
+ }
96
+
97
+ &:hover {
98
+
99
+ @include media-breakpoint-up(lg) {
100
+ background-color: $white;
101
+ color: $dark-color;
102
+ padding-left: $spacer-4;
103
+ }
104
+ }
105
+
106
+ .fas {
107
+ color: $primary-color;
108
+ }
109
+ }
110
+
111
+ .fas {
112
+ margin-right: $spacer-2;
113
+ }
114
+ }
115
+ }
@@ -0,0 +1,59 @@
1
+
2
+ body.rails_admin .table {
3
+ margin-left: -$spacer-3;
4
+ margin-right: -$spacer-3;
5
+
6
+ .header {
7
+ cursor: pointer;
8
+ padding-bottom: $spacer-1;
9
+ padding-left: $spacer-3;
10
+ padding-right: $spacer-7;
11
+ position: relative;
12
+
13
+ &:after {
14
+ @extend .fa-solid;
15
+ @extend .fa-xs;
16
+ border: unset;
17
+ content: "\f077";
18
+ float: unset;
19
+ margin-top: unset;
20
+ position: absolute;
21
+ right: rem(25px);
22
+ top: 50%;
23
+ }
24
+ }
25
+
26
+ .headerSortUp::after {
27
+ @extend .fa-solid;
28
+ @extend .fa-xs;
29
+ content: "\f078";
30
+ position: absolute;
31
+ right: rem(25px);
32
+ top: 50%;
33
+ }
34
+
35
+ td {
36
+ padding: $spacer-1 $spacer-3;
37
+ }
38
+
39
+ th {
40
+ padding-bottom: $spacer-1;
41
+ padding-left: $spacer-3;
42
+ padding-right: $spacer-3;
43
+ padding-top: 0;
44
+ }
45
+
46
+ & > :not(:first-child) {
47
+ border-top: rem(1px) solid $border-color;
48
+ }
49
+
50
+ .last {
51
+ background-color: $white;
52
+ z-index: 2;
53
+ }
54
+
55
+ .sticky {
56
+ background-color: $white;
57
+ z-index: 1;
58
+ }
59
+ }
@@ -0,0 +1,20 @@
1
+ .tile {
2
+ display: flex;
3
+ justify-content: center;
4
+ align-items: center;
5
+
6
+ &-xs {
7
+ border-radius: $sm-border-radius;
8
+ font-size: $xs-font-size;
9
+ height: rem(24px);
10
+ width: rem(24px);
11
+ }
12
+
13
+ &-primary {
14
+ background-position: center;
15
+ background-repeat: no-repeat;
16
+ background-size: cover;
17
+ background: $primary-gradient;
18
+ color: $white;
19
+ }
20
+ }
@@ -0,0 +1,10 @@
1
+ body {
2
+ letter-spacing: -0.01em;
3
+
4
+ &.rails_admin {
5
+ display: flex;
6
+ flex-direction: column;
7
+ min-height: 100vh;
8
+ padding-top: 0;
9
+ }
10
+ }
@@ -0,0 +1,31 @@
1
+ .container,
2
+ .container-fluid {
3
+
4
+ @include media-breakpoint-up(md) {
5
+ padding-left: $spacer-6;
6
+ padding-right: $spacer-6;
7
+ }
8
+
9
+ @include media-breakpoint-up(lg) {
10
+ padding-left: $spacer-8;
11
+ padding-right: $spacer-8;
12
+ }
13
+
14
+ // Sidebar
15
+ .sidebar + & {
16
+ padding-bottom: $spacer-4;
17
+ padding-top: $spacer-4;
18
+
19
+ @include media-breakpoint-up(md) {
20
+ padding-bottom: $spacer-5;
21
+ padding-top: $spacer-5;
22
+ }
23
+
24
+ @include media-breakpoint-up(lg) {
25
+ margin-left: rem(250px) + $spacer-4;
26
+ padding-bottom: $spacer-6;
27
+ padding-top: $spacer-6;
28
+ width: calc(100% - 266px);
29
+ }
30
+ }
31
+ }