kempo-ui 0.3.10 → 0.3.12
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/dist/components/Aside.js +41 -19
- package/dist/components/Dropdown.js +2 -2
- package/dist/components/HtmlEditor.js +15 -15
- package/docs/components/dropdown.html +24 -0
- package/docs/src/components/Aside.js +41 -19
- package/docs/src/components/Dropdown.js +2 -2
- package/docs/src/components/HtmlEditor.js +15 -15
- package/docs-src/.config.js +10 -0
- package/docs-src/components/dropdown.page.html +24 -0
- package/package.json +1 -1
- package/src/components/Aside.js +53 -20
- package/src/components/Dropdown.js +19 -1
- package/src/components/HtmlEditor.js +24 -29
- package/tests/components/Aside.browser-test.js +141 -0
- package/tests/components/Dropdown.browser-test.js +61 -0
|
@@ -814,6 +814,147 @@ export default {
|
|
|
814
814
|
pass('Clicking collapsed menu expands aside');
|
|
815
815
|
},
|
|
816
816
|
|
|
817
|
+
'AsideMenu: clicking collapsed menu should also set open to true': async ({pass, fail}) => {
|
|
818
|
+
const aside = await createAside({ main: 'push', state: 'collapsed' });
|
|
819
|
+
const menu = document.createElement('k-aside-menu');
|
|
820
|
+
menu.icon = 'folder';
|
|
821
|
+
menu.label = 'Projects';
|
|
822
|
+
aside.appendChild(menu);
|
|
823
|
+
await menu.updateComplete;
|
|
824
|
+
const btn = menu.shadowRoot.querySelector('button');
|
|
825
|
+
btn.click();
|
|
826
|
+
await menu.updateComplete;
|
|
827
|
+
if(!menu.open) {
|
|
828
|
+
cleanup(aside);
|
|
829
|
+
return fail('Menu open should be true after clicking collapsed trigger');
|
|
830
|
+
}
|
|
831
|
+
cleanup(aside);
|
|
832
|
+
pass('Clicking collapsed trigger sets menu open to true');
|
|
833
|
+
},
|
|
834
|
+
|
|
835
|
+
'AsideMenu: collapsed state should render k-dropdown': async ({pass, fail}) => {
|
|
836
|
+
const aside = await createAside({ main: 'push', state: 'collapsed' });
|
|
837
|
+
const menu = document.createElement('k-aside-menu');
|
|
838
|
+
menu.icon = 'folder';
|
|
839
|
+
menu.label = 'Projects';
|
|
840
|
+
aside.appendChild(menu);
|
|
841
|
+
await menu.updateComplete;
|
|
842
|
+
const dropdown = menu.shadowRoot.querySelector('k-dropdown');
|
|
843
|
+
if(!dropdown) {
|
|
844
|
+
cleanup(aside);
|
|
845
|
+
return fail('Collapsed menu should render k-dropdown');
|
|
846
|
+
}
|
|
847
|
+
cleanup(aside);
|
|
848
|
+
pass('Collapsed menu renders k-dropdown');
|
|
849
|
+
},
|
|
850
|
+
|
|
851
|
+
'AsideMenu: collapsed k-dropdown should have hover attribute': async ({pass, fail}) => {
|
|
852
|
+
const aside = await createAside({ main: 'push', state: 'collapsed' });
|
|
853
|
+
const menu = document.createElement('k-aside-menu');
|
|
854
|
+
menu.icon = 'folder';
|
|
855
|
+
menu.label = 'Projects';
|
|
856
|
+
aside.appendChild(menu);
|
|
857
|
+
await menu.updateComplete;
|
|
858
|
+
const dropdown = menu.shadowRoot.querySelector('k-dropdown');
|
|
859
|
+
if(!dropdown || !dropdown.hasAttribute('hover')) {
|
|
860
|
+
cleanup(aside);
|
|
861
|
+
return fail('Collapsed k-dropdown should have hover attribute');
|
|
862
|
+
}
|
|
863
|
+
cleanup(aside);
|
|
864
|
+
pass('Collapsed k-dropdown has hover attribute');
|
|
865
|
+
},
|
|
866
|
+
|
|
867
|
+
'AsideMenu: collapsed k-dropdown open-direction should be right down for left aside': async ({pass, fail}) => {
|
|
868
|
+
const aside = await createAside({ main: 'push', state: 'collapsed', side: 'left' });
|
|
869
|
+
const menu = document.createElement('k-aside-menu');
|
|
870
|
+
menu.icon = 'folder';
|
|
871
|
+
aside.appendChild(menu);
|
|
872
|
+
await menu.updateComplete;
|
|
873
|
+
const dropdown = menu.shadowRoot.querySelector('k-dropdown');
|
|
874
|
+
if(!dropdown || dropdown.getAttribute('open-direction') !== 'right down') {
|
|
875
|
+
cleanup(aside);
|
|
876
|
+
return fail(`Expected open-direction "right down", got "${dropdown?.getAttribute('open-direction')}"`);
|
|
877
|
+
}
|
|
878
|
+
cleanup(aside);
|
|
879
|
+
pass('Left aside collapsed menu opens right down');
|
|
880
|
+
},
|
|
881
|
+
|
|
882
|
+
'AsideMenu: collapsed k-dropdown open-direction should be left down for right aside': async ({pass, fail}) => {
|
|
883
|
+
const aside = await createAside({ main: 'push', state: 'collapsed', side: 'right' });
|
|
884
|
+
const menu = document.createElement('k-aside-menu');
|
|
885
|
+
menu.icon = 'folder';
|
|
886
|
+
aside.appendChild(menu);
|
|
887
|
+
await menu.updateComplete;
|
|
888
|
+
const dropdown = menu.shadowRoot.querySelector('k-dropdown');
|
|
889
|
+
if(!dropdown || dropdown.getAttribute('open-direction') !== 'left down') {
|
|
890
|
+
cleanup(aside);
|
|
891
|
+
return fail(`Expected open-direction "left down", got "${dropdown?.getAttribute('open-direction')}"`);
|
|
892
|
+
}
|
|
893
|
+
cleanup(aside);
|
|
894
|
+
pass('Right aside collapsed menu opens left down');
|
|
895
|
+
},
|
|
896
|
+
|
|
897
|
+
'AsideMenu: should not render k-dropdown when expanded': async ({pass, fail}) => {
|
|
898
|
+
const aside = await createAside({ main: 'push', state: 'expanded' });
|
|
899
|
+
const menu = document.createElement('k-aside-menu');
|
|
900
|
+
menu.icon = 'folder';
|
|
901
|
+
menu.label = 'Projects';
|
|
902
|
+
aside.appendChild(menu);
|
|
903
|
+
await menu.updateComplete;
|
|
904
|
+
const dropdown = menu.shadowRoot.querySelector('k-dropdown');
|
|
905
|
+
if(dropdown) {
|
|
906
|
+
cleanup(aside);
|
|
907
|
+
return fail('Expanded menu should not render k-dropdown');
|
|
908
|
+
}
|
|
909
|
+
cleanup(aside);
|
|
910
|
+
pass('Expanded menu does not render k-dropdown');
|
|
911
|
+
},
|
|
912
|
+
|
|
913
|
+
'AsideItem: inside AsideMenu should not sync collapsed state from aside': async ({pass, fail}) => {
|
|
914
|
+
const aside = await createAside({ main: 'push', state: 'expanded' });
|
|
915
|
+
const menu = document.createElement('k-aside-menu');
|
|
916
|
+
menu.icon = 'folder';
|
|
917
|
+
menu.label = 'Projects';
|
|
918
|
+
const item = document.createElement('k-aside-item');
|
|
919
|
+
item.icon = 'cards';
|
|
920
|
+
item.textContent = 'Dashboard';
|
|
921
|
+
menu.appendChild(item);
|
|
922
|
+
aside.appendChild(menu);
|
|
923
|
+
await item.updateComplete;
|
|
924
|
+
aside.collapse();
|
|
925
|
+
await aside.updateComplete;
|
|
926
|
+
await item.updateComplete;
|
|
927
|
+
if(item.collapsed) {
|
|
928
|
+
cleanup(aside);
|
|
929
|
+
return fail('AsideItem inside AsideMenu should not become collapsed');
|
|
930
|
+
}
|
|
931
|
+
cleanup(aside);
|
|
932
|
+
pass('AsideItem inside AsideMenu ignores aside collapsed state');
|
|
933
|
+
},
|
|
934
|
+
|
|
935
|
+
'AsideItem: inside AsideMenu should render label (not dot) when aside is collapsed': async ({pass, fail}) => {
|
|
936
|
+
const aside = await createAside({ main: 'push', state: 'expanded' });
|
|
937
|
+
const menu = document.createElement('k-aside-menu');
|
|
938
|
+
menu.icon = 'folder';
|
|
939
|
+
menu.label = 'Projects';
|
|
940
|
+
const item = document.createElement('k-aside-item');
|
|
941
|
+
item.icon = 'cards';
|
|
942
|
+
item.textContent = 'Dashboard';
|
|
943
|
+
menu.appendChild(item);
|
|
944
|
+
aside.appendChild(menu);
|
|
945
|
+
await item.updateComplete;
|
|
946
|
+
aside.collapse();
|
|
947
|
+
await aside.updateComplete;
|
|
948
|
+
await item.updateComplete;
|
|
949
|
+
const label = item.shadowRoot.querySelector('.label');
|
|
950
|
+
if(!label) {
|
|
951
|
+
cleanup(aside);
|
|
952
|
+
return fail('AsideItem inside AsideMenu should still render label when aside is collapsed');
|
|
953
|
+
}
|
|
954
|
+
cleanup(aside);
|
|
955
|
+
pass('AsideItem inside AsideMenu renders label regardless of aside state');
|
|
956
|
+
},
|
|
957
|
+
|
|
817
958
|
/*
|
|
818
959
|
AsideSpacer
|
|
819
960
|
*/
|
|
@@ -8,6 +8,7 @@ const createDropdown = async (options = {}) => {
|
|
|
8
8
|
${options.opened ? 'opened' : ''}
|
|
9
9
|
${options.closeOnSelect === false ? 'close-on-select="false"' : ''}
|
|
10
10
|
${options.closeOnClickOutside === false ? 'close-on-click-outside="false"' : ''}
|
|
11
|
+
${options.hover ? 'hover' : ''}
|
|
11
12
|
>
|
|
12
13
|
<button slot="trigger">Trigger</button>
|
|
13
14
|
<button data-value="item1">Item 1</button>
|
|
@@ -661,5 +662,65 @@ export default {
|
|
|
661
662
|
}
|
|
662
663
|
cleanup(container);
|
|
663
664
|
pass('Dropdown does not inflate in pre-wrap context');
|
|
665
|
+
},
|
|
666
|
+
|
|
667
|
+
/*
|
|
668
|
+
Hover Mode
|
|
669
|
+
*/
|
|
670
|
+
'hover should be false by default': async ({pass, fail}) => {
|
|
671
|
+
const { container, dropdown } = await createDropdown();
|
|
672
|
+
if(dropdown.hover !== false) {
|
|
673
|
+
cleanup(container);
|
|
674
|
+
return fail(`Expected hover to be false, got ${dropdown.hover}`);
|
|
675
|
+
}
|
|
676
|
+
cleanup(container);
|
|
677
|
+
pass('hover is false by default');
|
|
678
|
+
},
|
|
679
|
+
|
|
680
|
+
'hover attribute should reflect': async ({pass, fail}) => {
|
|
681
|
+
const { container, dropdown } = await createDropdown({ hover: true });
|
|
682
|
+
if(!dropdown.hasAttribute('hover')) {
|
|
683
|
+
cleanup(container);
|
|
684
|
+
return fail('hover attribute should be reflected');
|
|
685
|
+
}
|
|
686
|
+
cleanup(container);
|
|
687
|
+
pass('hover attribute reflects correctly');
|
|
688
|
+
},
|
|
689
|
+
|
|
690
|
+
'should open on mouseenter when hover is true': async ({pass, fail}) => {
|
|
691
|
+
const { container, dropdown } = await createDropdown({ hover: true });
|
|
692
|
+
dropdown.dispatchEvent(new MouseEvent('mouseenter', { bubbles: true }));
|
|
693
|
+
await dropdown.updateComplete;
|
|
694
|
+
if(!dropdown.opened) {
|
|
695
|
+
cleanup(container);
|
|
696
|
+
return fail('Dropdown should open on mouseenter in hover mode');
|
|
697
|
+
}
|
|
698
|
+
cleanup(container);
|
|
699
|
+
pass('Dropdown opens on mouseenter in hover mode');
|
|
700
|
+
},
|
|
701
|
+
|
|
702
|
+
'should close on mouseleave when hover is true': async ({pass, fail}) => {
|
|
703
|
+
const { container, dropdown } = await createDropdown({ hover: true, opened: true });
|
|
704
|
+
dropdown.dispatchEvent(new MouseEvent('mouseleave', { bubbles: true }));
|
|
705
|
+
await new Promise(r => setTimeout(r, 200));
|
|
706
|
+
if(dropdown.opened) {
|
|
707
|
+
cleanup(container);
|
|
708
|
+
return fail('Dropdown should close after mouseleave in hover mode');
|
|
709
|
+
}
|
|
710
|
+
cleanup(container);
|
|
711
|
+
pass('Dropdown closes on mouseleave in hover mode');
|
|
712
|
+
},
|
|
713
|
+
|
|
714
|
+
'trigger click should not toggle in hover mode': async ({pass, fail}) => {
|
|
715
|
+
const { container, dropdown } = await createDropdown({ hover: true });
|
|
716
|
+
const trigger = dropdown.querySelector('[slot="trigger"]');
|
|
717
|
+
trigger.click();
|
|
718
|
+
await dropdown.updateComplete;
|
|
719
|
+
if(dropdown.opened) {
|
|
720
|
+
cleanup(container);
|
|
721
|
+
return fail('Trigger click should not open dropdown in hover mode');
|
|
722
|
+
}
|
|
723
|
+
cleanup(container);
|
|
724
|
+
pass('Trigger click does not toggle in hover mode');
|
|
664
725
|
}
|
|
665
726
|
};
|