jbilcke-hf HF staff commited on
Commit
0be4978
·
1 Parent(s): 4251a28

add toggle for the debug mode

Browse files
package-lock.json CHANGED
@@ -18,11 +18,13 @@
18
  "@radix-ui/react-dialog": "^1.0.4",
19
  "@radix-ui/react-dropdown-menu": "^2.0.5",
20
  "@radix-ui/react-icons": "^1.3.0",
 
21
  "@radix-ui/react-menubar": "^1.0.3",
22
  "@radix-ui/react-popover": "^1.0.6",
23
  "@radix-ui/react-select": "^1.2.2",
24
  "@radix-ui/react-separator": "^1.0.3",
25
  "@radix-ui/react-slot": "^1.0.2",
 
26
  "@silevis/reactgrid": "^4.0.5",
27
  "@tanstack/react-query": "^4.30.0",
28
  "@tanstack/react-table": "^8.9.3",
@@ -1048,6 +1050,29 @@
1048
  }
1049
  }
1050
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1051
  "node_modules/@radix-ui/react-menu": {
1052
  "version": "2.0.5",
1053
  "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.5.tgz",
@@ -1374,6 +1399,35 @@
1374
  }
1375
  }
1376
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1377
  "node_modules/@radix-ui/react-use-callback-ref": {
1378
  "version": "1.0.1",
1379
  "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz",
 
18
  "@radix-ui/react-dialog": "^1.0.4",
19
  "@radix-ui/react-dropdown-menu": "^2.0.5",
20
  "@radix-ui/react-icons": "^1.3.0",
21
+ "@radix-ui/react-label": "^2.0.2",
22
  "@radix-ui/react-menubar": "^1.0.3",
23
  "@radix-ui/react-popover": "^1.0.6",
24
  "@radix-ui/react-select": "^1.2.2",
25
  "@radix-ui/react-separator": "^1.0.3",
26
  "@radix-ui/react-slot": "^1.0.2",
27
+ "@radix-ui/react-switch": "^1.0.3",
28
  "@silevis/reactgrid": "^4.0.5",
29
  "@tanstack/react-query": "^4.30.0",
30
  "@tanstack/react-table": "^8.9.3",
 
1050
  }
1051
  }
1052
  },
1053
+ "node_modules/@radix-ui/react-label": {
1054
+ "version": "2.0.2",
1055
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.0.2.tgz",
1056
+ "integrity": "sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==",
1057
+ "dependencies": {
1058
+ "@babel/runtime": "^7.13.10",
1059
+ "@radix-ui/react-primitive": "1.0.3"
1060
+ },
1061
+ "peerDependencies": {
1062
+ "@types/react": "*",
1063
+ "@types/react-dom": "*",
1064
+ "react": "^16.8 || ^17.0 || ^18.0",
1065
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
1066
+ },
1067
+ "peerDependenciesMeta": {
1068
+ "@types/react": {
1069
+ "optional": true
1070
+ },
1071
+ "@types/react-dom": {
1072
+ "optional": true
1073
+ }
1074
+ }
1075
+ },
1076
  "node_modules/@radix-ui/react-menu": {
1077
  "version": "2.0.5",
1078
  "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.5.tgz",
 
1399
  }
1400
  }
1401
  },
