@sky.ui/core 0.0.1
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.md +139 -0
- package/README.md +113 -0
- package/auto-import-loader.js +60 -0
- package/auto-import.js +93 -0
- package/dist/custom-elements.json +27051 -0
- package/dist/helper/controllers/animation-controller.d.ts +120 -0
- package/dist/helper/controllers/animation-controller.js +2 -0
- package/dist/helper/controllers/animation-controller.js.map +1 -0
- package/dist/helper/controllers/index.d.ts +2 -0
- package/dist/helper/controllers/popover-controller.d.ts +162 -0
- package/dist/helper/controllers/popover-controller.js +2 -0
- package/dist/helper/controllers/popover-controller.js.map +1 -0
- package/dist/helper/form-control-base.d.ts +1 -0
- package/dist/helper/iconify-offline.d.ts +73 -0
- package/dist/helper/iconify-offline.js +2 -0
- package/dist/helper/iconify-offline.js.map +1 -0
- package/dist/helper/index.d.ts +5 -0
- package/dist/helper/internals/form-control-base.d.ts +81 -0
- package/dist/helper/internals/form-control-base.js +2 -0
- package/dist/helper/internals/form-control-base.js.map +1 -0
- package/dist/helper/internals/index.d.ts +1 -0
- package/dist/helper/utils/color-resolver.d.ts +139 -0
- package/dist/helper/utils/color-resolver.js +2 -0
- package/dist/helper/utils/color-resolver.js.map +1 -0
- package/dist/helper/utils/index.d.ts +2 -0
- package/dist/helper/utils/size-resolver.d.ts +6 -0
- package/dist/helper/utils/size-resolver.js +2 -0
- package/dist/helper/utils/size-resolver.js.map +1 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/sky-accordion/index.d.ts +1 -0
- package/dist/sky-accordion/index.js +1 -0
- package/dist/sky-accordion/sky-accordion.d.ts +201 -0
- package/dist/sky-accordion/sky-accordion.js +85 -0
- package/dist/sky-accordion/sky-accordion.js.map +1 -0
- package/dist/sky-accordion-item/index.d.ts +1 -0
- package/dist/sky-accordion-item/index.js +1 -0
- package/dist/sky-accordion-item/sky-accordion-item.d.ts +161 -0
- package/dist/sky-accordion-item/sky-accordion-item.js +191 -0
- package/dist/sky-accordion-item/sky-accordion-item.js.map +1 -0
- package/dist/sky-alert/index.d.ts +1 -0
- package/dist/sky-alert/index.js +1 -0
- package/dist/sky-alert/sky-alert.d.ts +136 -0
- package/dist/sky-alert/sky-alert.js +292 -0
- package/dist/sky-alert/sky-alert.js.map +1 -0
- package/dist/sky-appbar/index.d.ts +1 -0
- package/dist/sky-appbar/index.js +1 -0
- package/dist/sky-appbar/sky-appbar.d.ts +84 -0
- package/dist/sky-appbar/sky-appbar.js +173 -0
- package/dist/sky-appbar/sky-appbar.js.map +1 -0
- package/dist/sky-avatar/index.d.ts +1 -0
- package/dist/sky-avatar/index.js +1 -0
- package/dist/sky-avatar/sky-avatar.d.ts +104 -0
- package/dist/sky-avatar/sky-avatar.js +152 -0
- package/dist/sky-avatar/sky-avatar.js.map +1 -0
- package/dist/sky-badge/index.d.ts +1 -0
- package/dist/sky-badge/index.js +1 -0
- package/dist/sky-badge/sky-badge.d.ts +154 -0
- package/dist/sky-badge/sky-badge.js +148 -0
- package/dist/sky-badge/sky-badge.js.map +1 -0
- package/dist/sky-breadcrumb/index.d.ts +1 -0
- package/dist/sky-breadcrumb/index.js +1 -0
- package/dist/sky-breadcrumb/sky-breadcrumb.d.ts +111 -0
- package/dist/sky-breadcrumb/sky-breadcrumb.js +230 -0
- package/dist/sky-breadcrumb/sky-breadcrumb.js.map +1 -0
- package/dist/sky-button/index.d.ts +1 -0
- package/dist/sky-button/index.js +1 -0
- package/dist/sky-button/sky-button.d.ts +118 -0
- package/dist/sky-button/sky-button.js +172 -0
- package/dist/sky-button/sky-button.js.map +1 -0
- package/dist/sky-button-group/index.d.ts +1 -0
- package/dist/sky-button-group/index.js +1 -0
- package/dist/sky-button-group/sky-button-group.d.ts +93 -0
- package/dist/sky-button-group/sky-button-group.js +281 -0
- package/dist/sky-button-group/sky-button-group.js.map +1 -0
- package/dist/sky-card/index.d.ts +1 -0
- package/dist/sky-card/index.js +1 -0
- package/dist/sky-card/sky-card.d.ts +143 -0
- package/dist/sky-card/sky-card.js +186 -0
- package/dist/sky-card/sky-card.js.map +1 -0
- package/dist/sky-carousel/index.d.ts +1 -0
- package/dist/sky-carousel/index.js +1 -0
- package/dist/sky-carousel/sky-carousel.d.ts +265 -0
- package/dist/sky-carousel/sky-carousel.js +211 -0
- package/dist/sky-carousel/sky-carousel.js.map +1 -0
- package/dist/sky-checkbox/index.d.ts +1 -0
- package/dist/sky-checkbox/index.js +1 -0
- package/dist/sky-checkbox/sky-checkbox.d.ts +165 -0
- package/dist/sky-checkbox/sky-checkbox.js +276 -0
- package/dist/sky-checkbox/sky-checkbox.js.map +1 -0
- package/dist/sky-chip/index.d.ts +1 -0
- package/dist/sky-chip/index.js +1 -0
- package/dist/sky-chip/sky-chip.d.ts +95 -0
- package/dist/sky-chip/sky-chip.js +210 -0
- package/dist/sky-chip/sky-chip.js.map +1 -0
- package/dist/sky-col/index.d.ts +1 -0
- package/dist/sky-col/index.js +1 -0
- package/dist/sky-col/sky-col.d.ts +84 -0
- package/dist/sky-col/sky-col.js +46 -0
- package/dist/sky-col/sky-col.js.map +1 -0
- package/dist/sky-combobox/index.d.ts +1 -0
- package/dist/sky-combobox/index.js +1 -0
- package/dist/sky-combobox/sky-combobox.d.ts +313 -0
- package/dist/sky-combobox/sky-combobox.js +1146 -0
- package/dist/sky-combobox/sky-combobox.js.map +1 -0
- package/dist/sky-counter/index.d.ts +1 -0
- package/dist/sky-counter/index.js +1 -0
- package/dist/sky-counter/sky-counter.d.ts +130 -0
- package/dist/sky-counter/sky-counter.js +101 -0
- package/dist/sky-counter/sky-counter.js.map +1 -0
- package/dist/sky-dialog/index.d.ts +1 -0
- package/dist/sky-dialog/index.js +1 -0
- package/dist/sky-dialog/sky-dialog.d.ts +237 -0
- package/dist/sky-dialog/sky-dialog.js +265 -0
- package/dist/sky-dialog/sky-dialog.js.map +1 -0
- package/dist/sky-divider/index.d.ts +1 -0
- package/dist/sky-divider/index.js +1 -0
- package/dist/sky-divider/sky-divider.d.ts +120 -0
- package/dist/sky-divider/sky-divider.js +42 -0
- package/dist/sky-divider/sky-divider.js.map +1 -0
- package/dist/sky-drawer/index.d.ts +1 -0
- package/dist/sky-drawer/index.js +1 -0
- package/dist/sky-drawer/sky-drawer.d.ts +161 -0
- package/dist/sky-drawer/sky-drawer.js +177 -0
- package/dist/sky-drawer/sky-drawer.js.map +1 -0
- package/dist/sky-dropdown/index.d.ts +1 -0
- package/dist/sky-dropdown/index.js +1 -0
- package/dist/sky-dropdown/sky-dropdown.d.ts +252 -0
- package/dist/sky-dropdown/sky-dropdown.js +58 -0
- package/dist/sky-dropdown/sky-dropdown.js.map +1 -0
- package/dist/sky-dropdown-item/index.d.ts +1 -0
- package/dist/sky-dropdown-item/index.js +1 -0
- package/dist/sky-dropdown-item/sky-dropdown-item.d.ts +207 -0
- package/dist/sky-dropdown-item/sky-dropdown-item.js +341 -0
- package/dist/sky-dropdown-item/sky-dropdown-item.js.map +1 -0
- package/dist/sky-flexbar/index.d.ts +1 -0
- package/dist/sky-flexbar/index.js +1 -0
- package/dist/sky-flexbar/sky-flexbar.d.ts +189 -0
- package/dist/sky-flexbar/sky-flexbar.js +148 -0
- package/dist/sky-flexbar/sky-flexbar.js.map +1 -0
- package/dist/sky-flexbox/index.d.ts +1 -0
- package/dist/sky-flexbox/index.js +1 -0
- package/dist/sky-flexbox/sky-flexbox.d.ts +156 -0
- package/dist/sky-flexbox/sky-flexbox.js +40 -0
- package/dist/sky-flexbox/sky-flexbox.js.map +1 -0
- package/dist/sky-flexcol/index.d.ts +1 -0
- package/dist/sky-flexcol/index.js +1 -0
- package/dist/sky-flexcol/sky-flexcol.d.ts +154 -0
- package/dist/sky-flexcol/sky-flexcol.js +14 -0
- package/dist/sky-flexcol/sky-flexcol.js.map +1 -0
- package/dist/sky-flexitem/index.d.ts +1 -0
- package/dist/sky-flexitem/index.js +1 -0
- package/dist/sky-flexitem/sky-flexitem.d.ts +114 -0
- package/dist/sky-flexitem/sky-flexitem.js +45 -0
- package/dist/sky-flexitem/sky-flexitem.js.map +1 -0
- package/dist/sky-form/index.d.ts +1 -0
- package/dist/sky-form/index.js +1 -0
- package/dist/sky-form/sky-form.d.ts +286 -0
- package/dist/sky-form/sky-form.js +66 -0
- package/dist/sky-form/sky-form.js.map +1 -0
- package/dist/sky-grid/index.d.ts +1 -0
- package/dist/sky-grid/index.js +1 -0
- package/dist/sky-grid/sky-grid.d.ts +78 -0
- package/dist/sky-grid/sky-grid.js +40 -0
- package/dist/sky-grid/sky-grid.js.map +1 -0
- package/dist/sky-icon/index.d.ts +1 -0
- package/dist/sky-icon/index.js +1 -0
- package/dist/sky-icon/ion-local.json.js +2 -0
- package/dist/sky-icon/ion-local.json.js.map +1 -0
- package/dist/sky-icon/sky-icon.d.ts +123 -0
- package/dist/sky-icon/sky-icon.js +40 -0
- package/dist/sky-icon/sky-icon.js.map +1 -0
- package/dist/sky-image/index.d.ts +1 -0
- package/dist/sky-image/index.js +1 -0
- package/dist/sky-image/sky-image.d.ts +102 -0
- package/dist/sky-image/sky-image.js +29 -0
- package/dist/sky-image/sky-image.js.map +1 -0
- package/dist/sky-input/index.d.ts +1 -0
- package/dist/sky-input/index.js +1 -0
- package/dist/sky-input/sky-input.d.ts +345 -0
- package/dist/sky-input/sky-input.js +820 -0
- package/dist/sky-input/sky-input.js.map +1 -0
- package/dist/sky-list/index.d.ts +1 -0
- package/dist/sky-list/index.js +1 -0
- package/dist/sky-list/sky-list.d.ts +85 -0
- package/dist/sky-list/sky-list.js +41 -0
- package/dist/sky-list/sky-list.js.map +1 -0
- package/dist/sky-listitem/index.d.ts +1 -0
- package/dist/sky-listitem/index.js +1 -0
- package/dist/sky-listitem/sky-listitem.d.ts +76 -0
- package/dist/sky-listitem/sky-listitem.js +104 -0
- package/dist/sky-listitem/sky-listitem.js.map +1 -0
- package/dist/sky-navbar/index.d.ts +1 -0
- package/dist/sky-navbar/index.js +1 -0
- package/dist/sky-navbar/sky-navbar.d.ts +207 -0
- package/dist/sky-navbar/sky-navbar.js +521 -0
- package/dist/sky-navbar/sky-navbar.js.map +1 -0
- package/dist/sky-navpanel/index.d.ts +1 -0
- package/dist/sky-navpanel/index.js +1 -0
- package/dist/sky-navpanel/sky-navpanel.d.ts +186 -0
- package/dist/sky-navpanel/sky-navpanel.js +404 -0
- package/dist/sky-navpanel/sky-navpanel.js.map +1 -0
- package/dist/sky-notification/index.d.ts +1 -0
- package/dist/sky-notification/index.js +1 -0
- package/dist/sky-notification/sky-notification.d.ts +152 -0
- package/dist/sky-notification/sky-notification.js +456 -0
- package/dist/sky-notification/sky-notification.js.map +1 -0
- package/dist/sky-otp/index.d.ts +1 -0
- package/dist/sky-otp/index.js +1 -0
- package/dist/sky-otp/sky-otp.d.ts +101 -0
- package/dist/sky-otp/sky-otp.js +96 -0
- package/dist/sky-otp/sky-otp.js.map +1 -0
- package/dist/sky-overlay/index.d.ts +1 -0
- package/dist/sky-overlay/index.js +1 -0
- package/dist/sky-overlay/sky-overlay.d.ts +71 -0
- package/dist/sky-overlay/sky-overlay.js +26 -0
- package/dist/sky-overlay/sky-overlay.js.map +1 -0
- package/dist/sky-pagination/index.d.ts +1 -0
- package/dist/sky-pagination/index.js +1 -0
- package/dist/sky-pagination/sky-pagination.d.ts +167 -0
- package/dist/sky-pagination/sky-pagination.js +453 -0
- package/dist/sky-pagination/sky-pagination.js.map +1 -0
- package/dist/sky-progress/index.d.ts +1 -0
- package/dist/sky-progress/index.js +1 -0
- package/dist/sky-progress/sky-progress.d.ts +70 -0
- package/dist/sky-progress/sky-progress.js +87 -0
- package/dist/sky-progress/sky-progress.js.map +1 -0
- package/dist/sky-radio/index.d.ts +1 -0
- package/dist/sky-radio/index.js +1 -0
- package/dist/sky-radio/sky-radio.d.ts +118 -0
- package/dist/sky-radio/sky-radio.js +109 -0
- package/dist/sky-radio/sky-radio.js.map +1 -0
- package/dist/sky-radio-group/index.d.ts +1 -0
- package/dist/sky-radio-group/index.js +1 -0
- package/dist/sky-radio-group/sky-radio-group.d.ts +186 -0
- package/dist/sky-radio-group/sky-radio-group.js +239 -0
- package/dist/sky-radio-group/sky-radio-group.js.map +1 -0
- package/dist/sky-range/index.d.ts +1 -0
- package/dist/sky-range/index.js +1 -0
- package/dist/sky-range/sky-range.d.ts +110 -0
- package/dist/sky-range/sky-range.js +196 -0
- package/dist/sky-range/sky-range.js.map +1 -0
- package/dist/sky-row/index.d.ts +1 -0
- package/dist/sky-row/index.js +1 -0
- package/dist/sky-row/sky-row.d.ts +57 -0
- package/dist/sky-row/sky-row.js +6 -0
- package/dist/sky-row/sky-row.js.map +1 -0
- package/dist/sky-serial/index.d.ts +1 -0
- package/dist/sky-serial/index.js +1 -0
- package/dist/sky-serial/sky-serial.d.ts +127 -0
- package/dist/sky-serial/sky-serial.js +133 -0
- package/dist/sky-serial/sky-serial.js.map +1 -0
- package/dist/sky-sheet/index.d.ts +1 -0
- package/dist/sky-sheet/index.js +1 -0
- package/dist/sky-sheet/sky-sheet.d.ts +70 -0
- package/dist/sky-sheet/sky-sheet.js +47 -0
- package/dist/sky-sheet/sky-sheet.js.map +1 -0
- package/dist/sky-skeleton/index.d.ts +1 -0
- package/dist/sky-skeleton/index.js +1 -0
- package/dist/sky-skeleton/sky-skeleton.d.ts +80 -0
- package/dist/sky-skeleton/sky-skeleton.js +233 -0
- package/dist/sky-skeleton/sky-skeleton.js.map +1 -0
- package/dist/sky-slider/index.d.ts +1 -0
- package/dist/sky-slider/index.js +1 -0
- package/dist/sky-slider/sky-slider.d.ts +96 -0
- package/dist/sky-slider/sky-slider.js +139 -0
- package/dist/sky-slider/sky-slider.js.map +1 -0
- package/dist/sky-speeddial/index.d.ts +1 -0
- package/dist/sky-speeddial/index.js +1 -0
- package/dist/sky-speeddial/sky-speeddial.d.ts +86 -0
- package/dist/sky-speeddial/sky-speeddial.js +154 -0
- package/dist/sky-speeddial/sky-speeddial.js.map +1 -0
- package/dist/sky-spinner/index.d.ts +1 -0
- package/dist/sky-spinner/index.js +1 -0
- package/dist/sky-spinner/sky-spinner.d.ts +87 -0
- package/dist/sky-spinner/sky-spinner.js +334 -0
- package/dist/sky-spinner/sky-spinner.js.map +1 -0
- package/dist/sky-steps/index.d.ts +1 -0
- package/dist/sky-steps/index.js +1 -0
- package/dist/sky-steps/sky-steps.d.ts +170 -0
- package/dist/sky-steps/sky-steps.js +455 -0
- package/dist/sky-steps/sky-steps.js.map +1 -0
- package/dist/sky-switch/index.d.ts +1 -0
- package/dist/sky-switch/index.js +1 -0
- package/dist/sky-switch/sky-switch.d.ts +116 -0
- package/dist/sky-switch/sky-switch.js +191 -0
- package/dist/sky-switch/sky-switch.js.map +1 -0
- package/dist/sky-tab/index.d.ts +1 -0
- package/dist/sky-tab/index.js +1 -0
- package/dist/sky-tab/sky-tab.d.ts +188 -0
- package/dist/sky-tab/sky-tab.js +390 -0
- package/dist/sky-tab/sky-tab.js.map +1 -0
- package/dist/sky-tab-button/index.d.ts +1 -0
- package/dist/sky-tab-button/index.js +1 -0
- package/dist/sky-tab-button/sky-tab-button.d.ts +114 -0
- package/dist/sky-tab-button/sky-tab-button.js +167 -0
- package/dist/sky-tab-button/sky-tab-button.js.map +1 -0
- package/dist/sky-theme-provider/index.d.ts +1 -0
- package/dist/sky-theme-provider/index.js +1 -0
- package/dist/sky-theme-provider/sky-theme-provider.d.ts +169 -0
- package/dist/sky-theme-provider/sky-theme-provider.js +12 -0
- package/dist/sky-theme-provider/sky-theme-provider.js.map +1 -0
- package/dist/sky-theme-switcher/index.d.ts +1 -0
- package/dist/sky-theme-switcher/index.js +1 -0
- package/dist/sky-theme-switcher/sky-theme-switcher.d.ts +92 -0
- package/dist/sky-theme-switcher/sky-theme-switcher.js +43 -0
- package/dist/sky-theme-switcher/sky-theme-switcher.js.map +1 -0
- package/dist/sky-tooltip/index.d.ts +1 -0
- package/dist/sky-tooltip/index.js +1 -0
- package/dist/sky-tooltip/sky-tooltip.d.ts +156 -0
- package/dist/sky-tooltip/sky-tooltip.js +242 -0
- package/dist/sky-tooltip/sky-tooltip.js.map +1 -0
- package/package.json +475 -0
- package/plugins/rollup-plugin.d.ts +19 -0
- package/plugins/rollup-plugin.js +129 -0
- package/plugins/vite-plugin.d.ts +22 -0
- package/plugins/vite-plugin.js +116 -0
- package/plugins/webpack-plugin.d.ts +12 -0
- package/plugins/webpack-plugin.js +46 -0
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { LitElement, PropertyValues } from "lit";
|
|
2
|
+
export type SkyFlexbarDirection = "horizontal" | "vertical";
|
|
3
|
+
export type SkyFlexbarDirectionChangedDetail = {
|
|
4
|
+
flexDirection: SkyFlexbarDirection;
|
|
5
|
+
};
|
|
6
|
+
export type SkyFlexbarMenuToggleDetail = {
|
|
7
|
+
open: boolean;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* @element sky-flexbar
|
|
11
|
+
*
|
|
12
|
+
* @summary Responsive action bar that moves overflowing items into a hamburger menu.
|
|
13
|
+
*
|
|
14
|
+
* @status stable
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
*
|
|
17
|
+
* @documentation https://library.sky-ui.com/components/flexbar
|
|
18
|
+
* @dependency sky-icon
|
|
19
|
+
*
|
|
20
|
+
* @uiVModel isHamburgerOpen menu-toggle detail=open
|
|
21
|
+
*
|
|
22
|
+
* @slot - Default slot for visible bar items. Apply `class="menu-parent"` to each.
|
|
23
|
+
* @slot hamburger - Receives items that overflow the main bar.
|
|
24
|
+
*
|
|
25
|
+
* @property {boolean} isHamburgerOpen - Whether the overflow menu is open.
|
|
26
|
+
* @property {boolean} isFullyHidden - Whether all slotted items are currently overflowed.
|
|
27
|
+
* @property {number} gapThreshold - Reserved space in px used during overflow measurement.
|
|
28
|
+
* @property {SkyFlexbarDirection} flexDirection - Current layout direction.
|
|
29
|
+
* @property {number} stackAt - Width threshold (px) for switching to vertical mode; `0` disables.
|
|
30
|
+
* @property {string} partialIcon - Icon shown when only some items overflow.
|
|
31
|
+
* @property {string} fullIcon - Icon shown when all items overflow.
|
|
32
|
+
*
|
|
33
|
+
* @fires {CustomEvent<SkyFlexbarDirectionChangedDetail>} flex-direction-changed - Fired when layout direction changes.
|
|
34
|
+
* @fires {CustomEvent<SkyFlexbarMenuToggleDetail>} menu-toggle - Fired when the hamburger menu opens or closes.
|
|
35
|
+
* @method openMenu Opens the hamburger menu.
|
|
36
|
+
* @method closeMenu Closes the hamburger menu.
|
|
37
|
+
* @method toggleMenu Toggles the hamburger menu state.
|
|
38
|
+
* @method recalculateLayout Re-runs layout and overflow measurement.
|
|
39
|
+
*
|
|
40
|
+
* @csspart container - The outer flex container.
|
|
41
|
+
* @csspart hamburger-button - The hamburger/ellipsis toggle button.
|
|
42
|
+
* @csspart menu - The dropdown menu container.
|
|
43
|
+
* @csspart menu-inner - Wrapper inside the dropdown menu.
|
|
44
|
+
*
|
|
45
|
+
* @Behavior
|
|
46
|
+
* - Automatically measures available space using ResizeObserver
|
|
47
|
+
* - Moves overflowing `.menu-parent` items into hamburger menu
|
|
48
|
+
* - Switches between horizontal and vertical layouts based on width
|
|
49
|
+
* - Uses PopoverController for dropdown positioning and management
|
|
50
|
+
* - Maintains accessibility with proper ARIA attributes
|
|
51
|
+
*
|
|
52
|
+
* - Items with `class="menu-parent"` are measured for fit
|
|
53
|
+
* - Overflowing items are moved to `slot="hamburger"`
|
|
54
|
+
* - Hamburger button shows different icons based on overflow state
|
|
55
|
+
* - Menu automatically closes when all items fit in main bar
|
|
56
|
+
*
|
|
57
|
+
* - `stackAt` property controls vertical stacking breakpoint
|
|
58
|
+
* - Dynamically switches between horizontal/vertical layouts
|
|
59
|
+
* - Emits `flex-direction-changed` events for child components
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```html
|
|
63
|
+
* <sky-flexbar stack-at="640" partial-icon="ion:ellipsis-horizontal" full-icon="ion:menu">
|
|
64
|
+
* <sky-flexitem class="menu-parent">
|
|
65
|
+
* <span slot="title">Home</span>
|
|
66
|
+
* <span slot="content">Dashboard</span>
|
|
67
|
+
* </sky-flexitem>
|
|
68
|
+
* <sky-flexitem class="menu-parent">
|
|
69
|
+
* <span slot="title">Reports</span>
|
|
70
|
+
* <span slot="content">Monthly</span>
|
|
71
|
+
* </sky-flexitem>
|
|
72
|
+
* </sky-flexbar>
|
|
73
|
+
* ```
|
|
74
|
+
* ```vue
|
|
75
|
+
* <template>
|
|
76
|
+
* <sky-flexbar stack-at="640">
|
|
77
|
+
* <sky-flexitem class="menu-parent"><span slot="title">Home</span><span slot="content">Dashboard</span></sky-flexitem>
|
|
78
|
+
* <sky-flexitem class="menu-parent"><span slot="title">Reports</span><span slot="content">Monthly</span></sky-flexitem>
|
|
79
|
+
* </sky-flexbar>
|
|
80
|
+
* </template>
|
|
81
|
+
* ```
|
|
82
|
+
* ```jsx
|
|
83
|
+
* export default function Demo() {
|
|
84
|
+
* return (
|
|
85
|
+
* <sky-flexbar stack-at="640">
|
|
86
|
+
* <sky-flexitem class="menu-parent"><span slot="title">Home</span><span slot="content">Dashboard</span></sky-flexitem>
|
|
87
|
+
* <sky-flexitem class="menu-parent"><span slot="title">Reports</span><span slot="content">Monthly</span></sky-flexitem>
|
|
88
|
+
* </sky-flexbar>
|
|
89
|
+
* );
|
|
90
|
+
* }
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export declare class SkyFlexbar extends LitElement {
|
|
94
|
+
static dependencies: Record<string, CustomElementConstructor>;
|
|
95
|
+
/**
|
|
96
|
+
* Whether the dropdown menu is open.
|
|
97
|
+
* @public
|
|
98
|
+
*/
|
|
99
|
+
isHamburgerOpen: boolean;
|
|
100
|
+
/**
|
|
101
|
+
* True if all items overflow into the menu.
|
|
102
|
+
* @public
|
|
103
|
+
*/
|
|
104
|
+
isFullyHidden: boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Space (px) reserved for paddings/margins when measuring.
|
|
107
|
+
* @public
|
|
108
|
+
*/
|
|
109
|
+
gapThreshold: number;
|
|
110
|
+
/**
|
|
111
|
+
* Current layout direction.
|
|
112
|
+
* @public
|
|
113
|
+
*/
|
|
114
|
+
flexDirection: SkyFlexbarDirection;
|
|
115
|
+
/**
|
|
116
|
+
* Stack vertically when component width is below this (px). `0` disables.
|
|
117
|
+
* @public
|
|
118
|
+
*/
|
|
119
|
+
stackAt: number;
|
|
120
|
+
/**
|
|
121
|
+
* Icon name for "some items overflow" state.
|
|
122
|
+
* @public
|
|
123
|
+
*/
|
|
124
|
+
partialIcon: string;
|
|
125
|
+
/**
|
|
126
|
+
* Icon name for "all items overflow" state.
|
|
127
|
+
* @public
|
|
128
|
+
*/
|
|
129
|
+
fullIcon: string;
|
|
130
|
+
/** @private */
|
|
131
|
+
private _ro?;
|
|
132
|
+
/** @private */
|
|
133
|
+
private _itemElements;
|
|
134
|
+
/** @private */
|
|
135
|
+
private _scheduled;
|
|
136
|
+
/** @private */
|
|
137
|
+
private _initialized;
|
|
138
|
+
/** @private */
|
|
139
|
+
private _mo?;
|
|
140
|
+
/** @private */
|
|
141
|
+
private hamburgerEl;
|
|
142
|
+
/** @private */
|
|
143
|
+
private dropdownPopover;
|
|
144
|
+
static styles: import("lit").CSSResult;
|
|
145
|
+
/** @protected */
|
|
146
|
+
protected firstUpdated(_changedProperties: PropertyValues): void;
|
|
147
|
+
/** @protected */
|
|
148
|
+
connectedCallback(): void;
|
|
149
|
+
/** @protected */
|
|
150
|
+
disconnectedCallback(): void;
|
|
151
|
+
/**
|
|
152
|
+
* Collects all .menu-parent elements for measurement.
|
|
153
|
+
* @private
|
|
154
|
+
*/
|
|
155
|
+
private _collectItems;
|
|
156
|
+
/**
|
|
157
|
+
* Schedules a measurement for the next animation frame.
|
|
158
|
+
* @private
|
|
159
|
+
*/
|
|
160
|
+
private _scheduleMeasure;
|
|
161
|
+
/**
|
|
162
|
+
* Measures available space and manages item overflow.
|
|
163
|
+
* @private
|
|
164
|
+
*/
|
|
165
|
+
private _measure;
|
|
166
|
+
/**
|
|
167
|
+
* Opens the hamburger menu.
|
|
168
|
+
* @public
|
|
169
|
+
*/
|
|
170
|
+
openMenu(): void;
|
|
171
|
+
/**
|
|
172
|
+
* Closes the hamburger menu.
|
|
173
|
+
* @public
|
|
174
|
+
*/
|
|
175
|
+
closeMenu(): void;
|
|
176
|
+
/**
|
|
177
|
+
* Toggles the hamburger menu.
|
|
178
|
+
* @public
|
|
179
|
+
*/
|
|
180
|
+
toggleMenu(): void;
|
|
181
|
+
/**
|
|
182
|
+
* Forces a recalculation of item layout.
|
|
183
|
+
* Useful when items change size dynamically.
|
|
184
|
+
* @public
|
|
185
|
+
*/
|
|
186
|
+
recalculateLayout(): void;
|
|
187
|
+
/** @protected */
|
|
188
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
189
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import{__decorate as e,__metadata as t}from"tslib";import{LitElement as r,css as i,html as s}from"lit";import{property as o,state as n,query as a,customElement as d}from"lit/decorators.js";import{when as l}from"lit/directives/when.js";import{PopoverController as p}from"../helper/controllers/popover-controller.js";import{SkyIcon as h}from"../sky-icon/sky-icon.js";let c=class extends r{constructor(){super(...arguments),this.isHamburgerOpen=!1,this.isFullyHidden=!1,this.gapThreshold=100,this.flexDirection="horizontal",this.stackAt=500,this.partialIcon="ion:ellipsis-horizontal",this.fullIcon="ion:menu",this._itemElements=[],this._scheduled=!1,this._initialized=!1,this.dropdownPopover=new p(this,{getAnchor:()=>this,getPopover:()=>this.hamburgerEl,cssVarLeft:"--sky-dd-left",cssVarTop:"--sky-dd-top",cssVarWidth:"--sky-dd-width",getPlacement:()=>"bottom",getAlign:()=>"start",getGap:()=>6,getPadding:()=>8,getMatchAnchorWidth:()=>!0,getMaxWidthToViewport:()=>!0,getMaxWidthMode:()=>"cap",getFlip:()=>!0,getFlipOrder:()=>[],getAnimateReposition:()=>!0,getRepositionMs:()=>160,getCloseOnEscape:()=>!0,getCloseOnOutside:()=>!0,getRestoreFocusOnClose:()=>!0,onOpenChange:(e,t)=>{this.isHamburgerOpen=e,this.dispatchEvent(new CustomEvent("menu-toggle",{detail:{open:e},bubbles:!0,composed:!0}))}})}static{this.dependencies={"sky-icon":h}}static{this.styles=i`
|
|
2
|
+
:host {
|
|
3
|
+
display: flex;
|
|
4
|
+
align-items: center;
|
|
5
|
+
gap: 8px;
|
|
6
|
+
width: 100%;
|
|
7
|
+
position: relative;
|
|
8
|
+
box-sizing: border-box;
|
|
9
|
+
font-family: var(--sky-font);
|
|
10
|
+
color: var(--sky-text-primary, #000);
|
|
11
|
+
border: var(--sky-border-primary);
|
|
12
|
+
background-color: var(--sky-glass-primary);
|
|
13
|
+
padding: 5px;
|
|
14
|
+
border-radius: var(--sky-radius-secondary);
|
|
15
|
+
box-shadow: var(--sky-box-shadow-primary);
|
|
16
|
+
transition: border-radius 0.3s ease;
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
:host::before {
|
|
21
|
+
content: "";
|
|
22
|
+
position: absolute;
|
|
23
|
+
inset: 0;
|
|
24
|
+
z-index: -1;
|
|
25
|
+
backdrop-filter: var(--sky-blur-primary) var(--sky-brightness-primary)
|
|
26
|
+
var(--sky-saturation-primary);
|
|
27
|
+
-webkit-backdrop-filter: var(--sky-blur-primary)
|
|
28
|
+
var(--sky-brightness-primary) var(--sky-saturation-primary);
|
|
29
|
+
border-radius: inherit;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.main-container {
|
|
33
|
+
display: flex;
|
|
34
|
+
align-items: center;
|
|
35
|
+
gap: 8px;
|
|
36
|
+
flex: 1;
|
|
37
|
+
min-width: 0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.main-items {
|
|
41
|
+
display: flex;
|
|
42
|
+
align-items: center;
|
|
43
|
+
gap: 8px;
|
|
44
|
+
flex: 1;
|
|
45
|
+
min-width: 0;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.spacer {
|
|
49
|
+
flex: 1 1 auto;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.hamburger-btn {
|
|
53
|
+
display: none;
|
|
54
|
+
align-items: center;
|
|
55
|
+
justify-content: center;
|
|
56
|
+
cursor: pointer;
|
|
57
|
+
padding: 6px;
|
|
58
|
+
width: 28px;
|
|
59
|
+
height: 28px;
|
|
60
|
+
min-width: 28px;
|
|
61
|
+
min-height: 28px;
|
|
62
|
+
flex: 0 0 auto;
|
|
63
|
+
margin-left: auto;
|
|
64
|
+
line-height: 1;
|
|
65
|
+
font-size: 16px;
|
|
66
|
+
color: var(--sky-text-primary);
|
|
67
|
+
background: var(--sky-hover-primary);
|
|
68
|
+
border: var(--sky-border-primary);
|
|
69
|
+
border-radius: var(--sky-radius-secondary);
|
|
70
|
+
transition:
|
|
71
|
+
background-color 0.2s ease,
|
|
72
|
+
color 0.2s ease;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.hamburger-btn:hover {
|
|
76
|
+
color: var(--sky-active-primary);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
sky-icon {
|
|
80
|
+
display: inline-block;
|
|
81
|
+
width: 1em;
|
|
82
|
+
height: 1em;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.hamburger-menu {
|
|
86
|
+
position: fixed;
|
|
87
|
+
top: var(--sky-dd-top);
|
|
88
|
+
left: var(--sky-dd-left);
|
|
89
|
+
width: var(--sky-dd-width);
|
|
90
|
+
margin: 0;
|
|
91
|
+
box-shadow: var(--sky-box-shadow-primary);
|
|
92
|
+
border-radius: var(--sky-radius-secondary);
|
|
93
|
+
background-color: var(--sky-glass-primary);
|
|
94
|
+
backdrop-filter: var(--sky-blur-primary) var(--sky-brightness-primary)
|
|
95
|
+
var(--sky-saturation-primary);
|
|
96
|
+
-webkit-backdrop-filter: var(--sky-blur-primary)
|
|
97
|
+
var(--sky-brightness-primary) var(--sky-saturation-primary);
|
|
98
|
+
border: var(--sky-border-primary);
|
|
99
|
+
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.hamburger-inner {
|
|
103
|
+
display: flex;
|
|
104
|
+
flex-wrap: wrap;
|
|
105
|
+
gap: 8px;
|
|
106
|
+
box-sizing: border-box;
|
|
107
|
+
}
|
|
108
|
+
`}firstUpdated(e){super.firstUpdated(e),this.dropdownPopover.refreshTargets()}connectedCallback(){super.connectedCallback(),this._ro=new ResizeObserver(()=>this._scheduleMeasure()),this._ro.observe(this),this._mo=new MutationObserver(()=>this._collectItems()),this._mo.observe(this,{childList:!0,subtree:!0}),this._collectItems(),this.updateComplete.then(()=>this._measure())}disconnectedCallback(){super.disconnectedCallback(),this._ro?.disconnect(),this._mo?.disconnect()}_collectItems(){this._itemElements=Array.from(this.querySelectorAll(".menu-parent")),this._scheduleMeasure()}_scheduleMeasure(){this._scheduled||(this._scheduled=!0,requestAnimationFrame(()=>{this._scheduled=!1,this._measure()}))}_measure(){if(0===this._itemElements.length)return;for(const e of this._itemElements)e.removeAttribute("slot");const e=this.getBoundingClientRect().width,t=this.stackAt>0&&e<this.stackAt?"vertical":"horizontal";this._initialized&&t!==this.flexDirection?(this.flexDirection=t,this.dispatchEvent(new CustomEvent("flex-direction-changed",{detail:{flexDirection:t},bubbles:!0,composed:!0}))):this.flexDirection=t;const r=this.shadowRoot?.querySelector(".main-container"),i=this.shadowRoot?.querySelector(".hamburger-btn"),s=i&&i.offsetWidth||28,o=r?r.offsetWidth-this.gapThreshold-(s+8):0;let n=0;const a=[];for(const e of this._itemElements){n+=e.getBoundingClientRect().width,n>o&&a.push(e)}const d=a.length>0;i&&(i.style.display=d?"flex":"none");for(const e of a)e.setAttribute("slot","hamburger");this.isFullyHidden=a.length===this._itemElements.length,d||this.dropdownPopover.closePopover(),this._initialized||(this._initialized=!0)}openMenu(){this.dropdownPopover.openPopover()}closeMenu(){this.dropdownPopover.closePopover()}toggleMenu(){this.dropdownPopover.toggle()}recalculateLayout(){this._measure()}render(){const e="menu-"+(this.id||Math.random().toString(36).slice(2));return s`
|
|
109
|
+
<div class="main-container" part="container">
|
|
110
|
+
<div class="main-items">
|
|
111
|
+
<!-- visible items -->
|
|
112
|
+
<slot></slot>
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
<div class="spacer"></div>
|
|
116
|
+
|
|
117
|
+
<button
|
|
118
|
+
class="hamburger-btn"
|
|
119
|
+
part="hamburger-button"
|
|
120
|
+
@click=${()=>this.dropdownPopover.toggle()}
|
|
121
|
+
@keydown=${e=>("Enter"===e.key||" "===e.key)&&(e.preventDefault(),this.dropdownPopover.toggle())}
|
|
122
|
+
aria-label="More"
|
|
123
|
+
aria-haspopup="menu"
|
|
124
|
+
.aria-expanded=${String(this.isHamburgerOpen)}
|
|
125
|
+
aria-controls=${e}
|
|
126
|
+
tabindex="0"
|
|
127
|
+
>
|
|
128
|
+
${l(this.isFullyHidden,()=>s`<sky-icon icon="${this.fullIcon}"></sky-icon>`,()=>s`<sky-icon icon="${this.partialIcon}"></sky-icon>`)}
|
|
129
|
+
</button>
|
|
130
|
+
</div>
|
|
131
|
+
|
|
132
|
+
<div
|
|
133
|
+
id=${e}
|
|
134
|
+
class="hamburger-menu"
|
|
135
|
+
@toggle=${this.dropdownPopover.onToggle}
|
|
136
|
+
popover="manual"
|
|
137
|
+
part="menu"
|
|
138
|
+
role="menu"
|
|
139
|
+
?inert=${!this.isHamburgerOpen}
|
|
140
|
+
aria-label="Additional menu items"
|
|
141
|
+
>
|
|
142
|
+
<div class="hamburger-inner" part="menu-inner">
|
|
143
|
+
<!-- overflow items (same nodes, just slot="hamburger") -->
|
|
144
|
+
<slot name="hamburger"></slot>
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
`}};e([o({type:Boolean}),t("design:type",Object)],c.prototype,"isHamburgerOpen",void 0),e([o({type:Boolean}),t("design:type",Object)],c.prototype,"isFullyHidden",void 0),e([o({type:Number}),t("design:type",Object)],c.prototype,"gapThreshold",void 0),e([o({type:String,reflect:!0}),t("design:type",String)],c.prototype,"flexDirection",void 0),e([o({type:Number}),t("design:type",Object)],c.prototype,"stackAt",void 0),e([o({type:String}),t("design:type",Object)],c.prototype,"partialIcon",void 0),e([o({type:String}),t("design:type",Object)],c.prototype,"fullIcon",void 0),e([n(),t("design:type",ResizeObserver)],c.prototype,"_ro",void 0),e([n(),t("design:type",Array)],c.prototype,"_itemElements",void 0),e([a(".hamburger-menu"),t("design:type",HTMLElement)],c.prototype,"hamburgerEl",void 0),c=e([d("sky-flexbar")],c);export{c as SkyFlexbar};
|
|
148
|
+
//# sourceMappingURL=sky-flexbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sky-flexbar.js","sources":["../../src/sky-flexbar/sky-flexbar.ts"],"sourcesContent":[null],"names":["SkyFlexbar","LitElement","constructor","this","isHamburgerOpen","isFullyHidden","gapThreshold","flexDirection","stackAt","partialIcon","fullIcon","_itemElements","_scheduled","_initialized","dropdownPopover","PopoverController","getAnchor","getPopover","hamburgerEl","cssVarLeft","cssVarTop","cssVarWidth","getPlacement","getAlign","getGap","getPadding","getMatchAnchorWidth","getMaxWidthToViewport","getMaxWidthMode","getFlip","getFlipOrder","getAnimateReposition","getRepositionMs","getCloseOnEscape","getCloseOnOutside","getRestoreFocusOnClose","onOpenChange","open","meta","dispatchEvent","CustomEvent","detail","bubbles","composed","dependencies","SkyIcon","styles","css","firstUpdated","_changedProperties","super","refreshTargets","connectedCallback","_ro","ResizeObserver","_scheduleMeasure","observe","_mo","MutationObserver","_collectItems","childList","subtree","updateComplete","then","_measure","disconnectedCallback","disconnect","Array","from","querySelectorAll","requestAnimationFrame","length","item","removeAttribute","w","getBoundingClientRect","width","newDir","mainContainer","shadowRoot","querySelector","btn","btnWidth","offsetWidth","available","total","hidden","el","push","showHamburger","style","display","setAttribute","closePopover","openMenu","openPopover","closeMenu","toggleMenu","toggle","recalculateLayout","render","menuId","id","Math","random","toString","slice","html","e","key","preventDefault","String","when","onToggle","__decorate","property","type","Boolean","prototype","Number","reflect","state","query","HTMLElement","customElement"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./sky-flexbox";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './sky-flexbox.js';
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
export type SkyFlexboxDirection = "row" | "row-reverse" | "column" | "column-reverse";
|
|
3
|
+
export type SkyFlexboxWrap = "nowrap" | "wrap" | "wrap-reverse";
|
|
4
|
+
export type SkyFlexboxJustify = "flex-start" | "center" | "flex-end" | "space-between" | "space-around" | "space-evenly";
|
|
5
|
+
export type SkyFlexboxAlign = "stretch" | "flex-start" | "center" | "flex-end" | "baseline";
|
|
6
|
+
export type SkyFlexboxAlignContent = "normal" | "stretch" | "center" | "start" | "end" | "flex-start" | "flex-end" | "space-between" | "space-around" | "space-evenly";
|
|
7
|
+
/**
|
|
8
|
+
* @element sky-flexbox
|
|
9
|
+
*
|
|
10
|
+
* @summary Flexbox container with grid-like span support for slotted children.
|
|
11
|
+
*
|
|
12
|
+
* @status stable
|
|
13
|
+
* @since 1.0.0
|
|
14
|
+
*
|
|
15
|
+
* @documentation https://library.sky-ui.com/components/flexbox
|
|
16
|
+
*
|
|
17
|
+
* @slot - Default slot for flex items (`<sky-flexcol>` or plain elements with `span` attributes).
|
|
18
|
+
*
|
|
19
|
+
* @property {SkyFlexboxDirection} direction - Flex direction.
|
|
20
|
+
* @property {SkyFlexboxWrap} wrap - Flex wrap behavior.
|
|
21
|
+
* @property {SkyFlexboxJustify} justify - Main-axis alignment.
|
|
22
|
+
* @property {SkyFlexboxAlign} align - Cross-axis alignment.
|
|
23
|
+
* @property {SkyFlexboxAlignContent} alignContent - Multi-line cross-axis distribution.
|
|
24
|
+
* @property {string} gap - Shared row/column gap value.
|
|
25
|
+
* @property {string | undefined} gapX - Horizontal gap override.
|
|
26
|
+
* @property {string | undefined} gapY - Vertical gap override.
|
|
27
|
+
* @property {number} col - Total column count used for span calculations.
|
|
28
|
+
*
|
|
29
|
+
* @fires {Event} slotchange - Fired when slotted children change.
|
|
30
|
+
* @method recalculateSpans Recomputes slotted child span CSS variables.
|
|
31
|
+
*
|
|
32
|
+
* @csspart container - The flex container element.
|
|
33
|
+
*
|
|
34
|
+
* @Behavior
|
|
35
|
+
* - Implements CSS Flexbox with custom property-based configuration
|
|
36
|
+
* - Supports responsive span calculations based on column grid system
|
|
37
|
+
* - Automatically manages CSS custom properties for child elements
|
|
38
|
+
* - Handles responsive breakpoints through span attributes
|
|
39
|
+
*
|
|
40
|
+
* - Uses a configurable column count (default: 12)
|
|
41
|
+
* - Calculates item widths based on span values (1-col through total columns)
|
|
42
|
+
* - Supports responsive spans: `span-lg`, `span-md`, `span-sm`, `span-xs`
|
|
43
|
+
* - Clamps span values to valid range (1 to column count)
|
|
44
|
+
*
|
|
45
|
+
* - Supports unified `gap` property
|
|
46
|
+
* - Optional `gapX` and `gapY` for separate horizontal/vertical spacing
|
|
47
|
+
* - Gap values can use any CSS unit (px, rem, em, %, etc.)
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```html
|
|
51
|
+
* <sky-flexbox col="12" gap="16px">
|
|
52
|
+
* <sky-flexcol span="8" span-md="12">
|
|
53
|
+
* Main content
|
|
54
|
+
* </sky-flexcol>
|
|
55
|
+
* <sky-flexcol span="4" span-md="12">
|
|
56
|
+
* Sidebar
|
|
57
|
+
* </sky-flexcol>
|
|
58
|
+
* </sky-flexbox>
|
|
59
|
+
* ```
|
|
60
|
+
* ```vue
|
|
61
|
+
* <template>
|
|
62
|
+
* <sky-flexbox col="12" gap="16px">
|
|
63
|
+
* <sky-flexcol span="8" span-md="12">Main content</sky-flexcol>
|
|
64
|
+
* <sky-flexcol span="4" span-md="12">Sidebar</sky-flexcol>
|
|
65
|
+
* </sky-flexbox>
|
|
66
|
+
* </template>
|
|
67
|
+
* ```
|
|
68
|
+
* ```jsx
|
|
69
|
+
* export default function Demo() {
|
|
70
|
+
* return (
|
|
71
|
+
* <sky-flexbox col="12" gap="16px">
|
|
72
|
+
* <sky-flexcol span="8" span-md="12">Main content</sky-flexcol>
|
|
73
|
+
* <sky-flexcol span="4" span-md="12">Sidebar</sky-flexcol>
|
|
74
|
+
* </sky-flexbox>
|
|
75
|
+
* );
|
|
76
|
+
* }
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export declare class SkyFlexbox extends LitElement {
|
|
80
|
+
/**
|
|
81
|
+
* Flex direction.
|
|
82
|
+
* @public
|
|
83
|
+
*/
|
|
84
|
+
direction: SkyFlexboxDirection;
|
|
85
|
+
/**
|
|
86
|
+
* Wrap behavior.
|
|
87
|
+
* @public
|
|
88
|
+
*/
|
|
89
|
+
wrap: SkyFlexboxWrap;
|
|
90
|
+
/**
|
|
91
|
+
* Main axis justification.
|
|
92
|
+
* @public
|
|
93
|
+
*/
|
|
94
|
+
justify: SkyFlexboxJustify;
|
|
95
|
+
/**
|
|
96
|
+
* Cross axis alignment.
|
|
97
|
+
* @public
|
|
98
|
+
*/
|
|
99
|
+
align: SkyFlexboxAlign;
|
|
100
|
+
/**
|
|
101
|
+
* Multi-line alignment (when wrapping).
|
|
102
|
+
* @public
|
|
103
|
+
*/
|
|
104
|
+
alignContent: SkyFlexboxAlignContent;
|
|
105
|
+
/**
|
|
106
|
+
* Shorthand gap; used if gapX/gapY not provided.
|
|
107
|
+
* @public
|
|
108
|
+
*/
|
|
109
|
+
gap: string;
|
|
110
|
+
/**
|
|
111
|
+
* Column gap.
|
|
112
|
+
* @public
|
|
113
|
+
*/
|
|
114
|
+
gapX?: string;
|
|
115
|
+
/**
|
|
116
|
+
* Row gap.
|
|
117
|
+
* @public
|
|
118
|
+
*/
|
|
119
|
+
gapY?: string;
|
|
120
|
+
/**
|
|
121
|
+
* Total columns used for span calculation.
|
|
122
|
+
* @public
|
|
123
|
+
*/
|
|
124
|
+
col: number;
|
|
125
|
+
static styles: import("lit").CSSResult;
|
|
126
|
+
/** @protected */
|
|
127
|
+
firstUpdated(): void;
|
|
128
|
+
/** @protected */
|
|
129
|
+
updated(changed: Map<string | number | symbol, unknown>): void;
|
|
130
|
+
/**
|
|
131
|
+
* Syncs component properties to CSS custom properties.
|
|
132
|
+
* @private
|
|
133
|
+
*/
|
|
134
|
+
private syncVars;
|
|
135
|
+
/**
|
|
136
|
+
* Forces recalculation of spans for all child elements.
|
|
137
|
+
* Useful when dynamically adding/removing items.
|
|
138
|
+
* @public
|
|
139
|
+
*/
|
|
140
|
+
recalculateSpans(): void;
|
|
141
|
+
/** @protected */
|
|
142
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
143
|
+
/**
|
|
144
|
+
* Reads span attributes off slotted children and maps them to CSS vars:
|
|
145
|
+
* span, span-lg, span-md, span-sm, span-xs
|
|
146
|
+
* @private
|
|
147
|
+
*/
|
|
148
|
+
private updateSpans;
|
|
149
|
+
/**
|
|
150
|
+
* Clamps span value to valid range (1 to column count).
|
|
151
|
+
* @param raw - Raw span value from attribute
|
|
152
|
+
* @returns Clamped number or null if invalid
|
|
153
|
+
* @private
|
|
154
|
+
*/
|
|
155
|
+
private clampSpan;
|
|
156
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import{__decorate as t,__metadata as n}from"tslib";import{LitElement as s,css as a,html as i}from"lit";import{property as e,customElement as r}from"lit/decorators.js";let p=class extends s{constructor(){super(...arguments),this.direction="row",this.wrap="wrap",this.justify="flex-start",this.align="stretch",this.alignContent="normal",this.gap="16px",this.col=12,this.updateSpans=()=>{const t=this.shadowRoot?.querySelector("slot")?.assignedElements({flatten:!0})??[];for(const n of t){if(!(n instanceof HTMLElement))continue;const t=n,s=this.clampSpan(null!=t.span?String(t.span):null),a=this.clampSpan(null!=t.spanLg?String(t.spanLg):null),i=this.clampSpan(null!=t.spanMd?String(t.spanMd):null),e=this.clampSpan(null!=t.spanSm?String(t.spanSm):null),r=this.clampSpan(null!=t.spanXs?String(t.spanXs):null);s&&n.style.setProperty("--span",String(s)),a&&n.style.setProperty("--span-lg",String(a)),i&&n.style.setProperty("--span-md",String(i)),e&&n.style.setProperty("--span-sm",String(e)),r&&n.style.setProperty("--span-xs",String(r))}}}static{this.styles=a`
|
|
2
|
+
:host {
|
|
3
|
+
display: block;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.flex-container {
|
|
7
|
+
display: flex;
|
|
8
|
+
box-sizing: border-box;
|
|
9
|
+
flex-wrap: var(--wrap, wrap);
|
|
10
|
+
gap: var(--gap-y, var(--gap, 16px)) var(--gap-x, var(--gap, 16px));
|
|
11
|
+
justify-content: var(--justify, flex-start);
|
|
12
|
+
align-items: var(--align, stretch);
|
|
13
|
+
align-content: var(--align-content, normal);
|
|
14
|
+
flex-direction: var(--direction, row);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* Default behaviour for any slotted child: */
|
|
18
|
+
::slotted(*) {
|
|
19
|
+
/* Current span, responsive-aware */
|
|
20
|
+
--span-current: var(--span, 1);
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Calculate width per column:
|
|
24
|
+
* columnWidth = (100% - (columns - 1) * gapX) / columns
|
|
25
|
+
* itemWidth = columnWidth * span
|
|
26
|
+
*/
|
|
27
|
+
flex-basis: calc(
|
|
28
|
+
(
|
|
29
|
+
(100% - (var(--columns, 12) - 1) * var(--gap-x, var(--gap, 16px))) /
|
|
30
|
+
var(--columns, 12)
|
|
31
|
+
) *
|
|
32
|
+
var(--span-current)
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
`}firstUpdated(){this.syncVars(),this.updateSpans()}updated(t){(t.has("wrap")||t.has("gap")||t.has("gapX")||t.has("gapY")||t.has("col")||t.has("justify")||t.has("direction")||t.has("align")||t.has("alignContent"))&&this.syncVars(),t.has("col")&&this.updateSpans()}syncVars(){const t={"--wrap":this.wrap,"--gap":this.gap,"--gap-x":this.gapX??this.gap,"--gap-y":this.gapY??this.gap,"--columns":String(this.col),"--justify":this.justify,"--direction":this.direction,"--align":this.align,"--align-content":this.alignContent};Object.entries(t).forEach(([t,n])=>this.style.setProperty(t,n))}recalculateSpans(){this.updateSpans()}render(){return i`
|
|
36
|
+
<div class="flex-container" part="container">
|
|
37
|
+
<slot @slotchange=${this.updateSpans}></slot>
|
|
38
|
+
</div>
|
|
39
|
+
`}clampSpan(t){if(!t)return null;return Math.max(1,Math.min(this.col,Number(t)||1))}};t([e({type:String}),n("design:type",String)],p.prototype,"direction",void 0),t([e({type:String}),n("design:type",String)],p.prototype,"wrap",void 0),t([e({type:String}),n("design:type",String)],p.prototype,"justify",void 0),t([e({type:String}),n("design:type",String)],p.prototype,"align",void 0),t([e({type:String}),n("design:type",String)],p.prototype,"alignContent",void 0),t([e({type:String}),n("design:type",String)],p.prototype,"gap",void 0),t([e({type:String}),n("design:type",String)],p.prototype,"gapX",void 0),t([e({type:String}),n("design:type",String)],p.prototype,"gapY",void 0),t([e({type:Number}),n("design:type",Number)],p.prototype,"col",void 0),p=t([r("sky-flexbox")],p);export{p as SkyFlexbox};
|
|
40
|
+
//# sourceMappingURL=sky-flexbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sky-flexbox.js","sources":["../../src/sky-flexbox/sky-flexbox.ts"],"sourcesContent":[null],"names":["SkyFlexbox","LitElement","constructor","this","direction","wrap","justify","align","alignContent","gap","col","updateSpans","nodes","shadowRoot","querySelector","assignedElements","flatten","el","HTMLElement","elAny","base","clampSpan","span","String","lg","spanLg","md","spanMd","sm","spanSm","xs","spanXs","style","setProperty","styles","css","firstUpdated","syncVars","updated","changed","has","gapX","gapY","Object","entries","forEach","k","v","recalculateSpans","render","html","raw","Math","max","min","Number","__decorate","property","type","prototype","customElement"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./sky-flexcol";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './sky-flexcol.js';
|