create-atsdc-stack 1.1.0 → 1.2.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 (48) hide show
  1. package/.claude/settings.local.json +3 -1
  2. package/CLAUDE.md +236 -215
  3. package/CONTRIBUTING.md +342 -342
  4. package/INSTALLATION.md +359 -359
  5. package/LICENSE +201 -201
  6. package/README.md +405 -405
  7. package/app/.env.example +17 -17
  8. package/app/.github/labeler.yml +61 -0
  9. package/app/.github/workflows/browser-tests.yml +101 -0
  10. package/app/.github/workflows/check.yml +24 -0
  11. package/app/.github/workflows/greetings.yml +16 -0
  12. package/app/.github/workflows/label.yml +22 -0
  13. package/app/.github/workflows/stale.yml +27 -0
  14. package/app/.github/workflows/summary.yml +34 -0
  15. package/app/.stylelintrc.json +8 -0
  16. package/app/README.md +251 -251
  17. package/app/astro.config.mjs +83 -83
  18. package/app/drizzle.config.ts +16 -16
  19. package/app/package.json +66 -52
  20. package/app/playwright.config.ts +27 -0
  21. package/app/public/manifest.webmanifest +36 -36
  22. package/app/pwa-assets.config.ts +8 -0
  23. package/app/src/components/Card.astro +36 -36
  24. package/app/src/db/initialize.ts +107 -107
  25. package/app/src/db/schema.ts +72 -72
  26. package/app/src/db/validations.ts +158 -158
  27. package/app/src/layouts/Layout.astro +63 -63
  28. package/app/src/lib/config.ts +36 -36
  29. package/app/src/lib/content-converter.ts +141 -141
  30. package/app/src/lib/dom-utils.ts +230 -230
  31. package/app/src/lib/exa-search.ts +269 -269
  32. package/app/src/pages/api/chat.ts +91 -91
  33. package/app/src/pages/api/posts.ts +350 -350
  34. package/app/src/pages/index.astro +87 -87
  35. package/app/src/styles/components/button.scss +152 -152
  36. package/app/src/styles/components/card.scss +180 -180
  37. package/app/src/styles/components/form.scss +240 -240
  38. package/app/src/styles/global.scss +141 -141
  39. package/app/src/styles/pages/index.scss +80 -80
  40. package/app/src/styles/reset.scss +83 -83
  41. package/app/src/styles/variables/globals.scss +96 -96
  42. package/app/src/styles/variables/mixins.scss +238 -238
  43. package/app/tests/browser.test.nopause.ts +10 -0
  44. package/app/tests/browser.test.ts +13 -0
  45. package/bin/cli.js +1151 -1151
  46. package/package.json +8 -6
  47. package/app/.astro/settings.json +0 -5
  48. package/app/.astro/types.d.ts +0 -1
