dirk-cfx-react 1.1.78 → 1.1.80

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.
@@ -971,6 +971,15 @@ type AdminPageTitleProps = {
971
971
  };
972
972
  declare function AdminPageTitle(props: AdminPageTitleProps): react_jsx_runtime.JSX.Element;
973
973
 
974
+ type SwitchPanelProps = {
975
+ label: ReactNode;
976
+ description?: ReactNode;
977
+ checked: boolean;
978
+ onChange: (v: boolean) => void;
979
+ disabled?: boolean;
980
+ };
981
+ declare function SwitchPanel({ label, description, checked, onChange, disabled }: SwitchPanelProps): react_jsx_runtime.JSX.Element;
982
+
974
983
  type MissingItem = {
975
984
  name: string;
976
985
  label?: string;
@@ -1034,4 +1043,11 @@ type ThemeOverrideSectionProps = {
1034
1043
  };
1035
1044
  declare function ThemeOverrideSection({ schemaKey, title, }: ThemeOverrideSectionProps): react_jsx_runtime.JSX.Element;
1036
1045
 
1037
- export { AdminPageTitle, type AdminPageTitleProps, 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, 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 };
1046
+ type AnimPostFxSelectProps = Omit<SelectProps, "data" | "value" | "onChange"> & {
1047
+ /** Current effect name. Empty string = no effect selected. */
1048
+ value: string;
1049
+ onChange: (name: string) => void;
1050
+ };
1051
+ declare function AnimPostFxSelect({ value, onChange, label, size, searchable, clearable, ...rest }: AnimPostFxSelectProps): react_jsx_runtime.JSX.Element;
1052
+
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 };
@@ -971,6 +971,15 @@ type AdminPageTitleProps = {
971
971
  };
972
972
  declare function AdminPageTitle(props: AdminPageTitleProps): react_jsx_runtime.JSX.Element;
973
973
 
974
+ type SwitchPanelProps = {
975
+ label: ReactNode;
976
+ description?: ReactNode;
977
+ checked: boolean;
978
+ onChange: (v: boolean) => void;
979
+ disabled?: boolean;
980
+ };
981
+ declare function SwitchPanel({ label, description, checked, onChange, disabled }: SwitchPanelProps): react_jsx_runtime.JSX.Element;
982
+
974
983
  type MissingItem = {
975
984
  name: string;
976
985
  label?: string;
@@ -1034,4 +1043,11 @@ type ThemeOverrideSectionProps = {
1034
1043
  };
1035
1044
  declare function ThemeOverrideSection({ schemaKey, title, }: ThemeOverrideSectionProps): react_jsx_runtime.JSX.Element;
1036
1045
 
1037
- export { AdminPageTitle, type AdminPageTitleProps, 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, 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 };
1046
+ type AnimPostFxSelectProps = Omit<SelectProps, "data" | "value" | "onChange"> & {
1047
+ /** Current effect name. Empty string = no effect selected. */
1048
+ value: string;
1049
+ onChange: (name: string) => void;
1050
+ };
1051
+ declare function AnimPostFxSelect({ value, onChange, label, size, searchable, clearable, ...rest }: AnimPostFxSelectProps): react_jsx_runtime.JSX.Element;
1052
+
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 };
@@ -1,4 +1,4 @@
1
- import { Flex, Text, Image, TextInput, Select, Box, useMantineTheme, Tooltip, alpha, Progress, RingProgress, Portal, Button, NumberInput, MultiSelect, Loader, ActionIcon, Stack, Switch, ColorInput, Popover, Group, JsonInput } from '@mantine/core';
1
+ import { Flex, Text, Image, TextInput, Select, Box, useMantineTheme, Tooltip, alpha, Progress, RingProgress, Portal, Button, NumberInput, MultiSelect, Loader, Switch, ActionIcon, Stack, ColorInput, Popover, Group, JsonInput } from '@mantine/core';
2
2
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
3
  import { createContext, useContext, useRef, useState, useEffect, useCallback, useMemo } from 'react';
4
4
  import { create, useStore, createStore } from 'zustand';
@@ -1230,11 +1230,11 @@ var colorNames = {
1230
1230
  Yellow: { r: 255, g: 255, b: 0 },
1231
1231
  YellowGreen: { r: 154, g: 205, b: 50 }
1232
1232
  };
