@slimkhemiri/react-design-system 0.1.2 → 0.1.3

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
@@ -13,6 +13,15 @@ This package provides:
13
13
  npm i @slimkhemiri/react-design-system
14
14
  ```
15
15
 
16
+ This package depends on `@slimkhemiri/web-components` (installed automatically).
17
+
18
+ If you see `E404 Not Found` for `@slimkhemiri/web-components`, it means that package is **not published to your registry yet**. Publish it first (see repo-level publishing notes), or install from local tarballs.
19
+
20
+ ```bash
21
+ npm whoami
22
+ npm login
23
+ ```
24
+
16
25
  ## Usage
17
26
 
18
27
  Register the custom elements once, then use the React components.
@@ -44,12 +53,58 @@ export function App() {
44
53
  return (
45
54
  <div style={{ display: "grid", gap: 12, maxWidth: 360 }}>
46
55
  <SlimInput label="Email" type="email" onSlimChange={(e) => console.log(e.detail)} />
47
- <SlimButton variant="primary">Continue</SlimButton>
56
+ <SlimButton variant="primary">Click me !</SlimButton>
48
57
  </div>
49
58
  );
50
59
  }
51
60
  ```
52
61
 
62
+ ## Troubleshooting: "Invalid hook call" / `useRef` is null
63
+
64
+ This error almost always means **React is resolved twice** (or `react` / `react-dom` versions don’t match) in your consuming app.
65
+
66
+ ### 1) Verify there is only one React
67
+
68
+ ```bash
69
+ npm ls react react-dom
70
+ ```
71
+
72
+ You should see **a single version** of `react` and `react-dom`.
73
+
74
+ ### 1bis) Quick fix (npm): force a single React via overrides
75
+
76
+ If you see something like `@slimkhemiri/react-design-system -> react@18.x` while your app is on React 19 (or vice-versa),
77
+ force React to a single version in your app:
78
+
79
+ ```json
80
+ {
81
+ "overrides": {
82
+ "@slimkhemiri/react-design-system": {
83
+ "react": "19.2.4",
84
+ "react-dom": "19.2.4"
85
+ }
86
+ }
87
+ }
88
+ ```
89
+
90
+ Then reinstall (`rm -rf node_modules package-lock.json` + `npm i`).
91
+
92
+ ### 2) If you use Vite + monorepo / workspace / `npm link`
93
+
94
+ Add React dedupe to your consuming app’s `vite.config.ts`:
95
+
96
+ ```ts
97
+ import { defineConfig } from "vite";
98
+ import react from "@vitejs/plugin-react";
99
+
100
+ export default defineConfig({
101
+ plugins: [react()],
102
+ resolve: {
103
+ dedupe: ["react", "react-dom"]
104
+ }
105
+ });
106
+ ```
107
+
53
108
  ## Next.js / SSR notes
54
109
 
55
110
  Custom elements must be defined in the browser. In Next.js, call `defineCustomElements()` from a client component:
@@ -8,9 +8,11 @@ import { SlimButton as SlimButtonElement } from "@slimkhemiri/web-components/dis
8
8
  import { SlimCheckbox as SlimCheckboxElement } from "@slimkhemiri/web-components/dist/components/slim-checkbox.js";
9
9
  import { SlimInput as SlimInputElement } from "@slimkhemiri/web-components/dist/components/slim-input.js";
10
10
  import { SlimModal as SlimModalElement } from "@slimkhemiri/web-components/dist/components/slim-modal.js";
11
+ import { SlimPlaygroundSidebar as SlimPlaygroundSidebarElement } from "@slimkhemiri/web-components/dist/components/slim-playground-sidebar.js";
11
12
  import { SlimSelect as SlimSelectElement } from "@slimkhemiri/web-components/dist/components/slim-select.js";
12
13
  import { SlimSwitch as SlimSwitchElement } from "@slimkhemiri/web-components/dist/components/slim-switch.js";
13
14
  import { SlimTextarea as SlimTextareaElement } from "@slimkhemiri/web-components/dist/components/slim-textarea.js";
