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