Skip to content

Commit e774b76

Browse files
committed
Merge remote-tracking branch 'refs/remotes/origin/main'
2 parents c9a945c + 972d401 commit e774b76

99 files changed

Lines changed: 1717 additions & 1900 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/skills/ui4-review/SKILL.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,65 @@ These must be replaced with new tokens.
185185

186186
---
187187

188+
### SCSS Patterns in Native CSS (CRITICAL)
189+
190+
Native CSS nesting does NOT support all SCSS patterns. Flag these:
191+
192+
**Bad — `&--modifier` for BEM modifiers:**
193+
194+
```css
195+
.react-datepicker {
196+
/* This does NOT work in native CSS */
197+
&--time-only {
198+
border: none;
199+
}
200+
}
201+
```
202+
203+
In SCSS, `&--time-only` expands to `.react-datepicker--time-only`. In native CSS, `&` represents the _entire selector list_, not a string to concatenate.
204+
205+
**Good — Use flat selectors outside the block:**
206+
207+
```css
208+
.react-datepicker {
209+
/* base styles */
210+
}
211+
212+
.react-datepicker--time-only {
213+
border: none;
214+
}
215+
```
216+
217+
**Also bad — `&__element` for BEM elements:**
218+
219+
```css
220+
.block {
221+
&__element {
222+
/* Does NOT work */
223+
}
224+
}
225+
```
226+
227+
**Detection pattern:** Look for `&--` or `&__` inside CSS blocks. These are SCSS-only patterns.
228+
229+
**Exception:** `&:pseudo` and `& .child` work fine in native CSS:
230+
231+
```css
232+
.button {
233+
&:hover {
234+
/* OK */
235+
}
236+
&:focus {
237+
/* OK */
238+
}
239+
& .icon {
240+
/* OK */
241+
}
242+
}
243+
```
244+
245+
---
246+
188247
## Behavior: AUTO-FIX
189248

190249
**Do NOT just report violations. FIX THEM.**

.github/workflows/pr-title.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ jobs:
4949
email-nodemailer
5050
email-resend
5151
eslint
52+
evals
5253
graphql
5354
kv
5455
kv-redis
@@ -73,6 +74,7 @@ jobs:
7374
richtext-\*
7475
richtext-lexical
7576
sdk
77+
skills
7678
storage-\*
7779
storage-azure
7880
storage-gcs

