@thanh01.pmt/interactive-quiz-kit 1.0.24 → 1.0.27
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/dist/ai.cjs +195 -243
- package/dist/{ai.js → ai.mjs} +195 -243
- package/dist/authoring.cjs +103296 -10569
- package/dist/authoring.mjs +105685 -0
- package/dist/index.cjs +2609 -206
- package/dist/{index.js → index.mjs} +2608 -205
- package/dist/player.cjs +93661 -3364
- package/dist/player.mjs +94199 -0
- package/dist/react-ui.cjs +164435 -14143
- package/dist/react-ui.mjs +167596 -0
- package/package.json +69 -66
- package/dist/authoring.js +0 -12944
- package/dist/player.js +0 -3890
- package/dist/react-ui.js +0 -17283
|
@@ -2,28 +2,6 @@ import { z } from 'zod';
|
|
|
2
2
|
import { genkit } from 'genkit';
|
|
3
3
|
import { gemini20Flash, googleAI } from '@genkit-ai/googleai';
|
|
4
4
|
import JSZip from 'jszip';
|
|
5
|
-
import { clsx } from 'clsx';
|
|
6
|
-
import { twMerge } from 'tailwind-merge';
|
|
7
|
-
|
|
8
|
-
var __defProp = Object.defineProperty;
|
|
9
|
-
var __defProps = Object.defineProperties;
|
|
10
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
11
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
12
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
13
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
14
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
15
|
-
var __spreadValues = (a, b) => {
|
|
16
|
-
for (var prop in b || (b = {}))
|
|
17
|
-
if (__hasOwnProp.call(b, prop))
|
|
18
|
-
__defNormalProp(a, prop, b[prop]);
|
|
19
|
-
if (__getOwnPropSymbols)
|
|
20
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
21
|
-
if (__propIsEnum.call(b, prop))
|
|
22
|
-
__defNormalProp(a, prop, b[prop]);
|
|
23
|
-
}
|
|
24
|
-
return a;
|
|
25
|
-
};
|
|
26
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
27
5
|
|
|
28
6
|
// src/services/SCORMService.ts
|
|
29
7
|
var SCORM_TRUE = "true";
|
|
@@ -44,11 +22,12 @@ var SCORMService = class {
|
|
|
44
22
|
this.isInitialized = false;
|
|
45
23
|
this.isTerminated = false;
|
|
46
24
|
this.studentName = null;
|
|
47
|
-
this.settings =
|
|
25
|
+
this.settings = {
|
|
48
26
|
setCompletionOnFinish: true,
|
|
49
27
|
setSuccessOnPass: true,
|
|
50
|
-
autoCommit: true
|
|
51
|
-
|
|
28
|
+
autoCommit: true,
|
|
29
|
+
...settings
|
|
30
|
+
};
|
|
52
31
|
if (typeof window !== "undefined") {
|
|
53
32
|
this._findAPI();
|
|
54
33
|
}
|
|
@@ -154,14 +133,13 @@ var SCORMService = class {
|
|
|
154
133
|
}
|
|
155
134
|
}
|
|
156
135
|
getValue(element) {
|
|
157
|
-
var _a;
|
|
158
136
|
if (!this.hasAPI() || !this.isInitialized) return null;
|
|
159
137
|
const value = this.scormVersionFound === "2004" ? this.scormAPI.GetValue(element) : this.scormAPI.LMSGetValue(element);
|
|
160
138
|
const error = this.getLastError();
|
|
161
139
|
if (error.code !== SCORM_NO_ERROR && error.code !== "403" && error.code !== "0") {
|
|
162
140
|
console.warn(`SCORMService: GetValue for ${element} produced an error ${error.code}: ${error.message}. Returning raw value:`, value);
|
|
163
141
|
}
|
|
164
|
-
return
|
|
142
|
+
return value?.toString() ?? null;
|
|
165
143
|
}
|
|
166
144
|
commit() {
|
|
167
145
|
if (!this.hasAPI() || !this.isInitialized) {
|
|
@@ -233,7 +211,6 @@ var SCORMService = class {
|
|
|
233
211
|
}
|
|
234
212
|
}
|
|
235
213
|
getLastError() {
|
|
236
|
-
var _a, _b;
|
|
237
214
|
if (!this.hasAPI()) return { code: "-1", message: "SCORM API not found." };
|
|
238
215
|
const errorCode = this.scormVersionFound === "2004" ? this.scormAPI.GetLastError() : this.scormAPI.LMSGetLastError();
|
|
239
216
|
if (errorCode === SCORM_NO_ERROR || errorCode === 0 || errorCode === "0") {
|
|
@@ -243,8 +220,8 @@ var SCORMService = class {
|
|
|
243
220
|
const diagnostic = this.scormVersionFound === "2004" ? this.scormAPI.GetDiagnostic(errorCode.toString()) : this.scormAPI.LMSGetDiagnostic(errorCode.toString());
|
|
244
221
|
return {
|
|
245
222
|
code: errorCode.toString(),
|
|
246
|
-
message:
|
|
247
|
-
diagnostic:
|
|
223
|
+
message: errorMessage?.toString() ?? "Unknown error.",
|
|
224
|
+
diagnostic: diagnostic?.toString() ?? void 0
|
|
248
225
|
};
|
|
249
226
|
}
|
|
250
227
|
formatCMITime(totalSeconds) {
|
|
@@ -275,14 +252,13 @@ var SCORMService = class {
|
|
|
275
252
|
// src/services/evaluators/multiple-choice-evaluator.ts
|
|
276
253
|
var MultipleChoiceEvaluator = class {
|
|
277
254
|
async evaluate(question, answer) {
|
|
278
|
-
|
|
279
|
-
const points = (_a = question.points) != null ? _a : 0;
|
|
255
|
+
const points = question.points ?? 0;
|
|
280
256
|
const correctAnswerId = question.correctAnswerId;
|
|
281
257
|
const isCorrect = answer === correctAnswerId;
|
|
282
258
|
const correctOption = question.options.find((opt) => opt.id === correctAnswerId);
|
|
283
259
|
const correctAnswerDetail = {
|
|
284
260
|
id: correctAnswerId,
|
|
285
|
-
value:
|
|
261
|
+
value: correctOption?.text || ""
|
|
286
262
|
};
|
|
287
263
|
return Promise.resolve({
|
|
288
264
|
isCorrect,
|
|
@@ -295,8 +271,7 @@ var MultipleChoiceEvaluator = class {
|
|
|
295
271
|
// src/services/evaluators/multiple-response-evaluator.ts
|
|
296
272
|
var MultipleResponseEvaluator = class {
|
|
297
273
|
async evaluate(question, answer) {
|
|
298
|
-
|
|
299
|
-
const points = (_a = question.points) != null ? _a : 0;
|
|
274
|
+
const points = question.points ?? 0;
|
|
300
275
|
const correctAnswerIds = question.correctAnswerIds;
|
|
301
276
|
let isCorrect = false;
|
|
302
277
|
if (Array.isArray(answer)) {
|
|
@@ -305,10 +280,7 @@ var MultipleResponseEvaluator = class {
|
|
|
305
280
|
isCorrect = userAnswerSet.size === correctAnswerSet.size && [...userAnswerSet].every((id) => correctAnswerSet.has(id));
|
|
306
281
|
}
|
|
307
282
|
const correctValues = correctAnswerIds.map(
|
|
308
|
-
(id) =>
|
|
309
|
-
var _a2;
|
|
310
|
-
return ((_a2 = question.options.find((opt) => opt.id === id)) == null ? void 0 : _a2.text) || "";
|
|
311
|
-
}
|
|
283
|
+
(id) => question.options.find((opt) => opt.id === id)?.text || ""
|
|
312
284
|
);
|
|
313
285
|
const correctAnswerDetail = {
|
|
314
286
|
id: correctAnswerIds,
|
|
@@ -325,8 +297,7 @@ var MultipleResponseEvaluator = class {
|
|
|
325
297
|
// src/services/evaluators/true-false-evaluator.ts
|
|
326
298
|
var TrueFalseEvaluator = class {
|
|
327
299
|
async evaluate(question, answer) {
|
|
328
|
-
|
|
329
|
-
const points = (_a = question.points) != null ? _a : 0;
|
|
300
|
+
const points = question.points ?? 0;
|
|
330
301
|
const correctAnswer = question.correctAnswer;
|
|
331
302
|
let userAnswer = answer;
|
|
332
303
|
if (typeof answer === "string") {
|
|
@@ -348,12 +319,11 @@ var TrueFalseEvaluator = class {
|
|
|
348
319
|
// src/services/evaluators/short-answer-evaluator.ts
|
|
349
320
|
var ShortAnswerEvaluator = class {
|
|
350
321
|
async evaluate(question, answer) {
|
|
351
|
-
|
|
352
|
-
const points = (_a = question.points) != null ? _a : 0;
|
|
322
|
+
const points = question.points ?? 0;
|
|
353
323
|
let isCorrect = false;
|
|
354
324
|
if (typeof answer === "string") {
|
|
355
325
|
const userAnswerTrimmed = answer.trim();
|
|
356
|
-
const caseSensitive =
|
|
326
|
+
const caseSensitive = question.isCaseSensitive ?? false;
|
|
357
327
|
isCorrect = question.acceptedAnswers.some(
|
|
358
328
|
(accAns) => caseSensitive ? accAns.trim() === userAnswerTrimmed : accAns.trim().toLowerCase() === userAnswerTrimmed.toLowerCase()
|
|
359
329
|
);
|
|
@@ -373,8 +343,7 @@ var ShortAnswerEvaluator = class {
|
|
|
373
343
|
// src/services/evaluators/numeric-evaluator.ts
|
|
374
344
|
var NumericEvaluator = class {
|
|
375
345
|
async evaluate(question, answer) {
|
|
376
|
-
|
|
377
|
-
const points = (_a = question.points) != null ? _a : 0;
|
|
346
|
+
const points = question.points ?? 0;
|
|
378
347
|
let isCorrect = false;
|
|
379
348
|
if (typeof answer === "string" || typeof answer === "number") {
|
|
380
349
|
const userAnswerNum = parseFloat(String(answer));
|
|
@@ -397,17 +366,13 @@ var NumericEvaluator = class {
|
|
|
397
366
|
// src/services/evaluators/sequence-evaluator.ts
|
|
398
367
|
var SequenceEvaluator = class {
|
|
399
368
|
async evaluate(question, answer) {
|
|
400
|
-
|
|
401
|
-
const points = (_a = question.points) != null ? _a : 0;
|
|
369
|
+
const points = question.points ?? 0;
|
|
402
370
|
let isCorrect = false;
|
|
403
371
|
if (Array.isArray(answer) && answer.length === question.correctOrder.length) {
|
|
404
372
|
isCorrect = answer.every((itemId, index) => itemId === question.correctOrder[index]);
|
|
405
373
|
}
|
|
406
374
|
const correctValues = question.correctOrder.map(
|
|
407
|
-
(id) =>
|
|
408
|
-
var _a2;
|
|
409
|
-
return ((_a2 = question.items.find((item) => item.id === id)) == null ? void 0 : _a2.content) || "";
|
|
410
|
-
}
|
|
375
|
+
(id) => question.items.find((item) => item.id === id)?.content || ""
|
|
411
376
|
);
|
|
412
377
|
const correctAnswerDetail = {
|
|
413
378
|
id: question.correctOrder,
|
|
@@ -424,17 +389,15 @@ var SequenceEvaluator = class {
|
|
|
424
389
|
// src/services/evaluators/matching-evaluator.ts
|
|
425
390
|
var MatchingEvaluator = class {
|
|
426
391
|
async evaluate(question, answer) {
|
|
427
|
-
|
|
428
|
-
const points = (_a = question.points) != null ? _a : 0;
|
|
392
|
+
const points = question.points ?? 0;
|
|
429
393
|
let isCorrect = false;
|
|
430
394
|
if (typeof answer === "object" && answer !== null && !Array.isArray(answer)) {
|
|
431
395
|
const userAnswerMap = answer;
|
|
432
396
|
isCorrect = question.correctAnswerMap.length === Object.keys(userAnswerMap).length && question.correctAnswerMap.every((map) => userAnswerMap[map.promptId] === map.optionId);
|
|
433
397
|
}
|
|
434
398
|
const correctMap = question.correctAnswerMap.reduce((acc, curr) => {
|
|
435
|
-
|
|
436
|
-
const
|
|
437
|
-
const optionText = ((_b = question.options.find((o) => o.id === curr.optionId)) == null ? void 0 : _b.content) || "";
|
|
399
|
+
const promptText = question.prompts.find((p) => p.id === curr.promptId)?.content || "";
|
|
400
|
+
const optionText = question.options.find((o) => o.id === curr.optionId)?.content || "";
|
|
438
401
|
acc[promptText] = optionText;
|
|
439
402
|
return acc;
|
|
440
403
|
}, {});
|
|
@@ -453,16 +416,14 @@ var MatchingEvaluator = class {
|
|
|
453
416
|
// src/services/evaluators/fill-in-the-blanks-evaluator.ts
|
|
454
417
|
var FillInTheBlanksEvaluator = class {
|
|
455
418
|
async evaluate(question, answer) {
|
|
456
|
-
|
|
457
|
-
const points = (_a = question.points) != null ? _a : 0;
|
|
419
|
+
const points = question.points ?? 0;
|
|
458
420
|
let isCorrect = false;
|
|
459
421
|
if (typeof answer === "object" && answer !== null && !Array.isArray(answer)) {
|
|
460
422
|
const userAnswerMap = answer;
|
|
461
423
|
isCorrect = question.answers.length > 0 && question.answers.every((correctAnsDef) => {
|
|
462
|
-
|
|
463
|
-
const userValForBlank = (_a2 = userAnswerMap[correctAnsDef.blankId]) == null ? void 0 : _a2.trim();
|
|
424
|
+
const userValForBlank = userAnswerMap[correctAnsDef.blankId]?.trim();
|
|
464
425
|
if (userValForBlank === void 0) return false;
|
|
465
|
-
const caseSensitive =
|
|
426
|
+
const caseSensitive = question.isCaseSensitive ?? false;
|
|
466
427
|
return correctAnsDef.acceptedValues.some(
|
|
467
428
|
(accVal) => caseSensitive ? accVal.trim() === userValForBlank : accVal.trim().toLowerCase() === userValForBlank.toLowerCase()
|
|
468
429
|
);
|
|
@@ -487,17 +448,15 @@ var FillInTheBlanksEvaluator = class {
|
|
|
487
448
|
// src/services/evaluators/drag-and-drop-evaluator.ts
|
|
488
449
|
var DragAndDropEvaluator = class {
|
|
489
450
|
async evaluate(question, answer) {
|
|
490
|
-
|
|
491
|
-
const points = (_a = question.points) != null ? _a : 0;
|
|
451
|
+
const points = question.points ?? 0;
|
|
492
452
|
let isCorrect = false;
|
|
493
453
|
if (typeof answer === "object" && answer !== null && !Array.isArray(answer)) {
|
|
494
454
|
const userAnswerMap = answer;
|
|
495
455
|
isCorrect = question.answerMap.length === Object.keys(userAnswerMap).length && question.answerMap.every((map) => userAnswerMap[map.draggableId] === map.dropZoneId);
|
|
496
456
|
}
|
|
497
457
|
const correctMap = question.answerMap.reduce((acc, curr) => {
|
|
498
|
-
|
|
499
|
-
const
|
|
500
|
-
const dropZoneText = ((_b = question.dropZones.find((z4) => z4.id === curr.dropZoneId)) == null ? void 0 : _b.label) || "";
|
|
458
|
+
const draggableText = question.draggableItems.find((d) => d.id === curr.draggableId)?.content || "";
|
|
459
|
+
const dropZoneText = question.dropZones.find((z4) => z4.id === curr.dropZoneId)?.label || "";
|
|
501
460
|
acc[draggableText] = dropZoneText;
|
|
502
461
|
return acc;
|
|
503
462
|
}, {});
|
|
@@ -516,8 +475,7 @@ var DragAndDropEvaluator = class {
|
|
|
516
475
|
// src/services/evaluators/hotspot-evaluator.ts
|
|
517
476
|
var HotspotEvaluator = class {
|
|
518
477
|
async evaluate(question, answer) {
|
|
519
|
-
|
|
520
|
-
const points = (_a = question.points) != null ? _a : 0;
|
|
478
|
+
const points = question.points ?? 0;
|
|
521
479
|
let isCorrect = false;
|
|
522
480
|
if (Array.isArray(answer)) {
|
|
523
481
|
const userAnswerSet = new Set(answer);
|
|
@@ -525,10 +483,7 @@ var HotspotEvaluator = class {
|
|
|
525
483
|
isCorrect = userAnswerSet.size === correctAnswerSet.size && [...userAnswerSet].every((id) => correctAnswerSet.has(id));
|
|
526
484
|
}
|
|
527
485
|
const correctValues = question.correctHotspotIds.map(
|
|
528
|
-
(id) =>
|
|
529
|
-
var _a2;
|
|
530
|
-
return ((_a2 = question.hotspots.find((h) => h.id === id)) == null ? void 0 : _a2.description) || id;
|
|
531
|
-
}
|
|
486
|
+
(id) => question.hotspots.find((h) => h.id === id)?.description || id
|
|
532
487
|
);
|
|
533
488
|
const correctAnswerDetail = {
|
|
534
489
|
id: question.correctHotspotIds,
|
|
@@ -545,11 +500,10 @@ var HotspotEvaluator = class {
|
|
|
545
500
|
// src/services/evaluators/programming-evaluator.ts
|
|
546
501
|
var ProgrammingEvaluator = class {
|
|
547
502
|
async evaluate(question, answer) {
|
|
548
|
-
|
|
549
|
-
const points = (_a = question.points) != null ? _a : 0;
|
|
503
|
+
const points = question.points ?? 0;
|
|
550
504
|
let isCorrect = false;
|
|
551
505
|
if (typeof answer === "string" && typeof question.solutionGeneratedCode === "string") {
|
|
552
|
-
if (typeof window !== "undefined" &&
|
|
506
|
+
if (typeof window !== "undefined" && window.Blockly?.JavaScript) {
|
|
553
507
|
const LocalBlockly = window.Blockly;
|
|
554
508
|
let generatedUserCode = "";
|
|
555
509
|
try {
|
|
@@ -623,10 +577,10 @@ var JsonRepairEngine = class {
|
|
|
623
577
|
if (breakIndex !== -1) {
|
|
624
578
|
const stringContent = afterUnterminated.substring(0, breakIndex);
|
|
625
579
|
const remainder = afterUnterminated.substring(breakIndex);
|
|
626
|
-
const escapedContent = stringContent.replace(
|
|
580
|
+
const escapedContent = stringContent.replace(/(?<!\\)"/g, '\\"');
|
|
627
581
|
repaired = beforeUnterminated + escapedContent + '"' + remainder;
|
|
628
582
|
} else {
|
|
629
|
-
const escapedContent = afterUnterminated.replace(
|
|
583
|
+
const escapedContent = afterUnterminated.replace(/(?<!\\)"/g, '\\"');
|
|
630
584
|
repaired = beforeUnterminated + escapedContent + '"';
|
|
631
585
|
}
|
|
632
586
|
}
|
|
@@ -702,7 +656,6 @@ var JsonRepairEngine = class {
|
|
|
702
656
|
* Main repair function that attempts multiple strategies.
|
|
703
657
|
*/
|
|
704
658
|
static repairJson(jsonStr) {
|
|
705
|
-
var _a;
|
|
706
659
|
let current = jsonStr.trim();
|
|
707
660
|
const maxAttempts = 5;
|
|
708
661
|
let lastError = "";
|
|
@@ -732,7 +685,7 @@ var JsonRepairEngine = class {
|
|
|
732
685
|
}
|
|
733
686
|
lastError = validation.error || "";
|
|
734
687
|
lastPosition = validation.position;
|
|
735
|
-
if (
|
|
688
|
+
if (validation.error?.includes("Unterminated string")) {
|
|
736
689
|
current = this.repairUnterminatedStrings(current);
|
|
737
690
|
} else {
|
|
738
691
|
current = this.applyCommonFixes(current);
|
|
@@ -1005,13 +958,6 @@ var CodeEvaluationService = class {
|
|
|
1005
958
|
constructor() {
|
|
1006
959
|
this.apiKey = APIKeyService.getAPIKey(GEMINI_API_KEY_SERVICE_NAME);
|
|
1007
960
|
}
|
|
1008
|
-
/**
|
|
1009
|
-
* Evaluates a user's code against a single test case using an AI judge.
|
|
1010
|
-
* @param question The full CodingQuestion object.
|
|
1011
|
-
* @param userCode The user's submitted code string.
|
|
1012
|
-
* @param testCase The specific TestCase to evaluate against.
|
|
1013
|
-
* @returns A promise that resolves to an EvaluationResult object.
|
|
1014
|
-
*/
|
|
1015
961
|
async evaluateSingleTestCase(question, userCode, testCase) {
|
|
1016
962
|
if (!this.apiKey) {
|
|
1017
963
|
return {
|
|
@@ -1022,21 +968,20 @@ var CodeEvaluationService = class {
|
|
|
1022
968
|
};
|
|
1023
969
|
}
|
|
1024
970
|
const aiResult = await evaluateUserCode({
|
|
1025
|
-
|
|
971
|
+
// FIX: Use 'codingLanguage' instead of 'language'
|
|
972
|
+
language: question.codingLanguage,
|
|
1026
973
|
problemPrompt: question.prompt,
|
|
1027
974
|
userCode,
|
|
1028
975
|
testCase
|
|
1029
976
|
}, this.apiKey);
|
|
1030
|
-
return
|
|
1031
|
-
testCaseId: testCase.id
|
|
1032
|
-
|
|
977
|
+
return {
|
|
978
|
+
testCaseId: testCase.id,
|
|
979
|
+
// FIX: Ensure 'actualOutput' is always provided, even if it's null from AI
|
|
980
|
+
actualOutput: aiResult.actualOutput !== void 0 ? aiResult.actualOutput : null,
|
|
981
|
+
passed: aiResult.passed,
|
|
982
|
+
reasoning: aiResult.reasoning
|
|
983
|
+
};
|
|
1033
984
|
}
|
|
1034
|
-
/**
|
|
1035
|
-
* Evaluates user's code against all test cases for a given question.
|
|
1036
|
-
* @param question The full CodingQuestion object.
|
|
1037
|
-
* @param userCode The user's submitted code string.
|
|
1038
|
-
* @returns A promise that resolves to an array of EvaluationResult objects.
|
|
1039
|
-
*/
|
|
1040
985
|
async evaluateAllTestCases(question, userCode) {
|
|
1041
986
|
const results = [];
|
|
1042
987
|
for (const testCase of question.testCases) {
|
|
@@ -1045,13 +990,6 @@ var CodeEvaluationService = class {
|
|
|
1045
990
|
}
|
|
1046
991
|
return results;
|
|
1047
992
|
}
|
|
1048
|
-
/**
|
|
1049
|
-
* Evaluates user's code against only the public test cases for a given question.
|
|
1050
|
-
* Useful for a "Run Tests" button before final submission.
|
|
1051
|
-
* @param question The full CodingQuestion object.
|
|
1052
|
-
* @param userCode The user's submitted code string.
|
|
1053
|
-
* @returns A promise that resolves to an array of EvaluationResult objects.
|
|
1054
|
-
*/
|
|
1055
993
|
async evaluatePublicTestCases(question, userCode) {
|
|
1056
994
|
const publicTestCases = question.testCases.filter((tc) => tc.isPublic);
|
|
1057
995
|
const results = [];
|
|
@@ -1066,8 +1004,7 @@ var CodeEvaluationService = class {
|
|
|
1066
1004
|
// src/services/evaluators/coding-evaluator.ts
|
|
1067
1005
|
var CodingEvaluator = class {
|
|
1068
1006
|
async evaluate(question, answer) {
|
|
1069
|
-
|
|
1070
|
-
const points = (_a = question.points) != null ? _a : 0;
|
|
1007
|
+
const points = question.points ?? 0;
|
|
1071
1008
|
if (typeof answer !== "string" || !answer.trim()) {
|
|
1072
1009
|
return {
|
|
1073
1010
|
isCorrect: false,
|
|
@@ -1124,17 +1061,16 @@ var QuizEngine = class {
|
|
|
1124
1061
|
this.quizResultState = { scormStatus: "idle" };
|
|
1125
1062
|
this.questionStartTime = null;
|
|
1126
1063
|
this.questionTimings = /* @__PURE__ */ new Map();
|
|
1127
|
-
var _a, _b, _c, _d, _e;
|
|
1128
1064
|
this.config = options.config;
|
|
1129
1065
|
this.callbacks = options.callbacks || {};
|
|
1130
|
-
this.questions =
|
|
1066
|
+
this.questions = this.config.settings?.shuffleQuestions ? [...this.config.questions].sort(() => Math.random() - 0.5) : this.config.questions;
|
|
1131
1067
|
this.overallStartTime = Date.now();
|
|
1132
1068
|
this.evaluators = /* @__PURE__ */ new Map();
|
|
1133
1069
|
this.registerEvaluators();
|
|
1134
|
-
if (
|
|
1070
|
+
if (this.config.settings?.timeLimitMinutes && this.config.settings.timeLimitMinutes > 0) {
|
|
1135
1071
|
this.timeLeftInSeconds = this.config.settings.timeLimitMinutes * 60;
|
|
1136
1072
|
}
|
|
1137
|
-
if (
|
|
1073
|
+
if (this.config.settings?.scorm) {
|
|
1138
1074
|
this.quizResultState.scormStatus = "initializing";
|
|
1139
1075
|
this.scormService = new SCORMService(this.config.settings.scorm);
|
|
1140
1076
|
if (this.scormService.hasAPI()) {
|
|
@@ -1167,7 +1103,7 @@ var QuizEngine = class {
|
|
|
1167
1103
|
if (this.timeLeftInSeconds !== null) {
|
|
1168
1104
|
this.startTimer();
|
|
1169
1105
|
}
|
|
1170
|
-
|
|
1106
|
+
this.callbacks.onQuestionChange?.(initialQ, this.getCurrentQuestionNumber(), this.getTotalQuestions());
|
|
1171
1107
|
}
|
|
1172
1108
|
registerEvaluators() {
|
|
1173
1109
|
this.evaluators.set("multiple_choice", new MultipleChoiceEvaluator());
|
|
@@ -1205,15 +1141,14 @@ var QuizEngine = class {
|
|
|
1205
1141
|
}
|
|
1206
1142
|
}
|
|
1207
1143
|
handleTick() {
|
|
1208
|
-
var _a, _b, _c, _d;
|
|
1209
1144
|
if (this.timeLeftInSeconds === null) return;
|
|
1210
1145
|
if (this.timeLeftInSeconds > 0) {
|
|
1211
1146
|
this.timeLeftInSeconds--;
|
|
1212
|
-
|
|
1147
|
+
this.callbacks.onTimeTick?.(this.timeLeftInSeconds);
|
|
1213
1148
|
}
|
|
1214
1149
|
if (this.timeLeftInSeconds <= 0) {
|
|
1215
1150
|
this.stopTimer();
|
|
1216
|
-
|
|
1151
|
+
this.callbacks.onQuizTimeUp?.();
|
|
1217
1152
|
this.calculateResults();
|
|
1218
1153
|
}
|
|
1219
1154
|
}
|
|
@@ -1236,43 +1171,39 @@ var QuizEngine = class {
|
|
|
1236
1171
|
return this.quizResultState.score !== void 0;
|
|
1237
1172
|
}
|
|
1238
1173
|
submitAnswer(questionId, answer) {
|
|
1239
|
-
var _a, _b;
|
|
1240
1174
|
this.userAnswers.set(questionId, answer);
|
|
1241
1175
|
const question = this.questions.find((q) => q.id === questionId);
|
|
1242
|
-
if (question)
|
|
1176
|
+
if (question) this.callbacks.onAnswerSubmit?.(question, answer);
|
|
1243
1177
|
}
|
|
1244
1178
|
nextQuestion() {
|
|
1245
|
-
var _a, _b;
|
|
1246
1179
|
this._recordCurrentQuestionTime();
|
|
1247
1180
|
if (this.currentQuestionIndex < this.questions.length - 1) {
|
|
1248
1181
|
this.currentQuestionIndex++;
|
|
1249
1182
|
const currentQ = this.getCurrentQuestion();
|
|
1250
1183
|
this.questionStartTime = Date.now();
|
|
1251
|
-
|
|
1184
|
+
this.callbacks.onQuestionChange?.(currentQ, this.getCurrentQuestionNumber(), this.getTotalQuestions());
|
|
1252
1185
|
return currentQ;
|
|
1253
1186
|
}
|
|
1254
1187
|
return null;
|
|
1255
1188
|
}
|
|
1256
1189
|
previousQuestion() {
|
|
1257
|
-
var _a, _b;
|
|
1258
1190
|
this._recordCurrentQuestionTime();
|
|
1259
1191
|
if (this.currentQuestionIndex > 0) {
|
|
1260
1192
|
this.currentQuestionIndex--;
|
|
1261
1193
|
const currentQ = this.getCurrentQuestion();
|
|
1262
1194
|
this.questionStartTime = Date.now();
|
|
1263
|
-
|
|
1195
|
+
this.callbacks.onQuestionChange?.(currentQ, this.getCurrentQuestionNumber(), this.getTotalQuestions());
|
|
1264
1196
|
return currentQ;
|
|
1265
1197
|
}
|
|
1266
1198
|
return null;
|
|
1267
1199
|
}
|
|
1268
1200
|
goToQuestion(index) {
|
|
1269
|
-
var _a, _b;
|
|
1270
1201
|
if (index >= 0 && index < this.questions.length && index !== this.currentQuestionIndex) {
|
|
1271
1202
|
this._recordCurrentQuestionTime();
|
|
1272
1203
|
this.currentQuestionIndex = index;
|
|
1273
1204
|
const currentQ = this.getCurrentQuestion();
|
|
1274
1205
|
this.questionStartTime = Date.now();
|
|
1275
|
-
|
|
1206
|
+
this.callbacks.onQuestionChange?.(currentQ, this.getCurrentQuestionNumber(), this.getTotalQuestions());
|
|
1276
1207
|
return currentQ;
|
|
1277
1208
|
}
|
|
1278
1209
|
return this.getCurrentQuestion();
|
|
@@ -1298,7 +1229,6 @@ var QuizEngine = class {
|
|
|
1298
1229
|
}
|
|
1299
1230
|
// (Tiếp theo từ Phần 1)
|
|
1300
1231
|
async calculateResults() {
|
|
1301
|
-
var _a, _b, _c, _d, _e;
|
|
1302
1232
|
this.stopTimer();
|
|
1303
1233
|
this._recordCurrentQuestionTime();
|
|
1304
1234
|
let totalScore = 0;
|
|
@@ -1307,7 +1237,7 @@ var QuizEngine = class {
|
|
|
1307
1237
|
let accumulatedTotalTimeSpent = 0;
|
|
1308
1238
|
for (const question of this.questions) {
|
|
1309
1239
|
const userAnswerRaw = this.userAnswers.get(question.id) || null;
|
|
1310
|
-
maxScore +=
|
|
1240
|
+
maxScore += question.points ?? 0;
|
|
1311
1241
|
const evaluator = this.evaluators.get(question.questionType);
|
|
1312
1242
|
if (!evaluator) {
|
|
1313
1243
|
console.warn(`No evaluator found for question type: ${question.questionType}`);
|
|
@@ -1347,13 +1277,13 @@ var QuizEngine = class {
|
|
|
1347
1277
|
}
|
|
1348
1278
|
const percentage = maxScore > 0 ? parseFloat((totalScore / maxScore * 100).toFixed(2)) : 0;
|
|
1349
1279
|
let passed = void 0;
|
|
1350
|
-
if (
|
|
1280
|
+
if (this.config.settings?.passingScorePercent != null) {
|
|
1351
1281
|
passed = percentage >= this.config.settings.passingScorePercent;
|
|
1352
1282
|
}
|
|
1353
1283
|
const totalQuizTimeSpentSeconds = parseFloat(accumulatedTotalTimeSpent.toFixed(2));
|
|
1354
1284
|
const averageTimePerQuestionSeconds = this.questions.length > 0 ? parseFloat((totalQuizTimeSpentSeconds / this.questions.length).toFixed(2)) : 0;
|
|
1355
1285
|
const metadataPerformance = await this._calculateMetadataPerformance();
|
|
1356
|
-
const finalResults =
|
|
1286
|
+
const finalResults = {
|
|
1357
1287
|
score: totalScore,
|
|
1358
1288
|
maxScore,
|
|
1359
1289
|
percentage,
|
|
@@ -1365,39 +1295,33 @@ var QuizEngine = class {
|
|
|
1365
1295
|
scormError: this.quizResultState.scormError,
|
|
1366
1296
|
studentName: this.quizResultState.studentName,
|
|
1367
1297
|
totalTimeSpentSeconds: totalQuizTimeSpentSeconds,
|
|
1368
|
-
averageTimePerQuestionSeconds
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1298
|
+
averageTimePerQuestionSeconds,
|
|
1299
|
+
...metadataPerformance
|
|
1300
|
+
};
|
|
1301
|
+
this.quizResultState = { ...this.quizResultState, ...finalResults };
|
|
1302
|
+
if (this.config.settings?.scorm) this._sendResultsToSCORM(finalResults);
|
|
1372
1303
|
await this._sendResultsToWebhook(finalResults);
|
|
1373
|
-
|
|
1304
|
+
this.callbacks.onQuizFinish?.(finalResults);
|
|
1374
1305
|
return finalResults;
|
|
1375
1306
|
}
|
|
1376
1307
|
formatUserAnswerDetail(question, userAnswerRaw) {
|
|
1377
|
-
var _a, _b, _c, _d, _e;
|
|
1378
1308
|
if (userAnswerRaw === null) return null;
|
|
1379
1309
|
switch (question.questionType) {
|
|
1380
1310
|
case "multiple_choice": {
|
|
1381
1311
|
const q = question;
|
|
1382
1312
|
const id = userAnswerRaw;
|
|
1383
|
-
return { id, value:
|
|
1313
|
+
return { id, value: q.options.find((opt) => opt.id === id)?.text || "" };
|
|
1384
1314
|
}
|
|
1385
1315
|
case "multiple_response": {
|
|
1386
1316
|
const q = question;
|
|
1387
1317
|
const ids = userAnswerRaw;
|
|
1388
|
-
const values = ids.map((id) =>
|
|
1389
|
-
var _a2;
|
|
1390
|
-
return ((_a2 = q.options.find((opt) => opt.id === id)) == null ? void 0 : _a2.text) || "";
|
|
1391
|
-
});
|
|
1318
|
+
const values = ids.map((id) => q.options.find((opt) => opt.id === id)?.text || "");
|
|
1392
1319
|
return { id: ids, value: values };
|
|
1393
1320
|
}
|
|
1394
1321
|
case "sequence": {
|
|
1395
1322
|
const q = question;
|
|
1396
1323
|
const ids = userAnswerRaw;
|
|
1397
|
-
const values = ids.map((id) =>
|
|
1398
|
-
var _a2;
|
|
1399
|
-
return ((_a2 = q.items.find((item) => item.id === id)) == null ? void 0 : _a2.content) || "";
|
|
1400
|
-
});
|
|
1324
|
+
const values = ids.map((id) => q.items.find((item) => item.id === id)?.content || "");
|
|
1401
1325
|
return { id: ids, value: values };
|
|
1402
1326
|
}
|
|
1403
1327
|
case "matching": {
|
|
@@ -1406,8 +1330,8 @@ var QuizEngine = class {
|
|
|
1406
1330
|
const valueMap = {};
|
|
1407
1331
|
for (const promptId in userAnswerMap) {
|
|
1408
1332
|
const optionId = userAnswerMap[promptId];
|
|
1409
|
-
const promptText =
|
|
1410
|
-
const optionText =
|
|
1333
|
+
const promptText = q.prompts.find((p) => p.id === promptId)?.content || "";
|
|
1334
|
+
const optionText = q.options.find((o) => o.id === optionId)?.content || "";
|
|
1411
1335
|
valueMap[promptText] = optionText;
|
|
1412
1336
|
}
|
|
1413
1337
|
return { id: null, value: valueMap };
|
|
@@ -1419,8 +1343,8 @@ var QuizEngine = class {
|
|
|
1419
1343
|
const enrichedUserAnswerMap = {};
|
|
1420
1344
|
for (const draggableId in userAnswerMapByIds) {
|
|
1421
1345
|
const dropZoneId = userAnswerMapByIds[draggableId];
|
|
1422
|
-
const draggableText =
|
|
1423
|
-
const dropZoneText =
|
|
1346
|
+
const draggableText = q.draggableItems.find((d) => d.id === draggableId)?.content || `(ID: ${draggableId})`;
|
|
1347
|
+
const dropZoneText = q.dropZones.find((z4) => z4.id === dropZoneId)?.label || `(ID: ${dropZoneId})`;
|
|
1424
1348
|
enrichedUserAnswerMap[draggableText] = dropZoneText;
|
|
1425
1349
|
}
|
|
1426
1350
|
return { id: null, value: enrichedUserAnswerMap };
|
|
@@ -1432,7 +1356,6 @@ var QuizEngine = class {
|
|
|
1432
1356
|
}
|
|
1433
1357
|
}
|
|
1434
1358
|
async _calculateMetadataPerformance() {
|
|
1435
|
-
var _a;
|
|
1436
1359
|
const loPerformanceMap = /* @__PURE__ */ new Map();
|
|
1437
1360
|
const categoryPerformanceMap = /* @__PURE__ */ new Map();
|
|
1438
1361
|
const topicPerformanceMap = /* @__PURE__ */ new Map();
|
|
@@ -1454,7 +1377,7 @@ var QuizEngine = class {
|
|
|
1454
1377
|
const evaluator = this.evaluators.get(q.questionType);
|
|
1455
1378
|
if (evaluator) {
|
|
1456
1379
|
const { isCorrect } = await evaluator.evaluate(q, userAnswer);
|
|
1457
|
-
const pointsForThisQuestion =
|
|
1380
|
+
const pointsForThisQuestion = q.points ?? 0;
|
|
1458
1381
|
updateMap(loPerformanceMap, q.learningObjective, pointsForThisQuestion, isCorrect);
|
|
1459
1382
|
updateMap(categoryPerformanceMap, q.category, pointsForThisQuestion, isCorrect);
|
|
1460
1383
|
updateMap(topicPerformanceMap, q.topic, pointsForThisQuestion, isCorrect);
|
|
@@ -1481,8 +1404,7 @@ var QuizEngine = class {
|
|
|
1481
1404
|
};
|
|
1482
1405
|
}
|
|
1483
1406
|
async _sendResultsToWebhook(results) {
|
|
1484
|
-
|
|
1485
|
-
if (!((_a = this.config.settings) == null ? void 0 : _a.webhookUrl)) {
|
|
1407
|
+
if (!this.config.settings?.webhookUrl) {
|
|
1486
1408
|
results.webhookStatus = "idle";
|
|
1487
1409
|
return;
|
|
1488
1410
|
}
|
|
@@ -1510,12 +1432,11 @@ var QuizEngine = class {
|
|
|
1510
1432
|
}
|
|
1511
1433
|
}
|
|
1512
1434
|
_sendResultsToSCORM(results) {
|
|
1513
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
1514
1435
|
if (!this.scormService || !this.scormService.hasAPI() || this.quizResultState.scormStatus === "no_api") {
|
|
1515
1436
|
results.scormStatus = this.quizResultState.scormStatus || "idle";
|
|
1516
1437
|
return;
|
|
1517
1438
|
}
|
|
1518
|
-
if (this.quizResultState.scormStatus === "error" &&
|
|
1439
|
+
if (this.quizResultState.scormStatus === "error" && this.quizResultState.scormError?.includes("initialization failed")) {
|
|
1519
1440
|
results.scormStatus = "error";
|
|
1520
1441
|
results.scormError = this.quizResultState.scormError;
|
|
1521
1442
|
return;
|
|
@@ -1524,15 +1445,15 @@ var QuizEngine = class {
|
|
|
1524
1445
|
try {
|
|
1525
1446
|
this.scormService.setScore(results.score, results.maxScore, 0);
|
|
1526
1447
|
let lessonStatusSetting = "completed";
|
|
1527
|
-
if (
|
|
1448
|
+
if (this.config.settings?.passingScorePercent !== void 0 && this.config.settings?.passingScorePercent !== null) {
|
|
1528
1449
|
lessonStatusSetting = results.passed ? "passed" : "failed";
|
|
1529
|
-
} else if (
|
|
1450
|
+
} else if (this.config.settings?.scorm?.setCompletionOnFinish) {
|
|
1530
1451
|
lessonStatusSetting = "completed";
|
|
1531
1452
|
}
|
|
1532
1453
|
this.scormService.setLessonStatus(lessonStatusSetting, results.passed);
|
|
1533
1454
|
if (results.totalTimeSpentSeconds !== void 0 && this.scormService.formatCMITime) {
|
|
1534
1455
|
const cmiTime = this.scormService.formatCMITime(results.totalTimeSpentSeconds);
|
|
1535
|
-
const sessionTimeVar =
|
|
1456
|
+
const sessionTimeVar = this.config.settings?.scorm?.sessionTimeVar || (this.scormService.getSCORMVersion() === "2004" ? "cmi.session_time" : "cmi.core.session_time");
|
|
1536
1457
|
if (sessionTimeVar) this.scormService.setValue(sessionTimeVar, cmiTime);
|
|
1537
1458
|
}
|
|
1538
1459
|
const commitResult = this.scormService.commit();
|
|
@@ -1572,18 +1493,19 @@ var QuizEditorService = class {
|
|
|
1572
1493
|
};
|
|
1573
1494
|
switch (type) {
|
|
1574
1495
|
case "true_false":
|
|
1575
|
-
return
|
|
1496
|
+
return { ...baseNewQuestion, questionType: "true_false", correctAnswer: true };
|
|
1576
1497
|
case "multiple_choice":
|
|
1577
|
-
return
|
|
1498
|
+
return { ...baseNewQuestion, questionType: "multiple_choice", options: [], correctAnswerId: "" };
|
|
1578
1499
|
case "multiple_response":
|
|
1579
|
-
return
|
|
1500
|
+
return { ...baseNewQuestion, questionType: "multiple_response", options: [], correctAnswerIds: [] };
|
|
1580
1501
|
case "short_answer":
|
|
1581
|
-
return
|
|
1502
|
+
return { ...baseNewQuestion, questionType: "short_answer", acceptedAnswers: [""], isCaseSensitive: false };
|
|
1582
1503
|
case "numeric":
|
|
1583
|
-
return
|
|
1504
|
+
return { ...baseNewQuestion, questionType: "numeric", answer: 0 };
|
|
1584
1505
|
case "fill_in_the_blanks": {
|
|
1585
1506
|
const blankId = generateUniqueId("blank_");
|
|
1586
|
-
return
|
|
1507
|
+
return {
|
|
1508
|
+
...baseNewQuestion,
|
|
1587
1509
|
questionType: "fill_in_the_blanks",
|
|
1588
1510
|
segments: [
|
|
1589
1511
|
{ type: "text", content: "Your text before " },
|
|
@@ -1592,49 +1514,52 @@ var QuizEditorService = class {
|
|
|
1592
1514
|
],
|
|
1593
1515
|
answers: [{ blankId, acceptedValues: [""] }],
|
|
1594
1516
|
isCaseSensitive: false
|
|
1595
|
-
}
|
|
1517
|
+
};
|
|
1596
1518
|
}
|
|
1597
1519
|
case "sequence":
|
|
1598
|
-
return
|
|
1520
|
+
return { ...baseNewQuestion, questionType: "sequence", items: [], correctOrder: [] };
|
|
1599
1521
|
case "matching":
|
|
1600
|
-
return
|
|
1522
|
+
return { ...baseNewQuestion, questionType: "matching", prompts: [], options: [], correctAnswerMap: [], shuffleOptions: true };
|
|
1601
1523
|
case "drag_and_drop":
|
|
1602
|
-
return
|
|
1524
|
+
return { ...baseNewQuestion, questionType: "drag_and_drop", draggableItems: [], dropZones: [], answerMap: [] };
|
|
1603
1525
|
case "hotspot":
|
|
1604
|
-
return
|
|
1526
|
+
return { ...baseNewQuestion, questionType: "hotspot", imageUrl: "", hotspots: [], correctHotspotIds: [] };
|
|
1605
1527
|
case "blockly_programming":
|
|
1606
|
-
return
|
|
1528
|
+
return {
|
|
1529
|
+
...baseNewQuestion,
|
|
1607
1530
|
questionType: "blockly_programming",
|
|
1608
1531
|
toolboxDefinition: '<xml xmlns="https://developers.google.com/blockly/xml"></xml>',
|
|
1609
1532
|
initialWorkspace: "",
|
|
1610
1533
|
solutionWorkspaceXML: "",
|
|
1611
1534
|
solutionGeneratedCode: ""
|
|
1612
|
-
}
|
|
1535
|
+
};
|
|
1613
1536
|
case "scratch_programming":
|
|
1614
|
-
return
|
|
1537
|
+
return {
|
|
1538
|
+
...baseNewQuestion,
|
|
1615
1539
|
questionType: "scratch_programming",
|
|
1616
1540
|
toolboxDefinition: '<xml xmlns="https://developers.google.com/blockly/xml"></xml>',
|
|
1617
1541
|
initialWorkspace: "",
|
|
1618
1542
|
solutionWorkspaceXML: "",
|
|
1619
1543
|
solutionGeneratedCode: ""
|
|
1620
|
-
}
|
|
1544
|
+
};
|
|
1621
1545
|
case "coding":
|
|
1622
|
-
return
|
|
1546
|
+
return {
|
|
1547
|
+
...baseNewQuestion,
|
|
1623
1548
|
questionType: "coding",
|
|
1624
|
-
|
|
1549
|
+
codingLanguage: "javascript",
|
|
1625
1550
|
solutionCode: "",
|
|
1626
1551
|
testCases: [],
|
|
1627
1552
|
functionSignature: "",
|
|
1628
1553
|
points: 25
|
|
1629
1554
|
// Coding questions are worth more by default
|
|
1630
|
-
}
|
|
1555
|
+
};
|
|
1631
1556
|
default:
|
|
1632
1557
|
const _exhaustiveCheck = type;
|
|
1633
1558
|
throw new Error(`Question type "${_exhaustiveCheck}" is not supported for creation.`);
|
|
1634
1559
|
}
|
|
1635
1560
|
}
|
|
1636
1561
|
addQuestion(question) {
|
|
1637
|
-
const newQuestion =
|
|
1562
|
+
const newQuestion = { ...question };
|
|
1638
1563
|
if (newQuestion.id.startsWith("new_")) {
|
|
1639
1564
|
newQuestion.id = generateUniqueId(`${newQuestion.questionType}_`);
|
|
1640
1565
|
}
|
|
@@ -1748,8 +1673,7 @@ var QuestionImportService = class {
|
|
|
1748
1673
|
const values = line.split(" ");
|
|
1749
1674
|
const rowObject = {};
|
|
1750
1675
|
header.forEach((h, i) => {
|
|
1751
|
-
|
|
1752
|
-
rowObject[h] = ((_a = values[i]) == null ? void 0 : _a.trim()) || "";
|
|
1676
|
+
rowObject[h] = values[i]?.trim() || "";
|
|
1753
1677
|
});
|
|
1754
1678
|
try {
|
|
1755
1679
|
const transformedObject = this.transformTsvRowToRawObject(rowObject);
|
|
@@ -1791,17 +1715,17 @@ var QuestionImportService = class {
|
|
|
1791
1715
|
};
|
|
1792
1716
|
switch (questionType) {
|
|
1793
1717
|
case "multiple_choice":
|
|
1794
|
-
return
|
|
1718
|
+
return { ...base, options: options.split("|"), correctAnswer };
|
|
1795
1719
|
case "multiple_response":
|
|
1796
|
-
return
|
|
1720
|
+
return { ...base, options: options.split("|"), correctAnswers: correctAnswer.split("|") };
|
|
1797
1721
|
case "true_false":
|
|
1798
|
-
return
|
|
1722
|
+
return { ...base, correctAnswer: correctAnswer.toLowerCase() === "true" };
|
|
1799
1723
|
case "short_answer":
|
|
1800
|
-
return
|
|
1724
|
+
return { ...base, acceptedAnswers: correctAnswer.split("|") };
|
|
1801
1725
|
case "numeric":
|
|
1802
|
-
return
|
|
1726
|
+
return { ...base, answer: parseFloat(correctAnswer), tolerance: tolerance ? parseFloat(tolerance) : void 0 };
|
|
1803
1727
|
case "sequence":
|
|
1804
|
-
return
|
|
1728
|
+
return { ...base, items: options.split("|"), correctOrder: correctAnswer.split("|") };
|
|
1805
1729
|
case "matching": {
|
|
1806
1730
|
const [promptsStr, optionsStr] = options.split("#");
|
|
1807
1731
|
const prompts = promptsStr.replace("prompts:", "").split("|");
|
|
@@ -1811,7 +1735,7 @@ var QuestionImportService = class {
|
|
|
1811
1735
|
acc[key] = valParts.join(":");
|
|
1812
1736
|
return acc;
|
|
1813
1737
|
}, {});
|
|
1814
|
-
return
|
|
1738
|
+
return { ...base, prompts, options: opts, correctAnswerMap };
|
|
1815
1739
|
}
|
|
1816
1740
|
case "fill_in_the_blanks": {
|
|
1817
1741
|
const blanks = correctAnswer.split("#").reduce((acc, part) => {
|
|
@@ -1819,7 +1743,7 @@ var QuestionImportService = class {
|
|
|
1819
1743
|
acc[key] = valuesStr.split("|");
|
|
1820
1744
|
return acc;
|
|
1821
1745
|
}, {});
|
|
1822
|
-
return
|
|
1746
|
+
return { ...base, sentenceWithPlaceholders: options, blanks };
|
|
1823
1747
|
}
|
|
1824
1748
|
default:
|
|
1825
1749
|
throw new Error(`Unsupported questionType "${questionType}" in TSV.`);
|
|
@@ -1840,20 +1764,20 @@ var QuestionImportService = class {
|
|
|
1840
1764
|
const options = validatedRawQ.options.map((text) => ({ id: generateUniqueId("opt_"), text }));
|
|
1841
1765
|
const correctOption = options.find((opt) => opt.text === validatedRawQ.correctAnswer);
|
|
1842
1766
|
if (!correctOption) throw new Error(`Correct answer "${validatedRawQ.correctAnswer}" not found in options.`);
|
|
1843
|
-
return
|
|
1767
|
+
return { ...baseQuestionData, questionType: "multiple_choice", options, correctAnswerId: correctOption.id };
|
|
1844
1768
|
}
|
|
1845
1769
|
case "multiple_response": {
|
|
1846
1770
|
const options = validatedRawQ.options.map((text) => ({ id: generateUniqueId("opt_mr_"), text }));
|
|
1847
1771
|
const correctIds = options.filter((opt) => validatedRawQ.correctAnswers.includes(opt.text)).map((opt) => opt.id);
|
|
1848
1772
|
if (correctIds.length !== validatedRawQ.correctAnswers.length) throw new Error("Some correct answers were not found in options.");
|
|
1849
|
-
return
|
|
1773
|
+
return { ...baseQuestionData, questionType: "multiple_response", options, correctAnswerIds: correctIds };
|
|
1850
1774
|
}
|
|
1851
1775
|
case "true_false":
|
|
1852
|
-
return
|
|
1776
|
+
return { ...baseQuestionData, questionType: "true_false", correctAnswer: validatedRawQ.correctAnswer };
|
|
1853
1777
|
case "short_answer":
|
|
1854
|
-
return
|
|
1778
|
+
return { ...baseQuestionData, questionType: "short_answer", acceptedAnswers: validatedRawQ.acceptedAnswers, isCaseSensitive: false };
|
|
1855
1779
|
case "numeric":
|
|
1856
|
-
return
|
|
1780
|
+
return { ...baseQuestionData, questionType: "numeric", answer: validatedRawQ.answer, tolerance: validatedRawQ.tolerance };
|
|
1857
1781
|
case "sequence": {
|
|
1858
1782
|
if (validatedRawQ.items.length !== validatedRawQ.correctOrder.length) {
|
|
1859
1783
|
throw new Error("The number of items must match the number of items in the correct order for a sequence question.");
|
|
@@ -1864,7 +1788,7 @@ var QuestionImportService = class {
|
|
|
1864
1788
|
if (!foundItem) throw new Error(`Sequence item "${orderText}" in correctOrder not found in items list.`);
|
|
1865
1789
|
return foundItem.id;
|
|
1866
1790
|
});
|
|
1867
|
-
return
|
|
1791
|
+
return { ...baseQuestionData, questionType: "sequence", items, correctOrder };
|
|
1868
1792
|
}
|
|
1869
1793
|
case "matching": {
|
|
1870
1794
|
if (validatedRawQ.prompts.length !== Object.keys(validatedRawQ.correctAnswerMap).length) {
|
|
@@ -1878,7 +1802,7 @@ var QuestionImportService = class {
|
|
|
1878
1802
|
if (!prompt || !option) throw new Error(`Matching pair "${promptText}":"${optionText}" not found in prompts/options.`);
|
|
1879
1803
|
return { promptId: prompt.id, optionId: option.id };
|
|
1880
1804
|
});
|
|
1881
|
-
return
|
|
1805
|
+
return { ...baseQuestionData, questionType: "matching", prompts, options, correctAnswerMap, shuffleOptions: true };
|
|
1882
1806
|
}
|
|
1883
1807
|
case "fill_in_the_blanks": {
|
|
1884
1808
|
const { sentenceWithPlaceholders, blanks } = validatedRawQ;
|
|
@@ -1906,7 +1830,7 @@ var QuestionImportService = class {
|
|
|
1906
1830
|
if (lastIndex < sentenceWithPlaceholders.length) {
|
|
1907
1831
|
segments.push({ type: "text", content: sentenceWithPlaceholders.substring(lastIndex) });
|
|
1908
1832
|
}
|
|
1909
|
-
return
|
|
1833
|
+
return { ...baseQuestionData, questionType: "fill_in_the_blanks", segments, answers, isCaseSensitive: false };
|
|
1910
1834
|
}
|
|
1911
1835
|
}
|
|
1912
1836
|
throw new Error(`Unhandled question type in createQuestionFromRawObject: ${validatedRawQ.questionType}`);
|
|
@@ -1967,8 +1891,7 @@ var UserConfigService = class {
|
|
|
1967
1891
|
this.setConfig("weeklyGoal", goal);
|
|
1968
1892
|
}
|
|
1969
1893
|
static getLanguage() {
|
|
1970
|
-
|
|
1971
|
-
return (_a = this.getConfig("language", "en")) != null ? _a : "en";
|
|
1894
|
+
return this.getConfig("language", "en") ?? "en";
|
|
1972
1895
|
}
|
|
1973
1896
|
static setLanguage(language) {
|
|
1974
1897
|
this.setConfig("language", language);
|
|
@@ -1986,10 +1909,11 @@ var UserConfigService = class {
|
|
|
1986
1909
|
*/
|
|
1987
1910
|
static addGoal(newGoal) {
|
|
1988
1911
|
const goals = this.getGoals();
|
|
1989
|
-
const goalToAdd =
|
|
1912
|
+
const goalToAdd = {
|
|
1913
|
+
...newGoal,
|
|
1990
1914
|
id: generateUniqueId("goal_"),
|
|
1991
1915
|
isAchieved: false
|
|
1992
|
-
}
|
|
1916
|
+
};
|
|
1993
1917
|
this.saveGoals([...goals, goalToAdd]);
|
|
1994
1918
|
}
|
|
1995
1919
|
static updateGoal(updatedGoal) {
|
|
@@ -2650,7 +2574,7 @@ var LocalStorageManager = class {
|
|
|
2650
2574
|
if (items.some((i) => i.code === item.code)) {
|
|
2651
2575
|
throw new Error(`An item with code "${item.code}" already exists for ${this.key}.`);
|
|
2652
2576
|
}
|
|
2653
|
-
const newItem =
|
|
2577
|
+
const newItem = { ...item, id: generateUniqueId(`${this.key}_`) };
|
|
2654
2578
|
this.saveAll([...items, newItem]);
|
|
2655
2579
|
return newItem;
|
|
2656
2580
|
}
|
|
@@ -2663,7 +2587,7 @@ var LocalStorageManager = class {
|
|
|
2663
2587
|
console.warn(`Item with id "${id}" not found in ${this.key} for update.`);
|
|
2664
2588
|
return null;
|
|
2665
2589
|
}
|
|
2666
|
-
const updatedItem =
|
|
2590
|
+
const updatedItem = { ...items[index], ...updates };
|
|
2667
2591
|
items[index] = updatedItem;
|
|
2668
2592
|
this.saveAll(items);
|
|
2669
2593
|
return updatedItem;
|
|
@@ -2757,10 +2681,10 @@ _MetadataService.deleteContext = (code) => contextManager.delete(code);
|
|
|
2757
2681
|
_MetadataService.getApproaches = () => approachManager.getAll().sort((a, b) => a.code.localeCompare(b.code));
|
|
2758
2682
|
_MetadataService.addApproach = (approachData) => {
|
|
2759
2683
|
const difficulty = mapRawDifficultyToStandard(approachData.rawDifficulty);
|
|
2760
|
-
return approachManager.add(
|
|
2684
|
+
return approachManager.add({ ...approachData, difficulty });
|
|
2761
2685
|
};
|
|
2762
2686
|
_MetadataService.updateApproach = (id, approachData) => {
|
|
2763
|
-
const updates =
|
|
2687
|
+
const updates = { ...approachData };
|
|
2764
2688
|
if (approachData.rawDifficulty) {
|
|
2765
2689
|
updates.difficulty = mapRawDifficultyToStandard(approachData.rawDifficulty);
|
|
2766
2690
|
}
|
|
@@ -2843,10 +2767,11 @@ var QuestionBankService = class {
|
|
|
2843
2767
|
if (allQuestions.some((q) => q.code === questionData.code)) {
|
|
2844
2768
|
throw new Error(`A question with code "${questionData.code}" already exists.`);
|
|
2845
2769
|
}
|
|
2846
|
-
const newQuestion =
|
|
2770
|
+
const newQuestion = {
|
|
2771
|
+
...questionData,
|
|
2847
2772
|
id: generateUniqueId("qb_"),
|
|
2848
2773
|
lastModified: (/* @__PURE__ */ new Date()).toISOString()
|
|
2849
|
-
}
|
|
2774
|
+
};
|
|
2850
2775
|
questionBankManager.saveAll([...allQuestions, newQuestion]);
|
|
2851
2776
|
return newQuestion;
|
|
2852
2777
|
}
|
|
@@ -2858,9 +2783,11 @@ var QuestionBankService = class {
|
|
|
2858
2783
|
console.warn(`Question with id "${id}" not found for update.`);
|
|
2859
2784
|
return null;
|
|
2860
2785
|
}
|
|
2861
|
-
const updatedQuestion =
|
|
2786
|
+
const updatedQuestion = {
|
|
2787
|
+
...allQuestions[index],
|
|
2788
|
+
...updates,
|
|
2862
2789
|
lastModified: (/* @__PURE__ */ new Date()).toISOString()
|
|
2863
|
-
}
|
|
2790
|
+
};
|
|
2864
2791
|
allQuestions[index] = updatedQuestion;
|
|
2865
2792
|
questionBankManager.saveAll(allQuestions);
|
|
2866
2793
|
return updatedQuestion;
|
|
@@ -3008,13 +2935,12 @@ var escapeXML = (unsafe) => {
|
|
|
3008
2935
|
});
|
|
3009
2936
|
};
|
|
3010
2937
|
var generateSCORMManifest = (quizConfig, scormVersion, launcherFile = "index.html", libraryJSPath = "scorm-bundle/player.js", quizDataPath = "quiz_data.json", blocklyCSSPath = "blockly-styles.css", mainCSSPath = "styles.css") => {
|
|
3011
|
-
var _a;
|
|
3012
2938
|
const uniqueId = `iqk_${quizConfig.id.replace(/[^a-zA-Z0-9_]/g, "_")}`;
|
|
3013
2939
|
const organizationId = `ORG-${uniqueId}`;
|
|
3014
2940
|
const itemId = `ITEM-${uniqueId}`;
|
|
3015
2941
|
const resourceId = `RES-${uniqueId}`;
|
|
3016
2942
|
const quizTitle = escapeXML(quizConfig.title);
|
|
3017
|
-
const passingScore =
|
|
2943
|
+
const passingScore = quizConfig.settings?.passingScorePercent;
|
|
3018
2944
|
const effectiveScormVersion = scormVersion;
|
|
3019
2945
|
const schemaVersion = effectiveScormVersion === "2004" ? "2004 4th Edition" : "1.2";
|
|
3020
2946
|
const adlcpNamespace = effectiveScormVersion === "2004" ? "http://www.adlnet.org/xsd/adlcp_v1p3" : "http://www.adlnet.org/xsd/adlcp_rootv1p2";
|
|
@@ -3493,6 +3419,2483 @@ var emptyQuiz = {
|
|
|
3493
3419
|
timeLimitMinutes: 0
|
|
3494
3420
|
}
|
|
3495
3421
|
};
|
|
3422
|
+
|
|
3423
|
+
// node_modules/clsx/dist/clsx.mjs
|
|
3424
|
+
function r(e) {
|
|
3425
|
+
var t, f, n = "";
|
|
3426
|
+
if ("string" == typeof e || "number" == typeof e) n += e;
|
|
3427
|
+
else if ("object" == typeof e) if (Array.isArray(e)) {
|
|
3428
|
+
var o = e.length;
|
|
3429
|
+
for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
|
|
3430
|
+
} else for (f in e) e[f] && (n && (n += " "), n += f);
|
|
3431
|
+
return n;
|
|
3432
|
+
}
|
|
3433
|
+
function clsx() {
|
|
3434
|
+
for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
|
|
3435
|
+
return n;
|
|
3436
|
+
}
|
|
3437
|
+
|
|
3438
|
+
// node_modules/tailwind-merge/dist/bundle-mjs.mjs
|
|
3439
|
+
var CLASS_PART_SEPARATOR = "-";
|
|
3440
|
+
var createClassGroupUtils = (config) => {
|
|
3441
|
+
const classMap = createClassMap(config);
|
|
3442
|
+
const {
|
|
3443
|
+
conflictingClassGroups,
|
|
3444
|
+
conflictingClassGroupModifiers
|
|
3445
|
+
} = config;
|
|
3446
|
+
const getClassGroupId = (className) => {
|
|
3447
|
+
const classParts = className.split(CLASS_PART_SEPARATOR);
|
|
3448
|
+
if (classParts[0] === "" && classParts.length !== 1) {
|
|
3449
|
+
classParts.shift();
|
|
3450
|
+
}
|
|
3451
|
+
return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);
|
|
3452
|
+
};
|
|
3453
|
+
const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {
|
|
3454
|
+
const conflicts = conflictingClassGroups[classGroupId] || [];
|
|
3455
|
+
if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {
|
|
3456
|
+
return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];
|
|
3457
|
+
}
|
|
3458
|
+
return conflicts;
|
|
3459
|
+
};
|
|
3460
|
+
return {
|
|
3461
|
+
getClassGroupId,
|
|
3462
|
+
getConflictingClassGroupIds
|
|
3463
|
+
};
|
|
3464
|
+
};
|
|
3465
|
+
var getGroupRecursive = (classParts, classPartObject) => {
|
|
3466
|
+
if (classParts.length === 0) {
|
|
3467
|
+
return classPartObject.classGroupId;
|
|
3468
|
+
}
|
|
3469
|
+
const currentClassPart = classParts[0];
|
|
3470
|
+
const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);
|
|
3471
|
+
const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : void 0;
|
|
3472
|
+
if (classGroupFromNextClassPart) {
|
|
3473
|
+
return classGroupFromNextClassPart;
|
|
3474
|
+
}
|
|
3475
|
+
if (classPartObject.validators.length === 0) {
|
|
3476
|
+
return void 0;
|
|
3477
|
+
}
|
|
3478
|
+
const classRest = classParts.join(CLASS_PART_SEPARATOR);
|
|
3479
|
+
return classPartObject.validators.find(({
|
|
3480
|
+
validator
|
|
3481
|
+
}) => validator(classRest))?.classGroupId;
|
|
3482
|
+
};
|
|
3483
|
+
var arbitraryPropertyRegex = /^\[(.+)\]$/;
|
|
3484
|
+
var getGroupIdForArbitraryProperty = (className) => {
|
|
3485
|
+
if (arbitraryPropertyRegex.test(className)) {
|
|
3486
|
+
const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];
|
|
3487
|
+
const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(":"));
|
|
3488
|
+
if (property) {
|
|
3489
|
+
return "arbitrary.." + property;
|
|
3490
|
+
}
|
|
3491
|
+
}
|
|
3492
|
+
};
|
|
3493
|
+
var createClassMap = (config) => {
|
|
3494
|
+
const {
|
|
3495
|
+
theme,
|
|
3496
|
+
prefix
|
|
3497
|
+
} = config;
|
|
3498
|
+
const classMap = {
|
|
3499
|
+
nextPart: /* @__PURE__ */ new Map(),
|
|
3500
|
+
validators: []
|
|
3501
|
+
};
|
|
3502
|
+
const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);
|
|
3503
|
+
prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {
|
|
3504
|
+
processClassesRecursively(classGroup, classMap, classGroupId, theme);
|
|
3505
|
+
});
|
|
3506
|
+
return classMap;
|
|
3507
|
+
};
|
|
3508
|
+
var processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {
|
|
3509
|
+
classGroup.forEach((classDefinition) => {
|
|
3510
|
+
if (typeof classDefinition === "string") {
|
|
3511
|
+
const classPartObjectToEdit = classDefinition === "" ? classPartObject : getPart(classPartObject, classDefinition);
|
|
3512
|
+
classPartObjectToEdit.classGroupId = classGroupId;
|
|
3513
|
+
return;
|
|
3514
|
+
}
|
|
3515
|
+
if (typeof classDefinition === "function") {
|
|
3516
|
+
if (isThemeGetter(classDefinition)) {
|
|
3517
|
+
processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);
|
|
3518
|
+
return;
|
|
3519
|
+
}
|
|
3520
|
+
classPartObject.validators.push({
|
|
3521
|
+
validator: classDefinition,
|
|
3522
|
+
classGroupId
|
|
3523
|
+
});
|
|
3524
|
+
return;
|
|
3525
|
+
}
|
|
3526
|
+
Object.entries(classDefinition).forEach(([key, classGroup2]) => {
|
|
3527
|
+
processClassesRecursively(classGroup2, getPart(classPartObject, key), classGroupId, theme);
|
|
3528
|
+
});
|
|
3529
|
+
});
|
|
3530
|
+
};
|
|
3531
|
+
var getPart = (classPartObject, path) => {
|
|
3532
|
+
let currentClassPartObject = classPartObject;
|
|
3533
|
+
path.split(CLASS_PART_SEPARATOR).forEach((pathPart) => {
|
|
3534
|
+
if (!currentClassPartObject.nextPart.has(pathPart)) {
|
|
3535
|
+
currentClassPartObject.nextPart.set(pathPart, {
|
|
3536
|
+
nextPart: /* @__PURE__ */ new Map(),
|
|
3537
|
+
validators: []
|
|
3538
|
+
});
|
|
3539
|
+
}
|
|
3540
|
+
currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);
|
|
3541
|
+
});
|
|
3542
|
+
return currentClassPartObject;
|
|
3543
|
+
};
|
|
3544
|
+
var isThemeGetter = (func) => func.isThemeGetter;
|
|
3545
|
+
var getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {
|
|
3546
|
+
if (!prefix) {
|
|
3547
|
+
return classGroupEntries;
|
|
3548
|
+
}
|
|
3549
|
+
return classGroupEntries.map(([classGroupId, classGroup]) => {
|
|
3550
|
+
const prefixedClassGroup = classGroup.map((classDefinition) => {
|
|
3551
|
+
if (typeof classDefinition === "string") {
|
|
3552
|
+
return prefix + classDefinition;
|
|
3553
|
+
}
|
|
3554
|
+
if (typeof classDefinition === "object") {
|
|
3555
|
+
return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));
|
|
3556
|
+
}
|
|
3557
|
+
return classDefinition;
|
|
3558
|
+
});
|
|
3559
|
+
return [classGroupId, prefixedClassGroup];
|
|
3560
|
+
});
|
|
3561
|
+
};
|
|
3562
|
+
var createLruCache = (maxCacheSize) => {
|
|
3563
|
+
if (maxCacheSize < 1) {
|
|
3564
|
+
return {
|
|
3565
|
+
get: () => void 0,
|
|
3566
|
+
set: () => {
|
|
3567
|
+
}
|
|
3568
|
+
};
|
|
3569
|
+
}
|
|
3570
|
+
let cacheSize = 0;
|
|
3571
|
+
let cache = /* @__PURE__ */ new Map();
|
|
3572
|
+
let previousCache = /* @__PURE__ */ new Map();
|
|
3573
|
+
const update = (key, value) => {
|
|
3574
|
+
cache.set(key, value);
|
|
3575
|
+
cacheSize++;
|
|
3576
|
+
if (cacheSize > maxCacheSize) {
|
|
3577
|
+
cacheSize = 0;
|
|
3578
|
+
previousCache = cache;
|
|
3579
|
+
cache = /* @__PURE__ */ new Map();
|
|
3580
|
+
}
|
|
3581
|
+
};
|
|
3582
|
+
return {
|
|
3583
|
+
get(key) {
|
|
3584
|
+
let value = cache.get(key);
|
|
3585
|
+
if (value !== void 0) {
|
|
3586
|
+
return value;
|
|
3587
|
+
}
|
|
3588
|
+
if ((value = previousCache.get(key)) !== void 0) {
|
|
3589
|
+
update(key, value);
|
|
3590
|
+
return value;
|
|
3591
|
+
}
|
|
3592
|
+
},
|
|
3593
|
+
set(key, value) {
|
|
3594
|
+
if (cache.has(key)) {
|
|
3595
|
+
cache.set(key, value);
|
|
3596
|
+
} else {
|
|
3597
|
+
update(key, value);
|
|
3598
|
+
}
|
|
3599
|
+
}
|
|
3600
|
+
};
|
|
3601
|
+
};
|
|
3602
|
+
var IMPORTANT_MODIFIER = "!";
|
|
3603
|
+
var createParseClassName = (config) => {
|
|
3604
|
+
const {
|
|
3605
|
+
separator,
|
|
3606
|
+
experimentalParseClassName
|
|
3607
|
+
} = config;
|
|
3608
|
+
const isSeparatorSingleCharacter = separator.length === 1;
|
|
3609
|
+
const firstSeparatorCharacter = separator[0];
|
|
3610
|
+
const separatorLength = separator.length;
|
|
3611
|
+
const parseClassName = (className) => {
|
|
3612
|
+
const modifiers = [];
|
|
3613
|
+
let bracketDepth = 0;
|
|
3614
|
+
let modifierStart = 0;
|
|
3615
|
+
let postfixModifierPosition;
|
|
3616
|
+
for (let index = 0; index < className.length; index++) {
|
|
3617
|
+
let currentCharacter = className[index];
|
|
3618
|
+
if (bracketDepth === 0) {
|
|
3619
|
+
if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {
|
|
3620
|
+
modifiers.push(className.slice(modifierStart, index));
|
|
3621
|
+
modifierStart = index + separatorLength;
|
|
3622
|
+
continue;
|
|
3623
|
+
}
|
|
3624
|
+
if (currentCharacter === "/") {
|
|
3625
|
+
postfixModifierPosition = index;
|
|
3626
|
+
continue;
|
|
3627
|
+
}
|
|
3628
|
+
}
|
|
3629
|
+
if (currentCharacter === "[") {
|
|
3630
|
+
bracketDepth++;
|
|
3631
|
+
} else if (currentCharacter === "]") {
|
|
3632
|
+
bracketDepth--;
|
|
3633
|
+
}
|
|
3634
|
+
}
|
|
3635
|
+
const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);
|
|
3636
|
+
const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);
|
|
3637
|
+
const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;
|
|
3638
|
+
const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : void 0;
|
|
3639
|
+
return {
|
|
3640
|
+
modifiers,
|
|
3641
|
+
hasImportantModifier,
|
|
3642
|
+
baseClassName,
|
|
3643
|
+
maybePostfixModifierPosition
|
|
3644
|
+
};
|
|
3645
|
+
};
|
|
3646
|
+
if (experimentalParseClassName) {
|
|
3647
|
+
return (className) => experimentalParseClassName({
|
|
3648
|
+
className,
|
|
3649
|
+
parseClassName
|
|
3650
|
+
});
|
|
3651
|
+
}
|
|
3652
|
+
return parseClassName;
|
|
3653
|
+
};
|
|
3654
|
+
var sortModifiers = (modifiers) => {
|
|
3655
|
+
if (modifiers.length <= 1) {
|
|
3656
|
+
return modifiers;
|
|
3657
|
+
}
|
|
3658
|
+
const sortedModifiers = [];
|
|
3659
|
+
let unsortedModifiers = [];
|
|
3660
|
+
modifiers.forEach((modifier) => {
|
|
3661
|
+
const isArbitraryVariant = modifier[0] === "[";
|
|
3662
|
+
if (isArbitraryVariant) {
|
|
3663
|
+
sortedModifiers.push(...unsortedModifiers.sort(), modifier);
|
|
3664
|
+
unsortedModifiers = [];
|
|
3665
|
+
} else {
|
|
3666
|
+
unsortedModifiers.push(modifier);
|
|
3667
|
+
}
|
|
3668
|
+
});
|
|
3669
|
+
sortedModifiers.push(...unsortedModifiers.sort());
|
|
3670
|
+
return sortedModifiers;
|
|
3671
|
+
};
|
|
3672
|
+
var createConfigUtils = (config) => ({
|
|
3673
|
+
cache: createLruCache(config.cacheSize),
|
|
3674
|
+
parseClassName: createParseClassName(config),
|
|
3675
|
+
...createClassGroupUtils(config)
|
|
3676
|
+
});
|
|
3677
|
+
var SPLIT_CLASSES_REGEX = /\s+/;
|
|
3678
|
+
var mergeClassList = (classList, configUtils) => {
|
|
3679
|
+
const {
|
|
3680
|
+
parseClassName,
|
|
3681
|
+
getClassGroupId,
|
|
3682
|
+
getConflictingClassGroupIds
|
|
3683
|
+
} = configUtils;
|
|
3684
|
+
const classGroupsInConflict = [];
|
|
3685
|
+
const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);
|
|
3686
|
+
let result = "";
|
|
3687
|
+
for (let index = classNames.length - 1; index >= 0; index -= 1) {
|
|
3688
|
+
const originalClassName = classNames[index];
|
|
3689
|
+
const {
|
|
3690
|
+
modifiers,
|
|
3691
|
+
hasImportantModifier,
|
|
3692
|
+
baseClassName,
|
|
3693
|
+
maybePostfixModifierPosition
|
|
3694
|
+
} = parseClassName(originalClassName);
|
|
3695
|
+
let hasPostfixModifier = Boolean(maybePostfixModifierPosition);
|
|
3696
|
+
let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);
|
|
3697
|
+
if (!classGroupId) {
|
|
3698
|
+
if (!hasPostfixModifier) {
|
|
3699
|
+
result = originalClassName + (result.length > 0 ? " " + result : result);
|
|
3700
|
+
continue;
|
|
3701
|
+
}
|
|
3702
|
+
classGroupId = getClassGroupId(baseClassName);
|
|
3703
|
+
if (!classGroupId) {
|
|
3704
|
+
result = originalClassName + (result.length > 0 ? " " + result : result);
|
|
3705
|
+
continue;
|
|
3706
|
+
}
|
|
3707
|
+
hasPostfixModifier = false;
|
|
3708
|
+
}
|
|
3709
|
+
const variantModifier = sortModifiers(modifiers).join(":");
|
|
3710
|
+
const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;
|
|
3711
|
+
const classId = modifierId + classGroupId;
|
|
3712
|
+
if (classGroupsInConflict.includes(classId)) {
|
|
3713
|
+
continue;
|
|
3714
|
+
}
|
|
3715
|
+
classGroupsInConflict.push(classId);
|
|
3716
|
+
const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);
|
|
3717
|
+
for (let i = 0; i < conflictGroups.length; ++i) {
|
|
3718
|
+
const group = conflictGroups[i];
|
|
3719
|
+
classGroupsInConflict.push(modifierId + group);
|
|
3720
|
+
}
|
|
3721
|
+
result = originalClassName + (result.length > 0 ? " " + result : result);
|
|
3722
|
+
}
|
|
3723
|
+
return result;
|
|
3724
|
+
};
|
|
3725
|
+
function twJoin() {
|
|
3726
|
+
let index = 0;
|
|
3727
|
+
let argument;
|
|
3728
|
+
let resolvedValue;
|
|
3729
|
+
let string = "";
|
|
3730
|
+
while (index < arguments.length) {
|
|
3731
|
+
if (argument = arguments[index++]) {
|
|
3732
|
+
if (resolvedValue = toValue(argument)) {
|
|
3733
|
+
string && (string += " ");
|
|
3734
|
+
string += resolvedValue;
|
|
3735
|
+
}
|
|
3736
|
+
}
|
|
3737
|
+
}
|
|
3738
|
+
return string;
|
|
3739
|
+
}
|
|
3740
|
+
var toValue = (mix) => {
|
|
3741
|
+
if (typeof mix === "string") {
|
|
3742
|
+
return mix;
|
|
3743
|
+
}
|
|
3744
|
+
let resolvedValue;
|
|
3745
|
+
let string = "";
|
|
3746
|
+
for (let k = 0; k < mix.length; k++) {
|
|
3747
|
+
if (mix[k]) {
|
|
3748
|
+
if (resolvedValue = toValue(mix[k])) {
|
|
3749
|
+
string && (string += " ");
|
|
3750
|
+
string += resolvedValue;
|
|
3751
|
+
}
|
|
3752
|
+
}
|
|
3753
|
+
}
|
|
3754
|
+
return string;
|
|
3755
|
+
};
|
|
3756
|
+
function createTailwindMerge(createConfigFirst, ...createConfigRest) {
|
|
3757
|
+
let configUtils;
|
|
3758
|
+
let cacheGet;
|
|
3759
|
+
let cacheSet;
|
|
3760
|
+
let functionToCall = initTailwindMerge;
|
|
3761
|
+
function initTailwindMerge(classList) {
|
|
3762
|
+
const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());
|
|
3763
|
+
configUtils = createConfigUtils(config);
|
|
3764
|
+
cacheGet = configUtils.cache.get;
|
|
3765
|
+
cacheSet = configUtils.cache.set;
|
|
3766
|
+
functionToCall = tailwindMerge;
|
|
3767
|
+
return tailwindMerge(classList);
|
|
3768
|
+
}
|
|
3769
|
+
function tailwindMerge(classList) {
|
|
3770
|
+
const cachedResult = cacheGet(classList);
|
|
3771
|
+
if (cachedResult) {
|
|
3772
|
+
return cachedResult;
|
|
3773
|
+
}
|
|
3774
|
+
const result = mergeClassList(classList, configUtils);
|
|
3775
|
+
cacheSet(classList, result);
|
|
3776
|
+
return result;
|
|
3777
|
+
}
|
|
3778
|
+
return function callTailwindMerge() {
|
|
3779
|
+
return functionToCall(twJoin.apply(null, arguments));
|
|
3780
|
+
};
|
|
3781
|
+
}
|
|
3782
|
+
var fromTheme = (key) => {
|
|
3783
|
+
const themeGetter = (theme) => theme[key] || [];
|
|
3784
|
+
themeGetter.isThemeGetter = true;
|
|
3785
|
+
return themeGetter;
|
|
3786
|
+
};
|
|
3787
|
+
var arbitraryValueRegex = /^\[(?:([a-z-]+):)?(.+)\]$/i;
|
|
3788
|
+
var fractionRegex = /^\d+\/\d+$/;
|
|
3789
|
+
var stringLengths = /* @__PURE__ */ new Set(["px", "full", "screen"]);
|
|
3790
|
+
var tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
|
|
3791
|
+
var lengthUnitRegex = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/;
|
|
3792
|
+
var colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/;
|
|
3793
|
+
var shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
|
|
3794
|
+
var imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
|
|
3795
|
+
var isLength = (value) => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);
|
|
3796
|
+
var isArbitraryLength = (value) => getIsArbitraryValue(value, "length", isLengthOnly);
|
|
3797
|
+
var isNumber = (value) => Boolean(value) && !Number.isNaN(Number(value));
|
|
3798
|
+
var isArbitraryNumber = (value) => getIsArbitraryValue(value, "number", isNumber);
|
|
3799
|
+
var isInteger = (value) => Boolean(value) && Number.isInteger(Number(value));
|
|
3800
|
+
var isPercent = (value) => value.endsWith("%") && isNumber(value.slice(0, -1));
|
|
3801
|
+
var isArbitraryValue = (value) => arbitraryValueRegex.test(value);
|
|
3802
|
+
var isTshirtSize = (value) => tshirtUnitRegex.test(value);
|
|
3803
|
+
var sizeLabels = /* @__PURE__ */ new Set(["length", "size", "percentage"]);
|
|
3804
|
+
var isArbitrarySize = (value) => getIsArbitraryValue(value, sizeLabels, isNever);
|
|
3805
|
+
var isArbitraryPosition = (value) => getIsArbitraryValue(value, "position", isNever);
|
|
3806
|
+
var imageLabels = /* @__PURE__ */ new Set(["image", "url"]);
|
|
3807
|
+
var isArbitraryImage = (value) => getIsArbitraryValue(value, imageLabels, isImage);
|
|
3808
|
+
var isArbitraryShadow = (value) => getIsArbitraryValue(value, "", isShadow);
|
|
3809
|
+
var isAny = () => true;
|
|
3810
|
+
var getIsArbitraryValue = (value, label, testValue) => {
|
|
3811
|
+
const result = arbitraryValueRegex.exec(value);
|
|
3812
|
+
if (result) {
|
|
3813
|
+
if (result[1]) {
|
|
3814
|
+
return typeof label === "string" ? result[1] === label : label.has(result[1]);
|
|
3815
|
+
}
|
|
3816
|
+
return testValue(result[2]);
|
|
3817
|
+
}
|
|
3818
|
+
return false;
|
|
3819
|
+
};
|
|
3820
|
+
var isLengthOnly = (value) => (
|
|
3821
|
+
// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.
|
|
3822
|
+
// For example, `hsl(0 0% 0%)` would be classified as a length without this check.
|
|
3823
|
+
// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.
|
|
3824
|
+
lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)
|
|
3825
|
+
);
|
|
3826
|
+
var isNever = () => false;
|
|
3827
|
+
var isShadow = (value) => shadowRegex.test(value);
|
|
3828
|
+
var isImage = (value) => imageRegex.test(value);
|
|
3829
|
+
var getDefaultConfig = () => {
|
|
3830
|
+
const colors = fromTheme("colors");
|
|
3831
|
+
const spacing = fromTheme("spacing");
|
|
3832
|
+
const blur = fromTheme("blur");
|
|
3833
|
+
const brightness = fromTheme("brightness");
|
|
3834
|
+
const borderColor = fromTheme("borderColor");
|
|
3835
|
+
const borderRadius = fromTheme("borderRadius");
|
|
3836
|
+
const borderSpacing = fromTheme("borderSpacing");
|
|
3837
|
+
const borderWidth = fromTheme("borderWidth");
|
|
3838
|
+
const contrast = fromTheme("contrast");
|
|
3839
|
+
const grayscale = fromTheme("grayscale");
|
|
3840
|
+
const hueRotate = fromTheme("hueRotate");
|
|
3841
|
+
const invert = fromTheme("invert");
|
|
3842
|
+
const gap = fromTheme("gap");
|
|
3843
|
+
const gradientColorStops = fromTheme("gradientColorStops");
|
|
3844
|
+
const gradientColorStopPositions = fromTheme("gradientColorStopPositions");
|
|
3845
|
+
const inset = fromTheme("inset");
|
|
3846
|
+
const margin = fromTheme("margin");
|
|
3847
|
+
const opacity = fromTheme("opacity");
|
|
3848
|
+
const padding = fromTheme("padding");
|
|
3849
|
+
const saturate = fromTheme("saturate");
|
|
3850
|
+
const scale = fromTheme("scale");
|
|
3851
|
+
const sepia = fromTheme("sepia");
|
|
3852
|
+
const skew = fromTheme("skew");
|
|
3853
|
+
const space = fromTheme("space");
|
|
3854
|
+
const translate = fromTheme("translate");
|
|
3855
|
+
const getOverscroll = () => ["auto", "contain", "none"];
|
|
3856
|
+
const getOverflow = () => ["auto", "hidden", "clip", "visible", "scroll"];
|
|
3857
|
+
const getSpacingWithAutoAndArbitrary = () => ["auto", isArbitraryValue, spacing];
|
|
3858
|
+
const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];
|
|
3859
|
+
const getLengthWithEmptyAndArbitrary = () => ["", isLength, isArbitraryLength];
|
|
3860
|
+
const getNumberWithAutoAndArbitrary = () => ["auto", isNumber, isArbitraryValue];
|
|
3861
|
+
const getPositions = () => ["bottom", "center", "left", "left-bottom", "left-top", "right", "right-bottom", "right-top", "top"];
|
|
3862
|
+
const getLineStyles = () => ["solid", "dashed", "dotted", "double", "none"];
|
|
3863
|
+
const getBlendModes = () => ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"];
|
|
3864
|
+
const getAlign = () => ["start", "end", "center", "between", "around", "evenly", "stretch"];
|
|
3865
|
+
const getZeroAndEmpty = () => ["", "0", isArbitraryValue];
|
|
3866
|
+
const getBreaks = () => ["auto", "avoid", "all", "avoid-page", "page", "left", "right", "column"];
|
|
3867
|
+
const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];
|
|
3868
|
+
return {
|
|
3869
|
+
cacheSize: 500,
|
|
3870
|
+
separator: ":",
|
|
3871
|
+
theme: {
|
|
3872
|
+
colors: [isAny],
|
|
3873
|
+
spacing: [isLength, isArbitraryLength],
|
|
3874
|
+
blur: ["none", "", isTshirtSize, isArbitraryValue],
|
|
3875
|
+
brightness: getNumberAndArbitrary(),
|
|
3876
|
+
borderColor: [colors],
|
|
3877
|
+
borderRadius: ["none", "", "full", isTshirtSize, isArbitraryValue],
|
|
3878
|
+
borderSpacing: getSpacingWithArbitrary(),
|
|
3879
|
+
borderWidth: getLengthWithEmptyAndArbitrary(),
|
|
3880
|
+
contrast: getNumberAndArbitrary(),
|
|
3881
|
+
grayscale: getZeroAndEmpty(),
|
|
3882
|
+
hueRotate: getNumberAndArbitrary(),
|
|
3883
|
+
invert: getZeroAndEmpty(),
|
|
3884
|
+
gap: getSpacingWithArbitrary(),
|
|
3885
|
+
gradientColorStops: [colors],
|
|
3886
|
+
gradientColorStopPositions: [isPercent, isArbitraryLength],
|
|
3887
|
+
inset: getSpacingWithAutoAndArbitrary(),
|
|
3888
|
+
margin: getSpacingWithAutoAndArbitrary(),
|
|
3889
|
+
opacity: getNumberAndArbitrary(),
|
|
3890
|
+
padding: getSpacingWithArbitrary(),
|
|
3891
|
+
saturate: getNumberAndArbitrary(),
|
|
3892
|
+
scale: getNumberAndArbitrary(),
|
|
3893
|
+
sepia: getZeroAndEmpty(),
|
|
3894
|
+
skew: getNumberAndArbitrary(),
|
|
3895
|
+
space: getSpacingWithArbitrary(),
|
|
3896
|
+
translate: getSpacingWithArbitrary()
|
|
3897
|
+
},
|
|
3898
|
+
classGroups: {
|
|
3899
|
+
// Layout
|
|
3900
|
+
/**
|
|
3901
|
+
* Aspect Ratio
|
|
3902
|
+
* @see https://tailwindcss.com/docs/aspect-ratio
|
|
3903
|
+
*/
|
|
3904
|
+
aspect: [{
|
|
3905
|
+
aspect: ["auto", "square", "video", isArbitraryValue]
|
|
3906
|
+
}],
|
|
3907
|
+
/**
|
|
3908
|
+
* Container
|
|
3909
|
+
* @see https://tailwindcss.com/docs/container
|
|
3910
|
+
*/
|
|
3911
|
+
container: ["container"],
|
|
3912
|
+
/**
|
|
3913
|
+
* Columns
|
|
3914
|
+
* @see https://tailwindcss.com/docs/columns
|
|
3915
|
+
*/
|
|
3916
|
+
columns: [{
|
|
3917
|
+
columns: [isTshirtSize]
|
|
3918
|
+
}],
|
|
3919
|
+
/**
|
|
3920
|
+
* Break After
|
|
3921
|
+
* @see https://tailwindcss.com/docs/break-after
|
|
3922
|
+
*/
|
|
3923
|
+
"break-after": [{
|
|
3924
|
+
"break-after": getBreaks()
|
|
3925
|
+
}],
|
|
3926
|
+
/**
|
|
3927
|
+
* Break Before
|
|
3928
|
+
* @see https://tailwindcss.com/docs/break-before
|
|
3929
|
+
*/
|
|
3930
|
+
"break-before": [{
|
|
3931
|
+
"break-before": getBreaks()
|
|
3932
|
+
}],
|
|
3933
|
+
/**
|
|
3934
|
+
* Break Inside
|
|
3935
|
+
* @see https://tailwindcss.com/docs/break-inside
|
|
3936
|
+
*/
|
|
3937
|
+
"break-inside": [{
|
|
3938
|
+
"break-inside": ["auto", "avoid", "avoid-page", "avoid-column"]
|
|
3939
|
+
}],
|
|
3940
|
+
/**
|
|
3941
|
+
* Box Decoration Break
|
|
3942
|
+
* @see https://tailwindcss.com/docs/box-decoration-break
|
|
3943
|
+
*/
|
|
3944
|
+
"box-decoration": [{
|
|
3945
|
+
"box-decoration": ["slice", "clone"]
|
|
3946
|
+
}],
|
|
3947
|
+
/**
|
|
3948
|
+
* Box Sizing
|
|
3949
|
+
* @see https://tailwindcss.com/docs/box-sizing
|
|
3950
|
+
*/
|
|
3951
|
+
box: [{
|
|
3952
|
+
box: ["border", "content"]
|
|
3953
|
+
}],
|
|
3954
|
+
/**
|
|
3955
|
+
* Display
|
|
3956
|
+
* @see https://tailwindcss.com/docs/display
|
|
3957
|
+
*/
|
|
3958
|
+
display: ["block", "inline-block", "inline", "flex", "inline-flex", "table", "inline-table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row-group", "table-row", "flow-root", "grid", "inline-grid", "contents", "list-item", "hidden"],
|
|
3959
|
+
/**
|
|
3960
|
+
* Floats
|
|
3961
|
+
* @see https://tailwindcss.com/docs/float
|
|
3962
|
+
*/
|
|
3963
|
+
float: [{
|
|
3964
|
+
float: ["right", "left", "none", "start", "end"]
|
|
3965
|
+
}],
|
|
3966
|
+
/**
|
|
3967
|
+
* Clear
|
|
3968
|
+
* @see https://tailwindcss.com/docs/clear
|
|
3969
|
+
*/
|
|
3970
|
+
clear: [{
|
|
3971
|
+
clear: ["left", "right", "both", "none", "start", "end"]
|
|
3972
|
+
}],
|
|
3973
|
+
/**
|
|
3974
|
+
* Isolation
|
|
3975
|
+
* @see https://tailwindcss.com/docs/isolation
|
|
3976
|
+
*/
|
|
3977
|
+
isolation: ["isolate", "isolation-auto"],
|
|
3978
|
+
/**
|
|
3979
|
+
* Object Fit
|
|
3980
|
+
* @see https://tailwindcss.com/docs/object-fit
|
|
3981
|
+
*/
|
|
3982
|
+
"object-fit": [{
|
|
3983
|
+
object: ["contain", "cover", "fill", "none", "scale-down"]
|
|
3984
|
+
}],
|
|
3985
|
+
/**
|
|
3986
|
+
* Object Position
|
|
3987
|
+
* @see https://tailwindcss.com/docs/object-position
|
|
3988
|
+
*/
|
|
3989
|
+
"object-position": [{
|
|
3990
|
+
object: [...getPositions(), isArbitraryValue]
|
|
3991
|
+
}],
|
|
3992
|
+
/**
|
|
3993
|
+
* Overflow
|
|
3994
|
+
* @see https://tailwindcss.com/docs/overflow
|
|
3995
|
+
*/
|
|
3996
|
+
overflow: [{
|
|
3997
|
+
overflow: getOverflow()
|
|
3998
|
+
}],
|
|
3999
|
+
/**
|
|
4000
|
+
* Overflow X
|
|
4001
|
+
* @see https://tailwindcss.com/docs/overflow
|
|
4002
|
+
*/
|
|
4003
|
+
"overflow-x": [{
|
|
4004
|
+
"overflow-x": getOverflow()
|
|
4005
|
+
}],
|
|
4006
|
+
/**
|
|
4007
|
+
* Overflow Y
|
|
4008
|
+
* @see https://tailwindcss.com/docs/overflow
|
|
4009
|
+
*/
|
|
4010
|
+
"overflow-y": [{
|
|
4011
|
+
"overflow-y": getOverflow()
|
|
4012
|
+
}],
|
|
4013
|
+
/**
|
|
4014
|
+
* Overscroll Behavior
|
|
4015
|
+
* @see https://tailwindcss.com/docs/overscroll-behavior
|
|
4016
|
+
*/
|
|
4017
|
+
overscroll: [{
|
|
4018
|
+
overscroll: getOverscroll()
|
|
4019
|
+
}],
|
|
4020
|
+
/**
|
|
4021
|
+
* Overscroll Behavior X
|
|
4022
|
+
* @see https://tailwindcss.com/docs/overscroll-behavior
|
|
4023
|
+
*/
|
|
4024
|
+
"overscroll-x": [{
|
|
4025
|
+
"overscroll-x": getOverscroll()
|
|
4026
|
+
}],
|
|
4027
|
+
/**
|
|
4028
|
+
* Overscroll Behavior Y
|
|
4029
|
+
* @see https://tailwindcss.com/docs/overscroll-behavior
|
|
4030
|
+
*/
|
|
4031
|
+
"overscroll-y": [{
|
|
4032
|
+
"overscroll-y": getOverscroll()
|
|
4033
|
+
}],
|
|
4034
|
+
/**
|
|
4035
|
+
* Position
|
|
4036
|
+
* @see https://tailwindcss.com/docs/position
|
|
4037
|
+
*/
|
|
4038
|
+
position: ["static", "fixed", "absolute", "relative", "sticky"],
|
|
4039
|
+
/**
|
|
4040
|
+
* Top / Right / Bottom / Left
|
|
4041
|
+
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
|
4042
|
+
*/
|
|
4043
|
+
inset: [{
|
|
4044
|
+
inset: [inset]
|
|
4045
|
+
}],
|
|
4046
|
+
/**
|
|
4047
|
+
* Right / Left
|
|
4048
|
+
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
|
4049
|
+
*/
|
|
4050
|
+
"inset-x": [{
|
|
4051
|
+
"inset-x": [inset]
|
|
4052
|
+
}],
|
|
4053
|
+
/**
|
|
4054
|
+
* Top / Bottom
|
|
4055
|
+
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
|
4056
|
+
*/
|
|
4057
|
+
"inset-y": [{
|
|
4058
|
+
"inset-y": [inset]
|
|
4059
|
+
}],
|
|
4060
|
+
/**
|
|
4061
|
+
* Start
|
|
4062
|
+
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
|
4063
|
+
*/
|
|
4064
|
+
start: [{
|
|
4065
|
+
start: [inset]
|
|
4066
|
+
}],
|
|
4067
|
+
/**
|
|
4068
|
+
* End
|
|
4069
|
+
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
|
4070
|
+
*/
|
|
4071
|
+
end: [{
|
|
4072
|
+
end: [inset]
|
|
4073
|
+
}],
|
|
4074
|
+
/**
|
|
4075
|
+
* Top
|
|
4076
|
+
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
|
4077
|
+
*/
|
|
4078
|
+
top: [{
|
|
4079
|
+
top: [inset]
|
|
4080
|
+
}],
|
|
4081
|
+
/**
|
|
4082
|
+
* Right
|
|
4083
|
+
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
|
4084
|
+
*/
|
|
4085
|
+
right: [{
|
|
4086
|
+
right: [inset]
|
|
4087
|
+
}],
|
|
4088
|
+
/**
|
|
4089
|
+
* Bottom
|
|
4090
|
+
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
|
4091
|
+
*/
|
|
4092
|
+
bottom: [{
|
|
4093
|
+
bottom: [inset]
|
|
4094
|
+
}],
|
|
4095
|
+
/**
|
|
4096
|
+
* Left
|
|
4097
|
+
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
|
4098
|
+
*/
|
|
4099
|
+
left: [{
|
|
4100
|
+
left: [inset]
|
|
4101
|
+
}],
|
|
4102
|
+
/**
|
|
4103
|
+
* Visibility
|
|
4104
|
+
* @see https://tailwindcss.com/docs/visibility
|
|
4105
|
+
*/
|
|
4106
|
+
visibility: ["visible", "invisible", "collapse"],
|
|
4107
|
+
/**
|
|
4108
|
+
* Z-Index
|
|
4109
|
+
* @see https://tailwindcss.com/docs/z-index
|
|
4110
|
+
*/
|
|
4111
|
+
z: [{
|
|
4112
|
+
z: ["auto", isInteger, isArbitraryValue]
|
|
4113
|
+
}],
|
|
4114
|
+
// Flexbox and Grid
|
|
4115
|
+
/**
|
|
4116
|
+
* Flex Basis
|
|
4117
|
+
* @see https://tailwindcss.com/docs/flex-basis
|
|
4118
|
+
*/
|
|
4119
|
+
basis: [{
|
|
4120
|
+
basis: getSpacingWithAutoAndArbitrary()
|
|
4121
|
+
}],
|
|
4122
|
+
/**
|
|
4123
|
+
* Flex Direction
|
|
4124
|
+
* @see https://tailwindcss.com/docs/flex-direction
|
|
4125
|
+
*/
|
|
4126
|
+
"flex-direction": [{
|
|
4127
|
+
flex: ["row", "row-reverse", "col", "col-reverse"]
|
|
4128
|
+
}],
|
|
4129
|
+
/**
|
|
4130
|
+
* Flex Wrap
|
|
4131
|
+
* @see https://tailwindcss.com/docs/flex-wrap
|
|
4132
|
+
*/
|
|
4133
|
+
"flex-wrap": [{
|
|
4134
|
+
flex: ["wrap", "wrap-reverse", "nowrap"]
|
|
4135
|
+
}],
|
|
4136
|
+
/**
|
|
4137
|
+
* Flex
|
|
4138
|
+
* @see https://tailwindcss.com/docs/flex
|
|
4139
|
+
*/
|
|
4140
|
+
flex: [{
|
|
4141
|
+
flex: ["1", "auto", "initial", "none", isArbitraryValue]
|
|
4142
|
+
}],
|
|
4143
|
+
/**
|
|
4144
|
+
* Flex Grow
|
|
4145
|
+
* @see https://tailwindcss.com/docs/flex-grow
|
|
4146
|
+
*/
|
|
4147
|
+
grow: [{
|
|
4148
|
+
grow: getZeroAndEmpty()
|
|
4149
|
+
}],
|
|
4150
|
+
/**
|
|
4151
|
+
* Flex Shrink
|
|
4152
|
+
* @see https://tailwindcss.com/docs/flex-shrink
|
|
4153
|
+
*/
|
|
4154
|
+
shrink: [{
|
|
4155
|
+
shrink: getZeroAndEmpty()
|
|
4156
|
+
}],
|
|
4157
|
+
/**
|
|
4158
|
+
* Order
|
|
4159
|
+
* @see https://tailwindcss.com/docs/order
|
|
4160
|
+
*/
|
|
4161
|
+
order: [{
|
|
4162
|
+
order: ["first", "last", "none", isInteger, isArbitraryValue]
|
|
4163
|
+
}],
|
|
4164
|
+
/**
|
|
4165
|
+
* Grid Template Columns
|
|
4166
|
+
* @see https://tailwindcss.com/docs/grid-template-columns
|
|
4167
|
+
*/
|
|
4168
|
+
"grid-cols": [{
|
|
4169
|
+
"grid-cols": [isAny]
|
|
4170
|
+
}],
|
|
4171
|
+
/**
|
|
4172
|
+
* Grid Column Start / End
|
|
4173
|
+
* @see https://tailwindcss.com/docs/grid-column
|
|
4174
|
+
*/
|
|
4175
|
+
"col-start-end": [{
|
|
4176
|
+
col: ["auto", {
|
|
4177
|
+
span: ["full", isInteger, isArbitraryValue]
|
|
4178
|
+
}, isArbitraryValue]
|
|
4179
|
+
}],
|
|
4180
|
+
/**
|
|
4181
|
+
* Grid Column Start
|
|
4182
|
+
* @see https://tailwindcss.com/docs/grid-column
|
|
4183
|
+
*/
|
|
4184
|
+
"col-start": [{
|
|
4185
|
+
"col-start": getNumberWithAutoAndArbitrary()
|
|
4186
|
+
}],
|
|
4187
|
+
/**
|
|
4188
|
+
* Grid Column End
|
|
4189
|
+
* @see https://tailwindcss.com/docs/grid-column
|
|
4190
|
+
*/
|
|
4191
|
+
"col-end": [{
|
|
4192
|
+
"col-end": getNumberWithAutoAndArbitrary()
|
|
4193
|
+
}],
|
|
4194
|
+
/**
|
|
4195
|
+
* Grid Template Rows
|
|
4196
|
+
* @see https://tailwindcss.com/docs/grid-template-rows
|
|
4197
|
+
*/
|
|
4198
|
+
"grid-rows": [{
|
|
4199
|
+
"grid-rows": [isAny]
|
|
4200
|
+
}],
|
|
4201
|
+
/**
|
|
4202
|
+
* Grid Row Start / End
|
|
4203
|
+
* @see https://tailwindcss.com/docs/grid-row
|
|
4204
|
+
*/
|
|
4205
|
+
"row-start-end": [{
|
|
4206
|
+
row: ["auto", {
|
|
4207
|
+
span: [isInteger, isArbitraryValue]
|
|
4208
|
+
}, isArbitraryValue]
|
|
4209
|
+
}],
|
|
4210
|
+
/**
|
|
4211
|
+
* Grid Row Start
|
|
4212
|
+
* @see https://tailwindcss.com/docs/grid-row
|
|
4213
|
+
*/
|
|
4214
|
+
"row-start": [{
|
|
4215
|
+
"row-start": getNumberWithAutoAndArbitrary()
|
|
4216
|
+
}],
|
|
4217
|
+
/**
|
|
4218
|
+
* Grid Row End
|
|
4219
|
+
* @see https://tailwindcss.com/docs/grid-row
|
|
4220
|
+
*/
|
|
4221
|
+
"row-end": [{
|
|
4222
|
+
"row-end": getNumberWithAutoAndArbitrary()
|
|
4223
|
+
}],
|
|
4224
|
+
/**
|
|
4225
|
+
* Grid Auto Flow
|
|
4226
|
+
* @see https://tailwindcss.com/docs/grid-auto-flow
|
|
4227
|
+
*/
|
|
4228
|
+
"grid-flow": [{
|
|
4229
|
+
"grid-flow": ["row", "col", "dense", "row-dense", "col-dense"]
|
|
4230
|
+
}],
|
|
4231
|
+
/**
|
|
4232
|
+
* Grid Auto Columns
|
|
4233
|
+
* @see https://tailwindcss.com/docs/grid-auto-columns
|
|
4234
|
+
*/
|
|
4235
|
+
"auto-cols": [{
|
|
4236
|
+
"auto-cols": ["auto", "min", "max", "fr", isArbitraryValue]
|
|
4237
|
+
}],
|
|
4238
|
+
/**
|
|
4239
|
+
* Grid Auto Rows
|
|
4240
|
+
* @see https://tailwindcss.com/docs/grid-auto-rows
|
|
4241
|
+
*/
|
|
4242
|
+
"auto-rows": [{
|
|
4243
|
+
"auto-rows": ["auto", "min", "max", "fr", isArbitraryValue]
|
|
4244
|
+
}],
|
|
4245
|
+
/**
|
|
4246
|
+
* Gap
|
|
4247
|
+
* @see https://tailwindcss.com/docs/gap
|
|
4248
|
+
*/
|
|
4249
|
+
gap: [{
|
|
4250
|
+
gap: [gap]
|
|
4251
|
+
}],
|
|
4252
|
+
/**
|
|
4253
|
+
* Gap X
|
|
4254
|
+
* @see https://tailwindcss.com/docs/gap
|
|
4255
|
+
*/
|
|
4256
|
+
"gap-x": [{
|
|
4257
|
+
"gap-x": [gap]
|
|
4258
|
+
}],
|
|
4259
|
+
/**
|
|
4260
|
+
* Gap Y
|
|
4261
|
+
* @see https://tailwindcss.com/docs/gap
|
|
4262
|
+
*/
|
|
4263
|
+
"gap-y": [{
|
|
4264
|
+
"gap-y": [gap]
|
|
4265
|
+
}],
|
|
4266
|
+
/**
|
|
4267
|
+
* Justify Content
|
|
4268
|
+
* @see https://tailwindcss.com/docs/justify-content
|
|
4269
|
+
*/
|
|
4270
|
+
"justify-content": [{
|
|
4271
|
+
justify: ["normal", ...getAlign()]
|
|
4272
|
+
}],
|
|
4273
|
+
/**
|
|
4274
|
+
* Justify Items
|
|
4275
|
+
* @see https://tailwindcss.com/docs/justify-items
|
|
4276
|
+
*/
|
|
4277
|
+
"justify-items": [{
|
|
4278
|
+
"justify-items": ["start", "end", "center", "stretch"]
|
|
4279
|
+
}],
|
|
4280
|
+
/**
|
|
4281
|
+
* Justify Self
|
|
4282
|
+
* @see https://tailwindcss.com/docs/justify-self
|
|
4283
|
+
*/
|
|
4284
|
+
"justify-self": [{
|
|
4285
|
+
"justify-self": ["auto", "start", "end", "center", "stretch"]
|
|
4286
|
+
}],
|
|
4287
|
+
/**
|
|
4288
|
+
* Align Content
|
|
4289
|
+
* @see https://tailwindcss.com/docs/align-content
|
|
4290
|
+
*/
|
|
4291
|
+
"align-content": [{
|
|
4292
|
+
content: ["normal", ...getAlign(), "baseline"]
|
|
4293
|
+
}],
|
|
4294
|
+
/**
|
|
4295
|
+
* Align Items
|
|
4296
|
+
* @see https://tailwindcss.com/docs/align-items
|
|
4297
|
+
*/
|
|
4298
|
+
"align-items": [{
|
|
4299
|
+
items: ["start", "end", "center", "baseline", "stretch"]
|
|
4300
|
+
}],
|
|
4301
|
+
/**
|
|
4302
|
+
* Align Self
|
|
4303
|
+
* @see https://tailwindcss.com/docs/align-self
|
|
4304
|
+
*/
|
|
4305
|
+
"align-self": [{
|
|
4306
|
+
self: ["auto", "start", "end", "center", "stretch", "baseline"]
|
|
4307
|
+
}],
|
|
4308
|
+
/**
|
|
4309
|
+
* Place Content
|
|
4310
|
+
* @see https://tailwindcss.com/docs/place-content
|
|
4311
|
+
*/
|
|
4312
|
+
"place-content": [{
|
|
4313
|
+
"place-content": [...getAlign(), "baseline"]
|
|
4314
|
+
}],
|
|
4315
|
+
/**
|
|
4316
|
+
* Place Items
|
|
4317
|
+
* @see https://tailwindcss.com/docs/place-items
|
|
4318
|
+
*/
|
|
4319
|
+
"place-items": [{
|
|
4320
|
+
"place-items": ["start", "end", "center", "baseline", "stretch"]
|
|
4321
|
+
}],
|
|
4322
|
+
/**
|
|
4323
|
+
* Place Self
|
|
4324
|
+
* @see https://tailwindcss.com/docs/place-self
|
|
4325
|
+
*/
|
|
4326
|
+
"place-self": [{
|
|
4327
|
+
"place-self": ["auto", "start", "end", "center", "stretch"]
|
|
4328
|
+
}],
|
|
4329
|
+
// Spacing
|
|
4330
|
+
/**
|
|
4331
|
+
* Padding
|
|
4332
|
+
* @see https://tailwindcss.com/docs/padding
|
|
4333
|
+
*/
|
|
4334
|
+
p: [{
|
|
4335
|
+
p: [padding]
|
|
4336
|
+
}],
|
|
4337
|
+
/**
|
|
4338
|
+
* Padding X
|
|
4339
|
+
* @see https://tailwindcss.com/docs/padding
|
|
4340
|
+
*/
|
|
4341
|
+
px: [{
|
|
4342
|
+
px: [padding]
|
|
4343
|
+
}],
|
|
4344
|
+
/**
|
|
4345
|
+
* Padding Y
|
|
4346
|
+
* @see https://tailwindcss.com/docs/padding
|
|
4347
|
+
*/
|
|
4348
|
+
py: [{
|
|
4349
|
+
py: [padding]
|
|
4350
|
+
}],
|
|
4351
|
+
/**
|
|
4352
|
+
* Padding Start
|
|
4353
|
+
* @see https://tailwindcss.com/docs/padding
|
|
4354
|
+
*/
|
|
4355
|
+
ps: [{
|
|
4356
|
+
ps: [padding]
|
|
4357
|
+
}],
|
|
4358
|
+
/**
|
|
4359
|
+
* Padding End
|
|
4360
|
+
* @see https://tailwindcss.com/docs/padding
|
|
4361
|
+
*/
|
|
4362
|
+
pe: [{
|
|
4363
|
+
pe: [padding]
|
|
4364
|
+
}],
|
|
4365
|
+
/**
|
|
4366
|
+
* Padding Top
|
|
4367
|
+
* @see https://tailwindcss.com/docs/padding
|
|
4368
|
+
*/
|
|
4369
|
+
pt: [{
|
|
4370
|
+
pt: [padding]
|
|
4371
|
+
}],
|
|
4372
|
+
/**
|
|
4373
|
+
* Padding Right
|
|
4374
|
+
* @see https://tailwindcss.com/docs/padding
|
|
4375
|
+
*/
|
|
4376
|
+
pr: [{
|
|
4377
|
+
pr: [padding]
|
|
4378
|
+
}],
|
|
4379
|
+
/**
|
|
4380
|
+
* Padding Bottom
|
|
4381
|
+
* @see https://tailwindcss.com/docs/padding
|
|
4382
|
+
*/
|
|
4383
|
+
pb: [{
|
|
4384
|
+
pb: [padding]
|
|
4385
|
+
}],
|
|
4386
|
+
/**
|
|
4387
|
+
* Padding Left
|
|
4388
|
+
* @see https://tailwindcss.com/docs/padding
|
|
4389
|
+
*/
|
|
4390
|
+
pl: [{
|
|
4391
|
+
pl: [padding]
|
|
4392
|
+
}],
|
|
4393
|
+
/**
|
|
4394
|
+
* Margin
|
|
4395
|
+
* @see https://tailwindcss.com/docs/margin
|
|
4396
|
+
*/
|
|
4397
|
+
m: [{
|
|
4398
|
+
m: [margin]
|
|
4399
|
+
}],
|
|
4400
|
+
/**
|
|
4401
|
+
* Margin X
|
|
4402
|
+
* @see https://tailwindcss.com/docs/margin
|
|
4403
|
+
*/
|
|
4404
|
+
mx: [{
|
|
4405
|
+
mx: [margin]
|
|
4406
|
+
}],
|
|
4407
|
+
/**
|
|
4408
|
+
* Margin Y
|
|
4409
|
+
* @see https://tailwindcss.com/docs/margin
|
|
4410
|
+
*/
|
|
4411
|
+
my: [{
|
|
4412
|
+
my: [margin]
|
|
4413
|
+
}],
|
|
4414
|
+
/**
|
|
4415
|
+
* Margin Start
|
|
4416
|
+
* @see https://tailwindcss.com/docs/margin
|
|
4417
|
+
*/
|
|
4418
|
+
ms: [{
|
|
4419
|
+
ms: [margin]
|
|
4420
|
+
}],
|
|
4421
|
+
/**
|
|
4422
|
+
* Margin End
|
|
4423
|
+
* @see https://tailwindcss.com/docs/margin
|
|
4424
|
+
*/
|
|
4425
|
+
me: [{
|
|
4426
|
+
me: [margin]
|
|
4427
|
+
}],
|
|
4428
|
+
/**
|
|
4429
|
+
* Margin Top
|
|
4430
|
+
* @see https://tailwindcss.com/docs/margin
|
|
4431
|
+
*/
|
|
4432
|
+
mt: [{
|
|
4433
|
+
mt: [margin]
|
|
4434
|
+
}],
|
|
4435
|
+
/**
|
|
4436
|
+
* Margin Right
|
|
4437
|
+
* @see https://tailwindcss.com/docs/margin
|
|
4438
|
+
*/
|
|
4439
|
+
mr: [{
|
|
4440
|
+
mr: [margin]
|
|
4441
|
+
}],
|
|
4442
|
+
/**
|
|
4443
|
+
* Margin Bottom
|
|
4444
|
+
* @see https://tailwindcss.com/docs/margin
|
|
4445
|
+
*/
|
|
4446
|
+
mb: [{
|
|
4447
|
+
mb: [margin]
|
|
4448
|
+
}],
|
|
4449
|
+
/**
|
|
4450
|
+
* Margin Left
|
|
4451
|
+
* @see https://tailwindcss.com/docs/margin
|
|
4452
|
+
*/
|
|
4453
|
+
ml: [{
|
|
4454
|
+
ml: [margin]
|
|
4455
|
+
}],
|
|
4456
|
+
/**
|
|
4457
|
+
* Space Between X
|
|
4458
|
+
* @see https://tailwindcss.com/docs/space
|
|
4459
|
+
*/
|
|
4460
|
+
"space-x": [{
|
|
4461
|
+
"space-x": [space]
|
|
4462
|
+
}],
|
|
4463
|
+
/**
|
|
4464
|
+
* Space Between X Reverse
|
|
4465
|
+
* @see https://tailwindcss.com/docs/space
|
|
4466
|
+
*/
|
|
4467
|
+
"space-x-reverse": ["space-x-reverse"],
|
|
4468
|
+
/**
|
|
4469
|
+
* Space Between Y
|
|
4470
|
+
* @see https://tailwindcss.com/docs/space
|
|
4471
|
+
*/
|
|
4472
|
+
"space-y": [{
|
|
4473
|
+
"space-y": [space]
|
|
4474
|
+
}],
|
|
4475
|
+
/**
|
|
4476
|
+
* Space Between Y Reverse
|
|
4477
|
+
* @see https://tailwindcss.com/docs/space
|
|
4478
|
+
*/
|
|
4479
|
+
"space-y-reverse": ["space-y-reverse"],
|
|
4480
|
+
// Sizing
|
|
4481
|
+
/**
|
|
4482
|
+
* Width
|
|
4483
|
+
* @see https://tailwindcss.com/docs/width
|
|
4484
|
+
*/
|
|
4485
|
+
w: [{
|
|
4486
|
+
w: ["auto", "min", "max", "fit", "svw", "lvw", "dvw", isArbitraryValue, spacing]
|
|
4487
|
+
}],
|
|
4488
|
+
/**
|
|
4489
|
+
* Min-Width
|
|
4490
|
+
* @see https://tailwindcss.com/docs/min-width
|
|
4491
|
+
*/
|
|
4492
|
+
"min-w": [{
|
|
4493
|
+
"min-w": [isArbitraryValue, spacing, "min", "max", "fit"]
|
|
4494
|
+
}],
|
|
4495
|
+
/**
|
|
4496
|
+
* Max-Width
|
|
4497
|
+
* @see https://tailwindcss.com/docs/max-width
|
|
4498
|
+
*/
|
|
4499
|
+
"max-w": [{
|
|
4500
|
+
"max-w": [isArbitraryValue, spacing, "none", "full", "min", "max", "fit", "prose", {
|
|
4501
|
+
screen: [isTshirtSize]
|
|
4502
|
+
}, isTshirtSize]
|
|
4503
|
+
}],
|
|
4504
|
+
/**
|
|
4505
|
+
* Height
|
|
4506
|
+
* @see https://tailwindcss.com/docs/height
|
|
4507
|
+
*/
|
|
4508
|
+
h: [{
|
|
4509
|
+
h: [isArbitraryValue, spacing, "auto", "min", "max", "fit", "svh", "lvh", "dvh"]
|
|
4510
|
+
}],
|
|
4511
|
+
/**
|
|
4512
|
+
* Min-Height
|
|
4513
|
+
* @see https://tailwindcss.com/docs/min-height
|
|
4514
|
+
*/
|
|
4515
|
+
"min-h": [{
|
|
4516
|
+
"min-h": [isArbitraryValue, spacing, "min", "max", "fit", "svh", "lvh", "dvh"]
|
|
4517
|
+
}],
|
|
4518
|
+
/**
|
|
4519
|
+
* Max-Height
|
|
4520
|
+
* @see https://tailwindcss.com/docs/max-height
|
|
4521
|
+
*/
|
|
4522
|
+
"max-h": [{
|
|
4523
|
+
"max-h": [isArbitraryValue, spacing, "min", "max", "fit", "svh", "lvh", "dvh"]
|
|
4524
|
+
}],
|
|
4525
|
+
/**
|
|
4526
|
+
* Size
|
|
4527
|
+
* @see https://tailwindcss.com/docs/size
|
|
4528
|
+
*/
|
|
4529
|
+
size: [{
|
|
4530
|
+
size: [isArbitraryValue, spacing, "auto", "min", "max", "fit"]
|
|
4531
|
+
}],
|
|
4532
|
+
// Typography
|
|
4533
|
+
/**
|
|
4534
|
+
* Font Size
|
|
4535
|
+
* @see https://tailwindcss.com/docs/font-size
|
|
4536
|
+
*/
|
|
4537
|
+
"font-size": [{
|
|
4538
|
+
text: ["base", isTshirtSize, isArbitraryLength]
|
|
4539
|
+
}],
|
|
4540
|
+
/**
|
|
4541
|
+
* Font Smoothing
|
|
4542
|
+
* @see https://tailwindcss.com/docs/font-smoothing
|
|
4543
|
+
*/
|
|
4544
|
+
"font-smoothing": ["antialiased", "subpixel-antialiased"],
|
|
4545
|
+
/**
|
|
4546
|
+
* Font Style
|
|
4547
|
+
* @see https://tailwindcss.com/docs/font-style
|
|
4548
|
+
*/
|
|
4549
|
+
"font-style": ["italic", "not-italic"],
|
|
4550
|
+
/**
|
|
4551
|
+
* Font Weight
|
|
4552
|
+
* @see https://tailwindcss.com/docs/font-weight
|
|
4553
|
+
*/
|
|
4554
|
+
"font-weight": [{
|
|
4555
|
+
font: ["thin", "extralight", "light", "normal", "medium", "semibold", "bold", "extrabold", "black", isArbitraryNumber]
|
|
4556
|
+
}],
|
|
4557
|
+
/**
|
|
4558
|
+
* Font Family
|
|
4559
|
+
* @see https://tailwindcss.com/docs/font-family
|
|
4560
|
+
*/
|
|
4561
|
+
"font-family": [{
|
|
4562
|
+
font: [isAny]
|
|
4563
|
+
}],
|
|
4564
|
+
/**
|
|
4565
|
+
* Font Variant Numeric
|
|
4566
|
+
* @see https://tailwindcss.com/docs/font-variant-numeric
|
|
4567
|
+
*/
|
|
4568
|
+
"fvn-normal": ["normal-nums"],
|
|
4569
|
+
/**
|
|
4570
|
+
* Font Variant Numeric
|
|
4571
|
+
* @see https://tailwindcss.com/docs/font-variant-numeric
|
|
4572
|
+
*/
|
|
4573
|
+
"fvn-ordinal": ["ordinal"],
|
|
4574
|
+
/**
|
|
4575
|
+
* Font Variant Numeric
|
|
4576
|
+
* @see https://tailwindcss.com/docs/font-variant-numeric
|
|
4577
|
+
*/
|
|
4578
|
+
"fvn-slashed-zero": ["slashed-zero"],
|
|
4579
|
+
/**
|
|
4580
|
+
* Font Variant Numeric
|
|
4581
|
+
* @see https://tailwindcss.com/docs/font-variant-numeric
|
|
4582
|
+
*/
|
|
4583
|
+
"fvn-figure": ["lining-nums", "oldstyle-nums"],
|
|
4584
|
+
/**
|
|
4585
|
+
* Font Variant Numeric
|
|
4586
|
+
* @see https://tailwindcss.com/docs/font-variant-numeric
|
|
4587
|
+
*/
|
|
4588
|
+
"fvn-spacing": ["proportional-nums", "tabular-nums"],
|
|
4589
|
+
/**
|
|
4590
|
+
* Font Variant Numeric
|
|
4591
|
+
* @see https://tailwindcss.com/docs/font-variant-numeric
|
|
4592
|
+
*/
|
|
4593
|
+
"fvn-fraction": ["diagonal-fractions", "stacked-fractions"],
|
|
4594
|
+
/**
|
|
4595
|
+
* Letter Spacing
|
|
4596
|
+
* @see https://tailwindcss.com/docs/letter-spacing
|
|
4597
|
+
*/
|
|
4598
|
+
tracking: [{
|
|
4599
|
+
tracking: ["tighter", "tight", "normal", "wide", "wider", "widest", isArbitraryValue]
|
|
4600
|
+
}],
|
|
4601
|
+
/**
|
|
4602
|
+
* Line Clamp
|
|
4603
|
+
* @see https://tailwindcss.com/docs/line-clamp
|
|
4604
|
+
*/
|
|
4605
|
+
"line-clamp": [{
|
|
4606
|
+
"line-clamp": ["none", isNumber, isArbitraryNumber]
|
|
4607
|
+
}],
|
|
4608
|
+
/**
|
|
4609
|
+
* Line Height
|
|
4610
|
+
* @see https://tailwindcss.com/docs/line-height
|
|
4611
|
+
*/
|
|
4612
|
+
leading: [{
|
|
4613
|
+
leading: ["none", "tight", "snug", "normal", "relaxed", "loose", isLength, isArbitraryValue]
|
|
4614
|
+
}],
|
|
4615
|
+
/**
|
|
4616
|
+
* List Style Image
|
|
4617
|
+
* @see https://tailwindcss.com/docs/list-style-image
|
|
4618
|
+
*/
|
|
4619
|
+
"list-image": [{
|
|
4620
|
+
"list-image": ["none", isArbitraryValue]
|
|
4621
|
+
}],
|
|
4622
|
+
/**
|
|
4623
|
+
* List Style Type
|
|
4624
|
+
* @see https://tailwindcss.com/docs/list-style-type
|
|
4625
|
+
*/
|
|
4626
|
+
"list-style-type": [{
|
|
4627
|
+
list: ["none", "disc", "decimal", isArbitraryValue]
|
|
4628
|
+
}],
|
|
4629
|
+
/**
|
|
4630
|
+
* List Style Position
|
|
4631
|
+
* @see https://tailwindcss.com/docs/list-style-position
|
|
4632
|
+
*/
|
|
4633
|
+
"list-style-position": [{
|
|
4634
|
+
list: ["inside", "outside"]
|
|
4635
|
+
}],
|
|
4636
|
+
/**
|
|
4637
|
+
* Placeholder Color
|
|
4638
|
+
* @deprecated since Tailwind CSS v3.0.0
|
|
4639
|
+
* @see https://tailwindcss.com/docs/placeholder-color
|
|
4640
|
+
*/
|
|
4641
|
+
"placeholder-color": [{
|
|
4642
|
+
placeholder: [colors]
|
|
4643
|
+
}],
|
|
4644
|
+
/**
|
|
4645
|
+
* Placeholder Opacity
|
|
4646
|
+
* @see https://tailwindcss.com/docs/placeholder-opacity
|
|
4647
|
+
*/
|
|
4648
|
+
"placeholder-opacity": [{
|
|
4649
|
+
"placeholder-opacity": [opacity]
|
|
4650
|
+
}],
|
|
4651
|
+
/**
|
|
4652
|
+
* Text Alignment
|
|
4653
|
+
* @see https://tailwindcss.com/docs/text-align
|
|
4654
|
+
*/
|
|
4655
|
+
"text-alignment": [{
|
|
4656
|
+
text: ["left", "center", "right", "justify", "start", "end"]
|
|
4657
|
+
}],
|
|
4658
|
+
/**
|
|
4659
|
+
* Text Color
|
|
4660
|
+
* @see https://tailwindcss.com/docs/text-color
|
|
4661
|
+
*/
|
|
4662
|
+
"text-color": [{
|
|
4663
|
+
text: [colors]
|
|
4664
|
+
}],
|
|
4665
|
+
/**
|
|
4666
|
+
* Text Opacity
|
|
4667
|
+
* @see https://tailwindcss.com/docs/text-opacity
|
|
4668
|
+
*/
|
|
4669
|
+
"text-opacity": [{
|
|
4670
|
+
"text-opacity": [opacity]
|
|
4671
|
+
}],
|
|
4672
|
+
/**
|
|
4673
|
+
* Text Decoration
|
|
4674
|
+
* @see https://tailwindcss.com/docs/text-decoration
|
|
4675
|
+
*/
|
|
4676
|
+
"text-decoration": ["underline", "overline", "line-through", "no-underline"],
|
|
4677
|
+
/**
|
|
4678
|
+
* Text Decoration Style
|
|
4679
|
+
* @see https://tailwindcss.com/docs/text-decoration-style
|
|
4680
|
+
*/
|
|
4681
|
+
"text-decoration-style": [{
|
|
4682
|
+
decoration: [...getLineStyles(), "wavy"]
|
|
4683
|
+
}],
|
|
4684
|
+
/**
|
|
4685
|
+
* Text Decoration Thickness
|
|
4686
|
+
* @see https://tailwindcss.com/docs/text-decoration-thickness
|
|
4687
|
+
*/
|
|
4688
|
+
"text-decoration-thickness": [{
|
|
4689
|
+
decoration: ["auto", "from-font", isLength, isArbitraryLength]
|
|
4690
|
+
}],
|
|
4691
|
+
/**
|
|
4692
|
+
* Text Underline Offset
|
|
4693
|
+
* @see https://tailwindcss.com/docs/text-underline-offset
|
|
4694
|
+
*/
|
|
4695
|
+
"underline-offset": [{
|
|
4696
|
+
"underline-offset": ["auto", isLength, isArbitraryValue]
|
|
4697
|
+
}],
|
|
4698
|
+
/**
|
|
4699
|
+
* Text Decoration Color
|
|
4700
|
+
* @see https://tailwindcss.com/docs/text-decoration-color
|
|
4701
|
+
*/
|
|
4702
|
+
"text-decoration-color": [{
|
|
4703
|
+
decoration: [colors]
|
|
4704
|
+
}],
|
|
4705
|
+
/**
|
|
4706
|
+
* Text Transform
|
|
4707
|
+
* @see https://tailwindcss.com/docs/text-transform
|
|
4708
|
+
*/
|
|
4709
|
+
"text-transform": ["uppercase", "lowercase", "capitalize", "normal-case"],
|
|
4710
|
+
/**
|
|
4711
|
+
* Text Overflow
|
|
4712
|
+
* @see https://tailwindcss.com/docs/text-overflow
|
|
4713
|
+
*/
|
|
4714
|
+
"text-overflow": ["truncate", "text-ellipsis", "text-clip"],
|
|
4715
|
+
/**
|
|
4716
|
+
* Text Wrap
|
|
4717
|
+
* @see https://tailwindcss.com/docs/text-wrap
|
|
4718
|
+
*/
|
|
4719
|
+
"text-wrap": [{
|
|
4720
|
+
text: ["wrap", "nowrap", "balance", "pretty"]
|
|
4721
|
+
}],
|
|
4722
|
+
/**
|
|
4723
|
+
* Text Indent
|
|
4724
|
+
* @see https://tailwindcss.com/docs/text-indent
|
|
4725
|
+
*/
|
|
4726
|
+
indent: [{
|
|
4727
|
+
indent: getSpacingWithArbitrary()
|
|
4728
|
+
}],
|
|
4729
|
+
/**
|
|
4730
|
+
* Vertical Alignment
|
|
4731
|
+
* @see https://tailwindcss.com/docs/vertical-align
|
|
4732
|
+
*/
|
|
4733
|
+
"vertical-align": [{
|
|
4734
|
+
align: ["baseline", "top", "middle", "bottom", "text-top", "text-bottom", "sub", "super", isArbitraryValue]
|
|
4735
|
+
}],
|
|
4736
|
+
/**
|
|
4737
|
+
* Whitespace
|
|
4738
|
+
* @see https://tailwindcss.com/docs/whitespace
|
|
4739
|
+
*/
|
|
4740
|
+
whitespace: [{
|
|
4741
|
+
whitespace: ["normal", "nowrap", "pre", "pre-line", "pre-wrap", "break-spaces"]
|
|
4742
|
+
}],
|
|
4743
|
+
/**
|
|
4744
|
+
* Word Break
|
|
4745
|
+
* @see https://tailwindcss.com/docs/word-break
|
|
4746
|
+
*/
|
|
4747
|
+
break: [{
|
|
4748
|
+
break: ["normal", "words", "all", "keep"]
|
|
4749
|
+
}],
|
|
4750
|
+
/**
|
|
4751
|
+
* Hyphens
|
|
4752
|
+
* @see https://tailwindcss.com/docs/hyphens
|
|
4753
|
+
*/
|
|
4754
|
+
hyphens: [{
|
|
4755
|
+
hyphens: ["none", "manual", "auto"]
|
|
4756
|
+
}],
|
|
4757
|
+
/**
|
|
4758
|
+
* Content
|
|
4759
|
+
* @see https://tailwindcss.com/docs/content
|
|
4760
|
+
*/
|
|
4761
|
+
content: [{
|
|
4762
|
+
content: ["none", isArbitraryValue]
|
|
4763
|
+
}],
|
|
4764
|
+
// Backgrounds
|
|
4765
|
+
/**
|
|
4766
|
+
* Background Attachment
|
|
4767
|
+
* @see https://tailwindcss.com/docs/background-attachment
|
|
4768
|
+
*/
|
|
4769
|
+
"bg-attachment": [{
|
|
4770
|
+
bg: ["fixed", "local", "scroll"]
|
|
4771
|
+
}],
|
|
4772
|
+
/**
|
|
4773
|
+
* Background Clip
|
|
4774
|
+
* @see https://tailwindcss.com/docs/background-clip
|
|
4775
|
+
*/
|
|
4776
|
+
"bg-clip": [{
|
|
4777
|
+
"bg-clip": ["border", "padding", "content", "text"]
|
|
4778
|
+
}],
|
|
4779
|
+
/**
|
|
4780
|
+
* Background Opacity
|
|
4781
|
+
* @deprecated since Tailwind CSS v3.0.0
|
|
4782
|
+
* @see https://tailwindcss.com/docs/background-opacity
|
|
4783
|
+
*/
|
|
4784
|
+
"bg-opacity": [{
|
|
4785
|
+
"bg-opacity": [opacity]
|
|
4786
|
+
}],
|
|
4787
|
+
/**
|
|
4788
|
+
* Background Origin
|
|
4789
|
+
* @see https://tailwindcss.com/docs/background-origin
|
|
4790
|
+
*/
|
|
4791
|
+
"bg-origin": [{
|
|
4792
|
+
"bg-origin": ["border", "padding", "content"]
|
|
4793
|
+
}],
|
|
4794
|
+
/**
|
|
4795
|
+
* Background Position
|
|
4796
|
+
* @see https://tailwindcss.com/docs/background-position
|
|
4797
|
+
*/
|
|
4798
|
+
"bg-position": [{
|
|
4799
|
+
bg: [...getPositions(), isArbitraryPosition]
|
|
4800
|
+
}],
|
|
4801
|
+
/**
|
|
4802
|
+
* Background Repeat
|
|
4803
|
+
* @see https://tailwindcss.com/docs/background-repeat
|
|
4804
|
+
*/
|
|
4805
|
+
"bg-repeat": [{
|
|
4806
|
+
bg: ["no-repeat", {
|
|
4807
|
+
repeat: ["", "x", "y", "round", "space"]
|
|
4808
|
+
}]
|
|
4809
|
+
}],
|
|
4810
|
+
/**
|
|
4811
|
+
* Background Size
|
|
4812
|
+
* @see https://tailwindcss.com/docs/background-size
|
|
4813
|
+
*/
|
|
4814
|
+
"bg-size": [{
|
|
4815
|
+
bg: ["auto", "cover", "contain", isArbitrarySize]
|
|
4816
|
+
}],
|
|
4817
|
+
/**
|
|
4818
|
+
* Background Image
|
|
4819
|
+
* @see https://tailwindcss.com/docs/background-image
|
|
4820
|
+
*/
|
|
4821
|
+
"bg-image": [{
|
|
4822
|
+
bg: ["none", {
|
|
4823
|
+
"gradient-to": ["t", "tr", "r", "br", "b", "bl", "l", "tl"]
|
|
4824
|
+
}, isArbitraryImage]
|
|
4825
|
+
}],
|
|
4826
|
+
/**
|
|
4827
|
+
* Background Color
|
|
4828
|
+
* @see https://tailwindcss.com/docs/background-color
|
|
4829
|
+
*/
|
|
4830
|
+
"bg-color": [{
|
|
4831
|
+
bg: [colors]
|
|
4832
|
+
}],
|
|
4833
|
+
/**
|
|
4834
|
+
* Gradient Color Stops From Position
|
|
4835
|
+
* @see https://tailwindcss.com/docs/gradient-color-stops
|
|
4836
|
+
*/
|
|
4837
|
+
"gradient-from-pos": [{
|
|
4838
|
+
from: [gradientColorStopPositions]
|
|
4839
|
+
}],
|
|
4840
|
+
/**
|
|
4841
|
+
* Gradient Color Stops Via Position
|
|
4842
|
+
* @see https://tailwindcss.com/docs/gradient-color-stops
|
|
4843
|
+
*/
|
|
4844
|
+
"gradient-via-pos": [{
|
|
4845
|
+
via: [gradientColorStopPositions]
|
|
4846
|
+
}],
|
|
4847
|
+
/**
|
|
4848
|
+
* Gradient Color Stops To Position
|
|
4849
|
+
* @see https://tailwindcss.com/docs/gradient-color-stops
|
|
4850
|
+
*/
|
|
4851
|
+
"gradient-to-pos": [{
|
|
4852
|
+
to: [gradientColorStopPositions]
|
|
4853
|
+
}],
|
|
4854
|
+
/**
|
|
4855
|
+
* Gradient Color Stops From
|
|
4856
|
+
* @see https://tailwindcss.com/docs/gradient-color-stops
|
|
4857
|
+
*/
|
|
4858
|
+
"gradient-from": [{
|
|
4859
|
+
from: [gradientColorStops]
|
|
4860
|
+
}],
|
|
4861
|
+
/**
|
|
4862
|
+
* Gradient Color Stops Via
|
|
4863
|
+
* @see https://tailwindcss.com/docs/gradient-color-stops
|
|
4864
|
+
*/
|
|
4865
|
+
"gradient-via": [{
|
|
4866
|
+
via: [gradientColorStops]
|
|
4867
|
+
}],
|
|
4868
|
+
/**
|
|
4869
|
+
* Gradient Color Stops To
|
|
4870
|
+
* @see https://tailwindcss.com/docs/gradient-color-stops
|
|
4871
|
+
*/
|
|
4872
|
+
"gradient-to": [{
|
|
4873
|
+
to: [gradientColorStops]
|
|
4874
|
+
}],
|
|
4875
|
+
// Borders
|
|
4876
|
+
/**
|
|
4877
|
+
* Border Radius
|
|
4878
|
+
* @see https://tailwindcss.com/docs/border-radius
|
|
4879
|
+
*/
|
|
4880
|
+
rounded: [{
|
|
4881
|
+
rounded: [borderRadius]
|
|
4882
|
+
}],
|
|
4883
|
+
/**
|
|
4884
|
+
* Border Radius Start
|
|
4885
|
+
* @see https://tailwindcss.com/docs/border-radius
|
|
4886
|
+
*/
|
|
4887
|
+
"rounded-s": [{
|
|
4888
|
+
"rounded-s": [borderRadius]
|
|
4889
|
+
}],
|
|
4890
|
+
/**
|
|
4891
|
+
* Border Radius End
|
|
4892
|
+
* @see https://tailwindcss.com/docs/border-radius
|
|
4893
|
+
*/
|
|
4894
|
+
"rounded-e": [{
|
|
4895
|
+
"rounded-e": [borderRadius]
|
|
4896
|
+
}],
|
|
4897
|
+
/**
|
|
4898
|
+
* Border Radius Top
|
|
4899
|
+
* @see https://tailwindcss.com/docs/border-radius
|
|
4900
|
+
*/
|
|
4901
|
+
"rounded-t": [{
|
|
4902
|
+
"rounded-t": [borderRadius]
|
|
4903
|
+
}],
|
|
4904
|
+
/**
|
|
4905
|
+
* Border Radius Right
|
|
4906
|
+
* @see https://tailwindcss.com/docs/border-radius
|
|
4907
|
+
*/
|
|
4908
|
+
"rounded-r": [{
|
|
4909
|
+
"rounded-r": [borderRadius]
|
|
4910
|
+
}],
|
|
4911
|
+
/**
|
|
4912
|
+
* Border Radius Bottom
|
|
4913
|
+
* @see https://tailwindcss.com/docs/border-radius
|
|
4914
|
+
*/
|
|
4915
|
+
"rounded-b": [{
|
|
4916
|
+
"rounded-b": [borderRadius]
|
|
4917
|
+
}],
|
|
4918
|
+
/**
|
|
4919
|
+
* Border Radius Left
|
|
4920
|
+
* @see https://tailwindcss.com/docs/border-radius
|
|
4921
|
+
*/
|
|
4922
|
+
"rounded-l": [{
|
|
4923
|
+
"rounded-l": [borderRadius]
|
|
4924
|
+
}],
|
|
4925
|
+
/**
|
|
4926
|
+
* Border Radius Start Start
|
|
4927
|
+
* @see https://tailwindcss.com/docs/border-radius
|
|
4928
|
+
*/
|
|
4929
|
+
"rounded-ss": [{
|
|
4930
|
+
"rounded-ss": [borderRadius]
|
|
4931
|
+
}],
|
|
4932
|
+
/**
|
|
4933
|
+
* Border Radius Start End
|
|
4934
|
+
* @see https://tailwindcss.com/docs/border-radius
|
|
4935
|
+
*/
|
|
4936
|
+
"rounded-se": [{
|
|
4937
|
+
"rounded-se": [borderRadius]
|
|
4938
|
+
}],
|
|
4939
|
+
/**
|
|
4940
|
+
* Border Radius End End
|
|
4941
|
+
* @see https://tailwindcss.com/docs/border-radius
|
|
4942
|
+
*/
|
|
4943
|
+
"rounded-ee": [{
|
|
4944
|
+
"rounded-ee": [borderRadius]
|
|
4945
|
+
}],
|
|
4946
|
+
/**
|
|
4947
|
+
* Border Radius End Start
|
|
4948
|
+
* @see https://tailwindcss.com/docs/border-radius
|
|
4949
|
+
*/
|
|
4950
|
+
"rounded-es": [{
|
|
4951
|
+
"rounded-es": [borderRadius]
|
|
4952
|
+
}],
|
|
4953
|
+
/**
|
|
4954
|
+
* Border Radius Top Left
|
|
4955
|
+
* @see https://tailwindcss.com/docs/border-radius
|
|
4956
|
+
*/
|
|
4957
|
+
"rounded-tl": [{
|
|
4958
|
+
"rounded-tl": [borderRadius]
|
|
4959
|
+
}],
|
|
4960
|
+
/**
|
|
4961
|
+
* Border Radius Top Right
|
|
4962
|
+
* @see https://tailwindcss.com/docs/border-radius
|
|
4963
|
+
*/
|
|
4964
|
+
"rounded-tr": [{
|
|
4965
|
+
"rounded-tr": [borderRadius]
|
|
4966
|
+
}],
|
|
4967
|
+
/**
|
|
4968
|
+
* Border Radius Bottom Right
|
|
4969
|
+
* @see https://tailwindcss.com/docs/border-radius
|
|
4970
|
+
*/
|
|
4971
|
+
"rounded-br": [{
|
|
4972
|
+
"rounded-br": [borderRadius]
|
|
4973
|
+
}],
|
|
4974
|
+
/**
|
|
4975
|
+
* Border Radius Bottom Left
|
|
4976
|
+
* @see https://tailwindcss.com/docs/border-radius
|
|
4977
|
+
*/
|
|
4978
|
+
"rounded-bl": [{
|
|
4979
|
+
"rounded-bl": [borderRadius]
|
|
4980
|
+
}],
|
|
4981
|
+
/**
|
|
4982
|
+
* Border Width
|
|
4983
|
+
* @see https://tailwindcss.com/docs/border-width
|
|
4984
|
+
*/
|
|
4985
|
+
"border-w": [{
|
|
4986
|
+
border: [borderWidth]
|
|
4987
|
+
}],
|
|
4988
|
+
/**
|
|
4989
|
+
* Border Width X
|
|
4990
|
+
* @see https://tailwindcss.com/docs/border-width
|
|
4991
|
+
*/
|
|
4992
|
+
"border-w-x": [{
|
|
4993
|
+
"border-x": [borderWidth]
|
|
4994
|
+
}],
|
|
4995
|
+
/**
|
|
4996
|
+
* Border Width Y
|
|
4997
|
+
* @see https://tailwindcss.com/docs/border-width
|
|
4998
|
+
*/
|
|
4999
|
+
"border-w-y": [{
|
|
5000
|
+
"border-y": [borderWidth]
|
|
5001
|
+
}],
|
|
5002
|
+
/**
|
|
5003
|
+
* Border Width Start
|
|
5004
|
+
* @see https://tailwindcss.com/docs/border-width
|
|
5005
|
+
*/
|
|
5006
|
+
"border-w-s": [{
|
|
5007
|
+
"border-s": [borderWidth]
|
|
5008
|
+
}],
|
|
5009
|
+
/**
|
|
5010
|
+
* Border Width End
|
|
5011
|
+
* @see https://tailwindcss.com/docs/border-width
|
|
5012
|
+
*/
|
|
5013
|
+
"border-w-e": [{
|
|
5014
|
+
"border-e": [borderWidth]
|
|
5015
|
+
}],
|
|
5016
|
+
/**
|
|
5017
|
+
* Border Width Top
|
|
5018
|
+
* @see https://tailwindcss.com/docs/border-width
|
|
5019
|
+
*/
|
|
5020
|
+
"border-w-t": [{
|
|
5021
|
+
"border-t": [borderWidth]
|
|
5022
|
+
}],
|
|
5023
|
+
/**
|
|
5024
|
+
* Border Width Right
|
|
5025
|
+
* @see https://tailwindcss.com/docs/border-width
|
|
5026
|
+
*/
|
|
5027
|
+
"border-w-r": [{
|
|
5028
|
+
"border-r": [borderWidth]
|
|
5029
|
+
}],
|
|
5030
|
+
/**
|
|
5031
|
+
* Border Width Bottom
|
|
5032
|
+
* @see https://tailwindcss.com/docs/border-width
|
|
5033
|
+
*/
|
|
5034
|
+
"border-w-b": [{
|
|
5035
|
+
"border-b": [borderWidth]
|
|
5036
|
+
}],
|
|
5037
|
+
/**
|
|
5038
|
+
* Border Width Left
|
|
5039
|
+
* @see https://tailwindcss.com/docs/border-width
|
|
5040
|
+
*/
|
|
5041
|
+
"border-w-l": [{
|
|
5042
|
+
"border-l": [borderWidth]
|
|
5043
|
+
}],
|
|
5044
|
+
/**
|
|
5045
|
+
* Border Opacity
|
|
5046
|
+
* @see https://tailwindcss.com/docs/border-opacity
|
|
5047
|
+
*/
|
|
5048
|
+
"border-opacity": [{
|
|
5049
|
+
"border-opacity": [opacity]
|
|
5050
|
+
}],
|
|
5051
|
+
/**
|
|
5052
|
+
* Border Style
|
|
5053
|
+
* @see https://tailwindcss.com/docs/border-style
|
|
5054
|
+
*/
|
|
5055
|
+
"border-style": [{
|
|
5056
|
+
border: [...getLineStyles(), "hidden"]
|
|
5057
|
+
}],
|
|
5058
|
+
/**
|
|
5059
|
+
* Divide Width X
|
|
5060
|
+
* @see https://tailwindcss.com/docs/divide-width
|
|
5061
|
+
*/
|
|
5062
|
+
"divide-x": [{
|
|
5063
|
+
"divide-x": [borderWidth]
|
|
5064
|
+
}],
|
|
5065
|
+
/**
|
|
5066
|
+
* Divide Width X Reverse
|
|
5067
|
+
* @see https://tailwindcss.com/docs/divide-width
|
|
5068
|
+
*/
|
|
5069
|
+
"divide-x-reverse": ["divide-x-reverse"],
|
|
5070
|
+
/**
|
|
5071
|
+
* Divide Width Y
|
|
5072
|
+
* @see https://tailwindcss.com/docs/divide-width
|
|
5073
|
+
*/
|
|
5074
|
+
"divide-y": [{
|
|
5075
|
+
"divide-y": [borderWidth]
|
|
5076
|
+
}],
|
|
5077
|
+
/**
|
|
5078
|
+
* Divide Width Y Reverse
|
|
5079
|
+
* @see https://tailwindcss.com/docs/divide-width
|
|
5080
|
+
*/
|
|
5081
|
+
"divide-y-reverse": ["divide-y-reverse"],
|
|
5082
|
+
/**
|
|
5083
|
+
* Divide Opacity
|
|
5084
|
+
* @see https://tailwindcss.com/docs/divide-opacity
|
|
5085
|
+
*/
|
|
5086
|
+
"divide-opacity": [{
|
|
5087
|
+
"divide-opacity": [opacity]
|
|
5088
|
+
}],
|
|
5089
|
+
/**
|
|
5090
|
+
* Divide Style
|
|
5091
|
+
* @see https://tailwindcss.com/docs/divide-style
|
|
5092
|
+
*/
|
|
5093
|
+
"divide-style": [{
|
|
5094
|
+
divide: getLineStyles()
|
|
5095
|
+
}],
|
|
5096
|
+
/**
|
|
5097
|
+
* Border Color
|
|
5098
|
+
* @see https://tailwindcss.com/docs/border-color
|
|
5099
|
+
*/
|
|
5100
|
+
"border-color": [{
|
|
5101
|
+
border: [borderColor]
|
|
5102
|
+
}],
|
|
5103
|
+
/**
|
|
5104
|
+
* Border Color X
|
|
5105
|
+
* @see https://tailwindcss.com/docs/border-color
|
|
5106
|
+
*/
|
|
5107
|
+
"border-color-x": [{
|
|
5108
|
+
"border-x": [borderColor]
|
|
5109
|
+
}],
|
|
5110
|
+
/**
|
|
5111
|
+
* Border Color Y
|
|
5112
|
+
* @see https://tailwindcss.com/docs/border-color
|
|
5113
|
+
*/
|
|
5114
|
+
"border-color-y": [{
|
|
5115
|
+
"border-y": [borderColor]
|
|
5116
|
+
}],
|
|
5117
|
+
/**
|
|
5118
|
+
* Border Color S
|
|
5119
|
+
* @see https://tailwindcss.com/docs/border-color
|
|
5120
|
+
*/
|
|
5121
|
+
"border-color-s": [{
|
|
5122
|
+
"border-s": [borderColor]
|
|
5123
|
+
}],
|
|
5124
|
+
/**
|
|
5125
|
+
* Border Color E
|
|
5126
|
+
* @see https://tailwindcss.com/docs/border-color
|
|
5127
|
+
*/
|
|
5128
|
+
"border-color-e": [{
|
|
5129
|
+
"border-e": [borderColor]
|
|
5130
|
+
}],
|
|
5131
|
+
/**
|
|
5132
|
+
* Border Color Top
|
|
5133
|
+
* @see https://tailwindcss.com/docs/border-color
|
|
5134
|
+
*/
|
|
5135
|
+
"border-color-t": [{
|
|
5136
|
+
"border-t": [borderColor]
|
|
5137
|
+
}],
|
|
5138
|
+
/**
|
|
5139
|
+
* Border Color Right
|
|
5140
|
+
* @see https://tailwindcss.com/docs/border-color
|
|
5141
|
+
*/
|
|
5142
|
+
"border-color-r": [{
|
|
5143
|
+
"border-r": [borderColor]
|
|
5144
|
+
}],
|
|
5145
|
+
/**
|
|
5146
|
+
* Border Color Bottom
|
|
5147
|
+
* @see https://tailwindcss.com/docs/border-color
|
|
5148
|
+
*/
|
|
5149
|
+
"border-color-b": [{
|
|
5150
|
+
"border-b": [borderColor]
|
|
5151
|
+
}],
|
|
5152
|
+
/**
|
|
5153
|
+
* Border Color Left
|
|
5154
|
+
* @see https://tailwindcss.com/docs/border-color
|
|
5155
|
+
*/
|
|
5156
|
+
"border-color-l": [{
|
|
5157
|
+
"border-l": [borderColor]
|
|
5158
|
+
}],
|
|
5159
|
+
/**
|
|
5160
|
+
* Divide Color
|
|
5161
|
+
* @see https://tailwindcss.com/docs/divide-color
|
|
5162
|
+
*/
|
|
5163
|
+
"divide-color": [{
|
|
5164
|
+
divide: [borderColor]
|
|
5165
|
+
}],
|
|
5166
|
+
/**
|
|
5167
|
+
* Outline Style
|
|
5168
|
+
* @see https://tailwindcss.com/docs/outline-style
|
|
5169
|
+
*/
|
|
5170
|
+
"outline-style": [{
|
|
5171
|
+
outline: ["", ...getLineStyles()]
|
|
5172
|
+
}],
|
|
5173
|
+
/**
|
|
5174
|
+
* Outline Offset
|
|
5175
|
+
* @see https://tailwindcss.com/docs/outline-offset
|
|
5176
|
+
*/
|
|
5177
|
+
"outline-offset": [{
|
|
5178
|
+
"outline-offset": [isLength, isArbitraryValue]
|
|
5179
|
+
}],
|
|
5180
|
+
/**
|
|
5181
|
+
* Outline Width
|
|
5182
|
+
* @see https://tailwindcss.com/docs/outline-width
|
|
5183
|
+
*/
|
|
5184
|
+
"outline-w": [{
|
|
5185
|
+
outline: [isLength, isArbitraryLength]
|
|
5186
|
+
}],
|
|
5187
|
+
/**
|
|
5188
|
+
* Outline Color
|
|
5189
|
+
* @see https://tailwindcss.com/docs/outline-color
|
|
5190
|
+
*/
|
|
5191
|
+
"outline-color": [{
|
|
5192
|
+
outline: [colors]
|
|
5193
|
+
}],
|
|
5194
|
+
/**
|
|
5195
|
+
* Ring Width
|
|
5196
|
+
* @see https://tailwindcss.com/docs/ring-width
|
|
5197
|
+
*/
|
|
5198
|
+
"ring-w": [{
|
|
5199
|
+
ring: getLengthWithEmptyAndArbitrary()
|
|
5200
|
+
}],
|
|
5201
|
+
/**
|
|
5202
|
+
* Ring Width Inset
|
|
5203
|
+
* @see https://tailwindcss.com/docs/ring-width
|
|
5204
|
+
*/
|
|
5205
|
+
"ring-w-inset": ["ring-inset"],
|
|
5206
|
+
/**
|
|
5207
|
+
* Ring Color
|
|
5208
|
+
* @see https://tailwindcss.com/docs/ring-color
|
|
5209
|
+
*/
|
|
5210
|
+
"ring-color": [{
|
|
5211
|
+
ring: [colors]
|
|
5212
|
+
}],
|
|
5213
|
+
/**
|
|
5214
|
+
* Ring Opacity
|
|
5215
|
+
* @see https://tailwindcss.com/docs/ring-opacity
|
|
5216
|
+
*/
|
|
5217
|
+
"ring-opacity": [{
|
|
5218
|
+
"ring-opacity": [opacity]
|
|
5219
|
+
}],
|
|
5220
|
+
/**
|
|
5221
|
+
* Ring Offset Width
|
|
5222
|
+
* @see https://tailwindcss.com/docs/ring-offset-width
|
|
5223
|
+
*/
|
|
5224
|
+
"ring-offset-w": [{
|
|
5225
|
+
"ring-offset": [isLength, isArbitraryLength]
|
|
5226
|
+
}],
|
|
5227
|
+
/**
|
|
5228
|
+
* Ring Offset Color
|
|
5229
|
+
* @see https://tailwindcss.com/docs/ring-offset-color
|
|
5230
|
+
*/
|
|
5231
|
+
"ring-offset-color": [{
|
|
5232
|
+
"ring-offset": [colors]
|
|
5233
|
+
}],
|
|
5234
|
+
// Effects
|
|
5235
|
+
/**
|
|
5236
|
+
* Box Shadow
|
|
5237
|
+
* @see https://tailwindcss.com/docs/box-shadow
|
|
5238
|
+
*/
|
|
5239
|
+
shadow: [{
|
|
5240
|
+
shadow: ["", "inner", "none", isTshirtSize, isArbitraryShadow]
|
|
5241
|
+
}],
|
|
5242
|
+
/**
|
|
5243
|
+
* Box Shadow Color
|
|
5244
|
+
* @see https://tailwindcss.com/docs/box-shadow-color
|
|
5245
|
+
*/
|
|
5246
|
+
"shadow-color": [{
|
|
5247
|
+
shadow: [isAny]
|
|
5248
|
+
}],
|
|
5249
|
+
/**
|
|
5250
|
+
* Opacity
|
|
5251
|
+
* @see https://tailwindcss.com/docs/opacity
|
|
5252
|
+
*/
|
|
5253
|
+
opacity: [{
|
|
5254
|
+
opacity: [opacity]
|
|
5255
|
+
}],
|
|
5256
|
+
/**
|
|
5257
|
+
* Mix Blend Mode
|
|
5258
|
+
* @see https://tailwindcss.com/docs/mix-blend-mode
|
|
5259
|
+
*/
|
|
5260
|
+
"mix-blend": [{
|
|
5261
|
+
"mix-blend": [...getBlendModes(), "plus-lighter", "plus-darker"]
|
|
5262
|
+
}],
|
|
5263
|
+
/**
|
|
5264
|
+
* Background Blend Mode
|
|
5265
|
+
* @see https://tailwindcss.com/docs/background-blend-mode
|
|
5266
|
+
*/
|
|
5267
|
+
"bg-blend": [{
|
|
5268
|
+
"bg-blend": getBlendModes()
|
|
5269
|
+
}],
|
|
5270
|
+
// Filters
|
|
5271
|
+
/**
|
|
5272
|
+
* Filter
|
|
5273
|
+
* @deprecated since Tailwind CSS v3.0.0
|
|
5274
|
+
* @see https://tailwindcss.com/docs/filter
|
|
5275
|
+
*/
|
|
5276
|
+
filter: [{
|
|
5277
|
+
filter: ["", "none"]
|
|
5278
|
+
}],
|
|
5279
|
+
/**
|
|
5280
|
+
* Blur
|
|
5281
|
+
* @see https://tailwindcss.com/docs/blur
|
|
5282
|
+
*/
|
|
5283
|
+
blur: [{
|
|
5284
|
+
blur: [blur]
|
|
5285
|
+
}],
|
|
5286
|
+
/**
|
|
5287
|
+
* Brightness
|
|
5288
|
+
* @see https://tailwindcss.com/docs/brightness
|
|
5289
|
+
*/
|
|
5290
|
+
brightness: [{
|
|
5291
|
+
brightness: [brightness]
|
|
5292
|
+
}],
|
|
5293
|
+
/**
|
|
5294
|
+
* Contrast
|
|
5295
|
+
* @see https://tailwindcss.com/docs/contrast
|
|
5296
|
+
*/
|
|
5297
|
+
contrast: [{
|
|
5298
|
+
contrast: [contrast]
|
|
5299
|
+
}],
|
|
5300
|
+
/**
|
|
5301
|
+
* Drop Shadow
|
|
5302
|
+
* @see https://tailwindcss.com/docs/drop-shadow
|
|
5303
|
+
*/
|
|
5304
|
+
"drop-shadow": [{
|
|
5305
|
+
"drop-shadow": ["", "none", isTshirtSize, isArbitraryValue]
|
|
5306
|
+
}],
|
|
5307
|
+
/**
|
|
5308
|
+
* Grayscale
|
|
5309
|
+
* @see https://tailwindcss.com/docs/grayscale
|
|
5310
|
+
*/
|
|
5311
|
+
grayscale: [{
|
|
5312
|
+
grayscale: [grayscale]
|
|
5313
|
+
}],
|
|
5314
|
+
/**
|
|
5315
|
+
* Hue Rotate
|
|
5316
|
+
* @see https://tailwindcss.com/docs/hue-rotate
|
|
5317
|
+
*/
|
|
5318
|
+
"hue-rotate": [{
|
|
5319
|
+
"hue-rotate": [hueRotate]
|
|
5320
|
+
}],
|
|
5321
|
+
/**
|
|
5322
|
+
* Invert
|
|
5323
|
+
* @see https://tailwindcss.com/docs/invert
|
|
5324
|
+
*/
|
|
5325
|
+
invert: [{
|
|
5326
|
+
invert: [invert]
|
|
5327
|
+
}],
|
|
5328
|
+
/**
|
|
5329
|
+
* Saturate
|
|
5330
|
+
* @see https://tailwindcss.com/docs/saturate
|
|
5331
|
+
*/
|
|
5332
|
+
saturate: [{
|
|
5333
|
+
saturate: [saturate]
|
|
5334
|
+
}],
|
|
5335
|
+
/**
|
|
5336
|
+
* Sepia
|
|
5337
|
+
* @see https://tailwindcss.com/docs/sepia
|
|
5338
|
+
*/
|
|
5339
|
+
sepia: [{
|
|
5340
|
+
sepia: [sepia]
|
|
5341
|
+
}],
|
|
5342
|
+
/**
|
|
5343
|
+
* Backdrop Filter
|
|
5344
|
+
* @deprecated since Tailwind CSS v3.0.0
|
|
5345
|
+
* @see https://tailwindcss.com/docs/backdrop-filter
|
|
5346
|
+
*/
|
|
5347
|
+
"backdrop-filter": [{
|
|
5348
|
+
"backdrop-filter": ["", "none"]
|
|
5349
|
+
}],
|
|
5350
|
+
/**
|
|
5351
|
+
* Backdrop Blur
|
|
5352
|
+
* @see https://tailwindcss.com/docs/backdrop-blur
|
|
5353
|
+
*/
|
|
5354
|
+
"backdrop-blur": [{
|
|
5355
|
+
"backdrop-blur": [blur]
|
|
5356
|
+
}],
|
|
5357
|
+
/**
|
|
5358
|
+
* Backdrop Brightness
|
|
5359
|
+
* @see https://tailwindcss.com/docs/backdrop-brightness
|
|
5360
|
+
*/
|
|
5361
|
+
"backdrop-brightness": [{
|
|
5362
|
+
"backdrop-brightness": [brightness]
|
|
5363
|
+
}],
|
|
5364
|
+
/**
|
|
5365
|
+
* Backdrop Contrast
|
|
5366
|
+
* @see https://tailwindcss.com/docs/backdrop-contrast
|
|
5367
|
+
*/
|
|
5368
|
+
"backdrop-contrast": [{
|
|
5369
|
+
"backdrop-contrast": [contrast]
|
|
5370
|
+
}],
|
|
5371
|
+
/**
|
|
5372
|
+
* Backdrop Grayscale
|
|
5373
|
+
* @see https://tailwindcss.com/docs/backdrop-grayscale
|
|
5374
|
+
*/
|
|
5375
|
+
"backdrop-grayscale": [{
|
|
5376
|
+
"backdrop-grayscale": [grayscale]
|
|
5377
|
+
}],
|
|
5378
|
+
/**
|
|
5379
|
+
* Backdrop Hue Rotate
|
|
5380
|
+
* @see https://tailwindcss.com/docs/backdrop-hue-rotate
|
|
5381
|
+
*/
|
|
5382
|
+
"backdrop-hue-rotate": [{
|
|
5383
|
+
"backdrop-hue-rotate": [hueRotate]
|
|
5384
|
+
}],
|
|
5385
|
+
/**
|
|
5386
|
+
* Backdrop Invert
|
|
5387
|
+
* @see https://tailwindcss.com/docs/backdrop-invert
|
|
5388
|
+
*/
|
|
5389
|
+
"backdrop-invert": [{
|
|
5390
|
+
"backdrop-invert": [invert]
|
|
5391
|
+
}],
|
|
5392
|
+
/**
|
|
5393
|
+
* Backdrop Opacity
|
|
5394
|
+
* @see https://tailwindcss.com/docs/backdrop-opacity
|
|
5395
|
+
*/
|
|
5396
|
+
"backdrop-opacity": [{
|
|
5397
|
+
"backdrop-opacity": [opacity]
|
|
5398
|
+
}],
|
|
5399
|
+
/**
|
|
5400
|
+
* Backdrop Saturate
|
|
5401
|
+
* @see https://tailwindcss.com/docs/backdrop-saturate
|
|
5402
|
+
*/
|
|
5403
|
+
"backdrop-saturate": [{
|
|
5404
|
+
"backdrop-saturate": [saturate]
|
|
5405
|
+
}],
|
|
5406
|
+
/**
|
|
5407
|
+
* Backdrop Sepia
|
|
5408
|
+
* @see https://tailwindcss.com/docs/backdrop-sepia
|
|
5409
|
+
*/
|
|
5410
|
+
"backdrop-sepia": [{
|
|
5411
|
+
"backdrop-sepia": [sepia]
|
|
5412
|
+
}],
|
|
5413
|
+
// Tables
|
|
5414
|
+
/**
|
|
5415
|
+
* Border Collapse
|
|
5416
|
+
* @see https://tailwindcss.com/docs/border-collapse
|
|
5417
|
+
*/
|
|
5418
|
+
"border-collapse": [{
|
|
5419
|
+
border: ["collapse", "separate"]
|
|
5420
|
+
}],
|
|
5421
|
+
/**
|
|
5422
|
+
* Border Spacing
|
|
5423
|
+
* @see https://tailwindcss.com/docs/border-spacing
|
|
5424
|
+
*/
|
|
5425
|
+
"border-spacing": [{
|
|
5426
|
+
"border-spacing": [borderSpacing]
|
|
5427
|
+
}],
|
|
5428
|
+
/**
|
|
5429
|
+
* Border Spacing X
|
|
5430
|
+
* @see https://tailwindcss.com/docs/border-spacing
|
|
5431
|
+
*/
|
|
5432
|
+
"border-spacing-x": [{
|
|
5433
|
+
"border-spacing-x": [borderSpacing]
|
|
5434
|
+
}],
|
|
5435
|
+
/**
|
|
5436
|
+
* Border Spacing Y
|
|
5437
|
+
* @see https://tailwindcss.com/docs/border-spacing
|
|
5438
|
+
*/
|
|
5439
|
+
"border-spacing-y": [{
|
|
5440
|
+
"border-spacing-y": [borderSpacing]
|
|
5441
|
+
}],
|
|
5442
|
+
/**
|
|
5443
|
+
* Table Layout
|
|
5444
|
+
* @see https://tailwindcss.com/docs/table-layout
|
|
5445
|
+
*/
|
|
5446
|
+
"table-layout": [{
|
|
5447
|
+
table: ["auto", "fixed"]
|
|
5448
|
+
}],
|
|
5449
|
+
/**
|
|
5450
|
+
* Caption Side
|
|
5451
|
+
* @see https://tailwindcss.com/docs/caption-side
|
|
5452
|
+
*/
|
|
5453
|
+
caption: [{
|
|
5454
|
+
caption: ["top", "bottom"]
|
|
5455
|
+
}],
|
|
5456
|
+
// Transitions and Animation
|
|
5457
|
+
/**
|
|
5458
|
+
* Tranisition Property
|
|
5459
|
+
* @see https://tailwindcss.com/docs/transition-property
|
|
5460
|
+
*/
|
|
5461
|
+
transition: [{
|
|
5462
|
+
transition: ["none", "all", "", "colors", "opacity", "shadow", "transform", isArbitraryValue]
|
|
5463
|
+
}],
|
|
5464
|
+
/**
|
|
5465
|
+
* Transition Duration
|
|
5466
|
+
* @see https://tailwindcss.com/docs/transition-duration
|
|
5467
|
+
*/
|
|
5468
|
+
duration: [{
|
|
5469
|
+
duration: getNumberAndArbitrary()
|
|
5470
|
+
}],
|
|
5471
|
+
/**
|
|
5472
|
+
* Transition Timing Function
|
|
5473
|
+
* @see https://tailwindcss.com/docs/transition-timing-function
|
|
5474
|
+
*/
|
|
5475
|
+
ease: [{
|
|
5476
|
+
ease: ["linear", "in", "out", "in-out", isArbitraryValue]
|
|
5477
|
+
}],
|
|
5478
|
+
/**
|
|
5479
|
+
* Transition Delay
|
|
5480
|
+
* @see https://tailwindcss.com/docs/transition-delay
|
|
5481
|
+
*/
|
|
5482
|
+
delay: [{
|
|
5483
|
+
delay: getNumberAndArbitrary()
|
|
5484
|
+
}],
|
|
5485
|
+
/**
|
|
5486
|
+
* Animation
|
|
5487
|
+
* @see https://tailwindcss.com/docs/animation
|
|
5488
|
+
*/
|
|
5489
|
+
animate: [{
|
|
5490
|
+
animate: ["none", "spin", "ping", "pulse", "bounce", isArbitraryValue]
|
|
5491
|
+
}],
|
|
5492
|
+
// Transforms
|
|
5493
|
+
/**
|
|
5494
|
+
* Transform
|
|
5495
|
+
* @see https://tailwindcss.com/docs/transform
|
|
5496
|
+
*/
|
|
5497
|
+
transform: [{
|
|
5498
|
+
transform: ["", "gpu", "none"]
|
|
5499
|
+
}],
|
|
5500
|
+
/**
|
|
5501
|
+
* Scale
|
|
5502
|
+
* @see https://tailwindcss.com/docs/scale
|
|
5503
|
+
*/
|
|
5504
|
+
scale: [{
|
|
5505
|
+
scale: [scale]
|
|
5506
|
+
}],
|
|
5507
|
+
/**
|
|
5508
|
+
* Scale X
|
|
5509
|
+
* @see https://tailwindcss.com/docs/scale
|
|
5510
|
+
*/
|
|
5511
|
+
"scale-x": [{
|
|
5512
|
+
"scale-x": [scale]
|
|
5513
|
+
}],
|
|
5514
|
+
/**
|
|
5515
|
+
* Scale Y
|
|
5516
|
+
* @see https://tailwindcss.com/docs/scale
|
|
5517
|
+
*/
|
|
5518
|
+
"scale-y": [{
|
|
5519
|
+
"scale-y": [scale]
|
|
5520
|
+
}],
|
|
5521
|
+
/**
|
|
5522
|
+
* Rotate
|
|
5523
|
+
* @see https://tailwindcss.com/docs/rotate
|
|
5524
|
+
*/
|
|
5525
|
+
rotate: [{
|
|
5526
|
+
rotate: [isInteger, isArbitraryValue]
|
|
5527
|
+
}],
|
|
5528
|
+
/**
|
|
5529
|
+
* Translate X
|
|
5530
|
+
* @see https://tailwindcss.com/docs/translate
|
|
5531
|
+
*/
|
|
5532
|
+
"translate-x": [{
|
|
5533
|
+
"translate-x": [translate]
|
|
5534
|
+
}],
|
|
5535
|
+
/**
|
|
5536
|
+
* Translate Y
|
|
5537
|
+
* @see https://tailwindcss.com/docs/translate
|
|
5538
|
+
*/
|
|
5539
|
+
"translate-y": [{
|
|
5540
|
+
"translate-y": [translate]
|
|
5541
|
+
}],
|
|
5542
|
+
/**
|
|
5543
|
+
* Skew X
|
|
5544
|
+
* @see https://tailwindcss.com/docs/skew
|
|
5545
|
+
*/
|
|
5546
|
+
"skew-x": [{
|
|
5547
|
+
"skew-x": [skew]
|
|
5548
|
+
}],
|
|
5549
|
+
/**
|
|
5550
|
+
* Skew Y
|
|
5551
|
+
* @see https://tailwindcss.com/docs/skew
|
|
5552
|
+
*/
|
|
5553
|
+
"skew-y": [{
|
|
5554
|
+
"skew-y": [skew]
|
|
5555
|
+
}],
|
|
5556
|
+
/**
|
|
5557
|
+
* Transform Origin
|
|
5558
|
+
* @see https://tailwindcss.com/docs/transform-origin
|
|
5559
|
+
*/
|
|
5560
|
+
"transform-origin": [{
|
|
5561
|
+
origin: ["center", "top", "top-right", "right", "bottom-right", "bottom", "bottom-left", "left", "top-left", isArbitraryValue]
|
|
5562
|
+
}],
|
|
5563
|
+
// Interactivity
|
|
5564
|
+
/**
|
|
5565
|
+
* Accent Color
|
|
5566
|
+
* @see https://tailwindcss.com/docs/accent-color
|
|
5567
|
+
*/
|
|
5568
|
+
accent: [{
|
|
5569
|
+
accent: ["auto", colors]
|
|
5570
|
+
}],
|
|
5571
|
+
/**
|
|
5572
|
+
* Appearance
|
|
5573
|
+
* @see https://tailwindcss.com/docs/appearance
|
|
5574
|
+
*/
|
|
5575
|
+
appearance: [{
|
|
5576
|
+
appearance: ["none", "auto"]
|
|
5577
|
+
}],
|
|
5578
|
+
/**
|
|
5579
|
+
* Cursor
|
|
5580
|
+
* @see https://tailwindcss.com/docs/cursor
|
|
5581
|
+
*/
|
|
5582
|
+
cursor: [{
|
|
5583
|
+
cursor: ["auto", "default", "pointer", "wait", "text", "move", "help", "not-allowed", "none", "context-menu", "progress", "cell", "crosshair", "vertical-text", "alias", "copy", "no-drop", "grab", "grabbing", "all-scroll", "col-resize", "row-resize", "n-resize", "e-resize", "s-resize", "w-resize", "ne-resize", "nw-resize", "se-resize", "sw-resize", "ew-resize", "ns-resize", "nesw-resize", "nwse-resize", "zoom-in", "zoom-out", isArbitraryValue]
|
|
5584
|
+
}],
|
|
5585
|
+
/**
|
|
5586
|
+
* Caret Color
|
|
5587
|
+
* @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities
|
|
5588
|
+
*/
|
|
5589
|
+
"caret-color": [{
|
|
5590
|
+
caret: [colors]
|
|
5591
|
+
}],
|
|
5592
|
+
/**
|
|
5593
|
+
* Pointer Events
|
|
5594
|
+
* @see https://tailwindcss.com/docs/pointer-events
|
|
5595
|
+
*/
|
|
5596
|
+
"pointer-events": [{
|
|
5597
|
+
"pointer-events": ["none", "auto"]
|
|
5598
|
+
}],
|
|
5599
|
+
/**
|
|
5600
|
+
* Resize
|
|
5601
|
+
* @see https://tailwindcss.com/docs/resize
|
|
5602
|
+
*/
|
|
5603
|
+
resize: [{
|
|
5604
|
+
resize: ["none", "y", "x", ""]
|
|
5605
|
+
}],
|
|
5606
|
+
/**
|
|
5607
|
+
* Scroll Behavior
|
|
5608
|
+
* @see https://tailwindcss.com/docs/scroll-behavior
|
|
5609
|
+
*/
|
|
5610
|
+
"scroll-behavior": [{
|
|
5611
|
+
scroll: ["auto", "smooth"]
|
|
5612
|
+
}],
|
|
5613
|
+
/**
|
|
5614
|
+
* Scroll Margin
|
|
5615
|
+
* @see https://tailwindcss.com/docs/scroll-margin
|
|
5616
|
+
*/
|
|
5617
|
+
"scroll-m": [{
|
|
5618
|
+
"scroll-m": getSpacingWithArbitrary()
|
|
5619
|
+
}],
|
|
5620
|
+
/**
|
|
5621
|
+
* Scroll Margin X
|
|
5622
|
+
* @see https://tailwindcss.com/docs/scroll-margin
|
|
5623
|
+
*/
|
|
5624
|
+
"scroll-mx": [{
|
|
5625
|
+
"scroll-mx": getSpacingWithArbitrary()
|
|
5626
|
+
}],
|
|
5627
|
+
/**
|
|
5628
|
+
* Scroll Margin Y
|
|
5629
|
+
* @see https://tailwindcss.com/docs/scroll-margin
|
|
5630
|
+
*/
|
|
5631
|
+
"scroll-my": [{
|
|
5632
|
+
"scroll-my": getSpacingWithArbitrary()
|
|
5633
|
+
}],
|
|
5634
|
+
/**
|
|
5635
|
+
* Scroll Margin Start
|
|
5636
|
+
* @see https://tailwindcss.com/docs/scroll-margin
|
|
5637
|
+
*/
|
|
5638
|
+
"scroll-ms": [{
|
|
5639
|
+
"scroll-ms": getSpacingWithArbitrary()
|
|
5640
|
+
}],
|
|
5641
|
+
/**
|
|
5642
|
+
* Scroll Margin End
|
|
5643
|
+
* @see https://tailwindcss.com/docs/scroll-margin
|
|
5644
|
+
*/
|
|
5645
|
+
"scroll-me": [{
|
|
5646
|
+
"scroll-me": getSpacingWithArbitrary()
|
|
5647
|
+
}],
|
|
5648
|
+
/**
|
|
5649
|
+
* Scroll Margin Top
|
|
5650
|
+
* @see https://tailwindcss.com/docs/scroll-margin
|
|
5651
|
+
*/
|
|
5652
|
+
"scroll-mt": [{
|
|
5653
|
+
"scroll-mt": getSpacingWithArbitrary()
|
|
5654
|
+
}],
|
|
5655
|
+
/**
|
|
5656
|
+
* Scroll Margin Right
|
|
5657
|
+
* @see https://tailwindcss.com/docs/scroll-margin
|
|
5658
|
+
*/
|
|
5659
|
+
"scroll-mr": [{
|
|
5660
|
+
"scroll-mr": getSpacingWithArbitrary()
|
|
5661
|
+
}],
|
|
5662
|
+
/**
|
|
5663
|
+
* Scroll Margin Bottom
|
|
5664
|
+
* @see https://tailwindcss.com/docs/scroll-margin
|
|
5665
|
+
*/
|
|
5666
|
+
"scroll-mb": [{
|
|
5667
|
+
"scroll-mb": getSpacingWithArbitrary()
|
|
5668
|
+
}],
|
|
5669
|
+
/**
|
|
5670
|
+
* Scroll Margin Left
|
|
5671
|
+
* @see https://tailwindcss.com/docs/scroll-margin
|
|
5672
|
+
*/
|
|
5673
|
+
"scroll-ml": [{
|
|
5674
|
+
"scroll-ml": getSpacingWithArbitrary()
|
|
5675
|
+
}],
|
|
5676
|
+
/**
|
|
5677
|
+
* Scroll Padding
|
|
5678
|
+
* @see https://tailwindcss.com/docs/scroll-padding
|
|
5679
|
+
*/
|
|
5680
|
+
"scroll-p": [{
|
|
5681
|
+
"scroll-p": getSpacingWithArbitrary()
|
|
5682
|
+
}],
|
|
5683
|
+
/**
|
|
5684
|
+
* Scroll Padding X
|
|
5685
|
+
* @see https://tailwindcss.com/docs/scroll-padding
|
|
5686
|
+
*/
|
|
5687
|
+
"scroll-px": [{
|
|
5688
|
+
"scroll-px": getSpacingWithArbitrary()
|
|
5689
|
+
}],
|
|
5690
|
+
/**
|
|
5691
|
+
* Scroll Padding Y
|
|
5692
|
+
* @see https://tailwindcss.com/docs/scroll-padding
|
|
5693
|
+
*/
|
|
5694
|
+
"scroll-py": [{
|
|
5695
|
+
"scroll-py": getSpacingWithArbitrary()
|
|
5696
|
+
}],
|
|
5697
|
+
/**
|
|
5698
|
+
* Scroll Padding Start
|
|
5699
|
+
* @see https://tailwindcss.com/docs/scroll-padding
|
|
5700
|
+
*/
|
|
5701
|
+
"scroll-ps": [{
|
|
5702
|
+
"scroll-ps": getSpacingWithArbitrary()
|
|
5703
|
+
}],
|
|
5704
|
+
/**
|
|
5705
|
+
* Scroll Padding End
|
|
5706
|
+
* @see https://tailwindcss.com/docs/scroll-padding
|
|
5707
|
+
*/
|
|
5708
|
+
"scroll-pe": [{
|
|
5709
|
+
"scroll-pe": getSpacingWithArbitrary()
|
|
5710
|
+
}],
|
|
5711
|
+
/**
|
|
5712
|
+
* Scroll Padding Top
|
|
5713
|
+
* @see https://tailwindcss.com/docs/scroll-padding
|
|
5714
|
+
*/
|
|
5715
|
+
"scroll-pt": [{
|
|
5716
|
+
"scroll-pt": getSpacingWithArbitrary()
|
|
5717
|
+
}],
|
|
5718
|
+
/**
|
|
5719
|
+
* Scroll Padding Right
|
|
5720
|
+
* @see https://tailwindcss.com/docs/scroll-padding
|
|
5721
|
+
*/
|
|
5722
|
+
"scroll-pr": [{
|
|
5723
|
+
"scroll-pr": getSpacingWithArbitrary()
|
|
5724
|
+
}],
|
|
5725
|
+
/**
|
|
5726
|
+
* Scroll Padding Bottom
|
|
5727
|
+
* @see https://tailwindcss.com/docs/scroll-padding
|
|
5728
|
+
*/
|
|
5729
|
+
"scroll-pb": [{
|
|
5730
|
+
"scroll-pb": getSpacingWithArbitrary()
|
|
5731
|
+
}],
|
|
5732
|
+
/**
|
|
5733
|
+
* Scroll Padding Left
|
|
5734
|
+
* @see https://tailwindcss.com/docs/scroll-padding
|
|
5735
|
+
*/
|
|
5736
|
+
"scroll-pl": [{
|
|
5737
|
+
"scroll-pl": getSpacingWithArbitrary()
|
|
5738
|
+
}],
|
|
5739
|
+
/**
|
|
5740
|
+
* Scroll Snap Align
|
|
5741
|
+
* @see https://tailwindcss.com/docs/scroll-snap-align
|
|
5742
|
+
*/
|
|
5743
|
+
"snap-align": [{
|
|
5744
|
+
snap: ["start", "end", "center", "align-none"]
|
|
5745
|
+
}],
|
|
5746
|
+
/**
|
|
5747
|
+
* Scroll Snap Stop
|
|
5748
|
+
* @see https://tailwindcss.com/docs/scroll-snap-stop
|
|
5749
|
+
*/
|
|
5750
|
+
"snap-stop": [{
|
|
5751
|
+
snap: ["normal", "always"]
|
|
5752
|
+
}],
|
|
5753
|
+
/**
|
|
5754
|
+
* Scroll Snap Type
|
|
5755
|
+
* @see https://tailwindcss.com/docs/scroll-snap-type
|
|
5756
|
+
*/
|
|
5757
|
+
"snap-type": [{
|
|
5758
|
+
snap: ["none", "x", "y", "both"]
|
|
5759
|
+
}],
|
|
5760
|
+
/**
|
|
5761
|
+
* Scroll Snap Type Strictness
|
|
5762
|
+
* @see https://tailwindcss.com/docs/scroll-snap-type
|
|
5763
|
+
*/
|
|
5764
|
+
"snap-strictness": [{
|
|
5765
|
+
snap: ["mandatory", "proximity"]
|
|
5766
|
+
}],
|
|
5767
|
+
/**
|
|
5768
|
+
* Touch Action
|
|
5769
|
+
* @see https://tailwindcss.com/docs/touch-action
|
|
5770
|
+
*/
|
|
5771
|
+
touch: [{
|
|
5772
|
+
touch: ["auto", "none", "manipulation"]
|
|
5773
|
+
}],
|
|
5774
|
+
/**
|
|
5775
|
+
* Touch Action X
|
|
5776
|
+
* @see https://tailwindcss.com/docs/touch-action
|
|
5777
|
+
*/
|
|
5778
|
+
"touch-x": [{
|
|
5779
|
+
"touch-pan": ["x", "left", "right"]
|
|
5780
|
+
}],
|
|
5781
|
+
/**
|
|
5782
|
+
* Touch Action Y
|
|
5783
|
+
* @see https://tailwindcss.com/docs/touch-action
|
|
5784
|
+
*/
|
|
5785
|
+
"touch-y": [{
|
|
5786
|
+
"touch-pan": ["y", "up", "down"]
|
|
5787
|
+
}],
|
|
5788
|
+
/**
|
|
5789
|
+
* Touch Action Pinch Zoom
|
|
5790
|
+
* @see https://tailwindcss.com/docs/touch-action
|
|
5791
|
+
*/
|
|
5792
|
+
"touch-pz": ["touch-pinch-zoom"],
|
|
5793
|
+
/**
|
|
5794
|
+
* User Select
|
|
5795
|
+
* @see https://tailwindcss.com/docs/user-select
|
|
5796
|
+
*/
|
|
5797
|
+
select: [{
|
|
5798
|
+
select: ["none", "text", "all", "auto"]
|
|
5799
|
+
}],
|
|
5800
|
+
/**
|
|
5801
|
+
* Will Change
|
|
5802
|
+
* @see https://tailwindcss.com/docs/will-change
|
|
5803
|
+
*/
|
|
5804
|
+
"will-change": [{
|
|
5805
|
+
"will-change": ["auto", "scroll", "contents", "transform", isArbitraryValue]
|
|
5806
|
+
}],
|
|
5807
|
+
// SVG
|
|
5808
|
+
/**
|
|
5809
|
+
* Fill
|
|
5810
|
+
* @see https://tailwindcss.com/docs/fill
|
|
5811
|
+
*/
|
|
5812
|
+
fill: [{
|
|
5813
|
+
fill: [colors, "none"]
|
|
5814
|
+
}],
|
|
5815
|
+
/**
|
|
5816
|
+
* Stroke Width
|
|
5817
|
+
* @see https://tailwindcss.com/docs/stroke-width
|
|
5818
|
+
*/
|
|
5819
|
+
"stroke-w": [{
|
|
5820
|
+
stroke: [isLength, isArbitraryLength, isArbitraryNumber]
|
|
5821
|
+
}],
|
|
5822
|
+
/**
|
|
5823
|
+
* Stroke
|
|
5824
|
+
* @see https://tailwindcss.com/docs/stroke
|
|
5825
|
+
*/
|
|
5826
|
+
stroke: [{
|
|
5827
|
+
stroke: [colors, "none"]
|
|
5828
|
+
}],
|
|
5829
|
+
// Accessibility
|
|
5830
|
+
/**
|
|
5831
|
+
* Screen Readers
|
|
5832
|
+
* @see https://tailwindcss.com/docs/screen-readers
|
|
5833
|
+
*/
|
|
5834
|
+
sr: ["sr-only", "not-sr-only"],
|
|
5835
|
+
/**
|
|
5836
|
+
* Forced Color Adjust
|
|
5837
|
+
* @see https://tailwindcss.com/docs/forced-color-adjust
|
|
5838
|
+
*/
|
|
5839
|
+
"forced-color-adjust": [{
|
|
5840
|
+
"forced-color-adjust": ["auto", "none"]
|
|
5841
|
+
}]
|
|
5842
|
+
},
|
|
5843
|
+
conflictingClassGroups: {
|
|
5844
|
+
overflow: ["overflow-x", "overflow-y"],
|
|
5845
|
+
overscroll: ["overscroll-x", "overscroll-y"],
|
|
5846
|
+
inset: ["inset-x", "inset-y", "start", "end", "top", "right", "bottom", "left"],
|
|
5847
|
+
"inset-x": ["right", "left"],
|
|
5848
|
+
"inset-y": ["top", "bottom"],
|
|
5849
|
+
flex: ["basis", "grow", "shrink"],
|
|
5850
|
+
gap: ["gap-x", "gap-y"],
|
|
5851
|
+
p: ["px", "py", "ps", "pe", "pt", "pr", "pb", "pl"],
|
|
5852
|
+
px: ["pr", "pl"],
|
|
5853
|
+
py: ["pt", "pb"],
|
|
5854
|
+
m: ["mx", "my", "ms", "me", "mt", "mr", "mb", "ml"],
|
|
5855
|
+
mx: ["mr", "ml"],
|
|
5856
|
+
my: ["mt", "mb"],
|
|
5857
|
+
size: ["w", "h"],
|
|
5858
|
+
"font-size": ["leading"],
|
|
5859
|
+
"fvn-normal": ["fvn-ordinal", "fvn-slashed-zero", "fvn-figure", "fvn-spacing", "fvn-fraction"],
|
|
5860
|
+
"fvn-ordinal": ["fvn-normal"],
|
|
5861
|
+
"fvn-slashed-zero": ["fvn-normal"],
|
|
5862
|
+
"fvn-figure": ["fvn-normal"],
|
|
5863
|
+
"fvn-spacing": ["fvn-normal"],
|
|
5864
|
+
"fvn-fraction": ["fvn-normal"],
|
|
5865
|
+
"line-clamp": ["display", "overflow"],
|
|
5866
|
+
rounded: ["rounded-s", "rounded-e", "rounded-t", "rounded-r", "rounded-b", "rounded-l", "rounded-ss", "rounded-se", "rounded-ee", "rounded-es", "rounded-tl", "rounded-tr", "rounded-br", "rounded-bl"],
|
|
5867
|
+
"rounded-s": ["rounded-ss", "rounded-es"],
|
|
5868
|
+
"rounded-e": ["rounded-se", "rounded-ee"],
|
|
5869
|
+
"rounded-t": ["rounded-tl", "rounded-tr"],
|
|
5870
|
+
"rounded-r": ["rounded-tr", "rounded-br"],
|
|
5871
|
+
"rounded-b": ["rounded-br", "rounded-bl"],
|
|
5872
|
+
"rounded-l": ["rounded-tl", "rounded-bl"],
|
|
5873
|
+
"border-spacing": ["border-spacing-x", "border-spacing-y"],
|
|
5874
|
+
"border-w": ["border-w-s", "border-w-e", "border-w-t", "border-w-r", "border-w-b", "border-w-l"],
|
|
5875
|
+
"border-w-x": ["border-w-r", "border-w-l"],
|
|
5876
|
+
"border-w-y": ["border-w-t", "border-w-b"],
|
|
5877
|
+
"border-color": ["border-color-s", "border-color-e", "border-color-t", "border-color-r", "border-color-b", "border-color-l"],
|
|
5878
|
+
"border-color-x": ["border-color-r", "border-color-l"],
|
|
5879
|
+
"border-color-y": ["border-color-t", "border-color-b"],
|
|
5880
|
+
"scroll-m": ["scroll-mx", "scroll-my", "scroll-ms", "scroll-me", "scroll-mt", "scroll-mr", "scroll-mb", "scroll-ml"],
|
|
5881
|
+
"scroll-mx": ["scroll-mr", "scroll-ml"],
|
|
5882
|
+
"scroll-my": ["scroll-mt", "scroll-mb"],
|
|
5883
|
+
"scroll-p": ["scroll-px", "scroll-py", "scroll-ps", "scroll-pe", "scroll-pt", "scroll-pr", "scroll-pb", "scroll-pl"],
|
|
5884
|
+
"scroll-px": ["scroll-pr", "scroll-pl"],
|
|
5885
|
+
"scroll-py": ["scroll-pt", "scroll-pb"],
|
|
5886
|
+
touch: ["touch-x", "touch-y", "touch-pz"],
|
|
5887
|
+
"touch-x": ["touch"],
|
|
5888
|
+
"touch-y": ["touch"],
|
|
5889
|
+
"touch-pz": ["touch"]
|
|
5890
|
+
},
|
|
5891
|
+
conflictingClassGroupModifiers: {
|
|
5892
|
+
"font-size": ["leading"]
|
|
5893
|
+
}
|
|
5894
|
+
};
|
|
5895
|
+
};
|
|
5896
|
+
var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
|
|
5897
|
+
|
|
5898
|
+
// src/utils/utils.ts
|
|
3496
5899
|
function cn(...inputs) {
|
|
3497
5900
|
return twMerge(clsx(inputs));
|
|
3498
5901
|
}
|