@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,101 @@
|
|
|
1
|
+
import { PropertyValues } from "lit";
|
|
2
|
+
import { FormControlBase, FormState } from "../helper/internals/form-control-base";
|
|
3
|
+
export type SkyOtpValidation = (value: string) => true | string;
|
|
4
|
+
export type SkyOtpValueChangedDetail = {
|
|
5
|
+
value: string;
|
|
6
|
+
otp: string;
|
|
7
|
+
};
|
|
8
|
+
export type SkyOtpValueClearedDetail = {
|
|
9
|
+
value: "";
|
|
10
|
+
};
|
|
11
|
+
export type SkyOtpValidationErrorDetail = {
|
|
12
|
+
errors: string[];
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* @element sky-otp
|
|
16
|
+
*
|
|
17
|
+
* @summary Segmented OTP/code input with masking, paste support, and commit-based change events.
|
|
18
|
+
*
|
|
19
|
+
* @status stable
|
|
20
|
+
* @since 1.0.0
|
|
21
|
+
*
|
|
22
|
+
* @documentation https://library.sky-ui.com/components/otp
|
|
23
|
+
*
|
|
24
|
+
* @uiVModel value value-changed
|
|
25
|
+
*
|
|
26
|
+
* @property {number} length - Number of OTP characters.
|
|
27
|
+
* @property {boolean} alphanumeric - Allows letters in addition to digits.
|
|
28
|
+
* @property {string} value - Canonical OTP value.
|
|
29
|
+
* @property {SkyOtpValidation[]} validations - Validator callbacks returning `true` or an error string.
|
|
30
|
+
* @property {boolean} showErrors - Shows first validation error when active.
|
|
31
|
+
* @property {boolean} masked - Masks visual characters using bullet glyph.
|
|
32
|
+
* @fires {CustomEvent<SkyOtpValueChangedDetail>} value-changed - Fired once per committed value change.
|
|
33
|
+
* @fires {CustomEvent<SkyOtpValueClearedDetail>} value-cleared - Fired when `reset()` clears the value.
|
|
34
|
+
* @fires {CustomEvent<SkyOtpValidationErrorDetail>} validation-error - Fired on each validation run.
|
|
35
|
+
* @method reset Clears all OTP slots and validation state.
|
|
36
|
+
* @method focusFirst Focuses the first OTP input slot.
|
|
37
|
+
*
|
|
38
|
+
* @csspart wrapper - The flex container wrapping the inputs row.
|
|
39
|
+
* @csspart input - An individual digit/char input element.
|
|
40
|
+
* @csspart error - The validation error text element.
|
|
41
|
+
*
|
|
42
|
+
* @Behavior
|
|
43
|
+
* - Updates per-slot UI immediately while emitting `value-changed` only on commit.
|
|
44
|
+
* - Supports paste-to-fill and keyboard navigation across slots.
|
|
45
|
+
* - Integrates with form control validity through `FormControlBase`.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```html
|
|
49
|
+
* <sky-otp length="6" masked show-errors></sky-otp>
|
|
50
|
+
* ```
|
|
51
|
+
* ```vue
|
|
52
|
+
* <template>
|
|
53
|
+
* <sky-otp length="6" masked show-errors @value-changed="onOtpChange"></sky-otp>
|
|
54
|
+
* </template>
|
|
55
|
+
* ```
|
|
56
|
+
* ```jsx
|
|
57
|
+
* export default function Demo() {
|
|
58
|
+
* return <sky-otp length="6" masked show-errors></sky-otp>;
|
|
59
|
+
* }
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare class SkyOtp extends FormControlBase {
|
|
63
|
+
length: number;
|
|
64
|
+
alphanumeric: boolean;
|
|
65
|
+
/** canonical value (unmasked) */
|
|
66
|
+
value: string;
|
|
67
|
+
validations: SkyOtpValidation[];
|
|
68
|
+
showErrors: boolean;
|
|
69
|
+
validationActive: boolean;
|
|
70
|
+
invalid: boolean;
|
|
71
|
+
private validationErrors;
|
|
72
|
+
masked: boolean;
|
|
73
|
+
/** Non-reactive display buffer (prevents Lit change-in-update warning) */
|
|
74
|
+
private displayValues;
|
|
75
|
+
private _lastCommitted;
|
|
76
|
+
static styles: import("lit").CSSResult;
|
|
77
|
+
constructor();
|
|
78
|
+
connectedCallback(): void;
|
|
79
|
+
firstUpdated(): void;
|
|
80
|
+
protected willUpdate(changed: PropertyValues<this>): void;
|
|
81
|
+
protected getFormValue(): FormState;
|
|
82
|
+
protected setValueFromFormState(state: FormState): void;
|
|
83
|
+
protected getValidityAnchor(): HTMLElement | undefined;
|
|
84
|
+
protected isEmpty(): boolean;
|
|
85
|
+
protected getNativeControl(): HTMLElement | null;
|
|
86
|
+
/** PURE: do not mutate reactive state here */
|
|
87
|
+
protected validateForForm(): string;
|
|
88
|
+
protected onFormReset(): void;
|
|
89
|
+
private handleInput;
|
|
90
|
+
private commit;
|
|
91
|
+
focus(): void;
|
|
92
|
+
reset(): void;
|
|
93
|
+
focusFirst(): void;
|
|
94
|
+
private handleKeydown;
|
|
95
|
+
private handlePaste;
|
|
96
|
+
private ensureDisplayBuffer;
|
|
97
|
+
private syncDisplayFromValue;
|
|
98
|
+
private applyInvalidClass;
|
|
99
|
+
private computeValidationErrors;
|
|
100
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
101
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import{__decorate as t,__metadata as i}from"tslib";import{css as e,html as s}from"lit";import{property as a,state as r,customElement as l}from"lit/decorators.js";import{FormControlBase as o}from"../helper/internals/form-control-base.js";import{live as n}from"lit/directives/live.js";let h=class extends o{static{this.styles=e`
|
|
2
|
+
:host { display:block; font-family: var(--sky-font); position: relative; }
|
|
3
|
+
|
|
4
|
+
.otp-input {
|
|
5
|
+
display: flex;
|
|
6
|
+
flex-wrap: nowrap;
|
|
7
|
+
justify-content: center;
|
|
8
|
+
gap: 8px;
|
|
9
|
+
}
|
|
10
|
+
.otp-input.shake {
|
|
11
|
+
animation: shake 0.3s ease-in-out;
|
|
12
|
+
animation-iteration-count: 1;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@keyframes shake {
|
|
16
|
+
0% { transform: translateX(0); }
|
|
17
|
+
25% { transform: translateX(-3px); }
|
|
18
|
+
50% { transform: translateX(3px); }
|
|
19
|
+
75% { transform: translateX(-3px); }
|
|
20
|
+
100% { transform: translateX(0); }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
:dir(rtl) .otp-input { flex-direction: row-reverse; }
|
|
24
|
+
|
|
25
|
+
input {
|
|
26
|
+
width: 20px;
|
|
27
|
+
height: 20px;
|
|
28
|
+
text-align: center;
|
|
29
|
+
font-size: var(--sky-font-size-md);
|
|
30
|
+
border-radius: var(--sky-radius-primary);
|
|
31
|
+
font-family: var(--sky-font);
|
|
32
|
+
padding: 5px;
|
|
33
|
+
border: var(--sky-border-primary);
|
|
34
|
+
box-shadow: var(--sky-box-shadow-primary);
|
|
35
|
+
position: relative;
|
|
36
|
+
background: var(--sky-glass-primary);
|
|
37
|
+
color: var(--sky-text-primary);
|
|
38
|
+
transition: all 0.2s ease-in-out;
|
|
39
|
+
vertical-align: middle;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
input.invalid {
|
|
43
|
+
box-shadow: 0 2px 12px
|
|
44
|
+
color-mix(in srgb, var(--sky-danger-primary) 30%, transparent);
|
|
45
|
+
}
|
|
46
|
+
input:focus {
|
|
47
|
+
outline: none;
|
|
48
|
+
box-shadow: 0 2px 12px
|
|
49
|
+
color-mix(in srgb, var(--sky-active-primary) 30%, transparent);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* optional: if you prefer bullet masking even on type=text:
|
|
53
|
+
input[mask] { -webkit-text-security: disc; text-security: disc; }
|
|
54
|
+
*/
|
|
55
|
+
|
|
56
|
+
.error-message {
|
|
57
|
+
position: absolute;
|
|
58
|
+
font-size: var(--sky-font-size-xs);
|
|
59
|
+
color: var(--sky-danger-primary);
|
|
60
|
+
white-space: nowrap;
|
|
61
|
+
overflow: hidden;
|
|
62
|
+
text-overflow: ellipsis;
|
|
63
|
+
pointer-events: none;
|
|
64
|
+
margin-left: 5px;
|
|
65
|
+
width: 100%;
|
|
66
|
+
text-align: start;
|
|
67
|
+
}
|
|
68
|
+
:dir(rtl) .error-message {
|
|
69
|
+
left: unset;
|
|
70
|
+
right: 0;
|
|
71
|
+
margin-right: 5px;
|
|
72
|
+
margin-left: unset;
|
|
73
|
+
}
|
|
74
|
+
`}constructor(){super(),this.length=6,this.alphanumeric=!1,this.value="",this.validations=[],this.showErrors=!1,this.validationActive=!1,this.invalid=!1,this.validationErrors=[],this.masked=!1,this.displayValues=[],this._lastCommitted="",this.addEventListener("focusout",t=>{if(!this.shadowRoot)return;const i=t.relatedTarget;!!i&&this.shadowRoot.contains(i)||this.commit()})}connectedCallback(){super.connectedCallback(),this.hasAttribute("tabindex")||(this.tabIndex=-1),this.ensureDisplayBuffer()}firstUpdated(){this.captureDefaultValue(this.value??""),this.syncDisplayFromValue(),this.syncFormValue(),this.syncValidity()}willUpdate(t){t.has("length")&&(this.ensureDisplayBuffer(),this.value=(this.value??"").slice(0,this.length),this.syncDisplayFromValue()),t.has("value")&&(this.value=(this.value??"").slice(0,this.length),this.syncDisplayFromValue(),this._lastCommitted=this.value)}getFormValue(){return!this.name||this.disabled?null:(this.value??"").slice(0,this.length)}setValueFromFormState(t){const i="string"==typeof t?t:"";this.value=(i??"").slice(0,this.length),this.syncDisplayFromValue(),this._lastCommitted=this.value}getValidityAnchor(){return this.shadowRoot?.querySelector("input")??void 0}isEmpty(){return(this.value??"").trim().length<this.length}getNativeControl(){return this.shadowRoot?.querySelector("input")}validateForForm(){const t=(this.value??"").slice(0,this.length);return this.computeValidationErrors(t)[0]??""}onFormReset(){this.value=(this.defaultValue??"").slice(0,this.length),this.syncDisplayFromValue(),this.validationErrors=[],this.validationActive=!1,this.invalid=!1,this._lastCommitted=this.value,queueMicrotask(()=>this.applyInvalidClass(!1))}handleInput(t,i){if(this.disabled||this.readonly)return void t.preventDefault();this.ensureDisplayBuffer();const e=this.shadowRoot?.querySelectorAll("input"),s=t.target,a=t,r=(("string"==typeof a.data?a.data:s.value)??"").slice(-1),l=this.alphanumeric?/^[a-zA-Z0-9]$/:/^[0-9]$/;if(r&&!l.test(r))return s.value="",this.displayValues[i]="",void(this.value=this.displayValues.join("").slice(0,this.length));this.displayValues[i]=r,this.value=this.displayValues.join("").slice(0,this.length),e&&r&&i<this.length-1&&e[i+1]?.focus(),r&&this.displayValues.every(t=>t.length>0)&&this.commit()}commit(){if(this.disabled)return;const t=(this.value??"").slice(0,this.length);this.validationActive=!0;const i=this.computeValidationErrors(t);this.validationErrors=i,this.dispatchEvent(new CustomEvent("validation-error",{detail:{errors:[...i]},bubbles:!0,composed:!0})),this.applyInvalidClass(i.length>0),this.invalid=i.length>0,this.syncFormValue(),this.syncValidity(),t!==this._lastCommitted&&(this._lastCommitted=t,this.dispatchEvent(new CustomEvent("value-changed",{detail:{value:t,otp:t},bubbles:!0,composed:!0})))}focus(){const t=this.shadowRoot?.querySelector("input"),i=this.shadowRoot?.querySelector(".otp-input");t&&(t.focus(),i instanceof HTMLElement&&(i.classList.remove("shake"),i.offsetWidth,i.classList.add("shake")))}reset(){this.value="",this.validationErrors=[],this.validationActive=!1,this.invalid=!1,this.displayValues=Array.from({length:this.length},()=>""),this._lastCommitted="",queueMicrotask(()=>{const t=this.shadowRoot?.querySelectorAll("input");t?.forEach(t=>t.value=""),this.applyInvalidClass(!1)}),this.syncFormValue(),this.syncValidity(),this.dispatchEvent(new CustomEvent("value-cleared",{detail:{value:""},bubbles:!0,composed:!0}))}focusFirst(){const t=this.shadowRoot?.querySelector("input");t?.focus()}handleKeydown(t,i){const e=this.shadowRoot?.querySelectorAll("input");if(e)switch(t.key){case"Backspace":!e[i].value&&i>0?e[i-1].focus():(this.ensureDisplayBuffer(),this.displayValues[i]="",this.value=this.displayValues.join("").slice(0,this.length),e[i].value="");break;case"ArrowLeft":i>0&&e[i-1].focus();break;case"ArrowRight":i<this.length-1&&e[i+1].focus();break;case"Enter":this.commit()}}handlePaste(t){if(this.disabled||this.readonly)return void t.preventDefault();t.preventDefault();const i=t.clipboardData?.getData("text")||"",e=(this.alphanumeric?i.replace(/[^a-zA-Z0-9]/g,""):i.replace(/\D/g,"")).slice(0,this.length).split("");this.displayValues=Array.from({length:this.length},(t,i)=>e[i]??""),this.value=this.displayValues.join("").slice(0,this.length),this.commit();const s=this.shadowRoot?.querySelectorAll("input");if(s){const t=Array.from(s).find((t,i)=>!this.displayValues[i]);t?t.focus():s[this.length-1].focus()}}ensureDisplayBuffer(){if(this.displayValues.length!==this.length){const t=this.displayValues;this.displayValues=Array.from({length:this.length},(i,e)=>t[e]??"")}}syncDisplayFromValue(){this.ensureDisplayBuffer();const t=(this.value??"").slice(0,this.length);for(let i=0;i<this.length;i++)this.displayValues[i]=t[i]??""}applyInvalidClass(t){const i=this.shadowRoot?.querySelectorAll("input");i&&i.forEach(i=>i.classList.toggle("invalid",t))}computeValidationErrors(t){const i=(t??"").slice(0,this.length),e=[];if(!(i.length<this.length)&&Array.isArray(this.validations)&&this.validations.length)for(let t=0;t<this.validations.length;t++)try{const s=this.validations[t](i);!0!==s&&e.push("string"==typeof s?s:`Validation ${t} failed.`)}catch(i){e.push(`Error in validation ${t}: ${String(i?.message??i)}`)}return e}render(){const t=this.matches(":invalid")||this.validationActive&&this.validationErrors.length>0;return s`
|
|
75
|
+
<div class="otp-input" part="wrapper" role="group" aria-label="OTP input">
|
|
76
|
+
${Array.from({length:this.length}).map((i,e)=>s`
|
|
77
|
+
<input
|
|
78
|
+
part="input"
|
|
79
|
+
.type=${this.masked?"password":"text"}
|
|
80
|
+
maxlength="1"
|
|
81
|
+
.value=${n(this.displayValues[e]??"")}
|
|
82
|
+
?disabled=${this.disabled}
|
|
83
|
+
.readOnly=${this.readonly}
|
|
84
|
+
@input=${t=>this.handleInput(t,e)}
|
|
85
|
+
@keydown=${t=>this.handleKeydown(t,e)}
|
|
86
|
+
@paste=${t=>this.handlePaste(t)}
|
|
87
|
+
@change=${()=>this.commit()}
|
|
88
|
+
aria-label="OTP character ${e+1} of ${this.length}"
|
|
89
|
+
aria-invalid=${t?"true":"false"}
|
|
90
|
+
/>
|
|
91
|
+
`)}
|
|
92
|
+
</div>
|
|
93
|
+
|
|
94
|
+
${this.showErrors&&this.validationErrors.length>0&&this.validationActive?s`<div class="error-message" part="error">${this.validationErrors[0]}</div>`:""}
|
|
95
|
+
`}};t([a({type:Number}),i("design:type",Object)],h.prototype,"length",void 0),t([a({type:Boolean}),i("design:type",Object)],h.prototype,"alphanumeric",void 0),t([a({type:String}),i("design:type",Object)],h.prototype,"value",void 0),t([a({type:Array}),i("design:type",Array)],h.prototype,"validations",void 0),t([a({type:Boolean}),i("design:type",Object)],h.prototype,"showErrors",void 0),t([a({type:Boolean,reflect:!0}),i("design:type",Boolean)],h.prototype,"validationActive",void 0),t([a({type:Boolean,reflect:!0}),i("design:type",Boolean)],h.prototype,"invalid",void 0),t([r(),i("design:type",Array)],h.prototype,"validationErrors",void 0),t([a({type:Boolean}),i("design:type",Object)],h.prototype,"masked",void 0),h=t([l("sky-otp"),i("design:paramtypes",[])],h);export{h as SkyOtp};
|
|
96
|
+
//# sourceMappingURL=sky-otp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sky-otp.js","sources":["../../src/sky-otp/sky-otp.ts"],"sourcesContent":[null],"names":["SkyOtp","FormControlBase","this","styles","css","constructor","super","length","alphanumeric","value","validations","showErrors","validationActive","invalid","validationErrors","masked","displayValues","_lastCommitted","addEventListener","e","shadowRoot","related","relatedTarget","contains","commit","connectedCallback","hasAttribute","tabIndex","ensureDisplayBuffer","firstUpdated","captureDefaultValue","syncDisplayFromValue","syncFormValue","syncValidity","willUpdate","changed","has","slice","getFormValue","name","disabled","setValueFromFormState","state","s","getValidityAnchor","querySelector","undefined","isEmpty","trim","getNativeControl","validateForForm","canonical","computeValidationErrors","onFormReset","defaultValue","queueMicrotask","applyInvalidClass","handleInput","index","readonly","preventDefault","inputs","querySelectorAll","target","ie","char","data","isValidChar","test","join","focus","every","c","errors","dispatchEvent","CustomEvent","detail","bubbles","composed","otp","otpContainer","HTMLElement","classList","remove","offsetWidth","add","reset","Array","from","forEach","i","focusFirst","first","handleKeydown","key","handlePaste","clipboardData","getData","chars","replace","split","_","firstEmpty","find","old","v","isInvalid","el","toggle","vRaw","isArray","r","push","err","String","message","render","invalidNow","matches","html","map","live","__decorate","property","type","Number","prototype","Boolean","reflect","customElement"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./sky-overlay";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './sky-overlay.js';
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { LitElement, PropertyValues } from "lit";
|
|
2
|
+
/** Emitted when `open` toggles (methods or property), for `v-model:open`. */
|
|
3
|
+
export type SkyOverlayOpenChangeDetail = {
|
|
4
|
+
open: boolean;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* @element sky-overlay
|
|
8
|
+
*
|
|
9
|
+
* @summary Lightweight overlay layer with blur/tint styling for modal and blocking surfaces.
|
|
10
|
+
*
|
|
11
|
+
* @status stable
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
*
|
|
14
|
+
* @documentation https://library.sky-ui.com/components/overlay
|
|
15
|
+
*
|
|
16
|
+
* @uiVModel open open-change detail=open
|
|
17
|
+
*
|
|
18
|
+
* @slot - Default slot for overlay content (e.g., modal, drawer).
|
|
19
|
+
* @fires {CustomEvent<SkyOverlayOpenChangeDetail>} open-change - Fired when `open` changes (including via methods).
|
|
20
|
+
* @property {boolean} open - Controls overlay visibility.
|
|
21
|
+
* @method openOverlay Opens the overlay.
|
|
22
|
+
* @method closeOverlay Closes the overlay.
|
|
23
|
+
* @method toggle Toggles the `open` state.
|
|
24
|
+
*
|
|
25
|
+
* @Behavior
|
|
26
|
+
* - Renders as an absolutely positioned full-size layer within the containing block.
|
|
27
|
+
* - Uses opacity/visibility transitions for smooth show/hide.
|
|
28
|
+
* - Keeps slotted content visible above the dimmed/blurred overlay surface.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```html
|
|
32
|
+
* <div style="position: relative; height: 260px;">
|
|
33
|
+
* <sky-overlay open>
|
|
34
|
+
* <div style="color: white; padding: 20px;">Loading content...</div>
|
|
35
|
+
* </sky-overlay>
|
|
36
|
+
* </div>
|
|
37
|
+
* ```
|
|
38
|
+
* ```vue
|
|
39
|
+
* <template>
|
|
40
|
+
* <div style="position: relative; height: 260px;">
|
|
41
|
+
* <sky-overlay :open="isOpen">
|
|
42
|
+
* <div style="color: white; padding: 20px;">Loading content...</div>
|
|
43
|
+
* </sky-overlay>
|
|
44
|
+
* </div>
|
|
45
|
+
* </template>
|
|
46
|
+
* ```
|
|
47
|
+
* ```jsx
|
|
48
|
+
* export default function Demo({ isOpen }) {
|
|
49
|
+
* return (
|
|
50
|
+
* <div style={{ position: "relative", height: "260px" }}>
|
|
51
|
+
* <sky-overlay open={isOpen}>
|
|
52
|
+
* <div style={{ color: "white", padding: "20px" }}>Loading content...</div>
|
|
53
|
+
* </sky-overlay>
|
|
54
|
+
* </div>
|
|
55
|
+
* );
|
|
56
|
+
* }
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare class SkyOverlay extends LitElement {
|
|
60
|
+
/**
|
|
61
|
+
* Whether the overlay is visible.
|
|
62
|
+
* Reflects to an attribute for styling purposes.
|
|
63
|
+
*/
|
|
64
|
+
open: boolean;
|
|
65
|
+
static styles: import("lit").CSSResult;
|
|
66
|
+
toggle(): void;
|
|
67
|
+
openOverlay(): void;
|
|
68
|
+
closeOverlay(): void;
|
|
69
|
+
updated(changed: PropertyValues): void;
|
|
70
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
71
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import{__decorate as t,__metadata as e}from"tslib";import{LitElement as i,css as o,html as r}from"lit";import{property as s,customElement as a}from"lit/decorators.js";let p=class extends i{constructor(){super(...arguments),this.open=!1}static{this.styles=o`
|
|
2
|
+
:host {
|
|
3
|
+
display: block;
|
|
4
|
+
position: absolute; /* Change from fixed to absolute */
|
|
5
|
+
top: 0;
|
|
6
|
+
left: 0;
|
|
7
|
+
width: 100%;
|
|
8
|
+
height: 100%;
|
|
9
|
+
background-color: var(--sky-overlay-primary);
|
|
10
|
+
backdrop-filter: var(--sky-blur-primary) var(--sky-brightness-primary)
|
|
11
|
+
var(--sky-saturation-primary);
|
|
12
|
+
-webkit-backdrop-filter: var(--sky-blur-primary)
|
|
13
|
+
var(--sky-brightness-primary) var(--sky-saturation-primary);
|
|
14
|
+
z-index: 10;
|
|
15
|
+
visibility: hidden;
|
|
16
|
+
opacity: 0;
|
|
17
|
+
transition: opacity 0.3s ease, visibility 0.3s ease;
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
:host([open]) {
|
|
22
|
+
visibility: visible;
|
|
23
|
+
opacity: 1;
|
|
24
|
+
}
|
|
25
|
+
`}toggle(){this.open=!this.open}openOverlay(){this.open=!0}closeOverlay(){this.open=!1}updated(t){super.updated(t),t.has("open")&&this.dispatchEvent(new CustomEvent("open-change",{detail:{open:this.open},bubbles:!0,composed:!0}))}render(){return r` <slot></slot> `}};t([s({type:Boolean,reflect:!0}),e("design:type",Object)],p.prototype,"open",void 0),p=t([a("sky-overlay")],p);export{p as SkyOverlay};
|
|
26
|
+
//# sourceMappingURL=sky-overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sky-overlay.js","sources":["../../src/sky-overlay/sky-overlay.ts"],"sourcesContent":[null],"names":["SkyOverlay","LitElement","constructor","this","open","styles","css","toggle","openOverlay","closeOverlay","updated","changed","super","has","dispatchEvent","CustomEvent","detail","bubbles","composed","render","html","__decorate","property","type","Boolean","reflect","prototype","customElement"],"mappings":"uKA4DO,IAAMA,EAAN,cAAyBC,EAAzB,WAAAC,uBAMLC,KAAAC,MAAO,CAwDT,QAtDkBD,KAAAE,OAASC,CAAG;;;;;;;;;;;;;;;;;;;;;;;;GAwB1B,CAEF,MAAAC,GACEJ,KAAKC,MAAQD,KAAKC,IACpB,CAEA,WAAAI,GACEL,KAAKC,MAAO,CACd,CAEA,YAAAK,GACEN,KAAKC,MAAO,CACd,CAES,OAAAM,CAAQC,GACfC,MAAMF,QAAQC,GACVA,EAAQE,IAAI,SACdV,KAAKW,cACH,IAAIC,YAAwC,cAAe,CACzDC,OAAQ,CAAEZ,KAAMD,KAAKC,MACrBa,SAAS,EACTC,UAAU,IAIlB,CAES,MAAAC,GACP,OAAOC,CAAI,iBACb,GAvDAC,EAAA,CADCC,EAAS,CAAEC,KAAMC,QAASC,SAAS,6BACvBzB,EAAA0B,UAAA,eANF1B,EAAUqB,EAAA,CADtBM,EAAc,gBACF3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./sky-pagination";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './sky-pagination.js';
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
export type SkyPaginationVariant = "default" | "dropdown";
|
|
3
|
+
export type SkyPaginationPageChangeDetail = {
|
|
4
|
+
currentPage: number;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* @element sky-pagination
|
|
8
|
+
*
|
|
9
|
+
* @summary Pagination control with regular and dropdown variants, ellipsis jump, and loading overlay.
|
|
10
|
+
*
|
|
11
|
+
* @status stable
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
*
|
|
14
|
+
* @documentation https://library.sky-ui.com/components/pagination
|
|
15
|
+
* @dependency sky-icon
|
|
16
|
+
*
|
|
17
|
+
* @uiVModel currentPage page-change
|
|
18
|
+
*
|
|
19
|
+
* @csspart wrap - Outer wrapper for the component.
|
|
20
|
+
* @csspart overlay - Glass overlay over the pagination block when `loading` is true (not the progress bar).
|
|
21
|
+
* @csspart overlay-spinner - Spinner inside the overlay.
|
|
22
|
+
* @csspart block - Wrapper for the interactive block that's dimmed when loading.
|
|
23
|
+
* @csspart pagination - Regular-mode pagination container.
|
|
24
|
+
* @csspart arrow-button - The previous/next arrow buttons.
|
|
25
|
+
* @csspart page-button - A numbered page button.
|
|
26
|
+
* @csspart page-button--active - The active page button (state part).
|
|
27
|
+
* @csspart page-button--disabled - A disabled page button (state part).
|
|
28
|
+
* @csspart page-input - Number input displayed when editing an ellipsis.
|
|
29
|
+
* @csspart dropdown-pagination - Dropdown-mode container.
|
|
30
|
+
* @csspart dropdown-button - The button that shows current page / toggles the menu.
|
|
31
|
+
* @csspart dropdown-menu - The dropdown menu container with page items.
|
|
32
|
+
* @csspart progress-bar - Outer progress bar track (if `showProgressBar`).
|
|
33
|
+
* @csspart progress-bar-fill - Filled portion of the progress bar.
|
|
34
|
+
*
|
|
35
|
+
* @property {number} totalPages - Total number of pages.
|
|
36
|
+
* @property {number} currentPage - Current selected page (1-based).
|
|
37
|
+
* @property {number[]} disabledPages - Disabled page numbers.
|
|
38
|
+
* @property {boolean} loading - Shows blocking loading overlay.
|
|
39
|
+
* @property {boolean} showProgressBar - Shows progress bar under controls.
|
|
40
|
+
* @property {SkyPaginationVariant} variant - Pagination UI variant.
|
|
41
|
+
* @property {number | null} ellipsisEditIndex - Active ellipsis edit index in regular mode.
|
|
42
|
+
* @property {string} ellipsisInputValue - Current value for ellipsis jump input.
|
|
43
|
+
* @property {number} maxVisiblePage - Maximum visible page buttons in regular mode.
|
|
44
|
+
*
|
|
45
|
+
* @fires {CustomEvent<SkyPaginationPageChangeDetail>} page-change - Fired when the current page changes.
|
|
46
|
+
* @method nextPage Navigates to next available page.
|
|
47
|
+
* @method prevPage Navigates to previous available page.
|
|
48
|
+
* @method setPage Navigates to a specific page.
|
|
49
|
+
*
|
|
50
|
+
* @Behavior
|
|
51
|
+
* - Supports regular button mode and compact dropdown mode.
|
|
52
|
+
* - Prevents interaction while `loading` is true.
|
|
53
|
+
* - Supports editable ellipsis jump for large page ranges.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```html
|
|
57
|
+
* <sky-pagination total-pages="10" current-page="3" show-progress-bar max-visible-page="7"></sky-pagination>
|
|
58
|
+
* ```
|
|
59
|
+
* ```vue
|
|
60
|
+
* <template>
|
|
61
|
+
* <sky-pagination
|
|
62
|
+
* :total-pages="20"
|
|
63
|
+
* :current-page="5"
|
|
64
|
+
* variant="dropdown"
|
|
65
|
+
* :disabled-pages="[2, 3, 4]"
|
|
66
|
+
* @page-change="onPageChange"
|
|
67
|
+
* ></sky-pagination>
|
|
68
|
+
* </template>
|
|
69
|
+
* ```
|
|
70
|
+
* ```jsx
|
|
71
|
+
* export default function Demo() {
|
|
72
|
+
* return <sky-pagination total-pages={10} current-page={3} show-progress-bar max-visible-page={7}></sky-pagination>;
|
|
73
|
+
* }
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export declare class SkyPagination extends LitElement {
|
|
77
|
+
static dependencies: Record<string, CustomElementConstructor>;
|
|
78
|
+
totalPages: number;
|
|
79
|
+
currentPage: number;
|
|
80
|
+
disabledPages: number[];
|
|
81
|
+
loading: boolean;
|
|
82
|
+
showProgressBar: boolean;
|
|
83
|
+
variant: SkyPaginationVariant;
|
|
84
|
+
ellipsisEditIndex: number | null;
|
|
85
|
+
ellipsisInputValue: string;
|
|
86
|
+
maxVisiblePage: number;
|
|
87
|
+
private dropdownOpen;
|
|
88
|
+
private dropdownBtn?;
|
|
89
|
+
private dropdownMenu?;
|
|
90
|
+
private dropdownPop;
|
|
91
|
+
static styles: import("lit").CSSResult;
|
|
92
|
+
firstUpdated(): void;
|
|
93
|
+
/**
|
|
94
|
+
* Called whenever the component is updated.
|
|
95
|
+
*
|
|
96
|
+
* This override checks if the `ellipsisEditIndex` property has changed and is not null.
|
|
97
|
+
* If so, it attempts to find an input element with the class `.page-input` within the component's render root,
|
|
98
|
+
* and if found, focuses and selects the input for user interaction.
|
|
99
|
+
*
|
|
100
|
+
* @param changed - A map containing the names of properties that have changed and their previous values.
|
|
101
|
+
*/
|
|
102
|
+
updated(changed: Map<string | number | symbol, unknown>): void;
|
|
103
|
+
private toggleDropdown;
|
|
104
|
+
/**
|
|
105
|
+
* Determines whether a pagination control should be disabled.
|
|
106
|
+
*
|
|
107
|
+
* @param page - The page number to check. If omitted, only the loading state is considered.
|
|
108
|
+
* @returns `true` if the pagination is currently loading or the specified page is in the list of disabled pages; otherwise, `false`.
|
|
109
|
+
*/
|
|
110
|
+
private _isDisabled;
|
|
111
|
+
/**
|
|
112
|
+
* Returns the next available page number in the given direction, skipping any disabled pages.
|
|
113
|
+
*
|
|
114
|
+
* @param direction - The direction to move in the pagination. Use `1` for next and `-1` for previous.
|
|
115
|
+
* @returns The next available page number if found; otherwise, returns the current page number if no available page exists in the given direction.
|
|
116
|
+
*/
|
|
117
|
+
getNextAvailablePage(direction: number): number;
|
|
118
|
+
/**
|
|
119
|
+
* Handles the click event for pagination arrow buttons.
|
|
120
|
+
*
|
|
121
|
+
* Determines the next available page based on the direction provided,
|
|
122
|
+
* and navigates to that page unless the component is currently loading.
|
|
123
|
+
*
|
|
124
|
+
* @param direction - The direction to move in pagination (e.g., -1 for previous, 1 for next).
|
|
125
|
+
* @param event - (Optional) The event object associated with the click.
|
|
126
|
+
*/
|
|
127
|
+
private handleArrowClick;
|
|
128
|
+
/**
|
|
129
|
+
* Navigates to the specified page if it is within the valid range and not disabled.
|
|
130
|
+
*
|
|
131
|
+
* - Prevents navigation if the component is currently loading.
|
|
132
|
+
* - Stops event propagation if an event is provided.
|
|
133
|
+
* - Updates the current page if the target page is valid and not in the list of disabled pages.
|
|
134
|
+
* - Closes the dropdown menu after a short delay.
|
|
135
|
+
* - Dispatches a "page-change" custom event with the new current page in the event detail.
|
|
136
|
+
*
|
|
137
|
+
* @param page - The page number to navigate to.
|
|
138
|
+
* @param event - (Optional) The event that triggered the page change, used to stop propagation.
|
|
139
|
+
*/
|
|
140
|
+
goToPage(page: number, event?: Event): void;
|
|
141
|
+
nextPage(): void;
|
|
142
|
+
prevPage(): void;
|
|
143
|
+
setPage(page: number): void;
|
|
144
|
+
/**
|
|
145
|
+
* Handles keyboard events for the ellipsis input in pagination.
|
|
146
|
+
*
|
|
147
|
+
* - On "Enter" key: Validates the input value as a page number, checks if it is within the valid range
|
|
148
|
+
* and not in the list of disabled pages, and navigates to that page if valid. Resets the ellipsis input state.
|
|
149
|
+
* - On "Escape" key: Cancels the edit and resets the ellipsis input state.
|
|
150
|
+
*
|
|
151
|
+
* @param e - The keyboard event triggered by user input.
|
|
152
|
+
*/
|
|
153
|
+
private handleEllipsisInputKey;
|
|
154
|
+
/**
|
|
155
|
+
* Handles the blur event for the ellipsis input in the pagination component.
|
|
156
|
+
*
|
|
157
|
+
* This method is triggered when the ellipsis input loses focus. It attempts to parse the input value as a page number,
|
|
158
|
+
* validates it against the allowed page range and disabled pages, and navigates to the page if valid.
|
|
159
|
+
* Regardless of validity, it resets the ellipsis edit state and clears the input value.
|
|
160
|
+
*
|
|
161
|
+
* @param event - The blur event object, if provided. Its propagation is stopped to prevent unwanted side effects.
|
|
162
|
+
*/
|
|
163
|
+
private handleEllipsisBlur;
|
|
164
|
+
private renderLoadingOverlay;
|
|
165
|
+
private renderRegularPagination;
|
|
166
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
167
|
+
}
|