fastled 1.3.39__py3-none-any.whl → 1.4.1__py3-none-any.whl

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.
fastled/__init__.py CHANGED
@@ -70,6 +70,7 @@ class Api:
70
70
  int | None
71
71
  ) = None, # None means auto select a free port. -1 means no server.
72
72
  no_platformio: bool = False,
73
+ no_playwright: bool = False,
73
74
  ) -> LiveClient:
74
75
  return LiveClient(
75
76
  sketch_directory=sketch_directory,
@@ -82,6 +83,7 @@ class Api:
82
83
  profile=profile,
83
84
  http_port=http_port,
84
85
  no_platformio=no_platformio,
86
+ no_playwright=no_playwright,
85
87
  )
86
88
 
87
89
  @staticmethod
@@ -95,7 +97,6 @@ class Api:
95
97
  no_platformio: bool = False,
96
98
  ) -> CompileServer:
97
99
  """Uses docker to spawn a compile server from the given name."""
98
- from fastled.compile_server import CompileServer
99
100
 
100
101
  out = CompileServer(
101
102
  container_name=container_name,
@@ -207,6 +208,7 @@ class Test:
207
208
  port: int | None = None,
208
209
  compile_server_port: int | None = None,
209
210
  open_browser: bool = True,
211
+ no_playwright: bool = False,
210
212
  ) -> Process:
211
213
  from fastled.open_browser import spawn_http_server
212
214
 
@@ -218,6 +220,7 @@ class Test:
218
220
  port=port,
219
221
  compile_server_port=compile_server_port,
220
222
  open_browser=open_browser,
223
+ no_playwright=no_playwright,
221
224
  )
222
225
  return proc
223
226
 
fastled/__version__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # IMPORTANT! There's a bug in github which will REJECT any version update
2
2
  # that has any other change in the repo. Please bump the version as the
3
3
  # ONLY change in a commit, or else the pypi update and the release will fail.
4
- __version__ = "1.3.39"
4
+ __version__ = "1.4.1"
5
5
 
6
6
  __version_url_latest__ = "https://raw.githubusercontent.com/zackees/fastled-wasm/refs/heads/main/src/fastled/__version__.py"
fastled/args.py CHANGED
@@ -13,6 +13,7 @@ class Args:
13
13
  profile: bool
14
14
  force_compile: bool
15
15
  no_platformio: bool
16
+ no_playwright: bool
16
17
  auto_update: bool | None
17
18
  update: bool
18
19
  localhost: bool
@@ -23,8 +24,6 @@ class Args:
23
24
  quick: bool
24
25
  release: bool
25
26
  ram_disk_size: str # suffixed liked "25mb" or "1gb"
26
- playwright: bool = False # Use Playwright browser instead of system default
27
- no_playwright_auto_resize: bool = False # Disable Playwright auto-resize
28
27
  clear = False # Force the last running container to be removed. Useful for benchmarking.
29
28
 
30
29
  @staticmethod
@@ -53,6 +52,9 @@ class Args:
53
52
  assert isinstance(
54
53
  args.no_platformio, bool
55
54
  ), f"expected bool, got {type(args.no_platformio)}"
55
+ assert isinstance(
56
+ args.no_playwright, bool
57
+ ), f"expected bool, got {type(args.no_playwright)}"
56
58
  assert isinstance(
57
59
  args.no_auto_updates, bool | None
58
60
  ), f"expected bool | None, got {type(args.no_auto_updates)}"
@@ -68,12 +70,6 @@ class Args:
68
70
  assert isinstance(
69
71
  args.release, bool
70
72
  ), f"expected bool, got {type(args.release)}"
71
- assert isinstance(
72
- args.playwright, bool
73
- ), f"expected bool, got {type(args.playwright)}"
74
- assert isinstance(
75
- args.no_playwright_auto_resize, bool
76
- ), f"expected bool, got {type(args.no_playwright_auto_resize)}"
77
73
 
78
74
  init: bool | str = False
79
75
  if args.init is None:
@@ -91,6 +87,7 @@ class Args:
91
87
  profile=args.profile,
92
88
  force_compile=args.force_compile,
93
89
  no_platformio=args.no_platformio,
90
+ no_playwright=args.no_playwright,
94
91
  auto_update=not args.no_auto_updates,
95
92
  update=args.update,
96
93
  localhost=args.localhost,
@@ -101,6 +98,4 @@ class Args:
101
98
  quick=args.quick,
