@raydenui/ui 0.7.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/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/Button/Button.tsx
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
- "AR": ARIcon,
5200
- "BTC": BTCIcon,
5201
- "ETH": ETHIcon,
5202
- "NFT": NFTIcon,
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
- "airplane": airplaneIcon,
5209
- "airpod": airpodIcon,
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
- "at": atIcon,
5227
- "backward": backwardIcon,
5228
- "badge": badgeIcon,
5229
- "bag": bagIcon,
5230
- "ball": ballIcon,
5231
- "bank": bankIcon,
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
- "battery": batteryIcon,
5237
+ battery: batteryIcon,
5235
5238
  "battery-charging": batteryChargingIcon,
5236
5239
  "battery-empty": batteryEmptyIcon,
5237
- "bed": bedIcon,
5240
+ bed: bedIcon,
5238
5241
  "beizer-curve": beizerCurveIcon,
5239
- "bell": bellIcon,
5242
+ bell: bellIcon,
5240
5243
  "bell-slash": bellSlashIcon,
5241
- "bicycle": bicycleIcon,
5242
- "bin": binIcon,
5243
- "bluetooth": bluetoothIcon,
5244
- "bold": boldIcon,
5245
- "book": bookIcon,
5244
+ bicycle: bicycleIcon,
5245
+ bin: binIcon,
5246
+ bluetooth: bluetoothIcon,
5247
+ bold: boldIcon,
5248
+ book: bookIcon,
5246
5249
  "book-open": bookOpenIcon,
5247
- "bookmark": bookmarkIcon,
5250
+ bookmark: bookmarkIcon,
5248
5251
  "bookmark-add": bookmarkAddIcon,
5249
- "bookmarks": bookmarksIcon,
5250
- "books": booksIcon,
5251
- "bot": botIcon,
5252
- "box": boxIcon,
5252
+ bookmarks: bookmarksIcon,
5253
+ books: booksIcon,
5254
+ bot: botIcon,
5255
+ box: boxIcon,
5253
5256
  "box-1": box1Icon,
5254
- "branch": branchIcon,
5255
- "brush": brushIcon,
5256
- "bug": bugIcon,
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
- "bulb": bulbIcon,
5266
+ bulb: bulbIcon,
5264
5267
  "bulb-slash": bulbSlashIcon,
5265
- "bus": busIcon,
5266
- "calendar": calendarIcon,
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
- "call": callIcon,
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
- "camera": cameraIcon,
5282
+ camera: cameraIcon,
5280
5283
  "camera-slash": cameraSlashIcon,
5281
5284
  "candles-h": candlesHIcon,
5282
5285
  "candles-v": candlesVIcon,
5283
- "car": carIcon,
5284
- "card": cardIcon,
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
- "cart": cartIcon,
5296
+ cart: cartIcon,
5294
5297
  "cart-add": cartAddIcon,
5295
5298
  "cart-check": cartCheckIcon,
5296
5299
  "cart-cross": cartCrossIcon,
5297
5300
  "cart-minus": cartMinusIcon,
5298
- "chart": chartIcon,
5301
+ chart: chartIcon,
5299
5302
  "chart-down": chartDownIcon,
5300
5303
  "chart-up": chartUpIcon,
5301
- "chat": chatIcon,
5304
+ chat: chatIcon,
5302
5305
  "chat-alt": chatAltIcon,
5303
- "chats": chatsIcon,
5304
- "check": checkIcon,
5306
+ chats: chatsIcon,
5307
+ check: checkIcon,
5305
5308
  "check-circle": checkCircleIcon,
5306
- "checkbox": checkboxIcon,
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
- "clipboard": clipboardIcon,
5315
- "clock": clockIcon,
5316
- "cloud": cloudIcon,
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
- "clouds": cloudsIcon,
5326
- "code": codeIcon,
5328
+ clouds: cloudsIcon,
5329
+ code: codeIcon,
5327
5330
  "code-2": code2Icon,
5328
5331
  "coin-stack": coinStackIcon,
5329
5332
  "coin-swap": coinSwapIcon,
5330
- "coins": coinsIcon,
5333
+ coins: coinsIcon,
5331
5334
  "coins-alt": coinsAltIcon,
5332
5335
  "color-picker": colorPickerIcon,
5333
- "column": columnIcon,
5334
- "compass": compassIcon,
5336
+ column: columnIcon,
5337
+ compass: compassIcon,
5335
5338
  "conical-flask": conicalFlaskIcon,
5336
- "copy": copyIcon,
5337
- "corner": cornerIcon,
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
- "crop": cropIcon,
5347
- "cup": cupIcon,
5348
- "cursor": cursorIcon,
5349
- "data": dataIcon,
5350
- "devices": devicesIcon,
5351
- "dislike": dislikeIcon,
5352
- "division": divisionIcon,
5353
- "dollar": dollarIcon,
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
- "download": downloadIcon,
5359
- "elements": elementsIcon,
5360
- "emoji": emojiIcon,
5361
+ download: downloadIcon,
5362
+ elements: elementsIcon,
5363
+ emoji: emojiIcon,
5361
5364
  "emoji-add": emojiAddIcon,
5362
- "euro": euroIcon,
5363
- "expand": expandIcon,
5364
- "eye": eyeIcon,
5365
+ euro: euroIcon,
5366
+ expand: expandIcon,
5367
+ eye: eyeIcon,
5365
5368
  "eye-slash": eyeSlashIcon,
5366
5369
  "face-id": faceIdIcon,
5367
- "feather": featherIcon,
5370
+ feather: featherIcon,
5368
5371
  "feather-AI": featherAIIcon,
5369
5372
  "feather-add": featherAddIcon,
5370
- "file": fileIcon,
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
- "filter": filterIcon,
5379
+ filter: filterIcon,
5377
5380
  "filter-alt": filterAltIcon,
5378
- "fingerprint": fingerprintIcon,
5381
+ fingerprint: fingerprintIcon,
5379
5382
  "first-aid": firstAidIcon,
5380
- "flag": flagIcon,
5381
- "flower": flowerIcon,
5382
- "folder": folderIcon,
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
- "fork": forkIcon,
5393
- "forward": forwardIcon,
5395
+ fork: forkIcon,
5396
+ forward: forwardIcon,
5394
5397
  "game-pad": gamePadIcon,
5395
5398
  "gear-AI": gearAIIcon,
5396
- "gem": gemIcon,
5397
- "gift": giftIcon,
5398
- "globe": globeIcon,
5399
+ gem: gemIcon,
5400
+ gift: giftIcon,
5401
+ globe: globeIcon,
5399
5402
  "globe-alt": globeAltIcon,
5400
- "gps": gpsIcon,
5401
- "grid": gridIcon,
5403
+ gps: gpsIcon,
5404
+ grid: gridIcon,
5402
5405
  "grid-2": grid2Icon,
5403
- "hashtag": hashtagIcon,
5404
- "heading": headingIcon,
5405
- "headphones": headphonesIcon,
5406
- "headset": headsetIcon,
5406
+ hashtag: hashtagIcon,
5407
+ heading: headingIcon,
5408
+ headphones: headphonesIcon,
5409
+ headset: headsetIcon,
5407
5410
  "health-plus": healthPlusIcon,
5408
- "heart": heartIcon,
5411
+ heart: heartIcon,
5409
5412
  "heart-beat": heartBeatIcon,
5410
5413
  "heart-beat-wave": heartBeatWaveIcon,
5411
- "history": historyIcon,
5412
- "home": homeIcon,
5414
+ history: historyIcon,
5415
+ home: homeIcon,
5413
5416
  "home-alt": homeAltIcon,
5414
- "image": imageIcon,
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
- "italics": italicsIcon,
5424
- "key": keyIcon,
5425
- "keyboard": keyboardIcon,
5426
- "lamp": lampIcon,
5427
- "laptop": laptopIcon,
5428
- "layer": layerIcon,
5429
- "lifebuoy": lifebuoyIcon,
5430
- "lightning": lightningIcon,
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
- "like": likeIcon,
5435
+ like: likeIcon,
5433
5436
  "line-height": lineHeightIcon,
5434
- "link": linkIcon,
5437
+ link: linkIcon,
5435
5438
  "link-detach": linkDetachIcon,
5436
- "list": listIcon,
5439
+ list: listIcon,
5437
5440
  "list-add": listAddIcon,
5438
- "lock": lockIcon,
5441
+ lock: lockIcon,
5439
5442
  "lock-open": lockOpenIcon,
5440
- "loudspeaker": loudspeakerIcon,
5443
+ loudspeaker: loudspeakerIcon,
5441
5444
  "magic-wand": magicWandIcon,
5442
- "mail": mailIcon,
5445
+ mail: mailIcon,
5443
5446
  "mail-add": mailAddIcon,
5444
5447
  "mail-check": mailCheckIcon,
5445
5448
  "mail-cross": mailCrossIcon,
5446
5449
  "mail-remove": mailRemoveIcon,
5447
- "map": mapIcon,
5450
+ map: mapIcon,
5448
5451
  "map-alt": mapAltIcon,
5449
5452
  "map-marker": mapMarkerIcon,
5450
- "media": mediaIcon,
5451
- "merge": mergeIcon,
5452
- "message": messageIcon,
5453
+ media: mediaIcon,
5454
+ merge: mergeIcon,
5455
+ message: messageIcon,
5453
5456
  "message-alt": messageAltIcon,
5454
- "messages": messagesIcon,
5455
- "microphone": microphoneIcon,
5457
+ messages: messagesIcon,
5458
+ microphone: microphoneIcon,
5456
5459
  "microphone-slash": microphoneSlashIcon,
5457
- "minus": minusIcon,
5460
+ minus: minusIcon,
5458
5461
  "minus-circle": minusCircleIcon,
5459
- "mobile": mobileIcon,
5460
- "money": moneyIcon,
5462
+ mobile: mobileIcon,
5463
+ money: moneyIcon,
5461
5464
  "money-1": money1Icon,
5462
5465
  "money-2": money2Icon,
5463
- "moon": moonIcon,
5466
+ moon: moonIcon,
5464
5467
  "moon-cloud": moonCloudIcon,
5465
5468
  "moon-stars": moonStarsIcon,
5466
- "mouse": mouseIcon,
5467
- "move": moveIcon,
5468
- "multiply": multiplyIcon,
5469
+ mouse: mouseIcon,
5470
+ move: moveIcon,
5471
+ multiply: multiplyIcon,
5469
5472
  "multiply-circle": multiplyCircleIcon,
5470
- "music": musicIcon,
5473
+ music: musicIcon,
5471
5474
  "music-AI": musicAIIcon,
5472
5475
  "music-note": musicNoteIcon,
5473
- "naira": nairaIcon,
5474
- "navigation": navigationIcon,
5476
+ naira: nairaIcon,
5477
+ navigation: navigationIcon,
5475
5478
  "navigation-alt": navigationAltIcon,
5476
- "newspaper": newspaperIcon,
5477
- "next": nextIcon,
5479
+ newspaper: newspaperIcon,
5480
+ next: nextIcon,
5478
5481
  "paint-brush": paintBrushIcon,
5479
5482
  "paint-bucket": paintBucketIcon,
5480
- "palette": paletteIcon,
5483
+ palette: paletteIcon,
5481
5484
  "paper-clip": paperClipIcon,
5482
5485
  "paragraph-spacing": paragraphSpacingIcon,
5483
- "pause": pauseIcon,
5484
- "pc": pcIcon,
5486
+ pause: pauseIcon,
5487
+ pc: pcIcon,
5485
5488
  "pc-lock": pcLockIcon,
5486
5489
  "pc-speaker": pcSpeakerIcon,
5487
5490
  "pc-user": pcUserIcon,
5488
- "pencil": pencilIcon,
5491
+ pencil: pencilIcon,
5489
5492
  "pencil-edit": pencilEditIcon,
5490
5493
  "pie-chart": pieChartIcon,
5491
- "pin": pinIcon,
5494
+ pin: pinIcon,
5492
5495
  "pin-alt": pinAltIcon,
5493
- "plant": plantIcon,
5496
+ plant: plantIcon,
5494
5497
  "plant-2": plant2Icon,
5495
- "play": playIcon,
5496
- "playlist": playlistIcon,
5497
- "plus": plusIcon,
5498
+ play: playIcon,
5499
+ playlist: playlistIcon,
5500
+ plus: plusIcon,
5498
5501
  "plus-circle": plusCircleIcon,
5499
- "pounds": poundsIcon,
5500
- "power": powerIcon,
5501
- "previous": previousIcon,
5502
- "printer": printerIcon,
5503
- "processor": processorIcon,
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
- "quote": quoteIcon,
5509
+ quote: quoteIcon,
5507
5510
  "radio-button": radioButtonIcon,
5508
5511
  "radio-selected": radioSelectedIcon,
5509
- "receipt": receiptIcon,
5510
- "redo": redoIcon,
5511
- "refresh": refreshIcon,
5512
- "repeat": repeatIcon,
5512
+ receipt: receiptIcon,
5513
+ redo: redoIcon,
5514
+ refresh: refreshIcon,
5515
+ repeat: repeatIcon,
5513
5516
  "repeat-once": repeatOnceIcon,
5514
5517
  "road-sign": roadSignIcon,
5515
- "rocket": rocketIcon,
5518
+ rocket: rocketIcon,
5516
5519
  "rocket-alt": rocketAltIcon,
5517
5520
  "rotate-left": rotateLeftIcon,
5518
5521
  "rotate-right": rotateRightIcon,
5519
- "route": routeIcon,
5520
- "row": rowIcon,
5521
- "save": saveIcon,
5522
- "scan": scanIcon,
5523
- "scissor": scissorIcon,
5524
- "screenshot": screenshotIcon,
5525
- "search": searchIcon,
5526
- "send": sendIcon,
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
- "server": serverIcon,
5532
+ server: serverIcon,
5530
5533
  "server-alt": serverAltIcon,
5531
- "settings": settingsIcon,
5534
+ settings: settingsIcon,
5532
5535
  "settings-1": settings1Icon,
5533
5536
  "settings-2": settings2Icon,
5534
- "share": shareIcon,
5537
+ share: shareIcon,
5535
5538
  "share-alt": shareAltIcon,
5536
- "shield": shieldIcon,
5539
+ shield: shieldIcon,
5537
5540
  "shield-cross": shieldCrossIcon,
5538
5541
  "shield-tick": shieldTickIcon,
5539
- "ship": shipIcon,
5540
- "shower": showerIcon,
5541
- "shrink": shrinkIcon,
5542
+ ship: shipIcon,
5543
+ shower: showerIcon,
5544
+ shrink: shrinkIcon,
5542
5545
  "shrink-alt": shrinkAltIcon,
5543
- "shuffle": shuffleIcon,
5546
+ shuffle: shuffleIcon,
5544
5547
  "sign-in": signInIcon,
5545
5548
  "sign-out": signOutIcon,
5546
- "signal": signalIcon,
5549
+ signal: signalIcon,
5547
5550
  "signal-off": signalOffIcon,
5548
- "sim": simIcon,
5549
- "snooze": snoozeIcon,
5550
- "snowflake": snowflakeIcon,
5551
- "sofa": sofaIcon,
5552
- "speaker": speakerIcon,
5553
- "star": starIcon,
5554
- "stars": starsIcon,
5555
- "stop": stopIcon,
5556
- "stopwatch": stopwatchIcon,
5557
- "store": storeIcon,
5558
- "strikethrough": strikethroughIcon,
5559
- "subscript": subscriptIcon,
5560
- "suitcase": suitcaseIcon,
5561
- "sun": sunIcon,
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
- "superscript": superscriptIcon,
5564
- "support": supportIcon,
5566
+ superscript: superscriptIcon,
5567
+ support: supportIcon,
5565
5568
  "switch-diagonal": switchDiagonalIcon,
5566
5569
  "switch-horizontal": switchHorizontalIcon,
5567
5570
  "switch-vertical": switchVerticalIcon,
5568
- "tablet": tabletIcon,
5569
- "target": targetIcon,
5570
- "taxi": taxiIcon,
5571
- "terminal": terminalIcon,
5572
- "text": textIcon,
5573
- "thermometer": thermometerIcon,
5574
- "ticket": ticketIcon,
5575
- "tissue": tissueIcon,
5576
- "train": trainIcon,
5577
- "trophy": trophyIcon,
5578
- "truck": truckIcon,
5579
- "tv": tvIcon,
5580
- "underline": underlineIcon,
5581
- "undo": undoIcon,
5582
- "upload": uploadIcon,
5583
- "user": userIcon,
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
- "users": usersIcon,
5592
- "verified": verifiedIcon,
5593
- "video": videoIcon,
5594
+ users: usersIcon,
5595
+ verified: verifiedIcon,
5596
+ video: videoIcon,
5594
5597
  "video-slash": videoSlashIcon,
5595
5598
  "voice-note": voiceNoteIcon,
5596
- "volume": volumeIcon,
5599
+ volume: volumeIcon,
5597
5600
  "volume-low": volumeLowIcon,
5598
5601
  "volume-mute": volumeMuteIcon,
5599
5602
  "volume-slash": volumeSlashIcon,
5600
- "wallet": walletIcon,
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
- "wifi": wifiIcon,
5609
- "wristwatch": wristwatchIcon,
5610
- "yen": yenIcon,
5611
+ wifi: wifiIcon,
5612
+ wristwatch: wristwatchIcon,
5613
+ yen: yenIcon,
5611
5614
  "zoom-in": zoomInIcon,
5612
5615
  "zoom-out": zoomOutIcon
5613
5616
  };
