diff --git a/src/api/wired/WiredActionLayoutCode.ts b/src/api/wired/WiredActionLayoutCode.ts index 088818b..f3aa61a 100644 --- a/src/api/wired/WiredActionLayoutCode.ts +++ b/src/api/wired/WiredActionLayoutCode.ts @@ -84,4 +84,6 @@ export class WiredActionLayoutCode public static VARIABLE_ECHO_EXTRA: number = 83; public static CONTEXT_VARIABLE_EXTRA: number = 84; public static TEXT_INPUT_VARIABLE_EXTRA: number = 85; + public static NEG_CALL_ANOTHER_STACK: number = 86; + public static NEG_SEND_SIGNAL: number = 87; } diff --git a/src/assets/images/wired/source_furni.png b/src/assets/images/wired/source_furni.png new file mode 100644 index 0000000..ed7fe4d Binary files /dev/null and b/src/assets/images/wired/source_furni.png differ diff --git a/src/assets/images/wired/source_user.png b/src/assets/images/wired/source_user.png new file mode 100644 index 0000000..8bec80d Binary files /dev/null and b/src/assets/images/wired/source_user.png differ diff --git a/src/assets/images/wired/wired_bg_left.png b/src/assets/images/wired/wired_bg_left.png new file mode 100644 index 0000000..f820798 Binary files /dev/null and b/src/assets/images/wired/wired_bg_left.png differ diff --git a/src/assets/images/wired/wired_bg_right.png b/src/assets/images/wired/wired_bg_right.png new file mode 100644 index 0000000..9588ecd Binary files /dev/null and b/src/assets/images/wired/wired_bg_right.png differ diff --git a/src/components/wired/WiredView.tsx b/src/components/wired/WiredView.tsx index 0f073ab..73d81e2 100644 --- a/src/components/wired/WiredView.tsx +++ b/src/components/wired/WiredView.tsx @@ -1,5 +1,5 @@ import { ConditionDefinition, TriggerDefinition, WiredActionDefinition } from '@nitrots/nitro-renderer'; -import { FC } from 'react'; +import { FC, Fragment } from 'react'; import { useWired } from '../../hooks'; import { WiredActionLayoutView } from './views/actions/WiredActionLayoutView'; import { WiredConditionLayoutView } from './views/conditions/WiredConditionLayoutView'; @@ -11,11 +11,20 @@ export const WiredView: FC<{}> = props => if(!trigger) return null; - if(trigger instanceof WiredActionDefinition) return WiredActionLayoutView(trigger.code); + if(trigger instanceof WiredActionDefinition) + { + return { WiredActionLayoutView(trigger.code) }; + } - if(trigger instanceof TriggerDefinition) return WiredTriggerLayoutView(trigger.code); + if(trigger instanceof TriggerDefinition) + { + return { WiredTriggerLayoutView(trigger.code) }; + } - if(trigger instanceof ConditionDefinition) return WiredConditionLayoutView(trigger.code); + if(trigger instanceof ConditionDefinition) + { + return { WiredConditionLayoutView(trigger.code) }; + } return null; }; diff --git a/src/components/wired/views/WiredBaseView.tsx b/src/components/wired/views/WiredBaseView.tsx index 681cb4b..0858b71 100644 --- a/src/components/wired/views/WiredBaseView.tsx +++ b/src/components/wired/views/WiredBaseView.tsx @@ -1,6 +1,8 @@ import { GetRoomEngine, GetSessionDataManager } from '@nitrots/nitro-renderer'; import { CSSProperties, FC, PropsWithChildren, ReactNode, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType, WiredSelectionVisualizer } from '../../../api'; +import wiredBgLeft from '../../../assets/images/wired/wired_bg_left.png'; +import wiredBgRight from '../../../assets/images/wired/wired_bg_right.png'; import { Button, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../common'; import { useWired, useWiredTools } from '../../../hooks'; import { WiredFurniSelectorView } from './WiredFurniSelectorView'; @@ -20,6 +22,7 @@ export interface WiredBaseViewProps export const WiredBaseView: FC> = props => { + const WIRED_CARD_WIDTH = 244; const { wiredType = '', requiresFurni = WiredFurniType.STUFF_SELECTION_OPTION_NONE, save = null, validate = null, children = null, hasSpecialInput = false, cardStyle = undefined, footer = null, footerCollapsible = true, selectionPreview = null } = props; const [ wiredName, setWiredName ] = useState(null); const [ needsSave, setNeedsSave ] = useState(false); @@ -122,64 +125,53 @@ export const WiredBaseView: FC> = props => const resolvedCardStyle: CSSProperties = { ...cardStyle }; - if(resolvedCardStyle.width !== undefined) - { - if(typeof resolvedCardStyle.width === 'number') - { - resolvedCardStyle.maxWidth = Math.min(resolvedCardStyle.width, 324); - } - else if(typeof resolvedCardStyle.width === 'string') - { - const match = resolvedCardStyle.width.trim().match(/^(\d+(?:\.\d+)?)px$/i); - - resolvedCardStyle.maxWidth = match ? `${ Math.min(parseFloat(match[1]), 324) }px` : resolvedCardStyle.width; - } - - delete resolvedCardStyle.width; - } - - if(resolvedCardStyle.minWidth === undefined) resolvedCardStyle.minWidth = 216; - if(resolvedCardStyle.maxWidth === undefined) resolvedCardStyle.maxWidth = 'min(90vw, 324px)'; + resolvedCardStyle.width = WIRED_CARD_WIDTH; + resolvedCardStyle.minWidth = WIRED_CARD_WIDTH; + resolvedCardStyle.maxWidth = WIRED_CARD_WIDTH; + resolvedCardStyle.resize = 'none'; return ( - +
-
- + + +
{ wiredName }
- { !!children &&
} - { !!children &&
{ children }
} - { (requiresFurni > WiredFurniType.STUFF_SELECTION_OPTION_NONE) && - <> -
-
- { selectionPreview || } -
- } - { footer && - <> -
-
- { footerCollapsible - ? ( - <> - - { showFooter &&
{ footer }
} - - ) - : footer } -
- } -
-
- - +
+ { !!children &&
} + { !!children &&
{ children }
} + { (requiresFurni > WiredFurniType.STUFF_SELECTION_OPTION_NONE) && + <> +
+
+ { selectionPreview || } +
+ } + { footer && + <> +
+
+ { footerCollapsible + ? ( + <> + + { showFooter &&
{ footer }
} + + ) + : footer } +
+ } +
+
+ + +
diff --git a/src/components/wired/views/WiredFurniSelectionSourceRow.tsx b/src/components/wired/views/WiredFurniSelectionSourceRow.tsx index b064d80..3037205 100644 --- a/src/components/wired/views/WiredFurniSelectionSourceRow.tsx +++ b/src/components/wired/views/WiredFurniSelectionSourceRow.tsx @@ -1,4 +1,4 @@ -import { FC } from 'react'; +import { FC, ReactNode } from 'react'; import { FaChevronLeft, FaChevronRight, FaMousePointer } from 'react-icons/fa'; import { LocalizeText } from '../../../api'; import { Button, Text } from '../../../common'; @@ -16,13 +16,14 @@ interface WiredFurniSelectionSourceRowProps selectionLimit: number; selectionEnabledValues: number[]; showSelectionToggle?: boolean; + headerContent?: ReactNode; onChange: (value: number) => void; onSelectionActivate?: () => void; } export const WiredFurniSelectionSourceRow: FC = props => { - const { title = '', titleIsLiteral = false, options = [], value = 0, selectionKind = 'primary', selectionActive = false, selectionCount = 0, selectionLimit = 0, selectionEnabledValues = [], showSelectionToggle = true, onChange = null, onSelectionActivate = null } = props; + const { title = '', titleIsLiteral = false, options = [], value = 0, selectionKind = 'primary', selectionActive = false, selectionCount = 0, selectionLimit = 0, selectionEnabledValues = [], showSelectionToggle = true, headerContent = null, onChange = null, onSelectionActivate = null } = props; const currentIndex = Math.max(0, options.findIndex(option => (option.value === value))); const currentOption = options[currentIndex] ?? options[0]; const canActivateSelection = !!onSelectionActivate && selectionEnabledValues.includes(currentOption?.value); @@ -45,6 +46,7 @@ export const WiredFurniSelectionSourceRow: FC
{ resolvedTitle } + { headerContent } { showSelectionToggle &&