Skip to content

Commit 33f4b74

Browse files
committed
chore: deps
1 parent cce720c commit 33f4b74

File tree

8 files changed

+1951
-1161
lines changed

8 files changed

+1951
-1161
lines changed

.claude/settings.json

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
{
2+
"$schema": "https://json.schemastore.org/claude-code-settings.json",
3+
"permissions": {
4+
"allow": [
5+
"WebFetch(domain:github.com)",
6+
"WebFetch(domain:docs.anthropic.com)",
7+
"Bash(grep:*)",
8+
"Bash(sed:*)",
9+
"Bash(find:*)",
10+
"Bash(mkdir:*)",
11+
"Bash(curl:*)",
12+
"Bash(pkill:*)",
13+
"Bash(true)",
14+
"Bash(npx playwright:*)",
15+
"Bash(npx vite:*)",
16+
"Bash(node:*)",
17+
"Bash(ls:*)",
18+
"Bash(cp:*)",
19+
"Bash(lsof:*)",
20+
"Bash(cat:*)",
21+
"Bash(chmod:*)",
22+
"Bash(open:*)",
23+
"Bash(gtimeout:*)",
24+
"Bash(defaults read:*)",
25+
"Bash(system_profiler:*)",
26+
"Bash(npm run:*)",
27+
"Bash(npm run dev:*)",
28+
"Bash(npm run build:*)",
29+
"Bash(npm outdated)",
30+
"Bash(npm update)",
31+
"Bash(npm uninstall:*)",
32+
"Bash(npm test)",
33+
"Bash(npm test:*)",
34+
"Bash(npm create:*)",
35+
"Bash(npm install)",
36+
"Bash(npm install:*)",
37+
"Bash(npm run generate:swift-tokens:*)",
38+
"Bash(npm run typecheck:*)",
39+
"Bash(npx husky init:*)",
40+
"Bash(npx tsx:*)",
41+
"Bash(npx tsc:*)",
42+
"Bash(npx tailwindcss:*)",
43+
"Bash(timeout 5s npm run dev)",
44+
"Bash(timeout 10s npm run dev)",
45+
"mcp__playwright__browser_navigate",
46+
"mcp__playwright__browser_wait_for",
47+
"mcp__playwright__browser_type",
48+
"mcp__playwright__browser_click",
49+
"mcp__playwright__browser_press_key",
50+
"mcp__playwright__browser_console_messages",
51+
"mcp__playwright__browser_install",
52+
"mcp__playwright__browser_close",
53+
"mcp__playwright__browser_evaluate",
54+
"mcp__playwright__browser_network_requests",
55+
"mcp__playwright__browser_snapshot",
56+
"mcp__playwright__browser_take_screenshot",
57+
"mcp__playwright__browser_tab_new",
58+
"mcp__playwright__browser_resize",
59+
"mcp__playwright__browser_hover",
60+
"mcp__serena__onboarding",
61+
"mcp__serena__check_onboarding_performed",
62+
"mcp__serena__activate_project",
63+
"mcp__serena__search_for_pattern",
64+
"mcp__serena__list_dir",
65+
"mcp__serena__get_symbols_overview",
66+
"mcp__serena__find_file",
67+
"mcp__serena__find_symbol",
68+
"mcp__serena__replace_regex",
69+
"mcp__serena__write_memory",
70+
"mcp__serena__insert_after_symbol",
71+
"mcp__serena__replace_symbol_body",
72+
"mcp__serena__think_about_whether_you_are_done",
73+
"mcp__serena__think_about_collected_information"
74+
],
75+
"deny": []
76+
},
77+
"slashCommands": {
78+
"qc": {
79+
"description": "Run typecheck, lint, verify coding guidelines, fix issues, and stage files",
80+
"command": "/Users/arno/scripts/claude-stage-advanced.sh"
81+
},
82+
"prettier": {
83+
"description": "Format code with Prettier, then run lint and typecheck",
84+
"command": "npm run prettier"
85+
}
86+
}
87+
}

TODO.md

Lines changed: 123 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,126 @@ The documentation sometimes uses `mathfield` and `MathfieldElement` interchangea
3131
* Use `MathfieldElement` when referring to the JavaScript class or its static properties/methods (`MathfieldElement.computeEngine`).
3232
* Use "mathfield" (lowercase) as a general term for an instance of the component on a page.
3333

