pr360-questionnaire 0.0.1

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.
package/build.mjs ADDED
@@ -0,0 +1,64 @@
1
+ import esbuild from 'esbuild';
2
+ import {sassPlugin} from 'esbuild-sass-plugin';
3
+
4
+ const args = process.argv.slice(2)
5
+ const watch = args.includes('--watch')
6
+ const deploy = args.includes('--deploy')
7
+
8
+ const loader = {
9
+ // Add loaders for images/fonts/etc, e.g. { '.svg': 'file' }
10
+ }
11
+
12
+ const plugins = [
13
+ sassPlugin({
14
+ filter: /.lit.s?css$/,
15
+ type: 'lit-css'
16
+ }),
17
+ sassPlugin()
18
+ ];
19
+
20
+ let opts = {
21
+ entryPoints: ['js/app.js', 'css/app.scss'],
22
+ bundle: true,
23
+ target: 'es2020',
24
+ outdir: '../priv/static/assets',
25
+ logLevel: 'info',
26
+ external: ['/fonts/*', '/images/*', '/favicon.ico'],
27
+ loader,
28
+ plugins
29
+ }
30
+
31
+ let packageOpts = {
32
+ ...opts,
33
+ outdir: './dist',
34
+ entryPoints: ['js/index.js']
35
+ }
36
+
37
+ let testOpts = {
38
+ ...opts,
39
+ entryPoints: ['test/questionnaire-test.ts'],
40
+ outdir: './build'
41
+ }
42
+
43
+ if (watch) {
44
+ opts = {
45
+ ...opts,
46
+ sourcemap: 'inline'
47
+ }
48
+ }
49
+
50
+ if (deploy) {
51
+ opts = {
52
+ ...opts,
53
+ minify: true
54
+ }
55
+ }
56
+
57
+ if (watch) {
58
+ let ctx = await esbuild.context(opts);
59
+ await ctx.watch();
60
+ } else {
61
+ esbuild.build(opts);
62
+ esbuild.build(packageOpts);
63
+ esbuild.build(testOpts);
64
+ }
package/css/app.scss ADDED
@@ -0,0 +1,39 @@
1
+ // BASE STYLES
2
+ @import './base/reset';
3
+ @import './base/variables';
4
+ @import './base/layout';
5
+ @import './base/mixins';
6
+ @import './base/typography';
7
+
8
+
9
+ // COMPONENTS
10
+ @import './components/buttons';
11
+ @import './components/inputs';
12
+ @import './components/tables';
13
+ @import './components/tabs';
14
+ @import './components/modal';
15
+ @import './components/flash-messages';
16
+ @import './components/questionnaire';
17
+
18
+ // Imported last to take precedence in the cascade
19
+ @import './base/utilities';
20
+
21
+
22
+ /* LiveView specific classes for your customization */
23
+ .phx-no-feedback.invalid-feedback,
24
+ .phx-no-feedback .invalid-feedback {
25
+ display: none;
26
+ }
27
+
28
+ .phx-click-loading {
29
+ opacity: 0.5;
30
+ transition: opacity 1s ease-out;
31
+ }
32
+
33
+ .phx-loading{
34
+ cursor: wait;
35
+ }
36
+
37
+ [hidden] {
38
+ display: none;
39
+ }
@@ -0,0 +1,56 @@
1
+ body {
2
+ background-color: $white;
3
+ display: grid;
4
+ grid-template-rows: auto 1fr auto;
5
+ gap: $space-md;
6
+ width: 100%;
7
+ }
8
+
9
+ header,
10
+ .header {
11
+ display: grid;
12
+ gap: $space-sm;
13
+ align-items: end;
14
+ grid-template-columns: 1fr auto auto auto auto;
15
+ font-size: $small-font-size;
16
+ padding: $space-sm $space-md;
17
+
18
+ @media screen and (max-width: $screen-tablet) {
19
+ grid-template-columns: auto 1fr;
20
+ grid-template-rows: auto auto;
21
+ grid-template-areas: "logo settings"
22
+ "nav nav";
23
+
24
+ nav {
25
+ grid-area: nav;
26
+ margin-bottom: $space-xs;
27
+ }
28
+
29
+ .logo {grid-area: logo;}
30
+
31
+ .user-links {grid-area: settings;}
32
+ }
33
+ }
34
+
35
+ main {
36
+ margin: 0 auto;
37
+ max-width: 80rem;
38
+ padding: 0 $space-md;
39
+ width: 100%;
40
+ }
41
+
42
+ footer {
43
+ border-top: $border;
44
+ padding: $space-sm $space-md;
45
+ }
46
+
47
+ .aside-right {
48
+ display: grid;
49
+ gap: $space-sm;
50
+ grid-template-columns: 4fr 3fr;
51
+ align-items: start;
52
+
53
+ @media screen and (max-width: $screen-tablet) {
54
+ grid-template-columns: 1fr;
55
+ }
56
+ }
@@ -0,0 +1,31 @@
1
+ @mixin focus-visible {
2
+ &:focus-visible {
3
+ outline: 2px solid $color-info;
4
+ outline-offset: 2px;
5
+ }
6
+ }
7
+
8
+ @mixin icon-styles {
9
+ font-family: 'Material Icons';
10
+ font-weight: normal;
11
+ font-style: normal;
12
+ font-size: 24px; /* Preferred icon size */
13
+ display: inline-block;
14
+ line-height: 1;
15
+ text-transform: none;
16
+ letter-spacing: normal;
17
+ word-wrap: normal;
18
+ white-space: nowrap;
19
+ direction: ltr;
20
+
21
+ /* Support for all WebKit browsers. */
22
+ -webkit-font-smoothing: antialiased;
23
+ /* Support for Safari and Chrome. */
24
+ text-rendering: optimizeLegibility;
25
+
26
+ /* Support for Firefox. */
27
+ -moz-osx-font-smoothing: grayscale;
28
+
29
+ /* Support for IE. */
30
+ font-feature-settings: 'liga';
31
+ }
@@ -0,0 +1,52 @@
1
+ /*
2
+ 1. Use a more-intuitive box-sizing model.
3
+ */
4
+ *, *::before, *::after {
5
+ box-sizing: border-box;
6
+ }
7
+ /*
8
+ 2. Remove default margin
9
+ */
10
+ * {
11
+ margin: 0;
12
+ }
13
+ /*
14
+ 3. Allow percentage-based heights in the application
15
+ */
16
+ html, body {
17
+ height: 100%;
18
+ }
19
+ /*
20
+ Typographic tweaks!
21
+ 4. Add accessible line-height
22
+ 5. Improve text rendering
23
+ */
24
+ body {
25
+ line-height: 1.5;
26
+ -webkit-font-smoothing: antialiased;
27
+ }
28
+ /*
29
+ 6. Improve media defaults
30
+ */
31
+ img, picture, video, canvas, svg {
32
+ display: block;
33
+ max-width: 100%;
34
+ }
35
+ /*
36
+ 7. Remove built-in form typography styles
37
+ */
38
+ input, button, textarea, select {
39
+ font: inherit;
40
+ }
41
+ /*
42
+ 8. Avoid text overflows
43
+ */
44
+ p, h1, h2, h3, h4, h5, h6 {
45
+ overflow-wrap: break-word;
46
+ }
47
+ /*
48
+ 9. Create a root stacking context
49
+ */
50
+ #root, #__next {
51
+ isolation: isolate;
52
+ }
@@ -0,0 +1,118 @@
1
+ body {
2
+ color: $black;
3
+ font-family: $font-family-body;
4
+ font-size: $base-font-size;
5
+ font-size: $clamp-font-size;
6
+ line-height: $base-line-height;
7
+ }
8
+
9
+ * {
10
+ &:focus-visible {
11
+ @include focus-visible;
12
+ }
13
+ }
14
+
15
+ h1, .h1,
16
+ h2, .h2,
17
+ h3, .h3,
18
+ h4, .h4,
19
+ h5, .h5,
20
+ h6, .h6 {
21
+ font-family: $font-family-header;
22
+ line-height: $header-line-height;
23
+ margin: $space-md 0 $space-xxs 0;
24
+
25
+ &:first-child {
26
+ margin-top: 0;
27
+ }
28
+ }
29
+
30
+ h1, .h1 {
31
+ font-size: $h1-font-size;
32
+ font-weight: $header-bold;
33
+ }
34
+
35
+ h2, .h2 {
36
+ font-size: $h2-font-size;
37
+ font-weight: $header-md;
38
+ }
39
+
40
+ h3, .h3 {
41
+ font-size: $h3-font-size;
42
+ }
43
+
44
+ h4, .h4 {
45
+ font-size: $h4-font-size;
46
+ }
47
+
48
+ h5, .h5 {
49
+ font-size: $h5-font-size;
50
+ }
51
+
52
+ h6, .h6 {
53
+ font-size: $h6-font-size;
54
+ }
55
+
56
+ p {
57
+ margin: 0 0 $space-sm 0;
58
+ }
59
+
60
+ .p-sm {
61
+ font-size: 14px;
62
+ margin-bottom: 0px;
63
+ color: $gray-dark;
64
+ }
65
+ a,
66
+ .text-link {
67
+ background:
68
+ linear-gradient(
69
+ to right,
70
+ transparent,
71
+ transparent
72
+ ),
73
+ linear-gradient(
74
+ to right,
75
+ $color-primary,
76
+ $color-primary
77
+ );
78
+ background-size: 100% 2px, 0 2px;
79
+ background-position: 100% 100%, 0 100%;
80
+ background-repeat: no-repeat;
81
+ border: 0;
82
+ border-radius: unset;
83
+ box-shadow: none;
84
+ color: $color-primary;
85
+ display: inline-block;
86
+ font-size: $base-font-size;
87
+ font-weight: $body-regular;
88
+ padding: 0;
89
+ text-decoration: none;
90
+ transition: all .2s ease;
91
+
92
+ &:hover,
93
+ &:active,
94
+ &:focus {
95
+ background-size: 0 2px, 100% 2px;
96
+ }
97
+
98
+ &[phx-click] {
99
+ cursor: pointer;
100
+ }
101
+
102
+ &[href]:empty {
103
+ color: $color-error !important;
104
+ }
105
+
106
+ &[disabled] {
107
+ background: transparent !important;
108
+ cursor: not-allowed;
109
+ color: $gray-dark;
110
+
111
+ &:hover,
112
+ &:active,
113
+ &:focus {
114
+ background: transparent;
115
+ }
116
+ }
117
+ }
118
+
@@ -0,0 +1,289 @@
1
+ // MARGIN
2
+ .u-push {
3
+ margin: $space-md;
4
+
5
+ &--none {
6
+ margin: 0;
7
+ }
8
+
9
+ &--xs {
10
+ margin: $space-xs;
11
+ }
12
+ &--sm {
13
+ margin: $space-sm;
14
+ }
15
+ &--lg {
16
+ margin: $space-lg;
17
+ }
18
+ &--xl {
19
+ margin: $space-xl;
20
+ }
21
+
22
+ &-top {
23
+ margin-top: $space-md;
24
+
25
+ &--none {
26
+ margin-top: 0;
27
+ }
28
+
29
+ &--xs {
30
+ margin-top: $space-xs !important;
31
+ }
32
+ &--sm {
33
+ margin-top: $space-sm;
34
+ }
35
+ &--lg {
36
+ margin-top: $space-lg;
37
+ }
38
+ &--xl {
39
+ margin-top: $space-xl;
40
+ }
41
+ }
42
+
43
+ &-right {
44
+ margin-right: $space-md;
45
+
46
+ &--none {
47
+ margin-right: 0;
48
+ }
49
+
50
+ &--xs {
51
+ margin-right: $space-xs;
52
+ }
53
+ &--sm {
54
+ margin-right: $space-sm;
55
+ }
56
+ &--lg {
57
+ margin-right: $space-lg;
58
+ }
59
+ &--xl {
60
+ margin-right: $space-xl;
61
+ }
62
+ }
63
+
64
+ &-bottom {
65
+ margin-bottom: $space-md;
66
+
67
+ &--none {
68
+ margin-bottom: 0;
69
+ }
70
+
71
+ &--xs {
72
+ margin-bottom: $space-xs;
73
+ }
74
+ &--sm {
75
+ margin-bottom: $space-sm;
76
+ }
77
+ &--lg {
78
+ margin-bottom: $space-lg;
79
+ }
80
+ &--xl {
81
+ margin-bottom: $space-xl;
82
+ }
83
+ }
84
+
85
+ &-left {
86
+ margin-left: $space-md;
87
+
88
+ &--none {
89
+ margin-left: 0;
90
+ }
91
+
92
+ &--xs {
93
+ margin-left: $space-xs;
94
+ }
95
+ &--sm {
96
+ margin-left: $space-sm;
97
+ }
98
+ &--lg {
99
+ margin-left: $space-lg;
100
+ }
101
+ &--xl {
102
+ margin-left: $space-xl;
103
+ }
104
+ }
105
+ }
106
+
107
+
108
+ // PADDING
109
+ .u-pad {
110
+ padding: $space-md;
111
+
112
+ &--none {
113
+ padding: 0;
114
+ }
115
+
116
+ &--xs {
117
+ padding: $space-xs;
118
+ }
119
+ &--sm {
120
+ padding: $space-sm;
121
+ }
122
+ &--lg {
123
+ padding: $space-lg;
124
+ }
125
+ &--xl {
126
+ padding: $space-xl;
127
+ }
128
+
129
+ &-top {
130
+ padding-top: $space-md;
131
+
132
+ &--none {
133
+ padding-top: 0;
134
+ }
135
+
136
+ &--xs {
137
+ padding-top: $space-xs;
138
+ }
139
+ &--sm {
140
+ padding-top: $space-sm;
141
+ }
142
+ &--lg {
143
+ padding-top: $space-lg;
144
+ }
145
+ &--xl {
146
+ padding-top: $space-xl;
147
+ }
148
+ }
149
+
150
+ &-right {
151
+ padding-right: $space-md;
152
+
153
+ &--none {
154
+ padding-right: 0;
155
+ }
156
+
157
+ &--xs {
158
+ padding-right: $space-xs;
159
+ }
160
+ &--sm {
161
+ padding-right: $space-sm;
162
+ }
163
+ &--lg {
164
+ padding-right: $space-lg;
165
+ }
166
+ &--xl {
167
+ padding-right: $space-xl;
168
+ }
169
+ }
170
+
171
+ &-bottom {
172
+ padding-bottom: $space-md;
173
+
174
+ &--none {
175
+ padding-bottom: 0;
176
+ }
177
+
178
+ &--xs {
179
+ padding-bottom: $space-xs;
180
+ }
181
+ &--sm {
182
+ padding-bottom: $space-sm;
183
+ }
184
+ &--lg {
185
+ padding-bottom: $space-lg;
186
+ }
187
+ &--xl {
188
+ padding-bottom: $space-xl;
189
+ }
190
+ }
191
+
192
+ &-left {
193
+ padding-left: $space-md;
194
+
195
+ &--none {
196
+ padding-left: 0;
197
+ }
198
+
199
+ &--xs {
200
+ padding-left: $space-xs;
201
+ }
202
+ &--sm {
203
+ padding-left: $space-sm;
204
+ }
205
+ &--lg {
206
+ padding-left: $space-lg;
207
+ }
208
+ &--xl {
209
+ padding-left: $space-xl;
210
+ }
211
+ }
212
+ }
213
+
214
+
215
+ // WIDTH
216
+ .u-width {
217
+
218
+ &--contained {
219
+ max-width: $contained-width;
220
+ width: 100%;
221
+ }
222
+ }
223
+
224
+
225
+ // TYPE SIZES
226
+ .u-font-sm {
227
+ font-size: $small-font-size !important;
228
+ }
229
+
230
+
231
+ // FLEX
232
+ .u-flex {
233
+ display: flex;
234
+ gap: $space-xs;
235
+ align-items: baseline;
236
+
237
+ &--between {
238
+ justify-content: space-between;
239
+ }
240
+
241
+ &--justify-end {
242
+ justify-content: end;
243
+ }
244
+
245
+ &--sm-gap {
246
+ gap: $space-sm;
247
+ }
248
+ }
249
+
250
+
251
+ // GRID
252
+ .u-grid {
253
+ display: grid;
254
+ gap: 0 $space-xs;
255
+ align-items: baseline;
256
+ justify-items: start;
257
+
258
+ @media screen and (max-width:$screen-mobile) {
259
+ grid-template-columns: 1fr;
260
+ }
261
+
262
+ &--3 {
263
+ grid-template-columns: 1fr 2fr auto;
264
+ }
265
+ }
266
+
267
+
268
+ // DISPLAY
269
+ .u-block {
270
+ display: block;
271
+ }
272
+
273
+ .u-inline-block {
274
+ display: inline-block;
275
+ }
276
+
277
+
278
+ // POSITION
279
+ .u-relative {
280
+ position: relative;
281
+ }
282
+
283
+
284
+ // COLORS
285
+ .u-color {
286
+ &-error {
287
+ color: $color-error;
288
+ }
289
+ }
@@ -0,0 +1,79 @@
1
+ // SCREEN SIZES
2
+ $screen-mobile: 480px;
3
+ $screen-tablet: 900px;
4
+ $screen-desktop: 1024px;
5
+
6
+
7
+ // COLORS
8
+ $color-primary: #0d61af;
9
+ $color-primary-hover: hsl(209, 95%, 25%);
10
+ $color-action: $color-primary;
11
+ $color-action-hover: $color-primary-hover;
12
+ $color-info: #73CCBF;
13
+ $color-error: darken(hsl(7, 75%, 65%), 17%);
14
+ $color-success: #75D481;
15
+
16
+ // Neutrals are desaturated variants of brand white
17
+ $white: hsl(46, 3%, 98%);
18
+ $gray-lightest: hsl(46, 3%, 93%);
19
+ $gray-lighter: hsl(46, 3%, 85%);
20
+ $gray-light: hsl(46, 3%, 75%);
21
+ $gray: hsl(46, 3%, 58%);
22
+ $gray-dark: hsl(46, 3%, 35%);
23
+ $gray-darkest: hsl(46, 3%, 25%);
24
+ $black: #02215E;
25
+
26
+
27
+ // SPACING
28
+ $space-xxs: clamp(.2rem, 1vmin,.25rem);
29
+ $space-xs: clamp(.25rem, 1vmin, .5rem);
30
+ $space-sm: clamp(.5rem, 3vmin, 1rem);
31
+ $space-md: clamp(1rem, 8vmin, 2rem);
32
+ $space-lg: clamp(2rem, 12vmin, 4rem);
33
+ $space-xl: clamp(4rem, 18vmin, 8rem);
34
+
35
+ $contained-width: 35rem;
36
+
37
+
38
+ // BORDERS
39
+ $border: 1px solid $gray-light;
40
+ $border-thick: 2px solid $gray-light;
41
+
42
+ $border-radius: .25rem;
43
+ $border-radius-pill: 5rem;
44
+
45
+
46
+ // TYPOGRAPHY
47
+ $font-family-header: 'Bitter', Georgia, serif;
48
+ $font-family-body: 'Lato', Helvetica, sans-serif;
49
+
50
+ $body-regular: 400;
51
+ $body-bold: 900;
52
+ $body-md: 700;
53
+ $header-bold: 700;
54
+ $header-md: 500;
55
+ $header-regular: 400;
56
+
57
+
58
+ $base-font-size: 16px;
59
+ $clamp-font-size: clamp(14px, 3.5vmin, $base-font-size);
60
+ $small-font-size: .9em;
61
+ $large-font-size: 1.5em;
62
+ $h1-font-size: clamp(1.75rem, 8vmin, 2.25rem);
63
+ $h2-font-size: clamp(1.3rem, 6vmin, 1.5rem);
64
+ $h3-font-size: clamp(1.2rem, 5vmin, 1.3rem);;
65
+ $h4-font-size: clamp(1rem, 4vmin, 1.2rem);;
66
+ $h5-font-size: 1rem;
67
+ $h6-font-size: 1rem;
68
+
69
+ $base-line-height: 1.5;
70
+ $small-line-height: 1.3;
71
+ $header-line-height: 1.2;
72
+
73
+
74
+ // ANIMATION
75
+ $transition: all .2s ease;
76
+
77
+
78
+ // SHADOWS
79
+ $box-shadow: 0px 3px 12px transparentize($color-primary, 0.7);