@gardenerim/react 1.0.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/CHANGELOG.md +7 -0
- package/LICENSE +21 -0
- package/README.md +50 -0
- package/dist/adapter-target.d.ts +5 -0
- package/dist/adapter-target.d.ts.map +1 -0
- package/dist/adapter-target.js +7 -0
- package/dist/adapter-target.js.map +1 -0
- package/dist/adapters.d.ts +5 -0
- package/dist/adapters.d.ts.map +1 -0
- package/dist/adapters.js +3 -0
- package/dist/adapters.js.map +1 -0
- package/dist/ai.css +1 -0
- package/dist/catalog.json +9022 -0
- package/dist/component-css/ai-compositions.css +1 -0
- package/dist/component-css/ai-extended.css +1 -0
- package/dist/component-css/ai.css +1 -0
- package/dist/component-css/auth-compositions.css +1 -0
- package/dist/component-css/basic.css +1 -0
- package/dist/component-css/catalog.css +1 -0
- package/dist/component-css/commerce-compositions.css +1 -0
- package/dist/component-css/content-compositions.css +1 -0
- package/dist/component-css/data-compositions.css +1 -0
- package/dist/component-css/data.css +1 -0
- package/dist/component-css/desktop-compositions.css +1 -0
- package/dist/component-css/desktop.css +1 -0
- package/dist/component-css/extended.css +1 -0
- package/dist/component-css/feedback.css +1 -0
- package/dist/component-css/form-compositions.css +1 -0
- package/dist/component-css/forms.css +1 -0
- package/dist/component-css/grid.css +1 -0
- package/dist/component-css/help.css +1 -0
- package/dist/component-css/layouts.css +1 -0
- package/dist/component-css/mobile-compositions.css +1 -0
- package/dist/component-css/navigation-compositions.css +1 -0
- package/dist/component-css/navigation.css +1 -0
- package/dist/component-css/page.css +1 -0
- package/dist/component-css/primitives.css +1 -0
- package/dist/component-css/recipes.css +1 -0
- package/dist/component-css/regions.css +1 -0
- package/dist/component-css/selection-compositions.css +1 -0
- package/dist/component-css/solution-compositions.css +1 -0
- package/dist/component.d.ts +16 -0
- package/dist/component.d.ts.map +1 -0
- package/dist/component.js +105 -0
- package/dist/component.js.map +1 -0
- package/dist/components.css +1 -0
- package/dist/core.css +1 -0
- package/dist/electron.d.ts +10 -0
- package/dist/electron.d.ts.map +1 -0
- package/dist/electron.js +23 -0
- package/dist/electron.js.map +1 -0
- package/dist/gardener-react.min.js +2 -0
- package/dist/gardener-react.min.js.map +7 -0
- package/dist/gardener-react.performance.json +12 -0
- package/dist/generated/catalog.d.ts +6 -0
- package/dist/generated/catalog.d.ts.map +1 -0
- package/dist/generated/catalog.js +11217 -0
- package/dist/generated/catalog.js.map +1 -0
- package/dist/generated/components.d.ts +511 -0
- package/dist/generated/components.d.ts.map +1 -0
- package/dist/generated/components.js +1017 -0
- package/dist/generated/components.js.map +1 -0
- package/dist/hooks.d.ts +23 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +92 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/platform/desktop.css +1 -0
- package/dist/platform/electron.css +1 -0
- package/dist/platform/mobile.css +1 -0
- package/dist/platform/tauri.css +1 -0
- package/dist/platform/web.css +1 -0
- package/dist/provider.d.ts +14 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +29 -0
- package/dist/provider.js.map +1 -0
- package/dist/style.css +1 -0
- package/dist/tauri.d.ts +10 -0
- package/dist/tauri.d.ts.map +1 -0
- package/dist/tauri.js +23 -0
- package/dist/tauri.js.map +1 -0
- package/dist/themes.css +1 -0
- package/dist/types.d.ts +65 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utilities.css +1 -0
- package/docs/API.md +80 -0
- package/docs/components.md +512 -0
- package/metadata/compatibility.json +1730 -0
- package/metadata/compatibility.schema.json +33 -0
- package/metadata/performance.schema.json +18 -0
- package/metadata/public-api.json +1152 -0
- package/metadata/public-api.schema.json +26 -0
- package/package.json +99 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC/G,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAChI,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,eAAe,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC3I,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvI,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAClG,cAAc,2BAA2B,CAAC;AAC1C,mBAAmB,YAAY,CAAC;AAChC,YAAY,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { Gardener, destroy, emit, getInstance, init, observe, register, toast } from "@gardenerim/css/runtime";
|
|
2
|
+
export { behaviorAttributes, configAttributes, createGardenerComponent, GardenerComponent, GardenerPart } from "./component.js";
|
|
3
|
+
export { GardenerProvider, GardenerThemeContext, themeAttributes, themeAxes, useGardenerThemeContext } from "./provider.js";
|
|
4
|
+
export { resolveGardenerTarget, useGardener, useGardenerBehavior, useGardenerEvent, useGardenerTheme, useGardenerToast } from "./hooks.js";
|
|
5
|
+
export { bindElectronWindowControls, bindTauriWindowControls, useElectronWindowControls, useTauriWindowControls } from "./adapters.js";
|
|
6
|
+
export { componentByExportName, componentByName, componentCatalog } from "./generated/catalog.js";
|
|
7
|
+
export * from "./generated/components.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC/G,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAChI,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,eAAe,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC3I,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvI,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAClG,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "@gardenerim/css/platform/desktop.css";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "@gardenerim/css/platform/electron.css";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "@gardenerim/css/platform/mobile.css";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "@gardenerim/css/platform/tauri.css";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "@gardenerim/css/platform/web.css";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ElementType, type HTMLAttributes, type ReactNode } from "react";
|
|
2
|
+
import type { GardenerThemeState } from "./types.js";
|
|
3
|
+
export declare const themeAxes: readonly ["theme", "mode", "neutral", "typography", "shape", "density", "elevation", "motion", "platform", "os"];
|
|
4
|
+
export declare const themeAttributes: (state: GardenerThemeState) => Record<string, string>;
|
|
5
|
+
export declare const GardenerThemeContext: import("react").Context<Readonly<GardenerThemeState>>;
|
|
6
|
+
export interface GardenerProviderProps extends GardenerThemeState, Omit<HTMLAttributes<HTMLElement>, keyof GardenerThemeState | "children"> {
|
|
7
|
+
as?: ElementType;
|
|
8
|
+
initialize?: boolean;
|
|
9
|
+
className?: string;
|
|
10
|
+
children?: ReactNode;
|
|
11
|
+
}
|
|
12
|
+
export declare const GardenerProvider: import("react").ForwardRefExoticComponent<GardenerProviderProps & import("react").RefAttributes<HTMLElement>>;
|
|
13
|
+
export declare const useGardenerThemeContext: () => Readonly<GardenerThemeState>;
|
|
14
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoF,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEhK,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,eAAO,MAAM,SAAS,YAAI,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAU,CAAC;AAE1I,eAAO,MAAM,eAAe,UAAW,kBAAkB,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAEhF,CAAC;AAEF,eAAO,MAAM,oBAAoB,uDAAkD,CAAC;AAEpF,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB,EAAE,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,kBAAkB,GAAG,UAAU,CAAC;IACzI,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,eAAO,MAAM,gBAAgB,+GAmB3B,CAAC;AAEH,eAAO,MAAM,uBAAuB,QAAO,QAAQ,CAAC,kBAAkB,CAAqC,CAAC"}
|
package/dist/provider.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { createContext, createElement, forwardRef, useContext, useEffect, useMemo, useRef } from "react";
|
|
2
|
+
import { destroy, init } from "@gardenerim/css/runtime";
|
|
3
|
+
export const themeAxes = ["theme", "mode", "neutral", "typography", "shape", "density", "elevation", "motion", "platform", "os"];
|
|
4
|
+
export const themeAttributes = (state) => Object.fromEntries(themeAxes.flatMap((axis) => state[axis] == null || state[axis] === "" ? [] : [[`data-g-${axis}`, String(state[axis])]]));
|
|
5
|
+
export const GardenerThemeContext = createContext({});
|
|
6
|
+
export const GardenerProvider = forwardRef(function GardenerProvider({ as: As = "div", initialize = true, className, children, theme, mode, neutral, typography, shape, density, elevation, motion, platform, os, ...nativeProps }, forwardedRef) {
|
|
7
|
+
const localRef = useRef(null);
|
|
8
|
+
const state = useMemo(() => Object.fromEntries(Object.entries({ theme, mode, neutral, typography, shape, density, elevation, motion, platform, os }).filter(([, value]) => value !== undefined)), [theme, mode, neutral, typography, shape, density, elevation, motion, platform, os]);
|
|
9
|
+
const assignRef = (element) => {
|
|
10
|
+
localRef.current = element;
|
|
11
|
+
if (typeof forwardedRef === "function")
|
|
12
|
+
forwardedRef(element);
|
|
13
|
+
else if (forwardedRef)
|
|
14
|
+
forwardedRef.current = element;
|
|
15
|
+
};
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
const element = localRef.current;
|
|
18
|
+
if (!element)
|
|
19
|
+
return;
|
|
20
|
+
if (initialize)
|
|
21
|
+
init(element);
|
|
22
|
+
else
|
|
23
|
+
destroy(element);
|
|
24
|
+
return () => destroy(element);
|
|
25
|
+
}, [initialize]);
|
|
26
|
+
return createElement(GardenerThemeContext.Provider, { value: state }, createElement(As, { ...themeAttributes(state), ...nativeProps, className, ref: assignRef }, children));
|
|
27
|
+
});
|
|
28
|
+
export const useGardenerThemeContext = () => useContext(GardenerThemeContext);
|
|
29
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"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"}
|
package/dist/style.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "@gardenerim/css";
|
package/dist/tauri.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type RefObject } from "react";
|
|
2
|
+
import { bindTauriWindowControls, type GardenerTauriBinding, type GardenerTauriBridge } from "@gardenerim/css/tauri";
|
|
3
|
+
import { type GardenerAdapterTarget } from "./adapter-target.js";
|
|
4
|
+
export declare const useTauriWindowControls: (root?: RefObject<GardenerAdapterTarget>, bridge?: GardenerTauriBridge | null) => {
|
|
5
|
+
readonly binding: GardenerTauriBinding | null;
|
|
6
|
+
readonly bind: () => GardenerTauriBinding | null;
|
|
7
|
+
};
|
|
8
|
+
export { bindTauriWindowControls };
|
|
9
|
+
export type { GardenerTauriBinding, GardenerTauriBridge };
|
|
10
|
+
//# sourceMappingURL=tauri.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tauri.d.ts","sourceRoot":"","sources":["../src/tauri.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACrH,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEnF,eAAO,MAAM,sBAAsB,UAAW,SAAS,CAAC,qBAAqB,CAAC,WAAW,mBAAmB,GAAG,IAAI;;;CAmBlH,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC;AACnC,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,CAAC"}
|
package/dist/tauri.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
|
+
import { bindTauriWindowControls } from "@gardenerim/css/tauri";
|
|
3
|
+
import { adapterRootValue } from "./adapter-target.js";
|
|
4
|
+
export const useTauriWindowControls = (root, bridge) => {
|
|
5
|
+
const rootRef = useRef(root);
|
|
6
|
+
const bridgeRef = useRef(bridge);
|
|
7
|
+
const [binding, setBinding] = useState(null);
|
|
8
|
+
const bindingRef = useRef(null);
|
|
9
|
+
rootRef.current = root;
|
|
10
|
+
bridgeRef.current = bridge;
|
|
11
|
+
const bind = useCallback(() => {
|
|
12
|
+
bindingRef.current?.destroy();
|
|
13
|
+
const target = adapterRootValue(rootRef.current);
|
|
14
|
+
const next = target ? bindTauriWindowControls(target, bridgeRef.current) : null;
|
|
15
|
+
bindingRef.current = next;
|
|
16
|
+
setBinding(next);
|
|
17
|
+
return next;
|
|
18
|
+
}, []);
|
|
19
|
+
useEffect(() => { bind(); return () => { bindingRef.current?.destroy(); bindingRef.current = null; }; }, [bind]);
|
|
20
|
+
return { binding, bind };
|
|
21
|
+
};
|
|
22
|
+
export { bindTauriWindowControls };
|
|
23
|
+
//# sourceMappingURL=tauri.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tauri.js","sourceRoot":"","sources":["../src/tauri.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAuD,MAAM,uBAAuB,CAAC;AACrH,OAAO,EAAE,gBAAgB,EAA8B,MAAM,qBAAqB,CAAC;AAEnF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,IAAuC,EAAE,MAAmC,EAAE,EAAE;IACrH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAA8B,IAAI,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,MAAM,CAA8B,IAAI,CAAC,CAAC;IAE7D,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IACvB,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;IAE3B,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChF,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,OAAO,GAAG,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACjH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAW,CAAC;AACpC,CAAC,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
|
package/dist/themes.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "@gardenerim/css/themes.css";
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { ComponentPropsWithoutRef, ElementType, ReactNode } from "react";
|
|
2
|
+
import type { GardenerBehaviorInstance as RuntimeBehaviorInstance, GardenerBehaviorName as RuntimeBehaviorName, GardenerEventName as RuntimeEventName } from "@gardenerim/css/runtime";
|
|
3
|
+
export type GardenerAs = ElementType;
|
|
4
|
+
export type GardenerBehaviorName = RuntimeBehaviorName;
|
|
5
|
+
export type GardenerEventName = RuntimeEventName;
|
|
6
|
+
export type GardenerBehaviorInstance = RuntimeBehaviorInstance;
|
|
7
|
+
export type GardenerPlatform = "web" | "mobile" | "desktop" | "tauri" | "electron";
|
|
8
|
+
export type GardenerComponentKind = "css" | "hybrid" | string;
|
|
9
|
+
export type GardenerConfigValue = string | number | boolean | null | undefined;
|
|
10
|
+
export type GardenerValueChange = (value: unknown, event: Event) => void;
|
|
11
|
+
export interface GardenerComponentDefinition {
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly exportName: string;
|
|
14
|
+
readonly category: string;
|
|
15
|
+
readonly type: GardenerComponentKind;
|
|
16
|
+
readonly selector: string;
|
|
17
|
+
readonly cssSelector?: string;
|
|
18
|
+
readonly className?: string;
|
|
19
|
+
readonly tag: keyof HTMLElementTagNameMap;
|
|
20
|
+
readonly variants: readonly string[];
|
|
21
|
+
readonly states: readonly string[];
|
|
22
|
+
readonly parts: readonly string[];
|
|
23
|
+
readonly behaviors: readonly string[];
|
|
24
|
+
readonly platforms: readonly string[];
|
|
25
|
+
}
|
|
26
|
+
export interface GardenerComponentHandle {
|
|
27
|
+
readonly element: Element | null;
|
|
28
|
+
getInstance(behavior?: string): GardenerBehaviorInstance | Record<string, GardenerBehaviorInstance> | null;
|
|
29
|
+
refresh(): void;
|
|
30
|
+
}
|
|
31
|
+
export interface GardenerOwnProps {
|
|
32
|
+
as?: GardenerAs;
|
|
33
|
+
variant?: string | readonly string[];
|
|
34
|
+
state?: string | readonly string[];
|
|
35
|
+
config?: Readonly<Record<string, GardenerConfigValue>>;
|
|
36
|
+
initialize?: boolean;
|
|
37
|
+
value?: unknown;
|
|
38
|
+
defaultValue?: unknown;
|
|
39
|
+
valueEvent?: string;
|
|
40
|
+
valueKey?: string;
|
|
41
|
+
onValueChange?: GardenerValueChange;
|
|
42
|
+
children?: ReactNode;
|
|
43
|
+
}
|
|
44
|
+
export type GardenerComponentProps<E extends ElementType = "div"> = GardenerOwnProps & Omit<ComponentPropsWithoutRef<E>, keyof GardenerOwnProps | "className"> & {
|
|
45
|
+
className?: string;
|
|
46
|
+
};
|
|
47
|
+
export type GardenerGeneratedComponent<TDefault extends ElementType = ElementType> = <E extends ElementType = TDefault>(props: GardenerComponentProps<E> & {
|
|
48
|
+
ref?: React.Ref<GardenerComponentHandle>;
|
|
49
|
+
}) => React.ReactElement | null;
|
|
50
|
+
export interface GardenerThemeState {
|
|
51
|
+
theme?: string;
|
|
52
|
+
mode?: string;
|
|
53
|
+
neutral?: string;
|
|
54
|
+
typography?: string;
|
|
55
|
+
shape?: string;
|
|
56
|
+
density?: string;
|
|
57
|
+
elevation?: string;
|
|
58
|
+
motion?: string;
|
|
59
|
+
platform?: string;
|
|
60
|
+
os?: string;
|
|
61
|
+
}
|
|
62
|
+
export type GardenerTargetValue = Element | Document | GardenerComponentHandle;
|
|
63
|
+
export type GardenerElementTarget = GardenerTargetValue | React.RefObject<GardenerTargetValue | null> | null | undefined;
|
|
64
|
+
export type GardenerEventHandler<T = Record<string, unknown>> = (event: CustomEvent<T>) => void;
|
|
65
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "@gardenerim/css/utilities.css";
|
package/docs/API.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Gardener React API
|
|
2
|
+
|
|
3
|
+
## 安装
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm install @gardenerim/react @gardenerim/css react react-dom
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
React 版本范围为 `>=18.3.0 <20.0.0`。加载 `@gardenerim/react/style.css` 可获得完整样式;按平台可改用 `platform/web.css`、`mobile.css`、`desktop.css`、`tauri.css` 或 `electron.css`。
|
|
10
|
+
|
|
11
|
+
## 组件公共属性
|
|
12
|
+
|
|
13
|
+
全部 506 个 `G*` 组件都支持:
|
|
14
|
+
|
|
15
|
+
- `as`:替换根元素或 React 组件。
|
|
16
|
+
- `variant`:字符串或数组,转换为组件变体类。
|
|
17
|
+
- `state`:字符串或数组,转换为 `is-*` 状态类。
|
|
18
|
+
- `config`:转换为 `data-g-*` 运行时配置。
|
|
19
|
+
- `initialize`:是否初始化 Gardener DOM 行为,默认 `true`。
|
|
20
|
+
- `value` / `defaultValue`:受控值和初始非受控值。
|
|
21
|
+
- `valueEvent` / `valueKey`:从 `gardener:*` 自定义事件载荷同步值。
|
|
22
|
+
- `onValueChange(value, event)`:统一接收原生表单与 Gardener 行为值变更。
|
|
23
|
+
- 所有原生 attributes、events 与 `children` 均透传。
|
|
24
|
+
|
|
25
|
+
组件 Ref 公开 `element`、`getInstance()` 和 `refresh()`:
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
const dialog = createRef<GardenerComponentHandle>();
|
|
29
|
+
<GDialog ref={dialog}><GardenerPart name="dialog">...</GardenerPart></GDialog>;
|
|
30
|
+
dialog.current?.getInstance("dialog");
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Provider 与主题
|
|
34
|
+
|
|
35
|
+
`GardenerProvider` 支持 `theme`、`mode`、`neutral`、`typography`、`shape`、`density`、`elevation`、`motion`、`platform` 和 `os` 十条主题轴,并提供 `GardenerThemeContext` 与 `useGardenerThemeContext`。
|
|
36
|
+
|
|
37
|
+
## 受控值
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
<GInput value={keyword} onValueChange={(value) => setKeyword(String(value))} />
|
|
41
|
+
<GTreeSelect value={id} valueEvent="pickerchange" valueKey="value" onValueChange={setId} />
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## 7 个 Hooks
|
|
45
|
+
|
|
46
|
+
- `useGardener`
|
|
47
|
+
- `useGardenerBehavior`
|
|
48
|
+
- `useGardenerEvent`
|
|
49
|
+
- `useGardenerTheme`
|
|
50
|
+
- `useGardenerToast`
|
|
51
|
+
- `useTauriWindowControls`
|
|
52
|
+
- `useElectronWindowControls`
|
|
53
|
+
|
|
54
|
+
## 按需引入
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
import { GButton, GCard, GDialog } from "@gardenerim/react/components";
|
|
58
|
+
import { useGardenerBehavior } from "@gardenerim/react/hooks";
|
|
59
|
+
import "@gardenerim/react/component-css/forms.css";
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
包提供 29 个入口,包括根入口、components、component、hooks、provider、adapters、tauri、electron、catalog、catalog.json、六个样式层、五个平台样式、`component-css/*.css` 正式入口与 `component-css/*` 兼容别名、预压缩 bundle、performance、三份 Schema 与 package.json。
|
|
63
|
+
|
|
64
|
+
## Tauri 与 Electron
|
|
65
|
+
|
|
66
|
+
`useTauriWindowControls`、`useElectronWindowControls` 随 React 生命周期绑定并销毁桌面窗口按钮;`bindTauriWindowControls` 与 `bindElectronWindowControls` 也可直接使用。`@gardenerim/react/tauri` 与 `@gardenerim/react/electron` 是相互隔离的独立模块,单平台导入不会连带加载另一平台桥接。桥接对象保持显式注入,不向不可信页面暴露 Node 或原生对象。
|
|
67
|
+
|
|
68
|
+
## SSR、StrictMode 与 Hydration
|
|
69
|
+
|
|
70
|
+
根入口导入不会访问浏览器全局对象;DOM 行为只在 Effect 中初始化。Effect 清理会销毁行为实例,因此可承受开发环境 StrictMode 的重复挂载检查。服务端输出包含稳定类名和数据属性,可直接 Hydration。
|
|
71
|
+
|
|
72
|
+
## 机器可读契约
|
|
73
|
+
|
|
74
|
+
- `@gardenerim/react/schema/public-api`
|
|
75
|
+
- `@gardenerim/react/schema/compatibility`
|
|
76
|
+
- `@gardenerim/react/schema/performance`
|
|
77
|
+
- `@gardenerim/react/catalog.json`
|
|
78
|
+
- `@gardenerim/react/performance`
|
|
79
|
+
|
|
80
|
+
全部 506 个组件见 [components.md](./components.md)。
|