1402
+ "node_modules/@radix-ui/react-switch": {
1403
+ "version": "1.0.3",
1404
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.0.3.tgz",
1405
+ "integrity": "sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==",
1406
+ "dependencies": {
1407
+ "@babel/runtime": "^7.13.10",
1408
+ "@radix-ui/primitive": "1.0.1",
1409
+ "@radix-ui/react-compose-refs": "1.0.1",
1410
+ "@radix-ui/react-context": "1.0.1",
1411
+ "@radix-ui/react-primitive": "1.0.3",
1412
+ "@radix-ui/react-use-controllable-state": "1.0.1",
1413
+ "@radix-ui/react-use-previous": "1.0.1",
1414
+ "@radix-ui/react-use-size": "1.0.1"
1415
+ },
1416
+ "peerDependencies": {
1417
+ "@types/react": "*",
1418
+ "@types/react-dom": "*",
1419
+ "react": "^16.8 || ^17.0 || ^18.0",
1420
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
1421
+ },
1422
+ "peerDependenciesMeta": {
1423
+ "@types/react": {
1424
+ "optional": true
1425
+ },
1426
+ "@types/react-dom": {
1427
+ "optional": true
1428
+ }
1429
+ }
1430
+ },
1431
  "node_modules/@radix-ui/react-use-callback-ref": {
1432
  "version": "1.0.1",
1433
  "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz",
package.json CHANGED
@@ -19,11 +19,13 @@
19
  "@radix-ui/react-dialog": "^1.0.4",
20
  "@radix-ui/react-dropdown-menu": "^2.0.5",
21
  "@radix-ui/react-icons": "^1.3.0",
 
22
  "@radix-ui/react-menubar": "^1.0.3",
23
  "@radix-ui/react-popover": "^1.0.6",
24
  "@radix-ui/react-select": "^1.2.2",
25
  "@radix-ui/react-separator": "^1.0.3",
26
  "@radix-ui/react-slot": "^1.0.2",
 
27
  "@silevis/reactgrid": "^4.0.5",
28
  "@tanstack/react-query": "^4.30.0",
29
  "@tanstack/react-table": "^8.9.3",
 
19
  "@radix-ui/react-dialog": "^1.0.4",
20
  "@radix-ui/react-dropdown-menu": "^2.0.5",
21
  "@radix-ui/react-icons": "^1.3.0",
22
+ "@radix-ui/react-label": "^2.0.2",
23
  "@radix-ui/react-menubar": "^1.0.3",
24
  "@radix-ui/react-popover": "^1.0.6",
25
  "@radix-ui/react-select": "^1.2.2",
26
  "@radix-ui/react-separator": "^1.0.3",
27
  "@radix-ui/react-slot": "^1.0.2",
28
+ "@radix-ui/react-switch": "^1.0.3",
29
  "@silevis/reactgrid": "^4.0.5",
30
  "@tanstack/react-query": "^4.30.0",
31
  "@tanstack/react-table": "^8.9.3",
src/app/main.tsx CHANGED
@@ -13,9 +13,10 @@ import {
13
  SelectTrigger,
14
  SelectValue,
15
  } from "@/components/ui/select"
 
 
16
 
17
  import { newRender, getRender } from "./render"
18
-
19
  import { RenderedScene } from "./types"
20
  import { Game, GameType } from "./games/types"
21
  import { defaultGame, games, getGame } from "./games"
@@ -47,7 +48,8 @@ export default function Main() {
47
  const requestedEngine = (searchParams.get('engine') as EngineType) || defaultEngine
48
  const [engine, setEngine] = useState<Engine>(getEngine(requestedEngine))
49
 
50
- const debug = (searchParams.get('debug') === "true")
 
51
 
52
  const [situation, setSituation] = useState("")
53
 
@@ -190,6 +192,22 @@ export default function Main() {
190
 
191
  const clickables = Array.from(new Set(rendered.segments.map(s => s.label)).values())
192
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
  const handleSelectGame = (newGameType: GameType) => {
194
  gameRef.current = newGameType
195
  setGame(getGame(newGameType))
@@ -233,11 +251,11 @@ export default function Main() {
233
  router.replace(`${pathname}${query}`, { })
234
 
235
  // workaround.. but it is strange that router.replace doesn't work..
236
- // let newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + '?' + search.toString()
237
- // window.history.pushState({path: newurl}, '', newurl)
238
 
239
  // actually we don't handle partial reload very well, so let's reload the whole page
240
- window.location = `${window.location.protocol + "//" + window.location.host + window.location.pathname + '?' + search.toString()}` as any
241
  }
242
 
243
  // determine when to show the spinner
@@ -249,7 +267,7 @@ export default function Main() {
249
  >
250
  <div className="flex flex-row w-full justify-between items-center px-2 py-2 border-b-1 border-gray-50 dark:border-gray-50 bg-gray-800 dark:bg-gray-800">
251
  <div className="flex flex-row items-center space-x-3 font-mono">
252
- <label className="flex text-sm">Select a story:</label>
253
  <Select
254
  defaultValue={gameRef.current}
255
  onValueChange={(value) => { handleSelectGame(value as GameType) }}>
@@ -258,13 +276,21 @@ export default function Main() {
258
  </SelectTrigger>
259
  <SelectContent>
260
  {Object.entries(games).map(([key, game]) =>
261
- <SelectItem key={key} value={key}>{game.title}</SelectItem>
262
  )}
263
  </SelectContent>
264
  </Select>
265
  </div>
266
  <div className="flex flex-row items-center space-x-3 font-mono">
267
- <label className="flex text-sm">Rendering engine:</label>
 
 
 
 
 
 
 
 
268
  <Select
269
  defaultValue={engine.type}
270
  onValueChange={(value) => { handleSelectEngine(value as EngineType) }}>
 
13
  SelectTrigger,
14
  SelectValue,
15
  } from "@/components/ui/select"
16
+ import { Switch } from "@/components/ui/switch"
17
+ import { Label } from "@/components/ui/label"
18
 
19
  import { newRender, getRender } from "./render"
 
20
  import { RenderedScene } from "./types"
21
  import { Game, GameType } from "./games/types"
22
  import { defaultGame, games, getGame } from "./games"
 
48
  const requestedEngine = (searchParams.get('engine') as EngineType) || defaultEngine
49
  const [engine, setEngine] = useState<Engine>(getEngine(requestedEngine))
50
 
51
+ const requestedDebug = (searchParams.get('debug') === "true")
52
+ const [debug, setDebug] = useState<boolean>(requestedDebug)
53
 
54
  const [situation, setSituation] = useState("")
55
 
 
192
 
193
  const clickables = Array.from(new Set(rendered.segments.map(s => s.label)).values())
194
 
195
+ const handleToggleDebug = (isToggledOn: boolean) => {
196
+ const current = new URLSearchParams(Array.from(searchParams.entries()))
197
+ current.set("debug", `${isToggledOn}`)
198
+ const search = current.toString()
199
+ const query = search ? `?${search}` : ""
200
+
201
+ // for some reason, this doesn't work?!
202
+ router.replace(`${pathname}${query}`, { })
203
+
204
+ // workaround.. but it is strange that router.replace doesn't work..
205
+ let newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + '?' + search.toString()
206
+ window.history.pushState({path: newurl}, '', newurl)
207
+
208
+ setDebug(isToggledOn)
209
+ }
210
+
211
  const handleSelectGame = (newGameType: GameType) => {
212
  gameRef.current = newGameType
213
  setGame(getGame(newGameType))
 
251
  router.replace(`${pathname}${query}`, { })
252
 
253
  // workaround.. but it is strange that router.replace doesn't work..
254
+ let newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + '?' + search.toString()
255
+ window.history.pushState({path: newurl}, '', newurl)
256
 
257
  // actually we don't handle partial reload very well, so let's reload the whole page
258
+ // window.location = `${window.location.protocol + "//" + window.location.host + window.location.pathname + '?' + search.toString()}` as any
259
  }
260
 
261
  // determine when to show the spinner
 
267
  >
268
  <div className="flex flex-row w-full justify-between items-center px-2 py-2 border-b-1 border-gray-50 dark:border-gray-50 bg-gray-800 dark:bg-gray-800">
269
  <div className="flex flex-row items-center space-x-3 font-mono">
270
+ <Label className="flex text-sm">Select a story:</Label>
271
  <Select
272
  defaultValue={gameRef.current}
273
  onValueChange={(value) => { handleSelectGame(value as GameType) }}>
 
276
  </SelectTrigger>
277
  <SelectContent>
278
  {Object.entries(games).map(([key, game]) =>
279
+ <SelectItem key={key} value={key}>{game.title}</SelectItem>
280
  )}
281
  </SelectContent>
282
  </Select>
283
  </div>
284
  <div className="flex flex-row items-center space-x-3 font-mono">
285
+ <Switch
286
+ checked={debug}
287
+ onCheckedChange={handleToggleDebug}
288
+ disabled={isLoading}
289
+ />
290
+ <Label>Debug</Label>
291
+ </div>
292
+ <div className="flex flex-row items-center space-x-3 font-mono">
293
+ <Label className="flex text-sm">Rendering engine:</Label>
294
  <Select
295
  defaultValue={engine.type}
296
  onValueChange={(value) => { handleSelectEngine(value as EngineType) }}>
src/components/ui/label.tsx ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import * as LabelPrimitive from "@radix-ui/react-label"
5
+ import { cva, type VariantProps } from "class-variance-authority"
6
+
7
+ import { cn } from "@/lib/utils"
8
+
9
+ const labelVariants = cva(
10
+ "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
11
+ )
12
+
13
+ const Label = React.forwardRef<
14
+ React.ElementRef<typeof LabelPrimitive.Root>,
15
+ React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &
16
+ VariantProps<typeof labelVariants>
17
+ >(({ className, ...props }, ref) => (
18
+ <LabelPrimitive.Root
19
+ ref={ref}
20
+ className={cn(labelVariants(), className)}
21
+ {...props}
22
+ />
23
+ ))
24
+ Label.displayName = LabelPrimitive.Root.displayName
25
+
26
+ export { Label }
src/components/ui/switch.tsx ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import * as SwitchPrimitives from "@radix-ui/react-switch"
5
+
6
+ import { cn } from "@/lib/utils"
7
+
8
+ const Switch = React.forwardRef<
9
+ React.ElementRef<typeof SwitchPrimitives.Root>,
10
+ React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>
11
+ >(({ className, ...props }, ref) => (
12
+ <SwitchPrimitives.Root
13
+ className={cn(
14
+ "peer inline-flex h-[24px] w-[44px] shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-400 focus-visible:ring-offset-2 focus-visible:ring-offset-white disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-zinc-900 data-[state=unchecked]:bg-zinc-200 dark:focus-visible:ring-zinc-800 dark:focus-visible:ring-offset-zinc-950 dark:data-[state=checked]:bg-zinc-50 dark:data-[state=unchecked]:bg-zinc-800",
15
+ className
16
+ )}
17
+ {...props}
18
+ ref={ref}
19
+ >
20
+ <SwitchPrimitives.Thumb
21
+ className={cn(
22
+ "pointer-events-none block h-5 w-5 rounded-full bg-white shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0 dark:bg-zinc-950"
23
+ )}
24
+ />
25
+ </SwitchPrimitives.Root>
26
+ ))
27
+ Switch.displayName = SwitchPrimitives.Root.displayName
28
+
29
+ export { Switch }