django-trellis 0.1.0__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.
Files changed (199) hide show
  1. django_trellis-0.1.0.dist-info/METADATA +16 -0
  2. django_trellis-0.1.0.dist-info/RECORD +199 -0
  3. django_trellis-0.1.0.dist-info/WHEEL +4 -0
  4. django_trellis-0.1.0.dist-info/licenses/LICENSE +21 -0
  5. trellis_ui/__init__.py +30 -0
  6. trellis_ui/apps.py +6 -0
  7. trellis_ui/context_processors.py +6 -0
  8. trellis_ui/events.py +15 -0
  9. trellis_ui/filters/__init__.py +3 -0
  10. trellis_ui/filters/rules.py +148 -0
  11. trellis_ui/forms/__init__.py +22 -0
  12. trellis_ui/forms/base.py +23 -0
  13. trellis_ui/forms/boundfield.py +33 -0
  14. trellis_ui/forms/formsets.py +20 -0
  15. trellis_ui/forms/presets/__init__.py +3 -0
  16. trellis_ui/forms/presets/dates.py +164 -0
  17. trellis_ui/forms/renderers.py +21 -0
  18. trellis_ui/forms/widgets.py +698 -0
  19. trellis_ui/generated_styles.py +5 -0
  20. trellis_ui/static/trellis_ui/css/styles.css +4382 -0
  21. trellis_ui/static/trellis_ui/js/index.js +10 -0
  22. trellis_ui/stream.py +356 -0
  23. trellis_ui/targets.py +10 -0
  24. trellis_ui/templates/cotton/icons/add.html +17 -0
  25. trellis_ui/templates/cotton/icons/calendar.html +18 -0
  26. trellis_ui/templates/cotton/icons/checkmark.html +18 -0
  27. trellis_ui/templates/cotton/icons/chevron__down.html +17 -0
  28. trellis_ui/templates/cotton/icons/chevron__right.html +17 -0
  29. trellis_ui/templates/cotton/icons/close.html +19 -0
  30. trellis_ui/templates/cotton/icons/cloud__upload.html +8 -0
  31. trellis_ui/templates/cotton/icons/document__blank.html +10 -0
  32. trellis_ui/templates/cotton/icons/grip.html +21 -0
  33. trellis_ui/templates/cotton/icons/image.html +9 -0
  34. trellis_ui/templates/cotton/icons/menu.html +18 -0
  35. trellis_ui/templates/cotton/icons/moon.html +10 -0
  36. trellis_ui/templates/cotton/icons/overflow_menu__vertical.html +20 -0
  37. trellis_ui/templates/cotton/icons/search.html +18 -0
  38. trellis_ui/templates/cotton/icons/side_panel.html +15 -0
  39. trellis_ui/templates/cotton/icons/side_panel__close.html +17 -0
  40. trellis_ui/templates/cotton/icons/side_panel__open.html +17 -0
  41. trellis_ui/templates/cotton/icons/spinner.html +13 -0
  42. trellis_ui/templates/cotton/icons/subtract.html +17 -0
  43. trellis_ui/templates/cotton/icons/sun.html +10 -0
  44. trellis_ui/templates/cotton/icons/theme.html +13 -0
  45. trellis_ui/templates/cotton/icons/trash_can.html +18 -0
  46. trellis_ui/templates/cotton/layouts/app.html +57 -0
  47. trellis_ui/templates/cotton/layouts/base.html +88 -0
  48. trellis_ui/templates/cotton/layouts/guest.html +50 -0
  49. trellis_ui/templates/cotton/ui/accordion/content.html +14 -0
  50. trellis_ui/templates/cotton/ui/accordion/index.html +30 -0
  51. trellis_ui/templates/cotton/ui/accordion/item.html +40 -0
  52. trellis_ui/templates/cotton/ui/accordion/trigger.html +49 -0
  53. trellis_ui/templates/cotton/ui/action/index.html +16 -0
  54. trellis_ui/templates/cotton/ui/app/aside.html +7 -0
  55. trellis_ui/templates/cotton/ui/app/footer.html +7 -0
  56. trellis_ui/templates/cotton/ui/app/header.html +10 -0
  57. trellis_ui/templates/cotton/ui/app/index.html +19 -0
  58. trellis_ui/templates/cotton/ui/app/main.html +13 -0
  59. trellis_ui/templates/cotton/ui/badge/close.html +24 -0
  60. trellis_ui/templates/cotton/ui/badge/index.html +87 -0
  61. trellis_ui/templates/cotton/ui/box/index.html +34 -0
  62. trellis_ui/templates/cotton/ui/brand/index.html +66 -0
  63. trellis_ui/templates/cotton/ui/button/group.html +7 -0
  64. trellis_ui/templates/cotton/ui/button/index.html +92 -0
  65. trellis_ui/templates/cotton/ui/card/action.html +7 -0
  66. trellis_ui/templates/cotton/ui/card/content.html +7 -0
  67. trellis_ui/templates/cotton/ui/card/description.html +12 -0
  68. trellis_ui/templates/cotton/ui/card/footer.html +11 -0
  69. trellis_ui/templates/cotton/ui/card/header.html +7 -0
  70. trellis_ui/templates/cotton/ui/card/index.html +42 -0
  71. trellis_ui/templates/cotton/ui/card/title.html +13 -0
  72. trellis_ui/templates/cotton/ui/checkbox/control.html +104 -0
  73. trellis_ui/templates/cotton/ui/checkbox/group.html +28 -0
  74. trellis_ui/templates/cotton/ui/checkbox/index.html +62 -0
  75. trellis_ui/templates/cotton/ui/checkbox/indicator.html +18 -0
  76. trellis_ui/templates/cotton/ui/combobox/empty.html +13 -0
  77. trellis_ui/templates/cotton/ui/combobox/group.html +7 -0
  78. trellis_ui/templates/cotton/ui/combobox/impl.html +141 -0
  79. trellis_ui/templates/cotton/ui/combobox/index.html +32 -0
  80. trellis_ui/templates/cotton/ui/combobox/label.html +13 -0
  81. trellis_ui/templates/cotton/ui/combobox/option.html +70 -0
  82. trellis_ui/templates/cotton/ui/combobox/separator.html +11 -0
  83. trellis_ui/templates/cotton/ui/date_picker/impl.html +287 -0
  84. trellis_ui/templates/cotton/ui/date_picker/index.html +33 -0
  85. trellis_ui/templates/cotton/ui/date_picker/preset.html +20 -0
  86. trellis_ui/templates/cotton/ui/date_picker/presets.html +10 -0
  87. trellis_ui/templates/cotton/ui/date_picker/trigger.html +13 -0
  88. trellis_ui/templates/cotton/ui/dropdown/index.html +25 -0
  89. trellis_ui/templates/cotton/ui/field/description.html +10 -0
  90. trellis_ui/templates/cotton/ui/field/error.html +17 -0
  91. trellis_ui/templates/cotton/ui/field/group.html +10 -0
  92. trellis_ui/templates/cotton/ui/field/index.html +47 -0
  93. trellis_ui/templates/cotton/ui/field/label.html +15 -0
  94. trellis_ui/templates/cotton/ui/fieldset/index.html +37 -0
  95. trellis_ui/templates/cotton/ui/fieldset/legend.html +14 -0
  96. trellis_ui/templates/cotton/ui/file_upload/control.html +151 -0
  97. trellis_ui/templates/cotton/ui/file_upload/dropzone.html +39 -0
  98. trellis_ui/templates/cotton/ui/file_upload/index.html +36 -0
  99. trellis_ui/templates/cotton/ui/file_upload/item.html +45 -0
  100. trellis_ui/templates/cotton/ui/file_upload/list.html +7 -0
  101. trellis_ui/templates/cotton/ui/file_upload/remove.html +16 -0
  102. trellis_ui/templates/cotton/ui/frame/body.html +17 -0
  103. trellis_ui/templates/cotton/ui/frame/footer.html +13 -0
  104. trellis_ui/templates/cotton/ui/frame/header.html +13 -0
  105. trellis_ui/templates/cotton/ui/frame/index.html +26 -0
  106. trellis_ui/templates/cotton/ui/heading/index.html +7 -0
  107. trellis_ui/templates/cotton/ui/image/index.html +20 -0
  108. trellis_ui/templates/cotton/ui/input/control.html +1 -0
  109. trellis_ui/templates/cotton/ui/input/group.html +28 -0
  110. trellis_ui/templates/cotton/ui/input/impl.html +122 -0
  111. trellis_ui/templates/cotton/ui/input/index.html +27 -0
  112. trellis_ui/templates/cotton/ui/input/prefix.html +5 -0
  113. trellis_ui/templates/cotton/ui/input/suffix.html +5 -0
  114. trellis_ui/templates/cotton/ui/menu/group.html +7 -0
  115. trellis_ui/templates/cotton/ui/menu/index.html +17 -0
  116. trellis_ui/templates/cotton/ui/menu/item.html +87 -0
  117. trellis_ui/templates/cotton/ui/menu/label.html +14 -0
  118. trellis_ui/templates/cotton/ui/menu/separator.html +24 -0
  119. trellis_ui/templates/cotton/ui/modal/body.html +7 -0
  120. trellis_ui/templates/cotton/ui/modal/close.html +21 -0
  121. trellis_ui/templates/cotton/ui/modal/description.html +12 -0
  122. trellis_ui/templates/cotton/ui/modal/footer.html +7 -0
  123. trellis_ui/templates/cotton/ui/modal/index.html +78 -0
  124. trellis_ui/templates/cotton/ui/modal/outlet.html +11 -0
  125. trellis_ui/templates/cotton/ui/modal/title.html +12 -0
  126. trellis_ui/templates/cotton/ui/modal/trigger.html +13 -0
  127. trellis_ui/templates/cotton/ui/overlay/above.html +7 -0
  128. trellis_ui/templates/cotton/ui/overlay/index.html +15 -0
  129. trellis_ui/templates/cotton/ui/radio/group.html +32 -0
  130. trellis_ui/templates/cotton/ui/radio/index.html +93 -0
  131. trellis_ui/templates/cotton/ui/radio/indicator.html +11 -0
  132. trellis_ui/templates/cotton/ui/scroll_area/index.html +78 -0
  133. trellis_ui/templates/cotton/ui/select/button.html +12 -0
  134. trellis_ui/templates/cotton/ui/select/group.html +7 -0
  135. trellis_ui/templates/cotton/ui/select/impl.html +254 -0
  136. trellis_ui/templates/cotton/ui/select/index.html +33 -0
  137. trellis_ui/templates/cotton/ui/select/input.html +13 -0
  138. trellis_ui/templates/cotton/ui/select/label.html +12 -0
  139. trellis_ui/templates/cotton/ui/select/option/create.html +14 -0
  140. trellis_ui/templates/cotton/ui/select/option/empty.html +11 -0
  141. trellis_ui/templates/cotton/ui/select/option/selected.html +3 -0
  142. trellis_ui/templates/cotton/ui/select/option.html +76 -0
  143. trellis_ui/templates/cotton/ui/select/search.html +30 -0
  144. trellis_ui/templates/cotton/ui/select/separator.html +11 -0
  145. trellis_ui/templates/cotton/ui/select/trigger.html +11 -0
  146. trellis_ui/templates/cotton/ui/separator/index.html +42 -0
  147. trellis_ui/templates/cotton/ui/sidebar/content.html +10 -0
  148. trellis_ui/templates/cotton/ui/sidebar/footer.html +7 -0
  149. trellis_ui/templates/cotton/ui/sidebar/group.html +73 -0
  150. trellis_ui/templates/cotton/ui/sidebar/header.html +7 -0
  151. trellis_ui/templates/cotton/ui/sidebar/index.html +75 -0
  152. trellis_ui/templates/cotton/ui/sidebar/item.html +108 -0
  153. trellis_ui/templates/cotton/ui/sidebar/nav.html +11 -0
  154. trellis_ui/templates/cotton/ui/sidebar/toggle.html +31 -0
  155. trellis_ui/templates/cotton/ui/slider/index.html +174 -0
  156. trellis_ui/templates/cotton/ui/slider/tick.html +25 -0
  157. trellis_ui/templates/cotton/ui/spacer/index.html +6 -0
  158. trellis_ui/templates/cotton/ui/stream/index.html +3 -0
  159. trellis_ui/templates/cotton/ui/switch/control.html +3 -0
  160. trellis_ui/templates/cotton/ui/switch/impl.html +117 -0
  161. trellis_ui/templates/cotton/ui/switch/index.html +54 -0
  162. trellis_ui/templates/cotton/ui/table/body.html +7 -0
  163. trellis_ui/templates/cotton/ui/table/caption.html +10 -0
  164. trellis_ui/templates/cotton/ui/table/cell.html +11 -0
  165. trellis_ui/templates/cotton/ui/table/column/filter.html +10 -0
  166. trellis_ui/templates/cotton/ui/table/column.html +54 -0
  167. trellis_ui/templates/cotton/ui/table/empty.html +11 -0
  168. trellis_ui/templates/cotton/ui/table/footer.html +7 -0
  169. trellis_ui/templates/cotton/ui/table/header.html +7 -0
  170. trellis_ui/templates/cotton/ui/table/index.html +34 -0
  171. trellis_ui/templates/cotton/ui/table/row/header.html +12 -0
  172. trellis_ui/templates/cotton/ui/table/row.html +13 -0
  173. trellis_ui/templates/cotton/ui/tabs/index.html +27 -0
  174. trellis_ui/templates/cotton/ui/tabs/list.html +28 -0
  175. trellis_ui/templates/cotton/ui/tabs/panel.html +28 -0
  176. trellis_ui/templates/cotton/ui/tabs/panels.html +12 -0
  177. trellis_ui/templates/cotton/ui/tabs/tab.html +98 -0
  178. trellis_ui/templates/cotton/ui/text/index.html +7 -0
  179. trellis_ui/templates/cotton/ui/textarea/control.html +1 -0
  180. trellis_ui/templates/cotton/ui/textarea/impl.html +51 -0
  181. trellis_ui/templates/cotton/ui/textarea/index.html +27 -0
  182. trellis_ui/templates/cotton/ui/theme/text.html +5 -0
  183. trellis_ui/templates/cotton/ui/toast/index.html +65 -0
  184. trellis_ui/templates/cotton/ui/toast/outlet.html +28 -0
  185. trellis_ui/templates/trellis_ui/forms/field.html +22 -0
  186. trellis_ui/templates/trellis_ui/forms/form.html +15 -0
  187. trellis_ui/templates/trellis_ui/forms/formset.html +7 -0
  188. trellis_ui/templates/trellis_ui/forms/widgets/checkbox.html +8 -0
  189. trellis_ui/templates/trellis_ui/forms/widgets/checkbox_select.html +37 -0
  190. trellis_ui/templates/trellis_ui/forms/widgets/combobox_select.html +41 -0
  191. trellis_ui/templates/trellis_ui/forms/widgets/date_picker.html +59 -0
  192. trellis_ui/templates/trellis_ui/forms/widgets/file_upload.html +13 -0
  193. trellis_ui/templates/trellis_ui/forms/widgets/input.html +10 -0
  194. trellis_ui/templates/trellis_ui/forms/widgets/radio_select.html +38 -0
  195. trellis_ui/templates/trellis_ui/forms/widgets/select.html +95 -0
  196. trellis_ui/templates/trellis_ui/forms/widgets/textarea.html +10 -0
  197. trellis_ui/templatetags/__init__.py +1 -0
  198. trellis_ui/templatetags/ui_classes.py +93 -0
  199. trellis_ui/templatetags/ui_props.py +108 -0
