reflex 0.5.7__py3-none-any.whl → 0.5.8__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.

Potentially problematic release.


This version of reflex might be problematic. Click here for more details.

Files changed (44) hide show
  1. reflex/.templates/web/utils/state.js +1 -1
  2. reflex/app.py +20 -2
  3. reflex/components/core/banner.py +14 -0
  4. reflex/components/core/banner.pyi +3 -3
  5. reflex/components/core/debounce.py +3 -0
  6. reflex/components/el/__init__.py +1 -0
  7. reflex/components/el/__init__.pyi +8 -5
  8. reflex/components/el/elements/__init__.py +3 -1
  9. reflex/components/el/elements/__init__.pyi +8 -6
  10. reflex/components/el/elements/media.py +98 -18
  11. reflex/components/el/elements/media.pyi +523 -18
  12. reflex/components/el/elements/metadata.py +5 -1
  13. reflex/components/radix/primitives/base.py +1 -1
  14. reflex/components/radix/themes/layout/list.py +0 -2
  15. reflex/components/recharts/cartesian.py +46 -20
  16. reflex/components/recharts/cartesian.pyi +26 -14
  17. reflex/components/recharts/charts.py +4 -0
  18. reflex/components/recharts/charts.pyi +3 -0
  19. reflex/components/recharts/general.py +23 -9
  20. reflex/components/recharts/general.pyi +6 -4
  21. reflex/components/recharts/polar.py +35 -11
  22. reflex/components/recharts/polar.pyi +35 -7
  23. reflex/components/sonner/toast.py +28 -2
  24. reflex/components/sonner/toast.pyi +14 -7
  25. reflex/constants/base.py +21 -0
  26. reflex/constants/event.py +2 -0
  27. reflex/experimental/vars/__init__.py +17 -0
  28. reflex/experimental/vars/base.py +282 -15
  29. reflex/experimental/vars/function.py +214 -0
  30. reflex/experimental/vars/number.py +1295 -0
  31. reflex/experimental/vars/sequence.py +1039 -0
  32. reflex/reflex.py +29 -2
  33. reflex/state.py +59 -10
  34. reflex/utils/imports.py +71 -8
  35. reflex/utils/prerequisites.py +115 -35
  36. reflex/utils/pyi_generator.py +2 -0
  37. reflex/utils/redir.py +52 -0
  38. reflex/vars.py +220 -11
  39. reflex/vars.pyi +20 -2
  40. {reflex-0.5.7.dist-info → reflex-0.5.8.dist-info}/METADATA +2 -2
  41. {reflex-0.5.7.dist-info → reflex-0.5.8.dist-info}/RECORD +44 -40
  42. {reflex-0.5.7.dist-info → reflex-0.5.8.dist-info}/LICENSE +0 -0
  43. {reflex-0.5.7.dist-info → reflex-0.5.8.dist-info}/WHEEL +0 -0
  44. {reflex-0.5.7.dist-info → reflex-0.5.8.dist-info}/entry_points.txt +0 -0
