ply-css 1.3.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 (75) hide show
  1. package/CLAUDE.md +176 -0
  2. package/LICENSE +22 -0
  3. package/PLY.md +646 -0
  4. package/README.md +170 -0
  5. package/dist/css/ply-core.css +6175 -0
  6. package/dist/css/ply-core.min.css +1 -0
  7. package/dist/css/ply-essentials.min.css +1 -0
  8. package/dist/css/ply-helpers.min.css +1 -0
  9. package/dist/css/ply.css +7429 -0
  10. package/dist/css/ply.min.css +1 -0
  11. package/dist/css/styles.css +7432 -0
  12. package/dist/css/styles.min.css +1 -0
  13. package/llms-full.txt +834 -0
  14. package/llms.txt +34 -0
  15. package/package.json +70 -0
  16. package/ply-classes.json +2625 -0
  17. package/snippets/accessible-drag-and-drop.html +122 -0
  18. package/snippets/card.html +58 -0
  19. package/snippets/contact-form.html +49 -0
  20. package/snippets/custom-theme.html +280 -0
  21. package/snippets/dashboard.html +77 -0
  22. package/snippets/data-table.html +64 -0
  23. package/snippets/login-page.html +45 -0
  24. package/snippets/navbar-page.html +39 -0
  25. package/snippets/notifications.html +63 -0
  26. package/snippets/pricing-cards.html +95 -0
  27. package/snippets/responsive-header.html +98 -0
  28. package/snippets/starter-page.html +782 -0
  29. package/snippets/two-column-layout.html +40 -0
  30. package/src/scss/_ply-core-components.scss +32 -0
  31. package/src/scss/_ply.scss +47 -0
  32. package/src/scss/components/_accordion.scss +73 -0
  33. package/src/scss/components/_alignments.scss +64 -0
  34. package/src/scss/components/_autocomplete.scss +28 -0
  35. package/src/scss/components/_blocks-responsive.scss +30 -0
  36. package/src/scss/components/_blocks.scss +39 -0
  37. package/src/scss/components/_buttons.scss +452 -0
  38. package/src/scss/components/_colors.scss +447 -0
  39. package/src/scss/components/_container-queries.scss +35 -0
  40. package/src/scss/components/_cursors.scss +24 -0
  41. package/src/scss/components/_dialog-patterns.scss +176 -0
  42. package/src/scss/components/_dropdown.scss +68 -0
  43. package/src/scss/components/_filterbox.scss +57 -0
  44. package/src/scss/components/_flexible-embed.scss +19 -0
  45. package/src/scss/components/_forms.scss +450 -0
  46. package/src/scss/components/_grid.scss +210 -0
  47. package/src/scss/components/_helpers-core.scss +357 -0
  48. package/src/scss/components/_helpers.scss +466 -0
  49. package/src/scss/components/_labels.scss +105 -0
  50. package/src/scss/components/_livesearch.scss +233 -0
  51. package/src/scss/components/_loader.scss +24 -0
  52. package/src/scss/components/_media-queries.scss +9 -0
  53. package/src/scss/components/_mixins.scss +387 -0
  54. package/src/scss/components/_modal.scss +73 -0
  55. package/src/scss/components/_multi-step-form.scss +190 -0
  56. package/src/scss/components/_navigation-responsive.scss +63 -0
  57. package/src/scss/components/_navigation.scss +592 -0
  58. package/src/scss/components/_notifications.scss +185 -0
  59. package/src/scss/components/_prettyprint.scss +86 -0
  60. package/src/scss/components/_print.scss +74 -0
  61. package/src/scss/components/_progress.scss +32 -0
  62. package/src/scss/components/_reset.scss +365 -0
  63. package/src/scss/components/_rtl.scss +213 -0
  64. package/src/scss/components/_table-interactive.scss +110 -0
  65. package/src/scss/components/_tables.scss +52 -0
  66. package/src/scss/components/_themes.scss +6 -0
  67. package/src/scss/components/_tooltip.scss +35 -0
  68. package/src/scss/components/_typography.scss +565 -0
  69. package/src/scss/components/_upload.scss +19 -0
  70. package/src/scss/components/_variables.scss +129 -0
  71. package/src/scss/ply-core.scss +1 -0
  72. package/src/scss/ply-essentials.scss +15 -0
  73. package/src/scss/ply-helpers.scss +11 -0
  74. package/src/scss/ply-iso.scss +1 -0
  75. package/src/scss/styles.scss +9 -0
