@rpg-engine/long-bow 0.8.31 → 0.8.32

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.
Files changed (24) hide show
  1. package/dist/components/InformationCenter/sections/bestiary/BestiaryAdvancedFilters.d.ts +13 -0
  2. package/dist/components/InformationCenter/sections/bestiary/InformationCenterBestiarySection.d.ts +2 -2
  3. package/dist/components/InformationCenter/sections/items/ItemsAdvancedFilters.d.ts +11 -0
  4. package/dist/components/shared/AdvancedFilters/AdvancedFilters.d.ts +23 -0
  5. package/dist/components/shared/PaginatedContent/PaginatedContent.d.ts +1 -0
  6. package/dist/components/shared/SearchBar/SearchBar.d.ts +1 -0
  7. package/dist/components/shared/SearchHeader/SearchHeader.d.ts +1 -0
  8. package/dist/hooks/useTooltipPosition.d.ts +15 -0
  9. package/dist/long-bow.cjs.development.js +467 -163
  10. package/dist/long-bow.cjs.development.js.map +1 -1
  11. package/dist/long-bow.cjs.production.min.js +1 -1
  12. package/dist/long-bow.cjs.production.min.js.map +1 -1
  13. package/dist/long-bow.esm.js +468 -164
  14. package/dist/long-bow.esm.js.map +1 -1
  15. package/package.json +1 -1
  16. package/src/components/InformationCenter/sections/bestiary/BestiaryAdvancedFilters.tsx +95 -0
  17. package/src/components/InformationCenter/sections/bestiary/InformationCenterBestiarySection.tsx +103 -61
  18. package/src/components/InformationCenter/sections/items/InformationCenterItemsSection.tsx +62 -69
  19. package/src/components/InformationCenter/sections/items/ItemsAdvancedFilters.tsx +80 -0
  20. package/src/components/shared/AdvancedFilters/AdvancedFilters.tsx +279 -0
  21. package/src/components/shared/PaginatedContent/PaginatedContent.tsx +1 -0
  22. package/src/components/shared/SearchBar/SearchBar.tsx +15 -5
  23. package/src/components/shared/SearchHeader/SearchHeader.tsx +2 -0
  24. package/src/hooks/useTooltipPosition.ts +73 -0
@@ -21,8 +21,8 @@ var ReactDOM = require('react-dom');
21
21
  var ReactDOM__default = _interopDefault(ReactDOM);
22
22
  var lodash = require('lodash');
23
23
  var mobxReactLite = require('mobx-react-lite');
24
- var reactColorful = require('react-colorful');
25
24
  var ai = require('react-icons/ai');
25
+ var reactColorful = require('react-colorful');
26
26
  require('rpgui/rpgui.css');
27
27
  require('rpgui/rpgui.min.js');
28
28
  var capitalize = _interopDefault(require('lodash/capitalize'));
@@ -30832,6 +30832,59 @@ var ContentWrapper = /*#__PURE__*/styled__default.div.withConfig({
30832
30832
  componentId: "sc-ldufv0-3"
30833
30833
  })([""]);
30834
30834
 
30835
+ var TOOLTIP_WIDTH = 300;
30836
+ var TOOLTIP_OFFSET = 10;
30837
+ var MIN_VISIBLE_HEIGHT = 100;
30838
+ var useTooltipPosition = function useTooltipPosition() {
30839
+ var _useState = React.useState(null),
30840
+ tooltipState = _useState[0],
30841
+ setTooltipState = _useState[1];
30842
+ var calculateTooltipPosition = function calculateTooltipPosition(rect) {
30843
+ var viewportWidth = window.innerWidth;
30844
+ var viewportHeight = window.innerHeight;
30845
+ // Try to position to the right first
30846
+ var x = rect.right + TOOLTIP_OFFSET;
30847
+ // If it would overflow right, try positioning to the left
30848
+ if (x + TOOLTIP_WIDTH > viewportWidth - TOOLTIP_OFFSET) {
30849
+ x = rect.left - TOOLTIP_WIDTH - TOOLTIP_OFFSET;
30850
+ }
30851
+ // If left positioning would go off screen, position relative to viewport
30852
+ if (x < TOOLTIP_OFFSET) {
30853
+ x = TOOLTIP_OFFSET;
30854
+ }
30855
+ // Position vertically aligned with the top of the element
30856
+ var y = rect.top;
30857
+ // Ensure tooltip doesn't go above viewport
30858
+ if (y < TOOLTIP_OFFSET) {
30859
+ y = TOOLTIP_OFFSET;
30860
+ }
30861
+ // Ensure some part of tooltip is always visible if element is near bottom
30862
+ if (y > viewportHeight - MIN_VISIBLE_HEIGHT) {
30863
+ y = viewportHeight - MIN_VISIBLE_HEIGHT;
30864
+ }
30865
+ return {
30866
+ x: x,
30867
+ y: y
30868
+ };
30869
+ };
30870
+ var handleMouseEnter = function handleMouseEnter(item, event) {
30871
+ var rect = event.currentTarget.getBoundingClientRect();
30872
+ setTooltipState({
30873
+ item: item,
30874
+ position: calculateTooltipPosition(rect)
30875
+ });
30876
+ };
30877
+ var handleMouseLeave = function handleMouseLeave() {
30878
+ setTooltipState(null);
30879
+ };
30880
+ return {
30881
+ tooltipState: tooltipState,
30882
+ handleMouseEnter: handleMouseEnter,
30883
+ handleMouseLeave: handleMouseLeave,
30884
+ TOOLTIP_WIDTH: TOOLTIP_WIDTH
30885
+ };
30886
+ };
30887
+
30835
30888
  var usePagination = function usePagination(_ref) {
30836
30889
  var items = _ref.items,
30837
30890
  itemsPerPage = _ref.itemsPerPage,
@@ -30899,7 +30952,9 @@ var SearchBar = function SearchBar(_ref) {
30899
30952
  var value = _ref.value,
30900
30953
  _onChange = _ref.onChange,
30901
30954
  placeholder = _ref.placeholder,
30902
- className = _ref.className;
30955
+ className = _ref.className,
30956
+ rightElement = _ref.rightElement;
30957
+ var hasRightElement = Boolean(rightElement);
30903
30958
  return React__default.createElement(Container$m, {
30904
30959
  className: className
30905
30960
  }, React__default.createElement(Input$1, {
@@ -30909,8 +30964,9 @@ var SearchBar = function SearchBar(_ref) {
30909
30964
  return _onChange(e.target.value);
30910
30965
  },
30911
30966
  placeholder: placeholder,
30912
- className: "rpgui-input"
30913
- }), React__default.createElement(IconContainer, null, React__default.createElement(SearchIcon, null)));
30967
+ className: "rpgui-input",
30968
+ "$hasRightElement": hasRightElement
30969
+ }), React__default.createElement(IconContainer, null, React__default.createElement(SearchIcon, null), rightElement));
30914
30970
  };
30915
30971
  var Container$m = /*#__PURE__*/styled__default.div.withConfig({
30916
30972
  displayName: "SearchBar__Container",
@@ -30919,11 +30975,13 @@ var Container$m = /*#__PURE__*/styled__default.div.withConfig({
30919
30975
  var Input$1 = /*#__PURE__*/styled__default.input.withConfig({
30920
30976
  displayName: "SearchBar__Input",
30921
30977
  componentId: "sc-13n8z02-1"
30922
- })(["width:100%;padding-right:2.5rem !important;background:rgba(0,0,0,0.2) !important;border:2px solid #f59e0b !important;box-shadow:0 0 10px rgba(245,158,11,0.3);color:#ffffff !important;font-family:'Press Start 2P',cursive !important;font-size:0.875rem !important;&::placeholder{color:rgba(255,255,255,0.5) !important;}"]);
30978
+ })(["width:100%;padding-right:", " !important;background:rgba(0,0,0,0.2) !important;border:2px solid #f59e0b !important;box-shadow:0 0 10px rgba(245,158,11,0.3);color:#ffffff !important;font-family:'Press Start 2P',cursive !important;font-size:0.875rem !important;&::placeholder{color:rgba(255,255,255,0.5) !important;}"], function (props) {
30979
+ return props.$hasRightElement ? '6rem' : '2.5rem';
30980
+ });
30923
30981
  var IconContainer = /*#__PURE__*/styled__default.div.withConfig({
30924
30982
  displayName: "SearchBar__IconContainer",
30925
30983
  componentId: "sc-13n8z02-2"
30926
- })(["position:absolute;right:0.75rem;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:24px;height:24px;pointer-events:none;"]);
30984
+ })(["position:absolute;right:0.75rem;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:0.5rem;pointer-events:none;z-index:1;> *{pointer-events:auto;}"]);
30927
30985
  var SearchIcon = /*#__PURE__*/styled__default(fa.FaSearch).withConfig({
30928
30986
  displayName: "SearchBar__SearchIcon",
30929
30987
  componentId: "sc-13n8z02-3"
@@ -30939,7 +30997,8 @@ var SearchHeader = function SearchHeader(_ref) {
30939
30997
  }, React__default.createElement(HeaderContent, null, searchOptions && React__default.createElement(SearchContainer$2, null, React__default.createElement(StyledSearchBar, {
30940
30998
  value: searchOptions.value,
30941
30999
  onChange: searchOptions.onChange,
30942
- placeholder: searchOptions.placeholder || 'Search...'
31000
+ placeholder: searchOptions.placeholder || 'Search...',
31001
+ rightElement: searchOptions.rightElement
30943
31002
  })), filterOptions && React__default.createElement(FilterContainer, null, React__default.createElement(StyledDropdown, {
30944
31003
  options: filterOptions.options,
30945
31004
  onChange: filterOptions.onOptionChange,
@@ -31407,7 +31466,180 @@ var InformationCenterItemTooltip = function InformationCenterItemTooltip(_ref) {
31407
31466
  }, item.rarity)))));
31408
31467
  };
