@progressive-development/pd-spa-helper 0.9.0 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/AuthController.d.ts +37 -0
- package/dist/auth/AuthController.d.ts.map +1 -0
- package/dist/auth/AuthController.js +65 -0
- package/dist/auth/auth-directives.d.ts +59 -0
- package/dist/auth/auth-directives.d.ts.map +1 -0
- package/dist/auth/auth-directives.js +81 -0
- package/dist/auth/auth-utils.d.ts +45 -0
- package/dist/auth/auth-utils.d.ts.map +1 -0
- package/dist/auth/auth-utils.js +42 -0
- package/dist/auth/index.d.ts +7 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/components/default-login/DefaultLogin.d.ts +15 -0
- package/dist/components/default-login/DefaultLogin.d.ts.map +1 -0
- package/dist/components/default-login/DefaultLogin.js +120 -0
- package/dist/components/default-not-found/DefaultNotFound.d.ts +6 -0
- package/dist/components/default-not-found/DefaultNotFound.d.ts.map +1 -0
- package/dist/{defaultpage/default-not-found.js → components/default-not-found/DefaultNotFound.js} +10 -3
- package/dist/components/pd-section-page/PdSectionPage.d.ts +55 -0
- package/dist/components/pd-section-page/PdSectionPage.d.ts.map +1 -0
- package/dist/components/pd-section-page/PdSectionPage.js +37 -0
- package/dist/components/pd-spa-helper/PdSpaHelper.d.ts +196 -0
- package/dist/components/pd-spa-helper/PdSpaHelper.d.ts.map +1 -0
- package/dist/components/pd-spa-helper/PdSpaHelper.js +603 -0
- package/dist/components/pd-spa-helper/controllers/ScrollController.d.ts +77 -0
- package/dist/components/pd-spa-helper/controllers/ScrollController.d.ts.map +1 -0
- package/dist/components/pd-spa-helper/controllers/ScrollController.js +102 -0
- package/dist/components/pd-spa-helper/spa-config.d.ts +95 -0
- package/dist/components/pd-spa-helper/spa-config.d.ts.map +1 -0
- package/dist/components/pd-spa-helper/spa-config.js +175 -0
- package/dist/components/pd-spa-helper/spa-events.d.ts +132 -0
- package/dist/components/pd-spa-helper/spa-events.d.ts.map +1 -0
- package/dist/components/pd-spa-helper/spa-events.js +18 -0
- package/dist/db/index.d.ts +3 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/{store → db}/indexDB.d.ts +9 -9
- package/dist/db/indexDB.d.ts.map +1 -0
- package/dist/{store → db}/indexDB.js +14 -12
- package/dist/generated/locale-wrapper/be-wrapper.d.ts +49 -14
- package/dist/generated/locale-wrapper/be-wrapper.d.ts.map +1 -1
- package/dist/generated/locale-wrapper/de-wrapper.d.ts +49 -14
- package/dist/generated/locale-wrapper/de-wrapper.d.ts.map +1 -1
- package/dist/generated/locale-wrapper/en-wrapper.d.ts +49 -14
- package/dist/generated/locale-wrapper/en-wrapper.d.ts.map +1 -1
- package/dist/generated/locales/be.d.ts +1 -15
- package/dist/generated/locales/be.d.ts.map +1 -1
- package/dist/generated/locales/be.js +1 -15
- package/dist/generated/locales/de.d.ts +1 -15
- package/dist/generated/locales/de.d.ts.map +1 -1
- package/dist/generated/locales/de.js +1 -15
- package/dist/generated/locales/en.d.ts +1 -15
- package/dist/generated/locales/en.d.ts.map +1 -1
- package/dist/generated/locales/en.js +1 -15
- package/dist/helper/logger.d.ts +11 -12
- package/dist/helper/logger.d.ts.map +1 -1
- package/dist/helper/logger.js +10 -49
- package/dist/helper/refresh-id-token.d.ts.map +1 -1
- package/dist/helper/refresh-id-token.js +6 -4
- package/dist/index.d.ts +31 -29
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -50
- package/dist/model/index.d.ts +4 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/spa-model.d.ts +14 -15
- package/dist/model/spa-model.d.ts.map +1 -1
- package/dist/router/PdRouterService.d.ts +4 -1
- package/dist/router/PdRouterService.d.ts.map +1 -1
- package/dist/router/PdRouterService.js +40 -16
- package/dist/router/index.d.ts +3 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/screen-size/ScreenSizeController.d.ts +34 -0
- package/dist/screen-size/ScreenSizeController.d.ts.map +1 -0
- package/dist/screen-size/ScreenSizeController.js +58 -0
- package/dist/screen-size/ScreenSizeService.d.ts +49 -0
- package/dist/screen-size/ScreenSizeService.d.ts.map +1 -0
- package/dist/screen-size/ScreenSizeService.js +107 -0
- package/dist/screen-size/index.d.ts +13 -0
- package/dist/screen-size/index.d.ts.map +1 -0
- package/dist/screen-size/responsive-directives.d.ts +59 -0
- package/dist/screen-size/responsive-directives.d.ts.map +1 -0
- package/dist/screen-size/responsive-directives.js +71 -0
- package/dist/screen-size/types.d.ts +44 -0
- package/dist/screen-size/types.d.ts.map +1 -0
- package/dist/service-provider/ServiceRegistry.d.ts +67 -0
- package/dist/service-provider/ServiceRegistry.d.ts.map +1 -0
- package/dist/service-provider/ServiceRegistry.js +76 -0
- package/dist/service-provider/function-utils.d.ts +55 -0
- package/dist/service-provider/function-utils.d.ts.map +1 -0
- package/dist/service-provider/function-utils.js +30 -0
- package/dist/service-provider/index.d.ts +10 -0
- package/dist/service-provider/index.d.ts.map +1 -0
- package/dist/service-provider/interfaces/IAuthProvider.d.ts +68 -0
- package/dist/service-provider/interfaces/IAuthProvider.d.ts.map +1 -0
- package/dist/service-provider/interfaces/IDatabaseProvider.d.ts +75 -0
- package/dist/service-provider/interfaces/IDatabaseProvider.d.ts.map +1 -0
- package/dist/service-provider/interfaces/IFunctionProvider.d.ts +49 -0
- package/dist/service-provider/interfaces/IFunctionProvider.d.ts.map +1 -0
- package/dist/service-provider/interfaces/IStorageProvider.d.ts +118 -0
- package/dist/service-provider/interfaces/IStorageProvider.d.ts.map +1 -0
- package/dist/service-provider/interfaces/ServiceProvider.d.ts +24 -0
- package/dist/service-provider/interfaces/ServiceProvider.d.ts.map +1 -0
- package/dist/service-provider/interfaces/common.d.ts +5 -0
- package/dist/service-provider/interfaces/common.d.ts.map +1 -0
- package/dist/service-provider/service-provider-model.d.ts +55 -10
- package/dist/service-provider/service-provider-model.d.ts.map +1 -1
- package/dist/services/fire-once-service.d.ts +35 -0
- package/dist/services/fire-once-service.d.ts.map +1 -0
- package/dist/services/fire-once-service.js +61 -0
- package/dist/store/async-action-effects.d.ts +179 -0
- package/dist/store/async-action-effects.d.ts.map +1 -0
- package/dist/store/async-action-effects.js +98 -0
- package/dist/store/async-action-utils.d.ts +154 -0
- package/dist/store/async-action-utils.d.ts.map +1 -0
- package/dist/store/async-action-utils.js +42 -0
- package/dist/store/index.d.ts +9 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/mini-rx.store.d.ts.map +1 -1
- package/dist/store/mini-rx.store.js +1 -3
- package/dist/store/spa-app-actions.d.ts +5 -22
- package/dist/store/spa-app-actions.d.ts.map +1 -1
- package/dist/store/spa-app-actions.js +4 -8
- package/dist/store/spa-app-effects.d.ts +0 -17
- package/dist/store/spa-app-effects.d.ts.map +1 -1
- package/dist/store/spa-app-effects.js +2 -40
- package/dist/store/spa-app-reducer.d.ts +5 -10
- package/dist/store/spa-app-reducer.d.ts.map +1 -1
- package/dist/store/spa-app-reducer.js +13 -8
- package/dist/store/spa-app-selector.d.ts +2 -2
- package/dist/store/spa-app-selector.d.ts.map +1 -1
- package/dist/store/spa-app-selector.js +1 -1
- package/dist/stories/introduction.stories.d.ts +11 -0
- package/dist/stories/introduction.stories.d.ts.map +1 -0
- package/package.json +14 -9
- package/dist/PdSpaHelper.d.ts +0 -83
- package/dist/PdSpaHelper.d.ts.map +0 -1
- package/dist/PdSpaHelper.js +0 -492
- package/dist/defaultpage/default-confirm-popup.d.ts +0 -19
- package/dist/defaultpage/default-confirm-popup.d.ts.map +0 -1
- package/dist/defaultpage/default-confirm-popup.js +0 -70
- package/dist/defaultpage/default-dialog-popup.d.ts +0 -19
- package/dist/defaultpage/default-dialog-popup.d.ts.map +0 -1
- package/dist/defaultpage/default-dialog-popup.js +0 -103
- package/dist/defaultpage/default-login.d.ts +0 -6
- package/dist/defaultpage/default-login.d.ts.map +0 -1
- package/dist/defaultpage/default-login.js +0 -33
- package/dist/defaultpage/default-not-found.d.ts +0 -6
- package/dist/defaultpage/default-not-found.d.ts.map +0 -1
- package/dist/defaultpage/default-popup.d.ts +0 -7
- package/dist/defaultpage/default-popup.d.ts.map +0 -1
- package/dist/defaultpage/default-popup.js +0 -24
- package/dist/defaultpage/default-step-address.d.ts +0 -14
- package/dist/defaultpage/default-step-address.d.ts.map +0 -1
- package/dist/defaultpage/default-step-address.js +0 -77
- package/dist/defaultpage/default-step-summary.d.ts +0 -28
- package/dist/defaultpage/default-step-summary.d.ts.map +0 -1
- package/dist/defaultpage/default-step-summary.js +0 -67
- package/dist/defaultpage/default-view-page.d.ts +0 -10
- package/dist/defaultpage/default-view-page.d.ts.map +0 -1
- package/dist/defaultpage/default-view-page.js +0 -70
- package/dist/defaultpage/default-wizard.d.ts +0 -37
- package/dist/defaultpage/default-wizard.d.ts.map +0 -1
- package/dist/defaultpage/default-wizard.js +0 -255
- package/dist/defaultpage/pd-default-wizard-step.d.ts +0 -60
- package/dist/defaultpage/pd-default-wizard-step.d.ts.map +0 -1
- package/dist/defaultpage/pd-default-wizard-step.js +0 -144
- package/dist/helper/blob-helper.d.ts +0 -3
- package/dist/helper/blob-helper.d.ts.map +0 -1
- package/dist/helper/blob-helper.js +0 -35
- package/dist/helper/date-helper.d.ts +0 -27
- package/dist/helper/date-helper.d.ts.map +0 -1
- package/dist/helper/date-helper.js +0 -129
- package/dist/helper/locale-format.d.ts +0 -4
- package/dist/helper/locale-format.d.ts.map +0 -1
- package/dist/helper/locale-format.js +0 -16
- package/dist/helper/number-helper.d.ts +0 -2
- package/dist/helper/number-helper.d.ts.map +0 -1
- package/dist/helper/number-helper.js +0 -13
- package/dist/helper/price-helper.d.ts +0 -5
- package/dist/helper/price-helper.d.ts.map +0 -1
- package/dist/helper/price-helper.js +0 -22
- package/dist/helper/text-helper.d.ts +0 -3
- package/dist/helper/text-helper.d.ts.map +0 -1
- package/dist/helper/text-helper.js +0 -4
- package/dist/popup/wizard-close-popup.d.ts +0 -11
- package/dist/popup/wizard-close-popup.d.ts.map +0 -1
- package/dist/popup/wizard-close-popup.js +0 -63
- package/dist/popup/wizard-reload-popup.d.ts +0 -14
- package/dist/popup/wizard-reload-popup.d.ts.map +0 -1
- package/dist/popup/wizard-reload-popup.js +0 -76
- package/dist/service-provider/firebase/auth.d.ts +0 -19
- package/dist/service-provider/firebase/auth.d.ts.map +0 -1
- package/dist/service-provider/firebase/auth.js +0 -62
- package/dist/service-provider/firebase/firestorage-client.d.ts +0 -22
- package/dist/service-provider/firebase/firestorage-client.d.ts.map +0 -1
- package/dist/service-provider/firebase/firestorage-client.js +0 -226
- package/dist/service-provider/firebase/firestore-client.d.ts +0 -12
- package/dist/service-provider/firebase/firestore-client.d.ts.map +0 -1
- package/dist/service-provider/firebase/firestore-client.js +0 -25
- package/dist/service-provider/firebase/functions-client.d.ts +0 -10
- package/dist/service-provider/firebase/functions-client.d.ts.map +0 -1
- package/dist/service-provider/firebase/functions-client.js +0 -63
- package/dist/service-provider/firebase/messagingFirebaseClient.d.ts +0 -9
- package/dist/service-provider/firebase/messagingFirebaseClient.d.ts.map +0 -1
- package/dist/service-provider/firebase/messagingFirebaseClient.js +0 -69
- package/dist/service-provider/mock/auth.d.ts +0 -6
- package/dist/service-provider/mock/auth.d.ts.map +0 -1
- package/dist/service-provider/mock/auth.js +0 -60
- package/dist/service-provider/mock/function-client.d.ts +0 -7
- package/dist/service-provider/mock/function-client.d.ts.map +0 -1
- package/dist/service-provider/mock/function-client.js +0 -30
- package/dist/service-provider/mock/storage-client.d.ts +0 -11
- package/dist/service-provider/mock/storage-client.d.ts.map +0 -1
- package/dist/service-provider/mock/storage-client.js +0 -106
- package/dist/service-provider/service-provider-impl.d.ts +0 -27
- package/dist/service-provider/service-provider-impl.d.ts.map +0 -1
- package/dist/service-provider/service-provider-impl.js +0 -222
- package/dist/store/indexDB.d.ts.map +0 -1
- package/dist/stories/address-edit.stories.d.ts +0 -27
- package/dist/stories/address-edit.stories.d.ts.map +0 -1
- package/dist/stories/address-new.stories.d.ts +0 -33
- package/dist/stories/address-new.stories.d.ts.map +0 -1
- package/dist/stories/default-confirm-popup.stories.d.ts +0 -24
- package/dist/stories/default-confirm-popup.stories.d.ts.map +0 -1
- package/dist/stories/default-dialog-popup.stories.d.ts +0 -23
- package/dist/stories/default-dialog-popup.stories.d.ts.map +0 -1
- package/dist/stories/default-login.stories.d.ts +0 -10
- package/dist/stories/default-login.stories.d.ts.map +0 -1
- package/dist/stories/default-popup.stories.d.ts +0 -9
- package/dist/stories/default-popup.stories.d.ts.map +0 -1
- package/dist/stories/pd-loading-state.stories.d.ts +0 -30
- package/dist/stories/pd-loading-state.stories.d.ts.map +0 -1
- package/dist/stories/pd-toast.stories.d.ts +0 -27
- package/dist/stories/pd-toast.stories.d.ts.map +0 -1
- package/dist/stories/routing.stories.d.ts +0 -24
- package/dist/stories/routing.stories.d.ts.map +0 -1
- package/dist/stories/test-impls/address-test.d.ts +0 -6
- package/dist/stories/test-impls/address-test.d.ts.map +0 -1
- package/dist/stories/test-impls/test-mock-app.d.ts +0 -15
- package/dist/stories/test-impls/test-mock-app.d.ts.map +0 -1
- package/dist/stories/test-impls/test-pages/test-home-page.d.ts +0 -7
- package/dist/stories/test-impls/test-pages/test-home-page.d.ts.map +0 -1
- package/dist/stories/test-impls/test-pages/test-not-found-page.d.ts +0 -5
- package/dist/stories/test-impls/test-pages/test-not-found-page.d.ts.map +0 -1
- package/dist/stories/test-impls/test-pages/test-wizard-step.d.ts +0 -17
- package/dist/stories/test-impls/test-pages/test-wizard-step.d.ts.map +0 -1
- package/dist/stories/test-impls/test-pages/test-wizard.d.ts +0 -16
- package/dist/stories/test-impls/test-pages/test-wizard.d.ts.map +0 -1
- package/dist/stories/test-impls/test-popups/default-confirm-popup-test-error.d.ts +0 -8
- package/dist/stories/test-impls/test-popups/default-confirm-popup-test-error.d.ts.map +0 -1
- package/dist/stories/test-impls/test-popups/default-confirm-popup-test-info.d.ts +0 -8
- package/dist/stories/test-impls/test-popups/default-confirm-popup-test-info.d.ts.map +0 -1
- package/dist/stories/test-impls/test-popups/default-confirm-popup-test-warn.d.ts +0 -8
- package/dist/stories/test-impls/test-popups/default-confirm-popup-test-warn.d.ts.map +0 -1
- package/dist/stories/test-impls/test-popups/default-dialog-popup-test.d.ts +0 -13
- package/dist/stories/test-impls/test-popups/default-dialog-popup-test.d.ts.map +0 -1
- package/dist/stories/test-impls/test-popups/default-popup-test.d.ts +0 -5
- package/dist/stories/test-impls/test-popups/default-popup-test.d.ts.map +0 -1
- package/dist/stories/test-wizard-step.stories.d.ts +0 -11
- package/dist/stories/test-wizard-step.stories.d.ts.map +0 -1
- package/dist/stories/test-wizard.stories.d.ts +0 -9
- package/dist/stories/test-wizard.stories.d.ts.map +0 -1
- package/dist/tmpown/pd-loading-state.d.ts +0 -9
- package/dist/tmpown/pd-loading-state.d.ts.map +0 -1
- package/dist/tmpown/pd-loading-state.js +0 -196
- package/dist/tmpown/pd-login.d.ts +0 -13
- package/dist/tmpown/pd-login.d.ts.map +0 -1
- package/dist/tmpown/pd-login.js +0 -165
- package/dist/tmpown/pd-toast.d.ts +0 -13
- package/dist/tmpown/pd-toast.d.ts.map +0 -1
- package/dist/tmpown/pd-toast.js +0 -127
package/dist/index.js
CHANGED
|
@@ -1,55 +1,32 @@
|
|
|
1
|
-
export { PdSpaHelper, startInit } from './PdSpaHelper.js';
|
|
2
|
-
|
|
3
|
-
export { serviceProviderModel as pdSpaModel };
|
|
4
|
-
import * as spaModel from './model/spa-model.js';
|
|
5
|
-
export { spaModel as pdSpaModel2 };
|
|
6
|
-
import * as offlineWatcherHelper from './helper/offline-watcher-helper.js';
|
|
7
|
-
export { offlineWatcherHelper as pdOfflineWatcher };
|
|
8
|
-
import * as blobHelper from './helper/blob-helper.js';
|
|
9
|
-
export { blobHelper as pdFileHelper };
|
|
10
|
-
import * as dateHelper from './helper/date-helper.js';
|
|
11
|
-
export { dateHelper as pdDateHelper };
|
|
12
|
-
import * as priceHelper from './helper/price-helper.js';
|
|
13
|
-
export { priceHelper as pdPriceHelper };
|
|
14
|
-
import * as numberHelper from './helper/number-helper.js';
|
|
15
|
-
export { numberHelper as pdNumberHelper };
|
|
16
|
-
import * as textHelper from './helper/text-helper.js';
|
|
17
|
-
export { textHelper as pdTextHelper };
|
|
18
|
-
export { DefaultViewPage } from './defaultpage/default-view-page.js';
|
|
19
|
-
export { ABORT_EVENT_NAME, DefaultConfirmPopup, STORE_EVENT_NAME } from './defaultpage/default-confirm-popup.js';
|
|
20
|
-
export { DefaultDialogPopup } from './defaultpage/default-dialog-popup.js';
|
|
21
|
-
export { DefaultPopup } from './defaultpage/default-popup.js';
|
|
22
|
-
export { DefaultWizard } from './defaultpage/default-wizard.js';
|
|
23
|
-
export { PdDefaultWizardStep } from './defaultpage/pd-default-wizard-step.js';
|
|
24
|
-
export { DefaultStepAddress } from './defaultpage/default-step-address.js';
|
|
1
|
+
export { PdSpaHelper, startInit } from './components/pd-spa-helper/PdSpaHelper.js';
|
|
2
|
+
export { PdSectionPage } from './components/pd-section-page/PdSectionPage.js';
|
|
25
3
|
export { createLogger, defaultLogger } from './helper/logger.js';
|
|
26
|
-
export { DefaultStepSummary } from './defaultpage/default-step-summary.js';
|
|
27
|
-
export { activateCollectionListener, callFunctionImpl, deleteFile, downloadFile, getApp, getMessagingImpl, getStorageConfiguration, getStorageFile, getStorageFileList, getUser, getUserIdToken, isAuthenticatedImpl, loginImpl, logoutImpl, registerAppDeviceForNotification, uploadFile } from './service-provider/service-provider-impl.js';
|
|
28
4
|
export { refreshAndPersistUserIdToken } from './helper/refresh-id-token.js';
|
|
29
|
-
|
|
5
|
+
import * as offlineWatcherHelper from './helper/offline-watcher-helper.js';
|
|
6
|
+
export { offlineWatcherHelper as offlineWatcher };
|
|
7
|
+
export { ServiceRegistry, services } from './service-provider/ServiceRegistry.js';
|
|
8
|
+
export { BusinessError, SC_INVALID_USER, SC_TECHNICAL_FAILURE } from './service-provider/service-provider-model.js';
|
|
9
|
+
export { extractErrorInfo, isBusinessError, validateFunctionResult, validateResult } from './service-provider/function-utils.js';
|
|
10
|
+
export { initializeStore, pdStore } from './store/mini-rx.store.js';
|
|
30
11
|
export { setRouteElement } from './store/spa-app-effects.js';
|
|
31
12
|
import * as spaAppActions from './store/spa-app-actions.js';
|
|
32
|
-
export { spaAppActions as
|
|
13
|
+
export { spaAppActions as SpaActions };
|
|
14
|
+
export { addLoadingState, loginSuccess, logoutSuccess, removeLoadingState, routeAction } from './store/spa-app-actions.js';
|
|
33
15
|
import * as spaAppSelector from './store/spa-app-selector.js';
|
|
34
|
-
export { spaAppSelector as
|
|
35
|
-
|
|
36
|
-
export {
|
|
37
|
-
export {
|
|
38
|
-
export {
|
|
39
|
-
export {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
})
|
|
52
|
-
);
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
export { dispatchToastEvent };
|
|
16
|
+
export { spaAppSelector as SpaSelectors };
|
|
17
|
+
export { getLoadingSelector, getOfflineSelector, selectAuthUser } from './store/spa-app-selector.js';
|
|
18
|
+
export { createAsyncAction, createAsyncActionGroup, getConfigForAction, isActionFromGroup } from './store/async-action-utils.js';
|
|
19
|
+
export { createAllLoadingEffects, createErrorToastEffect, createLoadingEffect, createRemoveLoadingEffect, createSuccessToastEffect } from './store/async-action-effects.js';
|
|
20
|
+
export { POST_LOGIN_REDIRECT_KEY, pdRouterService } from './router/PdRouterService.js';
|
|
21
|
+
export { USER_COLLECTION, add, addAll, deleteAll, deleteAllEl, get, getAll, getAllIds, initDB, removeDatabase, update, updateAll } from './db/indexDB.js';
|
|
22
|
+
export { APP_CONF_EVENT, UNDEF } from './model/spa-model.js';
|
|
23
|
+
export { getCurrentUser, getUserClaims, getUserEmail, getUserId, hasAllRoles, hasAnyRole, hasRole, isLoggedIn } from './auth/auth-utils.js';
|
|
24
|
+
export { AuthController } from './auth/AuthController.js';
|
|
25
|
+
export { ifAuth, ifNotAuth, ifRole } from './auth/auth-directives.js';
|
|
26
|
+
export { screenSizeService } from './screen-size/ScreenSizeService.js';
|
|
27
|
+
export { ScreenSizeController } from './screen-size/ScreenSizeController.js';
|
|
28
|
+
export { responsiveText, responsiveValue } from './screen-size/responsive-directives.js';
|
|
29
|
+
export { fireOnceService } from './services/fire-once-service.js';
|
|
30
|
+
export { templates as beTemplates } from './generated/locale-wrapper/be-wrapper.js';
|
|
31
|
+
export { templates as deTemplates } from './generated/locale-wrapper/de-wrapper.js';
|
|
32
|
+
export { templates as enTemplates } from './generated/locale-wrapper/en-wrapper.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvD,YAAY,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAG9C,YAAY,EACV,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,qCAAqC,CAAC"}
|
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
export declare const APP_CONF_EVENT = "get-app-conf";
|
|
2
2
|
export declare const UNDEF = "UNDEF";
|
|
3
|
+
/**
|
|
4
|
+
* Minimal auth user interface for both Firebase and Mock providers.
|
|
5
|
+
* Used for auth state change callbacks.
|
|
6
|
+
*/
|
|
7
|
+
export interface AuthUser {
|
|
8
|
+
uid: string;
|
|
9
|
+
email?: string | null;
|
|
10
|
+
displayName?: string | null;
|
|
11
|
+
emailVerified?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Application user with claims after successful login.
|
|
15
|
+
*/
|
|
3
16
|
export interface AppUser {
|
|
4
17
|
uid: string;
|
|
5
18
|
email: string | null;
|
|
6
19
|
emailVerified: boolean;
|
|
7
20
|
providerId: string;
|
|
8
|
-
claims: Record<string,
|
|
9
|
-
}
|
|
10
|
-
export interface LoadingSubTask {
|
|
11
|
-
actionKey: string;
|
|
12
|
-
completed: boolean;
|
|
13
|
-
loadingTxt: string;
|
|
14
|
-
}
|
|
15
|
-
export interface LoadingState {
|
|
16
|
-
creation?: Date;
|
|
17
|
-
isLoading: boolean;
|
|
18
|
-
actionKey: string;
|
|
19
|
-
modal?: boolean;
|
|
20
|
-
smallBackground?: boolean;
|
|
21
|
-
loadingTxt?: string;
|
|
22
|
-
subTask?: LoadingSubTask[];
|
|
21
|
+
claims: Record<string, unknown>;
|
|
23
22
|
}
|
|
24
23
|
//# sourceMappingURL=spa-model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spa-model.d.ts","sourceRoot":"","sources":["../../src/model/spa-model.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,iBAAiB,CAAC;AAE7C,eAAO,MAAM,KAAK,UAAU,CAAC;AAE7B,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"spa-model.d.ts","sourceRoot":"","sources":["../../src/model/spa-model.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,iBAAiB,CAAC;AAE7C,eAAO,MAAM,KAAK,UAAU,CAAC;AAE7B;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { RouteChangeInfo, RouteDefinition } from './rout-types.js';
|
|
2
|
+
export declare const POST_LOGIN_REDIRECT_KEY = "postLoginRedirect";
|
|
2
3
|
type RouteChangeHandler = (info: RouteChangeInfo) => void;
|
|
3
4
|
declare class PdRouterService {
|
|
4
5
|
private router;
|
|
5
6
|
private onChangeHandlers;
|
|
6
|
-
private
|
|
7
|
+
private _currentRoute;
|
|
8
|
+
private _previousRoute;
|
|
9
|
+
get previousRoute(): string;
|
|
7
10
|
constructor();
|
|
8
11
|
/**
|
|
9
12
|
* Setzt die Routen-Konfiguration. Muss vor Verwendung von navigate() aufgerufen werden.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PdRouterService.d.ts","sourceRoot":"","sources":["../../src/router/PdRouterService.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"PdRouterService.d.ts","sourceRoot":"","sources":["../../src/router/PdRouterService.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAKnE,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAI3D,KAAK,kBAAkB,GAAG,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;AAmB1D,cAAM,eAAe;IAEnB,OAAO,CAAC,MAAM,CAAmD;IAEjE,OAAO,CAAC,gBAAgB,CAA4B;IAEpD,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,cAAc,CAAc;IAEpC,IAAW,aAAa,IAAI,MAAM,CAEjC;;IAQD;;OAEG;IACI,eAAe,CAAC,WAAW,EAAE,eAAe,EAAE;IAiFrD;;OAEG;IACU,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,UAAQ;IAejD;;OAEG;IACI,aAAa,CAAC,OAAO,EAAE,kBAAkB;IAIhD;;OAEG;YACW,OAAO;CAiEtB;AAaD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
|
|
@@ -4,16 +4,22 @@ import { selectAuthUser } from '../store/spa-app-selector.js';
|
|
|
4
4
|
import { pdStore } from '../store/mini-rx.store.js';
|
|
5
5
|
import { createLogger } from '../helper/logger.js';
|
|
6
6
|
|
|
7
|
+
const POST_LOGIN_REDIRECT_KEY = "postLoginRedirect";
|
|
7
8
|
const routingLogger = createLogger("PdRouterService");
|
|
8
9
|
class PdRouterService {
|
|
9
10
|
constructor() {
|
|
11
|
+
// UniversalRouter generic typing is complex; using explicit result type
|
|
10
12
|
this.router = null;
|
|
11
13
|
this.onChangeHandlers = [];
|
|
12
|
-
this.
|
|
14
|
+
this._currentRoute = "";
|
|
15
|
+
this._previousRoute = "";
|
|
13
16
|
window.addEventListener("popstate", () => {
|
|
14
17
|
this.resolve(location.pathname + location.search);
|
|
15
18
|
});
|
|
16
19
|
}
|
|
20
|
+
get previousRoute() {
|
|
21
|
+
return this._previousRoute;
|
|
22
|
+
}
|
|
17
23
|
/**
|
|
18
24
|
* Setzt die Routen-Konfiguration. Muss vor Verwendung von navigate() aufgerufen werden.
|
|
19
25
|
*/
|
|
@@ -25,24 +31,36 @@ class PdRouterService {
|
|
|
25
31
|
const universalRoutes = definitions.flatMap((def) => {
|
|
26
32
|
return {
|
|
27
33
|
path: def.pattern,
|
|
34
|
+
// Context type from UniversalRouter extended with userCheck
|
|
28
35
|
action: async (context) => {
|
|
29
|
-
|
|
30
|
-
|
|
36
|
+
const requiresAuth = def.auth || def.roles && def.roles.length > 0;
|
|
37
|
+
if (requiresAuth) {
|
|
31
38
|
if (!context.userCheck?.loginCheckFinish) {
|
|
32
39
|
routingLogger.debug("Check login is running, wait for result...");
|
|
33
|
-
authResult = await waitForFinalAuthState();
|
|
40
|
+
const authResult = await waitForFinalAuthState();
|
|
34
41
|
routingLogger.debug("Check login is done, go on");
|
|
35
42
|
context.userCheck = authResult;
|
|
36
43
|
}
|
|
37
44
|
if (!context.userCheck?.user) {
|
|
38
45
|
const fallbackRoute = def.authFallback ?? "login";
|
|
46
|
+
const currentPath = context.pathname || window.location.pathname;
|
|
47
|
+
if (currentPath && currentPath !== "/" + fallbackRoute) {
|
|
48
|
+
sessionStorage.setItem(POST_LOGIN_REDIRECT_KEY, currentPath);
|
|
49
|
+
routingLogger.debug(
|
|
50
|
+
"Stored redirect route for after login:",
|
|
51
|
+
currentPath
|
|
52
|
+
);
|
|
53
|
+
}
|
|
39
54
|
return { redirect: fallbackRoute };
|
|
40
55
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
56
|
+
if (def.roles && def.roles.length > 0 && !def.roles.some(
|
|
57
|
+
(role) => context.userCheck?.user?.claims?.[role] === true
|
|
58
|
+
)) {
|
|
59
|
+
routingLogger.debug(
|
|
60
|
+
"User lacks required role, redirecting to unauthorized"
|
|
61
|
+
);
|
|
62
|
+
return { redirect: "unauthorized" };
|
|
63
|
+
}
|
|
46
64
|
}
|
|
47
65
|
if (def.action) {
|
|
48
66
|
const result = await def.action();
|
|
@@ -92,10 +110,6 @@ class PdRouterService {
|
|
|
92
110
|
const pathname = url.pathname;
|
|
93
111
|
const query = Object.fromEntries(url.searchParams.entries());
|
|
94
112
|
try {
|
|
95
|
-
routingLogger.debug(
|
|
96
|
-
"Bevore resolve current location:",
|
|
97
|
-
location.pathname
|
|
98
|
-
);
|
|
99
113
|
const userCheck = await firstValueFrom(
|
|
100
114
|
pdStore().select(selectAuthUser).pipe(first())
|
|
101
115
|
);
|
|
@@ -103,12 +117,16 @@ class PdRouterService {
|
|
|
103
117
|
pathname,
|
|
104
118
|
userCheck
|
|
105
119
|
});
|
|
120
|
+
if (!result) {
|
|
121
|
+
routingLogger.warn("No route result for path:", path);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
106
124
|
if (result.redirect) {
|
|
107
125
|
history.replaceState({}, "", result.redirect);
|
|
108
126
|
await this.resolve(result.redirect);
|
|
109
127
|
return;
|
|
110
128
|
}
|
|
111
|
-
if (
|
|
129
|
+
if (typeof result !== "object" || !result.route) {
|
|
112
130
|
routingLogger.warn("Invalid route result:", result);
|
|
113
131
|
return;
|
|
114
132
|
}
|
|
@@ -118,7 +136,13 @@ class PdRouterService {
|
|
|
118
136
|
params: result.params ?? {},
|
|
119
137
|
query
|
|
120
138
|
};
|
|
121
|
-
|
|
139
|
+
if (routeInfo.route !== "login" && !userCheck?.user && sessionStorage.getItem(POST_LOGIN_REDIRECT_KEY)) {
|
|
140
|
+
sessionStorage.removeItem(POST_LOGIN_REDIRECT_KEY);
|
|
141
|
+
}
|
|
142
|
+
if (this._currentRoute && this._currentRoute !== "login") {
|
|
143
|
+
this._previousRoute = this._currentRoute;
|
|
144
|
+
}
|
|
145
|
+
this._currentRoute = routeInfo.route;
|
|
122
146
|
this.onChangeHandlers.forEach((fn) => fn(routeInfo));
|
|
123
147
|
} catch (err) {
|
|
124
148
|
routingLogger.error("Routing error:", err);
|
|
@@ -135,4 +159,4 @@ async function waitForFinalAuthState() {
|
|
|
135
159
|
}
|
|
136
160
|
const pdRouterService = new PdRouterService();
|
|
137
161
|
|
|
138
|
-
export { pdRouterService };
|
|
162
|
+
export { POST_LOGIN_REDIRECT_KEY, pdRouterService };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ReactiveController, ReactiveControllerHost } from 'lit';
|
|
2
|
+
import { Breakpoint } from './types.js';
|
|
3
|
+
export declare class ScreenSizeController implements ReactiveController {
|
|
4
|
+
private _host;
|
|
5
|
+
private _unsubscribe?;
|
|
6
|
+
constructor(host: ReactiveControllerHost);
|
|
7
|
+
/** Current breakpoint name */
|
|
8
|
+
get breakpoint(): Breakpoint;
|
|
9
|
+
/** Current viewport width in pixels */
|
|
10
|
+
get width(): number;
|
|
11
|
+
/** True if viewport is extra small or small (< 768px) */
|
|
12
|
+
get isMobile(): boolean;
|
|
13
|
+
/** True if viewport is medium (768px - 1023px) */
|
|
14
|
+
get isTablet(): boolean;
|
|
15
|
+
/** True if viewport is large or extra large (>= 1024px) */
|
|
16
|
+
get isDesktop(): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Check if the current breakpoint matches the given breakpoint.
|
|
19
|
+
*/
|
|
20
|
+
is(breakpoint: Breakpoint): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Check if the current breakpoint is at least the given breakpoint.
|
|
23
|
+
* E.g., isAtLeast('md') returns true for md, lg, xl.
|
|
24
|
+
*/
|
|
25
|
+
isAtLeast(breakpoint: Breakpoint): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Check if the current breakpoint is at most the given breakpoint.
|
|
28
|
+
* E.g., isAtMost('md') returns true for xs, sm, md.
|
|
29
|
+
*/
|
|
30
|
+
isAtMost(breakpoint: Breakpoint): boolean;
|
|
31
|
+
hostConnected(): void;
|
|
32
|
+
hostDisconnected(): void;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=ScreenSizeController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenSizeController.d.ts","sourceRoot":"","sources":["../../src/screen-size/ScreenSizeController.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,KAAK,CAAC;AAEtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,qBAAa,oBAAqB,YAAW,kBAAkB;IAC7D,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,YAAY,CAAC,CAAa;gBAEtB,IAAI,EAAE,sBAAsB;IAKxC,8BAA8B;IAC9B,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,uCAAuC;IACvC,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,yDAAyD;IACzD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,kDAAkD;IAClD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,2DAA2D;IAC3D,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;OAEG;IACH,EAAE,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAInC;;;OAGG;IACH,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAI1C;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAIzC,aAAa,IAAI,IAAI;IAMrB,gBAAgB,IAAI,IAAI;CAGzB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { screenSizeService } from './ScreenSizeService.js';
|
|
2
|
+
|
|
3
|
+
class ScreenSizeController {
|
|
4
|
+
constructor(host) {
|
|
5
|
+
this._host = host;
|
|
6
|
+
host.addController(this);
|
|
7
|
+
}
|
|
8
|
+
/** Current breakpoint name */
|
|
9
|
+
get breakpoint() {
|
|
10
|
+
return screenSizeService.breakpoint;
|
|
11
|
+
}
|
|
12
|
+
/** Current viewport width in pixels */
|
|
13
|
+
get width() {
|
|
14
|
+
return screenSizeService.width;
|
|
15
|
+
}
|
|
16
|
+
/** True if viewport is extra small or small (< 768px) */
|
|
17
|
+
get isMobile() {
|
|
18
|
+
return screenSizeService.isMobile;
|
|
19
|
+
}
|
|
20
|
+
/** True if viewport is medium (768px - 1023px) */
|
|
21
|
+
get isTablet() {
|
|
22
|
+
return screenSizeService.isTablet;
|
|
23
|
+
}
|
|
24
|
+
/** True if viewport is large or extra large (>= 1024px) */
|
|
25
|
+
get isDesktop() {
|
|
26
|
+
return screenSizeService.isDesktop;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Check if the current breakpoint matches the given breakpoint.
|
|
30
|
+
*/
|
|
31
|
+
is(breakpoint) {
|
|
32
|
+
return screenSizeService.is(breakpoint);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if the current breakpoint is at least the given breakpoint.
|
|
36
|
+
* E.g., isAtLeast('md') returns true for md, lg, xl.
|
|
37
|
+
*/
|
|
38
|
+
isAtLeast(breakpoint) {
|
|
39
|
+
return screenSizeService.isAtLeast(breakpoint);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Check if the current breakpoint is at most the given breakpoint.
|
|
43
|
+
* E.g., isAtMost('md') returns true for xs, sm, md.
|
|
44
|
+
*/
|
|
45
|
+
isAtMost(breakpoint) {
|
|
46
|
+
return screenSizeService.isAtMost(breakpoint);
|
|
47
|
+
}
|
|
48
|
+
hostConnected() {
|
|
49
|
+
this._unsubscribe = screenSizeService.subscribe(() => {
|
|
50
|
+
this._host.requestUpdate();
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
hostDisconnected() {
|
|
54
|
+
this._unsubscribe?.();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { ScreenSizeController };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Breakpoint, BreakpointConfig } from './types.js';
|
|
2
|
+
declare class ScreenSizeServiceImpl {
|
|
3
|
+
private _listeners;
|
|
4
|
+
private _currentBreakpoint;
|
|
5
|
+
private _width;
|
|
6
|
+
private _breakpoints;
|
|
7
|
+
constructor(breakpoints?: BreakpointConfig);
|
|
8
|
+
/** Current breakpoint name */
|
|
9
|
+
get breakpoint(): Breakpoint;
|
|
10
|
+
/** Current viewport width in pixels */
|
|
11
|
+
get width(): number;
|
|
12
|
+
/** True if viewport is extra small or small (< 768px) */
|
|
13
|
+
get isMobile(): boolean;
|
|
14
|
+
/** True if viewport is medium (768px - 1023px) */
|
|
15
|
+
get isTablet(): boolean;
|
|
16
|
+
/** True if viewport is large or extra large (>= 1024px) */
|
|
17
|
+
get isDesktop(): boolean;
|
|
18
|
+
/** Breakpoint order for fallback resolution */
|
|
19
|
+
get breakpointOrder(): readonly Breakpoint[];
|
|
20
|
+
/**
|
|
21
|
+
* Subscribe to breakpoint changes.
|
|
22
|
+
* Callback is called when the breakpoint changes (not on every resize).
|
|
23
|
+
*
|
|
24
|
+
* @param callback - Function to call when breakpoint changes
|
|
25
|
+
* @returns Unsubscribe function
|
|
26
|
+
*/
|
|
27
|
+
subscribe(callback: () => void): () => void;
|
|
28
|
+
/**
|
|
29
|
+
* Check if the current breakpoint matches the given breakpoint.
|
|
30
|
+
*/
|
|
31
|
+
is(breakpoint: Breakpoint): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Check if the current breakpoint is at least the given breakpoint.
|
|
34
|
+
* E.g., isAtLeast('md') returns true for md, lg, xl.
|
|
35
|
+
*/
|
|
36
|
+
isAtLeast(breakpoint: Breakpoint): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Check if the current breakpoint is at most the given breakpoint.
|
|
39
|
+
* E.g., isAtMost('md') returns true for xs, sm, md.
|
|
40
|
+
*/
|
|
41
|
+
isAtMost(breakpoint: Breakpoint): boolean;
|
|
42
|
+
private _handleResize;
|
|
43
|
+
private _updateSize;
|
|
44
|
+
private _notifyListeners;
|
|
45
|
+
}
|
|
46
|
+
/** Singleton instance of the screen size service */
|
|
47
|
+
export declare const screenSizeService: ScreenSizeServiceImpl;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=ScreenSizeService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenSizeService.d.ts","sourceRoot":"","sources":["../../src/screen-size/ScreenSizeService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAc/D,cAAM,qBAAqB;IACzB,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,YAAY,CAAmB;gBAE3B,WAAW,GAAE,gBAAsC;IAS/D,8BAA8B;IAC9B,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,uCAAuC;IACvC,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,yDAAyD;IACzD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,kDAAkD;IAClD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,2DAA2D;IAC3D,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,+CAA+C;IAC/C,IAAI,eAAe,IAAI,SAAS,UAAU,EAAE,CAE3C;IAED;;;;;;OAMG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAK3C;;OAEG;IACH,EAAE,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAInC;;;OAGG;IACH,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAM1C;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAMzC,OAAO,CAAC,aAAa,CAOnB;IAEF,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,gBAAgB;CAGzB;AAED,oDAAoD;AACpD,eAAO,MAAM,iBAAiB,uBAA8B,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
const DEFAULT_BREAKPOINTS = {
|
|
2
|
+
xs: 0,
|
|
3
|
+
sm: 640,
|
|
4
|
+
md: 768,
|
|
5
|
+
lg: 1024,
|
|
6
|
+
xl: 1280
|
|
7
|
+
};
|
|
8
|
+
const BREAKPOINT_ORDER = ["xs", "sm", "md", "lg", "xl"];
|
|
9
|
+
class ScreenSizeServiceImpl {
|
|
10
|
+
constructor(breakpoints = DEFAULT_BREAKPOINTS) {
|
|
11
|
+
this._listeners = /* @__PURE__ */ new Set();
|
|
12
|
+
this._currentBreakpoint = "lg";
|
|
13
|
+
this._width = 0;
|
|
14
|
+
this._handleResize = () => {
|
|
15
|
+
const oldBreakpoint = this._currentBreakpoint;
|
|
16
|
+
this._updateSize();
|
|
17
|
+
if (oldBreakpoint !== this._currentBreakpoint) {
|
|
18
|
+
this._notifyListeners();
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
this._breakpoints = breakpoints;
|
|
22
|
+
if (typeof window !== "undefined") {
|
|
23
|
+
this._updateSize();
|
|
24
|
+
window.addEventListener("resize", this._handleResize);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** Current breakpoint name */
|
|
28
|
+
get breakpoint() {
|
|
29
|
+
return this._currentBreakpoint;
|
|
30
|
+
}
|
|
31
|
+
/** Current viewport width in pixels */
|
|
32
|
+
get width() {
|
|
33
|
+
return this._width;
|
|
34
|
+
}
|
|
35
|
+
/** True if viewport is extra small or small (< 768px) */
|
|
36
|
+
get isMobile() {
|
|
37
|
+
return this._currentBreakpoint === "xs" || this._currentBreakpoint === "sm";
|
|
38
|
+
}
|
|
39
|
+
/** True if viewport is medium (768px - 1023px) */
|
|
40
|
+
get isTablet() {
|
|
41
|
+
return this._currentBreakpoint === "md";
|
|
42
|
+
}
|
|
43
|
+
/** True if viewport is large or extra large (>= 1024px) */
|
|
44
|
+
get isDesktop() {
|
|
45
|
+
return this._currentBreakpoint === "lg" || this._currentBreakpoint === "xl";
|
|
46
|
+
}
|
|
47
|
+
/** Breakpoint order for fallback resolution */
|
|
48
|
+
get breakpointOrder() {
|
|
49
|
+
return BREAKPOINT_ORDER;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Subscribe to breakpoint changes.
|
|
53
|
+
* Callback is called when the breakpoint changes (not on every resize).
|
|
54
|
+
*
|
|
55
|
+
* @param callback - Function to call when breakpoint changes
|
|
56
|
+
* @returns Unsubscribe function
|
|
57
|
+
*/
|
|
58
|
+
subscribe(callback) {
|
|
59
|
+
this._listeners.add(callback);
|
|
60
|
+
return () => this._listeners.delete(callback);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Check if the current breakpoint matches the given breakpoint.
|
|
64
|
+
*/
|
|
65
|
+
is(breakpoint) {
|
|
66
|
+
return this._currentBreakpoint === breakpoint;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if the current breakpoint is at least the given breakpoint.
|
|
70
|
+
* E.g., isAtLeast('md') returns true for md, lg, xl.
|
|
71
|
+
*/
|
|
72
|
+
isAtLeast(breakpoint) {
|
|
73
|
+
const currentIndex = BREAKPOINT_ORDER.indexOf(this._currentBreakpoint);
|
|
74
|
+
const targetIndex = BREAKPOINT_ORDER.indexOf(breakpoint);
|
|
75
|
+
return currentIndex >= targetIndex;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check if the current breakpoint is at most the given breakpoint.
|
|
79
|
+
* E.g., isAtMost('md') returns true for xs, sm, md.
|
|
80
|
+
*/
|
|
81
|
+
isAtMost(breakpoint) {
|
|
82
|
+
const currentIndex = BREAKPOINT_ORDER.indexOf(this._currentBreakpoint);
|
|
83
|
+
const targetIndex = BREAKPOINT_ORDER.indexOf(breakpoint);
|
|
84
|
+
return currentIndex <= targetIndex;
|
|
85
|
+
}
|
|
86
|
+
_updateSize() {
|
|
87
|
+
this._width = window.innerWidth;
|
|
88
|
+
const bp = this._breakpoints;
|
|
89
|
+
if (this._width >= bp.xl) {
|
|
90
|
+
this._currentBreakpoint = "xl";
|
|
91
|
+
} else if (this._width >= bp.lg) {
|
|
92
|
+
this._currentBreakpoint = "lg";
|
|
93
|
+
} else if (this._width >= bp.md) {
|
|
94
|
+
this._currentBreakpoint = "md";
|
|
95
|
+
} else if (this._width >= bp.sm) {
|
|
96
|
+
this._currentBreakpoint = "sm";
|
|
97
|
+
} else {
|
|
98
|
+
this._currentBreakpoint = "xs";
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
_notifyListeners() {
|
|
102
|
+
this._listeners.forEach((cb) => cb());
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const screenSizeService = new ScreenSizeServiceImpl();
|
|
106
|
+
|
|
107
|
+
export { screenSizeService };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Screen Size module - Utilities for responsive behavior in Lit applications
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* - ScreenSizeService: Singleton service for tracking viewport size
|
|
6
|
+
* - ScreenSizeController: Reactive controller for Lit components
|
|
7
|
+
* - responsiveText/responsiveValue: Directives for responsive values in templates
|
|
8
|
+
*/
|
|
9
|
+
export { screenSizeService } from './ScreenSizeService.js';
|
|
10
|
+
export { ScreenSizeController } from './ScreenSizeController.js';
|
|
11
|
+
export { responsiveText, responsiveValue } from './responsive-directives.js';
|
|
12
|
+
export type { Breakpoint, BreakpointConfig, ResponsiveTextOptions, ResponsiveValueOptions, } from './types.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/screen-size/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGjE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG7E,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { AsyncDirective } from 'lit/async-directive.js';
|
|
2
|
+
import { ResponsiveTextOptions, ResponsiveValueOptions } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* ResponsiveTextDirective - Returns different text based on screen size
|
|
5
|
+
*/
|
|
6
|
+
declare class ResponsiveTextDirective extends AsyncDirective {
|
|
7
|
+
private _options?;
|
|
8
|
+
private _unsubscribe?;
|
|
9
|
+
render(options: ResponsiveTextOptions): string;
|
|
10
|
+
disconnected(): void;
|
|
11
|
+
reconnected(): void;
|
|
12
|
+
private _getText;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* ResponsiveValueDirective - Returns different values based on screen size (generic)
|
|
16
|
+
*/
|
|
17
|
+
declare class ResponsiveValueDirective<T> extends AsyncDirective {
|
|
18
|
+
private _options?;
|
|
19
|
+
private _unsubscribe?;
|
|
20
|
+
render(options: ResponsiveValueOptions<T>): T;
|
|
21
|
+
disconnected(): void;
|
|
22
|
+
reconnected(): void;
|
|
23
|
+
private _getValue;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Directive for responsive text values.
|
|
27
|
+
* Returns different text based on the current screen size breakpoint.
|
|
28
|
+
*
|
|
29
|
+
* @param options - Object with default and optional breakpoint-specific texts
|
|
30
|
+
* @returns The text for the current breakpoint (with fallback to smaller breakpoints)
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* html`<pd-button text="${responsiveText({
|
|
35
|
+
* default: 'Click here to continue',
|
|
36
|
+
* sm: 'Continue',
|
|
37
|
+
* xs: 'Go'
|
|
38
|
+
* })}"></pd-button>`
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare const responsiveText: (options: ResponsiveTextOptions) => import('lit/async-directive.js').DirectiveResult<typeof ResponsiveTextDirective>;
|
|
42
|
+
/**
|
|
43
|
+
* Directive for responsive generic values.
|
|
44
|
+
* Returns different values based on the current screen size breakpoint.
|
|
45
|
+
*
|
|
46
|
+
* @param options - Object with default and optional breakpoint-specific values
|
|
47
|
+
* @returns The value for the current breakpoint (with fallback to smaller breakpoints)
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* html`<my-component
|
|
52
|
+
* columns="${responsiveValue({ default: 4, md: 2, sm: 1 })}"
|
|
53
|
+
* .showSidebar="${responsiveValue({ default: true, sm: false })}"
|
|
54
|
+
* ></my-component>`
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare const responsiveValue: (options: ResponsiveValueOptions<unknown>) => import('lit/async-directive.js').DirectiveResult<typeof ResponsiveValueDirective>;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=responsive-directives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responsive-directives.d.ts","sourceRoot":"","sources":["../../src/screen-size/responsive-directives.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,cAAc,EAAa,MAAM,wBAAwB,CAAC;AAEnE,OAAO,KAAK,EAEV,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAgCpB;;GAEG;AACH,cAAM,uBAAwB,SAAQ,cAAc;IAClD,OAAO,CAAC,QAAQ,CAAC,CAAwB;IACzC,OAAO,CAAC,YAAY,CAAC,CAAa;IAElC,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM;IAa9C,YAAY,IAAI,IAAI;IAKpB,WAAW,IAAI,IAAI;IASnB,OAAO,CAAC,QAAQ;CAIjB;AAED;;GAEG;AACH,cAAM,wBAAwB,CAAC,CAAC,CAAE,SAAQ,cAAc;IACtD,OAAO,CAAC,QAAQ,CAAC,CAA4B;IAC7C,OAAO,CAAC,YAAY,CAAC,CAAa;IAElC,MAAM,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC;IAa7C,YAAY,IAAI,IAAI;IAKpB,WAAW,IAAI,IAAI;IASnB,OAAO,CAAC,SAAS;CAIlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,cAAc,sHAAqC,CAAC;AAEjE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,eAAe,iIAAsC,CAAC"}
|