@octave-org/ui 0.0.3 → 0.0.4
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
CHANGED
|
@@ -1,26 +1,98 @@
|
|
|
1
1
|
# @octave-org/ui
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A UI component library built on top of [Mantine](https://mantine.dev), designed for use with Next.js projects.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
> **Note:** This package is currently only stable on the **Next.js Pages Router**. App Router support is not guaranteed.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# npm
|
|
13
|
+
npm install @octave-org/ui
|
|
14
|
+
|
|
15
|
+
# yarn
|
|
16
|
+
yarn add @octave-org/ui
|
|
17
|
+
|
|
18
|
+
# pnpm
|
|
19
|
+
pnpm add @octave-org/ui
|
|
20
|
+
|
|
21
|
+
# bun
|
|
22
|
+
bun add @octave-org/ui
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Setup
|
|
28
|
+
|
|
29
|
+
### 1. Update `next.config.ts`
|
|
30
|
+
|
|
31
|
+
Add `@octave-org/ui` to `transpilePackages` so Next.js can process the package correctly:
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
// next.config.ts
|
|
35
|
+
import type { NextConfig } from 'next';
|
|
36
|
+
|
|
37
|
+
const nextConfig: NextConfig = {
|
|
38
|
+
transpilePackages: ['@octave-org/ui'],
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export default nextConfig;
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 2. Wrap your app with `OctaveProvider`
|
|
45
|
+
|
|
46
|
+
In your `pages/_app.tsx`, wrap your application with the `OctaveProvider` component to enable theming and notifications:
|
|
8
47
|
|
|
9
48
|
```tsx
|
|
49
|
+
// pages/_app.tsx
|
|
50
|
+
import type { AppProps } from 'next/app';
|
|
10
51
|
import { OctaveProvider } from '@octave-org/ui';
|
|
11
52
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
53
|
+
export default function App({ Component, pageProps }: AppProps) {
|
|
54
|
+
return (
|
|
55
|
+
<OctaveProvider>
|
|
56
|
+
<Component {...pageProps} />
|
|
57
|
+
</OctaveProvider>
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Usage
|
|
65
|
+
|
|
66
|
+
### OctaveButton
|
|
67
|
+
|
|
68
|
+
Use `OctaveButton` to render a styled button. You can pass a label, an action handler, or a link.
|
|
69
|
+
|
|
70
|
+
```tsx
|
|
71
|
+
import { OctaveButton } from '@octave-org/ui';
|
|
72
|
+
|
|
73
|
+
export default function MyPage() {
|
|
74
|
+
return (
|
|
75
|
+
<OctaveButton
|
|
76
|
+
btnProps={{
|
|
77
|
+
label: 'Click me',
|
|
78
|
+
action: () => console.log('Button clicked!'),
|
|
79
|
+
context: 'primary', // 'primary' | 'destructive' | 'success' | 'warning'
|
|
80
|
+
}}
|
|
81
|
+
/>
|
|
82
|
+
);
|
|
83
|
+
}
|
|
20
84
|
```
|
|
21
85
|
|
|
22
|
-
|
|
86
|
+
You can also render the button as a link:
|
|
23
87
|
|
|
24
|
-
|
|
88
|
+
```tsx
|
|
89
|
+
<OctaveButton
|
|
90
|
+
btnProps={{
|
|
91
|
+
label: 'Go to Dashboard',
|
|
92
|
+
link: '/dashboard',
|
|
93
|
+
context: 'success',
|
|
94
|
+
}}
|
|
95
|
+
/>
|
|
96
|
+
```
|
|
25
97
|
|
|
26
|
-
|
|
98
|
+
---
|
package/dist/index.esm.js
CHANGED
|
@@ -2767,7 +2767,6 @@ function LinksGroup({
|
|
|
2767
2767
|
paddingLeft: theme.spacing.md,
|
|
2768
2768
|
marginLeft: theme.spacing.xl,
|
|
2769
2769
|
fontSize: theme.fontSizes.sm,
|
|
2770
|
-
color: isDark ? theme.colors.dark[0] : theme.colors.gray[7],
|
|
2771
2770
|
borderLeft: `1px solid ${isDark ? theme.colors.dark[4] : theme.colors.gray[3]}`,
|
|
2772
2771
|
backgroundColor: hoveredLink === link.label ? isDark ? theme.colors.dark[7] : theme.colors.gray[0] : 'transparent'
|
|
2773
2772
|
},
|
|
@@ -2786,7 +2785,6 @@ function LinksGroup({
|
|
|
2786
2785
|
fontWeight: 500,
|
|
2787
2786
|
padding: `${theme.spacing.xs} ${theme.spacing.md}`,
|
|
2788
2787
|
fontSize: theme.fontSizes.sm,
|
|
2789
|
-
color: isDark ? theme.white : theme.black,
|
|
2790
2788
|
backgroundColor: controlHovered ? isDark ? theme.colors.dark[7] : theme.colors.gray[0] : 'transparent'
|
|
2791
2789
|
},
|
|
2792
2790
|
children: jsxs(Group, {
|
|
@@ -3798,28 +3796,31 @@ function ThemeTrigger() {
|
|
|
3798
3796
|
|
|
3799
3797
|
const defaultBranding = {
|
|
3800
3798
|
companyName: 'Octave Designs',
|
|
3801
|
-
slogan: 'The ui system you deserve'
|
|
3799
|
+
slogan: 'The ui system you deserve',
|
|
3800
|
+
logo: jsx(IconGalaxy, {})
|
|
3802
3801
|
};
|
|
3803
3802
|
const OctaveBrandingContext = /*#__PURE__*/createContext(defaultBranding);
|
|
3804
3803
|
function OctaveBrandingProvider({
|
|
3805
3804
|
children,
|
|
3806
3805
|
branding
|
|
3807
3806
|
}) {
|
|
3808
|
-
var _branding$companyName, _branding$slogan;
|
|
3807
|
+
var _branding$companyName, _branding$slogan, _branding$logo;
|
|
3809
3808
|
return jsx(OctaveBrandingContext.Provider, {
|
|
3810
3809
|
value: {
|
|
3811
3810
|
companyName: (_branding$companyName = branding == null ? void 0 : branding.companyName) != null ? _branding$companyName : defaultBranding.companyName,
|
|
3812
|
-
slogan: (_branding$slogan = branding == null ? void 0 : branding.slogan) != null ? _branding$slogan : defaultBranding.slogan
|
|
3811
|
+
slogan: (_branding$slogan = branding == null ? void 0 : branding.slogan) != null ? _branding$slogan : defaultBranding.slogan,
|
|
3812
|
+
logo: (_branding$logo = branding == null ? void 0 : branding.logo) != null ? _branding$logo : defaultBranding.logo
|
|
3813
3813
|
},
|
|
3814
3814
|
children: children
|
|
3815
3815
|
});
|
|
3816
3816
|
}
|
|
3817
3817
|
function useOctaveBranding(overrides) {
|
|
3818
|
-
var _overrides$companyNam, _overrides$slogan;
|
|
3818
|
+
var _overrides$companyNam, _overrides$slogan, _overrides$logo;
|
|
3819
3819
|
const branding = useContext(OctaveBrandingContext);
|
|
3820
3820
|
return {
|
|
3821
3821
|
companyName: (_overrides$companyNam = overrides == null ? void 0 : overrides.companyName) != null ? _overrides$companyNam : branding.companyName,
|
|
3822
|
-
slogan: (_overrides$slogan = overrides == null ? void 0 : overrides.slogan) != null ? _overrides$slogan : branding.slogan
|
|
3822
|
+
slogan: (_overrides$slogan = overrides == null ? void 0 : overrides.slogan) != null ? _overrides$slogan : branding.slogan,
|
|
3823
|
+
logo: (_overrides$logo = overrides == null ? void 0 : overrides.logo) != null ? _overrides$logo : branding.logo
|
|
3823
3824
|
};
|
|
3824
3825
|
}
|
|
3825
3826
|
|
|
@@ -3860,7 +3861,7 @@ function OctaveShell({
|
|
|
3860
3861
|
const NavLogo = () => jsxs(Flex, {
|
|
3861
3862
|
gap: "xs",
|
|
3862
3863
|
align: "center",
|
|
3863
|
-
children: [logo, (opened || isMobile) && jsxs(Stack, {
|
|
3864
|
+
children: [appBranding.logo, (opened || isMobile) && jsxs(Stack, {
|
|
3864
3865
|
gap: 0,
|
|
3865
3866
|
children: [jsx(Text, {
|
|
3866
3867
|
fw: 600,
|
|
@@ -4933,9 +4934,7 @@ function OctaveAuthWrapper(props) {
|
|
|
4933
4934
|
children: [jsx(ThemeIcon, {
|
|
4934
4935
|
variant: "default",
|
|
4935
4936
|
size: 50,
|
|
4936
|
-
children:
|
|
4937
|
-
size: 30
|
|
4938
|
-
})
|
|
4937
|
+
children: branding.logo
|
|
4939
4938
|
}), jsx(Divider, {
|
|
4940
4939
|
orientation: "vertical"
|
|
4941
4940
|
}), jsx(OctaveStackedText, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../../../src/lib/blocks/auth/wrapper.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../../../src/lib/blocks/auth/wrapper.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,cAAc,EAAqB,MAAM,gBAAgB,CAAC;AAEnE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CAqD9D"}
|
|
@@ -2,6 +2,7 @@ import { PropsWithChildren } from 'react';
|
|
|
2
2
|
export interface OctaveBranding {
|
|
3
3
|
companyName?: string;
|
|
4
4
|
slogan?: string;
|
|
5
|
+
logo?: React.ReactNode;
|
|
5
6
|
}
|
|
6
7
|
export declare function OctaveBrandingProvider({ children, branding, }: PropsWithChildren<{
|
|
7
8
|
branding?: OctaveBranding;
|
|
@@ -9,5 +10,6 @@ export declare function OctaveBrandingProvider({ children, branding, }: PropsWit
|
|
|
9
10
|
export declare function useOctaveBranding(overrides?: OctaveBranding): {
|
|
10
11
|
companyName: string;
|
|
11
12
|
slogan: string;
|
|
13
|
+
logo: string | number | bigint | boolean | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | null | undefined> | null;
|
|
12
14
|
};
|
|
13
15
|
//# sourceMappingURL=branding.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branding.d.ts","sourceRoot":"","sources":["../../../src/lib/branding.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"branding.d.ts","sourceRoot":"","sources":["../../../src/lib/branding.tsx"],"names":[],"mappings":"AACA,OAAO,EAAiB,iBAAiB,EAAc,MAAM,OAAO,CAAC;AAErE,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAWD,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,QAAQ,GACT,EAAE,iBAAiB,CAAC;IAAE,QAAQ,CAAC,EAAE,cAAc,CAAA;CAAE,CAAC,2CAYlD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,cAAc;;;;EAQ3D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-links.d.ts","sourceRoot":"","sources":["../../../../src/lib/layout/nav-links.tsx"],"names":[],"mappings":"AACA,OAAO,EAAoB,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAYlE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EAAE,IAAI,EACV,KAAK,EACL,IAAI,EACJ,eAAe,EACf,KAAK,EACL,WAAW,GACZ,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"nav-links.d.ts","sourceRoot":"","sources":["../../../../src/lib/layout/nav-links.tsx"],"names":[],"mappings":"AACA,OAAO,EAAoB,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAYlE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EAAE,IAAI,EACV,KAAK,EACL,IAAI,EACJ,eAAe,EACf,KAAK,EACL,WAAW,GACZ,EAAE,eAAe,2CAiFjB"}
|