31409
31468
 
31410
- var TOOLTIP_OFFSET = 200;
31469
+ var AdvancedFilters = function AdvancedFilters(_ref) {
31470
+ var isOpen = _ref.isOpen,
31471
+ onToggle = _ref.onToggle,
31472
+ sections = _ref.sections,
31473
+ onClearAll = _ref.onClearAll,
31474
+ hasActiveFilters = _ref.hasActiveFilters;
31475
+ var renderFilterSection = function renderFilterSection(section) {
31476
+ switch (section.type) {
31477
+ case 'range':
31478
+ var rangeValue = section.value;
31479
+ return React__default.createElement(FilterSection, {
31480
+ key: section.key
31481
+ }, React__default.createElement(Label$1, null, section.label), React__default.createElement(RangeInputs, null, React__default.createElement(Input, {
31482
+ type: "number",
31483
+ min: 0,
31484
+ placeholder: "Min",
31485
+ value: rangeValue[0] || '',
31486
+ onChange: function onChange(e) {
31487
+ return section.onChange([e.target.value ? Number(e.target.value) : undefined, rangeValue[1]]);
31488
+ }
31489
+ }), React__default.createElement(ai.AiFillCaretRight, null), React__default.createElement(Input, {
31490
+ type: "number",
31491
+ min: 0,
31492
+ placeholder: "Max",
31493
+ value: rangeValue[1] || '',
31494
+ onChange: function onChange(e) {
31495
+ return section.onChange([rangeValue[0], e.target.value ? Number(e.target.value) : undefined]);
31496
+ }
31497
+ })));
31498
+ case 'dropdown':
31499
+ return React__default.createElement(FilterSection, {
31500
+ key: section.key
31501
+ }, React__default.createElement(Label$1, null, section.label), React__default.createElement(Dropdown, {
31502
+ options: section.options || [],
31503
+ onChange: section.onChange,
31504
+ width: "100%"
31505
+ }));
31506
+ default:
31507
+ return null;
31508
+ }
31509
+ };
31510
+ return React__default.createElement(Container$q, null, React__default.createElement(FilterButton, {
31511
+ onClick: onToggle,
31512
+ "$hasActiveFilters": hasActiveFilters
31513
+ }, hasActiveFilters ? React__default.createElement(ai.AiFillFilter, {
31514
+ size: 20
31515
+ }) : React__default.createElement(ai.AiOutlineFilter, {
31516
+ size: 20
31517
+ }), React__default.createElement(FilterCount, {
31518
+ "$visible": hasActiveFilters
31519
+ }, sections.filter(function (section) {
31520
+ if (section.type === 'range') {
31521
+ var rangeValue = section.value;
31522
+ return rangeValue[0] !== undefined || rangeValue[1] !== undefined;
31523
+ }
31524
+ return section.value !== 'all';
31525
+ }).length)), isOpen && React__default.createElement(FiltersPanel, null, React__default.createElement(FilterHeader, null, React__default.createElement(FilterTitle, null, "Advanced Filters")), sections.map(renderFilterSection), hasActiveFilters && React__default.createElement(ClearFiltersButton, {
31526
+ onClick: onClearAll
31527
+ }, "Clear All Filters")));
31528
+ };
31529
+ var Container$q = /*#__PURE__*/styled__default.div.withConfig({
31530
+ displayName: "AdvancedFilters__Container",
31531
+ componentId: "sc-1xj6ldr-0"
31532
+ })(["position:relative;margin-left:0.5rem;"]);
31533
+ var FilterButton = /*#__PURE__*/styled__default.button.withConfig({
31534
+ displayName: "AdvancedFilters__FilterButton",
31535
+ componentId: "sc-1xj6ldr-1"
31536
+ })(["position:relative;display:flex;align-items:center;justify-content:center;width:36px;height:36px;background:transparent;border:none;color:", ";cursor:pointer;transition:all 0.2s;&:hover{color:", ";}"], function (_ref2) {
31537
+ var $hasActiveFilters = _ref2.$hasActiveFilters;
31538
+ return $hasActiveFilters ? '#ffd700' : 'rgba(255, 255, 255, 0.8)';
31539
+ }, function (_ref3) {
31540
+ var $hasActiveFilters = _ref3.$hasActiveFilters;
31541
+ return $hasActiveFilters ? '#ffd700' : '#ffffff';
31542
+ });
31543
+ var FilterCount = /*#__PURE__*/styled__default.div.withConfig({
31544
+ displayName: "AdvancedFilters__FilterCount",
31545
+ componentId: "sc-1xj6ldr-2"
31546
+ })(["position:absolute;top:-4px;right:-4px;background:#ffd700;color:#000;border-radius:50%;width:16px;height:16px;font-size:10px;font-weight:bold;display:flex;align-items:center;justify-content:center;opacity:", ";transform:scale(", ");transition:all 0.2s;"], function (_ref4) {
31547
+ var $visible = _ref4.$visible;
31548
+ return $visible ? 1 : 0;
31549
+ }, function (_ref5) {
31550
+ var $visible = _ref5.$visible;
31551
+ return $visible ? 1 : 0.5;
31552
+ });
31553
+ var FiltersPanel = /*#__PURE__*/styled__default.div.withConfig({
31554
+ displayName: "AdvancedFilters__FiltersPanel",
31555
+ componentId: "sc-1xj6ldr-3"
31556
+ })(["position:absolute;top:calc(100% + 0.75rem);right:-8px;background:#1a1a1a;border:1px solid #333;border-radius:6px;padding:1rem;z-index:1000;min-width:280px;display:flex;flex-direction:column;gap:1rem;box-shadow:0 4px 12px rgba(0,0,0,0.3);&:before{content:'';position:absolute;top:-6px;right:16px;width:12px;height:12px;background:#1a1a1a;border-left:1px solid #333;border-top:1px solid #333;transform:rotate(45deg);}"]);
31557
+ var FilterHeader = /*#__PURE__*/styled__default.div.withConfig({
31558
+ displayName: "AdvancedFilters__FilterHeader",
31559
+ componentId: "sc-1xj6ldr-4"
31560
+ })(["display:flex;align-items:center;justify-content:space-between;padding-bottom:0.75rem;margin-bottom:0.5rem;border-bottom:1px solid #333;"]);
31561
+ var FilterTitle = /*#__PURE__*/styled__default.div.withConfig({
31562
+ displayName: "AdvancedFilters__FilterTitle",
31563
+ componentId: "sc-1xj6ldr-5"
31564
+ })(["font-weight:600;color:#ffd700;font-size:0.875rem;"]);
31565
+ var FilterSection = /*#__PURE__*/styled__default.div.withConfig({
31566
+ displayName: "AdvancedFilters__FilterSection",
31567
+ componentId: "sc-1xj6ldr-6"
31568
+ })(["display:flex;flex-direction:column;gap:0.5rem;"]);
31569
+ var Label$1 = /*#__PURE__*/styled__default.div.withConfig({
31570
+ displayName: "AdvancedFilters__Label",
31571
+ componentId: "sc-1xj6ldr-7"
31572
+ })(["color:#999;font-size:0.75rem;text-transform:uppercase;letter-spacing:0.05em;"]);
31573
+ var RangeInputs = /*#__PURE__*/styled__default.div.withConfig({
31574
+ displayName: "AdvancedFilters__RangeInputs",
31575
+ componentId: "sc-1xj6ldr-8"
31576
+ })(["display:flex;align-items:center;gap:0.5rem;input{width:80px;background:#262626 !important;border:1px solid #333 !important;color:#fff !important;}svg{color:#666;font-size:0.875rem;}"]);
31577
+ var ClearFiltersButton = /*#__PURE__*/styled__default.button.withConfig({
31578
+ displayName: "AdvancedFilters__ClearFiltersButton",
31579
+ componentId: "sc-1xj6ldr-9"
31580
+ })(["width:100%;background:transparent;color:#666;border:none;padding:0.75rem 0;margin-top:0.5rem;cursor:pointer;font-size:0.75rem;transition:all 0.2s;border-top:1px solid #333;text-transform:uppercase;letter-spacing:0.05em;&:hover{color:#ffd700;}"]);
31581
+
31582
+ var ItemsAdvancedFilters = function ItemsAdvancedFilters(_ref) {
31583
+ var isOpen = _ref.isOpen,
31584
+ onToggle = _ref.onToggle,
31585
+ onTierChange = _ref.onTierChange,
31586
+ onTypeChange = _ref.onTypeChange,
31587
+ selectedTier = _ref.selectedTier,
31588
+ selectedType = _ref.selectedType;
31589
+ var tierOptions = [{
31590
+ id: 0,
31591
+ value: 'all',
31592
+ option: 'All Tiers'
31593
+ }].concat(Array.from({
31594
+ length: 5
31595
+ }, function (_, i) {
31596
+ return {
31597
+ id: i + 1,
31598
+ value: String(i + 1),
31599
+ option: "Tier " + (i + 1)
31600
+ };
31601
+ }));
31602
+ var typeOptions = [{
31603
+ id: 0,
31604
+ value: 'all',
31605
+ option: 'All Types'
31606
+ }].concat(Object.entries(shared.ItemType).map(function (_ref2, index) {
31607
+ var value = _ref2[1];
31608
+ return {
31609
+ id: index + 1,
31610
+ value: value,
31611
+ option: formatItemType(value)
31612
+ };
31613
+ }));
31614
+ var hasActiveFilters = selectedTier !== 'all' || selectedType !== 'all';
31615
+ var handleClearFilters = function handleClearFilters() {
31616
+ onTierChange('all');
31617
+ onTypeChange('all');
31618
+ };
31619
+ var sections = [{
31620
+ type: 'dropdown',
31621
+ label: 'Tier',
31622
+ key: 'tier',
31623
+ options: tierOptions,
31624
+ value: selectedTier,
31625
+ onChange: onTierChange
31626
+ }, {
31627
+ type: 'dropdown',
31628
+ label: 'Item Type',
31629
+ key: 'type',
31630
+ options: typeOptions,
31631
+ value: selectedType,
31632
+ onChange: onTypeChange
31633
+ }];
31634
+ return React__default.createElement(AdvancedFilters, {
31635
+ isOpen: isOpen,
31636
+ onToggle: onToggle,
31637
+ sections: sections,
31638
+ onClearAll: handleClearFilters,
31639
+ hasActiveFilters: hasActiveFilters
31640
+ });
31641
+ };
31642
+
31411
31643
  var formatItemType = function formatItemType(type) {
31412
31644
  var words = type.split(/(?=[A-Z])/);
31413
31645
  if (words.length === 1) {
@@ -31434,32 +31666,28 @@ var InformationCenterItemsSection = function InformationCenterItemsSection(_ref)
31434
31666
  var _useState2 = React.useState('all'),
31435
31667
  selectedItemCategory = _useState2[0],
31436
31668
  setSelectedItemCategory = _useState2[1];
31437
- var _useState3 = React.useState(null),
31438
- hoveredItem = _useState3[0],
31439
- setHoveredItem = _useState3[1];
31440
- var _useState4 = React.useState({
31441
- x: 0,
31442
- y: 0
31443
- }),
31444
- tooltipPosition = _useState4[0],
31445
- setTooltipPosition = _useState4[1];
31669
+ var _useState3 = React.useState('all'),
31670
+ selectedTier = _useState3[0],
31671
+ setSelectedTier = _useState3[1];
31672
+ var _useState4 = React.useState(false),
31673
+ isAdvancedFiltersOpen = _useState4[0],
31674
+ setIsAdvancedFiltersOpen = _useState4[1];
31446
31675
  var _useState5 = React.useState(null),
31447
31676
  selectedItem = _useState5[0],
31448
31677
  setSelectedItem = _useState5[1];
31449
- var itemCategoryOptions = [{
31450
- id: 0,
31451
- value: 'all',
31452
- option: 'All Items'
31453
- }].concat(Object.values(shared.ItemType).map(function (type, index) {
31454
- return {
31455
- id: index + 1,
31456
- value: type,
31457
- option: formatItemType(type)
31458
- };
31459
- }));
31460
- var filteredItems = items.filter(function (item) {
31461
- return (selectedItemCategory === 'all' || item.type === selectedItemCategory) && item.name.toLowerCase().includes(searchQuery.toLowerCase());
31462
- });
31678
+ var _useTooltipPosition = useTooltipPosition(),
31679
+ tooltipState = _useTooltipPosition.tooltipState,
31680
+ handleMouseEnter = _useTooltipPosition.handleMouseEnter,
31681
+ handleMouseLeave = _useTooltipPosition.handleMouseLeave,
31682
+ TOOLTIP_WIDTH = _useTooltipPosition.TOOLTIP_WIDTH;
31683
+ var filteredItems = React.useMemo(function () {
31684
+ return items.filter(function (item) {
31685
+ var matchesSearch = item.name.toLowerCase().includes(searchQuery.toLowerCase());
31686
+ var matchesCategory = selectedItemCategory === 'all' || item.type === selectedItemCategory;
31687
+ var matchesTier = selectedTier === 'all' || String(item.tier) === selectedTier;
31688
+ return matchesSearch && matchesCategory && matchesTier;
31689
+ });
31690
+ }, [items, searchQuery, selectedItemCategory, selectedTier]);
31463
31691
  var getDroppedByNPCs = function getDroppedByNPCs(itemId, npcs) {
31464
31692
  return npcs.filter(function (npc) {
31465
31693
  var _npc$loots;
@@ -31468,35 +31696,12 @@ var InformationCenterItemsSection = function InformationCenterItemsSection(_ref)
31468
31696
  });
31469
31697
  }) || [];
31470
31698
  };
