@decky/ui 4.11.6 → 4.12.0

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.
@@ -13,6 +13,7 @@ export type ReorderableListProps<T> = {
13
13
  }>;
14
14
  fieldProps?: FieldProps;
15
15
  animate?: boolean;
16
+ disableReordering?: boolean;
16
17
  };
17
18
  export declare function ReorderableList<T>(props: ReorderableListProps<T>): import("react/jsx-runtime").JSX.Element;
18
19
  export type ReorderableListEntryProps<T> = {
@@ -9,7 +9,15 @@ export function ReorderableList(props) {
9
9
  useEffect(() => {
10
10
  setEntryList([...props.entries].sort((a, b) => a.position - b.position));
11
11
  }, [props.entries]);
12
+ useEffect(() => {
13
+ if (props.disableReordering && reorderEnabled) {
14
+ setReorderEnabled(false);
15
+ props.onSave(entryList);
16
+ }
17
+ }, [props.disableReordering, reorderEnabled, entryList]);
12
18
  function toggleReorderEnabled() {
19
+ if (props.disableReordering)
20
+ return;
13
21
  let newReorderValue = !reorderEnabled;
14
22
  setReorderEnabled(newReorderValue);
15
23
  if (!newReorderValue) {
@@ -32,7 +40,7 @@ export function ReorderableList(props) {
32
40
  flexDirection: 'column',
33
41
  justifyContent: 'flex-start',
34
42
  alignContent: 'stretch',
35
- }, children: _jsx(Focusable, { onSecondaryButton: toggleReorderEnabled, onSecondaryActionDescription: reorderEnabled ? 'Save Order' : 'Reorder', onClick: toggleReorderEnabled, onButtonDown: saveOnBackout, children: entryList.map((entry) => (_jsx(ReorderableItem, { animate: props.animate, listData: entryList, entryData: entry, reorderEntryFunc: setEntryList, reorderEnabled: reorderEnabled, fieldProps: props.fieldProps, children: props.interactables ? _jsx(props.interactables, { entry: entry }) : null }))) }) }) }));
43
+ }, children: _jsx(Focusable, { onSecondaryButton: props.disableReordering ? undefined : toggleReorderEnabled, onSecondaryActionDescription: props.disableReordering ? undefined : reorderEnabled ? 'Save Order' : 'Reorder', onClick: props.disableReordering ? undefined : toggleReorderEnabled, onButtonDown: saveOnBackout, children: entryList.map((entry) => (_jsx(ReorderableItem, { animate: props.animate, listData: entryList, entryData: entry, reorderEntryFunc: setEntryList, reorderEnabled: reorderEnabled, fieldProps: props.fieldProps, children: props.interactables ? _jsx(props.interactables, { entry: entry }) : null }))) }) }) }));
36
44
  }
37
45
  function ReorderableItem(props) {
38
46
  const [isSelected, _setIsSelected] = useState(false);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decky/ui",
3
- "version": "4.11.6",
3
+ "version": "4.12.0",
4
4
  "description": "A library for interacting with the Steam frontend in Decky plugins and elsewhere.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,6 +18,7 @@ export type ReorderableEntry<T> = {
18
18
  * Properties for a ReorderableList component of type <T>.
19
19
  *
20
20
  * @param animate If the list should animate. @default true
21
+ * @param disableReordering If true, prevents entering reordering mode and hides reorder instructions. @default false
21
22
  */
22
23
  export type ReorderableListProps<T> = {
23
24
  entries: ReorderableEntry<T>[];
@@ -25,6 +26,7 @@ export type ReorderableListProps<T> = {
25
26
  interactables?: JSXElementConstructor<{ entry: ReorderableEntry<T> }>;
26
27
  fieldProps?: FieldProps;
27
28
  animate?: boolean;
29
+ disableReordering?: boolean;
28
30
  };
29
31
 
30
32
  /**
@@ -43,7 +45,16 @@ export function ReorderableList<T>(props: ReorderableListProps<T>) {
43
45
  setEntryList([...props.entries].sort((a: ReorderableEntry<T>, b: ReorderableEntry<T>) => a.position - b.position));
44
46
  }, [props.entries]);
45
47
 
48
+ useEffect(() => {
49
+ if (props.disableReordering && reorderEnabled) {
50
+ setReorderEnabled(false);
51
+ props.onSave(entryList);
52
+ }
53
+ }, [props.disableReordering, reorderEnabled, entryList]);
54
+
46
55
  function toggleReorderEnabled(): void {
56
+ if (props.disableReordering) return;
57
+
47
58
  let newReorderValue = !reorderEnabled;
48
59
  setReorderEnabled(newReorderValue);
49
60
 
@@ -75,9 +86,9 @@ export function ReorderableList<T>(props: ReorderableListProps<T>) {
75
86
  }}
76
87
  >
77
88
  <Focusable
78
- onSecondaryButton={toggleReorderEnabled}
79
- onSecondaryActionDescription={reorderEnabled ? 'Save Order' : 'Reorder'}
80
- onClick={toggleReorderEnabled}
89
+ onSecondaryButton={props.disableReordering ? undefined : toggleReorderEnabled}
90
+ onSecondaryActionDescription={props.disableReordering ? undefined : reorderEnabled ? 'Save Order' : 'Reorder'}
91
+ onClick={props.disableReordering ? undefined : toggleReorderEnabled}
81
92
  onButtonDown={saveOnBackout}
82
93
  >
83
94
  {entryList.map((entry: ReorderableEntry<T>) => (