102
99
  release=args.release,
103
100
  ram_disk_size=args.ram_disk_size,
104
- playwright=args.playwright,
105
- no_playwright_auto_resize=args.no_playwright_auto_resize,
106
101
  )
fastled/client_server.py CHANGED
@@ -25,6 +25,16 @@ from fastled.web_compile import (
25
25
  )
26
26
 
27
27
 
28
+ def _always_false() -> bool:
29
+ return False
30
+
31
+
32
+ try:
33
+ from fastled.playwright_browser import is_playwright_available
34
+ except ImportError:
35
+ is_playwright_available = _always_false
36
+
37
+
28
38
  def _create_error_html(error_message: str) -> str:
29
39
  return f"""<!DOCTYPE html>
30
40
  <html>
@@ -258,8 +268,7 @@ def run_client(
258
268
  ) = None, # None means auto select a free port, http_port < 0 means no server.
259
269
  clear: bool = False,
260
270
  no_platformio: bool = False,
261
- use_playwright: bool = False,
262
- playwright_auto_resize: bool = True,
271
+ no_playwright: bool = False,
263
272
  ) -> int:
264
273
  has_checked_newer_version_yet = False
265
274
  compile_server: CompileServer | None = None
@@ -340,8 +349,7 @@ def run_client(
340
349
  port=http_port,
341
350
  compile_server_port=port,
342
351
  open_browser=open_web_browser,
343
- use_playwright=use_playwright,
344
- playwright_auto_resize=playwright_auto_resize,
352
+ no_playwright=no_playwright,
345
353
  )
346
354
  else:
347
355
  print("\nCompilation successful.")
@@ -502,6 +510,7 @@ def run_client_server(args: Args) -> int:
502
510
  open_web_browser = not just_compile and not interactive
503
511
  build_mode: BuildMode = BuildMode.from_args(args)
504
512
  no_platformio = bool(args.no_platformio)
513
+ no_playwright = bool(args.no_playwright)
505
514
 
506
515
  if not force_compile and not looks_like_sketch_directory(directory):
507
516
  # if there is only one directory in the sketch directory, use that
@@ -564,8 +573,7 @@ def run_client_server(args: Args) -> int:
564
573
  profile=profile,
565
574
  clear=args.clear,
566
575
  no_platformio=no_platformio,
567
- use_playwright=args.playwright,
568
- playwright_auto_resize=not args.no_playwright_auto_resize,
576
+ no_playwright=no_playwright,
569
577
  )
570
578
  except KeyboardInterrupt:
571
579
  return 1
fastled/live_client.py CHANGED
@@ -23,6 +23,7 @@ class LiveClient:
23
23
  build_mode: BuildMode = BuildMode.QUICK,
24
24
  profile: bool = False,
25
25
  no_platformio: bool = False,
26
+ no_playwright: bool = False,
26
27
  ) -> None:
27
28
  self.sketch_directory = sketch_directory
28
29
  self.host = host
@@ -36,6 +37,7 @@ class LiveClient:
36
37
  self.thread: threading.Thread | None = None
37
38
  self.auto_updates = auto_updates
38
39
  self.no_platformio = no_platformio
40
+ self.no_playwright = no_playwright
39
41
  if auto_start:
40
42
  self.start()
41
43
  if self.auto_updates is False:
@@ -55,6 +57,7 @@ class LiveClient:
55
57
  shutdown=self.shutdown,
56
58
  http_port=self.http_port,
57
59
  no_platformio=self.no_platformio,
60
+ no_playwright=self.no_playwright,
58
61
  )
59
62
  return rtn
60
63
 
fastled/open_browser.py CHANGED
@@ -101,8 +101,7 @@ def spawn_http_server(
101
101
  compile_server_port: int,
102
102
  port: int | None = None,
103
103
  open_browser: bool = True,
104
- use_playwright: bool = False,
105
- playwright_auto_resize: bool = True,
104
+ no_playwright: bool = False,
106
105
  ) -> Process:
107
106
 
108
107
  if port is not None and not is_port_free(port):
@@ -131,28 +130,17 @@ def spawn_http_server(
131
130
  wait_for_server(port)
132
131
  if open_browser:
133
132
  url = f"http://localhost:{port}"
134
- if use_playwright and PLAYWRIGHT_AVAILABLE and open_with_playwright is not None:
133
+ if (
134
+ PLAYWRIGHT_AVAILABLE
135
+ and open_with_playwright is not None
136
+ and not no_playwright
137
+ ):
135
138
  print(f"Opening FastLED sketch in Playwright browser: {url}")
136
- if playwright_auto_resize:
137
- print(
138
- "Auto-resize enabled: Browser window will automatically adjust to content size"
139
- )
140
- global _playwright_browser_proxy
141
- _playwright_browser_proxy = open_with_playwright(
142
- url, auto_resize=playwright_auto_resize
143
- )
144
- elif use_playwright and not PLAYWRIGHT_AVAILABLE:
145
139
  print(
146
- "Playwright requested but not available. Install with: pip install fastled[full]"
147
- )
148
- print(f"Falling back to system browser: {url}")
149
- import webbrowser
150
-
151
- webbrowser.open(
152
- url=url,
153
- new=1,
154
- autoraise=True,
140
+ "Auto-resize enabled: Browser window will automatically adjust to content size"
155
141
  )
142
+ global _playwright_browser_proxy
143
+ _playwright_browser_proxy = open_with_playwright(url)
156
144
  else:
157
145
  print(f"Opening browser to {url}")
158
146
  import webbrowser
fastled/parse_args.py CHANGED
@@ -35,15 +35,12 @@ FastLED WASM Compiler - Useful options:
35
35
  --profile Enable profiling the C++ build system
36
36
  --update Update the docker image for the wasm compiler
37
37
  --purge Remove all FastLED containers and images
38
- --playwright Use Playwright browser (requires 'pip install fastled[full]')
39
- --no-playwright-auto-resize Disable automatic window resizing in Playwright
40
38
  --version Show version information
41
39
  --help Show detailed help
42
40
  Examples:
43
41
  fastled (will auto detect the sketch directory and prompt you)
44
42
  fastled my_sketch
45
43
  fastled my_sketch --web (compiles using the web compiler only)
46
- fastled my_sketch --playwright (opens in Playwright browser)
47
44
  fastled --init Blink (initializes a new sketch directory with the Blink example)
48
45
  fastled --server (runs the compiler server in the current directory)
49
46
 
@@ -85,8 +82,8 @@ def parse_args() -> Args:
85
82
  parser.add_argument(
86
83
  "--ram-disk-size",
87
84
  type=str,
88
- default="0",
89
- help="Set the size of the ramdisk for the docker container. Use suffixes like '25mb' or '1gb'.",
85
+ default="1gb",
86
+ help="Size of the RAM disk for compilation (e.g., '1gb', '512mb')",
90
87
  )
91
88
  parser.add_argument(
92
89
  "--web",
@@ -116,13 +113,18 @@ def parse_args() -> Args:
116
113
  parser.add_argument(
117
114
  "--no-auto-updates",
118
115
  action="store_true",
119
- help="Disable automatic updates of the wasm compiler image when using docker.",
116
+ help="Disable automatic updates of the wasm compiler image when using docker. (Default: False)",
120
117
  )
121
118
  parser.add_argument(
122
119
  "--no-platformio",
123
120
  action="store_true",
124
121
  help="Bypass PlatformIO constraints by using local Docker compilation with custom build environment",
125
122
  )
123
+ parser.add_argument(
124
+ "--no-playwright",
125
+ action="store_true",
126
+ help="Disable Playwright browser and use default system browser instead",
127
+ )
126
128
  parser.add_argument(
127
129
  "-u",
128
130
  "--update",
@@ -161,18 +163,6 @@ def parse_args() -> Args:
161
163
  help="Remove all FastLED containers and images",
162
164
  )
163
165
 
164
- parser.add_argument(
165
- "--playwright",
166
- action="store_true",
167
- help="Use Playwright browser instead of system default (requires 'pip install fastled[full]')",
168
- )
169
-
170
- parser.add_argument(
171
- "--no-playwright-auto-resize",
172
- action="store_true",
173
- help="Disable automatic window resizing in Playwright browser",
174
- )
175
-
176
166
  build_mode = parser.add_mutually_exclusive_group()
177
167
  build_mode.add_argument("--debug", action="store_true", help="Build in debug mode")
178
168
  build_mode.add_argument(
@@ -33,26 +33,23 @@ def is_playwright_available() -> bool:
33
33
  class PlaywrightBrowser:
34
34
  """Playwright browser manager for FastLED sketches."""
35
35
 
36
- def __init__(self, headless: bool = False, auto_resize: bool = True):
36
+ def __init__(self, headless: bool = False):
37
37
  """Initialize the Playwright browser manager.