@@ -5654,6 +5657,167 @@ 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("w-full", type === "nested" && "flex flex-col gap-3", className),
5713
+ ...rest,
5714
+ children
5715
+ }
5716
+ ) });
5717
+ }
5718
+ );
5719
+ Accordion.displayName = "Accordion";
5720
+ var AccordionItem = react.forwardRef(
5721
+ ({ value, disabled = false, className, children, ...rest }, ref) => {
5722
+ const { type, openItems } = useAccordionContext();
5723
+ const isOpen = openItems.includes(value);
5724
+ const generatedId = react.useId();
5725
+ const triggerId = `accordion-trigger-${generatedId}`;
5726
+ const contentId = `accordion-content-${generatedId}`;
5727
+ return /* @__PURE__ */ jsxRuntime.jsx(AccordionItemContext.Provider, { value: { value, isOpen, disabled, triggerId, contentId }, children: /* @__PURE__ */ jsxRuntime.jsx(
5728
+ "div",
5729
+ {
5730
+ ref,
5731
+ className: cn(
5732
+ "border-solid transition-colors",
5733
+ type === "default" ? cn("border-b", isOpen ? "border-primary-300" : "border-grey-100") : cn("border rounded-[10px]", isOpen ? "border-primary-300" : "border-grey-75"),
5734
+ className
5735
+ ),
5736
+ ...rest,
5737
+ children
5738
+ }
5739
+ ) });
5740
+ }
5741
+ );
5742
+ AccordionItem.displayName = "AccordionItem";
5743
+ var AccordionTrigger = react.forwardRef(
5744
+ ({
5745
+ leadingIcon,
5746
+ leadingNumber,
5747
+ leadingLogo,
5748
+ badge,
5749
+ hideChevron = false,
5750
+ className,
5751
+ children,
5752
+ ...rest
5753
+ }, ref) => {
5754
+ const { toggle } = useAccordionContext();
5755
+ const { value, isOpen, disabled, triggerId, contentId } = useAccordionItemContext();
5756
+ return /* @__PURE__ */ jsxRuntime.jsxs(
5757
+ "button",
5758
+ {
5759
+ ref,
5760
+ id: triggerId,
5761
+ type: "button",
5762
+ disabled,
5763
+ "aria-expanded": isOpen,
5764
+ "aria-controls": contentId,
5765
+ onClick: () => toggle(value),
5766
+ className: cn(
5767
+ "flex items-center gap-3 px-4 py-6 w-full text-left transition-colors",
5768
+ !isOpen && !disabled && "hover:bg-grey-50",
5769
+ disabled && "opacity-50 cursor-not-allowed",
5770
+ className
5771
+ ),
5772
+ ...rest,
5773
+ children: [
5774
+ 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 }),
5775
+ leadingLogo && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0", children: leadingLogo }),
5776
+ leadingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-6 text-grey-500", children: resolveIcon(leadingIcon, "md") }),
5777
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1 min-w-0 text-lg font-semibold text-grey-900 leading-[1.54]", children }),
5778
+ 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 }),
5779
+ !hideChevron && /* @__PURE__ */ jsxRuntime.jsx(
5780
+ ChevronDown,
5781
+ {
5782
+ className: cn(
5783
+ "shrink-0 size-6 text-grey-500 transition-transform duration-200",
5784
+ isOpen && "rotate-180"
5785
+ )
5786
+ }
5787
+ )
5788
+ ]
5789
+ }
5790
+ );
5791
+ }
5792
+ );
5793
+ AccordionTrigger.displayName = "AccordionTrigger";
5794
+ var AccordionContent = react.forwardRef(
5795
+ ({ className, children, ...rest }, ref) => {
5796
+ const { isOpen, triggerId, contentId } = useAccordionItemContext();
5797
+ return /* @__PURE__ */ jsxRuntime.jsx(
5798
+ "div",
5799
+ {
5800
+ ref,
5801
+ id: contentId,
5802
+ role: "region",
5803
+ "aria-labelledby": triggerId,
5804
+ className: cn(
5805
+ "grid transition-[grid-template-rows] duration-200 ease-out",
5806
+ isOpen ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
5807
+ ),
5808
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
5809
+ "div",
5810
+ {
5811
+ className: cn("px-4 pb-6 text-base text-grey-500 leading-[1.48]", className),
5812
+ ...rest,
5813
+ children
5814
+ }
5815
+ ) })
5816
+ }
5817
+ );
5818
+ }
5819
+ );
5820
+ AccordionContent.displayName = "AccordionContent";
5657
5821
  var solidVariants = {
5658
5822
  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
5823
  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 +5865,7 @@ var Button = react.forwardRef(
5701
5865
  ...rest
5702
5866
  }, ref) => {
5703
5867
  const variantClasses = appearance === "outlined" ? outlinedVariants[variant] : solidVariants[variant];
5704
- const sizeConfig2 = sizeClasses[size];
5868
+ const sizeConfig3 = sizeClasses[size];
5705
5869
  const paddingKey = iconPosition === "icon-only" ? "icon-only" : iconPosition !== "none" ? "icon" : "none";
5706
5870
  const iconSizeClass = size === "sm" ? "size-5" : "size-6";
5707
5871
  const resolvedIcon = resolveIcon(icon, size === "sm" ? "md" : "lg");
@@ -5712,8 +5876,8 @@ var Button = react.forwardRef(
5712
5876
  disabled,
5713
5877
  className: cn(
5714
5878
  "inline-flex items-center justify-center gap-2 font-semibold transition-colors focus-visible:outline-none cursor-pointer disabled:cursor-not-allowed",
5715
- sizeConfig2.base,
5716
- sizeConfig2[paddingKey],
5879
+ sizeConfig3.base,
5880
+ sizeConfig3[paddingKey],
5717
5881
  variantClasses,
5718
5882
  className
5719
5883
  ),
@@ -5757,6 +5921,18 @@ var ButtonGroupItem = react.forwardRef(
5757
5921
  }
5758
5922
  );
5759
5923
  ButtonGroupItem.displayName = "ButtonGroupItem";
5924
+ var inputFrameSize = {
5925
+ xs: "px-2.5 py-2 gap-2",
5926
+ sm: "p-3 gap-3",
5927
+ md: "px-4 py-3 gap-3",
5928
+ lg: "px-4 py-3 gap-3"
5929
+ };
5930
+ var addonHeight = {
5931
+ xs: "",
5932
+ sm: "h-10",
5933
+ md: "h-12",
5934
+ lg: "h-14"
5935
+ };
5760
5936
  var Input = react.forwardRef(
5761
5937
  ({
5762
5938
  size = "sm",
@@ -5767,6 +5943,8 @@ var Input = react.forwardRef(
5767
5943
  leadingIcon,
5768
5944
  trailingIcon,
5769
5945
  addonRight,
5946
+ leadingAddon,
5947
+ trailingAddon,
5770
5948
  readOnly,
5771
5949
  disabled,
5772
5950
  className,
@@ -5779,21 +5957,101 @@ var Input = react.forwardRef(
5779
5957
  const inputId = id || generatedId;
5780
5958
  const hasError = !!error;
5781
5959
  const hasSuccess = !!success;
5960
+ const hasAddon = !!leadingAddon || !!trailingAddon;
5782
5961
  const bottomText = hasError ? typeof error === "string" ? error : void 0 : hasSuccess ? typeof success === "string" ? success : void 0 : helperText;
5783
5962
  const descriptionId = bottomText ? `${inputId}-description` : void 0;
5784
- const borderColor = hasError ? "border-error-200 focus-within:border-error-200" : hasSuccess ? "border-success-200 focus-within:border-success-200" : "border-grey-300 hover:border-primary-100 focus-within:border-primary-200";
5785
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-2 w-full", wrapperClassName), children: [
5963
+ 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";
5964
+ const inputBg = readOnly ? "bg-grey-100" : disabled ? "bg-grey-50" : "bg-white dark:bg-grey-50";
5965
+ if (hasAddon) {
5966
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-1 w-full", wrapperClassName), children: [
5967
+ label && /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: inputId, className: "text-sm font-medium text-grey-900 leading-[1.45]", children: label }),
5968
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-stretch", addonHeight[size]), children: [
5969
+ leadingAddon && /* @__PURE__ */ jsxRuntime.jsx(
5970
+ "div",
5971
+ {
5972
+ className: cn(
5973
+ "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",
5974
+ "text-sm font-medium text-grey-700"
5975
+ ),
5976
+ children: leadingAddon
5977
+ }
5978
+ ),
5979
+ /* @__PURE__ */ jsxRuntime.jsxs(
5980
+ "div",
5981
+ {
5982
+ className: cn(
5983
+ "flex flex-1 items-center border overflow-hidden transition-colors",
5984
+ inputFrameSize[size],
5985
+ inputBg,
5986
+ borderColor,
5987
+ !leadingAddon && !trailingAddon && "rounded-lg",
5988
+ leadingAddon && !trailingAddon && "rounded-r-lg",
5989
+ !leadingAddon && trailingAddon && "rounded-l-lg",
5990
+ leadingAddon && trailingAddon && "",
5991
+ disabled && "cursor-not-allowed"
5992
+ ),
5993
+ children: [
5994
+ leadingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-6 text-grey-400", "aria-hidden": "true", children: resolveIcon(leadingIcon, "md") }),
5995
+ /* @__PURE__ */ jsxRuntime.jsx(
5996
+ "input",
5997
+ {
5998
+ ref,
5999
+ id: inputId,
6000
+ readOnly,
6001
+ disabled,
6002
+ required,
6003
+ "aria-invalid": hasError || void 0,
6004
+ "aria-required": required || void 0,
6005
+ "aria-describedby": descriptionId,
6006
+ className: cn(
6007
+ "flex-1 min-w-0 bg-transparent text-sm text-grey-900 placeholder:text-grey-400 outline-none disabled:cursor-not-allowed",
6008
+ className
6009
+ ),
6010
+ ...rest
6011
+ }
6012
+ ),
6013
+ addonRight && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 text-sm text-grey-500", children: addonRight }),
6014
+ trailingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-6 text-grey-400", "aria-hidden": "true", children: resolveIcon(trailingIcon, "md") })
6015
+ ]
6016
+ }
6017
+ ),
6018
+ trailingAddon && /* @__PURE__ */ jsxRuntime.jsx(
6019
+ "div",
6020
+ {
6021
+ className: cn(
6022
+ "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",
6023
+ "text-sm font-medium text-grey-700"
6024
+ ),
6025
+ children: trailingAddon
6026
+ }
6027
+ )
6028
+ ] }),
6029
+ bottomText && /* @__PURE__ */ jsxRuntime.jsx(
6030
+ "p",
6031
+ {
6032
+ id: descriptionId,
6033
+ className: cn(
6034
+ "text-sm leading-[1.45]",
6035
+ hasError ? "text-error-400" : hasSuccess ? "text-success-400" : "text-grey-500"
6036
+ ),
6037
+ children: bottomText
6038
+ }
6039
+ )
6040
+ ] });
6041
+ }
6042
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-1 w-full", wrapperClassName), children: [
5786
6043
  label && /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: inputId, className: "text-sm font-medium text-grey-900 leading-[1.45]", children: label }),
5787
6044
  /* @__PURE__ */ jsxRuntime.jsxs(
5788
6045
  "div",
5789
6046
  {
5790
6047
  className: cn(
5791
- "flex items-center gap-3 border rounded-md overflow-hidden transition-colors",
5792
- size === "sm" ? "h-9 px-3 py-2" : "h-14 p-4",
6048
+ "flex items-center border rounded-lg overflow-hidden transition-colors",
6049
+ inputFrameSize[size],
6050
+ addonHeight[size],
5793
6051
  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
6052
  ),
5795
6053
  children: [
5796
- leadingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-5 text-grey-400", children: resolveIcon(leadingIcon, "md") }),
6054
+ leadingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-6 text-grey-400", "aria-hidden": "true", children: resolveIcon(leadingIcon, "md") }),
5797
6055
  /* @__PURE__ */ jsxRuntime.jsx(
5798
6056
  "input",
5799
6057
  {
@@ -5813,7 +6071,7 @@ var Input = react.forwardRef(
5813
6071
  }
5814
6072
  ),
5815
6073
  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-5 text-grey-400", children: resolveIcon(trailingIcon, "md") })
6074
+ trailingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-6 text-grey-400", "aria-hidden": "true", children: resolveIcon(trailingIcon, "md") })
5817
6075
  ]
5818
6076
  }
5819
6077
  ),
@@ -5823,7 +6081,7 @@ var Input = react.forwardRef(
5823
6081
  id: descriptionId,
5824
6082
  className: cn(
5825
6083
  "text-sm leading-[1.45]",
5826
- hasError ? "text-error-500" : hasSuccess ? "text-success-600" : "text-grey-500"
6084
+ hasError ? "text-error-400" : hasSuccess ? "text-success-400" : "text-grey-500"
5827
6085
  ),
5828
6086
  children: bottomText
5829
6087
  }
@@ -5840,6 +6098,8 @@ function useTabsContext() {
5840
6098
  }
5841
6099
  function Tabs({
5842
6100
  variant = "line",
6101
+ size = "sm",
6102
+ orientation = "horizontal",
5843
6103
  value,
5844
6104
  defaultValue = "",
5845
6105
  onValueChange,
@@ -5863,17 +6123,20 @@ function Tabs({
5863
6123
  tabsRef.current.delete(tabValue);
5864
6124
  }
5865
6125
  }, []);
6126
+ const isVertical = orientation === "vertical";
6127
+ const arrowNext = isVertical ? "ArrowDown" : "ArrowRight";
6128
+ const arrowPrev = isVertical ? "ArrowUp" : "ArrowLeft";
5866
6129
  const handleKeyDown = (e) => {
5867
6130
  const tabs = Array.from(tabsRef.current.entries()).filter(([, el]) => !el.disabled).map(([val, el]) => ({ value: val, element: el }));
5868
6131
  if (tabs.length === 0) return;
5869
6132
  const currentIndex = tabs.findIndex((t) => t.element === document.activeElement);
5870
6133
  let nextIndex;
5871
6134
  switch (e.key) {
5872
- case "ArrowRight":
6135
+ case arrowNext:
5873
6136
  e.preventDefault();
5874
6137
  nextIndex = currentIndex < tabs.length - 1 ? currentIndex + 1 : 0;
5875
6138
  break;
5876
- case "ArrowLeft":
6139
+ case arrowPrev:
5877
6140
  e.preventDefault();
5878
6141
  nextIndex = currentIndex > 0 ? currentIndex - 1 : tabs.length - 1;
5879
6142
  break;
@@ -5895,31 +6158,93 @@ function Tabs({
5895
6158
  }
5896
6159
  };
5897
6160
  const contextValue = react.useMemo(
5898
- () => ({ activeValue, onSelect, variant, registerTab }),
5899
- [activeValue, onSelect, variant, registerTab]
6161
+ () => ({ activeValue, onSelect, variant, size, orientation, registerTab }),
6162
+ [activeValue, onSelect, variant, size, orientation, registerTab]
5900
6163
  );
5901
6164
  return /* @__PURE__ */ jsxRuntime.jsx(TabsContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(
5902
6165
  "div",
5903
6166
  {
5904
6167
  className: cn(
5905
6168
  "inline-flex",
5906
- variant === "line" ? "border-b border-grey-200" : "gap-1",
6169
+ isVertical ? "flex-col" : "",
6170
+ variant === "line" && !isVertical && "border-b border-grey-200",
6171
+ variant === "line" && isVertical && "border-r border-grey-200",
6172
+ variant === "pill" && (isVertical ? "gap-1" : "gap-1"),
6173
+ variant === "segmented" && "border border-grey-100 rounded-lg p-0.5 gap-0.5 overflow-hidden",
5907
6174
  className
5908
6175
  ),
5909
6176
  role: "tablist",
6177
+ "aria-orientation": orientation,
5910
6178
  onKeyDown: handleKeyDown,
5911
6179
  children
5912
6180
  }
5913
6181
  ) });
5914
6182
  }
6183
+ var textSize = { sm: "text-xs", md: "text-sm", lg: "text-base" };
6184
+ var iconSize = { sm: "size-4", md: "size-5", lg: "size-6" };
6185
+ var iconResolveSize = { sm: "sm", md: "md", lg: "md" };
6186
+ var badgeText = { sm: "text-xs", md: "text-xs", lg: "text-sm" };
6187
+ var linePadding = {
6188
+ sm: "px-2 pt-1 pb-1.5",
6189
+ md: "px-3 pt-1.5 pb-2",
6190
+ lg: "px-4 pt-2 pb-2.5"
6191
+ };
6192
+ var pillPadding = {
6193
+ sm: "px-2 py-1",
6194
+ md: "px-3 py-1.5",
6195
+ lg: "px-4 py-2"
6196
+ };
6197
+ var segmentedPadding = {
6198
+ sm: "px-2 py-1",
6199
+ md: "px-3 py-1.5",
6200
+ lg: "px-4 py-2"
6201
+ };
5915
6202
  function Tab({ value, icon, badge, disabled = false, children, className }) {
5916
- const { activeValue, onSelect, variant, registerTab } = useTabsContext();
6203
+ const { activeValue, onSelect, variant, size, orientation, registerTab } = useTabsContext();
5917
6204
  const isActive = activeValue === value;
5918
6205
  const buttonRef = react.useRef(null);
6206
+ const isVertical = orientation === "vertical";
5919
6207
  react.useEffect(() => {
5920
6208
  registerTab(value, buttonRef.current);
5921
6209
  return () => registerTab(value, null);
5922
6210
  }, [value, registerTab]);
6211
+ const resolvedIcon = icon ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("shrink-0", iconSize[size]), children: resolveIcon(icon, iconResolveSize[size]) }) : null;
6212
+ const badgeEl = badge !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx(
6213
+ "span",
6214
+ {
6215
+ className: cn(
6216
+ "inline-flex items-center justify-center px-1.5 rounded-full font-medium tracking-tight",
6217
+ badgeText[size],
6218
+ 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"
6219
+ ),
6220
+ children: badge
6221
+ }
6222
+ ) : null;
6223
+ if (variant === "segmented") {
6224
+ return /* @__PURE__ */ jsxRuntime.jsxs(
6225
+ "button",
6226
+ {
6227
+ ref: buttonRef,
6228
+ role: "tab",
6229
+ "aria-selected": isActive,
6230
+ tabIndex: isActive ? 0 : -1,
6231
+ disabled,
6232
+ onClick: () => !disabled && onSelect(value),
6233
+ className: cn(
6234
+ "inline-flex items-center gap-1.5 rounded-md overflow-hidden transition-colors cursor-pointer",
6235
+ segmentedPadding[size],
6236
+ textSize[size],
6237
+ isActive ? "bg-primary-50 text-grey-900" : disabled ? "text-grey-300 cursor-not-allowed" : "text-grey-500 hover:bg-grey-50",
6238
+ className
6239
+ ),
6240
+ children: [
6241
+ resolvedIcon,
6242
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-normal leading-[1.45] whitespace-nowrap", children }),
6243
+ badgeEl
6244
+ ]
6245
+ }
6246
+ );
6247
+ }
5923
6248
  if (variant === "pill") {
5924
6249
  return /* @__PURE__ */ jsxRuntime.jsxs(
5925
6250
  "button",
@@ -5931,23 +6256,16 @@ function Tab({ value, icon, badge, disabled = false, children, className }) {
5931
6256
  disabled,
5932
6257
  onClick: () => !disabled && onSelect(value),
5933
6258
  className: cn(
5934
- "inline-flex items-center gap-2 h-9 px-3 py-2 rounded-md text-sm font-medium transition-colors cursor-pointer",
5935
- isActive ? "bg-primary-50 text-primary-400" : disabled ? "border border-grey-300 text-grey-300 cursor-not-allowed" : "border border-grey-300 text-grey-700 hover:bg-grey-50",
6259
+ "inline-flex items-center gap-1.5 rounded-full transition-colors cursor-pointer",
6260
+ pillPadding[size],
6261
+ textSize[size],
6262
+ isActive ? "bg-primary-50 text-primary-400" : disabled ? "text-grey-300 cursor-not-allowed" : "text-grey-500 hover:bg-grey-50",
5936
6263
  className
5937
6264
  ),
5938
6265
  children: [
5939
- icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-4", children: resolveIcon(icon, "sm") }),
5940
- children,
5941
- badge !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(
5942
- "span",
5943
- {
5944
- className: cn(
5945
- "inline-flex items-center justify-center px-2 rounded-full text-xs font-medium tracking-tight",
5946
- isActive ? "bg-primary-400 text-white" : disabled ? "bg-grey-200 text-grey-50" : "bg-grey-100 text-grey-700"
5947
- ),
5948
- children: badge
5949
- }
5950
- )
6266
+ resolvedIcon,
6267
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-normal leading-[1.45] whitespace-nowrap", children }),
6268
+ badgeEl
5951
6269
  ]
5952
6270
  }
5953
6271
  );
@@ -5962,40 +6280,41 @@ function Tab({ value, icon, badge, disabled = false, children, className }) {
5962
6280
  disabled,
5963
6281
  onClick: () => !disabled && onSelect(value),
5964
6282
  className: cn(
5965
- "relative inline-flex flex-col items-center cursor-pointer",
6283
+ "relative inline-flex cursor-pointer",
6284
+ isVertical ? "flex-row" : "flex-col items-center",
5966
6285
  disabled && "cursor-not-allowed",
5967
6286
  className
5968
6287
  ),
5969
6288
  children: [
5970
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 px-4 pt-4 pb-[15px]", children: [
5971
- icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-5", children: resolveIcon(icon, "md") }),
6289
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-1.5", linePadding[size]), children: [
6290
+ resolvedIcon,
5972
6291
  /* @__PURE__ */ jsxRuntime.jsx(
5973
6292
  "span",
5974
6293
  {
5975
6294
  className: cn(
5976
- "text-sm font-medium transition-colors",
5977
- isActive ? "text-primary-400" : disabled ? "text-grey-300" : "text-grey-700 hover:text-grey-700"
6295
+ "font-normal leading-[1.45] whitespace-nowrap transition-colors",
6296
+ textSize[size],
6297
+ isActive ? "text-grey-900" : disabled ? "text-grey-300" : "text-grey-500"
5978
6298
  ),
5979
6299
  children
5980
6300
  }
5981
6301
  ),
5982
- badge !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(
5983
- "span",
5984
- {
5985
- className: cn(
5986
- "inline-flex items-center justify-center px-2 rounded-full text-xs font-medium tracking-tight",
5987
- isActive ? "bg-primary-400 text-white" : disabled ? "bg-grey-200 text-grey-50" : "bg-grey-100 text-grey-700"
5988
- ),
5989
- children: badge
5990
- }
5991
- )
6302
+ badgeEl
5992
6303
  ] }),
5993
- /* @__PURE__ */ jsxRuntime.jsx(
6304
+ isVertical ? /* @__PURE__ */ jsxRuntime.jsx(
5994
6305
  "div",
5995
6306
  {
5996
6307
  className: cn(
5997
- "h-px w-full transition-colors",
5998
- isActive ? "bg-primary-400" : disabled ? "bg-grey-200" : "bg-grey-200 group-hover:bg-grey-500"
6308
+ "w-0.5 self-stretch transition-colors",
6309
+ isActive ? "bg-primary-400" : "bg-grey-100"
6310
+ )
6311
+ }
6312
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
6313
+ "div",
6314
+ {
6315
+ className: cn(
6316
+ "h-0.5 w-full transition-colors",
6317
+ isActive ? "bg-primary-400" : "bg-grey-100"
5999
6318
  )
6000
6319
  }
6001
6320
  )
@@ -6003,56 +6322,318 @@ function Tab({ value, icon, badge, disabled = false, children, className }) {
6003
6322
  }
6004
6323
  );
6005
6324
  }
