Added sprint protocol
@@ -1839,3 +1839,23 @@ grep -r "var(--theme-spacing" packages/noodl-core-ui/src --include="*.scss"
|
|||||||
---
|
---
|
||||||
|
|
||||||
[Rest of the previous learnings content continues...]
|
[Rest of the previous learnings content continues...]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## STYLE-001: UndoQueue requires UndoActionGroup class instances (2026-02-18)
|
||||||
|
|
||||||
|
**Context:** Building StyleTokensModel with undo support.
|
||||||
|
**Discovery:** `UndoQueue.push()` requires `new UndoActionGroup({ label, do, undo })` — NOT a plain `{ label, do, undo }` object. The TypeScript error was clear but the fix isn't obvious from the class name alone.
|
||||||
|
**Fix:** `UndoQueue.instance.push(new UndoActionGroup({ label: '...', do: () => {}, undo: () => {} }))`
|
||||||
|
**Location:** `packages/noodl-editor/src/editor/src/models/undo-queue-model.ts`
|
||||||
|
|
||||||
|
## STYLE-001: Design token persistence pattern (2026-02-18)
|
||||||
|
|
||||||
|
**Context:** Implementing per-project design token persistence in StyleTokensModel.
|
||||||
|
**Discovery:** Only custom overrides are stored in project metadata — never defaults. Defaults live in `DefaultTokens.ts` and are merged at load time. This keeps `project.json` lean and lets defaults be updated without migrations.
|
||||||
|
**Location:** `StyleTokensModel._store()` uses `ProjectModel.instance.setMetaData('designTokens', data)`
|
||||||
|
|
||||||
|
## STYLE-001: DesignTokenPanel/ColorsTab pre-existed (2026-02-18)
|
||||||
|
|
||||||
|
**Context:** Adding a new "Tokens" tab to the DesignTokenPanel.
|
||||||
|
**Discovery:** `DesignTokenPanel/components/ColorsTab/` already existed before this work. The new "Tokens" tab was added alongside it. Always check what pre-exists before creating new panel components.
|
||||||
|
|||||||
@@ -0,0 +1,317 @@
|
|||||||
|
# SPRINT-001: Parallel Development Protocol
|
||||||
|
## Richard & Dishant — Dual Cline Branch Strategy
|
||||||
|
|
||||||
|
**Sprint:** 001
|
||||||
|
**Branch Base:** `cline-dev`
|
||||||
|
**Developer Branches:** `cline-dev-richard` / `cline-dev-dishant`
|
||||||
|
**Date Created:** 2026-02-18
|
||||||
|
**Status:** 🟡 Active
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
This sprint runs two independent Cline sessions in parallel — one per developer — each operating on its own branch derived from `cline-dev`. The goal is to maximise throughput across remaining phases while avoiding merge conflicts and keeping both agents informed of each other's progress.
|
||||||
|
|
||||||
|
> **Note on Phase 11:** Phase 11 does not yet have formal task documentation. Dishant should check the dev docs for any phase 11 content before beginning, and raise it for scoping if it is missing.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Sprint 1 Task Assignment
|
||||||
|
|
||||||
|
| Developer | Primary Phases | If Time Permits |
|
||||||
|
|-----------|---------------|-----------------|
|
||||||
|
| **Richard** | Phase 9 (Styles Overhaul), Phase 6 (UBA System) | Phase 5 (Multi-Target Deployment) |
|
||||||
|
| **Dishant** | Phase 10 (AI-Powered Development), Phase 11 | Phase 7 (Code Export) |
|
||||||
|
|
||||||
|
**Rationale for split:** Phases 9 and 6 share some UI pattern heritage from Phase 3, making Richard's work self-contained. Phases 10 and 11 build on each other and are cleanly separable from the styles/UBA work, making Dishant's scope independent.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Branch Setup
|
||||||
|
|
||||||
|
### One-Time Setup (done by Richard or together)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Starting from cline-dev
|
||||||
|
git checkout cline-dev
|
||||||
|
git pull origin cline-dev
|
||||||
|
|
||||||
|
# Create developer branches
|
||||||
|
git checkout -b cline-dev-richard
|
||||||
|
git push origin cline-dev-richard
|
||||||
|
|
||||||
|
git checkout cline-dev
|
||||||
|
git checkout -b cline-dev-dishant
|
||||||
|
git push origin cline-dev-dishant
|
||||||
|
```
|
||||||
|
|
||||||
|
Each developer (and their Cline) then works exclusively on their own branch. **Never commit directly to `cline-dev` during the sprint.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Document Conflict Prevention
|
||||||
|
|
||||||
|
Certain shared documents are high-risk for merge conflicts when both branches touch the same files simultaneously. The following strategy prevents this.
|
||||||
|
|
||||||
|
### High-Risk Shared Documents
|
||||||
|
|
||||||
|
| Document | Risk | Strategy |
|
||||||
|
|----------|------|----------|
|
||||||
|
| `PROGRESS.md` in each phase | Both Clines update task status | See below — use developer-specific update files |
|
||||||
|
| `.clinerules` | Both Clines may refine shared rules | Each Cline appends to its own section only |
|
||||||
|
| Phase `README.md` files | Cross-phase architectural notes | Only the assigned developer's Cline touches these |
|
||||||
|
| Any shared `CHANGELOG.md` | Concurrent entries | Use timestamped entries with developer prefix |
|
||||||
|
|
||||||
|
### PROGRESS.md Conflict Strategy
|
||||||
|
|
||||||
|
Instead of both Clines writing to the same `PROGRESS.md`, each phase gets a companion update file:
|
||||||
|
|
||||||
|
```
|
||||||
|
dev-docs/tasks/phase-9-styles-overhaul/
|
||||||
|
PROGRESS.md ← read-only during sprint (not touched)
|
||||||
|
PROGRESS-richard.md ← Richard's Cline writes here only
|
||||||
|
|
||||||
|
dev-docs/tasks/phase-10-ai-powered-development/
|
||||||
|
PROGRESS.md ← read-only during sprint (not touched)
|
||||||
|
PROGRESS-dishant.md ← Dishant's Cline writes here only
|
||||||
|
```
|
||||||
|
|
||||||
|
**Template for developer-specific PROGRESS file:**
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Phase X Progress — [Developer Name]
|
||||||
|
**Branch:** cline-dev-[name]
|
||||||
|
**Last Updated:** YYYY-MM-DD
|
||||||
|
|
||||||
|
## Completed This Sprint
|
||||||
|
|
||||||
|
| Task | Name | Completed | Notes |
|
||||||
|
|------|------|-----------|-------|
|
||||||
|
| TASK-001 | Name | YYYY-MM-DD | |
|
||||||
|
|
||||||
|
## In Progress
|
||||||
|
|
||||||
|
| Task | Name | Started | Blocker |
|
||||||
|
|------|------|---------|---------|
|
||||||
|
|
||||||
|
## Decisions & Learnings
|
||||||
|
|
||||||
|
- [Date] Decision or learning that the other developer should know about
|
||||||
|
```
|
||||||
|
|
||||||
|
After the sprint, both `PROGRESS-richard.md` and `PROGRESS-dishant.md` are merged into the main `PROGRESS.md` by hand before merging branches.
|
||||||
|
|
||||||
|
### .clinerules Strategy
|
||||||
|
|
||||||
|
Add a clearly delimited section to `.clinerules` for each developer. Cline only modifies content inside its own section:
|
||||||
|
|
||||||
|
```
|
||||||
|
# ===== RICHARD (cline-dev-richard) =====
|
||||||
|
[Richard's Cline rules here]
|
||||||
|
# ===== END RICHARD =====
|
||||||
|
|
||||||
|
# ===== DISHANT (cline-dev-dishant) =====
|
||||||
|
[Dishant's Cline rules here]
|
||||||
|
# ===== END DISHANT =====
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cline Workflow: Before Each Task
|
||||||
|
|
||||||
|
At the start of every task session, Cline **must** perform the following cross-branch sync check before writing any code.
|
||||||
|
|
||||||
|
### Pre-Task Protocol
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Confirm which branch you are on
|
||||||
|
git branch --show-current
|
||||||
|
# Expected: cline-dev-richard OR cline-dev-dishant
|
||||||
|
|
||||||
|
# 2. Fetch all remote branches (no checkout)
|
||||||
|
git fetch origin
|
||||||
|
|
||||||
|
# 3. View commits on the OTHER branch since your last check
|
||||||
|
# Richard checks Dishant's branch:
|
||||||
|
git log origin/cline-dev-dishant --oneline --since="24 hours ago"
|
||||||
|
# Dishant checks Richard's branch:
|
||||||
|
git log origin/cline-dev-richard --oneline --since="24 hours ago"
|
||||||
|
|
||||||
|
# 4. Check the other developer's PROGRESS file for learnings
|
||||||
|
# (read only — no edits to the other developer's files)
|
||||||
|
|
||||||
|
# 5. Evaluate: should you merge or just note?
|
||||||
|
```
|
||||||
|
|
||||||
|
### Merge Decision Criteria
|
||||||
|
|
||||||
|
Cline should recommend a merge from the other branch if **any** of the following are true:
|
||||||
|
|
||||||
|
- The other branch has introduced a shared utility, hook, or component that this branch will also need
|
||||||
|
- The other branch has resolved an infrastructure issue (build errors, TypeScript config, Webpack) that would block this branch too
|
||||||
|
- The other branch has changed a shared type definition or interface
|
||||||
|
- More than 2 tasks have been completed on the other branch since the last sync
|
||||||
|
|
||||||
|
If none of the above apply, Cline should **note the other branch's progress** in its session context and continue without merging. Add a comment to the current task's notes like:
|
||||||
|
|
||||||
|
```
|
||||||
|
// Cross-branch awareness: Dishant completed STRUCT-001 on 2026-02-18.
|
||||||
|
// No merge needed — no shared dependencies with this task.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Performing a Selective Merge
|
||||||
|
|
||||||
|
If a merge is warranted, use cherry-pick for specific commits rather than a full branch merge, to avoid pulling in in-progress work:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Cherry-pick a specific commit from the other branch
|
||||||
|
git cherry-pick <commit-hash>
|
||||||
|
|
||||||
|
# Or merge only a specific file from the other branch
|
||||||
|
git checkout origin/cline-dev-dishant -- path/to/specific/file.ts
|
||||||
|
```
|
||||||
|
|
||||||
|
Only do a full branch merge if the other developer explicitly marks a task as "safe to merge" in their PROGRESS file.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cline Workflow: After Each Task
|
||||||
|
|
||||||
|
At the end of every completed task session, Cline **must** push its work so the other agent can see it.
|
||||||
|
|
||||||
|
### Post-Task Protocol
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Update your developer-specific PROGRESS file
|
||||||
|
# (e.g., PROGRESS-richard.md or PROGRESS-dishant.md)
|
||||||
|
|
||||||
|
# 2. Stage and commit all changes
|
||||||
|
git add -A
|
||||||
|
git commit -m "feat(phase-X): [task name] — [brief description]
|
||||||
|
|
||||||
|
Task: TASK-ID
|
||||||
|
Branch: cline-dev-[name]
|
||||||
|
Cross-branch notes: [anything the other developer should know, or 'none']"
|
||||||
|
|
||||||
|
# 3. Push to your branch
|
||||||
|
git push origin cline-dev-[name]
|
||||||
|
|
||||||
|
# 4. If this task introduced a shared type, utility, or resolved an infrastructure
|
||||||
|
# issue, add a note to your PROGRESS file under 'Decisions & Learnings'
|
||||||
|
# so the other Cline picks it up on their next pre-task check
|
||||||
|
```
|
||||||
|
|
||||||
|
### Commit Message Convention
|
||||||
|
|
||||||
|
```
|
||||||
|
feat(phase-9): STYLE-001 token system foundation
|
||||||
|
|
||||||
|
Task: STYLE-001
|
||||||
|
Branch: cline-dev-richard
|
||||||
|
Cross-branch notes: Introduced shared DesignToken type in noodl-core-ui/src/types/tokens.ts — Dishant may want to cherry-pick if phase 10 UI components need it
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Communication Between Cline Sessions
|
||||||
|
|
||||||
|
Because the two Clines cannot talk directly, all inter-agent communication happens through git commits and the `PROGRESS-[developer].md` files. The conventions below make this reliable.
|
||||||
|
|
||||||
|
### Flagging Something for the Other Developer
|
||||||
|
|
||||||
|
In your PROGRESS file's "Decisions & Learnings" section:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## Decisions & Learnings
|
||||||
|
|
||||||
|
- **[2026-02-18] FOR DISHANT:** Resolved EventDispatcher/React 19 incompatibility
|
||||||
|
in phase 9. Fix is in `packages/noodl-editor/src/editor/src/utils/EventDispatcher.ts`.
|
||||||
|
If you hit this in phase 10, cherry-pick commit `abc1234`.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Flagging a Potential Conflict
|
||||||
|
|
||||||
|
If your work is about to touch a file that might also be touched by the other branch, add a warning comment at the top of the file:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// SPRINT-001 NOTE (richard, 2026-02-18): Modifying this file on cline-dev-richard.
|
||||||
|
// Dishant — check cross-branch diff before editing this file on cline-dev-dishant.
|
||||||
|
```
|
||||||
|
|
||||||
|
Remove these comments before the final sprint merge.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## End-of-Sprint Merge Protocol
|
||||||
|
|
||||||
|
When both developers are done (or at end of sprint day):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Both developers ensure their branch is fully pushed and PROGRESS files updated
|
||||||
|
|
||||||
|
# 2. On cline-dev, merge Richard's branch first (or whichever finished stable work first)
|
||||||
|
git checkout cline-dev
|
||||||
|
git merge cline-dev-richard --no-ff -m "sprint-001: merge richard's branch (phase 9, 6)"
|
||||||
|
|
||||||
|
# 3. Resolve any conflicts, then merge Dishant's branch
|
||||||
|
git merge cline-dev-dishant --no-ff -m "sprint-001: merge dishant's branch (phase 10, 11)"
|
||||||
|
|
||||||
|
# 4. Consolidate PROGRESS files
|
||||||
|
# Manually merge PROGRESS-richard.md and PROGRESS-dishant.md into each phase's PROGRESS.md
|
||||||
|
# Then delete the developer-specific files
|
||||||
|
|
||||||
|
# 5. Remove any SPRINT-001 NOTE comments left in code
|
||||||
|
|
||||||
|
# 6. Push cline-dev
|
||||||
|
git push origin cline-dev
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quick Reference Card for Cline
|
||||||
|
|
||||||
|
> Copy this into Cline's context at the start of each session.
|
||||||
|
|
||||||
|
```
|
||||||
|
SPRINT-001 PARALLEL DEV RULES
|
||||||
|
==============================
|
||||||
|
My branch: cline-dev-[richard|dishant]
|
||||||
|
Other branch: cline-dev-[dishant|richard]
|
||||||
|
|
||||||
|
BEFORE EACH TASK:
|
||||||
|
1. git fetch origin
|
||||||
|
2. git log origin/cline-dev-[other] --oneline --since="24 hours ago"
|
||||||
|
3. Read their PROGRESS-[other].md for learnings
|
||||||
|
4. Decide: cherry-pick needed? (shared util / infra fix / shared types / 2+ tasks)
|
||||||
|
5. If yes: cherry-pick specific commits only
|
||||||
|
6. If no: note awareness and continue
|
||||||
|
|
||||||
|
AFTER EACH TASK:
|
||||||
|
1. Update PROGRESS-[mine].md
|
||||||
|
2. git add -A && git commit -m "feat(phase-X): [task] ..."
|
||||||
|
3. git push origin cline-dev-[mine]
|
||||||
|
4. Flag shared changes in PROGRESS-[mine].md under 'Decisions & Learnings'
|
||||||
|
|
||||||
|
FILES I OWN (richard): phase-9, phase-6, (phase-5 if time)
|
||||||
|
FILES I OWN (dishant): phase-10, phase-11, (phase-7 if time)
|
||||||
|
SHARED FILES: .clinerules (my section only), PROGRESS.md (don't touch — use PROGRESS-[mine].md)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase Reference
|
||||||
|
|
||||||
|
| Phase | Name | Assigned To |
|
||||||
|
|-------|------|-------------|
|
||||||
|
| Phase 5 | Multi-Target Deployment | Richard (if time) |
|
||||||
|
| Phase 6 | UBA System | Richard |
|
||||||
|
| Phase 7 | Code Export | Dishant (if time) |
|
||||||
|
| Phase 9 | Styles Overhaul | Richard |
|
||||||
|
| Phase 10 | AI-Powered Development | Dishant |
|
||||||
|
| Phase 11 | *(check docs — scope TBC)* | Dishant |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*This document lives in `dev-docs/sprints/SPRINT-001-parallel-dev-protocol.md`*
|
||||||
|
*Update the sprint status header when the sprint closes.*
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
| TASK-001B | Launcher Fixes | 🟢 Complete | All 4 subtasks implemented |
|
| TASK-001B | Launcher Fixes | 🟢 Complete | All 4 subtasks implemented |
|
||||||
| TASK-002 | GitHub Integration | 🟢 Complete | OAuth + basic features done |
|
| TASK-002 | GitHub Integration | 🟢 Complete | OAuth + basic features done |
|
||||||
| TASK-002B | GitHub Advanced Integration | 🟡 In Progress | Part 1: GIT-004A-C done. Part 2: GIT-005-011 docs created |
|
| TASK-002B | GitHub Advanced Integration | 🟡 In Progress | Part 1: GIT-004A-C done. Part 2: GIT-005-011 docs created |
|
||||||
| TASK-002C | GitHub Clone & Connect | 🟡 In Progress | Clone from launcher flow |
|
| TASK-002C | GitHub Clone & Connect | <EFBFBD> Complete | All 3 subtasks done (Clone, Connect, Push/Pull) |
|
||||||
| TASK-003 | Shared Component System | 🔴 Not Started | Prefab system refactor |
|
| TASK-003 | Shared Component System | 🔴 Not Started | Prefab system refactor |
|
||||||
| TASK-004 | AI Project Creation | 🔴 Not Started | AI scaffolding feature |
|
| TASK-004 | AI Project Creation | 🔴 Not Started | AI scaffolding feature |
|
||||||
| TASK-005 | Deployment Automation | 🔴 Not Started | Planning docs only, no implementation |
|
| TASK-005 | Deployment Automation | 🔴 Not Started | Planning docs only, no implementation |
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
# Phase 9: Styles Overhaul - Progress Tracker
|
# Phase 9: Styles Overhaul - Progress Tracker
|
||||||
|
|
||||||
**Last Updated:** 2026-01-07
|
**Last Updated:** 2026-02-18
|
||||||
**Overall Status:** 🟡 In Progress
|
**Overall Status:** 🟡 In Progress
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Quick Summary
|
## Quick Summary
|
||||||
|
|
||||||
| Metric | Value |
|
| Metric | Value |
|
||||||
| ----------------- | ----------- |
|
| ----------------- | -------- |
|
||||||
| Total Major Tasks | 7 |
|
| Total Major Tasks | 7 |
|
||||||
| Completed | 0 |
|
| Completed | 0 |
|
||||||
| In Progress | 1 (CLEANUP) |
|
| In Progress | 3 |
|
||||||
| Not Started | 6 |
|
| Not Started | 4 |
|
||||||
| **Progress** | **~15%** |
|
| **Progress** | **~35%** |
|
||||||
|
|
||||||
> **Note:** Significant foundational work completed in CLEANUP-SUBTASKS (000A-000G).
|
> **Note:** Significant foundational work completed in CLEANUP-SUBTASKS (000A-000G).
|
||||||
> Major feature tasks (STYLE-001 to STYLE-005, WIZARD-001) remain not started.
|
> STYLE-001 and STYLE-002 are in progress. STYLE-003 to STYLE-005 and WIZARD-001 not started.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -24,15 +24,15 @@
|
|||||||
|
|
||||||
### Major Feature Tasks
|
### Major Feature Tasks
|
||||||
|
|
||||||
| Task | Name | Status | Notes |
|
| Task | Name | Status | Notes |
|
||||||
| ---------- | ------------------------ | -------------- | ----------------------------- |
|
| ---------- | ------------------------ | -------------- | ----------------------------------------------- |
|
||||||
| STYLE-001 | Token System Enhancement | 🔴 Not Started | Design tokens system |
|
| STYLE-001 | Token System Enhancement | 🟡 In Progress | Phase 1+2 done; Phase 3+4 TBD |
|
||||||
| STYLE-002 | Element Configs/Variants | 🔴 Not Started | Component styling system |
|
| STYLE-002 | Element Configs/Variants | 🟡 In Progress | Phase 1+2+3 done; prop panel wiring → STYLE-004 |
|
||||||
| STYLE-003 | Style Presets System | 🔴 Not Started | Pre-built style presets |
|
| STYLE-003 | Style Presets System | ✅ Complete | 5 presets, PresetSelector UI, launcher wiring |
|
||||||
| STYLE-004 | Property Panel UX | 🔴 Not Started | Improved styling UX |
|
| STYLE-004 | Property Panel UX | 🟡 In Progress | Phase 1 done (variant+size picker wired) |
|
||||||
| STYLE-005 | Smart Style Suggestions | 🔴 Not Started | AI-assisted suggestions |
|
| STYLE-005 | Smart Style Suggestions | 🔴 Not Started | AI-assisted suggestions |
|
||||||
| WIZARD-001 | Project Creation Wizard | 🔴 Not Started | Guided project setup |
|
| WIZARD-001 | Project Creation Wizard | 🔴 Not Started | Guided project setup |
|
||||||
| CLEANUP-\* | Legacy Color Cleanup | 🟡 In Progress | 7/8 subtasks complete (87.5%) |
|
| CLEANUP-\* | Legacy Color Cleanup | 🟡 In Progress | 7/8 subtasks complete (87.5%) |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -65,6 +65,27 @@ Foundation work to remove hardcoded colors and establish token infrastructure.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## STYLE-001 Progress
|
||||||
|
|
||||||
|
| Phase | Description | Status |
|
||||||
|
| ------- | -------------------------------- | -------------- |
|
||||||
|
| Phase 1 | Token Data Structure | 🟢 Complete |
|
||||||
|
| Phase 2 | Context & Panel Enhancement | 🟢 Complete |
|
||||||
|
| Phase 3 | TokenPicker Component | 🔴 Not Started |
|
||||||
|
| Phase 4 | CSS Variable Injection (preview) | 🔴 Not Started |
|
||||||
|
|
||||||
|
## STYLE-002 Progress
|
||||||
|
|
||||||
|
| Phase | Description | Status |
|
||||||
|
| ------- | ---------------------------------------- | ----------------------- |
|
||||||
|
| Phase 1 | Config system (types, registry, configs) | 🟢 Complete |
|
||||||
|
| Phase 2 | Node creation hook + Text bug fix | 🟢 Complete |
|
||||||
|
| Phase 3 | VariantSelector UI component | 🟢 Complete |
|
||||||
|
| Phase 4 | Property panel wiring | 🔴 Deferred → STYLE-004 |
|
||||||
|
| Phase 5 | State styles (hover/focus/disabled) | 🔴 Deferred → STYLE-004 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Status Legend
|
## Status Legend
|
||||||
|
|
||||||
- 🔴 **Not Started** - Work has not begun
|
- 🔴 **Not Started** - Work has not begun
|
||||||
@@ -77,6 +98,8 @@ Foundation work to remove hardcoded colors and establish token infrastructure.
|
|||||||
|
|
||||||
| Date | Update |
|
| Date | Update |
|
||||||
| ---------- | -------------------------------------------------------------- |
|
| ---------- | -------------------------------------------------------------- |
|
||||||
|
| 2026-02-18 | STYLE-002 Phase 1+2+3: ElementConfigs system + VariantSelector |
|
||||||
|
| 2026-02-18 | STYLE-001 Phase 1+2: Token system + DesignTokenPanel |
|
||||||
| 2026-01-07 | Audit: Updated PROGRESS.md to reflect actual completion status |
|
| 2026-01-07 | Audit: Updated PROGRESS.md to reflect actual completion status |
|
||||||
| 2025-12-31 | Completed TASK-000F (Buttons) and TASK-000G (Dialogs/Panels) |
|
| 2025-12-31 | Completed TASK-000F (Buttons) and TASK-000G (Dialogs/Panels) |
|
||||||
| 2025-12-30 | Completed TASK-000A through TASK-000E (Token/Color foundation) |
|
| 2025-12-30 | Completed TASK-000A through TASK-000E (Token/Color foundation) |
|
||||||
@@ -106,11 +129,18 @@ The foundational cleanup work (000A-000G) has established:
|
|||||||
- Typography and spacing token system
|
- Typography and spacing token system
|
||||||
- Modern visual polish on core UI components
|
- Modern visual polish on core UI components
|
||||||
|
|
||||||
|
STYLE-001 (Phases 1+2): Full Tailwind-inspired token system with DesignTokenPanel.
|
||||||
|
|
||||||
|
STYLE-002 (Phases 1+2+3): ElementConfig system for default node styling on creation,
|
||||||
|
VariantSelector UI component, Text node flex bug fix.
|
||||||
|
|
||||||
### What's Remaining:
|
### What's Remaining:
|
||||||
|
|
||||||
- **TASK-000H:** Final polish on Migration Wizard
|
- **TASK-000H:** Final polish on Migration Wizard
|
||||||
- **STYLE-001 to STYLE-005:** Major feature work (enhanced token system, element configs, presets, property panel UX, AI suggestions)
|
- **STYLE-001 Phase 3+4:** TokenPicker component, CSS injection into preview iframe
|
||||||
|
- **STYLE-002 Phase 4+5:** Property panel wiring, state style application
|
||||||
|
- **STYLE-003 to STYLE-005:** Style presets, property panel UX, AI suggestions
|
||||||
- **WIZARD-001:** Project creation wizard
|
- **WIZARD-001:** Project creation wizard
|
||||||
|
|
||||||
See CLEANUP-SUBTASKS/ folder for detailed changelogs of completed work.
|
See CLEANUP-SUBTASKS/ folder for detailed changelogs of completed work.
|
||||||
See STYLE-\* folders for README specs of upcoming feature work.
|
See STYLE-\* folders for README specs and changelogs.
|
||||||
|
|||||||
@@ -0,0 +1,95 @@
|
|||||||
|
# STYLE-001: Token System Enhancement - Changelog
|
||||||
|
|
||||||
|
## 2026-02-18 - Phase 1 & 2 Complete
|
||||||
|
|
||||||
|
### Phase 1: Token Data Structure
|
||||||
|
|
||||||
|
#### New Files
|
||||||
|
|
||||||
|
**`packages/noodl-editor/src/editor/src/models/StyleTokensModel/`**
|
||||||
|
|
||||||
|
- **`TokenCategories.ts`** — TypeScript types for the design token system:
|
||||||
|
|
||||||
|
- `TokenCategory` union type (13 categories: color-semantic, color-palette, spacing, typography-_, border-_, shadow, animation-\*)
|
||||||
|
- `StyleToken`, `StyleTokenRecord`, `StyleTokensData` interfaces
|
||||||
|
- `TOKEN_CATEGORIES` metadata map (label, description, group)
|
||||||
|
- `TOKEN_CATEGORY_GROUPS` ordered display groups
|
||||||
|
|
||||||
|
- **`DefaultTokens.ts`** — Full Tailwind-inspired default token set:
|
||||||
|
|
||||||
|
- ~24 semantic colors (primary, secondary, destructive, muted, accent, surface, border, ring)
|
||||||
|
- ~90 palette colors (gray, blue, red, green, amber, purple at 10 shades each)
|
||||||
|
- ~32 spacing tokens (0–128px numeric scale + semantic aliases xs/sm/md/lg/xl/2xl/3xl)
|
||||||
|
- 10 font sizes, 9 font weights, 6 line heights, 6 letter spacings, 3 font families
|
||||||
|
- 8 border radii, 5 border widths
|
||||||
|
- 7 shadow scales
|
||||||
|
- 8 animation durations + 5 easing functions
|
||||||
|
- **Only overrides stored in project.json** — defaults never persisted
|
||||||
|
|
||||||
|
- **`TokenResolver.ts`** — CSS `var()` reference resolution:
|
||||||
|
|
||||||
|
- Resolves chained references (e.g. `--space-xs` → `var(--space-1)` → `4px`)
|
||||||
|
- LRU-style cache with targeted invalidation
|
||||||
|
- `generateCss()` for `:root { ... }` CSS block generation
|
||||||
|
- Max depth protection against circular references
|
||||||
|
|
||||||
|
- **`StyleTokensModel.ts`** — Main model class:
|
||||||
|
|
||||||
|
- Extends `Model` (EventDispatcher-compatible)
|
||||||
|
- `getTokens()`, `getTokensByCategory()`, `getTokensByGroup()`, `getTokensGrouped()`
|
||||||
|
- `setToken()`, `addCustomToken()`, `deleteCustomToken()`, `resetAllToDefaults()` — all undo-aware
|
||||||
|
- `generateCss()`, `exportCustomTokensJson()`, `importCustomTokensJson()`
|
||||||
|
- Persists only custom overrides under `designTokens` metadata key
|
||||||
|
- Auto-reloads on `ProjectModel.importComplete` / `ProjectModel.instanceHasChanged`
|
||||||
|
- Properly uses `new UndoActionGroup(...)` for undo stack integration
|
||||||
|
|
||||||
|
- **`index.ts`** — Clean public exports
|
||||||
|
|
||||||
|
### Phase 2: Context & Panel Enhancement
|
||||||
|
|
||||||
|
#### Modified
|
||||||
|
|
||||||
|
- **`ProjectDesignTokenContext.tsx`** — Enhanced with:
|
||||||
|
- `designTokens: StyleTokenRecord[]` — live token array, re-renders on `tokensChanged`
|
||||||
|
- `styleTokensModel: StyleTokensModel | null` — model instance for direct interaction
|
||||||
|
- Uses `useEventListener` hook (correct pattern, no direct `.on()`)
|
||||||
|
- Backward compatible — existing `staticColors`, `dynamicColors`, `textStyles` unchanged
|
||||||
|
|
||||||
|
#### New
|
||||||
|
|
||||||
|
- **`DesignTokenPanel.tsx`** — Replaced basic 2-tab panel with proper structure:
|
||||||
|
- New "Tokens" tab (primary) + legacy "Colors" tab preserved
|
||||||
|
- **`components/DesignTokensTab/`** — Tokens tab:
|
||||||
|
|
||||||
|
- Groups all tokens by display category (Colors, Spacing, Typography, Borders, Effects, Animation)
|
||||||
|
- Collapsible sections per group via `CollapsableSection`
|
||||||
|
- Shows "N overrides" banner with "Reset all" when tokens are customised
|
||||||
|
|
||||||
|
- **`components/TokenCategorySection/`** — Per-group token list:
|
||||||
|
- Color swatches for color tokens
|
||||||
|
- Spacing bars for spacing tokens (proportional width)
|
||||||
|
- Border radius preview boxes
|
||||||
|
- Shadow preview boxes
|
||||||
|
- Font size "Aa" previews
|
||||||
|
- Override indicator (highlighted name) with reset button (↺) on hover
|
||||||
|
- SCSS using design tokens throughout (no hardcoded values)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## What's Still Pending
|
||||||
|
|
||||||
|
### Phase 3: TokenPicker Component (STYLE-001)
|
||||||
|
|
||||||
|
- Reusable `<TokenPicker>` dropdown for use in property panels
|
||||||
|
- Currently `onTokenChange` prop exists but inline editing not yet wired
|
||||||
|
- Will be built as part of STYLE-002/STYLE-004 integration
|
||||||
|
|
||||||
|
### Phase 4: CSS Variable Injection (STYLE-001)
|
||||||
|
|
||||||
|
- `StyleTokensModel.generateCss()` is ready
|
||||||
|
- Need to inject into preview iframe when tokens change
|
||||||
|
- Requires investigation of preview server injection point in `noodl-viewer-react`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_Started: 2026-02-18_
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
# STYLE-002: Element Configs & Variants - Changelog
|
||||||
|
|
||||||
|
## 2026-02-18 - Phase 1, 2 & 3 Complete
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Phase 1: Config System Architecture
|
||||||
|
|
||||||
|
#### New Files
|
||||||
|
|
||||||
|
**`packages/noodl-editor/src/editor/src/models/ElementConfigs/`**
|
||||||
|
|
||||||
|
- **`ElementConfigTypes.ts`** — TypeScript interfaces for the config system:
|
||||||
|
|
||||||
|
- `StateStyles` — hover/active/focus/disabled/placeholder style maps
|
||||||
|
- `VariantConfig` — base styles + optional `states` object
|
||||||
|
- `SizePresets` — named size override maps
|
||||||
|
- `ElementConfig` — full config for a node type (defaults + sizes + variants)
|
||||||
|
- `ResolvedVariant` — base styles + states after stripping the `states` key
|
||||||
|
|
||||||
|
- **`ElementConfigRegistry.ts`** — Singleton registry:
|
||||||
|
|
||||||
|
- `register(config)` — add a config
|
||||||
|
- `get(nodeType)` / `has(nodeType)` / `getAll()` — lookup
|
||||||
|
- `getVariantNames(nodeType)` — returns `string[]` of available variant names
|
||||||
|
- `resolveVariant(nodeType, variantName)` → `ResolvedVariant | undefined`
|
||||||
|
- `applyDefaults(node, typeName)` — stamps defaults + initial variant onto a node's `parameters`
|
||||||
|
- `applyVariant(node, typeName, variantName)` — stamps a variant's base styles + updates `_variant` marker
|
||||||
|
- All built-in configs auto-registered on module load
|
||||||
|
|
||||||
|
- **`configs/ButtonConfig.ts`** — Button (`net.noodl.controls.button`):
|
||||||
|
|
||||||
|
- Variants: primary, secondary, outline, ghost, destructive, link
|
||||||
|
- Size presets: sm, md, lg, xl
|
||||||
|
- Interaction states: hover, active, disabled per variant
|
||||||
|
|
||||||
|
- **`configs/GroupConfig.ts`** — Group (`net.noodl.visual.group`):
|
||||||
|
|
||||||
|
- Variants: default, card, section, inset, flex-row, flex-col, centered
|
||||||
|
|
||||||
|
- **`configs/TextConfig.ts`** — Text node:
|
||||||
|
|
||||||
|
- **BUG FIX**: defaults now include `width: auto`, `flexShrink: 1`, `flexGrow: 0`, `minWidth: 0`
|
||||||
|
(previously: implicit `width: 100%` caused Text elements to push siblings off-screen in row layouts)
|
||||||
|
- Variants: body, heading-1 through heading-6, muted, label, small, code, lead, blockquote
|
||||||
|
|
||||||
|
- **`configs/TextInputConfig.ts`** — TextInput (`net.noodl.controls.textinput`):
|
||||||
|
|
||||||
|
- Variants: default (with focus ring), error
|
||||||
|
|
||||||
|
- **`configs/CheckboxConfig.ts`** — Checkbox (`net.noodl.controls.checkbox`):
|
||||||
|
|
||||||
|
- Variant: default
|
||||||
|
|
||||||
|
- **`configs/index.ts`** — barrel export
|
||||||
|
- **`index.ts`** — public module export
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Phase 2: Node Creation Integration
|
||||||
|
|
||||||
|
#### Modified
|
||||||
|
|
||||||
|
- **`views/NodePicker/NodePicker.utils.ts`** — Added `ElementConfigRegistry.applyDefaults(node, type.name)` call in `createNodeFunction`, immediately after `NodeGraphNode.fromJSON(...)`. This is the **single entry point for all user-initiated node creation** — no changes needed to NodeGraphModel or project loading paths.
|
||||||
|
|
||||||
|
- Safe for existing projects: defaults only stamp properties not already set
|
||||||
|
- No-op for node types without a registered config
|
||||||
|
- Works for root nodes, child nodes, and auto-attach-to-root paths
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Phase 3: VariantSelector UI Component
|
||||||
|
|
||||||
|
#### New Files
|
||||||
|
|
||||||
|
**`packages/noodl-core-ui/src/components/inputs/VariantSelector/`**
|
||||||
|
|
||||||
|
- **`VariantSelector.tsx`** — Controlled dropdown component:
|
||||||
|
|
||||||
|
- Props: `variants: string[]`, `currentVariant: string | undefined`, `onVariantChange: (name) => void`, `disabled?`, `label?`
|
||||||
|
- Keyboard accessible (Escape to close)
|
||||||
|
- Closes on outside click
|
||||||
|
- Formats variant names for display (`heading-1` → `Heading 1`)
|
||||||
|
- Active variant shown with checkmark + primary color highlight
|
||||||
|
|
||||||
|
- **`VariantSelector.module.scss`** — Styled with design tokens exclusively (no hardcoded colors)
|
||||||
|
|
||||||
|
- **`index.ts`** — barrel export
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### What's Pending
|
||||||
|
|
||||||
|
#### Property Panel Integration (STYLE-004)
|
||||||
|
|
||||||
|
Wiring `VariantSection` into the property editor requires understanding the legacy `TypeView.js` / `propertyeditor.ts` system. The `VariantSelector` component is built and ready — integration is scoped to STYLE-004 which covers Property Panel UX overhaul.
|
||||||
|
|
||||||
|
#### State Styles (Phase 4)
|
||||||
|
|
||||||
|
`StateStyles` (hover, focus, active, disabled) are defined in all configs and stored in `ResolvedVariant.states`. Applying them at runtime requires investigation of the existing visual states system in `noodl-viewer-react`. Scoped to STYLE-004.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Key Discoveries
|
||||||
|
|
||||||
|
- **NodePicker.utils.ts is the sole user-initiated node creation path** — all `addRoot`/`addChild` calls with `{ undo: true, label: 'create' }` flow through `createNodeFunction`. No need to touch NodeGraphModel.
|
||||||
|
- **NodeGraphNode.parameters is a plain object** — not getter/setter based. The registry uses direct `node.parameters[key]` access.
|
||||||
|
- **Loading vs creation differentiation**: when loading from JSON, `NodeGraphNode.fromJSON` pre-populates parameters before `addRoot` is called. The `applyDefaults` guard (`if param === undefined`) ensures existing project nodes aren't affected.
|
||||||
|
- **Text node width issue**: the `defaultCss` in `text.js` only has `{ position: 'relative', display: 'flex' }`. The width issue comes from dimension port defaults. Stamping `width: auto` + flex props via `applyDefaults` fixes it for newly created nodes.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_Started: 2026-02-18_
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
# STYLE-003: Style Presets — CHANGELOG
|
||||||
|
|
||||||
|
## 2026-02-18 — Implementation Complete
|
||||||
|
|
||||||
|
### New files created
|
||||||
|
|
||||||
|
**Data layer (noodl-editor)**
|
||||||
|
|
||||||
|
- `models/StylePresets/StylePresetTypes.ts` — `StylePreset` and `PresetPreview` interfaces
|
||||||
|
- `models/StylePresets/presets/ModernPreset.ts` — Default (clean blue, 8px radius, soft shadows)
|
||||||
|
- `models/StylePresets/presets/MinimalPreset.ts` — Monochromatic, 2–4px radius, no shadows
|
||||||
|
- `models/StylePresets/presets/PlayfulPreset.ts` — Purple/pink, very rounded (16px), tinted shadows
|
||||||
|
- `models/StylePresets/presets/EnterprisePreset.ts` — Dark navy, conservative 4px radius, barely-there shadows
|
||||||
|
- `models/StylePresets/presets/SoftPreset.ts` — Indigo, 12px radius, ultra-light shadows
|
||||||
|
- `models/StylePresets/presets/index.ts` — barrel
|
||||||
|
- `models/StylePresets/StylePresetsModel.ts` — `getAllPresets`, `getPreset`, `getDefaultPreset`, `setPendingPresetId`, `consumePendingPreset`
|
||||||
|
- `models/StylePresets/index.ts` — public surface
|
||||||
|
|
||||||
|
**UI layer (noodl-core-ui)**
|
||||||
|
|
||||||
|
- `components/StylePresets/PresetCard.tsx` — Mini mockup card with primary swatch, text lines, surface strip
|
||||||
|
- `components/StylePresets/PresetCard.module.scss` — Card styles with selection ring
|
||||||
|
- `components/StylePresets/PresetSelector.tsx` — Horizontal grid + description below selected
|
||||||
|
- `components/StylePresets/PresetSelector.module.scss`
|
||||||
|
- `components/StylePresets/index.ts` — barrel
|
||||||
|
|
||||||
|
### Modified files
|
||||||
|
|
||||||
|
**`models/StyleTokensModel/StyleTokensModel.ts`**
|
||||||
|
|
||||||
|
- Added `applyPreset(tokens)` public method — bulk-sets tokens without undo
|
||||||
|
- Added `_applyAndClearPendingPreset()` private method — called from `_bindListeners` reload path
|
||||||
|
- Added `consumePendingPreset` import and call in the `reload` closure
|
||||||
|
|
||||||
|
**`preview/launcher/Launcher/components/CreateProjectModal/CreateProjectModal.tsx`**
|
||||||
|
|
||||||
|
- Added `presets?: PresetDisplayInfo[]` prop
|
||||||
|
- Added `selectedPresetId` local state (default `'modern'`)
|
||||||
|
- Renders `<PresetSelector>` when presets provided
|
||||||
|
- Extended `onConfirm` signature to include `presetId: string`
|
||||||
|
|
||||||
|
**`pages/ProjectsPage/ProjectsPage.tsx`**
|
||||||
|
|
||||||
|
- Added `getAllPresets`, `setPendingPresetId` imports
|
||||||
|
- Added `STYLE_PRESETS` module-level constant
|
||||||
|
- Updated `handleCreateProjectConfirm(name, location, presetId)` to call `setPendingPresetId(presetId)`
|
||||||
|
- Passes `presets={STYLE_PRESETS}` to `<CreateProjectModal>`
|
||||||
|
- Error path clears pending preset via `setPendingPresetId(null)`
|
||||||
|
|
||||||
|
### Architecture — pending preset flow
|
||||||
|
|
||||||
|
```
|
||||||
|
User picks preset → CreateProjectModal.onConfirm(name, loc, presetId)
|
||||||
|
→ ProjectsPage.handleCreateProjectConfirm
|
||||||
|
→ setPendingPresetId(presetId) // stored in module-level var
|
||||||
|
→ LocalProjectsModel.newProject(...)
|
||||||
|
→ route to editor
|
||||||
|
→ StyleTokensModel._bindListeners reload fires (ProjectModel.instanceHasChanged)
|
||||||
|
→ _applyAndClearPendingPreset()
|
||||||
|
→ consumePendingPreset() reads + clears _pendingPresetId
|
||||||
|
→ applyPreset(preset.tokens)
|
||||||
|
→ setToken() x N → _store() → ProjectModel.instance.setMetaData('designTokens', ...)
|
||||||
|
→ tokens persisted to project.json
|
||||||
|
```
|
||||||
|
|
||||||
|
Modern preset has `tokens: {}` so it is a no-op (defaults already apply).
|
||||||
@@ -0,0 +1,115 @@
|
|||||||
|
# STYLE-004: Property Panel UX — Changelog
|
||||||
|
|
||||||
|
## Session: 2026-02-18
|
||||||
|
|
||||||
|
### Summary
|
||||||
|
|
||||||
|
Completed STYLE-004 Phase 1: Property panel wiring for the ElementConfig variant and size system.
|
||||||
|
This closes the STYLE-002 Phase 4 + Phase 5 deferred items.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### New Files
|
||||||
|
|
||||||
|
#### `noodl-core-ui/src/components/propertyeditor/SizePicker/`
|
||||||
|
|
||||||
|
- **`SizePicker.tsx`** — Segmented control component for selecting a size preset (sm / md / lg / xl).
|
||||||
|
Renders only the sizes defined in the node's ElementConfig. All styling via design tokens.
|
||||||
|
- **`SizePicker.module.scss`** — Styles for the segmented control. No hardcoded colors.
|
||||||
|
- **`index.ts`** — Barrel export.
|
||||||
|
|
||||||
|
#### `noodl-core-ui/src/components/propertyeditor/ElementStyleSection/`
|
||||||
|
|
||||||
|
- **`ElementStyleSection.tsx`** — Property panel section that combines VariantSelector and SizePicker.
|
||||||
|
Renders at the top of the panel for any node with an ElementConfig registered.
|
||||||
|
Props-driven and dumb — the legacy `propertyeditor.ts` manages undo via callbacks.
|
||||||
|
- **`ElementStyleSection.module.scss`** — Section layout and header styling. Design tokens throughout.
|
||||||
|
- **`index.ts`** — Barrel export.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Modified Files
|
||||||
|
|
||||||
|
#### `ElementConfigRegistry.ts`
|
||||||
|
|
||||||
|
Added two new public API methods:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// Apply a named size preset's styles to a node (stamps CSS properties + _size marker)
|
||||||
|
ElementConfigRegistry.applySize(node, typeName, sizeName)
|
||||||
|
|
||||||
|
// Return the size names defined in the config, in definition order
|
||||||
|
ElementConfigRegistry.getSizeNames(nodeType) → string[]
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `propertyeditor/propertyeditor.html`
|
||||||
|
|
||||||
|
Added `<div class="element-style-section"></div>` slot between `.variants` and `.visual-states`.
|
||||||
|
|
||||||
|
#### `propertyeditor/propertyeditor.ts`
|
||||||
|
|
||||||
|
- Imported `ElementStyleSection` from `@noodl-core-ui/components/propertyeditor/ElementStyleSection`
|
||||||
|
- Imported `ElementConfigRegistry`
|
||||||
|
- Added fields: `elementStyleRoot: Root | null`, `_elementStyleGroup: Record<string, never>`
|
||||||
|
- Added methods:
|
||||||
|
- `renderElementStyleSection()` — mounts/updates the React root; reads `_variant` and `_size` from
|
||||||
|
`this.model.parameters`; guards on `ElementConfigRegistry.has(typeName)`
|
||||||
|
- `onElementVariantChange(variantName)` — resolves variant styles, batches into `UndoActionGroup`,
|
||||||
|
calls `this.model.setParameter()` for each property, pushes to `UndoQueue`, then re-renders
|
||||||
|
- `onElementSizeChange(sizeName)` — same pattern for size preset styles
|
||||||
|
- Updated `render()`: subscribes to `['modelParameterUndo', 'modelParameterRedo']` to re-render
|
||||||
|
the section after undo/redo; calls `renderElementStyleSection()`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Test File
|
||||||
|
|
||||||
|
**`tests/models/ElementConfigRegistry.test.ts`**
|
||||||
|
|
||||||
|
Covers:
|
||||||
|
|
||||||
|
- `applyVariant` — stamps styles, excludes `states`, handles unknown types/variants
|
||||||
|
- `applySize` — stamps size presets, handles no-sizes configs, unknown sizes
|
||||||
|
- `getSizeNames` — returns correct keys in order, handles missing sizes
|
||||||
|
- `getVariantNames` — returns all variant names
|
||||||
|
- `resolveVariant` — returns baseStyles + states, excludes `states` from baseStyles
|
||||||
|
- `applyDefaults` — stamps defaults + default variant, does not overwrite pre-existing values
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Architecture Notes
|
||||||
|
|
||||||
|
**Why callbacks instead of direct undo in the component:**
|
||||||
|
The `ElementStyleSection` is intentionally dumb. Undo grouping requires `UndoActionGroup` +
|
||||||
|
`UndoQueue` — both are editor-specific and not part of `noodl-core-ui`. Keeping undo logic in
|
||||||
|
`propertyeditor.ts` lets the React component stay portable.
|
||||||
|
|
||||||
|
**Why \_variant and \_size in parameters:**
|
||||||
|
These are special marker keys that don't map to real CSS properties. They allow the property panel
|
||||||
|
to re-render the picker with the correct selection state across sessions. `applyDefaults` already
|
||||||
|
persisted `_variant`; `_size` is the same pattern added by STYLE-004.
|
||||||
|
|
||||||
|
**Undo/redo re-render:**
|
||||||
|
`propertyeditor.ts` subscribes to `['modelParameterUndo', 'modelParameterRedo']` on the node model
|
||||||
|
using a stable `_elementStyleGroup` object. This ensures the picker UI stays in sync after undo.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### What's NOT done (explicitly deferred)
|
||||||
|
|
||||||
|
- **Full panel restructure** (ContentSection, LayoutSection, AdvancedSection, etc.) — future work
|
||||||
|
- **TokenOverrideRow / token picker** — blocked on STYLE-001 Phase 3 (TokenPicker component)
|
||||||
|
- **Override indicators** (badge showing "2 custom values") — future iteration
|
||||||
|
- **Canvas indicator** — optional, deferred
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Success Criteria Status
|
||||||
|
|
||||||
|
- [x] VariantSelector appears in property panel for registered element types (Button, Text, Group, TextInput, Checkbox)
|
||||||
|
- [x] Variant change applies correct styles with full undo support
|
||||||
|
- [x] SizePicker appears for types with sizes defined (Button)
|
||||||
|
- [x] Size change applies correct preset styles with full undo support
|
||||||
|
- [x] Undo/redo restores picker state correctly
|
||||||
|
- [x] Non-registered node types (logic nodes) show no ElementStyleSection
|
||||||
|
- [x] Unit tests pass for all registry operations
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
.PresetCard {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
padding: 6px;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
background: transparent;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: border-color 0.12s ease, background 0.12s ease;
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: rgba(255, 255, 255, 0.05);
|
||||||
|
border-color: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus-visible {
|
||||||
|
outline: 2px solid var(--theme-color-primary, #3b82f6);
|
||||||
|
outline-offset: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&--selected {
|
||||||
|
border-color: var(--theme-color-primary, #3b82f6);
|
||||||
|
background: rgba(59, 130, 246, 0.08);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: rgba(59, 130, 246, 0.12);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.PresetCard-mockup {
|
||||||
|
width: 100%;
|
||||||
|
aspect-ratio: 4 / 3;
|
||||||
|
border-radius: 6px;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
padding: 6px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 5px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PresetCard-btn {
|
||||||
|
height: 10px;
|
||||||
|
width: 60%;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PresetCard-lines {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 3px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PresetCard-line {
|
||||||
|
height: 3px;
|
||||||
|
border-radius: 2px;
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PresetCard-surface {
|
||||||
|
flex: 1;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
border-radius: 4px;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PresetCard-name {
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--theme-color-fg-default, #e4e4e7);
|
||||||
|
text-align: center;
|
||||||
|
line-height: 1;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PresetCard-check {
|
||||||
|
position: absolute;
|
||||||
|
top: 4px;
|
||||||
|
right: 4px;
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: var(--theme-color-primary, #3b82f6);
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 4px;
|
||||||
|
top: 2px;
|
||||||
|
width: 5px;
|
||||||
|
height: 8px;
|
||||||
|
border: 2px solid #fff;
|
||||||
|
border-top: none;
|
||||||
|
border-left: none;
|
||||||
|
transform: rotate(45deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
/**
|
||||||
|
* STYLE-003: PresetCard
|
||||||
|
*
|
||||||
|
* Individual card showing a visual mini-preview of a style preset.
|
||||||
|
* Renders a small mockup using the preset's preview colors/radius
|
||||||
|
* so users can see what their UI will look like before choosing.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
import css from './PresetCard.module.scss';
|
||||||
|
|
||||||
|
export interface PresetDisplayInfo {
|
||||||
|
/** Unique slug id (e.g. 'modern', 'minimal'). */
|
||||||
|
id: string;
|
||||||
|
/** Human-readable name. */
|
||||||
|
name: string;
|
||||||
|
/** Short description shown below the card grid. */
|
||||||
|
description: string;
|
||||||
|
/** Raw CSS values for the visual preview. No token references. */
|
||||||
|
preview: {
|
||||||
|
primaryColor: string;
|
||||||
|
backgroundColor: string;
|
||||||
|
surfaceColor: string;
|
||||||
|
borderColor: string;
|
||||||
|
textColor: string;
|
||||||
|
mutedTextColor: string;
|
||||||
|
radiusMd: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PresetCardProps {
|
||||||
|
preset: PresetDisplayInfo;
|
||||||
|
isSelected: boolean;
|
||||||
|
onSelect: (id: string) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function PresetCard({ preset, isSelected, onSelect }: PresetCardProps) {
|
||||||
|
const { preview } = preset;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
className={[css['PresetCard'], isSelected ? css['PresetCard--selected'] : ''].filter(Boolean).join(' ')}
|
||||||
|
onClick={() => onSelect(preset.id)}
|
||||||
|
aria-pressed={isSelected}
|
||||||
|
title={preset.name}
|
||||||
|
>
|
||||||
|
{/* Mini UI mockup */}
|
||||||
|
<div
|
||||||
|
className={css['PresetCard-mockup']}
|
||||||
|
style={{ backgroundColor: preview.backgroundColor, borderColor: preview.borderColor }}
|
||||||
|
>
|
||||||
|
{/* Primary button row */}
|
||||||
|
<div
|
||||||
|
className={css['PresetCard-btn']}
|
||||||
|
style={{
|
||||||
|
backgroundColor: preview.primaryColor,
|
||||||
|
borderRadius: preview.radiusMd
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
|
{/* Text lines */}
|
||||||
|
<div className={css['PresetCard-lines']}>
|
||||||
|
<div className={css['PresetCard-line']} style={{ backgroundColor: preview.textColor, width: '70%' }} />
|
||||||
|
<div className={css['PresetCard-line']} style={{ backgroundColor: preview.mutedTextColor, width: '50%' }} />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Surface card strip */}
|
||||||
|
<div
|
||||||
|
className={css['PresetCard-surface']}
|
||||||
|
style={{
|
||||||
|
backgroundColor: preview.surfaceColor,
|
||||||
|
borderColor: preview.borderColor,
|
||||||
|
borderRadius: `calc(${preview.radiusMd} * 0.6)`
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Preset name */}
|
||||||
|
<span className={css['PresetCard-name']}>{preset.name}</span>
|
||||||
|
|
||||||
|
{/* Selected indicator */}
|
||||||
|
{isSelected && <span className={css['PresetCard-check']} aria-hidden />}
|
||||||
|
</button>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
.PresetSelector {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PresetSelector-label {
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--theme-color-fg-default, #e4e4e7);
|
||||||
|
letter-spacing: 0.02em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PresetSelector-grid {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
gap: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PresetSelector-description {
|
||||||
|
font-size: 11px;
|
||||||
|
color: var(--theme-color-fg-default-shy, #71717a);
|
||||||
|
margin: 0;
|
||||||
|
line-height: 1.4;
|
||||||
|
min-height: 1.4em; /* reserve height to prevent layout shift */
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
/**
|
||||||
|
* STYLE-003: PresetSelector
|
||||||
|
*
|
||||||
|
* Horizontal grid of PresetCards with a description below for the
|
||||||
|
* currently-selected preset.
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* <PresetSelector
|
||||||
|
* presets={getAllPresets()}
|
||||||
|
* selectedId="modern"
|
||||||
|
* onChange={(id) => setPreset(id)}
|
||||||
|
* />
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
import { PresetCard, PresetDisplayInfo } from './PresetCard';
|
||||||
|
import css from './PresetSelector.module.scss';
|
||||||
|
|
||||||
|
export interface PresetSelectorProps {
|
||||||
|
/** All available presets to display. */
|
||||||
|
presets: PresetDisplayInfo[];
|
||||||
|
/** Currently selected preset id. */
|
||||||
|
selectedId: string;
|
||||||
|
/** Called when the user picks a different preset. */
|
||||||
|
onChange: (id: string) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function PresetSelector({ presets, selectedId, onChange }: PresetSelectorProps) {
|
||||||
|
const selected = presets.find((p) => p.id === selectedId);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={css['PresetSelector']}>
|
||||||
|
<span className={css['PresetSelector-label']}>Style Preset</span>
|
||||||
|
|
||||||
|
<div className={css['PresetSelector-grid']} role="group" aria-label="Style presets">
|
||||||
|
{presets.map((preset) => (
|
||||||
|
<PresetCard key={preset.id} preset={preset} isSelected={preset.id === selectedId} onSelect={onChange} />
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{selected && <p className={css['PresetSelector-description']}>{selected.description}</p>}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
export { PresetCard } from './PresetCard';
|
||||||
|
export type { PresetDisplayInfo, PresetCardProps } from './PresetCard';
|
||||||
|
export { PresetSelector } from './PresetSelector';
|
||||||
|
export type { PresetSelectorProps } from './PresetSelector';
|
||||||
@@ -0,0 +1,132 @@
|
|||||||
|
/**
|
||||||
|
* STYLE-002: VariantSelector styles
|
||||||
|
* All colors use design tokens — no hardcoded values.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.VariantSelector {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: var(--spacing-1, 4px);
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Label above the trigger
|
||||||
|
.VariantSelector-label {
|
||||||
|
font-size: var(--font-size-xsmall, 11px);
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--theme-color-fg-default-shy);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dropdown trigger button
|
||||||
|
.VariantSelector-trigger {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: var(--spacing-1, 4px);
|
||||||
|
width: 100%;
|
||||||
|
padding: var(--spacing-1, 4px) var(--spacing-2, 8px);
|
||||||
|
background: var(--theme-color-bg-3);
|
||||||
|
color: var(--theme-color-fg-default);
|
||||||
|
border: 1px solid var(--theme-color-border-default);
|
||||||
|
border-radius: var(--border-radius-small, 4px);
|
||||||
|
font-size: var(--font-size-small, 12px);
|
||||||
|
cursor: pointer;
|
||||||
|
text-align: left;
|
||||||
|
transition: border-color 100ms ease, background 100ms ease;
|
||||||
|
|
||||||
|
&:hover:not(:disabled) {
|
||||||
|
background: var(--theme-color-bg-2);
|
||||||
|
border-color: var(--theme-color-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus-visible {
|
||||||
|
outline: 2px solid var(--theme-color-primary);
|
||||||
|
outline-offset: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:disabled {
|
||||||
|
opacity: 0.5;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.VariantSelector-triggerText {
|
||||||
|
flex: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.VariantSelector-chevron {
|
||||||
|
flex-shrink: 0;
|
||||||
|
font-size: 10px;
|
||||||
|
color: var(--theme-color-fg-default-shy);
|
||||||
|
line-height: 1;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dropdown list
|
||||||
|
.VariantSelector-dropdown {
|
||||||
|
position: absolute;
|
||||||
|
top: calc(100% + var(--spacing-1, 4px));
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: 200;
|
||||||
|
background: var(--theme-color-bg-2);
|
||||||
|
border: 1px solid var(--theme-color-border-default);
|
||||||
|
border-radius: var(--border-radius-small, 4px);
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
max-height: 240px;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Individual option
|
||||||
|
.VariantSelector-option {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: var(--spacing-2, 8px);
|
||||||
|
padding: var(--spacing-1, 4px) var(--spacing-2, 8px);
|
||||||
|
background: transparent;
|
||||||
|
color: var(--theme-color-fg-default);
|
||||||
|
border: none;
|
||||||
|
font-size: var(--font-size-small, 12px);
|
||||||
|
cursor: pointer;
|
||||||
|
text-align: left;
|
||||||
|
width: 100%;
|
||||||
|
transition: background 80ms ease;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: var(--theme-color-bg-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
&--active {
|
||||||
|
color: var(--theme-color-primary);
|
||||||
|
background: color-mix(in srgb, var(--theme-color-primary) 10%, transparent);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: color-mix(in srgb, var(--theme-color-primary) 15%, transparent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.VariantSelector-optionLabel {
|
||||||
|
flex: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.VariantSelector-checkmark {
|
||||||
|
flex-shrink: 0;
|
||||||
|
font-size: 10px;
|
||||||
|
color: var(--theme-color-primary);
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
@@ -0,0 +1,142 @@
|
|||||||
|
/**
|
||||||
|
* STYLE-002: VariantSelector
|
||||||
|
*
|
||||||
|
* Dropdown component for selecting a node style variant.
|
||||||
|
* Displays the current variant name and opens a list of available variants.
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* <VariantSelector
|
||||||
|
* variants={['primary', 'secondary', 'outline', 'ghost']}
|
||||||
|
* currentVariant="primary"
|
||||||
|
* onVariantChange={(name) => applyVariant(node, nodeType, name)}
|
||||||
|
* />
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
||||||
|
|
||||||
|
import css from './VariantSelector.module.scss';
|
||||||
|
|
||||||
|
export interface VariantSelectorProps {
|
||||||
|
/** List of available variant names to display. */
|
||||||
|
variants: string[];
|
||||||
|
|
||||||
|
/** Currently active variant name. */
|
||||||
|
currentVariant: string | undefined;
|
||||||
|
|
||||||
|
/** Called when the user picks a different variant. */
|
||||||
|
onVariantChange: (variantName: string) => void;
|
||||||
|
|
||||||
|
/** Disable the selector (read-only). */
|
||||||
|
disabled?: boolean;
|
||||||
|
|
||||||
|
/** Optional label shown above the selector. Defaults to 'Variant'. */
|
||||||
|
label?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Format a variant name for display: 'heading-1' → 'Heading 1', 'flex-row' → 'Flex Row'.
|
||||||
|
*/
|
||||||
|
function formatVariantLabel(name: string): string {
|
||||||
|
return name.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
export function VariantSelector({
|
||||||
|
variants,
|
||||||
|
currentVariant,
|
||||||
|
onVariantChange,
|
||||||
|
disabled = false,
|
||||||
|
label = 'Variant'
|
||||||
|
}: VariantSelectorProps) {
|
||||||
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
|
const containerRef = useRef<HTMLDivElement>(null);
|
||||||
|
|
||||||
|
const toggle = useCallback(() => {
|
||||||
|
if (!disabled) setIsOpen((v) => !v);
|
||||||
|
}, [disabled]);
|
||||||
|
|
||||||
|
const handleSelect = useCallback(
|
||||||
|
(name: string) => {
|
||||||
|
setIsOpen(false);
|
||||||
|
if (name !== currentVariant) {
|
||||||
|
onVariantChange(name);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
[currentVariant, onVariantChange]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Close on outside click
|
||||||
|
useEffect(() => {
|
||||||
|
if (!isOpen) return;
|
||||||
|
|
||||||
|
function onPointerDown(e: PointerEvent) {
|
||||||
|
if (containerRef.current && !containerRef.current.contains(e.target as Node)) {
|
||||||
|
setIsOpen(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('pointerdown', onPointerDown);
|
||||||
|
return () => document.removeEventListener('pointerdown', onPointerDown);
|
||||||
|
}, [isOpen]);
|
||||||
|
|
||||||
|
// Close on Escape
|
||||||
|
useEffect(() => {
|
||||||
|
if (!isOpen) return;
|
||||||
|
|
||||||
|
function onKeyDown(e: KeyboardEvent) {
|
||||||
|
if (e.key === 'Escape') setIsOpen(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('keydown', onKeyDown);
|
||||||
|
return () => document.removeEventListener('keydown', onKeyDown);
|
||||||
|
}, [isOpen]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={css['VariantSelector']} ref={containerRef}>
|
||||||
|
<span className={css['VariantSelector-label']}>{label}</span>
|
||||||
|
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
className={css['VariantSelector-trigger']}
|
||||||
|
onClick={toggle}
|
||||||
|
disabled={disabled}
|
||||||
|
aria-haspopup="listbox"
|
||||||
|
aria-expanded={isOpen}
|
||||||
|
title={currentVariant ? formatVariantLabel(currentVariant) : 'No variant'}
|
||||||
|
>
|
||||||
|
<span className={css['VariantSelector-triggerText']}>
|
||||||
|
{currentVariant ? formatVariantLabel(currentVariant) : 'None'}
|
||||||
|
</span>
|
||||||
|
<span className={css['VariantSelector-chevron']} aria-hidden>
|
||||||
|
▾
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
{isOpen && (
|
||||||
|
<div className={css['VariantSelector-dropdown']} role="listbox">
|
||||||
|
{variants.map((name) => (
|
||||||
|
<button
|
||||||
|
key={name}
|
||||||
|
type="button"
|
||||||
|
role="option"
|
||||||
|
aria-selected={name === currentVariant}
|
||||||
|
className={[
|
||||||
|
css['VariantSelector-option'],
|
||||||
|
name === currentVariant ? css['VariantSelector-option--active'] : ''
|
||||||
|
]
|
||||||
|
.filter(Boolean)
|
||||||
|
.join(' ')}
|
||||||
|
onClick={() => handleSelect(name)}
|
||||||
|
>
|
||||||
|
<span className={css['VariantSelector-optionLabel']}>{formatVariantLabel(name)}</span>
|
||||||
|
{name === currentVariant && (
|
||||||
|
<span className={css['VariantSelector-checkmark']} aria-hidden>
|
||||||
|
✓
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
|
</button>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
export { VariantSelector } from './VariantSelector';
|
||||||
|
export type { VariantSelectorProps } from './VariantSelector';
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
/**
|
||||||
|
* STYLE-004: ElementStyleSection styles
|
||||||
|
* Matches the visual rhythm of the existing property editor sections.
|
||||||
|
* All colors via design tokens — no hardcoded values.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.ElementStyleSection {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
border-bottom: 1px solid var(--theme-color-border-default);
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ElementStyleSection-header {
|
||||||
|
padding: var(--spacing-1, 4px) var(--spacing-2, 8px);
|
||||||
|
font-size: var(--font-size-xsmall, 11px);
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--theme-color-fg-default-shy);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.08em;
|
||||||
|
user-select: none;
|
||||||
|
background: var(--theme-color-bg-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.ElementStyleSection-body {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: var(--spacing-2, 8px);
|
||||||
|
padding: var(--spacing-2, 8px);
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
/**
|
||||||
|
* STYLE-004: ElementStyleSection
|
||||||
|
*
|
||||||
|
* Property panel section that surfaces the ElementConfig variant and size system.
|
||||||
|
* Rendered at the top of the property panel for any node that has an ElementConfig
|
||||||
|
* registered (Button, Text, Group, TextInput, Checkbox).
|
||||||
|
*
|
||||||
|
* The component is intentionally dumb — it receives callbacks for variant and size
|
||||||
|
* changes so that the legacy propertyeditor.ts can manage undo grouping via
|
||||||
|
* UndoActionGroup + UndoQueue without this component needing to import them.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
import { VariantSelector } from '../../inputs/VariantSelector';
|
||||||
|
import { SizePicker } from '../SizePicker';
|
||||||
|
import css from './ElementStyleSection.module.scss';
|
||||||
|
|
||||||
|
export interface ElementStyleSectionProps {
|
||||||
|
/** Available variant names from the ElementConfig (e.g. ['primary', 'secondary', 'outline']). */
|
||||||
|
variants: string[];
|
||||||
|
|
||||||
|
/** Currently active variant name (from node.parameters._variant). */
|
||||||
|
currentVariant: string | undefined;
|
||||||
|
|
||||||
|
/** Called when the user selects a different variant. Parent handles undo. */
|
||||||
|
onVariantChange: (variantName: string) => void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available size names from the ElementConfig sizes map (e.g. ['sm', 'md', 'lg', 'xl']).
|
||||||
|
* Pass an empty array or omit to hide the size picker.
|
||||||
|
*/
|
||||||
|
sizes?: string[];
|
||||||
|
|
||||||
|
/** Currently active size name (from node.parameters._size). */
|
||||||
|
currentSize?: string | undefined;
|
||||||
|
|
||||||
|
/** Called when the user selects a different size. Parent handles undo. */
|
||||||
|
onSizeChange?: (sizeName: string) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function ElementStyleSection({
|
||||||
|
variants,
|
||||||
|
currentVariant,
|
||||||
|
onVariantChange,
|
||||||
|
sizes = [],
|
||||||
|
currentSize,
|
||||||
|
onSizeChange
|
||||||
|
}: ElementStyleSectionProps) {
|
||||||
|
const hasSizes = sizes.length > 0 && onSizeChange !== undefined;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={css['ElementStyleSection']}>
|
||||||
|
<div className={css['ElementStyleSection-header']}>Style</div>
|
||||||
|
|
||||||
|
<div className={css['ElementStyleSection-body']}>
|
||||||
|
{variants.length > 0 && (
|
||||||
|
<VariantSelector
|
||||||
|
variants={variants}
|
||||||
|
currentVariant={currentVariant}
|
||||||
|
onVariantChange={onVariantChange}
|
||||||
|
label="Variant"
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{hasSizes && <SizePicker sizes={sizes} currentSize={currentSize} onSizeChange={onSizeChange} label="Size" />}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
export { ElementStyleSection } from './ElementStyleSection';
|
||||||
|
export type { ElementStyleSectionProps } from './ElementStyleSection';
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
/**
|
||||||
|
* STYLE-004: SizePicker styles
|
||||||
|
* All colors via design tokens.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.SizePicker {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: var(--spacing-1, 4px);
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.SizePicker-label {
|
||||||
|
font-size: var(--font-size-xsmall, 11px);
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--theme-color-fg-default-shy);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Segmented control group
|
||||||
|
.SizePicker-group {
|
||||||
|
display: flex;
|
||||||
|
gap: 2px;
|
||||||
|
background: var(--theme-color-bg-3);
|
||||||
|
border: 1px solid var(--theme-color-border-default);
|
||||||
|
border-radius: var(--border-radius-small, 4px);
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.SizePicker-option {
|
||||||
|
flex: 1;
|
||||||
|
padding: var(--spacing-1, 4px) 0;
|
||||||
|
background: transparent;
|
||||||
|
color: var(--theme-color-fg-default-shy);
|
||||||
|
border: none;
|
||||||
|
border-radius: 2px;
|
||||||
|
font-size: var(--font-size-xsmall, 11px);
|
||||||
|
font-weight: 500;
|
||||||
|
cursor: pointer;
|
||||||
|
text-transform: lowercase;
|
||||||
|
letter-spacing: 0.02em;
|
||||||
|
transition: background 80ms ease, color 80ms ease;
|
||||||
|
|
||||||
|
&:hover:not(:disabled) {
|
||||||
|
background: var(--theme-color-bg-2);
|
||||||
|
color: var(--theme-color-fg-default);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus-visible {
|
||||||
|
outline: 2px solid var(--theme-color-primary);
|
||||||
|
outline-offset: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:disabled {
|
||||||
|
opacity: 0.4;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
|
||||||
|
&--active {
|
||||||
|
background: var(--theme-color-bg-2);
|
||||||
|
color: var(--theme-color-fg-highlight);
|
||||||
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: var(--theme-color-bg-2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
/**
|
||||||
|
* STYLE-004: SizePicker
|
||||||
|
*
|
||||||
|
* Segmented control for selecting an element size preset (sm / md / lg / xl).
|
||||||
|
* Only renders the sizes that are defined in the node's ElementConfig.
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* <SizePicker
|
||||||
|
* sizes={['sm', 'md', 'lg', 'xl']}
|
||||||
|
* currentSize="md"
|
||||||
|
* onSizeChange={(size) => applySize(node, nodeType, size)}
|
||||||
|
* />
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React, { useCallback } from 'react';
|
||||||
|
|
||||||
|
import css from './SizePicker.module.scss';
|
||||||
|
|
||||||
|
export interface SizePickerProps {
|
||||||
|
/** Available size names in order (e.g. ['sm', 'md', 'lg', 'xl']). */
|
||||||
|
sizes: string[];
|
||||||
|
|
||||||
|
/** Currently active size name. */
|
||||||
|
currentSize: string | undefined;
|
||||||
|
|
||||||
|
/** Called when the user picks a different size. */
|
||||||
|
onSizeChange: (sizeName: string) => void;
|
||||||
|
|
||||||
|
/** Disable all size buttons. */
|
||||||
|
disabled?: boolean;
|
||||||
|
|
||||||
|
/** Optional label. Defaults to 'Size'. */
|
||||||
|
label?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function SizePicker({ sizes, currentSize, onSizeChange, disabled = false, label = 'Size' }: SizePickerProps) {
|
||||||
|
const handleClick = useCallback(
|
||||||
|
(size: string) => {
|
||||||
|
if (!disabled && size !== currentSize) {
|
||||||
|
onSizeChange(size);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
[currentSize, disabled, onSizeChange]
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={css['SizePicker']}>
|
||||||
|
<span className={css['SizePicker-label']}>{label}</span>
|
||||||
|
<div className={css['SizePicker-group']} role="group" aria-label={label}>
|
||||||
|
{sizes.map((size) => (
|
||||||
|
<button
|
||||||
|
key={size}
|
||||||
|
type="button"
|
||||||
|
className={[css['SizePicker-option'], size === currentSize ? css['SizePicker-option--active'] : '']
|
||||||
|
.filter(Boolean)
|
||||||
|
.join(' ')}
|
||||||
|
onClick={() => handleClick(size)}
|
||||||
|
disabled={disabled}
|
||||||
|
aria-pressed={size === currentSize}
|
||||||
|
title={size.toUpperCase()}
|
||||||
|
>
|
||||||
|
{size}
|
||||||
|
</button>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
export { SizePicker } from './SizePicker';
|
||||||
|
export type { SizePickerProps } from './SizePicker';
|
||||||
@@ -2,6 +2,7 @@ import React, { useState, useEffect } from 'react';
|
|||||||
|
|
||||||
import { PrimaryButton, PrimaryButtonVariant, PrimaryButtonSize } from '@noodl-core-ui/components/inputs/PrimaryButton';
|
import { PrimaryButton, PrimaryButtonVariant, PrimaryButtonSize } from '@noodl-core-ui/components/inputs/PrimaryButton';
|
||||||
import { TextInput } from '@noodl-core-ui/components/inputs/TextInput';
|
import { TextInput } from '@noodl-core-ui/components/inputs/TextInput';
|
||||||
|
import { PresetDisplayInfo, PresetSelector } from '@noodl-core-ui/components/StylePresets';
|
||||||
import { Label } from '@noodl-core-ui/components/typography/Label';
|
import { Label } from '@noodl-core-ui/components/typography/Label';
|
||||||
|
|
||||||
import css from './CreateProjectModal.module.scss';
|
import css from './CreateProjectModal.module.scss';
|
||||||
@@ -9,20 +10,42 @@ import css from './CreateProjectModal.module.scss';
|
|||||||
export interface CreateProjectModalProps {
|
export interface CreateProjectModalProps {
|
||||||
isVisible: boolean;
|
isVisible: boolean;
|
||||||
onClose: () => void;
|
onClose: () => void;
|
||||||
onConfirm: (name: string, location: string) => void;
|
/**
|
||||||
onChooseLocation?: () => Promise<string | null>; // For folder picker
|
* Called when the user confirms project creation.
|
||||||
|
* @param name Project name entered by the user.
|
||||||
|
* @param location Directory path chosen by the user.
|
||||||
|
* @param presetId Id of the selected style preset (e.g. 'modern', 'minimal').
|
||||||
|
*/
|
||||||
|
onConfirm: (name: string, location: string, presetId: string) => void;
|
||||||
|
onChooseLocation?: () => Promise<string | null>;
|
||||||
|
/**
|
||||||
|
* Optional list of style presets to show in the modal.
|
||||||
|
* When provided a PresetSelector is rendered; when omitted the selector is hidden.
|
||||||
|
* Pass the result of `getAllPresets()` from noodl-editor's StylePresetsModel.
|
||||||
|
*/
|
||||||
|
presets?: PresetDisplayInfo[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export function CreateProjectModal({ isVisible, onClose, onConfirm, onChooseLocation }: CreateProjectModalProps) {
|
const DEFAULT_PRESET_ID = 'modern';
|
||||||
|
|
||||||
|
export function CreateProjectModal({
|
||||||
|
isVisible,
|
||||||
|
onClose,
|
||||||
|
onConfirm,
|
||||||
|
onChooseLocation,
|
||||||
|
presets
|
||||||
|
}: CreateProjectModalProps) {
|
||||||
const [projectName, setProjectName] = useState('');
|
const [projectName, setProjectName] = useState('');
|
||||||
const [location, setLocation] = useState('');
|
const [location, setLocation] = useState('');
|
||||||
const [isChoosingLocation, setIsChoosingLocation] = useState(false);
|
const [isChoosingLocation, setIsChoosingLocation] = useState(false);
|
||||||
|
const [selectedPresetId, setSelectedPresetId] = useState(DEFAULT_PRESET_ID);
|
||||||
|
|
||||||
// Reset state when modal opens
|
// Reset state when modal opens
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isVisible) {
|
if (isVisible) {
|
||||||
setProjectName('');
|
setProjectName('');
|
||||||
setLocation('');
|
setLocation('');
|
||||||
|
setSelectedPresetId(DEFAULT_PRESET_ID);
|
||||||
}
|
}
|
||||||
}, [isVisible]);
|
}, [isVisible]);
|
||||||
|
|
||||||
@@ -42,7 +65,7 @@ export function CreateProjectModal({ isVisible, onClose, onConfirm, onChooseLoca
|
|||||||
|
|
||||||
const handleCreate = () => {
|
const handleCreate = () => {
|
||||||
if (!projectName.trim() || !location) return;
|
if (!projectName.trim() || !location) return;
|
||||||
onConfirm(projectName.trim(), location);
|
onConfirm(projectName.trim(), location, selectedPresetId);
|
||||||
};
|
};
|
||||||
|
|
||||||
const isValid = projectName.trim().length > 0 && location.length > 0;
|
const isValid = projectName.trim().length > 0 && location.length > 0;
|
||||||
@@ -91,6 +114,13 @@ export function CreateProjectModal({ isVisible, onClose, onConfirm, onChooseLoca
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* Style Preset Selector */}
|
||||||
|
{presets && presets.length > 0 && (
|
||||||
|
<div className={css['Field']}>
|
||||||
|
<PresetSelector presets={presets} selectedId={selectedPresetId} onChange={setSelectedPresetId} />
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
{/* Preview full path */}
|
{/* Preview full path */}
|
||||||
{projectName && location && (
|
{projectName && location && (
|
||||||
<div className={css['PathPreview']}>
|
<div className={css['PathPreview']}>
|
||||||
|
|||||||
16
packages/noodl-editor/00871f410b0671a26490d825705b1179.svg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M10.9512 3.22576C11.5593 3.22576 12.0522 2.72751 12.0522 2.11288C12.0522 1.49825 11.5593 1 10.9512 1C10.3432 1 9.85022 1.49825 9.85022 2.11288C9.85022 2.72751 10.3432 3.22576 10.9512 3.22576Z" fill="#B8B8B8"/>
|
||||||
|
<path d="M6.68969 4.40009C7.22049 4.40009 7.65079 3.96515 7.65079 3.42863C7.65079 2.8921 7.22049 2.45716 6.68969 2.45716C6.15889 2.45716 5.72859 2.8921 5.72859 3.42863C5.72859 3.96515 6.15889 4.40009 6.68969 4.40009Z" fill="#B8B8B8"/>
|
||||||
|
<path d="M3.82576 6.73112C4.26115 6.73112 4.61411 6.37436 4.61411 5.93428C4.61411 5.49419 4.26115 5.13743 3.82576 5.13743C3.39037 5.13743 3.03742 5.49419 3.03742 5.93428C3.03742 6.37436 3.39037 6.73112 3.82576 6.73112Z" fill="#B8B8B8"/>
|
||||||
|
<path d="M2.11012 9.34882C2.44573 9.34882 2.7178 9.07382 2.7178 8.73459C2.7178 8.39535 2.44573 8.12035 2.11012 8.12035C1.77451 8.12035 1.50244 8.39535 1.50244 8.73459C1.50244 9.07382 1.77451 9.34882 2.11012 9.34882Z" fill="#B8B8B8"/>
|
||||||
|
<path d="M1.46048 12.4432C1.71479 12.4432 1.92095 12.2348 1.92095 11.9778C1.92095 11.7207 1.71479 11.5123 1.46048 11.5123C1.20616 11.5123 1 11.7207 1 11.9778C1 12.2348 1.20616 12.4432 1.46048 12.4432Z" fill="#B8B8B8"/>
|
||||||
|
<path d="M1.78458 15.2657C1.96431 15.2657 2.11001 15.1185 2.11001 14.9368C2.11001 14.7551 1.96431 14.6079 1.78458 14.6079C1.60485 14.6079 1.45914 14.7551 1.45914 14.9368C1.45914 15.1185 1.60485 15.2657 1.78458 15.2657Z" fill="#B8B8B8"/>
|
||||||
|
<path d="M13.0506 23C13.6587 23 14.1516 22.5017 14.1516 21.8871C14.1516 21.2725 13.6587 20.7742 13.0506 20.7742C12.4426 20.7742 11.9496 21.2725 11.9496 21.8871C11.9496 22.5017 12.4426 23 13.0506 23Z" fill="#B8B8B8"/>
|
||||||
|
<path d="M17.3074 21.5417C17.8382 21.5417 18.2685 21.1068 18.2685 20.5702C18.2685 20.0337 17.8382 19.5988 17.3074 19.5988C16.7766 19.5988 16.3463 20.0337 16.3463 20.5702C16.3463 21.1068 16.7766 21.5417 17.3074 21.5417Z" fill="#B8B8B8"/>
|
||||||
|
<path d="M20.1722 18.8626C20.6076 18.8626 20.9605 18.5058 20.9605 18.0657C20.9605 17.6256 20.6076 17.2689 20.1722 17.2689C19.7368 17.2689 19.3839 17.6256 19.3839 18.0657C19.3839 18.5058 19.7368 18.8626 20.1722 18.8626Z" fill="#B8B8B8"/>
|
||||||
|
<path d="M21.8873 15.8798C22.2229 15.8798 22.4949 15.6048 22.4949 15.2656C22.4949 14.9264 22.2229 14.6514 21.8873 14.6514C21.5516 14.6514 21.2796 14.9264 21.2796 15.2656C21.2796 15.6048 21.5516 15.8798 21.8873 15.8798Z" fill="#B8B8B8"/>
|
||||||
|
<path d="M22.5395 12.4879C22.7938 12.4879 23 12.2795 23 12.0224C23 11.7654 22.7938 11.557 22.5395 11.557C22.2852 11.557 22.079 11.7654 22.079 12.0224C22.079 12.2795 22.2852 12.4879 22.5395 12.4879Z" fill="#B8B8B8"/>
|
||||||
|
<path d="M22.2142 9.39194C22.3939 9.39194 22.5396 9.24467 22.5396 9.06299C22.5396 8.88132 22.3939 8.73405 22.2142 8.73405C22.0344 8.73405 21.8887 8.88132 21.8887 9.06299C21.8887 9.24467 22.0344 9.39194 22.2142 9.39194Z" fill="#B8B8B8"/>
|
||||||
|
<path d="M21.1878 6.79557C21.2847 6.79557 21.3633 6.71613 21.3633 6.61815C21.3633 6.52016 21.2847 6.44073 21.1878 6.44073C21.0908 6.44073 21.0123 6.52016 21.0123 6.61815C21.0123 6.71613 21.0908 6.79557 21.1878 6.79557Z" fill="#B8B8B8"/>
|
||||||
|
<path d="M2.81427 17.6774C2.91122 17.6774 2.98981 17.5979 2.98981 17.5C2.98981 17.402 2.91122 17.3225 2.81427 17.3225C2.71732 17.3225 2.63873 17.402 2.63873 17.5C2.63873 17.5979 2.71732 17.6774 2.81427 17.6774Z" fill="#B8B8B8"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.3 KiB |
@@ -0,0 +1,7 @@
|
|||||||
|
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.1367 17.625C21.1367 18.0392 20.8009 18.375 20.3867 18.375L3.88672 18.375C3.47251 18.375 3.13672 18.0392 3.13672 17.625C3.13672 17.2108 3.47251 16.875 3.88672 16.875L20.3867 16.875C20.8009 16.875 21.1367 17.2108 21.1367 17.625Z" fill="#F5F5F5" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.1367 13.875C21.1367 14.2892 20.8009 14.625 20.3867 14.625L8.38672 14.625C7.97251 14.625 7.63672 14.2892 7.63672 13.875C7.63672 13.4608 7.97251 13.125 8.38672 13.125L20.3867 13.125C20.8009 13.125 21.1367 13.4608 21.1367 13.875Z" fill="#F5F5F5" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.1367 10.125C21.1367 10.5392 20.8009 10.875 20.3867 10.875L3.88672 10.875C3.47251 10.875 3.13672 10.5392 3.13672 10.125C3.13672 9.71078 3.47251 9.375 3.88672 9.375L20.3867 9.375C20.8009 9.375 21.1367 9.71079 21.1367 10.125Z" fill="#F5F5F5" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.1367 6.375C21.1367 6.78921 20.8009 7.125 20.3867 7.125L8.38672 7.125C7.97251 7.125 7.63672 6.78921 7.63672 6.375C7.63672 5.96079 7.97251 5.625 8.38672 5.625L20.3867 5.625C20.8009 5.625 21.1367 5.96079 21.1367 6.375Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="31" height="31" viewBox="0 0 31 31" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M18.2888 13.0822C17.3611 13.0822 16.6089 12.3301 16.6089 11.4023C16.6089 10.4745 17.3611 9.72241 18.2888 9.72241C19.2166 9.72241 19.9688 10.4745 19.9688 11.4023C19.9688 12.3301 19.2166 13.0822 18.2888 13.0822Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.8042 5.60229C4.8042 5.46422 4.91613 5.35229 5.0542 5.35229H25.0542C25.1923 5.35229 25.3042 5.46422 25.3042 5.60229V21.3411L22.2517 18.5885C21.9312 18.2995 21.4508 18.2786 21.1065 18.5387L18.2453 20.7004C17.9736 20.9056 17.5944 20.8884 17.3425 20.6595L10.7908 14.7068C10.439 14.3872 9.89938 14.3962 9.55847 14.7273L4.8042 19.3454V5.60229ZM5.0542 3.85229C4.0877 3.85229 3.3042 4.6358 3.3042 5.60229V25.6023C3.3042 26.5688 4.0877 27.3523 5.0542 27.3523H25.0542C26.0207 27.3523 26.8042 26.5688 26.8042 25.6023V5.60229C26.8042 4.6358 26.0207 3.85229 25.0542 3.85229H5.0542Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 979 B |
@@ -0,0 +1,7 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M20.3867 12.9382H3.88672" stroke="#F5F5F5" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.1367 12.9382C21.1367 13.3524 20.8009 13.6882 20.3867 13.6882L3.88672 13.6882C3.47251 13.6882 3.13672 13.3524 3.13672 12.9382C3.13672 12.524 3.47251 12.1882 3.88672 12.1882L20.3867 12.1882C20.8009 12.1882 21.1367 12.524 21.1367 12.9382Z" fill="#F5F5F5" />
|
||||||
|
<path d="M12.4278 10.6282C12.5178 10.5882 12.5978 10.5382 12.6678 10.4682L15.6678 7.46823C15.9578 7.17823 15.9578 6.69823 15.6678 6.40823C15.3778 6.11823 14.8978 6.11823 14.6078 6.40823L12.8878 8.12823L12.8878 2.43823C12.8878 2.02823 12.5478 1.68823 12.1378 1.68823C11.7278 1.68823 11.3878 2.02823 11.3878 2.43823L11.3878 8.12823L9.66775 6.40823C9.37775 6.11823 8.89775 6.11823 8.60775 6.40823C8.45775 6.55823 8.38775 6.74823 8.38775 6.93823C8.38775 7.12823 8.45775 7.31823 8.60775 7.46823L11.6078 10.4682C11.6778 10.5382 11.7578 10.5882 11.8478 10.6282C11.9378 10.6682 12.0278 10.6882 12.1378 10.6882C12.2478 10.6882 12.3378 10.6682 12.4278 10.6282Z" fill="#F5F5F5" />
|
||||||
|
<path d="M12.4278 15.2482C12.5178 15.2882 12.5978 15.3382 12.6678 15.4082L15.6678 18.4082C15.9578 18.6982 15.9578 19.1782 15.6678 19.4682C15.3778 19.7582 14.8978 19.7582 14.6078 19.4682L12.8878 17.7482L12.8878 23.4382C12.8878 23.8482 12.5478 24.1882 12.1378 24.1882C11.7278 24.1882 11.3878 23.8482 11.3878 23.4382L11.3878 17.7482L9.66775 19.4682C9.37775 19.7582 8.89775 19.7582 8.60775 19.4682C8.45775 19.3182 8.38775 19.1282 8.38775 18.9382C8.38775 18.7482 8.45775 18.5582 8.60775 18.4082L11.6078 15.4082C11.6778 15.3382 11.7578 15.2882 11.8478 15.2482C11.9378 15.2082 12.0278 15.1882 12.1378 15.1882C12.2478 15.1882 12.3378 15.2082 12.4278 15.2482Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 4.5C3 3.67157 3.67157 3 4.5 3H7.99518C8.40939 3 8.74518 3.33579 8.74518 3.75C8.74518 4.16421 8.40939 4.5 7.99518 4.5H4.5V19.5H19.5V4.5H15.9906C15.5764 4.5 15.2406 4.16421 15.2406 3.75C15.2406 3.33579 15.5764 3 15.9906 3H19.5C20.3284 3 21 3.67157 21 4.5V19.5C21 20.3284 20.3284 21 19.5 21H4.5C3.67157 21 3 20.3284 3 19.5V4.5Z" fill="#B8B8B8"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.29145 11.0415C8.58434 10.7486 9.05921 10.7486 9.35211 11.0415L11.9999 13.6893L14.6477 11.0415C14.9406 10.7486 15.4155 10.7486 15.7084 11.0415C16.0013 11.3344 16.0013 11.8093 15.7084 12.1022L12.5302 15.2803C12.2373 15.5732 11.7625 15.5732 11.4696 15.2803L8.29145 12.1022C7.99855 11.8093 7.99855 11.3344 8.29145 11.0415Z" fill="#B8B8B8"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 6.5C12.4142 6.5 12.75 6.83579 12.75 7.25V14.75C12.75 15.1642 12.4142 15.5 12 15.5C11.5858 15.5 11.25 15.1642 11.25 14.75V7.25C11.25 6.83579 11.5858 6.5 12 6.5Z" fill="#B8B8B8"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,9 @@
|
|||||||
|
<svg
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
>
|
||||||
|
<path d="M8 4.14062V18.1406L19 11.1406L8 4.14062Z" fill="#9F9F9F" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 194 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="31" height="31" viewBox="0 0 31 31" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M24.1928 5.74249H6.08057C5.80442 5.74249 5.58057 5.96635 5.58057 6.24249V24.3547C5.58057 24.6309 5.80442 24.8547 6.08057 24.8547H24.1928C24.4689 24.8547 24.6928 24.6309 24.6928 24.3547V6.24249C24.6928 5.96635 24.4689 5.74249 24.1928 5.74249ZM6.08057 4.24249C4.976 4.24249 4.08057 5.13792 4.08057 6.24249V24.3547C4.08057 25.4593 4.976 26.3547 6.08057 26.3547H24.1928C25.2974 26.3547 26.1928 25.4593 26.1928 24.3547V6.24249C26.1928 5.13792 25.2974 4.24249 24.1928 4.24249H6.08057Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 654 B |
158
packages/noodl-editor/13.bundle.js
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
"use strict";
|
||||||
|
(global["webpackChunknoodl_editor"] = global["webpackChunknoodl_editor"] || []).push([[13],{
|
||||||
|
|
||||||
|
/***/ 99013:
|
||||||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||||
|
|
||||||
|
__webpack_require__.r(__webpack_exports__);
|
||||||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||||
|
/* harmony export */ conf: () => (/* binding */ conf),
|
||||||
|
/* harmony export */ language: () => (/* binding */ language)
|
||||||
|
/* harmony export */ });
|
||||||
|
/*!-----------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
|
||||||
|
*-----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
// src/basic-languages/graphql/graphql.ts
|
||||||
|
var conf = {
|
||||||
|
comments: {
|
||||||
|
lineComment: "#"
|
||||||
|
},
|
||||||
|
brackets: [
|
||||||
|
["{", "}"],
|
||||||
|
["[", "]"],
|
||||||
|
["(", ")"]
|
||||||
|
],
|
||||||
|
autoClosingPairs: [
|
||||||
|
{ open: "{", close: "}" },
|
||||||
|
{ open: "[", close: "]" },
|
||||||
|
{ open: "(", close: ")" },
|
||||||
|
{ open: '"""', close: '"""', notIn: ["string", "comment"] },
|
||||||
|
{ open: '"', close: '"', notIn: ["string", "comment"] }
|
||||||
|
],
|
||||||
|
surroundingPairs: [
|
||||||
|
{ open: "{", close: "}" },
|
||||||
|
{ open: "[", close: "]" },
|
||||||
|
{ open: "(", close: ")" },
|
||||||
|
{ open: '"""', close: '"""' },
|
||||||
|
{ open: '"', close: '"' }
|
||||||
|
],
|
||||||
|
folding: {
|
||||||
|
offSide: true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var language = {
|
||||||
|
defaultToken: "invalid",
|
||||||
|
tokenPostfix: ".gql",
|
||||||
|
keywords: [
|
||||||
|
"null",
|
||||||
|
"true",
|
||||||
|
"false",
|
||||||
|
"query",
|
||||||
|
"mutation",
|
||||||
|
"subscription",
|
||||||
|
"extend",
|
||||||
|
"schema",
|
||||||
|
"directive",
|
||||||
|
"scalar",
|
||||||
|
"type",
|
||||||
|
"interface",
|
||||||
|
"union",
|
||||||
|
"enum",
|
||||||
|
"input",
|
||||||
|
"implements",
|
||||||
|
"fragment",
|
||||||
|
"on"
|
||||||
|
],
|
||||||
|
typeKeywords: ["Int", "Float", "String", "Boolean", "ID"],
|
||||||
|
directiveLocations: [
|
||||||
|
"SCHEMA",
|
||||||
|
"SCALAR",
|
||||||
|
"OBJECT",
|
||||||
|
"FIELD_DEFINITION",
|
||||||
|
"ARGUMENT_DEFINITION",
|
||||||
|
"INTERFACE",
|
||||||
|
"UNION",
|
||||||
|
"ENUM",
|
||||||
|
"ENUM_VALUE",
|
||||||
|
"INPUT_OBJECT",
|
||||||
|
"INPUT_FIELD_DEFINITION",
|
||||||
|
"QUERY",
|
||||||
|
"MUTATION",
|
||||||
|
"SUBSCRIPTION",
|
||||||
|
"FIELD",
|
||||||
|
"FRAGMENT_DEFINITION",
|
||||||
|
"FRAGMENT_SPREAD",
|
||||||
|
"INLINE_FRAGMENT",
|
||||||
|
"VARIABLE_DEFINITION"
|
||||||
|
],
|
||||||
|
operators: ["=", "!", "?", ":", "&", "|"],
|
||||||
|
symbols: /[=!?:&|]+/,
|
||||||
|
escapes: /\\(?:["\\\/bfnrt]|u[0-9A-Fa-f]{4})/,
|
||||||
|
tokenizer: {
|
||||||
|
root: [
|
||||||
|
[
|
||||||
|
/[a-z_][\w$]*/,
|
||||||
|
{
|
||||||
|
cases: {
|
||||||
|
"@keywords": "keyword",
|
||||||
|
"@default": "key.identifier"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
/[$][\w$]*/,
|
||||||
|
{
|
||||||
|
cases: {
|
||||||
|
"@keywords": "keyword",
|
||||||
|
"@default": "argument.identifier"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
/[A-Z][\w\$]*/,
|
||||||
|
{
|
||||||
|
cases: {
|
||||||
|
"@typeKeywords": "keyword",
|
||||||
|
"@default": "type.identifier"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
{ include: "@whitespace" },
|
||||||
|
[/[{}()\[\]]/, "@brackets"],
|
||||||
|
[/@symbols/, { cases: { "@operators": "operator", "@default": "" } }],
|
||||||
|
[/@\s*[a-zA-Z_\$][\w\$]*/, { token: "annotation", log: "annotation token: $0" }],
|
||||||
|
[/\d*\.\d+([eE][\-+]?\d+)?/, "number.float"],
|
||||||
|
[/0[xX][0-9a-fA-F]+/, "number.hex"],
|
||||||
|
[/\d+/, "number"],
|
||||||
|
[/[;,.]/, "delimiter"],
|
||||||
|
[/"""/, { token: "string", next: "@mlstring", nextEmbedded: "markdown" }],
|
||||||
|
[/"([^"\\]|\\.)*$/, "string.invalid"],
|
||||||
|
[/"/, { token: "string.quote", bracket: "@open", next: "@string" }]
|
||||||
|
],
|
||||||
|
mlstring: [
|
||||||
|
[/[^"]+/, "string"],
|
||||||
|
['"""', { token: "string", next: "@pop", nextEmbedded: "@pop" }]
|
||||||
|
],
|
||||||
|
string: [
|
||||||
|
[/[^\\"]+/, "string"],
|
||||||
|
[/@escapes/, "string.escape"],
|
||||||
|
[/\\./, "string.escape.invalid"],
|
||||||
|
[/"/, { token: "string.quote", bracket: "@close", next: "@pop" }]
|
||||||
|
],
|
||||||
|
whitespace: [
|
||||||
|
[/[ \t\r\n]+/, ""],
|
||||||
|
[/#.*$/, "comment"]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/***/ })
|
||||||
|
|
||||||
|
}]);
|
||||||
|
//# sourceMappingURL=13.bundle.js.map
|
||||||
1
packages/noodl-editor/13.bundle.js.map
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.392 10.2073C13.0991 9.91436 12.6242 9.91436 12.3313 10.2073L7.98547 14.5531C7.69257 14.846 7.69257 15.3209 7.98547 15.6138C8.27836 15.9067 8.75323 15.9067 9.04613 15.6138L12.8617 11.7982L16.6772 15.6138C16.9701 15.9067 17.445 15.9067 17.7378 15.6138C18.0307 15.3209 18.0307 14.846 17.7378 14.5531L13.392 10.2073Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 492 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="31" height="31" viewBox="0 0 31 31" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.0537 25.7085C20.7146 25.7085 25.3037 21.1194 25.3037 15.4585C25.3037 9.79758 20.7146 5.2085 15.0537 5.2085C9.39279 5.2085 4.80371 9.79758 4.80371 15.4585C4.80371 21.1194 9.39279 25.7085 15.0537 25.7085ZM26.8037 15.4585C26.8037 21.9478 21.5431 27.2085 15.0537 27.2085C8.56436 27.2085 3.30371 21.9478 3.30371 15.4585C3.30371 8.96915 8.56436 3.7085 15.0537 3.7085C21.5431 3.7085 26.8037 8.96915 26.8037 15.4585Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M15.054 18.8826C16.9451 18.8826 18.4782 17.3495 18.4782 15.4584C18.4782 13.5673 16.9451 12.0343 15.054 12.0343C13.1629 12.0343 11.6299 13.5673 11.6299 15.4584C11.6299 17.3495 13.1629 18.8826 15.054 18.8826Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 817 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.10597 12.6071C6.10597 9.27605 8.80631 6.57571 12.1373 6.57571C14.294 6.57571 16.1873 7.70734 17.2542 9.41235H14.8667C14.4525 9.41235 14.1167 9.74814 14.1167 10.1624C14.1167 10.5766 14.4525 10.9124 14.8667 10.9124H18.9323C19.3465 10.9124 19.6823 10.5766 19.6823 10.1624V6.09679C19.6823 5.68257 19.3465 5.34679 18.9323 5.34679C18.5181 5.34679 18.1823 5.68257 18.1823 6.09679V8.11989C16.8111 6.27569 14.6143 5.07912 12.1373 5.07912C7.97976 5.07912 4.60938 8.4495 4.60938 12.6071C4.60938 16.7647 7.97976 20.1351 12.1373 20.1351C15.4161 20.1351 18.2034 18.0394 19.2366 15.1167C19.3744 14.7271 19.1702 14.2996 18.7805 14.1618C18.3909 14.0241 17.9633 14.2283 17.8256 14.6179C16.9972 16.9613 14.7622 18.6385 12.1373 18.6385C8.80631 18.6385 6.10597 15.9381 6.10597 12.6071Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 943 B |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.73087 13.2163C4.05911 12.5445 4.05911 11.4554 4.73087 10.7837L10.7835 4.73102C11.4553 4.05926 12.5444 4.05927 13.2161 4.73102L19.2688 10.7837C19.9405 11.4554 19.9405 12.5445 19.2688 13.2163L13.2161 19.2689C12.5444 19.9407 11.4553 19.9407 10.7835 19.2689L4.73087 13.2163ZM5.77342 11.8262C5.67746 11.9222 5.67746 12.0778 5.77342 12.1737L11.8261 18.2264C11.922 18.3224 12.0776 18.3224 12.1736 18.2264L18.2262 12.1737C18.3222 12.0778 18.3222 11.9222 18.2262 11.8262L12.1736 5.77358C12.0776 5.67761 11.922 5.67761 11.8261 5.77358L5.77342 11.8262Z" fill="#B8B8B8"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 715 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.25 7.75C2.25 6.92157 2.92157 6.25 3.75 6.25H17.25C18.0784 6.25 18.75 6.92157 18.75 7.75V18.25C18.75 19.0784 18.0784 19.75 17.25 19.75H3.75C2.92157 19.75 2.25 19.0784 2.25 18.25V7.75ZM17.25 7.75H3.75V18.25H17.25V7.75Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.25 4C5.25 3.58579 5.58579 3.25 6 3.25H20.25C20.6478 3.25 21.0294 3.40804 21.3107 3.68934C21.592 3.97065 21.75 4.35218 21.75 4.75V16C21.75 16.4142 21.4142 16.75 21 16.75C20.5858 16.75 20.25 16.4142 20.25 16L20.25 4.75L6 4.75C5.58579 4.75 5.25 4.41421 5.25 4Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 718 B |
64
packages/noodl-editor/1edbeb8826034ee05327d63b1587f77e.svg
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="30px" height="30px" viewBox="0 0 512 512"
|
||||||
|
preserveAspectRatio="xMidYMid meet">
|
||||||
|
<metadata>
|
||||||
|
Created by potrace 1.10, written by Peter Selinger 2001-2011
|
||||||
|
</metadata>
|
||||||
|
<g transform="scale(0.16, -0.16) translate(0, -3200)" fill="#ffffff" stroke="none">
|
||||||
|
<path d="M1345 3084 c-122 -18 -294 -61 -305 -76 -3 -4 -39 -21 -79 -38 -140
|
||||||
|
-57 -290 -156 -436 -286 -173 -155 -350 -399 -422 -583 -114 -292 -133 -639
|
||||||
|
-51 -961 21 -86 90 -254 139 -344 444 -805 1454 -1042 2175 -511 316 233 531
|
||||||
|
574 606 962 34 176 32 438 -4 614 -43 205 -134 416 -247 565 -71 95 -338 356
|
||||||
|
-421 411 -264 175 -467 241 -765 248 -88 2 -173 1 -190 -1z m304 -207 c108
|
||||||
|
-67 238 -259 320 -472 17 -43 29 -80 28 -82 -2 -1 -39 -9 -82 -18 -43 -8 -86
|
||||||
|
-17 -96 -20 -14 -5 -20 2 -29 36 -25 93 -99 169 -189 196 -151 44 -312 -39
|
||||||
|
-358 -184 -14 -44 -20 -52 -37 -48 -12 2 -54 10 -94 16 -41 7 -76 18 -78 24
|
||||||
|
-14 35 121 310 209 427 124 165 268 209 406 125z m-539 -52 c0 -3 -23 -40 -52
|
||||||
|
-82 -55 -82 -124 -224 -153 -313 -23 -73 -21 -70 -58 -58 -55 18 -234 105
|
||||||
|
-241 116 -8 14 58 79 158 153 94 71 179 122 266 160 67 29 80 33 80 24z m913
|
||||||
|
-40 c109 -54 243 -148 335 -235 l66 -62 -59 -31 c-73 -37 -194 -87 -209 -87
|
||||||
|
-6 0 -24 35 -40 78 -40 108 -110 247 -154 307 -70 93 -68 94 61 30z m-1458
|
||||||
|
-449 c43 -25 112 -57 154 -72 42 -15 87 -31 100 -36 17 -6 21 -13 16 -26 -14
|
||||||
|
-35 -53 -200 -65 -274 l-12 -76 -52 5 c-85 9 -158 -18 -221 -81 -34 -34 -58
|
||||||
|
-68 -66 -95 -15 -50 -24 -53 -139 -49 l-85 3 3 55 c5 90 66 310 116 412 37 77
|
||||||
|
160 278 170 278 1 0 38 -20 81 -44z m1020 10 c54 -35 74 -128 39 -181 -36 -55
|
||||||
|
-120 -72 -179 -35 -37 23 -57 63 -57 115 0 97 114 155 197 101z m992 -42 c61
|
||||||
|
-85 148 -266 176 -364 31 -107 61 -275 53 -295 -4 -12 -24 -15 -95 -15 l-90 0
|
||||||
|
-31 64 c-51 107 -130 158 -249 162 l-75 3 -18 108 c-16 93 -37 190 -53 243 -4
|
||||||
|
12 16 22 78 43 45 16 118 48 162 71 44 24 85 42 90 41 6 -1 29 -28 52 -61z
|
||||||
|
m-1479 -149 c46 -8 96 -15 111 -15 21 0 31 -10 53 -50 30 -53 95 -108 140
|
||||||
|
-117 39 -8 50 -25 46 -74 -3 -40 -5 -43 -45 -56 -63 -21 -138 -93 -161 -156
|
||||||
|
l-20 -52 -122 0 -122 0 -12 37 c-7 20 -27 56 -44 79 -20 26 -30 50 -27 63 51
|
||||||
|
235 78 353 82 359 3 5 12 6 20 3 9 -4 54 -13 101 -21z m965 -32 c14 -51 46
|
||||||
|
-209 60 -298 4 -23 -2 -38 -29 -68 -18 -22 -39 -58 -47 -81 l-14 -41 -111 -3
|
||||||
|
-112 -3 -24 55 c-29 66 -92 129 -152 152 l-44 17 0 53 0 53 53 24 c58 27 119
|
||||||
|
84 137 128 9 21 19 29 39 29 14 1 67 9 116 19 50 10 95 19 101 20 6 0 19 -25
|
||||||
|
27 -56z m-1313 -438 c75 -39 92 -148 32 -207 -79 -80 -222 -21 -222 92 0 93
|
||||||
|
107 158 190 115z m821 0 c65 -34 91 -135 48 -189 -61 -78 -165 -73 -220 10
|
||||||
|
-37 56 -13 134 53 174 40 24 79 25 119 5z m842 -24 c87 -86 27 -221 -98 -221
|
||||||
|
-42 0 -52 4 -81 35 -57 61 -55 132 4 188 33 31 55 37 107 31 26 -3 50 -15 68
|
||||||
|
-33z m-1992 -216 c60 -115 150 -169 271 -164 l62 3 18 -120 c10 -65 29 -163
|
||||||
|
42 -217 21 -89 22 -99 7 -104 -61 -21 -208 -88 -257 -117 -32 -20 -62 -36 -66
|
||||||
|
-36 -12 0 -115 163 -161 255 -51 104 -80 185 -108 303 -22 91 -40 232 -32 245
|
||||||
|
2 4 48 6 101 5 l97 -3 26 -50z m808 24 c6 -17 27 -53 47 -80 28 -38 52 -57
|
||||||
|
105 -82 l69 -32 0 -51 0 -51 -65 -32 c-72 -36 -128 -98 -145 -161 -10 -36 -11
|
||||||
|
-37 -82 -49 -40 -7 -96 -19 -125 -26 -47 -12 -53 -11 -57 4 -13 45 -58 266
|
||||||
|
-70 344 l-13 87 33 48 c19 26 34 50 34 54 0 4 4 18 10 32 9 26 10 26 129 26
|
||||||
|
l119 0 11 -31z m811 -1 c7 -18 28 -54 47 -81 18 -26 33 -59 33 -75 0 -43 -28
|
||||||
|
-218 -51 -319 -22 -101 -23 -101 -89 -84 -19 5 -67 15 -106 21 l-72 11 -16 44
|
||||||
|
c-30 77 -69 121 -141 155 -70 33 -71 36 -59 112 5 28 12 38 31 43 63 15 128
|
||||||
|
77 172 163 l21 42 109 0 109 0 12 -32z m770 -5 c0 -121 -66 -377 -136 -530
|
||||||
|
-26 -58 -110 -203 -139 -241 -1 -1 -49 22 -106 52 -57 30 -134 67 -171 81 -38
|
||||||
|
15 -68 30 -68 34 0 3 7 29 16 56 15 52 54 290 54 338 0 27 1 27 63 27 35 0 84
|
||||||
|
7 110 16 64 22 135 87 163 151 l24 53 95 0 95 0 0 -37z m-1246 -467 c50 -21
|
||||||
|
76 -60 76 -116 0 -138 -185 -180 -244 -55 -31 65 -10 124 59 166 36 23 64 24
|
||||||
|
109 5z m-314 -247 c32 -61 99 -123 155 -142 147 -50 292 4 371 139 14 24 29
|
||||||
|
44 32 44 4 0 46 -7 95 -17 55 -10 87 -21 87 -29 0 -48 -105 -278 -171 -375
|
||||||
|
-88 -130 -170 -186 -286 -196 -128 -10 -228 50 -323 195 -68 103 -180 338
|
||||||
|
-180 378 0 7 32 18 78 27 119 22 119 22 142 -24z m-341 -121 c34 -86 103 -226
|
||||||
|
150 -307 30 -51 31 -52 9 -46 -42 13 -206 96 -270 137 -72 46 -198 147 -198
|
||||||
|
158 0 12 268 145 276 137 1 -1 16 -37 33 -79z m1469 -30 c17 -11 32 -25 32
|
||||||
|
-32 0 -18 -175 -156 -261 -206 -71 -42 -209 -103 -216 -96 -2 2 13 27 33 57
|
||||||
|
48 72 99 173 141 284 19 49 37 93 39 97 5 7 177 -70 232 -104z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.3 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.5434 6.17798C15.234 5.91753 13.8769 6.0512 12.6434 6.5621C11.41 7.07299 10.3558 7.93815 9.61414 9.04818C8.87244 10.1582 8.47656 11.4633 8.47656 12.7983C8.47656 13.2125 8.14078 13.5483 7.72656 13.5483C7.31235 13.5483 6.97656 13.2125 6.97656 12.7983C6.97656 12.0369 7.08192 11.2835 7.28642 10.5585C7.18344 10.5517 7.0802 10.5482 6.97684 10.5483H6.97656C5.78309 10.5483 4.6385 11.0224 3.79458 11.8663C2.95067 12.7102 2.47656 13.8548 2.47656 15.0483C2.47656 16.2418 2.95067 17.3863 3.79458 18.2303C4.6385 19.0742 5.78309 19.5483 6.97656 19.5483H15.2266C16.5616 19.5483 17.8666 19.1524 18.9767 18.4107C20.0867 17.669 20.9519 16.6148 21.4627 15.3814C21.9736 14.148 22.1073 12.7908 21.8469 11.4814C21.5864 10.1721 20.9435 8.96932 19.9995 8.02531C19.0555 7.08131 17.8528 6.43843 16.5434 6.17798ZM7.84692 9.10999C8.00079 8.80213 8.17432 8.5031 8.36694 8.21483C9.27346 6.85812 10.5619 5.8007 12.0694 5.17628C13.5769 4.55185 15.2357 4.38848 16.8361 4.7068C18.4364 5.02513 19.9064 5.81087 21.0602 6.96465C22.214 8.11843 22.9997 9.58844 23.318 11.1888C23.6364 12.7891 23.473 14.4479 22.8486 15.9554C22.2241 17.4629 21.1667 18.7514 19.81 19.6579C18.4533 20.5644 16.8583 21.0483 15.2266 21.0483H6.97656C5.38526 21.0483 3.85914 20.4161 2.73392 19.2909C1.6087 18.1657 0.976562 16.6396 0.976562 15.0483C0.976562 13.457 1.6087 11.9309 2.73392 10.8056C3.85907 9.68049 5.38508 9.04836 6.97628 9.04828M7.84692 9.10999C7.55889 9.06885 7.26804 9.04819 6.97656 9.04828L7.84692 9.10999Z" fill="#F5F5F5" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.8824 12.8036C11.5895 12.5107 11.1146 12.5107 10.8217 12.8036C10.5288 13.0965 10.5288 13.5714 10.8217 13.8643L13.7985 16.8411C13.9019 16.9445 14.0279 17.0113 14.1607 17.0417C14.1881 17.048 14.2161 17.0528 14.2446 17.056C14.2806 17.0601 14.317 17.0615 14.3532 17.0604C14.5563 17.0539 14.739 16.9668 14.8703 16.83L17.836 13.8643C18.1289 13.5714 18.1289 13.0965 17.836 12.8036C17.5431 12.5107 17.0682 12.5107 16.7753 12.8036L15.0791 14.4998L15.0791 9.28581C15.0791 8.87159 14.7433 8.53581 14.3291 8.53581C13.9149 8.53581 13.5791 8.87159 13.5791 9.28581L13.5791 14.5003L11.8824 12.8036Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M16.875 10V13.75M15 11.875H18.75M6.5625 3.125V6.25M5 4.6875H8.125M13.125 14.375V16.875M11.875 15.625H14.375M11.25 6.25L13.75 8.75M2.94713 14.5575L14.5647 2.93998C14.8087 2.6959 15.2045 2.6959 15.4486 2.93998L17.0644 4.55583C17.3085 4.79991 17.3085 5.19564 17.0644 5.43971L5.44686 17.0573C5.20278 17.3013 4.80705 17.3013 4.56298 17.0573L2.94713 15.4414C2.70305 15.1973 2.70305 14.8016 2.94713 14.5575Z" stroke="#B8B8B8" stroke-width="1.36364" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 603 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.6061 15.0981C11.899 15.391 12.3738 15.391 12.6667 15.0981L17.0126 10.7523C17.3055 10.4594 17.3055 9.9845 17.0126 9.6916C16.7197 9.39871 16.2448 9.39871 15.9519 9.6916L12.1364 13.5071L8.32086 9.6916C8.02796 9.39871 7.55309 9.39871 7.2602 9.6916C6.9673 9.9845 6.9673 10.4594 7.2602 10.7523L11.6061 15.0981Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 484 B |
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.37402 21.9382C2.95981 21.9382 2.62402 21.6024 2.62402 21.1882L2.62402 4.68823C2.62402 4.27402 2.95981 3.93823 3.37402 3.93823C3.78824 3.93823 4.12402 4.27402 4.12402 4.68823L4.12402 21.1882C4.12402 21.6024 3.78824 21.9382 3.37402 21.9382Z" fill="#F5F5F5" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.13679 13.2225C6.1734 13.312 6.22804 13.3959 6.30072 13.4686L9.99841 17.1663C10.2913 17.4591 10.7662 17.4591 11.0591 17.1663C11.352 16.8734 11.352 16.3985 11.0591 16.1056L8.64171 13.6882L20.8995 13.6882C21.3137 13.6882 21.6495 13.3524 21.6495 12.9382C21.6495 12.524 21.3137 12.1882 20.8995 12.1882L8.64172 12.1882L11.0591 9.77089C11.352 9.47799 11.352 9.00312 11.0591 8.71023C10.7662 8.41733 10.2913 8.41733 9.99841 8.71023L6.3028 12.4058C6.29605 12.4125 6.28943 12.4194 6.28294 12.4263C6.15771 12.5603 6.08105 12.7403 6.08105 12.9382C6.08105 13.0388 6.10086 13.1348 6.13679 13.2225Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M17.1927 12C17.1927 12.8983 17.9209 13.6266 18.8192 13.6266C19.7176 13.6266 20.4458 12.8983 20.4458 12C20.4458 11.1017 19.7176 10.3734 18.8192 10.3734C17.9209 10.3734 17.1927 11.1017 17.1927 12Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M10.3733 12C10.3733 12.8983 11.1016 13.6266 11.9999 13.6266C12.8982 13.6266 13.6265 12.8983 13.6265 12C13.6265 11.1017 12.8982 10.3734 11.9999 10.3734C11.1016 10.3734 10.3733 11.1017 10.3733 12Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M3.554 12C3.554 12.8983 4.28224 13.6266 5.18056 13.6266C6.07889 13.6266 6.80713 12.8983 6.80713 12C6.80713 11.1017 6.07889 10.3734 5.18056 10.3734C4.28224 10.3734 3.554 11.1017 3.554 12Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 761 B |
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.79688 4.30721V20.8072H18.2969V8.86787L13.7362 4.30719L5.79688 4.30721ZM5.74688 2.80721L14.0469 2.80719C14.2458 2.80719 14.4366 2.88621 14.5772 3.02686L19.5772 8.02689C19.7179 8.16754 19.7969 8.3583 19.7969 8.55721V20.8072C19.7969 21.189 19.6558 21.5646 19.3901 21.8493C19.1228 22.1357 18.7488 22.3072 18.3469 22.3072H5.74688C5.34496 22.3072 4.97091 22.1357 4.70361 21.8493C4.43794 21.5646 4.29688 21.189 4.29688 20.8072V4.30721C4.29688 3.92545 4.43794 3.54979 4.70361 3.26515C4.97091 2.97875 5.34496 2.80722 5.74687 2.80721L5.74688 3.55721" fill="#B8B8B8"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.46973 11.5701C8.46973 11.1559 8.80551 10.8201 9.21973 10.8201H14.8735C15.2877 10.8201 15.6235 11.1559 15.6235 11.5701C15.6235 11.9843 15.2877 12.3201 14.8735 12.3201H9.21973C8.80551 12.3201 8.46973 11.9843 8.46973 11.5701Z" fill="#B8B8B8"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.46973 15.5701C8.46973 15.1559 8.80551 14.8201 9.21973 14.8201H14.8735C15.2877 14.8201 15.6235 15.1559 15.6235 15.5701C15.6235 15.9843 15.2877 16.3201 14.8735 16.3201H9.21973C8.80551 16.3201 8.46973 15.9843 8.46973 15.5701Z" fill="#B8B8B8"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,6 @@
|
|||||||
|
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M10.5 4.66052H4.5C4.08579 4.66052 3.75 4.99631 3.75 5.41052V11.4105C3.75 11.8247 4.08579 12.1605 4.5 12.1605H10.5C10.9142 12.1605 11.25 11.8247 11.25 11.4105V5.41052C11.25 4.99631 10.9142 4.66052 10.5 4.66052Z" fill="#B8B8B8"/>
|
||||||
|
<path d="M19.9058 4.66052H13.9058C13.4915 4.66052 13.1558 4.99631 13.1558 5.41052V11.4105C13.1558 11.8247 13.4915 12.1605 13.9058 12.1605H19.9058C20.32 12.1605 20.6558 11.8247 20.6558 11.4105V5.41052C20.6558 4.99631 20.32 4.66052 19.9058 4.66052Z" fill="#B8B8B8"/>
|
||||||
|
<path d="M10.5 13.9723H4.5C4.08579 13.9723 3.75 14.3081 3.75 14.7223V20.7223C3.75 21.1365 4.08579 21.4723 4.5 21.4723H10.5C10.9142 21.4723 11.25 21.1365 11.25 20.7223V14.7223C11.25 14.3081 10.9142 13.9723 10.5 13.9723Z" fill="#B8B8B8"/>
|
||||||
|
<path d="M19.9058 13.9723H13.9058C13.4915 13.9723 13.1558 14.3081 13.1558 14.7223V20.7223C13.1558 21.1365 13.4915 21.4723 13.9058 21.4723H19.9058C20.32 21.4723 20.6558 21.1365 20.6558 20.7223V14.7223C20.6558 14.3081 20.32 13.9723 19.9058 13.9723Z" fill="#B8B8B8"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,7 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M17.6643 7.17615H8.06277C7.68401 7.17615 7.37695 7.43198 7.37695 7.74758V10.6047C7.37695 10.9203 7.68401 11.1761 8.06277 11.1761H17.6643C18.043 11.1761 18.3501 10.9203 18.3501 10.6047V7.74758C18.3501 7.43198 18.043 7.17615 17.6643 7.17615Z" fill="#F5F5F5" />
|
||||||
|
<path d="M8.06231 18.1761L17.6638 18.1761C18.0426 18.1761 18.3496 17.9203 18.3496 17.6047L18.3496 14.7476C18.3496 14.432 18.0426 14.1761 17.6638 14.1761L8.06231 14.1761C7.68354 14.1761 7.37649 14.432 7.37649 14.7476L7.37649 17.6047C7.37649 17.9203 7.68354 18.1761 8.06231 18.1761Z" fill="#F5F5F5" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.86328 3.42615C3.86328 3.01193 4.22146 2.67615 4.6633 2.67615H21.0633C21.5051 2.67615 21.8633 3.01193 21.8633 3.42615C21.8633 3.84036 21.5051 4.17615 21.0633 4.17615H4.6633C4.22146 4.17615 3.86328 3.84036 3.86328 3.42615Z" fill="#F5F5F5" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.8633 21.9261C21.8633 22.3404 21.5051 22.6761 21.0633 22.6761L4.66331 22.6761C4.22147 22.6761 3.86328 22.3404 3.86328 21.9261C3.86328 21.5119 4.22147 21.1761 4.66331 21.1761L21.0633 21.1761C21.5051 21.1761 21.8633 21.5119 21.8633 21.9261Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
11
packages/noodl-editor/29bb549eb831b2a303606981127ad1da.svg
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<svg width="31" height="31" viewBox="0 0 31 31" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M25.4434 26.4445C25.0291 26.4445 24.6934 26.1087 24.6934 25.6945C24.6934 25.2803 25.0291 24.9445 25.4434 24.9445C25.8576 24.9445 26.1934 25.2803 26.1934 25.6945C26.1934 26.1087 25.8576 26.4445 25.4434 26.4445Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M11.7017 26.4445C11.2874 26.4445 10.9517 26.1087 10.9517 25.6945C10.9517 25.2803 11.2874 24.9445 11.7017 24.9445C12.1159 24.9445 12.4517 25.2803 12.4517 25.6945C12.4517 26.1087 12.1159 26.4445 11.7017 26.4445Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M18.5728 26.4445C18.1585 26.4445 17.8228 26.1087 17.8228 25.6945C17.8228 25.2803 18.1585 24.9445 18.5728 24.9445C18.987 24.9445 19.3228 25.2803 19.3228 25.6945C19.3228 26.1087 18.987 26.4445 18.5728 26.4445Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M4.83057 26.4445C4.41635 26.4445 4.08057 26.1087 4.08057 25.6945C4.08057 25.2803 4.41635 24.9445 4.83057 24.9445C5.24478 24.9445 5.58057 25.2803 5.58057 25.6945C5.58057 26.1087 5.24478 26.4445 4.83057 26.4445Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M4.83008 12.7025C4.41586 12.7025 4.08008 12.3667 4.08008 11.9525C4.08008 11.5382 4.41586 11.2025 4.83008 11.2025C5.24429 11.2025 5.58008 11.5382 5.58008 11.9525C5.58008 12.3667 5.24429 12.7025 4.83008 12.7025Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M25.4429 12.7025C25.0287 12.7025 24.6929 12.3667 24.6929 11.9525C24.6929 11.5382 25.0287 11.2025 25.4429 11.2025C25.8571 11.2025 26.1929 11.5382 26.1929 11.9525C26.1929 12.3667 25.8571 12.7025 25.4429 12.7025Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M4.83057 19.5734C4.41635 19.5734 4.08057 19.2376 4.08057 18.8234C4.08057 18.4092 4.41635 18.0734 4.83057 18.0734C5.24478 18.0734 5.58057 18.4092 5.58057 18.8234C5.58057 19.2376 5.24478 19.5734 4.83057 19.5734Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M25.4434 19.5734C25.0291 19.5734 24.6934 19.2376 24.6934 18.8234C24.6934 18.4092 25.0291 18.0734 25.4434 18.0734C25.8576 18.0734 26.1934 18.4092 26.1934 18.8234C26.1934 19.2376 25.8576 19.5734 25.4434 19.5734Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.08008 4.90173C4.08008 4.48752 4.41586 4.15173 4.83008 4.15173L25.4426 4.15173C25.8568 4.15173 26.1926 4.48752 26.1926 4.90173C26.1926 5.31595 25.8568 5.65173 25.4426 5.65173L4.83008 5.65173C4.41586 5.65173 4.08008 5.31595 4.08008 4.90173Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
@@ -0,0 +1,7 @@
|
|||||||
|
<svg width="31" height="31" viewBox="0 0 31 31" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M24.0504 17.4524C23.7557 17.7471 23.278 17.7471 22.9834 17.4524L20.3812 14.8503C20.0866 14.5556 20.0866 14.0779 20.3812 13.7832C20.6759 13.4886 21.1536 13.4886 21.4482 13.7832L23.5169 15.8519L25.5855 13.7832C25.8802 13.4886 26.3579 13.4886 26.6525 13.7832C26.9472 14.0779 26.9472 14.5556 26.6525 14.8503L24.0504 17.4524Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.2441 8.85429C17.2441 8.43759 16.9063 8.09979 16.4896 8.09979H4.12787C3.71117 8.09979 3.37336 8.43759 3.37336 8.85429C3.37336 9.27099 3.71117 9.60879 4.12787 9.60879H16.4896C16.9063 9.60879 17.2441 9.27099 17.2441 8.85429Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.2441 13.3633C17.2441 12.9466 16.9063 12.6088 16.4896 12.6088H4.12787C3.71117 12.6088 3.37336 12.9466 3.37336 13.3633C3.37336 13.78 3.71117 14.1178 4.12787 14.1178H16.4896C16.9063 14.1178 17.2441 13.78 17.2441 13.3633Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.2441 17.8722C17.2441 17.4555 16.9063 17.1177 16.4896 17.1177H4.12787C3.71117 17.1177 3.37336 17.4555 3.37336 17.8722C3.37336 18.2889 3.71117 18.6267 4.12787 18.6267H16.4896C16.9063 18.6267 17.2441 18.2889 17.2441 17.8722Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.2441 22.3812C17.2441 21.9645 16.9063 21.6267 16.4896 21.6267H4.12787C3.71117 21.6267 3.37336 21.9645 3.37336 22.3812C3.37336 22.7979 3.71117 23.1357 4.12787 23.1357H16.4896C16.9063 23.1357 17.2441 22.7979 17.2441 22.3812Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
11
packages/noodl-editor/2e0f578b815a0a954439161112e9c83d.svg
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<svg width="31" height="31" viewBox="0 0 31 31" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M3.99023 25.6046C3.99023 25.1904 4.32602 24.8546 4.74023 24.8546C5.15445 24.8546 5.49023 25.1904 5.49023 25.6046C5.49023 26.0188 5.15445 26.3546 4.74023 26.3546C4.32602 26.3546 3.99023 26.0188 3.99023 25.6046Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M3.99023 11.8629C3.99023 11.4487 4.32602 11.1129 4.74023 11.1129C5.15445 11.1129 5.49023 11.4487 5.49023 11.8629C5.49023 12.2771 5.15445 12.6129 4.74023 12.6129C4.32602 12.6129 3.99023 12.2771 3.99023 11.8629Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M3.99023 18.734C3.99023 18.3198 4.32602 17.984 4.74023 17.984C5.15445 17.984 5.49023 18.3198 5.49023 18.734C5.49023 19.1482 5.15445 19.484 4.74023 19.484C4.32602 19.484 3.99023 19.1482 3.99023 18.734Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M3.99023 4.99207C3.99023 4.57785 4.32602 4.24207 4.74023 4.24207C5.15445 4.24207 5.49023 4.57785 5.49023 4.99207C5.49023 5.40628 5.15445 5.74207 4.74023 5.74207C4.32602 5.74207 3.99023 5.40628 3.99023 4.99207Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M17.7324 4.99158C17.7324 4.57736 18.0682 4.24158 18.4824 4.24158C18.8966 4.24158 19.2324 4.57736 19.2324 4.99158C19.2324 5.40579 18.8966 5.74158 18.4824 5.74158C18.0682 5.74158 17.7324 5.40579 17.7324 4.99158Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M17.7324 25.6044C17.7324 25.1902 18.0682 24.8544 18.4824 24.8544C18.8966 24.8544 19.2324 25.1902 19.2324 25.6044C19.2324 26.0186 18.8966 26.3544 18.4824 26.3544C18.0682 26.3544 17.7324 26.0186 17.7324 25.6044Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M10.8613 4.99182C10.8613 4.57761 11.1971 4.24182 11.6113 4.24182C12.0255 4.24182 12.3613 4.57761 12.3613 4.99182C12.3613 5.40603 12.0255 5.74182 11.6113 5.74182C11.1971 5.74182 10.8613 5.40603 10.8613 4.99182Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M10.8613 25.6046C10.8613 25.1904 11.1971 24.8546 11.6113 24.8546C12.0255 24.8546 12.3613 25.1904 12.3613 25.6046C12.3613 26.0188 12.0255 26.3546 11.6113 26.3546C11.1971 26.3546 10.8613 26.0188 10.8613 25.6046Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M25.5332 4.24146C25.9474 4.24146 26.2832 4.57724 26.2832 4.99146L26.2832 25.604C26.2832 26.0182 25.9474 26.354 25.5332 26.354C25.119 26.354 24.7832 26.0182 24.7832 25.604L24.7832 4.99145C24.7832 4.57724 25.119 4.24145 25.5332 4.24146Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M11.9999 18.1304C12.6198 18.1304 13.1223 17.6279 13.1223 17.008C13.1223 16.3881 12.6198 15.8855 11.9999 15.8855C11.38 15.8855 10.8774 16.3881 10.8774 17.008C10.8774 17.6279 11.38 18.1304 11.9999 18.1304Z" fill="#B8B8B8"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.7115 6.65385C11.3268 6.39898 12.0039 6.3323 12.6571 6.46223C13.3103 6.59216 13.9103 6.91286 14.3812 7.3838C14.8522 7.85473 15.1729 8.45473 15.3028 9.10793C15.4327 9.76113 15.366 10.4382 15.1112 11.0535C14.8563 11.6688 14.4247 12.1947 13.871 12.5647C13.5276 12.7941 13.1469 12.9572 12.7485 13.048V14.1205C12.7485 14.5338 12.4134 14.8688 12.0002 14.8688C11.5869 14.8688 11.2519 14.5338 11.2519 14.1205V12.3839C11.2519 12.1855 11.3307 11.9951 11.471 11.8548C11.6114 11.7145 11.8017 11.6356 12.0002 11.6356C12.3702 11.6356 12.7318 11.5259 13.0395 11.3203C13.3471 11.1148 13.5869 10.8226 13.7285 10.4808C13.8701 10.1389 13.9071 9.76279 13.835 9.3999C13.7628 9.03701 13.5846 8.70368 13.323 8.44205C13.0613 8.18042 12.728 8.00225 12.3651 7.93007C12.0022 7.85788 11.6261 7.89493 11.2843 8.03652C10.9424 8.17812 10.6502 8.41789 10.4447 8.72554C10.2391 9.03318 10.1294 9.39487 10.1294 9.76487C10.1294 10.1781 9.79439 10.5132 9.38111 10.5132C8.96784 10.5132 8.63281 10.1781 8.63281 9.76487C8.63281 9.09887 8.8303 8.44783 9.20031 7.89407C9.57032 7.34031 10.0962 6.90871 10.7115 6.65385Z" fill="#B8B8B8"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.8624 3.66061C7.7533 3.66061 3.61154 7.80237 3.61154 12.9115C3.61154 15.2316 4.46564 17.3522 5.87657 18.9761C6.54981 17.9035 7.46295 16.9973 8.54791 16.3314C8.99048 16.0597 9.45573 15.8317 9.93713 15.6491C8.72904 14.7534 7.94601 13.3169 7.94601 11.6975C7.94601 8.98251 10.1469 6.78158 12.8619 6.78158C15.5769 6.78158 17.7778 8.98251 17.7778 11.6975C17.7778 13.3166 16.9951 14.7529 15.7874 15.6486C16.2693 15.8313 16.735 16.0595 17.178 16.3314C18.2627 16.9972 19.1757 17.9031 19.8489 18.9754C21.2594 17.3516 22.1133 15.2313 22.1133 12.9115C22.1133 7.80237 17.9715 3.66061 12.8624 3.66061ZM18.7444 20.0519C18.182 19.0525 17.3733 18.2113 16.3933 17.6098C15.3488 16.9687 14.1498 16.6243 12.925 16.613C12.904 16.6133 12.883 16.6134 12.8619 16.6134C12.8412 16.6134 12.8204 16.6133 12.7997 16.613C11.5754 16.6245 10.3768 16.9689 9.33259 17.6098C8.35234 18.2115 7.54352 19.0528 6.98114 20.0525C8.57978 21.3706 10.6286 22.1624 12.8624 22.1624C15.0965 22.1624 17.1457 21.3704 18.7444 20.0519ZM12.9201 15.1129C14.7798 15.0819 16.2778 13.5646 16.2778 11.6975C16.2778 9.81094 14.7485 8.28158 12.8619 8.28158C10.9754 8.28158 9.44601 9.81094 9.44601 11.6975C9.44601 13.5648 10.9444 15.0822 12.8044 15.1129C12.8239 15.1128 12.8434 15.1127 12.8629 15.1127C12.882 15.1127 12.901 15.1128 12.9201 15.1129ZM2.11154 12.9115C2.11154 6.97394 6.92487 2.16061 12.8624 2.16061C18.8 2.16061 23.6133 6.97394 23.6133 12.9115C23.6133 18.849 18.8 23.6624 12.8624 23.6624C6.92487 23.6624 2.11154 18.849 2.11154 12.9115Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.63135 21.3983H8.82135V21.3883C9.02135 21.3883 9.21135 21.3483 9.39135 21.2783C9.57135 21.2083 9.74135 21.0983 9.88135 20.9583L18.6285 12.2111C18.6417 12.1997 18.6545 12.1877 18.667 12.1752C18.6796 12.1627 18.6915 12.1498 18.703 12.1367L21.1313 9.70833C21.2813 9.56833 21.3913 9.40833 21.4613 9.22833C21.5413 9.04833 21.5813 8.84833 21.5813 8.64833C21.5813 8.44833 21.5413 8.24833 21.4613 8.06833C21.3813 7.87833 21.2713 7.71833 21.1313 7.57833L16.9513 3.39833C16.8113 3.25833 16.6513 3.14833 16.4613 3.06833C16.0913 2.91833 15.6813 2.90833 15.3013 3.06833C15.1213 3.14833 14.9513 3.25833 14.8213 3.39833L3.57135 14.6483C3.42135 14.7883 3.31135 14.9583 3.24135 15.1383C3.17135 15.3183 3.13135 15.5183 3.13135 15.7083V19.8983C3.13135 20.2883 3.29135 20.6783 3.57135 20.9583C3.85135 21.2383 4.23135 21.3983 4.63135 21.3983ZM18.1361 10.5836L20.0713 8.64833L15.8813 4.45833L13.9461 6.39358L18.1361 10.5836ZM12.8854 7.45424L4.63135 15.7083V19.8983H8.82135L17.0754 11.6442L12.8854 7.45424Z" fill="#b8b8b8" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M12.7612 21.2292C12.8512 21.1892 12.9312 21.1392 13.0012 21.0692L19.7512 14.3192C20.0412 14.0292 20.0412 13.5492 19.7512 13.2592C19.4612 12.9692 18.9812 12.9692 18.6912 13.2592L13.2212 18.7292L13.2213 4.03918C13.2213 3.62918 12.8812 3.28918 12.4713 3.28918C12.0613 3.28918 11.7212 3.62918 11.7212 4.03918L11.7212 18.7292L6.25125 13.2592C5.96125 12.9692 5.48125 12.9692 5.19125 13.2592C5.04125 13.4092 4.97125 13.5992 4.97125 13.7892C4.97125 13.9792 5.04125 14.1692 5.19125 14.3192L11.9412 21.0692C12.0112 21.1392 12.0912 21.1892 12.1812 21.2292C12.3612 21.3092 12.5712 21.3092 12.7512 21.2292L12.7612 21.2292Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 745 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="31" height="31" viewBox="0 0 31 31" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.0412 5.92932C17.9447 6.41692 17.4712 6.73398 16.9836 6.63748C15.0511 6.25504 13.0459 6.54499 11.3009 7.4592C9.55589 8.3734 8.17599 9.85688 7.39027 11.6634C6.60454 13.4699 6.46024 15.4908 6.98132 17.3906C7.5024 19.2904 8.65751 20.9549 10.2549 22.1078C11.8523 23.2607 13.796 23.8326 15.7632 23.7286C17.7305 23.6246 19.603 22.851 21.07 21.5362C22.537 20.2213 23.5102 18.4443 23.8281 16.5002C23.9957 15.4749 23.9758 14.4356 23.777 13.4308C23.6805 12.9432 23.9975 12.4697 24.4851 12.3733C24.9727 12.2768 25.4462 12.5938 25.5427 13.0814C25.783 14.2956 25.8071 15.5516 25.6045 16.7907C25.2203 19.1401 24.0442 21.2876 22.2713 22.8766C20.4985 24.4655 18.2356 25.4004 15.8582 25.5261C13.4808 25.6517 11.132 24.9606 9.20153 23.5674C7.27108 22.1741 5.87514 20.1626 5.24543 17.8667C4.61572 15.5708 4.7901 13.1286 5.73964 10.9455C6.68918 8.76233 8.35676 6.96956 10.4656 5.86476C12.5744 4.75995 14.9976 4.40955 17.333 4.87173C17.8206 4.96822 18.1377 5.44172 18.0412 5.92932Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.2192 6.98721C20.5159 6.58847 21.0797 6.5058 21.4785 6.80256C22.3278 7.43465 23.0759 8.19262 23.6969 9.05028C23.9884 9.45288 23.8983 10.0156 23.4957 10.3071C23.0931 10.5986 22.5304 10.5085 22.2389 10.1059C21.7252 9.39644 21.1064 8.76942 20.4038 8.24654C20.0051 7.94978 19.9224 7.38596 20.2192 6.98721Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.6367 5.52362L12.8867 5.52362L12.8867 18.4764L19.6367 18.4764L19.6367 5.52362ZM11.3867 18.4764L11.3867 5.52362L4.63672 5.52362L4.63672 18.4764L11.3867 18.4764ZM19.6367 4.02362C20.3687 4.02362 21.1367 4.56328 21.1367 5.43056L21.1367 18.5694C21.1367 19.4367 20.3687 19.9764 19.6367 19.9764L4.63672 19.9764C3.90471 19.9764 3.13672 19.4367 3.13672 18.5694L3.13672 5.43056C3.13672 4.56328 3.90471 4.02362 4.63672 4.02362L19.6367 4.02362Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 611 B |
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 5.25C9.92893 5.25 8.25 6.92893 8.25 9C8.25 10.1195 8.74056 11.1244 9.51845 11.8115C7.71591 12.6752 6.43353 14.4507 6.2681 16.5409C6.21309 17.236 6.78133 17.75 7.4 17.75H16.6C17.2187 17.75 17.7869 17.236 17.7319 16.5409C17.5665 14.4507 16.2841 12.6752 14.4816 11.8115C15.2594 11.1244 15.75 10.1195 15.75 9C15.75 6.92893 14.0711 5.25 12 5.25ZM9.75 9C9.75 7.75736 10.7574 6.75 12 6.75C13.2426 6.75 14.25 7.75736 14.25 9C14.25 10.2426 13.2426 11.25 12 11.25C10.7574 11.25 9.75 10.2426 9.75 9ZM12 12.75C14.0912 12.75 15.8302 14.2608 16.1841 16.25H7.81587C8.16982 14.2608 9.9088 12.75 12 12.75Z" fill="#F5F5F5" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M23.75 12C23.75 18.4893 18.4893 23.75 12 23.75C5.51065 23.75 0.25 18.4893 0.25 12C0.25 5.51065 5.51065 0.25 12 0.25C18.4893 0.25 23.75 5.51065 23.75 12ZM12.75 1.77702V4C12.75 4.41421 12.4142 4.75 12 4.75C11.5858 4.75 11.25 4.41421 11.25 4V1.77702C6.18691 2.14317 2.14317 6.18691 1.77702 11.25H4C4.41421 11.25 4.75 11.5858 4.75 12C4.75 12.4142 4.41421 12.75 4 12.75H1.77702C2.14317 17.8131 6.18691 21.8568 11.25 22.223V20C11.25 19.5858 11.5858 19.25 12 19.25C12.4142 19.25 12.75 19.5858 12.75 20V22.223C17.8131 21.8568 21.8568 17.8131 22.223 12.75H20C19.5858 12.75 19.25 12.4142 19.25 12C19.25 11.5858 19.5858 11.25 20 11.25H22.223C21.8568 6.18691 17.8131 2.14317 12.75 1.77702Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M6.16495 9.7121C6.16495 10.1434 6.51455 10.493 6.9458 10.493C7.37706 10.493 7.72666 10.1434 7.72666 9.7121H6.16495ZM8.20978 5.54532L7.56052 5.1115L7.56052 5.1115L8.20978 5.54532ZM15.909 2.35621L16.0613 1.59036L16.0613 1.59036L15.909 2.35621ZM19.7491 4.4088L20.3012 3.85665L20.3012 3.85665L19.7491 4.4088ZM20.6535 12.2834C20.4884 12.6818 20.6776 13.1386 21.0761 13.3036C21.4745 13.4687 21.9313 13.2795 22.0963 12.881L20.6535 12.2834ZM2.48349 15.6744L1.93134 16.2266L1.93134 16.2266L2.48349 15.6744ZM2.48349 8.24979L1.93134 7.69764L1.93134 7.69764L2.48349 8.24979ZM6.1958 6.7121L6.1958 7.49296L6.19609 7.49296L6.1958 6.7121ZM7.31046 7.62924C7.72896 7.73333 8.15261 7.47845 8.25669 7.05995C8.36078 6.64144 8.1059 6.2178 7.6874 6.11371L7.31046 7.62924ZM7.48982 17.993C7.92108 17.993 8.27068 17.6434 8.27068 17.2121C8.27068 16.7808 7.92108 16.4312 7.48982 16.4312V17.993ZM12.3221 19.1264C12.3221 19.5577 12.6717 19.9073 13.1029 19.9073C13.5342 19.9073 13.8838 19.5577 13.8838 19.1264H12.3221ZM13.1029 10.9289L12.3251 10.8598L12.3221 10.8943V10.9289H13.1029ZM15.1309 9.00081L15.1309 9.78176L15.143 9.78157L15.1309 9.00081ZM16.3632 10.1673C16.7193 10.4106 17.2052 10.3192 17.4485 9.96309C17.6918 9.60702 17.6003 9.12114 17.2442 8.87785L16.3632 10.1673ZM11 12.9075C10.5687 12.9075 10.2191 13.2571 10.2191 13.6884C10.2191 14.1196 10.5687 14.4692 11 14.4692V12.9075ZM17 14.4692C17.4313 14.4692 17.7809 14.1196 17.7809 13.6884C17.7809 13.2571 17.4313 12.9075 17 12.9075V14.4692ZM7.72666 9.7121C7.72666 8.38318 8.12073 7.0841 8.85904 5.97914L7.56052 5.1115C6.65061 6.47328 6.16495 8.0743 6.16495 9.7121H7.72666ZM8.85904 5.97914C9.59735 4.87419 10.6467 4.01298 11.8745 3.50442L11.2769 2.06159C9.76373 2.68835 8.47043 3.74972 7.56052 5.1115L8.85904 5.97914ZM11.8745 3.50442C13.1023 2.99586 14.4533 2.8628 15.7566 3.12206L16.0613 1.59036C14.455 1.27084 12.79 1.43483 11.2769 2.06159L11.8745 3.50442ZM15.7566 3.12206C17.06 3.38132 18.2573 4.02126 19.197 4.96095L20.3012 3.85665C19.1432 2.69855 17.6676 1.90988 16.0613 1.59036L15.7566 3.12206ZM19.197 4.96095C20.1366 5.90064 20.7766 7.09787 21.0358 8.40126L22.5675 8.09659C22.248 6.49026 21.4593 5.01475 20.3012 3.85665L19.197 4.96095ZM21.0358 8.40126C21.2951 9.70465 21.162 11.0556 20.6535 12.2834L22.0963 12.881C22.7231 11.3679 22.8871 9.70292 22.5675 8.09659L21.0358 8.40126ZM6.1958 16.4312C5.01051 16.4312 3.87377 15.9604 3.03564 15.1223L1.93134 16.2266C3.06235 17.3576 4.59632 17.993 6.1958 17.993V16.4312ZM3.03564 15.1223C2.19751 14.2841 1.72666 13.1474 1.72666 11.9621H0.164946C0.164946 13.5616 0.800338 15.0956 1.93134 16.2266L3.03564 15.1223ZM1.72666 11.9621C1.72666 10.7768 2.19751 9.64007 3.03564 8.80194L1.93134 7.69764C0.800337 8.82865 0.164946 10.3626 0.164946 11.9621H1.72666ZM3.03564 8.80194C3.87377 7.96381 5.01051 7.49296 6.1958 7.49296V5.93125C4.59632 5.93125 3.06235 6.56664 1.93134 7.69764L3.03564 8.80194ZM6.19609 7.49296C6.57171 7.49281 6.94594 7.53858 7.31046 7.62924L7.6874 6.11371C7.19939 5.99233 6.69838 5.93106 6.19551 5.93125L6.19609 7.49296ZM7.48982 16.4312H6.1958V17.993H7.48982V16.4312ZM13.8838 19.1264V13.6884H12.3221V19.1264H13.8838ZM13.8838 13.6884V10.9289H12.3221V13.6884H13.8838ZM13.8807 10.9981C13.9215 10.5396 14.0001 10.2615 14.1349 10.0918C14.2312 9.97051 14.4554 9.78166 15.1309 9.78166V8.21995C14.1388 8.21995 13.3915 8.51685 12.912 9.12045C12.471 9.67566 12.3694 10.3616 12.3251 10.8598L13.8807 10.9981ZM15.143 9.78157C15.4023 9.77756 15.5773 9.79741 15.7385 9.84506C15.9011 9.89314 16.0924 9.98228 16.3632 10.1673L17.2442 8.87785C16.8831 8.6311 16.5439 8.45463 16.1811 8.3474C15.8169 8.23974 15.4714 8.21459 15.1188 8.22005L15.143 9.78157ZM11 14.4692H13.1029V12.9075H11V14.4692ZM13.1029 14.4692H17V12.9075H13.1029V14.4692Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 3.7 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.6064 2.71027C11.8993 2.41738 12.3741 2.41738 12.667 2.71027L17.8213 7.86454C18.1142 8.15744 18.1142 8.63231 17.8213 8.9252C17.5284 9.2181 17.0535 9.2181 16.7606 8.9252L12.1367 4.30126L7.51275 8.9252C7.21986 9.2181 6.74498 9.2181 6.45209 8.9252C6.1592 8.63231 6.1592 8.15744 6.45209 7.86454L11.6064 2.71027Z" fill="#F5F5F5" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.6064 22.0795C11.8993 22.3724 12.3741 22.3724 12.667 22.0795L17.8213 16.9252C18.1142 16.6323 18.1142 16.1574 17.8213 15.8645C17.5284 15.5716 17.0535 15.5716 16.7606 15.8645L12.1367 20.4885L7.51275 15.8645C7.21986 15.5716 6.74498 15.5716 6.45209 15.8645C6.1592 16.1574 6.1592 16.6323 6.45209 16.9252L11.6064 22.0795Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 875 B |
12
packages/noodl-editor/41534c1ab61ee8cd15950a6aeafdfec8.svg
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<svg width="31" height="31" viewBox="0 0 31 31" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M26.3335 25.6045C26.3335 25.1903 25.9977 24.8545 25.5835 24.8545C25.1693 24.8545 24.8335 25.1903 24.8335 25.6045C24.8335 26.0187 25.1693 26.3545 25.5835 26.3545C25.9977 26.3545 26.3335 26.0187 26.3335 25.6045Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M26.3335 11.8628C26.3335 11.4486 25.9977 11.1128 25.5835 11.1128C25.1693 11.1128 24.8335 11.4486 24.8335 11.8628C24.8335 12.277 25.1693 12.6128 25.5835 12.6128C25.9977 12.6128 26.3335 12.277 26.3335 11.8628Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M5.43994 11.8628C5.43994 11.4486 5.10415 11.1128 4.68994 11.1128C4.27573 11.1128 3.93994 11.4486 3.93994 11.8628C3.93994 12.277 4.27573 12.6128 4.68994 12.6128C5.10415 12.6128 5.43994 12.277 5.43994 11.8628Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M26.3335 18.7339C26.3335 18.3197 25.9977 17.9839 25.5835 17.9839C25.1693 17.9839 24.8335 18.3197 24.8335 18.7339C24.8335 19.1481 25.1693 19.4839 25.5835 19.4839C25.9977 19.4839 26.3335 19.1481 26.3335 18.7339Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M26.3335 4.9917C26.3335 4.57749 25.9977 4.2417 25.5835 4.2417C25.1693 4.2417 24.8335 4.57749 24.8335 4.9917C24.8335 5.40591 25.1693 5.7417 25.5835 5.7417C25.9977 5.7417 26.3335 5.40591 26.3335 4.9917Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M12.5913 4.9917C12.5913 4.57749 12.2555 4.2417 11.8413 4.2417C11.4271 4.2417 11.0913 4.57749 11.0913 4.9917C11.0913 5.40591 11.4271 5.7417 11.8413 5.7417C12.2555 5.7417 12.5913 5.40591 12.5913 4.9917Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M19.4624 4.9917C19.4624 4.57749 19.1266 4.2417 18.7124 4.2417C18.2982 4.2417 17.9624 4.57749 17.9624 4.9917C17.9624 5.40591 18.2982 5.7417 18.7124 5.7417C19.1266 5.7417 19.4624 5.40591 19.4624 4.9917Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M19.4624 25.6045C19.4624 25.1903 19.1266 24.8545 18.7124 24.8545C18.2982 24.8545 17.9624 25.1903 17.9624 25.6045C17.9624 26.0187 18.2982 26.3545 18.7124 26.3545C19.1266 26.3545 19.4624 26.0187 19.4624 25.6045Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M5.72021 4.9917C5.72021 4.57749 5.38443 4.2417 4.97021 4.2417C4.556 4.2417 4.22021 4.57749 4.22021 4.9917C4.22021 5.40591 4.556 5.7417 4.97021 5.7417C5.38443 5.7417 5.72021 5.40591 5.72021 4.9917Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.72021 18.6043L5.72021 17.5883C5.72021 17.1741 5.38443 16.8383 4.97021 16.8383C4.556 16.8383 4.22021 17.1741 4.22021 17.5883L4.22021 18.6043C4.22021 22.8845 7.69001 26.3543 11.9702 26.3543L12.9862 26.3543C13.4004 26.3543 13.7362 26.0185 13.7362 25.6043C13.7362 25.1901 13.4004 24.8543 12.9862 24.8543L11.9702 24.8543C8.51844 24.8543 5.72021 22.0561 5.72021 18.6043Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.6 KiB |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.2819 5.85688C3.2819 5.83482 3.28948 5.81974 3.2948 5.81273L8.26721 5.81273L10.8693 7.87421L10.8711 7.87561C11.1295 8.07911 11.4486 8.19371 11.7818 8.19516L11.785 8.19517L18.269 8.19517C18.2743 8.20218 18.2819 8.21725 18.2819 8.23931L18.2819 10.6218C18.2819 10.6694 18.2864 10.7161 18.2949 10.7613L6.07219 10.7613C5.75219 10.7613 5.45219 10.8513 5.20219 11.0313C4.94219 11.2113 4.75219 11.4713 4.65219 11.7613L3.2819 15.7027L3.2819 5.85688ZM1.78259 20.184C1.79959 20.5831 2.12857 20.9015 2.5319 20.9015C2.53788 20.9015 2.54384 20.9014 2.54978 20.9013L19.0322 20.9013C19.3522 20.9013 19.6322 20.7013 19.7422 20.4013L22.4122 12.7013C22.4922 12.4813 22.5122 12.2413 22.4722 12.0013C22.4422 11.7713 22.3422 11.5513 22.2022 11.3613C22.0622 11.1813 21.8722 11.0213 21.6622 10.9213C21.4522 10.8113 21.2222 10.7613 20.9922 10.7613L19.7689 10.7613C19.7775 10.7161 19.7819 10.6694 19.7819 10.6218L19.7819 8.23931C19.7819 7.84318 19.6337 7.45525 19.3575 7.16281C19.0799 6.86891 18.694 6.69517 18.2819 6.69517L11.7966 6.69517L9.19451 4.63369L9.19274 4.63229C8.93428 4.42879 8.61522 4.31418 8.28204 4.31273L3.2819 4.31273C2.86978 4.31273 2.48386 4.48648 2.2063 4.78037C1.93012 5.07282 1.7819 5.46074 1.7819 5.85688L1.7819 20.1155C1.78107 20.1383 1.7813 20.1612 1.78259 20.184ZM18.5022 19.4013L3.59219 19.4013L6.08219 12.2613L21.0022 12.2113L18.5022 19.4013Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1,6 @@
|
|||||||
|
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.1367 9.29317C12.5509 9.29317 12.8867 9.62895 12.8867 10.0432L12.8867 13.8015C12.8867 14.2157 12.5509 14.5515 12.1367 14.5515C11.7225 14.5515 11.3867 14.2157 11.3867 13.8015L11.3867 10.0432C11.3867 9.62895 11.7225 9.29317 12.1367 9.29317Z" fill="#F5F5F5" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.0215 3.02737C11.3603 2.8309 11.745 2.72743 12.1367 2.72743C12.5283 2.72743 12.913 2.8309 13.2518 3.02737C13.59 3.22349 13.8705 3.50535 14.065 3.84448C14.0653 3.84506 14.0656 3.84565 14.066 3.84623L22.216 17.9235C22.4116 18.2623 22.5152 18.6473 22.5155 19.0384C22.5159 19.4296 22.4134 19.814 22.2184 20.1531C22.0234 20.4922 21.7428 20.7741 21.4045 20.9706C21.0663 21.167 20.6824 21.2712 20.2912 21.2726L20.2886 21.2726H3.98476L3.98212 21.2726C3.59096 21.2712 3.20703 21.167 2.86879 20.9706C2.53055 20.7741 2.24988 20.4922 2.0549 20.1531C1.85992 19.814 1.75747 19.4296 1.75781 19.0384C1.75816 18.6473 1.86129 18.2631 2.05687 17.9243L10.2074 3.84623C10.2077 3.84562 10.2081 3.84501 10.2084 3.8444C10.4029 3.5053 10.6834 3.22348 11.0215 3.02737ZM10.8583 4.21874L11.5074 4.59453L3.35591 18.6743C3.35585 18.6744 3.35596 18.6742 3.35591 18.6743C3.29186 18.7854 3.25793 18.9116 3.25781 19.0398C3.2577 19.1681 3.2913 19.2941 3.35526 19.4054C3.41922 19.5166 3.51128 19.6091 3.62222 19.6735C3.7329 19.7378 3.85849 19.7719 3.98648 19.7726H20.2868C20.4148 19.7719 20.5404 19.7378 20.6511 19.6735C20.7621 19.6091 20.8541 19.5166 20.9181 19.4054C20.982 19.2941 21.0156 19.1681 21.0155 19.0398C21.0154 18.9116 20.9817 18.7858 20.9177 18.6748C20.9176 18.6746 20.9178 18.6749 20.9177 18.6748L12.7641 4.59128C12.7008 4.48073 12.6095 4.38886 12.4993 4.32497C12.3891 4.26108 12.264 4.22743 12.1367 4.22743C12.0093 4.22743 11.8842 4.26108 11.774 4.32497C11.6638 4.38886 11.5725 4.48073 11.5092 4.59127L10.8583 4.21874Z" fill="#F5F5F5" />
|
||||||
|
<path d="M12.843 16.8287C12.843 17.2188 12.5267 17.5351 12.1366 17.5351C11.7464 17.5351 11.4302 17.2188 11.4302 16.8287C11.4302 16.4386 11.7464 16.1223 12.1366 16.1223C12.5267 16.1223 12.843 16.4386 12.843 16.8287Z" fill="#F5F5F5" stroke="#F5F5F5" stroke-width="0.125" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
201
packages/noodl-editor/445.bundle.js
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
"use strict";
|
||||||
|
(global["webpackChunknoodl_editor"] = global["webpackChunknoodl_editor"] || []).push([[445],{
|
||||||
|
|
||||||
|
/***/ 17445:
|
||||||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||||
|
|
||||||
|
__webpack_require__.r(__webpack_exports__);
|
||||||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||||
|
/* harmony export */ conf: () => (/* binding */ conf),
|
||||||
|
/* harmony export */ language: () => (/* binding */ language)
|
||||||
|
/* harmony export */ });
|
||||||
|
/*!-----------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
|
||||||
|
*-----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
// src/basic-languages/css/css.ts
|
||||||
|
var conf = {
|
||||||
|
wordPattern: /(#?-?\d*\.\d\w*%?)|((::|[@#.!:])?[\w-?]+%?)|::|[@#.!:]/g,
|
||||||
|
comments: {
|
||||||
|
blockComment: ["/*", "*/"]
|
||||||
|
},
|
||||||
|
brackets: [
|
||||||
|
["{", "}"],
|
||||||
|
["[", "]"],
|
||||||
|
["(", ")"]
|
||||||
|
],
|
||||||
|
autoClosingPairs: [
|
||||||
|
{ open: "{", close: "}", notIn: ["string", "comment"] },
|
||||||
|
{ open: "[", close: "]", notIn: ["string", "comment"] },
|
||||||
|
{ open: "(", close: ")", notIn: ["string", "comment"] },
|
||||||
|
{ open: '"', close: '"', notIn: ["string", "comment"] },
|
||||||
|
{ open: "'", close: "'", notIn: ["string", "comment"] }
|
||||||
|
],
|
||||||
|
surroundingPairs: [
|
||||||
|
{ open: "{", close: "}" },
|
||||||
|
{ open: "[", close: "]" },
|
||||||
|
{ open: "(", close: ")" },
|
||||||
|
{ open: '"', close: '"' },
|
||||||
|
{ open: "'", close: "'" }
|
||||||
|
],
|
||||||
|
folding: {
|
||||||
|
markers: {
|
||||||
|
start: new RegExp("^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\/"),
|
||||||
|
end: new RegExp("^\\s*\\/\\*\\s*#endregion\\b.*\\*\\/")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var language = {
|
||||||
|
defaultToken: "",
|
||||||
|
tokenPostfix: ".css",
|
||||||
|
ws: "[ \n\r\f]*",
|
||||||
|
identifier: "-?-?([a-zA-Z]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",
|
||||||
|
brackets: [
|
||||||
|
{ open: "{", close: "}", token: "delimiter.bracket" },
|
||||||
|
{ open: "[", close: "]", token: "delimiter.bracket" },
|
||||||
|
{ open: "(", close: ")", token: "delimiter.parenthesis" },
|
||||||
|
{ open: "<", close: ">", token: "delimiter.angle" }
|
||||||
|
],
|
||||||
|
tokenizer: {
|
||||||
|
root: [{ include: "@selector" }],
|
||||||
|
selector: [
|
||||||
|
{ include: "@comments" },
|
||||||
|
{ include: "@import" },
|
||||||
|
{ include: "@strings" },
|
||||||
|
[
|
||||||
|
"[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)",
|
||||||
|
{ token: "keyword", next: "@keyframedeclaration" }
|
||||||
|
],
|
||||||
|
["[@](page|content|font-face|-moz-document)", { token: "keyword" }],
|
||||||
|
["[@](charset|namespace)", { token: "keyword", next: "@declarationbody" }],
|
||||||
|
[
|
||||||
|
"(url-prefix)(\\()",
|
||||||
|
["attribute.value", { token: "delimiter.parenthesis", next: "@urldeclaration" }]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"(url)(\\()",
|
||||||
|
["attribute.value", { token: "delimiter.parenthesis", next: "@urldeclaration" }]
|
||||||
|
],
|
||||||
|
{ include: "@selectorname" },
|
||||||
|
["[\\*]", "tag"],
|
||||||
|
["[>\\+,]", "delimiter"],
|
||||||
|
["\\[", { token: "delimiter.bracket", next: "@selectorattribute" }],
|
||||||
|
["{", { token: "delimiter.bracket", next: "@selectorbody" }]
|
||||||
|
],
|
||||||
|
selectorbody: [
|
||||||
|
{ include: "@comments" },
|
||||||
|
["[*_]?@identifier@ws:(?=(\\s|\\d|[^{;}]*[;}]))", "attribute.name", "@rulevalue"],
|
||||||
|
["}", { token: "delimiter.bracket", next: "@pop" }]
|
||||||
|
],
|
||||||
|
selectorname: [
|
||||||
|
["(\\.|#(?=[^{])|%|(@identifier)|:)+", "tag"]
|
||||||
|
],
|
||||||
|
selectorattribute: [{ include: "@term" }, ["]", { token: "delimiter.bracket", next: "@pop" }]],
|
||||||
|
term: [
|
||||||
|
{ include: "@comments" },
|
||||||
|
[
|
||||||
|
"(url-prefix)(\\()",
|
||||||
|
["attribute.value", { token: "delimiter.parenthesis", next: "@urldeclaration" }]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"(url)(\\()",
|
||||||
|
["attribute.value", { token: "delimiter.parenthesis", next: "@urldeclaration" }]
|
||||||
|
],
|
||||||
|
{ include: "@functioninvocation" },
|
||||||
|
{ include: "@numbers" },
|
||||||
|
{ include: "@name" },
|
||||||
|
{ include: "@strings" },
|
||||||
|
["([<>=\\+\\-\\*\\/\\^\\|\\~,])", "delimiter"],
|
||||||
|
[",", "delimiter"]
|
||||||
|
],
|
||||||
|
rulevalue: [
|
||||||
|
{ include: "@comments" },
|
||||||
|
{ include: "@strings" },
|
||||||
|
{ include: "@term" },
|
||||||
|
["!important", "keyword"],
|
||||||
|
[";", "delimiter", "@pop"],
|
||||||
|
["(?=})", { token: "", next: "@pop" }]
|
||||||
|
],
|
||||||
|
warndebug: [["[@](warn|debug)", { token: "keyword", next: "@declarationbody" }]],
|
||||||
|
import: [["[@](import)", { token: "keyword", next: "@declarationbody" }]],
|
||||||
|
urldeclaration: [
|
||||||
|
{ include: "@strings" },
|
||||||
|
["[^)\r\n]+", "string"],
|
||||||
|
["\\)", { token: "delimiter.parenthesis", next: "@pop" }]
|
||||||
|
],
|
||||||
|
parenthizedterm: [
|
||||||
|
{ include: "@term" },
|
||||||
|
["\\)", { token: "delimiter.parenthesis", next: "@pop" }]
|
||||||
|
],
|
||||||
|
declarationbody: [
|
||||||
|
{ include: "@term" },
|
||||||
|
[";", "delimiter", "@pop"],
|
||||||
|
["(?=})", { token: "", next: "@pop" }]
|
||||||
|
],
|
||||||
|
comments: [
|
||||||
|
["\\/\\*", "comment", "@comment"],
|
||||||
|
["\\/\\/+.*", "comment"]
|
||||||
|
],
|
||||||
|
comment: [
|
||||||
|
["\\*\\/", "comment", "@pop"],
|
||||||
|
[/[^*/]+/, "comment"],
|
||||||
|
[/./, "comment"]
|
||||||
|
],
|
||||||
|
name: [["@identifier", "attribute.value"]],
|
||||||
|
numbers: [
|
||||||
|
["-?(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?", { token: "attribute.value.number", next: "@units" }],
|
||||||
|
["#[0-9a-fA-F_]+(?!\\w)", "attribute.value.hex"]
|
||||||
|
],
|
||||||
|
units: [
|
||||||
|
[
|
||||||
|
"(em|ex|ch|rem|fr|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?",
|
||||||
|
"attribute.value.unit",
|
||||||
|
"@pop"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
keyframedeclaration: [
|
||||||
|
["@identifier", "attribute.value"],
|
||||||
|
["{", { token: "delimiter.bracket", switchTo: "@keyframebody" }]
|
||||||
|
],
|
||||||
|
keyframebody: [
|
||||||
|
{ include: "@term" },
|
||||||
|
["{", { token: "delimiter.bracket", next: "@selectorbody" }],
|
||||||
|
["}", { token: "delimiter.bracket", next: "@pop" }]
|
||||||
|
],
|
||||||
|
functioninvocation: [
|
||||||
|
["@identifier\\(", { token: "attribute.value", next: "@functionarguments" }]
|
||||||
|
],
|
||||||
|
functionarguments: [
|
||||||
|
["\\$@identifier@ws:", "attribute.name"],
|
||||||
|
["[,]", "delimiter"],
|
||||||
|
{ include: "@term" },
|
||||||
|
["\\)", { token: "attribute.value", next: "@pop" }]
|
||||||
|
],
|
||||||
|
strings: [
|
||||||
|
['~?"', { token: "string", next: "@stringenddoublequote" }],
|
||||||
|
["~?'", { token: "string", next: "@stringendquote" }]
|
||||||
|
],
|
||||||
|
stringenddoublequote: [
|
||||||
|
["\\\\.", "string"],
|
||||||
|
['"', { token: "string", next: "@pop" }],
|
||||||
|
[/[^\\"]+/, "string"],
|
||||||
|
[".", "string"]
|
||||||
|
],
|
||||||
|
stringendquote: [
|
||||||
|
["\\\\.", "string"],
|
||||||
|
["'", { token: "string", next: "@pop" }],
|
||||||
|
[/[^\\']+/, "string"],
|
||||||
|
[".", "string"]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/***/ })
|
||||||
|
|
||||||
|
}]);
|
||||||
|
//# sourceMappingURL=445.bundle.js.map
|
||||||
1
packages/noodl-editor/445.bundle.js.map
Normal file
1128
packages/noodl-editor/450.bundle.js
Normal file
1
packages/noodl-editor/450.bundle.js.map
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.40987 10.0134C5.40987 7.07147 7.79479 4.68656 10.7367 4.68656C13.6787 4.68656 16.0636 7.07147 16.0636 10.0134C16.0636 12.9553 13.6787 15.3403 10.7367 15.3403C7.79479 15.3403 5.40987 12.9553 5.40987 10.0134ZM10.7367 2.9759C6.85002 2.9759 3.69922 6.1267 3.69922 10.0134C3.69922 13.9001 6.85002 17.0509 10.7367 17.0509C12.0693 17.0509 13.3153 16.6806 14.3775 16.0372L19.114 20.7737C19.448 21.1077 19.9896 21.1077 20.3236 20.7737C20.6577 20.4397 20.6577 19.8981 20.3236 19.5641L15.7311 14.9715C16.994 13.6994 17.7742 11.9475 17.7742 10.0134C17.7742 6.1267 14.6234 2.9759 10.7367 2.9759Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 761 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.917 6.21967C21.2099 6.51256 21.2099 6.98744 20.917 7.28033L10.417 17.7803C10.1242 18.0732 9.64928 18.0732 9.35639 17.7803L4.10639 12.5303C3.8135 12.2374 3.8135 11.7626 4.10639 11.4697C4.39928 11.1768 4.87416 11.1768 5.16705 11.4697L9.88672 16.1893L19.8564 6.21967C20.1493 5.92678 20.6242 5.92678 20.917 6.21967Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 491 B |
11
packages/noodl-editor/515d58d605bb2b403b0cf3337a31f980.svg
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<svg width="31" height="30" viewBox="0 0 31 30" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M18.4189 11.2185C18.6951 11.2185 18.9189 11.4424 18.9189 11.7185L18.9189 18.2821C18.9189 18.5582 18.6951 18.7821 18.4189 18.7821L11.8554 18.7821C11.5792 18.7821 11.3554 18.5582 11.3554 18.2821L11.3554 11.7185C11.3554 11.4424 11.5792 11.2185 11.8554 11.2185L18.4189 11.2185Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M24.7803 12.0027C25.0732 12.2956 25.0732 12.7705 24.7803 13.0634L22.8437 15L24.7803 16.9366C25.0732 17.2295 25.0732 17.7044 24.7803 17.9973C24.4874 18.2902 24.0126 18.2902 23.7197 17.9973L21.2527 15.5303C20.9598 15.2374 20.9598 14.7626 21.2527 14.4697L23.7197 12.0027C24.0126 11.7098 24.4874 11.7098 24.7803 12.0027Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M28.8096 15.0002C28.8096 15.4145 28.4738 15.7502 28.0596 15.7502L21.7832 15.7502C21.369 15.7502 21.0332 15.4145 21.0332 15.0002C21.0332 14.586 21.369 14.2502 21.7832 14.2502L28.0596 14.2502C28.4738 14.2502 28.8096 14.586 28.8096 15.0002Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.94623 12.0027C4.65334 12.2956 4.65334 12.7705 4.94623 13.0634L6.88287 15L4.94623 16.9366C4.65334 17.2295 4.65334 17.7044 4.94623 17.9973C5.23913 18.2902 5.714 18.2902 6.00689 17.9973L8.47386 15.5303C8.76676 15.2374 8.76676 14.7626 8.47386 14.4697L6.00689 12.0027C5.714 11.7098 5.23913 11.7098 4.94623 12.0027Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.916992 15.0002C0.916992 15.4145 1.25278 15.7502 1.66699 15.7502L7.94339 15.7502C8.3576 15.7502 8.69339 15.4145 8.69339 15.0002C8.69339 14.586 8.3576 14.2502 7.94339 14.2502L1.66699 14.2502C1.25278 14.2502 0.916992 14.586 0.916992 15.0002Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.8604 24.917C17.5675 25.2099 17.0926 25.2099 16.7997 24.917L14.8631 22.9803L12.9265 24.917C12.6336 25.2099 12.1587 25.2099 11.8658 24.917C11.5729 24.6241 11.5729 24.1492 11.8658 23.8563L14.3328 21.3894C14.6257 21.0965 15.1005 21.0965 15.3934 21.3894L17.8604 23.8563C18.1533 24.1492 18.1533 24.6241 17.8604 24.917Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.8633 28.9459C14.4491 28.9459 14.1133 28.6101 14.1133 28.1959L14.1133 21.9195C14.1133 21.5053 14.4491 21.1695 14.8633 21.1695C15.2775 21.1695 15.6133 21.5053 15.6133 21.9195L15.6133 28.1959C15.6133 28.6101 15.2775 28.9459 14.8633 28.9459Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.8604 5.08326C17.5675 4.79036 17.0926 4.79036 16.7997 5.08326L14.8631 7.0199L12.9265 5.08326C12.6336 4.79036 12.1587 4.79036 11.8658 5.08326C11.5729 5.37615 11.5729 5.85102 11.8658 6.14392L14.3328 8.61089C14.6257 8.90378 15.1005 8.90378 15.3934 8.61089L17.8604 6.14392C18.1533 5.85102 18.1533 5.37615 17.8604 5.08326Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.8633 1.05414C14.4491 1.05414 14.1133 1.38992 14.1133 1.80414L14.1133 8.08053C14.1133 8.49475 14.4491 8.83053 14.8633 8.83053C15.2775 8.83053 15.6133 8.49475 15.6133 8.08053L15.6133 1.80414C15.6133 1.38992 15.2775 1.05414 14.8633 1.05414Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.3574 4.97807C16.3574 4.68717 16.1216 4.45135 15.8307 4.45135L8.17042 4.45135C7.87952 4.45135 7.64371 4.68717 7.64371 4.97807L7.64371 19.0219C7.64371 19.3128 7.87952 19.5486 8.17042 19.5486H15.8307C16.1216 19.5486 16.3574 19.3128 16.3574 19.0219V4.97807ZM15.8307 2.95135C16.95 2.95135 17.8574 3.85875 17.8574 4.97807V19.0219C17.8574 20.1413 16.95 21.0486 15.8307 21.0486H8.17042C7.0511 21.0486 6.14371 20.1413 6.14371 19.0219L6.14371 4.97807C6.14371 3.85875 7.0511 2.95135 8.17042 2.95135L15.8307 2.95135Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.69727 6.78748C9.69727 6.37326 10.0331 6.03748 10.4473 6.03748H13.5526C13.9668 6.03748 14.3026 6.37326 14.3026 6.78748C14.3026 7.20169 13.9668 7.53748 13.5526 7.53748H10.4473C10.0331 7.53748 9.69727 7.20169 9.69727 6.78748Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 972 B |
2049
packages/noodl-editor/532.bundle.js
Normal file
1
packages/noodl-editor/532.bundle.js.map
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="white" width="18px" height="18px">
|
||||||
|
<path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 174 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M21.2437 11.9979C21.2037 11.9079 21.1537 11.8279 21.0837 11.7579L14.3337 5.00794C14.0437 4.71794 13.5637 4.71794 13.2737 5.00794C12.9837 5.29794 12.9837 5.77794 13.2737 6.06794L18.7437 11.5379H4.05371C3.64371 11.5379 3.30371 11.8779 3.30371 12.2879C3.30371 12.6979 3.64371 13.0379 4.05371 13.0379H18.7437L13.2737 18.5079C12.9837 18.7979 12.9837 19.2779 13.2737 19.5679C13.4237 19.7179 13.6137 19.7879 13.8037 19.7879C13.9937 19.7879 14.1837 19.7179 14.3337 19.5679L21.0837 12.8179C21.1537 12.7479 21.2037 12.6679 21.2437 12.5779C21.3237 12.3979 21.3237 12.1879 21.2437 12.0079V11.9979Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 721 B |
311
packages/noodl-editor/581.bundle.js
Normal file
@@ -0,0 +1,311 @@
|
|||||||
|
"use strict";
|
||||||
|
(global["webpackChunknoodl_editor"] = global["webpackChunknoodl_editor"] || []).push([[581],{
|
||||||
|
|
||||||
|
/***/ 68581:
|
||||||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||||
|
|
||||||
|
__webpack_require__.r(__webpack_exports__);
|
||||||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||||
|
/* harmony export */ conf: () => (/* binding */ conf),
|
||||||
|
/* harmony export */ language: () => (/* binding */ language)
|
||||||
|
/* harmony export */ });
|
||||||
|
/* harmony import */ var _editor_editor_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(15618);
|
||||||
|
/*!-----------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
|
||||||
|
*-----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||||
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||||
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||||
|
var __copyProps = (to, from, except, desc) => {
|
||||||
|
if (from && typeof from === "object" || typeof from === "function") {
|
||||||
|
for (let key of __getOwnPropNames(from))
|
||||||
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||||
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||||
|
}
|
||||||
|
return to;
|
||||||
|
};
|
||||||
|
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
||||||
|
|
||||||
|
// src/fillers/monaco-editor-core.ts
|
||||||
|
var monaco_editor_core_exports = {};
|
||||||
|
__reExport(monaco_editor_core_exports, _editor_editor_api_js__WEBPACK_IMPORTED_MODULE_0__);
|
||||||
|
|
||||||
|
|
||||||
|
// src/basic-languages/html/html.ts
|
||||||
|
var EMPTY_ELEMENTS = [
|
||||||
|
"area",
|
||||||
|
"base",
|
||||||
|
"br",
|
||||||
|
"col",
|
||||||
|
"embed",
|
||||||
|
"hr",
|
||||||
|
"img",
|
||||||
|
"input",
|
||||||
|
"keygen",
|
||||||
|
"link",
|
||||||
|
"menuitem",
|
||||||
|
"meta",
|
||||||
|
"param",
|
||||||
|
"source",
|
||||||
|
"track",
|
||||||
|
"wbr"
|
||||||
|
];
|
||||||
|
var conf = {
|
||||||
|
wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,
|
||||||
|
comments: {
|
||||||
|
blockComment: ["<!--", "-->"]
|
||||||
|
},
|
||||||
|
brackets: [
|
||||||
|
["<!--", "-->"],
|
||||||
|
["<", ">"],
|
||||||
|
["{", "}"],
|
||||||
|
["(", ")"]
|
||||||
|
],
|
||||||
|
autoClosingPairs: [
|
||||||
|
{ open: "{", close: "}" },
|
||||||
|
{ open: "[", close: "]" },
|
||||||
|
{ open: "(", close: ")" },
|
||||||
|
{ open: '"', close: '"' },
|
||||||
|
{ open: "'", close: "'" }
|
||||||
|
],
|
||||||
|
surroundingPairs: [
|
||||||
|
{ open: '"', close: '"' },
|
||||||
|
{ open: "'", close: "'" },
|
||||||
|
{ open: "{", close: "}" },
|
||||||
|
{ open: "[", close: "]" },
|
||||||
|
{ open: "(", close: ")" },
|
||||||
|
{ open: "<", close: ">" }
|
||||||
|
],
|
||||||
|
onEnterRules: [
|
||||||
|
{
|
||||||
|
beforeText: new RegExp(`<(?!(?:${EMPTY_ELEMENTS.join("|")}))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`, "i"),
|
||||||
|
afterText: /^<\/([_:\w][_:\w-.\d]*)\s*>$/i,
|
||||||
|
action: {
|
||||||
|
indentAction: monaco_editor_core_exports.languages.IndentAction.IndentOutdent
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
beforeText: new RegExp(`<(?!(?:${EMPTY_ELEMENTS.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`, "i"),
|
||||||
|
action: { indentAction: monaco_editor_core_exports.languages.IndentAction.Indent }
|
||||||
|
}
|
||||||
|
],
|
||||||
|
folding: {
|
||||||
|
markers: {
|
||||||
|
start: new RegExp("^\\s*<!--\\s*#region\\b.*-->"),
|
||||||
|
end: new RegExp("^\\s*<!--\\s*#endregion\\b.*-->")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var language = {
|
||||||
|
defaultToken: "",
|
||||||
|
tokenPostfix: ".html",
|
||||||
|
ignoreCase: true,
|
||||||
|
tokenizer: {
|
||||||
|
root: [
|
||||||
|
[/<!DOCTYPE/, "metatag", "@doctype"],
|
||||||
|
[/<!--/, "comment", "@comment"],
|
||||||
|
[/(<)((?:[\w\-]+:)?[\w\-]+)(\s*)(\/>)/, ["delimiter", "tag", "", "delimiter"]],
|
||||||
|
[/(<)(script)/, ["delimiter", { token: "tag", next: "@script" }]],
|
||||||
|
[/(<)(style)/, ["delimiter", { token: "tag", next: "@style" }]],
|
||||||
|
[/(<)((?:[\w\-]+:)?[\w\-]+)/, ["delimiter", { token: "tag", next: "@otherTag" }]],
|
||||||
|
[/(<\/)((?:[\w\-]+:)?[\w\-]+)/, ["delimiter", { token: "tag", next: "@otherTag" }]],
|
||||||
|
[/</, "delimiter"],
|
||||||
|
[/[^<]+/]
|
||||||
|
],
|
||||||
|
doctype: [
|
||||||
|
[/[^>]+/, "metatag.content"],
|
||||||
|
[/>/, "metatag", "@pop"]
|
||||||
|
],
|
||||||
|
comment: [
|
||||||
|
[/-->/, "comment", "@pop"],
|
||||||
|
[/[^-]+/, "comment.content"],
|
||||||
|
[/./, "comment.content"]
|
||||||
|
],
|
||||||
|
otherTag: [
|
||||||
|
[/\/?>/, "delimiter", "@pop"],
|
||||||
|
[/"([^"]*)"/, "attribute.value"],
|
||||||
|
[/'([^']*)'/, "attribute.value"],
|
||||||
|
[/[\w\-]+/, "attribute.name"],
|
||||||
|
[/=/, "delimiter"],
|
||||||
|
[/[ \t\r\n]+/]
|
||||||
|
],
|
||||||
|
script: [
|
||||||
|
[/type/, "attribute.name", "@scriptAfterType"],
|
||||||
|
[/"([^"]*)"/, "attribute.value"],
|
||||||
|
[/'([^']*)'/, "attribute.value"],
|
||||||
|
[/[\w\-]+/, "attribute.name"],
|
||||||
|
[/=/, "delimiter"],
|
||||||
|
[
|
||||||
|
/>/,
|
||||||
|
{
|
||||||
|
token: "delimiter",
|
||||||
|
next: "@scriptEmbedded",
|
||||||
|
nextEmbedded: "text/javascript"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[/[ \t\r\n]+/],
|
||||||
|
[/(<\/)(script\s*)(>)/, ["delimiter", "tag", { token: "delimiter", next: "@pop" }]]
|
||||||
|
],
|
||||||
|
scriptAfterType: [
|
||||||
|
[/=/, "delimiter", "@scriptAfterTypeEquals"],
|
||||||
|
[
|
||||||
|
/>/,
|
||||||
|
{
|
||||||
|
token: "delimiter",
|
||||||
|
next: "@scriptEmbedded",
|
||||||
|
nextEmbedded: "text/javascript"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[/[ \t\r\n]+/],
|
||||||
|
[/<\/script\s*>/, { token: "@rematch", next: "@pop" }]
|
||||||
|
],
|
||||||
|
scriptAfterTypeEquals: [
|
||||||
|
[
|
||||||
|
/"module"/,
|
||||||
|
{
|
||||||
|
token: "attribute.value",
|
||||||
|
switchTo: "@scriptWithCustomType.text/javascript"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
/'module'/,
|
||||||
|
{
|
||||||
|
token: "attribute.value",
|
||||||
|
switchTo: "@scriptWithCustomType.text/javascript"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
/"([^"]*)"/,
|
||||||
|
{
|
||||||
|
token: "attribute.value",
|
||||||
|
switchTo: "@scriptWithCustomType.$1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
/'([^']*)'/,
|
||||||
|
{
|
||||||
|
token: "attribute.value",
|
||||||
|
switchTo: "@scriptWithCustomType.$1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
/>/,
|
||||||
|
{
|
||||||
|
token: "delimiter",
|
||||||
|
next: "@scriptEmbedded",
|
||||||
|
nextEmbedded: "text/javascript"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[/[ \t\r\n]+/],
|
||||||
|
[/<\/script\s*>/, { token: "@rematch", next: "@pop" }]
|
||||||
|
],
|
||||||
|
scriptWithCustomType: [
|
||||||
|
[
|
||||||
|
/>/,
|
||||||
|
{
|
||||||
|
token: "delimiter",
|
||||||
|
next: "@scriptEmbedded.$S2",
|
||||||
|
nextEmbedded: "$S2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[/"([^"]*)"/, "attribute.value"],
|
||||||
|
[/'([^']*)'/, "attribute.value"],
|
||||||
|
[/[\w\-]+/, "attribute.name"],
|
||||||
|
[/=/, "delimiter"],
|
||||||
|
[/[ \t\r\n]+/],
|
||||||
|
[/<\/script\s*>/, { token: "@rematch", next: "@pop" }]
|
||||||
|
],
|
||||||
|
scriptEmbedded: [
|
||||||
|
[/<\/script/, { token: "@rematch", next: "@pop", nextEmbedded: "@pop" }],
|
||||||
|
[/[^<]+/, ""]
|
||||||
|
],
|
||||||
|
style: [
|
||||||
|
[/type/, "attribute.name", "@styleAfterType"],
|
||||||
|
[/"([^"]*)"/, "attribute.value"],
|
||||||
|
[/'([^']*)'/, "attribute.value"],
|
||||||
|
[/[\w\-]+/, "attribute.name"],
|
||||||
|
[/=/, "delimiter"],
|
||||||
|
[
|
||||||
|
/>/,
|
||||||
|
{
|
||||||
|
token: "delimiter",
|
||||||
|
next: "@styleEmbedded",
|
||||||
|
nextEmbedded: "text/css"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[/[ \t\r\n]+/],
|
||||||
|
[/(<\/)(style\s*)(>)/, ["delimiter", "tag", { token: "delimiter", next: "@pop" }]]
|
||||||
|
],
|
||||||
|
styleAfterType: [
|
||||||
|
[/=/, "delimiter", "@styleAfterTypeEquals"],
|
||||||
|
[
|
||||||
|
/>/,
|
||||||
|
{
|
||||||
|
token: "delimiter",
|
||||||
|
next: "@styleEmbedded",
|
||||||
|
nextEmbedded: "text/css"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[/[ \t\r\n]+/],
|
||||||
|
[/<\/style\s*>/, { token: "@rematch", next: "@pop" }]
|
||||||
|
],
|
||||||
|
styleAfterTypeEquals: [
|
||||||
|
[
|
||||||
|
/"([^"]*)"/,
|
||||||
|
{
|
||||||
|
token: "attribute.value",
|
||||||
|
switchTo: "@styleWithCustomType.$1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
/'([^']*)'/,
|
||||||
|
{
|
||||||
|
token: "attribute.value",
|
||||||
|
switchTo: "@styleWithCustomType.$1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
/>/,
|
||||||
|
{
|
||||||
|
token: "delimiter",
|
||||||
|
next: "@styleEmbedded",
|
||||||
|
nextEmbedded: "text/css"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[/[ \t\r\n]+/],
|
||||||
|
[/<\/style\s*>/, { token: "@rematch", next: "@pop" }]
|
||||||
|
],
|
||||||
|
styleWithCustomType: [
|
||||||
|
[
|
||||||
|
/>/,
|
||||||
|
{
|
||||||
|
token: "delimiter",
|
||||||
|
next: "@styleEmbedded.$S2",
|
||||||
|
nextEmbedded: "$S2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[/"([^"]*)"/, "attribute.value"],
|
||||||
|
[/'([^']*)'/, "attribute.value"],
|
||||||
|
[/[\w\-]+/, "attribute.name"],
|
||||||
|
[/=/, "delimiter"],
|
||||||
|
[/[ \t\r\n]+/],
|
||||||
|
[/<\/style\s*>/, { token: "@rematch", next: "@pop" }]
|
||||||
|
],
|
||||||
|
styleEmbedded: [
|
||||||
|
[/<\/style/, { token: "@rematch", next: "@pop", nextEmbedded: "@pop" }],
|
||||||
|
[/[^<]+/, ""]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/***/ })
|
||||||
|
|
||||||
|
}]);
|
||||||
|
//# sourceMappingURL=581.bundle.js.map
|
||||||
1
packages/noodl-editor/581.bundle.js.map
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.13672 6.375C3.13672 5.96079 3.47251 5.625 3.88672 5.625H20.3867C20.8009 5.625 21.1367 5.96079 21.1367 6.375C21.1367 6.78921 20.8009 7.125 20.3867 7.125H3.88672C3.47251 7.125 3.13672 6.78921 3.13672 6.375Z" fill="#F5F5F5" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.13672 10.125C3.13672 9.71079 3.47251 9.375 3.88672 9.375H15.8867C16.3009 9.375 16.6367 9.71079 16.6367 10.125C16.6367 10.5392 16.3009 10.875 15.8867 10.875H3.88672C3.47251 10.875 3.13672 10.5392 3.13672 10.125Z" fill="#F5F5F5" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.13672 13.875C3.13672 13.4608 3.47251 13.125 3.88672 13.125H20.3867C20.8009 13.125 21.1367 13.4608 21.1367 13.875C21.1367 14.2892 20.8009 14.625 20.3867 14.625H3.88672C3.47251 14.625 3.13672 14.2892 3.13672 13.875Z" fill="#F5F5F5" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.13672 17.625C3.13672 17.2108 3.47251 16.875 3.88672 16.875H15.8867C16.3009 16.875 16.6367 17.2108 16.6367 17.625C16.6367 18.0392 16.3009 18.375 15.8867 18.375H3.88672C3.47251 18.375 3.13672 18.0392 3.13672 17.625Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.4858 16.2648C21.4858 16.7927 21.0579 17.2207 20.5299 17.2207H12H3.4707C2.94276 17.2207 2.51478 16.7927 2.51478 16.2648V14.4559H21.4858V16.2648ZM12.75 18.7207H20.5299C21.8863 18.7207 22.9858 17.6212 22.9858 16.2648V4.32335C22.9858 2.96698 21.8863 1.86743 20.5299 1.86743H3.4707C2.11433 1.86743 1.01478 2.96698 1.01478 4.32335V13.6751C1.01437 13.6853 1.01416 13.6956 1.01416 13.7059C1.01416 13.7162 1.01437 13.7265 1.01478 13.7367V16.2648C1.01478 17.6212 2.11433 18.7207 3.4707 18.7207H11.25V20.6326H8.58838C8.17417 20.6326 7.83838 20.9683 7.83838 21.3826C7.83838 21.7968 8.17417 22.1326 8.58838 22.1326H11.9966C11.9977 22.1326 11.9989 22.1326 12 22.1326C12.0011 22.1326 12.0023 22.1326 12.0034 22.1326H15.4121C15.8263 22.1326 16.1621 21.7968 16.1621 21.3826C16.1621 20.9683 15.8263 20.6326 15.4121 20.6326H12.75V18.7207ZM2.51478 4.32335V12.9559H21.4858V4.32335C21.4858 3.79541 21.0579 3.36743 20.5299 3.36743H3.4707C2.94276 3.36743 2.51478 3.79541 2.51478 4.32335Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.705 4.0063C15.8466 3.61702 15.6458 3.1867 15.2565 3.04515C14.8672 2.90359 14.4369 3.10441 14.2954 3.49368L8.29536 19.9937C8.1538 20.383 8.35462 20.8133 8.7439 20.9548C9.13317 21.0964 9.56349 20.8956 9.70505 20.5063L15.705 4.0063ZM6.87939 7.76985C7.14456 8.08806 7.10157 8.56098 6.78336 8.82615L2.97476 12L6.78336 15.1738C7.10157 15.439 7.14456 15.9119 6.87939 16.2301C6.61422 16.5483 6.14129 16.5913 5.82308 16.3262L1.32308 12.5762C1.15209 12.4337 1.05322 12.2226 1.05322 12C1.05322 11.7774 1.15209 11.5663 1.32308 11.4238L5.82308 7.67382C6.14129 7.40865 6.61422 7.45164 6.87939 7.76985ZM17.1211 7.76985C17.3863 7.45164 17.8592 7.40865 18.1774 7.67382L22.6774 11.4238C22.8484 11.5663 22.9473 11.7774 22.9473 12C22.9473 12.2226 22.8484 12.4337 22.6774 12.5762L18.1774 16.3262C17.8592 16.5913 17.3863 16.5483 17.1211 16.2301C16.8559 15.9119 16.8989 15.439 17.2171 15.1738L21.0257 12L17.2171 8.82615C16.8989 8.56098 16.8559 8.08806 17.1211 7.76985Z" fill="#B8B8B8"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.5434 6.17798C15.234 5.91753 13.8769 6.0512 12.6434 6.5621C11.41 7.07299 10.3558 7.93815 9.61414 9.04818C8.87244 10.1582 8.47656 11.4633 8.47656 12.7983C8.47656 13.2125 8.14078 13.5483 7.72656 13.5483C7.31235 13.5483 6.97656 13.2125 6.97656 12.7983C6.97656 12.0369 7.08192 11.2835 7.28642 10.5585C7.18344 10.5517 7.0802 10.5482 6.97684 10.5483H6.97656C5.78309 10.5483 4.6385 11.0224 3.79458 11.8663C2.95067 12.7102 2.47656 13.8548 2.47656 15.0483C2.47656 16.2418 2.95067 17.3863 3.79458 18.2303C4.6385 19.0742 5.78309 19.5483 6.97656 19.5483H15.2266C16.5616 19.5483 17.8666 19.1524 18.9767 18.4107C20.0867 17.669 20.9519 16.6148 21.4627 15.3814C21.9736 14.148 22.1073 12.7908 21.8469 11.4814C21.5864 10.1721 20.9435 8.96932 19.9995 8.02531C19.0555 7.08131 17.8528 6.43843 16.5434 6.17798ZM7.84692 9.10999C8.00079 8.80213 8.17432 8.5031 8.36694 8.21483C9.27346 6.85812 10.5619 5.8007 12.0694 5.17628C13.5769 4.55185 15.2357 4.38848 16.8361 4.7068C18.4364 5.02513 19.9064 5.81087 21.0602 6.96465C22.214 8.11843 22.9997 9.58844 23.318 11.1888C23.6364 12.7891 23.473 14.4479 22.8486 15.9554C22.2241 17.4629 21.1667 18.7514 19.81 19.6579C18.4533 20.5644 16.8583 21.0483 15.2266 21.0483H6.97656C5.38526 21.0483 3.85914 20.4161 2.73392 19.2909C1.6087 18.1657 0.976562 16.6396 0.976562 15.0483C0.976562 13.457 1.6087 11.9309 2.73392 10.8056C3.85907 9.68049 5.38508 9.04836 6.97628 9.04828M7.84692 9.10999C7.55889 9.06885 7.26804 9.04819 6.97656 9.04828L7.84692 9.10999Z" fill="#F5F5F5" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.0804 11.0897C18.3733 11.3826 18.3733 11.8575 18.0804 12.1504L14.2036 16.0272C14.0629 16.1678 13.8722 16.2468 13.6733 16.2468C13.4744 16.2468 13.2836 16.1678 13.1429 16.0272L11.2045 14.0888C10.9116 13.7959 10.9116 13.321 11.2045 13.0281C11.4974 12.7352 11.9723 12.7352 12.2652 13.0281L13.6733 14.4362L17.0197 11.0897C17.3126 10.7968 17.7875 10.7968 18.0804 11.0897Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 2.0 KiB |
524
packages/noodl-editor/605.bundle.js
Normal file
@@ -0,0 +1,524 @@
|
|||||||
|
"use strict";
|
||||||
|
(global["webpackChunknoodl_editor"] = global["webpackChunknoodl_editor"] || []).push([[605],{
|
||||||
|
|
||||||
|
/***/ 61605:
|
||||||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||||
|
|
||||||
|
|
||||||
|
// EXPORTS
|
||||||
|
__webpack_require__.d(__webpack_exports__, {
|
||||||
|
AIMigrationOrchestrator: () => (/* binding */ AIMigrationOrchestrator)
|
||||||
|
});
|
||||||
|
|
||||||
|
;// ./src/editor/src/utils/migration/claudePrompts.ts
|
||||||
|
/**
|
||||||
|
* Claude AI Prompts for React 19 Migration
|
||||||
|
*
|
||||||
|
* System prompts and templates for guiding Claude to migrate
|
||||||
|
* React components from React 17 patterns to React 19.
|
||||||
|
*
|
||||||
|
* @module migration/claudePrompts
|
||||||
|
*/
|
||||||
|
const MIGRATION_SYSTEM_PROMPT = `You are a React migration assistant for OpenNoodl, a visual programming platform. Your job is to migrate React class components from React 17 patterns to React 19.
|
||||||
|
|
||||||
|
## Your Task
|
||||||
|
Convert the provided React code to be compatible with React 19. The code may contain:
|
||||||
|
- componentWillMount (removed in React 19)
|
||||||
|
- componentWillReceiveProps (removed in React 19)
|
||||||
|
- componentWillUpdate (removed in React 19)
|
||||||
|
- UNSAFE_ prefixed lifecycle methods (removed in React 19)
|
||||||
|
- String refs (removed in React 19)
|
||||||
|
- Legacy context API (removed in React 19)
|
||||||
|
- React.createFactory (removed in React 19)
|
||||||
|
|
||||||
|
## Migration Rules
|
||||||
|
|
||||||
|
### Lifecycle Methods
|
||||||
|
1. componentWillMount → Move logic to componentDidMount or constructor
|
||||||
|
2. componentWillReceiveProps → Use getDerivedStateFromProps (static) or componentDidUpdate
|
||||||
|
3. componentWillUpdate → Use getSnapshotBeforeUpdate + componentDidUpdate
|
||||||
|
|
||||||
|
### String Refs
|
||||||
|
Convert: ref="myRef" → ref={this.myRef = React.createRef()} or useRef()
|
||||||
|
|
||||||
|
### Legacy Context
|
||||||
|
Convert contextTypes/childContextTypes/getChildContext → React.createContext
|
||||||
|
|
||||||
|
### Functional Preference
|
||||||
|
If the component doesn't use complex state or many lifecycle methods, prefer converting to a functional component with hooks.
|
||||||
|
|
||||||
|
## Output Format
|
||||||
|
You MUST respond with a JSON object in this exact format:
|
||||||
|
{
|
||||||
|
"success": true,
|
||||||
|
"code": "// The migrated code here",
|
||||||
|
"changes": [
|
||||||
|
"Converted componentWillMount to useEffect",
|
||||||
|
"Replaced string ref with useRef"
|
||||||
|
],
|
||||||
|
"warnings": [
|
||||||
|
"Verify the useEffect dependency array is correct"
|
||||||
|
],
|
||||||
|
"confidence": 0.85
|
||||||
|
}
|
||||||
|
|
||||||
|
If you cannot migrate the code:
|
||||||
|
{
|
||||||
|
"success": false,
|
||||||
|
"code": null,
|
||||||
|
"reason": "Explanation of why migration failed",
|
||||||
|
"suggestion": "What the user could do manually",
|
||||||
|
"confidence": 0
|
||||||
|
}
|
||||||
|
|
||||||
|
## Rules
|
||||||
|
1. PRESERVE all existing functionality exactly
|
||||||
|
2. PRESERVE all comments unless they reference removed APIs
|
||||||
|
3. ADD comments explaining non-obvious changes
|
||||||
|
4. DO NOT change prop names or component interfaces
|
||||||
|
5. DO NOT add new dependencies
|
||||||
|
6. If confidence < 0.7, explain why in warnings
|
||||||
|
7. Test the code mentally - would it work?
|
||||||
|
|
||||||
|
## Context
|
||||||
|
This code is from an OpenNoodl project. OpenNoodl uses a custom node system where React components are wrapped. The component may reference:
|
||||||
|
- this.props.noodlNode - Reference to the Noodl node instance
|
||||||
|
- this.forceUpdate() - Triggers re-render (still valid in React 19)
|
||||||
|
- this.setStyle() - Noodl method for styling
|
||||||
|
- this.getRef() - Noodl method for DOM access`;
|
||||||
|
const RETRY_PROMPT_TEMPLATE = (/* unused pure expression or super */ null && (`The previous migration attempt failed verification.
|
||||||
|
|
||||||
|
Previous attempt result:
|
||||||
|
{previousError}
|
||||||
|
|
||||||
|
Previous code:
|
||||||
|
\`\`\`javascript
|
||||||
|
{previousCode}
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
Please try a different approach. Consider:
|
||||||
|
1. Maybe the conversion should stay as a class component instead of functional
|
||||||
|
2. Check if state management is correct
|
||||||
|
3. Verify event handlers are bound correctly
|
||||||
|
4. Ensure refs are used correctly
|
||||||
|
|
||||||
|
Provide a new migration with the same JSON format.`));
|
||||||
|
const HELP_PROMPT_TEMPLATE = `I attempted to migrate this React component {attempts} times but couldn't produce working code.
|
||||||
|
|
||||||
|
Original code:
|
||||||
|
\`\`\`javascript
|
||||||
|
{originalCode}
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
Attempts and errors:
|
||||||
|
{attemptHistory}
|
||||||
|
|
||||||
|
Please analyze this component and provide:
|
||||||
|
1. Why it's difficult to migrate automatically
|
||||||
|
2. Step-by-step manual migration instructions
|
||||||
|
3. Any gotchas or things to watch out for
|
||||||
|
4. Example code snippets for the tricky parts
|
||||||
|
|
||||||
|
Format your response as helpful documentation, not JSON.`;
|
||||||
|
|
||||||
|
;// ./src/editor/src/utils/migration/claudeClient.ts
|
||||||
|
/**
|
||||||
|
* Claude API Client for Component Migration
|
||||||
|
*
|
||||||
|
* Handles communication with Anthropic's Claude API for
|
||||||
|
* AI-assisted React component migration.
|
||||||
|
*
|
||||||
|
* @module migration/claudeClient
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ClaudeClient {
|
||||||
|
constructor(apiKey) {
|
||||||
|
this.model = 'claude-sonnet-4-20250514';
|
||||||
|
// Pricing per 1M tokens (as of Dec 2024)
|
||||||
|
this.pricing = {
|
||||||
|
input: 3.0, // $3 per 1M input tokens
|
||||||
|
output: 15.0 // $15 per 1M output tokens
|
||||||
|
};
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
||||||
|
const Anthropic = __webpack_require__(63065);
|
||||||
|
this.client = new Anthropic({
|
||||||
|
apiKey,
|
||||||
|
dangerouslyAllowBrowser: true // Safe in Electron - code runs locally, not in public browser
|
||||||
|
});
|
||||||
|
}
|
||||||
|
async migrateComponent(request) {
|
||||||
|
const userPrompt = this.buildUserPrompt(request);
|
||||||
|
const response = await this.client.messages.create({
|
||||||
|
model: this.model,
|
||||||
|
max_tokens: 4096,
|
||||||
|
system: MIGRATION_SYSTEM_PROMPT,
|
||||||
|
messages: [{ role: 'user', content: userPrompt }]
|
||||||
|
});
|
||||||
|
const tokensUsed = {
|
||||||
|
input: response.usage.input_tokens,
|
||||||
|
output: response.usage.output_tokens
|
||||||
|
};
|
||||||
|
const cost = this.calculateCost(tokensUsed);
|
||||||
|
// Parse the response
|
||||||
|
const content = response.content[0];
|
||||||
|
if (content.type !== 'text') {
|
||||||
|
throw new Error('Unexpected response type');
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const parsed = this.parseResponse(content.text);
|
||||||
|
return {
|
||||||
|
...parsed,
|
||||||
|
tokensUsed,
|
||||||
|
cost
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (parseError) {
|
||||||
|
return {
|
||||||
|
success: false,
|
||||||
|
code: null,
|
||||||
|
changes: [],
|
||||||
|
warnings: [],
|
||||||
|
confidence: 0,
|
||||||
|
reason: 'Failed to parse AI response',
|
||||||
|
suggestion: content.text.slice(0, 500), // Include raw response for debugging
|
||||||
|
tokensUsed,
|
||||||
|
cost
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async getHelp(request) {
|
||||||
|
const prompt = HELP_PROMPT_TEMPLATE.replace('{attempts}', String(request.attempts))
|
||||||
|
.replace('{originalCode}', request.originalCode)
|
||||||
|
.replace('{attemptHistory}', request.attemptHistory.map((a, i) => `Attempt ${i + 1}: ${a.error}`).join('\n'));
|
||||||
|
const response = await this.client.messages.create({
|
||||||
|
model: this.model,
|
||||||
|
max_tokens: 2048,
|
||||||
|
messages: [{ role: 'user', content: prompt }]
|
||||||
|
});
|
||||||
|
const content = response.content[0];
|
||||||
|
if (content.type !== 'text') {
|
||||||
|
throw new Error('Unexpected response type');
|
||||||
|
}
|
||||||
|
return content.text;
|
||||||
|
}
|
||||||
|
buildUserPrompt(request) {
|
||||||
|
let prompt = `Migrate this React component to React 19:\n\n`;
|
||||||
|
prompt += `Component: ${request.componentName}\n\n`;
|
||||||
|
prompt += `Issues detected:\n`;
|
||||||
|
request.issues.forEach((issue) => {
|
||||||
|
prompt += `- ${issue.type} at line ${issue.location.line}: ${issue.description}\n`;
|
||||||
|
});
|
||||||
|
prompt += `\nCode:\n\`\`\`javascript\n${request.code}\n\`\`\`\n`;
|
||||||
|
if (request.preferences.preferFunctional) {
|
||||||
|
prompt += `\nPreference: Convert to functional component with hooks if clean.\n`;
|
||||||
|
}
|
||||||
|
if (request.previousAttempt) {
|
||||||
|
prompt += `\n--- RETRY ---\n`;
|
||||||
|
prompt += `Previous attempt failed: ${request.previousAttempt.error}\n`;
|
||||||
|
if (request.previousAttempt.code) {
|
||||||
|
prompt += `Previous code:\n\`\`\`javascript\n${request.previousAttempt.code}\n\`\`\`\n`;
|
||||||
|
}
|
||||||
|
prompt += `Please try a different approach.\n`;
|
||||||
|
}
|
||||||
|
return prompt;
|
||||||
|
}
|
||||||
|
parseResponse(text) {
|
||||||
|
var _a, _b, _c, _d, _e;
|
||||||
|
// Try to extract JSON from the response
|
||||||
|
const jsonMatch = text.match(/\{[\s\S]*\}/);
|
||||||
|
if (!jsonMatch) {
|
||||||
|
throw new Error('No JSON found in response');
|
||||||
|
}
|
||||||
|
const parsed = JSON.parse(jsonMatch[0]);
|
||||||
|
return {
|
||||||
|
success: (_a = parsed.success) !== null && _a !== void 0 ? _a : false,
|
||||||
|
code: (_b = parsed.code) !== null && _b !== void 0 ? _b : null,
|
||||||
|
changes: (_c = parsed.changes) !== null && _c !== void 0 ? _c : [],
|
||||||
|
warnings: (_d = parsed.warnings) !== null && _d !== void 0 ? _d : [],
|
||||||
|
confidence: (_e = parsed.confidence) !== null && _e !== void 0 ? _e : 0,
|
||||||
|
reason: parsed.reason,
|
||||||
|
suggestion: parsed.suggestion
|
||||||
|
};
|
||||||
|
}
|
||||||
|
calculateCost(tokens) {
|
||||||
|
const inputCost = (tokens.input / 1000000) * this.pricing.input;
|
||||||
|
const outputCost = (tokens.output / 1000000) * this.pricing.output;
|
||||||
|
return inputCost + outputCost;
|
||||||
|
}
|
||||||
|
estimateCost(codeLength) {
|
||||||
|
// Rough estimation: ~4 chars per token
|
||||||
|
const estimatedInputTokens = codeLength / 4 + 1000; // +1000 for system prompt
|
||||||
|
const estimatedOutputTokens = (codeLength / 4) * 1.5; // Output usually larger
|
||||||
|
return this.calculateCost({
|
||||||
|
input: estimatedInputTokens,
|
||||||
|
output: estimatedOutputTokens
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
;// ./src/editor/src/models/migration/BudgetController.ts
|
||||||
|
/**
|
||||||
|
* Budget Controller for AI Migration
|
||||||
|
*
|
||||||
|
* Manages spending limits and approval flow for AI-assisted migrations.
|
||||||
|
* Enforces hard limits and pause-and-approve at configurable increments.
|
||||||
|
*
|
||||||
|
* @module migration/BudgetController
|
||||||
|
*/
|
||||||
|
class BudgetController {
|
||||||
|
constructor(config, onPauseRequired) {
|
||||||
|
this.state = {
|
||||||
|
maxPerSession: config.maxPerSession,
|
||||||
|
spent: 0,
|
||||||
|
pauseIncrement: config.pauseIncrement,
|
||||||
|
nextPauseAt: config.pauseIncrement,
|
||||||
|
paused: false
|
||||||
|
};
|
||||||
|
this.onPauseRequired = onPauseRequired;
|
||||||
|
}
|
||||||
|
checkBudget(estimatedCost) {
|
||||||
|
const wouldExceedMax = this.state.spent + estimatedCost > this.state.maxPerSession;
|
||||||
|
const wouldExceedPause = this.state.spent + estimatedCost > this.state.nextPauseAt;
|
||||||
|
return {
|
||||||
|
allowed: !wouldExceedMax,
|
||||||
|
requiresApproval: wouldExceedPause && !this.state.paused,
|
||||||
|
currentSpent: this.state.spent,
|
||||||
|
estimatedNext: estimatedCost,
|
||||||
|
wouldExceedMax
|
||||||
|
};
|
||||||
|
}
|
||||||
|
async requestApproval(estimatedCost) {
|
||||||
|
const check = this.checkBudget(estimatedCost);
|
||||||
|
if (check.wouldExceedMax) {
|
||||||
|
return false; // Hard limit, can't approve
|
||||||
|
}
|
||||||
|
if (check.requiresApproval) {
|
||||||
|
const approved = await this.onPauseRequired(this.state);
|
||||||
|
if (approved) {
|
||||||
|
this.state.nextPauseAt += this.state.pauseIncrement;
|
||||||
|
}
|
||||||
|
return approved;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
recordSpend(amount) {
|
||||||
|
this.state.spent += amount;
|
||||||
|
}
|
||||||
|
getState() {
|
||||||
|
return { ...this.state };
|
||||||
|
}
|
||||||
|
getRemainingBudget() {
|
||||||
|
return Math.max(0, this.state.maxPerSession - this.state.spent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
;// ./src/editor/src/models/migration/AIMigrationOrchestrator.ts
|
||||||
|
/**
|
||||||
|
* AI Migration Orchestrator
|
||||||
|
*
|
||||||
|
* Coordinates AI-assisted migration of multiple components with
|
||||||
|
* retry logic, verification, and user decision points.
|
||||||
|
*
|
||||||
|
* @module migration/AIMigrationOrchestrator
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
class AIMigrationOrchestrator {
|
||||||
|
constructor(apiKey, budgetConfig, config, onBudgetPause) {
|
||||||
|
this.aborted = false;
|
||||||
|
this.client = new ClaudeClient(apiKey);
|
||||||
|
this.budget = new BudgetController(budgetConfig, onBudgetPause);
|
||||||
|
this.config = config;
|
||||||
|
}
|
||||||
|
async migrateComponent(component, code, preferences, onProgress, onDecisionRequired) {
|
||||||
|
let attempts = 0;
|
||||||
|
let totalCost = 0;
|
||||||
|
let lastError = null;
|
||||||
|
let lastCode = null;
|
||||||
|
const attemptHistory = [];
|
||||||
|
while (attempts < this.config.maxRetries && !this.aborted) {
|
||||||
|
attempts++;
|
||||||
|
// Check budget
|
||||||
|
const estimatedCost = this.client.estimateCost(code.length);
|
||||||
|
const budgetCheck = this.budget.checkBudget(estimatedCost);
|
||||||
|
if (!budgetCheck.allowed) {
|
||||||
|
return {
|
||||||
|
componentId: component.id,
|
||||||
|
componentName: component.name,
|
||||||
|
status: 'failed',
|
||||||
|
changes: [],
|
||||||
|
warnings: [],
|
||||||
|
attempts,
|
||||||
|
totalCost,
|
||||||
|
error: 'Budget exceeded'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (budgetCheck.requiresApproval) {
|
||||||
|
const approved = await this.budget.requestApproval(estimatedCost);
|
||||||
|
if (!approved) {
|
||||||
|
return {
|
||||||
|
componentId: component.id,
|
||||||
|
componentName: component.name,
|
||||||
|
status: 'skipped',
|
||||||
|
changes: [],
|
||||||
|
warnings: ['Migration paused by user'],
|
||||||
|
attempts,
|
||||||
|
totalCost
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Attempt migration
|
||||||
|
onProgress({
|
||||||
|
phase: 'ai-migrating',
|
||||||
|
component: component.name,
|
||||||
|
attempt: attempts,
|
||||||
|
message: attempts === 1 ? 'Analyzing code patterns...' : `Retry attempt ${attempts}...`
|
||||||
|
});
|
||||||
|
const response = await this.client.migrateComponent({
|
||||||
|
code,
|
||||||
|
issues: component.issues,
|
||||||
|
componentName: component.name,
|
||||||
|
preferences,
|
||||||
|
previousAttempt: lastError ? { code: lastCode, error: lastError } : undefined
|
||||||
|
});
|
||||||
|
totalCost += response.cost;
|
||||||
|
this.budget.recordSpend(response.cost);
|
||||||
|
if (response.success && response.confidence >= this.config.minConfidence) {
|
||||||
|
// Verify the migration if enabled
|
||||||
|
if (this.config.verifyMigration && response.code) {
|
||||||
|
const verification = await this.verifyMigration(response.code, component);
|
||||||
|
if (!verification.valid) {
|
||||||
|
lastError = verification.error || 'Verification failed';
|
||||||
|
lastCode = response.code;
|
||||||
|
attemptHistory.push({
|
||||||
|
code: response.code,
|
||||||
|
error: lastError,
|
||||||
|
cost: response.cost
|
||||||
|
});
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
componentId: component.id,
|
||||||
|
componentName: component.name,
|
||||||
|
status: 'success',
|
||||||
|
migratedCode: response.code,
|
||||||
|
changes: response.changes,
|
||||||
|
warnings: response.warnings,
|
||||||
|
attempts,
|
||||||
|
totalCost
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// Migration failed or low confidence
|
||||||
|
lastError = response.reason || 'Low confidence migration';
|
||||||
|
lastCode = response.code;
|
||||||
|
attemptHistory.push({
|
||||||
|
code: response.code,
|
||||||
|
error: lastError,
|
||||||
|
cost: response.cost
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// All retries exhausted - ask user what to do
|
||||||
|
const decision = await onDecisionRequired({
|
||||||
|
componentId: component.id,
|
||||||
|
componentName: component.name,
|
||||||
|
attempts,
|
||||||
|
attemptHistory,
|
||||||
|
costSpent: totalCost,
|
||||||
|
retryCost: this.client.estimateCost(code.length)
|
||||||
|
});
|
||||||
|
switch (decision.action) {
|
||||||
|
case 'retry':
|
||||||
|
// Recursive retry with fresh attempts
|
||||||
|
return this.migrateComponent(component, code, preferences, onProgress, onDecisionRequired);
|
||||||
|
case 'skip':
|
||||||
|
return {
|
||||||
|
componentId: component.id,
|
||||||
|
componentName: component.name,
|
||||||
|
status: 'skipped',
|
||||||
|
changes: [],
|
||||||
|
warnings: ['Skipped by user after failed attempts'],
|
||||||
|
attempts,
|
||||||
|
totalCost
|
||||||
|
};
|
||||||
|
case 'getHelp': {
|
||||||
|
const help = await this.client.getHelp({
|
||||||
|
originalCode: code,
|
||||||
|
attempts,
|
||||||
|
attemptHistory
|
||||||
|
});
|
||||||
|
totalCost += 0.02; // Approximate cost for help request
|
||||||
|
return {
|
||||||
|
componentId: component.id,
|
||||||
|
componentName: component.name,
|
||||||
|
status: 'failed',
|
||||||
|
changes: [],
|
||||||
|
warnings: attemptHistory.map((a) => a.error),
|
||||||
|
attempts,
|
||||||
|
totalCost,
|
||||||
|
aiSuggestion: help
|
||||||
|
};
|
||||||
|
}
|
||||||
|
case 'manual':
|
||||||
|
return {
|
||||||
|
componentId: component.id,
|
||||||
|
componentName: component.name,
|
||||||
|
status: 'partial',
|
||||||
|
migratedCode: lastCode || undefined,
|
||||||
|
changes: [],
|
||||||
|
warnings: ['Marked for manual review'],
|
||||||
|
attempts,
|
||||||
|
totalCost
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async verifyMigration(code,
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
|
component) {
|
||||||
|
// Basic syntax check using Babel
|
||||||
|
try {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
||||||
|
const babel = __webpack_require__(46773);
|
||||||
|
babel.parse(code, {
|
||||||
|
sourceType: 'module',
|
||||||
|
plugins: ['jsx', 'typescript']
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (syntaxError) {
|
||||||
|
const err = syntaxError;
|
||||||
|
return {
|
||||||
|
valid: false,
|
||||||
|
error: `Syntax error: ${err.message || 'Unknown syntax error'}`
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// Check that no forbidden patterns remain
|
||||||
|
const forbiddenPatterns = [
|
||||||
|
{ regex: /componentWillMount\s*\(/, name: 'componentWillMount' },
|
||||||
|
{ regex: /componentWillReceiveProps\s*\(/, name: 'componentWillReceiveProps' },
|
||||||
|
{ regex: /componentWillUpdate\s*\(/, name: 'componentWillUpdate' },
|
||||||
|
{ regex: /ref\s*=\s*["'][^"']+["']/, name: 'string ref' },
|
||||||
|
{ regex: /contextTypes\s*=/, name: 'legacy contextTypes' }
|
||||||
|
];
|
||||||
|
for (const pattern of forbiddenPatterns) {
|
||||||
|
if (pattern.regex.test(code)) {
|
||||||
|
return {
|
||||||
|
valid: false,
|
||||||
|
error: `Code still contains ${pattern.name}`
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return { valid: true };
|
||||||
|
}
|
||||||
|
abort() {
|
||||||
|
this.aborted = true;
|
||||||
|
}
|
||||||
|
getBudgetState() {
|
||||||
|
return this.budget.getState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***/ })
|
||||||
|
|
||||||
|
}]);
|
||||||
|
//# sourceMappingURL=605.bundle.js.map
|
||||||
1
packages/noodl-editor/605.bundle.js.map
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.49204 3.54434C6.0493 3.24636 6.73631 3.10577 7.55784 3.10577C7.97205 3.10577 8.30784 3.44156 8.30784 3.85577C8.30784 4.26999 7.97205 4.60577 7.55784 4.60577C6.89859 4.60577 6.47503 4.71969 6.19936 4.8671C5.9363 5.00777 5.76448 5.20157 5.64135 5.45551C5.36201 6.03166 5.3463 6.85399 5.3463 7.92789L5.34633 8.02C5.34682 8.96663 5.34742 10.1339 4.90097 11.0547C4.72843 11.4105 4.48938 11.7337 4.16677 12C4.48938 12.2663 4.72843 12.5895 4.90097 12.9453C5.34742 13.8661 5.34682 15.0334 5.34633 15.98L5.3463 16.0721C5.3463 17.146 5.36201 17.9683 5.64135 18.5445C5.76448 18.7984 5.9363 18.9922 6.19936 19.1329C6.47503 19.2803 6.89859 19.3942 7.55784 19.3942C7.97205 19.3942 8.30784 19.73 8.30784 20.1442C8.30784 20.5584 7.97205 20.8942 7.55784 20.8942C6.73631 20.8942 6.0493 20.7536 5.49204 20.4557C4.92217 20.1509 4.5387 19.7085 4.29163 19.1989C3.84519 18.2781 3.84578 17.1109 3.84627 16.1642L3.8463 16.0721C3.8463 14.9982 3.83059 14.1759 3.55125 13.5997C3.42813 13.3458 3.2563 13.152 2.99325 13.0113C2.71757 12.8639 2.29401 12.75 1.63477 12.75C1.22055 12.75 0.884766 12.4142 0.884766 12C0.884766 11.5858 1.22055 11.25 1.63477 11.25C2.29401 11.25 2.71757 11.1361 2.99325 10.9887C3.2563 10.848 3.42813 10.6542 3.55125 10.4003C3.83059 9.82411 3.8463 9.00178 3.8463 7.92789L3.84627 7.83578C3.84578 6.88915 3.84519 5.7219 4.29163 4.8011C4.5387 4.29152 4.92217 3.84906 5.49204 3.54434ZM15.6924 3.85577C15.6924 3.44156 16.0282 3.10577 16.4424 3.10577C17.2639 3.10577 17.9509 3.24636 18.5082 3.54434C19.0781 3.84906 19.4615 4.29152 19.7086 4.8011C20.155 5.7219 20.1544 6.88915 20.1539 7.83578L20.1539 7.92789C20.1539 9.00178 20.1696 9.82411 20.449 10.4003C20.5721 10.6542 20.7439 10.848 21.007 10.9887C21.2827 11.1361 21.7062 11.25 22.3655 11.25C22.7797 11.25 23.1155 11.5858 23.1155 12C23.1155 12.4142 22.7797 12.75 22.3655 12.75C21.7062 12.75 21.2827 12.8639 21.007 13.0113C20.7439 13.152 20.5721 13.3458 20.449 13.5997C20.1696 14.1759 20.1539 14.9982 20.1539 16.0721L20.1539 16.1642C20.1544 17.1109 20.155 18.2781 19.7086 19.1989C19.4615 19.7085 19.0781 20.1509 18.5082 20.4557C17.9509 20.7536 17.2639 20.8942 16.4424 20.8942C16.0282 20.8942 15.6924 20.5584 15.6924 20.1442C15.6924 19.73 16.0282 19.3942 16.4424 19.3942C17.1016 19.3942 17.5252 19.2803 17.8009 19.1329C18.0639 18.9922 18.2357 18.7984 18.3589 18.5445C18.6382 17.9683 18.6539 17.146 18.6539 16.0721L18.6539 15.98C18.6534 15.0334 18.6528 13.8661 19.0993 12.9453C19.2718 12.5895 19.5108 12.2663 19.8334 12C19.5108 11.7337 19.2718 11.4105 19.0993 11.0547C18.6528 10.1339 18.6534 8.96663 18.6539 8.02L18.6539 7.92789C18.6539 6.85399 18.6382 6.03166 18.3589 5.45551C18.2357 5.20157 18.0639 5.00777 17.8009 4.8671C17.5252 4.71969 17.1016 4.60577 16.4424 4.60577C16.0282 4.60577 15.6924 4.26999 15.6924 3.85577ZM12.9001 12C12.9001 12.4971 12.4972 12.9 12.0001 12.9C11.503 12.9 11.1001 12.4971 11.1001 12C11.1001 11.5029 11.503 11.1 12.0001 11.1C12.4972 11.1 12.9001 11.5029 12.9001 12ZM7.92783 12.9C8.42489 12.9 8.82783 12.4971 8.82783 12C8.82783 11.5029 8.42489 11.1 7.92783 11.1C7.43078 11.1 7.02783 11.5029 7.02783 12C7.02783 12.4971 7.43078 12.9 7.92783 12.9ZM16.9724 12C16.9724 12.4971 16.5694 12.9 16.0724 12.9C15.5753 12.9 15.1724 12.4971 15.1724 12C15.1724 11.5029 15.5753 11.1 16.0724 11.1C16.5694 11.1 16.9724 11.5029 16.9724 12Z" fill="#B8B8B8"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.4 KiB |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.11182 12C5.11182 11.5858 5.4476 11.25 5.86182 11.25H18.4118C18.826 11.25 19.1618 11.5858 19.1618 12C19.1618 12.4142 18.826 12.75 18.4118 12.75H5.86182C5.4476 12.75 5.11182 12.4142 5.11182 12Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 370 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.63672 5.51464V11.25H19.6367V5.51464H4.63672ZM19.6367 12.75H4.63672V18.4854H19.6367V12.75ZM3.13672 5.4224C3.13672 4.55548 3.90378 4.01464 4.63672 4.01464H19.6367C20.3697 4.01464 21.1367 4.55548 21.1367 5.4224V18.5776C21.1367 19.4445 20.3697 19.9854 19.6367 19.9854H4.63672C3.90378 19.9854 3.13672 19.4445 3.13672 18.5776V5.4224Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 506 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.1675 12.6071C18.1675 9.27605 15.4671 6.57571 12.1361 6.57571C9.97943 6.57571 8.08618 7.70734 7.01925 9.41235H9.40674C9.82095 9.41235 10.1567 9.74814 10.1567 10.1624C10.1567 10.5766 9.82095 10.9124 9.40674 10.9124H5.34117C4.92696 10.9124 4.59117 10.5766 4.59117 10.1624V6.09679C4.59117 5.68257 4.92696 5.34679 5.34117 5.34679C5.75538 5.34679 6.09117 5.68257 6.09117 6.09679V8.11989C7.46236 6.27569 9.65912 5.07912 12.1361 5.07912C16.2937 5.07912 19.6641 8.4495 19.6641 12.6071C19.6641 16.7647 16.2937 20.1351 12.1361 20.1351C8.85735 20.1351 6.07 18.0394 5.03682 15.1167C4.89907 14.7271 5.10328 14.2996 5.49292 14.1618C5.88257 14.0241 6.3101 14.2283 6.44784 14.6179C7.27627 16.9613 9.51129 18.6385 12.1361 18.6385C15.4671 18.6385 18.1675 15.9381 18.1675 12.6071Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 940 B |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.6455 12.8324C21.6455 18.2061 17.2893 22.5624 11.9155 22.5624C6.54182 22.5624 2.18555 18.2061 2.18555 12.8324C2.18555 7.45869 6.54182 3.10242 11.9155 3.10242C17.2893 3.10242 21.6455 7.45869 21.6455 12.8324ZM12.6571 7.37275C12.0039 7.24282 11.3268 7.3095 10.7115 7.56437C10.0962 7.81924 9.57032 8.25084 9.20031 8.80459C8.8303 9.35835 8.63281 10.0094 8.63281 10.6754C8.63281 11.0887 8.96784 11.4237 9.38111 11.4237C9.79438 11.4237 10.1294 11.0887 10.1294 10.6754C10.1294 10.3054 10.2391 9.9437 10.4447 9.63606C10.6502 9.32842 10.9424 9.08864 11.2843 8.94705C11.6261 8.80545 12.0022 8.76841 12.3651 8.84059C12.728 8.91277 13.0613 9.09094 13.323 9.35257C13.5846 9.6142 13.7628 9.94754 13.835 10.3104C13.9071 10.6733 13.8701 11.0495 13.7285 11.3913C13.5869 11.7331 13.3471 12.0253 13.0395 12.2309C12.7318 12.4364 12.3702 12.5461 12.0002 12.5461C11.8017 12.5461 11.6114 12.625 11.471 12.7653C11.3307 12.9056 11.2519 13.096 11.2519 13.2944V15.031C11.2519 15.4443 11.5869 15.7793 12.0002 15.7793C12.4134 15.7793 12.7485 15.4443 12.7485 15.031V13.9585C13.1469 13.8677 13.5276 13.7046 13.871 13.4752C14.4247 13.1052 14.8563 12.5793 15.1112 11.964C15.366 11.3487 15.4327 10.6717 15.3028 10.0185C15.1729 9.36525 14.8522 8.76525 14.3812 8.29432C13.9103 7.82339 13.3103 7.50268 12.6571 7.37275ZM13.1223 17.9185C13.1223 18.5384 12.6198 19.0409 11.9999 19.0409C11.38 19.0409 10.8774 18.5384 10.8774 17.9185C10.8774 17.2986 11.38 16.7961 11.9999 16.7961C12.6198 16.7961 13.1223 17.2986 13.1223 17.9185Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.38672 2.26318C7.97251 2.26318 7.63672 2.59897 7.63672 3.01318V6.76318H3.88672C3.47251 6.76318 3.13672 7.09897 3.13672 7.51318V21.5132C3.13672 21.9274 3.47251 22.2632 3.88672 22.2632H15.8867C16.3009 22.2632 16.6367 21.9274 16.6367 21.5132V17.7632H20.3867C20.8009 17.7632 21.1367 17.4274 21.1367 17.0132V3.01318C21.1367 2.59897 20.8009 2.26318 20.3867 2.26318H8.38672ZM16.6367 16.2632H19.6367V3.76318H9.13672V6.76318H15.8867C16.3009 6.76318 16.6367 7.09897 16.6367 7.51318V16.2632ZM4.63672 20.7632V8.26318H15.1367V17.0132V20.7632H4.63672Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 710 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.82135 21.3983H4.63135C4.23135 21.3983 3.85135 21.2383 3.57135 20.9583C3.29135 20.6783 3.13135 20.2883 3.13135 19.8983V15.7083C3.13135 15.5183 3.17135 15.3183 3.24135 15.1383C3.31135 14.9583 3.42135 14.7883 3.57135 14.6483L14.8213 3.39833C14.9513 3.25833 15.1213 3.14833 15.3013 3.06833C15.6813 2.90833 16.0913 2.91833 16.4613 3.06833C16.6513 3.14833 16.8113 3.25833 16.9513 3.39833L21.1313 7.57833C21.2713 7.71833 21.3813 7.87833 21.4613 8.06833C21.5413 8.24833 21.5813 8.44833 21.5813 8.64833C21.5813 8.84833 21.5413 9.04833 21.4613 9.22833C21.3913 9.40833 21.2813 9.56833 21.1313 9.70833L18.703 12.1367C18.6915 12.1498 18.6796 12.1627 18.667 12.1752C18.6545 12.1877 18.6417 12.1997 18.6285 12.2111L9.88135 20.9583C9.76154 21.0781 9.61976 21.176 9.46854 21.2456C9.38507 21.2945 9.29417 21.3258 9.20117 21.3397C9.07885 21.3712 8.95224 21.3883 8.82135 21.3883V21.3983ZM7.32952 19.8983H4.63135V17.2002L5.98103 18.5498L5.98139 18.5502L5.98175 18.5506L7.32952 19.8983ZM9.13609 19.5836L17.0754 11.6442L15.5117 10.0805L7.57238 18.0199L9.13609 19.5836ZM14.4511 9.01987L6.51172 16.9592L4.94609 15.3936L12.8854 7.45424L14.4511 9.01987ZM16.042 8.48954L18.1361 10.5836L20.0713 8.64833L15.8813 4.45833L13.9461 6.39358L16.042 8.48954Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
443
packages/noodl-editor/693.bundle.js
Normal file
@@ -0,0 +1,443 @@
|
|||||||
|
"use strict";
|
||||||
|
(global["webpackChunknoodl_editor"] = global["webpackChunknoodl_editor"] || []).push([[693,933],{
|
||||||
|
|
||||||
|
/***/ 24933:
|
||||||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||||
|
|
||||||
|
__webpack_require__.r(__webpack_exports__);
|
||||||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||||
|
/* harmony export */ conf: () => (/* binding */ conf),
|
||||||
|
/* harmony export */ language: () => (/* binding */ language)
|
||||||
|
/* harmony export */ });
|
||||||
|
/* harmony import */ var _editor_editor_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(15618);
|
||||||
|
/*!-----------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
|
||||||
|
*-----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||||
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||||
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||||
|
var __copyProps = (to, from, except, desc) => {
|
||||||
|
if (from && typeof from === "object" || typeof from === "function") {
|
||||||
|
for (let key of __getOwnPropNames(from))
|
||||||
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||||
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||||
|
}
|
||||||
|
return to;
|
||||||
|
};
|
||||||
|
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
||||||
|
|
||||||
|
// src/fillers/monaco-editor-core.ts
|
||||||
|
var monaco_editor_core_exports = {};
|
||||||
|
__reExport(monaco_editor_core_exports, _editor_editor_api_js__WEBPACK_IMPORTED_MODULE_0__);
|
||||||
|
|
||||||
|
|
||||||
|
// src/basic-languages/typescript/typescript.ts
|
||||||
|
var conf = {
|
||||||
|
wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,
|
||||||
|
comments: {
|
||||||
|
lineComment: "//",
|
||||||
|
blockComment: ["/*", "*/"]
|
||||||
|
},
|
||||||
|
brackets: [
|
||||||
|
["{", "}"],
|
||||||
|
["[", "]"],
|
||||||
|
["(", ")"]
|
||||||
|
],
|
||||||
|
onEnterRules: [
|
||||||
|
{
|
||||||
|
beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,
|
||||||
|
afterText: /^\s*\*\/$/,
|
||||||
|
action: {
|
||||||
|
indentAction: monaco_editor_core_exports.languages.IndentAction.IndentOutdent,
|
||||||
|
appendText: " * "
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,
|
||||||
|
action: {
|
||||||
|
indentAction: monaco_editor_core_exports.languages.IndentAction.None,
|
||||||
|
appendText: " * "
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
beforeText: /^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/,
|
||||||
|
action: {
|
||||||
|
indentAction: monaco_editor_core_exports.languages.IndentAction.None,
|
||||||
|
appendText: "* "
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
beforeText: /^(\t|(\ \ ))*\ \*\/\s*$/,
|
||||||
|
action: {
|
||||||
|
indentAction: monaco_editor_core_exports.languages.IndentAction.None,
|
||||||
|
removeText: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
autoClosingPairs: [
|
||||||
|
{ open: "{", close: "}" },
|
||||||
|
{ open: "[", close: "]" },
|
||||||
|
{ open: "(", close: ")" },
|
||||||
|
{ open: '"', close: '"', notIn: ["string"] },
|
||||||
|
{ open: "'", close: "'", notIn: ["string", "comment"] },
|
||||||
|
{ open: "`", close: "`", notIn: ["string", "comment"] },
|
||||||
|
{ open: "/**", close: " */", notIn: ["string"] }
|
||||||
|
],
|
||||||
|
folding: {
|
||||||
|
markers: {
|
||||||
|
start: new RegExp("^\\s*//\\s*#?region\\b"),
|
||||||
|
end: new RegExp("^\\s*//\\s*#?endregion\\b")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var language = {
|
||||||
|
defaultToken: "invalid",
|
||||||
|
tokenPostfix: ".ts",
|
||||||
|
keywords: [
|
||||||
|
"abstract",
|
||||||
|
"any",
|
||||||
|
"as",
|
||||||
|
"asserts",
|
||||||
|
"bigint",
|
||||||
|
"boolean",
|
||||||
|
"break",
|
||||||
|
"case",
|
||||||
|
"catch",
|
||||||
|
"class",
|
||||||
|
"continue",
|
||||||
|
"const",
|
||||||
|
"constructor",
|
||||||
|
"debugger",
|
||||||
|
"declare",
|
||||||
|
"default",
|
||||||
|
"delete",
|
||||||
|
"do",
|
||||||
|
"else",
|
||||||
|
"enum",
|
||||||
|
"export",
|
||||||
|
"extends",
|
||||||
|
"false",
|
||||||
|
"finally",
|
||||||
|
"for",
|
||||||
|
"from",
|
||||||
|
"function",
|
||||||
|
"get",
|
||||||
|
"if",
|
||||||
|
"implements",
|
||||||
|
"import",
|
||||||
|
"in",
|
||||||
|
"infer",
|
||||||
|
"instanceof",
|
||||||
|
"interface",
|
||||||
|
"is",
|
||||||
|
"keyof",
|
||||||
|
"let",
|
||||||
|
"module",
|
||||||
|
"namespace",
|
||||||
|
"never",
|
||||||
|
"new",
|
||||||
|
"null",
|
||||||
|
"number",
|
||||||
|
"object",
|
||||||
|
"out",
|
||||||
|
"package",
|
||||||
|
"private",
|
||||||
|
"protected",
|
||||||
|
"public",
|
||||||
|
"override",
|
||||||
|
"readonly",
|
||||||
|
"require",
|
||||||
|
"global",
|
||||||
|
"return",
|
||||||
|
"set",
|
||||||
|
"static",
|
||||||
|
"string",
|
||||||
|
"super",
|
||||||
|
"switch",
|
||||||
|
"symbol",
|
||||||
|
"this",
|
||||||
|
"throw",
|
||||||
|
"true",
|
||||||
|
"try",
|
||||||
|
"type",
|
||||||
|
"typeof",
|
||||||
|
"undefined",
|
||||||
|
"unique",
|
||||||
|
"unknown",
|
||||||
|
"var",
|
||||||
|
"void",
|
||||||
|
"while",
|
||||||
|
"with",
|
||||||
|
"yield",
|
||||||
|
"async",
|
||||||
|
"await",
|
||||||
|
"of"
|
||||||
|
],
|
||||||
|
operators: [
|
||||||
|
"<=",
|
||||||
|
">=",
|
||||||
|
"==",
|
||||||
|
"!=",
|
||||||
|
"===",
|
||||||
|
"!==",
|
||||||
|
"=>",
|
||||||
|
"+",
|
||||||
|
"-",
|
||||||
|
"**",
|
||||||
|
"*",
|
||||||
|
"/",
|
||||||
|
"%",
|
||||||
|
"++",
|
||||||
|
"--",
|
||||||
|
"<<",
|
||||||
|
"</",
|
||||||
|
">>",
|
||||||
|
">>>",
|
||||||
|
"&",
|
||||||
|
"|",
|
||||||
|
"^",
|
||||||
|
"!",
|
||||||
|
"~",
|
||||||
|
"&&",
|
||||||
|
"||",
|
||||||
|
"??",
|
||||||
|
"?",
|
||||||
|
":",
|
||||||
|
"=",
|
||||||
|
"+=",
|
||||||
|
"-=",
|
||||||
|
"*=",
|
||||||
|
"**=",
|
||||||
|
"/=",
|
||||||
|
"%=",
|
||||||
|
"<<=",
|
||||||
|
">>=",
|
||||||
|
">>>=",
|
||||||
|
"&=",
|
||||||
|
"|=",
|
||||||
|
"^=",
|
||||||
|
"@"
|
||||||
|
],
|
||||||
|
symbols: /[=><!~?:&|+\-*\/\^%]+/,
|
||||||
|
escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
|
||||||
|
digits: /\d+(_+\d+)*/,
|
||||||
|
octaldigits: /[0-7]+(_+[0-7]+)*/,
|
||||||
|
binarydigits: /[0-1]+(_+[0-1]+)*/,
|
||||||
|
hexdigits: /[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,
|
||||||
|
regexpctl: /[(){}\[\]\$\^|\-*+?\.]/,
|
||||||
|
regexpesc: /\\(?:[bBdDfnrstvwWn0\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/,
|
||||||
|
tokenizer: {
|
||||||
|
root: [[/[{}]/, "delimiter.bracket"], { include: "common" }],
|
||||||
|
common: [
|
||||||
|
[
|
||||||
|
/[a-z_$][\w$]*/,
|
||||||
|
{
|
||||||
|
cases: {
|
||||||
|
"@keywords": "keyword",
|
||||||
|
"@default": "identifier"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[/[A-Z][\w\$]*/, "type.identifier"],
|
||||||
|
{ include: "@whitespace" },
|
||||||
|
[
|
||||||
|
/\/(?=([^\\\/]|\\.)+\/([dgimsuy]*)(\s*)(\.|;|,|\)|\]|\}|$))/,
|
||||||
|
{ token: "regexp", bracket: "@open", next: "@regexp" }
|
||||||
|
],
|
||||||
|
[/[()\[\]]/, "@brackets"],
|
||||||
|
[/[<>](?!@symbols)/, "@brackets"],
|
||||||
|
[/!(?=([^=]|$))/, "delimiter"],
|
||||||
|
[
|
||||||
|
/@symbols/,
|
||||||
|
{
|
||||||
|
cases: {
|
||||||
|
"@operators": "delimiter",
|
||||||
|
"@default": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[/(@digits)[eE]([\-+]?(@digits))?/, "number.float"],
|
||||||
|
[/(@digits)\.(@digits)([eE][\-+]?(@digits))?/, "number.float"],
|
||||||
|
[/0[xX](@hexdigits)n?/, "number.hex"],
|
||||||
|
[/0[oO]?(@octaldigits)n?/, "number.octal"],
|
||||||
|
[/0[bB](@binarydigits)n?/, "number.binary"],
|
||||||
|
[/(@digits)n?/, "number"],
|
||||||
|
[/[;,.]/, "delimiter"],
|
||||||
|
[/"([^"\\]|\\.)*$/, "string.invalid"],
|
||||||
|
[/'([^'\\]|\\.)*$/, "string.invalid"],
|
||||||
|
[/"/, "string", "@string_double"],
|
||||||
|
[/'/, "string", "@string_single"],
|
||||||
|
[/`/, "string", "@string_backtick"]
|
||||||
|
],
|
||||||
|
whitespace: [
|
||||||
|
[/[ \t\r\n]+/, ""],
|
||||||
|
[/\/\*\*(?!\/)/, "comment.doc", "@jsdoc"],
|
||||||
|
[/\/\*/, "comment", "@comment"],
|
||||||
|
[/\/\/.*$/, "comment"]
|
||||||
|
],
|
||||||
|
comment: [
|
||||||
|
[/[^\/*]+/, "comment"],
|
||||||
|
[/\*\//, "comment", "@pop"],
|
||||||
|
[/[\/*]/, "comment"]
|
||||||
|
],
|
||||||
|
jsdoc: [
|
||||||
|
[/[^\/*]+/, "comment.doc"],
|
||||||
|
[/\*\//, "comment.doc", "@pop"],
|
||||||
|
[/[\/*]/, "comment.doc"]
|
||||||
|
],
|
||||||
|
regexp: [
|
||||||
|
[
|
||||||
|
/(\{)(\d+(?:,\d*)?)(\})/,
|
||||||
|
["regexp.escape.control", "regexp.escape.control", "regexp.escape.control"]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
/(\[)(\^?)(?=(?:[^\]\\\/]|\\.)+)/,
|
||||||
|
["regexp.escape.control", { token: "regexp.escape.control", next: "@regexrange" }]
|
||||||
|
],
|
||||||
|
[/(\()(\?:|\?=|\?!)/, ["regexp.escape.control", "regexp.escape.control"]],
|
||||||
|
[/[()]/, "regexp.escape.control"],
|
||||||
|
[/@regexpctl/, "regexp.escape.control"],
|
||||||
|
[/[^\\\/]/, "regexp"],
|
||||||
|
[/@regexpesc/, "regexp.escape"],
|
||||||
|
[/\\\./, "regexp.invalid"],
|
||||||
|
[/(\/)([dgimsuy]*)/, [{ token: "regexp", bracket: "@close", next: "@pop" }, "keyword.other"]]
|
||||||
|
],
|
||||||
|
regexrange: [
|
||||||
|
[/-/, "regexp.escape.control"],
|
||||||
|
[/\^/, "regexp.invalid"],
|
||||||
|
[/@regexpesc/, "regexp.escape"],
|
||||||
|
[/[^\]]/, "regexp"],
|
||||||
|
[
|
||||||
|
/\]/,
|
||||||
|
{
|
||||||
|
token: "regexp.escape.control",
|
||||||
|
next: "@pop",
|
||||||
|
bracket: "@close"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
string_double: [
|
||||||
|
[/[^\\"]+/, "string"],
|
||||||
|
[/@escapes/, "string.escape"],
|
||||||
|
[/\\./, "string.escape.invalid"],
|
||||||
|
[/"/, "string", "@pop"]
|
||||||
|
],
|
||||||
|
string_single: [
|
||||||
|
[/[^\\']+/, "string"],
|
||||||
|
[/@escapes/, "string.escape"],
|
||||||
|
[/\\./, "string.escape.invalid"],
|
||||||
|
[/'/, "string", "@pop"]
|
||||||
|
],
|
||||||
|
string_backtick: [
|
||||||
|
[/\$\{/, { token: "delimiter.bracket", next: "@bracketCounting" }],
|
||||||
|
[/[^\\`$]+/, "string"],
|
||||||
|
[/@escapes/, "string.escape"],
|
||||||
|
[/\\./, "string.escape.invalid"],
|
||||||
|
[/`/, "string", "@pop"]
|
||||||
|
],
|
||||||
|
bracketCounting: [
|
||||||
|
[/\{/, "delimiter.bracket", "@bracketCounting"],
|
||||||
|
[/\}/, "delimiter.bracket", "@pop"],
|
||||||
|
{ include: "common" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 46693:
|
||||||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||||
|
|
||||||
|
__webpack_require__.r(__webpack_exports__);
|
||||||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||||
|
/* harmony export */ conf: () => (/* binding */ conf),
|
||||||
|
/* harmony export */ language: () => (/* binding */ language)
|
||||||
|
/* harmony export */ });
|
||||||
|
/* harmony import */ var _typescript_typescript_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24933);
|
||||||
|
/*!-----------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
|
||||||
|
*-----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
// src/basic-languages/javascript/javascript.ts
|
||||||
|
|
||||||
|
var conf = _typescript_typescript_js__WEBPACK_IMPORTED_MODULE_0__.conf;
|
||||||
|
var language = {
|
||||||
|
defaultToken: "invalid",
|
||||||
|
tokenPostfix: ".js",
|
||||||
|
keywords: [
|
||||||
|
"break",
|
||||||
|
"case",
|
||||||
|
"catch",
|
||||||
|
"class",
|
||||||
|
"continue",
|
||||||
|
"const",
|
||||||
|
"constructor",
|
||||||
|
"debugger",
|
||||||
|
"default",
|
||||||
|
"delete",
|
||||||
|
"do",
|
||||||
|
"else",
|
||||||
|
"export",
|
||||||
|
"extends",
|
||||||
|
"false",
|
||||||
|
"finally",
|
||||||
|
"for",
|
||||||
|
"from",
|
||||||
|
"function",
|
||||||
|
"get",
|
||||||
|
"if",
|
||||||
|
"import",
|
||||||
|
"in",
|
||||||
|
"instanceof",
|
||||||
|
"let",
|
||||||
|
"new",
|
||||||
|
"null",
|
||||||
|
"return",
|
||||||
|
"set",
|
||||||
|
"super",
|
||||||
|
"switch",
|
||||||
|
"symbol",
|
||||||
|
"this",
|
||||||
|
"throw",
|
||||||
|
"true",
|
||||||
|
"try",
|
||||||
|
"typeof",
|
||||||
|
"undefined",
|
||||||
|
"var",
|
||||||
|
"void",
|
||||||
|
"while",
|
||||||
|
"with",
|
||||||
|
"yield",
|
||||||
|
"async",
|
||||||
|
"await",
|
||||||
|
"of"
|
||||||
|
],
|
||||||
|
typeKeywords: [],
|
||||||
|
operators: _typescript_typescript_js__WEBPACK_IMPORTED_MODULE_0__.language.operators,
|
||||||
|
symbols: _typescript_typescript_js__WEBPACK_IMPORTED_MODULE_0__.language.symbols,
|
||||||
|
escapes: _typescript_typescript_js__WEBPACK_IMPORTED_MODULE_0__.language.escapes,
|
||||||
|
digits: _typescript_typescript_js__WEBPACK_IMPORTED_MODULE_0__.language.digits,
|
||||||
|
octaldigits: _typescript_typescript_js__WEBPACK_IMPORTED_MODULE_0__.language.octaldigits,
|
||||||
|
binarydigits: _typescript_typescript_js__WEBPACK_IMPORTED_MODULE_0__.language.binarydigits,
|
||||||
|
hexdigits: _typescript_typescript_js__WEBPACK_IMPORTED_MODULE_0__.language.hexdigits,
|
||||||
|
regexpctl: _typescript_typescript_js__WEBPACK_IMPORTED_MODULE_0__.language.regexpctl,
|
||||||
|
regexpesc: _typescript_typescript_js__WEBPACK_IMPORTED_MODULE_0__.language.regexpesc,
|
||||||
|
tokenizer: _typescript_typescript_js__WEBPACK_IMPORTED_MODULE_0__.language.tokenizer
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/***/ })
|
||||||
|
|
||||||
|
}]);
|
||||||
|
//# sourceMappingURL=693.bundle.js.map
|
||||||
1
packages/noodl-editor/693.bundle.js.map
Normal file
12
packages/noodl-editor/6b6b586d7399d96df56c5d0cf2496ffc.svg
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<svg width="31" height="31" viewBox="0 0 31 31" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M3.93994 4.9917C3.93994 5.40591 4.27573 5.7417 4.68994 5.7417C5.10415 5.7417 5.43994 5.40591 5.43994 4.9917C5.43994 4.57749 5.10415 4.2417 4.68994 4.2417C4.27573 4.2417 3.93994 4.57749 3.93994 4.9917Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M3.93994 18.7334C3.93994 19.1476 4.27573 19.4834 4.68994 19.4834C5.10415 19.4834 5.43994 19.1476 5.43994 18.7334C5.43994 18.3192 5.10415 17.9834 4.68994 17.9834C4.27573 17.9834 3.93994 18.3192 3.93994 18.7334Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M24.8335 18.7334C24.8335 19.1476 25.1693 19.4834 25.5835 19.4834C25.9977 19.4834 26.3335 19.1476 26.3335 18.7334C26.3335 18.3192 25.9977 17.9834 25.5835 17.9834C25.1693 17.9834 24.8335 18.3192 24.8335 18.7334Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M3.93994 11.8623C3.93994 12.2765 4.27573 12.6123 4.68994 12.6123C5.10415 12.6123 5.43994 12.2765 5.43994 11.8623C5.43994 11.4481 5.10415 11.1123 4.68994 11.1123C4.27573 11.1123 3.93994 11.4481 3.93994 11.8623Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M3.93994 25.6045C3.93994 26.0187 4.27573 26.3545 4.68994 26.3545C5.10415 26.3545 5.43994 26.0187 5.43994 25.6045C5.43994 25.1903 5.10415 24.8545 4.68994 24.8545C4.27573 24.8545 3.93994 25.1903 3.93994 25.6045Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M17.6821 25.6045C17.6821 26.0187 18.0179 26.3545 18.4321 26.3545C18.8463 26.3545 19.1821 26.0187 19.1821 25.6045C19.1821 25.1903 18.8463 24.8545 18.4321 24.8545C18.0179 24.8545 17.6821 25.1903 17.6821 25.6045Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M10.811 25.6045C10.811 26.0187 11.1468 26.3545 11.561 26.3545C11.9752 26.3545 12.311 26.0187 12.311 25.6045C12.311 25.1903 11.9752 24.8545 11.561 24.8545C11.1468 24.8545 10.811 25.1903 10.811 25.6045Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M10.811 4.9917C10.811 5.40591 11.1468 5.7417 11.561 5.7417C11.9752 5.7417 12.311 5.40591 12.311 4.9917C12.311 4.57749 11.9752 4.2417 11.561 4.2417C11.1468 4.2417 10.811 4.57749 10.811 4.9917Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M24.5532 25.6045C24.5532 26.0187 24.889 26.3545 25.3032 26.3545C25.7174 26.3545 26.0532 26.0187 26.0532 25.6045C26.0532 25.1903 25.7174 24.8545 25.3032 24.8545C24.889 24.8545 24.5532 25.1903 24.5532 25.6045Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M24.5532 11.9919L24.5532 13.0079C24.5532 13.4221 24.889 13.7579 25.3032 13.7579C25.7174 13.7579 26.0532 13.4221 26.0532 13.0079L26.0532 11.9919C26.0532 7.71167 22.5834 4.24188 18.3032 4.24188L17.2872 4.24188C16.873 4.24188 16.5372 4.57767 16.5372 4.99188C16.5372 5.40609 16.873 5.74188 17.2872 5.74188L18.3032 5.74188C21.755 5.74188 24.5532 8.5401 24.5532 11.9919Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.6 KiB |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="31" height="31" viewBox="0 0 31 31" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.30371 10.8249C3.30371 10.3894 3.65682 10.0363 4.09241 10.0363H13.3596C13.7952 10.0363 14.1483 10.3894 14.1483 10.8249V20.0921C14.1483 20.5277 13.7952 20.8808 13.3596 20.8808H4.09241C3.65682 20.8808 3.30371 20.5277 3.30371 20.0921V10.8249ZM10.4483 13.1642C10.7533 12.8592 10.7533 12.3648 10.4483 12.0599C10.1434 11.755 9.64904 11.755 9.34411 12.0599L6.49756 14.9065C6.19263 15.2114 6.19263 15.7058 6.49756 16.0107L9.34411 18.8573C9.64904 19.1622 10.1434 19.1622 10.4483 18.8573C10.7533 18.5523 10.7533 18.058 10.4483 17.753L8.15391 15.4586L10.4483 13.1642Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M26.8037 20.0914C26.8037 20.5269 26.4506 20.88 26.0151 20.88L16.7495 20.88C16.314 20.88 15.9609 20.5269 15.9609 20.0914L15.9609 10.8258C15.9609 10.3903 16.314 10.0372 16.7495 10.0372L26.0151 10.0372C26.4506 10.0372 26.8037 10.3903 26.8037 10.8258L26.8037 20.0914ZM19.6602 17.7526C19.3554 18.0575 19.3554 18.5518 19.6602 18.8566C19.9651 19.1615 20.4594 19.1615 20.7643 18.8566L23.6103 16.0106C23.9152 15.7057 23.9152 15.2114 23.6103 14.9065L20.7643 12.0605C20.4594 11.7556 19.9651 11.7556 19.6602 12.0605C19.3554 12.3653 19.3554 12.8596 19.6602 13.1645L21.9543 15.4585L19.6602 17.7526Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.1367 4.17548C21.1367 3.76126 20.8009 3.42548 20.3867 3.42548L3.88672 3.42548C3.47251 3.42548 3.13672 3.76126 3.13672 4.17548C3.13672 4.58969 3.47251 4.92548 3.88672 4.92548L20.3867 4.92548C20.8009 4.92548 21.1367 4.58969 21.1367 4.17548Z" fill="#F5F5F5" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.421 6.93824C12.5105 6.97485 12.5944 7.0295 12.6671 7.10218L16.3648 10.7999C16.6577 11.0928 16.6577 11.5676 16.3648 11.8605C16.0719 12.1534 15.597 12.1534 15.3041 11.8605L12.8868 9.44316L12.8868 21.7009C12.8868 22.1151 12.551 22.4509 12.1368 22.4509C11.7226 22.4509 11.3868 22.1151 11.3868 21.7009L11.3868 9.44318L8.96943 11.8605C8.67654 12.1534 8.20167 12.1534 7.90877 11.8605C7.61588 11.5676 7.61588 11.0928 7.90877 10.7999L11.6044 7.10426C11.6111 7.09751 11.6179 7.09088 11.6248 7.08439C11.7589 6.95916 11.9389 6.88251 12.1368 6.88251C12.2374 6.88251 12.3334 6.90231 12.421 6.93824Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M14 2.80719L5.7 2.80721V3.55721L5.7 2.80721C5.29808 2.80722 4.92403 2.97875 4.65673 3.26515C4.39107 3.54979 4.25 3.92545 4.25 4.30721V20.8072C4.25 21.189 4.39107 21.5646 4.65673 21.8493C4.92404 22.1357 5.29809 22.3072 5.7 22.3072H18.3C18.7019 22.3072 19.076 22.1357 19.3433 21.8493C19.6089 21.5646 19.75 21.189 19.75 20.8072V8.55721C19.75 8.3583 19.671 8.16754 19.5303 8.02689L14.5303 3.02686C14.3897 2.88621 14.1989 2.80719 14 2.80719ZM8.32324 11.5701C8.32324 11.1007 8.7038 10.7201 9.17324 10.7201H14.8271C15.2965 10.7201 15.6771 11.1007 15.6771 11.5701C15.6771 12.0395 15.2965 12.4201 14.8271 12.4201H9.17324C8.7038 12.4201 8.32324 12.0395 8.32324 11.5701ZM8.32324 15.5701C8.32324 15.1007 8.7038 14.7201 9.17324 14.7201H14.8271C15.2965 14.7201 15.6771 15.1007 15.6771 15.5701C15.6771 16.0395 15.2965 16.4201 14.8271 16.4201H9.17324C8.7038 16.4201 8.32324 16.0395 8.32324 15.5701Z" fill="#B8B8B8"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.227 6.09906C14.9176 5.83861 13.5604 5.97229 12.327 6.48318C11.0936 6.99407 10.0394 7.85923 9.29774 8.96926C8.55604 10.0793 8.16016 11.3843 8.16016 12.7194C8.16016 13.1336 7.82437 13.4694 7.41016 13.4694C6.99594 13.4694 6.66016 13.1336 6.66016 12.7194C6.66016 11.958 6.76551 11.2045 6.97001 10.4796C6.86704 10.4727 6.76379 10.4693 6.66044 10.4694C5.46696 10.4694 4.32209 10.9435 3.47818 11.7874C2.63426 12.6313 2.16016 13.7759 2.16016 14.9694C2.16016 16.1628 2.63426 17.3074 3.47818 18.1513C4.32209 18.9953 5.46668 19.4694 6.66016 19.4694L14.9102 19.4694C16.2452 19.4694 17.5502 19.0735 18.6603 18.3318C19.7703 17.5901 20.6355 16.5359 21.1463 15.3025C21.6572 14.0691 21.7909 12.7119 21.5305 11.4025C21.27 10.0931 20.6271 8.8904 19.6831 7.94639C18.7391 7.00239 17.5364 6.35951 16.227 6.09906ZM7.53052 9.03107C7.68438 8.72321 7.85791 8.42418 8.05053 8.13591C8.95705 6.7792 10.2455 5.72178 11.753 5.09736C13.2605 4.47293 14.9193 4.30956 16.5197 4.62789C18.12 4.94621 19.59 5.73195 20.7438 6.88573C21.8976 8.03952 22.6833 9.50953 23.0016 11.1099C23.32 12.7102 23.1566 14.369 22.5322 15.8765C21.9077 17.384 20.8503 18.6725 19.4936 19.579C18.1369 20.4855 16.5419 20.9694 14.9102 20.9694L6.66016 20.9694C5.06886 20.9694 3.54273 20.3372 2.41752 19.212C1.2923 18.0868 0.660156 16.5607 0.660156 14.9694C0.660156 13.3781 1.2923 11.8519 2.41752 10.7267C3.54267 9.60157 5.06868 8.96944 6.65987 8.96936M7.53052 9.03107C7.24249 8.98993 6.95136 8.96927 6.65987 8.96936L7.53052 9.03107Z" fill="#B8B8B8"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.5035 13.3806C12.2106 13.6735 11.7357 13.6735 11.4428 13.3806C11.1499 13.0877 11.1499 12.6129 11.4428 12.32L14.4196 9.34315C14.5227 9.2401 14.6483 9.1733 14.7805 9.14277C14.8083 9.13633 14.8367 9.13145 14.8657 9.1282C14.9016 9.12416 14.9379 9.12271 14.974 9.12387C15.1772 9.13021 15.36 9.21736 15.4914 9.35424L18.4571 12.32C18.75 12.6129 18.75 13.0877 18.4571 13.3806C18.1642 13.6735 17.6893 13.6735 17.3964 13.3806L15.7002 11.6844L15.7002 16.8984C15.7002 17.3126 15.3644 17.6484 14.9502 17.6484C14.536 17.6484 14.2002 17.3126 14.2002 16.8984L14.2002 11.6839L12.5035 13.3806Z" fill="#B8B8B8"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="31" height="31" viewBox="0 0 31 31" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.26204 3.7085H24.8454C25.9269 3.7085 26.8037 4.58527 26.8037 5.66683V25.2502C26.8037 26.3317 25.9269 27.2085 24.8454 27.2085H5.26204C4.18049 27.2085 3.30371 26.3317 3.30371 25.2502V5.66683C3.30371 4.58527 4.18049 3.7085 5.26204 3.7085ZM10.4307 12.0092V10.7823H14.1834V20.7632H12.5119C12.0312 20.7632 11.6416 21.1529 11.6416 21.6336C11.6416 22.1143 12.0312 22.5039 12.5119 22.5039H17.6179C18.0986 22.5039 18.4883 22.1143 18.4883 21.6336C18.4883 21.1529 18.0986 20.7632 17.6179 20.7632H15.9242V10.7823H19.677V12.0092C19.677 12.4899 20.0667 12.8796 20.5474 12.8796C21.028 12.8796 21.4177 12.4899 21.4177 12.0092V10.086C21.4177 9.50919 20.9501 9.04158 20.3733 9.04158H9.73436C9.15752 9.04158 8.68991 9.50919 8.68991 10.086V12.0092C8.68991 12.4899 9.07959 12.8796 9.56028 12.8796C10.041 12.8796 10.4307 12.4899 10.4307 12.0092Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 995 B |
@@ -0,0 +1,6 @@
|
|||||||
|
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.75 5.41052C3.75 4.99631 4.08579 4.66052 4.5 4.66052H10.5C10.9142 4.66052 11.25 4.99631 11.25 5.41052V11.4105C11.25 11.8247 10.9142 12.1605 10.5 12.1605H4.5C4.08579 12.1605 3.75 11.8247 3.75 11.4105V5.41052ZM5.25 6.16052V10.6605H9.75V6.16052H5.25Z" fill="#B8B8B8"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.75 5.41052C12.75 4.99631 13.0858 4.66052 13.5 4.66052H19.5C19.9142 4.66052 20.25 4.99631 20.25 5.41052V11.4105C20.25 11.8247 19.9142 12.1605 19.5 12.1605H13.5C13.0858 12.1605 12.75 11.8247 12.75 11.4105V5.41052ZM14.25 6.16052V10.6605H18.75V6.16052H14.25Z" fill="#B8B8B8"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.75 14.4105C3.75 13.9963 4.08579 13.6605 4.5 13.6605H10.5C10.9142 13.6605 11.25 13.9963 11.25 14.4105V20.4105C11.25 20.8247 10.9142 21.1605 10.5 21.1605H4.5C4.08579 21.1605 3.75 20.8247 3.75 20.4105V14.4105ZM5.25 15.1605V19.6605H9.75V15.1605H5.25Z" fill="#B8B8B8"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.75 14.4105C12.75 13.9963 13.0858 13.6605 13.5 13.6605H19.5C19.9142 13.6605 20.25 13.9963 20.25 14.4105V20.4105C20.25 20.8247 19.9142 21.1605 19.5 21.1605H13.5C13.0858 21.1605 12.75 20.8247 12.75 20.4105V14.4105ZM14.25 15.1605V19.6605H18.75V15.1605H14.25Z" fill="#B8B8B8"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="31" height="31" viewBox="0 0 31 31" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M15.4777 21.8874L20.3339 24.9707C20.9602 25.3658 21.7311 24.778 21.548 24.0554L20.1412 18.5247C20.1032 18.3714 20.1092 18.2104 20.1587 18.0604C20.2081 17.9104 20.2989 17.7774 20.4207 17.6768L24.7758 14.0442C25.3443 13.5721 25.0553 12.6182 24.3133 12.57L18.6285 12.2039C18.4734 12.1948 18.3242 12.1408 18.1993 12.0484C18.0744 11.956 17.9791 11.8292 17.9251 11.6836L15.8053 6.34557C15.7492 6.19131 15.647 6.05805 15.5125 5.96389C15.3781 5.86972 15.2179 5.81921 15.0538 5.81921C14.8896 5.81921 14.7294 5.86972 14.595 5.96389C14.4605 6.05805 14.3583 6.19131 14.3022 6.34557L12.1824 11.6836C12.1284 11.8292 12.0331 11.956 11.9082 12.0484C11.7833 12.1408 11.6341 12.1948 11.479 12.2039L5.79417 12.57C5.05225 12.6182 4.76318 13.5721 5.33167 14.0442L9.68686 17.6768C9.80859 17.7774 9.8994 17.9104 9.94884 18.0604C9.99827 18.2104 10.0043 18.3714 9.96628 18.5247L8.66551 23.6507C8.4439 24.5179 9.36889 25.2212 10.1108 24.7491L14.6298 21.8874C14.7565 21.8068 14.9036 21.764 15.0538 21.764C15.2039 21.764 15.351 21.8068 15.4777 21.8874Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,7 @@
|
|||||||
|
<svg width="31" height="31" viewBox="0 0 31 31" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.18335 25.1716C9.9982 25.1716 11.4694 23.7003 11.4694 21.8855C11.4694 20.0706 9.9982 18.5994 8.18335 18.5994C6.36849 18.5994 4.89727 20.0706 4.89727 21.8855C4.89727 23.7003 6.36849 25.1716 8.18335 25.1716ZM12.6694 21.8855C12.6694 24.3631 10.6609 26.3716 8.18335 26.3716C5.70575 26.3716 3.69727 24.3631 3.69727 21.8855C3.69727 19.4079 5.70575 17.3994 8.18335 17.3994C10.6609 17.3994 12.6694 19.4079 12.6694 21.8855Z" fill="#F5F5F5"/>
|
||||||
|
<path d="M8.18357 22.9173C8.75337 22.9173 9.21528 22.4554 9.21528 21.8856C9.21528 21.3158 8.75337 20.8539 8.18357 20.8539C7.61377 20.8539 7.15186 21.3158 7.15186 21.8856C7.15186 22.4554 7.61377 22.9173 8.18357 22.9173Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.18335 12.3176C9.9982 12.3176 11.4694 10.8463 11.4694 9.03149C11.4694 7.21664 9.9982 5.74541 8.18335 5.74541C6.36849 5.74541 4.89727 7.21664 4.89727 9.03149C4.89727 10.8463 6.36849 12.3176 8.18335 12.3176ZM12.6694 9.03149C12.6694 11.5091 10.6609 13.5176 8.18335 13.5176C5.70575 13.5176 3.69727 11.5091 3.69727 9.03149C3.69727 6.5539 5.70575 4.54541 8.18335 4.54541C10.6609 4.54541 12.6694 6.5539 12.6694 9.03149Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.8379 9.03149C15.8379 8.47921 16.2856 8.03149 16.8379 8.03149H26.4095C26.9618 8.03149 27.4095 8.47921 27.4095 9.03149C27.4095 9.58378 26.9618 10.0315 26.4095 10.0315H16.8379C16.2856 10.0315 15.8379 9.58378 15.8379 9.03149Z" fill="#F5F5F5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.8379 21.8856C15.8379 21.3333 16.2856 20.8856 16.8379 20.8856H26.4095C26.9618 20.8856 27.4095 21.3333 27.4095 21.8856C27.4095 22.4379 26.9618 22.8856 26.4095 22.8856H16.8379C16.2856 22.8856 15.8379 22.4379 15.8379 21.8856Z" fill="#F5F5F5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,6 @@
|
|||||||
|
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M17.457 7.92615H8.26953C7.90709 7.92615 7.61328 8.18198 7.61328 8.49758V11.3547C7.61328 11.6703 7.90709 11.9261 8.26953 11.9261H17.457C17.8195 11.9261 18.1133 11.6703 18.1133 11.3547V8.49758C18.1133 8.18198 17.8195 7.92615 17.457 7.92615Z" fill="#F5F5F5" />
|
||||||
|
<path d="M16.8008 13.4261H8.92578C8.61512 13.4261 8.36328 13.682 8.36328 13.9976V16.8547C8.36328 17.1703 8.61512 17.4261 8.92578 17.4261H16.8008C17.1114 17.4261 17.3633 17.1703 17.3633 16.8547V13.9976C17.3633 13.682 17.1114 13.4261 16.8008 13.4261Z" fill="#F5F5F5" />
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.8633 3.67615C13.2775 3.67615 13.6133 4.03433 13.6133 4.47617L13.6133 20.8761C13.6133 21.318 13.2775 21.6761 12.8633 21.6761C12.4491 21.6761 12.1133 21.318 12.1133 20.8761L12.1133 4.47617C12.1133 4.03433 12.4491 3.67615 12.8633 3.67615Z" fill="#F5F5F5" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 954 B |