twntyx-css 1.0.9 → 1.0.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.
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -37,6 +37,16 @@
37
37
  "name": "divider-end",
38
38
  "className": "divider-end",
39
39
  "description": "Aligns content to the end"
40
+ },
41
+ {
42
+ "name": "divider-dashed",
43
+ "className": "divider-dashed",
44
+ "description": "Renders the divider lines with a dashed border style"
45
+ },
46
+ {
47
+ "name": "divider-dotted",
48
+ "className": "divider-dotted",
49
+ "description": "Renders the divider lines with a dotted border style"
40
50
  }
41
51
  ],
42
52
  "sizes": [],
@@ -49,7 +59,9 @@
49
59
  "optionalClasses": [
50
60
  "divider-horizontal",
51
61
  "divider-start",
52
- "divider-end"
62
+ "divider-end",
63
+ "divider-dashed",
64
+ "divider-dotted"
53
65
  ],
54
66
  "requiredChildren": [],
55
67
  "optionalChildren": []
@@ -60,12 +72,16 @@
60
72
  ],
61
73
  "required": [],
62
74
  "dataAttributes": [],
63
- "roles": [],
75
+ "roles": [
76
+ "separator"
77
+ ],
64
78
  "aria": []
65
79
  },
66
80
  "a11y": {
67
81
  "interactive": false,
68
- "requiredRoles": [],
82
+ "requiredRoles": [
83
+ "separator"
84
+ ],
69
85
  "requiredAria": [],
70
86
  "keyboardSupport": [],
71
87
  "focusBehavior": "No keyboard interaction is required unless nested interactive children are introduced."
@@ -82,7 +98,6 @@
82
98
  ],
83
99
  "tokenUsage": [
84
100
  "line-highlight",
85
- "text-default",
86
101
  "text-tertiary"
87
102
  ],
88
103
  "examples": [
@@ -0,0 +1,91 @@
1
+ {
2
+ "id": "dot-wave-background",
3
+ "name": "Dot Wave Background",
4
+ "status": "preview",
5
+ "summary": "Reusable animated dot-wave background for decorative template surfaces and ambient interface layers.",
6
+ "keywords": [
7
+ "ambient",
8
+ "animated background",
9
+ "background",
10
+ "backgrounds",
11
+ "canvas",
12
+ "decorative",
13
+ "dot wave",
14
+ "dot wave background",
15
+ "dot-wave-background",
16
+ "dots",
17
+ "template",
18
+ "wave"
19
+ ],
20
+ "sourcePaths": [
21
+ "app/design-system/dot-wave-background/page.js",
22
+ "components/backgrounds/DotWaveBackground.js"
23
+ ],
24
+ "apiModel": "html-class",
25
+ "baseClass": "dot-wave-background",
26
+ "variants": [],
27
+ "sizes": [],
28
+ "states": [],
29
+ "structure": {
30
+ "rootElement": "canvas",
31
+ "requiredClasses": [
32
+ "dot-wave-background"
33
+ ],
34
+ "optionalClasses": [
35
+ "pointer-events-none"
36
+ ],
37
+ "requiredChildren": [],
38
+ "optionalChildren": []
39
+ },
40
+ "attributes": {
41
+ "allowed": [
42
+ "aria-hidden",
43
+ "class",
44
+ "style"
45
+ ],
46
+ "required": [
47
+ "aria-hidden"
48
+ ],
49
+ "dataAttributes": [],
50
+ "roles": [],
51
+ "aria": [
52
+ "aria-hidden"
53
+ ]
54
+ },
55
+ "a11y": {
56
+ "interactive": false,
57
+ "requiredRoles": [],
58
+ "requiredAria": [
59
+ "aria-hidden"
60
+ ],
61
+ "keyboardSupport": [],
62
+ "focusBehavior": "Decorative canvas backgrounds must remain hidden from assistive technology and must not capture pointer or keyboard interaction."
63
+ },
64
+ "dos": [
65
+ "Apply the base class 'dot-wave-background' on the canvas element.",
66
+ "Use aria-hidden=\"true\" for decorative background usage.",
67
+ "Use pointer-events-none when layering the background behind interactive content."
68
+ ],
69
+ "donts": [
70
+ "Do not use the canvas as meaningful content without an accessible alternative.",
71
+ "Do not allow the background layer to capture pointer events from foreground controls.",
72
+ "Do not place interactive children inside the decorative canvas."
73
+ ],
74
+ "tokenUsage": [],
75
+ "examples": [
76
+ {
77
+ "id": "canonical",
78
+ "file": "examples/dot-wave-background.html",
79
+ "description": "Minimal canonical Dot Wave Background usage."
80
+ }
81
+ ],
82
+ "composition": {
83
+ "patterns": [],
84
+ "relatedComponents": [],
85
+ "notes": []
86
+ },
87
+ "breakingChangePolicy": {
88
+ "classContract": "Base class, documented modifiers, and state class names are semver-protected for consumer markup.",
89
+ "a11yContract": "Documented role and aria requirements are semver-protected for generated markup."
90
+ }
91
+ }
@@ -0,0 +1 @@
1
+ <canvas class="dot-wave-background pointer-events-none" aria-hidden="true"></canvas>
package/llm/index.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "llmSchemaVersion": "1.0.0",
3
- "designSystemVersion": "1.0.9",
3
+ "designSystemVersion": "1.0.10",
4
4
  "packageName": "twntyx-css",
5
5
  "apiModel": "html-class",
6
- "sourceFingerprint": "da5c687a1df4907a77f8f1b512ad33f27f39b7edff70707323b7590abd5d56ba",
6
+ "sourceFingerprint": "f7c8ee0540e7bb413846b1be281b9f5034f86ab48ade5f990858bbcce6fea5ad",
7
7
  "files": {
8
8
  "schema": "schema.json",
9
9
  "tokens": "tokens.json",
@@ -627,6 +627,27 @@
627
627
  "split"
628
628
  ]
629
629
  },
