@salloomd/teeth-selector 0.0.1 → 0.0.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.
@@ -0,0 +1,18 @@
1
+ export interface Tooth {
2
+ order: number;
3
+ id: number;
4
+ name: string;
5
+ position: "upper" | "lower";
6
+ side: "left" | "right";
7
+ d: string;
8
+ }
9
+ export declare const teethData: Tooth[];
10
+ export declare const adjacentTeethPairs: [number, number][];
11
+ export declare function getTeethInRange(startId: number, endId: number): number[];
12
+ export declare function sameSide(tooth1: number, tooth2: number): boolean;
13
+ export declare function parseTeethSelection(input: string): {
14
+ selectedTeeth: number[];
15
+ bridges: number[][];
16
+ };
17
+ export declare function formatTeethSelection(selectedTeeth: number[], bridges: number[][]): string;
18
+ //# sourceMappingURL=teeth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teeth.d.ts","sourceRoot":"","sources":["../../src/lib/teeth.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,CAAC,EAAE,MAAM,CAAC;CACX;AAED,eAAO,MAAM,SAAS,EAAE,KAAK,EAqQ5B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAiChD,CAAC;AAEF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAYxE;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAGhE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG;IAClD,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;CACrB,CA0CA;AAED,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,MAAM,EAAE,EACvB,OAAO,EAAE,MAAM,EAAE,EAAE,GAClB,MAAM,CAyDR"}
@@ -0,0 +1,93 @@
1
+ import type { Tooth } from "./teeth";
2
+ export interface TeethSelectorState {
3
+ selectedTeeth: number[];
4
+ bridges: number[][];
5
+ }
6
+ export interface TeethSelectorRenderProps extends TeethSelectorState {
7
+ /** Toggle a tooth's selection state */
8
+ toggleTooth: (toothId: number) => void;
9
+ /** Toggle a bridge between two teeth */
10
+ toggleBridge: (fromId: number, toId: number) => void;
11
+ /** Select all upper teeth with bridges */
12
+ selectUpper: () => void;
13
+ /** Select all lower teeth with bridges */
14
+ selectLower: () => void;
15
+ /** Select a range of teeth with bridges */
16
+ selectRange: (teethIds: number[]) => void;
17
+ /** Clear all selections */
18
+ clearAll: () => void;
19
+ /** Check if a tooth is selected */
20
+ isSelected: (toothId: number) => boolean;
21
+ /** Check if a bridge exists between two teeth */
22
+ hasBridge: (fromId: number, toId: number) => boolean;
23
+ /** Get sorted selected teeth data */
24
+ getSelectedTeethData: () => Tooth[];
25
+ }
26
+ export interface TeethSelectorProps {
27
+ /** Initial selected teeth IDs */
28
+ defaultSelectedTeeth?: number[];
29
+ /** Initial bridges as pairs of tooth IDs */
30
+ defaultBridges?: number[][];
31
+ /** Controlled selected teeth */
32
+ selectedTeeth?: number[];
33
+ /** Controlled bridges */
34
+ bridges?: number[][];
35
+ /** Callback when selection changes */
36
+ onSelectionChange?: (selectedTeeth: Tooth[]) => void;
37
+ /** Callback when bridges change */
38
+ onBridgeChange?: (bridges: number[][]) => void;
39
+ /** Unified callback for any change */
40
+ onChange?: (selectedTeeth: Tooth[], bridges: number[][]) => void;
41
+ /** Render function receiving state and actions */
42
+ children: (props: TeethSelectorRenderProps) => React.ReactNode;
43
+ }
44
+ export interface ToothRenderProps {
45
+ tooth: Tooth;
46
+ isSelected: boolean;
47
+ isInDragRange: boolean;
48
+ }
49
+ export interface BridgeRenderProps {
50
+ fromId: number;
51
+ toId: number;
52
+ exists: boolean;
53
+ position: {
54
+ x1: number;
55
+ y1: number;
56
+ x2: number;
57
+ y2: number;
58
+ midX: number;
59
+ midY: number;
60
+ };
61
+ }
62
+ export interface TeethChartProps {
63
+ /** Width of the SVG */
64
+ width?: number;
65
+ /** Height of the SVG */
66
+ height?: number;
67
+ /** Additional class names */
68
+ className?: string;
69
+ /** Custom render function for each tooth */
70
+ renderTooth?: (props: ToothRenderProps, defaultElement: React.ReactElement) => React.ReactNode;
71
+ /** Custom render function for each bridge */
72
+ renderBridge?: (props: BridgeRenderProps, defaultElement: React.ReactElement) => React.ReactNode;
73
+ /** Enable drag selection */
74
+ enableDragSelection?: boolean;
75
+ }
76
+ export interface TeethPreviewProps {
77
+ /** Teeth selection string (e.g., "11, [21, 23], 31") */
78
+ teeth: string;
79
+ /** Width of the SVG */
80
+ width?: number;
81
+ /** Height of the SVG */
82
+ height?: number;
83
+ /** Additional class names */
84
+ className?: string;
85
+ /** Custom render function for selected teeth */
86
+ renderTooth?: (props: {
87
+ tooth: Tooth;
88
+ isSelected: boolean;
89
+ }, defaultElement: React.ReactElement) => React.ReactNode;
90
+ /** Custom render function for bridges */
91
+ renderBridge?: (props: Omit<BridgeRenderProps, "exists">, defaultElement: React.ReactElement) => React.ReactNode;
92
+ }
93
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,14 +1,23 @@
1
1
  {
2
2
  "name": "@salloomd/teeth-selector",
3
- "version": "0.0.1",
4
- "module": "index.ts",
3
+ "version": "0.0.3",
5
4
  "type": "module",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
6
15
  "files": [
7
16
  "dist"
8
17
  ],
9
18
  "sideEffects": false,
10
19
  "scripts": {
11
- "build": "bun build index.ts --outdir dist",
20
+ "build": "bun build src/index.ts --outdir dist --external react --external react-dom && tsc -p tsconfig.build.json",
12
21
  "storybook": "storybook dev -p 6006",
13
22
  "build-storybook": "storybook build"
14
23
  },
@@ -31,6 +40,8 @@
31
40
  "@vitest/coverage-v8": "^4.0.16"
32
41
  },
33
42
  "peerDependencies": {
43
+ "react": "^18 || ^19",
44
+ "react-dom": "^18 || ^19",
34
45
  "typescript": "^5"
35
46
  },
36
47
  "keywords": [