@pallasoft/ps-core-components 2.25.0 → 2.27.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.
Files changed (42) hide show
  1. package/dist/components/ps-app-store-buttons.d.ts +10 -0
  2. package/dist/components/ps-app-store-buttons.js +15 -0
  3. package/dist/components/ps-divider.d.ts +7 -0
  4. package/dist/components/ps-divider.js +12 -0
  5. package/dist/components/ps-site-header.js +1 -1
  6. package/dist/components/ps-store-badge.d.ts +11 -0
  7. package/dist/components/ps-store-badge.js +18 -0
  8. package/dist/constants/ps-drag-config.d.ts +1 -1
  9. package/dist/constants/ps-drag-config.js +1 -1
  10. package/dist/constants/ps-draggable-grid.d.ts +1 -1
  11. package/dist/constants/ps-store-badge-config.d.ts +46 -0
  12. package/dist/constants/ps-store-badge-config.js +48 -0
  13. package/dist/constants/ps-store-platform.d.ts +5 -0
  14. package/dist/constants/ps-store-platform.js +7 -0
  15. package/dist/esm/components/ps-app-store-buttons.js +11 -0
  16. package/dist/esm/components/ps-divider.js +8 -0
  17. package/dist/esm/components/ps-site-header.js +1 -1
  18. package/dist/esm/components/ps-store-badge.js +14 -0
  19. package/dist/esm/constants/ps-drag-config.js +1 -1
  20. package/dist/esm/constants/ps-store-badge-config.js +45 -0
  21. package/dist/esm/constants/ps-store-platform.js +4 -0
  22. package/dist/esm/hooks/use-ps-media-query.js +12 -0
  23. package/dist/esm/hooks/use-ps-optimistic-rows.js +6 -5
  24. package/dist/esm/index.js +10 -0
  25. package/dist/esm/models/ps-divider-orientation.js +1 -0
  26. package/dist/esm/models/ps-store-badge-labels.js +1 -0
  27. package/dist/esm/models/ps-store-badge-logo-path.js +1 -0
  28. package/dist/esm/models/ps-store-badge-platform-data.js +1 -0
  29. package/dist/hooks/use-ps-media-query.d.ts +1 -0
  30. package/dist/hooks/use-ps-media-query.js +16 -0
  31. package/dist/hooks/use-ps-optimistic-rows.js +6 -5
  32. package/dist/index.d.ts +10 -0
  33. package/dist/index.js +10 -0
  34. package/dist/models/ps-divider-orientation.d.ts +1 -0
  35. package/dist/models/ps-divider-orientation.js +2 -0
  36. package/dist/models/ps-store-badge-labels.d.ts +4 -0
  37. package/dist/models/ps-store-badge-labels.js +2 -0
  38. package/dist/models/ps-store-badge-logo-path.d.ts +3 -0
  39. package/dist/models/ps-store-badge-logo-path.js +2 -0
  40. package/dist/models/ps-store-badge-platform-data.d.ts +6 -0
  41. package/dist/models/ps-store-badge-platform-data.js +2 -0
  42. package/package.json +1 -1
@@ -0,0 +1,10 @@
1
+ import type { PsStoreBadgeLabels } from '../models/ps-store-badge-labels';
2
+ export interface PsAppStoreButtonsProps {
3
+ appStoreLabels?: PsStoreBadgeLabels;
4
+ appStoreUrl?: string;
5
+ className?: string;
6
+ playStoreLabels?: PsStoreBadgeLabels;
7
+ playStoreUrl?: string;
8
+ size?: 'default' | 'large';
9
+ }
10
+ export declare const PsAppStoreButtons: ({ appStoreLabels, appStoreUrl, className, playStoreLabels, playStoreUrl, size, }: PsAppStoreButtonsProps) => import("react").JSX.Element;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PsAppStoreButtons = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const ps_design_system_1 = require("@pallasoft/ps-design-system");
6
+ const ps_store_badge_config_1 = require("../constants/ps-store-badge-config");
7
+ const ps_store_platform_1 = require("../constants/ps-store-platform");
8
+ const ps_store_badge_1 = require("./ps-store-badge");
9
+ const isLinked = (url) => url !== undefined && url.trim() !== '';
10
+ const PsAppStoreButtons = ({ appStoreLabels, appStoreUrl, className, playStoreLabels, playStoreUrl, size = 'default', }) => {
11
+ const appStoreHref = isLinked(appStoreUrl) ? appStoreUrl : undefined;
12
+ const playStoreHref = isLinked(playStoreUrl) ? playStoreUrl : undefined;
13
+ return ((0, jsx_runtime_1.jsxs)("div", { className: ps_design_system_1.PallasoftClassNameService.merge(ps_store_badge_config_1.PsStoreBadgeClasses.group, ps_store_badge_config_1.PsStoreBadgeClasses.sizes[size].gap, className), children: [(0, jsx_runtime_1.jsx)(ps_store_badge_1.PsStoreBadge, { href: appStoreHref, labels: appStoreLabels, platform: ps_store_platform_1.PsStorePlatform.appStore, size: size }), (0, jsx_runtime_1.jsx)(ps_store_badge_1.PsStoreBadge, { href: playStoreHref, labels: playStoreLabels, platform: ps_store_platform_1.PsStorePlatform.googlePlay, size: size })] }));
14
+ };
15
+ exports.PsAppStoreButtons = PsAppStoreButtons;
@@ -0,0 +1,7 @@
1
+ import type { PsDividerOrientation } from '../models/ps-divider-orientation';
2
+ export interface PsDividerProps {
3
+ className?: string;
4
+ label?: string;
5
+ orientation?: PsDividerOrientation;
6
+ }
7
+ export declare const PsDivider: ({ className, label, orientation, }: PsDividerProps) => import("react").JSX.Element;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PsDivider = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const PsDivider = ({ className = '', label, orientation = 'horizontal', }) => {
6
+ if (orientation === 'vertical')
7
+ return ((0, jsx_runtime_1.jsx)("div", { "aria-orientation": 'vertical', className: `w-px shrink-0 self-stretch bg-line ${className}`, role: 'separator' }));
8
+ if (!label)
9
+ return ((0, jsx_runtime_1.jsx)("div", { "aria-orientation": 'horizontal', className: `h-px w-full shrink-0 bg-line ${className}`, role: 'separator' }));
10
+ return ((0, jsx_runtime_1.jsxs)("div", { "aria-label": label, "aria-orientation": 'horizontal', className: `flex w-full items-center gap-3 ${className}`, role: 'separator', children: [(0, jsx_runtime_1.jsx)("span", { "aria-hidden": 'true', className: 'h-px flex-1 bg-line' }), (0, jsx_runtime_1.jsx)("span", { "aria-hidden": 'true', className: 'text-xs text-ink/55', children: label }), (0, jsx_runtime_1.jsx)("span", { "aria-hidden": 'true', className: 'h-px flex-1 bg-line' })] }));
11
+ };
12
+ exports.PsDivider = PsDivider;
@@ -13,6 +13,6 @@ const PsSiteHeader = ({ centerContent, className, homeHref, label, LinkComponent
13
13
  const renderLogo = (src, darkSrc, baseClassName) => darkSrc ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("img", { alt: logoAlt !== null && logoAlt !== undefined ? logoAlt : label, className: ps_design_system_1.PallasoftClassNameService.merge(baseClassName, 'dark:hidden', logoClassName), decoding: 'async', src: src }), (0, jsx_runtime_1.jsx)("img", { alt: logoAlt !== null && logoAlt !== undefined ? logoAlt : label, className: ps_design_system_1.PallasoftClassNameService.merge(baseClassName, 'hidden dark:block', logoClassName), decoding: 'async', src: darkSrc })] })) : ((0, jsx_runtime_1.jsx)("img", { alt: logoAlt !== null && logoAlt !== undefined ? logoAlt : label, className: ps_design_system_1.PallasoftClassNameService.merge(baseClassName, logoClassName), decoding: 'async', src: src }));