@@ -1,180 +1,180 @@
1
- @use '../variables/globals' as *;
2
- @use '../variables/mixins' as *;
3
-
4
- // Card component styles
5
- // Usage (preferred): <div class="card" data-variant="primary" data-state="active">...</div>
6
- // Usage (alternative): <div class="card primary active">Class chaining</div>
7
-
8
- .card-component {
9
- @include card;
10
- display: block;
11
- text-decoration: none;
12
- color: inherit;
13
- transition: all $transition-base;
14
-
15
- &:hover {
16
- transform: translateY(-2px);
17
- box-shadow: $shadow-large;
18
- }
19
-
20
- &__title {
21
- font-size: $font-size-extra-large;
22
- font-weight: $font-weight-semibold;
23
- color: $text-primary;
24
- margin-bottom: $spacing-medium;
25
- }
26
-
27
- &__content {
28
- color: $text-secondary;
29
- line-height: $line-height-relaxed;
30
-
31
- p:last-child {
32
- margin-bottom: 0;
33
- }
34
- }
35
-
36
- // Variant modifiers using data attributes (preferred)
37
- &[data-variant='primary'] {
38
- border-color: $primary-color;
39
- background: linear-gradient(135deg, rgba($primary-color, 0.05) 0%, transparent 100%);
40
- }
41
-
42
- &[data-variant='secondary'] {
43
- border-color: $secondary-color;
44
- background: linear-gradient(135deg, rgba($secondary-color, 0.05) 0%, transparent 100%);
45
- }
46
-
47
- &[data-variant='accent'] {
48
- border-color: $accent-color;
49
- background: linear-gradient(135deg, rgba($accent-color, 0.05) 0%, transparent 100%);
50
- }
51
-
52
- &[data-variant='ghost'] {
53
- border-color: transparent;
54
- background: transparent;
55
- box-shadow: none;
56
-
57
- &:hover {
58
- background-color: $bg-secondary;
59
- }
60
- }
61
-
62
- // State modifiers using data attributes
63
- &[data-state='active'] {
64
- border-color: $primary-color;
65
- box-shadow: $shadow-medium;
66
- }
67
-
68
- &[data-state='disabled'] {
69
- opacity: 0.6;
70
- pointer-events: none;
71
- cursor: not-allowed;
72
- }
73
-
74
- &[data-state='loading'] {
75
- position: relative;
76
- opacity: 0.7;
77
- pointer-events: none;
78
-
79
- &::after {
80
- content: '';
81
- position: absolute;
82
- top: 50%;
83
- left: 50%;
84
- width: 2rem;
85
- height: 2rem;
86
- margin: -1rem 0 0 -1rem;
87
- border: 3px solid $border-color;
88
- border-top-color: $primary-color;
89
- border-radius: 50%;
90
- animation: card-spin 0.8s linear infinite;
91
- }
92
- }
93
-
94
- // Layout modifiers using data attributes
95
- &[data-padding='compact'] {
96
- padding: $spacing-medium;
97
- }
98
-
99
- &[data-padding='comfortable'] {
100
- padding: $spacing-2x-large;
101
- }
102
-
103
- &[data-hover='lift'] {
104
- &:hover {
105
- transform: translateY(-4px);
106
- box-shadow: $shadow-extra-large;
107
- }
108
- }
109
-
110
- &[data-hover='none'] {
111
- &:hover {
112
- transform: none;
113
- box-shadow: $shadow-small;
114
- }
115
- }
116
-
117
- // Alternative: Class chaining when data attributes aren't appropriate
118
- &.primary {
119
- border-color: $primary-color;
120
- background: linear-gradient(135deg, rgba($primary-color, 0.05) 0%, transparent 100%);
121
- }
122
-
123
- &.secondary {
124
- border-color: $secondary-color;
125
- background: linear-gradient(135deg, rgba($secondary-color, 0.05) 0%, transparent 100%);
126
- }
127
-
128
- &.accent {
129
- border-color: $accent-color;
130
- background: linear-gradient(135deg, rgba($accent-color, 0.05) 0%, transparent 100%);
131
- }
132
-
133
- &.ghost {
134
- border-color: transparent;
135
- background: transparent;
136
- box-shadow: none;
137
-
138
- &:hover {
139
- background-color: $bg-secondary;
140
- }
141
- }
142
-
143
- // State class chaining alternatives
144
- &.active {
145
- border-color: $primary-color;
146
- box-shadow: $shadow-medium;
147
- }
148
-
149
- &.disabled {
150
- opacity: 0.6;
151
- pointer-events: none;
152
- cursor: not-allowed;
153
- }
154
-
155
- &.loading {
156
- position: relative;
157
- opacity: 0.7;
158
- pointer-events: none;
159
-
160
- &::after {
161
- content: '';
162
- position: absolute;
163
- top: 50%;
164
- left: 50%;
165
- width: 2rem;
166
- height: 2rem;
167
- margin: -1rem 0 0 -1rem;
168
- border: 3px solid $border-color;
169
- border-top-color: $primary-color;
170
- border-radius: 50%;
171
- animation: card-spin 0.8s linear infinite;
172
- }
173
- }
174
- }
175
-
176
- @keyframes card-spin {
177
- to {
178
- transform: rotate(360deg);
179
- }
180
- }
1
+ @use '../variables/globals' as *;
2
+ @use '../variables/mixins' as *;
3
+
4
+ // Card component styles
5
+ // Usage (preferred): <div class="card" data-variant="primary" data-state="active">...</div>
6
+ // Usage (alternative): <div class="card primary active">Class chaining</div>
7
+
8
+ .card-component {
9
+ @include card;
10
+ display: block;
11
+ text-decoration: none;
12
+ color: inherit;
13
+ transition: all $transition-base;
14
+
15
+ &:hover {
16
+ transform: translateY(-2px);
17
+ box-shadow: $shadow-large;
18
+ }
19
+
20
+ &__title {
21
+ font-size: $font-size-extra-large;
22
+ font-weight: $font-weight-semibold;
23
+ color: $text-primary;
24
+ margin-bottom: $spacing-medium;
25
+ }
26
+
27
+ &__content {
28
+ color: $text-secondary;
29
+ line-height: $line-height-relaxed;
30
+
31
+ p:last-child {
32
+ margin-bottom: 0;
33
+ }
34
+ }
35
+
36
+ // Variant modifiers using data attributes (preferred)
37
+ &[data-variant='primary'] {
38
+ border-color: $primary-color;
39
+ background: linear-gradient(135deg, rgba($primary-color, 0.05) 0%, transparent 100%);
40
+ }
41
+
42
+ &[data-variant='secondary'] {
43
+ border-color: $secondary-color;
44
+ background: linear-gradient(135deg, rgba($secondary-color, 0.05) 0%, transparent 100%);
45
+ }
46
+
47
+ &[data-variant='accent'] {
48
+ border-color: $accent-color;
49
+ background: linear-gradient(135deg, rgba($accent-color, 0.05) 0%, transparent 100%);
50
+ }
51
+
52
+ &[data-variant='ghost'] {
53
+ border-color: transparent;
54
+ background: transparent;
55
+ box-shadow: none;
56
+
57
+ &:hover {
58
+ background-color: $bg-secondary;
59
+ }
60
+ }
61
+
62
+ // State modifiers using data attributes
63
+ &[data-state='active'] {
64
+ border-color: $primary-color;
65
+ box-shadow: $shadow-medium;
66
+ }
67
+
68
+ &[data-state='disabled'] {
69
+ opacity: 0.6;
70
+ pointer-events: none;
71
+ cursor: not-allowed;
72
+ }
73
+
74
+ &[data-state='loading'] {
75
+ position: relative;
76
+ opacity: 0.7;
77
+ pointer-events: none;
78
+
79
+ &::after {
80
+ content: '';
81
+ position: absolute;
82
+ top: 50%;
83
+ left: 50%;
84
+ width: 2rem;
85
+ height: 2rem;
86
+ margin: -1rem 0 0 -1rem;
87
+ border: 3px solid $border-color;
88
+ border-top-color: $primary-color;
89
+ border-radius: 50%;
90
+ animation: card-spin 0.8s linear infinite;
91
+ }
92
+ }
93
+
94
+ // Layout modifiers using data attributes
95
+ &[data-padding='compact'] {
96
+ padding: $spacing-medium;
97
+ }
98
+
99
+ &[data-padding='comfortable'] {
100
+ padding: $spacing-2x-large;
101
+ }
102
+
103
+ &[data-hover='lift'] {
104
+ &:hover {
105
+ transform: translateY(-4px);
106
+ box-shadow: $shadow-extra-large;
107
+ }
108
+ }
109
+
110
+ &[data-hover='none'] {
111
+ &:hover {
112
+ transform: none;
113
+ box-shadow: $shadow-small;
114
+ }
115
+ }
116
+
117
+ // Alternative: Class chaining when data attributes aren't appropriate
118
+ &.primary {
119
+ border-color: $primary-color;
120
+ background: linear-gradient(135deg, rgba($primary-color, 0.05) 0%, transparent 100%);
121
+ }
122
+
123
+ &.secondary {
124
+ border-color: $secondary-color;
125
+ background: linear-gradient(135deg, rgba($secondary-color, 0.05) 0%, transparent 100%);
126
+ }
127
+
128
+ &.accent {
129
+ border-color: $accent-color;
130
+ background: linear-gradient(135deg, rgba($accent-color, 0.05) 0%, transparent 100%);
131
+ }
132
+
133
+ &.ghost {
134
+ border-color: transparent;
135
+ background: transparent;
136
+ box-shadow: none;
137
+
138
+ &:hover {
139
+ background-color: $bg-secondary;
140
+ }
141
+ }
142
+
143
+ // State class chaining alternatives
144
+ &.active {
145
+ border-color: $primary-color;
146
+ box-shadow: $shadow-medium;
147
+ }
148
+
149
+ &.disabled {
150
+ opacity: 0.6;
151
+ pointer-events: none;
152
+ cursor: not-allowed;
153
+ }
154
+
155
+ &.loading {
156
+ position: relative;
157
+ opacity: 0.7;
158
+ pointer-events: none;
159
+
160
+ &::after {
161
+ content: '';
162
+ position: absolute;
163
+ top: 50%;
164
+ left: 50%;
165
+ width: 2rem;
166
+ height: 2rem;
167
+ margin: -1rem 0 0 -1rem;
168
+ border: 3px solid $border-color;
169
+ border-top-color: $primary-color;
170
+ border-radius: 50%;
171
+ animation: card-spin 0.8s linear infinite;
172
+ }
173
+ }
174
+ }
175
+
176
+ @keyframes card-spin {
177
+ to {
178
+ transform: rotate(360deg);
179
+ }
180
+ }