package.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,35 +122,45 @@
122122
"test:e2e:prod:run:noturbo": "pnpm runts ./test/runE2E.ts --prod --no-turbo",
123123
"test:eval": "cross-env NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 vitest --run --project eval",
124124
"test:eval:baseline": "cross-env EVAL_VARIANT=baseline NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 vitest --run --project eval",
125+
"test:eval:building-plugins": "pnpm run test:eval:building-plugins:skill",
125126
"test:eval:building-plugins:baseline": "cross-env EVAL_VARIANT=baseline NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.building-plugins.spec",
126127
"test:eval:building-plugins:low-power": "cross-env EVAL_VARIANT=low-power NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.building-plugins.spec",
127128
"test:eval:building-plugins:skill": "cross-env NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.building-plugins.spec",
129+
"test:eval:collections": "pnpm run test:eval:collections:skill",
128130
"test:eval:collections:baseline": "cross-env EVAL_VARIANT=baseline NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.collections.spec",
129131
"test:eval:collections:low-power": "cross-env EVAL_VARIANT=low-power NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.collections.spec",
130132
"test:eval:collections:skill": "cross-env NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.collections.spec",
133+
"test:eval:config": "pnpm run test:eval:config:skill",
131134
"test:eval:config:baseline": "cross-env EVAL_VARIANT=baseline NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.config.spec",
132135
"test:eval:config:low-power": "cross-env EVAL_VARIANT=low-power NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.config.spec",
133136
"test:eval:config:skill": "cross-env NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.config.spec",
137+
"test:eval:conventions": "pnpm run test:eval:conventions:skill",
134138
"test:eval:conventions:baseline": "cross-env EVAL_VARIANT=baseline NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.conventions.spec",
135139
"test:eval:conventions:low-power": "cross-env EVAL_VARIANT=low-power NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.conventions.spec",
136140
"test:eval:conventions:skill": "cross-env NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.conventions.spec",
141+
"test:eval:fields": "pnpm run test:eval:fields:skill",
137142
"test:eval:fields:baseline": "cross-env EVAL_VARIANT=baseline NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.fields.spec",
138143
"test:eval:fields:low-power": "cross-env EVAL_VARIANT=low-power NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.fields.spec",
139144
"test:eval:fields:skill": "cross-env NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.fields.spec",
145+
"test:eval:graphql": "pnpm run test:eval:graphql:skill",
140146
"test:eval:graphql:baseline": "cross-env EVAL_VARIANT=baseline NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.graphql.spec",
141147
"test:eval:graphql:low-power": "cross-env EVAL_VARIANT=low-power NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.graphql.spec",
142148
"test:eval:graphql:skill": "cross-env NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.graphql.spec",
149+
"test:eval:local-api": "pnpm run test:eval:local-api:skill",
143150
"test:eval:local-api:baseline": "cross-env EVAL_VARIANT=baseline NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.local-api.spec",
144151
"test:eval:local-api:low-power": "cross-env EVAL_VARIANT=low-power NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.local-api.spec",
145152
"test:eval:local-api:skill": "cross-env NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.local-api.spec",
146153
"test:eval:low-power": "cross-env EVAL_VARIANT=low-power NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 vitest --run --project eval",
154+
"test:eval:negative": "pnpm run test:eval:negative:skill",
147155
"test:eval:negative:baseline": "cross-env EVAL_VARIANT=baseline NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.negative.spec",
148156
"test:eval:negative:low-power": "cross-env EVAL_VARIANT=low-power NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.negative.spec",
149157
"test:eval:negative:skill": "cross-env NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.negative.spec",
158+
"test:eval:official-plugins": "pnpm run test:eval:official-plugins:skill",
150159
"test:eval:official-plugins:baseline": "cross-env EVAL_VARIANT=baseline NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.official-plugins.spec",
151160
"test:eval:official-plugins:low-power": "cross-env EVAL_VARIANT=low-power NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.official-plugins.spec",
152161
"test:eval:official-plugins:skill": "cross-env NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.official-plugins.spec",
153162
"test:eval:report": "cross-env NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 vitest --run --project eval --reporter=default --reporter=html --outputFile.html=test/evals/eval-results/report.html",
163+
"test:eval:rest-api": "pnpm run test:eval:rest-api:skill",
154164
"test:eval:rest-api:baseline": "cross-env EVAL_VARIANT=baseline NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.rest-api.spec",
155165
"test:eval:rest-api:low-power": "cross-env EVAL_VARIANT=low-power NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.rest-api.spec",
156166
"test:eval:rest-api:skill": "cross-env NODE_OPTIONS=\"--no-deprecation --no-experimental-strip-types\" NODE_NO_WARNINGS=1 pnpm exec vitest --run --project eval eval.rest-api.spec",