38
38
 
39
39
  Args:
40
40
  headless: Whether to run the browser in headless mode
41
- auto_resize: Whether to automatically resize the browser window to fit content
42
41
  """
43
42
  if not PLAYWRIGHT_AVAILABLE:
44
43
  raise ImportError(
45
44
  "Playwright is not installed. Install with: pip install fastled[full]"
46
45
  )
47
46
 
48
- # debug
49
- auto_resize = True
50
-
51
47
  self.headless = headless
52
- self.auto_resize = auto_resize
48
+ self.auto_resize = True # Always enable auto-resize
53
49
  self.browser: Any = None
54
50
  self.page: Any = None
55
51
  self.playwright: Any = None
52
+ self._should_exit = asyncio.Event()
56
53
 
57
54
  async def start(self) -> None:
58
55
  """Start the Playwright browser."""
@@ -158,8 +155,9 @@ class PlaywrightBrowser:
158
155
 
159
156
  # Check if page is still alive
160
157
  if self.page is None or self.page.is_closed():
161
- print("[PYTHON] Page closed, stopping browser tracking")
162
- break
158
+ print("[PYTHON] Page closed, signaling exit")
159
+ self._should_exit.set()
160
+ return
163
161
 
164
162
  # Get browser window dimensions
165
163
  window_info = await self._get_window_info()
@@ -258,15 +256,12 @@ class PlaywrightBrowser:
258
256
  self.playwright = None
259
257
 
260
258
 
261
- def run_playwright_browser(
262
- url: str, headless: bool = False, auto_resize: bool = True
263
- ) -> None:
259
+ def run_playwright_browser(url: str, headless: bool = False) -> None:
264
260
  """Run Playwright browser in a separate process.