@@ -0,0 +1,16 @@
1
+ Metadata-Version: 2.4
2
+ Name: django-trellis
3
+ Version: 0.1.0
4
+ Summary: Token-driven Django Cotton UI component kit.
5
+ License-Expression: MIT
6
+ License-File: LICENSE
7
+ Classifier: Framework :: Django
8
+ Classifier: Intended Audience :: Developers
9
+ Classifier: License :: OSI Approved :: MIT License
10
+ Requires-Python: >=3.13
11
+ Requires-Dist: django-cotton>=2.7.2
12
+ Requires-Dist: django-eventstream>=5.3.4
13
+ Requires-Dist: django>=6.0
14
+ Description-Content-Type: text/markdown
15
+
16
+ # Trellis UI
@@ -0,0 +1,199 @@
1
+ trellis_ui/__init__.py,sha256=dx6iLGNwcRM5yVMNzNaWu4BWZvOZLa7fpLO4PrGqblU,549
2
+ trellis_ui/apps.py,sha256=kgOSvIYmXcnbl4B9HSREX1ml-pjEn-Q5-FXB38fAYvI,126
3
+ trellis_ui/context_processors.py,sha256=c1f420z8gnFMpV4KMUfxPkdRQG6DaGUQt_umbo2ZbXc,63
4
+ trellis_ui/events.py,sha256=ACLzxrMXulS8y7znzO58jB6qoH4QMLIJAvGRLMihS-M,307
5
+ trellis_ui/generated_styles.py,sha256=JqKWLyYM2m5BYhiZ7B8okPHACU13osiOlfkwBKGptUQ,134407
6
+ trellis_ui/stream.py,sha256=i5Rx0UrPDy_pmpc9vI7EtNFZ-EL51mu47Xb5xUpkLA8,9503
7
+ trellis_ui/targets.py,sha256=XjzlSdDEJ_u63aUN1fQD2TwbzxOf0yIrPYkrcd-pW88,241
8
+ trellis_ui/filters/__init__.py,sha256=cVptZ6_vQxO-d6Oty6Ptlk6ATXSrjGMRGXo-qOX8hE0,58
9
+ trellis_ui/filters/rules.py,sha256=t2i4NynpIp3gBPxGZ_BmIBX2smbiFLybMU83Tdac6UE,4703
10
+ trellis_ui/forms/__init__.py,sha256=HUEegQCM3UU2jzih4BBDLtlL0JNeL1wEw0_wlWcJ6-Q,520
11
+ trellis_ui/forms/base.py,sha256=DJNX27La3XEx0OeIea7E0E07z8Xi0R_6NPd58HEt7eU,638
12
+ trellis_ui/forms/boundfield.py,sha256=KIpJW1OVfoy2a57BmZScUV7TJJZgOGCYHMVqOsK5iE8,1137
13
+ trellis_ui/forms/formsets.py,sha256=_BQ33Cu2l3ulu1g1EsyfIB3p7YqHaE7MMJBZflK94Fs,870
14
+ trellis_ui/forms/renderers.py,sha256=ym9Bu1RInvfMKjDa2NS2gNAs4GeW8KRfd4Ks3cR3-O4,766
15
+ trellis_ui/forms/widgets.py,sha256=gnqBmXA3tI-WKIKQLAa42L3npE00vZrADANGH2MZRSg,20516
16
+ trellis_ui/forms/presets/__init__.py,sha256=99PBtWVLPceXkBOUvXojcxEMj1KAopMusMcuL05ELTs,64
17
+ trellis_ui/forms/presets/dates.py,sha256=dw8fpY05zRbrvqmqKuBJiJYhJEUP-Uf5lDgpri9fRSM,4901
18
+ trellis_ui/static/trellis_ui/css/styles.css,sha256=AI44CL-NpiSJ9rKDzCewZmWZH7fbgbu1VMH66GDaDfI,123054
19
+ trellis_ui/static/trellis_ui/js/index.js,sha256=Q7HJC6z53Bh4CFBttDzR5wzYzxs6pDmXVN8BbKHzxZA,384862
20
+ trellis_ui/templates/cotton/icons/add.html,sha256=MjLfKMfSTac45N_lDfqymnaPUnPgUPbbz0eBpH8xreQ,518
21
+ trellis_ui/templates/cotton/icons/calendar.html,sha256=toed7B6YNCfMFPzEYLnigJ3w0HoPcx-AQvDbCWHV22c,656
22
+ trellis_ui/templates/cotton/icons/checkmark.html,sha256=zUoPofSP10aWgRcuNa_8riub-Elgq555B14u2fcxySo,479
23
+ trellis_ui/templates/cotton/icons/chevron__down.html,sha256=HqB5Mk-u0vF2CkNiVwGi0ARVuHOYwFT-ThSfaTDV_C0,524
24
+ trellis_ui/templates/cotton/icons/chevron__right.html,sha256=xHcqnakZcD9SyVvupwJAfSwpU8N32O-QT7SS1fhCoR4,528
25
+ trellis_ui/templates/cotton/icons/close.html,sha256=-Ur3Ss-JsieaDZSusJqCp60uyXNYmCeTEfzKa9nmA0E,557
26
+ trellis_ui/templates/cotton/icons/cloud__upload.html,sha256=eAeRS6HpSKqwJDG3lllxqsGOVnZ5vly4guzFPfF-XJU,607
27
+ trellis_ui/templates/cotton/icons/document__blank.html,sha256=Q5Orw92rV3Qe7zIXg5VfWsnEFWmtsro0J28UB21bQ5o,581
28
+ trellis_ui/templates/cotton/icons/grip.html,sha256=V9md-l6BnFK3r2Ra6Uou8BB6ngkv4g4p6seWp7tAjvM,595
29
+ trellis_ui/templates/cotton/icons/image.html,sha256=sFiILDNPqONsxbQlBCVR5uOzW2JOK0RgZFOd0CKBFbg,632
30
+ trellis_ui/templates/cotton/icons/menu.html,sha256=kmUfUXEs78V3FESvTqesG9yxO4UdFuJc5WvDMQta1kE,517
31
+ trellis_ui/templates/cotton/icons/moon.html,sha256=r_tfWZ9k5EmACaM0npKqM_9H6y8EPs7Xyldxm0ZkajM,744
32
+ trellis_ui/templates/cotton/icons/overflow_menu__vertical.html,sha256=1yv2teit96anRcGC3eBqAF4Rfl6ZH_kjAMIqlApNFaM,606
33
+ trellis_ui/templates/cotton/icons/search.html,sha256=UZtPgeiDTBs1r4BY-ULwrTxtUyGO3y22T__zrgsyNW0,657
34
+ trellis_ui/templates/cotton/icons/side_panel.html,sha256=heYdlVHVKQus0q8JGdtGnTNWmC2GirVkTxhLF1rZ7IY,603
35
+ trellis_ui/templates/cotton/icons/side_panel__close.html,sha256=tWgQ8P_tgX-qcnlL88hf6JpysE0_m1m1KGJLUGFrRWg,654
36
+ trellis_ui/templates/cotton/icons/side_panel__open.html,sha256=vJWPV8o5An4Sz9WaRNMOUbf0rtfjPJSvVdZ5aTV8uAA,657
37
+ trellis_ui/templates/cotton/icons/spinner.html,sha256=iU-ybl8jQTAkE1Ve44JJwfHnVOKir38GC8aH9vXXPqc,532
38
+ trellis_ui/templates/cotton/icons/subtract.html,sha256=KMPhuUU0bhukUVsu75X2diPTjZaxeXIxlDezFi2VU7E,509
39
+ trellis_ui/templates/cotton/icons/sun.html,sha256=6p9Krz-Mx8xCegjcF0FrdN7kDvd4ZfWN4g_ulwAMYHM,1107
40
+ trellis_ui/templates/cotton/icons/theme.html,sha256=9k8tUFWmNZhoW-75uc3vtvJBkbsq_RidLNkwjYsHfok,483
41
+ trellis_ui/templates/cotton/icons/trash_can.html,sha256=hj1qhzFtXAna86dFnAZFYHFR0qiKjPUgJDYH-VzXp8U,589
42
+ trellis_ui/templates/cotton/layouts/app.html,sha256=mxhZDDQHaJFP49VMy-nngjdITgI4EmJGFh8UqV157VY,1764
43
+ trellis_ui/templates/cotton/layouts/base.html,sha256=BZdvSRX9qhD-hGzEc8wzITG2w1viDDakZUNwX5Ot62w,3165
44
+ trellis_ui/templates/cotton/layouts/guest.html,sha256=zire7UKJdLxY_VEJ-cRKsBgiojBI-A9FDBcMwjJrgMY,1547
45
+ trellis_ui/templates/cotton/ui/accordion/content.html,sha256=KEA_yQOJkitcmplZ-N1wVsaVvPqgzUHyuGILG-zUkew,684
46
+ trellis_ui/templates/cotton/ui/accordion/index.html,sha256=CzYqn4BfRpV7GDqG3MExPpDSHAoQ0LW-P1v5rE9Sbhw,935
47
+ trellis_ui/templates/cotton/ui/accordion/item.html,sha256=CCd9CH9aV9A9jWlJ2e9Q_LKegCvPeZz1wN8t7jqVjw4,1445
48
+ trellis_ui/templates/cotton/ui/accordion/trigger.html,sha256=EU9-ADWnBIZlXvZom79SAzO-Jnsczx_REYRawveZyw4,1963
49
+ trellis_ui/templates/cotton/ui/action/index.html,sha256=5RVVhjY5xtbGuVaqQyr_RnqaQpUkZQhjqtU1IakPTYw,584
50
+ trellis_ui/templates/cotton/ui/app/aside.html,sha256=WN3E_luysE5Z-w_Lq58YRl_6V4pm7frHt3IzcDX8tA4,190
51
+ trellis_ui/templates/cotton/ui/app/footer.html,sha256=-IgbqoVUWxf6R69q8KxUxgHGORLBrv0e1iZ_pQvOThM,196
52
+ trellis_ui/templates/cotton/ui/app/header.html,sha256=iRDDGacBlzxgnXtTBnl8_kG1r2gOyeUaVAmrL1EqsxE,303
53
+ trellis_ui/templates/cotton/ui/app/index.html,sha256=2A4-Bvjk0RwZL1TH2p_ormcxRMXd4xWMaCOCcWphRAI,581
54
+ trellis_ui/templates/cotton/ui/app/main.html,sha256=wmn3I-DEMjai6Fd2JyTGmdI2KlFBBNCCQ-vh8YKY-XM,429
55
+ trellis_ui/templates/cotton/ui/badge/close.html,sha256=VGdh6kQEtlo-UDUWHumEzkP1y3bhtZ-hQR5c3Lalrl4,829
56
+ trellis_ui/templates/cotton/ui/badge/index.html,sha256=YhVXR0yT2vrcyC413kuZbP37BoW9pHk1qg-hqpPWA88,3223
57
+ trellis_ui/templates/cotton/ui/box/index.html,sha256=_DWDMXKtNKLA5rgvixZgM6kgYimBdA8n5AmyN5pvIzs,950
58
+ trellis_ui/templates/cotton/ui/brand/index.html,sha256=Nj4vVp44N0WOgSiGV2Jr6iP-nlHSQ_y9tTVaRZbMHpg,2169
59
+ trellis_ui/templates/cotton/ui/button/group.html,sha256=y8cuFf6fgJrmM9aixYbgpVicQLUbbVtsvwzGl7tGnNc,192
60
+ trellis_ui/templates/cotton/ui/button/index.html,sha256=xUqzj_o2410oby2CjXTlDPWB5D59zEkrRRvzIhdp7LA,3853
61
+ trellis_ui/templates/cotton/ui/card/action.html,sha256=uMBr4ogfMgzghlJmGemrLjS5FyFFzMFVkkeE7symKeY,192
62
+ trellis_ui/templates/cotton/ui/card/content.html,sha256=Jvz7ag0xLM1_fh0bL4_eY1zogoT1Tb2KGilvsxThorA,196
63
+ trellis_ui/templates/cotton/ui/card/description.html,sha256=vTKmdMYiqao7KG1PpXyodV9kOVBmR6blwI00qxR05Kc,310
64
+ trellis_ui/templates/cotton/ui/card/footer.html,sha256=xJeMZhKkHaiwMmGCJH_JsEK1zI2HxzpM3RNcXxH290o,315
65
+ trellis_ui/templates/cotton/ui/card/header.html,sha256=luXXeoUKW_PN20SRBKNqH0s8LW8DBMItFy7rrzrBqdY,192
66
+ trellis_ui/templates/cotton/ui/card/index.html,sha256=IHg5OqI4vP6XmM9XWXO3isf8c0TtIwQ70e_4tutVHGY,1025
67
+ trellis_ui/templates/cotton/ui/card/title.html,sha256=HKx4F3s1Xio4ymYfUEJLusN7agVeG05p_ybbDgcB4oc,356
68
+ trellis_ui/templates/cotton/ui/checkbox/control.html,sha256=WVdFloatFA7Hf6sWCsZc_RcxXKLrrjplfdSDM4QpuIk,4756
69
+ trellis_ui/templates/cotton/ui/checkbox/group.html,sha256=5a_vaIFFSR7SKfIdL3swAxyJfPukbxAAci_9F7SAfU8,929
70
+ trellis_ui/templates/cotton/ui/checkbox/index.html,sha256=sabHej7QSxMDlf1BTCSCZsz4lv5ikvFXow3La-mCVRU,2380
71
+ trellis_ui/templates/cotton/ui/checkbox/indicator.html,sha256=VZtE4Mov_eUEAuPaFRadHEt-0FQSjeXB_ri_Ldoa-0s,715
72
+ trellis_ui/templates/cotton/ui/combobox/empty.html,sha256=Z64BftXrUpsd9cRN72Lf1ZcSEH2VAvSC8SkizqyBpdI,316
73
+ trellis_ui/templates/cotton/ui/combobox/group.html,sha256=FYNK_ZO850YZdcBi0QeqiGY1hMy-YSWDLBPBJnnYLPU,209
74
+ trellis_ui/templates/cotton/ui/combobox/impl.html,sha256=pBPzyqGVWKqbZ73uhswVmAtBpcHU5b5m2xudR-qYoCY,5419
75
+ trellis_ui/templates/cotton/ui/combobox/index.html,sha256=ZouTyX4pl-NtcCRCldd-Rxrz0WtCm690xIvJXyiWN3w,1063
76
+ trellis_ui/templates/cotton/ui/combobox/label.html,sha256=1-11OXYeCmAOhmamg_eckxHvJcqdOR6mMCt06Cgh5IY,325
77
+ trellis_ui/templates/cotton/ui/combobox/option.html,sha256=UQHZs-qxVJANDlOHp8EfsuwKT8nX0lEjDxIYVbU0Xps,2651
78
+ trellis_ui/templates/cotton/ui/combobox/separator.html,sha256=u5iPeToD5uJ9i6sF0RQvzu-cj4LmOMBrC-er87mJ7fk,323
79
+ trellis_ui/templates/cotton/ui/date_picker/impl.html,sha256=dYx59M5XibRYq3xK3006GYQhfsTeTG53_uO9wGfW1L0,13913
80
+ trellis_ui/templates/cotton/ui/date_picker/index.html,sha256=rqr5ZgDuUBIhr2gpmOjd4SA0C_60EAIz8z-o3f-ECGs,1134
81
+ trellis_ui/templates/cotton/ui/date_picker/preset.html,sha256=csgqOO9RH_fwjyRTy-11xCfRXPNQy5Vkp4_yBjlrmV0,677
82
+ trellis_ui/templates/cotton/ui/date_picker/presets.html,sha256=zAQvRA-sIyXnQUC92xFqhD67XXbc2fuQ2Pod8Lw1meA,290
83
+ trellis_ui/templates/cotton/ui/date_picker/trigger.html,sha256=FQ8Sg7TJnPU-XVlZxE-hpf2a1l4CnKfaIrQScMcfrYg,364
84
+ trellis_ui/templates/cotton/ui/dropdown/index.html,sha256=4GZ0xLAPr5cUZDHbYwDn5of8GjoHKTrNzRpG-Bqe-o8,636
85
+ trellis_ui/templates/cotton/ui/field/description.html,sha256=Uruh-I2wPAPMIbpkCBJkI1Hh2IUT23d42yrlMuK-9zA,344
86
+ trellis_ui/templates/cotton/ui/field/error.html,sha256=cDCW8Bfslq2ASWAOL0ZgicWoX5OMZ_sfifbd6tclENs,550
87
+ trellis_ui/templates/cotton/ui/field/group.html,sha256=HzBQKFhptor1mJaLrDo79KRqXg-kouQ0OAiiW4TVZSw,261
88
+ trellis_ui/templates/cotton/ui/field/index.html,sha256=tsiaxrWwon_H7rTEEaFptZVxYuJA5Q6_aqM3vo8goR4,1571
89
+ trellis_ui/templates/cotton/ui/field/label.html,sha256=rccGiPwnB8kp3L-4LbbFGINITbLevKRAW8wZS3IVUNc,563
90
+ trellis_ui/templates/cotton/ui/fieldset/index.html,sha256=P9vtiu6banG-SqzUGCOYlE7h95Va90BX1CEsmai0kk8,1187
91
+ trellis_ui/templates/cotton/ui/fieldset/legend.html,sha256=W1LYcCrggGP5J6BK6mWhEVnayp5-79_Quzkvt5tJw3k,501
92
+ trellis_ui/templates/cotton/ui/file_upload/control.html,sha256=zq3SgoMTVfGjFCo7BK0Jjz5vj0LjTig-HfzujekecSo,6910
93
+ trellis_ui/templates/cotton/ui/file_upload/dropzone.html,sha256=VWb_Gb-RTzUwrEfWQPx8xTFU0Qn0bU1FrPri6NH8NlY,1556
94
+ trellis_ui/templates/cotton/ui/file_upload/index.html,sha256=9WgZp6nxFqzUe26uC_LBKjPG8L2m8hR2n-RmjdJagPI,1294
95
+ trellis_ui/templates/cotton/ui/file_upload/item.html,sha256=jzCen4Fq64fEBVGyW2nzee1t7PB6s7-fEWu9UDObhfA,1941
96
+ trellis_ui/templates/cotton/ui/file_upload/list.html,sha256=hHYyu_j63Y8aurFwaxSDRc416y5N8CKiktZBes_BkCI,196
97
+ trellis_ui/templates/cotton/ui/file_upload/remove.html,sha256=WT52uHvvQj5rRnb1fx_dWKfBXxhgpwvSPlAfQAhp8JQ,514
98
+ trellis_ui/templates/cotton/ui/frame/body.html,sha256=dUyhFGQZRjAyMyPq78qG7hCUOFtug9U8hWOkOFEpbhQ,490
99
+ trellis_ui/templates/cotton/ui/frame/footer.html,sha256=w0i4jYwTYbUWncnazqprM7YmwsxUFq6M4KP4dlT8ImI,436
100
+ trellis_ui/templates/cotton/ui/frame/header.html,sha256=sJKhKZY-x3O9D2kPuU1HQTefvAjWJrCOfNbVrC9TqRA,436
101
+ trellis_ui/templates/cotton/ui/frame/index.html,sha256=xy72ps17f-kqkAyxDgk2WwQlfILEgA3NVWc4aqpswOU,693
102
+ trellis_ui/templates/cotton/ui/heading/index.html,sha256=SBtgFvxXbgn_f6Uv-WV2Z_aJFsQwtvZxeX1s42FPMeU,348
103
+ trellis_ui/templates/cotton/ui/image/index.html,sha256=SVG931sHBaZNJ_ktVJ974s_nSnsymzs5ho36roXX7Jc,572
104
+ trellis_ui/templates/cotton/ui/input/control.html,sha256=YNuinwMn3hNXcUI6F9NyLkdrJjZNGXFYl-KvSFqMO8s,35
105
+ trellis_ui/templates/cotton/ui/input/group.html,sha256=1s6faKl2hHhNCKTSuzX_vIkFDZWEegRgxCz8Sdp99A4,793
106
+ trellis_ui/templates/cotton/ui/input/impl.html,sha256=gInHhHkCou_FUPgkJFTGRzFj6lGpM2ai8sprzgmi-48,5598
107
+ trellis_ui/templates/cotton/ui/input/index.html,sha256=mrXPE3jWQK6zi14KLUsOkkpU1yyQebgihtgSjF_o5kU,854
108
+ trellis_ui/templates/cotton/ui/input/prefix.html,sha256=8bZJglBAillyQJJSRkbxw2rAPyahflExYQuQ-UbUoIc,211
109
+ trellis_ui/templates/cotton/ui/input/suffix.html,sha256=2VucmJhJHIQiXSZgFX8f7i51Svl2U1k_bU8Xxhenv84,211
110
+ trellis_ui/templates/cotton/ui/menu/group.html,sha256=2W-9Y7K5pnyv8Wnqxpsq6xYcPtwCqkdYYl1wdyvk-AI,201
111
+ trellis_ui/templates/cotton/ui/menu/index.html,sha256=7kjeW5nm76CMyoz5gTj6vA1dpJVDsscKPxGB5g8bVy4,419
112
+ trellis_ui/templates/cotton/ui/menu/item.html,sha256=NNRMVS0nb6i3jckQfDDMyWnXfUzenH-mRlsDS--vE0E,3078
113
+ trellis_ui/templates/cotton/ui/menu/label.html,sha256=ed_lpoT0U078ShhOXpMOn-aOV6fx1u2awnYIZXnoKZ8,348
114
+ trellis_ui/templates/cotton/ui/menu/separator.html,sha256=qjFPPqgai9ndhtUJAHnCpiw1cmZgi8QhEcVs9a88UKY,989
115
+ trellis_ui/templates/cotton/ui/modal/body.html,sha256=21afAy8xUxSQcVVuNmCqDcANhy7DGqmhuK6nGC23Mu4,186
116
+ trellis_ui/templates/cotton/ui/modal/close.html,sha256=L0iTZoUlquzdVkD2h6-bq0PPMFvgvJdEscF3fh-c6ow,658
117
+ trellis_ui/templates/cotton/ui/modal/description.html,sha256=lQ9sQJd7RMQlJgET73dzWAE05hZcbT9Aw2xClb7BZ70,312
118
+ trellis_ui/templates/cotton/ui/modal/footer.html,sha256=4JORPyJw8mYiW5kbdu28_BGtu_rt7PrnMlST7pM0DIc,194
119
+ trellis_ui/templates/cotton/ui/modal/index.html,sha256=EUYE9L7tgzZ0ZWv3ZObpxCs1zJUiPMFdxHO7Hx4ipI0,3008
120
+ trellis_ui/templates/cotton/ui/modal/outlet.html,sha256=NzNHS25Cgs9tR6J-uCAkndWuxF8fvebZ9vgGFBxI678,270
121
+ trellis_ui/templates/cotton/ui/modal/title.html,sha256=Yxca_buMD6iSRTeGgNmUULGAXf9L2OPhrbB1YOvF0-g,326
122
+ trellis_ui/templates/cotton/ui/modal/trigger.html,sha256=FZPWGQYMovoZYAFq9XVyyr4ThpoEboWCQoytQiYzvIc,381
123
+ trellis_ui/templates/cotton/ui/overlay/above.html,sha256=dydymnlGvoTwmTYMiT6tJdeeGddSfa1NcjbwBBVTAAE,194
124
+ trellis_ui/templates/cotton/ui/overlay/index.html,sha256=v0j3Rxwmz4lckJEvzOYptfj8gtGOwxNA5u_0NNgp8U0,459
125
+ trellis_ui/templates/cotton/ui/radio/group.html,sha256=qlWVaglm8lBHjQ54yQstXxJsdosHeoE5SQPTMhggO5I,1090
126
+ trellis_ui/templates/cotton/ui/radio/index.html,sha256=mLGhNz5iVgR3kZLcOnCEuSLJiUULH_OWXCZQQAk-rhk,3850
127
+ trellis_ui/templates/cotton/ui/radio/indicator.html,sha256=TPWOwon4DMz7V9tNJQMc21gGrrRLzq7bTf8N5JuOc9w,393
128
+ trellis_ui/templates/cotton/ui/scroll_area/index.html,sha256=w1--ixQESt9hLsA1BX8ngutaqDzW_14vUDbAjWtXrhk,3405
129
+ trellis_ui/templates/cotton/ui/select/button.html,sha256=_ukGpiEZJuXitS3IxCxyd68d0l3fMumXkv89bblFH1E,301
130
+ trellis_ui/templates/cotton/ui/select/group.html,sha256=aaszE2Cmn8hsgbc6vzimMPsOfvLUtH8y7MtIAE36Ttk,192
131
+ trellis_ui/templates/cotton/ui/select/impl.html,sha256=Phxjgov9SYSJHMzH1YT2JrFiX1SZrDU4W5Q-Eu7BFMw,11004
132
+ trellis_ui/templates/cotton/ui/select/index.html,sha256=XP6J4w2_b269TXsMc_Upn9ZnAX1JE6_gLRUgdrXE-8Y,1039
133
+ trellis_ui/templates/cotton/ui/select/input.html,sha256=vAJ2E-a06NXSUtOMFan3qJq-T7JOZb4slJWnsf_j9cc,376
134
+ trellis_ui/templates/cotton/ui/select/label.html,sha256=yiGCH4TcP2jCLTpzupKtbVYfZShUdTEnro1NcW0DVN4,294
135
+ trellis_ui/templates/cotton/ui/select/option.html,sha256=-GydIGwM_NRnzsqMI_8coaGFC5AYWPTOmaVIK0wFBWk,2810
136
+ trellis_ui/templates/cotton/ui/select/search.html,sha256=OEbdNcynGGbYXKyK5-02313qxI_pu5T0uiSvNqxJR_Q,1209
137
+ trellis_ui/templates/cotton/ui/select/separator.html,sha256=atuw70Ei9l5JSlbZGMjD6-grtmSm37-l9g4WUM3QKjo,327
138
+ trellis_ui/templates/cotton/ui/select/trigger.html,sha256=VMosEQHXUcyH5hje9XSiJBUnOBix46iYVyDBGtMCcfI,273
139
+ trellis_ui/templates/cotton/ui/select/option/create.html,sha256=vXf5KpyzQjWUcOHbAXmSXKpUBICEALVYNrV7D_YnKFA,474
140
+ trellis_ui/templates/cotton/ui/select/option/empty.html,sha256=2VCMYfbRXkTmqhQ46CxL2CXk5JViH0hjfVrzPfCZixs,266
141
+ trellis_ui/templates/cotton/ui/select/option/selected.html,sha256=KBx7IeQx48QNjavlnBs6kJWdpB-U8BQDRhBY4mj5lTg,90
142
+ trellis_ui/templates/cotton/ui/separator/index.html,sha256=KyWffVY0YdIMJ_JLi138mWRGO9Id-HKMWSrLEjshEys,1937
143
+ trellis_ui/templates/cotton/ui/sidebar/content.html,sha256=u7xdjOpHnlaNU1ceIAh0X-DkpGTzHrsLlshynp21T5k,394
144
+ trellis_ui/templates/cotton/ui/sidebar/footer.html,sha256=Lc_bdpKZEjd6dheHRw93Y1RbkiUwAYvmc6jpYmniBmA,198
145
+ trellis_ui/templates/cotton/ui/sidebar/group.html,sha256=p9Tpw03xFjJTdBREhp16oS9f0FbIXHWz1PDCbRPEoJQ,3471
146
+ trellis_ui/templates/cotton/ui/sidebar/header.html,sha256=hiiwstffOEIBgcC-5v9HyAunW1BiPM9z-stHmN0vP9g,198
147
+ trellis_ui/templates/cotton/ui/sidebar/index.html,sha256=z7E4IlQVJn-Q9sQNjIX-v1h1wdws1HDOV8dfwRkt_kA,2793
148
+ trellis_ui/templates/cotton/ui/sidebar/item.html,sha256=M7c0SMAdib26Zzor5IAdgfXrcsVL2FB0Qk_O5XeEZoo,4428
149
+ trellis_ui/templates/cotton/ui/sidebar/nav.html,sha256=ZgYdnp9Y4qkMBEhyHCUtt2iKkvUWJmVRW2YoiulHeNw,336
150
+ trellis_ui/templates/cotton/ui/sidebar/toggle.html,sha256=5tH-lo-aCkA8YvmBg30geOWnJsebtwnmB01dsRFKIic,1128
151
+ trellis_ui/templates/cotton/ui/slider/index.html,sha256=-CKNNqCEvQNVPQowiLnnAYr-taATDrsYiOhwFTg4_Zs,8548
152
+ trellis_ui/templates/cotton/ui/slider/tick.html,sha256=fo26ZonwRV022AlCGcLJBHxw3Y01S-SAzzFGORc8_iw,875
153
+ trellis_ui/templates/cotton/ui/spacer/index.html,sha256=twXH-uEE2U2fElx_1Zr6bW_y6UfTvFJjONPv7-qbDUs,174
154
+ trellis_ui/templates/cotton/ui/stream/index.html,sha256=WiXlzbrISPlvKi2Nqa19sAlZHbwXZcagIqmgC1D7TsM,102
155
+ trellis_ui/templates/cotton/ui/switch/control.html,sha256=tLfOlIrVGnJs2ogZX8MeGTcWjD1mxeOZWPziJ5mAfqA,69
156
+ trellis_ui/templates/cotton/ui/switch/impl.html,sha256=tBc1q9jNZX2dev3EO2iivXN0PjRu_6Tyf8Wky8Ktank,5593
157
+ trellis_ui/templates/cotton/ui/switch/index.html,sha256=2hkpkxAEhdqCKR4S6bjnpLHhzGPmcb62BlM-h7uKgV4,1934
158
+ trellis_ui/templates/cotton/ui/table/body.html,sha256=bAHMOIMeOJ_lJHYo_NbAZJtMQ91WhdyIVNqm_Hn6EJQ,190
159
+ trellis_ui/templates/cotton/ui/table/caption.html,sha256=Ror3O1e4exSZ0rPykp7-sC8yhreZqyTWqqCC3IXwLfs,280
160
+ trellis_ui/templates/cotton/ui/table/cell.html,sha256=ncIkY34UWWv_6-hcXTZkobPvzMbRgXZUsMeC2NsCjzg,308
161
+ trellis_ui/templates/cotton/ui/table/column.html,sha256=NKvCPZtlkHVlfoY32xKHw4xIenJRZCm7881kGbXtJ1k,2060
162
+ trellis_ui/templates/cotton/ui/table/empty.html,sha256=WFWspPSacQPx3kT1Cqn_Gi8FFgwd5gzkWzsggxVAL8k,448
163
+ trellis_ui/templates/cotton/ui/table/footer.html,sha256=IMRIEzCWBbsQyLsJ8HRfMQVHVLnzNQ1OktaEQj86QQs,198
164
+ trellis_ui/templates/cotton/ui/table/header.html,sha256=Mt_gK4NbZwI7Wym1a3RXAx9yDvxO1bF30h4dWeRQK7M,198
165
+ trellis_ui/templates/cotton/ui/table/index.html,sha256=fpT6SzQ-UKU_IwdoU7HE1VVvUU2Dt3b1yi1vURX3u9c,1415
166
+ trellis_ui/templates/cotton/ui/table/row.html,sha256=nb_GYLoUsifSCNv2IRjT-rqqGMrIrh6WMN_yRISZG_0,598
167
+ trellis_ui/templates/cotton/ui/table/column/filter.html,sha256=Dt_JmVFadmwxY4if5idpdQo3fcsiQwItfj0gtkjAux4,264
168
+ trellis_ui/templates/cotton/ui/table/row/header.html,sha256=vDlfRAUe8C0EMTrG5dgNgp2BNIAtanXgvrnwBjGtYy8,367
169
+ trellis_ui/templates/cotton/ui/tabs/index.html,sha256=FP17JVuuJgBD9JftuF6yZHxArq4kbDTD98Rpwiq0XWY,715
170
+ trellis_ui/templates/cotton/ui/tabs/list.html,sha256=ITybKL7wMlZ7uoPE2WWWSfHpmELUAVQ-zYvPTW_iEjQ,1020
171
+ trellis_ui/templates/cotton/ui/tabs/panel.html,sha256=IQHD3OttGJWpk3l9WtPMKJ8BkSqW21G04g5UJUq0f0U,1054
172
+ trellis_ui/templates/cotton/ui/tabs/panels.html,sha256=I1-OcSjkpuHaEaQELLHFjdQEszXm9MUoTPE9JU8s4Mg,316
173
+ trellis_ui/templates/cotton/ui/tabs/tab.html,sha256=JXjR4mlgSqBcqU8ImFSaEz1qziN0u4euLAMCjKicc3w,3660
174
+ trellis_ui/templates/cotton/ui/text/index.html,sha256=SKJoyhA6QKuOYhSfnD9f4YEB0Oxka8rew2yYSi1dzOg,308
175
+ trellis_ui/templates/cotton/ui/textarea/control.html,sha256=To0lBrqXUqakt20LhGut3hirHaYqXGRFAKYtxV-lDig,38
176
+ trellis_ui/templates/cotton/ui/textarea/impl.html,sha256=yqrMpTSG2-0i-ZPD8Qx2ZkFINPAmU1KOrMPRd5zVl9s,2071
177
+ trellis_ui/templates/cotton/ui/textarea/index.html,sha256=jjKDawdJ0ucH7Uk2jxxiMxxCllwiYifei-5G_Y4tcVU,866
178
+ trellis_ui/templates/cotton/ui/theme/text.html,sha256=sXpG0lKpX5HAzhJpCoQLrAZjElCkHNQFbtyexSYvrQw,256
179
+ trellis_ui/templates/cotton/ui/toast/index.html,sha256=zV-Rlv1HOzI7djYj8s8rn2gbCij2L9MA_A2YPGAvFw4,2908
180
+ trellis_ui/templates/cotton/ui/toast/outlet.html,sha256=dmlWtc3vovLt086Qr7zQSMA-eldZOY2W6akMvGNkshM,878
181
+ trellis_ui/templates/trellis_ui/forms/field.html,sha256=u0mwXJpRuM1q1CBfrocv368jO6cdWtZa4l11FtNlgl8,926
182
+ trellis_ui/templates/trellis_ui/forms/form.html,sha256=5JInA8V5rF_gAjluSfrM0bCOqA-S6XjyckYChRUSS_4,475
183
+ trellis_ui/templates/trellis_ui/forms/formset.html,sha256=ygosMw7kBMX_ZXskzP6b4wFmkkqn7gSGntKy9RlqkoE,188
184
+ trellis_ui/templates/trellis_ui/forms/widgets/checkbox.html,sha256=bDx81vIM3i3Dxzm378cLH8nX9-JLhOd1bOHK-DW8X-Q,372
185
+ trellis_ui/templates/trellis_ui/forms/widgets/checkbox_select.html,sha256=Ii67smeeg3KWUZOtyVbezl6-vtAzY51OeQQV7i3f9C0,1828
186
+ trellis_ui/templates/trellis_ui/forms/widgets/combobox_select.html,sha256=YAokceF0kIgCnmP5wsHVn0he3MLEuYgcV_ZIS2Fg9Ss,1729
187
+ trellis_ui/templates/trellis_ui/forms/widgets/date_picker.html,sha256=8pxbUkScpvNhMk7uAnj0uk73wSmXWmhZYGkiMaVKrJw,2960
188
+ trellis_ui/templates/trellis_ui/forms/widgets/file_upload.html,sha256=jB27H1Y7n2Nb0IY5wSBRlGApUA_7YR-pQia9UoGZyHM,668
189
+ trellis_ui/templates/trellis_ui/forms/widgets/input.html,sha256=LZrG_wfMxBNtloGB8LMWV3X5Tg5ei1kjPJR1C89iwGI,398
190
+ trellis_ui/templates/trellis_ui/forms/widgets/radio_select.html,sha256=BfmSTX7CRRsYq-_RxpA0sTAqNLrcoNjfvgOnNTL1F_8,1669
191
+ trellis_ui/templates/trellis_ui/forms/widgets/select.html,sha256=Xbc5hJx7Nr60yIAtTLBgqHe-WW4n5dScqZBUFIa_op4,4230
192
+ trellis_ui/templates/trellis_ui/forms/widgets/textarea.html,sha256=Z3p2EXxjsBHFSp9WCdmXK316EuffjnomRNmaXKFiWXg,428
193
+ trellis_ui/templatetags/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
194
+ trellis_ui/templatetags/ui_classes.py,sha256=mNXCkkBtgG0HMgrH1UPAF2vnYwT-F9w5lxGKkwWWn18,2570
195
+ trellis_ui/templatetags/ui_props.py,sha256=HDzQm7mRxrRQe5U3FuXCYq-BfC0cpezyRynVSD6DvUY,2759
196
+ django_trellis-0.1.0.dist-info/METADATA,sha256=1RFSVkdQXurznOead1FKfIuivPrQYuTwa5WWpttGPHE,466
197
+ django_trellis-0.1.0.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
198
+ django_trellis-0.1.0.dist-info/licenses/LICENSE,sha256=biNm3VDUBFSTpPGgjNdOdUGvv7xvA6jJDsjwife-jMM,1074
199
+ django_trellis-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.30.1
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Tristan Robinette
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
trellis_ui/__init__.py ADDED
@@ -0,0 +1,30 @@
1
+ from .forms import (
2
+ BaseForm,
3
+ BaseFormMixin,
4
+ BaseFormSet,
5
+ BaseModelForm,
6
+ BaseModelFormSet,
7
+ ComboboxSelect,
8
+ DatePickerInput,
9
+ DateRangePickerInput,
10
+ WidgetContext,
11
+ widget_adapter,
12
+ )
13
+ from .stream import UI, ctx
14
+ from .targets import UITargets
15
+
16
+ __all__ = [
17
+ "UI",
18
+ "BaseForm",
19
+ "BaseFormMixin",
20
+ "BaseFormSet",
21
+ "BaseModelForm",
22
+ "BaseModelFormSet",
23
+ "ComboboxSelect",
24
+ "DatePickerInput",
25
+ "DateRangePickerInput",
26
+ "UITargets",
27
+ "WidgetContext",
28
+ "ctx",
29
+ "widget_adapter",
30
+ ]
trellis_ui/apps.py ADDED
@@ -0,0 +1,6 @@
1
+ from django.apps import AppConfig
2
+
3
+
4
+ class TrellisUIConfig(AppConfig):
5
+ name = "trellis_ui"
6
+ verbose_name = "Trellis UI"
@@ -0,0 +1,6 @@
1
+ from .stream import ctx
2
+
3
+
4
+ def ui(_) -> dict:
5
+ return ctx()
6
+
trellis_ui/events.py ADDED
@@ -0,0 +1,15 @@
1
+
2
+ from enum import StrEnum
3
+
4
+
5
+ class UIEvents(StrEnum):
6
+ MODAL_CLOSE = "ui:modal-close"
7
+ RESIZE = "ui:resize"
8
+ RESIZE_END = "ui:resize-end"
9
+ RESIZE_START = "ui:resize-start"
10
+ SIDEBAR_CLOSE = "ui:sidebar-close"
11
+ SIDEBAR_OPEN = "ui:sidebar-open"
12
+ TOAST = "ui:toast"
13
+
14
+
15
+ __all__ = ["UIEvents"]
@@ -0,0 +1,3 @@
1
+ from trellis_ui.filters import rules
2
+
3
+ __all__ = ["rules"]
@@ -0,0 +1,148 @@
1
+ from collections.abc import Mapping, Sequence
2
+ from dataclasses import dataclass, field
3
+ from types import MappingProxyType
4
+ from typing import Any, Self
5
+
6
+ type JSONValue = str | int | float | bool | None | list[JSONValue] | dict[str, JSONValue]
7
+
8
+
9
+ @dataclass(frozen=True)
10
+ class RuleSpec[TValue]:
11
+ kind: str
12
+ field_path: str | None = None
13
+ operation_value: TValue | None = None
14
+ model: str | None = None
15
+ negate: bool = False
16
+ metadata: Mapping[str, Any] = field(default_factory=dict)
17
+
18
+ def __post_init__(self) -> None:
19
+ object.__setattr__(self, "kind", _validate_non_empty_string("kind", self.kind))
20
+ object.__setattr__(
21
+ self,
22
+ "field_path",
23
+ _validate_optional_non_empty_string("field_path", self.field_path),
24
+ )
25
+ object.__setattr__(self, "model", _validate_optional_string("model", self.model))
26
+
27
+ if not isinstance(self.negate, bool):
28
+ raise TypeError("negate must be a boolean.")
29
+
30
+ object.__setattr__(self, "metadata", _immutable_metadata(self.metadata))
31
+
32
+ def to_dict(self) -> dict[str, JSONValue]:
33
+ return {
34
+ "kind": self.kind,
35
+ "field_path": self.field_path,
36
+ "operation_value": _json_value(self.operation_value, name="operation_value"),
37
+ "model": self.model,
38
+ "negate": self.negate,
39
+ "metadata": _json_object(self.metadata, name="metadata"),
40
+ }
41
+
42
+ @classmethod
43
+ def from_dict(cls, data: Mapping[str, Any]) -> Self:
44
+ if not isinstance(data, Mapping):
45
+ raise TypeError("RuleSpec.from_dict() expects a mapping.")
46
+
47
+ try:
48
+ kind = data["kind"]
49
+ except KeyError as error:
50
+ raise ValueError("RuleSpec data must include kind.") from error
51
+
52
+ field_path = data.get("field_path")
53
+ operation_value = data.get("operation_value")
54
+ model = data.get("model")
55
+ negate = data.get("negate", False)
56
+ metadata = data.get("metadata", {})
57
+
58
+ _json_value(operation_value, name="operation_value")
59
+ _json_object(metadata, name="metadata")
60
+
61
+ return cls(
62
+ kind=kind,
63
+ field_path=field_path,
64
+ operation_value=operation_value,
65
+ model=model,
66
+ negate=negate,
67
+ metadata=metadata,
68
+ )
69
+
70
+
71
+ def spec[TValue](
72
+ kind: str,
73
+ *,
74
+ field_path: str | None = None,
75
+ operation_value: TValue | None = None,
76
+ model: str | None = None,
77
+ negate: bool = False,
78
+ metadata: Mapping[str, Any] | None = None,
79
+ **metadata_values: Any,
80
+ ) -> RuleSpec[TValue]:
81
+ merged_metadata: dict[str, Any] = {}
82
+ if metadata is not None:
83
+ merged_metadata.update(_json_object(metadata, name="metadata"))
84
+ merged_metadata.update(metadata_values)
85
+
86
+ return RuleSpec(
87
+ kind=kind,
88
+ field_path=field_path,
89
+ operation_value=operation_value,
90
+ model=model,
91
+ negate=negate,
92
+ metadata=merged_metadata,
93
+ )
94
+
95
+
96
+ def _validate_non_empty_string(name: str, value: Any) -> str:
97
+ if not isinstance(value, str):
98
+ raise TypeError(f"{name} must be a string.")
99
+ if value == "":
100
+ raise ValueError(f"{name} must not be empty.")
101
+ return value
102
+
103
+
104
+ def _validate_optional_non_empty_string(name: str, value: Any) -> str | None:
105
+ if value is None:
106
+ return None
107
+ return _validate_non_empty_string(name, value)
108
+
109
+
110
+ def _validate_optional_string(name: str, value: Any) -> str | None:
111
+ if value is None:
112
+ return None
113
+ if not isinstance(value, str):
114
+ raise TypeError(f"{name} must be a string.")
115
+ return value
116
+
117
+
118
+ def _immutable_metadata(metadata: Mapping[str, Any]) -> Mapping[str, Any]:
119
+ return MappingProxyType(_json_object(metadata, name="metadata"))
120
+
121
+
122
+ def _json_object(value: Any, *, name: str) -> dict[str, JSONValue]:
123
+ if not isinstance(value, Mapping):
124
+ raise TypeError(f"{name} must be a mapping.")
125
+
126
+ output: dict[str, JSONValue] = {}
127
+ for key, item in value.items():
128
+ if not isinstance(key, str):
129
+ raise TypeError(f"{name} keys must be strings.")
130
+ output[key] = _json_value(item, name=f"{name}.{key}")
131
+ return output
132
+
133
+
134
+ def _json_value(value: Any, *, name: str) -> JSONValue:
135
+ if value is None or isinstance(value, str | int | float | bool):
136
+ return value
137
+
138
+ if isinstance(value, Mapping):
139
+ return _json_object(value, name=name)
140
+
141
+ if _is_json_sequence(value):
142
+ return [_json_value(item, name=name) for item in value]
143
+
144
+ raise TypeError(f"{name} must be JSON-compatible.")
145
+
146
+
147
+ def _is_json_sequence(value: Any) -> bool:
148
+ return isinstance(value, Sequence) and not isinstance(value, str | bytes | bytearray)
@@ -0,0 +1,22 @@
1
+ from trellis_ui.forms.base import BaseForm, BaseFormMixin, BaseModelForm
2
+ from trellis_ui.forms.formsets import BaseFormSet, BaseModelFormSet
3
+ from trellis_ui.forms.widgets import (
4
+ ComboboxSelect,
5
+ DatePickerInput,
6
+ DateRangePickerInput,
7
+ WidgetContext,
8
+ widget_adapter,
9
+ )
10
+
11
+ __all__ = [
12
+ "BaseForm",
13
+ "BaseFormMixin",
14
+ "BaseFormSet",
15
+ "BaseModelForm",
16
+ "BaseModelFormSet",
17
+ "ComboboxSelect",
18
+ "DatePickerInput",
19
+ "DateRangePickerInput",
20
+ "WidgetContext",
21
+ "widget_adapter",
22
+ ]
@@ -0,0 +1,23 @@
1
+ from django import forms
2
+
3
+ from trellis_ui.forms.renderers import TrellisUIRenderer
4
+
5
+
6
+ class BaseFormMixin:
7
+ default_renderer = TrellisUIRenderer
8
+ template_name_div = TrellisUIRenderer.form_template_name
9
+ template_name_p = TrellisUIRenderer.form_template_name
10
+ template_name_table = TrellisUIRenderer.form_template_name
11
+ template_name_ul = TrellisUIRenderer.form_template_name
12
+
13
+ def __init__(self, *args, **kwargs):
14
+ kwargs.setdefault("label_suffix", "")
15
+ super().__init__(*args, **kwargs)
16
+
17
+
18
+ class BaseForm(BaseFormMixin, forms.Form):
19
+ pass
20
+
21
+
22
+ class BaseModelForm(BaseFormMixin, forms.ModelForm):
23
+ pass
@@ -0,0 +1,33 @@
1
+ from django.forms.boundfield import BoundField
2
+
3
+ from trellis_ui.forms.widgets import render_bound_widget
4
+
5
+
6
+ class UIBoundField(BoundField):
7
+ def as_widget(self, widget=None, attrs=None, only_initial=False):
8
+ widget = widget or self.field.widget
9
+ if self.field.localize:
10
+ widget.is_localized = True
11
+ attrs = attrs or {}
12
+ attrs = self.build_widget_attrs(attrs, widget)
13
+ if self.auto_id and "id" not in widget.attrs:
14
+ attrs.setdefault(
15
+ "id",
16
+ self.html_initial_id if only_initial else self.auto_id,
17
+ )
18
+ if only_initial and self.html_initial_name in self.form.data:
19
+ value = self.form._widget_data_value(
20
+ self.field.hidden_widget(),
21
+ self.html_initial_name,
22
+ )
23
+ else:
24
+ value = self.value()
25
+
26
+ return render_bound_widget(
27
+ bound_field=self,
28
+ widget=widget,
29
+ name=self.html_initial_name if only_initial else self.html_name,
30
+ value=value,
31
+ attrs=attrs,
32
+ renderer=self.form.renderer,
33
+ )
@@ -0,0 +1,20 @@
1
+ from django.forms.formsets import BaseFormSet as DjangoBaseFormSet
2
+ from django.forms.models import BaseModelFormSet as DjangoBaseModelFormSet
3
+
4
+ from trellis_ui.forms.renderers import TrellisUIRenderer
5
+
6
+
7
+ class BaseFormSet(DjangoBaseFormSet):
8
+ renderer = TrellisUIRenderer()
9
+ template_name_div = TrellisUIRenderer.formset_template_name
10
+ template_name_p = TrellisUIRenderer.formset_template_name
11
+ template_name_table = TrellisUIRenderer.formset_template_name
12
+ template_name_ul = TrellisUIRenderer.formset_template_name
13
+
14
+
15
+ class BaseModelFormSet(DjangoBaseModelFormSet):
16
+ renderer = TrellisUIRenderer()
17
+ template_name_div = TrellisUIRenderer.formset_template_name
18
+ template_name_p = TrellisUIRenderer.formset_template_name
19
+ template_name_table = TrellisUIRenderer.formset_template_name
20
+ template_name_ul = TrellisUIRenderer.formset_template_name
@@ -0,0 +1,3 @@
1
+ from trellis_ui.forms.presets import dates
2
+
3
+ __all__ = ["dates"]