14
14
  const logoContent = logoSrcMobile ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { className: 'hidden sm:contents', children: renderLogo(logoSrc, logoSrcDark, 'h-8 w-auto') }), (0, jsx_runtime_1.jsx)("span", { className: 'contents sm:hidden', children: renderLogo(logoSrcMobile, logoSrcMobileDark, 'h-8 w-auto') }), showLabel ? (0, jsx_runtime_1.jsx)("span", { className: 'text-base font-bold text-ink', children: label }) : null] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [renderLogo(logoSrc, logoSrcDark, 'h-8 w-auto'), showLabel ? (0, jsx_runtime_1.jsx)("span", { className: 'text-base font-bold text-ink', children: label }) : null] }));
15
15
  const logoLink = LinkComponent ? ((0, jsx_runtime_1.jsx)(LinkComponent, { "aria-label": logoLabel, className: logoLinkClassName, prefetch: 'intent', to: homeHref, children: logoContent })) : ((0, jsx_runtime_1.jsx)("a", { "aria-label": logoLabel, className: logoLinkClassName, href: homeHref, children: logoContent }));
16
- return ((0, jsx_runtime_1.jsx)("header", { ref: headerRef, className: ps_design_system_1.PallasoftClassNameService.merge('fixed inset-x-0 top-0 z-header px-6 pt-4', className), children: (0, jsx_runtime_1.jsxs)("nav", { className: ps_design_system_1.PallasoftClassNameService.merge('ps-glass mx-auto flex max-w-6xl items-center gap-3 rounded-ps-card px-5 py-3', navClassName), children: [onBack ? ((0, jsx_runtime_1.jsx)("button", { "aria-label": 'Back', className: 'ps-focus-ring ps-control-square ps-control-compact flex shrink-0 items-center justify-center rounded-ps-control text-ink md:hidden', onClick: onBack, type: 'button', children: (0, jsx_runtime_1.jsx)(ps_icons_1.PsIcon, { iconKey: ps_icons_1.PsIconKey.ChevronRight, width: 20, height: 20, className: 'rotate-180' }) })) : null, (0, jsx_runtime_1.jsx)("div", { className: onBack ? 'hidden md:flex' : 'contents', children: logoLink }), (0, jsx_runtime_1.jsx)("div", { className: 'flex min-w-0 flex-1 items-center justify-center gap-3', children: centerContent }), trailing ? (0, jsx_runtime_1.jsx)("div", { className: 'flex shrink-0 items-center gap-2.5', children: trailing }) : null] }) }));
16
+ return ((0, jsx_runtime_1.jsx)("header", { ref: headerRef, className: ps_design_system_1.PallasoftClassNameService.merge('fixed inset-x-0 top-0 z-header px-4 pt-[max(1rem,env(safe-area-inset-top))] sm:px-6', className), children: (0, jsx_runtime_1.jsxs)("nav", { className: ps_design_system_1.PallasoftClassNameService.merge('ps-glass mx-auto flex max-w-6xl items-center gap-3 rounded-ps-card px-5 py-3', navClassName), children: [onBack ? ((0, jsx_runtime_1.jsx)("button", { "aria-label": 'Back', className: 'ps-focus-ring ps-control-square ps-control-compact flex shrink-0 items-center justify-center rounded-ps-control text-ink md:hidden', onClick: onBack, type: 'button', children: (0, jsx_runtime_1.jsx)(ps_icons_1.PsIcon, { iconKey: ps_icons_1.PsIconKey.ChevronRight, width: 20, height: 20, className: 'rotate-180' }) })) : null, (0, jsx_runtime_1.jsx)("div", { className: onBack ? 'hidden md:flex' : 'contents', children: logoLink }), (0, jsx_runtime_1.jsx)("div", { className: 'flex min-w-0 flex-1 items-center justify-center gap-3', children: centerContent }), trailing ? (0, jsx_runtime_1.jsx)("div", { className: 'flex shrink-0 items-center gap-2.5', children: trailing }) : null] }) }));
17
17
  };