6006
- var Chip = react.forwardRef(
6325
+
6326
+ // src/components/Chart/theme.ts
6327
+ var chartColors = {
6328
+ primary: [
6329
+ "#F56630",
6330
+ // primary-400
6331
+ "#FA9874",
6332
+ // primary-200
6333
+ "#FCB59A",
6334
+ // primary-100
6335
+ "#FCD2C2",
6336
+ // primary-75
6337
+ "#FFECE5"
6338
+ // primary-50
6339
+ ],
6340
+ semantic: [
6341
+ "#F56630",
6342
+ // primary-400 (orange)
6343
+ "#0F973D",
6344
+ // success-400 (green)
6345
+ "#1671D9",
6346
+ // secondary-400 (blue)
6347
+ "#F3A218",
6348
+ // warning-400 (amber)
6349
+ "#D42620",
6350
+ // error-400 (red)
6351
+ "#0BA5EC"
6352
+ // info-400 (cyan)
6353
+ ],
6354
+ extended: [
6355
+ "#F56630",
6356
+ "#0F973D",
6357
+ "#1671D9",
6358
+ "#F3A218",
6359
+ "#D42620",
6360
+ "#0BA5EC",
6361
+ "#475CCC",
6362
+ // indigo
6363
+ "#8D8484",
6364
+ // office-brown
6365
+ "#F77A4A",
6366
+ // primary-300
6367
+ "#40B869"
6368
+ // success-300
6369
+ ],
6370
+ grey: {
6371
+ 50: "#F9FAFB",
6372
+ 100: "#F0F2F5",
6373
+ 200: "#E4E7EC",
6374
+ 300: "#D0D5DD",
6375
+ 400: "#98A2B3",
6376
+ 500: "#667185",
6377
+ 700: "#344054",
6378
+ 900: "#101928"
6379
+ }
6380
+ };
6381
+ var chartFont = {
6382
+ family: "'Inter', ui-sans-serif, system-ui, sans-serif",
6383
+ size: 12,
6384
+ weight: "normal"
6385
+ };
6386
+ function hexToRgba(hex, alpha) {
6387
+ const r = parseInt(hex.slice(1, 3), 16);
6388
+ const g = parseInt(hex.slice(3, 5), 16);
6389
+ const b = parseInt(hex.slice(5, 7), 16);
6390
+ return `rgba(${r}, ${g}, ${b}, ${alpha})`;
6391
+ }
6392
+ function createGradientFill(ctx, color, height) {
6393
+ const gradient = ctx.createLinearGradient(0, 0, 0, height);
6394
+ gradient.addColorStop(0, hexToRgba(color, 0.2));
6395
+ gradient.addColorStop(1, hexToRgba(color, 0.01));
6396
+ return gradient;
6397
+ }
6398
+ chart_js.Chart.register(
6399
+ chart_js.CategoryScale,
6400
+ chart_js.LinearScale,
6401
+ chart_js.PointElement,
6402
+ chart_js.LineElement,
6403
+ chart_js.BarElement,
6404
+ chart_js.ArcElement,
6405
+ chart_js.RadialLinearScale,
6406
+ chart_js.Filler,
6407
+ chart_js.Tooltip,
6408
+ chart_js.Legend
6409
+ );
6410
+ function getDefaultOptions(type) {
6411
+ const base = {
6412
+ responsive: true,
6413
+ maintainAspectRatio: false,
6414
+ plugins: {
6415
+ legend: {
6416
+ display: true,
6417
+ position: "bottom",
6418
+ labels: {
6419
+ font: { ...chartFont, size: 12 },
6420
+ color: chartColors.grey[500],
6421
+ padding: 16,
6422
+ usePointStyle: true,
6423
+ pointStyle: "circle",
6424
+ boxWidth: 8,
6425
+ boxHeight: 8
6426
+ }
6427
+ },
6428
+ tooltip: {
6429
+ backgroundColor: chartColors.grey[900],
6430
+ titleFont: { ...chartFont, weight: "bold", size: 13 },
6431
+ bodyFont: { ...chartFont, size: 12 },
6432
+ cornerRadius: 8,
6433
+ padding: 12,
6434
+ boxPadding: 6,
6435
+ usePointStyle: true
6436
+ }
6437
+ }
6438
+ };
6439
+ if (type === "line" || type === "bar" || type === "scatter" || type === "bubble") {
6440
+ base.scales = {
6441
+ x: {
6442
+ grid: { color: chartColors.grey[100], drawTicks: false },
6443
+ ticks: { font: chartFont, color: chartColors.grey[400], padding: 8 },
6444
+ border: { display: false }
6445
+ },
6446
+ y: {
6447
+ grid: { color: chartColors.grey[100], drawTicks: false },
6448
+ ticks: { font: chartFont, color: chartColors.grey[400], padding: 8 },
6449
+ border: { display: false }
6450
+ }
6451
+ };
6452
+ }
6453
+ if (type === "line") {
6454
+ base.elements = {
6455
+ line: { tension: 0.4, borderWidth: 2 },
6456
+ point: { radius: 0, hoverRadius: 5, hitRadius: 20 }
6457
+ };
6458
+ }
6459
+ if (type === "bar") {
6460
+ base.elements = {
6461
+ bar: { borderRadius: 4 }
6462
+ };
6463
+ }
6464
+ if (type === "radar") {
6465
+ base.scales = {
6466
+ r: {
6467
+ grid: { color: chartColors.grey[200] },
6468
+ angleLines: { color: chartColors.grey[200] },
6469
+ pointLabels: { font: { ...chartFont, size: 11 }, color: chartColors.grey[500] },
6470
+ ticks: { display: false }
6471
+ }
6472
+ };
6473
+ }
6474
+ if (type === "polar-area") {
6475
+ base.scales = {
6476
+ r: {
6477
+ grid: { color: chartColors.grey[200] },
6478
+ ticks: { display: false }
6479
+ }
6480
+ };
6481
+ }
6482
+ return base;
6483
+ }
6484
+ function deepMerge(target, source) {
6485
+ const output = { ...target };
6486
+ for (const key of Object.keys(source)) {
6487
+ if (source[key] && typeof source[key] === "object" && !Array.isArray(source[key]) && target[key] && typeof target[key] === "object") {
6488
+ output[key] = deepMerge(target[key], source[key]);
6489
+ } else {
6490
+ output[key] = source[key];
6491
+ }
6492
+ }
6493
+ return output;
6494
+ }
6495
+ var chartComponentMap = {
6496
+ line: reactChartjs2.Line,
6497
+ bar: reactChartjs2.Bar,
6498
+ pie: reactChartjs2.Pie,
6499
+ doughnut: reactChartjs2.Doughnut,
6500
+ radar: reactChartjs2.Radar,
6501
+ scatter: reactChartjs2.Scatter,
6502
+ bubble: reactChartjs2.Bubble,
6503
+ "polar-area": reactChartjs2.PolarArea
6504
+ };
6505
+ var RaydenChart = react.forwardRef(
6506
+ ({ type, data, options, height = 300, width, className, ...rest }, ref) => {
6507
+ const mergedOptions = react.useMemo(
6508
+ () => deepMerge(getDefaultOptions(type), options ?? {}),
6509
+ [type, options]
6510
+ );
6511
+ const ChartComponent = chartComponentMap[type];
6512
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn("relative", className), style: { height, width }, ...rest, children: /* @__PURE__ */ jsxRuntime.jsx(ChartComponent, { data, options: mergedOptions }) });
6513
+ }
6514
+ );
6515
+ RaydenChart.displayName = "RaydenChart";
6516
+ function MinusIcon({ className }) {
6517
+ return /* @__PURE__ */ jsxRuntime.jsx(
6518
+ "svg",
6519
+ {
6520
+ className,
6521
+ viewBox: "0 0 24 24",
6522
+ fill: "none",
6523
+ stroke: "currentColor",
6524
+ strokeWidth: 2,
6525
+ strokeLinecap: "round",
6526
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 12h14" })
6527
+ }
6528
+ );
6529
+ }
6530
+ function PlusIcon({ className }) {
6531
+ return /* @__PURE__ */ jsxRuntime.jsx(
6532
+ "svg",
6533
+ {
6534
+ className,
6535
+ viewBox: "0 0 24 24",
6536
+ fill: "none",
6537
+ stroke: "currentColor",
6538
+ strokeWidth: 2,
6539
+ strokeLinecap: "round",
6540
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 5v14M5 12h14" })
6541
+ }
6542
+ );
6543
+ }
6544
+ var buttonSize = {
6545
+ sm: "size-8 rounded-[10px]",
6546
+ md: "size-10 rounded-xl",
6547
+ lg: "size-12 rounded-xl"
6548
+ };
6549
+ var iconSize2 = {
6550
+ sm: "size-4",
6551
+ md: "size-5",
6552
+ lg: "size-6"
6553
+ };
6554
+ var containerShape = {
6555
+ rounded: { sm: "rounded-[10px]", md: "rounded-xl", lg: "rounded-xl" },
6556
+ block: { sm: "", md: "", lg: "" },
6557
+ pill: { sm: "rounded-full", md: "rounded-[28px]", lg: "rounded-[28px]" }
6558
+ };
6559
+ var valueText = {
6560
+ sm: "text-sm w-7",
6561
+ md: "text-sm w-7",
6562
+ lg: "text-base w-7"
6563
+ };
6564
+ var Counter = react.forwardRef(
6007
6565
  ({
6008
- variant = "input",
6009
- icon,
6566
+ value: controlledValue,
6567
+ onChange,
6568
+ defaultValue = 0,
6569
+ size = "sm",
6570
+ shape = "rounded",
6571
+ min = 0,
6572
+ max = Infinity,
6573
+ step = 1,
6010
6574
  disabled = false,
6011
- onClose,
6012
- onDropdown,
6013
6575
  className,
6014
- children,
6015
6576
  ...rest
6016
6577
  }, ref) => {
6578
+ const [uncontrolled, setUncontrolled] = react.useState(defaultValue);
6579
+ const val = controlledValue ?? uncontrolled;
6580
+ const update = react.useCallback(
6581
+ (next) => {
6582
+ const clamped = Math.min(max, Math.max(min, next));
6583
+ if (controlledValue === void 0) setUncontrolled(clamped);
6584
+ onChange?.(clamped);
6585
+ },
6586
+ [controlledValue, onChange, min, max]
6587
+ );
6588
+ const canDecrement = val > min;
6589
+ const canIncrement = val < max;
6017
6590
  return /* @__PURE__ */ jsxRuntime.jsxs(
6018
6591
  "div",
6019
6592
  {
6020
6593
  ref,
6021
6594
  className: cn(
6022
- "inline-flex items-center gap-1 rounded-md border px-2 py-1 text-sm font-medium transition-colors",
6023
- disabled ? "border-grey-200 bg-grey-100 text-grey-300 cursor-not-allowed" : "border-grey-300 bg-white dark:bg-grey-50 text-grey-700 cursor-default focus-within:bg-[#FBF1F1] focus-within:border-primary-600",
6595
+ "inline-flex items-center border border-grey-300 overflow-hidden",
6596
+ containerShape[shape][size],
6597
+ disabled && "opacity-50",
6024
6598
  className
6025
6599
  ),
6026
6600
  ...rest,
6027
6601
  children: [
6028
- icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-4", children: resolveIcon(icon, "sm") }),
6029
- /* @__PURE__ */ jsxRuntime.jsx("span", { children }),
6030
- variant === "input" && onClose && /* @__PURE__ */ jsxRuntime.jsx(
6602
+ /* @__PURE__ */ jsxRuntime.jsx(
6031
6603
  "button",
6032
6604
  {
6033
6605
  type: "button",
6034
- onClick: onClose,
6035
- disabled,
6606
+ disabled: disabled || !canDecrement,
6607
+ onClick: () => update(val - step),
6036
6608
  className: cn(
6037
- "shrink-0 size-4 inline-flex items-center justify-center rounded-sm",
6038
- disabled ? "cursor-not-allowed text-grey-300" : "cursor-pointer text-grey-500 hover:text-grey-700"
6609
+ "flex items-center justify-center p-2.5 text-grey-900 cursor-pointer transition-colors hover:bg-grey-100",
6610
+ buttonSize[size],
6611
+ (disabled || !canDecrement) && "text-grey-300 cursor-not-allowed hover:bg-transparent"
6039
6612
  ),
6040
- "aria-label": "Remove",
6041
- children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "multiply", size: "xs" })
6613
+ "aria-label": "Decrease",
6614
+ children: /* @__PURE__ */ jsxRuntime.jsx(MinusIcon, { className: iconSize2[size] })
6042
6615
  }
6043
6616
  ),
6044
- variant === "filter" && /* @__PURE__ */ jsxRuntime.jsx(
6617
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx(
6618
+ "span",
6619
+ {
6620
+ className: cn("font-medium text-grey-900 text-center leading-[1.45]", valueText[size]),
6621
+ children: val
6622
+ }
6623
+ ) }),
6624
+ /* @__PURE__ */ jsxRuntime.jsx(
6045
6625
  "button",
6046
6626
  {
6047
6627
  type: "button",
6048
- onClick: onDropdown,
6049
- disabled,
6628
+ disabled: disabled || !canIncrement,
6629
+ onClick: () => update(val + step),
6050
6630
  className: cn(
6051
- "shrink-0 size-4 inline-flex items-center justify-center",
6052
- disabled ? "cursor-not-allowed text-grey-300" : "cursor-pointer text-grey-500 hover:text-grey-700"
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"
6053
6634
  ),
6054
- "aria-label": "Open filter",
6055
- children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron-down", size: "xs" })
6635
+ "aria-label": "Increase",
6636
+ children: /* @__PURE__ */ jsxRuntime.jsx(PlusIcon, { className: iconSize2[size] })
6056
6637
  }
6057
6638
  )
6058
6639
  ]
@@ -6060,30 +6641,596 @@ var Chip = react.forwardRef(
6060
6641
  );
6061
6642
  }
6062
6643
  );