packages/translations/src/clientKeys.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ export const clientTranslationKeys = createClientTranslationKeys([
230230
'general:custom',
231231
'general:dark',
232232
'general:dashboard',
233+
'general:decrement',
233234
'general:delete',
234235
'general:deleted',
235236
'general:deletedAt',
@@ -260,6 +261,7 @@ export const clientTranslationKeys = createClientTranslationKeys([
260261
'general:emailAddress',
261262
'general:emptyTrash',
262263
'general:emptyTrashLabel',
264+
'general:enterANumber',
263265
'general:enterAValue',
264266
'general:error',
265267
'general:errors',
@@ -270,6 +272,7 @@ export const clientTranslationKeys = createClientTranslationKeys([
270272
'general:globals',
271273
'general:goBack',
272274
'general:groupByLabel',
275+
'general:increment',
273276
'general:isEditing',
274277
'general:item',
275278
'general:items',

packages/translations/src/languages/ar.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@ export const arTranslations: DefaultTranslationsObject = {
290290
custom: 'مخصص',
291291
dark: 'غامق',
292292
dashboard: 'لوحة التّحكّم',
293+
decrement: 'إنقاص',
293294
delete: 'حذف',
294295
deleted: 'تم الحذف',
295296
deletedAt: 'تم الحذف في',
@@ -322,6 +323,7 @@ export const arTranslations: DefaultTranslationsObject = {
322323
emailAddress: 'عنوان البريد الإلكتروني',
323324
emptyTrash: 'أفرغ القمامة',
324325
emptyTrashLabel: 'أفرغ سلة المحذوفات {{label}}',
326+
enterANumber: 'أدخل رقماً',
325327
enterAValue: 'أدخل قيمة',
326328
error: 'خطأ',
327329
errors: 'أخطاء',
@@ -336,6 +338,7 @@ export const arTranslations: DefaultTranslationsObject = {
336338
goBack: 'العودة',
337339
groupByLabel: 'التجميع حسب {{label}}',
338340
import: 'استيراد',
341+
increment: 'زيادة',
339342
isEditing: 'يحرر',
340343
item: 'عنصر',
341344
items: 'عناصر',

packages/translations/src/languages/az.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,7 @@ export const azTranslations: DefaultTranslationsObject = {
302302
custom: 'Xüsusi',
303303
dark: 'Tünd',
304304
dashboard: 'Panel',
305+
decrement: 'Azaltmaq',
305306
delete: 'Sil',
306307
deleted: 'Silinmiş',
307308
deletedAt: 'Silinib Tarixi',
@@ -335,6 +336,7 @@ export const azTranslations: DefaultTranslationsObject = {
335336
emailAddress: 'Elektron poçt ünvanı',
336337
emptyTrash: 'Zibil qutusunu boşaltın',
337338
emptyTrashLabel: '{{label}} zibilini boşaltın',
339+
enterANumber: 'Bir rəqəm daxil edin',
338340
enterAValue: 'Bir dəyər daxil edin',
339341
error: 'Xəta',
340342
errors: 'Xətalar',
@@ -349,6 +351,7 @@ export const azTranslations: DefaultTranslationsObject = {
349351
goBack: 'Geri qayıt',
350352
groupByLabel: '{{label}} ilə qruplaşdırın',
351353
import: 'İdxal',
354+
increment: 'Artırmaq',
352355
isEditing: 'redaktə edir',
353356
item: 'Əşya',
354357
items: 'maddələr',

packages/translations/src/languages/bg.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,7 @@ export const bgTranslations: DefaultTranslationsObject = {
299299
custom: 'Персонализиран',
300300
dark: 'Тъмна',
301301
dashboard: 'Табло',
302+
decrement: 'Декрементиране',
302303
delete: 'Изтрий',
303304
deleted: 'Изтрито',
304305
deletedAt: 'Изтрито на',
@@ -332,6 +333,7 @@ export const bgTranslations: DefaultTranslationsObject = {
332333
emailAddress: 'Имейл адрес',
333334
emptyTrash: 'Изпразни кошчето',
334335
emptyTrashLabel: 'Изпразнете кошчето за {{label}}',
336+
enterANumber: 'Въведете число',
335337
enterAValue: 'Въведи стойност',
336338
error: 'Грешка',
337339
errors: 'Грешки',
@@ -346,6 +348,7 @@ export const bgTranslations: DefaultTranslationsObject = {
346348
goBack: 'Върни се',
347349
groupByLabel: 'Групирай по {{label}}',
348350
import: 'Внос',
351+
increment: 'Увеличение',
349352
isEditing: 'редактира',
350353
item: 'Aртикул',
351354
items: 'артикули',

packages/translations/src/languages/bnBd.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@ export const bnBdTranslations: DefaultTranslationsObject = {
304304
custom: 'কাস্টম',
305305
dark: 'ডার্ক',
306306
dashboard: 'ড্যাশবোর্ড',
307+
decrement: 'হ্রাস করুন',
307308
delete: 'মুছুন',
308309
deleted: 'মুছে ফেলা হয়েছে',
309310
deletedAt: 'মুছে ফেলার সময়',
@@ -337,6 +338,7 @@ export const bnBdTranslations: DefaultTranslationsObject = {
337338
emailAddress: 'ইমেইল ঠিকানা',
338339
emptyTrash: 'ট্র্যাশ খালি করুন',
339340
emptyTrashLabel: '{{label}} ট্র্যাশ খালি করুন',
341+
enterANumber: 'একটি সংখ্যা লিখুন',
340342
enterAValue: 'একটি মান লিখুন',
341343
error: 'ত্রুটি',
342344
errors: 'ত্রুটিগুলি',
@@ -351,6 +353,7 @@ export const bnBdTranslations: DefaultTranslationsObject = {
351353
goBack: 'পিছনে যান',
352354
groupByLabel: '{{label}} অনুযায়ী গ্রুপ করুন',
353355
import: 'ইম্পোর্ট করুন',
356+
increment: 'বৃদ্ধি',
354357
isEditing: 'সম্পাদনা করছেন',
355358
item: 'আইটেম',
356359
items: 'আইটেমগুলি',

packages/translations/src/languages/bnIn.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ export const bnInTranslations: DefaultTranslationsObject = {
303303
custom: 'কাস্টম',
304304
dark: 'ডার্ক',
305305
dashboard: 'ড্যাশবোর্ড',
306+
decrement: 'ডিক্রিমেন্ট',
306307
delete: 'মুছুন',
307308
deleted: 'মুছে ফেলা হয়েছে',
308309
deletedAt: 'মুছে ফেলার সময়',
@@ -336,6 +337,7 @@ export const bnInTranslations: DefaultTranslationsObject = {
336337
emailAddress: 'ইমেইল ঠিকানা',
337338
emptyTrash: 'ট্র্যাশ খালি করুন',
338339
emptyTrashLabel: '{{label}} ফাঁকা করুন',
340+
enterANumber: 'একটি সংখ্যা প্রবেশ করুন',
339341
enterAValue: 'একটি মান লিখুন',
340342
error: 'ত্রুটি',
341343
errors: 'ত্রুটিগুলি',
@@ -350,6 +352,7 @@ export const bnInTranslations: DefaultTranslationsObject = {
350352
goBack: 'পিছনে যান',
351353
groupByLabel: '{{label}} দ্বারা গ্রুপ করুন',
352354
import: 'ইম্পোর্ট করুন',
355+
increment: 'বৃদ্ধি',
353356
isEditing: 'সম্পাদনা করছেন',
354357
item: 'আইটেম',
355358
items: 'আইটেমগুলি',

packages/translations/src/languages/ca.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ export const caTranslations: DefaultTranslationsObject = {
301301
custom: 'Personalitzat',
302302
dark: 'Fosc',
303303
dashboard: 'Tauler',
304+
decrement: 'Decrementar',
304305
delete: 'Eliminar',
305306
deleted: 'Eliminat',
306307
deletedAt: 'Eliminat en',
@@ -334,6 +335,7 @@ export const caTranslations: DefaultTranslationsObject = {
334335
emailAddress: 'Addressa de correu electrònic',
335336
emptyTrash: 'Buida la paperera',
336337
emptyTrashLabel: 'Buideu la paperera {{label}}',
338+
enterANumber: 'Introdueixi un nombre',
337339
enterAValue: 'Introdueix un valor',
338340
error: 'Error',
339341
errors: 'Errors',
@@ -348,6 +350,7 @@ export const caTranslations: DefaultTranslationsObject = {
348350
goBack: 'Torna enrere',
349351
groupByLabel: 'Agrupa per {{label}}',
350352
import: 'Importar',
353+
increment: 'Increment',
351354
isEditing: 'esta editant',
352355
item: 'Element',
353356
items: 'articles',

0 commit comments

Comments
 (0)