dirk-cfx-react 1.1.80 → 1.1.82

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.
@@ -977,8 +977,12 @@ type SwitchPanelProps = {
977
977
  checked: boolean;
978
978
  onChange: (v: boolean) => void;
979
979
  disabled?: boolean;
980
+ /** Icon rendered on the Switch's thumb (e.g. a Lock when locked). */
981
+ thumbIcon?: ReactNode;
982
+ /** Compact variant — used for nested rows inside an editor card. */
983
+ compact?: boolean;
980
984
  };
981
- declare function SwitchPanel({ label, description, checked, onChange, disabled }: SwitchPanelProps): react_jsx_runtime.JSX.Element;
985
+ declare function SwitchPanel({ label, description, checked, onChange, disabled, thumbIcon, compact, }: SwitchPanelProps): react_jsx_runtime.JSX.Element;
982
986
 
983
987
  type MissingItem = {
984
988
  name: string;
@@ -1050,4 +1054,11 @@ type AnimPostFxSelectProps = Omit<SelectProps, "data" | "value" | "onChange"> &
1050
1054
  };
1051
1055
  declare function AnimPostFxSelect({ value, onChange, label, size, searchable, clearable, ...rest }: AnimPostFxSelectProps): react_jsx_runtime.JSX.Element;
1052
1056
 
1053
- export { AdminPageTitle, type AdminPageTitleProps, AnimPostFxSelect, type AnimPostFxSelectProps, AsyncSaveButton, BlipColorSelect, type BlipColorSelectProps, BlipDisplaySelect, type BlipDisplaySelectProps, BlipIconSelect, type BlipIconSelectProps, BorderedIcon, type BorderedIconProps, type ButtonProps, ConfigPanel, type ConfigPanelProps, ConfirmModal, type ConfirmModalProps, ControlMultiSelect, type ControlMultiSelectProps, ControlSelect, type ControlSelectProps, Counter, type FiveMControls, FiveMKeyBindInput, FloatingParticles, type FloatingParticlesProps, GroupName, type GroupNameProps, GroupRank, type GroupRankProps, GroupSelect, type GroupSelectProps, type GroupType, type GroupValue, InfoBox, type InfoBoxProps, InputContainer, type InputContainerProps, LevelBanner, LevelPanel, MissingItemsBanner, Modal, ModalContext, type ModalProps, ModalProvider, MotionFlex, MotionIcon, MotionImage, MotionText, NavBar, type NavItem, NavigationContext, NavigationProvider, type NavigationStore, type ParticleState, PositionPicker, type PositionPickerProps, type ProgressProps, type Prompt, type PromptButton, PromptModal, type SegmentProps, SegmentedControl, type SegmentedControlProps, SegmentedProgress, SelectItem, type SelectItemProps, type StoreModalProps, SwitchPanel, type SwitchPanelProps, TestBed, type TestBedItem, type TestBedPlacement, type TestBedProps, ThemeOverrideSection, type ThemeOverrideSectionProps, type ThemeOverrideValue, Title, type TitleProps, type TitleSize, Vector4DeleteButton, Vector4Display, type Vector4Value, WorldPositionGotoButton, WorldPositionSetButton, useMissingItemsAudit, useModal, useModalActions, useNavigation, useNavigationStore };
1057
+ type ScenarioSelectProps = Omit<SelectProps, "data" | "value" | "onChange"> & {
1058
+ /** Current scenario name. Empty string = no scenario selected. */
1059
+ value: string;
1060
+ onChange: (name: string) => void;
1061
+ };
1062
+ declare function ScenarioSelect({ value, onChange, label, size, searchable, clearable, ...rest }: ScenarioSelectProps): react_jsx_runtime.JSX.Element;
1063
+
1064
+ export { AdminPageTitle, type AdminPageTitleProps, AnimPostFxSelect, type AnimPostFxSelectProps, AsyncSaveButton, BlipColorSelect, type BlipColorSelectProps, BlipDisplaySelect, type BlipDisplaySelectProps, BlipIconSelect, type BlipIconSelectProps, BorderedIcon, type BorderedIconProps, type ButtonProps, ConfigPanel, type ConfigPanelProps, ConfirmModal, type ConfirmModalProps, ControlMultiSelect, type ControlMultiSelectProps, ControlSelect, type ControlSelectProps, Counter, type FiveMControls, FiveMKeyBindInput, FloatingParticles, type FloatingParticlesProps, GroupName, type GroupNameProps, GroupRank, type GroupRankProps, GroupSelect, type GroupSelectProps, type GroupType, type GroupValue, InfoBox, type InfoBoxProps, InputContainer, type InputContainerProps, LevelBanner, LevelPanel, MissingItemsBanner, Modal, ModalContext, type ModalProps, ModalProvider, MotionFlex, MotionIcon, MotionImage, MotionText, NavBar, type NavItem, NavigationContext, NavigationProvider, type NavigationStore, type ParticleState, PositionPicker, type PositionPickerProps, type ProgressProps, type Prompt, type PromptButton, PromptModal, ScenarioSelect, type ScenarioSelectProps, type SegmentProps, SegmentedControl, type SegmentedControlProps, SegmentedProgress, SelectItem, type SelectItemProps, type StoreModalProps, SwitchPanel, type SwitchPanelProps, TestBed, type TestBedItem, type TestBedPlacement, type TestBedProps, ThemeOverrideSection, type ThemeOverrideSectionProps, type ThemeOverrideValue, Title, type TitleProps, type TitleSize, Vector4DeleteButton, Vector4Display, type Vector4Value, WorldPositionGotoButton, WorldPositionSetButton, useMissingItemsAudit, useModal, useModalActions, useNavigation, useNavigationStore };
@@ -977,8 +977,12 @@ type SwitchPanelProps = {
977
977
  checked: boolean;
978
978
  onChange: (v: boolean) => void;
979
979
  disabled?: boolean;
980
+ /** Icon rendered on the Switch's thumb (e.g. a Lock when locked). */
981
+ thumbIcon?: ReactNode;
982
+ /** Compact variant — used for nested rows inside an editor card. */
983
+ compact?: boolean;
980
984
  };