6063
- Chip.displayName = "Chip";
6064
- var clampValue = (value) => Math.min(100, Math.max(0, value));
6065
- function ProgressBar({
6066
- value = 0,
6067
- size = "lg",
6068
- label,
6069
- metadata,
6070
- showPercentage = true,
6071
- className,
6072
- ...rest
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("inline-flex items-center justify-center", s.container, c.bg, className),
6665
+ ...rest,
6666
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6667
+ "span",
6668
+ {
6669
+ className: cn("font-semibold text-center leading-[1.45] tracking-tight", s.text, c.text),
6670
+ children: value
6671
+ }
6672
+ )
6673
+ }
6674
+ );
6675
+ }
6676
+ );
6677
+ NumberCounter.displayName = "NumberCounter";
6678
+ var MONTH_NAMES = [
6679
+ "January",
6680
+ "February",
6681
+ "March",
6682
+ "April",
6683
+ "May",
6684
+ "June",
6685
+ "July",
6686
+ "August",
6687
+ "September",
6688
+ "October",
6689
+ "November",
6690
+ "December"
6691
+ ];
6692
+ var DAY_LABELS = ["M", "T", "W", "T", "F", "S", "S"];
6693
+ function getDaysInMonth(year, month) {
6694
+ return new Date(year, month + 1, 0).getDate();
6695
+ }
6696
+ function getFirstDayOfWeek(year, month) {
6697
+ const day = new Date(year, month, 1).getDay();
6698
+ return day === 0 ? 6 : day - 1;
6699
+ }
6700
+ function isSameDay(a, b) {
6701
+ if (!a || !b) return false;
6702
+ return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
6703
+ }
6704
+ function isToday(date) {
6705
+ return isSameDay(date, /* @__PURE__ */ new Date());
6706
+ }
6707
+ function isBetween(date, start, end) {
6708
+ if (!start || !end) return false;
6709
+ const t = date.getTime();
6710
+ const s = Math.min(start.getTime(), end.getTime());
6711
+ const e = Math.max(start.getTime(), end.getTime());
6712
+ return t > s && t < e;
6713
+ }
6714
+ function isDateDisabled(date, minDate, maxDate) {
6715
+ if (minDate && date < minDate) return true;
6716
+ if (maxDate && date > maxDate) return true;
6717
+ return false;
6718
+ }
6719
+ function ChevronLeft({ className }) {
6720
+ return /* @__PURE__ */ jsxRuntime.jsx(
6721
+ "svg",
6722
+ {
6723
+ className,
6724
+ viewBox: "0 0 14 14",
6725
+ fill: "none",
6726
+ stroke: "currentColor",
6727
+ strokeWidth: 2,
6728
+ strokeLinecap: "round",
6729
+ strokeLinejoin: "round",
6730
+ "aria-hidden": "true",
6731
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 3L5 7l4 4" })
6732
+ }
6733
+ );
6734
+ }
6735
+ function ChevronRight({ className }) {
6736
+ return /* @__PURE__ */ jsxRuntime.jsx(
6737
+ "svg",
6738
+ {
6739
+ className,
6740
+ viewBox: "0 0 14 14",
6741
+ fill: "none",
6742
+ stroke: "currentColor",
6743
+ strokeWidth: 2,
6744
+ strokeLinecap: "round",
6745
+ strokeLinejoin: "round",
6746
+ "aria-hidden": "true",
6747
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 3l4 4-4 4" })
6748
+ }
6749
+ );
6750
+ }
6751
+ function ChevronDown2({ className }) {
6752
+ return /* @__PURE__ */ jsxRuntime.jsx(
6753
+ "svg",
6754
+ {
6755
+ className,
6756
+ viewBox: "0 0 24 24",
6757
+ fill: "none",
6758
+ stroke: "currentColor",
6759
+ strokeWidth: 2,
6760
+ strokeLinecap: "round",
6761
+ strokeLinejoin: "round",
6762
+ "aria-hidden": "true",
6763
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 9l6 6 6-6" })
6764
+ }
6765
+ );
6766
+ }
6767
+ function DayCell({ day, state, fullDate, onClick }) {
6768
+ const isInteractive = state !== "disabled";
6769
+ const cellClasses = cn(
6770
+ "flex items-center justify-center w-10 h-10 text-sm font-medium relative select-none",
6771
+ state === "selected" && "bg-primary-400 text-white rounded-[10px]",
6772
+ state === "start-range" && "bg-primary-400 text-white rounded-l-[10px]",
6773
+ state === "end-range" && "bg-primary-400 text-white rounded-r-[10px]",
6774
+ state === "mid-range" && "bg-primary-50 text-primary-400",
6775
+ state === "disabled" && "text-grey-300",
6776
+ state === "default" && "text-grey-900 hover:bg-grey-75 rounded-[10px]",
6777
+ state === "today" && "text-grey-900 hover:bg-grey-75 rounded-[10px]",
6778
+ isInteractive && "cursor-pointer"
6779
+ );
6780
+ const dateLabel = fullDate.toLocaleDateString("en-US", {
6781
+ weekday: "long",
6782
+ year: "numeric",
6783
+ month: "long",
6784
+ day: "numeric"
6785
+ });
6786
+ const stateLabel = state === "today" ? "Today, " : state === "selected" ? "Selected, " : state === "start-range" ? "Start of range, " : state === "end-range" ? "End of range, " : state === "mid-range" ? "In selected range, " : "";
6787
+ return /* @__PURE__ */ jsxRuntime.jsxs(
6788
+ "button",
6789
+ {
6790
+ type: "button",
6791
+ className: cellClasses,
6792
+ onClick: isInteractive ? onClick : void 0,
6793
+ disabled: !isInteractive,
6794
+ tabIndex: isInteractive ? 0 : -1,
6795
+ "aria-label": `${stateLabel}${dateLabel}`,
6796
+ "aria-current": state === "today" ? "date" : void 0,
6797
+ "aria-pressed": state === "selected" || state === "start-range" || state === "end-range" ? true : void 0,
6798
+ children: [
6799
+ day,
6800
+ state === "today" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute bottom-[5px] left-1/2 -translate-x-1/2 size-1 rounded-full bg-primary-400", "aria-hidden": "true" })
6801
+ ]
6802
+ }
6803
+ );
6804
+ }
6805
+ function MonthGrid({
6806
+ year,
6807
+ month,
6808
+ selectedDate,
6809
+ rangeStart,
6810
+ rangeEnd,
6811
+ isRange,
6812
+ minDate,
6813
+ maxDate,
6814
+ onDayClick
6815
+ }) {
6816
+ const daysInMonth = getDaysInMonth(year, month);
6817
+ const firstDay = getFirstDayOfWeek(year, month);
6818
+ const prevMonthDays = getDaysInMonth(year, month - 1);
6819
+ const cells = [];
6820
+ for (let i = firstDay - 1; i >= 0; i--) {
6821
+ const d = prevMonthDays - i;
6822
+ cells.push({ day: d, state: "disabled", date: new Date(year, month - 1, d) });
6823
+ }
6824
+ for (let d = 1; d <= daysInMonth; d++) {
6825
+ const date = new Date(year, month, d);
6826
+ let state = "default";
6827
+ if (isDateDisabled(date, minDate, maxDate)) {
6828
+ state = "disabled";
6829
+ } else if (isRange && rangeStart && rangeEnd) {
6830
+ const start = rangeStart.getTime() <= rangeEnd.getTime() ? rangeStart : rangeEnd;
6831
+ const end = rangeStart.getTime() <= rangeEnd.getTime() ? rangeEnd : rangeStart;
6832
+ if (isSameDay(date, start)) state = "start-range";
6833
+ else if (isSameDay(date, end)) state = "end-range";
6834
+ else if (isBetween(date, start, end)) state = "mid-range";
6835
+ } else if (isRange && rangeStart && !rangeEnd && isSameDay(date, rangeStart)) {
6836
+ state = "selected";
6837
+ } else if (!isRange && isSameDay(date, selectedDate)) {
6838
+ state = "selected";
6839
+ }
6840
+ if (state === "default" && isToday(date)) {
6841
+ state = "today";
6842
+ }
6843
+ cells.push({ day: d, state, date });
6844
+ }
6845
+ const remaining = 42 - cells.length;
6846
+ for (let d = 1; d <= remaining; d++) {
6847
+ cells.push({ day: d, state: "disabled", date: new Date(year, month + 1, d) });
6848
+ }
6849
+ const rows = [];
6850
+ for (let i = 0; i < cells.length; i += 7) {
6851
+ rows.push(cells.slice(i, i + 7));
6852
+ }
6853
+ if (rows.length === 6 && rows[5].every((c) => c.state === "disabled")) {
6854
+ rows.pop();
6855
+ }
6856
+ const fullDayNames = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
6857
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", role: "grid", "aria-label": "Calendar", children: [
6858
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-10 items-center", role: "row", children: DAY_LABELS.map((label, i) => /* @__PURE__ */ jsxRuntime.jsx(
6859
+ "div",
6860
+ {
6861
+ role: "columnheader",
6862
+ "aria-label": fullDayNames[i],
6863
+ className: "flex items-center justify-center w-10 h-10 text-sm font-medium text-grey-400",
6864
+ children: label
6865
+ },
6866
+ i
6867
+ )) }),
6868
+ rows.map((row, ri) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-10 items-center", role: "row", children: row.map((cell, ci) => /* @__PURE__ */ jsxRuntime.jsx(
6869
+ DayCell,
6870
+ {
6871
+ day: cell.day,
6872
+ state: cell.state,
6873
+ fullDate: cell.date,
6874
+ onClick: () => onDayClick(cell.date)
6875
+ },
6876
+ ci
6877
+ )) }, ri))
6878
+ ] });
6879
+ }
6880
+ function YearGrid({ baseYear, selectedYear, onYearClick }) {
6881
+ const years = [];
6882
+ for (let i = 0; i < 20; i++) {
6883
+ years.push(baseYear + i);
6884
+ }
6885
+ const rows = [];
6886
+ for (let i = 0; i < years.length; i += 4) {
6887
+ rows.push(years.slice(i, i + 4));
6888
+ }
6889
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-2 w-full", role: "grid", "aria-label": "Year selection", children: rows.map((row, ri) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4 h-10 items-center w-full", role: "row", children: row.map((year) => /* @__PURE__ */ jsxRuntime.jsx(
6890
+ "button",
6891
+ {
6892
+ type: "button",
6893
+ "aria-label": year === selectedYear ? `${year}, selected` : String(year),
6894
+ "aria-pressed": year === selectedYear || void 0,
6895
+ className: cn(
6896
+ "flex-1 flex items-center justify-center py-2.5 px-4 rounded-[10px] text-sm font-medium cursor-pointer select-none",
6897
+ year === selectedYear ? "bg-primary-400 text-white" : "text-grey-900 hover:bg-grey-75"
6898
+ ),
6899
+ onClick: () => onYearClick(year),
6900
+ children: year
6901
+ },
6902
+ year
6903
+ )) }, ri)) });
6904
+ }
6905
+ function NavButton({
6906
+ direction,
6907
+ onClick,
6908
+ hidden
6909
+ }) {
6910
+ return /* @__PURE__ */ jsxRuntime.jsx(
6911
+ "button",
6912
+ {
6913
+ type: "button",
6914
+ onClick,
6915
+ "aria-label": direction === "left" ? "Previous month" : "Next month",
6916
+ "aria-hidden": hidden || void 0,
6917
+ tabIndex: hidden ? -1 : void 0,
6918
+ className: cn(
6919
+ "flex items-center justify-center p-2 rounded-lg bg-grey-75 hover:bg-grey-200 transition-colors cursor-pointer",
6920
+ hidden && "opacity-0 pointer-events-none"
6921
+ ),
6922
+ 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" })
6923
+ }
6924
+ );
6925
+ }
6926
+ var DatePicker = react.forwardRef(
6927
+ ({
6928
+ mode = "single",
6929
+ value,
6930
+ rangeValue,
6931
+ onChange,
6932
+ onRangeChange,
6933
+ showFooter = false,
6934
+ onDone,
6935
+ onClear,
6936
+ minDate,
6937
+ maxDate,
6938
+ className,
6939
+ ...rest
6940
+ }, ref) => {
6941
+ const now = /* @__PURE__ */ new Date();
6942
+ const initialDate = value ?? rangeValue?.[0] ?? now;
6943
+ const [viewMonth, setViewMonth] = react.useState(initialDate.getMonth());
6944
+ const [viewYear, setViewYear] = react.useState(initialDate.getFullYear());
6945
+ const [yearBase, setYearBase] = react.useState(Math.floor(initialDate.getFullYear() / 20) * 20);
6946
+ const [rangeStart, setRangeStart] = react.useState(rangeValue?.[0] ?? null);
6947
+ const [rangeEnd, setRangeEnd] = react.useState(rangeValue?.[1] ?? null);
6948
+ const goToPrevMonth = react.useCallback(() => {
6949
+ setViewMonth((m) => {
6950
+ if (m === 0) {
6951
+ setViewYear((y) => y - 1);
6952
+ return 11;
6953
+ }
6954
+ return m - 1;
6955
+ });
6956
+ }, []);
6957
+ const goToNextMonth = react.useCallback(() => {
6958
+ setViewMonth((m) => {
6959
+ if (m === 11) {
6960
+ setViewYear((y) => y + 1);
6961
+ return 0;
6962
+ }
6963
+ return m + 1;
6964
+ });
6965
+ }, []);
6966
+ const handleDayClick = react.useCallback(
6967
+ (date) => {
6968
+ if (mode === "single") {
6969
+ onChange?.(date);
6970
+ } else if (mode === "range") {
6971
+ if (!rangeStart || rangeStart && rangeEnd) {
6972
+ setRangeStart(date);
6973
+ setRangeEnd(null);
6974
+ onRangeChange?.([date, null]);
6975
+ } else {
6976
+ setRangeEnd(date);
6977
+ onRangeChange?.([rangeStart, date]);
6978
+ }
6979
+ }
6980
+ },
6981
+ [mode, onChange, onRangeChange, rangeStart, rangeEnd]
6982
+ );
6983
+ const handleYearClick = react.useCallback(
6984
+ (year) => {
6985
+ const newDate = new Date(year, value?.getMonth() ?? 0, 1);
6986
+ onChange?.(newDate);
6987
+ setViewYear(year);
6988
+ },
6989
+ [onChange, value]
6990
+ );
6991
+ const handleClear = react.useCallback(() => {
6992
+ if (mode === "range") {
6993
+ setRangeStart(null);
6994
+ setRangeEnd(null);
6995
+ onRangeChange?.([null, null]);
6996
+ } else {
6997
+ onChange?.(null);
6998
+ }
6999
+ onClear?.();
7000
+ }, [mode, onChange, onRangeChange, onClear]);
7001
+ const secondMonth = react.useMemo(() => {
7002
+ const m = viewMonth + 1;
7003
+ return { month: m > 11 ? 0 : m, year: m > 11 ? viewYear + 1 : viewYear };
7004
+ }, [viewMonth, viewYear]);
7005
+ const monthYearLabel = `${MONTH_NAMES[viewMonth]} ${viewYear}`;
7006
+ const secondMonthLabel = `${MONTH_NAMES[secondMonth.month]} ${secondMonth.year}`;
7007
+ return /* @__PURE__ */ jsxRuntime.jsxs(
7008
+ "div",
7009
+ {
7010
+ ref,
7011
+ className: cn(
7012
+ "bg-white dark:bg-grey-50 border border-grey-75 rounded-2xl p-5 shadow-soft-xs",
7013
+ "flex flex-col gap-6",
7014
+ mode !== "range" && "w-[340px]",
7015
+ className
7016
+ ),
7017
+ ...rest,
7018
+ children: [
7019
+ mode === "single" && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4", children: [
7020
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between w-full", children: [
7021
+ /* @__PURE__ */ jsxRuntime.jsx(NavButton, { direction: "left", onClick: goToPrevMonth }),
7022
+ /* @__PURE__ */ jsxRuntime.jsxs(
7023
+ "button",
7024
+ {
7025
+ type: "button",
7026
+ className: "flex items-center gap-2 text-sm font-medium text-grey-700 cursor-default",
7027
+ children: [
7028
+ monthYearLabel,
7029
+ /* @__PURE__ */ jsxRuntime.jsx(ChevronDown2, { className: "size-6 text-grey-500" })
7030
+ ]
7031
+ }
7032
+ ),
7033
+ /* @__PURE__ */ jsxRuntime.jsx(NavButton, { direction: "right", onClick: goToNextMonth })
7034
+ ] }),
7035
+ /* @__PURE__ */ jsxRuntime.jsx(
7036
+ MonthGrid,
7037
+ {
7038
+ year: viewYear,
7039
+ month: viewMonth,
7040
+ selectedDate: value,
7041
+ minDate,
7042
+ maxDate,
7043
+ onDayClick: handleDayClick
7044
+ }
7045
+ )
7046
+ ] }) }),
7047
+ mode === "range" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-8", children: [
7048
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4", children: [
7049
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-10 w-[280px]", children: [
7050
+ /* @__PURE__ */ jsxRuntime.jsx(NavButton, { direction: "left", onClick: goToPrevMonth }),
7051
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
7052
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-grey-700", children: monthYearLabel }),
7053
+ /* @__PURE__ */ jsxRuntime.jsx(ChevronDown2, { className: "size-6 text-grey-500" })
7054
+ ] }),
7055
+ /* @__PURE__ */ jsxRuntime.jsx(NavButton, { direction: "right", hidden: true })
7056
+ ] }),
7057
+ /* @__PURE__ */ jsxRuntime.jsx(
7058
+ MonthGrid,
7059
+ {
7060
+ year: viewYear,
7061
+ month: viewMonth,
7062
+ rangeStart,
7063
+ rangeEnd,
7064
+ isRange: true,
7065
+ minDate,
7066
+ maxDate,
7067
+ onDayClick: handleDayClick
7068
+ }
7069
+ )
7070
+ ] }),
7071
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4", children: [
7072
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between w-[280px]", children: [
7073
+ /* @__PURE__ */ jsxRuntime.jsx(NavButton, { direction: "left", hidden: true }),
7074
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
7075
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-grey-700", children: secondMonthLabel }),
7076
+ /* @__PURE__ */ jsxRuntime.jsx(ChevronDown2, { className: "size-6 text-grey-500" })
7077
+ ] }),
7078
+ /* @__PURE__ */ jsxRuntime.jsx(NavButton, { direction: "right", onClick: goToNextMonth })
7079
+ ] }),
7080
+ /* @__PURE__ */ jsxRuntime.jsx(
7081
+ MonthGrid,
7082
+ {
7083
+ year: secondMonth.year,
7084
+ month: secondMonth.month,
7085
+ rangeStart,
7086
+ rangeEnd,
7087
+ isRange: true,
7088
+ minDate,
7089
+ maxDate,
7090
+ onDayClick: handleDayClick
7091
+ }
7092
+ )
7093
+ ] })
7094
+ ] }),
7095
+ mode === "year" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 items-center w-full", children: [
7096
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
7097
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-medium text-grey-700", children: [
7098
+ yearBase,
7099
+ "\u2013",
7100
+ yearBase + 19
7101
+ ] }),
7102
+ /* @__PURE__ */ jsxRuntime.jsx(ChevronDown2, { className: "size-6 text-grey-500" })
7103
+ ] }),
7104
+ /* @__PURE__ */ jsxRuntime.jsx(
7105
+ YearGrid,
7106
+ {
7107
+ baseYear: yearBase,
7108
+ selectedYear: value?.getFullYear(),
7109
+ onYearClick: handleYearClick
7110
+ }
7111
+ ),
7112
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4 mt-2", children: [
7113
+ /* @__PURE__ */ jsxRuntime.jsx(NavButton, { direction: "left", onClick: () => setYearBase((b) => b - 20) }),
7114
+ /* @__PURE__ */ jsxRuntime.jsx(NavButton, { direction: "right", onClick: () => setYearBase((b) => b + 20) })
7115
+ ] })
7116
+ ] }),
7117
+ showFooter && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-t border-grey-100 pt-4", children: [
7118
+ /* @__PURE__ */ jsxRuntime.jsx(
7119
+ "button",
7120
+ {
7121
+ type: "button",
7122
+ onClick: handleClear,
7123
+ className: "text-sm font-semibold text-grey-400 hover:text-grey-600 px-2 cursor-pointer",
7124
+ children: "Clear"
7125
+ }
7126
+ ),
7127
+ /* @__PURE__ */ jsxRuntime.jsx(
7128
+ "button",
7129
+ {
7130
+ type: "button",
7131
+ onClick: onDone,
7132
+ className: "bg-primary-400 text-white text-sm font-semibold px-5 py-2.5 rounded-lg hover:bg-primary-500 cursor-pointer",
7133
+ children: "Done"
7134
+ }
7135
+ )
7136
+ ] })
7137
+ ]
7138
+ }
7139
+ );
7140
+ }
7141
+ );
7142
+ DatePicker.displayName = "DatePicker";
7143
+ var Chip = react.forwardRef(
7144
+ ({
7145
+ variant = "input",
7146
+ icon,
7147
+ disabled = false,
7148
+ onClose,
7149
+ onDropdown,
7150
+ className,
7151
+ children,
7152
+ ...rest
7153
+ }, ref) => {
7154
+ return /* @__PURE__ */ jsxRuntime.jsxs(
7155
+ "div",
7156
+ {
7157
+ ref,
7158
+ className: cn(
7159
+ "inline-flex items-center gap-1 rounded-md border px-2 py-1 text-sm font-medium transition-colors",
7160
+ disabled ? "border-grey-200 bg-grey-100 text-grey-300 cursor-not-allowed" : "border-grey-300 bg-white dark:bg-grey-50 text-grey-700 cursor-default focus-within:bg-[#FBF1F1] focus-within:border-primary-600",
7161
+ className
7162
+ ),
7163
+ ...rest,
7164
+ children: [
7165
+ icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-4", children: resolveIcon(icon, "sm") }),
7166
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children }),
7167
+ variant === "input" && onClose && /* @__PURE__ */ jsxRuntime.jsx(
7168
+ "button",
7169
+ {
7170
+ type: "button",
7171
+ onClick: onClose,
7172
+ disabled,
7173
+ className: cn(
7174
+ "shrink-0 size-4 inline-flex items-center justify-center rounded-sm",
7175
+ disabled ? "cursor-not-allowed text-grey-300" : "cursor-pointer text-grey-500 hover:text-grey-700"
7176
+ ),
7177
+ "aria-label": "Remove",
7178
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "multiply", size: "xs" })
7179
+ }
7180
+ ),
7181
+ variant === "filter" && /* @__PURE__ */ jsxRuntime.jsx(
7182
+ "button",
7183
+ {
7184
+ type: "button",
7185
+ onClick: onDropdown,
7186
+ disabled,
7187
+ className: cn(
7188
+ "shrink-0 size-4 inline-flex items-center justify-center",
7189
+ disabled ? "cursor-not-allowed text-grey-300" : "cursor-pointer text-grey-500 hover:text-grey-700"
7190
+ ),
7191
+ "aria-label": "Open filter",
7192
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron-down", size: "xs" })
7193
+ }
7194
+ )
7195
+ ]
7196
+ }
7197
+ );
7198
+ }
7199
+ );
7200
+ Chip.displayName = "Chip";
7201
+ var SEGMENT_COUNT = 10;
7202
+ var trackHeight = {
7203
+ sm: "h-1",
7204
+ md: "h-2",
7205
+ lg: "h-3"
7206
+ };
7207
+ var clampValue = (value) => Math.min(100, Math.max(0, value));
7208
+ function ProgressBar({
7209
+ value = 0,
7210
+ size = "lg",
7211
+ type = "basic",
7212
+ label,
7213
+ metadata,
7214
+ showPercentage = true,
7215
+ percentagePosition = "bottom",
7216
+ className,
7217
+ ...rest
6073
7218
  }) {
6074
7219
  const clamped = clampValue(value);
6075
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("w-full", className), ...rest, children: [
6076
- (label || showPercentage) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between mb-2", children: [
6077
- label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-grey-900", children: label }),
6078
- showPercentage && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-medium text-grey-900", children: [
7220
+ const filledSegments = Math.round(clamped / 100 * SEGMENT_COUNT);
7221
+ const metadataItems = Array.isArray(metadata) ? metadata : metadata ? [metadata] : [];
7222
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-2 w-full", className), ...rest, children: [
7223
+ (label || showPercentage && percentagePosition === "top") && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
7224
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1 text-sm font-medium text-grey-900 leading-[1.45]", children: label }),
7225
+ showPercentage && percentagePosition === "top" && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-semibold text-grey-500 leading-[1.45]", children: [
6079
7226
  Math.round(clamped),
6080
7227
  "%"
6081
7228
  ] })