630
+ {
631
+ "id": "dot-wave-background",
632
+ "name": "Dot Wave Background",
633
+ "file": "components/dot-wave-background.json",
634
+ "status": "preview",
635
+ "summary": "Reusable animated dot-wave background for decorative template surfaces and ambient interface layers.",
636
+ "keywords": [
637
+ "ambient",
638
+ "animated background",
639
+ "background",
640
+ "backgrounds",
641
+ "canvas",
642
+ "decorative",
643
+ "dot wave",
644
+ "dot wave background",
645
+ "dot-wave-background",
646
+ "dots",
647
+ "template",
648
+ "wave"
649
+ ]
650
+ },
630
651
  {
631
652
  "id": "field",
632
653
  "name": "Field",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "twntyx-css",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "exports": {
5
5
  "./llm": "./llm/index.json",
6
6
  "./llm/components/*": "./llm/components/*.json",
@@ -107,6 +107,7 @@
107
107
  alternate-reverse;
108
108
  --animate-bounce-left-small: bounceLeftSmall 0.7s ease-in-out infinite;
109
109
  --animate-rotate: rotate 10s linear infinite;
110
+ --animate-profile-edit-dash: profile-edit-dash 1.2s linear infinite;
110
111
  --animate-double-rays: doubleRays 3s cubic-bezier(0.7, 0, 0.3, 1) infinite
111
112
  both;
112
113
  --animate-double-rays-transform: doubleRaysTransform 3s
@@ -1175,6 +1176,12 @@
1175
1176
  }
1176
1177
  }
1177
1178
 