265
261
 
266
262
  Args:
267
263
  url: The URL to open
268
264
  headless: Whether to run in headless mode
269
- auto_resize: Whether to automatically resize the browser window to fit content
270
265
  """
271
266
  if not PLAYWRIGHT_AVAILABLE:
272
267
  warnings.warn(
@@ -276,7 +271,7 @@ def run_playwright_browser(
276
271
  return
277
272
 
278
273
  async def main():
279
- browser = PlaywrightBrowser(headless=headless, auto_resize=auto_resize)
274
+ browser = PlaywrightBrowser(headless=headless)
280
275
  try:
281
276
  await browser.start()
282
277
  await browser.open_url(url)
@@ -309,14 +304,15 @@ class PlaywrightBrowserProxy:
309
304
  def __init__(self):
310
305
  self.process = None
311
306
  self.browser_manager = None
307
+ self.monitor_thread = None
308
+ self._closing_intentionally = False
312
309
 
313
- def open(self, url: str, headless: bool = False, auto_resize: bool = True) -> None:
310
+ def open(self, url: str, headless: bool = False) -> None:
314
311
  """Open URL with Playwright browser and keep it alive.
315
312
 
316
313
  Args:
317
314
  url: The URL to open
318
315
  headless: Whether to run in headless mode
319
- auto_resize: Whether to automatically resize the browser window to fit content
320
316
  """
321
317
  if not PLAYWRIGHT_AVAILABLE:
322
318
  warnings.warn(
@@ -335,10 +331,13 @@ class PlaywrightBrowserProxy:
335
331
 
336
332
  self.process = multiprocessing.Process(
337
333
  target=run_playwright_browser_persistent,
338
- args=(url, headless, auto_resize),
334
+ args=(url, headless),
339
335
  )
340
336
  self.process.start()
341
337
 
338
+ # Start monitoring thread to exit main process when browser subprocess exits
339
+ self._start_monitor_thread()
340
+
342
341
  # Register cleanup
343
342
  import atexit
344
343
 
@@ -352,10 +351,44 @@ class PlaywrightBrowserProxy:
352
351
 
353
352
  webbrowser.open(url)
354
353
 
354
+ def _start_monitor_thread(self) -> None:
355
+ """Start a thread to monitor the browser process and exit main process when it terminates."""
356
+ if self.monitor_thread is not None:
357
+ return
358
+
359
+ import os
360
+ import threading
361
+
362
+ def monitor_process():
363
+ """Monitor the browser process and exit when it terminates."""
364
+ if self.process is None:
365
+ return
366
+
367
+ try:
368
+ # Wait for the process to terminate
369
+ self.process.join()
370
+
371
+ # Check if the process terminated (and we didn't kill it ourselves)
372
+ if (
373
+ self.process.exitcode is not None
374
+ and not self._closing_intentionally
375
+ ):
376
+ print("[MAIN] Browser closed, exiting main program")
377
+ # Force exit the entire program
378
+ os._exit(0)
379
+
380
+ except Exception as e:
381
+ print(f"[MAIN] Error monitoring browser process: {e}")
382
+
383
+ self.monitor_thread = threading.Thread(target=monitor_process, daemon=True)
384
+ self.monitor_thread.start()
385
+
355
386
  def close(self) -> None:
356
387
  """Close the Playwright browser."""
357
388
  if self.process and self.process.is_alive():
358
389
  print("Closing Playwright browser...")
390
+ # Mark that we're intentionally closing to prevent monitor from triggering exit
391
+ self._closing_intentionally = True
359
392
  self.process.terminate()
360
393
  self.process.join(timeout=5)
361
394
  if self.process.is_alive():
@@ -363,21 +396,18 @@ class PlaywrightBrowserProxy:
363
396
  self.process = None
364
397
 
365
398
 
366
- def run_playwright_browser_persistent(
367
- url: str, headless: bool = False, auto_resize: bool = True
368
- ) -> None:
399
+ def run_playwright_browser_persistent(url: str, headless: bool = False) -> None:
369
400
  """Run Playwright browser in a persistent mode that stays alive until terminated.