981
- declare function SwitchPanel({ label, description, checked, onChange, disabled }: SwitchPanelProps): react_jsx_runtime.JSX.Element;
985
+ declare function SwitchPanel({ label, description, checked, onChange, disabled, thumbIcon, compact, }: SwitchPanelProps): react_jsx_runtime.JSX.Element;
982
986
 
983
987
  type MissingItem = {
984
988
  name: string;
@@ -1050,4 +1054,11 @@ type AnimPostFxSelectProps = Omit<SelectProps, "data" | "value" | "onChange"> &
1050
1054
  };
1051
1055
  declare function AnimPostFxSelect({ value, onChange, label, size, searchable, clearable, ...rest }: AnimPostFxSelectProps): react_jsx_runtime.JSX.Element;
1052
1056
 
1053
- export { AdminPageTitle, type AdminPageTitleProps, AnimPostFxSelect, type AnimPostFxSelectProps, AsyncSaveButton, BlipColorSelect, type BlipColorSelectProps, BlipDisplaySelect, type BlipDisplaySelectProps, BlipIconSelect, type BlipIconSelectProps, BorderedIcon, type BorderedIconProps, type ButtonProps, ConfigPanel, type ConfigPanelProps, ConfirmModal, type ConfirmModalProps, ControlMultiSelect, type ControlMultiSelectProps, ControlSelect, type ControlSelectProps, Counter, type FiveMControls, FiveMKeyBindInput, FloatingParticles, type FloatingParticlesProps, GroupName, type GroupNameProps, GroupRank, type GroupRankProps, GroupSelect, type GroupSelectProps, type GroupType, type GroupValue, InfoBox, type InfoBoxProps, InputContainer, type InputContainerProps, LevelBanner, LevelPanel, MissingItemsBanner, Modal, ModalContext, type ModalProps, ModalProvider, MotionFlex, MotionIcon, MotionImage, MotionText, NavBar, type NavItem, NavigationContext, NavigationProvider, type NavigationStore, type ParticleState, PositionPicker, type PositionPickerProps, type ProgressProps, type Prompt, type PromptButton, PromptModal, type SegmentProps, SegmentedControl, type SegmentedControlProps, SegmentedProgress, SelectItem, type SelectItemProps, type StoreModalProps, SwitchPanel, type SwitchPanelProps, TestBed, type TestBedItem, type TestBedPlacement, type TestBedProps, ThemeOverrideSection, type ThemeOverrideSectionProps, type ThemeOverrideValue, Title, type TitleProps, type TitleSize, Vector4DeleteButton, Vector4Display, type Vector4Value, WorldPositionGotoButton, WorldPositionSetButton, useMissingItemsAudit, useModal, useModalActions, useNavigation, useNavigationStore };
1057
+ type ScenarioSelectProps = Omit<SelectProps, "data" | "value" | "onChange"> & {
1058
+ /** Current scenario name. Empty string = no scenario selected. */
1059
+ value: string;
1060
+ onChange: (name: string) => void;
1061
+ };
1062
+ declare function ScenarioSelect({ value, onChange, label, size, searchable, clearable, ...rest }: ScenarioSelectProps): react_jsx_runtime.JSX.Element;
1063
+
1064
+ export { AdminPageTitle, type AdminPageTitleProps, AnimPostFxSelect, type AnimPostFxSelectProps, AsyncSaveButton, BlipColorSelect, type BlipColorSelectProps, BlipDisplaySelect, type BlipDisplaySelectProps, BlipIconSelect, type BlipIconSelectProps, BorderedIcon, type BorderedIconProps, type ButtonProps, ConfigPanel, type ConfigPanelProps, ConfirmModal, type ConfirmModalProps, ControlMultiSelect, type ControlMultiSelectProps, ControlSelect, type ControlSelectProps, Counter, type FiveMControls, FiveMKeyBindInput, FloatingParticles, type FloatingParticlesProps, GroupName, type GroupNameProps, GroupRank, type GroupRankProps, GroupSelect, type GroupSelectProps, type GroupType, type GroupValue, InfoBox, type InfoBoxProps, InputContainer, type InputContainerProps, LevelBanner, LevelPanel, MissingItemsBanner, Modal, ModalContext, type ModalProps, ModalProvider, MotionFlex, MotionIcon, MotionImage, MotionText, NavBar, type NavItem, NavigationContext, NavigationProvider, type NavigationStore, type ParticleState, PositionPicker, type PositionPickerProps, type ProgressProps, type Prompt, type PromptButton, PromptModal, ScenarioSelect, type ScenarioSelectProps, type SegmentProps, SegmentedControl, type SegmentedControlProps, SegmentedProgress, SelectItem, type SelectItemProps, type StoreModalProps, SwitchPanel, type SwitchPanelProps, TestBed, type TestBedItem, type TestBedPlacement, type TestBedProps, ThemeOverrideSection, type ThemeOverrideSectionProps, type ThemeOverrideValue, Title, type TitleProps, type TitleSize, Vector4DeleteButton, Vector4Display, type Vector4Value, WorldPositionGotoButton, WorldPositionSetButton, useMissingItemsAudit, useModal, useModalActions, useNavigation, useNavigationStore };
@@ -5125,25 +5125,46 @@ function AdminPageTitle(props) {
5125
5125
  /* @__PURE__ */ jsx(Text, { ff: "Akrobat Bold", tt: "uppercase", lts: "0.1em", size: "sm", c: "rgba(255,255,255,0.6)", children: locale(props.title) })
5126
5126
  ] });
5127
5127
  }
