@sonordev/agency-site-kit 0.1.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/BeforeAfterSection-6QUJOBO2.js +176 -0
- package/dist/BeforeAfterSection-6QUJOBO2.js.map +1 -0
- package/dist/BeforeAfterSection-DVAWWE4K.cjs +181 -0
- package/dist/BeforeAfterSection-DVAWWE4K.cjs.map +1 -0
- package/dist/CTASection-4JKLXEUF.cjs +111 -0
- package/dist/CTASection-4JKLXEUF.cjs.map +1 -0
- package/dist/CTASection-BJA72XIL.js +106 -0
- package/dist/CTASection-BJA72XIL.js.map +1 -0
- package/dist/ChallengesSection-GEQGVSJN.js +180 -0
- package/dist/ChallengesSection-GEQGVSJN.js.map +1 -0
- package/dist/ChallengesSection-IZ3DHECS.cjs +182 -0
- package/dist/ChallengesSection-IZ3DHECS.cjs.map +1 -0
- package/dist/ConversionFunnelSection-AUUSJ5HQ.cjs +209 -0
- package/dist/ConversionFunnelSection-AUUSJ5HQ.cjs.map +1 -0
- package/dist/ConversionFunnelSection-D3GE4NKE.js +203 -0
- package/dist/ConversionFunnelSection-D3GE4NKE.js.map +1 -0
- package/dist/DetailsSection-FB763FS7.js +135 -0
- package/dist/DetailsSection-FB763FS7.js.map +1 -0
- package/dist/DetailsSection-OACJFGH7.cjs +137 -0
- package/dist/DetailsSection-OACJFGH7.cjs.map +1 -0
- package/dist/FeatureSpotlightSection-B7P3JGNL.js +205 -0
- package/dist/FeatureSpotlightSection-B7P3JGNL.js.map +1 -0
- package/dist/FeatureSpotlightSection-WRHXS7TU.cjs +210 -0
- package/dist/FeatureSpotlightSection-WRHXS7TU.cjs.map +1 -0
- package/dist/GallerySection-VMKORC47.js +218 -0
- package/dist/GallerySection-VMKORC47.js.map +1 -0
- package/dist/GallerySection-WJ4PQDBI.cjs +219 -0
- package/dist/GallerySection-WJ4PQDBI.cjs.map +1 -0
- package/dist/MetricsTimelineSection-4L6DUHJ5.cjs +258 -0
- package/dist/MetricsTimelineSection-4L6DUHJ5.cjs.map +1 -0
- package/dist/MetricsTimelineSection-6BT5GNFV.js +253 -0
- package/dist/MetricsTimelineSection-6BT5GNFV.js.map +1 -0
- package/dist/ResultsSection-DFUJ5U6M.js +93 -0
- package/dist/ResultsSection-DFUJ5U6M.js.map +1 -0
- package/dist/ResultsSection-XLGMMQKY.cjs +95 -0
- package/dist/ResultsSection-XLGMMQKY.cjs.map +1 -0
- package/dist/ServicesSection-D5V3Q4GR.js +118 -0
- package/dist/ServicesSection-D5V3Q4GR.js.map +1 -0
- package/dist/ServicesSection-WJMGK2MF.cjs +120 -0
- package/dist/ServicesSection-WJMGK2MF.cjs.map +1 -0
- package/dist/StrategySection-3ED3QW4R.cjs +180 -0
- package/dist/StrategySection-3ED3QW4R.cjs.map +1 -0
- package/dist/StrategySection-VUWMIYYP.js +175 -0
- package/dist/StrategySection-VUWMIYYP.js.map +1 -0
- package/dist/TeamSection-DZVSNZE6.cjs +112 -0
- package/dist/TeamSection-DZVSNZE6.cjs.map +1 -0
- package/dist/TeamSection-HGKFW6PQ.js +107 -0
- package/dist/TeamSection-HGKFW6PQ.js.map +1 -0
- package/dist/TechStackSection-OCUYG4XT.js +90 -0
- package/dist/TechStackSection-OCUYG4XT.js.map +1 -0
- package/dist/TechStackSection-VKJK4KQB.cjs +91 -0
- package/dist/TechStackSection-VKJK4KQB.cjs.map +1 -0
- package/dist/TestimonialSection-6RGSMXQB.js +122 -0
- package/dist/TestimonialSection-6RGSMXQB.js.map +1 -0
- package/dist/TestimonialSection-XPTFUQIN.cjs +124 -0
- package/dist/TestimonialSection-XPTFUQIN.cjs.map +1 -0
- package/dist/VideoSection-4A2HC6K6.js +117 -0
- package/dist/VideoSection-4A2HC6K6.js.map +1 -0
- package/dist/VideoSection-G3DFS7UH.cjs +118 -0
- package/dist/VideoSection-G3DFS7UH.cjs.map +1 -0
- package/dist/chunk-2VNNFAG6.js +415 -0
- package/dist/chunk-2VNNFAG6.js.map +1 -0
- package/dist/chunk-2Y4O3LWM.js +53 -0
- package/dist/chunk-2Y4O3LWM.js.map +1 -0
- package/dist/chunk-5FKOLIV6.cjs +221 -0
- package/dist/chunk-5FKOLIV6.cjs.map +1 -0
- package/dist/chunk-7CFFAKDM.js +74 -0
- package/dist/chunk-7CFFAKDM.js.map +1 -0
- package/dist/chunk-A4I4IK7V.js +69 -0
- package/dist/chunk-A4I4IK7V.js.map +1 -0
- package/dist/chunk-IKBK7HYX.cjs +79 -0
- package/dist/chunk-IKBK7HYX.cjs.map +1 -0
- package/dist/chunk-KEOHORIH.cjs +79 -0
- package/dist/chunk-KEOHORIH.cjs.map +1 -0
- package/dist/chunk-NAS4K5UR.cjs +139 -0
- package/dist/chunk-NAS4K5UR.cjs.map +1 -0
- package/dist/chunk-QBLWP25X.cjs +73 -0
- package/dist/chunk-QBLWP25X.cjs.map +1 -0
- package/dist/chunk-QIC6JFFD.js +210 -0
- package/dist/chunk-QIC6JFFD.js.map +1 -0
- package/dist/chunk-TAPNXT7X.cjs +422 -0
- package/dist/chunk-TAPNXT7X.cjs.map +1 -0
- package/dist/chunk-XCKXHK44.js +15 -0
- package/dist/chunk-XCKXHK44.js.map +1 -0
- package/dist/chunk-XMC4DN6G.js +131 -0
- package/dist/chunk-XMC4DN6G.js.map +1 -0
- package/dist/chunk-XONXEFJY.cjs +58 -0
- package/dist/chunk-XONXEFJY.cjs.map +1 -0
- package/dist/chunk-XQNJED46.cjs +19 -0
- package/dist/chunk-XQNJED46.cjs.map +1 -0
- package/dist/chunk-YB4B3OMC.js +74 -0
- package/dist/chunk-YB4B3OMC.js.map +1 -0
- package/dist/index.cjs +271 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +137 -0
- package/dist/index.d.ts +137 -0
- package/dist/index.js +197 -0
- package/dist/index.js.map +1 -0
- package/dist/layout/index.cjs +13 -0
- package/dist/layout/index.cjs.map +1 -0
- package/dist/layout/index.d.cts +54 -0
- package/dist/layout/index.d.ts +54 -0
- package/dist/layout/index.js +4 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/portfolio/client.cjs +18 -0
- package/dist/portfolio/client.cjs.map +1 -0
- package/dist/portfolio/client.d.cts +97 -0
- package/dist/portfolio/client.d.ts +97 -0
- package/dist/portfolio/client.js +6 -0
- package/dist/portfolio/client.js.map +1 -0
- package/dist/portfolio/index.cjs +41 -0
- package/dist/portfolio/index.cjs.map +1 -0
- package/dist/portfolio/index.d.cts +12 -0
- package/dist/portfolio/index.d.ts +12 -0
- package/dist/portfolio/index.js +8 -0
- package/dist/portfolio/index.js.map +1 -0
- package/dist/portfolio/sections.cjs +20 -0
- package/dist/portfolio/sections.cjs.map +1 -0
- package/dist/portfolio/sections.d.cts +42 -0
- package/dist/portfolio/sections.d.ts +42 -0
- package/dist/portfolio/sections.js +4 -0
- package/dist/portfolio/sections.js.map +1 -0
- package/dist/portfolio/server.cjs +141 -0
- package/dist/portfolio/server.cjs.map +1 -0
- package/dist/portfolio/server.d.cts +68 -0
- package/dist/portfolio/server.d.ts +68 -0
- package/dist/portfolio/server.js +134 -0
- package/dist/portfolio/server.js.map +1 -0
- package/dist/types-BMUhBhWx.d.cts +346 -0
- package/dist/types-BMUhBhWx.d.ts +346 -0
- package/package.json +71 -0
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { B as BrandConfig } from './types-BMUhBhWx.cjs';
|
|
2
|
+
export { M as MetricSource, e as MetricsDelta, f as MetricsSnapshot, g as PORTFOLIO_SECTION_TYPES, h as PortfolioAnnotation, i as PortfolioBeforeAfterData, j as PortfolioCTAData, k as PortfolioChallengeItem, l as PortfolioChallengesData, m as PortfolioConfigResponse, n as PortfolioConversionFunnelData, o as PortfolioDetailsData, p as PortfolioFeatureSpotlightData, q as PortfolioFunnelStage, r as PortfolioGalleryData, s as PortfolioGalleryImage, t as PortfolioHeroData, u as PortfolioItem, P as PortfolioItemFull, v as PortfolioKPI, a as PortfolioListResponse, w as PortfolioMetricsDataPoint, x as PortfolioMetricsTimelineData, y as PortfolioResultItem, z as PortfolioResultsData, A as PortfolioSection, d as PortfolioSectionData, c as PortfolioSectionDataMap, b as PortfolioSectionType, C as PortfolioSeoData, D as PortfolioServiceItem, E as PortfolioServicesData, F as PortfolioStrategyData, G as PortfolioStrategyPhase, H as PortfolioTeamData, I as PortfolioTeamMember, J as PortfolioTechItem, K as PortfolioTechStackData, L as PortfolioTestimonialData, N as PortfolioVideoData, S as SanityImageRef } from './types-BMUhBhWx.cjs';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
export { AgencySiteKitLayout } from './layout/index.cjs';
|
|
5
|
+
export { PortfolioPage } from './portfolio/index.cjs';
|
|
6
|
+
export { PortfolioCard, PortfolioCardProps, PortfolioFilterProps, PortfolioGrid, PortfolioGridProps, PortfolioPageClientProps, PortfolioSectionRendererProps } from './portfolio/client.cjs';
|
|
7
|
+
export { PortfolioSectionRenderer, PortfolioSectionRenderer as SectionRenderer, getRegisteredSectionTypes, getSectionRenderer, registerSectionRenderer } from './portfolio/sections.cjs';
|
|
8
|
+
import 'react/jsx-runtime';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @sonordev/agency-site-kit — Brand customization system
|
|
12
|
+
*
|
|
13
|
+
* Generates CSS custom properties from a BrandConfig object.
|
|
14
|
+
* Supports light/dark mode with automatic fallbacks.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Converts a hex color string to an "R, G, B" string for use in rgb()/rgba().
|
|
19
|
+
* Supports 3-digit (#abc) and 6-digit (#aabbcc) hex values.
|
|
20
|
+
* Returns null for invalid inputs.
|
|
21
|
+
*/
|
|
22
|
+
declare function hexToRgb(hex: string): string | null;
|
|
23
|
+
declare const DEFAULT_BRAND_CONFIG: BrandConfig;
|
|
24
|
+
declare const DEFAULT_DARK_MODE: Partial<BrandConfig>;
|
|
25
|
+
/**
|
|
26
|
+
* Generates a complete CSS string with all --sk-* custom properties.
|
|
27
|
+
*
|
|
28
|
+
* Produces:
|
|
29
|
+
* - `:root` / `[data-theme="light"]` block with light mode values
|
|
30
|
+
* - `[data-theme="dark"]` block with dark mode values
|
|
31
|
+
* - `@media (prefers-color-scheme: dark)` fallback for auto detection
|
|
32
|
+
*
|
|
33
|
+
* Usage: inject the returned string into a `<style>` tag.
|
|
34
|
+
*/
|
|
35
|
+
declare function generateBrandCSS(config: BrandConfig): string;
|
|
36
|
+
/**
|
|
37
|
+
* Merges a partial brand config with defaults, returning a complete BrandConfig.
|
|
38
|
+
*/
|
|
39
|
+
declare function mergeBrandConfig(partial: Partial<BrandConfig>): BrandConfig;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @sonordev/agency-site-kit — API fetch utilities
|
|
43
|
+
*
|
|
44
|
+
* Server-side only. Reads SONOR_API_KEY and SONOR_API_URL from process.env.
|
|
45
|
+
* Uses Next.js ISR caching via `next: { revalidate }` on every fetch.
|
|
46
|
+
*/
|
|
47
|
+
interface ApiConfig {
|
|
48
|
+
apiKey: string;
|
|
49
|
+
apiUrl: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Reads API configuration from environment variables.
|
|
53
|
+
* Falls back to UPTRADE_API_KEY for legacy compatibility.
|
|
54
|
+
* Returns null if no API key is found.
|
|
55
|
+
*/
|
|
56
|
+
declare function getApiConfig(): ApiConfig | null;
|
|
57
|
+
interface ApiFetchOptions extends Omit<RequestInit, 'headers'> {
|
|
58
|
+
/** ISR revalidation interval in seconds. Defaults to 3600. Set to 0 for no caching. */
|
|
59
|
+
revalidate?: number;
|
|
60
|
+
/** Additional headers to merge with defaults */
|
|
61
|
+
headers?: Record<string, string>;
|
|
62
|
+
/** Override API key (e.g. passed from layout props) */
|
|
63
|
+
apiKey?: string;
|
|
64
|
+
/** Override API URL */
|
|
65
|
+
apiUrl?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Fetch wrapper for the public portfolio API.
|
|
69
|
+
*
|
|
70
|
+
* - Injects `x-api-key` header automatically
|
|
71
|
+
* - Parses JSON responses
|
|
72
|
+
* - Uses Next.js ISR caching via `next.revalidate`
|
|
73
|
+
* - Returns null on failure instead of throwing
|
|
74
|
+
*/
|
|
75
|
+
declare function apiFetch<T>(path: string, options?: ApiFetchOptions): Promise<T | null>;
|
|
76
|
+
/**
|
|
77
|
+
* GET shorthand for apiFetch.
|
|
78
|
+
*
|
|
79
|
+
* @param path API path (e.g. "/api/public/portfolio/items")
|
|
80
|
+
* @param revalidate ISR revalidation in seconds (default 3600)
|
|
81
|
+
* @param apiKey Optional override API key
|
|
82
|
+
* @param apiUrl Optional override API URL
|
|
83
|
+
*/
|
|
84
|
+
declare function apiGet<T>(path: string, revalidate?: number, apiKey?: string, apiUrl?: string): Promise<T | null>;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @sonordev/agency-site-kit — Icon registry
|
|
88
|
+
*
|
|
89
|
+
* Lightweight icon system that maps string names to SVG path data.
|
|
90
|
+
* No external icon library dependency — keeps the bundle small.
|
|
91
|
+
* Icons are rendered as inline SVGs.
|
|
92
|
+
*/
|
|
93
|
+
|
|
94
|
+
interface IconDefinition {
|
|
95
|
+
viewBox: string;
|
|
96
|
+
paths: string[];
|
|
97
|
+
/** Optional fill-rule for complex paths */
|
|
98
|
+
fillRule?: 'evenodd' | 'nonzero';
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Returns the icon definition (viewBox + paths) for a given icon name.
|
|
102
|
+
* Returns null if the icon is not found.
|
|
103
|
+
*/
|
|
104
|
+
declare function getIconDefinition(name: string): IconDefinition | null;
|
|
105
|
+
/**
|
|
106
|
+
* Returns just the SVG path strings for a given icon name.
|
|
107
|
+
* Useful when building custom SVG elements.
|
|
108
|
+
*/
|
|
109
|
+
declare function getIconPaths(name: string): string[] | null;
|
|
110
|
+
/**
|
|
111
|
+
* Returns a list of all available icon names.
|
|
112
|
+
*/
|
|
113
|
+
declare function getAvailableIcons(): string[];
|
|
114
|
+
/**
|
|
115
|
+
* Renders an icon as a React SVG element.
|
|
116
|
+
*
|
|
117
|
+
* @param name Icon name from the registry
|
|
118
|
+
* @param size Width/height in pixels (default 24)
|
|
119
|
+
* @param className Optional CSS class name
|
|
120
|
+
* @returns React SVG element, or null if icon not found
|
|
121
|
+
*/
|
|
122
|
+
declare function renderIcon(name: string, size?: number, className?: string): React.ReactElement | null;
|
|
123
|
+
/**
|
|
124
|
+
* Icon component for use in JSX.
|
|
125
|
+
*
|
|
126
|
+
* Usage:
|
|
127
|
+
* ```tsx
|
|
128
|
+
* <Icon name="trending-up" size={20} className="text-green-500" />
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
declare function Icon({ name, size, className, }: {
|
|
132
|
+
name: string;
|
|
133
|
+
size?: number;
|
|
134
|
+
className?: string;
|
|
135
|
+
}): React.ReactElement | null;
|
|
136
|
+
|
|
137
|
+
export { BrandConfig, DEFAULT_BRAND_CONFIG, DEFAULT_DARK_MODE, Icon, apiFetch, apiGet, generateBrandCSS, getApiConfig, getAvailableIcons, getIconDefinition, getIconPaths, hexToRgb, mergeBrandConfig, renderIcon };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { B as BrandConfig } from './types-BMUhBhWx.js';
|
|
2
|
+
export { M as MetricSource, e as MetricsDelta, f as MetricsSnapshot, g as PORTFOLIO_SECTION_TYPES, h as PortfolioAnnotation, i as PortfolioBeforeAfterData, j as PortfolioCTAData, k as PortfolioChallengeItem, l as PortfolioChallengesData, m as PortfolioConfigResponse, n as PortfolioConversionFunnelData, o as PortfolioDetailsData, p as PortfolioFeatureSpotlightData, q as PortfolioFunnelStage, r as PortfolioGalleryData, s as PortfolioGalleryImage, t as PortfolioHeroData, u as PortfolioItem, P as PortfolioItemFull, v as PortfolioKPI, a as PortfolioListResponse, w as PortfolioMetricsDataPoint, x as PortfolioMetricsTimelineData, y as PortfolioResultItem, z as PortfolioResultsData, A as PortfolioSection, d as PortfolioSectionData, c as PortfolioSectionDataMap, b as PortfolioSectionType, C as PortfolioSeoData, D as PortfolioServiceItem, E as PortfolioServicesData, F as PortfolioStrategyData, G as PortfolioStrategyPhase, H as PortfolioTeamData, I as PortfolioTeamMember, J as PortfolioTechItem, K as PortfolioTechStackData, L as PortfolioTestimonialData, N as PortfolioVideoData, S as SanityImageRef } from './types-BMUhBhWx.js';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
export { AgencySiteKitLayout } from './layout/index.js';
|
|
5
|
+
export { PortfolioPage } from './portfolio/index.js';
|
|
6
|
+
export { PortfolioCard, PortfolioCardProps, PortfolioFilterProps, PortfolioGrid, PortfolioGridProps, PortfolioPageClientProps, PortfolioSectionRendererProps } from './portfolio/client.js';
|
|
7
|
+
export { PortfolioSectionRenderer, PortfolioSectionRenderer as SectionRenderer, getRegisteredSectionTypes, getSectionRenderer, registerSectionRenderer } from './portfolio/sections.js';
|
|
8
|
+
import 'react/jsx-runtime';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @sonordev/agency-site-kit — Brand customization system
|
|
12
|
+
*
|
|
13
|
+
* Generates CSS custom properties from a BrandConfig object.
|
|
14
|
+
* Supports light/dark mode with automatic fallbacks.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Converts a hex color string to an "R, G, B" string for use in rgb()/rgba().
|
|
19
|
+
* Supports 3-digit (#abc) and 6-digit (#aabbcc) hex values.
|
|
20
|
+
* Returns null for invalid inputs.
|
|
21
|
+
*/
|
|
22
|
+
declare function hexToRgb(hex: string): string | null;
|
|
23
|
+
declare const DEFAULT_BRAND_CONFIG: BrandConfig;
|
|
24
|
+
declare const DEFAULT_DARK_MODE: Partial<BrandConfig>;
|
|
25
|
+
/**
|
|
26
|
+
* Generates a complete CSS string with all --sk-* custom properties.
|
|
27
|
+
*
|
|
28
|
+
* Produces:
|
|
29
|
+
* - `:root` / `[data-theme="light"]` block with light mode values
|
|
30
|
+
* - `[data-theme="dark"]` block with dark mode values
|
|
31
|
+
* - `@media (prefers-color-scheme: dark)` fallback for auto detection
|
|
32
|
+
*
|
|
33
|
+
* Usage: inject the returned string into a `<style>` tag.
|
|
34
|
+
*/
|
|
35
|
+
declare function generateBrandCSS(config: BrandConfig): string;
|
|
36
|
+
/**
|
|
37
|
+
* Merges a partial brand config with defaults, returning a complete BrandConfig.
|
|
38
|
+
*/
|
|
39
|
+
declare function mergeBrandConfig(partial: Partial<BrandConfig>): BrandConfig;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @sonordev/agency-site-kit — API fetch utilities
|
|
43
|
+
*
|
|
44
|
+
* Server-side only. Reads SONOR_API_KEY and SONOR_API_URL from process.env.
|
|
45
|
+
* Uses Next.js ISR caching via `next: { revalidate }` on every fetch.
|
|
46
|
+
*/
|
|
47
|
+
interface ApiConfig {
|
|
48
|
+
apiKey: string;
|
|
49
|
+
apiUrl: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Reads API configuration from environment variables.
|
|
53
|
+
* Falls back to UPTRADE_API_KEY for legacy compatibility.
|
|
54
|
+
* Returns null if no API key is found.
|
|
55
|
+
*/
|
|
56
|
+
declare function getApiConfig(): ApiConfig | null;
|
|
57
|
+
interface ApiFetchOptions extends Omit<RequestInit, 'headers'> {
|
|
58
|
+
/** ISR revalidation interval in seconds. Defaults to 3600. Set to 0 for no caching. */
|
|
59
|
+
revalidate?: number;
|
|
60
|
+
/** Additional headers to merge with defaults */
|
|
61
|
+
headers?: Record<string, string>;
|
|
62
|
+
/** Override API key (e.g. passed from layout props) */
|
|
63
|
+
apiKey?: string;
|
|
64
|
+
/** Override API URL */
|
|
65
|
+
apiUrl?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Fetch wrapper for the public portfolio API.
|
|
69
|
+
*
|
|
70
|
+
* - Injects `x-api-key` header automatically
|
|
71
|
+
* - Parses JSON responses
|
|
72
|
+
* - Uses Next.js ISR caching via `next.revalidate`
|
|
73
|
+
* - Returns null on failure instead of throwing
|
|
74
|
+
*/
|
|
75
|
+
declare function apiFetch<T>(path: string, options?: ApiFetchOptions): Promise<T | null>;
|
|
76
|
+
/**
|
|
77
|
+
* GET shorthand for apiFetch.
|
|
78
|
+
*
|
|
79
|
+
* @param path API path (e.g. "/api/public/portfolio/items")
|
|
80
|
+
* @param revalidate ISR revalidation in seconds (default 3600)
|
|
81
|
+
* @param apiKey Optional override API key
|
|
82
|
+
* @param apiUrl Optional override API URL
|
|
83
|
+
*/
|
|
84
|
+
declare function apiGet<T>(path: string, revalidate?: number, apiKey?: string, apiUrl?: string): Promise<T | null>;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @sonordev/agency-site-kit — Icon registry
|
|
88
|
+
*
|
|
89
|
+
* Lightweight icon system that maps string names to SVG path data.
|
|
90
|
+
* No external icon library dependency — keeps the bundle small.
|
|
91
|
+
* Icons are rendered as inline SVGs.
|
|
92
|
+
*/
|
|
93
|
+
|
|
94
|
+
interface IconDefinition {
|
|
95
|
+
viewBox: string;
|
|
96
|
+
paths: string[];
|
|
97
|
+
/** Optional fill-rule for complex paths */
|
|
98
|
+
fillRule?: 'evenodd' | 'nonzero';
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Returns the icon definition (viewBox + paths) for a given icon name.
|
|
102
|
+
* Returns null if the icon is not found.
|
|
103
|
+
*/
|
|
104
|
+
declare function getIconDefinition(name: string): IconDefinition | null;
|
|
105
|
+
/**
|
|
106
|
+
* Returns just the SVG path strings for a given icon name.
|
|
107
|
+
* Useful when building custom SVG elements.
|
|
108
|
+
*/
|
|
109
|
+
declare function getIconPaths(name: string): string[] | null;
|
|
110
|
+
/**
|
|
111
|
+
* Returns a list of all available icon names.
|
|
112
|
+
*/
|
|
113
|
+
declare function getAvailableIcons(): string[];
|
|
114
|
+
/**
|
|
115
|
+
* Renders an icon as a React SVG element.
|
|
116
|
+
*
|
|
117
|
+
* @param name Icon name from the registry
|
|
118
|
+
* @param size Width/height in pixels (default 24)
|
|
119
|
+
* @param className Optional CSS class name
|
|
120
|
+
* @returns React SVG element, or null if icon not found
|
|
121
|
+
*/
|
|
122
|
+
declare function renderIcon(name: string, size?: number, className?: string): React.ReactElement | null;
|
|
123
|
+
/**
|
|
124
|
+
* Icon component for use in JSX.
|
|
125
|
+
*
|
|
126
|
+
* Usage:
|
|
127
|
+
* ```tsx
|
|
128
|
+
* <Icon name="trending-up" size={20} className="text-green-500" />
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
declare function Icon({ name, size, className, }: {
|
|
132
|
+
name: string;
|
|
133
|
+
size?: number;
|
|
134
|
+
className?: string;
|
|
135
|
+
}): React.ReactElement | null;
|
|
136
|
+
|
|
137
|
+
export { BrandConfig, DEFAULT_BRAND_CONFIG, DEFAULT_DARK_MODE, Icon, apiFetch, apiGet, generateBrandCSS, getApiConfig, getAvailableIcons, getIconDefinition, getIconPaths, hexToRgb, mergeBrandConfig, renderIcon };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
export { PORTFOLIO_SECTION_TYPES, PortfolioPage } from './chunk-2VNNFAG6.js';
|
|
2
|
+
import './chunk-2Y4O3LWM.js';
|
|
3
|
+
export { getRegisteredSectionTypes, getSectionRenderer, registerSectionRenderer } from './chunk-XCKXHK44.js';
|
|
4
|
+
export { PortfolioCard, PortfolioGrid } from './chunk-XMC4DN6G.js';
|
|
5
|
+
export { AgencySiteKitLayout, DEFAULT_BRAND_CONFIG, DEFAULT_DARK_MODE, generateBrandCSS, hexToRgb, mergeBrandConfig } from './chunk-QIC6JFFD.js';
|
|
6
|
+
export { apiFetch, apiGet, getApiConfig } from './chunk-A4I4IK7V.js';
|
|
7
|
+
import './chunk-YB4B3OMC.js';
|
|
8
|
+
import './chunk-7CFFAKDM.js';
|
|
9
|
+
import React from 'react';
|
|
10
|
+
|
|
11
|
+
var ICON_REGISTRY = {
|
|
12
|
+
"arrow-up": {
|
|
13
|
+
viewBox: "0 0 24 24",
|
|
14
|
+
paths: ["M12 19V5", "M5 12l7-7 7 7"]
|
|
15
|
+
},
|
|
16
|
+
"arrow-down": {
|
|
17
|
+
viewBox: "0 0 24 24",
|
|
18
|
+
paths: ["M12 5v14", "M19 12l-7 7-7-7"]
|
|
19
|
+
},
|
|
20
|
+
"chart-bar": {
|
|
21
|
+
viewBox: "0 0 24 24",
|
|
22
|
+
paths: ["M12 20V10", "M18 20V4", "M6 20v-4"]
|
|
23
|
+
},
|
|
24
|
+
check: {
|
|
25
|
+
viewBox: "0 0 24 24",
|
|
26
|
+
paths: ["M20 6L9 17l-5-5"]
|
|
27
|
+
},
|
|
28
|
+
clock: {
|
|
29
|
+
viewBox: "0 0 24 24",
|
|
30
|
+
paths: ["M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20z", "M12 6v6l4 2"]
|
|
31
|
+
},
|
|
32
|
+
code: {
|
|
33
|
+
viewBox: "0 0 24 24",
|
|
34
|
+
paths: ["M16 18l6-6-6-6", "M8 6l-6 6 6 6"]
|
|
35
|
+
},
|
|
36
|
+
globe: {
|
|
37
|
+
viewBox: "0 0 24 24",
|
|
38
|
+
paths: [
|
|
39
|
+
"M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20z",
|
|
40
|
+
"M2 12h20",
|
|
41
|
+
"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10A15.3 15.3 0 0 1 12 2z"
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
layout: {
|
|
45
|
+
viewBox: "0 0 24 24",
|
|
46
|
+
paths: [
|
|
47
|
+
"M19 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2z",
|
|
48
|
+
"M3 9h18",
|
|
49
|
+
"M9 21V9"
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
lightning: {
|
|
53
|
+
viewBox: "0 0 24 24",
|
|
54
|
+
paths: ["M13 2L3 14h9l-1 8 10-12h-9l1-8"]
|
|
55
|
+
},
|
|
56
|
+
link: {
|
|
57
|
+
viewBox: "0 0 24 24",
|
|
58
|
+
paths: [
|
|
59
|
+
"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",
|
|
60
|
+
"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
lock: {
|
|
64
|
+
viewBox: "0 0 24 24",
|
|
65
|
+
paths: [
|
|
66
|
+
"M19 11H5a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7a2 2 0 0 0-2-2z",
|
|
67
|
+
"M7 11V7a5 5 0 0 1 10 0v4"
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
mail: {
|
|
71
|
+
viewBox: "0 0 24 24",
|
|
72
|
+
paths: [
|
|
73
|
+
"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z",
|
|
74
|
+
"M22 6l-10 7L2 6"
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
monitor: {
|
|
78
|
+
viewBox: "0 0 24 24",
|
|
79
|
+
paths: [
|
|
80
|
+
"M20 3H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2z",
|
|
81
|
+
"M8 21h8",
|
|
82
|
+
"M12 17v4"
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
palette: {
|
|
86
|
+
viewBox: "0 0 24 24",
|
|
87
|
+
paths: [
|
|
88
|
+
"M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10a2 2 0 0 0 2-2v-.09a1.65 1.65 0 0 1 .92-1.48A1.65 1.65 0 0 1 16.5 19H19a2 2 0 0 0 2-2 10 10 0 0 0-9-15z",
|
|
89
|
+
"M6.5 11.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z",
|
|
90
|
+
"M10 7.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z",
|
|
91
|
+
"M14 7.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z",
|
|
92
|
+
"M17.5 11.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z"
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
rocket: {
|
|
96
|
+
viewBox: "0 0 24 24",
|
|
97
|
+
paths: [
|
|
98
|
+
"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z",
|
|
99
|
+
"M12 15l-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z",
|
|
100
|
+
"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0",
|
|
101
|
+
"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
search: {
|
|
105
|
+
viewBox: "0 0 24 24",
|
|
106
|
+
paths: [
|
|
107
|
+
"M11 19a8 8 0 1 0 0-16 8 8 0 0 0 0 16z",
|
|
108
|
+
"M21 21l-4.35-4.35"
|
|
109
|
+
]
|
|
110
|
+
},
|
|
111
|
+
settings: {
|
|
112
|
+
viewBox: "0 0 24 24",
|
|
113
|
+
paths: [
|
|
114
|
+
"M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6z",
|
|
115
|
+
"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09a1.65 1.65 0 0 0-1.08-1.51 1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09a1.65 1.65 0 0 0 1.51-1.08 1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9c.26.604.852.997 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1.08z"
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
shield: {
|
|
119
|
+
viewBox: "0 0 24 24",
|
|
120
|
+
paths: ["M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"]
|
|
121
|
+
},
|
|
122
|
+
star: {
|
|
123
|
+
viewBox: "0 0 24 24",
|
|
124
|
+
paths: [
|
|
125
|
+
"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"
|
|
126
|
+
]
|
|
127
|
+
},
|
|
128
|
+
target: {
|
|
129
|
+
viewBox: "0 0 24 24",
|
|
130
|
+
paths: [
|
|
131
|
+
"M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20z",
|
|
132
|
+
"M12 18a6 6 0 1 0 0-12 6 6 0 0 0 0 12z",
|
|
133
|
+
"M12 14a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"
|
|
134
|
+
]
|
|
135
|
+
},
|
|
136
|
+
"trending-up": {
|
|
137
|
+
viewBox: "0 0 24 24",
|
|
138
|
+
paths: ["M23 6l-9.5 9.5-5-5L1 18", "M17 6h6v6"]
|
|
139
|
+
},
|
|
140
|
+
users: {
|
|
141
|
+
viewBox: "0 0 24 24",
|
|
142
|
+
paths: [
|
|
143
|
+
"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2",
|
|
144
|
+
"M9 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8z",
|
|
145
|
+
"M23 21v-2a4 4 0 0 0-3-3.87",
|
|
146
|
+
"M16 3.13a4 4 0 0 1 0 7.75"
|
|
147
|
+
]
|
|
148
|
+
},
|
|
149
|
+
zap: {
|
|
150
|
+
viewBox: "0 0 24 24",
|
|
151
|
+
paths: ["M13 2L3 14h9l-1 8 10-12h-9l1-8"]
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
function getIconDefinition(name) {
|
|
155
|
+
return ICON_REGISTRY[name] ?? null;
|
|
156
|
+
}
|
|
157
|
+
function getIconPaths(name) {
|
|
158
|
+
const def = ICON_REGISTRY[name];
|
|
159
|
+
return def ? def.paths : null;
|
|
160
|
+
}
|
|
161
|
+
function getAvailableIcons() {
|
|
162
|
+
return Object.keys(ICON_REGISTRY);
|
|
163
|
+
}
|
|
164
|
+
function renderIcon(name, size = 24, className) {
|
|
165
|
+
const def = ICON_REGISTRY[name];
|
|
166
|
+
if (!def) return null;
|
|
167
|
+
return React.createElement(
|
|
168
|
+
"svg",
|
|
169
|
+
{
|
|
170
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
171
|
+
width: size,
|
|
172
|
+
height: size,
|
|
173
|
+
viewBox: def.viewBox,
|
|
174
|
+
fill: "none",
|
|
175
|
+
stroke: "currentColor",
|
|
176
|
+
strokeWidth: 2,
|
|
177
|
+
strokeLinecap: "round",
|
|
178
|
+
strokeLinejoin: "round",
|
|
179
|
+
className,
|
|
180
|
+
"aria-hidden": "true"
|
|
181
|
+
},
|
|
182
|
+
...def.paths.map(
|
|
183
|
+
(d, i) => React.createElement("path", { key: i, d })
|
|
184
|
+
)
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
function Icon({
|
|
188
|
+
name,
|
|
189
|
+
size = 24,
|
|
190
|
+
className
|
|
191
|
+
}) {
|
|
192
|
+
return renderIcon(name, size, className);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export { Icon, getAvailableIcons, getIconDefinition, getIconPaths, renderIcon };
|
|
196
|
+
//# sourceMappingURL=index.js.map
|
|
197
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/shared/icons.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @sonordev/agency-site-kit — Icon registry\n *\n * Lightweight icon system that maps string names to SVG path data.\n * No external icon library dependency — keeps the bundle small.\n * Icons are rendered as inline SVGs.\n */\n\nimport React from 'react';\n\ninterface IconDefinition {\n viewBox: string;\n paths: string[];\n /** Optional fill-rule for complex paths */\n fillRule?: 'evenodd' | 'nonzero';\n}\n\n/**\n * Icon registry — 24x24 viewBox icons (matching Lucide/Heroicons conventions).\n * All paths use stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\".\n */\nconst ICON_REGISTRY: Record<string, IconDefinition> = {\n 'arrow-up': {\n viewBox: '0 0 24 24',\n paths: ['M12 19V5', 'M5 12l7-7 7 7'],\n },\n 'arrow-down': {\n viewBox: '0 0 24 24',\n paths: ['M12 5v14', 'M19 12l-7 7-7-7'],\n },\n 'chart-bar': {\n viewBox: '0 0 24 24',\n paths: ['M12 20V10', 'M18 20V4', 'M6 20v-4'],\n },\n check: {\n viewBox: '0 0 24 24',\n paths: ['M20 6L9 17l-5-5'],\n },\n clock: {\n viewBox: '0 0 24 24',\n paths: ['M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20z', 'M12 6v6l4 2'],\n },\n code: {\n viewBox: '0 0 24 24',\n paths: ['M16 18l6-6-6-6', 'M8 6l-6 6 6 6'],\n },\n globe: {\n viewBox: '0 0 24 24',\n paths: [\n 'M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20z',\n 'M2 12h20',\n 'M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10A15.3 15.3 0 0 1 12 2z',\n ],\n },\n layout: {\n viewBox: '0 0 24 24',\n paths: [\n 'M19 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2z',\n 'M3 9h18',\n 'M9 21V9',\n ],\n },\n lightning: {\n viewBox: '0 0 24 24',\n paths: ['M13 2L3 14h9l-1 8 10-12h-9l1-8'],\n },\n link: {\n viewBox: '0 0 24 24',\n paths: [\n 'M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71',\n 'M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71',\n ],\n },\n lock: {\n viewBox: '0 0 24 24',\n paths: [\n 'M19 11H5a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7a2 2 0 0 0-2-2z',\n 'M7 11V7a5 5 0 0 1 10 0v4',\n ],\n },\n mail: {\n viewBox: '0 0 24 24',\n paths: [\n 'M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z',\n 'M22 6l-10 7L2 6',\n ],\n },\n monitor: {\n viewBox: '0 0 24 24',\n paths: [\n 'M20 3H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2z',\n 'M8 21h8',\n 'M12 17v4',\n ],\n },\n palette: {\n viewBox: '0 0 24 24',\n paths: [\n 'M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10a2 2 0 0 0 2-2v-.09a1.65 1.65 0 0 1 .92-1.48A1.65 1.65 0 0 1 16.5 19H19a2 2 0 0 0 2-2 10 10 0 0 0-9-15z',\n 'M6.5 11.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z',\n 'M10 7.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z',\n 'M14 7.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z',\n 'M17.5 11.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z',\n ],\n },\n rocket: {\n viewBox: '0 0 24 24',\n paths: [\n 'M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z',\n 'M12 15l-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z',\n 'M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0',\n 'M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5',\n ],\n },\n search: {\n viewBox: '0 0 24 24',\n paths: [\n 'M11 19a8 8 0 1 0 0-16 8 8 0 0 0 0 16z',\n 'M21 21l-4.35-4.35',\n ],\n },\n settings: {\n viewBox: '0 0 24 24',\n paths: [\n 'M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6z',\n 'M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09a1.65 1.65 0 0 0-1.08-1.51 1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09a1.65 1.65 0 0 0 1.51-1.08 1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9c.26.604.852.997 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1.08z',\n ],\n },\n shield: {\n viewBox: '0 0 24 24',\n paths: ['M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z'],\n },\n star: {\n viewBox: '0 0 24 24',\n paths: [\n 'M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z',\n ],\n },\n target: {\n viewBox: '0 0 24 24',\n paths: [\n 'M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20z',\n 'M12 18a6 6 0 1 0 0-12 6 6 0 0 0 0 12z',\n 'M12 14a2 2 0 1 0 0-4 2 2 0 0 0 0 4z',\n ],\n },\n 'trending-up': {\n viewBox: '0 0 24 24',\n paths: ['M23 6l-9.5 9.5-5-5L1 18', 'M17 6h6v6'],\n },\n users: {\n viewBox: '0 0 24 24',\n paths: [\n 'M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2',\n 'M9 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8z',\n 'M23 21v-2a4 4 0 0 0-3-3.87',\n 'M16 3.13a4 4 0 0 1 0 7.75',\n ],\n },\n zap: {\n viewBox: '0 0 24 24',\n paths: ['M13 2L3 14h9l-1 8 10-12h-9l1-8'],\n },\n};\n\n/**\n * Returns the icon definition (viewBox + paths) for a given icon name.\n * Returns null if the icon is not found.\n */\nexport function getIconDefinition(name: string): IconDefinition | null {\n return ICON_REGISTRY[name] ?? null;\n}\n\n/**\n * Returns just the SVG path strings for a given icon name.\n * Useful when building custom SVG elements.\n */\nexport function getIconPaths(name: string): string[] | null {\n const def = ICON_REGISTRY[name];\n return def ? def.paths : null;\n}\n\n/**\n * Returns a list of all available icon names.\n */\nexport function getAvailableIcons(): string[] {\n return Object.keys(ICON_REGISTRY);\n}\n\n/**\n * Renders an icon as a React SVG element.\n *\n * @param name Icon name from the registry\n * @param size Width/height in pixels (default 24)\n * @param className Optional CSS class name\n * @returns React SVG element, or null if icon not found\n */\nexport function renderIcon(\n name: string,\n size: number = 24,\n className?: string,\n): React.ReactElement | null {\n const def = ICON_REGISTRY[name];\n if (!def) return null;\n\n return React.createElement(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: def.viewBox,\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round' as const,\n strokeLinejoin: 'round' as const,\n className,\n 'aria-hidden': 'true',\n },\n ...def.paths.map((d, i) =>\n React.createElement('path', { key: i, d }),\n ),\n );\n}\n\n/**\n * Icon component for use in JSX.\n *\n * Usage:\n * ```tsx\n * <Icon name=\"trending-up\" size={20} className=\"text-green-500\" />\n * ```\n */\nexport function Icon({\n name,\n size = 24,\n className,\n}: {\n name: string;\n size?: number;\n className?: string;\n}): React.ReactElement | null {\n return renderIcon(name, size, className);\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk5FKOLIV6_cjs = require('../chunk-5FKOLIV6.cjs');
|
|
4
|
+
require('../chunk-QBLWP25X.cjs');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
Object.defineProperty(exports, "AgencySiteKitLayout", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function () { return chunk5FKOLIV6_cjs.AgencySiteKitLayout; }
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=index.cjs.map
|
|
13
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { B as BrandConfig } from '../types-BMUhBhWx.cjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @sonordev/agency-site-kit — AgencySiteKitLayout
|
|
6
|
+
*
|
|
7
|
+
* Server component that wraps children with brand CSS variables.
|
|
8
|
+
* Fetches the brand configuration from the Portal API and injects
|
|
9
|
+
* a <style> tag with all --sk-* custom properties (plus --agency-* aliases for backwards compatibility).
|
|
10
|
+
*
|
|
11
|
+
* Usage in app/layout.tsx:
|
|
12
|
+
*
|
|
13
|
+
* ```tsx
|
|
14
|
+
* import { AgencySiteKitLayout } from '@sonordev/agency-site-kit';
|
|
15
|
+
*
|
|
16
|
+
* export default function RootLayout({ children }) {
|
|
17
|
+
* return (
|
|
18
|
+
* <html lang="en">
|
|
19
|
+
* <body>
|
|
20
|
+
* <AgencySiteKitLayout>
|
|
21
|
+
* {children}
|
|
22
|
+
* </AgencySiteKitLayout>
|
|
23
|
+
* </body>
|
|
24
|
+
* </html>
|
|
25
|
+
* );
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
interface AgencySiteKitLayoutProps {
|
|
31
|
+
children: React.ReactNode;
|
|
32
|
+
/** Override the API key (defaults to process.env.SONOR_API_KEY) */
|
|
33
|
+
apiKey?: string;
|
|
34
|
+
/** Override the API URL (defaults to process.env.SONOR_API_URL or https://api.sonor.io) */
|
|
35
|
+
apiUrl?: string;
|
|
36
|
+
/** Override brand config instead of fetching from API */
|
|
37
|
+
brandConfig?: Partial<BrandConfig>;
|
|
38
|
+
/** Force a specific theme: "light" | "dark". Omit for system preference. */
|
|
39
|
+
theme?: 'light' | 'dark';
|
|
40
|
+
/** Additional class name for the wrapper div */
|
|
41
|
+
className?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* AgencySiteKitLayout — Server component wrapper
|
|
45
|
+
*
|
|
46
|
+
* Fetches the agency's brand configuration and injects CSS custom properties
|
|
47
|
+
* so all child components can use --sk-* variables for theming.
|
|
48
|
+
*
|
|
49
|
+
* This is an async server component (RSC). It makes one API call at render
|
|
50
|
+
* time, cached via Next.js ISR (default 1 hour revalidation).
|
|
51
|
+
*/
|
|
52
|
+
declare function AgencySiteKitLayout({ children, apiKey, apiUrl, brandConfig: brandConfigOverride, theme, className, }: AgencySiteKitLayoutProps): Promise<React.ReactElement>;
|
|
53
|
+
|
|
54
|
+
export { AgencySiteKitLayout, type AgencySiteKitLayoutProps };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { B as BrandConfig } from '../types-BMUhBhWx.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @sonordev/agency-site-kit — AgencySiteKitLayout
|
|
6
|
+
*
|
|
7
|
+
* Server component that wraps children with brand CSS variables.
|
|
8
|
+
* Fetches the brand configuration from the Portal API and injects
|
|
9
|
+
* a <style> tag with all --sk-* custom properties (plus --agency-* aliases for backwards compatibility).
|
|
10
|
+
*
|
|
11
|
+
* Usage in app/layout.tsx:
|
|
12
|
+
*
|
|
13
|
+
* ```tsx
|
|
14
|
+
* import { AgencySiteKitLayout } from '@sonordev/agency-site-kit';
|
|
15
|
+
*
|
|
16
|
+
* export default function RootLayout({ children }) {
|
|
17
|
+
* return (
|
|
18
|
+
* <html lang="en">
|
|
19
|
+
* <body>
|
|
20
|
+
* <AgencySiteKitLayout>
|
|
21
|
+
* {children}
|
|
22
|
+
* </AgencySiteKitLayout>
|
|
23
|
+
* </body>
|
|
24
|
+
* </html>
|
|
25
|
+
* );
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
interface AgencySiteKitLayoutProps {
|
|
31
|
+
children: React.ReactNode;
|
|
32
|
+
/** Override the API key (defaults to process.env.SONOR_API_KEY) */
|
|
33
|
+
apiKey?: string;
|
|
34
|
+
/** Override the API URL (defaults to process.env.SONOR_API_URL or https://api.sonor.io) */
|
|
35
|
+
apiUrl?: string;
|
|
36
|
+
/** Override brand config instead of fetching from API */
|
|
37
|
+
brandConfig?: Partial<BrandConfig>;
|
|
38
|
+
/** Force a specific theme: "light" | "dark". Omit for system preference. */
|
|
39
|
+
theme?: 'light' | 'dark';
|
|
40
|
+
/** Additional class name for the wrapper div */
|
|
41
|
+
className?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* AgencySiteKitLayout — Server component wrapper
|
|
45
|
+
*
|
|
46
|
+
* Fetches the agency's brand configuration and injects CSS custom properties
|
|
47
|
+
* so all child components can use --sk-* variables for theming.
|
|
48
|
+
*
|
|
49
|
+
* This is an async server component (RSC). It makes one API call at render
|
|
50
|
+
* time, cached via Next.js ISR (default 1 hour revalidation).
|
|
51
|
+
*/
|
|
52
|
+
declare function AgencySiteKitLayout({ children, apiKey, apiUrl, brandConfig: brandConfigOverride, theme, className, }: AgencySiteKitLayoutProps): Promise<React.ReactElement>;
|
|
53
|
+
|
|
54
|
+
export { AgencySiteKitLayout, type AgencySiteKitLayoutProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkNAS4K5UR_cjs = require('../chunk-NAS4K5UR.cjs');
|
|
4
|
+
require('../chunk-KEOHORIH.cjs');
|
|
5
|
+
require('../chunk-IKBK7HYX.cjs');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
Object.defineProperty(exports, "PortfolioCard", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () { return chunkNAS4K5UR_cjs.PortfolioCard; }
|
|
12
|
+
});
|
|
13
|
+
Object.defineProperty(exports, "PortfolioGrid", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () { return chunkNAS4K5UR_cjs.PortfolioGrid; }
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=client.cjs.map
|
|
18
|
+
//# sourceMappingURL=client.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"client.cjs"}
|