@wovenui/components 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +284 -2
  3. package/dist/components.json +4204 -0
  4. package/dist/llms-full.txt +2839 -0
  5. package/dist/wovenui-kit.css +5002 -0
  6. package/dist/wovenui-kit.css.map +1 -0
  7. package/dist/wovenui-kit.iife.js +532 -0
  8. package/dist/wovenui-kit.js +529 -0
  9. package/dist/wovenui-kit.min.css +2 -0
  10. package/dist/wovenui-kit.min.css.map +1 -0
  11. package/package.json +268 -4
  12. package/src/_close.scss +45 -0
  13. package/src/_helpers.scss +11 -0
  14. package/src/_kit.scss +124 -0
  15. package/src/_shared.scss +10 -0
  16. package/src/components/_accordion.scss +132 -0
  17. package/src/components/_alert.scss +161 -0
  18. package/src/components/_autocomplete.scss +129 -0
  19. package/src/components/_avatar-group.scss +80 -0
  20. package/src/components/_avatar.scss +134 -0
  21. package/src/components/_badge.scss +91 -0
  22. package/src/components/_breadcrumb.scss +115 -0
  23. package/src/components/_btn-group.scss +113 -0
  24. package/src/components/_button.scss +301 -0
  25. package/src/components/_card.scss +120 -0
  26. package/src/components/_checkbox.scss +168 -0
  27. package/src/components/_code-block.scss +78 -0
  28. package/src/components/_confirm-modal.scss +75 -0
  29. package/src/components/_data-table.scss +79 -0
  30. package/src/components/_desc-list.scss +180 -0
  31. package/src/components/_divider.scss +66 -0
  32. package/src/components/_dot.scss +115 -0
  33. package/src/components/_drawer.scss +200 -0
  34. package/src/components/_dropdown.scss +182 -0
  35. package/src/components/_empty-state.scss +146 -0
  36. package/src/components/_field-group.scss +68 -0
  37. package/src/components/_field-message.scss +75 -0
  38. package/src/components/_field.scss +127 -0
  39. package/src/components/_form-actions.scss +58 -0
  40. package/src/components/_info-row.scss +69 -0
  41. package/src/components/_input-group.scss +87 -0
  42. package/src/components/_input.scss +278 -0
  43. package/src/components/_list.scss +76 -0
  44. package/src/components/_modal.scss +168 -0
  45. package/src/components/_page-header.scss +85 -0
  46. package/src/components/_pagination.scss +138 -0
  47. package/src/components/_panel.scss +69 -0
  48. package/src/components/_popover.scss +154 -0
  49. package/src/components/_progress-circle.scss +123 -0
  50. package/src/components/_progress.scss +122 -0
  51. package/src/components/_radio.scss +162 -0
  52. package/src/components/_segmented.scss +183 -0
  53. package/src/components/_select.scss +154 -0
  54. package/src/components/_sidebar.scss +300 -0
  55. package/src/components/_skeleton.scss +90 -0
  56. package/src/components/_spinner.scss +84 -0
  57. package/src/components/_stat.scss +92 -0
  58. package/src/components/_table.scss +460 -0
  59. package/src/components/_tabs.scss +327 -0
  60. package/src/components/_tag.scss +143 -0
  61. package/src/components/_text.scss +42 -0
  62. package/src/components/_textarea.scss +57 -0
  63. package/src/components/_timeline.scss +196 -0
  64. package/src/components/_title.scss +41 -0
  65. package/src/components/_toast.scss +221 -0
  66. package/src/components/_toggle.scss +171 -0
  67. package/src/components/_toolbar.scss +74 -0
  68. package/src/components/_topbar.scss +204 -0
  69. package/src/entries/accordion.scss +4 -0
  70. package/src/entries/alert.scss +4 -0
  71. package/src/entries/autocomplete.scss +4 -0
  72. package/src/entries/avatar-group.scss +4 -0
  73. package/src/entries/avatar.scss +4 -0
  74. package/src/entries/badge.scss +4 -0
  75. package/src/entries/breadcrumb.scss +4 -0
  76. package/src/entries/btn-group.scss +4 -0
  77. package/src/entries/button.scss +4 -0
  78. package/src/entries/card.scss +4 -0
  79. package/src/entries/checkbox.scss +4 -0
  80. package/src/entries/code-block.scss +4 -0
  81. package/src/entries/confirm-modal.scss +4 -0
  82. package/src/entries/data-table.scss +4 -0
  83. package/src/entries/desc-list.scss +4 -0
  84. package/src/entries/divider.scss +4 -0
  85. package/src/entries/dot.scss +4 -0
  86. package/src/entries/drawer.scss +4 -0
  87. package/src/entries/dropdown.scss +4 -0
  88. package/src/entries/empty-state.scss +4 -0
  89. package/src/entries/field-group.scss +4 -0
  90. package/src/entries/field-message.scss +4 -0
  91. package/src/entries/field.scss +4 -0
  92. package/src/entries/form-actions.scss +4 -0
  93. package/src/entries/info-row.scss +4 -0
  94. package/src/entries/input-group.scss +4 -0
  95. package/src/entries/input.scss +4 -0
  96. package/src/entries/list.scss +4 -0
  97. package/src/entries/modal.scss +4 -0
  98. package/src/entries/page-header.scss +4 -0
  99. package/src/entries/pagination.scss +4 -0
  100. package/src/entries/panel.scss +4 -0
  101. package/src/entries/popover.scss +4 -0
  102. package/src/entries/progress-circle.scss +4 -0
  103. package/src/entries/progress.scss +4 -0
  104. package/src/entries/radio.scss +4 -0
  105. package/src/entries/segmented.scss +4 -0
  106. package/src/entries/select.scss +4 -0
  107. package/src/entries/sidebar.scss +4 -0
  108. package/src/entries/skeleton.scss +4 -0
  109. package/src/entries/spinner.scss +4 -0
  110. package/src/entries/stat.scss +4 -0
  111. package/src/entries/table.scss +4 -0
  112. package/src/entries/tabs.scss +4 -0
  113. package/src/entries/tag.scss +4 -0
  114. package/src/entries/text.scss +4 -0
  115. package/src/entries/textarea.scss +4 -0
  116. package/src/entries/timeline.scss +4 -0
  117. package/src/entries/title.scss +4 -0
  118. package/src/entries/toast.scss +4 -0
  119. package/src/entries/toggle.scss +4 -0
  120. package/src/entries/toolbar.scss +4 -0
  121. package/src/entries/topbar.scss +4 -0
  122. package/src/index.scss +7 -0
  123. package/src/js/autocomplete.js +86 -0
  124. package/src/js/data-table.js +141 -0
  125. package/src/js/index.js +34 -0
  126. package/src/js/input-clear.js +25 -0
  127. package/src/js/package.json +3 -0
  128. package/src/js/tabs.js +73 -0
  129. package/src/js/toast.js +161 -0
  130. package/src/js/util.js +21 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["file:///Users/aamir/Projects/NuvoUI/uikits/components/src/_kit.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/_shared.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/_helpers.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_button.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_btn-group.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_badge.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_tag.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_dot.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_divider.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_spinner.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_avatar.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_avatar-group.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_card.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_panel.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_alert.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_empty-state.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_stat.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_desc-list.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_info-row.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_list.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_timeline.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_title.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_text.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_code-block.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_breadcrumb.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_pagination.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_page-header.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_toolbar.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_topbar.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_sidebar.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_table.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_progress.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_progress-circle.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_skeleton.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_field.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/node_modules/.pnpm/@wovenui+core@2.2.2_sass@1.108.0/node_modules/@wovenui/core/src/styles/tools/_media-queries.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_field-group.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_field-message.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_form-actions.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_input.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_input-group.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_textarea.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_select.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_checkbox.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_radio.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_toggle.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_segmented.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_accordion.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_modal.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/node_modules/.pnpm/@wovenui+core@2.2.2_sass@1.108.0/node_modules/@wovenui/core/src/styles/tools/_accessibility.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/_close.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_confirm-modal.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_drawer.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_dropdown.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_popover.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_tabs.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_toast.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_autocomplete.scss","file:///Users/aamir/Projects/NuvoUI/uikits/components/src/components/_data-table.scss"],"names":[],"mappings":";AA+GI;AAEA;EChHJ;IACI;IAIA;IACA;IACA;;ECJJ;IACI;;EAGJ;IACI;;ECgCJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;IACA;;EAGJ;IACI;IACA;;EAGJ;IAEI;IACA;;EAGJ;IACI;IACA;;EAIR;IACI;IACA;IACA;;EAEA;IACI;IACA;;EAGJ;IACI;IACA;;EAIR;IACI;IACA;IACA;;EAEA;IACI;IACA;;EAGJ;IACI;IACA;;EAKR;IACI;IACA;IACA;;EAEA;IACI;IACA;IACA;;EAGJ;IACI;IACA;IACA;;EAIR;IACI;IACA;IACA;;EAEA;IACI;IACA;IACA;;EAGJ;IACI;IACA;IACA;;EAIR;IACI;IACA;IACA;;EAGJ;IACI;IACA;;EAEA;IACI;IACA;;EAIR;IACI;IACA;IACA;;EAGJ;IACI;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAIJ;IACI;IACA;IACA;IACA;;EAEA;IACI;IACA;IACA;IACA;IACA;;EAKR;IACI;IACA;;EAEA;IACI;IACA;;EAIR;IACI;;EAGJ;IACI;;EAIJ;IACI;;EAGJ;AAAA;IAEI;IACA;;EAGJ;AAAA;IAEI;;EAGJ;AAAA;IAEI;;EAIJ;IACI;IACA;;EAGJ;IACI;;EAGJ;IACI;;EAGJ;IACI;IACA;;EAQI;IACI,YAJJ;IAKI;;EAGJ;IACI;;EAGJ;IACI,iBAbJ;;EAGA;IACI,YAJJ;IAKI;;EAGJ;IACI;;EAGJ;IACI,iBAbJ;;EAmBR;IACI;AAAA;AAAA;MAGI;MACA;MACA;;IAEA;AAAA;AAAA;MACI;;;ECvQZ;IACI;IACA;;EAEA;IACI;IACA;;EAGJ;IACI;;EAIJ;IACI;IACA;IACA;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;;EAIJ;IACI;;EAGJ;IACI;;EAGJ;IACI;;EAKJ;IACI;IACA;;EAGJ;IACI;IACA;;EAGJ;IACI;;EAIR;IACI;;EAEA;IACI;IACA;;EAGJ;IACI;IACA;;EAGJ;IACI;;EC/ER;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAIA;IACI;IACA;IACA;;EAHJ;IACI;IACA;IACA;;EAHJ;IACI;IACA;IACA;;EAHJ;IACI;IACA;IACA;;EAHJ;IACI;IACA;IACA;;EAKR;IACI;IACA;IACA;;EAIA;IACI;IACA;IACA;;EAHJ;IACI;IACA;IACA;;EAHJ;IACI;IACA;IACA;;EAHJ;IACI;IACA;IACA;;EAHJ;IACI;IACA;IACA;;EAIR;IACI;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;;EAEA;IACI;;EAGJ;IACI;;EC1DR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAIJ;IACI;IACA;IACA;;EAIJ;IACI;IACA;IACA;IACA;;EAEA;IACI;IACA;;EAKR;IACI;IACA;IACA;IACA;;EAEA;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;;EAKJ;IACI;IACA;IACA;;EAHJ;IACI;IACA;IACA;;EAHJ;IACI;IACA;IACA;;EAHJ;IACI;IACA;IACA;;EAHJ;IACI;IACA;IACA;;EAHJ;IACI;IACA;IACA;;EAHJ;IACI;IACA;IACA;;EAKR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;;EAIR;AAAA;IAEI;IACA;;ECjHJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAIA;IACI;;EADJ;IACI;;EADJ;IACI;;EADJ;IACI;;EADJ;IACI;;EAKR;IACI;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;;EAEA;IACI;;EAGJ;IACI;;EAKR;IACI;IACA;;EAEA;IACI;IACA;IACA;IACA;;EAIR;AAAA;IAEI;;EAGJ;AAAA;IAEI;;EAGJ;AAAA;IAEI;;EAIJ;IACI;AAAA;MAEI;MACA;MACA;MACA;MACA;MACA;;;EAIR;IACI;MACI;MACA;;;ECzFR;IACI;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IAEI;IACA;IACA;;EAIR;AAAA;AAAA;IAGI;;ECrCJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;;EAKJ;IACI;MACI;;;ECzCR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAlBA;IACA;IACA;;EAoBA;IACI;IACA;IACA;IACA;;EAIR;IA9BI;IACA;IACA;;EAgCJ;IAlCI;IACA;IACA;;EAqCJ;IACI;;EAIJ;IACI;IACA;;EAIA;IACI;IACA;;EAFJ;IACI;IACA;;EAFJ;IACI;IACA;;EAFJ;IACI;IACA;;EAFJ;IACI;IACA;;EAFJ;IACI;IACA;;EAFJ;IACI;IACA;;EAKR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAIJ;IACI;IACA;;EAIJ;IACI;IACA,YACI;;EAIR;IACI;;EAIJ;IACI,YACI;;EAKR;IACI;IACA,YACI;;ECvGR;IACI;IACA;IACA;;EAEA;IACI;;EAGJ;IACI;;EAsBR;IAGQ;AAAA;MACI;MACA;MACA;;IAtBR;MACI;AAAA;QACI;;;IAIR;MAEQ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;;;EAoBR;IA7BJ;MACI;AAAA;QACI;;;IAIR;MAEQ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;MADJ;AAAA;QACI;;;;ECrBhB;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;AAAA;AAAA;IAGI;;EAGJ;IACI;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;;EAIJ;IACI;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;;EAIJ;IACI;IACA;;EAEA;IACI;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;IACA;;EAIR;IACI;IACA;IACA;;EAGA;IACI;IACA;;EAIR;IACI;IACA;;EAEA;IACI;;ECxFR;IACI;IACA;IACA;IACA;;EAGJ;AAAA;IAEI;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;IACA;;ECjCJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGA;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;;EAIR;IACI;IACA;;EAIA;IACI;IACA;;EAEA;IACI;;EAGJ;IACI;;EATR;IACI;IACA;;EAEA;IACI;;EAGJ;IACI;;EATR;IACI;IACA;;EAEA;IACI;;EAGJ;IACI;;EATR;IACI;IACA;;EAEA;IACI;;EAGJ;IACI;;EATR;IACI;IACA;;EAEA;IACI;;EAGJ;IACI;;EAMZ;IACI;;EAGJ;IACI;;EAGJ;IACI;;EAGJ;IACI;;EAIJ;IACI;IACA;IACA;IACA;;EAKJ;IACI;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;;ECzHR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;;EAIR;IACI;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;;EAIJ;IACI;IACA;;EAEA;IACI;;EAGJ;IACI;IACA;IACA;;EAMJ;IACI;IACA;;EAEA;IACI;IACA;IACA;IACA;IACA;;EATR;IACI;IACA;;EAEA;IACI;IACA;IACA;IACA;IACA;;EATR;IACI;IACA;;EAEA;IACI;IACA;IACA;IACA;IACA;;EATR;IACI;IACA;;EAEA;IACI;IACA;IACA;IACA;IACA;;EAKZ;IACI;;EAGJ;IACI;;EAGJ;IACI;;EAGJ;IACI;;ECjHJ;IACI;IACA;IACA;;EAGJ;IACI;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;;EAIJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;;EAGJ;IACI;;EAGJ;IACI;;EAGJ;IACI;;EAGJ;IACI;;ECtDJ;IACI;IACA;IACA;IACA;;EAEA;AAAA;IAEI;IACA;;EAGJ;AAAA;IAEI;IACA;;EAGJ;AAAA;AAAA;AAAA;IAII;;EAGJ;AAAA;IAEI;;EAKR;IACI;IACA;IACA;;EAEA;IACI;IACA;IACA;IACA;;EAGJ;AAAA;IAEI;;EAGJ;AAAA;IAEI;;EAIJ;AAAA;IAEI;;EAKR;IACI;IACA;;EAKJ;IACI;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;IACA;IACA;;EAGJ;AAAA;AAAA;AAAA;IAII;IACA;IACA;IACA;IACA;IACA;;EAGJ;AAAA;IAEI;IACA;;EAGJ;AAAA;IAEI;;EAGJ;IACI;;EAiBR;IACI;IACA;IALA;;EAQA;IACI;;EAKR;IACI;IAfA;;EAkBA;IACI;IACA;;ECxJR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAIJ;IACI;;EAEA;IACI;IACA;;EAGJ;IACI;IACA;;EChCR;IACI;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;;EAIJ;IACI;IACA;IACA;IACA;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;;EC/BJ;IACI;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;;EAGA;IACI;IACA;IACA;IACA;IACA,OAtBC;IAuBD,QAvBC;IAwBD;IACA;;EAIJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAEA;IACI;;EAKZ;IACI;IACA;;EAGJ;IACI;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;;EAIA;IACI;;EADJ;IACI;;EADJ;IACI;;EADJ;IACI;;EADJ;IACI;;EAKR;IACI;;EAGJ;IACI;;EAGJ;IACI;;EAGJ;IACI;;EAKA;IAEI;;EAMJ;IACI;IACA;IACA;IACA,YACI;;EAIR;IACI;;EAKR;IACI;;EAEA;IACI;IACA;IACA;IACA;;EAKR;IAGQ;AAAA;MACI;MACA;;IAGJ;MACI;AAAA;QACI;QACA;QACA;QACA;;;;EAMhB;IACI;MACI;;IAGJ;MACI;;;EC5KR;IACI;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;;EAGJ;IACI;;ECrBJ;IACI;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;;EAIJ;IACI;;EAGJ;IACI;;ECbJ;IACI;IACA;IACA;IACA;IACA;IACA,YACI;IAKJ;IACA;IACA;IACA;IACA;IACA;IACA;;EAGA;IACI;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;;EAKR;IACI;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EC1CJ;IACI;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;;EAIJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAIJ;IACI;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;IACA;;EAGJ;IACI;IACA;;EAIR;IACI;IACA;IACA;;EAGJ;IACI;;EC9EJ;IACI;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;;EAGJ;IACI;IACA;IACA;;EAEA;IACI;IACA;;EAIR;IACI;IACA;IACA;IACA;IACA;IACA;;EAIA;AAAA;IAEI;IACA;IACA;IACA;;EAKJ;AAAA;IAEI;IACA;IACA;;EAKR;AAAA;IAEI;IACA;IACA;IACA;IACA;IACA;;EAIJ;AAAA;IAEI;IACA;;EAGJ;AAAA;IAEI;IACA;;EAGJ;AAAA;IAEI;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;;EAEA;IACI;;ECpGR;IACI;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;;EAIR;IACI;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;;EAIJ;IACI;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;;EC/CJ;IACI;IACA;IACA;IACA;IACA;;EAGJ;AAAA;IAEI;IACA;IACA;IACA;;EAIJ;IACI;;EAGJ;IACI;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;;EAGJ;IACI;;EC5BJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;IACA;;EAMR;AAAA;IAEI;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;;EAEA;IACI;;EAIR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;;EAIJ;IACI;IACA;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;IACA;;EAIR;IACI;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;;EAIJ;IACI;MACI;;IAEA;MACI;MACA;MACA;MACA;MACA;MACA;;IAIR;MACI;QACI;;;;EAMZ;IACI;;EAGJ;IACI;MACI;QACI;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;MAEA;QACI;;;;EAMhB;IACI;MACI;;;EC3IR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;;EAIJ;IACI;IACA;IACA;IACA;IACA;IACA;;EAGJ;AAAA;IAEI;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;;EAIJ;AAAA;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;AAAA;IACI;IACA;;EAIJ;AAAA;IACI;IACA;;EAGJ;AAAA;IACI;IACA;IACA;;EAKR;IACI;IACA;;EAEA;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAIR;IACI;;EAEA;IACI;;EAIJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAIR;AAAA;IAEI;;EAGJ;IACI;;EAIJ;IACI;IACA;;EAEA;AAAA;IAEI;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAKR;IAGQ;AAAA;MACI;;IAIR;AAAA;MAEI;;IAGJ;MACI;AAAA;QAEI;;MAEA;AAAA;QACI;QACA;QACA,YACI;;MAIR;AAAA;QACI;;;;ECjNhB;IACI;IACA;IACA,YACI;;EAMJ;IACI;IACA;;EAKR;IACI;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAIJ;IACI;IACA;;EAGJ;IACI;;EAGJ;IACI;;EAKR;IACI;IACA;;EAIJ;IACI;;EAEA;IACI;IACA;;EAMJ;IACI;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;;EAMR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;IACA;;EAIR;IACI;;EAEA;IACI;;EAIR;IACI;;EAGJ;IACI;;EAKJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;;EAIR;IACI;AAAA;MAEI;;;EAIR;IACI;IACA;;EAIJ;IACI;IAEA,YAvNO;;EA0NX;IACI;IAEA,YA7NO;;EAoOP;IACI;IAEA,YAvOG;;EA0OP;IACI;;EAGJ;IACI;;EAKR;IACI;;EAGJ;IACI;IACA;;EAEA;IACI;;EAKR;IACI;IACA;IACA;IACA,YA5QC;;EAgRL;IACI;MACI;;IAEA;MACI;MACA;MACA;MACA;MACA;MACA;MACA;MACA;;IAIR;MACI;QACI;;;;EASZ;AAAA;IAEI;IACA;IACA,YACI;;EAGJ;AAAA;IACI;IACA;IACA;IACA;IACA;;EAIR;IACI;;EAEA;IACI;IACA;;EAGJ;IACI;;EAIR;IACI;;EAEA;IACI;IACA;;EAGJ;IACI;;EAKR;AAAA;IAEI;;EAMJ;IACI;MACI;;IAGJ;AAAA;MAEI;MACA;MACA;MACA;MACA;;IAGJ;MACI;;IAGJ;MACI;MACA;;;EAIR;IACI;MACI;;IAGJ;MACI;;;EC7aR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;;EAIJ;IACI;IACA;IACA;IACA;IACA;;EAGA;IACI;;EAIR;IACI;;EAGJ;IACI;;EAIA;IACI;;EADJ;IACI;;EADJ;IACI;;EADJ;IACI;;EAIR;IACI;;EAGJ;IACI;;EAIJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;MACI;MACA;MACA;MACA;;;EAIR;IACI;MACI;;IAGJ;MACI;;;ECjFR;IACI;IACA;IACA;;EAIJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGA;IACI;IACA;IACA;IACA;IACA;IACA;;EAIR;IACI;IACA;;EAIA;IACI;;EADJ;IACI;;EADJ;IACI;;EADJ;IACI;;EAIR;IACI;IACA;IACA;;EAEA;IACI;;EAIR;IACI;IACA;IACA;;EAEA;IACI;;EAIR;IACI;MACI;MACA;;IAEA;MACI;;IAIR;MACI;;;EAKR;IACI;AAAA;MAEI;;;ECvFR;IACI;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;;EAGJ;IACI;;EAIJ;IACI;;EAGJ;IACI;IACA;IACA;IACA;;EAGJ;IACI;MACI;;;EAKR;IACI;AAAA;MAEI;MACA;;IAEA;AAAA;MACI;;;EAKZ;IACI;MACI;;IAGJ;MACI;;;ECpDR;IACI;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;;EAIJ;IACI;IACA;IACA;IACA;;EAIJ;IACI;;EAGJ;IACI;;ECxCA;ID6CA;MACI;MACA;MACA;MACA;;IAEA;MACI;;IAGJ;MACI;MACA;MACA;MACA;MACA;MACA;;;EAMZ;IACI;;EAEA;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;;EAIR;IACI;IACA;;EAIJ;IACI;AAAA;MAEI;MACA;MACA;;;EEpFR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;;EAIJ;IACI;IACA;;EAEA;IACI;;EC5CR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;;EAGA;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAIR;IACI;;EAGA;IACI;IACA;;EAIR;IACI;;EC3CJ;IACI;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;;EAIJ;IACI;IACA;;ECZJ;IACI;IACA;IACA;;EAEA;IACI;;EAGJ;IACI;;EAIJ;IACI;;EAIR;IACI;IACA;IACA;IA7BA;IAEA;;EAgCJ;IACI;IACA;;EAYJ;IACI;IACA;IACA;IACA;IAEA;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;IACA;IACA;IACA;IACA;;EAIR;IA7GA;IAEA;;EAiHA;IACI;IACA;;EAIJ;IACI;;EAGJ;IACI;;EAIJ;IACI;;EAIR;AAAA;IAEI;IACA;IACA;IACA;IACA;;EAEA;AAAA;IACI;IACA;IACA;;EAIR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;IACA;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;;EAGJ;IACI;;EAGJ;IACI;IACA;IACA;;EAIR;IACI;IAEA;IACA;IACA;;EAGJ;IACI;IAEA;IACA;;EAGJ;IACI;MACI;;;EAWA;IACI,QANJ;IAOI,gBANF;IAOE,WANH;IAzNL;IAEA;;EAsOI;IACI;IAEA,QApBJ;IAqBI,gBApBF;IAqBE,WApBH;;EAGD;IACI,QANJ;IAOI,gBANF;IAOE,WANH;IAWO;;EAIR;IACI;IAEA,QApBJ;IAqBI,gBApBF;IAqBE,WApBH;;ECtOT;IACI;IACA;IACA;;EAEA;IACI;IACA;IACA;;EAGJ;IACI;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;;EAIJ;IACI;;EAEA;IACI;;EAKR;IACI;;EAIR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;;EC1DJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;IACA;;EAGJ;IACI;;EAIJ;IACI;;EAKR;IACI;MACI;;;ECpBR;IACI;IACA;IACA;;EAEA;IACI;;EAIJ;IACI;;EAKR;IACI;IACA;IACA,qBACI;IAEJ;IACA;IACA;IACA;;EAEA;IACI,qBACI;;EAIR;IACI;;EAIR;IACI;IACA;;EAGJ;IACI;;EAKA;AAAA;IAEI;IACA;;EAHJ;AAAA;IAEI;IACA;;EAKR;IACI;;EAIJ;IACI;MACI;;IAEA;MACI;;IAGJ;MACI;MACA;MACA;MACA;MACA;MACA;MACA;MACA;;IAGJ;MACI;MACA;MACA;MACA;;IAGJ;MACI;;IAGJ;MACI;MACA;;IAGJ;MACI;MACA;;;EAMZ;IACI;MACI;MACA;MACA;;;EAMJ;IACI;IACA;;EAFJ;IACI;IACA;;ECtHR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;IACA;;EAIR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGA;IACI;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;;EAEA;IACI;;EAGJ;IACI;IACA;;EAKR;IAEI;IACA;;EAIJ;IACI;;EAGJ;IACI;IACA;;EAGJ;IACI;;EAIR;IACI;;EAGJ;IACI;;EAGJ;IACI;;EAGJ;IACI;MACI;MACA;MACA;;IAEA;MACI;;IAGJ;MACI;MACA;;IAGJ;MACI;;IAGJ;MACI;;;EAMZ;IACI;;EAGJ;IACI;;ECtIJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;IACA;;EAIR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGA;IACI;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;;EAEA;IACI;;EAGJ;IACI;IACA;;EAKR;IAEI;IACA;;EAGJ;IACI;IACA;;EAGJ;IACI;;EAIR;IACI;;EAGJ;IACI;;EAGJ;IACI;;EAGJ;IACI;MACI;MACA;MACA;;IAEA;MACI;;IAGJ;MACI;MACA;;IAGJ;MACI;;IAGJ;MACI;;;EAMZ;IACI;;EAGJ;IACI;;EClIJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;IACA;;EAIR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGA;IACI;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;;EAGJ;IACI;;EAEA;IACI;IACA;;EAGJ;IACI;;EAIR;IACI;;EAGJ;IACI;IACA;;EAGJ;IACI;;EAIR;IACI;;EAGJ;IACI;;EAGJ;IACI;;EAIJ;IACI;MACI;;IAIJ;AAAA;MAEI;;;EAIR;IACI;MACI;MACA;MACA;MACA;;IAEA;MACI;;IAGJ;MACI;MACA;;IAEA;MACI;;IAIR;MACI;;IAEA;MACI;;;ECvIhB;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAZK;IAaL;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;;EAGJ;IACI;IACA;;EAIJ;IACI;IACA,YACI;IAEJ;;EAGJ;IACI;IACA;;EAKR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;;EAEA;IACI;;EAIR;IAC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A;MAHJ;AAAA;QAIQ;;;;ECjKhB;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;MAEI;MACA;MACA;MACA;MACA;MACA;MACA,wBACI;;IAMR;MACI;;;EAKR;IACI;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGA;IACI;IACA;IACA;;EAGJ;IACI;;EAIJ;IACI;IACA;;EAGJ;IAEI;IACA;IACA;;EAIR;IACI;;EAEA;IACI;;EAIR;IACI;IACA;IACA;IACA;IACA;;EAKJ;IACI;AAAA;MAEI;MACA;MACA,YACI;;IAMJ;AAAA;MACI;MACA;;IAEA;MAJJ;AAAA;QAKQ;QACA;;;IAKZ;MACI;AAAA;QAEI;QACA;;MAEA;AAAA;QACI;;MAEA;QAHJ;AAAA;UAIQ;UACA;;;;;EC3IpB;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;;EAGJ;IACI;;EAIR;IACI;IACA;IACA;IACA;;EAIJ;IACI;IACA;IACA;IACA;IACA;;EAIJ;IACI;IACA;IACA;;EAGJ;IACI;IACA;IACA;;EAGJ;IACI;MACI;MACA;MACA;MACA;MACA;MACA;MACA;MAGA;MACA;MACA,wBACI;;;EAUZ;IACI;AAAA;MAEI;MACA;MACA,YACI;;IAMJ;AAAA;MACI;MACA;;IAEA;MAJJ;AAAA;QAKQ;QACA;;;IAKZ;MACI;AAAA;QAEI;;MAEA;AAAA;QACI;;MAEA;QAHJ;AAAA;UAIQ;;;;;EC1GpB;IACI;IACA;IACA;IACA;IACA;;EAIJ;IACI;IACA;IACA;;EAGJ;IACI;IACA;IACA;;EAGJ;IACI;MACI;MACA;MACA;MACA;MACA;MACA;;IAEA;MACI;;;EAKZ;IACI;MACI;MACA;;IAGJ;MACI;;IAGJ;MACI;;IAGJ;MACI;MACA;;;EAIR;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGA;IACI;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;IACA;;EAGJ;IACI;;EAEA;IACI;;EAIR;IAEI;IACA;;EAGJ;IACI;IACA;IACA;;EAKR;IACI;IACA;;EAEA;IACI;IACA;IACA;;EAMR;IACI;IACA;;EAEA;IACI;IACA;IACA;;EAIR;IACI;IACA;IACA;;EAEA;IACI;;EAGJ;IACI;;EAGJ;IACI;;EAGJ;IACI;IACA;;EAKR;IACI;IACA;;EAIJ;IACI;IACA;IACA;;EAEA;IACI;IACA;IACA;IACA;;EAGJ;IACI;IACA;;EAEA;IACI;IACA;;EAGJ;IACI;;EAIR;IACI;;EAIR;IACI;;EAIJ;IACI;IACA;;EAEA;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;;EAEA;IACI;IACA;IACA;IACA;;EAIR;IACI;IACA;IACA;IACA;;EAKR;IAGQ;AAAA;MACI;MACA,YACI;;IAIR;AAAA;MACI;;IAGJ;AAAA;MACI;;IAGJ;AAAA;MACI,YACI;;IAGJ;MALJ;AAAA;QAMQ;QACA;;;;EAMhB;IACI;MACI;;;EC1RR;IACI;IACA;IACA;IACA;IACA;IACA;IACA,KAZG;IAaH;IACA;IACA,SAdI;IAeJ;IACA;IACA;IACA;;EAEA;IACI;;EAIR;AAAA;IAEI;IACA;;EAGJ;AAAA;IAEI;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;;EAGJ;IACI;IACA;IACA;IACA;;EAGJ;IACI;;EAIR;IACI;;EAIA;IACI;;EAEA;IACI;;EAJR;IACI;;EAEA;IACI;;EAJR;IACI;;EAEA;IACI;;EAJR;IACI;;EAEA;IACI;;EAJR;IACI;;EAEA;IACI;;EAKZ;INpHI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;IACA;;EAGJ;IACI;IACA;;EM+ER;IAGI;IACA;;EAKJ;IACI;AAAA;MAEI;MACA;MACA;;IAGJ;AAAA;MAEI;MACA;MACA;MACA;MACA;MACA;;IAIJ;AAAA;MAEI;;IAGJ;AAAA;AAAA;AAAA;MAII;MACA;MACA;;IAGJ;AAAA;MAEI;MACA;MACA;;IAGJ;AAAA;AAAA;AAAA;MAII;;;EAKR;IACI;AAAA;MAEI,YACI;;IAUJ;MAFJ;AAAA;QAGQ;QACA;;;IAQJ;MAJJ;AAAA;AAAA;AAAA;QAKQ;QACA;;;IAKR;AAAA;MAEI;;;EAIR;IACI;MACI;;;EC1LR;IACI;;EAEA;IACI;;EAIR;AAAA;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;;EAGJ;IACI;IACA;IACA;;EAGJ;IACI;IACA;IACA;IACA;IACA;IACA;;EAEA;IACI;;EAGJ;IACI;;EAIJ;IACI;IACA;;EAGJ;IACI;IACA;;EAIR;IACI;;EAIJ;IACI;AAAA;MAEI,YACI;;IAGJ;MANJ;AAAA;QAOQ;QACA;;;;EAKZ;IACI;MACI;MACA;MACA;;;EAIR;IACI;IACA;IACA;;EC7FJ;IACI;;EAIJ;IACI;IACA;IACA;;EAGJ;IACI;;EAGJ;IACI;;EAIJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAIJ;IACI;AAAA;MAEI;MACA;;IAGJ;MACI;MACA"}