6082
7229
  ] }),
6083
- /* @__PURE__ */ jsxRuntime.jsx(
7230
+ type === "basic" ? /* @__PURE__ */ jsxRuntime.jsx(
6084
7231
  "div",
6085
7232
  {
6086
- className: cn("w-full rounded-full bg-grey-100", size === "lg" ? "h-3" : "h-2"),
7233
+ className: cn("w-full rounded-full bg-grey-200", trackHeight[size]),
6087
7234
  role: "progressbar",
6088
7235
  "aria-valuenow": clamped,
6089
7236
  "aria-valuemin": 0,
@@ -6093,14 +7240,42 @@ function ProgressBar({
6093
7240
  {
6094
7241
  className: cn(
6095
7242
  "rounded-full bg-primary-400 transition-all duration-300",
6096
- size === "lg" ? "h-3" : "h-2"
7243
+ trackHeight[size]
6097
7244
  ),
6098
7245
  style: { width: `${clamped}%` }
6099
7246
  }
6100
7247
  )
6101
7248
  }
7249
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
7250
+ "div",
7251
+ {
7252
+ className: cn("flex gap-0.5 w-full", trackHeight[size]),
7253
+ role: "progressbar",
7254
+ "aria-valuenow": clamped,
7255
+ "aria-valuemin": 0,
7256
+ "aria-valuemax": 100,
7257
+ children: Array.from({ length: SEGMENT_COUNT }, (_, i) => /* @__PURE__ */ jsxRuntime.jsx(
7258
+ "div",
7259
+ {
7260
+ className: cn(
7261
+ "flex-1 rounded-full transition-colors duration-300",
7262
+ i < filledSegments ? "bg-primary-400" : "bg-grey-100"
7263
+ )
7264
+ },
7265
+ i
7266
+ ))
7267
+ }
6102
7268
  ),
6103
- metadata && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end mt-1", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-grey-500", children: metadata }) })
7269
+ (metadataItems.length > 0 || showPercentage && percentagePosition === "bottom") && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
7270
+ 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: [
7271
+ i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-grey-400 leading-[1.45]", children: "\u2022" }),
7272
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-grey-500 leading-[1.45]", children: item })
7273
+ ] }, i)) }),
7274
+ showPercentage && percentagePosition === "bottom" && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex-1 text-sm font-semibold text-grey-500 text-right leading-[1.45]", children: [
7275
+ Math.round(clamped),
7276
+ "%"
7277
+ ] })
7278
+ ] })
6104
7279
  ] });
6105
7280
  }
6106
7281
  var sizeConfig = {
@@ -6110,10 +7285,13 @@ var sizeConfig = {
6110
7285
  lg: { dimension: 90, strokeWidth: 7, fontSize: 16 },
6111
7286
  xl: { dimension: 120, strokeWidth: 8, fontSize: 18 }
6112
7287
  };
7288
+ var SEGMENT_COUNT2 = 10;
7289
+ var SEGMENT_GAP_DEGREES = 6;
6113
7290
  var clampValue2 = (value) => Math.min(100, Math.max(0, value));
6114
7291
  function ProgressCircle({
6115
7292
  value = 0,
6116
7293
  size = "md",
7294
+ variant = "default",
6117
7295
  showText = true,
6118
7296
  className,
6119
7297
  ...rest
@@ -6122,6 +7300,57 @@ function ProgressCircle({
6122
7300
  const config = sizeConfig[size];
6123
7301
  const radius = (config.dimension - config.strokeWidth) / 2;
6124
7302
  const circumference = 2 * Math.PI * radius;
7303
+ if (variant === "segmented") {
7304
+ const filledSegments = Math.round(clamped / 100 * SEGMENT_COUNT2);
7305
+ const totalGapDegrees = SEGMENT_COUNT2 * SEGMENT_GAP_DEGREES;
7306
+ const segmentDegrees = (360 - totalGapDegrees) / SEGMENT_COUNT2;
7307
+ const segmentLength = segmentDegrees / 360 * circumference;
7308
+ const gapLength = SEGMENT_GAP_DEGREES / 360 * circumference;
7309
+ return /* @__PURE__ */ jsxRuntime.jsxs(
7310
+ "div",
7311
+ {
7312
+ className: cn("relative inline-flex items-center justify-center", className),
7313
+ style: { width: config.dimension, height: config.dimension },
7314
+ role: "progressbar",
7315
+ "aria-valuenow": clamped,
7316
+ "aria-valuemin": 0,
7317
+ "aria-valuemax": 100,
7318
+ ...rest,
7319
+ children: [
7320
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { width: config.dimension, height: config.dimension, className: "-rotate-90", children: Array.from({ length: SEGMENT_COUNT2 }, (_, i) => {
7321
+ const segmentOffset = i * ((segmentLength + gapLength) / circumference) * circumference;
7322
+ return /* @__PURE__ */ jsxRuntime.jsx(
7323
+ "circle",
7324
+ {
7325
+ cx: config.dimension / 2,
7326
+ cy: config.dimension / 2,
7327
+ r: radius,
7328
+ fill: "none",
7329
+ stroke: i < filledSegments ? "#F56630" : "#F0F2F5",
7330
+ strokeWidth: config.strokeWidth,
7331
+ strokeLinecap: "round",
7332
+ strokeDasharray: `${segmentLength} ${circumference - segmentLength}`,
7333
+ strokeDashoffset: -segmentOffset,
7334
+ className: "transition-colors duration-300"
7335
+ },
7336
+ i
7337
+ );
7338
+ }) }),
7339
+ showText && /* @__PURE__ */ jsxRuntime.jsxs(
7340
+ "span",
7341
+ {
7342
+ className: "absolute font-semibold text-grey-900",
7343
+ style: { fontSize: config.fontSize },
7344
+ children: [
7345
+ Math.round(clamped),
7346
+ "%"
7347
+ ]
7348
+ }
7349
+ )
7350
+ ]
7351
+ }
7352
+ );
7353
+ }
6125
7354
  const offset = circumference - clamped / 100 * circumference;
6126
7355
  return /* @__PURE__ */ jsxRuntime.jsxs(
6127
7356
  "div",
@@ -6162,14 +7391,190 @@ function ProgressCircle({
6162
7391
  }
6163
7392
  )
6164
7393
  ] }),
6165
- showText && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "absolute font-semibold text-black", style: { fontSize: config.fontSize }, children: [
6166
- Math.round(clamped),
6167
- "%"
6168
- ] })
7394
+ showText && /* @__PURE__ */ jsxRuntime.jsxs(
7395
+ "span",
7396
+ {
7397
+ className: "absolute font-semibold text-grey-900",
7398
+ style: { fontSize: config.fontSize },
7399
+ children: [
7400
+ Math.round(clamped),
7401
+ "%"
7402
+ ]
7403
+ }
7404
+ )
7405
+ ]
7406
+ }
7407
+ );
7408
+ }
7409
+ var statusColors = {
7410
+ information: {
7411
+ bold: { bg: "bg-[#4a9fed]", divider: "bg-[#f0f7ff]" },
7412
+ subtle: {
7413
+ bg: "bg-[#f0f7ff]",
7414
+ text: "text-grey-900",
7415
+ descText: "text-grey-600",
7416
+ divider: "bg-[#0063ad]"
7417
+ }
7418
+ },
7419
+ success: {
7420
+ bold: { bg: "bg-success-400", divider: "bg-success-50" },
7421
+ subtle: {
7422
+ bg: "bg-success-50",
7423
+ text: "text-grey-900",
7424
+ descText: "text-grey-600",
7425
+ divider: "bg-success-400"
7426
+ }
7427
+ },
7428
+ error: {
7429
+ bold: { bg: "bg-error-400", divider: "bg-error-50" },
7430
+ subtle: {
7431
+ bg: "bg-error-50",
7432
+ text: "text-grey-900",
7433
+ descText: "text-grey-600",
7434
+ divider: "bg-error-400"
7435
+ }
7436
+ },
7437
+ warning: {
7438
+ bold: { bg: "bg-warning-400", divider: "bg-warning-50" },
7439
+ subtle: {
7440
+ bg: "bg-warning-50",
7441
+ text: "text-grey-900",
7442
+ descText: "text-grey-600",
7443
+ divider: "bg-warning-700"
7444
+ }
7445
+ },
7446
+ feature: {
7447
+ bold: { bg: "bg-grey-900", divider: "bg-grey-100" },
7448
+ subtle: {
7449
+ bg: "bg-grey-50",
7450
+ text: "text-black",
7451
+ descText: "text-black",
7452
+ divider: "bg-grey-300"
7453
+ }
7454
+ },
7455
+ opportunity: {
7456
+ bold: { bg: "bg-[#475ccc]", divider: "bg-[#b1bae9]" },
7457
+ subtle: {
7458
+ bg: "bg-[#f7f8fd]",
7459
+ text: "text-grey-900",
7460
+ descText: "text-grey-600",
7461
+ divider: "bg-[#b1bae9]"
7462
+ }
7463
+ }
7464
+ };
7465
+ function InfoIcon({ className }) {
7466
+ return /* @__PURE__ */ jsxRuntime.jsxs(
7467
+ "svg",
7468
+ {
7469
+ className,
7470
+ viewBox: "0 0 24 24",
7471
+ fill: "none",
7472
+ stroke: "currentColor",
7473
+ strokeWidth: 2,
7474
+ strokeLinecap: "round",
7475
+ strokeLinejoin: "round",
7476
+ children: [
7477
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
7478
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 16v-4M12 8h.01" })
6169
7479
  ]
6170
7480
  }
6171
7481
  );
6172
7482
  }
7483
+ function CloseIcon({ className }) {
7484
+ return /* @__PURE__ */ jsxRuntime.jsx(
7485
+ "svg",
7486
+ {
7487
+ className,
7488
+ viewBox: "0 0 24 24",
7489
+ fill: "none",
7490
+ stroke: "currentColor",
7491
+ strokeWidth: 2,
7492
+ strokeLinecap: "round",
7493
+ strokeLinejoin: "round",
7494
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18 6L6 18M6 6l12 12" })
7495
+ }
7496
+ );
7497
+ }
7498
+ var Banner = react.forwardRef(
7499
+ ({
7500
+ status = "information",
7501
+ emphasis = "subtle",
7502
+ size = "lg",
7503
+ title,
7504
+ description,
7505
+ icon,
7506
+ buttonLabel,
7507
+ onButtonClick,
7508
+ dismissible = true,
7509
+ onDismiss,
7510
+ className,
7511
+ ...rest
7512
+ }, ref) => {
7513
+ const colors = statusColors[status];
7514
+ const isBold = emphasis === "bold";
7515
+ const colorSet = isBold ? colors.bold : colors.subtle;
7516
+ const textColor = isBold ? "text-white" : colorSet.text;
7517
+ const descColor = isBold ? "text-white" : colorSet.descText;
7518
+ const buttonColor = isBold ? "text-white" : "text-grey-600";
7519
+ const iconSize4 = size === "sm" ? "size-4" : "size-6";
7520
+ const textSize2 = size === "sm" ? "text-xs" : "text-sm";
7521
+ return /* @__PURE__ */ jsxRuntime.jsxs(
7522
+ "div",
7523
+ {
7524
+ ref,
7525
+ role: "alert",
7526
+ className: cn(
7527
+ "flex items-center justify-between overflow-hidden rounded-[4px] w-full",
7528
+ colorSet.bg,
7529
+ size === "sm" ? "h-10 px-3 py-2" : "h-12 px-8 py-3",
7530
+ className
7531
+ ),
7532
+ ...rest,
7533
+ children: [
7534
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-1 items-center", size === "sm" ? "gap-2" : "gap-3"), children: [
7535
+ 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) }),
7536
+ /* @__PURE__ */ jsxRuntime.jsx(
7537
+ "span",
7538
+ {
7539
+ className: cn("font-semibold leading-[1.45] whitespace-nowrap", textSize2, textColor),
7540
+ children: title
7541
+ }
7542
+ ),
7543
+ description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("leading-[1.45] whitespace-nowrap", textSize2, descColor), children: description }),
7544
+ buttonLabel && /* @__PURE__ */ jsxRuntime.jsx(
7545
+ "button",
7546
+ {
7547
+ type: "button",
7548
+ onClick: onButtonClick,
7549
+ className: cn(
7550
+ "shrink-0 font-semibold leading-[1.45] whitespace-nowrap cursor-pointer",
7551
+ textSize2,
7552
+ buttonColor,
7553
+ isBold && "text-white underline"
7554
+ ),
7555
+ children: buttonLabel
7556
+ }
7557
+ )
7558
+ ] }),
7559
+ dismissible && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 self-stretch shrink-0", children: [
7560
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-px self-stretch", colorSet.divider) }),
7561
+ /* @__PURE__ */ jsxRuntime.jsx(
7562
+ "button",
7563
+ {
7564
+ type: "button",
7565
+ onClick: onDismiss,
7566
+ "aria-label": "Dismiss banner",
7567
+ className: cn("shrink-0 cursor-pointer", iconSize4, textColor),
7568
+ children: /* @__PURE__ */ jsxRuntime.jsx(CloseIcon, { className: "size-full" })
7569
+ }
7570
+ )
7571
+ ] })
7572
+ ]
7573
+ }
7574
+ );
7575
+ }
7576
+ );
7577
+ Banner.displayName = "Banner";
6173
7578
  var colorStyles = {
6174
7579
  orange: {
6175
7580
  filled: "bg-primary-400 text-white",
@@ -6223,21 +7628,21 @@ function Badge({
6223
7628
  ...rest
6224
7629
  }) {
6225
7630
  const colorClass = colorStyles[color][type];
6226
- const sizeConfig2 = sizeStyles[size];
7631
+ const sizeConfig3 = sizeStyles[size];
6227
7632
  return /* @__PURE__ */ jsxRuntime.jsxs(
6228
7633
  "span",
6229
7634
  {
6230
7635
  className: cn(
6231
7636
  "inline-flex items-center rounded-xl font-medium whitespace-nowrap",
6232
- sizeConfig2.container,
7637
+ sizeConfig3.container,
6233
7638
  colorClass,
6234
7639
  className
6235
7640
  ),
6236
7641
  ...rest,
6237
7642
  children: [
6238
- leadingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("shrink-0", sizeConfig2.icon), children: resolveIcon(leadingIcon, "xs") }),
7643
+ leadingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("shrink-0", sizeConfig3.icon), children: resolveIcon(leadingIcon, "xs") }),
6239
7644
  children,
6240
- trailingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("shrink-0", sizeConfig2.icon), children: resolveIcon(trailingIcon, "xs") })
7645
+ trailingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("shrink-0", sizeConfig3.icon), children: resolveIcon(trailingIcon, "xs") })
6241
7646
  ]
6242
7647
  }
6243
7648
  );
@@ -6472,7 +7877,7 @@ function Arrow({ position, theme }) {
6472
7877
  }
6473
7878
  ) });
6474
7879
  }