31471
- var handleMouseEnter = function handleMouseEnter(e, item) {
31472
- if (!isMobile) {
31473
- setTooltipPosition({
31474
- x: e.clientX + TOOLTIP_OFFSET,
31475
- y: e.clientY
31476
- });
31477
- setHoveredItem(item);
31478
- }
31479
- };
31480
- var handleMouseMove = function handleMouseMove(e) {
31481
- if (!isMobile && hoveredItem) {
31482
- setTooltipPosition({
31483
- x: e.clientX + TOOLTIP_OFFSET,
31484
- y: e.clientY
31485
- });
31486
- }
31487
- };
31488
- var handleMouseLeave = function handleMouseLeave() {
31489
- if (!isMobile) {
31490
- setHoveredItem(null);
31491
- }
31492
- };
31493
31699
  var handleTouchStart = function handleTouchStart(e, item) {
31494
31700
  e.preventDefault();
31495
31701
  setSelectedItem(item);
31496
31702
  };
31497
31703
  var handleItemClick = function handleItemClick(item) {
31498
31704
  setSelectedItem(item);
31499
- setHoveredItem(null);
31500
31705
  };
31501
31706
  var handleSearchChange = function handleSearchChange(newQuery) {
31502
31707
  setSearchQuery(newQuery);
@@ -31512,9 +31717,8 @@ var InformationCenterItemsSection = function InformationCenterItemsSection(_ref)
31512
31717
  atlasJSON: itemsAtlasJSON,
31513
31718
  atlasIMG: itemsAtlasIMG,
31514
31719
  onMouseEnter: function onMouseEnter(e) {
31515
- return handleMouseEnter(e, item);
31720
+ return handleMouseEnter(item, e);
31516
31721
  },
31517
- onMouseMove: handleMouseMove,
31518
31722
  onMouseLeave: handleMouseLeave,
31519
31723
  onTouchStart: function onTouchStart(e) {
31520
31724
  return handleTouchStart(e, item);
@@ -31524,32 +31728,40 @@ var InformationCenterItemsSection = function InformationCenterItemsSection(_ref)
31524
31728
  }
31525
31729
  });
31526
31730
  };