@@ -0,0 +1,68 @@
1
+ @use "colors";
2
+
3
+ /* =Dropdown
4
+ -----------------------------------------------------------------------------*/
5
+ .dropdown {
6
+ display: none;
7
+ position: absolute;
8
+ z-index: 102;
9
+ top: 0;
10
+ right: 0;
11
+ width: 250px;
12
+ color: var(--ply-color-body, colors.$color-black);
13
+ background: var(--ply-bg-surface, colors.$color-white);
14
+ box-shadow: var(--ply-shadow-2, 0 1px 5px rgba(0, 0, 0, .3));
15
+ overflow: auto;
16
+
17
+ & section {
18
+ max-height: 250px;
19
+ overflow: auto;
20
+ padding: 20px;
21
+ }
22
+ & footer {
23
+ padding: 20px;
24
+ }
25
+
26
+ }
27
+ ul.dropdown {
28
+
29
+ max-height: 300px;
30
+ list-style: none;
31
+ margin: 0;
32
+ line-height: 1.5;
33
+ font-size: 95%;
34
+ padding: 0;
35
+
36
+ & a {
37
+ display: block;
38
+ padding: 7px 15px;
39
+ text-decoration: none;
40
+ color: var(--ply-color-body, colors.$color-black);
41
+ &:hover {
42
+ background: var(--ply-bg-surface-alt, #eee);
43
+ }
44
+ &:focus-visible {
45
+ outline: 2px solid var(--ply-color-focus, #0f62fe);
46
+ outline-offset: 2px;
47
+ }
48
+ }
49
+
50
+ & li.divider {
51
+ border-bottom: 1px solid var(--ply-border-color, #e2e2e2);
52
+ }
53
+
54
+ }
55
+ .caret {
56
+ display: inline-block;
57
+ width: 0;
58
+ height: 0;
59
+ margin-left: .3em;
60
+ vertical-align: middle;
61
+ border-top: 5px solid;
62
+ border-right: 5px solid transparent;
63
+ border-left: 5px solid transparent;
64
+ &.caret-up {
65
+ border-top: 0;
66
+ border-bottom: 4px solid;
67
+ }
68
+ }
@@ -0,0 +1,57 @@
1
+ /* =Filterbox
2
+ -----------------------------------------------------------------------------*/
3
+ .filterbox {
4
+ position: relative;
5
+ & input {
6
+ padding-right: 30px;
7
+ }
8
+ & span {
9
+ position: absolute;
10
+ z-index: 2;
11
+ top: 0;
12
+ right: 1px;
13
+ width: 26px;
14
+ height: 100%;
15
+ cursor: pointer;
16
+ &:after {
17
+ content: "";
18
+ display: inline-block;
19
+ position: relative;
20
+ top: 50%;
21
+ margin-left: 8px;
22
+ margin-top: -21px;
23
+ width: 0;
24
+ height: 0;
25
+ vertical-align: middle;
26
+ border-top: 5px solid rgba(0, 0, 0, .6);
27
+ border-right: 5px solid transparent;
28
+ border-left: 5px solid transparent;
29
+ }
30
+ }
31
+ }
32
+ .filterbox-list {
33
+ z-index: 1000;
34
+ position: absolute;
35
+ left: 0;
36
+ display: none;
37
+ margin: 0;
38
+ list-style: none;
39
+ background: #fff;
40
+ width: 100%;
41
+ box-shadow: 0 1px 3px rgba(0, 0, 0, .2);
42
+ max-height: 250px;
43
+ overflow: auto;
44
+ & li {
45
+ padding: 4px 10px;
46
+ color: #000;
47
+ cursor: pointer;
48
+ &:hover {
49
+ background: $color-gray-light;
50
+ }
51
+ &.active {
52
+ background: $color-blue;
53
+ color: #fff;
54
+ }
55
+ }
56
+ }
57
+
@@ -0,0 +1,19 @@
1
+ @use "variables";
2
+
3
+ /* =Flexible Embed
4
+ -----------------------------------------------------------------------------*/
5
+ .flexible-embed {
6
+ height: 0;
7
+ padding-bottom: 56.25%; // ratio 16:9
8
+ position: relative;
9
+ margin-bottom: variables.$base-line;
10
+ & iframe,
11
+ & object,
12
+ & embed {
13
+ position: absolute;
14
+ top: 0;
15
+ left: 0;
16
+ width: 100%;
17
+ height: 100%;
18
+ }
19
+ }
@@ -0,0 +1,450 @@
1
+ @use "sass:math";
2
+
3
+ @use "sass:color";
4
+ @use "colors";
5
+ @use "helpers";
6
+ @use "mixins";
7
+ @use "variables";
8
+
9
+ /* =Forms
10
+ -----------------------------------------------------------------------------*/
11
+ .form {
12
+ .btn,
13
+ input[type="submit"].btn,
14
+ button,
15
+ input[type="submit"],
16
+ input[type="reset"] {
17
+ padding: variables.$padding-btn-in-forms;
18
+
19
+ &.btn-outline, {
20
+ padding: variables.$padding-btn-outline-in-forms;
21
+ }
22
+ &.btn-outline.bold {
23
+ padding: variables.$padding-btn-outline-bold-in-forms;
24
+ }
25
+ }
26
+
27
+ label {
28
+ cursor: pointer;
29
+
30
+ display: block;
31
+ margin-bottom: 0.25rem;
32
+
33
+ input[type="text"],
34
+ input[type="password"],
35
+ input[type="email"],
36
+ input[type="url"],
37
+ input[type="phone"],
38
+ input[type="tel"],
39
+ input[type="number"],
40
+ input[type="datetime"],
41
+ input[type="date"],
42
+ input[type="month"],
43
+ input[type="color"],
44
+ input[type="time"],
45
+ input[type="search"],
46
+ input[type="range"],
47
+ input[type="file"],
48
+ input[type="datetime-local"],
49
+ textarea,
50
+ select {
51
+ margin-top: variables.$margin;
52
+ width: 100%;
53
+ }
54
+ }
55
+
56
+ input[type="text"],
57
+ input[type="password"],
58
+ input[type="email"],
59
+ input[type="url"],
60
+ input[type="phone"],
61
+ input[type="tel"],
62
+ input[type="number"],
63
+ input[type="datetime"],
64
+ input[type="date"],
65
+ input[type="month"],
66
+ input[type="color"],
67
+ input[type="time"],
68
+ input[type="search"],
69
+ input[type="range"],
70
+ input[type="file"],
71
+ input[type="datetime-local"],
72
+ textarea,
73
+ select {
74
+ border-radius: variables.$border-radius;
75
+ display: block;
76
+ width: 100%;
77
+ padding: 0.5em 0.75em;
78
+ }
79
+ }
80
+
81
+ .form-inline,
82
+ .form-inline-list {
83
+ input[type="text"],
84
+ input[type="password"],
85
+ input[type="email"],
86
+ input[type="url"],
87
+ input[type="phone"],
88
+ input[type="tel"],
89
+ input[type="number"],
90
+ input[type="datetime"],
91
+ input[type="date"],
92
+ input[type="month"],
93
+ input[type="color"],
94
+ input[type="time"],
95
+ input[type="search"],
96
+ input[type="range"],
97
+ input[type="file"],
98
+ input[type="datetime-local"],
99
+ textarea,
100
+ select {
101
+ display: inline-block;
102
+ }
103
+ }
104
+
105
+ .form-list,
106
+ .form-inline,
107
+ .form-inline-list {
108
+ margin: 0;
109
+ padding: 0;
110
+ margin-bottom: math.div(variables.$base-line, 1.5);
111
+ list-style: none;
112
+
113
+ label,
114
+ li,
115
+ li label {
116
+ display: inline-block;
117
+ margin-bottom: 0;
118
+ }
119
+ }
120
+
121
+ .form-inline-list {
122
+ li {
123
+ margin-bottom: 3px;
124
+
125
+ label {
126
+ margin-right: variables.$base-line * 0.5;
127
+ }
128
+ }
129
+ }
130
+
131
+ .form-list {
132
+ li {
133
+ margin-bottom: 6px;
134
+ }
135
+ }
136
+
137
+ .form-desc {
138
+ margin-top: 4px;
139
+ color: var(--ply-color-muted, rgba(0, 0, 0, .4));
140
+ font-size: variables.$font-size-small;
141
+ line-height: 1.4em;
142
+ }
143
+
144
+ input[type="text"],
145
+ input[type="password"],
146
+ input[type="email"],
147
+ input[type="url"],
148
+ input[type="phone"],
149
+ input[type="tel"],
150
+ input[type="number"],
151
+ input[type="datetime"],
152
+ input[type="date"],
153
+ input[type="month"],
154
+ input[type="color"],
155
+ input[type="time"],
156
+ input[type="search"],
157
+ input[type="datetime-local"],
158
+ textarea {
159
+ @include mixins.transition(border ease .5s);
160
+ }
161
+
162
+ // Fieldset
163
+ fieldset {
164
+ border-radius: variables.$border-radius;
165
+
166
+ background-color: var(--ply-bg-surface);
167
+ padding: variables.$base-line;
168
+ margin-bottom: variables.$base-line;
169
+ border: 1px solid var(--ply-border-color);
170
+
171
+ *:last-child {
172
+ margin-bottom: 0;
173
+ }
174
+ }
175
+
176
+ /* States */
177
+ .error,
178
+ .success {
179
+ font-weight: bold;
180
+ font-size: variables.$font-size-small;
181
+ }
182
+
183
+ input.input-error,
184
+ textarea.input-error,
185
+ select.input-error,
186
+ .input-error {
187
+ border-color: colors.$color-red;
188
+ box-shadow: 0 0 0 2px rgba(color.channel(colors.$color-red, "red", $space: rgb), color.channel(colors.$color-red, "green", $space: rgb), color.channel(colors.$color-red, "blue", $space: rgb), .3),0 1px 2px rgba(0, 0, 0, .2) inset;
189
+ }
190
+
191
+ input.input-success,
192
+ textarea.input-success,
193
+ select.input-success,
194
+ .input-success {
195
+ border-color: colors.$color-green;
196
+ box-shadow: 0 0 0 2px rgba(color.channel(colors.$color-green, "red", $space: rgb), color.channel(colors.$color-green, "green", $space: rgb), color.channel(colors.$color-green, "blue", $space: rgb), .3),0 1px 2px rgba(0, 0, 0, .2) inset;
197
+
198
+ }
199
+
200
+ input.input-gray,
201
+ textarea.input-gray,
202
+ select.input-gray,
203
+ .input-gray {
204
+ border-color: colors.$color-gray-dark;
205
+ box-shadow: 0 0 0 2px rgba(color.channel(colors.$color-gray-dark, "red", $space: rgb), color.channel(colors.$color-gray-dark, "green", $space: rgb), color.channel(colors.$color-gray-dark, "blue", $space: rgb), .4), 0 1px 2px rgba(0, 0, 0, .2) inset;
206
+ }
207
+
208
+ input[type="text"],
209
+ input[type="password"],
210
+ input[type="email"],
211
+ input[type="url"],
212
+ input[type="phone"],
213
+ input[type="tel"],
214
+ input[type="number"],
215
+ input[type="datetime"],
216
+ input[type="date"],
217
+ input[type="month"],
218
+ input[type="color"],
219
+ input[type="time"],
220
+ input[type="search"],
221
+ input[type="datetime-local"],
222
+ textarea {
223
+ &:focus-visible {
224
+ outline: none;
225
+ border-color: colors.$color-blue;
226
+ box-shadow: 0 0 0 2px rgba(color.channel(colors.$color-blue, "red", $space: rgb), color.channel(colors.$color-blue, "green", $space: rgb), color.channel(colors.$color-blue, "blue", $space: rgb), .3), 0 1px 2px rgba(0, 0, 0, .2) inset;
227
+ }
228
+ }
229
+
230
+ /*
231
+ Search
232
+ */
233
+ input.input-search,
234
+ input[type="search"] {
235
+ padding-right: .5em;
236
+ padding-left: .5em;
237
+ margin-bottom: 0;
238
+ border-radius: 15px;
239
+ }
240
+
241
+ input.input-on-black {
242
+ border: 1px solid rgba(255, 255, 255, .1);
243
+ background: rgba(255, 255, 255, .35);
244
+
245
+ &::-webkit-input-placeholder {
246
+ color: rgba(255, 255, 255, .6);
247
+ }
248
+
249
+ &::-moz-placeholder {
250
+ color: rgba(255, 255, 255, .6);
251
+ }
252
+
253
+ &:focus,
254
+ &.active {
255
+ border: 1px solid #fff;
256
+ background: #fff;
257
+ box-shadow: none;
258
+
259
+ &::-webkit-input-placeholder {
260
+ color: #aaa;
261
+ }
262
+ &::-moz-placeholder {
263
+ color: #aaa;
264
+ }
265
+ }
266
+ }
267
+
268
+ /* Sizes */
269
+ .form .input-lg,
270
+ input.input-lg[type],
271
+ textarea.input-lg,
272
+ select.input-lg {
273
+ font-size: variables.$font-size-xl;
274
+ }
275
+
276
+ .form .input-sm,
277
+ input.input-sm[type],
278
+ textarea.input-sm,
279
+ select.input-sm {
280
+ font-size: variables.$font-size-small;
281
+ }
282
+
283
+ .form .input-xs,
284
+ input.input-xs[type],
285
+ textarea.input-xs,
286
+ select.input-xs {
287
+ font-size: variables.$font-size-smaller;
288
+ }
289
+
290
+ /* Append & Prepend */
291
+ .input-groups {
292
+ display: flex !important;
293
+ align-items: stretch;
294
+ margin-bottom: variables.$base-line;
295
+
296
+ .btn {
297
+ &:hover,
298
+ &:active {
299
+ transform: none;
300
+ }
301
+ }
302
+
303
+ input,
304
+ textarea,
305
+ select {
306
+ flex: 1 1 auto;
307
+ width: 1%;
308
+ min-width: 0;
309
+ display: block !important;
310
+ margin-bottom: 0;
311
+ border-radius: variables.$border-radius;
312
+ }
313
+
314
+ // Zero out joining edges
315
+ input:not(:last-child),
316
+ textarea:not(:last-child),
317
+ select:not(:last-child) {
318
+ border-right: none;
319
+ border-radius: variables.$border-radius 0 0 variables.$border-radius;
320
+ }
321
+
322
+ input:not(:first-child),
323
+ textarea:not(:first-child),
324
+ select:not(:first-child) {
325
+ border-radius: 0 variables.$border-radius variables.$border-radius 0;
326
+ }
327
+
328
+ // Middle element (both prepend and append)
329
+ input:not(:first-child, :last-child),
330
+ textarea:not(:first-child, :last-child),
331
+ select:not(:first-child, :last-child) {
332
+ border-radius: 0;
333
+ }
334
+
335
+ .input-append,
336
+ .input-prepend {
337
+ display: flex;
338
+ align-items: center;
339
+ background-color: var(--ply-bg-surface-alt);
340
+ border: 1px solid var(--ply-color-input-border);
341
+ margin: 0;
342
+ padding: 0 0.75rem;
343
+ color: var(--ply-color-secondary, rgba(0, 0, 0, .6));
344
+ line-height: variables.$base-line;
345
+ font-size: variables.$font-size-small;
346
+ white-space: nowrap;
347
+ }
348
+
349
+ .input-prepend {
350
+ border-right: none;
351
+ border-radius: variables.$border-radius 0 0 variables.$border-radius;
352
+ }
353
+
354
+ .input-append {
355
+ border-left: none;
356
+ border-radius: 0 variables.$border-radius variables.$border-radius 0;
357
+
358
+ &:has(.btn) {
359
+ padding: 0;
360
+ border: none;
361
+ }
362
+
363
+ .btn {
364
+ display: flex;
365
+ align-items: center;
366
+ border-radius: 0 variables.$border-radius variables.$border-radius 0;
367
+ margin: 0;
368
+ border-left: none;
369
+ white-space: nowrap;
370
+
371
+ &[class*="outline"] {
372
+ border: 1px solid var(--ply-color-input-border);
373
+ border-left: none;
374
+ }
375
+ }
376
+ }
377
+
378
+ .btn-append {
379
+ display: flex;
380
+ align-items: stretch;
381
+ margin: 0;
382
+
383
+ .btn {
384
+ display: flex;
385
+ align-items: center;
386
+ border-radius: 0 variables.$border-radius variables.$border-radius 0;
387
+ margin: 0;
388
+ white-space: nowrap;
389
+
390
+ &[class*="outline"] {
391
+ border: 1px solid var(--ply-color-input-border);
392
+ border-left: none;
393
+ }
394
+ }
395
+ }
396
+ }
397
+
398
+ /* Select */
399
+ .form select {
400
+ appearance: none;
401
+ background-color: var(--ply-color-input-bg);
402
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%23525252' d='M1.41 0L6 4.58 10.59 0 12 1.41l-6 6-6-6z'/%3E%3C/svg%3E");
403
+ background-repeat: no-repeat;
404
+ background-position: right 0.75em center;
405
+ background-size: 0.75em;
406
+ padding: 0.5em 2.5em 0.5em 0.75em;
407
+ font-size: 1em;
408
+ line-height: variables.$base-line;
409
+ border: 1px solid var(--ply-color-input-border);
410
+ color: var(--ply-color-body);
411
+ cursor: pointer;
412
+
413
+ &:focus-visible {
414
+ outline: none;
415
+ border-color: var(--ply-color-focus, colors.$color-blue);
416
+ box-shadow: 0 0 0 2px rgba(15, 98, 254, 0.3);
417
+ }
418
+ }
419
+
420
+ /* Select — outlined */
421
+ .form select.select-outlined,
422
+ select.select-outlined {
423
+ appearance: none;
424
+ background-color: transparent;
425
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%23525252' d='M1.41 0L6 4.58 10.59 0 12 1.41l-6 6-6-6z'/%3E%3C/svg%3E");
426
+ background-repeat: no-repeat;
427
+ background-position: right 0.75em center;
428
+ background-size: 0.75em;
429
+ padding: 0.5em 2.5em 0.5em 0.75em;
430
+ border: 1px solid var(--ply-border-strong, colors.$color-neutral-300);
431
+ border-radius: variables.$border-radius;
432
+ color: var(--ply-color-body);
433
+ font-size: 1em;
434
+ line-height: variables.$base-line;
435
+ cursor: pointer;
436
+ width: 100%;
437
+ display: block;
438
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
439
+
440
+ &:hover {
441
+ border-color: var(--ply-color-body);
442
+ }
443
+
444
+ &:focus-visible {
445
+ outline: none;
446
+ border-color: var(--ply-color-focus, colors.$color-blue);
447
+ box-shadow: 0 0 0 1px var(--ply-color-focus, colors.$color-blue);
448
+ }
449
+ }
450
+