1233
- function colorWithAlpha(color, alpha10) {
1233
+ function colorWithAlpha(color, alpha11) {
1234
1234
  const lowerCasedColor = color.toLowerCase();
1235
1235
  if (colorNames[lowerCasedColor]) {
1236
1236
  const rgb = colorNames[lowerCasedColor];
1237
- return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha10})`;
1237
+ return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha11})`;
1238
1238
  }
1239
1239
  if (/^#([A-Fa-f0-9]{6})$/.test(color)) {
1240
1240
  const hex = color.slice(1);
@@ -1242,12 +1242,12 @@ function colorWithAlpha(color, alpha10) {
1242
1242
  const r = bigint >> 16 & 255;
1243
1243
  const g = bigint >> 8 & 255;
1244
1244
  const b = bigint & 255;
1245
- return `rgba(${r}, ${g}, ${b}, ${alpha10})`;
1245
+ return `rgba(${r}, ${g}, ${b}, ${alpha11})`;
1246
1246
  }
1247
1247
  if (/^rgb\((\d{1,3}), (\d{1,3}), (\d{1,3})\)$/.test(color)) {
1248
1248
  const result = color.match(/^rgb\((\d{1,3}), (\d{1,3}), (\d{1,3})\)$/);
1249
1249
  if (result) {
1250
- return `rgba(${result[1]}, ${result[2]}, ${result[3]}, ${alpha10})`;
1250
+ return `rgba(${result[1]}, ${result[2]}, ${result[3]}, ${alpha11})`;
1251
1251
  }
1252
1252
  }
1253
1253
  return color;
@@ -5125,6 +5125,45 @@ 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 }) {
5129
+ const theme = useMantineTheme();
5130
+ const pc = theme.colors[theme.primaryColor];
5131
+ return /* @__PURE__ */ jsxs(
5132
+ Flex,
5133
+ {
5134
+ justify: "space-between",
5135
+ align: "center",
5136
+ p: "xs",
5137
+ style: {
5138
+ background: alpha(theme.colors.dark[5], 0.35),
5139
+ border: "0.1vh solid rgba(255,255,255,0.05)",
5140
+ borderRadius: theme.radius.xs,
5141
+ opacity: disabled ? 0.5 : 1
5142
+ },
5143
+ children: [
5144
+ /* @__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)
5147
+ ] }),
5148
+ /* @__PURE__ */ jsx(
5149
+ Switch,
5150
+ {
5151
+ checked,
5152
+ disabled,
5153
+ onChange: (e) => onChange(e.currentTarget.checked),
5154
+ size: "md",
5155
+ styles: {
5156
+ track: {
5157
+ background: checked ? alpha(pc[6], 0.4) : "rgba(255,255,255,0.08)",
5158
+ borderColor: checked ? alpha(pc[6], 0.6) : "rgba(255,255,255,0.1)"
5159
+ }
5160
+ }
5161
+ }
5162
+ )
5163
+ ]
5164
+ }
5165
+ );
5166
+ }
5128
5167
  var placementStyle = (placement) => {
5129
5168
  switch (placement) {
5130
5169
  case "top-center":
@@ -5375,32 +5414,13 @@ function ThemeOverrideSection({
5375
5414
  color
5376
5415
  }
5377
5416
  ),
5378
- /* @__PURE__ */ jsxs(
5379
- Flex,
5417
+ /* @__PURE__ */ jsx(
5418
+ SwitchPanel,
5380
5419
  {
5381
- align: "center",
5382
- justify: "space-between",
5383
- p: "xs",
5384
- style: {
5385
- background: `rgba(255,255,255,${editable ? 0.04 : 0.02})`,
5386
- border: `0.1vh solid ${editable ? color : "rgba(255,255,255,0.08)"}`,
5387
- borderRadius: mantineTheme.radius.xs,
5388
- transition: "background 0.15s, border-color 0.15s"
5389
- },
5390
- children: [
5391
- /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "xxs", style: { flex: 1, minWidth: 0 }, children: [
5392
- /* @__PURE__ */ jsx(Text, { ff: "Akrobat Bold", size: "xs", c: "rgba(255,255,255,0.9)", children: locale("OverrideGlobalTheme") || "Override global theme" }),
5393
- /* @__PURE__ */ jsx(Text, { ff: "Akrobat Bold", size: "xxs", c: "rgba(255,255,255,0.4)", children: locale("OverrideGlobalThemeDesc") || "When on, this resource uses its own primary colour and palette instead of dirk_lib's. Turn off to fall back to the global theme \u2014 your custom palette is kept." })
5394
- ] }),
5395
- /* @__PURE__ */ jsx(
5396
- Switch,
5397
- {
5398
- size: "md",
5399
- checked: value.useOverride,
5400
- onChange: (e) => set("useOverride", e.currentTarget.checked)
5401
- }
5402
- )
5403
- ]
5420
+ label: locale("OverrideGlobalTheme") || "Override global theme",
5421
+ description: locale("OverrideGlobalThemeDesc") || "When on, this resource uses its own primary colour and palette instead of dirk_lib's. Turn off to fall back to the global theme \u2014 your custom palette is kept.",
5422
+ checked: value.useOverride,
5423
+ onChange: (v) => set("useOverride", v)
5404
5424
  }
5405
5425
  ),
5406
5426
  /* @__PURE__ */ jsxs(
@@ -5567,6 +5587,246 @@ function SwatchTile({
5567
5587
  ] });
5568
5588
  }
