@pallasoft/ps-core-components 2.33.0 → 2.35.0
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/analytics/index.d.ts +12 -0
- package/dist/analytics/index.js +28 -0
- package/dist/analytics/report-client-error.d.ts +1 -0
- package/dist/analytics/report-client-error.js +6 -0
- package/dist/components/ps-analytics-provider.d.ts +15 -0
- package/dist/components/ps-analytics-provider.js +73 -0
- package/dist/components/ps-client-error-reporter.d.ts +5 -0
- package/dist/components/ps-client-error-reporter.js +22 -0
- package/dist/components/ps-consent-banner.d.ts +11 -0
- package/dist/components/ps-consent-banner.js +21 -0
- package/dist/constants/ps-analytics-config.d.ts +20 -0
- package/dist/constants/ps-analytics-config.js +23 -0
- package/dist/constants/ps-client-error-config.d.ts +23 -0
- package/dist/constants/ps-client-error-config.js +17 -0
- package/dist/esm/analytics/index.js +12 -0
- package/dist/esm/analytics/report-client-error.js +2 -0
- package/dist/esm/components/ps-accordion.js +2 -2
- package/dist/esm/components/ps-action-tile.js +2 -2
- package/dist/esm/components/ps-active-filter-chip.js +1 -1
- package/dist/esm/components/ps-analytics-provider.js +69 -0
- package/dist/esm/components/ps-app-store-buttons.js +3 -3
- package/dist/esm/components/ps-audio-spectrum.js +1 -1
- package/dist/esm/components/ps-badge.js +2 -2
- package/dist/esm/components/ps-button.js +2 -2
- package/dist/esm/components/ps-capped-list.js +2 -2
- package/dist/esm/components/ps-card-block-skeleton.js +2 -2
- package/dist/esm/components/ps-card.js +3 -3
- package/dist/esm/components/ps-client-error-reporter.js +18 -0
- package/dist/esm/components/ps-client-only.js +1 -1
- package/dist/esm/components/ps-consent-banner.js +17 -0
- package/dist/esm/components/ps-drag-overlay.js +2 -2
- package/dist/esm/components/ps-draggable-grid.js +5 -5
- package/dist/esm/components/ps-fab.js +1 -1
- package/dist/esm/components/ps-faq-answer.js +1 -1
- package/dist/esm/components/ps-feature-card.js +1 -1
- package/dist/esm/components/ps-feature-grid.js +3 -3
- package/dist/esm/components/ps-form-fields-skeleton.js +3 -3
- package/dist/esm/components/ps-form-footer.js +1 -1
- package/dist/esm/components/ps-form-page-skeleton.js +4 -4
- package/dist/esm/components/ps-icon-button.js +1 -1
- package/dist/esm/components/ps-icon-link.js +1 -1
- package/dist/esm/components/ps-infinite-scroll.js +1 -1
- package/dist/esm/components/ps-intro-skeleton.js +1 -1
- package/dist/esm/components/ps-layer.js +1 -1
- package/dist/esm/components/ps-link-button.js +1 -1
- package/dist/esm/components/ps-link-tile-grid.js +1 -1
- package/dist/esm/components/ps-list-tile.js +2 -2
- package/dist/esm/components/ps-metric-card.js +2 -2
- package/dist/esm/components/ps-metric-grid-skeleton.js +1 -1
- package/dist/esm/components/ps-metric-grid.js +2 -2
- package/dist/esm/components/ps-metric-row.js +2 -2
- package/dist/esm/components/ps-navigation-progress.js +2 -2
- package/dist/esm/components/ps-page-header.js +2 -2
- package/dist/esm/components/ps-page-skeleton.js +6 -6
- package/dist/esm/components/ps-pallasoft-mark.js +1 -1
- package/dist/esm/components/ps-pallasoft-sign-in-button.js +2 -2
- package/dist/esm/components/ps-pill.js +2 -2
- package/dist/esm/components/ps-rating-display.js +2 -2
- package/dist/esm/components/ps-scaled-preview.js +2 -2
- package/dist/esm/components/ps-section-header.js +3 -3
- package/dist/esm/components/ps-section-panel-skeleton.js +1 -1
- package/dist/esm/components/ps-signed-amount.js +1 -1
- package/dist/esm/components/ps-site-header.js +2 -2
- package/dist/esm/components/ps-skeleton-card.js +2 -2
- package/dist/esm/components/ps-skeleton-list.js +4 -4
- package/dist/esm/components/ps-skeleton-media.js +3 -3
- package/dist/esm/components/ps-skeleton-table.js +4 -4
- package/dist/esm/components/ps-skeleton-text.js +3 -3
- package/dist/esm/components/ps-skeleton.js +3 -3
- package/dist/esm/components/ps-sortable-list.js +5 -5
- package/dist/esm/components/ps-start-panel.js +1 -1
- package/dist/esm/components/ps-step-list.js +2 -2
- package/dist/esm/components/ps-step-progress.js +1 -1
- package/dist/esm/components/ps-store-badge.js +1 -1
- package/dist/esm/components/ps-tab-row-skeleton.js +2 -2
- package/dist/esm/components/ps-table-list-skeleton.js +2 -2
- package/dist/esm/components/ps-table-page-skeleton.js +2 -2
- package/dist/esm/components/ps-theme-controller.js +2 -2
- package/dist/esm/components/ps-tool-card-grid.js +2 -2
- package/dist/esm/components/ps-voice-orb.js +1 -1
- package/dist/esm/constants/ps-analytics-config.js +20 -0
- package/dist/esm/constants/ps-client-error-config.js +14 -0
- package/dist/esm/constants/ps-draggable-grid.js +1 -1
- package/dist/esm/constants/ps-rating-display-config.js +1 -1
- package/dist/esm/constants/ps-skeleton-config.js +1 -1
- package/dist/esm/constants/ps-step-marker-class-names.js +1 -1
- package/dist/esm/constants/ps-store-badge-config.js +1 -1
- package/dist/esm/hooks/use-consent.js +17 -0
- package/dist/esm/hooks/use-ps-drag-sensors.js +1 -1
- package/dist/esm/hooks/use-ps-exit-transition.js +1 -1
- package/dist/esm/hooks/use-ps-hydrated.js +1 -1
- package/dist/esm/hooks/use-ps-layer-z-index.js +1 -1
- package/dist/esm/hooks/use-ps-navigation-progress.js +1 -1
- package/dist/esm/hooks/use-ps-optimistic-fetcher.js +2 -2
- package/dist/esm/hooks/use-ps-optimistic-save.js +2 -2
- package/dist/esm/hooks/use-ps-scroll-lock.js +1 -1
- package/dist/esm/index.js +173 -173
- package/dist/esm/models/analytics-csp-input.js +1 -0
- package/dist/esm/models/analytics-csp-origins.js +1 -0
- package/dist/esm/models/ps-client-error-payload.js +1 -0
- package/dist/esm/models/ps-client-error-settings.js +1 -0
- package/dist/esm/models/ps-consent-api.js +1 -0
- package/dist/esm/models/ps-consent-choice.js +1 -0
- package/dist/esm/models/ps-consent-state.js +1 -0
- package/dist/esm/models/ps-gtag-window.js +1 -0
- package/dist/esm/services/analytics-csp-service.js +27 -0
- package/dist/esm/services/ps-analytics-key-service.js +8 -0
- package/dist/esm/services/ps-client-error-service.js +72 -0
- package/dist/esm/services/ps-consent-service.js +57 -0
- package/dist/esm/services/ps-google-analytics-service.js +41 -0
- package/dist/esm/services/ps-optimistic-save-service.js +1 -1
- package/dist/esm/services/ps-post-hog-service.js +18 -0
- package/dist/esm/services/ps-skeleton-class-service.js +1 -1
- package/dist/hooks/use-consent.d.ts +2 -0
- package/dist/hooks/use-consent.js +21 -0
- package/dist/models/analytics-csp-input.d.ts +7 -0
- package/dist/models/analytics-csp-input.js +2 -0
- package/dist/models/analytics-csp-origins.d.ts +5 -0
- package/dist/models/analytics-csp-origins.js +2 -0
- package/dist/models/ps-client-error-payload.d.ts +9 -0
- package/dist/models/ps-client-error-payload.js +2 -0
- package/dist/models/ps-client-error-settings.d.ts +4 -0
- package/dist/models/ps-client-error-settings.js +2 -0
- package/dist/models/ps-consent-api.d.ts +9 -0
- package/dist/models/ps-consent-api.js +2 -0
- package/dist/models/ps-consent-choice.d.ts +1 -0
- package/dist/models/ps-consent-choice.js +2 -0
- package/dist/models/ps-consent-state.d.ts +5 -0
- package/dist/models/ps-consent-state.js +2 -0
- package/dist/models/ps-gtag-window.d.ts +4 -0
- package/dist/models/ps-gtag-window.js +2 -0
- package/dist/services/analytics-csp-service.d.ts +7 -0
- package/dist/services/analytics-csp-service.js +31 -0
- package/dist/services/ps-analytics-key-service.d.ts +3 -0
- package/dist/services/ps-analytics-key-service.js +12 -0
- package/dist/services/ps-client-error-service.d.ts +14 -0
- package/dist/services/ps-client-error-service.js +76 -0
- package/dist/services/ps-consent-service.d.ts +15 -0
- package/dist/services/ps-consent-service.js +61 -0
- package/dist/services/ps-google-analytics-service.d.ts +6 -0
- package/dist/services/ps-google-analytics-service.js +45 -0
- package/dist/services/ps-post-hog-service.d.ts +4 -0
- package/dist/services/ps-post-hog-service.js +55 -0
- package/package.json +17 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
|
-
import { PsPageSkeletonConfig } from '../constants/ps-page-skeleton-config';
|
|
4
|
-
import { PsSkeletonShape } from '../constants/ps-skeleton-shape';
|
|
5
|
-
import { PsSkeleton } from './ps-skeleton';
|
|
3
|
+
import { PsPageSkeletonConfig } from '../constants/ps-page-skeleton-config.js';
|
|
4
|
+
import { PsSkeletonShape } from '../constants/ps-skeleton-shape.js';
|
|
5
|
+
import { PsSkeleton } from './ps-skeleton.js';
|
|
6
6
|
export const PsFormFieldsSkeleton = ({ columnsClassName = PsPageSkeletonConfig.formColumnsClassName, fields = PsPageSkeletonConfig.formFields, }) => (_jsx("div", { className: PallasoftClassNameService.merge('grid gap-4', columnsClassName), children: fields.map((field) => (_jsxs("div", { className: 'flex flex-col gap-2', children: [_jsx(PsSkeleton, { className: PsPageSkeletonConfig.formLabelClassName }), _jsx(PsSkeleton, { className: 'h-ps-control w-full', shape: PsSkeletonShape.Block })] }, field))) }));
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { PsButton } from './ps-button';
|
|
2
|
+
import { PsButton } from './ps-button.js';
|
|
3
3
|
export const PsFormFooter = ({ isSaving, isSecondaryVisible = true, isSubmitDisabled, onSecondary, savingLabel, secondaryLabel, submitLabel, }) => (_jsxs("div", { className: 'sticky bottom-0 z-docked -mx-4 flex justify-end gap-2 border-t border-line bg-surface/90 px-4 py-3 backdrop-blur sm:bottom-4 sm:mx-0 sm:border-0 sm:bg-transparent sm:px-0 sm:py-0 sm:backdrop-blur-none', children: [isSecondaryVisible ? (_jsx(PsButton, { disabled: isSaving, onClick: onSecondary, type: 'button', variant: 'surface', children: secondaryLabel })) : null, _jsx(PsButton, { disabled: isSubmitDisabled || isSaving, isLoading: isSaving, loadingLabel: savingLabel, type: 'submit', variant: 'primary', children: submitLabel })] }));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { PsPageSkeletonConfig } from '../constants/ps-page-skeleton-config';
|
|
3
|
-
import { PsFormFieldsSkeleton } from './ps-form-fields-skeleton';
|
|
4
|
-
import { PsPageSkeleton } from './ps-page-skeleton';
|
|
5
|
-
import { PsSectionPanelSkeleton } from './ps-section-panel-skeleton';
|
|
2
|
+
import { PsPageSkeletonConfig } from '../constants/ps-page-skeleton-config.js';
|
|
3
|
+
import { PsFormFieldsSkeleton } from './ps-form-fields-skeleton.js';
|
|
4
|
+
import { PsPageSkeleton } from './ps-page-skeleton.js';
|
|
5
|
+
import { PsSectionPanelSkeleton } from './ps-section-panel-skeleton.js';
|
|
6
6
|
export const PsFormPageSkeleton = ({ loadingLabel, title }) => (_jsx(PsPageSkeleton, { hasActions: true, loadingLabel: loadingLabel, title: title, children: PsPageSkeletonConfig.formSections.map((section) => (_jsx(PsSectionPanelSkeleton, { children: _jsx(PsFormFieldsSkeleton, {}) }, section))) }));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
3
|
import { PsIcon } from '@pallasoft/ps-icons';
|
|
4
|
-
import { PsIconActionConfig } from '../constants/ps-icon-action-config';
|
|
4
|
+
import { PsIconActionConfig } from '../constants/ps-icon-action-config.js';
|
|
5
5
|
export const PsIconButton = ({ className, iconKey, label, size = 'default', type, ...props }) => (_jsx("button", { ...props, "aria-label": label, className: PallasoftClassNameService.merge(PsIconActionConfig.className, PsIconActionConfig.sizeClassNames[size], PsIconActionConfig.disabledClassName, className), title: label, type: type === 'submit' || type === 'reset' ? type : 'button', children: _jsx(PsIcon, { "aria-hidden": 'true', className: PsIconActionConfig.iconClassName, iconKey: iconKey }) }));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
3
|
import { PsIcon } from '@pallasoft/ps-icons';
|
|
4
|
-
import { PsIconActionConfig } from '../constants/ps-icon-action-config';
|
|
4
|
+
import { PsIconActionConfig } from '../constants/ps-icon-action-config.js';
|
|
5
5
|
export const PsIconLink = ({ className, href, iconKey, label, LinkComponent, size = 'default', }) => {
|
|
6
6
|
const linkClassName = PallasoftClassNameService.merge(PsIconActionConfig.className, PsIconActionConfig.sizeClassNames[size], className);
|
|
7
7
|
const icon = (_jsx(PsIcon, { "aria-hidden": 'true', className: PsIconActionConfig.iconClassName, iconKey: iconKey }));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import InfiniteScroll from 'react-infinite-scroll-component';
|
|
3
|
-
import { PsSpinner } from './ps-spinner';
|
|
3
|
+
import { PsSpinner } from './ps-spinner.js';
|
|
4
4
|
const defaultLoader = (_jsx("div", { className: 'flex w-full justify-center py-8', children: _jsx(PsSpinner, {}) }));
|
|
5
5
|
export const PsInfiniteScroll = ({ children, className, dataLength, hasMore, loader, next, }) => (_jsx(InfiniteScroll, { className: className, dataLength: dataLength, hasMore: hasMore, loader: loader !== null && loader !== undefined ? loader : defaultLoader, next: next, children: children }));
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { PsSkeleton } from './ps-skeleton';
|
|
2
|
+
import { PsSkeleton } from './ps-skeleton.js';
|
|
3
3
|
export const PsIntroSkeleton = () => (_jsxs("div", { className: 'mx-auto flex w-full max-w-3xl flex-col items-center gap-4', children: [_jsx(PsSkeleton, { height: '0.875rem', radius: '999px', width: '6rem' }), _jsx(PsSkeleton, { height: '2.5rem', radius: '0.75rem', width: '70%' }), _jsx(PsSkeleton, { height: '1.125rem', radius: '0.5rem', width: '85%' })] }));
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { PsLayerContext } from '../contexts/ps-layer-context';
|
|
2
|
+
import { PsLayerContext } from '../contexts/ps-layer-context.js';
|
|
3
3
|
export const PsLayer = ({ children, zIndex }) => (_jsx(PsLayerContext.Provider, { value: zIndex, children: children }));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
|
-
import { PsButtonBaseClassName, PsButtonSizeClassNames, PsLinkButtonVariantClassNames, } from '../constants/ps-button-classes';
|
|
3
|
+
import { PsButtonBaseClassName, PsButtonSizeClassNames, PsLinkButtonVariantClassNames, } from '../constants/ps-button-classes.js';
|
|
4
4
|
export const PsLinkButton = ({ children, className, href, leadingIcon, LinkComponent, size = 'default', trailingIcon, variant = 'secondary', ...props }) => {
|
|
5
5
|
const linkClassName = PallasoftClassNameService.merge(PsButtonBaseClassName, PsButtonSizeClassNames[size], PsLinkButtonVariantClassNames[variant], className);
|
|
6
6
|
const content = (_jsxs("span", { className: 'inline-flex min-w-0 items-center gap-2', children: [leadingIcon ? _jsx("span", { className: 'shrink-0', children: leadingIcon }) : null, _jsx("span", { className: 'truncate', children: children }), trailingIcon ? _jsx("span", { className: 'shrink-0', children: trailingIcon }) : null] }));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { PsIcon, PsIconKey } from '@pallasoft/ps-icons';
|
|
3
3
|
import { PsStaggerContainer, PsStaggerItem } from '@pallasoft/ps-motion-components';
|
|
4
|
-
import { PsWebsiteSectionConfig } from '../constants/ps-website-section-config';
|
|
4
|
+
import { PsWebsiteSectionConfig } from '../constants/ps-website-section-config.js';
|
|
5
5
|
const tileClassName = 'ps-pressable ps-focus-ring group flex h-full items-center justify-between gap-3 rounded-ps-card border border-line bg-surface px-4 py-3 transition-colors hover:border-primary/50';
|
|
6
6
|
export const PsLinkTileGrid = ({ LinkComponent, tiles }) => {
|
|
7
7
|
const renderTile = (tile, content) => LinkComponent ? (_jsx(LinkComponent, { "aria-label": tile.ariaLabel, className: tileClassName, prefetch: 'intent', to: tile.href, children: content })) : (_jsx("a", { "aria-label": tile.ariaLabel, className: tileClassName, href: tile.href, children: content }));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
|
-
import { PsSkeleton } from './ps-skeleton';
|
|
4
|
-
import { PsSkeletonGroup } from './ps-skeleton-group';
|
|
3
|
+
import { PsSkeleton } from './ps-skeleton.js';
|
|
4
|
+
import { PsSkeletonGroup } from './ps-skeleton-group.js';
|
|
5
5
|
const densityClassNames = {
|
|
6
6
|
compact: 'py-2',
|
|
7
7
|
normal: 'py-2.5',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
|
-
import { PsSkeleton } from './ps-skeleton';
|
|
4
|
-
import { PsSkeletonGroup } from './ps-skeleton-group';
|
|
3
|
+
import { PsSkeleton } from './ps-skeleton.js';
|
|
4
|
+
import { PsSkeletonGroup } from './ps-skeleton-group.js';
|
|
5
5
|
export const PsMetricCard = ({ changeLabel, className, icon, isLoading = false, label, value, }) => isLoading ? (_jsxs(PsSkeletonGroup, { className: PallasoftClassNameService.merge('ps-metric-card flex min-w-0 flex-col gap-3 p-3.5 sm:p-4', className), label: label, children: [_jsx(PsSkeleton, { className: 'h-2.5 w-24' }), _jsx(PsSkeleton, { className: 'h-6 w-32' })] })) : (_jsx("section", { className: PallasoftClassNameService.merge('ps-metric-card min-w-0 p-3.5 sm:p-4', className), children: _jsxs("div", { className: 'flex items-start justify-between gap-3', children: [_jsxs("div", { className: 'min-w-0', children: [_jsx("p", { className: 'ps-eyebrow truncate', children: label }), _jsx("p", { className: 'mt-2 truncate text-2xl font-semibold text-ink', children: value }), changeLabel ? _jsx("p", { className: 'mt-1 text-sm text-slate-500', children: changeLabel }) : null] }), icon ? (_jsx("div", { className: 'flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-primary-soft text-primary', children: icon })) : null] }) }));
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { PsMetricCard } from './ps-metric-card';
|
|
2
|
+
import { PsMetricCard } from './ps-metric-card.js';
|
|
3
3
|
export const PsMetricGridSkeleton = ({ count }) => (_jsx("div", { className: 'grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4', children: Array.from({ length: count }, (_, index) => (_jsx(PsMetricCard, { isLoading: true, label: '', value: '' }, index))) }));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
|
-
import { PsMetricGridColumns, PsMetricGridConfig } from '../constants/ps-metric-grid-config';
|
|
4
|
-
import { PsMetricCard } from './ps-metric-card';
|
|
3
|
+
import { PsMetricGridColumns, PsMetricGridConfig } from '../constants/ps-metric-grid-config.js';
|
|
4
|
+
import { PsMetricCard } from './ps-metric-card.js';
|
|
5
5
|
export const PsMetricGrid = ({ items }) => {
|
|
6
6
|
const columns = PsMetricGridColumns[Math.min(items.length, PsMetricGridConfig.maxColumns)];
|
|
7
7
|
return (_jsx("div", { className: PallasoftClassNameService.merge('grid grid-cols-1 gap-3', columns === undefined ? PsMetricGridColumns[PsMetricGridConfig.defaultColumns] : columns), children: items.map((item) => (_jsx(PsMetricCard, { label: item.label, value: item.value }, item.label))) }));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { PsStaggerContainer, PsStaggerItem } from '@pallasoft/ps-motion-components';
|
|
3
|
-
import { PsWebsiteSectionConfig } from '../constants/ps-website-section-config';
|
|
4
|
-
import { PsMetricCard } from './ps-metric-card';
|
|
3
|
+
import { PsWebsiteSectionConfig } from '../constants/ps-website-section-config.js';
|
|
4
|
+
import { PsMetricCard } from './ps-metric-card.js';
|
|
5
5
|
export const PsMetricRow = ({ metrics }) => (_jsx(PsStaggerContainer, { className: 'grid w-full grid-cols-1 gap-5 md:grid-cols-3', staggerDelay: PsWebsiteSectionConfig.staggerDelay, children: metrics.map((metric) => (_jsx(PsStaggerItem, { children: _jsx(PsMetricCard, { label: metric.label, value: metric.value }) }, metric.label))) }));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService, PallasoftZIndex } from '@pallasoft/ps-design-system';
|
|
3
|
-
import { PsNavigationProgressConfig } from '../constants/ps-navigation-progress-config';
|
|
4
|
-
import { usePsNavigationProgress } from '../hooks/use-ps-navigation-progress';
|
|
3
|
+
import { PsNavigationProgressConfig } from '../constants/ps-navigation-progress-config.js';
|
|
4
|
+
import { usePsNavigationProgress } from '../hooks/use-ps-navigation-progress.js';
|
|
5
5
|
export const PsNavigationProgress = ({ className, color = PsNavigationProgressConfig.defaultColor, delayMs = PsNavigationProgressConfig.showDelayMs, height = PsNavigationProgressConfig.defaultHeight, isLoading, label = PsNavigationProgressConfig.defaultLabel, progress, shadow = true, }) => {
|
|
6
6
|
const { isAnimated, isVisible, width } = usePsNavigationProgress(isLoading !== undefined
|
|
7
7
|
? isLoading
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { PsBackLink } from './ps-back-link';
|
|
3
|
-
import { PsSectionHeader } from './ps-section-header';
|
|
2
|
+
import { PsBackLink } from './ps-back-link.js';
|
|
3
|
+
import { PsSectionHeader } from './ps-section-header.js';
|
|
4
4
|
export const PsPageHeader = ({ actions, backLink, title }) => (_jsx(PsSectionHeader, { leading: backLink ? _jsx(PsBackLink, { ...backLink }) : undefined, title: title, trailing: actions ? (_jsx("div", { className: 'flex flex-wrap items-center justify-end gap-2', children: actions })) : undefined }));
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { PsSkeletonShape } from '../constants/ps-skeleton-shape';
|
|
3
|
-
import { PsPageHeader } from './ps-page-header';
|
|
4
|
-
import { PsPageLayout } from './ps-page-layout';
|
|
5
|
-
import { PsPageStack } from './ps-page-stack';
|
|
6
|
-
import { PsSectionHeader } from './ps-section-header';
|
|
7
|
-
import { PsSkeleton } from './ps-skeleton';
|
|
2
|
+
import { PsSkeletonShape } from '../constants/ps-skeleton-shape.js';
|
|
3
|
+
import { PsPageHeader } from './ps-page-header.js';
|
|
4
|
+
import { PsPageLayout } from './ps-page-layout.js';
|
|
5
|
+
import { PsPageStack } from './ps-page-stack.js';
|
|
6
|
+
import { PsSectionHeader } from './ps-section-header.js';
|
|
7
|
+
import { PsSkeleton } from './ps-skeleton.js';
|
|
8
8
|
export const PsPageSkeleton = ({ children, hasActions = false, isNarrow = false, loadingLabel, title, }) => (_jsx(PsPageLayout, { isNarrow: isNarrow, children: _jsxs(PsPageStack, { children: [title === undefined ? (_jsx(PsSectionHeader, { isLoading: true, title: loadingLabel, trailing: hasActions })) : (_jsx(PsPageHeader, { actions: hasActions ? (_jsx(PsSkeleton, { height: '2.5rem', radius: '9999px', shape: PsSkeletonShape.Block, width: '9rem' })) : undefined, title: title })), children] }) }));
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { PsPallasoftMarkConfig } from '../constants/ps-pallasoft-mark-config';
|
|
2
|
+
import { PsPallasoftMarkConfig } from '../constants/ps-pallasoft-mark-config.js';
|
|
3
3
|
export const PsPallasoftMark = ({ className, title }) => (_jsxs("svg", { "aria-hidden": title === undefined ? true : undefined, className: className, fill: 'none', role: title === undefined ? undefined : 'img', viewBox: PsPallasoftMarkConfig.viewBox, xmlns: 'http://www.w3.org/2000/svg', children: [title === undefined ? null : _jsx("title", { children: title }), _jsx("path", { clipRule: 'evenodd', d: PsPallasoftMarkConfig.primaryPath, fill: PsPallasoftMarkConfig.primaryColor, fillRule: 'evenodd' }), _jsx("path", { clipRule: 'evenodd', d: PsPallasoftMarkConfig.secondaryPath, fill: PsPallasoftMarkConfig.secondaryColor, fillRule: 'evenodd' })] }));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
|
-
import { PsPallasoftSignInClasses } from '../constants/ps-pallasoft-sign-in-classes';
|
|
4
|
-
import { PsPallasoftMark } from './ps-pallasoft-mark';
|
|
3
|
+
import { PsPallasoftSignInClasses } from '../constants/ps-pallasoft-sign-in-classes.js';
|
|
4
|
+
import { PsPallasoftMark } from './ps-pallasoft-mark.js';
|
|
5
5
|
export const PsPallasoftSignInButton = ({ children, className, href, LinkComponent, size = 'default', ...props }) => {
|
|
6
6
|
const linkClassName = PallasoftClassNameService.merge(PsPallasoftSignInClasses.base, PsPallasoftSignInClasses.sizes[size], className);
|
|
7
7
|
const content = (_jsxs(_Fragment, { children: [_jsx(PsPallasoftMark, { className: PallasoftClassNameService.merge('shrink-0', PsPallasoftSignInClasses.markSizes[size]) }), _jsx("span", { className: 'truncate', children: children })] }));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
|
-
import { PsSkeletonShape } from '../constants/ps-skeleton-shape';
|
|
4
|
-
import { PsSkeleton } from './ps-skeleton';
|
|
3
|
+
import { PsSkeletonShape } from '../constants/ps-skeleton-shape.js';
|
|
4
|
+
import { PsSkeleton } from './ps-skeleton.js';
|
|
5
5
|
const toneClassNames = {
|
|
6
6
|
danger: 'bg-rose-50 text-rose-700 ring-rose-100 dark:bg-rose-500/18 dark:text-rose-100 dark:ring-rose-300/22',
|
|
7
7
|
neutral: 'bg-slate-100 text-slate-700 ring-slate-200 dark:bg-white/10 dark:text-slate-100 dark:ring-white/12',
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
3
|
import { PsIcon, PsIconKey } from '@pallasoft/ps-icons';
|
|
4
|
-
import { PsRatingDisplayConfig } from '../constants/ps-rating-display-config';
|
|
5
|
-
import { PsRatingDisplaySize } from '../constants/ps-rating-display-size';
|
|
4
|
+
import { PsRatingDisplayConfig } from '../constants/ps-rating-display-config.js';
|
|
5
|
+
import { PsRatingDisplaySize } from '../constants/ps-rating-display-size.js';
|
|
6
6
|
export const PsRatingDisplay = ({ className, label, max = PsRatingDisplayConfig.defaultMax, score, size = PsRatingDisplaySize.Medium, }) => (_jsx("div", { "aria-label": label, className: PallasoftClassNameService.merge('flex items-center gap-1', className), role: 'img', children: Array.from({ length: max }, (_, index) => index + 1).map((value) => (_jsx(PsIcon, { className: PallasoftClassNameService.merge(PsRatingDisplayConfig.iconClassNames[size], value <= score
|
|
7
7
|
? PsRatingDisplayConfig.filledClassName
|
|
8
8
|
: PsRatingDisplayConfig.emptyClassName), iconKey: PsIconKey.Star }, value))) }));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
|
-
import { PsScaledPreviewConfig } from '../constants/ps-scaled-preview-config';
|
|
4
|
-
import { usePsElementSize } from '../hooks/use-ps-element-size';
|
|
3
|
+
import { PsScaledPreviewConfig } from '../constants/ps-scaled-preview-config.js';
|
|
4
|
+
import { usePsElementSize } from '../hooks/use-ps-element-size.js';
|
|
5
5
|
export const PsScaledPreview = ({ children, className, designWidth = PsScaledPreviewConfig.designWidth, isDecorative = true, }) => {
|
|
6
6
|
const [frameRef, frame] = usePsElementSize();
|
|
7
7
|
const [contentRef, content] = usePsElementSize();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { PsSkeletonShape } from '../constants/ps-skeleton-shape';
|
|
3
|
-
import { PsSkeleton } from './ps-skeleton';
|
|
4
|
-
import { PsSkeletonGroup } from './ps-skeleton-group';
|
|
2
|
+
import { PsSkeletonShape } from '../constants/ps-skeleton-shape.js';
|
|
3
|
+
import { PsSkeleton } from './ps-skeleton.js';
|
|
4
|
+
import { PsSkeletonGroup } from './ps-skeleton-group.js';
|
|
5
5
|
export const PsSectionHeader = ({ description, eyebrow, isLoading = false, leading, title, trailing, }) => isLoading ? (_jsxs(PsSkeletonGroup, { className: 'flex flex-wrap items-end justify-between gap-x-4 gap-y-3', label: title, children: [_jsxs("div", { className: 'flex min-w-0 flex-1 basis-auto flex-col gap-2', children: [eyebrow ? _jsx(PsSkeleton, { className: 'h-2.5 w-24' }) : null, _jsx(PsSkeleton, { className: 'h-6 w-52' }), description ? _jsx(PsSkeleton, { className: 'h-3 w-72' }) : null] }), trailing ? _jsx(PsSkeleton, { className: 'h-ps-control w-32', shape: PsSkeletonShape.Block }) : null] })) : (_jsxs("div", { className: 'flex flex-wrap items-end justify-between gap-x-4 gap-y-3', children: [_jsxs("div", { className: 'flex min-w-0 flex-1 basis-auto flex-col gap-2', children: [leading, eyebrow ? (_jsx("p", { className: 'text-[0.68rem] font-semibold uppercase tracking-[0.22em] text-ink/50', children: eyebrow })) : null, _jsx("h1", { className: 'break-words text-xl font-extrabold text-ink sm:text-2xl', children: title }), description ? (_jsx("p", { className: 'max-w-3xl text-sm leading-6 text-ink/60', children: description })) : null] }), trailing ? (_jsx("div", { className: 'flex w-full shrink-0 items-center justify-end sm:ml-auto sm:w-auto', children: trailing })) : null] }));
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { PsSkeleton } from './ps-skeleton';
|
|
2
|
+
import { PsSkeleton } from './ps-skeleton.js';
|
|
3
3
|
export const PsSectionPanelSkeleton = ({ children, title }) => (_jsxs("section", { className: 'ps-section', children: [_jsx("div", { className: 'flex min-h-10 items-center', children: title === undefined ? (_jsx(PsSkeleton, { className: 'h-4 w-44' })) : (_jsx("h2", { className: 'text-base font-semibold text-ink', children: title })) }), _jsx("div", { className: 'flex min-w-0 flex-col gap-4', children: children })] }));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
3
|
import { AmountDirection, Common } from '@pallasoft/ps-utilities';
|
|
4
|
-
import { PsAmountDirectionClasses } from '../constants/ps-amount-direction-classes';
|
|
4
|
+
import { PsAmountDirectionClasses } from '../constants/ps-amount-direction-classes.js';
|
|
5
5
|
export const PsSignedAmount = ({ amount, className, formatted }) => {
|
|
6
6
|
const direction = Common.AmountService.direction(amount);
|
|
7
7
|
return (_jsxs("span", { className: PallasoftClassNameService.merge('tabular-nums', PsAmountDirectionClasses[direction], className), children: [direction === AmountDirection.In ? '+' : '', formatted] }));
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
3
|
import { PsIcon, PsIconKey } from '@pallasoft/ps-icons';
|
|
4
|
-
import { PsSiteHeaderConfig } from '../constants/ps-site-header-config';
|
|
5
|
-
import { usePsPublishedHeight } from '../hooks/use-ps-published-height';
|
|
4
|
+
import { PsSiteHeaderConfig } from '../constants/ps-site-header-config.js';
|
|
5
|
+
import { usePsPublishedHeight } from '../hooks/use-ps-published-height.js';
|
|
6
6
|
const logoLinkClassName = 'flex shrink-0 items-center gap-2.5';
|
|
7
7
|
export const PsSiteHeader = ({ centerContent, className, homeHref, label, LinkComponent, logoAlt, logoClassName, logoSrc, logoSrcDark, logoSrcMobile, logoSrcMobileDark, navClassName, onBack, showLabel = false, trailing, }) => {
|
|
8
8
|
const headerRef = usePsPublishedHeight(PsSiteHeaderConfig.heightVariable);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
|
-
import { PsSkeleton } from './ps-skeleton';
|
|
4
|
-
import { PsSkeletonGroup } from './ps-skeleton-group';
|
|
3
|
+
import { PsSkeleton } from './ps-skeleton.js';
|
|
4
|
+
import { PsSkeletonGroup } from './ps-skeleton-group.js';
|
|
5
5
|
export const PsSkeletonCard = ({ className }) => (_jsxs(PsSkeletonGroup, { className: PallasoftClassNameService.merge('flex flex-col gap-3 rounded-[1.25rem] border border-line bg-surface p-5', className), children: [_jsx(PsSkeleton, { className: 'h-2.5 w-24' }), _jsx(PsSkeleton, { className: 'h-6 w-32' })] }));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
|
-
import { PsSkeletonConfig } from '../constants/ps-skeleton-config';
|
|
4
|
-
import { PsSkeletonShape } from '../constants/ps-skeleton-shape';
|
|
5
|
-
import { PsSkeleton } from './ps-skeleton';
|
|
6
|
-
import { PsSkeletonGroup } from './ps-skeleton-group';
|
|
3
|
+
import { PsSkeletonConfig } from '../constants/ps-skeleton-config.js';
|
|
4
|
+
import { PsSkeletonShape } from '../constants/ps-skeleton-shape.js';
|
|
5
|
+
import { PsSkeleton } from './ps-skeleton.js';
|
|
6
|
+
import { PsSkeletonGroup } from './ps-skeleton-group.js';
|
|
7
7
|
export const PsSkeletonList = ({ className, hasLeading = false, hasTrailing = true, rows = 4, title = false, }) => (_jsxs(PsSkeletonGroup, { className: PallasoftClassNameService.merge('flex flex-col', className), children: [title ? _jsx(PsSkeleton, { className: 'mx-3 mb-3 h-2.5 w-24' }) : null, Array.from({ length: rows }, (_, index) => (_jsxs("div", { className: 'flex min-h-11 items-center gap-3 px-3 py-2.5', children: [hasLeading ? _jsx(PsSkeleton, { shape: PsSkeletonShape.Circle }) : null, _jsx(PsSkeleton, { className: PsSkeletonConfig.lineWidths[index % PsSkeletonConfig.lineWidths.length] }), hasTrailing ? _jsx(PsSkeleton, { className: 'ml-auto h-2.5 w-20 shrink-0' }) : null] }, index)))] }));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
|
-
import { PsSkeletonShape } from '../constants/ps-skeleton-shape';
|
|
4
|
-
import { PsSkeleton } from './ps-skeleton';
|
|
5
|
-
import { PsSkeletonGroup } from './ps-skeleton-group';
|
|
3
|
+
import { PsSkeletonShape } from '../constants/ps-skeleton-shape.js';
|
|
4
|
+
import { PsSkeleton } from './ps-skeleton.js';
|
|
5
|
+
import { PsSkeletonGroup } from './ps-skeleton-group.js';
|
|
6
6
|
export const PsSkeletonMedia = ({ aspect = '16 / 9', className, hasCaption = true, label, }) => (_jsxs(PsSkeletonGroup, { className: PallasoftClassNameService.merge('w-full', className), label: label, children: [_jsx(PsSkeleton, { aspect: aspect, radius: 'var(--ps-radius-card, 1rem)', shape: PsSkeletonShape.Block }), hasCaption ? _jsx(PsSkeleton, { lines: 2, shape: PsSkeletonShape.Text }) : null] }));
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
|
-
import { PsSkeletonConfig } from '../constants/ps-skeleton-config';
|
|
4
|
-
import { PsSkeletonShape } from '../constants/ps-skeleton-shape';
|
|
5
|
-
import { PsSkeleton } from './ps-skeleton';
|
|
6
|
-
import { PsSkeletonGroup } from './ps-skeleton-group';
|
|
3
|
+
import { PsSkeletonConfig } from '../constants/ps-skeleton-config.js';
|
|
4
|
+
import { PsSkeletonShape } from '../constants/ps-skeleton-shape.js';
|
|
5
|
+
import { PsSkeleton } from './ps-skeleton.js';
|
|
6
|
+
import { PsSkeletonGroup } from './ps-skeleton-group.js';
|
|
7
7
|
export const PsSkeletonTable = ({ alignments, className, columns = 4, hasFooter = false, hasToolbar = false, isFramed = true, rows = 6, }) => {
|
|
8
8
|
const gridTemplateColumns = `minmax(0, 2fr) repeat(${Math.max(columns - 1, 0)}, minmax(0, 1fr))`;
|
|
9
9
|
const isRight = (columnIndex) => alignments !== undefined
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
|
-
import { PsSkeletonConfig } from '../constants/ps-skeleton-config';
|
|
4
|
-
import { PsSkeletonShape } from '../constants/ps-skeleton-shape';
|
|
5
|
-
import { PsSkeleton } from './ps-skeleton';
|
|
3
|
+
import { PsSkeletonConfig } from '../constants/ps-skeleton-config.js';
|
|
4
|
+
import { PsSkeletonShape } from '../constants/ps-skeleton-shape.js';
|
|
5
|
+
import { PsSkeleton } from './ps-skeleton.js';
|
|
6
6
|
export const PsSkeletonText = ({ className, lines = PsSkeletonConfig.defaultTextLines, }) => (_jsx(PsSkeleton, { className: PallasoftClassNameService.merge('w-full', className), lines: lines, shape: PsSkeletonShape.Text }));
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
|
-
import { PsSkeletonConfig } from '../constants/ps-skeleton-config';
|
|
4
|
-
import { PsSkeletonShape } from '../constants/ps-skeleton-shape';
|
|
5
|
-
import { PsSkeletonClassService } from '../services/ps-skeleton-class-service';
|
|
3
|
+
import { PsSkeletonConfig } from '../constants/ps-skeleton-config.js';
|
|
4
|
+
import { PsSkeletonShape } from '../constants/ps-skeleton-shape.js';
|
|
5
|
+
import { PsSkeletonClassService } from '../services/ps-skeleton-class-service.js';
|
|
6
6
|
const sizeStyle = (props) => {
|
|
7
7
|
const style = {};
|
|
8
8
|
if (props.width !== undefined)
|
|
@@ -3,11 +3,11 @@ import { useState } from 'react';
|
|
|
3
3
|
import { DndContext, closestCenter, } from '@dnd-kit/core';
|
|
4
4
|
import { SortableContext, horizontalListSortingStrategy, useSortable, verticalListSortingStrategy, } from '@dnd-kit/sortable';
|
|
5
5
|
import { CSS } from '@dnd-kit/utilities';
|
|
6
|
-
import { PsDragClasses, PsDragConfig, PsDragListLiftFrames } from '../constants/ps-drag-config';
|
|
7
|
-
import { usePsDragSensors } from '../hooks/use-ps-drag-sensors';
|
|
8
|
-
import { usePsReducedMotion } from '../hooks/use-ps-reduced-motion';
|
|
9
|
-
import { PsDragGrip } from './ps-drag-grip';
|
|
10
|
-
import { PsDragOverlay } from './ps-drag-overlay';
|
|
6
|
+
import { PsDragClasses, PsDragConfig, PsDragListLiftFrames } from '../constants/ps-drag-config.js';
|
|
7
|
+
import { usePsDragSensors } from '../hooks/use-ps-drag-sensors.js';
|
|
8
|
+
import { usePsReducedMotion } from '../hooks/use-ps-reduced-motion.js';
|
|
9
|
+
import { PsDragGrip } from './ps-drag-grip.js';
|
|
10
|
+
import { PsDragOverlay } from './ps-drag-overlay.js';
|
|
11
11
|
const PsSortableListHandle = ({ attributes, className, icon, label, listeners, setActivatorNodeRef, }) => (_jsx("button", { ...attributes, ...listeners, "aria-label": label, className: className === undefined ? PsDragClasses.handle : className, ref: setActivatorNodeRef, title: label, type: 'button', children: icon === undefined ? _jsx(PsDragGrip, {}) : icon }));
|
|
12
12
|
const PsSortableListRow = ({ className, handleClassName, handleIcon, getHandleLabel, index, isDisabled, item, renderItem, }) => {
|
|
13
13
|
const isReduced = usePsReducedMotion();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { PsCard } from './ps-card';
|
|
2
|
+
import { PsCard } from './ps-card.js';
|
|
3
3
|
export const PsStartPanel = ({ actions, description, highlight, preview, steps, title, }) => (_jsx(PsCard, { density: 'spacious', children: _jsxs("div", { className: preview
|
|
4
4
|
? 'grid items-center gap-10 xl:grid-cols-[minmax(0,5fr)_minmax(0,7fr)]'
|
|
5
5
|
: 'grid items-center gap-10', children: [_jsxs("div", { className: 'flex flex-col gap-7', children: [_jsxs("div", { className: 'flex flex-col gap-3', children: [_jsx("h2", { className: 'text-3xl font-extrabold leading-tight text-ink', children: title }), _jsx("p", { className: 'max-w-md text-sm leading-6 text-ink/60', children: description })] }), highlight, steps === undefined ? null : (_jsx("ol", { className: 'flex flex-col gap-4', children: steps.map((step, index) => (_jsxs("li", { className: 'flex items-start gap-4', children: [_jsx("span", { className: 'flex h-8 w-8 shrink-0 items-center justify-center rounded-full border border-line/60 text-sm font-bold text-ink/70', children: index + 1 }), _jsxs("span", { className: 'flex min-w-0 flex-col gap-0.5', children: [_jsx("span", { className: 'text-sm font-bold text-ink', children: step.title }), _jsx("span", { className: 'text-sm leading-5 text-ink/55', children: step.description })] })] }, step.id))) })), actions] }), preview === undefined ? null : _jsx("div", { className: 'relative hidden xl:block', children: preview })] }) }));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { PsStepMarkerClassNames } from '../constants/ps-step-marker-class-names';
|
|
3
|
-
import { PsStepState } from '../constants/ps-step-state';
|
|
2
|
+
import { PsStepMarkerClassNames } from '../constants/ps-step-marker-class-names.js';
|
|
3
|
+
import { PsStepState } from '../constants/ps-step-state.js';
|
|
4
4
|
export const PsStepList = ({ steps }) => (_jsx("ol", { className: 'flex flex-col rounded-ps-panel border border-line bg-surface', children: steps.map((step, index) => (_jsxs("li", { "aria-current": step.state === PsStepState.current ? 'step' : undefined, className: 'relative flex gap-4 border-b border-line/70 px-5 py-4 last:border-0', children: [_jsx("span", { className: `flex h-8 w-8 shrink-0 items-center justify-center rounded-full border text-sm font-semibold ${PsStepMarkerClassNames[step.state]}`, children: step.state === PsStepState.done ? _jsx("span", { "aria-hidden": 'true', children: "\u2713" }) : index + 1 }), _jsxs("div", { className: 'flex min-w-0 flex-1 flex-col gap-3', children: [_jsxs("div", { className: 'flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between', children: [_jsxs("div", { className: 'min-w-0', children: [_jsx("h3", { className: step.state === PsStepState.upcoming
|
|
5
5
|
? 'text-sm font-semibold text-ink/50'
|
|
6
6
|
: 'text-sm font-semibold text-ink', children: step.title }), _jsx("p", { className: 'mt-0.5 text-sm text-ink/60', children: step.description })] }), step.actions ? (_jsx("div", { className: 'flex shrink-0 flex-wrap items-center gap-2', children: step.actions })) : null] }), step.content ? _jsx("div", { className: 'min-w-0', children: step.content }) : null] })] }, step.id))) }));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
|
-
import { PsStepProgressConfig } from '../constants/ps-step-progress-config';
|
|
3
|
+
import { PsStepProgressConfig } from '../constants/ps-step-progress-config.js';
|
|
4
4
|
export const PsStepProgress = ({ className, label = PsStepProgressConfig.defaultLabel, total, value, }) => {
|
|
5
5
|
const steps = Math.max(total, PsStepProgressConfig.minimumTotal);
|
|
6
6
|
const done = Math.min(Math.max(value, 0), steps);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
3
|
-
import { PsStoreBadgeClasses, PsStoreBadgeConfig } from '../constants/ps-store-badge-config';
|
|
3
|
+
import { PsStoreBadgeClasses, PsStoreBadgeConfig } from '../constants/ps-store-badge-config.js';
|
|
4
4
|
export const PsStoreBadge = ({ className, href, labels, onPress, platform, size = 'default', }) => {
|
|
5
5
|
const platformData = PsStoreBadgeConfig.platforms[platform];
|
|
6
6
|
const shownLabels = labels === undefined ? platformData.labels : labels;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { PsSkeletonShape } from '../constants/ps-skeleton-shape';
|
|
3
|
-
import { PsSkeleton } from './ps-skeleton';
|
|
2
|
+
import { PsSkeletonShape } from '../constants/ps-skeleton-shape.js';
|
|
3
|
+
import { PsSkeleton } from './ps-skeleton.js';
|
|
4
4
|
export const PsTabRowSkeleton = () => (_jsx(PsSkeleton, { height: '2.75rem', radius: '9999px', shape: PsSkeletonShape.Block, width: '100%' }));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { PsPageSkeletonConfig } from '../constants/ps-page-skeleton-config';
|
|
3
|
-
import { PsSkeletonTable } from './ps-skeleton-table';
|
|
2
|
+
import { PsPageSkeletonConfig } from '../constants/ps-page-skeleton-config.js';
|
|
3
|
+
import { PsSkeletonTable } from './ps-skeleton-table.js';
|
|
4
4
|
export const PsTableListSkeleton = () => (_jsx(PsSkeletonTable, { columns: PsPageSkeletonConfig.tableColumns, hasToolbar: true, rows: PsPageSkeletonConfig.tableRows }));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { PsPageSkeleton } from './ps-page-skeleton';
|
|
3
|
-
import { PsTableListSkeleton } from './ps-table-list-skeleton';
|
|
2
|
+
import { PsPageSkeleton } from './ps-page-skeleton.js';
|
|
3
|
+
import { PsTableListSkeleton } from './ps-table-list-skeleton.js';
|
|
4
4
|
export const PsTablePageSkeleton = ({ isNarrow = false, loadingLabel, title, }) => (_jsx(PsPageSkeleton, { hasActions: true, isNarrow: isNarrow, loadingLabel: loadingLabel, title: title, children: _jsx(PsTableListSkeleton, {}) }));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { usePsThemeMode } from '../hooks/use-ps-theme-mode';
|
|
3
|
-
import { PsThemeToggle } from './ps-theme-toggle';
|
|
2
|
+
import { usePsThemeMode } from '../hooks/use-ps-theme-mode.js';
|
|
3
|
+
import { PsThemeToggle } from './ps-theme-toggle.js';
|
|
4
4
|
export const PsThemeController = () => {
|
|
5
5
|
const { resolvedMode, toggle } = usePsThemeMode();
|
|
6
6
|
if (resolvedMode === null)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { PsIcon, PsIconKey } from '@pallasoft/ps-icons';
|
|
3
3
|
import { PsStaggerContainer, PsStaggerItem } from '@pallasoft/ps-motion-components';
|
|
4
|
-
import { PsWebsiteSectionConfig } from '../constants/ps-website-section-config';
|
|
5
|
-
import { PsCard } from './ps-card';
|
|
4
|
+
import { PsWebsiteSectionConfig } from '../constants/ps-website-section-config.js';
|
|
5
|
+
import { PsCard } from './ps-card.js';
|
|
6
6
|
const cardLinkClassName = 'ps-pressable ps-focus-ring block h-full rounded-ps-card';
|
|
7
7
|
export const PsToolCardGrid = ({ cards, LinkComponent }) => {
|
|
8
8
|
const renderCard = (card, content) => LinkComponent ? (_jsx(LinkComponent, { "aria-label": card.ariaLabel, className: cardLinkClassName, prefetch: 'intent', to: card.href, children: content })) : (_jsx("a", { "aria-label": card.ariaLabel, className: cardLinkClassName, href: card.href, children: content }));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useRef } from 'react';
|
|
3
3
|
import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
|
|
4
|
-
import { PsVoiceOrbCadenceByState, PsVoiceOrbConfig, PsVoiceOrbThemes, } from '../constants/ps-voice-orb';
|
|
4
|
+
import { PsVoiceOrbCadenceByState, PsVoiceOrbConfig, PsVoiceOrbThemes, } from '../constants/ps-voice-orb.js';
|
|
5
5
|
const clamp = (value, min, max) => Math.max(min, Math.min(max, value));
|
|
6
6
|
const approach = (current, target, factor) => current + (target - current) * factor;
|
|
7
7
|
const buildRimMask = (innerStopPercent) => `radial-gradient(circle, transparent ${innerStopPercent}%, black ${innerStopPercent + 6}%, black 92%, transparent 97%)`;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const PsAnalyticsConfig = {
|
|
2
|
+
offValues: ['', '_'],
|
|
3
|
+
defaultConsentCookieName: 'ps_consent',
|
|
4
|
+
defaultRequireConsent: true,
|
|
5
|
+
consentGranted: 'granted',
|
|
6
|
+
consentDenied: 'denied',
|
|
7
|
+
consentMaxAgeSeconds: 31536000,
|
|
8
|
+
defaultTagManagerUrl: 'https://www.googletagmanager.com',
|
|
9
|
+
tagManagerScriptPath: '/gtag/js?id=',
|
|
10
|
+
scriptAttribute: 'data-ps-analytics',
|
|
11
|
+
postHog: {
|
|
12
|
+
defaults: '2026-05-30',
|
|
13
|
+
personProfiles: 'identified_only',
|
|
14
|
+
autocapture: true,
|
|
15
|
+
capturePageleave: true,
|
|
16
|
+
captureExceptions: true,
|
|
17
|
+
pageviewEvent: '$pageview',
|
|
18
|
+
},
|
|
19
|
+
listSeparator: ',',
|
|
20
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const PsClientErrorConfig = {
|
|
2
|
+
maxReportsPerPage: 10,
|
|
3
|
+
maxStackLength: 2048,
|
|
4
|
+
maxMessageLength: 500,
|
|
5
|
+
maxContextLength: 200,
|
|
6
|
+
jsonContentType: 'application/json',
|
|
7
|
+
emailPattern: /[^\s@"'()<>]+@[^\s@"'()<>]+\.[^\s@"'()<>]+/g,
|
|
8
|
+
redactedValue: '[redacted]',
|
|
9
|
+
unknownMessage: 'Unknown error',
|
|
10
|
+
botPattern: /bot|crawl|spider|slurp|headless/i,
|
|
11
|
+
mobilePattern: /mobi|android|iphone|ipad/i,
|
|
12
|
+
userAgentClasses: { bot: 'bot', mobile: 'mobile', desktop: 'desktop', unknown: 'unknown' },
|
|
13
|
+
sources: { error: 'error', rejection: 'unhandledrejection', boundary: 'boundary' },
|
|
14
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PsDragClasses, PsDragConfig, PsDragLiftFrames } from './ps-drag-config';
|
|
1
|
+
import { PsDragClasses, PsDragConfig, PsDragLiftFrames } from './ps-drag-config.js';
|
|
2
2
|
export const PsDraggableGridConfig = PsDragConfig;
|
|
3
3
|
export const PsDraggableGridClasses = {
|
|
4
4
|
handle: PsDragClasses.handle,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PsStepState } from './ps-step-state';
|
|
1
|
+
import { PsStepState } from './ps-step-state.js';
|
|
2
2
|
export const PsStepMarkerClassNames = {
|
|
3
3
|
[PsStepState.done]: 'border-success bg-success text-white',
|
|
4
4
|
[PsStepState.current]: 'border-primary bg-primary/10 text-primary',
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useCallback, useSyncExternalStore } from 'react';
|
|
2
|
+
import { PsAnalyticsConfig } from '../constants/ps-analytics-config.js';
|
|
3
|
+
import { PsConsentService } from '../services/ps-consent-service.js';
|
|
4
|
+
export const useConsent = (consentCookieName = PsAnalyticsConfig.defaultConsentCookieName) => {
|
|
5
|
+
const state = useSyncExternalStore((listener) => PsConsentService.subscribe(listener), () => PsConsentService.snapshot(consentCookieName), () => PsConsentService.serverState);
|
|
6
|
+
const accept = useCallback(() => PsConsentService.choose(consentCookieName, PsAnalyticsConfig.consentGranted), [consentCookieName]);
|
|
7
|
+
const reject = useCallback(() => PsConsentService.choose(consentCookieName, PsAnalyticsConfig.consentDenied), [consentCookieName]);
|
|
8
|
+
const reopen = useCallback(() => PsConsentService.reopen(consentCookieName), [consentCookieName]);
|
|
9
|
+
return {
|
|
10
|
+
choice: state.choice,
|
|
11
|
+
isGranted: state.choice === PsAnalyticsConfig.consentGranted,
|
|
12
|
+
isBannerOpen: state === PsConsentService.serverState ? false : state.choice === null || state.isReopened,
|
|
13
|
+
accept,
|
|
14
|
+
reject,
|
|
15
|
+
reopen,
|
|
16
|
+
};
|
|
17
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { KeyboardSensor, MouseSensor, TouchSensor, useSensor, useSensors, } from '@dnd-kit/core';
|
|
2
2
|
import { sortableKeyboardCoordinates } from '@dnd-kit/sortable';
|
|
3
|
-
import { PsDragConfig } from '../constants/ps-drag-config';
|
|
3
|
+
import { PsDragConfig } from '../constants/ps-drag-config.js';
|
|
4
4
|
export const usePsDragSensors = () => useSensors(useSensor(MouseSensor, {
|
|
5
5
|
activationConstraint: { distance: PsDragConfig.activationDistance },
|
|
6
6
|
}), useSensor(TouchSensor, {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useEffect, useRef, useState } from 'react';
|
|
2
|
-
import { usePsReducedMotion } from './use-ps-reduced-motion';
|
|
2
|
+
import { usePsReducedMotion } from './use-ps-reduced-motion.js';
|
|
3
3
|
export const usePsExitTransition = (isOpen, durationMs = 180) => {
|
|
4
4
|
const [shouldRender, setShouldRender] = useState(isOpen);
|
|
5
5
|
const [isClosing, setIsClosing] = useState(false);
|