370
401
 
371
402
  Args:
372
403
  url: The URL to open
373
404
  headless: Whether to run in headless mode
374
- auto_resize: Whether to automatically resize the browser window to fit content
375
405
  """
376
406
  if not PLAYWRIGHT_AVAILABLE:
377
407
  return
378
408
 
379
409
  async def main():
380
- browser = PlaywrightBrowser(headless=headless, auto_resize=auto_resize)
410
+ browser = PlaywrightBrowser(headless=headless)
381
411
  try:
382
412
  await browser.start()
383
413
  await browser.open_url(url)
@@ -386,9 +416,9 @@ def run_playwright_browser_persistent(
386
416
  "Playwright browser opened. Browser will remain open until the FastLED process exits."
387
417
  )
388
418
 
389
- # Keep the browser alive indefinitely
390
- while True:
391
- await asyncio.sleep(1)
419
+ # Keep the browser alive until exit is signaled
420
+ while not browser._should_exit.is_set():
421
+ await asyncio.sleep(0.1)
392
422
 
393
423
  except KeyboardInterrupt:
394
424
  print("\nClosing Playwright browser...")
@@ -405,9 +435,7 @@ def run_playwright_browser_persistent(
405
435
  print(f"Playwright browser failed: {e}")
406
436
 
407
437
 
408
- def open_with_playwright(
409
- url: str, headless: bool = False, auto_resize: bool = True
410
- ) -> PlaywrightBrowserProxy:
438
+ def open_with_playwright(url: str, headless: bool = False) -> PlaywrightBrowserProxy:
411
439
  """Open URL with Playwright browser and return a proxy object for lifecycle management.
412
440
 
413
441
  This function can be used as a drop-in replacement for webbrowser.open().