18
18
  exports.PsSiteHeader = PsSiteHeader;
@@ -0,0 +1,11 @@
1
+ import type { PsStorePlatform } from '../constants/ps-store-platform';
2
+ import type { PsStoreBadgeLabels } from '../models/ps-store-badge-labels';
3
+ export interface PsStoreBadgeProps {
4
+ className?: string;
5
+ href?: string;
6
+ onPress?: () => void;
7
+ labels?: PsStoreBadgeLabels;
8
+ platform: PsStorePlatform;
9
+ size?: 'default' | 'large';
10
+ }
11
+ export declare const PsStoreBadge: ({ className, href, labels, onPress, platform, size, }: PsStoreBadgeProps) => import("react").JSX.Element;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PsStoreBadge = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const ps_design_system_1 = require("@pallasoft/ps-design-system");
6
+ const ps_store_badge_config_1 = require("../constants/ps-store-badge-config");
7
+ const PsStoreBadge = ({ className, href, labels, onPress, platform, size = 'default', }) => {
8
+ const platformData = ps_store_badge_config_1.PsStoreBadgeConfig.platforms[platform];
9
+ const shownLabels = labels === undefined ? platformData.labels : labels;
10
+ const sizeClasses = ps_store_badge_config_1.PsStoreBadgeClasses.sizes[size];
11
+ const badgeClassName = ps_design_system_1.PallasoftClassNameService.merge(ps_store_badge_config_1.PsStoreBadgeClasses.base, sizeClasses.badge, className);
12
+ const ariaLabel = `${shownLabels.caption} ${shownLabels.name}`;
13
+ const content = ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { "aria-hidden": 'true', className: ps_design_system_1.PallasoftClassNameService.merge(ps_store_badge_config_1.PsStoreBadgeClasses.tile, sizeClasses.tile), children: (0, jsx_runtime_1.jsx)("svg", { className: sizeClasses.logo, fill: 'currentColor', viewBox: ps_store_badge_config_1.PsStoreBadgeConfig.logoViewBox, xmlns: 'http://www.w3.org/2000/svg', children: platformData.logoPaths.map((path) => ((0, jsx_runtime_1.jsx)("path", { d: path.d }, path.d))) }) }), (0, jsx_runtime_1.jsxs)("span", { "aria-hidden": 'true', className: 'flex min-w-0 flex-col items-start', children: [(0, jsx_runtime_1.jsx)("span", { className: ps_design_system_1.PallasoftClassNameService.merge('truncate max-w-full', sizeClasses.caption), children: shownLabels.caption }), (0, jsx_runtime_1.jsx)("span", { className: ps_design_system_1.PallasoftClassNameService.merge('truncate max-w-full', sizeClasses.name), children: shownLabels.name })] })] }));
14
+ if (href === undefined)
15
+ return ((0, jsx_runtime_1.jsx)("button", { "aria-label": ariaLabel, className: badgeClassName, "data-platform": platform, onClick: onPress, type: 'button', children: content }));
16
+ return ((0, jsx_runtime_1.jsx)("a", { "aria-label": ariaLabel, className: badgeClassName, "data-platform": platform, href: href, rel: 'noopener noreferrer', target: '_blank', children: content }));
17
+ };
18
+ exports.PsStoreBadge = PsStoreBadge;
@@ -9,7 +9,7 @@ export declare const PsDragConfig: {
9
9
  readonly touchTolerance: 6;
10
10
  };