15
+ import { SlimTooltip as SlimTooltipElement } from "@slimkhemiri/web-components/dist/components/slim-tooltip.js";
14
16
  import type { EventName, StencilReactComponent } from '@stencil/react-output-target/runtime';
15
17
  type SlimAlertEvents = NonNullable<unknown>;
16
18
  export declare const SlimAlert: StencilReactComponent<SlimAlertElement, SlimAlertEvents>;
@@ -30,6 +32,11 @@ type SlimModalEvents = {
30
32
  onSlimClose: EventName<CustomEvent<void>>;
31
33
  };
32
34
  export declare const SlimModal: StencilReactComponent<SlimModalElement, SlimModalEvents>;
35
+ type SlimPlaygroundSidebarEvents = {
36
+ onSlimSelect: EventName<CustomEvent<string>>;
37
+ onSlimToggle: EventName<CustomEvent<boolean>>;
38
+ };
39
+ export declare const SlimPlaygroundSidebar: StencilReactComponent<SlimPlaygroundSidebarElement, SlimPlaygroundSidebarEvents>;
33
40
  type SlimSelectEvents = {
34
41
  onSlimChange: EventName<CustomEvent<string>>;
35
42
  };
@@ -42,5 +49,10 @@ type SlimTextareaEvents = {
42
49
  onSlimChange: EventName<CustomEvent<string>>;
43
50
  };
44
51
  export declare const SlimTextarea: StencilReactComponent<SlimTextareaElement, SlimTextareaEvents>;
52
+ type SlimTooltipEvents = {
53
+ onSlimShow: EventName<CustomEvent<void>>;
54
+ onSlimHide: EventName<CustomEvent<void>>;
55
+ };
56
+ export declare const SlimTooltip: StencilReactComponent<SlimTooltipElement, SlimTooltipEvents>;
45
57
  export {};