@@ -415,13 +443,12 @@ def open_with_playwright(
415
443
  Args:
416
444
  url: The URL to open
417
445
  headless: Whether to run in headless mode
418
- auto_resize: Whether to automatically resize the browser window to fit content
419
446
 
420
447
  Returns:
421
448
  PlaywrightBrowserProxy object for managing the browser lifecycle
422
449
  """
423
450
  proxy = PlaywrightBrowserProxy()
424
- proxy.open(url, headless, auto_resize)
451
+ proxy.open(url, headless)
425
452
  return proxy
426
453
 
427
454
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastled
3
- Version: 1.3.39
3
+ Version: 1.4.1
4
4
  Summary: FastLED Wasm Compiler
5
5
  Home-page: https://github.com/zackees/fastled-wasm
6
6
  Maintainer: Zachary Vorhies
@@ -81,10 +81,10 @@ For enhanced browser control and automation capabilities, you can install the fu
81
81
  $ pip install fastled[full]
82
82
  ```
83
83
 
84
- This enables the `--playwright` flag which opens your compiled sketch in a Playwright-controlled browser instead of your system's default browser:
84
+ When installed, FastLED will automatically use Playwright to open your compiled sketch in a controlled browser environment instead of your system's default browser:
85
85
 
86
86
  ```bash
87
- $ fastled my_sketch --playwright
87
+ $ fastled my_sketch
88
88
  ```
89
89
 
90
90
  The Playwright browser provides better automation capabilities and is especially useful for:
@@ -94,12 +94,13 @@ The Playwright browser provides better automation capabilities and is especially
94
94
  - Persistent browser sessions that stay open until the FastLED process exits
95
95
 
96
96
  **Key Benefits:**
97
+ - Automatically enabled when `fastled[full]` is installed - no additional flags needed
97
98
  - The Playwright browser remains open throughout your development session
98
99
  - Automatic cleanup when the FastLED process exits
99
100
  - Better control over browser behavior and automation capabilities
100
101
  - Consistent behavior across different platforms
101
102
 
102
- If Playwright is not installed and you use the `--playwright` flag, the system will gracefully fall back to your default browser.
103
+ If Playwright is not installed, the system will gracefully fall back to your default browser.
103
104
 
104
105
  # Install
105
106
 
@@ -370,6 +371,7 @@ A: A big chunk of space is being used by unnecessary javascript `emscripten` bun
370
371
 
371
372
 
372
373
  # Revisions
374
+ * 1.4.00 - Browser now uses playwright when `pip install fastled[full]` is used. Much better app like experience.
373
375
  * 1.2.31 - Bunch of fixes and ease of use while compiling code in the repo.
374
376
  * 1.2.22 - Prefer to use `live-server` from npm. If npm exists on the system then do a background install of `live-server` for next run.
375
377
  * 1.2.20 - Fixed up path issue for web browser launch for hot reload.
@@ -1,23 +1,23 @@
1
- fastled/__init__.py,sha256=NBk5Ef65nIe0F_rvBrSGeoyouFOKFeQXqHrTCJQheeI,7201
1
+ fastled/__init__.py,sha256=oQFhIrBU0TbMDfQA1ZmubpZPwDzHmruXFa52H5UFSDE,7300
2
2
  fastled/__main__.py,sha256=OcKv2ER1_iQAsZzLIUb3C8hRC9L2clNOhCrjpshrlf4,336
3
- fastled/__version__.py,sha256=P02pxWlKUAylIYVEU3tL1Bf3RXb-VwgZjzO4VqZoHmc,373
3
+ fastled/__version__.py,sha256=jnZS2psG0LYCGykwvL4Zs7g490ZXEjv9AFYQMLaxmlk,372
4
4
  fastled/app.py,sha256=TFVn4qIRdt7dYbpDWudEHrhvD9pwyj9sIGXs4F26nhk,5880
5
- fastled/args.py,sha256=sugtV0liHa8EnsTeXMMyeH0fO5DgeIzCbDcM5Pbr4k0,4010
5
+ fastled/args.py,sha256=uCMyRIYM8gFE52O12YKUfA-rwJL8Zxwk_hsH3cusSac,3669
6
6
  fastled/cli.py,sha256=drgR2AOxVrj3QEz58iiKscYAumbbin2vIV-k91VCOAA,561
7
7
  fastled/cli_test.py,sha256=W-1nODZrip_JU6BEbYhxOa4ckxduOsiX8zIoRkTyxv4,550
8
8
  fastled/cli_test_interactive.py,sha256=BjNhveZOk5aCffHbcrxPQQjWmAuj4ClVKKcKX5eY6yM,542
9
- fastled/client_server.py,sha256=XH38jdEkkfizMrHYMDis5XEQqlG1XS7Bd-Yg1tQ1Zuk,20693
9
+ fastled/client_server.py,sha256=n3N-i7EgWtoyb3eR8TaCc3a3Mth9cUcYsyMNICtlJZc,20743
10
10
  fastled/compile_server.py,sha256=yQtwLOSKINO1CKD0NWxf-7YQKSatf9sF9RuqaWGOkCs,3038
11
11
  fastled/compile_server_impl.py,sha256=9vTGaDQ0W_g9Xsfy0gC3nJEc2g_pnXcF4VO2U3GLOVg,11982
12
12
  fastled/docker_manager.py,sha256=rkq39ZKrU6NHIyDa3mzs0Unb6o9oMeAwxhqiuHJU_RY,40291
13
13
  fastled/filewatcher.py,sha256=gEcJJHTDJ1X3gKJzltmEBhixWGbZj2eJD7a4vwSvITQ,10036
14
14
  fastled/keyboard.py,sha256=UTAsqCn1UMYnB8YDzENiLTj4GeL45tYfEcO7_5fLFEg,3556
15
15
  fastled/keyz.py,sha256=LO-8m_7CpNDiZLM-FXhQ30f9gN1bUYz5lOsUPTIbI-c,4020
16
- fastled/live_client.py,sha256=yp_ujG92EHYpSedGOUteuG2nQvMKbp1GbUpgQ6nU4Dc,3083
17
- fastled/open_browser.py,sha256=So4znH-jjc-dheyRVGXrKcLj2vKgfGxCl_ECEfILY9g,5392
18
- fastled/parse_args.py,sha256=hNyMeVlN2TX3MbhUkIAdVIeByHLoGFxuajXYmwK_7Fg,11948
16
+ fastled/live_client.py,sha256=aDZqSWDMpqNaEsT3u1nrBcdeIOItv-L0Gk2A10difLA,3209
17
+ fastled/open_browser.py,sha256=mwjm65p2ydwmsaar7ooH4mhT5_qH_LZvXUpkRPPJ9eA,4881
18
+ fastled/parse_args.py,sha256=htjap9tWZDJXnJ5upDwcy8EhecJD1uLZwacHR_T5ySs,11518
19
19
  fastled/paths.py,sha256=VsPmgu0lNSCFOoEC0BsTYzDygXqy15AHUfN-tTuzDZA,99
20
- fastled/playwright_browser.py,sha256=4Awad4ZIxWW-n9DMYwSGJBEzd6_7PA0ThQNms1kDxh4,16106
20
+ fastled/playwright_browser.py,sha256=SoUZUVfpcGRt6dXoQUASHNgMXIQzFYqN6bBvqsVZDsU,17033
21
21
  fastled/print_filter.py,sha256=nc_rqYYdCUPinFycaK7fiQF5PG1up51pmJptR__QyAs,1499
22
22
  fastled/project_init.py,sha256=bBt4DwmW5hZkm9ICt9Qk-0Nr_0JQM7icCgH5Iv-bCQs,3984
23
23
  fastled/select_sketch_directory.py,sha256=-eudwCns3AKj4HuHtSkZAFwbnf005SNL07pOzs9VxnE,1383
@@ -38,9 +38,9 @@ fastled/site/build.py,sha256=2YKU_UWKlJdGnjdbAbaL0co6kceFMSTVYwH1KCmgPZA,13987
38
38
  fastled/site/examples.py,sha256=s6vj2zJc6BfKlnbwXr1QWY1mzuDBMt6j5MEBOWjO_U8,155
39
39
  fastled/test/can_run_local_docker_tests.py,sha256=LEuUbHctRhNNFWcvnz2kEGmjDJeXO4c3kNpizm3yVJs,400
40
40
  fastled/test/examples.py,sha256=GfaHeY1E8izBl6ZqDVjz--RHLyVR4NRnQ5pBesCFJFY,1673
41
- fastled-1.3.39.dist-info/licenses/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
42
- fastled-1.3.39.dist-info/METADATA,sha256=p2oZYp8GXF-76q_IB9VE41428EnWMBjhXracpjGkdzg,32198
43
- fastled-1.3.39.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
44
- fastled-1.3.39.dist-info/entry_points.txt,sha256=RCwmzCSOS4-C2i9EziANq7Z2Zb4KFnEMR1FQC0bBwAw,101
45
- fastled-1.3.39.dist-info/top_level.txt,sha256=Bbv5kpJpZhWNCvDF4K0VcvtBSDMa8B7PTOrZa9CezHY,8
46
- fastled-1.3.39.dist-info/RECORD,,
41
+ fastled-1.4.1.dist-info/licenses/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
42
+ fastled-1.4.1.dist-info/METADATA,sha256=RKYlufX0O87bXsTGUh1XlXzZN5H8TAFGzagLQBXN20Y,32369
43
+ fastled-1.4.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
44
+ fastled-1.4.1.dist-info/entry_points.txt,sha256=RCwmzCSOS4-C2i9EziANq7Z2Zb4KFnEMR1FQC0bBwAw,101
45
+ fastled-1.4.1.dist-info/top_level.txt,sha256=Bbv5kpJpZhWNCvDF4K0VcvtBSDMa8B7PTOrZa9CezHY,8
46
+ fastled-1.4.1.dist-info/RECORD,,