1179
+ @keyframes profile-edit-dash {
1180
+ to {
1181
+ stroke-dashoffset: -2;
1182
+ }
1183
+ }
1184
+
1178
1185
  @keyframes bounceLeft {
1179
1186
  0%,
1180
1187
  100% {
@@ -2203,8 +2210,8 @@
2203
2210
  .flip {
2204
2211
  @apply relative
2205
2212
  transition-transform
2206
- duration-[1.25s]
2207
- ease-[cubic-bezier(0.8,0,0.2,1)];
2213
+ duration-500
2214
+ ease-in-out-cubic;
2208
2215
  transform-style: preserve-3d;
2209
2216
  /* backface-visibility: hidden; */
2210
2217
 
@@ -109,7 +109,7 @@
109
109
  }
110
110
 
111
111
  @utility datepicker-subheader {
112
- @apply flex pb-1.5;
112
+ @apply flex pb-1.5 justify-center;
113
113
 
114
114
  > span {
115
115
  @apply block m-px w-10 text-sm text-center text-core-ui-500 dark:text-core-ui-400;
@@ -11,7 +11,7 @@
11
11
  /* Lines using pseudo elements */
12
12
  &::before,
13
13
  &::after {
14
- @apply content-[''] bg-text-default/10;
14
+ @apply content-[''] border-t border-t-text-default/10;
15
15
  }
16
16
 
17
17
  /* Horizontal divider lines */
@@ -28,7 +28,7 @@
28
28
 
29
29
  &::before,
30
30
  &::after {
31
- @apply w-px h-full;
31
+ @apply w-px h-full border-l border-l-text-default/10;
32
32
  }
33
33
  }
34
34
 
@@ -38,13 +38,13 @@
38
38
  @apply flex-[0.25];
39
39
  }
40
40
  &::after {
41
- @apply flex-[1];
41
+ @apply flex-1;
42
42
  }
43
43
  }
44
44
 
45
45
  &.divider-end {
46
46
  &::before {
47
- @apply flex-[1];
47
+ @apply flex-1;
48
48
  }
49
49
  &::after {
50
50
  @apply flex-[0.25];
@@ -66,7 +66,21 @@
66
66
  &.divider-highlight {
67
67
  &::before,
68
68
  &::after {
69
- @apply bg-line-highlight;
69
+ @apply border-line-highlight;
70
+ }
71
+ }
72
+
73
+ &.divider-dashed {
74
+ &::before,
75
+ &::after {
76
+ @apply border-dashed;
77
+ }
78
+ }
79
+
80
+ &.divider-dotted {
81
+ &::before,
82
+ &::after {
83
+ @apply border-dotted;
70
84
  }
71
85
  }
72
86
  }
package/styles/font.css CHANGED
@@ -7,6 +7,7 @@
7
7
  src: url("../fonts/InstrumentSans-VariableFont_wdth,wght.ttf") format("truetype");
8
8
  font-weight: 100 900;
9
9
  font-style: normal;
10
+ font-display: swap;
10
11
  }
11
12
 
12
13
  @font-face {
@@ -14,46 +15,59 @@
14
15
  src: url("../fonts/InstrumentSans-Italic-VariableFont_wdth,wght.ttf") format("truetype");
15
16
  font-weight: 100 900;
16
17
  font-style: italic;
18
+ font-display: swap;
17
19
  }
18
20
 
19
21
  @font-face {
20
22
  font-family: "Gazpacho";
21
- src: url("../fonts/GazpachoRegular.otf") format("opentype");
23
+ src: url("../fonts/GazpachoRegular.woff2") format("woff2"),
24
+ url("../fonts/GazpachoRegular.otf") format("opentype");
22
25
  font-weight: 400;
23
26
  font-style: normal;
27
+ font-display: swap;
24
28
  }
25
29
 
26
30
  @font-face {
27
31
  font-family: "Gazpacho";
28
- src: url("../fonts/GazpachoRegularItalic.otf") format("opentype");
32
+ src: url("../fonts/GazpachoRegularItalic.woff2") format("woff2"),
33
+ url("../fonts/GazpachoRegularItalic.otf") format("opentype");
29
34
  font-weight: 400;
30
35
  font-style: italic;
36
+ font-display: swap;
31
37
  }
32
38
 
33
39
  @font-face {
34
40
  font-family: "Gazpacho";
35
- src: url("../fonts/GazpachoMedium.otf") format("opentype");
41
+ src: url("../fonts/GazpachoMedium.woff2") format("woff2"),
42
+ url("../fonts/GazpachoMedium.otf") format("opentype");
36
43
  font-weight: 500;
37
44
  font-style: normal;
45
+ font-display: swap;
38
46
  }
39
47
 
40
48
  @font-face {
41
49
  font-family: "Gazpacho";
42
- src: url("../fonts/GazpachoMediumItalic.otf") format("opentype");
50
+ src: url("../fonts/GazpachoMediumItalic.woff2") format("woff2"),
51
+ url("../fonts/GazpachoMediumItalic.otf") format("opentype");
43
52
  font-weight: 500;
44
53
  font-style: italic;
54
+ font-display: swap;
45
55
  }
46
56
 
47
57
  @font-face {
48
58
  font-family: "Gazpacho";
49
- src: url("../fonts/GazpachoBold.otf") format("opentype");
59
+ src: url("../fonts/GazpachoBold.woff2") format("woff2"),
60
+ url("../fonts/GazpachoBold.otf") format("opentype");
50
61
  font-weight: 700;
51
62
  font-style: normal;
63
+ font-display: swap;
52
64
  }
53
65
 
54
66
  @font-face {
55
67
  font-family: "Gazpacho";
56
- src: url("../fonts/GazpachoBoldItalic.otf") format("opentype");
68
+ src: url("../fonts/GazpachoBoldItalic.woff2") format("woff2"),
69
+ url("../fonts/GazpachoBoldItalic.otf") format("opentype");
57
70
  font-weight: 700;
58
71
  font-style: italic;
59
- }
72
+ font-display: swap;
73
+ }
@@ -1,18 +1,18 @@
1
- @import "tailwindcss";
1
+ @import 'tailwindcss';
2
2
 
3
3
  /*----------------------------*/
4
4
  /* FORM */
5
5
  /*----------------------------*/
6
6
 