5569
5589
 
5570
- export { AdminPageTitle, 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, TestBed, ThemeOverrideSection, Title, Vector4DeleteButton, Vector4Display, WorldPositionGotoButton, WorldPositionSetButton, useMissingItemsAudit, useModal, useModalActions, useNavigation, useNavigationStore };
5590
+ // src/utils/gtaAnimPostFx.ts
5591
+ var GTA_ANIM_POST_FX_GROUP_ORDER = [
5592
+ "Wake Up / Sleep",
5593
+ "Character Switch",
5594
+ "Cinematic Push-In",
5595
+ "Death / Fail",
5596
+ "Heist",
5597
+ "Minigame",
5598
+ "Drug / Trip",
5599
+ "Color Filter / Tint",
5600
+ "Multiplayer",
5601
+ "Misc"
5602
+ ];
5603
+ var GTA_ANIM_POST_FX = [
5604
+ // ── Wake Up / Sleep (community-known; not in altV docs) ────────────────────
5605
+ { name: "ULP_PlayerWakeUp", label: "Player Wake Up", group: "Wake Up / Sleep" },
5606
+ { name: "MinigameEndNeutral", label: "Minigame End \u2014 Neutral", group: "Wake Up / Sleep" },
5607
+ { name: "MinigameEndFranklin", label: "Minigame End \u2014 Franklin", group: "Wake Up / Sleep" },
5608
+ { name: "MinigameEndMichael", label: "Minigame End \u2014 Michael", group: "Wake Up / Sleep" },
5609
+ { name: "MinigameEndTrevor", label: "Minigame End \u2014 Trevor", group: "Wake Up / Sleep" },
5610
+ // ── Character Switch (Franklin / Michael / Trevor / Neutral variants) ─────
5611
+ { name: "SwitchHUDIn", group: "Character Switch" },
5612
+ { name: "SwitchHUDOut", group: "Character Switch" },
5613
+ { name: "SwitchHUDFranklinIn", group: "Character Switch" },
5614
+ { name: "SwitchHUDFranklinOut", group: "Character Switch" },
5615
+ { name: "SwitchHUDMichaelIn", group: "Character Switch" },
5616
+ { name: "SwitchHUDMichaelOut", group: "Character Switch" },
5617
+ { name: "SwitchHUDTrevorIn", group: "Character Switch" },
5618
+ { name: "SwitchHUDTrevorOut", group: "Character Switch" },
5619
+ { name: "SwitchOpenFranklin", group: "Character Switch" },
5620
+ { name: "SwitchOpenFranklinIn", group: "Character Switch" },
5621
+ { name: "SwitchOpenFranklinOut", group: "Character Switch" },
5622
+ { name: "SwitchOpenMichaelIn", group: "Character Switch" },
5623
+ { name: "SwitchOpenMichaelMid", group: "Character Switch" },
5624
+ { name: "SwitchOpenMichaelOut", group: "Character Switch" },
5625
+ { name: "SwitchOpenTrevorIn", group: "Character Switch" },
5626
+ { name: "SwitchOpenTrevorOut", group: "Character Switch" },
5627
+ { name: "SwitchOpenNeutralFIB5", group: "Character Switch" },
5628
+ { name: "SwitchOpenNeutralOutHeist", group: "Character Switch" },
5629
+ { name: "SwitchSceneFranklin", group: "Character Switch" },
5630
+ { name: "SwitchSceneMichael", group: "Character Switch" },
5631
+ { name: "SwitchSceneNeutral", group: "Character Switch" },
5632
+ { name: "SwitchSceneTrevor", group: "Character Switch" },
5633
+ { name: "SwitchShortFranklinIn", group: "Character Switch" },
5634
+ { name: "SwitchShortFranklinMid", group: "Character Switch" },
5635
+ { name: "SwitchShortMichaelIn", group: "Character Switch" },
5636
+ { name: "SwitchShortMichaelMid", group: "Character Switch" },
5637
+ { name: "SwitchShortNeutralIn", group: "Character Switch" },
5638
+ { name: "SwitchShortNeutralMid", group: "Character Switch" },
5639
+ { name: "SwitchShortTrevorIn", group: "Character Switch" },
5640
+ { name: "SwitchShortTrevorMid", group: "Character Switch" },
5641
+ { name: "switch_cam_1", group: "Character Switch" },
5642
+ { name: "switch_cam_2", group: "Character Switch" },
5643
+ // ── Cinematic Push-In (slow zoom intro to a character) ────────────────────
5644
+ { name: "CamPushInFranklin", group: "Cinematic Push-In" },
5645
+ { name: "CamPushInMichael", group: "Cinematic Push-In" },
5646
+ { name: "CamPushInTrevor", group: "Cinematic Push-In" },
5647
+ { name: "CamPushInNeutral", group: "Cinematic Push-In" },
5648
+ { name: "BeastIntroScene", label: "Beast Intro", group: "Cinematic Push-In" },
5649
+ { name: "BeastLaunch", group: "Cinematic Push-In" },
5650
+ { name: "BeastTransition", group: "Cinematic Push-In" },
5651
+ // ── Death / Fail (red tint, slow-mo blur) ─────────────────────────────────
5652
+ { name: "DeathFailNeutralIn", group: "Death / Fail" },
5653
+ { name: "DeathFailFranklinIn", group: "Death / Fail" },
5654
+ { name: "DeathFailMichaelIn", group: "Death / Fail" },
5655
+ { name: "DeathFailTrevorIn", group: "Death / Fail" },
5656
+ { name: "DeathFailMPIn", label: "Death Fail \u2014 MP", group: "Death / Fail" },
5657
+ { name: "DeathFailMPDark", label: "Death Fail \u2014 MP Dark", group: "Death / Fail" },
5658
+ { name: "DeathFailOut", group: "Death / Fail" },
5659
+ { name: "Rampage", group: "Death / Fail" },
5660
+ { name: "RampageOut", group: "Death / Fail" },
5661
+ // ── Heist (celebration / locate / pass) ───────────────────────────────────
5662
+ { name: "HeistCelebEnd", group: "Heist" },
5663
+ { name: "HeistCelebPass", group: "Heist" },
5664
+ { name: "HeistCelebPassBW", label: "Heist Celeb Pass (B/W)", group: "Heist" },
5665
+ { name: "HeistCelebToast", group: "Heist" },
5666
+ { name: "HeistLocate", group: "Heist" },
5667
+ { name: "HeistTripSkipFade", group: "Heist" },
5668
+ // ── Minigame / Menu ───────────────────────────────────────────────────────
5669
+ { name: "MenuMGIn", group: "Minigame" },
5670
+ { name: "MenuMGHeistIn", group: "Minigame" },
5671
+ { name: "MenuMGHeistIntro", group: "Minigame" },
5672
+ { name: "MenuMGHeistOut", group: "Minigame" },
5673
+ { name: "MenuMGHeistTint", group: "Minigame" },
5674
+ { name: "MenuMGSelectionIn", group: "Minigame" },
5675
+ { name: "MenuMGSelectionTint", group: "Minigame" },
5676
+ { name: "MenuMGTournamentIn", group: "Minigame" },
5677
+ { name: "MenuMGTournamentTint", group: "Minigame" },
5678
+ { name: "MinigameTransitionIn", group: "Minigame" },
5679
+ { name: "MinigameTransitionOut", group: "Minigame" },
5680
+ // ── Drug / Trip (psychedelic, blur, distortion) ───────────────────────────
5681
+ { name: "DMT_flight", group: "Drug / Trip" },
5682
+ { name: "DMT_flight_intro", group: "Drug / Trip" },
5683
+ { name: "PeyoteIn", group: "Drug / Trip" },
5684
+ { name: "PeyoteOut", group: "Drug / Trip" },
5685
+ { name: "PeyoteEndIn", group: "Drug / Trip" },
5686
+ { name: "PeyoteEndOut", group: "Drug / Trip" },
5687
+ { name: "DrugsDrivingIn", group: "Drug / Trip" },
5688
+ { name: "DrugsDrivingOut", group: "Drug / Trip" },
5689
+ { name: "DrugsMichaelAliensFight", group: "Drug / Trip" },
5690
+ { name: "DrugsMichaelAliensFightIn", group: "Drug / Trip" },
5691
+ { name: "DrugsMichaelAliensFightOut", group: "Drug / Trip" },
5692
+ { name: "DrugsTrevorClownsFight", group: "Drug / Trip" },
5693
+ { name: "DrugsTrevorClownsFightIn", group: "Drug / Trip" },
5694
+ { name: "DrugsTrevorClownsFightOut", group: "Drug / Trip" },
5695
+ { name: "ChopVision", label: "Chop Vision (dog)", group: "Drug / Trip" },
5696
+ // ── Color Filter / Tint (one-off and biker formation filters) ─────────────
5697
+ { name: "PPFilter", group: "Color Filter / Tint" },
5698
+ { name: "PPFilterOut", group: "Color Filter / Tint" },
5699
+ { name: "PPGreen", group: "Color Filter / Tint" },
5700
+ { name: "PPGreenOut", group: "Color Filter / Tint" },
5701
+ { name: "PPOrange", group: "Color Filter / Tint" },
5702
+ { name: "PPOrangeOut", group: "Color Filter / Tint" },
5703
+ { name: "PPPink", group: "Color Filter / Tint" },
5704
+ { name: "PPPinkOut", group: "Color Filter / Tint" },
5705
+ { name: "PPPurple", group: "Color Filter / Tint" },
5706
+ { name: "PPPurpleOut", group: "Color Filter / Tint" },
5707
+ { name: "BikerFilter", group: "Color Filter / Tint" },
5708
+ { name: "BikerFilterOut", group: "Color Filter / Tint" },
5709
+ { name: "BikerFormation", group: "Color Filter / Tint" },
5710
+ { name: "BikerFormationOut", group: "Color Filter / Tint" },
5711
+ { name: "InchOrange", group: "Color Filter / Tint" },
5712
+ { name: "InchOrangeOut", group: "Color Filter / Tint" },
5713
+ { name: "InchPurple", group: "Color Filter / Tint" },
5714
+ { name: "InchPurpleOut", group: "Color Filter / Tint" },
5715
+ { name: "InchPickup", group: "Color Filter / Tint" },
5716
+ { name: "InchPickupOut", group: "Color Filter / Tint" },
5717
+ { name: "TinyRacerGreen", group: "Color Filter / Tint" },
5718
+ { name: "TinyRacerGreenOut", group: "Color Filter / Tint" },
5719
+ { name: "TinyRacerPink", group: "Color Filter / Tint" },
5720
+ { name: "TinyRacerPinkOut", group: "Color Filter / Tint" },
5721
+ { name: "TinyRacerIntroCam", group: "Color Filter / Tint" },
5722
+ { name: "DeadlineNeon", group: "Color Filter / Tint" },
5723
+ // ── Multiplayer (celeb, killstreak, race, etc.) ───────────────────────────
5724
+ { name: "MP_Celeb_Win", group: "Multiplayer" },
5725
+ { name: "MP_Celeb_Win_Out", group: "Multiplayer" },
5726
+ { name: "MP_Celeb_Lose", group: "Multiplayer" },
5727
+ { name: "MP_Celeb_Lose_Out", group: "Multiplayer" },
5728
+ { name: "MP_Celeb_Preload", group: "Multiplayer" },
5729
+ { name: "MP_Celeb_Preload_Fade", group: "Multiplayer" },
5730
+ { name: "MP_Bull_tost", group: "Multiplayer" },
5731
+ { name: "MP_Bull_tost_Out", group: "Multiplayer" },
5732
+ { name: "MP_Killstreak", group: "Multiplayer" },
5733
+ { name: "MP_Killstreak_Out", group: "Multiplayer" },
5734
+ { name: "MP_Loser_Streak_Out", group: "Multiplayer" },
5735
+ { name: "MP_OrbitalCannon", group: "Multiplayer" },
5736
+ { name: "MP_Powerplay", group: "Multiplayer" },
5737
+ { name: "MP_Powerplay_Out", group: "Multiplayer" },
5738
+ { name: "MP_SmugglerCheckpoint", group: "Multiplayer" },
5739
+ { name: "MP_TransformRaceFlash", group: "Multiplayer" },
5740
+ { name: "MP_WarpCheckpoint", group: "Multiplayer" },
5741
+ { name: "MP_corona_switch", group: "Multiplayer" },
5742
+ { name: "MP_intro_logo", group: "Multiplayer" },
5743
+ { name: "MP_job_load", group: "Multiplayer" },
5744
+ { name: "MP_race_crash", group: "Multiplayer" },
5745
+ // ── Misc (success notifs, special weapons, sniper / pause / explosions) ───
5746
+ { name: "SuccessFranklin", group: "Misc" },
5747
+ { name: "SuccessMichael", group: "Misc" },
5748
+ { name: "SuccessNeutral", group: "Misc" },
5749
+ { name: "SuccessTrevor", group: "Misc" },
5750
+ { name: "FocusIn", group: "Misc" },
5751
+ { name: "FocusOut", group: "Misc" },
5752
+ { name: "CrossLine", group: "Misc" },
5753
+ { name: "CrossLineOut", group: "Misc" },
5754
+ { name: "SniperOverlay", group: "Misc" },
5755
+ { name: "ExplosionJosh3", group: "Misc" },
5756
+ { name: "WeaponUpgrade", group: "Misc" },
5757
+ { name: "Dont_tazeme_bro", label: "Don't Taze Me Bro", group: "Misc" },
5758
+ { name: "LostTimeDay", group: "Misc" },
5759
+ { name: "LostTimeNight", group: "Misc" },
5760
+ { name: "PauseMenuOut", group: "Misc" },
5761
+ { name: "pennedIn", group: "Misc" },
5762
+ { name: "PennedInOut", group: "Misc" },
5763
+ { name: "RaceTurbo", group: "Misc" },
5764
+ { name: "DefaultFlash", group: "Misc" }
5765
+ ];
5766
+ function formatGtaAnimPostFx(name) {
5767
+ const entry = GTA_ANIM_POST_FX.find((fx) => fx.name === name);
5768
+ return entry?.label ?? name;
5769
+ }
5770
+ function buildGroupedData2(extraNames = []) {
5771
+ const groups = /* @__PURE__ */ new Map();
5772
+ const seen = /* @__PURE__ */ new Set();
5773
+ for (const fx of GTA_ANIM_POST_FX) {
5774
+ if (seen.has(fx.name)) continue;
5775
+ seen.add(fx.name);
5776
+ if (!groups.has(fx.group)) groups.set(fx.group, []);
5777
+ groups.get(fx.group).push(fx);
5778
+ }
5779
+ const data = GTA_ANIM_POST_FX_GROUP_ORDER.flatMap((g) => {
5780
+ const items = groups.get(g);
5781
+ if (!items || items.length === 0) return [];
5782
+ return [
5783
+ {
5784
+ group: g,
5785
+ items: items.map((fx) => ({
5786
+ value: fx.name,
5787
+ label: formatGtaAnimPostFx(fx.name)
5788
+ }))
5789
+ }
5790
+ ];
5791
+ });
5792
+ const knownNames = new Set(GTA_ANIM_POST_FX.map((fx) => fx.name));
5793
+ const customs = extraNames.filter((n) => n && !knownNames.has(n));
5794
+ if (customs.length > 0) {
5795
+ data.push({
5796
+ group: "Custom",
5797
+ items: customs.map((n) => ({ value: n, label: n }))
5798
+ });
5799
+ }
5800
+ return data;
5801
+ }
5802
+ function AnimPostFxSelect({
5803
+ value,
5804
+ onChange,
5805
+ label = "Screen FX",
5806
+ size = "xs",
5807
+ searchable = true,
5808
+ clearable = true,
5809
+ ...rest
5810
+ }) {
5811
+ const data = buildGroupedData2([value]);
5812
+ return /* @__PURE__ */ jsx(
5813
+ Select,
5814
+ {
5815
+ label,
5816
+ size,
5817
+ searchable,
5818
+ clearable,
5819
+ maxDropdownHeight: 320,
5820
+ nothingFoundMessage: "No matching effects",
5821
+ placeholder: "Pick an effect...",
5822
+ ...rest,
5823
+ data,
5824
+ value: value || null,
5825
+ onChange: (v) => onChange(v ?? "")
5826
+ }
5827
+ );
5828
+ }
5829
+
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 };
5571
5831
  //# sourceMappingURL=index.js.map
5572
5832
  //# sourceMappingURL=index.js.map