6475
- var Tooltip = react.forwardRef(
7880
+ var Tooltip2 = react.forwardRef(
6476
7881
  ({
6477
7882
  theme = "light",
6478
7883
  position = "top-left",
@@ -6559,7 +7964,7 @@ var Tooltip = react.forwardRef(
6559
7964
  );
6560
7965
  }
6561
7966
  );
6562
- Tooltip.displayName = "Tooltip";
7967
+ Tooltip2.displayName = "Tooltip";
6563
7968
  function range(start, end) {
6564
7969
  const arr = [];
6565
7970
  for (let i = start; i <= end; i++) arr.push(i);
@@ -6587,8 +7992,8 @@ function getPageNumbers(currentPage, totalPages, siblingCount) {
6587
7992
  const middleRange = range(leftSiblingIndex, rightSiblingIndex);
6588
7993
  return [1, "...", ...middleRange, "...", totalPages];
6589
7994
  }
6590
- var ChevronLeft = () => /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron-left", size: "md" });
6591
- var ChevronRight = () => /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron-right", size: "md" });
7995
+ var ChevronLeft2 = () => /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron-left", size: "md" });
7996
+ var ChevronRight2 = () => /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron-right", size: "md" });
6592
7997
  function Pagination({
6593
7998
  currentPage,
6594
7999
  totalPages,
@@ -6609,7 +8014,7 @@ function Pagination({
6609
8014
  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
8015
  "aria-label": "Previous page",
6611
8016
  children: [
6612
- /* @__PURE__ */ jsxRuntime.jsx(ChevronLeft, {}),
8017
+ /* @__PURE__ */ jsxRuntime.jsx(ChevronLeft2, {}),
6613
8018
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Previous" })
6614
8019
  ]
6615
8020
  }
@@ -6647,7 +8052,7 @@ function Pagination({
6647
8052
  "aria-label": "Next page",
6648
8053
  children: [
6649
8054
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Next" }),
6650
- /* @__PURE__ */ jsxRuntime.jsx(ChevronRight, {})
8055
+ /* @__PURE__ */ jsxRuntime.jsx(ChevronRight2, {})
6651
8056
  ]
6652
8057
  }
6653
8058
  )
@@ -6784,35 +8189,92 @@ var Toggle = react.forwardRef(
6784
8189
  }
6785
8190
  );
6786
8191
  Toggle.displayName = "Toggle";
6787
- function Breadcrumb({ items, separator = "/", className, ...rest }) {
8192
+ function ChevronRight3({ className }) {
8193
+ return /* @__PURE__ */ jsxRuntime.jsx(
8194
+ "svg",
8195
+ {
8196
+ className,
8197
+ viewBox: "0 0 20 20",
8198
+ fill: "none",
8199
+ stroke: "currentColor",
8200
+ strokeWidth: 2,
8201
+ strokeLinecap: "round",
8202
+ strokeLinejoin: "round",
8203
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7.5 5l5 5-5 5" })
8204
+ }
8205
+ );
8206
+ }
8207
+ function DoubleChevronRight({ className }) {
8208
+ return /* @__PURE__ */ jsxRuntime.jsx(
8209
+ "svg",
8210
+ {
8211
+ className,
8212
+ viewBox: "0 0 20 20",
8213
+ fill: "none",
8214
+ stroke: "currentColor",
8215
+ strokeWidth: 2,
8216
+ strokeLinecap: "round",
8217
+ strokeLinejoin: "round",
8218
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5.5 5l5 5-5 5M10.5 5l5 5-5 5" })
8219
+ }
8220
+ );
8221
+ }
8222
+ function SeparatorElement({ type }) {
8223
+ switch (type) {
8224
+ case "chevron":
8225
+ return /* @__PURE__ */ jsxRuntime.jsx(ChevronRight3, { className: "size-5 text-grey-300" });
8226
+ case "double-chevron":
8227
+ return /* @__PURE__ */ jsxRuntime.jsx(DoubleChevronRight, { className: "size-5 text-grey-300" });
8228
+ case "slash":
8229
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-grey-300 w-4 text-center", children: "/" });
8230
+ }
8231
+ }
8232
+ function Breadcrumb({
8233
+ items,
8234
+ separator = "chevron",
8235
+ hasBorders = false,
8236
+ className,
8237
+ ...rest
8238
+ }) {
6788
8239
  return /* @__PURE__ */ jsxRuntime.jsx(
6789
8240
  "nav",
6790
8241
  {
6791
8242
  "aria-label": "Breadcrumb",
6792
- className: cn("border-y border-grey-200 px-4 py-2.5", className),
8243
+ className: cn("py-2.5", hasBorders && "border-y border-grey-100", className),
6793
8244
  ...rest,
6794
- children: /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "flex items-center gap-2 text-sm", children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-center gap-2", children: [
6795
- i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-grey-400", "aria-hidden": true, children: separator }),
6796
- item.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-4 shrink-0", children: resolveIcon(item.icon, "sm") }),
6797
- item.href && !item.disabled && !item.active ? /* @__PURE__ */ jsxRuntime.jsx(
6798
- "a",
6799
- {
6800
- href: item.href,
6801
- className: cn("text-grey-500 hover:text-primary-300 transition-colors"),
6802
- children: item.label
6803
- }
6804
- ) : /* @__PURE__ */ jsxRuntime.jsx(
6805
- "span",
6806
- {
6807
- className: cn(
6808
- item.active && "text-primary-500 font-medium",
6809
- item.disabled && "text-grey-400 cursor-not-allowed",
6810
- !item.active && !item.disabled && "text-grey-500"
6811
- ),
6812
- "aria-current": item.active ? "page" : void 0,
6813
- children: item.label
6814
- }
6815
- )
8245
+ 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: [
8246
+ i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx(SeparatorElement, { type: separator }) }),
8247
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
8248
+ item.icon && /* @__PURE__ */ jsxRuntime.jsx(
8249
+ "span",
8250
+ {
8251
+ className: cn(
8252
+ "size-5 shrink-0",
8253
+ item.active ? "text-primary-400" : item.disabled ? "text-grey-300" : "text-grey-500 group-hover:text-grey-700"
8254
+ ),
8255
+ children: resolveIcon(item.icon, "sm")
8256
+ }
8257
+ ),
8258
+ item.href && !item.disabled && !item.active ? /* @__PURE__ */ jsxRuntime.jsx(
8259
+ "a",
8260
+ {
8261
+ href: item.href,
8262
+ className: "text-grey-500 hover:text-grey-700 hover:underline transition-colors",
8263
+ children: item.label
8264
+ }
8265
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
8266
+ "span",
8267
+ {
8268
+ className: cn(
8269
+ item.active && "text-primary-400",
8270
+ item.disabled && "text-grey-300 cursor-not-allowed",
8271
+ !item.active && !item.disabled && "text-grey-500"
8272
+ ),
8273
+ "aria-current": item.active ? "page" : void 0,
8274
+ children: item.label
8275
+ }
8276
+ )
8277
+ ] })
6816
8278
  ] }, i)) })
6817
8279
  }
6818
8280
  );
@@ -6833,7 +8295,7 @@ var initialsFontSize = {
6833
8295
  xl: "text-[18px] leading-[1.45]",
6834
8296
  "2xl": "text-[20px] leading-[1.2] tracking-[-0.4px]"
6835
8297
  };
6836
- var iconSize = {
8298
+ var iconSize3 = {
6837
8299
  xs: "xs",
6838
8300
  sm: "sm",
6839
8301
  md: "md",
@@ -6908,7 +8370,7 @@ var Avatar = react.forwardRef(
6908
8370
  ...rest,
6909
8371
  children: [
6910
8372
  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, iconSize[size]) : /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "user", size: iconSize[size] }) }),
8373
+ 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
8374
  type === "initials" && /* @__PURE__ */ jsxRuntime.jsx(
6913
8375
  "div",
6914
8376
  {
@@ -6950,6 +8412,202 @@ var AvatarGroup = react.forwardRef(
6950
8412
  }
6951
8413
  );
6952
8414
  AvatarGroup.displayName = "AvatarGroup";
8415
+ function CloseIcon2({ className }) {
8416
+ return /* @__PURE__ */ jsxRuntime.jsx(
8417
+ "svg",
8418
+ {
8419
+ className,
8420
+ viewBox: "0 0 12 12",
8421
+ fill: "none",
8422
+ stroke: "currentColor",
8423
+ strokeWidth: 1.5,
8424
+ strokeLinecap: "round",
8425
+ strokeLinejoin: "round",
8426
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 3L3 9M3 3l6 6" })
8427
+ }
8428
+ );
8429
+ }
8430
+ function BoxIcon({ className }) {
8431
+ return /* @__PURE__ */ jsxRuntime.jsxs(
8432
+ "svg",
8433
+ {
8434
+ className,
8435
+ viewBox: "0 0 16 16",
8436
+ fill: "none",
8437
+ stroke: "currentColor",
8438
+ strokeWidth: 1.2,
8439
+ strokeLinecap: "round",
8440
+ strokeLinejoin: "round",
8441
+ children: [
8442
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2.67 4.67L8 7.33l5.33-2.66M8 14V7.33" }),
8443
+ /* @__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" })
8444
+ ]
8445
+ }
8446
+ );
8447
+ }
8448
+ var sizeClasses2 = {
8449
+ sm: "w-[400px]",
8450
+ md: "w-[500px]",
8451
+ lg: "w-[640px]"
8452
+ };
8453
+ var Modal = react.forwardRef(
8454
+ ({
8455
+ open,
8456
+ onClose,
8457
+ size = "sm",
8458
+ title,
8459
+ description,
8460
+ icon,
8461
+ showClose = true,
8462
+ primaryLabel = "Save",
8463
+ onPrimaryClick,
8464
+ secondaryLabel,
8465
+ onSecondaryClick,
8466
+ footerOrientation = "horizontal",
8467
+ closeOnOverlay = true,
8468
+ closeOnEscape = true,
8469
+ blur = true,
8470
+ children,
8471
+ className,
8472
+ ...rest
8473
+ }, ref) => {
8474
+ const overlayRef = react.useRef(null);
8475
+ react.useEffect(() => {
8476
+ if (!open || !closeOnEscape) return;
8477
+ const handler = (e) => {
8478
+ if (e.key === "Escape") onClose();
8479
+ };
8480
+ document.addEventListener("keydown", handler);
8481
+ return () => document.removeEventListener("keydown", handler);
8482
+ }, [open, closeOnEscape, onClose]);
8483
+ react.useEffect(() => {
8484
+ if (!open) return;
8485
+ const prev = document.body.style.overflow;
8486
+ document.body.style.overflow = "hidden";
8487
+ return () => {
8488
+ document.body.style.overflow = prev;
8489
+ };
8490
+ }, [open]);
8491
+ const handleOverlayClick = react.useCallback(
8492
+ (e) => {
8493
+ if (closeOnOverlay && e.target === overlayRef.current) onClose();
8494
+ },
8495
+ [closeOnOverlay, onClose]
8496
+ );
8497
+ if (!open) return null;
8498
+ const isVertical = footerOrientation === "vertical";
8499
+ const modal = /* @__PURE__ */ jsxRuntime.jsxs(
8500
+ "div",
8501
+ {
8502
+ ref: overlayRef,
8503
+ className: cn(
8504
+ "fixed inset-0 z-50 flex items-center justify-center",
8505
+ blur && "backdrop-blur-md"
8506
+ ),
8507
+ onClick: handleOverlayClick,
8508
+ role: "presentation",
8509
+ children: [
8510
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-black/60" }),
8511
+ /* @__PURE__ */ jsxRuntime.jsxs(
8512
+ "div",
8513
+ {
8514
+ ref,
8515
+ role: "dialog",
8516
+ "aria-modal": "true",
8517
+ "aria-labelledby": title ? "modal-title" : void 0,
8518
+ "aria-describedby": description ? "modal-desc" : void 0,
8519
+ className: cn(
8520
+ "relative flex flex-col bg-white dark:bg-grey-50 rounded-xl shadow-soft-xl overflow-hidden",
8521
+ sizeClasses2[size],
8522
+ className
8523
+ ),
8524
+ ...rest,
8525
+ children: [
8526
+ (title || showClose) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-2 pt-5 pb-2 px-4", children: [
8527
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-1 gap-4 items-start min-w-0", children: [
8528
+ 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,
8529
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col flex-1 min-w-0", children: [
8530
+ title && /* @__PURE__ */ jsxRuntime.jsx(
8531
+ "h2",
8532
+ {
8533
+ id: "modal-title",
8534
+ className: "text-xl font-semibold text-grey-700 leading-[1.2] tracking-[-0.4px]",
8535
+ children: title
8536
+ }
8537
+ ),
8538
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { id: "modal-desc", className: "text-sm text-grey-500 leading-[1.45]", children: description })
8539
+ ] })
8540
+ ] }),
8541
+ showClose && /* @__PURE__ */ jsxRuntime.jsx(
8542
+ "button",
8543
+ {
8544
+ type: "button",
8545
+ onClick: onClose,
8546
+ "aria-label": "Close modal",
8547
+ className: "shrink-0 flex items-center justify-center p-1.5 bg-grey-75 rounded-xl hover:bg-grey-200 transition-colors cursor-pointer",
8548
+ children: /* @__PURE__ */ jsxRuntime.jsx(CloseIcon2, { className: "size-3" })
8549
+ }
8550
+ )
8551
+ ] }),
8552
+ children && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 px-4 py-4 overflow-y-auto", children }),
8553
+ (primaryLabel || secondaryLabel) && /* @__PURE__ */ jsxRuntime.jsx(
8554
+ "div",
8555
+ {
8556
+ className: cn(
8557
+ "py-5",
8558
+ isVertical ? "flex flex-col gap-5 items-center px-4" : "flex items-center justify-end gap-3 px-4"
8559
+ ),
8560
+ children: isVertical ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
8561
+ /* @__PURE__ */ jsxRuntime.jsx(
8562
+ "button",
8563
+ {
8564
+ type: "button",
8565
+ onClick: onPrimaryClick,
8566
+ className: "w-full bg-primary-400 text-white text-sm font-semibold p-2 rounded-xl hover:bg-primary-500 transition-colors cursor-pointer",
8567
+ children: primaryLabel
8568
+ }
8569
+ ),
8570
+ secondaryLabel && /* @__PURE__ */ jsxRuntime.jsx(
8571
+ "button",
8572
+ {
8573
+ type: "button",
8574
+ onClick: onSecondaryClick ?? onClose,
8575
+ 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",
8576
+ children: secondaryLabel
8577
+ }
8578
+ )
8579
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
8580
+ secondaryLabel && /* @__PURE__ */ jsxRuntime.jsx(
8581
+ "button",
8582
+ {
8583
+ type: "button",
8584
+ onClick: onSecondaryClick ?? onClose,
8585
+ 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",
8586
+ children: secondaryLabel
8587
+ }
8588
+ ),
8589
+ /* @__PURE__ */ jsxRuntime.jsx(
8590
+ "button",
8591
+ {
8592
+ type: "button",
8593
+ onClick: onPrimaryClick,
8594
+ className: "flex-1 bg-primary-400 text-white text-sm font-semibold p-2 rounded-xl hover:bg-primary-500 transition-colors cursor-pointer",
8595
+ children: primaryLabel
8596
+ }
8597
+ )
8598
+ ] })
8599
+ }
8600
+ )
8601
+ ]
8602
+ }
8603
+ )
8604
+ ]
8605
+ }
8606
+ );
8607
+ return reactDom.createPortal(modal, document.body);
8608
+ }
8609
+ );
8610
+ Modal.displayName = "Modal";
6953
8611
  var trendStyles = {
6954
8612
  up: "bg-primary-50 text-primary-700",
6955
8613
  down: "bg-error-50 text-error-700"
@@ -7376,6 +9034,8 @@ var FileUploadDropZone = react.forwardRef(
7376
9034
  "div",
7377
9035
  {
7378
9036
  ref,
9037
+ role: "region",
9038
+ "aria-label": "File upload dropzone",
7379
9039
  className: cn(
7380
9040
  "flex flex-col items-center justify-center rounded-xl p-8 transition-colors",
7381
9041
  state === "dragging" ? "border-2 border-dashed border-primary-400 bg-primary-50/10" : state === "uploading" || state === "success" || state === "error" ? "border border-grey-200 bg-white dark:bg-grey-50" : "border-2 border-dashed border-grey-300 bg-white dark:bg-grey-50",
@@ -7396,11 +9056,12 @@ var FileUploadDropZone = react.forwardRef(
7396
9056
  multiple,
7397
9057
  onChange: handleFileChange,
7398
9058
  className: "sr-only",
7399
- tabIndex: -1
9059
+ tabIndex: -1,
9060
+ "aria-label": multiple ? "Choose files to upload" : "Choose file to upload"
7400
9061
  }
7401
9062
  ),
7402
9063
  (state === "default" || state === "dragging") && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-4", children: [
7403
- /* @__PURE__ */ jsxRuntime.jsx(UploadStateIcon, { state: "default", size: 56 }),
9064
+ /* @__PURE__ */ jsxRuntime.jsx(UploadStateIcon, { state: "default", size: 56, "aria-hidden": "true" }),
7404
9065
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-1", children: [
7405
9066
  /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-body-sm font-medium text-grey-600", children: [
7406
9067
  "Click to upload ",
@@ -7410,12 +9071,12 @@ var FileUploadDropZone = react.forwardRef(
7410
9071
  ] }),
7411
9072
  /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "primary", size: "sm", onClick: handleBrowse, children: "Browse Files" })
7412
9073
  ] }),
7413
- state === "uploading" && uploadingFile && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full flex-col items-center gap-4", children: [
7414
- /* @__PURE__ */ jsxRuntime.jsx(FileTypeIcon, { type: getFileType(uploadingFile.name) }),
9074
+ state === "uploading" && uploadingFile && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full flex-col items-center gap-4", "aria-live": "polite", "aria-atomic": "true", children: [
9075
+ /* @__PURE__ */ jsxRuntime.jsx(FileTypeIcon, { type: getFileType(uploadingFile.name), "aria-hidden": "true" }),
7415
9076
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full max-w-xs flex-col gap-2", children: [
7416
9077
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
7417
9078
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-body-sm font-medium text-grey-700 truncate", children: uploadingFile.name }),
7418
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-body-xs font-medium text-grey-500 ml-2 shrink-0", children: [
9079
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-body-xs font-medium text-grey-500 ml-2 shrink-0", "aria-label": `Upload progress: ${Math.round(uploadingFile.progress)} percent`, children: [
7419
9080
  Math.round(uploadingFile.progress),
7420
9081
  "%"
7421
9082
  ] })
@@ -7423,8 +9084,8 @@ var FileUploadDropZone = react.forwardRef(
7423
9084
  /* @__PURE__ */ jsxRuntime.jsx(ProgressBar, { value: uploadingFile.progress, size: "sm", showPercentage: false })
7424
9085
  ] })
7425
9086
  ] }),
7426
- state === "success" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-4", children: [
7427
- /* @__PURE__ */ jsxRuntime.jsx(UploadStateIcon, { state: "success", size: 56 }),
9087
+ state === "success" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-4", role: "status", children: [
9088
+ /* @__PURE__ */ jsxRuntime.jsx(UploadStateIcon, { state: "success", size: 56, "aria-hidden": "true" }),
7428
9089
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col items-center gap-1", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-body-sm font-semibold text-grey-800", children: "Document Uploaded Successfully" }) }),
7429
9090
  /* @__PURE__ */ jsxRuntime.jsx(
7430
9091
  "button",
@@ -7436,8 +9097,8 @@ var FileUploadDropZone = react.forwardRef(
7436
9097
  }
7437
9098
  )
7438
9099
  ] }),
7439
- state === "error" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-4", children: [
7440
- /* @__PURE__ */ jsxRuntime.jsx(UploadStateIcon, { state: "error", size: 56 }),
9100
+ state === "error" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-4", role: "alert", children: [
9101
+ /* @__PURE__ */ jsxRuntime.jsx(UploadStateIcon, { state: "error", size: 56, "aria-hidden": "true" }),
7441
9102
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-1", children: [
7442
9103
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-body-sm font-semibold text-grey-800", children: "Failed to Upload" }),
7443
9104
  errorMessage && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-body-xs text-grey-400", children: errorMessage })