34-
34+
## Future Expansion
35+
36+
### Interactive Applications Architecture
37+
38+
**Recommended Approach:** Deploy interactive applications as separate React apps on subdomains, keeping them independent from the Docusaurus documentation site.
39+
40+
**Deployment Strategy:**
41+
- Use Cloudflare for subdomain routing and CDN
42+
- Each app deployed to its own subdirectory in the build
43+
- DNS configuration: CNAME records for each subdomain pointing to the main domain
44+
- Cloudflare Workers or Page Rules to route subdomains to appropriate directories
45+
46+
**Implementation Structure:**
47+
```
48+
cortexjs.io/
49+
├── src/
50+
│ ├── pages/ # Docusaurus pages (documentation)
51+
│ ├── components/ # Documentation components
52+
│ └── apps/ # Interactive applications
53+
│ ├── editor/
54+
│ ├── calculator/
55+
│ ├── grapher/
56+
│ └── notebook/
57+
├── build/
58+
│ ├── docs/ # Main documentation site
59+
│ └── apps/ # Built applications
60+
│ ├── editor/ # → editor.mathlive.io
61+
│ ├── calculator/ # → calculator.mathlive.io
62+
│ ├── grapher/ # → grapher.mathlive.io
63+
│ └── notebook/ # → notebook.mathlive.io
64+
```
65+
66+
### Interactive Applications
67+
68+
- **`editor.mathlive.io`** - LaTeX/MathLive Editor
69+
- Split-pane interface: MathLive mathfield on one side, LaTeX editor on the other
70+
- Bidirectional real-time synchronization between panels
71+
- LaTeX side uses CodeMirror or Monaco Editor with LaTeX syntax highlighting
72+
- Configurable layout: horizontal or vertical split (responsive to device/user preference)
73+
- Future: Session saving with left sidebar for saved expressions
74+
- Export options: Copy as LaTeX, MathML, or image
75+
76+
- **`calculator.mathlive.io`** - Scientific Calculator
77+
- MathLive input field at bottom for expression entry
78+
- Scrollable history of calculations above
79+
- Integration with Compute Engine for evaluation
80+
- "ans" variable to reference previous result (with custom virtual keyboard key)
81+
- Session persistence using localStorage
82+
- Export history as text or LaTeX
83+
84+
- **`grapher.mathlive.io`** - Function Graphing Tool
85+
- Desmos-style interface with function list panel and graph canvas
86+
- MathLive input for function definitions
87+
- Automatic detection of function type:
88+
- 2D Cartesian (y = f(x))
89+
- 2D Parametric (x(t), y(t))
90+
- Polar (r = f(θ))
91+
- 3D surfaces (z = f(x,y))
92+
- Interactive pan, zoom, and trace features
93+
- Export graphs as SVG or PNG
94+
95+
- **`notebook.mathlive.io`** - Interactive Math Notebook
96+
- Jupyter-style cell-based interface
97+
- MathLive for mathematical input/output
98+
- Compute Engine for evaluations
99+
- Markdown cells for documentation
100+
- Save/load notebooks as JSON
101+
- Export to LaTeX, PDF, or HTML
102+
103+
### Shared Components Strategy
104+
105+
To ensure consistent header/footer across all applications:
106+
107+
**Shared Component Library** (`src/shared/`)
108+
- **Components**: Reusable Header and Footer components in React
109+
- **Configuration**: Centralized navigation config in JSON format
110+
- **Styles**: Shared CSS variables and brand styles
111+
112+
**Implementation:**
113+
```javascript
114+
// In any React app (Docusaurus or standalone)
115+
import { Header, Footer } from '../shared/components';
116+
117+
function App() {
118+
return (
119+
<>
120+
<Header currentApp="editor" />
121+
{/* App content */}
122+
<Footer />
123+
</>
124+
);
125+
}
126+
```
127+
128+
**Benefits:**
129+
- Single source of truth for navigation
130+
- Consistent branding across all apps
131+
- Easy updates propagate to all applications
132+
- Dark mode support built-in
133+
134+
### Implementation Phases
135+
136+
**Phase 1: Infrastructure Setup**
137+
- ✅ Create shared component library structure
138+
- ✅ Extract navigation configuration
139+
- ✅ Build reusable Header/Footer components
140+
- Configure build pipeline for multiple apps
141+
- Set up Cloudflare routing for subdomains
142+
143+
**Phase 2: MVP Development**
144+
- Start with editor.mathlive.io as proof of concept
145+
- Implement core split-pane functionality
146+
- Deploy and test subdomain routing
147+
148+
**Phase 3: Full Rollout**
149+
- Develop remaining applications
150+
- Add persistence and sharing features
151+
- Implement analytics and error tracking
152+
153+
**Phase 4: Enhancement**
154+
- User accounts and cloud storage
155+
- Collaborative features
156+
- API for embedding in other sites

docs/compute-engine/02-compute-engine-demo.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ console.info(expr.N());
168168
`,
169169
"eval-async": `$0
170170
const expr = $1;
171-
console.info(await expr.evaluateAsync());
171+
expr.evaluateAsync().then(result => console.info(result));
172172
`
173173

174174
};

docs/compute-engine/05-guide-canonical-form.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,3 +272,25 @@ ce.parse(latex,
272272
).print();
273273
```
274274

275+
## Custom Transformations
276+
277+
You can also define your own transformations to apply to an expression to
278+
obtain a custom canonical form.
279+
280+
For example, let's say you want to the structural form of two expressions
281+
but ignoring any extra parentheses. You could define a transformation like this:
282+
283+
```js
284+
const deparenthesize = (expr) =>
285+
expr.map((e) => (e.operator === 'Delimiter' ? e.op1 : e));
286+
```
287+
You can then apply this transformation to an expression like this:
288+
289+
```js
290+
const expr1 = ce.parse('3+4\\times2', { canonical: false });
291+
const expr2 = ce.parse('3+(4\\times(2))', { canonical: false });
292+
const transformedExpr1 = deparenthesize(expr1);
293+
const transformedExpr2 = deparenthesize(expr2);
294+
console.log(transformedExpr1.isSame(transformedExpr2));
295+
// ➔ true
296+
```

0 commit comments

Comments
 (0)