46
58
  //# sourceMappingURL=components.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAIH,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAA0C,MAAM,2DAA2D,CAAC;AAClJ,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAA0C,MAAM,2DAA2D,CAAC;AAClJ,OAAO,EAAE,UAAU,IAAI,iBAAiB,EAA2C,MAAM,4DAA4D,CAAC;AACtJ,OAAO,EAAE,YAAY,IAAI,mBAAmB,EAA6C,MAAM,8DAA8D,CAAC;AAC9J,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAA0C,MAAM,2DAA2D,CAAC;AAClJ,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAA0C,MAAM,2DAA2D,CAAC;AAClJ,OAAO,EAAE,UAAU,IAAI,iBAAiB,EAA2C,MAAM,4DAA4D,CAAC;AACtJ,OAAO,EAAE,UAAU,IAAI,iBAAiB,EAA2C,MAAM,4DAA4D,CAAC;AACtJ,OAAO,EAAE,YAAY,IAAI,mBAAmB,EAA6C,MAAM,8DAA8D,CAAC;AAC9J,OAAO,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAI7F,KAAK,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AAE5C,eAAO,MAAM,SAAS,EAAE,qBAAqB,CAAC,gBAAgB,EAAE,eAAe,CAO7E,CAAC;AAEH,KAAK,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AAE5C,eAAO,MAAM,SAAS,EAAE,qBAAqB,CAAC,gBAAgB,EAAE,eAAe,CAO7E,CAAC;AAEH,KAAK,gBAAgB,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AAE7C,eAAO,MAAM,UAAU,EAAE,qBAAqB,CAAC,iBAAiB,EAAE,gBAAgB,CAOhF,CAAC;AAEH,KAAK,kBAAkB,GAAG;IAAE,YAAY,EAAE,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA;CAAE,CAAC;AAE5E,eAAO,MAAM,YAAY,EAAE,qBAAqB,CAAC,mBAAmB,EAAE,kBAAkB,CAOtF,CAAC;AAEH,KAAK,eAAe,GAAG;IAAE,YAAY,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;CAAE,CAAC;AAExE,eAAO,MAAM,SAAS,EAAE,qBAAqB,CAAC,gBAAgB,EAAE,eAAe,CAO7E,CAAC;AAEH,KAAK,eAAe,GAAG;IAAE,WAAW,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;CAAE,CAAC;AAErE,eAAO,MAAM,SAAS,EAAE,qBAAqB,CAAC,gBAAgB,EAAE,eAAe,CAO7E,CAAC;AAEH,KAAK,gBAAgB,GAAG;IAAE,YAAY,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;CAAE,CAAC;AAEzE,eAAO,MAAM,UAAU,EAAE,qBAAqB,CAAC,iBAAiB,EAAE,gBAAgB,CAOhF,CAAC;AAEH,KAAK,gBAAgB,GAAG;IAAE,YAAY,EAAE,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA;CAAE,CAAC;AAE1E,eAAO,MAAM,UAAU,EAAE,qBAAqB,CAAC,iBAAiB,EAAE,gBAAgB,CAOhF,CAAC;AAEH,KAAK,kBAAkB,GAAG;IAAE,YAAY,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;CAAE,CAAC;AAE3E,eAAO,MAAM,YAAY,EAAE,qBAAqB,CAAC,mBAAmB,EAAE,kBAAkB,CAOtF,CAAC"}
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"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"}
@@ -10,9 +10,11 @@ import { SlimButton as SlimButtonElement, defineCustomElement as defineSlimButto
10
10
  import { SlimCheckbox as SlimCheckboxElement, defineCustomElement as defineSlimCheckbox } from "@slimkhemiri/web-components/dist/components/slim-checkbox.js";
11
11
  import { SlimInput as SlimInputElement, defineCustomElement as defineSlimInput } from "@slimkhemiri/web-components/dist/components/slim-input.js";
12
12
  import { SlimModal as SlimModalElement, defineCustomElement as defineSlimModal } from "@slimkhemiri/web-components/dist/components/slim-modal.js";
13
+ import { SlimPlaygroundSidebar as SlimPlaygroundSidebarElement, defineCustomElement as defineSlimPlaygroundSidebar } from "@slimkhemiri/web-components/dist/components/slim-playground-sidebar.js";
13
14
  import { SlimSelect as SlimSelectElement, defineCustomElement as defineSlimSelect } from "@slimkhemiri/web-components/dist/components/slim-select.js";
14
15
  import { SlimSwitch as SlimSwitchElement, defineCustomElement as defineSlimSwitch } from "@slimkhemiri/web-components/dist/components/slim-switch.js";
15
16
  import { SlimTextarea as SlimTextareaElement, defineCustomElement as defineSlimTextarea } from "@slimkhemiri/web-components/dist/components/slim-textarea.js";
17
+ import { SlimTooltip as SlimTooltipElement, defineCustomElement as defineSlimTooltip } from "@slimkhemiri/web-components/dist/components/slim-tooltip.js";
16
18
  import { createComponent } from '@stencil/react-output-target/runtime';
17
19
  import React from 'react';
18
20
  export const SlimAlert = /*@__PURE__*/ createComponent({
@@ -63,6 +65,17 @@ export const SlimModal = /*@__PURE__*/ createComponent({
63
65
  events: { onSlimClose: 'slimClose' },
64
66
  defineCustomElement: defineSlimModal
65
67
  });
68
+ export const SlimPlaygroundSidebar = /*@__PURE__*/ createComponent({
69
+ tagName: 'slim-playground-sidebar',
70
+ elementClass: SlimPlaygroundSidebarElement,
71
+ // @ts-ignore - React type of Stencil Output Target may differ from the React version used in the Nuxt.js project, this can be ignored.
72
+ react: React,
73
+ events: {
74
+ onSlimSelect: 'slimSelect',
75
+ onSlimToggle: 'slimToggle'
76
+ },
77
+ defineCustomElement: defineSlimPlaygroundSidebar
78
+ });
66
79
  export const SlimSelect = /*@__PURE__*/ createComponent({
67
80
  tagName: 'slim-select',
68
81
  elementClass: SlimSelectElement,
@@ -87,3 +100,14 @@ export const SlimTextarea = /*@__PURE__*/ createComponent({
87
100
  events: { onSlimChange: 'slimChange' },
88
101
  defineCustomElement: defineSlimTextarea
89
102
  });
103
+ export const SlimTooltip = /*@__PURE__*/ createComponent({
104
+ tagName: 'slim-tooltip',
105
+ elementClass: SlimTooltipElement,
106
+ // @ts-ignore - React type of Stencil Output Target may differ from the React version used in the Nuxt.js project, this can be ignored.
107
+ react: React,
108
+ events: {
109
+ onSlimShow: 'slimShow',
110
+ onSlimHide: 'slimHide'
111
+ },
112
+ defineCustomElement: defineSlimTooltip
113
+ });
@@ -8,7 +8,7 @@ declare const meta: {
8
8
  tags: string[];
9
9
  argTypes: {
10
10
  backgroundColor: {
11
- control: "color";
11
+ control: string;
12
12
  };
13
13
  };
14
14
  args: {
@@ -8,7 +8,7 @@ declare const meta: {
8
8
  tags: string[];
9
9
  argTypes: {
10
10
  variant: {
11
- control: "select";
11
+ control: string;
12
12
  options: string[];
13
13
  };
14
14
  };
@@ -8,11 +8,11 @@ declare const meta: {
8
8
  tags: string[];
9
9
  argTypes: {
10
10
  variant: {
11
- control: "select";
11
+ control: string;
12
12
  options: string[];
13
13
  };
14
14
  size: {
15
- control: "radio";
15
+ control: string;
16
16
  options: string[];
17
17
  };
18
18
  };
@@ -8,15 +8,15 @@ declare const meta: {
8
8
  tags: string[];
9
9
  argTypes: {
10
10
  variant: {
11
- control: "select";
11
+ control: string;
12
12
  options: string[];
13
13
  };
14
14
  size: {
15
- control: "radio";
15
+ control: string;
16
16
  options: string[];
17
17
  };
18
18
  type: {
19
- control: "radio";
19
+ control: string;
20
20
  options: string[];
21
21
  };
22
22
  };
@@ -11,7 +11,7 @@ declare const meta: {
11
11
  };
12
12
  argTypes: {
13
13
  type: {
14
- control: "select";
14
+ control: string;
15
15
  options: string[];
16
16
  };
17
17
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slimkhemiri/react-design-system",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -21,13 +21,18 @@
21
21
  "scripts": {
22
22
  "build": "tsc -p tsconfig.build.json",
23
23
  "clean": "node ./scripts/clean.mjs",
24
- "storybook": "storybook dev -p 6006",
25
- "build-storybook": "storybook build"
24
+ "lint": "eslint \"src/**/*.{ts,tsx}\"",
25
+ "storybook": "pnpm --filter @slim-ds/tokens build && pnpm --filter @slimkhemiri/web-components build && storybook dev -p 6006",
26
+ "build-storybook": "pnpm --filter @slim-ds/tokens build && pnpm --filter @slimkhemiri/web-components build && storybook build",
27
+ "prepack": "npm run build"
26
28
  },
27
29
  "dependencies": {
28
- "@slimkhemiri/web-components": "^0.1.1",
29
- "@stencil/react-output-target": "^0.8.2",
30
- "react": "^18.3.1"
30
+ "@slimkhemiri/web-components": "workspace:*",
31
+ "@stencil/react-output-target": "^0.8.2"
32
+ },
33
+ "peerDependencies": {
34
+ "react": "^18.0.0 || ^19.0.0",
35
+ "react-dom": "^18.0.0 || ^19.0.0"
31
36
  },
32
37
  "devDependencies": {
33
38
  "@chromatic-com/storybook": "^5.0.1",
@@ -42,6 +47,7 @@
42
47
  "@vitest/coverage-v8": "^4.0.18",
43
48
  "chromatic": "^15.0.0",
44
49
  "playwright": "^1.58.2",
50
+ "react": "^18.3.1",
45
51
  "react-dom": "^18.3.1",
46
52
  "storybook": "^10.2.7",
47
53
  "typescript": "^5.5.4",