@@ -7769,7 +9430,7 @@ var SidebarMenu = react.forwardRef(
7769
9430
  "nav",
7770
9431
  {
7771
9432
  ref,
7772
- role: "navigation",
9433
+ "aria-label": "Main navigation",
7773
9434
  className: cn(
7774
9435
  "flex flex-col gap-3 overflow-y-auto rounded-xl py-6",
7775
9436
  ts.container,
@@ -7859,7 +9520,7 @@ var SidebarMenuItem = react.forwardRef(
7859
9520
  onClick: () => {
7860
9521
  if (!disabled && !isExpandable) onSelect(value);
7861
9522
  },
7862
- title: typeof labelContent === "string" ? labelContent : void 0,
9523
+ "aria-label": typeof labelContent === "string" ? labelContent : void 0,
7863
9524
  className: cn(
7864
9525
  "flex size-11 cursor-pointer items-center justify-center rounded transition-colors",
7865
9526
  highlighted ? cn(ts.selectedBg, ts.selectedIcon) : cn(ts.defaultIcon, ts.hoverBg),
@@ -7878,6 +9539,8 @@ var SidebarMenuItem = react.forwardRef(
7878
9539
  ref,
7879
9540
  type: "button",
7880
9541
  role: "menuitem",
9542
+ "aria-expanded": isExpandable ? open : void 0,
9543
+ "aria-haspopup": isExpandable ? "menu" : void 0,
7881
9544
  disabled,
7882
9545
  onClick: handleClick,
7883
9546
  className: cn(
@@ -7905,6 +9568,7 @@ var SidebarMenuItem = react.forwardRef(
7905
9568
  {
7906
9569
  name: open ? "chevron-up" : "chevron-down",
7907
9570
  size: "sm",
9571
+ "aria-hidden": "true",
7908
9572
  className: cn(
7909
9573
  "ml-1 shrink-0 transition-transform",
7910
9574
  highlighted ? ts.selectedIcon : ts.defaultIcon
@@ -11369,6 +13033,7 @@ var TableHead = react.forwardRef(
11369
13033
  {
11370
13034
  name: sortDirection === "asc" ? "chevron-up" : "chevron-down",
11371
13035
  size: "sm",
13036
+ "aria-hidden": "true",
11372
13037
  className: cn("shrink-0", sortDirection ? "text-grey-700" : "text-grey-400")
11373
13038
  }
11374
13039
  )
@@ -11625,6 +13290,760 @@ var DropdownMenuSeparator = react.forwardRef(
11625
13290
  ({ className, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, role: "separator", className: cn("my-1 h-px bg-grey-100", className), ...rest })
11626
13291
  );
11627
13292
  DropdownMenuSeparator.displayName = "DropdownMenuSeparator";
13293
+ var sizeMap2 = {
13294
+ xs: 20,
13295
+ sm: 24,
13296
+ md: 32,
13297
+ lg: 40,
13298
+ xl: 48,
13299
+ "2xl": 56,
13300
+ "3xl": 64
13301
+ };
13302
+ function ThinSpinner({ size, color }) {
13303
+ const r = size / 2 - 2;
13304
+ const c = size / 2;
13305
+ return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, className: "animate-spin", children: [
13306
+ /* @__PURE__ */ jsxRuntime.jsx(
13307
+ "circle",
13308
+ {
13309
+ cx: c,
13310
+ cy: c,
13311
+ r,
13312
+ fill: "none",
13313
+ stroke: "currentColor",
13314
+ strokeWidth: 1.5,
13315
+ opacity: 0.2,
13316
+ className: color
13317
+ }
13318
+ ),
13319
+ /* @__PURE__ */ jsxRuntime.jsx(
13320
+ "circle",
13321
+ {
13322
+ cx: c,
13323
+ cy: c,
13324
+ r,
13325
+ fill: "none",
13326
+ stroke: "currentColor",
13327
+ strokeWidth: 1.5,
13328
+ strokeDasharray: `${r * Math.PI * 0.75} ${r * Math.PI * 1.25}`,
13329
+ strokeLinecap: "round",
13330
+ className: color
13331
+ }
13332
+ )
13333
+ ] });
13334
+ }
13335
+ function BoldSpinner({ size, color }) {
13336
+ const sw = Math.max(2.5, size * 0.1);
13337
+ const r = size / 2 - sw;
13338
+ const c = size / 2;
13339
+ return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, className: "animate-spin", children: [
13340
+ /* @__PURE__ */ jsxRuntime.jsx(
13341
+ "circle",
13342
+ {
13343
+ cx: c,
13344
+ cy: c,
13345
+ r,
13346
+ fill: "none",
13347
+ stroke: "currentColor",
13348
+ strokeWidth: sw,
13349
+ opacity: 0.2,
13350
+ className: color
13351
+ }
13352
+ ),
13353
+ /* @__PURE__ */ jsxRuntime.jsx(
13354
+ "circle",
13355
+ {
13356
+ cx: c,
13357
+ cy: c,
13358
+ r,
13359
+ fill: "none",
13360
+ stroke: "currentColor",
13361
+ strokeWidth: sw,
13362
+ strokeDasharray: `${r * Math.PI * 0.75} ${r * Math.PI * 1.25}`,
13363
+ strokeLinecap: "round",
13364
+ className: color
13365
+ }
13366
+ )
13367
+ ] });
13368
+ }
13369
+ function DuoToneSpinner({ size, color }) {
13370
+ const sw = Math.max(2, size * 0.08);
13371
+ const r = size / 2 - sw;
13372
+ const c = size / 2;
13373
+ return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, className: "animate-spin", children: [
13374
+ /* @__PURE__ */ jsxRuntime.jsx(
13375
+ "circle",
13376
+ {
13377
+ cx: c,
13378
+ cy: c,
13379
+ r,
13380
+ fill: "none",
13381
+ stroke: "currentColor",
13382
+ strokeWidth: sw,
13383
+ opacity: 0.15,
13384
+ className: color
13385
+ }
13386
+ ),
13387
+ /* @__PURE__ */ jsxRuntime.jsx(
13388
+ "circle",
13389
+ {
13390
+ cx: c,
13391
+ cy: c,
13392
+ r,
13393
+ fill: "none",
13394
+ stroke: "currentColor",
13395
+ strokeWidth: sw,
13396
+ strokeDasharray: `${r * Math.PI} ${r * Math.PI}`,
13397
+ strokeLinecap: "round",
13398
+ className: color
13399
+ }
13400
+ )
13401
+ ] });
13402
+ }
13403
+ function BufferingThinSpinner({ size, color }) {
13404
+ const r = size / 2 - 2;
13405
+ const c = size / 2;
13406
+ const circumference = 2 * Math.PI * r;
13407
+ return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [
13408
+ /* @__PURE__ */ jsxRuntime.jsx(
13409
+ "circle",
13410
+ {
13411
+ cx: c,
13412
+ cy: c,
13413
+ r,
13414
+ fill: "none",
13415
+ stroke: "currentColor",
13416
+ strokeWidth: 1.5,
13417
+ opacity: 0.2,
13418
+ className: color
13419
+ }
13420
+ ),
13421
+ /* @__PURE__ */ jsxRuntime.jsx(
13422
+ "circle",
13423
+ {
13424
+ cx: c,
13425
+ cy: c,
13426
+ r,
13427
+ fill: "none",
13428
+ stroke: "currentColor",
13429
+ strokeWidth: 1.5,
13430
+ strokeLinecap: "round",
13431
+ className: cn(color, "animate-[spinner-dash_1.5s_ease-in-out_infinite]"),
13432
+ style: { strokeDasharray: circumference, transformOrigin: "center" }
13433
+ }
13434
+ )
13435
+ ] });
13436
+ }
13437
+ function BufferingBoldSpinner({ size, color }) {
13438
+ const sw = Math.max(2.5, size * 0.1);
13439
+ const r = size / 2 - sw;
13440
+ const c = size / 2;
13441
+ const circumference = 2 * Math.PI * r;
13442
+ return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [
13443
+ /* @__PURE__ */ jsxRuntime.jsx(
13444
+ "circle",
13445
+ {
13446
+ cx: c,
13447
+ cy: c,
13448
+ r,
13449
+ fill: "none",
13450
+ stroke: "currentColor",
13451
+ strokeWidth: sw,
13452
+ opacity: 0.2,
13453
+ className: color
13454
+ }
13455
+ ),
13456
+ /* @__PURE__ */ jsxRuntime.jsx(
13457
+ "circle",
13458
+ {
13459
+ cx: c,
13460
+ cy: c,
13461
+ r,
13462
+ fill: "none",
13463
+ stroke: "currentColor",
13464
+ strokeWidth: sw,
13465
+ strokeLinecap: "round",
13466
+ className: cn(color, "animate-[spinner-dash_1.5s_ease-in-out_infinite]"),
13467
+ style: { strokeDasharray: circumference, transformOrigin: "center" }
13468
+ }
13469
+ )
13470
+ ] });
13471
+ }
13472
+ function DotSpinner({ size, color }) {
13473
+ const dotSize = Math.max(3, size * 0.15);
13474
+ const c = size / 2;
13475
+ const r = size / 2 - dotSize;
13476
+ 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) => {
13477
+ const angle = i * 45 * Math.PI / 180;
13478
+ const x = c + r * Math.cos(angle);
13479
+ const y = c + r * Math.sin(angle);
13480
+ return /* @__PURE__ */ jsxRuntime.jsx(
13481
+ "circle",
13482
+ {
13483
+ cx: x,
13484
+ cy: y,
13485
+ r: dotSize / 2,
13486
+ fill: "currentColor",
13487
+ opacity: 0.15 + i / 8 * 0.85,
13488
+ className: color
13489
+ },
13490
+ i
13491
+ );
13492
+ }) });
13493
+ }
13494
+ function JugglingSpinner({ size, color }) {
13495
+ const dotSize = Math.max(3, size * 0.18);
13496
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [0, 1, 2].map((i) => {
13497
+ const cx = size / 2 + (i - 1) * (size * 0.35);
13498
+ return /* @__PURE__ */ jsxRuntime.jsx(
13499
+ "circle",
13500
+ {
13501
+ cx,
13502
+ cy: size / 2,
13503
+ r: dotSize / 2,
13504
+ fill: "currentColor",
13505
+ className: cn(color, "animate-[juggle_1.4s_ease-in-out_infinite]"),
13506
+ style: { animationDelay: `${i * 0.16}s` }
13507
+ },
13508
+ i
13509
+ );
13510
+ }) });
13511
+ }
13512
+ var Spinner = react.forwardRef(
13513
+ ({
13514
+ type = "thin",
13515
+ size = "md",
13516
+ colorStyle = "brand",
13517
+ label,
13518
+ labelPosition = "after",
13519
+ className,
13520
+ ...rest
13521
+ }, ref) => {
13522
+ const px = sizeMap2[size];
13523
+ const color = colorStyle === "brand" ? "text-primary-400" : "text-white";
13524
+ const labelColor = colorStyle === "brand" ? "text-grey-900" : "text-white";
13525
+ const spinnerEl = (() => {
13526
+ switch (type) {
13527
+ case "thin":
13528
+ return /* @__PURE__ */ jsxRuntime.jsx(ThinSpinner, { size: px, color });
13529
+ case "bold":
13530
+ return /* @__PURE__ */ jsxRuntime.jsx(BoldSpinner, { size: px, color });
13531
+ case "duo-tone":
13532
+ return /* @__PURE__ */ jsxRuntime.jsx(DuoToneSpinner, { size: px, color });
13533
+ case "buffering-thin":
13534
+ return /* @__PURE__ */ jsxRuntime.jsx(BufferingThinSpinner, { size: px, color });
13535
+ case "buffering-bold":
13536
+ return /* @__PURE__ */ jsxRuntime.jsx(BufferingBoldSpinner, { size: px, color });
13537
+ case "dot":
13538
+ return /* @__PURE__ */ jsxRuntime.jsx(DotSpinner, { size: px, color });
13539
+ case "juggling":
13540
+ return /* @__PURE__ */ jsxRuntime.jsx(JugglingSpinner, { size: px, color });
13541
+ }
13542
+ })();
13543
+ const isVertical = labelPosition === "above" || labelPosition === "below";
13544
+ const isReversed = labelPosition === "before" || labelPosition === "above";
13545
+ return /* @__PURE__ */ jsxRuntime.jsxs(
13546
+ "div",
13547
+ {
13548
+ ref,
13549
+ role: "status",
13550
+ "aria-label": label || "Loading",
13551
+ className: cn(
13552
+ "inline-flex items-center gap-2",
13553
+ isVertical && "flex-col",
13554
+ isReversed && (isVertical ? "flex-col-reverse" : "flex-row-reverse"),
13555
+ className
13556
+ ),
13557
+ ...rest,
13558
+ children: [
13559
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", style: { width: px, height: px }, children: spinnerEl }),
13560
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-sm leading-[1.45] whitespace-nowrap", labelColor), children: label })
13561
+ ]
13562
+ }
13563
+ );
13564
+ }
13565
+ );
13566
+ Spinner.displayName = "Spinner";
13567
+ function CheckIcon({ className }) {
13568
+ return /* @__PURE__ */ jsxRuntime.jsx(
13569
+ "svg",
13570
+ {
13571
+ className,
13572
+ viewBox: "0 0 24 24",
13573
+ fill: "none",
13574
+ stroke: "currentColor",
13575
+ strokeWidth: 3,
13576
+ strokeLinecap: "round",
13577
+ strokeLinejoin: "round",
13578
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 12l5 5L20 7" })
13579
+ }
13580
+ );
13581
+ }
13582
+ function StepCircle({
13583
+ status,
13584
+ indicator,
13585
+ stepNumber,
13586
+ icon
13587
+ }) {
13588
+ const isCompleted = status === "completed";
13589
+ const isActive = status === "active";
13590
+ const isDisabled = status === "disabled";
13591
+ return /* @__PURE__ */ jsxRuntime.jsx(
13592
+ "div",
13593
+ {
13594
+ className: cn(
13595
+ "shrink-0 flex items-center justify-center rounded-full size-6 border transition-colors",
13596
+ isCompleted && "bg-primary-400 border-primary-400 text-white",
13597
+ isActive && "bg-primary-50 border-primary-400 text-primary-400",
13598
+ !isCompleted && !isActive && !isDisabled && "bg-white dark:bg-grey-50 border-grey-300",
13599
+ isDisabled && "bg-grey-100 border-grey-200 text-grey-300"
13600
+ ),
13601
+ children: isCompleted ? icon ?? /* @__PURE__ */ jsxRuntime.jsx(CheckIcon, { className: "size-3.5" }) : indicator === "dot" ? /* @__PURE__ */ jsxRuntime.jsx(
13602
+ "div",
13603
+ {
13604
+ className: cn(
13605
+ "size-2 rounded-full border",
13606
+ isActive ? "bg-primary-400 border-primary-400" : isDisabled ? "bg-grey-300 border-grey-300" : "bg-grey-400 border-grey-300"
13607
+ )
13608
+ }
13609
+ ) : indicator === "number" ? /* @__PURE__ */ jsxRuntime.jsx(
13610
+ "span",
13611
+ {
13612
+ className: cn(
13613
+ "text-xs font-medium",
13614
+ isActive ? "text-primary-400" : isDisabled ? "text-grey-300" : "text-grey-500"
13615
+ ),
13616
+ children: stepNumber
13617
+ }
13618
+ ) : icon ?? /* @__PURE__ */ jsxRuntime.jsx(
13619
+ "div",
13620
+ {
13621
+ className: cn(
13622
+ "size-2 rounded-full",
13623
+ isActive ? "bg-primary-400" : isDisabled ? "bg-grey-300" : "bg-grey-400"
13624
+ )
13625
+ }
13626
+ )
13627
+ }
13628
+ );
13629
+ }
13630
+ function Connector({
13631
+ orientation,
13632
+ completed
13633
+ }) {
13634
+ return orientation === "horizontal" ? /* @__PURE__ */ jsxRuntime.jsx(
13635
+ "div",
13636
+ {
13637
+ className: cn("flex-1 h-0.5 rounded-full", completed ? "bg-primary-400" : "bg-grey-300")
13638
+ }
13639
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
13640
+ "div",
13641
+ {
13642
+ className: cn(
13643
+ "w-0.5 flex-1 min-h-[20px] ml-[11px] rounded-full",
13644
+ completed ? "bg-primary-400" : "bg-grey-300"
13645
+ )
13646
+ }
13647
+ );
13648
+ }
13649
+ function resolveStatuses(steps, activeStep) {
13650
+ if (activeStep !== void 0) {
13651
+ return steps.map((s, i) => {
13652
+ if (s.status === "disabled") return "disabled";
13653
+ if (i < activeStep) return "completed";
13654
+ if (i === activeStep) return "active";
13655
+ return "incomplete";
13656
+ });
13657
+ }
13658
+ return steps.map((s) => s.status ?? "incomplete");
13659
+ }
13660
+ var Stepper = react.forwardRef(
13661
+ ({ steps, activeStep, orientation = "horizontal", indicator = "dot", className, ...rest }, ref) => {
13662
+ const statuses = resolveStatuses(steps, activeStep);
13663
+ if (orientation === "vertical") {
13664
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn("flex flex-col", className), ...rest, children: steps.map((step, i) => {
13665
+ const status = statuses[i];
13666
+ const isLast = i === steps.length - 1;
13667
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-3", children: [
13668
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center", children: [
13669
+ /* @__PURE__ */ jsxRuntime.jsx(
13670
+ StepCircle,
13671
+ {
13672
+ status,
13673
+ indicator,
13674
+ stepNumber: i + 1,
13675
+ icon: step.icon
13676
+ }
13677
+ ),
13678
+ !isLast && /* @__PURE__ */ jsxRuntime.jsx(Connector, { orientation: "vertical", completed: status === "completed" })
13679
+ ] }),
13680
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col pb-6", children: [
13681
+ /* @__PURE__ */ jsxRuntime.jsx(
13682
+ "span",
13683
+ {
13684
+ className: cn(
13685
+ "text-sm font-medium leading-[1.45]",
13686
+ status === "active" ? "text-grey-900" : status === "disabled" ? "text-grey-300" : "text-grey-600"
13687
+ ),
13688
+ children: step.title
13689
+ }
13690
+ ),
13691
+ step.description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-grey-500 leading-[1.45]", children: step.description })
13692
+ ] })
13693
+ ] }, i);
13694
+ }) });
13695
+ }
13696
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn("flex items-start w-full", className), ...rest, children: steps.map((step, i) => {
13697
+ const status = statuses[i];
13698
+ const isLast = i === steps.length - 1;
13699
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col flex-1 items-center gap-2.5", children: [
13700
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1 w-full", children: [
13701
+ /* @__PURE__ */ jsxRuntime.jsx(
13702
+ Connector,
13703
+ {
13704
+ orientation: "horizontal",
13705
+ completed: i > 0 && statuses[i - 1] === "completed"
13706
+ }
13707
+ ),
13708
+ /* @__PURE__ */ jsxRuntime.jsx(
13709
+ StepCircle,
13710
+ {
13711
+ status,
13712
+ indicator,
13713
+ stepNumber: i + 1,
13714
+ icon: step.icon
13715
+ }
13716
+ ),
13717
+ /* @__PURE__ */ jsxRuntime.jsx(Connector, { orientation: "horizontal", completed: !isLast && status === "completed" })
13718
+ ] }),
13719
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-0.5 text-center w-full", children: [
13720
+ /* @__PURE__ */ jsxRuntime.jsx(
13721
+ "span",
13722
+ {
13723
+ className: cn(
13724
+ "text-xs font-medium leading-[1.45] tracking-tight",
13725
+ status === "active" ? "text-grey-700" : status === "disabled" ? "text-grey-300" : "text-grey-600"
13726
+ ),
13727
+ children: step.title
13728
+ }
13729
+ ),
13730
+ step.description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-grey-500 leading-[1.45] truncate", children: step.description })
13731
+ ] })
13732
+ ] }, i);
13733
+ }) });
13734
+ }
13735
+ );
13736
+ Stepper.displayName = "Stepper";
13737
+ var LinearStepper = react.forwardRef(
13738
+ ({ currentStep, totalSteps, showLabel = true, className, ...rest }, ref) => {
13739
+ const pct = Math.min(100, Math.max(0, currentStep / totalSteps * 100));
13740
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: cn("flex flex-col gap-2 w-full", className), ...rest, children: [
13741
+ showLabel && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm font-semibold leading-[1.45]", children: [
13742
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-grey-900", children: currentStep }),
13743
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-grey-400", children: [
13744
+ " / ",
13745
+ totalSteps,
13746
+ " complete"
13747
+ ] })
13748
+ ] }),
13749
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-grey-200 rounded-full p-1 w-full overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
13750
+ "div",
13751
+ {
13752
+ className: "h-2 bg-primary-400 rounded-[10px] transition-all duration-300",
13753
+ style: { width: `${pct}%` }
13754
+ }
13755
+ ) })
13756
+ ] });
13757
+ }
13758
+ );
13759
+ LinearStepper.displayName = "LinearStepper";
13760
+ var SegmentedStepper = react.forwardRef(
13761
+ ({ currentStep, totalSteps, showLabel = true, className, ...rest }, ref) => {
13762
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: cn("flex flex-col gap-2 w-full", className), ...rest, children: [
13763
+ showLabel && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm font-semibold leading-[1.45]", children: [
13764
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-grey-900", children: currentStep }),
13765
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-grey-400", children: [
13766
+ " / ",
13767
+ totalSteps,
13768
+ " complete"
13769
+ ] })
13770
+ ] }),
13771
+ /* @__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(
13772
+ "div",
13773
+ {
13774
+ className: cn(
13775
+ "flex-1 rounded-[14px] border border-grey-50 transition-colors",
13776
+ i < currentStep ? "bg-primary-400" : "bg-grey-50"
13777
+ )
13778
+ },
13779
+ i
13780
+ )) }) })
13781
+ ] });
13782
+ }
13783
+ );
13784
+ SegmentedStepper.displayName = "SegmentedStepper";
13785
+ var sizeConfig2 = {
13786
+ sm: { track: "h-1", handle: "size-3.5", handleSize: 14, border: "border-[2.333px]" },
13787
+ md: { track: "h-2", handle: "size-4", handleSize: 16, border: "border-[2.667px]" },
13788
+ lg: { track: "h-3", handle: "size-5", handleSize: 20, border: "border-[3.333px]" }
13789
+ };
13790
+ function clamp(val, min, max) {
13791
+ return Math.min(max, Math.max(min, val));
13792
+ }
13793
+ function getPercent(val, min, max) {
13794
+ return (val - min) / (max - min) * 100;
13795
+ }
13796
+ function getValueFromPosition(clientX, rect, min, max, step) {
13797
+ const pct = clamp((clientX - rect.left) / rect.width, 0, 1);
13798
+ const raw = min + pct * (max - min);
13799
+ const stepped = Math.round(raw / step) * step;
13800
+ return clamp(stepped, min, max);
13801
+ }
13802
+ var Slider = react.forwardRef(
13803
+ ({
13804
+ value: controlledValue,
13805
+ onChange,
13806
+ size = "lg",
13807
+ label,
13808
+ metadata,
13809
+ showPercentage = true,
13810
+ min = 0,
13811
+ max = 100,
13812
+ step = 1,
13813
+ disabled = false,
13814
+ className,
13815
+ ...rest
13816
+ }, ref) => {
13817
+ const [uncontrolled, setUncontrolled] = react.useState(0);
13818
+ const val = controlledValue ?? uncontrolled;
13819
+ const trackRef = react.useRef(null);
13820
+ const config = sizeConfig2[size];
13821
+ const pct = getPercent(val, min, max);
13822
+ const metaItems = Array.isArray(metadata) ? metadata : metadata ? [metadata] : [];
13823
+ const updateValue = react.useCallback(
13824
+ (clientX) => {
13825
+ if (disabled || !trackRef.current) return;
13826
+ const rect = trackRef.current.getBoundingClientRect();
13827
+ const v = getValueFromPosition(clientX, rect, min, max, step);
13828
+ if (controlledValue === void 0) setUncontrolled(v);
13829
+ onChange?.(v);
13830
+ },
13831
+ [disabled, min, max, step, controlledValue, onChange]
13832
+ );
13833
+ const handlePointerDown = react.useCallback(
13834
+ (e) => {
13835
+ if (disabled) return;
13836
+ e.preventDefault();
13837
+ e.target.setPointerCapture(e.pointerId);
13838
+ updateValue(e.clientX);
13839
+ },
13840
+ [disabled, updateValue]
13841
+ );
13842
+ const handlePointerMove = react.useCallback(
13843
+ (e) => {
13844
+ if (disabled || !e.buttons) return;
13845
+ updateValue(e.clientX);
13846
+ },
13847
+ [disabled, updateValue]
13848
+ );
13849
+ return /* @__PURE__ */ jsxRuntime.jsxs(
13850
+ "div",
13851
+ {
13852
+ ref,
13853
+ className: cn("flex flex-col gap-2 w-full", disabled && "opacity-50", className),
13854
+ ...rest,
13855
+ children: [
13856
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-grey-900 leading-[1.45]", children: label }),
13857
+ /* @__PURE__ */ jsxRuntime.jsxs(
13858
+ "div",
13859
+ {
13860
+ ref: trackRef,
13861
+ className: cn(
13862
+ "relative w-full rounded-full bg-grey-200 cursor-pointer",
13863
+ config.track,
13864
+ disabled && "cursor-not-allowed"
13865
+ ),
13866
+ onPointerDown: handlePointerDown,
13867
+ onPointerMove: handlePointerMove,
13868
+ role: "slider",
13869
+ "aria-valuenow": val,
13870
+ "aria-valuemin": min,
13871
+ "aria-valuemax": max,
13872
+ tabIndex: disabled ? -1 : 0,
13873
+ children: [
13874
+ /* @__PURE__ */ jsxRuntime.jsx(
13875
+ "div",
13876
+ {
13877
+ className: cn("absolute left-0 top-0 rounded-full bg-primary-400", config.track),
13878
+ style: { width: `${pct}%` }
13879
+ }
13880
+ ),
13881
+ /* @__PURE__ */ jsxRuntime.jsx(
13882
+ "div",
13883
+ {
13884
+ className: cn(
13885
+ "absolute top-1/2 -translate-y-1/2 rounded-full bg-primary-500 border-white border-solid shadow-sm",
13886
+ config.handle,
13887
+ config.border
13888
+ ),
13889
+ style: { left: `${pct}%`, transform: `translate(-50%, -50%)` }
13890
+ }
13891
+ )
13892
+ ]
13893
+ }
13894
+ ),
13895
+ (metaItems.length > 0 || showPercentage) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
13896
+ 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: [
13897
+ i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-grey-400", children: "\u2022" }),
13898
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-grey-500 leading-[1.45]", children: item })
13899
+ ] }, i)) }),
13900
+ showPercentage && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex-1 text-sm font-semibold text-grey-500 text-right leading-[1.45]", children: [
13901
+ Math.round(pct),
13902
+ "%"
13903
+ ] })
13904
+ ] })
13905
+ ]
13906
+ }
13907
+ );
13908
+ }
13909
+ );
13910
+ Slider.displayName = "Slider";
13911
+ var RangeSlider = react.forwardRef(
13912
+ ({
13913
+ value: controlledValue,
13914
+ onChange,
13915
+ size = "lg",
13916
+ label,
13917
+ showLabels = true,
13918
+ min = 0,
13919
+ max = 100,
13920
+ step = 1,
13921
+ disabled = false,
13922
+ className,
13923
+ ...rest
13924
+ }, ref) => {
13925
+ const [uncontrolled, setUncontrolled] = react.useState([25, 75]);
13926
+ const val = controlledValue ?? uncontrolled;
13927
+ const trackRef = react.useRef(null);
13928
+ const dragging = react.useRef(null);
13929
+ const config = sizeConfig2[size];
13930
+ const lowPct = getPercent(val[0], min, max);
13931
+ const highPct = getPercent(val[1], min, max);
13932
+ const update = react.useCallback(
13933
+ (newVal) => {
13934
+ if (controlledValue === void 0) setUncontrolled(newVal);
13935
+ onChange?.(newVal);
13936
+ },
13937
+ [controlledValue, onChange]
13938
+ );
13939
+ const handlePointerDown = react.useCallback(
13940
+ (e) => {
13941
+ if (disabled || !trackRef.current) return;
13942
+ e.preventDefault();
13943
+ e.target.setPointerCapture(e.pointerId);
13944
+ const rect = trackRef.current.getBoundingClientRect();
13945
+ const v = getValueFromPosition(e.clientX, rect, min, max, step);
13946
+ const distLow = Math.abs(v - val[0]);
13947
+ const distHigh = Math.abs(v - val[1]);
13948
+ dragging.current = distLow <= distHigh ? "low" : "high";
13949
+ if (dragging.current === "low") {
13950
+ update([clamp(v, min, val[1]), val[1]]);
13951
+ } else {
13952
+ update([val[0], clamp(v, val[0], max)]);
13953
+ }
13954
+ },
13955
+ [disabled, min, max, step, val, update]
13956
+ );
13957
+ const handlePointerMove = react.useCallback(
13958
+ (e) => {
13959
+ if (disabled || !e.buttons || !trackRef.current || !dragging.current) return;
13960
+ const rect = trackRef.current.getBoundingClientRect();
13961
+ const v = getValueFromPosition(e.clientX, rect, min, max, step);
13962
+ if (dragging.current === "low") {
13963
+ update([clamp(v, min, val[1]), val[1]]);
13964
+ } else {
13965
+ update([val[0], clamp(v, val[0], max)]);
13966
+ }
13967
+ },
13968
+ [disabled, min, max, step, val, update]
13969
+ );
13970
+ const handlePointerUp = react.useCallback(() => {
13971
+ dragging.current = null;
13972
+ }, []);
13973
+ return /* @__PURE__ */ jsxRuntime.jsxs(
13974
+ "div",
13975
+ {
13976
+ ref,
13977
+ className: cn("flex flex-col gap-2 w-full", disabled && "opacity-50", className),
13978
+ ...rest,
13979
+ children: [
13980
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-grey-900 leading-[1.45]", children: label }),
13981
+ /* @__PURE__ */ jsxRuntime.jsxs(
13982
+ "div",
13983
+ {
13984
+ ref: trackRef,
13985
+ className: cn(
13986
+ "relative w-full rounded-full bg-grey-200 cursor-pointer",
13987
+ config.track,
13988
+ disabled && "cursor-not-allowed"
13989
+ ),
13990
+ onPointerDown: handlePointerDown,
13991
+ onPointerMove: handlePointerMove,
13992
+ onPointerUp: handlePointerUp,
13993
+ role: "slider",
13994
+ "aria-valuenow": val[0],
13995
+ "aria-valuemin": min,
13996
+ "aria-valuemax": max,
13997
+ tabIndex: disabled ? -1 : 0,
13998
+ children: [
13999
+ /* @__PURE__ */ jsxRuntime.jsx(
14000
+ "div",
14001
+ {
14002
+ className: cn("absolute top-0 rounded-full bg-primary-400", config.track),
14003
+ style: { left: `${lowPct}%`, width: `${highPct - lowPct}%` }
14004
+ }
14005
+ ),
14006
+ /* @__PURE__ */ jsxRuntime.jsx(
14007
+ "div",
14008
+ {
14009
+ className: cn(
14010
+ "absolute top-1/2 rounded-full bg-primary-500 border-white border-solid shadow-sm z-10",
14011
+ config.handle,
14012
+ config.border
14013
+ ),
14014
+ style: { left: `${lowPct}%`, transform: `translate(-50%, -50%)` }
14015
+ }
14016
+ ),
14017
+ /* @__PURE__ */ jsxRuntime.jsx(
14018
+ "div",
14019
+ {
14020
+ className: cn(
14021
+ "absolute top-1/2 rounded-full bg-primary-500 border-white border-solid shadow-sm z-10",
14022
+ config.handle,
14023
+ config.border
14024
+ ),
14025
+ style: { left: `${highPct}%`, transform: `translate(-50%, -50%)` }
14026
+ }
14027
+ )
14028
+ ]
14029
+ }
14030
+ ),
14031
+ showLabels && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
14032
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-medium text-grey-500 leading-[1.45]", children: [
14033
+ Math.round(getPercent(val[0], min, max)),
14034
+ "%"
14035
+ ] }),
14036
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-semibold text-grey-500 text-right leading-[1.45]", children: [
14037
+ Math.round(getPercent(val[1], min, max)),
14038
+ "%"
14039
+ ] })
14040
+ ] })
14041
+ ]
14042
+ }
14043
+ );
14044
+ }
14045
+ );
14046
+ RangeSlider.displayName = "RangeSlider";
11628
14047
  var SelectContext = react.createContext(null);