11
11
  export declare const PsDragClasses: {
12
- readonly handle: "ps-focus-ring inline-flex h-7 w-7 shrink-0 cursor-grab touch-none items-center justify-center rounded-ps-control text-slate-400/70 transition hover:bg-white/36 hover:text-slate-600 active:cursor-grabbing dark:text-slate-300/55 dark:hover:bg-white/8 dark:hover:text-slate-100";
12
+ readonly handle: "ps-focus-ring ps-touch-target relative inline-flex h-7 w-7 shrink-0 cursor-grab touch-none items-center justify-center rounded-ps-control text-slate-400/70 transition hover:bg-white/36 hover:text-slate-600 active:cursor-grabbing dark:text-slate-300/55 dark:hover:bg-white/8 dark:hover:text-slate-100";
13
13
  readonly listItem: "min-w-0";
14
14
  readonly lifted: "cursor-grabbing rounded-xl bg-surface ring-1 ring-primary/30";
15
15
  readonly placeholder: "outline-dashed outline-2 outline-offset-[-2px] outline-primary/35";
@@ -12,7 +12,7 @@ exports.PsDragConfig = {
12
12
  touchTolerance: 6,
13
13
  };
14
14
  exports.PsDragClasses = {
15
- handle: 'ps-focus-ring inline-flex h-7 w-7 shrink-0 cursor-grab touch-none items-center justify-center rounded-ps-control text-slate-400/70 transition hover:bg-white/36 hover:text-slate-600 active:cursor-grabbing dark:text-slate-300/55 dark:hover:bg-white/8 dark:hover:text-slate-100',
15
+ handle: 'ps-focus-ring ps-touch-target relative inline-flex h-7 w-7 shrink-0 cursor-grab touch-none items-center justify-center rounded-ps-control text-slate-400/70 transition hover:bg-white/36 hover:text-slate-600 active:cursor-grabbing dark:text-slate-300/55 dark:hover:bg-white/8 dark:hover:text-slate-100',
16
16
  listItem: 'min-w-0',
17
17
  lifted: 'cursor-grabbing rounded-xl bg-surface ring-1 ring-primary/30',
18
18
  placeholder: 'outline-dashed outline-2 outline-offset-[-2px] outline-primary/35',
@@ -9,7 +9,7 @@ export declare const PsDraggableGridConfig: {
9
9
  readonly touchTolerance: 6;
10
10
  };
11
11
  export declare const PsDraggableGridClasses: {
12
- readonly handle: "ps-focus-ring inline-flex h-7 w-7 shrink-0 cursor-grab touch-none items-center justify-center rounded-ps-control text-slate-400/70 transition hover:bg-white/36 hover:text-slate-600 active:cursor-grabbing dark:text-slate-300/55 dark:hover:bg-white/8 dark:hover:text-slate-100";
12
+ readonly handle: "ps-focus-ring ps-touch-target relative inline-flex h-7 w-7 shrink-0 cursor-grab touch-none items-center justify-center rounded-ps-control text-slate-400/70 transition hover:bg-white/36 hover:text-slate-600 active:cursor-grabbing dark:text-slate-300/55 dark:hover:bg-white/8 dark:hover:text-slate-100";
13
13
  readonly item: "min-w-0 rounded-[1.7rem]";
14
14
  readonly lifted: "cursor-grabbing rounded-[1.7rem] ring-1 ring-primary/30";
15
15
  readonly placeholder: "rounded-[1.7rem] outline-dashed outline-2 outline-offset-[-2px] outline-primary/35";
@@ -0,0 +1,46 @@
1
+ export declare const PsStoreBadgeConfig: {
2
+ readonly logoViewBox: "0 0 24 24";
3
+ readonly platforms: {
4
+ "app-store": {
5
+ labels: {
6
+ caption: string;
7
+ name: string;
8
+ };
9
+ logoPaths: {
10
+ d: string;
11
+ }[];
12
+ };
13
+ "google-play": {
14
+ labels: {
15
+ caption: string;
16
+ name: string;
17
+ };
18
+ logoPaths: {
19
+ d: string;
20
+ }[];
21
+ };
22
+ };
23
+ };
24
+ export declare const PsStoreBadgeClasses: {
25
+ readonly base: "ps-focus-ring ps-liquid ps-liquid-control ps-pressable group/store inline-flex w-full min-w-0 items-center bg-white/72 font-sans text-left text-ink hover:border-primary/30 dark:border-white/16 dark:bg-white/12 motion-reduce:transition-none motion-reduce:hover:transform-none";
26
+ readonly group: "grid w-full grid-cols-1 sm:grid-cols-2";
27
+ readonly sizes: {
28
+ readonly default: {
29
+ readonly badge: "min-h-12 gap-3 px-2.5 py-1.5";
30
+ readonly caption: "text-xs leading-4";
31
+ readonly gap: "gap-3";
32
+ readonly logo: "size-5";
33
+ readonly name: "text-sm font-semibold leading-5";
34
+ readonly tile: "size-9";
35
+ };
36
+ readonly large: {
37
+ readonly badge: "min-h-14 gap-3.5 px-3 py-2";
38
+ readonly caption: "text-xs leading-4";
39
+ readonly gap: "gap-4";
40
+ readonly logo: "size-6";
41
+ readonly name: "text-base font-semibold leading-6";
42
+ readonly tile: "size-10";
43
+ };
44
+ };
45
+ readonly tile: "ps-icon-surface transition-colors group-hover/store:bg-primary/15 motion-reduce:transition-none";
46
+ };
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PsStoreBadgeClasses = exports.PsStoreBadgeConfig = void 0;
4
+ const ps_store_platform_1 = require("./ps-store-platform");
5
+ exports.PsStoreBadgeConfig = {
6
+ logoViewBox: '0 0 24 24',
7
+ platforms: {
8
+ [ps_store_platform_1.PsStorePlatform.appStore]: {
9
+ labels: { caption: 'Download on the', name: 'App Store' },
10
+ logoPaths: [
11
+ {
12
+ d: 'M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701',
13
+ },
14
+ ],
15
+ },
16
+ [ps_store_platform_1.PsStorePlatform.googlePlay]: {
17
+ labels: { caption: 'Get it on', name: 'Google Play' },
18
+ logoPaths: [
19
+ {
20
+ d: 'M6.2 2.9c-.5-.3-1.2.1-1.2.7v16.8c0 .6.7 1 1.2.7l14-8.4c.5-.3.5-1.1 0-1.4L6.2 2.9z',
21
+ },
22
+ ],
23
+ },
24
+ },
25
+ };
26
+ exports.PsStoreBadgeClasses = {
27
+ base: 'ps-focus-ring ps-liquid ps-liquid-control ps-pressable group/store inline-flex w-full min-w-0 items-center bg-white/72 font-sans text-left text-ink hover:border-primary/30 dark:border-white/16 dark:bg-white/12 motion-reduce:transition-none motion-reduce:hover:transform-none',
28
+ group: 'grid w-full grid-cols-1 sm:grid-cols-2',
29
+ sizes: {
30
+ default: {
31
+ badge: 'min-h-12 gap-3 px-2.5 py-1.5',
32
+ caption: 'text-xs leading-4',
33
+ gap: 'gap-3',
34
+ logo: 'size-5',
35
+ name: 'text-sm font-semibold leading-5',
36
+ tile: 'size-9',
37
+ },
38
+ large: {
39
+ badge: 'min-h-14 gap-3.5 px-3 py-2',
40
+ caption: 'text-xs leading-4',
41
+ gap: 'gap-4',
42
+ logo: 'size-6',
43
+ name: 'text-base font-semibold leading-6',
44
+ tile: 'size-10',
45
+ },
46
+ },
47
+ tile: 'ps-icon-surface transition-colors group-hover/store:bg-primary/15 motion-reduce:transition-none',
48
+ };
@@ -0,0 +1,5 @@
1
+ export declare const PsStorePlatform: {
2
+ readonly appStore: "app-store";
3
+ readonly googlePlay: "google-play";
4
+ };
5
+ export type PsStorePlatform = (typeof PsStorePlatform)[keyof typeof PsStorePlatform];
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PsStorePlatform = void 0;
4
+ exports.PsStorePlatform = {
5
+ appStore: 'app-store',
6
+ googlePlay: 'google-play',
7
+ };
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
3
+ import { PsStoreBadgeClasses } from '../constants/ps-store-badge-config';
4
+ import { PsStorePlatform } from '../constants/ps-store-platform';
5
+ import { PsStoreBadge } from './ps-store-badge';
6
+ const isLinked = (url) => url !== undefined && url.trim() !== '';
7
+ export const PsAppStoreButtons = ({ appStoreLabels, appStoreUrl, className, playStoreLabels, playStoreUrl, size = 'default', }) => {
8
+ const appStoreHref = isLinked(appStoreUrl) ? appStoreUrl : undefined;
9
+ const playStoreHref = isLinked(playStoreUrl) ? playStoreUrl : undefined;
10
+ return (_jsxs("div", { className: PallasoftClassNameService.merge(PsStoreBadgeClasses.group, PsStoreBadgeClasses.sizes[size].gap, className), children: [_jsx(PsStoreBadge, { href: appStoreHref, labels: appStoreLabels, platform: PsStorePlatform.appStore, size: size }), _jsx(PsStoreBadge, { href: playStoreHref, labels: playStoreLabels, platform: PsStorePlatform.googlePlay, size: size })] }));
11
+ };
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export const PsDivider = ({ className = '', label, orientation = 'horizontal', }) => {
3
+ if (orientation === 'vertical')
4
+ return (_jsx("div", { "aria-orientation": 'vertical', className: `w-px shrink-0 self-stretch bg-line ${className}`, role: 'separator' }));
5
+ if (!label)
6
+ return (_jsx("div", { "aria-orientation": 'horizontal', className: `h-px w-full shrink-0 bg-line ${className}`, role: 'separator' }));
7
+ return (_jsxs("div", { "aria-label": label, "aria-orientation": 'horizontal', className: `flex w-full items-center gap-3 ${className}`, role: 'separator', children: [_jsx("span", { "aria-hidden": 'true', className: 'h-px flex-1 bg-line' }), _jsx("span", { "aria-hidden": 'true', className: 'text-xs text-ink/55', children: label }), _jsx("span", { "aria-hidden": 'true', className: 'h-px flex-1 bg-line' })] }));
8
+ };
@@ -10,5 +10,5 @@ export const PsSiteHeader = ({ centerContent, className, homeHref, label, LinkCo
10
10
  const renderLogo = (src, darkSrc, baseClassName) => darkSrc ? (_jsxs(_Fragment, { children: [_jsx("img", { alt: logoAlt !== null && logoAlt !== undefined ? logoAlt : label, className: PallasoftClassNameService.merge(baseClassName, 'dark:hidden', logoClassName), decoding: 'async', src: src }), _jsx("img", { alt: logoAlt !== null && logoAlt !== undefined ? logoAlt : label, className: PallasoftClassNameService.merge(baseClassName, 'hidden dark:block', logoClassName), decoding: 'async', src: darkSrc })] })) : (_jsx("img", { alt: logoAlt !== null && logoAlt !== undefined ? logoAlt : label, className: PallasoftClassNameService.merge(baseClassName, logoClassName), decoding: 'async', src: src }));
11
11
  const logoContent = logoSrcMobile ? (_jsxs(_Fragment, { children: [_jsx("span", { className: 'hidden sm:contents', children: renderLogo(logoSrc, logoSrcDark, 'h-8 w-auto') }), _jsx("span", { className: 'contents sm:hidden', children: renderLogo(logoSrcMobile, logoSrcMobileDark, 'h-8 w-auto') }), showLabel ? _jsx("span", { className: 'text-base font-bold text-ink', children: label }) : null] })) : (_jsxs(_Fragment, { children: [renderLogo(logoSrc, logoSrcDark, 'h-8 w-auto'), showLabel ? _jsx("span", { className: 'text-base font-bold text-ink', children: label }) : null] }));
12
12
  const logoLink = LinkComponent ? (_jsx(LinkComponent, { "aria-label": logoLabel, className: logoLinkClassName, prefetch: 'intent', to: homeHref, children: logoContent })) : (_jsx("a", { "aria-label": logoLabel, className: logoLinkClassName, href: homeHref, children: logoContent }));
13
- return (_jsx("header", { ref: headerRef, className: PallasoftClassNameService.merge('fixed inset-x-0 top-0 z-header px-6 pt-4', className), children: _jsxs("nav", { className: PallasoftClassNameService.merge('ps-glass mx-auto flex max-w-6xl items-center gap-3 rounded-ps-card px-5 py-3', navClassName), children: [onBack ? (_jsx("button", { "aria-label": 'Back', className: 'ps-focus-ring ps-control-square ps-control-compact flex shrink-0 items-center justify-center rounded-ps-control text-ink md:hidden', onClick: onBack, type: 'button', children: _jsx(PsIcon, { iconKey: PsIconKey.ChevronRight, width: 20, height: 20, className: 'rotate-180' }) })) : null, _jsx("div", { className: onBack ? 'hidden md:flex' : 'contents', children: logoLink }), _jsx("div", { className: 'flex min-w-0 flex-1 items-center justify-center gap-3', children: centerContent }), trailing ? _jsx("div", { className: 'flex shrink-0 items-center gap-2.5', children: trailing }) : null] }) }));
13
+ return (_jsx("header", { ref: headerRef, className: PallasoftClassNameService.merge('fixed inset-x-0 top-0 z-header px-4 pt-[max(1rem,env(safe-area-inset-top))] sm:px-6', className), children: _jsxs("nav", { className: PallasoftClassNameService.merge('ps-glass mx-auto flex max-w-6xl items-center gap-3 rounded-ps-card px-5 py-3', navClassName), children: [onBack ? (_jsx("button", { "aria-label": 'Back', className: 'ps-focus-ring ps-control-square ps-control-compact flex shrink-0 items-center justify-center rounded-ps-control text-ink md:hidden', onClick: onBack, type: 'button', children: _jsx(PsIcon, { iconKey: PsIconKey.ChevronRight, width: 20, height: 20, className: 'rotate-180' }) })) : null, _jsx("div", { className: onBack ? 'hidden md:flex' : 'contents', children: logoLink }), _jsx("div", { className: 'flex min-w-0 flex-1 items-center justify-center gap-3', children: centerContent }), trailing ? _jsx("div", { className: 'flex shrink-0 items-center gap-2.5', children: trailing }) : null] }) }));
14
14
  };
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
3
+ import { PsStoreBadgeClasses, PsStoreBadgeConfig } from '../constants/ps-store-badge-config';
4
+ export const PsStoreBadge = ({ className, href, labels, onPress, platform, size = 'default', }) => {
5
+ const platformData = PsStoreBadgeConfig.platforms[platform];
6
+ const shownLabels = labels === undefined ? platformData.labels : labels;
7
+ const sizeClasses = PsStoreBadgeClasses.sizes[size];
8
+ const badgeClassName = PallasoftClassNameService.merge(PsStoreBadgeClasses.base, sizeClasses.badge, className);
9
+ const ariaLabel = `${shownLabels.caption} ${shownLabels.name}`;
10
+ const content = (_jsxs(_Fragment, { children: [_jsx("span", { "aria-hidden": 'true', className: PallasoftClassNameService.merge(PsStoreBadgeClasses.tile, sizeClasses.tile), children: _jsx("svg", { className: sizeClasses.logo, fill: 'currentColor', viewBox: PsStoreBadgeConfig.logoViewBox, xmlns: 'http://www.w3.org/2000/svg', children: platformData.logoPaths.map((path) => (_jsx("path", { d: path.d }, path.d))) }) }), _jsxs("span", { "aria-hidden": 'true', className: 'flex min-w-0 flex-col items-start', children: [_jsx("span", { className: PallasoftClassNameService.merge('truncate max-w-full', sizeClasses.caption), children: shownLabels.caption }), _jsx("span", { className: PallasoftClassNameService.merge('truncate max-w-full', sizeClasses.name), children: shownLabels.name })] })] }));
11
+ if (href === undefined)
12
+ return (_jsx("button", { "aria-label": ariaLabel, className: badgeClassName, "data-platform": platform, onClick: onPress, type: 'button', children: content }));
13
+ return (_jsx("a", { "aria-label": ariaLabel, className: badgeClassName, "data-platform": platform, href: href, rel: 'noopener noreferrer', target: '_blank', children: content }));
14
+ };
@@ -9,7 +9,7 @@ export const PsDragConfig = {
9
9
  touchTolerance: 6,
10
10
  };
11
11
  export const PsDragClasses = {
12
- handle: 'ps-focus-ring inline-flex h-7 w-7 shrink-0 cursor-grab touch-none items-center justify-center rounded-ps-control text-slate-400/70 transition hover:bg-white/36 hover:text-slate-600 active:cursor-grabbing dark:text-slate-300/55 dark:hover:bg-white/8 dark:hover:text-slate-100',
12
+ handle: 'ps-focus-ring ps-touch-target relative inline-flex h-7 w-7 shrink-0 cursor-grab touch-none items-center justify-center rounded-ps-control text-slate-400/70 transition hover:bg-white/36 hover:text-slate-600 active:cursor-grabbing dark:text-slate-300/55 dark:hover:bg-white/8 dark:hover:text-slate-100',
13
13
  listItem: 'min-w-0',
14
14
  lifted: 'cursor-grabbing rounded-xl bg-surface ring-1 ring-primary/30',
15
15
  placeholder: 'outline-dashed outline-2 outline-offset-[-2px] outline-primary/35',
@@ -0,0 +1,45 @@
1
+ import { PsStorePlatform } from './ps-store-platform';
2
+ export const PsStoreBadgeConfig = {
3
+ logoViewBox: '0 0 24 24',
4
+ platforms: {
5
+ [PsStorePlatform.appStore]: {
6
+ labels: { caption: 'Download on the', name: 'App Store' },
7
+ logoPaths: [
8
+ {
9
+ d: 'M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701',
10
+ },
11
+ ],
12
+ },
13
+ [PsStorePlatform.googlePlay]: {
14
+ labels: { caption: 'Get it on', name: 'Google Play' },
15
+ logoPaths: [
16
+ {
17
+ d: 'M6.2 2.9c-.5-.3-1.2.1-1.2.7v16.8c0 .6.7 1 1.2.7l14-8.4c.5-.3.5-1.1 0-1.4L6.2 2.9z',
18
+ },
19
+ ],
20
+ },
21
+ },
22
+ };
23
+ export const PsStoreBadgeClasses = {
24
+ base: 'ps-focus-ring ps-liquid ps-liquid-control ps-pressable group/store inline-flex w-full min-w-0 items-center bg-white/72 font-sans text-left text-ink hover:border-primary/30 dark:border-white/16 dark:bg-white/12 motion-reduce:transition-none motion-reduce:hover:transform-none',
25
+ group: 'grid w-full grid-cols-1 sm:grid-cols-2',
26
+ sizes: {
27
+ default: {
28
+ badge: 'min-h-12 gap-3 px-2.5 py-1.5',
29
+ caption: 'text-xs leading-4',
30
+ gap: 'gap-3',
31
+ logo: 'size-5',
32
+ name: 'text-sm font-semibold leading-5',
33
+ tile: 'size-9',
34
+ },
35
+ large: {
36
+ badge: 'min-h-14 gap-3.5 px-3 py-2',
37
+ caption: 'text-xs leading-4',
38
+ gap: 'gap-4',
39
+ logo: 'size-6',
40
+ name: 'text-base font-semibold leading-6',
41
+ tile: 'size-10',
42
+ },
43
+ },
44
+ tile: 'ps-icon-surface transition-colors group-hover/store:bg-primary/15 motion-reduce:transition-none',
45
+ };
@@ -0,0 +1,4 @@
1
+ export const PsStorePlatform = {
2
+ appStore: 'app-store',
3
+ googlePlay: 'google-play',
4
+ };
@@ -0,0 +1,12 @@
1
+ import { useCallback, useSyncExternalStore } from 'react';
2
+ export const usePsMediaQuery = (query) => {
3
+ const subscribe = useCallback((onChange) => {
4
+ if (typeof window.matchMedia !== 'function')
5
+ return () => undefined;
6
+ const list = window.matchMedia(query);
7
+ list.addEventListener('change', onChange);
8
+ return () => list.removeEventListener('change', onChange);
9
+ }, [query]);
10
+ const clientSnapshot = useCallback(() => (typeof window.matchMedia === 'function' ? window.matchMedia(query).matches : null), [query]);
11
+ return useSyncExternalStore(subscribe, clientSnapshot, () => null);
12
+ };
@@ -4,12 +4,13 @@ export const usePsOptimisticRows = ({ apply, isHolding = false, isSaving, rows,
4
4
  base: rows,
5
5
  changes: [],
6
6
  });
7
- const changes = remembered.base === rows || isSaving || isHolding ? remembered.changes : [];
7
+ const isActive = isSaving || isHolding;
8
+ const isStale = remembered.base !== rows && !isActive;
9
+ if (isStale)
10
+ setRemembered({ base: rows, changes: [] });
11
+ const changes = isStale ? [] : remembered.changes;
8
12
  const shown = useMemo(() => (changes.length === 0 ? rows : apply(rows, changes)), [apply, changes, rows]);
9
- const remember = useCallback((change) => setRemembered((current) => ({
10
- base: rows,
11
- changes: [...(current.base === rows ? current.changes : []), change],
12
- })), [rows]);
13
+ const remember = useCallback((change) => setRemembered((current) => ({ base: rows, changes: [...current.changes, change] })), [rows]);
13
14
  const forgetLast = useCallback(() => setRemembered((current) => ({ base: current.base, changes: current.changes.slice(0, -1) })), []);
14
15
  const rollback = useCallback(() => setRemembered({ base: rows, changes: [] }), [rows]);
15
16
  return { forgetLast, remember, rollback, rows: shown };
package/dist/esm/index.js CHANGED
@@ -8,6 +8,13 @@ export * from './components/ps-button';
8
8
  export * from './components/ps-link-button';
9
9
  export * from './components/ps-pallasoft-mark';
10
10
  export * from './components/ps-pallasoft-sign-in-button';
11
+ export * from './components/ps-store-badge';
12
+ export * from './components/ps-app-store-buttons';
13
+ export * from './constants/ps-store-platform';
14
+ export * from './constants/ps-store-badge-config';
15
+ export * from './models/ps-store-badge-labels';
16
+ export * from './models/ps-store-badge-logo-path';
17
+ export * from './models/ps-store-badge-platform-data';
11
18
  export * from './constants/ps-pallasoft-mark-config';
12
19
  export * from './components/ps-card';
13
20
  export * from './components/ps-client-only';
@@ -58,6 +65,7 @@ export * from './hooks/use-ps-route-loader-data';
58
65
  export * from './hooks/use-ps-element-size';
59
66
  export * from './hooks/use-ps-hydrated';
60
67
  export * from './hooks/use-ps-viewport';
68
+ export * from './hooks/use-ps-media-query';
61
69
  export * from './interfaces/ps-component-props';
62
70
  export * from './models/ps-element-size';
63
71
  export * from './models/ps-voice-orb';
@@ -137,3 +145,5 @@ export * from './components/ps-drag-grip';
137
145
  export * from './components/ps-drag-overlay';
138
146
  export * from './hooks/use-ps-drag-sensors';
139
147
  export * from './hooks/use-ps-reduced-motion';
148
+ export * from './components/ps-divider';
149
+ export * from './models/ps-divider-orientation';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export declare const usePsMediaQuery: (query: string) => boolean | null;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.usePsMediaQuery = void 0;
4
+ const react_1 = require("react");
5
+ const usePsMediaQuery = (query) => {
6
+ const subscribe = (0, react_1.useCallback)((onChange) => {
7
+ if (typeof window.matchMedia !== 'function')
8
+ return () => undefined;
9
+ const list = window.matchMedia(query);
10
+ list.addEventListener('change', onChange);
11
+ return () => list.removeEventListener('change', onChange);
12
+ }, [query]);
13
+ const clientSnapshot = (0, react_1.useCallback)(() => (typeof window.matchMedia === 'function' ? window.matchMedia(query).matches : null), [query]);
14
+ return (0, react_1.useSyncExternalStore)(subscribe, clientSnapshot, () => null);
15
+ };
16
+ exports.usePsMediaQuery = usePsMediaQuery;
@@ -7,12 +7,13 @@ const usePsOptimisticRows = ({ apply, isHolding = false, isSaving, rows, }) => {
7
7
  base: rows,
8
8
  changes: [],
9
9
  });
10
- const changes = remembered.base === rows || isSaving || isHolding ? remembered.changes : [];
10
+ const isActive = isSaving || isHolding;
11
+ const isStale = remembered.base !== rows && !isActive;
12
+ if (isStale)
13
+ setRemembered({ base: rows, changes: [] });
14
+ const changes = isStale ? [] : remembered.changes;
11
15
  const shown = (0, react_1.useMemo)(() => (changes.length === 0 ? rows : apply(rows, changes)), [apply, changes, rows]);
12
- const remember = (0, react_1.useCallback)((change) => setRemembered((current) => ({
13
- base: rows,
14
- changes: [...(current.base === rows ? current.changes : []), change],
15
- })), [rows]);
16
+ const remember = (0, react_1.useCallback)((change) => setRemembered((current) => ({ base: rows, changes: [...current.changes, change] })), [rows]);
16
17
  const forgetLast = (0, react_1.useCallback)(() => setRemembered((current) => ({ base: current.base, changes: current.changes.slice(0, -1) })), []);
17
18
  const rollback = (0, react_1.useCallback)(() => setRemembered({ base: rows, changes: [] }), [rows]);
18
19
  return { forgetLast, remember, rollback, rows: shown };
package/dist/index.d.ts CHANGED
@@ -8,6 +8,13 @@ export * from './components/ps-button';
8
8
  export * from './components/ps-link-button';
9
9
  export * from './components/ps-pallasoft-mark';
10
10
  export * from './components/ps-pallasoft-sign-in-button';
11
+ export * from './components/ps-store-badge';
12
+ export * from './components/ps-app-store-buttons';
13
+ export * from './constants/ps-store-platform';
14
+ export * from './constants/ps-store-badge-config';
15
+ export * from './models/ps-store-badge-labels';
16
+ export * from './models/ps-store-badge-logo-path';
17
+ export * from './models/ps-store-badge-platform-data';
11
18
  export * from './constants/ps-pallasoft-mark-config';
12
19
  export * from './components/ps-card';
13
20
  export * from './components/ps-client-only';
@@ -58,6 +65,7 @@ export * from './hooks/use-ps-route-loader-data';
58
65
  export * from './hooks/use-ps-element-size';
59
66
  export * from './hooks/use-ps-hydrated';
60
67
  export * from './hooks/use-ps-viewport';
68
+ export * from './hooks/use-ps-media-query';
61
69
  export * from './interfaces/ps-component-props';
62
70
  export * from './models/ps-element-size';
63
71
  export * from './models/ps-voice-orb';
@@ -137,3 +145,5 @@ export * from './components/ps-drag-grip';
137
145
  export * from './components/ps-drag-overlay';
138
146
  export * from './hooks/use-ps-drag-sensors';
139
147
  export * from './hooks/use-ps-reduced-motion';
148
+ export * from './components/ps-divider';
149
+ export * from './models/ps-divider-orientation';
package/dist/index.js CHANGED
@@ -24,6 +24,13 @@ __exportStar(require("./components/ps-button"), exports);
24
24
  __exportStar(require("./components/ps-link-button"), exports);
25
25
  __exportStar(require("./components/ps-pallasoft-mark"), exports);
26
26
  __exportStar(require("./components/ps-pallasoft-sign-in-button"), exports);
27
+ __exportStar(require("./components/ps-store-badge"), exports);
28
+ __exportStar(require("./components/ps-app-store-buttons"), exports);
29
+ __exportStar(require("./constants/ps-store-platform"), exports);
30
+ __exportStar(require("./constants/ps-store-badge-config"), exports);
31
+ __exportStar(require("./models/ps-store-badge-labels"), exports);
32
+ __exportStar(require("./models/ps-store-badge-logo-path"), exports);
33
+ __exportStar(require("./models/ps-store-badge-platform-data"), exports);
27
34
  __exportStar(require("./constants/ps-pallasoft-mark-config"), exports);
28
35
  __exportStar(require("./components/ps-card"), exports);
29
36
  __exportStar(require("./components/ps-client-only"), exports);
@@ -74,6 +81,7 @@ __exportStar(require("./hooks/use-ps-route-loader-data"), exports);
74
81
  __exportStar(require("./hooks/use-ps-element-size"), exports);
75
82
  __exportStar(require("./hooks/use-ps-hydrated"), exports);
76
83
  __exportStar(require("./hooks/use-ps-viewport"), exports);
84
+ __exportStar(require("./hooks/use-ps-media-query"), exports);
77
85
  __exportStar(require("./interfaces/ps-component-props"), exports);
78
86
  __exportStar(require("./models/ps-element-size"), exports);
79
87
  __exportStar(require("./models/ps-voice-orb"), exports);
@@ -153,3 +161,5 @@ __exportStar(require("./components/ps-drag-grip"), exports);
153
161
  __exportStar(require("./components/ps-drag-overlay"), exports);
154
162
  __exportStar(require("./hooks/use-ps-drag-sensors"), exports);
155
163
  __exportStar(require("./hooks/use-ps-reduced-motion"), exports);
164
+ __exportStar(require("./components/ps-divider"), exports);
165
+ __exportStar(require("./models/ps-divider-orientation"), exports);
@@ -0,0 +1 @@
1
+ export type PsDividerOrientation = 'horizontal' | 'vertical';
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ export interface PsStoreBadgeLabels {
2
+ caption: string;
3
+ name: string;
4
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ export interface PsStoreBadgeLogoPath {
2
+ d: string;
3
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import type { PsStoreBadgeLabels } from './ps-store-badge-labels';
2
+ import type { PsStoreBadgeLogoPath } from './ps-store-badge-logo-path';
3
+ export interface PsStoreBadgePlatformData {
4
+ labels: PsStoreBadgeLabels;
5
+ logoPaths: PsStoreBadgeLogoPath[];
6
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pallasoft/ps-core-components",
3
- "version": "2.25.0",
3
+ "version": "2.27.0",
4
4
  "private": false,
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/esm/index.js",