coveragebook_components 0.7.9 → 0.7.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/build/coco/app.css +69 -17
- data/app/assets/build/coco/app.js +54 -4
- data/app/assets/build/coco/book.css +29 -9
- data/app/assets/build/coco/book.js +24 -2
- data/app/assets/css/base/base.css +12 -0
- data/app/assets/css/base/components/coco.css +0 -3
- data/app/assets/js/app/setup.js +22 -0
- data/app/assets/js/app.js +2 -0
- data/app/assets/js/helpers/location.js +9 -0
- data/app/assets/js/libs/tippy/index.js +7 -2
- data/app/components/coco/app/elements/alert/alert.html.erb +18 -3
- data/app/components/coco/app/elements/alert/alert.rb +6 -6
- data/app/components/coco/app/elements/button/button.css +29 -5
- data/app/components/coco/app/elements/button/button.rb +2 -0
- data/app/components/coco/app/elements/button_to/button_to.css +5 -1
- data/app/components/coco/app/elements/button_to/button_to.rb +8 -1
- data/app/components/coco/app/elements/menu/menu.css +4 -0
- data/app/components/coco/app/elements/menu_button/menu_button.html.erb +6 -0
- data/app/components/coco/app/elements/menu_button/menu_button.rb +8 -9
- data/app/components/coco/app/elements/notice/notice.rb +2 -2
- data/app/components/coco/base/icon/icon.css +6 -2
- data/app/components/coco/base/icon/icon.rb +1 -1
- data/app/components/coco/base/modal/modal.css +2 -1
- data/app/components/coco/base/modal/modal.js +2 -0
- data/app/components/coco/base/modal_lightbox/modal_lightbox.js +2 -2
- data/app/components/coco/base/placeholder/placeholder.css +15 -1
- data/app/components/coco/base/placeholder/placeholder.rb +2 -0
- data/app/components/coco/concerns/acts_as_button_group.rb +25 -12
- data/app/helpers/coco/app_helper.rb +10 -2
- data/app/helpers/coco/base_helper.rb +2 -0
- data/app/helpers/coco/url_helper.rb +5 -1
- data/config/tailwind.base.config.cjs +3 -0
- data/config/tokens.cjs +3 -0
- data/lib/coco.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0e49dab540e7bcff41a931205ffb5f404ad1f43b15fad059b58ed114647df93c
|
|
4
|
+
data.tar.gz: 60d3b1861955797ab13c58b58d20647df994534bfaae136134bf888703c994f2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: aa861695cadd42ceb8dc4efa0adc6320b0a89747ec82b371c372c75f2a97c735da05e5ab4bfac03564daae497a5812f8381ccf92ecc8da02dbfa4fa094b66595
|
|
7
|
+
data.tar.gz: 5cc77f75ddb74d210d46fed6449707c627f77b0826eaf807643cec2daf98e11b082885191d882d837304233a11b11c25f28f52866dc87d8beceb6042d3e4c2f9
|
|
@@ -521,11 +521,16 @@ select{
|
|
|
521
521
|
[type='file']:focus{
|
|
522
522
|
outline: 1px solid ButtonText;
|
|
523
523
|
outline: 1px auto -webkit-focus-ring-color}
|
|
524
|
+
:root {
|
|
525
|
+
--app-height: 100%;
|
|
526
|
+
}
|
|
527
|
+
|
|
524
528
|
html{
|
|
525
529
|
scroll-behavior: smooth;
|
|
526
530
|
font-family: proxima-nova, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
527
531
|
--tw-text-opacity: 1;
|
|
528
532
|
color: rgb(17 24 39 / var(--tw-text-opacity))}
|
|
533
|
+
|
|
529
534
|
@media (prefers-reduced-motion: no-preference){
|
|
530
535
|
|
|
531
536
|
html{
|
|
@@ -685,10 +690,7 @@ select{
|
|
|
685
690
|
[data-coco]{
|
|
686
691
|
font-family: proxima-nova, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
687
692
|
--tw-text-opacity: 1;
|
|
688
|
-
color: rgb(17 24 39 / var(--tw-text-opacity))
|
|
689
|
-
|
|
690
|
-
-webkit-font-smoothing: antialiased;
|
|
691
|
-
-moz-osx-font-smoothing: grayscale}
|
|
693
|
+
color: rgb(17 24 39 / var(--tw-text-opacity))}
|
|
692
694
|
[data-coco] h1,
|
|
693
695
|
[data-coco] h2,
|
|
694
696
|
[data-coco] h3,
|
|
@@ -852,11 +854,14 @@ select{
|
|
|
852
854
|
height: 1.5rem;
|
|
853
855
|
width: 1.5rem}
|
|
854
856
|
[data-coco][data-component="icon"][data-size="xl"]{
|
|
855
|
-
height:
|
|
856
|
-
width:
|
|
857
|
+
height: 2rem;
|
|
858
|
+
width: 2rem}
|
|
857
859
|
[data-coco][data-component="icon"][data-size="xxl"]{
|
|
858
|
-
height:
|
|
859
|
-
width:
|
|
860
|
+
height: 2.5rem;
|
|
861
|
+
width: 2.5rem}
|
|
862
|
+
[data-coco][data-component="icon"][data-size="full"]{
|
|
863
|
+
height: 100%;
|
|
864
|
+
width: 100%}
|
|
860
865
|
/* Motion */
|
|
861
866
|
@keyframes spin{
|
|
862
867
|
|
|
@@ -908,7 +913,6 @@ select{
|
|
|
908
913
|
position: relative;
|
|
909
914
|
z-index: 10000;
|
|
910
915
|
display: flex;
|
|
911
|
-
min-height: 100vh;
|
|
912
916
|
align-items: center;
|
|
913
917
|
justify-content: center;
|
|
914
918
|
padding: 0.5rem}
|
|
@@ -916,6 +920,9 @@ select{
|
|
|
916
920
|
|
|
917
921
|
[data-coco][data-component="modal"] .modal-container{
|
|
918
922
|
padding: 2rem}}
|
|
923
|
+
[data-coco][data-component="modal"] .modal-container {
|
|
924
|
+
min-height: var(--app-height);
|
|
925
|
+
}
|
|
919
926
|
[data-coco][data-component="modal"] .modal-content{
|
|
920
927
|
display: contents}
|
|
921
928
|
/* transitions */
|
|
@@ -1130,13 +1137,19 @@ select{
|
|
|
1130
1137
|
--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);
|
|
1131
1138
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}
|
|
1132
1139
|
[data-coco][data-component="placeholder"]{
|
|
1140
|
+
padding: 1rem}
|
|
1141
|
+
[data-coco][data-component="placeholder"][data-boxed="true"]{
|
|
1133
1142
|
border-width: 1px;
|
|
1134
1143
|
border-style: dashed;
|
|
1135
1144
|
--tw-border-opacity: 1;
|
|
1136
1145
|
border-color: rgb(156 163 175 / var(--tw-border-opacity));
|
|
1137
1146
|
--tw-bg-opacity: 1;
|
|
1138
|
-
background-color: rgb(249 250 251 / var(--tw-bg-opacity))
|
|
1139
|
-
|
|
1147
|
+
background-color: rgb(249 250 251 / var(--tw-bg-opacity))}
|
|
1148
|
+
[data-coco][data-component="placeholder"][data-prose="true"] .placeholder-content > :not([hidden]) ~ :not([hidden]){
|
|
1149
|
+
--tw-space-y-reverse: 0;
|
|
1150
|
+
margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
|
|
1151
|
+
margin-bottom: calc(0.75rem * var(--tw-space-y-reverse))}
|
|
1152
|
+
[data-coco][data-component="placeholder"][data-prose="false"]{
|
|
1140
1153
|
text-align: center}
|
|
1141
1154
|
[data-coco][data-component="placeholder"][data-size="full"]{
|
|
1142
1155
|
height: 100%;
|
|
@@ -1793,7 +1806,9 @@ select{
|
|
|
1793
1806
|
--tw-bg-opacity: 1;
|
|
1794
1807
|
background-color: rgb(26 136 113 / var(--tw-bg-opacity));
|
|
1795
1808
|
--tw-text-opacity: 1;
|
|
1796
|
-
color: rgb(255 255 255 / var(--tw-text-opacity))
|
|
1809
|
+
color: rgb(255 255 255 / var(--tw-text-opacity));
|
|
1810
|
+
-webkit-font-smoothing: antialiased;
|
|
1811
|
+
-moz-osx-font-smoothing: grayscale}
|
|
1797
1812
|
[data-coco][data-component="app-button"][data-theme="primary"]:hover,
|
|
1798
1813
|
[data-coco][data-component="app-button"][data-theme="positive"]:hover{
|
|
1799
1814
|
--tw-bg-opacity: 1;
|
|
@@ -1908,7 +1923,9 @@ select{
|
|
|
1908
1923
|
--tw-bg-opacity: 1;
|
|
1909
1924
|
background-color: rgb(220 38 38 / var(--tw-bg-opacity));
|
|
1910
1925
|
--tw-text-opacity: 1;
|
|
1911
|
-
color: rgb(255 255 255 / var(--tw-text-opacity))
|
|
1926
|
+
color: rgb(255 255 255 / var(--tw-text-opacity));
|
|
1927
|
+
-webkit-font-smoothing: antialiased;
|
|
1928
|
+
-moz-osx-font-smoothing: grayscale}
|
|
1912
1929
|
[data-coco][data-component="app-button"][data-theme="negative"]:hover{
|
|
1913
1930
|
--tw-bg-opacity: 1;
|
|
1914
1931
|
background-color: rgb(185 28 28 / var(--tw-bg-opacity))}
|
|
@@ -1952,7 +1969,9 @@ select{
|
|
|
1952
1969
|
--tw-bg-opacity: 1;
|
|
1953
1970
|
background-color: rgb(245 158 11 / var(--tw-bg-opacity));
|
|
1954
1971
|
--tw-text-opacity: 1;
|
|
1955
|
-
color: rgb(255 255 255 / var(--tw-text-opacity))
|
|
1972
|
+
color: rgb(255 255 255 / var(--tw-text-opacity));
|
|
1973
|
+
-webkit-font-smoothing: antialiased;
|
|
1974
|
+
-moz-osx-font-smoothing: grayscale}
|
|
1956
1975
|
[data-coco][data-component="app-button"][data-theme="warning"]:hover{
|
|
1957
1976
|
--tw-bg-opacity: 1;
|
|
1958
1977
|
background-color: rgb(180 83 9 / var(--tw-bg-opacity))}
|
|
@@ -1996,7 +2015,9 @@ select{
|
|
|
1996
2015
|
--tw-bg-opacity: 1;
|
|
1997
2016
|
background-color: rgb(2 132 199 / var(--tw-bg-opacity));
|
|
1998
2017
|
--tw-text-opacity: 1;
|
|
1999
|
-
color: rgb(255 255 255 / var(--tw-text-opacity))
|
|
2018
|
+
color: rgb(255 255 255 / var(--tw-text-opacity));
|
|
2019
|
+
-webkit-font-smoothing: antialiased;
|
|
2020
|
+
-moz-osx-font-smoothing: grayscale}
|
|
2000
2021
|
[data-coco][data-component="app-button"][data-theme="info"]:hover{
|
|
2001
2022
|
--tw-bg-opacity: 1;
|
|
2002
2023
|
background-color: rgb(3 105 161 / var(--tw-bg-opacity))}
|
|
@@ -2040,7 +2061,9 @@ select{
|
|
|
2040
2061
|
--tw-bg-opacity: 1;
|
|
2041
2062
|
background-color: rgb(17 24 39 / var(--tw-bg-opacity));
|
|
2042
2063
|
--tw-text-opacity: 1;
|
|
2043
|
-
color: rgb(255 255 255 / var(--tw-text-opacity))
|
|
2064
|
+
color: rgb(255 255 255 / var(--tw-text-opacity));
|
|
2065
|
+
-webkit-font-smoothing: antialiased;
|
|
2066
|
+
-moz-osx-font-smoothing: grayscale}
|
|
2044
2067
|
[data-coco][data-component="app-button"][data-theme="neutral-dark"]:hover{
|
|
2045
2068
|
--tw-bg-opacity: 1;
|
|
2046
2069
|
background-color: rgb(55 65 81 / var(--tw-bg-opacity))}
|
|
@@ -2078,6 +2101,28 @@ select{
|
|
|
2078
2101
|
background-color: rgb(255 255 255 / var(--tw-bg-opacity))}
|
|
2079
2102
|
[data-coco][data-component="app-button"][data-theme="neutral-light"][data-disabled="true"] .button-inner{
|
|
2080
2103
|
opacity: 0.4}
|
|
2104
|
+
[data-coco][data-component="app-button"][data-theme="text-neutral-light"]{
|
|
2105
|
+
background-color: transparent;
|
|
2106
|
+
--tw-text-opacity: 1;
|
|
2107
|
+
color: rgb(255 255 255 / var(--tw-text-opacity));
|
|
2108
|
+
-webkit-font-smoothing: antialiased;
|
|
2109
|
+
-moz-osx-font-smoothing: grayscale}
|
|
2110
|
+
[data-coco][data-component="app-button"][data-theme="text-neutral-light"]:hover{
|
|
2111
|
+
background-color: rgb(255 255 255 / 0.1)}
|
|
2112
|
+
[data-coco][data-component="app-button"][data-theme="text-neutral-light"][data-state="active"]{
|
|
2113
|
+
background-color: rgb(255 255 255 / 0.1)}
|
|
2114
|
+
[data-coco][data-component="app-button"][data-theme="text-neutral-light"][data-disabled="true"]{
|
|
2115
|
+
opacity: 0.3}
|
|
2116
|
+
[data-coco][data-component="app-button"][data-theme="text-neutral-dark"]{
|
|
2117
|
+
background-color: transparent;
|
|
2118
|
+
--tw-text-opacity: 1;
|
|
2119
|
+
color: rgb(17 24 39 / var(--tw-text-opacity))}
|
|
2120
|
+
[data-coco][data-component="app-button"][data-theme="text-neutral-dark"]:hover{
|
|
2121
|
+
background-color: rgb(17 24 39 / 0.1)}
|
|
2122
|
+
[data-coco][data-component="app-button"][data-theme="text-neutral-dark"][data-state="active"]{
|
|
2123
|
+
background-color: rgb(17 24 39 / 0.1)}
|
|
2124
|
+
[data-coco][data-component="app-button"][data-theme="text-neutral-dark"][data-disabled="true"]{
|
|
2125
|
+
opacity: 0.3}
|
|
2081
2126
|
/* Responsive resizing */
|
|
2082
2127
|
[data-coco][data-component="app-button"][data-size="sm"] .button-content{
|
|
2083
2128
|
font-size: 14px;
|
|
@@ -2556,11 +2601,13 @@ select{
|
|
|
2556
2601
|
--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
|
|
2557
2602
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}
|
|
2558
2603
|
[data-coco][data-component="app-button-to"]{
|
|
2559
|
-
display:
|
|
2604
|
+
display: flex;
|
|
2560
2605
|
width: -moz-max-content;
|
|
2561
2606
|
width: max-content}
|
|
2562
2607
|
[data-coco][data-component="app-button-to"] form{
|
|
2563
2608
|
width: 100%}
|
|
2609
|
+
[data-coco][data-component="app-button-to"][data-fit="full"]{
|
|
2610
|
+
width: 100%}
|
|
2564
2611
|
[data-coco][data-component="app-color-picker"]{
|
|
2565
2612
|
--tw-bg-opacity: 1;
|
|
2566
2613
|
background-color: rgb(249 250 251 / var(--tw-bg-opacity))}
|
|
@@ -3212,6 +3259,9 @@ select{
|
|
|
3212
3259
|
text-align: left}
|
|
3213
3260
|
[data-coco][data-component="app-menu"] .menu-item > [data-component="app-button"] .button-content, [data-coco][data-component="app-menu"] .menu-item > [data-component="app-button-to"] .button-content, [data-coco][data-component="app-menu"] .menu-item > [data-component="app-menu-button"] .button-content{
|
|
3214
3261
|
font-weight: 400 !important}
|
|
3262
|
+
[data-coco][data-component="app-menu"] .menu-item .divider{
|
|
3263
|
+
margin-top: 0.375rem;
|
|
3264
|
+
margin-bottom: 0.375rem}
|
|
3215
3265
|
[data-coco][data-component="app-menu"][data-size="sm"]{
|
|
3216
3266
|
padding-top: 0.375rem;
|
|
3217
3267
|
padding-bottom: 0.375rem}
|
|
@@ -3899,6 +3949,8 @@ select{
|
|
|
3899
3949
|
position: static}
|
|
3900
3950
|
.fixed{
|
|
3901
3951
|
position: fixed}
|
|
3952
|
+
.\!block{
|
|
3953
|
+
display: block !important}
|
|
3902
3954
|
.block{
|
|
3903
3955
|
display: block}
|
|
3904
3956
|
.flex{
|
|
@@ -6118,7 +6118,8 @@
|
|
|
6118
6118
|
primary: {
|
|
6119
6119
|
DEFAULT: colors.green[500],
|
|
6120
6120
|
dark: colors.green[600],
|
|
6121
|
-
inverse: colors.green[300]
|
|
6121
|
+
inverse: colors.green[300],
|
|
6122
|
+
"inverse-vivid": "#009979"
|
|
6122
6123
|
},
|
|
6123
6124
|
negative: {
|
|
6124
6125
|
DEFAULT: colors.red[600],
|
|
@@ -6150,6 +6151,7 @@
|
|
|
6150
6151
|
xl: "1200px",
|
|
6151
6152
|
"2xl": "1400px",
|
|
6152
6153
|
max: "1800px",
|
|
6154
|
+
"small-landscape": { raw: "(max-height: 760px) and (min-width: 576px)" },
|
|
6153
6155
|
print: { raw: "print" }
|
|
6154
6156
|
// Note: PDFs are rendered at a viewport width of 1280px
|
|
6155
6157
|
};
|
|
@@ -6158,6 +6160,7 @@
|
|
|
6158
6160
|
"para-sm": ["14px", "20px"],
|
|
6159
6161
|
"para-md": ["16px", "24px"],
|
|
6160
6162
|
"para-lg": ["18px", "27px"],
|
|
6163
|
+
"label-xxs": ["10px", "12px"],
|
|
6161
6164
|
"label-xs": ["12px", "14px"],
|
|
6162
6165
|
"label-sm": ["14px", "16px"],
|
|
6163
6166
|
"label-md": ["16px", "20px"],
|
|
@@ -14032,7 +14035,7 @@
|
|
|
14032
14035
|
var package_default = {
|
|
14033
14036
|
name: "coveragebook-components",
|
|
14034
14037
|
type: "module",
|
|
14035
|
-
version: "0.7.
|
|
14038
|
+
version: "0.7.10",
|
|
14036
14039
|
main: "index.js",
|
|
14037
14040
|
repository: "git@github.com:coveragebook/coco.git",
|
|
14038
14041
|
author: "Mark Perkins <mark@coveragebook.com>",
|
|
@@ -23006,6 +23009,27 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
|
23006
23009
|
tippy.defaultProps = defaultProps;
|
|
23007
23010
|
tippy.setDefaultProps = setDefaultProps;
|
|
23008
23011
|
tippy.currentInput = currentInput;
|
|
23012
|
+
var hideAll = function hideAll2(_temp) {
|
|
23013
|
+
var _ref = _temp === void 0 ? {} : _temp, excludedReferenceOrInstance = _ref.exclude, duration = _ref.duration;
|
|
23014
|
+
mountedInstances.forEach(function(instance) {
|
|
23015
|
+
var isExcluded = false;
|
|
23016
|
+
if (excludedReferenceOrInstance) {
|
|
23017
|
+
isExcluded = isReferenceElement(excludedReferenceOrInstance) ? instance.reference === excludedReferenceOrInstance : instance.popper === excludedReferenceOrInstance.popper;
|
|
23018
|
+
}
|
|
23019
|
+
if (!isExcluded) {
|
|
23020
|
+
var originalDuration = instance.props.duration;
|
|
23021
|
+
instance.setProps({
|
|
23022
|
+
duration
|
|
23023
|
+
});
|
|
23024
|
+
instance.hide();
|
|
23025
|
+
if (!instance.state.isDestroyed) {
|
|
23026
|
+
instance.setProps({
|
|
23027
|
+
duration: originalDuration
|
|
23028
|
+
});
|
|
23029
|
+
}
|
|
23030
|
+
}
|
|
23031
|
+
});
|
|
23032
|
+
};
|
|
23009
23033
|
var applyStylesModifier = Object.assign({}, applyStyles_default, {
|
|
23010
23034
|
effect: function effect6(_ref) {
|
|
23011
23035
|
var state = _ref.state;
|
|
@@ -23662,6 +23686,31 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
|
23662
23686
|
module_default.plugin(notification_default);
|
|
23663
23687
|
var alpine_default2 = module_default;
|
|
23664
23688
|
|
|
23689
|
+
// helpers/location.js
|
|
23690
|
+
function navigateTo(url, options = {}) {
|
|
23691
|
+
if (window.Turbo && options.turbo === true) {
|
|
23692
|
+
window.Turbo.visit(url, { action: options.action || "advance" });
|
|
23693
|
+
} else {
|
|
23694
|
+
location.assign(url);
|
|
23695
|
+
}
|
|
23696
|
+
}
|
|
23697
|
+
|
|
23698
|
+
// app/setup.js
|
|
23699
|
+
window.addEventListener("navigate", (event) => {
|
|
23700
|
+
const { url, turbo, action } = event.detail;
|
|
23701
|
+
if (url) {
|
|
23702
|
+
navigateTo(url, { turbo, action });
|
|
23703
|
+
}
|
|
23704
|
+
});
|
|
23705
|
+
function setAppHeightProperty() {
|
|
23706
|
+
document.documentElement.style.setProperty(
|
|
23707
|
+
"--app-height",
|
|
23708
|
+
`${window.innerHeight}px`
|
|
23709
|
+
);
|
|
23710
|
+
}
|
|
23711
|
+
window.addEventListener("resize", setAppHeightProperty);
|
|
23712
|
+
setAppHeightProperty();
|
|
23713
|
+
|
|
23665
23714
|
// ../../components/coco/base/button/button.js
|
|
23666
23715
|
var button_exports = {};
|
|
23667
23716
|
__export(button_exports, {
|
|
@@ -23962,6 +24011,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
|
23962
24011
|
},
|
|
23963
24012
|
show() {
|
|
23964
24013
|
this.open = true;
|
|
24014
|
+
hideAll();
|
|
23965
24015
|
setTimeout(() => {
|
|
23966
24016
|
this.$dispatch("modal:shown");
|
|
23967
24017
|
}, 400);
|
|
@@ -24080,12 +24130,12 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
|
24080
24130
|
},
|
|
24081
24131
|
imageLoaded() {
|
|
24082
24132
|
this.loaded = true;
|
|
24083
|
-
|
|
24133
|
+
setTimeout(() => {
|
|
24084
24134
|
const scrollTop = parseInt(this.img.dataset.scrollTop, 10);
|
|
24085
24135
|
if (!isNaN(scrollTop) && scrollTop !== 0) {
|
|
24086
24136
|
this.modal.scrollTo(scrollTop);
|
|
24087
24137
|
}
|
|
24088
|
-
});
|
|
24138
|
+
}, 200);
|
|
24089
24139
|
},
|
|
24090
24140
|
get img() {
|
|
24091
24141
|
return this.$refs.media.querySelector("img");
|
|
@@ -542,12 +542,17 @@ select {
|
|
|
542
542
|
outline: 1px solid ButtonText;
|
|
543
543
|
outline: 1px auto -webkit-focus-ring-color;
|
|
544
544
|
}
|
|
545
|
+
:root {
|
|
546
|
+
--app-height: 100%;
|
|
547
|
+
}
|
|
548
|
+
|
|
545
549
|
html {
|
|
546
550
|
scroll-behavior: smooth;
|
|
547
551
|
font-family: proxima-nova, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
548
552
|
--tw-text-opacity: 1;
|
|
549
553
|
color: rgb(17 24 39 / var(--tw-text-opacity));
|
|
550
554
|
}
|
|
555
|
+
|
|
551
556
|
@media (prefers-reduced-motion: no-preference) {
|
|
552
557
|
|
|
553
558
|
html {
|
|
@@ -723,9 +728,6 @@ select {
|
|
|
723
728
|
font-family: proxima-nova, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
724
729
|
--tw-text-opacity: 1;
|
|
725
730
|
color: rgb(17 24 39 / var(--tw-text-opacity));
|
|
726
|
-
|
|
727
|
-
-webkit-font-smoothing: antialiased;
|
|
728
|
-
-moz-osx-font-smoothing: grayscale;
|
|
729
731
|
}
|
|
730
732
|
[data-coco] h1,
|
|
731
733
|
[data-coco] h2,
|
|
@@ -905,12 +907,16 @@ select {
|
|
|
905
907
|
width: 1.5rem;
|
|
906
908
|
}
|
|
907
909
|
[data-coco][data-component="icon"][data-size="xl"] {
|
|
908
|
-
height:
|
|
909
|
-
width:
|
|
910
|
+
height: 2rem;
|
|
911
|
+
width: 2rem;
|
|
910
912
|
}
|
|
911
913
|
[data-coco][data-component="icon"][data-size="xxl"] {
|
|
912
|
-
height:
|
|
913
|
-
width:
|
|
914
|
+
height: 2.5rem;
|
|
915
|
+
width: 2.5rem;
|
|
916
|
+
}
|
|
917
|
+
[data-coco][data-component="icon"][data-size="full"] {
|
|
918
|
+
height: 100%;
|
|
919
|
+
width: 100%;
|
|
914
920
|
}
|
|
915
921
|
/* Motion */
|
|
916
922
|
@keyframes spin {
|
|
@@ -980,7 +986,6 @@ select {
|
|
|
980
986
|
position: relative;
|
|
981
987
|
z-index: 10000;
|
|
982
988
|
display: flex;
|
|
983
|
-
min-height: 100vh;
|
|
984
989
|
align-items: center;
|
|
985
990
|
justify-content: center;
|
|
986
991
|
padding: 0.5rem;
|
|
@@ -991,6 +996,9 @@ select {
|
|
|
991
996
|
padding: 2rem;
|
|
992
997
|
}
|
|
993
998
|
}
|
|
999
|
+
[data-coco][data-component="modal"] .modal-container {
|
|
1000
|
+
min-height: var(--app-height);
|
|
1001
|
+
}
|
|
994
1002
|
[data-coco][data-component="modal"] .modal-content {
|
|
995
1003
|
display: contents;
|
|
996
1004
|
}
|
|
@@ -1253,13 +1261,22 @@ select {
|
|
|
1253
1261
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
1254
1262
|
}
|
|
1255
1263
|
[data-coco][data-component="placeholder"] {
|
|
1264
|
+
padding: 1rem;
|
|
1265
|
+
}
|
|
1266
|
+
[data-coco][data-component="placeholder"][data-boxed="true"] {
|
|
1256
1267
|
border-width: 1px;
|
|
1257
1268
|
border-style: dashed;
|
|
1258
1269
|
--tw-border-opacity: 1;
|
|
1259
1270
|
border-color: rgb(156 163 175 / var(--tw-border-opacity));
|
|
1260
1271
|
--tw-bg-opacity: 1;
|
|
1261
1272
|
background-color: rgb(249 250 251 / var(--tw-bg-opacity));
|
|
1262
|
-
|
|
1273
|
+
}
|
|
1274
|
+
[data-coco][data-component="placeholder"][data-prose="true"] .placeholder-content > :not([hidden]) ~ :not([hidden]) {
|
|
1275
|
+
--tw-space-y-reverse: 0;
|
|
1276
|
+
margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
|
|
1277
|
+
margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
|
|
1278
|
+
}
|
|
1279
|
+
[data-coco][data-component="placeholder"][data-prose="false"] {
|
|
1263
1280
|
text-align: center;
|
|
1264
1281
|
}
|
|
1265
1282
|
[data-coco][data-component="placeholder"][data-size="full"] {
|
|
@@ -1755,6 +1772,9 @@ select {
|
|
|
1755
1772
|
.fixed {
|
|
1756
1773
|
position: fixed;
|
|
1757
1774
|
}
|
|
1775
|
+
.\!block {
|
|
1776
|
+
display: block !important;
|
|
1777
|
+
}
|
|
1758
1778
|
.block {
|
|
1759
1779
|
display: block;
|
|
1760
1780
|
}
|
|
@@ -14395,6 +14395,27 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
|
14395
14395
|
tippy.defaultProps = defaultProps;
|
|
14396
14396
|
tippy.setDefaultProps = setDefaultProps;
|
|
14397
14397
|
tippy.currentInput = currentInput;
|
|
14398
|
+
var hideAll = function hideAll2(_temp) {
|
|
14399
|
+
var _ref = _temp === void 0 ? {} : _temp, excludedReferenceOrInstance = _ref.exclude, duration = _ref.duration;
|
|
14400
|
+
mountedInstances.forEach(function(instance) {
|
|
14401
|
+
var isExcluded = false;
|
|
14402
|
+
if (excludedReferenceOrInstance) {
|
|
14403
|
+
isExcluded = isReferenceElement(excludedReferenceOrInstance) ? instance.reference === excludedReferenceOrInstance : instance.popper === excludedReferenceOrInstance.popper;
|
|
14404
|
+
}
|
|
14405
|
+
if (!isExcluded) {
|
|
14406
|
+
var originalDuration = instance.props.duration;
|
|
14407
|
+
instance.setProps({
|
|
14408
|
+
duration
|
|
14409
|
+
});
|
|
14410
|
+
instance.hide();
|
|
14411
|
+
if (!instance.state.isDestroyed) {
|
|
14412
|
+
instance.setProps({
|
|
14413
|
+
duration: originalDuration
|
|
14414
|
+
});
|
|
14415
|
+
}
|
|
14416
|
+
}
|
|
14417
|
+
});
|
|
14418
|
+
};
|
|
14398
14419
|
var applyStylesModifier = Object.assign({}, applyStyles_default, {
|
|
14399
14420
|
effect: function effect6(_ref) {
|
|
14400
14421
|
var state = _ref.state;
|
|
@@ -15188,6 +15209,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
|
15188
15209
|
},
|
|
15189
15210
|
show() {
|
|
15190
15211
|
this.open = true;
|
|
15212
|
+
hideAll();
|
|
15191
15213
|
setTimeout(() => {
|
|
15192
15214
|
this.$dispatch("modal:shown");
|
|
15193
15215
|
}, 400);
|
|
@@ -15306,12 +15328,12 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
|
15306
15328
|
},
|
|
15307
15329
|
imageLoaded() {
|
|
15308
15330
|
this.loaded = true;
|
|
15309
|
-
|
|
15331
|
+
setTimeout(() => {
|
|
15310
15332
|
const scrollTop = parseInt(this.img.dataset.scrollTop, 10);
|
|
15311
15333
|
if (!isNaN(scrollTop) && scrollTop !== 0) {
|
|
15312
15334
|
this.modal.scrollTo(scrollTop);
|
|
15313
15335
|
}
|
|
15314
|
-
});
|
|
15336
|
+
}, 200);
|
|
15315
15337
|
},
|
|
15316
15338
|
get img() {
|
|
15317
15339
|
return this.$refs.media.querySelector("img");
|
|
@@ -10,10 +10,22 @@
|
|
|
10
10
|
@import "./components/coco";
|
|
11
11
|
|
|
12
12
|
@layer base {
|
|
13
|
+
:root {
|
|
14
|
+
--app-height: 100%;
|
|
15
|
+
}
|
|
16
|
+
|
|
13
17
|
html {
|
|
14
18
|
@apply font-body scroll-smooth motion-safe:scroll-auto text-content-dark-1;
|
|
15
19
|
}
|
|
16
20
|
|
|
21
|
+
html.app-layout,
|
|
22
|
+
html.app-layout body {
|
|
23
|
+
width: 100vw;
|
|
24
|
+
height: 100vh;
|
|
25
|
+
height: var(—-app-height);
|
|
26
|
+
overflow: hidden;
|
|
27
|
+
}
|
|
28
|
+
|
|
17
29
|
a {
|
|
18
30
|
@apply text-current underline underline-offset-2;
|
|
19
31
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { navigateTo } from "@helpers/location";
|
|
2
|
+
|
|
3
|
+
// Global JS navigation handler.
|
|
4
|
+
// Optionally uses Turbo for the page navigation.
|
|
5
|
+
window.addEventListener("navigate", (event) => {
|
|
6
|
+
const { url, turbo, action } = event.detail;
|
|
7
|
+
if (url) {
|
|
8
|
+
navigateTo(url, { turbo, action });
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
// Uodate the value of the `--app-height` css variable
|
|
13
|
+
// when the viewport size changes. To help work around the
|
|
14
|
+
// issues when using 100vh on mobile safari (https://medium.com/quick-code/100vh-problem-with-ios-safari-92ab23c852a8)
|
|
15
|
+
function setAppHeightProperty() {
|
|
16
|
+
document.documentElement.style.setProperty(
|
|
17
|
+
"--app-height",
|
|
18
|
+
`${window.innerHeight}px`
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
window.addEventListener("resize", setAppHeightProperty);
|
|
22
|
+
setAppHeightProperty();
|
data/app/assets/js/app.js
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import tippy, {
|
|
1
|
+
import tippy, {
|
|
2
|
+
createSingleton,
|
|
3
|
+
followCursor,
|
|
4
|
+
roundArrow,
|
|
5
|
+
hideAll,
|
|
6
|
+
} from "tippy.js";
|
|
2
7
|
import hideOnEsc from "./plugins/hide_on_esc";
|
|
3
8
|
|
|
4
9
|
tippy.setDefaultProps({
|
|
@@ -9,4 +14,4 @@ tippy.setDefaultProps({
|
|
|
9
14
|
});
|
|
10
15
|
|
|
11
16
|
export default tippy;
|
|
12
|
-
export { tippy, createSingleton, hideOnEsc, followCursor };
|
|
17
|
+
export { tippy, createSingleton, hideOnEsc, followCursor, hideAll };
|
|
@@ -24,7 +24,12 @@
|
|
|
24
24
|
|
|
25
25
|
<% if link? %>
|
|
26
26
|
<div class="alert-link" data-role="link">
|
|
27
|
-
<%=
|
|
27
|
+
<%= helpers.coco_link(
|
|
28
|
+
*@link_data[:args],
|
|
29
|
+
**@link_data[:kwargs],
|
|
30
|
+
size: :sm,
|
|
31
|
+
&@link_data[:block]
|
|
32
|
+
) %>
|
|
28
33
|
</div>
|
|
29
34
|
<% end %>
|
|
30
35
|
</div>
|
|
@@ -36,7 +41,12 @@
|
|
|
36
41
|
x-ref="action"
|
|
37
42
|
@click="dismiss"
|
|
38
43
|
data-role="action">
|
|
39
|
-
<%=
|
|
44
|
+
<%= coco_button(
|
|
45
|
+
*@action_data[:args],
|
|
46
|
+
**@action_data[:kwargs],
|
|
47
|
+
size: :sm,
|
|
48
|
+
&@action_data[:block]
|
|
49
|
+
) %>
|
|
40
50
|
</div>
|
|
41
51
|
<% end %>
|
|
42
52
|
|
|
@@ -45,7 +55,12 @@
|
|
|
45
55
|
x-ref="secondaryAction"
|
|
46
56
|
@click="dismiss"
|
|
47
57
|
data-role="secondary-action">
|
|
48
|
-
<%=
|
|
58
|
+
<%= coco_button(
|
|
59
|
+
*@secondary_action_data[:args],
|
|
60
|
+
**@secondary_action_data[:kwargs],
|
|
61
|
+
size: :sm,
|
|
62
|
+
&@secondary_action_data[:block]
|
|
63
|
+
) %>
|
|
49
64
|
</div>
|
|
50
65
|
<% end %>
|
|
51
66
|
</div>
|
|
@@ -25,19 +25,19 @@ module Coco
|
|
|
25
25
|
|
|
26
26
|
renders_one :title
|
|
27
27
|
|
|
28
|
-
renders_one :action, ->(**kwargs, &block) do
|
|
28
|
+
renders_one :action, ->(*args, **kwargs, &block) do
|
|
29
29
|
theme = vivid? ? "neutral-dark" : get_option_value(:theme)
|
|
30
|
-
|
|
30
|
+
@action_data = {args: args, kwargs: kwargs.merge(theme: theme), block: block}
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
renders_one :secondary_action, ->(**kwargs, &block) do
|
|
33
|
+
renders_one :secondary_action, ->(*args, **kwargs, &block) do
|
|
34
34
|
theme = vivid? ? "neutral-light" : "text-#{get_option_value(:theme)}"
|
|
35
|
-
|
|
35
|
+
@secondary_action_data = {args: args, kwargs: kwargs.merge(theme: theme), block: block}
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
renders_one :link, ->(**kwargs, &block) do
|
|
38
|
+
renders_one :link, ->(*args, **kwargs, &block) do
|
|
39
39
|
theme = vivid? ? nil : unvividify(get_option_value(:theme))
|
|
40
|
-
|
|
40
|
+
@link_data = {args: args, kwargs: kwargs.merge(theme: theme), block: block}
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
before_render do
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
&[data-theme="primary"],
|
|
15
15
|
&[data-theme="positive"] {
|
|
16
|
-
@apply bg-background-primary text-content-light-1 hover:bg-primary-600 active:bg-primary-700;
|
|
16
|
+
@apply bg-background-primary text-content-light-1 hover:bg-primary-600 active:bg-primary-700 antialiased;
|
|
17
17
|
|
|
18
18
|
&[data-state="loading"] {
|
|
19
19
|
@apply bg-background-primary;
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
&[data-theme="negative"] {
|
|
108
|
-
@apply bg-background-negative text-content-light-1 hover:bg-negative-700 active:bg-negative-800;
|
|
108
|
+
@apply bg-background-negative text-content-light-1 hover:bg-negative-700 active:bg-negative-800 antialiased;
|
|
109
109
|
|
|
110
110
|
&[data-state="loading"] {
|
|
111
111
|
@apply bg-background-negative;
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
}
|
|
146
146
|
|
|
147
147
|
&[data-theme="warning"] {
|
|
148
|
-
@apply bg-background-warning text-content-light-1 hover:bg-warning-700 active:bg-warning-800;
|
|
148
|
+
@apply bg-background-warning text-content-light-1 hover:bg-warning-700 active:bg-warning-800 antialiased;
|
|
149
149
|
|
|
150
150
|
&[data-state="loading"] {
|
|
151
151
|
@apply bg-background-warning;
|
|
@@ -185,7 +185,7 @@
|
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
&[data-theme="info"] {
|
|
188
|
-
@apply bg-background-info text-content-light-1 hover:bg-info-700 active:bg-info-800;
|
|
188
|
+
@apply bg-background-info text-content-light-1 hover:bg-info-700 active:bg-info-800 antialiased;
|
|
189
189
|
|
|
190
190
|
&[data-state="loading"] {
|
|
191
191
|
@apply bg-background-info;
|
|
@@ -225,7 +225,7 @@
|
|
|
225
225
|
}
|
|
226
226
|
|
|
227
227
|
&[data-theme="neutral-dark"] {
|
|
228
|
-
@apply bg-background-dark-1 text-content-light-1 hover:bg-gray-700 active:bg-gray-600;
|
|
228
|
+
@apply bg-background-dark-1 text-content-light-1 hover:bg-gray-700 active:bg-gray-600 antialiased;
|
|
229
229
|
|
|
230
230
|
&[data-state="loading"] {
|
|
231
231
|
@apply bg-background-dark-1;
|
|
@@ -260,6 +260,30 @@
|
|
|
260
260
|
}
|
|
261
261
|
}
|
|
262
262
|
|
|
263
|
+
&[data-theme="text-neutral-light"] {
|
|
264
|
+
@apply bg-transparent text-content-light-1 hover:bg-content-light-1/10 antialiased;
|
|
265
|
+
|
|
266
|
+
&[data-state="active"] {
|
|
267
|
+
@apply bg-content-light-1/10;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
&[data-disabled="true"] {
|
|
271
|
+
@apply opacity-30;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
&[data-theme="text-neutral-dark"] {
|
|
276
|
+
@apply bg-transparent text-content-dark-1 hover:bg-content-dark-1/10;
|
|
277
|
+
|
|
278
|
+
&[data-state="active"] {
|
|
279
|
+
@apply bg-content-dark-1/10;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
&[data-disabled="true"] {
|
|
283
|
+
@apply opacity-30;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
263
287
|
/* Responsive resizing */
|
|
264
288
|
|
|
265
289
|
&[data-size="sm"] {
|
|
@@ -3,9 +3,16 @@ module Coco
|
|
|
3
3
|
module Elements
|
|
4
4
|
class ButtonTo < Coco::Component
|
|
5
5
|
include Concerns::WrapsComponent
|
|
6
|
+
include Concerns::AcceptsOptions
|
|
7
|
+
|
|
8
|
+
accepts_option :fit, from: [:auto, :full]
|
|
6
9
|
|
|
7
10
|
wraps_component :button do |args|
|
|
8
|
-
Coco::App::Elements::Button.new(
|
|
11
|
+
Coco::App::Elements::Button.new(
|
|
12
|
+
type: :submit,
|
|
13
|
+
fit: get_option_value(:fit) || :auto,
|
|
14
|
+
**args
|
|
15
|
+
)
|
|
9
16
|
end
|
|
10
17
|
|
|
11
18
|
%i[confirmation].each do |slot_name|
|
|
@@ -3,11 +3,17 @@ module Coco
|
|
|
3
3
|
module Elements
|
|
4
4
|
class MenuButton < Coco::Component
|
|
5
5
|
include Concerns::AcceptsOptions
|
|
6
|
+
include Concerns::WithIcon
|
|
6
7
|
include Concerns::WrapsComponent
|
|
7
8
|
include Coco::AppHelper
|
|
8
9
|
|
|
9
|
-
wraps_component :button do |
|
|
10
|
-
|
|
10
|
+
wraps_component :button do |kwargs|
|
|
11
|
+
@size = kwargs.fetch(:size, :default)&.to_sym
|
|
12
|
+
if @size.in?(Coco::App::Elements::Button::SIZE_ALIASES.keys) && !kwargs.key?(:resize)
|
|
13
|
+
@size, @resize = Coco::App::Elements::Button::SIZE_ALIASES.fetch(@size)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
Coco::App::Elements::Button.new(toggle: :vertical, fit: get_option_value(:fit) || :auto, **kwargs)
|
|
11
17
|
end
|
|
12
18
|
|
|
13
19
|
accepts_option :fit, from: [:auto, :full]
|
|
@@ -20,13 +26,6 @@ module Coco
|
|
|
20
26
|
|
|
21
27
|
attr_reader :size, :resize
|
|
22
28
|
|
|
23
|
-
def initialize(button: {}, **kwargs)
|
|
24
|
-
@size = kwargs.fetch(:size, :default)&.to_sym
|
|
25
|
-
if @size.in?(Coco::App::Elements::Button::SIZE_ALIASES.keys) && !kwargs.key?(:resize)
|
|
26
|
-
@size, @resize = Coco::App::Elements::Button::SIZE_ALIASES.fetch(@size)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
29
|
def button_text
|
|
31
30
|
text || content
|
|
32
31
|
end
|
|
@@ -12,8 +12,8 @@ module Coco
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
%i[title action secondary_action link].each do |slot_name|
|
|
15
|
-
renders_one slot_name, ->(**kwargs, &block) do
|
|
16
|
-
alert.send("with_#{slot_name}".to_sym, **kwargs, &block)
|
|
15
|
+
renders_one slot_name, ->(*args, **kwargs, &block) do
|
|
16
|
+
alert.send("with_#{slot_name}".to_sym, *args, **kwargs, &block)
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -6,7 +6,7 @@ module Coco
|
|
|
6
6
|
|
|
7
7
|
InvalidIconError = Class.new(StandardError)
|
|
8
8
|
|
|
9
|
-
accepts_option :size, from: %i[xs sm md lg xl xxl]
|
|
9
|
+
accepts_option :size, from: %i[xs sm md lg xl xxl full]
|
|
10
10
|
accepts_option :spin, from: [true, false]
|
|
11
11
|
accepts_option :style, from: [:line, :fill, :custom]
|
|
12
12
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CocoComponent } from "@js/coco";
|
|
2
|
+
import { hideAll } from "@libs/tippy";
|
|
2
3
|
|
|
3
4
|
export default CocoComponent("modal", () => {
|
|
4
5
|
return {
|
|
@@ -19,6 +20,7 @@ export default CocoComponent("modal", () => {
|
|
|
19
20
|
|
|
20
21
|
show() {
|
|
21
22
|
this.open = true;
|
|
23
|
+
hideAll();
|
|
22
24
|
setTimeout(() => {
|
|
23
25
|
this.$dispatch("modal:shown");
|
|
24
26
|
}, 400);
|
|
@@ -16,12 +16,12 @@ export default CocoComponent("modalLightbox", () => {
|
|
|
16
16
|
|
|
17
17
|
imageLoaded() {
|
|
18
18
|
this.loaded = true;
|
|
19
|
-
|
|
19
|
+
setTimeout(() => {
|
|
20
20
|
const scrollTop = parseInt(this.img.dataset.scrollTop, 10);
|
|
21
21
|
if (!isNaN(scrollTop) && scrollTop !== 0) {
|
|
22
22
|
this.modal.scrollTo(scrollTop);
|
|
23
23
|
}
|
|
24
|
-
});
|
|
24
|
+
}, 200);
|
|
25
25
|
},
|
|
26
26
|
|
|
27
27
|
get img() {
|
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
@layer components {
|
|
2
2
|
[data-coco][data-component="placeholder"] {
|
|
3
|
-
@apply
|
|
3
|
+
@apply p-4;
|
|
4
|
+
|
|
5
|
+
&[data-boxed="true"] {
|
|
6
|
+
@apply border border-dashed border-gray-400 bg-gray-50;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
&[data-prose="true"] {
|
|
10
|
+
.placeholder-content {
|
|
11
|
+
@apply space-y-3;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
&[data-prose="false"] {
|
|
16
|
+
@apply text-center;
|
|
17
|
+
}
|
|
4
18
|
|
|
5
19
|
&[data-size="full"] {
|
|
6
20
|
@apply w-full h-full;
|
|
@@ -4,24 +4,37 @@ module Coco
|
|
|
4
4
|
extend ActiveSupport::Concern
|
|
5
5
|
include Coco::AppHelper
|
|
6
6
|
|
|
7
|
+
BUTTON_TYPES = {
|
|
8
|
+
menu: "Coco::App::Elements::MenuButton",
|
|
9
|
+
color_picker: "Coco::App::Elements::ColorPickerButton",
|
|
10
|
+
layout_picker: "Coco::App::Elements::LayoutPickerButton",
|
|
11
|
+
image_picker: "Coco::App::Elements::ImagePickerButton",
|
|
12
|
+
dropdown: "Coco::App::Elements::DropdownButton"
|
|
13
|
+
}
|
|
14
|
+
|
|
7
15
|
included do
|
|
8
16
|
renders_many :items, types: {
|
|
9
17
|
divider: ->(**kwargs) { tag.div(class: "divider") },
|
|
10
|
-
button: ->(**kwargs) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
},
|
|
17
|
-
menu_button: ->(**kwargs) { App::Elements::MenuButton.new(**button_kwargs(kwargs, :menu)) },
|
|
18
|
-
color_picker_button: ->(**kwargs) { App::Elements::ColorPickerButton.new(**button_kwargs(kwargs, :color_picker)) },
|
|
19
|
-
layout_picker_button: ->(**kwargs) { App::Elements::LayoutPickerButton.new(**button_kwargs(kwargs, :layout_picker)) },
|
|
20
|
-
image_picker_button: ->(**kwargs) { App::Elements::ImagePickerButton.new(**button_kwargs(kwargs, :image_picker)) },
|
|
21
|
-
dropdown_button: ->(**kwargs) { App::Elements::DropdownButton.new(**button_kwargs(kwargs, :dropdown)) }
|
|
18
|
+
button: ->(*args, **kwargs, &block) { coco_button(*args, **button_kwargs(kwargs, :button), &block) },
|
|
19
|
+
menu_button: ->(*args, **kwargs, &block) { instantiate_button(:menu, *args, **kwargs, &block) },
|
|
20
|
+
dropdown_button: ->(*args, **kwargs, &block) { instantiate_button(:dropdown, *args, **kwargs, &block) },
|
|
21
|
+
color_picker_button: ->(*args, **kwargs, &block) { instantiate_button(:color_picker, *args, **kwargs, &block) },
|
|
22
|
+
image_picker_button: ->(*args, **kwargs, &block) { instantiate_button(:image_picker, *args, **kwargs, &block) },
|
|
23
|
+
layout_picker_button: ->(*args, **kwargs, &block) { instantiate_button(:layout_picker, *args, **kwargs, &block) }
|
|
22
24
|
}
|
|
23
25
|
end
|
|
24
26
|
|
|
27
|
+
def instantiate_button(type, *args, **kwargs, &block)
|
|
28
|
+
href, content = if block
|
|
29
|
+
[args.first, nil]
|
|
30
|
+
else
|
|
31
|
+
(args.size == 1) ? [nil, args.first] : args[0..2].reverse!
|
|
32
|
+
end
|
|
33
|
+
component = BUTTON_TYPES[type].constantize.new(href: href, **button_kwargs(kwargs, type))
|
|
34
|
+
component.with_content(content) if !block && content.present?
|
|
35
|
+
component
|
|
36
|
+
end
|
|
37
|
+
|
|
25
38
|
def with_divider(...)
|
|
26
39
|
with_item_divider(...)
|
|
27
40
|
end
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
module Coco
|
|
2
2
|
module AppHelper
|
|
3
3
|
def coco_link(*args, **, &block)
|
|
4
|
-
href, content =
|
|
4
|
+
href, content = if block
|
|
5
|
+
[args.first, nil]
|
|
6
|
+
else
|
|
7
|
+
(args.size == 1) ? [nil, args.first] : args[0..2].reverse!
|
|
8
|
+
end
|
|
5
9
|
|
|
6
10
|
link = Coco::App::Elements::Link.new(href: href, **)
|
|
7
11
|
link = link.with_content(content) if !block && content.present?
|
|
@@ -10,7 +14,11 @@ module Coco
|
|
|
10
14
|
end
|
|
11
15
|
|
|
12
16
|
def coco_button(*args, **kwargs, &block)
|
|
13
|
-
href, content =
|
|
17
|
+
href, content = if block
|
|
18
|
+
[args.first, nil]
|
|
19
|
+
else
|
|
20
|
+
(args.size == 1) ? [nil, args.first] : args[0..2].reverse!
|
|
21
|
+
end
|
|
14
22
|
|
|
15
23
|
button = if kwargs.key?(:action) || kwargs.key?(:method) || kwargs.key?(:params)
|
|
16
24
|
"ButtonTo"
|
|
@@ -9,7 +9,11 @@ module Coco
|
|
|
9
9
|
|
|
10
10
|
href = Coco::ActionViewHelper.url_target(name, options)
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
if block
|
|
13
|
+
coco_link(href, **html_options.symbolize_keys!, &block)
|
|
14
|
+
else
|
|
15
|
+
coco_link(name, href, **html_options.symbolize_keys!)
|
|
16
|
+
end
|
|
13
17
|
end
|
|
14
18
|
|
|
15
19
|
def coco_button_to(name = nil, options = nil, html_options = nil, &block)
|
data/config/tokens.cjs
CHANGED
|
@@ -136,6 +136,7 @@ const colorAliases = {
|
|
|
136
136
|
DEFAULT: colors.green[500],
|
|
137
137
|
dark: colors.green[600],
|
|
138
138
|
inverse: colors.green[300],
|
|
139
|
+
"inverse-vivid": "#009979",
|
|
139
140
|
},
|
|
140
141
|
negative: {
|
|
141
142
|
DEFAULT: colors.red[600],
|
|
@@ -168,6 +169,7 @@ const screens = {
|
|
|
168
169
|
xl: "1200px",
|
|
169
170
|
"2xl": "1400px",
|
|
170
171
|
max: "1800px",
|
|
172
|
+
"small-landscape": { raw: "(max-height: 760px) and (min-width: 576px)" },
|
|
171
173
|
print: { raw: "print" }, // Note: PDFs are rendered at a viewport width of 1280px
|
|
172
174
|
};
|
|
173
175
|
|
|
@@ -177,6 +179,7 @@ const fontSize = {
|
|
|
177
179
|
"para-md": ["16px", "24px"],
|
|
178
180
|
"para-lg": ["18px", "27px"],
|
|
179
181
|
|
|
182
|
+
"label-xxs": ["10px", "12px"],
|
|
180
183
|
"label-xs": ["12px", "14px"],
|
|
181
184
|
"label-sm": ["14px", "16px"],
|
|
182
185
|
"label-md": ["16px", "20px"],
|
data/lib/coco.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: coveragebook_components
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.7.
|
|
4
|
+
version: 0.7.10
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Mark Perkins
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-10-
|
|
11
|
+
date: 2023-10-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -1323,6 +1323,7 @@ files:
|
|
|
1323
1323
|
- app/assets/img/test/slides/slide-foreground-portrait.jpg
|
|
1324
1324
|
- app/assets/js/app.js
|
|
1325
1325
|
- app/assets/js/app/components.js
|
|
1326
|
+
- app/assets/js/app/setup.js
|
|
1326
1327
|
- app/assets/js/base/components.js
|
|
1327
1328
|
- app/assets/js/book.js
|
|
1328
1329
|
- app/assets/js/book/components.js
|
|
@@ -1332,6 +1333,7 @@ files:
|
|
|
1332
1333
|
- app/assets/js/helpers/dom.js
|
|
1333
1334
|
- app/assets/js/helpers/file.js
|
|
1334
1335
|
- app/assets/js/helpers/lang.js
|
|
1336
|
+
- app/assets/js/helpers/location.js
|
|
1335
1337
|
- app/assets/js/helpers/path.js
|
|
1336
1338
|
- app/assets/js/helpers/screenshot.js
|
|
1337
1339
|
- app/assets/js/helpers/turbo_events.js
|