11629
14048
  function useSelectContext() {
11630
14049
  const ctx = react.useContext(SelectContext);
@@ -11665,6 +14084,8 @@ var Select = react.forwardRef(
11665
14084
  const [open, setOpen] = react.useState(false);
11666
14085
  const value = controlledValue ?? internalValue;
11667
14086
  const listboxId = react.useId();
14087
+ const labelId = react.useId();
14088
+ const helperId = react.useId();
11668
14089
  const containerRef = react.useRef(null);
11669
14090
  const triggerRef = react.useRef(null);
11670
14091
  const listRef = react.useRef(null);
@@ -11761,7 +14182,7 @@ var Select = react.forwardRef(
11761
14182
  className: cn("relative flex flex-col gap-2 w-full", wrapperClassName),
11762
14183
  ...rest,
11763
14184
  children: [
11764
- label && /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium text-grey-900 leading-[1.45]", children: label }),
14185
+ label && /* @__PURE__ */ jsxRuntime.jsx("label", { id: labelId, className: "text-sm font-medium text-grey-900 leading-[1.45]", children: label }),
11765
14186
  /* @__PURE__ */ jsxRuntime.jsxs(
11766
14187
  "button",
11767
14188
  {
@@ -11771,6 +14192,8 @@ var Select = react.forwardRef(
11771
14192
  "aria-expanded": open,
11772
14193
  "aria-haspopup": "listbox",
11773
14194
  "aria-controls": listboxId,
14195
+ "aria-labelledby": label ? labelId : void 0,
14196
+ "aria-describedby": helperText ? helperId : void 0,
11774
14197
  disabled,
11775
14198
  onClick: () => !disabled && setOpen(!open),
11776
14199
  className: cn(
@@ -11797,6 +14220,7 @@ var Select = react.forwardRef(
11797
14220
  {
11798
14221
  name: "chevron-down",
11799
14222
  size: "md",
14223
+ "aria-hidden": "true",
11800
14224
  className: cn(
11801
14225
  "shrink-0 transition-transform",
11802
14226
  open && "rotate-180",
@@ -11807,7 +14231,7 @@ var Select = react.forwardRef(
11807
14231
  ]
11808
14232
  }
11809
14233
  ),
11810
- helperText && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-grey-500 leading-[1.45]", children: helperText }),
14234
+ helperText && /* @__PURE__ */ jsxRuntime.jsx("p", { id: helperId, className: "text-sm text-grey-500 leading-[1.45]", children: helperText }),
11811
14235
  open && /* @__PURE__ */ jsxRuntime.jsx(SelectContext.Provider, { value: { value, onSelect, open }, children: /* @__PURE__ */ jsxRuntime.jsx(
11812
14236
  "div",
11813
14237
  {
@@ -11911,7 +14335,7 @@ var ActivityItem = react.forwardRef(
11911
14335
  }, ref) => {
11912
14336
  const hasConnectorAbove = connector === "middle" || connector === "last";
11913
14337
  const hasConnectorBelow = connector === "top" || connector === "middle";
11914
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: cn("flex gap-3 items-start", className), ...rest, children: [
14338
+ return /* @__PURE__ */ jsxRuntime.jsxs("article", { ref, className: cn("flex gap-3 items-start", className), ...rest, children: [
11915
14339
  /* @__PURE__ */ jsxRuntime.jsxs(
11916
14340
  "div",
11917
14341
  {
@@ -11920,9 +14344,9 @@ var ActivityItem = react.forwardRef(
11920
14344
  (connector === "last" || !connector) && "justify-start"
11921
14345
  ),
11922
14346
  children: [
11923
- hasConnectorAbove && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-2 w-px bg-grey-100" }),
14347
+ hasConnectorAbove && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-2 w-px bg-grey-100", "aria-hidden": "true" }),
11924
14348
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 size-8", children: avatar }),
11925
- hasConnectorBelow && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 w-px bg-grey-100" })
14349
+ hasConnectorBelow && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 w-px bg-grey-100", "aria-hidden": "true" })
11926
14350
  ]
11927
14351
  }
11928
14352
  ),
@@ -11939,7 +14363,8 @@ var ActivityItem = react.forwardRef(
11939
14363
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1 w-full", children: [
11940
14364
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between w-full", children: [
11941
14365
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-1 items-start gap-1 min-w-0", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-body-sm leading-5 text-grey-600", children: text }) }),
11942
- unread && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-2 rounded-full bg-[#04802E] border-[1.5px] border-white" })
14366
+ unread && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-2 rounded-full bg-[#04802E] border-[1.5px] border-white", "aria-hidden": "true" }),
14367
+ unread && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Unread" })
11943
14368
  ] }),
11944
14369
  (date || time || link || badge) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-1 w-full", children: [
11945
14370
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-1 items-start min-w-0", children: [
@@ -12282,18 +14707,25 @@ function useRaydenRadio({
12282
14707
  };
12283
14708
  }
12284
14709
 
14710
+ exports.Accordion = Accordion;
14711
+ exports.AccordionContent = AccordionContent;
14712
+ exports.AccordionItem = AccordionItem;
14713
+ exports.AccordionTrigger = AccordionTrigger;
12285
14714
  exports.ActivityContent = ActivityContent;
12286
14715
  exports.ActivityItem = ActivityItem;
12287
14716
  exports.Alert = Alert;
12288
14717
  exports.Avatar = Avatar;
12289
14718
  exports.AvatarGroup = AvatarGroup;
12290
14719
  exports.Badge = Badge;
14720
+ exports.Banner = Banner;
12291
14721
  exports.Breadcrumb = Breadcrumb;
12292
14722
  exports.Button = Button;
12293
14723
  exports.ButtonGroup = ButtonGroup;
12294
14724
  exports.ButtonGroupItem = ButtonGroupItem;
12295
14725
  exports.Checkbox = Checkbox;
12296
14726
  exports.Chip = Chip;
14727
+ exports.Counter = Counter;
14728
+ exports.DatePicker = DatePicker;
12297
14729
  exports.Divider = Divider;
12298
14730
  exports.DropdownMenu = DropdownMenu;
12299
14731
  exports.DropdownMenuContent = DropdownMenuContent;
@@ -12308,11 +14740,17 @@ exports.FileUploadDropZone = FileUploadDropZone;
12308
14740
  exports.FileUploadItem = FileUploadItem;
12309
14741
  exports.Icon = Icon;
12310
14742
  exports.Input = Input;
14743
+ exports.LinearStepper = LinearStepper;
12311
14744
  exports.MetricsCard = MetricsCard;
14745
+ exports.Modal = Modal;
14746
+ exports.NumberCounter = NumberCounter;
12312
14747
  exports.Pagination = Pagination;
12313
14748
  exports.ProgressBar = ProgressBar;
12314
14749
  exports.ProgressCircle = ProgressCircle;
12315
14750
  exports.Radio = Radio;
14751
+ exports.RangeSlider = RangeSlider;
14752
+ exports.RaydenChart = RaydenChart;
14753
+ exports.SegmentedStepper = SegmentedStepper;
12316
14754
  exports.Select = Select;
12317
14755
  exports.SelectOption = SelectOption;
12318
14756
  exports.SidebarMenu = SidebarMenu;
@@ -12320,6 +14758,9 @@ exports.SidebarMenuItem = SidebarMenuItem;
12320
14758
  exports.SidebarMenuSection = SidebarMenuSection;
12321
14759
  exports.SidebarMenuSub = SidebarMenuSub;
12322
14760
  exports.SidebarMenuSubItem = SidebarMenuSubItem;
14761
+ exports.Slider = Slider;
14762
+ exports.Spinner = Spinner;
14763
+ exports.Stepper = Stepper;
12323
14764
  exports.Tab = Tab;
12324
14765
  exports.Table = Table;
12325
14766
  exports.TableBody = TableBody;
@@ -12330,8 +14771,12 @@ exports.TableRow = TableRow;
12330
14771
  exports.Tabs = Tabs;
12331
14772
  exports.ThemeProvider = ThemeProvider;
12332
14773
  exports.Toggle = Toggle;
12333
- exports.Tooltip = Tooltip;
14774
+ exports.Tooltip = Tooltip2;
14775
+ exports.chartColors = chartColors;
14776
+ exports.chartFont = chartFont;
12334
14777
  exports.cn = cn;
14778
+ exports.createGradientFill = createGradientFill;
14779
+ exports.hexToRgba = hexToRgba;
12335
14780
  exports.illustrationNames = illustrationNames;
12336
14781
  exports.useRaydenCheckbox = useRaydenCheckbox;
12337
14782
  exports.useRaydenInput = useRaydenInput;