7
7
  @utility input-label {
8
- @apply text-sm font-normal select-none;
8
+ @apply text-xs uppercase tracking-wider text-text-secondary font-bold font-body select-none;
9
9
 
10
10
  &:is(label) {
11
11
  @apply cursor-pointer;
12
12
  }
13
13
 
14
14
  small {
15
- @apply text-xs font-light;
15
+ @apply text-xxs;
16
16
  }
17
17
  }
18
18
 
@@ -75,7 +75,7 @@
75
75
  border
76
76
  border-brand-default
77
77
  transition-[background-position,brightness]
78
- shadow-[inset_0_1px_0_0_color-mix(in_srgb,var(--color-brand-moderate)_100%,transparent),inset_0_-2px_0_0_color-mix(in_srgb,var(--color-brand-default)_50%,transparent)]
78
+ shadow-[inset_0_1px_0_0_color-mix(in_srgb,var(--color-brand-moderate)_100%,transparent),inset_0_-2px_0_0_color-mix(in_srgb,var(--color-brand-strong)_15%,transparent)]
79
79
  dark:shadow-[inset_0_1px_0_0_color-mix(in_srgb,var(--color-brand-default)_100%,transparent),inset_0_-2px_0_0_color-mix(in_srgb,var(--color-brand-moderate)_50%,transparent)]
80
80
  duration-75
81
81
  ease-out-cubic;
@@ -148,7 +148,10 @@
148
148
  @apply surface-brand
149
149
  hover:brightness-105
150
150
  hover:border-brand-strong
151
- active:border-brand-default;
151
+ active:border-brand-default
152
+ transition-[filter,box-shadow,border-color]
153
+ hover:shadow-[inset_0_1px_0_0_color-mix(in_srgb,var(--color-brand-moderate)_100%,transparent),inset_0_-1px_0_0_color-mix(in_srgb,var(--color-brand-strong)_15%,transparent)]
154
+ dark:hover:shadow-[inset_0_1px_0_0_color-mix(in_srgb,var(--color-brand-default)_100%,transparent),inset_0_-1px_0_0_color-mix(in_srgb,var(--color-brand-moderate)_50%,transparent)];
152
155
  }
153
156
 
154
157
  @utility surface-interactive {
@@ -14,8 +14,7 @@
14
14
  }
15
15
 
16
16
  @utility timeline-dot {
17
- @apply
18
- size-(--timeline-marker-size)
17
+ @apply size-(--timeline-marker-size)
19
18
  block
20
19
  rounded-full
21
20
  border
@@ -24,8 +23,7 @@
24
23
  }
25
24
 
26
25
  @utility timeline-marker {
27
- @apply
28
- size-(--timeline-marker-size)
26
+ @apply size-(--timeline-marker-size)
29
27
  inline-flex
30
28
  shrink-0
31
29
  items-center
@@ -44,8 +42,7 @@
44
42
  }
45
43
 
46
44
  @utility timeline-connector {
47
- @apply
48
- block
45
+ @apply block
49
46
  rounded-full
50
47
  bg-line-default;
51
48
  }
@@ -55,7 +52,7 @@
55
52
  .timeline-vertical,
56
53
  .timeline-activity {
57
54
  > :where(li, .timeline-item) {
58
- @apply relative px-(--timeline-item-indent);
55
+ @apply relative pl-(--timeline-item-indent);
59
56
  }
60
57
 
61
58
  > :where(li, .timeline-item):not(:last-child)::before {
@@ -78,7 +75,7 @@
78
75
  --timeline-item-indent: 1.75rem;
79
76
 
80
77
  > :where(li, .timeline-item):not(:last-child) {
81
- @apply pb-10;
78
+ @apply pb-4;
82
79
  }
83
80
 
84
81
  > :where(li, .timeline-item) > :where(.timeline-marker, .timeline-dot) {
@@ -96,7 +93,7 @@
96
93
  --timeline-item-indent: 2.25rem;
97
94
 
98
95
  > :where(li, .timeline-item):not(:last-child) {
99
- @apply pb-10;
96
+ @apply pb-4;
100
97
  }
101
98
 
102
99
  > :where(li, .timeline-item) > .timeline-marker {
@@ -141,7 +138,7 @@
141
138
  --timeline-item-indent: 2.25rem;
142
139
 
143
140
  > :where(li, .timeline-item):not(:last-child) {
144
- @apply pb-10;
141
+ @apply pb-4;
145
142
  }
146
143
 
147
144
  > :where(li, .timeline-item) > .timeline-marker {
@@ -54,6 +54,10 @@ body {
54
54
  @apply text-sm font-light font-body;
55
55
  }
56
56
 
57
+ @utility label {
58
+ @apply text-xs font-bold tracking-wide uppercase font-body;
59
+ }
60
+
57
61
  @utility caption {
58
62
  @apply text-xs font-normal font-body;
59
63
  }