@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
- This library was generated with [Nx](https://nx.dev).
3
+ A UI component library built on top of [Mantine](https://mantine.dev), designed for use with Next.js projects.
4
4
 
5
- ## Branding
5
+ > **Note:** This package is currently only stable on the **Next.js Pages Router**. App Router support is not guaranteed.
6
6
 
7
- Set shared branding once at the provider level:
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
- <OctaveProvider
13
- branding={{
14
- companyName: 'Acme Inc.',
15
- slogan: 'Secure access for modern teams',
16
- }}
17
- >
18
- <App />
19
- </OctaveProvider>;
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
- `OctaveAuthWrapper`, `OctaveAuthForm`, and `OctaveShell` will use that branding by default. You can still override branding per component with a `branding` prop when needed.
86
+ You can also render the button as a link:
23
87
 
24
- ## Running unit tests
88
+ ```tsx
89
+ <OctaveButton
90
+ btnProps={{
91
+ label: 'Go to Dashboard',
92
+ link: '/dashboard',
93
+ context: 'success',
94
+ }}
95
+ />
96
+ ```
25
97
 
26
- Run `nx test @octave-org/ui` to execute the unit tests via [Jest](https://jestjs.io).
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: jsx(IconGalaxy, {
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":"AAYA,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"}
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":"AAAA,OAAO,EAEL,iBAAiB,EAElB,MAAM,OAAO,CAAC;AAEf,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAWD,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,QAAQ,GACT,EAAE,iBAAiB,CAAC;IAAE,QAAQ,CAAC,EAAE,cAAc,CAAA;CAAE,CAAC,2CAWlD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,cAAc;;;EAO3D"}
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,2CAmFjB"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@octave-org/ui",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "type": "module",
5
5
  "main": "./dist/index.esm.js",
6
6
  "module": "./dist/index.esm.js",