5128
- function SwitchPanel({ label, description, checked, onChange, disabled }) {
5128
+ function SwitchPanel({
5129
+ label,
5130
+ description,
5131
+ checked,
5132
+ onChange,
5133
+ disabled,
5134
+ thumbIcon,
5135
+ compact
5136
+ }) {
5129
5137
  const theme = useMantineTheme();
5130
5138
  const pc = theme.colors[theme.primaryColor];
5139
+ const bg = compact ? alpha(theme.colors.dark[6], 0.5) : alpha(theme.colors.dark[5], 0.35);
5140
+ const border = compact ? "0.1vh solid rgba(255,255,255,0.04)" : "0.1vh solid rgba(255,255,255,0.05)";
5131
5141
  return /* @__PURE__ */ jsxs(
5132
5142
  Flex,
5133
5143
  {
5134
5144
  justify: "space-between",
5135
5145
  align: "center",
5136
- p: "xs",
5146
+ px: compact ? "xs" : "xs",
5147
+ py: compact ? "xxs" : "xs",
5137
5148
  style: {
5138
- background: alpha(theme.colors.dark[5], 0.35),
5139
- border: "0.1vh solid rgba(255,255,255,0.05)",
5149
+ background: bg,
5150
+ border,
5140
5151
  borderRadius: theme.radius.xs,
5141
5152
  opacity: disabled ? 0.5 : 1
5142
5153
  },
5143
5154
  children: [
5144
5155
  /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "xxs", style: { flex: 1, minWidth: 0 }, children: [
5145
- typeof label === "string" ? /* @__PURE__ */ jsx(Text, { ff: "Akrobat Bold", size: "xs", c: "rgba(255,255,255,0.85)", children: label }) : label,
5146
- description && (typeof description === "string" ? /* @__PURE__ */ jsx(Text, { ff: "Akrobat Bold", size: "xxs", c: "rgba(255,255,255,0.45)", children: description }) : description)
5156
+ typeof label === "string" ? compact ? /* @__PURE__ */ jsx(
5157
+ Text,
5158
+ {
5159
+ ff: "Akrobat Bold",
5160
+ size: "xxs",
5161
+ c: "rgba(255,255,255,0.85)",
5162
+ tt: "uppercase",
5163
+ lts: "0.05em",
5164
+ children: label
5165
+ }
5166
+ ) : /* @__PURE__ */ jsx(Text, { ff: "Akrobat Bold", size: "xs", c: "rgba(255,255,255,0.85)", children: label }) : label,
5167
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(Text, { ff: "Akrobat Bold", size: "xxs", c: compact ? "rgba(255,255,255,0.4)" : "rgba(255,255,255,0.45)", children: description }) : description)
5147
5168
  ] }),
5148
5169
  /* @__PURE__ */ jsx(
5149
5170
  Switch,
@@ -5151,7 +5172,8 @@ function SwitchPanel({ label, description, checked, onChange, disabled }) {
5151
5172
  checked,
5152
5173
  disabled,
5153
5174
  onChange: (e) => onChange(e.currentTarget.checked),
5154
- size: "md",
5175
+ size: compact ? "sm" : "md",
5176
+ thumbIcon,
5155
5177
  styles: {
5156
5178
  track: {
5157
5179
  background: checked ? alpha(pc[6], 0.4) : "rgba(255,255,255,0.08)",
@@ -5827,6 +5849,355 @@ function AnimPostFxSelect({
5827
5849
  );
5828
5850
  }
5829
5851
 
5830
- export { AdminPageTitle, AnimPostFxSelect, AsyncSaveButton, BlipColorSelect, BlipDisplaySelect, BlipIconSelect, BorderedIcon, ConfigPanel, ConfirmModal, ControlMultiSelect, ControlSelect, Counter, FiveMKeyBindInput, FloatingParticles, GroupName, GroupRank, GroupSelect, InfoBox, InputContainer, LevelBanner, LevelPanel, MissingItemsBanner, Modal, ModalContext, ModalProvider, MotionFlex, MotionIcon, MotionImage, MotionText, NavBar, NavigationContext, NavigationProvider, PositionPicker, PromptModal, SegmentedControl, SegmentedProgress, SelectItem, SwitchPanel, TestBed, ThemeOverrideSection, Title, Vector4DeleteButton, Vector4Display, WorldPositionGotoButton, WorldPositionSetButton, useMissingItemsAudit, useModal, useModalActions, useNavigation, useNavigationStore };
5852
+ // src/utils/gtaScenarios.ts
5853
+ var GTA_SCENARIO_GROUP_ORDER = [
5854
+ "Sitting",
5855
+ "Standing & Idle",
5856
+ "Eating & Drinking",
5857
+ "Smoking & Substances",
5858
+ "Working",
5859
+ "Sports & Fitness",
5860
+ "Cops & Security",
5861
+ "Crime & Streets",
5862
+ "Tourists & Crowds",
5863
+ "Props (Misc)",
5864
+ "Movement",
5865
+ "Animals",
5866
+ "Vehicles",
5867
+ "Code (Advanced)"
5868
+ ];
5869
+ var GTA_SCENARIOS = [
5870
+ // ── Sitting ────────────────────────────────────────────────────────────────
5871
+ { name: "PROP_HUMAN_SEAT_ARMCHAIR", group: "Sitting" },
5872
+ { name: "PROP_HUMAN_SEAT_BAR", group: "Sitting" },
5873
+ { name: "PROP_HUMAN_SEAT_BENCH", group: "Sitting" },
5874
+ { name: "PROP_HUMAN_SEAT_BENCH_FACILITY", group: "Sitting" },
5875
+ { name: "PROP_HUMAN_SEAT_BENCH_DRINK", group: "Sitting" },
5876
+ { name: "PROP_HUMAN_SEAT_BENCH_DRINK_FACILITY", group: "Sitting" },
5877
+ { name: "PROP_HUMAN_SEAT_BENCH_DRINK_BEER", group: "Sitting" },
5878
+ { name: "PROP_HUMAN_SEAT_BENCH_FOOD", group: "Sitting" },
5879
+ { name: "PROP_HUMAN_SEAT_BENCH_FOOD_FACILITY", group: "Sitting" },
5880
+ { name: "PROP_HUMAN_SEAT_BUS_STOP_WAIT", group: "Sitting" },
5881
+ { name: "PROP_HUMAN_SEAT_CHAIR", group: "Sitting" },
5882
+ { name: "PROP_HUMAN_SEAT_CHAIR_DRINK", group: "Sitting" },
5883
+ { name: "PROP_HUMAN_SEAT_CHAIR_DRINK_BEER", group: "Sitting" },
5884
+ { name: "PROP_HUMAN_SEAT_CHAIR_FOOD", group: "Sitting" },
5885
+ { name: "PROP_HUMAN_SEAT_CHAIR_UPRIGHT", group: "Sitting" },
5886
+ { name: "PROP_HUMAN_SEAT_CHAIR_UPRIGHT_SHOWROOM", group: "Sitting" },
5887
+ { name: "PROP_HUMAN_SEAT_CHAIR_MP_PLAYER", group: "Sitting" },
5888
+ { name: "PROP_HUMAN_SEAT_COMPUTER", group: "Sitting" },
5889
+ { name: "PROP_HUMAN_SEAT_COMPUTER_LOW", group: "Sitting" },
5890
+ { name: "PROP_HUMAN_SEAT_DECKCHAIR", group: "Sitting" },
5891
+ { name: "PROP_HUMAN_SEAT_DECKCHAIR_DRINK", group: "Sitting" },
5892
+ { name: "PROP_HUMAN_SEAT_SEWING", group: "Sitting" },
5893
+ { name: "PROP_HUMAN_SEAT_STRIP_WATCH", group: "Sitting" },
5894
+ { name: "PROP_HUMAN_SEAT_SUNLOUNGER", group: "Sitting" },
5895
+ { name: "WORLD_HUMAN_SEAT_LEDGE", group: "Sitting" },
5896
+ { name: "WORLD_HUMAN_SEAT_LEDGE_EATING", group: "Sitting" },
5897
+ { name: "WORLD_HUMAN_SEAT_STEPS", group: "Sitting" },
5898
+ { name: "WORLD_HUMAN_SEAT_WALL", group: "Sitting" },
5899
+ { name: "WORLD_HUMAN_SEAT_WALL_EATING", group: "Sitting" },
5900
+ { name: "WORLD_HUMAN_SEAT_WALL_TABLET", group: "Sitting" },
5901
+ // ── Standing & Idle ────────────────────────────────────────────────────────
5902
+ { name: "Standing", group: "Standing & Idle" },
5903
+ { name: "WORLD_HUMAN_HANG_OUT_STREET", group: "Standing & Idle" },
5904
+ { name: "WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE", group: "Standing & Idle" },
5905
+ { name: "WORLD_HUMAN_LEANING", group: "Standing & Idle" },
5906
+ { name: "WORLD_HUMAN_LEANING_CASINO_TERRACE", group: "Standing & Idle" },
5907
+ { name: "WORLD_HUMAN_STAND_IMPATIENT", group: "Standing & Idle" },
5908
+ { name: "WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE", group: "Standing & Idle" },
5909
+ { name: "WORLD_HUMAN_STAND_IMPATIENT_FACILITY", group: "Standing & Idle" },
5910
+ { name: "WORLD_HUMAN_STAND_IMPATIENT_UPRIGHT", group: "Standing & Idle" },
5911
+ { name: "WORLD_HUMAN_STAND_IMPATIENT_UPRIGHT_FACILITY", group: "Standing & Idle" },
5912
+ { name: "WORLD_HUMAN_STAND_MOBILE", group: "Standing & Idle" },
5913
+ { name: "WORLD_HUMAN_STAND_MOBILE_CLUBHOUSE", group: "Standing & Idle" },
5914
+ { name: "WORLD_HUMAN_STAND_MOBILE_FACILITY", group: "Standing & Idle" },
5915
+ { name: "WORLD_HUMAN_STAND_MOBILE_UPRIGHT", group: "Standing & Idle" },
5916
+ { name: "WORLD_HUMAN_STAND_MOBILE_UPRIGHT_CLUBHOUSE", group: "Standing & Idle" },
5917
+ { name: "WORLD_HUMAN_STAND_FIRE", group: "Standing & Idle" },
5918
+ { name: "WORLD_HUMAN_STAND_FISHING", group: "Standing & Idle" },
5919
+ { name: "PROP_HUMAN_STAND_IMPATIENT", group: "Standing & Idle" },
5920
+ // ── Eating & Drinking ──────────────────────────────────────────────────────
5921
+ { name: "WORLD_HUMAN_DRINKING", group: "Eating & Drinking" },
5922
+ { name: "WORLD_HUMAN_DRINKING_FACILITY", group: "Eating & Drinking" },
5923
+ { name: "WORLD_HUMAN_DRINKING_CASINO_TERRACE", group: "Eating & Drinking" },
5924
+ { name: "WORLD_HUMAN_PICNIC", group: "Eating & Drinking" },
5925
+ // ── Smoking & Substances ───────────────────────────────────────────────────
5926
+ { name: "WORLD_HUMAN_AA_COFFEE", group: "Smoking & Substances" },
5927
+ { name: "WORLD_HUMAN_AA_SMOKE", group: "Smoking & Substances" },
5928
+ { name: "WORLD_HUMAN_SMOKING", group: "Smoking & Substances" },
5929
+ { name: "WORLD_HUMAN_SMOKING_CLUBHOUSE", group: "Smoking & Substances" },
5930
+ { name: "WORLD_HUMAN_SMOKING_POT", group: "Smoking & Substances" },
5931
+ { name: "WORLD_HUMAN_SMOKING_POT_CLUBHOUSE", group: "Smoking & Substances" },
5932
+ { name: "WORLD_HUMAN_STUPOR", group: "Smoking & Substances" },
5933
+ { name: "WORLD_HUMAN_STUPOR_CLUBHOUSE", group: "Smoking & Substances" },
5934
+ // ── Working ────────────────────────────────────────────────────────────────
5935
+ { name: "WORLD_HUMAN_CAR_PARK_ATTENDANT", group: "Working" },
5936
+ { name: "WORLD_HUMAN_CLIPBOARD", group: "Working" },
5937
+ { name: "WORLD_HUMAN_CLIPBOARD_FACILITY", group: "Working" },
5938
+ { name: "WORLD_HUMAN_CONST_DRILL", group: "Working" },
5939
+ { name: "WORLD_HUMAN_GARDENER_LEAF_BLOWER", group: "Working" },
5940
+ { name: "WORLD_HUMAN_GARDENER_PLANT", group: "Working" },
5941
+ { name: "WORLD_HUMAN_HAMMERING", group: "Working" },
5942
+ { name: "WORLD_HUMAN_JANITOR", group: "Working" },
5943
+ { name: "WORLD_HUMAN_MAID_CLEAN", group: "Working" },
5944
+ { name: "WORLD_HUMAN_MUSICIAN", group: "Working" },
5945
+ { name: "WORLD_HUMAN_VALET", group: "Working" },
5946
+ { name: "WORLD_HUMAN_VEHICLE_MECHANIC", group: "Working" },
5947
+ { name: "WORLD_HUMAN_WELDING", group: "Working" },
5948
+ // ── Sports & Fitness ───────────────────────────────────────────────────────
5949
+ { name: "WORLD_HUMAN_GOLF_PLAYER", group: "Sports & Fitness" },
5950
+ { name: "WORLD_HUMAN_HIKER", group: "Sports & Fitness" },
5951
+ { name: "WORLD_HUMAN_HIKER_STANDING", group: "Sports & Fitness" },
5952
+ { name: "WORLD_HUMAN_JOG", group: "Sports & Fitness" },
5953
+ { name: "WORLD_HUMAN_JOG_STANDING", group: "Sports & Fitness" },
5954
+ { name: "WORLD_HUMAN_MUSCLE_FLEX", group: "Sports & Fitness" },
5955
+ { name: "WORLD_HUMAN_MUSCLE_FREE_WEIGHTS", group: "Sports & Fitness" },
5956
+ { name: "WORLD_HUMAN_POWER_WALKER", group: "Sports & Fitness" },
5957
+ { name: "WORLD_HUMAN_PUSH_UPS", group: "Sports & Fitness" },
5958
+ { name: "WORLD_HUMAN_SIT_UPS", group: "Sports & Fitness" },
5959
+ { name: "WORLD_HUMAN_SUNBATHE", group: "Sports & Fitness" },
5960
+ { name: "WORLD_HUMAN_SUNBATHE_BACK", group: "Sports & Fitness" },
5961
+ { name: "WORLD_HUMAN_SWIMMING", group: "Sports & Fitness" },
5962
+ { name: "WORLD_HUMAN_TENNIS_PLAYER", group: "Sports & Fitness" },
5963
+ { name: "WORLD_HUMAN_YOGA", group: "Sports & Fitness" },
5964
+ { name: "PROP_HUMAN_MUSCLE_CHIN_UPS", group: "Sports & Fitness" },
5965
+ { name: "PROP_HUMAN_MUSCLE_CHIN_UPS_ARMY", group: "Sports & Fitness" },
5966
+ { name: "PROP_HUMAN_MUSCLE_CHIN_UPS_PRISON", group: "Sports & Fitness" },
5967
+ { name: "PROP_HUMAN_SEAT_MUSCLE_BENCH_PRESS", group: "Sports & Fitness" },
5968
+ { name: "PROP_HUMAN_SEAT_MUSCLE_BENCH_PRESS_PRISON", group: "Sports & Fitness" },
5969
+ // ── Cops & Security ────────────────────────────────────────────────────────
5970
+ { name: "WORLD_HUMAN_COP_IDLES", group: "Cops & Security" },
5971
+ { name: "WORLD_HUMAN_GUARD_PATROL", group: "Cops & Security" },
5972
+ { name: "WORLD_HUMAN_GUARD_STAND", group: "Cops & Security" },
5973
+ { name: "WORLD_HUMAN_GUARD_STAND_CASINO", group: "Cops & Security" },
5974
+ { name: "WORLD_HUMAN_GUARD_STAND_CLUBHOUSE", group: "Cops & Security" },
5975
+ { name: "WORLD_HUMAN_GUARD_STAND_FACILITY", group: "Cops & Security" },
5976
+ { name: "WORLD_HUMAN_GUARD_STAND_ARMY", group: "Cops & Security" },
5977
+ { name: "WORLD_HUMAN_SECURITY_SHINE_TORCH", group: "Cops & Security" },
5978
+ // ── Crime & Streets ────────────────────────────────────────────────────────
5979
+ { name: "WORLD_HUMAN_DRUG_DEALER", group: "Crime & Streets" },
5980
+ { name: "WORLD_HUMAN_DRUG_DEALER_HARD", group: "Crime & Streets" },
5981
+ { name: "WORLD_HUMAN_DRUG_FIELD_WORKERS_RAKE", group: "Crime & Streets" },
5982
+ { name: "WORLD_HUMAN_DRUG_FIELD_WORKERS_WEEDING", group: "Crime & Streets" },
5983
+ { name: "WORLD_HUMAN_DRUG_PROCESSORS_COKE", group: "Crime & Streets" },
5984
+ { name: "WORLD_HUMAN_DRUG_PROCESSORS_WEED", group: "Crime & Streets" },
5985
+ { name: "WORLD_HUMAN_PROSTITUTE_HIGH_CLASS", group: "Crime & Streets" },
5986
+ { name: "WORLD_HUMAN_PROSTITUTE_LOW_CLASS", group: "Crime & Streets" },
5987
+ { name: "WORLD_HUMAN_BUM_FREEWAY", group: "Crime & Streets" },
5988
+ { name: "WORLD_HUMAN_BUM_SLUMPED", group: "Crime & Streets" },
5989
+ { name: "WORLD_HUMAN_BUM_STANDING", group: "Crime & Streets" },
5990
+ { name: "WORLD_HUMAN_BUM_WASH", group: "Crime & Streets" },
5991
+ { name: "PROP_HUMAN_BUM_BIN", group: "Crime & Streets" },
5992
+ { name: "PROP_HUMAN_BUM_SHOPPING_CART", group: "Crime & Streets" },
5993
+ // ── Tourists & Crowds ──────────────────────────────────────────────────────
5994
+ { name: "WORLD_HUMAN_BINOCULARS", group: "Tourists & Crowds" },
5995
+ { name: "WORLD_HUMAN_CHEERING", group: "Tourists & Crowds" },
5996
+ { name: "WORLD_HUMAN_HUMAN_STATUE", group: "Tourists & Crowds" },
5997
+ { name: "WORLD_HUMAN_INSPECT_CROUCH", group: "Tourists & Crowds" },
5998
+ { name: "WORLD_HUMAN_INSPECT_STAND", group: "Tourists & Crowds" },
5999
+ { name: "WORLD_HUMAN_MOBILE_FILM_SHOCKING", group: "Tourists & Crowds" },
6000
+ { name: "WORLD_HUMAN_PAPARAZZI", group: "Tourists & Crowds" },
6001
+ { name: "WORLD_HUMAN_PARTYING", group: "Tourists & Crowds" },
6002
+ { name: "WORLD_HUMAN_STRIP_WATCH_STAND", group: "Tourists & Crowds" },
6003
+ { name: "WORLD_HUMAN_SUPERHERO", group: "Tourists & Crowds" },
6004
+ { name: "WORLD_HUMAN_TOURIST_MAP", group: "Tourists & Crowds" },
6005
+ { name: "WORLD_HUMAN_TOURIST_MOBILE", group: "Tourists & Crowds" },
6006
+ { name: "WORLD_HUMAN_WINDOW_SHOP_BROWSE", group: "Tourists & Crowds" },
6007
+ { name: "WORLD_HUMAN_WINDOW_SHOP_BROWSE_SHOWROOM", group: "Tourists & Crowds" },
6008
+ // ── Props (Misc) ───────────────────────────────────────────────────────────
6009
+ { name: "PROP_HUMAN_ATM", group: "Props (Misc)" },
6010
+ { name: "PROP_HUMAN_BBQ", group: "Props (Misc)" },
6011
+ { name: "PROP_HUMAN_PARKING_METER", group: "Props (Misc)" },
6012
+ { name: "PROP_HUMAN_MOVIE_BULB", group: "Props (Misc)" },
6013
+ { name: "PROP_HUMAN_MOVIE_STUDIO_LIGHT", group: "Props (Misc)" },
6014
+ { name: "PROP_BIRD_IN_TREE", group: "Props (Misc)" },
6015
+ { name: "PROP_BIRD_TELEGRAPH_POLE", group: "Props (Misc)" },
6016
+ // ── Movement ───────────────────────────────────────────────────────────────
6017
+ { name: "Walk", group: "Movement" },
6018
+ { name: "Walk_Facility", group: "Movement" },
6019
+ // ── Animals ────────────────────────────────────────────────────────────────
6020
+ { name: "WORLD_BOAR_GRAZING", group: "Animals" },
6021
+ { name: "WORLD_CAT_SLEEPING_GROUND", group: "Animals" },
6022
+ { name: "WORLD_CAT_SLEEPING_LEDGE", group: "Animals" },
6023
+ { name: "WORLD_COW_GRAZING", group: "Animals" },
6024
+ { name: "WORLD_COYOTE_HOWL", group: "Animals" },
6025
+ { name: "WORLD_COYOTE_REST", group: "Animals" },
6026
+ { name: "WORLD_COYOTE_WANDER", group: "Animals" },
6027
+ { name: "WORLD_COYOTE_WALK", group: "Animals" },
6028
+ { name: "WORLD_CHICKENHAWK_FEEDING", group: "Animals" },
6029
+ { name: "WORLD_CHICKENHAWK_STANDING", group: "Animals" },
6030
+ { name: "WORLD_CORMORANT_STANDING", group: "Animals" },
6031
+ { name: "WORLD_CROW_FEEDING", group: "Animals" },
6032
+ { name: "WORLD_CROW_STANDING", group: "Animals" },
6033
+ { name: "WORLD_DEER_GRAZING", group: "Animals" },
6034
+ { name: "WORLD_DOG_BARKING_ROTTWEILER", group: "Animals" },
6035
+ { name: "WORLD_DOG_BARKING_RETRIEVER", group: "Animals" },
6036
+ { name: "WORLD_DOG_BARKING_SHEPHERD", group: "Animals" },
6037
+ { name: "WORLD_DOG_BARKING_SMALL", group: "Animals" },
6038
+ { name: "WORLD_DOG_SITTING_ROTTWEILER", group: "Animals" },
6039
+ { name: "WORLD_DOG_SITTING_RETRIEVER", group: "Animals" },
6040
+ { name: "WORLD_DOG_SITTING_SHEPHERD", group: "Animals" },
6041
+ { name: "WORLD_DOG_SITTING_SMALL", group: "Animals" },
6042
+ { name: "WORLD_DOLPHIN_SWIM", group: "Animals" },
6043
+ { name: "WORLD_FISH_FLEE", group: "Animals" },
6044
+ { name: "WORLD_FISH_IDLE", group: "Animals" },
6045
+ { name: "WORLD_GULL_FEEDING", group: "Animals" },
6046
+ { name: "WORLD_GULL_STANDING", group: "Animals" },
6047
+ { name: "WORLD_HEN_FLEE", group: "Animals" },
6048
+ { name: "WORLD_HEN_PECKING", group: "Animals" },
6049
+ { name: "WORLD_HEN_STANDING", group: "Animals" },
6050
+ { name: "WORLD_MOUNTAIN_LION_REST", group: "Animals" },
6051
+ { name: "WORLD_MOUNTAIN_LION_WANDER", group: "Animals" },
6052
+ { name: "WORLD_ORCA_SWIM", group: "Animals" },
6053
+ { name: "WORLD_PIG_GRAZING", group: "Animals" },
6054
+ { name: "WORLD_PIGEON_FEEDING", group: "Animals" },
6055
+ { name: "WORLD_PIGEON_STANDING", group: "Animals" },
6056
+ { name: "WORLD_RABBIT_EATING", group: "Animals" },
6057
+ { name: "WORLD_RABBIT_FLEE", group: "Animals" },
6058
+ { name: "WORLD_RATS_EATING", group: "Animals" },
6059
+ { name: "WORLD_RATS_FLEEING", group: "Animals" },
6060
+ { name: "WORLD_SHARK_SWIM", group: "Animals" },
6061
+ { name: "WORLD_SHARK_HAMMERHEAD_SWIM", group: "Animals" },
6062
+ { name: "WORLD_STINGRAY_SWIM", group: "Animals" },
6063
+ { name: "WORLD_WHALE_SWIM", group: "Animals" },
6064
+ // ── Vehicles ───────────────────────────────────────────────────────────────
6065
+ { name: "DRIVE", group: "Vehicles" },
6066
+ { name: "PARK_VEHICLE", group: "Vehicles" },
6067
+ { name: "WORLD_VEHICLE_ATTRACTOR", group: "Vehicles" },
6068
+ { name: "WORLD_VEHICLE_AMBULANCE", group: "Vehicles" },
6069
+ { name: "WORLD_VEHICLE_BICYCLE_BMX", group: "Vehicles" },
6070
+ { name: "WORLD_VEHICLE_BICYCLE_BMX_BALLAS", group: "Vehicles" },
6071
+ { name: "WORLD_VEHICLE_BICYCLE_BMX_FAMILY", group: "Vehicles" },
6072
+ { name: "WORLD_VEHICLE_BICYCLE_BMX_HARMONY", group: "Vehicles" },
6073
+ { name: "WORLD_VEHICLE_BICYCLE_BMX_VAGOS", group: "Vehicles" },
6074
+ { name: "WORLD_VEHICLE_BICYCLE_MOUNTAIN", group: "Vehicles" },
6075
+ { name: "WORLD_VEHICLE_BICYCLE_ROAD", group: "Vehicles" },
6076
+ { name: "WORLD_VEHICLE_BIKE_OFF_ROAD_RACE", group: "Vehicles" },
6077
+ { name: "WORLD_VEHICLE_BIKER", group: "Vehicles" },
6078
+ { name: "WORLD_VEHICLE_BOAT_IDLE", group: "Vehicles" },
6079
+ { name: "WORLD_VEHICLE_BOAT_IDLE_ALAMO", group: "Vehicles" },
6080
+ { name: "WORLD_VEHICLE_BOAT_IDLE_MARQUIS", group: "Vehicles" },
6081
+ { name: "WORLD_VEHICLE_BROKEN_DOWN", group: "Vehicles" },
6082
+ { name: "WORLD_VEHICLE_BUSINESSMEN", group: "Vehicles" },
6083
+ { name: "WORLD_VEHICLE_CLUCKIN_BELL_TRAILER", group: "Vehicles" },
6084
+ { name: "WORLD_VEHICLE_CONSTRUCTION_SOLO", group: "Vehicles" },
6085
+ { name: "WORLD_VEHICLE_CONSTRUCTION_PASSENGERS", group: "Vehicles" },
6086
+ { name: "WORLD_VEHICLE_DISTANT_EMPTY_GROUND", group: "Vehicles" },
6087
+ { name: "WORLD_VEHICLE_DRIVE_PASSENGERS", group: "Vehicles" },
6088
+ { name: "WORLD_VEHICLE_DRIVE_PASSENGERS_LIMITED", group: "Vehicles" },
6089
+ { name: "WORLD_VEHICLE_DRIVE_SOLO", group: "Vehicles" },
6090
+ { name: "WORLD_VEHICLE_EMPTY", group: "Vehicles" },
6091
+ { name: "WORLD_VEHICLE_FARM_WORKER", group: "Vehicles" },
6092
+ { name: "WORLD_VEHICLE_FIRE_TRUCK", group: "Vehicles" },
6093
+ { name: "WORLD_VEHICLE_HELI_LIFEGUARD", group: "Vehicles" },
6094
+ { name: "WORLD_VEHICLE_MARIACHI", group: "Vehicles" },
6095
+ { name: "WORLD_VEHICLE_MECHANIC", group: "Vehicles" },
6096
+ { name: "WORLD_VEHICLE_MILITARY_PLANES_BIG", group: "Vehicles" },
6097
+ { name: "WORLD_VEHICLE_MILITARY_PLANES_SMALL", group: "Vehicles" },
6098
+ { name: "WORLD_VEHICLE_PARK_PARALLEL", group: "Vehicles" },
6099
+ { name: "WORLD_VEHICLE_PARK_PERPENDICULAR_NOSE_IN", group: "Vehicles" },
6100
+ { name: "WORLD_VEHICLE_PASSENGER_EXIT", group: "Vehicles" },
6101
+ { name: "WORLD_VEHICLE_POLICE_BIKE", group: "Vehicles" },
6102
+ { name: "WORLD_VEHICLE_POLICE_CAR", group: "Vehicles" },
6103
+ { name: "WORLD_VEHICLE_POLICE_NEXT_TO_CAR", group: "Vehicles" },
6104
+ { name: "WORLD_VEHICLE_QUARRY", group: "Vehicles" },
6105
+ { name: "WORLD_VEHICLE_SALTON", group: "Vehicles" },
6106
+ { name: "WORLD_VEHICLE_SALTON_DIRT_BIKE", group: "Vehicles" },
6107
+ { name: "WORLD_VEHICLE_SECURITY_CAR", group: "Vehicles" },
6108
+ { name: "WORLD_VEHICLE_STREETRACE", group: "Vehicles" },
6109
+ { name: "WORLD_VEHICLE_TANDL", group: "Vehicles" },
6110
+ { name: "WORLD_VEHICLE_TOURBUS", group: "Vehicles" },
6111
+ { name: "WORLD_VEHICLE_TOURIST", group: "Vehicles" },
6112
+ { name: "WORLD_VEHICLE_TRACTOR", group: "Vehicles" },
6113
+ { name: "WORLD_VEHICLE_TRACTOR_BEACH", group: "Vehicles" },
6114
+ { name: "WORLD_VEHICLE_TRUCK_LOGS", group: "Vehicles" },
6115
+ { name: "WORLD_VEHICLE_TRUCKS_TRAILERS", group: "Vehicles" },
6116
+ // ── Code (Advanced) ────────────────────────────────────────────────────────
6117
+ // These are engine-internal scenarios — rarely the right pick for cinematic
6118
+ // ped placements, but exposed because the game-data dump includes them.
6119
+ { name: "CODE_HUMAN_COWER", group: "Code (Advanced)" },
6120
+ { name: "CODE_HUMAN_CROSS_ROAD_WAIT", group: "Code (Advanced)" },
6121
+ { name: "CODE_HUMAN_PARK_CAR", group: "Code (Advanced)" },
6122
+ { name: "CODE_HUMAN_MEDIC_KNEEL", group: "Code (Advanced)" },
6123
+ { name: "CODE_HUMAN_MEDIC_TEND_TO_DEAD", group: "Code (Advanced)" },
6124
+ { name: "CODE_HUMAN_MEDIC_TIME_OF_DEATH", group: "Code (Advanced)" },
6125
+ { name: "CODE_HUMAN_POLICE_CROWD_CONTROL", group: "Code (Advanced)" },
6126
+ { name: "CODE_HUMAN_POLICE_INVESTIGATE", group: "Code (Advanced)" },
6127
+ { name: "CODE_HUMAN_STAND_COWER", group: "Code (Advanced)" },
6128
+ { name: "CHAINING_ENTRY", group: "Code (Advanced)" },
6129
+ { name: "CHAINING_EXIT", group: "Code (Advanced)" },
6130
+ { name: "EAR_TO_TEXT", group: "Code (Advanced)" },
6131
+ { name: "EAR_TO_TEXT_FAT", group: "Code (Advanced)" },
6132
+ { name: "WORLD_LOOKAT_POINT", group: "Code (Advanced)" }
6133
+ ];
6134
+ var PREFIX_RE = /^(WORLD|PROP|CODE)_(HUMAN_|BIRD_|VEHICLE_|CAT_|DOG_|COYOTE_|FISH_|HEN_|GULL_|CROW_|RABBIT_|RATS_|SHARK_|PIGEON_|ORCA_|WHALE_|STINGRAY_|DOLPHIN_|MOUNTAIN_LION_|PIG_|COW_|DEER_|BOAR_|CHICKENHAWK_|CORMORANT_)?/;
6135
+ function formatGtaScenario(name) {
6136
+ if (!name) return "";
6137
+ const stripped = name.replace(PREFIX_RE, "");
6138
+ const cleaned = stripped.length > 0 ? stripped : name;
6139
+ return cleaned.toLowerCase().split("_").filter(Boolean).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
6140
+ }
6141
+ function buildGroupedData3(extraNames = []) {
6142
+ const groups = /* @__PURE__ */ new Map();
6143
+ const seen = /* @__PURE__ */ new Set();
6144
+ for (const sc of GTA_SCENARIOS) {
6145
+ if (seen.has(sc.name)) continue;
6146
+ seen.add(sc.name);
6147
+ if (!groups.has(sc.group)) groups.set(sc.group, []);
6148
+ groups.get(sc.group).push(sc);
6149
+ }
6150
+ const data = GTA_SCENARIO_GROUP_ORDER.flatMap((g) => {
6151
+ const items = groups.get(g);
6152
+ if (!items || items.length === 0) return [];
6153
+ return [
6154
+ {
6155
+ group: g,
6156
+ items: items.map((sc) => ({
6157
+ value: sc.name,
6158
+ label: sc.label ?? formatGtaScenario(sc.name)
6159
+ }))
6160
+ }
6161
+ ];
6162
+ });
6163
+ const knownNames = new Set(GTA_SCENARIOS.map((sc) => sc.name));
6164
+ const customs = extraNames.filter((n) => n && !knownNames.has(n));
6165
+ if (customs.length > 0) {
6166
+ data.push({
6167
+ group: "Custom",
6168
+ items: customs.map((n) => ({ value: n, label: n }))
6169
+ });
6170
+ }
6171
+ return data;
6172
+ }
6173
+ function ScenarioSelect({
6174
+ value,
6175
+ onChange,
6176
+ label = "Scenario",
6177
+ size = "xs",
6178
+ searchable = true,
6179
+ clearable = true,
6180
+ ...rest
6181
+ }) {
6182
+ const data = buildGroupedData3([value]);
6183
+ return /* @__PURE__ */ jsx(
6184
+ Select,
6185
+ {
6186
+ label,
6187
+ size,
6188
+ searchable,
6189
+ clearable,
6190
+ maxDropdownHeight: 320,
6191
+ nothingFoundMessage: "No matching scenarios",
6192
+ placeholder: "Pick a scenario...",
6193
+ ...rest,
6194
+ data,
6195
+ value: value || null,
6196
+ onChange: (v) => onChange(v ?? "")
6197
+ }
6198
+ );
6199
+ }
6200
+
6201
+ export { AdminPageTitle, AnimPostFxSelect, AsyncSaveButton, BlipColorSelect, BlipDisplaySelect, BlipIconSelect, BorderedIcon, ConfigPanel, ConfirmModal, ControlMultiSelect, ControlSelect, Counter, FiveMKeyBindInput, FloatingParticles, GroupName, GroupRank, GroupSelect, InfoBox, InputContainer, LevelBanner, LevelPanel, MissingItemsBanner, Modal, ModalContext, ModalProvider, MotionFlex, MotionIcon, MotionImage, MotionText, NavBar, NavigationContext, NavigationProvider, PositionPicker, PromptModal, ScenarioSelect, SegmentedControl, SegmentedProgress, SelectItem, SwitchPanel, TestBed, ThemeOverrideSection, Title, Vector4DeleteButton, Vector4Display, WorldPositionGotoButton, WorldPositionSetButton, useMissingItemsAudit, useModal, useModalActions, useNavigation, useNavigationStore };
5831
6202
  //# sourceMappingURL=index.js.map
5832
6203
  //# sourceMappingURL=index.js.map