31731
+ var SearchBarRightElement = React__default.createElement(SearchBarActions, null, React__default.createElement(ItemsAdvancedFilters, {
31732
+ isOpen: isAdvancedFiltersOpen,
31733
+ onToggle: function onToggle() {
31734
+ return setIsAdvancedFiltersOpen(!isAdvancedFiltersOpen);
31735
+ },
31736
+ onTierChange: setSelectedTier,
31737
+ onTypeChange: setSelectedItemCategory,
31738
+ selectedTier: selectedTier,
31739
+ selectedType: selectedItemCategory
31740
+ }));
31527
31741
  return React__default.createElement(React__default.Fragment, null, React__default.createElement(PaginatedContent, {
31528
31742
  items: filteredItems,
31529
31743
  renderItem: renderItem,
31530
31744
  emptyMessage: "No items found",
31531
- filterOptions: {
31532
- options: itemCategoryOptions,
31533
- selectedOption: selectedItemCategory,
31534
- onOptionChange: setSelectedItemCategory
31535
- },
31536
31745
  searchOptions: {
31537
31746
  value: searchQuery,
31538
31747
  onChange: handleSearchChange,
31539
- placeholder: 'Search items...'
31748
+ placeholder: 'Search items...',
31749
+ rightElement: SearchBarRightElement
31540
31750
  },
31541
- dependencies: [selectedItemCategory],
31751
+ dependencies: [selectedItemCategory, selectedTier],
31542
31752
  tabId: tabId,
31543
31753
  layout: "grid",
31544
31754
  itemHeight: "180px"
31545
- }), !isMobile && hoveredItem && React__default.createElement(TooltipWrapper, {
31755
+ }), !isMobile && tooltipState && tooltipState.item && React__default.createElement(Portal, null, React__default.createElement(TooltipWrapper, {
31756
+ width: TOOLTIP_WIDTH,
31546
31757
  style: {
31547
- top: tooltipPosition.y,
31548
- left: tooltipPosition.x
31758
+ position: 'fixed',
31759
+ left: tooltipState.position.x + "px",
31760
+ top: tooltipState.position.y + "px"
31549
31761
  }
31550
31762
  }, React__default.createElement(InformationCenterItemTooltip, {
31551
- item: hoveredItem
31552
- })), selectedItem && React__default.createElement(Portal, null, React__default.createElement(InformationCenterItemDetails, {
31763
+ item: tooltipState.item
31764
+ }))), selectedItem && React__default.createElement(Portal, null, React__default.createElement(InformationCenterItemDetails, {
31553
31765
  item: selectedItem,
31554
31766
  itemsAtlasJSON: itemsAtlasJSON,
31555
31767
  itemsAtlasIMG: itemsAtlasIMG,
@@ -31562,7 +31774,82 @@ var InformationCenterItemsSection = function InformationCenterItemsSection(_ref)
31562
31774
  var TooltipWrapper = /*#__PURE__*/styled__default.div.withConfig({
31563
31775
  displayName: "InformationCenterItemsSection__TooltipWrapper",
31564
31776
  componentId: "sc-1wmpapt-0"
31565
- })(["position:fixed;z-index:1000;pointer-events:none;transition:transform 0.1s ease;"]);
31777
+ })(["z-index:1000;pointer-events:none;width:", ";"], function (props) {
31778
+ return props.width + "px";
31779
+ });
31780
+ var SearchBarActions = /*#__PURE__*/styled__default.div.withConfig({
31781
+ displayName: "InformationCenterItemsSection__SearchBarActions",
31782
+ componentId: "sc-1wmpapt-1"
31783
+ })(["display:flex;align-items:center;gap:0.5rem;"]);
31784
+
31785
+ var BestiaryAdvancedFilters = function BestiaryAdvancedFilters(_ref) {
31786
+ var isOpen = _ref.isOpen,
31787
+ onToggle = _ref.onToggle,
31788
+ onLevelRangeChange = _ref.onLevelRangeChange,
31789
+ onSubtypeChange = _ref.onSubtypeChange,
31790
+ onAttackTypeChange = _ref.onAttackTypeChange,
31791
+ levelRange = _ref.levelRange,
31792
+ selectedSubtype = _ref.selectedSubtype,
31793
+ selectedAttackType = _ref.selectedAttackType;
31794
+ var subtypeOptions = [{
31795
+ id: 0,
31796
+ value: 'all',
31797
+ option: 'All Types'
31798
+ }].concat(Object.entries(shared.NPCSubtype).map(function (_ref2, index) {
31799
+ var value = _ref2[1];
31800
+ return {
31801
+ id: index + 1,
31802
+ value: value,
31803
+ option: formatItemType(value)
31804
+ };
31805
+ }));
31806
+ var attackTypeOptions = [{
31807
+ id: 0,
31808
+ value: 'all',
31809
+ option: 'All Attack Types'
31810
+ }].concat(Object.entries(shared.EntityAttackType).map(function (_ref3, index) {
31811
+ var value = _ref3[1];
31812
+ return {
31813
+ id: index + 1,
31814
+ value: value,
31815
+ option: formatItemType(value)
31816
+ };
31817
+ }));
31818
+ var hasActiveFilters = levelRange[0] !== undefined || levelRange[1] !== undefined || selectedSubtype !== 'all' || selectedAttackType !== 'all';
31819
+ var handleClearFilters = function handleClearFilters() {
31820
+ onLevelRangeChange([undefined, undefined]);
31821
+ onSubtypeChange('all');
31822
+ onAttackTypeChange('all');
31823
+ };
31824
+ var sections = [{
31825
+ type: 'range',
31826
+ label: 'Level Range',
31827
+ key: 'level',
31828
+ value: levelRange,
31829
+ onChange: onLevelRangeChange
31830
+ }, {
31831
+ type: 'dropdown',
31832
+ label: 'Monster Type',
31833
+ key: 'subtype',
31834
+ options: subtypeOptions,
31835
+ value: selectedSubtype,
31836
+ onChange: onSubtypeChange
31837
+ }, {
31838
+ type: 'dropdown',
31839
+ label: 'Attack Type',
31840
+ key: 'attackType',
31841
+ options: attackTypeOptions,
31842
+ value: selectedAttackType,
31843
+ onChange: onAttackTypeChange
31844
+ }];
31845
+ return React__default.createElement(AdvancedFilters, {
31846
+ isOpen: isOpen,
31847
+ onToggle: onToggle,
31848
+ sections: sections,
31849
+ onClearAll: handleClearFilters,
31850
+ hasActiveFilters: hasActiveFilters
31851
+ });
31852
+ };
31566
31853
 
31567
31854
  var ITEMS_PER_PAGE$1 = 5;
31568
31855
  var formatItemName = function formatItemName(itemPath) {
@@ -31626,7 +31913,7 @@ var InformationCenterNPCDetails = function InformationCenterNPCDetails(_ref) {
31626
31913
  atlasJSON: entitiesAtlasJSON,
31627
31914
  atlasIMG: entitiesAtlasIMG,
31628
31915
  onBack: onBack
31629
- }, React__default.createElement(InfoSection$1, null, React__default.createElement(InfoItem$1, null, React__default.createElement(Label$1, null, "Type:"), React__default.createElement(Value$1, null, formatText(npc.subType))), React__default.createElement(InfoItem$1, null, React__default.createElement(Label$1, null, "Alignment:"), React__default.createElement(Value$1, null, formatText(npc.alignment))), React__default.createElement(InfoItem$1, null, React__default.createElement(Label$1, null, "Attack Type:"), React__default.createElement(Value$1, null, formatText(npc.attackType))), React__default.createElement(InfoItem$1, null, React__default.createElement(Label$1, null, "Range:"), React__default.createElement(Value$1, null, formatText(npc.maxRangeAttack))), React__default.createElement(InfoItem$1, null, React__default.createElement(Label$1, null, "Speed:"), React__default.createElement(Value$1, null, formatText(npc.speed)))), React__default.createElement(StyledCollapsible$1, {
31916
+ }, React__default.createElement(InfoSection$1, null, React__default.createElement(InfoItem$1, null, React__default.createElement(Label$2, null, "Type:"), React__default.createElement(Value$1, null, formatText(npc.subType))), React__default.createElement(InfoItem$1, null, React__default.createElement(Label$2, null, "Alignment:"), React__default.createElement(Value$1, null, formatText(npc.alignment))), React__default.createElement(InfoItem$1, null, React__default.createElement(Label$2, null, "Attack Type:"), React__default.createElement(Value$1, null, formatText(npc.attackType))), React__default.createElement(InfoItem$1, null, React__default.createElement(Label$2, null, "Range:"), React__default.createElement(Value$1, null, formatText(npc.maxRangeAttack))), React__default.createElement(InfoItem$1, null, React__default.createElement(Label$2, null, "Speed:"), React__default.createElement(Value$1, null, formatText(npc.speed)))), React__default.createElement(StyledCollapsible$1, {
31630
31917
  title: "Stats",
31631
31918
  defaultOpen: !isMobile
31632
31919
  }, React__default.createElement(StatGrid$1, null, React__default.createElement(StatItem$2, null, "HP: ", npc.baseHealth), React__default.createElement(StatItem$2, null, "Level: ", npc.skills.level), ((_npc$skills$strength = npc.skills.strength) == null ? void 0 : _npc$skills$strength.level) && React__default.createElement(StatItem$2, null, "Strength: ", npc.skills.strength.level), ((_npc$skills$dexterity = npc.skills.dexterity) == null ? void 0 : _npc$skills$dexterity.level) && React__default.createElement(StatItem$2, null, "Dexterity: ", npc.skills.dexterity.level), ((_npc$skills$resistanc = npc.skills.resistance) == null ? void 0 : _npc$skills$resistanc.level) && React__default.createElement(StatItem$2, null, "Resistance: ", npc.skills.resistance.level))), npc.loots && npc.loots.length > 0 && React__default.createElement(StyledCollapsible$1, {
@@ -31682,7 +31969,7 @@ var InfoItem$1 = /*#__PURE__*/styled__default.div.withConfig({
31682
31969
  displayName: "InformationCenterNPCDetails__InfoItem",
31683
31970
  componentId: "sc-fdu3xl-1"
31684
31971
  })(["display:flex;align-items:center;gap:8px;"]);
31685
- var Label$1 = /*#__PURE__*/styled__default.span.withConfig({
31972
+ var Label$2 = /*#__PURE__*/styled__default.span.withConfig({
31686
31973
  displayName: "InformationCenterNPCDetails__Label",
31687
31974
  componentId: "sc-fdu3xl-2"
31688
31975
  })(["color:", ";font-size:0.5rem;opacity:0.8;"], uiColors.yellow);
@@ -31891,49 +32178,36 @@ var InformationCenterBestiarySection = function InformationCenterBestiarySection
31891
32178
  searchQuery = _useState[0],
31892
32179
  setSearchQuery = _useState[1];
31893
32180
  var _useState2 = React.useState(null),
31894
- tooltipData = _useState2[0],
31895
- setTooltipData = _useState2[1];
31896
- var _useState3 = React.useState(null),
31897
- selectedMonster = _useState3[0],
31898
- setSelectedMonster = _useState3[1];
31899
- var handleMouseEnter = function handleMouseEnter(monster, event) {
31900
- if (!isMobile && !selectedMonster) {
31901
- setTooltipData({
31902
- npc: monster,
31903
- position: {
31904
- x: event.clientX,
31905
- y: event.clientY
31906
- }
31907
- });
31908
- }
31909
- };
31910
- var handleMouseLeave = function handleMouseLeave() {
31911
- if (!isMobile) {
31912
- setTooltipData(null);
31913
- }
31914
- };
31915
- var handleMouseMove = function handleMouseMove(event) {
31916
- if (!isMobile && tooltipData) {
31917
- setTooltipData(_extends({}, tooltipData, {
31918
- position: {
31919
- x: event.clientX,
31920
- y: event.clientY
31921
- }
31922
- }));
31923
- }
31924
- };
32181
+ selectedMonster = _useState2[0],
32182
+ setSelectedMonster = _useState2[1];
32183
+ var _useState3 = React.useState('all'),
32184
+ selectedBestiaryCategory = _useState3[0],
32185
+ setSelectedBestiaryCategory = _useState3[1];
32186
+ var _useTooltipPosition = useTooltipPosition(),
32187
+ tooltipState = _useTooltipPosition.tooltipState,
32188
+ handleMouseEnter = _useTooltipPosition.handleMouseEnter,
32189
+ handleMouseLeave = _useTooltipPosition.handleMouseLeave,
32190
+ TOOLTIP_WIDTH = _useTooltipPosition.TOOLTIP_WIDTH;
32191
+ // Advanced filters state
32192
+ var _useState4 = React.useState(false),
32193
+ isAdvancedFiltersOpen = _useState4[0],
32194
+ setIsAdvancedFiltersOpen = _useState4[1];
32195
+ var _useState5 = React.useState([undefined, undefined]),
32196
+ levelRange = _useState5[0],
32197
+ setLevelRange = _useState5[1];
32198
+ var _useState6 = React.useState('all'),
32199
+ selectedSubtype = _useState6[0],
32200
+ setSelectedSubtype = _useState6[1];
32201
+ var _useState7 = React.useState('all'),
32202
+ selectedAttackType = _useState7[0],
32203
+ setSelectedAttackType = _useState7[1];
31925
32204
  var handleTouchStart = function handleTouchStart(monster, event) {
31926
32205
  event.preventDefault();
31927
32206
  setSelectedMonster(monster);
31928
- setTooltipData(null);
31929
32207
  };
31930
32208
  var handleMonsterClick = function handleMonsterClick(monster) {
31931
32209
  setSelectedMonster(monster);
31932
- setTooltipData(null);
31933
32210
  };
31934
- var _useState4 = React.useState('all'),
31935
- selectedBestiaryCategory = _useState4[0],
31936
- setSelectedBestiaryCategory = _useState4[1];
31937
32211
  var bestiaryCategoryOptions = [{
31938
32212
  id: 0,
31939
32213
  value: 'all',
@@ -31942,10 +32216,13 @@ var InformationCenterBestiarySection = function InformationCenterBestiarySection
31942
32216
  id: 1,
31943
32217
  value: 'bosses',
31944
32218
  option: 'Bosses'
31945
- }].concat(Object.entries(shared.NPCAlignment).map(function (_ref2, index) {
32219
+ }].concat(Object.entries(shared.NPCAlignment).filter(function (_ref2) {
31946
32220
  var value = _ref2[1];
32221
+ return value !== shared.NPCAlignment.Friendly;
32222
+ }).map(function (_ref3, index) {
32223
+ var value = _ref3[1];
31947
32224
  return {
31948
- id: index + 1,
32225
+ id: index + 2,
31949
32226
  value: value,
31950
32227
  option: formatItemType(value)
31951
32228
  };
@@ -31964,7 +32241,6 @@ var InformationCenterBestiarySection = function InformationCenterBestiarySection
31964
32241
  return handleMouseEnter(item, e);
31965
32242
  },
31966
32243
  onMouseLeave: handleMouseLeave,
31967
- onMouseMove: handleMouseMove,
31968
32244
  onTouchStart: function onTouchStart(e) {
31969
32245
  return handleTouchStart(item, e);
31970
32246
  }
@@ -31972,7 +32248,9 @@ var InformationCenterBestiarySection = function InformationCenterBestiarySection
31972
32248
  };
31973
32249
  var filteredItems = React.useMemo(function () {
31974
32250
  return bestiaryItems.filter(function (item) {
32251
+ // Basic search filter
31975
32252
  var matchesSearch = item.name.toLowerCase().includes(searchQuery.toLowerCase());
32253
+ // Category filter
31976
32254
  var matchesCategory = true;
31977
32255
  if (selectedBestiaryCategory === 'bosses') {
31978
32256
  matchesCategory = item.isBoss === true;
@@ -31981,15 +32259,33 @@ var InformationCenterBestiarySection = function InformationCenterBestiarySection
31981
32259
  } else if (selectedBestiaryCategory !== 'all') {
31982
32260
  matchesCategory = item.alignment === selectedBestiaryCategory;
31983
32261
  }
31984
- return matchesSearch && matchesCategory;
32262
+ // Advanced filters
32263
+ var matchesLevel = (!levelRange[0] || item.skills.level >= levelRange[0]) && (!levelRange[1] || item.skills.level <= levelRange[1]);
32264
+ var matchesSubtype = selectedSubtype === 'all' || item.subType === selectedSubtype;
32265
+ var matchesAttackType = selectedAttackType === 'all' || item.attackType === selectedAttackType;
32266
+ // Filter out friendly NPCs
32267
+ var isNotFriendly = item.alignment !== shared.NPCAlignment.Friendly;
32268
+ return matchesSearch && matchesCategory && matchesLevel && matchesSubtype && matchesAttackType && isNotFriendly;
31985
32269
  });
31986
- }, [bestiaryItems, searchQuery, selectedBestiaryCategory]);
32270
+ }, [bestiaryItems, searchQuery, selectedBestiaryCategory, levelRange, selectedSubtype, selectedAttackType]);
31987
32271
  var handleSearchChange = function handleSearchChange(newQuery) {
31988
32272
  setSearchQuery(newQuery);
31989
32273
  if (newQuery && selectedBestiaryCategory !== 'all') {
31990
32274
  setSelectedBestiaryCategory('all');
31991
32275
  }
31992
32276
  };
32277
+ var SearchBarRightElement = React__default.createElement(SearchBarActions$1, null, React__default.createElement(BestiaryAdvancedFilters, {
32278
+ isOpen: isAdvancedFiltersOpen,
32279
+ onToggle: function onToggle() {
32280
+ return setIsAdvancedFiltersOpen(!isAdvancedFiltersOpen);
32281
+ },
32282
+ onLevelRangeChange: setLevelRange,
32283
+ onSubtypeChange: setSelectedSubtype,
32284
+ onAttackTypeChange: setSelectedAttackType,
32285
+ levelRange: levelRange,
32286
+ selectedSubtype: selectedSubtype,
32287
+ selectedAttackType: selectedAttackType
32288
+ }));
31993
32289
  return React__default.createElement(React__default.Fragment, null, React__default.createElement(PaginatedContent, {
31994
32290
  items: filteredItems,
31995
32291
  renderItem: renderItem,
@@ -32004,18 +32300,20 @@ var InformationCenterBestiarySection = function InformationCenterBestiarySection
32004
32300
  searchOptions: {
32005
32301
  value: searchQuery,
32006
32302
  onChange: handleSearchChange,
32007
- placeholder: 'Search monsters...'
32303
+ placeholder: 'Search monsters...',
32304
+ rightElement: SearchBarRightElement
32008
32305
  },
32009
- dependencies: [selectedBestiaryCategory],
32306
+ dependencies: [selectedBestiaryCategory, levelRange, selectedSubtype, selectedAttackType],
32010
32307
  itemHeight: "180px"
32011
- }), !isMobile && tooltipData && React__default.createElement(Portal, null, React__default.createElement(TooltipWrapper$1, {
32308
+ }), !isMobile && tooltipState && tooltipState.item && React__default.createElement(Portal, null, React__default.createElement(TooltipWrapper$1, {
32309
+ width: TOOLTIP_WIDTH,
32012
32310
  style: {
32013
32311
  position: 'fixed',
32014
- left: tooltipData.position.x + 10,
32015
- top: tooltipData.position.y + 10
32312
+ left: tooltipState.position.x + "px",
32313
+ top: tooltipState.position.y + "px"
32016
32314
  }
32017
32315
  }, React__default.createElement(InformationCenterNPCTooltip, {
32018
- npc: tooltipData.npc,
32316
+ npc: tooltipState.item,
32019
32317
  itemsAtlasJSON: itemsAtlasJSON,
32020
32318
  itemsAtlasIMG: itemsAtlasIMG
32021
32319
  }))), selectedMonster && React__default.createElement(Portal, null, React__default.createElement(InformationCenterNPCDetails, {
@@ -32034,7 +32332,13 @@ var InformationCenterBestiarySection = function InformationCenterBestiarySection
32034
32332
  var TooltipWrapper$1 = /*#__PURE__*/styled__default.div.withConfig({
32035
32333
  displayName: "InformationCenterBestiarySection__TooltipWrapper",
32036
32334
  componentId: "sc-e3h0p2-0"
32037
- })(["position:fixed;z-index:1000;pointer-events:none;width:300px;"]);
32335
+ })(["z-index:1000;pointer-events:none;width:", ";"], function (props) {
32336
+ return props.width + "px";
32337
+ });
32338
+ var SearchBarActions$1 = /*#__PURE__*/styled__default.div.withConfig({
32339
+ displayName: "InformationCenterBestiarySection__SearchBarActions",
32340
+ componentId: "sc-e3h0p2-1"
32341
+ })(["display:flex;align-items:center;gap:0.5rem;"]);
32038
32342
 
32039
32343
  var InformationCenterFAQSection = function InformationCenterFAQSection(_ref) {
32040
32344
  var faqItems = _ref.faqItems,
@@ -32057,7 +32361,7 @@ var InformationCenterFAQSection = function InformationCenterFAQSection(_ref) {
32057
32361
  title: item.question
32058
32362
  }, React__default.createElement(Answer$1, null, item.answer));
32059
32363
  };
32060
- return React__default.createElement(Container$q, null, React__default.createElement(SearchHeader, {
32364
+ return React__default.createElement(Container$r, null, React__default.createElement(SearchHeader, {
32061
32365
  searchOptions: {
32062
32366
  value: searchQuery,
32063
32367
  onChange: setSearchQuery,
@@ -32072,7 +32376,7 @@ var InformationCenterFAQSection = function InformationCenterFAQSection(_ref) {
32072
32376
  itemsPerPage: 10
32073
32377
  }));
32074
32378
  };
32075
- var Container$q = /*#__PURE__*/styled__default.div.withConfig({
32379
+ var Container$r = /*#__PURE__*/styled__default.div.withConfig({
32076
32380
  displayName: "InformationCenterFaqSection__Container",
32077
32381
  componentId: "sc-ofmaa9-0"
32078
32382
  })(["display:flex;flex-direction:column;gap:1rem;width:100%;"]);
@@ -32291,7 +32595,7 @@ var InformationCenter = function InformationCenter(_ref) {
32291
32595
  return React__default.createElement(DraggableContainer, {
32292
32596
  title: "Information Center",
32293
32597
  type: exports.RPGUIContainerTypes.Framed
32294
- }, React__default.createElement(Container$r, null, React__default.createElement(InternalTabs, {
32598
+ }, React__default.createElement(Container$s, null, React__default.createElement(InternalTabs, {
32295
32599
  tabs: tabs,
32296
32600
  activeTextColor: "#000000",
32297
32601
  activeTab: activeTab,
@@ -32302,7 +32606,7 @@ var InformationCenter = function InformationCenter(_ref) {
32302
32606
  hoverColor: "#fef3c7"
32303
32607
  })));
32304
32608
  };
32305
- var Container$r = /*#__PURE__*/styled__default.div.withConfig({
32609
+ var Container$s = /*#__PURE__*/styled__default.div.withConfig({
32306
32610
  displayName: "InformationCenter__Container",
32307
32611
  componentId: "sc-1ttl62e-0"
32308
32612
  })(["width:100%;max-width:800px;margin:0 auto;padding:1rem;"]);
@@ -32473,7 +32777,7 @@ var ShortcutsSetter = function ShortcutsSetter(_ref) {
32473
32777
  }
32474
32778
  return null;
32475
32779
  };
32476
- return React__default.createElement(Container$s, null, React__default.createElement("p", null, "Shortcuts:"), React__default.createElement(List, {
32780
+ return React__default.createElement(Container$t, null, React__default.createElement("p", null, "Shortcuts:"), React__default.createElement(List, {
32477
32781
  id: "shortcuts_list"
32478
32782
  }, Array.from({
32479
32783
  length: 12
@@ -32491,7 +32795,7 @@ var ShortcutsSetter = function ShortcutsSetter(_ref) {
32491
32795
  }, getContent(i));
32492
32796
  })));
32493
32797
  };
32494
- var Container$s = /*#__PURE__*/styled__default.div.withConfig({
32798
+ var Container$t = /*#__PURE__*/styled__default.div.withConfig({
32495
32799
  displayName: "ShortcutsSetter__Container",
32496
32800
  componentId: "sc-xuouuf-0"
32497
32801
  })(["p{margin:0;margin-left:0.5rem;font-size:10px;}width:100%;"]);
@@ -32935,7 +33239,7 @@ var ConfirmModal = function ConfirmModal(_ref) {
32935
33239
  e.stopPropagation();
32936
33240
  onClose();
32937
33241
  };
32938
- return React__default.createElement(ModalPortal, null, React__default.createElement(Background, null), React__default.createElement(Container$t, {
33242
+ return React__default.createElement(ModalPortal, null, React__default.createElement(Background, null), React__default.createElement(Container$u, {
32939
33243
  onClick: handleClose
32940
33244
  }, React__default.createElement(DraggableContainer, {
32941
33245
  width: "auto",
@@ -32958,7 +33262,7 @@ var Background = /*#__PURE__*/styled__default.div.withConfig({
32958
33262
  displayName: "ConfirmModal__Background",
32959
33263
  componentId: "sc-11qkyu1-0"
32960
33264
  })(["position:absolute;width:100%;height:100%;background-color:#000000;opacity:0.5;left:0;top:0;z-index:1000;"]);
32961
- var Container$t = /*#__PURE__*/styled__default.div.withConfig({
33265
+ var Container$u = /*#__PURE__*/styled__default.div.withConfig({
32962
33266
  displayName: "ConfirmModal__Container",
32963
33267
  componentId: "sc-11qkyu1-1"
32964
33268
  })(["position:absolute;width:100%;height:100%;left:0;top:0;display:flex;justify-content:center;align-items:center;z-index:1001;"]);
@@ -33013,7 +33317,7 @@ var ColorSelector = function ColorSelector(_ref) {
33013
33317
  cancelDrag: ".react-colorful",
33014
33318
  width: "25rem",
33015
33319
  onCloseButton: onClose
33016
- }, React__default.createElement(Container$u, null, React__default.createElement(Header$3, null, "Select Color"), React__default.createElement(ColorPickerWrapper, null, React__default.createElement(reactColorful.HexColorPicker, {
33320
+ }, React__default.createElement(Container$v, null, React__default.createElement(Header$3, null, "Select Color"), React__default.createElement(ColorPickerWrapper, null, React__default.createElement(reactColorful.HexColorPicker, {
33017
33321
  color: currentColor,
33018
33322
  onChange: function onChange(color) {
33019
33323
  setCurrentColor(color);
@@ -33029,7 +33333,7 @@ var ColorSelector = function ColorSelector(_ref) {
33029
33333
  onClose: handleClose
33030
33334
  }));
33031
33335
  };
33032
- var Container$u = /*#__PURE__*/styled__default.div.withConfig({
33336
+ var Container$v = /*#__PURE__*/styled__default.div.withConfig({
33033
33337
  displayName: "ItemPropertyColorSelector__Container",
33034
33338
  componentId: "sc-me1r4z-0"
33035
33339
  })(["text-align:center;background:inherit;display:flex;flex-direction:column;gap:1.5rem;align-items:center;width:100%;max-width:24rem;margin:0 auto;"]);
@@ -33385,7 +33689,7 @@ var ListMenu = function ListMenu(_ref) {
33385
33689
  onSelected = _ref.onSelected,
33386
33690
  x = _ref.x,
33387
33691
  y = _ref.y;
33388
- return React__default.createElement(Container$v, {
33692
+ return React__default.createElement(Container$w, {
33389
33693
  x: x,
33390
33694
  y: y
33391
33695
  }, React__default.createElement("ul", {
@@ -33402,7 +33706,7 @@ var ListMenu = function ListMenu(_ref) {
33402
33706
  }, (params == null ? void 0 : params.text) || 'No text');
33403
33707
  })));
33404
33708
  };
33405
- var Container$v = /*#__PURE__*/styled__default.div.withConfig({
33709
+ var Container$w = /*#__PURE__*/styled__default.div.withConfig({
33406
33710
  displayName: "ListMenu__Container",
33407
33711
  componentId: "sc-i9097t-0"
33408
33712
  })(["display:flex;flex-direction:column;width:100%;justify-content:start;align-items:flex-start;position:absolute;top:", "px;left:", "px;li{font-size:", ";}"], function (props) {
@@ -33421,7 +33725,7 @@ var Pager = function Pager(_ref) {
33421
33725
  itemsPerPage = _ref.itemsPerPage,
33422
33726
  onPageChange = _ref.onPageChange;
33423
33727
  var totalPages = Math.ceil(totalItems / itemsPerPage);
33424
- return React__default.createElement(Container$w, null, React__default.createElement("p", null, "Total items: ", totalItems), React__default.createElement(PagerContainer, null, React__default.createElement("button", {
33728
+ return React__default.createElement(Container$x, null, React__default.createElement("p", null, "Total items: ", totalItems), React__default.createElement(PagerContainer, null, React__default.createElement("button", {
33425
33729
  disabled: currentPage === 1,
33426
33730
  onPointerDown: function onPointerDown() {
33427
33731
  return onPageChange(Math.max(currentPage - 1, 1));
@@ -33435,7 +33739,7 @@ var Pager = function Pager(_ref) {
33435
33739
  }
33436
33740
  }, '>')));
33437
33741
  };
33438
- var Container$w = /*#__PURE__*/styled__default.div.withConfig({
33742
+ var Container$x = /*#__PURE__*/styled__default.div.withConfig({
33439
33743
  displayName: "Pager__Container",
33440
33744
  componentId: "sc-1ekmf50-0"
33441
33745
  })(["display:flex;flex-direction:column;align-items:center;p{margin:0;font-size:", ";}"], uiFonts.size.xsmall);
@@ -33956,13 +34260,13 @@ var TabBody = function TabBody(_ref) {
33956
34260
  children = _ref.children,
33957
34261
  styles = _ref.styles,
33958
34262
  centerContent = _ref.centerContent;
33959
- return React__default.createElement(Container$x, {
34263
+ return React__default.createElement(Container$y, {
33960
34264
  styles: styles,
33961
34265
  "data-tab-id": id,
33962
34266
  centerContent: centerContent
33963
34267
  }, children);
33964
34268
  };
33965
- var Container$x = /*#__PURE__*/styled__default.div.withConfig({
34269
+ var Container$y = /*#__PURE__*/styled__default.div.withConfig({
33966
34270
  displayName: "TabBody__Container",
33967
34271
  componentId: "sc-196oof2-0"
33968
34272
  })(["width:", ";height:", ";overflow-y:auto;display:", ";justify-content:", ";align-items:", ";"], function (props) {
@@ -34614,7 +34918,7 @@ var ProgressBar = function ProgressBar(_ref) {
34614
34918
  }
34615
34919
  return value * 100 / max;
34616
34920
  };
34617
- return React__default.createElement(Container$y, {
34921
+ return React__default.createElement(Container$z, {
34618
34922
  className: "rpgui-progress",
34619
34923
  "data-value": calculatePercentageValue(max, value) / 100,
34620
34924
  "data-rpguitype": "progress",
@@ -34644,7 +34948,7 @@ var TextOverlay$1 = /*#__PURE__*/styled__default.div.withConfig({
34644
34948
  displayName: "ProgressBar__TextOverlay",
34645
34949
  componentId: "sc-qa6fzh-1"
34646
34950
  })(["width:100%;position:relative;"]);
34647
- var Container$y = /*#__PURE__*/styled__default.div.withConfig({
34951
+ var Container$z = /*#__PURE__*/styled__default.div.withConfig({
34648
34952
  displayName: "ProgressBar__Container",
34649
34953
  componentId: "sc-qa6fzh-2"
34650
34954
  })(["display:flex;flex-direction:column;min-width:", "px;width:", "%;justify-content:start;align-items:flex-start;", " @media (max-width:950px){transform:scale(", ");}"], function (props) {
@@ -34785,17 +35089,17 @@ var QuestList = function QuestList(_ref) {
34785
35089
  return React__default.createElement(QuestCard, {
34786
35090
  key: i,
34787
35091
  style: styles == null ? void 0 : styles.card
34788
- }, React__default.createElement(QuestItem, null, React__default.createElement(Label$2, {
35092
+ }, React__default.createElement(QuestItem, null, React__default.createElement(Label$3, {
34789
35093
  style: styles == null ? void 0 : styles.label
34790
35094
  }, "Title:"), React__default.createElement(Value$2, {
34791
35095
  style: styles == null ? void 0 : styles.value
34792
- }, formatQuestText(quest.title))), React__default.createElement(QuestItem, null, React__default.createElement(Label$2, {
35096
+ }, formatQuestText(quest.title))), React__default.createElement(QuestItem, null, React__default.createElement(Label$3, {
34793
35097
  style: styles == null ? void 0 : styles.label
34794
35098
  }, "Status:"), React__default.createElement(Value$2, {
34795
35099
  style: _extends({}, styles == null ? void 0 : styles.value, {
34796
35100
  color: getQuestStatusColor(quest.status)
34797
35101
  })
34798
- }, (_formatQuestStatus = formatQuestStatus(quest.status)) != null ? _formatQuestStatus : 'Unknown')), React__default.createElement(QuestItem, null, React__default.createElement(Label$2, {
35102
+ }, (_formatQuestStatus = formatQuestStatus(quest.status)) != null ? _formatQuestStatus : 'Unknown')), React__default.createElement(QuestItem, null, React__default.createElement(Label$3, {
34799
35103
  style: styles == null ? void 0 : styles.label
34800
35104
  }, "Description:"), React__default.createElement(Value$2, {
34801
35105
  style: styles == null ? void 0 : styles.value
@@ -34814,7 +35118,7 @@ var QuestItem = /*#__PURE__*/styled__default.div.withConfig({
34814
35118
  displayName: "QuestList__QuestItem",
34815
35119
  componentId: "sc-1c1y8sp-2"
34816
35120
  })(["display:flex;margin-bottom:5px;flex-wrap:wrap;&:last-child{margin-bottom:0;}"]);
34817
- var Label$2 = /*#__PURE__*/styled__default.span.withConfig({
35121
+ var Label$3 = /*#__PURE__*/styled__default.span.withConfig({
34818
35122
  displayName: "QuestList__Label",
34819
35123
  componentId: "sc-1c1y8sp-3"
34820
35124
  })(["font-weight:bold;color:", " !important;margin-right:10px;"], uiColors.yellow);
@@ -34885,9 +35189,9 @@ var InputRadio = function InputRadio(_ref) {
34885
35189
 
34886
35190
  var RPGUIScrollbar = function RPGUIScrollbar(_ref) {
34887
35191
  var children = _ref.children;
34888
- return React__default.createElement(Container$z, null, children);
35192
+ return React__default.createElement(Container$A, null, children);
34889
35193
  };
34890
- var Container$z = /*#__PURE__*/styled__default.div.withConfig({
35194
+ var Container$A = /*#__PURE__*/styled__default.div.withConfig({
34891
35195
  displayName: "RPGUIScrollbar__Container",
34892
35196
  componentId: "sc-p3msmb-0"
34893
35197
  })([".rpgui-content ::-webkit-scrollbar,.rpgui-content::-webkit-scrollbar{width:25px !important;}.rpgui-content ::-webkit-scrollbar-track,.rpgui-content::-webkit-scrollbar-track{background-size:25px 60px !important;}"]);
@@ -35043,7 +35347,7 @@ var SimpleProgressBar = function SimpleProgressBar(_ref) {
35043
35347
  margin = _ref$margin === void 0 ? 20 : _ref$margin;
35044
35348
  // Ensure the width is at least 1% if value is greater than 0
35045
35349
  var width = value > 0 ? Math.max(1, Math.min(100, value)) : 0;
35046
- return React__default.createElement(Container$A, {
35350
+ return React__default.createElement(Container$B, {
35047
35351
  className: "simple-progress-bar"
35048
35352
  }, React__default.createElement(ProgressBarContainer, {
35049
35353
  margin: margin
@@ -35052,7 +35356,7 @@ var SimpleProgressBar = function SimpleProgressBar(_ref) {
35052
35356
  bgColor: bgColor
35053
35357
  }))));
35054
35358
  };
35055
- var Container$A = /*#__PURE__*/styled__default.div.withConfig({
35359
+ var Container$B = /*#__PURE__*/styled__default.div.withConfig({
35056
35360
  displayName: "SimpleProgressBar__Container",
35057
35361
  componentId: "sc-mbeil3-0"
35058
35362
  })(["display:flex;justify-content:center;align-items:center;width:100%;"]);
@@ -35385,7 +35689,7 @@ var SocialModal = function SocialModal(_ref) {
35385
35689
  title: "Social Channels",
35386
35690
  width: "500px",
35387
35691
  onCloseButton: onClose
35388
- }, React__default.createElement(Container$B, null, React__default.createElement(HeaderImage, {
35692
+ }, React__default.createElement(Container$C, null, React__default.createElement(HeaderImage, {
35389
35693
  src: img$9,
35390
35694
  alt: ""
35391
35695
  }), React__default.createElement(ButtonsContainer$1, null, React__default.createElement(MainButtons, null, React__default.createElement(SocialButton$1, {
@@ -35403,7 +35707,7 @@ var SocialModal = function SocialModal(_ref) {
35403
35707
  onClick: handleWhatsAppClick
35404
35708
  }, React__default.createElement(fa.FaWhatsapp, null), " Join WhatsApp")))));
35405
35709
  };
35406
- var Container$B = /*#__PURE__*/styled__default.div.withConfig({
35710
+ var Container$C = /*#__PURE__*/styled__default.div.withConfig({
35407
35711
  displayName: "SocialModal__Container",
35408
35712
  componentId: "sc-tbjhp9-0"
35409
35713
  })(["width:100%;display:flex;flex-direction:column;gap:16px;background-color:#5c4132;position:relative;border-radius:8px;overflow:hidden;&:before,&:after{content:'';position:absolute;left:0;right:0;height:3px;}&:before{bottom:0;background:linear-gradient( to right,#5c4132 0%,#2b1810 2%,#2b1810 98%,#5c4132 100% );}"]);
@@ -35449,7 +35753,7 @@ var SpellInfo$1 = function SpellInfo(_ref) {
35449
35753
  castingType = spell.castingType,
35450
35754
  cooldown = spell.cooldown,
35451
35755
  maxDistanceGrid = spell.maxDistanceGrid;
35452
- return React__default.createElement(Container$C, null, React__default.createElement(Header$5, null, React__default.createElement("div", null, React__default.createElement(Title$b, null, name), React__default.createElement(Type$1, null, magicWords))), React__default.createElement(Statistic$1, null, React__default.createElement("div", {
35756
+ return React__default.createElement(Container$D, null, React__default.createElement(Header$5, null, React__default.createElement("div", null, React__default.createElement(Title$b, null, name), React__default.createElement(Type$1, null, magicWords))), React__default.createElement(Statistic$1, null, React__default.createElement("div", {
35453
35757
  className: "label"
35454
35758
  }, "Casting Type:"), React__default.createElement("div", {
35455
35759
  className: "value"
@@ -35475,7 +35779,7 @@ var SpellInfo$1 = function SpellInfo(_ref) {
35475
35779
  className: "value"
35476
35780
  }, requiredItem))), React__default.createElement(Description$4, null, description));
35477
35781
  };
35478
- var Container$C = /*#__PURE__*/styled__default.div.withConfig({
35782
+ var Container$D = /*#__PURE__*/styled__default.div.withConfig({
35479
35783
  displayName: "SpellInfo__Container",
35480
35784
  componentId: "sc-4hbw3q-0"
35481
35785
  })(["color:white;background-color:#222;border-radius:5px;padding:0.5rem;font-size:", ";border:3px solid ", ";height:max-content;width:30rem;@media (max-width:580px){width:80vw;}"], uiFonts.size.small, uiColors.lightGray);
@@ -35529,7 +35833,7 @@ var MobileSpellTooltip = function MobileSpellTooltip(_ref) {
35529
35833
  var _ref$current;
35530
35834
  (_ref$current = ref.current) == null ? void 0 : _ref$current.classList.add('fadeOut');
35531
35835
  };
35532
- return React__default.createElement(ModalPortal, null, React__default.createElement(Container$D, {
35836
+ return React__default.createElement(ModalPortal, null, React__default.createElement(Container$E, {
35533
35837
  ref: ref,
35534
35838
  onTouchEnd: function onTouchEnd() {
35535
35839
  handleFadeOut();
@@ -35554,7 +35858,7 @@ var MobileSpellTooltip = function MobileSpellTooltip(_ref) {
35554
35858
  }, option.text);
35555
35859
  }))));
35556
35860
  };
35557
- var Container$D = /*#__PURE__*/styled__default.div.withConfig({
35861
+ var Container$E = /*#__PURE__*/styled__default.div.withConfig({
35558
35862
  displayName: "MobileSpellTooltip__Container",
35559
35863
  componentId: "sc-6p7uvr-0"
35560
35864
  })(["position:absolute;z-index:100;left:0;top:0;width:100vw;height:100vh;background-color:rgba(0 0 0 / 0.5);display:flex;justify-content:center;align-items:center;gap:0.5rem;transition:opacity 0.08s;animation:fadeIn 0.1s forwards;@keyframes fadeIn{0%{opacity:0;}100%{opacity:0.92;}}@keyframes fadeOut{0%{opacity:0.92;}100%{opacity:0;}}&.fadeOut{animation:fadeOut 0.1s forwards;}@media (max-width:580px){flex-direction:column;}"]);
@@ -35595,13 +35899,13 @@ var MagicTooltip = function MagicTooltip(_ref) {
35595
35899
  }
35596
35900
  return;
35597
35901
  }, []);
35598
- return React__default.createElement(ModalPortal, null, React__default.createElement(Container$E, {
35902
+ return React__default.createElement(ModalPortal, null, React__default.createElement(Container$F, {
35599
35903
  ref: ref
35600
35904
  }, React__default.createElement(SpellInfoDisplay, {
35601
35905
  spell: spell
35602
35906
  })));
35603
35907
  };
35604
- var Container$E = /*#__PURE__*/styled__default.div.withConfig({
35908
+ var Container$F = /*#__PURE__*/styled__default.div.withConfig({
35605
35909
  displayName: "SpellTooltip__Container",
35606
35910
  componentId: "sc-1go0gwg-0"
35607
35911
  })(["position:absolute;z-index:100;pointer-events:none;left:0;top:0;opacity:0;transition:opacity 0.08s;"]);
@@ -35674,7 +35978,7 @@ var Spell = function Spell(_ref) {
35674
35978
  var IMAGE_SCALE = 2;
35675
35979
  return React__default.createElement(SpellInfoWrapper, {
35676
35980
  spell: spell
35677
- }, React__default.createElement(Container$F, {
35981
+ }, React__default.createElement(Container$G, {
35678
35982
  onPointerUp: onPointerUp == null ? void 0 : onPointerUp.bind(null, spellKey),
35679
35983
  isSettingShortcut: isSettingShortcut && !disabled,
35680
35984
  className: "spell"
@@ -35693,7 +35997,7 @@ var Spell = function Spell(_ref) {
35693
35997
  className: "mana"
35694
35998
  }, manaCost))));
35695
35999
  };
35696
- var Container$F = /*#__PURE__*/styled__default.button.withConfig({
36000
+ var Container$G = /*#__PURE__*/styled__default.button.withConfig({
35697
36001
  displayName: "Spell__Container",
35698
36002
  componentId: "sc-j96fa2-0"
35699
36003
  })(["display:block;background:none;border:2px solid transparent;border-radius:1rem;width:100%;display:flex;gap:1rem;align-items:center;padding:0 1rem;text-align:left;position:relative;animation:", ";@keyframes border-color-change{0%{border-color:", ";}50%{border-color:transparent;}100%{border-color:", ";}}&:hover,&:focus{background-color:", ";}&:active{background:none;}"], function (_ref2) {
@@ -35772,7 +36076,7 @@ var Spellbook = function Spellbook(_ref) {
35772
36076
  height: "inherit",
35773
36077
  cancelDrag: "#spellbook-search, #shortcuts_list, .spell",
35774
36078
  scale: scale
35775
- }, React__default.createElement(Container$G, null, React__default.createElement(Title$d, null, "Learned Spells"), React__default.createElement(ShortcutsSetter, {
36079
+ }, React__default.createElement(Container$H, null, React__default.createElement(Title$d, null, "Learned Spells"), React__default.createElement(ShortcutsSetter, {
35776
36080
  setSettingShortcutIndex: setSettingShortcutIndex,
35777
36081
  settingShortcutIndex: settingShortcutIndex,
35778
36082
  shortcuts: shortcuts,
@@ -35808,7 +36112,7 @@ var Title$d = /*#__PURE__*/styled__default.h1.withConfig({
35808
36112
  displayName: "Spellbook__Title",
35809
36113
  componentId: "sc-r02nfq-0"
35810
36114
  })(["font-size:", " !important;margin-bottom:0 !important;"], uiFonts.size.large);
35811
- var Container$G = /*#__PURE__*/styled__default.div.withConfig({
36115
+ var Container$H = /*#__PURE__*/styled__default.div.withConfig({
35812
36116
  displayName: "Spellbook__Container",
35813
36117
  componentId: "sc-r02nfq-1"
35814
36118
  })(["width:100%;height:100%;color:white;display:flex;flex-direction:column;"]);
@@ -36290,7 +36594,7 @@ var TradingMenu = function TradingMenu(_ref) {
36290
36594
  width: "500px",
36291
36595
  cancelDrag: "#TraderContainer",
36292
36596
  scale: scale
36293
- }, React__default.createElement(Container$H, null, React__default.createElement(Title$e, null, type.charAt(0).toUpperCase() + type.slice(1), " Menu"), React__default.createElement("hr", {
36597
+ }, React__default.createElement(Container$I, null, React__default.createElement(Title$e, null, type.charAt(0).toUpperCase() + type.slice(1), " Menu"), React__default.createElement("hr", {
36294
36598
  className: "golden"
36295
36599
  }), React__default.createElement(ScrollWrapper, {
36296
36600
  id: "TraderContainer"
@@ -36318,7 +36622,7 @@ var TradingMenu = function TradingMenu(_ref) {
36318
36622
  onPointerDown: onClose
36319
36623
  }, "Cancel"))));
36320
36624
  };
36321
- var Container$H = /*#__PURE__*/styled__default.div.withConfig({
36625
+ var Container$I = /*#__PURE__*/styled__default.div.withConfig({
36322
36626
  displayName: "TradingMenu__Container",
36323
36627
  componentId: "sc-1wjsz1l-0"
36324
36628
  })(["width:100%;"]);
@@ -36352,11 +36656,11 @@ var Truncate = function Truncate(_ref) {
36352
36656
  var _ref$maxLines = _ref.maxLines,
36353
36657
  maxLines = _ref$maxLines === void 0 ? 1 : _ref$maxLines,
36354
36658
  children = _ref.children;
36355
- return React__default.createElement(Container$I, {
36659
+ return React__default.createElement(Container$J, {
36356
36660
  maxLines: maxLines
36357
36661
  }, children);
36358
36662
  };
36359
- var Container$I = /*#__PURE__*/styled__default.div.withConfig({
36663
+ var Container$J = /*#__PURE__*/styled__default.div.withConfig({
36360
36664
  displayName: "Truncate__Container",
36361
36665
  componentId: "sc-6x00qb-0"
36362
36666
  })(["display:-webkit-box;max-width:100%;max-height:100%;-webkit-line-clamp:", ";-webkit-box-orient:vertical;overflow:hidden;"], function (props) {
@@ -36464,7 +36768,7 @@ var TutorialStepper = /*#__PURE__*/React__default.memo(function (_ref) {
36464
36768
  };
36465
36769
  });
36466
36770
  }, [lessons, imageStyle]);
36467
- return React__default.createElement(Container$J, null, React__default.createElement(Stepper, {
36771
+ return React__default.createElement(Container$K, null, React__default.createElement(Stepper, {
36468
36772
  steps: generateLessons,
36469
36773
  finalCTAButton: {
36470
36774
  label: 'Close',
@@ -36481,7 +36785,7 @@ var LessonBody = /*#__PURE__*/styled__default.div.withConfig({
36481
36785
  displayName: "TutorialStepper__LessonBody",
36482
36786
  componentId: "sc-7tgzv2-1"
36483
36787
  })([""]);
36484
- var Container$J = /*#__PURE__*/styled__default.div.withConfig({
36788
+ var Container$K = /*#__PURE__*/styled__default.div.withConfig({
36485
36789
  displayName: "TutorialStepper__Container",
36486
36790
  componentId: "sc-7tgzv2-2"
36487
36791
  })(["width:80%;max-width:600px;@media (max-width:600px){width:95%;}"]);