reflex/vars.py CHANGED
@@ -45,6 +45,7 @@ from reflex.utils.exceptions import (
45
45
 
46
46
  # This module used to export ImportVar itself, so we still import it for export here
47
47
  from reflex.utils.imports import (
48
+ ImmutableParsedImportDict,
48
49
  ImportDict,
49
50
  ImportVar,
50
51
  ParsedImportDict,
@@ -154,7 +155,7 @@ class VarData(Base):
154
155
  super().__init__(**kwargs)
155
156
 
156
157
  @classmethod
157
- def merge(cls, *others: VarData | None) -> VarData | None:
158
+ def merge(cls, *others: ImmutableVarData | VarData | None) -> VarData | None:
158
159
  """Merge multiple var data objects.
159
160
 
160
161
  Args:
@@ -172,8 +173,14 @@ class VarData(Base):
172
173
  continue
173
174
  state = state or var_data.state
174
175
  _imports = imports.merge_imports(_imports, var_data.imports)
175
- hooks.update(var_data.hooks)
176
- interpolations += var_data.interpolations
176
+ hooks.update(
177
+ var_data.hooks
178
+ if isinstance(var_data.hooks, dict)
179
+ else {k: None for k in var_data.hooks}
180
+ )
181
+ interpolations += (
182
+ var_data.interpolations if isinstance(var_data, VarData) else []
183
+ )
177
184
 
178
185
  return (
179
186
  cls(
@@ -231,6 +238,175 @@ class VarData(Base):
231
238
  }
232
239
 
233
240
 
241
+ @dataclasses.dataclass(
242
+ eq=True,
243
+ frozen=True,
244
+ )
245
+ class ImmutableVarData:
246
+ """Metadata associated with a Var."""
247
+
248
+ # The name of the enclosing state.
249
+ state: str = dataclasses.field(default="")
250
+
251
+ # Imports needed to render this var
252
+ imports: ImmutableParsedImportDict = dataclasses.field(default_factory=tuple)
253
+
254
+ # Hooks that need to be present in the component to render this var
255
+ hooks: Tuple[str, ...] = dataclasses.field(default_factory=tuple)
256
+
257
+ def __init__(
258
+ self,
259
+ state: str = "",
260
+ imports: ImportDict | ParsedImportDict | None = None,
261
+ hooks: dict[str, None] | None = None,
262
+ ):
263
+ """Initialize the var data.
264
+
265
+ Args:
266
+ state: The name of the enclosing state.
267
+ imports: Imports needed to render this var.
268
+ hooks: Hooks that need to be present in the component to render this var.
269
+ """
270
+ immutable_imports: ImmutableParsedImportDict = tuple(
271
+ sorted(
272
+ ((k, tuple(sorted(v))) for k, v in parse_imports(imports or {}).items())
273
+ )
274
+ )
275
+ object.__setattr__(self, "state", state)
276
+ object.__setattr__(self, "imports", immutable_imports)
277
+ object.__setattr__(self, "hooks", tuple(hooks or {}))
278
+
279
+ @classmethod
280
+ def merge(
281
+ cls, *others: ImmutableVarData | VarData | None
282
+ ) -> ImmutableVarData | None:
283
+ """Merge multiple var data objects.
284
+
285
+ Args:
286
+ *others: The var data objects to merge.
287
+
288
+ Returns:
289
+ The merged var data object.
290
+ """
291
+ state = ""
292
+ _imports = {}
293
+ hooks = {}
294
+ for var_data in others:
295
+ if var_data is None:
296
+ continue
297
+ state = state or var_data.state
298
+ _imports = imports.merge_imports(_imports, var_data.imports)
299
+ hooks.update(
300
+ var_data.hooks
301
+ if isinstance(var_data.hooks, dict)
302
+ else {k: None for k in var_data.hooks}
303
+ )
304
+
305
+ return (
306
+ ImmutableVarData(
307
+ state=state,
308
+ imports=_imports,
309
+ hooks=hooks,
310
+ )
311
+ or None
312
+ )
313
+
314
+ def __bool__(self) -> bool:
315
+ """Check if the var data is non-empty.
316
+
317
+ Returns:
318
+ True if any field is set to a non-default value.
319
+ """
320
+ return bool(self.state or self.imports or self.hooks)
321
+
322
+ def __eq__(self, other: Any) -> bool:
323
+ """Check if two var data objects are equal.
324
+
325
+ Args:
326
+ other: The other var data object to compare.
327
+
328
+ Returns:
329
+ True if all fields are equal and collapsed imports are equal.
330
+ """
331
+ if not isinstance(other, (ImmutableVarData, VarData)):
332
+ return False
333
+
334
+ # Don't compare interpolations - that's added in by the decoder, and
335
+ # not part of the vardata itself.
336
+ return (
337
+ self.state == other.state
338
+ and self.hooks
339
+ == (
340
+ other.hooks
341
+ if isinstance(other, ImmutableVarData)
342
+ else tuple(other.hooks.keys())
343
+ )
344
+ and imports.collapse_imports(self.imports)
345
+ == imports.collapse_imports(other.imports)
346
+ )
347
+
348
+
349
+ def _decode_var_immutable(value: str) -> tuple[ImmutableVarData | None, str]:
350
+ """Decode the state name from a formatted var.
351
+
352
+ Args:
353
+ value: The value to extract the state name from.
354
+
355
+ Returns:
356
+ The extracted state name and the value without the state name.
357
+ """
358
+ var_datas = []
359
+ if isinstance(value, str):
360
+ # fast path if there is no encoded VarData
361
+ if constants.REFLEX_VAR_OPENING_TAG not in value:
362
+ return None, value
363
+
364
+ offset = 0
365
+
366
+ # Initialize some methods for reading json.
367
+ var_data_config = VarData().__config__
368
+
369
+ def json_loads(s):
370
+ try:
371
+ return var_data_config.json_loads(s)
372
+ except json.decoder.JSONDecodeError:
373
+ return var_data_config.json_loads(var_data_config.json_loads(f'"{s}"'))
374
+
375
+ # Find all tags.
376
+ while m := _decode_var_pattern.search(value):
377
+ start, end = m.span()
378
+ value = value[:start] + value[end:]
379
+
380
+ serialized_data = m.group(1)
381
+
382
+ if serialized_data.isnumeric() or (
383
+ serialized_data[0] == "-" and serialized_data[1:].isnumeric()
384
+ ):
385
+ # This is a global immutable var.
386
+ var = _global_vars[int(serialized_data)]
387
+ var_data = var._var_data
388
+
389
+ if var_data is not None:
390
+ realstart = start + offset
391
+
392
+ var_datas.append(var_data)
393
+ else:
394
+ # Read the JSON, pull out the string length, parse the rest as VarData.
395
+ data = json_loads(serialized_data)
396
+ string_length = data.pop("string_length", None)
397
+ var_data = VarData.parse_obj(data)
398
+
399
+ # Use string length to compute positions of interpolations.
400
+ if string_length is not None:
401
+ realstart = start + offset
402
+ var_data.interpolations = [(realstart, realstart + string_length)]
403
+
404
+ var_datas.append(var_data)
405
+ offset += end - start
406
+
407
+ return ImmutableVarData.merge(*var_datas) if var_datas else None, value
408
+
409
+
234
410
  def _encode_var(value: Var) -> str:
235
411
  """Encode the state name into a formatted var.
236
412
 
@@ -299,16 +475,15 @@ def _decode_var(value: str) -> tuple[VarData | None, str]:
299
475
 
300
476
  serialized_data = m.group(1)
301
477
 
302
- if serialized_data[1:].isnumeric():
478
+ if serialized_data.isnumeric() or (
479
+ serialized_data[0] == "-" and serialized_data[1:].isnumeric()
480
+ ):
303
481
  # This is a global immutable var.
304
482
  var = _global_vars[int(serialized_data)]
305
483
  var_data = var._var_data
306
484
 
307
485
  if var_data is not None:
308
486
  realstart = start + offset
309
- var_data.interpolations = [
310
- (realstart, realstart + len(var._var_name))
311
- ]
312
487
 
313
488
  var_datas.append(var_data)
314
489
  else:
@@ -1814,6 +1989,14 @@ class Var:
1814
1989
  """
1815
1990
  return self._var_data.state if self._var_data else ""
1816
1991
 
1992
+ def _get_all_var_data(self) -> VarData | None:
1993
+ """Get all the var data.
1994
+
1995
+ Returns:
1996
+ The var data.
1997
+ """
1998
+ return self._var_data
1999
+
1817
2000
  @property
1818
2001
  def _var_name_unwrapped(self) -> str:
1819
2002
  """Get the var str without wrapping in curly braces.
@@ -1985,6 +2168,24 @@ class ComputedVar(Var, property):
1985
2168
  # Interval at which the computed var should be updated
1986
2169
  _update_interval: Optional[datetime.timedelta] = dataclasses.field(default=None)
1987
2170
 
2171
+ # The name of the var.
2172
+ _var_name: str = dataclasses.field()
2173
+
2174
+ # The type of the var.
2175
+ _var_type: Type = dataclasses.field(default=Any)
2176
+
2177
+ # Whether this is a local javascript variable.
2178
+ _var_is_local: bool = dataclasses.field(default=False)
2179
+
2180
+ # Whether the var is a string literal.
2181
+ _var_is_string: bool = dataclasses.field(default=False)
2182
+
2183
+ # _var_full_name should be prefixed with _var_state
2184
+ _var_full_name_needs_state_prefix: bool = dataclasses.field(default=False)
2185
+
2186
+ # Extra metadata associated with the Var
2187
+ _var_data: Optional[VarData] = dataclasses.field(default=None)
2188
+
1988
2189
  def __init__(
1989
2190
  self,
1990
2191
  fget: Callable[[BaseState], Any],
@@ -2369,17 +2570,25 @@ class CallableVar(BaseVar):
2369
2570
 
2370
2571
 
2371
2572
  def get_uuid_string_var() -> Var:
2372
- """Return a var that generates UUIDs via .web/utils/state.js.
2573
+ """Return a Var that generates a single memoized UUID via .web/utils/state.js.
2574
+
2575
+ useMemo with an empty dependency array ensures that the generated UUID is
2576
+ consistent across re-renders of the component.
2373
2577
 
2374
2578
  Returns:
2375
- the var to generate UUIDs at runtime.
2579
+ A Var that generates a UUID at runtime.
2376
2580
  """
2377
2581
  from reflex.utils.imports import ImportVar
2378
2582
 
2379
2583
  unique_uuid_var_data = VarData(
2380
- imports={f"/{constants.Dirs.STATE_PATH}": {ImportVar(tag="generateUUID")}} # type: ignore
2584
+ imports={
2585
+ f"/{constants.Dirs.STATE_PATH}": {ImportVar(tag="generateUUID")}, # type: ignore
2586
+ "react": "useMemo",
2587
+ }
2381
2588
  )
2382
2589
 
2383
2590
  return BaseVar(
2384
- _var_name="generateUUID()", _var_type=str, _var_data=unique_uuid_var_data
2591
+ _var_name="useMemo(generateUUID, [])",
2592
+ _var_type=str,
2593
+ _var_data=unique_uuid_var_data,
2385
2594
  )
reflex/vars.pyi CHANGED
@@ -29,7 +29,7 @@ from reflex.state import State as State
29
29
  from reflex.utils import console as console
30
30
  from reflex.utils import format as format
31
31
  from reflex.utils import types as types
32
- from reflex.utils.imports import ImportDict, ParsedImportDict
32
+ from reflex.utils.imports import ImmutableParsedImportDict, ImportDict, ParsedImportDict
33
33
 
34
34
  USED_VARIABLES: Incomplete
35
35
 
@@ -47,7 +47,24 @@ class VarData(Base):
47
47
  hooks: Dict[str, None] = {}
48
48
  interpolations: List[Tuple[int, int]] = []
49
49
  @classmethod
50
- def merge(cls, *others: VarData | None) -> VarData | None: ...
50
+ def merge(cls, *others: ImmutableVarData | VarData | None) -> VarData | None: ...
51
+
52
+ class ImmutableVarData:
53
+ state: str = ""
54
+ imports: ImmutableParsedImportDict = tuple()
55
+ hooks: Tuple[str, ...] = tuple()
56
+ def __init__(
57
+ self,
58
+ state: str = "",
59
+ imports: ImportDict | ParsedImportDict | None = None,
60
+ hooks: dict[str, None] | None = None,
61
+ ) -> None: ...
62
+ @classmethod
63
+ def merge(
64
+ cls, *others: ImmutableVarData | VarData | None
65
+ ) -> ImmutableVarData | None: ...
66
+
67
+ def _decode_var_immutable(value: str) -> tuple[ImmutableVarData, str]: ...
51
68
 
52
69
  class Var:
53
70
  _var_name: str
@@ -133,6 +150,7 @@ class Var:
133
150
  @property
134
151
  def _var_full_name(self) -> str: ...
135
152
  def _var_set_state(self, state: Type[BaseState] | str) -> Any: ...
153
+ def _get_all_var_data(self) -> VarData: ...
136
154
 
137
155
  @dataclass(eq=False)
138
156
  class BaseVar(Var):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: reflex
3
- Version: 0.5.7
3
+ Version: 0.5.8
4
4
  Summary: Web apps in pure Python.
5
5
  Home-page: https://reflex.dev
6
6
  License: Apache-2.0
@@ -72,7 +72,7 @@ Description-Content-Type: text/markdown
72
72
 
73
73
  ---
74
74
 
75
- [English](https://github.com/reflex-dev/reflex/blob/main/README.md) | [简体中文](https://github.com/reflex-dev/reflex/blob/main/docs/zh/zh_cn/README.md) | [繁體中文](https://github.com/reflex-dev/reflex/blob/main/docs/zh/zh_tw/README.md) | [Türkçe](https://github.com/reflex-dev/reflex/blob/main/docs/tr/README.md) | [हिंदी](https://github.com/reflex-dev/reflex/blob/main/docs/in/README.md) | [Português (Brasil)](https://github.com/reflex-dev/reflex/blob/main/docs/pt/pt_br/README.md) | [Italiano](https://github.com/reflex-dev/reflex/blob/main/docs/it/README.md) | [Español](https://github.com/reflex-dev/reflex/blob/main/docs/es/README.md) | [한국어](https://github.com/reflex-dev/reflex/blob/main/docs/kr/README.md) | [日本語](https://github.com/reflex-dev/reflex/blob/main/docs/ja/README.md) | [Deutsch](https://github.com/reflex-dev/reflex/blob/main/docs/de/README.md)
75
+ [English](https://github.com/reflex-dev/reflex/blob/main/README.md) | [简体中文](https://github.com/reflex-dev/reflex/blob/main/docs/zh/zh_cn/README.md) | [繁體中文](https://github.com/reflex-dev/reflex/blob/main/docs/zh/zh_tw/README.md) | [Türkçe](https://github.com/reflex-dev/reflex/blob/main/docs/tr/README.md) | [हिंदी](https://github.com/reflex-dev/reflex/blob/main/docs/in/README.md) | [Português (Brasil)](https://github.com/reflex-dev/reflex/blob/main/docs/pt/pt_br/README.md) | [Italiano](https://github.com/reflex-dev/reflex/blob/main/docs/it/README.md) | [Español](https://github.com/reflex-dev/reflex/blob/main/docs/es/README.md) | [한국어](https://github.com/reflex-dev/reflex/blob/main/docs/kr/README.md) | [日本語](https://github.com/reflex-dev/reflex/blob/main/docs/ja/README.md) | [Deutsch](https://github.com/reflex-dev/reflex/blob/main/docs/de/README.md) | [Persian (پارسی)](https://github.com/reflex-dev/reflex/blob/main/docs/pe/README.md)
76
76
 
77
77
  ---
78
78
 
@@ -62,12 +62,12 @@ reflex/.templates/web/utils/helpers/debounce.js,sha256=xGhtTRtS_xIcaeqnYVvYJNseL
62
62
  reflex/.templates/web/utils/helpers/paste.js,sha256=ef30HsR83jRzzvZnl8yV79yqFP8TC_u8SlN99cCS_OM,1799
63
63
  reflex/.templates/web/utils/helpers/range.js,sha256=FevdZzCVxjF57ullfjpcUpeOXRxh5v09YnBB0jPbrS4,1152
64
64
  reflex/.templates/web/utils/helpers/throttle.js,sha256=qxeyaEojaTeX36FPGftzVWrzDsRQU4iqg3U9RJz9Vj4,566
65
- reflex/.templates/web/utils/state.js,sha256=c56zCKUoSgHzlCFq3Zc5CQKTh1AaQa3KInE-6fv5pFI,25946
65
+ reflex/.templates/web/utils/state.js,sha256=149_FgESKLS2-P9oivf37lo4plA74j8hm_ICunkHdI0,25934
66
66
  reflex/__init__.py,sha256=ODbR-WJ4-ugGhepPf34fUy2GZdkxo3TpZaca1tpD7kw,9728
67
67
  reflex/__init__.pyi,sha256=brBPyevzsUhaSKKgJVkXmm8VmXy8umVIIBjjV4IwcTI,10751
68
68
  reflex/__main__.py,sha256=6cVrGEyT3j3tEvlEVUatpaYfbB5EF3UVY-6vc_Z7-hw,108
69
69
  reflex/admin.py,sha256=_3pkkauMiTGJJ0kwAEBnsUWAgZZ_1WNnCaaObbhpmUI,374
70
- reflex/app.py,sha256=R7mYCVX-Fg2T99B9KZ8W_J6Xl0efodYK-n5A5_Yd-MU,54111
70
+ reflex/app.py,sha256=QlpVJWwkmVyTPRiEitwWh5I6rO7NNVI6311NurG8W1c,54708
71
71
  reflex/app_mixins/__init__.py,sha256=Oegz3-gZLP9p2OAN5ALNbsgxuNQfS6lGZgQA8cc-9mQ,137
72
72
  reflex/app_mixins/lifespan.py,sha256=0PaavAPTYmF7JdLKGfZQu_NT7oAaxyq7-5fauLZ9e8Y,2048
73
73
  reflex/app_mixins/middleware.py,sha256=6Yby_Uw1-J0K7NgPyh-X7tGGhmezn6D7-KsfABYAVBU,3130
@@ -245,8 +245,8 @@ reflex/components/chakra/typography/text.pyi,sha256=BAB7RTUo8GnF1TRy8Ee0EsG8nJB4
245
245
  reflex/components/component.py,sha256=4mdIUM-rVbYHpeb77BhkSpjfB3ZVS52FA-RZlazVaYI,79389
246
246
  reflex/components/core/__init__.py,sha256=msAsWb_6bmZGSei4gEpyYczuJ0VNEZtg20fRtyb3wwM,1285
247
247
  reflex/components/core/__init__.pyi,sha256=hmng2kT4e3iBSSI_x9t7g2-58G6Cb4rhuwz_APJ-UZM,1994
248
- reflex/components/core/banner.py,sha256=JwITziJchgOcs2cKDNn6EX4yqhgCDW-bgNqlz3BMNo8,8356
249
- reflex/components/core/banner.pyi,sha256=hKra3WaBtQvAXXqc_rZ8n3mND_oTdl-4wy0Fn4ReOFU,22138
248
+ reflex/components/core/banner.py,sha256=weZqoXuU0NaL3tCfe89jNkzir4_JgK6X51WQLQXAHwE,8758
249
+ reflex/components/core/banner.pyi,sha256=pxNBtRfx4p7-jOC9bwm4dj-qUbEjXu9XjZ4a9HClFCs,22179
250
250
  reflex/components/core/breakpoints.py,sha256=ZEUGByvPrGM2GFH0K9raGcWkNX8LBhX9o3atE0eCYKs,2711
251
251
  reflex/components/core/client_side_routing.py,sha256=eTt7EdzouejGUXVsy_Fe3SoH-T3l-LOkxo0Hx_Wrjx0,1903
252
252
  reflex/components/core/client_side_routing.pyi,sha256=edJP3PkxEkayD0XKS7kc9f2FiZBZaEAMzTFJATBJ2ZQ,6183
@@ -254,7 +254,7 @@ reflex/components/core/clipboard.py,sha256=672mLbLlYB3gds6ZMTqYtx_LvalFc9nRErWSr
254
254
  reflex/components/core/clipboard.pyi,sha256=pzYGTlmE5tOnDoDCl_dVkc6bIYVjKT4PwI0dYGJGU3U,3936
255
255
  reflex/components/core/colors.py,sha256=-hzVGLEq3TiqroqzMi_YzGBCPXMvkNsen3pS_NzIQNk,590
256
256
  reflex/components/core/cond.py,sha256=wLHkGlp47FXk_VlzXx4n8k8xcLleWQsiWgIoNyUpuBE,6369
257
- reflex/components/core/debounce.py,sha256=KFyfnvnaevSWrj04Uehh2w8guV2VM9oGx_ApuhP8q9M,4660
257
+ reflex/components/core/debounce.py,sha256=NJyFT5rp3VFUrEeRK388kJ6qL8tqSq_t1gTsRQVmG8U,4810
258
258
  reflex/components/core/debounce.pyi,sha256=DBRFYOemKi_YYZRzRef7iQ9CSrchhPkVLlNGLDXdwUc,4038
259
259
  reflex/components/core/foreach.py,sha256=iTJMVHTUsWZzPN1xVT4CBsRHzDKv9bfLbUQkZM9tPV4,4823
260
260
  reflex/components/core/html.py,sha256=iSeKFcld5m4zoXOGq0QEaKKtgTUUVLrIEVsP3cyYCxE,1305
@@ -271,25 +271,25 @@ reflex/components/datadisplay/code.pyi,sha256=1yC80QYXhImKmN88MaL6a-rdbmsBUytM0_
271
271
  reflex/components/datadisplay/dataeditor.py,sha256=dVauysAdOTjwbjQCEd-64InsYRdPtBurbGbefQj2t5k,12387
272
272
  reflex/components/datadisplay/dataeditor.pyi,sha256=h_syg3HzmAECXvAOiw-kEiZ0ZXDsdyxpECynVPp_trQ,12128
273
273
  reflex/components/datadisplay/logo.py,sha256=XoHt8xdbcikv3ptxeG8U--g8RzLNpUAG2sP7m4v2ZKo,2563
274
- reflex/components/el/__init__.py,sha256=nfIjf_cyieEmxptKjA6wRjoongswXv4X3n6vDmsdarI,416
275
- reflex/components/el/__init__.pyi,sha256=lthwhs0mZSfcF2oNiphg67Q5P2uQHEqwJnvSjmkx0mg,10111
274
+ reflex/components/el/__init__.py,sha256=y4GvWPSX_mw5ohrCU-V1ieg_atGY6oMb7JqPwFPS2ng,475
275
+ reflex/components/el/__init__.pyi,sha256=yVxxwyq1NQr8wc3S3dN9rYhE2twdJvthCqi9M1bkbqc,10258
276
276
  reflex/components/el/constants/__init__.py,sha256=9h2hdnOSltQLDEM6w1nGmv1B8Bf0tMquTCi5RhvBT6c,113
277
277
  reflex/components/el/constants/html.py,sha256=hIebFwWritMmd3VCMYBNg0k_2UM1QDIhT_Q-EQsCWEA,7175
278
278
  reflex/components/el/constants/react.py,sha256=f1-Vo8iWn2jSrR7vy-UwGbGRvw88UUZnbb3Rb56MSS4,15554
279
279
  reflex/components/el/constants/reflex.py,sha256=SJidKWxPv0bwjPbeo57KFuEQNGyd8XUJrV-HfzX3tnE,1713
280
280
  reflex/components/el/element.py,sha256=dQwT9dk6USK9cbnmzdW_CMSv-5NEYcr7td8oZO7LfCI,493
281
281
  reflex/components/el/element.pyi,sha256=-W-QEZak6DWYNcr1EKbi6WF9Q3PkW4GADT38kdGDKxs,3191
282
- reflex/components/el/elements/__init__.py,sha256=UrxkVLcbWLT39VWSDbbAqaa6E0hI0QzxR05VKn0uFvU,2398
283
- reflex/components/el/elements/__init__.pyi,sha256=VtaWS0AqX40Lvm5U78Hb9HFqXtV6imzb3wOMjxTmIds,10172
282
+ reflex/components/el/elements/__init__.py,sha256=NlZMjOQ0PT0CDFXycQChrnVXvC2WLDxGAYL3Yq876hQ,2529
283
+ reflex/components/el/elements/__init__.pyi,sha256=SNnx0Se9Uz192GbXsAxFIqcZX_FmRgvIFKJIWmkk0_4,10367
284
284
  reflex/components/el/elements/base.py,sha256=ot4PjFA2je13pGft2LCQohFpaioqrex3-4Cz72R_UvY,1983
285
285
  reflex/components/el/elements/base.pyi,sha256=Q00178g3hUN7mA6wSBp8DeDMyfj7pjX047CWOHBp8IU,5970
286
286
  reflex/components/el/elements/forms.py,sha256=57QvGT8fXfKIefcrQpQqHB_OIwEsHWBX6PuNiLv8I88,19936
287
287
  reflex/components/el/elements/forms.pyi,sha256=YV_NctURe41LSV24HLWCNlN9v6Stw07GxrA0_OaDmJM,93849
288
288
  reflex/components/el/elements/inline.py,sha256=2t2HL3_rmrjyX12FgP1yJ2o4UrahDhTdQh2h-2i9-uc,4085
289
289
  reflex/components/el/elements/inline.pyi,sha256=C24UygU3cAa1cgQ675TnNYhoA-XX9O5wXvMUNlkfz38,156731
290
- reflex/components/el/elements/media.py,sha256=NIPsZNghWmrZVf-2dzw9a1tegOBKTuF8VUXTaB4Fv30,10003
291
- reflex/components/el/elements/media.pyi,sha256=syw9MzOVTxljG2Y_-AJZTSjfQE3CC9YcbYUCWsij2jk,106682
292
- reflex/components/el/elements/metadata.py,sha256=36icJlpQhEQb3J5Y32n0uN1voDQbyUdmEo0D5K2k7tY,1685
290
+ reflex/components/el/elements/media.py,sha256=VqbjmRonCA7qL6wJ7OzR5jbKQWzjCyxHmdPKgQfCNuM,12538
291
+ reflex/components/el/elements/media.pyi,sha256=uJP9zuXoPoW0lCwaG1Yu-BFZ6-EcwylLGUJ8DIcbCes,131309
292
+ reflex/components/el/elements/metadata.py,sha256=INVH5xXCqwDhOWaoFcJ9YsqHfZQKlWy_BbsXRIXK0jM,1803
293
293
  reflex/components/el/elements/metadata.pyi,sha256=sfw4WGMBhscpjqMQ76axi_ITa6fy9fTN3622VPA8iPk,29451
294
294
  reflex/components/el/elements/other.py,sha256=vMmqTxgPfd73qiVadyFagv8C_0PsV5AcoBFMI4f0gkg,1729
295
295
  reflex/components/el/elements/other.pyi,sha256=gE4do7ZZ8-PAE-nktu_k9yz6cFK2TGc-b-sIagKB0C4,40057
@@ -335,7 +335,7 @@ reflex/components/radix/primitives/__init__.py,sha256=R2sdZJqQCYaLScGkXnXDKAjVgV
335
335
  reflex/components/radix/primitives/__init__.pyi,sha256=C3ryDDEVq8kZp2PBm-_onHKXumFnKD__B2puDbO4WjE,401
336
336
  reflex/components/radix/primitives/accordion.py,sha256=NKQpummz3fGSnNOzdqJmH3XwNl6W3IWFNJFSjHVbK40,15569
337
337
  reflex/components/radix/primitives/accordion.pyi,sha256=0C7QnKTa3BOTrIu2WL-O1EJ4F3j53DIMOtMZrzh7WaY,37567
338
- reflex/components/radix/primitives/base.py,sha256=QTdESCrw9ceQgPr3VtfjRTmpKeP1OH6tZX0dWZBpEFU,870
338
+ reflex/components/radix/primitives/base.py,sha256=rdA-ac6tkApmC4gPVmlyLaq7bFrY1ajw4sOOr8RPOKw,899
339
339
  reflex/components/radix/primitives/base.pyi,sha256=95CZauwaCRAZOpidA62vN3tl5eCnoHxN1IQ0ZO9Zs3A,6330
340
340
  reflex/components/radix/primitives/drawer.py,sha256=yXSnNLSP1WBfrsicqQP0hYlUOgYapW8S35NY-lzFuJk,8189
341
341
  reflex/components/radix/primitives/drawer.pyi,sha256=Y6ADr_Igtk6NLmT-kxyrUevAPmtEyEzrF6FC6yNp8Jw,34117
@@ -437,7 +437,7 @@ reflex/components/radix/themes/layout/flex.py,sha256=UXpHSmCzsaxmBsjoTqqZVvptVN9
437
437
  reflex/components/radix/themes/layout/flex.pyi,sha256=RzyMc1PHrFChgFP_0BxGSUUItPtvqmEHVvmXVkHLfNE,9932
438
438
  reflex/components/radix/themes/layout/grid.py,sha256=m58o9QjcvK81nDzS2oGVToVuonxMi_oZy0zA6gx2UC4,1699
439
439
  reflex/components/radix/themes/layout/grid.pyi,sha256=jcYI4vI9N9Aw58y6v9Rio3hft0xoeIJKa2knbkCybAU,11120
440
- reflex/components/radix/themes/layout/list.py,sha256=T0FJahH9kILWnuA3sI7_o51fBk-pBzfA747HDmkdz2g,5344
440
+ reflex/components/radix/themes/layout/list.py,sha256=kVjThsZcZg5OuFZormIYbxkHxGzATPgkXD_wZAWqF9o,5250
441
441
  reflex/components/radix/themes/layout/list.pyi,sha256=aEVmPB5dNuI_phIYHAu95UlufwTcFET6_jMjrczdxVw,27605
442
442
  reflex/components/radix/themes/layout/section.py,sha256=0YIPRcqazcWhBMWQJwiohuURZ_ceFrFdQ1qiVOhUy1A,640
443
443
  reflex/components/radix/themes/layout/section.pyi,sha256=bm86u9uPlHY3ujFReMnJM0WpO4ydf7FHHZ8czNTLBWM,6752
@@ -467,19 +467,19 @@ reflex/components/react_player/video.py,sha256=2V6tiwCwrzu9WPI1Wmuepk8kQ6M6K8nnM
467
467
  reflex/components/react_player/video.pyi,sha256=dzqTEpt5wZ1odNNvK2OhsO1lPYt1ww1nGTPoBXHT7b8,6191
468
468
  reflex/components/recharts/__init__.py,sha256=GUifJIUtG91u4K55junZ_-l5ArcRFFDIyjS4y0lyAL4,2644
469
469
  reflex/components/recharts/__init__.pyi,sha256=FUu_BmjhVTbjU92KH2NnYEFr4eeZLMkthX8iIwswDIM,5076
470
- reflex/components/recharts/cartesian.py,sha256=AiPNaQuaUBu-iMGEZ-jJ1bBRZwpUQIbp9VOS6Ffu0bs,29739
471
- reflex/components/recharts/cartesian.pyi,sha256=HRE-dz9htv3eM1Z1n2SpqT35CNwhwueDtDDPuD5UA5k,107937
472
- reflex/components/recharts/charts.py,sha256=0Odwzjjtk6aRkVumHUKyoxsV2SsPMcE7UQtbYeG4HPE,17640
473
- reflex/components/recharts/charts.pyi,sha256=uhCfMkKcgG7CQJQ88KcPM4uS4xtr8dYNsEanDuc-3bs,54403
474
- reflex/components/recharts/general.py,sha256=8LXd0e1GdTE3UgZaZ3Ak6f_LN64KGK4SZ2RHKHpUi6E,7314
475
- reflex/components/recharts/general.pyi,sha256=DaCg7JrG4Sl0yIKeUmg0VkQa6A09R_K8BTWJbBeuquw,25468
476
- reflex/components/recharts/polar.py,sha256=SN7gvDKqBqocQ9CQD0XIML1vlK3GLKz4x9JwfX87L18,11197
477
- reflex/components/recharts/polar.pyi,sha256=NIQybNTldkik6xEdAirSXPVLnAHBqGggz-qE8CFgZ7o,26216
470
+ reflex/components/recharts/cartesian.py,sha256=6FNC-ze-pHsGl2ujMkGr_WSOwMLkMLoljeHYBJ-7A9E,31032
471
+ reflex/components/recharts/cartesian.pyi,sha256=iiNZxKdA0llw260CGj87gv9NS7VbGogT_Ln1NLwSX8U,108485
472
+ reflex/components/recharts/charts.py,sha256=hG30Prn3w3C4zi6giXazjv0hgeVZeihDCfMhyVNhEgE,17770
473
+ reflex/components/recharts/charts.pyi,sha256=zwE0ijRdw387uH-ESrMTg5ZrpTA7x7ptC0HMYDJRomU,54587
474
+ reflex/components/recharts/general.py,sha256=zOrYHP6NJm4sOnuBT1qnNiNPYRPBukhvfAcJEyUm9Zc,7835
475
+ reflex/components/recharts/general.pyi,sha256=pGkZlwP2XpFl-cuHOEVCpmqrVxwufVPJ_Z7KmBhLrvc,25529
476
+ reflex/components/recharts/polar.py,sha256=hVQrlwLBYdMOeKx9mFI3YTosPG51cGjh2WuWC8rY5bc,12511
477
+ reflex/components/recharts/polar.pyi,sha256=WpNnvR87iVvwT243HFQesemxOQ3faYNKv3gC3EtN93c,27968
478
478
  reflex/components/recharts/recharts.py,sha256=Krz2U0DNzr0Q_Z7Kuwr6_dFX8HdLpH6eBBwp29CdPq4,3433
479
479
  reflex/components/recharts/recharts.pyi,sha256=42KHKkYPwzLcH8uLd9IHd8J_hQ4lh3yniVG2luyy9xI,8592
480
480
  reflex/components/sonner/__init__.py,sha256=L_mdRIy7-ccRGSz5VK6J8O-c-e-D1p9xWw29_ErrvGg,68
481
- reflex/components/sonner/toast.py,sha256=XnamDs6Zsu7d67FEP9AMbq4weuuLVM4ZdPcyCx5ZJLY,10438
482
- reflex/components/sonner/toast.pyi,sha256=7uSLtQ_6L5Iul9C5b8tNjDBhycUwKPQI0xjL6Cu58Is,8026
481
+ reflex/components/sonner/toast.py,sha256=U1FPg_D99Ecb1KQ7Uf1FJyIyTqFdH1WQezFC4DudIBA,11350
482
+ reflex/components/sonner/toast.pyi,sha256=K5O6LDuGZVs2kNfOFicen7BKqNqHCN3ciWt-SBgHouE,8194
483
483
  reflex/components/suneditor/__init__.py,sha256=htkPzy0O_1ro1nw8w8gFPjYhg5xywMpsUfc4Dl3OHuw,109
484
484
  reflex/components/suneditor/editor.py,sha256=MTj3QBN11TSUDgsv8fToWrjEgkMSRVGohAVRi2VzS_k,7525
485
485
  reflex/components/suneditor/editor.pyi,sha256=a28U4PcxCd0pRoWt8WYCFzuJeJDnXdjue0ii39Nbz2s,9998
@@ -491,12 +491,12 @@ reflex/components/tags/tag.py,sha256=iORWH5NBQ8U1cdMfUKaAkvFiZhvs5FPR9eHKlGjmPYg
491
491
  reflex/components/tags/tagless.py,sha256=qO7Gm4V0ITDyymHkyltfz53155ZBt-W_WIPDYy93ca0,587
492
492
  reflex/config.py,sha256=YbLTNeQ8P31b4HiYmC1rFPfRplP0OQp_2BZU6Azv-aw,11958
493
493
  reflex/constants/__init__.py,sha256=ICWLo-8TEu_HuMqy-dXdw3Zi7NYbA7ZvHmWGpt3L_VY,2030
494
- reflex/constants/base.py,sha256=F-vnRX8am-0assoM4DjvZOAo-wcsnaMw3BF4PO9KKHQ,5618
494
+ reflex/constants/base.py,sha256=R0wnIJh_SSz2C9_KKSNEGz0nkEJSJjapHplEr-isFUo,6356
495
495
  reflex/constants/colors.py,sha256=gab_GwjKcbpRJGS2zX0gkmc_yFT1nmQbFDHqx0mXKB0,1625
496
496
  reflex/constants/compiler.py,sha256=Nool-szUS4fMEvEZx829sCyOw2g7f__RCfd1rNcAtec,4933
497
497
  reflex/constants/config.py,sha256=1ocFCpfKmCo8UPpeSSqjt45-bmjvl1nFgeAY2pBs7so,1475
498
498
  reflex/constants/custom_components.py,sha256=SX0SQVb-d6HJkZdezFL4UgkumyF6eJF682y4OvRUqUM,1268
499
- reflex/constants/event.py,sha256=4Od4X2nIY92sqQIorAhTcKnWRYPBS2E8M1gykiuEkMk,2707
499
+ reflex/constants/event.py,sha256=LeZFFqVpiuzMJZ99VvhSbrd88rWmCS-pdzgtRei4GfM,2795
500
500
  reflex/constants/installer.py,sha256=kLchxwqV2jfTVkqfwhbOw5_dVRweoJUnqFD4mp3pZsE,3427
501
501
  reflex/constants/route.py,sha256=fu1jp9MoIriUJ8Cu4gLeinTxkyVBbRPs8Bkt35vqYOM,2144
502
502
  reflex/constants/style.py,sha256=sJ6LuPY1OWemwMXnI1Htm-pa087HWT6PWljUeyokcUI,474
@@ -510,16 +510,19 @@ reflex/experimental/hooks.py,sha256=veeds9cSvEdLZDDNIFD-Ye5XRQombrBQNRmiVYOBXp8,
510
510
  reflex/experimental/layout.py,sha256=Zx8AGqWJrSzXY1XapsorOx-jNo2kRqaWOc4QJRulQdU,7656
511
511
  reflex/experimental/layout.pyi,sha256=aThlDKlifnG3QqIMQH5SwYewrLLXws8u38z3VW8BRSk,18933
512
512
  reflex/experimental/misc.py,sha256=Ikmr-XuQfzOZqrY6yxDXkmpr7C5uDagc4nnowYmjWsc,610
513
- reflex/experimental/vars/__init__.py,sha256=DqyoG1kOnSoVzAwxEHqgkqEZSb7mW3cS0HpQ_MCfnr0,95
514
- reflex/experimental/vars/base.py,sha256=zdP5u-Wjcs8XNwjZwqLSGLSmlpEH3eO5m_TL0bYtpaE,6574
513
+ reflex/experimental/vars/__init__.py,sha256=bC1gNPwoTCdCy08WN8kS9xqm331pZzwUuPjBJjfXSYE,986
514
+ reflex/experimental/vars/base.py,sha256=0VQfKvwLSy_shHmDlRJLrg04xILUGYvR5iwe-8hHEMk,13806
515
+ reflex/experimental/vars/function.py,sha256=NTSsNkPAsMiy-UM4LKEZPUYgKOglUG7gydAETBV5k3Y,6556
516
+ reflex/experimental/vars/number.py,sha256=ZDDZd8uchg6_nuwsfaukNeQEunsVIFMNbS-ENjv-c74,38449
517
+ reflex/experimental/vars/sequence.py,sha256=gPAaPanAYzHt0tS4Es5-pguSxVk18YW2zgu3thonebM,31065
515
518
  reflex/middleware/__init__.py,sha256=x7xTeDuc73Hjj43k1J63naC9x8vzFxl4sq7cCFBX7sk,111
516
519
  reflex/middleware/hydrate_middleware.py,sha256=gZ5RTvsfKfrTkQN6QsTLfSnBAczCtGiBQ5edrOii3Vg,1485
517
520
  reflex/middleware/middleware.py,sha256=1tEckRzSNWAwW8VsKt_x88lkk2vSFnRWH1uorsauNwI,1170
518
521
  reflex/model.py,sha256=f9F3J3JZX_NmUCU5mN4Lh7afclq9fikPUB1K2FmNlhU,13545
519
522
  reflex/page.py,sha256=NPT0xMownZGTiYiRtrUJnvAe_4oEvlzEJEkG-vrGhqI,2077
520
- reflex/reflex.py,sha256=1wJX6casYE_sAc1JCo4vng9gsyAeiYsG2Yw7itk5Abs,17874
523
+ reflex/reflex.py,sha256=QfywgrbaQYnhTxgXLYegbcU8pB4q216csgzj8VRWFS8,18989
521
524
  reflex/route.py,sha256=WZS7stKgO94nekFFYHaOqNgN3zZGpJb3YpGF4ViTHmw,4198
522
- reflex/state.py,sha256=Uxy2M37aWTybvbQ4eCXhx-0Ryfkbu3AGz78EtXI_iVA,112623
525
+ reflex/state.py,sha256=gBwmm91KE0OVSd3kojGZPv9G3YUhgTp-EHkEAl68V8E,114529
523
526
  reflex/style.py,sha256=sLeIKBKUpZV1q1QwexVyckqFphjoxsPqCstVQf-D0Ak,11703
524
527
  reflex/testing.py,sha256=zyIoa0PZuTuPP0My64zUc1aiqiekLKkb6GAXFUjzFfc,34081
525
528
  reflex/utils/__init__.py,sha256=y-AHKiRQAhk2oAkvn7W8cRVTZVK625ff8tTwvZtO7S4,24
@@ -531,20 +534,21 @@ reflex/utils/exceptions.py,sha256=txYH8qtcUAwYSh5SikN76Htn8Z6MfdN2Ms3kvNdxPOk,22
531
534
  reflex/utils/exec.py,sha256=jTkIbbrSgq8tCbUmwoN2s26XghPVJM5jBVaOlPYCkoU,11365
532
535
  reflex/utils/export.py,sha256=3dI9QjoU0ZA_g8OSQipVLpFWQcxWa_sHkpezWemvWbo,2366
533
536
  reflex/utils/format.py,sha256=zfQb9PgeKsyMJ2koSz9CBUCWIH6WJ5-JIWYyyTTv3gE,26336
534
- reflex/utils/imports.py,sha256=pRjW6PTP_XyAQ0x5UoAI1_EDzBZnyIL5yd3oTQXtV3U,3193
537
+ reflex/utils/imports.py,sha256=Pvdcr_bkFpTgZ5gZfc5SKKPCvbcqlZSfwyGVhxNh2kc,4770
535
538
  reflex/utils/lazy_loader.py,sha256=utVpUjKcz32GC1I7g0g7OlTyvVoZNFcuAjNtnxiSYww,1282
536
539
  reflex/utils/path_ops.py,sha256=XQVq_r_2tFHECWuJPyxzk3GzijCJemgXxfI5w2rc_Vs,4924
537
- reflex/utils/prerequisites.py,sha256=RzzX0_VX4JvO4z8M1DCuVcz7PArf3ilKKvXZUhN1pYo,52406
540
+ reflex/utils/prerequisites.py,sha256=HtlkDnQ3EfUecwerL1KUN60mjT9VbS83_O29osz-nF8,54892
538
541
  reflex/utils/processes.py,sha256=y8X5PxycEWT1ItLtpIS-rzrUvNQ9MUOkHdIg_zK9Vp0,13228
539
- reflex/utils/pyi_generator.py,sha256=zFQlKOonT9OMlfne99NE9zLQVp02i4lfJ9q2kBa5myY,34206
542
+ reflex/utils/pyi_generator.py,sha256=7kz5F0hzE8nEdybnrU8C_y3xaZwpjX3J50d3PVPwIhs,34363
543
+ reflex/utils/redir.py,sha256=B0K9m6ejDW0ABeclBb4AsRRORvx_stCTWsrDe1YvkzY,1679
540
544
  reflex/utils/serializers.py,sha256=lARTafxXhtNmC15lFaw424MJVwGRcWb8D42_osjKDWE,11689
541
545
  reflex/utils/telemetry.py,sha256=t4cvQmoAxTKAWF53vGH6ZEX5QYrK_KEcarmvMy-4_E4,5568
542
546
  reflex/utils/types.py,sha256=nXB0RTGDfNQkiAvfb2RdXLHxFS9TX9cy-wfgqbPiIpw,17826
543
547
  reflex/utils/watch.py,sha256=ukPT3YrvqsXYN6BInWiO_RPry5osSch9lOomQhxDyk0,2685
544
- reflex/vars.py,sha256=c0ceefJuCyId8JsLVrjvjl2aoKkHYvMns-cIGhQ6Q8M,78242
545
- reflex/vars.pyi,sha256=skuzSaG65wOM00JYJKiEeSAChwAFALVlcnwbsZDYmZY,6540
546
- reflex-0.5.7.dist-info/LICENSE,sha256=dw3zLrp9f5ObD7kqS32vWfhcImfO52PMmRqvtxq_YEE,11358
547
- reflex-0.5.7.dist-info/METADATA,sha256=oo-9v0FEvnPa06_bbcl9ioPCCss_ZJ7oXT5PhlE4jc8,12097
548
- reflex-0.5.7.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
549
- reflex-0.5.7.dist-info/entry_points.txt,sha256=H1Z5Yat_xJfy0dRT1Frk2PkO_p41Xy7fCKlj4FcdL9o,44
550
- reflex-0.5.7.dist-info/RECORD,,
548
+ reflex/vars.py,sha256=ze-WlM7Mj2zTUJpNIIoBTM8xRPSEVv-WHevcxovveBQ,84910
549
+ reflex/vars.pyi,sha256=UR-YPB0xtaY3rhN94dE2_SyZaP7LbxjOLkQhOz2tuZU,7151
550
+ reflex-0.5.8.dist-info/LICENSE,sha256=dw3zLrp9f5ObD7kqS32vWfhcImfO52PMmRqvtxq_YEE,11358
551
+ reflex-0.5.8.dist-info/METADATA,sha256=nF4FLtb5l3RD1ci-q2u0xQmmTFhtcnyG4cFP7gzNLDA,12188
552
+ reflex-0.5.8.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
553
+ reflex-0.5.8.dist-info/entry_points.txt,sha256=H1Z5Yat_xJfy0dRT1Frk2PkO_p41Xy7fCKlj4FcdL9o,44
554
+ reflex-0.5.8.dist-info/RECORD,,
File without changes