@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.
- package/LICENSE +21 -0
- package/README.md +284 -2
- package/dist/components.json +4204 -0
- package/dist/llms-full.txt +2839 -0
- package/dist/wovenui-kit.css +5002 -0
- package/dist/wovenui-kit.css.map +1 -0
- package/dist/wovenui-kit.iife.js +532 -0
- package/dist/wovenui-kit.js +529 -0
- package/dist/wovenui-kit.min.css +2 -0
- package/dist/wovenui-kit.min.css.map +1 -0
- package/package.json +268 -4
- package/src/_close.scss +45 -0
- package/src/_helpers.scss +11 -0
- package/src/_kit.scss +124 -0
- package/src/_shared.scss +10 -0
- package/src/components/_accordion.scss +132 -0
- package/src/components/_alert.scss +161 -0
- package/src/components/_autocomplete.scss +129 -0
- package/src/components/_avatar-group.scss +80 -0
- package/src/components/_avatar.scss +134 -0
- package/src/components/_badge.scss +91 -0
- package/src/components/_breadcrumb.scss +115 -0
- package/src/components/_btn-group.scss +113 -0
- package/src/components/_button.scss +301 -0
- package/src/components/_card.scss +120 -0
- package/src/components/_checkbox.scss +168 -0
- package/src/components/_code-block.scss +78 -0
- package/src/components/_confirm-modal.scss +75 -0
- package/src/components/_data-table.scss +79 -0
- package/src/components/_desc-list.scss +180 -0
- package/src/components/_divider.scss +66 -0
- package/src/components/_dot.scss +115 -0
- package/src/components/_drawer.scss +200 -0
- package/src/components/_dropdown.scss +182 -0
- package/src/components/_empty-state.scss +146 -0
- package/src/components/_field-group.scss +68 -0
- package/src/components/_field-message.scss +75 -0
- package/src/components/_field.scss +127 -0
- package/src/components/_form-actions.scss +58 -0
- package/src/components/_info-row.scss +69 -0
- package/src/components/_input-group.scss +87 -0
- package/src/components/_input.scss +278 -0
- package/src/components/_list.scss +76 -0
- package/src/components/_modal.scss +168 -0
- package/src/components/_page-header.scss +85 -0
- package/src/components/_pagination.scss +138 -0
- package/src/components/_panel.scss +69 -0
- package/src/components/_popover.scss +154 -0
- package/src/components/_progress-circle.scss +123 -0
- package/src/components/_progress.scss +122 -0
- package/src/components/_radio.scss +162 -0
- package/src/components/_segmented.scss +183 -0
- package/src/components/_select.scss +154 -0
- package/src/components/_sidebar.scss +300 -0
- package/src/components/_skeleton.scss +90 -0
- package/src/components/_spinner.scss +84 -0
- package/src/components/_stat.scss +92 -0
- package/src/components/_table.scss +460 -0
- package/src/components/_tabs.scss +327 -0
- package/src/components/_tag.scss +143 -0
- package/src/components/_text.scss +42 -0
- package/src/components/_textarea.scss +57 -0
- package/src/components/_timeline.scss +196 -0
- package/src/components/_title.scss +41 -0
- package/src/components/_toast.scss +221 -0
- package/src/components/_toggle.scss +171 -0
- package/src/components/_toolbar.scss +74 -0
- package/src/components/_topbar.scss +204 -0
- package/src/entries/accordion.scss +4 -0
- package/src/entries/alert.scss +4 -0
- package/src/entries/autocomplete.scss +4 -0
- package/src/entries/avatar-group.scss +4 -0
- package/src/entries/avatar.scss +4 -0
- package/src/entries/badge.scss +4 -0
- package/src/entries/breadcrumb.scss +4 -0
- package/src/entries/btn-group.scss +4 -0
- package/src/entries/button.scss +4 -0
- package/src/entries/card.scss +4 -0
- package/src/entries/checkbox.scss +4 -0
- package/src/entries/code-block.scss +4 -0
- package/src/entries/confirm-modal.scss +4 -0
- package/src/entries/data-table.scss +4 -0
- package/src/entries/desc-list.scss +4 -0
- package/src/entries/divider.scss +4 -0
- package/src/entries/dot.scss +4 -0
- package/src/entries/drawer.scss +4 -0
- package/src/entries/dropdown.scss +4 -0
- package/src/entries/empty-state.scss +4 -0
- package/src/entries/field-group.scss +4 -0
- package/src/entries/field-message.scss +4 -0
- package/src/entries/field.scss +4 -0
- package/src/entries/form-actions.scss +4 -0
- package/src/entries/info-row.scss +4 -0
- package/src/entries/input-group.scss +4 -0
- package/src/entries/input.scss +4 -0
- package/src/entries/list.scss +4 -0
- package/src/entries/modal.scss +4 -0
- package/src/entries/page-header.scss +4 -0
- package/src/entries/pagination.scss +4 -0
- package/src/entries/panel.scss +4 -0
- package/src/entries/popover.scss +4 -0
- package/src/entries/progress-circle.scss +4 -0
- package/src/entries/progress.scss +4 -0
- package/src/entries/radio.scss +4 -0
- package/src/entries/segmented.scss +4 -0
- package/src/entries/select.scss +4 -0
- package/src/entries/sidebar.scss +4 -0
- package/src/entries/skeleton.scss +4 -0
- package/src/entries/spinner.scss +4 -0
- package/src/entries/stat.scss +4 -0
- package/src/entries/table.scss +4 -0
- package/src/entries/tabs.scss +4 -0
- package/src/entries/tag.scss +4 -0
- package/src/entries/text.scss +4 -0
- package/src/entries/textarea.scss +4 -0
- package/src/entries/timeline.scss +4 -0
- package/src/entries/title.scss +4 -0
- package/src/entries/toast.scss +4 -0
- package/src/entries/toggle.scss +4 -0
- package/src/entries/toolbar.scss +4 -0
- package/src/entries/topbar.scss +4 -0
- package/src/index.scss +7 -0
- package/src/js/autocomplete.js +86 -0
- package/src/js/data-table.js +141 -0
- package/src/js/index.js +34 -0
- package/src/js/input-clear.js +25 -0
- package/src/js/package.json +3 -0
- package/src/js/tabs.js +73 -0
- package/src/js/toast.js +161 -0
- 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
|
+
})();
|