@raydenui/ui 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -373
- package/dist/icons.cjs +196 -196
- package/dist/icons.js +196 -196
- package/dist/index.cjs +2422 -349
- package/dist/index.d.cts +354 -11
- package/dist/index.d.ts +354 -11
- package/dist/index.js +2403 -350
- package/dist/preset.cjs +20 -2
- package/dist/preset.d.cts +26 -4
- package/dist/preset.d.ts +26 -4
- package/dist/preset.js +20 -3
- package/dist/styles.css +1 -1
- package/package.json +29 -20
package/dist/index.cjs
CHANGED
|
@@ -4,8 +4,11 @@ var react = require('react');
|
|
|
4
4
|
var clsx = require('clsx');
|
|
5
5
|
var tailwindMerge = require('tailwind-merge');
|
|
6
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
var chart_js = require('chart.js');
|
|
8
|
+
var reactChartjs2 = require('react-chartjs-2');
|
|
9
|
+
var reactDom = require('react-dom');
|
|
7
10
|
|
|
8
|
-
// src/components/
|
|
11
|
+
// src/components/Accordion/Accordion.tsx
|
|
9
12
|
function cn(...inputs) {
|
|
10
13
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
11
14
|
}
|
|
@@ -5196,17 +5199,17 @@ var zoomOutIcon = {
|
|
|
5196
5199
|
var icons = {
|
|
5197
5200
|
"3d": threeDIcon,
|
|
5198
5201
|
"AI-stars": AIStarsIcon,
|
|
5199
|
-
|
|
5200
|
-
|
|
5201
|
-
|
|
5202
|
-
|
|
5202
|
+
AR: ARIcon,
|
|
5203
|
+
BTC: BTCIcon,
|
|
5204
|
+
ETH: ETHIcon,
|
|
5205
|
+
NFT: NFTIcon,
|
|
5203
5206
|
"NFT-add": NFTAddIcon,
|
|
5204
5207
|
"NFT-profile": NFTProfileIcon,
|
|
5205
5208
|
"NFT-remove": NFTRemoveIcon,
|
|
5206
5209
|
"QR-code": QRCodeIcon,
|
|
5207
5210
|
"VR-goggles": VRGogglesIcon,
|
|
5208
|
-
|
|
5209
|
-
|
|
5211
|
+
airplane: airplaneIcon,
|
|
5212
|
+
airpod: airpodIcon,
|
|
5210
5213
|
"alarm-clock": alarmClockIcon,
|
|
5211
5214
|
"align-center": alignCenterIcon,
|
|
5212
5215
|
"align-justify": alignJustifyIcon,
|
|
@@ -5223,65 +5226,65 @@ var icons = {
|
|
|
5223
5226
|
"arrow-up-left": arrowUpLeftIcon,
|
|
5224
5227
|
"arrow-up-right": arrowUpRightIcon,
|
|
5225
5228
|
"arrow-up-split": arrowUpSplitIcon,
|
|
5226
|
-
|
|
5227
|
-
|
|
5228
|
-
|
|
5229
|
-
|
|
5230
|
-
|
|
5231
|
-
|
|
5229
|
+
at: atIcon,
|
|
5230
|
+
backward: backwardIcon,
|
|
5231
|
+
badge: badgeIcon,
|
|
5232
|
+
bag: bagIcon,
|
|
5233
|
+
ball: ballIcon,
|
|
5234
|
+
bank: bankIcon,
|
|
5232
5235
|
"bar-chart-h": barChartHIcon,
|
|
5233
5236
|
"bar-chart-v": barChartVIcon,
|
|
5234
|
-
|
|
5237
|
+
battery: batteryIcon,
|
|
5235
5238
|
"battery-charging": batteryChargingIcon,
|
|
5236
5239
|
"battery-empty": batteryEmptyIcon,
|
|
5237
|
-
|
|
5240
|
+
bed: bedIcon,
|
|
5238
5241
|
"beizer-curve": beizerCurveIcon,
|
|
5239
|
-
|
|
5242
|
+
bell: bellIcon,
|
|
5240
5243
|
"bell-slash": bellSlashIcon,
|
|
5241
|
-
|
|
5242
|
-
|
|
5243
|
-
|
|
5244
|
-
|
|
5245
|
-
|
|
5244
|
+
bicycle: bicycleIcon,
|
|
5245
|
+
bin: binIcon,
|
|
5246
|
+
bluetooth: bluetoothIcon,
|
|
5247
|
+
bold: boldIcon,
|
|
5248
|
+
book: bookIcon,
|
|
5246
5249
|
"book-open": bookOpenIcon,
|
|
5247
|
-
|
|
5250
|
+
bookmark: bookmarkIcon,
|
|
5248
5251
|
"bookmark-add": bookmarkAddIcon,
|
|
5249
|
-
|
|
5250
|
-
|
|
5251
|
-
|
|
5252
|
-
|
|
5252
|
+
bookmarks: bookmarksIcon,
|
|
5253
|
+
books: booksIcon,
|
|
5254
|
+
bot: botIcon,
|
|
5255
|
+
box: boxIcon,
|
|
5253
5256
|
"box-1": box1Icon,
|
|
5254
|
-
|
|
5255
|
-
|
|
5256
|
-
|
|
5257
|
+
branch: branchIcon,
|
|
5258
|
+
brush: brushIcon,
|
|
5259
|
+
bug: bugIcon,
|
|
5257
5260
|
"building-1": building1Icon,
|
|
5258
5261
|
"building-2": building2Icon,
|
|
5259
5262
|
"building-3": building3Icon,
|
|
5260
5263
|
"building-4": building4Icon,
|
|
5261
5264
|
"building-5": building5Icon,
|
|
5262
5265
|
"building-6": building6Icon,
|
|
5263
|
-
|
|
5266
|
+
bulb: bulbIcon,
|
|
5264
5267
|
"bulb-slash": bulbSlashIcon,
|
|
5265
|
-
|
|
5266
|
-
|
|
5268
|
+
bus: busIcon,
|
|
5269
|
+
calendar: calendarIcon,
|
|
5267
5270
|
"calendar-add": calendarAddIcon,
|
|
5268
5271
|
"calendar-alt": calendarAltIcon,
|
|
5269
5272
|
"calendar-cross": calendarCrossIcon,
|
|
5270
5273
|
"calendar-remove": calendarRemoveIcon,
|
|
5271
5274
|
"calendar-tick": calendarTickIcon,
|
|
5272
|
-
|
|
5275
|
+
call: callIcon,
|
|
5273
5276
|
"call-add": callAddIcon,
|
|
5274
5277
|
"call-cross": callCrossIcon,
|
|
5275
5278
|
"call-incoming": callIncomingIcon,
|
|
5276
5279
|
"call-outgoing": callOutgoingIcon,
|
|
5277
5280
|
"call-remove": callRemoveIcon,
|
|
5278
5281
|
"call-ringing": callRingingIcon,
|
|
5279
|
-
|
|
5282
|
+
camera: cameraIcon,
|
|
5280
5283
|
"camera-slash": cameraSlashIcon,
|
|
5281
5284
|
"candles-h": candlesHIcon,
|
|
5282
5285
|
"candles-v": candlesVIcon,
|
|
5283
|
-
|
|
5284
|
-
|
|
5286
|
+
car: carIcon,
|
|
5287
|
+
card: cardIcon,
|
|
5285
5288
|
"card-add": cardAddIcon,
|
|
5286
5289
|
"card-cross": cardCrossIcon,
|
|
5287
5290
|
"card-fund": cardFundIcon,
|
|
@@ -5290,20 +5293,20 @@ var icons = {
|
|
|
5290
5293
|
"card-remove": cardRemoveIcon,
|
|
5291
5294
|
"card-tick": cardTickIcon,
|
|
5292
5295
|
"card-withdraw": cardWithdrawIcon,
|
|
5293
|
-
|
|
5296
|
+
cart: cartIcon,
|
|
5294
5297
|
"cart-add": cartAddIcon,
|
|
5295
5298
|
"cart-check": cartCheckIcon,
|
|
5296
5299
|
"cart-cross": cartCrossIcon,
|
|
5297
5300
|
"cart-minus": cartMinusIcon,
|
|
5298
|
-
|
|
5301
|
+
chart: chartIcon,
|
|
5299
5302
|
"chart-down": chartDownIcon,
|
|
5300
5303
|
"chart-up": chartUpIcon,
|
|
5301
|
-
|
|
5304
|
+
chat: chatIcon,
|
|
5302
5305
|
"chat-alt": chatAltIcon,
|
|
5303
|
-
|
|
5304
|
-
|
|
5306
|
+
chats: chatsIcon,
|
|
5307
|
+
check: checkIcon,
|
|
5305
5308
|
"check-circle": checkCircleIcon,
|
|
5306
|
-
|
|
5309
|
+
checkbox: checkboxIcon,
|
|
5307
5310
|
"checkbox-checked": checkboxCheckedIcon,
|
|
5308
5311
|
"chevron-down": chevronDownIcon,
|
|
5309
5312
|
"chevron-h": chevronHIcon,
|
|
@@ -5311,9 +5314,9 @@ var icons = {
|
|
|
5311
5314
|
"chevron-right": chevronRightIcon,
|
|
5312
5315
|
"chevron-up": chevronUpIcon,
|
|
5313
5316
|
"chevron-v": chevronVIcon,
|
|
5314
|
-
|
|
5315
|
-
|
|
5316
|
-
|
|
5317
|
+
clipboard: clipboardIcon,
|
|
5318
|
+
clock: clockIcon,
|
|
5319
|
+
cloud: cloudIcon,
|
|
5317
5320
|
"cloud-1": cloud1Icon,
|
|
5318
5321
|
"cloud-download": cloudDownloadIcon,
|
|
5319
5322
|
"cloud-info": cloudInfoIcon,
|
|
@@ -5322,19 +5325,19 @@ var icons = {
|
|
|
5322
5325
|
"cloud-slash": cloudSlashIcon,
|
|
5323
5326
|
"cloud-snowy": cloudSnowyIcon,
|
|
5324
5327
|
"cloud-upload": cloudUploadIcon,
|
|
5325
|
-
|
|
5326
|
-
|
|
5328
|
+
clouds: cloudsIcon,
|
|
5329
|
+
code: codeIcon,
|
|
5327
5330
|
"code-2": code2Icon,
|
|
5328
5331
|
"coin-stack": coinStackIcon,
|
|
5329
5332
|
"coin-swap": coinSwapIcon,
|
|
5330
|
-
|
|
5333
|
+
coins: coinsIcon,
|
|
5331
5334
|
"coins-alt": coinsAltIcon,
|
|
5332
5335
|
"color-picker": colorPickerIcon,
|
|
5333
|
-
|
|
5334
|
-
|
|
5336
|
+
column: columnIcon,
|
|
5337
|
+
compass: compassIcon,
|
|
5335
5338
|
"conical-flask": conicalFlaskIcon,
|
|
5336
|
-
|
|
5337
|
-
|
|
5339
|
+
copy: copyIcon,
|
|
5340
|
+
corner: cornerIcon,
|
|
5338
5341
|
"corner-down-left": cornerDownLeftIcon,
|
|
5339
5342
|
"corner-down-right": cornerDownRightIcon,
|
|
5340
5343
|
"corner-left-down": cornerLeftDownIcon,
|
|
@@ -5343,43 +5346,43 @@ var icons = {
|
|
|
5343
5346
|
"corner-right-up": cornerRightUpIcon,
|
|
5344
5347
|
"corner-up-left": cornerUpLeftIcon,
|
|
5345
5348
|
"corner-up-right": cornerUpRightIcon,
|
|
5346
|
-
|
|
5347
|
-
|
|
5348
|
-
|
|
5349
|
-
|
|
5350
|
-
|
|
5351
|
-
|
|
5352
|
-
|
|
5353
|
-
|
|
5349
|
+
crop: cropIcon,
|
|
5350
|
+
cup: cupIcon,
|
|
5351
|
+
cursor: cursorIcon,
|
|
5352
|
+
data: dataIcon,
|
|
5353
|
+
devices: devicesIcon,
|
|
5354
|
+
dislike: dislikeIcon,
|
|
5355
|
+
division: divisionIcon,
|
|
5356
|
+
dollar: dollarIcon,
|
|
5354
5357
|
"dots-h": dotsHIcon,
|
|
5355
5358
|
"dots-h-circle": dotsHCircleIcon,
|
|
5356
5359
|
"dots-v": dotsVIcon,
|
|
5357
5360
|
"dots-v-circle": dotsVCircleIcon,
|
|
5358
|
-
|
|
5359
|
-
|
|
5360
|
-
|
|
5361
|
+
download: downloadIcon,
|
|
5362
|
+
elements: elementsIcon,
|
|
5363
|
+
emoji: emojiIcon,
|
|
5361
5364
|
"emoji-add": emojiAddIcon,
|
|
5362
|
-
|
|
5363
|
-
|
|
5364
|
-
|
|
5365
|
+
euro: euroIcon,
|
|
5366
|
+
expand: expandIcon,
|
|
5367
|
+
eye: eyeIcon,
|
|
5365
5368
|
"eye-slash": eyeSlashIcon,
|
|
5366
5369
|
"face-id": faceIdIcon,
|
|
5367
|
-
|
|
5370
|
+
feather: featherIcon,
|
|
5368
5371
|
"feather-AI": featherAIIcon,
|
|
5369
5372
|
"feather-add": featherAddIcon,
|
|
5370
|
-
|
|
5373
|
+
file: fileIcon,
|
|
5371
5374
|
"file-alt": fileAltIcon,
|
|
5372
5375
|
"file-cloud": fileCloudIcon,
|
|
5373
5376
|
"file-code": fileCodeIcon,
|
|
5374
5377
|
"file-download": fileDownloadIcon,
|
|
5375
5378
|
"file-upload": fileUploadIcon,
|
|
5376
|
-
|
|
5379
|
+
filter: filterIcon,
|
|
5377
5380
|
"filter-alt": filterAltIcon,
|
|
5378
|
-
|
|
5381
|
+
fingerprint: fingerprintIcon,
|
|
5379
5382
|
"first-aid": firstAidIcon,
|
|
5380
|
-
|
|
5381
|
-
|
|
5382
|
-
|
|
5383
|
+
flag: flagIcon,
|
|
5384
|
+
flower: flowerIcon,
|
|
5385
|
+
folder: folderIcon,
|
|
5383
5386
|
"folder-add": folderAddIcon,
|
|
5384
5387
|
"folder-cloud": folderCloudIcon,
|
|
5385
5388
|
"folder-cross": folderCrossIcon,
|
|
@@ -5389,29 +5392,29 @@ var icons = {
|
|
|
5389
5392
|
"folder-shield": folderShieldIcon,
|
|
5390
5393
|
"folder-upload": folderUploadIcon,
|
|
5391
5394
|
"folder-user": folderUserIcon,
|
|
5392
|
-
|
|
5393
|
-
|
|
5395
|
+
fork: forkIcon,
|
|
5396
|
+
forward: forwardIcon,
|
|
5394
5397
|
"game-pad": gamePadIcon,
|
|
5395
5398
|
"gear-AI": gearAIIcon,
|
|
5396
|
-
|
|
5397
|
-
|
|
5398
|
-
|
|
5399
|
+
gem: gemIcon,
|
|
5400
|
+
gift: giftIcon,
|
|
5401
|
+
globe: globeIcon,
|
|
5399
5402
|
"globe-alt": globeAltIcon,
|
|
5400
|
-
|
|
5401
|
-
|
|
5403
|
+
gps: gpsIcon,
|
|
5404
|
+
grid: gridIcon,
|
|
5402
5405
|
"grid-2": grid2Icon,
|
|
5403
|
-
|
|
5404
|
-
|
|
5405
|
-
|
|
5406
|
-
|
|
5406
|
+
hashtag: hashtagIcon,
|
|
5407
|
+
heading: headingIcon,
|
|
5408
|
+
headphones: headphonesIcon,
|
|
5409
|
+
headset: headsetIcon,
|
|
5407
5410
|
"health-plus": healthPlusIcon,
|
|
5408
|
-
|
|
5411
|
+
heart: heartIcon,
|
|
5409
5412
|
"heart-beat": heartBeatIcon,
|
|
5410
5413
|
"heart-beat-wave": heartBeatWaveIcon,
|
|
5411
|
-
|
|
5412
|
-
|
|
5414
|
+
history: historyIcon,
|
|
5415
|
+
home: homeIcon,
|
|
5413
5416
|
"home-alt": homeAltIcon,
|
|
5414
|
-
|
|
5417
|
+
image: imageIcon,
|
|
5415
5418
|
"image-add": imageAddIcon,
|
|
5416
5419
|
"image-check": imageCheckIcon,
|
|
5417
5420
|
"image-circle": imageCircleIcon,
|
|
@@ -5420,167 +5423,167 @@ var icons = {
|
|
|
5420
5423
|
"info-circle": infoCircleIcon,
|
|
5421
5424
|
"info-hexagon": infoHexagonIcon,
|
|
5422
5425
|
"info-triangle": infoTriangleIcon,
|
|
5423
|
-
|
|
5424
|
-
|
|
5425
|
-
|
|
5426
|
-
|
|
5427
|
-
|
|
5428
|
-
|
|
5429
|
-
|
|
5430
|
-
|
|
5426
|
+
italics: italicsIcon,
|
|
5427
|
+
key: keyIcon,
|
|
5428
|
+
keyboard: keyboardIcon,
|
|
5429
|
+
lamp: lampIcon,
|
|
5430
|
+
laptop: laptopIcon,
|
|
5431
|
+
layer: layerIcon,
|
|
5432
|
+
lifebuoy: lifebuoyIcon,
|
|
5433
|
+
lightning: lightningIcon,
|
|
5431
5434
|
"lightning-off": lightningOffIcon,
|
|
5432
|
-
|
|
5435
|
+
like: likeIcon,
|
|
5433
5436
|
"line-height": lineHeightIcon,
|
|
5434
|
-
|
|
5437
|
+
link: linkIcon,
|
|
5435
5438
|
"link-detach": linkDetachIcon,
|
|
5436
|
-
|
|
5439
|
+
list: listIcon,
|
|
5437
5440
|
"list-add": listAddIcon,
|
|
5438
|
-
|
|
5441
|
+
lock: lockIcon,
|
|
5439
5442
|
"lock-open": lockOpenIcon,
|
|
5440
|
-
|
|
5443
|
+
loudspeaker: loudspeakerIcon,
|
|
5441
5444
|
"magic-wand": magicWandIcon,
|
|
5442
|
-
|
|
5445
|
+
mail: mailIcon,
|
|
5443
5446
|
"mail-add": mailAddIcon,
|
|
5444
5447
|
"mail-check": mailCheckIcon,
|
|
5445
5448
|
"mail-cross": mailCrossIcon,
|
|
5446
5449
|
"mail-remove": mailRemoveIcon,
|
|
5447
|
-
|
|
5450
|
+
map: mapIcon,
|
|
5448
5451
|
"map-alt": mapAltIcon,
|
|
5449
5452
|
"map-marker": mapMarkerIcon,
|
|
5450
|
-
|
|
5451
|
-
|
|
5452
|
-
|
|
5453
|
+
media: mediaIcon,
|
|
5454
|
+
merge: mergeIcon,
|
|
5455
|
+
message: messageIcon,
|
|
5453
5456
|
"message-alt": messageAltIcon,
|
|
5454
|
-
|
|
5455
|
-
|
|
5457
|
+
messages: messagesIcon,
|
|
5458
|
+
microphone: microphoneIcon,
|
|
5456
5459
|
"microphone-slash": microphoneSlashIcon,
|
|
5457
|
-
|
|
5460
|
+
minus: minusIcon,
|
|
5458
5461
|
"minus-circle": minusCircleIcon,
|
|
5459
|
-
|
|
5460
|
-
|
|
5462
|
+
mobile: mobileIcon,
|
|
5463
|
+
money: moneyIcon,
|
|
5461
5464
|
"money-1": money1Icon,
|
|
5462
5465
|
"money-2": money2Icon,
|
|
5463
|
-
|
|
5466
|
+
moon: moonIcon,
|
|
5464
5467
|
"moon-cloud": moonCloudIcon,
|
|
5465
5468
|
"moon-stars": moonStarsIcon,
|
|
5466
|
-
|
|
5467
|
-
|
|
5468
|
-
|
|
5469
|
+
mouse: mouseIcon,
|
|
5470
|
+
move: moveIcon,
|
|
5471
|
+
multiply: multiplyIcon,
|
|
5469
5472
|
"multiply-circle": multiplyCircleIcon,
|
|
5470
|
-
|
|
5473
|
+
music: musicIcon,
|
|
5471
5474
|
"music-AI": musicAIIcon,
|
|
5472
5475
|
"music-note": musicNoteIcon,
|
|
5473
|
-
|
|
5474
|
-
|
|
5476
|
+
naira: nairaIcon,
|
|
5477
|
+
navigation: navigationIcon,
|
|
5475
5478
|
"navigation-alt": navigationAltIcon,
|
|
5476
|
-
|
|
5477
|
-
|
|
5479
|
+
newspaper: newspaperIcon,
|
|
5480
|
+
next: nextIcon,
|
|
5478
5481
|
"paint-brush": paintBrushIcon,
|
|
5479
5482
|
"paint-bucket": paintBucketIcon,
|
|
5480
|
-
|
|
5483
|
+
palette: paletteIcon,
|
|
5481
5484
|
"paper-clip": paperClipIcon,
|
|
5482
5485
|
"paragraph-spacing": paragraphSpacingIcon,
|
|
5483
|
-
|
|
5484
|
-
|
|
5486
|
+
pause: pauseIcon,
|
|
5487
|
+
pc: pcIcon,
|
|
5485
5488
|
"pc-lock": pcLockIcon,
|
|
5486
5489
|
"pc-speaker": pcSpeakerIcon,
|
|
5487
5490
|
"pc-user": pcUserIcon,
|
|
5488
|
-
|
|
5491
|
+
pencil: pencilIcon,
|
|
5489
5492
|
"pencil-edit": pencilEditIcon,
|
|
5490
5493
|
"pie-chart": pieChartIcon,
|
|
5491
|
-
|
|
5494
|
+
pin: pinIcon,
|
|
5492
5495
|
"pin-alt": pinAltIcon,
|
|
5493
|
-
|
|
5496
|
+
plant: plantIcon,
|
|
5494
5497
|
"plant-2": plant2Icon,
|
|
5495
|
-
|
|
5496
|
-
|
|
5497
|
-
|
|
5498
|
+
play: playIcon,
|
|
5499
|
+
playlist: playlistIcon,
|
|
5500
|
+
plus: plusIcon,
|
|
5498
5501
|
"plus-circle": plusCircleIcon,
|
|
5499
|
-
|
|
5500
|
-
|
|
5501
|
-
|
|
5502
|
-
|
|
5503
|
-
|
|
5502
|
+
pounds: poundsIcon,
|
|
5503
|
+
power: powerIcon,
|
|
5504
|
+
previous: previousIcon,
|
|
5505
|
+
printer: printerIcon,
|
|
5506
|
+
processor: processorIcon,
|
|
5504
5507
|
"pull-request": pullRequestIcon,
|
|
5505
5508
|
"question-circle": questionCircleIcon,
|
|
5506
|
-
|
|
5509
|
+
quote: quoteIcon,
|
|
5507
5510
|
"radio-button": radioButtonIcon,
|
|
5508
5511
|
"radio-selected": radioSelectedIcon,
|
|
5509
|
-
|
|
5510
|
-
|
|
5511
|
-
|
|
5512
|
-
|
|
5512
|
+
receipt: receiptIcon,
|
|
5513
|
+
redo: redoIcon,
|
|
5514
|
+
refresh: refreshIcon,
|
|
5515
|
+
repeat: repeatIcon,
|
|
5513
5516
|
"repeat-once": repeatOnceIcon,
|
|
5514
5517
|
"road-sign": roadSignIcon,
|
|
5515
|
-
|
|
5518
|
+
rocket: rocketIcon,
|
|
5516
5519
|
"rocket-alt": rocketAltIcon,
|
|
5517
5520
|
"rotate-left": rotateLeftIcon,
|
|
5518
5521
|
"rotate-right": rotateRightIcon,
|
|
5519
|
-
|
|
5520
|
-
|
|
5521
|
-
|
|
5522
|
-
|
|
5523
|
-
|
|
5524
|
-
|
|
5525
|
-
|
|
5526
|
-
|
|
5522
|
+
route: routeIcon,
|
|
5523
|
+
row: rowIcon,
|
|
5524
|
+
save: saveIcon,
|
|
5525
|
+
scan: scanIcon,
|
|
5526
|
+
scissor: scissorIcon,
|
|
5527
|
+
screenshot: screenshotIcon,
|
|
5528
|
+
search: searchIcon,
|
|
5529
|
+
send: sendIcon,
|
|
5527
5530
|
"send-AI": sendAIIcon,
|
|
5528
5531
|
"send-alt": sendAltIcon,
|
|
5529
|
-
|
|
5532
|
+
server: serverIcon,
|
|
5530
5533
|
"server-alt": serverAltIcon,
|
|
5531
|
-
|
|
5534
|
+
settings: settingsIcon,
|
|
5532
5535
|
"settings-1": settings1Icon,
|
|
5533
5536
|
"settings-2": settings2Icon,
|
|
5534
|
-
|
|
5537
|
+
share: shareIcon,
|
|
5535
5538
|
"share-alt": shareAltIcon,
|
|
5536
|
-
|
|
5539
|
+
shield: shieldIcon,
|
|
5537
5540
|
"shield-cross": shieldCrossIcon,
|
|
5538
5541
|
"shield-tick": shieldTickIcon,
|
|
5539
|
-
|
|
5540
|
-
|
|
5541
|
-
|
|
5542
|
+
ship: shipIcon,
|
|
5543
|
+
shower: showerIcon,
|
|
5544
|
+
shrink: shrinkIcon,
|
|
5542
5545
|
"shrink-alt": shrinkAltIcon,
|
|
5543
|
-
|
|
5546
|
+
shuffle: shuffleIcon,
|
|
5544
5547
|
"sign-in": signInIcon,
|
|
5545
5548
|
"sign-out": signOutIcon,
|
|
5546
|
-
|
|
5549
|
+
signal: signalIcon,
|
|
5547
5550
|
"signal-off": signalOffIcon,
|
|
5548
|
-
|
|
5549
|
-
|
|
5550
|
-
|
|
5551
|
-
|
|
5552
|
-
|
|
5553
|
-
|
|
5554
|
-
|
|
5555
|
-
|
|
5556
|
-
|
|
5557
|
-
|
|
5558
|
-
|
|
5559
|
-
|
|
5560
|
-
|
|
5561
|
-
|
|
5551
|
+
sim: simIcon,
|
|
5552
|
+
snooze: snoozeIcon,
|
|
5553
|
+
snowflake: snowflakeIcon,
|
|
5554
|
+
sofa: sofaIcon,
|
|
5555
|
+
speaker: speakerIcon,
|
|
5556
|
+
star: starIcon,
|
|
5557
|
+
stars: starsIcon,
|
|
5558
|
+
stop: stopIcon,
|
|
5559
|
+
stopwatch: stopwatchIcon,
|
|
5560
|
+
store: storeIcon,
|
|
5561
|
+
strikethrough: strikethroughIcon,
|
|
5562
|
+
subscript: subscriptIcon,
|
|
5563
|
+
suitcase: suitcaseIcon,
|
|
5564
|
+
sun: sunIcon,
|
|
5562
5565
|
"sun-cloud": sunCloudIcon,
|
|
5563
|
-
|
|
5564
|
-
|
|
5566
|
+
superscript: superscriptIcon,
|
|
5567
|
+
support: supportIcon,
|
|
5565
5568
|
"switch-diagonal": switchDiagonalIcon,
|
|
5566
5569
|
"switch-horizontal": switchHorizontalIcon,
|
|
5567
5570
|
"switch-vertical": switchVerticalIcon,
|
|
5568
|
-
|
|
5569
|
-
|
|
5570
|
-
|
|
5571
|
-
|
|
5572
|
-
|
|
5573
|
-
|
|
5574
|
-
|
|
5575
|
-
|
|
5576
|
-
|
|
5577
|
-
|
|
5578
|
-
|
|
5579
|
-
|
|
5580
|
-
|
|
5581
|
-
|
|
5582
|
-
|
|
5583
|
-
|
|
5571
|
+
tablet: tabletIcon,
|
|
5572
|
+
target: targetIcon,
|
|
5573
|
+
taxi: taxiIcon,
|
|
5574
|
+
terminal: terminalIcon,
|
|
5575
|
+
text: textIcon,
|
|
5576
|
+
thermometer: thermometerIcon,
|
|
5577
|
+
ticket: ticketIcon,
|
|
5578
|
+
tissue: tissueIcon,
|
|
5579
|
+
train: trainIcon,
|
|
5580
|
+
trophy: trophyIcon,
|
|
5581
|
+
truck: truckIcon,
|
|
5582
|
+
tv: tvIcon,
|
|
5583
|
+
underline: underlineIcon,
|
|
5584
|
+
undo: undoIcon,
|
|
5585
|
+
upload: uploadIcon,
|
|
5586
|
+
user: userIcon,
|
|
5584
5587
|
"user-add": userAddIcon,
|
|
5585
5588
|
"user-circle": userCircleIcon,
|
|
5586
5589
|
"user-cross": userCrossIcon,
|
|
@@ -5588,16 +5591,16 @@ var icons = {
|
|
|
5588
5591
|
"user-heart": userHeartIcon,
|
|
5589
5592
|
"user-remove": userRemoveIcon,
|
|
5590
5593
|
"user-tick": userTickIcon,
|
|
5591
|
-
|
|
5592
|
-
|
|
5593
|
-
|
|
5594
|
+
users: usersIcon,
|
|
5595
|
+
verified: verifiedIcon,
|
|
5596
|
+
video: videoIcon,
|
|
5594
5597
|
"video-slash": videoSlashIcon,
|
|
5595
5598
|
"voice-note": voiceNoteIcon,
|
|
5596
|
-
|
|
5599
|
+
volume: volumeIcon,
|
|
5597
5600
|
"volume-low": volumeLowIcon,
|
|
5598
5601
|
"volume-mute": volumeMuteIcon,
|
|
5599
5602
|
"volume-slash": volumeSlashIcon,
|
|
5600
|
-
|
|
5603
|
+
wallet: walletIcon,
|
|
5601
5604
|
"wallet-add": walletAddIcon,
|
|
5602
5605
|
"wallet-check": walletCheckIcon,
|
|
5603
5606
|
"wallet-cross": walletCrossIcon,
|
|
@@ -5605,9 +5608,9 @@ var icons = {
|
|
|
5605
5608
|
"wallet-remove": walletRemoveIcon,
|
|
5606
5609
|
"wallet-withdraw": walletWithdrawIcon,
|
|
5607
5610
|
"water-drop": waterDropIcon,
|
|
5608
|
-
|
|
5609
|
-
|
|
5610
|
-
|
|
5611
|
+
wifi: wifiIcon,
|
|
5612
|
+
wristwatch: wristwatchIcon,
|
|
5613
|
+
yen: yenIcon,
|
|
5611
5614
|
"zoom-in": zoomInIcon,
|
|
5612
5615
|
"zoom-out": zoomOutIcon
|
|
5613
5616
|
};
|
|
@@ -5654,6 +5657,177 @@ function resolveIcon(icon, size = "md") {
|
|
|
5654
5657
|
if (isIconName(icon)) return /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: icon, size });
|
|
5655
5658
|
return icon;
|
|
5656
5659
|
}
|
|
5660
|
+
var AccordionContext = react.createContext(null);
|
|
5661
|
+
var AccordionItemContext = react.createContext(null);
|
|
5662
|
+
function useAccordionContext() {
|
|
5663
|
+
const ctx = react.useContext(AccordionContext);
|
|
5664
|
+
if (!ctx) throw new Error("Accordion compound components must be used within <Accordion>");
|
|
5665
|
+
return ctx;
|
|
5666
|
+
}
|
|
5667
|
+
function useAccordionItemContext() {
|
|
5668
|
+
const ctx = react.useContext(AccordionItemContext);
|
|
5669
|
+
if (!ctx) throw new Error("AccordionTrigger/Content must be used within <AccordionItem>");
|
|
5670
|
+
return ctx;
|
|
5671
|
+
}
|
|
5672
|
+
function ChevronDown({ className }) {
|
|
5673
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5674
|
+
"svg",
|
|
5675
|
+
{
|
|
5676
|
+
className,
|
|
5677
|
+
viewBox: "0 0 24 24",
|
|
5678
|
+
fill: "none",
|
|
5679
|
+
stroke: "currentColor",
|
|
5680
|
+
strokeWidth: 2,
|
|
5681
|
+
strokeLinecap: "round",
|
|
5682
|
+
strokeLinejoin: "round",
|
|
5683
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 9l6 6 6-6" })
|
|
5684
|
+
}
|
|
5685
|
+
);
|
|
5686
|
+
}
|
|
5687
|
+
var Accordion = react.forwardRef(
|
|
5688
|
+
({
|
|
5689
|
+
type = "default",
|
|
5690
|
+
multiple = false,
|
|
5691
|
+
value: controlledValue,
|
|
5692
|
+
defaultValue = [],
|
|
5693
|
+
onValueChange,
|
|
5694
|
+
className,
|
|
5695
|
+
children,
|
|
5696
|
+
...rest
|
|
5697
|
+
}, ref) => {
|
|
5698
|
+
const [uncontrolledValue, setUncontrolledValue] = react.useState(defaultValue);
|
|
5699
|
+
const openItems = controlledValue ?? uncontrolledValue;
|
|
5700
|
+
const toggle = react.useCallback(
|
|
5701
|
+
(itemValue) => {
|
|
5702
|
+
const next = openItems.includes(itemValue) ? openItems.filter((v) => v !== itemValue) : multiple ? [...openItems, itemValue] : [itemValue];
|
|
5703
|
+
if (!controlledValue) setUncontrolledValue(next);
|
|
5704
|
+
onValueChange?.(next);
|
|
5705
|
+
},
|
|
5706
|
+
[openItems, multiple, controlledValue, onValueChange]
|
|
5707
|
+
);
|
|
5708
|
+
return /* @__PURE__ */ jsxRuntime.jsx(AccordionContext.Provider, { value: { type, openItems, toggle }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5709
|
+
"div",
|
|
5710
|
+
{
|
|
5711
|
+
ref,
|
|
5712
|
+
className: cn(
|
|
5713
|
+
"w-full",
|
|
5714
|
+
type === "nested" && "flex flex-col gap-3",
|
|
5715
|
+
className
|
|
5716
|
+
),
|
|
5717
|
+
...rest,
|
|
5718
|
+
children
|
|
5719
|
+
}
|
|
5720
|
+
) });
|
|
5721
|
+
}
|
|
5722
|
+
);
|
|
5723
|
+
Accordion.displayName = "Accordion";
|
|
5724
|
+
var AccordionItem = react.forwardRef(
|
|
5725
|
+
({ value, disabled = false, className, children, ...rest }, ref) => {
|
|
5726
|
+
const { type, openItems } = useAccordionContext();
|
|
5727
|
+
const isOpen = openItems.includes(value);
|
|
5728
|
+
const generatedId = react.useId();
|
|
5729
|
+
const triggerId = `accordion-trigger-${generatedId}`;
|
|
5730
|
+
const contentId = `accordion-content-${generatedId}`;
|
|
5731
|
+
return /* @__PURE__ */ jsxRuntime.jsx(AccordionItemContext.Provider, { value: { value, isOpen, disabled, triggerId, contentId }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5732
|
+
"div",
|
|
5733
|
+
{
|
|
5734
|
+
ref,
|
|
5735
|
+
className: cn(
|
|
5736
|
+
"border-solid transition-colors",
|
|
5737
|
+
type === "default" ? cn(
|
|
5738
|
+
"border-b",
|
|
5739
|
+
isOpen ? "border-primary-300" : "border-grey-100"
|
|
5740
|
+
) : cn(
|
|
5741
|
+
"border rounded-[10px]",
|
|
5742
|
+
isOpen ? "border-primary-300" : "border-grey-75"
|
|
5743
|
+
),
|
|
5744
|
+
className
|
|
5745
|
+
),
|
|
5746
|
+
...rest,
|
|
5747
|
+
children
|
|
5748
|
+
}
|
|
5749
|
+
) });
|
|
5750
|
+
}
|
|
5751
|
+
);
|
|
5752
|
+
AccordionItem.displayName = "AccordionItem";
|
|
5753
|
+
var AccordionTrigger = react.forwardRef(
|
|
5754
|
+
({
|
|
5755
|
+
leadingIcon,
|
|
5756
|
+
leadingNumber,
|
|
5757
|
+
leadingLogo,
|
|
5758
|
+
badge,
|
|
5759
|
+
hideChevron = false,
|
|
5760
|
+
className,
|
|
5761
|
+
children,
|
|
5762
|
+
...rest
|
|
5763
|
+
}, ref) => {
|
|
5764
|
+
const { toggle } = useAccordionContext();
|
|
5765
|
+
const { value, isOpen, disabled, triggerId, contentId } = useAccordionItemContext();
|
|
5766
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5767
|
+
"button",
|
|
5768
|
+
{
|
|
5769
|
+
ref,
|
|
5770
|
+
id: triggerId,
|
|
5771
|
+
type: "button",
|
|
5772
|
+
disabled,
|
|
5773
|
+
"aria-expanded": isOpen,
|
|
5774
|
+
"aria-controls": contentId,
|
|
5775
|
+
onClick: () => toggle(value),
|
|
5776
|
+
className: cn(
|
|
5777
|
+
"flex items-center gap-3 px-4 py-6 w-full text-left transition-colors",
|
|
5778
|
+
!isOpen && !disabled && "hover:bg-grey-50",
|
|
5779
|
+
disabled && "opacity-50 cursor-not-allowed",
|
|
5780
|
+
className
|
|
5781
|
+
),
|
|
5782
|
+
...rest,
|
|
5783
|
+
children: [
|
|
5784
|
+
leadingNumber && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 flex items-center justify-center bg-grey-700 text-white text-base font-medium leading-[1.48] rounded-xl px-2 py-1 min-w-[37px]", children: leadingNumber }),
|
|
5785
|
+
leadingLogo && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0", children: leadingLogo }),
|
|
5786
|
+
leadingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-6 text-grey-500", children: resolveIcon(leadingIcon, "md") }),
|
|
5787
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1 min-w-0 text-lg font-semibold text-grey-900 leading-[1.54]", children }),
|
|
5788
|
+
badge != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 bg-primary-50 text-primary-400 text-sm font-medium rounded-full px-3 py-2 leading-[1.45]", children: badge }),
|
|
5789
|
+
!hideChevron && /* @__PURE__ */ jsxRuntime.jsx(
|
|
5790
|
+
ChevronDown,
|
|
5791
|
+
{
|
|
5792
|
+
className: cn(
|
|
5793
|
+
"shrink-0 size-6 text-grey-500 transition-transform duration-200",
|
|
5794
|
+
isOpen && "rotate-180"
|
|
5795
|
+
)
|
|
5796
|
+
}
|
|
5797
|
+
)
|
|
5798
|
+
]
|
|
5799
|
+
}
|
|
5800
|
+
);
|
|
5801
|
+
}
|
|
5802
|
+
);
|
|
5803
|
+
AccordionTrigger.displayName = "AccordionTrigger";
|
|
5804
|
+
var AccordionContent = react.forwardRef(
|
|
5805
|
+
({ className, children, ...rest }, ref) => {
|
|
5806
|
+
const { isOpen, triggerId, contentId } = useAccordionItemContext();
|
|
5807
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5808
|
+
"div",
|
|
5809
|
+
{
|
|
5810
|
+
ref,
|
|
5811
|
+
id: contentId,
|
|
5812
|
+
role: "region",
|
|
5813
|
+
"aria-labelledby": triggerId,
|
|
5814
|
+
className: cn(
|
|
5815
|
+
"grid transition-[grid-template-rows] duration-200 ease-out",
|
|
5816
|
+
isOpen ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
|
|
5817
|
+
),
|
|
5818
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5819
|
+
"div",
|
|
5820
|
+
{
|
|
5821
|
+
className: cn("px-4 pb-6 text-base text-grey-500 leading-[1.48]", className),
|
|
5822
|
+
...rest,
|
|
5823
|
+
children
|
|
5824
|
+
}
|
|
5825
|
+
) })
|
|
5826
|
+
}
|
|
5827
|
+
);
|
|
5828
|
+
}
|
|
5829
|
+
);
|
|
5830
|
+
AccordionContent.displayName = "AccordionContent";
|
|
5657
5831
|
var solidVariants = {
|
|
5658
5832
|
primary: "bg-primary-500 text-white hover:bg-primary-400 focus-visible:bg-primary-700 disabled:bg-grey-300 disabled:text-white dark:disabled:bg-grey-200",
|
|
5659
5833
|
secondary: "bg-white dark:bg-grey-50 text-primary-600 border-[1.5px] border-primary-600 hover:bg-primary-50 hover:border-primary-600 focus-visible:bg-primary-50 focus-visible:border-primary-700 focus-visible:border-2 disabled:bg-white dark:disabled:bg-grey-50 disabled:border-2 disabled:border-grey-100 disabled:text-grey-400",
|
|
@@ -5701,7 +5875,7 @@ var Button = react.forwardRef(
|
|
|
5701
5875
|
...rest
|
|
5702
5876
|
}, ref) => {
|
|
5703
5877
|
const variantClasses = appearance === "outlined" ? outlinedVariants[variant] : solidVariants[variant];
|
|
5704
|
-
const
|
|
5878
|
+
const sizeConfig3 = sizeClasses[size];
|
|
5705
5879
|
const paddingKey = iconPosition === "icon-only" ? "icon-only" : iconPosition !== "none" ? "icon" : "none";
|
|
5706
5880
|
const iconSizeClass = size === "sm" ? "size-5" : "size-6";
|
|
5707
5881
|
const resolvedIcon = resolveIcon(icon, size === "sm" ? "md" : "lg");
|
|
@@ -5712,8 +5886,8 @@ var Button = react.forwardRef(
|
|
|
5712
5886
|
disabled,
|
|
5713
5887
|
className: cn(
|
|
5714
5888
|
"inline-flex items-center justify-center gap-2 font-semibold transition-colors focus-visible:outline-none cursor-pointer disabled:cursor-not-allowed",
|
|
5715
|
-
|
|
5716
|
-
|
|
5889
|
+
sizeConfig3.base,
|
|
5890
|
+
sizeConfig3[paddingKey],
|
|
5717
5891
|
variantClasses,
|
|
5718
5892
|
className
|
|
5719
5893
|
),
|
|
@@ -5757,6 +5931,18 @@ var ButtonGroupItem = react.forwardRef(
|
|
|
5757
5931
|
}
|
|
5758
5932
|
);
|
|
5759
5933
|
ButtonGroupItem.displayName = "ButtonGroupItem";
|
|
5934
|
+
var inputFrameSize = {
|
|
5935
|
+
xs: "px-2.5 py-2 gap-2",
|
|
5936
|
+
sm: "p-3 gap-3",
|
|
5937
|
+
md: "px-4 py-3 gap-3",
|
|
5938
|
+
lg: "px-4 py-3 gap-3"
|
|
5939
|
+
};
|
|
5940
|
+
var addonHeight = {
|
|
5941
|
+
xs: "",
|
|
5942
|
+
sm: "h-10",
|
|
5943
|
+
md: "h-12",
|
|
5944
|
+
lg: "h-14"
|
|
5945
|
+
};
|
|
5760
5946
|
var Input = react.forwardRef(
|
|
5761
5947
|
({
|
|
5762
5948
|
size = "sm",
|
|
@@ -5767,6 +5953,8 @@ var Input = react.forwardRef(
|
|
|
5767
5953
|
leadingIcon,
|
|
5768
5954
|
trailingIcon,
|
|
5769
5955
|
addonRight,
|
|
5956
|
+
leadingAddon,
|
|
5957
|
+
trailingAddon,
|
|
5770
5958
|
readOnly,
|
|
5771
5959
|
disabled,
|
|
5772
5960
|
className,
|
|
@@ -5779,21 +5967,101 @@ var Input = react.forwardRef(
|
|
|
5779
5967
|
const inputId = id || generatedId;
|
|
5780
5968
|
const hasError = !!error;
|
|
5781
5969
|
const hasSuccess = !!success;
|
|
5970
|
+
const hasAddon = !!leadingAddon || !!trailingAddon;
|
|
5782
5971
|
const bottomText = hasError ? typeof error === "string" ? error : void 0 : hasSuccess ? typeof success === "string" ? success : void 0 : helperText;
|
|
5783
5972
|
const descriptionId = bottomText ? `${inputId}-description` : void 0;
|
|
5784
|
-
const borderColor = hasError ? "border-error-
|
|
5785
|
-
|
|
5973
|
+
const borderColor = hasError ? "border-error-400 focus-within:border-error-400" : hasSuccess ? "border-success-400 focus-within:border-success-400" : "border-grey-300 hover:border-primary-100 focus-within:border-primary-400";
|
|
5974
|
+
const inputBg = readOnly ? "bg-grey-100" : disabled ? "bg-grey-50" : "bg-white dark:bg-grey-50";
|
|
5975
|
+
if (hasAddon) {
|
|
5976
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-1 w-full", wrapperClassName), children: [
|
|
5977
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: inputId, className: "text-sm font-medium text-grey-900 leading-[1.45]", children: label }),
|
|
5978
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-stretch", addonHeight[size]), children: [
|
|
5979
|
+
leadingAddon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
5980
|
+
"div",
|
|
5981
|
+
{
|
|
5982
|
+
className: cn(
|
|
5983
|
+
"flex items-center gap-1 px-3 py-2 bg-grey-50 border border-r-0 border-grey-300 rounded-l-lg overflow-hidden shrink-0",
|
|
5984
|
+
"text-sm font-medium text-grey-700"
|
|
5985
|
+
),
|
|
5986
|
+
children: leadingAddon
|
|
5987
|
+
}
|
|
5988
|
+
),
|
|
5989
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
5990
|
+
"div",
|
|
5991
|
+
{
|
|
5992
|
+
className: cn(
|
|
5993
|
+
"flex flex-1 items-center border overflow-hidden transition-colors",
|
|
5994
|
+
inputFrameSize[size],
|
|
5995
|
+
inputBg,
|
|
5996
|
+
borderColor,
|
|
5997
|
+
!leadingAddon && !trailingAddon && "rounded-lg",
|
|
5998
|
+
leadingAddon && !trailingAddon && "rounded-r-lg",
|
|
5999
|
+
!leadingAddon && trailingAddon && "rounded-l-lg",
|
|
6000
|
+
leadingAddon && trailingAddon && "",
|
|
6001
|
+
disabled && "cursor-not-allowed"
|
|
6002
|
+
),
|
|
6003
|
+
children: [
|
|
6004
|
+
leadingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-6 text-grey-400", children: resolveIcon(leadingIcon, "md") }),
|
|
6005
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6006
|
+
"input",
|
|
6007
|
+
{
|
|
6008
|
+
ref,
|
|
6009
|
+
id: inputId,
|
|
6010
|
+
readOnly,
|
|
6011
|
+
disabled,
|
|
6012
|
+
required,
|
|
6013
|
+
"aria-invalid": hasError || void 0,
|
|
6014
|
+
"aria-required": required || void 0,
|
|
6015
|
+
"aria-describedby": descriptionId,
|
|
6016
|
+
className: cn(
|
|
6017
|
+
"flex-1 min-w-0 bg-transparent text-sm text-grey-900 placeholder:text-grey-400 outline-none disabled:cursor-not-allowed",
|
|
6018
|
+
className
|
|
6019
|
+
),
|
|
6020
|
+
...rest
|
|
6021
|
+
}
|
|
6022
|
+
),
|
|
6023
|
+
addonRight && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 text-sm text-grey-500", children: addonRight }),
|
|
6024
|
+
trailingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-6 text-grey-400", children: resolveIcon(trailingIcon, "md") })
|
|
6025
|
+
]
|
|
6026
|
+
}
|
|
6027
|
+
),
|
|
6028
|
+
trailingAddon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6029
|
+
"div",
|
|
6030
|
+
{
|
|
6031
|
+
className: cn(
|
|
6032
|
+
"flex items-center gap-1 px-3 py-2 bg-grey-50 border border-l-0 border-grey-300 rounded-r-lg overflow-hidden shrink-0",
|
|
6033
|
+
"text-sm font-medium text-grey-700"
|
|
6034
|
+
),
|
|
6035
|
+
children: trailingAddon
|
|
6036
|
+
}
|
|
6037
|
+
)
|
|
6038
|
+
] }),
|
|
6039
|
+
bottomText && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6040
|
+
"p",
|
|
6041
|
+
{
|
|
6042
|
+
id: descriptionId,
|
|
6043
|
+
className: cn(
|
|
6044
|
+
"text-sm leading-[1.45]",
|
|
6045
|
+
hasError ? "text-error-400" : hasSuccess ? "text-success-400" : "text-grey-500"
|
|
6046
|
+
),
|
|
6047
|
+
children: bottomText
|
|
6048
|
+
}
|
|
6049
|
+
)
|
|
6050
|
+
] });
|
|
6051
|
+
}
|
|
6052
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-1 w-full", wrapperClassName), children: [
|
|
5786
6053
|
label && /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: inputId, className: "text-sm font-medium text-grey-900 leading-[1.45]", children: label }),
|
|
5787
6054
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
5788
6055
|
"div",
|
|
5789
6056
|
{
|
|
5790
6057
|
className: cn(
|
|
5791
|
-
"flex items-center
|
|
5792
|
-
size
|
|
6058
|
+
"flex items-center border rounded-lg overflow-hidden transition-colors",
|
|
6059
|
+
inputFrameSize[size],
|
|
6060
|
+
addonHeight[size],
|
|
5793
6061
|
readOnly ? "bg-grey-100 border-grey-300" : disabled ? "bg-grey-50 border-grey-200 cursor-not-allowed" : cn("bg-white dark:bg-grey-50", borderColor)
|
|
5794
6062
|
),
|
|
5795
6063
|
children: [
|
|
5796
|
-
leadingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-
|
|
6064
|
+
leadingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-6 text-grey-400", children: resolveIcon(leadingIcon, "md") }),
|
|
5797
6065
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5798
6066
|
"input",
|
|
5799
6067
|
{
|
|
@@ -5813,7 +6081,7 @@ var Input = react.forwardRef(
|
|
|
5813
6081
|
}
|
|
5814
6082
|
),
|
|
5815
6083
|
addonRight && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 text-sm text-grey-500", children: addonRight }),
|
|
5816
|
-
trailingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-
|
|
6084
|
+
trailingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-6 text-grey-400", children: resolveIcon(trailingIcon, "md") })
|
|
5817
6085
|
]
|
|
5818
6086
|
}
|
|
5819
6087
|
),
|
|
@@ -5823,7 +6091,7 @@ var Input = react.forwardRef(
|
|
|
5823
6091
|
id: descriptionId,
|
|
5824
6092
|
className: cn(
|
|
5825
6093
|
"text-sm leading-[1.45]",
|
|
5826
|
-
hasError ? "text-error-
|
|
6094
|
+
hasError ? "text-error-400" : hasSuccess ? "text-success-400" : "text-grey-500"
|
|
5827
6095
|
),
|
|
5828
6096
|
children: bottomText
|
|
5829
6097
|
}
|
|
@@ -5840,6 +6108,8 @@ function useTabsContext() {
|
|
|
5840
6108
|
}
|
|
5841
6109
|
function Tabs({
|
|
5842
6110
|
variant = "line",
|
|
6111
|
+
size = "sm",
|
|
6112
|
+
orientation = "horizontal",
|
|
5843
6113
|
value,
|
|
5844
6114
|
defaultValue = "",
|
|
5845
6115
|
onValueChange,
|
|
@@ -5863,17 +6133,20 @@ function Tabs({
|
|
|
5863
6133
|
tabsRef.current.delete(tabValue);
|
|
5864
6134
|
}
|
|
5865
6135
|
}, []);
|
|
6136
|
+
const isVertical = orientation === "vertical";
|
|
6137
|
+
const arrowNext = isVertical ? "ArrowDown" : "ArrowRight";
|
|
6138
|
+
const arrowPrev = isVertical ? "ArrowUp" : "ArrowLeft";
|
|
5866
6139
|
const handleKeyDown = (e) => {
|
|
5867
6140
|
const tabs = Array.from(tabsRef.current.entries()).filter(([, el]) => !el.disabled).map(([val, el]) => ({ value: val, element: el }));
|
|
5868
6141
|
if (tabs.length === 0) return;
|
|
5869
6142
|
const currentIndex = tabs.findIndex((t) => t.element === document.activeElement);
|
|
5870
6143
|
let nextIndex;
|
|
5871
6144
|
switch (e.key) {
|
|
5872
|
-
case
|
|
6145
|
+
case arrowNext:
|
|
5873
6146
|
e.preventDefault();
|
|
5874
6147
|
nextIndex = currentIndex < tabs.length - 1 ? currentIndex + 1 : 0;
|
|
5875
6148
|
break;
|
|
5876
|
-
case
|
|
6149
|
+
case arrowPrev:
|
|
5877
6150
|
e.preventDefault();
|
|
5878
6151
|
nextIndex = currentIndex > 0 ? currentIndex - 1 : tabs.length - 1;
|
|
5879
6152
|
break;
|
|
@@ -5895,31 +6168,93 @@ function Tabs({
|
|
|
5895
6168
|
}
|
|
5896
6169
|
};
|
|
5897
6170
|
const contextValue = react.useMemo(
|
|
5898
|
-
() => ({ activeValue, onSelect, variant, registerTab }),
|
|
5899
|
-
[activeValue, onSelect, variant, registerTab]
|
|
6171
|
+
() => ({ activeValue, onSelect, variant, size, orientation, registerTab }),
|
|
6172
|
+
[activeValue, onSelect, variant, size, orientation, registerTab]
|
|
5900
6173
|
);
|
|
5901
6174
|
return /* @__PURE__ */ jsxRuntime.jsx(TabsContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5902
6175
|
"div",
|
|
5903
6176
|
{
|
|
5904
6177
|
className: cn(
|
|
5905
6178
|
"inline-flex",
|
|
5906
|
-
|
|
6179
|
+
isVertical ? "flex-col" : "",
|
|
6180
|
+
variant === "line" && !isVertical && "border-b border-grey-200",
|
|
6181
|
+
variant === "line" && isVertical && "border-r border-grey-200",
|
|
6182
|
+
variant === "pill" && (isVertical ? "gap-1" : "gap-1"),
|
|
6183
|
+
variant === "segmented" && "border border-grey-100 rounded-lg p-0.5 gap-0.5 overflow-hidden",
|
|
5907
6184
|
className
|
|
5908
6185
|
),
|
|
5909
6186
|
role: "tablist",
|
|
6187
|
+
"aria-orientation": orientation,
|
|
5910
6188
|
onKeyDown: handleKeyDown,
|
|
5911
6189
|
children
|
|
5912
6190
|
}
|
|
5913
6191
|
) });
|
|
5914
6192
|
}
|
|
6193
|
+
var textSize = { sm: "text-xs", md: "text-sm", lg: "text-base" };
|
|
6194
|
+
var iconSize = { sm: "size-4", md: "size-5", lg: "size-6" };
|
|
6195
|
+
var iconResolveSize = { sm: "sm", md: "md", lg: "md" };
|
|
6196
|
+
var badgeText = { sm: "text-xs", md: "text-xs", lg: "text-sm" };
|
|
6197
|
+
var linePadding = {
|
|
6198
|
+
sm: "px-2 pt-1 pb-1.5",
|
|
6199
|
+
md: "px-3 pt-1.5 pb-2",
|
|
6200
|
+
lg: "px-4 pt-2 pb-2.5"
|
|
6201
|
+
};
|
|
6202
|
+
var pillPadding = {
|
|
6203
|
+
sm: "px-2 py-1",
|
|
6204
|
+
md: "px-3 py-1.5",
|
|
6205
|
+
lg: "px-4 py-2"
|
|
6206
|
+
};
|
|
6207
|
+
var segmentedPadding = {
|
|
6208
|
+
sm: "px-2 py-1",
|
|
6209
|
+
md: "px-3 py-1.5",
|
|
6210
|
+
lg: "px-4 py-2"
|
|
6211
|
+
};
|
|
5915
6212
|
function Tab({ value, icon, badge, disabled = false, children, className }) {
|
|
5916
|
-
const { activeValue, onSelect, variant, registerTab } = useTabsContext();
|
|
6213
|
+
const { activeValue, onSelect, variant, size, orientation, registerTab } = useTabsContext();
|
|
5917
6214
|
const isActive = activeValue === value;
|
|
5918
6215
|
const buttonRef = react.useRef(null);
|
|
6216
|
+
const isVertical = orientation === "vertical";
|
|
5919
6217
|
react.useEffect(() => {
|
|
5920
6218
|
registerTab(value, buttonRef.current);
|
|
5921
6219
|
return () => registerTab(value, null);
|
|
5922
6220
|
}, [value, registerTab]);
|
|
6221
|
+
const resolvedIcon = icon ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("shrink-0", iconSize[size]), children: resolveIcon(icon, iconResolveSize[size]) }) : null;
|
|
6222
|
+
const badgeEl = badge !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
6223
|
+
"span",
|
|
6224
|
+
{
|
|
6225
|
+
className: cn(
|
|
6226
|
+
"inline-flex items-center justify-center px-1.5 rounded-full font-medium tracking-tight",
|
|
6227
|
+
badgeText[size],
|
|
6228
|
+
variant === "segmented" && isActive ? "bg-primary-500 text-white" : isActive ? "bg-primary-50 text-primary-500" : disabled ? "bg-grey-200 text-grey-400" : "bg-grey-100 text-grey-500"
|
|
6229
|
+
),
|
|
6230
|
+
children: badge
|
|
6231
|
+
}
|
|
6232
|
+
) : null;
|
|
6233
|
+
if (variant === "segmented") {
|
|
6234
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6235
|
+
"button",
|
|
6236
|
+
{
|
|
6237
|
+
ref: buttonRef,
|
|
6238
|
+
role: "tab",
|
|
6239
|
+
"aria-selected": isActive,
|
|
6240
|
+
tabIndex: isActive ? 0 : -1,
|
|
6241
|
+
disabled,
|
|
6242
|
+
onClick: () => !disabled && onSelect(value),
|
|
6243
|
+
className: cn(
|
|
6244
|
+
"inline-flex items-center gap-1.5 rounded-md overflow-hidden transition-colors cursor-pointer",
|
|
6245
|
+
segmentedPadding[size],
|
|
6246
|
+
textSize[size],
|
|
6247
|
+
isActive ? "bg-primary-50 text-grey-900" : disabled ? "text-grey-300 cursor-not-allowed" : "text-grey-500 hover:bg-grey-50",
|
|
6248
|
+
className
|
|
6249
|
+
),
|
|
6250
|
+
children: [
|
|
6251
|
+
resolvedIcon,
|
|
6252
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-normal leading-[1.45] whitespace-nowrap", children }),
|
|
6253
|
+
badgeEl
|
|
6254
|
+
]
|
|
6255
|
+
}
|
|
6256
|
+
);
|
|
6257
|
+
}
|
|
5923
6258
|
if (variant === "pill") {
|
|
5924
6259
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5925
6260
|
"button",
|
|
@@ -5931,78 +6266,821 @@ function Tab({ value, icon, badge, disabled = false, children, className }) {
|
|
|
5931
6266
|
disabled,
|
|
5932
6267
|
onClick: () => !disabled && onSelect(value),
|
|
5933
6268
|
className: cn(
|
|
5934
|
-
"inline-flex items-center gap-
|
|
5935
|
-
|
|
6269
|
+
"inline-flex items-center gap-1.5 rounded-full transition-colors cursor-pointer",
|
|
6270
|
+
pillPadding[size],
|
|
6271
|
+
textSize[size],
|
|
6272
|
+
isActive ? "bg-primary-50 text-primary-400" : disabled ? "text-grey-300 cursor-not-allowed" : "text-grey-500 hover:bg-grey-50",
|
|
5936
6273
|
className
|
|
5937
6274
|
),
|
|
5938
6275
|
children: [
|
|
5939
|
-
|
|
5940
|
-
children,
|
|
5941
|
-
|
|
6276
|
+
resolvedIcon,
|
|
6277
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-normal leading-[1.45] whitespace-nowrap", children }),
|
|
6278
|
+
badgeEl
|
|
6279
|
+
]
|
|
6280
|
+
}
|
|
6281
|
+
);
|
|
6282
|
+
}
|
|
6283
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6284
|
+
"button",
|
|
6285
|
+
{
|
|
6286
|
+
ref: buttonRef,
|
|
6287
|
+
role: "tab",
|
|
6288
|
+
"aria-selected": isActive,
|
|
6289
|
+
tabIndex: isActive ? 0 : -1,
|
|
6290
|
+
disabled,
|
|
6291
|
+
onClick: () => !disabled && onSelect(value),
|
|
6292
|
+
className: cn(
|
|
6293
|
+
"relative inline-flex cursor-pointer",
|
|
6294
|
+
isVertical ? "flex-row" : "flex-col items-center",
|
|
6295
|
+
disabled && "cursor-not-allowed",
|
|
6296
|
+
className
|
|
6297
|
+
),
|
|
6298
|
+
children: [
|
|
6299
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-1.5", linePadding[size]), children: [
|
|
6300
|
+
resolvedIcon,
|
|
6301
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5942
6302
|
"span",
|
|
5943
6303
|
{
|
|
5944
6304
|
className: cn(
|
|
5945
|
-
"
|
|
5946
|
-
|
|
6305
|
+
"font-normal leading-[1.45] whitespace-nowrap transition-colors",
|
|
6306
|
+
textSize[size],
|
|
6307
|
+
isActive ? "text-grey-900" : disabled ? "text-grey-300" : "text-grey-500"
|
|
5947
6308
|
),
|
|
5948
|
-
children
|
|
6309
|
+
children
|
|
6310
|
+
}
|
|
6311
|
+
),
|
|
6312
|
+
badgeEl
|
|
6313
|
+
] }),
|
|
6314
|
+
isVertical ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
6315
|
+
"div",
|
|
6316
|
+
{
|
|
6317
|
+
className: cn(
|
|
6318
|
+
"w-0.5 self-stretch transition-colors",
|
|
6319
|
+
isActive ? "bg-primary-400" : "bg-grey-100"
|
|
6320
|
+
)
|
|
6321
|
+
}
|
|
6322
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
6323
|
+
"div",
|
|
6324
|
+
{
|
|
6325
|
+
className: cn(
|
|
6326
|
+
"h-0.5 w-full transition-colors",
|
|
6327
|
+
isActive ? "bg-primary-400" : "bg-grey-100"
|
|
6328
|
+
)
|
|
6329
|
+
}
|
|
6330
|
+
)
|
|
6331
|
+
]
|
|
6332
|
+
}
|
|
6333
|
+
);
|
|
6334
|
+
}
|
|
6335
|
+
|
|
6336
|
+
// src/components/Chart/theme.ts
|
|
6337
|
+
var chartColors = {
|
|
6338
|
+
primary: [
|
|
6339
|
+
"#F56630",
|
|
6340
|
+
// primary-400
|
|
6341
|
+
"#FA9874",
|
|
6342
|
+
// primary-200
|
|
6343
|
+
"#FCB59A",
|
|
6344
|
+
// primary-100
|
|
6345
|
+
"#FCD2C2",
|
|
6346
|
+
// primary-75
|
|
6347
|
+
"#FFECE5"
|
|
6348
|
+
// primary-50
|
|
6349
|
+
],
|
|
6350
|
+
semantic: [
|
|
6351
|
+
"#F56630",
|
|
6352
|
+
// primary-400 (orange)
|
|
6353
|
+
"#0F973D",
|
|
6354
|
+
// success-400 (green)
|
|
6355
|
+
"#1671D9",
|
|
6356
|
+
// secondary-400 (blue)
|
|
6357
|
+
"#F3A218",
|
|
6358
|
+
// warning-400 (amber)
|
|
6359
|
+
"#D42620",
|
|
6360
|
+
// error-400 (red)
|
|
6361
|
+
"#0BA5EC"
|
|
6362
|
+
// info-400 (cyan)
|
|
6363
|
+
],
|
|
6364
|
+
extended: [
|
|
6365
|
+
"#F56630",
|
|
6366
|
+
"#0F973D",
|
|
6367
|
+
"#1671D9",
|
|
6368
|
+
"#F3A218",
|
|
6369
|
+
"#D42620",
|
|
6370
|
+
"#0BA5EC",
|
|
6371
|
+
"#475CCC",
|
|
6372
|
+
// indigo
|
|
6373
|
+
"#8D8484",
|
|
6374
|
+
// office-brown
|
|
6375
|
+
"#F77A4A",
|
|
6376
|
+
// primary-300
|
|
6377
|
+
"#40B869"
|
|
6378
|
+
// success-300
|
|
6379
|
+
],
|
|
6380
|
+
grey: {
|
|
6381
|
+
50: "#F9FAFB",
|
|
6382
|
+
100: "#F0F2F5",
|
|
6383
|
+
200: "#E4E7EC",
|
|
6384
|
+
300: "#D0D5DD",
|
|
6385
|
+
400: "#98A2B3",
|
|
6386
|
+
500: "#667185",
|
|
6387
|
+
700: "#344054",
|
|
6388
|
+
900: "#101928"
|
|
6389
|
+
}
|
|
6390
|
+
};
|
|
6391
|
+
var chartFont = {
|
|
6392
|
+
family: "'Inter', ui-sans-serif, system-ui, sans-serif",
|
|
6393
|
+
size: 12,
|
|
6394
|
+
weight: "normal"
|
|
6395
|
+
};
|
|
6396
|
+
function hexToRgba(hex, alpha) {
|
|
6397
|
+
const r = parseInt(hex.slice(1, 3), 16);
|
|
6398
|
+
const g = parseInt(hex.slice(3, 5), 16);
|
|
6399
|
+
const b = parseInt(hex.slice(5, 7), 16);
|
|
6400
|
+
return `rgba(${r}, ${g}, ${b}, ${alpha})`;
|
|
6401
|
+
}
|
|
6402
|
+
function createGradientFill(ctx, color, height) {
|
|
6403
|
+
const gradient = ctx.createLinearGradient(0, 0, 0, height);
|
|
6404
|
+
gradient.addColorStop(0, hexToRgba(color, 0.2));
|
|
6405
|
+
gradient.addColorStop(1, hexToRgba(color, 0.01));
|
|
6406
|
+
return gradient;
|
|
6407
|
+
}
|
|
6408
|
+
chart_js.Chart.register(
|
|
6409
|
+
chart_js.CategoryScale,
|
|
6410
|
+
chart_js.LinearScale,
|
|
6411
|
+
chart_js.PointElement,
|
|
6412
|
+
chart_js.LineElement,
|
|
6413
|
+
chart_js.BarElement,
|
|
6414
|
+
chart_js.ArcElement,
|
|
6415
|
+
chart_js.RadialLinearScale,
|
|
6416
|
+
chart_js.Filler,
|
|
6417
|
+
chart_js.Tooltip,
|
|
6418
|
+
chart_js.Legend
|
|
6419
|
+
);
|
|
6420
|
+
function getDefaultOptions(type) {
|
|
6421
|
+
const base = {
|
|
6422
|
+
responsive: true,
|
|
6423
|
+
maintainAspectRatio: false,
|
|
6424
|
+
plugins: {
|
|
6425
|
+
legend: {
|
|
6426
|
+
display: true,
|
|
6427
|
+
position: "bottom",
|
|
6428
|
+
labels: {
|
|
6429
|
+
font: { ...chartFont, size: 12 },
|
|
6430
|
+
color: chartColors.grey[500],
|
|
6431
|
+
padding: 16,
|
|
6432
|
+
usePointStyle: true,
|
|
6433
|
+
pointStyle: "circle",
|
|
6434
|
+
boxWidth: 8,
|
|
6435
|
+
boxHeight: 8
|
|
6436
|
+
}
|
|
6437
|
+
},
|
|
6438
|
+
tooltip: {
|
|
6439
|
+
backgroundColor: chartColors.grey[900],
|
|
6440
|
+
titleFont: { ...chartFont, weight: "bold", size: 13 },
|
|
6441
|
+
bodyFont: { ...chartFont, size: 12 },
|
|
6442
|
+
cornerRadius: 8,
|
|
6443
|
+
padding: 12,
|
|
6444
|
+
boxPadding: 6,
|
|
6445
|
+
usePointStyle: true
|
|
6446
|
+
}
|
|
6447
|
+
}
|
|
6448
|
+
};
|
|
6449
|
+
if (type === "line" || type === "bar" || type === "scatter" || type === "bubble") {
|
|
6450
|
+
base.scales = {
|
|
6451
|
+
x: {
|
|
6452
|
+
grid: { color: chartColors.grey[100], drawTicks: false },
|
|
6453
|
+
ticks: { font: chartFont, color: chartColors.grey[400], padding: 8 },
|
|
6454
|
+
border: { display: false }
|
|
6455
|
+
},
|
|
6456
|
+
y: {
|
|
6457
|
+
grid: { color: chartColors.grey[100], drawTicks: false },
|
|
6458
|
+
ticks: { font: chartFont, color: chartColors.grey[400], padding: 8 },
|
|
6459
|
+
border: { display: false }
|
|
6460
|
+
}
|
|
6461
|
+
};
|
|
6462
|
+
}
|
|
6463
|
+
if (type === "line") {
|
|
6464
|
+
base.elements = {
|
|
6465
|
+
line: { tension: 0.4, borderWidth: 2 },
|
|
6466
|
+
point: { radius: 0, hoverRadius: 5, hitRadius: 20 }
|
|
6467
|
+
};
|
|
6468
|
+
}
|
|
6469
|
+
if (type === "bar") {
|
|
6470
|
+
base.elements = {
|
|
6471
|
+
bar: { borderRadius: 4 }
|
|
6472
|
+
};
|
|
6473
|
+
}
|
|
6474
|
+
if (type === "radar") {
|
|
6475
|
+
base.scales = {
|
|
6476
|
+
r: {
|
|
6477
|
+
grid: { color: chartColors.grey[200] },
|
|
6478
|
+
angleLines: { color: chartColors.grey[200] },
|
|
6479
|
+
pointLabels: { font: { ...chartFont, size: 11 }, color: chartColors.grey[500] },
|
|
6480
|
+
ticks: { display: false }
|
|
6481
|
+
}
|
|
6482
|
+
};
|
|
6483
|
+
}
|
|
6484
|
+
if (type === "polar-area") {
|
|
6485
|
+
base.scales = {
|
|
6486
|
+
r: {
|
|
6487
|
+
grid: { color: chartColors.grey[200] },
|
|
6488
|
+
ticks: { display: false }
|
|
6489
|
+
}
|
|
6490
|
+
};
|
|
6491
|
+
}
|
|
6492
|
+
return base;
|
|
6493
|
+
}
|
|
6494
|
+
function deepMerge(target, source) {
|
|
6495
|
+
const output = { ...target };
|
|
6496
|
+
for (const key of Object.keys(source)) {
|
|
6497
|
+
if (source[key] && typeof source[key] === "object" && !Array.isArray(source[key]) && target[key] && typeof target[key] === "object") {
|
|
6498
|
+
output[key] = deepMerge(target[key], source[key]);
|
|
6499
|
+
} else {
|
|
6500
|
+
output[key] = source[key];
|
|
6501
|
+
}
|
|
6502
|
+
}
|
|
6503
|
+
return output;
|
|
6504
|
+
}
|
|
6505
|
+
var chartComponentMap = {
|
|
6506
|
+
line: reactChartjs2.Line,
|
|
6507
|
+
bar: reactChartjs2.Bar,
|
|
6508
|
+
pie: reactChartjs2.Pie,
|
|
6509
|
+
doughnut: reactChartjs2.Doughnut,
|
|
6510
|
+
radar: reactChartjs2.Radar,
|
|
6511
|
+
scatter: reactChartjs2.Scatter,
|
|
6512
|
+
bubble: reactChartjs2.Bubble,
|
|
6513
|
+
"polar-area": reactChartjs2.PolarArea
|
|
6514
|
+
};
|
|
6515
|
+
var RaydenChart = react.forwardRef(
|
|
6516
|
+
({ type, data, options, height = 300, width, className, ...rest }, ref) => {
|
|
6517
|
+
const mergedOptions = react.useMemo(
|
|
6518
|
+
() => deepMerge(getDefaultOptions(type), options ?? {}),
|
|
6519
|
+
[type, options]
|
|
6520
|
+
);
|
|
6521
|
+
const ChartComponent = chartComponentMap[type];
|
|
6522
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6523
|
+
"div",
|
|
6524
|
+
{
|
|
6525
|
+
ref,
|
|
6526
|
+
className: cn("relative", className),
|
|
6527
|
+
style: { height, width },
|
|
6528
|
+
...rest,
|
|
6529
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ChartComponent, { data, options: mergedOptions })
|
|
6530
|
+
}
|
|
6531
|
+
);
|
|
6532
|
+
}
|
|
6533
|
+
);
|
|
6534
|
+
RaydenChart.displayName = "RaydenChart";
|
|
6535
|
+
function MinusIcon({ className }) {
|
|
6536
|
+
return /* @__PURE__ */ jsxRuntime.jsx("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 12h14" }) });
|
|
6537
|
+
}
|
|
6538
|
+
function PlusIcon({ className }) {
|
|
6539
|
+
return /* @__PURE__ */ jsxRuntime.jsx("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 5v14M5 12h14" }) });
|
|
6540
|
+
}
|
|
6541
|
+
var buttonSize = {
|
|
6542
|
+
sm: "size-8 rounded-[10px]",
|
|
6543
|
+
md: "size-10 rounded-xl",
|
|
6544
|
+
lg: "size-12 rounded-xl"
|
|
6545
|
+
};
|
|
6546
|
+
var iconSize2 = {
|
|
6547
|
+
sm: "size-4",
|
|
6548
|
+
md: "size-5",
|
|
6549
|
+
lg: "size-6"
|
|
6550
|
+
};
|
|
6551
|
+
var containerShape = {
|
|
6552
|
+
rounded: { sm: "rounded-[10px]", md: "rounded-xl", lg: "rounded-xl" },
|
|
6553
|
+
block: { sm: "", md: "", lg: "" },
|
|
6554
|
+
pill: { sm: "rounded-full", md: "rounded-[28px]", lg: "rounded-[28px]" }
|
|
6555
|
+
};
|
|
6556
|
+
var valueText = {
|
|
6557
|
+
sm: "text-sm w-7",
|
|
6558
|
+
md: "text-sm w-7",
|
|
6559
|
+
lg: "text-base w-7"
|
|
6560
|
+
};
|
|
6561
|
+
var Counter = react.forwardRef(
|
|
6562
|
+
({
|
|
6563
|
+
value: controlledValue,
|
|
6564
|
+
onChange,
|
|
6565
|
+
defaultValue = 0,
|
|
6566
|
+
size = "sm",
|
|
6567
|
+
shape = "rounded",
|
|
6568
|
+
min = 0,
|
|
6569
|
+
max = Infinity,
|
|
6570
|
+
step = 1,
|
|
6571
|
+
disabled = false,
|
|
6572
|
+
className,
|
|
6573
|
+
...rest
|
|
6574
|
+
}, ref) => {
|
|
6575
|
+
const [uncontrolled, setUncontrolled] = react.useState(defaultValue);
|
|
6576
|
+
const val = controlledValue ?? uncontrolled;
|
|
6577
|
+
const update = react.useCallback(
|
|
6578
|
+
(next) => {
|
|
6579
|
+
const clamped = Math.min(max, Math.max(min, next));
|
|
6580
|
+
if (controlledValue === void 0) setUncontrolled(clamped);
|
|
6581
|
+
onChange?.(clamped);
|
|
6582
|
+
},
|
|
6583
|
+
[controlledValue, onChange, min, max]
|
|
6584
|
+
);
|
|
6585
|
+
const canDecrement = val > min;
|
|
6586
|
+
const canIncrement = val < max;
|
|
6587
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6588
|
+
"div",
|
|
6589
|
+
{
|
|
6590
|
+
ref,
|
|
6591
|
+
className: cn(
|
|
6592
|
+
"inline-flex items-center border border-grey-300 overflow-hidden",
|
|
6593
|
+
containerShape[shape][size],
|
|
6594
|
+
disabled && "opacity-50",
|
|
6595
|
+
className
|
|
6596
|
+
),
|
|
6597
|
+
...rest,
|
|
6598
|
+
children: [
|
|
6599
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6600
|
+
"button",
|
|
6601
|
+
{
|
|
6602
|
+
type: "button",
|
|
6603
|
+
disabled: disabled || !canDecrement,
|
|
6604
|
+
onClick: () => update(val - step),
|
|
6605
|
+
className: cn(
|
|
6606
|
+
"flex items-center justify-center p-2.5 text-grey-900 cursor-pointer transition-colors hover:bg-grey-100",
|
|
6607
|
+
buttonSize[size],
|
|
6608
|
+
(disabled || !canDecrement) && "text-grey-300 cursor-not-allowed hover:bg-transparent"
|
|
6609
|
+
),
|
|
6610
|
+
"aria-label": "Decrease",
|
|
6611
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(MinusIcon, { className: iconSize2[size] })
|
|
6612
|
+
}
|
|
6613
|
+
),
|
|
6614
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6615
|
+
"span",
|
|
6616
|
+
{
|
|
6617
|
+
className: cn(
|
|
6618
|
+
"font-medium text-grey-900 text-center leading-[1.45]",
|
|
6619
|
+
valueText[size]
|
|
6620
|
+
),
|
|
6621
|
+
children: val
|
|
6622
|
+
}
|
|
6623
|
+
) }),
|
|
6624
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6625
|
+
"button",
|
|
6626
|
+
{
|
|
6627
|
+
type: "button",
|
|
6628
|
+
disabled: disabled || !canIncrement,
|
|
6629
|
+
onClick: () => update(val + step),
|
|
6630
|
+
className: cn(
|
|
6631
|
+
"flex items-center justify-center p-2.5 text-grey-900 cursor-pointer transition-colors hover:bg-grey-100",
|
|
6632
|
+
buttonSize[size],
|
|
6633
|
+
(disabled || !canIncrement) && "text-grey-300 cursor-not-allowed hover:bg-transparent"
|
|
6634
|
+
),
|
|
6635
|
+
"aria-label": "Increase",
|
|
6636
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(PlusIcon, { className: iconSize2[size] })
|
|
5949
6637
|
}
|
|
5950
6638
|
)
|
|
5951
6639
|
]
|
|
5952
6640
|
}
|
|
5953
6641
|
);
|
|
5954
6642
|
}
|
|
5955
|
-
|
|
5956
|
-
|
|
5957
|
-
|
|
5958
|
-
|
|
5959
|
-
|
|
5960
|
-
|
|
5961
|
-
|
|
5962
|
-
|
|
5963
|
-
|
|
5964
|
-
|
|
5965
|
-
|
|
5966
|
-
|
|
5967
|
-
|
|
5968
|
-
|
|
5969
|
-
|
|
5970
|
-
|
|
5971
|
-
|
|
5972
|
-
|
|
5973
|
-
|
|
5974
|
-
|
|
5975
|
-
|
|
5976
|
-
|
|
5977
|
-
|
|
5978
|
-
|
|
5979
|
-
|
|
5980
|
-
|
|
5981
|
-
|
|
5982
|
-
|
|
5983
|
-
|
|
5984
|
-
|
|
5985
|
-
|
|
5986
|
-
|
|
5987
|
-
|
|
5988
|
-
|
|
5989
|
-
|
|
5990
|
-
|
|
5991
|
-
|
|
5992
|
-
|
|
5993
|
-
|
|
5994
|
-
|
|
5995
|
-
|
|
5996
|
-
|
|
5997
|
-
|
|
5998
|
-
|
|
5999
|
-
|
|
6000
|
-
|
|
6001
|
-
|
|
6002
|
-
|
|
6003
|
-
|
|
6004
|
-
|
|
6005
|
-
|
|
6643
|
+
);
|
|
6644
|
+
Counter.displayName = "Counter";
|
|
6645
|
+
var ncSize = {
|
|
6646
|
+
sm: { container: "p-1 rounded-[4px]", text: "text-xs size-4" },
|
|
6647
|
+
md: { container: "p-1 rounded-md size-7", text: "text-sm" },
|
|
6648
|
+
lg: { container: "p-2 rounded-md size-9", text: "text-base" }
|
|
6649
|
+
};
|
|
6650
|
+
var ncColor = {
|
|
6651
|
+
orange: { bg: "bg-primary-400", text: "text-white" },
|
|
6652
|
+
red: { bg: "bg-error-400", text: "text-white" },
|
|
6653
|
+
grey: { bg: "bg-grey-300", text: "text-white" },
|
|
6654
|
+
white: { bg: "bg-white dark:bg-grey-50", text: "text-grey-600" }
|
|
6655
|
+
};
|
|
6656
|
+
var NumberCounter = react.forwardRef(
|
|
6657
|
+
({ value, size = "sm", color = "orange", className, ...rest }, ref) => {
|
|
6658
|
+
const s = ncSize[size];
|
|
6659
|
+
const c = ncColor[color];
|
|
6660
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6661
|
+
"div",
|
|
6662
|
+
{
|
|
6663
|
+
ref,
|
|
6664
|
+
className: cn(
|
|
6665
|
+
"inline-flex items-center justify-center",
|
|
6666
|
+
s.container,
|
|
6667
|
+
c.bg,
|
|
6668
|
+
className
|
|
6669
|
+
),
|
|
6670
|
+
...rest,
|
|
6671
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-semibold text-center leading-[1.45] tracking-tight", s.text, c.text), children: value })
|
|
6672
|
+
}
|
|
6673
|
+
);
|
|
6674
|
+
}
|
|
6675
|
+
);
|
|
6676
|
+
NumberCounter.displayName = "NumberCounter";
|
|
6677
|
+
var MONTH_NAMES = [
|
|
6678
|
+
"January",
|
|
6679
|
+
"February",
|
|
6680
|
+
"March",
|
|
6681
|
+
"April",
|
|
6682
|
+
"May",
|
|
6683
|
+
"June",
|
|
6684
|
+
"July",
|
|
6685
|
+
"August",
|
|
6686
|
+
"September",
|
|
6687
|
+
"October",
|
|
6688
|
+
"November",
|
|
6689
|
+
"December"
|
|
6690
|
+
];
|
|
6691
|
+
var DAY_LABELS = ["M", "T", "W", "T", "F", "S", "S"];
|
|
6692
|
+
function getDaysInMonth(year, month) {
|
|
6693
|
+
return new Date(year, month + 1, 0).getDate();
|
|
6694
|
+
}
|
|
6695
|
+
function getFirstDayOfWeek(year, month) {
|
|
6696
|
+
const day = new Date(year, month, 1).getDay();
|
|
6697
|
+
return day === 0 ? 6 : day - 1;
|
|
6698
|
+
}
|
|
6699
|
+
function isSameDay(a, b) {
|
|
6700
|
+
if (!a || !b) return false;
|
|
6701
|
+
return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
|
|
6702
|
+
}
|
|
6703
|
+
function isToday(date) {
|
|
6704
|
+
return isSameDay(date, /* @__PURE__ */ new Date());
|
|
6705
|
+
}
|
|
6706
|
+
function isBetween(date, start, end) {
|
|
6707
|
+
if (!start || !end) return false;
|
|
6708
|
+
const t = date.getTime();
|
|
6709
|
+
const s = Math.min(start.getTime(), end.getTime());
|
|
6710
|
+
const e = Math.max(start.getTime(), end.getTime());
|
|
6711
|
+
return t > s && t < e;
|
|
6712
|
+
}
|
|
6713
|
+
function isDateDisabled(date, minDate, maxDate) {
|
|
6714
|
+
if (minDate && date < minDate) return true;
|
|
6715
|
+
if (maxDate && date > maxDate) return true;
|
|
6716
|
+
return false;
|
|
6717
|
+
}
|
|
6718
|
+
function ChevronLeft({ className }) {
|
|
6719
|
+
return /* @__PURE__ */ jsxRuntime.jsx("svg", { className, viewBox: "0 0 14 14", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 3L5 7l4 4" }) });
|
|
6720
|
+
}
|
|
6721
|
+
function ChevronRight({ className }) {
|
|
6722
|
+
return /* @__PURE__ */ jsxRuntime.jsx("svg", { className, viewBox: "0 0 14 14", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 3l4 4-4 4" }) });
|
|
6723
|
+
}
|
|
6724
|
+
function ChevronDown2({ className }) {
|
|
6725
|
+
return /* @__PURE__ */ jsxRuntime.jsx("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 9l6 6 6-6" }) });
|
|
6726
|
+
}
|
|
6727
|
+
function DayCell({ day, state, onClick }) {
|
|
6728
|
+
const isInteractive = state !== "disabled";
|
|
6729
|
+
const cellClasses = cn(
|
|
6730
|
+
"flex items-center justify-center w-10 h-10 text-sm font-medium relative select-none",
|
|
6731
|
+
state === "selected" && "bg-primary-400 text-white rounded-[10px]",
|
|
6732
|
+
state === "start-range" && "bg-primary-400 text-white rounded-l-[10px]",
|
|
6733
|
+
state === "end-range" && "bg-primary-400 text-white rounded-r-[10px]",
|
|
6734
|
+
state === "mid-range" && "bg-primary-50 text-primary-400",
|
|
6735
|
+
state === "disabled" && "text-grey-300",
|
|
6736
|
+
state === "default" && "text-grey-900 hover:bg-grey-75 rounded-[10px]",
|
|
6737
|
+
state === "today" && "text-grey-900 hover:bg-grey-75 rounded-[10px]",
|
|
6738
|
+
isInteractive && "cursor-pointer"
|
|
6739
|
+
);
|
|
6740
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6741
|
+
"button",
|
|
6742
|
+
{
|
|
6743
|
+
type: "button",
|
|
6744
|
+
className: cellClasses,
|
|
6745
|
+
onClick: isInteractive ? onClick : void 0,
|
|
6746
|
+
disabled: !isInteractive,
|
|
6747
|
+
tabIndex: isInteractive ? 0 : -1,
|
|
6748
|
+
children: [
|
|
6749
|
+
day,
|
|
6750
|
+
state === "today" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute bottom-[5px] left-1/2 -translate-x-1/2 size-1 rounded-full bg-primary-400" })
|
|
6751
|
+
]
|
|
6752
|
+
}
|
|
6753
|
+
);
|
|
6754
|
+
}
|
|
6755
|
+
function MonthGrid({
|
|
6756
|
+
year,
|
|
6757
|
+
month,
|
|
6758
|
+
selectedDate,
|
|
6759
|
+
rangeStart,
|
|
6760
|
+
rangeEnd,
|
|
6761
|
+
isRange,
|
|
6762
|
+
minDate,
|
|
6763
|
+
maxDate,
|
|
6764
|
+
onDayClick
|
|
6765
|
+
}) {
|
|
6766
|
+
const daysInMonth = getDaysInMonth(year, month);
|
|
6767
|
+
const firstDay = getFirstDayOfWeek(year, month);
|
|
6768
|
+
const prevMonthDays = getDaysInMonth(year, month - 1);
|
|
6769
|
+
const cells = [];
|
|
6770
|
+
for (let i = firstDay - 1; i >= 0; i--) {
|
|
6771
|
+
const d = prevMonthDays - i;
|
|
6772
|
+
cells.push({ day: d, state: "disabled", date: new Date(year, month - 1, d) });
|
|
6773
|
+
}
|
|
6774
|
+
for (let d = 1; d <= daysInMonth; d++) {
|
|
6775
|
+
const date = new Date(year, month, d);
|
|
6776
|
+
let state = "default";
|
|
6777
|
+
if (isDateDisabled(date, minDate, maxDate)) {
|
|
6778
|
+
state = "disabled";
|
|
6779
|
+
} else if (isRange && rangeStart && rangeEnd) {
|
|
6780
|
+
const start = rangeStart.getTime() <= rangeEnd.getTime() ? rangeStart : rangeEnd;
|
|
6781
|
+
const end = rangeStart.getTime() <= rangeEnd.getTime() ? rangeEnd : rangeStart;
|
|
6782
|
+
if (isSameDay(date, start)) state = "start-range";
|
|
6783
|
+
else if (isSameDay(date, end)) state = "end-range";
|
|
6784
|
+
else if (isBetween(date, start, end)) state = "mid-range";
|
|
6785
|
+
} else if (isRange && rangeStart && !rangeEnd && isSameDay(date, rangeStart)) {
|
|
6786
|
+
state = "selected";
|
|
6787
|
+
} else if (!isRange && isSameDay(date, selectedDate)) {
|
|
6788
|
+
state = "selected";
|
|
6789
|
+
}
|
|
6790
|
+
if (state === "default" && isToday(date)) {
|
|
6791
|
+
state = "today";
|
|
6792
|
+
}
|
|
6793
|
+
cells.push({ day: d, state, date });
|
|
6794
|
+
}
|
|
6795
|
+
const remaining = 42 - cells.length;
|
|
6796
|
+
for (let d = 1; d <= remaining; d++) {
|
|
6797
|
+
cells.push({ day: d, state: "disabled", date: new Date(year, month + 1, d) });
|
|
6798
|
+
}
|
|
6799
|
+
const rows = [];
|
|
6800
|
+
for (let i = 0; i < cells.length; i += 7) {
|
|
6801
|
+
rows.push(cells.slice(i, i + 7));
|
|
6802
|
+
}
|
|
6803
|
+
if (rows.length === 6 && rows[5].every((c) => c.state === "disabled")) {
|
|
6804
|
+
rows.pop();
|
|
6805
|
+
}
|
|
6806
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
|
|
6807
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-10 items-center", children: DAY_LABELS.map((label, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
6808
|
+
"div",
|
|
6809
|
+
{
|
|
6810
|
+
className: "flex items-center justify-center w-10 h-10 text-sm font-medium text-grey-400",
|
|
6811
|
+
children: label
|
|
6812
|
+
},
|
|
6813
|
+
i
|
|
6814
|
+
)) }),
|
|
6815
|
+
rows.map((row, ri) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-10 items-center", children: row.map((cell, ci) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
6816
|
+
DayCell,
|
|
6817
|
+
{
|
|
6818
|
+
day: cell.day,
|
|
6819
|
+
state: cell.state,
|
|
6820
|
+
onClick: () => onDayClick(cell.date)
|
|
6821
|
+
},
|
|
6822
|
+
ci
|
|
6823
|
+
)) }, ri))
|
|
6824
|
+
] });
|
|
6825
|
+
}
|
|
6826
|
+
function YearGrid({ baseYear, selectedYear, onYearClick }) {
|
|
6827
|
+
const years = [];
|
|
6828
|
+
for (let i = 0; i < 20; i++) {
|
|
6829
|
+
years.push(baseYear + i);
|
|
6830
|
+
}
|
|
6831
|
+
const rows = [];
|
|
6832
|
+
for (let i = 0; i < years.length; i += 4) {
|
|
6833
|
+
rows.push(years.slice(i, i + 4));
|
|
6834
|
+
}
|
|
6835
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-2 w-full", children: rows.map((row, ri) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4 h-10 items-center w-full", children: row.map((year) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
6836
|
+
"button",
|
|
6837
|
+
{
|
|
6838
|
+
type: "button",
|
|
6839
|
+
className: cn(
|
|
6840
|
+
"flex-1 flex items-center justify-center py-2.5 px-4 rounded-[10px] text-sm font-medium cursor-pointer select-none",
|
|
6841
|
+
year === selectedYear ? "bg-primary-400 text-white" : "text-grey-900 hover:bg-grey-75"
|
|
6842
|
+
),
|
|
6843
|
+
onClick: () => onYearClick(year),
|
|
6844
|
+
children: year
|
|
6845
|
+
},
|
|
6846
|
+
year
|
|
6847
|
+
)) }, ri)) });
|
|
6848
|
+
}
|
|
6849
|
+
function NavButton({
|
|
6850
|
+
direction,
|
|
6851
|
+
onClick,
|
|
6852
|
+
hidden
|
|
6853
|
+
}) {
|
|
6854
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6855
|
+
"button",
|
|
6856
|
+
{
|
|
6857
|
+
type: "button",
|
|
6858
|
+
onClick,
|
|
6859
|
+
className: cn(
|
|
6860
|
+
"flex items-center justify-center p-2 rounded-lg bg-grey-75 hover:bg-grey-200 transition-colors cursor-pointer",
|
|
6861
|
+
hidden && "opacity-0 pointer-events-none"
|
|
6862
|
+
),
|
|
6863
|
+
children: direction === "left" ? /* @__PURE__ */ jsxRuntime.jsx(ChevronLeft, { className: "size-3.5 text-grey-700" }) : /* @__PURE__ */ jsxRuntime.jsx(ChevronRight, { className: "size-3.5 text-grey-700" })
|
|
6864
|
+
}
|
|
6865
|
+
);
|
|
6866
|
+
}
|
|
6867
|
+
var DatePicker = react.forwardRef(
|
|
6868
|
+
({
|
|
6869
|
+
mode = "single",
|
|
6870
|
+
value,
|
|
6871
|
+
rangeValue,
|
|
6872
|
+
onChange,
|
|
6873
|
+
onRangeChange,
|
|
6874
|
+
showFooter = false,
|
|
6875
|
+
onDone,
|
|
6876
|
+
onClear,
|
|
6877
|
+
minDate,
|
|
6878
|
+
maxDate,
|
|
6879
|
+
className,
|
|
6880
|
+
...rest
|
|
6881
|
+
}, ref) => {
|
|
6882
|
+
const now = /* @__PURE__ */ new Date();
|
|
6883
|
+
const initialDate = value ?? rangeValue?.[0] ?? now;
|
|
6884
|
+
const [viewMonth, setViewMonth] = react.useState(initialDate.getMonth());
|
|
6885
|
+
const [viewYear, setViewYear] = react.useState(initialDate.getFullYear());
|
|
6886
|
+
const [yearBase, setYearBase] = react.useState(Math.floor(initialDate.getFullYear() / 20) * 20);
|
|
6887
|
+
const [rangeStart, setRangeStart] = react.useState(rangeValue?.[0] ?? null);
|
|
6888
|
+
const [rangeEnd, setRangeEnd] = react.useState(rangeValue?.[1] ?? null);
|
|
6889
|
+
const goToPrevMonth = react.useCallback(() => {
|
|
6890
|
+
setViewMonth((m) => {
|
|
6891
|
+
if (m === 0) {
|
|
6892
|
+
setViewYear((y) => y - 1);
|
|
6893
|
+
return 11;
|
|
6894
|
+
}
|
|
6895
|
+
return m - 1;
|
|
6896
|
+
});
|
|
6897
|
+
}, []);
|
|
6898
|
+
const goToNextMonth = react.useCallback(() => {
|
|
6899
|
+
setViewMonth((m) => {
|
|
6900
|
+
if (m === 11) {
|
|
6901
|
+
setViewYear((y) => y + 1);
|
|
6902
|
+
return 0;
|
|
6903
|
+
}
|
|
6904
|
+
return m + 1;
|
|
6905
|
+
});
|
|
6906
|
+
}, []);
|
|
6907
|
+
const handleDayClick = react.useCallback(
|
|
6908
|
+
(date) => {
|
|
6909
|
+
if (mode === "single") {
|
|
6910
|
+
onChange?.(date);
|
|
6911
|
+
} else if (mode === "range") {
|
|
6912
|
+
if (!rangeStart || rangeStart && rangeEnd) {
|
|
6913
|
+
setRangeStart(date);
|
|
6914
|
+
setRangeEnd(null);
|
|
6915
|
+
onRangeChange?.([date, null]);
|
|
6916
|
+
} else {
|
|
6917
|
+
setRangeEnd(date);
|
|
6918
|
+
onRangeChange?.([rangeStart, date]);
|
|
6919
|
+
}
|
|
6920
|
+
}
|
|
6921
|
+
},
|
|
6922
|
+
[mode, onChange, onRangeChange, rangeStart, rangeEnd]
|
|
6923
|
+
);
|
|
6924
|
+
const handleYearClick = react.useCallback(
|
|
6925
|
+
(year) => {
|
|
6926
|
+
const newDate = new Date(year, value?.getMonth() ?? 0, 1);
|
|
6927
|
+
onChange?.(newDate);
|
|
6928
|
+
setViewYear(year);
|
|
6929
|
+
},
|
|
6930
|
+
[onChange, value]
|
|
6931
|
+
);
|
|
6932
|
+
const handleClear = react.useCallback(() => {
|
|
6933
|
+
if (mode === "range") {
|
|
6934
|
+
setRangeStart(null);
|
|
6935
|
+
setRangeEnd(null);
|
|
6936
|
+
onRangeChange?.([null, null]);
|
|
6937
|
+
} else {
|
|
6938
|
+
onChange?.(null);
|
|
6939
|
+
}
|
|
6940
|
+
onClear?.();
|
|
6941
|
+
}, [mode, onChange, onRangeChange, onClear]);
|
|
6942
|
+
const secondMonth = react.useMemo(() => {
|
|
6943
|
+
const m = viewMonth + 1;
|
|
6944
|
+
return { month: m > 11 ? 0 : m, year: m > 11 ? viewYear + 1 : viewYear };
|
|
6945
|
+
}, [viewMonth, viewYear]);
|
|
6946
|
+
const monthYearLabel = `${MONTH_NAMES[viewMonth]} ${viewYear}`;
|
|
6947
|
+
const secondMonthLabel = `${MONTH_NAMES[secondMonth.month]} ${secondMonth.year}`;
|
|
6948
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6949
|
+
"div",
|
|
6950
|
+
{
|
|
6951
|
+
ref,
|
|
6952
|
+
className: cn(
|
|
6953
|
+
"bg-white dark:bg-grey-50 border border-grey-75 rounded-2xl p-5 shadow-soft-xs",
|
|
6954
|
+
"flex flex-col gap-6",
|
|
6955
|
+
mode !== "range" && "w-[340px]",
|
|
6956
|
+
className
|
|
6957
|
+
),
|
|
6958
|
+
...rest,
|
|
6959
|
+
children: [
|
|
6960
|
+
mode === "single" && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4", children: [
|
|
6961
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between w-full", children: [
|
|
6962
|
+
/* @__PURE__ */ jsxRuntime.jsx(NavButton, { direction: "left", onClick: goToPrevMonth }),
|
|
6963
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
6964
|
+
"button",
|
|
6965
|
+
{
|
|
6966
|
+
type: "button",
|
|
6967
|
+
className: "flex items-center gap-2 text-sm font-medium text-grey-700 cursor-default",
|
|
6968
|
+
children: [
|
|
6969
|
+
monthYearLabel,
|
|
6970
|
+
/* @__PURE__ */ jsxRuntime.jsx(ChevronDown2, { className: "size-6 text-grey-500" })
|
|
6971
|
+
]
|
|
6972
|
+
}
|
|
6973
|
+
),
|
|
6974
|
+
/* @__PURE__ */ jsxRuntime.jsx(NavButton, { direction: "right", onClick: goToNextMonth })
|
|
6975
|
+
] }),
|
|
6976
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6977
|
+
MonthGrid,
|
|
6978
|
+
{
|
|
6979
|
+
year: viewYear,
|
|
6980
|
+
month: viewMonth,
|
|
6981
|
+
selectedDate: value,
|
|
6982
|
+
minDate,
|
|
6983
|
+
maxDate,
|
|
6984
|
+
onDayClick: handleDayClick
|
|
6985
|
+
}
|
|
6986
|
+
)
|
|
6987
|
+
] }) }),
|
|
6988
|
+
mode === "range" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-8", children: [
|
|
6989
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4", children: [
|
|
6990
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-10 w-[280px]", children: [
|
|
6991
|
+
/* @__PURE__ */ jsxRuntime.jsx(NavButton, { direction: "left", onClick: goToPrevMonth }),
|
|
6992
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
6993
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-grey-700", children: monthYearLabel }),
|
|
6994
|
+
/* @__PURE__ */ jsxRuntime.jsx(ChevronDown2, { className: "size-6 text-grey-500" })
|
|
6995
|
+
] }),
|
|
6996
|
+
/* @__PURE__ */ jsxRuntime.jsx(NavButton, { direction: "right", hidden: true })
|
|
6997
|
+
] }),
|
|
6998
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6999
|
+
MonthGrid,
|
|
7000
|
+
{
|
|
7001
|
+
year: viewYear,
|
|
7002
|
+
month: viewMonth,
|
|
7003
|
+
rangeStart,
|
|
7004
|
+
rangeEnd,
|
|
7005
|
+
isRange: true,
|
|
7006
|
+
minDate,
|
|
7007
|
+
maxDate,
|
|
7008
|
+
onDayClick: handleDayClick
|
|
7009
|
+
}
|
|
7010
|
+
)
|
|
7011
|
+
] }),
|
|
7012
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4", children: [
|
|
7013
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between w-[280px]", children: [
|
|
7014
|
+
/* @__PURE__ */ jsxRuntime.jsx(NavButton, { direction: "left", hidden: true }),
|
|
7015
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
7016
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-grey-700", children: secondMonthLabel }),
|
|
7017
|
+
/* @__PURE__ */ jsxRuntime.jsx(ChevronDown2, { className: "size-6 text-grey-500" })
|
|
7018
|
+
] }),
|
|
7019
|
+
/* @__PURE__ */ jsxRuntime.jsx(NavButton, { direction: "right", onClick: goToNextMonth })
|
|
7020
|
+
] }),
|
|
7021
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7022
|
+
MonthGrid,
|
|
7023
|
+
{
|
|
7024
|
+
year: secondMonth.year,
|
|
7025
|
+
month: secondMonth.month,
|
|
7026
|
+
rangeStart,
|
|
7027
|
+
rangeEnd,
|
|
7028
|
+
isRange: true,
|
|
7029
|
+
minDate,
|
|
7030
|
+
maxDate,
|
|
7031
|
+
onDayClick: handleDayClick
|
|
7032
|
+
}
|
|
7033
|
+
)
|
|
7034
|
+
] })
|
|
7035
|
+
] }),
|
|
7036
|
+
mode === "year" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 items-center w-full", children: [
|
|
7037
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
7038
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-medium text-grey-700", children: [
|
|
7039
|
+
yearBase,
|
|
7040
|
+
"\u2013",
|
|
7041
|
+
yearBase + 19
|
|
7042
|
+
] }),
|
|
7043
|
+
/* @__PURE__ */ jsxRuntime.jsx(ChevronDown2, { className: "size-6 text-grey-500" })
|
|
7044
|
+
] }),
|
|
7045
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7046
|
+
YearGrid,
|
|
7047
|
+
{
|
|
7048
|
+
baseYear: yearBase,
|
|
7049
|
+
selectedYear: value?.getFullYear(),
|
|
7050
|
+
onYearClick: handleYearClick
|
|
7051
|
+
}
|
|
7052
|
+
),
|
|
7053
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4 mt-2", children: [
|
|
7054
|
+
/* @__PURE__ */ jsxRuntime.jsx(NavButton, { direction: "left", onClick: () => setYearBase((b) => b - 20) }),
|
|
7055
|
+
/* @__PURE__ */ jsxRuntime.jsx(NavButton, { direction: "right", onClick: () => setYearBase((b) => b + 20) })
|
|
7056
|
+
] })
|
|
7057
|
+
] }),
|
|
7058
|
+
showFooter && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-t border-grey-100 pt-4", children: [
|
|
7059
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7060
|
+
"button",
|
|
7061
|
+
{
|
|
7062
|
+
type: "button",
|
|
7063
|
+
onClick: handleClear,
|
|
7064
|
+
className: "text-sm font-semibold text-grey-400 hover:text-grey-600 px-2 cursor-pointer",
|
|
7065
|
+
children: "Clear"
|
|
7066
|
+
}
|
|
7067
|
+
),
|
|
7068
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7069
|
+
"button",
|
|
7070
|
+
{
|
|
7071
|
+
type: "button",
|
|
7072
|
+
onClick: onDone,
|
|
7073
|
+
className: "bg-primary-400 text-white text-sm font-semibold px-5 py-2.5 rounded-lg hover:bg-primary-500 cursor-pointer",
|
|
7074
|
+
children: "Done"
|
|
7075
|
+
}
|
|
7076
|
+
)
|
|
7077
|
+
] })
|
|
7078
|
+
]
|
|
7079
|
+
}
|
|
7080
|
+
);
|
|
7081
|
+
}
|
|
7082
|
+
);
|
|
7083
|
+
DatePicker.displayName = "DatePicker";
|
|
6006
7084
|
var Chip = react.forwardRef(
|
|
6007
7085
|
({
|
|
6008
7086
|
variant = "input",
|
|
@@ -6061,29 +7139,39 @@ var Chip = react.forwardRef(
|
|
|
6061
7139
|
}
|
|
6062
7140
|
);
|
|
6063
7141
|
Chip.displayName = "Chip";
|
|
7142
|
+
var SEGMENT_COUNT = 10;
|
|
7143
|
+
var trackHeight = {
|
|
7144
|
+
sm: "h-1",
|
|
7145
|
+
md: "h-2",
|
|
7146
|
+
lg: "h-3"
|
|
7147
|
+
};
|
|
6064
7148
|
var clampValue = (value) => Math.min(100, Math.max(0, value));
|
|
6065
7149
|
function ProgressBar({
|
|
6066
7150
|
value = 0,
|
|
6067
7151
|
size = "lg",
|
|
7152
|
+
type = "basic",
|
|
6068
7153
|
label,
|
|
6069
7154
|
metadata,
|
|
6070
7155
|
showPercentage = true,
|
|
7156
|
+
percentagePosition = "bottom",
|
|
6071
7157
|
className,
|
|
6072
7158
|
...rest
|
|
6073
7159
|
}) {
|
|
6074
7160
|
const clamped = clampValue(value);
|
|
6075
|
-
|
|
6076
|
-
|
|
6077
|
-
|
|
6078
|
-
|
|
7161
|
+
const filledSegments = Math.round(clamped / 100 * SEGMENT_COUNT);
|
|
7162
|
+
const metadataItems = Array.isArray(metadata) ? metadata : metadata ? [metadata] : [];
|
|
7163
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-2 w-full", className), ...rest, children: [
|
|
7164
|
+
(label || showPercentage && percentagePosition === "top") && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
7165
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1 text-sm font-medium text-grey-900 leading-[1.45]", children: label }),
|
|
7166
|
+
showPercentage && percentagePosition === "top" && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-semibold text-grey-500 leading-[1.45]", children: [
|
|
6079
7167
|
Math.round(clamped),
|
|
6080
7168
|
"%"
|
|
6081
7169
|
] })
|
|
6082
7170
|
] }),
|
|
6083
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7171
|
+
type === "basic" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
6084
7172
|
"div",
|
|
6085
7173
|
{
|
|
6086
|
-
className: cn("w-full rounded-full bg-grey-
|
|
7174
|
+
className: cn("w-full rounded-full bg-grey-200", trackHeight[size]),
|
|
6087
7175
|
role: "progressbar",
|
|
6088
7176
|
"aria-valuenow": clamped,
|
|
6089
7177
|
"aria-valuemin": 0,
|
|
@@ -6093,14 +7181,42 @@ function ProgressBar({
|
|
|
6093
7181
|
{
|
|
6094
7182
|
className: cn(
|
|
6095
7183
|
"rounded-full bg-primary-400 transition-all duration-300",
|
|
6096
|
-
size
|
|
7184
|
+
trackHeight[size]
|
|
6097
7185
|
),
|
|
6098
7186
|
style: { width: `${clamped}%` }
|
|
6099
7187
|
}
|
|
6100
7188
|
)
|
|
6101
7189
|
}
|
|
7190
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
7191
|
+
"div",
|
|
7192
|
+
{
|
|
7193
|
+
className: cn("flex gap-0.5 w-full", trackHeight[size]),
|
|
7194
|
+
role: "progressbar",
|
|
7195
|
+
"aria-valuenow": clamped,
|
|
7196
|
+
"aria-valuemin": 0,
|
|
7197
|
+
"aria-valuemax": 100,
|
|
7198
|
+
children: Array.from({ length: SEGMENT_COUNT }, (_, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
7199
|
+
"div",
|
|
7200
|
+
{
|
|
7201
|
+
className: cn(
|
|
7202
|
+
"flex-1 rounded-full transition-colors duration-300",
|
|
7203
|
+
i < filledSegments ? "bg-primary-400" : "bg-grey-100"
|
|
7204
|
+
)
|
|
7205
|
+
},
|
|
7206
|
+
i
|
|
7207
|
+
))
|
|
7208
|
+
}
|
|
6102
7209
|
),
|
|
6103
|
-
|
|
7210
|
+
(metadataItems.length > 0 || showPercentage && percentagePosition === "bottom") && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
7211
|
+
metadataItems.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-1 items-center gap-1", children: metadataItems.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "contents", children: [
|
|
7212
|
+
i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-grey-400 leading-[1.45]", children: "\u2022" }),
|
|
7213
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-grey-500 leading-[1.45]", children: item })
|
|
7214
|
+
] }, i)) }),
|
|
7215
|
+
showPercentage && percentagePosition === "bottom" && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex-1 text-sm font-semibold text-grey-500 text-right leading-[1.45]", children: [
|
|
7216
|
+
Math.round(clamped),
|
|
7217
|
+
"%"
|
|
7218
|
+
] })
|
|
7219
|
+
] })
|
|
6104
7220
|
] });
|
|
6105
7221
|
}
|
|
6106
7222
|
var sizeConfig = {
|
|
@@ -6110,10 +7226,13 @@ var sizeConfig = {
|
|
|
6110
7226
|
lg: { dimension: 90, strokeWidth: 7, fontSize: 16 },
|
|
6111
7227
|
xl: { dimension: 120, strokeWidth: 8, fontSize: 18 }
|
|
6112
7228
|
};
|
|
7229
|
+
var SEGMENT_COUNT2 = 10;
|
|
7230
|
+
var SEGMENT_GAP_DEGREES = 6;
|
|
6113
7231
|
var clampValue2 = (value) => Math.min(100, Math.max(0, value));
|
|
6114
7232
|
function ProgressCircle({
|
|
6115
7233
|
value = 0,
|
|
6116
7234
|
size = "md",
|
|
7235
|
+
variant = "default",
|
|
6117
7236
|
showText = true,
|
|
6118
7237
|
className,
|
|
6119
7238
|
...rest
|
|
@@ -6122,6 +7241,57 @@ function ProgressCircle({
|
|
|
6122
7241
|
const config = sizeConfig[size];
|
|
6123
7242
|
const radius = (config.dimension - config.strokeWidth) / 2;
|
|
6124
7243
|
const circumference = 2 * Math.PI * radius;
|
|
7244
|
+
if (variant === "segmented") {
|
|
7245
|
+
const filledSegments = Math.round(clamped / 100 * SEGMENT_COUNT2);
|
|
7246
|
+
const totalGapDegrees = SEGMENT_COUNT2 * SEGMENT_GAP_DEGREES;
|
|
7247
|
+
const segmentDegrees = (360 - totalGapDegrees) / SEGMENT_COUNT2;
|
|
7248
|
+
const segmentLength = segmentDegrees / 360 * circumference;
|
|
7249
|
+
const gapLength = SEGMENT_GAP_DEGREES / 360 * circumference;
|
|
7250
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7251
|
+
"div",
|
|
7252
|
+
{
|
|
7253
|
+
className: cn("relative inline-flex items-center justify-center", className),
|
|
7254
|
+
style: { width: config.dimension, height: config.dimension },
|
|
7255
|
+
role: "progressbar",
|
|
7256
|
+
"aria-valuenow": clamped,
|
|
7257
|
+
"aria-valuemin": 0,
|
|
7258
|
+
"aria-valuemax": 100,
|
|
7259
|
+
...rest,
|
|
7260
|
+
children: [
|
|
7261
|
+
/* @__PURE__ */ jsxRuntime.jsx("svg", { width: config.dimension, height: config.dimension, className: "-rotate-90", children: Array.from({ length: SEGMENT_COUNT2 }, (_, i) => {
|
|
7262
|
+
const segmentOffset = i * ((segmentLength + gapLength) / circumference) * circumference;
|
|
7263
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
7264
|
+
"circle",
|
|
7265
|
+
{
|
|
7266
|
+
cx: config.dimension / 2,
|
|
7267
|
+
cy: config.dimension / 2,
|
|
7268
|
+
r: radius,
|
|
7269
|
+
fill: "none",
|
|
7270
|
+
stroke: i < filledSegments ? "#F56630" : "#F0F2F5",
|
|
7271
|
+
strokeWidth: config.strokeWidth,
|
|
7272
|
+
strokeLinecap: "round",
|
|
7273
|
+
strokeDasharray: `${segmentLength} ${circumference - segmentLength}`,
|
|
7274
|
+
strokeDashoffset: -segmentOffset,
|
|
7275
|
+
className: "transition-colors duration-300"
|
|
7276
|
+
},
|
|
7277
|
+
i
|
|
7278
|
+
);
|
|
7279
|
+
}) }),
|
|
7280
|
+
showText && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7281
|
+
"span",
|
|
7282
|
+
{
|
|
7283
|
+
className: "absolute font-semibold text-grey-900",
|
|
7284
|
+
style: { fontSize: config.fontSize },
|
|
7285
|
+
children: [
|
|
7286
|
+
Math.round(clamped),
|
|
7287
|
+
"%"
|
|
7288
|
+
]
|
|
7289
|
+
}
|
|
7290
|
+
)
|
|
7291
|
+
]
|
|
7292
|
+
}
|
|
7293
|
+
);
|
|
7294
|
+
}
|
|
6125
7295
|
const offset = circumference - clamped / 100 * circumference;
|
|
6126
7296
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6127
7297
|
"div",
|
|
@@ -6162,14 +7332,130 @@ function ProgressCircle({
|
|
|
6162
7332
|
}
|
|
6163
7333
|
)
|
|
6164
7334
|
] }),
|
|
6165
|
-
showText && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6166
|
-
|
|
6167
|
-
|
|
6168
|
-
|
|
7335
|
+
showText && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7336
|
+
"span",
|
|
7337
|
+
{
|
|
7338
|
+
className: "absolute font-semibold text-grey-900",
|
|
7339
|
+
style: { fontSize: config.fontSize },
|
|
7340
|
+
children: [
|
|
7341
|
+
Math.round(clamped),
|
|
7342
|
+
"%"
|
|
7343
|
+
]
|
|
7344
|
+
}
|
|
7345
|
+
)
|
|
6169
7346
|
]
|
|
6170
7347
|
}
|
|
6171
7348
|
);
|
|
6172
7349
|
}
|
|
7350
|
+
var statusColors = {
|
|
7351
|
+
information: {
|
|
7352
|
+
bold: { bg: "bg-[#4a9fed]", divider: "bg-[#f0f7ff]" },
|
|
7353
|
+
subtle: { bg: "bg-[#f0f7ff]", text: "text-grey-900", descText: "text-grey-600", divider: "bg-[#0063ad]" }
|
|
7354
|
+
},
|
|
7355
|
+
success: {
|
|
7356
|
+
bold: { bg: "bg-success-400", divider: "bg-success-50" },
|
|
7357
|
+
subtle: { bg: "bg-success-50", text: "text-grey-900", descText: "text-grey-600", divider: "bg-success-400" }
|
|
7358
|
+
},
|
|
7359
|
+
error: {
|
|
7360
|
+
bold: { bg: "bg-error-400", divider: "bg-error-50" },
|
|
7361
|
+
subtle: { bg: "bg-error-50", text: "text-grey-900", descText: "text-grey-600", divider: "bg-error-400" }
|
|
7362
|
+
},
|
|
7363
|
+
warning: {
|
|
7364
|
+
bold: { bg: "bg-warning-400", divider: "bg-warning-50" },
|
|
7365
|
+
subtle: { bg: "bg-warning-50", text: "text-grey-900", descText: "text-grey-600", divider: "bg-warning-700" }
|
|
7366
|
+
},
|
|
7367
|
+
feature: {
|
|
7368
|
+
bold: { bg: "bg-grey-900", divider: "bg-grey-100" },
|
|
7369
|
+
subtle: { bg: "bg-grey-50", text: "text-black", descText: "text-black", divider: "bg-grey-300" }
|
|
7370
|
+
},
|
|
7371
|
+
opportunity: {
|
|
7372
|
+
bold: { bg: "bg-[#475ccc]", divider: "bg-[#b1bae9]" },
|
|
7373
|
+
subtle: { bg: "bg-[#f7f8fd]", text: "text-grey-900", descText: "text-grey-600", divider: "bg-[#b1bae9]" }
|
|
7374
|
+
}
|
|
7375
|
+
};
|
|
7376
|
+
function InfoIcon({ className }) {
|
|
7377
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
7378
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
7379
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 16v-4M12 8h.01" })
|
|
7380
|
+
] });
|
|
7381
|
+
}
|
|
7382
|
+
function CloseIcon({ className }) {
|
|
7383
|
+
return /* @__PURE__ */ jsxRuntime.jsx("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18 6L6 18M6 6l12 12" }) });
|
|
7384
|
+
}
|
|
7385
|
+
var Banner = react.forwardRef(
|
|
7386
|
+
({
|
|
7387
|
+
status = "information",
|
|
7388
|
+
emphasis = "subtle",
|
|
7389
|
+
size = "lg",
|
|
7390
|
+
title,
|
|
7391
|
+
description,
|
|
7392
|
+
icon,
|
|
7393
|
+
buttonLabel,
|
|
7394
|
+
onButtonClick,
|
|
7395
|
+
dismissible = true,
|
|
7396
|
+
onDismiss,
|
|
7397
|
+
className,
|
|
7398
|
+
...rest
|
|
7399
|
+
}, ref) => {
|
|
7400
|
+
const colors = statusColors[status];
|
|
7401
|
+
const isBold = emphasis === "bold";
|
|
7402
|
+
const colorSet = isBold ? colors.bold : colors.subtle;
|
|
7403
|
+
const textColor = isBold ? "text-white" : colorSet.text;
|
|
7404
|
+
const descColor = isBold ? "text-white" : colorSet.descText;
|
|
7405
|
+
const buttonColor = isBold ? "text-white" : "text-grey-600";
|
|
7406
|
+
const iconSize4 = size === "sm" ? "size-4" : "size-6";
|
|
7407
|
+
const textSize2 = size === "sm" ? "text-xs" : "text-sm";
|
|
7408
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7409
|
+
"div",
|
|
7410
|
+
{
|
|
7411
|
+
ref,
|
|
7412
|
+
role: "alert",
|
|
7413
|
+
className: cn(
|
|
7414
|
+
"flex items-center justify-between overflow-hidden rounded-[4px] w-full",
|
|
7415
|
+
colorSet.bg,
|
|
7416
|
+
size === "sm" ? "h-10 px-3 py-2" : "h-12 px-8 py-3",
|
|
7417
|
+
className
|
|
7418
|
+
),
|
|
7419
|
+
...rest,
|
|
7420
|
+
children: [
|
|
7421
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-1 items-center", size === "sm" ? "gap-2" : "gap-3"), children: [
|
|
7422
|
+
icon ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("shrink-0", iconSize4, textColor), children: resolveIcon(icon, size === "sm" ? "sm" : "md") }) : /* @__PURE__ */ jsxRuntime.jsx(InfoIcon, { className: cn("shrink-0", iconSize4, textColor) }),
|
|
7423
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-semibold leading-[1.45] whitespace-nowrap", textSize2, textColor), children: title }),
|
|
7424
|
+
description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("leading-[1.45] whitespace-nowrap", textSize2, descColor), children: description }),
|
|
7425
|
+
buttonLabel && /* @__PURE__ */ jsxRuntime.jsx(
|
|
7426
|
+
"button",
|
|
7427
|
+
{
|
|
7428
|
+
type: "button",
|
|
7429
|
+
onClick: onButtonClick,
|
|
7430
|
+
className: cn(
|
|
7431
|
+
"shrink-0 font-semibold leading-[1.45] whitespace-nowrap cursor-pointer",
|
|
7432
|
+
textSize2,
|
|
7433
|
+
buttonColor,
|
|
7434
|
+
isBold && "text-white underline"
|
|
7435
|
+
),
|
|
7436
|
+
children: buttonLabel
|
|
7437
|
+
}
|
|
7438
|
+
)
|
|
7439
|
+
] }),
|
|
7440
|
+
dismissible && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 self-stretch shrink-0", children: [
|
|
7441
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-px self-stretch", colorSet.divider) }),
|
|
7442
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7443
|
+
"button",
|
|
7444
|
+
{
|
|
7445
|
+
type: "button",
|
|
7446
|
+
onClick: onDismiss,
|
|
7447
|
+
"aria-label": "Dismiss banner",
|
|
7448
|
+
className: cn("shrink-0 cursor-pointer", iconSize4, textColor),
|
|
7449
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(CloseIcon, { className: "size-full" })
|
|
7450
|
+
}
|
|
7451
|
+
)
|
|
7452
|
+
] })
|
|
7453
|
+
]
|
|
7454
|
+
}
|
|
7455
|
+
);
|
|
7456
|
+
}
|
|
7457
|
+
);
|
|
7458
|
+
Banner.displayName = "Banner";
|
|
6173
7459
|
var colorStyles = {
|
|
6174
7460
|
orange: {
|
|
6175
7461
|
filled: "bg-primary-400 text-white",
|
|
@@ -6223,21 +7509,21 @@ function Badge({
|
|
|
6223
7509
|
...rest
|
|
6224
7510
|
}) {
|
|
6225
7511
|
const colorClass = colorStyles[color][type];
|
|
6226
|
-
const
|
|
7512
|
+
const sizeConfig3 = sizeStyles[size];
|
|
6227
7513
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6228
7514
|
"span",
|
|
6229
7515
|
{
|
|
6230
7516
|
className: cn(
|
|
6231
7517
|
"inline-flex items-center rounded-xl font-medium whitespace-nowrap",
|
|
6232
|
-
|
|
7518
|
+
sizeConfig3.container,
|
|
6233
7519
|
colorClass,
|
|
6234
7520
|
className
|
|
6235
7521
|
),
|
|
6236
7522
|
...rest,
|
|
6237
7523
|
children: [
|
|
6238
|
-
leadingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("shrink-0",
|
|
7524
|
+
leadingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("shrink-0", sizeConfig3.icon), children: resolveIcon(leadingIcon, "xs") }),
|
|
6239
7525
|
children,
|
|
6240
|
-
trailingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("shrink-0",
|
|
7526
|
+
trailingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("shrink-0", sizeConfig3.icon), children: resolveIcon(trailingIcon, "xs") })
|
|
6241
7527
|
]
|
|
6242
7528
|
}
|
|
6243
7529
|
);
|
|
@@ -6472,7 +7758,7 @@ function Arrow({ position, theme }) {
|
|
|
6472
7758
|
}
|
|
6473
7759
|
) });
|
|
6474
7760
|
}
|
|
6475
|
-
var
|
|
7761
|
+
var Tooltip2 = react.forwardRef(
|
|
6476
7762
|
({
|
|
6477
7763
|
theme = "light",
|
|
6478
7764
|
position = "top-left",
|
|
@@ -6559,7 +7845,7 @@ var Tooltip = react.forwardRef(
|
|
|
6559
7845
|
);
|
|
6560
7846
|
}
|
|
6561
7847
|
);
|
|
6562
|
-
|
|
7848
|
+
Tooltip2.displayName = "Tooltip";
|
|
6563
7849
|
function range(start, end) {
|
|
6564
7850
|
const arr = [];
|
|
6565
7851
|
for (let i = start; i <= end; i++) arr.push(i);
|
|
@@ -6587,8 +7873,8 @@ function getPageNumbers(currentPage, totalPages, siblingCount) {
|
|
|
6587
7873
|
const middleRange = range(leftSiblingIndex, rightSiblingIndex);
|
|
6588
7874
|
return [1, "...", ...middleRange, "...", totalPages];
|
|
6589
7875
|
}
|
|
6590
|
-
var
|
|
6591
|
-
var
|
|
7876
|
+
var ChevronLeft2 = () => /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron-left", size: "md" });
|
|
7877
|
+
var ChevronRight2 = () => /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron-right", size: "md" });
|
|
6592
7878
|
function Pagination({
|
|
6593
7879
|
currentPage,
|
|
6594
7880
|
totalPages,
|
|
@@ -6609,7 +7895,7 @@ function Pagination({
|
|
|
6609
7895
|
className: "inline-flex items-center gap-2 rounded-lg border border-grey-300 bg-white dark:bg-grey-50 px-3 py-2 text-sm font-semibold text-grey-700 cursor-pointer hover:bg-grey-50 disabled:opacity-50 disabled:cursor-not-allowed",
|
|
6610
7896
|
"aria-label": "Previous page",
|
|
6611
7897
|
children: [
|
|
6612
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7898
|
+
/* @__PURE__ */ jsxRuntime.jsx(ChevronLeft2, {}),
|
|
6613
7899
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Previous" })
|
|
6614
7900
|
]
|
|
6615
7901
|
}
|
|
@@ -6647,7 +7933,7 @@ function Pagination({
|
|
|
6647
7933
|
"aria-label": "Next page",
|
|
6648
7934
|
children: [
|
|
6649
7935
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Next" }),
|
|
6650
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7936
|
+
/* @__PURE__ */ jsxRuntime.jsx(ChevronRight2, {})
|
|
6651
7937
|
]
|
|
6652
7938
|
}
|
|
6653
7939
|
)
|
|
@@ -6784,35 +8070,72 @@ var Toggle = react.forwardRef(
|
|
|
6784
8070
|
}
|
|
6785
8071
|
);
|
|
6786
8072
|
Toggle.displayName = "Toggle";
|
|
6787
|
-
function
|
|
8073
|
+
function ChevronRight3({ className }) {
|
|
8074
|
+
return /* @__PURE__ */ jsxRuntime.jsx("svg", { className, viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7.5 5l5 5-5 5" }) });
|
|
8075
|
+
}
|
|
8076
|
+
function DoubleChevronRight({ className }) {
|
|
8077
|
+
return /* @__PURE__ */ jsxRuntime.jsx("svg", { className, viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5.5 5l5 5-5 5M10.5 5l5 5-5 5" }) });
|
|
8078
|
+
}
|
|
8079
|
+
function SeparatorElement({ type }) {
|
|
8080
|
+
switch (type) {
|
|
8081
|
+
case "chevron":
|
|
8082
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ChevronRight3, { className: "size-5 text-grey-300" });
|
|
8083
|
+
case "double-chevron":
|
|
8084
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DoubleChevronRight, { className: "size-5 text-grey-300" });
|
|
8085
|
+
case "slash":
|
|
8086
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-grey-300 w-4 text-center", children: "/" });
|
|
8087
|
+
}
|
|
8088
|
+
}
|
|
8089
|
+
function Breadcrumb({
|
|
8090
|
+
items,
|
|
8091
|
+
separator = "chevron",
|
|
8092
|
+
hasBorders = false,
|
|
8093
|
+
className,
|
|
8094
|
+
...rest
|
|
8095
|
+
}) {
|
|
6788
8096
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6789
8097
|
"nav",
|
|
6790
8098
|
{
|
|
6791
8099
|
"aria-label": "Breadcrumb",
|
|
6792
|
-
className: cn(
|
|
8100
|
+
className: cn(
|
|
8101
|
+
"py-2.5",
|
|
8102
|
+
hasBorders && "border-y border-grey-100",
|
|
8103
|
+
className
|
|
8104
|
+
),
|
|
6793
8105
|
...rest,
|
|
6794
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "flex items-center gap-
|
|
6795
|
-
i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
6796
|
-
|
|
6797
|
-
|
|
6798
|
-
|
|
6799
|
-
|
|
6800
|
-
|
|
6801
|
-
|
|
6802
|
-
|
|
6803
|
-
|
|
6804
|
-
|
|
6805
|
-
|
|
6806
|
-
|
|
6807
|
-
|
|
6808
|
-
|
|
6809
|
-
|
|
6810
|
-
|
|
6811
|
-
|
|
6812
|
-
|
|
6813
|
-
|
|
6814
|
-
|
|
6815
|
-
|
|
8106
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "flex items-center gap-4 text-sm font-medium", children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-center gap-4", children: [
|
|
8107
|
+
i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx(SeparatorElement, { type: separator }) }),
|
|
8108
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
8109
|
+
item.icon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
8110
|
+
"span",
|
|
8111
|
+
{
|
|
8112
|
+
className: cn(
|
|
8113
|
+
"size-5 shrink-0",
|
|
8114
|
+
item.active ? "text-primary-400" : item.disabled ? "text-grey-300" : "text-grey-500 group-hover:text-grey-700"
|
|
8115
|
+
),
|
|
8116
|
+
children: resolveIcon(item.icon, "sm")
|
|
8117
|
+
}
|
|
8118
|
+
),
|
|
8119
|
+
item.href && !item.disabled && !item.active ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
8120
|
+
"a",
|
|
8121
|
+
{
|
|
8122
|
+
href: item.href,
|
|
8123
|
+
className: "text-grey-500 hover:text-grey-700 hover:underline transition-colors",
|
|
8124
|
+
children: item.label
|
|
8125
|
+
}
|
|
8126
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
8127
|
+
"span",
|
|
8128
|
+
{
|
|
8129
|
+
className: cn(
|
|
8130
|
+
item.active && "text-primary-400",
|
|
8131
|
+
item.disabled && "text-grey-300 cursor-not-allowed",
|
|
8132
|
+
!item.active && !item.disabled && "text-grey-500"
|
|
8133
|
+
),
|
|
8134
|
+
"aria-current": item.active ? "page" : void 0,
|
|
8135
|
+
children: item.label
|
|
8136
|
+
}
|
|
8137
|
+
)
|
|
8138
|
+
] })
|
|
6816
8139
|
] }, i)) })
|
|
6817
8140
|
}
|
|
6818
8141
|
);
|
|
@@ -6833,7 +8156,7 @@ var initialsFontSize = {
|
|
|
6833
8156
|
xl: "text-[18px] leading-[1.45]",
|
|
6834
8157
|
"2xl": "text-[20px] leading-[1.2] tracking-[-0.4px]"
|
|
6835
8158
|
};
|
|
6836
|
-
var
|
|
8159
|
+
var iconSize3 = {
|
|
6837
8160
|
xs: "xs",
|
|
6838
8161
|
sm: "sm",
|
|
6839
8162
|
md: "md",
|
|
@@ -6908,7 +8231,7 @@ var Avatar = react.forwardRef(
|
|
|
6908
8231
|
...rest,
|
|
6909
8232
|
children: [
|
|
6910
8233
|
type === "image" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 rounded-full border-[1.5px] border-white overflow-hidden", children: src ? /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt, className: "size-full object-cover rounded-full" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "size-full bg-grey-200 rounded-full" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 rounded-full bg-primary-50" }),
|
|
6911
|
-
type === "icon" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 flex items-center justify-center text-grey-900", children: icon ? resolveIcon(icon,
|
|
8234
|
+
type === "icon" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 flex items-center justify-center text-grey-900", children: icon ? resolveIcon(icon, iconSize3[size]) : /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "user", size: iconSize3[size] }) }),
|
|
6912
8235
|
type === "initials" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6913
8236
|
"div",
|
|
6914
8237
|
{
|
|
@@ -6916,40 +8239,212 @@ var Avatar = react.forwardRef(
|
|
|
6916
8239
|
"absolute inset-0 flex items-center justify-center font-semibold text-grey-900",
|
|
6917
8240
|
initialsFontSize[size]
|
|
6918
8241
|
),
|
|
6919
|
-
children: initials
|
|
8242
|
+
children: initials
|
|
8243
|
+
}
|
|
8244
|
+
),
|
|
8245
|
+
/* @__PURE__ */ jsxRuntime.jsx(StatusIndicator, { status, size })
|
|
8246
|
+
]
|
|
8247
|
+
}
|
|
8248
|
+
);
|
|
8249
|
+
}
|
|
8250
|
+
);
|
|
8251
|
+
Avatar.displayName = "Avatar";
|
|
8252
|
+
var groupAvatarSize = {
|
|
8253
|
+
sm: "xs",
|
|
8254
|
+
md: "sm",
|
|
8255
|
+
lg: "md"
|
|
8256
|
+
};
|
|
8257
|
+
var groupOverlap = {
|
|
8258
|
+
sm: "-ml-1.5",
|
|
8259
|
+
md: "-ml-1.5",
|
|
8260
|
+
lg: "-ml-[11px]"
|
|
8261
|
+
};
|
|
8262
|
+
var AvatarGroup = react.forwardRef(
|
|
8263
|
+
({ size = "md", max, className, children, ...rest }, ref) => {
|
|
8264
|
+
const childArray = react.Children.toArray(children).filter(react.isValidElement);
|
|
8265
|
+
const avatarSize = groupAvatarSize[size];
|
|
8266
|
+
const overlap = groupOverlap[size];
|
|
8267
|
+
const visible = max ? childArray.slice(0, max) : childArray;
|
|
8268
|
+
const overflowCount = max ? childArray.length - max : 0;
|
|
8269
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: cn("inline-flex items-center", className), ...rest, children: [
|
|
8270
|
+
visible.map((child, i) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(i > 0 && overlap, "relative"), children: react.isValidElement(child) ? react.cloneElement(child, { size: avatarSize, status: "none" }) : child }, i)),
|
|
8271
|
+
overflowCount > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(overlap, "relative"), children: /* @__PURE__ */ jsxRuntime.jsx(Avatar, { type: "initials", size: avatarSize, initials: `+${overflowCount}` }) })
|
|
8272
|
+
] });
|
|
8273
|
+
}
|
|
8274
|
+
);
|
|
8275
|
+
AvatarGroup.displayName = "AvatarGroup";
|
|
8276
|
+
function CloseIcon2({ className }) {
|
|
8277
|
+
return /* @__PURE__ */ jsxRuntime.jsx("svg", { className, viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 3L3 9M3 3l6 6" }) });
|
|
8278
|
+
}
|
|
8279
|
+
function BoxIcon({ className }) {
|
|
8280
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("svg", { className, viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: 1.2, strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
8281
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2.67 4.67L8 7.33l5.33-2.66M8 14V7.33" }),
|
|
8282
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M13.33 10.67V5.33a1.33 1.33 0 00-.66-1.15L8.67 2a1.33 1.33 0 00-1.34 0L3.33 4.18A1.33 1.33 0 002.67 5.33v5.34a1.33 1.33 0 00.66 1.15L7.33 14a1.33 1.33 0 001.34 0l4-2.18a1.33 1.33 0 00.66-1.15z" })
|
|
8283
|
+
] });
|
|
8284
|
+
}
|
|
8285
|
+
var sizeClasses2 = {
|
|
8286
|
+
sm: "w-[400px]",
|
|
8287
|
+
md: "w-[500px]",
|
|
8288
|
+
lg: "w-[640px]"
|
|
8289
|
+
};
|
|
8290
|
+
var Modal = react.forwardRef(
|
|
8291
|
+
({
|
|
8292
|
+
open,
|
|
8293
|
+
onClose,
|
|
8294
|
+
size = "sm",
|
|
8295
|
+
title,
|
|
8296
|
+
description,
|
|
8297
|
+
icon,
|
|
8298
|
+
showClose = true,
|
|
8299
|
+
primaryLabel = "Save",
|
|
8300
|
+
onPrimaryClick,
|
|
8301
|
+
secondaryLabel,
|
|
8302
|
+
onSecondaryClick,
|
|
8303
|
+
footerOrientation = "horizontal",
|
|
8304
|
+
closeOnOverlay = true,
|
|
8305
|
+
closeOnEscape = true,
|
|
8306
|
+
blur = true,
|
|
8307
|
+
children,
|
|
8308
|
+
className,
|
|
8309
|
+
...rest
|
|
8310
|
+
}, ref) => {
|
|
8311
|
+
const overlayRef = react.useRef(null);
|
|
8312
|
+
react.useEffect(() => {
|
|
8313
|
+
if (!open || !closeOnEscape) return;
|
|
8314
|
+
const handler = (e) => {
|
|
8315
|
+
if (e.key === "Escape") onClose();
|
|
8316
|
+
};
|
|
8317
|
+
document.addEventListener("keydown", handler);
|
|
8318
|
+
return () => document.removeEventListener("keydown", handler);
|
|
8319
|
+
}, [open, closeOnEscape, onClose]);
|
|
8320
|
+
react.useEffect(() => {
|
|
8321
|
+
if (!open) return;
|
|
8322
|
+
const prev = document.body.style.overflow;
|
|
8323
|
+
document.body.style.overflow = "hidden";
|
|
8324
|
+
return () => {
|
|
8325
|
+
document.body.style.overflow = prev;
|
|
8326
|
+
};
|
|
8327
|
+
}, [open]);
|
|
8328
|
+
const handleOverlayClick = react.useCallback(
|
|
8329
|
+
(e) => {
|
|
8330
|
+
if (closeOnOverlay && e.target === overlayRef.current) onClose();
|
|
8331
|
+
},
|
|
8332
|
+
[closeOnOverlay, onClose]
|
|
8333
|
+
);
|
|
8334
|
+
if (!open) return null;
|
|
8335
|
+
const isVertical = footerOrientation === "vertical";
|
|
8336
|
+
const modal = /* @__PURE__ */ jsxRuntime.jsxs(
|
|
8337
|
+
"div",
|
|
8338
|
+
{
|
|
8339
|
+
ref: overlayRef,
|
|
8340
|
+
className: cn(
|
|
8341
|
+
"fixed inset-0 z-50 flex items-center justify-center",
|
|
8342
|
+
blur && "backdrop-blur-md"
|
|
8343
|
+
),
|
|
8344
|
+
onClick: handleOverlayClick,
|
|
8345
|
+
role: "presentation",
|
|
8346
|
+
children: [
|
|
8347
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-black/60" }),
|
|
8348
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8349
|
+
"div",
|
|
8350
|
+
{
|
|
8351
|
+
ref,
|
|
8352
|
+
role: "dialog",
|
|
8353
|
+
"aria-modal": "true",
|
|
8354
|
+
"aria-labelledby": title ? "modal-title" : void 0,
|
|
8355
|
+
"aria-describedby": description ? "modal-desc" : void 0,
|
|
8356
|
+
className: cn(
|
|
8357
|
+
"relative flex flex-col bg-white dark:bg-grey-50 rounded-xl shadow-soft-xl overflow-hidden",
|
|
8358
|
+
sizeClasses2[size],
|
|
8359
|
+
className
|
|
8360
|
+
),
|
|
8361
|
+
...rest,
|
|
8362
|
+
children: [
|
|
8363
|
+
(title || showClose) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-2 pt-5 pb-2 px-4", children: [
|
|
8364
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-1 gap-4 items-start min-w-0", children: [
|
|
8365
|
+
icon !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 flex items-center justify-center p-2.5 bg-primary-50 rounded-[20px]", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-4", children: icon }) }) : title ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 flex items-center justify-center p-2.5 bg-primary-50 rounded-[20px]", children: /* @__PURE__ */ jsxRuntime.jsx(BoxIcon, { className: "size-4 text-primary-400" }) }) : null,
|
|
8366
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col flex-1 min-w-0", children: [
|
|
8367
|
+
title && /* @__PURE__ */ jsxRuntime.jsx(
|
|
8368
|
+
"h2",
|
|
8369
|
+
{
|
|
8370
|
+
id: "modal-title",
|
|
8371
|
+
className: "text-xl font-semibold text-grey-700 leading-[1.2] tracking-[-0.4px]",
|
|
8372
|
+
children: title
|
|
8373
|
+
}
|
|
8374
|
+
),
|
|
8375
|
+
description && /* @__PURE__ */ jsxRuntime.jsx("p", { id: "modal-desc", className: "text-sm text-grey-500 leading-[1.45]", children: description })
|
|
8376
|
+
] })
|
|
8377
|
+
] }),
|
|
8378
|
+
showClose && /* @__PURE__ */ jsxRuntime.jsx(
|
|
8379
|
+
"button",
|
|
8380
|
+
{
|
|
8381
|
+
type: "button",
|
|
8382
|
+
onClick: onClose,
|
|
8383
|
+
"aria-label": "Close modal",
|
|
8384
|
+
className: "shrink-0 flex items-center justify-center p-1.5 bg-grey-75 rounded-xl hover:bg-grey-200 transition-colors cursor-pointer",
|
|
8385
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(CloseIcon2, { className: "size-3" })
|
|
8386
|
+
}
|
|
8387
|
+
)
|
|
8388
|
+
] }),
|
|
8389
|
+
children && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 px-4 py-4 overflow-y-auto", children }),
|
|
8390
|
+
(primaryLabel || secondaryLabel) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
8391
|
+
"div",
|
|
8392
|
+
{
|
|
8393
|
+
className: cn(
|
|
8394
|
+
"py-5",
|
|
8395
|
+
isVertical ? "flex flex-col gap-5 items-center px-4" : "flex items-center justify-end gap-3 px-4"
|
|
8396
|
+
),
|
|
8397
|
+
children: isVertical ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
8398
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8399
|
+
"button",
|
|
8400
|
+
{
|
|
8401
|
+
type: "button",
|
|
8402
|
+
onClick: onPrimaryClick,
|
|
8403
|
+
className: "w-full bg-primary-400 text-white text-sm font-semibold p-2 rounded-xl hover:bg-primary-500 transition-colors cursor-pointer",
|
|
8404
|
+
children: primaryLabel
|
|
8405
|
+
}
|
|
8406
|
+
),
|
|
8407
|
+
secondaryLabel && /* @__PURE__ */ jsxRuntime.jsx(
|
|
8408
|
+
"button",
|
|
8409
|
+
{
|
|
8410
|
+
type: "button",
|
|
8411
|
+
onClick: onSecondaryClick ?? onClose,
|
|
8412
|
+
className: "w-full border-[1.5px] border-primary-400 text-primary-400 text-sm font-semibold p-2 rounded-xl hover:bg-primary-50 transition-colors cursor-pointer",
|
|
8413
|
+
children: secondaryLabel
|
|
8414
|
+
}
|
|
8415
|
+
)
|
|
8416
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
8417
|
+
secondaryLabel && /* @__PURE__ */ jsxRuntime.jsx(
|
|
8418
|
+
"button",
|
|
8419
|
+
{
|
|
8420
|
+
type: "button",
|
|
8421
|
+
onClick: onSecondaryClick ?? onClose,
|
|
8422
|
+
className: "flex-1 border-[1.5px] border-primary-400 text-primary-400 text-sm font-semibold p-2 rounded-xl hover:bg-primary-50 transition-colors cursor-pointer",
|
|
8423
|
+
children: secondaryLabel
|
|
8424
|
+
}
|
|
8425
|
+
),
|
|
8426
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8427
|
+
"button",
|
|
8428
|
+
{
|
|
8429
|
+
type: "button",
|
|
8430
|
+
onClick: onPrimaryClick,
|
|
8431
|
+
className: "flex-1 bg-primary-400 text-white text-sm font-semibold p-2 rounded-xl hover:bg-primary-500 transition-colors cursor-pointer",
|
|
8432
|
+
children: primaryLabel
|
|
8433
|
+
}
|
|
8434
|
+
)
|
|
8435
|
+
] })
|
|
8436
|
+
}
|
|
8437
|
+
)
|
|
8438
|
+
]
|
|
6920
8439
|
}
|
|
6921
|
-
)
|
|
6922
|
-
/* @__PURE__ */ jsxRuntime.jsx(StatusIndicator, { status, size })
|
|
8440
|
+
)
|
|
6923
8441
|
]
|
|
6924
8442
|
}
|
|
6925
8443
|
);
|
|
8444
|
+
return reactDom.createPortal(modal, document.body);
|
|
6926
8445
|
}
|
|
6927
8446
|
);
|
|
6928
|
-
|
|
6929
|
-
var groupAvatarSize = {
|
|
6930
|
-
sm: "xs",
|
|
6931
|
-
md: "sm",
|
|
6932
|
-
lg: "md"
|
|
6933
|
-
};
|
|
6934
|
-
var groupOverlap = {
|
|
6935
|
-
sm: "-ml-1.5",
|
|
6936
|
-
md: "-ml-1.5",
|
|
6937
|
-
lg: "-ml-[11px]"
|
|
6938
|
-
};
|
|
6939
|
-
var AvatarGroup = react.forwardRef(
|
|
6940
|
-
({ size = "md", max, className, children, ...rest }, ref) => {
|
|
6941
|
-
const childArray = react.Children.toArray(children).filter(react.isValidElement);
|
|
6942
|
-
const avatarSize = groupAvatarSize[size];
|
|
6943
|
-
const overlap = groupOverlap[size];
|
|
6944
|
-
const visible = max ? childArray.slice(0, max) : childArray;
|
|
6945
|
-
const overflowCount = max ? childArray.length - max : 0;
|
|
6946
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: cn("inline-flex items-center", className), ...rest, children: [
|
|
6947
|
-
visible.map((child, i) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(i > 0 && overlap, "relative"), children: react.isValidElement(child) ? react.cloneElement(child, { size: avatarSize, status: "none" }) : child }, i)),
|
|
6948
|
-
overflowCount > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(overlap, "relative"), children: /* @__PURE__ */ jsxRuntime.jsx(Avatar, { type: "initials", size: avatarSize, initials: `+${overflowCount}` }) })
|
|
6949
|
-
] });
|
|
6950
|
-
}
|
|
6951
|
-
);
|
|
6952
|
-
AvatarGroup.displayName = "AvatarGroup";
|
|
8447
|
+
Modal.displayName = "Modal";
|
|
6953
8448
|
var trendStyles = {
|
|
6954
8449
|
up: "bg-primary-50 text-primary-700",
|
|
6955
8450
|
down: "bg-error-50 text-error-700"
|
|
@@ -11625,6 +13120,564 @@ var DropdownMenuSeparator = react.forwardRef(
|
|
|
11625
13120
|
({ className, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, role: "separator", className: cn("my-1 h-px bg-grey-100", className), ...rest })
|
|
11626
13121
|
);
|
|
11627
13122
|
DropdownMenuSeparator.displayName = "DropdownMenuSeparator";
|
|
13123
|
+
var sizeMap2 = {
|
|
13124
|
+
xs: 20,
|
|
13125
|
+
sm: 24,
|
|
13126
|
+
md: 32,
|
|
13127
|
+
lg: 40,
|
|
13128
|
+
xl: 48,
|
|
13129
|
+
"2xl": 56,
|
|
13130
|
+
"3xl": 64
|
|
13131
|
+
};
|
|
13132
|
+
function ThinSpinner({ size, color }) {
|
|
13133
|
+
const r = size / 2 - 2;
|
|
13134
|
+
const c = size / 2;
|
|
13135
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, className: "animate-spin", children: [
|
|
13136
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: c, cy: c, r, fill: "none", stroke: "currentColor", strokeWidth: 1.5, opacity: 0.2, className: color }),
|
|
13137
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: c, cy: c, r, fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeDasharray: `${r * Math.PI * 0.75} ${r * Math.PI * 1.25}`, strokeLinecap: "round", className: color })
|
|
13138
|
+
] });
|
|
13139
|
+
}
|
|
13140
|
+
function BoldSpinner({ size, color }) {
|
|
13141
|
+
const sw = Math.max(2.5, size * 0.1);
|
|
13142
|
+
const r = size / 2 - sw;
|
|
13143
|
+
const c = size / 2;
|
|
13144
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, className: "animate-spin", children: [
|
|
13145
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: c, cy: c, r, fill: "none", stroke: "currentColor", strokeWidth: sw, opacity: 0.2, className: color }),
|
|
13146
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: c, cy: c, r, fill: "none", stroke: "currentColor", strokeWidth: sw, strokeDasharray: `${r * Math.PI * 0.75} ${r * Math.PI * 1.25}`, strokeLinecap: "round", className: color })
|
|
13147
|
+
] });
|
|
13148
|
+
}
|
|
13149
|
+
function DuoToneSpinner({ size, color }) {
|
|
13150
|
+
const sw = Math.max(2, size * 0.08);
|
|
13151
|
+
const r = size / 2 - sw;
|
|
13152
|
+
const c = size / 2;
|
|
13153
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, className: "animate-spin", children: [
|
|
13154
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: c, cy: c, r, fill: "none", stroke: "currentColor", strokeWidth: sw, opacity: 0.15, className: color }),
|
|
13155
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: c, cy: c, r, fill: "none", stroke: "currentColor", strokeWidth: sw, strokeDasharray: `${r * Math.PI} ${r * Math.PI}`, strokeLinecap: "round", className: color })
|
|
13156
|
+
] });
|
|
13157
|
+
}
|
|
13158
|
+
function BufferingThinSpinner({ size, color }) {
|
|
13159
|
+
const r = size / 2 - 2;
|
|
13160
|
+
const c = size / 2;
|
|
13161
|
+
const circumference = 2 * Math.PI * r;
|
|
13162
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [
|
|
13163
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: c, cy: c, r, fill: "none", stroke: "currentColor", strokeWidth: 1.5, opacity: 0.2, className: color }),
|
|
13164
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: c, cy: c, r, fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", className: cn(color, "animate-[spinner-dash_1.5s_ease-in-out_infinite]"), style: { strokeDasharray: circumference, transformOrigin: "center" } })
|
|
13165
|
+
] });
|
|
13166
|
+
}
|
|
13167
|
+
function BufferingBoldSpinner({ size, color }) {
|
|
13168
|
+
const sw = Math.max(2.5, size * 0.1);
|
|
13169
|
+
const r = size / 2 - sw;
|
|
13170
|
+
const c = size / 2;
|
|
13171
|
+
const circumference = 2 * Math.PI * r;
|
|
13172
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [
|
|
13173
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: c, cy: c, r, fill: "none", stroke: "currentColor", strokeWidth: sw, opacity: 0.2, className: color }),
|
|
13174
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: c, cy: c, r, fill: "none", stroke: "currentColor", strokeWidth: sw, strokeLinecap: "round", className: cn(color, "animate-[spinner-dash_1.5s_ease-in-out_infinite]"), style: { strokeDasharray: circumference, transformOrigin: "center" } })
|
|
13175
|
+
] });
|
|
13176
|
+
}
|
|
13177
|
+
function DotSpinner({ size, color }) {
|
|
13178
|
+
const dotSize = Math.max(3, size * 0.15);
|
|
13179
|
+
const c = size / 2;
|
|
13180
|
+
const r = size / 2 - dotSize;
|
|
13181
|
+
return /* @__PURE__ */ jsxRuntime.jsx("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, className: "animate-spin", children: [0, 1, 2, 3, 4, 5, 6, 7].map((i) => {
|
|
13182
|
+
const angle = i * 45 * Math.PI / 180;
|
|
13183
|
+
const x = c + r * Math.cos(angle);
|
|
13184
|
+
const y = c + r * Math.sin(angle);
|
|
13185
|
+
return /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x, cy: y, r: dotSize / 2, fill: "currentColor", opacity: 0.15 + i / 8 * 0.85, className: color }, i);
|
|
13186
|
+
}) });
|
|
13187
|
+
}
|
|
13188
|
+
function JugglingSpinner({ size, color }) {
|
|
13189
|
+
const dotSize = Math.max(3, size * 0.18);
|
|
13190
|
+
return /* @__PURE__ */ jsxRuntime.jsx("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [0, 1, 2].map((i) => {
|
|
13191
|
+
const cx = size / 2 + (i - 1) * (size * 0.35);
|
|
13192
|
+
return /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy: size / 2, r: dotSize / 2, fill: "currentColor", className: cn(color, "animate-[juggle_1.4s_ease-in-out_infinite]"), style: { animationDelay: `${i * 0.16}s` } }, i);
|
|
13193
|
+
}) });
|
|
13194
|
+
}
|
|
13195
|
+
var Spinner = react.forwardRef(
|
|
13196
|
+
({
|
|
13197
|
+
type = "thin",
|
|
13198
|
+
size = "md",
|
|
13199
|
+
colorStyle = "brand",
|
|
13200
|
+
label,
|
|
13201
|
+
labelPosition = "after",
|
|
13202
|
+
className,
|
|
13203
|
+
...rest
|
|
13204
|
+
}, ref) => {
|
|
13205
|
+
const px = sizeMap2[size];
|
|
13206
|
+
const color = colorStyle === "brand" ? "text-primary-400" : "text-white";
|
|
13207
|
+
const labelColor = colorStyle === "brand" ? "text-grey-900" : "text-white";
|
|
13208
|
+
const spinnerEl = (() => {
|
|
13209
|
+
switch (type) {
|
|
13210
|
+
case "thin":
|
|
13211
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ThinSpinner, { size: px, color });
|
|
13212
|
+
case "bold":
|
|
13213
|
+
return /* @__PURE__ */ jsxRuntime.jsx(BoldSpinner, { size: px, color });
|
|
13214
|
+
case "duo-tone":
|
|
13215
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DuoToneSpinner, { size: px, color });
|
|
13216
|
+
case "buffering-thin":
|
|
13217
|
+
return /* @__PURE__ */ jsxRuntime.jsx(BufferingThinSpinner, { size: px, color });
|
|
13218
|
+
case "buffering-bold":
|
|
13219
|
+
return /* @__PURE__ */ jsxRuntime.jsx(BufferingBoldSpinner, { size: px, color });
|
|
13220
|
+
case "dot":
|
|
13221
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DotSpinner, { size: px, color });
|
|
13222
|
+
case "juggling":
|
|
13223
|
+
return /* @__PURE__ */ jsxRuntime.jsx(JugglingSpinner, { size: px, color });
|
|
13224
|
+
}
|
|
13225
|
+
})();
|
|
13226
|
+
const isVertical = labelPosition === "above" || labelPosition === "below";
|
|
13227
|
+
const isReversed = labelPosition === "before" || labelPosition === "above";
|
|
13228
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13229
|
+
"div",
|
|
13230
|
+
{
|
|
13231
|
+
ref,
|
|
13232
|
+
role: "status",
|
|
13233
|
+
"aria-label": label || "Loading",
|
|
13234
|
+
className: cn(
|
|
13235
|
+
"inline-flex items-center gap-2",
|
|
13236
|
+
isVertical && "flex-col",
|
|
13237
|
+
isReversed && (isVertical ? "flex-col-reverse" : "flex-row-reverse"),
|
|
13238
|
+
className
|
|
13239
|
+
),
|
|
13240
|
+
...rest,
|
|
13241
|
+
children: [
|
|
13242
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", style: { width: px, height: px }, children: spinnerEl }),
|
|
13243
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-sm leading-[1.45] whitespace-nowrap", labelColor), children: label })
|
|
13244
|
+
]
|
|
13245
|
+
}
|
|
13246
|
+
);
|
|
13247
|
+
}
|
|
13248
|
+
);
|
|
13249
|
+
Spinner.displayName = "Spinner";
|
|
13250
|
+
function CheckIcon({ className }) {
|
|
13251
|
+
return /* @__PURE__ */ jsxRuntime.jsx("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 3, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 12l5 5L20 7" }) });
|
|
13252
|
+
}
|
|
13253
|
+
function StepCircle({
|
|
13254
|
+
status,
|
|
13255
|
+
indicator,
|
|
13256
|
+
stepNumber,
|
|
13257
|
+
icon
|
|
13258
|
+
}) {
|
|
13259
|
+
const isCompleted = status === "completed";
|
|
13260
|
+
const isActive = status === "active";
|
|
13261
|
+
const isDisabled = status === "disabled";
|
|
13262
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
13263
|
+
"div",
|
|
13264
|
+
{
|
|
13265
|
+
className: cn(
|
|
13266
|
+
"shrink-0 flex items-center justify-center rounded-full size-6 border transition-colors",
|
|
13267
|
+
isCompleted && "bg-primary-400 border-primary-400 text-white",
|
|
13268
|
+
isActive && "bg-primary-50 border-primary-400 text-primary-400",
|
|
13269
|
+
!isCompleted && !isActive && !isDisabled && "bg-white dark:bg-grey-50 border-grey-300",
|
|
13270
|
+
isDisabled && "bg-grey-100 border-grey-200 text-grey-300"
|
|
13271
|
+
),
|
|
13272
|
+
children: isCompleted ? icon ?? /* @__PURE__ */ jsxRuntime.jsx(CheckIcon, { className: "size-3.5" }) : indicator === "dot" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
13273
|
+
"div",
|
|
13274
|
+
{
|
|
13275
|
+
className: cn(
|
|
13276
|
+
"size-2 rounded-full border",
|
|
13277
|
+
isActive ? "bg-primary-400 border-primary-400" : isDisabled ? "bg-grey-300 border-grey-300" : "bg-grey-400 border-grey-300"
|
|
13278
|
+
)
|
|
13279
|
+
}
|
|
13280
|
+
) : indicator === "number" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-xs font-medium", isActive ? "text-primary-400" : isDisabled ? "text-grey-300" : "text-grey-500"), children: stepNumber }) : icon ?? /* @__PURE__ */ jsxRuntime.jsx(
|
|
13281
|
+
"div",
|
|
13282
|
+
{
|
|
13283
|
+
className: cn(
|
|
13284
|
+
"size-2 rounded-full",
|
|
13285
|
+
isActive ? "bg-primary-400" : isDisabled ? "bg-grey-300" : "bg-grey-400"
|
|
13286
|
+
)
|
|
13287
|
+
}
|
|
13288
|
+
)
|
|
13289
|
+
}
|
|
13290
|
+
);
|
|
13291
|
+
}
|
|
13292
|
+
function Connector({
|
|
13293
|
+
orientation,
|
|
13294
|
+
completed
|
|
13295
|
+
}) {
|
|
13296
|
+
return orientation === "horizontal" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex-1 h-0.5 rounded-full", completed ? "bg-primary-400" : "bg-grey-300") }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-0.5 flex-1 min-h-[20px] ml-[11px] rounded-full", completed ? "bg-primary-400" : "bg-grey-300") });
|
|
13297
|
+
}
|
|
13298
|
+
function resolveStatuses(steps, activeStep) {
|
|
13299
|
+
if (activeStep !== void 0) {
|
|
13300
|
+
return steps.map((s, i) => {
|
|
13301
|
+
if (s.status === "disabled") return "disabled";
|
|
13302
|
+
if (i < activeStep) return "completed";
|
|
13303
|
+
if (i === activeStep) return "active";
|
|
13304
|
+
return "incomplete";
|
|
13305
|
+
});
|
|
13306
|
+
}
|
|
13307
|
+
return steps.map((s) => s.status ?? "incomplete");
|
|
13308
|
+
}
|
|
13309
|
+
var Stepper = react.forwardRef(
|
|
13310
|
+
({
|
|
13311
|
+
steps,
|
|
13312
|
+
activeStep,
|
|
13313
|
+
orientation = "horizontal",
|
|
13314
|
+
indicator = "dot",
|
|
13315
|
+
className,
|
|
13316
|
+
...rest
|
|
13317
|
+
}, ref) => {
|
|
13318
|
+
const statuses = resolveStatuses(steps, activeStep);
|
|
13319
|
+
if (orientation === "vertical") {
|
|
13320
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn("flex flex-col", className), ...rest, children: steps.map((step, i) => {
|
|
13321
|
+
const status = statuses[i];
|
|
13322
|
+
const isLast = i === steps.length - 1;
|
|
13323
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-3", children: [
|
|
13324
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center", children: [
|
|
13325
|
+
/* @__PURE__ */ jsxRuntime.jsx(StepCircle, { status, indicator, stepNumber: i + 1, icon: step.icon }),
|
|
13326
|
+
!isLast && /* @__PURE__ */ jsxRuntime.jsx(Connector, { orientation: "vertical", completed: status === "completed" })
|
|
13327
|
+
] }),
|
|
13328
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col pb-6", children: [
|
|
13329
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
13330
|
+
"span",
|
|
13331
|
+
{
|
|
13332
|
+
className: cn(
|
|
13333
|
+
"text-sm font-medium leading-[1.45]",
|
|
13334
|
+
status === "active" ? "text-grey-900" : status === "disabled" ? "text-grey-300" : "text-grey-600"
|
|
13335
|
+
),
|
|
13336
|
+
children: step.title
|
|
13337
|
+
}
|
|
13338
|
+
),
|
|
13339
|
+
step.description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-grey-500 leading-[1.45]", children: step.description })
|
|
13340
|
+
] })
|
|
13341
|
+
] }, i);
|
|
13342
|
+
}) });
|
|
13343
|
+
}
|
|
13344
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn("flex items-start w-full", className), ...rest, children: steps.map((step, i) => {
|
|
13345
|
+
const status = statuses[i];
|
|
13346
|
+
const isLast = i === steps.length - 1;
|
|
13347
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col flex-1 items-center gap-2.5", children: [
|
|
13348
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1 w-full", children: [
|
|
13349
|
+
/* @__PURE__ */ jsxRuntime.jsx(Connector, { orientation: "horizontal", completed: i > 0 && statuses[i - 1] === "completed" }),
|
|
13350
|
+
/* @__PURE__ */ jsxRuntime.jsx(StepCircle, { status, indicator, stepNumber: i + 1, icon: step.icon }),
|
|
13351
|
+
/* @__PURE__ */ jsxRuntime.jsx(Connector, { orientation: "horizontal", completed: !isLast && status === "completed" })
|
|
13352
|
+
] }),
|
|
13353
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-0.5 text-center w-full", children: [
|
|
13354
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
13355
|
+
"span",
|
|
13356
|
+
{
|
|
13357
|
+
className: cn(
|
|
13358
|
+
"text-xs font-medium leading-[1.45] tracking-tight",
|
|
13359
|
+
status === "active" ? "text-grey-700" : status === "disabled" ? "text-grey-300" : "text-grey-600"
|
|
13360
|
+
),
|
|
13361
|
+
children: step.title
|
|
13362
|
+
}
|
|
13363
|
+
),
|
|
13364
|
+
step.description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-grey-500 leading-[1.45] truncate", children: step.description })
|
|
13365
|
+
] })
|
|
13366
|
+
] }, i);
|
|
13367
|
+
}) });
|
|
13368
|
+
}
|
|
13369
|
+
);
|
|
13370
|
+
Stepper.displayName = "Stepper";
|
|
13371
|
+
var LinearStepper = react.forwardRef(
|
|
13372
|
+
({ currentStep, totalSteps, showLabel = true, className, ...rest }, ref) => {
|
|
13373
|
+
const pct = Math.min(100, Math.max(0, currentStep / totalSteps * 100));
|
|
13374
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: cn("flex flex-col gap-2 w-full", className), ...rest, children: [
|
|
13375
|
+
showLabel && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm font-semibold leading-[1.45]", children: [
|
|
13376
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-grey-900", children: currentStep }),
|
|
13377
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-grey-400", children: [
|
|
13378
|
+
" / ",
|
|
13379
|
+
totalSteps,
|
|
13380
|
+
" complete"
|
|
13381
|
+
] })
|
|
13382
|
+
] }),
|
|
13383
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-grey-200 rounded-full p-1 w-full overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
13384
|
+
"div",
|
|
13385
|
+
{
|
|
13386
|
+
className: "h-2 bg-primary-400 rounded-[10px] transition-all duration-300",
|
|
13387
|
+
style: { width: `${pct}%` }
|
|
13388
|
+
}
|
|
13389
|
+
) })
|
|
13390
|
+
] });
|
|
13391
|
+
}
|
|
13392
|
+
);
|
|
13393
|
+
LinearStepper.displayName = "LinearStepper";
|
|
13394
|
+
var SegmentedStepper = react.forwardRef(
|
|
13395
|
+
({ currentStep, totalSteps, showLabel = true, className, ...rest }, ref) => {
|
|
13396
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: cn("flex flex-col gap-2 w-full", className), ...rest, children: [
|
|
13397
|
+
showLabel && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm font-semibold leading-[1.45]", children: [
|
|
13398
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-grey-900", children: currentStep }),
|
|
13399
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-grey-400", children: [
|
|
13400
|
+
" / ",
|
|
13401
|
+
totalSteps,
|
|
13402
|
+
" complete"
|
|
13403
|
+
] })
|
|
13404
|
+
] }),
|
|
13405
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-grey-200 rounded-full p-1 w-full overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-1 h-2 w-full", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
13406
|
+
"div",
|
|
13407
|
+
{
|
|
13408
|
+
className: cn(
|
|
13409
|
+
"flex-1 rounded-[14px] border border-grey-50 transition-colors",
|
|
13410
|
+
i < currentStep ? "bg-primary-400" : "bg-grey-50"
|
|
13411
|
+
)
|
|
13412
|
+
},
|
|
13413
|
+
i
|
|
13414
|
+
)) }) })
|
|
13415
|
+
] });
|
|
13416
|
+
}
|
|
13417
|
+
);
|
|
13418
|
+
SegmentedStepper.displayName = "SegmentedStepper";
|
|
13419
|
+
var sizeConfig2 = {
|
|
13420
|
+
sm: { track: "h-1", handle: "size-3.5", handleSize: 14, border: "border-[2.333px]" },
|
|
13421
|
+
md: { track: "h-2", handle: "size-4", handleSize: 16, border: "border-[2.667px]" },
|
|
13422
|
+
lg: { track: "h-3", handle: "size-5", handleSize: 20, border: "border-[3.333px]" }
|
|
13423
|
+
};
|
|
13424
|
+
function clamp(val, min, max) {
|
|
13425
|
+
return Math.min(max, Math.max(min, val));
|
|
13426
|
+
}
|
|
13427
|
+
function getPercent(val, min, max) {
|
|
13428
|
+
return (val - min) / (max - min) * 100;
|
|
13429
|
+
}
|
|
13430
|
+
function getValueFromPosition(clientX, rect, min, max, step) {
|
|
13431
|
+
const pct = clamp((clientX - rect.left) / rect.width, 0, 1);
|
|
13432
|
+
const raw = min + pct * (max - min);
|
|
13433
|
+
const stepped = Math.round(raw / step) * step;
|
|
13434
|
+
return clamp(stepped, min, max);
|
|
13435
|
+
}
|
|
13436
|
+
var Slider = react.forwardRef(
|
|
13437
|
+
({
|
|
13438
|
+
value: controlledValue,
|
|
13439
|
+
onChange,
|
|
13440
|
+
size = "lg",
|
|
13441
|
+
label,
|
|
13442
|
+
metadata,
|
|
13443
|
+
showPercentage = true,
|
|
13444
|
+
min = 0,
|
|
13445
|
+
max = 100,
|
|
13446
|
+
step = 1,
|
|
13447
|
+
disabled = false,
|
|
13448
|
+
className,
|
|
13449
|
+
...rest
|
|
13450
|
+
}, ref) => {
|
|
13451
|
+
const [uncontrolled, setUncontrolled] = react.useState(0);
|
|
13452
|
+
const val = controlledValue ?? uncontrolled;
|
|
13453
|
+
const trackRef = react.useRef(null);
|
|
13454
|
+
const config = sizeConfig2[size];
|
|
13455
|
+
const pct = getPercent(val, min, max);
|
|
13456
|
+
const metaItems = Array.isArray(metadata) ? metadata : metadata ? [metadata] : [];
|
|
13457
|
+
const updateValue = react.useCallback(
|
|
13458
|
+
(clientX) => {
|
|
13459
|
+
if (disabled || !trackRef.current) return;
|
|
13460
|
+
const rect = trackRef.current.getBoundingClientRect();
|
|
13461
|
+
const v = getValueFromPosition(clientX, rect, min, max, step);
|
|
13462
|
+
if (controlledValue === void 0) setUncontrolled(v);
|
|
13463
|
+
onChange?.(v);
|
|
13464
|
+
},
|
|
13465
|
+
[disabled, min, max, step, controlledValue, onChange]
|
|
13466
|
+
);
|
|
13467
|
+
const handlePointerDown = react.useCallback(
|
|
13468
|
+
(e) => {
|
|
13469
|
+
if (disabled) return;
|
|
13470
|
+
e.preventDefault();
|
|
13471
|
+
e.target.setPointerCapture(e.pointerId);
|
|
13472
|
+
updateValue(e.clientX);
|
|
13473
|
+
},
|
|
13474
|
+
[disabled, updateValue]
|
|
13475
|
+
);
|
|
13476
|
+
const handlePointerMove = react.useCallback(
|
|
13477
|
+
(e) => {
|
|
13478
|
+
if (disabled || !e.buttons) return;
|
|
13479
|
+
updateValue(e.clientX);
|
|
13480
|
+
},
|
|
13481
|
+
[disabled, updateValue]
|
|
13482
|
+
);
|
|
13483
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13484
|
+
"div",
|
|
13485
|
+
{
|
|
13486
|
+
ref,
|
|
13487
|
+
className: cn("flex flex-col gap-2 w-full", disabled && "opacity-50", className),
|
|
13488
|
+
...rest,
|
|
13489
|
+
children: [
|
|
13490
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-grey-900 leading-[1.45]", children: label }),
|
|
13491
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
13492
|
+
"div",
|
|
13493
|
+
{
|
|
13494
|
+
ref: trackRef,
|
|
13495
|
+
className: cn(
|
|
13496
|
+
"relative w-full rounded-full bg-grey-200 cursor-pointer",
|
|
13497
|
+
config.track,
|
|
13498
|
+
disabled && "cursor-not-allowed"
|
|
13499
|
+
),
|
|
13500
|
+
onPointerDown: handlePointerDown,
|
|
13501
|
+
onPointerMove: handlePointerMove,
|
|
13502
|
+
role: "slider",
|
|
13503
|
+
"aria-valuenow": val,
|
|
13504
|
+
"aria-valuemin": min,
|
|
13505
|
+
"aria-valuemax": max,
|
|
13506
|
+
tabIndex: disabled ? -1 : 0,
|
|
13507
|
+
children: [
|
|
13508
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
13509
|
+
"div",
|
|
13510
|
+
{
|
|
13511
|
+
className: cn("absolute left-0 top-0 rounded-full bg-primary-400", config.track),
|
|
13512
|
+
style: { width: `${pct}%` }
|
|
13513
|
+
}
|
|
13514
|
+
),
|
|
13515
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
13516
|
+
"div",
|
|
13517
|
+
{
|
|
13518
|
+
className: cn(
|
|
13519
|
+
"absolute top-1/2 -translate-y-1/2 rounded-full bg-primary-500 border-white border-solid shadow-sm",
|
|
13520
|
+
config.handle,
|
|
13521
|
+
config.border
|
|
13522
|
+
),
|
|
13523
|
+
style: { left: `${pct}%`, transform: `translate(-50%, -50%)` }
|
|
13524
|
+
}
|
|
13525
|
+
)
|
|
13526
|
+
]
|
|
13527
|
+
}
|
|
13528
|
+
),
|
|
13529
|
+
(metaItems.length > 0 || showPercentage) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
13530
|
+
metaItems.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-1 items-center gap-1", children: metaItems.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "contents", children: [
|
|
13531
|
+
i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-grey-400", children: "\u2022" }),
|
|
13532
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-grey-500 leading-[1.45]", children: item })
|
|
13533
|
+
] }, i)) }),
|
|
13534
|
+
showPercentage && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex-1 text-sm font-semibold text-grey-500 text-right leading-[1.45]", children: [
|
|
13535
|
+
Math.round(pct),
|
|
13536
|
+
"%"
|
|
13537
|
+
] })
|
|
13538
|
+
] })
|
|
13539
|
+
]
|
|
13540
|
+
}
|
|
13541
|
+
);
|
|
13542
|
+
}
|
|
13543
|
+
);
|
|
13544
|
+
Slider.displayName = "Slider";
|
|
13545
|
+
var RangeSlider = react.forwardRef(
|
|
13546
|
+
({
|
|
13547
|
+
value: controlledValue,
|
|
13548
|
+
onChange,
|
|
13549
|
+
size = "lg",
|
|
13550
|
+
label,
|
|
13551
|
+
showLabels = true,
|
|
13552
|
+
min = 0,
|
|
13553
|
+
max = 100,
|
|
13554
|
+
step = 1,
|
|
13555
|
+
disabled = false,
|
|
13556
|
+
className,
|
|
13557
|
+
...rest
|
|
13558
|
+
}, ref) => {
|
|
13559
|
+
const [uncontrolled, setUncontrolled] = react.useState([25, 75]);
|
|
13560
|
+
const val = controlledValue ?? uncontrolled;
|
|
13561
|
+
const trackRef = react.useRef(null);
|
|
13562
|
+
const dragging = react.useRef(null);
|
|
13563
|
+
const config = sizeConfig2[size];
|
|
13564
|
+
const lowPct = getPercent(val[0], min, max);
|
|
13565
|
+
const highPct = getPercent(val[1], min, max);
|
|
13566
|
+
const update = react.useCallback(
|
|
13567
|
+
(newVal) => {
|
|
13568
|
+
if (controlledValue === void 0) setUncontrolled(newVal);
|
|
13569
|
+
onChange?.(newVal);
|
|
13570
|
+
},
|
|
13571
|
+
[controlledValue, onChange]
|
|
13572
|
+
);
|
|
13573
|
+
const handlePointerDown = react.useCallback(
|
|
13574
|
+
(e) => {
|
|
13575
|
+
if (disabled || !trackRef.current) return;
|
|
13576
|
+
e.preventDefault();
|
|
13577
|
+
e.target.setPointerCapture(e.pointerId);
|
|
13578
|
+
const rect = trackRef.current.getBoundingClientRect();
|
|
13579
|
+
const v = getValueFromPosition(e.clientX, rect, min, max, step);
|
|
13580
|
+
const distLow = Math.abs(v - val[0]);
|
|
13581
|
+
const distHigh = Math.abs(v - val[1]);
|
|
13582
|
+
dragging.current = distLow <= distHigh ? "low" : "high";
|
|
13583
|
+
if (dragging.current === "low") {
|
|
13584
|
+
update([clamp(v, min, val[1]), val[1]]);
|
|
13585
|
+
} else {
|
|
13586
|
+
update([val[0], clamp(v, val[0], max)]);
|
|
13587
|
+
}
|
|
13588
|
+
},
|
|
13589
|
+
[disabled, min, max, step, val, update]
|
|
13590
|
+
);
|
|
13591
|
+
const handlePointerMove = react.useCallback(
|
|
13592
|
+
(e) => {
|
|
13593
|
+
if (disabled || !e.buttons || !trackRef.current || !dragging.current) return;
|
|
13594
|
+
const rect = trackRef.current.getBoundingClientRect();
|
|
13595
|
+
const v = getValueFromPosition(e.clientX, rect, min, max, step);
|
|
13596
|
+
if (dragging.current === "low") {
|
|
13597
|
+
update([clamp(v, min, val[1]), val[1]]);
|
|
13598
|
+
} else {
|
|
13599
|
+
update([val[0], clamp(v, val[0], max)]);
|
|
13600
|
+
}
|
|
13601
|
+
},
|
|
13602
|
+
[disabled, min, max, step, val, update]
|
|
13603
|
+
);
|
|
13604
|
+
const handlePointerUp = react.useCallback(() => {
|
|
13605
|
+
dragging.current = null;
|
|
13606
|
+
}, []);
|
|
13607
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13608
|
+
"div",
|
|
13609
|
+
{
|
|
13610
|
+
ref,
|
|
13611
|
+
className: cn("flex flex-col gap-2 w-full", disabled && "opacity-50", className),
|
|
13612
|
+
...rest,
|
|
13613
|
+
children: [
|
|
13614
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-grey-900 leading-[1.45]", children: label }),
|
|
13615
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
13616
|
+
"div",
|
|
13617
|
+
{
|
|
13618
|
+
ref: trackRef,
|
|
13619
|
+
className: cn(
|
|
13620
|
+
"relative w-full rounded-full bg-grey-200 cursor-pointer",
|
|
13621
|
+
config.track,
|
|
13622
|
+
disabled && "cursor-not-allowed"
|
|
13623
|
+
),
|
|
13624
|
+
onPointerDown: handlePointerDown,
|
|
13625
|
+
onPointerMove: handlePointerMove,
|
|
13626
|
+
onPointerUp: handlePointerUp,
|
|
13627
|
+
role: "slider",
|
|
13628
|
+
"aria-valuenow": val[0],
|
|
13629
|
+
"aria-valuemin": min,
|
|
13630
|
+
"aria-valuemax": max,
|
|
13631
|
+
tabIndex: disabled ? -1 : 0,
|
|
13632
|
+
children: [
|
|
13633
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
13634
|
+
"div",
|
|
13635
|
+
{
|
|
13636
|
+
className: cn("absolute top-0 rounded-full bg-primary-400", config.track),
|
|
13637
|
+
style: { left: `${lowPct}%`, width: `${highPct - lowPct}%` }
|
|
13638
|
+
}
|
|
13639
|
+
),
|
|
13640
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
13641
|
+
"div",
|
|
13642
|
+
{
|
|
13643
|
+
className: cn(
|
|
13644
|
+
"absolute top-1/2 rounded-full bg-primary-500 border-white border-solid shadow-sm z-10",
|
|
13645
|
+
config.handle,
|
|
13646
|
+
config.border
|
|
13647
|
+
),
|
|
13648
|
+
style: { left: `${lowPct}%`, transform: `translate(-50%, -50%)` }
|
|
13649
|
+
}
|
|
13650
|
+
),
|
|
13651
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
13652
|
+
"div",
|
|
13653
|
+
{
|
|
13654
|
+
className: cn(
|
|
13655
|
+
"absolute top-1/2 rounded-full bg-primary-500 border-white border-solid shadow-sm z-10",
|
|
13656
|
+
config.handle,
|
|
13657
|
+
config.border
|
|
13658
|
+
),
|
|
13659
|
+
style: { left: `${highPct}%`, transform: `translate(-50%, -50%)` }
|
|
13660
|
+
}
|
|
13661
|
+
)
|
|
13662
|
+
]
|
|
13663
|
+
}
|
|
13664
|
+
),
|
|
13665
|
+
showLabels && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
13666
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-medium text-grey-500 leading-[1.45]", children: [
|
|
13667
|
+
Math.round(getPercent(val[0], min, max)),
|
|
13668
|
+
"%"
|
|
13669
|
+
] }),
|
|
13670
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-semibold text-grey-500 text-right leading-[1.45]", children: [
|
|
13671
|
+
Math.round(getPercent(val[1], min, max)),
|
|
13672
|
+
"%"
|
|
13673
|
+
] })
|
|
13674
|
+
] })
|
|
13675
|
+
]
|
|
13676
|
+
}
|
|
13677
|
+
);
|
|
13678
|
+
}
|
|
13679
|
+
);
|
|
13680
|
+
RangeSlider.displayName = "RangeSlider";
|
|
11628
13681
|
var SelectContext = react.createContext(null);
|
|
11629
13682
|
function useSelectContext() {
|
|
11630
13683
|
const ctx = react.useContext(SelectContext);
|
|
@@ -12282,18 +14335,25 @@ function useRaydenRadio({
|
|
|
12282
14335
|
};
|
|
12283
14336
|
}
|
|
12284
14337
|
|
|
14338
|
+
exports.Accordion = Accordion;
|
|
14339
|
+
exports.AccordionContent = AccordionContent;
|
|
14340
|
+
exports.AccordionItem = AccordionItem;
|
|
14341
|
+
exports.AccordionTrigger = AccordionTrigger;
|
|
12285
14342
|
exports.ActivityContent = ActivityContent;
|
|
12286
14343
|
exports.ActivityItem = ActivityItem;
|
|
12287
14344
|
exports.Alert = Alert;
|
|
12288
14345
|
exports.Avatar = Avatar;
|
|
12289
14346
|
exports.AvatarGroup = AvatarGroup;
|
|
12290
14347
|
exports.Badge = Badge;
|
|
14348
|
+
exports.Banner = Banner;
|
|
12291
14349
|
exports.Breadcrumb = Breadcrumb;
|
|
12292
14350
|
exports.Button = Button;
|
|
12293
14351
|
exports.ButtonGroup = ButtonGroup;
|
|
12294
14352
|
exports.ButtonGroupItem = ButtonGroupItem;
|
|
12295
14353
|
exports.Checkbox = Checkbox;
|
|
12296
14354
|
exports.Chip = Chip;
|
|
14355
|
+
exports.Counter = Counter;
|
|
14356
|
+
exports.DatePicker = DatePicker;
|
|
12297
14357
|
exports.Divider = Divider;
|
|
12298
14358
|
exports.DropdownMenu = DropdownMenu;
|
|
12299
14359
|
exports.DropdownMenuContent = DropdownMenuContent;
|
|
@@ -12308,11 +14368,17 @@ exports.FileUploadDropZone = FileUploadDropZone;
|
|
|
12308
14368
|
exports.FileUploadItem = FileUploadItem;
|
|
12309
14369
|
exports.Icon = Icon;
|
|
12310
14370
|
exports.Input = Input;
|
|
14371
|
+
exports.LinearStepper = LinearStepper;
|
|
12311
14372
|
exports.MetricsCard = MetricsCard;
|
|
14373
|
+
exports.Modal = Modal;
|
|
14374
|
+
exports.NumberCounter = NumberCounter;
|
|
12312
14375
|
exports.Pagination = Pagination;
|
|
12313
14376
|
exports.ProgressBar = ProgressBar;
|
|
12314
14377
|
exports.ProgressCircle = ProgressCircle;
|
|
12315
14378
|
exports.Radio = Radio;
|
|
14379
|
+
exports.RangeSlider = RangeSlider;
|
|
14380
|
+
exports.RaydenChart = RaydenChart;
|
|
14381
|
+
exports.SegmentedStepper = SegmentedStepper;
|
|
12316
14382
|
exports.Select = Select;
|
|
12317
14383
|
exports.SelectOption = SelectOption;
|
|
12318
14384
|
exports.SidebarMenu = SidebarMenu;
|
|
@@ -12320,6 +14386,9 @@ exports.SidebarMenuItem = SidebarMenuItem;
|
|
|
12320
14386
|
exports.SidebarMenuSection = SidebarMenuSection;
|
|
12321
14387
|
exports.SidebarMenuSub = SidebarMenuSub;
|
|
12322
14388
|
exports.SidebarMenuSubItem = SidebarMenuSubItem;
|
|
14389
|
+
exports.Slider = Slider;
|
|
14390
|
+
exports.Spinner = Spinner;
|
|
14391
|
+
exports.Stepper = Stepper;
|
|
12323
14392
|
exports.Tab = Tab;
|
|
12324
14393
|
exports.Table = Table;
|
|
12325
14394
|
exports.TableBody = TableBody;
|
|
@@ -12330,8 +14399,12 @@ exports.TableRow = TableRow;
|
|
|
12330
14399
|
exports.Tabs = Tabs;
|
|
12331
14400
|
exports.ThemeProvider = ThemeProvider;
|
|
12332
14401
|
exports.Toggle = Toggle;
|
|
12333
|
-
exports.Tooltip =
|
|
14402
|
+
exports.Tooltip = Tooltip2;
|
|
14403
|
+
exports.chartColors = chartColors;
|
|
14404
|
+
exports.chartFont = chartFont;
|
|
12334
14405
|
exports.cn = cn;
|
|
14406
|
+
exports.createGradientFill = createGradientFill;
|
|
14407
|
+
exports.hexToRgba = hexToRgba;
|
|
12335
14408
|
exports.illustrationNames = illustrationNames;
|
|
12336
14409
|
exports.useRaydenCheckbox = useRaydenCheckbox;
|
|
12337
14410
|
exports.useRaydenInput = useRaydenInput;
|