@duongthiu/onex-core 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -65
- package/THEME_API.md +36 -33
- package/dist/api.js +14 -0
- package/dist/api.js.map +1 -0
- package/dist/api.mjs +5 -0
- package/dist/api.mjs.map +1 -0
- package/dist/auth.js +23 -0
- package/dist/auth.js.map +1 -0
- package/dist/auth.mjs +6 -0
- package/dist/auth.mjs.map +1 -0
- package/dist/blog.js +22 -0
- package/dist/blog.js.map +1 -0
- package/dist/blog.mjs +5 -0
- package/dist/blog.mjs.map +1 -0
- package/dist/cart.js +27 -0
- package/dist/cart.js.map +1 -0
- package/dist/cart.mjs +6 -0
- package/dist/cart.mjs.map +1 -0
- package/dist/chunk-2CSWHI3L.js +210 -0
- package/dist/chunk-2CSWHI3L.js.map +1 -0
- package/dist/chunk-2FGHIDUV.js +99 -0
- package/dist/chunk-2FGHIDUV.js.map +1 -0
- package/dist/chunk-2NMEKWO5.js +40 -0
- package/dist/chunk-2NMEKWO5.js.map +1 -0
- package/dist/chunk-43BVHGDT.mjs +131 -0
- package/dist/chunk-43BVHGDT.mjs.map +1 -0
- package/dist/chunk-4JVQJI3I.mjs +290 -0
- package/dist/chunk-4JVQJI3I.mjs.map +1 -0
- package/dist/chunk-5N2EKK5O.js +9550 -0
- package/dist/chunk-5N2EKK5O.js.map +1 -0
- package/dist/chunk-5T6NDVSN.js +76 -0
- package/dist/chunk-5T6NDVSN.js.map +1 -0
- package/dist/chunk-73AINNCI.mjs +201 -0
- package/dist/chunk-73AINNCI.mjs.map +1 -0
- package/dist/chunk-AIXBDAVP.mjs +61 -0
- package/dist/chunk-AIXBDAVP.mjs.map +1 -0
- package/dist/chunk-ALYN5HAC.js +210 -0
- package/dist/chunk-ALYN5HAC.js.map +1 -0
- package/dist/chunk-AREMJR3Q.js +36 -0
- package/dist/chunk-AREMJR3Q.js.map +1 -0
- package/dist/chunk-DXAI6XOI.mjs +33 -0
- package/dist/chunk-DXAI6XOI.mjs.map +1 -0
- package/dist/chunk-F5TFNWFJ.mjs +257 -0
- package/dist/chunk-F5TFNWFJ.mjs.map +1 -0
- package/dist/chunk-FQ7FWUZN.js +265 -0
- package/dist/chunk-FQ7FWUZN.js.map +1 -0
- package/dist/{chunk-3SZX6LHT.js → chunk-J27VGXJH.js} +2 -24
- package/dist/chunk-J27VGXJH.js.map +1 -0
- package/dist/chunk-JZ46LLTZ.js +121 -0
- package/dist/chunk-JZ46LLTZ.js.map +1 -0
- package/dist/chunk-K24UHN6G.mjs +76 -0
- package/dist/chunk-K24UHN6G.mjs.map +1 -0
- package/dist/chunk-KCQGGU5R.mjs +344 -0
- package/dist/chunk-KCQGGU5R.mjs.map +1 -0
- package/dist/chunk-MT22NYKT.mjs +117 -0
- package/dist/chunk-MT22NYKT.mjs.map +1 -0
- package/dist/chunk-NDD472IZ.js +85 -0
- package/dist/chunk-NDD472IZ.js.map +1 -0
- package/dist/chunk-NHOIGGYU.mjs +833 -0
- package/dist/chunk-NHOIGGYU.mjs.map +1 -0
- package/dist/chunk-O3XR7TW3.mjs +12 -0
- package/dist/chunk-O3XR7TW3.mjs.map +1 -0
- package/dist/chunk-OAPYSC2X.mjs +206 -0
- package/dist/chunk-OAPYSC2X.mjs.map +1 -0
- package/dist/{chunk-XE4EOKS4.mjs → chunk-ONJREDYY.mjs} +3 -23
- package/dist/chunk-ONJREDYY.mjs.map +1 -0
- package/dist/chunk-OVT2LUAM.js +197 -0
- package/dist/chunk-OVT2LUAM.js.map +1 -0
- package/dist/chunk-OWNGNGKL.js +331 -0
- package/dist/chunk-OWNGNGKL.js.map +1 -0
- package/dist/chunk-P7SXNZSV.js +298 -0
- package/dist/chunk-P7SXNZSV.js.map +1 -0
- package/dist/chunk-PFJOL3HI.mjs +71 -0
- package/dist/chunk-PFJOL3HI.mjs.map +1 -0
- package/dist/chunk-PPULMWJ6.js +295 -0
- package/dist/chunk-PPULMWJ6.js.map +1 -0
- package/dist/chunk-RGIVKACG.js +359 -0
- package/dist/chunk-RGIVKACG.js.map +1 -0
- package/dist/chunk-RPP5K2LP.js +870 -0
- package/dist/chunk-RPP5K2LP.js.map +1 -0
- package/dist/{chunk-7EON6Q4L.mjs → chunk-RUCHWUD7.mjs} +7651 -6370
- package/dist/chunk-RUCHWUD7.mjs.map +1 -0
- package/dist/chunk-SEVUIX4H.js +137 -0
- package/dist/chunk-SEVUIX4H.js.map +1 -0
- package/dist/chunk-SK2FSHFM.mjs +208 -0
- package/dist/chunk-SK2FSHFM.mjs.map +1 -0
- package/dist/chunk-T6EJ2GAV.mjs +294 -0
- package/dist/chunk-T6EJ2GAV.mjs.map +1 -0
- package/dist/chunk-ULBDOFZI.mjs +302 -0
- package/dist/chunk-ULBDOFZI.mjs.map +1 -0
- package/dist/chunk-V3JIELNV.js +241 -0
- package/dist/chunk-V3JIELNV.js.map +1 -0
- package/dist/chunk-V5E2KWMA.mjs +238 -0
- package/dist/chunk-V5E2KWMA.mjs.map +1 -0
- package/dist/chunk-VJA3ER6A.js +14 -0
- package/dist/chunk-VJA3ER6A.js.map +1 -0
- package/dist/chunk-VLI7ULX5.js +66 -0
- package/dist/chunk-VLI7ULX5.js.map +1 -0
- package/dist/chunk-WFGS5OFH.mjs +189 -0
- package/dist/chunk-WFGS5OFH.mjs.map +1 -0
- package/dist/chunk-WVC5GP24.mjs +96 -0
- package/dist/chunk-WVC5GP24.mjs.map +1 -0
- package/dist/chunk-YOSPWY5K.mjs +36 -0
- package/dist/chunk-YOSPWY5K.mjs.map +1 -0
- package/dist/chunk-ZFFXXLX7.js +205 -0
- package/dist/chunk-ZFFXXLX7.js.map +1 -0
- package/dist/client.js +512 -249
- package/dist/client.mjs +21 -2
- package/dist/components.js +393 -0
- package/dist/components.js.map +1 -0
- package/dist/components.mjs +8 -0
- package/dist/components.mjs.map +1 -0
- package/dist/config.js +17 -0
- package/dist/config.js.map +1 -0
- package/dist/config.mjs +4 -0
- package/dist/config.mjs.map +1 -0
- package/dist/contact.js +22 -0
- package/dist/contact.js.map +1 -0
- package/dist/contact.mjs +5 -0
- package/dist/contact.mjs.map +1 -0
- package/dist/contexts.js +51 -0
- package/dist/contexts.js.map +1 -0
- package/dist/contexts.mjs +6 -0
- package/dist/contexts.mjs.map +1 -0
- package/dist/finance.js +26 -0
- package/dist/finance.js.map +1 -0
- package/dist/finance.mjs +5 -0
- package/dist/finance.mjs.map +1 -0
- package/dist/icons.js +15 -0
- package/dist/icons.js.map +1 -0
- package/dist/icons.mjs +4 -0
- package/dist/icons.mjs.map +1 -0
- package/dist/index.js +512 -249
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +21 -2
- package/dist/index.mjs.map +1 -1
- package/dist/internal.js +1437 -0
- package/dist/internal.js.map +1 -0
- package/dist/internal.mjs +1404 -0
- package/dist/internal.mjs.map +1 -0
- package/dist/motion.js +51 -0
- package/dist/motion.js.map +1 -0
- package/dist/motion.mjs +38 -0
- package/dist/motion.mjs.map +1 -0
- package/dist/orders.js +22 -0
- package/dist/orders.js.map +1 -0
- package/dist/orders.mjs +5 -0
- package/dist/orders.mjs.map +1 -0
- package/dist/products.js +27 -0
- package/dist/products.js.map +1 -0
- package/dist/products.mjs +6 -0
- package/dist/products.mjs.map +1 -0
- package/dist/registry.js +44 -0
- package/dist/registry.js.map +1 -0
- package/dist/registry.mjs +7 -0
- package/dist/registry.mjs.map +1 -0
- package/dist/renderers.js +51 -0
- package/dist/renderers.js.map +1 -0
- package/dist/renderers.mjs +6 -0
- package/dist/renderers.mjs.map +1 -0
- package/dist/server.js +11 -189
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +3 -186
- package/dist/server.mjs.map +1 -1
- package/dist/types.js +37 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +4 -0
- package/dist/types.mjs.map +1 -0
- package/dist/utils.js +160 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.mjs +7 -0
- package/dist/utils.mjs.map +1 -0
- package/dist/wrappers.js +104 -0
- package/dist/wrappers.js.map +1 -0
- package/dist/wrappers.mjs +96 -0
- package/dist/wrappers.mjs.map +1 -0
- package/package.json +112 -9
- package/dist/api-vuL1Eg5L.d.mts +0 -2961
- package/dist/api-vuL1Eg5L.d.ts +0 -2961
- package/dist/chunk-3SZX6LHT.js.map +0 -1
- package/dist/chunk-7EON6Q4L.mjs.map +0 -1
- package/dist/chunk-WDY773GJ.js +0 -8308
- package/dist/chunk-WDY773GJ.js.map +0 -1
- package/dist/chunk-XE4EOKS4.mjs.map +0 -1
- package/dist/client.d.mts +0 -1461
- package/dist/client.d.ts +0 -1461
- package/dist/index.d.mts +0 -125
- package/dist/index.d.ts +0 -125
- package/dist/server.d.mts +0 -70
- package/dist/server.d.ts +0 -70
package/dist/utils.mjs
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
export { countEnabledItems, filterEnabledBlocks, filterEnabledComponents, findBlockInSection, findComponentInSection, formatBlockName, generateBlockId, generateHandle, generateId, generatePageId, generateSectionId, generateThemeId, getActiveBlocks, getActiveComponents, getBlockPath, getComponentPath, getComponentValues, getComponentsByType, getElementLabel, getFirstComponentByType, getSectionValues, getSelectionColor, groupBySlot, hasComponentType, hasEnabledItems, removeNestedBlock, sortBlocks, sortComponents, toComponentInstance, updateNestedBlock, updateNestedComponent, validateComponent, validateContent, validateSection, validateSettings, validateStyle } from './chunk-NHOIGGYU.mjs';
|
|
3
|
+
export { cn } from './chunk-O3XR7TW3.mjs';
|
|
4
|
+
import './chunk-F5TFNWFJ.mjs';
|
|
5
|
+
import './chunk-YOSPWY5K.mjs';
|
|
6
|
+
//# sourceMappingURL=utils.mjs.map
|
|
7
|
+
//# sourceMappingURL=utils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"utils.mjs"}
|
package/dist/wrappers.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var chunk2NMEKWO5_js = require('./chunk-2NMEKWO5.js');
|
|
5
|
+
var NextImage = require('next/image');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
var NextLink = require('next/link');
|
|
8
|
+
|
|
9
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
|
|
11
|
+
var NextImage__default = /*#__PURE__*/_interopDefault(NextImage);
|
|
12
|
+
var NextLink__default = /*#__PURE__*/_interopDefault(NextLink);
|
|
13
|
+
|
|
14
|
+
function Image({
|
|
15
|
+
src,
|
|
16
|
+
alt,
|
|
17
|
+
width,
|
|
18
|
+
height,
|
|
19
|
+
fill,
|
|
20
|
+
priority,
|
|
21
|
+
className,
|
|
22
|
+
sizes,
|
|
23
|
+
quality = 75,
|
|
24
|
+
loading,
|
|
25
|
+
objectFit,
|
|
26
|
+
objectPosition,
|
|
27
|
+
onClick
|
|
28
|
+
}) {
|
|
29
|
+
if (fill) {
|
|
30
|
+
const fillProps = chunk2NMEKWO5_js.__spreadValues(chunk2NMEKWO5_js.__spreadValues({
|
|
31
|
+
src,
|
|
32
|
+
alt,
|
|
33
|
+
fill: true,
|
|
34
|
+
className,
|
|
35
|
+
quality,
|
|
36
|
+
priority,
|
|
37
|
+
loading,
|
|
38
|
+
onClick
|
|
39
|
+
}, sizes && { sizes }), objectFit || objectPosition ? {
|
|
40
|
+
style: chunk2NMEKWO5_js.__spreadValues(chunk2NMEKWO5_js.__spreadValues({}, objectFit ? { objectFit } : {}), objectPosition ? { objectPosition } : {})
|
|
41
|
+
} : {});
|
|
42
|
+
return /* @__PURE__ */ jsxRuntime.jsx(NextImage__default.default, chunk2NMEKWO5_js.__spreadValues({}, fillProps));
|
|
43
|
+
} else if (width && height) {
|
|
44
|
+
const dimensionProps = {
|
|
45
|
+
src,
|
|
46
|
+
alt,
|
|
47
|
+
width,
|
|
48
|
+
height,
|
|
49
|
+
className,
|
|
50
|
+
quality,
|
|
51
|
+
priority,
|
|
52
|
+
loading,
|
|
53
|
+
onClick
|
|
54
|
+
};
|
|
55
|
+
return /* @__PURE__ */ jsxRuntime.jsx(NextImage__default.default, chunk2NMEKWO5_js.__spreadValues({}, dimensionProps));
|
|
56
|
+
} else {
|
|
57
|
+
throw new Error("Image: Either fill or width+height must be provided");
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function Link({
|
|
61
|
+
href,
|
|
62
|
+
children,
|
|
63
|
+
className,
|
|
64
|
+
target,
|
|
65
|
+
rel,
|
|
66
|
+
prefetch = true,
|
|
67
|
+
replace,
|
|
68
|
+
scroll = true,
|
|
69
|
+
onClick
|
|
70
|
+
}) {
|
|
71
|
+
const isExternal = href.startsWith("http") || href.startsWith("//");
|
|
72
|
+
if (isExternal) {
|
|
73
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
74
|
+
"a",
|
|
75
|
+
{
|
|
76
|
+
href,
|
|
77
|
+
className,
|
|
78
|
+
target: target || "_blank",
|
|
79
|
+
rel: rel || "noopener noreferrer",
|
|
80
|
+
onClick,
|
|
81
|
+
children
|
|
82
|
+
}
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
86
|
+
NextLink__default.default,
|
|
87
|
+
{
|
|
88
|
+
href,
|
|
89
|
+
className,
|
|
90
|
+
prefetch,
|
|
91
|
+
replace,
|
|
92
|
+
scroll,
|
|
93
|
+
onClick,
|
|
94
|
+
target,
|
|
95
|
+
rel,
|
|
96
|
+
children
|
|
97
|
+
}
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
exports.Image = Image;
|
|
102
|
+
exports.Link = Link;
|
|
103
|
+
//# sourceMappingURL=wrappers.js.map
|
|
104
|
+
//# sourceMappingURL=wrappers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/wrappers/image/index.tsx","../src/wrappers/link/index.tsx"],"names":["__spreadValues","jsx","NextImage","NextLink"],"mappings":";;;;;;;;;;;;AAuEO,SAAS,KAAA,CAAM;AAAA,EACpB,GAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA,GAAU,EAAA;AAAA,EACV,OAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAAe;AAEb,EAAA,IAAI,IAAA,EAAM;AAER,IAAA,MAAM,SAAA,GAA4BA,+BAAA,CAAAA,+BAAA,CAAA;AAAA,MAChC,GAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA,EAAM,IAAA;AAAA,MACN,SAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KAAA,EACI,KAAA,IAAS,EAAE,KAAA,EAAM,CAAA,EACjB,aAAa,cAAA,GACb;AAAA,MACE,KAAA,EAAOA,+BAAA,CAAAA,+BAAA,CAAA,EAAA,EACD,SAAA,GAAY,EAAE,SAAA,EAAU,GAAI,EAAC,CAAA,EAC7B,cAAA,GAAiB,EAAE,cAAA,EAAe,GAAI,EAAC;AAAA,QAG/C,EAAC,CAAA;AAEP,IAAA,uBAAOC,cAAA,CAACC,gEAAc,SAAA,CAAW,CAAA;AAAA,EACnC,CAAA,MAAA,IAAW,SAAS,MAAA,EAAQ;AAE1B,IAAA,MAAM,cAAA,GAAiC;AAAA,MACrC,GAAA;AAAA,MACA,GAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,uBAAOD,cAAA,CAACC,gEAAc,cAAA,CAAgB,CAAA;AAAA,EACxC,CAAA,MAAO;AACL,IAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAAA,EACvE;AACF;ACxEO,SAAS,IAAA,CAAK;AAAA,EACnB,IAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,OAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT;AACF,CAAA,EAAc;AAEZ,EAAA,MAAM,aAAa,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,IAAK,IAAA,CAAK,WAAW,IAAI,CAAA;AAElE,EAAA,IAAI,UAAA,EAAY;AAEd,IAAA,uBACED,cAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,SAAA;AAAA,QACA,QAAQ,MAAA,IAAU,QAAA;AAAA,QAClB,KAAK,GAAA,IAAO,qBAAA;AAAA,QACZ,OAAA;AAAA,QAEC;AAAA;AAAA,KACH;AAAA,EAEJ;AAGA,EAAA,uBACEA,cAAAA;AAAA,IAACE,yBAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ","file":"wrappers.js","sourcesContent":["/**\n * Framework-agnostic Image wrapper component\n *\n * Wraps Next.js Image to provide a stable API for theme developers\n * that doesn't directly couple themes to Next.js.\n *\n * @public\n * @example\n * ```tsx\n * import { Image } from '@duongthiu/onex-core/components';\n *\n * // With explicit dimensions\n * <Image\n * src=\"/hero.jpg\"\n * alt=\"Hero image\"\n * width={1200}\n * height={600}\n * />\n *\n * // With fill mode\n * <Image\n * src=\"/banner.jpg\"\n * alt=\"Banner\"\n * fill\n * sizes=\"100vw\"\n * />\n * ```\n */\n\n\"use client\";\n\nimport NextImage from \"next/image\";\nimport type { ImageProps as NextImageProps } from \"next/image\";\n\n/**\n * Image component props\n * Subset of Next.js Image props that work across frameworks\n */\nexport interface ImageProps {\n /** Image source URL or path */\n src: string;\n /** Alt text for accessibility */\n alt: string;\n /** Width in pixels (required unless fill=true) */\n width?: number;\n /** Height in pixels (required unless fill=true) */\n height?: number;\n /** Fill parent container */\n fill?: boolean;\n /** Load image with high priority (above-the-fold) */\n priority?: boolean;\n /** CSS class name */\n className?: string;\n /** Responsive sizes attribute */\n sizes?: string;\n /** Image quality (1-100) */\n quality?: number;\n /** Loading strategy */\n loading?: \"lazy\" | \"eager\";\n /** Object fit */\n objectFit?: \"contain\" | \"cover\" | \"fill\" | \"none\" | \"scale-down\";\n /** Object position */\n objectPosition?: string;\n /** onClick handler */\n onClick?: () => void;\n}\n\n/**\n * Image component wrapping Next.js Image\n * Provides framework-agnostic API for theme developers\n */\nexport function Image({\n src,\n alt,\n width,\n height,\n fill,\n priority,\n className,\n sizes,\n quality = 75,\n loading,\n objectFit,\n objectPosition,\n onClick,\n}: ImageProps) {\n // Build Next.js props based on fill vs dimensions\n if (fill) {\n // Fill mode\n const fillProps: NextImageProps = {\n src,\n alt,\n fill: true,\n className,\n quality,\n priority,\n loading,\n onClick,\n ...(sizes && { sizes }),\n ...(objectFit || objectPosition\n ? {\n style: {\n ...(objectFit ? { objectFit } : {}),\n ...(objectPosition ? { objectPosition } : {}),\n },\n }\n : {}),\n };\n return <NextImage {...fillProps} />;\n } else if (width && height) {\n // Explicit dimensions mode\n const dimensionProps: NextImageProps = {\n src,\n alt,\n width,\n height,\n className,\n quality,\n priority,\n loading,\n onClick,\n };\n return <NextImage {...dimensionProps} />;\n } else {\n throw new Error(\"Image: Either fill or width+height must be provided\");\n }\n}\n\n// Re-export Next.js types that are framework-agnostic\nexport type { StaticImageData } from \"next/image\";\n","/**\n * Framework-agnostic Link wrapper component\n *\n * Wraps Next.js Link to provide a stable API for theme developers\n * that doesn't directly couple themes to Next.js.\n *\n * @public\n * @example\n * ```tsx\n * import { Link } from '@duongthiu/onex-core/components';\n *\n * // Internal link\n * <Link href=\"/about\">About Us</Link>\n *\n * // External link\n * <Link href=\"https://example.com\" target=\"_blank\">\n * External Site\n * </Link>\n * ```\n */\n\n\"use client\";\n\nimport NextLink from \"next/link\";\n\n/**\n * Link component props\n * Subset of Next.js Link props that work across frameworks\n */\nexport interface LinkProps {\n /** Target URL or path */\n href: string;\n /** Link children (text or elements) */\n children: React.ReactNode;\n /** CSS class name */\n className?: string;\n /** Target attribute */\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\";\n /** Rel attribute */\n rel?: string;\n /** Prefetch the page in the background */\n prefetch?: boolean;\n /** Replace the current history state instead of adding a new URL */\n replace?: boolean;\n /** Scroll to the top of the page after navigation */\n scroll?: boolean;\n /** onClick handler */\n onClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n}\n\n/**\n * Link component wrapping Next.js Link\n * Provides framework-agnostic API for theme developers\n */\nexport function Link({\n href,\n children,\n className,\n target,\n rel,\n prefetch = true,\n replace,\n scroll = true,\n onClick,\n}: LinkProps) {\n // Handle external links\n const isExternal = href.startsWith(\"http\") || href.startsWith(\"//\");\n\n if (isExternal) {\n // External links use regular <a> tag\n return (\n <a\n href={href}\n className={className}\n target={target || \"_blank\"}\n rel={rel || \"noopener noreferrer\"}\n onClick={onClick}\n >\n {children}\n </a>\n );\n }\n\n // Internal links use Next.js Link\n return (\n <NextLink\n href={href}\n className={className}\n prefetch={prefetch}\n replace={replace}\n scroll={scroll}\n onClick={onClick}\n target={target}\n rel={rel}\n >\n {children}\n </NextLink>\n );\n}\n"]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { __spreadValues } from './chunk-YOSPWY5K.mjs';
|
|
3
|
+
import NextImage from 'next/image';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
import NextLink from 'next/link';
|
|
6
|
+
|
|
7
|
+
function Image({
|
|
8
|
+
src,
|
|
9
|
+
alt,
|
|
10
|
+
width,
|
|
11
|
+
height,
|
|
12
|
+
fill,
|
|
13
|
+
priority,
|
|
14
|
+
className,
|
|
15
|
+
sizes,
|
|
16
|
+
quality = 75,
|
|
17
|
+
loading,
|
|
18
|
+
objectFit,
|
|
19
|
+
objectPosition,
|
|
20
|
+
onClick
|
|
21
|
+
}) {
|
|
22
|
+
if (fill) {
|
|
23
|
+
const fillProps = __spreadValues(__spreadValues({
|
|
24
|
+
src,
|
|
25
|
+
alt,
|
|
26
|
+
fill: true,
|
|
27
|
+
className,
|
|
28
|
+
quality,
|
|
29
|
+
priority,
|
|
30
|
+
loading,
|
|
31
|
+
onClick
|
|
32
|
+
}, sizes && { sizes }), objectFit || objectPosition ? {
|
|
33
|
+
style: __spreadValues(__spreadValues({}, objectFit ? { objectFit } : {}), objectPosition ? { objectPosition } : {})
|
|
34
|
+
} : {});
|
|
35
|
+
return /* @__PURE__ */ jsx(NextImage, __spreadValues({}, fillProps));
|
|
36
|
+
} else if (width && height) {
|
|
37
|
+
const dimensionProps = {
|
|
38
|
+
src,
|
|
39
|
+
alt,
|
|
40
|
+
width,
|
|
41
|
+
height,
|
|
42
|
+
className,
|
|
43
|
+
quality,
|
|
44
|
+
priority,
|
|
45
|
+
loading,
|
|
46
|
+
onClick
|
|
47
|
+
};
|
|
48
|
+
return /* @__PURE__ */ jsx(NextImage, __spreadValues({}, dimensionProps));
|
|
49
|
+
} else {
|
|
50
|
+
throw new Error("Image: Either fill or width+height must be provided");
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function Link({
|
|
54
|
+
href,
|
|
55
|
+
children,
|
|
56
|
+
className,
|
|
57
|
+
target,
|
|
58
|
+
rel,
|
|
59
|
+
prefetch = true,
|
|
60
|
+
replace,
|
|
61
|
+
scroll = true,
|
|
62
|
+
onClick
|
|
63
|
+
}) {
|
|
64
|
+
const isExternal = href.startsWith("http") || href.startsWith("//");
|
|
65
|
+
if (isExternal) {
|
|
66
|
+
return /* @__PURE__ */ jsx(
|
|
67
|
+
"a",
|
|
68
|
+
{
|
|
69
|
+
href,
|
|
70
|
+
className,
|
|
71
|
+
target: target || "_blank",
|
|
72
|
+
rel: rel || "noopener noreferrer",
|
|
73
|
+
onClick,
|
|
74
|
+
children
|
|
75
|
+
}
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
return /* @__PURE__ */ jsx(
|
|
79
|
+
NextLink,
|
|
80
|
+
{
|
|
81
|
+
href,
|
|
82
|
+
className,
|
|
83
|
+
prefetch,
|
|
84
|
+
replace,
|
|
85
|
+
scroll,
|
|
86
|
+
onClick,
|
|
87
|
+
target,
|
|
88
|
+
rel,
|
|
89
|
+
children
|
|
90
|
+
}
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export { Image, Link };
|
|
95
|
+
//# sourceMappingURL=wrappers.mjs.map
|
|
96
|
+
//# sourceMappingURL=wrappers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/wrappers/image/index.tsx","../src/wrappers/link/index.tsx"],"names":["jsx"],"mappings":";;;;;AAuEO,SAAS,KAAA,CAAM;AAAA,EACpB,GAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA,GAAU,EAAA;AAAA,EACV,OAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAAe;AAEb,EAAA,IAAI,IAAA,EAAM;AAER,IAAA,MAAM,SAAA,GAA4B,cAAA,CAAA,cAAA,CAAA;AAAA,MAChC,GAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA,EAAM,IAAA;AAAA,MACN,SAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KAAA,EACI,KAAA,IAAS,EAAE,KAAA,EAAM,CAAA,EACjB,aAAa,cAAA,GACb;AAAA,MACE,KAAA,EAAO,cAAA,CAAA,cAAA,CAAA,EAAA,EACD,SAAA,GAAY,EAAE,SAAA,EAAU,GAAI,EAAC,CAAA,EAC7B,cAAA,GAAiB,EAAE,cAAA,EAAe,GAAI,EAAC;AAAA,QAG/C,EAAC,CAAA;AAEP,IAAA,uBAAO,GAAA,CAAC,8BAAc,SAAA,CAAW,CAAA;AAAA,EACnC,CAAA,MAAA,IAAW,SAAS,MAAA,EAAQ;AAE1B,IAAA,MAAM,cAAA,GAAiC;AAAA,MACrC,GAAA;AAAA,MACA,GAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,uBAAO,GAAA,CAAC,8BAAc,cAAA,CAAgB,CAAA;AAAA,EACxC,CAAA,MAAO;AACL,IAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAAA,EACvE;AACF;ACxEO,SAAS,IAAA,CAAK;AAAA,EACnB,IAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,OAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT;AACF,CAAA,EAAc;AAEZ,EAAA,MAAM,aAAa,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,IAAK,IAAA,CAAK,WAAW,IAAI,CAAA;AAElE,EAAA,IAAI,UAAA,EAAY;AAEd,IAAA,uBACEA,GAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,SAAA;AAAA,QACA,QAAQ,MAAA,IAAU,QAAA;AAAA,QAClB,KAAK,GAAA,IAAO,qBAAA;AAAA,QACZ,OAAA;AAAA,QAEC;AAAA;AAAA,KACH;AAAA,EAEJ;AAGA,EAAA,uBACEA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ","file":"wrappers.mjs","sourcesContent":["/**\n * Framework-agnostic Image wrapper component\n *\n * Wraps Next.js Image to provide a stable API for theme developers\n * that doesn't directly couple themes to Next.js.\n *\n * @public\n * @example\n * ```tsx\n * import { Image } from '@duongthiu/onex-core/components';\n *\n * // With explicit dimensions\n * <Image\n * src=\"/hero.jpg\"\n * alt=\"Hero image\"\n * width={1200}\n * height={600}\n * />\n *\n * // With fill mode\n * <Image\n * src=\"/banner.jpg\"\n * alt=\"Banner\"\n * fill\n * sizes=\"100vw\"\n * />\n * ```\n */\n\n\"use client\";\n\nimport NextImage from \"next/image\";\nimport type { ImageProps as NextImageProps } from \"next/image\";\n\n/**\n * Image component props\n * Subset of Next.js Image props that work across frameworks\n */\nexport interface ImageProps {\n /** Image source URL or path */\n src: string;\n /** Alt text for accessibility */\n alt: string;\n /** Width in pixels (required unless fill=true) */\n width?: number;\n /** Height in pixels (required unless fill=true) */\n height?: number;\n /** Fill parent container */\n fill?: boolean;\n /** Load image with high priority (above-the-fold) */\n priority?: boolean;\n /** CSS class name */\n className?: string;\n /** Responsive sizes attribute */\n sizes?: string;\n /** Image quality (1-100) */\n quality?: number;\n /** Loading strategy */\n loading?: \"lazy\" | \"eager\";\n /** Object fit */\n objectFit?: \"contain\" | \"cover\" | \"fill\" | \"none\" | \"scale-down\";\n /** Object position */\n objectPosition?: string;\n /** onClick handler */\n onClick?: () => void;\n}\n\n/**\n * Image component wrapping Next.js Image\n * Provides framework-agnostic API for theme developers\n */\nexport function Image({\n src,\n alt,\n width,\n height,\n fill,\n priority,\n className,\n sizes,\n quality = 75,\n loading,\n objectFit,\n objectPosition,\n onClick,\n}: ImageProps) {\n // Build Next.js props based on fill vs dimensions\n if (fill) {\n // Fill mode\n const fillProps: NextImageProps = {\n src,\n alt,\n fill: true,\n className,\n quality,\n priority,\n loading,\n onClick,\n ...(sizes && { sizes }),\n ...(objectFit || objectPosition\n ? {\n style: {\n ...(objectFit ? { objectFit } : {}),\n ...(objectPosition ? { objectPosition } : {}),\n },\n }\n : {}),\n };\n return <NextImage {...fillProps} />;\n } else if (width && height) {\n // Explicit dimensions mode\n const dimensionProps: NextImageProps = {\n src,\n alt,\n width,\n height,\n className,\n quality,\n priority,\n loading,\n onClick,\n };\n return <NextImage {...dimensionProps} />;\n } else {\n throw new Error(\"Image: Either fill or width+height must be provided\");\n }\n}\n\n// Re-export Next.js types that are framework-agnostic\nexport type { StaticImageData } from \"next/image\";\n","/**\n * Framework-agnostic Link wrapper component\n *\n * Wraps Next.js Link to provide a stable API for theme developers\n * that doesn't directly couple themes to Next.js.\n *\n * @public\n * @example\n * ```tsx\n * import { Link } from '@duongthiu/onex-core/components';\n *\n * // Internal link\n * <Link href=\"/about\">About Us</Link>\n *\n * // External link\n * <Link href=\"https://example.com\" target=\"_blank\">\n * External Site\n * </Link>\n * ```\n */\n\n\"use client\";\n\nimport NextLink from \"next/link\";\n\n/**\n * Link component props\n * Subset of Next.js Link props that work across frameworks\n */\nexport interface LinkProps {\n /** Target URL or path */\n href: string;\n /** Link children (text or elements) */\n children: React.ReactNode;\n /** CSS class name */\n className?: string;\n /** Target attribute */\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\";\n /** Rel attribute */\n rel?: string;\n /** Prefetch the page in the background */\n prefetch?: boolean;\n /** Replace the current history state instead of adding a new URL */\n replace?: boolean;\n /** Scroll to the top of the page after navigation */\n scroll?: boolean;\n /** onClick handler */\n onClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n}\n\n/**\n * Link component wrapping Next.js Link\n * Provides framework-agnostic API for theme developers\n */\nexport function Link({\n href,\n children,\n className,\n target,\n rel,\n prefetch = true,\n replace,\n scroll = true,\n onClick,\n}: LinkProps) {\n // Handle external links\n const isExternal = href.startsWith(\"http\") || href.startsWith(\"//\");\n\n if (isExternal) {\n // External links use regular <a> tag\n return (\n <a\n href={href}\n className={className}\n target={target || \"_blank\"}\n rel={rel || \"noopener noreferrer\"}\n onClick={onClick}\n >\n {children}\n </a>\n );\n }\n\n // Internal links use Next.js Link\n return (\n <NextLink\n href={href}\n className={className}\n prefetch={prefetch}\n replace={replace}\n scroll={scroll}\n onClick={onClick}\n target={target}\n rel={rel}\n >\n {children}\n </NextLink>\n );\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@duongthiu/onex-core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "OneX Core - Theme rendering system and registry for building multi-tenant websites with visual editing",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -21,6 +21,101 @@
|
|
|
21
21
|
"import": "./dist/server.mjs",
|
|
22
22
|
"require": "./dist/server.js"
|
|
23
23
|
},
|
|
24
|
+
"./internal": {
|
|
25
|
+
"types": "./dist/internal.d.ts",
|
|
26
|
+
"import": "./dist/internal.mjs",
|
|
27
|
+
"require": "./dist/internal.js"
|
|
28
|
+
},
|
|
29
|
+
"./components": {
|
|
30
|
+
"types": "./dist/components.d.ts",
|
|
31
|
+
"import": "./dist/components.mjs",
|
|
32
|
+
"require": "./dist/components.js"
|
|
33
|
+
},
|
|
34
|
+
"./wrappers": {
|
|
35
|
+
"types": "./dist/wrappers.d.ts",
|
|
36
|
+
"import": "./dist/wrappers.mjs",
|
|
37
|
+
"require": "./dist/wrappers.js"
|
|
38
|
+
},
|
|
39
|
+
"./motion": {
|
|
40
|
+
"types": "./dist/motion.d.ts",
|
|
41
|
+
"import": "./dist/motion.mjs",
|
|
42
|
+
"require": "./dist/motion.js"
|
|
43
|
+
},
|
|
44
|
+
"./icons": {
|
|
45
|
+
"types": "./dist/icons.d.ts",
|
|
46
|
+
"import": "./dist/icons.mjs",
|
|
47
|
+
"require": "./dist/icons.js"
|
|
48
|
+
},
|
|
49
|
+
"./types": {
|
|
50
|
+
"types": "./dist/types.d.ts",
|
|
51
|
+
"import": "./dist/types.mjs",
|
|
52
|
+
"require": "./dist/types.js"
|
|
53
|
+
},
|
|
54
|
+
"./utils": {
|
|
55
|
+
"types": "./dist/utils.d.ts",
|
|
56
|
+
"import": "./dist/utils.mjs",
|
|
57
|
+
"require": "./dist/utils.js"
|
|
58
|
+
},
|
|
59
|
+
"./renderers": {
|
|
60
|
+
"types": "./dist/renderers.d.ts",
|
|
61
|
+
"import": "./dist/renderers.mjs",
|
|
62
|
+
"require": "./dist/renderers.js"
|
|
63
|
+
},
|
|
64
|
+
"./registry": {
|
|
65
|
+
"types": "./dist/registry.d.ts",
|
|
66
|
+
"import": "./dist/registry.mjs",
|
|
67
|
+
"require": "./dist/registry.js"
|
|
68
|
+
},
|
|
69
|
+
"./contexts": {
|
|
70
|
+
"types": "./dist/contexts.d.ts",
|
|
71
|
+
"import": "./dist/contexts.mjs",
|
|
72
|
+
"require": "./dist/contexts.js"
|
|
73
|
+
},
|
|
74
|
+
"./config": {
|
|
75
|
+
"types": "./dist/config.d.ts",
|
|
76
|
+
"import": "./dist/config.mjs",
|
|
77
|
+
"require": "./dist/config.js"
|
|
78
|
+
},
|
|
79
|
+
"./api": {
|
|
80
|
+
"types": "./dist/api.d.ts",
|
|
81
|
+
"import": "./dist/api.mjs",
|
|
82
|
+
"require": "./dist/api.js"
|
|
83
|
+
},
|
|
84
|
+
"./auth": {
|
|
85
|
+
"types": "./dist/auth.d.ts",
|
|
86
|
+
"import": "./dist/auth.mjs",
|
|
87
|
+
"require": "./dist/auth.js"
|
|
88
|
+
},
|
|
89
|
+
"./cart": {
|
|
90
|
+
"types": "./dist/cart.d.ts",
|
|
91
|
+
"import": "./dist/cart.mjs",
|
|
92
|
+
"require": "./dist/cart.js"
|
|
93
|
+
},
|
|
94
|
+
"./products": {
|
|
95
|
+
"types": "./dist/products.d.ts",
|
|
96
|
+
"import": "./dist/products.mjs",
|
|
97
|
+
"require": "./dist/products.js"
|
|
98
|
+
},
|
|
99
|
+
"./orders": {
|
|
100
|
+
"types": "./dist/orders.d.ts",
|
|
101
|
+
"import": "./dist/orders.mjs",
|
|
102
|
+
"require": "./dist/orders.js"
|
|
103
|
+
},
|
|
104
|
+
"./finance": {
|
|
105
|
+
"types": "./dist/finance.d.ts",
|
|
106
|
+
"import": "./dist/finance.mjs",
|
|
107
|
+
"require": "./dist/finance.js"
|
|
108
|
+
},
|
|
109
|
+
"./contact": {
|
|
110
|
+
"types": "./dist/contact.d.ts",
|
|
111
|
+
"import": "./dist/contact.mjs",
|
|
112
|
+
"require": "./dist/contact.js"
|
|
113
|
+
},
|
|
114
|
+
"./blog": {
|
|
115
|
+
"types": "./dist/blog.d.ts",
|
|
116
|
+
"import": "./dist/blog.mjs",
|
|
117
|
+
"require": "./dist/blog.js"
|
|
118
|
+
},
|
|
24
119
|
"./package.json": "./package.json"
|
|
25
120
|
},
|
|
26
121
|
"files": [
|
|
@@ -75,12 +170,16 @@
|
|
|
75
170
|
},
|
|
76
171
|
"sideEffects": false,
|
|
77
172
|
"peerDependencies": {
|
|
78
|
-
"
|
|
79
|
-
"react
|
|
173
|
+
"framer-motion": ">=11.0.0",
|
|
174
|
+
"lucide-react": ">=0.5.0",
|
|
80
175
|
"next": ">=14.0.0",
|
|
81
|
-
"
|
|
176
|
+
"react": "^19.2.1",
|
|
177
|
+
"react-dom": "^19.2.1"
|
|
82
178
|
},
|
|
83
179
|
"peerDependenciesMeta": {
|
|
180
|
+
"framer-motion": {
|
|
181
|
+
"optional": true
|
|
182
|
+
},
|
|
84
183
|
"next": {
|
|
85
184
|
"optional": true
|
|
86
185
|
},
|
|
@@ -89,18 +188,22 @@
|
|
|
89
188
|
}
|
|
90
189
|
},
|
|
91
190
|
"dependencies": {
|
|
92
|
-
"
|
|
93
|
-
"tailwind-merge": "^3.4.0",
|
|
94
|
-
"zod": "^4.1.13",
|
|
95
|
-
"class-variance-authority": "^0.7.1",
|
|
191
|
+
"@hookform/resolvers": "^5.2.2",
|
|
96
192
|
"@radix-ui/react-accordion": "^1.2.12",
|
|
97
193
|
"@radix-ui/react-checkbox": "^1.3.3",
|
|
98
194
|
"@radix-ui/react-label": "^2.1.8",
|
|
99
195
|
"@radix-ui/react-progress": "^1.1.8",
|
|
100
196
|
"@radix-ui/react-select": "^2.2.6",
|
|
101
197
|
"@radix-ui/react-separator": "^1.1.8",
|
|
198
|
+
"@radix-ui/react-slot": "^1.2.4",
|
|
102
199
|
"@radix-ui/react-tabs": "^1.1.13",
|
|
103
|
-
"
|
|
200
|
+
"axios": "^1.13.2",
|
|
201
|
+
"class-variance-authority": "^0.7.1",
|
|
202
|
+
"clsx": "^2.1.1",
|
|
203
|
+
"react-hook-form": "^7.68.0",
|
|
204
|
+
"tailwind-merge": "^3.4.0",
|
|
205
|
+
"zod": "^4.1.13",
|
|
206
|
+
"zustand": "^5.0.10"
|
|
104
207
|
},
|
|
105
208
|
"devDependencies": {
|
|
106
209
|
"@types/react": "^19",
|