@api-client/ui 0.5.24 → 0.5.26
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/.cursor/rules/lit-best-practices.mdc +12 -1
- package/.github/instructions/lit-best-practices.instructions.md +2 -0
- package/build/src/elements/navigation/internals/AppNavigationElement.d.ts.map +1 -1
- package/build/src/elements/navigation/internals/AppNavigationElement.js +1 -6
- package/build/src/elements/navigation/internals/AppNavigationElement.js.map +1 -1
- package/build/src/elements/navigation/internals/NavigationItem.d.ts +6 -0
- package/build/src/elements/navigation/internals/NavigationItem.d.ts.map +1 -1
- package/build/src/elements/navigation/internals/NavigationItem.js +26 -7
- package/build/src/elements/navigation/internals/NavigationItem.js.map +1 -1
- package/build/src/elements/navigation/internals/NavigationItem.styles.d.ts.map +1 -1
- package/build/src/elements/navigation/internals/NavigationItem.styles.js +18 -1
- package/build/src/elements/navigation/internals/NavigationItem.styles.js.map +1 -1
- package/build/src/md/dropdown-list/internals/UiDropdownList.d.ts.map +1 -1
- package/build/src/md/dropdown-list/internals/UiDropdownList.js +4 -3
- package/build/src/md/dropdown-list/internals/UiDropdownList.js.map +1 -1
- package/build/src/md/input/Input.d.ts +8 -4
- package/build/src/md/input/Input.d.ts.map +1 -1
- package/build/src/md/input/Input.js +8 -36
- package/build/src/md/input/Input.js.map +1 -1
- package/build/src/md/list/internals/List.d.ts +3 -1
- package/build/src/md/list/internals/List.d.ts.map +1 -1
- package/build/src/md/list/internals/List.js +9 -4
- package/build/src/md/list/internals/List.js.map +1 -1
- package/build/src/md/menu/internal/Menu.d.ts +8 -7
- package/build/src/md/menu/internal/Menu.d.ts.map +1 -1
- package/build/src/md/menu/internal/Menu.js +26 -29
- package/build/src/md/menu/internal/Menu.js.map +1 -1
- package/build/src/md/select/index.d.ts +4 -0
- package/build/src/md/select/index.d.ts.map +1 -0
- package/build/src/md/select/index.js +3 -0
- package/build/src/md/select/index.js.map +1 -0
- package/build/src/md/select/internals/Option.d.ts +125 -0
- package/build/src/md/select/internals/Option.d.ts.map +1 -0
- package/build/src/md/select/internals/Option.js +242 -0
- package/build/src/md/select/internals/Option.js.map +1 -0
- package/build/src/md/select/internals/Option.styles.d.ts +3 -0
- package/build/src/md/select/internals/Option.styles.d.ts.map +1 -0
- package/build/src/md/select/internals/Option.styles.js +139 -0
- package/build/src/md/select/internals/Option.styles.js.map +1 -0
- package/build/src/md/select/internals/Select.d.ts +250 -0
- package/build/src/md/select/internals/Select.d.ts.map +1 -0
- package/build/src/md/select/internals/Select.js +606 -0
- package/build/src/md/select/internals/Select.js.map +1 -0
- package/build/src/md/select/internals/Select.styles.d.ts +3 -0
- package/build/src/md/select/internals/Select.styles.d.ts.map +1 -0
- package/build/src/md/select/internals/Select.styles.js +22 -0
- package/build/src/md/select/internals/Select.styles.js.map +1 -0
- package/build/src/md/select/ui-option.d.ts +12 -0
- package/build/src/md/select/ui-option.d.ts.map +1 -0
- package/build/src/md/select/ui-option.js +29 -0
- package/build/src/md/select/ui-option.js.map +1 -0
- package/build/src/md/select/ui-select.d.ts +12 -0
- package/build/src/md/select/ui-select.d.ts.map +1 -0
- package/build/src/md/select/ui-select.js +27 -0
- package/build/src/md/select/ui-select.js.map +1 -0
- package/build/src/md/text-field/internals/TextField.d.ts.map +1 -1
- package/build/src/md/text-field/internals/TextField.js +1 -0
- package/build/src/md/text-field/internals/TextField.js.map +1 -1
- package/demo/elements/index.html +7 -4
- package/demo/elements/navigation/navigation-item.html +45 -0
- package/demo/elements/navigation/navigation-item.ts +112 -0
- package/demo/md/index.html +2 -0
- package/demo/md/inputs/input.ts +4 -0
- package/demo/md/select/index.html +16 -0
- package/demo/md/select/index.ts +202 -0
- package/package.json +1 -1
- package/src/elements/navigation/internals/AppNavigationElement.ts +1 -6
- package/src/elements/navigation/internals/NavigationItem.styles.ts +18 -1
- package/src/elements/navigation/internals/NavigationItem.ts +11 -5
- package/src/md/dropdown-list/internals/UiDropdownList.ts +4 -3
- package/src/md/input/Input.ts +8 -37
- package/src/md/list/internals/List.ts +12 -5
- package/src/md/menu/internal/Menu.ts +27 -18
- package/src/md/select/index.ts +3 -0
- package/src/md/select/internals/Option.styles.ts +139 -0
- package/src/md/select/internals/Option.ts +210 -0
- package/src/md/select/internals/Select.styles.ts +22 -0
- package/src/md/select/internals/Select.ts +534 -0
- package/src/md/select/ui-option.ts +18 -0
- package/src/md/select/ui-select.ts +17 -0
- package/src/md/text-field/internals/TextField.ts +1 -0
- package/test/md/menu/SubMenu.test.ts +2 -3
- package/test/md/select/Select.test.ts +667 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"List.js","sourceRoot":"","sources":["../../../../../src/md/list/internals/List.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAkC,MAAM,KAAK,CAAA;AACtE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAGnE,MAAM,eAAe,GAAG;IACtB,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;CACX,CAAA;AAED,MAAM,eAAe,GAAG;IACtB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,GAAG;CACX,CAAA;;sBAiBmC,UAAU;;;;;;;;;;iBAAzB,MAAO,SAAQ,WAAU;;;oCAe3C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCAM1B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;4CAE3B,qBAAqB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YARb,6KAAS,QAAQ,6BAAR,QAAQ,2FAAQ;YAMxB,yLAAS,YAAY,6BAAZ,YAAY,mGAAqB;YAE7B,qMAAmB,gBAAgB,6BAAhB,gBAAgB,2GAAgB;;;QAnB7F,0BAA+B,EAAE,CAAA;QAHjC;;WAEG;QACH,IAAS,KAAK,2CAAmB;QAAjC,IAAS,KAAK,iDAAmB;QAEjC,cAAc,GAAsB,IAAI,CAAA;QAExC,iBAAiB,GAAsB,IAAI,CAAA;QAOf,qFAAyB;QALrD;;;;WAIG;QACyB,IAAS,QAAQ,8CAAQ;QAAzB,IAAS,QAAQ,oDAAQ;QAMxB,qJAA0C;QAJvE;;;WAGG;QAC0B,IAAS,YAAY,kDAAqB;QAA1C,IAAS,YAAY,wDAAqB;QAE7B,iKAAmD;QAAnD,IAAmB,gBAAgB,sDAAgB;QAAnD,IAAmB,gBAAgB,4DAAgB;QAE7F;YACE,KAAK,EAAE,CAAA;;YACP,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAA;YAC9B,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YAC/D,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;SAC5D;QAEQ,iBAAiB;YACxB,KAAK,CAAC,iBAAiB,EAAE,CAAA;YACzB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;YACpC,CAAC;QACH,CAAC;QAEQ,KAAK,CAAC,OAAsB;YACnC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAA;YAC/B,IAAI,cAAc,EAAE,CAAC;gBACnB,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gBAC7B,OAAM;YACR,CAAC;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAA;QAC1B,CAAC;QAEQ,YAAY,CAAC,iBAAiC;YACrD,KAAK,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAA;YAErC,IAAI,CAAC,WAAW,EAAE,CAAA;QACpB,CAAC;QAED,iBAAiB;YACf,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;YACzC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAA;QACjC,CAAC;QAED,gBAAgB;YACd,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;YACxC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAA;QACjC,CAAC;QAED,mBAAmB;YACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;YAC1B,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QACpC,CAAC;QAES,WAAW;YACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAA;YAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;YACpD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;YAClB,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;gBAChE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;YAC5B,CAAC;YACD,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACtE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;YAC/B,CAAC;YACD,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAoB,aAAa,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1G,CAAA;QACH,CAAC;QAED;;WAEG;QACO,UAAU,CAAC,OAAgB;YACnC,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC3C,OAAO,KAAK,CAAA;YACd,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvC,CAAC;QAED,YAAY;YACV,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACtB,CAAC;QAED,WAAW;YACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAC1C,CAAC;QAED,eAAe,CAAC,IAAgB;YAC9B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAA;YACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACpC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,CAAC,GAAG,QAAQ,CAAA;YAChB,IAAI,MAA+B,CAAA;YACnC,GAAG,CAAC;gBACF,CAAC,EAAE,CAAA;gBACH,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACnB,uDAAuD;oBACvD,OAAO,IAAI,CAAA;gBACb,CAAC;gBACD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;gBACpB,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,CAAC,GAAG,KAAK,CAAC,MAAM,CAAA;oBAChB,SAAQ;gBACV,CAAC;gBACD,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3B,MAAM,GAAG,GAAG,CAAA;gBACd,CAAC;YACH,CAAC,QAAQ,CAAC,MAAM,EAAC;YACjB,OAAQ,MAAqB,IAAI,IAAI,CAAA;QACvC,CAAC;QAED,WAAW,CAAC,IAAgB;YAC1B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAA;YACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACpC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,CAAC,GAAG,QAAQ,CAAA;YAChB,IAAI,IAA6B,CAAA;YACjC,GAAG,CAAC;gBACF,CAAC,EAAE,CAAA;gBACH,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACnB,yDAAyD;oBACzD,OAAO,IAAI,CAAA;gBACb,CAAC;gBACD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;gBACpB,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,CAAC,GAAG,CAAC,CAAC,CAAA;oBACN,SAAQ;gBACV,CAAC;gBACD,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3B,IAAI,GAAG,GAAG,CAAA;gBACZ,CAAC;YACH,CAAC,QAAQ,CAAC,IAAI,EAAC;YACf,OAAQ,IAAmB,IAAI,IAAI,CAAA;QACrC,CAAC;QAES,YAAY,CAAC,OAAoB;YACzC,IAAK,OAA4C,CAAC,QAAQ,EAAE,CAAC;gBAC3D,OAAO,KAAK,CAAA;YACd,CAAC;YACD,IAAI,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;gBACrC,OAAO,KAAK,CAAA;YACd,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrD,OAAO,KAAK,CAAA;YACd,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAES,gBAAgB,CAAC,IAAgB;YACzC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;QACxB,CAAC;QAES,kBAAkB,CAAC,IAAgB;YAC3C,IAAI,CAAC,UAAU,EAAE,CAAA;QACnB,CAAC;QAES,gBAAgB,CAAC,IAAwB;YACjD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAM;YACR,CAAC;YACD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;YAChC,IAAI,CAAC,QAAQ,EAAE,CAAA;YACf,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;QAClF,CAAC;QAED,aAAa,CAAC,KAAoB;YAChC,IAAI,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAA;gBAC7B,OAAM;YACR,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAAE,OAAM;YAEpE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;gBAC5B,CAAC;gBAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;YAC/B,CAAC;YAED,IAAI,KAAK,CAAC,GAAG,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;gBAC5C,KAAK,CAAC,cAAc,EAAE,CAAA;gBACtB,IAAI,CAAC,YAAY,EAAE,CAAA;YACrB,CAAC;YAED,IAAI,KAAK,CAAC,GAAG,KAAK,eAAe,CAAC,OAAO,EAAE,CAAC;gBAC1C,KAAK,CAAC,cAAc,EAAE,CAAA;gBACtB,IAAI,CAAC,gBAAgB,EAAE,CAAA;YACzB,CAAC;YAED,IAAI,KAAK,CAAC,GAAG,KAAK,eAAe,CAAC,IAAI,EAAE,CAAC;gBACvC,KAAK,CAAC,cAAc,EAAE,CAAA;gBACtB,IAAI,CAAC,aAAa,EAAE,CAAA;YACtB,CAAC;YAED,IAAI,KAAK,CAAC,GAAG,KAAK,eAAe,CAAC,GAAG,EAAE,CAAC;gBACtC,KAAK,CAAC,cAAc,EAAE,CAAA;gBACtB,IAAI,CAAC,YAAY,EAAE,CAAA;YACrB,CAAC;QACH,CAAC;QAED,aAAa;YACX,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;YACzC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;QAED,YAAY;YACV,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;YACxC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;QAED,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc;YACrC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAA;YACzE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;QAED,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc;YACzC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;YAC5E,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;QAED;;;;WAIG;QACH,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAA;YAChE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QAC1B,CAAC;QAED;;;;WAIG;QACH,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB;YAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;YACvE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC9B,CAAC;QAED,cAAc;YACZ,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;YAChC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QAC1B,CAAC;QAED,aAAa;YACX,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;YAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QAC1B,CAAC;QAED,WAAW,CAAC,KAAiB;YAC3B,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAA;QAC/B,CAAC;QAES,aAAa,CAAC,IAAwB;YAC9C,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;YACtD,CAAC;YACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,IAAI,IAAI,CAAA;YACrC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;gBACjD,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;YAC5E,CAAC;QACH,CAAC;QAED;;;WAGG;QACO,iBAAiB,CAAC,CAAQ;YAClC,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,CAAA;YAC7B,IAAI,IAA4B,CAAA;YAChC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACb,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAa,CAAA;gBACpC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAClB,MAAK;gBACP,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvD,SAAQ;gBACV,CAAC;gBACD,IAAI,GAAG,IAAkB,CAAA;YAC3B,CAAC;YACD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAM;YACR,CAAC;YACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;YAC1B,IAAI,CAAC,QAAQ,EAAE,CAAA;YACf,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;YAC1B,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,CAAC,CAAC,cAAc,EAAE,CAAA;YACpB,CAAC;QACH,CAAC;QAED;;;WAGG;QACH,YAAY,CAAC,IAAgB,EAAE,KAAc;YAC3C,MAAM,aAAa,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACvD,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAA;YACd,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,WAAW,CAAkB,QAAQ,EAAE;gBACvD,UAAU,EAAE,IAAI;gBAChB,MAAM,EAAE;oBACN,IAAI;oBACJ,KAAK,EAAE,aAAa;iBACrB;aACF,CAAC,CAAA;YACF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;YACzB,OAAO,KAAK,CAAC,gBAAgB,CAAA;QAC/B,CAAC;QAES,eAAe,CAAC,IAAgB;YACxC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACvB,OAAM;YACR,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAA;YACtB,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC9D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC9B,CAAC;QAEQ,MAAM;YACb,OAAO,IAAI,CAAA,sBAAsB,IAAI,CAAC,WAAW,WAAW,CAAA;QAC9D,CAAC;;;AAtWH;;;;;GAKG;AACH,sBAiWC","sourcesContent":["import { html, LitElement, PropertyValues, TemplateResult } from 'lit'\nimport { property, queryAssignedElements } from 'lit/decorators.js'\nimport UiListItem from './ListItem.js'\n\nconst NAVIGATION_KEYS = {\n ArrowDown: 'ArrowDown',\n ArrowUp: 'ArrowUp',\n Home: 'Home',\n End: 'End',\n}\n\nconst ACTIVATION_KEYS = {\n Enter: 'Enter',\n Space: ' ',\n}\n\nexport interface UiListSelection {\n item: HTMLElement\n index: number\n}\n\nexport interface UiListItemsChange {\n items: UiListItem[]\n}\n\n/**\n * @fires select - Dispatched when the user click or press `Enter` or `Space` on any active list item.\n * The `event.detail` object contains the `item` and `index` properties.\n * @fires itemschange - Dispatched when the list items change, e.g. when the slot changes.\n * The `event.detail` object contains the `items` property with the list of items.\n */\nexport default class UiList extends LitElement {\n /**\n * The computed list of list items to render.\n */\n accessor items: UiListItem[] = []\n\n activeListItem: UiListItem | null = null\n\n highlightListItem: UiListItem | null = null\n\n /**\n * The CSS selector that is used to recognize which items are\n * active list items (can be selected, focused, etc.)\n * @attribute\n */\n @property({ type: String }) accessor selector: string\n\n /**\n * When set it marks last activated list item as selected.\n * @attribute\n */\n @property({ type: Boolean }) accessor selectActive: boolean | undefined\n\n @queryAssignedElements({ flatten: true }) protected accessor assignedElements!: HTMLElement[]\n\n constructor() {\n super()\n this.selector = 'ui-list-item'\n this.addEventListener('keydown', this.handleKeydown.bind(this))\n this.addEventListener('click', this.handleClick.bind(this))\n }\n\n override connectedCallback(): void {\n super.connectedCallback()\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n }\n\n override focus(options?: FocusOptions): void {\n const { activeListItem } = this\n if (activeListItem) {\n activeListItem.focus(options)\n return\n }\n this.activateFirstItem()\n }\n\n override firstUpdated(changedProperties: PropertyValues): void {\n super.firstUpdated(changedProperties)\n\n this.updateItems()\n }\n\n activateFirstItem(): void {\n this.activeListItem = this.getFirstItem()\n this.activeListItem?.activate()\n }\n\n activateLastItem(): void {\n this.activeListItem = this.getLastItem()\n this.activeListItem?.activate()\n }\n\n resetActiveListItem(): void {\n this.activeListItem = null\n this.setAttribute('tabindex', '0')\n }\n\n protected updateItems(): void {\n const elements = this.assignedElements || []\n const items = elements.filter(this.isListItem, this)\n this.items = items\n if (this.activeListItem && !items.includes(this.activeListItem)) {\n this.activeListItem = null\n }\n if (this.highlightListItem && !items.includes(this.highlightListItem)) {\n this.highlightListItem = null\n }\n this.dispatchEvent(\n new CustomEvent<UiListItemsChange>('itemschange', { bubbles: false, composed: false, detail: { items } })\n )\n }\n\n /**\n * @return Whether the given element is a list item element.\n */\n protected isListItem(element: Element): element is UiListItem {\n if (element.nodeType !== Node.ELEMENT_NODE) {\n return false\n }\n return element.matches(this.selector)\n }\n\n getFirstItem(): UiListItem {\n return this.items[0]\n }\n\n getLastItem(): UiListItem {\n return this.items[this.items.length - 1]\n }\n\n getPreviousItem(item: UiListItem): UiListItem {\n const { items } = this\n const curIndex = items.indexOf(item)\n if (curIndex < 0) {\n return item\n }\n let i = curIndex\n let result: HTMLElement | undefined\n do {\n i--\n if (i === curIndex) {\n // looped back from the end, no active element to find.\n return item\n }\n const tmp = items[i]\n if (!tmp) {\n i = items.length\n continue\n }\n if (this.isSelectable(tmp)) {\n result = tmp\n }\n } while (!result)\n return (result as UiListItem) || item\n }\n\n getNextItem(item: UiListItem): UiListItem {\n const { items } = this\n const curIndex = items.indexOf(item)\n if (curIndex < 0) {\n return item\n }\n let i = curIndex\n let next: HTMLElement | undefined\n do {\n i++\n if (i === curIndex) {\n // looped back from the start, no active element to find.\n return item\n }\n const tmp = items[i]\n if (!tmp) {\n i = -1\n continue\n }\n if (this.isSelectable(tmp)) {\n next = tmp\n }\n } while (!next)\n return (next as UiListItem) || item\n }\n\n protected isSelectable(element: HTMLElement): boolean {\n if ((element as unknown as { disabled: boolean }).disabled) {\n return false\n }\n if (element.hasAttribute('disabled')) {\n return false\n }\n if (element.hidden && element.hasAttribute('hidden')) {\n return false\n }\n return true\n }\n\n protected isListItemActive(item: UiListItem): boolean {\n return item.isActive()\n }\n\n protected deactivateListItem(item: UiListItem): void {\n item.deactivate()\n }\n\n protected activateListItem(item?: UiListItem | null): void {\n if (!item) {\n return\n }\n this.removeAttribute('tabindex')\n item.activate()\n item.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior: 'smooth' })\n }\n\n handleKeydown(event: KeyboardEvent): void {\n if (Object.values(ACTIVATION_KEYS).includes(event.key)) {\n this.activateFromEvent(event)\n return\n }\n if (Object.values(NAVIGATION_KEYS).indexOf(event.key) === -1) return\n\n for (const item of this.items) {\n if (this.isListItemActive(item)) {\n this.activeListItem = item\n }\n\n this.deactivateListItem(item)\n }\n\n if (event.key === NAVIGATION_KEYS.ArrowDown) {\n event.preventDefault()\n this.activateNext()\n }\n\n if (event.key === NAVIGATION_KEYS.ArrowUp) {\n event.preventDefault()\n this.activatePrevious()\n }\n\n if (event.key === NAVIGATION_KEYS.Home) {\n event.preventDefault()\n this.activateFirst()\n }\n\n if (event.key === NAVIGATION_KEYS.End) {\n event.preventDefault()\n this.activateLast()\n }\n }\n\n activateFirst(): void {\n this.activeListItem = this.getFirstItem()\n if (this.activeListItem) {\n this.activateListItem(this.activeListItem)\n }\n }\n\n activateLast(): void {\n this.activeListItem = this.getLastItem()\n if (this.activeListItem) {\n this.activateListItem(this.activeListItem)\n }\n }\n\n activateNext(item = this.activeListItem): void {\n this.activeListItem = item ? this.getNextItem(item) : this.getFirstItem()\n if (this.activeListItem) {\n this.activateListItem(this.activeListItem)\n }\n }\n\n activatePrevious(item = this.activeListItem): void {\n this.activeListItem = item ? this.getPreviousItem(item) : this.getLastItem()\n if (this.activeListItem) {\n this.activateListItem(this.activeListItem)\n }\n }\n\n /**\n * Sets `highlight` class on the next item.\n * @param item When not set it highlights the first item. Default to `this.highlightListItem`.\n * Pass `null` to select first item.\n */\n highlightNext(item = this.highlightListItem): void {\n const next = item ? this.getNextItem(item) : this.getFirstItem()\n this.highlightItem(next)\n }\n\n /**\n * Sets `highlight` class on the previous item.\n * @param item When not set it highlights the last item. Default to `this.highlightListItem`.\n * Pass `null` to select last item.\n */\n highlightPrevious(item = this.highlightListItem): void {\n const previous = item ? this.getPreviousItem(item) : this.getLastItem()\n this.highlightItem(previous)\n }\n\n highlightFirst(): void {\n const item = this.getFirstItem()\n this.highlightItem(item)\n }\n\n highlightLast(): void {\n const item = this.getLastItem()\n this.highlightItem(item)\n }\n\n handleClick(event: MouseEvent): void {\n this.activateFromEvent(event)\n }\n\n protected highlightItem(item?: UiListItem | null): void {\n if (this.highlightListItem) {\n this.highlightListItem.classList.remove('highlight')\n }\n this.highlightListItem = item || null\n if (this.highlightListItem) {\n this.highlightListItem.classList.add('highlight')\n this.highlightListItem.scrollIntoView({ block: 'end', inline: 'nearest' })\n }\n }\n\n /**\n * Activates a list item from an Event.\n * Activate means dispatches a non-bubbling CustomEvent with the item in the detail.\n */\n protected activateFromEvent(e: Event): void {\n const path = e.composedPath()\n let item: UiListItem | undefined\n while (!item) {\n const next = path.shift() as Element\n if (next === this) {\n break\n }\n if (!this.isListItem(next) || !this.isSelectable(next)) {\n continue\n }\n item = next as UiListItem\n }\n if (!item) {\n return\n }\n this.manageSelection(item)\n item.activate()\n this.activeListItem = item\n if (this.notifySelect(item)) {\n e.preventDefault()\n }\n }\n\n /**\n * @param item The UiListItem that is selected.\n * @returns True when the event was canceled.\n */\n notifySelect(item: UiListItem, index?: number): boolean {\n const resolvedIndex = index ?? this.items.indexOf(item)\n if (resolvedIndex === -1) {\n return false\n }\n const event = new CustomEvent<UiListSelection>('select', {\n cancelable: true,\n detail: {\n item,\n index: resolvedIndex,\n },\n })\n this.dispatchEvent(event)\n return event.defaultPrevented\n }\n\n protected manageSelection(item: UiListItem): void {\n if (!this.selectActive) {\n return\n }\n const { items } = this\n items.forEach((current) => current.classList.remove('select'))\n item.classList.add('select')\n }\n\n override render(): TemplateResult {\n return html`<slot @slotchange=\"${this.updateItems}\"></slot>`\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"List.js","sourceRoot":"","sources":["../../../../../src/md/list/internals/List.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, PropertyValues, TemplateResult } from 'lit'\nimport { property, queryAssignedElements } from 'lit/decorators.js'\nimport UiListItem from './ListItem.js'\n\nconst NAVIGATION_KEYS = {\n ArrowDown: 'ArrowDown',\n ArrowUp: 'ArrowUp',\n Home: 'Home',\n End: 'End',\n}\n\nconst ACTIVATION_KEYS = {\n Enter: 'Enter',\n Space: ' ',\n}\n\nexport interface UiListSelection {\n item: HTMLElement\n index: number\n}\n\nexport interface UiListItemsChange {\n items: UiListItem[]\n}\n\n/**\n * @fires select - Dispatched when the user click or press `Enter` or `Space` on any active list item.\n * The `event.detail` object contains the `item` and `index` properties.\n * @fires itemschange - Dispatched when the list items change, e.g. when the slot changes.\n * The `event.detail` object contains the `items` property with the list of items.\n * @fires highlightchange - Dispatched when the highlighted item changes.\n * The `event.detail` object contains the `items` property with the list of items.\n */\nexport default class UiList extends LitElement {\n /**\n * The computed list of list items to render.\n */\n accessor items: UiListItem[] = []\n\n activeListItem: UiListItem | null = null\n\n highlightListItem: UiListItem | null = null\n\n /**\n * The CSS selector that is used to recognize which items are\n * active list items (can be selected, focused, etc.)\n * @attribute\n */\n @property({ type: String }) accessor selector: string\n\n /**\n * When set it marks last activated list item as selected.\n * @attribute\n */\n @property({ type: Boolean }) accessor selectActive: boolean | undefined\n\n @queryAssignedElements({ flatten: true }) protected accessor assignedElements!: HTMLElement[]\n\n constructor() {\n super()\n this.selector = 'ui-list-item'\n this.addEventListener('keydown', this.handleKeydown.bind(this))\n this.addEventListener('click', this.handleClick.bind(this))\n }\n\n override connectedCallback(): void {\n super.connectedCallback()\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n }\n\n override focus(options?: FocusOptions): void {\n const { activeListItem } = this\n if (activeListItem) {\n activeListItem.focus(options)\n return\n }\n this.activateFirstItem()\n }\n\n override firstUpdated(changedProperties: PropertyValues): void {\n super.firstUpdated(changedProperties)\n\n this.updateItems()\n }\n\n activateFirstItem(): void {\n this.activeListItem = this.getFirstItem()\n this.activeListItem?.activate()\n }\n\n activateLastItem(): void {\n this.activeListItem = this.getLastItem()\n this.activeListItem?.activate()\n }\n\n resetActiveListItem(): void {\n this.activeListItem = null\n this.setAttribute('tabindex', '0')\n }\n\n protected updateItems(): void {\n const elements = this.assignedElements || []\n const items = elements.filter(this.isListItem, this)\n this.items = items\n if (this.activeListItem && !items.includes(this.activeListItem)) {\n this.activeListItem = null\n }\n if (this.highlightListItem && !items.includes(this.highlightListItem)) {\n this.highlightListItem = null\n }\n this.dispatchEvent(\n new CustomEvent<UiListItemsChange>('itemschange', { bubbles: false, composed: false, detail: { items } })\n )\n }\n\n /**\n * @return Whether the given element is a list item element.\n */\n protected isListItem(element: Element): element is UiListItem {\n if (element.nodeType !== Node.ELEMENT_NODE) {\n return false\n }\n return element.matches(this.selector)\n }\n\n getFirstItem(): UiListItem {\n return this.items[0]\n }\n\n getLastItem(): UiListItem {\n return this.items[this.items.length - 1]\n }\n\n getPreviousItem(item: UiListItem): UiListItem {\n const { items } = this\n const curIndex = items.indexOf(item)\n if (curIndex < 0) {\n return item\n }\n let i = curIndex\n let result: HTMLElement | undefined\n do {\n i--\n if (i === curIndex) {\n // looped back from the end, no active element to find.\n return item\n }\n const tmp = items[i]\n if (!tmp) {\n i = items.length\n continue\n }\n if (this.isSelectable(tmp)) {\n result = tmp\n }\n } while (!result)\n return (result as UiListItem) || item\n }\n\n getNextItem(item: UiListItem): UiListItem {\n const { items } = this\n const curIndex = items.indexOf(item)\n if (curIndex < 0) {\n return item\n }\n let i = curIndex\n let next: HTMLElement | undefined\n do {\n i++\n if (i === curIndex) {\n // looped back from the start, no active element to find.\n return item\n }\n const tmp = items[i]\n if (!tmp) {\n i = -1\n continue\n }\n if (this.isSelectable(tmp)) {\n next = tmp\n }\n } while (!next)\n return (next as UiListItem) || item\n }\n\n protected isSelectable(element: HTMLElement): boolean {\n if ((element as unknown as { disabled: boolean }).disabled) {\n return false\n }\n if (element.hasAttribute('disabled')) {\n return false\n }\n if (element.hidden && element.hasAttribute('hidden')) {\n return false\n }\n return true\n }\n\n protected isListItemActive(item: UiListItem): boolean {\n return item.isActive()\n }\n\n protected deactivateListItem(item: UiListItem): void {\n item.deactivate()\n }\n\n protected activateListItem(item?: UiListItem | null): void {\n if (!item) {\n return\n }\n this.removeAttribute('tabindex')\n item.activate()\n item.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior: 'smooth' })\n }\n\n handleKeydown(event: KeyboardEvent): void {\n if (Object.values(ACTIVATION_KEYS).includes(event.key)) {\n this.activateFromEvent(event)\n return\n }\n if (Object.values(NAVIGATION_KEYS).indexOf(event.key) === -1) return\n\n for (const item of this.items) {\n if (this.isListItemActive(item)) {\n this.activeListItem = item\n }\n\n this.deactivateListItem(item)\n }\n\n if (event.key === NAVIGATION_KEYS.ArrowDown) {\n event.preventDefault()\n this.activateNext()\n }\n\n if (event.key === NAVIGATION_KEYS.ArrowUp) {\n event.preventDefault()\n this.activatePrevious()\n }\n\n if (event.key === NAVIGATION_KEYS.Home) {\n event.preventDefault()\n this.activateFirst()\n }\n\n if (event.key === NAVIGATION_KEYS.End) {\n event.preventDefault()\n this.activateLast()\n }\n }\n\n activateFirst(): void {\n this.activeListItem = this.getFirstItem()\n if (this.activeListItem) {\n this.activateListItem(this.activeListItem)\n }\n }\n\n activateLast(): void {\n this.activeListItem = this.getLastItem()\n if (this.activeListItem) {\n this.activateListItem(this.activeListItem)\n }\n }\n\n activateNext(item = this.activeListItem): void {\n this.activeListItem = item ? this.getNextItem(item) : this.getFirstItem()\n if (this.activeListItem) {\n this.activateListItem(this.activeListItem)\n }\n }\n\n activatePrevious(item = this.activeListItem): void {\n this.activeListItem = item ? this.getPreviousItem(item) : this.getLastItem()\n if (this.activeListItem) {\n this.activateListItem(this.activeListItem)\n }\n }\n\n /**\n * Sets `highlight` class on the next item.\n * @param item When not set it highlights the first item. Default to `this.highlightListItem`.\n * Pass `null` to select first item.\n */\n highlightNext(item = this.highlightListItem): void {\n const next = item ? this.getNextItem(item) : this.getFirstItem()\n this.highlightItem(next)\n }\n\n /**\n * Sets `highlight` class on the previous item.\n * @param item When not set it highlights the last item. Default to `this.highlightListItem`.\n * Pass `null` to select last item.\n */\n highlightPrevious(item = this.highlightListItem): void {\n const previous = item ? this.getPreviousItem(item) : this.getLastItem()\n this.highlightItem(previous)\n }\n\n highlightFirst(): void {\n const item = this.getFirstItem()\n this.highlightItem(item)\n }\n\n highlightLast(): void {\n const item = this.getLastItem()\n this.highlightItem(item)\n }\n\n handleClick(event: MouseEvent): void {\n this.activateFromEvent(event)\n }\n\n highlightItem(item?: UiListItem | null): void {\n if (this.highlightListItem === item) {\n return\n }\n if (this.highlightListItem) {\n this.highlightListItem.classList.remove('highlight')\n }\n this.highlightListItem = item || null\n if (this.highlightListItem) {\n this.highlightListItem.classList.add('highlight')\n this.highlightListItem.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior: 'smooth' })\n }\n this.dispatchEvent(\n new CustomEvent('highlightchange', { bubbles: false, composed: false, detail: { item: this.highlightListItem } })\n )\n }\n\n /**\n * Activates a list item from an Event.\n * Activate means dispatches a non-bubbling CustomEvent with the item in the detail.\n */\n protected activateFromEvent(e: Event): void {\n const path = e.composedPath()\n let item: UiListItem | undefined\n while (!item) {\n const next = path.shift() as Element\n if (next === this) {\n break\n }\n if (!this.isListItem(next) || !this.isSelectable(next)) {\n continue\n }\n item = next as UiListItem\n }\n if (!item) {\n return\n }\n this.manageSelection(item)\n item.activate()\n this.activeListItem = item\n e.preventDefault()\n this.notifySelect(item)\n }\n\n /**\n * @param item The UiListItem that is selected.\n * @returns True when the event was canceled.\n */\n notifySelect(item: UiListItem, index?: number): boolean {\n const resolvedIndex = index ?? this.items.indexOf(item)\n if (resolvedIndex === -1) {\n return false\n }\n const event = new CustomEvent<UiListSelection>('select', {\n cancelable: true,\n detail: {\n item,\n index: resolvedIndex,\n },\n })\n this.dispatchEvent(event)\n return event.defaultPrevented\n }\n\n protected manageSelection(item: UiListItem): void {\n if (!this.selectActive) {\n return\n }\n const { items } = this\n items.forEach((current) => current.classList.remove('select'))\n item.classList.add('select')\n }\n\n override render(): TemplateResult {\n return html`<slot @slotchange=\"${this.updateItems}\"></slot>`\n }\n}\n"]}
|
|
@@ -26,22 +26,21 @@ export default class Menu extends UiList {
|
|
|
26
26
|
* Currently active sub-menu
|
|
27
27
|
*/
|
|
28
28
|
accessor activeSubMenu: UiSubMenu | null;
|
|
29
|
-
/**
|
|
30
|
-
* Assigned menu items from light DOM
|
|
31
|
-
*/
|
|
32
|
-
protected accessor assignedMenuItems: UiMenuItem[];
|
|
33
29
|
constructor();
|
|
34
30
|
connectedCallback(): void;
|
|
35
31
|
protected updated(changedProperties: PropertyValues<this>): void;
|
|
36
32
|
togglePopover(force?: boolean): boolean;
|
|
33
|
+
protected queryMenuItems(): UiMenuItem[];
|
|
34
|
+
show(): void;
|
|
35
|
+
hide(): void;
|
|
37
36
|
/**
|
|
38
37
|
* Shows the menu
|
|
39
38
|
*/
|
|
40
|
-
|
|
39
|
+
showPopover(): void;
|
|
41
40
|
/**
|
|
42
41
|
* Hides the menu
|
|
43
42
|
*/
|
|
44
|
-
|
|
43
|
+
hidePopover(): void;
|
|
45
44
|
positionMenu(): void;
|
|
46
45
|
/**
|
|
47
46
|
* Handles beforetoggle event from popover
|
|
@@ -64,7 +63,9 @@ export default class Menu extends UiList {
|
|
|
64
63
|
* Sets the active sub-menu
|
|
65
64
|
*/
|
|
66
65
|
setActiveSubMenu(subMenu: UiSubMenu | null): void;
|
|
67
|
-
notifySelect(item: UiListItem
|
|
66
|
+
notifySelect(item: UiListItem & {
|
|
67
|
+
selected?: boolean;
|
|
68
|
+
}, index?: number): boolean;
|
|
68
69
|
/**
|
|
69
70
|
* Clears selection from all menu items
|
|
70
71
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../../../src/md/menu/internal/Menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AAI1D,OAAO,MAAM,MAAM,8BAA8B,CAAA;AACjD,OAAO,UAAU,MAAM,eAAe,CAAA;AACtC,OAAO,SAAS,MAAM,cAAc,CAAA;AAEpC,OAAO,UAAU,MAAM,kCAAkC,CAAA;AAGzD;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,MAAM;IACtC;;;OAGG;IACyC,QAAQ,CAAC,IAAI,UAAQ;IAEjE;;;OAGG;IACyC,QAAQ,CAAC,QAAQ,UAAQ;IAErE;;OAEG;IACM,QAAQ,CAAC,aAAa,EAAE,SAAS,GAAG,IAAI,CAAO
|
|
1
|
+
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../../../src/md/menu/internal/Menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AAI1D,OAAO,MAAM,MAAM,8BAA8B,CAAA;AACjD,OAAO,UAAU,MAAM,eAAe,CAAA;AACtC,OAAO,SAAS,MAAM,cAAc,CAAA;AAEpC,OAAO,UAAU,MAAM,kCAAkC,CAAA;AAGzD;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,MAAM;IACtC;;;OAGG;IACyC,QAAQ,CAAC,IAAI,UAAQ;IAEjE;;;OAGG;IACyC,QAAQ,CAAC,QAAQ,UAAQ;IAErE;;OAEG;IACM,QAAQ,CAAC,aAAa,EAAE,SAAS,GAAG,IAAI,CAAO;;IAS/C,iBAAiB,IAAI,IAAI;cAYf,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAQhE,aAAa,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO;IAYhD,SAAS,CAAC,cAAc,IAAI,UAAU,EAAE;IAOxC,IAAI,IAAI,IAAI;IAIZ,IAAI,IAAI,IAAI;IAIZ;;OAEG;IACM,WAAW,IAAI,IAAI;IAU5B;;OAEG;IACM,WAAW,IAAI,IAAI;IAS5B,YAAY,IAAI,IAAI;IAyCpB;;OAEG;IACH,SAAS,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;IAQ5C;;OAEG;IACM,aAAa,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;IAuB9C,mBAAmB,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI;IAIzC;;OAEG;IACH,SAAS,CAAC,WAAW,IAAI,IAAI;IAO7B;;OAEG;IACH,YAAY,IAAI,IAAI;IAQpB;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAKxC,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAQzF;;OAEG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI;IAOhC;;OAEG;IACH,IAAI,YAAY,IAAI,UAAU,GAAG,IAAI,CAGpC;IAED;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI;IAO9C;;OAEG;IACH,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI;IAKjD;;OAEG;IACH,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAKzB,MAAM,IAAI,cAAc;CAWlC"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
2
|
import { html } from 'lit';
|
|
3
|
-
import { property, state
|
|
3
|
+
import { property, state } from 'lit/decorators.js';
|
|
4
4
|
import { classMap } from 'lit/directives/class-map.js';
|
|
5
5
|
import { nanoid } from 'nanoid';
|
|
6
6
|
import UiList from '../../list/internals/List.js';
|
|
7
|
-
import UiMenuItem from './MenuItem.js';
|
|
8
7
|
import { setDisabled } from '../../../lib/disabled.js';
|
|
9
8
|
import { bound } from '../../../decorators/bound.js';
|
|
10
9
|
let Menu = (() => {
|
|
@@ -19,9 +18,6 @@ let Menu = (() => {
|
|
|
19
18
|
let _activeSubMenu_decorators;
|
|
20
19
|
let _activeSubMenu_initializers = [];
|
|
21
20
|
let _activeSubMenu_extraInitializers = [];
|
|
22
|
-
let _assignedMenuItems_decorators;
|
|
23
|
-
let _assignedMenuItems_initializers = [];
|
|
24
|
-
let _assignedMenuItems_extraInitializers = [];
|
|
25
21
|
let _handleSubMenuSelect_decorators;
|
|
26
22
|
return class Menu extends _classSuper {
|
|
27
23
|
static {
|
|
@@ -29,12 +25,10 @@ let Menu = (() => {
|
|
|
29
25
|
_open_decorators = [property({ type: Boolean, reflect: true })];
|
|
30
26
|
_disabled_decorators = [property({ type: Boolean, reflect: true })];
|
|
31
27
|
_activeSubMenu_decorators = [state()];
|
|
32
|
-
_assignedMenuItems_decorators = [queryAssignedElements({ selector: 'ui-menu-item' })];
|
|
33
28
|
_handleSubMenuSelect_decorators = [bound];
|
|
34
29
|
__esDecorate(this, null, _open_decorators, { kind: "accessor", name: "open", static: false, private: false, access: { has: obj => "open" in obj, get: obj => obj.open, set: (obj, value) => { obj.open = value; } }, metadata: _metadata }, _open_initializers, _open_extraInitializers);
|
|
35
30
|
__esDecorate(this, null, _disabled_decorators, { kind: "accessor", name: "disabled", static: false, private: false, access: { has: obj => "disabled" in obj, get: obj => obj.disabled, set: (obj, value) => { obj.disabled = value; } }, metadata: _metadata }, _disabled_initializers, _disabled_extraInitializers);
|
|
36
31
|
__esDecorate(this, null, _activeSubMenu_decorators, { kind: "accessor", name: "activeSubMenu", static: false, private: false, access: { has: obj => "activeSubMenu" in obj, get: obj => obj.activeSubMenu, set: (obj, value) => { obj.activeSubMenu = value; } }, metadata: _metadata }, _activeSubMenu_initializers, _activeSubMenu_extraInitializers);
|
|
37
|
-
__esDecorate(this, null, _assignedMenuItems_decorators, { kind: "accessor", name: "assignedMenuItems", static: false, private: false, access: { has: obj => "assignedMenuItems" in obj, get: obj => obj.assignedMenuItems, set: (obj, value) => { obj.assignedMenuItems = value; } }, metadata: _metadata }, _assignedMenuItems_initializers, _assignedMenuItems_extraInitializers);
|
|
38
32
|
__esDecorate(this, null, _handleSubMenuSelect_decorators, { kind: "method", name: "handleSubMenuSelect", static: false, private: false, access: { has: obj => "handleSubMenuSelect" in obj, get: obj => obj.handleSubMenuSelect }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
39
33
|
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
40
34
|
}
|
|
@@ -61,25 +55,15 @@ let Menu = (() => {
|
|
|
61
55
|
*/
|
|
62
56
|
get disabled() { return this.#disabled_accessor_storage; }
|
|
63
57
|
set disabled(value) { this.#disabled_accessor_storage = value; }
|
|
64
|
-
#activeSubMenu_accessor_storage = (__runInitializers(this, _disabled_extraInitializers), __runInitializers(this, _activeSubMenu_initializers, null
|
|
65
|
-
/**
|
|
66
|
-
* Assigned menu items from light DOM
|
|
67
|
-
*/
|
|
68
|
-
));
|
|
58
|
+
#activeSubMenu_accessor_storage = (__runInitializers(this, _disabled_extraInitializers), __runInitializers(this, _activeSubMenu_initializers, null));
|
|
69
59
|
/**
|
|
70
60
|
* Currently active sub-menu
|
|
71
61
|
*/
|
|
72
62
|
get activeSubMenu() { return this.#activeSubMenu_accessor_storage; }
|
|
73
63
|
set activeSubMenu(value) { this.#activeSubMenu_accessor_storage = value; }
|
|
74
|
-
#assignedMenuItems_accessor_storage = (__runInitializers(this, _activeSubMenu_extraInitializers), __runInitializers(this, _assignedMenuItems_initializers, void 0));
|
|
75
|
-
/**
|
|
76
|
-
* Assigned menu items from light DOM
|
|
77
|
-
*/
|
|
78
|
-
get assignedMenuItems() { return this.#assignedMenuItems_accessor_storage; }
|
|
79
|
-
set assignedMenuItems(value) { this.#assignedMenuItems_accessor_storage = value; }
|
|
80
64
|
constructor() {
|
|
81
65
|
super();
|
|
82
|
-
__runInitializers(this,
|
|
66
|
+
__runInitializers(this, _activeSubMenu_extraInitializers);
|
|
83
67
|
this.selector = 'ui-menu-item';
|
|
84
68
|
this.ariaExpanded = 'false';
|
|
85
69
|
this.addEventListener('beforetoggle', this.handleBeforeToggle.bind(this));
|
|
@@ -112,13 +96,26 @@ let Menu = (() => {
|
|
|
112
96
|
}
|
|
113
97
|
return result;
|
|
114
98
|
}
|
|
99
|
+
queryMenuItems() {
|
|
100
|
+
const slot = this.shadowRoot?.querySelector('slot');
|
|
101
|
+
if (!slot)
|
|
102
|
+
return [];
|
|
103
|
+
const { selector } = this;
|
|
104
|
+
return Array.from(slot.assignedElements({ flatten: true })).filter((el) => el.matches(selector));
|
|
105
|
+
}
|
|
106
|
+
show() {
|
|
107
|
+
this.showPopover();
|
|
108
|
+
}
|
|
109
|
+
hide() {
|
|
110
|
+
this.hidePopover();
|
|
111
|
+
}
|
|
115
112
|
/**
|
|
116
113
|
* Shows the menu
|
|
117
114
|
*/
|
|
118
|
-
|
|
115
|
+
showPopover() {
|
|
119
116
|
this.tabIndex = 0; // Make menu focusable
|
|
120
117
|
this.ariaExpanded = 'true';
|
|
121
|
-
|
|
118
|
+
super.showPopover();
|
|
122
119
|
this.open = true;
|
|
123
120
|
this.positionMenu();
|
|
124
121
|
this.focus();
|
|
@@ -127,10 +124,10 @@ let Menu = (() => {
|
|
|
127
124
|
/**
|
|
128
125
|
* Hides the menu
|
|
129
126
|
*/
|
|
130
|
-
|
|
127
|
+
hidePopover() {
|
|
131
128
|
this.tabIndex = -1;
|
|
132
129
|
this.ariaExpanded = 'false';
|
|
133
|
-
|
|
130
|
+
super.hidePopover();
|
|
134
131
|
this.open = false;
|
|
135
132
|
this.closeSubMenu();
|
|
136
133
|
this.dispatchEvent(new CustomEvent('close', { bubbles: false, composed: true }));
|
|
@@ -236,10 +233,8 @@ let Menu = (() => {
|
|
|
236
233
|
}
|
|
237
234
|
notifySelect(item, index) {
|
|
238
235
|
// Handle single selection
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
item.selected = true;
|
|
242
|
-
}
|
|
236
|
+
this.clearSelection();
|
|
237
|
+
item.selected = true;
|
|
243
238
|
this.hide();
|
|
244
239
|
return super.notifySelect(item, index);
|
|
245
240
|
}
|
|
@@ -247,7 +242,8 @@ let Menu = (() => {
|
|
|
247
242
|
* Clears selection from all menu items
|
|
248
243
|
*/
|
|
249
244
|
clearSelection() {
|
|
250
|
-
this.
|
|
245
|
+
const items = this.queryMenuItems();
|
|
246
|
+
items.forEach((menuItem) => {
|
|
251
247
|
menuItem.selected = false;
|
|
252
248
|
});
|
|
253
249
|
}
|
|
@@ -255,7 +251,8 @@ let Menu = (() => {
|
|
|
255
251
|
* Gets the currently selected menu item
|
|
256
252
|
*/
|
|
257
253
|
get selectedItem() {
|
|
258
|
-
|
|
254
|
+
const items = this.queryMenuItems();
|
|
255
|
+
return items.find((item) => item.selected) || null;
|
|
259
256
|
}
|
|
260
257
|
/**
|
|
261
258
|
* Sets the selected menu item
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../../../src/md/menu/internal/Menu.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, PropertyValues, TemplateResult } from 'lit'\nimport { property, state, queryAssignedElements } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { nanoid } from 'nanoid'\nimport UiList from '../../list/internals/List.js'\nimport UiMenuItem from './MenuItem.js'\nimport UiSubMenu from './SubMenu.js'\nimport { setDisabled } from '../../../lib/disabled.js'\nimport UiListItem from '../../list/internals/ListItem.js'\nimport { bound } from '../../../decorators/bound.js'\n\n/**\n * Material Design 3 Menu component with sub-menu support.\n * Uses Popover API and Anchor Positioning API for modern positioning.\n *\n * @fires select - Dispatched when a menu item is selected\n * @fires close - Dispatched when the menu is closed\n * @fires open - Dispatched when the menu is opened\n */\nexport default class Menu extends UiList {\n /**\n * Whether the menu is currently open\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) accessor open = false\n\n /**\n * Whether the menu is disabled\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) accessor disabled = false\n\n /**\n * Currently active sub-menu\n */\n @state() accessor activeSubMenu: UiSubMenu | null = null\n\n /**\n * Assigned menu items from light DOM\n */\n @queryAssignedElements({ selector: 'ui-menu-item' }) protected accessor assignedMenuItems!: UiMenuItem[]\n\n constructor() {\n super()\n this.selector = 'ui-menu-item'\n this.ariaExpanded = 'false'\n this.addEventListener('beforetoggle', this.handleBeforeToggle.bind(this))\n }\n\n override connectedCallback(): void {\n super.connectedCallback()\n this.setAttribute('role', 'menu')\n this.setAttribute('tabindex', '-1')\n if (!this.hasAttribute('popover')) {\n this.setAttribute('popover', 'auto')\n }\n if (!this.id) {\n this.id = nanoid()\n }\n }\n\n protected override updated(changedProperties: PropertyValues<this>): void {\n super.updated(changedProperties)\n\n if (changedProperties.has('disabled')) {\n setDisabled(this, this.disabled)\n }\n }\n\n override togglePopover(force?: boolean): boolean {\n this.open = !this.open\n this.ariaExpanded = String(this.open)\n this.tabIndex = this.open ? 0 : -1\n const result = super.togglePopover(force)\n if (this.open) {\n this.positionMenu()\n this.focus()\n }\n return result\n }\n\n /**\n * Shows the menu\n */\n show(): void {\n this.tabIndex = 0 // Make menu focusable\n this.ariaExpanded = 'true'\n this.showPopover()\n this.open = true\n this.positionMenu()\n this.focus()\n this.dispatchEvent(new CustomEvent('open', { bubbles: false, composed: true }))\n }\n\n /**\n * Hides the menu\n */\n hide(): void {\n this.tabIndex = -1\n this.ariaExpanded = 'false'\n this.hidePopover()\n this.open = false\n this.closeSubMenu()\n this.dispatchEvent(new CustomEvent('close', { bubbles: false, composed: true }))\n }\n\n positionMenu(): void {\n // Let CSS anchor positioning handle the positioning automatically\n // Only intervene if we need to set max-height for overflow cases\n const box = this.getBoundingClientRect()\n const menuBottom = box.top + box.height\n const menuRight = box.left + box.width\n\n // Reset any previous manual positioning to let CSS anchor positioning work\n this.style.removeProperty('position-area')\n this.style.removeProperty('max-height')\n\n // Detect if menu is positioned above or below the anchor\n // by checking if the menu is in the upper or lower half of the viewport\n const viewportMiddle = innerHeight / 2\n const isMenuInUpperHalf = box.top < viewportMiddle\n\n // Add CSS class to control animation direction\n if (isMenuInUpperHalf) {\n this.classList.add('menu-positioned-above')\n this.classList.remove('menu-positioned-below')\n } else {\n this.classList.add('menu-positioned-below')\n this.classList.remove('menu-positioned-above')\n }\n\n // Only set max-height if the menu would overflow\n if (menuBottom > innerHeight) {\n const availableHeight = innerHeight - box.top\n this.style.maxHeight = `${Math.max(200, availableHeight - 20)}px`\n }\n\n if (menuRight > innerWidth) {\n const availableWidth = innerWidth - box.left\n // Let CSS anchor positioning handle horizontal flipping\n // We could set max-width if needed\n if (availableWidth < 200) {\n this.style.maxWidth = `${Math.max(180, availableWidth - 20)}px`\n }\n }\n }\n\n /**\n * Handles beforetoggle event from popover\n */\n protected handleBeforeToggle(e: Event): void {\n const toggleEvent = e as ToggleEvent\n if (toggleEvent.newState === 'closed') {\n this.open = false\n this.closeSubMenu()\n }\n }\n\n /**\n * Handles keyboard navigation for the menu\n */\n override handleKeydown(e: KeyboardEvent): void {\n if (!this.open || e.defaultPrevented) return\n\n switch (e.key) {\n case 'Escape':\n e.preventDefault()\n this.hide()\n break\n case 'ArrowRight':\n e.preventDefault()\n this.openSubMenu()\n break\n case 'ArrowLeft':\n e.preventDefault()\n this.closeSubMenu()\n break\n default:\n // Let the parent UiList handle other keys\n super.handleKeydown(e)\n }\n }\n\n @bound\n handleSubMenuSelect(e: CustomEvent): void {\n super.notifySelect(e.detail.item, e.detail.index)\n }\n\n /**\n * Opens the sub-menu for the currently active item\n */\n protected openSubMenu(): void {\n const activeItem = this.activeListItem as UiMenuItem\n if (activeItem?.hasSubMenu) {\n activeItem.openSubMenu()\n }\n }\n\n /**\n * Closes the currently open sub-menu\n */\n closeSubMenu(): void {\n if (this.activeSubMenu) {\n this.activeSubMenu.removeEventListener('select', this.handleSubMenuSelect as EventListener)\n this.activeSubMenu.hide()\n this.activeSubMenu = null\n }\n }\n\n /**\n * Sets the active sub-menu\n */\n setActiveSubMenu(subMenu: UiSubMenu | null): void {\n this.activeSubMenu = subMenu\n subMenu?.addEventListener('select', this.handleSubMenuSelect as EventListener)\n }\n\n override notifySelect(item: UiListItem, index?: number): boolean {\n // Handle single selection\n if (item instanceof UiMenuItem) {\n this.clearSelection()\n item.selected = true\n }\n\n this.hide()\n return super.notifySelect(item, index)\n }\n\n /**\n * Clears selection from all menu items\n */\n protected clearSelection(): void {\n this.assignedMenuItems.forEach((menuItem) => {\n menuItem.selected = false\n })\n }\n\n /**\n * Gets the currently selected menu item\n */\n get selectedItem(): UiMenuItem | null {\n return this.assignedMenuItems.find((item) => item.selected) || null\n }\n\n /**\n * Sets the selected menu item\n */\n setSelectedItem(item: UiMenuItem | null): void {\n this.clearSelection()\n if (item) {\n item.selected = true\n }\n }\n\n /**\n * Handles sub-menu opening\n */\n protected handleSubMenuOpen(e: CustomEvent): void {\n const subMenu = e.detail.subMenu\n this.setActiveSubMenu(subMenu)\n }\n\n /**\n * Handles slot changes to update menu items\n */\n protected handleSlotChange(): void {\n // Update the items list when slot content changes\n this.updateItems()\n }\n\n override render(): TemplateResult {\n const classes = classMap({\n 'menu-container': true,\n })\n\n return html`\n <div class=${classes}>\n <slot @slotchange=${this.handleSlotChange}></slot>\n </div>\n `\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../../../src/md/menu/internal/Menu.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAkC,MAAM,KAAK,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,MAAM,MAAM,8BAA8B,CAAA;AAGjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;;sBAUlB,MAAM;;;;;;;;;;;;iBAAnB,IAAK,SAAQ,WAAM;;;gCAKrC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oCAM1C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;yCAK1C,KAAK,EAAE;+CA8JP,KAAK;YAzKsC,iKAAS,IAAI,6BAAJ,IAAI,mFAAQ;YAMrB,6KAAS,QAAQ,6BAAR,QAAQ,2FAAQ;YAK5D,4LAAS,aAAa,6BAAb,aAAa,qGAAyB;YA+JxD,4MAAA,mBAAmB,6DAElB;;;QA5K2C,0BALzB,mDAAI,8CAKqC,KAAK;QAEjE;;;WAGG;WAL8D;QAJjE;;;WAGG;QACyC,IAAS,IAAI,0CAAQ;QAArB,IAAS,IAAI,gDAAQ;QAMrB,gIAAoB,KAAK;QAErE;;WAEG;WAJkE;QAJrE;;;WAGG;QACyC,IAAS,QAAQ,8CAAQ;QAAzB,IAAS,QAAQ,oDAAQ;QAK5D,8IAA2C,IAAI,GAAA;QAHxD;;WAEG;QACM,IAAS,aAAa,mDAAyB;QAA/C,IAAS,aAAa,yDAAyB;QAExD;YACE,KAAK,EAAE,CAAA;;YACP,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAA;YAC9B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAA;YAC3B,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;SAC1E;QAEQ,iBAAiB;YACxB,KAAK,CAAC,iBAAiB,EAAE,CAAA;YACzB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YACjC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;YACnC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;YACtC,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACb,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,CAAA;YACpB,CAAC;QACH,CAAC;QAEkB,OAAO,CAAC,iBAAuC;YAChE,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;YAEhC,IAAI,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;YAClC,CAAC;QACH,CAAC;QAEQ,aAAa,CAAC,KAAe;YACpC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA;YACtB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAClC,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;YACzC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,IAAI,CAAC,YAAY,EAAE,CAAA;gBACnB,IAAI,CAAC,KAAK,EAAE,CAAA;YACd,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;QAES,cAAc;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;YACnD,IAAI,CAAC,IAAI;gBAAE,OAAO,EAAE,CAAA;YACpB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;YACzB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAiB,CAAA;QAClH,CAAC;QAED,IAAI;YACF,IAAI,CAAC,WAAW,EAAE,CAAA;QACpB,CAAC;QAED,IAAI;YACF,IAAI,CAAC,WAAW,EAAE,CAAA;QACpB,CAAC;QAED;;WAEG;QACM,WAAW;YAClB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA,CAAC,sBAAsB;YACxC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAA;YAC1B,KAAK,CAAC,WAAW,EAAE,CAAA;YACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;YAChB,IAAI,CAAC,YAAY,EAAE,CAAA;YACnB,IAAI,CAAC,KAAK,EAAE,CAAA;YACZ,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACjF,CAAC;QAED;;WAEG;QACM,WAAW;YAClB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;YAClB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAA;YAC3B,KAAK,CAAC,WAAW,EAAE,CAAA;YACnB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;YACjB,IAAI,CAAC,YAAY,EAAE,CAAA;YACnB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAClF,CAAC;QAED,YAAY;YACV,kEAAkE;YAClE,iEAAiE;YACjE,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAA;YACxC,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAA;YACvC,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAA;YAEtC,2EAA2E;YAC3E,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;YAC1C,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;YAEvC,yDAAyD;YACzD,wEAAwE;YACxE,MAAM,cAAc,GAAG,WAAW,GAAG,CAAC,CAAA;YACtC,MAAM,iBAAiB,GAAG,GAAG,CAAC,GAAG,GAAG,cAAc,CAAA;YAElD,+CAA+C;YAC/C,IAAI,iBAAiB,EAAE,CAAC;gBACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;gBAC3C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAA;YAChD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;gBAC3C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAA;YAChD,CAAC;YAED,iDAAiD;YACjD,IAAI,UAAU,GAAG,WAAW,EAAE,CAAC;gBAC7B,MAAM,eAAe,GAAG,WAAW,GAAG,GAAG,CAAC,GAAG,CAAA;gBAC7C,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,GAAG,EAAE,CAAC,IAAI,CAAA;YACnE,CAAC;YAED,IAAI,SAAS,GAAG,UAAU,EAAE,CAAC;gBAC3B,MAAM,cAAc,GAAG,UAAU,GAAG,GAAG,CAAC,IAAI,CAAA;gBAC5C,wDAAwD;gBACxD,mCAAmC;gBACnC,IAAI,cAAc,GAAG,GAAG,EAAE,CAAC;oBACzB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,EAAE,CAAC,IAAI,CAAA;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;QAED;;WAEG;QACO,kBAAkB,CAAC,CAAQ;YACnC,MAAM,WAAW,GAAG,CAAgB,CAAA;YACpC,IAAI,WAAW,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACtC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;gBACjB,IAAI,CAAC,YAAY,EAAE,CAAA;YACrB,CAAC;QACH,CAAC;QAED;;WAEG;QACM,aAAa,CAAC,CAAgB;YACrC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,gBAAgB;gBAAE,OAAM;YAE5C,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;gBACd,KAAK,QAAQ;oBACX,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,IAAI,CAAC,IAAI,EAAE,CAAA;oBACX,MAAK;gBACP,KAAK,YAAY;oBACf,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,IAAI,CAAC,WAAW,EAAE,CAAA;oBAClB,MAAK;gBACP,KAAK,WAAW;oBACd,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,IAAI,CAAC,YAAY,EAAE,CAAA;oBACnB,MAAK;gBACP;oBACE,0CAA0C;oBAC1C,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;YAC1B,CAAC;QACH,CAAC;QAGD,mBAAmB,CAAC,CAAc;YAChC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACnD,CAAC;QAED;;WAEG;QACO,WAAW;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,cAA4B,CAAA;YACpD,IAAI,UAAU,EAAE,UAAU,EAAE,CAAC;gBAC3B,UAAU,CAAC,WAAW,EAAE,CAAA;YAC1B,CAAC;QACH,CAAC;QAED;;WAEG;QACH,YAAY;YACV,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAoC,CAAC,CAAA;gBAC3F,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;gBACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;YAC3B,CAAC;QACH,CAAC;QAED;;WAEG;QACH,gBAAgB,CAAC,OAAyB;YACxC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAA;YAC5B,OAAO,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAoC,CAAC,CAAA;QAChF,CAAC;QAEQ,YAAY,CAAC,IAAyC,EAAE,KAAc;YAC7E,0BAA0B;YAC1B,IAAI,CAAC,cAAc,EAAE,CAAA;YACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;YACpB,IAAI,CAAC,IAAI,EAAE,CAAA;YACX,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACxC,CAAC;QAED;;WAEG;QACO,cAAc;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;YACnC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACzB,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAA;YAC3B,CAAC,CAAC,CAAA;QACJ,CAAC;QAED;;WAEG;QACH,IAAI,YAAY;YACd,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;YACnC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAA;QACpD,CAAC;QAED;;WAEG;QACH,eAAe,CAAC,IAAuB;YACrC,IAAI,CAAC,cAAc,EAAE,CAAA;YACrB,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;YACtB,CAAC;QACH,CAAC;QAED;;WAEG;QACO,iBAAiB,CAAC,CAAc;YACxC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;YAChC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;QAChC,CAAC;QAED;;WAEG;QACO,gBAAgB;YACxB,kDAAkD;YAClD,IAAI,CAAC,WAAW,EAAE,CAAA;QACpB,CAAC;QAEQ,MAAM;YACb,MAAM,OAAO,GAAG,QAAQ,CAAC;gBACvB,gBAAgB,EAAE,IAAI;aACvB,CAAC,CAAA;YAEF,OAAO,IAAI,CAAA;mBACI,OAAO;4BACE,IAAI,CAAC,gBAAgB;;KAE5C,CAAA;QACH,CAAC;;;AAtRH;;;;;;;GAOG;AACH,oBA+QC","sourcesContent":["import { html, PropertyValues, TemplateResult } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { nanoid } from 'nanoid'\nimport UiList from '../../list/internals/List.js'\nimport UiMenuItem from './MenuItem.js'\nimport UiSubMenu from './SubMenu.js'\nimport { setDisabled } from '../../../lib/disabled.js'\nimport UiListItem from '../../list/internals/ListItem.js'\nimport { bound } from '../../../decorators/bound.js'\n\n/**\n * Material Design 3 Menu component with sub-menu support.\n * Uses Popover API and Anchor Positioning API for modern positioning.\n *\n * @fires select - Dispatched when a menu item is selected\n * @fires close - Dispatched when the menu is closed\n * @fires open - Dispatched when the menu is opened\n */\nexport default class Menu extends UiList {\n /**\n * Whether the menu is currently open\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) accessor open = false\n\n /**\n * Whether the menu is disabled\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) accessor disabled = false\n\n /**\n * Currently active sub-menu\n */\n @state() accessor activeSubMenu: UiSubMenu | null = null\n\n constructor() {\n super()\n this.selector = 'ui-menu-item'\n this.ariaExpanded = 'false'\n this.addEventListener('beforetoggle', this.handleBeforeToggle.bind(this))\n }\n\n override connectedCallback(): void {\n super.connectedCallback()\n this.setAttribute('role', 'menu')\n this.setAttribute('tabindex', '-1')\n if (!this.hasAttribute('popover')) {\n this.setAttribute('popover', 'auto')\n }\n if (!this.id) {\n this.id = nanoid()\n }\n }\n\n protected override updated(changedProperties: PropertyValues<this>): void {\n super.updated(changedProperties)\n\n if (changedProperties.has('disabled')) {\n setDisabled(this, this.disabled)\n }\n }\n\n override togglePopover(force?: boolean): boolean {\n this.open = !this.open\n this.ariaExpanded = String(this.open)\n this.tabIndex = this.open ? 0 : -1\n const result = super.togglePopover(force)\n if (this.open) {\n this.positionMenu()\n this.focus()\n }\n return result\n }\n\n protected queryMenuItems(): UiMenuItem[] {\n const slot = this.shadowRoot?.querySelector('slot')\n if (!slot) return []\n const { selector } = this\n return Array.from(slot.assignedElements({ flatten: true })).filter((el) => el.matches(selector)) as UiMenuItem[]\n }\n\n show(): void {\n this.showPopover()\n }\n\n hide(): void {\n this.hidePopover()\n }\n\n /**\n * Shows the menu\n */\n override showPopover(): void {\n this.tabIndex = 0 // Make menu focusable\n this.ariaExpanded = 'true'\n super.showPopover()\n this.open = true\n this.positionMenu()\n this.focus()\n this.dispatchEvent(new CustomEvent('open', { bubbles: false, composed: true }))\n }\n\n /**\n * Hides the menu\n */\n override hidePopover(): void {\n this.tabIndex = -1\n this.ariaExpanded = 'false'\n super.hidePopover()\n this.open = false\n this.closeSubMenu()\n this.dispatchEvent(new CustomEvent('close', { bubbles: false, composed: true }))\n }\n\n positionMenu(): void {\n // Let CSS anchor positioning handle the positioning automatically\n // Only intervene if we need to set max-height for overflow cases\n const box = this.getBoundingClientRect()\n const menuBottom = box.top + box.height\n const menuRight = box.left + box.width\n\n // Reset any previous manual positioning to let CSS anchor positioning work\n this.style.removeProperty('position-area')\n this.style.removeProperty('max-height')\n\n // Detect if menu is positioned above or below the anchor\n // by checking if the menu is in the upper or lower half of the viewport\n const viewportMiddle = innerHeight / 2\n const isMenuInUpperHalf = box.top < viewportMiddle\n\n // Add CSS class to control animation direction\n if (isMenuInUpperHalf) {\n this.classList.add('menu-positioned-above')\n this.classList.remove('menu-positioned-below')\n } else {\n this.classList.add('menu-positioned-below')\n this.classList.remove('menu-positioned-above')\n }\n\n // Only set max-height if the menu would overflow\n if (menuBottom > innerHeight) {\n const availableHeight = innerHeight - box.top\n this.style.maxHeight = `${Math.max(200, availableHeight - 20)}px`\n }\n\n if (menuRight > innerWidth) {\n const availableWidth = innerWidth - box.left\n // Let CSS anchor positioning handle horizontal flipping\n // We could set max-width if needed\n if (availableWidth < 200) {\n this.style.maxWidth = `${Math.max(180, availableWidth - 20)}px`\n }\n }\n }\n\n /**\n * Handles beforetoggle event from popover\n */\n protected handleBeforeToggle(e: Event): void {\n const toggleEvent = e as ToggleEvent\n if (toggleEvent.newState === 'closed') {\n this.open = false\n this.closeSubMenu()\n }\n }\n\n /**\n * Handles keyboard navigation for the menu\n */\n override handleKeydown(e: KeyboardEvent): void {\n if (!this.open || e.defaultPrevented) return\n\n switch (e.key) {\n case 'Escape':\n e.preventDefault()\n this.hide()\n break\n case 'ArrowRight':\n e.preventDefault()\n this.openSubMenu()\n break\n case 'ArrowLeft':\n e.preventDefault()\n this.closeSubMenu()\n break\n default:\n // Let the parent UiList handle other keys\n super.handleKeydown(e)\n }\n }\n\n @bound\n handleSubMenuSelect(e: CustomEvent): void {\n super.notifySelect(e.detail.item, e.detail.index)\n }\n\n /**\n * Opens the sub-menu for the currently active item\n */\n protected openSubMenu(): void {\n const activeItem = this.activeListItem as UiMenuItem\n if (activeItem?.hasSubMenu) {\n activeItem.openSubMenu()\n }\n }\n\n /**\n * Closes the currently open sub-menu\n */\n closeSubMenu(): void {\n if (this.activeSubMenu) {\n this.activeSubMenu.removeEventListener('select', this.handleSubMenuSelect as EventListener)\n this.activeSubMenu.hide()\n this.activeSubMenu = null\n }\n }\n\n /**\n * Sets the active sub-menu\n */\n setActiveSubMenu(subMenu: UiSubMenu | null): void {\n this.activeSubMenu = subMenu\n subMenu?.addEventListener('select', this.handleSubMenuSelect as EventListener)\n }\n\n override notifySelect(item: UiListItem & { selected?: boolean }, index?: number): boolean {\n // Handle single selection\n this.clearSelection()\n item.selected = true\n this.hide()\n return super.notifySelect(item, index)\n }\n\n /**\n * Clears selection from all menu items\n */\n protected clearSelection(): void {\n const items = this.queryMenuItems()\n items.forEach((menuItem) => {\n menuItem.selected = false\n })\n }\n\n /**\n * Gets the currently selected menu item\n */\n get selectedItem(): UiMenuItem | null {\n const items = this.queryMenuItems()\n return items.find((item) => item.selected) || null\n }\n\n /**\n * Sets the selected menu item\n */\n setSelectedItem(item: UiMenuItem | null): void {\n this.clearSelection()\n if (item) {\n item.selected = true\n }\n }\n\n /**\n * Handles sub-menu opening\n */\n protected handleSubMenuOpen(e: CustomEvent): void {\n const subMenu = e.detail.subMenu\n this.setActiveSubMenu(subMenu)\n }\n\n /**\n * Handles slot changes to update menu items\n */\n protected handleSlotChange(): void {\n // Update the items list when slot content changes\n this.updateItems()\n }\n\n override render(): TemplateResult {\n const classes = classMap({\n 'menu-container': true,\n })\n\n return html`\n <div class=${classes}>\n <slot @slotchange=${this.handleSlotChange}></slot>\n </div>\n `\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/md/select/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/md/select/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA","sourcesContent":["export { UiSelectElement } from './ui-select.js'\nexport { UiOptionElement } from './ui-option.js'\nexport type { UiListItemsChange, UiListSelection } from '../list/internals/List.js'\n"]}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { PropertyValues, TemplateResult } from 'lit';
|
|
2
|
+
import UiListItem from '../../list/internals/ListItem.js';
|
|
3
|
+
/**
|
|
4
|
+
* Material Design 3 Select Option component.
|
|
5
|
+
*
|
|
6
|
+
* The `ui-option` component represents a selectable item within a `ui-select` dropdown.
|
|
7
|
+
* It extends `UiListItem` to provide consistent styling and behavior with other list components.
|
|
8
|
+
*
|
|
9
|
+
* @slot - The option content (label, icon, etc.)
|
|
10
|
+
* @slot start - Content to display at the start of the option (icon, avatar, etc.)
|
|
11
|
+
* @slot end - Content to display at the end of the option
|
|
12
|
+
* @slot supporting-text - Supporting text below the main content
|
|
13
|
+
* @fires select - Dispatched when the option is selected. Contains `{ item: UiOption, value: string }` in detail
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* Basic option
|
|
17
|
+
* ```html
|
|
18
|
+
* <ui-option value="apple">Apple</ui-option>
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* Option with supporting text
|
|
23
|
+
* ```html
|
|
24
|
+
* <ui-option value="john" lines="two">
|
|
25
|
+
* John Doe
|
|
26
|
+
* <span slot="supporting-text">john@example.com</span>
|
|
27
|
+
* </ui-option>
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export default class UiOption extends UiListItem {
|
|
31
|
+
/**
|
|
32
|
+
* The value associated with this option. Used to identify the option when selected.
|
|
33
|
+
* This value is what gets set on the parent select element when this option is chosen.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```html
|
|
37
|
+
* <ui-option value="apple">Apple</ui-option>
|
|
38
|
+
* <ui-option value="banana">Banana</ui-option>
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
accessor value: string | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Whether this option is currently selected. This is typically managed automatically
|
|
44
|
+
* by the parent select component, but can be set manually for styling purposes.
|
|
45
|
+
*
|
|
46
|
+
* @default false
|
|
47
|
+
* @example
|
|
48
|
+
* ```html
|
|
49
|
+
* <ui-option value="apple" selected>Apple</ui-option>
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
accessor selected: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Returns the text representation of this option for display purposes.
|
|
55
|
+
* This method extracts and combines text content from all child nodes,
|
|
56
|
+
* including special handling for ui-icon elements.
|
|
57
|
+
*
|
|
58
|
+
* @readonly
|
|
59
|
+
* @returns {string} The rendered text value of the option
|
|
60
|
+
* @example
|
|
61
|
+
* ```javascript
|
|
62
|
+
* const option = document.querySelector('ui-option');
|
|
63
|
+
* console.log('Option text:', option.renderValue);
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
get renderValue(): string;
|
|
67
|
+
/**
|
|
68
|
+
* Initializes the option when it's connected to the DOM. Sets up ARIA attributes
|
|
69
|
+
* and generates a unique ID if one isn't provided.
|
|
70
|
+
*
|
|
71
|
+
* @protected
|
|
72
|
+
*/
|
|
73
|
+
connectedCallback(): void;
|
|
74
|
+
/**
|
|
75
|
+
* Handles property updates and triggers appropriate side effects.
|
|
76
|
+
* Currently monitors the `selected` property to update selection state.
|
|
77
|
+
*
|
|
78
|
+
* @param {PropertyValues<this>} changedProperties - Map of changed properties
|
|
79
|
+
* @protected
|
|
80
|
+
*/
|
|
81
|
+
protected updated(changedProperties: PropertyValues<this>): void;
|
|
82
|
+
/**
|
|
83
|
+
* Updates the visual and accessibility state when selection changes.
|
|
84
|
+
* Adds/removes CSS classes and ARIA attributes based on selection state.
|
|
85
|
+
*
|
|
86
|
+
* @protected
|
|
87
|
+
* @example
|
|
88
|
+
* ```javascript
|
|
89
|
+
* // This is called automatically when the selected property changes
|
|
90
|
+
* option.selected = true; // Will trigger updateSelectionState()
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
protected updateSelectionState(): void;
|
|
94
|
+
/**
|
|
95
|
+
* Handles click events on the option. Prevents default behavior and dispatches
|
|
96
|
+
* a custom 'select' event that the parent select component can listen to.
|
|
97
|
+
*
|
|
98
|
+
* @param {MouseEvent} e - The click event
|
|
99
|
+
* @protected
|
|
100
|
+
* @fires select - Custom event with option details in event.detail
|
|
101
|
+
* @example
|
|
102
|
+
* ```javascript
|
|
103
|
+
* // Listen for option selection
|
|
104
|
+
* option.addEventListener('select', (e) => {
|
|
105
|
+
* console.log('Selected option:', e.detail.item);
|
|
106
|
+
* console.log('Selected value:', e.detail.value);
|
|
107
|
+
* });
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
handleClick(e: MouseEvent): void;
|
|
111
|
+
/**
|
|
112
|
+
* Renders the option's template. Creates the main structure with focus ring,
|
|
113
|
+
* ripple effect, and content areas.
|
|
114
|
+
*
|
|
115
|
+
* @returns {TemplateResult} The rendered template
|
|
116
|
+
* @protected
|
|
117
|
+
*/
|
|
118
|
+
protected render(): TemplateResult;
|
|
119
|
+
/**
|
|
120
|
+
* Renders the end section of the option, including the selection check icon
|
|
121
|
+
* when the option is selected.
|
|
122
|
+
*/
|
|
123
|
+
protected renderEnd(): TemplateResult;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=Option.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Option.d.ts","sourceRoot":"","sources":["../../../../../src/md/select/internals/Option.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AAG1D,OAAO,UAAU,MAAM,kCAAkC,CAAA;AAGzD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,UAAU;IAC9C;;;;;;;;;OASG;IACwC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAE7E;;;;;;;;;OASG;IACyC,QAAQ,CAAC,QAAQ,UAAQ;IAErE;;;;;;;;;;;;OAYG;IACH,IAAI,WAAW,IAAI,MAAM,CAkBxB;IAED;;;;;OAKG;IACM,iBAAiB,IAAI,IAAI;IAQlC;;;;;;OAMG;cACgB,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAQzE;;;;;;;;;;OAUG;IACH,SAAS,CAAC,oBAAoB,IAAI,IAAI;IAUtC;;;;;;;;;;;;;;;OAeG;IACM,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI;IAoBzC;;;;;;OAMG;cACgB,MAAM,IAAI,cAAc;IAY3C;;;OAGG;cACgB,SAAS,IAAI,cAAc;CAS/C"}
|