@@ -0,0 +1,532 @@
1
+ // @wovenui/components wovenui-kit.js, MIT. Built from src/js.
2
+ (() => {
3
+ 'use strict';
4
+ // Shared helpers for the kit scripts
5
+ const started = new WeakSet();
6
+ let count = 0;
7
+
8
+ // Elements matching the selector in root (root included), each returned only once
9
+ function fresh(root, selector) {
10
+ const found = [...root.querySelectorAll(selector)];
11
+ if (root.matches?.(selector)) found.unshift(root);
12
+ return found.filter((el) => !started.has(el) && started.add(el));
13
+ }
14
+
15
+ // The element's id, assigned when missing
16
+ function idOf(el, prefix) {
17
+ if (!el.id) el.id = `${prefix}-${++count}`;
18
+ return el.id;
19
+ }
20
+
21
+ // True when the component opted into motion and the user allows it
22
+ const animated = (el, name) =>
23
+ el.matches(`.${name}.animated, .wu-animated .${name}`) &&
24
+ matchMedia('(prefers-reduced-motion: no-preference)').matches;
25
+
26
+ // Tabs: WAI-ARIA tabs pattern, roving tabindex, automatic activation
27
+
28
+ const usable = (tab) =>
29
+ !tab.disabled && tab.getAttribute('aria-disabled') !== 'true';
30
+
31
+ function initTabs(root = document) {
32
+ for (const tabs of fresh(root, '.wu-tabs')) {
33
+ const list = tabs.querySelector(':scope > .wu-tabs-list');
34
+ if (!list) continue;
35
+ const all = [...list.querySelectorAll(':scope > .wu-tabs-tab')];
36
+ const panels = [...tabs.querySelectorAll(':scope > .wu-tabs-panel')];
37
+ const panelOf = (tab) =>
38
+ document.getElementById(tab.getAttribute('aria-controls'));
39
+
40
+ list.setAttribute('role', 'tablist');
41
+ if (tabs.classList.contains('vertical'))
42
+ list.setAttribute('aria-orientation', 'vertical');
43
+ all.forEach((tab, i) => {
44
+ const panel = panelOf(tab) || panels[i];
45
+ tab.setAttribute('role', 'tab');
46
+ if (!panel) return;
47
+ tab.setAttribute('aria-controls', idOf(panel, 'wu-panel'));
48
+ panel.setAttribute('role', 'tabpanel');
49
+ panel.setAttribute('aria-labelledby', idOf(tab, 'wu-tab'));
50
+ if (!panel.hasAttribute('tabindex')) panel.tabIndex = 0;
51
+ });
52
+
53
+ const select = (tab, focus) => {
54
+ for (const t of all) {
55
+ const on = t === tab;
56
+ t.setAttribute('aria-selected', on);
57
+ t.tabIndex = on ? 0 : -1;
58
+ const panel = panelOf(t);
59
+ if (panel) panel.hidden = !on;
60
+ }
61
+ if (focus) tab.focus();
62
+ };
63
+ const first =
64
+ all.find((t) => t.getAttribute('aria-selected') === 'true') ||
65
+ all.find(usable);
66
+ if (first) select(first);
67
+
68
+ list.addEventListener('click', (e) => {
69
+ const tab = e.target.closest('.wu-tabs-tab');
70
+ if (all.includes(tab) && usable(tab)) select(tab);
71
+ });
72
+
73
+ list.addEventListener('keydown', (e) => {
74
+ const items = all.filter(usable);
75
+ const i = items.indexOf(e.target);
76
+ if (i < 0) return;
77
+ const vertical =
78
+ list.getAttribute('aria-orientation') === 'vertical';
79
+ const back = getComputedStyle(list).direction === 'rtl' ? 1 : -1;
80
+ const prev = items.at((i - 1) % items.length);
81
+ const after = items.at((i + 1) % items.length);
82
+ const next = {
83
+ ...(vertical
84
+ ? { ArrowUp: prev, ArrowDown: after }
85
+ : {
86
+ ArrowLeft: items.at((i + back) % items.length),
87
+ ArrowRight: items.at((i - back) % items.length),
88
+ }),
89
+ Home: items[0],
90
+ End: items.at(-1),
91
+ }[e.key];
92
+ if (!next) return;
93
+ e.preventDefault();
94
+ select(next, true);
95
+ });
96
+ }
97
+ }
98
+
99
+ // Toasts: a polite live region, auto-dismiss paused on hover and focus, never takes focus
100
+
101
+ const MAX = 3;
102
+ const timers = new WeakMap();
103
+ const keys = new WeakMap();
104
+ const open = new Map();
105
+ const before = new WeakMap();
106
+ const pending = new WeakSet();
107
+ const toastsOf = (region) =>
108
+ region.querySelectorAll(':scope > .wu-toast:not([hidden])');
109
+ const paused = (region) => region.matches(':hover, :focus-within');
110
+
111
+ function start(el) {
112
+ const t = timers.get(el);
113
+ if (!t || t.id) return;
114
+ t.start = Date.now();
115
+ t.id = setTimeout(() => dismiss(el), t.left);
116
+ }
117
+
118
+ function stop(el) {
119
+ const t = timers.get(el);
120
+ if (!t?.id) return;
121
+ clearTimeout(t.id);
122
+ t.id = 0;
123
+ t.left -= Date.now() - t.start;
124
+ }
125
+
126
+ // Focus target when a focused toast closes: the next toast's close button, else where focus was before
127
+ function focusAfter(el) {
128
+ const region = el.parentElement;
129
+ const rest = region ? [...toastsOf(region)].filter((t) => t !== el) : [];
130
+ const next =
131
+ rest.find(
132
+ (t) =>
133
+ el.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_FOLLOWING
134
+ ) ?? rest.at(-1);
135
+ const close = next?.querySelector('.wu-toast-close');
136
+ if (close) return close;
137
+ const back = region && before.get(region);
138
+ return back?.isConnected ? back : null;
139
+ }
140
+
141
+ // Hides the toast, then removes it once its exit transition ends
142
+ function dismiss(el, moveFocus = true) {
143
+ if (el.hidden) return;
144
+ if (moveFocus && el.contains(document.activeElement))
145
+ focusAfter(el)?.focus();
146
+ stop(el);
147
+ timers.delete(el);
148
+ if (open.get(keys.get(el)) === el) open.delete(keys.get(el));
149
+ el.hidden = true;
150
+ const done = () => el.remove();
151
+ Promise.all(el.getAnimations().map((a) => a.finished)).then(done, done);
152
+ }
153
+
154
+ function arm(el, region, ms) {
155
+ if (ms > 0) timers.set(el, { left: ms, ms, id: 0 });
156
+ if (!paused(region)) start(el);
157
+ }
158
+
159
+ // Closes the oldest toasts that time out, until at most MAX are open; never the new one or a focused one
160
+ function cap(region, added) {
161
+ const shown = [...toastsOf(region)];
162
+ let extra = shown.length - MAX;
163
+ for (const el of shown) {
164
+ if (extra <= 0) break;
165
+ if (
166
+ el === added ||
167
+ !timers.has(el) ||
168
+ el.contains(document.activeElement)
169
+ )
170
+ continue;
171
+ dismiss(el, false);
172
+ extra--;
173
+ }
174
+ }
175
+
176
+ function wire(root) {
177
+ for (const region of fresh(root, '.wu-toast-region')) {
178
+ const resume = () => toastsOf(region).forEach(start);
179
+ // detail 0: activated from the keyboard, so focus moves on; a pointer click lets it go
180
+ region.addEventListener('click', (e) => {
181
+ const close = e.target.closest('.wu-toast-close');
182
+ if (close) dismiss(close.closest('.wu-toast'), e.detail === 0);
183
+ });
184
+ region.addEventListener('mouseenter', () =>
185
+ toastsOf(region).forEach(stop)
186
+ );
187
+ region.addEventListener('focusin', (e) => {
188
+ if (e.relatedTarget && !region.contains(e.relatedTarget))
189
+ before.set(region, e.relatedTarget);
190
+ toastsOf(region).forEach(stop);
191
+ });
192
+ region.addEventListener('mouseleave', () => {
193
+ if (!region.matches(':focus-within')) resume();
194
+ });
195
+ region.addEventListener('focusout', (e) => {
196
+ if (!region.contains(e.relatedTarget) && !region.matches(':hover'))
197
+ resume();
198
+ });
199
+ for (const el of toastsOf(region))
200
+ arm(el, region, +(el.dataset.duration ?? 5000));
201
+ }
202
+ }
203
+
204
+ const initToast = (root = document) => wire(root);
205
+
206
+ // Shows a toast; returns its element. duration 0 keeps it until closed.
207
+ // A message and variant already open restart that toast's timer instead of adding another.
208
+ function toast(message, options = {}) {
209
+ const { title, variant, duration = 5000, closeLabel = 'Close' } = options;
210
+ const key = `${variant ?? ''}\n${message}`;
211
+ const same = open.get(key);
212
+ if (same && !same.hidden && (same.isConnected || pending.has(same))) {
213
+ const t = timers.get(same);
214
+ if (t) {
215
+ stop(same);
216
+ t.left = t.ms;
217
+ if (!paused(same.parentElement ?? same)) start(same);
218
+ }
219
+ return same;
220
+ }
221
+
222
+ let region = document.querySelector('.wu-toast-region');
223
+ if (!region) {
224
+ region = document.createElement('section');
225
+ region.className = 'wu-toast-region';
226
+ region.setAttribute('aria-live', 'polite');
227
+ region.setAttribute('aria-label', 'Notifications');
228
+ document.body.append(region);
229
+ }
230
+ wire(region);
231
+
232
+ const el = document.createElement('div');
233
+ el.className = variant ? `wu-toast ${variant}` : 'wu-toast';
234
+ const part = (tag, className, text) => {
235
+ const node = el.appendChild(document.createElement(tag));
236
+ if (className) node.className = className;
237
+ if (text) node.textContent = text;
238
+ return node;
239
+ };
240
+ if (title) part('p', 'wu-toast-title', title);
241
+ part('p', '', message);
242
+ const close = part('button', 'wu-toast-close');
243
+ close.type = 'button';
244
+ close.setAttribute('aria-label', closeLabel);
245
+ keys.set(el, key);
246
+ open.set(key, el);
247
+ pending.add(el);
248
+
249
+ // Next task, so a region added just now is known to screen readers first
250
+ setTimeout(() => {
251
+ pending.delete(el);
252
+ if (open.get(key) !== el) return;
253
+ region.append(el);
254
+ arm(el, region, duration);
255
+ cap(region, el);
256
+ }, 50);
257
+ return el;
258
+ }
259
+
260
+ // Autocomplete: WAI-ARIA combobox with a listbox, filters the options in the markup
261
+
262
+ function initAutocomplete(root = document) {
263
+ for (const box of fresh(root, '.wu-autocomplete')) {
264
+ const input = box.querySelector('input');
265
+ const list = box.querySelector('.wu-autocomplete-list');
266
+ if (!input || !list) continue;
267
+ const empty = box.querySelector('.wu-autocomplete-empty');
268
+ const options = [...list.querySelectorAll('.wu-autocomplete-option')];
269
+ let active = null;
270
+
271
+ input.setAttribute('role', 'combobox');
272
+ input.setAttribute('aria-autocomplete', 'list');
273
+ input.setAttribute('aria-controls', idOf(list, 'wu-listbox'));
274
+ input.autocomplete = 'off';
275
+ list.setAttribute('role', 'listbox');
276
+ for (const o of options) {
277
+ o.setAttribute('role', 'option');
278
+ idOf(o, 'wu-option');
279
+ }
280
+
281
+ const shown = () =>
282
+ options.filter(
283
+ (o) => !o.hidden && o.getAttribute('aria-disabled') !== 'true'
284
+ );
285
+ const setActive = (o) => {
286
+ active?.removeAttribute('aria-selected');
287
+ active = o;
288
+ if (o) {
289
+ o.setAttribute('aria-selected', 'true');
290
+ input.setAttribute('aria-activedescendant', o.id);
291
+ o.scrollIntoView({ block: 'nearest' });
292
+ } else input.removeAttribute('aria-activedescendant');
293
+ };
294
+ const open = (on) => {
295
+ const count = shown().length;
296
+ list.hidden = !on || !count;
297
+ if (empty) empty.hidden = !on || count > 0;
298
+ input.setAttribute('aria-expanded', !list.hidden);
299
+ setActive(null);
300
+ };
301
+ const filter = () => {
302
+ const q = input.value.trim().toLowerCase();
303
+ for (const o of options)
304
+ o.hidden = !o.textContent.toLowerCase().includes(q);
305
+ open(true);
306
+ };
307
+ const choose = (o) => {
308
+ input.value = o.textContent.trim();
309
+ open(false);
310
+ input.dispatchEvent(new Event('change', { bubbles: true }));
311
+ };
312
+ const move = (step) => {
313
+ if (list.hidden) filter();
314
+ const items = shown();
315
+ if (!items.length) return;
316
+ const i = items.indexOf(active);
317
+ const n = items.length;
318
+ setActive(
319
+ items[i < 0 ? (step > 0 ? 0 : n - 1) : (i + step + n) % n]
320
+ );
321
+ };
322
+
323
+ open(false);
324
+ input.addEventListener('input', filter);
325
+ input.addEventListener('blur', () => open(false));
326
+ input.addEventListener('keydown', (e) => {
327
+ if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
328
+ move(e.key === 'ArrowDown' ? 1 : -1);
329
+ } else if (e.key === 'Enter' && active) {
330
+ choose(active);
331
+ } else if (e.key === 'Escape') {
332
+ if (list.hidden && (!empty || empty.hidden)) input.value = '';
333
+ open(false);
334
+ } else return;
335
+ e.preventDefault();
336
+ });
337
+ // Keep focus in the input while picking with the pointer
338
+ list.addEventListener('mousedown', (e) => e.preventDefault());
339
+ list.addEventListener('click', (e) => {
340
+ const o = e.target.closest('.wu-autocomplete-option');
341
+ if (o && o.getAttribute('aria-disabled') !== 'true') choose(o);
342
+ });
343
+ }
344
+ }
345
+
346
+ // Tables: data table sorting (sets aria-sort and announces the order), selection column and expandable rows
347
+
348
+ const statuses = new WeakMap();
349
+ // Polite live region after the table, added once so the first announcement is heard
350
+ const statusOf = (table) => {
351
+ let status = statuses.get(table);
352
+ if (!status?.isConnected) {
353
+ status = document.createElement('div');
354
+ status.className = 'wu-data-table-status';
355
+ status.setAttribute('role', 'status');
356
+ table.after(status);
357
+ statuses.set(table, status);
358
+ }
359
+ return status;
360
+ };
361
+
362
+ const collator = new Intl.Collator(undefined, {
363
+ numeric: true,
364
+ sensitivity: 'base',
365
+ });
366
+ const valueOf = (row, i) => {
367
+ const cell = row.cells[i];
368
+ return cell ? (cell.dataset.sortValue ?? cell.textContent.trim()) : '';
369
+ };
370
+ const numberOf = (v) => {
371
+ const n = v.replace(/[\s,]/g, '');
372
+ return n && isFinite(n) ? +n : NaN;
373
+ };
374
+
375
+ function sortTable(table, th) {
376
+ const body = table.tBodies[0];
377
+ if (!body) return;
378
+ const i = th.cellIndex;
379
+ const dir = th.getAttribute('aria-sort') === 'ascending' ? -1 : 1;
380
+ for (const h of th.parentElement.cells)
381
+ if (h !== th) h.removeAttribute('aria-sort');
382
+ const order = dir > 0 ? 'ascending' : 'descending';
383
+ th.setAttribute('aria-sort', order);
384
+ statusOf(table).textContent =
385
+ `Sorted by ${th.textContent.trim()}, ${order}`;
386
+
387
+ // A detail row moves with the row before it
388
+ const rows = [...body.rows]
389
+ .filter((r) => !r.classList.contains('wu-table-detail'))
390
+ .sort((a, b) => {
391
+ const x = valueOf(a, i);
392
+ const y = valueOf(b, i);
393
+ const d = numberOf(x) - numberOf(y);
394
+ return dir * (isNaN(d) ? collator.compare(x, y) : d);
395
+ })
396
+ .flatMap((r) => {
397
+ const next = r.nextElementSibling;
398
+ return next?.classList.contains('wu-table-detail')
399
+ ? [r, next]
400
+ : [r];
401
+ });
402
+ const update = () => body.append(...rows);
403
+
404
+ if (!document.startViewTransition || !animated(table, 'wu-data-table'))
405
+ return update();
406
+ table.setAttribute('aria-busy', 'true');
407
+ document
408
+ .startViewTransition(update)
409
+ .finished.finally(() => table.removeAttribute('aria-busy'));
410
+ }
411
+
412
+ function initDataTable(root = document) {
413
+ for (const table of fresh(root, '.wu-data-table')) {
414
+ statusOf(table);
415
+ table.addEventListener('click', (e) => {
416
+ const th = e.target.closest('.wu-table-sort')?.closest('th');
417
+ if (th && th.closest('table') === table && th.closest('thead'))
418
+ sortTable(table, th);
419
+ });
420
+ }
421
+ }
422
+
423
+ // Selection column: row checkboxes in .wu-table-select cells, select-all in the header
424
+ const tables = new WeakSet();
425
+ const selectBox = '.wu-table-select input[type="checkbox"]';
426
+ const allBoxOf = (table) => table.querySelector(`:scope > thead ${selectBox}`);
427
+ const rowBoxesOf = (table) =>
428
+ [...table.tBodies]
429
+ .flatMap((body) => [...body.rows])
430
+ .map((row) => row.querySelector(`:scope > ${selectBox}`))
431
+ .filter(Boolean);
432
+
433
+ // Select-all is checked, mixed or clear; rows of a role="grid" table also get aria-selected
434
+ function syncSelection(table) {
435
+ const boxes = rowBoxesOf(table);
436
+ const on = boxes.filter((b) => b.checked).length;
437
+ const all = allBoxOf(table);
438
+ if (all) {
439
+ all.checked = on > 0 && on === boxes.length;
440
+ all.indeterminate = on > 0 && on < boxes.length;
441
+ }
442
+ if (/^(tree)?grid$/.test(table.getAttribute('role') ?? ''))
443
+ for (const b of boxes)
444
+ b.closest('tr').setAttribute('aria-selected', b.checked);
445
+ }
446
+
447
+ // Expandable row: the button's aria-controls row, else the next row, when it is a .wu-table-detail
448
+ function setExpanded(button, open) {
449
+ const id = button.getAttribute('aria-controls');
450
+ const row = id
451
+ ? document.getElementById(id)
452
+ : button.closest('tr')?.nextElementSibling;
453
+ if (!row?.classList.contains('wu-table-detail')) return;
454
+ button.setAttribute('aria-controls', idOf(row, 'wu-detail'));
455
+ button.setAttribute('aria-expanded', open);
456
+ row.hidden = !open;
457
+ }
458
+
459
+ function initTable(root = document) {
460
+ const found = [...root.querySelectorAll('.wu-table')];
461
+ if (root.matches?.('.wu-table')) found.unshift(root);
462
+ for (const table of found) {
463
+ if (tables.has(table)) continue;
464
+ tables.add(table);
465
+ const own = (el) => el?.closest('table') === table;
466
+ syncSelection(table);
467
+ for (const b of table.querySelectorAll('.wu-table-expand'))
468
+ if (own(b))
469
+ setExpanded(b, b.getAttribute('aria-expanded') === 'true');
470
+
471
+ table.addEventListener('change', (e) => {
472
+ const box = e.target.closest?.(selectBox);
473
+ if (!own(box)) return;
474
+ if (box === allBoxOf(table))
475
+ for (const b of rowBoxesOf(table))
476
+ if (!b.disabled) b.checked = box.checked;
477
+ syncSelection(table);
478
+ });
479
+ table.addEventListener('click', (e) => {
480
+ const b = e.target.closest?.('.wu-table-expand');
481
+ if (own(b))
482
+ setExpanded(b, b.getAttribute('aria-expanded') !== 'true');
483
+ });
484
+ }
485
+ }
486
+
487
+ // Input clear button: .wu-input-clear inside .wu-input-affix shows while the field has text, clears it and refocuses
488
+
489
+ function initInputClear(root = document) {
490
+ for (const button of fresh(root, '.wu-input-clear')) {
491
+ const input = button
492
+ .closest('.wu-input-affix')
493
+ ?.querySelector('input, textarea');
494
+ if (!input) continue;
495
+
496
+ const sync = () => {
497
+ button.hidden = !input.value || input.disabled || input.readOnly;
498
+ };
499
+ button.addEventListener('click', () => {
500
+ input.value = '';
501
+ input.dispatchEvent(new Event('input', { bubbles: true }));
502
+ input.dispatchEvent(new Event('change', { bubbles: true }));
503
+ sync();
504
+ input.focus();
505
+ });
506
+ input.addEventListener('input', sync);
507
+ input.form?.addEventListener('reset', () => setTimeout(sync));
508
+ sync();
509
+ }
510
+ }
511
+
512
+ // @wovenui/components scripts: finds kit components by class and starts them.
513
+ // init(root) starts components added later; each element starts only once.
514
+
515
+ function init(root = document) {
516
+ initTabs(root);
517
+ initToast(root);
518
+ initAutocomplete(root);
519
+ initTable(root);
520
+ initDataTable(root);
521
+ initInputClear(root);
522
+ }
523
+
524
+
525
+ if (typeof document !== 'undefined') {
526
+ if (document.readyState === 'loading')
527
+ document.addEventListener('DOMContentLoaded', () => init());
528
+ else init();
529
+ }
530
+
531
+ globalThis.WovenUIKit = { init, toast, dismiss, sortTable, initTabs, initToast, initAutocomplete, initDataTable, initInputClear, initTable };
532
+ })();